From 2faaa1e36257c9909415f142e165e5ad74495a4e Mon Sep 17 00:00:00 2001 From: Matt Ettus Date: Tue, 9 Feb 2010 18:26:47 -0800 Subject: skeletons that don't work yet --- usrp2/top/safe_u1e/Makefile | 245 ++++++++++++++++++++++++++++ usrp2/top/safe_u1e/safe_u1e.v | 362 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 607 insertions(+) create mode 100644 usrp2/top/safe_u1e/Makefile create mode 100644 usrp2/top/safe_u1e/safe_u1e.v diff --git a/usrp2/top/safe_u1e/Makefile b/usrp2/top/safe_u1e/Makefile new file mode 100644 index 000000000..8fe77d554 --- /dev/null +++ b/usrp2/top/safe_u1e/Makefile @@ -0,0 +1,245 @@ +# +# Copyright 2008 Ettus Research LLC +# +# 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. +# + +################################################## +# xtclsh Shell and tcl Script Path +################################################## +#XTCLSH := /opt/Xilinx/10.1/ISE/bin/lin/xtclsh +XTCLSH := xtclsh +ISE_HELPER := ../tcl/ise_helper.tcl + +################################################## +# Project Setup +################################################## +BUILD_DIR := build/ +export TOP_MODULE := safe_u1e +export PROJ_FILE := $(BUILD_DIR)$(TOP_MODULE).ise + +################################################## +# Project Properties +################################################## +export PROJECT_PROPERTIES := \ +family "Spartan-3A DSP" \ +device xc3sd1800a \ +package cs484 \ +speed -4 \ +top_level_module_type "HDL" \ +synthesis_tool "XST (VHDL/Verilog)" \ +simulator "ISE Simulator (VHDL/Verilog)" \ +"Preferred Language" "Verilog" \ +"Enable Message Filtering" FALSE \ +"Display Incremental Messages" FALSE + +################################################## +# Sources +################################################## +export SOURCE_ROOT := ../../../ +export SOURCES := \ +control_lib/CRC16_D16.v \ +control_lib/atr_controller.v \ +control_lib/bin2gray.v \ +control_lib/dcache.v \ +control_lib/decoder_3_8.v \ +control_lib/dpram32.v \ +control_lib/gray2bin.v \ +control_lib/gray_send.v \ +control_lib/icache.v \ +control_lib/mux4.v \ +control_lib/mux8.v \ +control_lib/nsgpio.v \ +control_lib/ram_2port.v \ +control_lib/ram_harv_cache.v \ +control_lib/ram_loader.v \ +control_lib/setting_reg.v \ +control_lib/settings_bus.v \ +control_lib/srl.v \ +control_lib/system_control.v \ +control_lib/wb_1master.v \ +control_lib/wb_readback_mux.v \ +control_lib/simple_uart.v \ +control_lib/simple_uart_tx.v \ +control_lib/simple_uart_rx.v \ +control_lib/oneshot_2clk.v \ +control_lib/sd_spi.v \ +control_lib/sd_spi_wb.v \ +control_lib/wb_bridge_16_32.v \ +control_lib/reset_sync.v \ +simple_gemac/simple_gemac_wrapper.v \ +simple_gemac/simple_gemac.v \ +simple_gemac/simple_gemac_wb.v \ +simple_gemac/simple_gemac_tx.v \ +simple_gemac/simple_gemac_rx.v \ +simple_gemac/crc.v \ +simple_gemac/delay_line.v \ +simple_gemac/flow_ctrl_tx.v \ +simple_gemac/flow_ctrl_rx.v \ +simple_gemac/address_filter.v \ +simple_gemac/ll8_to_txmac.v \ +simple_gemac/rxmac_to_ll8.v \ +simple_gemac/miim/eth_miim.v \ +simple_gemac/miim/eth_clockgen.v \ +simple_gemac/miim/eth_outputcontrol.v \ +simple_gemac/miim/eth_shiftreg.v \ +control_lib/newfifo/buffer_int.v \ +control_lib/newfifo/buffer_pool.v \ +control_lib/newfifo/fifo_2clock.v \ +control_lib/newfifo/fifo_2clock_cascade.v \ +control_lib/newfifo/ll8_shortfifo.v \ +control_lib/newfifo/ll8_to_fifo36.v \ +control_lib/newfifo/fifo_short.v \ +control_lib/newfifo/fifo_long.v \ +control_lib/newfifo/fifo_cascade.v \ +control_lib/newfifo/fifo36_to_ll8.v \ +control_lib/longfifo.v \ +control_lib/shortfifo.v \ +control_lib/medfifo.v \ +coregen/fifo_xlnx_2Kx36_2clk.v \ +coregen/fifo_xlnx_2Kx36_2clk.xco \ +coregen/fifo_xlnx_512x36_2clk.v \ +coregen/fifo_xlnx_512x36_2clk.xco \ +coregen/fifo_xlnx_64x36_2clk.v \ +coregen/fifo_xlnx_64x36_2clk.xco \ +extram/wb_zbt16_b.v \ +opencores/8b10b/decode_8b10b.v \ +opencores/8b10b/encode_8b10b.v \ +opencores/aemb/rtl/verilog/aeMB_bpcu.v \ +opencores/aemb/rtl/verilog/aeMB_core_BE.v \ +opencores/aemb/rtl/verilog/aeMB_ctrl.v \ +opencores/aemb/rtl/verilog/aeMB_edk32.v \ +opencores/aemb/rtl/verilog/aeMB_ibuf.v \ +opencores/aemb/rtl/verilog/aeMB_regf.v \ +opencores/aemb/rtl/verilog/aeMB_xecu.v \ +opencores/i2c/rtl/verilog/i2c_master_bit_ctrl.v \ +opencores/i2c/rtl/verilog/i2c_master_byte_ctrl.v \ +opencores/i2c/rtl/verilog/i2c_master_defines.v \ +opencores/i2c/rtl/verilog/i2c_master_top.v \ +opencores/i2c/rtl/verilog/timescale.v \ +opencores/simple_pic/rtl/simple_pic.v \ +opencores/spi/rtl/verilog/spi_clgen.v \ +opencores/spi/rtl/verilog/spi_defines.v \ +opencores/spi/rtl/verilog/spi_shift.v \ +opencores/spi/rtl/verilog/spi_top.v \ +opencores/spi/rtl/verilog/timescale.v \ +sdr_lib/acc.v \ +sdr_lib/add2.v \ +sdr_lib/add2_and_round.v \ +sdr_lib/add2_and_round_reg.v \ +sdr_lib/add2_reg.v \ +sdr_lib/cic_dec_shifter.v \ +sdr_lib/cic_decim.v \ +sdr_lib/cic_int_shifter.v \ +sdr_lib/cic_interp.v \ +sdr_lib/cic_strober.v \ +sdr_lib/clip.v \ +sdr_lib/clip_reg.v \ +sdr_lib/cordic.v \ +sdr_lib/cordic_z24.v \ +sdr_lib/cordic_stage.v \ +sdr_lib/dsp_core_rx.v \ +sdr_lib/dsp_core_tx.v \ +sdr_lib/hb_dec.v \ +sdr_lib/hb_interp.v \ +sdr_lib/round.v \ +sdr_lib/round_reg.v \ +sdr_lib/rx_control.v \ +sdr_lib/rx_dcoffset.v \ +sdr_lib/sign_extend.v \ +sdr_lib/small_hb_dec.v \ +sdr_lib/small_hb_int.v \ +sdr_lib/tx_control.v \ +serdes/serdes.v \ +serdes/serdes_fc_rx.v \ +serdes/serdes_fc_tx.v \ +serdes/serdes_rx.v \ +serdes/serdes_tx.v \ +timing/time_receiver.v \ +timing/time_sender.v \ +timing/time_sync.v \ +timing/timer.v \ +top/u2_core/u2_core.v \ +top/safe_u1e/u1e.ucf \ +top/safe_u1e/safe_u1e.v + +################################################## +# Process Properties +################################################## +export SYNTHESIZE_PROPERTIES := \ +"Number of Clock Buffers" 6 \ +"Pack I/O Registers into IOBs" Yes \ +"Optimization Effort" High \ +"Optimize Instantiated Primitives" TRUE \ +"Register Balancing" Yes \ +"Use Clock Enable" Auto \ +"Use Synchronous Reset" Auto \ +"Use Synchronous Set" Auto + +export TRANSLATE_PROPERTIES := \ +"Macro Search Path" "$(shell pwd)/../../coregen/" + +export MAP_PROPERTIES := \ +"Allow Logic Optimization Across Hierarchy" TRUE \ +"Map to Input Functions" 4 \ +"Optimization Strategy (Cover Mode)" Speed \ +"Pack I/O Registers/Latches into IOBs" "For Inputs and Outputs" \ +"Perform Timing-Driven Packing and Placement" TRUE \ +"Map Effort Level" High \ +"Extra Effort" Normal \ +"Combinatorial Logic Optimization" TRUE \ +"Register Duplication" TRUE + +export PLACE_ROUTE_PROPERTIES := \ +"Place & Route Effort Level (Overall)" High + +export STATIC_TIMING_PROPERTIES := \ +"Number of Paths in Error/Verbose Report" 10 \ +"Report Type" "Error Report" + +export GEN_PROG_FILE_PROPERTIES := \ +"Configuration Rate" 6 \ +"Create Binary Configuration File" TRUE \ +"Done (Output Events)" 5 \ +"Enable Bitstream Compression" TRUE \ +"Enable Outputs (Output Events)" 6 + +export SIM_MODEL_PROPERTIES := "" + +################################################## +# Make Options +################################################## +all: + @echo make proj, check, synth, bin, or clean + +proj: + PROCESS_RUN="" $(XTCLSH) $(ISE_HELPER) + +check: + PROCESS_RUN="Check Syntax" $(XTCLSH) $(ISE_HELPER) + +synth: + PROCESS_RUN="Synthesize - XST" $(XTCLSH) $(ISE_HELPER) + +bin: + PROCESS_RUN="Generate Programming File" $(XTCLSH) $(ISE_HELPER) + +clean: + rm -rf $(BUILD_DIR) + + diff --git a/usrp2/top/safe_u1e/safe_u1e.v b/usrp2/top/safe_u1e/safe_u1e.v new file mode 100644 index 000000000..c880a9e55 --- /dev/null +++ b/usrp2/top/safe_u1e/safe_u1e.v @@ -0,0 +1,362 @@ +`timescale 1ns / 1ps +////////////////////////////////////////////////////////////////////////////////// + +module safe_u1e + ( + input CLK_FPGA_P, input CLK_FPGA_N, // Diff + + // ADC + //input ADC_clkout_p, //input ADC_clkout_n, + //input ADCA_12_p, //input ADCA_12_n, + //input ADCA_10_p, //input ADCA_10_n, + //input ADCA_8_p, //input ADCA_8_n, + //input ADCA_6_p, //input ADCA_6_n, + //input ADCA_4_p, //input ADCA_4_n, + //input ADCA_2_p, //input ADCA_2_n, + //input ADCA_0_p, //input ADCA_0_n, + //input ADCB_12_p, //input ADCB_12_n, + //input ADCB_10_p, //input ADCB_10_n, + //input ADCB_8_p, //input ADCB_8_n, + //input ADCB_6_p, //input ADCB_6_n, + //input ADCB_4_p, //input ADCB_4_n, + //input ADCB_2_p, //input ADCB_2_n, + //input ADCB_0_p, //input ADCB_0_n, + + // DAC + //output [15:0] DACA, + //output [15:0] DACB, + //input DAC_LOCK, // unused for now + + // DB IO Pins + //inout [15:0] io_tx, + //inout [15:0] io_rx, + + // Misc, debug + output [5:1] leds, // LED4 is shared w/INIT_B + //input FPGA_RESET, + //output [1:0] debug_clk, + //output [31:0] debug, + //output [3:1] TXD, //input [3:1] RXD, // UARTs + ////input [3:0] dipsw, // Forgot DIP Switches... + + // Clock Gen Control + //output [1:0] clk_en, + //output [1:0] clk_sel, + //input CLK_FUNC, // FIXME is an //input to control the 9510 + //input CLK_STATUS, + + //inout SCL, //inout SDA, // I2C + + // PPS + //input PPS_IN, //input PPS2_IN, + + // SPI + //output SEN_CLK, //output SCLK_CLK, //output MOSI_CLK, //input MISO_CLK, + //output SEN_DAC, //output SCLK_DAC, //output MOSI_DAC, //input MISO_DAC, + //output SEN_ADC, //output SCLK_ADC, //output MOSI_ADC, + //output SEN_TX_DB, //output SCLK_TX_DB, //output MOSI_TX_DB, //input MISO_TX_DB, + //output SEN_TX_DAC, //output SCLK_TX_DAC, //output MOSI_TX_DAC, + //output SEN_TX_ADC, //output SCLK_TX_ADC, //output MOSI_TX_ADC, //input MISO_TX_ADC, + //output SEN_RX_DB, //output SCLK_RX_DB, //output MOSI_RX_DB, //input MISO_RX_DB, + //output SEN_RX_DAC, //output SCLK_RX_DAC, //output MOSI_RX_DAC, + //output SEN_RX_ADC, //output SCLK_RX_ADC, //output MOSI_RX_ADC, //input MISO_RX_ADC, + + // GigE PHY + //input CLK_TO_MAC, + + //output reg [7:0] GMII_TXD, + //output reg GMII_TX_EN, + //output reg GMII_TX_ER, + //output GMII_GTX_CLK, + //input GMII_TX_CLK, // 100mbps clk + + //input GMII_RX_CLK, + //input [7:0] GMII_RXD, + //input GMII_RX_DV, + //input GMII_RX_ER, + //input GMII_COL, + //input GMII_CRS, + + //input PHY_INTn, // open drain + //inout MDIO, + //output MDC, + //output PHY_RESETn, + output ETH_LED + + //input POR, + + // Expansion + //input exp_time_in_p, //input exp_time_in_n, // Diff + //output exp_time_out_p, //output exp_time_out_n, // Diff + //input exp_user_in_p, //input exp_user_in_n, // Diff + //output exp_user_out_p, //output exp_user_out_n, // Diff + + // SERDES + //output ser_enable, + //output ser_prbsen, + //output ser_loopen, + //output ser_rx_en, + + //output ser_tx_clk, + //output reg [15:0] ser_t, + //output reg ser_tklsb, + //output reg ser_tkmsb, + + //input ser_rx_clk, + //input [15:0] ser_r, + //input ser_rklsb, + //input ser_rkmsb, + + // SRAM + //inout [35:0] RAM_D, + //output [20:0] RAM_A, + //output [3:0] RAM_BWn, + //output RAM_ZZ, + //output RAM_LDn, + //output RAM_OEn, + //output RAM_WEn, + //output RAM_CENn, + //output RAM_CLK, + + // SPI Flash + //output flash_cs, + //output flash_clk, + //output flash_mosi, + //input flash_miso + ); + + // FPGA-specific pins connections + wire clk_fpga, dsp_clk, clk_div, dcm_out, wb_clk, clock_ready; + + IBUFGDS clk_fpga_pin (.O(clk_fpga),.I(CLK_FPGA_P),.IB(CLK_FPGA_N)); + defparam clk_fpga_pin.IOSTANDARD = "LVPECL_25"; + + reg [31:0] ctr; + + always @(posedge clk_fpga) + ctr <= ctr + 1; + + assign {leds,ETH_LED} = ~ctr[29:24]; + + +/* + wire exp_time_in; + IBUFDS exp_time_in_pin (.O(exp_time_in),.I(exp_time_in_p),.IB(exp_time_in_n)); + defparam exp_time_in_pin.IOSTANDARD = "LVDS_25"; + + wire exp_time_out; + OBUFDS exp_time_out_pin (.O(exp_time_out_p),.OB(exp_time_out_n),.I(exp_time_out)); + defparam exp_time_out_pin.IOSTANDARD = "LVDS_25"; + + wire dcm_rst = 0; + + wire [13:0] adc_a, adc_b; + + capture_ddrlvds #(.WIDTH(14)) capture_ddrlvds + (.clk(dsp_clk), .ssclk_p(ADC_clkout_p), .ssclk_n(ADC_clkout_n), + .in_p({{ADCA_12_p, ADCA_10_p, ADCA_8_p, ADCA_6_p, ADCA_4_p, ADCA_2_p, ADCA_0_p}, + {ADCB_12_p, ADCB_10_p, ADCB_8_p, ADCB_6_p, ADCB_4_p, ADCB_2_p, ADCB_0_p}}), + .in_n({{ADCA_12_n, ADCA_10_n, ADCA_8_n, ADCA_6_n, ADCA_4_n, ADCA_2_n, ADCA_0_n}, + {ADCB_12_n, ADCB_10_n, ADCB_8_n, ADCB_6_n, ADCB_4_n, ADCB_2_n, ADCB_0_n}}), + .out({adc_a,adc_b})); + + // Handle Clocks + DCM DCM_INST (.CLKFB(dsp_clk), + .CLKIN(clk_fpga), + .DSSEN(0), + .PSCLK(0), + .PSEN(0), + .PSINCDEC(0), + .RST(dcm_rst), + .CLKDV(clk_div), + .CLKFX(), + .CLKFX180(), + .CLK0(dcm_out), + .CLK2X(), + .CLK2X180(), + .CLK90(), + .CLK180(), + .CLK270(), + .LOCKED(LOCKED_OUT), + .PSDONE(), + .STATUS()); + defparam DCM_INST.CLK_FEEDBACK = "1X"; + defparam DCM_INST.CLKDV_DIVIDE = 2.0; + defparam DCM_INST.CLKFX_DIVIDE = 1; + defparam DCM_INST.CLKFX_MULTIPLY = 4; + defparam DCM_INST.CLKIN_DIVIDE_BY_2 = "FALSE"; + defparam DCM_INST.CLKIN_PERIOD = 10.000; + defparam DCM_INST.CLKOUT_PHASE_SHIFT = "NONE"; + defparam DCM_INST.DESKEW_ADJUST = "SYSTEM_SYNCHRONOUS"; + defparam DCM_INST.DFS_FREQUENCY_MODE = "LOW"; + defparam DCM_INST.DLL_FREQUENCY_MODE = "LOW"; + defparam DCM_INST.DUTY_CYCLE_CORRECTION = "TRUE"; + defparam DCM_INST.FACTORY_JF = 16'h8080; + defparam DCM_INST.PHASE_SHIFT = 0; + defparam DCM_INST.STARTUP_WAIT = "FALSE"; + + BUFG dspclk_BUFG (.I(dcm_out), .O(dsp_clk)); + BUFG wbclk_BUFG (.I(clk_div), .O(wb_clk)); + + // I2C -- Don't use external transistors for open drain, the FPGA implements this + IOBUF scl_pin(.O(scl_pad_i), .IO(SCL), .I(scl_pad_o), .T(scl_pad_oen_o)); + IOBUF sda_pin(.O(sda_pad_i), .IO(SDA), .I(sda_pad_o), .T(sda_pad_oen_o)); + + // LEDs are active low outputs + wire [4:0] leds_int; + assign leds = ~leds_int; // drive low to turn on leds + + // SPI + wire miso, mosi, sclk; + + assign {SCLK_CLK,MOSI_CLK} = ~SEN_CLK ? {sclk,mosi} : 2'B0; + assign {SCLK_DAC,MOSI_DAC} = ~SEN_DAC ? {sclk,mosi} : 2'B0; + assign {SCLK_ADC,MOSI_ADC} = ~SEN_ADC ? {sclk,mosi} : 2'B0; + assign {SCLK_TX_DB,MOSI_TX_DB} = ~SEN_TX_DB ? {sclk,mosi} : 2'B0; + assign {SCLK_TX_DAC,MOSI_TX_DAC} = ~SEN_TX_DAC ? {sclk,mosi} : 2'B0; + assign {SCLK_TX_ADC,MOSI_TX_ADC} = ~SEN_TX_ADC ? {sclk,mosi} : 2'B0; + assign {SCLK_RX_DB,MOSI_RX_DB} = ~SEN_RX_DB ? {sclk,mosi} : 2'B0; + assign {SCLK_RX_DAC,MOSI_RX_DAC} = ~SEN_RX_DAC ? {sclk,mosi} : 2'B0; + assign {SCLK_RX_ADC,MOSI_RX_ADC} = ~SEN_RX_ADC ? {sclk,mosi} : 2'B0; + + assign miso = (~SEN_CLK & MISO_CLK) | (~SEN_DAC & MISO_DAC) | + (~SEN_TX_DB & MISO_TX_DB) | (~SEN_TX_ADC & MISO_TX_ADC) | + (~SEN_RX_DB & MISO_RX_DB) | (~SEN_RX_ADC & MISO_RX_ADC); + + wire GMII_TX_EN_unreg, GMII_TX_ER_unreg; + wire [7:0] GMII_TXD_unreg; + wire GMII_GTX_CLK_int; + + always @(posedge GMII_GTX_CLK_int) + begin + GMII_TX_EN <= GMII_TX_EN_unreg; + GMII_TX_ER <= GMII_TX_ER_unreg; + GMII_TXD <= GMII_TXD_unreg; + end + + OFDDRRSE OFDDRRSE_gmii_inst + (.Q(GMII_GTX_CLK), // Data output (connect directly to top-level port) + .C0(GMII_GTX_CLK_int), // 0 degree clock input + .C1(~GMII_GTX_CLK_int), // 180 degree clock input + .CE(1), // Clock enable input + .D0(0), // Posedge data input + .D1(1), // Negedge data input + .R(0), // Synchronous reset input + .S(0) // Synchronous preset input + ); + + wire ser_tklsb_unreg, ser_tkmsb_unreg; + wire [15:0] ser_t_unreg; + wire ser_tx_clk_int; + + always @(posedge ser_tx_clk_int) + begin + ser_tklsb <= ser_tklsb_unreg; + ser_tkmsb <= ser_tkmsb_unreg; + ser_t <= ser_t_unreg; + end + + assign ser_tx_clk = clk_fpga; + + reg [15:0] ser_r_int; + reg ser_rklsb_int, ser_rkmsb_int; + + always @(posedge ser_rx_clk) + begin + ser_r_int <= ser_r; + ser_rklsb_int <= ser_rklsb; + ser_rkmsb_int <= ser_rkmsb; + end + + u2_core u2_core(.dsp_clk (dsp_clk), + .wb_clk (wb_clk), + .clock_ready (clock_ready), + .clk_to_mac (clk_to_mac), + .pps_in (pps_in), + .leds (leds_int), + .debug (debug[31:0]), + .debug_clk (debug_clk[1:0]), + .exp_pps_in (exp_time_in), + .exp_pps_out (exp_time_out), + .GMII_COL (GMII_COL), + .GMII_CRS (GMII_CRS), + .GMII_TXD (GMII_TXD_unreg[7:0]), + .GMII_TX_EN (GMII_TX_EN_unreg), + .GMII_TX_ER (GMII_TX_ER_unreg), + .GMII_GTX_CLK (GMII_GTX_CLK_int), + .GMII_TX_CLK (GMII_TX_CLK), + .GMII_RXD (GMII_RXD[7:0]), + .GMII_RX_CLK (GMII_RX_CLK), + .GMII_RX_DV (GMII_RX_DV), + .GMII_RX_ER (GMII_RX_ER), + .MDIO (MDIO), + .MDC (MDC), + .PHY_INTn (PHY_INTn), + .PHY_RESETn (PHY_RESETn), + .ser_enable (ser_enable), + .ser_prbsen (ser_prbsen), + .ser_loopen (ser_loopen), + .ser_rx_en (ser_rx_en), + .ser_tx_clk (ser_tx_clk_int), + .ser_t (ser_t_unreg[15:0]), + .ser_tklsb (ser_tklsb_unreg), + .ser_tkmsb (ser_tkmsb_unreg), + .ser_rx_clk (ser_rx_clk), + .ser_r (ser_r_int[15:0]), + .ser_rklsb (ser_rklsb_int), + .ser_rkmsb (ser_rkmsb_int), + .cpld_start (cpld_start), + .cpld_mode (cpld_mode), + .cpld_done (cpld_done), + .cpld_din (cpld_din), + .cpld_clk (cpld_clk), + .cpld_detached (cpld_detached), + .adc_a (adc_a[13:0]), + .adc_ovf_a (adc_ovf_a), + .adc_on_a (adc_on_a), + .adc_oe_a (adc_oe_a), + .adc_b (adc_b[13:0]), + .adc_ovf_b (adc_ovf_b), + .adc_on_b (adc_on_b), + .adc_oe_b (adc_oe_b), + .dac_a (DACA[15:0]), + .dac_b (DACB[15:0]), + .scl_pad_i (scl_pad_i), + .scl_pad_o (scl_pad_o), + .scl_pad_oen_o (scl_pad_oen_o), + .sda_pad_i (sda_pad_i), + .sda_pad_o (sda_pad_o), + .sda_pad_oen_o (sda_pad_oen_o), + .clk_en (clk_en[1:0]), + .clk_sel (clk_sel[1:0]), + .clk_func (clk_func), + .clk_status (clk_status), + .sclk (sclk_int), + .mosi (mosi), + .miso (miso), + .sen_clk (sen_clk), + .sen_dac (sen_dac), + .sen_tx_db (sen_tx_db), + .sen_tx_adc (sen_tx_adc), + .sen_tx_dac (sen_tx_dac), + .sen_rx_db (sen_rx_db), + .sen_rx_adc (sen_rx_adc), + .sen_rx_dac (sen_rx_dac), + .io_tx (io_tx[15:0]), + .io_rx (io_rx[15:0]), + .RAM_D (RAM_D), + .RAM_A (RAM_A), + .RAM_CE1n (RAM_CE1n), + .RAM_CENn (RAM_CENn), + .RAM_CLK (RAM_CLK), + .RAM_WEn (RAM_WEn), + .RAM_OEn (RAM_OEn), + .RAM_LDn (RAM_LDn), + .uart_tx_o (uart_tx_o), + .uart_rx_i (uart_rx_i), + .uart_baud_o (), + .sim_mode (1'b0), + .clock_divider (2) + ); +*/ +endmodule // safe_u2plus -- cgit v1.2.3 From 3f2e589f639c6ec16e62b337568ebca96e241ae2 Mon Sep 17 00:00:00 2001 From: Matt Ettus Date: Tue, 9 Feb 2010 18:41:22 -0800 Subject: first cut at blinking leds --- usrp2/top/safe_u1e/.gitignore | 2 + usrp2/top/safe_u1e/Makefile | 2 +- usrp2/top/safe_u1e/safe_u1e.ucf | 228 ++++++++++++++++++++++++++ usrp2/top/safe_u1e/safe_u1e.v | 350 +--------------------------------------- 4 files changed, 237 insertions(+), 345 deletions(-) create mode 100644 usrp2/top/safe_u1e/.gitignore create mode 100644 usrp2/top/safe_u1e/safe_u1e.ucf diff --git a/usrp2/top/safe_u1e/.gitignore b/usrp2/top/safe_u1e/.gitignore new file mode 100644 index 000000000..bdc5af040 --- /dev/null +++ b/usrp2/top/safe_u1e/.gitignore @@ -0,0 +1,2 @@ +*~ +build diff --git a/usrp2/top/safe_u1e/Makefile b/usrp2/top/safe_u1e/Makefile index 8fe77d554..664835187 100644 --- a/usrp2/top/safe_u1e/Makefile +++ b/usrp2/top/safe_u1e/Makefile @@ -175,7 +175,7 @@ timing/time_sender.v \ timing/time_sync.v \ timing/timer.v \ top/u2_core/u2_core.v \ -top/safe_u1e/u1e.ucf \ +top/safe_u1e/safe_u1e.ucf \ top/safe_u1e/safe_u1e.v ################################################## diff --git a/usrp2/top/safe_u1e/safe_u1e.ucf b/usrp2/top/safe_u1e/safe_u1e.ucf new file mode 100644 index 000000000..83dbeca54 --- /dev/null +++ b/usrp2/top/safe_u1e/safe_u1e.ucf @@ -0,0 +1,228 @@ +#NET "EM_CLK" LOC = "F11" ; +#NET "overo_gpio23" LOC = "B3" ; +#NET "overo_gpio22" LOC = "A3" ; +#NET "overo_gpio21" LOC = "D5" ; +#NET "overo_gpio14" LOC = "C4" ; +#NET "overo_gpio176" LOC = "B4" ; +#NET "overo_gpio64" LOC = "A4" ; +#NET "overo_gpio65" LOC = "F8" ; +#NET "overo_gpio170" LOC = "E8" ; +#NET "overo_gpio145" LOC = "C7" ; +#NET "overo_gpio163" LOC = "D7" ; +#NET "overo_gpio146" LOC = "A6" ; +#NET "overo_gpio144" LOC = "A5" ; +#NET "overo_gpio147" LOC = "B6" ; +#NET "overo_gpio128" LOC = "G8" ; +#NET "overo_gpio0" LOC = "F9" ; +#NET "overo_gpio127" LOC = "C8" ; +#NET "overo_txd1" LOC = "C6" ; +#NET "overo_rxd1" LOC = "D6" ; +#NET "EM_WAIT0" LOC = "F14" ; +#NET "EM_NWP" LOC = "F13" ; +#NET "EM_NBE1" LOC = "D14" ; +#NET "EM_NBE0" LOC = "A13" ; +#NET "EM_NWE" LOC = "B13" ; +#NET "EM_NOE" LOC = "A14" ; +#NET "EM_NADV_ALE" LOC = "B15" ; +#NET "EM_D15" LOC = "D13" ; +#NET "EM_D14" LOC = "D15" ; +#NET "EM_D13" LOC = "C16" ; +#NET "EM_D12" LOC = "B20" ; +#NET "EM_D11" LOC = "A19" ; +#NET "EM_D10" LOC = "A17" ; +#NET "EM_D9" LOC = "E15" ; +#NET "EM_D8" LOC = "F15" ; +#NET "EM_D7" LOC = "E16" ; +#NET "EM_D6" LOC = "F16" ; +#NET "EM_D5" LOC = "B17" ; +#NET "EM_D4" LOC = "C17" ; +#NET "EM_D3" LOC = "B19" ; +#NET "EM_D2" LOC = "D19" ; +#NET "EM_D1" LOC = "C19" ; +#NET "EM_D0" LOC = "A20" ; +#NET "SYSEN" LOC = "C11" ; +#NET "EM_NCS6" LOC = "E17" ; +#NET "EM_NCS5" LOC = "E10" ; +#NET "EM_NCS4" LOC = "E6" ; +#NET "EM_NCS1" LOC = "D18" ; +#NET "EM_NCS0" LOC = "D17" ; +#NET "EM_A10" LOC = "C14" ; +#NET "EM_A9" LOC = "C10" ; +#NET "EM_A8" LOC = "C5" ; +#NET "EM_A7" LOC = "A18" ; +#NET "EM_A6" LOC = "A15" ; +#NET "EM_A5" LOC = "A12" ; +#NET "EM_A4" LOC = "A10" ; +#NET "EM_A3" LOC = "E7" ; +#NET "EM_A2" LOC = "A7" ; +#NET "EM_A1" LOC = "C15" ; +#NET "db_scl" LOC = "U4" ; +#NET "db_sda" LOC = "U5" ; +#NET "db_sclk_rx" LOC = "W3" ; +#NET "db_miso_rx" LOC = "W2" ; +#NET "db_mosi_rx" LOC = "V4" ; +#NET "db_sen_rx" LOC = "V3" ; +#NET "db_sclk_tx" LOC = "Y1" ; +#NET "db_miso_tx" LOC = "W1" ; +#NET "db_mosi_tx" LOC = "R3" ; +#NET "db_sen_tx" LOC = "T4" ; +#NET "cgen_miso" LOC = "U2" ; +#NET "cgen_mosi" LOC = "V1" ; +#NET "cgen_sclk" LOC = "R5" ; +#NET "cgen_sen_b" LOC = "T1" ; +#NET "FPGA_TXD" LOC = "U1" ; +#NET "FPGA_RXD" LOC = "T6" ; +#NET "debug_00" LOC = "P6" ; +#NET "debug_01" LOC = "R6" ; +#NET "debug_02" LOC = "P1" ; +#NET "debug_03" LOC = "P2" ; +#NET "debug_04" LOC = "N6" ; +#NET "debug_05" LOC = "N5" ; +#NET "debug_06" LOC = "N1" ; +#NET "debug_07" LOC = "K2" ; +#NET "debug_08" LOC = "K3" ; +#NET "debug_09" LOC = "K6" ; +#NET "debug_10" LOC = "L5" ; +#NET "debug_11" LOC = "H2" ; +#NET "debug_12" LOC = "K4" ; +#NET "debug_13" LOC = "K5" ; +#NET "debug_14" LOC = "G1" ; +#NET "debug_15" LOC = "H1" ; +#NET "debug_16" LOC = "H5" ; +#NET "debug_17" LOC = "H6" ; +#NET "debug_18" LOC = "E3" ; +#NET "debug_19" LOC = "E4" ; +#NET "debug_20" LOC = "G5" ; +#NET "debug_21" LOC = "G6" ; +#NET "debug_22" LOC = "F2" ; +#NET "debug_23" LOC = "F1" ; +#NET "debug_24" LOC = "H3" ; +#NET "debug_25" LOC = "H4" ; +#NET "debug_26" LOC = "F4" ; +#NET "debug_27" LOC = "F5" ; +#NET "debug_28" LOC = "C2" ; +#NET "debug_29" LOC = "C1" ; +#NET "debug_30" LOC = "F3" ; +#NET "debug_31" LOC = "G3" ; +#NET "debug_pb2" LOC = "Y2" ; +#NET "debug_pb1" LOC = "AA1" ; +#NET "debug_pb0" LOC = "N3" ; +#NET "dip_sw_7" LOC = "T3" ; +#NET "dip_sw_6" LOC = "U3" ; +#NET "dip_sw_5" LOC = "M3" ; +#NET "dip_sw_4" LOC = "N4" ; +#NET "dip_sw_3" LOC = "J3" ; +#NET "dip_sw_2" LOC = "J4" ; +#NET "dip_sw_1" LOC = "J6" ; +#NET "dip_sw_0" LOC = "J7" ; +#NET "cgen_st_status" LOC = "D4" ; +#NET "cgen_st_ld" LOC = "D1" ; +#NET "cgen_st_refmon" LOC = "E1" ; +#NET "cgen_sync_b" LOC = "M1" ; +#NET "cgen_ref_sel" LOC = "J1" ; +#NET "debug_clk0" LOC = "L6" ; +#NET "debug_clk1" LOC = "M5" ; +#NET "unnamed_net37" LOC = "B1" ; +#NET "unnamed_net36" LOC = "B22" ; +#NET "unnamed_net35" LOC = "D2" ; +#NET "unnamed_net34" LOC = "A21" ; +#NET "GND" LOC = "V19" ; +#NET "fpga_cfg_prog_b" LOC = "A2" ; +#NET "fpga_cfg_done" LOC = "AB21" ; +#NET "unnamed_net45" LOC = "F7" ; +#NET "fpga_cfg_din" LOC = "W17" ; +#NET "fpga_cfg_cclk" LOC = "V17" ; +#NET "fpga_cfg_init_b" LOC = "W15" ; +#NET "unnamed_net44" LOC = "V6" ; +#NET "unnamed_net43" LOC = "AA3" ; +#NET "unnamed_net42" LOC = "AB3" ; +#NET "aux_sdi_codec" LOC = "F19" ; +#NET "aux_sdo_codec" LOC = "F18" ; +#NET "aux_sclk_codec" LOC = "D21" ; +#NET "reset_codec" LOC = "D22" ; +#NET "sen_codec" LOC = "D20" ; +#NET "mosi_codec" LOC = "E19" ; +#NET "miso_codec" LOC = "F21" ; +#NET "sclk_codec" LOC = "E20" ; +#NET "RXSYNC" LOC = "F22" ; +#NET "DB11" LOC = "E22" ; +#NET "DB10" LOC = "J19" ; +#NET "DB09" LOC = "H20" ; +#NET "DB08" LOC = "G19" ; +#NET "DB07" LOC = "F20" ; +#NET "DB06" LOC = "K16" ; +#NET "DB05" LOC = "J17" ; +#NET "DB04" LOC = "H22" ; +#NET "DB03" LOC = "G22" ; +#NET "DB02" LOC = "H17" ; +#NET "DB01" LOC = "H18" ; +#NET "DB00" LOC = "K20" ; +#NET "DA11" LOC = "J20" ; +#NET "DA10" LOC = "K19" ; +#NET "DA09" LOC = "K18" ; +#NET "DA08" LOC = "L22" ; +#NET "DA07" LOC = "K22" ; +#NET "DA06" LOC = "N22" ; +#NET "DA05" LOC = "M22" ; +#NET "DA04" LOC = "N20" ; +#NET "DA03" LOC = "N19" ; +#NET "DA02" LOC = "R22" ; +#NET "DA01" LOC = "P22" ; +#NET "DA00" LOC = "N17" ; +#NET "TX13" LOC = "P19" ; +#NET "TX12" LOC = "R18" ; +#NET "TX11" LOC = "U20" ; +#NET "TX10" LOC = "T20" ; +#NET "TX09" LOC = "R19" ; +#NET "TX08" LOC = "R20" ; +#NET "TX07" LOC = "W22" ; +#NET "TX06" LOC = "Y22" ; +#NET "TX05" LOC = "T18" ; +#NET "TX04" LOC = "T17" ; +#NET "TX03" LOC = "W19" ; +#NET "TX02" LOC = "V20" ; +#NET "TX01" LOC = "Y21" ; +#NET "TX00" LOC = "AA22" ; +#NET "TXSYNC" LOC = "U18" ; +#NET "TXBLANK" LOC = "U19" ; +#NET "PPS_IN" LOC = "M17" ; +#NET "io_tx_00" LOC = "AB20" ; +#NET "io_tx_01" LOC = "Y17" ; +#NET "io_tx_02" LOC = "Y16" ; +#NET "io_tx_03" LOC = "U16" ; +#NET "io_tx_04" LOC = "V16" ; +#NET "io_tx_05" LOC = "AB19" ; +#NET "io_tx_06" LOC = "AA19" ; +#NET "io_tx_07" LOC = "U14" ; +#NET "io_tx_08" LOC = "U15" ; +#NET "io_tx_09" LOC = "AB17" ; +#NET "io_tx_10" LOC = "AB18" ; +#NET "io_tx_11" LOC = "Y13" ; +#NET "io_tx_12" LOC = "W14" ; +#NET "io_tx_13" LOC = "U13" ; +#NET "io_tx_14" LOC = "AA15" ; +#NET "io_tx_15" LOC = "AB14" ; +#NET "io_rx_00" LOC = "Y8" ; +#NET "io_rx_01" LOC = "Y9" ; +#NET "io_rx_02" LOC = "V7" ; +#NET "io_rx_03" LOC = "U8" ; +#NET "io_rx_04" LOC = "V10" ; +#NET "io_rx_05" LOC = "U9" ; +#NET "io_rx_06" LOC = "AB7" ; +#NET "io_rx_07" LOC = "AA8" ; +#NET "io_rx_08" LOC = "W8" ; +#NET "io_rx_09" LOC = "V8" ; +#NET "io_rx_10" LOC = "AB5" ; +#NET "io_rx_11" LOC = "AB6" ; +#NET "io_rx_12" LOC = "AB4" ; +#NET "io_rx_13" LOC = "AA4" ; +#NET "io_rx_14" LOC = "W5" ; +#NET "io_rx_15" LOC = "Y4" ; +#NET "CLKOUT2_CODEC" LOC = "U12" ; +#NET "CLKOUT1_CODEC" LOC = "V12" ; + +NET "CLK_FPGA_P" LOC = "Y11" ; +NET "CLK_FPGA_N" LOC = "Y10" ; +NET "debug_led<2>" LOC = "T5" ; +NET "debug_led<1>" LOC = "R2" ; +NET "debug_led<0>" LOC = "R1" ; diff --git a/usrp2/top/safe_u1e/safe_u1e.v b/usrp2/top/safe_u1e/safe_u1e.v index c880a9e55..79aaac6cd 100644 --- a/usrp2/top/safe_u1e/safe_u1e.v +++ b/usrp2/top/safe_u1e/safe_u1e.v @@ -4,131 +4,14 @@ module safe_u1e ( input CLK_FPGA_P, input CLK_FPGA_N, // Diff - - // ADC - //input ADC_clkout_p, //input ADC_clkout_n, - //input ADCA_12_p, //input ADCA_12_n, - //input ADCA_10_p, //input ADCA_10_n, - //input ADCA_8_p, //input ADCA_8_n, - //input ADCA_6_p, //input ADCA_6_n, - //input ADCA_4_p, //input ADCA_4_n, - //input ADCA_2_p, //input ADCA_2_n, - //input ADCA_0_p, //input ADCA_0_n, - //input ADCB_12_p, //input ADCB_12_n, - //input ADCB_10_p, //input ADCB_10_n, - //input ADCB_8_p, //input ADCB_8_n, - //input ADCB_6_p, //input ADCB_6_n, - //input ADCB_4_p, //input ADCB_4_n, - //input ADCB_2_p, //input ADCB_2_n, - //input ADCB_0_p, //input ADCB_0_n, - - // DAC - //output [15:0] DACA, - //output [15:0] DACB, - //input DAC_LOCK, // unused for now - - // DB IO Pins - //inout [15:0] io_tx, - //inout [15:0] io_rx, - - // Misc, debug - output [5:1] leds, // LED4 is shared w/INIT_B - //input FPGA_RESET, - //output [1:0] debug_clk, - //output [31:0] debug, - //output [3:1] TXD, //input [3:1] RXD, // UARTs - ////input [3:0] dipsw, // Forgot DIP Switches... - - // Clock Gen Control - //output [1:0] clk_en, - //output [1:0] clk_sel, - //input CLK_FUNC, // FIXME is an //input to control the 9510 - //input CLK_STATUS, - - //inout SCL, //inout SDA, // I2C - - // PPS - //input PPS_IN, //input PPS2_IN, - - // SPI - //output SEN_CLK, //output SCLK_CLK, //output MOSI_CLK, //input MISO_CLK, - //output SEN_DAC, //output SCLK_DAC, //output MOSI_DAC, //input MISO_DAC, - //output SEN_ADC, //output SCLK_ADC, //output MOSI_ADC, - //output SEN_TX_DB, //output SCLK_TX_DB, //output MOSI_TX_DB, //input MISO_TX_DB, - //output SEN_TX_DAC, //output SCLK_TX_DAC, //output MOSI_TX_DAC, - //output SEN_TX_ADC, //output SCLK_TX_ADC, //output MOSI_TX_ADC, //input MISO_TX_ADC, - //output SEN_RX_DB, //output SCLK_RX_DB, //output MOSI_RX_DB, //input MISO_RX_DB, - //output SEN_RX_DAC, //output SCLK_RX_DAC, //output MOSI_RX_DAC, - //output SEN_RX_ADC, //output SCLK_RX_ADC, //output MOSI_RX_ADC, //input MISO_RX_ADC, - - // GigE PHY - //input CLK_TO_MAC, - - //output reg [7:0] GMII_TXD, - //output reg GMII_TX_EN, - //output reg GMII_TX_ER, - //output GMII_GTX_CLK, - //input GMII_TX_CLK, // 100mbps clk - - //input GMII_RX_CLK, - //input [7:0] GMII_RXD, - //input GMII_RX_DV, - //input GMII_RX_ER, - //input GMII_COL, - //input GMII_CRS, - - //input PHY_INTn, // open drain - //inout MDIO, - //output MDC, - //output PHY_RESETn, - output ETH_LED - - //input POR, - - // Expansion - //input exp_time_in_p, //input exp_time_in_n, // Diff - //output exp_time_out_p, //output exp_time_out_n, // Diff - //input exp_user_in_p, //input exp_user_in_n, // Diff - //output exp_user_out_p, //output exp_user_out_n, // Diff - - // SERDES - //output ser_enable, - //output ser_prbsen, - //output ser_loopen, - //output ser_rx_en, - - //output ser_tx_clk, - //output reg [15:0] ser_t, - //output reg ser_tklsb, - //output reg ser_tkmsb, - - //input ser_rx_clk, - //input [15:0] ser_r, - //input ser_rklsb, - //input ser_rkmsb, - - // SRAM - //inout [35:0] RAM_D, - //output [20:0] RAM_A, - //output [3:0] RAM_BWn, - //output RAM_ZZ, - //output RAM_LDn, - //output RAM_OEn, - //output RAM_WEn, - //output RAM_CENn, - //output RAM_CLK, - - // SPI Flash - //output flash_cs, - //output flash_clk, - //output flash_mosi, - //input flash_miso + output [2:0] debug_led ); // FPGA-specific pins connections - wire clk_fpga, dsp_clk, clk_div, dcm_out, wb_clk, clock_ready; - - IBUFGDS clk_fpga_pin (.O(clk_fpga),.I(CLK_FPGA_P),.IB(CLK_FPGA_N)); + wire clk_fpga; + + IBUFGDS #(.IOSTANDARD("LVDS_33"), .DIFF_TERM("TRUE")) + clk_fpga_pin (.O(clk_fpga),.I(CLK_FPGA_P),.IB(CLK_FPGA_N)); defparam clk_fpga_pin.IOSTANDARD = "LVPECL_25"; reg [31:0] ctr; @@ -136,227 +19,6 @@ module safe_u1e always @(posedge clk_fpga) ctr <= ctr + 1; - assign {leds,ETH_LED} = ~ctr[29:24]; - - -/* - wire exp_time_in; - IBUFDS exp_time_in_pin (.O(exp_time_in),.I(exp_time_in_p),.IB(exp_time_in_n)); - defparam exp_time_in_pin.IOSTANDARD = "LVDS_25"; - - wire exp_time_out; - OBUFDS exp_time_out_pin (.O(exp_time_out_p),.OB(exp_time_out_n),.I(exp_time_out)); - defparam exp_time_out_pin.IOSTANDARD = "LVDS_25"; - - wire dcm_rst = 0; - - wire [13:0] adc_a, adc_b; - - capture_ddrlvds #(.WIDTH(14)) capture_ddrlvds - (.clk(dsp_clk), .ssclk_p(ADC_clkout_p), .ssclk_n(ADC_clkout_n), - .in_p({{ADCA_12_p, ADCA_10_p, ADCA_8_p, ADCA_6_p, ADCA_4_p, ADCA_2_p, ADCA_0_p}, - {ADCB_12_p, ADCB_10_p, ADCB_8_p, ADCB_6_p, ADCB_4_p, ADCB_2_p, ADCB_0_p}}), - .in_n({{ADCA_12_n, ADCA_10_n, ADCA_8_n, ADCA_6_n, ADCA_4_n, ADCA_2_n, ADCA_0_n}, - {ADCB_12_n, ADCB_10_n, ADCB_8_n, ADCB_6_n, ADCB_4_n, ADCB_2_n, ADCB_0_n}}), - .out({adc_a,adc_b})); - - // Handle Clocks - DCM DCM_INST (.CLKFB(dsp_clk), - .CLKIN(clk_fpga), - .DSSEN(0), - .PSCLK(0), - .PSEN(0), - .PSINCDEC(0), - .RST(dcm_rst), - .CLKDV(clk_div), - .CLKFX(), - .CLKFX180(), - .CLK0(dcm_out), - .CLK2X(), - .CLK2X180(), - .CLK90(), - .CLK180(), - .CLK270(), - .LOCKED(LOCKED_OUT), - .PSDONE(), - .STATUS()); - defparam DCM_INST.CLK_FEEDBACK = "1X"; - defparam DCM_INST.CLKDV_DIVIDE = 2.0; - defparam DCM_INST.CLKFX_DIVIDE = 1; - defparam DCM_INST.CLKFX_MULTIPLY = 4; - defparam DCM_INST.CLKIN_DIVIDE_BY_2 = "FALSE"; - defparam DCM_INST.CLKIN_PERIOD = 10.000; - defparam DCM_INST.CLKOUT_PHASE_SHIFT = "NONE"; - defparam DCM_INST.DESKEW_ADJUST = "SYSTEM_SYNCHRONOUS"; - defparam DCM_INST.DFS_FREQUENCY_MODE = "LOW"; - defparam DCM_INST.DLL_FREQUENCY_MODE = "LOW"; - defparam DCM_INST.DUTY_CYCLE_CORRECTION = "TRUE"; - defparam DCM_INST.FACTORY_JF = 16'h8080; - defparam DCM_INST.PHASE_SHIFT = 0; - defparam DCM_INST.STARTUP_WAIT = "FALSE"; - - BUFG dspclk_BUFG (.I(dcm_out), .O(dsp_clk)); - BUFG wbclk_BUFG (.I(clk_div), .O(wb_clk)); - - // I2C -- Don't use external transistors for open drain, the FPGA implements this - IOBUF scl_pin(.O(scl_pad_i), .IO(SCL), .I(scl_pad_o), .T(scl_pad_oen_o)); - IOBUF sda_pin(.O(sda_pad_i), .IO(SDA), .I(sda_pad_o), .T(sda_pad_oen_o)); - - // LEDs are active low outputs - wire [4:0] leds_int; - assign leds = ~leds_int; // drive low to turn on leds - - // SPI - wire miso, mosi, sclk; + assign debug_led = ctr[27:25]; - assign {SCLK_CLK,MOSI_CLK} = ~SEN_CLK ? {sclk,mosi} : 2'B0; - assign {SCLK_DAC,MOSI_DAC} = ~SEN_DAC ? {sclk,mosi} : 2'B0; - assign {SCLK_ADC,MOSI_ADC} = ~SEN_ADC ? {sclk,mosi} : 2'B0; - assign {SCLK_TX_DB,MOSI_TX_DB} = ~SEN_TX_DB ? {sclk,mosi} : 2'B0; - assign {SCLK_TX_DAC,MOSI_TX_DAC} = ~SEN_TX_DAC ? {sclk,mosi} : 2'B0; - assign {SCLK_TX_ADC,MOSI_TX_ADC} = ~SEN_TX_ADC ? {sclk,mosi} : 2'B0; - assign {SCLK_RX_DB,MOSI_RX_DB} = ~SEN_RX_DB ? {sclk,mosi} : 2'B0; - assign {SCLK_RX_DAC,MOSI_RX_DAC} = ~SEN_RX_DAC ? {sclk,mosi} : 2'B0; - assign {SCLK_RX_ADC,MOSI_RX_ADC} = ~SEN_RX_ADC ? {sclk,mosi} : 2'B0; - - assign miso = (~SEN_CLK & MISO_CLK) | (~SEN_DAC & MISO_DAC) | - (~SEN_TX_DB & MISO_TX_DB) | (~SEN_TX_ADC & MISO_TX_ADC) | - (~SEN_RX_DB & MISO_RX_DB) | (~SEN_RX_ADC & MISO_RX_ADC); - - wire GMII_TX_EN_unreg, GMII_TX_ER_unreg; - wire [7:0] GMII_TXD_unreg; - wire GMII_GTX_CLK_int; - - always @(posedge GMII_GTX_CLK_int) - begin - GMII_TX_EN <= GMII_TX_EN_unreg; - GMII_TX_ER <= GMII_TX_ER_unreg; - GMII_TXD <= GMII_TXD_unreg; - end - - OFDDRRSE OFDDRRSE_gmii_inst - (.Q(GMII_GTX_CLK), // Data output (connect directly to top-level port) - .C0(GMII_GTX_CLK_int), // 0 degree clock input - .C1(~GMII_GTX_CLK_int), // 180 degree clock input - .CE(1), // Clock enable input - .D0(0), // Posedge data input - .D1(1), // Negedge data input - .R(0), // Synchronous reset input - .S(0) // Synchronous preset input - ); - - wire ser_tklsb_unreg, ser_tkmsb_unreg; - wire [15:0] ser_t_unreg; - wire ser_tx_clk_int; - - always @(posedge ser_tx_clk_int) - begin - ser_tklsb <= ser_tklsb_unreg; - ser_tkmsb <= ser_tkmsb_unreg; - ser_t <= ser_t_unreg; - end - - assign ser_tx_clk = clk_fpga; - - reg [15:0] ser_r_int; - reg ser_rklsb_int, ser_rkmsb_int; - - always @(posedge ser_rx_clk) - begin - ser_r_int <= ser_r; - ser_rklsb_int <= ser_rklsb; - ser_rkmsb_int <= ser_rkmsb; - end - - u2_core u2_core(.dsp_clk (dsp_clk), - .wb_clk (wb_clk), - .clock_ready (clock_ready), - .clk_to_mac (clk_to_mac), - .pps_in (pps_in), - .leds (leds_int), - .debug (debug[31:0]), - .debug_clk (debug_clk[1:0]), - .exp_pps_in (exp_time_in), - .exp_pps_out (exp_time_out), - .GMII_COL (GMII_COL), - .GMII_CRS (GMII_CRS), - .GMII_TXD (GMII_TXD_unreg[7:0]), - .GMII_TX_EN (GMII_TX_EN_unreg), - .GMII_TX_ER (GMII_TX_ER_unreg), - .GMII_GTX_CLK (GMII_GTX_CLK_int), - .GMII_TX_CLK (GMII_TX_CLK), - .GMII_RXD (GMII_RXD[7:0]), - .GMII_RX_CLK (GMII_RX_CLK), - .GMII_RX_DV (GMII_RX_DV), - .GMII_RX_ER (GMII_RX_ER), - .MDIO (MDIO), - .MDC (MDC), - .PHY_INTn (PHY_INTn), - .PHY_RESETn (PHY_RESETn), - .ser_enable (ser_enable), - .ser_prbsen (ser_prbsen), - .ser_loopen (ser_loopen), - .ser_rx_en (ser_rx_en), - .ser_tx_clk (ser_tx_clk_int), - .ser_t (ser_t_unreg[15:0]), - .ser_tklsb (ser_tklsb_unreg), - .ser_tkmsb (ser_tkmsb_unreg), - .ser_rx_clk (ser_rx_clk), - .ser_r (ser_r_int[15:0]), - .ser_rklsb (ser_rklsb_int), - .ser_rkmsb (ser_rkmsb_int), - .cpld_start (cpld_start), - .cpld_mode (cpld_mode), - .cpld_done (cpld_done), - .cpld_din (cpld_din), - .cpld_clk (cpld_clk), - .cpld_detached (cpld_detached), - .adc_a (adc_a[13:0]), - .adc_ovf_a (adc_ovf_a), - .adc_on_a (adc_on_a), - .adc_oe_a (adc_oe_a), - .adc_b (adc_b[13:0]), - .adc_ovf_b (adc_ovf_b), - .adc_on_b (adc_on_b), - .adc_oe_b (adc_oe_b), - .dac_a (DACA[15:0]), - .dac_b (DACB[15:0]), - .scl_pad_i (scl_pad_i), - .scl_pad_o (scl_pad_o), - .scl_pad_oen_o (scl_pad_oen_o), - .sda_pad_i (sda_pad_i), - .sda_pad_o (sda_pad_o), - .sda_pad_oen_o (sda_pad_oen_o), - .clk_en (clk_en[1:0]), - .clk_sel (clk_sel[1:0]), - .clk_func (clk_func), - .clk_status (clk_status), - .sclk (sclk_int), - .mosi (mosi), - .miso (miso), - .sen_clk (sen_clk), - .sen_dac (sen_dac), - .sen_tx_db (sen_tx_db), - .sen_tx_adc (sen_tx_adc), - .sen_tx_dac (sen_tx_dac), - .sen_rx_db (sen_rx_db), - .sen_rx_adc (sen_rx_adc), - .sen_rx_dac (sen_rx_dac), - .io_tx (io_tx[15:0]), - .io_rx (io_rx[15:0]), - .RAM_D (RAM_D), - .RAM_A (RAM_A), - .RAM_CE1n (RAM_CE1n), - .RAM_CENn (RAM_CENn), - .RAM_CLK (RAM_CLK), - .RAM_WEn (RAM_WEn), - .RAM_OEn (RAM_OEn), - .RAM_LDn (RAM_LDn), - .uart_tx_o (uart_tx_o), - .uart_rx_i (uart_rx_i), - .uart_baud_o (), - .sim_mode (1'b0), - .clock_divider (2) - ); -*/ endmodule // safe_u2plus -- cgit v1.2.3 From 36138857e9d64a129840814aed79c00cc6f505e9 Mon Sep 17 00:00:00 2001 From: Matt Ettus Date: Tue, 9 Feb 2010 19:04:26 -0800 Subject: builds a successful led blinker --- usrp2/top/safe_u1e/.gitignore | 2 ++ usrp2/top/safe_u1e/Makefile | 3 ++- usrp2/top/safe_u1e/safe_u1e.v | 1 - 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/usrp2/top/safe_u1e/.gitignore b/usrp2/top/safe_u1e/.gitignore index bdc5af040..f8b57ea21 100644 --- a/usrp2/top/safe_u1e/.gitignore +++ b/usrp2/top/safe_u1e/.gitignore @@ -1,2 +1,4 @@ *~ build +*.log +*.cmd diff --git a/usrp2/top/safe_u1e/Makefile b/usrp2/top/safe_u1e/Makefile index 664835187..d28cc2b89 100644 --- a/usrp2/top/safe_u1e/Makefile +++ b/usrp2/top/safe_u1e/Makefile @@ -217,7 +217,8 @@ export GEN_PROG_FILE_PROPERTIES := \ "Create Binary Configuration File" TRUE \ "Done (Output Events)" 5 \ "Enable Bitstream Compression" TRUE \ -"Enable Outputs (Output Events)" 6 +"Enable Outputs (Output Events)" 6 \ +"Unused IOB Pins" "Pull Up" export SIM_MODEL_PROPERTIES := "" diff --git a/usrp2/top/safe_u1e/safe_u1e.v b/usrp2/top/safe_u1e/safe_u1e.v index 79aaac6cd..1b81bab5a 100644 --- a/usrp2/top/safe_u1e/safe_u1e.v +++ b/usrp2/top/safe_u1e/safe_u1e.v @@ -12,7 +12,6 @@ module safe_u1e IBUFGDS #(.IOSTANDARD("LVDS_33"), .DIFF_TERM("TRUE")) clk_fpga_pin (.O(clk_fpga),.I(CLK_FPGA_P),.IB(CLK_FPGA_N)); - defparam clk_fpga_pin.IOSTANDARD = "LVPECL_25"; reg [31:0] ctr; -- cgit v1.2.3 From 44d8aeb6bdbe598d6d453c4530015892959cb765 Mon Sep 17 00:00:00 2001 From: Matt Ettus Date: Tue, 9 Feb 2010 21:09:56 -0800 Subject: organized the pins in the ucf by function --- usrp2/top/safe_u1e/safe_u1e.ucf | 128 ++++++++++++++++++++++------------------ 1 file changed, 72 insertions(+), 56 deletions(-) diff --git a/usrp2/top/safe_u1e/safe_u1e.ucf b/usrp2/top/safe_u1e/safe_u1e.ucf index 83dbeca54..16265c203 100644 --- a/usrp2/top/safe_u1e/safe_u1e.ucf +++ b/usrp2/top/safe_u1e/safe_u1e.ucf @@ -1,3 +1,8 @@ + +NET "CLK_FPGA_P" LOC = "Y11" ; +NET "CLK_FPGA_N" LOC = "Y10" ; + +## GPMC #NET "EM_CLK" LOC = "F11" ; #NET "overo_gpio23" LOC = "B3" ; #NET "overo_gpio22" LOC = "A3" ; @@ -56,6 +61,7 @@ #NET "EM_A3" LOC = "E7" ; #NET "EM_A2" LOC = "A7" ; #NET "EM_A1" LOC = "C15" ; + #NET "db_scl" LOC = "U4" ; #NET "db_sda" LOC = "U5" ; #NET "db_sclk_rx" LOC = "W3" ; @@ -72,49 +78,57 @@ #NET "cgen_sen_b" LOC = "T1" ; #NET "FPGA_TXD" LOC = "U1" ; #NET "FPGA_RXD" LOC = "T6" ; -#NET "debug_00" LOC = "P6" ; -#NET "debug_01" LOC = "R6" ; -#NET "debug_02" LOC = "P1" ; -#NET "debug_03" LOC = "P2" ; -#NET "debug_04" LOC = "N6" ; -#NET "debug_05" LOC = "N5" ; -#NET "debug_06" LOC = "N1" ; -#NET "debug_07" LOC = "K2" ; -#NET "debug_08" LOC = "K3" ; -#NET "debug_09" LOC = "K6" ; -#NET "debug_10" LOC = "L5" ; -#NET "debug_11" LOC = "H2" ; -#NET "debug_12" LOC = "K4" ; -#NET "debug_13" LOC = "K5" ; -#NET "debug_14" LOC = "G1" ; -#NET "debug_15" LOC = "H1" ; -#NET "debug_16" LOC = "H5" ; -#NET "debug_17" LOC = "H6" ; -#NET "debug_18" LOC = "E3" ; -#NET "debug_19" LOC = "E4" ; -#NET "debug_20" LOC = "G5" ; -#NET "debug_21" LOC = "G6" ; -#NET "debug_22" LOC = "F2" ; -#NET "debug_23" LOC = "F1" ; -#NET "debug_24" LOC = "H3" ; -#NET "debug_25" LOC = "H4" ; -#NET "debug_26" LOC = "F4" ; -#NET "debug_27" LOC = "F5" ; -#NET "debug_28" LOC = "C2" ; -#NET "debug_29" LOC = "C1" ; -#NET "debug_30" LOC = "F3" ; -#NET "debug_31" LOC = "G3" ; -#NET "debug_pb2" LOC = "Y2" ; -#NET "debug_pb1" LOC = "AA1" ; -#NET "debug_pb0" LOC = "N3" ; -#NET "dip_sw_7" LOC = "T3" ; -#NET "dip_sw_6" LOC = "U3" ; -#NET "dip_sw_5" LOC = "M3" ; -#NET "dip_sw_4" LOC = "N4" ; -#NET "dip_sw_3" LOC = "J3" ; -#NET "dip_sw_2" LOC = "J4" ; -#NET "dip_sw_1" LOC = "J6" ; -#NET "dip_sw_0" LOC = "J7" ; + +## Debug pins +NET "debug_led<2>" LOC = "T5" ; +NET "debug_led<1>" LOC = "R2" ; +NET "debug_led<0>" LOC = "R1" ; +#NET "debug<0>" LOC = "P6" ; +#NET "debug<1>" LOC = "R6" ; +#NET "debug<2>" LOC = "P1" ; +#NET "debug<3>" LOC = "P2" ; +#NET "debug<4>" LOC = "N6" ; +#NET "debug<5>" LOC = "N5" ; +#NET "debug<6>" LOC = "N1" ; +#NET "debug<7>" LOC = "K2" ; +#NET "debug<8>" LOC = "K3" ; +#NET "debug<9>" LOC = "K6" ; +#NET "debug<10>" LOC = "L5" ; +#NET "debug<11>" LOC = "H2" ; +#NET "debug<12>" LOC = "K4" ; +#NET "debug<13>" LOC = "K5" ; +#NET "debug<14>" LOC = "G1" ; +#NET "debug<15>" LOC = "H1" ; +#NET "debug<16>" LOC = "H5" ; +#NET "debug<17>" LOC = "H6" ; +#NET "debug<18>" LOC = "E3" ; +#NET "debug<19>" LOC = "E4" ; +#NET "debug<20>" LOC = "G5" ; +#NET "debug<21>" LOC = "G6" ; +#NET "debug<22>" LOC = "F2" ; +#NET "debug<23>" LOC = "F1" ; +#NET "debug<24>" LOC = "H3" ; +#NET "debug<25>" LOC = "H4" ; +#NET "debug<26>" LOC = "F4" ; +#NET "debug<27>" LOC = "F5" ; +#NET "debug<28>" LOC = "C2" ; +#NET "debug<29>" LOC = "C1" ; +#NET "debug<30>" LOC = "F3" ; +#NET "debug<31>" LOC = "G3" ; + +#NET "debug_pb<2>" LOC = "Y2" ; +#NET "debug_pb<1>" LOC = "AA1" ; +#NET "debug_pb<0>" LOC = "N3" ; + +#NET "dip_sw<7>" LOC = "T3" ; +#NET "dip_sw<6>" LOC = "U3" ; +#NET "dip_sw<5>" LOC = "M3" ; +#NET "dip_sw<4>" LOC = "N4" ; +#NET "dip_sw<3>" LOC = "J3" ; +#NET "dip_sw<2>" LOC = "J4" ; +#NET "dip_sw<1>" LOC = "J6" ; +#NET "dip_sw<0>" LOC = "J7" ; + #NET "cgen_st_status" LOC = "D4" ; #NET "cgen_st_ld" LOC = "D1" ; #NET "cgen_st_refmon" LOC = "E1" ; @@ -122,20 +136,12 @@ #NET "cgen_ref_sel" LOC = "J1" ; #NET "debug_clk0" LOC = "L6" ; #NET "debug_clk1" LOC = "M5" ; -#NET "unnamed_net37" LOC = "B1" ; -#NET "unnamed_net36" LOC = "B22" ; -#NET "unnamed_net35" LOC = "D2" ; -#NET "unnamed_net34" LOC = "A21" ; #NET "GND" LOC = "V19" ; #NET "fpga_cfg_prog_b" LOC = "A2" ; #NET "fpga_cfg_done" LOC = "AB21" ; -#NET "unnamed_net45" LOC = "F7" ; #NET "fpga_cfg_din" LOC = "W17" ; #NET "fpga_cfg_cclk" LOC = "V17" ; #NET "fpga_cfg_init_b" LOC = "W15" ; -#NET "unnamed_net44" LOC = "V6" ; -#NET "unnamed_net43" LOC = "AA3" ; -#NET "unnamed_net42" LOC = "AB3" ; #NET "aux_sdi_codec" LOC = "F19" ; #NET "aux_sdo_codec" LOC = "F18" ; #NET "aux_sclk_codec" LOC = "D21" ; @@ -144,7 +150,9 @@ #NET "mosi_codec" LOC = "E19" ; #NET "miso_codec" LOC = "F21" ; #NET "sclk_codec" LOC = "E20" ; + #NET "RXSYNC" LOC = "F22" ; + #NET "DB11" LOC = "E22" ; #NET "DB10" LOC = "J19" ; #NET "DB09" LOC = "H20" ; @@ -169,6 +177,7 @@ #NET "DA02" LOC = "R22" ; #NET "DA01" LOC = "P22" ; #NET "DA00" LOC = "N17" ; + #NET "TX13" LOC = "P19" ; #NET "TX12" LOC = "R18" ; #NET "TX11" LOC = "U20" ; @@ -185,7 +194,9 @@ #NET "TX00" LOC = "AA22" ; #NET "TXSYNC" LOC = "U18" ; #NET "TXBLANK" LOC = "U19" ; + #NET "PPS_IN" LOC = "M17" ; + #NET "io_tx_00" LOC = "AB20" ; #NET "io_tx_01" LOC = "Y17" ; #NET "io_tx_02" LOC = "Y16" ; @@ -218,11 +229,16 @@ #NET "io_rx_13" LOC = "AA4" ; #NET "io_rx_14" LOC = "W5" ; #NET "io_rx_15" LOC = "Y4" ; + #NET "CLKOUT2_CODEC" LOC = "U12" ; #NET "CLKOUT1_CODEC" LOC = "V12" ; -NET "CLK_FPGA_P" LOC = "Y11" ; -NET "CLK_FPGA_N" LOC = "Y10" ; -NET "debug_led<2>" LOC = "T5" ; -NET "debug_led<1>" LOC = "R2" ; -NET "debug_led<0>" LOC = "R1" ; +## Unnamed, need to figure out what they do +#NET "unnamed_net37" LOC = "B1" ; +#NET "unnamed_net36" LOC = "B22" ; +#NET "unnamed_net35" LOC = "D2" ; +#NET "unnamed_net34" LOC = "A21" ; +#NET "unnamed_net45" LOC = "F7" ; +#NET "unnamed_net44" LOC = "V6" ; +#NET "unnamed_net43" LOC = "AA3" ; +#NET "unnamed_net42" LOC = "AB3" ; -- cgit v1.2.3 From a6872631b33fca08bb39fd8b1329146470369b19 Mon Sep 17 00:00:00 2001 From: Matt Ettus Date: Sun, 14 Feb 2010 17:07:24 -0800 Subject: connect GPMC pins to debug bus --- usrp2/top/safe_u1e/safe_u1e.ucf | 156 +++++++++++++++++++++------------------- usrp2/top/safe_u1e/safe_u1e.v | 14 +++- 2 files changed, 94 insertions(+), 76 deletions(-) diff --git a/usrp2/top/safe_u1e/safe_u1e.ucf b/usrp2/top/safe_u1e/safe_u1e.ucf index 16265c203..14389f299 100644 --- a/usrp2/top/safe_u1e/safe_u1e.ucf +++ b/usrp2/top/safe_u1e/safe_u1e.ucf @@ -3,7 +3,52 @@ NET "CLK_FPGA_P" LOC = "Y11" ; NET "CLK_FPGA_N" LOC = "Y10" ; ## GPMC -#NET "EM_CLK" LOC = "F11" ; +NET "EM_CLK" LOC = "F11" ; + +NET "EM_D<15>" LOC = "D13" ; +NET "EM_D<14>" LOC = "D15" ; +NET "EM_D<13>" LOC = "C16" ; +NET "EM_D<12>" LOC = "B20" ; +NET "EM_D<11>" LOC = "A19" ; +NET "EM_D<10>" LOC = "A17" ; +NET "EM_D<9>" LOC = "E15" ; +NET "EM_D<8>" LOC = "F15" ; +NET "EM_D<7>" LOC = "E16" ; +NET "EM_D<6>" LOC = "F16" ; +NET "EM_D<5>" LOC = "B17" ; +NET "EM_D<4>" LOC = "C17" ; +NET "EM_D<3>" LOC = "B19" ; +NET "EM_D<2>" LOC = "D19" ; +NET "EM_D<1>" LOC = "C19" ; +NET "EM_D<0>" LOC = "A20" ; + +NET "EM_A<10>" LOC = "C14" ; +NET "EM_A<9>" LOC = "C10" ; +NET "EM_A<8>" LOC = "C5" ; +NET "EM_A<7>" LOC = "A18" ; +NET "EM_A<6>" LOC = "A15" ; +NET "EM_A<5>" LOC = "A12" ; +NET "EM_A<4>" LOC = "A10" ; +NET "EM_A<3>" LOC = "E7" ; +NET "EM_A<2>" LOC = "A7" ; +NET "EM_A<1>" LOC = "C15" ; + +#NET "EM_NCS6" LOC = "E17" ; +#NET "EM_NCS5" LOC = "E10" ; +NET "EM_NCS4" LOC = "E6" ; +#NET "EM_NCS1" LOC = "D18" ; +#NET "EM_NCS0" LOC = "D17" ; + +NET "EM_WAIT0" LOC = "F14" ; +#NET "EM_NBE1" LOC = "D14" ; +#NET "EM_NBE0" LOC = "A13" ; +NET "EM_NWP" LOC = "F13" ; +NET "EM_NWE" LOC = "B13" ; +NET "EM_NOE" LOC = "A14" ; +NET "EM_NADV_ALE" LOC = "B15" ; + + +## Overo GPIO #NET "overo_gpio23" LOC = "B3" ; #NET "overo_gpio22" LOC = "A3" ; #NET "overo_gpio21" LOC = "D5" ; @@ -20,47 +65,12 @@ NET "CLK_FPGA_N" LOC = "Y10" ; #NET "overo_gpio128" LOC = "G8" ; #NET "overo_gpio0" LOC = "F9" ; #NET "overo_gpio127" LOC = "C8" ; + +## Overo UART #NET "overo_txd1" LOC = "C6" ; #NET "overo_rxd1" LOC = "D6" ; -#NET "EM_WAIT0" LOC = "F14" ; -#NET "EM_NWP" LOC = "F13" ; -#NET "EM_NBE1" LOC = "D14" ; -#NET "EM_NBE0" LOC = "A13" ; -#NET "EM_NWE" LOC = "B13" ; -#NET "EM_NOE" LOC = "A14" ; -#NET "EM_NADV_ALE" LOC = "B15" ; -#NET "EM_D15" LOC = "D13" ; -#NET "EM_D14" LOC = "D15" ; -#NET "EM_D13" LOC = "C16" ; -#NET "EM_D12" LOC = "B20" ; -#NET "EM_D11" LOC = "A19" ; -#NET "EM_D10" LOC = "A17" ; -#NET "EM_D9" LOC = "E15" ; -#NET "EM_D8" LOC = "F15" ; -#NET "EM_D7" LOC = "E16" ; -#NET "EM_D6" LOC = "F16" ; -#NET "EM_D5" LOC = "B17" ; -#NET "EM_D4" LOC = "C17" ; -#NET "EM_D3" LOC = "B19" ; -#NET "EM_D2" LOC = "D19" ; -#NET "EM_D1" LOC = "C19" ; -#NET "EM_D0" LOC = "A20" ; + #NET "SYSEN" LOC = "C11" ; -#NET "EM_NCS6" LOC = "E17" ; -#NET "EM_NCS5" LOC = "E10" ; -#NET "EM_NCS4" LOC = "E6" ; -#NET "EM_NCS1" LOC = "D18" ; -#NET "EM_NCS0" LOC = "D17" ; -#NET "EM_A10" LOC = "C14" ; -#NET "EM_A9" LOC = "C10" ; -#NET "EM_A8" LOC = "C5" ; -#NET "EM_A7" LOC = "A18" ; -#NET "EM_A6" LOC = "A15" ; -#NET "EM_A5" LOC = "A12" ; -#NET "EM_A4" LOC = "A10" ; -#NET "EM_A3" LOC = "E7" ; -#NET "EM_A2" LOC = "A7" ; -#NET "EM_A1" LOC = "C15" ; #NET "db_scl" LOC = "U4" ; #NET "db_sda" LOC = "U5" ; @@ -83,38 +93,40 @@ NET "CLK_FPGA_N" LOC = "Y10" ; NET "debug_led<2>" LOC = "T5" ; NET "debug_led<1>" LOC = "R2" ; NET "debug_led<0>" LOC = "R1" ; -#NET "debug<0>" LOC = "P6" ; -#NET "debug<1>" LOC = "R6" ; -#NET "debug<2>" LOC = "P1" ; -#NET "debug<3>" LOC = "P2" ; -#NET "debug<4>" LOC = "N6" ; -#NET "debug<5>" LOC = "N5" ; -#NET "debug<6>" LOC = "N1" ; -#NET "debug<7>" LOC = "K2" ; -#NET "debug<8>" LOC = "K3" ; -#NET "debug<9>" LOC = "K6" ; -#NET "debug<10>" LOC = "L5" ; -#NET "debug<11>" LOC = "H2" ; -#NET "debug<12>" LOC = "K4" ; -#NET "debug<13>" LOC = "K5" ; -#NET "debug<14>" LOC = "G1" ; -#NET "debug<15>" LOC = "H1" ; -#NET "debug<16>" LOC = "H5" ; -#NET "debug<17>" LOC = "H6" ; -#NET "debug<18>" LOC = "E3" ; -#NET "debug<19>" LOC = "E4" ; -#NET "debug<20>" LOC = "G5" ; -#NET "debug<21>" LOC = "G6" ; -#NET "debug<22>" LOC = "F2" ; -#NET "debug<23>" LOC = "F1" ; -#NET "debug<24>" LOC = "H3" ; -#NET "debug<25>" LOC = "H4" ; -#NET "debug<26>" LOC = "F4" ; -#NET "debug<27>" LOC = "F5" ; -#NET "debug<28>" LOC = "C2" ; -#NET "debug<29>" LOC = "C1" ; -#NET "debug<30>" LOC = "F3" ; -#NET "debug<31>" LOC = "G3" ; +NET "debug<0>" LOC = "P6" ; +NET "debug<1>" LOC = "R6" ; +NET "debug<2>" LOC = "P1" ; +NET "debug<3>" LOC = "P2" ; +NET "debug<4>" LOC = "N6" ; +NET "debug<5>" LOC = "N5" ; +NET "debug<6>" LOC = "N1" ; +NET "debug<7>" LOC = "K2" ; +NET "debug<8>" LOC = "K3" ; +NET "debug<9>" LOC = "K6" ; +NET "debug<10>" LOC = "L5" ; +NET "debug<11>" LOC = "H2" ; +NET "debug<12>" LOC = "K4" ; +NET "debug<13>" LOC = "K5" ; +NET "debug<14>" LOC = "G1" ; +NET "debug<15>" LOC = "H1" ; +NET "debug<16>" LOC = "H5" ; +NET "debug<17>" LOC = "H6" ; +NET "debug<18>" LOC = "E3" ; +NET "debug<19>" LOC = "E4" ; +NET "debug<20>" LOC = "G5" ; +NET "debug<21>" LOC = "G6" ; +NET "debug<22>" LOC = "F2" ; +NET "debug<23>" LOC = "F1" ; +NET "debug<24>" LOC = "H3" ; +NET "debug<25>" LOC = "H4" ; +NET "debug<26>" LOC = "F4" ; +NET "debug<27>" LOC = "F5" ; +NET "debug<28>" LOC = "C2" ; +NET "debug<29>" LOC = "C1" ; +NET "debug<30>" LOC = "F3" ; +NET "debug<31>" LOC = "G3" ; +NET "debug_clk<0>" LOC = "L6" ; +NET "debug_clk<1>" LOC = "M5" ; #NET "debug_pb<2>" LOC = "Y2" ; #NET "debug_pb<1>" LOC = "AA1" ; @@ -134,8 +146,6 @@ NET "debug_led<0>" LOC = "R1" ; #NET "cgen_st_refmon" LOC = "E1" ; #NET "cgen_sync_b" LOC = "M1" ; #NET "cgen_ref_sel" LOC = "J1" ; -#NET "debug_clk0" LOC = "L6" ; -#NET "debug_clk1" LOC = "M5" ; #NET "GND" LOC = "V19" ; #NET "fpga_cfg_prog_b" LOC = "A2" ; #NET "fpga_cfg_done" LOC = "AB21" ; diff --git a/usrp2/top/safe_u1e/safe_u1e.v b/usrp2/top/safe_u1e/safe_u1e.v index 1b81bab5a..3f16d941c 100644 --- a/usrp2/top/safe_u1e/safe_u1e.v +++ b/usrp2/top/safe_u1e/safe_u1e.v @@ -4,7 +4,11 @@ module safe_u1e ( input CLK_FPGA_P, input CLK_FPGA_N, // Diff - output [2:0] debug_led + output [2:0] debug_led, output [31:0] debug, output [1:0] debug_clk, + + // GPMC + input EM_CLK, input [15:0] EM_D, input [10:1] EM_A, + input EM_WAIT0, input EM_NCS4, input EM_NWP, input EM_NWE, input EM_NOE, input EM_NADV_ALE ); // FPGA-specific pins connections @@ -13,11 +17,15 @@ module safe_u1e IBUFGDS #(.IOSTANDARD("LVDS_33"), .DIFF_TERM("TRUE")) clk_fpga_pin (.O(clk_fpga),.I(CLK_FPGA_P),.IB(CLK_FPGA_N)); + // Debug circuitry reg [31:0] ctr; - always @(posedge clk_fpga) ctr <= ctr + 1; + assign debug_led = ctr[27:25]; - + assign debug_clk = { EM_CLK, clk_fpga }; + assign debug = { { EM_WAIT0, EM_NADV_ALE, EM_NWP, EM_NCS4, EM_NWE, EM_NOE, EM_A[10:1] }, + { EM_D } }; + endmodule // safe_u2plus -- cgit v1.2.3 From e091b4812ff4f7e6f959aabf48ac65bac5be86b7 Mon Sep 17 00:00:00 2001 From: Matt Ettus Date: Sun, 14 Feb 2010 17:23:43 -0800 Subject: reorg pin defs --- usrp2/top/safe_u1e/safe_u1e.ucf | 196 +++++++++++++++++++++------------------- 1 file changed, 102 insertions(+), 94 deletions(-) diff --git a/usrp2/top/safe_u1e/safe_u1e.ucf b/usrp2/top/safe_u1e/safe_u1e.ucf index 14389f299..cb6d6372e 100644 --- a/usrp2/top/safe_u1e/safe_u1e.ucf +++ b/usrp2/top/safe_u1e/safe_u1e.ucf @@ -49,27 +49,30 @@ NET "EM_NADV_ALE" LOC = "B15" ; ## Overo GPIO -#NET "overo_gpio23" LOC = "B3" ; -#NET "overo_gpio22" LOC = "A3" ; -#NET "overo_gpio21" LOC = "D5" ; +#NET "overo_gpio0" LOC = "F9" ; #NET "overo_gpio14" LOC = "C4" ; -#NET "overo_gpio176" LOC = "B4" ; +#NET "overo_gpio21" LOC = "D5" ; +#NET "overo_gpio22" LOC = "A3" ; +#NET "overo_gpio23" LOC = "B3" ; #NET "overo_gpio64" LOC = "A4" ; #NET "overo_gpio65" LOC = "F8" ; -#NET "overo_gpio170" LOC = "E8" ; +#NET "overo_gpio127" LOC = "C8" ; +#NET "overo_gpio128" LOC = "G8" ; +#NET "overo_gpio144" LOC = "A5" ; #NET "overo_gpio145" LOC = "C7" ; -#NET "overo_gpio163" LOC = "D7" ; #NET "overo_gpio146" LOC = "A6" ; -#NET "overo_gpio144" LOC = "A5" ; #NET "overo_gpio147" LOC = "B6" ; -#NET "overo_gpio128" LOC = "G8" ; -#NET "overo_gpio0" LOC = "F9" ; -#NET "overo_gpio127" LOC = "C8" ; +#NET "overo_gpio163" LOC = "D7" ; +#NET "overo_gpio170" LOC = "E8" ; +#NET "overo_gpio176" LOC = "B4" ; ## Overo UART #NET "overo_txd1" LOC = "C6" ; #NET "overo_rxd1" LOC = "D6" ; +#NET "FPGA_TXD" LOC = "U1" ; +#NET "FPGA_RXD" LOC = "T6" ; + #NET "SYSEN" LOC = "C11" ; #NET "db_scl" LOC = "U4" ; @@ -82,12 +85,17 @@ NET "EM_NADV_ALE" LOC = "B15" ; #NET "db_miso_tx" LOC = "W1" ; #NET "db_mosi_tx" LOC = "R3" ; #NET "db_sen_tx" LOC = "T4" ; + +## Clock Gen #NET "cgen_miso" LOC = "U2" ; #NET "cgen_mosi" LOC = "V1" ; #NET "cgen_sclk" LOC = "R5" ; #NET "cgen_sen_b" LOC = "T1" ; -#NET "FPGA_TXD" LOC = "U1" ; -#NET "FPGA_RXD" LOC = "T6" ; +#NET "cgen_st_status" LOC = "D4" ; +#NET "cgen_st_ld" LOC = "D1" ; +#NET "cgen_st_refmon" LOC = "E1" ; +#NET "cgen_sync_b" LOC = "M1" ; +#NET "cgen_ref_sel" LOC = "J1" ; ## Debug pins NET "debug_led<2>" LOC = "T5" ; @@ -141,17 +149,7 @@ NET "debug_clk<1>" LOC = "M5" ; #NET "dip_sw<1>" LOC = "J6" ; #NET "dip_sw<0>" LOC = "J7" ; -#NET "cgen_st_status" LOC = "D4" ; -#NET "cgen_st_ld" LOC = "D1" ; -#NET "cgen_st_refmon" LOC = "E1" ; -#NET "cgen_sync_b" LOC = "M1" ; -#NET "cgen_ref_sel" LOC = "J1" ; -#NET "GND" LOC = "V19" ; -#NET "fpga_cfg_prog_b" LOC = "A2" ; -#NET "fpga_cfg_done" LOC = "AB21" ; -#NET "fpga_cfg_din" LOC = "W17" ; -#NET "fpga_cfg_cclk" LOC = "V17" ; -#NET "fpga_cfg_init_b" LOC = "W15" ; +## AD9862 Interface #NET "aux_sdi_codec" LOC = "F19" ; #NET "aux_sdo_codec" LOC = "F18" ; #NET "aux_sclk_codec" LOC = "D21" ; @@ -163,86 +161,94 @@ NET "debug_clk<1>" LOC = "M5" ; #NET "RXSYNC" LOC = "F22" ; -#NET "DB11" LOC = "E22" ; -#NET "DB10" LOC = "J19" ; -#NET "DB09" LOC = "H20" ; -#NET "DB08" LOC = "G19" ; -#NET "DB07" LOC = "F20" ; -#NET "DB06" LOC = "K16" ; -#NET "DB05" LOC = "J17" ; -#NET "DB04" LOC = "H22" ; -#NET "DB03" LOC = "G22" ; -#NET "DB02" LOC = "H17" ; -#NET "DB01" LOC = "H18" ; -#NET "DB00" LOC = "K20" ; -#NET "DA11" LOC = "J20" ; -#NET "DA10" LOC = "K19" ; -#NET "DA09" LOC = "K18" ; -#NET "DA08" LOC = "L22" ; -#NET "DA07" LOC = "K22" ; -#NET "DA06" LOC = "N22" ; -#NET "DA05" LOC = "M22" ; -#NET "DA04" LOC = "N20" ; -#NET "DA03" LOC = "N19" ; -#NET "DA02" LOC = "R22" ; -#NET "DA01" LOC = "P22" ; -#NET "DA00" LOC = "N17" ; - -#NET "TX13" LOC = "P19" ; -#NET "TX12" LOC = "R18" ; -#NET "TX11" LOC = "U20" ; -#NET "TX10" LOC = "T20" ; -#NET "TX09" LOC = "R19" ; -#NET "TX08" LOC = "R20" ; -#NET "TX07" LOC = "W22" ; -#NET "TX06" LOC = "Y22" ; -#NET "TX05" LOC = "T18" ; -#NET "TX04" LOC = "T17" ; -#NET "TX03" LOC = "W19" ; -#NET "TX02" LOC = "V20" ; -#NET "TX01" LOC = "Y21" ; -#NET "TX00" LOC = "AA22" ; +#NET "DB<11>" LOC = "E22" ; +#NET "DB<10>" LOC = "J19" ; +#NET "DB<9>" LOC = "H20" ; +#NET "DB<8>" LOC = "G19" ; +#NET "DB<7>" LOC = "F20" ; +#NET "DB<6>" LOC = "K16" ; +#NET "DB<5>" LOC = "J17" ; +#NET "DB<4>" LOC = "H22" ; +#NET "DB<3>" LOC = "G22" ; +#NET "DB<2>" LOC = "H17" ; +#NET "DB<1>" LOC = "H18" ; +#NET "DB<0>" LOC = "K20" ; +#NET "DA<11>" LOC = "J20" ; +#NET "DA<10>" LOC = "K19" ; +#NET "DA<9>" LOC = "K18" ; +#NET "DA<8>" LOC = "L22" ; +#NET "DA<7>" LOC = "K22" ; +#NET "DA<6>" LOC = "N22" ; +#NET "DA<5>" LOC = "M22" ; +#NET "DA<4>" LOC = "N20" ; +#NET "DA<3>" LOC = "N19" ; +#NET "DA<2>" LOC = "R22" ; +#NET "DA<1>" LOC = "P22" ; +#NET "DA<0>" LOC = "N17" ; + +#NET "TX<13>" LOC = "P19" ; +#NET "TX<12>" LOC = "R18" ; +#NET "TX<11>" LOC = "U20" ; +#NET "TX<10>" LOC = "T20" ; +#NET "TX<9>" LOC = "R19" ; +#NET "TX<8>" LOC = "R20" ; +#NET "TX<7>" LOC = "W22" ; +#NET "TX<6>" LOC = "Y22" ; +#NET "TX<5>" LOC = "T18" ; +#NET "TX<4>" LOC = "T17" ; +#NET "TX<3>" LOC = "W19" ; +#NET "TX<2>" LOC = "V20" ; +#NET "TX<1>" LOC = "Y21" ; +#NET "TX<0>" LOC = "AA22" ; #NET "TXSYNC" LOC = "U18" ; #NET "TXBLANK" LOC = "U19" ; #NET "PPS_IN" LOC = "M17" ; -#NET "io_tx_00" LOC = "AB20" ; -#NET "io_tx_01" LOC = "Y17" ; -#NET "io_tx_02" LOC = "Y16" ; -#NET "io_tx_03" LOC = "U16" ; -#NET "io_tx_04" LOC = "V16" ; -#NET "io_tx_05" LOC = "AB19" ; -#NET "io_tx_06" LOC = "AA19" ; -#NET "io_tx_07" LOC = "U14" ; -#NET "io_tx_08" LOC = "U15" ; -#NET "io_tx_09" LOC = "AB17" ; -#NET "io_tx_10" LOC = "AB18" ; -#NET "io_tx_11" LOC = "Y13" ; -#NET "io_tx_12" LOC = "W14" ; -#NET "io_tx_13" LOC = "U13" ; -#NET "io_tx_14" LOC = "AA15" ; -#NET "io_tx_15" LOC = "AB14" ; -#NET "io_rx_00" LOC = "Y8" ; -#NET "io_rx_01" LOC = "Y9" ; -#NET "io_rx_02" LOC = "V7" ; -#NET "io_rx_03" LOC = "U8" ; -#NET "io_rx_04" LOC = "V10" ; -#NET "io_rx_05" LOC = "U9" ; -#NET "io_rx_06" LOC = "AB7" ; -#NET "io_rx_07" LOC = "AA8" ; -#NET "io_rx_08" LOC = "W8" ; -#NET "io_rx_09" LOC = "V8" ; -#NET "io_rx_10" LOC = "AB5" ; -#NET "io_rx_11" LOC = "AB6" ; -#NET "io_rx_12" LOC = "AB4" ; -#NET "io_rx_13" LOC = "AA4" ; -#NET "io_rx_14" LOC = "W5" ; -#NET "io_rx_15" LOC = "Y4" ; +#NET "io_tx<0>" LOC = "AB20" ; +#NET "io_tx<1>" LOC = "Y17" ; +#NET "io_tx<2>" LOC = "Y16" ; +#NET "io_tx<3>" LOC = "U16" ; +#NET "io_tx<4>" LOC = "V16" ; +#NET "io_tx<5>" LOC = "AB19" ; +#NET "io_tx<6>" LOC = "AA19" ; +#NET "io_tx<7>" LOC = "U14" ; +#NET "io_tx<8>" LOC = "U15" ; +#NET "io_tx<9>" LOC = "AB17" ; +#NET "io_tx<10>" LOC = "AB18" ; +#NET "io_tx<11>" LOC = "Y13" ; +#NET "io_tx<12>" LOC = "W14" ; +#NET "io_tx<13>" LOC = "U13" ; +#NET "io_tx<14>" LOC = "AA15" ; +#NET "io_tx<15>" LOC = "AB14" ; + +#NET "io_rx<0>" LOC = "Y8" ; +#NET "io_rx<1>" LOC = "Y9" ; +#NET "io_rx<2>" LOC = "V7" ; +#NET "io_rx<3>" LOC = "U8" ; +#NET "io_rx<4>" LOC = "V10" ; +#NET "io_rx<5>" LOC = "U9" ; +#NET "io_rx<6>" LOC = "AB7" ; +#NET "io_rx<7>" LOC = "AA8" ; +#NET "io_rx<8>" LOC = "W8" ; +#NET "io_rx<9>" LOC = "V8" ; +#NET "io_rx<10>" LOC = "AB5" ; +#NET "io_rx<11>" LOC = "AB6" ; +#NET "io_rx<12>" LOC = "AB4" ; +#NET "io_rx<13>" LOC = "AA4" ; +#NET "io_rx<14>" LOC = "W5" ; +#NET "io_rx<15>" LOC = "Y4" ; #NET "CLKOUT2_CODEC" LOC = "U12" ; #NET "CLKOUT1_CODEC" LOC = "V12" ; +## FPGA Config Pins +#NET "fpga_cfg_prog_b" LOC = "A2" ; +#NET "fpga_cfg_done" LOC = "AB21" ; +#NET "fpga_cfg_din" LOC = "W17" ; +#NET "fpga_cfg_cclk" LOC = "V17" ; +#NET "fpga_cfg_init_b" LOC = "W15" ; + ## Unnamed, need to figure out what they do #NET "unnamed_net37" LOC = "B1" ; #NET "unnamed_net36" LOC = "B22" ; @@ -252,3 +258,5 @@ NET "debug_clk<1>" LOC = "M5" ; #NET "unnamed_net44" LOC = "V6" ; #NET "unnamed_net43" LOC = "AA3" ; #NET "unnamed_net42" LOC = "AB3" ; + +#NET "GND" LOC = "V19" ; -- cgit v1.2.3 From 034eeacfe8d35b0e9733dd9183f1a9dbed78f347 Mon Sep 17 00:00:00 2001 From: Matt Ettus Date: Tue, 16 Feb 2010 10:24:18 -0800 Subject: basic read support for the GPMC, responds with 16'hBEEF --- usrp2/top/safe_u1e/safe_u1e.v | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/usrp2/top/safe_u1e/safe_u1e.v b/usrp2/top/safe_u1e/safe_u1e.v index 3f16d941c..ddd203cf9 100644 --- a/usrp2/top/safe_u1e/safe_u1e.v +++ b/usrp2/top/safe_u1e/safe_u1e.v @@ -7,7 +7,7 @@ module safe_u1e output [2:0] debug_led, output [31:0] debug, output [1:0] debug_clk, // GPMC - input EM_CLK, input [15:0] EM_D, input [10:1] EM_A, + input EM_CLK, inout [15:0] EM_D, input [10:1] EM_A, input EM_WAIT0, input EM_NCS4, input EM_NWP, input EM_NWE, input EM_NOE, input EM_NADV_ALE ); @@ -27,5 +27,11 @@ module safe_u1e assign debug_clk = { EM_CLK, clk_fpga }; assign debug = { { EM_WAIT0, EM_NADV_ALE, EM_NWP, EM_NCS4, EM_NWE, EM_NOE, EM_A[10:1] }, { EM_D } }; - + + wire EM_output_enable = (~EM_NOE & ~EM_NCS4); + wire [15:0] EM_D_out = 16'hBEEF; + wire [15:0] EM_D_in = EM_D; + + assign EM_D = EM_output_enable ? EM_D_out : 16'bz; + endmodule // safe_u2plus -- cgit v1.2.3 From 8e76952016272c9898776b6beb7a69f476d4707e Mon Sep 17 00:00:00 2001 From: Matt Ettus Date: Tue, 16 Feb 2010 16:21:00 -0800 Subject: block ram interface to GPMC --- usrp2/top/safe_u1e/safe_u1e.v | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/usrp2/top/safe_u1e/safe_u1e.v b/usrp2/top/safe_u1e/safe_u1e.v index ddd203cf9..dee9c6067 100644 --- a/usrp2/top/safe_u1e/safe_u1e.v +++ b/usrp2/top/safe_u1e/safe_u1e.v @@ -29,9 +29,13 @@ module safe_u1e { EM_D } }; wire EM_output_enable = (~EM_NOE & ~EM_NCS4); - wire [15:0] EM_D_out = 16'hBEEF; - wire [15:0] EM_D_in = EM_D; + wire [15:0] EM_D_out; assign EM_D = EM_output_enable ? EM_D_out : 16'bz; + + ram_2port #(.DWIDTH(16), .AWIDTH(10)) ram_2port + (.clka(clk_fpga), .ena(~EM_NCS4), .wea(~EM_NWE), .addra(EM_A), .dia(EM_D), .doa(EM_D_out), + .clkb(clk_fpga), .enb(0), .web(0), .addrb(0), .dib(0), .dob()); + endmodule // safe_u2plus -- cgit v1.2.3 From c1ddc5c082c053eaa46c8bc87064d3e3e56b0d9e Mon Sep 17 00:00:00 2001 From: Matt Ettus Date: Tue, 16 Feb 2010 16:29:44 -0800 Subject: copied over from safe_u1e --- usrp2/top/u1e/.gitignore | 4 + usrp2/top/u1e/Makefile | 246 ++++++++++++++++++++++++++++++++++++++++++++ usrp2/top/u1e/u1e.ucf | 262 +++++++++++++++++++++++++++++++++++++++++++++++ usrp2/top/u1e/u1e.v | 41 ++++++++ 4 files changed, 553 insertions(+) create mode 100644 usrp2/top/u1e/.gitignore create mode 100644 usrp2/top/u1e/Makefile create mode 100644 usrp2/top/u1e/u1e.ucf create mode 100644 usrp2/top/u1e/u1e.v diff --git a/usrp2/top/u1e/.gitignore b/usrp2/top/u1e/.gitignore new file mode 100644 index 000000000..f8b57ea21 --- /dev/null +++ b/usrp2/top/u1e/.gitignore @@ -0,0 +1,4 @@ +*~ +build +*.log +*.cmd diff --git a/usrp2/top/u1e/Makefile b/usrp2/top/u1e/Makefile new file mode 100644 index 000000000..e9c101226 --- /dev/null +++ b/usrp2/top/u1e/Makefile @@ -0,0 +1,246 @@ +# +# Copyright 2008 Ettus Research LLC +# +# 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. +# + +################################################## +# xtclsh Shell and tcl Script Path +################################################## +#XTCLSH := /opt/Xilinx/10.1/ISE/bin/lin/xtclsh +XTCLSH := xtclsh +ISE_HELPER := ../tcl/ise_helper.tcl + +################################################## +# Project Setup +################################################## +BUILD_DIR := build/ +export TOP_MODULE := u1e +export PROJ_FILE := $(BUILD_DIR)$(TOP_MODULE).ise + +################################################## +# Project Properties +################################################## +export PROJECT_PROPERTIES := \ +family "Spartan-3A DSP" \ +device xc3sd1800a \ +package cs484 \ +speed -4 \ +top_level_module_type "HDL" \ +synthesis_tool "XST (VHDL/Verilog)" \ +simulator "ISE Simulator (VHDL/Verilog)" \ +"Preferred Language" "Verilog" \ +"Enable Message Filtering" FALSE \ +"Display Incremental Messages" FALSE + +################################################## +# Sources +################################################## +export SOURCE_ROOT := ../../../ +export SOURCES := \ +control_lib/CRC16_D16.v \ +control_lib/atr_controller.v \ +control_lib/bin2gray.v \ +control_lib/dcache.v \ +control_lib/decoder_3_8.v \ +control_lib/dpram32.v \ +control_lib/gray2bin.v \ +control_lib/gray_send.v \ +control_lib/icache.v \ +control_lib/mux4.v \ +control_lib/mux8.v \ +control_lib/nsgpio.v \ +control_lib/ram_2port.v \ +control_lib/ram_harv_cache.v \ +control_lib/ram_loader.v \ +control_lib/setting_reg.v \ +control_lib/settings_bus.v \ +control_lib/srl.v \ +control_lib/system_control.v \ +control_lib/wb_1master.v \ +control_lib/wb_readback_mux.v \ +control_lib/simple_uart.v \ +control_lib/simple_uart_tx.v \ +control_lib/simple_uart_rx.v \ +control_lib/oneshot_2clk.v \ +control_lib/sd_spi.v \ +control_lib/sd_spi_wb.v \ +control_lib/wb_bridge_16_32.v \ +control_lib/reset_sync.v \ +simple_gemac/simple_gemac_wrapper.v \ +simple_gemac/simple_gemac.v \ +simple_gemac/simple_gemac_wb.v \ +simple_gemac/simple_gemac_tx.v \ +simple_gemac/simple_gemac_rx.v \ +simple_gemac/crc.v \ +simple_gemac/delay_line.v \ +simple_gemac/flow_ctrl_tx.v \ +simple_gemac/flow_ctrl_rx.v \ +simple_gemac/address_filter.v \ +simple_gemac/ll8_to_txmac.v \ +simple_gemac/rxmac_to_ll8.v \ +simple_gemac/miim/eth_miim.v \ +simple_gemac/miim/eth_clockgen.v \ +simple_gemac/miim/eth_outputcontrol.v \ +simple_gemac/miim/eth_shiftreg.v \ +control_lib/newfifo/buffer_int.v \ +control_lib/newfifo/buffer_pool.v \ +control_lib/newfifo/fifo_2clock.v \ +control_lib/newfifo/fifo_2clock_cascade.v \ +control_lib/newfifo/ll8_shortfifo.v \ +control_lib/newfifo/ll8_to_fifo36.v \ +control_lib/newfifo/fifo_short.v \ +control_lib/newfifo/fifo_long.v \ +control_lib/newfifo/fifo_cascade.v \ +control_lib/newfifo/fifo36_to_ll8.v \ +control_lib/longfifo.v \ +control_lib/shortfifo.v \ +control_lib/medfifo.v \ +coregen/fifo_xlnx_2Kx36_2clk.v \ +coregen/fifo_xlnx_2Kx36_2clk.xco \ +coregen/fifo_xlnx_512x36_2clk.v \ +coregen/fifo_xlnx_512x36_2clk.xco \ +coregen/fifo_xlnx_64x36_2clk.v \ +coregen/fifo_xlnx_64x36_2clk.xco \ +extram/wb_zbt16_b.v \ +opencores/8b10b/decode_8b10b.v \ +opencores/8b10b/encode_8b10b.v \ +opencores/aemb/rtl/verilog/aeMB_bpcu.v \ +opencores/aemb/rtl/verilog/aeMB_core_BE.v \ +opencores/aemb/rtl/verilog/aeMB_ctrl.v \ +opencores/aemb/rtl/verilog/aeMB_edk32.v \ +opencores/aemb/rtl/verilog/aeMB_ibuf.v \ +opencores/aemb/rtl/verilog/aeMB_regf.v \ +opencores/aemb/rtl/verilog/aeMB_xecu.v \ +opencores/i2c/rtl/verilog/i2c_master_bit_ctrl.v \ +opencores/i2c/rtl/verilog/i2c_master_byte_ctrl.v \ +opencores/i2c/rtl/verilog/i2c_master_defines.v \ +opencores/i2c/rtl/verilog/i2c_master_top.v \ +opencores/i2c/rtl/verilog/timescale.v \ +opencores/simple_pic/rtl/simple_pic.v \ +opencores/spi/rtl/verilog/spi_clgen.v \ +opencores/spi/rtl/verilog/spi_defines.v \ +opencores/spi/rtl/verilog/spi_shift.v \ +opencores/spi/rtl/verilog/spi_top.v \ +opencores/spi/rtl/verilog/timescale.v \ +sdr_lib/acc.v \ +sdr_lib/add2.v \ +sdr_lib/add2_and_round.v \ +sdr_lib/add2_and_round_reg.v \ +sdr_lib/add2_reg.v \ +sdr_lib/cic_dec_shifter.v \ +sdr_lib/cic_decim.v \ +sdr_lib/cic_int_shifter.v \ +sdr_lib/cic_interp.v \ +sdr_lib/cic_strober.v \ +sdr_lib/clip.v \ +sdr_lib/clip_reg.v \ +sdr_lib/cordic.v \ +sdr_lib/cordic_z24.v \ +sdr_lib/cordic_stage.v \ +sdr_lib/dsp_core_rx.v \ +sdr_lib/dsp_core_tx.v \ +sdr_lib/hb_dec.v \ +sdr_lib/hb_interp.v \ +sdr_lib/round.v \ +sdr_lib/round_reg.v \ +sdr_lib/rx_control.v \ +sdr_lib/rx_dcoffset.v \ +sdr_lib/sign_extend.v \ +sdr_lib/small_hb_dec.v \ +sdr_lib/small_hb_int.v \ +sdr_lib/tx_control.v \ +serdes/serdes.v \ +serdes/serdes_fc_rx.v \ +serdes/serdes_fc_tx.v \ +serdes/serdes_rx.v \ +serdes/serdes_tx.v \ +timing/time_receiver.v \ +timing/time_sender.v \ +timing/time_sync.v \ +timing/timer.v \ +top/u2_core/u2_core.v \ +top/u1e/u1e.ucf \ +top/u1e/u1e.v + +################################################## +# Process Properties +################################################## +export SYNTHESIZE_PROPERTIES := \ +"Number of Clock Buffers" 6 \ +"Pack I/O Registers into IOBs" Yes \ +"Optimization Effort" High \ +"Optimize Instantiated Primitives" TRUE \ +"Register Balancing" Yes \ +"Use Clock Enable" Auto \ +"Use Synchronous Reset" Auto \ +"Use Synchronous Set" Auto + +export TRANSLATE_PROPERTIES := \ +"Macro Search Path" "$(shell pwd)/../../coregen/" + +export MAP_PROPERTIES := \ +"Allow Logic Optimization Across Hierarchy" TRUE \ +"Map to Input Functions" 4 \ +"Optimization Strategy (Cover Mode)" Speed \ +"Pack I/O Registers/Latches into IOBs" "For Inputs and Outputs" \ +"Perform Timing-Driven Packing and Placement" TRUE \ +"Map Effort Level" High \ +"Extra Effort" Normal \ +"Combinatorial Logic Optimization" TRUE \ +"Register Duplication" TRUE + +export PLACE_ROUTE_PROPERTIES := \ +"Place & Route Effort Level (Overall)" High + +export STATIC_TIMING_PROPERTIES := \ +"Number of Paths in Error/Verbose Report" 10 \ +"Report Type" "Error Report" + +export GEN_PROG_FILE_PROPERTIES := \ +"Configuration Rate" 6 \ +"Create Binary Configuration File" TRUE \ +"Done (Output Events)" 5 \ +"Enable Bitstream Compression" TRUE \ +"Enable Outputs (Output Events)" 6 \ +"Unused IOB Pins" "Pull Up" + +export SIM_MODEL_PROPERTIES := "" + +################################################## +# Make Options +################################################## +all: + @echo make proj, check, synth, bin, or clean + +proj: + PROCESS_RUN="" $(XTCLSH) $(ISE_HELPER) + +check: + PROCESS_RUN="Check Syntax" $(XTCLSH) $(ISE_HELPER) + +synth: + PROCESS_RUN="Synthesize - XST" $(XTCLSH) $(ISE_HELPER) + +bin: + PROCESS_RUN="Generate Programming File" $(XTCLSH) $(ISE_HELPER) + +clean: + rm -rf $(BUILD_DIR) + + diff --git a/usrp2/top/u1e/u1e.ucf b/usrp2/top/u1e/u1e.ucf new file mode 100644 index 000000000..cb6d6372e --- /dev/null +++ b/usrp2/top/u1e/u1e.ucf @@ -0,0 +1,262 @@ + +NET "CLK_FPGA_P" LOC = "Y11" ; +NET "CLK_FPGA_N" LOC = "Y10" ; + +## GPMC +NET "EM_CLK" LOC = "F11" ; + +NET "EM_D<15>" LOC = "D13" ; +NET "EM_D<14>" LOC = "D15" ; +NET "EM_D<13>" LOC = "C16" ; +NET "EM_D<12>" LOC = "B20" ; +NET "EM_D<11>" LOC = "A19" ; +NET "EM_D<10>" LOC = "A17" ; +NET "EM_D<9>" LOC = "E15" ; +NET "EM_D<8>" LOC = "F15" ; +NET "EM_D<7>" LOC = "E16" ; +NET "EM_D<6>" LOC = "F16" ; +NET "EM_D<5>" LOC = "B17" ; +NET "EM_D<4>" LOC = "C17" ; +NET "EM_D<3>" LOC = "B19" ; +NET "EM_D<2>" LOC = "D19" ; +NET "EM_D<1>" LOC = "C19" ; +NET "EM_D<0>" LOC = "A20" ; + +NET "EM_A<10>" LOC = "C14" ; +NET "EM_A<9>" LOC = "C10" ; +NET "EM_A<8>" LOC = "C5" ; +NET "EM_A<7>" LOC = "A18" ; +NET "EM_A<6>" LOC = "A15" ; +NET "EM_A<5>" LOC = "A12" ; +NET "EM_A<4>" LOC = "A10" ; +NET "EM_A<3>" LOC = "E7" ; +NET "EM_A<2>" LOC = "A7" ; +NET "EM_A<1>" LOC = "C15" ; + +#NET "EM_NCS6" LOC = "E17" ; +#NET "EM_NCS5" LOC = "E10" ; +NET "EM_NCS4" LOC = "E6" ; +#NET "EM_NCS1" LOC = "D18" ; +#NET "EM_NCS0" LOC = "D17" ; + +NET "EM_WAIT0" LOC = "F14" ; +#NET "EM_NBE1" LOC = "D14" ; +#NET "EM_NBE0" LOC = "A13" ; +NET "EM_NWP" LOC = "F13" ; +NET "EM_NWE" LOC = "B13" ; +NET "EM_NOE" LOC = "A14" ; +NET "EM_NADV_ALE" LOC = "B15" ; + + +## Overo GPIO +#NET "overo_gpio0" LOC = "F9" ; +#NET "overo_gpio14" LOC = "C4" ; +#NET "overo_gpio21" LOC = "D5" ; +#NET "overo_gpio22" LOC = "A3" ; +#NET "overo_gpio23" LOC = "B3" ; +#NET "overo_gpio64" LOC = "A4" ; +#NET "overo_gpio65" LOC = "F8" ; +#NET "overo_gpio127" LOC = "C8" ; +#NET "overo_gpio128" LOC = "G8" ; +#NET "overo_gpio144" LOC = "A5" ; +#NET "overo_gpio145" LOC = "C7" ; +#NET "overo_gpio146" LOC = "A6" ; +#NET "overo_gpio147" LOC = "B6" ; +#NET "overo_gpio163" LOC = "D7" ; +#NET "overo_gpio170" LOC = "E8" ; +#NET "overo_gpio176" LOC = "B4" ; + +## Overo UART +#NET "overo_txd1" LOC = "C6" ; +#NET "overo_rxd1" LOC = "D6" ; + +#NET "FPGA_TXD" LOC = "U1" ; +#NET "FPGA_RXD" LOC = "T6" ; + +#NET "SYSEN" LOC = "C11" ; + +#NET "db_scl" LOC = "U4" ; +#NET "db_sda" LOC = "U5" ; +#NET "db_sclk_rx" LOC = "W3" ; +#NET "db_miso_rx" LOC = "W2" ; +#NET "db_mosi_rx" LOC = "V4" ; +#NET "db_sen_rx" LOC = "V3" ; +#NET "db_sclk_tx" LOC = "Y1" ; +#NET "db_miso_tx" LOC = "W1" ; +#NET "db_mosi_tx" LOC = "R3" ; +#NET "db_sen_tx" LOC = "T4" ; + +## Clock Gen +#NET "cgen_miso" LOC = "U2" ; +#NET "cgen_mosi" LOC = "V1" ; +#NET "cgen_sclk" LOC = "R5" ; +#NET "cgen_sen_b" LOC = "T1" ; +#NET "cgen_st_status" LOC = "D4" ; +#NET "cgen_st_ld" LOC = "D1" ; +#NET "cgen_st_refmon" LOC = "E1" ; +#NET "cgen_sync_b" LOC = "M1" ; +#NET "cgen_ref_sel" LOC = "J1" ; + +## Debug pins +NET "debug_led<2>" LOC = "T5" ; +NET "debug_led<1>" LOC = "R2" ; +NET "debug_led<0>" LOC = "R1" ; +NET "debug<0>" LOC = "P6" ; +NET "debug<1>" LOC = "R6" ; +NET "debug<2>" LOC = "P1" ; +NET "debug<3>" LOC = "P2" ; +NET "debug<4>" LOC = "N6" ; +NET "debug<5>" LOC = "N5" ; +NET "debug<6>" LOC = "N1" ; +NET "debug<7>" LOC = "K2" ; +NET "debug<8>" LOC = "K3" ; +NET "debug<9>" LOC = "K6" ; +NET "debug<10>" LOC = "L5" ; +NET "debug<11>" LOC = "H2" ; +NET "debug<12>" LOC = "K4" ; +NET "debug<13>" LOC = "K5" ; +NET "debug<14>" LOC = "G1" ; +NET "debug<15>" LOC = "H1" ; +NET "debug<16>" LOC = "H5" ; +NET "debug<17>" LOC = "H6" ; +NET "debug<18>" LOC = "E3" ; +NET "debug<19>" LOC = "E4" ; +NET "debug<20>" LOC = "G5" ; +NET "debug<21>" LOC = "G6" ; +NET "debug<22>" LOC = "F2" ; +NET "debug<23>" LOC = "F1" ; +NET "debug<24>" LOC = "H3" ; +NET "debug<25>" LOC = "H4" ; +NET "debug<26>" LOC = "F4" ; +NET "debug<27>" LOC = "F5" ; +NET "debug<28>" LOC = "C2" ; +NET "debug<29>" LOC = "C1" ; +NET "debug<30>" LOC = "F3" ; +NET "debug<31>" LOC = "G3" ; +NET "debug_clk<0>" LOC = "L6" ; +NET "debug_clk<1>" LOC = "M5" ; + +#NET "debug_pb<2>" LOC = "Y2" ; +#NET "debug_pb<1>" LOC = "AA1" ; +#NET "debug_pb<0>" LOC = "N3" ; + +#NET "dip_sw<7>" LOC = "T3" ; +#NET "dip_sw<6>" LOC = "U3" ; +#NET "dip_sw<5>" LOC = "M3" ; +#NET "dip_sw<4>" LOC = "N4" ; +#NET "dip_sw<3>" LOC = "J3" ; +#NET "dip_sw<2>" LOC = "J4" ; +#NET "dip_sw<1>" LOC = "J6" ; +#NET "dip_sw<0>" LOC = "J7" ; + +## AD9862 Interface +#NET "aux_sdi_codec" LOC = "F19" ; +#NET "aux_sdo_codec" LOC = "F18" ; +#NET "aux_sclk_codec" LOC = "D21" ; +#NET "reset_codec" LOC = "D22" ; +#NET "sen_codec" LOC = "D20" ; +#NET "mosi_codec" LOC = "E19" ; +#NET "miso_codec" LOC = "F21" ; +#NET "sclk_codec" LOC = "E20" ; + +#NET "RXSYNC" LOC = "F22" ; + +#NET "DB<11>" LOC = "E22" ; +#NET "DB<10>" LOC = "J19" ; +#NET "DB<9>" LOC = "H20" ; +#NET "DB<8>" LOC = "G19" ; +#NET "DB<7>" LOC = "F20" ; +#NET "DB<6>" LOC = "K16" ; +#NET "DB<5>" LOC = "J17" ; +#NET "DB<4>" LOC = "H22" ; +#NET "DB<3>" LOC = "G22" ; +#NET "DB<2>" LOC = "H17" ; +#NET "DB<1>" LOC = "H18" ; +#NET "DB<0>" LOC = "K20" ; +#NET "DA<11>" LOC = "J20" ; +#NET "DA<10>" LOC = "K19" ; +#NET "DA<9>" LOC = "K18" ; +#NET "DA<8>" LOC = "L22" ; +#NET "DA<7>" LOC = "K22" ; +#NET "DA<6>" LOC = "N22" ; +#NET "DA<5>" LOC = "M22" ; +#NET "DA<4>" LOC = "N20" ; +#NET "DA<3>" LOC = "N19" ; +#NET "DA<2>" LOC = "R22" ; +#NET "DA<1>" LOC = "P22" ; +#NET "DA<0>" LOC = "N17" ; + +#NET "TX<13>" LOC = "P19" ; +#NET "TX<12>" LOC = "R18" ; +#NET "TX<11>" LOC = "U20" ; +#NET "TX<10>" LOC = "T20" ; +#NET "TX<9>" LOC = "R19" ; +#NET "TX<8>" LOC = "R20" ; +#NET "TX<7>" LOC = "W22" ; +#NET "TX<6>" LOC = "Y22" ; +#NET "TX<5>" LOC = "T18" ; +#NET "TX<4>" LOC = "T17" ; +#NET "TX<3>" LOC = "W19" ; +#NET "TX<2>" LOC = "V20" ; +#NET "TX<1>" LOC = "Y21" ; +#NET "TX<0>" LOC = "AA22" ; +#NET "TXSYNC" LOC = "U18" ; +#NET "TXBLANK" LOC = "U19" ; + +#NET "PPS_IN" LOC = "M17" ; + +#NET "io_tx<0>" LOC = "AB20" ; +#NET "io_tx<1>" LOC = "Y17" ; +#NET "io_tx<2>" LOC = "Y16" ; +#NET "io_tx<3>" LOC = "U16" ; +#NET "io_tx<4>" LOC = "V16" ; +#NET "io_tx<5>" LOC = "AB19" ; +#NET "io_tx<6>" LOC = "AA19" ; +#NET "io_tx<7>" LOC = "U14" ; +#NET "io_tx<8>" LOC = "U15" ; +#NET "io_tx<9>" LOC = "AB17" ; +#NET "io_tx<10>" LOC = "AB18" ; +#NET "io_tx<11>" LOC = "Y13" ; +#NET "io_tx<12>" LOC = "W14" ; +#NET "io_tx<13>" LOC = "U13" ; +#NET "io_tx<14>" LOC = "AA15" ; +#NET "io_tx<15>" LOC = "AB14" ; + +#NET "io_rx<0>" LOC = "Y8" ; +#NET "io_rx<1>" LOC = "Y9" ; +#NET "io_rx<2>" LOC = "V7" ; +#NET "io_rx<3>" LOC = "U8" ; +#NET "io_rx<4>" LOC = "V10" ; +#NET "io_rx<5>" LOC = "U9" ; +#NET "io_rx<6>" LOC = "AB7" ; +#NET "io_rx<7>" LOC = "AA8" ; +#NET "io_rx<8>" LOC = "W8" ; +#NET "io_rx<9>" LOC = "V8" ; +#NET "io_rx<10>" LOC = "AB5" ; +#NET "io_rx<11>" LOC = "AB6" ; +#NET "io_rx<12>" LOC = "AB4" ; +#NET "io_rx<13>" LOC = "AA4" ; +#NET "io_rx<14>" LOC = "W5" ; +#NET "io_rx<15>" LOC = "Y4" ; + +#NET "CLKOUT2_CODEC" LOC = "U12" ; +#NET "CLKOUT1_CODEC" LOC = "V12" ; + +## FPGA Config Pins +#NET "fpga_cfg_prog_b" LOC = "A2" ; +#NET "fpga_cfg_done" LOC = "AB21" ; +#NET "fpga_cfg_din" LOC = "W17" ; +#NET "fpga_cfg_cclk" LOC = "V17" ; +#NET "fpga_cfg_init_b" LOC = "W15" ; + +## Unnamed, need to figure out what they do +#NET "unnamed_net37" LOC = "B1" ; +#NET "unnamed_net36" LOC = "B22" ; +#NET "unnamed_net35" LOC = "D2" ; +#NET "unnamed_net34" LOC = "A21" ; +#NET "unnamed_net45" LOC = "F7" ; +#NET "unnamed_net44" LOC = "V6" ; +#NET "unnamed_net43" LOC = "AA3" ; +#NET "unnamed_net42" LOC = "AB3" ; + +#NET "GND" LOC = "V19" ; diff --git a/usrp2/top/u1e/u1e.v b/usrp2/top/u1e/u1e.v new file mode 100644 index 000000000..e28a6a582 --- /dev/null +++ b/usrp2/top/u1e/u1e.v @@ -0,0 +1,41 @@ +`timescale 1ns / 1ps +////////////////////////////////////////////////////////////////////////////////// + +module u1e + ( + input CLK_FPGA_P, input CLK_FPGA_N, // Diff + output [2:0] debug_led, output [31:0] debug, output [1:0] debug_clk, + + // GPMC + input EM_CLK, inout [15:0] EM_D, input [10:1] EM_A, + input EM_WAIT0, input EM_NCS4, input EM_NWP, input EM_NWE, input EM_NOE, input EM_NADV_ALE + ); + + // FPGA-specific pins connections + wire clk_fpga; + + IBUFGDS #(.IOSTANDARD("LVDS_33"), .DIFF_TERM("TRUE")) + clk_fpga_pin (.O(clk_fpga),.I(CLK_FPGA_P),.IB(CLK_FPGA_N)); + + // Debug circuitry + reg [31:0] ctr; + always @(posedge clk_fpga) + ctr <= ctr + 1; + + + assign debug_led = ctr[27:25]; + assign debug_clk = { EM_CLK, clk_fpga }; + assign debug = { { EM_WAIT0, EM_NADV_ALE, EM_NWP, EM_NCS4, EM_NWE, EM_NOE, EM_A[10:1] }, + { EM_D } }; + + wire EM_output_enable = (~EM_NOE & ~EM_NCS4); + wire [15:0] EM_D_out; + + assign EM_D = EM_output_enable ? EM_D_out : 16'bz; + + ram_2port #(.DWIDTH(16), .AWIDTH(10)) ram_2port + (.clka(clk_fpga), .ena(~EM_NCS4), .wea(~EM_NWE), .addra(EM_A), .dia(EM_D), .doa(EM_D_out), + .clkb(clk_fpga), .enb(0), .web(0), .addrb(0), .dib(0), .dob()); + + +endmodule // u2plus -- cgit v1.2.3 From b115e4d7661d64c6d20f0421908622b56a91e950 Mon Sep 17 00:00:00 2001 From: Matt Ettus Date: Tue, 16 Feb 2010 18:47:22 -0800 Subject: first cut at gpmc <-> wb bridge, split u1e into core, top, and tb --- .gitignore | 1 + usrp2/gpmc/gpmc.v | 66 ++++++++++++++++++++++++++++++++++++++++++++++++ usrp2/top/u1e/Makefile | 3 ++- usrp2/top/u1e/tb_u1e.v | 25 ++++++++++++++++++ usrp2/top/u1e/u1e.ucf | 14 +++++----- usrp2/top/u1e/u1e.v | 33 ++++++------------------ usrp2/top/u1e/u1e_core.v | 52 ++++++++++++++++++++++++++++++++++++++ 7 files changed, 160 insertions(+), 34 deletions(-) create mode 100644 .gitignore create mode 100644 usrp2/gpmc/gpmc.v create mode 100644 usrp2/top/u1e/tb_u1e.v create mode 100644 usrp2/top/u1e/u1e_core.v diff --git a/.gitignore b/.gitignore new file mode 100644 index 000000000..b25c15b81 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +*~ diff --git a/usrp2/gpmc/gpmc.v b/usrp2/gpmc/gpmc.v new file mode 100644 index 000000000..96ee139fd --- /dev/null +++ b/usrp2/gpmc/gpmc.v @@ -0,0 +1,66 @@ +`timescale 1ns / 1ps +////////////////////////////////////////////////////////////////////////////////// + +module gpmc + (input EM_CLK, inout [15:0] EM_D, input [10:1] EM_A, input [1:0] EM_NBE, + input EM_WAIT0, input EM_NCS4, input EM_NCS6, input EM_NWE, input EM_NOE, + + input wb_clk, input wb_rst, + output reg [10:0] wb_adr_o, output reg [15:0] wb_dat_mosi, input [15:0] wb_dat_miso, + output reg [1:0] wb_sel_o, output wb_cyc_o, output reg wb_stb_o, output reg wb_we_o, input wb_ack_i + ); + + wire EM_output_enable = (~EM_NOE & (~EM_NCS4 | ~EM_NCS6)); + wire [15:0] EM_D_ram; + reg [15:0] EM_D_wb; + + assign EM_D = ~EM_output_enable ? 16'bz : ~EM_NCS4 ? EM_D_ram : EM_D_wb; + + // CS4 is RAM_2PORT for high-speed data + ram_2port #(.DWIDTH(16), .AWIDTH(10)) ram_2port + (.clka(clk_fpga), .ena(~EM_NCS4), .wea(~EM_NWE), .addra(EM_A), .dia(EM_D), .doa(EM_D_ram), + .clkb(clk_fpga), .enb(0), .web(0), .addrb(0), .dib(0), .dob()); + + // CS6 is Control, Wishbone bus bridge (wb master) + // Sync version + reg [1:0] cs_del, we_del, oe_del; + + // Synchronize the async control signals + always @(posedge wb_clk) + begin + cs_del <= { cs_del[0], EM_NCS6 }; + we_del <= { we_del[0], EM_NWE }; + oe_del <= { oe_del[0], EM_NOE }; + end + + always @(posedge wb_clk) + if(cs_del == 2'b10) // Falling Edge + wb_adr_o <= { EM_A, 1'b0 }; + + always @(posedge wb_clk) + if(we_del == 2'b10) // Falling Edge + begin + wb_dat_mosi <= EM_D; + wb_sel_o <= ~EM_NBE; + end + + always @(posedge wb_clk) + if(wb_ack_i) + EM_D_wb <= wb_dat_miso; + + // stb, oe_del, we_del + assign wb_cyc_o = wb_stb_o; + + always @(posedge wb_clk) + if( ~cs_del[0] & (we_del == 2'b10) ) + wb_we_o <= 1; + else if(wb_ack_i) // Turn off we when done. Could also use we_del[0], others... + wb_we_o <= 0; + + always @(posedge wb_clk) + if( ~cs_del[0] & ((we_del == 2'b10) | (oe_del == 2'b10))) + wb_stb_o <= 1; + else if(wb_ack_i) + wb_stb_o <= 0; + +endmodule // gpmc diff --git a/usrp2/top/u1e/Makefile b/usrp2/top/u1e/Makefile index e9c101226..cdbdf995e 100644 --- a/usrp2/top/u1e/Makefile +++ b/usrp2/top/u1e/Makefile @@ -174,7 +174,8 @@ timing/time_receiver.v \ timing/time_sender.v \ timing/time_sync.v \ timing/timer.v \ -top/u2_core/u2_core.v \ +gpmc/gpmc.v \ +top/u1e/u1e_core.v \ top/u1e/u1e.ucf \ top/u1e/u1e.v diff --git a/usrp2/top/u1e/tb_u1e.v b/usrp2/top/u1e/tb_u1e.v new file mode 100644 index 000000000..6e0c60e17 --- /dev/null +++ b/usrp2/top/u1e/tb_u1e.v @@ -0,0 +1,25 @@ +`timescale 1ns / 1ps +////////////////////////////////////////////////////////////////////////////////// + +module tb_u1e(); + + wire [2:0] debug_led; + wire [31:0] debug; + wire [1:0] debug_clk; + + + // GPMC + wire EM_CLK, EM_WAIT0, EM_NCS4, EM_NCS6, EM_NWE, EM_NOE; + wire [15:0] EM_D; + wire [10:1] EM_A; + wire [1:0] EM_NBE; + + reg clk_fpga = 0; + always #100 clk_fpga = ~clk_fpga; + + u1e_core u1e_core(.clk_fpga(clk_fpga), .debug_led(debug_led), .debug(debug), .debug_clk(debug_clk), + .EM_CLK(EM_CLK), .EM_D(EM_D), .EM_A(EM_A), .EM_NBE(EM_NBE), + .EM_WAIT0(EM_WAIT0), .EM_NCS4(EM_NCS4), .EM_NCS6(EM_NCS6), + .EM_NWE(EM_NWE), .EM_NOE(EM_NOE) ); + +endmodule // u1e diff --git a/usrp2/top/u1e/u1e.ucf b/usrp2/top/u1e/u1e.ucf index cb6d6372e..3b524a6ea 100644 --- a/usrp2/top/u1e/u1e.ucf +++ b/usrp2/top/u1e/u1e.ucf @@ -3,8 +3,6 @@ NET "CLK_FPGA_P" LOC = "Y11" ; NET "CLK_FPGA_N" LOC = "Y10" ; ## GPMC -NET "EM_CLK" LOC = "F11" ; - NET "EM_D<15>" LOC = "D13" ; NET "EM_D<14>" LOC = "D15" ; NET "EM_D<13>" LOC = "C16" ; @@ -33,20 +31,20 @@ NET "EM_A<3>" LOC = "E7" ; NET "EM_A<2>" LOC = "A7" ; NET "EM_A<1>" LOC = "C15" ; -#NET "EM_NCS6" LOC = "E17" ; +NET "EM_NCS6" LOC = "E17" ; #NET "EM_NCS5" LOC = "E10" ; NET "EM_NCS4" LOC = "E6" ; #NET "EM_NCS1" LOC = "D18" ; #NET "EM_NCS0" LOC = "D17" ; +NET "EM_CLK" LOC = "F11" ; NET "EM_WAIT0" LOC = "F14" ; -#NET "EM_NBE1" LOC = "D14" ; -#NET "EM_NBE0" LOC = "A13" ; -NET "EM_NWP" LOC = "F13" ; +NET "EM_NBE<1>" LOC = "D14" ; +NET "EM_NBE<0>" LOC = "A13" ; NET "EM_NWE" LOC = "B13" ; NET "EM_NOE" LOC = "A14" ; -NET "EM_NADV_ALE" LOC = "B15" ; - +#NET "EM_NADV_ALE" LOC = "B15" ; +#NET "EM_NWP" LOC = "F13" ; ## Overo GPIO #NET "overo_gpio0" LOC = "F9" ; diff --git a/usrp2/top/u1e/u1e.v b/usrp2/top/u1e/u1e.v index e28a6a582..8832d6e11 100644 --- a/usrp2/top/u1e/u1e.v +++ b/usrp2/top/u1e/u1e.v @@ -2,13 +2,12 @@ ////////////////////////////////////////////////////////////////////////////////// module u1e - ( - input CLK_FPGA_P, input CLK_FPGA_N, // Diff + (input CLK_FPGA_P, input CLK_FPGA_N, // Diff output [2:0] debug_led, output [31:0] debug, output [1:0] debug_clk, // GPMC - input EM_CLK, inout [15:0] EM_D, input [10:1] EM_A, - input EM_WAIT0, input EM_NCS4, input EM_NWP, input EM_NWE, input EM_NOE, input EM_NADV_ALE + input EM_CLK, inout [15:0] EM_D, input [10:1] EM_A, input [1:0] EM_NBE, + input EM_WAIT0, input EM_NCS4, input EM_NCS6, input EM_NWE, input EM_NOE ); // FPGA-specific pins connections @@ -17,25 +16,9 @@ module u1e IBUFGDS #(.IOSTANDARD("LVDS_33"), .DIFF_TERM("TRUE")) clk_fpga_pin (.O(clk_fpga),.I(CLK_FPGA_P),.IB(CLK_FPGA_N)); - // Debug circuitry - reg [31:0] ctr; - always @(posedge clk_fpga) - ctr <= ctr + 1; - - - assign debug_led = ctr[27:25]; - assign debug_clk = { EM_CLK, clk_fpga }; - assign debug = { { EM_WAIT0, EM_NADV_ALE, EM_NWP, EM_NCS4, EM_NWE, EM_NOE, EM_A[10:1] }, - { EM_D } }; - - wire EM_output_enable = (~EM_NOE & ~EM_NCS4); - wire [15:0] EM_D_out; - - assign EM_D = EM_output_enable ? EM_D_out : 16'bz; - - ram_2port #(.DWIDTH(16), .AWIDTH(10)) ram_2port - (.clka(clk_fpga), .ena(~EM_NCS4), .wea(~EM_NWE), .addra(EM_A), .dia(EM_D), .doa(EM_D_out), - .clkb(clk_fpga), .enb(0), .web(0), .addrb(0), .dib(0), .dob()); + u1e_core u1e_core(.clk_fpga(clk_fpga), .debug_led(debug_led), .debug(debug), .debug_clk(debug_clk), + .EM_CLK(EM_CLK), .EM_D(EM_D), .EM_A(EM_A), .EM_NBE(EM_NBE), + .EM_WAIT0(EM_WAIT0), .EM_NCS4(EM_NCS4), .EM_NCS6(EM_NCS6), + .EM_NWE(EM_NWE), .EM_NOE(EM_NOE) ); - -endmodule // u2plus +endmodule // u1e diff --git a/usrp2/top/u1e/u1e_core.v b/usrp2/top/u1e/u1e_core.v new file mode 100644 index 000000000..2481549b2 --- /dev/null +++ b/usrp2/top/u1e/u1e_core.v @@ -0,0 +1,52 @@ +`timescale 1ns / 1ps +////////////////////////////////////////////////////////////////////////////////// + +module u1e_core + (input clk_fpga, output [2:0] debug_led, output [31:0] debug, output [1:0] debug_clk, + + // GPMC + input EM_CLK, inout [15:0] EM_D, input [10:1] EM_A, input [1:0] EM_NBE, + input EM_WAIT0, input EM_NCS4, input EM_NCS6, input EM_NWE, input EM_NOE + ); + + // Debug circuitry + reg [31:0] ctr; + always @(posedge clk_fpga) + ctr <= ctr + 1; + + assign debug_led = ctr[27:25]; + assign debug_clk = { EM_CLK, clk_fpga }; + assign debug = { { 1'b0, EM_WAIT0, EM_NCS6, EM_NCS4, EM_NWE, EM_NOE, EM_A[10:1] }, + { EM_D } }; + + wire wb_clk, wb_rst; + wire wb_cyc, wb_stb, wb_we, wb_ack; + wire [1:0] wb_sel; + wire [10:0] wb_adr; + wire [15:0] wb_dat_mosi, wb_dat_miso; + + gpmc gpmc (.EM_CLK(EM_CLK), .EM_D(EM_D), .EM_A(EM_A), .EM_NBE(EM_NBE), + .EM_WAIT0(EM_WAIT0), .EM_NCS4(EM_NCS4), .EM_NCS6(EM_NCS6), .EM_NWE(EM_NWE), + .EM_NOE(EM_NOE), + + .wb_clk(wb_clk), .wb_rst(wb_rst), + .wb_adr_o(wb_adr), .wb_dat_mosi(wb_dat_mosi), .wb_dat_miso(wb_dat_miso), + .wb_sel_o(wb_sel), .wb_cyc_o(wb_cyc), .wb_stb_o(wb_stb), .wb_we_o(wb_we), + .wb_ack_i(wb_ack)); + + assign wb_clk = clk_fpga; + reg [15:0] reg_fast, reg_slow; + + localparam [10:0] WB_ADR_REG_FAST = 36; + localparam [10:0] WB_ADR_REG_SLOW = 38; + + always @(posedge wb_clk) + if(wb_cyc & wb_stb & wb_we & (wb_adr == WB_ADR_REG_FAST)) + reg_fast <= wb_dat_mosi; + + assign wb_dat_miso = (wb_adr == WB_ADR_REG_FAST) ? reg_fast : 16'bx; + + assign wb_ack = wb_stb & wb_cyc; + + +endmodule // u2plus -- cgit v1.2.3 From d4649caee02a1c76802dc4f8d7d76bb31b14ce09 Mon Sep 17 00:00:00 2001 From: Matt Ettus Date: Tue, 16 Feb 2010 22:49:02 -0800 Subject: wishbone bridge now with minimal functionality. Need to check timing and handle wait states. --- usrp2/gpmc/gpmc.v | 4 +-- usrp2/models/gpmc_model.v | 70 +++++++++++++++++++++++++++++++++++++++++++++++ usrp2/top/u1e/.gitignore | 2 ++ usrp2/top/u1e/README | 4 +++ usrp2/top/u1e/cmdfile | 19 +++++++++++++ usrp2/top/u1e/make.sim | 7 +++++ usrp2/top/u1e/tb_u1e.v | 17 +++++++++--- usrp2/top/u1e/u1e_core.v | 9 +++--- 8 files changed, 121 insertions(+), 11 deletions(-) create mode 100644 usrp2/models/gpmc_model.v create mode 100644 usrp2/top/u1e/README create mode 100644 usrp2/top/u1e/cmdfile create mode 100644 usrp2/top/u1e/make.sim diff --git a/usrp2/gpmc/gpmc.v b/usrp2/gpmc/gpmc.v index 96ee139fd..1963af6e6 100644 --- a/usrp2/gpmc/gpmc.v +++ b/usrp2/gpmc/gpmc.v @@ -18,8 +18,8 @@ module gpmc // CS4 is RAM_2PORT for high-speed data ram_2port #(.DWIDTH(16), .AWIDTH(10)) ram_2port - (.clka(clk_fpga), .ena(~EM_NCS4), .wea(~EM_NWE), .addra(EM_A), .dia(EM_D), .doa(EM_D_ram), - .clkb(clk_fpga), .enb(0), .web(0), .addrb(0), .dib(0), .dob()); + (.clka(wb_clk), .ena(~EM_NCS4), .wea(~EM_NWE), .addra(EM_A), .dia(EM_D), .doa(EM_D_ram), + .clkb(wb_clk), .enb(0), .web(0), .addrb(0), .dib(0), .dob()); // CS6 is Control, Wishbone bus bridge (wb master) // Sync version diff --git a/usrp2/models/gpmc_model.v b/usrp2/models/gpmc_model.v new file mode 100644 index 000000000..ce3acaacf --- /dev/null +++ b/usrp2/models/gpmc_model.v @@ -0,0 +1,70 @@ + + +module gpmc_model + (output EM_CLK, inout [15:0] EM_D, output reg [10:1] EM_A, output reg [1:0] EM_NBE, + output reg EM_WAIT0, output reg EM_NCS4, output reg EM_NCS6, + output reg EM_NWE, output reg EM_NOE ); + + assign EM_CLK = 0; + reg [15:0] EM_D_int; + assign EM_D = EM_D_int; + + initial + begin + EM_A <= 10'bz; + EM_NBE <= 2'b11; + EM_NWE <= 1; + EM_NOE <= 1; + EM_NCS4 <= 1; + EM_NCS6 <= 1; + EM_D_int <= 16'bz; + EM_WAIT0 <= 0; // FIXME this is actually an input + end + + task GPMC_Write; + input [10:0] addr; + input [15:0] data; + begin + #2; + EM_A <= addr[10:1]; + EM_D_int <= data; + #4; + EM_NCS6 <= 0; + #5; + EM_NWE <= 0; + #41; + EM_NWE <= 1; + EM_NCS6 <= 1; + EM_A <= 10'bz; + EM_D_int <= 16'bz; + end + endtask // GPMC_Write + + task GPMC_Read; + input [10:0] addr; + begin + #2; + EM_A <= addr[10:1]; + #4; + EM_NCS6 <= 0; + #5; + EM_NOE <= 0; + #41; + EM_NOE <= 1; + EM_NCS6 <= 1; + EM_A <= 10'bz; + $display("Data Read from GPMC: %X",EM_D); + end + endtask // GPMC_Read + + initial + begin + #1000; + GPMC_Write(36,16'hBEEF); + #1000; + GPMC_Read(36); + #1000; + $finish; + end + +endmodule // gpmc_model diff --git a/usrp2/top/u1e/.gitignore b/usrp2/top/u1e/.gitignore index f8b57ea21..8d872713e 100644 --- a/usrp2/top/u1e/.gitignore +++ b/usrp2/top/u1e/.gitignore @@ -2,3 +2,5 @@ build *.log *.cmd +tb_u1e +*.lxt diff --git a/usrp2/top/u1e/README b/usrp2/top/u1e/README new file mode 100644 index 000000000..14c7a4955 --- /dev/null +++ b/usrp2/top/u1e/README @@ -0,0 +1,4 @@ + +make clean +make sim +./tb_u1e -lxt2 diff --git a/usrp2/top/u1e/cmdfile b/usrp2/top/u1e/cmdfile new file mode 100644 index 000000000..5e4db5c65 --- /dev/null +++ b/usrp2/top/u1e/cmdfile @@ -0,0 +1,19 @@ + +# My stuff +-y . +-y ../../control_lib +-y ../../control_lib/newfifo +-y ../../sdr_lib +-y ../../timing +-y ../../coregen +-y ../../gpmc + +# Models +-y ../../models + +# Open Cores +-y ../opencores/spi/rtl/verilog ++incdir+../opencores/spi/rtl/verilog +-y ../opencores/i2c/rtl/verilog ++incdir+../opencores/i2c/rtl/verilog + diff --git a/usrp2/top/u1e/make.sim b/usrp2/top/u1e/make.sim new file mode 100644 index 000000000..1c163884c --- /dev/null +++ b/usrp2/top/u1e/make.sim @@ -0,0 +1,7 @@ +all: sim + +sim: + iverilog -Wimplicit -Wportbind -c cmdfile tb_u1e.v -o tb_u1e + +clean: + rm -f tb_u1e *.vcd *.lxt a.out diff --git a/usrp2/top/u1e/tb_u1e.v b/usrp2/top/u1e/tb_u1e.v index 6e0c60e17..85d2b49f0 100644 --- a/usrp2/top/u1e/tb_u1e.v +++ b/usrp2/top/u1e/tb_u1e.v @@ -6,8 +6,12 @@ module tb_u1e(); wire [2:0] debug_led; wire [31:0] debug; wire [1:0] debug_clk; - - + + initial begin + $dumpfile("tb_u1e.lxt"); + $dumpvars(0,tb_u1e); + end + // GPMC wire EM_CLK, EM_WAIT0, EM_NCS4, EM_NCS6, EM_NWE, EM_NOE; wire [15:0] EM_D; @@ -15,11 +19,16 @@ module tb_u1e(); wire [1:0] EM_NBE; reg clk_fpga = 0; - always #100 clk_fpga = ~clk_fpga; + always #15.625 clk_fpga = ~clk_fpga; u1e_core u1e_core(.clk_fpga(clk_fpga), .debug_led(debug_led), .debug(debug), .debug_clk(debug_clk), .EM_CLK(EM_CLK), .EM_D(EM_D), .EM_A(EM_A), .EM_NBE(EM_NBE), .EM_WAIT0(EM_WAIT0), .EM_NCS4(EM_NCS4), .EM_NCS6(EM_NCS6), .EM_NWE(EM_NWE), .EM_NOE(EM_NOE) ); + + gpmc_model gpmc_model + (.EM_CLK(EM_CLK), .EM_D(EM_D), .EM_A(EM_A), .EM_NBE(EM_NBE), + .EM_WAIT0(EM_WAIT0), .EM_NCS4(EM_NCS4), .EM_NCS6(EM_NCS6), + .EM_NWE(EM_NWE), .EM_NOE(EM_NOE) ); -endmodule // u1e +endmodule // tb_u1e diff --git a/usrp2/top/u1e/u1e_core.v b/usrp2/top/u1e/u1e_core.v index 2481549b2..b0edbb9b6 100644 --- a/usrp2/top/u1e/u1e_core.v +++ b/usrp2/top/u1e/u1e_core.v @@ -10,7 +10,7 @@ module u1e_core ); // Debug circuitry - reg [31:0] ctr; + reg [31:0] ctr=0; always @(posedge clk_fpga) ctr <= ctr + 1; @@ -37,7 +37,7 @@ module u1e_core assign wb_clk = clk_fpga; reg [15:0] reg_fast, reg_slow; - localparam [10:0] WB_ADR_REG_FAST = 36; + localparam [10:0] WB_ADR_REG_FAST = 11'd36; localparam [10:0] WB_ADR_REG_SLOW = 38; always @(posedge wb_clk) @@ -47,6 +47,5 @@ module u1e_core assign wb_dat_miso = (wb_adr == WB_ADR_REG_FAST) ? reg_fast : 16'bx; assign wb_ack = wb_stb & wb_cyc; - - -endmodule // u2plus + +endmodule // u1e_core -- cgit v1.2.3 From 1912ff60acd490a24204a7596e373e9aef9276cd Mon Sep 17 00:00:00 2001 From: Matt Ettus Date: Wed, 17 Feb 2010 15:00:41 -0800 Subject: speed up the presentation of registered wb data to the gpmc --- usrp2/gpmc/gpmc.v | 7 +++++-- usrp2/models/gpmc_model.v | 26 +++++++++++++++----------- 2 files changed, 20 insertions(+), 13 deletions(-) diff --git a/usrp2/gpmc/gpmc.v b/usrp2/gpmc/gpmc.v index 1963af6e6..56f879abc 100644 --- a/usrp2/gpmc/gpmc.v +++ b/usrp2/gpmc/gpmc.v @@ -12,7 +12,7 @@ module gpmc wire EM_output_enable = (~EM_NOE & (~EM_NCS4 | ~EM_NCS6)); wire [15:0] EM_D_ram; - reg [15:0] EM_D_wb; + wire [15:0] EM_D_wb; assign EM_D = ~EM_output_enable ? 16'bz : ~EM_NCS4 ? EM_D_ram : EM_D_wb; @@ -44,10 +44,13 @@ module gpmc wb_sel_o <= ~EM_NBE; end + reg [15:0] EM_D_wb_reg; always @(posedge wb_clk) if(wb_ack_i) - EM_D_wb <= wb_dat_miso; + EM_D_wb_reg <= wb_dat_miso; + assign EM_D_wb = wb_ack_i ? wb_dat_miso : EM_D_wb_reg; + // stb, oe_del, we_del assign wb_cyc_o = wb_stb_o; diff --git a/usrp2/models/gpmc_model.v b/usrp2/models/gpmc_model.v index ce3acaacf..38dde1fa5 100644 --- a/usrp2/models/gpmc_model.v +++ b/usrp2/models/gpmc_model.v @@ -25,16 +25,18 @@ module gpmc_model input [10:0] addr; input [15:0] data; begin - #2; + #2.3; EM_A <= addr[10:1]; EM_D_int <= data; - #4; + #2.01; EM_NCS6 <= 0; - #5; + #14; EM_NWE <= 0; - #41; - EM_NWE <= 1; + #77.5; EM_NCS6 <= 1; + //#1.5; + EM_NWE <= 1; + #6; EM_A <= 10'bz; EM_D_int <= 16'bz; end @@ -43,17 +45,19 @@ module gpmc_model task GPMC_Read; input [10:0] addr; begin - #2; + #1.3; EM_A <= addr[10:1]; - #4; + #3; EM_NCS6 <= 0; - #5; + #14; EM_NOE <= 0; - #41; - EM_NOE <= 1; + #77.5; EM_NCS6 <= 1; - EM_A <= 10'bz; + //#1.5; $display("Data Read from GPMC: %X",EM_D); + EM_NOE <= 1; + #254; + EM_A <= 10'bz; end endtask // GPMC_Read -- cgit v1.2.3 From e56b4767451dcdca41512faba634b812e44d2e1d Mon Sep 17 00:00:00 2001 From: Matt Ettus Date: Thu, 18 Feb 2010 18:03:26 -0800 Subject: Fixed paths to help icarus find opencores and xilinx models. Added Xilinx global set and reset module. --- usrp2/top/u1e/cmdfile | 9 +++++---- usrp2/top/u1e/tb_u1e.v | 2 ++ 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/usrp2/top/u1e/cmdfile b/usrp2/top/u1e/cmdfile index 5e4db5c65..291c723b8 100644 --- a/usrp2/top/u1e/cmdfile +++ b/usrp2/top/u1e/cmdfile @@ -10,10 +10,11 @@ # Models -y ../../models +-y /opt/Xilinx/10.1/ISE/verilog/src/unisims # Open Cores --y ../opencores/spi/rtl/verilog -+incdir+../opencores/spi/rtl/verilog --y ../opencores/i2c/rtl/verilog -+incdir+../opencores/i2c/rtl/verilog +-y ../../opencores/spi/rtl/verilog ++incdir+../../opencores/spi/rtl/verilog +-y ../../opencores/i2c/rtl/verilog ++incdir+../../opencores/i2c/rtl/verilog diff --git a/usrp2/top/u1e/tb_u1e.v b/usrp2/top/u1e/tb_u1e.v index 85d2b49f0..319645af6 100644 --- a/usrp2/top/u1e/tb_u1e.v +++ b/usrp2/top/u1e/tb_u1e.v @@ -7,6 +7,8 @@ module tb_u1e(); wire [31:0] debug; wire [1:0] debug_clk; + xlnx_glbl glbl (.GSR(),.GTS()); + initial begin $dumpfile("tb_u1e.lxt"); $dumpvars(0,tb_u1e); -- cgit v1.2.3 From 7c31f8d25d563b9f2795914f8ea0f3e49b214c56 Mon Sep 17 00:00:00 2001 From: Matt Ettus Date: Thu, 18 Feb 2010 18:04:24 -0800 Subject: allow default uart clock divider --- usrp2/control_lib/simple_uart.v | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/usrp2/control_lib/simple_uart.v b/usrp2/control_lib/simple_uart.v index 22f0e70a2..0dd58b5f5 100644 --- a/usrp2/control_lib/simple_uart.v +++ b/usrp2/control_lib/simple_uart.v @@ -1,11 +1,12 @@ module simple_uart #(parameter TXDEPTH = 1, - parameter RXDEPTH = 1) - (input clk_i, input rst_i, - input we_i, input stb_i, input cyc_i, output reg ack_o, - input [2:0] adr_i, input [31:0] dat_i, output reg [31:0] dat_o, - output rx_int_o, output tx_int_o, output tx_o, input rx_i, output baud_o); + parameter RXDEPTH = 1, + parameter CLKDIV_DEFAULT = 16'd0) + (input clk_i, input rst_i, + input we_i, input stb_i, input cyc_i, output reg ack_o, + input [2:0] adr_i, input [31:0] dat_i, output reg [31:0] dat_o, + output rx_int_o, output tx_int_o, output tx_o, input rx_i, output baud_o); // Register Map localparam SUART_CLKDIV = 0; @@ -30,7 +31,7 @@ module simple_uart always @(posedge clk_i) if (rst_i) - clkdiv <= 0; + clkdiv <= CLKDIV_DEFAULT; else if (wb_wr) case(adr_i) SUART_CLKDIV : clkdiv <= dat_i[15:0]; -- cgit v1.2.3 From f3c61700fbeba30f420ef939a1cabdc42bd15fb7 Mon Sep 17 00:00:00 2001 From: Matt Ettus Date: Thu, 18 Feb 2010 18:05:42 -0800 Subject: Added I2C, UART, debug pins, misc wishbone stuff --- usrp2/top/u1e/u1e.ucf | 38 +++++----- usrp2/top/u1e/u1e.v | 12 ++- usrp2/top/u1e/u1e_core.v | 185 ++++++++++++++++++++++++++++++++++++++++------- 3 files changed, 187 insertions(+), 48 deletions(-) diff --git a/usrp2/top/u1e/u1e.ucf b/usrp2/top/u1e/u1e.ucf index 3b524a6ea..40d458034 100644 --- a/usrp2/top/u1e/u1e.ucf +++ b/usrp2/top/u1e/u1e.ucf @@ -56,10 +56,10 @@ NET "EM_NOE" LOC = "A14" ; #NET "overo_gpio65" LOC = "F8" ; #NET "overo_gpio127" LOC = "C8" ; #NET "overo_gpio128" LOC = "G8" ; -#NET "overo_gpio144" LOC = "A5" ; -#NET "overo_gpio145" LOC = "C7" ; -#NET "overo_gpio146" LOC = "A6" ; -#NET "overo_gpio147" LOC = "B6" ; +NET "overo_gpio144" LOC = "A5" ; # tx_have_space +NET "overo_gpio145" LOC = "C7" ; # tx_underrun +NET "overo_gpio146" LOC = "A6" ; # rx_have_data +NET "overo_gpio147" LOC = "B6" ; # rx_overrun #NET "overo_gpio163" LOC = "D7" ; #NET "overo_gpio170" LOC = "E8" ; #NET "overo_gpio176" LOC = "B4" ; @@ -68,13 +68,13 @@ NET "EM_NOE" LOC = "A14" ; #NET "overo_txd1" LOC = "C6" ; #NET "overo_rxd1" LOC = "D6" ; -#NET "FPGA_TXD" LOC = "U1" ; -#NET "FPGA_RXD" LOC = "T6" ; +NET "FPGA_TXD" LOC = "U1" ; +NET "FPGA_RXD" LOC = "T6" ; #NET "SYSEN" LOC = "C11" ; -#NET "db_scl" LOC = "U4" ; -#NET "db_sda" LOC = "U5" ; +NET "db_scl" LOC = "U4" ; +NET "db_sda" LOC = "U5" ; #NET "db_sclk_rx" LOC = "W3" ; #NET "db_miso_rx" LOC = "W2" ; #NET "db_mosi_rx" LOC = "V4" ; @@ -134,18 +134,18 @@ NET "debug<31>" LOC = "G3" ; NET "debug_clk<0>" LOC = "L6" ; NET "debug_clk<1>" LOC = "M5" ; -#NET "debug_pb<2>" LOC = "Y2" ; -#NET "debug_pb<1>" LOC = "AA1" ; -#NET "debug_pb<0>" LOC = "N3" ; +NET "debug_pb<2>" LOC = "Y2" ; +NET "debug_pb<1>" LOC = "AA1" ; +NET "debug_pb<0>" LOC = "N3" ; -#NET "dip_sw<7>" LOC = "T3" ; -#NET "dip_sw<6>" LOC = "U3" ; -#NET "dip_sw<5>" LOC = "M3" ; -#NET "dip_sw<4>" LOC = "N4" ; -#NET "dip_sw<3>" LOC = "J3" ; -#NET "dip_sw<2>" LOC = "J4" ; -#NET "dip_sw<1>" LOC = "J6" ; -#NET "dip_sw<0>" LOC = "J7" ; +NET "dip_sw<7>" LOC = "T3" ; +NET "dip_sw<6>" LOC = "U3" ; +NET "dip_sw<5>" LOC = "M3" ; +NET "dip_sw<4>" LOC = "N4" ; +NET "dip_sw<3>" LOC = "J3" ; +NET "dip_sw<2>" LOC = "J4" ; +NET "dip_sw<1>" LOC = "J6" ; +NET "dip_sw<0>" LOC = "J7" ; ## AD9862 Interface #NET "aux_sdi_codec" LOC = "F19" ; diff --git a/usrp2/top/u1e/u1e.v b/usrp2/top/u1e/u1e.v index 8832d6e11..4ca9b5580 100644 --- a/usrp2/top/u1e/u1e.v +++ b/usrp2/top/u1e/u1e.v @@ -4,10 +4,14 @@ module u1e (input CLK_FPGA_P, input CLK_FPGA_N, // Diff output [2:0] debug_led, output [31:0] debug, output [1:0] debug_clk, + input [2:0] debug_pb, input [7:0] dip_sw, output FPGA_TXD, input FPGA_RXD, // GPMC input EM_CLK, inout [15:0] EM_D, input [10:1] EM_A, input [1:0] EM_NBE, - input EM_WAIT0, input EM_NCS4, input EM_NCS6, input EM_NWE, input EM_NOE + input EM_WAIT0, input EM_NCS4, input EM_NCS6, input EM_NWE, input EM_NOE, + + inout db_sda, inout db_scl, // I2C + output overo_gpio144, output overo_gpio145, output overo_gpio146, output overo_gpio147 // Fifo controls ); // FPGA-specific pins connections @@ -17,8 +21,12 @@ module u1e clk_fpga_pin (.O(clk_fpga),.I(CLK_FPGA_P),.IB(CLK_FPGA_N)); u1e_core u1e_core(.clk_fpga(clk_fpga), .debug_led(debug_led), .debug(debug), .debug_clk(debug_clk), + .debug_pb(debug_pb), .dip_sw(dip_sw), .debug_txd(FPGA_TXD), .debug_rxd(FPGA_RXD), .EM_CLK(EM_CLK), .EM_D(EM_D), .EM_A(EM_A), .EM_NBE(EM_NBE), .EM_WAIT0(EM_WAIT0), .EM_NCS4(EM_NCS4), .EM_NCS6(EM_NCS6), - .EM_NWE(EM_NWE), .EM_NOE(EM_NOE) ); + .EM_NWE(EM_NWE), .EM_NOE(EM_NOE), + .db_sda(db_sda), .db_scl(db_scl), + .tx_have_space(overo_gpio144), .tx_underrun(overo_gpio145), + .rx_have_data(overo_gpio_146), .rx_overrun(overo_gpio147) ); endmodule // u1e diff --git a/usrp2/top/u1e/u1e_core.v b/usrp2/top/u1e/u1e_core.v index b0edbb9b6..cad697858 100644 --- a/usrp2/top/u1e/u1e_core.v +++ b/usrp2/top/u1e/u1e_core.v @@ -3,49 +3,180 @@ module u1e_core (input clk_fpga, output [2:0] debug_led, output [31:0] debug, output [1:0] debug_clk, - + input [2:0] debug_pb, input [7:0] dip_sw, output debug_txd, input debug_rxd, + // GPMC input EM_CLK, inout [15:0] EM_D, input [10:1] EM_A, input [1:0] EM_NBE, - input EM_WAIT0, input EM_NCS4, input EM_NCS6, input EM_NWE, input EM_NOE - ); - - // Debug circuitry - reg [31:0] ctr=0; - always @(posedge clk_fpga) - ctr <= ctr + 1; + input EM_WAIT0, input EM_NCS4, input EM_NCS6, input EM_NWE, input EM_NOE, - assign debug_led = ctr[27:25]; - assign debug_clk = { EM_CLK, clk_fpga }; - assign debug = { { 1'b0, EM_WAIT0, EM_NCS6, EM_NCS4, EM_NWE, EM_NOE, EM_A[10:1] }, - { EM_D } }; + inout db_sda, inout db_scl, + output tx_have_space, output tx_underrun, output rx_have_data, output rx_overrun + ); wire wb_clk, wb_rst; - wire wb_cyc, wb_stb, wb_we, wb_ack; - wire [1:0] wb_sel; - wire [10:0] wb_adr; - wire [15:0] wb_dat_mosi, wb_dat_miso; + + assign tx_have_space = 0; + assign tx_underrun = 0; + assign rx_have_data = 0; + assign rx_overrun = 0; + + // ///////////////////////////////////////////////////////////////////////////////////// + // GPMC Slave to Wishbone Master + localparam dw = 16; + localparam aw = 11; + localparam sw = 2; + + wire [dw-1:0] m0_dat_mosi, m0_dat_miso; + wire [aw-1:0] m0_adr; + wire [sw-1:0] m0_sel; + wire m0_cyc, m0_stb, m0_we, m0_ack, m0_err, m0_rty; gpmc gpmc (.EM_CLK(EM_CLK), .EM_D(EM_D), .EM_A(EM_A), .EM_NBE(EM_NBE), .EM_WAIT0(EM_WAIT0), .EM_NCS4(EM_NCS4), .EM_NCS6(EM_NCS6), .EM_NWE(EM_NWE), .EM_NOE(EM_NOE), .wb_clk(wb_clk), .wb_rst(wb_rst), - .wb_adr_o(wb_adr), .wb_dat_mosi(wb_dat_mosi), .wb_dat_miso(wb_dat_miso), - .wb_sel_o(wb_sel), .wb_cyc_o(wb_cyc), .wb_stb_o(wb_stb), .wb_we_o(wb_we), - .wb_ack_i(wb_ack)); + .wb_adr_o(m0_adr), .wb_dat_mosi(m0_dat_mosi), .wb_dat_miso(m0_dat_miso), + .wb_sel_o(m0_sel), .wb_cyc_o(m0_cyc), .wb_stb_o(m0_stb), .wb_we_o(m0_we), + .wb_ack_i(m0_ack)); assign wb_clk = clk_fpga; - reg [15:0] reg_fast, reg_slow; - localparam [10:0] WB_ADR_REG_FAST = 11'd36; - localparam [10:0] WB_ADR_REG_SLOW = 38; + // ///////////////////////////////////////////////////////////////////////////////////// + // Wishbone Intercon, single master + wire [dw-1:0] s0_dat_mosi, s1_dat_mosi, s0_dat_miso, s1_dat_miso, s2_dat_mosi, s3_dat_mosi, s2_dat_miso, s3_dat_miso, + s4_dat_mosi, s5_dat_mosi, s4_dat_miso, s5_dat_miso, s6_dat_mosi, s7_dat_mosi, s6_dat_miso, s7_dat_miso, + s8_dat_mosi, s9_dat_mosi, s8_dat_miso, s9_dat_miso, sa_dat_mosi, sb_dat_mosi, sa_dat_miso, sb_dat_miso, + sc_dat_mosi, sd_dat_mosi, sc_dat_miso, sd_dat_miso, se_dat_mosi, sf_dat_mosi, se_dat_miso, sf_dat_miso; + wire [aw-1:0] s0_adr,s1_adr,s2_adr,s3_adr,s4_adr,s5_adr,s6_adr,s7_adr; + wire [aw-1:0] s8_adr,s9_adr,sa_adr,sb_adr,sc_adr, sd_adr, se_adr, sf_adr; + wire [sw-1:0] s0_sel,s1_sel,s2_sel,s3_sel,s4_sel,s5_sel,s6_sel,s7_sel; + wire [sw-1:0] s8_sel,s9_sel,sa_sel,sb_sel,sc_sel, sd_sel, se_sel, sf_sel; + wire s0_ack,s1_ack,s2_ack,s3_ack,s4_ack,s5_ack,s6_ack,s7_ack; + wire s8_ack,s9_ack,sa_ack,sb_ack,sc_ack, sd_ack, se_ack, sf_ack; + wire s0_stb,s1_stb,s2_stb,s3_stb,s4_stb,s5_stb,s6_stb,s7_stb; + wire s8_stb,s9_stb,sa_stb,sb_stb,sc_stb, sd_stb, se_stb, sf_stb; + wire s0_cyc,s1_cyc,s2_cyc,s3_cyc,s4_cyc,s5_cyc,s6_cyc,s7_cyc; + wire s8_cyc,s9_cyc,sa_cyc,sb_cyc,sc_cyc, sd_cyc, se_cyc, sf_cyc; + wire s0_we,s1_we,s2_we,s3_we,s4_we,s5_we,s6_we,s7_we; + wire s8_we,s9_we,sa_we,sb_we,sc_we,sd_we, se_we, sf_we; + + wb_1master #(.dw(dw), .aw(aw), .sw(sw), .decode_w(4), + .s0_addr(4'h0), .s0_mask(4'hF), .s1_addr(4'h1), .s1_mask(4'hF), + .s2_addr(4'h2), .s2_mask(4'hF), .s3_addr(4'h3), .s3_mask(4'hF), + .s4_addr(4'h4), .s4_mask(4'hF), .s5_addr(4'h5), .s5_mask(4'hF), + .s6_addr(4'h6), .s6_mask(4'hF), .s7_addr(4'h7), .s7_mask(4'hF), + .s8_addr(4'h8), .s8_mask(4'hF), .s9_addr(4'h9), .s9_mask(4'hF), + .sa_addr(4'ha), .sa_mask(4'hF), .sb_addr(4'hb), .sb_mask(4'hF), + .sc_addr(4'hc), .sc_mask(4'hF), .sd_addr(4'hd), .sd_mask(4'hF), + .se_addr(4'he), .se_mask(4'hF), .sf_addr(4'hf), .sf_mask(4'hF)) + wb_1master + (.clk_i(wb_clk),.rst_i(wb_rst), + .m0_dat_o(m0_dat_miso),.m0_ack_o(m0_ack),.m0_err_o(m0_err),.m0_rty_o(m0_rty),.m0_dat_i(m0_dat_mosi), + .m0_adr_i(m0_adr),.m0_sel_i(m0_sel),.m0_we_i(m0_we),.m0_cyc_i(m0_cyc),.m0_stb_i(m0_stb), + .s0_dat_o(s0_dat_mosi),.s0_adr_o(s0_adr),.s0_sel_o(s0_sel),.s0_we_o(s0_we),.s0_cyc_o(s0_cyc),.s0_stb_o(s0_stb), + .s0_dat_i(s0_dat_miso),.s0_ack_i(s0_ack),.s0_err_i(0),.s0_rty_i(0), + .s1_dat_o(s1_dat_mosi),.s1_adr_o(s1_adr),.s1_sel_o(s1_sel),.s1_we_o(s1_we),.s1_cyc_o(s1_cyc),.s1_stb_o(s1_stb), + .s1_dat_i(s1_dat_miso),.s1_ack_i(s1_ack),.s1_err_i(0),.s1_rty_i(0), + .s2_dat_o(s2_dat_mosi),.s2_adr_o(s2_adr),.s2_sel_o(s2_sel),.s2_we_o(s2_we),.s2_cyc_o(s2_cyc),.s2_stb_o(s2_stb), + .s2_dat_i(s2_dat_miso),.s2_ack_i(s2_ack),.s2_err_i(0),.s2_rty_i(0), + .s3_dat_o(s3_dat_mosi),.s3_adr_o(s3_adr),.s3_sel_o(s3_sel),.s3_we_o(s3_we),.s3_cyc_o(s3_cyc),.s3_stb_o(s3_stb), + .s3_dat_i(s3_dat_miso),.s3_ack_i(s3_ack),.s3_err_i(0),.s3_rty_i(0), + .s4_dat_o(s4_dat_mosi),.s4_adr_o(s4_adr),.s4_sel_o(s4_sel),.s4_we_o(s4_we),.s4_cyc_o(s4_cyc),.s4_stb_o(s4_stb), + .s4_dat_i(s4_dat_miso),.s4_ack_i(s4_ack),.s4_err_i(0),.s4_rty_i(0), + .s5_dat_o(s5_dat_mosi),.s5_adr_o(s5_adr),.s5_sel_o(s5_sel),.s5_we_o(s5_we),.s5_cyc_o(s5_cyc),.s5_stb_o(s5_stb), + .s5_dat_i(s5_dat_miso),.s5_ack_i(s5_ack),.s5_err_i(0),.s5_rty_i(0), + .s6_dat_o(s6_dat_mosi),.s6_adr_o(s6_adr),.s6_sel_o(s6_sel),.s6_we_o(s6_we),.s6_cyc_o(s6_cyc),.s6_stb_o(s6_stb), + .s6_dat_i(s6_dat_miso),.s6_ack_i(s6_ack),.s6_err_i(0),.s6_rty_i(0), + .s7_dat_o(s7_dat_mosi),.s7_adr_o(s7_adr),.s7_sel_o(s7_sel),.s7_we_o(s7_we),.s7_cyc_o(s7_cyc),.s7_stb_o(s7_stb), + .s7_dat_i(s7_dat_miso),.s7_ack_i(s7_ack),.s7_err_i(0),.s7_rty_i(0), + .s8_dat_o(s8_dat_mosi),.s8_adr_o(s8_adr),.s8_sel_o(s8_sel),.s8_we_o(s8_we),.s8_cyc_o(s8_cyc),.s8_stb_o(s8_stb), + .s8_dat_i(s8_dat_miso),.s8_ack_i(s8_ack),.s8_err_i(0),.s8_rty_i(0), + .s9_dat_o(s9_dat_mosi),.s9_adr_o(s9_adr),.s9_sel_o(s9_sel),.s9_we_o(s9_we),.s9_cyc_o(s9_cyc),.s9_stb_o(s9_stb), + .s9_dat_i(s9_dat_miso),.s9_ack_i(s9_ack),.s9_err_i(0),.s9_rty_i(0), + .sa_dat_o(sa_dat_mosi),.sa_adr_o(sa_adr),.sa_sel_o(sa_sel),.sa_we_o(sa_we),.sa_cyc_o(sa_cyc),.sa_stb_o(sa_stb), + .sa_dat_i(sa_dat_miso),.sa_ack_i(sa_ack),.sa_err_i(0),.sa_rty_i(0), + .sb_dat_o(sb_dat_mosi),.sb_adr_o(sb_adr),.sb_sel_o(sb_sel),.sb_we_o(sb_we),.sb_cyc_o(sb_cyc),.sb_stb_o(sb_stb), + .sb_dat_i(sb_dat_miso),.sb_ack_i(sb_ack),.sb_err_i(0),.sb_rty_i(0), + .sc_dat_o(sc_dat_mosi),.sc_adr_o(sc_adr),.sc_sel_o(sc_sel),.sc_we_o(sc_we),.sc_cyc_o(sc_cyc),.sc_stb_o(sc_stb), + .sc_dat_i(sc_dat_miso),.sc_ack_i(sc_ack),.sc_err_i(0),.sc_rty_i(0), + .sd_dat_o(sd_dat_mosi),.sd_adr_o(sd_adr),.sd_sel_o(sd_sel),.sd_we_o(sd_we),.sd_cyc_o(sd_cyc),.sd_stb_o(sd_stb), + .sd_dat_i(sd_dat_miso),.sd_ack_i(sd_ack),.sd_err_i(0),.sd_rty_i(0), + .se_dat_o(se_dat_mosi),.se_adr_o(se_adr),.se_sel_o(se_sel),.se_we_o(se_we),.se_cyc_o(se_cyc),.se_stb_o(se_stb), + .se_dat_i(se_dat_miso),.se_ack_i(se_ack),.se_err_i(0),.se_rty_i(0), + .sf_dat_o(sf_dat_mosi),.sf_adr_o(sf_adr),.sf_sel_o(sf_sel),.sf_we_o(sf_we),.sf_cyc_o(sf_cyc),.sf_stb_o(sf_stb), + .sf_dat_i(sf_dat_miso),.sf_ack_i(sf_ack),.sf_err_i(0),.sf_rty_i(0) ); + + assign s4_ack = 0; assign s5_ack = 0; assign s6_ack = 0; assign s7_ack = 0; + assign s8_ack = 0; assign s9_ack = 0; assign sa_ack = 0; assign sb_ack = 0; + assign sc_ack = 0; assign sd_ack = 0; assign se_ack = 0; assign sf_ack = 0; + + // ///////////////////////////////////////////////////////////////////////////////////// + // Slave 0, LEDs and Switches + + reg [15:0] reg_fast, reg_slow; + localparam REG_FAST = 7'd4; + localparam REG_SWITCHES = 7'd5; always @(posedge wb_clk) - if(wb_cyc & wb_stb & wb_we & (wb_adr == WB_ADR_REG_FAST)) - reg_fast <= wb_dat_mosi; + if(s0_cyc & s0_stb & s0_we & (s0_adr[6:0] == REG_FAST)) + reg_fast <= s0_dat_mosi; - assign wb_dat_miso = (wb_adr == WB_ADR_REG_FAST) ? reg_fast : 16'bx; + assign s0_dat_miso = (s0_adr[6:0] == REG_FAST) ? reg_fast : + (s0_adr[6:0] == REG_SWITCHES) ? {5'b0,debug_pb[2:0],dip_sw[7:0]} : + 16'hBEEF; + assign s0_ack = s0_stb & s0_cyc; - assign wb_ack = wb_stb & wb_cyc; - + + // ///////////////////////////////////////////////////////////////////////////////////// + // Slave 1, UART + // depth of 3 is 128 entries, clkdiv of 278 gives 230.4k with a 64 MHz system clock + + simple_uart #(.TXDEPTH(3),.RXDEPTH(3), .CLKDIV_DEFAULT(278)) uart + (.clk_i(wb_clk),.rst_i(wb_rst), + .we_i(s1_we),.stb_i(s1_stb),.cyc_i(s1_cyc),.ack_o(s1_ack), + .adr_i(s1_adr[4:2]),.dat_i({16'd0,s1_dat_mosi}),.dat_o(s1_dat_miso), + .rx_int_o(),.tx_int_o(), + .tx_o(debug_txd),.rx_i(debug_rxd),.baud_o()); + + // ///////////////////////////////////////////////////////////////////////////////////// + // Slave 2, SPI + + /* + spi_top shared_spi + (.wb_clk_i(wb_clk),.wb_rst_i(wb_rst),.wb_adr_i(s2_adr[4:0]),.wb_dat_i(s2_dat_o), + .wb_dat_o(s2_dat_i),.wb_sel_i(s2_sel),.wb_we_i(s2_we),.wb_stb_i(s2_stb), + .wb_cyc_i(s2_cyc),.wb_ack_o(s2_ack),.wb_err_o(),.wb_int_o(spi_int), + .ss_pad_o({sen_tx_db,sen_tx_adc,sen_tx_dac,sen_rx_db,sen_rx_adc,sen_rx_dac,sen_dac,sen_clk}), + .sclk_pad_o(sclk),.mosi_pad_o(mosi),.miso_pad_i(miso) ); + */ + + // ///////////////////////////////////////////////////////////////////////// + // Slave 3, I2C + + wire scl_pad_i, scl_pad_o, scl_pad_oen_o, sda_pad_i, sda_pad_o, sda_pad_oen_o; + i2c_master_top #(.ARST_LVL(1)) i2c + (.wb_clk_i(wb_clk),.wb_rst_i(wb_rst),.arst_i(1'b0), + .wb_adr_i(s3_adr[4:2]),.wb_dat_i(s3_dat_mosi[7:0]),.wb_dat_o(s3_dat_miso[7:0]), + .wb_we_i(s3_we),.wb_stb_i(s3_stb),.wb_cyc_i(s3_cyc), + .wb_ack_o(s3_ack),.wb_inta_o(), + .scl_pad_i(scl_pad_i),.scl_pad_o(scl_pad_o),.scl_padoen_o(scl_pad_oen_o), + .sda_pad_i(sda_pad_i),.sda_pad_o(sda_pad_o),.sda_padoen_o(sda_pad_oen_o) ); + + assign s3_dat_miso[15:8] = 8'd0; + + // I2C -- Don't use external transistors for open drain, the FPGA implements this + IOBUF scl_pin(.O(scl_pad_i), .IO(db_scl), .I(scl_pad_o), .T(scl_pad_oen_o)); + IOBUF sda_pin(.O(sda_pad_i), .IO(db_sda), .I(sda_pad_o), .T(sda_pad_oen_o)); + + // ///////////////////////////////////////////////////////////////////////////////////// + // Debug Pins + + // Debug circuitry + assign debug_clk = { EM_CLK, clk_fpga }; + assign debug = { { 1'b0, EM_WAIT0, EM_NCS6, EM_NCS4, EM_NWE, EM_NOE, EM_A[10:1] }, + { EM_D } }; + + assign { debug_led[2],debug_led[0],debug_led[1] } = reg_fast; // LEDs are arranged funny on board + endmodule // u1e_core -- cgit v1.2.3 From bc3c1fb34afba5fb4358f1b7eaaf3832360cc375 Mon Sep 17 00:00:00 2001 From: Matt Ettus Date: Thu, 18 Feb 2010 19:13:10 -0800 Subject: added gpio control to the wishbone --- usrp2/top/u1e/u1e.v | 2 +- usrp2/top/u1e/u1e_core.v | 23 +++++++++++++---------- 2 files changed, 14 insertions(+), 11 deletions(-) diff --git a/usrp2/top/u1e/u1e.v b/usrp2/top/u1e/u1e.v index 4ca9b5580..326476b21 100644 --- a/usrp2/top/u1e/u1e.v +++ b/usrp2/top/u1e/u1e.v @@ -27,6 +27,6 @@ module u1e .EM_NWE(EM_NWE), .EM_NOE(EM_NOE), .db_sda(db_sda), .db_scl(db_scl), .tx_have_space(overo_gpio144), .tx_underrun(overo_gpio145), - .rx_have_data(overo_gpio_146), .rx_overrun(overo_gpio147) ); + .rx_have_data(overo_gpio146), .rx_overrun(overo_gpio147) ); endmodule // u1e diff --git a/usrp2/top/u1e/u1e_core.v b/usrp2/top/u1e/u1e_core.v index cad697858..257156d4b 100644 --- a/usrp2/top/u1e/u1e_core.v +++ b/usrp2/top/u1e/u1e_core.v @@ -12,20 +12,15 @@ module u1e_core inout db_sda, inout db_scl, output tx_have_space, output tx_underrun, output rx_have_data, output rx_overrun ); - - wire wb_clk, wb_rst; - - assign tx_have_space = 0; - assign tx_underrun = 0; - assign rx_have_data = 0; - assign rx_overrun = 0; + + wire wb_clk, wb_rst; // ///////////////////////////////////////////////////////////////////////////////////// // GPMC Slave to Wishbone Master localparam dw = 16; localparam aw = 11; localparam sw = 2; - + wire [dw-1:0] m0_dat_mosi, m0_dat_miso; wire [aw-1:0] m0_adr; wire [sw-1:0] m0_sel; @@ -114,19 +109,27 @@ module u1e_core // ///////////////////////////////////////////////////////////////////////////////////// // Slave 0, LEDs and Switches - reg [15:0] reg_fast, reg_slow; + reg [15:0] reg_fast, reg_slow; localparam REG_FAST = 7'd4; - localparam REG_SWITCHES = 7'd5; + localparam REG_SWITCHES = 7'd6; + localparam REG_GPIOS = 7'd8; + + reg [3:0] reg_gpios; always @(posedge wb_clk) if(s0_cyc & s0_stb & s0_we & (s0_adr[6:0] == REG_FAST)) reg_fast <= s0_dat_mosi; + always @(posedge wb_clk) + if(s0_cyc & s0_stb & s0_we & (s0_adr[6:0] == REG_GPIOS)) + reg_gpios <= s0_dat_mosi; + assign s0_dat_miso = (s0_adr[6:0] == REG_FAST) ? reg_fast : (s0_adr[6:0] == REG_SWITCHES) ? {5'b0,debug_pb[2:0],dip_sw[7:0]} : 16'hBEEF; assign s0_ack = s0_stb & s0_cyc; + assign { rx_overrun, rx_have_data, tx_underrun, tx_have_space } = reg_gpios; // ///////////////////////////////////////////////////////////////////////////////////// // Slave 1, UART -- cgit v1.2.3 From 2e4d962021334109b268c9080e5a5903b99be217 Mon Sep 17 00:00:00 2001 From: Matt Ettus Date: Mon, 22 Feb 2010 12:30:22 -0800 Subject: GPIOs now on the wishbone interface --- usrp2/top/u1e/Makefile | 2 +- usrp2/top/u1e/u1e.ucf | 64 ++++++++++++++++++++++++------------------------ usrp2/top/u1e/u1e.v | 6 +++-- usrp2/top/u1e/u1e_core.v | 19 ++++++++++++-- 4 files changed, 54 insertions(+), 37 deletions(-) diff --git a/usrp2/top/u1e/Makefile b/usrp2/top/u1e/Makefile index cdbdf995e..9381789a7 100644 --- a/usrp2/top/u1e/Makefile +++ b/usrp2/top/u1e/Makefile @@ -64,7 +64,7 @@ control_lib/gray_send.v \ control_lib/icache.v \ control_lib/mux4.v \ control_lib/mux8.v \ -control_lib/nsgpio.v \ +control_lib/nsgpio16LE.v \ control_lib/ram_2port.v \ control_lib/ram_harv_cache.v \ control_lib/ram_loader.v \ diff --git a/usrp2/top/u1e/u1e.ucf b/usrp2/top/u1e/u1e.ucf index 40d458034..f237eb60c 100644 --- a/usrp2/top/u1e/u1e.ucf +++ b/usrp2/top/u1e/u1e.ucf @@ -203,39 +203,39 @@ NET "dip_sw<0>" LOC = "J7" ; #NET "PPS_IN" LOC = "M17" ; -#NET "io_tx<0>" LOC = "AB20" ; -#NET "io_tx<1>" LOC = "Y17" ; -#NET "io_tx<2>" LOC = "Y16" ; -#NET "io_tx<3>" LOC = "U16" ; -#NET "io_tx<4>" LOC = "V16" ; -#NET "io_tx<5>" LOC = "AB19" ; -#NET "io_tx<6>" LOC = "AA19" ; -#NET "io_tx<7>" LOC = "U14" ; -#NET "io_tx<8>" LOC = "U15" ; -#NET "io_tx<9>" LOC = "AB17" ; -#NET "io_tx<10>" LOC = "AB18" ; -#NET "io_tx<11>" LOC = "Y13" ; -#NET "io_tx<12>" LOC = "W14" ; -#NET "io_tx<13>" LOC = "U13" ; -#NET "io_tx<14>" LOC = "AA15" ; -#NET "io_tx<15>" LOC = "AB14" ; +NET "io_tx<0>" LOC = "AB20" ; +NET "io_tx<1>" LOC = "Y17" ; +NET "io_tx<2>" LOC = "Y16" ; +NET "io_tx<3>" LOC = "U16" ; +NET "io_tx<4>" LOC = "V16" ; +NET "io_tx<5>" LOC = "AB19" ; +NET "io_tx<6>" LOC = "AA19" ; +NET "io_tx<7>" LOC = "U14" ; +NET "io_tx<8>" LOC = "U15" ; +NET "io_tx<9>" LOC = "AB17" ; +NET "io_tx<10>" LOC = "AB18" ; +NET "io_tx<11>" LOC = "Y13" ; +NET "io_tx<12>" LOC = "W14" ; +NET "io_tx<13>" LOC = "U13" ; +NET "io_tx<14>" LOC = "AA15" ; +NET "io_tx<15>" LOC = "AB14" ; -#NET "io_rx<0>" LOC = "Y8" ; -#NET "io_rx<1>" LOC = "Y9" ; -#NET "io_rx<2>" LOC = "V7" ; -#NET "io_rx<3>" LOC = "U8" ; -#NET "io_rx<4>" LOC = "V10" ; -#NET "io_rx<5>" LOC = "U9" ; -#NET "io_rx<6>" LOC = "AB7" ; -#NET "io_rx<7>" LOC = "AA8" ; -#NET "io_rx<8>" LOC = "W8" ; -#NET "io_rx<9>" LOC = "V8" ; -#NET "io_rx<10>" LOC = "AB5" ; -#NET "io_rx<11>" LOC = "AB6" ; -#NET "io_rx<12>" LOC = "AB4" ; -#NET "io_rx<13>" LOC = "AA4" ; -#NET "io_rx<14>" LOC = "W5" ; -#NET "io_rx<15>" LOC = "Y4" ; +NET "io_rx<0>" LOC = "Y8" ; +NET "io_rx<1>" LOC = "Y9" ; +NET "io_rx<2>" LOC = "V7" ; +NET "io_rx<3>" LOC = "U8" ; +NET "io_rx<4>" LOC = "V10" ; +NET "io_rx<5>" LOC = "U9" ; +NET "io_rx<6>" LOC = "AB7" ; +NET "io_rx<7>" LOC = "AA8" ; +NET "io_rx<8>" LOC = "W8" ; +NET "io_rx<9>" LOC = "V8" ; +NET "io_rx<10>" LOC = "AB5" ; +NET "io_rx<11>" LOC = "AB6" ; +NET "io_rx<12>" LOC = "AB4" ; +NET "io_rx<13>" LOC = "AA4" ; +NET "io_rx<14>" LOC = "W5" ; +NET "io_rx<15>" LOC = "Y4" ; #NET "CLKOUT2_CODEC" LOC = "U12" ; #NET "CLKOUT1_CODEC" LOC = "V12" ; diff --git a/usrp2/top/u1e/u1e.v b/usrp2/top/u1e/u1e.v index 326476b21..667372434 100644 --- a/usrp2/top/u1e/u1e.v +++ b/usrp2/top/u1e/u1e.v @@ -11,7 +11,8 @@ module u1e input EM_WAIT0, input EM_NCS4, input EM_NCS6, input EM_NWE, input EM_NOE, inout db_sda, inout db_scl, // I2C - output overo_gpio144, output overo_gpio145, output overo_gpio146, output overo_gpio147 // Fifo controls + output overo_gpio144, output overo_gpio145, output overo_gpio146, output overo_gpio147, // Fifo controls + inout [15:0] io_tx, inout [15:0] io_rx ); // FPGA-specific pins connections @@ -27,6 +28,7 @@ module u1e .EM_NWE(EM_NWE), .EM_NOE(EM_NOE), .db_sda(db_sda), .db_scl(db_scl), .tx_have_space(overo_gpio144), .tx_underrun(overo_gpio145), - .rx_have_data(overo_gpio146), .rx_overrun(overo_gpio147) ); + .rx_have_data(overo_gpio146), .rx_overrun(overo_gpio147), + .io_tx(io_tx), .io_rx(io_rx) ); endmodule // u1e diff --git a/usrp2/top/u1e/u1e_core.v b/usrp2/top/u1e/u1e_core.v index 257156d4b..ad3234b56 100644 --- a/usrp2/top/u1e/u1e_core.v +++ b/usrp2/top/u1e/u1e_core.v @@ -10,7 +10,8 @@ module u1e_core input EM_WAIT0, input EM_NCS4, input EM_NCS6, input EM_NWE, input EM_NOE, inout db_sda, inout db_scl, - output tx_have_space, output tx_underrun, output rx_have_data, output rx_overrun + output tx_have_space, output tx_underrun, output rx_have_data, output rx_overrun, + inout [15:0] io_tx, inout [15:0] io_rx ); wire wb_clk, wb_rst; @@ -102,7 +103,7 @@ module u1e_core .sf_dat_o(sf_dat_mosi),.sf_adr_o(sf_adr),.sf_sel_o(sf_sel),.sf_we_o(sf_we),.sf_cyc_o(sf_cyc),.sf_stb_o(sf_stb), .sf_dat_i(sf_dat_miso),.sf_ack_i(sf_ack),.sf_err_i(0),.sf_rty_i(0) ); - assign s4_ack = 0; assign s5_ack = 0; assign s6_ack = 0; assign s7_ack = 0; + assign s5_ack = 0; assign s6_ack = 0; assign s7_ack = 0; assign s8_ack = 0; assign s9_ack = 0; assign sa_ack = 0; assign sb_ack = 0; assign sc_ack = 0; assign sd_ack = 0; assign se_ack = 0; assign sf_ack = 0; @@ -172,6 +173,20 @@ module u1e_core IOBUF scl_pin(.O(scl_pad_i), .IO(db_scl), .I(scl_pad_o), .T(scl_pad_oen_o)); IOBUF sda_pin(.O(sda_pad_i), .IO(db_sda), .I(sda_pad_o), .T(sda_pad_oen_o)); + // ///////////////////////////////////////////////////////////////////////// + // GPIOs -- Slave #4 + + wire [31:0] atr_lines; + wire [31:0] debug_gpio_0, debug_gpio_1; + + nsgpio16LE + nsgpio16LE(.clk_i(wb_clk),.rst_i(wb_rst), + .cyc_i(s4_cyc),.stb_i(s4_stb),.adr_i(s4_adr[3:0]),.we_i(s4_we), + .dat_i(s4_dat_o),.dat_o(s4_dat_i),.ack_o(s4_ack), + .atr(atr_lines),.debug_0(debug_gpio_0),.debug_1(debug_gpio_1), + .gpio( {io_tx,io_rx} ) ); + + // ///////////////////////////////////////////////////////////////////////////////////// // Debug Pins -- cgit v1.2.3 From 7043c21bcef95879c58c9101f8bd16f216aa277a Mon Sep 17 00:00:00 2001 From: Matt Ettus Date: Mon, 22 Feb 2010 12:30:55 -0800 Subject: Modified nsgpio.v to support 16 bit little endian bus interface. --- usrp2/control_lib/nsgpio16LE.v | 124 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 124 insertions(+) create mode 100644 usrp2/control_lib/nsgpio16LE.v diff --git a/usrp2/control_lib/nsgpio16LE.v b/usrp2/control_lib/nsgpio16LE.v new file mode 100644 index 000000000..6847bb4a9 --- /dev/null +++ b/usrp2/control_lib/nsgpio16LE.v @@ -0,0 +1,124 @@ +// Modified from code originally by Richard Herveille, his copyright is below + +///////////////////////////////////////////////////////////////////// +//// //// +//// OpenCores Simple General Purpose IO core //// +//// //// +//// Author: Richard Herveille //// +//// richard@asics.ws //// +//// www.asics.ws //// +//// //// +///////////////////////////////////////////////////////////////////// +//// //// +//// Copyright (C) 2002 Richard Herveille //// +//// richard@asics.ws //// +//// //// +//// This source file may be used and distributed without //// +//// restriction provided that this copyright statement is not //// +//// removed from the file and that any derivative work contains //// +//// the original copyright notice and the associated disclaimer.//// +//// //// +//// THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY //// +//// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED //// +//// TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS //// +//// FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL THE AUTHOR //// +//// 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. //// +//// //// +///////////////////////////////////////////////////////////////////// + + +module nsgpio16LE + (input clk_i, input rst_i, + input cyc_i, input stb_i, input [3:0] adr_i, input we_i, input [15:0] dat_i, + output reg [15:0] dat_o, output reg ack_o, + input [31:0] atr, input [31:0] debug_0, input [31:0] debug_1, + inout [31:0] gpio + ); + + reg [63:0] ctrl; + reg [31:0] line; + reg [31:0] lgpio; // LatchedGPIO pins + reg [31:0] ddr; + + wire wb_acc = cyc_i & stb_i; // WISHBONE access + wire wb_wr = wb_acc & we_i; // WISHBONE write access + + always @(posedge clk_i or posedge rst_i) + if (rst_i) + begin + ctrl <= 64'h0; + line <= 0; + end + else if (wb_wr) + case( adr_i[3:1] ) + 3'b000 : + line[15:0] <= dat_i; + 3'b001 : + line[31:16] <= dat_i; + 3'b010 : + ddr[15:0] <= dat_i; + 3'b011 : + ddr[31:16] <= dat_i; + 3'b100 : + ctrl[15:0] <= dat_i; + 3'b101 : + ctrl[31:16] <= dat_i; + 3'b110 : + ctrl[47:32] <= dat_i; + 3'b111 : + ctrl[63:48] <= dat_i; + endcase // case ( adr_i[3:1] ) + + always @(posedge clk_i) + case (adr_i[3:1]) + 3'b000 : + dat_o <= lgpio[15:0]; + 3'b001 : + dat_o <= lgpio[31:16]; + 3'b010 : + dat_o <= ddr[15:0]; + 3'b011 : + dat_o <= ddr[31:16]; + 3'b100 : + dat_o <= ctrl[15:0]; + 3'b101 : + dat_o <= ctrl[31:16]; + 3'b110 : + dat_o <= ctrl[47:32]; + 3'b111 : + dat_o <= ctrl[63:48]; + endcase // case (adr_i[3:1]) + + + always @(posedge clk_i or posedge rst_i) + if (rst_i) + ack_o <= 1'b0; + else + ack_o <= wb_acc & !ack_o; + + // latch GPIO input pins + always @(posedge clk_i) + lgpio <= gpio; + + // assign GPIO outputs + integer n; + reg [31:0] igpio; // temporary internal signal + + always @(ctrl or line or debug_1 or debug_0 or atr) + for(n=0;n<32;n=n+1) + igpio[n] <= ddr[n] ? (ctrl[2*n+1] ? (ctrl[2*n] ? debug_1[n] : debug_0[n]) : + (ctrl[2*n] ? atr[n] : line[n]) ) + : 1'bz; + + assign gpio = igpio; + +endmodule + -- cgit v1.2.3 From ba97786f44d66c634f289e9a23021e8e13548326 Mon Sep 17 00:00:00 2001 From: Matt Ettus Date: Mon, 22 Feb 2010 12:33:13 -0800 Subject: remove the #1 delay in all the regs. They just slow down sims. --- usrp2/opencores/spi/rtl/verilog/spi_clgen.v | 20 +++--- usrp2/opencores/spi/rtl/verilog/spi_defines.v | 8 +-- usrp2/opencores/spi/rtl/verilog/spi_shift.v | 90 +++++++++++++-------------- usrp2/opencores/spi/rtl/verilog/spi_top.v | 68 ++++++++++---------- 4 files changed, 90 insertions(+), 96 deletions(-) diff --git a/usrp2/opencores/spi/rtl/verilog/spi_clgen.v b/usrp2/opencores/spi/rtl/verilog/spi_clgen.v index 7bc4f6e5e..3f29f6d7f 100644 --- a/usrp2/opencores/spi/rtl/verilog/spi_clgen.v +++ b/usrp2/opencores/spi/rtl/verilog/spi_clgen.v @@ -43,8 +43,6 @@ module spi_clgen (clk_in, rst, go, enable, last_clk, divider, clk_out, pos_edge, neg_edge); - parameter Tp = 1; - input clk_in; // input clock (system clock) input rst; // reset input enable; // clock enable @@ -71,13 +69,13 @@ module spi_clgen (clk_in, rst, go, enable, last_clk, divider, clk_out, pos_edge, always @(posedge clk_in or posedge rst) begin if(rst) - cnt <= #Tp {`SPI_DIVIDER_LEN{1'b1}}; + cnt <= {`SPI_DIVIDER_LEN{1'b1}}; else begin if(!enable || cnt_zero) - cnt <= #Tp divider; + cnt <= divider; else - cnt <= #Tp cnt - {{`SPI_DIVIDER_LEN-1{1'b0}}, 1'b1}; + cnt <= cnt - {{`SPI_DIVIDER_LEN-1{1'b0}}, 1'b1}; end end @@ -85,9 +83,9 @@ module spi_clgen (clk_in, rst, go, enable, last_clk, divider, clk_out, pos_edge, always @(posedge clk_in or posedge rst) begin if(rst) - clk_out <= #Tp 1'b0; + clk_out <= 1'b0; else - clk_out <= #Tp (enable && cnt_zero && (!last_clk || clk_out)) ? ~clk_out : clk_out; + clk_out <= (enable && cnt_zero && (!last_clk || clk_out)) ? ~clk_out : clk_out; end // Pos and neg edge signals @@ -95,13 +93,13 @@ module spi_clgen (clk_in, rst, go, enable, last_clk, divider, clk_out, pos_edge, begin if(rst) begin - pos_edge <= #Tp 1'b0; - neg_edge <= #Tp 1'b0; + pos_edge <= 1'b0; + neg_edge <= 1'b0; end else begin - pos_edge <= #Tp (enable && !clk_out && cnt_one) || (!(|divider) && clk_out) || (!(|divider) && go && !enable); - neg_edge <= #Tp (enable && clk_out && cnt_one) || (!(|divider) && !clk_out && enable); + pos_edge <= (enable && !clk_out && cnt_one) || (!(|divider) && clk_out) || (!(|divider) && go && !enable); + neg_edge <= (enable && clk_out && cnt_one) || (!(|divider) && !clk_out && enable); end end endmodule diff --git a/usrp2/opencores/spi/rtl/verilog/spi_defines.v b/usrp2/opencores/spi/rtl/verilog/spi_defines.v index a6925918e..01de2584d 100644 --- a/usrp2/opencores/spi/rtl/verilog/spi_defines.v +++ b/usrp2/opencores/spi/rtl/verilog/spi_defines.v @@ -43,8 +43,8 @@ // low frequency of system clock this can be reduced. // Use SPI_DIVIDER_LEN for fine tuning theexact number. // -//`define SPI_DIVIDER_LEN_8 -`define SPI_DIVIDER_LEN_16 +`define SPI_DIVIDER_LEN_8 +//`define SPI_DIVIDER_LEN_16 //`define SPI_DIVIDER_LEN_24 //`define SPI_DIVIDER_LEN_32 @@ -66,9 +66,9 @@ // Use SPI_MAX_CHAR for fine tuning the exact number, when using // SPI_MAX_CHAR_32, SPI_MAX_CHAR_24, SPI_MAX_CHAR_16, SPI_MAX_CHAR_8. // -`define SPI_MAX_CHAR_128 +//`define SPI_MAX_CHAR_128 //`define SPI_MAX_CHAR_64 -//`define SPI_MAX_CHAR_32 +`define SPI_MAX_CHAR_32 //`define SPI_MAX_CHAR_24 //`define SPI_MAX_CHAR_16 //`define SPI_MAX_CHAR_8 diff --git a/usrp2/opencores/spi/rtl/verilog/spi_shift.v b/usrp2/opencores/spi/rtl/verilog/spi_shift.v index b17ac8b1f..c8c73706b 100644 --- a/usrp2/opencores/spi/rtl/verilog/spi_shift.v +++ b/usrp2/opencores/spi/rtl/verilog/spi_shift.v @@ -46,8 +46,6 @@ module spi_shift (clk, rst, latch, byte_sel, len, lsb, go, tip, last, p_in, p_out, s_clk, s_in, s_out); - parameter Tp = 1; - input clk; // system clock input rst; // reset input [3:0] latch; // latch signal for storing the data in shift register @@ -92,13 +90,13 @@ module spi_shift (clk, rst, latch, byte_sel, len, lsb, go, always @(posedge clk or posedge rst) begin if(rst) - cnt <= #Tp {`SPI_CHAR_LEN_BITS+1{1'b0}}; + cnt <= {`SPI_CHAR_LEN_BITS+1{1'b0}}; else begin if(tip) - cnt <= #Tp pos_edge ? (cnt - {{`SPI_CHAR_LEN_BITS{1'b0}}, 1'b1}) : cnt; + cnt <= pos_edge ? (cnt - {{`SPI_CHAR_LEN_BITS{1'b0}}, 1'b1}) : cnt; else - cnt <= #Tp !(|len) ? {1'b1, {`SPI_CHAR_LEN_BITS{1'b0}}} : {1'b0, len}; + cnt <= !(|len) ? {1'b1, {`SPI_CHAR_LEN_BITS{1'b0}}} : {1'b0, len}; end end @@ -106,132 +104,132 @@ module spi_shift (clk, rst, latch, byte_sel, len, lsb, go, always @(posedge clk or posedge rst) begin if(rst) - tip <= #Tp 1'b0; + tip <= 1'b0; else if(go && ~tip) - tip <= #Tp 1'b1; + tip <= 1'b1; else if(tip && last && pos_edge) - tip <= #Tp 1'b0; + tip <= 1'b0; end // Sending bits to the line always @(posedge clk or posedge rst) begin if (rst) - s_out <= #Tp 1'b0; + s_out <= 1'b0; else - s_out <= #Tp (tx_clk || !tip) ? data[tx_bit_pos[`SPI_CHAR_LEN_BITS-1:0]] : s_out; + s_out <= (tx_clk || !tip) ? data[tx_bit_pos[`SPI_CHAR_LEN_BITS-1:0]] : s_out; end // Receiving bits from the line always @(posedge clk or posedge rst) begin if (rst) - data <= #Tp {`SPI_MAX_CHAR{1'b0}}; + data <= {`SPI_MAX_CHAR{1'b0}}; `ifdef SPI_MAX_CHAR_128 else if (latch[0] && !tip) begin if (byte_sel[3]) - data[31:24] <= #Tp p_in[31:24]; + data[31:24] <= p_in[31:24]; if (byte_sel[2]) - data[23:16] <= #Tp p_in[23:16]; + data[23:16] <= p_in[23:16]; if (byte_sel[1]) - data[15:8] <= #Tp p_in[15:8]; + data[15:8] <= p_in[15:8]; if (byte_sel[0]) - data[7:0] <= #Tp p_in[7:0]; + data[7:0] <= p_in[7:0]; end else if (latch[1] && !tip) begin if (byte_sel[3]) - data[63:56] <= #Tp p_in[31:24]; + data[63:56] <= p_in[31:24]; if (byte_sel[2]) - data[55:48] <= #Tp p_in[23:16]; + data[55:48] <= p_in[23:16]; if (byte_sel[1]) - data[47:40] <= #Tp p_in[15:8]; + data[47:40] <= p_in[15:8]; if (byte_sel[0]) - data[39:32] <= #Tp p_in[7:0]; + data[39:32] <= p_in[7:0]; end else if (latch[2] && !tip) begin if (byte_sel[3]) - data[95:88] <= #Tp p_in[31:24]; + data[95:88] <= p_in[31:24]; if (byte_sel[2]) - data[87:80] <= #Tp p_in[23:16]; + data[87:80] <= p_in[23:16]; if (byte_sel[1]) - data[79:72] <= #Tp p_in[15:8]; + data[79:72] <= p_in[15:8]; if (byte_sel[0]) - data[71:64] <= #Tp p_in[7:0]; + data[71:64] <= p_in[7:0]; end else if (latch[3] && !tip) begin if (byte_sel[3]) - data[127:120] <= #Tp p_in[31:24]; + data[127:120] <= p_in[31:24]; if (byte_sel[2]) - data[119:112] <= #Tp p_in[23:16]; + data[119:112] <= p_in[23:16]; if (byte_sel[1]) - data[111:104] <= #Tp p_in[15:8]; + data[111:104] <= p_in[15:8]; if (byte_sel[0]) - data[103:96] <= #Tp p_in[7:0]; + data[103:96] <= p_in[7:0]; end `else `ifdef SPI_MAX_CHAR_64 else if (latch[0] && !tip) begin if (byte_sel[3]) - data[31:24] <= #Tp p_in[31:24]; + data[31:24] <= p_in[31:24]; if (byte_sel[2]) - data[23:16] <= #Tp p_in[23:16]; + data[23:16] <= p_in[23:16]; if (byte_sel[1]) - data[15:8] <= #Tp p_in[15:8]; + data[15:8] <= p_in[15:8]; if (byte_sel[0]) - data[7:0] <= #Tp p_in[7:0]; + data[7:0] <= p_in[7:0]; end else if (latch[1] && !tip) begin if (byte_sel[3]) - data[63:56] <= #Tp p_in[31:24]; + data[63:56] <= p_in[31:24]; if (byte_sel[2]) - data[55:48] <= #Tp p_in[23:16]; + data[55:48] <= p_in[23:16]; if (byte_sel[1]) - data[47:40] <= #Tp p_in[15:8]; + data[47:40] <= p_in[15:8]; if (byte_sel[0]) - data[39:32] <= #Tp p_in[7:0]; + data[39:32] <= p_in[7:0]; end `else else if (latch[0] && !tip) begin `ifdef SPI_MAX_CHAR_8 if (byte_sel[0]) - data[`SPI_MAX_CHAR-1:0] <= #Tp p_in[`SPI_MAX_CHAR-1:0]; + data[`SPI_MAX_CHAR-1:0] <= p_in[`SPI_MAX_CHAR-1:0]; `endif `ifdef SPI_MAX_CHAR_16 if (byte_sel[0]) - data[7:0] <= #Tp p_in[7:0]; + data[7:0] <= p_in[7:0]; if (byte_sel[1]) - data[`SPI_MAX_CHAR-1:8] <= #Tp p_in[`SPI_MAX_CHAR-1:8]; + data[`SPI_MAX_CHAR-1:8] <= p_in[`SPI_MAX_CHAR-1:8]; `endif `ifdef SPI_MAX_CHAR_24 if (byte_sel[0]) - data[7:0] <= #Tp p_in[7:0]; + data[7:0] <= p_in[7:0]; if (byte_sel[1]) - data[15:8] <= #Tp p_in[15:8]; + data[15:8] <= p_in[15:8]; if (byte_sel[2]) - data[`SPI_MAX_CHAR-1:16] <= #Tp p_in[`SPI_MAX_CHAR-1:16]; + data[`SPI_MAX_CHAR-1:16] <= p_in[`SPI_MAX_CHAR-1:16]; `endif `ifdef SPI_MAX_CHAR_32 if (byte_sel[0]) - data[7:0] <= #Tp p_in[7:0]; + data[7:0] <= p_in[7:0]; if (byte_sel[1]) - data[15:8] <= #Tp p_in[15:8]; + data[15:8] <= p_in[15:8]; if (byte_sel[2]) - data[23:16] <= #Tp p_in[23:16]; + data[23:16] <= p_in[23:16]; if (byte_sel[3]) - data[`SPI_MAX_CHAR-1:24] <= #Tp p_in[`SPI_MAX_CHAR-1:24]; + data[`SPI_MAX_CHAR-1:24] <= p_in[`SPI_MAX_CHAR-1:24]; `endif end `endif `endif else - data[rx_bit_pos[`SPI_CHAR_LEN_BITS-1:0]] <= #Tp rx_clk ? s_in : data[rx_bit_pos[`SPI_CHAR_LEN_BITS-1:0]]; + data[rx_bit_pos[`SPI_CHAR_LEN_BITS-1:0]] <= rx_clk ? s_in : data[rx_bit_pos[`SPI_CHAR_LEN_BITS-1:0]]; end endmodule diff --git a/usrp2/opencores/spi/rtl/verilog/spi_top.v b/usrp2/opencores/spi/rtl/verilog/spi_top.v index 09b2e50e1..071aeefca 100644 --- a/usrp2/opencores/spi/rtl/verilog/spi_top.v +++ b/usrp2/opencores/spi/rtl/verilog/spi_top.v @@ -52,8 +52,6 @@ module spi_top ss_pad_o, sclk_pad_o, mosi_pad_o, miso_pad_i ); - parameter Tp = 1; - // Wishbone signals input wb_clk_i; // master clock input input wb_rst_i; // synchronous active high reset @@ -142,18 +140,18 @@ module spi_top always @(posedge wb_clk_i or posedge wb_rst_i) begin if (wb_rst_i) - wb_dat_o <= #Tp 32'b0; + wb_dat_o <= 32'b0; else - wb_dat_o <= #Tp wb_dat; + wb_dat_o <= wb_dat; end // Wb acknowledge always @(posedge wb_clk_i or posedge wb_rst_i) begin if (wb_rst_i) - wb_ack_o <= #Tp 1'b0; + wb_ack_o <= 1'b0; else - wb_ack_o <= #Tp wb_cyc_i & wb_stb_i & ~wb_ack_o; + wb_ack_o <= wb_cyc_i & wb_stb_i & ~wb_ack_o; end // Wb error @@ -163,47 +161,47 @@ module spi_top always @(posedge wb_clk_i or posedge wb_rst_i) begin if (wb_rst_i) - wb_int_o <= #Tp 1'b0; + wb_int_o <= 1'b0; else if (ie && tip && last_bit && pos_edge) - wb_int_o <= #Tp 1'b1; + wb_int_o <= 1'b1; else if (wb_ack_o) - wb_int_o <= #Tp 1'b0; + wb_int_o <= 1'b0; end // Divider register always @(posedge wb_clk_i or posedge wb_rst_i) begin if (wb_rst_i) - divider <= #Tp {`SPI_DIVIDER_LEN{1'b0}}; + divider <= {`SPI_DIVIDER_LEN{1'b0}}; else if (spi_divider_sel && wb_we_i && !tip) begin `ifdef SPI_DIVIDER_LEN_8 if (wb_sel_i[0]) - divider <= #Tp wb_dat_i[`SPI_DIVIDER_LEN-1:0]; + divider <= wb_dat_i[`SPI_DIVIDER_LEN-1:0]; `endif `ifdef SPI_DIVIDER_LEN_16 if (wb_sel_i[0]) - divider[7:0] <= #Tp wb_dat_i[7:0]; + divider[7:0] <= wb_dat_i[7:0]; if (wb_sel_i[1]) - divider[`SPI_DIVIDER_LEN-1:8] <= #Tp wb_dat_i[`SPI_DIVIDER_LEN-1:8]; + divider[`SPI_DIVIDER_LEN-1:8] <= wb_dat_i[`SPI_DIVIDER_LEN-1:8]; `endif `ifdef SPI_DIVIDER_LEN_24 if (wb_sel_i[0]) - divider[7:0] <= #Tp wb_dat_i[7:0]; + divider[7:0] <= wb_dat_i[7:0]; if (wb_sel_i[1]) - divider[15:8] <= #Tp wb_dat_i[15:8]; + divider[15:8] <= wb_dat_i[15:8]; if (wb_sel_i[2]) - divider[`SPI_DIVIDER_LEN-1:16] <= #Tp wb_dat_i[`SPI_DIVIDER_LEN-1:16]; + divider[`SPI_DIVIDER_LEN-1:16] <= wb_dat_i[`SPI_DIVIDER_LEN-1:16]; `endif `ifdef SPI_DIVIDER_LEN_32 if (wb_sel_i[0]) - divider[7:0] <= #Tp wb_dat_i[7:0]; + divider[7:0] <= wb_dat_i[7:0]; if (wb_sel_i[1]) - divider[15:8] <= #Tp wb_dat_i[15:8]; + divider[15:8] <= wb_dat_i[15:8]; if (wb_sel_i[2]) - divider[23:16] <= #Tp wb_dat_i[23:16]; + divider[23:16] <= wb_dat_i[23:16]; if (wb_sel_i[3]) - divider[`SPI_DIVIDER_LEN-1:24] <= #Tp wb_dat_i[`SPI_DIVIDER_LEN-1:24]; + divider[`SPI_DIVIDER_LEN-1:24] <= wb_dat_i[`SPI_DIVIDER_LEN-1:24]; `endif end end @@ -212,16 +210,16 @@ module spi_top always @(posedge wb_clk_i or posedge wb_rst_i) begin if (wb_rst_i) - ctrl <= #Tp {`SPI_CTRL_BIT_NB{1'b0}}; + ctrl <= {`SPI_CTRL_BIT_NB{1'b0}}; else if(spi_ctrl_sel && wb_we_i && !tip) begin if (wb_sel_i[0]) - ctrl[7:0] <= #Tp wb_dat_i[7:0] | {7'b0, ctrl[0]}; + ctrl[7:0] <= wb_dat_i[7:0] | {7'b0, ctrl[0]}; if (wb_sel_i[1]) - ctrl[`SPI_CTRL_BIT_NB-1:8] <= #Tp wb_dat_i[`SPI_CTRL_BIT_NB-1:8]; + ctrl[`SPI_CTRL_BIT_NB-1:8] <= wb_dat_i[`SPI_CTRL_BIT_NB-1:8]; end else if(tip && last_bit && pos_edge) - ctrl[`SPI_CTRL_GO] <= #Tp 1'b0; + ctrl[`SPI_CTRL_GO] <= 1'b0; end assign rx_negedge = ctrl[`SPI_CTRL_RX_NEGEDGE]; @@ -236,36 +234,36 @@ module spi_top always @(posedge wb_clk_i or posedge wb_rst_i) begin if (wb_rst_i) - ss <= #Tp {`SPI_SS_NB{1'b0}}; + ss <= {`SPI_SS_NB{1'b0}}; else if(spi_ss_sel && wb_we_i && !tip) begin `ifdef SPI_SS_NB_8 if (wb_sel_i[0]) - ss <= #Tp wb_dat_i[`SPI_SS_NB-1:0]; + ss <= wb_dat_i[`SPI_SS_NB-1:0]; `endif `ifdef SPI_SS_NB_16 if (wb_sel_i[0]) - ss[7:0] <= #Tp wb_dat_i[7:0]; + ss[7:0] <= wb_dat_i[7:0]; if (wb_sel_i[1]) - ss[`SPI_SS_NB-1:8] <= #Tp wb_dat_i[`SPI_SS_NB-1:8]; + ss[`SPI_SS_NB-1:8] <= wb_dat_i[`SPI_SS_NB-1:8]; `endif `ifdef SPI_SS_NB_24 if (wb_sel_i[0]) - ss[7:0] <= #Tp wb_dat_i[7:0]; + ss[7:0] <= wb_dat_i[7:0]; if (wb_sel_i[1]) - ss[15:8] <= #Tp wb_dat_i[15:8]; + ss[15:8] <= wb_dat_i[15:8]; if (wb_sel_i[2]) - ss[`SPI_SS_NB-1:16] <= #Tp wb_dat_i[`SPI_SS_NB-1:16]; + ss[`SPI_SS_NB-1:16] <= wb_dat_i[`SPI_SS_NB-1:16]; `endif `ifdef SPI_SS_NB_32 if (wb_sel_i[0]) - ss[7:0] <= #Tp wb_dat_i[7:0]; + ss[7:0] <= wb_dat_i[7:0]; if (wb_sel_i[1]) - ss[15:8] <= #Tp wb_dat_i[15:8]; + ss[15:8] <= wb_dat_i[15:8]; if (wb_sel_i[2]) - ss[23:16] <= #Tp wb_dat_i[23:16]; + ss[23:16] <= wb_dat_i[23:16]; if (wb_sel_i[3]) - ss[`SPI_SS_NB-1:24] <= #Tp wb_dat_i[`SPI_SS_NB-1:24]; + ss[`SPI_SS_NB-1:24] <= wb_dat_i[`SPI_SS_NB-1:24]; `endif end end -- cgit v1.2.3 From 035440ab7dce5c13655539db606de531606bad59 Mon Sep 17 00:00:00 2001 From: Matt Ettus Date: Mon, 22 Feb 2010 15:39:53 -0800 Subject: settings bus with 16 bit wishbone interface, put on the main wishbone in u1e --- usrp2/control_lib/settings_bus_16LE.v | 54 +++++++++++++++++++++++++++++++++++ usrp2/top/u1e/Makefile | 2 +- usrp2/top/u1e/u1e_core.v | 15 ++++++++-- 3 files changed, 68 insertions(+), 3 deletions(-) create mode 100644 usrp2/control_lib/settings_bus_16LE.v diff --git a/usrp2/control_lib/settings_bus_16LE.v b/usrp2/control_lib/settings_bus_16LE.v new file mode 100644 index 000000000..fbef9b1c9 --- /dev/null +++ b/usrp2/control_lib/settings_bus_16LE.v @@ -0,0 +1,54 @@ + +// Grab settings off the wishbone bus, send them out to settings bus +// 16 bits little endian, but all registers need to be written 32 bits at a time. +// This means that you write the low 16 bits first and then the high 16 bits. +// The setting regs are strobed when the high 16 bits are written + +module settings_bus_16LE + #(parameter AWIDTH=16) + (input wb_clk, + input wb_rst, + input [AWIDTH-1:0] wb_adr_i, + input [15:0] wb_dat_i, + input wb_stb_i, + input wb_we_i, + output reg wb_ack_o, + output strobe, + output reg [7:0] addr, + output reg [31:0] data); + + reg stb_int; + + always @(posedge wb_clk) + if(wb_rst) + begin + stb_int <= 1'b0; + addr <= 8'd0; + data <= 32'd0; + end + else if(wb_we_i & wb_stb_i) + begin + addr <= wb_adr_i[9:2]; + if(wb_adr_i[1]) + begin + stb_int <= 1'b1; // We now have both halves + data[31:16] <= wb_dat_i; + end + else + begin + stb_int <= 1'b0; // Don't strobe, we need other half + data[15:0] <= wb_dat_i; + end + end + else + stb_int <= 1'b0; + + always @(posedge wb_clk) + if(wb_rst) + wb_ack_o <= 0; + else + wb_ack_o <= wb_stb_i & ~wb_ack_o; + + assign strobe = stb_int & wb_ack_o; + +endmodule // settings_bus_16LE diff --git a/usrp2/top/u1e/Makefile b/usrp2/top/u1e/Makefile index 9381789a7..bcd80df6a 100644 --- a/usrp2/top/u1e/Makefile +++ b/usrp2/top/u1e/Makefile @@ -69,7 +69,7 @@ control_lib/ram_2port.v \ control_lib/ram_harv_cache.v \ control_lib/ram_loader.v \ control_lib/setting_reg.v \ -control_lib/settings_bus.v \ +control_lib/settings_bus_16LE.v \ control_lib/srl.v \ control_lib/system_control.v \ control_lib/wb_1master.v \ diff --git a/usrp2/top/u1e/u1e_core.v b/usrp2/top/u1e/u1e_core.v index ad3234b56..7ac4c8f86 100644 --- a/usrp2/top/u1e/u1e_core.v +++ b/usrp2/top/u1e/u1e_core.v @@ -103,7 +103,7 @@ module u1e_core .sf_dat_o(sf_dat_mosi),.sf_adr_o(sf_adr),.sf_sel_o(sf_sel),.sf_we_o(sf_we),.sf_cyc_o(sf_cyc),.sf_stb_o(sf_stb), .sf_dat_i(sf_dat_miso),.sf_ack_i(sf_ack),.sf_err_i(0),.sf_rty_i(0) ); - assign s5_ack = 0; assign s6_ack = 0; assign s7_ack = 0; + assign s6_ack = 0; assign s7_ack = 0; assign s8_ack = 0; assign s9_ack = 0; assign sa_ack = 0; assign sb_ack = 0; assign sc_ack = 0; assign sd_ack = 0; assign se_ack = 0; assign sf_ack = 0; @@ -182,10 +182,21 @@ module u1e_core nsgpio16LE nsgpio16LE(.clk_i(wb_clk),.rst_i(wb_rst), .cyc_i(s4_cyc),.stb_i(s4_stb),.adr_i(s4_adr[3:0]),.we_i(s4_we), - .dat_i(s4_dat_o),.dat_o(s4_dat_i),.ack_o(s4_ack), + .dat_i(s4_dat_mosi),.dat_o(s4_dat_miso),.ack_o(s4_ack), .atr(atr_lines),.debug_0(debug_gpio_0),.debug_1(debug_gpio_1), .gpio( {io_tx,io_rx} ) ); + // ///////////////////////////////////////////////////////////////////////// + // Settings Bus -- Slave #5 + + wire [7:0] set_addr; + wire [31:0] set_data; + wire set_stb; + + settings_bus_16LE settings_bus_16LE + (.wb_clk(wb_clk),.wb_rst(wb_rst),.wb_adr_i(s5_adr),.wb_dat_i(s5_dat_mosi), + .wb_stb_i(s5_stb),.wb_we_i(s5_we),.wb_ack_o(s5_ack), + .strobe(set_stb),.addr(set_addr),.data(set_data) ); // ///////////////////////////////////////////////////////////////////////////////////// // Debug Pins -- cgit v1.2.3 From 89fc3946d6fa590dd8047984ed8718a6ffa4ab77 Mon Sep 17 00:00:00 2001 From: Matt Ettus Date: Tue, 23 Feb 2010 16:35:06 -0800 Subject: use our fancy new debug ports --- usrp2/top/u1e/u1e_core.v | 3 +++ 1 file changed, 3 insertions(+) diff --git a/usrp2/top/u1e/u1e_core.v b/usrp2/top/u1e/u1e_core.v index 7ac4c8f86..12c566b6c 100644 --- a/usrp2/top/u1e/u1e_core.v +++ b/usrp2/top/u1e/u1e_core.v @@ -206,6 +206,9 @@ module u1e_core assign debug = { { 1'b0, EM_WAIT0, EM_NCS6, EM_NCS4, EM_NWE, EM_NOE, EM_A[10:1] }, { EM_D } }; + assign debug_gpio_0 = { m0_we, m0_stb, m0_ack, s1_stb, s0_stb, m0_adr[10:0], m0_dat_mosi[15:0] }; + assign debug_gpio_1 = { debug_txd, debug_rxd }; + assign { debug_led[2],debug_led[0],debug_led[1] } = reg_fast; // LEDs are arranged funny on board endmodule // u1e_core -- cgit v1.2.3 From 702c87c3bae259f038d2c10fe32903f391e95de1 Mon Sep 17 00:00:00 2001 From: Matt Ettus Date: Tue, 23 Feb 2010 19:54:54 -0800 Subject: first cut at making a bidirectional 2 port ram for the gpmc data interface ISE chokes on the unequal size ram --- usrp2/control_lib/ram_2port_mixed_width.v | 44 +++++++++++++++++++++++++++++++ usrp2/gpmc/gpmc.v | 24 ++++++++++++----- usrp2/top/u1e/Makefile | 1 + 3 files changed, 63 insertions(+), 6 deletions(-) create mode 100644 usrp2/control_lib/ram_2port_mixed_width.v diff --git a/usrp2/control_lib/ram_2port_mixed_width.v b/usrp2/control_lib/ram_2port_mixed_width.v new file mode 100644 index 000000000..3fa43114f --- /dev/null +++ b/usrp2/control_lib/ram_2port_mixed_width.v @@ -0,0 +1,44 @@ + + +module ram_2port_mixed_width + #(parameter AWIDTH=9) + (input clk16, + input en16, + input we16, + input [10:0] addr16, + input [15:0] di16, + output reg [15:0] do16, + + input clk32, + input en32, + input we32, + input [9:0] addr32, + input [31:0] di32, + output reg [31:0] do32); + + reg [31:0] ram [(1< Date: Thu, 25 Feb 2010 16:50:09 -0800 Subject: First cut at passing data buffers around on GPMC bus --- usrp2/gpmc/dbsm.v | 88 +++++++++++++++++++++++++++++++++++++++++++++++ usrp2/gpmc/gpmc.v | 45 ++++++++++++++++++------ usrp2/models/gpmc_model.v | 23 ++++++++++--- usrp2/top/u1e/tb_u1e.v | 11 ++++-- usrp2/top/u1e/u1e.v | 3 +- usrp2/top/u1e/u1e_core.v | 20 +++++++---- 6 files changed, 165 insertions(+), 25 deletions(-) create mode 100644 usrp2/gpmc/dbsm.v diff --git a/usrp2/gpmc/dbsm.v b/usrp2/gpmc/dbsm.v new file mode 100644 index 000000000..0f27be46a --- /dev/null +++ b/usrp2/gpmc/dbsm.v @@ -0,0 +1,88 @@ + +module bsm + (input clk, input reset, input clear, + input write_done, + input read_done, + output readable, + output writeable); + + reg state; + localparam ST_WRITEABLE = 0; + localparam ST_READABLE = 1; + + always @(posedge clk) + if(reset | clear) + state <= ST_WRITEABLE; + else + case(state) + ST_WRITEABLE : + if(write_done) + state <= ST_READABLE; + ST_READABLE : + if(read_done) + state <= ST_WRITEABLE; + endcase // case (state) + + assign readable = (state == ST_READABLE); + assign writeable = (state == ST_WRITEABLE); + +endmodule // bsm + +module dbsm + (input clk, input reset, input clear, + output reg read_sel, output read_ready, input read_done, + output reg write_sel, output write_ready, input write_done); + + localparam NUM_BUFS = 2; + + wire [NUM_BUFS-1:0] readable, writeable, read_done_buf, write_done_buf; + + // Two of these buffer state machines + genvar i; + for(i=0;i Date: Thu, 25 Feb 2010 16:50:29 -0800 Subject: ISE chokes on the pure verilog version so we use the macro --- usrp2/control_lib/ram_2port_mixed_width.v | 53 ++++++++++++++++++++++++++++--- 1 file changed, 49 insertions(+), 4 deletions(-) diff --git a/usrp2/control_lib/ram_2port_mixed_width.v b/usrp2/control_lib/ram_2port_mixed_width.v index 3fa43114f..e10321959 100644 --- a/usrp2/control_lib/ram_2port_mixed_width.v +++ b/usrp2/control_lib/ram_2port_mixed_width.v @@ -1,5 +1,3 @@ - - module ram_2port_mixed_width #(parameter AWIDTH=9) (input clk16, @@ -7,14 +5,58 @@ module ram_2port_mixed_width input we16, input [10:0] addr16, input [15:0] di16, - output reg [15:0] do16, + output [15:0] do16, input clk32, input en32, input we32, input [9:0] addr32, input [31:0] di32, - output reg [31:0] do32); + output [31:0] do32); + + RAMB16BWER #(.DATA_WIDTH_A(18), // Valid values are 0, 1, 2, 4, 9, 18, or 36 + .DATA_WIDTH_B(36), // Valid values are 0, 1, 2, 4, 9, 18, or 36 + .DOA_REG(0), // Specifies to enable=1/disable=0 port A output registers + .DOB_REG(0), // Specifies to enable=1/disable=0 port B output registers + .INIT_A(36'h000000000), // Initial values on A output port + .INIT_B(36'h000000000), // Initial values on B output port + .RSTTYPE("SYNC"), // Specifes reset type to be "SYNC" or "ASYNC" + .SIM_COLLISION_CHECK("ALL"), // Collision check enable "ALL", "WARNING_ONLY", + // "GENERATE_X_ONLY" or "NONE" + .SRVAL_A(36'h000000000), // Set/Reset value for A port output + .SRVAL_B(36'h000000000), // Set/Reset value for B port output + .WRITE_MODE_A("WRITE_FIRST"), // "WRITE_FIRST", "READ_FIRST", or "NO_CHANGE" + .WRITE_MODE_B("WRITE_FIRST")) // "WRITE_FIRST", "READ_FIRST", or "NO_CHANGE" + RAMB16BWER_inst (.DOA(do16), // 32-bit A port data output + .DOB(do32), // 32-bit B port data output + .DOPA(), // 4-bit A port parity data output + .DOPB(), // 4-bit B port parity data output + .ADDRA(addr16), // 14-bit A port address input + .ADDRB(addr32), // 14-bit B port address input + .CLKA(clk16), // 1-bit A port clock input + .CLKB(clk32), // 1-bit B port clock input + .DIA(di16), // 32-bit A port data input + .DIB(di32), // 32-bit B port data input + .DIPA(0), // 4-bit A port parity data input + .DIPB(0), // 4-bit B port parity data input + .ENA(en16), // 1-bit A port enable input + .ENB(en32), // 1-bit B port enable input + .REGCEA(0), // 1-bit A port output register enable input + .REGCEB(0), // 1-bit B port output register enable input + .RSTA(0), // 1-bit A port reset input + .RSTB(0), // 1-bit B port reset input + .WEA({2{we16}}), // 4-bit A port write enable input + .WEB({4{we32}}) // 4-bit B port write enable input + ); + +endmodule // ram_2port_mixed_width + + + + +// ISE 10.1.03 chokes on the following + +/* reg [31:0] ram [(1< Date: Thu, 25 Feb 2010 18:37:25 -0800 Subject: Switched xilinx primitives because they order the bits funny in the other one --- usrp2/control_lib/ram_2port_mixed_width.v | 127 +++++++++++++++++++----------- 1 file changed, 79 insertions(+), 48 deletions(-) diff --git a/usrp2/control_lib/ram_2port_mixed_width.v b/usrp2/control_lib/ram_2port_mixed_width.v index e10321959..e84b0da02 100644 --- a/usrp2/control_lib/ram_2port_mixed_width.v +++ b/usrp2/control_lib/ram_2port_mixed_width.v @@ -1,54 +1,85 @@ + module ram_2port_mixed_width - #(parameter AWIDTH=9) - (input clk16, - input en16, - input we16, - input [10:0] addr16, - input [15:0] di16, - output [15:0] do16, - - input clk32, - input en32, - input we32, - input [9:0] addr32, - input [31:0] di32, - output [31:0] do32); + (input clk16, + input en16, + input we16, + input [10:0] addr16, + input [15:0] di16, + output [15:0] do16, + input clk32, + input en32, + input we32, + input [9:0] addr32, + input [31:0] di32, + output [31:0] do32); + + wire en32a = en32 & ~addr32[9]; + wire en32b = en32 & addr32[9]; + wire en16a = en16 & ~addr16[9]; + wire en16b = en16 & addr16[9]; - RAMB16BWER #(.DATA_WIDTH_A(18), // Valid values are 0, 1, 2, 4, 9, 18, or 36 - .DATA_WIDTH_B(36), // Valid values are 0, 1, 2, 4, 9, 18, or 36 - .DOA_REG(0), // Specifies to enable=1/disable=0 port A output registers - .DOB_REG(0), // Specifies to enable=1/disable=0 port B output registers - .INIT_A(36'h000000000), // Initial values on A output port - .INIT_B(36'h000000000), // Initial values on B output port - .RSTTYPE("SYNC"), // Specifes reset type to be "SYNC" or "ASYNC" - .SIM_COLLISION_CHECK("ALL"), // Collision check enable "ALL", "WARNING_ONLY", - // "GENERATE_X_ONLY" or "NONE" - .SRVAL_A(36'h000000000), // Set/Reset value for A port output - .SRVAL_B(36'h000000000), // Set/Reset value for B port output - .WRITE_MODE_A("WRITE_FIRST"), // "WRITE_FIRST", "READ_FIRST", or "NO_CHANGE" - .WRITE_MODE_B("WRITE_FIRST")) // "WRITE_FIRST", "READ_FIRST", or "NO_CHANGE" - RAMB16BWER_inst (.DOA(do16), // 32-bit A port data output - .DOB(do32), // 32-bit B port data output - .DOPA(), // 4-bit A port parity data output - .DOPB(), // 4-bit B port parity data output - .ADDRA(addr16), // 14-bit A port address input - .ADDRB(addr32), // 14-bit B port address input - .CLKA(clk16), // 1-bit A port clock input - .CLKB(clk32), // 1-bit B port clock input - .DIA(di16), // 32-bit A port data input - .DIB(di32), // 32-bit B port data input - .DIPA(0), // 4-bit A port parity data input - .DIPB(0), // 4-bit B port parity data input - .ENA(en16), // 1-bit A port enable input - .ENB(en32), // 1-bit B port enable input - .REGCEA(0), // 1-bit A port output register enable input - .REGCEB(0), // 1-bit B port output register enable input - .RSTA(0), // 1-bit A port reset input - .RSTB(0), // 1-bit B port reset input - .WEA({2{we16}}), // 4-bit A port write enable input - .WEB({4{we32}}) // 4-bit B port write enable input - ); + wire [31:0] do32a, do32b; + wire [15:0] do16a, do16b; + + assign do32 = addr32[9] ? do32b : do32a; + assign do16 = addr16[10] ? do16b : do16a; + RAMB16BWE_S36_S18 #(.INIT_A(36'h000000000), + .INIT_B(18'h00000), + .SIM_COLLISION_CHECK("ALL"), // "NONE", "WARNING_ONLY", "GENERATE_X_ONLY", "ALL" + .SRVAL_A(36'h000000000), // Port A output value upon SSR assertion + .SRVAL_B(18'h00000), // Port B output value upon SSR assertion + .WRITE_MODE_A("WRITE_FIRST"), // WRITE_FIRST, READ_FIRST or NO_CHANGE + .WRITE_MODE_B("WRITE_FIRST") // WRITE_FIRST, READ_FIRST or NO_CHANGE + ) + RAMB16BWE_S36_S18_0 (.DOA(do32a), // Port A 32-bit Data Output + .DOB(do16a), // Port B 16-bit Data Output + .DOPA(), // Port A 4-bit Parity Output + .DOPB(), // Port B 2-bit Parity Output + .ADDRA(addr32[8:0]), // Port A 9-bit Address Input + .ADDRB(addr16[9:0]), // Port B 10-bit Address Input + .CLKA(clk32), // Port A 1-bit Clock + .CLKB(clk16), // Port B 1-bit Clock + .DIA(di32), // Port A 32-bit Data Input + .DIB(di16), // Port B 16-bit Data Input + .DIPA(0), // Port A 4-bit parity Input + .DIPB(0), // Port-B 2-bit parity Input + .ENA(en32a), // Port A 1-bit RAM Enable Input + .ENB(en16a), // Port B 1-bit RAM Enable Input + .SSRA(0), // Port A 1-bit Synchronous Set/Reset Input + .SSRB(0), // Port B 1-bit Synchronous Set/Reset Input + .WEA({4{we32}}), // Port A 4-bit Write Enable Input + .WEB({2{we16}}) // Port B 2-bit Write Enable Input + ); + + RAMB16BWE_S36_S18 #(.INIT_A(36'h000000000), + .INIT_B(18'h00000), + .SIM_COLLISION_CHECK("ALL"), // "NONE", "WARNING_ONLY", "GENERATE_X_ONLY", "ALL" + .SRVAL_A(36'h000000000), // Port A output value upon SSR assertion + .SRVAL_B(18'h00000), // Port B output value upon SSR assertion + .WRITE_MODE_A("WRITE_FIRST"), // WRITE_FIRST, READ_FIRST or NO_CHANGE + .WRITE_MODE_B("WRITE_FIRST") // WRITE_FIRST, READ_FIRST or NO_CHANGE + ) + RAMB16BWE_S36_S18_1 (.DOA(do32b), // Port A 32-bit Data Output + .DOB(do16b), // Port B 16-bit Data Output + .DOPA(), // Port A 4-bit Parity Output + .DOPB(), // Port B 2-bit Parity Output + .ADDRA(addr32[8:0]), // Port A 9-bit Address Input + .ADDRB(addr16[9:0]), // Port B 10-bit Address Input + .CLKA(clk32), // Port A 1-bit Clock + .CLKB(clk16), // Port B 1-bit Clock + .DIA(di32), // Port A 32-bit Data Input + .DIB(di16), // Port B 16-bit Data Input + .DIPA(0), // Port A 4-bit parity Input + .DIPB(0), // Port-B 2-bit parity Input + .ENA(en32b), // Port A 1-bit RAM Enable Input + .ENB(en16b), // Port B 1-bit RAM Enable Input + .SSRA(0), // Port A 1-bit Synchronous Set/Reset Input + .SSRB(0), // Port B 1-bit Synchronous Set/Reset Input + .WEA({4{we32}}), // Port A 4-bit Write Enable Input + .WEB({2{we16}}) // Port B 2-bit Write Enable Input + ); + endmodule // ram_2port_mixed_width -- cgit v1.2.3 From 2f9b93f32ed8e561a0e92e2e32af03707475011c Mon Sep 17 00:00:00 2001 From: Matt Ettus Date: Thu, 25 Feb 2010 18:38:07 -0800 Subject: edge sync on done signals so we only fill/empty one buffer --- usrp2/gpmc/edge_sync.v | 22 ++++++++++++++++++++++ usrp2/gpmc/gpmc.v | 12 ++++++++++-- 2 files changed, 32 insertions(+), 2 deletions(-) create mode 100644 usrp2/gpmc/edge_sync.v diff --git a/usrp2/gpmc/edge_sync.v b/usrp2/gpmc/edge_sync.v new file mode 100644 index 000000000..5d9417c08 --- /dev/null +++ b/usrp2/gpmc/edge_sync.v @@ -0,0 +1,22 @@ + + +module edge_sync + #(parameter POSEDGE = 1) + (input clk, + input rst, + input sig, + output trig); + + reg [1:0] delay; + + always @(posedge clk) + if(rst) + delay <= 2'b00; + else + delay <= {delay[0],sig}; + + assign trig = POSEDGE ? (delay==2'b01) : (delay==2'b10); + +endmodule // edge_sync + + diff --git a/usrp2/gpmc/gpmc.v b/usrp2/gpmc/gpmc.v index 91d02bfec..831df3b4c 100644 --- a/usrp2/gpmc/gpmc.v +++ b/usrp2/gpmc/gpmc.v @@ -32,7 +32,11 @@ module gpmc // //////////////////////////////////////////// // Write path wire read_sel_in, write_sel_in, clear_in; - wire write_done_in = ~EM_NCS4 & ~EM_NWE & (EM_A == 10'h3FF); + wire write_done_in; + + edge_sync #(.POSEDGE(0)) + edge_sync_wdi(.clk(wb_clk), .rst(wb_rst), + .sig(~EM_NCS4 & ~EM_NWE & (EM_A == 10'h3FF)), .trig(write_done_in)); ram_2port_mixed_width buffer_in (.clk16(wb_clk), .en16(~EM_NCS4), .we16(~EM_NWE), .addr16({write_sel_in,EM_A}), .di16(EM_D), .do16(), @@ -47,7 +51,11 @@ module gpmc // //////////////////////////////////////////// // Read path wire read_sel_out, write_sel_out, clear_out; - wire read_done_out = ~EM_NCS4 & ~EM_NOE & (EM_A == 10'h3FF); + wire read_done_out; + + edge_sync #(.POSEDGE(0)) + edge_sync_rdo(.clk(wb_clk), .rst(wb_rst), + .sig(~EM_NCS4 & ~EM_NOE & (EM_A == 10'h3FF)), .trig(read_done_out)); ram_2port_mixed_width buffer_out (.clk16(wb_clk), .en16(~EM_NCS4), .we16(0), .addr16({read_sel_out,EM_A}), .di16(0), .do16(EM_D_ram), -- cgit v1.2.3 From d808829fee0c93f22c2ff3b34d0772d7cb91df5c Mon Sep 17 00:00:00 2001 From: Matt Ettus Date: Thu, 25 Feb 2010 18:38:35 -0800 Subject: corrected logic --- usrp2/gpmc/dbsm.v | 24 +++++++----------------- 1 file changed, 7 insertions(+), 17 deletions(-) diff --git a/usrp2/gpmc/dbsm.v b/usrp2/gpmc/dbsm.v index 0f27be46a..ff61859ec 100644 --- a/usrp2/gpmc/dbsm.v +++ b/usrp2/gpmc/dbsm.v @@ -56,28 +56,18 @@ module dbsm full <= 0; end else - if(write_done) - if(writeable[write_sel]==(NUM_BUFS-1)) - begin - write_sel <= 0; - if(read_sel == 0) - full <= 1; - end + if(write_done & writeable[write_sel]) + if(write_sel ==(NUM_BUFS-1)) + write_sel <= 0; else - begin - write_sel <= write_sel + 1; - if(read_sel == write_sel + 1) - full <= 1; - end // else: !if(writeable[write_sel]==(NUM_BUFS-1)) - else if(read_done) - full <= 0; - + write_sel <= write_sel + 1; + always @(posedge clk) if(reset | clear) read_sel <= 0; else - if(read_done) - if(readable[read_sel]==(NUM_BUFS-1)) + if(read_done & readable[read_sel]) + if(read_sel==(NUM_BUFS-1)) read_sel <= 0; else read_sel <= read_sel + 1; -- cgit v1.2.3 From c8e869b2e685cb8a5c012498b7f47aaadf39698a Mon Sep 17 00:00:00 2001 From: Matt Ettus Date: Thu, 25 Feb 2010 18:38:48 -0800 Subject: loopback and test --- usrp2/models/gpmc_model.v | 11 ++++++----- usrp2/top/u1e/u1e_core.v | 34 ++++++++++++++++++++++++++++++++-- 2 files changed, 38 insertions(+), 7 deletions(-) diff --git a/usrp2/models/gpmc_model.v b/usrp2/models/gpmc_model.v index 1e7dcdde5..3424671bd 100644 --- a/usrp2/models/gpmc_model.v +++ b/usrp2/models/gpmc_model.v @@ -78,11 +78,12 @@ module gpmc_model #1000; GPMC_Read(1,36); #1000; - GPMC_Write(0,36,16'hF00D); - GPMC_Write(0,38,16'hF00D); - GPMC_Write(0,40,16'hF00D); - GPMC_Write(0,11'h7FFE,16'hF00D); - #1000; + GPMC_Write(0,36,16'h1234); + GPMC_Write(0,38,16'h5678); + GPMC_Write(0,40,16'h9abc); + GPMC_Write(0,11'h2F4,16'hF00D); + GPMC_Write(0,11'h7FE,16'hF00D); + #100000; $finish; end diff --git a/usrp2/top/u1e/u1e_core.v b/usrp2/top/u1e/u1e_core.v index 7feafeda8..e14152f33 100644 --- a/usrp2/top/u1e/u1e_core.v +++ b/usrp2/top/u1e/u1e_core.v @@ -26,6 +26,13 @@ module u1e_core wire [aw-1:0] m0_adr; wire [sw-1:0] m0_sel; wire m0_cyc, m0_stb, m0_we, m0_ack, m0_err, m0_rty; + + // FIFO buffers + wire [31:0] read_data, write_data; + wire [8:0] read_addr, write_addr; + reg [8:0] addr; + + wire read_done, write_done, read_en, write_en, read_ready, write_ready; gpmc gpmc (.EM_CLK(EM_CLK), .EM_D(EM_D), .EM_A(EM_A), .EM_NBE(EM_NBE), .EM_WAIT0(EM_WAIT0), .EM_NCS4(EM_NCS4), .EM_NCS6(EM_NCS6), .EM_NWE(EM_NWE), @@ -43,9 +50,32 @@ module u1e_core .read_ready(read_ready), .read_done(read_done), .write_en(write_en), .write_addr(write_addr), .write_data(write_data), .write_ready(write_ready), .write_done(write_done) ); + + // Loopback + assign write_data = read_data; + + reg [10:0] counter; + assign write_addr = counter[10:2]; + assign read_addr = counter[10:2]; - assign wb_clk = clk_fpga; - + assign read_done = (counter == 11'h7FF); + assign write_done = (counter == 11'h7FF); + + always @(posedge wb_clk) + if(wb_rst) + counter <= 0; + else + if(counter == 0) + counter <= write_ready & read_ready; + else if(counter == 11'h7FF) + counter <= 0; + else + counter <= counter + 1; + + assign read_en = (counter[1:0] == 1); + assign write_en = (counter[1:0] == 2); + + // ///////////////////////////////////////////////////////////////////////////////////// // Wishbone Intercon, single master wire [dw-1:0] s0_dat_mosi, s1_dat_mosi, s0_dat_miso, s1_dat_miso, s2_dat_mosi, s3_dat_mosi, s2_dat_miso, s3_dat_miso, -- cgit v1.2.3 From bcf582bab2544a1d519f84c659322c4c4adc59a1 Mon Sep 17 00:00:00 2001 From: Matt Ettus Date: Thu, 25 Feb 2010 18:48:51 -0800 Subject: fix syntax error which icarus allowed (filed a bug with them) --- usrp2/gpmc/dbsm.v | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/usrp2/gpmc/dbsm.v b/usrp2/gpmc/dbsm.v index ff61859ec..530af7205 100644 --- a/usrp2/gpmc/dbsm.v +++ b/usrp2/gpmc/dbsm.v @@ -39,13 +39,15 @@ module dbsm // Two of these buffer state machines genvar i; - for(i=0;i Date: Thu, 25 Feb 2010 18:49:20 -0800 Subject: point to the new files --- usrp2/top/u1e/Makefile | 2 ++ 1 file changed, 2 insertions(+) diff --git a/usrp2/top/u1e/Makefile b/usrp2/top/u1e/Makefile index 306ab5bae..3412e227d 100644 --- a/usrp2/top/u1e/Makefile +++ b/usrp2/top/u1e/Makefile @@ -176,6 +176,8 @@ timing/time_sender.v \ timing/time_sync.v \ timing/timer.v \ gpmc/gpmc.v \ +gpmc/edge_sync.v \ +gpmc/dbsm.v \ top/u1e/u1e_core.v \ top/u1e/u1e.ucf \ top/u1e/u1e.v -- cgit v1.2.3 From 67dd6732b70c1cd35a7134f4830b09b893255935 Mon Sep 17 00:00:00 2001 From: Matt Ettus Date: Thu, 25 Feb 2010 19:43:01 -0800 Subject: gpmc debug pins --- usrp2/gpmc/gpmc.v | 9 ++++++++- usrp2/top/u1e/u1e_core.v | 9 ++++++--- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/usrp2/gpmc/gpmc.v b/usrp2/gpmc/gpmc.v index 831df3b4c..cf1357232 100644 --- a/usrp2/gpmc/gpmc.v +++ b/usrp2/gpmc/gpmc.v @@ -16,7 +16,8 @@ module gpmc // RAM Interface signals input ram_clk, input read_en, input [8:0] read_addr, output [31:0] read_data, output read_ready, input read_done, - input write_en, input [8:0] write_addr, input [31:0] write_data, output write_ready, input write_done + input write_en, input [8:0] write_addr, input [31:0] write_data, output write_ready, input write_done, + output [31:0] debug ); wire EM_output_enable = (~EM_NOE & (~EM_NCS4 | ~EM_NCS6)); @@ -65,6 +66,12 @@ module gpmc .read_sel(read_sel_out), .read_ready(rx_have_data), .read_done(read_done_out), .write_sel(write_sel_out), .write_ready(write_ready), .write_done(write_done)); + + assign debug = { { 2'b00, write_done_in, write_sel_in, read_en, read_sel_in, read_ready, read_done}, + { 2'b00, read_sel_out, write_en, write_sel_out, read_done_out, write_ready, write_done }, + { 8'd0 }, + { 8'd0 } }; + // CS6 is Control, Wishbone bus bridge (wb master) // Sync version reg [1:0] cs_del, we_del, oe_del; diff --git a/usrp2/top/u1e/u1e_core.v b/usrp2/top/u1e/u1e_core.v index e14152f33..6706d4aac 100644 --- a/usrp2/top/u1e/u1e_core.v +++ b/usrp2/top/u1e/u1e_core.v @@ -33,6 +33,8 @@ module u1e_core reg [8:0] addr; wire read_done, write_done, read_en, write_en, read_ready, write_ready; + + wire [31:0] debug_gpmc; gpmc gpmc (.EM_CLK(EM_CLK), .EM_D(EM_D), .EM_A(EM_A), .EM_NBE(EM_NBE), .EM_WAIT0(EM_WAIT0), .EM_NCS4(EM_NCS4), .EM_NCS6(EM_NCS6), .EM_NWE(EM_NWE), @@ -49,7 +51,8 @@ module u1e_core .read_en(read_en), .read_addr(read_addr), .read_data(read_data), .read_ready(read_ready), .read_done(read_done), .write_en(write_en), .write_addr(write_addr), .write_data(write_data), - .write_ready(write_ready), .write_done(write_done) ); + .write_ready(write_ready), .write_done(write_done), + .debug(debug_gpmc)); // Loopback assign write_data = read_data; @@ -241,10 +244,10 @@ module u1e_core // Debug circuitry assign debug_clk = { EM_CLK, clk_fpga }; - assign debug = { { 1'b0, EM_WAIT0, EM_NCS6, EM_NCS4, EM_NWE, EM_NOE, EM_A[10:1] }, + assign debug = { { rx_have_data, tx_have_space, EM_NCS6, EM_NCS4, EM_NWE, EM_NOE, EM_A[10:1] }, { EM_D } }; - assign debug_gpio_0 = { m0_we, m0_stb, m0_ack, s1_stb, s0_stb, m0_adr[10:0], m0_dat_mosi[15:0] }; + assign debug_gpio_0 = { debug_gpmc }; assign debug_gpio_1 = { debug_txd, debug_rxd }; assign { debug_led[2],debug_led[0],debug_led[1] } = reg_fast; // LEDs are arranged funny on board -- cgit v1.2.3 From e775ce6c17d1e43865cdd3f9472157d0d2d26b92 Mon Sep 17 00:00:00 2001 From: Matt Ettus Date: Thu, 25 Feb 2010 21:09:34 -0800 Subject: invert the pushbuttons since they are active low --- usrp2/top/u1e/u1e.v | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/usrp2/top/u1e/u1e.v b/usrp2/top/u1e/u1e.v index 066d02ca4..329d61aa9 100644 --- a/usrp2/top/u1e/u1e.v +++ b/usrp2/top/u1e/u1e.v @@ -21,9 +21,9 @@ module u1e IBUFGDS #(.IOSTANDARD("LVDS_33"), .DIFF_TERM("TRUE")) clk_fpga_pin (.O(clk_fpga),.I(CLK_FPGA_P),.IB(CLK_FPGA_N)); - u1e_core u1e_core(.clk_fpga(clk_fpga), .rst_fpga(debug_pb[2]), + u1e_core u1e_core(.clk_fpga(clk_fpga), .rst_fpga(~debug_pb[2]), .debug_led(debug_led), .debug(debug), .debug_clk(debug_clk), - .debug_pb(debug_pb), .dip_sw(dip_sw), .debug_txd(FPGA_TXD), .debug_rxd(FPGA_RXD), + .debug_pb(~debug_pb), .dip_sw(dip_sw), .debug_txd(FPGA_TXD), .debug_rxd(FPGA_RXD), .EM_CLK(EM_CLK), .EM_D(EM_D), .EM_A(EM_A), .EM_NBE(EM_NBE), .EM_WAIT0(EM_WAIT0), .EM_NCS4(EM_NCS4), .EM_NCS6(EM_NCS6), .EM_NWE(EM_NWE), .EM_NOE(EM_NOE), -- cgit v1.2.3 From db60b00d7a1bafe4f3f49e1ec2367897fc8c71ab Mon Sep 17 00:00:00 2001 From: Matt Ettus Date: Thu, 25 Feb 2010 21:10:26 -0800 Subject: enable was on the wrong address pin, needs to be the highest order one --- usrp2/control_lib/ram_2port_mixed_width.v | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/usrp2/control_lib/ram_2port_mixed_width.v b/usrp2/control_lib/ram_2port_mixed_width.v index e84b0da02..fae7d8de3 100644 --- a/usrp2/control_lib/ram_2port_mixed_width.v +++ b/usrp2/control_lib/ram_2port_mixed_width.v @@ -15,8 +15,8 @@ module ram_2port_mixed_width wire en32a = en32 & ~addr32[9]; wire en32b = en32 & addr32[9]; - wire en16a = en16 & ~addr16[9]; - wire en16b = en16 & addr16[9]; + wire en16a = en16 & ~addr16[10]; + wire en16b = en16 & addr16[10]; wire [31:0] do32a, do32b; wire [15:0] do16a, do16b; -- cgit v1.2.3 From 4288c956b45143f3cab7b798758ff41ffb43aa4a Mon Sep 17 00:00:00 2001 From: Matt Ettus Date: Thu, 25 Feb 2010 21:55:13 -0800 Subject: debug pins --- usrp2/top/u1e/u1e_core.v | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/usrp2/top/u1e/u1e_core.v b/usrp2/top/u1e/u1e_core.v index 6706d4aac..2645225a0 100644 --- a/usrp2/top/u1e/u1e_core.v +++ b/usrp2/top/u1e/u1e_core.v @@ -216,7 +216,7 @@ module u1e_core // ///////////////////////////////////////////////////////////////////////// // GPIOs -- Slave #4 - +/* wire [31:0] atr_lines; wire [31:0] debug_gpio_0, debug_gpio_1; @@ -226,7 +226,7 @@ module u1e_core .dat_i(s4_dat_mosi),.dat_o(s4_dat_miso),.ack_o(s4_ack), .atr(atr_lines),.debug_0(debug_gpio_0),.debug_1(debug_gpio_1), .gpio( {io_tx,io_rx} ) ); - +*/ // ///////////////////////////////////////////////////////////////////////// // Settings Bus -- Slave #5 @@ -247,6 +247,7 @@ module u1e_core assign debug = { { rx_have_data, tx_have_space, EM_NCS6, EM_NCS4, EM_NWE, EM_NOE, EM_A[10:1] }, { EM_D } }; + assign {io_tx,io_rx} = debug_gpmc; assign debug_gpio_0 = { debug_gpmc }; assign debug_gpio_1 = { debug_txd, debug_rxd }; -- cgit v1.2.3 From b74388567c0ed3048e45158ac077e31def59fea1 Mon Sep 17 00:00:00 2001 From: Matt Ettus Date: Thu, 25 Mar 2010 15:49:23 -0700 Subject: connected spi pins, but the spi core still needs to be redone for 16 bit interfaces Also reconnected GPIOs so you'll need to send commands in order to get debug pins on the GPIOs --- usrp2/top/u1e/u1e.ucf | 72 ++++++++++++++++++++++++++---------------------- usrp2/top/u1e/u1e.v | 16 +++++++++++ usrp2/top/u1e/u1e_core.v | 12 ++++---- 3 files changed, 60 insertions(+), 40 deletions(-) diff --git a/usrp2/top/u1e/u1e.ucf b/usrp2/top/u1e/u1e.ucf index f237eb60c..27f507c6b 100644 --- a/usrp2/top/u1e/u1e.ucf +++ b/usrp2/top/u1e/u1e.ucf @@ -68,27 +68,43 @@ NET "overo_gpio147" LOC = "B6" ; # rx_overrun #NET "overo_txd1" LOC = "C6" ; #NET "overo_rxd1" LOC = "D6" ; +## FTDI UART to USB converter NET "FPGA_TXD" LOC = "U1" ; NET "FPGA_RXD" LOC = "T6" ; #NET "SYSEN" LOC = "C11" ; +## I2C NET "db_scl" LOC = "U4" ; NET "db_sda" LOC = "U5" ; -#NET "db_sclk_rx" LOC = "W3" ; -#NET "db_miso_rx" LOC = "W2" ; -#NET "db_mosi_rx" LOC = "V4" ; -#NET "db_sen_rx" LOC = "V3" ; -#NET "db_sclk_tx" LOC = "Y1" ; -#NET "db_miso_tx" LOC = "W1" ; -#NET "db_mosi_tx" LOC = "R3" ; -#NET "db_sen_tx" LOC = "T4" ; -## Clock Gen -#NET "cgen_miso" LOC = "U2" ; -#NET "cgen_mosi" LOC = "V1" ; -#NET "cgen_sclk" LOC = "R5" ; -#NET "cgen_sen_b" LOC = "T1" ; +## SPI +### DBoard SPI +NET "db_sclk_rx" LOC = "W3" ; +NET "db_miso_rx" LOC = "W2" ; +NET "db_mosi_rx" LOC = "V4" ; +NET "db_sen_rx" LOC = "V3" ; +NET "db_sclk_tx" LOC = "Y1" ; +NET "db_miso_tx" LOC = "W1" ; +NET "db_mosi_tx" LOC = "R3" ; +NET "db_sen_tx" LOC = "T4" ; + +### AD9862 SPI and aux SPI Interfaces +#NET "aux_sdi_codec" LOC = "F19" ; +#NET "aux_sdo_codec" LOC = "F18" ; +#NET "aux_sclk_codec" LOC = "D21" ; +NET "sen_codec" LOC = "D20" ; +NET "mosi_codec" LOC = "E19" ; +NET "miso_codec" LOC = "F21" ; +NET "sclk_codec" LOC = "E20" ; + +### Clock Gen SPI +NET "cgen_miso" LOC = "U2" ; +NET "cgen_mosi" LOC = "V1" ; +NET "cgen_sclk" LOC = "R5" ; +NET "cgen_sen_b" LOC = "T1" ; + +## Clock gen control #NET "cgen_st_status" LOC = "D4" ; #NET "cgen_st_ld" LOC = "D1" ; #NET "cgen_st_refmon" LOC = "E1" ; @@ -147,17 +163,8 @@ NET "dip_sw<2>" LOC = "J4" ; NET "dip_sw<1>" LOC = "J6" ; NET "dip_sw<0>" LOC = "J7" ; -## AD9862 Interface -#NET "aux_sdi_codec" LOC = "F19" ; -#NET "aux_sdo_codec" LOC = "F18" ; -#NET "aux_sclk_codec" LOC = "D21" ; -#NET "reset_codec" LOC = "D22" ; -#NET "sen_codec" LOC = "D20" ; -#NET "mosi_codec" LOC = "E19" ; -#NET "miso_codec" LOC = "F21" ; -#NET "sclk_codec" LOC = "E20" ; - #NET "RXSYNC" LOC = "F22" ; +#NET "reset_codec" LOC = "D22" ; #NET "DB<11>" LOC = "E22" ; #NET "DB<10>" LOC = "J19" ; @@ -248,13 +255,12 @@ NET "io_rx<15>" LOC = "Y4" ; #NET "fpga_cfg_init_b" LOC = "W15" ; ## Unnamed, need to figure out what they do -#NET "unnamed_net37" LOC = "B1" ; -#NET "unnamed_net36" LOC = "B22" ; -#NET "unnamed_net35" LOC = "D2" ; -#NET "unnamed_net34" LOC = "A21" ; -#NET "unnamed_net45" LOC = "F7" ; -#NET "unnamed_net44" LOC = "V6" ; -#NET "unnamed_net43" LOC = "AA3" ; -#NET "unnamed_net42" LOC = "AB3" ; - -#NET "GND" LOC = "V19" ; +#NET "unnamed_net37" LOC = "B1" ; # TMS +#NET "unnamed_net36" LOC = "B22" ; # TDO +#NET "unnamed_net35" LOC = "D2" ; # TDI +#NET "unnamed_net34" LOC = "A21" ; # TCK +#NET "unnamed_net45" LOC = "F7" ; # PUDC_B +#NET "unnamed_net44" LOC = "V6" ; # M2 +#NET "unnamed_net43" LOC = "AA3" ; # M1 +#NET "unnamed_net42" LOC = "AB3" ; # M0 +#NET "GND" LOC = "V19" ; # Suspend, unused diff --git a/usrp2/top/u1e/u1e.v b/usrp2/top/u1e/u1e.v index 329d61aa9..f1f491a97 100644 --- a/usrp2/top/u1e/u1e.v +++ b/usrp2/top/u1e/u1e.v @@ -11,6 +11,12 @@ module u1e input EM_WAIT0, input EM_NCS4, input EM_NCS6, input EM_NWE, input EM_NOE, inout db_sda, inout db_scl, // I2C + + output db_sclk_tx, output db_sen_tx, output db_mosi_tx, input db_miso_tx, // DB TX SPI + output db_sclk_rx, output db_sen_rx, output db_mosi_rx, input db_miso_rx, // DB TX SPI + output sclk_codec, output sen_codec, output mosi_codec, input miso_codec, // AD9862 main SPI + output cgen_sclk, output cgen_sen_b, output cgen_mosi, input cgen_miso, // Clock gen SPI + output overo_gpio144, output overo_gpio145, output overo_gpio146, output overo_gpio147, // Fifo controls inout [15:0] io_tx, inout [15:0] io_rx ); @@ -21,6 +27,15 @@ module u1e IBUFGDS #(.IOSTANDARD("LVDS_33"), .DIFF_TERM("TRUE")) clk_fpga_pin (.O(clk_fpga),.I(CLK_FPGA_P),.IB(CLK_FPGA_N)); + // SPI pins + wire mosi, sclk, miso; + assign { db_sclk_tx, db_mosi_tx } = ~db_sen_tx ? {sclk,mosi} : 2'b0; + assign { db_sclk_rx, db_mosi_rx } = ~db_sen_rx ? {sclk,mosi} : 2'b0; + assign { sclk_codec, mosi_codec } = ~sen_codec ? {sclk,mosi} : 2'b0; + assign { cgen_sclk, cgen_mosi } = ~cgen_sen_b ? {sclk,mosi} : 2'b0; + assign miso = (~db_sen_tx & db_miso_tx) | (~db_sen_rx & db_miso_rx) | + (~sen_codec & miso_codec) | (~cgen_sen_b & cgen_miso); + u1e_core u1e_core(.clk_fpga(clk_fpga), .rst_fpga(~debug_pb[2]), .debug_led(debug_led), .debug(debug), .debug_clk(debug_clk), .debug_pb(~debug_pb), .dip_sw(dip_sw), .debug_txd(FPGA_TXD), .debug_rxd(FPGA_RXD), @@ -28,6 +43,7 @@ module u1e .EM_WAIT0(EM_WAIT0), .EM_NCS4(EM_NCS4), .EM_NCS6(EM_NCS6), .EM_NWE(EM_NWE), .EM_NOE(EM_NOE), .db_sda(db_sda), .db_scl(db_scl), + .sclk(sclk), .sen({cgen_sen_b,sen_codec,db_sen_tx,db_sen_rx}), .mosi(mosi), .miso(miso), .tx_have_space(overo_gpio144), .tx_underrun(overo_gpio145), .rx_have_data(overo_gpio146), .rx_overrun(overo_gpio147), .io_tx(io_tx), .io_rx(io_rx) ); diff --git a/usrp2/top/u1e/u1e_core.v b/usrp2/top/u1e/u1e_core.v index 2645225a0..c74d385ee 100644 --- a/usrp2/top/u1e/u1e_core.v +++ b/usrp2/top/u1e/u1e_core.v @@ -9,6 +9,8 @@ module u1e_core input EM_WAIT0, input EM_NCS4, input EM_NCS6, input EM_NWE, input EM_NOE, inout db_sda, inout db_scl, + output sclk, output [7:0] sen, output mosi, input miso, + output tx_have_space, output tx_underrun, output rx_have_data, output rx_overrun, inout [15:0] io_tx, inout [15:0] io_rx ); @@ -187,14 +189,11 @@ module u1e_core // ///////////////////////////////////////////////////////////////////////////////////// // Slave 2, SPI - /* spi_top shared_spi (.wb_clk_i(wb_clk),.wb_rst_i(wb_rst),.wb_adr_i(s2_adr[4:0]),.wb_dat_i(s2_dat_o), .wb_dat_o(s2_dat_i),.wb_sel_i(s2_sel),.wb_we_i(s2_we),.wb_stb_i(s2_stb), .wb_cyc_i(s2_cyc),.wb_ack_o(s2_ack),.wb_err_o(),.wb_int_o(spi_int), - .ss_pad_o({sen_tx_db,sen_tx_adc,sen_tx_dac,sen_rx_db,sen_rx_adc,sen_rx_dac,sen_dac,sen_clk}), - .sclk_pad_o(sclk),.mosi_pad_o(mosi),.miso_pad_i(miso) ); - */ + .ss_pad_o(sen), .sclk_pad_o(sclk), .mosi_pad_o(mosi), .miso_pad_i(miso) ); // ///////////////////////////////////////////////////////////////////////// // Slave 3, I2C @@ -216,7 +215,7 @@ module u1e_core // ///////////////////////////////////////////////////////////////////////// // GPIOs -- Slave #4 -/* + wire [31:0] atr_lines; wire [31:0] debug_gpio_0, debug_gpio_1; @@ -226,7 +225,7 @@ module u1e_core .dat_i(s4_dat_mosi),.dat_o(s4_dat_miso),.ack_o(s4_ack), .atr(atr_lines),.debug_0(debug_gpio_0),.debug_1(debug_gpio_1), .gpio( {io_tx,io_rx} ) ); -*/ + // ///////////////////////////////////////////////////////////////////////// // Settings Bus -- Slave #5 @@ -247,7 +246,6 @@ module u1e_core assign debug = { { rx_have_data, tx_have_space, EM_NCS6, EM_NCS4, EM_NWE, EM_NOE, EM_A[10:1] }, { EM_D } }; - assign {io_tx,io_rx} = debug_gpmc; assign debug_gpio_0 = { debug_gpmc }; assign debug_gpio_1 = { debug_txd, debug_rxd }; -- cgit v1.2.3 From 7a3064b67172aea1be00d188bdd79185a7df2ecf Mon Sep 17 00:00:00 2001 From: Matt Ettus Date: Fri, 26 Mar 2010 11:30:13 -0700 Subject: connect 2 clock gen controls and 3 status pins to the wishbone so they can be read/controlled from SW --- usrp2/top/u1e/u1e.ucf | 10 +++++----- usrp2/top/u1e/u1e.v | 4 ++++ usrp2/top/u1e/u1e_core.v | 20 +++++++++++++++++--- 3 files changed, 26 insertions(+), 8 deletions(-) diff --git a/usrp2/top/u1e/u1e.ucf b/usrp2/top/u1e/u1e.ucf index 27f507c6b..c39759d0b 100644 --- a/usrp2/top/u1e/u1e.ucf +++ b/usrp2/top/u1e/u1e.ucf @@ -105,11 +105,11 @@ NET "cgen_sclk" LOC = "R5" ; NET "cgen_sen_b" LOC = "T1" ; ## Clock gen control -#NET "cgen_st_status" LOC = "D4" ; -#NET "cgen_st_ld" LOC = "D1" ; -#NET "cgen_st_refmon" LOC = "E1" ; -#NET "cgen_sync_b" LOC = "M1" ; -#NET "cgen_ref_sel" LOC = "J1" ; +NET "cgen_st_status" LOC = "D4" ; +NET "cgen_st_ld" LOC = "D1" ; +NET "cgen_st_refmon" LOC = "E1" ; +NET "cgen_sync_b" LOC = "M1" ; +NET "cgen_ref_sel" LOC = "J1" ; ## Debug pins NET "debug_led<2>" LOC = "T5" ; diff --git a/usrp2/top/u1e/u1e.v b/usrp2/top/u1e/u1e.v index f1f491a97..ab270879c 100644 --- a/usrp2/top/u1e/u1e.v +++ b/usrp2/top/u1e/u1e.v @@ -16,6 +16,8 @@ module u1e output db_sclk_rx, output db_sen_rx, output db_mosi_rx, input db_miso_rx, // DB TX SPI output sclk_codec, output sen_codec, output mosi_codec, input miso_codec, // AD9862 main SPI output cgen_sclk, output cgen_sen_b, output cgen_mosi, input cgen_miso, // Clock gen SPI + + input cgen_st_status, input cgen_st_ld, input cgen_st_refmon, output cgen_sync_b, output cgen_ref_sel, output overo_gpio144, output overo_gpio145, output overo_gpio146, output overo_gpio147, // Fifo controls inout [15:0] io_tx, inout [15:0] io_rx @@ -44,6 +46,8 @@ module u1e .EM_NWE(EM_NWE), .EM_NOE(EM_NOE), .db_sda(db_sda), .db_scl(db_scl), .sclk(sclk), .sen({cgen_sen_b,sen_codec,db_sen_tx,db_sen_rx}), .mosi(mosi), .miso(miso), + .cgen_st_status(cgen_st_status), .cgen_st_ld(cgen_st_ld),.cgen_st_refmon(cgen_st_refmon), + .cgen_sync_b(cgen_sync_b), .cgen_ref_sel(cgen_ref_sel), .tx_have_space(overo_gpio144), .tx_underrun(overo_gpio145), .rx_have_data(overo_gpio146), .rx_overrun(overo_gpio147), .io_tx(io_tx), .io_rx(io_rx) ); diff --git a/usrp2/top/u1e/u1e_core.v b/usrp2/top/u1e/u1e_core.v index c74d385ee..4f0227dfd 100644 --- a/usrp2/top/u1e/u1e_core.v +++ b/usrp2/top/u1e/u1e_core.v @@ -10,7 +10,8 @@ module u1e_core inout db_sda, inout db_scl, output sclk, output [7:0] sen, output mosi, input miso, - + + input cgen_st_status, input cgen_st_ld, input cgen_st_refmon, output cgen_sync_b, output cgen_ref_sel, output tx_have_space, output tx_underrun, output rx_have_data, output rx_overrun, inout [15:0] io_tx, inout [15:0] io_rx ); @@ -151,13 +152,15 @@ module u1e_core assign sc_ack = 0; assign sd_ack = 0; assign se_ack = 0; assign sf_ack = 0; // ///////////////////////////////////////////////////////////////////////////////////// - // Slave 0, LEDs and Switches + // Slave 0, Misc LEDs, Switches, controls reg [15:0] reg_fast, reg_slow; localparam REG_FAST = 7'd4; localparam REG_SWITCHES = 7'd6; localparam REG_GPIOS = 7'd8; - + localparam REG_CGEN_ST = 7'd9; + localparam REG_CGEN_CTRL = 7'd10; + reg [3:0] reg_gpios; always @(posedge wb_clk) @@ -168,8 +171,19 @@ module u1e_core if(s0_cyc & s0_stb & s0_we & (s0_adr[6:0] == REG_GPIOS)) reg_gpios <= s0_dat_mosi; + reg [1:0] reg_cgen_ctrls; + + always @(posedge wb_clk) + if(wb_rst) + reg_cgen_ctrls <= 2'b11; + else if(s0_cyc & s0_stb & s0_we & (s0_adr[6:0] == REG_CGEN_CTRL)) + reg_cgen_ctrls <= s0_dat_mosi; + + assign {cgen_sync_b, cgen_ref_sel} = reg_cgen_ctrls; + assign s0_dat_miso = (s0_adr[6:0] == REG_FAST) ? reg_fast : (s0_adr[6:0] == REG_SWITCHES) ? {5'b0,debug_pb[2:0],dip_sw[7:0]} : + (s0_adr[6:0] == REG_CGEN_ST) ? {13'b0,cgen_st_status,cgen_st_ld,cgen_st_refmon} : 16'hBEEF; assign s0_ack = s0_stb & s0_cyc; -- cgit v1.2.3 From 806a2de4cdd9794f6fba915e32534fd2a0f31cb5 Mon Sep 17 00:00:00 2001 From: Matt Ettus Date: Fri, 26 Mar 2010 14:04:22 -0700 Subject: remove timescale junk get rid of asynchronous resets fix spelling error corrected comment --- usrp2/opencores/spi/rtl/verilog/spi_clgen.v | 7 +++---- usrp2/opencores/spi/rtl/verilog/spi_defines.v | 2 +- usrp2/opencores/spi/rtl/verilog/spi_shift.v | 9 ++++----- usrp2/opencores/spi/rtl/verilog/spi_top.v | 20 +++++++++++--------- usrp2/opencores/spi/rtl/verilog/timescale.v | 2 -- 5 files changed, 19 insertions(+), 21 deletions(-) delete mode 100644 usrp2/opencores/spi/rtl/verilog/timescale.v diff --git a/usrp2/opencores/spi/rtl/verilog/spi_clgen.v b/usrp2/opencores/spi/rtl/verilog/spi_clgen.v index 3f29f6d7f..2d9c34f40 100644 --- a/usrp2/opencores/spi/rtl/verilog/spi_clgen.v +++ b/usrp2/opencores/spi/rtl/verilog/spi_clgen.v @@ -39,7 +39,6 @@ ////////////////////////////////////////////////////////////////////// `include "spi_defines.v" -`include "timescale.v" module spi_clgen (clk_in, rst, go, enable, last_clk, divider, clk_out, pos_edge, neg_edge); @@ -66,7 +65,7 @@ module spi_clgen (clk_in, rst, go, enable, last_clk, divider, clk_out, pos_edge, assign cnt_one = cnt == {{`SPI_DIVIDER_LEN-1{1'b0}}, 1'b1}; // Counter counts half period - always @(posedge clk_in or posedge rst) + always @(posedge clk_in) begin if(rst) cnt <= {`SPI_DIVIDER_LEN{1'b1}}; @@ -80,7 +79,7 @@ module spi_clgen (clk_in, rst, go, enable, last_clk, divider, clk_out, pos_edge, end // clk_out is asserted every other half period - always @(posedge clk_in or posedge rst) + always @(posedge clk_in) begin if(rst) clk_out <= 1'b0; @@ -89,7 +88,7 @@ module spi_clgen (clk_in, rst, go, enable, last_clk, divider, clk_out, pos_edge, end // Pos and neg edge signals - always @(posedge clk_in or posedge rst) + always @(posedge clk_in) begin if(rst) begin diff --git a/usrp2/opencores/spi/rtl/verilog/spi_defines.v b/usrp2/opencores/spi/rtl/verilog/spi_defines.v index 01de2584d..963a680a8 100644 --- a/usrp2/opencores/spi/rtl/verilog/spi_defines.v +++ b/usrp2/opencores/spi/rtl/verilog/spi_defines.v @@ -137,7 +137,7 @@ `define SPI_TX_2 2 `define SPI_TX_3 3 `define SPI_CTRL 4 -`define SPI_DEVIDE 5 +`define SPI_DIVIDE 5 `define SPI_SS 6 // diff --git a/usrp2/opencores/spi/rtl/verilog/spi_shift.v b/usrp2/opencores/spi/rtl/verilog/spi_shift.v index c8c73706b..ac3bb3f48 100644 --- a/usrp2/opencores/spi/rtl/verilog/spi_shift.v +++ b/usrp2/opencores/spi/rtl/verilog/spi_shift.v @@ -39,7 +39,6 @@ ////////////////////////////////////////////////////////////////////// `include "spi_defines.v" -`include "timescale.v" module spi_shift (clk, rst, latch, byte_sel, len, lsb, go, pos_edge, neg_edge, rx_negedge, tx_negedge, @@ -87,7 +86,7 @@ module spi_shift (clk, rst, latch, byte_sel, len, lsb, go, assign tx_clk = (tx_negedge ? neg_edge : pos_edge) && !last; // Character bit counter - always @(posedge clk or posedge rst) + always @(posedge clk) begin if(rst) cnt <= {`SPI_CHAR_LEN_BITS+1{1'b0}}; @@ -101,7 +100,7 @@ module spi_shift (clk, rst, latch, byte_sel, len, lsb, go, end // Transfer in progress - always @(posedge clk or posedge rst) + always @(posedge clk) begin if(rst) tip <= 1'b0; @@ -112,7 +111,7 @@ module spi_shift (clk, rst, latch, byte_sel, len, lsb, go, end // Sending bits to the line - always @(posedge clk or posedge rst) + always @(posedge clk) begin if (rst) s_out <= 1'b0; @@ -121,7 +120,7 @@ module spi_shift (clk, rst, latch, byte_sel, len, lsb, go, end // Receiving bits from the line - always @(posedge clk or posedge rst) + always @(posedge clk) begin if (rst) data <= {`SPI_MAX_CHAR{1'b0}}; diff --git a/usrp2/opencores/spi/rtl/verilog/spi_top.v b/usrp2/opencores/spi/rtl/verilog/spi_top.v index 071aeefca..8289449a9 100644 --- a/usrp2/opencores/spi/rtl/verilog/spi_top.v +++ b/usrp2/opencores/spi/rtl/verilog/spi_top.v @@ -1,3 +1,6 @@ + +// Modified 2010 by Matt Ettus to remove old verilog style + ////////////////////////////////////////////////////////////////////// //// //// //// spi_top.v //// @@ -40,7 +43,6 @@ `include "spi_defines.v" -`include "timescale.v" module spi_top ( @@ -99,7 +101,7 @@ module spi_top wire last_bit; // marks last character bit // Address decoder - assign spi_divider_sel = wb_cyc_i & wb_stb_i & (wb_adr_i[`SPI_OFS_BITS] == `SPI_DEVIDE); + assign spi_divider_sel = wb_cyc_i & wb_stb_i & (wb_adr_i[`SPI_OFS_BITS] == `SPI_DIVIDE); assign spi_ctrl_sel = wb_cyc_i & wb_stb_i & (wb_adr_i[`SPI_OFS_BITS] == `SPI_CTRL); assign spi_tx_sel[0] = wb_cyc_i & wb_stb_i & (wb_adr_i[`SPI_OFS_BITS] == `SPI_TX_0); assign spi_tx_sel[1] = wb_cyc_i & wb_stb_i & (wb_adr_i[`SPI_OFS_BITS] == `SPI_TX_1); @@ -130,14 +132,14 @@ module spi_top `endif `endif `SPI_CTRL: wb_dat = {{32-`SPI_CTRL_BIT_NB{1'b0}}, ctrl}; - `SPI_DEVIDE: wb_dat = {{32-`SPI_DIVIDER_LEN{1'b0}}, divider}; + `SPI_DIVIDE: wb_dat = {{32-`SPI_DIVIDER_LEN{1'b0}}, divider}; `SPI_SS: wb_dat = {{32-`SPI_SS_NB{1'b0}}, ss}; default: wb_dat = 32'bx; endcase end // Wb data out - always @(posedge wb_clk_i or posedge wb_rst_i) + always @(posedge wb_clk_i) begin if (wb_rst_i) wb_dat_o <= 32'b0; @@ -146,7 +148,7 @@ module spi_top end // Wb acknowledge - always @(posedge wb_clk_i or posedge wb_rst_i) + always @(posedge wb_clk_i) begin if (wb_rst_i) wb_ack_o <= 1'b0; @@ -158,7 +160,7 @@ module spi_top assign wb_err_o = 1'b0; // Interrupt - always @(posedge wb_clk_i or posedge wb_rst_i) + always @(posedge wb_clk_i) begin if (wb_rst_i) wb_int_o <= 1'b0; @@ -169,7 +171,7 @@ module spi_top end // Divider register - always @(posedge wb_clk_i or posedge wb_rst_i) + always @(posedge wb_clk_i) begin if (wb_rst_i) divider <= {`SPI_DIVIDER_LEN{1'b0}}; @@ -207,7 +209,7 @@ module spi_top end // Ctrl register - always @(posedge wb_clk_i or posedge wb_rst_i) + always @(posedge wb_clk_i) begin if (wb_rst_i) ctrl <= {`SPI_CTRL_BIT_NB{1'b0}}; @@ -231,7 +233,7 @@ module spi_top assign ass = ctrl[`SPI_CTRL_ASS]; // Slave select register - always @(posedge wb_clk_i or posedge wb_rst_i) + always @(posedge wb_clk_i) begin if (wb_rst_i) ss <= {`SPI_SS_NB{1'b0}}; diff --git a/usrp2/opencores/spi/rtl/verilog/timescale.v b/usrp2/opencores/spi/rtl/verilog/timescale.v deleted file mode 100644 index 60d4ecbd1..000000000 --- a/usrp2/opencores/spi/rtl/verilog/timescale.v +++ /dev/null @@ -1,2 +0,0 @@ -`timescale 1ns / 10ps - -- cgit v1.2.3 From b9e715983eaa625f65f1ac4d18c7fbc9e5ace4cd Mon Sep 17 00:00:00 2001 From: Matt Ettus Date: Fri, 26 Mar 2010 17:12:07 -0700 Subject: connect up the 16 bit spi core --- usrp2/top/u1e/Makefile | 3 +-- usrp2/top/u1e/u1e_core.v | 6 +++--- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/usrp2/top/u1e/Makefile b/usrp2/top/u1e/Makefile index 3412e227d..2b78b21bd 100644 --- a/usrp2/top/u1e/Makefile +++ b/usrp2/top/u1e/Makefile @@ -137,8 +137,7 @@ opencores/simple_pic/rtl/simple_pic.v \ opencores/spi/rtl/verilog/spi_clgen.v \ opencores/spi/rtl/verilog/spi_defines.v \ opencores/spi/rtl/verilog/spi_shift.v \ -opencores/spi/rtl/verilog/spi_top.v \ -opencores/spi/rtl/verilog/timescale.v \ +opencores/spi/rtl/verilog/spi_top16.v \ sdr_lib/acc.v \ sdr_lib/add2.v \ sdr_lib/add2_and_round.v \ diff --git a/usrp2/top/u1e/u1e_core.v b/usrp2/top/u1e/u1e_core.v index 4f0227dfd..f2415d7e1 100644 --- a/usrp2/top/u1e/u1e_core.v +++ b/usrp2/top/u1e/u1e_core.v @@ -203,9 +203,9 @@ module u1e_core // ///////////////////////////////////////////////////////////////////////////////////// // Slave 2, SPI - spi_top shared_spi - (.wb_clk_i(wb_clk),.wb_rst_i(wb_rst),.wb_adr_i(s2_adr[4:0]),.wb_dat_i(s2_dat_o), - .wb_dat_o(s2_dat_i),.wb_sel_i(s2_sel),.wb_we_i(s2_we),.wb_stb_i(s2_stb), + spi_top16 shared_spi + (.wb_clk_i(wb_clk),.wb_rst_i(wb_rst),.wb_adr_i(s2_adr[4:0]),.wb_dat_i(s2_dat_mosi), + .wb_dat_o(s2_dat_miso),.wb_sel_i(s2_sel),.wb_we_i(s2_we),.wb_stb_i(s2_stb), .wb_cyc_i(s2_cyc),.wb_ack_o(s2_ack),.wb_err_o(),.wb_int_o(spi_int), .ss_pad_o(sen), .sclk_pad_o(sclk), .mosi_pad_o(mosi), .miso_pad_i(miso) ); -- cgit v1.2.3 From cce4104964c1e1930f85dbb0bb8b8f33086bd75e Mon Sep 17 00:00:00 2001 From: Matt Ettus Date: Sat, 27 Mar 2010 09:20:50 -0700 Subject: 16 bit wide spi core --- usrp2/opencores/spi/rtl/verilog/spi_top16.v | 182 ++++++++++++++++++++++++++++ 1 file changed, 182 insertions(+) create mode 100644 usrp2/opencores/spi/rtl/verilog/spi_top16.v diff --git a/usrp2/opencores/spi/rtl/verilog/spi_top16.v b/usrp2/opencores/spi/rtl/verilog/spi_top16.v new file mode 100644 index 000000000..ee808a8ab --- /dev/null +++ b/usrp2/opencores/spi/rtl/verilog/spi_top16.v @@ -0,0 +1,182 @@ + +// Modified 2010 by Matt Ettus to remove old verilog style and +// allow 16-bit operation + +////////////////////////////////////////////////////////////////////// +//// //// +//// spi_top.v //// +//// //// +//// This file is part of the SPI IP core project //// +//// http://www.opencores.org/projects/spi/ //// +//// //// +//// Author(s): //// +//// - Simon Srot (simons@opencores.org) //// +//// //// +//// All additional information is avaliable in the Readme.txt //// +//// file. //// +//// //// +////////////////////////////////////////////////////////////////////// +//// //// +//// Copyright (C) 2002 Authors //// +//// //// +//// This source file may be used and distributed without //// +//// restriction provided that this copyright statement is not //// +//// removed from the file and that any derivative work contains //// +//// the original copyright notice and the associated disclaimer. //// +//// //// +//// This source file 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 source is distributed in the hope that 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 source; if not, download it //// +//// from http://www.opencores.org/lgpl.shtml //// +//// //// +////////////////////////////////////////////////////////////////////// + + +`include "spi_defines.v" + +module spi_top16 + (input wb_clk_i, input wb_rst_i, + input [4:0] wb_adr_i, + input [15:0] wb_dat_i, + output reg [15:0] wb_dat_o, + input [1:0] wb_sel_i, + input wb_we_i, input wb_stb_i, input wb_cyc_i, + output reg wb_ack_o, output wb_err_o, output reg wb_int_o, + + // SPI signals + output [15:0] ss_pad_o, output sclk_pad_o, output mosi_pad_o, input miso_pad_i); + + // Internal signals + reg [15:0] divider; // Divider register + reg [`SPI_CTRL_BIT_NB-1:0] ctrl; // Control and status register + reg [15:0] ss; // Slave select register + reg [31:0] wb_dat; // wb data out + wire [31:0] rx; // Rx register + wire rx_negedge; // miso is sampled on negative edge + wire tx_negedge; // mosi is driven on negative edge + wire [`SPI_CHAR_LEN_BITS-1:0] char_len; // char len + wire go; // go + wire lsb; // lsb first on line + wire ie; // interrupt enable + wire ass; // automatic slave select + wire spi_divider_sel; // divider register select + wire spi_ctrl_sel; // ctrl register select + wire [3:0] spi_tx_sel; // tx_l register select + wire spi_ss_sel; // ss register select + wire tip; // transfer in progress + wire pos_edge; // recognize posedge of sclk + wire neg_edge; // recognize negedge of sclk + wire last_bit; // marks last character bit + + // Address decoder + assign spi_divider_sel = wb_cyc_i & wb_stb_i & (wb_adr_i[4:2] == `SPI_DIVIDE); + assign spi_ctrl_sel = wb_cyc_i & wb_stb_i & (wb_adr_i[4:2] == `SPI_CTRL); + assign spi_tx_sel[0] = wb_cyc_i & wb_stb_i & (wb_adr_i[4:2] == `SPI_TX_0); + assign spi_tx_sel[1] = wb_cyc_i & wb_stb_i & (wb_adr_i[4:2] == `SPI_TX_1); + assign spi_tx_sel[2] = wb_cyc_i & wb_stb_i & (wb_adr_i[4:2] == `SPI_TX_2); + assign spi_tx_sel[3] = wb_cyc_i & wb_stb_i & (wb_adr_i[4:2] == `SPI_TX_3); + assign spi_ss_sel = wb_cyc_i & wb_stb_i & (wb_adr_i[4:2] == `SPI_SS); + + always @(wb_adr_i or rx or ctrl or divider or ss) + case (wb_adr_i[4:2]) + `SPI_RX_0: wb_dat = rx[31:0]; + `SPI_CTRL: wb_dat = {{32-`SPI_CTRL_BIT_NB{1'b0}}, ctrl}; + `SPI_DIVIDE: wb_dat = {16'b0, divider}; + `SPI_SS: wb_dat = {16'b0, ss}; + default : wb_dat = 32'd0; + endcase // case (wb_adr_i[4:2]) + + always @(posedge wb_clk_i) + if (wb_rst_i) + wb_dat_o <= 32'b0; + else + wb_dat_o <= wb_adr_i[1] ? wb_dat[31:16] : wb_dat[15:0]; + + always @(posedge wb_clk_i) + if (wb_rst_i) + wb_ack_o <= 1'b0; + else + wb_ack_o <= wb_cyc_i & wb_stb_i & ~wb_ack_o; + + assign wb_err_o = 1'b0; + + // Interrupt + always @(posedge wb_clk_i) + if (wb_rst_i) + wb_int_o <= 1'b0; + else if (ie && tip && last_bit && pos_edge) + wb_int_o <= 1'b1; + else if (wb_ack_o) + wb_int_o <= 1'b0; + + // Divider register + always @(posedge wb_clk_i) + if (wb_rst_i) + divider <= 16'b0; + else if (spi_divider_sel && wb_we_i && !tip && ~wb_adr_i[1]) + divider <= wb_dat_i; + + // Ctrl register + always @(posedge wb_clk_i) + if (wb_rst_i) + ctrl <= {`SPI_CTRL_BIT_NB{1'b0}}; + else if(spi_ctrl_sel && wb_we_i && !tip && ~wb_adr_i[1]) + begin + if (wb_sel_i[0]) + ctrl[7:0] <= wb_dat_i[7:0] | {7'b0, ctrl[0]}; + if (wb_sel_i[1]) + ctrl[`SPI_CTRL_BIT_NB-1:8] <= wb_dat_i[`SPI_CTRL_BIT_NB-1:8]; + end + else if(tip && last_bit && pos_edge) + ctrl[`SPI_CTRL_GO] <= 1'b0; + + assign rx_negedge = ctrl[`SPI_CTRL_RX_NEGEDGE]; + assign tx_negedge = ctrl[`SPI_CTRL_TX_NEGEDGE]; + assign go = ctrl[`SPI_CTRL_GO]; + assign char_len = ctrl[`SPI_CTRL_CHAR_LEN]; + assign lsb = ctrl[`SPI_CTRL_LSB]; + assign ie = ctrl[`SPI_CTRL_IE]; + assign ass = ctrl[`SPI_CTRL_ASS]; + + // Slave select register + always @(posedge wb_clk_i) + if (wb_rst_i) + ss <= 16'b0; + else if(spi_ss_sel && wb_we_i && !tip & ~wb_adr_i[1]) + begin + if (wb_sel_i[0]) + ss[7:0] <= wb_dat_i[7:0]; + if (wb_sel_i[1]) + ss[15:8] <= wb_dat_i[15:8]; + end + + assign ss_pad_o = ~((ss & {16{tip & ass}}) | (ss & {16{!ass}})); + + spi_clgen clgen (.clk_in(wb_clk_i), .rst(wb_rst_i), .go(go), .enable(tip), .last_clk(last_bit), + .divider(divider[`SPI_DIVIDER_LEN-1:0]), .clk_out(sclk_pad_o), .pos_edge(pos_edge), + .neg_edge(neg_edge)); + + wire [3:0] new_sels = { (wb_adr_i[1] & wb_sel_i[1]), (wb_adr_i[1] & wb_sel_i[0]), + (~wb_adr_i[1] & wb_sel_i[1]), (~wb_adr_i[1] & wb_sel_i[0]) }; + + + spi_shift shift (.clk(wb_clk_i), .rst(wb_rst_i), .len(char_len[`SPI_CHAR_LEN_BITS-1:0]), + .latch(spi_tx_sel[3:0] & {4{wb_we_i}}), .byte_sel(new_sels), .lsb(lsb), + .go(go), .pos_edge(pos_edge), .neg_edge(neg_edge), + .rx_negedge(rx_negedge), .tx_negedge(tx_negedge), + .tip(tip), .last(last_bit), + .p_in({wb_dat_i,wb_dat_i}), .p_out(rx), + .s_clk(sclk_pad_o), .s_in(miso_pad_i), .s_out(mosi_pad_o)); + +endmodule // spi_top16 -- cgit v1.2.3 From 52c8d239ac4b2c448a15b7cc2e2cadf6f296c3e0 Mon Sep 17 00:00:00 2001 From: Matt Ettus Date: Thu, 1 Apr 2010 17:05:50 -0700 Subject: added 16-bit wide atr controller settings_bus_16 now handles variable address window sizes split ctrl of nsgpio into ctrl (selector) and debug bits --- usrp2/control_lib/atr_controller16.v | 60 ++++++++++++++++++++++++++++ usrp2/control_lib/nsgpio16LE.v | 23 +++++------ usrp2/control_lib/settings_bus_16LE.v | 4 +- usrp2/top/u1e/Makefile | 2 +- usrp2/top/u1e/u1e_core.v | 75 ++++++++++++++++++++--------------- 5 files changed, 117 insertions(+), 47 deletions(-) create mode 100644 usrp2/control_lib/atr_controller16.v diff --git a/usrp2/control_lib/atr_controller16.v b/usrp2/control_lib/atr_controller16.v new file mode 100644 index 000000000..3d8b5b1e9 --- /dev/null +++ b/usrp2/control_lib/atr_controller16.v @@ -0,0 +1,60 @@ + +// Automatic transmit/receive switching of control pins to daughterboards +// Store everything in registers for now, but could use a RAM for more +// complex state machines in the future + +module atr_controller16 + (input clk_i, input rst_i, + input [5:0] adr_i, input [1:0] sel_i, input [15:0] dat_i, output reg [15:0] dat_o, + input we_i, input stb_i, input cyc_i, output reg ack_o, + input run_rx, input run_tx, input [31:0] master_time, + output [31:0] ctrl_lines); + + reg [3:0] state; + reg [31:0] atr_ram [0:15]; // DP distributed RAM + + wire [3:0] sel_int = { (sel_i[1] & adr_i[1]), (sel_i[0] & adr_i[1]), + (sel_i[1] & ~adr_i[1]), (sel_i[0] & ~adr_i[1]) }; + + // WB Interface + always @(posedge clk_i) + if(we_i & stb_i & cyc_i) + begin + if(sel_int[3]) + atr_ram[adr_i[5:2]][31:24] <= dat_i[15:8]; + if(sel_int[2]) + atr_ram[adr_i[5:2]][23:16] <= dat_i[7:0]; + if(sel_int[1]) + atr_ram[adr_i[5:2]][15:8] <= dat_i[15:8]; + if(sel_int[0]) + atr_ram[adr_i[5:2]][7:0] <= dat_i[7:0]; + end // if (we_i & stb_i & cyc_i) + + always @(posedge clk_i) + dat_o <= adr_i[1] ? atr_ram[adr_i[5:2]][31:16] : atr_ram[adr_i[5:2]][15:0]; + + always @(posedge clk_i) + ack_o <= stb_i & cyc_i & ~ack_o; + + // Control side of DP RAM + assign ctrl_lines = atr_ram[state]; + + // Put a more complex state machine with time delays and multiple states here + // if daughterboard requires more complex sequencing + localparam ATR_IDLE = 4'd0; + localparam ATR_TX = 4'd1; + localparam ATR_RX = 4'd2; + localparam ATR_FULL_DUPLEX = 4'd3; + + always @(posedge clk_i) + if(rst_i) + state <= ATR_IDLE; + else + case ({run_rx,run_tx}) + 2'b00 : state <= ATR_IDLE; + 2'b01 : state <= ATR_TX; + 2'b10 : state <= ATR_RX; + 2'b11 : state <= ATR_FULL_DUPLEX; + endcase // case({run_rx,run_tx}) + +endmodule // atr_controller16 diff --git a/usrp2/control_lib/nsgpio16LE.v b/usrp2/control_lib/nsgpio16LE.v index 6847bb4a9..d6d7dcf56 100644 --- a/usrp2/control_lib/nsgpio16LE.v +++ b/usrp2/control_lib/nsgpio16LE.v @@ -43,10 +43,7 @@ module nsgpio16LE inout [31:0] gpio ); - reg [63:0] ctrl; - reg [31:0] line; - reg [31:0] lgpio; // LatchedGPIO pins - reg [31:0] ddr; + reg [31:0] ctrl, line, ddr, dbg, lgpio; wire wb_acc = cyc_i & stb_i; // WISHBONE access wire wb_wr = wb_acc & we_i; // WISHBONE write access @@ -54,8 +51,10 @@ module nsgpio16LE always @(posedge clk_i or posedge rst_i) if (rst_i) begin - ctrl <= 64'h0; - line <= 0; + ctrl <= 32'h0; + line <= 32'h0; + ddr <= 32'h0; + dbg <= 32'h0; end else if (wb_wr) case( adr_i[3:1] ) @@ -72,9 +71,9 @@ module nsgpio16LE 3'b101 : ctrl[31:16] <= dat_i; 3'b110 : - ctrl[47:32] <= dat_i; + dbg[15:0] <= dat_i; 3'b111 : - ctrl[63:48] <= dat_i; + dbg[31:16] <= dat_i; endcase // case ( adr_i[3:1] ) always @(posedge clk_i) @@ -92,9 +91,9 @@ module nsgpio16LE 3'b101 : dat_o <= ctrl[31:16]; 3'b110 : - dat_o <= ctrl[47:32]; + dat_o <= dbg[15:0]; 3'b111 : - dat_o <= ctrl[63:48]; + dat_o <= dbg[31:16]; endcase // case (adr_i[3:1]) @@ -114,8 +113,8 @@ module nsgpio16LE always @(ctrl or line or debug_1 or debug_0 or atr) for(n=0;n<32;n=n+1) - igpio[n] <= ddr[n] ? (ctrl[2*n+1] ? (ctrl[2*n] ? debug_1[n] : debug_0[n]) : - (ctrl[2*n] ? atr[n] : line[n]) ) + igpio[n] <= ddr[n] ? (dbg[n] ? (ctrl[n] ? debug_1[n] : debug_0[n]) : + (ctrl[n] ? atr[n] : line[n]) ) : 1'bz; assign gpio = igpio; diff --git a/usrp2/control_lib/settings_bus_16LE.v b/usrp2/control_lib/settings_bus_16LE.v index fbef9b1c9..76061e9e0 100644 --- a/usrp2/control_lib/settings_bus_16LE.v +++ b/usrp2/control_lib/settings_bus_16LE.v @@ -5,7 +5,7 @@ // The setting regs are strobed when the high 16 bits are written module settings_bus_16LE - #(parameter AWIDTH=16) + #(parameter AWIDTH=16, RWIDTH=8) (input wb_clk, input wb_rst, input [AWIDTH-1:0] wb_adr_i, @@ -28,7 +28,7 @@ module settings_bus_16LE end else if(wb_we_i & wb_stb_i) begin - addr <= wb_adr_i[9:2]; + addr <= wb_adr_i[RWIDTH+1:2]; // Zero pad high bits if(wb_adr_i[1]) begin stb_int <= 1'b1; // We now have both halves diff --git a/usrp2/top/u1e/Makefile b/usrp2/top/u1e/Makefile index 2b78b21bd..a0f921485 100644 --- a/usrp2/top/u1e/Makefile +++ b/usrp2/top/u1e/Makefile @@ -54,7 +54,7 @@ simulator "ISE Simulator (VHDL/Verilog)" \ export SOURCE_ROOT := ../../../ export SOURCES := \ control_lib/CRC16_D16.v \ -control_lib/atr_controller.v \ +control_lib/atr_controller16.v \ control_lib/bin2gray.v \ control_lib/dcache.v \ control_lib/decoder_3_8.v \ diff --git a/usrp2/top/u1e/u1e_core.v b/usrp2/top/u1e/u1e_core.v index f2415d7e1..e692cbc3d 100644 --- a/usrp2/top/u1e/u1e_core.v +++ b/usrp2/top/u1e/u1e_core.v @@ -147,48 +147,52 @@ module u1e_core .sf_dat_o(sf_dat_mosi),.sf_adr_o(sf_adr),.sf_sel_o(sf_sel),.sf_we_o(sf_we),.sf_cyc_o(sf_cyc),.sf_stb_o(sf_stb), .sf_dat_i(sf_dat_miso),.sf_ack_i(sf_ack),.sf_err_i(0),.sf_rty_i(0) ); - assign s6_ack = 0; assign s7_ack = 0; + assign s7_ack = 0; assign s8_ack = 0; assign s9_ack = 0; assign sa_ack = 0; assign sb_ack = 0; assign sc_ack = 0; assign sd_ack = 0; assign se_ack = 0; assign sf_ack = 0; // ///////////////////////////////////////////////////////////////////////////////////// // Slave 0, Misc LEDs, Switches, controls - reg [15:0] reg_fast, reg_slow; - localparam REG_FAST = 7'd4; - localparam REG_SWITCHES = 7'd6; - localparam REG_GPIOS = 7'd8; - localparam REG_CGEN_ST = 7'd9; - localparam REG_CGEN_CTRL = 7'd10; + reg [15:0] reg_leds, reg_cgen_ctrl, reg_test; - reg [3:0] reg_gpios; - - always @(posedge wb_clk) - if(s0_cyc & s0_stb & s0_we & (s0_adr[6:0] == REG_FAST)) - reg_fast <= s0_dat_mosi; - - always @(posedge wb_clk) - if(s0_cyc & s0_stb & s0_we & (s0_adr[6:0] == REG_GPIOS)) - reg_gpios <= s0_dat_mosi; - - reg [1:0] reg_cgen_ctrls; + localparam REG_LEDS = 7'd0; // out + localparam REG_SWITCHES = 7'd2; // in + localparam REG_CGEN_CTRL = 7'd4; // out + localparam REG_CGEN_ST = 7'd6; // in + localparam REG_TEST = 7'd8; // out always @(posedge wb_clk) if(wb_rst) - reg_cgen_ctrls <= 2'b11; - else if(s0_cyc & s0_stb & s0_we & (s0_adr[6:0] == REG_CGEN_CTRL)) - reg_cgen_ctrls <= s0_dat_mosi; + begin + reg_leds <= 0; + reg_cgen_ctrl <= 2'b11; + reg_test <= 0; + end + else + if(s0_cyc & s0_stb & s0_we) + case(s0_adr[6:0]) + REG_LEDS : + reg_leds <= s0_dat_mosi; + REG_CGEN_CTRL : + reg_cgen_ctrl <= s0_dat_mosi; + REG_TEST : + reg_test <= s0_dat_mosi; + endcase // case (s0_adr[6:0]) - assign {cgen_sync_b, cgen_ref_sel} = reg_cgen_ctrls; + assign { debug_led[2],debug_led[0],debug_led[1] } = reg_leds; // LEDs are arranged funny on board + assign { cgen_sync_b, cgen_ref_sel } = reg_cgen_ctrl; + assign { rx_overrun, tx_undderun } = reg_test; - assign s0_dat_miso = (s0_adr[6:0] == REG_FAST) ? reg_fast : + assign s0_dat_miso = (s0_adr[6:0] == REG_LEDS) ? reg_leds : (s0_adr[6:0] == REG_SWITCHES) ? {5'b0,debug_pb[2:0],dip_sw[7:0]} : + (s0_adr[6:0] == REG_CGEN_CTRL) ? reg_cgen_ctrl : (s0_adr[6:0] == REG_CGEN_ST) ? {13'b0,cgen_st_status,cgen_st_ld,cgen_st_refmon} : + (s0_adr[6:0] == REG_TEST) ? reg_test : 16'hBEEF; + assign s0_ack = s0_stb & s0_cyc; - assign { rx_overrun, tx_underrun } = reg_gpios; - // ///////////////////////////////////////////////////////////////////////////////////// // Slave 1, UART // depth of 3 is 128 entries, clkdiv of 278 gives 230.4k with a 64 MHz system clock @@ -196,7 +200,7 @@ module u1e_core simple_uart #(.TXDEPTH(3),.RXDEPTH(3), .CLKDIV_DEFAULT(278)) uart (.clk_i(wb_clk),.rst_i(wb_rst), .we_i(s1_we),.stb_i(s1_stb),.cyc_i(s1_cyc),.ack_o(s1_ack), - .adr_i(s1_adr[4:2]),.dat_i({16'd0,s1_dat_mosi}),.dat_o(s1_dat_miso), + .adr_i(s1_adr[3:1]),.dat_i({16'd0,s1_dat_mosi}),.dat_o(s1_dat_miso), .rx_int_o(),.tx_int_o(), .tx_o(debug_txd),.rx_i(debug_rxd),.baud_o()); @@ -246,16 +250,25 @@ module u1e_core wire [7:0] set_addr; wire [31:0] set_data; wire set_stb; - - settings_bus_16LE settings_bus_16LE + + // only have 32 regs, 32 bits each with current setup... + settings_bus_16LE #(.AWIDTH(11),.RWIDTH(11-4-2)) settings_bus_16LE (.wb_clk(wb_clk),.wb_rst(wb_rst),.wb_adr_i(s5_adr),.wb_dat_i(s5_dat_mosi), .wb_stb_i(s5_stb),.wb_we_i(s5_we),.wb_ack_o(s5_ack), .strobe(set_stb),.addr(set_addr),.data(set_data) ); - // ///////////////////////////////////////////////////////////////////////////////////// - // Debug Pins + // ///////////////////////////////////////////////////////////////////////// + // ATR Controller -- Slave #6 + + atr_controller16 atr_controller16 + (.clk_i(wb_clk), .rst_i(wb_rst), + .adr_i(s6_adr), .sel_i(s6_sel), .dat_i(s6_dat_mosi), .dat_o(s6_dat_miso), + .we_i(s6_we), .stb_i(s6_stb), .cyc_i(s6_cyc), .ack_o(s6_ack), + .run_rx(), .run_tx(), .master_time(0), .ctrl_lines(atr_lines)); + // ///////////////////////////////////////////////////////////////////////////////////// // Debug circuitry + assign debug_clk = { EM_CLK, clk_fpga }; assign debug = { { rx_have_data, tx_have_space, EM_NCS6, EM_NCS4, EM_NWE, EM_NOE, EM_A[10:1] }, { EM_D } }; @@ -263,6 +276,4 @@ module u1e_core assign debug_gpio_0 = { debug_gpmc }; assign debug_gpio_1 = { debug_txd, debug_rxd }; - assign { debug_led[2],debug_led[0],debug_led[1] } = reg_fast; // LEDs are arranged funny on board - endmodule // u1e_core -- cgit v1.2.3 From 4aca5e04d026977272e35db4e0c1ccaac5da555f Mon Sep 17 00:00:00 2001 From: Matt Ettus Date: Mon, 12 Apr 2010 19:06:04 -0700 Subject: split out gpmc to wishbone interface to make gpmc top level cleaner --- usrp2/gpmc/gpmc_wb.v | 57 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 usrp2/gpmc/gpmc_wb.v diff --git a/usrp2/gpmc/gpmc_wb.v b/usrp2/gpmc/gpmc_wb.v new file mode 100644 index 000000000..64f6a1c00 --- /dev/null +++ b/usrp2/gpmc/gpmc_wb.v @@ -0,0 +1,57 @@ + + +module gpmc_wb + (input EM_CLK, inout [15:0] EM_D, input [10:1] EM_A, input [1:0] EM_NBE, + input EM_NCS, input EM_NWE, input EM_NOE, + + input wb_clk, input wb_rst, + output reg [10:0] wb_adr_o, output reg [15:0] wb_dat_mosi, input [15:0] wb_dat_miso, + output reg [1:0] wb_sel_o, output wb_cyc_o, output reg wb_stb_o, output reg wb_we_o, input wb_ack_i); + + // //////////////////////////////////////////// + // Control Path, Wishbone bus bridge (wb master) + reg [1:0] cs_del, we_del, oe_del; + + // Synchronize the async control signals + always @(posedge wb_clk) + begin + cs_del <= { cs_del[0], EM_NCS }; + we_del <= { we_del[0], EM_NWE }; + oe_del <= { oe_del[0], EM_NOE }; + end + + always @(posedge wb_clk) + if(cs_del == 2'b10) // Falling Edge + wb_adr_o <= { EM_A, 1'b0 }; + + always @(posedge wb_clk) + if(we_del == 2'b10) // Falling Edge + begin + wb_dat_mosi <= EM_D; + wb_sel_o <= ~EM_NBE; + end + + reg [15:0] EM_D_hold; + + always @(posedge wb_clk) + if(wb_ack_i) + EM_D_hold <= wb_dat_miso; + + assign EM_D = wb_ack_i ? wb_dat_miso : EM_D_hold; + + assign wb_cyc_o = wb_stb_o; + + always @(posedge wb_clk) + if(~cs_del[0] & (we_del == 2'b10) ) + wb_we_o <= 1; + else if(wb_ack_i) // Turn off we when done. Could also use we_del[0], others... + wb_we_o <= 0; + + // FIXME should this look at cs_del[1]? + always @(posedge wb_clk) + if(~cs_del[0] & ((we_del == 2'b10) | (oe_del == 2'b10))) + wb_stb_o <= 1; + else if(wb_ack_i) + wb_stb_o <= 0; + +endmodule // gpmc_wb -- cgit v1.2.3 From 45b9ec4c39a2f4a3087b2f637f70818fd0efb94e Mon Sep 17 00:00:00 2001 From: Matt Ettus Date: Mon, 12 Apr 2010 19:06:49 -0700 Subject: replaced ram interface with a fifo interface. still need to do rx side --- usrp2/gpmc/gpmc.v | 133 ++++++++++++++++++---------------------------- usrp2/gpmc/gpmc_to_fifo.v | 58 ++++++++++++++++++++ usrp2/top/u1e/u1e_core.v | 46 +++------------- 3 files changed, 117 insertions(+), 120 deletions(-) create mode 100644 usrp2/gpmc/gpmc_to_fifo.v diff --git a/usrp2/gpmc/gpmc.v b/usrp2/gpmc/gpmc.v index cf1357232..2715414b3 100644 --- a/usrp2/gpmc/gpmc.v +++ b/usrp2/gpmc/gpmc.v @@ -10,13 +10,14 @@ module gpmc // Wishbone signals input wb_clk, input wb_rst, - output reg [10:0] wb_adr_o, output reg [15:0] wb_dat_mosi, input [15:0] wb_dat_miso, - output reg [1:0] wb_sel_o, output wb_cyc_o, output reg wb_stb_o, output reg wb_we_o, input wb_ack_i, + output [10:0] wb_adr_o, output [15:0] wb_dat_mosi, input [15:0] wb_dat_miso, + output [1:0] wb_sel_o, output wb_cyc_o, output wb_stb_o, output wb_we_o, input wb_ack_i, - // RAM Interface signals - input ram_clk, - input read_en, input [8:0] read_addr, output [31:0] read_data, output read_ready, input read_done, - input write_en, input [8:0] write_addr, input [31:0] write_data, output write_ready, input write_done, + // FIFO interface + input fifo_clk, input fifo_rst, + output [35:0] tx_data_o, output tx_src_rdy_o, input tx_dst_rdy_i, + input [35:0] rx_data_i, input rx_src_rdy_i, output rx_dst_rdy_o, + output [31:0] debug ); @@ -26,94 +27,64 @@ module gpmc assign EM_D = ~EM_output_enable ? 16'bz : ~EM_NCS4 ? EM_D_ram : EM_D_wb; - // CS4 is RAM_2PORT for high-speed data - // Writes go into one RAM, reads come from the other - + // CS4 is RAM_2PORT for DATA PATH (high-speed data) + // Writes go into one RAM, reads come from the other + // CS6 is for CONTROL PATH (wishbone) // //////////////////////////////////////////// - // Write path - wire read_sel_in, write_sel_in, clear_in; - wire write_done_in; - - edge_sync #(.POSEDGE(0)) - edge_sync_wdi(.clk(wb_clk), .rst(wb_rst), - .sig(~EM_NCS4 & ~EM_NWE & (EM_A == 10'h3FF)), .trig(write_done_in)); - - ram_2port_mixed_width buffer_in - (.clk16(wb_clk), .en16(~EM_NCS4), .we16(~EM_NWE), .addr16({write_sel_in,EM_A}), .di16(EM_D), .do16(), - .clk32(ram_clk), .en32(read_en), .we32(0), .addr32({read_sel_in,read_addr}), .di32(0), .do32(read_data)); + // TX Data Path - dbsm dbsm_in(.clk(wb_clk), .reset(wb_rst), .clear(clear_in), - .read_sel(read_sel_in), .read_ready(read_ready), .read_done(read_done), - .write_sel(write_sel_in), .write_ready(tx_have_space), .write_done(write_done_in)); + wire [17:0] tx18_data, tx18b_data; + wire tx18_src_rdy, tx18_dst_rdy, tx18b_src_rdy, tx18b_dst_rdy; + wire [15:0] tx_fifo_space, tx_frame_len; + assign tx_frame_len = 10; + + gpmc_to_fifo gpmc_to_fifo + (.EM_CLK(EM_CLK), .EM_D(EM_D), .EM_NBE(EM_NBE), .EM_NCS(EM_NCS4), .EM_NWE(EM_NWE), + .fifo_clk(fifo_clk), .fifo_rst(fifo_rst), + .data_o(tx18_data), .src_rdy_o(tx18_src_rdy), .dst_rdy_i(tx18_dst_rdy), + .frame_len(tx_frame_len), .fifo_space(tx_fifo_space), .fifo_ready(tx_have_space)); + fifo_cascade #(.WIDTH(18), .SIZE(10)) tx_fifo + (.clk(fifo_clk), .reset(fifo_rst), .clear(0), + .datain(tx18_data), .src_rdy_i(tx18_src_rdy), .dst_rdy_o(tx18_dst_rdy), .space(tx_fifo_space), + .dataout(tx18b_data), .src_rdy_o(tx18b_src_rdy), .dst_rdy_i(tx18b_dst_rdy)); + + fifo19_to_fifo36 f19_to_f36 + (.clk(fifo_clk), .reset(fifo_rst), .clear(0), + .f19_datain({1'b0,tx18b_data}), .f19_src_rdy_i(tx18b_src_rdy), .f19_dst_rdy_o(tx18b_dst_rdy), + .f36_dataout(tx_data_o), .f36_src_rdy_o(tx_src_rdy_o), .f36_dst_rdy_i(tx_dst_rdy_i)); + // //////////////////////////////////////////// - // Read path - wire read_sel_out, write_sel_out, clear_out; - wire read_done_out; + // RX Data Path + wire read_sel_rx, write_sel_rx, clear_rx; + wire read_done_rx; edge_sync #(.POSEDGE(0)) - edge_sync_rdo(.clk(wb_clk), .rst(wb_rst), - .sig(~EM_NCS4 & ~EM_NOE & (EM_A == 10'h3FF)), .trig(read_done_out)); + edge_sync_rx(.clk(wb_clk), .rst(wb_rst), + .sig(~EM_NCS4 & ~EM_NOE & (EM_A == 10'h3FF)), .trig(read_done_rx)); - ram_2port_mixed_width buffer_out - (.clk16(wb_clk), .en16(~EM_NCS4), .we16(0), .addr16({read_sel_out,EM_A}), .di16(0), .do16(EM_D_ram), - .clk32(ram_clk), .en32(write_en), .we32(write_en), .addr32({write_sel_out,write_addr}), .di32(write_data), .do32()); - - dbsm dbsm_out(.clk(wb_clk), .reset(wb_rst), .clear(clear_out), - .read_sel(read_sel_out), .read_ready(rx_have_data), .read_done(read_done_out), - .write_sel(write_sel_out), .write_ready(write_ready), .write_done(write_done)); + ram_2port_mixed_width buffer_rx + (.clk16(wb_clk), .en16(~EM_NCS4), .we16(0), .addr16({read_sel_rx,EM_A}), .di16(0), .do16(EM_D_ram), + .clk32(ram_clk), .en32(write_en), .we32(write_en), .addr32({write_sel_rx,write_addr}), .di32(write_data), .do32()); + dbsm dbsm_rx(.clk(wb_clk), .reset(wb_rst), .clear(clear_rx), + .read_sel(read_sel_rx), .read_ready(rx_have_data), .read_done(read_done_rx), + .write_sel(write_sel_rx), .write_ready(write_ready), .write_done(write_done)); - assign debug = { { 2'b00, write_done_in, write_sel_in, read_en, read_sel_in, read_ready, read_done}, - { 2'b00, read_sel_out, write_en, write_sel_out, read_done_out, write_ready, write_done }, - { 8'd0 }, - { 8'd0 } }; + // //////////////////////////////////////////// + // Control path on CS6 - // CS6 is Control, Wishbone bus bridge (wb master) - // Sync version - reg [1:0] cs_del, we_del, oe_del; - - // Synchronize the async control signals - always @(posedge wb_clk) - begin - cs_del <= { cs_del[0], EM_NCS6 }; - we_del <= { we_del[0], EM_NWE }; - oe_del <= { oe_del[0], EM_NOE }; - end - - always @(posedge wb_clk) - if(cs_del == 2'b10) // Falling Edge - wb_adr_o <= { EM_A, 1'b0 }; - - always @(posedge wb_clk) - if(we_del == 2'b10) // Falling Edge - begin - wb_dat_mosi <= EM_D; - wb_sel_o <= ~EM_NBE; - end - - reg [15:0] EM_D_wb_reg; - always @(posedge wb_clk) - if(wb_ack_i) - EM_D_wb_reg <= wb_dat_miso; - - assign EM_D_wb = wb_ack_i ? wb_dat_miso : EM_D_wb_reg; + gpmc_wb gpmc_wb + (.EM_CLK(EM_CLK), .EM_D(EM_D_wb), .EM_A(EM_A), .EM_NBE(EM_NBE), + .EM_NCS(EM_NCS6), .EM_NWE(EM_NWE), .EM_NOE(EM_NOE), + .wb_clk(wb_clk), .wb_rst(wb_rst), + .wb_adr_o(wb_adr_o), .wb_dat_mosi(wb_dat_mosi), .wb_dat_miso(wb_dat_miso), + .wb_sel_o(wb_sel_o), .wb_cyc_o(wb_cyc_o), .wb_stb_o(wb_stb_o), .wb_we_o(wb_we_o), + .wb_ack_i(wb_ack_i) ); - assign wb_cyc_o = wb_stb_o; - - always @(posedge wb_clk) - if(~cs_del[0] & (we_del == 2'b10) ) - wb_we_o <= 1; - else if(wb_ack_i) // Turn off we when done. Could also use we_del[0], others... - wb_we_o <= 0; - - always @(posedge wb_clk) - if(~cs_del[0] & ((we_del == 2'b10) | (oe_del == 2'b10))) - wb_stb_o <= 1; - else if(wb_ack_i) - wb_stb_o <= 0; + assign debug = 0; endmodule // gpmc diff --git a/usrp2/gpmc/gpmc_to_fifo.v b/usrp2/gpmc/gpmc_to_fifo.v new file mode 100644 index 000000000..5d499494f --- /dev/null +++ b/usrp2/gpmc/gpmc_to_fifo.v @@ -0,0 +1,58 @@ + +module gpmc_to_fifo + (input EM_CLK, input [15:0] EM_D, input [1:0] EM_NBE, + input EM_NCS, input EM_NWE, + + input fifo_clk, input fifo_rst, + output reg [17:0] data_o, output reg src_rdy_o, input dst_rdy_i, + + input [15:0] frame_len, input [15:0] fifo_space, output fifo_ready); + + // Synchronize the async control signals + reg [1:0] cs_del, we_del; + always @(posedge fifo_clk) + if(fifo_rst) + begin + cs_del <= 2'b11; + we_del <= 2'b11; + end + else + begin + cs_del <= { cs_del[0], EM_NCS }; + we_del <= { we_del[0], EM_NWE }; + end + + wire do_write = (~cs_del[0] & (we_del == 2'b10)); + wire first_write = (counter == 0); + wire last_write = ((counter+1) == frame_len); + + always @(posedge fifo_clk) + if(do_write) + begin + data_o[15:0] <= EM_D; + data_o[16] <= first_write; + data_o[17] <= last_write; + // no byte writes data_o[18] <= |EM_NBE; // mark half full if either is not enabled FIXME + end + + always @(posedge fifo_clk) + if(fifo_rst) + src_rdy_o <= 0; + else if(do_write) + src_rdy_o <= 1; + else + src_rdy_o <= 0; // Assume it was taken + + reg [10:0] counter; + always @(posedge fifo_clk) + if(fifo_rst) + counter <= 0; + else if(do_write) + if(last_write) + counter <= 0; + else + counter <= counter + 1; + + assign fifo_ready = first_write & (fifo_space > frame_len); + +endmodule // gpmc_to_fifo diff --git a/usrp2/top/u1e/u1e_core.v b/usrp2/top/u1e/u1e_core.v index e692cbc3d..e5e5285bd 100644 --- a/usrp2/top/u1e/u1e_core.v +++ b/usrp2/top/u1e/u1e_core.v @@ -30,15 +30,8 @@ module u1e_core wire [sw-1:0] m0_sel; wire m0_cyc, m0_stb, m0_we, m0_ack, m0_err, m0_rty; - // FIFO buffers - wire [31:0] read_data, write_data; - wire [8:0] read_addr, write_addr; - reg [8:0] addr; - - wire read_done, write_done, read_en, write_en, read_ready, write_ready; - wire [31:0] debug_gpmc; - + gpmc gpmc (.EM_CLK(EM_CLK), .EM_D(EM_D), .EM_A(EM_A), .EM_NBE(EM_NBE), .EM_WAIT0(EM_WAIT0), .EM_NCS4(EM_NCS4), .EM_NCS6(EM_NCS6), .EM_NWE(EM_NWE), .EM_NOE(EM_NOE), @@ -50,37 +43,12 @@ module u1e_core .wb_sel_o(m0_sel), .wb_cyc_o(m0_cyc), .wb_stb_o(m0_stb), .wb_we_o(m0_we), .wb_ack_i(m0_ack), - .ram_clk(wb_clk), - .read_en(read_en), .read_addr(read_addr), .read_data(read_data), - .read_ready(read_ready), .read_done(read_done), - .write_en(write_en), .write_addr(write_addr), .write_data(write_data), - .write_ready(write_ready), .write_done(write_done), + .fifo_clk(wb_clk), .fifo_rst(wb_rst), + .tx_data_o(), .tx_src_rdy_o(), .tx_dst_rdy_i(0), + .rx_data_i(0), .rx_src_rdy_i(0), .rx_dst_rdy_o(), + .debug(debug_gpmc)); - // Loopback - assign write_data = read_data; - - reg [10:0] counter; - assign write_addr = counter[10:2]; - assign read_addr = counter[10:2]; - - assign read_done = (counter == 11'h7FF); - assign write_done = (counter == 11'h7FF); - - always @(posedge wb_clk) - if(wb_rst) - counter <= 0; - else - if(counter == 0) - counter <= write_ready & read_ready; - else if(counter == 11'h7FF) - counter <= 0; - else - counter <= counter + 1; - - assign read_en = (counter[1:0] == 1); - assign write_en = (counter[1:0] == 2); - // ///////////////////////////////////////////////////////////////////////////////////// // Wishbone Intercon, single master @@ -182,7 +150,7 @@ module u1e_core assign { debug_led[2],debug_led[0],debug_led[1] } = reg_leds; // LEDs are arranged funny on board assign { cgen_sync_b, cgen_ref_sel } = reg_cgen_ctrl; - assign { rx_overrun, tx_undderun } = reg_test; + assign { rx_overrun, tx_underrun } = reg_test; assign s0_dat_miso = (s0_adr[6:0] == REG_LEDS) ? reg_leds : (s0_adr[6:0] == REG_SWITCHES) ? {5'b0,debug_pb[2:0],dip_sw[7:0]} : @@ -210,7 +178,7 @@ module u1e_core spi_top16 shared_spi (.wb_clk_i(wb_clk),.wb_rst_i(wb_rst),.wb_adr_i(s2_adr[4:0]),.wb_dat_i(s2_dat_mosi), .wb_dat_o(s2_dat_miso),.wb_sel_i(s2_sel),.wb_we_i(s2_we),.wb_stb_i(s2_stb), - .wb_cyc_i(s2_cyc),.wb_ack_o(s2_ack),.wb_err_o(),.wb_int_o(spi_int), + .wb_cyc_i(s2_cyc),.wb_ack_o(s2_ack),.wb_err_o(),.wb_int_o(), .ss_pad_o(sen), .sclk_pad_o(sclk), .mosi_pad_o(mosi), .miso_pad_i(miso) ); // ///////////////////////////////////////////////////////////////////////// -- cgit v1.2.3 From f95bf4d8d94511d26a5bb1f52823f8ffd5f637fe Mon Sep 17 00:00:00 2001 From: Matt Ettus Date: Mon, 12 Apr 2010 19:20:22 -0700 Subject: lengthened delay between cycles, added more transactions on the data bus --- usrp2/models/gpmc_model.v | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/usrp2/models/gpmc_model.v b/usrp2/models/gpmc_model.v index 3424671bd..6066ede6e 100644 --- a/usrp2/models/gpmc_model.v +++ b/usrp2/models/gpmc_model.v @@ -41,7 +41,7 @@ module gpmc_model EM_NCS6 <= 1; //#1.5; EM_NWE <= 1; - #6; + #60; EM_A <= 10'bz; EM_D_int <= 16'bz; end @@ -82,7 +82,12 @@ module gpmc_model GPMC_Write(0,38,16'h5678); GPMC_Write(0,40,16'h9abc); GPMC_Write(0,11'h2F4,16'hF00D); - GPMC_Write(0,11'h7FE,16'hF00D); + GPMC_Write(0,11'h7FE,16'hDEAD); + GPMC_Write(0,11'h7FE,16'hDEAD); + GPMC_Write(0,11'h7FE,16'hDEAD); + GPMC_Write(0,11'h7FE,16'hDEAD); + GPMC_Write(0,11'h7FE,16'hDEAD); + GPMC_Write(0,11'h7FE,16'hDEAD); #100000; $finish; end -- cgit v1.2.3 From 19d476df81cdf7a51b871154510be8f7c575ffde Mon Sep 17 00:00:00 2001 From: Matt Ettus Date: Tue, 13 Apr 2010 17:33:16 -0700 Subject: minor changes to get it to synthesize --- usrp2/gpmc/gpmc_to_fifo.v | 2 +- usrp2/top/u1e/Makefile | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/usrp2/gpmc/gpmc_to_fifo.v b/usrp2/gpmc/gpmc_to_fifo.v index 5d499494f..267804469 100644 --- a/usrp2/gpmc/gpmc_to_fifo.v +++ b/usrp2/gpmc/gpmc_to_fifo.v @@ -8,6 +8,7 @@ module gpmc_to_fifo input [15:0] frame_len, input [15:0] fifo_space, output fifo_ready); + reg [10:0] counter; // Synchronize the async control signals reg [1:0] cs_del, we_del; always @(posedge fifo_clk) @@ -43,7 +44,6 @@ module gpmc_to_fifo else src_rdy_o <= 0; // Assume it was taken - reg [10:0] counter; always @(posedge fifo_clk) if(fifo_rst) counter <= 0; diff --git a/usrp2/top/u1e/Makefile b/usrp2/top/u1e/Makefile index a0f921485..1cb56d7a9 100644 --- a/usrp2/top/u1e/Makefile +++ b/usrp2/top/u1e/Makefile @@ -109,6 +109,7 @@ control_lib/newfifo/fifo_short.v \ control_lib/newfifo/fifo_long.v \ control_lib/newfifo/fifo_cascade.v \ control_lib/newfifo/fifo36_to_ll8.v \ +control_lib/newfifo/fifo19_to_fifo36.v \ control_lib/longfifo.v \ control_lib/shortfifo.v \ control_lib/medfifo.v \ @@ -177,6 +178,8 @@ timing/timer.v \ gpmc/gpmc.v \ gpmc/edge_sync.v \ gpmc/dbsm.v \ +gpmc/gpmc_to_fifo.v \ +gpmc/gpmc_wb.v \ top/u1e/u1e_core.v \ top/u1e/u1e.ucf \ top/u1e/u1e.v -- cgit v1.2.3 From 8cef80c8ebb9b59f1fe65971c9066fd832ab2504 Mon Sep 17 00:00:00 2001 From: Matt Ettus Date: Wed, 14 Apr 2010 18:01:28 -0700 Subject: probably won't be using this, and it hasn't been tested --- usrp2/gpmc/ram_to_fifo.v | 46 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 usrp2/gpmc/ram_to_fifo.v diff --git a/usrp2/gpmc/ram_to_fifo.v b/usrp2/gpmc/ram_to_fifo.v new file mode 100644 index 000000000..8549dcc35 --- /dev/null +++ b/usrp2/gpmc/ram_to_fifo.v @@ -0,0 +1,46 @@ + + +module ram_to_fifo + (input clk, input reset, + input [10:0] read_length, // From the dbsm (?) + output read_en, output reg [8:0] read_addr, input [31:0] read_data, input read_ready, output read_done, + output [35:0] data_o, output src_rdy_o, input dst_rdy_i); + + // read_length/2 = number of 32 bit lines, numbered 0 through read_length/2-1 + wire [8:0] last_line = (read_length[10:1]-1); + + reg read_phase, sop; + + assign read_en = (read_phase == 0) | dst_rdy_i; + assign src_rdy_o = (read_phase == 1); + + always @(posedge clk) + if(reset) + begin + read_addr <= 0; + read_phase <= 0; + sop <= 1; + end + else + if(read_phase == 0) + begin + read_addr <= read_ready; + read_phase <= read_ready; + end + else if(dst_rdy_i) + begin + sop <= 0; + if(read_addr == last_line) + begin + read_addr <= 0; + read_phase <= 0; + end + else + read_addr <= read_addr + 1; + end + + assign read_done = (read_phase == 1) & (read_addr == last_line) & dst_rdy_i; + wire eop = (read_addr == last_line); + assign data_o = { 2'b00, eop, sop, read_data }; + +endmodule // ram_to_fifo -- cgit v1.2.3 From 17fc80cb82309879dd2b1dc03681058dd432327b Mon Sep 17 00:00:00 2001 From: Matt Ettus Date: Wed, 14 Apr 2010 18:02:29 -0700 Subject: added in a loopback fifo --- usrp2/top/u1e/u1e_core.v | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/usrp2/top/u1e/u1e_core.v b/usrp2/top/u1e/u1e_core.v index e5e5285bd..7df7b0a48 100644 --- a/usrp2/top/u1e/u1e_core.v +++ b/usrp2/top/u1e/u1e_core.v @@ -32,6 +32,9 @@ module u1e_core wire [31:0] debug_gpmc; + wire [35:0] tx_data, rx_data; + wire tx_src_rdy, tx_dst_rdy, rx_src_rdy, rx_dst_rdy; + gpmc gpmc (.EM_CLK(EM_CLK), .EM_D(EM_D), .EM_A(EM_A), .EM_NBE(EM_NBE), .EM_WAIT0(EM_WAIT0), .EM_NCS4(EM_NCS4), .EM_NCS6(EM_NCS6), .EM_NWE(EM_NWE), .EM_NOE(EM_NOE), @@ -44,12 +47,16 @@ module u1e_core .wb_ack_i(m0_ack), .fifo_clk(wb_clk), .fifo_rst(wb_rst), - .tx_data_o(), .tx_src_rdy_o(), .tx_dst_rdy_i(0), - .rx_data_i(0), .rx_src_rdy_i(0), .rx_dst_rdy_o(), + .tx_data_o(tx_data), .tx_src_rdy_o(tx_src_rdy), .tx_dst_rdy_i(tx_dst_rdy), + .rx_data_i(rx_data), .rx_src_rdy_i(rx_src_rdy), .rx_dst_rdy_o(rx_dst_rdy), .debug(debug_gpmc)); - - + + fifo_cascade #(.WIDTH(36), .SIZE(9)) loopback_fifo + (.clk(wb_clk), .reset(wb_rst), .clear(0), + .datain(tx_data), .src_rdy_i(tx_src_rdy), .dst_rdy_o(tx_dst_rdy), + .dataout(rx_data), .src_rdy_o(rx_src_rdy), .dst_rdy_i(rx_dst_rdy)); + // ///////////////////////////////////////////////////////////////////////////////////// // Wishbone Intercon, single master wire [dw-1:0] s0_dat_mosi, s1_dat_mosi, s0_dat_miso, s1_dat_miso, s2_dat_mosi, s3_dat_mosi, s2_dat_miso, s3_dat_miso, -- cgit v1.2.3 From fc54a55f97171f5714c370d566f31429ce112e89 Mon Sep 17 00:00:00 2001 From: Matt Ettus Date: Wed, 14 Apr 2010 18:07:00 -0700 Subject: make timing diagrams for bus transactions. Still need to do reads --- usrp2/gpmc/.gitignore | 2 ++ usrp2/gpmc/burst_data_write.txt | 16 ++++++++++++++++ usrp2/gpmc/make_timing_diag | 6 ++++++ usrp2/gpmc/single_data_read.txt | 12 ++++++++++++ usrp2/gpmc/single_data_write.txt | 10 ++++++++++ 5 files changed, 46 insertions(+) create mode 100644 usrp2/gpmc/.gitignore create mode 100644 usrp2/gpmc/burst_data_write.txt create mode 100755 usrp2/gpmc/make_timing_diag create mode 100644 usrp2/gpmc/single_data_read.txt create mode 100644 usrp2/gpmc/single_data_write.txt diff --git a/usrp2/gpmc/.gitignore b/usrp2/gpmc/.gitignore new file mode 100644 index 000000000..3e14fa4f7 --- /dev/null +++ b/usrp2/gpmc/.gitignore @@ -0,0 +1,2 @@ +*.gif + diff --git a/usrp2/gpmc/burst_data_write.txt b/usrp2/gpmc/burst_data_write.txt new file mode 100644 index 000000000..3b5dfc785 --- /dev/null +++ b/usrp2/gpmc/burst_data_write.txt @@ -0,0 +1,16 @@ +# OMAP burst writes to FPGA + +CLK=0,nWE=1,nCS=1,nOE=1,DATA=Z. +CLK=1. +CLK=0,nWE=0,nCS=0,DATA=WR_DATA1. +CLK=1. +CLK=0,nWE=0,nCS=0,DATA=WR_DATA2. +CLK=1. +CLK=0,nWE=0,nCS=0,DATA=WR_DATA3. +CLK=1. +CLK=0,nWE=0,nCS=0,DATA=WR_DATA4. +CLK=1. +CLK=0,nWE=1,nCS=1,DATA=Z. +CLK=1. + + diff --git a/usrp2/gpmc/make_timing_diag b/usrp2/gpmc/make_timing_diag new file mode 100755 index 000000000..03166ad35 --- /dev/null +++ b/usrp2/gpmc/make_timing_diag @@ -0,0 +1,6 @@ +#!/bin/sh +drawtiming -o single_data_write.gif single_data_write.txt +drawtiming -o single_data_read.gif single_data_read.txt +drawtiming -o burst_data_write.gif burst_data_write.txt +#drawtiming -o burst_data_read.gif burst_data_read.txt + diff --git a/usrp2/gpmc/single_data_read.txt b/usrp2/gpmc/single_data_read.txt new file mode 100644 index 000000000..1dc0e3a78 --- /dev/null +++ b/usrp2/gpmc/single_data_read.txt @@ -0,0 +1,12 @@ +# OMAP writes to FPGA +# initialize the signals +CLK=0,nWE=1,nCS=1,nOE=1,DATA=Z. +CLK=1. +CLK=0,nOE=0,nCS=0,DATA=RD_DATA. +CLK=1. +CLK=0. +CLK=1. +CLK=0,nOE=1,nCS=1,DATA=Z. +CLK=1. + + diff --git a/usrp2/gpmc/single_data_write.txt b/usrp2/gpmc/single_data_write.txt new file mode 100644 index 000000000..287e3e2c1 --- /dev/null +++ b/usrp2/gpmc/single_data_write.txt @@ -0,0 +1,10 @@ +# OMAP writes to FPGA +# initialize the signals +CLK=0,nWE=1,nCS=1,nOE=1,DATA=Z. +CLK=1. +CLK=0,nWE=0,nCS=0,DATA=WR_DATA. +CLK=1. +CLK=0,nWE=1,nCS=1,DATA=Z. +CLK=1. + + -- cgit v1.2.3 From 204c591cd478958b4e2ddea4c61d3908d9520bbe Mon Sep 17 00:00:00 2001 From: Matt Ettus Date: Wed, 14 Apr 2010 18:13:49 -0700 Subject: renamed to async. Will be building a sync version for GPMC_CLK --- usrp2/gpmc/gpmc_to_fifo.v | 58 ----------------------------------------- usrp2/gpmc/gpmc_to_fifo_async.v | 58 +++++++++++++++++++++++++++++++++++++++++ usrp2/top/u1e/Makefile | 2 +- 3 files changed, 59 insertions(+), 59 deletions(-) delete mode 100644 usrp2/gpmc/gpmc_to_fifo.v create mode 100644 usrp2/gpmc/gpmc_to_fifo_async.v diff --git a/usrp2/gpmc/gpmc_to_fifo.v b/usrp2/gpmc/gpmc_to_fifo.v deleted file mode 100644 index 267804469..000000000 --- a/usrp2/gpmc/gpmc_to_fifo.v +++ /dev/null @@ -1,58 +0,0 @@ - -module gpmc_to_fifo - (input EM_CLK, input [15:0] EM_D, input [1:0] EM_NBE, - input EM_NCS, input EM_NWE, - - input fifo_clk, input fifo_rst, - output reg [17:0] data_o, output reg src_rdy_o, input dst_rdy_i, - - input [15:0] frame_len, input [15:0] fifo_space, output fifo_ready); - - reg [10:0] counter; - // Synchronize the async control signals - reg [1:0] cs_del, we_del; - always @(posedge fifo_clk) - if(fifo_rst) - begin - cs_del <= 2'b11; - we_del <= 2'b11; - end - else - begin - cs_del <= { cs_del[0], EM_NCS }; - we_del <= { we_del[0], EM_NWE }; - end - - wire do_write = (~cs_del[0] & (we_del == 2'b10)); - wire first_write = (counter == 0); - wire last_write = ((counter+1) == frame_len); - - always @(posedge fifo_clk) - if(do_write) - begin - data_o[15:0] <= EM_D; - data_o[16] <= first_write; - data_o[17] <= last_write; - // no byte writes data_o[18] <= |EM_NBE; // mark half full if either is not enabled FIXME - end - - always @(posedge fifo_clk) - if(fifo_rst) - src_rdy_o <= 0; - else if(do_write) - src_rdy_o <= 1; - else - src_rdy_o <= 0; // Assume it was taken - - always @(posedge fifo_clk) - if(fifo_rst) - counter <= 0; - else if(do_write) - if(last_write) - counter <= 0; - else - counter <= counter + 1; - - assign fifo_ready = first_write & (fifo_space > frame_len); - -endmodule // gpmc_to_fifo diff --git a/usrp2/gpmc/gpmc_to_fifo_async.v b/usrp2/gpmc/gpmc_to_fifo_async.v new file mode 100644 index 000000000..c47d69d7d --- /dev/null +++ b/usrp2/gpmc/gpmc_to_fifo_async.v @@ -0,0 +1,58 @@ + +module gpmc_to_fifo_async + (input EM_CLK, input [15:0] EM_D, input [1:0] EM_NBE, + input EM_NCS, input EM_NWE, + + input fifo_clk, input fifo_rst, + output reg [17:0] data_o, output reg src_rdy_o, input dst_rdy_i, + + input [15:0] frame_len, input [15:0] fifo_space, output fifo_ready); + + reg [10:0] counter; + // Synchronize the async control signals + reg [1:0] cs_del, we_del; + always @(posedge fifo_clk) + if(fifo_rst) + begin + cs_del <= 2'b11; + we_del <= 2'b11; + end + else + begin + cs_del <= { cs_del[0], EM_NCS }; + we_del <= { we_del[0], EM_NWE }; + end + + wire do_write = (~cs_del[0] & (we_del == 2'b10)); + wire first_write = (counter == 0); + wire last_write = ((counter+1) == frame_len); + + always @(posedge fifo_clk) + if(do_write) + begin + data_o[15:0] <= EM_D; + data_o[16] <= first_write; + data_o[17] <= last_write; + // no byte writes data_o[18] <= |EM_NBE; // mark half full if either is not enabled FIXME + end + + always @(posedge fifo_clk) + if(fifo_rst) + src_rdy_o <= 0; + else if(do_write) + src_rdy_o <= 1; + else + src_rdy_o <= 0; // Assume it was taken + + always @(posedge fifo_clk) + if(fifo_rst) + counter <= 0; + else if(do_write) + if(last_write) + counter <= 0; + else + counter <= counter + 1; + + assign fifo_ready = first_write & (fifo_space > frame_len); + +endmodule // gpmc_to_fifo_async diff --git a/usrp2/top/u1e/Makefile b/usrp2/top/u1e/Makefile index 1cb56d7a9..ca4d9ce89 100644 --- a/usrp2/top/u1e/Makefile +++ b/usrp2/top/u1e/Makefile @@ -178,7 +178,7 @@ timing/timer.v \ gpmc/gpmc.v \ gpmc/edge_sync.v \ gpmc/dbsm.v \ -gpmc/gpmc_to_fifo.v \ +gpmc/gpmc_to_fifo_async.v \ gpmc/gpmc_wb.v \ top/u1e/u1e_core.v \ top/u1e/u1e.ucf \ -- cgit v1.2.3 From 108109e649397147ecf6f5d6b82bdb3d5b852539 Mon Sep 17 00:00:00 2001 From: Matt Ettus Date: Wed, 14 Apr 2010 19:14:46 -0700 Subject: more progress on synchronous interface --- usrp2/gpmc/gpmc.v | 61 ++++++++++++++++++++++++----------------- usrp2/gpmc/gpmc_to_fifo_async.v | 2 +- usrp2/gpmc/gpmc_to_fifo_sync.v | 57 ++++++++++++++++++++++++++++++++++++++ usrp2/top/u1e/Makefile | 1 + 4 files changed, 95 insertions(+), 26 deletions(-) create mode 100644 usrp2/gpmc/gpmc_to_fifo_sync.v diff --git a/usrp2/gpmc/gpmc.v b/usrp2/gpmc/gpmc.v index 2715414b3..d6a685bba 100644 --- a/usrp2/gpmc/gpmc.v +++ b/usrp2/gpmc/gpmc.v @@ -4,7 +4,8 @@ module gpmc (// GPMC signals input EM_CLK, inout [15:0] EM_D, input [10:1] EM_A, input [1:0] EM_NBE, input EM_WAIT0, input EM_NCS4, input EM_NCS6, input EM_NWE, input EM_NOE, - + output bus_error, + // GPIOs for FIFO signalling output rx_have_data, output tx_have_space, @@ -17,15 +18,15 @@ module gpmc input fifo_clk, input fifo_rst, output [35:0] tx_data_o, output tx_src_rdy_o, input tx_dst_rdy_i, input [35:0] rx_data_i, input rx_src_rdy_i, output rx_dst_rdy_o, - + output [31:0] debug ); wire EM_output_enable = (~EM_NOE & (~EM_NCS4 | ~EM_NCS6)); - wire [15:0] EM_D_ram; + wire [15:0] EM_D_fifo; wire [15:0] EM_D_wb; - assign EM_D = ~EM_output_enable ? 16'bz : ~EM_NCS4 ? EM_D_ram : EM_D_wb; + assign EM_D = ~EM_output_enable ? 16'bz : ~EM_NCS4 ? EM_D_fifo : EM_D_wb; // CS4 is RAM_2PORT for DATA PATH (high-speed data) // Writes go into one RAM, reads come from the other @@ -37,19 +38,22 @@ module gpmc wire [17:0] tx18_data, tx18b_data; wire tx18_src_rdy, tx18_dst_rdy, tx18b_src_rdy, tx18b_dst_rdy; wire [15:0] tx_fifo_space, tx_frame_len; - + assign tx_frame_len = 10; + wire arst; - gpmc_to_fifo gpmc_to_fifo - (.EM_CLK(EM_CLK), .EM_D(EM_D), .EM_NBE(EM_NBE), .EM_NCS(EM_NCS4), .EM_NWE(EM_NWE), - .fifo_clk(fifo_clk), .fifo_rst(fifo_rst), + gpmc_to_fifo_sync gpmc_to_fifo_sync + (.arst(arst), + .EM_CLK(EM_CLK), .EM_D(EM_D), .EM_NBE(EM_NBE), .EM_NCS(EM_NCS4), .EM_NWE(EM_NWE), .data_o(tx18_data), .src_rdy_o(tx18_src_rdy), .dst_rdy_i(tx18_dst_rdy), - .frame_len(tx_frame_len), .fifo_space(tx_fifo_space), .fifo_ready(tx_have_space)); + .frame_len(tx_frame_len), .fifo_space(tx_fifo_space), .fifo_ready(tx_have_space), + .bus_error(bus_error) ); - fifo_cascade #(.WIDTH(18), .SIZE(10)) tx_fifo - (.clk(fifo_clk), .reset(fifo_rst), .clear(0), - .datain(tx18_data), .src_rdy_i(tx18_src_rdy), .dst_rdy_o(tx18_dst_rdy), .space(tx_fifo_space), - .dataout(tx18b_data), .src_rdy_o(tx18b_src_rdy), .dst_rdy_i(tx18b_dst_rdy)); + fifo_2clock_cascade #(.WIDTH(18), .SIZE(10)) tx_fifo + (.wclk(EM_CLK), .datain(tx18_data), + .src_rdy_i(tx18_src_rdy), .dst_rdy_o(tx18_dst_rdy), .space(tx_fifo_space), + .rclk(fifo_clk), .dataout(tx18b_data), + .src_rdy_o(tx18b_src_rdy), .dst_rdy_i(tx18b_dst_rdy), .occupied(), .arst(arst)); fifo19_to_fifo36 f19_to_f36 (.clk(fifo_clk), .reset(fifo_rst), .clear(0), @@ -59,21 +63,28 @@ module gpmc // //////////////////////////////////////////// // RX Data Path - wire read_sel_rx, write_sel_rx, clear_rx; - wire read_done_rx; - - edge_sync #(.POSEDGE(0)) - edge_sync_rx(.clk(wb_clk), .rst(wb_rst), - .sig(~EM_NCS4 & ~EM_NOE & (EM_A == 10'h3FF)), .trig(read_done_rx)); + + wire [17:0] rx18_data, rx18b_data; + wire rx18_src_rdy, rx18_dst_rdy, rx18b_src_rdy, rx18b_dst_rdy; + wire [15:0] rx_fifo_space, rx_frame_len; - ram_2port_mixed_width buffer_rx - (.clk16(wb_clk), .en16(~EM_NCS4), .we16(0), .addr16({read_sel_rx,EM_A}), .di16(0), .do16(EM_D_ram), - .clk32(ram_clk), .en32(write_en), .we32(write_en), .addr32({write_sel_rx,write_addr}), .di32(write_data), .do32()); + fifo36_to_fifo18 f18_to_f36 + (.clk(fifo_clk), .reset(fifo_rst), .clear(0), + .f36_datain(rx_data_i), .f36_src_rdy_i(rx_src_rdy_i), .f36_dst_rdy_o(rx_dst_rdy_o), + .f18_dataout(rx18_data), .f18_src_rdy_o(rx18_src_rdy), .f18_dst_rdy_i(rx18_dst_rdy) ); - dbsm dbsm_rx(.clk(wb_clk), .reset(wb_rst), .clear(clear_rx), - .read_sel(read_sel_rx), .read_ready(rx_have_data), .read_done(read_done_rx), - .write_sel(write_sel_rx), .write_ready(write_ready), .write_done(write_done)); + fifo_2clock_cascade #(.WIDTH(18), .SIZE(10)) rx_fifo + (.wclk(fifo_clk), .datain(rx18_data), + .src_rdy_i(rx18_src_rdy), .dst_rdy_o(rx18_dst_rdy), .space(rx_fifo_space), + .rclk(EM_CLK), .dataout(rx18b_data), + .src_rdy_o(tx18b_src_rdy), .dst_rdy_i(tx18b_dst_rdy), .occupied(), .arst(arst)); + fifo_to_gpmc_sync fifo_to_gpmc_sync + (.arst(arst), + .data_i(tx18b_data), .src_rdy_i(tx18b_src_rdy), .dst_rdy_o(tx18b_dst_rdy), + .EM_CLK(EM_CLK), .EM_D(EM_D_fifo), .EM_NCS(EM_NCS4), .EM_NOE(EM_NOE), + .fifo_ready(rx_have_data) ); + // //////////////////////////////////////////// // Control path on CS6 diff --git a/usrp2/gpmc/gpmc_to_fifo_async.v b/usrp2/gpmc/gpmc_to_fifo_async.v index c47d69d7d..a8068022f 100644 --- a/usrp2/gpmc/gpmc_to_fifo_async.v +++ b/usrp2/gpmc/gpmc_to_fifo_async.v @@ -1,6 +1,6 @@ module gpmc_to_fifo_async - (input EM_CLK, input [15:0] EM_D, input [1:0] EM_NBE, + (input [15:0] EM_D, input [1:0] EM_NBE, input EM_NCS, input EM_NWE, input fifo_clk, input fifo_rst, diff --git a/usrp2/gpmc/gpmc_to_fifo_sync.v b/usrp2/gpmc/gpmc_to_fifo_sync.v new file mode 100644 index 000000000..688de0e17 --- /dev/null +++ b/usrp2/gpmc/gpmc_to_fifo_sync.v @@ -0,0 +1,57 @@ + +// Assumes a GPMC cycle with GPMC clock, as in the timing diagrams +// If a packet bigger or smaller than we are told is sent, behavior is undefined. +// If dst_rdy_i is low when we get data, behavior is undefined and we signal bus error. +// If there is a bus error, we should be reset + +module gpmc_to_fifo_sync + (input arst, + input EM_CLK, input [15:0] EM_D, input [1:0] EM_NBE, + input EM_NCS, input EM_NWE, + output reg [17:0] data_o, output reg src_rdy_o, input dst_rdy_i, + input [15:0] frame_len, input [15:0] fifo_space, output fifo_ready, + output reg bus_error); + + reg [10:0] counter; + wire first_write = (counter == 0); + wire last_write = ((counter+1) == frame_len); + wire do_write = ~EM_NCS & ~EM_NWE; + + always @(posedge EM_CLK or posedge arst) + if(arst) + data_o <= 0; + else if(do_write) + begin + data_o[15:0] <= EM_D; + data_o[16] <= first_write; + data_o[17] <= last_write; + // no byte writes data_o[18] <= |EM_NBE; // mark half full if either is not enabled FIXME + end + + always @(posedge EM_CLK or posedge arst) + if(arst) + src_rdy_o <= 0; + else if(do_write & ~bus_error) // Don't put junk in if there is a bus error + src_rdy_o <= 1; + else + src_rdy_o <= 0; // Assume it was taken, ignore dst_rdy_i + + always @(posedge EM_CLK or posedge arst) + if(arst) + counter <= 0; + else if(do_write) + if(last_write) + counter <= 0; + else + counter <= counter + 1; + + assign fifo_ready = first_write & (fifo_space > frame_len); + + always @(posedge EM_CLK or posedge arst) + if(arst) + bus_error <= 0; + else if(src_rdy_o & ~dst_rdy_i) + bus_error <= 1; + // must be reset to make the error go away + +endmodule // gpmc_to_fifo_sync diff --git a/usrp2/top/u1e/Makefile b/usrp2/top/u1e/Makefile index ca4d9ce89..057de64cf 100644 --- a/usrp2/top/u1e/Makefile +++ b/usrp2/top/u1e/Makefile @@ -179,6 +179,7 @@ gpmc/gpmc.v \ gpmc/edge_sync.v \ gpmc/dbsm.v \ gpmc/gpmc_to_fifo_async.v \ +gpmc/gpmc_to_fifo_sync.v \ gpmc/gpmc_wb.v \ top/u1e/u1e_core.v \ top/u1e/u1e.ucf \ -- cgit v1.2.3 From f89ed91930f5933c827726d17b8c5b0313b6c297 Mon Sep 17 00:00:00 2001 From: Matt Ettus Date: Wed, 14 Apr 2010 19:16:47 -0700 Subject: more sync progress. This is just a skeleton for now, with junk content --- usrp2/gpmc/fifo_to_gpmc_sync.v | 56 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 usrp2/gpmc/fifo_to_gpmc_sync.v diff --git a/usrp2/gpmc/fifo_to_gpmc_sync.v b/usrp2/gpmc/fifo_to_gpmc_sync.v new file mode 100644 index 000000000..647a507b4 --- /dev/null +++ b/usrp2/gpmc/fifo_to_gpmc_sync.v @@ -0,0 +1,56 @@ + +// Assumes a GPMC cycle with GPMC clock, as in the timing diagrams +// If a packet bigger or smaller than we are told is sent, behavior is undefined. +// If dst_rdy_i is low when we get data, behavior is undefined and we signal bus error. +// If there is a bus error, we should be reset + +module fifo_to_gpmc_sync + (input arst, + input [17:0] data_i, input src_rdy_i, output reg dst_rdy_o, + input EM_CLK, inout [15:0] EM_D, input EM_NCS, input EM_NOE, + output fifo_ready, + output reg bus_error); + + reg [10:0] counter; + wire first_write = (counter == 0); + wire last_write = ((counter+1) == frame_len); + wire do_write = ~EM_NCS & ~EM_NWE; + + always @(posedge EM_CLK or posedge arst) + if(arst) + data_o <= 0; + else if(do_write) + begin + data_o[15:0] <= EM_D; + data_o[16] <= first_write; + data_o[17] <= last_write; + // no byte writes data_o[18] <= |EM_NBE; // mark half full if either is not enabled FIXME + end + + always @(posedge EM_CLK or posedge arst) + if(arst) + src_rdy_o <= 0; + else if(do_write & ~bus_error) // Don't put junk in if there is a bus error + src_rdy_o <= 1; + else + src_rdy_o <= 0; // Assume it was taken, ignore dst_rdy_i + + always @(posedge EM_CLK or posedge arst) + if(arst) + counter <= 0; + else if(do_write) + if(last_write) + counter <= 0; + else + counter <= counter + 1; + + assign fifo_ready = first_write & (fifo_space > frame_len); + + always @(posedge EM_CLK or posedge arst) + if(arst) + bus_error <= 0; + else if(src_rdy_o & ~dst_rdy_i) + bus_error <= 1; + // must be reset to make the error go away + +endmodule // fifo_to_gpmc_sync -- cgit v1.2.3 From 7d00d3a7b93d53b2f60107f0e43645d35788cf2f Mon Sep 17 00:00:00 2001 From: Matt Ettus Date: Thu, 15 Apr 2010 12:52:18 -0700 Subject: handle all tri-state in the top level of gpmc --- usrp2/gpmc/gpmc.v | 6 +++--- usrp2/gpmc/gpmc_wb.v | 6 +++--- usrp2/top/u1e/Makefile | 2 ++ 3 files changed, 8 insertions(+), 6 deletions(-) diff --git a/usrp2/gpmc/gpmc.v b/usrp2/gpmc/gpmc.v index d6a685bba..93308a2d2 100644 --- a/usrp2/gpmc/gpmc.v +++ b/usrp2/gpmc/gpmc.v @@ -77,11 +77,11 @@ module gpmc (.wclk(fifo_clk), .datain(rx18_data), .src_rdy_i(rx18_src_rdy), .dst_rdy_o(rx18_dst_rdy), .space(rx_fifo_space), .rclk(EM_CLK), .dataout(rx18b_data), - .src_rdy_o(tx18b_src_rdy), .dst_rdy_i(tx18b_dst_rdy), .occupied(), .arst(arst)); + .src_rdy_o(rx18b_src_rdy), .dst_rdy_i(rx18b_dst_rdy), .occupied(), .arst(arst)); fifo_to_gpmc_sync fifo_to_gpmc_sync (.arst(arst), - .data_i(tx18b_data), .src_rdy_i(tx18b_src_rdy), .dst_rdy_o(tx18b_dst_rdy), + .data_i(rx18b_data), .src_rdy_i(rx18b_src_rdy), .dst_rdy_o(rx18b_dst_rdy), .EM_CLK(EM_CLK), .EM_D(EM_D_fifo), .EM_NCS(EM_NCS4), .EM_NOE(EM_NOE), .fifo_ready(rx_have_data) ); @@ -89,7 +89,7 @@ module gpmc // Control path on CS6 gpmc_wb gpmc_wb - (.EM_CLK(EM_CLK), .EM_D(EM_D_wb), .EM_A(EM_A), .EM_NBE(EM_NBE), + (.EM_CLK(EM_CLK), .EM_D_in(EM_D), .EM_D_out(EM_D_wb), .EM_A(EM_A), .EM_NBE(EM_NBE), .EM_NCS(EM_NCS6), .EM_NWE(EM_NWE), .EM_NOE(EM_NOE), .wb_clk(wb_clk), .wb_rst(wb_rst), .wb_adr_o(wb_adr_o), .wb_dat_mosi(wb_dat_mosi), .wb_dat_miso(wb_dat_miso), diff --git a/usrp2/gpmc/gpmc_wb.v b/usrp2/gpmc/gpmc_wb.v index 64f6a1c00..db6fbc6e9 100644 --- a/usrp2/gpmc/gpmc_wb.v +++ b/usrp2/gpmc/gpmc_wb.v @@ -1,7 +1,7 @@ module gpmc_wb - (input EM_CLK, inout [15:0] EM_D, input [10:1] EM_A, input [1:0] EM_NBE, + (input EM_CLK, input [15:0] EM_D_in, output [15:0] EM_D_out, input [10:1] EM_A, input [1:0] EM_NBE, input EM_NCS, input EM_NWE, input EM_NOE, input wb_clk, input wb_rst, @@ -27,7 +27,7 @@ module gpmc_wb always @(posedge wb_clk) if(we_del == 2'b10) // Falling Edge begin - wb_dat_mosi <= EM_D; + wb_dat_mosi <= EM_D_in; wb_sel_o <= ~EM_NBE; end @@ -37,7 +37,7 @@ module gpmc_wb if(wb_ack_i) EM_D_hold <= wb_dat_miso; - assign EM_D = wb_ack_i ? wb_dat_miso : EM_D_hold; + assign EM_D_out = wb_ack_i ? wb_dat_miso : EM_D_hold; assign wb_cyc_o = wb_stb_o; diff --git a/usrp2/top/u1e/Makefile b/usrp2/top/u1e/Makefile index 057de64cf..160e67894 100644 --- a/usrp2/top/u1e/Makefile +++ b/usrp2/top/u1e/Makefile @@ -109,6 +109,7 @@ control_lib/newfifo/fifo_short.v \ control_lib/newfifo/fifo_long.v \ control_lib/newfifo/fifo_cascade.v \ control_lib/newfifo/fifo36_to_ll8.v \ +control_lib/newfifo/fifo36_to_fifo18.v \ control_lib/newfifo/fifo19_to_fifo36.v \ control_lib/longfifo.v \ control_lib/shortfifo.v \ @@ -180,6 +181,7 @@ gpmc/edge_sync.v \ gpmc/dbsm.v \ gpmc/gpmc_to_fifo_async.v \ gpmc/gpmc_to_fifo_sync.v \ +gpmc/fifo_to_gpmc_sync.v \ gpmc/gpmc_wb.v \ top/u1e/u1e_core.v \ top/u1e/u1e.ucf \ -- cgit v1.2.3 From d7342b46abac60bf4e2811ac4798dc4e06b5844f Mon Sep 17 00:00:00 2001 From: Matt Ettus Date: Thu, 15 Apr 2010 14:51:41 -0700 Subject: synchronous and asynchronous gpmc models --- usrp2/models/gpmc_model.v | 95 ---------------------------------------- usrp2/models/gpmc_model_async.v | 95 ++++++++++++++++++++++++++++++++++++++++ usrp2/models/gpmc_model_sync.v | 97 +++++++++++++++++++++++++++++++++++++++++ usrp2/top/u1e/tb_u1e.v | 2 +- 4 files changed, 193 insertions(+), 96 deletions(-) delete mode 100644 usrp2/models/gpmc_model.v create mode 100644 usrp2/models/gpmc_model_async.v create mode 100644 usrp2/models/gpmc_model_sync.v diff --git a/usrp2/models/gpmc_model.v b/usrp2/models/gpmc_model.v deleted file mode 100644 index 6066ede6e..000000000 --- a/usrp2/models/gpmc_model.v +++ /dev/null @@ -1,95 +0,0 @@ - - -module gpmc_model - (output EM_CLK, inout [15:0] EM_D, output reg [10:1] EM_A, output reg [1:0] EM_NBE, - output reg EM_WAIT0, output reg EM_NCS4, output reg EM_NCS6, - output reg EM_NWE, output reg EM_NOE ); - - assign EM_CLK = 0; - reg [15:0] EM_D_int; - assign EM_D = EM_D_int; - - initial - begin - EM_A <= 10'bz; - EM_NBE <= 2'b11; - EM_NWE <= 1; - EM_NOE <= 1; - EM_NCS4 <= 1; - EM_NCS6 <= 1; - EM_D_int <= 16'bz; - EM_WAIT0 <= 0; // FIXME this is actually an input - end - - task GPMC_Write; - input ctrl; - input [10:0] addr; - input [15:0] data; - begin - #2.3; - EM_A <= addr[10:1]; - EM_D_int <= data; - #2.01; - if(ctrl) - EM_NCS6 <= 0; - else - EM_NCS4 <= 0; - #14; - EM_NWE <= 0; - #77.5; - EM_NCS4 <= 1; - EM_NCS6 <= 1; - //#1.5; - EM_NWE <= 1; - #60; - EM_A <= 10'bz; - EM_D_int <= 16'bz; - end - endtask // GPMC_Write - - task GPMC_Read; - input ctrl; - input [10:0] addr; - begin - #1.3; - EM_A <= addr[10:1]; - #3; - if(ctrl) - EM_NCS6 <= 0; - else - EM_NCS4 <= 0; - #14; - EM_NOE <= 0; - #77.5; - EM_NCS4 <= 1; - EM_NCS6 <= 1; - //#1.5; - $display("Data Read from GPMC: %X",EM_D); - EM_NOE <= 1; - #254; - EM_A <= 10'bz; - end - endtask // GPMC_Read - - initial - begin - #1000; - GPMC_Write(1,36,16'hF00D); - #1000; - GPMC_Read(1,36); - #1000; - GPMC_Write(0,36,16'h1234); - GPMC_Write(0,38,16'h5678); - GPMC_Write(0,40,16'h9abc); - GPMC_Write(0,11'h2F4,16'hF00D); - GPMC_Write(0,11'h7FE,16'hDEAD); - GPMC_Write(0,11'h7FE,16'hDEAD); - GPMC_Write(0,11'h7FE,16'hDEAD); - GPMC_Write(0,11'h7FE,16'hDEAD); - GPMC_Write(0,11'h7FE,16'hDEAD); - GPMC_Write(0,11'h7FE,16'hDEAD); - #100000; - $finish; - end - -endmodule // gpmc_model diff --git a/usrp2/models/gpmc_model_async.v b/usrp2/models/gpmc_model_async.v new file mode 100644 index 000000000..a63a5a8fd --- /dev/null +++ b/usrp2/models/gpmc_model_async.v @@ -0,0 +1,95 @@ + + +module gpmc_model_async + (output EM_CLK, inout [15:0] EM_D, output reg [10:1] EM_A, output reg [1:0] EM_NBE, + output reg EM_WAIT0, output reg EM_NCS4, output reg EM_NCS6, + output reg EM_NWE, output reg EM_NOE ); + + assign EM_CLK = 0; + reg [15:0] EM_D_int; + assign EM_D = EM_D_int; + + initial + begin + EM_A <= 10'bz; + EM_NBE <= 2'b11; + EM_NWE <= 1; + EM_NOE <= 1; + EM_NCS4 <= 1; + EM_NCS6 <= 1; + EM_D_int <= 16'bz; + EM_WAIT0 <= 0; // FIXME this is actually an input + end + + task GPMC_Write; + input ctrl; + input [10:0] addr; + input [15:0] data; + begin + #2.3; + EM_A <= addr[10:1]; + EM_D_int <= data; + #2.01; + if(ctrl) + EM_NCS6 <= 0; + else + EM_NCS4 <= 0; + #14; + EM_NWE <= 0; + #77.5; + EM_NCS4 <= 1; + EM_NCS6 <= 1; + //#1.5; + EM_NWE <= 1; + #60; + EM_A <= 10'bz; + EM_D_int <= 16'bz; + end + endtask // GPMC_Write + + task GPMC_Read; + input ctrl; + input [10:0] addr; + begin + #1.3; + EM_A <= addr[10:1]; + #3; + if(ctrl) + EM_NCS6 <= 0; + else + EM_NCS4 <= 0; + #14; + EM_NOE <= 0; + #77.5; + EM_NCS4 <= 1; + EM_NCS6 <= 1; + //#1.5; + $display("Data Read from GPMC: %X",EM_D); + EM_NOE <= 1; + #254; + EM_A <= 10'bz; + end + endtask // GPMC_Read + + initial + begin + #1000; + GPMC_Write(1,36,16'hF00D); + #1000; + GPMC_Read(1,36); + #1000; + GPMC_Write(0,36,16'h1234); + GPMC_Write(0,38,16'h5678); + GPMC_Write(0,40,16'h9abc); + GPMC_Write(0,11'h2F4,16'hF00D); + GPMC_Write(0,11'h7FE,16'hDEAD); + GPMC_Write(0,11'h7FE,16'hDEAD); + GPMC_Write(0,11'h7FE,16'hDEAD); + GPMC_Write(0,11'h7FE,16'hDEAD); + GPMC_Write(0,11'h7FE,16'hDEAD); + GPMC_Write(0,11'h7FE,16'hDEAD); + #100000; + $finish; + end + +endmodule // gpmc_model_async diff --git a/usrp2/models/gpmc_model_sync.v b/usrp2/models/gpmc_model_sync.v new file mode 100644 index 000000000..641720c15 --- /dev/null +++ b/usrp2/models/gpmc_model_sync.v @@ -0,0 +1,97 @@ + + +module gpmc_model_sync + (output reg EM_CLK, inout [15:0] EM_D, output reg [10:1] EM_A, output reg [1:0] EM_NBE, + output reg EM_WAIT0, output reg EM_NCS4, output reg EM_NCS6, + output reg EM_NWE, output reg EM_NOE ); + + reg [15:0] EM_D_int; + assign EM_D = EM_D_int; + + initial + begin + EM_CLK <= 0; + EM_A <= 10'bz; + EM_NBE <= 2'b11; + EM_NWE <= 1; + EM_NOE <= 1; + EM_NCS4 <= 1; + EM_NCS6 <= 1; + EM_D_int <= 16'bz; + EM_WAIT0 <= 0; // FIXME this is actually an input + end + + task GPMC_Write; + input ctrl; + input [10:0] addr; + input [15:0] data; + begin + EM_CLK <= 1; + #10; + EM_CLK <= 0; + EM_NWE <= 0; + if(ctrl) + EM_NCS6 <= 0; + else + EM_NCS4 <= 0; + EM_A <= addr[10:1]; + EM_D_int <= data; + #10; + EM_CLK <= 1; + #10; + EM_CLK <= 0; + EM_NWE <= 1; + EM_NCS4 <= 1; + EM_NCS6 <= 1; + EM_A <= 10'bz; + EM_D_int <= 16'bz; + #100; + end + endtask // GPMC_Write + + task GPMC_Read; + input ctrl; + input [10:0] addr; + begin + #1.3; + EM_A <= addr[10:1]; + #3; + if(ctrl) + EM_NCS6 <= 0; + else + EM_NCS4 <= 0; + #14; + EM_NOE <= 0; + #77.5; + EM_NCS4 <= 1; + EM_NCS6 <= 1; + //#1.5; + $display("Data Read from GPMC: %X",EM_D); + EM_NOE <= 1; + #254; + EM_A <= 10'bz; + end + endtask // GPMC_Read + + initial + begin + #1000; + GPMC_Write(1,36,16'hF00D); + #1000; + GPMC_Read(1,36); + #1000; + GPMC_Write(0,36,16'h1234); + GPMC_Write(0,38,16'h5678); + GPMC_Write(0,40,16'h9abc); + GPMC_Write(0,11'h2F4,16'hF00D); + GPMC_Write(0,11'h7FE,16'hDEAD); + GPMC_Write(0,11'h7FE,16'hDEAD); + GPMC_Write(0,11'h7FE,16'hDEAD); + GPMC_Write(0,11'h7FE,16'hDEAD); + GPMC_Write(0,11'h7FE,16'hDEAD); + GPMC_Write(0,11'h7FE,16'hDEAD); + #100000; + $finish; + end + +endmodule // gpmc_model diff --git a/usrp2/top/u1e/tb_u1e.v b/usrp2/top/u1e/tb_u1e.v index 3cae74c8a..31e4fcb69 100644 --- a/usrp2/top/u1e/tb_u1e.v +++ b/usrp2/top/u1e/tb_u1e.v @@ -33,7 +33,7 @@ module tb_u1e(); .EM_WAIT0(EM_WAIT0), .EM_NCS4(EM_NCS4), .EM_NCS6(EM_NCS6), .EM_NWE(EM_NWE), .EM_NOE(EM_NOE) ); - gpmc_model gpmc_model + gpmc_model_async gpmc_model_async (.EM_CLK(EM_CLK), .EM_D(EM_D), .EM_A(EM_A), .EM_NBE(EM_NBE), .EM_WAIT0(EM_WAIT0), .EM_NCS4(EM_NCS4), .EM_NCS6(EM_NCS6), .EM_NWE(EM_NWE), .EM_NOE(EM_NOE) ); -- cgit v1.2.3 From 6dd46af16008e46ee8830748194bbc2a1df9fdf3 Mon Sep 17 00:00:00 2001 From: Matt Ettus Date: Thu, 15 Apr 2010 14:56:19 -0700 Subject: progress on synchronous gpmc, but it may not be possible due to the limited number of clock edges --- usrp2/gpmc/fifo_to_gpmc_sync.v | 44 +++-------------- usrp2/gpmc/fifo_watcher.v | 26 ++++++++++ usrp2/gpmc/gpmc.v | 101 -------------------------------------- usrp2/gpmc/gpmc_sync.v | 107 +++++++++++++++++++++++++++++++++++++++++ 4 files changed, 140 insertions(+), 138 deletions(-) create mode 100644 usrp2/gpmc/fifo_watcher.v delete mode 100644 usrp2/gpmc/gpmc.v create mode 100644 usrp2/gpmc/gpmc_sync.v diff --git a/usrp2/gpmc/fifo_to_gpmc_sync.v b/usrp2/gpmc/fifo_to_gpmc_sync.v index 647a507b4..ef59d7137 100644 --- a/usrp2/gpmc/fifo_to_gpmc_sync.v +++ b/usrp2/gpmc/fifo_to_gpmc_sync.v @@ -6,51 +6,21 @@ module fifo_to_gpmc_sync (input arst, - input [17:0] data_i, input src_rdy_i, output reg dst_rdy_o, - input EM_CLK, inout [15:0] EM_D, input EM_NCS, input EM_NOE, + input [17:0] data_i, input src_rdy_i, output dst_rdy_o, + input EM_CLK, output [15:0] EM_D, input EM_NCS, input EM_NOE, output fifo_ready, output reg bus_error); - - reg [10:0] counter; - wire first_write = (counter == 0); - wire last_write = ((counter+1) == frame_len); - wire do_write = ~EM_NCS & ~EM_NWE; - - always @(posedge EM_CLK or posedge arst) - if(arst) - data_o <= 0; - else if(do_write) - begin - data_o[15:0] <= EM_D; - data_o[16] <= first_write; - data_o[17] <= last_write; - // no byte writes data_o[18] <= |EM_NBE; // mark half full if either is not enabled FIXME - end - always @(posedge EM_CLK or posedge arst) - if(arst) - src_rdy_o <= 0; - else if(do_write & ~bus_error) // Don't put junk in if there is a bus error - src_rdy_o <= 1; - else - src_rdy_o <= 0; // Assume it was taken, ignore dst_rdy_i + assign EM_D = data_i[15:0]; + wire read_access = ~EM_NCS & ~EM_NOE; - always @(posedge EM_CLK or posedge arst) - if(arst) - counter <= 0; - else if(do_write) - if(last_write) - counter <= 0; - else - counter <= counter + 1; + assign dst_rdy_o = read_access; - assign fifo_ready = first_write & (fifo_space > frame_len); - always @(posedge EM_CLK or posedge arst) if(arst) bus_error <= 0; - else if(src_rdy_o & ~dst_rdy_i) + else if(dst_rdy_o & ~src_rdy_i) bus_error <= 1; - // must be reset to make the error go away + endmodule // fifo_to_gpmc_sync diff --git a/usrp2/gpmc/fifo_watcher.v b/usrp2/gpmc/fifo_watcher.v new file mode 100644 index 000000000..8b8f1abfb --- /dev/null +++ b/usrp2/gpmc/fifo_watcher.v @@ -0,0 +1,26 @@ + + +module fifo_watcher + (input clk, input reset, input clear, + input src_rdy, input dst_rdy, input sof, input eof, + output have_packet, output [15:0] length, input next); + + wire write = src_rdy & dst_rdy & eof; + + fifo_short #(.WIDTH(16)) frame_lengths + (.clk(clk), .reset(reset), .clear(clear), + .datain(counter), .src_rdy_i(write), .dst_rdy_o(), + .dataout(length), .src_rdy_o(have_packet), .dst_rdy_i(next) ); + + reg [15:0] counter; + always @(posedge clk) + if(reset | clear) + counter <= 1; // Start at 1 + else if(src_rdy & dst_rdy) + if(eof) + counter <= 1; + else + counter <= counter + 1; + + +endmodule // fifo_watcher diff --git a/usrp2/gpmc/gpmc.v b/usrp2/gpmc/gpmc.v deleted file mode 100644 index 93308a2d2..000000000 --- a/usrp2/gpmc/gpmc.v +++ /dev/null @@ -1,101 +0,0 @@ -////////////////////////////////////////////////////////////////////////////////// - -module gpmc - (// GPMC signals - input EM_CLK, inout [15:0] EM_D, input [10:1] EM_A, input [1:0] EM_NBE, - input EM_WAIT0, input EM_NCS4, input EM_NCS6, input EM_NWE, input EM_NOE, - output bus_error, - - // GPIOs for FIFO signalling - output rx_have_data, output tx_have_space, - - // Wishbone signals - input wb_clk, input wb_rst, - output [10:0] wb_adr_o, output [15:0] wb_dat_mosi, input [15:0] wb_dat_miso, - output [1:0] wb_sel_o, output wb_cyc_o, output wb_stb_o, output wb_we_o, input wb_ack_i, - - // FIFO interface - input fifo_clk, input fifo_rst, - output [35:0] tx_data_o, output tx_src_rdy_o, input tx_dst_rdy_i, - input [35:0] rx_data_i, input rx_src_rdy_i, output rx_dst_rdy_o, - - output [31:0] debug - ); - - wire EM_output_enable = (~EM_NOE & (~EM_NCS4 | ~EM_NCS6)); - wire [15:0] EM_D_fifo; - wire [15:0] EM_D_wb; - - assign EM_D = ~EM_output_enable ? 16'bz : ~EM_NCS4 ? EM_D_fifo : EM_D_wb; - - // CS4 is RAM_2PORT for DATA PATH (high-speed data) - // Writes go into one RAM, reads come from the other - // CS6 is for CONTROL PATH (wishbone) - - // //////////////////////////////////////////// - // TX Data Path - - wire [17:0] tx18_data, tx18b_data; - wire tx18_src_rdy, tx18_dst_rdy, tx18b_src_rdy, tx18b_dst_rdy; - wire [15:0] tx_fifo_space, tx_frame_len; - - assign tx_frame_len = 10; - wire arst; - - gpmc_to_fifo_sync gpmc_to_fifo_sync - (.arst(arst), - .EM_CLK(EM_CLK), .EM_D(EM_D), .EM_NBE(EM_NBE), .EM_NCS(EM_NCS4), .EM_NWE(EM_NWE), - .data_o(tx18_data), .src_rdy_o(tx18_src_rdy), .dst_rdy_i(tx18_dst_rdy), - .frame_len(tx_frame_len), .fifo_space(tx_fifo_space), .fifo_ready(tx_have_space), - .bus_error(bus_error) ); - - fifo_2clock_cascade #(.WIDTH(18), .SIZE(10)) tx_fifo - (.wclk(EM_CLK), .datain(tx18_data), - .src_rdy_i(tx18_src_rdy), .dst_rdy_o(tx18_dst_rdy), .space(tx_fifo_space), - .rclk(fifo_clk), .dataout(tx18b_data), - .src_rdy_o(tx18b_src_rdy), .dst_rdy_i(tx18b_dst_rdy), .occupied(), .arst(arst)); - - fifo19_to_fifo36 f19_to_f36 - (.clk(fifo_clk), .reset(fifo_rst), .clear(0), - .f19_datain({1'b0,tx18b_data}), .f19_src_rdy_i(tx18b_src_rdy), .f19_dst_rdy_o(tx18b_dst_rdy), - .f36_dataout(tx_data_o), .f36_src_rdy_o(tx_src_rdy_o), .f36_dst_rdy_i(tx_dst_rdy_i)); - - - // //////////////////////////////////////////// - // RX Data Path - - wire [17:0] rx18_data, rx18b_data; - wire rx18_src_rdy, rx18_dst_rdy, rx18b_src_rdy, rx18b_dst_rdy; - wire [15:0] rx_fifo_space, rx_frame_len; - - fifo36_to_fifo18 f18_to_f36 - (.clk(fifo_clk), .reset(fifo_rst), .clear(0), - .f36_datain(rx_data_i), .f36_src_rdy_i(rx_src_rdy_i), .f36_dst_rdy_o(rx_dst_rdy_o), - .f18_dataout(rx18_data), .f18_src_rdy_o(rx18_src_rdy), .f18_dst_rdy_i(rx18_dst_rdy) ); - - fifo_2clock_cascade #(.WIDTH(18), .SIZE(10)) rx_fifo - (.wclk(fifo_clk), .datain(rx18_data), - .src_rdy_i(rx18_src_rdy), .dst_rdy_o(rx18_dst_rdy), .space(rx_fifo_space), - .rclk(EM_CLK), .dataout(rx18b_data), - .src_rdy_o(rx18b_src_rdy), .dst_rdy_i(rx18b_dst_rdy), .occupied(), .arst(arst)); - - fifo_to_gpmc_sync fifo_to_gpmc_sync - (.arst(arst), - .data_i(rx18b_data), .src_rdy_i(rx18b_src_rdy), .dst_rdy_o(rx18b_dst_rdy), - .EM_CLK(EM_CLK), .EM_D(EM_D_fifo), .EM_NCS(EM_NCS4), .EM_NOE(EM_NOE), - .fifo_ready(rx_have_data) ); - - // //////////////////////////////////////////// - // Control path on CS6 - - gpmc_wb gpmc_wb - (.EM_CLK(EM_CLK), .EM_D_in(EM_D), .EM_D_out(EM_D_wb), .EM_A(EM_A), .EM_NBE(EM_NBE), - .EM_NCS(EM_NCS6), .EM_NWE(EM_NWE), .EM_NOE(EM_NOE), - .wb_clk(wb_clk), .wb_rst(wb_rst), - .wb_adr_o(wb_adr_o), .wb_dat_mosi(wb_dat_mosi), .wb_dat_miso(wb_dat_miso), - .wb_sel_o(wb_sel_o), .wb_cyc_o(wb_cyc_o), .wb_stb_o(wb_stb_o), .wb_we_o(wb_we_o), - .wb_ack_i(wb_ack_i) ); - - assign debug = 0; - -endmodule // gpmc diff --git a/usrp2/gpmc/gpmc_sync.v b/usrp2/gpmc/gpmc_sync.v new file mode 100644 index 000000000..41dfeb49e --- /dev/null +++ b/usrp2/gpmc/gpmc_sync.v @@ -0,0 +1,107 @@ +////////////////////////////////////////////////////////////////////////////////// + +module gpmc + (// GPMC signals + input arst, + input EM_CLK, inout [15:0] EM_D, input [10:1] EM_A, input [1:0] EM_NBE, + input EM_WAIT0, input EM_NCS4, input EM_NCS6, input EM_NWE, input EM_NOE, + + // GPIOs for FIFO signalling + output rx_have_data, output tx_have_space, output bus_error, input bus_reset, + + // Wishbone signals + input wb_clk, input wb_rst, + output [10:0] wb_adr_o, output [15:0] wb_dat_mosi, input [15:0] wb_dat_miso, + output [1:0] wb_sel_o, output wb_cyc_o, output wb_stb_o, output wb_we_o, input wb_ack_i, + + // FIFO interface + input fifo_clk, input fifo_rst, + output [35:0] tx_data_o, output tx_src_rdy_o, input tx_dst_rdy_i, + input [35:0] rx_data_i, input rx_src_rdy_i, output rx_dst_rdy_o, + + output [31:0] debug + ); + + wire EM_output_enable = (~EM_NOE & (~EM_NCS4 | ~EM_NCS6)); + wire [15:0] EM_D_fifo; + wire [15:0] EM_D_wb; + + assign EM_D = ~EM_output_enable ? 16'bz : ~EM_NCS4 ? EM_D_fifo : EM_D_wb; + + wire bus_error_tx, bus_error_rx; + assign bus_error = bus_error_tx | bus_error_rx; + + // CS4 is RAM_2PORT for DATA PATH (high-speed data) + // Writes go into one RAM, reads come from the other + // CS6 is for CONTROL PATH (wishbone) + + // //////////////////////////////////////////// + // TX Data Path + + wire [17:0] tx18_data, tx18b_data; + wire tx18_src_rdy, tx18_dst_rdy, tx18b_src_rdy, tx18b_dst_rdy; + wire [15:0] tx_fifo_space, tx_frame_len; + + assign tx_frame_len = 10; + + gpmc_to_fifo_sync gpmc_to_fifo_sync + (.arst(arst), + .EM_CLK(EM_CLK), .EM_D(EM_D), .EM_NBE(EM_NBE), .EM_NCS(EM_NCS4), .EM_NWE(EM_NWE), + .data_o(tx18_data), .src_rdy_o(tx18_src_rdy), .dst_rdy_i(tx18_dst_rdy), + .frame_len(tx_frame_len), .fifo_space(tx_fifo_space), .fifo_ready(tx_have_space), + .bus_error(bus_error_tx) ); + + fifo_2clock_cascade #(.WIDTH(18), .SIZE(4)) tx_fifo + (.wclk(EM_CLK), .datain(tx18_data), + .src_rdy_i(tx18_src_rdy), .dst_rdy_o(tx18_dst_rdy), .space(tx_fifo_space), + .rclk(fifo_clk), .dataout(tx18b_data), + .src_rdy_o(tx18b_src_rdy), .dst_rdy_i(tx18b_dst_rdy), .occupied(), .arst(arst)); + + fifo19_to_fifo36 f19_to_f36 + (.clk(fifo_clk), .reset(fifo_rst), .clear(0), + .f19_datain({1'b0,tx18b_data}), .f19_src_rdy_i(tx18b_src_rdy), .f19_dst_rdy_o(tx18b_dst_rdy), + .f36_dataout(tx_data_o), .f36_src_rdy_o(tx_src_rdy_o), .f36_dst_rdy_i(tx_dst_rdy_i)); + + // //////////////////////////////////////////// + // RX Data Path + + wire [17:0] rx18_data, rx18b_data; + wire rx18_src_rdy, rx18_dst_rdy, rx18b_src_rdy, rx18b_dst_rdy; + wire [15:0] rx_fifo_space, rx_frame_len; + + fifo36_to_fifo18 f18_to_f36 + (.clk(fifo_clk), .reset(fifo_rst), .clear(0), + .f36_datain(rx_data_i), .f36_src_rdy_i(rx_src_rdy_i), .f36_dst_rdy_o(rx_dst_rdy_o), + .f18_dataout(rx18_data), .f18_src_rdy_o(rx18_src_rdy), .f18_dst_rdy_i(rx18_dst_rdy) ); + + fifo_2clock_cascade #(.WIDTH(18), .SIZE(10)) rx_fifo + (.wclk(fifo_clk), .datain(rx18_data), + .src_rdy_i(rx18_src_rdy), .dst_rdy_o(rx18_dst_rdy), .space(rx_fifo_space), + .rclk(EM_CLK), .dataout(rx18b_data), + .src_rdy_o(rx18b_src_rdy), .dst_rdy_i(rx18b_dst_rdy), .occupied(), .arst(arst)); + + fifo_to_gpmc_sync fifo_to_gpmc_sync + (.arst(arst), + .data_i(rx18b_data), .src_rdy_i(rx18b_src_rdy), .dst_rdy_o(rx18b_dst_rdy), + .EM_CLK(EM_CLK), .EM_D(EM_D_fifo), .EM_NCS(EM_NCS4), .EM_NOE(EM_NOE), + .fifo_ready(rx_have_data) ); + + fifo_watcher fifo_watcher + (.clk(fifo_clk), .reset(fifo_rst), .clear(0), + .src_rdy(rx18_src_rdy), .dst_rdy(rx18_dst_rdy), .sof(rx18_data[16]), .eof(rx18_data[17]), + .have_packet(), .length(), .next() ); + + // //////////////////////////////////////////// + // Control path on CS6 + + gpmc_wb gpmc_wb + (.EM_CLK(EM_CLK), .EM_D_in(EM_D), .EM_D_out(EM_D_wb), .EM_A(EM_A), .EM_NBE(EM_NBE), + .EM_NCS(EM_NCS6), .EM_NWE(EM_NWE), .EM_NOE(EM_NOE), + .wb_clk(wb_clk), .wb_rst(wb_rst), + .wb_adr_o(wb_adr_o), .wb_dat_mosi(wb_dat_mosi), .wb_dat_miso(wb_dat_miso), + .wb_sel_o(wb_sel_o), .wb_cyc_o(wb_cyc_o), .wb_stb_o(wb_stb_o), .wb_we_o(wb_we_o), + .wb_ack_i(wb_ack_i) ); + + assign debug = 0; + +endmodule // gpmc -- cgit v1.2.3 From 8f6ddf93ef81deb73a8b84496e115be299769951 Mon Sep 17 00:00:00 2001 From: Matt Ettus Date: Thu, 15 Apr 2010 16:13:42 -0700 Subject: correct name of module --- usrp2/gpmc/gpmc_sync.v | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/usrp2/gpmc/gpmc_sync.v b/usrp2/gpmc/gpmc_sync.v index 41dfeb49e..825d131d8 100644 --- a/usrp2/gpmc/gpmc_sync.v +++ b/usrp2/gpmc/gpmc_sync.v @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////////// -module gpmc +module gpmc_sync (// GPMC signals input arst, input EM_CLK, inout [15:0] EM_D, input [10:1] EM_A, input [1:0] EM_NBE, @@ -104,4 +104,4 @@ module gpmc assign debug = 0; -endmodule // gpmc +endmodule // gpmc_sync -- cgit v1.2.3 From 883c60cad6756042b5e90785668be3dd98e920bf Mon Sep 17 00:00:00 2001 From: Matt Ettus Date: Thu, 15 Apr 2010 16:14:24 -0700 Subject: add bus error reporting --- usrp2/gpmc/gpmc_to_fifo_async.v | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/usrp2/gpmc/gpmc_to_fifo_async.v b/usrp2/gpmc/gpmc_to_fifo_async.v index a8068022f..1df93f910 100644 --- a/usrp2/gpmc/gpmc_to_fifo_async.v +++ b/usrp2/gpmc/gpmc_to_fifo_async.v @@ -1,12 +1,12 @@ module gpmc_to_fifo_async - (input [15:0] EM_D, input [1:0] EM_NBE, - input EM_NCS, input EM_NWE, + (input [15:0] EM_D, input [1:0] EM_NBE, input EM_NCS, input EM_NWE, input fifo_clk, input fifo_rst, output reg [17:0] data_o, output reg src_rdy_o, input dst_rdy_i, - input [15:0] frame_len, input [15:0] fifo_space, output fifo_ready); + input [15:0] frame_len, input [15:0] fifo_space, output fifo_ready, + output reg bus_error ); reg [10:0] counter; // Synchronize the async control signals @@ -54,5 +54,11 @@ module gpmc_to_fifo_async counter <= counter + 1; assign fifo_ready = first_write & (fifo_space > frame_len); + + always @(posedge fifo_clk) + if(fifo_rst) + bus_error <= 0; + else if(src_rdy_o & ~dst_rdy_i) + bus_error <= 1; endmodule // gpmc_to_fifo_async -- cgit v1.2.3 From 2e6079841b7509f08a54c67db2ec19e07329e0d9 Mon Sep 17 00:00:00 2001 From: Matt Ettus Date: Thu, 15 Apr 2010 16:14:57 -0700 Subject: change time parameters because Xilinx IP has a 1ps timescale --- usrp2/models/gpmc_model_async.v | 41 +++++++++++++++++++++++++++-------------- 1 file changed, 27 insertions(+), 14 deletions(-) diff --git a/usrp2/models/gpmc_model_async.v b/usrp2/models/gpmc_model_async.v index a63a5a8fd..64b596284 100644 --- a/usrp2/models/gpmc_model_async.v +++ b/usrp2/models/gpmc_model_async.v @@ -1,4 +1,4 @@ - +`timescale 1ps/1ps module gpmc_model_async (output EM_CLK, inout [15:0] EM_D, output reg [10:1] EM_A, output reg [1:0] EM_NBE, @@ -26,22 +26,22 @@ module gpmc_model_async input [10:0] addr; input [15:0] data; begin - #2.3; + #23000; EM_A <= addr[10:1]; EM_D_int <= data; - #2.01; + #20100; if(ctrl) EM_NCS6 <= 0; else EM_NCS4 <= 0; - #14; + #14000; EM_NWE <= 0; - #77.5; + #77500; EM_NCS4 <= 1; EM_NCS6 <= 1; //#1.5; EM_NWE <= 1; - #60; + #60000; EM_A <= 10'bz; EM_D_int <= 16'bz; end @@ -51,33 +51,33 @@ module gpmc_model_async input ctrl; input [10:0] addr; begin - #1.3; + #13000; EM_A <= addr[10:1]; - #3; + #3000; if(ctrl) EM_NCS6 <= 0; else EM_NCS4 <= 0; - #14; + #14000; EM_NOE <= 0; - #77.5; + #77500; EM_NCS4 <= 1; EM_NCS6 <= 1; //#1.5; $display("Data Read from GPMC: %X",EM_D); EM_NOE <= 1; - #254; + #254000; EM_A <= 10'bz; end endtask // GPMC_Read initial begin - #1000; + #1000000; GPMC_Write(1,36,16'hF00D); - #1000; + #1000000; GPMC_Read(1,36); - #1000; + #1000000; GPMC_Write(0,36,16'h1234); GPMC_Write(0,38,16'h5678); GPMC_Write(0,40,16'h9abc); @@ -89,6 +89,19 @@ module gpmc_model_async GPMC_Write(0,11'h7FE,16'hDEAD); GPMC_Write(0,11'h7FE,16'hDEAD); #100000; + GPMC_Read(0,0); + GPMC_Read(0,0); + GPMC_Read(0,0); + GPMC_Read(0,0); + GPMC_Read(0,0); + GPMC_Read(0,0); + GPMC_Read(0,0); + GPMC_Read(0,0); + GPMC_Read(0,0); + GPMC_Read(0,0); + #100000; + GPMC_Read(0,0); + #100000000; $finish; end -- cgit v1.2.3 From 449a420f4024004abc49f3a17d224910710def92 Mon Sep 17 00:00:00 2001 From: Matt Ettus Date: Thu, 15 Apr 2010 16:16:31 -0700 Subject: async gpmc progress --- usrp2/gpmc/fifo_to_gpmc_async.v | 45 +++++++++++++++++ usrp2/gpmc/gpmc_async.v | 108 ++++++++++++++++++++++++++++++++++++++++ usrp2/top/u1e/tb_u1e.v | 4 +- usrp2/top/u1e/u1e_core.v | 34 +++++++------ 4 files changed, 173 insertions(+), 18 deletions(-) create mode 100644 usrp2/gpmc/fifo_to_gpmc_async.v create mode 100644 usrp2/gpmc/gpmc_async.v diff --git a/usrp2/gpmc/fifo_to_gpmc_async.v b/usrp2/gpmc/fifo_to_gpmc_async.v new file mode 100644 index 000000000..4f253e1b5 --- /dev/null +++ b/usrp2/gpmc/fifo_to_gpmc_async.v @@ -0,0 +1,45 @@ + +// Assumes an asynchronous GPMC cycle +// If a packet bigger or smaller than we are told is sent, behavior is undefined. +// If dst_rdy_i is low when we get data, behavior is undefined and we signal bus error. +// If there is a bus error, we should be reset + +module fifo_to_gpmc_async + (input clk, input reset, input clear, + input [17:0] data_i, input src_rdy_i, output dst_rdy_o, + output [15:0] EM_D, input EM_NCS, input EM_NOE, + input [15:0] frame_len, output reg bus_error); + + // Synchronize the async control signals + reg [1:0] cs_del, oe_del; + reg [15:0] counter; + + always @(posedge clk) + if(reset) + begin + cs_del <= 2'b11; + oe_del <= 2'b11; + end + else + begin + cs_del <= { cs_del[0], EM_NCS }; + oe_del <= { oe_del[0], EM_NOE }; + end + + //wire do_read = (~cs_del[0] & (oe_del == 2'b10)); + wire do_read = (~cs_del[1] & (oe_del == 2'b01)); // change output on trailing edge + wire first_read = (counter == 0); + wire last_read = ((counter+1) == frame_len); + + assign EM_D = data_i[15:0]; + + assign dst_rdy_o = do_read; + + always @(posedge clk) + if(reset) + bus_error <= 0; + else if(dst_rdy_o & ~src_rdy_i) + bus_error <= 1; + + +endmodule // fifo_to_gpmc_async diff --git a/usrp2/gpmc/gpmc_async.v b/usrp2/gpmc/gpmc_async.v new file mode 100644 index 000000000..c4cf0ef89 --- /dev/null +++ b/usrp2/gpmc/gpmc_async.v @@ -0,0 +1,108 @@ +////////////////////////////////////////////////////////////////////////////////// + +module gpmc_async + (// GPMC signals + input arst, + input EM_CLK, inout [15:0] EM_D, input [10:1] EM_A, input [1:0] EM_NBE, + input EM_WAIT0, input EM_NCS4, input EM_NCS6, input EM_NWE, input EM_NOE, + + // GPIOs for FIFO signalling + output rx_have_data, output tx_have_space, output bus_error, input bus_reset, + + // Wishbone signals + input wb_clk, input wb_rst, + output [10:0] wb_adr_o, output [15:0] wb_dat_mosi, input [15:0] wb_dat_miso, + output [1:0] wb_sel_o, output wb_cyc_o, output wb_stb_o, output wb_we_o, input wb_ack_i, + + // FIFO interface + input fifo_clk, input fifo_rst, + output [35:0] tx_data_o, output tx_src_rdy_o, input tx_dst_rdy_i, + input [35:0] rx_data_i, input rx_src_rdy_i, output rx_dst_rdy_o, + + output [31:0] debug + ); + + wire EM_output_enable = (~EM_NOE & (~EM_NCS4 | ~EM_NCS6)); + wire [15:0] EM_D_fifo; + wire [15:0] EM_D_wb; + + assign EM_D = ~EM_output_enable ? 16'bz : ~EM_NCS4 ? EM_D_fifo : EM_D_wb; + + wire bus_error_tx, bus_error_rx; + assign bus_error = bus_error_tx | bus_error_rx; + + // CS4 is RAM_2PORT for DATA PATH (high-speed data) + // Writes go into one RAM, reads come from the other + // CS6 is for CONTROL PATH (wishbone) + + // //////////////////////////////////////////// + // TX Data Path + + wire [17:0] tx18_data, tx18b_data; + wire tx18_src_rdy, tx18_dst_rdy, tx18b_src_rdy, tx18b_dst_rdy; + wire [15:0] tx_fifo_space, tx_frame_len; + + assign tx_frame_len = 10; + + gpmc_to_fifo_async gpmc_to_fifo_async + (.EM_D(EM_D), .EM_NBE(EM_NBE), .EM_NCS(EM_NCS4), .EM_NWE(EM_NWE), + .fifo_clk(fifo_clk), .fifo_rst(fifo_rst), + .data_o(tx18_data), .src_rdy_o(tx18_src_rdy), .dst_rdy_i(tx18_dst_rdy), + .frame_len(tx_frame_len), .fifo_space(tx_fifo_space), .fifo_ready(tx_have_space), + .bus_error(bus_error_tx) ); + + fifo_cascade #(.WIDTH(18), .SIZE(10)) tx_fifo + (.clk(fifo_clk), .reset(fifo_rst), .clear(0), + .datain(tx18_data), .src_rdy_i(tx18_src_rdy), .dst_rdy_o(tx18_dst_rdy), .space(tx_fifo_space), + .dataout(tx18b_data), .src_rdy_o(tx18b_src_rdy), .dst_rdy_i(tx18b_dst_rdy), .occupied()); + + fifo19_to_fifo36 f19_to_f36 + (.clk(fifo_clk), .reset(fifo_rst), .clear(0), + .f19_datain({1'b0,tx18b_data}), .f19_src_rdy_i(tx18b_src_rdy), .f19_dst_rdy_o(tx18b_dst_rdy), + .f36_dataout(tx_data_o), .f36_src_rdy_o(tx_src_rdy_o), .f36_dst_rdy_i(tx_dst_rdy_i)); + + // //////////////////////////////////////////// + // RX Data Path + + wire [17:0] rx18_data, rx18b_data; + wire rx18_src_rdy, rx18_dst_rdy, rx18b_src_rdy, rx18b_dst_rdy; + wire [15:0] rx_fifo_space, rx_frame_len; + assign rx_frame_len = tx_frame_len; + + fifo36_to_fifo18 f18_to_f36 + (.clk(fifo_clk), .reset(fifo_rst), .clear(0), + .f36_datain(rx_data_i), .f36_src_rdy_i(rx_src_rdy_i), .f36_dst_rdy_o(rx_dst_rdy_o), + .f18_dataout(rx18_data), .f18_src_rdy_o(rx18_src_rdy), .f18_dst_rdy_i(rx18_dst_rdy) ); + + fifo_cascade #(.WIDTH(18), .SIZE(10)) rx_fifo + (.clk(fifo_clk), .reset(fifo_rst), .clear(0), + .datain(rx18_data), .src_rdy_i(rx18_src_rdy), .dst_rdy_o(rx18_dst_rdy), .space(rx_fifo_space), + .dataout(rx18b_data), .src_rdy_o(rx18b_src_rdy), .dst_rdy_i(rx18b_dst_rdy), .occupied()); + + fifo_to_gpmc_async fifo_to_gpmc_async + (.clk(fifo_clk), .reset(fifo_rst), .clear(0), + .data_i(rx18b_data), .src_rdy_i(rx18b_src_rdy), .dst_rdy_o(rx18b_dst_rdy), + .EM_D(EM_D_fifo), .EM_NCS(EM_NCS4), .EM_NOE(EM_NOE), + .frame_len(rx_frame_len), .bus_error(bus_error_rx) ); + + fifo_watcher fifo_watcher + (.clk(fifo_clk), .reset(fifo_rst), .clear(0), + .src_rdy(rx18_src_rdy), .dst_rdy(rx18_dst_rdy), .sof(rx18_data[16]), .eof(rx18_data[17]), + .have_packet(), .length(), .next() ); + + assign rx_have_data = 0; + + // //////////////////////////////////////////// + // Control path on CS6 + + gpmc_wb gpmc_wb + (.EM_CLK(EM_CLK), .EM_D_in(EM_D), .EM_D_out(EM_D_wb), .EM_A(EM_A), .EM_NBE(EM_NBE), + .EM_NCS(EM_NCS6), .EM_NWE(EM_NWE), .EM_NOE(EM_NOE), + .wb_clk(wb_clk), .wb_rst(wb_rst), + .wb_adr_o(wb_adr_o), .wb_dat_mosi(wb_dat_mosi), .wb_dat_miso(wb_dat_miso), + .wb_sel_o(wb_sel_o), .wb_cyc_o(wb_cyc_o), .wb_stb_o(wb_stb_o), .wb_we_o(wb_we_o), + .wb_ack_i(wb_ack_i) ); + + assign debug = 0; + +endmodule // gpmc_async diff --git a/usrp2/top/u1e/tb_u1e.v b/usrp2/top/u1e/tb_u1e.v index 31e4fcb69..5fc8134fb 100644 --- a/usrp2/top/u1e/tb_u1e.v +++ b/usrp2/top/u1e/tb_u1e.v @@ -21,9 +21,9 @@ module tb_u1e(); wire [1:0] EM_NBE; reg clk_fpga = 0, rst_fpga = 1; - always #15.625 clk_fpga = ~clk_fpga; + always #15625 clk_fpga = ~clk_fpga; - initial #200 + initial #200000 @(posedge clk_fpga) rst_fpga <= 0; diff --git a/usrp2/top/u1e/u1e_core.v b/usrp2/top/u1e/u1e_core.v index 7df7b0a48..40950bf82 100644 --- a/usrp2/top/u1e/u1e_core.v +++ b/usrp2/top/u1e/u1e_core.v @@ -35,22 +35,24 @@ module u1e_core wire [35:0] tx_data, rx_data; wire tx_src_rdy, tx_dst_rdy, rx_src_rdy, rx_dst_rdy; - gpmc gpmc (.EM_CLK(EM_CLK), .EM_D(EM_D), .EM_A(EM_A), .EM_NBE(EM_NBE), - .EM_WAIT0(EM_WAIT0), .EM_NCS4(EM_NCS4), .EM_NCS6(EM_NCS6), .EM_NWE(EM_NWE), - .EM_NOE(EM_NOE), - - .rx_have_data(rx_have_data), .tx_have_space(tx_have_space), - - .wb_clk(wb_clk), .wb_rst(wb_rst), - .wb_adr_o(m0_adr), .wb_dat_mosi(m0_dat_mosi), .wb_dat_miso(m0_dat_miso), - .wb_sel_o(m0_sel), .wb_cyc_o(m0_cyc), .wb_stb_o(m0_stb), .wb_we_o(m0_we), - .wb_ack_i(m0_ack), - - .fifo_clk(wb_clk), .fifo_rst(wb_rst), - .tx_data_o(tx_data), .tx_src_rdy_o(tx_src_rdy), .tx_dst_rdy_i(tx_dst_rdy), - .rx_data_i(rx_data), .rx_src_rdy_i(rx_src_rdy), .rx_dst_rdy_o(rx_dst_rdy), - - .debug(debug_gpmc)); + gpmc_async gpmc (.arst(wb_rst), + .EM_CLK(EM_CLK), .EM_D(EM_D), .EM_A(EM_A), .EM_NBE(EM_NBE), + .EM_WAIT0(EM_WAIT0), .EM_NCS4(EM_NCS4), .EM_NCS6(EM_NCS6), .EM_NWE(EM_NWE), + .EM_NOE(EM_NOE), + + .rx_have_data(rx_have_data), .tx_have_space(tx_have_space), + .bus_error(), .bus_reset(0), + + .wb_clk(wb_clk), .wb_rst(wb_rst), + .wb_adr_o(m0_adr), .wb_dat_mosi(m0_dat_mosi), .wb_dat_miso(m0_dat_miso), + .wb_sel_o(m0_sel), .wb_cyc_o(m0_cyc), .wb_stb_o(m0_stb), .wb_we_o(m0_we), + .wb_ack_i(m0_ack), + + .fifo_clk(wb_clk), .fifo_rst(wb_rst), + .tx_data_o(tx_data), .tx_src_rdy_o(tx_src_rdy), .tx_dst_rdy_i(tx_dst_rdy), + .rx_data_i(rx_data), .rx_src_rdy_i(rx_src_rdy), .rx_dst_rdy_o(rx_dst_rdy), + + .debug(debug_gpmc)); fifo_cascade #(.WIDTH(36), .SIZE(9)) loopback_fifo (.clk(wb_clk), .reset(wb_rst), .clear(0), -- cgit v1.2.3 From beccd823da07b7c8b8d95b4688c6e05732f66165 Mon Sep 17 00:00:00 2001 From: Matt Ettus Date: Thu, 15 Apr 2010 17:55:22 -0700 Subject: async seems to work with packet lengths now. Still need to do wishbone regs for gpmc --- usrp2/gpmc/fifo_to_gpmc_async.v | 9 +------- usrp2/gpmc/fifo_watcher.v | 38 +++++++++++++++++++++++++++------- usrp2/gpmc/gpmc_async.v | 10 ++++----- usrp2/models/gpmc_model_async.v | 46 ++++++++++++++++++++++++++++++----------- usrp2/top/u1e/Makefile | 6 +++--- 5 files changed, 72 insertions(+), 37 deletions(-) diff --git a/usrp2/gpmc/fifo_to_gpmc_async.v b/usrp2/gpmc/fifo_to_gpmc_async.v index 4f253e1b5..5ac8b19bd 100644 --- a/usrp2/gpmc/fifo_to_gpmc_async.v +++ b/usrp2/gpmc/fifo_to_gpmc_async.v @@ -8,7 +8,7 @@ module fifo_to_gpmc_async (input clk, input reset, input clear, input [17:0] data_i, input src_rdy_i, output dst_rdy_o, output [15:0] EM_D, input EM_NCS, input EM_NOE, - input [15:0] frame_len, output reg bus_error); + input [15:0] frame_len); // Synchronize the async control signals reg [1:0] cs_del, oe_del; @@ -35,11 +35,4 @@ module fifo_to_gpmc_async assign dst_rdy_o = do_read; - always @(posedge clk) - if(reset) - bus_error <= 0; - else if(dst_rdy_o & ~src_rdy_i) - bus_error <= 1; - - endmodule // fifo_to_gpmc_async diff --git a/usrp2/gpmc/fifo_watcher.v b/usrp2/gpmc/fifo_watcher.v index 8b8f1abfb..da2051b04 100644 --- a/usrp2/gpmc/fifo_watcher.v +++ b/usrp2/gpmc/fifo_watcher.v @@ -2,25 +2,47 @@ module fifo_watcher (input clk, input reset, input clear, - input src_rdy, input dst_rdy, input sof, input eof, - output have_packet, output [15:0] length, input next); + input src_rdy1, input dst_rdy1, input sof1, input eof1, + input src_rdy2, input dst_rdy2, input sof2, input eof2, + output have_packet, output [15:0] length, output reg bus_error); - wire write = src_rdy & dst_rdy & eof; + wire write = src_rdy1 & dst_rdy1 & eof1; + wire read = src_rdy2 & dst_rdy2 & eof2; + wire have_packet_int; + reg [15:0] counter; fifo_short #(.WIDTH(16)) frame_lengths (.clk(clk), .reset(reset), .clear(clear), .datain(counter), .src_rdy_i(write), .dst_rdy_o(), - .dataout(length), .src_rdy_o(have_packet), .dst_rdy_i(next) ); + .dataout(length), .src_rdy_o(have_packet_int), .dst_rdy_i(read) ); - reg [15:0] counter; always @(posedge clk) if(reset | clear) counter <= 1; // Start at 1 - else if(src_rdy & dst_rdy) - if(eof) + else if(src_rdy1 & dst_rdy1) + if(eof1) counter <= 1; else counter <= counter + 1; - + always @(posedge clk) + if(reset | clear) + bus_error <= 0; + else if(dst_rdy2 & ~src_rdy2) + bus_error <= 1; + else if(read & ~have_packet_int) + bus_error <= 1; + + reg in_packet; + assign have_packet = have_packet_int & ~in_packet; + + always @(posedge clk) + if(reset | clear) + in_packet <= 0; + else if(src_rdy2 & dst_rdy2) + if(eof2) + in_packet <= 0; + else + in_packet <= 1; + endmodule // fifo_watcher diff --git a/usrp2/gpmc/gpmc_async.v b/usrp2/gpmc/gpmc_async.v index c4cf0ef89..22e56cc89 100644 --- a/usrp2/gpmc/gpmc_async.v +++ b/usrp2/gpmc/gpmc_async.v @@ -67,7 +67,6 @@ module gpmc_async wire [17:0] rx18_data, rx18b_data; wire rx18_src_rdy, rx18_dst_rdy, rx18b_src_rdy, rx18b_dst_rdy; wire [15:0] rx_fifo_space, rx_frame_len; - assign rx_frame_len = tx_frame_len; fifo36_to_fifo18 f18_to_f36 (.clk(fifo_clk), .reset(fifo_rst), .clear(0), @@ -83,15 +82,14 @@ module gpmc_async (.clk(fifo_clk), .reset(fifo_rst), .clear(0), .data_i(rx18b_data), .src_rdy_i(rx18b_src_rdy), .dst_rdy_o(rx18b_dst_rdy), .EM_D(EM_D_fifo), .EM_NCS(EM_NCS4), .EM_NOE(EM_NOE), - .frame_len(rx_frame_len), .bus_error(bus_error_rx) ); + .frame_len(rx_frame_len) ); fifo_watcher fifo_watcher (.clk(fifo_clk), .reset(fifo_rst), .clear(0), - .src_rdy(rx18_src_rdy), .dst_rdy(rx18_dst_rdy), .sof(rx18_data[16]), .eof(rx18_data[17]), - .have_packet(), .length(), .next() ); + .src_rdy1(rx18_src_rdy), .dst_rdy1(rx18_dst_rdy), .sof1(rx18_data[16]), .eof1(rx18_data[17]), + .src_rdy2(rx18b_src_rdy), .dst_rdy2(rx18b_dst_rdy), .sof2(rx18b_data[16]), .eof2(rx18b_data[17]), + .have_packet(rx_have_data), .length(rx_frame_len), .bus_error(bus_error_rx) ); - assign rx_have_data = 0; - // //////////////////////////////////////////// // Control path on CS6 diff --git a/usrp2/models/gpmc_model_async.v b/usrp2/models/gpmc_model_async.v index 64b596284..beeaee028 100644 --- a/usrp2/models/gpmc_model_async.v +++ b/usrp2/models/gpmc_model_async.v @@ -78,28 +78,50 @@ module gpmc_model_async #1000000; GPMC_Read(1,36); #1000000; - GPMC_Write(0,36,16'h1234); - GPMC_Write(0,38,16'h5678); - GPMC_Write(0,40,16'h9abc); - GPMC_Write(0,11'h2F4,16'hF00D); - GPMC_Write(0,11'h7FE,16'hDEAD); - GPMC_Write(0,11'h7FE,16'hDEAD); - GPMC_Write(0,11'h7FE,16'hDEAD); - GPMC_Write(0,11'h7FE,16'hDEAD); - GPMC_Write(0,11'h7FE,16'hDEAD); - GPMC_Write(0,11'h7FE,16'hDEAD); - #100000; + GPMC_Write(0,0,16'h1234); + GPMC_Write(0,0,16'h5678); + GPMC_Write(0,0,16'h9abc); + GPMC_Write(0,0,16'hF00D); + GPMC_Write(0,0,16'hDEAD); + GPMC_Write(0,0,16'hDEAD); + GPMC_Write(0,0,16'hDEAD); + GPMC_Write(0,0,16'hDEAD); + GPMC_Write(0,0,16'hDEAD); + GPMC_Write(0,0,16'hDEAD); + #1000000; + GPMC_Write(0,0,16'h1234); + GPMC_Write(0,0,16'h5678); + GPMC_Write(0,0,16'h9abc); + GPMC_Write(0,0,16'hF00D); + GPMC_Write(0,0,16'hDEAD); + GPMC_Write(0,0,16'hDEAD); + GPMC_Write(0,0,16'hDEAD); + GPMC_Write(0,0,16'hDEAD); + GPMC_Write(0,0,16'hDEAD); + GPMC_Write(0,0,16'h9876); + #1000000; + GPMC_Read(0,0); + GPMC_Read(0,0); + GPMC_Read(0,0); + GPMC_Read(0,0); + GPMC_Read(0,0); GPMC_Read(0,0); GPMC_Read(0,0); GPMC_Read(0,0); GPMC_Read(0,0); GPMC_Read(0,0); + #1000000; + GPMC_Read(0,0); + GPMC_Read(0,0); + GPMC_Read(0,0); GPMC_Read(0,0); GPMC_Read(0,0); GPMC_Read(0,0); GPMC_Read(0,0); GPMC_Read(0,0); - #100000; + GPMC_Read(0,0); + GPMC_Read(0,0); + #1000000; GPMC_Read(0,0); #100000000; $finish; diff --git a/usrp2/top/u1e/Makefile b/usrp2/top/u1e/Makefile index 160e67894..e15a49e10 100644 --- a/usrp2/top/u1e/Makefile +++ b/usrp2/top/u1e/Makefile @@ -176,12 +176,12 @@ timing/time_receiver.v \ timing/time_sender.v \ timing/time_sync.v \ timing/timer.v \ -gpmc/gpmc.v \ +gpmc/gpmc_async.v \ gpmc/edge_sync.v \ gpmc/dbsm.v \ gpmc/gpmc_to_fifo_async.v \ -gpmc/gpmc_to_fifo_sync.v \ -gpmc/fifo_to_gpmc_sync.v \ +gpmc/fifo_to_gpmc_async.v \ +gpmc/fifo_watcher.v \ gpmc/gpmc_wb.v \ top/u1e/u1e_core.v \ top/u1e/u1e.ucf \ -- cgit v1.2.3 From d94a0fbea165463a132006a15eb8548cde79a4d2 Mon Sep 17 00:00:00 2001 From: Matt Ettus Date: Thu, 15 Apr 2010 18:55:20 -0700 Subject: access frame length regs from wishbone --- usrp2/gpmc/gpmc_async.v | 8 ++++---- usrp2/top/u1e/u1e_core.v | 20 ++++++++++++++------ 2 files changed, 18 insertions(+), 10 deletions(-) diff --git a/usrp2/gpmc/gpmc_async.v b/usrp2/gpmc/gpmc_async.v index 22e56cc89..b1a545907 100644 --- a/usrp2/gpmc/gpmc_async.v +++ b/usrp2/gpmc/gpmc_async.v @@ -19,6 +19,8 @@ module gpmc_async output [35:0] tx_data_o, output tx_src_rdy_o, input tx_dst_rdy_i, input [35:0] rx_data_i, input rx_src_rdy_i, output rx_dst_rdy_o, + input [15:0] tx_frame_len, output [15:0] rx_frame_len, + output [31:0] debug ); @@ -40,9 +42,7 @@ module gpmc_async wire [17:0] tx18_data, tx18b_data; wire tx18_src_rdy, tx18_dst_rdy, tx18b_src_rdy, tx18b_dst_rdy; - wire [15:0] tx_fifo_space, tx_frame_len; - - assign tx_frame_len = 10; + wire [15:0] tx_fifo_space; gpmc_to_fifo_async gpmc_to_fifo_async (.EM_D(EM_D), .EM_NBE(EM_NBE), .EM_NCS(EM_NCS4), .EM_NWE(EM_NWE), @@ -66,7 +66,7 @@ module gpmc_async wire [17:0] rx18_data, rx18b_data; wire rx18_src_rdy, rx18_dst_rdy, rx18b_src_rdy, rx18b_dst_rdy; - wire [15:0] rx_fifo_space, rx_frame_len; + wire [15:0] rx_fifo_space; fifo36_to_fifo18 f18_to_f36 (.clk(fifo_clk), .reset(fifo_rst), .clear(0), diff --git a/usrp2/top/u1e/u1e_core.v b/usrp2/top/u1e/u1e_core.v index 40950bf82..30396de3a 100644 --- a/usrp2/top/u1e/u1e_core.v +++ b/usrp2/top/u1e/u1e_core.v @@ -34,6 +34,8 @@ module u1e_core wire [35:0] tx_data, rx_data; wire tx_src_rdy, tx_dst_rdy, rx_src_rdy, rx_dst_rdy; + reg [15:0] tx_frame_len; + wire [15:0] rx_frame_len; gpmc_async gpmc (.arst(wb_rst), .EM_CLK(EM_CLK), .EM_D(EM_D), .EM_A(EM_A), .EM_NBE(EM_NBE), @@ -51,7 +53,8 @@ module u1e_core .fifo_clk(wb_clk), .fifo_rst(wb_rst), .tx_data_o(tx_data), .tx_src_rdy_o(tx_src_rdy), .tx_dst_rdy_i(tx_dst_rdy), .rx_data_i(rx_data), .rx_src_rdy_i(rx_src_rdy), .rx_dst_rdy_o(rx_dst_rdy), - + + .tx_frame_len(tx_frame_len), .rx_frame_len(rx_frame_len), .debug(debug_gpmc)); fifo_cascade #(.WIDTH(36), .SIZE(9)) loopback_fifo @@ -133,11 +136,13 @@ module u1e_core reg [15:0] reg_leds, reg_cgen_ctrl, reg_test; - localparam REG_LEDS = 7'd0; // out - localparam REG_SWITCHES = 7'd2; // in - localparam REG_CGEN_CTRL = 7'd4; // out - localparam REG_CGEN_ST = 7'd6; // in - localparam REG_TEST = 7'd8; // out + localparam REG_LEDS = 7'd0; // out + localparam REG_SWITCHES = 7'd2; // in + localparam REG_CGEN_CTRL = 7'd4; // out + localparam REG_CGEN_ST = 7'd6; // in + localparam REG_TEST = 7'd8; // out + localparam REG_RX_FRAMELEN = 7'd10; // out + localparam REG_TX_FRAMELEN = 7'd12; // in always @(posedge wb_clk) if(wb_rst) @@ -155,6 +160,8 @@ module u1e_core reg_cgen_ctrl <= s0_dat_mosi; REG_TEST : reg_test <= s0_dat_mosi; + REG_TX_FRAMELEN : + tx_frame_len <= s0_dat_mosi; endcase // case (s0_adr[6:0]) assign { debug_led[2],debug_led[0],debug_led[1] } = reg_leds; // LEDs are arranged funny on board @@ -166,6 +173,7 @@ module u1e_core (s0_adr[6:0] == REG_CGEN_CTRL) ? reg_cgen_ctrl : (s0_adr[6:0] == REG_CGEN_ST) ? {13'b0,cgen_st_status,cgen_st_ld,cgen_st_refmon} : (s0_adr[6:0] == REG_TEST) ? reg_test : + (s0_adr[6:0] == REG_RX_FRAMELEN) ? rx_frame_len : 16'hBEEF; assign s0_ack = s0_stb & s0_cyc; -- cgit v1.2.3 From 23316f1ac73c917757a70980c3a9f251852ee426 Mon Sep 17 00:00:00 2001 From: Matt Ettus Date: Thu, 15 Apr 2010 21:27:03 -0700 Subject: added pps and time capability --- usrp2/top/u1e/u1e.ucf | 2 +- usrp2/top/u1e/u1e.v | 6 ++++-- usrp2/top/u1e/u1e_core.v | 18 ++++++++++++++++-- 3 files changed, 21 insertions(+), 5 deletions(-) diff --git a/usrp2/top/u1e/u1e.ucf b/usrp2/top/u1e/u1e.ucf index c39759d0b..1c8dfc197 100644 --- a/usrp2/top/u1e/u1e.ucf +++ b/usrp2/top/u1e/u1e.ucf @@ -208,7 +208,7 @@ NET "dip_sw<0>" LOC = "J7" ; #NET "TXSYNC" LOC = "U18" ; #NET "TXBLANK" LOC = "U19" ; -#NET "PPS_IN" LOC = "M17" ; +NET "PPS_IN" LOC = "M17" ; NET "io_tx<0>" LOC = "AB20" ; NET "io_tx<1>" LOC = "Y17" ; diff --git a/usrp2/top/u1e/u1e.v b/usrp2/top/u1e/u1e.v index ab270879c..b8f716d26 100644 --- a/usrp2/top/u1e/u1e.v +++ b/usrp2/top/u1e/u1e.v @@ -20,7 +20,8 @@ module u1e input cgen_st_status, input cgen_st_ld, input cgen_st_refmon, output cgen_sync_b, output cgen_ref_sel, output overo_gpio144, output overo_gpio145, output overo_gpio146, output overo_gpio147, // Fifo controls - inout [15:0] io_tx, inout [15:0] io_rx + inout [15:0] io_tx, inout [15:0] io_rx, + input PPS_IN ); // FPGA-specific pins connections @@ -50,6 +51,7 @@ module u1e .cgen_sync_b(cgen_sync_b), .cgen_ref_sel(cgen_ref_sel), .tx_have_space(overo_gpio144), .tx_underrun(overo_gpio145), .rx_have_data(overo_gpio146), .rx_overrun(overo_gpio147), - .io_tx(io_tx), .io_rx(io_rx) ); + .io_tx(io_tx), .io_rx(io_rx), + .pps_in(PPS_IN) ); endmodule // u1e diff --git a/usrp2/top/u1e/u1e_core.v b/usrp2/top/u1e/u1e_core.v index 30396de3a..9e65faeed 100644 --- a/usrp2/top/u1e/u1e_core.v +++ b/usrp2/top/u1e/u1e_core.v @@ -13,7 +13,9 @@ module u1e_core input cgen_st_status, input cgen_st_ld, input cgen_st_refmon, output cgen_sync_b, output cgen_ref_sel, output tx_have_space, output tx_underrun, output rx_have_data, output rx_overrun, - inout [15:0] io_tx, inout [15:0] io_rx + inout [15:0] io_tx, inout [15:0] io_rx, + + input pps_in ); wire wb_clk = clk_fpga; @@ -249,7 +251,19 @@ module u1e_core (.clk_i(wb_clk), .rst_i(wb_rst), .adr_i(s6_adr), .sel_i(s6_sel), .dat_i(s6_dat_mosi), .dat_o(s6_dat_miso), .we_i(s6_we), .stb_i(s6_stb), .cyc_i(s6_cyc), .ack_o(s6_ack), - .run_rx(), .run_tx(), .master_time(0), .ctrl_lines(atr_lines)); + .run_rx(0), .run_tx(0), .ctrl_lines(atr_lines)); + + + // ///////////////////////////////////////////////////////////////////////// + // VITA Timing + + localparam SR_TIME64 = 0; + wire pps_int; + wire [63:0] vita_time; + + time_64bit #(.TICKS_PER_SEC(32'd64000000),.BASE(SR_TIME64)) time_64bit + (.clk(wb_clk), .rst(wb_rst), .set_stb(set_stb), .set_addr(set_addr), .set_data(set_data), + .pps(pps_in), .vita_time(vita_time), .pps_int(pps_int)); // ///////////////////////////////////////////////////////////////////////////////////// // Debug circuitry -- cgit v1.2.3 From 21ceee337d61ccb2f31edaefd5c7418e8025b4b1 Mon Sep 17 00:00:00 2001 From: Matt Ettus Date: Tue, 20 Apr 2010 10:51:23 -0700 Subject: find time_64bit --- usrp2/top/u1e/Makefile | 1 + 1 file changed, 1 insertion(+) diff --git a/usrp2/top/u1e/Makefile b/usrp2/top/u1e/Makefile index e15a49e10..5f712b046 100644 --- a/usrp2/top/u1e/Makefile +++ b/usrp2/top/u1e/Makefile @@ -176,6 +176,7 @@ timing/time_receiver.v \ timing/time_sender.v \ timing/time_sync.v \ timing/timer.v \ +timing/time_64bit.v \ gpmc/gpmc_async.v \ gpmc/edge_sync.v \ gpmc/dbsm.v \ -- cgit v1.2.3 From 5de2543e9cee644009d9ec15c19c70986df89594 Mon Sep 17 00:00:00 2001 From: Matt Ettus Date: Fri, 23 Apr 2010 14:43:29 -0700 Subject: Register outputs to omap to prevent runt pulses from falsely triggering interrupts --- usrp2/gpmc/fifo_watcher.v | 8 ++++++-- usrp2/gpmc/gpmc_async.v | 9 +++++++-- usrp2/gpmc/gpmc_to_fifo_async.v | 10 +++++++--- 3 files changed, 20 insertions(+), 7 deletions(-) diff --git a/usrp2/gpmc/fifo_watcher.v b/usrp2/gpmc/fifo_watcher.v index da2051b04..7a3f00483 100644 --- a/usrp2/gpmc/fifo_watcher.v +++ b/usrp2/gpmc/fifo_watcher.v @@ -4,7 +4,7 @@ module fifo_watcher (input clk, input reset, input clear, input src_rdy1, input dst_rdy1, input sof1, input eof1, input src_rdy2, input dst_rdy2, input sof2, input eof2, - output have_packet, output [15:0] length, output reg bus_error); + output reg have_packet, output [15:0] length, output reg bus_error); wire write = src_rdy1 & dst_rdy1 & eof1; wire read = src_rdy2 & dst_rdy2 & eof2; @@ -34,7 +34,11 @@ module fifo_watcher bus_error <= 1; reg in_packet; - assign have_packet = have_packet_int & ~in_packet; + always @(posedge clk) + if(reset | clear) + have_packet <= 0; + else + have_packet <= have_packet_int & ~in_packet; always @(posedge clk) if(reset | clear) diff --git a/usrp2/gpmc/gpmc_async.v b/usrp2/gpmc/gpmc_async.v index b1a545907..02a00ce57 100644 --- a/usrp2/gpmc/gpmc_async.v +++ b/usrp2/gpmc/gpmc_async.v @@ -7,7 +7,7 @@ module gpmc_async input EM_WAIT0, input EM_NCS4, input EM_NCS6, input EM_NWE, input EM_NOE, // GPIOs for FIFO signalling - output rx_have_data, output tx_have_space, output bus_error, input bus_reset, + output rx_have_data, output tx_have_space, output reg bus_error, input bus_reset, // Wishbone signals input wb_clk, input wb_rst, @@ -31,7 +31,12 @@ module gpmc_async assign EM_D = ~EM_output_enable ? 16'bz : ~EM_NCS4 ? EM_D_fifo : EM_D_wb; wire bus_error_tx, bus_error_rx; - assign bus_error = bus_error_tx | bus_error_rx; + + always @(posedge fifo_clk) + if(fifo_rst) + bus_error <= 0; + else + bus_error <= bus_error_tx | bus_error_rx; // CS4 is RAM_2PORT for DATA PATH (high-speed data) // Writes go into one RAM, reads come from the other diff --git a/usrp2/gpmc/gpmc_to_fifo_async.v b/usrp2/gpmc/gpmc_to_fifo_async.v index 1df93f910..38f1165fc 100644 --- a/usrp2/gpmc/gpmc_to_fifo_async.v +++ b/usrp2/gpmc/gpmc_to_fifo_async.v @@ -5,10 +5,10 @@ module gpmc_to_fifo_async input fifo_clk, input fifo_rst, output reg [17:0] data_o, output reg src_rdy_o, input dst_rdy_i, - input [15:0] frame_len, input [15:0] fifo_space, output fifo_ready, + input [15:0] frame_len, input [15:0] fifo_space, output reg fifo_ready, output reg bus_error ); - reg [10:0] counter; + reg [15:0] counter; // Synchronize the async control signals reg [1:0] cs_del, we_del; always @(posedge fifo_clk) @@ -53,7 +53,11 @@ module gpmc_to_fifo_async else counter <= counter + 1; - assign fifo_ready = first_write & (fifo_space > frame_len); + always @(posedge fifo_clk) + if(fifo_rst) + fifo_ready <= 0; + else + fifo_ready <= first_write & (fifo_space > frame_len); always @(posedge fifo_clk) if(fifo_rst) -- cgit v1.2.3 From aeed16ec6e220f99df41534febe85336e5b384e6 Mon Sep 17 00:00:00 2001 From: Matt Ettus Date: Fri, 23 Apr 2010 18:06:28 -0700 Subject: Only allow new packets if we can fit the largest possible packet (2KB) --- usrp2/gpmc/gpmc_to_fifo_async.v | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/usrp2/gpmc/gpmc_to_fifo_async.v b/usrp2/gpmc/gpmc_to_fifo_async.v index 38f1165fc..6232244d4 100644 --- a/usrp2/gpmc/gpmc_to_fifo_async.v +++ b/usrp2/gpmc/gpmc_to_fifo_async.v @@ -57,7 +57,7 @@ module gpmc_to_fifo_async if(fifo_rst) fifo_ready <= 0; else - fifo_ready <= first_write & (fifo_space > frame_len); + fifo_ready <= first_write & (fifo_space > 16'd1023); always @(posedge fifo_clk) if(fifo_rst) -- cgit v1.2.3 From ae4b885e3533a73f0781e2fdb892f5d505081240 Mon Sep 17 00:00:00 2001 From: Matt Ettus Date: Sat, 24 Apr 2010 22:58:06 -0700 Subject: Pass previously unused GPIOs to debug pins to help debug interrupts --- usrp2/top/u1e/u1e.ucf | 24 ++++++++++++------------ usrp2/top/u1e/u1e.v | 7 +++++++ usrp2/top/u1e/u1e_core.v | 6 ++---- 3 files changed, 21 insertions(+), 16 deletions(-) diff --git a/usrp2/top/u1e/u1e.ucf b/usrp2/top/u1e/u1e.ucf index 1c8dfc197..9c42b00ac 100644 --- a/usrp2/top/u1e/u1e.ucf +++ b/usrp2/top/u1e/u1e.ucf @@ -47,22 +47,22 @@ NET "EM_NOE" LOC = "A14" ; #NET "EM_NWP" LOC = "F13" ; ## Overo GPIO -#NET "overo_gpio0" LOC = "F9" ; -#NET "overo_gpio14" LOC = "C4" ; -#NET "overo_gpio21" LOC = "D5" ; -#NET "overo_gpio22" LOC = "A3" ; -#NET "overo_gpio23" LOC = "B3" ; -#NET "overo_gpio64" LOC = "A4" ; -#NET "overo_gpio65" LOC = "F8" ; -#NET "overo_gpio127" LOC = "C8" ; -#NET "overo_gpio128" LOC = "G8" ; +NET "overo_gpio0" LOC = "F9" ; # MISC GPIO for debug +NET "overo_gpio14" LOC = "C4" ; # MISC GPIO for debug +NET "overo_gpio21" LOC = "D5" ; # MISC GPIO for debug +NET "overo_gpio22" LOC = "A3" ; # MISC GPIO for debug +NET "overo_gpio23" LOC = "B3" ; # MISC GPIO for debug +NET "overo_gpio64" LOC = "A4" ; # MISC GPIO for debug +NET "overo_gpio65" LOC = "F8" ; # MISC GPIO for debug +NET "overo_gpio127" LOC = "C8" ; # MISC GPIO for debug +NET "overo_gpio128" LOC = "G8" ; # MISC GPIO for debug NET "overo_gpio144" LOC = "A5" ; # tx_have_space NET "overo_gpio145" LOC = "C7" ; # tx_underrun NET "overo_gpio146" LOC = "A6" ; # rx_have_data NET "overo_gpio147" LOC = "B6" ; # rx_overrun -#NET "overo_gpio163" LOC = "D7" ; -#NET "overo_gpio170" LOC = "E8" ; -#NET "overo_gpio176" LOC = "B4" ; +NET "overo_gpio163" LOC = "D7" ; # MISC GPIO for debug +NET "overo_gpio170" LOC = "E8" ; # MISC GPIO for debug +NET "overo_gpio176" LOC = "B4" ; # MISC GPIO for debug ## Overo UART #NET "overo_txd1" LOC = "C6" ; diff --git a/usrp2/top/u1e/u1e.v b/usrp2/top/u1e/u1e.v index b8f716d26..2ed6b71c8 100644 --- a/usrp2/top/u1e/u1e.v +++ b/usrp2/top/u1e/u1e.v @@ -20,6 +20,10 @@ module u1e input cgen_st_status, input cgen_st_ld, input cgen_st_refmon, output cgen_sync_b, output cgen_ref_sel, output overo_gpio144, output overo_gpio145, output overo_gpio146, output overo_gpio147, // Fifo controls + input overo_gpio0, input overo_gpio14, input overo_gpio21, input overo_gpio22, // Misc GPIO + input overo_gpio23, input overo_gpio64, input overo_gpio65, input overo_gpio127, // Misc GPIO + input overo_gpio128, input overo_gpio163, input overo_gpio170, input overo_gpio176, // Misc GPIO + inout [15:0] io_tx, inout [15:0] io_rx, input PPS_IN ); @@ -52,6 +56,9 @@ module u1e .tx_have_space(overo_gpio144), .tx_underrun(overo_gpio145), .rx_have_data(overo_gpio146), .rx_overrun(overo_gpio147), .io_tx(io_tx), .io_rx(io_rx), + .misc_gpio( {{overo_gpio128,overo_gpio163,overo_gpio170,overo_gpio176}, + {overo_gpio0,overo_gpio14,overo_gpio21,overo_gpio22}, + {overo_gpio23,overo_gpio64,overo_gpio65,overo_gpio127}}), .pps_in(PPS_IN) ); endmodule // u1e diff --git a/usrp2/top/u1e/u1e_core.v b/usrp2/top/u1e/u1e_core.v index 9e65faeed..e67b1b158 100644 --- a/usrp2/top/u1e/u1e_core.v +++ b/usrp2/top/u1e/u1e_core.v @@ -13,9 +13,7 @@ module u1e_core input cgen_st_status, input cgen_st_ld, input cgen_st_refmon, output cgen_sync_b, output cgen_ref_sel, output tx_have_space, output tx_underrun, output rx_have_data, output rx_overrun, - inout [15:0] io_tx, inout [15:0] io_rx, - - input pps_in + inout [15:0] io_tx, inout [15:0] io_rx, input [11:0] misc_gpio, input pps_in ); wire wb_clk = clk_fpga; @@ -273,6 +271,6 @@ module u1e_core { EM_D } }; assign debug_gpio_0 = { debug_gpmc }; - assign debug_gpio_1 = { debug_txd, debug_rxd }; + assign debug_gpio_1 = { misc_gpio }; endmodule // u1e_core -- cgit v1.2.3 From 97af4bd12673fbb8d68dd087690dabb3e9488c4d Mon Sep 17 00:00:00 2001 From: Matt Ettus Date: Mon, 26 Apr 2010 17:15:53 -0700 Subject: send bus error to debug pins --- usrp2/top/u1e/u1e_core.v | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/usrp2/top/u1e/u1e_core.v b/usrp2/top/u1e/u1e_core.v index e67b1b158..f231791da 100644 --- a/usrp2/top/u1e/u1e_core.v +++ b/usrp2/top/u1e/u1e_core.v @@ -36,6 +36,8 @@ module u1e_core wire tx_src_rdy, tx_dst_rdy, rx_src_rdy, rx_dst_rdy; reg [15:0] tx_frame_len; wire [15:0] rx_frame_len; + + wire bus_error; gpmc_async gpmc (.arst(wb_rst), .EM_CLK(EM_CLK), .EM_D(EM_D), .EM_A(EM_A), .EM_NBE(EM_NBE), @@ -43,7 +45,7 @@ module u1e_core .EM_NOE(EM_NOE), .rx_have_data(rx_have_data), .tx_have_space(tx_have_space), - .bus_error(), .bus_reset(0), + .bus_error(bus_error), .bus_reset(0), .wb_clk(wb_clk), .wb_rst(wb_rst), .wb_adr_o(m0_adr), .wb_dat_mosi(m0_dat_mosi), .wb_dat_miso(m0_dat_miso), @@ -271,6 +273,6 @@ module u1e_core { EM_D } }; assign debug_gpio_0 = { debug_gpmc }; - assign debug_gpio_1 = { misc_gpio }; + assign debug_gpio_1 = { bus_error, misc_gpio[11:0] }; endmodule // u1e_core -- cgit v1.2.3 From eb5bfb963459dbb3e51df49b5aa22fcbda1627d5 Mon Sep 17 00:00:00 2001 From: Matt Ettus Date: Wed, 28 Apr 2010 17:03:14 -0700 Subject: separate timed tx and rx instead of loopback --- usrp2/top/u1e/u1e_core.v | 54 +++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 51 insertions(+), 3 deletions(-) diff --git a/usrp2/top/u1e/u1e_core.v b/usrp2/top/u1e/u1e_core.v index f231791da..d5a3ddf68 100644 --- a/usrp2/top/u1e/u1e_core.v +++ b/usrp2/top/u1e/u1e_core.v @@ -58,12 +58,48 @@ module u1e_core .tx_frame_len(tx_frame_len), .rx_frame_len(rx_frame_len), .debug(debug_gpmc)); - +/* fifo_cascade #(.WIDTH(36), .SIZE(9)) loopback_fifo (.clk(wb_clk), .reset(wb_rst), .clear(0), .datain(tx_data), .src_rdy_i(tx_src_rdy), .dst_rdy_o(tx_dst_rdy), .dataout(rx_data), .src_rdy_o(rx_src_rdy), .dst_rdy_i(rx_dst_rdy)); +*/ + wire tx_strobe, rx_strobe, tx_enable, rx_enable; + wire [7:0] rate; + wire tx_fifo_rdy, rx_fifo_rdy; + + cic_strober tx_strober (.clock(wb_clk), .reset(wb_rst), .enable(tx_enable), + .rate(rate), .strobe_fast(1), .strobe_slow(tx_strobe)); + + fifo_cascade #(.WIDTH(36), .SIZE(11)) tx_fifo + (.clk(wb_clk), .reset(wb_rst), .clear(0), + .datain(tx_data), .src_rdy_i(tx_src_rdy), .dst_rdy_o(tx_dst_rdy), + .dataout(), .src_rdy_o(tx_fifo_rdy), .dst_rdy_i(tx_strobe)); + + + reg [15:0] ctr; + wire [15:0] rx_pkt_len = 480; + wire rx_eof = (ctr == rx_pkt_len); + wire rx_sof = (ctr == 0); + + cic_strober rx_strober (.clock(wb_clk), .reset(wb_rst), .enable(rx_enable), + .rate(rate), .strobe_fast(1), .strobe_slow(rx_strobe)); + + fifo_cascade #(.WIDTH(36), .SIZE(11)) rx_fifo + (.clk(wb_clk), .reset(wb_rst), .clear(0), + .datain({2'b00,rx_eof,rx_sof,16'd0,ctr}), .src_rdy_i(rx_strobe), .dst_rdy_o(rx_fifo_rdy), + .dataout(rx_data), .src_rdy_o(rx_src_rdy), .dst_rdy_i(rx_dst_rdy)); + always @(posedge wb_clk) + if(wb_rst) + ctr <= 0; + else if(rx_strobe & rx_fifo_rdy) + if(ctr == rx_pkt_len) + ctr <= 0; + else + ctr <= ctr + 1; + + // ///////////////////////////////////////////////////////////////////////////////////// // Wishbone Intercon, single master wire [dw-1:0] s0_dat_mosi, s1_dat_mosi, s0_dat_miso, s1_dat_miso, s2_dat_mosi, s3_dat_mosi, s2_dat_miso, s3_dat_miso, @@ -136,7 +172,7 @@ module u1e_core // ///////////////////////////////////////////////////////////////////////////////////// // Slave 0, Misc LEDs, Switches, controls - reg [15:0] reg_leds, reg_cgen_ctrl, reg_test; + reg [15:0] reg_leds, reg_cgen_ctrl, reg_test, xfer_rate; localparam REG_LEDS = 7'd0; // out localparam REG_SWITCHES = 7'd2; // in @@ -145,6 +181,7 @@ module u1e_core localparam REG_TEST = 7'd8; // out localparam REG_RX_FRAMELEN = 7'd10; // out localparam REG_TX_FRAMELEN = 7'd12; // in + localparam REG_XFER_RATE = 7'd14; // in always @(posedge wb_clk) if(wb_rst) @@ -152,6 +189,8 @@ module u1e_core reg_leds <= 0; reg_cgen_ctrl <= 2'b11; reg_test <= 0; + tx_frame_len <= 0; + xfer_rate <= 0; end else if(s0_cyc & s0_stb & s0_we) @@ -164,7 +203,13 @@ module u1e_core reg_test <= s0_dat_mosi; REG_TX_FRAMELEN : tx_frame_len <= s0_dat_mosi; + REG_XFER_RATE : + xfer_rate <= s0_dat_mosi; endcase // case (s0_adr[6:0]) + + assign tx_enable = xfer_rate[15]; + assign rx_enable = xfer_rate[14]; + assign rate = xfer_rate[7:0]; assign { debug_led[2],debug_led[0],debug_led[1] } = reg_leds; // LEDs are arranged funny on board assign { cgen_sync_b, cgen_ref_sel } = reg_cgen_ctrl; @@ -273,6 +318,9 @@ module u1e_core { EM_D } }; assign debug_gpio_0 = { debug_gpmc }; - assign debug_gpio_1 = { bus_error, misc_gpio[11:0] }; + assign debug_gpio_1 = { {rx_enable, rx_strobe, rx_fifo_rdy, rx_strobe & ~rx_fifo_rdy}, + {tx_enable, tx_strobe, tx_fifo_rdy, tx_strobe & ~tx_fifo_rdy}, + {rx_sof, rx_eof, rx_src_rdy, rx_dst_rdy, rx_data[33:32],2'b0}, + {3'b0, bus_error, misc_gpio[11:0]} }; endmodule // u1e_core -- cgit v1.2.3 From b30cbe85e8537de6a94e481a57033b5e57a73e12 Mon Sep 17 00:00:00 2001 From: Matt Ettus Date: Mon, 3 May 2010 12:34:45 -0700 Subject: have_space and have_packet now stay high even while busy, as long as there really is more data/space. This should allow bursting without having additional interrupts. Also lenghten RX FIFO --- usrp2/gpmc/fifo_watcher.v | 6 ++++-- usrp2/gpmc/gpmc_async.v | 2 +- usrp2/gpmc/gpmc_to_fifo_async.v | 2 +- 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/usrp2/gpmc/fifo_watcher.v b/usrp2/gpmc/fifo_watcher.v index 7a3f00483..4bba142b0 100644 --- a/usrp2/gpmc/fifo_watcher.v +++ b/usrp2/gpmc/fifo_watcher.v @@ -10,11 +10,13 @@ module fifo_watcher wire read = src_rdy2 & dst_rdy2 & eof2; wire have_packet_int; reg [15:0] counter; + wire [4:0] pkt_count; fifo_short #(.WIDTH(16)) frame_lengths (.clk(clk), .reset(reset), .clear(clear), .datain(counter), .src_rdy_i(write), .dst_rdy_o(), - .dataout(length), .src_rdy_o(have_packet_int), .dst_rdy_i(read) ); + .dataout(length), .src_rdy_o(have_packet_int), .dst_rdy_i(read), + .occupied(pkt_count), .space()); always @(posedge clk) if(reset | clear) @@ -38,7 +40,7 @@ module fifo_watcher if(reset | clear) have_packet <= 0; else - have_packet <= have_packet_int & ~in_packet; + have_packet <= (have_packet_int & ~in_packet) | (pkt_count>1) ; always @(posedge clk) if(reset | clear) diff --git a/usrp2/gpmc/gpmc_async.v b/usrp2/gpmc/gpmc_async.v index 02a00ce57..dd06478b3 100644 --- a/usrp2/gpmc/gpmc_async.v +++ b/usrp2/gpmc/gpmc_async.v @@ -78,7 +78,7 @@ module gpmc_async .f36_datain(rx_data_i), .f36_src_rdy_i(rx_src_rdy_i), .f36_dst_rdy_o(rx_dst_rdy_o), .f18_dataout(rx18_data), .f18_src_rdy_o(rx18_src_rdy), .f18_dst_rdy_i(rx18_dst_rdy) ); - fifo_cascade #(.WIDTH(18), .SIZE(10)) rx_fifo + fifo_cascade #(.WIDTH(18), .SIZE(12)) rx_fifo (.clk(fifo_clk), .reset(fifo_rst), .clear(0), .datain(rx18_data), .src_rdy_i(rx18_src_rdy), .dst_rdy_o(rx18_dst_rdy), .space(rx_fifo_space), .dataout(rx18b_data), .src_rdy_o(rx18b_src_rdy), .dst_rdy_i(rx18b_dst_rdy), .occupied()); diff --git a/usrp2/gpmc/gpmc_to_fifo_async.v b/usrp2/gpmc/gpmc_to_fifo_async.v index 6232244d4..3d29745a2 100644 --- a/usrp2/gpmc/gpmc_to_fifo_async.v +++ b/usrp2/gpmc/gpmc_to_fifo_async.v @@ -57,7 +57,7 @@ module gpmc_to_fifo_async if(fifo_rst) fifo_ready <= 0; else - fifo_ready <= first_write & (fifo_space > 16'd1023); + fifo_ready <= /* first_write & */ (fifo_space > 16'd1023); always @(posedge fifo_clk) if(fifo_rst) -- cgit v1.2.3 From c4698bb0a42b60dea924a83d18b27131a15958a2 Mon Sep 17 00:00:00 2001 From: Matt Ettus Date: Tue, 4 May 2010 09:44:28 -0700 Subject: changed comment --- usrp2/top/u1e/u1e.ucf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/usrp2/top/u1e/u1e.ucf b/usrp2/top/u1e/u1e.ucf index 9c42b00ac..055a1ef17 100644 --- a/usrp2/top/u1e/u1e.ucf +++ b/usrp2/top/u1e/u1e.ucf @@ -254,7 +254,7 @@ NET "io_rx<15>" LOC = "Y4" ; #NET "fpga_cfg_cclk" LOC = "V17" ; #NET "fpga_cfg_init_b" LOC = "W15" ; -## Unnamed, need to figure out what they do +## Unused #NET "unnamed_net37" LOC = "B1" ; # TMS #NET "unnamed_net36" LOC = "B22" ; # TDO #NET "unnamed_net35" LOC = "D2" ; # TDI -- cgit v1.2.3 From 031becd1f05f0fbcab6a4f2be353292cd667a88f Mon Sep 17 00:00:00 2001 From: Matt Ettus Date: Tue, 4 May 2010 12:30:56 -0700 Subject: add timing constraints. Just have main clock signal at 64 MHz for now. --- usrp2/top/u1e/Makefile | 1 + usrp2/top/u1e/timing.ucf | 13 +++++++++++++ 2 files changed, 14 insertions(+) create mode 100644 usrp2/top/u1e/timing.ucf diff --git a/usrp2/top/u1e/Makefile b/usrp2/top/u1e/Makefile index 5f712b046..2aebb33f9 100644 --- a/usrp2/top/u1e/Makefile +++ b/usrp2/top/u1e/Makefile @@ -186,6 +186,7 @@ gpmc/fifo_watcher.v \ gpmc/gpmc_wb.v \ top/u1e/u1e_core.v \ top/u1e/u1e.ucf \ +top/u1e/timing.ucf \ top/u1e/u1e.v ################################################## diff --git a/usrp2/top/u1e/timing.ucf b/usrp2/top/u1e/timing.ucf new file mode 100644 index 000000000..8df28c9d3 --- /dev/null +++ b/usrp2/top/u1e/timing.ucf @@ -0,0 +1,13 @@ + +NET "CLK_FPGA_P" TNM_NET = "CLK_FPGA_P"; +TIMESPEC "TS_clk_fpga_p" = PERIOD "CLK_FPGA_P" 15625 ps HIGH 50 %; + + + + +#NET "adc_a<*>" TNM_NET = ADC_DATA_GRP; +#NET "adc_b<*>" TNM_NET = ADC_DATA_GRP; +#TIMEGRP "ADC_DATA_GRP" OFFSET = IN 1 ns VALID 5 ns BEFORE "clk_fpga_p" RISING; + +#NET "adc_a<*>" OFFSET = IN 1 ns VALID 5 ns BEFORE "clk_fpga_p" RISING; +#NET "adc_b<*>" OFFSET = IN 1 ns VALID 5 ns BEFORE "clk_fpga_p" RISING; -- cgit v1.2.3 From 2ddaba2d8bdcdda07b949f007d2555cf57c7c8d7 Mon Sep 17 00:00:00 2001 From: Matt Ettus Date: Tue, 4 May 2010 15:06:03 -0700 Subject: added DAC output pins, and a sine wave generator to test them --- usrp2/top/u1e/u1e.ucf | 32 ++++++++++++++++---------------- usrp2/top/u1e/u1e.v | 4 ++++ usrp2/top/u1e/u1e_core.v | 45 +++++++++++++++++++++++++++++++++++++++++++-- 3 files changed, 63 insertions(+), 18 deletions(-) diff --git a/usrp2/top/u1e/u1e.ucf b/usrp2/top/u1e/u1e.ucf index 055a1ef17..a73ebceb8 100644 --- a/usrp2/top/u1e/u1e.ucf +++ b/usrp2/top/u1e/u1e.ucf @@ -191,22 +191,22 @@ NET "dip_sw<0>" LOC = "J7" ; #NET "DA<1>" LOC = "P22" ; #NET "DA<0>" LOC = "N17" ; -#NET "TX<13>" LOC = "P19" ; -#NET "TX<12>" LOC = "R18" ; -#NET "TX<11>" LOC = "U20" ; -#NET "TX<10>" LOC = "T20" ; -#NET "TX<9>" LOC = "R19" ; -#NET "TX<8>" LOC = "R20" ; -#NET "TX<7>" LOC = "W22" ; -#NET "TX<6>" LOC = "Y22" ; -#NET "TX<5>" LOC = "T18" ; -#NET "TX<4>" LOC = "T17" ; -#NET "TX<3>" LOC = "W19" ; -#NET "TX<2>" LOC = "V20" ; -#NET "TX<1>" LOC = "Y21" ; -#NET "TX<0>" LOC = "AA22" ; -#NET "TXSYNC" LOC = "U18" ; -#NET "TXBLANK" LOC = "U19" ; +NET "TX<13>" LOC = "P19" ; +NET "TX<12>" LOC = "R18" ; +NET "TX<11>" LOC = "U20" ; +NET "TX<10>" LOC = "T20" ; +NET "TX<9>" LOC = "R19" ; +NET "TX<8>" LOC = "R20" ; +NET "TX<7>" LOC = "W22" ; +NET "TX<6>" LOC = "Y22" ; +NET "TX<5>" LOC = "T18" ; +NET "TX<4>" LOC = "T17" ; +NET "TX<3>" LOC = "W19" ; +NET "TX<2>" LOC = "V20" ; +NET "TX<1>" LOC = "Y21" ; +NET "TX<0>" LOC = "AA22" ; +NET "TXSYNC" LOC = "U18" ; +NET "TXBLANK" LOC = "U19" ; NET "PPS_IN" LOC = "M17" ; diff --git a/usrp2/top/u1e/u1e.v b/usrp2/top/u1e/u1e.v index 2ed6b71c8..35818e8c8 100644 --- a/usrp2/top/u1e/u1e.v +++ b/usrp2/top/u1e/u1e.v @@ -25,6 +25,9 @@ module u1e input overo_gpio128, input overo_gpio163, input overo_gpio170, input overo_gpio176, // Misc GPIO inout [15:0] io_tx, inout [15:0] io_rx, + + output [13:0] TX, output TXSYNC, output TXBLANK, + input PPS_IN ); @@ -56,6 +59,7 @@ module u1e .tx_have_space(overo_gpio144), .tx_underrun(overo_gpio145), .rx_have_data(overo_gpio146), .rx_overrun(overo_gpio147), .io_tx(io_tx), .io_rx(io_rx), + .tx(TX), .txsync(TXSYNC), .txblank(TXBLANK), .misc_gpio( {{overo_gpio128,overo_gpio163,overo_gpio170,overo_gpio176}, {overo_gpio0,overo_gpio14,overo_gpio21,overo_gpio22}, {overo_gpio23,overo_gpio64,overo_gpio65,overo_gpio127}}), diff --git a/usrp2/top/u1e/u1e_core.v b/usrp2/top/u1e/u1e_core.v index d5a3ddf68..74ffc4657 100644 --- a/usrp2/top/u1e/u1e_core.v +++ b/usrp2/top/u1e/u1e_core.v @@ -13,7 +13,10 @@ module u1e_core input cgen_st_status, input cgen_st_ld, input cgen_st_refmon, output cgen_sync_b, output cgen_ref_sel, output tx_have_space, output tx_underrun, output rx_have_data, output rx_overrun, - inout [15:0] io_tx, inout [15:0] io_rx, input [11:0] misc_gpio, input pps_in + inout [15:0] io_tx, inout [15:0] io_rx, + output reg [13:0] tx, output reg txsync, output txblank, + + input [11:0] misc_gpio, input pps_in ); wire wb_clk = clk_fpga; @@ -213,7 +216,7 @@ module u1e_core assign { debug_led[2],debug_led[0],debug_led[1] } = reg_leds; // LEDs are arranged funny on board assign { cgen_sync_b, cgen_ref_sel } = reg_cgen_ctrl; - assign { rx_overrun, tx_underrun } = reg_test; + assign { rx_overrun, tx_underrun } = 0; // reg_test; assign s0_dat_miso = (s0_adr[6:0] == REG_LEDS) ? reg_leds : (s0_adr[6:0] == REG_SWITCHES) ? {5'b0,debug_pb[2:0],dip_sw[7:0]} : @@ -309,6 +312,44 @@ module u1e_core time_64bit #(.TICKS_PER_SEC(32'd64000000),.BASE(SR_TIME64)) time_64bit (.clk(wb_clk), .rst(wb_rst), .set_stb(set_stb), .set_addr(set_addr), .set_data(set_data), .pps(pps_in), .vita_time(vita_time), .pps_int(pps_int)); + + + // ///////////////////////////////////////////////////////////////////////// + // TX + + assign txblank = 0; + + wire [23:0] freq = {reg_test,8'd0}; + + reg [23:0] tx_q_hold; + wire [23:0] tx_i, tx_q; + + reg tx_stb; + always @(posedge wb_clk) + tx_stb <= ~tx_stb; + + always @(posedge wb_clk) + if(tx_stb) + tx <= tx_i[23:10]; + else + tx <= tx_q_hold[23:10]; + + always @(posedge wb_clk) + if(tx_stb) + tx_q_hold <= tx_q; + + always @(posedge wb_clk) + txsync <= ~tx_stb; // TX Sync low indicates first data item + // We invert here if we don't use inv_txsync in the 9862 + + reg [23:0] phase; + always @(posedge wb_clk) + if(tx_stb) + phase <= phase + freq; + + cordic_z24 #(.bitwidth(24)) tx_cordic + (.clock(wb_clk), .reset(wb_rst), .enable(1), + .xi(24'd15000), .yi(24'd0), .zi(phase), .xo(tx_i), .yo(tx_q), .zo()); // ///////////////////////////////////////////////////////////////////////////////////// // Debug circuitry -- cgit v1.2.3 From 45d92a0610582672cea4f1d97d116af00eac7bef Mon Sep 17 00:00:00 2001 From: Matt Ettus Date: Fri, 7 May 2010 10:27:33 -0700 Subject: SPI passthru for programming clock gen chip on brand new boards --- usrp2/top/u1e_passthru/Makefile | 107 +++++++++++++++ usrp2/top/u1e_passthru/passthru.ucf | 266 ++++++++++++++++++++++++++++++++++++ usrp2/top/u1e_passthru/passthru.v | 18 +++ 3 files changed, 391 insertions(+) create mode 100644 usrp2/top/u1e_passthru/Makefile create mode 100644 usrp2/top/u1e_passthru/passthru.ucf create mode 100644 usrp2/top/u1e_passthru/passthru.v diff --git a/usrp2/top/u1e_passthru/Makefile b/usrp2/top/u1e_passthru/Makefile new file mode 100644 index 000000000..62923f87f --- /dev/null +++ b/usrp2/top/u1e_passthru/Makefile @@ -0,0 +1,107 @@ +# +# Copyright 2008 Ettus Research LLC +# + +################################################## +# xtclsh Shell and tcl Script Path +################################################## +#XTCLSH := /opt/Xilinx/10.1/ISE/bin/lin/xtclsh +XTCLSH := xtclsh +ISE_HELPER := ../tcl/ise_helper.tcl + +################################################## +# Project Setup +################################################## +BUILD_DIR := build/ +export TOP_MODULE := passthru +export PROJ_FILE := $(BUILD_DIR)$(TOP_MODULE).ise + +################################################## +# Project Properties +################################################## +export PROJECT_PROPERTIES := \ +family "Spartan-3A DSP" \ +device xc3sd1800a \ +package cs484 \ +speed -4 \ +top_level_module_type "HDL" \ +synthesis_tool "XST (VHDL/Verilog)" \ +simulator "ISE Simulator (VHDL/Verilog)" \ +"Preferred Language" "Verilog" \ +"Enable Message Filtering" FALSE \ +"Display Incremental Messages" FALSE + +################################################## +# Sources +################################################## +export SOURCE_ROOT := ../../../ +export SOURCES := \ +top/u1e_passthru/passthru.ucf \ +top/u1e_passthru/passthru.v + +################################################## +# Process Properties +################################################## +export SYNTHESIZE_PROPERTIES := \ +"Number of Clock Buffers" 6 \ +"Pack I/O Registers into IOBs" Yes \ +"Optimization Effort" High \ +"Optimize Instantiated Primitives" TRUE \ +"Register Balancing" Yes \ +"Use Clock Enable" Auto \ +"Use Synchronous Reset" Auto \ +"Use Synchronous Set" Auto + +export TRANSLATE_PROPERTIES := \ +"Macro Search Path" "$(shell pwd)/../../coregen/" + +export MAP_PROPERTIES := \ +"Allow Logic Optimization Across Hierarchy" TRUE \ +"Map to Input Functions" 4 \ +"Optimization Strategy (Cover Mode)" Speed \ +"Pack I/O Registers/Latches into IOBs" "For Inputs and Outputs" \ +"Perform Timing-Driven Packing and Placement" TRUE \ +"Map Effort Level" High \ +"Extra Effort" Normal \ +"Combinatorial Logic Optimization" TRUE \ +"Register Duplication" TRUE + +export PLACE_ROUTE_PROPERTIES := \ +"Place & Route Effort Level (Overall)" High + +export STATIC_TIMING_PROPERTIES := \ +"Number of Paths in Error/Verbose Report" 10 \ +"Report Type" "Error Report" + +export GEN_PROG_FILE_PROPERTIES := \ +"Configuration Rate" 6 \ +"Create Binary Configuration File" TRUE \ +"Done (Output Events)" 5 \ +"Enable Bitstream Compression" TRUE \ +"Enable Outputs (Output Events)" 6 \ +"Unused IOB Pins" "Pull Up" + +export SIM_MODEL_PROPERTIES := "" + +################################################## +# Make Options +################################################## +all: + @echo make proj, check, synth, bin, or clean + +proj: + PROCESS_RUN="" $(XTCLSH) $(ISE_HELPER) + +check: + PROCESS_RUN="Check Syntax" $(XTCLSH) $(ISE_HELPER) + +synth: + PROCESS_RUN="Synthesize - XST" $(XTCLSH) $(ISE_HELPER) + +bin: + PROCESS_RUN="Generate Programming File" $(XTCLSH) $(ISE_HELPER) + +clean: + rm -rf $(BUILD_DIR) + + diff --git a/usrp2/top/u1e_passthru/passthru.ucf b/usrp2/top/u1e_passthru/passthru.ucf new file mode 100644 index 000000000..1672132a2 --- /dev/null +++ b/usrp2/top/u1e_passthru/passthru.ucf @@ -0,0 +1,266 @@ + +#NET "CLK_FPGA_P" LOC = "Y11" ; +#NET "CLK_FPGA_N" LOC = "Y10" ; + +## GPMC +#NET "EM_D<15>" LOC = "D13" ; +#NET "EM_D<14>" LOC = "D15" ; +#NET "EM_D<13>" LOC = "C16" ; +#NET "EM_D<12>" LOC = "B20" ; +#NET "EM_D<11>" LOC = "A19" ; +#NET "EM_D<10>" LOC = "A17" ; +#NET "EM_D<9>" LOC = "E15" ; +#NET "EM_D<8>" LOC = "F15" ; +#NET "EM_D<7>" LOC = "E16" ; +#NET "EM_D<6>" LOC = "F16" ; +#NET "EM_D<5>" LOC = "B17" ; +#NET "EM_D<4>" LOC = "C17" ; +#NET "EM_D<3>" LOC = "B19" ; +#NET "EM_D<2>" LOC = "D19" ; +#NET "EM_D<1>" LOC = "C19" ; +#NET "EM_D<0>" LOC = "A20" ; + +#NET "EM_A<10>" LOC = "C14" ; +#NET "EM_A<9>" LOC = "C10" ; +#NET "EM_A<8>" LOC = "C5" ; +#NET "EM_A<7>" LOC = "A18" ; +#NET "EM_A<6>" LOC = "A15" ; +#NET "EM_A<5>" LOC = "A12" ; +#NET "EM_A<4>" LOC = "A10" ; +#NET "EM_A<3>" LOC = "E7" ; +#NET "EM_A<2>" LOC = "A7" ; +#NET "EM_A<1>" LOC = "C15" ; + +#NET "EM_NCS6" LOC = "E17" ; +##NET "EM_NCS5" LOC = "E10" ; +#NET "EM_NCS4" LOC = "E6" ; +##NET "EM_NCS1" LOC = "D18" ; +##NET "EM_NCS0" LOC = "D17" ; + +#NET "EM_CLK" LOC = "F11" ; +#NET "EM_WAIT0" LOC = "F14" ; +#NET "EM_NBE<1>" LOC = "D14" ; +#NET "EM_NBE<0>" LOC = "A13" ; +#NET "EM_NWE" LOC = "B13" ; +#NET "EM_NOE" LOC = "A14" ; +##NET "EM_NADV_ALE" LOC = "B15" ; +##NET "EM_NWP" LOC = "F13" ; + +## Overo GPIO +NET "overo_gpio0" LOC = "F9" ; # MISC GPIO for debug +#NET "overo_gpio14" LOC = "C4" ; # MISC GPIO for debug +#NET "overo_gpio21" LOC = "D5" ; # MISC GPIO for debug +#NET "overo_gpio22" LOC = "A3" ; # MISC GPIO for debug +#NET "overo_gpio23" LOC = "B3" ; # MISC GPIO for debug +#NET "overo_gpio64" LOC = "A4" ; # MISC GPIO for debug +#NET "overo_gpio65" LOC = "F8" ; # MISC GPIO for debug +#NET "overo_gpio127" LOC = "C8" ; # MISC GPIO for debug +#NET "overo_gpio128" LOC = "G8" ; # MISC GPIO for debug +#NET "overo_gpio144" LOC = "A5" ; # tx_have_space +#NET "overo_gpio145" LOC = "C7" ; # tx_underrun +#NET "overo_gpio146" LOC = "A6" ; # rx_have_data +#NET "overo_gpio147" LOC = "B6" ; # rx_overrun +#NET "overo_gpio163" LOC = "D7" ; # MISC GPIO for debug +#NET "overo_gpio170" LOC = "E8" ; # MISC GPIO for debug +#NET "overo_gpio176" LOC = "B4" ; # MISC GPIO for debug + +## Overo UART +##NET "overo_txd1" LOC = "C6" ; +##NET "overo_rxd1" LOC = "D6" ; + +## FTDI UART to USB converter +#NET "FPGA_TXD" LOC = "U1" ; +#NET "FPGA_RXD" LOC = "T6" ; + +##NET "SYSEN" LOC = "C11" ; + +## I2C +#NET "db_scl" LOC = "U4" ; +#NET "db_sda" LOC = "U5" ; + +## SPI +### DBoard SPI +#NET "db_sclk_rx" LOC = "W3" ; +#NET "db_miso_rx" LOC = "W2" ; +#NET "db_mosi_rx" LOC = "V4" ; +#NET "db_sen_rx" LOC = "V3" ; +#NET "db_sclk_tx" LOC = "Y1" ; +#NET "db_miso_tx" LOC = "W1" ; +#NET "db_mosi_tx" LOC = "R3" ; +#NET "db_sen_tx" LOC = "T4" ; + +### AD9862 SPI and aux SPI Interfaces +##NET "aux_sdi_codec" LOC = "F19" ; +##NET "aux_sdo_codec" LOC = "F18" ; +##NET "aux_sclk_codec" LOC = "D21" ; +#NET "sen_codec" LOC = "D20" ; +#NET "mosi_codec" LOC = "E19" ; +#NET "miso_codec" LOC = "F21" ; +#NET "sclk_codec" LOC = "E20" ; + +### Clock Gen SPI +#NET "cgen_miso" LOC = "U2" ; +NET "cgen_mosi" LOC = "V1" ; +NET "cgen_sclk" LOC = "R5" ; +NET "cgen_sen_b" LOC = "T1" ; + +## Clock gen control +#NET "cgen_st_status" LOC = "D4" ; +#NET "cgen_st_ld" LOC = "D1" ; +#NET "cgen_st_refmon" LOC = "E1" ; +#NET "cgen_sync_b" LOC = "M1" ; +#NET "cgen_ref_sel" LOC = "J1" ; + +## Debug pins +#NET "debug_led<2>" LOC = "T5" ; +#NET "debug_led<1>" LOC = "R2" ; +#NET "debug_led<0>" LOC = "R1" ; +#NET "debug<0>" LOC = "P6" ; +#NET "debug<1>" LOC = "R6" ; +#NET "debug<2>" LOC = "P1" ; +#NET "debug<3>" LOC = "P2" ; +#NET "debug<4>" LOC = "N6" ; +#NET "debug<5>" LOC = "N5" ; +#NET "debug<6>" LOC = "N1" ; +#NET "debug<7>" LOC = "K2" ; +#NET "debug<8>" LOC = "K3" ; +#NET "debug<9>" LOC = "K6" ; +#NET "debug<10>" LOC = "L5" ; +#NET "debug<11>" LOC = "H2" ; +#NET "debug<12>" LOC = "K4" ; +#NET "debug<13>" LOC = "K5" ; +#NET "debug<14>" LOC = "G1" ; +#NET "debug<15>" LOC = "H1" ; +#NET "debug<16>" LOC = "H5" ; +#NET "debug<17>" LOC = "H6" ; +#NET "debug<18>" LOC = "E3" ; +#NET "debug<19>" LOC = "E4" ; +#NET "debug<20>" LOC = "G5" ; +#NET "debug<21>" LOC = "G6" ; +#NET "debug<22>" LOC = "F2" ; +#NET "debug<23>" LOC = "F1" ; +#NET "debug<24>" LOC = "H3" ; +#NET "debug<25>" LOC = "H4" ; +#NET "debug<26>" LOC = "F4" ; +#NET "debug<27>" LOC = "F5" ; +#NET "debug<28>" LOC = "C2" ; +#NET "debug<29>" LOC = "C1" ; +#NET "debug<30>" LOC = "F3" ; +#NET "debug<31>" LOC = "G3" ; +#NET "debug_clk<0>" LOC = "L6" ; +#NET "debug_clk<1>" LOC = "M5" ; + +#NET "debug_pb<2>" LOC = "Y2" ; +#NET "debug_pb<1>" LOC = "AA1" ; +#NET "debug_pb<0>" LOC = "N3" ; + +#NET "dip_sw<7>" LOC = "T3" ; +#NET "dip_sw<6>" LOC = "U3" ; +#NET "dip_sw<5>" LOC = "M3" ; +#NET "dip_sw<4>" LOC = "N4" ; +#NET "dip_sw<3>" LOC = "J3" ; +#NET "dip_sw<2>" LOC = "J4" ; +#NET "dip_sw<1>" LOC = "J6" ; +#NET "dip_sw<0>" LOC = "J7" ; + +##NET "RXSYNC" LOC = "F22" ; +##NET "reset_codec" LOC = "D22" ; + +##NET "DB<11>" LOC = "E22" ; +##NET "DB<10>" LOC = "J19" ; +##NET "DB<9>" LOC = "H20" ; +##NET "DB<8>" LOC = "G19" ; +##NET "DB<7>" LOC = "F20" ; +##NET "DB<6>" LOC = "K16" ; +##NET "DB<5>" LOC = "J17" ; +##NET "DB<4>" LOC = "H22" ; +##NET "DB<3>" LOC = "G22" ; +##NET "DB<2>" LOC = "H17" ; +##NET "DB<1>" LOC = "H18" ; +##NET "DB<0>" LOC = "K20" ; +##NET "DA<11>" LOC = "J20" ; +##NET "DA<10>" LOC = "K19" ; +##NET "DA<9>" LOC = "K18" ; +##NET "DA<8>" LOC = "L22" ; +##NET "DA<7>" LOC = "K22" ; +##NET "DA<6>" LOC = "N22" ; +##NET "DA<5>" LOC = "M22" ; +##NET "DA<4>" LOC = "N20" ; +##NET "DA<3>" LOC = "N19" ; +##NET "DA<2>" LOC = "R22" ; +##NET "DA<1>" LOC = "P22" ; +##NET "DA<0>" LOC = "N17" ; + +#NET "TX<13>" LOC = "P19" ; +#NET "TX<12>" LOC = "R18" ; +#NET "TX<11>" LOC = "U20" ; +#NET "TX<10>" LOC = "T20" ; +#NET "TX<9>" LOC = "R19" ; +#NET "TX<8>" LOC = "R20" ; +#NET "TX<7>" LOC = "W22" ; +#NET "TX<6>" LOC = "Y22" ; +#NET "TX<5>" LOC = "T18" ; +#NET "TX<4>" LOC = "T17" ; +#NET "TX<3>" LOC = "W19" ; +#NET "TX<2>" LOC = "V20" ; +#NET "TX<1>" LOC = "Y21" ; +#NET "TX<0>" LOC = "AA22" ; +#NET "TXSYNC" LOC = "U18" ; +#NET "TXBLANK" LOC = "U19" ; + +#NET "PPS_IN" LOC = "M17" ; + +#NET "io_tx<0>" LOC = "AB20" ; +#NET "io_tx<1>" LOC = "Y17" ; +#NET "io_tx<2>" LOC = "Y16" ; +#NET "io_tx<3>" LOC = "U16" ; +#NET "io_tx<4>" LOC = "V16" ; +#NET "io_tx<5>" LOC = "AB19" ; +#NET "io_tx<6>" LOC = "AA19" ; +#NET "io_tx<7>" LOC = "U14" ; +#NET "io_tx<8>" LOC = "U15" ; +#NET "io_tx<9>" LOC = "AB17" ; +#NET "io_tx<10>" LOC = "AB18" ; +#NET "io_tx<11>" LOC = "Y13" ; +#NET "io_tx<12>" LOC = "W14" ; +#NET "io_tx<13>" LOC = "U13" ; +#NET "io_tx<14>" LOC = "AA15" ; +#NET "io_tx<15>" LOC = "AB14" ; + +#NET "io_rx<0>" LOC = "Y8" ; +#NET "io_rx<1>" LOC = "Y9" ; +#NET "io_rx<2>" LOC = "V7" ; +#NET "io_rx<3>" LOC = "U8" ; +#NET "io_rx<4>" LOC = "V10" ; +#NET "io_rx<5>" LOC = "U9" ; +#NET "io_rx<6>" LOC = "AB7" ; +#NET "io_rx<7>" LOC = "AA8" ; +#NET "io_rx<8>" LOC = "W8" ; +#NET "io_rx<9>" LOC = "V8" ; +#NET "io_rx<10>" LOC = "AB5" ; +#NET "io_rx<11>" LOC = "AB6" ; +#NET "io_rx<12>" LOC = "AB4" ; +#NET "io_rx<13>" LOC = "AA4" ; +#NET "io_rx<14>" LOC = "W5" ; +#NET "io_rx<15>" LOC = "Y4" ; + +##NET "CLKOUT2_CODEC" LOC = "U12" ; +##NET "CLKOUT1_CODEC" LOC = "V12" ; + +## FPGA Config Pins +##NET "fpga_cfg_prog_b" LOC = "A2" ; +##NET "fpga_cfg_done" LOC = "AB21" ; +NET "fpga_cfg_din" LOC = "W17" ; +NET "fpga_cfg_cclk" LOC = "V17" ; +##NET "fpga_cfg_init_b" LOC = "W15" ; + +## Unused +##NET "unnamed_net37" LOC = "B1" ; # TMS +##NET "unnamed_net36" LOC = "B22" ; # TDO +##NET "unnamed_net35" LOC = "D2" ; # TDI +##NET "unnamed_net34" LOC = "A21" ; # TCK +##NET "unnamed_net45" LOC = "F7" ; # PUDC_B +##NET "unnamed_net44" LOC = "V6" ; # M2 +##NET "unnamed_net43" LOC = "AA3" ; # M1 +##NET "unnamed_net42" LOC = "AB3" ; # M0 +##NET "GND" LOC = "V19" ; # Suspend, unused diff --git a/usrp2/top/u1e_passthru/passthru.v b/usrp2/top/u1e_passthru/passthru.v new file mode 100644 index 000000000..459c226ee --- /dev/null +++ b/usrp2/top/u1e_passthru/passthru.v @@ -0,0 +1,18 @@ +`timescale 1ns / 1ps +////////////////////////////////////////////////////////////////////////////////// + +module passthru + (input overo_gpio0, + output cgen_sclk, + output cgen_sen_b, + output cgen_mosi, + input fpga_cfg_din, + input fpga_cfg_cclk + ); + + assign cgen_sclk = fpga_cfg_cclk; + assign cgen_sen_b = overo_gpio0; + assign cgen_mosi = fpga_cfg_din; + + +endmodule // passthru -- cgit v1.2.3 From 4a573b5dcc78f9a13162efce09f0bc31f298a818 Mon Sep 17 00:00:00 2001 From: Matt Ettus Date: Mon, 10 May 2010 13:23:48 -0700 Subject: proper signal level for 24 bit data --- usrp2/top/u1e/u1e_core.v | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/usrp2/top/u1e/u1e_core.v b/usrp2/top/u1e/u1e_core.v index 74ffc4657..a262184a8 100644 --- a/usrp2/top/u1e/u1e_core.v +++ b/usrp2/top/u1e/u1e_core.v @@ -349,15 +349,20 @@ module u1e_core cordic_z24 #(.bitwidth(24)) tx_cordic (.clock(wb_clk), .reset(wb_rst), .enable(1), - .xi(24'd15000), .yi(24'd0), .zi(phase), .xo(tx_i), .yo(tx_q), .zo()); + .xi(24'd2500000), .yi(24'd0), .zi(phase), .xo(tx_i), .yo(tx_q), .zo()); // ///////////////////////////////////////////////////////////////////////////////////// // Debug circuitry assign debug_clk = { EM_CLK, clk_fpga }; - assign debug = { { rx_have_data, tx_have_space, EM_NCS6, EM_NCS4, EM_NWE, EM_NOE, EM_A[10:1] }, +/* + assign debug = { { rx_have_data, tx_have_space, EM_NCS6, EM_NCS4, EM_NWE, EM_NOE, EM_A[10:1] }, { EM_D } }; +*/ + assign debug = { phase[23:8], txsync, txblank, tx }; + + assign debug_gpio_0 = { debug_gpmc }; assign debug_gpio_1 = { {rx_enable, rx_strobe, rx_fifo_rdy, rx_strobe & ~rx_fifo_rdy}, {tx_enable, tx_strobe, tx_fifo_rdy, tx_strobe & ~tx_fifo_rdy}, -- cgit v1.2.3 From 57114cf6579a0c6f8fc4626d4c20e8fc09cddb72 Mon Sep 17 00:00:00 2001 From: Matt Ettus Date: Mon, 10 May 2010 14:56:14 -0700 Subject: switched passthru of cgen_sen_b to gpio127, made a note of it. No more safe_u1e necessary. --- usrp2/top/safe_u1e/.gitignore | 4 - usrp2/top/safe_u1e/Makefile | 246 --------------------------------- usrp2/top/safe_u1e/safe_u1e.ucf | 262 ------------------------------------ usrp2/top/safe_u1e/safe_u1e.v | 41 ------ usrp2/top/u1e/u1e.ucf | 2 +- usrp2/top/u1e_passthru/.gitignore | 1 + usrp2/top/u1e_passthru/passthru.ucf | 4 +- usrp2/top/u1e_passthru/passthru.v | 10 +- 8 files changed, 9 insertions(+), 561 deletions(-) delete mode 100644 usrp2/top/safe_u1e/.gitignore delete mode 100644 usrp2/top/safe_u1e/Makefile delete mode 100644 usrp2/top/safe_u1e/safe_u1e.ucf delete mode 100644 usrp2/top/safe_u1e/safe_u1e.v create mode 100644 usrp2/top/u1e_passthru/.gitignore diff --git a/usrp2/top/safe_u1e/.gitignore b/usrp2/top/safe_u1e/.gitignore deleted file mode 100644 index f8b57ea21..000000000 --- a/usrp2/top/safe_u1e/.gitignore +++ /dev/null @@ -1,4 +0,0 @@ -*~ -build -*.log -*.cmd diff --git a/usrp2/top/safe_u1e/Makefile b/usrp2/top/safe_u1e/Makefile deleted file mode 100644 index d28cc2b89..000000000 --- a/usrp2/top/safe_u1e/Makefile +++ /dev/null @@ -1,246 +0,0 @@ -# -# Copyright 2008 Ettus Research LLC -# -# 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. -# - -################################################## -# xtclsh Shell and tcl Script Path -################################################## -#XTCLSH := /opt/Xilinx/10.1/ISE/bin/lin/xtclsh -XTCLSH := xtclsh -ISE_HELPER := ../tcl/ise_helper.tcl - -################################################## -# Project Setup -################################################## -BUILD_DIR := build/ -export TOP_MODULE := safe_u1e -export PROJ_FILE := $(BUILD_DIR)$(TOP_MODULE).ise - -################################################## -# Project Properties -################################################## -export PROJECT_PROPERTIES := \ -family "Spartan-3A DSP" \ -device xc3sd1800a \ -package cs484 \ -speed -4 \ -top_level_module_type "HDL" \ -synthesis_tool "XST (VHDL/Verilog)" \ -simulator "ISE Simulator (VHDL/Verilog)" \ -"Preferred Language" "Verilog" \ -"Enable Message Filtering" FALSE \ -"Display Incremental Messages" FALSE - -################################################## -# Sources -################################################## -export SOURCE_ROOT := ../../../ -export SOURCES := \ -control_lib/CRC16_D16.v \ -control_lib/atr_controller.v \ -control_lib/bin2gray.v \ -control_lib/dcache.v \ -control_lib/decoder_3_8.v \ -control_lib/dpram32.v \ -control_lib/gray2bin.v \ -control_lib/gray_send.v \ -control_lib/icache.v \ -control_lib/mux4.v \ -control_lib/mux8.v \ -control_lib/nsgpio.v \ -control_lib/ram_2port.v \ -control_lib/ram_harv_cache.v \ -control_lib/ram_loader.v \ -control_lib/setting_reg.v \ -control_lib/settings_bus.v \ -control_lib/srl.v \ -control_lib/system_control.v \ -control_lib/wb_1master.v \ -control_lib/wb_readback_mux.v \ -control_lib/simple_uart.v \ -control_lib/simple_uart_tx.v \ -control_lib/simple_uart_rx.v \ -control_lib/oneshot_2clk.v \ -control_lib/sd_spi.v \ -control_lib/sd_spi_wb.v \ -control_lib/wb_bridge_16_32.v \ -control_lib/reset_sync.v \ -simple_gemac/simple_gemac_wrapper.v \ -simple_gemac/simple_gemac.v \ -simple_gemac/simple_gemac_wb.v \ -simple_gemac/simple_gemac_tx.v \ -simple_gemac/simple_gemac_rx.v \ -simple_gemac/crc.v \ -simple_gemac/delay_line.v \ -simple_gemac/flow_ctrl_tx.v \ -simple_gemac/flow_ctrl_rx.v \ -simple_gemac/address_filter.v \ -simple_gemac/ll8_to_txmac.v \ -simple_gemac/rxmac_to_ll8.v \ -simple_gemac/miim/eth_miim.v \ -simple_gemac/miim/eth_clockgen.v \ -simple_gemac/miim/eth_outputcontrol.v \ -simple_gemac/miim/eth_shiftreg.v \ -control_lib/newfifo/buffer_int.v \ -control_lib/newfifo/buffer_pool.v \ -control_lib/newfifo/fifo_2clock.v \ -control_lib/newfifo/fifo_2clock_cascade.v \ -control_lib/newfifo/ll8_shortfifo.v \ -control_lib/newfifo/ll8_to_fifo36.v \ -control_lib/newfifo/fifo_short.v \ -control_lib/newfifo/fifo_long.v \ -control_lib/newfifo/fifo_cascade.v \ -control_lib/newfifo/fifo36_to_ll8.v \ -control_lib/longfifo.v \ -control_lib/shortfifo.v \ -control_lib/medfifo.v \ -coregen/fifo_xlnx_2Kx36_2clk.v \ -coregen/fifo_xlnx_2Kx36_2clk.xco \ -coregen/fifo_xlnx_512x36_2clk.v \ -coregen/fifo_xlnx_512x36_2clk.xco \ -coregen/fifo_xlnx_64x36_2clk.v \ -coregen/fifo_xlnx_64x36_2clk.xco \ -extram/wb_zbt16_b.v \ -opencores/8b10b/decode_8b10b.v \ -opencores/8b10b/encode_8b10b.v \ -opencores/aemb/rtl/verilog/aeMB_bpcu.v \ -opencores/aemb/rtl/verilog/aeMB_core_BE.v \ -opencores/aemb/rtl/verilog/aeMB_ctrl.v \ -opencores/aemb/rtl/verilog/aeMB_edk32.v \ -opencores/aemb/rtl/verilog/aeMB_ibuf.v \ -opencores/aemb/rtl/verilog/aeMB_regf.v \ -opencores/aemb/rtl/verilog/aeMB_xecu.v \ -opencores/i2c/rtl/verilog/i2c_master_bit_ctrl.v \ -opencores/i2c/rtl/verilog/i2c_master_byte_ctrl.v \ -opencores/i2c/rtl/verilog/i2c_master_defines.v \ -opencores/i2c/rtl/verilog/i2c_master_top.v \ -opencores/i2c/rtl/verilog/timescale.v \ -opencores/simple_pic/rtl/simple_pic.v \ -opencores/spi/rtl/verilog/spi_clgen.v \ -opencores/spi/rtl/verilog/spi_defines.v \ -opencores/spi/rtl/verilog/spi_shift.v \ -opencores/spi/rtl/verilog/spi_top.v \ -opencores/spi/rtl/verilog/timescale.v \ -sdr_lib/acc.v \ -sdr_lib/add2.v \ -sdr_lib/add2_and_round.v \ -sdr_lib/add2_and_round_reg.v \ -sdr_lib/add2_reg.v \ -sdr_lib/cic_dec_shifter.v \ -sdr_lib/cic_decim.v \ -sdr_lib/cic_int_shifter.v \ -sdr_lib/cic_interp.v \ -sdr_lib/cic_strober.v \ -sdr_lib/clip.v \ -sdr_lib/clip_reg.v \ -sdr_lib/cordic.v \ -sdr_lib/cordic_z24.v \ -sdr_lib/cordic_stage.v \ -sdr_lib/dsp_core_rx.v \ -sdr_lib/dsp_core_tx.v \ -sdr_lib/hb_dec.v \ -sdr_lib/hb_interp.v \ -sdr_lib/round.v \ -sdr_lib/round_reg.v \ -sdr_lib/rx_control.v \ -sdr_lib/rx_dcoffset.v \ -sdr_lib/sign_extend.v \ -sdr_lib/small_hb_dec.v \ -sdr_lib/small_hb_int.v \ -sdr_lib/tx_control.v \ -serdes/serdes.v \ -serdes/serdes_fc_rx.v \ -serdes/serdes_fc_tx.v \ -serdes/serdes_rx.v \ -serdes/serdes_tx.v \ -timing/time_receiver.v \ -timing/time_sender.v \ -timing/time_sync.v \ -timing/timer.v \ -top/u2_core/u2_core.v \ -top/safe_u1e/safe_u1e.ucf \ -top/safe_u1e/safe_u1e.v - -################################################## -# Process Properties -################################################## -export SYNTHESIZE_PROPERTIES := \ -"Number of Clock Buffers" 6 \ -"Pack I/O Registers into IOBs" Yes \ -"Optimization Effort" High \ -"Optimize Instantiated Primitives" TRUE \ -"Register Balancing" Yes \ -"Use Clock Enable" Auto \ -"Use Synchronous Reset" Auto \ -"Use Synchronous Set" Auto - -export TRANSLATE_PROPERTIES := \ -"Macro Search Path" "$(shell pwd)/../../coregen/" - -export MAP_PROPERTIES := \ -"Allow Logic Optimization Across Hierarchy" TRUE \ -"Map to Input Functions" 4 \ -"Optimization Strategy (Cover Mode)" Speed \ -"Pack I/O Registers/Latches into IOBs" "For Inputs and Outputs" \ -"Perform Timing-Driven Packing and Placement" TRUE \ -"Map Effort Level" High \ -"Extra Effort" Normal \ -"Combinatorial Logic Optimization" TRUE \ -"Register Duplication" TRUE - -export PLACE_ROUTE_PROPERTIES := \ -"Place & Route Effort Level (Overall)" High - -export STATIC_TIMING_PROPERTIES := \ -"Number of Paths in Error/Verbose Report" 10 \ -"Report Type" "Error Report" - -export GEN_PROG_FILE_PROPERTIES := \ -"Configuration Rate" 6 \ -"Create Binary Configuration File" TRUE \ -"Done (Output Events)" 5 \ -"Enable Bitstream Compression" TRUE \ -"Enable Outputs (Output Events)" 6 \ -"Unused IOB Pins" "Pull Up" - -export SIM_MODEL_PROPERTIES := "" - -################################################## -# Make Options -################################################## -all: - @echo make proj, check, synth, bin, or clean - -proj: - PROCESS_RUN="" $(XTCLSH) $(ISE_HELPER) - -check: - PROCESS_RUN="Check Syntax" $(XTCLSH) $(ISE_HELPER) - -synth: - PROCESS_RUN="Synthesize - XST" $(XTCLSH) $(ISE_HELPER) - -bin: - PROCESS_RUN="Generate Programming File" $(XTCLSH) $(ISE_HELPER) - -clean: - rm -rf $(BUILD_DIR) - - diff --git a/usrp2/top/safe_u1e/safe_u1e.ucf b/usrp2/top/safe_u1e/safe_u1e.ucf deleted file mode 100644 index cb6d6372e..000000000 --- a/usrp2/top/safe_u1e/safe_u1e.ucf +++ /dev/null @@ -1,262 +0,0 @@ - -NET "CLK_FPGA_P" LOC = "Y11" ; -NET "CLK_FPGA_N" LOC = "Y10" ; - -## GPMC -NET "EM_CLK" LOC = "F11" ; - -NET "EM_D<15>" LOC = "D13" ; -NET "EM_D<14>" LOC = "D15" ; -NET "EM_D<13>" LOC = "C16" ; -NET "EM_D<12>" LOC = "B20" ; -NET "EM_D<11>" LOC = "A19" ; -NET "EM_D<10>" LOC = "A17" ; -NET "EM_D<9>" LOC = "E15" ; -NET "EM_D<8>" LOC = "F15" ; -NET "EM_D<7>" LOC = "E16" ; -NET "EM_D<6>" LOC = "F16" ; -NET "EM_D<5>" LOC = "B17" ; -NET "EM_D<4>" LOC = "C17" ; -NET "EM_D<3>" LOC = "B19" ; -NET "EM_D<2>" LOC = "D19" ; -NET "EM_D<1>" LOC = "C19" ; -NET "EM_D<0>" LOC = "A20" ; - -NET "EM_A<10>" LOC = "C14" ; -NET "EM_A<9>" LOC = "C10" ; -NET "EM_A<8>" LOC = "C5" ; -NET "EM_A<7>" LOC = "A18" ; -NET "EM_A<6>" LOC = "A15" ; -NET "EM_A<5>" LOC = "A12" ; -NET "EM_A<4>" LOC = "A10" ; -NET "EM_A<3>" LOC = "E7" ; -NET "EM_A<2>" LOC = "A7" ; -NET "EM_A<1>" LOC = "C15" ; - -#NET "EM_NCS6" LOC = "E17" ; -#NET "EM_NCS5" LOC = "E10" ; -NET "EM_NCS4" LOC = "E6" ; -#NET "EM_NCS1" LOC = "D18" ; -#NET "EM_NCS0" LOC = "D17" ; - -NET "EM_WAIT0" LOC = "F14" ; -#NET "EM_NBE1" LOC = "D14" ; -#NET "EM_NBE0" LOC = "A13" ; -NET "EM_NWP" LOC = "F13" ; -NET "EM_NWE" LOC = "B13" ; -NET "EM_NOE" LOC = "A14" ; -NET "EM_NADV_ALE" LOC = "B15" ; - - -## Overo GPIO -#NET "overo_gpio0" LOC = "F9" ; -#NET "overo_gpio14" LOC = "C4" ; -#NET "overo_gpio21" LOC = "D5" ; -#NET "overo_gpio22" LOC = "A3" ; -#NET "overo_gpio23" LOC = "B3" ; -#NET "overo_gpio64" LOC = "A4" ; -#NET "overo_gpio65" LOC = "F8" ; -#NET "overo_gpio127" LOC = "C8" ; -#NET "overo_gpio128" LOC = "G8" ; -#NET "overo_gpio144" LOC = "A5" ; -#NET "overo_gpio145" LOC = "C7" ; -#NET "overo_gpio146" LOC = "A6" ; -#NET "overo_gpio147" LOC = "B6" ; -#NET "overo_gpio163" LOC = "D7" ; -#NET "overo_gpio170" LOC = "E8" ; -#NET "overo_gpio176" LOC = "B4" ; - -## Overo UART -#NET "overo_txd1" LOC = "C6" ; -#NET "overo_rxd1" LOC = "D6" ; - -#NET "FPGA_TXD" LOC = "U1" ; -#NET "FPGA_RXD" LOC = "T6" ; - -#NET "SYSEN" LOC = "C11" ; - -#NET "db_scl" LOC = "U4" ; -#NET "db_sda" LOC = "U5" ; -#NET "db_sclk_rx" LOC = "W3" ; -#NET "db_miso_rx" LOC = "W2" ; -#NET "db_mosi_rx" LOC = "V4" ; -#NET "db_sen_rx" LOC = "V3" ; -#NET "db_sclk_tx" LOC = "Y1" ; -#NET "db_miso_tx" LOC = "W1" ; -#NET "db_mosi_tx" LOC = "R3" ; -#NET "db_sen_tx" LOC = "T4" ; - -## Clock Gen -#NET "cgen_miso" LOC = "U2" ; -#NET "cgen_mosi" LOC = "V1" ; -#NET "cgen_sclk" LOC = "R5" ; -#NET "cgen_sen_b" LOC = "T1" ; -#NET "cgen_st_status" LOC = "D4" ; -#NET "cgen_st_ld" LOC = "D1" ; -#NET "cgen_st_refmon" LOC = "E1" ; -#NET "cgen_sync_b" LOC = "M1" ; -#NET "cgen_ref_sel" LOC = "J1" ; - -## Debug pins -NET "debug_led<2>" LOC = "T5" ; -NET "debug_led<1>" LOC = "R2" ; -NET "debug_led<0>" LOC = "R1" ; -NET "debug<0>" LOC = "P6" ; -NET "debug<1>" LOC = "R6" ; -NET "debug<2>" LOC = "P1" ; -NET "debug<3>" LOC = "P2" ; -NET "debug<4>" LOC = "N6" ; -NET "debug<5>" LOC = "N5" ; -NET "debug<6>" LOC = "N1" ; -NET "debug<7>" LOC = "K2" ; -NET "debug<8>" LOC = "K3" ; -NET "debug<9>" LOC = "K6" ; -NET "debug<10>" LOC = "L5" ; -NET "debug<11>" LOC = "H2" ; -NET "debug<12>" LOC = "K4" ; -NET "debug<13>" LOC = "K5" ; -NET "debug<14>" LOC = "G1" ; -NET "debug<15>" LOC = "H1" ; -NET "debug<16>" LOC = "H5" ; -NET "debug<17>" LOC = "H6" ; -NET "debug<18>" LOC = "E3" ; -NET "debug<19>" LOC = "E4" ; -NET "debug<20>" LOC = "G5" ; -NET "debug<21>" LOC = "G6" ; -NET "debug<22>" LOC = "F2" ; -NET "debug<23>" LOC = "F1" ; -NET "debug<24>" LOC = "H3" ; -NET "debug<25>" LOC = "H4" ; -NET "debug<26>" LOC = "F4" ; -NET "debug<27>" LOC = "F5" ; -NET "debug<28>" LOC = "C2" ; -NET "debug<29>" LOC = "C1" ; -NET "debug<30>" LOC = "F3" ; -NET "debug<31>" LOC = "G3" ; -NET "debug_clk<0>" LOC = "L6" ; -NET "debug_clk<1>" LOC = "M5" ; - -#NET "debug_pb<2>" LOC = "Y2" ; -#NET "debug_pb<1>" LOC = "AA1" ; -#NET "debug_pb<0>" LOC = "N3" ; - -#NET "dip_sw<7>" LOC = "T3" ; -#NET "dip_sw<6>" LOC = "U3" ; -#NET "dip_sw<5>" LOC = "M3" ; -#NET "dip_sw<4>" LOC = "N4" ; -#NET "dip_sw<3>" LOC = "J3" ; -#NET "dip_sw<2>" LOC = "J4" ; -#NET "dip_sw<1>" LOC = "J6" ; -#NET "dip_sw<0>" LOC = "J7" ; - -## AD9862 Interface -#NET "aux_sdi_codec" LOC = "F19" ; -#NET "aux_sdo_codec" LOC = "F18" ; -#NET "aux_sclk_codec" LOC = "D21" ; -#NET "reset_codec" LOC = "D22" ; -#NET "sen_codec" LOC = "D20" ; -#NET "mosi_codec" LOC = "E19" ; -#NET "miso_codec" LOC = "F21" ; -#NET "sclk_codec" LOC = "E20" ; - -#NET "RXSYNC" LOC = "F22" ; - -#NET "DB<11>" LOC = "E22" ; -#NET "DB<10>" LOC = "J19" ; -#NET "DB<9>" LOC = "H20" ; -#NET "DB<8>" LOC = "G19" ; -#NET "DB<7>" LOC = "F20" ; -#NET "DB<6>" LOC = "K16" ; -#NET "DB<5>" LOC = "J17" ; -#NET "DB<4>" LOC = "H22" ; -#NET "DB<3>" LOC = "G22" ; -#NET "DB<2>" LOC = "H17" ; -#NET "DB<1>" LOC = "H18" ; -#NET "DB<0>" LOC = "K20" ; -#NET "DA<11>" LOC = "J20" ; -#NET "DA<10>" LOC = "K19" ; -#NET "DA<9>" LOC = "K18" ; -#NET "DA<8>" LOC = "L22" ; -#NET "DA<7>" LOC = "K22" ; -#NET "DA<6>" LOC = "N22" ; -#NET "DA<5>" LOC = "M22" ; -#NET "DA<4>" LOC = "N20" ; -#NET "DA<3>" LOC = "N19" ; -#NET "DA<2>" LOC = "R22" ; -#NET "DA<1>" LOC = "P22" ; -#NET "DA<0>" LOC = "N17" ; - -#NET "TX<13>" LOC = "P19" ; -#NET "TX<12>" LOC = "R18" ; -#NET "TX<11>" LOC = "U20" ; -#NET "TX<10>" LOC = "T20" ; -#NET "TX<9>" LOC = "R19" ; -#NET "TX<8>" LOC = "R20" ; -#NET "TX<7>" LOC = "W22" ; -#NET "TX<6>" LOC = "Y22" ; -#NET "TX<5>" LOC = "T18" ; -#NET "TX<4>" LOC = "T17" ; -#NET "TX<3>" LOC = "W19" ; -#NET "TX<2>" LOC = "V20" ; -#NET "TX<1>" LOC = "Y21" ; -#NET "TX<0>" LOC = "AA22" ; -#NET "TXSYNC" LOC = "U18" ; -#NET "TXBLANK" LOC = "U19" ; - -#NET "PPS_IN" LOC = "M17" ; - -#NET "io_tx<0>" LOC = "AB20" ; -#NET "io_tx<1>" LOC = "Y17" ; -#NET "io_tx<2>" LOC = "Y16" ; -#NET "io_tx<3>" LOC = "U16" ; -#NET "io_tx<4>" LOC = "V16" ; -#NET "io_tx<5>" LOC = "AB19" ; -#NET "io_tx<6>" LOC = "AA19" ; -#NET "io_tx<7>" LOC = "U14" ; -#NET "io_tx<8>" LOC = "U15" ; -#NET "io_tx<9>" LOC = "AB17" ; -#NET "io_tx<10>" LOC = "AB18" ; -#NET "io_tx<11>" LOC = "Y13" ; -#NET "io_tx<12>" LOC = "W14" ; -#NET "io_tx<13>" LOC = "U13" ; -#NET "io_tx<14>" LOC = "AA15" ; -#NET "io_tx<15>" LOC = "AB14" ; - -#NET "io_rx<0>" LOC = "Y8" ; -#NET "io_rx<1>" LOC = "Y9" ; -#NET "io_rx<2>" LOC = "V7" ; -#NET "io_rx<3>" LOC = "U8" ; -#NET "io_rx<4>" LOC = "V10" ; -#NET "io_rx<5>" LOC = "U9" ; -#NET "io_rx<6>" LOC = "AB7" ; -#NET "io_rx<7>" LOC = "AA8" ; -#NET "io_rx<8>" LOC = "W8" ; -#NET "io_rx<9>" LOC = "V8" ; -#NET "io_rx<10>" LOC = "AB5" ; -#NET "io_rx<11>" LOC = "AB6" ; -#NET "io_rx<12>" LOC = "AB4" ; -#NET "io_rx<13>" LOC = "AA4" ; -#NET "io_rx<14>" LOC = "W5" ; -#NET "io_rx<15>" LOC = "Y4" ; - -#NET "CLKOUT2_CODEC" LOC = "U12" ; -#NET "CLKOUT1_CODEC" LOC = "V12" ; - -## FPGA Config Pins -#NET "fpga_cfg_prog_b" LOC = "A2" ; -#NET "fpga_cfg_done" LOC = "AB21" ; -#NET "fpga_cfg_din" LOC = "W17" ; -#NET "fpga_cfg_cclk" LOC = "V17" ; -#NET "fpga_cfg_init_b" LOC = "W15" ; - -## Unnamed, need to figure out what they do -#NET "unnamed_net37" LOC = "B1" ; -#NET "unnamed_net36" LOC = "B22" ; -#NET "unnamed_net35" LOC = "D2" ; -#NET "unnamed_net34" LOC = "A21" ; -#NET "unnamed_net45" LOC = "F7" ; -#NET "unnamed_net44" LOC = "V6" ; -#NET "unnamed_net43" LOC = "AA3" ; -#NET "unnamed_net42" LOC = "AB3" ; - -#NET "GND" LOC = "V19" ; diff --git a/usrp2/top/safe_u1e/safe_u1e.v b/usrp2/top/safe_u1e/safe_u1e.v deleted file mode 100644 index dee9c6067..000000000 --- a/usrp2/top/safe_u1e/safe_u1e.v +++ /dev/null @@ -1,41 +0,0 @@ -`timescale 1ns / 1ps -////////////////////////////////////////////////////////////////////////////////// - -module safe_u1e - ( - input CLK_FPGA_P, input CLK_FPGA_N, // Diff - output [2:0] debug_led, output [31:0] debug, output [1:0] debug_clk, - - // GPMC - input EM_CLK, inout [15:0] EM_D, input [10:1] EM_A, - input EM_WAIT0, input EM_NCS4, input EM_NWP, input EM_NWE, input EM_NOE, input EM_NADV_ALE - ); - - // FPGA-specific pins connections - wire clk_fpga; - - IBUFGDS #(.IOSTANDARD("LVDS_33"), .DIFF_TERM("TRUE")) - clk_fpga_pin (.O(clk_fpga),.I(CLK_FPGA_P),.IB(CLK_FPGA_N)); - - // Debug circuitry - reg [31:0] ctr; - always @(posedge clk_fpga) - ctr <= ctr + 1; - - - assign debug_led = ctr[27:25]; - assign debug_clk = { EM_CLK, clk_fpga }; - assign debug = { { EM_WAIT0, EM_NADV_ALE, EM_NWP, EM_NCS4, EM_NWE, EM_NOE, EM_A[10:1] }, - { EM_D } }; - - wire EM_output_enable = (~EM_NOE & ~EM_NCS4); - wire [15:0] EM_D_out; - - assign EM_D = EM_output_enable ? EM_D_out : 16'bz; - - ram_2port #(.DWIDTH(16), .AWIDTH(10)) ram_2port - (.clka(clk_fpga), .ena(~EM_NCS4), .wea(~EM_NWE), .addra(EM_A), .dia(EM_D), .doa(EM_D_out), - .clkb(clk_fpga), .enb(0), .web(0), .addrb(0), .dib(0), .dob()); - - -endmodule // safe_u2plus diff --git a/usrp2/top/u1e/u1e.ucf b/usrp2/top/u1e/u1e.ucf index a73ebceb8..2caa46639 100644 --- a/usrp2/top/u1e/u1e.ucf +++ b/usrp2/top/u1e/u1e.ucf @@ -54,7 +54,7 @@ NET "overo_gpio22" LOC = "A3" ; # MISC GPIO for debug NET "overo_gpio23" LOC = "B3" ; # MISC GPIO for debug NET "overo_gpio64" LOC = "A4" ; # MISC GPIO for debug NET "overo_gpio65" LOC = "F8" ; # MISC GPIO for debug -NET "overo_gpio127" LOC = "C8" ; # MISC GPIO for debug +NET "overo_gpio127" LOC = "C8" ; # MISC GPIO for debug, also used on the passthru image as the cgen_sen_b pin NET "overo_gpio128" LOC = "G8" ; # MISC GPIO for debug NET "overo_gpio144" LOC = "A5" ; # tx_have_space NET "overo_gpio145" LOC = "C7" ; # tx_underrun diff --git a/usrp2/top/u1e_passthru/.gitignore b/usrp2/top/u1e_passthru/.gitignore new file mode 100644 index 000000000..1b2211df0 --- /dev/null +++ b/usrp2/top/u1e_passthru/.gitignore @@ -0,0 +1 @@ +build* diff --git a/usrp2/top/u1e_passthru/passthru.ucf b/usrp2/top/u1e_passthru/passthru.ucf index 1672132a2..3ffe33882 100644 --- a/usrp2/top/u1e_passthru/passthru.ucf +++ b/usrp2/top/u1e_passthru/passthru.ucf @@ -47,14 +47,14 @@ ##NET "EM_NWP" LOC = "F13" ; ## Overo GPIO -NET "overo_gpio0" LOC = "F9" ; # MISC GPIO for debug +#NET "overo_gpio0" LOC = "F9" ; # MISC GPIO for debug #NET "overo_gpio14" LOC = "C4" ; # MISC GPIO for debug #NET "overo_gpio21" LOC = "D5" ; # MISC GPIO for debug #NET "overo_gpio22" LOC = "A3" ; # MISC GPIO for debug #NET "overo_gpio23" LOC = "B3" ; # MISC GPIO for debug #NET "overo_gpio64" LOC = "A4" ; # MISC GPIO for debug #NET "overo_gpio65" LOC = "F8" ; # MISC GPIO for debug -#NET "overo_gpio127" LOC = "C8" ; # MISC GPIO for debug +NET "overo_gpio127" LOC = "C8" ; # passed through as cgen_sen_b #NET "overo_gpio128" LOC = "G8" ; # MISC GPIO for debug #NET "overo_gpio144" LOC = "A5" ; # tx_have_space #NET "overo_gpio145" LOC = "C7" ; # tx_underrun diff --git a/usrp2/top/u1e_passthru/passthru.v b/usrp2/top/u1e_passthru/passthru.v index 459c226ee..d846f2cf6 100644 --- a/usrp2/top/u1e_passthru/passthru.v +++ b/usrp2/top/u1e_passthru/passthru.v @@ -2,16 +2,16 @@ ////////////////////////////////////////////////////////////////////////////////// module passthru - (input overo_gpio0, - output cgen_sclk, - output cgen_sen_b, - output cgen_mosi, + (input overo_gpio127, + output cgen_sclk, + output cgen_sen_b, + output cgen_mosi, input fpga_cfg_din, input fpga_cfg_cclk ); assign cgen_sclk = fpga_cfg_cclk; - assign cgen_sen_b = overo_gpio0; + assign cgen_sen_b = overo_gpio127; assign cgen_mosi = fpga_cfg_din; -- cgit v1.2.3 From 247e36dcbace9ef06763c2c537b44c8225a9d6a7 Mon Sep 17 00:00:00 2001 From: Matt Ettus Date: Wed, 12 May 2010 16:12:00 -0700 Subject: packet generator and verifier, to test gpmc and other data transfer stuff --- usrp2/control_lib/newfifo/.gitignore | 2 + usrp2/control_lib/newfifo/packet_generator.v | 59 ++++++++++++++++++++++++++ usrp2/control_lib/newfifo/packet_tb.v | 29 +++++++++++++ usrp2/control_lib/newfifo/packet_verifier.v | 63 ++++++++++++++++++++++++++++ 4 files changed, 153 insertions(+) create mode 100644 usrp2/control_lib/newfifo/packet_generator.v create mode 100644 usrp2/control_lib/newfifo/packet_tb.v create mode 100644 usrp2/control_lib/newfifo/packet_verifier.v diff --git a/usrp2/control_lib/newfifo/.gitignore b/usrp2/control_lib/newfifo/.gitignore index cba7efc8e..866f1faad 100644 --- a/usrp2/control_lib/newfifo/.gitignore +++ b/usrp2/control_lib/newfifo/.gitignore @@ -1 +1,3 @@ +*.vcd +*.lxt a.out diff --git a/usrp2/control_lib/newfifo/packet_generator.v b/usrp2/control_lib/newfifo/packet_generator.v new file mode 100644 index 000000000..e5bfe5b26 --- /dev/null +++ b/usrp2/control_lib/newfifo/packet_generator.v @@ -0,0 +1,59 @@ + + +module packet_generator + (input clk, input reset, input clear, + output reg [7:0] data_o, output sof_o, output eof_o, + output src_rdy_o, input dst_rdy_i); + + localparam len = 32'd100; + + reg [31:0] state; + reg [31:0] seq; + wire [31:0] crc_out; + wire calc_crc = src_rdy_o & dst_rdy_i & ~(state[31:2] == 30'h3FFF_FFFF); + + + always @(posedge clk) + if(reset | clear) + seq <= 0; + else + if(eof_o & src_rdy_o & dst_rdy_i) + seq <= seq + 1; + + always @(posedge clk) + if(reset | clear) + state <= 0; + else + if(src_rdy_o & dst_rdy_i) + if(state == (len - 1)) + state <= 32'hFFFF_FFFC; + else + state <= state + 1; + + always @* + case(state) + 0 : data_o <= len[7:0]; + 1 : data_o <= len[15:8]; + 2 : data_o <= len[23:16]; + 3 : data_o <= len[31:24]; + 4 : data_o <= seq[7:0]; + 5 : data_o <= seq[15:8]; + 6 : data_o <= seq[23:16]; + 7 : data_o <= seq[31:24]; + 32'hFFFF_FFFC : data_o <= crc_out[31:24]; + 32'hFFFF_FFFD : data_o <= crc_out[23:16]; + 32'hFFFF_FFFE : data_o <= crc_out[15:8]; + 32'hFFFF_FFFF : data_o <= crc_out[7:0]; + default : data_o <= state[7:0]; + endcase // case (state) + + assign src_rdy_o = 1; + assign sof_o = (state == 0); + assign eof_o = (state == 32'hFFFF_FFFF); + + wire clear_crc = eof_o & src_rdy_o & dst_rdy_i; + + crc crc(.clk(clk), .reset(reset), .clear(clear_crc), .data(data_o), + .calc(calc_crc), .crc_out(crc_out), .match()); + +endmodule // packet_generator diff --git a/usrp2/control_lib/newfifo/packet_tb.v b/usrp2/control_lib/newfifo/packet_tb.v new file mode 100644 index 000000000..3c423d2ba --- /dev/null +++ b/usrp2/control_lib/newfifo/packet_tb.v @@ -0,0 +1,29 @@ + + +module packet_tb(); + + wire [7:0] data; + wire sof, eof, src_rdy, dst_rdy; + + wire clear = 0; + reg clk = 0; + reg reset = 1; + + always #10 clk <= ~clk; + initial #1000 reset <= 0; + + initial $dumpfile("packet_tb.vcd"); + initial $dumpvars(0,packet_tb); + + wire [31:0] total, crc_err, seq_err, len_err; + + packet_generator pkt_gen (.clk(clk), .reset(reset), .clear(clear), + .data_o(data), .sof_o(sof), .eof_o(eof), + .src_rdy_o(src_rdy), .dst_rdy_i(dst_rdy)); + + packet_verifier pkt_ver (.clk(clk), .reset(reset), .clear(clear), + .data_i(data), .sof_i(sof), .eof_i(eof), + .src_rdy_i(src_rdy), .dst_rdy_o(dst_rdy), + .total(total), .crc_err(crc_err), .seq_err(seq_err), .len_err(len_err)); + +endmodule // packet_tb diff --git a/usrp2/control_lib/newfifo/packet_verifier.v b/usrp2/control_lib/newfifo/packet_verifier.v new file mode 100644 index 000000000..22c924198 --- /dev/null +++ b/usrp2/control_lib/newfifo/packet_verifier.v @@ -0,0 +1,63 @@ + + +// Packet format -- +// Line 1 -- Length, 32 bits +// Line 2 -- Sequence number, 32 bits +// Last line -- CRC, 32 bits + +module packet_verifier + (input clk, input reset, input clear, + input [7:0] data_i, input sof_i, output eof_i, input src_rdy_i, output dst_rdy_o, + + output reg [31:0] total, + output reg [31:0] crc_err, + output reg [31:0] seq_err, + output reg [31:0] len_err); + + assign dst_rdy_o = ~last_byte_d1; + + reg [31:0] seq_num; + reg [31:0] length; + + wire calc_crc = src_rdy_i & dst_rdy_o; + + crc crc(.clk(clk), .reset(reset), .clear(last_byte_d1), .data(data_i), + .calc(calc_crc), .crc_out(), .match(match_crc)); + + wire first_byte, last_byte; + reg second_byte, last_byte_d1; + + assign first_byte = src_rdy_i & dst_rdy_o & sof_i; + assign last_byte = src_rdy_i & dst_rdy_o & eof_i; + + // stubs for now + wire match_seq = 1; + wire match_len = 1; + + always @(posedge clk) + if(reset | clear) + last_byte_d1 <= 0; + else + last_byte_d1 <= last_byte; + + always @(posedge clk) + if(reset | clear) + begin + total <= 0; + crc_err <= 0; + seq_err <= 0; + len_err <= 0; + end + else + if(last_byte_d1) + begin + total <= total + 1; + if(~match_crc) + crc_err <= crc_err + 1; + else if(~match_seq) + seq_err <= seq_err + 1; + else if(~match_len) + seq_err <= len_err + 1; + end + +endmodule // packet_verifier -- cgit v1.2.3 From ed48630974fb8cbdc3b863b13d4e7d7e8fe31434 Mon Sep 17 00:00:00 2001 From: Matt Ettus Date: Wed, 12 May 2010 16:16:18 -0700 Subject: add missing signal from sensitivity list --- usrp2/control_lib/nsgpio16LE.v | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/usrp2/control_lib/nsgpio16LE.v b/usrp2/control_lib/nsgpio16LE.v index d6d7dcf56..514b003ce 100644 --- a/usrp2/control_lib/nsgpio16LE.v +++ b/usrp2/control_lib/nsgpio16LE.v @@ -111,7 +111,7 @@ module nsgpio16LE integer n; reg [31:0] igpio; // temporary internal signal - always @(ctrl or line or debug_1 or debug_0 or atr) + always @(ctrl or line or debug_1 or debug_0 or atr or ddr) for(n=0;n<32;n=n+1) igpio[n] <= ddr[n] ? (dbg[n] ? (ctrl[n] ? debug_1[n] : debug_0[n]) : (ctrl[n] ? atr[n] : line[n]) ) -- cgit v1.2.3 From b04a1beaab300000ce2d8a5814bd2e37af48286c Mon Sep 17 00:00:00 2001 From: Matt Ettus Date: Wed, 12 May 2010 18:51:33 -0700 Subject: moved fifos into gpmc_async, reorganized top level a bit, added in crc packet gen and test --- usrp2/control_lib/newfifo/packet_generator32.v | 21 ++++++ usrp2/control_lib/newfifo/packet_verifier.v | 10 ++- usrp2/control_lib/newfifo/packet_verifier32.v | 23 +++++++ usrp2/gpmc/gpmc_async.v | 91 +++++++++++++++----------- usrp2/top/u1e/Makefile | 4 ++ usrp2/top/u1e/u1e_core.v | 61 ++++++++++------- 6 files changed, 144 insertions(+), 66 deletions(-) create mode 100644 usrp2/control_lib/newfifo/packet_generator32.v create mode 100644 usrp2/control_lib/newfifo/packet_verifier32.v diff --git a/usrp2/control_lib/newfifo/packet_generator32.v b/usrp2/control_lib/newfifo/packet_generator32.v new file mode 100644 index 000000000..6f8004964 --- /dev/null +++ b/usrp2/control_lib/newfifo/packet_generator32.v @@ -0,0 +1,21 @@ + + +module packet_generator32 + (input clk, input reset, input clear, + output [35:0] data_o, output src_rdy_o, input dst_rdy_i); + + wire [7:0] ll_data; + wire ll_sof, ll_eof, ll_src_rdy, ll_dst_rdy_n; + + packet_generator pkt_gen + (.clk(clk), .reset(reset), .clear(clear), + .data_o(ll_data), .sof_o(ll_sof), .eof_o(ll_eof), + .src_rdy_o(ll_src_rdy), .dst_rdy_i(~ll_dst_rdy_n)); + + ll8_to_fifo36 ll8_to_f36 + (.clk(clk), .reset(reset), .clear(clear), + .ll_data(ll_data), .ll_sof_n(~ll_sof), .ll_eof_n(~ll_eof), + .ll_src_rdy_n(~ll_src_rdy), .ll_dst_rdy_n(ll_dst_rdy_n), + .f36_data(data_o), .f36_src_rdy_o(src_rdy_o), .f36_dst_rdy_i(dst_rdy_i)); + +endmodule // packet_generator32 diff --git a/usrp2/control_lib/newfifo/packet_verifier.v b/usrp2/control_lib/newfifo/packet_verifier.v index 22c924198..b49ad1bbb 100644 --- a/usrp2/control_lib/newfifo/packet_verifier.v +++ b/usrp2/control_lib/newfifo/packet_verifier.v @@ -7,28 +7,26 @@ module packet_verifier (input clk, input reset, input clear, - input [7:0] data_i, input sof_i, output eof_i, input src_rdy_i, output dst_rdy_o, + input [7:0] data_i, input sof_i, input eof_i, input src_rdy_i, output dst_rdy_o, output reg [31:0] total, output reg [31:0] crc_err, output reg [31:0] seq_err, output reg [31:0] len_err); - assign dst_rdy_o = ~last_byte_d1; - reg [31:0] seq_num; reg [31:0] length; + wire first_byte, last_byte; + reg second_byte, last_byte_d1; wire calc_crc = src_rdy_i & dst_rdy_o; crc crc(.clk(clk), .reset(reset), .clear(last_byte_d1), .data(data_i), .calc(calc_crc), .crc_out(), .match(match_crc)); - wire first_byte, last_byte; - reg second_byte, last_byte_d1; - assign first_byte = src_rdy_i & dst_rdy_o & sof_i; assign last_byte = src_rdy_i & dst_rdy_o & eof_i; + assign dst_rdy_o = ~last_byte_d1; // stubs for now wire match_seq = 1; diff --git a/usrp2/control_lib/newfifo/packet_verifier32.v b/usrp2/control_lib/newfifo/packet_verifier32.v new file mode 100644 index 000000000..065607b6c --- /dev/null +++ b/usrp2/control_lib/newfifo/packet_verifier32.v @@ -0,0 +1,23 @@ + + +module packet_verifier32 + (input clk, input reset, input clear, + input [35:0] data_i, input src_rdy_i, output dst_rdy_o, + output [31:0] total, output [31:0] crc_err, output [31:0] seq_err, output [31:0] len_err); + + wire [7:0] ll_data; + wire ll_sof_n, ll_eof_n, ll_src_rdy_n, ll_dst_rdy; + + fifo36_to_ll8 f36_to_ll8 + (.clk(clk), .reset(reset), .clear(clear), + .f36_data(data_i), .f36_src_rdy_i(src_rdy_i), .f36_dst_rdy_o(dst_rdy_o), + .ll_data(ll_data), .ll_sof_n(ll_sof_n), .ll_eof_n(ll_eof_n), + .ll_src_rdy_n(ll_src_rdy_n), .ll_dst_rdy_n(~ll_dst_rdy)); + + packet_verifier pkt_ver + (.clk(clk), .reset(reset), .clear(clear), + .data_i(ll_data), .sof_i(~ll_sof_n), .eof_i(~ll_eof_n), + .src_rdy_i(~ll_src_rdy_n), .dst_rdy_o(ll_dst_rdy), + .total(total), .crc_err(crc_err), .seq_err(seq_err), .len_err(len_err)); + +endmodule // packet_verifier32 diff --git a/usrp2/gpmc/gpmc_async.v b/usrp2/gpmc/gpmc_async.v index dd06478b3..380689c62 100644 --- a/usrp2/gpmc/gpmc_async.v +++ b/usrp2/gpmc/gpmc_async.v @@ -1,37 +1,38 @@ ////////////////////////////////////////////////////////////////////////////////// module gpmc_async - (// GPMC signals - input arst, - input EM_CLK, inout [15:0] EM_D, input [10:1] EM_A, input [1:0] EM_NBE, - input EM_WAIT0, input EM_NCS4, input EM_NCS6, input EM_NWE, input EM_NOE, - - // GPIOs for FIFO signalling - output rx_have_data, output tx_have_space, output reg bus_error, input bus_reset, - - // Wishbone signals - input wb_clk, input wb_rst, - output [10:0] wb_adr_o, output [15:0] wb_dat_mosi, input [15:0] wb_dat_miso, - output [1:0] wb_sel_o, output wb_cyc_o, output wb_stb_o, output wb_we_o, input wb_ack_i, + #(parameter TXFIFOSIZE = 11, parameter RXFIFOSIZE = 11) + (// GPMC signals + input arst, + input EM_CLK, inout [15:0] EM_D, input [10:1] EM_A, input [1:0] EM_NBE, + input EM_WAIT0, input EM_NCS4, input EM_NCS6, input EM_NWE, input EM_NOE, + + // GPIOs for FIFO signalling + output rx_have_data, output tx_have_space, output reg bus_error, input bus_reset, + + // Wishbone signals + input wb_clk, input wb_rst, + output [10:0] wb_adr_o, output [15:0] wb_dat_mosi, input [15:0] wb_dat_miso, + output [1:0] wb_sel_o, output wb_cyc_o, output wb_stb_o, output wb_we_o, input wb_ack_i, + + // FIFO interface + input fifo_clk, input fifo_rst, + output [35:0] tx_data_o, output tx_src_rdy_o, input tx_dst_rdy_i, + input [35:0] rx_data_i, input rx_src_rdy_i, output rx_dst_rdy_o, + + input [15:0] tx_frame_len, output [15:0] rx_frame_len, + + output [31:0] debug + ); - // FIFO interface - input fifo_clk, input fifo_rst, - output [35:0] tx_data_o, output tx_src_rdy_o, input tx_dst_rdy_i, - input [35:0] rx_data_i, input rx_src_rdy_i, output rx_dst_rdy_o, - - input [15:0] tx_frame_len, output [15:0] rx_frame_len, + wire EM_output_enable = (~EM_NOE & (~EM_NCS4 | ~EM_NCS6)); + wire [15:0] EM_D_fifo; + wire [15:0] EM_D_wb; - output [31:0] debug - ); - - wire EM_output_enable = (~EM_NOE & (~EM_NCS4 | ~EM_NCS6)); - wire [15:0] EM_D_fifo; - wire [15:0] EM_D_wb; - assign EM_D = ~EM_output_enable ? 16'bz : ~EM_NCS4 ? EM_D_fifo : EM_D_wb; - - wire bus_error_tx, bus_error_rx; - + + wire bus_error_tx, bus_error_rx; + always @(posedge fifo_clk) if(fifo_rst) bus_error <= 0; @@ -45,9 +46,11 @@ module gpmc_async // //////////////////////////////////////////// // TX Data Path - wire [17:0] tx18_data, tx18b_data; - wire tx18_src_rdy, tx18_dst_rdy, tx18b_src_rdy, tx18b_dst_rdy; - wire [15:0] tx_fifo_space; + wire [17:0] tx18_data, tx18b_data; + wire tx18_src_rdy, tx18_dst_rdy, tx18b_src_rdy, tx18b_dst_rdy; + wire [15:0] tx_fifo_space; + wire [35:0] tx36_data; + wire tx36_src_rdy, tx36_dst_rdy; gpmc_to_fifo_async gpmc_to_fifo_async (.EM_D(EM_D), .EM_NBE(EM_NBE), .EM_NCS(EM_NCS4), .EM_NWE(EM_NWE), @@ -64,18 +67,30 @@ module gpmc_async fifo19_to_fifo36 f19_to_f36 (.clk(fifo_clk), .reset(fifo_rst), .clear(0), .f19_datain({1'b0,tx18b_data}), .f19_src_rdy_i(tx18b_src_rdy), .f19_dst_rdy_o(tx18b_dst_rdy), - .f36_dataout(tx_data_o), .f36_src_rdy_o(tx_src_rdy_o), .f36_dst_rdy_i(tx_dst_rdy_i)); + .f36_dataout(tx36_data), .f36_src_rdy_o(tx36_src_rdy), .f36_dst_rdy_i(tx36_dst_rdy)); + fifo_cascade #(.WIDTH(36), .SIZE(TXFIFOSIZE)) tx_fifo36 + (.clk(wb_clk), .reset(wb_rst), .clear(0), + .datain(tx36_data), .src_rdy_i(tx36_src_rdy), .dst_rdy_o(tx36_dst_rdy), + .dataout(tx_data_o), .src_rdy_o(tx_src_rdy_o), .dst_rdy_i(tx_dst_rdy_i)); + // //////////////////////////////////////////// // RX Data Path - - wire [17:0] rx18_data, rx18b_data; - wire rx18_src_rdy, rx18_dst_rdy, rx18b_src_rdy, rx18b_dst_rdy; - wire [15:0] rx_fifo_space; + wire [17:0] rx18_data, rx18b_data; + wire rx18_src_rdy, rx18_dst_rdy, rx18b_src_rdy, rx18b_dst_rdy; + wire [15:0] rx_fifo_space; + wire [35:0] rx36_data; + wire rx36_src_rdy, rx36_dst_rdy; + + fifo_cascade #(.WIDTH(36), .SIZE(RXFIFOSIZE)) rx_fifo36 + (.clk(wb_clk), .reset(wb_rst), .clear(0), + .datain(rx_data_i), .src_rdy_i(rx_src_rdy_i), .dst_rdy_o(rx_dst_rdy_o), + .dataout(rx36_data), .src_rdy_o(rx36_src_rdy), .dst_rdy_i(rx36_dst_rdy)); + fifo36_to_fifo18 f18_to_f36 (.clk(fifo_clk), .reset(fifo_rst), .clear(0), - .f36_datain(rx_data_i), .f36_src_rdy_i(rx_src_rdy_i), .f36_dst_rdy_o(rx_dst_rdy_o), + .f36_datain(rx36_data), .f36_src_rdy_i(rx36_src_rdy), .f36_dst_rdy_o(rx36_dst_rdy), .f18_dataout(rx18_data), .f18_src_rdy_o(rx18_src_rdy), .f18_dst_rdy_i(rx18_dst_rdy) ); fifo_cascade #(.WIDTH(18), .SIZE(12)) rx_fifo @@ -106,6 +121,6 @@ module gpmc_async .wb_sel_o(wb_sel_o), .wb_cyc_o(wb_cyc_o), .wb_stb_o(wb_stb_o), .wb_we_o(wb_we_o), .wb_ack_i(wb_ack_i) ); - assign debug = 0; + assign debug = 0; endmodule // gpmc_async diff --git a/usrp2/top/u1e/Makefile b/usrp2/top/u1e/Makefile index 2aebb33f9..8622b8480 100644 --- a/usrp2/top/u1e/Makefile +++ b/usrp2/top/u1e/Makefile @@ -111,6 +111,10 @@ control_lib/newfifo/fifo_cascade.v \ control_lib/newfifo/fifo36_to_ll8.v \ control_lib/newfifo/fifo36_to_fifo18.v \ control_lib/newfifo/fifo19_to_fifo36.v \ +control_lib/newfifo/packet_generator.v \ +control_lib/newfifo/packet_verifier.v \ +control_lib/newfifo/packet_generator32.v \ +control_lib/newfifo/packet_verifier32.v \ control_lib/longfifo.v \ control_lib/shortfifo.v \ control_lib/medfifo.v \ diff --git a/usrp2/top/u1e/u1e_core.v b/usrp2/top/u1e/u1e_core.v index a262184a8..903121832 100644 --- a/usrp2/top/u1e/u1e_core.v +++ b/usrp2/top/u1e/u1e_core.v @@ -1,4 +1,9 @@ + +//`define LOOPBACK 1 +//`define TIMED 1 +`define CRC 1 + module u1e_core (input clk_fpga, input rst_fpga, output [2:0] debug_led, output [31:0] debug, output [1:0] debug_clk, @@ -61,47 +66,59 @@ module u1e_core .tx_frame_len(tx_frame_len), .rx_frame_len(rx_frame_len), .debug(debug_gpmc)); -/* + +`ifdef LOOPBACK fifo_cascade #(.WIDTH(36), .SIZE(9)) loopback_fifo (.clk(wb_clk), .reset(wb_rst), .clear(0), .datain(tx_data), .src_rdy_i(tx_src_rdy), .dst_rdy_o(tx_dst_rdy), .dataout(rx_data), .src_rdy_o(rx_src_rdy), .dst_rdy_i(rx_dst_rdy)); -*/ - wire tx_strobe, rx_strobe, tx_enable, rx_enable; + wire rx_sof = rx_data[32]; + wire rx_eof = rx_data[33]; +`endif // LOOPBACK + +`ifdef TIMED wire [7:0] rate; - wire tx_fifo_rdy, rx_fifo_rdy; - + + // TX side + wire tx_enable; cic_strober tx_strober (.clock(wb_clk), .reset(wb_rst), .enable(tx_enable), - .rate(rate), .strobe_fast(1), .strobe_slow(tx_strobe)); - - fifo_cascade #(.WIDTH(36), .SIZE(11)) tx_fifo - (.clk(wb_clk), .reset(wb_rst), .clear(0), - .datain(tx_data), .src_rdy_i(tx_src_rdy), .dst_rdy_o(tx_dst_rdy), - .dataout(), .src_rdy_o(tx_fifo_rdy), .dst_rdy_i(tx_strobe)); + .rate(rate), .strobe_fast(1), .strobe_slow(tx_dst_rdy)); - + // RX side + wire rx_enable; reg [15:0] ctr; wire [15:0] rx_pkt_len = 480; wire rx_eof = (ctr == rx_pkt_len); wire rx_sof = (ctr == 0); cic_strober rx_strober (.clock(wb_clk), .reset(wb_rst), .enable(rx_enable), - .rate(rate), .strobe_fast(1), .strobe_slow(rx_strobe)); + .rate(rate), .strobe_fast(1), .strobe_slow(rx_src_rdy)); - fifo_cascade #(.WIDTH(36), .SIZE(11)) rx_fifo - (.clk(wb_clk), .reset(wb_rst), .clear(0), - .datain({2'b00,rx_eof,rx_sof,16'd0,ctr}), .src_rdy_i(rx_strobe), .dst_rdy_o(rx_fifo_rdy), - .dataout(rx_data), .src_rdy_o(rx_src_rdy), .dst_rdy_i(rx_dst_rdy)); - always @(posedge wb_clk) if(wb_rst) ctr <= 0; - else if(rx_strobe & rx_fifo_rdy) + else if(rx_dst_rdy & rx_src_rdy) if(ctr == rx_pkt_len) ctr <= 0; else ctr <= ctr + 1; - + + assign rx_data = {2'b00,rx_eof,rx_sof,~ctr,ctr}; +`endif // TIMED + +`ifdef CRC + packet_generator32 pktgen32 + (.clk(wb_clk), .reset(wb_rst), .clear(clear), + .data_o(rx_data), .src_rdy_o(rx_src_rdy), .dst_rdy_i(rx_dst_rdy)); + + packet_verifier32 pktver32 + (.clk(wb_clk), .reset(wb_rst), .clear(clear), + .data_i(tx_data), .src_rdy_i(tx_src_rdy), .dst_rdy_o(tx_dst_rdy), + .total(total), .crc_err(crc_err), .seq_err(seq_err), .len_err(len_err)); + + wire rx_sof = rx_data[32]; + wire rx_eof = rx_data[33]; +`endif // CRC // ///////////////////////////////////////////////////////////////////////////////////// // Wishbone Intercon, single master @@ -364,8 +381,8 @@ module u1e_core assign debug_gpio_0 = { debug_gpmc }; - assign debug_gpio_1 = { {rx_enable, rx_strobe, rx_fifo_rdy, rx_strobe & ~rx_fifo_rdy}, - {tx_enable, tx_strobe, tx_fifo_rdy, tx_strobe & ~tx_fifo_rdy}, + assign debug_gpio_1 = { {rx_enable, rx_src_rdy, rx_dst_rdy, rx_src_rdy & ~rx_dst_rdy}, + {tx_enable, tx_src_rdy, tx_dst_rdy, tx_dst_rdy & ~tx_src_rdy}, {rx_sof, rx_eof, rx_src_rdy, rx_dst_rdy, rx_data[33:32],2'b0}, {3'b0, bus_error, misc_gpio[11:0]} }; -- cgit v1.2.3 From 47230fadfbbde3b45fbf57e8ff506f4fac812ca2 Mon Sep 17 00:00:00 2001 From: Matt Ettus Date: Mon, 17 May 2010 20:59:55 -0700 Subject: better debug pins --- usrp2/top/u1e/u1e_core.v | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/usrp2/top/u1e/u1e_core.v b/usrp2/top/u1e/u1e_core.v index 903121832..4637df0cc 100644 --- a/usrp2/top/u1e/u1e_core.v +++ b/usrp2/top/u1e/u1e_core.v @@ -1,8 +1,8 @@ -//`define LOOPBACK 1 +`define LOOPBACK 1 //`define TIMED 1 -`define CRC 1 +//`define CRC 1 module u1e_core (input clk_fpga, input rst_fpga, @@ -372,12 +372,10 @@ module u1e_core // Debug circuitry assign debug_clk = { EM_CLK, clk_fpga }; -/* - assign debug = { { rx_have_data, tx_have_space, EM_NCS6, EM_NCS4, EM_NWE, EM_NOE, EM_A[10:1] }, + assign debug = { { rx_have_data, tx_have_space, EM_NCS6, EM_NCS4, EM_NWE, EM_NOE, EM_A[10:1] }, { EM_D } }; -*/ - assign debug = { phase[23:8], txsync, txblank, tx }; + //assign debug = { phase[23:8], txsync, txblank, tx }; assign debug_gpio_0 = { debug_gpmc }; -- cgit v1.2.3 From c94256034819feb26d739e57e8cf7d3f60539e9c Mon Sep 17 00:00:00 2001 From: Matt Ettus Date: Thu, 20 May 2010 00:30:49 -0700 Subject: combined timed and crc cases. fifo pacer produces/consumes at a fixed rate --- usrp2/control_lib/newfifo/fifo_pacer.v | 24 ++++++++++++++ usrp2/top/u1e/Makefile | 1 + usrp2/top/u1e/u1e_core.v | 57 ++++++++++++++-------------------- 3 files changed, 48 insertions(+), 34 deletions(-) create mode 100644 usrp2/control_lib/newfifo/fifo_pacer.v diff --git a/usrp2/control_lib/newfifo/fifo_pacer.v b/usrp2/control_lib/newfifo/fifo_pacer.v new file mode 100644 index 000000000..1bf03ab6e --- /dev/null +++ b/usrp2/control_lib/newfifo/fifo_pacer.v @@ -0,0 +1,24 @@ + + +module fifo_pacer + (input clk, + input reset, + input [7:0] rate, + input enable, + input src1_rdy_i, output dst1_rdy_o, + output src2_rdy_o, input dst2_rdy_i, + output underrun, overrun); + + wire strobe; + + cic_strober strober (.clock(clk), .reset(reset), .enable(enable), + .rate(rate), .strobe_fast(1), .strobe_slow(strobe)); + + wire all_ready = src1_rdy_i & dst2_rdy_i; + assign dst1_rdy_o = all_ready & strobe; + assign src2_rdy_o = dst1_rdy_o; + + assign underrun = strobe & ~src1_rdy_i; + assign overrun = strobe & ~dst2_rdy_i; + +endmodule // fifo_pacer diff --git a/usrp2/top/u1e/Makefile b/usrp2/top/u1e/Makefile index 8622b8480..0277ef4f2 100644 --- a/usrp2/top/u1e/Makefile +++ b/usrp2/top/u1e/Makefile @@ -115,6 +115,7 @@ control_lib/newfifo/packet_generator.v \ control_lib/newfifo/packet_verifier.v \ control_lib/newfifo/packet_generator32.v \ control_lib/newfifo/packet_verifier32.v \ +control_lib/newfifo/fifo_pacer.v \ control_lib/longfifo.v \ control_lib/shortfifo.v \ control_lib/medfifo.v \ diff --git a/usrp2/top/u1e/u1e_core.v b/usrp2/top/u1e/u1e_core.v index 903121832..21ac97dbd 100644 --- a/usrp2/top/u1e/u1e_core.v +++ b/usrp2/top/u1e/u1e_core.v @@ -1,8 +1,7 @@ //`define LOOPBACK 1 -//`define TIMED 1 -`define CRC 1 +`define TIMED 1 module u1e_core (input clk_fpga, input rst_fpga, @@ -80,45 +79,35 @@ module u1e_core wire [7:0] rate; // TX side - wire tx_enable; - cic_strober tx_strober (.clock(wb_clk), .reset(wb_rst), .enable(tx_enable), - .rate(rate), .strobe_fast(1), .strobe_slow(tx_dst_rdy)); - - // RX side - wire rx_enable; - reg [15:0] ctr; - wire [15:0] rx_pkt_len = 480; - wire rx_eof = (ctr == rx_pkt_len); - wire rx_sof = (ctr == 0); + wire tx_enable, tx_src_rdy_int, tx_dst_rdy_int; - cic_strober rx_strober (.clock(wb_clk), .reset(wb_rst), .enable(rx_enable), - .rate(rate), .strobe_fast(1), .strobe_slow(rx_src_rdy)); + fifo_pacer tx_pacer + (.clk(wb_clk), .reset(wb_rst), .rate(rate), .enable(tx_enable), + .src1_rdy_i(tx_src_rdy), .dst1_rdy_o(tx_dst_rdy), + .src2_rdy_o(tx_src_rdy_int), .dst2_rdy_i(tx_dst_rdy_int), + .underrun(tx_underrun), .overrun()); - always @(posedge wb_clk) - if(wb_rst) - ctr <= 0; - else if(rx_dst_rdy & rx_src_rdy) - if(ctr == rx_pkt_len) - ctr <= 0; - else - ctr <= ctr + 1; - - assign rx_data = {2'b00,rx_eof,rx_sof,~ctr,ctr}; -`endif // TIMED - -`ifdef CRC - packet_generator32 pktgen32 - (.clk(wb_clk), .reset(wb_rst), .clear(clear), - .data_o(rx_data), .src_rdy_o(rx_src_rdy), .dst_rdy_i(rx_dst_rdy)); - packet_verifier32 pktver32 (.clk(wb_clk), .reset(wb_rst), .clear(clear), - .data_i(tx_data), .src_rdy_i(tx_src_rdy), .dst_rdy_o(tx_dst_rdy), + .data_i(tx_data), .src_rdy_i(tx_src_rdy_int), .dst_rdy_o(tx_dst_rdy_int), .total(total), .crc_err(crc_err), .seq_err(seq_err), .len_err(len_err)); + // RX side + wire rx_enable, rx_src_rdy_int, rx_dst_rdy_int; wire rx_sof = rx_data[32]; wire rx_eof = rx_data[33]; -`endif // CRC + + packet_generator32 pktgen32 + (.clk(wb_clk), .reset(wb_rst), .clear(clear), + .data_o(rx_data), .src_rdy_o(rx_src_rdy_int), .dst_rdy_i(rx_dst_rdy_int)); + + fifo_pacer rx_pacer + (.clk(wb_clk), .reset(wb_rst), .rate(rate), .enable(rx_enable), + .src1_rdy_i(rx_src_rdy_int), .dst1_rdy_o(rx_dst_rdy_int), + .src2_rdy_o(rx_src_rdy), .dst2_rdy_i(rx_dst_rdy), + .underrun(), .overrun(rx_overrun)); + +`endif // `ifdef TIMED // ///////////////////////////////////////////////////////////////////////////////////// // Wishbone Intercon, single master @@ -233,7 +222,7 @@ module u1e_core assign { debug_led[2],debug_led[0],debug_led[1] } = reg_leds; // LEDs are arranged funny on board assign { cgen_sync_b, cgen_ref_sel } = reg_cgen_ctrl; - assign { rx_overrun, tx_underrun } = 0; // reg_test; + //assign { rx_overrun, tx_underrun } = 0; // reg_test; assign s0_dat_miso = (s0_adr[6:0] == REG_LEDS) ? reg_leds : (s0_adr[6:0] == REG_SWITCHES) ? {5'b0,debug_pb[2:0],dip_sw[7:0]} : -- cgit v1.2.3 From 3b96b1f0f443acb9412b40592de5dc13e1f840d6 Mon Sep 17 00:00:00 2001 From: Matt Ettus Date: Thu, 20 May 2010 00:34:35 -0700 Subject: put over/underrun on debug bus, remove high order address bits --- usrp2/top/u1e/u1e_core.v | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/usrp2/top/u1e/u1e_core.v b/usrp2/top/u1e/u1e_core.v index 71b9b8712..48b5bd010 100644 --- a/usrp2/top/u1e/u1e_core.v +++ b/usrp2/top/u1e/u1e_core.v @@ -361,7 +361,8 @@ module u1e_core // Debug circuitry assign debug_clk = { EM_CLK, clk_fpga }; - assign debug = { { rx_have_data, tx_have_space, EM_NCS6, EM_NCS4, EM_NWE, EM_NOE, EM_A[10:1] }, + assign debug = { { rx_have_data, tx_have_space, EM_NCS6, EM_NCS4, EM_NWE, EM_NOE, rx_overrun, tx_underrun }, + { EM_A[8:1] }, { EM_D } }; //assign debug = { phase[23:8], txsync, txblank, tx }; -- cgit v1.2.3 From c6e8d0658dc66e9a24a87d4574c649b77ec4075d Mon Sep 17 00:00:00 2001 From: Matt Ettus Date: Thu, 20 May 2010 13:43:13 -0700 Subject: removes the icache and pipelines the reads --- usrp2/control_lib/ram_harvard.v | 71 +++++++++++++++++++++++++ usrp2/opencores/aemb/rtl/verilog/aeMB_bpcu.v | 5 +- usrp2/opencores/aemb/rtl/verilog/aeMB_core_BE.v | 27 ++++++---- usrp2/top/u2_core/u2_core.v | 10 ++-- usrp2/top/u2_rev3/Makefile | 1 + 5 files changed, 98 insertions(+), 16 deletions(-) create mode 100644 usrp2/control_lib/ram_harvard.v diff --git a/usrp2/control_lib/ram_harvard.v b/usrp2/control_lib/ram_harvard.v new file mode 100644 index 000000000..6711da366 --- /dev/null +++ b/usrp2/control_lib/ram_harvard.v @@ -0,0 +1,71 @@ + + +// Dual ported, Harvard architecture, cached ram + +module ram_harvard + #(parameter AWIDTH=15, + parameter RAM_SIZE=16384, + parameter ICWIDTH=6, + parameter DCWIDTH=6) + + (input wb_clk_i, + input wb_rst_i, + // Firmware download port. + input [AWIDTH-1:0] ram_loader_adr_i, + input [31:0] ram_loader_dat_i, + input ram_loader_stb_i, + input [3:0] ram_loader_sel_i, + input ram_loader_we_i, + output ram_loader_ack_o, + input ram_loader_done_i, + // Instruction fetch port. + input [AWIDTH-1:0] if_adr, + output [31:0] if_data, + // Data access port. + input [AWIDTH-1:0] dwb_adr_i, + input [31:0] dwb_dat_i, + output [31:0] dwb_dat_o, + input dwb_we_i, + output dwb_ack_o, + input dwb_stb_i, + input [3:0] dwb_sel_i, + + input flush_icache ); + + reg ack_d1; + reg stb_d1; + + + dpram32 #(.AWIDTH(AWIDTH),.RAM_SIZE(RAM_SIZE)) + sys_ram + (.clk(wb_clk_i), + .adr1_i(ram_loader_done_i ? if_adr : ram_loader_adr_i), + .dat1_i(ram_loader_dat_i), + .dat1_o(if_data), + .we1_i(ram_loader_done_i ? 1'b0 : ram_loader_we_i), + .en1_i(ram_loader_done_i ? 1'b1 : ram_loader_stb_i), + .sel1_i(ram_loader_done_i ? 4'hF : ram_loader_sel_i), + .adr2_i(dwb_adr_i), + .dat2_i(dwb_dat_i), + .dat2_o(dwb_dat_o), + .we2_i(dwb_we_i), + .en2_i(dwb_stb_i), + .sel2_i(dwb_sel_i) + ); + + assign dwb_ack_o = dwb_stb_i & (dwb_we_i | (stb_d1 & ~ack_d1)); + + always @(posedge wb_clk_i) + if(wb_rst_i) + ack_d1 <= 1'b0; + else + ack_d1 <= dwb_ack_o; + + always @(posedge wb_clk_i) + if(wb_rst_i) + stb_d1 <= 0; + else + stb_d1 <= dwb_stb_i; + + +endmodule // ram_harv_cache diff --git a/usrp2/opencores/aemb/rtl/verilog/aeMB_bpcu.v b/usrp2/opencores/aemb/rtl/verilog/aeMB_bpcu.v index a7c686e7e..81587e25c 100644 --- a/usrp2/opencores/aemb/rtl/verilog/aeMB_bpcu.v +++ b/usrp2/opencores/aemb/rtl/verilog/aeMB_bpcu.v @@ -125,7 +125,7 @@ module aeMB_bpcu (/*AUTOARG*/ reg [31:2] rPC, xPC; reg [31:2] rPCLNK, xPCLNK; - assign iwb_adr_o = rIPC[IW-1:2]; + assign iwb_adr_o = gena ? xIPC[IW-1:2] : rIPC[IW-1:2]; //IJB always @(/*AUTOSENSE*/rBRA or rIPC or rPC or rRESULT) begin //xPCLNK <= (^rATOM) ? rPC : rPC; @@ -168,7 +168,8 @@ module aeMB_bpcu (/*AUTOARG*/ rATOM <= 2'h0; rBRA <= 1'h0; rDLY <= 1'h0; - rIPC <= 30'h0; +// rIPC <= 30'h0; + rIPC <= 30'h3fffffff; // DWORD aligned address rPC <= 30'h0; rPCLNK <= 30'h0; // End of automatics diff --git a/usrp2/opencores/aemb/rtl/verilog/aeMB_core_BE.v b/usrp2/opencores/aemb/rtl/verilog/aeMB_core_BE.v index 9ffa20ff2..38ca3a023 100644 --- a/usrp2/opencores/aemb/rtl/verilog/aeMB_core_BE.v +++ b/usrp2/opencores/aemb/rtl/verilog/aeMB_core_BE.v @@ -10,12 +10,10 @@ module aeMB_core_BE parameter MUL=0, parameter BSF=0) (input sys_clk_i, input sys_rst_i, - - output iwb_stb_o, - output [ISIZ-1:0] iwb_adr_o, - input [31:0] iwb_dat_i, - input iwb_ack_i, - + // Instruction port + output [14:0] if_adr, + input [31:0] if_dat, + // Data port output dwb_we_o, output dwb_stb_o, output [DSIZ-1:0] dwb_adr_o, @@ -28,17 +26,28 @@ module aeMB_core_BE input sys_int_i, input sys_exc_i); - assign dwb_cyc_o = dwb_stb_o; + wire [ISIZ-1:0] iwb_adr_o; + wire [31:0] iwb_dat_i; + wire iwb_ack_i; + wire iwb_stb_o; + + assign dwb_cyc_o = dwb_stb_o; + assign iwb_ack_i = 1'b1; + assign if_adr = iwb_adr_o[14:0]; + assign iwb_dat_i = if_dat; + + // Note some "wishbone" instruction fetch signals pruned on external interface + // but not propogated change deep into aeMB. aeMB_edk32 #(.IW(ISIZ),.DW(DSIZ),.MUL(MUL),.BSF(BSF)) aeMB_edk32 (.sys_clk_i(sys_clk_i), .sys_rst_i(sys_rst_i), - + // Instruction Port .iwb_stb_o(iwb_stb_o), .iwb_adr_o(iwb_adr_o[ISIZ-1:2]), .iwb_ack_i(iwb_ack_i), .iwb_dat_i(iwb_dat_i), - + // Data port .dwb_wre_o(dwb_we_o), .dwb_stb_o(dwb_stb_o), .dwb_adr_o(dwb_adr_o[DSIZ-1:2]), diff --git a/usrp2/top/u2_core/u2_core.v b/usrp2/top/u2_core/u2_core.v index df74c7dba..5e0b569cc 100755 --- a/usrp2/top/u2_core/u2_core.v +++ b/usrp2/top/u2_core/u2_core.v @@ -284,8 +284,8 @@ module u2_core aeMB_core_BE #(.ISIZ(16),.DSIZ(16),.MUL(0),.BSF(1)) aeMB (.sys_clk_i(wb_clk), .sys_rst_i(wb_rst), // Instruction Wishbone bus to I-RAM - .iwb_stb_o(iwb_stb),.iwb_adr_o(iwb_adr), - .iwb_dat_i(iwb_dat),.iwb_ack_i(iwb_ack), + .if_adr(if_adr), + .if_dat(if_dat), // Data Wishbone bus to system bus fabric .dwb_we_o(m0_we),.dwb_stb_o(m0_stb),.dwb_dat_o(m0_dat_i),.dwb_adr_o(m0_adr), .dwb_dat_i(m0_dat_o),.dwb_ack_i(m0_ack),.dwb_sel_o(m0_sel),.dwb_cyc_o(m0_cyc), @@ -299,7 +299,7 @@ module u2_core // I-port connects directly to processor and ram loader wire flush_icache; - ram_harv_cache #(.AWIDTH(15),.RAM_SIZE(RAM_SIZE),.ICWIDTH(7),.DCWIDTH(6)) + ram_harvard #(.AWIDTH(15),.RAM_SIZE(RAM_SIZE),.ICWIDTH(7),.DCWIDTH(6)) sys_ram(.wb_clk_i(wb_clk),.wb_rst_i(wb_rst), .ram_loader_adr_i(ram_loader_adr[14:0]), .ram_loader_dat_i(ram_loader_dat), @@ -307,8 +307,8 @@ module u2_core .ram_loader_we_i(ram_loader_we), .ram_loader_ack_o(ram_loader_ack), .ram_loader_done_i(ram_loader_done), - .iwb_adr_i(iwb_adr[14:0]), .iwb_stb_i(iwb_stb), - .iwb_dat_o(iwb_dat), .iwb_ack_o(iwb_ack), + .if_adr(if_adr), + .if_data(if_dat), .dwb_adr_i(s0_adr[14:0]), .dwb_dat_i(s0_dat_o), .dwb_dat_o(s0_dat_i), .dwb_we_i(s0_we), .dwb_ack_o(s0_ack), .dwb_stb_i(s0_stb), .dwb_sel_i(s0_sel), diff --git a/usrp2/top/u2_rev3/Makefile b/usrp2/top/u2_rev3/Makefile index 80d09acb7..bfebcac8b 100644 --- a/usrp2/top/u2_rev3/Makefile +++ b/usrp2/top/u2_rev3/Makefile @@ -66,6 +66,7 @@ control_lib/mux4.v \ control_lib/mux8.v \ control_lib/nsgpio.v \ control_lib/ram_2port.v \ +control_lib/ram_harvard.v \ control_lib/ram_harv_cache.v \ control_lib/ram_loader.v \ control_lib/setting_reg.v \ -- cgit v1.2.3 From 1d38c098122746ff34c0c1f16668b44d7337175d Mon Sep 17 00:00:00 2001 From: Matt Ettus Date: Thu, 20 May 2010 16:48:59 -0700 Subject: send bigger packets to reduce cpu load --- usrp2/control_lib/newfifo/packet_generator.v | 2 +- usrp2/top/u1e/u1e_core.v | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/usrp2/control_lib/newfifo/packet_generator.v b/usrp2/control_lib/newfifo/packet_generator.v index e5bfe5b26..6e8b45ccd 100644 --- a/usrp2/control_lib/newfifo/packet_generator.v +++ b/usrp2/control_lib/newfifo/packet_generator.v @@ -5,7 +5,7 @@ module packet_generator output reg [7:0] data_o, output sof_o, output eof_o, output src_rdy_o, input dst_rdy_i); - localparam len = 32'd100; + localparam len = 32'd2000; reg [31:0] state; reg [31:0] seq; diff --git a/usrp2/top/u1e/u1e_core.v b/usrp2/top/u1e/u1e_core.v index 48b5bd010..ee193ffb9 100644 --- a/usrp2/top/u1e/u1e_core.v +++ b/usrp2/top/u1e/u1e_core.v @@ -43,6 +43,7 @@ module u1e_core wire tx_src_rdy, tx_dst_rdy, rx_src_rdy, rx_dst_rdy; reg [15:0] tx_frame_len; wire [15:0] rx_frame_len; + wire [7:0] rate; wire bus_error; @@ -76,7 +77,6 @@ module u1e_core `endif // LOOPBACK `ifdef TIMED - wire [7:0] rate; // TX side wire tx_enable, tx_src_rdy_int, tx_dst_rdy_int; @@ -362,7 +362,7 @@ module u1e_core assign debug_clk = { EM_CLK, clk_fpga }; assign debug = { { rx_have_data, tx_have_space, EM_NCS6, EM_NCS4, EM_NWE, EM_NOE, rx_overrun, tx_underrun }, - { EM_A[8:1] }, + { tx_src_rdy, tx_src_rdy_int, tx_dst_rdy, tx_dst_rdy_int, rx_src_rdy, rx_src_rdy_int, rx_dst_rdy, rx_dst_rdy_int }, { EM_D } }; //assign debug = { phase[23:8], txsync, txblank, tx }; -- cgit v1.2.3 From 268324b62898a916c0ef01e9336c34cd4ae1ff93 Mon Sep 17 00:00:00 2001 From: Matt Ettus Date: Fri, 21 May 2010 15:56:01 -0700 Subject: fix double declaration --- usrp2/control_lib/newfifo/fifo36_to_ll8.v | 1 - 1 file changed, 1 deletion(-) diff --git a/usrp2/control_lib/newfifo/fifo36_to_ll8.v b/usrp2/control_lib/newfifo/fifo36_to_ll8.v index 0dee1dfc6..9604d0e38 100644 --- a/usrp2/control_lib/newfifo/fifo36_to_ll8.v +++ b/usrp2/control_lib/newfifo/fifo36_to_ll8.v @@ -55,6 +55,5 @@ module fifo36_to_ll8 assign advance = ll_src_rdy & ll_dst_rdy; assign f36_dst_rdy_o = advance & ((state==3)|ll_eof); - assign debug = state; endmodule // ll8_to_fifo36 -- cgit v1.2.3 From d3e6f630945076cc9d5fb91e86e1caf0b554ac89 Mon Sep 17 00:00:00 2001 From: Matt Ettus Date: Fri, 21 May 2010 15:56:18 -0700 Subject: fifo36_to_ll8 and fifo pacer need a real fifo between them or they deadlock (by design) --- usrp2/control_lib/newfifo/packet_verifier32.v | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/usrp2/control_lib/newfifo/packet_verifier32.v b/usrp2/control_lib/newfifo/packet_verifier32.v index 065607b6c..06a13d242 100644 --- a/usrp2/control_lib/newfifo/packet_verifier32.v +++ b/usrp2/control_lib/newfifo/packet_verifier32.v @@ -7,10 +7,17 @@ module packet_verifier32 wire [7:0] ll_data; wire ll_sof_n, ll_eof_n, ll_src_rdy_n, ll_dst_rdy; + wire [35:0] data_int; + wire src_rdy_int, dst_rdy_int; + + fifo_short #(.WIDTH(36)) fifo_short + (.clk(clk), .reset(reset), .clear(clear), + .datain(data_i), .src_rdy_i(src_rdy_i), .dst_rdy_o(dst_rdy_o), + .dataout(data_int), .src_rdy_o(src_rdy_int), .dst_rdy_i(dst_rdy_int)); fifo36_to_ll8 f36_to_ll8 (.clk(clk), .reset(reset), .clear(clear), - .f36_data(data_i), .f36_src_rdy_i(src_rdy_i), .f36_dst_rdy_o(dst_rdy_o), + .f36_data(data_int), .f36_src_rdy_i(src_rdy_int), .f36_dst_rdy_o(dst_rdy_int), .ll_data(ll_data), .ll_sof_n(ll_sof_n), .ll_eof_n(ll_eof_n), .ll_src_rdy_n(ll_src_rdy_n), .ll_dst_rdy_n(~ll_dst_rdy)); -- cgit v1.2.3 From 6f63773d7425dd952c5ca24da618c22c486ae294 Mon Sep 17 00:00:00 2001 From: Matt Ettus Date: Mon, 24 May 2010 11:34:42 -0700 Subject: test full width packets --- usrp2/control_lib/newfifo/packet32_tb.v | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 usrp2/control_lib/newfifo/packet32_tb.v diff --git a/usrp2/control_lib/newfifo/packet32_tb.v b/usrp2/control_lib/newfifo/packet32_tb.v new file mode 100644 index 000000000..82bb09c29 --- /dev/null +++ b/usrp2/control_lib/newfifo/packet32_tb.v @@ -0,0 +1,27 @@ + + +module packet32_tb(); + + wire [35:0] data; + wire src_rdy, dst_rdy; + + wire clear = 0; + reg clk = 0; + reg reset = 1; + + always #10 clk <= ~clk; + initial #1000 reset <= 0; + + initial $dumpfile("packet32_tb.vcd"); + initial $dumpvars(0,packet32_tb); + + wire [31:0] total, crc_err, seq_err, len_err; + + packet_generator32 pkt_gen (.clk(clk), .reset(reset), .clear(clear), + .data_o(data), .src_rdy_o(src_rdy), .dst_rdy_i(dst_rdy)); + + packet_verifier32 pkt_ver (.clk(clk), .reset(reset), .clear(clear), + .data_i(data), .src_rdy_i(src_rdy), .dst_rdy_o(dst_rdy), + .total(total), .crc_err(crc_err), .seq_err(seq_err), .len_err(len_err)); + +endmodule // packet32_tb -- cgit v1.2.3 From d32cedbf00eb342d999832737f9f1ba2109ef2ad Mon Sep 17 00:00:00 2001 From: Matt Ettus Date: Mon, 24 May 2010 14:21:03 -0700 Subject: fixes from IJB from 5/24. Basically connect unconnected wires. --- usrp2/control_lib/ram_harvard.v | 2 ++ usrp2/top/u2_core/u2_core.v | 5 +++-- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/usrp2/control_lib/ram_harvard.v b/usrp2/control_lib/ram_harvard.v index 6711da366..3c00f87c7 100644 --- a/usrp2/control_lib/ram_harvard.v +++ b/usrp2/control_lib/ram_harvard.v @@ -36,6 +36,8 @@ module ram_harvard reg stb_d1; + assign ram_loader_ack_o = ram_loader_stb_i; + dpram32 #(.AWIDTH(AWIDTH),.RAM_SIZE(RAM_SIZE)) sys_ram (.clk(wb_clk_i), diff --git a/usrp2/top/u2_core/u2_core.v b/usrp2/top/u2_core/u2_core.v index 5e0b569cc..600bd7f3f 100755 --- a/usrp2/top/u2_core/u2_core.v +++ b/usrp2/top/u2_core/u2_core.v @@ -259,8 +259,9 @@ module u2_core // /////////////////////////////////////////////////////////////////// // RAM Loader - wire [31:0] ram_loader_dat, iwb_dat; - wire [15:0] ram_loader_adr, iwb_adr; + wire [31:0] ram_loader_dat, if_dat; + wire [15:0] ram_loader_adr; + wire [14:0] if_adr; wire [3:0] ram_loader_sel; wire ram_loader_stb, ram_loader_we, ram_loader_ack; wire iwb_ack, iwb_stb; -- cgit v1.2.3 From a1284e5d02fbb9e0b7cf541a9ffe501707d37c8c Mon Sep 17 00:00:00 2001 From: Matt Ettus Date: Wed, 26 May 2010 18:45:01 -0700 Subject: experimental mods to make ram loader fully synchronous. Based on IJB's work --- usrp2/control_lib/ram_harvard.v | 12 +- usrp2/control_lib/ram_loader.v | 460 ++++++++++++++++++++++------------------ usrp2/top/u2_core/u2_core.v | 29 ++- 3 files changed, 266 insertions(+), 235 deletions(-) diff --git a/usrp2/control_lib/ram_harvard.v b/usrp2/control_lib/ram_harvard.v index 3c00f87c7..948f9b36f 100644 --- a/usrp2/control_lib/ram_harvard.v +++ b/usrp2/control_lib/ram_harvard.v @@ -13,10 +13,9 @@ module ram_harvard // Firmware download port. input [AWIDTH-1:0] ram_loader_adr_i, input [31:0] ram_loader_dat_i, - input ram_loader_stb_i, input [3:0] ram_loader_sel_i, + input ram_loader_stb_i, input ram_loader_we_i, - output ram_loader_ack_o, input ram_loader_done_i, // Instruction fetch port. input [AWIDTH-1:0] if_adr, @@ -35,9 +34,6 @@ module ram_harvard reg ack_d1; reg stb_d1; - - assign ram_loader_ack_o = ram_loader_stb_i; - dpram32 #(.AWIDTH(AWIDTH),.RAM_SIZE(RAM_SIZE)) sys_ram (.clk(wb_clk_i), @@ -46,7 +42,8 @@ module ram_harvard .dat1_o(if_data), .we1_i(ram_loader_done_i ? 1'b0 : ram_loader_we_i), .en1_i(ram_loader_done_i ? 1'b1 : ram_loader_stb_i), - .sel1_i(ram_loader_done_i ? 4'hF : ram_loader_sel_i), + //.sel1_i(ram_loader_done_i ? 4'hF : ram_loader_sel_i), + .sel1_i(ram_loader_sel_i), // Sel is only for writes anyway .adr2_i(dwb_adr_i), .dat2_i(dwb_dat_i), .dat2_o(dwb_dat_o), @@ -68,6 +65,5 @@ module ram_harvard stb_d1 <= 0; else stb_d1 <= dwb_stb_i; - -endmodule // ram_harv_cache +endmodule // ram_harvard diff --git a/usrp2/control_lib/ram_loader.v b/usrp2/control_lib/ram_loader.v index cb67de739..c53ea7aa7 100644 --- a/usrp2/control_lib/ram_loader.v +++ b/usrp2/control_lib/ram_loader.v @@ -1,225 +1,261 @@ +module ram_loader + #(parameter AWIDTH=16, RAM_SIZE=16384) + ( + // Wishbone I/F and clock domain + input wb_clk, + input dsp_clk, + input ram_loader_rst, + output wire [31:0] wb_dat, + output wire [AWIDTH-1:0] wb_adr, + output wb_stb, + output reg [3:0] wb_sel, + output wb_we, + output reg ram_loader_done, + // CPLD signals and clock domain + input cpld_clk, + input cpld_din, + output reg cpld_start, + output reg cpld_mode, + output reg cpld_done, + input cpld_detached + ); -// Adapted from VHDL code in spi_boot by Arnim Legauer -// Added a full wishbone master interface (32-bit) - -module ram_loader #(parameter AWIDTH=16, RAM_SIZE=16384) - (input clk_i, input rst_i, - // CPLD Interface - input cfg_clk_i, input cfg_data_i, - output start_o, output mode_o, output done_o, - input detached_i, - // Wishbone interface - output wire [31:0] wb_dat_o, - output reg [AWIDTH-1:0] wb_adr_o, - output wb_stb_o, - output wb_cyc_o, - output reg [3:0] wb_sel_o, - output reg wb_we_o, - input wb_ack_i, - output ram_loader_done_o); + localparam S0 = 0; + localparam S1 = 1; + localparam S2 = 2; + localparam S3 = 3; + localparam S4 = 4; + localparam S5 = 5; + localparam S6 = 6; + localparam RESET = 7; - // FSM to control start signal, clocked on main clock - localparam FSM1_WAIT_DETACH = 2'b00; - localparam FSM1_CHECK_NO_DONE = 2'b01; - localparam FSM1_WAIT_DONE = 2'b10; - - reg [1:0] start_fsm_q, start_fsm_s; - reg start_q, enable_q, start_s, enable_s; - reg done_q, done_s; + localparam WB_IDLE = 0; + localparam WB_WRITE = 1; + + + reg [AWIDTH+2:0] count; // 3 LSB's count bits in, the MSB's generate the Wishbone address + reg [6:0] shift_reg; + reg [7:0] data_reg; + reg sampled_clk; + reg sampled_clk_meta; + reg sampled_din; + reg inc_count; + reg load_data_reg; + reg shift; + reg wb_state, wb_next_state; + reg [2:0] state, next_state; + + // + // CPLD clock doesn't free run and is approximately 12.5MHz. + // Use 50MHz Wishbone clock to sample it as a signal and avoid having + // an extra clock domain for no reason. + // + + always @(posedge dsp_clk or posedge ram_loader_rst) + if (ram_loader_rst) + begin + sampled_clk_meta <= 1'b0; + sampled_clk <= 1'b0; + sampled_din <= 1'b0; + count <= 'h7FFF8; // Initialize so that address will be 0 when first byte fully received. + data_reg <= 0; + shift_reg <= 0; + end + else + begin + sampled_clk_meta <= cpld_clk; + sampled_clk <= sampled_clk_meta; + sampled_din <= cpld_din; + if (inc_count) + count <= count + 1'b1; + if (load_data_reg) + data_reg <= {shift_reg,sampled_din}; + if (shift) + shift_reg <= {shift_reg[5:0],sampled_din}; + end // else: !if(ram_loader_rst) - always @(posedge clk_i or posedge rst_i) - if(rst_i) - begin - start_fsm_q <= FSM1_WAIT_DETACH; - start_q <= 1'b0; - enable_q <= 1'b0; - end + + always @(posedge dsp_clk or posedge ram_loader_rst) + if (ram_loader_rst) + state <= RESET; else - begin - start_fsm_q <= start_fsm_s; - enable_q <= enable_s; - start_q <= start_s; - end // else: !if(rst_i) - + state <= next_state; + + always @* - case(start_fsm_q) - FSM1_WAIT_DETACH: - if(detached_i == 1'b1) - begin - start_fsm_s <= FSM1_CHECK_NO_DONE; - enable_s <= 1'b1; - start_s <= 1'b1; - end - else - begin - start_fsm_s <= FSM1_WAIT_DETACH; - enable_s <= enable_q; - start_s <= start_q; - end // else: !if(detached_i == 1'b1) - FSM1_CHECK_NO_DONE: - if(~done_q) - begin - start_fsm_s <= FSM1_WAIT_DONE; - enable_s <= enable_q; - start_s <= start_q; - end - else - begin - start_fsm_s <= FSM1_CHECK_NO_DONE; - enable_s <= enable_q; - start_s <= start_q; - end // else: !if(~done_q) - FSM1_WAIT_DONE: - if(done_q) - begin - start_fsm_s <= FSM1_WAIT_DETACH; - enable_s <= 1'b0; - start_s <= 1'b0; - end - else - begin - start_fsm_s <= FSM1_WAIT_DONE; - enable_s <= enable_q; - start_s <= start_q; - end // else: !if(done_q) - default: - begin - start_fsm_s <= FSM1_WAIT_DETACH; - enable_s <= enable_q; - start_s <= start_q; - end // else: !if(done_q) - endcase // case(start_fsm_q) - - // FSM running on data clock - - localparam FSM2_IDLE = 3'b000; - localparam FSM2_WE_ON = 3'b001; - localparam FSM2_WE_OFF = 3'b010; - localparam FSM2_INC_ADDR1 = 3'b011; - localparam FSM2_INC_ADDR2 = 3'b100; - localparam FSM2_FINISHED = 3'b101; - - reg [AWIDTH-1:0] addr_q; - reg [7:0] shift_dat_q, ser_dat_q; - reg [2:0] bit_q, fsm_q, fsm_s; - reg bit_ovfl_q, ram_we_s, ram_we_q, mode_q, mode_s, inc_addr_s; - - always @(posedge cfg_clk_i or posedge rst_i) - if(rst_i) - begin - addr_q <= 0; - shift_dat_q <= 8'd0; - ser_dat_q <= 8'd0; - bit_q <= 3'd0; - bit_ovfl_q <= 1'b0; - fsm_q <= FSM2_IDLE; - ram_we_q <= 1'b0; - done_q <= 1'b0; - mode_q <= 1'b0; - end + begin + // Defaults + next_state = state; + cpld_start = 1'b0; + shift = 1'b0; + inc_count = 0; + load_data_reg = 1'b0; + ram_loader_done = 1'b0; + cpld_mode = 1'b0; + cpld_done = 1'b1; + + + + case (state) //synthesis parallel_case full_case + // After reset wait until CPLD indicates its detached. + RESET: begin + if (cpld_detached) + next_state = S0; + else + next_state = RESET; + end + + // Assert cpld_start to signal the CPLD its to start sending serial clock and data. + // Assume cpld_clk is low as we transition into search for first rising edge + S0: begin + cpld_start = 1'b1; + cpld_done = 1'b0; + if (~cpld_detached) + next_state = S2; + else + next_state = S0; + end + + // + S1: begin + cpld_start = 1'b1; + cpld_done = 1'b0; + if (sampled_clk) + begin + // Found rising edge on cpld_clk. + if (count[2:0] == 3'b111) + // Its the last bit of a byte, send it out to the Wishbone bus. + begin + load_data_reg = 1'b1; + inc_count = 1'b1; + end + else + // Shift databit into LSB of shift register and increment count + begin + shift = 1'b1; + inc_count = 1'b1; + end // else: !if(count[2:0] == 3'b111) + next_state = S2; + end // if (sampled_clk) + else + next_state = S1; + end // case: S1 + + // + S2: begin + cpld_start = 1'b1; + cpld_done = 1'b0; + if (~sampled_clk) + // Found negative edge of clock + if (count[AWIDTH+2:3] == RAM_SIZE-1) // NOTE need to change this constant + // All firmware now downloaded + next_state = S3; + else + next_state = S1; + else + next_state = S2; + end // case: S2 + + // Now that terminal count is reached and all firmware is downloaded signal CPLD that download is done + // and that mode is now SPI mode. + S3: begin + if (sampled_clk) + begin + cpld_mode = 1'b1; + cpld_done = 1'b1; + next_state = S4; + end + else + next_state = S3; + end + + // Search for negedge of cpld_clk whilst keeping done sequence asserted. + // Keep done assserted + S4: begin + cpld_mode = 1'b1; + cpld_done = 1'b1; + if (~sampled_clk) + next_state = S5; + else + next_state = S4; + end + + // Search for posedge of cpld_clk whilst keeping done sequence asserted. + S5: begin + cpld_mode = 1'b1; + cpld_done = 1'b1; + if (sampled_clk) + next_state = S6; + else + next_state = S5; + end + + // Stay in this state until reset/power down + S6: begin + ram_loader_done = 1'b1; + cpld_done = 1'b1; + cpld_mode = 1'b1; + next_state = S6; + end + + endcase // case(state) + end + + always @(posedge dsp_clk or posedge ram_loader_rst) + if (ram_loader_rst) + wb_state <= WB_IDLE; else - begin - if(inc_addr_s) - addr_q <= addr_q + 1; - if(enable_q) - begin - bit_q <= bit_q + 1; - bit_ovfl_q <= (bit_q == 3'd7); - shift_dat_q[0] <= cfg_data_i; - shift_dat_q[7:1] <= shift_dat_q[6:0]; - end - if(bit_ovfl_q) - ser_dat_q <= shift_dat_q; - - fsm_q <= fsm_s; - - ram_we_q <= ram_we_s; - - if(done_s) - done_q <= 1'b1; - mode_q <= mode_s; - end // else: !if(rst_i) + wb_state <= wb_next_state; + reg do_write; + wire empty, full; + always @* begin - inc_addr_s <= 1'b0; - ram_we_s <= 1'b0; - done_s <= 1'b0; - fsm_s <= FSM2_IDLE; - mode_s <= 1'b0; - - case(fsm_q) - FSM2_IDLE : - if(start_q) - if(bit_ovfl_q) - fsm_s <= FSM2_WE_ON; - FSM2_WE_ON: - begin - ram_we_s <= 1'b1; - fsm_s <= FSM2_WE_OFF; - end - FSM2_WE_OFF: - begin - ram_we_s <= 1'b1; - fsm_s <= FSM2_INC_ADDR1; - end - FSM2_INC_ADDR1: - fsm_s <= FSM2_INC_ADDR2; - FSM2_INC_ADDR2: - if(addr_q == (RAM_SIZE-1)) - //if(&addr_q) - begin - fsm_s <= FSM2_FINISHED; - done_s <= 1'b1; - mode_s <= 1'b1; - end - else - begin - inc_addr_s <= 1'b1; - fsm_s <= FSM2_IDLE; - end // else: !if(&addr_q) - FSM2_FINISHED: - begin - fsm_s <= FSM2_FINISHED; - mode_s <= 1'b1; - end - endcase // case(fsm_q) + wb_next_state = wb_state; + do_write = 1'b0; + + case (wb_state) //synthesis full_case parallel_case + // + WB_IDLE: begin + if (load_data_reg) + // Data reg will load ready to write wishbone @ next clock edge + wb_next_state = WB_WRITE; + else + wb_next_state = WB_IDLE; + end + + // Drive address and data onto wishbone. + WB_WRITE: begin + do_write = 1'b1; + if (~full) + wb_next_state = WB_IDLE; + else + wb_next_state = WB_WRITE; + end + + endcase // case(wb_state) end // always @ * - assign start_o = start_q; - assign mode_o = mode_q; - assign done_o = start_q ? done_q : 1'b1; - wire [AWIDTH-1:0] ram_addr = addr_q; - wire [7:0] ram_data = ser_dat_q; - assign ram_loader_done_o = (fsm_q == FSM2_FINISHED); - - // wishbone master, only writes - reg [7:0] dat_holder; - assign wb_dat_o = {4{dat_holder}}; - assign wb_stb_o = wb_we_o; - assign wb_cyc_o = wb_we_o; + wire [1:0] count_out; + wire [7:0] data_out; + + fifo_xlnx_16x40_2clk crossclk + (.rst(ram_loader_rst), + .wr_clk(dsp_clk), .din({count[4:3],count[AWIDTH+2:3],data_reg}), .wr_en(do_write), .full(full), + .rd_clk(wb_clk), .dout({count_out,wb_adr,data_out}), .rd_en(~empty), .empty(empty)); + + assign wb_dat = {4{data_out}}; + + always @* + case(count_out[1:0]) //synthesis parallel_case full_case + 2'b00 : wb_sel = 4'b1000; + 2'b01 : wb_sel = 4'b0100; + 2'b10 : wb_sel = 4'b0010; + 2'b11 : wb_sel = 4'b0001; + endcase + + assign wb_we = ~empty; + assign wb_stb = ~empty; - always @(posedge clk_i or posedge rst_i) - if(rst_i) - begin - dat_holder <= 8'd0; - wb_adr_o <= 0; - wb_sel_o <= 4'b0000; - wb_we_o <= 1'b0; - end - else if(ram_we_q) - begin - dat_holder <= ram_data; - wb_adr_o <= ram_addr; - wb_we_o <= 1'b1; - case(ram_addr[1:0]) // Big Endian - 2'b00 : wb_sel_o <= 4'b1000; - 2'b01 : wb_sel_o <= 4'b0100; - 2'b10 : wb_sel_o <= 4'b0010; - 2'b11 : wb_sel_o <= 4'b0001; - endcase // case(ram_addr[1:0]) - end // if (ram_we_q) - else if(wb_ack_i) - wb_we_o <= 1'b0; - endmodule // ram_loader diff --git a/usrp2/top/u2_core/u2_core.v b/usrp2/top/u2_core/u2_core.v index 600bd7f3f..a90e2ced6 100755 --- a/usrp2/top/u2_core/u2_core.v +++ b/usrp2/top/u2_core/u2_core.v @@ -263,23 +263,22 @@ module u2_core wire [15:0] ram_loader_adr; wire [14:0] if_adr; wire [3:0] ram_loader_sel; - wire ram_loader_stb, ram_loader_we, ram_loader_ack; + wire ram_loader_stb, ram_loader_we; wire iwb_ack, iwb_stb; ram_loader #(.AWIDTH(16),.RAM_SIZE(RAM_SIZE)) - ram_loader (.clk_i(wb_clk),.rst_i(ram_loader_rst), + ram_loader (.wb_clk(wb_clk),.dsp_clk(dsp_clk),.ram_loader_rst(ram_loader_rst), + .wb_dat(ram_loader_dat),.wb_adr(ram_loader_adr), + .wb_stb(ram_loader_stb),.wb_sel(ram_loader_sel), + .wb_we(ram_loader_we), + .ram_loader_done(ram_loader_done), // CPLD Interface - .cfg_clk_i(cpld_clk), - .cfg_data_i(cpld_din), - .start_o(cpld_start_int), - .mode_o(cpld_mode_int), - .done_o(cpld_done_int), - .detached_i(cpld_detached), - // Wishbone Interface - .wb_dat_o(ram_loader_dat),.wb_adr_o(ram_loader_adr), - .wb_stb_o(ram_loader_stb),.wb_cyc_o(),.wb_sel_o(ram_loader_sel), - .wb_we_o(ram_loader_we),.wb_ack_i(ram_loader_ack), - .ram_loader_done_o(ram_loader_done)); - + .cpld_clk(cpld_clk), + .cpld_din(cpld_din), + .cpld_start(cpld_start_int), + .cpld_mode(cpld_mode_int), + .cpld_done(cpld_done_int), + .cpld_detached(cpld_detached)); + // ///////////////////////////////////////////////////////////////////////// // Processor aeMB_core_BE #(.ISIZ(16),.DSIZ(16),.MUL(0),.BSF(1)) @@ -305,7 +304,7 @@ module u2_core .ram_loader_adr_i(ram_loader_adr[14:0]), .ram_loader_dat_i(ram_loader_dat), .ram_loader_stb_i(ram_loader_stb), .ram_loader_sel_i(ram_loader_sel), - .ram_loader_we_i(ram_loader_we), .ram_loader_ack_o(ram_loader_ack), + .ram_loader_we_i(ram_loader_we), .ram_loader_done_i(ram_loader_done), .if_adr(if_adr), -- cgit v1.2.3 From 1c8fc02f8787b8f809335d18a6691c2d7510be9a Mon Sep 17 00:00:00 2001 From: Matt Ettus Date: Wed, 26 May 2010 18:45:46 -0700 Subject: change the debug pins, which makes it more reliable. This is unnerving. --- usrp2/top/u2_core/u2_core.v | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/usrp2/top/u2_core/u2_core.v b/usrp2/top/u2_core/u2_core.v index 600bd7f3f..fc2e10d52 100755 --- a/usrp2/top/u2_core/u2_core.v +++ b/usrp2/top/u2_core/u2_core.v @@ -683,7 +683,8 @@ module u2_core { wr2_flags, rd2_flags }, { GMII_TX_EN,3'd0, wr2_ready_i, wr2_ready_o, rd2_ready_i, rd2_ready_o } }; - assign debug_gpio_0 = debug_mac; //eth_mac_debug; + assign debug_gpio_0 = 0; + //debug_mac; //eth_mac_debug; assign debug_gpio_1 = 0; endmodule // u2_core -- cgit v1.2.3 From 2d45c8537171f8a82baf13674fbe9ccefa2cc0c0 Mon Sep 17 00:00:00 2001 From: Matt Ettus Date: Tue, 1 Jun 2010 10:18:13 -0700 Subject: zero out debug pins. helps timing a little bit. --- usrp2/top/u2_core/u2_core_udp.v | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/usrp2/top/u2_core/u2_core_udp.v b/usrp2/top/u2_core/u2_core_udp.v index 1fe3aafd8..d2e842b1c 100644 --- a/usrp2/top/u2_core/u2_core_udp.v +++ b/usrp2/top/u2_core/u2_core_udp.v @@ -729,7 +729,15 @@ module u2_core // ///////////////////////////////////////////////////////////////////////////////////////// // Debug Pins + + assign debug_clk[1:0] = 2'b00; + assign debug = 32'd0; + assign debug_gpio_0 = 32'd0; + assign debug_gpio_1 = 32'd0; +endmodule // u2_core + + /* // FIFO Level Debugging reg [31:0] host_to_dsp_fifo,dsp_to_host_fifo,eth_mac_debug,serdes_to_dsp_fifo,dsp_to_serdes_fifo; @@ -756,15 +764,12 @@ module u2_core assign debug_clk[0] = GMII_RX_CLK; // wb_clk; assign debug_clk[1] = dsp_clk; -/* - wire mdio_cpy = MDIO; assign debug = { { 1'b0, s6_stb, s6_ack, s6_we, s6_sel[3:0] }, { s6_adr[15:8] }, { s6_adr[7:0] }, { 6'd0, mdio_cpy, MDC } }; -*/ -/* + assign debug = { { GMII_TXD }, { 5'd0, GMII_TX_EN, GMII_TX_ER, GMII_GTX_CLK }, { wr2_flags, rd2_flags }, @@ -773,9 +778,8 @@ module u2_core { 5'd0, GMII_RX_DV, GMII_RX_ER, GMII_RX_CLK }, { wr2_flags, rd2_flags }, { GMII_TX_EN,3'd0, wr2_ready_i, wr2_ready_o, rd2_ready_i, rd2_ready_o } }; - */ -// assign debug = debug_udp; + assign debug = debug_udp; assign debug = vrc_debug; assign debug_gpio_0 = { {pps_in, pps_int, 2'd0, vita_state}, {2'd0, rx_dst_rdy, rx_src_rdy, rx_data[99:96]}, @@ -784,14 +788,12 @@ module u2_core assign debug_gpio_1 = {vita_time[63:32] }; -/* - assign debug_gpio_1 = { { tx_f19_data[15:8] }, + assign debug_gpio_1 = { { tx_f19_data[15:8] }, { tx_f19_data[7:0] }, { 3'd0, tx_f19_src_rdy, tx_f19_dst_rdy, tx_f19_data[18:16] }, { 2'b0, rd2_ready_i, rd2_ready_o, rd2_flags } }; */ -endmodule // u2_core // wire debug_mux; // setting_reg #(.my_addr(5)) sr_debug (.clk(wb_clk),.rst(wb_rst),.strobe(set_stb),.addr(set_addr), -- cgit v1.2.3 From e5bc7a493252753ad9ddf6799e986fa19841221a Mon Sep 17 00:00:00 2001 From: Matt Ettus Date: Tue, 1 Jun 2010 15:50:06 -0700 Subject: vita49 tx and rx added in, all sample rates now at main system clock rate. --- usrp2/top/u1e/Makefile | 5 ++ usrp2/top/u1e/u1e.ucf | 50 ++++++------ usrp2/top/u1e/u1e.v | 68 ++++++++++++++-- usrp2/top/u1e/u1e_core.v | 204 ++++++++++++++++++++++++++++++----------------- 4 files changed, 220 insertions(+), 107 deletions(-) diff --git a/usrp2/top/u1e/Makefile b/usrp2/top/u1e/Makefile index 0277ef4f2..7f5085275 100644 --- a/usrp2/top/u1e/Makefile +++ b/usrp2/top/u1e/Makefile @@ -189,6 +189,11 @@ gpmc/gpmc_to_fifo_async.v \ gpmc/fifo_to_gpmc_async.v \ gpmc/fifo_watcher.v \ gpmc/gpmc_wb.v \ +vrt/vita_rx_control.v \ +vrt/vita_rx_framer.v \ +vrt/vita_tx_control.v \ +vrt/vita_tx_deframer.v \ +timing/time_compare.v \ top/u1e/u1e_core.v \ top/u1e/u1e.ucf \ top/u1e/timing.ucf \ diff --git a/usrp2/top/u1e/u1e.ucf b/usrp2/top/u1e/u1e.ucf index 2caa46639..659a9dce5 100644 --- a/usrp2/top/u1e/u1e.ucf +++ b/usrp2/top/u1e/u1e.ucf @@ -163,33 +163,33 @@ NET "dip_sw<2>" LOC = "J4" ; NET "dip_sw<1>" LOC = "J6" ; NET "dip_sw<0>" LOC = "J7" ; -#NET "RXSYNC" LOC = "F22" ; #NET "reset_codec" LOC = "D22" ; -#NET "DB<11>" LOC = "E22" ; -#NET "DB<10>" LOC = "J19" ; -#NET "DB<9>" LOC = "H20" ; -#NET "DB<8>" LOC = "G19" ; -#NET "DB<7>" LOC = "F20" ; -#NET "DB<6>" LOC = "K16" ; -#NET "DB<5>" LOC = "J17" ; -#NET "DB<4>" LOC = "H22" ; -#NET "DB<3>" LOC = "G22" ; -#NET "DB<2>" LOC = "H17" ; -#NET "DB<1>" LOC = "H18" ; -#NET "DB<0>" LOC = "K20" ; -#NET "DA<11>" LOC = "J20" ; -#NET "DA<10>" LOC = "K19" ; -#NET "DA<9>" LOC = "K18" ; -#NET "DA<8>" LOC = "L22" ; -#NET "DA<7>" LOC = "K22" ; -#NET "DA<6>" LOC = "N22" ; -#NET "DA<5>" LOC = "M22" ; -#NET "DA<4>" LOC = "N20" ; -#NET "DA<3>" LOC = "N19" ; -#NET "DA<2>" LOC = "R22" ; -#NET "DA<1>" LOC = "P22" ; -#NET "DA<0>" LOC = "N17" ; +NET "RXSYNC" LOC = "F22" ; +NET "DB<11>" LOC = "E22" ; +NET "DB<10>" LOC = "J19" ; +NET "DB<9>" LOC = "H20" ; +NET "DB<8>" LOC = "G19" ; +NET "DB<7>" LOC = "F20" ; +NET "DB<6>" LOC = "K16" ; +NET "DB<5>" LOC = "J17" ; +NET "DB<4>" LOC = "H22" ; +NET "DB<3>" LOC = "G22" ; +NET "DB<2>" LOC = "H17" ; +NET "DB<1>" LOC = "H18" ; +NET "DB<0>" LOC = "K20" ; +NET "DA<11>" LOC = "J20" ; +NET "DA<10>" LOC = "K19" ; +NET "DA<9>" LOC = "K18" ; +NET "DA<8>" LOC = "L22" ; +NET "DA<7>" LOC = "K22" ; +NET "DA<6>" LOC = "N22" ; +NET "DA<5>" LOC = "M22" ; +NET "DA<4>" LOC = "N20" ; +NET "DA<3>" LOC = "N19" ; +NET "DA<2>" LOC = "R22" ; +NET "DA<1>" LOC = "P22" ; +NET "DA<0>" LOC = "N17" ; NET "TX<13>" LOC = "P19" ; NET "TX<12>" LOC = "R18" ; diff --git a/usrp2/top/u1e/u1e.v b/usrp2/top/u1e/u1e.v index 35818e8c8..3018ff100 100644 --- a/usrp2/top/u1e/u1e.v +++ b/usrp2/top/u1e/u1e.v @@ -26,18 +26,46 @@ module u1e inout [15:0] io_tx, inout [15:0] io_rx, - output [13:0] TX, output TXSYNC, output TXBLANK, - + output reg [13:0] TX, output reg TXSYNC, output TXBLANK, + input [11:0] DA, input [11:0] DB, input RXSYNC, + input PPS_IN ); - // FPGA-specific pins connections - wire clk_fpga; + // ///////////////////////////////////////////////////////////////////////// + // Clocking + wire clk_fpga, clk_fpga_in, clk_2x, dcm_rst, dcm_locked; IBUFGDS #(.IOSTANDARD("LVDS_33"), .DIFF_TERM("TRUE")) - clk_fpga_pin (.O(clk_fpga),.I(CLK_FPGA_P),.IB(CLK_FPGA_N)); + clk_fpga_pin (.O(clk_fpga_in),.I(CLK_FPGA_P),.IB(CLK_FPGA_N)); + + DCM #(.CLK_FEEDBACK ( "1X" ), + .CLKDV_DIVIDE ( 2.0 ), + .CLKFX_DIVIDE ( 1 ), + .CLKFX_MULTIPLY ( 2 ), + .CLKIN_DIVIDE_BY_2 ( "FALSE" ), + .CLKIN_PERIOD ( 15.625 ), + .CLKOUT_PHASE_SHIFT ( "NONE" ), + .DESKEW_ADJUST ( "SYSTEM_SYNCHRONOUS" ), + .DFS_FREQUENCY_MODE ( "LOW" ), + .DLL_FREQUENCY_MODE ( "LOW" ), + .DUTY_CYCLE_CORRECTION ( "TRUE" ), + .FACTORY_JF ( 16'h8080 ), + .PHASE_SHIFT ( 0 ), + .STARTUP_WAIT ( "FALSE" )) + clk_doubler (.CLKFB(clk_fpga), .CLKIN(clk_fpga_in), .RST(dcm_rst), + .DSSEN(0), .PSCLK(0), .PSEN(0), .PSINCDEC(0), .PSDONE(), + .CLKDV(), .CLKFX(), .CLKFX180(), + .CLK2X(clk_2x), .CLK2X180(), + .CLK0(clk_fpga), .CLK90(), .CLK180(), .CLK270(), + .LOCKED(dcm_locked), .STATUS()); + + //BUFG dspclk_BUFG (.I(dcm_out), .O(dsp_clk)); + //BUFG wbclk_BUFG (.I(clk_div), .O(wb_clk)); + - // SPI pins + // ///////////////////////////////////////////////////////////////////////// + // SPI wire mosi, sclk, miso; assign { db_sclk_tx, db_mosi_tx } = ~db_sen_tx ? {sclk,mosi} : 2'b0; assign { db_sclk_rx, db_mosi_rx } = ~db_sen_rx ? {sclk,mosi} : 2'b0; @@ -45,7 +73,27 @@ module u1e assign { cgen_sclk, cgen_mosi } = ~cgen_sen_b ? {sclk,mosi} : 2'b0; assign miso = (~db_sen_tx & db_miso_tx) | (~db_sen_rx & db_miso_rx) | (~sen_codec & miso_codec) | (~cgen_sen_b & cgen_miso); + + // ///////////////////////////////////////////////////////////////////////// + // TX DAC -- handle the interleaved data bus to DAC, with clock doubling DLL + + assign TXBLANK = 0; + wire [13:0] tx_i, tx_q; + always @(posedge clk_2x) + if(clk_fpga) + begin + TX <= tx_i; + TXSYNC <= 0; // Low indicates first data item + end + else + begin + TX <= tx_q; + TXSYNC <= 1; + end + + // ///////////////////////////////////////////////////////////////////////// + // Main U1E Core u1e_core u1e_core(.clk_fpga(clk_fpga), .rst_fpga(~debug_pb[2]), .debug_led(debug_led), .debug(debug), .debug_clk(debug_clk), .debug_pb(~debug_pb), .dip_sw(dip_sw), .debug_txd(FPGA_TXD), .debug_rxd(FPGA_RXD), @@ -59,10 +107,16 @@ module u1e .tx_have_space(overo_gpio144), .tx_underrun(overo_gpio145), .rx_have_data(overo_gpio146), .rx_overrun(overo_gpio147), .io_tx(io_tx), .io_rx(io_rx), - .tx(TX), .txsync(TXSYNC), .txblank(TXBLANK), + .tx_i(tx_i), .tx_q(tx_q), + .rx_i(DA), .rx_q(DB), .misc_gpio( {{overo_gpio128,overo_gpio163,overo_gpio170,overo_gpio176}, {overo_gpio0,overo_gpio14,overo_gpio21,overo_gpio22}, {overo_gpio23,overo_gpio64,overo_gpio65,overo_gpio127}}), .pps_in(PPS_IN) ); + + // ///////////////////////////////////////////////////////////////////////// + // Local Debug + // assign debug_clk = {clk_fpga, clk_2x }; + // assign debug = { TXSYNC, TXBLANK, TX }; endmodule // u1e diff --git a/usrp2/top/u1e/u1e_core.v b/usrp2/top/u1e/u1e_core.v index ee193ffb9..002b28f7a 100644 --- a/usrp2/top/u1e/u1e_core.v +++ b/usrp2/top/u1e/u1e_core.v @@ -1,7 +1,8 @@ //`define LOOPBACK 1 -`define TIMED 1 +//`define TIMED 1 +`define DSP 1 module u1e_core (input clk_fpga, input rst_fpga, @@ -18,14 +19,31 @@ module u1e_core input cgen_st_status, input cgen_st_ld, input cgen_st_refmon, output cgen_sync_b, output cgen_ref_sel, output tx_have_space, output tx_underrun, output rx_have_data, output rx_overrun, inout [15:0] io_tx, inout [15:0] io_rx, - output reg [13:0] tx, output reg txsync, output txblank, + output [13:0] tx_i, output [13:0] tx_q, + input [11:0] rx_i, input [11:0] rx_q, input [11:0] misc_gpio, input pps_in ); - + + localparam TXFIFOSIZE = 11; + localparam RXFIFOSIZE = 11; + localparam SR_TIME64 = 0; + localparam SR_RX_DSP = 0; + localparam SR_RX_CTRL = 0; + localparam SR_TX_DSP = 0; + localparam SR_TX_CTRL = 0; + wire wb_clk = clk_fpga; wire wb_rst = rst_fpga; + wire pps_int; + wire [63:0] vita_time; + reg [15:0] reg_leds, reg_cgen_ctrl, reg_test, xfer_rate; + + wire [7:0] set_addr; + wire [31:0] set_data; + wire set_stb; + // ///////////////////////////////////////////////////////////////////////////////////// // GPMC Slave to Wishbone Master localparam dw = 16; @@ -47,33 +65,36 @@ module u1e_core wire bus_error; - gpmc_async gpmc (.arst(wb_rst), - .EM_CLK(EM_CLK), .EM_D(EM_D), .EM_A(EM_A), .EM_NBE(EM_NBE), - .EM_WAIT0(EM_WAIT0), .EM_NCS4(EM_NCS4), .EM_NCS6(EM_NCS6), .EM_NWE(EM_NWE), - .EM_NOE(EM_NOE), - - .rx_have_data(rx_have_data), .tx_have_space(tx_have_space), - .bus_error(bus_error), .bus_reset(0), - - .wb_clk(wb_clk), .wb_rst(wb_rst), - .wb_adr_o(m0_adr), .wb_dat_mosi(m0_dat_mosi), .wb_dat_miso(m0_dat_miso), - .wb_sel_o(m0_sel), .wb_cyc_o(m0_cyc), .wb_stb_o(m0_stb), .wb_we_o(m0_we), - .wb_ack_i(m0_ack), - - .fifo_clk(wb_clk), .fifo_rst(wb_rst), - .tx_data_o(tx_data), .tx_src_rdy_o(tx_src_rdy), .tx_dst_rdy_i(tx_dst_rdy), - .rx_data_i(rx_data), .rx_src_rdy_i(rx_src_rdy), .rx_dst_rdy_o(rx_dst_rdy), - - .tx_frame_len(tx_frame_len), .rx_frame_len(rx_frame_len), - .debug(debug_gpmc)); + gpmc_async #(.TXFIFOSIZE(TXFIFOSIZE), .RXFIFOSIZE(RXFIFOSIZE)) + gpmc (.arst(wb_rst), + .EM_CLK(EM_CLK), .EM_D(EM_D), .EM_A(EM_A), .EM_NBE(EM_NBE), + .EM_WAIT0(EM_WAIT0), .EM_NCS4(EM_NCS4), .EM_NCS6(EM_NCS6), .EM_NWE(EM_NWE), + .EM_NOE(EM_NOE), + + .rx_have_data(rx_have_data), .tx_have_space(tx_have_space), + .bus_error(bus_error), .bus_reset(0), + + .wb_clk(wb_clk), .wb_rst(wb_rst), + .wb_adr_o(m0_adr), .wb_dat_mosi(m0_dat_mosi), .wb_dat_miso(m0_dat_miso), + .wb_sel_o(m0_sel), .wb_cyc_o(m0_cyc), .wb_stb_o(m0_stb), .wb_we_o(m0_we), + .wb_ack_i(m0_ack), + + .fifo_clk(wb_clk), .fifo_rst(wb_rst), + .tx_data_o(tx_data), .tx_src_rdy_o(tx_src_rdy), .tx_dst_rdy_i(tx_dst_rdy), + .rx_data_i(rx_data), .rx_src_rdy_i(rx_src_rdy), .rx_dst_rdy_o(rx_dst_rdy), + + .tx_frame_len(tx_frame_len), .rx_frame_len(rx_frame_len), + .debug(debug_gpmc)); + wire rx_sof = rx_data[32]; + wire rx_eof = rx_data[33]; + wire rx_src_rdy_int, rx_dst_rdy_int, tx_src_rdy_int, tx_dst_rdy_int; + `ifdef LOOPBACK fifo_cascade #(.WIDTH(36), .SIZE(9)) loopback_fifo (.clk(wb_clk), .reset(wb_rst), .clear(0), .datain(tx_data), .src_rdy_i(tx_src_rdy), .dst_rdy_o(tx_dst_rdy), .dataout(rx_data), .src_rdy_o(rx_src_rdy), .dst_rdy_i(rx_dst_rdy)); - wire rx_sof = rx_data[32]; - wire rx_eof = rx_data[33]; `endif // LOOPBACK `ifdef TIMED @@ -93,9 +114,7 @@ module u1e_core .total(total), .crc_err(crc_err), .seq_err(seq_err), .len_err(len_err)); // RX side - wire rx_enable, rx_src_rdy_int, rx_dst_rdy_int; - wire rx_sof = rx_data[32]; - wire rx_eof = rx_data[33]; + wire rx_enable; packet_generator32 pktgen32 (.clk(wb_clk), .reset(wb_rst), .clear(clear), @@ -108,7 +127,90 @@ module u1e_core .underrun(), .overrun(rx_overrun)); `endif // `ifdef TIMED + +`ifdef DSP + wire [31:0] debug_rx_dsp, vrc_debug, vrf_debug; + + // ///////////////////////////////////////////////////////////////////////// + // DSP RX + wire [31:0] sample_rx, sample_tx; + wire strobe_rx, strobe_tx; + wire rx1_dst_rdy, rx1_src_rdy; + wire [99:0] rx1_data; + + dsp_core_rx #(.BASE(SR_RX_DSP)) dsp_core_rx + (.clk(wb_clk),.rst(wb_rst), + .set_stb(set_stb),.set_addr(set_addr),.set_data(set_data), + .adc_a({rx_i,2'b0}),.adc_ovf_a(0),.adc_b({rx_q,2'b0}),.adc_ovf_b(0), + .sample(sample_rx), .run(run_rx_d1), .strobe(strobe_rx), + .debug(debug_rx_dsp) ); + + vita_rx_control #(.BASE(SR_RX_CTRL), .WIDTH(32)) vita_rx_control + (.clk(wb_clk), .reset(wb_rst), .clear(0), + .set_stb(set_stb),.set_addr(set_addr),.set_data(set_data), + .vita_time(vita_time), .overrun(overrun), + .sample(sample_rx), .run(run_rx), .strobe(strobe_rx), + .sample_fifo_o(rx1_data), .sample_fifo_dst_rdy_i(rx1_dst_rdy), .sample_fifo_src_rdy_o(rx1_src_rdy), + .debug_rx(vrc_debug)); + + vita_rx_framer #(.BASE(SR_RX_CTRL), .MAXCHAN(1)) vita_rx_framer + (.clk(wb_clk), .reset(wb_rst), .clear(0), + .set_stb(set_stb),.set_addr(set_addr),.set_data(set_data), + .sample_fifo_i(rx1_data), .sample_fifo_dst_rdy_o(rx1_dst_rdy), .sample_fifo_src_rdy_i(rx1_src_rdy), + .data_o(rx_data), .dst_rdy_i(rx_dst_rdy), .src_rdy_o(rx_src_rdy), + .fifo_occupied(), .fifo_full(), .fifo_empty(), + .debug_rx(vrf_debug) ); + + // /////////////////////////////////////////////////////////////////////////////////// + // DSP TX + + wire [99:0] tx1_data; + wire tx1_src_rdy, tx1_dst_rdy; + wire [15:0] tx_i_int, tx_q_int; + wire [31:0] debug_vtc, debug_vtd, debug_vt; + + vita_tx_deframer #(.BASE(SR_TX_CTRL), .MAXCHAN(1)) vita_tx_deframer + (.clk(wb_clk), .reset(wb_rst), .clear(0), + .set_stb(set_stb),.set_addr(set_addr),.set_data(set_data), + .data_i(tx_data), .src_rdy_i(tx_src_rdy), .dst_rdy_o(tx_dst_rdy), + .sample_fifo_o(tx1_data), .sample_fifo_src_rdy_o(tx1_src_rdy), .sample_fifo_dst_rdy_i(tx1_dst_rdy), + .debug(debug_vtd) ); + + vita_tx_control #(.BASE(SR_TX_CTRL), .WIDTH(32)) vita_tx_control + (.clk(wb_clk), .reset(wb_rst), .clear(0), + .set_stb(set_stb),.set_addr(set_addr),.set_data(set_data), + .vita_time(vita_time),.underrun(underrun), + .sample_fifo_i(tx1_data), .sample_fifo_src_rdy_i(tx1_src_rdy), .sample_fifo_dst_rdy_o(tx1_dst_rdy), + .sample(sample_tx), .run(run_tx), .strobe(strobe_tx), + .debug(debug_vtc) ); + + dsp_core_tx #(.BASE(SR_TX_DSP)) dsp_core_tx + (.clk(wb_clk),.rst(wb_rst), + .set_stb(set_stb),.set_addr(set_addr),.set_data(set_data), + .sample(sample_tx), .run(run_tx), .strobe(strobe_tx), + .dac_a(tx_i_int),.dac_b(tx_q_int), + .debug(debug_tx_dsp) ); + + assign tx_i = tx_i_int[15:2]; + assign tx_q = tx_q_int[15:2]; + +`else // !`ifdef DSP + // Dummy DSP signal generator for test purposes + wire [23:0] tx_i_int, tx_q_int; + wire [23:0] freq = {reg_test,8'd0}; + reg [23:0] phase; + + always @(posedge wb_clk) + phase <= phase + freq; + cordic_z24 #(.bitwidth(24)) tx_cordic + (.clock(wb_clk), .reset(wb_rst), .enable(1), + .xi(24'd2500000), .yi(24'd0), .zi(phase), .xo(tx_i_int), .yo(tx_q_int), .zo()); + + assign tx_i = tx_i_int[23:10]; + assign tx_q = tx_q_int[23:10]; +`endif // !`ifdef DSP + // ///////////////////////////////////////////////////////////////////////////////////// // Wishbone Intercon, single master wire [dw-1:0] s0_dat_mosi, s1_dat_mosi, s0_dat_miso, s1_dat_miso, s2_dat_mosi, s3_dat_mosi, s2_dat_miso, s3_dat_miso, @@ -181,8 +283,6 @@ module u1e_core // ///////////////////////////////////////////////////////////////////////////////////// // Slave 0, Misc LEDs, Switches, controls - reg [15:0] reg_leds, reg_cgen_ctrl, reg_test, xfer_rate; - localparam REG_LEDS = 7'd0; // out localparam REG_SWITCHES = 7'd2; // in localparam REG_CGEN_CTRL = 7'd4; // out @@ -288,10 +388,6 @@ module u1e_core // ///////////////////////////////////////////////////////////////////////// // Settings Bus -- Slave #5 - wire [7:0] set_addr; - wire [31:0] set_data; - wire set_stb; - // only have 32 regs, 32 bits each with current setup... settings_bus_16LE #(.AWIDTH(11),.RWIDTH(11-4-2)) settings_bus_16LE (.wb_clk(wb_clk),.wb_rst(wb_rst),.wb_adr_i(s5_adr),.wb_dat_i(s5_dat_mosi), @@ -311,51 +407,9 @@ module u1e_core // ///////////////////////////////////////////////////////////////////////// // VITA Timing - localparam SR_TIME64 = 0; - wire pps_int; - wire [63:0] vita_time; - time_64bit #(.TICKS_PER_SEC(32'd64000000),.BASE(SR_TIME64)) time_64bit (.clk(wb_clk), .rst(wb_rst), .set_stb(set_stb), .set_addr(set_addr), .set_data(set_data), .pps(pps_in), .vita_time(vita_time), .pps_int(pps_int)); - - - // ///////////////////////////////////////////////////////////////////////// - // TX - - assign txblank = 0; - - wire [23:0] freq = {reg_test,8'd0}; - - reg [23:0] tx_q_hold; - wire [23:0] tx_i, tx_q; - - reg tx_stb; - always @(posedge wb_clk) - tx_stb <= ~tx_stb; - - always @(posedge wb_clk) - if(tx_stb) - tx <= tx_i[23:10]; - else - tx <= tx_q_hold[23:10]; - - always @(posedge wb_clk) - if(tx_stb) - tx_q_hold <= tx_q; - - always @(posedge wb_clk) - txsync <= ~tx_stb; // TX Sync low indicates first data item - // We invert here if we don't use inv_txsync in the 9862 - - reg [23:0] phase; - always @(posedge wb_clk) - if(tx_stb) - phase <= phase + freq; - - cordic_z24 #(.bitwidth(24)) tx_cordic - (.clock(wb_clk), .reset(wb_rst), .enable(1), - .xi(24'd2500000), .yi(24'd0), .zi(phase), .xo(tx_i), .yo(tx_q), .zo()); // ///////////////////////////////////////////////////////////////////////////////////// // Debug circuitry -- cgit v1.2.3 From 552c3477734c6c302c53fe039d6e85134fcf210c Mon Sep 17 00:00:00 2001 From: Matt Ettus Date: Tue, 1 Jun 2010 16:20:24 -0700 Subject: assign addresses for the settings regs --- usrp2/top/u1e/u1e_core.v | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/usrp2/top/u1e/u1e_core.v b/usrp2/top/u1e/u1e_core.v index 002b28f7a..ed4176ca5 100644 --- a/usrp2/top/u1e/u1e_core.v +++ b/usrp2/top/u1e/u1e_core.v @@ -27,11 +27,12 @@ module u1e_core localparam TXFIFOSIZE = 11; localparam RXFIFOSIZE = 11; - localparam SR_TIME64 = 0; - localparam SR_RX_DSP = 0; - localparam SR_RX_CTRL = 0; - localparam SR_TX_DSP = 0; - localparam SR_TX_CTRL = 0; + + localparam SR_RX_DSP = 0; // 7 regs + localparam SR_RX_CTRL = 8; // 9 regs + localparam SR_TX_DSP = 17; // 5 regs + localparam SR_TX_CTRL = 24; // 2 regs + localparam SR_TIME64 = 28; // 4 regs wire wb_clk = clk_fpga; wire wb_rst = rst_fpga; -- cgit v1.2.3 From 7a776f9fce357b298566d0a417a1417c4484723c Mon Sep 17 00:00:00 2001 From: Matt Ettus Date: Tue, 1 Jun 2010 18:23:09 -0700 Subject: use DDR regs instead of a 2nd clock --- usrp2/top/u1e/u1e.v | 54 +++++++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 46 insertions(+), 8 deletions(-) diff --git a/usrp2/top/u1e/u1e.v b/usrp2/top/u1e/u1e.v index 3018ff100..523aae1b9 100644 --- a/usrp2/top/u1e/u1e.v +++ b/usrp2/top/u1e/u1e.v @@ -1,6 +1,8 @@ `timescale 1ns / 1ps ////////////////////////////////////////////////////////////////////////////////// +//`define DCM 1 + module u1e (input CLK_FPGA_P, input CLK_FPGA_N, // Diff output [2:0] debug_led, output [31:0] debug, output [1:0] debug_clk, @@ -26,7 +28,7 @@ module u1e inout [15:0] io_tx, inout [15:0] io_rx, - output reg [13:0] TX, output reg TXSYNC, output TXBLANK, + output [13:0] TX, output TXSYNC, output TXBLANK, input [11:0] DA, input [11:0] DB, input RXSYNC, input PPS_IN @@ -34,11 +36,13 @@ module u1e // ///////////////////////////////////////////////////////////////////////// // Clocking - wire clk_fpga, clk_fpga_in, clk_2x, dcm_rst, dcm_locked; + wire clk_fpga, clk_fpga_in; IBUFGDS #(.IOSTANDARD("LVDS_33"), .DIFF_TERM("TRUE")) clk_fpga_pin (.O(clk_fpga_in),.I(CLK_FPGA_P),.IB(CLK_FPGA_N)); +`ifdef DCM + wire clk_2x, dcm_rst, dcm_locked; DCM #(.CLK_FEEDBACK ( "1X" ), .CLKDV_DIVIDE ( 2.0 ), .CLKFX_DIVIDE ( 1 ), @@ -59,11 +63,10 @@ module u1e .CLK2X(clk_2x), .CLK2X180(), .CLK0(clk_fpga), .CLK90(), .CLK180(), .CLK270(), .LOCKED(dcm_locked), .STATUS()); - - //BUFG dspclk_BUFG (.I(dcm_out), .O(dsp_clk)); - //BUFG wbclk_BUFG (.I(clk_div), .O(wb_clk)); - - +`else // !`ifdef DCM + BUFG clk_fpga_BUFG (.I(clk_fpga_in), .O(clk_fpga)); +`endif // !`ifdef DCM + // ///////////////////////////////////////////////////////////////////////// // SPI wire mosi, sclk, miso; @@ -79,6 +82,10 @@ module u1e assign TXBLANK = 0; wire [13:0] tx_i, tx_q; + +`ifdef DCM + reg [13:0] TX; + reg TXSYNC; always @(posedge clk_2x) if(clk_fpga) @@ -91,7 +98,38 @@ module u1e TX <= tx_q; TXSYNC <= 1; end - +`else // !`ifdef DCM + genvar i; + generate + for(i=0;i<14;i=i+1) + begin : gen_dacout + ODDR2 #(.DDR_ALIGNMENT("NONE"), // Sets output alignment to "NONE", "C0" or "C1" + .INIT(1'b0), // Sets initial state of the Q output to 1'b0 or 1'b1 + .SRTYPE("SYNC")) // Specifies "SYNC" or "ASYNC" set/reset + ODDR2_inst (.Q(TX[i]), // 1-bit DDR output data + .C0(clk_fpga), // 1-bit clock input + .C1(~clk_fpga), // 1-bit clock input + .CE(1'b1), // 1-bit clock enable input + .D0(tx_i[i]), // 1-bit data input (associated with C0) + .D1(tx_q[i]), // 1-bit data input (associated with C1) + .R(1'b0), // 1-bit reset input + .S(1'b0)); // 1-bit set input + end // block: gen_dacout + endgenerate + ODDR2 #(.DDR_ALIGNMENT("NONE"), // Sets output alignment to "NONE", "C0" or "C1" + .INIT(1'b0), // Sets initial state of the Q output to 1'b0 or 1'b1 + .SRTYPE("SYNC")) // Specifies "SYNC" or "ASYNC" set/reset + ODDR2_txsnc (.Q(TXSYNC), // 1-bit DDR output data + .C0(clk_fpga), // 1-bit clock input + .C1(~clk_fpga), // 1-bit clock input + .CE(1'b1), // 1-bit clock enable input + .D0(1'b0), // 1-bit data input (associated with C0) + .D1(1'b1), // 1-bit data input (associated with C1) + .R(1'b0), // 1-bit reset input + .S(1'b0)); // 1-bit set input + +`endif // !`ifdef DCM + // ///////////////////////////////////////////////////////////////////////// // Main U1E Core u1e_core u1e_core(.clk_fpga(clk_fpga), .rst_fpga(~debug_pb[2]), -- cgit v1.2.3 From b96282d6d9d7aad94d82f2ac6487460f4850a55c Mon Sep 17 00:00:00 2001 From: Matt Ettus Date: Tue, 1 Jun 2010 18:23:35 -0700 Subject: connect the rx run lines so it doesn't get optimized out --- usrp2/top/u1e/u1e_core.v | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/usrp2/top/u1e/u1e_core.v b/usrp2/top/u1e/u1e_core.v index ed4176ca5..7307a0299 100644 --- a/usrp2/top/u1e/u1e_core.v +++ b/usrp2/top/u1e/u1e_core.v @@ -138,12 +138,14 @@ module u1e_core wire strobe_rx, strobe_tx; wire rx1_dst_rdy, rx1_src_rdy; wire [99:0] rx1_data; + wire run_rx; + dsp_core_rx #(.BASE(SR_RX_DSP)) dsp_core_rx (.clk(wb_clk),.rst(wb_rst), .set_stb(set_stb),.set_addr(set_addr),.set_data(set_data), .adc_a({rx_i,2'b0}),.adc_ovf_a(0),.adc_b({rx_q,2'b0}),.adc_ovf_b(0), - .sample(sample_rx), .run(run_rx_d1), .strobe(strobe_rx), + .sample(sample_rx), .run(run_rx), .strobe(strobe_rx), .debug(debug_rx_dsp) ); vita_rx_control #(.BASE(SR_RX_CTRL), .WIDTH(32)) vita_rx_control @@ -169,6 +171,7 @@ module u1e_core wire tx1_src_rdy, tx1_dst_rdy; wire [15:0] tx_i_int, tx_q_int; wire [31:0] debug_vtc, debug_vtd, debug_vt; + wire run_tx; vita_tx_deframer #(.BASE(SR_TX_CTRL), .MAXCHAN(1)) vita_tx_deframer (.clk(wb_clk), .reset(wb_rst), .clear(0), -- cgit v1.2.3 From d2163a256d55692c19b0a717e382850a6546f80f Mon Sep 17 00:00:00 2001 From: Matt Ettus Date: Tue, 1 Jun 2010 18:56:44 -0700 Subject: use same version as usrp2-udp, so regs are same place in memory map --- usrp2/top/u1e/Makefile | 2 +- usrp2/top/u1e/u1e_core.v | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/usrp2/top/u1e/Makefile b/usrp2/top/u1e/Makefile index 7f5085275..edfc47c53 100644 --- a/usrp2/top/u1e/Makefile +++ b/usrp2/top/u1e/Makefile @@ -160,7 +160,7 @@ sdr_lib/clip_reg.v \ sdr_lib/cordic.v \ sdr_lib/cordic_z24.v \ sdr_lib/cordic_stage.v \ -sdr_lib/dsp_core_rx.v \ +sdr_lib/dsp_core_rx_udp.v \ sdr_lib/dsp_core_tx.v \ sdr_lib/hb_dec.v \ sdr_lib/hb_interp.v \ diff --git a/usrp2/top/u1e/u1e_core.v b/usrp2/top/u1e/u1e_core.v index 7307a0299..12ce41c23 100644 --- a/usrp2/top/u1e/u1e_core.v +++ b/usrp2/top/u1e/u1e_core.v @@ -28,7 +28,7 @@ module u1e_core localparam TXFIFOSIZE = 11; localparam RXFIFOSIZE = 11; - localparam SR_RX_DSP = 0; // 7 regs + localparam SR_RX_DSP = 0; // 5 regs localparam SR_RX_CTRL = 8; // 9 regs localparam SR_TX_DSP = 17; // 5 regs localparam SR_TX_CTRL = 24; // 2 regs -- cgit v1.2.3 From 4f1b2441c0250a61f691c038f8bd9cfb229bd103 Mon Sep 17 00:00:00 2001 From: Matt Ettus Date: Thu, 3 Jun 2010 08:44:13 -0700 Subject: Phil wants gpio #145 --- usrp2/top/u1e_passthru/passthru.ucf | 4 ++-- usrp2/top/u1e_passthru/passthru.v | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/usrp2/top/u1e_passthru/passthru.ucf b/usrp2/top/u1e_passthru/passthru.ucf index 3ffe33882..fcfce61b2 100644 --- a/usrp2/top/u1e_passthru/passthru.ucf +++ b/usrp2/top/u1e_passthru/passthru.ucf @@ -54,10 +54,10 @@ #NET "overo_gpio23" LOC = "B3" ; # MISC GPIO for debug #NET "overo_gpio64" LOC = "A4" ; # MISC GPIO for debug #NET "overo_gpio65" LOC = "F8" ; # MISC GPIO for debug -NET "overo_gpio127" LOC = "C8" ; # passed through as cgen_sen_b +#NET "overo_gpio127" LOC = "C8" ; # passed through as cgen_sen_b #NET "overo_gpio128" LOC = "G8" ; # MISC GPIO for debug #NET "overo_gpio144" LOC = "A5" ; # tx_have_space -#NET "overo_gpio145" LOC = "C7" ; # tx_underrun +NET "overo_gpio145" LOC = "C7" ; # tx_underrun #NET "overo_gpio146" LOC = "A6" ; # rx_have_data #NET "overo_gpio147" LOC = "B6" ; # rx_overrun #NET "overo_gpio163" LOC = "D7" ; # MISC GPIO for debug diff --git a/usrp2/top/u1e_passthru/passthru.v b/usrp2/top/u1e_passthru/passthru.v index d846f2cf6..12e4db017 100644 --- a/usrp2/top/u1e_passthru/passthru.v +++ b/usrp2/top/u1e_passthru/passthru.v @@ -2,7 +2,7 @@ ////////////////////////////////////////////////////////////////////////////////// module passthru - (input overo_gpio127, + (input overo_gpio145, output cgen_sclk, output cgen_sen_b, output cgen_mosi, @@ -11,7 +11,7 @@ module passthru ); assign cgen_sclk = fpga_cfg_cclk; - assign cgen_sen_b = overo_gpio127; + assign cgen_sen_b = overo_gpio145; assign cgen_mosi = fpga_cfg_din; -- cgit v1.2.3 From 761e22013c6715987c411216d012098e60684836 Mon Sep 17 00:00:00 2001 From: Matt Ettus Date: Sun, 6 Jun 2010 02:26:48 -0700 Subject: get rid of redundant fifo18, since we can just use fifo19 and ignore the occ bit --- usrp2/control_lib/newfifo/fifo36_to_fifo18.v | 40 ---------------------------- usrp2/gpmc/gpmc_async.v | 5 ++-- usrp2/gpmc/gpmc_sync.v | 5 ++-- 3 files changed, 6 insertions(+), 44 deletions(-) delete mode 100644 usrp2/control_lib/newfifo/fifo36_to_fifo18.v diff --git a/usrp2/control_lib/newfifo/fifo36_to_fifo18.v b/usrp2/control_lib/newfifo/fifo36_to_fifo18.v deleted file mode 100644 index b636ab9ca..000000000 --- a/usrp2/control_lib/newfifo/fifo36_to_fifo18.v +++ /dev/null @@ -1,40 +0,0 @@ - -module fifo36_to_fifo18 - (input clk, input reset, input clear, - input [35:0] f36_datain, - input f36_src_rdy_i, - output f36_dst_rdy_o, - - output [17:0] f18_dataout, - output f18_src_rdy_o, - input f18_dst_rdy_i ); - - wire f36_sof = f36_datain[32]; - wire f36_eof = f36_datain[33]; - wire f36_occ = f36_datain[35:34]; - - reg phase; - - wire half_line = f36_eof & ((f36_occ==1)|(f36_occ==2)); - - assign f18_dataout[15:0] = phase ? f36_datain[15:0] : f36_datain[31:16]; - assign f18_dataout[16] = phase ? 0 : f36_sof; - assign f18_dataout[17] = phase ? f36_eof : half_line; - - assign f18_src_rdy_o = f36_src_rdy_i; - assign f36_dst_rdy_o = (phase | half_line) & f18_dst_rdy_i; - - wire f18_xfer = f18_src_rdy_o & f18_dst_rdy_i; - wire f36_xfer = f36_src_rdy_i & f36_dst_rdy_o; - - always @(posedge clk) - if(reset) - phase <= 0; - else if(f36_xfer) - phase <= 0; - else if(f18_xfer) - phase <= 1; - - -endmodule // fifo36_to_fifo18 - diff --git a/usrp2/gpmc/gpmc_async.v b/usrp2/gpmc/gpmc_async.v index 380689c62..f42b835ed 100644 --- a/usrp2/gpmc/gpmc_async.v +++ b/usrp2/gpmc/gpmc_async.v @@ -82,16 +82,17 @@ module gpmc_async wire [15:0] rx_fifo_space; wire [35:0] rx36_data; wire rx36_src_rdy, rx36_dst_rdy; + wire dummy; fifo_cascade #(.WIDTH(36), .SIZE(RXFIFOSIZE)) rx_fifo36 (.clk(wb_clk), .reset(wb_rst), .clear(0), .datain(rx_data_i), .src_rdy_i(rx_src_rdy_i), .dst_rdy_o(rx_dst_rdy_o), .dataout(rx36_data), .src_rdy_o(rx36_src_rdy), .dst_rdy_i(rx36_dst_rdy)); - fifo36_to_fifo18 f18_to_f36 + fifo36_to_fifo19 f36_to_f19 (.clk(fifo_clk), .reset(fifo_rst), .clear(0), .f36_datain(rx36_data), .f36_src_rdy_i(rx36_src_rdy), .f36_dst_rdy_o(rx36_dst_rdy), - .f18_dataout(rx18_data), .f18_src_rdy_o(rx18_src_rdy), .f18_dst_rdy_i(rx18_dst_rdy) ); + .f19_dataout({dummy,rx18_data}), .f19_src_rdy_o(rx18_src_rdy), .f19_dst_rdy_i(rx18_dst_rdy) ); fifo_cascade #(.WIDTH(18), .SIZE(12)) rx_fifo (.clk(fifo_clk), .reset(fifo_rst), .clear(0), diff --git a/usrp2/gpmc/gpmc_sync.v b/usrp2/gpmc/gpmc_sync.v index 825d131d8..bac489ca0 100644 --- a/usrp2/gpmc/gpmc_sync.v +++ b/usrp2/gpmc/gpmc_sync.v @@ -68,11 +68,12 @@ module gpmc_sync wire [17:0] rx18_data, rx18b_data; wire rx18_src_rdy, rx18_dst_rdy, rx18b_src_rdy, rx18b_dst_rdy; wire [15:0] rx_fifo_space, rx_frame_len; + wire dummy; - fifo36_to_fifo18 f18_to_f36 + fifo36_to_fifo19 f36_to_f19 (.clk(fifo_clk), .reset(fifo_rst), .clear(0), .f36_datain(rx_data_i), .f36_src_rdy_i(rx_src_rdy_i), .f36_dst_rdy_o(rx_dst_rdy_o), - .f18_dataout(rx18_data), .f18_src_rdy_o(rx18_src_rdy), .f18_dst_rdy_i(rx18_dst_rdy) ); + .f19_dataout({dummy,rx18_data}), .f19_src_rdy_o(rx18_src_rdy), .f19_dst_rdy_i(rx18_dst_rdy) ); fifo_2clock_cascade #(.WIDTH(18), .SIZE(10)) rx_fifo (.wclk(fifo_clk), .datain(rx18_data), -- cgit v1.2.3 From 3122c8c3d9740a2fd5e68b99df627bc632d764da Mon Sep 17 00:00:00 2001 From: Matt Ettus Date: Sun, 6 Jun 2010 02:50:18 -0700 Subject: added little endian capability for gpmc to fifo and fifo to gpmc, since ARM is LE. --- usrp2/control_lib/newfifo/fifo19_to_fifo36.v | 40 ++++++++++++++----------- usrp2/control_lib/newfifo/fifo36_to_fifo19.v | 44 +++++++++++++++------------- usrp2/gpmc/gpmc_async.v | 4 +-- usrp2/gpmc/gpmc_sync.v | 4 +-- 4 files changed, 51 insertions(+), 41 deletions(-) diff --git a/usrp2/control_lib/newfifo/fifo19_to_fifo36.v b/usrp2/control_lib/newfifo/fifo19_to_fifo36.v index 5f9aeff9b..0e6bcea68 100644 --- a/usrp2/control_lib/newfifo/fifo19_to_fifo36.v +++ b/usrp2/control_lib/newfifo/fifo19_to_fifo36.v @@ -1,26 +1,31 @@ +// Parameter LE tells us if we are little-endian. +// Little-endian means send lower 16 bits first. +// Default is big endian (network order), send upper bits first. + module fifo19_to_fifo36 - (input clk, input reset, input clear, - input [18:0] f19_datain, - input f19_src_rdy_i, - output f19_dst_rdy_o, + #(parameter LE=0) + (input clk, input reset, input clear, + input [18:0] f19_datain, + input f19_src_rdy_i, + output f19_dst_rdy_o, - output [35:0] f36_dataout, - output f36_src_rdy_o, - input f36_dst_rdy_i, - output [31:0] debug - ); + output [35:0] f36_dataout, + output f36_src_rdy_o, + input f36_dst_rdy_i, + output [31:0] debug + ); - reg f36_sof, f36_eof, f36_occ; + reg f36_sof, f36_eof, f36_occ; - reg [1:0] state; - reg [15:0] dat0, dat1; + reg [1:0] state; + reg [15:0] dat0, dat1; - wire f19_sof = f19_datain[16]; - wire f19_eof = f19_datain[17]; - wire f19_occ = f19_datain[18]; + wire f19_sof = f19_datain[16]; + wire f19_eof = f19_datain[17]; + wire f19_occ = f19_datain[18]; - wire xfer_out = f36_src_rdy_o & f36_dst_rdy_i; + wire xfer_out = f36_src_rdy_o & f36_dst_rdy_i; always @(posedge clk) if(f19_src_rdy_i & ((state==0)|xfer_out)) @@ -68,7 +73,8 @@ module fifo19_to_fifo36 dat0 <= f19_datain; assign f19_dst_rdy_o = xfer_out | (state != 2); - assign f36_dataout = {f36_occ,f36_eof,f36_sof,dat0,dat1}; + assign f36_dataout = LE ? {f36_occ,f36_eof,f36_sof,dat1,dat0} : + {f36_occ,f36_eof,f36_sof,dat0,dat1}; assign f36_src_rdy_o = (state == 2); assign debug = state; diff --git a/usrp2/control_lib/newfifo/fifo36_to_fifo19.v b/usrp2/control_lib/newfifo/fifo36_to_fifo19.v index de249aaeb..517a2a476 100644 --- a/usrp2/control_lib/newfifo/fifo36_to_fifo19.v +++ b/usrp2/control_lib/newfifo/fifo36_to_fifo19.v @@ -1,33 +1,38 @@ -module fifo36_to_fifo19 - (input clk, input reset, input clear, - input [35:0] f36_datain, - input f36_src_rdy_i, - output f36_dst_rdy_o, - - output [18:0] f19_dataout, - output f19_src_rdy_o, - input f19_dst_rdy_i ); +// Parameter LE tells us if we are little-endian. +// Little-endian means send lower 16 bits first. +// Default is big endian (network order), send upper bits first. +module fifo36_to_fifo19 + #(parameter LE=0) + (input clk, input reset, input clear, + input [35:0] f36_datain, + input f36_src_rdy_i, + output f36_dst_rdy_o, + + output [18:0] f19_dataout, + output f19_src_rdy_o, + input f19_dst_rdy_i ); + wire f36_sof = f36_datain[32]; wire f36_eof = f36_datain[33]; wire f36_occ = f36_datain[35:34]; - - reg phase; - - wire half_line = f36_eof & ((f36_occ==1)|(f36_occ==2)); - assign f19_dataout[15:0] = phase ? f36_datain[15:0] : f36_datain[31:16]; + reg phase; + + wire half_line = f36_eof & ((f36_occ==1)|(f36_occ==2)); + + assign f19_dataout[15:0] = (LE ^ phase) ? f36_datain[15:0] : f36_datain[31:16]; assign f19_dataout[16] = phase ? 0 : f36_sof; assign f19_dataout[17] = phase ? f36_eof : half_line; assign f19_dataout[18] = f19_dataout[17] & ((f36_occ==1)|(f36_occ==3)); assign f19_src_rdy_o = f36_src_rdy_i; assign f36_dst_rdy_o = (phase | half_line) & f19_dst_rdy_i; - - wire f19_xfer = f19_src_rdy_o & f19_dst_rdy_i; - wire f36_xfer = f36_src_rdy_i & f36_dst_rdy_o; - + + wire f19_xfer = f19_src_rdy_o & f19_dst_rdy_i; + wire f36_xfer = f36_src_rdy_i & f36_dst_rdy_o; + always @(posedge clk) if(reset) phase <= 0; @@ -36,6 +41,5 @@ module fifo36_to_fifo19 else if(f19_xfer) phase <= 1; - + endmodule // fifo36_to_fifo19 - diff --git a/usrp2/gpmc/gpmc_async.v b/usrp2/gpmc/gpmc_async.v index f42b835ed..1050cef7d 100644 --- a/usrp2/gpmc/gpmc_async.v +++ b/usrp2/gpmc/gpmc_async.v @@ -64,7 +64,7 @@ module gpmc_async .datain(tx18_data), .src_rdy_i(tx18_src_rdy), .dst_rdy_o(tx18_dst_rdy), .space(tx_fifo_space), .dataout(tx18b_data), .src_rdy_o(tx18b_src_rdy), .dst_rdy_i(tx18b_dst_rdy), .occupied()); - fifo19_to_fifo36 f19_to_f36 + fifo19_to_fifo36 #(.LE(1)) f19_to_f36 // Little endian because ARM is LE (.clk(fifo_clk), .reset(fifo_rst), .clear(0), .f19_datain({1'b0,tx18b_data}), .f19_src_rdy_i(tx18b_src_rdy), .f19_dst_rdy_o(tx18b_dst_rdy), .f36_dataout(tx36_data), .f36_src_rdy_o(tx36_src_rdy), .f36_dst_rdy_i(tx36_dst_rdy)); @@ -89,7 +89,7 @@ module gpmc_async .datain(rx_data_i), .src_rdy_i(rx_src_rdy_i), .dst_rdy_o(rx_dst_rdy_o), .dataout(rx36_data), .src_rdy_o(rx36_src_rdy), .dst_rdy_i(rx36_dst_rdy)); - fifo36_to_fifo19 f36_to_f19 + fifo36_to_fifo19 #(.LE(1)) f36_to_f19 // Little endian because ARM is LE (.clk(fifo_clk), .reset(fifo_rst), .clear(0), .f36_datain(rx36_data), .f36_src_rdy_i(rx36_src_rdy), .f36_dst_rdy_o(rx36_dst_rdy), .f19_dataout({dummy,rx18_data}), .f19_src_rdy_o(rx18_src_rdy), .f19_dst_rdy_i(rx18_dst_rdy) ); diff --git a/usrp2/gpmc/gpmc_sync.v b/usrp2/gpmc/gpmc_sync.v index bac489ca0..61c54a793 100644 --- a/usrp2/gpmc/gpmc_sync.v +++ b/usrp2/gpmc/gpmc_sync.v @@ -57,7 +57,7 @@ module gpmc_sync .rclk(fifo_clk), .dataout(tx18b_data), .src_rdy_o(tx18b_src_rdy), .dst_rdy_i(tx18b_dst_rdy), .occupied(), .arst(arst)); - fifo19_to_fifo36 f19_to_f36 + fifo19_to_fifo36 #(.LE(1)) f19_to_f36 // Little endian because ARM is LE (.clk(fifo_clk), .reset(fifo_rst), .clear(0), .f19_datain({1'b0,tx18b_data}), .f19_src_rdy_i(tx18b_src_rdy), .f19_dst_rdy_o(tx18b_dst_rdy), .f36_dataout(tx_data_o), .f36_src_rdy_o(tx_src_rdy_o), .f36_dst_rdy_i(tx_dst_rdy_i)); @@ -70,7 +70,7 @@ module gpmc_sync wire [15:0] rx_fifo_space, rx_frame_len; wire dummy; - fifo36_to_fifo19 f36_to_f19 + fifo36_to_fifo19 #(.LE(1)) f36_to_f19 // Little endian because ARM is LE (.clk(fifo_clk), .reset(fifo_rst), .clear(0), .f36_datain(rx_data_i), .f36_src_rdy_i(rx_src_rdy_i), .f36_dst_rdy_o(rx_dst_rdy_o), .f19_dataout({dummy,rx18_data}), .f19_src_rdy_o(rx18_src_rdy), .f19_dst_rdy_i(rx18_dst_rdy) ); -- cgit v1.2.3 From 2f92808d27efae16368d6dddfbcc74ca181f4d7c Mon Sep 17 00:00:00 2001 From: Matt Ettus Date: Sun, 6 Jun 2010 03:18:39 -0700 Subject: use fifo19 not fifo18 in makefile --- usrp2/top/u1e/Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/usrp2/top/u1e/Makefile b/usrp2/top/u1e/Makefile index edfc47c53..cfef1378f 100644 --- a/usrp2/top/u1e/Makefile +++ b/usrp2/top/u1e/Makefile @@ -109,7 +109,7 @@ control_lib/newfifo/fifo_short.v \ control_lib/newfifo/fifo_long.v \ control_lib/newfifo/fifo_cascade.v \ control_lib/newfifo/fifo36_to_ll8.v \ -control_lib/newfifo/fifo36_to_fifo18.v \ +control_lib/newfifo/fifo36_to_fifo19.v \ control_lib/newfifo/fifo19_to_fifo36.v \ control_lib/newfifo/packet_generator.v \ control_lib/newfifo/packet_verifier.v \ -- cgit v1.2.3 From 552b06b5b281e0953b0268a22357c5f43bd9657c Mon Sep 17 00:00:00 2001 From: Matt Ettus Date: Sun, 6 Jun 2010 09:53:42 -0700 Subject: remove double declaration --- usrp2/top/u1e/u1e_core.v | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/usrp2/top/u1e/u1e_core.v b/usrp2/top/u1e/u1e_core.v index 12ce41c23..6dae653ce 100644 --- a/usrp2/top/u1e/u1e_core.v +++ b/usrp2/top/u1e/u1e_core.v @@ -101,7 +101,7 @@ module u1e_core `ifdef TIMED // TX side - wire tx_enable, tx_src_rdy_int, tx_dst_rdy_int; + wire tx_enable; fifo_pacer tx_pacer (.clk(wb_clk), .reset(wb_rst), .rate(rate), .enable(tx_enable), -- cgit v1.2.3 From de1d009c69c6233340bb4b5e58427c87a1a7c5e8 Mon Sep 17 00:00:00 2001 From: Matt Ettus Date: Thu, 15 Apr 2010 22:12:06 -0700 Subject: skeleton files copied over from a dead branch --- usrp2/top/safe_u2plus/.gitignore | 2 + usrp2/top/safe_u2plus/Makefile | 246 +++++++++++++++++ usrp2/top/safe_u2plus/safe_u2plus.v | 362 ++++++++++++++++++++++++ usrp2/top/safe_u2plus/u2plus.ucf | 401 +++++++++++++++++++++++++++ usrp2/top/u2plus/.gitignore | 1 + usrp2/top/u2plus/Makefile | 246 +++++++++++++++++ usrp2/top/u2plus/capture_ddrlvds.v | 39 +++ usrp2/top/u2plus/u2plus.ucf | 531 ++++++++++++++++++++---------------- usrp2/top/u2plus/u2plus.v | 274 ++++++++++--------- 9 files changed, 1728 insertions(+), 374 deletions(-) create mode 100644 usrp2/top/safe_u2plus/.gitignore create mode 100644 usrp2/top/safe_u2plus/Makefile create mode 100644 usrp2/top/safe_u2plus/safe_u2plus.v create mode 100755 usrp2/top/safe_u2plus/u2plus.ucf create mode 100644 usrp2/top/u2plus/.gitignore create mode 100644 usrp2/top/u2plus/Makefile create mode 100644 usrp2/top/u2plus/capture_ddrlvds.v diff --git a/usrp2/top/safe_u2plus/.gitignore b/usrp2/top/safe_u2plus/.gitignore new file mode 100644 index 000000000..a96f0be92 --- /dev/null +++ b/usrp2/top/safe_u2plus/.gitignore @@ -0,0 +1,2 @@ +build* +*impact* diff --git a/usrp2/top/safe_u2plus/Makefile b/usrp2/top/safe_u2plus/Makefile new file mode 100644 index 000000000..62a02ff40 --- /dev/null +++ b/usrp2/top/safe_u2plus/Makefile @@ -0,0 +1,246 @@ +# +# Copyright 2008 Ettus Research LLC +# +# 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. +# + +################################################## +# xtclsh Shell and tcl Script Path +################################################## +#XTCLSH := /opt/Xilinx/10.1/ISE/bin/lin/xtclsh +XTCLSH := xtclsh +ISE_HELPER := ../tcl/ise_helper.tcl + +################################################## +# Project Setup +################################################## +BUILD_DIR := build/ +export TOP_MODULE := safe_u2plus +export PROJ_FILE := $(BUILD_DIR)$(TOP_MODULE).ise + +################################################## +# Project Properties +################################################## +export PROJECT_PROPERTIES := \ +family "Spartan-3A DSP" \ +device xc3sd3400a \ +package fg676 \ +speed -5 \ +top_level_module_type "HDL" \ +synthesis_tool "XST (VHDL/Verilog)" \ +simulator "ISE Simulator (VHDL/Verilog)" \ +"Preferred Language" "Verilog" \ +"Enable Message Filtering" FALSE \ +"Display Incremental Messages" FALSE + +################################################## +# Sources +################################################## +export SOURCE_ROOT := ../../../ +export SOURCES := \ +control_lib/CRC16_D16.v \ +control_lib/atr_controller.v \ +control_lib/bin2gray.v \ +control_lib/dcache.v \ +control_lib/decoder_3_8.v \ +control_lib/dpram32.v \ +control_lib/gray2bin.v \ +control_lib/gray_send.v \ +control_lib/icache.v \ +control_lib/mux4.v \ +control_lib/mux8.v \ +control_lib/nsgpio.v \ +control_lib/ram_2port.v \ +control_lib/ram_harv_cache.v \ +control_lib/ram_loader.v \ +control_lib/setting_reg.v \ +control_lib/settings_bus.v \ +control_lib/srl.v \ +control_lib/system_control.v \ +control_lib/wb_1master.v \ +control_lib/wb_readback_mux.v \ +control_lib/simple_uart.v \ +control_lib/simple_uart_tx.v \ +control_lib/simple_uart_rx.v \ +control_lib/oneshot_2clk.v \ +control_lib/sd_spi.v \ +control_lib/sd_spi_wb.v \ +control_lib/wb_bridge_16_32.v \ +control_lib/reset_sync.v \ +simple_gemac/simple_gemac_wrapper.v \ +simple_gemac/simple_gemac.v \ +simple_gemac/simple_gemac_wb.v \ +simple_gemac/simple_gemac_tx.v \ +simple_gemac/simple_gemac_rx.v \ +simple_gemac/crc.v \ +simple_gemac/delay_line.v \ +simple_gemac/flow_ctrl_tx.v \ +simple_gemac/flow_ctrl_rx.v \ +simple_gemac/address_filter.v \ +simple_gemac/ll8_to_txmac.v \ +simple_gemac/rxmac_to_ll8.v \ +simple_gemac/miim/eth_miim.v \ +simple_gemac/miim/eth_clockgen.v \ +simple_gemac/miim/eth_outputcontrol.v \ +simple_gemac/miim/eth_shiftreg.v \ +control_lib/newfifo/buffer_int.v \ +control_lib/newfifo/buffer_pool.v \ +control_lib/newfifo/fifo_2clock.v \ +control_lib/newfifo/fifo_2clock_cascade.v \ +control_lib/newfifo/ll8_shortfifo.v \ +control_lib/newfifo/ll8_to_fifo36.v \ +control_lib/newfifo/fifo_short.v \ +control_lib/newfifo/fifo_long.v \ +control_lib/newfifo/fifo_cascade.v \ +control_lib/newfifo/fifo36_to_ll8.v \ +control_lib/longfifo.v \ +control_lib/shortfifo.v \ +control_lib/medfifo.v \ +coregen/fifo_xlnx_2Kx36_2clk.v \ +coregen/fifo_xlnx_2Kx36_2clk.xco \ +coregen/fifo_xlnx_512x36_2clk.v \ +coregen/fifo_xlnx_512x36_2clk.xco \ +coregen/fifo_xlnx_64x36_2clk.v \ +coregen/fifo_xlnx_64x36_2clk.xco \ +extram/wb_zbt16_b.v \ +opencores/8b10b/decode_8b10b.v \ +opencores/8b10b/encode_8b10b.v \ +opencores/aemb/rtl/verilog/aeMB_bpcu.v \ +opencores/aemb/rtl/verilog/aeMB_core_BE.v \ +opencores/aemb/rtl/verilog/aeMB_ctrl.v \ +opencores/aemb/rtl/verilog/aeMB_edk32.v \ +opencores/aemb/rtl/verilog/aeMB_ibuf.v \ +opencores/aemb/rtl/verilog/aeMB_regf.v \ +opencores/aemb/rtl/verilog/aeMB_xecu.v \ +opencores/i2c/rtl/verilog/i2c_master_bit_ctrl.v \ +opencores/i2c/rtl/verilog/i2c_master_byte_ctrl.v \ +opencores/i2c/rtl/verilog/i2c_master_defines.v \ +opencores/i2c/rtl/verilog/i2c_master_top.v \ +opencores/i2c/rtl/verilog/timescale.v \ +opencores/simple_pic/rtl/simple_pic.v \ +opencores/spi/rtl/verilog/spi_clgen.v \ +opencores/spi/rtl/verilog/spi_defines.v \ +opencores/spi/rtl/verilog/spi_shift.v \ +opencores/spi/rtl/verilog/spi_top.v \ +opencores/spi/rtl/verilog/timescale.v \ +sdr_lib/acc.v \ +sdr_lib/add2.v \ +sdr_lib/add2_and_round.v \ +sdr_lib/add2_and_round_reg.v \ +sdr_lib/add2_reg.v \ +sdr_lib/cic_dec_shifter.v \ +sdr_lib/cic_decim.v \ +sdr_lib/cic_int_shifter.v \ +sdr_lib/cic_interp.v \ +sdr_lib/cic_strober.v \ +sdr_lib/clip.v \ +sdr_lib/clip_reg.v \ +sdr_lib/cordic.v \ +sdr_lib/cordic_z24.v \ +sdr_lib/cordic_stage.v \ +sdr_lib/dsp_core_rx.v \ +sdr_lib/dsp_core_tx.v \ +sdr_lib/hb_dec.v \ +sdr_lib/hb_interp.v \ +sdr_lib/round.v \ +sdr_lib/round_reg.v \ +sdr_lib/rx_control.v \ +sdr_lib/rx_dcoffset.v \ +sdr_lib/sign_extend.v \ +sdr_lib/small_hb_dec.v \ +sdr_lib/small_hb_int.v \ +sdr_lib/tx_control.v \ +serdes/serdes.v \ +serdes/serdes_fc_rx.v \ +serdes/serdes_fc_tx.v \ +serdes/serdes_rx.v \ +serdes/serdes_tx.v \ +timing/time_receiver.v \ +timing/time_sender.v \ +timing/time_sync.v \ +timing/timer.v \ +top/u2_core/u2_core.v \ +top/u2plus/capture_ddrlvds.v \ +top/safe_u2plus/u2plus.ucf \ +top/safe_u2plus/safe_u2plus.v + +################################################## +# Process Properties +################################################## +export SYNTHESIZE_PROPERTIES := \ +"Number of Clock Buffers" 6 \ +"Pack I/O Registers into IOBs" Yes \ +"Optimization Effort" High \ +"Optimize Instantiated Primitives" TRUE \ +"Register Balancing" Yes \ +"Use Clock Enable" Auto \ +"Use Synchronous Reset" Auto \ +"Use Synchronous Set" Auto + +export TRANSLATE_PROPERTIES := \ +"Macro Search Path" "$(shell pwd)/../../coregen/" + +export MAP_PROPERTIES := \ +"Allow Logic Optimization Across Hierarchy" TRUE \ +"Map to Input Functions" 4 \ +"Optimization Strategy (Cover Mode)" Speed \ +"Pack I/O Registers/Latches into IOBs" "For Inputs and Outputs" \ +"Perform Timing-Driven Packing and Placement" TRUE \ +"Map Effort Level" High \ +"Extra Effort" Normal \ +"Combinatorial Logic Optimization" TRUE \ +"Register Duplication" TRUE + +export PLACE_ROUTE_PROPERTIES := \ +"Place & Route Effort Level (Overall)" High + +export STATIC_TIMING_PROPERTIES := \ +"Number of Paths in Error/Verbose Report" 10 \ +"Report Type" "Error Report" + +export GEN_PROG_FILE_PROPERTIES := \ +"Configuration Rate" 6 \ +"Create Binary Configuration File" TRUE \ +"Done (Output Events)" 5 \ +"Enable Bitstream Compression" TRUE \ +"Enable Outputs (Output Events)" 6 + +export SIM_MODEL_PROPERTIES := "" + +################################################## +# Make Options +################################################## +all: + @echo make proj, check, synth, bin, or clean + +proj: + PROCESS_RUN="" $(XTCLSH) $(ISE_HELPER) + +check: + PROCESS_RUN="Check Syntax" $(XTCLSH) $(ISE_HELPER) + +synth: + PROCESS_RUN="Synthesize - XST" $(XTCLSH) $(ISE_HELPER) + +bin: + PROCESS_RUN="Generate Programming File" $(XTCLSH) $(ISE_HELPER) + +clean: + rm -rf $(BUILD_DIR) + + diff --git a/usrp2/top/safe_u2plus/safe_u2plus.v b/usrp2/top/safe_u2plus/safe_u2plus.v new file mode 100644 index 000000000..38b276000 --- /dev/null +++ b/usrp2/top/safe_u2plus/safe_u2plus.v @@ -0,0 +1,362 @@ +`timescale 1ns / 1ps +////////////////////////////////////////////////////////////////////////////////// + +module safe_u2plus + ( + input CLK_FPGA_P, input CLK_FPGA_N, // Diff + + // ADC + //input ADC_clkout_p, //input ADC_clkout_n, + //input ADCA_12_p, //input ADCA_12_n, + //input ADCA_10_p, //input ADCA_10_n, + //input ADCA_8_p, //input ADCA_8_n, + //input ADCA_6_p, //input ADCA_6_n, + //input ADCA_4_p, //input ADCA_4_n, + //input ADCA_2_p, //input ADCA_2_n, + //input ADCA_0_p, //input ADCA_0_n, + //input ADCB_12_p, //input ADCB_12_n, + //input ADCB_10_p, //input ADCB_10_n, + //input ADCB_8_p, //input ADCB_8_n, + //input ADCB_6_p, //input ADCB_6_n, + //input ADCB_4_p, //input ADCB_4_n, + //input ADCB_2_p, //input ADCB_2_n, + //input ADCB_0_p, //input ADCB_0_n, + + // DAC + //output [15:0] DACA, + //output [15:0] DACB, + //input DAC_LOCK, // unused for now + + // DB IO Pins + //inout [15:0] io_tx, + //inout [15:0] io_rx, + + // Misc, debug + output [5:1] leds, // LED4 is shared w/INIT_B + //input FPGA_RESET, + //output [1:0] debug_clk, + //output [31:0] debug, + //output [3:1] TXD, //input [3:1] RXD, // UARTs + ////input [3:0] dipsw, // Forgot DIP Switches... + + // Clock Gen Control + //output [1:0] clk_en, + //output [1:0] clk_sel, + //input CLK_FUNC, // FIXME is an //input to control the 9510 + //input CLK_STATUS, + + //inout SCL, //inout SDA, // I2C + + // PPS + //input PPS_IN, //input PPS2_IN, + + // SPI + //output SEN_CLK, //output SCLK_CLK, //output MOSI_CLK, //input MISO_CLK, + //output SEN_DAC, //output SCLK_DAC, //output MOSI_DAC, //input MISO_DAC, + //output SEN_ADC, //output SCLK_ADC, //output MOSI_ADC, + //output SEN_TX_DB, //output SCLK_TX_DB, //output MOSI_TX_DB, //input MISO_TX_DB, + //output SEN_TX_DAC, //output SCLK_TX_DAC, //output MOSI_TX_DAC, + //output SEN_TX_ADC, //output SCLK_TX_ADC, //output MOSI_TX_ADC, //input MISO_TX_ADC, + //output SEN_RX_DB, //output SCLK_RX_DB, //output MOSI_RX_DB, //input MISO_RX_DB, + //output SEN_RX_DAC, //output SCLK_RX_DAC, //output MOSI_RX_DAC, + //output SEN_RX_ADC, //output SCLK_RX_ADC, //output MOSI_RX_ADC, //input MISO_RX_ADC, + + // GigE PHY + //input CLK_TO_MAC, + + //output reg [7:0] GMII_TXD, + //output reg GMII_TX_EN, + //output reg GMII_TX_ER, + //output GMII_GTX_CLK, + //input GMII_TX_CLK, // 100mbps clk + + //input GMII_RX_CLK, + //input [7:0] GMII_RXD, + //input GMII_RX_DV, + //input GMII_RX_ER, + //input GMII_COL, + //input GMII_CRS, + + //input PHY_INTn, // open drain + //inout MDIO, + //output MDC, + //output PHY_RESETn, + output ETH_LED + + //input POR, + + // Expansion + //input exp_time_in_p, //input exp_time_in_n, // Diff + //output exp_time_out_p, //output exp_time_out_n, // Diff + //input exp_user_in_p, //input exp_user_in_n, // Diff + //output exp_user_out_p, //output exp_user_out_n, // Diff + + // SERDES + //output ser_enable, + //output ser_prbsen, + //output ser_loopen, + //output ser_rx_en, + + //output ser_tx_clk, + //output reg [15:0] ser_t, + //output reg ser_tklsb, + //output reg ser_tkmsb, + + //input ser_rx_clk, + //input [15:0] ser_r, + //input ser_rklsb, + //input ser_rkmsb, + + // SRAM + //inout [35:0] RAM_D, + //output [20:0] RAM_A, + //output [3:0] RAM_BWn, + //output RAM_ZZ, + //output RAM_LDn, + //output RAM_OEn, + //output RAM_WEn, + //output RAM_CENn, + //output RAM_CLK, + + // SPI Flash + //output flash_cs, + //output flash_clk, + //output flash_mosi, + //input flash_miso + ); + + // FPGA-specific pins connections + wire clk_fpga, dsp_clk, clk_div, dcm_out, wb_clk, clock_ready; + + IBUFGDS clk_fpga_pin (.O(clk_fpga),.I(CLK_FPGA_P),.IB(CLK_FPGA_N)); + defparam clk_fpga_pin.IOSTANDARD = "LVPECL_25"; + + reg [31:0] ctr; + + always @(posedge clk_fpga) + ctr <= ctr + 1; + + assign {leds,ETH_LED} = ~ctr[29:24]; + + +/* + wire exp_time_in; + IBUFDS exp_time_in_pin (.O(exp_time_in),.I(exp_time_in_p),.IB(exp_time_in_n)); + defparam exp_time_in_pin.IOSTANDARD = "LVDS_25"; + + wire exp_time_out; + OBUFDS exp_time_out_pin (.O(exp_time_out_p),.OB(exp_time_out_n),.I(exp_time_out)); + defparam exp_time_out_pin.IOSTANDARD = "LVDS_25"; + + wire dcm_rst = 0; + + wire [13:0] adc_a, adc_b; + + capture_ddrlvds #(.WIDTH(14)) capture_ddrlvds + (.clk(dsp_clk), .ssclk_p(ADC_clkout_p), .ssclk_n(ADC_clkout_n), + .in_p({{ADCA_12_p, ADCA_10_p, ADCA_8_p, ADCA_6_p, ADCA_4_p, ADCA_2_p, ADCA_0_p}, + {ADCB_12_p, ADCB_10_p, ADCB_8_p, ADCB_6_p, ADCB_4_p, ADCB_2_p, ADCB_0_p}}), + .in_n({{ADCA_12_n, ADCA_10_n, ADCA_8_n, ADCA_6_n, ADCA_4_n, ADCA_2_n, ADCA_0_n}, + {ADCB_12_n, ADCB_10_n, ADCB_8_n, ADCB_6_n, ADCB_4_n, ADCB_2_n, ADCB_0_n}}), + .out({adc_a,adc_b})); + + // Handle Clocks + DCM DCM_INST (.CLKFB(dsp_clk), + .CLKIN(clk_fpga), + .DSSEN(0), + .PSCLK(0), + .PSEN(0), + .PSINCDEC(0), + .RST(dcm_rst), + .CLKDV(clk_div), + .CLKFX(), + .CLKFX180(), + .CLK0(dcm_out), + .CLK2X(), + .CLK2X180(), + .CLK90(), + .CLK180(), + .CLK270(), + .LOCKED(LOCKED_OUT), + .PSDONE(), + .STATUS()); + defparam DCM_INST.CLK_FEEDBACK = "1X"; + defparam DCM_INST.CLKDV_DIVIDE = 2.0; + defparam DCM_INST.CLKFX_DIVIDE = 1; + defparam DCM_INST.CLKFX_MULTIPLY = 4; + defparam DCM_INST.CLKIN_DIVIDE_BY_2 = "FALSE"; + defparam DCM_INST.CLKIN_PERIOD = 10.000; + defparam DCM_INST.CLKOUT_PHASE_SHIFT = "NONE"; + defparam DCM_INST.DESKEW_ADJUST = "SYSTEM_SYNCHRONOUS"; + defparam DCM_INST.DFS_FREQUENCY_MODE = "LOW"; + defparam DCM_INST.DLL_FREQUENCY_MODE = "LOW"; + defparam DCM_INST.DUTY_CYCLE_CORRECTION = "TRUE"; + defparam DCM_INST.FACTORY_JF = 16'h8080; + defparam DCM_INST.PHASE_SHIFT = 0; + defparam DCM_INST.STARTUP_WAIT = "FALSE"; + + BUFG dspclk_BUFG (.I(dcm_out), .O(dsp_clk)); + BUFG wbclk_BUFG (.I(clk_div), .O(wb_clk)); + + // I2C -- Don't use external transistors for open drain, the FPGA implements this + IOBUF scl_pin(.O(scl_pad_i), .IO(SCL), .I(scl_pad_o), .T(scl_pad_oen_o)); + IOBUF sda_pin(.O(sda_pad_i), .IO(SDA), .I(sda_pad_o), .T(sda_pad_oen_o)); + + // LEDs are active low outputs + wire [4:0] leds_int; + assign leds = ~leds_int; // drive low to turn on leds + + // SPI + wire miso, mosi, sclk; + + assign {SCLK_CLK,MOSI_CLK} = ~SEN_CLK ? {sclk,mosi} : 2'B0; + assign {SCLK_DAC,MOSI_DAC} = ~SEN_DAC ? {sclk,mosi} : 2'B0; + assign {SCLK_ADC,MOSI_ADC} = ~SEN_ADC ? {sclk,mosi} : 2'B0; + assign {SCLK_TX_DB,MOSI_TX_DB} = ~SEN_TX_DB ? {sclk,mosi} : 2'B0; + assign {SCLK_TX_DAC,MOSI_TX_DAC} = ~SEN_TX_DAC ? {sclk,mosi} : 2'B0; + assign {SCLK_TX_ADC,MOSI_TX_ADC} = ~SEN_TX_ADC ? {sclk,mosi} : 2'B0; + assign {SCLK_RX_DB,MOSI_RX_DB} = ~SEN_RX_DB ? {sclk,mosi} : 2'B0; + assign {SCLK_RX_DAC,MOSI_RX_DAC} = ~SEN_RX_DAC ? {sclk,mosi} : 2'B0; + assign {SCLK_RX_ADC,MOSI_RX_ADC} = ~SEN_RX_ADC ? {sclk,mosi} : 2'B0; + + assign miso = (~SEN_CLK & MISO_CLK) | (~SEN_DAC & MISO_DAC) | + (~SEN_TX_DB & MISO_TX_DB) | (~SEN_TX_ADC & MISO_TX_ADC) | + (~SEN_RX_DB & MISO_RX_DB) | (~SEN_RX_ADC & MISO_RX_ADC); + + wire GMII_TX_EN_unreg, GMII_TX_ER_unreg; + wire [7:0] GMII_TXD_unreg; + wire GMII_GTX_CLK_int; + + always @(posedge GMII_GTX_CLK_int) + begin + GMII_TX_EN <= GMII_TX_EN_unreg; + GMII_TX_ER <= GMII_TX_ER_unreg; + GMII_TXD <= GMII_TXD_unreg; + end + + OFDDRRSE OFDDRRSE_gmii_inst + (.Q(GMII_GTX_CLK), // Data output (connect directly to top-level port) + .C0(GMII_GTX_CLK_int), // 0 degree clock input + .C1(~GMII_GTX_CLK_int), // 180 degree clock input + .CE(1), // Clock enable input + .D0(0), // Posedge data input + .D1(1), // Negedge data input + .R(0), // Synchronous reset input + .S(0) // Synchronous preset input + ); + + wire ser_tklsb_unreg, ser_tkmsb_unreg; + wire [15:0] ser_t_unreg; + wire ser_tx_clk_int; + + always @(posedge ser_tx_clk_int) + begin + ser_tklsb <= ser_tklsb_unreg; + ser_tkmsb <= ser_tkmsb_unreg; + ser_t <= ser_t_unreg; + end + + assign ser_tx_clk = clk_fpga; + + reg [15:0] ser_r_int; + reg ser_rklsb_int, ser_rkmsb_int; + + always @(posedge ser_rx_clk) + begin + ser_r_int <= ser_r; + ser_rklsb_int <= ser_rklsb; + ser_rkmsb_int <= ser_rkmsb; + end + + u2_core u2_core(.dsp_clk (dsp_clk), + .wb_clk (wb_clk), + .clock_ready (clock_ready), + .clk_to_mac (clk_to_mac), + .pps_in (pps_in), + .leds (leds_int), + .debug (debug[31:0]), + .debug_clk (debug_clk[1:0]), + .exp_pps_in (exp_time_in), + .exp_pps_out (exp_time_out), + .GMII_COL (GMII_COL), + .GMII_CRS (GMII_CRS), + .GMII_TXD (GMII_TXD_unreg[7:0]), + .GMII_TX_EN (GMII_TX_EN_unreg), + .GMII_TX_ER (GMII_TX_ER_unreg), + .GMII_GTX_CLK (GMII_GTX_CLK_int), + .GMII_TX_CLK (GMII_TX_CLK), + .GMII_RXD (GMII_RXD[7:0]), + .GMII_RX_CLK (GMII_RX_CLK), + .GMII_RX_DV (GMII_RX_DV), + .GMII_RX_ER (GMII_RX_ER), + .MDIO (MDIO), + .MDC (MDC), + .PHY_INTn (PHY_INTn), + .PHY_RESETn (PHY_RESETn), + .ser_enable (ser_enable), + .ser_prbsen (ser_prbsen), + .ser_loopen (ser_loopen), + .ser_rx_en (ser_rx_en), + .ser_tx_clk (ser_tx_clk_int), + .ser_t (ser_t_unreg[15:0]), + .ser_tklsb (ser_tklsb_unreg), + .ser_tkmsb (ser_tkmsb_unreg), + .ser_rx_clk (ser_rx_clk), + .ser_r (ser_r_int[15:0]), + .ser_rklsb (ser_rklsb_int), + .ser_rkmsb (ser_rkmsb_int), + .cpld_start (cpld_start), + .cpld_mode (cpld_mode), + .cpld_done (cpld_done), + .cpld_din (cpld_din), + .cpld_clk (cpld_clk), + .cpld_detached (cpld_detached), + .adc_a (adc_a[13:0]), + .adc_ovf_a (adc_ovf_a), + .adc_on_a (adc_on_a), + .adc_oe_a (adc_oe_a), + .adc_b (adc_b[13:0]), + .adc_ovf_b (adc_ovf_b), + .adc_on_b (adc_on_b), + .adc_oe_b (adc_oe_b), + .dac_a (DACA[15:0]), + .dac_b (DACB[15:0]), + .scl_pad_i (scl_pad_i), + .scl_pad_o (scl_pad_o), + .scl_pad_oen_o (scl_pad_oen_o), + .sda_pad_i (sda_pad_i), + .sda_pad_o (sda_pad_o), + .sda_pad_oen_o (sda_pad_oen_o), + .clk_en (clk_en[1:0]), + .clk_sel (clk_sel[1:0]), + .clk_func (clk_func), + .clk_status (clk_status), + .sclk (sclk_int), + .mosi (mosi), + .miso (miso), + .sen_clk (sen_clk), + .sen_dac (sen_dac), + .sen_tx_db (sen_tx_db), + .sen_tx_adc (sen_tx_adc), + .sen_tx_dac (sen_tx_dac), + .sen_rx_db (sen_rx_db), + .sen_rx_adc (sen_rx_adc), + .sen_rx_dac (sen_rx_dac), + .io_tx (io_tx[15:0]), + .io_rx (io_rx[15:0]), + .RAM_D (RAM_D), + .RAM_A (RAM_A), + .RAM_CE1n (RAM_CE1n), + .RAM_CENn (RAM_CENn), + .RAM_CLK (RAM_CLK), + .RAM_WEn (RAM_WEn), + .RAM_OEn (RAM_OEn), + .RAM_LDn (RAM_LDn), + .uart_tx_o (uart_tx_o), + .uart_rx_i (uart_rx_i), + .uart_baud_o (), + .sim_mode (1'b0), + .clock_divider (2) + ); +*/ +endmodule // safe_u2plus diff --git a/usrp2/top/safe_u2plus/u2plus.ucf b/usrp2/top/safe_u2plus/u2plus.ucf new file mode 100755 index 000000000..0a9460d86 --- /dev/null +++ b/usrp2/top/safe_u2plus/u2plus.ucf @@ -0,0 +1,401 @@ +## Main 100 MHz Clock +NET "CLK_FPGA_P" LOC = "AA13" ; +NET "CLK_FPGA_N" LOC = "Y13" ; + +## ADC +#NET "ADC_clkout_p" LOC = "P1" ; +#NET "ADC_clkout_n" LOC = "P2" ; +#NET "ADCA_12_p" LOC = "Y1" ; +#NET "ADCA_12_n" LOC = "Y2" ; +#NET "ADCA_10_p" LOC = "W3" ; +#NET "ADCA_10_n" LOC = "W4" ; +#NET "ADCA_8_p" LOC = "T7" ; +#NET "ADCA_8_n" LOC = "U6" ; +#NET "ADCA_6_p" LOC = "U5" ; +#NET "ADCA_6_n" LOC = "V5" ; +#NET "ADCA_4_p" LOC = "T10" ; +#NET "ADCA_4_n" LOC = "T9" ; +#NET "ADCA_2_p" LOC = "V1" ; +#NET "ADCA_2_n" LOC = "V2" ; +#NET "ADCA_0_p" LOC = "R8" ; +#NET "ADCA_0_n" LOC = "R7" ; +#NET "ADCB_2_p" LOC = "U7" ; +#NET "ADCB_2_n" LOC = "U8" ; +#NET "ADCB_0_p" LOC = "AA2" ; +#NET "ADCB_0_n" LOC = "AA3" ; +#NET "ADCB_4_p" LOC = "AE1" ; +#NET "ADCB_4_n" LOC = "AE2" ; +#NET "ADCB_6_p" LOC = "W1" ; +#NET "ADCB_6_n" LOC = "W2" ; +#NET "ADCB_8_p" LOC = "U3" ; +#NET "ADCB_8_n" LOC = "V4" ; +#NET "ADCB_10_p" LOC = "J1" ; +#NET "ADCB_10_n" LOC = "K1" ; +#NET "ADCB_12_p" LOC = "J3" ; +#NET "ADCB_12_n" LOC = "J2" ; + +## DAC +#NET "DAC_LOCK" LOC = "P4" ; +#NET "DACA<0>" LOC = "P8" ; +#NET "DACA<1>" LOC = "P9" ; +#NET "DACA<2>" LOC = "R5" ; +#NET "DACA<3>" LOC = "R6" ; +#NET "DACA<4>" LOC = "P7" ; +#NET "DACA<5>" LOC = "P6" ; +#NET "DACA<6>" LOC = "T3" ; +#NET "DACA<7>" LOC = "T4" ; +#NET "DACA<8>" LOC = "R3" ; +#NET "DACA<9>" LOC = "R4" ; +#NET "DACA<10>" LOC = "R2" ; +#NET "DACA<11>" LOC = "N1" ; +#NET "DACA<12>" LOC = "N2" ; +#NET "DACA<13>" LOC = "N5" ; +#NET "DACA<14>" LOC = "N4" ; +#NET "DACA<15>" LOC = "M2" ; +#NET "DACB<0>" LOC = "M5" ; +#NET "DACB<1>" LOC = "M6" ; +#NET "DACB<2>" LOC = "M4" ; +#NET "DACB<3>" LOC = "M3" ; +#NET "DACB<4>" LOC = "M8" ; +#NET "DACB<5>" LOC = "M7" ; +#NET "DACB<6>" LOC = "L4" ; +#NET "DACB<7>" LOC = "L3" ; +#NET "DACB<8>" LOC = "K3" ; +#NET "DACB<9>" LOC = "K2" ; +#NET "DACB<10>" LOC = "K5" ; +#NET "DACB<11>" LOC = "K4" ; +#NET "DACB<12>" LOC = "M10" ; +#NET "DACB<13>" LOC = "M9" ; +#NET "DACB<14>" LOC = "J5" ; +#NET "DACB<15>" LOC = "J4" ; + +## TX DB GPIO +#NET "io_tx<15>" LOC = "K6" ; +#NET "io_tx<14>" LOC = "L7" ; +#NET "io_tx<13>" LOC = "H2" ; +#NET "io_tx<12>" LOC = "H1" ; +#NET "io_tx<11>" LOC = "L10" ; +#NET "io_tx<10>" LOC = "L9" ; +#NET "io_tx<9>" LOC = "G3" ; +#NET "io_tx<8>" LOC = "F3" ; +#NET "io_tx<7>" LOC = "K7" ; +#NET "io_tx<6>" LOC = "J6" ; +#NET "io_tx<5>" LOC = "E1" ; +#NET "io_tx<4>" LOC = "F2" ; +#NET "io_tx<3>" LOC = "J7" ; +#NET "io_tx<2>" LOC = "H6" ; +#NET "io_tx<1>" LOC = "F5" ; +#NET "io_tx<0>" LOC = "G4" ; + +## RX DB GPIO +#NET "io_rx<15>" LOC = "AD1" ; +#NET "io_rx<14>" LOC = "AD2" ; +#NET "io_rx<13>" LOC = "AC2" ; +#NET "io_rx<12>" LOC = "AC3" ; +#NET "io_rx<11>" LOC = "W7" ; +#NET "io_rx<10>" LOC = "W6" ; +#NET "io_rx<9>" LOC = "U9" ; +#NET "io_rx<8>" LOC = "V8" ; +#NET "io_rx<7>" LOC = "AB1" ; +#NET "io_rx<6>" LOC = "AC1" ; +#NET "io_rx<5>" LOC = "V7" ; +#NET "io_rx<4>" LOC = "V6" ; +#NET "io_rx<3>" LOC = "Y5" ; +#NET "io_rx<2>" LOC = "R10" ; +#NET "io_rx<1>" LOC = "R1" ; +#NET "io_rx<0>" LOC = "M1" ; + +## MISC +NET "leds<5>" LOC = "AF25" ; +NET "leds<4>" LOC = "AE25" ; +NET "leds<3>" LOC = "AF23" ; +NET "leds<2>" LOC = "AE23" ; +NET "leds<1>" LOC = "AB18" ; +#NET "FPGA_RESET" LOC = "K24" ; + +## Debug +#NET "debug_clk<0>" LOC = "AA10" ; +#NET "debug_clk<1>" LOC = "AD11" ; +#NET "debug<0>" LOC = "AC19" ; +#NET "debug<1>" LOC = "AF20" ; +#NET "debug<2>" LOC = "AE20" ; +#NET "debug<3>" LOC = "AC16" ; +#NET "debug<4>" LOC = "AB16" ; +#NET "debug<5>" LOC = "AF19" ; +#NET "debug<6>" LOC = "AE19" ; +#NET "debug<7>" LOC = "V15" ; +#NET "debug<8>" LOC = "U15" ; +#NET "debug<9>" LOC = "AE17" ; +#NET "debug<10>" LOC = "AD17" ; +#NET "debug<11>" LOC = "V14" ; +#NET "debug<12>" LOC = "W15" ; +#NET "debug<13>" LOC = "AC15" ; +#NET "debug<14>" LOC = "AD14" ; +#NET "debug<15>" LOC = "AC14" ; +#NET "debug<16>" LOC = "AC11" ; +#NET "debug<17>" LOC = "AB12" ; +#NET "debug<18>" LOC = "AC12" ; +#NET "debug<19>" LOC = "V13" ; +#NET "debug<20>" LOC = "W13" ; +#NET "debug<21>" LOC = "AE8" ; +#NET "debug<22>" LOC = "AF8" ; +#NET "debug<23>" LOC = "V12" ; +#NET "debug<24>" LOC = "W12" ; +#NET "debug<25>" LOC = "AB9" ; +#NET "debug<26>" LOC = "AC9" ; +#NET "debug<27>" LOC = "AC8" ; +#NET "debug<28>" LOC = "AB7" ; +#NET "debug<29>" LOC = "V11" ; +#NET "debug<30>" LOC = "U11" ; +#NET "debug<31>" LOC = "Y10" ; + +## UARTS +#NET "TXD<3>" LOC = "AD20" ; +#NET "TXD<2>" LOC = "AC20" ; +#NET "TXD<1>" LOC = "AD19" ; +#NET "RXD<3>" LOC = "AF17" ; +#NET "RXD<2>" LOC = "AF15" ; +#NET "RXD<1>" LOC = "AD12" ; + +## AD9510 +#NET "CLK_STATUS" LOC = "AD22" ; +#NET "CLK_FUNC" LOC = "AC21" ; +#NET "clk_sel<0>" LOC = "AE21" ; +#NET "clk_sel<1>" LOC = "AD21" ; +#NET "clk_en<1>" LOC = "AA17" ; +#NET "clk_en<0>" LOC = "Y17" ; + +## I2C +#NET "SDA" LOC = "V16" ; +#NET "SCL" LOC = "U16" ; + +## Timing +#NET "PPS_IN" LOC = "AB6" ; +#NET "PPS2_IN" LOC = "AA20" ; + +## SPI +#NET "SEN_CLK" LOC = "AA18" ; +#NET "MOSI_CLK" LOC = "W17" ; +#NET "SCLK_CLK" LOC = "V17" ; +#NET "MISO_CLK" LOC = "AC10" ; + +#NET "SEN_DAC" LOC = "AE7" ; +#NET "SCLK_DAC" LOC = "AF5" ; +#NET "MOSI_DAC" LOC = "AE6" ; +#NET "MISO_DAC" LOC = "Y3" ; + +#NET "SCLK_ADC" LOC = "B1" ; +#NET "MOSI_ADC" LOC = "J8" ; +#NET "SEN_ADC" LOC = "J9" ; + +#NET "MOSI_TX_ADC" LOC = "V10" ; +#NET "SEN_TX_ADC" LOC = "W10" ; +#NET "SCLK_TX_ADC" LOC = "AC6" ; +#NET "MISO_TX_ADC" LOC = "G1" ; + +#NET "MOSI_TX_DAC" LOC = "AD6" ; +#NET "SEN_TX_DAC" LOC = "AE4" ; +#NET "SCLK_TX_DAC" LOC = "AF4" ; + +#NET "SCLK_TX_DB" LOC = "AE3" ; +#NET "MOSI_TX_DB" LOC = "AF3" ; +#NET "SEN_TX_DB" LOC = "W9" ; +#NET "MISO_TX_DB" LOC = "AA5" ; + +#NET "MOSI_RX_ADC" LOC = "E3" ; +#NET "SCLK_RX_ADC" LOC = "F4" ; +#NET "SEN_RX_ADC" LOC = "D3" ; +#NET "MISO_RX_ADC" LOC = "C1" ; + +#NET "SCLK_RX_DAC" LOC = "E4" ; +#NET "SEN_RX_DAC" LOC = "K9" ; +#NET "MOSI_RX_DAC" LOC = "K8" ; + +#NET "SCLK_RX_DB" LOC = "G6" ; +#NET "MOSI_RX_DB" LOC = "H7" ; +#NET "SEN_RX_DB" LOC = "B2" ; +#NET "MISO_RX_DB" LOC = "H4" ; + +## ETH PHY +#NET "CLK_TO_MAC" LOC = "P26" ; + +#NET "GMII_TXD<7>" LOC = "G21" ; +#NET "GMII_TXD<6>" LOC = "C26" ; +#NET "GMII_TXD<5>" LOC = "C25" ; +#NET "GMII_TXD<4>" LOC = "J21" ; +#NET "GMII_TXD<3>" LOC = "H21" ; +#NET "GMII_TXD<2>" LOC = "D25" ; +#NET "GMII_TXD<1>" LOC = "D24" ; +#NET "GMII_TXD<0>" LOC = "E26" ; +#NET "GMII_TX_EN" LOC = "D26" ; +#NET "GMII_TX_ER" LOC = "J19" ; +#NET "GMII_GTX_CLK" LOC = "J20" ; +#NET "GMII_TX_CLK" LOC = "P25" ; + +#NET "GMII_RX_CLK" LOC = "P21" ; +#NET "GMII_RXD<7>" LOC = "G22" ; +#NET "GMII_RXD<6>" LOC = "K19" ; +#NET "GMII_RXD<5>" LOC = "K18" ; +#NET "GMII_RXD<4>" LOC = "E24" ; +#NET "GMII_RXD<3>" LOC = "F23" ; +#NET "GMII_RXD<2>" LOC = "L18" ; +#NET "GMII_RXD<1>" LOC = "L17" ; +#NET "GMII_RXD<0>" LOC = "F25" ; +#NET "GMII_RX_DV" LOC = "F24" ; +#NET "GMII_RX_ER" LOC = "L20" ; +#NET "GMII_CRS" LOC = "K20" ; +#NET "GMII_COL" LOC = "G23" ; + +#NET "PHY_INTn" LOC = "L22" ; +#NET "MDIO" LOC = "K21" ; +#NET "MDC" LOC = "J23" ; +#NET "PHY_RESETn" LOC = "J22" ; +NET "ETH_LED" LOC = "H20" ; + +## MIMO Interface +#NET "exp_time_out_p" LOC = "Y14" ; +#NET "exp_time_out_n" LOC = "AA14" ; +#NET "exp_time_in_p" LOC = "N18" ; +#NET "exp_time_in_n" LOC = "N17" ; +#NET "exp_user_out_p" LOC = "AF14" ; +#NET "exp_user_out_n" LOC = "AE14" ; +#NET "exp_user_in_p" LOC = "L24" ; +#NET "exp_user_in_n" LOC = "M23" ; + +## SERDES +#NET "ser_enable" LOC = "R20" ; +#NET "ser_prbsen" LOC = "U23" ; +#NET "ser_loopen" LOC = "R19" ; +#NET "ser_rx_en" LOC = "Y21" ; +#NET "ser_tx_clk" LOC = "P23" ; # SERDES TX CLK +#NET "ser_t<15>" LOC = "V23" ; +#NET "ser_t<14>" LOC = "U22" ; +#NET "ser_t<13>" LOC = "V24" ; +#NET "ser_t<12>" LOC = "V25" ; +#NET "ser_t<11>" LOC = "W23" ; +#NET "ser_t<10>" LOC = "V22" ; +#NET "ser_t<9>" LOC = "T18" ; +#NET "ser_t<8>" LOC = "T17" ; +#NET "ser_t<7>" LOC = "Y24" ; +#NET "ser_t<6>" LOC = "Y25" ; +#NET "ser_t<5>" LOC = "U21" ; +#NET "ser_t<4>" LOC = "T20" ; +#NET "ser_t<3>" LOC = "Y22" ; +#NET "ser_t<2>" LOC = "Y23" ; +#NET "ser_t<1>" LOC = "U19" ; +#NET "ser_t<0>" LOC = "U18" ; +#NET "ser_tkmsb" LOC = "AA24" ; +#NET "ser_tklsb" LOC = "AA25" ; +#NET "ser_rx_clk" LOC = "P18" ; +#NET "ser_r<15>" LOC = "V21" ; +#NET "ser_r<14>" LOC = "U20" ; +#NET "ser_r<13>" LOC = "AA22" ; +#NET "ser_r<12>" LOC = "AA23" ; +#NET "ser_r<11>" LOC = "V18" ; +#NET "ser_r<10>" LOC = "V19" ; +#NET "ser_r<9>" LOC = "AB23" ; +#NET "ser_r<8>" LOC = "AC26" ; +#NET "ser_r<7>" LOC = "AB26" ; +#NET "ser_r<6>" LOC = "AD26" ; +#NET "ser_r<5>" LOC = "AC25" ; +#NET "ser_r<4>" LOC = "W20" ; +#NET "ser_r<3>" LOC = "W21" ; +#NET "ser_r<2>" LOC = "AC23" ; +#NET "ser_r<1>" LOC = "AC24" ; +#NET "ser_r<0>" LOC = "AE26" ; +#NET "ser_rkmsb" LOC = "AD25" ; +#NET "ser_rklsb" LOC = "Y20" ; + +## SRAM +#NET "RAM_D<35>" LOC = "K16" ; +#NET "RAM_D<34>" LOC = "D20" ; +#NET "RAM_D<33>" LOC = "C20" ; +#NET "RAM_D<32>" LOC = "E21" ; +#NET "RAM_D<31>" LOC = "D21" ; +#NET "RAM_D<30>" LOC = "C21" ; +#NET "RAM_D<29>" LOC = "B21" ; +#NET "RAM_D<28>" LOC = "H17" ; +#NET "RAM_D<27>" LOC = "G17" ; +#NET "RAM_D<26>" LOC = "B23" ; +#NET "RAM_D<25>" LOC = "A22" ; +#NET "RAM_D<24>" LOC = "D23" ; +#NET "RAM_D<23>" LOC = "C23" ; +#NET "RAM_D<22>" LOC = "D22" ; +#NET "RAM_D<21>" LOC = "C22" ; +#NET "RAM_D<20>" LOC = "F19" ; +#NET "RAM_D<19>" LOC = "G20" ; +#NET "RAM_D<18>" LOC = "F20" ; +#NET "RAM_D<17>" LOC = "F7" ; +#NET "RAM_D<16>" LOC = "E7" ; +#NET "RAM_D<15>" LOC = "G9" ; +#NET "RAM_D<14>" LOC = "H9" ; +#NET "RAM_D<13>" LOC = "G10" ; +#NET "RAM_D<12>" LOC = "H10" ; +#NET "RAM_D<11>" LOC = "A4" ; +#NET "RAM_D<10>" LOC = "B4" ; +#NET "RAM_D<9>" LOC = "C5" ; +#NET "RAM_D<8>" LOC = "D6" ; +#NET "RAM_D<7>" LOC = "J11" ; +#NET "RAM_D<6>" LOC = "K11" ; +#NET "RAM_D<5>" LOC = "B7" ; +#NET "RAM_D<4>" LOC = "C7" ; +#NET "RAM_D<3>" LOC = "B6" ; +#NET "RAM_D<2>" LOC = "C6" ; +#NET "RAM_D<1>" LOC = "C8" ; +#NET "RAM_D<0>" LOC = "D8" ; +#NET "RAM_A<0>" LOC = "C11" ; +#NET "RAM_A<1>" LOC = "E12" ; +#NET "RAM_A<2>" LOC = "F12" ; +#NET "RAM_A<3>" LOC = "D13" ; +#NET "RAM_A<4>" LOC = "C12" ; +#NET "RAM_A<5>" LOC = "A12" ; +#NET "RAM_A<6>" LOC = "B12" ; +#NET "RAM_A<7>" LOC = "E14" ; +#NET "RAM_A<8>" LOC = "F14" ; +#NET "RAM_A<9>" LOC = "B15" ; +#NET "RAM_A<10>" LOC = "A15" ; +#NET "RAM_A<11>" LOC = "D16" ; +#NET "RAM_A<12>" LOC = "C15" ; +#NET "RAM_A<13>" LOC = "D17" ; +#NET "RAM_A<14>" LOC = "C16" ; +#NET "RAM_A<15>" LOC = "F15" ; +#NET "RAM_A<16>" LOC = "C17" ; +#NET "RAM_A<17>" LOC = "B17" ; +#NET "RAM_A<18>" LOC = "B18" ; +#NET "RAM_A<19>" LOC = "A18" ; +#NET "RAM_A<20>" LOC = "D18" ; +#NET "RAM_BWn<3>" LOC = "D9" ; +#NET "RAM_BWn<2>" LOC = "A9" ; +#NET "RAM_BWn<1>" LOC = "B9" ; +#NET "RAM_BWn<0>" LOC = "G12" ; +#NET "RAM_ZZ" LOC = "J12" ; +#NET "RAM_LDn" LOC = "H12" ; +#NET "RAM_OEn" LOC = "C10" ; +#NET "RAM_WEn" LOC = "D10" ; +#NET "RAM_CENn" LOC = "B10" ; +#NET "RAM_CLK" LOC = "A10" ; + +## SPI Flash +#NET "flash_miso" LOC = "AF24" ; +#NET "flash_clk" LOC = "AE24" ; +#NET "flash_mosi" LOC = "AB15" ; +#NET "flash_cs" LOC = "AA7" ; + +## MISC FPGA, unused for now +##NET "PROG_B" LOC = "A2" ; +##NET "PUDC_B" LOC = "G8" ; +##NET "DONE" LOC = "AB21" ; +##NET "INIT_B" LOC = "AA15" ; + + +##NET "unnamed_net19" LOC = "AE9" ; # VS1 +##NET "unnamed_net18" LOC = "AF9" ; # VS0 +##NET "unnamed_net17" LOC = "AA12" ; # VS2 +##NET "unnamed_net16" LOC = "Y7" ; # M2 +##NET "unnamed_net15" LOC = "AC4" ; # M1 +##NET "unnamed_net14" LOC = "AD4" ; # M0 +##NET "unnamed_net13" LOC = "D4" ; # TMS +##NET "unnamed_net12" LOC = "E23" ; # TDO +##NET "unnamed_net11" LOC = "G7" ; # TDI +##NET "unnamed_net10" LOC = "A25" ; # TCK +##NET "unnamed_net20" LOC = "V20" ; # SUSPEND diff --git a/usrp2/top/u2plus/.gitignore b/usrp2/top/u2plus/.gitignore new file mode 100644 index 000000000..1b2211df0 --- /dev/null +++ b/usrp2/top/u2plus/.gitignore @@ -0,0 +1 @@ +build* diff --git a/usrp2/top/u2plus/Makefile b/usrp2/top/u2plus/Makefile new file mode 100644 index 000000000..305b5b9e3 --- /dev/null +++ b/usrp2/top/u2plus/Makefile @@ -0,0 +1,246 @@ +# +# Copyright 2008 Ettus Research LLC +# +# 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. +# + +################################################## +# xtclsh Shell and tcl Script Path +################################################## +#XTCLSH := /opt/Xilinx/10.1/ISE/bin/lin/xtclsh +XTCLSH := xtclsh +ISE_HELPER := ../tcl/ise_helper.tcl + +################################################## +# Project Setup +################################################## +BUILD_DIR := build/ +export TOP_MODULE := u2plus +export PROJ_FILE := $(BUILD_DIR)$(TOP_MODULE).ise + +################################################## +# Project Properties +################################################## +export PROJECT_PROPERTIES := \ +family "Spartan-3A DSP" \ +device xc3sd3400a \ +package fg676 \ +speed -5 \ +top_level_module_type "HDL" \ +synthesis_tool "XST (VHDL/Verilog)" \ +simulator "ISE Simulator (VHDL/Verilog)" \ +"Preferred Language" "Verilog" \ +"Enable Message Filtering" FALSE \ +"Display Incremental Messages" FALSE + +################################################## +# Sources +################################################## +export SOURCE_ROOT := ../../../ +export SOURCES := \ +control_lib/CRC16_D16.v \ +control_lib/atr_controller.v \ +control_lib/bin2gray.v \ +control_lib/dcache.v \ +control_lib/decoder_3_8.v \ +control_lib/dpram32.v \ +control_lib/gray2bin.v \ +control_lib/gray_send.v \ +control_lib/icache.v \ +control_lib/mux4.v \ +control_lib/mux8.v \ +control_lib/nsgpio.v \ +control_lib/ram_2port.v \ +control_lib/ram_harv_cache.v \ +control_lib/ram_loader.v \ +control_lib/setting_reg.v \ +control_lib/settings_bus.v \ +control_lib/srl.v \ +control_lib/system_control.v \ +control_lib/wb_1master.v \ +control_lib/wb_readback_mux.v \ +control_lib/simple_uart.v \ +control_lib/simple_uart_tx.v \ +control_lib/simple_uart_rx.v \ +control_lib/oneshot_2clk.v \ +control_lib/sd_spi.v \ +control_lib/sd_spi_wb.v \ +control_lib/wb_bridge_16_32.v \ +control_lib/reset_sync.v \ +simple_gemac/simple_gemac_wrapper.v \ +simple_gemac/simple_gemac.v \ +simple_gemac/simple_gemac_wb.v \ +simple_gemac/simple_gemac_tx.v \ +simple_gemac/simple_gemac_rx.v \ +simple_gemac/crc.v \ +simple_gemac/delay_line.v \ +simple_gemac/flow_ctrl_tx.v \ +simple_gemac/flow_ctrl_rx.v \ +simple_gemac/address_filter.v \ +simple_gemac/ll8_to_txmac.v \ +simple_gemac/rxmac_to_ll8.v \ +simple_gemac/miim/eth_miim.v \ +simple_gemac/miim/eth_clockgen.v \ +simple_gemac/miim/eth_outputcontrol.v \ +simple_gemac/miim/eth_shiftreg.v \ +control_lib/newfifo/buffer_int.v \ +control_lib/newfifo/buffer_pool.v \ +control_lib/newfifo/fifo_2clock.v \ +control_lib/newfifo/fifo_2clock_cascade.v \ +control_lib/newfifo/ll8_shortfifo.v \ +control_lib/newfifo/ll8_to_fifo36.v \ +control_lib/newfifo/fifo_short.v \ +control_lib/newfifo/fifo_long.v \ +control_lib/newfifo/fifo_cascade.v \ +control_lib/newfifo/fifo36_to_ll8.v \ +control_lib/longfifo.v \ +control_lib/shortfifo.v \ +control_lib/medfifo.v \ +coregen/fifo_xlnx_2Kx36_2clk.v \ +coregen/fifo_xlnx_2Kx36_2clk.xco \ +coregen/fifo_xlnx_512x36_2clk.v \ +coregen/fifo_xlnx_512x36_2clk.xco \ +coregen/fifo_xlnx_64x36_2clk.v \ +coregen/fifo_xlnx_64x36_2clk.xco \ +extram/wb_zbt16_b.v \ +opencores/8b10b/decode_8b10b.v \ +opencores/8b10b/encode_8b10b.v \ +opencores/aemb/rtl/verilog/aeMB_bpcu.v \ +opencores/aemb/rtl/verilog/aeMB_core_BE.v \ +opencores/aemb/rtl/verilog/aeMB_ctrl.v \ +opencores/aemb/rtl/verilog/aeMB_edk32.v \ +opencores/aemb/rtl/verilog/aeMB_ibuf.v \ +opencores/aemb/rtl/verilog/aeMB_regf.v \ +opencores/aemb/rtl/verilog/aeMB_xecu.v \ +opencores/i2c/rtl/verilog/i2c_master_bit_ctrl.v \ +opencores/i2c/rtl/verilog/i2c_master_byte_ctrl.v \ +opencores/i2c/rtl/verilog/i2c_master_defines.v \ +opencores/i2c/rtl/verilog/i2c_master_top.v \ +opencores/i2c/rtl/verilog/timescale.v \ +opencores/simple_pic/rtl/simple_pic.v \ +opencores/spi/rtl/verilog/spi_clgen.v \ +opencores/spi/rtl/verilog/spi_defines.v \ +opencores/spi/rtl/verilog/spi_shift.v \ +opencores/spi/rtl/verilog/spi_top.v \ +opencores/spi/rtl/verilog/timescale.v \ +sdr_lib/acc.v \ +sdr_lib/add2.v \ +sdr_lib/add2_and_round.v \ +sdr_lib/add2_and_round_reg.v \ +sdr_lib/add2_reg.v \ +sdr_lib/cic_dec_shifter.v \ +sdr_lib/cic_decim.v \ +sdr_lib/cic_int_shifter.v \ +sdr_lib/cic_interp.v \ +sdr_lib/cic_strober.v \ +sdr_lib/clip.v \ +sdr_lib/clip_reg.v \ +sdr_lib/cordic.v \ +sdr_lib/cordic_z24.v \ +sdr_lib/cordic_stage.v \ +sdr_lib/dsp_core_rx.v \ +sdr_lib/dsp_core_tx.v \ +sdr_lib/hb_dec.v \ +sdr_lib/hb_interp.v \ +sdr_lib/round.v \ +sdr_lib/round_reg.v \ +sdr_lib/rx_control.v \ +sdr_lib/rx_dcoffset.v \ +sdr_lib/sign_extend.v \ +sdr_lib/small_hb_dec.v \ +sdr_lib/small_hb_int.v \ +sdr_lib/tx_control.v \ +serdes/serdes.v \ +serdes/serdes_fc_rx.v \ +serdes/serdes_fc_tx.v \ +serdes/serdes_rx.v \ +serdes/serdes_tx.v \ +timing/time_receiver.v \ +timing/time_sender.v \ +timing/time_sync.v \ +timing/timer.v \ +top/u2_core/u2_core.v \ +top/u2plus/capture_ddrlvds.v \ +top/u2plus/u2plus.ucf \ +top/u2plus/u2plus.v + +################################################## +# Process Properties +################################################## +export SYNTHESIZE_PROPERTIES := \ +"Number of Clock Buffers" 6 \ +"Pack I/O Registers into IOBs" Yes \ +"Optimization Effort" High \ +"Optimize Instantiated Primitives" TRUE \ +"Register Balancing" Yes \ +"Use Clock Enable" Auto \ +"Use Synchronous Reset" Auto \ +"Use Synchronous Set" Auto + +export TRANSLATE_PROPERTIES := \ +"Macro Search Path" "$(shell pwd)/../../coregen/" + +export MAP_PROPERTIES := \ +"Allow Logic Optimization Across Hierarchy" TRUE \ +"Map to Input Functions" 4 \ +"Optimization Strategy (Cover Mode)" Speed \ +"Pack I/O Registers/Latches into IOBs" "For Inputs and Outputs" \ +"Perform Timing-Driven Packing and Placement" TRUE \ +"Map Effort Level" High \ +"Extra Effort" Normal \ +"Combinatorial Logic Optimization" TRUE \ +"Register Duplication" TRUE + +export PLACE_ROUTE_PROPERTIES := \ +"Place & Route Effort Level (Overall)" High + +export STATIC_TIMING_PROPERTIES := \ +"Number of Paths in Error/Verbose Report" 10 \ +"Report Type" "Error Report" + +export GEN_PROG_FILE_PROPERTIES := \ +"Configuration Rate" 6 \ +"Create Binary Configuration File" TRUE \ +"Done (Output Events)" 5 \ +"Enable Bitstream Compression" TRUE \ +"Enable Outputs (Output Events)" 6 + +export SIM_MODEL_PROPERTIES := "" + +################################################## +# Make Options +################################################## +all: + @echo make proj, check, synth, bin, or clean + +proj: + PROCESS_RUN="" $(XTCLSH) $(ISE_HELPER) + +check: + PROCESS_RUN="Check Syntax" $(XTCLSH) $(ISE_HELPER) + +synth: + PROCESS_RUN="Synthesize - XST" $(XTCLSH) $(ISE_HELPER) + +bin: + PROCESS_RUN="Generate Programming File" $(XTCLSH) $(ISE_HELPER) + +clean: + rm -rf $(BUILD_DIR) + + diff --git a/usrp2/top/u2plus/capture_ddrlvds.v b/usrp2/top/u2plus/capture_ddrlvds.v new file mode 100644 index 000000000..b9f53ff8c --- /dev/null +++ b/usrp2/top/u2plus/capture_ddrlvds.v @@ -0,0 +1,39 @@ + + +module capture_ddrlvds + #(parameter WIDTH=7) + (input clk, + input ssclk_p, + input ssclk_n, + input [WIDTH-1:0] in_p, + input [WIDTH-1:0] in_n, + output reg [(2*WIDTH)-1:0] out); + + wire [WIDTH-1:0] ddr_dat; + wire ssclk_regional; + wire ssclk_io; + wire ssclk; + wire [(2*WIDTH)-1:0] out_pre1; + reg [(2*WIDTH)-1:0] out_pre2; + + IBUFGDS #(.IOSTANDARD("LVDS_25"),.DIFF_TERM("TRUE")) clkbuf (.O(ssclk), .I(ssclk_p), .IB(ssclk_n)); + + genvar i; + generate + for(i = 0; i < WIDTH; i = i + 1) + begin : gen_lvds_pins + IBUFDS #(.IOSTANDARD("LVDS_25"),.DIFF_TERM("TRUE")) ibufds + (.O(ddr_dat[i]), .I(in_p[i]), .IB(in_n[i]) ); + IDDR2 #(.DDR_ALIGNMENT("C1")) iddr2 + (.Q0(out_pre1[2*i]), .Q1(out_pre1[(2*i)+1]), .C0(ssclk), .C1(~ssclk), + .CE(1'b1), .D(ddr_dat[i]), .R(1'b0), .S(1'b0)); + end + endgenerate + + always @(negedge clk) + out_pre2 <= out_pre1; + + always @(posedge clk) + out <= out_pre2; + +endmodule // capture_ddrlvds diff --git a/usrp2/top/u2plus/u2plus.ucf b/usrp2/top/u2plus/u2plus.ucf index 091eb2005..31404dda9 100755 --- a/usrp2/top/u2plus/u2plus.ucf +++ b/usrp2/top/u2plus/u2plus.ucf @@ -1,157 +1,137 @@ -NET "DAC_LOCK" LOC = "P4" ; +## Main 100 MHz Clock +NET "CLK_FPGA_P" LOC = "AA13" ; +NET "CLK_FPGA_N" LOC = "Y13" ; + +## ADC NET "ADC_clkout_p" LOC = "P1" ; NET "ADC_clkout_n" LOC = "P2" ; -NET "io_rx<15>" LOC = "AD1" ; -NET "io_rx<14>" LOC = "AD2" ; -NET "io_rx<13>" LOC = "AC2" ; -NET "io_rx<12>" LOC = "AC3" ; -NET "io_rx<11>" LOC = "W7" ; -NET "io_rx<10>" LOC = "W6" ; -NET "io_rx<09>" LOC = "U9" ; -NET "io_rx<08>" LOC = "V8" ; -NET "io_rx<07>" LOC = "AB1" ; -NET "io_rx<06>" LOC = "AC1" ; -NET "io_rx<05>" LOC = "V7" ; -NET "io_rx<04>" LOC = "V6" ; -NET "io_rx<03>" LOC = "Y5" ; -NET "ADCB_2_3_p" LOC = "U7" ; -NET "ADCB_2_3_n" LOC = "U8" ; -NET "ADCB_0_1_p" LOC = "AA2" ; -NET "ADCB_0_1_n" LOC = "AA3" ; -NET "ADCA_12_13_p" LOC = "Y1" ; -NET "ADCA_12_13_n" LOC = "Y2" ; -NET "ADCA_10_11_p" LOC = "W3" ; -NET "ADCA_10_11_n" LOC = "W4" ; -NET "ADCA_8_9_p" LOC = "T7" ; -NET "ADCA_8_9_n" LOC = "U6" ; -NET "ADCA_6_7_p" LOC = "U5" ; -NET "ADCA_6_7_n" LOC = "V5" ; -NET "ADCA_4_5_p" LOC = "T10" ; -NET "ADCA_4_5_n" LOC = "T9" ; -NET "ADCA_2_3_p" LOC = "V1" ; -NET "ADCA_2_3_n" LOC = "V2" ; -NET "ADCA_0_1_p" LOC = "R8" ; -NET "ADCA_0_1_n" LOC = "R7" ; -NET "TX00_A" LOC = "P8" ; -NET "TX01_A" LOC = "P9" ; -NET "TX02_A" LOC = "R5" ; -NET "TX03_A" LOC = "R6" ; -NET "TX04_A" LOC = "P7" ; -NET "TX05_A" LOC = "P6" ; -NET "TX06_A" LOC = "T3" ; -NET "TX07_A" LOC = "T4" ; -NET "TX08_A" LOC = "R3" ; -NET "TX09_A" LOC = "R4" ; -NET "TX10_A" LOC = "R2" ; -NET "TX11_A" LOC = "N1" ; -NET "TX12_A" LOC = "N2" ; -NET "TX13_A" LOC = "N5" ; -NET "TX14_A" LOC = "N4" ; -NET "TX15_A" LOC = "M2" ; -NET "TX00_B" LOC = "M5" ; -NET "TX01_B" LOC = "M6" ; -NET "TX02_B" LOC = "M4" ; -NET "TX03_B" LOC = "M3" ; -NET "TX04_B" LOC = "M8" ; -NET "TX05_B" LOC = "M7" ; -NET "TX06_B" LOC = "L4" ; -NET "TX07_B" LOC = "L3" ; -NET "TX08_B" LOC = "K3" ; -NET "TX09_B" LOC = "K2" ; -NET "TX10_B" LOC = "K5" ; -NET "TX11_B" LOC = "K4" ; -NET "TX12_B" LOC = "M10" ; -NET "TX13_B" LOC = "M9" ; -NET "TX14_B" LOC = "J5" ; -NET "TX15_B" LOC = "J4" ; +NET "ADCA_12_p" LOC = "Y1" ; +NET "ADCA_12_n" LOC = "Y2" ; +NET "ADCA_10_p" LOC = "W3" ; +NET "ADCA_10_n" LOC = "W4" ; +NET "ADCA_8_p" LOC = "T7" ; +NET "ADCA_8_n" LOC = "U6" ; +NET "ADCA_6_p" LOC = "U5" ; +NET "ADCA_6_n" LOC = "V5" ; +NET "ADCA_4_p" LOC = "T10" ; +NET "ADCA_4_n" LOC = "T9" ; +NET "ADCA_2_p" LOC = "V1" ; +NET "ADCA_2_n" LOC = "V2" ; +NET "ADCA_0_p" LOC = "R8" ; +NET "ADCA_0_n" LOC = "R7" ; +NET "ADCB_2_p" LOC = "U7" ; +NET "ADCB_2_n" LOC = "U8" ; +NET "ADCB_0_p" LOC = "AA2" ; +NET "ADCB_0_n" LOC = "AA3" ; +NET "ADCB_4_p" LOC = "AE1" ; +NET "ADCB_4_n" LOC = "AE2" ; +NET "ADCB_6_p" LOC = "W1" ; +NET "ADCB_6_n" LOC = "W2" ; +NET "ADCB_8_p" LOC = "U3" ; +NET "ADCB_8_n" LOC = "V4" ; +NET "ADCB_10_p" LOC = "J1" ; +NET "ADCB_10_n" LOC = "K1" ; +NET "ADCB_12_p" LOC = "J3" ; +NET "ADCB_12_n" LOC = "J2" ; + +## DAC +NET "DAC_LOCK" LOC = "P4" ; +NET "DACA<0>" LOC = "P8" ; +NET "DACA<1>" LOC = "P9" ; +NET "DACA<2>" LOC = "R5" ; +NET "DACA<3>" LOC = "R6" ; +NET "DACA<4>" LOC = "P7" ; +NET "DACA<5>" LOC = "P6" ; +NET "DACA<6>" LOC = "T3" ; +NET "DACA<7>" LOC = "T4" ; +NET "DACA<8>" LOC = "R3" ; +NET "DACA<9>" LOC = "R4" ; +NET "DACA<10>" LOC = "R2" ; +NET "DACA<11>" LOC = "N1" ; +NET "DACA<12>" LOC = "N2" ; +NET "DACA<13>" LOC = "N5" ; +NET "DACA<14>" LOC = "N4" ; +NET "DACA<15>" LOC = "M2" ; +NET "DACB<0>" LOC = "M5" ; +NET "DACB<1>" LOC = "M6" ; +NET "DACB<2>" LOC = "M4" ; +NET "DACB<3>" LOC = "M3" ; +NET "DACB<4>" LOC = "M8" ; +NET "DACB<5>" LOC = "M7" ; +NET "DACB<6>" LOC = "L4" ; +NET "DACB<7>" LOC = "L3" ; +NET "DACB<8>" LOC = "K3" ; +NET "DACB<9>" LOC = "K2" ; +NET "DACB<10>" LOC = "K5" ; +NET "DACB<11>" LOC = "K4" ; +NET "DACB<12>" LOC = "M10" ; +NET "DACB<13>" LOC = "M9" ; +NET "DACB<14>" LOC = "J5" ; +NET "DACB<15>" LOC = "J4" ; + +## TX DB GPIO NET "io_tx<15>" LOC = "K6" ; NET "io_tx<14>" LOC = "L7" ; NET "io_tx<13>" LOC = "H2" ; NET "io_tx<12>" LOC = "H1" ; NET "io_tx<11>" LOC = "L10" ; NET "io_tx<10>" LOC = "L9" ; -NET "io_tx<09>" LOC = "G3" ; -NET "io_tx<08>" LOC = "F3" ; -NET "io_tx<07>" LOC = "K7" ; -NET "io_tx<06>" LOC = "J6" ; -NET "io_tx<05>" LOC = "E1" ; -NET "io_tx<04>" LOC = "F2" ; -NET "io_tx<03>" LOC = "J7" ; -NET "io_tx<02>" LOC = "H6" ; -NET "io_tx<01>" LOC = "F5" ; -NET "io_tx<00>" LOC = "G4" ; -NET "MOSI_RX_ADC" LOC = "E3" ; -NET "SCLK_RX_ADC" LOC = "F4" ; -NET "SEN_RX_ADC" LOC = "D3" ; -NET "SCLK_RX_DAC" LOC = "E4" ; -NET "SEN_RX_DAC" LOC = "K9" ; -NET "MOSI_RX_DAC" LOC = "K8" ; -NET "SCLK_RX_DB" LOC = "G6" ; -NET "MOSI_RX_DB" LOC = "H7" ; -NET "SEN_RX_DB" LOC = "B2" ; -NET "SCLK_ADC" LOC = "B1" ; -NET "MOSI_ADC" LOC = "J8" ; -NET "SEN_ADC" LOC = "J9" ; -NET "ADCB_4_5_p" LOC = "AE1" ; -NET "ADCB_4_5_n" LOC = "AE2" ; -NET "ADCB_6_7_p" LOC = "W1" ; -NET "ADCB_6_7_n" LOC = "W2" ; -NET "ADCB_8_9_p" LOC = "U3" ; -NET "ADCB_8_9_n" LOC = "V4" ; -NET "ADCB_10_11_p" LOC = "J1" ; -NET "ADCB_10_11_n" LOC = "K1" ; -NET "ADCB_12_13_p" LOC = "J3" ; -NET "ADCB_12_13_n" LOC = "J2" ; -NET "MISO_RX_DB" LOC = "H4" ; -NET "MISO_RX_ADC" LOC = "C1" ; -NET "MISO_TX_DB" LOC = "AA5" ; -NET "MISO_DAC" LOC = "Y3" ; -NET "MISO_TX_ADC" LOC = "G1" ; -NET "io_rx<02>" LOC = "R10" ; -NET "io_rx<01>" LOC = "R1" ; -NET "io_rx<00>" LOC = "M1" ; -NET "exp_user_out_p" LOC = "AF14" ; -NET "exp_user_out_n" LOC = "AE14" ; -NET "exp_time_out_p" LOC = "Y14" ; -NET "exp_time_out_n" LOC = "AA14" ; -NET "CLK_FPGA_P" LOC = "AA13" ; -NET "CLK_FPGA_N" LOC = "Y13" ; +NET "io_tx<9>" LOC = "G3" ; +NET "io_tx<8>" LOC = "F3" ; +NET "io_tx<7>" LOC = "K7" ; +NET "io_tx<6>" LOC = "J6" ; +NET "io_tx<5>" LOC = "E1" ; +NET "io_tx<4>" LOC = "F2" ; +NET "io_tx<3>" LOC = "J7" ; +NET "io_tx<2>" LOC = "H6" ; +NET "io_tx<1>" LOC = "F5" ; +NET "io_tx<0>" LOC = "G4" ; + +## RX DB GPIO +NET "io_rx<15>" LOC = "AD1" ; +NET "io_rx<14>" LOC = "AD2" ; +NET "io_rx<13>" LOC = "AC2" ; +NET "io_rx<12>" LOC = "AC3" ; +NET "io_rx<11>" LOC = "W7" ; +NET "io_rx<10>" LOC = "W6" ; +NET "io_rx<9>" LOC = "U9" ; +NET "io_rx<8>" LOC = "V8" ; +NET "io_rx<7>" LOC = "AB1" ; +NET "io_rx<6>" LOC = "AC1" ; +NET "io_rx<5>" LOC = "V7" ; +NET "io_rx<4>" LOC = "V6" ; +NET "io_rx<3>" LOC = "Y5" ; +NET "io_rx<2>" LOC = "R10" ; +NET "io_rx<1>" LOC = "R1" ; +NET "io_rx<0>" LOC = "M1" ; + +## MISC NET "leds<5>" LOC = "AF25" ; NET "leds<4>" LOC = "AE25" ; NET "leds<3>" LOC = "AF23" ; NET "leds<2>" LOC = "AE23" ; NET "leds<1>" LOC = "AB18" ; -NET "SEN_CLK" LOC = "AA18" ; -NET "MOSI_CLK" LOC = "W17" ; -NET "SCLK_CLK" LOC = "V17" ; -NET "CLK_STATUS" LOC = "AD22" ; -NET "CLK_FUNC" LOC = "AC21" ; -NET "clk_sel<0>" LOC = "AE21" ; -NET "clk_sel<1>" LOC = "AD21" ; -NET "clk_en<1>" LOC = "AA17" ; -NET "clk_en<0>" LOC = "Y17" ; -NET "SDA" LOC = "V16" ; -NET "SCL" LOC = "U16" ; -NET "TXD3" LOC = "AD20" ; -NET "TXD2" LOC = "AC20" ; -NET "TXD1" LOC = "AD19" ; -NET "debug<00>" LOC = "AC19" ; -NET "debug<01>" LOC = "AF20" ; -NET "debug<02>" LOC = "AE20" ; -NET "debug<03>" LOC = "AC16" ; -NET "debug<04>" LOC = "AB16" ; -NET "debug<05>" LOC = "AF19" ; -NET "debug<06>" LOC = "AE19" ; -NET "debug<07>" LOC = "V15" ; -NET "debug<08>" LOC = "U15" ; -NET "debug<09>" LOC = "AE17" ; +NET "FPGA_RESET" LOC = "K24" ; + +## Debug +NET "debug_clk<0>" LOC = "AA10" ; +NET "debug_clk<1>" LOC = "AD11" ; +NET "debug<0>" LOC = "AC19" ; +NET "debug<1>" LOC = "AF20" ; +NET "debug<2>" LOC = "AE20" ; +NET "debug<3>" LOC = "AC16" ; +NET "debug<4>" LOC = "AB16" ; +NET "debug<5>" LOC = "AF19" ; +NET "debug<6>" LOC = "AE19" ; +NET "debug<7>" LOC = "V15" ; +NET "debug<8>" LOC = "U15" ; +NET "debug<9>" LOC = "AE17" ; NET "debug<10>" LOC = "AD17" ; NET "debug<11>" LOC = "V14" ; NET "debug<12>" LOC = "W15" ; NET "debug<13>" LOC = "AC15" ; NET "debug<14>" LOC = "AD14" ; NET "debug<15>" LOC = "AC14" ; -NET "debug_clk<1>" LOC = "AD11" ; NET "debug<16>" LOC = "AC11" ; NET "debug<17>" LOC = "AB12" ; NET "debug<18>" LOC = "AC12" ; @@ -168,103 +148,183 @@ NET "debug<28>" LOC = "AB7" ; NET "debug<29>" LOC = "V11" ; NET "debug<30>" LOC = "U11" ; NET "debug<31>" LOC = "Y10" ; -NET "debug_clk<0>" LOC = "AA10" ; + +## UARTS +NET "TXD<3>" LOC = "AD20" ; +NET "TXD<2>" LOC = "AC20" ; +NET "TXD<1>" LOC = "AD19" ; +NET "RXD<3>" LOC = "AF17" ; +NET "RXD<2>" LOC = "AF15" ; +NET "RXD<1>" LOC = "AD12" ; + +## AD9510 +NET "CLK_STATUS" LOC = "AD22" ; +NET "CLK_FUNC" LOC = "AC21" ; +NET "clk_sel<0>" LOC = "AE21" ; +NET "clk_sel<1>" LOC = "AD21" ; +NET "clk_en<1>" LOC = "AA17" ; +NET "clk_en<0>" LOC = "Y17" ; + +## I2C +NET "SDA" LOC = "V16" ; +NET "SCL" LOC = "U16" ; + +## Timing +NET "PPS_IN" LOC = "AB6" ; +NET "PPS2_IN" LOC = "AA20" ; + +## SPI +NET "SEN_CLK" LOC = "AA18" ; +NET "MOSI_CLK" LOC = "W17" ; +NET "SCLK_CLK" LOC = "V17" ; +NET "MISO_CLK" LOC = "AC10" ; + NET "SEN_DAC" LOC = "AE7" ; NET "SCLK_DAC" LOC = "AF5" ; NET "MOSI_DAC" LOC = "AE6" ; +NET "MISO_DAC" LOC = "Y3" ; + +NET "SCLK_ADC" LOC = "B1" ; +NET "MOSI_ADC" LOC = "J8" ; +NET "SEN_ADC" LOC = "J9" ; + NET "MOSI_TX_ADC" LOC = "V10" ; NET "SEN_TX_ADC" LOC = "W10" ; NET "SCLK_TX_ADC" LOC = "AC6" ; +NET "MISO_TX_ADC" LOC = "G1" ; + NET "MOSI_TX_DAC" LOC = "AD6" ; NET "SEN_TX_DAC" LOC = "AE4" ; NET "SCLK_TX_DAC" LOC = "AF4" ; + NET "SCLK_TX_DB" LOC = "AE3" ; NET "MOSI_TX_DB" LOC = "AF3" ; NET "SEN_TX_DB" LOC = "W9" ; -NET "RXD3" LOC = "AF17" ; -NET "RXD2" LOC = "AF15" ; -NET "RXD1" LOC = "AD12" ; -NET "MISO_CLK" LOC = "AC10" ; -NET "PPS_IN" LOC = "AB6" ; -NET "PPS2_IN" LOC = "AA20" ; -NET "ser_rx_clk" LOC = "P18" ; -NET "ser_tx_clk" LOC = "P23" ; # SERDES TX CLK +NET "MISO_TX_DB" LOC = "AA5" ; + +NET "MOSI_RX_ADC" LOC = "E3" ; +NET "SCLK_RX_ADC" LOC = "F4" ; +NET "SEN_RX_ADC" LOC = "D3" ; +NET "MISO_RX_ADC" LOC = "C1" ; + +NET "SCLK_RX_DAC" LOC = "E4" ; +NET "SEN_RX_DAC" LOC = "K9" ; +NET "MOSI_RX_DAC" LOC = "K8" ; + +NET "SCLK_RX_DB" LOC = "G6" ; +NET "MOSI_RX_DB" LOC = "H7" ; +NET "SEN_RX_DB" LOC = "B2" ; +NET "MISO_RX_DB" LOC = "H4" ; + +## ETH PHY NET "CLK_TO_MAC" LOC = "P26" ; -NET "GMII_TX_CLK" LOC = "P25" ; -NET "GMII_RX_CLK" LOC = "P21" ; -NET "ETH_LED" LOC = "H20" ; -NET "GMII_TXD7" LOC = "G21" ; -NET "GMII_TXD6" LOC = "C26" ; -NET "GMII_TXD5" LOC = "C25" ; -NET "GMII_TXD4" LOC = "J21" ; -NET "GMII_TXD3" LOC = "H21" ; -NET "GMII_TXD2" LOC = "D25" ; -NET "GMII_TXD1" LOC = "D24" ; -NET "GMII_TXD0" LOC = "E26" ; + +NET "GMII_TXD<7>" LOC = "G21" ; +NET "GMII_TXD<6>" LOC = "C26" ; +NET "GMII_TXD<5>" LOC = "C25" ; +NET "GMII_TXD<4>" LOC = "J21" ; +NET "GMII_TXD<3>" LOC = "H21" ; +NET "GMII_TXD<2>" LOC = "D25" ; +NET "GMII_TXD<1>" LOC = "D24" ; +NET "GMII_TXD<0>" LOC = "E26" ; NET "GMII_TX_EN" LOC = "D26" ; NET "GMII_TX_ER" LOC = "J19" ; NET "GMII_GTX_CLK" LOC = "J20" ; -NET "GMII_RXD7" LOC = "G22" ; -NET "GMII_RXD6" LOC = "K19" ; -NET "GMII_RXD5" LOC = "K18" ; -NET "GMII_RXD4" LOC = "E24" ; -NET "GMII_RXD3" LOC = "F23" ; -NET "GMII_RXD2" LOC = "L18" ; -NET "GMII_RXD1" LOC = "L17" ; -NET "GMII_RXD0" LOC = "F25" ; +NET "GMII_TX_CLK" LOC = "P25" ; + +NET "GMII_RX_CLK" LOC = "P21" ; +NET "GMII_RXD<7>" LOC = "G22" ; +NET "GMII_RXD<6>" LOC = "K19" ; +NET "GMII_RXD<5>" LOC = "K18" ; +NET "GMII_RXD<4>" LOC = "E24" ; +NET "GMII_RXD<3>" LOC = "F23" ; +NET "GMII_RXD<2>" LOC = "L18" ; +NET "GMII_RXD<1>" LOC = "L17" ; +NET "GMII_RXD<0>" LOC = "F25" ; NET "GMII_RX_DV" LOC = "F24" ; NET "GMII_RX_ER" LOC = "L20" ; NET "GMII_CRS" LOC = "K20" ; NET "GMII_COL" LOC = "G23" ; + NET "PHY_INTn" LOC = "L22" ; NET "MDIO" LOC = "K21" ; NET "MDC" LOC = "J23" ; -NET "PHY_RESET" LOC = "J22" ; +NET "PHY_RESETn" LOC = "J22" ; +NET "ETH_LED" LOC = "H20" ; + +## MIMO Interface +NET "exp_time_out_p" LOC = "Y14" ; +NET "exp_time_out_n" LOC = "AA14" ; NET "exp_time_in_p" LOC = "N18" ; NET "exp_time_in_n" LOC = "N17" ; +NET "exp_user_out_p" LOC = "AF14" ; +NET "exp_user_out_n" LOC = "AE14" ; NET "exp_user_in_p" LOC = "L24" ; NET "exp_user_in_n" LOC = "M23" ; + +## SERDES +NET "ser_enable" LOC = "R20" ; NET "ser_prbsen" LOC = "U23" ; NET "ser_loopen" LOC = "R19" ; -NET "ser_enable" LOC = "R20" ; +NET "ser_rx_en" LOC = "Y21" ; +NET "ser_tx_clk" LOC = "P23" ; # SERDES TX CLK NET "ser_t<15>" LOC = "V23" ; NET "ser_t<14>" LOC = "U22" ; NET "ser_t<13>" LOC = "V24" ; NET "ser_t<12>" LOC = "V25" ; NET "ser_t<11>" LOC = "W23" ; NET "ser_t<10>" LOC = "V22" ; -NET "ser_t<09>" LOC = "T18" ; -NET "ser_t<08>" LOC = "T17" ; -NET "ser_t<07>" LOC = "Y24" ; -NET "ser_t<06>" LOC = "Y25" ; -NET "ser_t<05>" LOC = "U21" ; -NET "ser_t<04>" LOC = "T20" ; -NET "ser_t<03>" LOC = "Y22" ; -NET "ser_t<02>" LOC = "Y23" ; -NET "ser_t<01>" LOC = "U19" ; -NET "ser_t<00>" LOC = "U18" ; +NET "ser_t<9>" LOC = "T18" ; +NET "ser_t<8>" LOC = "T17" ; +NET "ser_t<7>" LOC = "Y24" ; +NET "ser_t<6>" LOC = "Y25" ; +NET "ser_t<5>" LOC = "U21" ; +NET "ser_t<4>" LOC = "T20" ; +NET "ser_t<3>" LOC = "Y22" ; +NET "ser_t<2>" LOC = "Y23" ; +NET "ser_t<1>" LOC = "U19" ; +NET "ser_t<0>" LOC = "U18" ; NET "ser_tkmsb" LOC = "AA24" ; NET "ser_tklsb" LOC = "AA25" ; +NET "ser_rx_clk" LOC = "P18" ; NET "ser_r<15>" LOC = "V21" ; NET "ser_r<14>" LOC = "U20" ; NET "ser_r<13>" LOC = "AA22" ; NET "ser_r<12>" LOC = "AA23" ; NET "ser_r<11>" LOC = "V18" ; NET "ser_r<10>" LOC = "V19" ; -NET "ser_r<09>" LOC = "AB23" ; -NET "ser_r<08>" LOC = "AC26" ; -NET "ser_r<07>" LOC = "AB26" ; -NET "ser_r<06>" LOC = "AD26" ; -NET "ser_r<05>" LOC = "AC25" ; -NET "ser_r<04>" LOC = "W20" ; -NET "ser_r<03>" LOC = "W21" ; -NET "ser_r<02>" LOC = "AC23" ; -NET "ser_r<01>" LOC = "AC24" ; -NET "ser_r<00>" LOC = "AE26" ; +NET "ser_r<9>" LOC = "AB23" ; +NET "ser_r<8>" LOC = "AC26" ; +NET "ser_r<7>" LOC = "AB26" ; +NET "ser_r<6>" LOC = "AD26" ; +NET "ser_r<5>" LOC = "AC25" ; +NET "ser_r<4>" LOC = "W20" ; +NET "ser_r<3>" LOC = "W21" ; +NET "ser_r<2>" LOC = "AC23" ; +NET "ser_r<1>" LOC = "AC24" ; +NET "ser_r<0>" LOC = "AE26" ; NET "ser_rkmsb" LOC = "AD25" ; NET "ser_rklsb" LOC = "Y20" ; -NET "ser_rx_en" LOC = "Y21" ; -NET "FPGA_RESET" LOC = "K24" ; + +## SRAM +NET "RAM_D<35>" LOC = "K16" ; +NET "RAM_D<34>" LOC = "D20" ; +NET "RAM_D<33>" LOC = "C20" ; +NET "RAM_D<32>" LOC = "E21" ; +NET "RAM_D<31>" LOC = "D21" ; +NET "RAM_D<30>" LOC = "C21" ; +NET "RAM_D<29>" LOC = "B21" ; +NET "RAM_D<28>" LOC = "H17" ; +NET "RAM_D<27>" LOC = "G17" ; +NET "RAM_D<26>" LOC = "B23" ; +NET "RAM_D<25>" LOC = "A22" ; +NET "RAM_D<24>" LOC = "D23" ; +NET "RAM_D<23>" LOC = "C23" ; +NET "RAM_D<22>" LOC = "D22" ; +NET "RAM_D<21>" LOC = "C22" ; +NET "RAM_D<20>" LOC = "F19" ; +NET "RAM_D<19>" LOC = "G20" ; +NET "RAM_D<18>" LOC = "F20" ; NET "RAM_D<17>" LOC = "F7" ; NET "RAM_D<16>" LOC = "E7" ; NET "RAM_D<15>" LOC = "G9" ; @@ -273,36 +333,26 @@ NET "RAM_D<13>" LOC = "G10" ; NET "RAM_D<12>" LOC = "H10" ; NET "RAM_D<11>" LOC = "A4" ; NET "RAM_D<10>" LOC = "B4" ; -NET "RAM_D<09>" LOC = "C5" ; -NET "RAM_D<08>" LOC = "D6" ; -NET "RAM_D<07>" LOC = "J11" ; -NET "RAM_D<06>" LOC = "K11" ; -NET "RAM_D<05>" LOC = "B7" ; -NET "RAM_D<04>" LOC = "C7" ; -NET "RAM_D<03>" LOC = "B6" ; -NET "RAM_D<02>" LOC = "C6" ; -NET "RAM_D<01>" LOC = "C8" ; -NET "RAM_D<00>" LOC = "D8" ; -NET "RAM_ZZ" LOC = "J12" ; -NET "RAM_BWn<3>" LOC = "D9" ; -NET "RAM_BWn<2>" LOC = "A9" ; -NET "RAM_BWn<1>" LOC = "B9" ; -NET "RAM_BWn<0>" LOC = "G12" ; -NET "RAM_LDn" LOC = "H12" ; -NET "RAM_OEn" LOC = "C10" ; -NET "RAM_WEn" LOC = "D10" ; -NET "RAM_CLK" LOC = "A10" ; -NET "RAM_CENn" LOC = "B10" ; -NET "RAM_A<00>" LOC = "C11" ; -NET "RAM_A<01>" LOC = "E12" ; -NET "RAM_A<02>" LOC = "F12" ; -NET "RAM_A<03>" LOC = "D13" ; -NET "RAM_A<04>" LOC = "C12" ; -NET "RAM_A<05>" LOC = "A12" ; -NET "RAM_A<06>" LOC = "B12" ; -NET "RAM_A<07>" LOC = "E14" ; -NET "RAM_A<08>" LOC = "F14" ; -NET "RAM_A<09>" LOC = "B15" ; +NET "RAM_D<9>" LOC = "C5" ; +NET "RAM_D<8>" LOC = "D6" ; +NET "RAM_D<7>" LOC = "J11" ; +NET "RAM_D<6>" LOC = "K11" ; +NET "RAM_D<5>" LOC = "B7" ; +NET "RAM_D<4>" LOC = "C7" ; +NET "RAM_D<3>" LOC = "B6" ; +NET "RAM_D<2>" LOC = "C6" ; +NET "RAM_D<1>" LOC = "C8" ; +NET "RAM_D<0>" LOC = "D8" ; +NET "RAM_A<0>" LOC = "C11" ; +NET "RAM_A<1>" LOC = "E12" ; +NET "RAM_A<2>" LOC = "F12" ; +NET "RAM_A<3>" LOC = "D13" ; +NET "RAM_A<4>" LOC = "C12" ; +NET "RAM_A<5>" LOC = "A12" ; +NET "RAM_A<6>" LOC = "B12" ; +NET "RAM_A<7>" LOC = "E14" ; +NET "RAM_A<8>" LOC = "F14" ; +NET "RAM_A<9>" LOC = "B15" ; NET "RAM_A<10>" LOC = "A15" ; NET "RAM_A<11>" LOC = "D16" ; NET "RAM_A<12>" LOC = "C15" ; @@ -314,41 +364,38 @@ NET "RAM_A<17>" LOC = "B17" ; NET "RAM_A<18>" LOC = "B18" ; NET "RAM_A<19>" LOC = "A18" ; NET "RAM_A<20>" LOC = "D18" ; -NET "RAM_D<35>" LOC = "K16" ; -NET "RAM_D<34>" LOC = "D20" ; -NET "RAM_D<33>" LOC = "C20" ; -NET "RAM_D<32>" LOC = "E21" ; -NET "RAM_D<31>" LOC = "D21" ; -NET "RAM_D<30>" LOC = "C21" ; -NET "RAM_D<29>" LOC = "B21" ; -NET "RAM_D<28>" LOC = "H17" ; -NET "RAM_D<27>" LOC = "G17" ; -NET "RAM_D<26>" LOC = "B23" ; -NET "RAM_D<25>" LOC = "A22" ; -NET "RAM_D<24>" LOC = "D23" ; -NET "RAM_D<23>" LOC = "C23" ; -NET "RAM_D<22>" LOC = "D22" ; -NET "RAM_D<21>" LOC = "C22" ; -NET "RAM_D<20>" LOC = "F19" ; -NET "RAM_D<19>" LOC = "G20" ; -NET "RAM_D<18>" LOC = "F20" ; -#NET "unnamed_net20" LOC = "V20" ; # SUSPEND -NET "PROG_B" LOC = "A2" ; -NET "PUDC_B" LOC = "G8" ; -NET "DONE" LOC = "AB21" ; +NET "RAM_BWn<3>" LOC = "D9" ; +NET "RAM_BWn<2>" LOC = "A9" ; +NET "RAM_BWn<1>" LOC = "B9" ; +NET "RAM_BWn<0>" LOC = "G12" ; +NET "RAM_ZZ" LOC = "J12" ; +NET "RAM_LDn" LOC = "H12" ; +NET "RAM_OEn" LOC = "C10" ; +NET "RAM_WEn" LOC = "D10" ; +NET "RAM_CENn" LOC = "B10" ; +NET "RAM_CLK" LOC = "A10" ; + +## SPI Flash NET "flash_miso" LOC = "AF24" ; NET "flash_clk" LOC = "AE24" ; -NET "INIT_B" LOC = "AA15" ; NET "flash_mosi" LOC = "AB15" ; +NET "flash_cs" LOC = "AA7" ; + +## MISC FPGA, unused for now +#NET "PROG_B" LOC = "A2" ; +#NET "PUDC_B" LOC = "G8" ; +#NET "DONE" LOC = "AB21" ; +#NET "INIT_B" LOC = "AA15" ; + + #NET "unnamed_net19" LOC = "AE9" ; # VS1 #NET "unnamed_net18" LOC = "AF9" ; # VS0 #NET "unnamed_net17" LOC = "AA12" ; # VS2 #NET "unnamed_net16" LOC = "Y7" ; # M2 -NET "flash_cs" LOC = "AA7" ; #NET "unnamed_net15" LOC = "AC4" ; # M1 #NET "unnamed_net14" LOC = "AD4" ; # M0 #NET "unnamed_net13" LOC = "D4" ; # TMS #NET "unnamed_net12" LOC = "E23" ; # TDO #NET "unnamed_net11" LOC = "G7" ; # TDI #NET "unnamed_net10" LOC = "A25" ; # TCK - +#NET "unnamed_net20" LOC = "V20" ; # SUSPEND diff --git a/usrp2/top/u2plus/u2plus.v b/usrp2/top/u2plus/u2plus.v index e95445867..fef23af60 100644 --- a/usrp2/top/u2plus/u2plus.v +++ b/usrp2/top/u2plus/u2plus.v @@ -3,46 +3,93 @@ module u2plus ( + input CLK_FPGA_P, input CLK_FPGA_N, // Diff + + // ADC + input ADC_clkout_p, input ADC_clkout_n, + input ADCA_12_p, input ADCA_12_n, + input ADCA_10_p, input ADCA_10_n, + input ADCA_8_p, input ADCA_8_n, + input ADCA_6_p, input ADCA_6_n, + input ADCA_4_p, input ADCA_4_n, + input ADCA_2_p, input ADCA_2_n, + input ADCA_0_p, input ADCA_0_n, + input ADCB_12_p, input ADCB_12_n, + input ADCB_10_p, input ADCB_10_n, + input ADCB_8_p, input ADCB_8_n, + input ADCB_6_p, input ADCB_6_n, + input ADCB_4_p, input ADCB_4_n, + input ADCB_2_p, input ADCB_2_n, + input ADCB_0_p, input ADCB_0_n, + + // DAC + output [15:0] DACA, + output [15:0] DACB, + input DAC_LOCK, // unused for now + + // DB IO Pins + inout [15:0] io_tx, + inout [15:0] io_rx, + // Misc, debug - output [4:0] leds, // LED4 is shared w/INIT_B - input [3:0] dipsw, - output [31:0] debug, + output [5:1] leds, // LED4 is shared w/INIT_B + input FPGA_RESET, output [1:0] debug_clk, - output uart_tx_o, - input uart_rx_i, - - // Expansion - input exp_pps_in_p, // Diff - input exp_pps_in_n, // Diff - output exp_pps_out_p, // Diff - output exp_pps_out_n, // Diff + output [31:0] debug, + output [3:1] TXD, input [3:1] RXD, // UARTs + //input [3:0] dipsw, // Forgot DIP Switches... - // GMII - // GMII-CTRL - input GMII_COL, - input GMII_CRS, + // Clock Gen Control + output [1:0] clk_en, + output [1:0] clk_sel, + input CLK_FUNC, // FIXME is an input to control the 9510 + input CLK_STATUS, + + inout SCL, inout SDA, // I2C + + // PPS + input PPS_IN, input PPS2_IN, + + // SPI + output SEN_CLK, output SCLK_CLK, output MOSI_CLK, input MISO_CLK, + output SEN_DAC, output SCLK_DAC, output MOSI_DAC, input MISO_DAC, + output SEN_ADC, output SCLK_ADC, output MOSI_ADC, + output SEN_TX_DB, output SCLK_TX_DB, output MOSI_TX_DB, input MISO_TX_DB, + output SEN_TX_DAC, output SCLK_TX_DAC, output MOSI_TX_DAC, + output SEN_TX_ADC, output SCLK_TX_ADC, output MOSI_TX_ADC, input MISO_TX_ADC, + output SEN_RX_DB, output SCLK_RX_DB, output MOSI_RX_DB, input MISO_RX_DB, + output SEN_RX_DAC, output SCLK_RX_DAC, output MOSI_RX_DAC, + output SEN_RX_ADC, output SCLK_RX_ADC, output MOSI_RX_ADC, input MISO_RX_ADC, + + // GigE PHY + input CLK_TO_MAC, - // GMII-TX output reg [7:0] GMII_TXD, output reg GMII_TX_EN, output reg GMII_TX_ER, output GMII_GTX_CLK, input GMII_TX_CLK, // 100mbps clk - // GMII-RX - input [7:0] GMII_RXD, input GMII_RX_CLK, + input [7:0] GMII_RXD, input GMII_RX_DV, input GMII_RX_ER, + input GMII_COL, + input GMII_CRS, - // GMII-Management + input PHY_INTn, // open drain inout MDIO, output MDC, - input PHY_INTn, // open drain output PHY_RESETn, - input PHY_CLK, // possibly use on-board osc - input clk_to_mac, - output eth_led, + output ETH_LED, + + input POR, + + // Expansion + input exp_time_in_p, input exp_time_in_n, // Diff + output exp_time_out_p, output exp_time_out_n, // Diff + input exp_user_in_p, input exp_user_in_n, // Diff + output exp_user_out_p, output exp_user_out_n, // Diff // SERDES output ser_enable, @@ -59,75 +106,18 @@ module u2plus input [15:0] ser_r, input ser_rklsb, input ser_rkmsb, - - // ADC - input [13:0] adc_a, - input adc_ovf_a, - output adc_oen_a, - output adc_pdn_a, - - input [13:0] adc_b, - input adc_ovf_b, - output adc_oen_b, - output adc_pdn_b, - - // DAC - output [15:0] dac_a, - output [15:0] dac_b, - input dac_lock, // unused for now - - // I2C - inout SCL, - inout SDA, - // Clock Gen Control - output [1:0] clk_en, - output [1:0] clk_sel, - input clk_func, // FIXME is an input to control the 9510 - input clk_status, - - // Clocks - input clk_fpga_p, // Diff - input clk_fpga_n, // Diff - input pps_in, - input POR, + // SRAM + inout [35:0] RAM_D, + output [20:0] RAM_A, + output [3:0] RAM_BWn, + output RAM_ZZ, + output RAM_LDn, + output RAM_OEn, + output RAM_WEn, + output RAM_CENn, + output RAM_CLK, - // AD9510 SPI - output sclk, - output sen_clk, - output sdi, - input sdo, - - // TX side SPI -- tx_db, tx_adc, tx_dac, 9777 - output sen_dac, - output sen_tx_db, - output sen_tx_adc, - output sen_tx_dac, - output mosi_tx, - input miso_dac, - input miso_tx_db, - input miso_tx_adc, - output sclk_tx, - - // RX side SPI - output sen_rx_db, - output sclk_rx_db, - input sdo_rx_db, - output sdi_rx_db, - - output sen_rx_adc, - output sclk_rx_adc, - input sdo_rx_adc, - output sdi_rx_adc, - - output sen_rx_dac, - output sclk_rx_dac, - output sdi_rx_dac, - - // DB IO Pins - inout [15:0] io_tx, - inout [15:0] io_rx, - // SPI Flash output flash_cs, output flash_clk, @@ -136,37 +126,49 @@ module u2plus ); // FPGA-specific pins connections - wire aux_clk = PHY_CLK; - wire clk_fpga, dsp_clk, clk_div, dcm_out, wb_clk, clock_ready; - IBUFGDS clk_fpga_pin (.O(clk_fpga),.I(clk_fpga_p),.IB(clk_fpga_n)); + IBUFGDS clk_fpga_pin (.O(clk_fpga),.I(CLK_FPGA_P),.IB(CLK_FPGA_N)); defparam clk_fpga_pin.IOSTANDARD = "LVPECL_25"; - wire exp_pps_in; - IBUFDS exp_pps_in_pin (.O(exp_pps_in),.I(exp_pps_in_p),.IB(exp_pps_in_n)); - defparam exp_pps_in_pin.IOSTANDARD = "LVDS_25"; + wire exp_time_in; + IBUFDS exp_time_in_pin (.O(exp_time_in),.I(exp_time_in_p),.IB(exp_time_in_n)); + defparam exp_time_in_pin.IOSTANDARD = "LVDS_25"; - wire exp_pps_out; - OBUFDS exp_pps_out_pin (.O(exp_pps_out_p),.OB(exp_pps_out_n),.I(exp_pps_out)); - defparam exp_pps_out_pin.IOSTANDARD = "LVDS_25"; - - reg [5:0] clock_ready_d; - always @(posedge aux_clk) - clock_ready_d[5:0] <= {clock_ready_d[4:0],clock_ready}; + wire exp_time_out; + OBUFDS exp_time_out_pin (.O(exp_time_out_p),.OB(exp_time_out_n),.I(exp_time_out)); + defparam exp_time_out_pin.IOSTANDARD = "LVDS_25"; - wire dcm_rst = ~&clock_ready_d & |clock_ready_d; - wire clk_muxed = clock_ready ? clk_fpga : aux_clk; + wire exp_user_in; + IBUFDS exp_user_in_pin (.O(exp_user_in),.I(exp_user_in_p),.IB(exp_user_in_n)); + defparam exp_user_in_pin.IOSTANDARD = "LVDS_25"; + + wire exp_user_out; + OBUFDS exp_user_out_pin (.O(exp_user_out_p),.OB(exp_user_out_n),.I(exp_user_out)); + defparam exp_user_out_pin.IOSTANDARD = "LVDS_25"; - wire adc_on_a, adc_on_b, adc_oe_a, adc_oe_b; - assign adc_oen_a = ~adc_oe_a; - assign adc_oen_b = ~adc_oe_b; - assign adc_pdn_a = ~adc_on_a; - assign adc_pdn_b = ~adc_on_b; + wire dcm_rst = 0; + wire [13:0] adc_a, adc_b; +`ifdef LVDS + capture_ddrlvds #(.WIDTH(14)) capture_ddrlvds + (.clk(dsp_clk), .ssclk_p(ADC_clkout_p), .ssclk_n(ADC_clkout_n), + .in_p({{ADCA_12_p, ADCA_10_p, ADCA_8_p, ADCA_6_p, ADCA_4_p, ADCA_2_p, ADCA_0_p}, + {ADCB_12_p, ADCB_10_p, ADCB_8_p, ADCB_6_p, ADCB_4_p, ADCB_2_p, ADCB_0_p}}), + .in_n({{ADCA_12_n, ADCA_10_n, ADCA_8_n, ADCA_6_n, ADCA_4_n, ADCA_2_n, ADCA_0_n}, + {ADCB_12_n, ADCB_10_n, ADCB_8_n, ADCB_6_n, ADCB_4_n, ADCB_2_n, ADCB_0_n}}), + .out({adc_a,adc_b})); +`else + assign adc_a = {ADCA_12_p,ADCA_12_n, ADCA_10_p,ADCA_10_n, ADCA_8_p,ADCA_8_n, ADCA_6_p,ADCA_6_n, + ADCA_4_p,ADCA_4_n, ADCA_2_p,ADCA_2_n, ADCA_0_p,ADCA_0_n }; + assign adc_b = {ADCB_12_p,ADCB_12_n, ADCB_10_p,ADCB_10_n, ADCB_8_p,ADCB_8_n, ADCB_6_p,ADCB_6_n, + ADCB_4_p,ADCB_4_n, ADCB_2_p,ADCB_2_n, ADCB_0_p,ADCB_0_n }; + +`endif // !`ifdef LVDS + // Handle Clocks DCM DCM_INST (.CLKFB(dsp_clk), - .CLKIN(clk_muxed), + .CLKIN(clk_fpga), .DSSEN(0), .PSCLK(0), .PSEN(0), @@ -207,23 +209,26 @@ module u2plus IOBUF sda_pin(.O(sda_pad_i), .IO(SDA), .I(sda_pad_o), .T(sda_pad_oen_o)); // LEDs are active low outputs - wire [4:0] leds_int; - assign leds = ~leds_int; // drive low to turn on leds + wire [5:0] leds_int; + assign {leds,ETH_LED} = ~leds_int; // drive low to turn on leds // SPI - wire miso, mosi, sclk_int; - assign {sclk,sdi} = (~sen_clk | ~sen_dac) ? {sclk_int,mosi} : 2'b0; - assign {sclk_tx_db,sdi_tx_db} = ~sen_tx_db ? {sclk_int,mosi} : 2'b0; - assign {sclk_tx_dac,sdi_tx_dac} = ~sen_tx_dac ? {sclk_int,mosi} : 2'b0; - assign {sclk_tx_adc,sdi_tx_adc} = ~sen_tx_adc ? {sclk_int,mosi} : 2'b0; - assign {sclk_rx_db,sdi_rx_db} = ~sen_rx_db ? {sclk_int,mosi} : 2'b0; - assign {sclk_rx_dac,sdi_rx_dac} = ~sen_rx_dac ? {sclk_int,mosi} : 2'b0; - assign {sclk_rx_adc,sdi_rx_adc} = ~sen_rx_adc ? {sclk_int,mosi} : 2'b0; - - assign miso = (~sen_clk & sdo) | (~sen_dac & sdo) | - (~sen_tx_db & sdo_tx_db) | (~sen_tx_adc & sdo_tx_adc) | - (~sen_rx_db & sdo_rx_db) | (~sen_rx_adc & sdo_rx_adc); + wire miso, mosi, sclk; + assign {SCLK_CLK,MOSI_CLK} = ~SEN_CLK ? {sclk,mosi} : 2'B0; + assign {SCLK_DAC,MOSI_DAC} = ~SEN_DAC ? {sclk,mosi} : 2'B0; + assign {SCLK_ADC,MOSI_ADC} = ~SEN_ADC ? {sclk,mosi} : 2'B0; + assign {SCLK_TX_DB,MOSI_TX_DB} = ~SEN_TX_DB ? {sclk,mosi} : 2'B0; + assign {SCLK_TX_DAC,MOSI_TX_DAC} = ~SEN_TX_DAC ? {sclk,mosi} : 2'B0; + assign {SCLK_TX_ADC,MOSI_TX_ADC} = ~SEN_TX_ADC ? {sclk,mosi} : 2'B0; + assign {SCLK_RX_DB,MOSI_RX_DB} = ~SEN_RX_DB ? {sclk,mosi} : 2'B0; + assign {SCLK_RX_DAC,MOSI_RX_DAC} = ~SEN_RX_DAC ? {sclk,mosi} : 2'B0; + assign {SCLK_RX_ADC,MOSI_RX_ADC} = ~SEN_RX_ADC ? {sclk,mosi} : 2'B0; + + assign miso = (~SEN_CLK & MISO_CLK) | (~SEN_DAC & MISO_DAC) | + (~SEN_TX_DB & MISO_TX_DB) | (~SEN_TX_ADC & MISO_TX_ADC) | + (~SEN_RX_DB & MISO_RX_DB) | (~SEN_RX_ADC & MISO_RX_ADC); + wire GMII_TX_EN_unreg, GMII_TX_ER_unreg; wire [7:0] GMII_TXD_unreg; wire GMII_GTX_CLK_int; @@ -289,8 +294,8 @@ module u2plus .leds (leds_int), .debug (debug[31:0]), .debug_clk (debug_clk[1:0]), - .exp_pps_in (exp_pps_in), - .exp_pps_out (exp_pps_out), + .exp_pps_in (exp_time_in), + .exp_pps_out (exp_time_out), .GMII_COL (GMII_COL), .GMII_CRS (GMII_CRS), .GMII_TXD (GMII_TXD_unreg[7:0]), @@ -306,7 +311,6 @@ module u2plus .MDC (MDC), .PHY_INTn (PHY_INTn), .PHY_RESETn (PHY_RESETn), - .PHY_CLK (PHY_CLK), .ser_enable (ser_enable), .ser_prbsen (ser_prbsen), .ser_loopen (ser_loopen), @@ -333,8 +337,8 @@ module u2plus .adc_ovf_b (adc_ovf_b), .adc_on_b (adc_on_b), .adc_oe_b (adc_oe_b), - .dac_a (dac_a[15:0]), - .dac_b (dac_b[15:0]), + .dac_a (DACA[15:0]), + .dac_b (DACB[15:0]), .scl_pad_i (scl_pad_i), .scl_pad_o (scl_pad_o), .scl_pad_oen_o (scl_pad_oen_o), @@ -367,11 +371,17 @@ module u2plus .RAM_OEn (RAM_OEn), .RAM_LDn (RAM_LDn), .uart_tx_o (uart_tx_o), - //.uart_rx_i (uart_rx_i), - .uart_rx_i (), + .uart_rx_i (uart_rx_i), .uart_baud_o (), .sim_mode (1'b0), .clock_divider (2) ); + + assign RAM_ZZ = 1; + assign flash_clk = 0; + assign flash_cs = 1; + assign flash_mosi = 0; + assign RAM_BWn = 4'b1111; + assign TXD = 3'b111; endmodule // u2plus -- cgit v1.2.3 From 1f8934a3b3750eecf8f7c99938f064db27c83790 Mon Sep 17 00:00:00 2001 From: Matt Ettus Date: Mon, 7 Jun 2010 12:12:44 -0700 Subject: works, leds on front count up. --- usrp2/top/safe_u2plus/safe_u2plus.v | 343 +----------------------------------- 1 file changed, 2 insertions(+), 341 deletions(-) diff --git a/usrp2/top/safe_u2plus/safe_u2plus.v b/usrp2/top/safe_u2plus/safe_u2plus.v index 38b276000..dca9688c5 100644 --- a/usrp2/top/safe_u2plus/safe_u2plus.v +++ b/usrp2/top/safe_u2plus/safe_u2plus.v @@ -4,130 +4,12 @@ module safe_u2plus ( input CLK_FPGA_P, input CLK_FPGA_N, // Diff - - // ADC - //input ADC_clkout_p, //input ADC_clkout_n, - //input ADCA_12_p, //input ADCA_12_n, - //input ADCA_10_p, //input ADCA_10_n, - //input ADCA_8_p, //input ADCA_8_n, - //input ADCA_6_p, //input ADCA_6_n, - //input ADCA_4_p, //input ADCA_4_n, - //input ADCA_2_p, //input ADCA_2_n, - //input ADCA_0_p, //input ADCA_0_n, - //input ADCB_12_p, //input ADCB_12_n, - //input ADCB_10_p, //input ADCB_10_n, - //input ADCB_8_p, //input ADCB_8_n, - //input ADCB_6_p, //input ADCB_6_n, - //input ADCB_4_p, //input ADCB_4_n, - //input ADCB_2_p, //input ADCB_2_n, - //input ADCB_0_p, //input ADCB_0_n, - - // DAC - //output [15:0] DACA, - //output [15:0] DACB, - //input DAC_LOCK, // unused for now - - // DB IO Pins - //inout [15:0] io_tx, - //inout [15:0] io_rx, - - // Misc, debug output [5:1] leds, // LED4 is shared w/INIT_B - //input FPGA_RESET, - //output [1:0] debug_clk, - //output [31:0] debug, - //output [3:1] TXD, //input [3:1] RXD, // UARTs - ////input [3:0] dipsw, // Forgot DIP Switches... - - // Clock Gen Control - //output [1:0] clk_en, - //output [1:0] clk_sel, - //input CLK_FUNC, // FIXME is an //input to control the 9510 - //input CLK_STATUS, - - //inout SCL, //inout SDA, // I2C - - // PPS - //input PPS_IN, //input PPS2_IN, - - // SPI - //output SEN_CLK, //output SCLK_CLK, //output MOSI_CLK, //input MISO_CLK, - //output SEN_DAC, //output SCLK_DAC, //output MOSI_DAC, //input MISO_DAC, - //output SEN_ADC, //output SCLK_ADC, //output MOSI_ADC, - //output SEN_TX_DB, //output SCLK_TX_DB, //output MOSI_TX_DB, //input MISO_TX_DB, - //output SEN_TX_DAC, //output SCLK_TX_DAC, //output MOSI_TX_DAC, - //output SEN_TX_ADC, //output SCLK_TX_ADC, //output MOSI_TX_ADC, //input MISO_TX_ADC, - //output SEN_RX_DB, //output SCLK_RX_DB, //output MOSI_RX_DB, //input MISO_RX_DB, - //output SEN_RX_DAC, //output SCLK_RX_DAC, //output MOSI_RX_DAC, - //output SEN_RX_ADC, //output SCLK_RX_ADC, //output MOSI_RX_ADC, //input MISO_RX_ADC, - - // GigE PHY - //input CLK_TO_MAC, - - //output reg [7:0] GMII_TXD, - //output reg GMII_TX_EN, - //output reg GMII_TX_ER, - //output GMII_GTX_CLK, - //input GMII_TX_CLK, // 100mbps clk - - //input GMII_RX_CLK, - //input [7:0] GMII_RXD, - //input GMII_RX_DV, - //input GMII_RX_ER, - //input GMII_COL, - //input GMII_CRS, - - //input PHY_INTn, // open drain - //inout MDIO, - //output MDC, - //output PHY_RESETn, output ETH_LED - - //input POR, - - // Expansion - //input exp_time_in_p, //input exp_time_in_n, // Diff - //output exp_time_out_p, //output exp_time_out_n, // Diff - //input exp_user_in_p, //input exp_user_in_n, // Diff - //output exp_user_out_p, //output exp_user_out_n, // Diff - - // SERDES - //output ser_enable, - //output ser_prbsen, - //output ser_loopen, - //output ser_rx_en, - - //output ser_tx_clk, - //output reg [15:0] ser_t, - //output reg ser_tklsb, - //output reg ser_tkmsb, - - //input ser_rx_clk, - //input [15:0] ser_r, - //input ser_rklsb, - //input ser_rkmsb, - - // SRAM - //inout [35:0] RAM_D, - //output [20:0] RAM_A, - //output [3:0] RAM_BWn, - //output RAM_ZZ, - //output RAM_LDn, - //output RAM_OEn, - //output RAM_WEn, - //output RAM_CENn, - //output RAM_CLK, - - // SPI Flash - //output flash_cs, - //output flash_clk, - //output flash_mosi, - //input flash_miso ); - // FPGA-specific pins connections - wire clk_fpga, dsp_clk, clk_div, dcm_out, wb_clk, clock_ready; - + wire clk_fpga; + IBUFGDS clk_fpga_pin (.O(clk_fpga),.I(CLK_FPGA_P),.IB(CLK_FPGA_N)); defparam clk_fpga_pin.IOSTANDARD = "LVPECL_25"; @@ -138,225 +20,4 @@ module safe_u2plus assign {leds,ETH_LED} = ~ctr[29:24]; - -/* - wire exp_time_in; - IBUFDS exp_time_in_pin (.O(exp_time_in),.I(exp_time_in_p),.IB(exp_time_in_n)); - defparam exp_time_in_pin.IOSTANDARD = "LVDS_25"; - - wire exp_time_out; - OBUFDS exp_time_out_pin (.O(exp_time_out_p),.OB(exp_time_out_n),.I(exp_time_out)); - defparam exp_time_out_pin.IOSTANDARD = "LVDS_25"; - - wire dcm_rst = 0; - - wire [13:0] adc_a, adc_b; - - capture_ddrlvds #(.WIDTH(14)) capture_ddrlvds - (.clk(dsp_clk), .ssclk_p(ADC_clkout_p), .ssclk_n(ADC_clkout_n), - .in_p({{ADCA_12_p, ADCA_10_p, ADCA_8_p, ADCA_6_p, ADCA_4_p, ADCA_2_p, ADCA_0_p}, - {ADCB_12_p, ADCB_10_p, ADCB_8_p, ADCB_6_p, ADCB_4_p, ADCB_2_p, ADCB_0_p}}), - .in_n({{ADCA_12_n, ADCA_10_n, ADCA_8_n, ADCA_6_n, ADCA_4_n, ADCA_2_n, ADCA_0_n}, - {ADCB_12_n, ADCB_10_n, ADCB_8_n, ADCB_6_n, ADCB_4_n, ADCB_2_n, ADCB_0_n}}), - .out({adc_a,adc_b})); - - // Handle Clocks - DCM DCM_INST (.CLKFB(dsp_clk), - .CLKIN(clk_fpga), - .DSSEN(0), - .PSCLK(0), - .PSEN(0), - .PSINCDEC(0), - .RST(dcm_rst), - .CLKDV(clk_div), - .CLKFX(), - .CLKFX180(), - .CLK0(dcm_out), - .CLK2X(), - .CLK2X180(), - .CLK90(), - .CLK180(), - .CLK270(), - .LOCKED(LOCKED_OUT), - .PSDONE(), - .STATUS()); - defparam DCM_INST.CLK_FEEDBACK = "1X"; - defparam DCM_INST.CLKDV_DIVIDE = 2.0; - defparam DCM_INST.CLKFX_DIVIDE = 1; - defparam DCM_INST.CLKFX_MULTIPLY = 4; - defparam DCM_INST.CLKIN_DIVIDE_BY_2 = "FALSE"; - defparam DCM_INST.CLKIN_PERIOD = 10.000; - defparam DCM_INST.CLKOUT_PHASE_SHIFT = "NONE"; - defparam DCM_INST.DESKEW_ADJUST = "SYSTEM_SYNCHRONOUS"; - defparam DCM_INST.DFS_FREQUENCY_MODE = "LOW"; - defparam DCM_INST.DLL_FREQUENCY_MODE = "LOW"; - defparam DCM_INST.DUTY_CYCLE_CORRECTION = "TRUE"; - defparam DCM_INST.FACTORY_JF = 16'h8080; - defparam DCM_INST.PHASE_SHIFT = 0; - defparam DCM_INST.STARTUP_WAIT = "FALSE"; - - BUFG dspclk_BUFG (.I(dcm_out), .O(dsp_clk)); - BUFG wbclk_BUFG (.I(clk_div), .O(wb_clk)); - - // I2C -- Don't use external transistors for open drain, the FPGA implements this - IOBUF scl_pin(.O(scl_pad_i), .IO(SCL), .I(scl_pad_o), .T(scl_pad_oen_o)); - IOBUF sda_pin(.O(sda_pad_i), .IO(SDA), .I(sda_pad_o), .T(sda_pad_oen_o)); - - // LEDs are active low outputs - wire [4:0] leds_int; - assign leds = ~leds_int; // drive low to turn on leds - - // SPI - wire miso, mosi, sclk; - - assign {SCLK_CLK,MOSI_CLK} = ~SEN_CLK ? {sclk,mosi} : 2'B0; - assign {SCLK_DAC,MOSI_DAC} = ~SEN_DAC ? {sclk,mosi} : 2'B0; - assign {SCLK_ADC,MOSI_ADC} = ~SEN_ADC ? {sclk,mosi} : 2'B0; - assign {SCLK_TX_DB,MOSI_TX_DB} = ~SEN_TX_DB ? {sclk,mosi} : 2'B0; - assign {SCLK_TX_DAC,MOSI_TX_DAC} = ~SEN_TX_DAC ? {sclk,mosi} : 2'B0; - assign {SCLK_TX_ADC,MOSI_TX_ADC} = ~SEN_TX_ADC ? {sclk,mosi} : 2'B0; - assign {SCLK_RX_DB,MOSI_RX_DB} = ~SEN_RX_DB ? {sclk,mosi} : 2'B0; - assign {SCLK_RX_DAC,MOSI_RX_DAC} = ~SEN_RX_DAC ? {sclk,mosi} : 2'B0; - assign {SCLK_RX_ADC,MOSI_RX_ADC} = ~SEN_RX_ADC ? {sclk,mosi} : 2'B0; - - assign miso = (~SEN_CLK & MISO_CLK) | (~SEN_DAC & MISO_DAC) | - (~SEN_TX_DB & MISO_TX_DB) | (~SEN_TX_ADC & MISO_TX_ADC) | - (~SEN_RX_DB & MISO_RX_DB) | (~SEN_RX_ADC & MISO_RX_ADC); - - wire GMII_TX_EN_unreg, GMII_TX_ER_unreg; - wire [7:0] GMII_TXD_unreg; - wire GMII_GTX_CLK_int; - - always @(posedge GMII_GTX_CLK_int) - begin - GMII_TX_EN <= GMII_TX_EN_unreg; - GMII_TX_ER <= GMII_TX_ER_unreg; - GMII_TXD <= GMII_TXD_unreg; - end - - OFDDRRSE OFDDRRSE_gmii_inst - (.Q(GMII_GTX_CLK), // Data output (connect directly to top-level port) - .C0(GMII_GTX_CLK_int), // 0 degree clock input - .C1(~GMII_GTX_CLK_int), // 180 degree clock input - .CE(1), // Clock enable input - .D0(0), // Posedge data input - .D1(1), // Negedge data input - .R(0), // Synchronous reset input - .S(0) // Synchronous preset input - ); - - wire ser_tklsb_unreg, ser_tkmsb_unreg; - wire [15:0] ser_t_unreg; - wire ser_tx_clk_int; - - always @(posedge ser_tx_clk_int) - begin - ser_tklsb <= ser_tklsb_unreg; - ser_tkmsb <= ser_tkmsb_unreg; - ser_t <= ser_t_unreg; - end - - assign ser_tx_clk = clk_fpga; - - reg [15:0] ser_r_int; - reg ser_rklsb_int, ser_rkmsb_int; - - always @(posedge ser_rx_clk) - begin - ser_r_int <= ser_r; - ser_rklsb_int <= ser_rklsb; - ser_rkmsb_int <= ser_rkmsb; - end - - u2_core u2_core(.dsp_clk (dsp_clk), - .wb_clk (wb_clk), - .clock_ready (clock_ready), - .clk_to_mac (clk_to_mac), - .pps_in (pps_in), - .leds (leds_int), - .debug (debug[31:0]), - .debug_clk (debug_clk[1:0]), - .exp_pps_in (exp_time_in), - .exp_pps_out (exp_time_out), - .GMII_COL (GMII_COL), - .GMII_CRS (GMII_CRS), - .GMII_TXD (GMII_TXD_unreg[7:0]), - .GMII_TX_EN (GMII_TX_EN_unreg), - .GMII_TX_ER (GMII_TX_ER_unreg), - .GMII_GTX_CLK (GMII_GTX_CLK_int), - .GMII_TX_CLK (GMII_TX_CLK), - .GMII_RXD (GMII_RXD[7:0]), - .GMII_RX_CLK (GMII_RX_CLK), - .GMII_RX_DV (GMII_RX_DV), - .GMII_RX_ER (GMII_RX_ER), - .MDIO (MDIO), - .MDC (MDC), - .PHY_INTn (PHY_INTn), - .PHY_RESETn (PHY_RESETn), - .ser_enable (ser_enable), - .ser_prbsen (ser_prbsen), - .ser_loopen (ser_loopen), - .ser_rx_en (ser_rx_en), - .ser_tx_clk (ser_tx_clk_int), - .ser_t (ser_t_unreg[15:0]), - .ser_tklsb (ser_tklsb_unreg), - .ser_tkmsb (ser_tkmsb_unreg), - .ser_rx_clk (ser_rx_clk), - .ser_r (ser_r_int[15:0]), - .ser_rklsb (ser_rklsb_int), - .ser_rkmsb (ser_rkmsb_int), - .cpld_start (cpld_start), - .cpld_mode (cpld_mode), - .cpld_done (cpld_done), - .cpld_din (cpld_din), - .cpld_clk (cpld_clk), - .cpld_detached (cpld_detached), - .adc_a (adc_a[13:0]), - .adc_ovf_a (adc_ovf_a), - .adc_on_a (adc_on_a), - .adc_oe_a (adc_oe_a), - .adc_b (adc_b[13:0]), - .adc_ovf_b (adc_ovf_b), - .adc_on_b (adc_on_b), - .adc_oe_b (adc_oe_b), - .dac_a (DACA[15:0]), - .dac_b (DACB[15:0]), - .scl_pad_i (scl_pad_i), - .scl_pad_o (scl_pad_o), - .scl_pad_oen_o (scl_pad_oen_o), - .sda_pad_i (sda_pad_i), - .sda_pad_o (sda_pad_o), - .sda_pad_oen_o (sda_pad_oen_o), - .clk_en (clk_en[1:0]), - .clk_sel (clk_sel[1:0]), - .clk_func (clk_func), - .clk_status (clk_status), - .sclk (sclk_int), - .mosi (mosi), - .miso (miso), - .sen_clk (sen_clk), - .sen_dac (sen_dac), - .sen_tx_db (sen_tx_db), - .sen_tx_adc (sen_tx_adc), - .sen_tx_dac (sen_tx_dac), - .sen_rx_db (sen_rx_db), - .sen_rx_adc (sen_rx_adc), - .sen_rx_dac (sen_rx_dac), - .io_tx (io_tx[15:0]), - .io_rx (io_rx[15:0]), - .RAM_D (RAM_D), - .RAM_A (RAM_A), - .RAM_CE1n (RAM_CE1n), - .RAM_CENn (RAM_CENn), - .RAM_CLK (RAM_CLK), - .RAM_WEn (RAM_WEn), - .RAM_OEn (RAM_OEn), - .RAM_LDn (RAM_LDn), - .uart_tx_o (uart_tx_o), - .uart_rx_i (uart_rx_i), - .uart_baud_o (), - .sim_mode (1'b0), - .clock_divider (2) - ); -*/ endmodule // safe_u2plus -- cgit v1.2.3 From b7e1b9ce77a0df46a5b336fda1e1972aa8199488 Mon Sep 17 00:00:00 2001 From: Matt Ettus Date: Mon, 7 Jun 2010 14:22:30 -0700 Subject: compiles now, added clock constraints --- usrp2/top/u2plus/Makefile | 28 +++++++++++++++++++++++++--- usrp2/top/u2plus/u2plus.ucf | 18 ++++++++++++++++++ 2 files changed, 43 insertions(+), 3 deletions(-) diff --git a/usrp2/top/u2plus/Makefile b/usrp2/top/u2plus/Makefile index 305b5b9e3..29928e03e 100644 --- a/usrp2/top/u2plus/Makefile +++ b/usrp2/top/u2plus/Makefile @@ -70,6 +70,7 @@ control_lib/ram_harv_cache.v \ control_lib/ram_loader.v \ control_lib/setting_reg.v \ control_lib/settings_bus.v \ +control_lib/settings_bus_crossclock.v \ control_lib/srl.v \ control_lib/system_control.v \ control_lib/wb_1master.v \ @@ -82,7 +83,18 @@ control_lib/sd_spi.v \ control_lib/sd_spi_wb.v \ control_lib/wb_bridge_16_32.v \ control_lib/reset_sync.v \ +control_lib/priority_enc.v \ +control_lib/pic.v \ +vrt/vita_rx_control.v \ +vrt/vita_rx_framer.v \ +vrt/vita_tx_control.v \ +vrt/vita_tx_deframer.v \ +udp/udp_wrapper.v \ +udp/fifo19_rxrealign.v \ +udp/prot_eng_tx.v \ +udp/add_onescomp.v \ simple_gemac/simple_gemac_wrapper.v \ +simple_gemac/simple_gemac_wrapper19.v \ simple_gemac/simple_gemac.v \ simple_gemac/simple_gemac_wb.v \ simple_gemac/simple_gemac_tx.v \ @@ -103,11 +115,15 @@ control_lib/newfifo/buffer_pool.v \ control_lib/newfifo/fifo_2clock.v \ control_lib/newfifo/fifo_2clock_cascade.v \ control_lib/newfifo/ll8_shortfifo.v \ -control_lib/newfifo/ll8_to_fifo36.v \ control_lib/newfifo/fifo_short.v \ control_lib/newfifo/fifo_long.v \ control_lib/newfifo/fifo_cascade.v \ control_lib/newfifo/fifo36_to_ll8.v \ +control_lib/newfifo/ll8_to_fifo36.v \ +control_lib/newfifo/fifo19_to_ll8.v \ +control_lib/newfifo/ll8_to_fifo19.v \ +control_lib/newfifo/fifo36_to_fifo19.v \ +control_lib/newfifo/fifo19_to_fifo36.v \ control_lib/longfifo.v \ control_lib/shortfifo.v \ control_lib/medfifo.v \ @@ -117,6 +133,10 @@ coregen/fifo_xlnx_512x36_2clk.v \ coregen/fifo_xlnx_512x36_2clk.xco \ coregen/fifo_xlnx_64x36_2clk.v \ coregen/fifo_xlnx_64x36_2clk.xco \ +coregen/fifo_xlnx_16x19_2clk.v \ +coregen/fifo_xlnx_16x19_2clk.xco \ +coregen/fifo_xlnx_16x40_2clk.v \ +coregen/fifo_xlnx_16x40_2clk.xco \ extram/wb_zbt16_b.v \ opencores/8b10b/decode_8b10b.v \ opencores/8b10b/encode_8b10b.v \ @@ -132,7 +152,6 @@ opencores/i2c/rtl/verilog/i2c_master_byte_ctrl.v \ opencores/i2c/rtl/verilog/i2c_master_defines.v \ opencores/i2c/rtl/verilog/i2c_master_top.v \ opencores/i2c/rtl/verilog/timescale.v \ -opencores/simple_pic/rtl/simple_pic.v \ opencores/spi/rtl/verilog/spi_clgen.v \ opencores/spi/rtl/verilog/spi_defines.v \ opencores/spi/rtl/verilog/spi_shift.v \ @@ -170,10 +189,13 @@ serdes/serdes_fc_rx.v \ serdes/serdes_fc_tx.v \ serdes/serdes_rx.v \ serdes/serdes_tx.v \ +timing/time_64bit.v \ +timing/time_compare.v \ timing/time_receiver.v \ timing/time_sender.v \ timing/time_sync.v \ timing/timer.v \ +timing/simple_timer.v \ top/u2_core/u2_core.v \ top/u2plus/capture_ddrlvds.v \ top/u2plus/u2plus.ucf \ @@ -183,7 +205,7 @@ top/u2plus/u2plus.v # Process Properties ################################################## export SYNTHESIZE_PROPERTIES := \ -"Number of Clock Buffers" 6 \ +"Number of Clock Buffers" 8 \ "Pack I/O Registers into IOBs" Yes \ "Optimization Effort" High \ "Optimize Instantiated Primitives" TRUE \ diff --git a/usrp2/top/u2plus/u2plus.ucf b/usrp2/top/u2plus/u2plus.ucf index 31404dda9..a3cd61906 100755 --- a/usrp2/top/u2plus/u2plus.ucf +++ b/usrp2/top/u2plus/u2plus.ucf @@ -399,3 +399,21 @@ NET "flash_cs" LOC = "AA7" ; #NET "unnamed_net11" LOC = "G7" ; # TDI #NET "unnamed_net10" LOC = "A25" ; # TCK #NET "unnamed_net20" LOC = "V20" ; # SUSPEND + + +NET "clk_to_mac" TNM_NET = "clk_to_mac"; +TIMESPEC "TS_clk_to_mac" = PERIOD "clk_to_mac" 8 ns HIGH 50 %; + +NET "clk_fpga_p" TNM_NET = "clk_fpga_p"; +TIMESPEC "TS_clk_fpga_p" = PERIOD "clk_fpga_p" 10 ns HIGH 50 %; + +NET "cpld_clk" TNM_NET = "cpld_clk"; +TIMESPEC "TS_cpld_clk" = PERIOD "cpld_clk" 40 ns HIGH 50 %; + +NET "GMII_RX_CLK" TNM_NET = "GMII_RX_CLK"; +TIMESPEC "TS_GMII_RX_CLK" = PERIOD "GMII_RX_CLK" 8 ns HIGH 50 %; + +NET "ser_rx_clk" TNM_NET = "ser_rx_clk"; +TIMESPEC "TS_ser_rx_clk" = PERIOD "ser_rx_clk" 10 ns HIGH 50 %; + +TIMESPEC "TS_clk_div_to_dsp_clk" = FROM "clk_div" TO "dcm_out" 10 ns; -- cgit v1.2.3 From 724af67a222aca01207cda9e0e4a8ce33217b7b8 Mon Sep 17 00:00:00 2001 From: Matt Ettus Date: Tue, 8 Jun 2010 14:16:22 -0700 Subject: debug pins --- usrp2/gpmc/fifo_watcher.v | 4 +++- usrp2/gpmc/gpmc_async.v | 7 +++++-- usrp2/top/u1e/u1e_core.v | 3 ++- 3 files changed, 10 insertions(+), 4 deletions(-) diff --git a/usrp2/gpmc/fifo_watcher.v b/usrp2/gpmc/fifo_watcher.v index 4bba142b0..fe4e35de3 100644 --- a/usrp2/gpmc/fifo_watcher.v +++ b/usrp2/gpmc/fifo_watcher.v @@ -4,13 +4,15 @@ module fifo_watcher (input clk, input reset, input clear, input src_rdy1, input dst_rdy1, input sof1, input eof1, input src_rdy2, input dst_rdy2, input sof2, input eof2, - output reg have_packet, output [15:0] length, output reg bus_error); + output reg have_packet, output [15:0] length, output reg bus_error, + output [31:0] debug); wire write = src_rdy1 & dst_rdy1 & eof1; wire read = src_rdy2 & dst_rdy2 & eof2; wire have_packet_int; reg [15:0] counter; wire [4:0] pkt_count; + assign debug = pkt_count; fifo_short #(.WIDTH(16)) frame_lengths (.clk(clk), .reset(reset), .clear(clear), diff --git a/usrp2/gpmc/gpmc_async.v b/usrp2/gpmc/gpmc_async.v index 1050cef7d..9f7b6dc4c 100644 --- a/usrp2/gpmc/gpmc_async.v +++ b/usrp2/gpmc/gpmc_async.v @@ -105,11 +105,14 @@ module gpmc_async .EM_D(EM_D_fifo), .EM_NCS(EM_NCS4), .EM_NOE(EM_NOE), .frame_len(rx_frame_len) ); + wire [31:0] pkt_count; + fifo_watcher fifo_watcher (.clk(fifo_clk), .reset(fifo_rst), .clear(0), .src_rdy1(rx18_src_rdy), .dst_rdy1(rx18_dst_rdy), .sof1(rx18_data[16]), .eof1(rx18_data[17]), .src_rdy2(rx18b_src_rdy), .dst_rdy2(rx18b_dst_rdy), .sof2(rx18b_data[16]), .eof2(rx18b_data[17]), - .have_packet(rx_have_data), .length(rx_frame_len), .bus_error(bus_error_rx) ); + .have_packet(rx_have_data), .length(rx_frame_len), .bus_error(bus_error_rx), + .debug(pkt_count)); // //////////////////////////////////////////// // Control path on CS6 @@ -122,6 +125,6 @@ module gpmc_async .wb_sel_o(wb_sel_o), .wb_cyc_o(wb_cyc_o), .wb_stb_o(wb_stb_o), .wb_we_o(wb_we_o), .wb_ack_i(wb_ack_i) ); - assign debug = 0; + assign debug = pkt_count; endmodule // gpmc_async diff --git a/usrp2/top/u1e/u1e_core.v b/usrp2/top/u1e/u1e_core.v index 6dae653ce..dde81df6b 100644 --- a/usrp2/top/u1e/u1e_core.v +++ b/usrp2/top/u1e/u1e_core.v @@ -430,6 +430,7 @@ module u1e_core assign debug_gpio_1 = { {rx_enable, rx_src_rdy, rx_dst_rdy, rx_src_rdy & ~rx_dst_rdy}, {tx_enable, tx_src_rdy, tx_dst_rdy, tx_dst_rdy & ~tx_src_rdy}, {rx_sof, rx_eof, rx_src_rdy, rx_dst_rdy, rx_data[33:32],2'b0}, - {3'b0, bus_error, misc_gpio[11:0]} }; + {2'b0, bus_error, debug_gpmc[4:0] }, + {misc_gpio[7:0]} }; endmodule // u1e_core -- cgit v1.2.3 From c28838a4ecfc1b3051bb46cf28114eb85a8845c7 Mon Sep 17 00:00:00 2001 From: Matt Ettus Date: Tue, 8 Jun 2010 14:18:27 -0700 Subject: ignores --- usrp2/top/.gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/usrp2/top/.gitignore b/usrp2/top/.gitignore index bf1b77066..0d90f1698 100644 --- a/usrp2/top/.gitignore +++ b/usrp2/top/.gitignore @@ -1 +1,2 @@ /*.sav +build* -- cgit v1.2.3 From fb704918b285a7d039cda27daf35f628442a7dca Mon Sep 17 00:00:00 2001 From: Matt Ettus Date: Wed, 9 Jun 2010 18:25:35 -0700 Subject: actually generates an image --- usrp2/top/u2plus/Makefile | 6 +++--- usrp2/top/u2plus/u2plus.ucf | 3 --- usrp2/top/u2plus/u2plus.v | 17 ++++++----------- 3 files changed, 9 insertions(+), 17 deletions(-) diff --git a/usrp2/top/u2plus/Makefile b/usrp2/top/u2plus/Makefile index 29928e03e..777a03662 100644 --- a/usrp2/top/u2plus/Makefile +++ b/usrp2/top/u2plus/Makefile @@ -29,7 +29,7 @@ ISE_HELPER := ../tcl/ise_helper.tcl ################################################## # Project Setup ################################################## -BUILD_DIR := build/ +BUILD_DIR := build$(ISE)/ export TOP_MODULE := u2plus export PROJ_FILE := $(BUILD_DIR)$(TOP_MODULE).ise @@ -172,7 +172,7 @@ sdr_lib/clip_reg.v \ sdr_lib/cordic.v \ sdr_lib/cordic_z24.v \ sdr_lib/cordic_stage.v \ -sdr_lib/dsp_core_rx.v \ +sdr_lib/dsp_core_rx_udp.v \ sdr_lib/dsp_core_tx.v \ sdr_lib/hb_dec.v \ sdr_lib/hb_interp.v \ @@ -196,7 +196,7 @@ timing/time_sender.v \ timing/time_sync.v \ timing/timer.v \ timing/simple_timer.v \ -top/u2_core/u2_core.v \ +top/u2plus/u2plus_core.v \ top/u2plus/capture_ddrlvds.v \ top/u2plus/u2plus.ucf \ top/u2plus/u2plus.v diff --git a/usrp2/top/u2plus/u2plus.ucf b/usrp2/top/u2plus/u2plus.ucf index a3cd61906..00838e19d 100755 --- a/usrp2/top/u2plus/u2plus.ucf +++ b/usrp2/top/u2plus/u2plus.ucf @@ -407,9 +407,6 @@ TIMESPEC "TS_clk_to_mac" = PERIOD "clk_to_mac" 8 ns HIGH 50 %; NET "clk_fpga_p" TNM_NET = "clk_fpga_p"; TIMESPEC "TS_clk_fpga_p" = PERIOD "clk_fpga_p" 10 ns HIGH 50 %; -NET "cpld_clk" TNM_NET = "cpld_clk"; -TIMESPEC "TS_cpld_clk" = PERIOD "cpld_clk" 40 ns HIGH 50 %; - NET "GMII_RX_CLK" TNM_NET = "GMII_RX_CLK"; TIMESPEC "TS_GMII_RX_CLK" = PERIOD "GMII_RX_CLK" 8 ns HIGH 50 %; diff --git a/usrp2/top/u2plus/u2plus.v b/usrp2/top/u2plus/u2plus.v index fef23af60..13c7a811f 100644 --- a/usrp2/top/u2plus/u2plus.v +++ b/usrp2/top/u2plus/u2plus.v @@ -286,7 +286,7 @@ module u2plus .S(0) // Synchronous preset input ); */ - u2_core u2_core(.dsp_clk (dsp_clk), + u2plus_core u2p_c(.dsp_clk (dsp_clk), .wb_clk (wb_clk), .clock_ready (clock_ready), .clk_to_mac (clk_to_mac), @@ -323,12 +323,6 @@ module u2plus .ser_r (ser_r_int[15:0]), .ser_rklsb (ser_rklsb_int), .ser_rkmsb (ser_rkmsb_int), - .cpld_start (cpld_start), - .cpld_mode (cpld_mode), - .cpld_done (cpld_done), - .cpld_din (cpld_din), - .cpld_clk (cpld_clk), - .cpld_detached (cpld_detached), .adc_a (adc_a[13:0]), .adc_ovf_a (adc_ovf_a), .adc_on_a (adc_on_a), @@ -374,13 +368,14 @@ module u2plus .uart_rx_i (uart_rx_i), .uart_baud_o (), .sim_mode (1'b0), - .clock_divider (2) + .clock_divider (2), + .spiflash_cs (flash_cs), + .spiflash_clk (flash_clk), + .spiflash_miso (flash_miso), + .spiflash_mosi (flash_mosi) ); assign RAM_ZZ = 1; - assign flash_clk = 0; - assign flash_cs = 1; - assign flash_mosi = 0; assign RAM_BWn = 4'b1111; assign TXD = 3'b111; -- cgit v1.2.3 From aefcb65e7788a9fbb50b443dbd3f248e2d462107 Mon Sep 17 00:00:00 2001 From: Matt Ettus Date: Thu, 10 Jun 2010 12:03:45 -0700 Subject: proper overrun, underrun connections, debug pins. --- usrp2/top/u1e/u1e_core.v | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/usrp2/top/u1e/u1e_core.v b/usrp2/top/u1e/u1e_core.v index dde81df6b..a6654906b 100644 --- a/usrp2/top/u1e/u1e_core.v +++ b/usrp2/top/u1e/u1e_core.v @@ -96,6 +96,9 @@ module u1e_core (.clk(wb_clk), .reset(wb_rst), .clear(0), .datain(tx_data), .src_rdy_i(tx_src_rdy), .dst_rdy_o(tx_dst_rdy), .dataout(rx_data), .src_rdy_o(rx_src_rdy), .dst_rdy_i(rx_dst_rdy)); + + assign tx_underrun = 0; + assign rx_overrun = 0; `endif // LOOPBACK `ifdef TIMED @@ -151,7 +154,7 @@ module u1e_core vita_rx_control #(.BASE(SR_RX_CTRL), .WIDTH(32)) vita_rx_control (.clk(wb_clk), .reset(wb_rst), .clear(0), .set_stb(set_stb),.set_addr(set_addr),.set_data(set_data), - .vita_time(vita_time), .overrun(overrun), + .vita_time(vita_time), .overrun(rx_overrun), .sample(sample_rx), .run(run_rx), .strobe(strobe_rx), .sample_fifo_o(rx1_data), .sample_fifo_dst_rdy_i(rx1_dst_rdy), .sample_fifo_src_rdy_o(rx1_src_rdy), .debug_rx(vrc_debug)); @@ -183,7 +186,7 @@ module u1e_core vita_tx_control #(.BASE(SR_TX_CTRL), .WIDTH(32)) vita_tx_control (.clk(wb_clk), .reset(wb_rst), .clear(0), .set_stb(set_stb),.set_addr(set_addr),.set_data(set_data), - .vita_time(vita_time),.underrun(underrun), + .vita_time(vita_time),.underrun(tx_underrun), .sample_fifo_i(tx1_data), .sample_fifo_src_rdy_i(tx1_src_rdy), .sample_fifo_dst_rdy_o(tx1_dst_rdy), .sample(sample_tx), .run(run_tx), .strobe(strobe_tx), .debug(debug_vtc) ); @@ -326,7 +329,6 @@ module u1e_core assign { debug_led[2],debug_led[0],debug_led[1] } = reg_leds; // LEDs are arranged funny on board assign { cgen_sync_b, cgen_ref_sel } = reg_cgen_ctrl; - //assign { rx_overrun, tx_underrun } = 0; // reg_test; assign s0_dat_miso = (s0_adr[6:0] == REG_LEDS) ? reg_leds : (s0_adr[6:0] == REG_SWITCHES) ? {5'b0,debug_pb[2:0],dip_sw[7:0]} : @@ -426,7 +428,9 @@ module u1e_core //assign debug = { phase[23:8], txsync, txblank, tx }; - assign debug_gpio_0 = { debug_gpmc }; + assign debug_gpio_0 = { {run_tx, strobe_tx, run_rx, strobe_rx, rx_i[11:0]}, + {rx1_src_rdy, rx1_dst_rdy, rx_src_rdy, rx_dst_rdy, rx_q[11:0]} }; + assign debug_gpio_1 = { {rx_enable, rx_src_rdy, rx_dst_rdy, rx_src_rdy & ~rx_dst_rdy}, {tx_enable, tx_src_rdy, tx_dst_rdy, tx_dst_rdy & ~tx_src_rdy}, {rx_sof, rx_eof, rx_src_rdy, rx_dst_rdy, rx_data[33:32],2'b0}, -- cgit v1.2.3 From 7d067d0109d4ee484a65caabcaf173082719f0d4 Mon Sep 17 00:00:00 2001 From: Matt Ettus Date: Thu, 10 Jun 2010 12:19:41 -0700 Subject: left something out of the sensitivity list. --- usrp2/control_lib/nsgpio16LE.v | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/usrp2/control_lib/nsgpio16LE.v b/usrp2/control_lib/nsgpio16LE.v index 514b003ce..8aef0c7ae 100644 --- a/usrp2/control_lib/nsgpio16LE.v +++ b/usrp2/control_lib/nsgpio16LE.v @@ -111,7 +111,7 @@ module nsgpio16LE integer n; reg [31:0] igpio; // temporary internal signal - always @(ctrl or line or debug_1 or debug_0 or atr or ddr) + always @(ctrl or line or debug_1 or debug_0 or atr or ddr or dbg) for(n=0;n<32;n=n+1) igpio[n] <= ddr[n] ? (dbg[n] ? (ctrl[n] ? debug_1[n] : debug_0[n]) : (ctrl[n] ? atr[n] : line[n]) ) -- cgit v1.2.3 From b38a1db20233e6d23ffce831c38d67a500e87b51 Mon Sep 17 00:00:00 2001 From: Matt Ettus Date: Thu, 10 Jun 2010 14:50:32 -0700 Subject: much bigger fifos --- usrp2/top/u1e/u1e_core.v | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/usrp2/top/u1e/u1e_core.v b/usrp2/top/u1e/u1e_core.v index a6654906b..8db995b17 100644 --- a/usrp2/top/u1e/u1e_core.v +++ b/usrp2/top/u1e/u1e_core.v @@ -25,8 +25,8 @@ module u1e_core input [11:0] misc_gpio, input pps_in ); - localparam TXFIFOSIZE = 11; - localparam RXFIFOSIZE = 11; + localparam TXFIFOSIZE = 13; + localparam RXFIFOSIZE = 13; localparam SR_RX_DSP = 0; // 5 regs localparam SR_RX_CTRL = 8; // 9 regs -- cgit v1.2.3 From a4b11332ab4f6a24bf4645c0b2770f9578a36f45 Mon Sep 17 00:00:00 2001 From: Matt Ettus Date: Thu, 10 Jun 2010 15:45:58 -0700 Subject: debug pins --- usrp2/top/u1e/u1e_core.v | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/usrp2/top/u1e/u1e_core.v b/usrp2/top/u1e/u1e_core.v index 8db995b17..64173ef2d 100644 --- a/usrp2/top/u1e/u1e_core.v +++ b/usrp2/top/u1e/u1e_core.v @@ -428,13 +428,16 @@ module u1e_core //assign debug = { phase[23:8], txsync, txblank, tx }; - assign debug_gpio_0 = { {run_tx, strobe_tx, run_rx, strobe_rx, rx_i[11:0]}, - {rx1_src_rdy, rx1_dst_rdy, rx_src_rdy, rx_dst_rdy, rx_q[11:0]} }; + assign debug_gpio_0 = { {run_tx, strobe_tx, run_rx, strobe_rx, tx_i[11:0]}, + {tx1_src_rdy, tx1_dst_rdy, tx_src_rdy, tx_dst_rdy, tx_q[11:0]} }; + + assign debug_gpio_1 = debug_vtd | debug_vtc; +/* assign debug_gpio_1 = { {rx_enable, rx_src_rdy, rx_dst_rdy, rx_src_rdy & ~rx_dst_rdy}, {tx_enable, tx_src_rdy, tx_dst_rdy, tx_dst_rdy & ~tx_src_rdy}, {rx_sof, rx_eof, rx_src_rdy, rx_dst_rdy, rx_data[33:32],2'b0}, {2'b0, bus_error, debug_gpmc[4:0] }, {misc_gpio[7:0]} }; - + */ endmodule // u1e_core -- cgit v1.2.3 From 6c7c7e964ea9142c79f826b4407635760e6f01c5 Mon Sep 17 00:00:00 2001 From: Matt Ettus Date: Mon, 14 Jun 2010 12:14:23 -0700 Subject: build using new build system --- usrp2/top/u2plus/Makefile | 239 +++++++--------------------------------------- 1 file changed, 34 insertions(+), 205 deletions(-) diff --git a/usrp2/top/u2plus/Makefile b/usrp2/top/u2plus/Makefile index 777a03662..23eb8908e 100644 --- a/usrp2/top/u2plus/Makefile +++ b/usrp2/top/u2plus/Makefile @@ -1,37 +1,29 @@ # # Copyright 2008 Ettus Research LLC -# -# 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. -# +# ################################################## -# xtclsh Shell and tcl Script Path +# Project Setup ################################################## -#XTCLSH := /opt/Xilinx/10.1/ISE/bin/lin/xtclsh -XTCLSH := xtclsh -ISE_HELPER := ../tcl/ise_helper.tcl +TOP_MODULE = u2plus +BUILD_DIR = $(abspath build$(ISE)) ################################################## -# Project Setup +# Include other makefiles ################################################## -BUILD_DIR := build$(ISE)/ -export TOP_MODULE := u2plus -export PROJ_FILE := $(BUILD_DIR)$(TOP_MODULE).ise + +include ../Makefile.common +include ../../fifo/Makefile.srcs +include ../../control_lib/Makefile.srcs +include ../../sdr_lib/Makefile.srcs +include ../../serdes/Makefile.srcs +include ../../simple_gemac/Makefile.srcs +include ../../timing/Makefile.srcs +include ../../opencores/Makefile.srcs +include ../../vrt/Makefile.srcs +include ../../udp/Makefile.srcs +include ../../coregen/Makefile.srcs +include ../../extram/Makefile.srcs ################################################## # Project Properties @@ -51,160 +43,20 @@ simulator "ISE Simulator (VHDL/Verilog)" \ ################################################## # Sources ################################################## -export SOURCE_ROOT := ../../../ -export SOURCES := \ -control_lib/CRC16_D16.v \ -control_lib/atr_controller.v \ -control_lib/bin2gray.v \ -control_lib/dcache.v \ -control_lib/decoder_3_8.v \ -control_lib/dpram32.v \ -control_lib/gray2bin.v \ -control_lib/gray_send.v \ -control_lib/icache.v \ -control_lib/mux4.v \ -control_lib/mux8.v \ -control_lib/nsgpio.v \ -control_lib/ram_2port.v \ -control_lib/ram_harv_cache.v \ -control_lib/ram_loader.v \ -control_lib/setting_reg.v \ -control_lib/settings_bus.v \ -control_lib/settings_bus_crossclock.v \ -control_lib/srl.v \ -control_lib/system_control.v \ -control_lib/wb_1master.v \ -control_lib/wb_readback_mux.v \ -control_lib/simple_uart.v \ -control_lib/simple_uart_tx.v \ -control_lib/simple_uart_rx.v \ -control_lib/oneshot_2clk.v \ -control_lib/sd_spi.v \ -control_lib/sd_spi_wb.v \ -control_lib/wb_bridge_16_32.v \ -control_lib/reset_sync.v \ -control_lib/priority_enc.v \ -control_lib/pic.v \ -vrt/vita_rx_control.v \ -vrt/vita_rx_framer.v \ -vrt/vita_tx_control.v \ -vrt/vita_tx_deframer.v \ -udp/udp_wrapper.v \ -udp/fifo19_rxrealign.v \ -udp/prot_eng_tx.v \ -udp/add_onescomp.v \ -simple_gemac/simple_gemac_wrapper.v \ -simple_gemac/simple_gemac_wrapper19.v \ -simple_gemac/simple_gemac.v \ -simple_gemac/simple_gemac_wb.v \ -simple_gemac/simple_gemac_tx.v \ -simple_gemac/simple_gemac_rx.v \ -simple_gemac/crc.v \ -simple_gemac/delay_line.v \ -simple_gemac/flow_ctrl_tx.v \ -simple_gemac/flow_ctrl_rx.v \ -simple_gemac/address_filter.v \ -simple_gemac/ll8_to_txmac.v \ -simple_gemac/rxmac_to_ll8.v \ -simple_gemac/miim/eth_miim.v \ -simple_gemac/miim/eth_clockgen.v \ -simple_gemac/miim/eth_outputcontrol.v \ -simple_gemac/miim/eth_shiftreg.v \ -control_lib/newfifo/buffer_int.v \ -control_lib/newfifo/buffer_pool.v \ -control_lib/newfifo/fifo_2clock.v \ -control_lib/newfifo/fifo_2clock_cascade.v \ -control_lib/newfifo/ll8_shortfifo.v \ -control_lib/newfifo/fifo_short.v \ -control_lib/newfifo/fifo_long.v \ -control_lib/newfifo/fifo_cascade.v \ -control_lib/newfifo/fifo36_to_ll8.v \ -control_lib/newfifo/ll8_to_fifo36.v \ -control_lib/newfifo/fifo19_to_ll8.v \ -control_lib/newfifo/ll8_to_fifo19.v \ -control_lib/newfifo/fifo36_to_fifo19.v \ -control_lib/newfifo/fifo19_to_fifo36.v \ -control_lib/longfifo.v \ -control_lib/shortfifo.v \ -control_lib/medfifo.v \ -coregen/fifo_xlnx_2Kx36_2clk.v \ -coregen/fifo_xlnx_2Kx36_2clk.xco \ -coregen/fifo_xlnx_512x36_2clk.v \ -coregen/fifo_xlnx_512x36_2clk.xco \ -coregen/fifo_xlnx_64x36_2clk.v \ -coregen/fifo_xlnx_64x36_2clk.xco \ -coregen/fifo_xlnx_16x19_2clk.v \ -coregen/fifo_xlnx_16x19_2clk.xco \ -coregen/fifo_xlnx_16x40_2clk.v \ -coregen/fifo_xlnx_16x40_2clk.xco \ -extram/wb_zbt16_b.v \ -opencores/8b10b/decode_8b10b.v \ -opencores/8b10b/encode_8b10b.v \ -opencores/aemb/rtl/verilog/aeMB_bpcu.v \ -opencores/aemb/rtl/verilog/aeMB_core_BE.v \ -opencores/aemb/rtl/verilog/aeMB_ctrl.v \ -opencores/aemb/rtl/verilog/aeMB_edk32.v \ -opencores/aemb/rtl/verilog/aeMB_ibuf.v \ -opencores/aemb/rtl/verilog/aeMB_regf.v \ -opencores/aemb/rtl/verilog/aeMB_xecu.v \ -opencores/i2c/rtl/verilog/i2c_master_bit_ctrl.v \ -opencores/i2c/rtl/verilog/i2c_master_byte_ctrl.v \ -opencores/i2c/rtl/verilog/i2c_master_defines.v \ -opencores/i2c/rtl/verilog/i2c_master_top.v \ -opencores/i2c/rtl/verilog/timescale.v \ -opencores/spi/rtl/verilog/spi_clgen.v \ -opencores/spi/rtl/verilog/spi_defines.v \ -opencores/spi/rtl/verilog/spi_shift.v \ -opencores/spi/rtl/verilog/spi_top.v \ -opencores/spi/rtl/verilog/timescale.v \ -sdr_lib/acc.v \ -sdr_lib/add2.v \ -sdr_lib/add2_and_round.v \ -sdr_lib/add2_and_round_reg.v \ -sdr_lib/add2_reg.v \ -sdr_lib/cic_dec_shifter.v \ -sdr_lib/cic_decim.v \ -sdr_lib/cic_int_shifter.v \ -sdr_lib/cic_interp.v \ -sdr_lib/cic_strober.v \ -sdr_lib/clip.v \ -sdr_lib/clip_reg.v \ -sdr_lib/cordic.v \ -sdr_lib/cordic_z24.v \ -sdr_lib/cordic_stage.v \ -sdr_lib/dsp_core_rx_udp.v \ -sdr_lib/dsp_core_tx.v \ -sdr_lib/hb_dec.v \ -sdr_lib/hb_interp.v \ -sdr_lib/round.v \ -sdr_lib/round_reg.v \ -sdr_lib/rx_control.v \ -sdr_lib/rx_dcoffset.v \ -sdr_lib/sign_extend.v \ -sdr_lib/small_hb_dec.v \ -sdr_lib/small_hb_int.v \ -sdr_lib/tx_control.v \ -serdes/serdes.v \ -serdes/serdes_fc_rx.v \ -serdes/serdes_fc_tx.v \ -serdes/serdes_rx.v \ -serdes/serdes_tx.v \ -timing/time_64bit.v \ -timing/time_compare.v \ -timing/time_receiver.v \ -timing/time_sender.v \ -timing/time_sync.v \ -timing/timer.v \ -timing/simple_timer.v \ -top/u2plus/u2plus_core.v \ -top/u2plus/capture_ddrlvds.v \ -top/u2plus/u2plus.ucf \ -top/u2plus/u2plus.v +TOP_SRCS = \ +u2plus_core.v \ +u2plus.v \ +u2plus.ucf + +SOURCES = $(abspath $(TOP_SRCS)) $(FIFO_SRCS) \ +$(CONTROL_LIB_SRCS) $(SDR_LIB_SRCS) $(SERDES_SRCS) \ +$(SIMPLE_GEMAC_SRCS) $(TIMING_SRCS) $(OPENCORES_SRCS) \ +$(VRT_SRCS) $(UDP_SRCS) $(COREGEN_SRCS) $(EXTRAM_SRCS) ################################################## # Process Properties ################################################## -export SYNTHESIZE_PROPERTIES := \ +SYNTHESIZE_PROPERTIES = \ "Number of Clock Buffers" 8 \ "Pack I/O Registers into IOBs" Yes \ "Optimization Effort" High \ @@ -214,10 +66,10 @@ export SYNTHESIZE_PROPERTIES := \ "Use Synchronous Reset" Auto \ "Use Synchronous Set" Auto -export TRANSLATE_PROPERTIES := \ +TRANSLATE_PROPERTIES = \ "Macro Search Path" "$(shell pwd)/../../coregen/" -export MAP_PROPERTIES := \ +MAP_PROPERTIES = \ "Allow Logic Optimization Across Hierarchy" TRUE \ "Map to Input Functions" 4 \ "Optimization Strategy (Cover Mode)" Speed \ @@ -228,41 +80,18 @@ export MAP_PROPERTIES := \ "Combinatorial Logic Optimization" TRUE \ "Register Duplication" TRUE -export PLACE_ROUTE_PROPERTIES := \ +PLACE_ROUTE_PROPERTIES = \ "Place & Route Effort Level (Overall)" High -export STATIC_TIMING_PROPERTIES := \ +STATIC_TIMING_PROPERTIES = \ "Number of Paths in Error/Verbose Report" 10 \ "Report Type" "Error Report" -export GEN_PROG_FILE_PROPERTIES := \ +GEN_PROG_FILE_PROPERTIES = \ "Configuration Rate" 6 \ "Create Binary Configuration File" TRUE \ "Done (Output Events)" 5 \ "Enable Bitstream Compression" TRUE \ "Enable Outputs (Output Events)" 6 -export SIM_MODEL_PROPERTIES := "" - -################################################## -# Make Options -################################################## -all: - @echo make proj, check, synth, bin, or clean - -proj: - PROCESS_RUN="" $(XTCLSH) $(ISE_HELPER) - -check: - PROCESS_RUN="Check Syntax" $(XTCLSH) $(ISE_HELPER) - -synth: - PROCESS_RUN="Synthesize - XST" $(XTCLSH) $(ISE_HELPER) - -bin: - PROCESS_RUN="Generate Programming File" $(XTCLSH) $(ISE_HELPER) - -clean: - rm -rf $(BUILD_DIR) - - +SIM_MODEL_PROPERTIES = "" -- cgit v1.2.3 From afbcdb33f31a90fbdec08ecef98c9680f2bfa940 Mon Sep 17 00:00:00 2001 From: Matt Ettus Date: Mon, 14 Jun 2010 12:15:58 -0700 Subject: new core for u2p, based on u2_core --- usrp2/top/u2plus/u2plus_core.v | 856 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 856 insertions(+) create mode 100644 usrp2/top/u2plus/u2plus_core.v diff --git a/usrp2/top/u2plus/u2plus_core.v b/usrp2/top/u2plus/u2plus_core.v new file mode 100644 index 000000000..d4b138c54 --- /dev/null +++ b/usrp2/top/u2plus/u2plus_core.v @@ -0,0 +1,856 @@ +// //////////////////////////////////////////////////////////////////////////////// +// Module Name: u2_core +// //////////////////////////////////////////////////////////////////////////////// + +module u2plus_core + #(parameter RAM_SIZE=32768) + (// Clocks + input dsp_clk, + input wb_clk, + output clock_ready, + input clk_to_mac, + input pps_in, + + // Misc, debug + output [7:0] leds, + output [31:0] debug, + output [1:0] debug_clk, + + // Expansion + input exp_pps_in, + output exp_pps_out, + + // GMII + // GMII-CTRL + input GMII_COL, + input GMII_CRS, + + // GMII-TX + output [7:0] GMII_TXD, + output GMII_TX_EN, + output GMII_TX_ER, + output GMII_GTX_CLK, + input GMII_TX_CLK, // 100mbps clk + + // GMII-RX + input [7:0] GMII_RXD, + input GMII_RX_CLK, + input GMII_RX_DV, + input GMII_RX_ER, + + // GMII-Management + inout MDIO, + output MDC, + input PHY_INTn, // open drain + output PHY_RESETn, + + // SERDES + output ser_enable, + output ser_prbsen, + output ser_loopen, + output ser_rx_en, + + output ser_tx_clk, + output [15:0] ser_t, + output ser_tklsb, + output ser_tkmsb, + + input ser_rx_clk, + input [15:0] ser_r, + input ser_rklsb, + input ser_rkmsb, + + input por, + output config_success, + + // ADC + input [13:0] adc_a, + input adc_ovf_a, + output adc_on_a, + output adc_oe_a, + + input [13:0] adc_b, + input adc_ovf_b, + output adc_on_b, + output adc_oe_b, + + // DAC + output [15:0] dac_a, + output [15:0] dac_b, + + // I2C + input scl_pad_i, + output scl_pad_o, + output scl_pad_oen_o, + input sda_pad_i, + output sda_pad_o, + output sda_pad_oen_o, + + // Clock Gen Control + output [1:0] clk_en, + output [1:0] clk_sel, + input clk_func, // FIXME is an input to control the 9510 + input clk_status, + + // Generic SPI + output sclk, + output mosi, + input miso, + output sen_clk, + output sen_dac, + output sen_tx_db, + output sen_tx_adc, + output sen_tx_dac, + output sen_rx_db, + output sen_rx_adc, + output sen_rx_dac, + + // GPIO to DBoards + inout [15:0] io_tx, + inout [15:0] io_rx, + + // External RAM + inout [35:0] RAM_D, + output [20:0] RAM_A, + output RAM_CE1n, + output RAM_CENn, + output RAM_CLK, + output RAM_WEn, + output RAM_OEn, + output RAM_LDn, + + // Debug stuff + output uart_tx_o, + input uart_rx_i, + output uart_baud_o, + input sim_mode, + input [3:0] clock_divider, + + output spiflash_cs, output spiflash_clk, input spiflash_miso, output spiflash_mosi + ); + + localparam SR_BUF_POOL = 64; // Uses 1 reg + localparam SR_UDP_SM = 96; // 64 regs + localparam SR_RX_DSP = 160; // 16 + localparam SR_RX_CTRL = 176; // 16 + localparam SR_TIME64 = 192; // 3 + localparam SR_SIMTIMER = 198; // 2 + localparam SR_TX_DSP = 208; // 16 + localparam SR_TX_CTRL = 224; // 16 + + // FIFO Sizes, 9 = 512 lines, 10 = 1024, 11 = 2048 + // all (most?) are 36 bits wide, so 9 is 1 BRAM, 10 is 2, 11 is 4 BRAMs + localparam DSP_TX_FIFOSIZE = 10; + localparam DSP_RX_FIFOSIZE = 10; + localparam ETH_TX_FIFOSIZE = 10; + localparam ETH_RX_FIFOSIZE = 11; + localparam SERDES_TX_FIFOSIZE = 9; + localparam SERDES_RX_FIFOSIZE = 9; // RX currently doesn't use a fifo? + + wire [7:0] set_addr, set_addr_dsp; + wire [31:0] set_data, set_data_dsp; + wire set_stb, set_stb_dsp; + + wire ram_loader_done; + wire ram_loader_rst, wb_rst, dsp_rst; + + wire [31:0] status, status_b0, status_b1, status_b2, status_b3, status_b4, status_b5, status_b6, status_b7; + wire bus_error, spi_int, i2c_int, pps_int, onetime_int, periodic_int, buffer_int; + wire proc_int, overrun, underrun, uart_tx_int, uart_rx_int; + + wire [31:0] debug_gpio_0, debug_gpio_1; + wire [31:0] atr_lines; + + wire [31:0] debug_rx, debug_mac, debug_mac0, debug_mac1, debug_tx_dsp, debug_txc, + debug_serdes0, debug_serdes1, debug_serdes2, debug_rx_dsp, debug_udp; + + wire [15:0] ser_rx_occ, ser_tx_occ, dsp_rx_occ, dsp_tx_occ, eth_rx_occ, eth_tx_occ, eth_rx_occ2; + wire ser_rx_full, ser_tx_full, dsp_rx_full, dsp_tx_full, eth_rx_full, eth_tx_full, eth_rx_full2; + wire ser_rx_empty, ser_tx_empty, dsp_rx_empty, dsp_tx_empty, eth_rx_empty, eth_tx_empty, eth_rx_empty2; + + wire serdes_link_up; + wire epoch; + wire [31:0] irq; + wire [63:0] vita_time; + + // /////////////////////////////////////////////////////////////////////////////////////////////// + // Wishbone Single Master INTERCON + localparam dw = 32; // Data bus width + localparam aw = 16; // Address bus width, for byte addressibility, 16 = 64K byte memory space + localparam sw = 4; // Select width -- 32-bit data bus with 8-bit granularity. + + wire [dw-1:0] m0_dat_o, m0_dat_i; + wire [dw-1:0] s0_dat_o, s1_dat_o, s0_dat_i, s1_dat_i, s2_dat_o, s3_dat_o, s2_dat_i, s3_dat_i, + s4_dat_o, s5_dat_o, s4_dat_i, s5_dat_i, s6_dat_o, s7_dat_o, s6_dat_i, s7_dat_i, + s8_dat_o, s9_dat_o, s8_dat_i, s9_dat_i, sa_dat_o, sa_dat_i, sb_dat_i, sb_dat_o, + sc_dat_i, sc_dat_o, sd_dat_i, sd_dat_o, se_dat_i, se_dat_o, sf_dat_i, sf_dat_o; + wire [aw-1:0] m0_adr,s0_adr,s1_adr,s2_adr,s3_adr,s4_adr,s5_adr,s6_adr,s7_adr,s8_adr,s9_adr,sa_adr,sb_adr,sc_adr, sd_adr, se_adr, sf_adr; + wire [sw-1:0] m0_sel,s0_sel,s1_sel,s2_sel,s3_sel,s4_sel,s5_sel,s6_sel,s7_sel,s8_sel,s9_sel,sa_sel,sb_sel,sc_sel, sd_sel, se_sel, sf_sel; + wire m0_ack,s0_ack,s1_ack,s2_ack,s3_ack,s4_ack,s5_ack,s6_ack,s7_ack,s8_ack,s9_ack,sa_ack,sb_ack,sc_ack, sd_ack, se_ack, sf_ack; + wire m0_stb,s0_stb,s1_stb,s2_stb,s3_stb,s4_stb,s5_stb,s6_stb,s7_stb,s8_stb,s9_stb,sa_stb,sb_stb,sc_stb, sd_stb, se_stb, sf_stb; + wire m0_cyc,s0_cyc,s1_cyc,s2_cyc,s3_cyc,s4_cyc,s5_cyc,s6_cyc,s7_cyc,s8_cyc,s9_cyc,sa_cyc,sb_cyc,sc_cyc, sd_cyc, se_cyc, sf_cyc; + wire m0_err, m0_rty; + wire m0_we,s0_we,s1_we,s2_we,s3_we,s4_we,s5_we,s6_we,s7_we,s8_we,s9_we,sa_we,sb_we,sc_we,sd_we,se_we,sf_we; + + wb_1master #(.decode_w(6), + .s0_addr(6'b0000_00),.s0_mask(6'b100000), + .s1_addr(6'b1000_00),.s1_mask(6'b110000), + .s2_addr(6'b1100_00),.s2_mask(6'b111111), + .s3_addr(6'b1100_01),.s3_mask(6'b111111), + .s4_addr(6'b1100_10),.s4_mask(6'b111111), + .s5_addr(6'b1100_11),.s5_mask(6'b111111), + .s6_addr(6'b1101_00),.s6_mask(6'b111111), + .s7_addr(6'b1101_01),.s7_mask(6'b111111), + .s8_addr(6'b1101_10),.s8_mask(6'b111111), + .s9_addr(6'b1101_11),.s9_mask(6'b111111), + .sa_addr(6'b1110_00),.sa_mask(6'b111111), + .sb_addr(6'b1110_01),.sb_mask(6'b111111), + .sc_addr(6'b1110_10),.sc_mask(6'b111111), + .sd_addr(6'b1110_11),.sd_mask(6'b111111), + .se_addr(6'b1111_00),.se_mask(6'b111111), + .sf_addr(6'b1111_01),.sf_mask(6'b111111), + .dw(dw),.aw(aw),.sw(sw)) wb_1master + (.clk_i(wb_clk),.rst_i(wb_rst), + .m0_dat_o(m0_dat_o),.m0_ack_o(m0_ack),.m0_err_o(m0_err),.m0_rty_o(m0_rty),.m0_dat_i(m0_dat_i), + .m0_adr_i(m0_adr),.m0_sel_i(m0_sel),.m0_we_i(m0_we),.m0_cyc_i(m0_cyc),.m0_stb_i(m0_stb), + .s0_dat_o(s0_dat_o),.s0_adr_o(s0_adr),.s0_sel_o(s0_sel),.s0_we_o (s0_we),.s0_cyc_o(s0_cyc),.s0_stb_o(s0_stb), + .s0_dat_i(s0_dat_i),.s0_ack_i(s0_ack),.s0_err_i(0),.s0_rty_i(0), + .s1_dat_o(s1_dat_o),.s1_adr_o(s1_adr),.s1_sel_o(s1_sel),.s1_we_o (s1_we),.s1_cyc_o(s1_cyc),.s1_stb_o(s1_stb), + .s1_dat_i(s1_dat_i),.s1_ack_i(s1_ack),.s1_err_i(0),.s1_rty_i(0), + .s2_dat_o(s2_dat_o),.s2_adr_o(s2_adr),.s2_sel_o(s2_sel),.s2_we_o (s2_we),.s2_cyc_o(s2_cyc),.s2_stb_o(s2_stb), + .s2_dat_i(s2_dat_i),.s2_ack_i(s2_ack),.s2_err_i(0),.s2_rty_i(0), + .s3_dat_o(s3_dat_o),.s3_adr_o(s3_adr),.s3_sel_o(s3_sel),.s3_we_o (s3_we),.s3_cyc_o(s3_cyc),.s3_stb_o(s3_stb), + .s3_dat_i(s3_dat_i),.s3_ack_i(s3_ack),.s3_err_i(0),.s3_rty_i(0), + .s4_dat_o(s4_dat_o),.s4_adr_o(s4_adr),.s4_sel_o(s4_sel),.s4_we_o (s4_we),.s4_cyc_o(s4_cyc),.s4_stb_o(s4_stb), + .s4_dat_i(s4_dat_i),.s4_ack_i(s4_ack),.s4_err_i(0),.s4_rty_i(0), + .s5_dat_o(s5_dat_o),.s5_adr_o(s5_adr),.s5_sel_o(s5_sel),.s5_we_o (s5_we),.s5_cyc_o(s5_cyc),.s5_stb_o(s5_stb), + .s5_dat_i(s5_dat_i),.s5_ack_i(s5_ack),.s5_err_i(0),.s5_rty_i(0), + .s6_dat_o(s6_dat_o),.s6_adr_o(s6_adr),.s6_sel_o(s6_sel),.s6_we_o (s6_we),.s6_cyc_o(s6_cyc),.s6_stb_o(s6_stb), + .s6_dat_i(s6_dat_i),.s6_ack_i(s6_ack),.s6_err_i(0),.s6_rty_i(0), + .s7_dat_o(s7_dat_o),.s7_adr_o(s7_adr),.s7_sel_o(s7_sel),.s7_we_o (s7_we),.s7_cyc_o(s7_cyc),.s7_stb_o(s7_stb), + .s7_dat_i(s7_dat_i),.s7_ack_i(s7_ack),.s7_err_i(0),.s7_rty_i(0), + .s8_dat_o(s8_dat_o),.s8_adr_o(s8_adr),.s8_sel_o(s8_sel),.s8_we_o (s8_we),.s8_cyc_o(s8_cyc),.s8_stb_o(s8_stb), + .s8_dat_i(s8_dat_i),.s8_ack_i(s8_ack),.s8_err_i(0),.s8_rty_i(0), + .s9_dat_o(s9_dat_o),.s9_adr_o(s9_adr),.s9_sel_o(s9_sel),.s9_we_o (s9_we),.s9_cyc_o(s9_cyc),.s9_stb_o(s9_stb), + .s9_dat_i(s9_dat_i),.s9_ack_i(s9_ack),.s9_err_i(0),.s9_rty_i(0), + .sa_dat_o(sa_dat_o),.sa_adr_o(sa_adr),.sa_sel_o(sa_sel),.sa_we_o(sa_we),.sa_cyc_o(sa_cyc),.sa_stb_o(sa_stb), + .sa_dat_i(sa_dat_i),.sa_ack_i(sa_ack),.sa_err_i(0),.sa_rty_i(0), + .sb_dat_o(sb_dat_o),.sb_adr_o(sb_adr),.sb_sel_o(sb_sel),.sb_we_o(sb_we),.sb_cyc_o(sb_cyc),.sb_stb_o(sb_stb), + .sb_dat_i(sb_dat_i),.sb_ack_i(sb_ack),.sb_err_i(0),.sb_rty_i(0), + .sc_dat_o(sc_dat_o),.sc_adr_o(sc_adr),.sc_sel_o(sc_sel),.sc_we_o(sc_we),.sc_cyc_o(sc_cyc),.sc_stb_o(sc_stb), + .sc_dat_i(sc_dat_i),.sc_ack_i(sc_ack),.sc_err_i(0),.sc_rty_i(0), + .sd_dat_o(sd_dat_o),.sd_adr_o(sd_adr),.sd_sel_o(sd_sel),.sd_we_o(sd_we),.sd_cyc_o(sd_cyc),.sd_stb_o(sd_stb), + .sd_dat_i(sd_dat_i),.sd_ack_i(sd_ack),.sd_err_i(0),.sd_rty_i(0), + .se_dat_o(se_dat_o),.se_adr_o(se_adr),.se_sel_o(se_sel),.se_we_o(se_we),.se_cyc_o(se_cyc),.se_stb_o(se_stb), + .se_dat_i(se_dat_i),.se_ack_i(se_ack),.se_err_i(0),.se_rty_i(0), + .sf_dat_o(sf_dat_o),.sf_adr_o(sf_adr),.sf_sel_o(sf_sel),.sf_we_o(sf_we),.sf_cyc_o(sf_cyc),.sf_stb_o(sf_stb), + .sf_dat_i(sf_dat_i),.sf_ack_i(sf_ack),.sf_err_i(0),.sf_rty_i(0)); + + ////////////////////////////////////////////////////////////////////////////////////////// + // Reset Controller + + // /////////////////////////////////////////////////////////////////// + // RAM Loader + + wire [31:0] ram_loader_dat, iwb_dat; + wire [15:0] ram_loader_adr, iwb_adr; + wire [3:0] ram_loader_sel; + wire ram_loader_stb, ram_loader_we, ram_loader_ack; + wire iwb_ack, iwb_stb; + ram_loader #(.AWIDTH(16),.RAM_SIZE(RAM_SIZE)) + ram_loader (.clk_i(wb_clk),.rst_i(ram_loader_rst), + // CPLD Interface + .cfg_clk_i(cpld_clk), + .cfg_data_i(cpld_din), + .start_o(cpld_start_int), + .mode_o(cpld_mode_int), + .done_o(cpld_done_int), + .detached_i(cpld_detached), + // Wishbone Interface + .wb_dat_o(ram_loader_dat),.wb_adr_o(ram_loader_adr), + .wb_stb_o(ram_loader_stb),.wb_cyc_o(),.wb_sel_o(ram_loader_sel), + .wb_we_o(ram_loader_we),.wb_ack_i(ram_loader_ack), + .ram_loader_done_o(ram_loader_done)); + + // ///////////////////////////////////////////////////////////////////////// + // Processor + aeMB_core_BE #(.ISIZ(16),.DSIZ(16),.MUL(0),.BSF(1)) + aeMB (.sys_clk_i(wb_clk), .sys_rst_i(wb_rst), + // Instruction Wishbone bus to I-RAM + .iwb_stb_o(iwb_stb),.iwb_adr_o(iwb_adr), + .iwb_dat_i(iwb_dat),.iwb_ack_i(iwb_ack), + // Data Wishbone bus to system bus fabric + .dwb_we_o(m0_we),.dwb_stb_o(m0_stb),.dwb_dat_o(m0_dat_i),.dwb_adr_o(m0_adr), + .dwb_dat_i(m0_dat_o),.dwb_ack_i(m0_ack),.dwb_sel_o(m0_sel),.dwb_cyc_o(m0_cyc), + // Interrupts and exceptions + .sys_int_i(proc_int),.sys_exc_i(bus_error) ); + + assign bus_error = m0_err | m0_rty; + + // ///////////////////////////////////////////////////////////////////////// + // Dual Ported RAM -- D-Port is Slave #0 on main Wishbone + // I-port connects directly to processor and ram loader + + wire flush_icache; + ram_harv_cache #(.AWIDTH(15),.RAM_SIZE(RAM_SIZE),.ICWIDTH(7),.DCWIDTH(6)) + sys_ram(.wb_clk_i(wb_clk),.wb_rst_i(wb_rst), + + .ram_loader_adr_i(ram_loader_adr[14:0]), .ram_loader_dat_i(ram_loader_dat), + .ram_loader_stb_i(ram_loader_stb), .ram_loader_sel_i(ram_loader_sel), + .ram_loader_we_i(ram_loader_we), .ram_loader_ack_o(ram_loader_ack), + .ram_loader_done_i(ram_loader_done), + + .iwb_adr_i(iwb_adr[14:0]), .iwb_stb_i(iwb_stb), + .iwb_dat_o(iwb_dat), .iwb_ack_o(iwb_ack), + + .dwb_adr_i(s0_adr[14:0]), .dwb_dat_i(s0_dat_o), .dwb_dat_o(s0_dat_i), + .dwb_we_i(s0_we), .dwb_ack_o(s0_ack), .dwb_stb_i(s0_stb), .dwb_sel_i(s0_sel), + .flush_icache(flush_icache)); + + setting_reg #(.my_addr(7)) sr_icache (.clk(wb_clk),.rst(wb_rst),.strobe(set_stb),.addr(set_addr), + .in(set_data),.out(),.changed(flush_icache)); + + // ///////////////////////////////////////////////////////////////////////// + // Buffer Pool, slave #1 + wire rd0_ready_i, rd0_ready_o; + wire rd1_ready_i, rd1_ready_o; + wire rd2_ready_i, rd2_ready_o; + wire rd3_ready_i, rd3_ready_o; + wire [3:0] rd0_flags, rd1_flags, rd2_flags, rd3_flags; + wire [31:0] rd0_dat, rd1_dat, rd2_dat, rd3_dat; + + wire wr0_ready_i, wr0_ready_o; + wire wr1_ready_i, wr1_ready_o; + wire wr2_ready_i, wr2_ready_o; + wire wr3_ready_i, wr3_ready_o; + wire [3:0] wr0_flags, wr1_flags, wr2_flags, wr3_flags; + wire [31:0] wr0_dat, wr1_dat, wr2_dat, wr3_dat; + + buffer_pool #(.BUF_SIZE(9), .SET_ADDR(SR_BUF_POOL)) buffer_pool + (.wb_clk_i(wb_clk),.wb_rst_i(wb_rst), + .wb_we_i(s1_we),.wb_stb_i(s1_stb),.wb_adr_i(s1_adr),.wb_dat_i(s1_dat_o), + .wb_dat_o(s1_dat_i),.wb_ack_o(s1_ack),.wb_err_o(),.wb_rty_o(), + + .stream_clk(dsp_clk), .stream_rst(dsp_rst), + .set_stb(set_stb_dsp), .set_addr(set_addr_dsp), .set_data(set_data_dsp), + .status(status),.sys_int_o(buffer_int), + + .s0(status_b0),.s1(status_b1),.s2(status_b2),.s3(status_b3), + .s4(status_b4),.s5(status_b5),.s6(status_b6),.s7(status_b7), + + // Write Interfaces + .wr0_data_i(wr0_dat), .wr0_flags_i(wr0_flags), .wr0_ready_i(wr0_ready_i), .wr0_ready_o(wr0_ready_o), + .wr1_data_i(wr1_dat), .wr1_flags_i(wr1_flags), .wr1_ready_i(wr1_ready_i), .wr1_ready_o(wr1_ready_o), + .wr2_data_i(wr2_dat), .wr2_flags_i(wr2_flags), .wr2_ready_i(wr2_ready_i), .wr2_ready_o(wr2_ready_o), + .wr3_data_i(wr3_dat), .wr3_flags_i(wr3_flags), .wr3_ready_i(wr3_ready_i), .wr3_ready_o(wr3_ready_o), + // Read Interfaces + .rd0_data_o(rd0_dat), .rd0_flags_o(rd0_flags), .rd0_ready_i(rd0_ready_i), .rd0_ready_o(rd0_ready_o), + .rd1_data_o(rd1_dat), .rd1_flags_o(rd1_flags), .rd1_ready_i(rd1_ready_i), .rd1_ready_o(rd1_ready_o), + .rd2_data_o(rd2_dat), .rd2_flags_o(rd2_flags), .rd2_ready_i(rd2_ready_i), .rd2_ready_o(rd2_ready_o), + .rd3_data_o(rd3_dat), .rd3_flags_o(rd3_flags), .rd3_ready_i(rd3_ready_i), .rd3_ready_o(rd3_ready_o) + ); + + wire [31:0] status_enc; + priority_enc priority_enc (.in({16'b0,status[15:0]}), .out(status_enc)); + + // ///////////////////////////////////////////////////////////////////////// + // SPI -- Slave #2 + spi_top shared_spi + (.wb_clk_i(wb_clk),.wb_rst_i(wb_rst),.wb_adr_i(s2_adr[4:0]),.wb_dat_i(s2_dat_o), + .wb_dat_o(s2_dat_i),.wb_sel_i(s2_sel),.wb_we_i(s2_we),.wb_stb_i(s2_stb), + .wb_cyc_i(s2_cyc),.wb_ack_o(s2_ack),.wb_err_o(),.wb_int_o(spi_int), + .ss_pad_o({sen_tx_db,sen_tx_adc,sen_tx_dac,sen_rx_db,sen_rx_adc,sen_rx_dac,sen_dac,sen_clk}), + .sclk_pad_o(sclk),.mosi_pad_o(mosi),.miso_pad_i(miso) ); + + // ///////////////////////////////////////////////////////////////////////// + // I2C -- Slave #3 + i2c_master_top #(.ARST_LVL(1)) + i2c (.wb_clk_i(wb_clk),.wb_rst_i(wb_rst),.arst_i(1'b0), + .wb_adr_i(s3_adr[4:2]),.wb_dat_i(s3_dat_o[7:0]),.wb_dat_o(s3_dat_i[7:0]), + .wb_we_i(s3_we),.wb_stb_i(s3_stb),.wb_cyc_i(s3_cyc), + .wb_ack_o(s3_ack),.wb_inta_o(i2c_int), + .scl_pad_i(scl_pad_i),.scl_pad_o(scl_pad_o),.scl_padoen_o(scl_pad_oen_o), + .sda_pad_i(sda_pad_i),.sda_pad_o(sda_pad_o),.sda_padoen_o(sda_pad_oen_o) ); + + assign s3_dat_i[31:8] = 24'd0; + + // ///////////////////////////////////////////////////////////////////////// + // GPIOs -- Slave #4 + nsgpio nsgpio(.clk_i(wb_clk),.rst_i(wb_rst), + .cyc_i(s4_cyc),.stb_i(s4_stb),.adr_i(s4_adr[3:0]),.we_i(s4_we), + .dat_i(s4_dat_o),.dat_o(s4_dat_i),.ack_o(s4_ack), + .atr(atr_lines),.debug_0(debug_gpio_0),.debug_1(debug_gpio_1), + .gpio( {io_tx,io_rx} ) ); + + // ///////////////////////////////////////////////////////////////////////// + // Buffer Pool Status -- Slave #5 + + reg [31:0] cycle_count; + always @(posedge wb_clk) + if(wb_rst) + cycle_count <= 0; + else + cycle_count <= cycle_count + 1; + + wb_readback_mux buff_pool_status + (.wb_clk_i(wb_clk), .wb_rst_i(wb_rst), .wb_stb_i(s5_stb), + .wb_adr_i(s5_adr), .wb_dat_o(s5_dat_i), .wb_ack_o(s5_ack), + + .word00(status_b0),.word01(status_b1),.word02(status_b2),.word03(status_b3), + .word04(status_b4),.word05(status_b5),.word06(status_b6),.word07(status_b7), + .word08(status),.word09({sim_mode,27'b0,clock_divider[3:0]}),.word10(vita_time[63:32]), + .word11(vita_time[31:0]),.word12(32'b0),.word13(irq),.word14(status_enc),.word15(cycle_count) + ); + + // ///////////////////////////////////////////////////////////////////////// + // Ethernet MAC Slave #6 + + wire [18:0] rx_f19_data, tx_f19_data; + wire rx_f19_src_rdy, rx_f19_dst_rdy, rx_f36_src_rdy, rx_f36_dst_rdy; + + simple_gemac_wrapper19 #(.RXFIFOSIZE(11), .TXFIFOSIZE(6)) simple_gemac_wrapper19 + (.clk125(clk_to_mac), .reset(wb_rst), + .GMII_GTX_CLK(GMII_GTX_CLK), .GMII_TX_EN(GMII_TX_EN), + .GMII_TX_ER(GMII_TX_ER), .GMII_TXD(GMII_TXD), + .GMII_RX_CLK(GMII_RX_CLK), .GMII_RX_DV(GMII_RX_DV), + .GMII_RX_ER(GMII_RX_ER), .GMII_RXD(GMII_RXD), + .sys_clk(dsp_clk), + .rx_f19_data(rx_f19_data), .rx_f19_src_rdy(rx_f19_src_rdy), .rx_f19_dst_rdy(rx_f19_dst_rdy), + .tx_f19_data(tx_f19_data), .tx_f19_src_rdy(tx_f19_src_rdy), .tx_f19_dst_rdy(tx_f19_dst_rdy), + .wb_clk(wb_clk), .wb_rst(wb_rst), .wb_stb(s6_stb), .wb_cyc(s6_cyc), .wb_ack(s6_ack), + .wb_we(s6_we), .wb_adr(s6_adr), .wb_dat_i(s6_dat_o), .wb_dat_o(s6_dat_i), + .mdio(MDIO), .mdc(MDC), + .debug(debug_mac)); + + wire [35:0] udp_tx_data, udp_rx_data; + wire udp_tx_src_rdy, udp_tx_dst_rdy, udp_rx_src_rdy, udp_rx_dst_rdy; + + udp_wrapper #(.BASE(SR_UDP_SM)) udp_wrapper + (.clk(dsp_clk), .reset(dsp_rst), .clear(0), + .set_stb(set_stb_dsp), .set_addr(set_addr_dsp), .set_data(set_data_dsp), + .rx_f19_data(rx_f19_data), .rx_f19_src_rdy_i(rx_f19_src_rdy), .rx_f19_dst_rdy_o(rx_f19_dst_rdy), + .tx_f19_data(tx_f19_data), .tx_f19_src_rdy_o(tx_f19_src_rdy), .tx_f19_dst_rdy_i(tx_f19_dst_rdy), + .rx_f36_data(udp_rx_data), .rx_f36_src_rdy_o(udp_rx_src_rdy), .rx_f36_dst_rdy_i(udp_rx_dst_rdy), + .tx_f36_data(udp_tx_data), .tx_f36_src_rdy_i(udp_tx_src_rdy), .tx_f36_dst_rdy_o(udp_tx_dst_rdy), + .debug(debug_udp) ); + + fifo_cascade #(.WIDTH(36), .SIZE(ETH_TX_FIFOSIZE)) tx_eth_fifo + (.clk(dsp_clk), .reset(dsp_rst), .clear(0), + .datain({rd2_flags,rd2_dat}), .src_rdy_i(rd2_ready_o), .dst_rdy_o(rd2_ready_i), + .dataout(udp_tx_data), .src_rdy_o(udp_tx_src_rdy), .dst_rdy_i(udp_tx_dst_rdy)); + + fifo_cascade #(.WIDTH(36), .SIZE(ETH_RX_FIFOSIZE)) rx_eth_fifo + (.clk(dsp_clk), .reset(dsp_rst), .clear(0), + .datain(udp_rx_data), .src_rdy_i(udp_rx_src_rdy), .dst_rdy_o(udp_rx_dst_rdy), + .dataout({wr2_flags,wr2_dat}), .src_rdy_o(wr2_ready_i), .dst_rdy_i(wr2_ready_o)); + + // ///////////////////////////////////////////////////////////////////////// + // Settings Bus -- Slave #7 + settings_bus settings_bus + (.wb_clk(wb_clk),.wb_rst(wb_rst),.wb_adr_i(s7_adr),.wb_dat_i(s7_dat_o), + .wb_stb_i(s7_stb),.wb_we_i(s7_we),.wb_ack_o(s7_ack), + .strobe(set_stb),.addr(set_addr),.data(set_data)); + + assign s7_dat_i = 32'd0; + + settings_bus_crossclock settings_bus_crossclock + (.clk_i(wb_clk), .rst_i(wb_rst), .set_stb_i(set_stb), .set_addr_i(set_addr), .set_data_i(set_data), + .clk_o(dsp_clk), .rst_o(dsp_rst), .set_stb_o(set_stb_dsp), .set_addr_o(set_addr_dsp), .set_data_o(set_data_dsp)); + + // Output control lines + wire [7:0] clock_outs, serdes_outs, adc_outs; + assign {clock_ready, clk_en[1:0], clk_sel[1:0]} = clock_outs[4:0]; + assign {ser_enable, ser_prbsen, ser_loopen, ser_rx_en} = serdes_outs[3:0]; + assign {adc_oe_a, adc_on_a, adc_oe_b, adc_on_b } = adc_outs[3:0]; + + wire phy_reset; + assign PHY_RESETn = ~phy_reset; + + setting_reg #(.my_addr(0),.width(8)) sr_clk (.clk(wb_clk),.rst(wb_rst),.strobe(s7_ack),.addr(set_addr), + .in(set_data),.out(clock_outs),.changed()); + setting_reg #(.my_addr(1),.width(8)) sr_ser (.clk(wb_clk),.rst(wb_rst),.strobe(set_stb),.addr(set_addr), + .in(set_data),.out(serdes_outs),.changed()); + setting_reg #(.my_addr(2),.width(8)) sr_adc (.clk(wb_clk),.rst(wb_rst),.strobe(set_stb),.addr(set_addr), + .in(set_data),.out(adc_outs),.changed()); + setting_reg #(.my_addr(4),.width(1)) sr_phy (.clk(wb_clk),.rst(wb_rst),.strobe(set_stb),.addr(set_addr), + .in(set_data),.out(phy_reset),.changed()); + + // ///////////////////////////////////////////////////////////////////////// + // LEDS + // register 8 determines whether leds are controlled by SW or not + // 1 = controlled by HW, 0 = by SW + // In Rev3 there are only 6 leds, and the highest one is on the ETH connector + + wire [7:0] led_src, led_sw; + wire [7:0] led_hw = {clk_status,serdes_link_up}; + + setting_reg #(.my_addr(3),.width(8)) sr_led (.clk(wb_clk),.rst(wb_rst),.strobe(set_stb),.addr(set_addr), + .in(set_data),.out(led_sw),.changed()); + setting_reg #(.my_addr(8),.width(8)) sr_led_src (.clk(wb_clk),.rst(wb_rst),.strobe(set_stb),.addr(set_addr), + .in(set_data),.out(led_src),.changed()); + + assign leds = (led_src & led_hw) | (~led_src & led_sw); + + // ///////////////////////////////////////////////////////////////////////// + // Interrupt Controller, Slave #8 + + assign irq= {{8'b0}, + {8'b0}, + {3'b0, periodic_int, clk_status, serdes_link_up, uart_tx_int, uart_rx_int}, + {pps_int,overrun,underrun,PHY_INTn,i2c_int,spi_int,onetime_int,buffer_int}}; + + pic pic(.clk_i(wb_clk),.rst_i(wb_rst),.cyc_i(s8_cyc),.stb_i(s8_stb),.adr_i(s8_adr[4:2]), + .we_i(s8_we),.dat_i(s8_dat_o),.dat_o(s8_dat_i),.ack_o(s8_ack),.int_o(proc_int), + .irq(irq) ); + + // ///////////////////////////////////////////////////////////////////////// + // Master Timer, Slave #9 + + // No longer used, replaced with simple_timer below + /* + wire [31:0] master_time; + timer timer + (.wb_clk_i(wb_clk),.rst_i(wb_rst), + .cyc_i(s9_cyc),.stb_i(s9_stb),.adr_i(s9_adr[4:2]), + .we_i(s9_we),.dat_i(s9_dat_o),.dat_o(s9_dat_i),.ack_o(s9_ack), + .sys_clk_i(dsp_clk),.master_time_i(master_time),.int_o(timer_int) ); + */ + assign s9_ack = 0; + + // ///////////////////////////////////////////////////////////////////////// + // Simple Timer interrupts + + simple_timer #(.BASE(SR_SIMTIMER)) simple_timer + (.clk(wb_clk), .reset(wb_rst), + .set_stb(set_stb), .set_addr(set_addr), .set_data(set_data), + .onetime_int(onetime_int), .periodic_int(periodic_int)); + + // ///////////////////////////////////////////////////////////////////////// + // UART, Slave #10 + + simple_uart #(.TXDEPTH(3),.RXDEPTH(3)) uart // depth of 3 is 128 entries + (.clk_i(wb_clk),.rst_i(wb_rst), + .we_i(sa_we),.stb_i(sa_stb),.cyc_i(sa_cyc),.ack_o(sa_ack), + .adr_i(sa_adr[4:2]),.dat_i(sa_dat_o),.dat_o(sa_dat_i), + .rx_int_o(uart_rx_int),.tx_int_o(uart_tx_int), + .tx_o(uart_tx_o),.rx_i(uart_rx_i),.baud_o(uart_baud_o)); + + // ///////////////////////////////////////////////////////////////////////// + // ATR Controller, Slave #11 + + wire run_rx, run_tx; + reg run_rx_d1; + always @(posedge dsp_clk) + run_rx_d1 <= run_rx; + + atr_controller atr_controller + (.clk_i(wb_clk),.rst_i(wb_rst), + .adr_i(sb_adr[5:0]),.sel_i(sb_sel),.dat_i(sb_dat_o),.dat_o(sb_dat_i), + .we_i(sb_we),.stb_i(sb_stb),.cyc_i(sb_cyc),.ack_o(sb_ack), + .run_rx(run_rx_d1),.run_tx(run_tx),.ctrl_lines(atr_lines) ); + + // ////////////////////////////////////////////////////////////////////////// + // Time Sync, Slave #12 + + // No longer used, see time_64bit. Still need to handle mimo time, though + assign sc_ack = 0; + + // ///////////////////////////////////////////////////////////////////////// + // SD Card Reader / Writer, Slave #13 + + // Not used anymore + assign sd_ack = 0; + + // ///////////////////////////////////////////////////////////////////////// + // DSP RX + wire [31:0] sample_rx, sample_tx; + wire strobe_rx, strobe_tx; + wire rx_dst_rdy, rx_src_rdy, rx1_dst_rdy, rx1_src_rdy; + wire [99:0] rx_data; + wire [35:0] rx1_data; + + dsp_core_rx #(.BASE(SR_RX_DSP)) dsp_core_rx + (.clk(dsp_clk),.rst(dsp_rst), + .set_stb(set_stb_dsp),.set_addr(set_addr_dsp),.set_data(set_data_dsp), + .adc_a(adc_a),.adc_ovf_a(adc_ovf_a),.adc_b(adc_b),.adc_ovf_b(adc_ovf_b), + .sample(sample_rx), .run(run_rx_d1), .strobe(strobe_rx), + .debug(debug_rx_dsp) ); + + wire [31:0] vrc_debug; + + vita_rx_control #(.BASE(SR_RX_CTRL), .WIDTH(32)) vita_rx_control + (.clk(dsp_clk), .reset(dsp_rst), .clear(0), + .set_stb(set_stb_dsp),.set_addr(set_addr_dsp),.set_data(set_data_dsp), + .vita_time(vita_time), .overrun(overrun), + .sample(sample_rx), .run(run_rx), .strobe(strobe_rx), + .sample_fifo_o(rx_data), .sample_fifo_dst_rdy_i(rx_dst_rdy), .sample_fifo_src_rdy_o(rx_src_rdy), + .debug_rx(vrc_debug)); + + wire [3:0] vita_state; + + vita_rx_framer #(.BASE(SR_RX_CTRL), .MAXCHAN(1)) vita_rx_framer + (.clk(dsp_clk), .reset(dsp_rst), .clear(0), + .set_stb(set_stb_dsp),.set_addr(set_addr_dsp),.set_data(set_data_dsp), + .sample_fifo_i(rx_data), .sample_fifo_dst_rdy_o(rx_dst_rdy), .sample_fifo_src_rdy_i(rx_src_rdy), + .data_o(rx1_data), .dst_rdy_i(rx1_dst_rdy), .src_rdy_o(rx1_src_rdy), + .fifo_occupied(), .fifo_full(), .fifo_empty(), + .debug_rx(vita_state) ); + + fifo_cascade #(.WIDTH(36), .SIZE(DSP_RX_FIFOSIZE)) rx_fifo_cascade + (.clk(dsp_clk), .reset(dsp_rst), .clear(0), + .datain(rx1_data), .src_rdy_i(rx1_src_rdy), .dst_rdy_o(rx1_dst_rdy), + .dataout({wr1_flags,wr1_dat}), .src_rdy_o(wr1_ready_i), .dst_rdy_i(wr1_ready_o)); + + // /////////////////////////////////////////////////////////////////////////////////// + // DSP TX + + wire [35:0] tx_data; + wire [99:0] tx1_data; + wire tx_src_rdy, tx_dst_rdy, tx1_src_rdy, tx1_dst_rdy; + + wire [31:0] debug_vtc, debug_vtd, debug_vt; + + fifo_cascade #(.WIDTH(36), .SIZE(DSP_TX_FIFOSIZE)) tx_fifo_cascade + (.clk(dsp_clk), .reset(dsp_rst), .clear(0), + .datain({rd1_flags,rd1_dat}), .src_rdy_i(rd1_ready_o), .dst_rdy_o(rd1_ready_i), + .dataout(tx_data), .src_rdy_o(tx_src_rdy), .dst_rdy_i(tx_dst_rdy) ); + + vita_tx_deframer #(.BASE(SR_TX_CTRL), .MAXCHAN(1)) vita_tx_deframer + (.clk(dsp_clk), .reset(dsp_rst), .clear(0), + .set_stb(set_stb_dsp),.set_addr(set_addr_dsp),.set_data(set_data_dsp), + .data_i(tx_data), .src_rdy_i(tx_src_rdy), .dst_rdy_o(tx_dst_rdy), + .sample_fifo_o(tx1_data), .sample_fifo_src_rdy_o(tx1_src_rdy), .sample_fifo_dst_rdy_i(tx1_dst_rdy), + .debug(debug_vtd) ); + + vita_tx_control #(.BASE(SR_TX_CTRL), .WIDTH(32)) vita_tx_control + (.clk(dsp_clk), .reset(dsp_rst), .clear(0), + .set_stb(set_stb_dsp),.set_addr(set_addr_dsp),.set_data(set_data_dsp), + .vita_time(vita_time),.underrun(underrun), + .sample_fifo_i(tx1_data), .sample_fifo_src_rdy_i(tx1_src_rdy), .sample_fifo_dst_rdy_o(tx1_dst_rdy), + .sample(sample_tx), .run(run_tx), .strobe(strobe_tx), + .debug(debug_vtc) ); + + assign debug_vt = debug_vtc | debug_vtd; + + dsp_core_tx #(.BASE(SR_TX_DSP)) dsp_core_tx + (.clk(dsp_clk),.rst(dsp_rst), + .set_stb(set_stb_dsp),.set_addr(set_addr_dsp),.set_data(set_data_dsp), + .sample(sample_tx), .run(run_tx), .strobe(strobe_tx), + .dac_a(dac_a),.dac_b(dac_b), + .debug(debug_tx_dsp) ); + + assign dsp_rst = wb_rst; + + // /////////////////////////////////////////////////////////////////////////////////// + // SERDES + + serdes #(.TXFIFOSIZE(SERDES_TX_FIFOSIZE),.RXFIFOSIZE(SERDES_RX_FIFOSIZE)) serdes + (.clk(dsp_clk),.rst(dsp_rst), + .ser_tx_clk(ser_tx_clk),.ser_t(ser_t),.ser_tklsb(ser_tklsb),.ser_tkmsb(ser_tkmsb), + .rd_dat_i(rd0_dat),.rd_flags_i(rd0_flags),.rd_ready_o(rd0_ready_i),.rd_ready_i(rd0_ready_o), + .ser_rx_clk(ser_rx_clk),.ser_r(ser_r),.ser_rklsb(ser_rklsb),.ser_rkmsb(ser_rkmsb), + .wr_dat_o(wr0_dat),.wr_flags_o(wr0_flags),.wr_ready_o(wr0_ready_i),.wr_ready_i(wr0_ready_o), + .tx_occupied(ser_tx_occ),.tx_full(ser_tx_full),.tx_empty(ser_tx_empty), + .rx_occupied(ser_rx_occ),.rx_full(ser_rx_full),.rx_empty(ser_rx_empty), + .serdes_link_up(serdes_link_up),.debug0(debug_serdes0), .debug1(debug_serdes1) ); + + // /////////////////////////////////////////////////////////////////////////////////// + // External RAM Interface + + /* + localparam PAGE_SIZE = 10; // PAGE SIZE is in bytes, 10 = 1024 bytes + + wire [15:0] bus2ram, ram2bus; + wire [15:0] bridge_adr; + wire [1:0] bridge_sel; + wire bridge_stb, bridge_cyc, bridge_we, bridge_ack; + + wire [19:0] page; + wire [19:0] wb_ram_adr = {page[19:PAGE_SIZE],bridge_adr[PAGE_SIZE-1:0]}; + setting_reg #(.my_addr(6),.width(20)) sr_page (.clk(wb_clk),.rst(wb_rst),.strobe(set_stb),.addr(set_addr), + .in(set_data),.out(page),.changed()); + + wb_bridge_16_32 bridge + (.wb_clk(wb_clk),.wb_rst(wb_rst), + .A_cyc_i(se_cyc),.A_stb_i(se_stb),.A_we_i(se_we),.A_sel_i(se_sel), + .A_adr_i(se_adr),.A_dat_i(se_dat_o),.A_dat_o(se_dat_i),.A_ack_o(se_ack), + .B_cyc_o(bridge_cyc),.B_stb_o(bridge_stb),.B_we_o(bridge_we),.B_sel_o(bridge_sel), + .B_adr_o(bridge_adr),.B_dat_o(bus2ram),.B_dat_i(ram2bus),.B_ack_i(bridge_ack)); + + wb_zbt16_b wb_zbt16_b + (.clk(wb_clk),.rst(wb_rst), + .wb_adr_i(wb_ram_adr),.wb_dat_i(bus2ram),.wb_dat_o(ram2bus),.wb_sel_i(bridge_sel), + .wb_cyc_i(bridge_cyc),.wb_stb_i(bridge_stb),.wb_ack_o(bridge_ack),.wb_we_i(bridge_we), + .sram_clk(RAM_CLK),.sram_a(RAM_A),.sram_d(RAM_D[15:0]),.sram_we(RAM_WEn), + .sram_bw(),.sram_adv(RAM_LDn),.sram_ce(RAM_CENn),.sram_oe(RAM_OEn), + .sram_mode(),.sram_zz() ); + + assign RAM_CE1n = 0; + assign RAM_D[17:16] = 2'bzz; + */ + + // ///////////////////////////////////////////////////////////////////////// + // SPI for Flash -- Slave #2 + spi_top flash_spi + (.wb_clk_i(wb_clk),.wb_rst_i(wb_rst),.wb_adr_i(sf_adr[4:0]),.wb_dat_i(sf_dat_o), + .wb_dat_o(sf_dat_i),.wb_sel_i(sf_sel),.wb_we_i(sf_we),.wb_stb_i(sf_stb), + .wb_cyc_i(sf_cyc),.wb_ack_o(sf_ack),.wb_err_o(sf_err),.wb_int_o(spiflash_int), + .ss_pad_o(spiflash_cs), + .sclk_pad_o(spiflash_clk),.mosi_pad_o(spiflash_mosi),.miso_pad_i(spiflash_miso) ); + + // ///////////////////////////////////////////////////////////////////////// + // VITA Timing + + time_64bit #(.TICKS_PER_SEC(32'd100000000),.BASE(SR_TIME64)) time_64bit + (.clk(dsp_clk), .rst(dsp_rst), .set_stb(set_stb_dsp), .set_addr(set_addr_dsp), .set_data(set_data_dsp), + .pps(pps_in), .vita_time(vita_time), .pps_int(pps_int)); + + // ///////////////////////////////////////////////////////////////////////////////////////// + // Debug Pins + + assign debug_clk = 2'b00; + assign debug = 32'd0; + assign debug_gpio_0 = 32'd0; + assign debug_gpio_1 = 32'd0; + +endmodule // u2_core + +/* + // FIFO Level Debugging + reg [31:0] host_to_dsp_fifo,dsp_to_host_fifo,eth_mac_debug,serdes_to_dsp_fifo,dsp_to_serdes_fifo; + + always @(posedge dsp_clk) + serdes_to_dsp_fifo <= { {ser_rx_full,ser_rx_empty,ser_rx_occ[13:0]}, + {dsp_tx_full,dsp_tx_empty,dsp_tx_occ[13:0]} }; + + always @(posedge dsp_clk) + dsp_to_serdes_fifo <= { {ser_tx_full,ser_tx_empty,ser_tx_occ[13:0]}, + {dsp_rx_full,dsp_rx_empty,dsp_rx_occ[13:0]} }; + + always @(posedge dsp_clk) + host_to_dsp_fifo <= { {eth_rx_full,eth_rx_empty,eth_rx_occ[13:0]}, + {dsp_tx_full,dsp_tx_empty,dsp_tx_occ[13:0]} }; + + always @(posedge dsp_clk) + dsp_to_host_fifo <= { {eth_tx_full,eth_tx_empty,eth_tx_occ[13:0]}, + {dsp_rx_full,dsp_rx_empty,dsp_rx_occ[13:0]} }; + + always @(posedge dsp_clk) + eth_mac_debug <= { { 6'd0, GMII_TX_EN, GMII_RX_DV, debug_mac0[7:0]}, + {eth_rx_full2, eth_rx_empty2, eth_rx_occ2[13:0]} }; + + assign debug_clk[0] = GMII_RX_CLK; // wb_clk; + assign debug_clk[1] = dsp_clk; +*/ +/* + + wire mdio_cpy = MDIO; + assign debug = { { 1'b0, s6_stb, s6_ack, s6_we, s6_sel[3:0] }, + { s6_adr[15:8] }, + { s6_adr[7:0] }, + { 6'd0, mdio_cpy, MDC } }; +*/ +/* + assign debug = { { GMII_TXD }, + { 5'd0, GMII_TX_EN, GMII_TX_ER, GMII_GTX_CLK }, + { wr2_flags, rd2_flags }, + { 4'd0, wr2_ready_i, wr2_ready_o, rd2_ready_i, rd2_ready_o } }; + assign debug = { { GMII_RXD }, + { 5'd0, GMII_RX_DV, GMII_RX_ER, GMII_RX_CLK }, + { wr2_flags, rd2_flags }, + { GMII_TX_EN,3'd0, wr2_ready_i, wr2_ready_o, rd2_ready_i, rd2_ready_o } }; + */ + +// assign debug = debug_udp; + // assign debug = vrc_debug; +/* + assign debug_gpio_0 = { {pps_in, pps_int, 2'd0, vita_state}, + {2'd0, rx_dst_rdy, rx_src_rdy, rx_data[99:96]}, + {run_rx_d1, run_rx, strobe_rx, overrun, wr1_flags[3:0]} , + {wr1_ready_i, wr1_ready_o, rx1_src_rdy, rx1_dst_rdy, rx1_data[35:32]}}; +*/ +// assign debug_gpio_1 = {vita_time[63:32] }; + +/* + assign debug_gpio_1 = { { tx_f19_data[15:8] }, + { tx_f19_data[7:0] }, + { 3'd0, tx_f19_src_rdy, tx_f19_dst_rdy, tx_f19_data[18:16] }, + { 2'b0, rd2_ready_i, rd2_ready_o, rd2_flags } }; + */ + +// wire debug_mux; +// setting_reg #(.my_addr(5)) sr_debug (.clk(wb_clk),.rst(wb_rst),.strobe(set_stb),.addr(set_addr), +// .in(set_data),.out(debug_mux),.changed()); + +//assign debug = debug_mux ? host_to_dsp_fifo : dsp_to_host_fifo; +//assign debug = debug_mux ? serdes_to_dsp_fifo : dsp_to_serdes_fifo; + +//assign debug = {{strobe_rx,/*adc_ovf_a*/ 1'b0,adc_a}, +// {run_rx,/*adc_ovf_b*/ 1'b0,adc_b}}; + +//assign debug = debug_tx_dsp; +//assign debug = debug_serdes0; + +//assign debug_gpio_0 = 0; //debug_serdes0; +//assign debug_gpio_1 = 0; //debug_serdes1; + +// assign debug={{3'b0, wb_clk, wb_rst, dsp_rst, por, config_success}, +// {8'b0}, +// {3'b0,ram_loader_ack, ram_loader_stb, ram_loader_we,ram_loader_rst,ram_loader_done }, +// {cpld_start,cpld_mode,cpld_done,cpld_din,cpld_clk,cpld_detached,cpld_misc,cpld_init_b} }; + +//assign debug = {dac_a,dac_b}; + +/* + assign debug = {{ram_loader_done, takeover, 6'd0}, + {1'b0, cpld_start_int, cpld_mode_int, cpld_done_int, sd_clk, sd_csn, sd_miso, sd_mosi}, + {8'd0}, + {cpld_start, cpld_mode, cpld_done, cpld_din, cpld_misc, cpld_detached, cpld_clk, cpld_init_b}}; */ + +/*assign debug = host_to_dsp_fifo; + assign debug_gpio_0 = eth_mac_debug; + assign debug_gpio_1 = 0; + */ +// Assign various commonly used debug buses. +/* + wire [31:0] debug_rx_1 = {uart_tx_o,GMII_TX_EN,strobe_rx,overrun,proc_int,buffer_int,timer_int,GMII_RX_DV, + irq[7:0], + GMII_RXD, + GMII_TXD}; + + wire [31:0] debug_rx_2 = { 5'd0, s8_we, s8_stb, s8_ack, debug_rx[23:0] }; + + wire [31:0] debug_time = {uart_tx_o, 7'b0, + irq[7:0], + 6'b0, GMII_RX_DV, GMII_TX_EN, + 4'b0, exp_pps_in, exp_pps_out, pps_in, pps_int}; + + wire [31:0] debug_irq = {uart_tx_o, iwb_adr, iwb_ack, + irq[7:0], + proc_int, 7'b0 }; + + wire [31:0] debug_eth = + {{uart_tx_o,proc_int,underrun,buffer_int,wr2_ready,wr2_error,wr2_done,wr2_write}, + {8'd0}, + {8'd0}, + {GMII_TX_EN,GMII_RX_DV,Rx_mac_empty,Rx_mac_rd,Rx_mac_err,Rx_mac_sop,Rx_mac_eop,wr2_full} }; + + assign debug_serdes0 = { { rd0_dat[7:0] }, + { ser_tx_clk, ser_tkmsb, ser_tklsb, rd0_sop, rd0_eop, rd0_read, rd0_error, rd0_done }, + { ser_t[15:8] }, + { ser_t[7:0] } }; + + assign debug_serdes1 = { {1'b0,proc_int,underrun,buffer_int,wr0_ready,wr0_error,wr0_done,wr0_write}, + { 1'b0, ser_rx_clk, ser_rkmsb, ser_rklsb, ser_enable, ser_prbsen, ser_loopen, ser_rx_en }, + { ser_r[15:8] }, + { ser_r[7:0] } }; + + assign debug_gpio_1 = {uart_tx_o,7'd0, + 3'd0,rd1_sop,rd1_eop,rd1_read,rd1_done,rd1_error, + debug_txc[15:0]}; + assign debug_gpio_1 = debug_rx; + assign debug_gpio_1 = debug_serdes1; + assign debug_gpio_1 = debug_eth; + + */ + -- cgit v1.2.3 From 55e0d893e8a596e18c9eeb34e6f518e03c26dd80 Mon Sep 17 00:00:00 2001 From: Matt Ettus Date: Thu, 17 Jun 2010 13:59:51 -0700 Subject: added ability to clear out fifos of tx and rx. --- usrp2/gpmc/gpmc_async.v | 22 +++++++++++----------- usrp2/gpmc/gpmc_to_fifo_async.v | 10 +++++----- usrp2/top/u1e/u1e_core.v | 33 +++++++++++++++++++++------------ 3 files changed, 37 insertions(+), 28 deletions(-) diff --git a/usrp2/gpmc/gpmc_async.v b/usrp2/gpmc/gpmc_async.v index 9f7b6dc4c..23bad56ae 100644 --- a/usrp2/gpmc/gpmc_async.v +++ b/usrp2/gpmc/gpmc_async.v @@ -16,7 +16,7 @@ module gpmc_async output [1:0] wb_sel_o, output wb_cyc_o, output wb_stb_o, output wb_we_o, input wb_ack_i, // FIFO interface - input fifo_clk, input fifo_rst, + input fifo_clk, input fifo_rst, input clear_tx, input clear_rx, output [35:0] tx_data_o, output tx_src_rdy_o, input tx_dst_rdy_i, input [35:0] rx_data_i, input rx_src_rdy_i, output rx_dst_rdy_o, @@ -34,7 +34,7 @@ module gpmc_async wire bus_error_tx, bus_error_rx; always @(posedge fifo_clk) - if(fifo_rst) + if(fifo_rst | clear_tx | clear_rx) bus_error <= 0; else bus_error <= bus_error_tx | bus_error_rx; @@ -54,23 +54,23 @@ module gpmc_async gpmc_to_fifo_async gpmc_to_fifo_async (.EM_D(EM_D), .EM_NBE(EM_NBE), .EM_NCS(EM_NCS4), .EM_NWE(EM_NWE), - .fifo_clk(fifo_clk), .fifo_rst(fifo_rst), + .fifo_clk(fifo_clk), .fifo_rst(fifo_rst), .clear(clear_tx), .data_o(tx18_data), .src_rdy_o(tx18_src_rdy), .dst_rdy_i(tx18_dst_rdy), .frame_len(tx_frame_len), .fifo_space(tx_fifo_space), .fifo_ready(tx_have_space), .bus_error(bus_error_tx) ); fifo_cascade #(.WIDTH(18), .SIZE(10)) tx_fifo - (.clk(fifo_clk), .reset(fifo_rst), .clear(0), + (.clk(fifo_clk), .reset(fifo_rst), .clear(clear_tx), .datain(tx18_data), .src_rdy_i(tx18_src_rdy), .dst_rdy_o(tx18_dst_rdy), .space(tx_fifo_space), .dataout(tx18b_data), .src_rdy_o(tx18b_src_rdy), .dst_rdy_i(tx18b_dst_rdy), .occupied()); fifo19_to_fifo36 #(.LE(1)) f19_to_f36 // Little endian because ARM is LE - (.clk(fifo_clk), .reset(fifo_rst), .clear(0), + (.clk(fifo_clk), .reset(fifo_rst), .clear(clear_tx), .f19_datain({1'b0,tx18b_data}), .f19_src_rdy_i(tx18b_src_rdy), .f19_dst_rdy_o(tx18b_dst_rdy), .f36_dataout(tx36_data), .f36_src_rdy_o(tx36_src_rdy), .f36_dst_rdy_i(tx36_dst_rdy)); fifo_cascade #(.WIDTH(36), .SIZE(TXFIFOSIZE)) tx_fifo36 - (.clk(wb_clk), .reset(wb_rst), .clear(0), + (.clk(wb_clk), .reset(wb_rst), .clear(clear_tx), .datain(tx36_data), .src_rdy_i(tx36_src_rdy), .dst_rdy_o(tx36_dst_rdy), .dataout(tx_data_o), .src_rdy_o(tx_src_rdy_o), .dst_rdy_i(tx_dst_rdy_i)); @@ -85,22 +85,22 @@ module gpmc_async wire dummy; fifo_cascade #(.WIDTH(36), .SIZE(RXFIFOSIZE)) rx_fifo36 - (.clk(wb_clk), .reset(wb_rst), .clear(0), + (.clk(wb_clk), .reset(wb_rst), .clear(clear_rx), .datain(rx_data_i), .src_rdy_i(rx_src_rdy_i), .dst_rdy_o(rx_dst_rdy_o), .dataout(rx36_data), .src_rdy_o(rx36_src_rdy), .dst_rdy_i(rx36_dst_rdy)); fifo36_to_fifo19 #(.LE(1)) f36_to_f19 // Little endian because ARM is LE - (.clk(fifo_clk), .reset(fifo_rst), .clear(0), + (.clk(fifo_clk), .reset(fifo_rst), .clear(clear_rx), .f36_datain(rx36_data), .f36_src_rdy_i(rx36_src_rdy), .f36_dst_rdy_o(rx36_dst_rdy), .f19_dataout({dummy,rx18_data}), .f19_src_rdy_o(rx18_src_rdy), .f19_dst_rdy_i(rx18_dst_rdy) ); fifo_cascade #(.WIDTH(18), .SIZE(12)) rx_fifo - (.clk(fifo_clk), .reset(fifo_rst), .clear(0), + (.clk(fifo_clk), .reset(fifo_rst), .clear(clear_rx), .datain(rx18_data), .src_rdy_i(rx18_src_rdy), .dst_rdy_o(rx18_dst_rdy), .space(rx_fifo_space), .dataout(rx18b_data), .src_rdy_o(rx18b_src_rdy), .dst_rdy_i(rx18b_dst_rdy), .occupied()); fifo_to_gpmc_async fifo_to_gpmc_async - (.clk(fifo_clk), .reset(fifo_rst), .clear(0), + (.clk(fifo_clk), .reset(fifo_rst), .clear(clear_rx), .data_i(rx18b_data), .src_rdy_i(rx18b_src_rdy), .dst_rdy_o(rx18b_dst_rdy), .EM_D(EM_D_fifo), .EM_NCS(EM_NCS4), .EM_NOE(EM_NOE), .frame_len(rx_frame_len) ); @@ -108,7 +108,7 @@ module gpmc_async wire [31:0] pkt_count; fifo_watcher fifo_watcher - (.clk(fifo_clk), .reset(fifo_rst), .clear(0), + (.clk(fifo_clk), .reset(fifo_rst), .clear(clear_rx), .src_rdy1(rx18_src_rdy), .dst_rdy1(rx18_dst_rdy), .sof1(rx18_data[16]), .eof1(rx18_data[17]), .src_rdy2(rx18b_src_rdy), .dst_rdy2(rx18b_dst_rdy), .sof2(rx18b_data[16]), .eof2(rx18b_data[17]), .have_packet(rx_have_data), .length(rx_frame_len), .bus_error(bus_error_rx), diff --git a/usrp2/gpmc/gpmc_to_fifo_async.v b/usrp2/gpmc/gpmc_to_fifo_async.v index 3d29745a2..55c0cef50 100644 --- a/usrp2/gpmc/gpmc_to_fifo_async.v +++ b/usrp2/gpmc/gpmc_to_fifo_async.v @@ -2,7 +2,7 @@ module gpmc_to_fifo_async (input [15:0] EM_D, input [1:0] EM_NBE, input EM_NCS, input EM_NWE, - input fifo_clk, input fifo_rst, + input fifo_clk, input fifo_rst, input clear, output reg [17:0] data_o, output reg src_rdy_o, input dst_rdy_i, input [15:0] frame_len, input [15:0] fifo_space, output reg fifo_ready, @@ -37,7 +37,7 @@ module gpmc_to_fifo_async end always @(posedge fifo_clk) - if(fifo_rst) + if(fifo_rst | clear) src_rdy_o <= 0; else if(do_write) src_rdy_o <= 1; @@ -45,7 +45,7 @@ module gpmc_to_fifo_async src_rdy_o <= 0; // Assume it was taken always @(posedge fifo_clk) - if(fifo_rst) + if(fifo_rst | clear) counter <= 0; else if(do_write) if(last_write) @@ -54,13 +54,13 @@ module gpmc_to_fifo_async counter <= counter + 1; always @(posedge fifo_clk) - if(fifo_rst) + if(fifo_rst | clear) fifo_ready <= 0; else fifo_ready <= /* first_write & */ (fifo_space > 16'd1023); always @(posedge fifo_clk) - if(fifo_rst) + if(fifo_rst | clear) bus_error <= 0; else if(src_rdy_o & ~dst_rdy_i) bus_error <= 1; diff --git a/usrp2/top/u1e/u1e_core.v b/usrp2/top/u1e/u1e_core.v index 64173ef2d..787bf016c 100644 --- a/usrp2/top/u1e/u1e_core.v +++ b/usrp2/top/u1e/u1e_core.v @@ -28,10 +28,11 @@ module u1e_core localparam TXFIFOSIZE = 13; localparam RXFIFOSIZE = 13; - localparam SR_RX_DSP = 0; // 5 regs - localparam SR_RX_CTRL = 8; // 9 regs - localparam SR_TX_DSP = 17; // 5 regs - localparam SR_TX_CTRL = 24; // 2 regs + localparam SR_RX_DSP = 0; // 5 regs + localparam SR_CLEAR_FIFO = 6; // 1 reg + localparam SR_RX_CTRL = 8; // 9 regs + localparam SR_TX_DSP = 17; // 5 regs + localparam SR_TX_CTRL = 24; // 2 regs localparam SR_TIME64 = 28; // 4 regs wire wb_clk = clk_fpga; @@ -65,6 +66,14 @@ module u1e_core wire [7:0] rate; wire bus_error; + + wire clear_rx_int, clear_tx_int, clear_tx, clear_rx, do_clear; + + setting_reg #(.my_addr(SR_CLEAR_FIFO), .width(2)) sr_clear + (.clk(clk),.rst(reset),.strobe(set_stb),.addr(set_addr), + .in(set_data),.out({clear_tx_int,clear_rx_int}),.changed(do_clear)); + assign clear_tx = clear_tx_int & do_clear; + assign clear_rx = clear_rx_int & do_clear; gpmc_async #(.TXFIFOSIZE(TXFIFOSIZE), .RXFIFOSIZE(RXFIFOSIZE)) gpmc (.arst(wb_rst), @@ -80,7 +89,7 @@ module u1e_core .wb_sel_o(m0_sel), .wb_cyc_o(m0_cyc), .wb_stb_o(m0_stb), .wb_we_o(m0_we), .wb_ack_i(m0_ack), - .fifo_clk(wb_clk), .fifo_rst(wb_rst), + .fifo_clk(wb_clk), .fifo_rst(wb_rst), .clear_tx(clear_tx), .clear_rx(clear_rx), .tx_data_o(tx_data), .tx_src_rdy_o(tx_src_rdy), .tx_dst_rdy_i(tx_dst_rdy), .rx_data_i(rx_data), .rx_src_rdy_i(rx_src_rdy), .rx_dst_rdy_o(rx_dst_rdy), @@ -93,7 +102,7 @@ module u1e_core `ifdef LOOPBACK fifo_cascade #(.WIDTH(36), .SIZE(9)) loopback_fifo - (.clk(wb_clk), .reset(wb_rst), .clear(0), + (.clk(wb_clk), .reset(wb_rst), .clear(clear_tx | clear_rx), .datain(tx_data), .src_rdy_i(tx_src_rdy), .dst_rdy_o(tx_dst_rdy), .dataout(rx_data), .src_rdy_o(rx_src_rdy), .dst_rdy_i(rx_dst_rdy)); @@ -113,7 +122,7 @@ module u1e_core .underrun(tx_underrun), .overrun()); packet_verifier32 pktver32 - (.clk(wb_clk), .reset(wb_rst), .clear(clear), + (.clk(wb_clk), .reset(wb_rst), .clear(clear_tx), .data_i(tx_data), .src_rdy_i(tx_src_rdy_int), .dst_rdy_o(tx_dst_rdy_int), .total(total), .crc_err(crc_err), .seq_err(seq_err), .len_err(len_err)); @@ -121,7 +130,7 @@ module u1e_core wire rx_enable; packet_generator32 pktgen32 - (.clk(wb_clk), .reset(wb_rst), .clear(clear), + (.clk(wb_clk), .reset(wb_rst), .clear(clear_rx), .data_o(rx_data), .src_rdy_o(rx_src_rdy_int), .dst_rdy_i(rx_dst_rdy_int)); fifo_pacer rx_pacer @@ -152,7 +161,7 @@ module u1e_core .debug(debug_rx_dsp) ); vita_rx_control #(.BASE(SR_RX_CTRL), .WIDTH(32)) vita_rx_control - (.clk(wb_clk), .reset(wb_rst), .clear(0), + (.clk(wb_clk), .reset(wb_rst), .clear(clear_rx), .set_stb(set_stb),.set_addr(set_addr),.set_data(set_data), .vita_time(vita_time), .overrun(rx_overrun), .sample(sample_rx), .run(run_rx), .strobe(strobe_rx), @@ -160,7 +169,7 @@ module u1e_core .debug_rx(vrc_debug)); vita_rx_framer #(.BASE(SR_RX_CTRL), .MAXCHAN(1)) vita_rx_framer - (.clk(wb_clk), .reset(wb_rst), .clear(0), + (.clk(wb_clk), .reset(wb_rst), .clear(clear_rx), .set_stb(set_stb),.set_addr(set_addr),.set_data(set_data), .sample_fifo_i(rx1_data), .sample_fifo_dst_rdy_o(rx1_dst_rdy), .sample_fifo_src_rdy_i(rx1_src_rdy), .data_o(rx_data), .dst_rdy_i(rx_dst_rdy), .src_rdy_o(rx_src_rdy), @@ -177,14 +186,14 @@ module u1e_core wire run_tx; vita_tx_deframer #(.BASE(SR_TX_CTRL), .MAXCHAN(1)) vita_tx_deframer - (.clk(wb_clk), .reset(wb_rst), .clear(0), + (.clk(wb_clk), .reset(wb_rst), .clear(clear_tx), .set_stb(set_stb),.set_addr(set_addr),.set_data(set_data), .data_i(tx_data), .src_rdy_i(tx_src_rdy), .dst_rdy_o(tx_dst_rdy), .sample_fifo_o(tx1_data), .sample_fifo_src_rdy_o(tx1_src_rdy), .sample_fifo_dst_rdy_i(tx1_dst_rdy), .debug(debug_vtd) ); vita_tx_control #(.BASE(SR_TX_CTRL), .WIDTH(32)) vita_tx_control - (.clk(wb_clk), .reset(wb_rst), .clear(0), + (.clk(wb_clk), .reset(wb_rst), .clear(clear_tx), .set_stb(set_stb),.set_addr(set_addr),.set_data(set_data), .vita_time(vita_time),.underrun(tx_underrun), .sample_fifo_i(tx1_data), .sample_fifo_src_rdy_i(tx1_src_rdy), .sample_fifo_dst_rdy_o(tx1_dst_rdy), -- cgit v1.2.3 From c3ef4c04fd8d887a733fa9a8ed5b6702cf453a01 Mon Sep 17 00:00:00 2001 From: Matt Ettus Date: Fri, 9 Jul 2010 14:20:30 -0700 Subject: point to new location for fifos --- usrp2/vrt/vita_rx.build | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/usrp2/vrt/vita_rx.build b/usrp2/vrt/vita_rx.build index f6d2d75a3..010d1be6e 100755 --- a/usrp2/vrt/vita_rx.build +++ b/usrp2/vrt/vita_rx.build @@ -1 +1 @@ -iverilog -Wimplict -Wportbind -y ../models -y . -y ../control_lib/ -y ../control_lib/newfifo -y ../coregen -y /opt/Xilinx/10.1/ISE/verilog/src/XilinxCoreLib -y /opt/Xilinx/10.1/ISE/verilog/src/unisims/ -y ../timing -o vita_rx_tb vita_rx_tb.v +iverilog -Wimplict -Wportbind -y ../models -y . -y ../control_lib/ -y ../fifo -y ../coregen -y /opt/Xilinx/10.1/ISE/verilog/src/XilinxCoreLib -y /opt/Xilinx/10.1/ISE/verilog/src/unisims/ -y ../timing -o vita_rx_tb vita_rx_tb.v -- cgit v1.2.3 From dcdc873e90d8fbd79127d0a69783834339768467 Mon Sep 17 00:00:00 2001 From: Matt Ettus Date: Mon, 12 Jul 2010 13:23:48 -0700 Subject: updated to ise12 fixes from main development line --- usrp2/top/u2plus/u2plus_core.v | 44 +++++++++++++++++++++--------------------- 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/usrp2/top/u2plus/u2plus_core.v b/usrp2/top/u2plus/u2plus_core.v index d4b138c54..7b8cbb1bb 100644 --- a/usrp2/top/u2plus/u2plus_core.v +++ b/usrp2/top/u2plus/u2plus_core.v @@ -252,33 +252,33 @@ module u2plus_core // /////////////////////////////////////////////////////////////////// // RAM Loader - wire [31:0] ram_loader_dat, iwb_dat; - wire [15:0] ram_loader_adr, iwb_adr; + wire [31:0] ram_loader_dat, if_dat; + wire [15:0] ram_loader_adr; + wire [14:0] if_adr; wire [3:0] ram_loader_sel; - wire ram_loader_stb, ram_loader_we, ram_loader_ack; + wire ram_loader_stb, ram_loader_we; wire iwb_ack, iwb_stb; ram_loader #(.AWIDTH(16),.RAM_SIZE(RAM_SIZE)) - ram_loader (.clk_i(wb_clk),.rst_i(ram_loader_rst), + ram_loader (.wb_clk(wb_clk),.dsp_clk(dsp_clk),.ram_loader_rst(ram_loader_rst), + .wb_dat(ram_loader_dat),.wb_adr(ram_loader_adr), + .wb_stb(ram_loader_stb),.wb_sel(ram_loader_sel), + .wb_we(ram_loader_we), + .ram_loader_done(ram_loader_done), // CPLD Interface - .cfg_clk_i(cpld_clk), - .cfg_data_i(cpld_din), - .start_o(cpld_start_int), - .mode_o(cpld_mode_int), - .done_o(cpld_done_int), - .detached_i(cpld_detached), - // Wishbone Interface - .wb_dat_o(ram_loader_dat),.wb_adr_o(ram_loader_adr), - .wb_stb_o(ram_loader_stb),.wb_cyc_o(),.wb_sel_o(ram_loader_sel), - .wb_we_o(ram_loader_we),.wb_ack_i(ram_loader_ack), - .ram_loader_done_o(ram_loader_done)); - + .cpld_clk(cpld_clk), + .cpld_din(cpld_din), + .cpld_start(cpld_start_int), + .cpld_mode(cpld_mode_int), + .cpld_done(cpld_done_int), + .cpld_detached(cpld_detached)); + // ///////////////////////////////////////////////////////////////////////// // Processor aeMB_core_BE #(.ISIZ(16),.DSIZ(16),.MUL(0),.BSF(1)) aeMB (.sys_clk_i(wb_clk), .sys_rst_i(wb_rst), // Instruction Wishbone bus to I-RAM - .iwb_stb_o(iwb_stb),.iwb_adr_o(iwb_adr), - .iwb_dat_i(iwb_dat),.iwb_ack_i(iwb_ack), + .if_adr(if_adr), + .if_dat(if_dat), // Data Wishbone bus to system bus fabric .dwb_we_o(m0_we),.dwb_stb_o(m0_stb),.dwb_dat_o(m0_dat_i),.dwb_adr_o(m0_adr), .dwb_dat_i(m0_dat_o),.dwb_ack_i(m0_ack),.dwb_sel_o(m0_sel),.dwb_cyc_o(m0_cyc), @@ -292,16 +292,16 @@ module u2plus_core // I-port connects directly to processor and ram loader wire flush_icache; - ram_harv_cache #(.AWIDTH(15),.RAM_SIZE(RAM_SIZE),.ICWIDTH(7),.DCWIDTH(6)) + ram_harvard #(.AWIDTH(15),.RAM_SIZE(RAM_SIZE),.ICWIDTH(7),.DCWIDTH(6)) sys_ram(.wb_clk_i(wb_clk),.wb_rst_i(wb_rst), .ram_loader_adr_i(ram_loader_adr[14:0]), .ram_loader_dat_i(ram_loader_dat), .ram_loader_stb_i(ram_loader_stb), .ram_loader_sel_i(ram_loader_sel), - .ram_loader_we_i(ram_loader_we), .ram_loader_ack_o(ram_loader_ack), + .ram_loader_we_i(ram_loader_we), .ram_loader_done_i(ram_loader_done), - .iwb_adr_i(iwb_adr[14:0]), .iwb_stb_i(iwb_stb), - .iwb_dat_o(iwb_dat), .iwb_ack_o(iwb_ack), + .if_adr(if_adr), + .if_data(if_dat), .dwb_adr_i(s0_adr[14:0]), .dwb_dat_i(s0_dat_o), .dwb_dat_o(s0_dat_i), .dwb_we_i(s0_we), .dwb_ack_o(s0_ack), .dwb_stb_i(s0_stb), .dwb_sel_i(s0_sel), -- cgit v1.2.3 From 41e7903589e4d47e82a3c49c738065a516204deb Mon Sep 17 00:00:00 2001 From: Matt Ettus Date: Mon, 12 Jul 2010 15:05:35 -0700 Subject: remove ram loader --- usrp2/top/u2plus/u2plus_core.v | 37 ++++++++----------------------------- 1 file changed, 8 insertions(+), 29 deletions(-) diff --git a/usrp2/top/u2plus/u2plus_core.v b/usrp2/top/u2plus/u2plus_core.v index 7b8cbb1bb..2b5ea4295 100644 --- a/usrp2/top/u2plus/u2plus_core.v +++ b/usrp2/top/u2plus/u2plus_core.v @@ -151,8 +151,7 @@ module u2plus_core wire [31:0] set_data, set_data_dsp; wire set_stb, set_stb_dsp; - wire ram_loader_done; - wire ram_loader_rst, wb_rst, dsp_rst; + wire wb_rst, dsp_rst; wire [31:0] status, status_b0, status_b1, status_b2, status_b3, status_b4, status_b5, status_b6, status_b7; wire bus_error, spi_int, i2c_int, pps_int, onetime_int, periodic_int, buffer_int; @@ -249,31 +248,11 @@ module u2plus_core ////////////////////////////////////////////////////////////////////////////////////////// // Reset Controller - // /////////////////////////////////////////////////////////////////// - // RAM Loader - - wire [31:0] ram_loader_dat, if_dat; - wire [15:0] ram_loader_adr; - wire [14:0] if_adr; - wire [3:0] ram_loader_sel; - wire ram_loader_stb, ram_loader_we; - wire iwb_ack, iwb_stb; - ram_loader #(.AWIDTH(16),.RAM_SIZE(RAM_SIZE)) - ram_loader (.wb_clk(wb_clk),.dsp_clk(dsp_clk),.ram_loader_rst(ram_loader_rst), - .wb_dat(ram_loader_dat),.wb_adr(ram_loader_adr), - .wb_stb(ram_loader_stb),.wb_sel(ram_loader_sel), - .wb_we(ram_loader_we), - .ram_loader_done(ram_loader_done), - // CPLD Interface - .cpld_clk(cpld_clk), - .cpld_din(cpld_din), - .cpld_start(cpld_start_int), - .cpld_mode(cpld_mode_int), - .cpld_done(cpld_done_int), - .cpld_detached(cpld_detached)); - // ///////////////////////////////////////////////////////////////////////// // Processor + wire [31:0] if_dat; + wire [14:0] if_adr; + aeMB_core_BE #(.ISIZ(16),.DSIZ(16),.MUL(0),.BSF(1)) aeMB (.sys_clk_i(wb_clk), .sys_rst_i(wb_rst), // Instruction Wishbone bus to I-RAM @@ -295,10 +274,10 @@ module u2plus_core ram_harvard #(.AWIDTH(15),.RAM_SIZE(RAM_SIZE),.ICWIDTH(7),.DCWIDTH(6)) sys_ram(.wb_clk_i(wb_clk),.wb_rst_i(wb_rst), - .ram_loader_adr_i(ram_loader_adr[14:0]), .ram_loader_dat_i(ram_loader_dat), - .ram_loader_stb_i(ram_loader_stb), .ram_loader_sel_i(ram_loader_sel), - .ram_loader_we_i(ram_loader_we), - .ram_loader_done_i(ram_loader_done), + .ram_loader_adr_i(0), .ram_loader_dat_i(0), + .ram_loader_stb_i(0), .ram_loader_sel_i(0), + .ram_loader_we_i(0), + .ram_loader_done_i(1'b1), .if_adr(if_adr), .if_data(if_dat), -- cgit v1.2.3 From 825a9a04890017c24e561c39268157dbd4ef6adc Mon Sep 17 00:00:00 2001 From: Matt Ettus Date: Mon, 12 Jul 2010 16:04:40 -0700 Subject: copied from quad radio --- usrp2/control_lib/v5icap_wb.v | 54 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 usrp2/control_lib/v5icap_wb.v diff --git a/usrp2/control_lib/v5icap_wb.v b/usrp2/control_lib/v5icap_wb.v new file mode 100644 index 000000000..c8800285a --- /dev/null +++ b/usrp2/control_lib/v5icap_wb.v @@ -0,0 +1,54 @@ + + +module v5icap_wb + (input clk, input reset, + input cyc_i, input stb_i, input we_i, output ack_o, + input [31:0] dat_i, output [31:0] dat_o); + + wire BUSY, CE, WRITE; + + reg [2:0] icap_state; + localparam ICAP_IDLE = 0; + localparam ICAP_WR0 = 1; + localparam ICAP_WR1 = 2; + localparam ICAP_RD0 = 3; + localparam ICAP_RD1 = 4; + + always @(posedge clk) + if(reset) + icap_state <= ICAP_IDLE; + else + case(icap_state) + ICAP_IDLE : + begin + if(stb_i & cyc_i) + if(we_i) + icap_state <= ICAP_WR0; + else + icap_state <= ICAP_RD0; + end + ICAP_WR0 : + icap_state <= ICAP_WR1; + ICAP_WR1 : + icap_state <= ICAP_IDLE; + ICAP_RD0 : + icap_state <= ICAP_RD1; + ICAP_RD1 : + icap_state <= ICAP_IDLE; + endcase // case (icap_state) + + assign WRITE = (icap_state == ICAP_WR0) | (icap_state == ICAP_WR1); + assign CE = (icap_state == ICAP_WR1) | (icap_state == ICAP_RD0); + + assign ack_o = (icap_state == ICAP_WR1) | (icap_state == ICAP_RD1); + + ICAP_VIRTEX5 #(.ICAP_WIDTH("X32")) ICAP_VIRTEX5_inst + (.BUSY(BUSY), // Busy output + .O(dat_o), // 32-bit data output + .CE(~CE), // Clock enable input + .CLK(clk), // Clock input + .I(dat_i), // 32-bit data input + .WRITE(~WRITE) // Write input + ); + +endmodule // v5icap_wb -- cgit v1.2.3 From ed682e09b55a4f587077665e3ee62ecc7053ff53 Mon Sep 17 00:00:00 2001 From: Matt Ettus Date: Mon, 12 Jul 2010 16:10:12 -0700 Subject: very slight mods from v5 version --- usrp2/control_lib/s3a_icap_wb.v | 56 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 usrp2/control_lib/s3a_icap_wb.v diff --git a/usrp2/control_lib/s3a_icap_wb.v b/usrp2/control_lib/s3a_icap_wb.v new file mode 100644 index 000000000..9a9db0f96 --- /dev/null +++ b/usrp2/control_lib/s3a_icap_wb.v @@ -0,0 +1,56 @@ + + +module s3a_icap_wb + (input clk, input reset, + input cyc_i, input stb_i, input we_i, output ack_o, + input [31:0] dat_i, output [31:0] dat_o); + + assign dat_o[31:8] = 24'd0; + + wire BUSY, CE, WRITE; + + reg [2:0] icap_state; + localparam ICAP_IDLE = 0; + localparam ICAP_WR0 = 1; + localparam ICAP_WR1 = 2; + localparam ICAP_RD0 = 3; + localparam ICAP_RD1 = 4; + + always @(posedge clk) + if(reset) + icap_state <= ICAP_IDLE; + else + case(icap_state) + ICAP_IDLE : + begin + if(stb_i & cyc_i) + if(we_i) + icap_state <= ICAP_WR0; + else + icap_state <= ICAP_RD0; + end + ICAP_WR0 : + icap_state <= ICAP_WR1; + ICAP_WR1 : + icap_state <= ICAP_IDLE; + ICAP_RD0 : + icap_state <= ICAP_RD1; + ICAP_RD1 : + icap_state <= ICAP_IDLE; + endcase // case (icap_state) + + assign WRITE = (icap_state == ICAP_WR0) | (icap_state == ICAP_WR1); + assign CE = (icap_state == ICAP_WR1) | (icap_state == ICAP_RD0); + + assign ack_o = (icap_state == ICAP_WR1) | (icap_state == ICAP_RD1); + + ICAP_SPARTAN3A ICAP_SPARTAN3A_inst + (.BUSY(BUSY), // Busy output + .O(dat_o[7:0]), // 32-bit data output + .CE(~CE), // Clock enable input + .CLK(clk), // Clock input + .I(dat_i[7:0]), // 32-bit data input + .WRITE(~WRITE) // Write input + ); + +endmodule // s3a_icap_wb -- cgit v1.2.3 From c9343570f681a042beb0cf231ddcfff950228095 Mon Sep 17 00:00:00 2001 From: Matt Ettus Date: Mon, 12 Jul 2010 16:28:19 -0700 Subject: ram_harvard2 is a workaround for a Xilinx bug that gets confused by an unused write port on a ram --- usrp2/control_lib/Makefile.srcs | 2 ++ usrp2/control_lib/ram_harvard2.v | 77 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 79 insertions(+) create mode 100644 usrp2/control_lib/ram_harvard2.v diff --git a/usrp2/control_lib/Makefile.srcs b/usrp2/control_lib/Makefile.srcs index bc8e4d5bc..60fb2516d 100644 --- a/usrp2/control_lib/Makefile.srcs +++ b/usrp2/control_lib/Makefile.srcs @@ -21,6 +21,7 @@ nsgpio.v \ ram_2port.v \ ram_harv_cache.v \ ram_harvard.v \ +ram_harvard2.v \ ram_loader.v \ setting_reg.v \ settings_bus.v \ @@ -42,4 +43,5 @@ pic.v \ longfifo.v \ shortfifo.v \ medfifo.v \ +s3a_icap_wb.v \ )) diff --git a/usrp2/control_lib/ram_harvard2.v b/usrp2/control_lib/ram_harvard2.v new file mode 100644 index 000000000..67777af2a --- /dev/null +++ b/usrp2/control_lib/ram_harvard2.v @@ -0,0 +1,77 @@ + + +// Dual ported, Harvard architecture + +module ram_harvard2 + #(parameter AWIDTH=15, + parameter RAM_SIZE=32768) + (input wb_clk_i, + input wb_rst_i, + // Instruction fetch port. + input [AWIDTH-1:0] if_adr, + output reg [31:0] if_data, + // Data access port. + input [AWIDTH-1:0] dwb_adr_i, + input [31:0] dwb_dat_i, + output reg [31:0] dwb_dat_o, + input dwb_we_i, + output dwb_ack_o, + input dwb_stb_i, + input [3:0] dwb_sel_i); + + reg ack_d1; + reg stb_d1; + + assign dwb_ack_o = dwb_stb_i & (dwb_we_i | (stb_d1 & ~ack_d1)); + + always @(posedge wb_clk_i) + if(wb_rst_i) + ack_d1 <= 1'b0; + else + ack_d1 <= dwb_ack_o; + + always @(posedge wb_clk_i) + if(wb_rst_i) + stb_d1 <= 0; + else + stb_d1 <= dwb_stb_i; + + reg [7:0] ram0 [0:(RAM_SIZE/4)-1]; + reg [7:0] ram1 [0:(RAM_SIZE/4)-1]; + reg [7:0] ram2 [0:(RAM_SIZE/4)-1]; + reg [7:0] ram3 [0:(RAM_SIZE/4)-1]; + + // Port 1, Read only + always @(posedge wb_clk_i) + if_data[31:24] <= ram3[if_adr[AWIDTH-1:2]]; + always @(posedge wb_clk_i) + if_data[23:16] <= ram2[if_adr[AWIDTH-1:2]]; + always @(posedge wb_clk_i) + if_data[15:8] <= ram1[if_adr[AWIDTH-1:2]]; + always @(posedge wb_clk_i) + if_data[7:0] <= ram0[if_adr[AWIDTH-1:2]]; + + // Port 2, R/W + always @(posedge wb_clk_i) + if(dwb_stb_i) dwb_dat_o[31:24] <= ram3[dwb_adr_i[AWIDTH-1:2]]; + always @(posedge wb_clk_i) + if(dwb_stb_i) dwb_dat_o[23:16] <= ram2[dwb_adr_i[AWIDTH-1:2]]; + always @(posedge wb_clk_i) + if(dwb_stb_i) dwb_dat_o[15:8] <= ram1[dwb_adr_i[AWIDTH-1:2]]; + always @(posedge wb_clk_i) + if(dwb_stb_i) dwb_dat_o[7:0] <= ram0[dwb_adr_i[AWIDTH-1:2]]; + + always @(posedge wb_clk_i) + if(dwb_we_i & dwb_stb_i & dwb_sel_i[3]) + ram3[dwb_adr_i[AWIDTH-1:2]] <= dwb_dat_i[31:24]; + always @(posedge wb_clk_i) + if(dwb_we_i & dwb_stb_i & dwb_sel_i[2]) + ram2[dwb_adr_i[AWIDTH-1:2]] <= dwb_dat_i[23:16]; + always @(posedge wb_clk_i) + if(dwb_we_i & dwb_stb_i & dwb_sel_i[1]) + ram1[dwb_adr_i[AWIDTH-1:2]] <= dwb_dat_i[15:8]; + always @(posedge wb_clk_i) + if(dwb_we_i & dwb_stb_i & dwb_sel_i[0]) + ram0[dwb_adr_i[AWIDTH-1:2]] <= dwb_dat_i[7:0]; + +endmodule // ram_harvard -- cgit v1.2.3 From 864096d9b717a557b9d84d562b0803bc491313c8 Mon Sep 17 00:00:00 2001 From: Matt Ettus Date: Mon, 12 Jul 2010 16:35:57 -0700 Subject: further cleanup --- usrp2/top/u2plus/u2plus.v | 6 +- usrp2/top/u2plus/u2plus_core.v | 237 +++++------------------------------------ 2 files changed, 27 insertions(+), 216 deletions(-) diff --git a/usrp2/top/u2plus/u2plus.v b/usrp2/top/u2plus/u2plus.v index 13c7a811f..32dfb0331 100644 --- a/usrp2/top/u2plus/u2plus.v +++ b/usrp2/top/u2plus/u2plus.v @@ -364,8 +364,8 @@ module u2plus .RAM_WEn (RAM_WEn), .RAM_OEn (RAM_OEn), .RAM_LDn (RAM_LDn), - .uart_tx_o (uart_tx_o), - .uart_rx_i (uart_rx_i), + .uart_tx_o (TXD[0]), + .uart_rx_i (RXD[0]), .uart_baud_o (), .sim_mode (1'b0), .clock_divider (2), @@ -377,6 +377,6 @@ module u2plus assign RAM_ZZ = 1; assign RAM_BWn = 4'b1111; - assign TXD = 3'b111; + assign TXD[2:1] = 2'b11; endmodule // u2plus diff --git a/usrp2/top/u2plus/u2plus_core.v b/usrp2/top/u2plus/u2plus_core.v index 2b5ea4295..d49c461cb 100644 --- a/usrp2/top/u2plus/u2plus_core.v +++ b/usrp2/top/u2plus/u2plus_core.v @@ -268,27 +268,15 @@ module u2plus_core // ///////////////////////////////////////////////////////////////////////// // Dual Ported RAM -- D-Port is Slave #0 on main Wishbone - // I-port connects directly to processor and ram loader + // I-port connects directly to processor wire flush_icache; - ram_harvard #(.AWIDTH(15),.RAM_SIZE(RAM_SIZE),.ICWIDTH(7),.DCWIDTH(6)) - sys_ram(.wb_clk_i(wb_clk),.wb_rst_i(wb_rst), - - .ram_loader_adr_i(0), .ram_loader_dat_i(0), - .ram_loader_stb_i(0), .ram_loader_sel_i(0), - .ram_loader_we_i(0), - .ram_loader_done_i(1'b1), - - .if_adr(if_adr), - .if_data(if_dat), - + ram_harvard2 #(.AWIDTH(15),.RAM_SIZE(RAM_SIZE)) + sys_ram(.wb_clk_i(wb_clk),.wb_rst_i(wb_rst), + .if_adr(if_adr), .if_data(if_dat), .dwb_adr_i(s0_adr[14:0]), .dwb_dat_i(s0_dat_o), .dwb_dat_o(s0_dat_i), - .dwb_we_i(s0_we), .dwb_ack_o(s0_ack), .dwb_stb_i(s0_stb), .dwb_sel_i(s0_sel), - .flush_icache(flush_icache)); + .dwb_we_i(s0_we), .dwb_ack_o(s0_ack), .dwb_stb_i(s0_stb), .dwb_sel_i(s0_sel)); - setting_reg #(.my_addr(7)) sr_icache (.clk(wb_clk),.rst(wb_rst),.strobe(set_stb),.addr(set_addr), - .in(set_data),.out(),.changed(flush_icache)); - // ///////////////////////////////////////////////////////////////////////// // Buffer Pool, slave #1 wire rd0_ready_i, rd0_ready_o; @@ -486,14 +474,6 @@ module u2plus_core // Master Timer, Slave #9 // No longer used, replaced with simple_timer below - /* - wire [31:0] master_time; - timer timer - (.wb_clk_i(wb_clk),.rst_i(wb_rst), - .cyc_i(s9_cyc),.stb_i(s9_stb),.adr_i(s9_adr[4:2]), - .we_i(s9_we),.dat_i(s9_dat_o),.dat_o(s9_dat_i),.ack_o(s9_ack), - .sys_clk_i(dsp_clk),.master_time_i(master_time),.int_o(timer_int) ); - */ assign s9_ack = 0; // ///////////////////////////////////////////////////////////////////////// @@ -535,11 +515,26 @@ module u2plus_core assign sc_ack = 0; // ///////////////////////////////////////////////////////////////////////// - // SD Card Reader / Writer, Slave #13 + // ICAP for reprogramming the FPGA, Slave #13 (D) + + s3a_icap_wb s3a_icap_wb + (.clk(wb_clk), .reset(wb_rst), .cyc_i(sd_cyc), .stb_i(sd_stb), + .we_i(sd_we), .ack_o(sd_ack), .dat_i(sd_dat_o), .dat_o(sd_dat_i)); + + // ///////////////////////////////////////////////////////////////////////// + // Unused -- Slave #14 (E) + + assign se_ack = 0; + + // ///////////////////////////////////////////////////////////////////////// + // SPI for Flash -- Slave #15 (F) + spi_top flash_spi + (.wb_clk_i(wb_clk),.wb_rst_i(wb_rst),.wb_adr_i(sf_adr[4:0]),.wb_dat_i(sf_dat_o), + .wb_dat_o(sf_dat_i),.wb_sel_i(sf_sel),.wb_we_i(sf_we),.wb_stb_i(sf_stb), + .wb_cyc_i(sf_cyc),.wb_ack_o(sf_ack),.wb_err_o(sf_err),.wb_int_o(spiflash_int), + .ss_pad_o(spiflash_cs), + .sclk_pad_o(spiflash_clk),.mosi_pad_o(spiflash_mosi),.miso_pad_i(spiflash_miso) ); - // Not used anymore - assign sd_ack = 0; - // ///////////////////////////////////////////////////////////////////////// // DSP RX wire [31:0] sample_rx, sample_tx; @@ -633,50 +628,6 @@ module u2plus_core .rx_occupied(ser_rx_occ),.rx_full(ser_rx_full),.rx_empty(ser_rx_empty), .serdes_link_up(serdes_link_up),.debug0(debug_serdes0), .debug1(debug_serdes1) ); - // /////////////////////////////////////////////////////////////////////////////////// - // External RAM Interface - - /* - localparam PAGE_SIZE = 10; // PAGE SIZE is in bytes, 10 = 1024 bytes - - wire [15:0] bus2ram, ram2bus; - wire [15:0] bridge_adr; - wire [1:0] bridge_sel; - wire bridge_stb, bridge_cyc, bridge_we, bridge_ack; - - wire [19:0] page; - wire [19:0] wb_ram_adr = {page[19:PAGE_SIZE],bridge_adr[PAGE_SIZE-1:0]}; - setting_reg #(.my_addr(6),.width(20)) sr_page (.clk(wb_clk),.rst(wb_rst),.strobe(set_stb),.addr(set_addr), - .in(set_data),.out(page),.changed()); - - wb_bridge_16_32 bridge - (.wb_clk(wb_clk),.wb_rst(wb_rst), - .A_cyc_i(se_cyc),.A_stb_i(se_stb),.A_we_i(se_we),.A_sel_i(se_sel), - .A_adr_i(se_adr),.A_dat_i(se_dat_o),.A_dat_o(se_dat_i),.A_ack_o(se_ack), - .B_cyc_o(bridge_cyc),.B_stb_o(bridge_stb),.B_we_o(bridge_we),.B_sel_o(bridge_sel), - .B_adr_o(bridge_adr),.B_dat_o(bus2ram),.B_dat_i(ram2bus),.B_ack_i(bridge_ack)); - - wb_zbt16_b wb_zbt16_b - (.clk(wb_clk),.rst(wb_rst), - .wb_adr_i(wb_ram_adr),.wb_dat_i(bus2ram),.wb_dat_o(ram2bus),.wb_sel_i(bridge_sel), - .wb_cyc_i(bridge_cyc),.wb_stb_i(bridge_stb),.wb_ack_o(bridge_ack),.wb_we_i(bridge_we), - .sram_clk(RAM_CLK),.sram_a(RAM_A),.sram_d(RAM_D[15:0]),.sram_we(RAM_WEn), - .sram_bw(),.sram_adv(RAM_LDn),.sram_ce(RAM_CENn),.sram_oe(RAM_OEn), - .sram_mode(),.sram_zz() ); - - assign RAM_CE1n = 0; - assign RAM_D[17:16] = 2'bzz; - */ - - // ///////////////////////////////////////////////////////////////////////// - // SPI for Flash -- Slave #2 - spi_top flash_spi - (.wb_clk_i(wb_clk),.wb_rst_i(wb_rst),.wb_adr_i(sf_adr[4:0]),.wb_dat_i(sf_dat_o), - .wb_dat_o(sf_dat_i),.wb_sel_i(sf_sel),.wb_we_i(sf_we),.wb_stb_i(sf_stb), - .wb_cyc_i(sf_cyc),.wb_ack_o(sf_ack),.wb_err_o(sf_err),.wb_int_o(spiflash_int), - .ss_pad_o(spiflash_cs), - .sclk_pad_o(spiflash_clk),.mosi_pad_o(spiflash_mosi),.miso_pad_i(spiflash_miso) ); - // ///////////////////////////////////////////////////////////////////////// // VITA Timing @@ -693,143 +644,3 @@ module u2plus_core assign debug_gpio_1 = 32'd0; endmodule // u2_core - -/* - // FIFO Level Debugging - reg [31:0] host_to_dsp_fifo,dsp_to_host_fifo,eth_mac_debug,serdes_to_dsp_fifo,dsp_to_serdes_fifo; - - always @(posedge dsp_clk) - serdes_to_dsp_fifo <= { {ser_rx_full,ser_rx_empty,ser_rx_occ[13:0]}, - {dsp_tx_full,dsp_tx_empty,dsp_tx_occ[13:0]} }; - - always @(posedge dsp_clk) - dsp_to_serdes_fifo <= { {ser_tx_full,ser_tx_empty,ser_tx_occ[13:0]}, - {dsp_rx_full,dsp_rx_empty,dsp_rx_occ[13:0]} }; - - always @(posedge dsp_clk) - host_to_dsp_fifo <= { {eth_rx_full,eth_rx_empty,eth_rx_occ[13:0]}, - {dsp_tx_full,dsp_tx_empty,dsp_tx_occ[13:0]} }; - - always @(posedge dsp_clk) - dsp_to_host_fifo <= { {eth_tx_full,eth_tx_empty,eth_tx_occ[13:0]}, - {dsp_rx_full,dsp_rx_empty,dsp_rx_occ[13:0]} }; - - always @(posedge dsp_clk) - eth_mac_debug <= { { 6'd0, GMII_TX_EN, GMII_RX_DV, debug_mac0[7:0]}, - {eth_rx_full2, eth_rx_empty2, eth_rx_occ2[13:0]} }; - - assign debug_clk[0] = GMII_RX_CLK; // wb_clk; - assign debug_clk[1] = dsp_clk; -*/ -/* - - wire mdio_cpy = MDIO; - assign debug = { { 1'b0, s6_stb, s6_ack, s6_we, s6_sel[3:0] }, - { s6_adr[15:8] }, - { s6_adr[7:0] }, - { 6'd0, mdio_cpy, MDC } }; -*/ -/* - assign debug = { { GMII_TXD }, - { 5'd0, GMII_TX_EN, GMII_TX_ER, GMII_GTX_CLK }, - { wr2_flags, rd2_flags }, - { 4'd0, wr2_ready_i, wr2_ready_o, rd2_ready_i, rd2_ready_o } }; - assign debug = { { GMII_RXD }, - { 5'd0, GMII_RX_DV, GMII_RX_ER, GMII_RX_CLK }, - { wr2_flags, rd2_flags }, - { GMII_TX_EN,3'd0, wr2_ready_i, wr2_ready_o, rd2_ready_i, rd2_ready_o } }; - */ - -// assign debug = debug_udp; - // assign debug = vrc_debug; -/* - assign debug_gpio_0 = { {pps_in, pps_int, 2'd0, vita_state}, - {2'd0, rx_dst_rdy, rx_src_rdy, rx_data[99:96]}, - {run_rx_d1, run_rx, strobe_rx, overrun, wr1_flags[3:0]} , - {wr1_ready_i, wr1_ready_o, rx1_src_rdy, rx1_dst_rdy, rx1_data[35:32]}}; -*/ -// assign debug_gpio_1 = {vita_time[63:32] }; - -/* - assign debug_gpio_1 = { { tx_f19_data[15:8] }, - { tx_f19_data[7:0] }, - { 3'd0, tx_f19_src_rdy, tx_f19_dst_rdy, tx_f19_data[18:16] }, - { 2'b0, rd2_ready_i, rd2_ready_o, rd2_flags } }; - */ - -// wire debug_mux; -// setting_reg #(.my_addr(5)) sr_debug (.clk(wb_clk),.rst(wb_rst),.strobe(set_stb),.addr(set_addr), -// .in(set_data),.out(debug_mux),.changed()); - -//assign debug = debug_mux ? host_to_dsp_fifo : dsp_to_host_fifo; -//assign debug = debug_mux ? serdes_to_dsp_fifo : dsp_to_serdes_fifo; - -//assign debug = {{strobe_rx,/*adc_ovf_a*/ 1'b0,adc_a}, -// {run_rx,/*adc_ovf_b*/ 1'b0,adc_b}}; - -//assign debug = debug_tx_dsp; -//assign debug = debug_serdes0; - -//assign debug_gpio_0 = 0; //debug_serdes0; -//assign debug_gpio_1 = 0; //debug_serdes1; - -// assign debug={{3'b0, wb_clk, wb_rst, dsp_rst, por, config_success}, -// {8'b0}, -// {3'b0,ram_loader_ack, ram_loader_stb, ram_loader_we,ram_loader_rst,ram_loader_done }, -// {cpld_start,cpld_mode,cpld_done,cpld_din,cpld_clk,cpld_detached,cpld_misc,cpld_init_b} }; - -//assign debug = {dac_a,dac_b}; - -/* - assign debug = {{ram_loader_done, takeover, 6'd0}, - {1'b0, cpld_start_int, cpld_mode_int, cpld_done_int, sd_clk, sd_csn, sd_miso, sd_mosi}, - {8'd0}, - {cpld_start, cpld_mode, cpld_done, cpld_din, cpld_misc, cpld_detached, cpld_clk, cpld_init_b}}; */ - -/*assign debug = host_to_dsp_fifo; - assign debug_gpio_0 = eth_mac_debug; - assign debug_gpio_1 = 0; - */ -// Assign various commonly used debug buses. -/* - wire [31:0] debug_rx_1 = {uart_tx_o,GMII_TX_EN,strobe_rx,overrun,proc_int,buffer_int,timer_int,GMII_RX_DV, - irq[7:0], - GMII_RXD, - GMII_TXD}; - - wire [31:0] debug_rx_2 = { 5'd0, s8_we, s8_stb, s8_ack, debug_rx[23:0] }; - - wire [31:0] debug_time = {uart_tx_o, 7'b0, - irq[7:0], - 6'b0, GMII_RX_DV, GMII_TX_EN, - 4'b0, exp_pps_in, exp_pps_out, pps_in, pps_int}; - - wire [31:0] debug_irq = {uart_tx_o, iwb_adr, iwb_ack, - irq[7:0], - proc_int, 7'b0 }; - - wire [31:0] debug_eth = - {{uart_tx_o,proc_int,underrun,buffer_int,wr2_ready,wr2_error,wr2_done,wr2_write}, - {8'd0}, - {8'd0}, - {GMII_TX_EN,GMII_RX_DV,Rx_mac_empty,Rx_mac_rd,Rx_mac_err,Rx_mac_sop,Rx_mac_eop,wr2_full} }; - - assign debug_serdes0 = { { rd0_dat[7:0] }, - { ser_tx_clk, ser_tkmsb, ser_tklsb, rd0_sop, rd0_eop, rd0_read, rd0_error, rd0_done }, - { ser_t[15:8] }, - { ser_t[7:0] } }; - - assign debug_serdes1 = { {1'b0,proc_int,underrun,buffer_int,wr0_ready,wr0_error,wr0_done,wr0_write}, - { 1'b0, ser_rx_clk, ser_rkmsb, ser_rklsb, ser_enable, ser_prbsen, ser_loopen, ser_rx_en }, - { ser_r[15:8] }, - { ser_r[7:0] } }; - - assign debug_gpio_1 = {uart_tx_o,7'd0, - 3'd0,rd1_sop,rd1_eop,rd1_read,rd1_done,rd1_error, - debug_txc[15:0]}; - assign debug_gpio_1 = debug_rx; - assign debug_gpio_1 = debug_serdes1; - assign debug_gpio_1 = debug_eth; - - */ - -- cgit v1.2.3 From 8bac5fc488db2123b5ac713c52bbaa01b616e0eb Mon Sep 17 00:00:00 2001 From: Matt Ettus Date: Tue, 13 Jul 2010 11:50:54 -0700 Subject: separate boot ram, redone memory map, connected uart --- usrp2/control_lib/Makefile.srcs | 1 + usrp2/control_lib/bootram.v | 246 ++++++++++++++++++++++++ usrp2/opencores/aemb/rtl/verilog/aeMB_core_BE.v | 4 +- usrp2/top/u2plus/u2plus.v | 6 +- usrp2/top/u2plus/u2plus_core.v | 72 +++---- 5 files changed, 289 insertions(+), 40 deletions(-) create mode 100644 usrp2/control_lib/bootram.v diff --git a/usrp2/control_lib/Makefile.srcs b/usrp2/control_lib/Makefile.srcs index 60fb2516d..ad491b83d 100644 --- a/usrp2/control_lib/Makefile.srcs +++ b/usrp2/control_lib/Makefile.srcs @@ -44,4 +44,5 @@ longfifo.v \ shortfifo.v \ medfifo.v \ s3a_icap_wb.v \ +bootram.v \ )) diff --git a/usrp2/control_lib/bootram.v b/usrp2/control_lib/bootram.v new file mode 100644 index 000000000..648ccc9ed --- /dev/null +++ b/usrp2/control_lib/bootram.v @@ -0,0 +1,246 @@ + +// Boot RAM for S3A, 8KB, dual port + +// RAMB16BWE_S36_S36: 512 x 32 + 4 Parity bits byte-wide write Dual-Port RAM +// Spartan-3A Xilinx HDL Libraries Guide, version 10.1.1 + +module bootram + (input clk, + input [12:0] if_adr, + output [31:0] if_data, + + input [12:0] dwb_adr_i, + input [31:0] dwb_dat_i, + output [31:0] dwb_dat_o, + input dwb_we_i, + output reg dwb_ack_o, + input dwb_stb_i, + input [3:0] dwb_sel_i); + + wire [31:0] DOA0, DOA1, DOA2, DOA3; + wire [31:0] DOB0, DOB1, DOB2, DOB3; + wire ENB0, ENB1, ENB2, ENB3; + wire [3:0] WEB; + + assign if_data = if_adr[12] ? (if_adr[11] ? DOA3 : DOA2) : (if_adr[11] ? DOA1 : DOA0); + assign dwb_dat_o = dwb_adr_i[12] ? (dwb_adr_i[11] ? DOA3 : DOA2) : (dwb_adr_i[11] ? DOA1 : DOA0); + + always @(posedge clk) + if(dwb_stb_i & ~dwb_ack_o) + dwb_ack_o <= 1; + else + dwb_ack_o <= 0; + + assign ENB0 = dwb_stb_i & (dwb_adr_i[12:11] == 2'b00); + assign ENB1 = dwb_stb_i & (dwb_adr_i[12:11] == 2'b01); + assign ENB2 = dwb_stb_i & (dwb_adr_i[12:11] == 2'b10); + assign ENB3 = dwb_stb_i & (dwb_adr_i[12:11] == 2'b11); + + assign WEB = {4{dwb_we_i}} & dwb_sel_i; + + RAMB16BWE_S36_S36 + #(.INIT_A(36'h000000000), // Value of output RAM registers on Port A at startup + .INIT_B(36'h000000000), // Value of output RAM registers on Port B at startup + .SIM_COLLISION_CHECK("ALL"), // "NONE", "WARNING_ONLY", "GENERATE_X_ONLY", "ALL" + .SRVAL_A(36'h000000000), // Port A output value upon SSR assertion + .SRVAL_B(36'h000000000), // Port B output value upon SSR assertion + .WRITE_MODE_A("WRITE_FIRST"), // WRITE_FIRST, READ_FIRST or NO_CHANGE + .WRITE_MODE_B("WRITE_FIRST")) // WRITE_FIRST, READ_FIRST or NO_CHANGE + RAM0 + (.DOA(DOA0), // Port A 32-bit Data Output + .DOPA(), // Port A 4-bit Parity Output + .ADDRA(if_adr[10:2]), // Port A 9-bit Address Input + .CLKA(clk), // Port A 1-bit Clock + .DIA(32'd0), // Port A 32-bit Data Input + .DIPA(4'd0), // Port A 4-bit parity Input + .ENA(1'b1), // Port A 1-bit RAM Enable Input + .SSRA(1'b0), // Port A 1-bit Synchronous Set/Reset Input + .WEA(1'b0), // Port A 4-bit Write Enable Input + + .DOB(DOB0), // Port B 32-bit Data Output + .DOPB(), // Port B 4-bit Parity Output + .ADDRB(dwb_adr_i[10:2]), // Port B 9-bit Address Input + .CLKB(clk), // Port B 1-bit Clock + .DIB(dwb_dat_i), // Port B 32-bit Data Input + .DIPB(4'd0), // Port-B 4-bit parity Input + .ENB(ENB0), // Port B 1-bit RAM Enable Input + .SSRB(1'b0), // Port B 1-bit Synchronous Set/Reset Input + .WEB(WEB) // Port B 4-bit Write Enable Input + ); // End of RAMB16BWE_S36_S36_inst instantiation + + RAMB16BWE_S36_S36 + #(.INIT_A(36'h000000000), // Value of output RAM registers on Port A at startup + .INIT_B(36'h000000000), // Value of output RAM registers on Port B at startup + .SIM_COLLISION_CHECK("ALL"), // "NONE", "WARNING_ONLY", "GENERATE_X_ONLY", "ALL" + .SRVAL_A(36'h000000000), // Port A output value upon SSR assertion + .SRVAL_B(36'h000000000), // Port B output value upon SSR assertion + .WRITE_MODE_A("WRITE_FIRST"), // WRITE_FIRST, READ_FIRST or NO_CHANGE + .WRITE_MODE_B("WRITE_FIRST")) // WRITE_FIRST, READ_FIRST or NO_CHANGE + RAM1 + (.DOA(DOA1), // Port A 32-bit Data Output + .DOPA(), // Port A 4-bit Parity Output + .ADDRA(if_adr[10:2]), // Port A 9-bit Address Input + .CLKA(clk), // Port A 1-bit Clock + .DIA(32'd0), // Port A 32-bit Data Input + .DIPA(4'd0), // Port A 4-bit parity Input + .ENA(1'b1), // Port A 1-bit RAM Enable Input + .SSRA(1'b0), // Port A 1-bit Synchronous Set/Reset Input + .WEA(1'b0), // Port A 4-bit Write Enable Input + + .DOB(DOB1), // Port B 32-bit Data Output + .DOPB(), // Port B 4-bit Parity Output + .ADDRB(dwb_adr_i[10:2]), // Port B 9-bit Address Input + .CLKB(clk), // Port B 1-bit Clock + .DIB(dwb_dat_i), // Port B 32-bit Data Input + .DIPB(4'd0), // Port-B 4-bit parity Input + .ENB(ENB1), // Port B 1-bit RAM Enable Input + .SSRB(1'b0), // Port B 1-bit Synchronous Set/Reset Input + .WEB(WEB) // Port B 4-bit Write Enable Input + ); // End of RAMB16BWE_S36_S36_inst instantiation + + RAMB16BWE_S36_S36 + #(.INIT_A(36'h000000000), // Value of output RAM registers on Port A at startup + .INIT_B(36'h000000000), // Value of output RAM registers on Port B at startup + .SIM_COLLISION_CHECK("ALL"), // "NONE", "WARNING_ONLY", "GENERATE_X_ONLY", "ALL" + .SRVAL_A(36'h000000000), // Port A output value upon SSR assertion + .SRVAL_B(36'h000000000), // Port B output value upon SSR assertion + .WRITE_MODE_A("WRITE_FIRST"), // WRITE_FIRST, READ_FIRST or NO_CHANGE + .WRITE_MODE_B("WRITE_FIRST")) // WRITE_FIRST, READ_FIRST or NO_CHANGE + RAM2 + (.DOA(DOA2), // Port A 32-bit Data Output + .DOPA(), // Port A 4-bit Parity Output + .ADDRA(if_adr[10:2]), // Port A 9-bit Address Input + .CLKA(clk), // Port A 1-bit Clock + .DIA(32'd0), // Port A 32-bit Data Input + .DIPA(4'd0), // Port A 4-bit parity Input + .ENA(1'b1), // Port A 1-bit RAM Enable Input + .SSRA(1'b0), // Port A 1-bit Synchronous Set/Reset Input + .WEA(1'b0), // Port A 4-bit Write Enable Input + + .DOB(DOB2), // Port B 32-bit Data Output + .DOPB(), // Port B 4-bit Parity Output + .ADDRB(dwb_adr_i[10:2]), // Port B 9-bit Address Input + .CLKB(clk), // Port B 1-bit Clock + .DIB(dwb_dat_i), // Port B 32-bit Data Input + .DIPB(4'd0), // Port-B 4-bit parity Input + .ENB(ENB2), // Port B 1-bit RAM Enable Input + .SSRB(1'b0), // Port B 1-bit Synchronous Set/Reset Input + .WEB(WEB) // Port B 4-bit Write Enable Input + ); // End of RAMB16BWE_S36_S36_inst instantiation + + RAMB16BWE_S36_S36 + #(.INIT_A(36'h000000000), // Value of output RAM registers on Port A at startup + .INIT_B(36'h000000000), // Value of output RAM registers on Port B at startup + .SIM_COLLISION_CHECK("ALL"), // "NONE", "WARNING_ONLY", "GENERATE_X_ONLY", "ALL" + .SRVAL_A(36'h000000000), // Port A output value upon SSR assertion + .SRVAL_B(36'h000000000), // Port B output value upon SSR assertion + .WRITE_MODE_A("WRITE_FIRST"), // WRITE_FIRST, READ_FIRST or NO_CHANGE + .WRITE_MODE_B("WRITE_FIRST")) // WRITE_FIRST, READ_FIRST or NO_CHANGE + RAM3 + (.DOA(DOA3), // Port A 32-bit Data Output + .DOPA(), // Port A 4-bit Parity Output + .ADDRA(if_adr[10:2]), // Port A 9-bit Address Input + .CLKA(clk), // Port A 1-bit Clock + .DIA(32'd0), // Port A 32-bit Data Input + .DIPA(4'd0), // Port A 4-bit parity Input + .ENA(1'b1), // Port A 1-bit RAM Enable Input + .SSRA(1'b0), // Port A 1-bit Synchronous Set/Reset Input + .WEA(1'b0), // Port A 4-bit Write Enable Input + + .DOB(DOB3), // Port B 32-bit Data Output + .DOPB(), // Port B 4-bit Parity Output + .ADDRB(dwb_adr_i[10:2]), // Port B 9-bit Address Input + .CLKB(clk), // Port B 1-bit Clock + .DIB(dwb_dat_i), // Port B 32-bit Data Input + .DIPB(4'd0), // Port-B 4-bit parity Input + .ENB(ENB3), // Port B 1-bit RAM Enable Input + .SSRB(1'b0), // Port B 1-bit Synchronous Set/Reset Input + .WEB(WEB) // Port B 4-bit Write Enable Input + ); // End of RAMB16BWE_S36_S36_inst instantiation + +endmodule // bootram + +/* + // The following INIT_xx declarations specify the initial contents of the RAM + // Address 0 to 127 + .INIT_00(256’h00000000_00000000_00000000_00000000_00000000_00000000_00000000_00000000), + .INIT_01(256’h00000000_00000000_00000000_00000000_00000000_00000000_00000000_00000000), + .INIT_02(256’h00000000_00000000_00000000_00000000_00000000_00000000_00000000_00000000), + .INIT_03(256’h00000000_00000000_00000000_00000000_00000000_00000000_00000000_00000000), + .INIT_04(256’h00000000_00000000_00000000_00000000_00000000_00000000_00000000_00000000), + .INIT_05(256’h00000000_00000000_00000000_00000000_00000000_00000000_00000000_00000000), + .INIT_06(256’h00000000_00000000_00000000_00000000_00000000_00000000_00000000_00000000), + .INIT_07(256’h00000000_00000000_00000000_00000000_00000000_00000000_00000000_00000000), + .INIT_08(256’h00000000_00000000_00000000_00000000_00000000_00000000_00000000_00000000), + .INIT_09(256’h00000000_00000000_00000000_00000000_00000000_00000000_00000000_00000000), + .INIT_0A(256’h00000000_00000000_00000000_00000000_00000000_00000000_00000000_00000000), + .INIT_0B(256’h00000000_00000000_00000000_00000000_00000000_00000000_00000000_00000000), + .INIT_0C(256’h00000000_00000000_00000000_00000000_00000000_00000000_00000000_00000000), + .INIT_0D(256’h00000000_00000000_00000000_00000000_00000000_00000000_00000000_00000000), + .INIT_0E(256’h00000000_00000000_00000000_00000000_00000000_00000000_00000000_00000000), + .INIT_0F(256’h00000000_00000000_00000000_00000000_00000000_00000000_00000000_00000000), + // Address 128 to 255 + .INIT_10(256’h00000000_00000000_00000000_00000000_00000000_00000000_00000000_00000000), + .INIT_11(256’h00000000_00000000_00000000_00000000_00000000_00000000_00000000_00000000), + .INIT_12(256’h00000000_00000000_00000000_00000000_00000000_00000000_00000000_00000000), + .INIT_13(256’h00000000_00000000_00000000_00000000_00000000_00000000_00000000_00000000), + .INIT_14(256’h00000000_00000000_00000000_00000000_00000000_00000000_00000000_00000000), + .INIT_15(256’h00000000_00000000_00000000_00000000_00000000_00000000_00000000_00000000), + .INIT_16(256’h00000000_00000000_00000000_00000000_00000000_00000000_00000000_00000000), + .INIT_17(256’h00000000_00000000_00000000_00000000_00000000_00000000_00000000_00000000), + .INIT_18(256’h00000000_00000000_00000000_00000000_00000000_00000000_00000000_00000000), + .INIT_19(256’h00000000_00000000_00000000_00000000_00000000_00000000_00000000_00000000), + .INIT_1A(256’h00000000_00000000_00000000_00000000_00000000_00000000_00000000_00000000), + .INIT_1B(256’h00000000_00000000_00000000_00000000_00000000_00000000_00000000_00000000), + .INIT_1C(256’h00000000_00000000_00000000_00000000_00000000_00000000_00000000_00000000), + .INIT_1D(256’h00000000_00000000_00000000_00000000_00000000_00000000_00000000_00000000), + .INIT_1E(256’h00000000_00000000_00000000_00000000_00000000_00000000_00000000_00000000), + .INIT_1F(256’h00000000_00000000_00000000_00000000_00000000_00000000_00000000_00000000), + // Address 256 to 383 + .INIT_20(256’h00000000_00000000_00000000_00000000_00000000_00000000_00000000_00000000), + .INIT_21(256’h00000000_00000000_00000000_00000000_00000000_00000000_00000000_00000000), + .INIT_22(256’h00000000_00000000_00000000_00000000_00000000_00000000_00000000_00000000), + .INIT_23(256’h00000000_00000000_00000000_00000000_00000000_00000000_00000000_00000000), + .INIT_24(256’h00000000_00000000_00000000_00000000_00000000_00000000_00000000_00000000), + .INIT_25(256’h00000000_00000000_00000000_00000000_00000000_00000000_00000000_00000000), + .INIT_26(256’h00000000_00000000_00000000_00000000_00000000_00000000_00000000_00000000), + .INIT_27(256’h00000000_00000000_00000000_00000000_00000000_00000000_00000000_00000000), + .INIT_28(256’h00000000_00000000_00000000_00000000_00000000_00000000_00000000_00000000), + .INIT_29(256’h00000000_00000000_00000000_00000000_00000000_00000000_00000000_00000000), + .INIT_2A(256’h00000000_00000000_00000000_00000000_00000000_00000000_00000000_00000000), + .INIT_2B(256’h00000000_00000000_00000000_00000000_00000000_00000000_00000000_00000000), + .INIT_2C(256’h00000000_00000000_00000000_00000000_00000000_00000000_00000000_00000000), + .INIT_2D(256’h00000000_00000000_00000000_00000000_00000000_00000000_00000000_00000000), + .INIT_2E(256’h00000000_00000000_00000000_00000000_00000000_00000000_00000000_00000000), + .INIT_2F(256’h00000000_00000000_00000000_00000000_00000000_00000000_00000000_00000000), + // Address 384 to 511 + .INIT_30(256’h00000000_00000000_00000000_00000000_00000000_00000000_00000000_00000000), + .INIT_31(256’h00000000_00000000_00000000_00000000_00000000_00000000_00000000_00000000), + .INIT_32(256’h00000000_00000000_00000000_00000000_00000000_00000000_00000000_00000000), + .INIT_33(256’h00000000_00000000_00000000_00000000_00000000_00000000_00000000_00000000), + .INIT_34(256’h00000000_00000000_00000000_00000000_00000000_00000000_00000000_00000000), + .INIT_35(256’h00000000_00000000_00000000_00000000_00000000_00000000_00000000_00000000), + .INIT_36(256’h00000000_00000000_00000000_00000000_00000000_00000000_00000000_00000000), + .INIT_37(256’h00000000_00000000_00000000_00000000_00000000_00000000_00000000_00000000), + .INIT_38(256’h00000000_00000000_00000000_00000000_00000000_00000000_00000000_00000000), + .INIT_39(256’h00000000_00000000_00000000_00000000_00000000_00000000_00000000_00000000), + .INIT_3A(256’h00000000_00000000_00000000_00000000_00000000_00000000_00000000_00000000), + .INIT_3B(256’h00000000_00000000_00000000_00000000_00000000_00000000_00000000_00000000), + .INIT_3C(256’h00000000_00000000_00000000_00000000_00000000_00000000_00000000_00000000), + .INIT_3D(256’h00000000_00000000_00000000_00000000_00000000_00000000_00000000_00000000), + .INIT_3E(256’h00000000_00000000_00000000_00000000_00000000_00000000_00000000_00000000), + .INIT_3F(256’h00000000_00000000_00000000_00000000_00000000_00000000_00000000_00000000), + // The next set of INITP_xx are for the parity bits + // Address 0 to 127 + .INITP_00(256’h0000000000000000000000000000000000000000000000000000000000000000), + .INITP_01(256’h0000000000000000000000000000000000000000000000000000000000000000), + // Address 128 to 255 + .INITP_02(256’h0000000000000000000000000000000000000000000000000000000000000000), + .INITP_03(256’h0000000000000000000000000000000000000000000000000000000000000000), + // Address 256 to 383 + .INITP_04(256’h0000000000000000000000000000000000000000000000000000000000000000), + .INITP_05(256’h0000000000000000000000000000000000000000000000000000000000000000), + // Address 384 to 511 + .INITP_06(256’h0000000000000000000000000000000000000000000000000000000000000000), + .INITP_07(256’h0000000000000000000000000000000000000000000000000000000000000000) +*/ diff --git a/usrp2/opencores/aemb/rtl/verilog/aeMB_core_BE.v b/usrp2/opencores/aemb/rtl/verilog/aeMB_core_BE.v index 38ca3a023..6c066d5d9 100644 --- a/usrp2/opencores/aemb/rtl/verilog/aeMB_core_BE.v +++ b/usrp2/opencores/aemb/rtl/verilog/aeMB_core_BE.v @@ -11,7 +11,7 @@ module aeMB_core_BE (input sys_clk_i, input sys_rst_i, // Instruction port - output [14:0] if_adr, + output [ISIZ-1:0] if_adr, input [31:0] if_dat, // Data port output dwb_we_o, @@ -34,7 +34,7 @@ module aeMB_core_BE assign dwb_cyc_o = dwb_stb_o; assign iwb_ack_i = 1'b1; - assign if_adr = iwb_adr_o[14:0]; + assign if_adr = iwb_adr_o[ISIZ-1:0]; assign iwb_dat_i = if_dat; // Note some "wishbone" instruction fetch signals pruned on external interface diff --git a/usrp2/top/u2plus/u2plus.v b/usrp2/top/u2plus/u2plus.v index 32dfb0331..ac0f6bbd1 100644 --- a/usrp2/top/u2plus/u2plus.v +++ b/usrp2/top/u2plus/u2plus.v @@ -364,8 +364,8 @@ module u2plus .RAM_WEn (RAM_WEn), .RAM_OEn (RAM_OEn), .RAM_LDn (RAM_LDn), - .uart_tx_o (TXD[0]), - .uart_rx_i (RXD[0]), + .uart_tx_o (TXD[1]), + .uart_rx_i (RXD[1]), .uart_baud_o (), .sim_mode (1'b0), .clock_divider (2), @@ -377,6 +377,6 @@ module u2plus assign RAM_ZZ = 1; assign RAM_BWn = 4'b1111; - assign TXD[2:1] = 2'b11; + assign TXD[3:2] = 2'b11; endmodule // u2plus diff --git a/usrp2/top/u2plus/u2plus_core.v b/usrp2/top/u2plus/u2plus_core.v index d49c461cb..bf6bf8b3e 100644 --- a/usrp2/top/u2plus/u2plus_core.v +++ b/usrp2/top/u2plus/u2plus_core.v @@ -3,7 +3,6 @@ // //////////////////////////////////////////////////////////////////////////////// module u2plus_core - #(parameter RAM_SIZE=32768) (// Clocks input dsp_clk, input wb_clk, @@ -191,23 +190,23 @@ module u2plus_core wire m0_err, m0_rty; wire m0_we,s0_we,s1_we,s2_we,s3_we,s4_we,s5_we,s6_we,s7_we,s8_we,s9_we,sa_we,sb_we,sc_we,sd_we,se_we,sf_we; - wb_1master #(.decode_w(6), - .s0_addr(6'b0000_00),.s0_mask(6'b100000), - .s1_addr(6'b1000_00),.s1_mask(6'b110000), - .s2_addr(6'b1100_00),.s2_mask(6'b111111), - .s3_addr(6'b1100_01),.s3_mask(6'b111111), - .s4_addr(6'b1100_10),.s4_mask(6'b111111), - .s5_addr(6'b1100_11),.s5_mask(6'b111111), - .s6_addr(6'b1101_00),.s6_mask(6'b111111), - .s7_addr(6'b1101_01),.s7_mask(6'b111111), - .s8_addr(6'b1101_10),.s8_mask(6'b111111), - .s9_addr(6'b1101_11),.s9_mask(6'b111111), - .sa_addr(6'b1110_00),.sa_mask(6'b111111), - .sb_addr(6'b1110_01),.sb_mask(6'b111111), - .sc_addr(6'b1110_10),.sc_mask(6'b111111), - .sd_addr(6'b1110_11),.sd_mask(6'b111111), - .se_addr(6'b1111_00),.se_mask(6'b111111), - .sf_addr(6'b1111_01),.sf_mask(6'b111111), + wb_1master #(.decode_w(8), + .s0_addr(8'b0000_0000),.s0_mask(8'b1110_0000), // 0-8K, Boot RAM + .s1_addr(8'b0100_0000),.s1_mask(8'b1100_0000), // 16K-32K, Buffer Pool + .s2_addr(8'b0011_0000),.s2_mask(8'b1111_1111), // SPI + .s3_addr(8'b0011_0001),.s3_mask(8'b1111_1111), // I2C + .s4_addr(8'b0011_0010),.s4_mask(8'b1111_1111), // GPIO + .s5_addr(8'b0011_0011),.s5_mask(8'b1111_1111), // Readback + .s6_addr(8'b0011_0100),.s6_mask(8'b1111_1111), // Ethernet MAC + .s7_addr(8'b0010_0000),.s7_mask(8'b1111_0000), // 8-12K, Settings Bus (only uses 1K) + .s8_addr(8'b0011_0101),.s8_mask(8'b1111_1111), // PIC + .s9_addr(8'b0011_0110),.s9_mask(8'b1111_1111), // Unused + .sa_addr(8'b0011_0111),.sa_mask(8'b1111_1111), // UART + .sb_addr(8'b0011_1000),.sb_mask(8'b1111_1111), // ATR + .sc_addr(8'b0011_1001),.sc_mask(8'b1111_1111), // Unused + .sd_addr(8'b0011_1010),.sd_mask(8'b1111_1111), // ICAP + .se_addr(8'b0011_1011),.se_mask(8'b1111_1111), // SPI Flash + .sf_addr(8'b1000_0000),.sf_mask(8'b1000_0000), // 32-64K, Main RAM .dw(dw),.aw(aw),.sw(sw)) wb_1master (.clk_i(wb_clk),.rst_i(wb_rst), .m0_dat_o(m0_dat_o),.m0_ack_o(m0_ack),.m0_err_o(m0_err),.m0_rty_o(m0_rty),.m0_dat_i(m0_dat_i), @@ -251,7 +250,7 @@ module u2plus_core // ///////////////////////////////////////////////////////////////////////// // Processor wire [31:0] if_dat; - wire [14:0] if_adr; + wire [15:0] if_adr; aeMB_core_BE #(.ISIZ(16),.DSIZ(16),.MUL(0),.BSF(1)) aeMB (.sys_clk_i(wb_clk), .sys_rst_i(wb_rst), @@ -267,15 +266,23 @@ module u2plus_core assign bus_error = m0_err | m0_rty; // ///////////////////////////////////////////////////////////////////////// - // Dual Ported RAM -- D-Port is Slave #0 on main Wishbone + // Dual Ported Boot RAM -- D-Port is Slave #0 on main Wishbone + // Dual Ported Main RAM -- D-Port is Slave #F on main Wishbone // I-port connects directly to processor - wire flush_icache; - ram_harvard2 #(.AWIDTH(15),.RAM_SIZE(RAM_SIZE)) - sys_ram(.wb_clk_i(wb_clk),.wb_rst_i(wb_rst), - .if_adr(if_adr), .if_data(if_dat), - .dwb_adr_i(s0_adr[14:0]), .dwb_dat_i(s0_dat_o), .dwb_dat_o(s0_dat_i), - .dwb_we_i(s0_we), .dwb_ack_o(s0_ack), .dwb_stb_i(s0_stb), .dwb_sel_i(s0_sel)); + wire [31:0] if_dat_boot, if_dat_main; + assign if_dat = if_adr[15] ? if_dat_main : if_dat_boot; + + bootram bootram(.clk(wb_clk), + .if_adr(if_adr[12:0]), .if_data(if_dat_boot), + .dwb_adr_i(s0_adr[12:0]), .dwb_dat_i(s0_dat_o), .dwb_dat_o(s0_dat_i), + .dwb_we_i(s0_we), .dwb_ack_o(s0_ack), .dwb_stb_i(s0_stb), .dwb_sel_i(s0_sel)); + + ram_harvard2 #(.AWIDTH(15),.RAM_SIZE(32768)) + sys_ram(.wb_clk_i(wb_clk),.wb_rst_i(wb_rst), + .if_adr(if_adr[14:0]), .if_data(if_dat_main), + .dwb_adr_i(sf_adr[14:0]), .dwb_dat_i(sf_dat_o), .dwb_dat_o(sf_dat_i), + .dwb_we_i(sf_we), .dwb_ack_o(sf_ack), .dwb_stb_i(sf_stb), .dwb_sel_i(sf_sel)); // ///////////////////////////////////////////////////////////////////////// // Buffer Pool, slave #1 @@ -522,16 +529,11 @@ module u2plus_core .we_i(sd_we), .ack_o(sd_ack), .dat_i(sd_dat_o), .dat_o(sd_dat_i)); // ///////////////////////////////////////////////////////////////////////// - // Unused -- Slave #14 (E) - - assign se_ack = 0; - - // ///////////////////////////////////////////////////////////////////////// - // SPI for Flash -- Slave #15 (F) + // SPI for Flash -- Slave #14 (E) spi_top flash_spi - (.wb_clk_i(wb_clk),.wb_rst_i(wb_rst),.wb_adr_i(sf_adr[4:0]),.wb_dat_i(sf_dat_o), - .wb_dat_o(sf_dat_i),.wb_sel_i(sf_sel),.wb_we_i(sf_we),.wb_stb_i(sf_stb), - .wb_cyc_i(sf_cyc),.wb_ack_o(sf_ack),.wb_err_o(sf_err),.wb_int_o(spiflash_int), + (.wb_clk_i(wb_clk),.wb_rst_i(wb_rst),.wb_adr_i(se_adr[4:0]),.wb_dat_i(se_dat_o), + .wb_dat_o(se_dat_i),.wb_sel_i(se_sel),.wb_we_i(se_we),.wb_stb_i(se_stb), + .wb_cyc_i(se_cyc),.wb_ack_o(se_ack),.wb_err_o(se_err),.wb_int_o(spiflash_int), .ss_pad_o(spiflash_cs), .sclk_pad_o(spiflash_clk),.mosi_pad_o(spiflash_mosi),.miso_pad_i(spiflash_miso) ); -- cgit v1.2.3 From 703c20be608b2a15ab68a6c15514facdeac527cc Mon Sep 17 00:00:00 2001 From: Matt Ettus Date: Tue, 13 Jul 2010 14:47:25 -0700 Subject: includes led blinker in bootram --- usrp2/top/u2plus/u2plus_core.v | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/usrp2/top/u2plus/u2plus_core.v b/usrp2/top/u2plus/u2plus_core.v index bf6bf8b3e..601f1a1bb 100644 --- a/usrp2/top/u2plus/u2plus_core.v +++ b/usrp2/top/u2plus/u2plus_core.v @@ -277,7 +277,10 @@ module u2plus_core .if_adr(if_adr[12:0]), .if_data(if_dat_boot), .dwb_adr_i(s0_adr[12:0]), .dwb_dat_i(s0_dat_o), .dwb_dat_o(s0_dat_i), .dwb_we_i(s0_we), .dwb_ack_o(s0_ack), .dwb_stb_i(s0_stb), .dwb_sel_i(s0_sel)); - + +defparam bootram.RAM0.INIT_00=256'hbc32fff0_aa43502b_b00000fe_30630001_80000000_10600000_a48500ff_10a00000; +defparam bootram.RAM0.INIT_01=256'ha48500ff_b810ffd0_f880200c_30a50001_10830000_308000ff_be23000c_a4640001; + ram_harvard2 #(.AWIDTH(15),.RAM_SIZE(32768)) sys_ram(.wb_clk_i(wb_clk),.wb_rst_i(wb_rst), .if_adr(if_adr[14:0]), .if_data(if_dat_main), @@ -640,8 +643,9 @@ module u2plus_core // ///////////////////////////////////////////////////////////////////////////////////////// // Debug Pins - assign debug_clk = 2'b00; - assign debug = 32'd0; + assign debug_clk = {dsp_clk, wb_clk}; + assign debug = if_dat; + assign debug_gpio_0 = 32'd0; assign debug_gpio_1 = 32'd0; -- cgit v1.2.3 From ee7208f5ea0e3105c1a45d37cc7709a665dc07b2 Mon Sep 17 00:00:00 2001 From: Matt Ettus Date: Tue, 13 Jul 2010 20:24:25 -0700 Subject: attach the correct data port --- usrp2/control_lib/bootram.v | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/usrp2/control_lib/bootram.v b/usrp2/control_lib/bootram.v index 648ccc9ed..00c604f20 100644 --- a/usrp2/control_lib/bootram.v +++ b/usrp2/control_lib/bootram.v @@ -23,14 +23,14 @@ module bootram wire [3:0] WEB; assign if_data = if_adr[12] ? (if_adr[11] ? DOA3 : DOA2) : (if_adr[11] ? DOA1 : DOA0); - assign dwb_dat_o = dwb_adr_i[12] ? (dwb_adr_i[11] ? DOA3 : DOA2) : (dwb_adr_i[11] ? DOA1 : DOA0); + assign dwb_dat_o = dwb_adr_i[12] ? (dwb_adr_i[11] ? DOB3 : DOB2) : (dwb_adr_i[11] ? DOB1 : DOB0); always @(posedge clk) - if(dwb_stb_i & ~dwb_ack_o) - dwb_ack_o <= 1; - else + if(reset) dwb_ack_o <= 0; - + else + dwb_ack_o <= dwb_stb_i & ~dwb_ack_o; + assign ENB0 = dwb_stb_i & (dwb_adr_i[12:11] == 2'b00); assign ENB1 = dwb_stb_i & (dwb_adr_i[12:11] == 2'b01); assign ENB2 = dwb_stb_i & (dwb_adr_i[12:11] == 2'b10); -- cgit v1.2.3 From eddfcda0a2c84edd4818836e812c6a95ea44cb99 Mon Sep 17 00:00:00 2001 From: Matt Ettus Date: Tue, 13 Jul 2010 23:41:42 -0700 Subject: reset the ack signal --- usrp2/control_lib/bootram.v | 2 +- usrp2/top/u2plus/u2plus_core.v | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/usrp2/control_lib/bootram.v b/usrp2/control_lib/bootram.v index 00c604f20..5e527de90 100644 --- a/usrp2/control_lib/bootram.v +++ b/usrp2/control_lib/bootram.v @@ -5,7 +5,7 @@ // Spartan-3A Xilinx HDL Libraries Guide, version 10.1.1 module bootram - (input clk, + (input clk, input reset, input [12:0] if_adr, output [31:0] if_data, diff --git a/usrp2/top/u2plus/u2plus_core.v b/usrp2/top/u2plus/u2plus_core.v index 601f1a1bb..0470e6e9e 100644 --- a/usrp2/top/u2plus/u2plus_core.v +++ b/usrp2/top/u2plus/u2plus_core.v @@ -273,7 +273,7 @@ module u2plus_core wire [31:0] if_dat_boot, if_dat_main; assign if_dat = if_adr[15] ? if_dat_main : if_dat_boot; - bootram bootram(.clk(wb_clk), + bootram bootram(.clk(wb_clk), .reset(wb_rst), .if_adr(if_adr[12:0]), .if_data(if_dat_boot), .dwb_adr_i(s0_adr[12:0]), .dwb_dat_i(s0_dat_o), .dwb_dat_o(s0_dat_i), .dwb_we_i(s0_we), .dwb_ack_o(s0_ack), .dwb_stb_i(s0_stb), .dwb_sel_i(s0_sel)); -- cgit v1.2.3 From 3ac97f05c32942ba06a88c39f5d16edd51ae6658 Mon Sep 17 00:00:00 2001 From: nick Date: Wed, 14 Jul 2010 09:35:40 -0700 Subject: just local commit before updating w/matt's fix --- usrp2/top/u2plus/u2plus_core.v | 50 +++++++++++++++++++++++++++++++++++++----- 1 file changed, 45 insertions(+), 5 deletions(-) diff --git a/usrp2/top/u2plus/u2plus_core.v b/usrp2/top/u2plus/u2plus_core.v index 601f1a1bb..579e946e8 100644 --- a/usrp2/top/u2plus/u2plus_core.v +++ b/usrp2/top/u2plus/u2plus_core.v @@ -278,8 +278,46 @@ module u2plus_core .dwb_adr_i(s0_adr[12:0]), .dwb_dat_i(s0_dat_o), .dwb_dat_o(s0_dat_i), .dwb_we_i(s0_we), .dwb_ack_o(s0_ack), .dwb_stb_i(s0_stb), .dwb_sel_i(s0_sel)); -defparam bootram.RAM0.INIT_00=256'hbc32fff0_aa43502b_b00000fe_30630001_80000000_10600000_a48500ff_10a00000; -defparam bootram.RAM0.INIT_01=256'ha48500ff_b810ffd0_f880200c_30a50001_10830000_308000ff_be23000c_a4640001; +////blinkenlights v0.1 +//defparam bootram.RAM0.INIT_00=256'hbc32fff0_aa43502b_b00000fe_30630001_80000000_10600000_a48500ff_10a00000; +//defparam bootram.RAM0.INIT_01=256'ha48500ff_b810ffd0_f880200c_30a50001_10830000_308000ff_be23000c_a4640001; + +////ICAP test v0.1 +defparam bootram.RAM0.INIT_00=256'h00000000_00000000_00000000_b8080234_00000000_b8080348_00000000_b8080050; +defparam bootram.RAM0.INIT_01=256'h00000000_00000000_00000000_00000000_00000000_00000000_00000000_b8080350; +defparam bootram.RAM0.INIT_02=256'h3020ffe0_b0000000_304003f8_31a00430_00000000_00000000_00000000_00000000; +defparam bootram.RAM0.INIT_03=256'h3021ffe4_e060f800_b0000000_b8000000_30a30000_b9f40198_80000000_b9f400cc; +defparam bootram.RAM0.INIT_04=256'he8830000_e8600400_80000000_99fc2000_f8600400_b8000044_bc030014_f9e10000; +defparam bootram.RAM0.INIT_05=256'h80000000_99fc1800_30a00428_bc030010_30600000_b0000000_30630004_be24ffec; +defparam bootram.RAM0.INIT_06=256'h30600000_b0000000_3021001c_b60f0008_e9e10000_f060f800_b0000000_30600001; +defparam bootram.RAM0.INIT_07=256'h80000000_99fc1800_bc03000c_30c0f804_b0000000_30a00428_f9e10000_3021ffe4; +defparam bootram.RAM0.INIT_08=256'h80000000_99fc2000_bc04000c_30a0042c_bc030014_30800000_b0000000_e860042c; +defparam bootram.RAM0.INIT_09=256'h06463800_20e00430_20c00430_f9e10000_2021ffec_3021001c_b60f0008_e9e10000; +defparam bootram.RAM0.INIT_0A=256'hb0000000_20c0f800_b0000000_bc92fff4_06463800_20c60004_f8060000_bc720014; +defparam bootram.RAM0.INIT_0B=256'hb9f401e4_bc92fff4_06463800_20c60004_f8060000_bc720014_06463800_20e0f81c; +defparam bootram.RAM0.INIT_0C=256'h32630000_20a00000_b9f4002c_20e00000_20c00000_80000000_b9f40224_80000000; +defparam bootram.RAM0.INIT_0D=256'h20210014_b60f0008_30730000_c9e10000_80000000_b9f401b0_80000000_b9f4022c; +defparam bootram.RAM0.INIT_0E=256'hbc32fff0_aa434b40_b000004c_30630001_80000000_10600000_a48500ff_10a00000; +defparam bootram.RAM0.INIT_0F=256'ha48500ff_b810ffd0_f880200c_30a50001_10830000_308000ff_be23000c_a4640001; +defparam bootram.RAM0.INIT_10=256'hf8803500_30800012_f8603508_3060ffff_80000000_b9f4fe68_f9e10000_3021ffe4; +defparam bootram.RAM0.INIT_11=256'hf8610020_f9e10000_3021ffac_80000000_b60f0008_f860350c_f8a03504_30a0ffef; +defparam bootram.RAM0.INIT_12=256'hf9610040_f941003c_f9210038_f9010034_f8e10030_f8c1002c_f8a10028_f8810024; +defparam bootram.RAM0.INIT_13=256'he8603508_e880350c_f961001c_fa610050_95608001_fa41004c_fa210048_f9810044; +defparam bootram.RAM0.INIT_14=256'h30a50001_bc230060_84732000_32600001_84841800_a863ffff_10a00000_30c00404; +defparam bootram.RAM0.INIT_15=256'he8810024_e8610020_e961001c_e9e10000_30c60004_be32ffec_aa450008_12739800; +defparam bootram.RAM0.INIT_16=256'he9610040_e941003c_e9210038_e9010034_e8e10030_e8c1002c_e8a10028_940bc001; +defparam bootram.RAM0.INIT_17=256'h99fc1800_e8660000_30210054_b62e0000_ea610050_ea41004c_ea210048_e9810044; +defparam bootram.RAM0.INIT_18=256'h16459003_22400007_64e50402_44632c00_30600001_b800ffa8_fa60350c_80000000; +defparam bootram.RAM0.INIT_19=256'h80000000_b60f0008_f8603508_84632000_f8c70404_e8603508_a883ffff_be520018; +defparam bootram.RAM0.INIT_1A=256'h80000000_b60f0008_80000000_b6910000_80000000_b6110000_80000000_b60f0008; +defparam bootram.RAM0.INIT_1B=256'haa43ffff_326003e8_f9e10000_fa61001c_3021ffe0_e86003e8_80000000_b60f0008; +defparam bootram.RAM0.INIT_1C=256'hea61001c_e9e10000_bc32fff0_aa43ffff_e8730000_3273fffc_99fc1800_bc120018; +defparam bootram.RAM0.INIT_1D=256'h80000000_b9f4ffb0_80000000_b9f4fd28_d9e00800_3021fff8_30210020_b60f0008; +defparam bootram.RAM0.INIT_1E=256'hc9e00800_80000000_b9f4fca0_d9e00800_3021fff8_30210008_b60f0008_c9e00800; +defparam bootram.RAM0.INIT_1F=256'h00000000_00000000_00000000_ffffffff_00000000_ffffffff_30210008_b60f0008; +defparam bootram.RAM0.INIT_20=256'h00000340_00000340_00000340_00000340_00000340_00000340_00000340_000003f4; +defparam bootram.RAM0.INIT_21=256'h00000000_00000000_00000000_00000000_00000000_00000000_00000000_00000340; + ram_harvard2 #(.AWIDTH(15),.RAM_SIZE(32768)) sys_ram(.wb_clk_i(wb_clk),.wb_rst_i(wb_rst), @@ -356,8 +394,9 @@ defparam bootram.RAM0.INIT_01=256'ha48500ff_b810ffd0_f880200c_30a50001_10830000_ nsgpio nsgpio(.clk_i(wb_clk),.rst_i(wb_rst), .cyc_i(s4_cyc),.stb_i(s4_stb),.adr_i(s4_adr[3:0]),.we_i(s4_we), .dat_i(s4_dat_o),.dat_o(s4_dat_i),.ack_o(s4_ack), - .atr(atr_lines),.debug_0(debug_gpio_0),.debug_1(debug_gpio_1), - .gpio( {io_tx,io_rx} ) ); + .atr(atr_lines),.debug_0(debug_gpio_0),.debug_1(debug_gpio_1) + //.gpio( {io_tx,io_rx} ) + ); // ///////////////////////////////////////////////////////////////////////// // Buffer Pool Status -- Slave #5 @@ -644,9 +683,10 @@ defparam bootram.RAM0.INIT_01=256'ha48500ff_b810ffd0_f880200c_30a50001_10830000_ // Debug Pins assign debug_clk = {dsp_clk, wb_clk}; - assign debug = if_dat; + assign debug = m0_dat_o; assign debug_gpio_0 = 32'd0; assign debug_gpio_1 = 32'd0; + assign {io_tx,io_rx} = {if_adr, m0_adr}; endmodule // u2_core -- cgit v1.2.3 From 5922f348e19fd477c311c0cadef4eb5d3a17d4c6 Mon Sep 17 00:00:00 2001 From: Matt Ettus Date: Wed, 14 Jul 2010 19:37:45 -0700 Subject: make loopback compile --- usrp2/top/u1e/u1e_core.v | 3 +++ 1 file changed, 3 insertions(+) diff --git a/usrp2/top/u1e/u1e_core.v b/usrp2/top/u1e/u1e_core.v index 787bf016c..5b60578ce 100644 --- a/usrp2/top/u1e/u1e_core.v +++ b/usrp2/top/u1e/u1e_core.v @@ -108,6 +108,9 @@ module u1e_core assign tx_underrun = 0; assign rx_overrun = 0; + + wire run_tx, run_rx, strobe_tx, strobe_rx, tx1_src_rdy, tx1_dst_rdy; + wire [31:0] debug_vtd, debug_vtc; `endif // LOOPBACK `ifdef TIMED -- cgit v1.2.3 From ed11f715c45ad129600e20849254e3899407002a Mon Sep 17 00:00:00 2001 From: Matt Ettus Date: Mon, 19 Jul 2010 13:33:32 -0700 Subject: proper selection of bank of ram for instruction, since the address has already incremented by the time the data is returned --- usrp2/control_lib/bootram.v | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/usrp2/control_lib/bootram.v b/usrp2/control_lib/bootram.v index 5e527de90..668012504 100644 --- a/usrp2/control_lib/bootram.v +++ b/usrp2/control_lib/bootram.v @@ -21,8 +21,12 @@ module bootram wire [31:0] DOB0, DOB1, DOB2, DOB3; wire ENB0, ENB1, ENB2, ENB3; wire [3:0] WEB; + + reg [1:0] delayed_if_bank; + always @(posedge clk) + delayed_if_bank <= if_adr[12:11]; - assign if_data = if_adr[12] ? (if_adr[11] ? DOA3 : DOA2) : (if_adr[11] ? DOA1 : DOA0); + assign if_data = delayed_if_bank[1] ? (delayed_if_bank[0] ? DOA3 : DOA2) : (delayed_if_bank[0] ? DOA1 : DOA0); assign dwb_dat_o = dwb_adr_i[12] ? (dwb_adr_i[11] ? DOB3 : DOB2) : (dwb_adr_i[11] ? DOB1 : DOB0); always @(posedge clk) -- cgit v1.2.3 From 814b06dff3ffccdf7d8f80fcb93d21d740612804 Mon Sep 17 00:00:00 2001 From: Matt Ettus Date: Mon, 19 Jul 2010 18:10:40 -0700 Subject: pushbutton now goes into interrupt controller, can be read from software. Normally high, goes low when pushed --- usrp2/top/u2plus/u2plus.v | 1 + usrp2/top/u2plus/u2plus_core.v | 5 +++-- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/usrp2/top/u2plus/u2plus.v b/usrp2/top/u2plus/u2plus.v index ac0f6bbd1..1feed1314 100644 --- a/usrp2/top/u2plus/u2plus.v +++ b/usrp2/top/u2plus/u2plus.v @@ -369,6 +369,7 @@ module u2plus .uart_baud_o (), .sim_mode (1'b0), .clock_divider (2), + .button (FPGA_RESET), .spiflash_cs (flash_cs), .spiflash_clk (flash_clk), .spiflash_miso (flash_miso), diff --git a/usrp2/top/u2plus/u2plus_core.v b/usrp2/top/u2plus/u2plus_core.v index 0470e6e9e..fa3fd9ff0 100644 --- a/usrp2/top/u2plus/u2plus_core.v +++ b/usrp2/top/u2plus/u2plus_core.v @@ -124,7 +124,8 @@ module u2plus_core output uart_baud_o, input sim_mode, input [3:0] clock_divider, - + input button, + output spiflash_cs, output spiflash_clk, input spiflash_miso, output spiflash_mosi ); @@ -473,7 +474,7 @@ defparam bootram.RAM0.INIT_01=256'ha48500ff_b810ffd0_f880200c_30a50001_10830000_ assign irq= {{8'b0}, {8'b0}, - {3'b0, periodic_int, clk_status, serdes_link_up, uart_tx_int, uart_rx_int}, + {2'b0, button, periodic_int, clk_status, serdes_link_up, uart_tx_int, uart_rx_int}, {pps_int,overrun,underrun,PHY_INTn,i2c_int,spi_int,onetime_int,buffer_int}}; pic pic(.clk_i(wb_clk),.rst_i(wb_rst),.cyc_i(s8_cyc),.stb_i(s8_stb),.adr_i(s8_adr[4:2]), -- cgit v1.2.3 From e73ffa9f830b070a6b897edfbcfadf35b6b1f0c6 Mon Sep 17 00:00:00 2001 From: Nick Foster Date: Tue, 20 Jul 2010 11:00:42 -0700 Subject: Fixed Makefile.common to correctly generate .mcs files. --- usrp2/top/Makefile.common | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/usrp2/top/Makefile.common b/usrp2/top/Makefile.common index d0435fa1e..2f6b5fde3 100644 --- a/usrp2/top/Makefile.common +++ b/usrp2/top/Makefile.common @@ -15,6 +15,7 @@ BASE_DIR = $(abspath ..) ISE_HELPER = xtclsh $(BASE_DIR)/tcl/ise_helper.tcl ISE_FILE = $(BUILD_DIR)/$(TOP_MODULE).$(ISE_EXT) BIN_FILE = $(BUILD_DIR)/$(TOP_MODULE).bin +BIT_FILE = $(BUILD_DIR)/$(TOP_MODULE).bit MCS_FILE = $(BUILD_DIR)/$(TOP_MODULE).mcs ################################################## @@ -53,6 +54,6 @@ $(BIN_FILE): $(ISE_FILE) touch $@ $(MCS_FILE): $(BIN_FILE) - promgen -w -spi -p mcs -o $(MCS_FILE) -s 4096 -u 0 $(BIN_FILE) + promgen -w -spi -p mcs -o $(MCS_FILE) -s 4096 -u 0 $(BIT_FILE) .EXPORT_ALL_VARIABLES: -- cgit v1.2.3 From 3b6b6e153084bf1d57231c0a565e2a0204467b04 Mon Sep 17 00:00:00 2001 From: Matt Ettus Date: Tue, 20 Jul 2010 11:16:41 -0700 Subject: connect SPI to adc, correct capitalization of SEN pins --- usrp2/top/u2plus/u2plus.v | 17 +++++++++-------- usrp2/top/u2plus/u2plus_core.v | 3 ++- 2 files changed, 11 insertions(+), 9 deletions(-) diff --git a/usrp2/top/u2plus/u2plus.v b/usrp2/top/u2plus/u2plus.v index 1feed1314..efa1c9390 100644 --- a/usrp2/top/u2plus/u2plus.v +++ b/usrp2/top/u2plus/u2plus.v @@ -346,14 +346,15 @@ module u2plus .sclk (sclk_int), .mosi (mosi), .miso (miso), - .sen_clk (sen_clk), - .sen_dac (sen_dac), - .sen_tx_db (sen_tx_db), - .sen_tx_adc (sen_tx_adc), - .sen_tx_dac (sen_tx_dac), - .sen_rx_db (sen_rx_db), - .sen_rx_adc (sen_rx_adc), - .sen_rx_dac (sen_rx_dac), + .sen_clk (SEN_CLK), + .sen_dac (SEN_DAC), + .sen_adc (SEN_ADC), + .sen_tx_db (SEN_TX_DB), + .sen_tx_adc (SEN_TX_ADC), + .sen_tx_dac (SEN_TX_DAC), + .sen_rx_db (SEN_RX_DB), + .sen_rx_adc (SEN_RX_ADC), + .sen_rx_dac (SEN_RX_DAC), .io_tx (io_tx[15:0]), .io_rx (io_rx[15:0]), .RAM_D (RAM_D), diff --git a/usrp2/top/u2plus/u2plus_core.v b/usrp2/top/u2plus/u2plus_core.v index 9e197cfbb..b71b34e8d 100644 --- a/usrp2/top/u2plus/u2plus_core.v +++ b/usrp2/top/u2plus/u2plus_core.v @@ -97,6 +97,7 @@ module u2plus_core input miso, output sen_clk, output sen_dac, + output sen_adc, output sen_tx_db, output sen_tx_adc, output sen_tx_dac, @@ -375,7 +376,7 @@ defparam bootram.RAM0.INIT_21=256'h00000000_00000000_00000000_00000000_00000000_ (.wb_clk_i(wb_clk),.wb_rst_i(wb_rst),.wb_adr_i(s2_adr[4:0]),.wb_dat_i(s2_dat_o), .wb_dat_o(s2_dat_i),.wb_sel_i(s2_sel),.wb_we_i(s2_we),.wb_stb_i(s2_stb), .wb_cyc_i(s2_cyc),.wb_ack_o(s2_ack),.wb_err_o(),.wb_int_o(spi_int), - .ss_pad_o({sen_tx_db,sen_tx_adc,sen_tx_dac,sen_rx_db,sen_rx_adc,sen_rx_dac,sen_dac,sen_clk}), + .ss_pad_o({sen_adc, sen_tx_db,sen_tx_adc,sen_tx_dac,sen_rx_db,sen_rx_adc,sen_rx_dac,sen_dac,sen_clk}), .sclk_pad_o(sclk),.mosi_pad_o(mosi),.miso_pad_i(miso) ); // ///////////////////////////////////////////////////////////////////////// -- cgit v1.2.3 From e161ad7c61d88cac0ec85a972a64af8fe4449fce Mon Sep 17 00:00:00 2001 From: Matt Ettus Date: Tue, 20 Jul 2010 13:22:02 -0700 Subject: reconnect the serial clock --- usrp2/top/u2plus/u2plus.v | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/usrp2/top/u2plus/u2plus.v b/usrp2/top/u2plus/u2plus.v index efa1c9390..e382b1aa4 100644 --- a/usrp2/top/u2plus/u2plus.v +++ b/usrp2/top/u2plus/u2plus.v @@ -343,7 +343,7 @@ module u2plus .clk_sel (clk_sel[1:0]), .clk_func (clk_func), .clk_status (clk_status), - .sclk (sclk_int), + .sclk (sclk), .mosi (mosi), .miso (miso), .sen_clk (SEN_CLK), -- cgit v1.2.3 From ef662b0c952f8e22ba760917f3781279471d69dc Mon Sep 17 00:00:00 2001 From: Matt Ettus Date: Wed, 21 Jul 2010 16:21:14 -0700 Subject: capitalization matching --- usrp2/top/u2plus/u2plus.v | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/usrp2/top/u2plus/u2plus.v b/usrp2/top/u2plus/u2plus.v index e382b1aa4..d1a9166ac 100644 --- a/usrp2/top/u2plus/u2plus.v +++ b/usrp2/top/u2plus/u2plus.v @@ -125,6 +125,10 @@ module u2plus input flash_miso ); + wire CLK_TO_MAC_int, CLK_TO_MAC_int2; + IBUFG phyclk (.O(CLK_TO_MAC_int), .I(CLK_TO_MAC)); + BUFG phyclk2 (.O(CLK_TO_MAC_int2), .I(CLK_TO_MAC_int)); + // FPGA-specific pins connections wire clk_fpga, dsp_clk, clk_div, dcm_out, wb_clk, clock_ready; @@ -289,7 +293,7 @@ module u2plus u2plus_core u2p_c(.dsp_clk (dsp_clk), .wb_clk (wb_clk), .clock_ready (clock_ready), - .clk_to_mac (clk_to_mac), + .clk_to_mac (CLK_TO_MAC), .pps_in (pps_in), .leds (leds_int), .debug (debug[31:0]), -- cgit v1.2.3 From 0e98b9cfe5183f284da698243c6e91b61572c41e Mon Sep 17 00:00:00 2001 From: Nick Foster Date: Tue, 27 Jul 2010 13:25:33 -0700 Subject: fix timing races on ADC and DAC pins --- usrp2/top/u2plus/u2plus.v | 30 ++++++++++++++++++++---------- 1 file changed, 20 insertions(+), 10 deletions(-) diff --git a/usrp2/top/u2plus/u2plus.v b/usrp2/top/u2plus/u2plus.v index e382b1aa4..df91d8875 100644 --- a/usrp2/top/u2plus/u2plus.v +++ b/usrp2/top/u2plus/u2plus.v @@ -23,8 +23,8 @@ module u2plus input ADCB_0_p, input ADCB_0_n, // DAC - output [15:0] DACA, - output [15:0] DACB, + output reg [15:0] DACA, + output reg [15:0] DACB, input DAC_LOCK, // unused for now // DB IO Pins @@ -149,9 +149,10 @@ module u2plus wire dcm_rst = 0; - wire [13:0] adc_a, adc_b; + `ifdef LVDS - capture_ddrlvds #(.WIDTH(14)) capture_ddrlvds + wire [13:0] adc_a, adc_b; + capture_ddrlvds #(.WIDTH(14)) capture_ddrlvds (.clk(dsp_clk), .ssclk_p(ADC_clkout_p), .ssclk_n(ADC_clkout_n), .in_p({{ADCA_12_p, ADCA_10_p, ADCA_8_p, ADCA_6_p, ADCA_4_p, ADCA_2_p, ADCA_0_p}, {ADCB_12_p, ADCB_10_p, ADCB_8_p, ADCB_6_p, ADCB_4_p, ADCB_2_p, ADCB_0_p}}), @@ -159,11 +160,14 @@ module u2plus {ADCB_12_n, ADCB_10_n, ADCB_8_n, ADCB_6_n, ADCB_4_n, ADCB_2_n, ADCB_0_n}}), .out({adc_a,adc_b})); `else - assign adc_a = {ADCA_12_p,ADCA_12_n, ADCA_10_p,ADCA_10_n, ADCA_8_p,ADCA_8_n, ADCA_6_p,ADCA_6_n, + reg [13:0] adc_a, adc_b; + always @(posedge dsp_clk) + begin + adc_a <= {ADCA_12_p,ADCA_12_n, ADCA_10_p,ADCA_10_n, ADCA_8_p,ADCA_8_n, ADCA_6_p,ADCA_6_n, ADCA_4_p,ADCA_4_n, ADCA_2_p,ADCA_2_n, ADCA_0_p,ADCA_0_n }; - assign adc_b = {ADCB_12_p,ADCB_12_n, ADCB_10_p,ADCB_10_n, ADCB_8_p,ADCB_8_n, ADCB_6_p,ADCB_6_n, + adc_b <= {ADCB_12_p,ADCB_12_n, ADCB_10_p,ADCB_10_n, ADCB_8_p,ADCB_8_n, ADCB_6_p,ADCB_6_n, ADCB_4_p,ADCB_4_n, ADCB_2_p,ADCB_2_n, ADCB_0_p,ADCB_0_n }; - + end `endif // !`ifdef LVDS // Handle Clocks @@ -286,10 +290,16 @@ module u2plus .S(0) // Synchronous preset input ); */ + + wire [15:0] dac_a_int, dac_b_int; + + always @(negedge dsp_clk) DACA <= dac_a_int; + always @(negedge dsp_clk) DACB <= dac_b_int; + u2plus_core u2p_c(.dsp_clk (dsp_clk), .wb_clk (wb_clk), .clock_ready (clock_ready), - .clk_to_mac (clk_to_mac), + .clk_to_mac (CLK_TO_MAC), .pps_in (pps_in), .leds (leds_int), .debug (debug[31:0]), @@ -331,8 +341,8 @@ module u2plus .adc_ovf_b (adc_ovf_b), .adc_on_b (adc_on_b), .adc_oe_b (adc_oe_b), - .dac_a (DACA[15:0]), - .dac_b (DACB[15:0]), + .dac_a (dac_a_int[15:0]), + .dac_b (dac_b_int[15:0]), .scl_pad_i (scl_pad_i), .scl_pad_o (scl_pad_o), .scl_pad_oen_o (scl_pad_oen_o), -- cgit v1.2.3 From fc99cdcb6c3980e386c5d0124086cbe13e345c97 Mon Sep 17 00:00:00 2001 From: Nick Foster Date: Wed, 28 Jul 2010 09:49:12 -0700 Subject: latest bootloader in core, fixed eth_led to be active high, connected eth clk --- usrp2/top/u2plus/u2plus.v | 4 +- usrp2/top/u2plus/u2plus_core.v | 202 +++++++++++++++++++++++++++++++++-------- 2 files changed, 167 insertions(+), 39 deletions(-) diff --git a/usrp2/top/u2plus/u2plus.v b/usrp2/top/u2plus/u2plus.v index c4db0d6cd..b349175de 100644 --- a/usrp2/top/u2plus/u2plus.v +++ b/usrp2/top/u2plus/u2plus.v @@ -218,7 +218,7 @@ module u2plus // LEDs are active low outputs wire [5:0] leds_int; - assign {leds,ETH_LED} = ~leds_int; // drive low to turn on leds + assign {leds,ETH_LED} = {6'b111110 ^ leds_int}; // drive low to turn on leds // SPI wire miso, mosi, sclk; @@ -303,7 +303,7 @@ module u2plus u2plus_core u2p_c(.dsp_clk (dsp_clk), .wb_clk (wb_clk), .clock_ready (clock_ready), - .clk_to_mac (CLK_TO_MAC), + .clk_to_mac (CLK_TO_MAC_int2), .pps_in (pps_in), .leds (leds_int), .debug (debug[31:0]), diff --git a/usrp2/top/u2plus/u2plus_core.v b/usrp2/top/u2plus/u2plus_core.v index b71b34e8d..6092f1ba3 100644 --- a/usrp2/top/u2plus/u2plus_core.v +++ b/usrp2/top/u2plus/u2plus_core.v @@ -285,41 +285,170 @@ module u2plus_core //defparam bootram.RAM0.INIT_01=256'ha48500ff_b810ffd0_f880200c_30a50001_10830000_308000ff_be23000c_a4640001; ////ICAP test v0.1 -defparam bootram.RAM0.INIT_00=256'h00000000_00000000_00000000_b8080234_00000000_b8080348_00000000_b8080050; -defparam bootram.RAM0.INIT_01=256'h00000000_00000000_00000000_00000000_00000000_00000000_00000000_b8080350; -defparam bootram.RAM0.INIT_02=256'h3020ffe0_b0000000_304003f8_31a00430_00000000_00000000_00000000_00000000; -defparam bootram.RAM0.INIT_03=256'h3021ffe4_e060f800_b0000000_b8000000_30a30000_b9f40198_80000000_b9f400cc; -defparam bootram.RAM0.INIT_04=256'he8830000_e8600400_80000000_99fc2000_f8600400_b8000044_bc030014_f9e10000; -defparam bootram.RAM0.INIT_05=256'h80000000_99fc1800_30a00428_bc030010_30600000_b0000000_30630004_be24ffec; +defparam bootram.RAM0.INIT_00=256'h00000000_00000000_00000000_b80801c0_00000000_b8080d54_00000000_b8080050; +defparam bootram.RAM0.INIT_01=256'h00000000_00000000_00000000_00000000_00000000_00000000_00000000_b8080d5c; +defparam bootram.RAM0.INIT_02=256'h3020ffe0_b0000000_30401448_31a01468_00000000_00000000_00000000_00000000; +defparam bootram.RAM0.INIT_03=256'h3021ffe4_e060f800_b0000000_b8000000_30a30000_b9f4047c_80000000_b9f400cc; +defparam bootram.RAM0.INIT_04=256'he8830000_e8601450_80000000_99fc2000_f8601450_b8000044_bc030014_f9e10000; +defparam bootram.RAM0.INIT_05=256'h80000000_99fc1800_30a01460_bc030010_30600000_b0000000_30630004_be24ffec; defparam bootram.RAM0.INIT_06=256'h30600000_b0000000_3021001c_b60f0008_e9e10000_f060f800_b0000000_30600001; -defparam bootram.RAM0.INIT_07=256'h80000000_99fc1800_bc03000c_30c0f804_b0000000_30a00428_f9e10000_3021ffe4; -defparam bootram.RAM0.INIT_08=256'h80000000_99fc2000_bc04000c_30a0042c_bc030014_30800000_b0000000_e860042c; -defparam bootram.RAM0.INIT_09=256'h06463800_20e00430_20c00430_f9e10000_2021ffec_3021001c_b60f0008_e9e10000; +defparam bootram.RAM0.INIT_07=256'h80000000_99fc1800_bc03000c_30c0f804_b0000000_30a01460_f9e10000_3021ffe4; +defparam bootram.RAM0.INIT_08=256'h80000000_99fc2000_bc04000c_30a01464_bc030014_30800000_b0000000_e8601464; +defparam bootram.RAM0.INIT_09=256'h06463800_20e01468_20c01468_f9e10000_2021ffec_3021001c_b60f0008_e9e10000; defparam bootram.RAM0.INIT_0A=256'hb0000000_20c0f800_b0000000_bc92fff4_06463800_20c60004_f8060000_bc720014; -defparam bootram.RAM0.INIT_0B=256'hb9f401e4_bc92fff4_06463800_20c60004_f8060000_bc720014_06463800_20e0f81c; -defparam bootram.RAM0.INIT_0C=256'h32630000_20a00000_b9f4002c_20e00000_20c00000_80000000_b9f40224_80000000; -defparam bootram.RAM0.INIT_0D=256'h20210014_b60f0008_30730000_c9e10000_80000000_b9f401b0_80000000_b9f4022c; -defparam bootram.RAM0.INIT_0E=256'hbc32fff0_aa434b40_b000004c_30630001_80000000_10600000_a48500ff_10a00000; -defparam bootram.RAM0.INIT_0F=256'ha48500ff_b810ffd0_f880200c_30a50001_10830000_308000ff_be23000c_a4640001; -defparam bootram.RAM0.INIT_10=256'hf8803500_30800012_f8603508_3060ffff_80000000_b9f4fe68_f9e10000_3021ffe4; -defparam bootram.RAM0.INIT_11=256'hf8610020_f9e10000_3021ffac_80000000_b60f0008_f860350c_f8a03504_30a0ffef; -defparam bootram.RAM0.INIT_12=256'hf9610040_f941003c_f9210038_f9010034_f8e10030_f8c1002c_f8a10028_f8810024; -defparam bootram.RAM0.INIT_13=256'he8603508_e880350c_f961001c_fa610050_95608001_fa41004c_fa210048_f9810044; -defparam bootram.RAM0.INIT_14=256'h30a50001_bc230060_84732000_32600001_84841800_a863ffff_10a00000_30c00404; -defparam bootram.RAM0.INIT_15=256'he8810024_e8610020_e961001c_e9e10000_30c60004_be32ffec_aa450008_12739800; -defparam bootram.RAM0.INIT_16=256'he9610040_e941003c_e9210038_e9010034_e8e10030_e8c1002c_e8a10028_940bc001; -defparam bootram.RAM0.INIT_17=256'h99fc1800_e8660000_30210054_b62e0000_ea610050_ea41004c_ea210048_e9810044; -defparam bootram.RAM0.INIT_18=256'h16459003_22400007_64e50402_44632c00_30600001_b800ffa8_fa60350c_80000000; -defparam bootram.RAM0.INIT_19=256'h80000000_b60f0008_f8603508_84632000_f8c70404_e8603508_a883ffff_be520018; -defparam bootram.RAM0.INIT_1A=256'h80000000_b60f0008_80000000_b6910000_80000000_b6110000_80000000_b60f0008; -defparam bootram.RAM0.INIT_1B=256'haa43ffff_326003e8_f9e10000_fa61001c_3021ffe0_e86003e8_80000000_b60f0008; -defparam bootram.RAM0.INIT_1C=256'hea61001c_e9e10000_bc32fff0_aa43ffff_e8730000_3273fffc_99fc1800_bc120018; -defparam bootram.RAM0.INIT_1D=256'h80000000_b9f4ffb0_80000000_b9f4fd28_d9e00800_3021fff8_30210020_b60f0008; -defparam bootram.RAM0.INIT_1E=256'hc9e00800_80000000_b9f4fca0_d9e00800_3021fff8_30210008_b60f0008_c9e00800; -defparam bootram.RAM0.INIT_1F=256'h00000000_00000000_00000000_ffffffff_00000000_ffffffff_30210008_b60f0008; -defparam bootram.RAM0.INIT_20=256'h00000340_00000340_00000340_00000340_00000340_00000340_00000340_000003f4; -defparam bootram.RAM0.INIT_21=256'h00000000_00000000_00000000_00000000_00000000_00000000_00000000_00000340; - +defparam bootram.RAM0.INIT_0B=256'hb9f40bf0_bc92fff4_06463800_20c60004_f8060000_bc720014_06463800_20e0f828; +defparam bootram.RAM0.INIT_0C=256'h32630000_20a00000_b9f4014c_20e00000_20c00000_80000000_b9f40d70_80000000; +defparam bootram.RAM0.INIT_0D=256'h20210014_b60f0008_30730000_c9e10000_80000000_b9f40bbc_80000000_b9f40d78; +defparam bootram.RAM0.INIT_0E=256'he9e10000_f9610004_fa410010_95608001_fa21000c_f9610008_f9e10000_3021ffec; +defparam bootram.RAM0.INIT_0F=256'hbc050018_30210014_b62e0000_ea410010_ea21000c_e9610008_940bc001_e9610004; +defparam bootram.RAM0.INIT_10=256'h3021ff2c_80000000_b60f0008_bc32fff4_16432800_30630001_80000000_10600000; +defparam bootram.RAM0.INIT_11=256'hb9f402c0_32c1001c_3261004c_f8610028_f9e10000_fac100d0_fa6100cc_3061002c; +defparam bootram.RAM0.INIT_12=256'h22407fff_e8610024_bc230038_30a00f7c_10b30000_b9f405cc_10d60000_10b30000; +defparam bootram.RAM0.INIT_13=256'h30a00f7c_bc120040_aa430001_30a00f44_e061001c_10a30000_be520034_16439003; +defparam bootram.RAM0.INIT_14=256'he8e10020_e8c10028_b800ffa8_80000000_b9f40440_b800ffb4_80000000_b9f4044c; +defparam bootram.RAM0.INIT_15=256'h80000000_b9f40414_b800ff88_80000000_b9f40420_30a00f44_80000000_b9f40b54; +defparam bootram.RAM0.INIT_16=256'hb800ff60_80000000_b9f403f8_30a00f48_80000000_b9f409a0_30a08000_b0000000; +defparam bootram.RAM0.INIT_17=256'h30a0a120_b0000007_9403c001_ac640002_94808001_fa61001c_f9e10000_3021ffe0; +defparam bootram.RAM0.INIT_18=256'hb9f40750_80000000_b9f40408_f800200c_80000000_b9f4fef4_f860200c_306000ff; +defparam bootram.RAM0.INIT_19=256'h30a01048_bc04013c_a4842000_e8803334_80000000_b9f403a4_30a00f80_80000000; +defparam bootram.RAM0.INIT_1A=256'h30a010ac_bc23010c_80000000_b9f4099c_30a00000_b0000020_80000000_b9f4038c; +defparam bootram.RAM0.INIT_1B=256'h30a010fc_bc030058_80000000_b9f40930_30a00000_b0000040_80000000_b9f4036c; +defparam bootram.RAM0.INIT_1C=256'h30c07c00_b9f4070c_30a00000_b0000040_30e08000_b0000000_80000000_b9f4034c; +defparam bootram.RAM0.INIT_1D=256'he9e10000_80000000_b9f40318_30a01128_80000000_b9f408c0_30a08000_b0000000; +defparam bootram.RAM0.INIT_1E=256'hb000007f_80000000_b9f402f8_30a01164_30210020_b60f0008_30600001_ea61001c; +defparam bootram.RAM0.INIT_1F=256'h80000000_b9f402d4_30a00ff0_12630000_be230030_80000000_b9f408bc_30a00000; +defparam bootram.RAM0.INIT_20=256'hb0000000_30210020_b60f0008_ea61001c_e9e10000_10730000_80000000_b9f4fe1c; +defparam bootram.RAM0.INIT_21=256'hb9f4082c_30a08000_b0000000_30c07c00_b9f40678_30a00000_b000007f_30e08000; +defparam bootram.RAM0.INIT_22=256'hb60f0008_30600001_ea61001c_e9e10000_80000000_b9f40284_30a00fb4_80000000; +defparam bootram.RAM0.INIT_23=256'h80000000_b9f40254_30a00f94_b800feec_80000000_b9f40264_30a01074_30210020; +defparam bootram.RAM0.INIT_24=256'h80000000_b9f40234_30a00ff0_bc23001c_80000000_b9f40818_30a00000_b000007f; +defparam bootram.RAM0.INIT_25=256'hb9f405e8_30a00000_b000007f_30e08000_b0000000_b800fe94_80000000_b9f4fd7c; +defparam bootram.RAM0.INIT_26=256'h80000000_b9f401f4_30a00fb4_80000000_b9f4079c_30a08000_b0000000_30c07c00; +defparam bootram.RAM0.INIT_27=256'h3021ffdc_80000000_b60f0008_80000000_b9f4fb84_f9e10000_3021ffe4_b800fe5c; +defparam bootram.RAM0.INIT_28=256'h90630060_80000000_b9f402b0_12c50000_f9e10000_12650000_fac10020_fa61001c; +defparam bootram.RAM0.INIT_29=256'he9e10000_10760000_f0130000_3273ffff_32730001_be32ffec_aa43000a_f0730000; +defparam bootram.RAM0.INIT_2A=256'h80000000_b9f4026c_f9e10000_3021ffe4_30210024_b60f0008_eac10020_ea61001c; +defparam bootram.RAM0.INIT_2B=256'h12650000_e0650000_f9e10000_fa61001c_3021ffe0_3021001c_b60f0008_e9e10000; +defparam bootram.RAM0.INIT_2C=256'he9e10000_bc25fff0_90a30060_e0730000_32730001_b9f401b8_bc050018_90a30060; +defparam bootram.RAM0.INIT_2D=256'hb9f40184_f9e10000_fac1001c_3021ffe0_30210020_b60f0008_10600000_ea61001c; +defparam bootram.RAM0.INIT_2E=256'hf9e10000_3021ffe4_30210020_b60f0008_eac1001c_e9e10000_10760000_12c50000; +defparam bootram.RAM0.INIT_2F=256'h9404c001_ac870002_94e08001_3021001c_b60f0008_e9e10000_80000000_b9f4013c; +defparam bootram.RAM0.INIT_30=256'hb0000000_f860200c_80633000_84632000_84c62800_a866ffff_e880f81c_b0000000; +defparam bootram.RAM0.INIT_31=256'h80000000_b60f0008_9404c001_80843800_ac840002_94808001_a4e70002_f860f81c; +defparam bootram.RAM0.INIT_32=256'hb0000000_f8a0200c_88a52000_e880f81c_b0000000_9406c001_acc30002_94608001; +defparam bootram.RAM0.INIT_33=256'h80000000_b60f0008_9404c001_80841800_ac840002_94808001_a4630002_f8a0f81c; +defparam bootram.RAM0.INIT_34=256'h84632000_84c62800_a866ffff_e880f820_b0000000_9404c001_ac870002_94e08001; +defparam bootram.RAM0.INIT_35=256'h80843800_ac840002_94808001_a4e70002_f860f820_b0000000_f8602020_80633000; +defparam bootram.RAM0.INIT_36=256'hb9f40064_80000000_b9f4fe98_f9e10000_3021ffe4_80000000_b60f0008_9404c001; +defparam bootram.RAM0.INIT_37=256'hb9f40044_f9e10000_3021ffe4_3021001c_b60f0008_10600000_e9e10000_30a0000a; +defparam bootram.RAM0.INIT_38=256'h3021ffe4_80000000_b60f0008_f0a01454_3021001c_b60f0008_e9e10000_30a0000a; +defparam bootram.RAM0.INIT_39=256'h3021001c_b60f0008_e9e10000_f8603700_306000d9_30a00001_b9f4ffec_f9e10000; +defparam bootram.RAM0.INIT_3A=256'hbc03fffc_e8603704_12650000_be120024_aa45000a_f9e10000_fa61001c_3021ffe0; +defparam bootram.RAM0.INIT_3B=256'hb800ffdc_30a0000d_b9f4ffcc_30210020_b60f0008_ea61001c_e9e10000_fa60370c; +defparam bootram.RAM0.INIT_3C=256'he8603704_30a0000d_be120024_aa53000a_f9e10000_12650000_fa61001c_3021ffe0; +defparam bootram.RAM0.INIT_3D=256'h80000000_b9f4ff88_30210020_b60f0008_ea61001c_e9e10000_fa60370c_bc030008; +defparam bootram.RAM0.INIT_3E=256'h3065ffa9_90a50060_80000000_b60f0008_e8603710_bc03fffc_e8603708_b800ffdc; +defparam bootram.RAM0.INIT_3F=256'h16459001_32400039_a46300ff_3065ffc9_a46300ff_be520024_16459001_3240005a; +defparam bootram.RAM1.INIT_00=256'h13250000_fb21002c_3021ffc8_80000000_b60f0008_a46400ff_3085ffd0_be52000c; +defparam bootram.RAM1.INIT_01=256'he0790000_fb410030_fb010028_fae10024_fac10020_fa61001c_f9e10000_fb610034; +defparam bootram.RAM1.INIT_02=256'heac10020_ea61001c_e9e10000_10650000_30a0ffff_be120034_aa43003a_13660000; +defparam bootram.RAM1.INIT_03=256'he8c01458_30210038_b60f0008_eb610034_eb410030_eb21002c_eb010028_eae10024; +defparam bootram.RAM1.INIT_04=256'ha4630044_c0662000_a4a300ff_be04001c_90840060_30650001_c085c800_30a00001; +defparam bootram.RAM1.INIT_05=256'hb9f4ff1c_e0b90002_80000000_b9f4ff28_e0b90001_30a0fffe_b810ffac_bc23ffe4; +defparam bootram.RAM1.INIT_06=256'hbe38ff74_93040060_e083000b_10791800_fa7b0004_10739800_12761800_66c30404; +defparam bootram.RAM1.INIT_07=256'he0b90004_66e30404_b9f4fee4_e0b90003_13530000_b9f4fef0_e0b90005_30a0fffd; +defparam bootram.RAM1.INIT_08=256'h12f7b000_12d61800_12d61800_b9f4fec8_64630408_e0b90006_66c3040c_b9f4fed8; +defparam bootram.RAM1.INIT_09=256'h1063b000_66c30404_b9f4fea4_e0b90008_80000000_b9f4feb0_e0b90007_fafb0008; +defparam bootram.RAM1.INIT_0A=256'ha6d600ff_32d60009_12d8c000_ea7b000c_13580000_10f30000_be130060_f07b0000; +defparam bootram.RAM1.INIT_0B=256'hd0789800_1063b800_66e30404_b9f4fe68_e0b60001_12d9b000_b9f4fe74_c0b6c800; +defparam bootram.RAM1.INIT_0C=256'hbe52ffb8_1647c003_107a1800_a70400ff_c073c000_30980001_e8fb0004_ea7b000c; +defparam bootram.RAM1.INIT_0D=256'h10632000_e0b70009_12f9b800_64760008_12e73800_e09b0000_eadb0008_a74300ff; +defparam bootram.RAM1.INIT_0E=256'h16d60000_67030404_b9f4fe04_e0b7000a_12d61800_b9f4fe10_107a1800_12c7b000; +defparam bootram.RAM1.INIT_0F=256'h10a00000_b810fe58_30a0fffb_be32fe60_1643b000_a46300ff_a6d600ff_1063c000; +defparam bootram.RAM1.INIT_10=256'ha1292000_a508007f_a5290600_80000000_b60f0008_bc23fff8_a4630100_e8603b10; +defparam bootram.RAM1.INIT_11=256'ha46600ff_f8803b10_f8e03b00_bc23fff8_a4630100_e8603b10_a4a500ff_80884800; +defparam bootram.RAM1.INIT_12=256'hbc23fff8_a4630100_e8603b10_10650000_be050018_f8803b10_a0840100_f8603b18; +defparam bootram.RAM1.INIT_13=256'h10a00000_f9e10000_3021ffe4_10e60000_10c00000_80000000_b60f0008_e8603b00; +defparam bootram.RAM1.INIT_14=256'hb60f0008_e9e10000_80000000_b9f4ff84_f8603b14_30600001_31200400_31000008; +defparam bootram.RAM1.INIT_15=256'h13060000_f9e10000_fb010038_fa61002c_12c50000_fac10030_3021ffc4_3021001c; +defparam bootram.RAM1.INIT_16=256'h3060000b_66d60408_f8603b10_f8003b18_30600400_12670000_b9f4ff3c_fae10034; +defparam bootram.RAM1.INIT_17=256'hf8603b10_30600528_f8803b10_30800428_f8603b18_30600001_fac03b00_f8603b04; +defparam bootram.RAM1.INIT_18=256'hf8603b10_30600400_3261001c_12e00000_12d30000_be18009c_80000000_b9f4ff00; +defparam bootram.RAM1.INIT_19=256'he8603b08_f881001c_14b7c000_e8803b0c_80000000_b9f4fed8_f8803b10_30800500; +defparam bootram.RAM1.INIT_1A=256'hbeb20034_16459003_22400010_f8610028_e8603b00_f8810024_e8803b04_f8610020; +defparam bootram.RAM1.INIT_1B=256'h12f72800_bc32fff0_16442800_30840001_d0762000_c0732000_30a00010_10800000; +defparam bootram.RAM1.INIT_1C=256'hbe52ff7c_1658b803_12f72800_bc25ffd8_b800ff8c_12d62800_beb20020_1658b803; +defparam bootram.RAM1.INIT_1D=256'hb60f0008_eb010038_eae10034_eac10030_ea61002c_e9e10000_f8003b18_12d62800; +defparam bootram.RAM1.INIT_1E=256'hf9e10000_31000020_30c00001_30a00001_3021ffe4_30e00000_b0009f00_3021003c; +defparam bootram.RAM1.INIT_1F=256'hb0000000_3021001c_b60f0008_a463ffff_b00000ff_e9e10000_31200400_b9f4fe34; +defparam bootram.RAM1.INIT_20=256'hb9f4ffa8_3021001c_b60f0008_e9e10000_bc030010_f9e10000_3021ffe4_e860f824; +defparam bootram.RAM1.INIT_21=256'h80000000_b9f40100_a46300ff_be120010_aa440020_a48400ff_64830008_80000000; +defparam bootram.RAM1.INIT_22=256'hb0000000_e063118a_bc52ffe4_16439001_32400018_bcb2fff0_16439001_32400015; +defparam bootram.RAM1.INIT_23=256'hf9e10000_10b60000_10c50000_12c00000_fac1001c_3021ffe0_b800ffac_f860f824; +defparam bootram.RAM1.INIT_24=256'h30210020_b60f0008_eac1001c_e9e10000_80000000_99fcb000_30e00024_b9f40174; +defparam bootram.RAM1.INIT_25=256'h10b60000_30c00006_b9f4fdf0_f9e10000_10f60000_32c1001c_fac10028_3021ffd4; +defparam bootram.RAM1.INIT_26=256'heac10028_e9e10000_a884ffff_80841800_14830000_30e00006_b9f400b0_30c011a4; +defparam bootram.RAM1.INIT_27=256'hf9e10000_10f60000_32c1001c_fac10028_3021ffd4_3021002c_b60f0008_6464001f; +defparam bootram.RAM1.INIT_28=256'h80841800_14830000_30e00006_b9f40064_30c011ac_10b60000_30c00006_b9f4fda4; +defparam bootram.RAM1.INIT_29=256'h3021ffe4_30a011b4_3021002c_b60f0008_6464001f_eac10028_e9e10000_a884ffff; +defparam bootram.RAM1.INIT_2A=256'hb6910000_80000000_b6110000_30a0ffff_b9f4f324_80000000_b9f4f828_f9e10000; +defparam bootram.RAM1.INIT_2B=256'hbeb2005c_16479003_22400003_80000000_b60f0008_80000000_b60f0008_80000000; +defparam bootram.RAM1.INIT_2C=256'h30e7fffc_bc320040_16432000_e8660000_e8850000_bc230050_a4630003_80653000; +defparam bootram.RAM1.INIT_2D=256'hbc120028_aa47ffff_30e7ffff_30c60004_be52ffe0_16479003_22400003_30a50004; +defparam bootram.RAM1.INIT_2E=256'haa47ffff_30e7ffff_30c60001_30a50001_be320020_16434000_e0660000_e1050000; +defparam bootram.RAM1.INIT_2F=256'hbeb20018_16479003_2240000f_14634000_b60f0008_10600000_b60f0008_bc32ffe0; +defparam bootram.RAM1.INIT_30=256'h10e72000_11040000_bc070024_11050000_be030034_a4630003_80662800_10850000; +defparam bootram.RAM1.INIT_31=256'h10650000_b60f0008_30c60001_be32fff0_16474000_31080001_f0680000_e0660000; +defparam bootram.RAM1.INIT_32=256'he866000c_f8880008_e8860008_f8680004_e8660004_f8880000_30e7fff0_e8860000; +defparam bootram.RAM1.INIT_33=256'h16479003_22400003_31080010_be52ffd0_16479003_2240000f_f868000c_30c60010; +defparam bootram.RAM1.INIT_34=256'hbe52ffec_16479003_22400003_d8682000_30e7fffc_c8662000_10800000_bcb2002c; +defparam bootram.RAM1.INIT_35=256'hfa61001c_3021ffe0_e8600f34_10880000_b810ff68_11044000_10c43000_30840004; +defparam bootram.RAM1.INIT_36=256'haa43ffff_e8730000_3273fffc_99fc1800_bc120018_aa43ffff_32600f34_f9e10000; +defparam bootram.RAM1.INIT_37=256'hb9f4f1dc_d9e00800_3021fff8_30210020_b60f0008_ea61001c_e9e10000_bc32fff0; +defparam bootram.RAM1.INIT_38=256'hd9e00800_3021fff8_30210008_b60f0008_c9e00800_80000000_b9f4ffb0_80000000; +defparam bootram.RAM1.INIT_39=256'hffffffff_00000000_ffffffff_30210008_b60f0008_c9e00800_80000000_b9f4f154; +defparam bootram.RAM1.INIT_3A=256'h7475726e_65207265_696d6167_61696e20_523a206d_4552524f_4f4b0000_00000000; +defparam bootram.RAM1.INIT_3B=256'h4e4f4b00_64652e00_64206d6f_206c6f61_49484558_20696e20_4261636b_65642120; +defparam bootram.RAM1.INIT_3C=256'h20555352_74696e67_53746172_720a0000_6f616465_6f6f746c_322b2062_55535250; +defparam bootram.RAM1.INIT_3D=256'h65747572_523a2072_4552524f_2e000000_6d6f6465_61666520_696e2073_50322b20; +defparam bootram.RAM1.INIT_3E=256'h6f756c64_73207368_20546869_72616d21_70726f67_61696e20_6f6d206d_6e206672; +defparam bootram.RAM1.INIT_3F=256'h66652066_6f207361_523a206e_4552524f_6e210000_61707065_65722068_206e6576; +defparam bootram.RAM2.INIT_00=256'h6d206120_20492061_626c652e_61696c61_65206176_696d6167_61726520_69726d77; +defparam bootram.RAM2.INIT_01=256'h5820746f_20494845_6c6f6164_20746f20_66726565_65656c20_6b2e2046_62726963; +defparam bootram.RAM2.INIT_02=256'h726f6475_69642070_2076616c_20666f72_6b696e67_43686563_2e000000_2052414d; +defparam bootram.RAM2.INIT_03=256'h6f647563_64207072_56616c69_2e2e2e00_6d616765_47412069_6e204650_6374696f; +defparam bootram.RAM2.INIT_04=256'h7074696e_7474656d_642e2041_666f756e_61676520_4120696d_20465047_74696f6e; +defparam bootram.RAM2.INIT_05=256'h696f6e20_64756374_2070726f_616c6964_4e6f2076_742e0000_20626f6f_6720746f; +defparam bootram.RAM2.INIT_06=256'h20746f20_74696e67_74656d70_2e0a4174_6f756e64_67652066_20696d61_46504741; +defparam bootram.RAM2.INIT_07=256'h56616c69_2e2e2e00_77617265_6669726d_696f6e20_64756374_2070726f_6c6f6164; +defparam bootram.RAM2.INIT_08=256'h204c6f61_756e642e_6520666f_6d776172_20666972_74696f6e_6f647563_64207072; +defparam bootram.RAM2.INIT_09=256'h61696e20_6f6d206d_6e206672_65747572_523a2052_4552524f_2e2e2e00_64696e67; +defparam bootram.RAM2.INIT_0A=256'h61707065_65722068_206e6576_6f756c64_73207368_20546869_72616d21_70726f67; +defparam bootram.RAM2.INIT_0B=256'h77617265_6669726d_696f6e20_64756374_2070726f_616c6964_4e6f2076_6e210000; +defparam bootram.RAM2.INIT_0C=256'h2e2e2e00_77617265_6669726d_61666520_6e672073_54727969_6e642e20_20666f75; +defparam bootram.RAM2.INIT_0D=256'h00000000_6f72740a_0a0a6162_aa990000_ffffffff_b8080000_b0000000_10101200; +defparam bootram.RAM2.INIT_0E=256'h20202020_20202020_20202020_20202020_28282820_20202828_20202020_00202020; +defparam bootram.RAM2.INIT_0F=256'h10101010_04040410_04040404_10040404_10101010_10101010_10101010_20881010; +defparam bootram.RAM2.INIT_10=256'h10101010_01010101_01010101_01010101_01010101_01010101_41414141_10104141; +defparam bootram.RAM2.INIT_11=256'h10101010_02020202_02020202_02020202_02020202_02020202_42424242_10104242; +defparam bootram.RAM2.INIT_12=256'h00000000_00000000_00000000_00000000_00000000_00000000_00000000_20000000; +defparam bootram.RAM2.INIT_13=256'h00000000_00000000_00000000_00000000_00000000_00000000_00000000_00000000; +defparam bootram.RAM2.INIT_14=256'h00000000_00000000_00000000_00000000_00000000_00000000_00000000_00000000; +defparam bootram.RAM2.INIT_15=256'h00000000_00000000_00000000_00000000_00000000_00000000_00000000_00000000; +defparam bootram.RAM2.INIT_16=256'h00000000_00000000_00000000_00000000_00000000_00000000_00000000_00000000; +defparam bootram.RAM2.INIT_17=256'h00000000_00000000_00000000_00000000_00000000_00000000_00000000_00000000; +defparam bootram.RAM2.INIT_18=256'h00000000_00000000_00000000_00000000_00000000_00000000_00000000_00000000; +defparam bootram.RAM2.INIT_19=256'h00000000_00000000_00000000_00000000_00000000_00000000_00000000_00000000; +defparam bootram.RAM2.INIT_1A=256'h20202020_20202020_20202020_28282020_20282828_20202020_20202020_00000000; +defparam bootram.RAM2.INIT_1B=256'h04041010_04040404_04040404_10101010_10101010_10101010_88101010_20202020; +defparam bootram.RAM2.INIT_1C=256'h01010110_01010101_01010101_01010101_01010101_41414101_10414141_10101010; +defparam bootram.RAM2.INIT_1D=256'h02020210_02020202_02020202_02020202_02020202_42424202_10424242_10101010; +defparam bootram.RAM2.INIT_1E=256'h00000000_00000000_00000000_00000000_00000000_00000000_00000000_10101020; +defparam bootram.RAM2.INIT_1F=256'h00000000_00000000_00000000_00000000_00000000_00000000_00000000_00000000; +defparam bootram.RAM2.INIT_20=256'h00000000_00000000_00000000_00000000_00000000_00000000_00000000_00000000; +defparam bootram.RAM2.INIT_21=256'h00000000_00000000_00000000_00000000_00000000_00000000_00000000_00000000; +defparam bootram.RAM2.INIT_22=256'h00000000_00001344_01000000_00000f40_00000000_00000000_00000000_00000000; +defparam bootram.RAM2.INIT_23=256'h00000000_00000000_00000000_00000000_00000000_00000000_00000000_00000000; ram_harvard2 #(.AWIDTH(15),.RAM_SIZE(32768)) sys_ram(.wb_clk_i(wb_clk),.wb_rst_i(wb_rst), @@ -396,8 +525,8 @@ defparam bootram.RAM0.INIT_21=256'h00000000_00000000_00000000_00000000_00000000_ nsgpio nsgpio(.clk_i(wb_clk),.rst_i(wb_rst), .cyc_i(s4_cyc),.stb_i(s4_stb),.adr_i(s4_adr[3:0]),.we_i(s4_we), .dat_i(s4_dat_o),.dat_o(s4_dat_i),.ack_o(s4_ack), - .atr(atr_lines),.debug_0(debug_gpio_0),.debug_1(debug_gpio_1) - //.gpio( {io_tx,io_rx} ) + .atr(atr_lines),.debug_0(debug_gpio_0),.debug_1(debug_gpio_1), + .gpio( {io_tx,io_rx} ) ); // ///////////////////////////////////////////////////////////////////////// @@ -685,10 +814,9 @@ defparam bootram.RAM0.INIT_21=256'h00000000_00000000_00000000_00000000_00000000_ // Debug Pins assign debug_clk = {dsp_clk, wb_clk}; - assign debug = m0_dat_o; + assign debug = debug_vt; assign debug_gpio_0 = 32'd0; assign debug_gpio_1 = 32'd0; - assign {io_tx,io_rx} = {if_adr, m0_adr}; endmodule // u2_core -- cgit v1.2.3 From ed2882e600832f6cb46d05bde7aa49d045e63895 Mon Sep 17 00:00:00 2001 From: Nick Foster Date: Wed, 28 Jul 2010 15:52:00 -0700 Subject: Fix for SPI SS > 8 bits wide --- usrp2/opencores/spi/rtl/verilog/spi_defines.v | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/usrp2/opencores/spi/rtl/verilog/spi_defines.v b/usrp2/opencores/spi/rtl/verilog/spi_defines.v index a6925918e..25c08214b 100644 --- a/usrp2/opencores/spi/rtl/verilog/spi_defines.v +++ b/usrp2/opencores/spi/rtl/verilog/spi_defines.v @@ -102,8 +102,8 @@ // Number of device select signals. Use SPI_SS_NB for fine tuning the // exact number. // -`define SPI_SS_NB_8 -//`define SPI_SS_NB_16 +//`define SPI_SS_NB_8 +`define SPI_SS_NB_16 //`define SPI_SS_NB_24 //`define SPI_SS_NB_32 -- cgit v1.2.3 From dcdab8c84ed9d4481ee929fdb13a11e2be930329 Mon Sep 17 00:00:00 2001 From: Nick Foster Date: Thu, 29 Jul 2010 10:59:53 -0700 Subject: Added DCM reset line to sr. --- usrp2/top/u2plus/u2plus.v | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/usrp2/top/u2plus/u2plus.v b/usrp2/top/u2plus/u2plus.v index b349175de..d894631ac 100644 --- a/usrp2/top/u2plus/u2plus.v +++ b/usrp2/top/u2plus/u2plus.v @@ -151,9 +151,11 @@ module u2plus OBUFDS exp_user_out_pin (.O(exp_user_out_p),.OB(exp_user_out_n),.I(exp_user_out)); defparam exp_user_out_pin.IOSTANDARD = "LVDS_25"; - wire dcm_rst = 0; - - + reg [5:0] clock_ready_d; + always @(posedge clk_fpga) + clock_ready_d[5:0] <= {clock_ready_d[4:0],clock_ready}; + wire dcm_rst = ~&clock_ready_d & |clock_ready_d; + `ifdef LVDS wire [13:0] adc_a, adc_b; capture_ddrlvds #(.WIDTH(14)) capture_ddrlvds -- cgit v1.2.3 From 19974fa00b04280e52d3d644e8e12953c570c06d Mon Sep 17 00:00:00 2001 From: Matt Ettus Date: Tue, 10 Aug 2010 09:59:33 -0700 Subject: enlarge loopback fifo --- usrp2/top/u1e/u1e_core.v | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/usrp2/top/u1e/u1e_core.v b/usrp2/top/u1e/u1e_core.v index 5b60578ce..516a5cf96 100644 --- a/usrp2/top/u1e/u1e_core.v +++ b/usrp2/top/u1e/u1e_core.v @@ -101,7 +101,7 @@ module u1e_core wire rx_src_rdy_int, rx_dst_rdy_int, tx_src_rdy_int, tx_dst_rdy_int; `ifdef LOOPBACK - fifo_cascade #(.WIDTH(36), .SIZE(9)) loopback_fifo + fifo_cascade #(.WIDTH(36), .SIZE(12)) loopback_fifo (.clk(wb_clk), .reset(wb_rst), .clear(clear_tx | clear_rx), .datain(tx_data), .src_rdy_i(tx_src_rdy), .dst_rdy_o(tx_dst_rdy), .dataout(rx_data), .src_rdy_o(rx_src_rdy), .dst_rdy_i(rx_dst_rdy)); @@ -437,9 +437,6 @@ module u1e_core { tx_src_rdy, tx_src_rdy_int, tx_dst_rdy, tx_dst_rdy_int, rx_src_rdy, rx_src_rdy_int, rx_dst_rdy, rx_dst_rdy_int }, { EM_D } }; - //assign debug = { phase[23:8], txsync, txblank, tx }; - - assign debug_gpio_0 = { {run_tx, strobe_tx, run_rx, strobe_rx, tx_i[11:0]}, {tx1_src_rdy, tx1_dst_rdy, tx_src_rdy, tx_dst_rdy, tx_q[11:0]} }; -- cgit v1.2.3 From f0e231396d6c512dc4a3fee0c186b3651327e9f2 Mon Sep 17 00:00:00 2001 From: Matt Ettus Date: Wed, 11 Aug 2010 14:34:35 -0700 Subject: quad uart instead of single, for the extra on board serial ports --- usrp2/control_lib/Makefile.srcs | 1 + usrp2/control_lib/quad_uart.v | 71 +++++++++++++++++++++++++++++++++++++++++ usrp2/top/u2plus/u2plus.v | 5 ++- usrp2/top/u2plus/u2plus_core.v | 15 +++++---- 4 files changed, 82 insertions(+), 10 deletions(-) create mode 100644 usrp2/control_lib/quad_uart.v diff --git a/usrp2/control_lib/Makefile.srcs b/usrp2/control_lib/Makefile.srcs index ad491b83d..666ac344c 100644 --- a/usrp2/control_lib/Makefile.srcs +++ b/usrp2/control_lib/Makefile.srcs @@ -30,6 +30,7 @@ srl.v \ system_control.v \ wb_1master.v \ wb_readback_mux.v \ +quad_uart.v \ simple_uart.v \ simple_uart_tx.v \ simple_uart_rx.v \ diff --git a/usrp2/control_lib/quad_uart.v b/usrp2/control_lib/quad_uart.v new file mode 100644 index 000000000..afa6fae1d --- /dev/null +++ b/usrp2/control_lib/quad_uart.v @@ -0,0 +1,71 @@ + +module quad_uart + #(parameter TXDEPTH = 1, + parameter RXDEPTH = 1) + (input clk_i, input rst_i, + input we_i, input stb_i, input cyc_i, output reg ack_o, + input [4:0] adr_i, input [31:0] dat_i, output reg [31:0] dat_o, + output [3:0] rx_int_o, output [3:0] tx_int_o, + output [3:0] tx_o, input [3:0] rx_i, output [3:0] baud_o + ); + + // Register Map + localparam SUART_CLKDIV = 0; + localparam SUART_TXLEVEL = 1; + localparam SUART_RXLEVEL = 2; + localparam SUART_TXCHAR = 3; + localparam SUART_RXCHAR = 4; + + wire wb_acc = cyc_i & stb_i; // WISHBONE access + wire wb_wr = wb_acc & we_i; // WISHBONE write access + + reg [15:0] clkdiv[0:3]; + wire [7:0] rx_char[0:3]; + wire [3:0] tx_fifo_full, rx_fifo_empty; + wire [7:0] tx_fifo_level[0:3], rx_fifo_level[0:3]; + + always @(posedge clk_i) + if (rst_i) + ack_o <= 1'b0; + else + ack_o <= wb_acc & ~ack_o; + + integer i; + always @(posedge clk_i) + if (rst_i) + for(i=0;i<4;i=i+1) + clkdiv[i] <= 0; + else if (wb_wr) + case(adr_i[2:0]) + SUART_CLKDIV : clkdiv[adr_i[4:3]] <= dat_i[15:0]; + endcase // case(adr_i) + + always @(posedge clk_i) + case (adr_i[2:0]) + SUART_TXLEVEL : dat_o <= tx_fifo_level[adr_i[4:3]]; + SUART_RXLEVEL : dat_o <= rx_fifo_level[adr_i[4:3]]; + SUART_RXCHAR : dat_o <= rx_char[adr_i[4:3]]; + endcase // case(adr_i) + + genvar j; + generate + for(j=0;j<4;j=j+1) + begin : gen_uarts + simple_uart_tx #(.DEPTH(TXDEPTH)) simple_uart_tx + (.clk(clk_i),.rst(rst_i), + .fifo_in(dat_i[7:0]),.fifo_write(ack_o && wb_wr && (adr_i[2:0] == SUART_TXCHAR) && (adr_i[4:3]==j)), + .fifo_level(tx_fifo_level[j]),.fifo_full(tx_fifo_full[j]), + .clkdiv(clkdiv[j]),.baudclk(baud_o[j]),.tx(tx_o[j])); + + simple_uart_rx #(.DEPTH(RXDEPTH)) simple_uart_rx + (.clk(clk_i),.rst(rst_i), + .fifo_out(rx_char[j]),.fifo_read(ack_o && ~wb_wr && (adr_i[2:0] == SUART_RXCHAR) && (adr_i[4:3]==j)), + .fifo_level(rx_fifo_level[j]),.fifo_empty(rx_fifo_empty[j]), + .clkdiv(clkdiv[j]),.rx(rx_i[j])); + end // block: gen_uarts + endgenerate + + assign tx_int_o = ~tx_fifo_full; // Interrupt for those that have space + assign rx_int_o = ~rx_fifo_empty; // Interrupt for those that have data + +endmodule // quad_uart diff --git a/usrp2/top/u2plus/u2plus.v b/usrp2/top/u2plus/u2plus.v index d894631ac..a0ba4d4cc 100644 --- a/usrp2/top/u2plus/u2plus.v +++ b/usrp2/top/u2plus/u2plus.v @@ -381,8 +381,8 @@ module u2plus .RAM_WEn (RAM_WEn), .RAM_OEn (RAM_OEn), .RAM_LDn (RAM_LDn), - .uart_tx_o (TXD[1]), - .uart_rx_i (RXD[1]), + .uart_tx_o (TXD[3:1]), + .uart_rx_i ({1'b1,RXD[3:1]}), .uart_baud_o (), .sim_mode (1'b0), .clock_divider (2), @@ -395,6 +395,5 @@ module u2plus assign RAM_ZZ = 1; assign RAM_BWn = 4'b1111; - assign TXD[3:2] = 2'b11; endmodule // u2plus diff --git a/usrp2/top/u2plus/u2plus_core.v b/usrp2/top/u2plus/u2plus_core.v index 6092f1ba3..79318aa27 100644 --- a/usrp2/top/u2plus/u2plus_core.v +++ b/usrp2/top/u2plus/u2plus_core.v @@ -120,9 +120,9 @@ module u2plus_core output RAM_LDn, // Debug stuff - output uart_tx_o, - input uart_rx_i, - output uart_baud_o, + output [3:0] uart_tx_o, + input [3:0] uart_rx_i, + output [3:0] uart_baud_o, input sim_mode, input [3:0] clock_divider, input button, @@ -156,7 +156,8 @@ module u2plus_core wire [31:0] status, status_b0, status_b1, status_b2, status_b3, status_b4, status_b5, status_b6, status_b7; wire bus_error, spi_int, i2c_int, pps_int, onetime_int, periodic_int, buffer_int; - wire proc_int, overrun, underrun, uart_tx_int, uart_rx_int; + wire proc_int, overrun, underrun; + wire [3:0] uart_tx_int, uart_rx_int; wire [31:0] debug_gpio_0, debug_gpio_1; wire [31:0] atr_lines; @@ -642,8 +643,8 @@ defparam bootram.RAM2.INIT_23=256'h00000000_00000000_00000000_00000000_00000000_ // Interrupt Controller, Slave #8 assign irq= {{8'b0}, - {8'b0}, - {2'b0, button, periodic_int, clk_status, serdes_link_up, uart_tx_int, uart_rx_int}, + {uart_tx_int[3:0], uart_rx_int[3:0]}, + {2'b0, button, periodic_int, clk_status, serdes_link_up, 2'b00}, {pps_int,overrun,underrun,PHY_INTn,i2c_int,spi_int,onetime_int,buffer_int}}; pic pic(.clk_i(wb_clk),.rst_i(wb_rst),.cyc_i(s8_cyc),.stb_i(s8_stb),.adr_i(s8_adr[4:2]), @@ -670,7 +671,7 @@ defparam bootram.RAM2.INIT_23=256'h00000000_00000000_00000000_00000000_00000000_ simple_uart #(.TXDEPTH(3),.RXDEPTH(3)) uart // depth of 3 is 128 entries (.clk_i(wb_clk),.rst_i(wb_rst), .we_i(sa_we),.stb_i(sa_stb),.cyc_i(sa_cyc),.ack_o(sa_ack), - .adr_i(sa_adr[4:2]),.dat_i(sa_dat_o),.dat_o(sa_dat_i), + .adr_i(sa_adr[6:2]),.dat_i(sa_dat_o),.dat_o(sa_dat_i), .rx_int_o(uart_rx_int),.tx_int_o(uart_tx_int), .tx_o(uart_tx_o),.rx_i(uart_rx_i),.baud_o(uart_baud_o)); -- cgit v1.2.3 From 9e97e773b9952ec3212e6c818bb40d785016afa4 Mon Sep 17 00:00:00 2001 From: Matt Ettus Date: Wed, 11 Aug 2010 16:26:58 -0700 Subject: connect the setting reg to the real clock and reset --- usrp2/top/u1e/u1e_core.v | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/usrp2/top/u1e/u1e_core.v b/usrp2/top/u1e/u1e_core.v index 516a5cf96..4561df173 100644 --- a/usrp2/top/u1e/u1e_core.v +++ b/usrp2/top/u1e/u1e_core.v @@ -70,7 +70,7 @@ module u1e_core wire clear_rx_int, clear_tx_int, clear_tx, clear_rx, do_clear; setting_reg #(.my_addr(SR_CLEAR_FIFO), .width(2)) sr_clear - (.clk(clk),.rst(reset),.strobe(set_stb),.addr(set_addr), + (.clk(wb_clk),.rst(wb_rst),.strobe(set_stb),.addr(set_addr), .in(set_data),.out({clear_tx_int,clear_rx_int}),.changed(do_clear)); assign clear_tx = clear_tx_int & do_clear; assign clear_rx = clear_rx_int & do_clear; -- cgit v1.2.3 From fe9ff1691f632677573f1cb3737684cfd181a21d Mon Sep 17 00:00:00 2001 From: Nick Foster Date: Thu, 12 Aug 2010 11:37:59 -0700 Subject: Fixed u2plus_core.v to use quad_uart instead of simple_uart. --- usrp2/top/u2plus/u2plus_core.v | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/usrp2/top/u2plus/u2plus_core.v b/usrp2/top/u2plus/u2plus_core.v index 79318aa27..1db7e5b79 100644 --- a/usrp2/top/u2plus/u2plus_core.v +++ b/usrp2/top/u2plus/u2plus_core.v @@ -668,7 +668,7 @@ defparam bootram.RAM2.INIT_23=256'h00000000_00000000_00000000_00000000_00000000_ // ///////////////////////////////////////////////////////////////////////// // UART, Slave #10 - simple_uart #(.TXDEPTH(3),.RXDEPTH(3)) uart // depth of 3 is 128 entries + quad_uart #(.TXDEPTH(3),.RXDEPTH(3)) uart // depth of 3 is 128 entries (.clk_i(wb_clk),.rst_i(wb_rst), .we_i(sa_we),.stb_i(sa_stb),.cyc_i(sa_cyc),.ack_o(sa_ack), .adr_i(sa_adr[6:2]),.dat_i(sa_dat_o),.dat_o(sa_dat_i), -- cgit v1.2.3 From 3091759d3f6a69bc0c56f2101b7b775de443212a Mon Sep 17 00:00:00 2001 From: Matt Ettus Date: Fri, 13 Aug 2010 11:49:36 -0700 Subject: this is necessary for some reason --- usrp2/top/u1e/Makefile | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/usrp2/top/u1e/Makefile b/usrp2/top/u1e/Makefile index f4a643176..3cb9fd8f3 100644 --- a/usrp2/top/u1e/Makefile +++ b/usrp2/top/u1e/Makefile @@ -95,6 +95,7 @@ GEN_PROG_FILE_PROPERTIES = \ "Create Binary Configuration File" TRUE \ "Done (Output Events)" 5 \ "Enable Bitstream Compression" TRUE \ -"Enable Outputs (Output Events)" 6 +"Enable Outputs (Output Events)" 6 \ +"Unused IOB Pins" "Pull Up" SIM_MODEL_PROPERTIES = "" -- cgit v1.2.3 From 1d9d3dcc7b460e25881d182e74429f91cef31a50 Mon Sep 17 00:00:00 2001 From: Matt Ettus Date: Tue, 17 Aug 2010 15:50:27 -0700 Subject: delay the q channel to make the channels line up on the AD9862 --- usrp2/top/u1e/u1e.v | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/usrp2/top/u1e/u1e.v b/usrp2/top/u1e/u1e.v index 523aae1b9..9536b5ced 100644 --- a/usrp2/top/u1e/u1e.v +++ b/usrp2/top/u1e/u1e.v @@ -99,6 +99,11 @@ module u1e TXSYNC <= 1; end `else // !`ifdef DCM + + reg[13:0] delay_q; + always @(posedge clk_fpga) + delay_q <= tx_q; + genvar i; generate for(i=0;i<14;i=i+1) @@ -111,7 +116,7 @@ module u1e .C1(~clk_fpga), // 1-bit clock input .CE(1'b1), // 1-bit clock enable input .D0(tx_i[i]), // 1-bit data input (associated with C0) - .D1(tx_q[i]), // 1-bit data input (associated with C1) + .D1(delay_q[i]), // 1-bit data input (associated with C1) .R(1'b0), // 1-bit reset input .S(1'b0)); // 1-bit set input end // block: gen_dacout -- cgit v1.2.3 From 746f94409d12b6ab2a0e99260655b5a0460ba220 Mon Sep 17 00:00:00 2001 From: Matt Ettus Date: Tue, 17 Aug 2010 16:37:55 -0700 Subject: connect atr --- usrp2/top/u1e/u1e_core.v | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/usrp2/top/u1e/u1e_core.v b/usrp2/top/u1e/u1e_core.v index 4561df173..13e6f4b68 100644 --- a/usrp2/top/u1e/u1e_core.v +++ b/usrp2/top/u1e/u1e_core.v @@ -419,7 +419,7 @@ module u1e_core (.clk_i(wb_clk), .rst_i(wb_rst), .adr_i(s6_adr), .sel_i(s6_sel), .dat_i(s6_dat_mosi), .dat_o(s6_dat_miso), .we_i(s6_we), .stb_i(s6_stb), .cyc_i(s6_cyc), .ack_o(s6_ack), - .run_rx(0), .run_tx(0), .ctrl_lines(atr_lines)); + .run_rx(run_rx), .run_tx(run_tx), .ctrl_lines(atr_lines)); // ///////////////////////////////////////////////////////////////////////// -- cgit v1.2.3 From 02c2a3fd08b1ae1a306fa45d89b55dafeaffb508 Mon Sep 17 00:00:00 2001 From: Matt Ettus Date: Tue, 17 Aug 2010 17:11:43 -0700 Subject: attach run_tx and run_rx to leds --- usrp2/top/u1e/u1e_core.v | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/usrp2/top/u1e/u1e_core.v b/usrp2/top/u1e/u1e_core.v index 13e6f4b68..63488f549 100644 --- a/usrp2/top/u1e/u1e_core.v +++ b/usrp2/top/u1e/u1e_core.v @@ -339,7 +339,7 @@ module u1e_core assign rx_enable = xfer_rate[14]; assign rate = xfer_rate[7:0]; - assign { debug_led[2],debug_led[0],debug_led[1] } = reg_leds; // LEDs are arranged funny on board + assign { debug_led[2],debug_led[0],debug_led[1] } = {run_rx,run_tx,reg_leds[0]}; // LEDs are arranged funny on board assign { cgen_sync_b, cgen_ref_sel } = reg_cgen_ctrl; assign s0_dat_miso = (s0_adr[6:0] == REG_LEDS) ? reg_leds : -- cgit v1.2.3 From 50a2ccee65677ed855c1798185d963fde1607324 Mon Sep 17 00:00:00 2001 From: Matt Ettus Date: Thu, 19 Aug 2010 13:08:04 -0700 Subject: catch up with tx_policy --- usrp2/fifo/fifo36_mux.v | 2 +- usrp2/fifo/fifo_new_tb.vcd | 5506 --------------------------------------- usrp2/fifo/fifo_tb.v | 25 +- usrp2/top/Makefile.common | 2 +- usrp2/top/u2_rev3/u2_core_udp.v | 56 +- usrp2/vrt/Makefile.srcs | 2 + usrp2/vrt/gen_context_pkt.v | 72 + usrp2/vrt/vita_rx_framer.v | 2 +- usrp2/vrt/vita_tx_chain.v | 71 + usrp2/vrt/vita_tx_control.v | 115 +- usrp2/vrt/vita_tx_deframer.v | 30 +- 11 files changed, 311 insertions(+), 5572 deletions(-) delete mode 100644 usrp2/fifo/fifo_new_tb.vcd create mode 100644 usrp2/vrt/gen_context_pkt.v create mode 100644 usrp2/vrt/vita_tx_chain.v diff --git a/usrp2/fifo/fifo36_mux.v b/usrp2/fifo/fifo36_mux.v index 04ec5abe8..92bf13ff9 100644 --- a/usrp2/fifo/fifo36_mux.v +++ b/usrp2/fifo/fifo36_mux.v @@ -52,6 +52,6 @@ module fifo36_mux assign dst0_rdy_o = (state==MUX_DATA0) ? dst_rdy_i : 0; assign dst1_rdy_o = (state==MUX_DATA1) ? dst_rdy_i : 0; assign src_rdy_o = (state==MUX_DATA0) ? src0_rdy_i : (state==MUX_DATA1) ? src1_rdy_i : 0; - assign data_0 = (state==MUX_DATA0) ? data0_i : data1_i; + assign data_o = (state==MUX_DATA0) ? data0_i : data1_i; endmodule // fifo36_demux diff --git a/usrp2/fifo/fifo_new_tb.vcd b/usrp2/fifo/fifo_new_tb.vcd deleted file mode 100644 index 796889e7d..000000000 --- a/usrp2/fifo/fifo_new_tb.vcd +++ /dev/null @@ -1,5506 +0,0 @@ -$date - Thu Mar 19 17:21:11 2009 -$end -$version - Icarus Verilog -$end -$timescale - 1ps -$end -$scope module fifo_new_tb $end -$var wire 1 ! dst_rdy_f36i $end -$var wire 36 " f36_in [35:0] $end -$var wire 36 # i1 [35:0] $end -$var wire 1 $ i1_dr $end -$var wire 1 % i1_sr $end -$var wire 19 & i2 [18:0] $end -$var wire 1 ' i2_dr $end -$var wire 1 ( i2_sr $end -$var wire 19 ) i3 [18:0] $end -$var wire 1 * i3_dr $end -$var wire 1 + i3_sr $end -$var wire 36 , i4 [35:0] $end -$var wire 1 - i4_sr $end -$var wire 8 . ll_data [7:0] $end -$var wire 1 / ll_dst_rdy_n $end -$var wire 1 0 ll_eof_n $end -$var wire 1 1 ll_sof_n $end -$var wire 1 2 ll_src_rdy_n $end -$var reg 1 3 clear $end -$var reg 1 4 clk $end -$var reg 16 5 count [15:0] $end -$var reg 1 6 dst_rdy_f36o $end -$var reg 32 7 f36_data [31:0] $end -$var reg 1 8 f36_eof $end -$var reg 2 9 f36_occ [1:0] $end -$var reg 1 : f36_sof $end -$var reg 1 ; i4_dr $end -$var reg 1 < rst $end -$var reg 1 = src_rdy_f36i $end -$scope module fifo_short1 $end -$var wire 1 > clear $end -$var wire 1 ? clk $end -$var wire 36 @ datain [35:0] $end -$var wire 36 A dataout [35:0] $end -$var wire 1 $ dst_rdy_i $end -$var wire 1 ! dst_rdy_o $end -$var wire 1 B read $end -$var wire 1 C reset $end -$var wire 1 D src_rdy_i $end -$var wire 1 % src_rdy_o $end -$var wire 1 E write $end -$var reg 4 F a [3:0] $end -$var reg 1 G empty $end -$var reg 1 H full $end -$var reg 5 I occupied [4:0] $end -$var reg 5 J space [4:0] $end -$scope begin gen_srl16[0] $end -$scope module srl16e $end -$var wire 1 K A0 $end -$var wire 1 L A1 $end -$var wire 1 M A2 $end -$var wire 1 N A3 $end -$var wire 1 E CE $end -$var wire 1 ? CLK $end -$var wire 1 O D $end -$var wire 1 P Q $end -$var reg 16 Q data [15:0] $end -$upscope $end -$upscope $end -$scope begin gen_srl16[1] $end -$scope module srl16e $end -$var wire 1 R A0 $end -$var wire 1 S A1 $end -$var wire 1 T A2 $end -$var wire 1 U A3 $end -$var wire 1 E CE $end -$var wire 1 ? CLK $end -$var wire 1 V D $end -$var wire 1 W Q $end -$var reg 16 X data [15:0] $end -$upscope $end -$upscope $end -$scope begin gen_srl16[2] $end -$scope module srl16e $end -$var wire 1 Y A0 $end -$var wire 1 Z A1 $end -$var wire 1 [ A2 $end -$var wire 1 \ A3 $end -$var wire 1 E CE $end -$var wire 1 ? CLK $end -$var wire 1 ] D $end -$var wire 1 ^ Q $end -$var reg 16 _ data [15:0] $end -$upscope $end -$upscope $end -$scope begin gen_srl16[3] $end -$scope module srl16e $end -$var wire 1 ` A0 $end -$var wire 1 a A1 $end -$var wire 1 b A2 $end -$var wire 1 c A3 $end -$var wire 1 E CE $end -$var wire 1 ? CLK $end -$var wire 1 d D $end -$var wire 1 e Q $end -$var reg 16 f data [15:0] $end -$upscope $end -$upscope $end -$scope begin gen_srl16[4] $end -$scope module srl16e $end -$var wire 1 g A0 $end -$var wire 1 h A1 $end -$var wire 1 i A2 $end -$var wire 1 j A3 $end -$var wire 1 E CE $end -$var wire 1 ? CLK $end -$var wire 1 k D $end -$var wire 1 l Q $end -$var reg 16 m data [15:0] $end -$upscope $end -$upscope $end -$scope begin gen_srl16[5] $end -$scope module srl16e $end -$var wire 1 n A0 $end -$var wire 1 o A1 $end -$var wire 1 p A2 $end -$var wire 1 q A3 $end -$var wire 1 E CE $end -$var wire 1 ? CLK $end -$var wire 1 r D $end -$var wire 1 s Q $end -$var reg 16 t data [15:0] $end -$upscope $end -$upscope $end -$scope begin gen_srl16[6] $end -$scope module srl16e $end -$var wire 1 u A0 $end -$var wire 1 v A1 $end -$var wire 1 w A2 $end -$var wire 1 x A3 $end -$var wire 1 E CE $end -$var wire 1 ? CLK $end -$var wire 1 y D $end -$var wire 1 z Q $end -$var reg 16 { data [15:0] $end -$upscope $end -$upscope $end -$scope begin gen_srl16[7] $end -$scope module srl16e $end -$var wire 1 | A0 $end -$var wire 1 } A1 $end -$var wire 1 ~ A2 $end -$var wire 1 !" A3 $end -$var wire 1 E CE $end -$var wire 1 ? CLK $end -$var wire 1 "" D $end -$var wire 1 #" Q $end -$var reg 16 $" data [15:0] $end -$upscope $end -$upscope $end -$scope begin gen_srl16[8] $end -$scope module srl16e $end -$var wire 1 %" A0 $end -$var wire 1 &" A1 $end -$var wire 1 '" A2 $end -$var wire 1 (" A3 $end -$var wire 1 E CE $end -$var wire 1 ? CLK $end -$var wire 1 )" D $end -$var wire 1 *" Q $end -$var reg 16 +" data [15:0] $end -$upscope $end -$upscope $end -$scope begin gen_srl16[9] $end -$scope module srl16e $end -$var wire 1 ," A0 $end -$var wire 1 -" A1 $end -$var wire 1 ." A2 $end -$var wire 1 /" A3 $end -$var wire 1 E CE $end -$var wire 1 ? CLK $end -$var wire 1 0" D $end -$var wire 1 1" Q $end -$var reg 16 2" data [15:0] $end -$upscope $end -$upscope $end -$scope begin gen_srl16[10] $end -$scope module srl16e $end -$var wire 1 3" A0 $end -$var wire 1 4" A1 $end -$var wire 1 5" A2 $end -$var wire 1 6" A3 $end -$var wire 1 E CE $end -$var wire 1 ? CLK $end -$var wire 1 7" D $end -$var wire 1 8" Q $end -$var reg 16 9" data [15:0] $end -$upscope $end -$upscope $end -$scope begin gen_srl16[11] $end -$scope module srl16e $end -$var wire 1 :" A0 $end -$var wire 1 ;" A1 $end -$var wire 1 <" A2 $end -$var wire 1 =" A3 $end -$var wire 1 E CE $end -$var wire 1 ? CLK $end -$var wire 1 >" D $end -$var wire 1 ?" Q $end -$var reg 16 @" data [15:0] $end -$upscope $end -$upscope $end -$scope begin gen_srl16[12] $end -$scope module srl16e $end -$var wire 1 A" A0 $end -$var wire 1 B" A1 $end -$var wire 1 C" A2 $end -$var wire 1 D" A3 $end -$var wire 1 E CE $end -$var wire 1 ? CLK $end -$var wire 1 E" D $end -$var wire 1 F" Q $end -$var reg 16 G" data [15:0] $end -$upscope $end -$upscope $end -$scope begin gen_srl16[13] $end -$scope module srl16e $end -$var wire 1 H" A0 $end -$var wire 1 I" A1 $end -$var wire 1 J" A2 $end -$var wire 1 K" A3 $end -$var wire 1 E CE $end -$var wire 1 ? CLK $end -$var wire 1 L" D $end -$var wire 1 M" Q $end -$var reg 16 N" data [15:0] $end -$upscope $end -$upscope $end -$scope begin gen_srl16[14] $end -$scope module srl16e $end -$var wire 1 O" A0 $end -$var wire 1 P" A1 $end -$var wire 1 Q" A2 $end -$var wire 1 R" A3 $end -$var wire 1 E CE $end -$var wire 1 ? CLK $end -$var wire 1 S" D $end -$var wire 1 T" Q $end -$var reg 16 U" data [15:0] $end -$upscope $end -$upscope $end -$scope begin gen_srl16[15] $end -$scope module srl16e $end -$var wire 1 V" A0 $end -$var wire 1 W" A1 $end -$var wire 1 X" A2 $end -$var wire 1 Y" A3 $end -$var wire 1 E CE $end -$var wire 1 ? CLK $end -$var wire 1 Z" D $end -$var wire 1 [" Q $end -$var reg 16 \" data [15:0] $end -$upscope $end -$upscope $end -$scope begin gen_srl16[16] $end -$scope module srl16e $end -$var wire 1 ]" A0 $end -$var wire 1 ^" A1 $end -$var wire 1 _" A2 $end -$var wire 1 `" A3 $end -$var wire 1 E CE $end -$var wire 1 ? CLK $end -$var wire 1 a" D $end -$var wire 1 b" Q $end -$var reg 16 c" data [15:0] $end -$upscope $end -$upscope $end -$scope begin gen_srl16[17] $end -$scope module srl16e $end -$var wire 1 d" A0 $end -$var wire 1 e" A1 $end -$var wire 1 f" A2 $end -$var wire 1 g" A3 $end -$var wire 1 E CE $end -$var wire 1 ? CLK $end -$var wire 1 h" D $end -$var wire 1 i" Q $end -$var reg 16 j" data [15:0] $end -$upscope $end -$upscope $end -$scope begin gen_srl16[18] $end -$scope module srl16e $end -$var wire 1 k" A0 $end -$var wire 1 l" A1 $end -$var wire 1 m" A2 $end -$var wire 1 n" A3 $end -$var wire 1 E CE $end -$var wire 1 ? CLK $end -$var wire 1 o" D $end -$var wire 1 p" Q $end -$var reg 16 q" data [15:0] $end -$upscope $end -$upscope $end -$scope begin gen_srl16[19] $end -$scope module srl16e $end -$var wire 1 r" A0 $end -$var wire 1 s" A1 $end -$var wire 1 t" A2 $end -$var wire 1 u" A3 $end -$var wire 1 E CE $end -$var wire 1 ? CLK $end -$var wire 1 v" D $end -$var wire 1 w" Q $end -$var reg 16 x" data [15:0] $end -$upscope $end -$upscope $end -$scope begin gen_srl16[20] $end -$scope module srl16e $end -$var wire 1 y" A0 $end -$var wire 1 z" A1 $end -$var wire 1 {" A2 $end -$var wire 1 |" A3 $end -$var wire 1 E CE $end -$var wire 1 ? CLK $end -$var wire 1 }" D $end -$var wire 1 ~" Q $end -$var reg 16 !# data [15:0] $end -$upscope $end -$upscope $end -$scope begin gen_srl16[21] $end -$scope module srl16e $end -$var wire 1 "# A0 $end -$var wire 1 ## A1 $end -$var wire 1 $# A2 $end -$var wire 1 %# A3 $end -$var wire 1 E CE $end -$var wire 1 ? CLK $end -$var wire 1 &# D $end -$var wire 1 '# Q $end -$var reg 16 (# data [15:0] $end -$upscope $end -$upscope $end -$scope begin gen_srl16[22] $end -$scope module srl16e $end -$var wire 1 )# A0 $end -$var wire 1 *# A1 $end -$var wire 1 +# A2 $end -$var wire 1 ,# A3 $end -$var wire 1 E CE $end -$var wire 1 ? CLK $end -$var wire 1 -# D $end -$var wire 1 .# Q $end -$var reg 16 /# data [15:0] $end -$upscope $end -$upscope $end -$scope begin gen_srl16[23] $end -$scope module srl16e $end -$var wire 1 0# A0 $end -$var wire 1 1# A1 $end -$var wire 1 2# A2 $end -$var wire 1 3# A3 $end -$var wire 1 E CE $end -$var wire 1 ? CLK $end -$var wire 1 4# D $end -$var wire 1 5# Q $end -$var reg 16 6# data [15:0] $end -$upscope $end -$upscope $end -$scope begin gen_srl16[24] $end -$scope module srl16e $end -$var wire 1 7# A0 $end -$var wire 1 8# A1 $end -$var wire 1 9# A2 $end -$var wire 1 :# A3 $end -$var wire 1 E CE $end -$var wire 1 ? CLK $end -$var wire 1 ;# D $end -$var wire 1 <# Q $end -$var reg 16 =# data [15:0] $end -$upscope $end -$upscope $end -$scope begin gen_srl16[25] $end -$scope module srl16e $end -$var wire 1 ># A0 $end -$var wire 1 ?# A1 $end -$var wire 1 @# A2 $end -$var wire 1 A# A3 $end -$var wire 1 E CE $end -$var wire 1 ? CLK $end -$var wire 1 B# D $end -$var wire 1 C# Q $end -$var reg 16 D# data [15:0] $end -$upscope $end -$upscope $end -$scope begin gen_srl16[26] $end -$scope module srl16e $end -$var wire 1 E# A0 $end -$var wire 1 F# A1 $end -$var wire 1 G# A2 $end -$var wire 1 H# A3 $end -$var wire 1 E CE $end -$var wire 1 ? CLK $end -$var wire 1 I# D $end -$var wire 1 J# Q $end -$var reg 16 K# data [15:0] $end -$upscope $end -$upscope $end -$scope begin gen_srl16[27] $end -$scope module srl16e $end -$var wire 1 L# A0 $end -$var wire 1 M# A1 $end -$var wire 1 N# A2 $end -$var wire 1 O# A3 $end -$var wire 1 E CE $end -$var wire 1 ? CLK $end -$var wire 1 P# D $end -$var wire 1 Q# Q $end -$var reg 16 R# data [15:0] $end -$upscope $end -$upscope $end -$scope begin gen_srl16[28] $end -$scope module srl16e $end -$var wire 1 S# A0 $end -$var wire 1 T# A1 $end -$var wire 1 U# A2 $end -$var wire 1 V# A3 $end -$var wire 1 E CE $end -$var wire 1 ? CLK $end -$var wire 1 W# D $end -$var wire 1 X# Q $end -$var reg 16 Y# data [15:0] $end -$upscope $end -$upscope $end -$scope begin gen_srl16[29] $end -$scope module srl16e $end -$var wire 1 Z# A0 $end -$var wire 1 [# A1 $end -$var wire 1 \# A2 $end -$var wire 1 ]# A3 $end -$var wire 1 E CE $end -$var wire 1 ? CLK $end -$var wire 1 ^# D $end -$var wire 1 _# Q $end -$var reg 16 `# data [15:0] $end -$upscope $end -$upscope $end -$scope begin gen_srl16[30] $end -$scope module srl16e $end -$var wire 1 a# A0 $end -$var wire 1 b# A1 $end -$var wire 1 c# A2 $end -$var wire 1 d# A3 $end -$var wire 1 E CE $end -$var wire 1 ? CLK $end -$var wire 1 e# D $end -$var wire 1 f# Q $end -$var reg 16 g# data [15:0] $end -$upscope $end -$upscope $end -$scope begin gen_srl16[31] $end -$scope module srl16e $end -$var wire 1 h# A0 $end -$var wire 1 i# A1 $end -$var wire 1 j# A2 $end -$var wire 1 k# A3 $end -$var wire 1 E CE $end -$var wire 1 ? CLK $end -$var wire 1 l# D $end -$var wire 1 m# Q $end -$var reg 16 n# data [15:0] $end -$upscope $end -$upscope $end -$scope begin gen_srl16[32] $end -$scope module srl16e $end -$var wire 1 o# A0 $end -$var wire 1 p# A1 $end -$var wire 1 q# A2 $end -$var wire 1 r# A3 $end -$var wire 1 E CE $end -$var wire 1 ? CLK $end -$var wire 1 s# D $end -$var wire 1 t# Q $end -$var reg 16 u# data [15:0] $end -$upscope $end -$upscope $end -$scope begin gen_srl16[33] $end -$scope module srl16e $end -$var wire 1 v# A0 $end -$var wire 1 w# A1 $end -$var wire 1 x# A2 $end -$var wire 1 y# A3 $end -$var wire 1 E CE $end -$var wire 1 ? CLK $end -$var wire 1 z# D $end -$var wire 1 {# Q $end -$var reg 16 |# data [15:0] $end -$upscope $end -$upscope $end -$scope begin gen_srl16[34] $end -$scope module srl16e $end -$var wire 1 }# A0 $end -$var wire 1 ~# A1 $end -$var wire 1 !$ A2 $end -$var wire 1 "$ A3 $end -$var wire 1 E CE $end -$var wire 1 ? CLK $end -$var wire 1 #$ D $end -$var wire 1 $$ Q $end -$var reg 16 %$ data [15:0] $end -$upscope $end -$upscope $end -$scope begin gen_srl16[35] $end -$scope module srl16e $end -$var wire 1 &$ A0 $end -$var wire 1 '$ A1 $end -$var wire 1 ($ A2 $end -$var wire 1 )$ A3 $end -$var wire 1 E CE $end -$var wire 1 ? CLK $end -$var wire 1 *$ D $end -$var wire 1 +$ Q $end -$var reg 16 ,$ data [15:0] $end -$upscope $end -$upscope $end -$upscope $end -$scope module fifo36_to_fifo19 $end -$var wire 1 > clear $end -$var wire 1 ? clk $end -$var wire 19 -$ f19_dataout [18:0] $end -$var wire 1 ' f19_dst_rdy_i $end -$var wire 1 ( f19_src_rdy_o $end -$var wire 1 .$ f19_xfer $end -$var wire 36 /$ f36_datain [35:0] $end -$var wire 1 $ f36_dst_rdy_o $end -$var wire 1 0$ f36_eof $end -$var wire 1 1$ f36_occ $end -$var wire 1 2$ f36_sof $end -$var wire 1 % f36_src_rdy_i $end -$var wire 1 3$ f36_xfer $end -$var wire 1 4$ half_line $end -$var wire 1 C reset $end -$var reg 1 5$ phase $end -$upscope $end -$scope module fifo19_to_ll8 $end -$var wire 1 6$ advance $end -$var wire 1 > clear $end -$var wire 1 ? clk $end -$var wire 19 7$ f19_data [18:0] $end -$var wire 1 ' f19_dst_rdy_o $end -$var wire 1 8$ f19_eof $end -$var wire 1 9$ f19_occ $end -$var wire 1 :$ f19_sof $end -$var wire 1 ( f19_src_rdy_i $end -$var wire 1 ;$ ll_dst_rdy $end -$var wire 1 / ll_dst_rdy_n $end -$var wire 1 <$ ll_eof $end -$var wire 1 0 ll_eof_n $end -$var wire 1 =$ ll_sof $end -$var wire 1 1 ll_sof_n $end -$var wire 1 >$ ll_src_rdy $end -$var wire 1 2 ll_src_rdy_n $end -$var wire 1 C reset $end -$var reg 8 ?$ ll_data [7:0] $end -$var reg 1 @$ state $end -$upscope $end -$scope module ll8_to_fifo19 $end -$var wire 1 > clear $end -$var wire 1 ? clk $end -$var wire 19 A$ f19_data [18:0] $end -$var wire 1 * f19_dst_rdy_i $end -$var wire 1 + f19_src_rdy_o $end -$var wire 8 B$ ll_data [7:0] $end -$var wire 1 C$ ll_dst_rdy $end -$var wire 1 / ll_dst_rdy_n $end -$var wire 1 D$ ll_eof $end -$var wire 1 0 ll_eof_n $end -$var wire 1 E$ ll_sof $end -$var wire 1 1 ll_sof_n $end -$var wire 1 F$ ll_src_rdy $end -$var wire 1 2 ll_src_rdy_n $end -$var wire 1 C reset $end -$var wire 1 G$ xfer_out $end -$var reg 8 H$ dat0 [7:0] $end -$var reg 8 I$ dat1 [7:0] $end -$var reg 1 J$ f19_eof $end -$var reg 1 K$ f19_occ $end -$var reg 1 L$ f19_sof $end -$var reg 2 M$ state [1:0] $end -$upscope $end -$scope module fifo19_to_fifo36 $end -$var wire 1 > clear $end -$var wire 1 ? clk $end -$var wire 19 N$ f19_datain [18:0] $end -$var wire 1 * f19_dst_rdy_o $end -$var wire 1 O$ f19_eof $end -$var wire 1 P$ f19_occ $end -$var wire 1 Q$ f19_sof $end -$var wire 1 + f19_src_rdy_i $end -$var wire 36 R$ f36_dataout [35:0] $end -$var wire 1 S$ f36_dst_rdy_i $end -$var wire 1 - f36_src_rdy_o $end -$var wire 1 C reset $end -$var wire 1 T$ xfer_out $end -$var reg 16 U$ dat0 [15:0] $end -$var reg 16 V$ dat1 [15:0] $end -$var reg 1 W$ f36_eof $end -$var reg 1 X$ f36_occ $end -$var reg 1 Y$ f36_sof $end -$var reg 2 Z$ state [1:0] $end -$upscope $end -$scope task PutPacketInFIFO36 $end -$var reg 32 [$ data_len [31:0] $end -$var reg 32 \$ data_start [31:0] $end -$upscope $end -$scope task ReadFromFIFO36 $end -$upscope $end -$upscope $end -$enddefinitions $end -#0 -$dumpvars -bx \$ -bx [$ -bx Z$ -xY$ -xX$ -xW$ -bx V$ -bx U$ -0T$ -0S$ -b0xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx R$ -xQ$ -xP$ -xO$ -bx N$ -bx M$ -xL$ -xK$ -xJ$ -bx I$ -bx H$ -xG$ -xF$ -xE$ -xD$ -xC$ -bx B$ -bx A$ -x@$ -bx ?$ -x>$ -x=$ -x<$ -x;$ -x:$ -x9$ -x8$ -bx 7$ -x6$ -x5$ -x4$ -x3$ -x2$ -x1$ -x0$ -bx /$ -x.$ -bx -$ -b0 ,$ -x+$ -0*$ -x)$ -x($ -x'$ -x&$ -b0 %$ -x$$ -0#$ -x"$ -x!$ -x~# -x}# -b0 |# -x{# -0z# -xy# -xx# -xw# -xv# -b0 u# -xt# -0s# -xr# -xq# -xp# -xo# -b0 n# -xm# -0l# -xk# -xj# -xi# -xh# -b0 g# -xf# -0e# -xd# -xc# -xb# -xa# -b0 `# -x_# -0^# -x]# -x\# -x[# -xZ# -b0 Y# -xX# -0W# -xV# -xU# -xT# -xS# -b0 R# -xQ# -0P# -xO# -xN# -xM# -xL# -b0 K# -xJ# -0I# -xH# -xG# -xF# -xE# -b0 D# -xC# -0B# -xA# -x@# -x?# -x># -b0 =# -x<# -0;# -x:# -x9# -x8# -x7# -b0 6# -x5# -04# -x3# -x2# -x1# -x0# -b0 /# -x.# -0-# -x,# -x+# -x*# -x)# -b0 (# -x'# -0&# -x%# -x$# -x## -x"# -b0 !# -x~" -0}" -x|" -x{" -xz" -xy" -b0 x" -xw" -0v" -xu" -xt" -xs" -xr" -b0 q" -xp" -0o" -xn" -xm" -xl" -xk" -b0 j" -xi" -0h" -xg" -xf" -xe" -xd" -b0 c" -xb" -0a" -x`" -x_" -x^" -x]" -b0 \" -x[" -0Z" -xY" -xX" -xW" -xV" -b0 U" -xT" -0S" -xR" -xQ" -xP" -xO" -b0 N" -xM" -0L" -xK" -xJ" -xI" -xH" -b0 G" -xF" -0E" -xD" -xC" -xB" -xA" -b0 @" -x?" -0>" -x=" -x<" -x;" -x:" -b0 9" -x8" -07" -x6" -x5" -x4" -x3" -b0 2" -x1" -00" -x/" -x." -x-" -x," -b0 +" -x*" -0)" -x(" -x'" -x&" -x%" -b0 $" -x#" -0"" -x!" -x~ -x} -x| -b0 { -xz -0y -xx -xw -xv -xu -b0 t -xs -0r -xq -xp -xo -xn -b0 m -xl -0k -xj -xi -xh -xg -b0 f -xe -0d -xc -xb -xa -x` -b0 _ -x^ -0] -x\ -x[ -xZ -xY -b0 X -xW -0V -xU -xT -xS -xR -b0 Q -xP -0O -xN -xM -xL -xK -bx J -bx I -xH -xG -bx F -0E -0D -1C -xB -bx A -b0 @ -0? -0> -0= -1< -0; -0: -b0 9 -08 -b0 7 -06 -bx 5 -04 -03 -x2 -x1 -x0 -x/ -bx . -x- -b0xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx , -x+ -x* -bx ) -x( -x' -bx & -x% -x$ -bx # -b0 " -x! -$end -#50000000000000 -0D$ -10 -0E$ -0<$ -11 -08$ -09$ -0=$ -0$ -b0 ?$ -b0 . -b0 B$ -0:$ -0' -0F$ -04$ -01$ -b0 & -b0 -$ -b0 7$ -1;$ -0.$ -06$ -12 -03$ -0B -02$ -00$ -0/ -1! -0>$ -0( -0% -0K -0P -0L -0M -0N -0R -0W -0S -0T -0U -0Y -0^ -0Z -0[ -0\ -0` -0e -0a -0b -0c -0g -0l -0h -0i -0j -0n -0s -0o -0p -0q -0u -0z -0v -0w -0x -0| -0#" -0} -0~ -0!" -0%" -0*" -0&" -0'" -0(" -0," -01" -0-" -0." -0/" -03" -08" -04" -05" -06" -0:" -0?" -0;" -0<" -0=" -0A" -0F" -0B" -0C" -0D" -0H" -0M" -0I" -0J" -0K" -0O" -0T" -0P" -0Q" -0R" -0V" -0[" -0W" -0X" -0Y" -0]" -0b" -0^" -0_" -0`" -0d" -0i" -0e" -0f" -0g" -0k" -0p" -0l" -0m" -0n" -0r" -0w" -0s" -0t" -0u" -0y" -0~" -0z" -0{" -0|" -0"# -0'# -0## -0$# -0%# -0)# -0.# -0*# -0+# -0,# -00# -05# -01# -02# -03# -07# -0<# -08# -09# -0:# -0># -0C# -0?# -0@# -0A# -0E# -0J# -0F# -0G# -0H# -0L# -0Q# -0M# -0N# -0O# -0S# -0X# -0T# -0U# -0V# -0Z# -0_# -0[# -0\# -0]# -0a# -0f# -0b# -0c# -0d# -0h# -0m# -0i# -0j# -0k# -0o# -0t# -0p# -0q# -0r# -0v# -0{# -0w# -0x# -0y# -0}# -0$$ -0~# -0!$ -0"$ -0&$ -0+$ -b0 # -b0 A -b0 /$ -0'$ -0($ -0)$ -0P$ -1C$ -0G$ -1* -0H -1G -b0 F -b10000 J -b0 I -05$ -0@$ -0K$ -b0xxxxxxxxxxxxxxxxxx ) -b0xxxxxxxxxxxxxxxxxx A$ -b0xxxxxxxxxxxxxxxxxx N$ -b0 M$ -0+ -0X$ -b0xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx , -b0xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx R$ -b0 Z$ -0- -14 -1? -#100000000000000 -04 -0? -#150000000000000 -14 -1? -#200000000000000 -04 -0? -#250000000000000 -14 -1? -#300000000000000 -04 -0? -#350000000000000 -14 -1? -#400000000000000 -04 -0? -#450000000000000 -14 -1? -#500000000000000 -04 -0? -#550000000000000 -14 -1? -#600000000000000 -04 -0? -#650000000000000 -14 -1? -#700000000000000 -04 -0? -#750000000000000 -14 -1? -#800000000000000 -04 -0? -#850000000000000 -14 -1? -#900000000000000 -04 -0? -#950000000000000 -14 -1? -#1000000000000000 -04 -0? -0< -0C -#1050000000000000 -14 -1? -#1100000000000000 -04 -0? -#1150000000000000 -1k -1y -1"" -1S" -1Z" -1}" -1&# -14# -1^# -1l# -1s# -1E -1: -b10100000101100001100000011010000 7 -b110100000101100001100000011010000 " -b110100000101100001100000011010000 @ -1= -1D -b100 5 -b1100 [$ -b10100000101100001100000011010000 \$ -14 -1? -#1200000000000000 -04 -0? -#1250000000000000 -1F$ -16$ -02 -1>$ -1( -1% -1O -1)" -1a" -1;# -0s# -0G -b1111 J -b1 I -b1000 5 -b10100001101100011100000111010001 7 -0: -b10100001101100011100000111010001 " -b10100001101100011100000111010001 @ -14 -1? -#1250000000000100 -1E$ -01 -1=$ -b10100000 ?$ -b10100000 . -b10100000 B$ -1:$ -b11010000010110000 & -b11010000010110000 -$ -b11010000010110000 7$ -12$ -b1 m -1l -b1 { -1z -b1 $" -1#" -b1 U" -1T" -b1 \" -1[" -b1 !# -1~" -b1 (# -1'# -b1 6# -15# -b1 `# -1_# -b1 n# -1m# -b1 u# -1t# -b110100000101100001100000011010000 # -b110100000101100001100000011010000 A -b110100000101100001100000011010000 /$ -#1300000000000000 -04 -0? -#1350000000000000 -0E$ -0:$ -1.$ -11 -b0 & -b0 -$ -b0 7$ -1' -0=$ -02$ -0O -1V -0)" -10" -0a" -1h" -0;# -1B# -1z# -1Q$ -0O$ -b0 ?$ -b0 . -b0 B$ -1K -1R -1Y -1` -1g -0l -1n -1u -0z -1| -0#" -1%" -1," -13" -1:" -1A" -1H" -1O" -0T" -1V" -0[" -1]" -1d" -1k" -1r" -1y" -0~" -1"# -0'# -1)# -10# -05# -17# -1># -1E# -1L# -1S# -1Z# -0_# -1a# -1h# -0m# -1o# -0t# -b0 # -b0 A -b0 /$ -1v# -1}# -1&$ -18 -b10100010101100101100001011010010 7 -b1010100010101100101100001011010010 " -b1010100010101100101100001011010010 @ -b10100000 H$ -b1 M$ -0J$ -1L$ -b110100000xxxxxxxx ) -b110100000xxxxxxxx A$ -b110100000xxxxxxxx N$ -1@$ -b10 I -b1110 J -b1 F -14 -1? -#1350000000000100 -b10110000 ?$ -b10110000 . -b10110000 B$ -1:$ -b11010000010110000 & -b11010000010110000 -$ -b11010000010110000 7$ -12$ -b10 u# -1t# -b11 n# -1m# -b11 `# -1_# -b1 =# -b11 6# -15# -b11 (# -1'# -b11 !# -1~" -b1 c" -b11 \" -1[" -b11 U" -1T" -b1 +" -b11 $" -1#" -b11 { -1z -b11 m -1l -b110100000101100001100000011010000 # -b110100000101100001100000011010000 A -b110100000101100001100000011010000 /$ -b1 Q -#1351000000000000 -1; -1S$ -#1400000000000000 -04 -0? -#1450000000000000 -0E$ -0.$ -11 -02$ -0:$ -0' -0=$ -0K -1L -0R -1S -0Y -1Z -0` -1a -0g -1h -0l -0n -1o -0u -1v -0z -0| -1} -0#" -0%" -1&" -0," -1-" -03" -14" -0:" -1;" -0A" -1B" -0H" -1I" -0O" -1P" -0T" -0V" -1W" -0[" -0]" -1^" -0d" -1e" -0k" -1l" -0r" -1s" -0y" -1z" -0~" -0"# -1## -0'# -0)# -1*# -00# -11# -05# -07# -18# -0># -1?# -0E# -1F# -0L# -1M# -0S# -1T# -0Z# -1[# -0_# -0a# -1b# -0h# -1i# -0m# -0o# -1p# -0t# -b0 # -b0 A -b0 /$ -0v# -1w# -0}# -1~# -0&$ -1'$ -b0 & -b0 -$ -b0 7$ -b0 ?$ -b0 . -b0 B$ -1G$ -0E -0V -0k -0y -0"" -00" -0S" -0Z" -0h" -0}" -0&# -04# -0B# -0^# -0l# -0z# -b10 F -b1101 J -b11 I -15$ -0@$ -b10 M$ -1+ -b10110000 I$ -b11010000010110000 ) -b11010000010110000 A$ -b11010000010110000 N$ -0= -0D -b0 7 -08 -b0 " -b0 @ -14 -1? -#1450000000000100 -b11000000 ?$ -b11000000 . -b11000000 B$ -b1100000011010000 & -b1100000011010000 -$ -b1100000011010000 7$ -12$ -b10 Q -b1 X -b111 m -1l -b111 { -1z -b111 $" -1#" -b10 +" -b1 2" -b111 U" -1T" -b111 \" -1[" -b10 c" -b1 j" -b111 !# -1~" -b111 (# -1'# -b111 6# -15# -b10 =# -b1 D# -b111 `# -1_# -b111 n# -1m# -b100 u# -1t# -b110100000101100001100000011010000 # -b110100000101100001100000011010000 A -b110100000101100001100000011010000 /$ -b1 |# -#1500000000000000 -04 -0? -#1550000000000000 -13$ -1B -1.$ -1$ -1' -0G$ -0Q$ -b11010000 ?$ -b11010000 . -b11010000 B$ -b1010000010110000 U$ -b1 Z$ -0W$ -1Y$ -b11010000010110000xxxxxxxxxxxxxxxx , -b11010000010110000xxxxxxxxxxxxxxxx R$ -b11000000 H$ -b1 M$ -0+ -0L$ -b1100000010110000 ) -b1100000010110000 A$ -b1100000010110000 N$ -1@$ -14 -1? -#1600000000000000 -04 -0? -#1650000000000000 -0E$ -11 -0=$ -03$ -0B -0.$ -02$ -0:$ -0$ -0' -1K -1P -0L -1R -0S -0W -1Y -0Z -1` -0a -1g -0h -1n -0o -1u -0v -1| -0} -1%" -1*" -0&" -1," -0-" -01" -13" -04" -1:" -0;" -1A" -0B" -1H" -0I" -1O" -0P" -1V" -0W" -1]" -1b" -0^" -1d" -0e" -0i" -1k" -0l" -1r" -0s" -1y" -0z" -1"# -0## -1)# -0*# -10# -01# -17# -1<# -08# -1># -0?# -0C# -1E# -0F# -1L# -0M# -1S# -0T# -1Z# -0[# -1a# -0b# -1h# -0i# -1o# -0p# -0t# -1v# -0w# -0{# -b10100001101100011100000111010001 # -b10100001101100011100000111010001 A -b10100001101100011100000111010001 /$ -1}# -0~# -1&$ -0'$ -b1010000110110001 & -b1010000110110001 -$ -b1010000110110001 7$ -b10100001 ?$ -b10100001 . -b10100001 B$ -1G$ -b1 F -b1110 J -b10 I -05$ -0@$ -b10 M$ -1+ -b11010000 I$ -b1100000011010000 ) -b1100000011010000 A$ -b1100000011010000 N$ -14 -1? -#1700000000000000 -04 -0? -#1750000000000000 -1.$ -1' -1T$ -0G$ -b10110001 ?$ -b10110001 . -b10110001 B$ -b1100000011010000 V$ -b110100000101100001100000011010000 , -b110100000101100001100000011010000 R$ -b10 Z$ -1- -b10100001 H$ -b1010000111010000 ) -b1010000111010000 A$ -b1010000111010000 N$ -b1 M$ -0+ -1@$ -14 -1? -#1800000000000000 -04 -0? -#1850000000000000 -0.$ -0' -b1100000111010001 & -b1100000111010001 -$ -b1100000111010001 7$ -b11000001 ?$ -b11000001 . -b11000001 B$ -1G$ -0T$ -15$ -0@$ -b10 M$ -1+ -b10110001 I$ -b1010000110110001 ) -b1010000110110001 A$ -b1010000110110001 N$ -b0 Z$ -0- -14 -1? -#1900000000000000 -04 -0? -#1950000000000000 -13$ -1B -1.$ -1$ -1' -0G$ -b11010001 ?$ -b11010001 . -b11010001 B$ -b1010000110110001 U$ -b1 Z$ -0Y$ -b10100001101100011100000011010000 , -b10100001101100011100000011010000 R$ -b11000001 H$ -b1100000110110001 ) -b1100000110110001 A$ -b1100000110110001 N$ -b1 M$ -0+ -1@$ -14 -1? -#2000000000000000 -04 -0? -#2050000000000000 -03$ -0B -0.$ -10$ -0$ -0' -0K -0P -0R -1W -0Y -0` -0g -0n -0u -0| -0%" -0*" -0," -11" -03" -0:" -0A" -0H" -0O" -0V" -0]" -0b" -0d" -1i" -0k" -0r" -0y" -0"# -0)# -00# -07# -0<# -0># -1C# -0E# -0L# -0S# -0Z# -0a# -0h# -0o# -0v# -1{# -b1010100010101100101100001011010010 # -b1010100010101100101100001011010010 A -b1010100010101100101100001011010010 /$ -0}# -0&$ -b1010001010110010 & -b1010001010110010 -$ -b1010001010110010 7$ -b10100010 ?$ -b10100010 . -b10100010 B$ -1G$ -b0 F -b1111 J -b1 I -05$ -0@$ -b10 M$ -1+ -b11010001 I$ -b1100000111010001 ) -b1100000111010001 A$ -b1100000111010001 N$ -14 -1? -#2100000000000000 -04 -0? -#2150000000000000 -1.$ -1' -1T$ -0G$ -b10110010 ?$ -b10110010 . -b10110010 B$ -b1100000111010001 V$ -b10100001101100011100000111010001 , -b10100001101100011100000111010001 R$ -b10 Z$ -1- -b10100010 H$ -b1010001011010001 ) -b1010001011010001 A$ -b1010001011010001 N$ -b1 M$ -0+ -1@$ -14 -1? -#2200000000000000 -04 -0? -#2250000000000000 -0.$ -18$ -0' -b101100001011010010 & -b101100001011010010 -$ -b101100001011010010 7$ -b11000010 ?$ -b11000010 . -b11000010 B$ -1G$ -0T$ -15$ -0@$ -b10 M$ -1+ -b10110010 I$ -b1010001010110010 ) -b1010001010110010 A$ -b1010001010110010 N$ -b0 Z$ -0- -14 -1? -#2300000000000000 -04 -0? -#2350000000000000 -1D$ -13$ -1B -00 -1.$ -1$ -1<$ -1' -0G$ -b11010010 ?$ -b11010010 . -b11010010 B$ -b1010001010110010 U$ -b10100010101100101100000111010001 , -b10100010101100101100000111010001 R$ -b1 Z$ -b11000010 H$ -b1100001010110010 ) -b1100001010110010 A$ -b1100001010110010 N$ -b1 M$ -0+ -1@$ -14 -1? -#2400000000000000 -04 -0? -#2450000000000000 -0D$ -0' -0F$ -10 -0.$ -06$ -12 -03$ -0B -08$ -0$ -0<$ -0>$ -0( -0% -b1010001010110010 & -b1010001010110010 -$ -b1010001010110010 7$ -b10100010 ?$ -b10100010 . -b10100010 B$ -1G$ -1O$ -1G -b10000 J -b0 I -05$ -0@$ -1J$ -b10 M$ -1+ -b11010010 I$ -b101100001011010010 ) -b101100001011010010 A$ -b101100001011010010 N$ -14 -1? -#2500000000000000 -04 -0? -#2550000000000000 -1T$ -0G$ -b1100001011010010 V$ -b10 Z$ -1- -1W$ -b1010100010101100101100001011010010 , -b1010100010101100101100001011010010 R$ -b0 M$ -0+ -14 -1? -#2600000000000000 -04 -0? -#2650000000000000 -0T$ -b0 Z$ -0- -14 -1? -#2700000000000000 -04 -0? -#2750000000000000 -14 -1? -#2800000000000000 -04 -0? -#2850000000000000 -14 -1? -#2900000000000000 -04 -0? -#2950000000000000 -14 -1? -#3000000000000000 -04 -0? -#3050000000000000 -14 -1? -#3100000000000000 -04 -0? -#3150000000000000 -14 -1? -#3200000000000000 -04 -0? -#3250000000000000 -14 -1? -#3300000000000000 -04 -0? -#3350000000000000 -14 -1? -#3400000000000000 -04 -0? -#3450000000000000 -14 -1? -#3500000000000000 -04 -0? -#3550000000000000 -14 -1? -#3600000000000000 -04 -0? -#3650000000000000 -14 -1? -#3700000000000000 -04 -0? -#3750000000000000 -14 -1? -#3800000000000000 -04 -0? -#3850000000000000 -14 -1? -#3900000000000000 -04 -0? -#3950000000000000 -14 -1? -#4000000000000000 -04 -0? -#4050000000000000 -14 -1? -#4100000000000000 -04 -0? -#4150000000000000 -14 -1? -#4200000000000000 -04 -0? -#4250000000000000 -14 -1? -#4300000000000000 -04 -0? -#4350000000000000 -14 -1? -#4400000000000000 -04 -0? -#4450000000000000 -14 -1? -#4500000000000000 -04 -0? -#4550000000000000 -14 -1? -#4600000000000000 -04 -0? -#4650000000000000 -14 -1? -#4700000000000000 -04 -0? -#4750000000000000 -14 -1? -#4800000000000000 -04 -0? -#4850000000000000 -14 -1? -#4900000000000000 -04 -0? -#4950000000000000 -14 -1? -#5000000000000000 -04 -0? -#5050000000000000 -14 -1? -#5100000000000000 -04 -0? -#5150000000000000 -14 -1? -#5200000000000000 -04 -0? -#5250000000000000 -14 -1? -#5300000000000000 -04 -0? -#5350000000000000 -14 -1? -#5400000000000000 -04 -0? -#5450000000000000 -14 -1? -#5500000000000000 -04 -0? -#5550000000000000 -14 -1? -#5600000000000000 -04 -0? -#5650000000000000 -14 -1? -#5700000000000000 -04 -0? -#5750000000000000 -14 -1? -#5800000000000000 -04 -0? -#5850000000000000 -14 -1? -#5900000000000000 -04 -0? -#5950000000000000 -14 -1? -#6000000000000000 -04 -0? -#6050000000000000 -14 -1? -#6100000000000000 -04 -0? -#6150000000000000 -14 -1? -#6200000000000000 -04 -0? -#6250000000000000 -14 -1? -#6300000000000000 -04 -0? -#6350000000000000 -14 -1? -#6400000000000000 -04 -0? -#6450000000000000 -14 -1? -#6500000000000000 -04 -0? -#6550000000000000 -14 -1? -#6600000000000000 -04 -0? -#6650000000000000 -14 -1? -#6700000000000000 -04 -0? -#6750000000000000 -14 -1? -#6800000000000000 -04 -0? -#6850000000000000 -14 -1? -#6900000000000000 -04 -0? -#6950000000000000 -14 -1? -#7000000000000000 -04 -0? -#7050000000000000 -14 -1? -#7100000000000000 -04 -0? -#7150000000000000 -14 -1? -#7200000000000000 -04 -0? -#7250000000000000 -14 -1? -#7300000000000000 -04 -0? -#7350000000000000 -14 -1? -#7400000000000000 -04 -0? -#7450000000000000 -14 -1? -#7500000000000000 -04 -0? -#7550000000000000 -14 -1? -#7600000000000000 -04 -0? -#7650000000000000 -14 -1? -#7700000000000000 -04 -0? -#7750000000000000 -14 -1? -#7800000000000000 -04 -0? -#7850000000000000 -14 -1? -#7900000000000000 -04 -0? -#7950000000000000 -14 -1? -#8000000000000000 -04 -0? -#8050000000000000 -14 -1? -#8100000000000000 -04 -0? -#8150000000000000 -14 -1? -#8200000000000000 -04 -0? -#8250000000000000 -14 -1? -#8300000000000000 -04 -0? -#8350000000000000 -14 -1? -#8400000000000000 -04 -0? -#8450000000000000 -14 -1? -#8500000000000000 -04 -0? -#8550000000000000 -14 -1? -#8600000000000000 -04 -0? -#8650000000000000 -14 -1? -#8700000000000000 -04 -0? -#8750000000000000 -14 -1? -#8800000000000000 -04 -0? -#8850000000000000 -14 -1? -#8900000000000000 -04 -0? -#8950000000000000 -14 -1? -#9000000000000000 -04 -0? -#9050000000000000 -14 -1? -#9100000000000000 -04 -0? -#9150000000000000 -14 -1? -#9200000000000000 -04 -0? -#9250000000000000 -14 -1? -#9300000000000000 -04 -0? -#9350000000000000 -14 -1? -#9400000000000000 -04 -0? -#9450000000000000 -14 -1? -#9500000000000000 -04 -0? -#9550000000000000 -14 -1? -#9600000000000000 -04 -0? -#9650000000000000 -14 -1? -#9700000000000000 -04 -0? -#9750000000000000 -14 -1? -#9800000000000000 -04 -0? -#9850000000000000 -14 -1? -#9900000000000000 -04 -0? -#9950000000000000 -14 -1? -#10000000000000000 -04 -0? -#10050000000000000 -14 -1? -#10100000000000000 -04 -0? -#10150000000000000 -14 -1? -#10200000000000000 -04 -0? -#10250000000000000 -14 -1? -#10300000000000000 -04 -0? -#10350000000000000 -14 -1? -#10400000000000000 -04 -0? -#10450000000000000 -14 -1? -#10500000000000000 -04 -0? -#10550000000000000 -14 -1? -#10600000000000000 -04 -0? -#10650000000000000 -14 -1? -#10700000000000000 -04 -0? -#10750000000000000 -14 -1? -#10800000000000000 -04 -0? -#10850000000000000 -14 -1? -#10900000000000000 -04 -0? -#10950000000000000 -14 -1? -#11000000000000000 -04 -0? -#11050000000000000 -14 -1? -#11100000000000000 -04 -0? -#11150000000000000 -14 -1? -#11200000000000000 -04 -0? -#11250000000000000 -14 -1? -#11300000000000000 -04 -0? -#11350000000000000 -14 -1? -#11400000000000000 -04 -0? -#11450000000000000 -14 -1? -#11500000000000000 -04 -0? -#11550000000000000 -14 -1? -#11600000000000000 -04 -0? -#11650000000000000 -1k -1r -1"" -1L" -1Z" -1}" -1&# -1-# -14# -1^# -1e# -1l# -1s# -1E -1: -b11100000111100001010000010110000 7 -b111100000111100001010000010110000 " -b111100000111100001010000010110000 @ -1= -1D -b100 5 -b100100 [$ -b11100000111100001010000010110000 \$ -14 -1? -#11700000000000000 -04 -0? -#11750000000000000 -1F$ -16$ -02 -1>$ -1( -1% -1O -1)" -1a" -1;# -0s# -b1 I -b1111 J -0G -b1000 5 -b11100001111100011010000110110001 7 -0: -b11100001111100011010000110110001 " -b11100001111100011010000110110001 @ -14 -1? -#11750000000000100 -1E$ -01 -1=$ -b11100000 ?$ -b11100000 . -b11100000 B$ -1:$ -b11110000011110000 & -b11110000011110000 -$ -b11110000011110000 7$ -12$ -00$ -b10 |# -0{# -b1001 u# -1t# -b1111 n# -b1 g# -1f# -b1111 `# -b10 D# -0C# -b100 =# -b1111 6# -b1 /# -1.# -b1111 (# -b1111 !# -b10 j" -0i" -b100 c" -b1111 \" -b1110 U" -0T" -b1 N" -1M" -b10 2" -01" -b100 +" -b1111 $" -b1110 { -0z -b1 t -1s -b1111 m -b10 X -0W -b111100000111100001010000010110000 # -b111100000111100001010000010110000 A -b111100000111100001010000010110000 /$ -b100 Q -#11800000000000000 -04 -0? -#11850000000000000 -0:$ -0E$ -b1010001010110010 & -b1010001010110010 -$ -b1010001010110010 7$ -1.$ -11 -02$ -10$ -1' -0=$ -0O -1V -0)" -10" -0a" -1h" -0;# -1B# -1K -1R -1W -1Y -1` -1g -1n -0s -1u -1z -1| -1%" -1," -11" -13" -1:" -1A" -1H" -0M" -1O" -1T" -1V" -1]" -1d" -1i" -1k" -1r" -1y" -1"# -1)# -0.# -10# -17# -1># -1C# -1E# -1L# -1S# -1Z# -1a# -0f# -1h# -1o# -0t# -1v# -1{# -b1010100010101100101100001011010010 # -b1010100010101100101100001011010010 A -b1010100010101100101100001011010010 /$ -1}# -1&$ -b10110010 ?$ -b10110010 . -b10110010 B$ -1Q$ -0O$ -b1100 5 -b11100010111100101010001010110010 7 -b11100010111100101010001010110010 " -b11100010111100101010001010110010 @ -b1 F -b1110 J -b10 I -1@$ -1L$ -0J$ -b1 M$ -b11100000 H$ -b11110000011010010 ) -b11110000011010010 A$ -b11110000011010010 N$ -14 -1? -#11850000000000100 -b11110000 ?$ -b11110000 . -b11110000 B$ -1:$ -b11110000011110000 & -b11110000011110000 -$ -b11110000011110000 7$ -12$ -00$ -b1001 Q -b100 X -0W -b11111 m -b11 t -1s -b11100 { -0z -b11111 $" -b1001 +" -b100 2" -01" -b11 N" -1M" -b11100 U" -0T" -b11111 \" -b1001 c" -b100 j" -0i" -b11111 !# -b11111 (# -b11 /# -1.# -b11111 6# -b1001 =# -b100 D# -0C# -b11111 `# -b11 g# -1f# -b11111 n# -b10010 u# -1t# -b100 |# -0{# -b111100000111100001010000010110000 # -b111100000111100001010000010110000 A -b111100000111100001010000010110000 /$ -#11900000000000000 -04 -0? -#11950000000000000 -18$ -0.$ -03$ -0B -0' -0:$ -0$ -02$ -10$ -1G$ -b11000010 ?$ -b11000010 . -b11000010 B$ -b101100001011010010 & -b101100001011010010 -$ -b101100001011010010 7$ -0K -1L -0P -0R -1W -1S -0Y -1Z -0` -1a -0g -1h -0n -1o -0s -0u -1v -1z -0| -1} -0%" -1&" -0*" -0," -11" -1-" -03" -14" -0:" -1;" -0A" -1B" -0H" -1I" -0M" -0O" -1P" -1T" -0V" -1W" -0]" -1^" -0b" -0d" -1i" -1e" -0k" -1l" -0r" -1s" -0y" -1z" -0"# -1## -0)# -1*# -0.# -00# -11# -07# -18# -0<# -0># -1C# -1?# -0E# -1F# -0L# -1M# -0S# -1T# -0Z# -1[# -0a# -1b# -0f# -0h# -1i# -0o# -1p# -0t# -0v# -1{# -b1010100010101100101100001011010010 # -b1010100010101100101100001011010010 A -b1010100010101100101100001011010010 /$ -1w# -0}# -1~# -0&$ -1'$ -1O -1)" -1a" -1;# -b11110000 I$ -b11110000011110000 ) -b11110000011110000 A$ -b11110000011110000 N$ -b10 M$ -1+ -0@$ -15$ -b11 I -b1101 J -b10 F -b10000 5 -b11100011111100111010001110110011 7 -b11100011111100111010001110110011 " -b11100011111100111010001110110011 @ -14 -1? -#11950000000000100 -b10100000 ?$ -b10100000 . -b10100000 B$ -08$ -b1010000010110000 & -b1010000010110000 -$ -b1010000010110000 7$ -12$ -00$ -b1000 |# -0{# -b100100 u# -1t# -b111111 n# -b111 g# -1f# -b111111 `# -b1001 D# -0C# -b10010 =# -b111111 6# -b111 /# -1.# -b111111 (# -b111111 !# -b1001 j" -0i" -b10010 c" -b111111 \" -b111000 U" -0T" -b111 N" -1M" -b1001 2" -01" -b10010 +" -b111111 $" -b111000 { -0z -b111 t -1s -b111111 m -b1001 X -0W -b111100000111100001010000010110000 # -b111100000111100001010000010110000 A -b111100000111100001010000010110000 /$ -b10010 Q -#12000000000000000 -04 -0? -#12050000000000000 -1D$ -00 -1<$ -18$ -13$ -1B -b101100001011010010 & -b101100001011010010 -$ -b101100001011010010 7$ -1.$ -1$ -02$ -10$ -1' -0O -0V -1] -0)" -00" -17" -0a" -0h" -1o" -0;# -0B# -1I# -1K -1R -1W -1Y -1` -1g -1n -0s -1u -1z -1| -1%" -1," -11" -13" -1:" -1A" -1H" -0M" -1O" -1T" -1V" -1]" -1d" -1i" -1k" -1r" -1y" -1"# -1)# -0.# -10# -17# -1># -1C# -1E# -1L# -1S# -1Z# -1a# -0f# -1h# -1o# -0t# -1v# -1{# -b1010100010101100101100001011010010 # -b1010100010101100101100001011010010 A -b1010100010101100101100001011010010 /$ -1}# -1&$ -b11010010 ?$ -b11010010 . -b11010010 B$ -0G$ -0Q$ -b10100 5 -b11100100111101001010010010110100 7 -b11100100111101001010010010110100 " -b11100100111101001010010010110100 @ -b11 F -b1100 J -b100 I -1@$ -0L$ -b1 M$ -0+ -b10100000 H$ -b1010000011110000 ) -b1010000011110000 A$ -b1010000011110000 N$ -1Y$ -0W$ -b1 Z$ -b1110000011110000 U$ -b111100000111100001100001011010010 , -b111100000111100001100001011010010 R$ -14 -1? -#12050000000000100 -0D$ -10 -0<$ -b10110000 ?$ -b10110000 . -b10110000 B$ -08$ -b1010000010110000 & -b1010000010110000 -$ -b1010000010110000 7$ -12$ -00$ -b100101 Q -b10011 X -0W -b1111111 m -b1111 t -1s -b1110000 { -0z -b1111111 $" -b100101 +" -b10011 2" -01" -b1111 N" -1M" -b1110000 U" -0T" -b1111111 \" -b100101 c" -b10011 j" -0i" -b1111111 !# -b1111111 (# -b1111 /# -1.# -b1111111 6# -b100101 =# -b10011 D# -0C# -b1111111 `# -b1111 g# -1f# -b1111111 n# -b1001000 u# -1t# -b10000 |# -0{# -b111100000111100001010000010110000 # -b111100000111100001010000010110000 A -b111100000111100001010000010110000 /$ -#12100000000000000 -04 -0? -#12150000000000000 -1E$ -0.$ -01 -03$ -0B -0' -1=$ -1:$ -0$ -1G$ -b11100000 ?$ -b11100000 . -b11100000 B$ -b11110000011110000 & -b11110000011110000 -$ -b11110000011110000 7$ -1O -1)" -1a" -1;# -b10110000 I$ -b1010000010110000 ) -b1010000010110000 A$ -b1010000010110000 N$ -b10 M$ -1+ -0@$ -05$ -b11000 5 -b11100101111101011010010110110101 7 -b11100101111101011010010110110101 " -b11100101111101011010010110110101 @ -14 -1? -#12150000000000100 -0E$ -11 -0=$ -b11100001 ?$ -b11100001 . -b11100001 B$ -0:$ -b1110000111110001 & -b1110000111110001 -$ -b1110000111110001 7$ -02$ -b100000 |# -b10010000 u# -0t# -b11111111 n# -b11111 g# -b11111111 `# -b1 K# -b100110 D# -b1001010 =# -1<# -b11111111 6# -b11111 /# -b11111111 (# -b11111111 !# -b1 q" -b100110 j" -b1001010 c" -1b" -b11111111 \" -b11100000 U" -b11111 N" -b1 9" -b100110 2" -b1001010 +" -1*" -b11111111 $" -b11100000 { -b11111 t -b11111111 m -b1 _ -b100110 X -b1001010 Q -1P -b11100001111100011010000110110001 # -b11100001111100011010000110110001 A -b11100001111100011010000110110001 /$ -#12200000000000000 -04 -0? -#12250000000000000 -1:$ -b11110000011110000 & -b11110000011110000 -$ -b11110000011110000 7$ -1.$ -12$ -1' -0O -1V -0)" -10" -0a" -1h" -0;# -1B# -0K -0L -1M -0P -0R -0S -0W -1T -0Y -0Z -1[ -0` -0a -1b -0g -0h -1i -0n -0o -1p -1s -0u -0v -1w -0z -0| -0} -1~ -0%" -0&" -1'" -0*" -0," -0-" -01" -1." -03" -04" -15" -0:" -0;" -1<" -0A" -0B" -1C" -0H" -0I" -1J" -1M" -0O" -0P" -1Q" -0T" -0V" -0W" -1X" -0]" -0^" -1_" -0b" -0d" -0e" -0i" -1f" -0k" -0l" -1m" -0r" -0s" -1t" -0y" -0z" -1{" -0"# -0## -1$# -0)# -0*# -1+# -1.# -00# -01# -12# -07# -08# -19# -0<# -0># -0?# -0C# -1@# -0E# -0F# -1G# -0L# -0M# -1N# -0S# -0T# -1U# -0Z# -0[# -1\# -0a# -0b# -1c# -1f# -0h# -0i# -1j# -0o# -0p# -1q# -1t# -0v# -0w# -0{# -b111100000111100001010000010110000 # -b111100000111100001010000010110000 A -b111100000111100001010000010110000 /$ -1x# -0}# -0~# -1!$ -0&$ -0'$ -1($ -b11110000 ?$ -b11110000 . -b11110000 B$ -0G$ -1T$ -b11100 5 -b11100110111101101010011010110110 7 -b11100110111101101010011010110110 " -b11100110111101101010011010110110 @ -b100 F -b1011 J -b101 I -1@$ -b1 M$ -0+ -b11100001 H$ -b1110000110110000 ) -b1110000110110000 A$ -b1110000110110000 N$ -b10 Z$ -1- -b1010000010110000 V$ -b111100000111100001010000010110000 , -b111100000111100001010000010110000 R$ -14 -1? -#12250000000000100 -b11110001 ?$ -b11110001 . -b11110001 B$ -0:$ -b1110000111110001 & -b1110000111110001 -$ -b1110000111110001 7$ -02$ -b10010101 Q -1P -b1001100 X -b11 _ -b111111111 m -b111111 t -b111000000 { -b111111111 $" -b10010101 +" -1*" -b1001100 2" -b11 9" -b111111 N" -b111000000 U" -b111111111 \" -b10010101 c" -1b" -b1001100 j" -b11 q" -b111111111 !# -b111111111 (# -b111111 /# -b111111111 6# -b10010101 =# -1<# -b1001100 D# -b11 K# -b111111111 `# -b111111 g# -b111111111 n# -b100100000 u# -0t# -b11100001111100011010000110110001 # -b11100001111100011010000110110001 A -b11100001111100011010000110110001 /$ -b1000000 |# -#12300000000000000 -04 -0? -#12350000000000000 -0.$ -03$ -0B -0' -0$ -12$ -0T$ -1G$ -b10100000 ?$ -b10100000 . -b10100000 B$ -b1010000010110000 & -b1010000010110000 -$ -b1010000010110000 7$ -1K -0P -1R -1Y -1` -1g -1n -1u -1| -1%" -0*" -1," -13" -1:" -1A" -1H" -1O" -1V" -1]" -0b" -1d" -1k" -1r" -1y" -1"# -1)# -10# -17# -0<# -1># -1E# -1L# -1S# -1Z# -1a# -1h# -1o# -1t# -b111100000111100001010000010110000 # -b111100000111100001010000010110000 A -b111100000111100001010000010110000 /$ -1v# -1}# -1&$ -1O -1)" -1a" -1;# -b0 Z$ -0- -b11110001 I$ -b1110000111110001 ) -b1110000111110001 A$ -b1110000111110001 N$ -b10 M$ -1+ -0@$ -15$ -b110 I -b1010 J -b101 F -b100000 5 -b11100111111101111010011110110111 7 -b11100111111101111010011110110111 " -b11100111111101111010011110110111 @ -14 -1? -#12350000000000100 -b10100001 ?$ -b10100001 . -b10100001 B$ -b1010000110110001 & -b1010000110110001 -$ -b1010000110110001 7$ -02$ -b10000000 |# -b1001000000 u# -0t# -b1111111111 n# -b1111111 g# -b1111111111 `# -b111 K# -b10011001 D# -b100101010 =# -1<# -b1111111111 6# -b1111111 /# -b1111111111 (# -b1111111111 !# -b111 q" -b10011001 j" -b100101010 c" -1b" -b1111111111 \" -b1110000000 U" -b1111111 N" -b111 9" -b10011001 2" -b100101010 +" -1*" -b1111111111 $" -b1110000000 { -b1111111 t -b1111111111 m -b111 _ -b10011001 X -b100101010 Q -1P -b11100001111100011010000110110001 # -b11100001111100011010000110110001 A -b11100001111100011010000110110001 /$ -#12400000000000000 -04 -0? -#12450000000000000 -13$ -1B -b1010000010110000 & -b1010000010110000 -$ -b1010000010110000 7$ -1.$ -1$ -12$ -1' -0O -0V -0] -1d -0)" -00" -07" -1>" -0a" -0h" -0o" -1v" -0;# -0B# -0I# -1P# -1z# -0K -1L -0P -0R -1S -0W -0Y -1Z -0` -1a -0g -1h -0n -1o -1s -0u -1v -0z -0| -1} -0%" -1&" -0*" -0," -1-" -01" -03" -14" -0:" -1;" -0A" -1B" -0H" -1I" -1M" -0O" -1P" -0T" -0V" -1W" -0]" -1^" -0b" -0d" -1e" -0i" -0k" -1l" -0r" -1s" -0y" -1z" -0"# -1## -0)# -1*# -1.# -00# -11# -07# -18# -0<# -0># -1?# -0C# -0E# -1F# -0L# -1M# -0S# -1T# -0Z# -1[# -0a# -1b# -1f# -0h# -1i# -0o# -1t# -1p# -0v# -1w# -0{# -b111100000111100001010000010110000 # -b111100000111100001010000010110000 A -b111100000111100001010000010110000 /$ -0}# -1~# -0&$ -1'$ -b10110000 ?$ -b10110000 . -b10110000 B$ -0G$ -18 -b11101000111110001010100010111000 7 -b1011101000111110001010100010111000 " -b1011101000111110001010100010111000 @ -b110 F -b1001 J -b111 I -1@$ -b1 M$ -0+ -b10100001 H$ -b1010000111110001 ) -b1010000111110001 A$ -b1010000111110001 N$ -0Y$ -b1 Z$ -b1110000111110001 U$ -b11100001111100011010000010110000 , -b11100001111100011010000010110000 R$ -14 -1? -#12450000000000100 -b10110001 ?$ -b10110001 . -b10110001 B$ -b1010000110110001 & -b1010000110110001 -$ -b1010000110110001 7$ -02$ -b1001010101 Q -1P -b100110011 X -b1111 _ -b11111111111 m -b11111111 t -b11100000000 { -b11111111111 $" -b1001010101 +" -1*" -b100110011 2" -b1111 9" -b11111111 N" -b11100000000 U" -b11111111111 \" -b1001010101 c" -1b" -b100110011 j" -b1111 q" -b11111111111 !# -b11111111111 (# -b11111111 /# -b11111111111 6# -b1001010101 =# -1<# -b100110011 D# -b1111 K# -b11111111111 `# -b11111111 g# -b11111111111 n# -b10010000000 u# -0t# -b11100001111100011010000110110001 # -b11100001111100011010000110110001 A -b11100001111100011010000110110001 /$ -b100000000 |# -#12500000000000000 -04 -0? -#12550000000000000 -0.$ -03$ -0B -0' -0$ -1G$ -b11100001 ?$ -b11100001 . -b11100001 B$ -b1110000111110001 & -b1110000111110001 -$ -b1110000111110001 7$ -0E -0d -0k -0r -0"" -0>" -0L" -0Z" -0v" -0}" -0&# -0-# -04# -0P# -0^# -0e# -0l# -0z# -b10110001 I$ -b1010000110110001 ) -b1010000110110001 A$ -b1010000110110001 N$ -b10 M$ -1+ -0@$ -05$ -0= -0D -b0 7 -08 -b0 " -b0 @ -14 -1? -#12550000000000100 -b11100010 ?$ -b11100010 . -b11100010 B$ -b1110001011110010 & -b1110001011110010 -$ -b1110001011110010 7$ -b1000000001 |# -b100100000000 u# -b111111111111 n# -b111111111 g# -b111111111111 `# -b1 R# -b11110 K# -b1001100110 D# -1C# -b10010101010 =# -0<# -b111111111111 6# -b111111111 /# -b111111111111 (# -b111111111111 !# -b1 x" -b11110 q" -b1001100110 j" -1i" -b10010101010 c" -0b" -b111111111111 \" -b111000000000 U" -b111111111 N" -b1 @" -b11110 9" -b1001100110 2" -11" -b10010101010 +" -0*" -b111111111111 $" -b111000000000 { -b111111111 t -b111111111111 m -b1 f -b11110 _ -b1001100110 X -1W -b10010101010 Q -0P -b11100010111100101010001010110010 # -b11100010111100101010001010110010 A -b11100010111100101010001010110010 /$ -#12600000000000000 -04 -0? -#12650000000000000 -1.$ -1' -b11110010 ?$ -b11110010 . -b11110010 B$ -0G$ -1T$ -1@$ -b1 M$ -0+ -b11100010 H$ -b1110001010110001 ) -b1110001010110001 A$ -b1110001010110001 N$ -b10 Z$ -1- -b1010000110110001 V$ -b11100001111100011010000110110001 , -b11100001111100011010000110110001 R$ -14 -1? -#12700000000000000 -04 -0? -#12750000000000000 -0.$ -03$ -0B -0' -0$ -0T$ -1G$ -b10100010 ?$ -b10100010 . -b10100010 B$ -b1010001010110010 & -b1010001010110010 -$ -b1010001010110010 7$ -b0 Z$ -0- -b11110010 I$ -b1110001011110010 ) -b1110001011110010 A$ -b1110001011110010 N$ -b10 M$ -1+ -0@$ -15$ -14 -1? -#12800000000000000 -04 -0? -#12850000000000000 -13$ -1B -1.$ -1$ -1' -b10110010 ?$ -b10110010 . -b10110010 B$ -0G$ -1@$ -b1 M$ -0+ -b10100010 H$ -b1010001011110010 ) -b1010001011110010 A$ -b1010001011110010 N$ -b1 Z$ -b1110001011110010 U$ -b11100010111100101010000110110001 , -b11100010111100101010000110110001 R$ -14 -1? -#12900000000000000 -04 -0? -#12950000000000000 -0.$ -03$ -0B -0' -0$ -1G$ -b11100011 ?$ -b11100011 . -b11100011 B$ -b1110001111110011 & -b1110001111110011 -$ -b1110001111110011 7$ -1K -1P -0L -1R -0S -1W -1Y -0Z -0^ -1` -0a -1g -0h -1n -0o -1u -0v -1| -0} -1%" -1*" -0&" -1," -0-" -11" -13" -04" -08" -1:" -0;" -1A" -0B" -1H" -0I" -1O" -0P" -1V" -0W" -1]" -1b" -0^" -1d" -0e" -1i" -1k" -0l" -0p" -1r" -0s" -1y" -0z" -1"# -0## -1)# -0*# -10# -01# -17# -1<# -08# -1># -0?# -1C# -1E# -0F# -0J# -b11100011111100111010001110110011 # -b11100011111100111010001110110011 A -b11100011111100111010001110110011 /$ -1L# -0M# -1S# -0T# -1Z# -0[# -1a# -0b# -1h# -0i# -1o# -0p# -1v# -0w# -1}# -0~# -1&$ -0'$ -b10110010 I$ -b1010001010110010 ) -b1010001010110010 A$ -b1010001010110010 N$ -b10 M$ -1+ -0@$ -05$ -b110 I -b1010 J -b101 F -14 -1? -#13000000000000000 -04 -0? -#13050000000000000 -1.$ -1' -b11110011 ?$ -b11110011 . -b11110011 B$ -0G$ -1T$ -1@$ -b1 M$ -0+ -b11100011 H$ -b1110001110110010 ) -b1110001110110010 A$ -b1110001110110010 N$ -b10 Z$ -1- -b1010001010110010 V$ -b11100010111100101010001010110010 , -b11100010111100101010001010110010 R$ -14 -1? -#13100000000000000 -04 -0? -#13150000000000000 -0.$ -03$ -0B -0' -0$ -0T$ -1G$ -b10100011 ?$ -b10100011 . -b10100011 B$ -b1010001110110011 & -b1010001110110011 -$ -b1010001110110011 7$ -b0 Z$ -0- -b11110011 I$ -b1110001111110011 ) -b1110001111110011 A$ -b1110001111110011 N$ -b10 M$ -1+ -0@$ -15$ -14 -1? -#13200000000000000 -04 -0? -#13250000000000000 -13$ -1B -1.$ -1$ -1' -b10110011 ?$ -b10110011 . -b10110011 B$ -0G$ -1@$ -b1 M$ -0+ -b10100011 H$ -b1010001111110011 ) -b1010001111110011 A$ -b1010001111110011 N$ -b1 Z$ -b1110001111110011 U$ -b11100011111100111010001010110010 , -b11100011111100111010001010110010 R$ -14 -1? -#13300000000000000 -04 -0? -#13350000000000000 -0.$ -03$ -0B -0' -0$ -1G$ -b11100100 ?$ -b11100100 . -b11100100 B$ -b1110010011110100 & -b1110010011110100 -$ -b1110010011110100 7$ -0K -0P -0R -0W -0Y -1^ -0` -0g -0n -0u -0| -0%" -0*" -0," -01" -03" -18" -0:" -0A" -0H" -0O" -0V" -0]" -0b" -0d" -0i" -0k" -1p" -0r" -0y" -0"# -0)# -00# -07# -0<# -0># -0C# -0E# -1J# -b11100100111101001010010010110100 # -b11100100111101001010010010110100 A -b11100100111101001010010010110100 /$ -0L# -0S# -0Z# -0a# -0h# -0o# -0v# -0}# -0&$ -b10110011 I$ -b1010001110110011 ) -b1010001110110011 A$ -b1010001110110011 N$ -b10 M$ -1+ -0@$ -05$ -b101 I -b1011 J -b100 F -14 -1? -#13400000000000000 -04 -0? -#13450000000000000 -1.$ -1' -b11110100 ?$ -b11110100 . -b11110100 B$ -0G$ -1T$ -1@$ -b1 M$ -0+ -b11100100 H$ -b1110010010110011 ) -b1110010010110011 A$ -b1110010010110011 N$ -b10 Z$ -1- -b1010001110110011 V$ -b11100011111100111010001110110011 , -b11100011111100111010001110110011 R$ -14 -1? -#13500000000000000 -04 -0? -#13550000000000000 -0.$ -03$ -0B -0' -0$ -0T$ -1G$ -b10100100 ?$ -b10100100 . -b10100100 B$ -b1010010010110100 & -b1010010010110100 -$ -b1010010010110100 7$ -b0 Z$ -0- -b11110100 I$ -b1110010011110100 ) -b1110010011110100 A$ -b1110010011110100 N$ -b10 M$ -1+ -0@$ -15$ -14 -1? -#13600000000000000 -04 -0? -#13650000000000000 -13$ -1B -1.$ -1$ -1' -b10110100 ?$ -b10110100 . -b10110100 B$ -0G$ -1@$ -b1 M$ -0+ -b10100100 H$ -b1010010011110100 ) -b1010010011110100 A$ -b1010010011110100 N$ -b1 Z$ -b1110010011110100 U$ -b11100100111101001010001110110011 , -b11100100111101001010001110110011 R$ -14 -1? -#13700000000000000 -04 -0? -#13750000000000000 -0.$ -03$ -0B -0' -0$ -1G$ -b11100101 ?$ -b11100101 . -b11100101 B$ -b1110010111110101 & -b1110010111110101 -$ -b1110010111110101 7$ -1K -1P -1L -0M -1R -1S -0W -0T -1Y -1Z -0[ -1^ -1` -1a -0b -0e -1g -1h -0i -1n -1o -0p -1u -1v -0w -1| -1} -0~ -1%" -1*" -1&" -0'" -1," -1-" -01" -0." -13" -14" -05" -18" -1:" -1;" -0<" -0?" -1A" -1B" -0C" -1H" -1I" -0J" -1O" -1P" -0Q" -1V" -1W" -0X" -1]" -1b" -1^" -0_" -1d" -1e" -0i" -0f" -1k" -1l" -0m" -1p" -1r" -1s" -0t" -0w" -1y" -1z" -0{" -1"# -1## -0$# -1)# -1*# -0+# -10# -11# -02# -17# -1<# -18# -09# -1># -1?# -0C# -0@# -1E# -1F# -0G# -1J# -1L# -1M# -0N# -0Q# -1S# -1T# -0U# -1Z# -1[# -0\# -1a# -1b# -0c# -1h# -1i# -0j# -1o# -1p# -0q# -1v# -1w# -0x# -0{# -b11100101111101011010010110110101 # -b11100101111101011010010110110101 A -b11100101111101011010010110110101 /$ -1}# -1~# -0!$ -1&$ -1'$ -0($ -b10110100 I$ -b1010010010110100 ) -b1010010010110100 A$ -b1010010010110100 N$ -b10 M$ -1+ -0@$ -05$ -b100 I -b1100 J -b11 F -14 -1? -#13800000000000000 -04 -0? -#13850000000000000 -1.$ -1' -b11110101 ?$ -b11110101 . -b11110101 B$ -0G$ -1T$ -1@$ -b1 M$ -0+ -b11100101 H$ -b1110010110110100 ) -b1110010110110100 A$ -b1110010110110100 N$ -b10 Z$ -1- -b1010010010110100 V$ -b11100100111101001010010010110100 , -b11100100111101001010010010110100 R$ -14 -1? -#13900000000000000 -04 -0? -#13950000000000000 -0.$ -03$ -0B -0' -0$ -0T$ -1G$ -b10100101 ?$ -b10100101 . -b10100101 B$ -b1010010110110101 & -b1010010110110101 -$ -b1010010110110101 7$ -b0 Z$ -0- -b11110101 I$ -b1110010111110101 ) -b1110010111110101 A$ -b1110010111110101 N$ -b10 M$ -1+ -0@$ -15$ -14 -1? -#14000000000000000 -04 -0? -#14050000000000000 -13$ -1B -1.$ -1$ -1' -b10110101 ?$ -b10110101 . -b10110101 B$ -0G$ -1@$ -b1 M$ -0+ -b10100101 H$ -b1010010111110101 ) -b1010010111110101 A$ -b1010010111110101 N$ -b1 Z$ -b1110010111110101 U$ -b11100101111101011010010010110100 , -b11100101111101011010010010110100 R$ -14 -1? -#14100000000000000 -04 -0? -#14150000000000000 -0.$ -03$ -0B -0' -0$ -1G$ -b11100110 ?$ -b11100110 . -b11100110 B$ -b1110011011110110 & -b1110011011110110 -$ -b1110011011110110 7$ -0K -0P -0R -1W -0Y -0` -0g -0n -0u -0| -0%" -0*" -0," -11" -03" -0:" -0A" -0H" -0O" -0V" -0]" -0b" -0d" -1i" -0k" -0r" -0y" -0"# -0)# -00# -07# -0<# -0># -1C# -b11100110111101101010011010110110 # -b11100110111101101010011010110110 A -b11100110111101101010011010110110 /$ -0E# -0L# -0S# -0Z# -0a# -0h# -0o# -0v# -0}# -0&$ -b10110101 I$ -b1010010110110101 ) -b1010010110110101 A$ -b1010010110110101 N$ -b10 M$ -1+ -0@$ -05$ -b11 I -b1101 J -b10 F -14 -1? -#14200000000000000 -04 -0? -#14250000000000000 -1.$ -1' -b11110110 ?$ -b11110110 . -b11110110 B$ -0G$ -1T$ -1@$ -b1 M$ -0+ -b11100110 H$ -b1110011010110101 ) -b1110011010110101 A$ -b1110011010110101 N$ -b10 Z$ -1- -b1010010110110101 V$ -b11100101111101011010010110110101 , -b11100101111101011010010110110101 R$ -14 -1? -#14300000000000000 -04 -0? -#14350000000000000 -0.$ -03$ -0B -0' -0$ -0T$ -1G$ -b10100110 ?$ -b10100110 . -b10100110 B$ -b1010011010110110 & -b1010011010110110 -$ -b1010011010110110 7$ -b0 Z$ -0- -b11110110 I$ -b1110011011110110 ) -b1110011011110110 A$ -b1110011011110110 N$ -b10 M$ -1+ -0@$ -15$ -14 -1? -#14400000000000000 -04 -0? -#14450000000000000 -13$ -1B -1.$ -1$ -1' -b10110110 ?$ -b10110110 . -b10110110 B$ -0G$ -1@$ -b1 M$ -0+ -b10100110 H$ -b1010011011110110 ) -b1010011011110110 A$ -b1010011011110110 N$ -b1 Z$ -b1110011011110110 U$ -b11100110111101101010010110110101 , -b11100110111101101010010110110101 R$ -14 -1? -#14500000000000000 -04 -0? -#14550000000000000 -0.$ -03$ -0B -0' -0$ -1G$ -b11100111 ?$ -b11100111 . -b11100111 B$ -b1110011111110111 & -b1110011111110111 -$ -b1110011111110111 7$ -1K -1P -0L -1R -0S -1W -1Y -0Z -1^ -1` -0a -0e -1g -0h -1n -0o -1u -0v -1| -0} -1%" -1*" -0&" -1," -0-" -11" -13" -04" -18" -1:" -0;" -0?" -1A" -0B" -1H" -0I" -1O" -0P" -1V" -0W" -1]" -1b" -0^" -1d" -0e" -1i" -1k" -0l" -1p" -1r" -0s" -0w" -1y" -0z" -1"# -0## -1)# -0*# -10# -01# -17# -1<# -08# -1># -0?# -1C# -1E# -0F# -1J# -1L# -0M# -0Q# -1S# -0T# -1Z# -0[# -1a# -0b# -1h# -0i# -1o# -0p# -1v# -0w# -0{# -b11100111111101111010011110110111 # -b11100111111101111010011110110111 A -b11100111111101111010011110110111 /$ -1}# -0~# -1&$ -0'$ -b10110110 I$ -b1010011010110110 ) -b1010011010110110 A$ -b1010011010110110 N$ -b10 M$ -1+ -0@$ -05$ -b10 I -b1110 J -b1 F -14 -1? -#14600000000000000 -04 -0? -#14650000000000000 -1.$ -1' -b11110111 ?$ -b11110111 . -b11110111 B$ -0G$ -1T$ -1@$ -b1 M$ -0+ -b11100111 H$ -b1110011110110110 ) -b1110011110110110 A$ -b1110011110110110 N$ -b10 Z$ -1- -b1010011010110110 V$ -b11100110111101101010011010110110 , -b11100110111101101010011010110110 R$ -14 -1? -#14700000000000000 -04 -0? -#14750000000000000 -0.$ -03$ -0B -0' -0$ -0T$ -1G$ -b10100111 ?$ -b10100111 . -b10100111 B$ -b1010011110110111 & -b1010011110110111 -$ -b1010011110110111 7$ -b0 Z$ -0- -b11110111 I$ -b1110011111110111 ) -b1110011111110111 A$ -b1110011111110111 N$ -b10 M$ -1+ -0@$ -15$ -14 -1? -#14800000000000000 -04 -0? -#14850000000000000 -13$ -1B -1.$ -1$ -1' -b10110111 ?$ -b10110111 . -b10110111 B$ -0G$ -1@$ -b1 M$ -0+ -b10100111 H$ -b1010011111110111 ) -b1010011111110111 A$ -b1010011111110111 N$ -b1 Z$ -b1110011111110111 U$ -b11100111111101111010011010110110 , -b11100111111101111010011010110110 R$ -14 -1? -#14900000000000000 -04 -0? -#14950000000000000 -0.$ -03$ -0B -0' -0$ -10$ -1G$ -b11101000 ?$ -b11101000 . -b11101000 B$ -b1110100011111000 & -b1110100011111000 -$ -b1110100011111000 7$ -0K -0P -0R -0W -0Y -0^ -0` -1e -0g -0n -0u -0| -0%" -0*" -0," -01" -03" -08" -0:" -1?" -0A" -0H" -0O" -0V" -0]" -0b" -0d" -0i" -0k" -0p" -0r" -1w" -0y" -0"# -0)# -00# -07# -0<# -0># -0C# -0E# -0J# -0L# -1Q# -0S# -0Z# -0a# -0h# -0o# -0v# -1{# -b1011101000111110001010100010111000 # -b1011101000111110001010100010111000 A -b1011101000111110001010100010111000 /$ -0}# -0&$ -b10110111 I$ -b1010011110110111 ) -b1010011110110111 A$ -b1010011110110111 N$ -b10 M$ -1+ -0@$ -05$ -b1 I -b1111 J -b0 F -14 -1? -#15000000000000000 -04 -0? -#15050000000000000 -1.$ -1' -b11111000 ?$ -b11111000 . -b11111000 B$ -0G$ -1T$ -1@$ -b1 M$ -0+ -b11101000 H$ -b1110100010110111 ) -b1110100010110111 A$ -b1110100010110111 N$ -b10 Z$ -1- -b1010011110110111 V$ -b11100111111101111010011110110111 , -b11100111111101111010011110110111 R$ -14 -1? -#15100000000000000 -04 -0? -#15150000000000000 -0.$ -03$ -0B -0' -18$ -0$ -0T$ -1G$ -b10101000 ?$ -b10101000 . -b10101000 B$ -b101010100010111000 & -b101010100010111000 -$ -b101010100010111000 7$ -b0 Z$ -0- -b11111000 I$ -b1110100011111000 ) -b1110100011111000 A$ -b1110100011111000 N$ -b10 M$ -1+ -0@$ -15$ -14 -1? -#15200000000000000 -04 -0? -#15250000000000000 -1D$ -13$ -1B -00 -1.$ -1$ -1<$ -1' -b10111000 ?$ -b10111000 . -b10111000 B$ -0G$ -1@$ -b1 M$ -0+ -b10101000 H$ -b1010100011111000 ) -b1010100011111000 A$ -b1010100011111000 N$ -b1 Z$ -b1110100011111000 U$ -b11101000111110001010011110110111 , -b11101000111110001010011110110111 R$ -14 -1? -#15300000000000000 -04 -0? -#15350000000000000 -0D$ -10 -0' -0F$ -0<$ -08$ -0$ -0.$ -06$ -12 -03$ -0B -1G$ -1O$ -b11101000 ?$ -b11101000 . -b11101000 B$ -b1110100011111000 & -b1110100011111000 -$ -b1110100011111000 7$ -0>$ -0( -0% -b10111000 I$ -b10 M$ -1+ -1J$ -b101010100010111000 ) -b101010100010111000 A$ -b101010100010111000 N$ -0@$ -05$ -b0 I -b10000 J -1G -14 -1? -#15400000000000000 -04 -0? -#15450000000000000 -0G$ -1T$ -b0 M$ -0+ -1W$ -b10 Z$ -1- -b1010100010111000 V$ -b1011101000111110001010100010111000 , -b1011101000111110001010100010111000 R$ -14 -1? -#15500000000000000 -04 -0? -#15550000000000000 -0T$ -b0 Z$ -0- -14 -1? -#15600000000000000 -04 -0? -#15650000000000000 -14 -1? -#15700000000000000 -04 -0? -#15750000000000000 -14 -1? -#15800000000000000 -04 -0? -#15850000000000000 -14 -1? -#15900000000000000 -04 -0? -#15950000000000000 -14 -1? -#16000000000000000 -04 -0? -#16050000000000000 -14 -1? -#16100000000000000 -04 -0? -#16150000000000000 -14 -1? -#16200000000000000 -04 -0? -#16250000000000000 -14 -1? -#16300000000000000 -04 -0? -#16350000000000000 -14 -1? -#16400000000000000 -04 -0? -#16450000000000000 -14 -1? -#16500000000000000 -04 -0? -#16550000000000000 -14 -1? -#16600000000000000 -04 -0? -#16650000000000000 -14 -1? -#16700000000000000 -04 -0? -#16750000000000000 -14 -1? -#16800000000000000 -04 -0? -#16850000000000000 -14 -1? -#16900000000000000 -04 -0? -#16950000000000000 -14 -1? -#17000000000000000 -04 -0? -#17050000000000000 -14 -1? -#17100000000000000 -04 -0? -#17150000000000000 -14 -1? -#17200000000000000 -04 -0? -#17250000000000000 -14 -1? -#17300000000000000 -04 -0? -#17350000000000000 -14 -1? -#17400000000000000 -04 -0? -#17450000000000000 -14 -1? -#17500000000000000 -04 -0? -#17550000000000000 -14 -1? -#17600000000000000 -04 -0? -#17650000000000000 -14 -1? -#17700000000000000 -04 -0? -#17750000000000000 -14 -1? -#17800000000000000 -04 -0? -#17850000000000000 -14 -1? -#17900000000000000 -04 -0? -#17950000000000000 -14 -1? -#18000000000000000 -04 -0? -#18050000000000000 -14 -1? -#18100000000000000 -04 -0? -#18150000000000000 -14 -1? -#18200000000000000 -04 -0? -#18250000000000000 -14 -1? -#18300000000000000 -04 -0? -#18350000000000000 -14 -1? -#18400000000000000 -04 -0? -#18450000000000000 -14 -1? -#18500000000000000 -04 -0? -#18550000000000000 -14 -1? -#18600000000000000 -04 -0? -#18650000000000000 -14 -1? -#18700000000000000 -04 -0? -#18750000000000000 -14 -1? -#18800000000000000 -04 -0? -#18850000000000000 -14 -1? -#18900000000000000 -04 -0? -#18950000000000000 -14 -1? -#19000000000000000 -04 -0? -#19050000000000000 -14 -1? -#19100000000000000 -04 -0? -#19150000000000000 -14 -1? -#19200000000000000 -04 -0? -#19250000000000000 -14 -1? -#19300000000000000 -04 -0? -#19350000000000000 -14 -1? -#19400000000000000 -04 -0? -#19450000000000000 -14 -1? -#19500000000000000 -04 -0? -#19550000000000000 -14 -1? -#19600000000000000 -04 -0? -#19650000000000000 -14 -1? -#19700000000000000 -04 -0? -#19750000000000000 -14 -1? -#19800000000000000 -04 -0? -#19850000000000000 -14 -1? -#19900000000000000 -04 -0? -#19950000000000000 -14 -1? -#20000000000000000 -04 -0? diff --git a/usrp2/fifo/fifo_tb.v b/usrp2/fifo/fifo_tb.v index f561df7fa..327da4700 100644 --- a/usrp2/fifo/fifo_tb.v +++ b/usrp2/fifo/fifo_tb.v @@ -24,20 +24,39 @@ module fifo_new_tb(); wire i1_sr, i1_dr; wire i2_sr, i2_dr; wire i3_sr, i3_dr; + wire i7_sr, i7_dr; + reg i4_dr = 0; wire i4_sr; - wire [35:0] i1, i4; + wire [35:0] i1, i4, i7; wire [18:0] i2, i3; wire [7:0] ll_data; wire ll_src_rdy_n, ll_dst_rdy_n, ll_sof_n, ll_eof_n; + wire [35:0] err_dat; + wire err_src_rdy, err_dst_rdy; + + reg trigger = 0; + initial #10000 trigger = 1; fifo_short #(.WIDTH(36)) fifo_short1 (.clk(clk),.reset(rst),.clear(clear), .datain(f36_in),.src_rdy_i(src_rdy_f36i),.dst_rdy_o(dst_rdy_f36i), - .dataout(i1),.src_rdy_o(i1_sr),.dst_rdy_i(i1_dr) ); + .dataout(i7),.src_rdy_o(i7_sr),.dst_rdy_i(i7_dr) ); + gen_context_pkt #(.PROT_ENG_FLAGS(1)) gcp + (.clk(clk),.reset(rst),.clear(clear), + .trigger(trigger), .sent(), + .streamid(32'hDEAD_F00D), .vita_time(64'h01234567_89ABCDEF), .message(32'hBEEF_2940), + .data_o(err_dat), .src_rdy_o(err_src_rdy), .dst_rdy_i(err_dst_rdy)); + + fifo36_mux #(.prio(0)) fifo36_mux + (.clk(clk), .reset(rst), .clear(clear), + .data0_i(i7), .src0_rdy_i(i7_sr), .dst0_rdy_o(i7_dr), + .data1_i(err_dat), .src1_rdy_i(err_src_rdy), .dst1_rdy_o(err_dst_rdy), + .data_o(i1), .src_rdy_o(i1_sr), .dst_rdy_i(i1_dr)); + fifo36_to_fifo19 fifo36_to_fifo19 (.clk(clk),.reset(rst),.clear(clear), .f36_datain(i1),.f36_src_rdy_i(i1_sr),.f36_dst_rdy_o(i1_dr), @@ -59,7 +78,7 @@ module fifo_new_tb(); (.clk(clk),.reset(rst),.clear(clear), .f19_datain(i3),.f19_src_rdy_i(i3_sr),.f19_dst_rdy_o(i3_dr), .f36_dataout(i4),.f36_src_rdy_o(i4_sr),.f36_dst_rdy_i(i4_dr) ); - + task ReadFromFIFO36; begin $display("Read from FIFO36"); diff --git a/usrp2/top/Makefile.common b/usrp2/top/Makefile.common index d0435fa1e..4da64ac28 100644 --- a/usrp2/top/Makefile.common +++ b/usrp2/top/Makefile.common @@ -47,7 +47,7 @@ $(ISE_FILE): $$(SOURCES) $$(MAKEFILE_LIST) @echo $@ $(ISE_HELPER) "" -$(BIN_FILE): $(ISE_FILE) +$(BIN_FILE): $(ISE_FILE) $$(SOURCES) $$(MAKEFILE_LIST) @echo $@ $(ISE_HELPER) "Generate Programming File" touch $@ diff --git a/usrp2/top/u2_rev3/u2_core_udp.v b/usrp2/top/u2_rev3/u2_core_udp.v index b034791a7..124930c23 100644 --- a/usrp2/top/u2_rev3/u2_core_udp.v +++ b/usrp2/top/u2_rev3/u2_core_udp.v @@ -423,7 +423,10 @@ module u2_core cycle_count <= 0; else cycle_count <= cycle_count + 1; - + + //compatibility number -> increment when the fpga has been sufficiently altered + localparam compat_num = 32'd1; + wb_readback_mux buff_pool_status (.wb_clk_i(wb_clk), .wb_rst_i(wb_rst), .wb_stb_i(s5_stb), .wb_adr_i(s5_adr), .wb_dat_o(s5_dat_i), .wb_ack_o(s5_ack), @@ -431,7 +434,7 @@ module u2_core .word00(status_b0),.word01(status_b1),.word02(status_b2),.word03(status_b3), .word04(status_b4),.word05(status_b5),.word06(status_b6),.word07(status_b7), .word08(status),.word09({sim_mode,27'b0,clock_divider[3:0]}),.word10(vita_time[63:32]), - .word11(vita_time[31:0]),.word12(32'b0),.word13(irq),.word14(status_enc),.word15(cycle_count) + .word11(vita_time[31:0]),.word12(compat_num),.word13(irq),.word14(status_enc),.word15(cycle_count) ); // ///////////////////////////////////////////////////////////////////////// @@ -466,11 +469,20 @@ module u2_core .tx_f36_data(udp_tx_data), .tx_f36_src_rdy_i(udp_tx_src_rdy), .tx_f36_dst_rdy_o(udp_tx_dst_rdy), .debug(debug_udp) ); + wire [35:0] tx_err_data, udp1_tx_data; + wire tx_err_src_rdy, tx_err_dst_rdy, udp1_tx_src_rdy, udp1_tx_dst_rdy; + fifo_cascade #(.WIDTH(36), .SIZE(ETH_TX_FIFOSIZE)) tx_eth_fifo (.clk(dsp_clk), .reset(dsp_rst), .clear(0), .datain({rd2_flags,rd2_dat}), .src_rdy_i(rd2_ready_o), .dst_rdy_o(rd2_ready_i), - .dataout(udp_tx_data), .src_rdy_o(udp_tx_src_rdy), .dst_rdy_i(udp_tx_dst_rdy)); + .dataout(udp1_tx_data), .src_rdy_o(udp1_tx_src_rdy), .dst_rdy_i(udp1_tx_dst_rdy)); + fifo36_mux #(.prio(0)) mux_err_stream + (.clk(dsp_clk), .reset(dsp_reset), .clear(0), + .data0_i(udp1_tx_data), .src0_rdy_i(udp1_tx_src_rdy), .dst0_rdy_o(udp1_tx_dst_rdy), + .data1_i(tx_err_data), .src1_rdy_i(tx_err_src_rdy), .dst1_rdy_o(tx_err_dst_rdy), + .data_o(udp_tx_data), .src_rdy_o(udp_tx_src_rdy), .dst_rdy_i(udp_tx_dst_rdy)); + fifo_cascade #(.WIDTH(36), .SIZE(ETH_RX_FIFOSIZE)) rx_eth_fifo (.clk(dsp_clk), .reset(dsp_rst), .clear(0), .datain(udp_rx_data), .src_rdy_i(udp_rx_src_rdy), .dst_rdy_o(udp_rx_dst_rdy), @@ -639,40 +651,26 @@ module u2_core // DSP TX wire [35:0] tx_data; - wire [99:0] tx1_data; - wire tx_src_rdy, tx_dst_rdy, tx1_src_rdy, tx1_dst_rdy; - - wire [31:0] debug_vtc, debug_vtd, debug_vt; + wire tx_src_rdy, tx_dst_rdy; + wire [31:0] debug_vt; fifo_cascade #(.WIDTH(36), .SIZE(DSP_TX_FIFOSIZE)) tx_fifo_cascade (.clk(dsp_clk), .reset(dsp_rst), .clear(0), .datain({rd1_flags,rd1_dat}), .src_rdy_i(rd1_ready_o), .dst_rdy_o(rd1_ready_i), .dataout(tx_data), .src_rdy_o(tx_src_rdy), .dst_rdy_i(tx_dst_rdy) ); - vita_tx_deframer #(.BASE(SR_TX_CTRL), .MAXCHAN(1)) vita_tx_deframer - (.clk(dsp_clk), .reset(dsp_rst), .clear(0), - .set_stb(set_stb_dsp),.set_addr(set_addr_dsp),.set_data(set_data_dsp), - .data_i(tx_data), .src_rdy_i(tx_src_rdy), .dst_rdy_o(tx_dst_rdy), - .sample_fifo_o(tx1_data), .sample_fifo_src_rdy_o(tx1_src_rdy), .sample_fifo_dst_rdy_i(tx1_dst_rdy), - .debug(debug_vtd) ); - - vita_tx_control #(.BASE(SR_TX_CTRL), .WIDTH(32)) vita_tx_control - (.clk(dsp_clk), .reset(dsp_rst), .clear(0), - .set_stb(set_stb_dsp),.set_addr(set_addr_dsp),.set_data(set_data_dsp), - .vita_time(vita_time),.underrun(underrun), - .sample_fifo_i(tx1_data), .sample_fifo_src_rdy_i(tx1_src_rdy), .sample_fifo_dst_rdy_o(tx1_dst_rdy), - .sample(sample_tx), .run(run_tx), .strobe(strobe_tx), - .debug(debug_vtc) ); - - assign debug_vt = debug_vtc | debug_vtd; - - dsp_core_tx #(.BASE(SR_TX_DSP)) dsp_core_tx - (.clk(dsp_clk),.rst(dsp_rst), + vita_tx_chain #(.BASE_CTRL(SR_TX_CTRL), .BASE_DSP(SR_TX_DSP), + .REPORT_ERROR(1), .PROT_ENG_FLAGS(1)) + vita_tx_chain + (.clk(dsp_clk), .reset(dsp_rst), .set_stb(set_stb_dsp),.set_addr(set_addr_dsp),.set_data(set_data_dsp), - .sample(sample_tx), .run(run_tx), .strobe(strobe_tx), + .vita_time(vita_time), + .tx_data_i(tx_data), .tx_src_rdy_i(tx_src_rdy), .tx_dst_rdy_o(tx_dst_rdy), + .err_data_o(tx_err_data), .err_src_rdy_o(tx_err_src_rdy), .err_dst_rdy_i(tx_err_dst_rdy), .dac_a(dac_a),.dac_b(dac_b), - .debug(debug_tx_dsp) ); - + .underrun(underrun), .run(run_tx), + .debug(debug_vt)); + assign dsp_rst = wb_rst; // /////////////////////////////////////////////////////////////////////////////////// diff --git a/usrp2/vrt/Makefile.srcs b/usrp2/vrt/Makefile.srcs index 07c62224b..dc4bd8c96 100644 --- a/usrp2/vrt/Makefile.srcs +++ b/usrp2/vrt/Makefile.srcs @@ -10,4 +10,6 @@ vita_rx_control.v \ vita_rx_framer.v \ vita_tx_control.v \ vita_tx_deframer.v \ +vita_tx_chain.v \ +gen_context_pkt.v \ )) diff --git a/usrp2/vrt/gen_context_pkt.v b/usrp2/vrt/gen_context_pkt.v new file mode 100644 index 000000000..780a027ba --- /dev/null +++ b/usrp2/vrt/gen_context_pkt.v @@ -0,0 +1,72 @@ + + +module gen_context_pkt + #(parameter PROT_ENG_FLAGS=1) + (input clk, input reset, input clear, + input trigger, output sent, + input [31:0] streamid, + input [63:0] vita_time, + input [31:0] message, + output [35:0] data_o, output src_rdy_o, input dst_rdy_i); + + localparam CTXT_IDLE = 0; + localparam CTXT_PROT_ENG = 1; + localparam CTXT_HEADER = 2; + localparam CTXT_STREAMID = 3; + localparam CTXT_SECS = 4; + localparam CTXT_TICS = 5; + localparam CTXT_TICS2 = 6; + localparam CTXT_MESSAGE = 7; + localparam CTXT_DONE = 8; + + reg [33:0] data_int; + wire src_rdy_int, dst_rdy_int; + wire [3:0] seqno = 0; + reg [3:0] ctxt_state; + reg [63:0] err_time; + + always @(posedge clk) + if(reset | clear) + ctxt_state <= CTXT_IDLE; + else + case(ctxt_state) + CTXT_IDLE : + if(trigger) + begin + err_time <= vita_time; + if(PROT_ENG_FLAGS) + ctxt_state <= CTXT_PROT_ENG; + else + ctxt_state <= CTXT_HEADER; + end + + CTXT_DONE : + if(~trigger) + ctxt_state <= CTXT_IDLE; + + default : + if(dst_rdy_int) + ctxt_state <= ctxt_state + 1; + endcase // case (ctxt_state) + + assign src_rdy_int = ~( (ctxt_state == CTXT_IDLE) | (ctxt_state == CTXT_DONE) ); + + always @* + case(ctxt_state) + CTXT_PROT_ENG : data_int <= { 2'b01, 16'd1, 16'd24 }; + CTXT_HEADER : data_int <= { 1'b0, (PROT_ENG_FLAGS ? 1'b0 : 1'b1), 12'b010100001101, seqno, 16'd6 }; + CTXT_STREAMID : data_int <= { 2'b00, streamid }; + CTXT_SECS : data_int <= { 2'b00, err_time[63:32] }; + CTXT_TICS : data_int <= { 2'b00, 32'd0 }; + CTXT_TICS2 : data_int <= { 2'b00, err_time[31:0] }; + CTXT_MESSAGE : data_int <= { 2'b10, message }; + default : data_int <= {2'b00, 32'b00}; + endcase // case (ctxt_state) + + fifo_short #(.WIDTH(34)) ctxt_fifo + (.clk(clk), .reset(reset), .clear(clear), + .datain(data_int), .src_rdy_i(src_rdy_int), .dst_rdy_o(dst_rdy_int), + .dataout(data_o[33:0]), .src_rdy_o(src_rdy_o), .dst_rdy_i(dst_rdy_i)); + assign data_o[35:34] = 2'b00; + +endmodule // gen_context_pkt diff --git a/usrp2/vrt/vita_rx_framer.v b/usrp2/vrt/vita_rx_framer.v index fd82263d0..235817941 100644 --- a/usrp2/vrt/vita_rx_framer.v +++ b/usrp2/vrt/vita_rx_framer.v @@ -128,7 +128,7 @@ module vita_rx_framer VITA_ERR_SECS : pkt_fifo_line <= {2'b00,vita_time_fifo_o[63:32]}; VITA_ERR_TICS : pkt_fifo_line <= {2'b00,32'd0}; VITA_ERR_TICS2 : pkt_fifo_line <= {2'b00,vita_time_fifo_o[31:0]}; - VITA_ERR_PAYLOAD : pkt_fifo_line <= {2'b11,28'd0,flags_fifo_o}; + VITA_ERR_PAYLOAD : pkt_fifo_line <= {2'b10,28'd0,flags_fifo_o}; //VITA_ERR_TRAILER : pkt_fifo_line <= {2'b11,vita_trailer}; default : pkt_fifo_line <= 34'h0_FFFF_FFFF; diff --git a/usrp2/vrt/vita_tx_chain.v b/usrp2/vrt/vita_tx_chain.v new file mode 100644 index 000000000..662cdca62 --- /dev/null +++ b/usrp2/vrt/vita_tx_chain.v @@ -0,0 +1,71 @@ + +module vita_tx_chain + #(parameter BASE_CTRL=0, + parameter BASE_DSP=0, + parameter REPORT_ERROR=0, + parameter PROT_ENG_FLAGS=0) + (input clk, input reset, + input set_stb, input [7:0] set_addr, input [31:0] set_data, + input [63:0] vita_time, + input [35:0] tx_data_i, input tx_src_rdy_i, output tx_dst_rdy_o, + output [35:0] err_data_o, output err_src_rdy_o, input err_dst_rdy_i, + output [15:0] dac_a, output [15:0] dac_b, + output underrun, output run, + output [31:0] debug); + + localparam MAXCHAN = 1; + localparam FIFOWIDTH = 5+64+16+(32*MAXCHAN); + + wire [FIFOWIDTH-1:0] tx1_data; + wire tx1_src_rdy, tx1_dst_rdy; + wire clear_vita; + wire [31:0] sample_tx; + wire [31:0] streamid, message; + wire trigger, sent; + wire [31:0] debug_vtc, debug_vtd, debug_tx_dsp; + + wire error; + wire [31:0] error_code; + wire clear_seqnum; + + assign underrun = error; + assign message = error_code; + + setting_reg #(.my_addr(BASE_CTRL+2), .at_reset(0)) sr_streamid + (.clk(clk),.rst(reset),.strobe(set_stb),.addr(set_addr), + .in(set_data),.out(streamid),.changed(clear_seqnum)); + + vita_tx_deframer #(.BASE(BASE_CTRL), .MAXCHAN(MAXCHAN)) vita_tx_deframer + (.clk(clk), .reset(reset), .clear(clear_vita), .clear_seqnum(clear_seqnum), + .set_stb(set_stb),.set_addr(set_addr),.set_data(set_data), + .data_i(tx_data_i), .src_rdy_i(tx_src_rdy_i), .dst_rdy_o(tx_dst_rdy_o), + .sample_fifo_o(tx1_data), .sample_fifo_src_rdy_o(tx1_src_rdy), .sample_fifo_dst_rdy_i(tx1_dst_rdy), + .debug(debug_vtd) ); + + vita_tx_control #(.BASE(BASE_CTRL), .WIDTH(32*MAXCHAN)) vita_tx_control + (.clk(clk), .reset(reset), .clear(clear_vita), + .set_stb(set_stb),.set_addr(set_addr),.set_data(set_data), + .vita_time(vita_time),.error(error),.error_code(error_code), + .sample_fifo_i(tx1_data), .sample_fifo_src_rdy_i(tx1_src_rdy), .sample_fifo_dst_rdy_o(tx1_dst_rdy), + .sample(sample_tx), .run(run), .strobe(strobe_tx), + .debug(debug_vtc) ); + + dsp_core_tx #(.BASE(BASE_DSP)) dsp_core_tx + (.clk(clk),.rst(reset), + .set_stb(set_stb),.set_addr(set_addr),.set_data(set_data), + .sample(sample_tx), .run(run), .strobe(strobe_tx), + .dac_a(dac_a),.dac_b(dac_b), + .debug(debug_tx_dsp) ); + + generate + if(REPORT_ERROR==1) + gen_context_pkt #(.PROT_ENG_FLAGS(PROT_ENG_FLAGS)) gen_tx_err_pkt + (.clk(clk), .reset(reset), .clear(clear_vita), + .trigger(error), .sent(), + .streamid(streamid), .vita_time(vita_time), .message(message), + .data_o(err_data_o), .src_rdy_o(err_src_rdy_o), .dst_rdy_i(err_dst_rdy_i)); + endgenerate + + assign debug = debug_vtc | debug_vtd; + +endmodule // vita_tx_chain diff --git a/usrp2/vrt/vita_tx_control.v b/usrp2/vrt/vita_tx_control.v index bffc64e52..d0516bec8 100644 --- a/usrp2/vrt/vita_tx_control.v +++ b/usrp2/vrt/vita_tx_control.v @@ -6,10 +6,11 @@ module vita_tx_control input set_stb, input [7:0] set_addr, input [31:0] set_data, input [63:0] vita_time, - output underrun, + output error, + output reg [31:0] error_code, // From vita_tx_deframer - input [4+64+WIDTH-1:0] sample_fifo_i, + input [5+64+16+WIDTH-1:0] sample_fifo_i, input sample_fifo_src_rdy_i, output sample_fifo_dst_rdy_o, @@ -20,14 +21,17 @@ module vita_tx_control output [31:0] debug ); - - assign sample = sample_fifo_i[4+64+WIDTH-1:4+64]; + + assign sample = sample_fifo_i[5+64+16+WIDTH-1:5+64+16]; wire [63:0] send_time = sample_fifo_i[63:0]; - wire eop = sample_fifo_i[64]; - wire eob = sample_fifo_i[65]; - wire sob = sample_fifo_i[66]; - wire send_at = sample_fifo_i[67]; + wire [15:0] seqnum = sample_fifo_i[79:64]; + wire eop = sample_fifo_i[80]; + wire eob = sample_fifo_i[81]; + wire sob = sample_fifo_i[82]; + wire send_at = sample_fifo_i[83]; + wire seqnum_err = sample_fifo_i[84]; + wire now, early, late, too_early; // FIXME ignore too_early for now for timing reasons @@ -40,8 +44,15 @@ module vita_tx_control localparam IBS_IDLE = 0; localparam IBS_RUN = 1; // FIXME do we need this? localparam IBS_CONT_BURST = 2; - localparam IBS_UNDERRUN = 3; - localparam IBS_UNDERRUN_DONE = 4; + localparam IBS_ERROR = 3; + localparam IBS_ERROR_DONE = 4; + localparam IBS_ERROR_WAIT = 5; + + wire [31:0] CODE_UNDERRUN = {seqnum,16'd2}; + wire [31:0] CODE_SEQ_ERROR = {seqnum,16'd4}; + wire [31:0] CODE_TIME_ERROR = {seqnum,16'd8}; + wire [31:0] CODE_UNDERRUN_MIDPKT = {seqnum,16'd16}; + wire [31:0] CODE_SEQ_ERROR_MIDBURST = {seqnum,16'd32}; reg [2:0] ibs_state; @@ -50,22 +61,49 @@ module vita_tx_control (.clk(clk),.rst(rst),.strobe(set_stb),.addr(set_addr), .in(set_data),.out(),.changed(clear_state)); + wire [31:0] error_policy; + setting_reg #(.my_addr(BASE+3)) sr_error_policy + (.clk(clk),.rst(rst),.strobe(set_stb),.addr(set_addr), + .in(set_data),.out(error_policy),.changed()); + + wire policy_wait = error_policy[0]; + wire policy_next_packet = error_policy[1]; + wire policy_next_burst = error_policy[2]; + reg send_error; + always @(posedge clk) if(reset | clear_state) - ibs_state <= 0; + begin + ibs_state <= IBS_IDLE; + send_error <= 0; + end else case(ibs_state) IBS_IDLE : if(sample_fifo_src_rdy_i) - if(~send_at | now) + if(seqnum_err) + begin + ibs_state <= IBS_ERROR; + error_code <= CODE_SEQ_ERROR; + send_error <= 1; + end + else if(~send_at | now) ibs_state <= IBS_RUN; else if(late | too_early) - ibs_state <= IBS_UNDERRUN; + begin + ibs_state <= IBS_ERROR; + error_code <= CODE_TIME_ERROR; + send_error <= 1; + end IBS_RUN : if(strobe) if(~sample_fifo_src_rdy_i) - ibs_state <= IBS_UNDERRUN; + begin + ibs_state <= IBS_ERROR; + error_code <= CODE_UNDERRUN_MIDPKT; + send_error <= 1; + end else if(eop) if(eob) ibs_state <= IBS_IDLE; @@ -74,24 +112,53 @@ module vita_tx_control IBS_CONT_BURST : if(strobe) - ibs_state <= IBS_UNDERRUN_DONE; + begin + if(policy_next_packet) + ibs_state <= IBS_ERROR_DONE; + else if(policy_wait) + ibs_state <= IBS_ERROR_WAIT; + else + ibs_state <= IBS_ERROR; + error_code <= CODE_UNDERRUN; + send_error <= 1; + end else if(sample_fifo_src_rdy_i) - ibs_state <= IBS_RUN; + if(seqnum_err) + begin + ibs_state <= IBS_ERROR; + error_code <= CODE_SEQ_ERROR_MIDBURST; + send_error <= 1; + end + else + ibs_state <= IBS_RUN; - IBS_UNDERRUN : - if(sample_fifo_src_rdy_i & eop) - ibs_state <= IBS_UNDERRUN_DONE; + IBS_ERROR : + begin + send_error <= 0; + if(sample_fifo_src_rdy_i & eop) + if(policy_next_packet | (policy_next_burst & eob)) + ibs_state <= IBS_IDLE; + else if(policy_wait) + ibs_state <= IBS_ERROR_WAIT; + end - IBS_UNDERRUN_DONE : - ; + IBS_ERROR_DONE : + begin + send_error <= 0; + ibs_state <= IBS_IDLE; + end + + IBS_ERROR_WAIT : + send_error <= 0; endcase // case (ibs_state) - assign sample_fifo_dst_rdy_o = (ibs_state == IBS_UNDERRUN) | (strobe & (ibs_state == IBS_RUN)); // FIXME also cleanout + assign sample_fifo_dst_rdy_o = (ibs_state == IBS_ERROR) | (strobe & (ibs_state == IBS_RUN)); // FIXME also cleanout assign run = (ibs_state == IBS_RUN) | (ibs_state == IBS_CONT_BURST); - assign underrun = (ibs_state == IBS_UNDERRUN_DONE); + //assign error = (ibs_state == IBS_ERROR_DONE); + assign error = send_error; assign debug = { { now,early,late,too_early,eop,eob,sob,send_at }, - { sample_fifo_src_rdy_i, sample_fifo_dst_rdy_o, strobe, run, underrun, ibs_state[2:0] }, + { sample_fifo_src_rdy_i, sample_fifo_dst_rdy_o, strobe, run, error, ibs_state[2:0] }, { 8'b0 }, { 8'b0 } }; diff --git a/usrp2/vrt/vita_tx_deframer.v b/usrp2/vrt/vita_tx_deframer.v index 3b95f5902..f9cd7d00d 100644 --- a/usrp2/vrt/vita_tx_deframer.v +++ b/usrp2/vrt/vita_tx_deframer.v @@ -2,7 +2,7 @@ module vita_tx_deframer #(parameter BASE=0, parameter MAXCHAN=1) - (input clk, input reset, input clear, + (input clk, input reset, input clear, input clear_seqnum, input set_stb, input [7:0] set_addr, input [31:0] set_data, // To FIFO interface of Buffer Pool @@ -10,7 +10,7 @@ module vita_tx_deframer input src_rdy_i, output dst_rdy_o, - output [4+64+(32*MAXCHAN)-1:0] sample_fifo_o, + output [5+64+16+(32*MAXCHAN)-1:0] sample_fifo_o, output sample_fifo_src_rdy_o, input sample_fifo_dst_rdy_i, @@ -21,6 +21,8 @@ module vita_tx_deframer output [31:0] debug ); + localparam FIFOWIDTH = 5+64+16+(32*MAXCHAN); + wire [1:0] numchan; setting_reg #(.my_addr(BASE), .at_reset(0), .width(2)) sr_numchan (.clk(clk),.rst(reset),.strobe(set_stb),.addr(set_addr), @@ -36,14 +38,18 @@ module vita_tx_deframer assign is_sob = data_i[25]; assign is_eob = data_i[24]; wire eof = data_i[33]; - reg has_streamid_reg, has_classid_reg, has_secs_reg, has_tics_reg; reg has_trailer_reg, is_sob_reg, is_eob_reg; - + reg [15:0] pkt_len; reg [1:0] vector_phase; wire line_done; + reg seqnum_err; + reg [3:0] seqnum_reg; + wire [3:0] seqnum = data_i[19:16]; + wire [3:0] next_seqnum = seqnum_reg + 4'd1; + // Output FIFO for packetized data localparam VITA_HEADER = 0; localparam VITA_STREAMID = 1; @@ -61,6 +67,13 @@ module vita_tx_deframer wire eop = eof | (pkt_len==hdr_len); // FIXME would ignoring eof allow larger VITA packets? wire fifo_space; + + always @(posedge clk) + if(reset | clear_seqnum) + seqnum_reg <= 4'hF; + else + if((vita_state==VITA_HEADER) & src_rdy_i) + seqnum_reg <= seqnum; always @(posedge clk) if(reset | clear) @@ -68,6 +81,7 @@ module vita_tx_deframer vita_state <= VITA_HEADER; {has_streamid_reg, has_classid_reg, has_secs_reg, has_tics_reg, has_trailer_reg, is_sob_reg, is_eob_reg} <= 0; + seqnum_err <= 0; end else if((vita_state == VITA_STORE) & fifo_space) @@ -99,6 +113,7 @@ module vita_tx_deframer vita_state <= VITA_TICS; else vita_state <= VITA_PAYLOAD; + seqnum_err <= ~(seqnum == next_seqnum); end // case: VITA_HEADER VITA_STREAMID : if(has_classid_reg) @@ -145,7 +160,7 @@ module vita_tx_deframer assign line_done = (vector_phase == numchan); - wire [4+64+32*MAXCHAN-1:0] fifo_i; + wire [FIFOWIDTH-1:0] fifo_i; reg [63:0] send_time; reg [31:0] sample_a, sample_b, sample_c, sample_d; @@ -169,13 +184,14 @@ module vita_tx_deframer endcase // case (vector_phase) wire store = (vita_state == VITA_STORE); - fifo_short #(.WIDTH(4+64+32*MAXCHAN)) short_tx_q + fifo_short #(.WIDTH(FIFOWIDTH)) short_tx_q (.clk(clk), .reset(reset), .clear(clear), .datain(fifo_i), .src_rdy_i(store), .dst_rdy_o(fifo_space), .dataout(sample_fifo_o), .src_rdy_o(sample_fifo_src_rdy_o), .dst_rdy_i(sample_fifo_dst_rdy_i) ); // sob, eob, has_secs (send_at) ignored on all lines except first - assign fifo_i = {sample_d,sample_c,sample_b,sample_a,has_secs_reg,is_sob_reg,is_eob_reg,eop,send_time}; + assign fifo_i = {sample_d,sample_c,sample_b,sample_a,seqnum_err,has_secs_reg,is_sob_reg,is_eob_reg,eop, + 12'd0,seqnum_reg,send_time}; assign dst_rdy_o = ~(vita_state == VITA_PAYLOAD) & ~((vita_state==VITA_STORE)& ~fifo_space) ; -- cgit v1.2.3 From 7d602e283bc30669df6c155f1abe5196a272b9b4 Mon Sep 17 00:00:00 2001 From: Matt Ettus Date: Thu, 19 Aug 2010 13:08:23 -0700 Subject: properly integrate the new tx chain --- usrp2/top/u1e/u1e_core.v | 58 ++++++++++++++++++++++-------------------------- 1 file changed, 27 insertions(+), 31 deletions(-) diff --git a/usrp2/top/u1e/u1e_core.v b/usrp2/top/u1e/u1e_core.v index 63488f549..33020ad5a 100644 --- a/usrp2/top/u1e/u1e_core.v +++ b/usrp2/top/u1e/u1e_core.v @@ -59,8 +59,9 @@ module u1e_core wire [31:0] debug_gpmc; - wire [35:0] tx_data, rx_data; - wire tx_src_rdy, tx_dst_rdy, rx_src_rdy, rx_dst_rdy; + wire [35:0] tx_data, rx_data, tx_err_data; + wire tx_src_rdy, tx_dst_rdy, rx_src_rdy, rx_dst_rdy, + tx_err_src_rdy, tx_err_dst_rdy; reg [15:0] tx_frame_len; wire [15:0] rx_frame_len; wire [7:0] rate; @@ -109,7 +110,7 @@ module u1e_core assign tx_underrun = 0; assign rx_overrun = 0; - wire run_tx, run_rx, strobe_tx, strobe_rx, tx1_src_rdy, tx1_dst_rdy; + wire run_tx, run_rx, strobe_tx, strobe_rx; wire [31:0] debug_vtd, debug_vtc; `endif // LOOPBACK @@ -154,8 +155,9 @@ module u1e_core wire rx1_dst_rdy, rx1_src_rdy; wire [99:0] rx1_data; wire run_rx; - - + wire [35:0] vita_rx_data; + wire vita_rx_src_rdy, vita_rx_dst_rdy; + dsp_core_rx #(.BASE(SR_RX_DSP)) dsp_core_rx (.clk(wb_clk),.rst(wb_rst), .set_stb(set_stb),.set_addr(set_addr),.set_data(set_data), @@ -175,41 +177,35 @@ module u1e_core (.clk(wb_clk), .reset(wb_rst), .clear(clear_rx), .set_stb(set_stb),.set_addr(set_addr),.set_data(set_data), .sample_fifo_i(rx1_data), .sample_fifo_dst_rdy_o(rx1_dst_rdy), .sample_fifo_src_rdy_i(rx1_src_rdy), - .data_o(rx_data), .dst_rdy_i(rx_dst_rdy), .src_rdy_o(rx_src_rdy), + .data_o(vita_rx_data), .dst_rdy_i(vita_rx_dst_rdy), .src_rdy_o(vita_rx_src_rdy), .fifo_occupied(), .fifo_full(), .fifo_empty(), .debug_rx(vrf_debug) ); - + + fifo36_mux #(.prio(0)) mux_err_stream + (.clk(dsp_clk), .reset(dsp_reset), .clear(0), + .data0_i(vita_rx_data), .src0_rdy_i(vita_rx_src_rdy), .dst0_rdy_o(vita_rx_dst_rdy), + .data1_i(tx_err_data), .src1_rdy_i(tx_err_src_rdy), .dst1_rdy_o(tx_err_dst_rdy), + .data_o(rx_data), .src_rdy_o(rx_src_rdy), .dst_rdy_i(rx_dst_rdy)); + // /////////////////////////////////////////////////////////////////////////////////// // DSP TX - wire [99:0] tx1_data; - wire tx1_src_rdy, tx1_dst_rdy; wire [15:0] tx_i_int, tx_q_int; wire [31:0] debug_vtc, debug_vtd, debug_vt; wire run_tx; - vita_tx_deframer #(.BASE(SR_TX_CTRL), .MAXCHAN(1)) vita_tx_deframer - (.clk(wb_clk), .reset(wb_rst), .clear(clear_tx), - .set_stb(set_stb),.set_addr(set_addr),.set_data(set_data), - .data_i(tx_data), .src_rdy_i(tx_src_rdy), .dst_rdy_o(tx_dst_rdy), - .sample_fifo_o(tx1_data), .sample_fifo_src_rdy_o(tx1_src_rdy), .sample_fifo_dst_rdy_i(tx1_dst_rdy), - .debug(debug_vtd) ); - - vita_tx_control #(.BASE(SR_TX_CTRL), .WIDTH(32)) vita_tx_control - (.clk(wb_clk), .reset(wb_rst), .clear(clear_tx), - .set_stb(set_stb),.set_addr(set_addr),.set_data(set_data), - .vita_time(vita_time),.underrun(tx_underrun), - .sample_fifo_i(tx1_data), .sample_fifo_src_rdy_i(tx1_src_rdy), .sample_fifo_dst_rdy_o(tx1_dst_rdy), - .sample(sample_tx), .run(run_tx), .strobe(strobe_tx), - .debug(debug_vtc) ); - - dsp_core_tx #(.BASE(SR_TX_DSP)) dsp_core_tx - (.clk(wb_clk),.rst(wb_rst), - .set_stb(set_stb),.set_addr(set_addr),.set_data(set_data), - .sample(sample_tx), .run(run_tx), .strobe(strobe_tx), + vita_tx_chain #(.BASE_CTRL(SR_TX_CTRL), .BASE_DSP(SR_TX_DSP), + .REPORT_ERROR(1), .PROT_ENG_FLAGS(1)) + vita_tx_chain + (.clk(dsp_clk), .reset(dsp_rst), + .set_stb(set_stb_dsp),.set_addr(set_addr_dsp),.set_data(set_data_dsp), + .vita_time(vita_time), + .tx_data_i(tx_data), .tx_src_rdy_i(tx_src_rdy), .tx_dst_rdy_o(tx_dst_rdy), + .err_data_o(tx_err_data), .err_src_rdy_o(tx_err_src_rdy), .err_dst_rdy_i(tx_err_dst_rdy), .dac_a(tx_i_int),.dac_b(tx_q_int), - .debug(debug_tx_dsp) ); - + .underrun(underrun), .run(run_tx), + .debug(debug_vt)); + assign tx_i = tx_i_int[15:2]; assign tx_q = tx_q_int[15:2]; @@ -438,7 +434,7 @@ module u1e_core { EM_D } }; assign debug_gpio_0 = { {run_tx, strobe_tx, run_rx, strobe_rx, tx_i[11:0]}, - {tx1_src_rdy, tx1_dst_rdy, tx_src_rdy, tx_dst_rdy, tx_q[11:0]} }; + {2'b00, tx_src_rdy, tx_dst_rdy, tx_q[11:0]} }; assign debug_gpio_1 = debug_vtd | debug_vtc; -- cgit v1.2.3 From 2c70f2bdd17708321d0ce2010f8471900ca4349a Mon Sep 17 00:00:00 2001 From: Nick Foster Date: Fri, 20 Aug 2010 15:29:53 -0700 Subject: Added 12mA current spec to eth phy LED pin. Changed debug pins to debug ICAP instead of VITA -- which makes it actually meet timing, too. Bonus. --- usrp2/top/u2plus/u2plus.ucf | 2 +- usrp2/top/u2plus/u2plus_core.v | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/usrp2/top/u2plus/u2plus.ucf b/usrp2/top/u2plus/u2plus.ucf index 00838e19d..aee9e57bf 100755 --- a/usrp2/top/u2plus/u2plus.ucf +++ b/usrp2/top/u2plus/u2plus.ucf @@ -250,7 +250,7 @@ NET "PHY_INTn" LOC = "L22" ; NET "MDIO" LOC = "K21" ; NET "MDC" LOC = "J23" ; NET "PHY_RESETn" LOC = "J22" ; -NET "ETH_LED" LOC = "H20" ; +NET "ETH_LED" LOC = "H20" |IOSTANDARD = LVCMOS25 |DRIVE = 12 |SLEW = FAST ; ## MIMO Interface NET "exp_time_out_p" LOC = "Y14" ; diff --git a/usrp2/top/u2plus/u2plus_core.v b/usrp2/top/u2plus/u2plus_core.v index 1db7e5b79..ee9d206d8 100644 --- a/usrp2/top/u2plus/u2plus_core.v +++ b/usrp2/top/u2plus/u2plus_core.v @@ -815,7 +815,8 @@ defparam bootram.RAM2.INIT_23=256'h00000000_00000000_00000000_00000000_00000000_ // Debug Pins assign debug_clk = {dsp_clk, wb_clk}; - assign debug = debug_vt; +// assign debug = debug_vt; + assign debug = {wb_clk, wb_rst, sd_cyc, sd_stb, sd_we, sd_ack, sd_dat_o[7:0], sd_dat_i[7:0], 10'd0}; assign debug_gpio_0 = 32'd0; assign debug_gpio_1 = 32'd0; -- cgit v1.2.3 From 105efcdfc21f760e9615e9a3221ef6ae13b01f1c Mon Sep 17 00:00:00 2001 From: Matt Ettus Date: Mon, 23 Aug 2010 17:12:43 -0700 Subject: debug pins cleanup --- usrp2/top/u1e/u1e_core.v | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/usrp2/top/u1e/u1e_core.v b/usrp2/top/u1e/u1e_core.v index 33020ad5a..ff9a846b5 100644 --- a/usrp2/top/u1e/u1e_core.v +++ b/usrp2/top/u1e/u1e_core.v @@ -111,7 +111,6 @@ module u1e_core assign rx_overrun = 0; wire run_tx, run_rx, strobe_tx, strobe_rx; - wire [31:0] debug_vtd, debug_vtc; `endif // LOOPBACK `ifdef TIMED @@ -191,7 +190,7 @@ module u1e_core // DSP TX wire [15:0] tx_i_int, tx_q_int; - wire [31:0] debug_vtc, debug_vtd, debug_vt; + wire [31:0] debug_vt; wire run_tx; vita_tx_chain #(.BASE_CTRL(SR_TX_CTRL), .BASE_DSP(SR_TX_DSP), @@ -429,6 +428,7 @@ module u1e_core // Debug circuitry assign debug_clk = { EM_CLK, clk_fpga }; + assign debug = { { rx_have_data, tx_have_space, EM_NCS6, EM_NCS4, EM_NWE, EM_NOE, rx_overrun, tx_underrun }, { tx_src_rdy, tx_src_rdy_int, tx_dst_rdy, tx_dst_rdy_int, rx_src_rdy, rx_src_rdy_int, rx_dst_rdy, rx_dst_rdy_int }, { EM_D } }; @@ -436,7 +436,7 @@ module u1e_core assign debug_gpio_0 = { {run_tx, strobe_tx, run_rx, strobe_rx, tx_i[11:0]}, {2'b00, tx_src_rdy, tx_dst_rdy, tx_q[11:0]} }; - assign debug_gpio_1 = debug_vtd | debug_vtc; + assign debug_gpio_1 = debug_vt; /* assign debug_gpio_1 = { {rx_enable, rx_src_rdy, rx_dst_rdy, rx_src_rdy & ~rx_dst_rdy}, -- cgit v1.2.3 From 87a64f5979e712fd0fa30cf0676f3c395599ff69 Mon Sep 17 00:00:00 2001 From: Matt Ettus Date: Mon, 23 Aug 2010 19:20:02 -0700 Subject: match the signal names in this design --- usrp2/top/u1e/u1e_core.v | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/usrp2/top/u1e/u1e_core.v b/usrp2/top/u1e/u1e_core.v index ff9a846b5..eda4e463d 100644 --- a/usrp2/top/u1e/u1e_core.v +++ b/usrp2/top/u1e/u1e_core.v @@ -181,7 +181,7 @@ module u1e_core .debug_rx(vrf_debug) ); fifo36_mux #(.prio(0)) mux_err_stream - (.clk(dsp_clk), .reset(dsp_reset), .clear(0), + (.clk(wb_clk), .reset(wb_rst), .clear(0), .data0_i(vita_rx_data), .src0_rdy_i(vita_rx_src_rdy), .dst0_rdy_o(vita_rx_dst_rdy), .data1_i(tx_err_data), .src1_rdy_i(tx_err_src_rdy), .dst1_rdy_o(tx_err_dst_rdy), .data_o(rx_data), .src_rdy_o(rx_src_rdy), .dst_rdy_i(rx_dst_rdy)); @@ -196,8 +196,8 @@ module u1e_core vita_tx_chain #(.BASE_CTRL(SR_TX_CTRL), .BASE_DSP(SR_TX_DSP), .REPORT_ERROR(1), .PROT_ENG_FLAGS(1)) vita_tx_chain - (.clk(dsp_clk), .reset(dsp_rst), - .set_stb(set_stb_dsp),.set_addr(set_addr_dsp),.set_data(set_data_dsp), + (.clk(wb_clk), .reset(wb_rst), + .set_stb(set_stb),.set_addr(set_addr),.set_data(set_data), .vita_time(vita_time), .tx_data_i(tx_data), .tx_src_rdy_i(tx_src_rdy), .tx_dst_rdy_o(tx_dst_rdy), .err_data_o(tx_err_data), .err_src_rdy_o(tx_err_src_rdy), .err_dst_rdy_i(tx_err_dst_rdy), -- cgit v1.2.3 From 743ea16da4eef07cf9956f4098fc4b959e689c00 Mon Sep 17 00:00:00 2001 From: Matt Ettus Date: Tue, 24 Aug 2010 12:08:22 -0700 Subject: no need for protocol headers since we're not doing ethernet --- usrp2/top/u1e/u1e_core.v | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/usrp2/top/u1e/u1e_core.v b/usrp2/top/u1e/u1e_core.v index eda4e463d..d7c4ff509 100644 --- a/usrp2/top/u1e/u1e_core.v +++ b/usrp2/top/u1e/u1e_core.v @@ -194,7 +194,7 @@ module u1e_core wire run_tx; vita_tx_chain #(.BASE_CTRL(SR_TX_CTRL), .BASE_DSP(SR_TX_DSP), - .REPORT_ERROR(1), .PROT_ENG_FLAGS(1)) + .REPORT_ERROR(1), .PROT_ENG_FLAGS(0)) vita_tx_chain (.clk(wb_clk), .reset(wb_rst), .set_stb(set_stb),.set_addr(set_addr),.set_data(set_data), -- cgit v1.2.3 From e5c97b4a2cdccf0d87c585cf807945e4f58e58a7 Mon Sep 17 00:00:00 2001 From: Nick Foster Date: Tue, 24 Aug 2010 13:25:36 -0700 Subject: Ensure ethernet LED pin has 12mA output --- usrp2/top/u2plus/u2plus.ucf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/usrp2/top/u2plus/u2plus.ucf b/usrp2/top/u2plus/u2plus.ucf index aee9e57bf..a9ff9413d 100755 --- a/usrp2/top/u2plus/u2plus.ucf +++ b/usrp2/top/u2plus/u2plus.ucf @@ -250,7 +250,7 @@ NET "PHY_INTn" LOC = "L22" ; NET "MDIO" LOC = "K21" ; NET "MDC" LOC = "J23" ; NET "PHY_RESETn" LOC = "J22" ; -NET "ETH_LED" LOC = "H20" |IOSTANDARD = LVCMOS25 |DRIVE = 12 |SLEW = FAST ; +NET "ETH_LEd" LOC = "H20" |IOSTANDARD = LVCMOS25 |DRIVE = 12 |SLEW = FAST ; ## MIMO Interface NET "exp_time_out_p" LOC = "Y14" ; -- cgit v1.2.3 From d0815967a27d01059230679e2d635377ac8c18b3 Mon Sep 17 00:00:00 2001 From: Nick Foster Date: Tue, 24 Aug 2010 13:36:48 -0700 Subject: Added a sanity checker Python script. The script just looks for input/inout/outputs that are declared in the .v but not in the .ucf. If it finds an occurrence, it aborts the compile. Removed pin "POR" from u2plus.v due to the script. Also reverted an error I introduced to test the script, which I mistakenly committed earlier. --- usrp2/top/Makefile.common | 4 ++- usrp2/top/python/check_inout.py | 62 +++++++++++++++++++++++++++++++++++++++++ usrp2/top/u2plus/u2plus.ucf | 2 +- usrp2/top/u2plus/u2plus.v | 2 +- 4 files changed, 67 insertions(+), 3 deletions(-) create mode 100755 usrp2/top/python/check_inout.py diff --git a/usrp2/top/Makefile.common b/usrp2/top/Makefile.common index 2f6b5fde3..0e08b800e 100644 --- a/usrp2/top/Makefile.common +++ b/usrp2/top/Makefile.common @@ -13,6 +13,7 @@ else endif BASE_DIR = $(abspath ..) ISE_HELPER = xtclsh $(BASE_DIR)/tcl/ise_helper.tcl +SANITY_CHECKER = python $(BASE_DIR)/python/check_inout.py ISE_FILE = $(BUILD_DIR)/$(TOP_MODULE).$(ISE_EXT) BIN_FILE = $(BUILD_DIR)/$(TOP_MODULE).bin BIT_FILE = $(BUILD_DIR)/$(TOP_MODULE).bit @@ -26,12 +27,13 @@ all: bin proj: $(ISE_FILE) check: $(ISE_FILE) + $(SANITY_CHECKER) $(TOP_MODULE).v $(TOP_MODULE).ucf $(ISE_HELPER) "Check Syntax" synth: $(ISE_FILE) $(ISE_HELPER) "Synthesize - XST" -bin: $(BIN_FILE) +bin: check $(BIN_FILE) mcs: $(MCS_FILE) diff --git a/usrp2/top/python/check_inout.py b/usrp2/top/python/check_inout.py new file mode 100755 index 000000000..ff371d378 --- /dev/null +++ b/usrp2/top/python/check_inout.py @@ -0,0 +1,62 @@ +#!/usr/bin/env python +# +# Copyright 2010 Ettus Research LLC +# +# 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 . +# +# Description: +# generates a list of inputs and outputs from the top-level Verilog file and cross-references them to the .ucf. +# outputs errors for pins that aren't found in the UCF, checks for capitalization errors and other common mistakes + +import sys +import re + +if __name__=='__main__': + if len(sys.argv) == 2: + print "Usage: %s " + sys.exit(-1) + + verilog_filename = sys.argv[1] + ucf_filename = sys.argv[2] + + verilog_file = open(verilog_filename, 'r') + ucf_file = open(ucf_filename, 'r') + + verilog_iolist = list() + ucf_iolist = list() + + #read in all input, inout, and output declarations and compile a list + for line in verilog_file: + for match in re.findall(r"(?:input|inout|output) (?:reg )*(?:\[.*\] )*(\w+)", line.split("//")[0]): + verilog_iolist.append(match) + + for line in ucf_file: + m = re.search(r"""NET "(\w+).*" """, line.split("#")[0]) + if m is not None: + ucf_iolist.append(m.group(1)) + + #now find corresponding matches and error when you don't find one + #we search for .v defs without matching .ucf defs since the reverse isn't necessarily a problem + err = False + + for item in verilog_iolist: + if item not in ucf_iolist: + print "Error: %s appears in the top-level Verilog file, but is not in the UCF definition file!" % item + err = True + + if err: + sys.exit(-1) + + print "No errors found." + sys.exit(0) diff --git a/usrp2/top/u2plus/u2plus.ucf b/usrp2/top/u2plus/u2plus.ucf index a9ff9413d..aee9e57bf 100755 --- a/usrp2/top/u2plus/u2plus.ucf +++ b/usrp2/top/u2plus/u2plus.ucf @@ -250,7 +250,7 @@ NET "PHY_INTn" LOC = "L22" ; NET "MDIO" LOC = "K21" ; NET "MDC" LOC = "J23" ; NET "PHY_RESETn" LOC = "J22" ; -NET "ETH_LEd" LOC = "H20" |IOSTANDARD = LVCMOS25 |DRIVE = 12 |SLEW = FAST ; +NET "ETH_LED" LOC = "H20" |IOSTANDARD = LVCMOS25 |DRIVE = 12 |SLEW = FAST ; ## MIMO Interface NET "exp_time_out_p" LOC = "Y14" ; diff --git a/usrp2/top/u2plus/u2plus.v b/usrp2/top/u2plus/u2plus.v index a0ba4d4cc..3641ce962 100644 --- a/usrp2/top/u2plus/u2plus.v +++ b/usrp2/top/u2plus/u2plus.v @@ -83,7 +83,7 @@ module u2plus output PHY_RESETn, output ETH_LED, - input POR, +// input POR, // Expansion input exp_time_in_p, input exp_time_in_n, // Diff -- cgit v1.2.3 From 2e526a8411f97654a2e87bdd1e524729da71315e Mon Sep 17 00:00:00 2001 From: Matt Ettus Date: Wed, 25 Aug 2010 18:44:56 -0700 Subject: Use new tx_policy stuff, reassigned leds to be just like U2 --- usrp2/top/u2plus/u2plus.v | 2 +- usrp2/top/u2plus/u2plus_core.v | 68 ++++++++++++++++++++---------------------- 2 files changed, 34 insertions(+), 36 deletions(-) diff --git a/usrp2/top/u2plus/u2plus.v b/usrp2/top/u2plus/u2plus.v index 3641ce962..d330e336b 100644 --- a/usrp2/top/u2plus/u2plus.v +++ b/usrp2/top/u2plus/u2plus.v @@ -220,7 +220,7 @@ module u2plus // LEDs are active low outputs wire [5:0] leds_int; - assign {leds,ETH_LED} = {6'b111110 ^ leds_int}; // drive low to turn on leds + assign {ETH_LED,leds} = {6'b011111 ^ leds_int}; // drive low to turn on leds // SPI wire miso, mosi, sclk; diff --git a/usrp2/top/u2plus/u2plus_core.v b/usrp2/top/u2plus/u2plus_core.v index ee9d206d8..e394e68af 100644 --- a/usrp2/top/u2plus/u2plus_core.v +++ b/usrp2/top/u2plus/u2plus_core.v @@ -173,6 +173,7 @@ module u2plus_core wire epoch; wire [31:0] irq; wire [63:0] vita_time; + wire run_rx, run_tx; // /////////////////////////////////////////////////////////////////////////////////////////////// // Wishbone Single Master INTERCON @@ -527,8 +528,7 @@ defparam bootram.RAM2.INIT_23=256'h00000000_00000000_00000000_00000000_00000000_ .cyc_i(s4_cyc),.stb_i(s4_stb),.adr_i(s4_adr[3:0]),.we_i(s4_we), .dat_i(s4_dat_o),.dat_o(s4_dat_i),.ack_o(s4_ack), .atr(atr_lines),.debug_0(debug_gpio_0),.debug_1(debug_gpio_1), - .gpio( {io_tx,io_rx} ) - ); + .gpio( {io_tx,io_rx} ) ); // ///////////////////////////////////////////////////////////////////////// // Buffer Pool Status -- Slave #5 @@ -539,7 +539,10 @@ defparam bootram.RAM2.INIT_23=256'h00000000_00000000_00000000_00000000_00000000_ cycle_count <= 0; else cycle_count <= cycle_count + 1; - + + //compatibility number -> increment when the fpga has been sufficiently altered + localparam compat_num = 32'd2; + wb_readback_mux buff_pool_status (.wb_clk_i(wb_clk), .wb_rst_i(wb_rst), .wb_stb_i(s5_stb), .wb_adr_i(s5_adr), .wb_dat_o(s5_dat_i), .wb_ack_o(s5_ack), @@ -547,7 +550,7 @@ defparam bootram.RAM2.INIT_23=256'h00000000_00000000_00000000_00000000_00000000_ .word00(status_b0),.word01(status_b1),.word02(status_b2),.word03(status_b3), .word04(status_b4),.word05(status_b5),.word06(status_b6),.word07(status_b7), .word08(status),.word09({sim_mode,27'b0,clock_divider[3:0]}),.word10(vita_time[63:32]), - .word11(vita_time[31:0]),.word12(32'b0),.word13(irq),.word14(status_enc),.word15(cycle_count) + .word11(vita_time[31:0]),.word12(compat_num),.word13(irq),.word14(status_enc),.word15(cycle_count) ); // ///////////////////////////////////////////////////////////////////////// @@ -582,11 +585,20 @@ defparam bootram.RAM2.INIT_23=256'h00000000_00000000_00000000_00000000_00000000_ .tx_f36_data(udp_tx_data), .tx_f36_src_rdy_i(udp_tx_src_rdy), .tx_f36_dst_rdy_o(udp_tx_dst_rdy), .debug(debug_udp) ); + wire [35:0] tx_err_data, udp1_tx_data; + wire tx_err_src_rdy, tx_err_dst_rdy, udp1_tx_src_rdy, udp1_tx_dst_rdy; + fifo_cascade #(.WIDTH(36), .SIZE(ETH_TX_FIFOSIZE)) tx_eth_fifo (.clk(dsp_clk), .reset(dsp_rst), .clear(0), .datain({rd2_flags,rd2_dat}), .src_rdy_i(rd2_ready_o), .dst_rdy_o(rd2_ready_i), - .dataout(udp_tx_data), .src_rdy_o(udp_tx_src_rdy), .dst_rdy_i(udp_tx_dst_rdy)); + .dataout(udp1_tx_data), .src_rdy_o(udp1_tx_src_rdy), .dst_rdy_i(udp1_tx_dst_rdy)); + fifo36_mux #(.prio(0)) mux_err_stream + (.clk(dsp_clk), .reset(dsp_reset), .clear(0), + .data0_i(udp1_tx_data), .src0_rdy_i(udp1_tx_src_rdy), .dst0_rdy_o(udp1_tx_dst_rdy), + .data1_i(tx_err_data), .src1_rdy_i(tx_err_src_rdy), .dst1_rdy_o(tx_err_dst_rdy), + .data_o(udp_tx_data), .src_rdy_o(udp_tx_src_rdy), .dst_rdy_i(udp_tx_dst_rdy)); + fifo_cascade #(.WIDTH(36), .SIZE(ETH_RX_FIFOSIZE)) rx_eth_fifo (.clk(dsp_clk), .reset(dsp_rst), .clear(0), .datain(udp_rx_data), .src_rdy_i(udp_rx_src_rdy), .dst_rdy_o(udp_rx_dst_rdy), @@ -630,12 +642,13 @@ defparam bootram.RAM2.INIT_23=256'h00000000_00000000_00000000_00000000_00000000_ // In Rev3 there are only 6 leds, and the highest one is on the ETH connector wire [7:0] led_src, led_sw; - wire [7:0] led_hw = {clk_status,serdes_link_up}; + wire [7:0] led_hw = {run_tx, run_rx, clk_status, serdes_link_up, 1'b0}; setting_reg #(.my_addr(3),.width(8)) sr_led (.clk(wb_clk),.rst(wb_rst),.strobe(set_stb),.addr(set_addr), .in(set_data),.out(led_sw),.changed()); - setting_reg #(.my_addr(8),.width(8)) sr_led_src (.clk(wb_clk),.rst(wb_rst),.strobe(set_stb),.addr(set_addr), - .in(set_data),.out(led_src),.changed()); + + setting_reg #(.my_addr(8),.width(8), .at_reset(8'b0001_1110)) + sr_led_src (.clk(wb_clk),.rst(wb_rst), .strobe(set_stb),.addr(set_addr), .in(set_data),.out(led_src),.changed()); assign leds = (led_src & led_hw) | (~led_src & led_sw); @@ -678,7 +691,6 @@ defparam bootram.RAM2.INIT_23=256'h00000000_00000000_00000000_00000000_00000000_ // ///////////////////////////////////////////////////////////////////////// // ATR Controller, Slave #11 - wire run_rx, run_tx; reg run_rx_d1; always @(posedge dsp_clk) run_rx_d1 <= run_rx; @@ -755,40 +767,26 @@ defparam bootram.RAM2.INIT_23=256'h00000000_00000000_00000000_00000000_00000000_ // DSP TX wire [35:0] tx_data; - wire [99:0] tx1_data; - wire tx_src_rdy, tx_dst_rdy, tx1_src_rdy, tx1_dst_rdy; - - wire [31:0] debug_vtc, debug_vtd, debug_vt; + wire tx_src_rdy, tx_dst_rdy; + wire [31:0] debug_vt; fifo_cascade #(.WIDTH(36), .SIZE(DSP_TX_FIFOSIZE)) tx_fifo_cascade (.clk(dsp_clk), .reset(dsp_rst), .clear(0), .datain({rd1_flags,rd1_dat}), .src_rdy_i(rd1_ready_o), .dst_rdy_o(rd1_ready_i), .dataout(tx_data), .src_rdy_o(tx_src_rdy), .dst_rdy_i(tx_dst_rdy) ); - vita_tx_deframer #(.BASE(SR_TX_CTRL), .MAXCHAN(1)) vita_tx_deframer - (.clk(dsp_clk), .reset(dsp_rst), .clear(0), + vita_tx_chain #(.BASE_CTRL(SR_TX_CTRL), .BASE_DSP(SR_TX_DSP), + .REPORT_ERROR(1), .PROT_ENG_FLAGS(1)) + vita_tx_chain + (.clk(dsp_clk), .reset(dsp_rst), .set_stb(set_stb_dsp),.set_addr(set_addr_dsp),.set_data(set_data_dsp), - .data_i(tx_data), .src_rdy_i(tx_src_rdy), .dst_rdy_o(tx_dst_rdy), - .sample_fifo_o(tx1_data), .sample_fifo_src_rdy_o(tx1_src_rdy), .sample_fifo_dst_rdy_i(tx1_dst_rdy), - .debug(debug_vtd) ); - - vita_tx_control #(.BASE(SR_TX_CTRL), .WIDTH(32)) vita_tx_control - (.clk(dsp_clk), .reset(dsp_rst), .clear(0), - .set_stb(set_stb_dsp),.set_addr(set_addr_dsp),.set_data(set_data_dsp), - .vita_time(vita_time),.underrun(underrun), - .sample_fifo_i(tx1_data), .sample_fifo_src_rdy_i(tx1_src_rdy), .sample_fifo_dst_rdy_o(tx1_dst_rdy), - .sample(sample_tx), .run(run_tx), .strobe(strobe_tx), - .debug(debug_vtc) ); - - assign debug_vt = debug_vtc | debug_vtd; - - dsp_core_tx #(.BASE(SR_TX_DSP)) dsp_core_tx - (.clk(dsp_clk),.rst(dsp_rst), - .set_stb(set_stb_dsp),.set_addr(set_addr_dsp),.set_data(set_data_dsp), - .sample(sample_tx), .run(run_tx), .strobe(strobe_tx), + .vita_time(vita_time), + .tx_data_i(tx_data), .tx_src_rdy_i(tx_src_rdy), .tx_dst_rdy_o(tx_dst_rdy), + .err_data_o(tx_err_data), .err_src_rdy_o(tx_err_src_rdy), .err_dst_rdy_i(tx_err_dst_rdy), .dac_a(dac_a),.dac_b(dac_b), - .debug(debug_tx_dsp) ); - + .underrun(underrun), .run(run_tx), + .debug(debug_vt)); + assign dsp_rst = wb_rst; // /////////////////////////////////////////////////////////////////////////////////// -- cgit v1.2.3 From 9e2e78642251ee9e024461becfd70a75b11d818a Mon Sep 17 00:00:00 2001 From: Matt Ettus Date: Wed, 25 Aug 2010 19:00:02 -0700 Subject: SWAP DAC A and B, invert B to match schematics --- usrp2/top/u2plus/u2plus.v | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/usrp2/top/u2plus/u2plus.v b/usrp2/top/u2plus/u2plus.v index d330e336b..db31b4a68 100644 --- a/usrp2/top/u2plus/u2plus.v +++ b/usrp2/top/u2plus/u2plus.v @@ -298,10 +298,11 @@ module u2plus */ wire [15:0] dac_a_int, dac_b_int; + // DAC A and B are swapped in schematic to facilitate clean layout + // DAC A is also inverted in schematic to facilitate clean layout + always @(negedge dsp_clk) DACA <= ~dac_b_int; + always @(negedge dsp_clk) DACB <= dac_a_int; - always @(negedge dsp_clk) DACA <= dac_a_int; - always @(negedge dsp_clk) DACB <= dac_b_int; - u2plus_core u2p_c(.dsp_clk (dsp_clk), .wb_clk (wb_clk), .clock_ready (clock_ready), -- cgit v1.2.3 From ea545df8aa9da7b647160d59a0f33a35d9ec1378 Mon Sep 17 00:00:00 2001 From: Matt Ettus Date: Wed, 25 Aug 2010 19:04:47 -0700 Subject: invert adc_a because it is inverted on schematic. Also clean up extraneous adc signals from old adc on U2 --- usrp2/top/u2plus/u2plus.v | 33 ++++++++++++++++++--------------- 1 file changed, 18 insertions(+), 15 deletions(-) diff --git a/usrp2/top/u2plus/u2plus.v b/usrp2/top/u2plus/u2plus.v index db31b4a68..66cb8005c 100644 --- a/usrp2/top/u2plus/u2plus.v +++ b/usrp2/top/u2plus/u2plus.v @@ -155,25 +155,28 @@ module u2plus always @(posedge clk_fpga) clock_ready_d[5:0] <= {clock_ready_d[4:0],clock_ready}; wire dcm_rst = ~&clock_ready_d & |clock_ready_d; - + + // ADC A is inverted on the schematic to facilitate a clean layout + // We account for that here by inverting it `ifdef LVDS - wire [13:0] adc_a, adc_b; - capture_ddrlvds #(.WIDTH(14)) capture_ddrlvds + wire [13:0] adc_a, adc_a_inv, adc_b; + capture_ddrlvds #(.WIDTH(14)) capture_ddrlvds (.clk(dsp_clk), .ssclk_p(ADC_clkout_p), .ssclk_n(ADC_clkout_n), .in_p({{ADCA_12_p, ADCA_10_p, ADCA_8_p, ADCA_6_p, ADCA_4_p, ADCA_2_p, ADCA_0_p}, {ADCB_12_p, ADCB_10_p, ADCB_8_p, ADCB_6_p, ADCB_4_p, ADCB_2_p, ADCB_0_p}}), .in_n({{ADCA_12_n, ADCA_10_n, ADCA_8_n, ADCA_6_n, ADCA_4_n, ADCA_2_n, ADCA_0_n}, {ADCB_12_n, ADCB_10_n, ADCB_8_n, ADCB_6_n, ADCB_4_n, ADCB_2_n, ADCB_0_n}}), - .out({adc_a,adc_b})); + .out({adc_a_inv,adc_b})); + assign adc_a = ~adc_a_inv; `else - reg [13:0] adc_a, adc_b; + reg [13:0] adc_a, adc_b; always @(posedge dsp_clk) - begin - adc_a <= {ADCA_12_p,ADCA_12_n, ADCA_10_p,ADCA_10_n, ADCA_8_p,ADCA_8_n, ADCA_6_p,ADCA_6_n, + begin + adc_a <= ~{ADCA_12_p,ADCA_12_n, ADCA_10_p,ADCA_10_n, ADCA_8_p,ADCA_8_n, ADCA_6_p,ADCA_6_n, ADCA_4_p,ADCA_4_n, ADCA_2_p,ADCA_2_n, ADCA_0_p,ADCA_0_n }; - adc_b <= {ADCB_12_p,ADCB_12_n, ADCB_10_p,ADCB_10_n, ADCB_8_p,ADCB_8_n, ADCB_6_p,ADCB_6_n, + adc_b <= {ADCB_12_p,ADCB_12_n, ADCB_10_p,ADCB_10_n, ADCB_8_p,ADCB_8_n, ADCB_6_p,ADCB_6_n, ADCB_4_p,ADCB_4_n, ADCB_2_p,ADCB_2_n, ADCB_0_p,ADCB_0_n }; - end + end `endif // !`ifdef LVDS // Handle Clocks @@ -341,13 +344,13 @@ module u2plus .ser_rklsb (ser_rklsb_int), .ser_rkmsb (ser_rkmsb_int), .adc_a (adc_a[13:0]), - .adc_ovf_a (adc_ovf_a), - .adc_on_a (adc_on_a), - .adc_oe_a (adc_oe_a), + .adc_ovf_a (1'b0), + .adc_on_a (), + .adc_oe_a (), .adc_b (adc_b[13:0]), - .adc_ovf_b (adc_ovf_b), - .adc_on_b (adc_on_b), - .adc_oe_b (adc_oe_b), + .adc_ovf_b (1'b0), + .adc_on_b (), + .adc_oe_b (), .dac_a (dac_a_int[15:0]), .dac_b (dac_b_int[15:0]), .scl_pad_i (scl_pad_i), -- cgit v1.2.3 From 94e9baee9598f304b0e6918894876b16ffc8b2d7 Mon Sep 17 00:00:00 2001 From: Matt Ettus Date: Fri, 27 Aug 2010 14:59:33 -0700 Subject: move declaration to make loopback compile --- usrp2/top/u1e/u1e_core.v | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/usrp2/top/u1e/u1e_core.v b/usrp2/top/u1e/u1e_core.v index d7c4ff509..4a80fe916 100644 --- a/usrp2/top/u1e/u1e_core.v +++ b/usrp2/top/u1e/u1e_core.v @@ -46,6 +46,8 @@ module u1e_core wire [31:0] set_data; wire set_stb; + wire [31:0] debug_vt; + // ///////////////////////////////////////////////////////////////////////////////////// // GPMC Slave to Wishbone Master localparam dw = 16; @@ -190,7 +192,6 @@ module u1e_core // DSP TX wire [15:0] tx_i_int, tx_q_int; - wire [31:0] debug_vt; wire run_tx; vita_tx_chain #(.BASE_CTRL(SR_TX_CTRL), .BASE_DSP(SR_TX_DSP), -- cgit v1.2.3 From f810520cc06401d535708b1d4d832309d7bc47f5 Mon Sep 17 00:00:00 2001 From: Nick Foster Date: Fri, 27 Aug 2010 16:09:20 -0700 Subject: Fixed PPS. Instantiation was miscapitalized. --- usrp2/top/u2plus/u2plus.v | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/usrp2/top/u2plus/u2plus.v b/usrp2/top/u2plus/u2plus.v index 66cb8005c..90dbe9d55 100644 --- a/usrp2/top/u2plus/u2plus.v +++ b/usrp2/top/u2plus/u2plus.v @@ -310,7 +310,7 @@ module u2plus .wb_clk (wb_clk), .clock_ready (clock_ready), .clk_to_mac (CLK_TO_MAC_int2), - .pps_in (pps_in), + .pps_in (PPS_IN), .leds (leds_int), .debug (debug[31:0]), .debug_clk (debug_clk[1:0]), -- cgit v1.2.3 From c3cd5ccbf38294a3dd4ae1e386ddefb2071f59b6 Mon Sep 17 00:00:00 2001 From: Matt Ettus Date: Mon, 30 Aug 2010 15:11:05 -0700 Subject: add register to tell host about compatibility level and which image we are using --- usrp2/top/u1e/u1e_core.v | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/usrp2/top/u1e/u1e_core.v b/usrp2/top/u1e/u1e_core.v index 4a80fe916..5c4b6de6c 100644 --- a/usrp2/top/u1e/u1e_core.v +++ b/usrp2/top/u1e/u1e_core.v @@ -34,7 +34,9 @@ module u1e_core localparam SR_TX_DSP = 17; // 5 regs localparam SR_TX_CTRL = 24; // 2 regs localparam SR_TIME64 = 28; // 4 regs - + + wire COMPAT_NUM = 8'd2; + wire wb_clk = clk_fpga; wire wb_rst = rst_fpga; @@ -104,6 +106,8 @@ module u1e_core wire rx_src_rdy_int, rx_dst_rdy_int, tx_src_rdy_int, tx_dst_rdy_int; `ifdef LOOPBACK + wire [7:0] WHOAMI = 1; + fifo_cascade #(.WIDTH(36), .SIZE(12)) loopback_fifo (.clk(wb_clk), .reset(wb_rst), .clear(clear_tx | clear_rx), .datain(tx_data), .src_rdy_i(tx_src_rdy), .dst_rdy_o(tx_dst_rdy), @@ -116,7 +120,8 @@ module u1e_core `endif // LOOPBACK `ifdef TIMED - + wire [7:0] WHOAMI = 2; + // TX side wire tx_enable; @@ -147,6 +152,8 @@ module u1e_core `endif // `ifdef TIMED `ifdef DSP + wire [7:0] WHOAMI = 0; + wire [31:0] debug_rx_dsp, vrc_debug, vrf_debug; // ///////////////////////////////////////////////////////////////////////// @@ -303,9 +310,10 @@ module u1e_core localparam REG_CGEN_CTRL = 7'd4; // out localparam REG_CGEN_ST = 7'd6; // in localparam REG_TEST = 7'd8; // out - localparam REG_RX_FRAMELEN = 7'd10; // out - localparam REG_TX_FRAMELEN = 7'd12; // in - localparam REG_XFER_RATE = 7'd14; // in + localparam REG_RX_FRAMELEN = 7'd10; // in + localparam REG_TX_FRAMELEN = 7'd12; // out + localparam REG_XFER_RATE = 7'd14; // out + localparam REG_COMPAT = 7'd16; // in always @(posedge wb_clk) if(wb_rst) @@ -344,6 +352,7 @@ module u1e_core (s0_adr[6:0] == REG_CGEN_ST) ? {13'b0,cgen_st_status,cgen_st_ld,cgen_st_refmon} : (s0_adr[6:0] == REG_TEST) ? reg_test : (s0_adr[6:0] == REG_RX_FRAMELEN) ? rx_frame_len : + (s0_adr[6:0] == REG_COMPAT) ? { WHOAMI, COMPAT_NUM } : 16'hBEEF; assign s0_ack = s0_stb & s0_cyc; -- cgit v1.2.3 From 709d93fd675298c7d6fb3e97c60ae7258496efc4 Mon Sep 17 00:00:00 2001 From: Matt Ettus Date: Tue, 7 Sep 2010 19:07:34 -0700 Subject: fixed makefile to compile with our new system --- usrp2/top/u1e_passthru/Makefile | 80 +++++++++++++++++++---------------------- 1 file changed, 36 insertions(+), 44 deletions(-) diff --git a/usrp2/top/u1e_passthru/Makefile b/usrp2/top/u1e_passthru/Makefile index 62923f87f..d1950629b 100644 --- a/usrp2/top/u1e_passthru/Makefile +++ b/usrp2/top/u1e_passthru/Makefile @@ -1,20 +1,30 @@ # # Copyright 2008 Ettus Research LLC -# +# ################################################## -# xtclsh Shell and tcl Script Path +# Project Setup ################################################## -#XTCLSH := /opt/Xilinx/10.1/ISE/bin/lin/xtclsh -XTCLSH := xtclsh -ISE_HELPER := ../tcl/ise_helper.tcl +TOP_MODULE = passthru +BUILD_DIR = $(abspath build$(ISE)) ################################################## -# Project Setup +# Include other makefiles ################################################## -BUILD_DIR := build/ -export TOP_MODULE := passthru -export PROJ_FILE := $(BUILD_DIR)$(TOP_MODULE).ise + +include ../Makefile.common +include ../../fifo/Makefile.srcs +include ../../control_lib/Makefile.srcs +include ../../sdr_lib/Makefile.srcs +include ../../serdes/Makefile.srcs +include ../../simple_gemac/Makefile.srcs +include ../../timing/Makefile.srcs +include ../../opencores/Makefile.srcs +include ../../vrt/Makefile.srcs +include ../../udp/Makefile.srcs +include ../../coregen/Makefile.srcs +include ../../extram/Makefile.srcs +include ../../gpmc/Makefile.srcs ################################################## # Project Properties @@ -34,16 +44,21 @@ simulator "ISE Simulator (VHDL/Verilog)" \ ################################################## # Sources ################################################## -export SOURCE_ROOT := ../../../ -export SOURCES := \ -top/u1e_passthru/passthru.ucf \ -top/u1e_passthru/passthru.v +TOP_SRCS = \ +passthru.v \ +passthru.ucf + +SOURCES = $(abspath $(TOP_SRCS)) $(FIFO_SRCS) \ +$(CONTROL_LIB_SRCS) $(SDR_LIB_SRCS) $(SERDES_SRCS) \ +$(SIMPLE_GEMAC_SRCS) $(TIMING_SRCS) $(OPENCORES_SRCS) \ +$(VRT_SRCS) $(UDP_SRCS) $(COREGEN_SRCS) $(EXTRAM_SRCS) \ +$(GPMC_SRCS) ################################################## # Process Properties ################################################## -export SYNTHESIZE_PROPERTIES := \ -"Number of Clock Buffers" 6 \ +SYNTHESIZE_PROPERTIES = \ +"Number of Clock Buffers" 8 \ "Pack I/O Registers into IOBs" Yes \ "Optimization Effort" High \ "Optimize Instantiated Primitives" TRUE \ @@ -52,10 +67,10 @@ export SYNTHESIZE_PROPERTIES := \ "Use Synchronous Reset" Auto \ "Use Synchronous Set" Auto -export TRANSLATE_PROPERTIES := \ +TRANSLATE_PROPERTIES = \ "Macro Search Path" "$(shell pwd)/../../coregen/" -export MAP_PROPERTIES := \ +MAP_PROPERTIES = \ "Allow Logic Optimization Across Hierarchy" TRUE \ "Map to Input Functions" 4 \ "Optimization Strategy (Cover Mode)" Speed \ @@ -66,14 +81,14 @@ export MAP_PROPERTIES := \ "Combinatorial Logic Optimization" TRUE \ "Register Duplication" TRUE -export PLACE_ROUTE_PROPERTIES := \ +PLACE_ROUTE_PROPERTIES = \ "Place & Route Effort Level (Overall)" High -export STATIC_TIMING_PROPERTIES := \ +STATIC_TIMING_PROPERTIES = \ "Number of Paths in Error/Verbose Report" 10 \ "Report Type" "Error Report" -export GEN_PROG_FILE_PROPERTIES := \ +GEN_PROG_FILE_PROPERTIES = \ "Configuration Rate" 6 \ "Create Binary Configuration File" TRUE \ "Done (Output Events)" 5 \ @@ -81,27 +96,4 @@ export GEN_PROG_FILE_PROPERTIES := \ "Enable Outputs (Output Events)" 6 \ "Unused IOB Pins" "Pull Up" -export SIM_MODEL_PROPERTIES := "" - -################################################## -# Make Options -################################################## -all: - @echo make proj, check, synth, bin, or clean - -proj: - PROCESS_RUN="" $(XTCLSH) $(ISE_HELPER) - -check: - PROCESS_RUN="Check Syntax" $(XTCLSH) $(ISE_HELPER) - -synth: - PROCESS_RUN="Synthesize - XST" $(XTCLSH) $(ISE_HELPER) - -bin: - PROCESS_RUN="Generate Programming File" $(XTCLSH) $(ISE_HELPER) - -clean: - rm -rf $(BUILD_DIR) - - +SIM_MODEL_PROPERTIES = "" -- cgit v1.2.3 From 8db1a3901972745dfab310be77c409a82b63e941 Mon Sep 17 00:00:00 2001 From: Matt Ettus Date: Thu, 9 Sep 2010 11:24:58 -0700 Subject: pins are different on rev2 --- usrp2/top/u1e_passthru/passthru.ucf | 268 +----------------------------------- 1 file changed, 4 insertions(+), 264 deletions(-) diff --git a/usrp2/top/u1e_passthru/passthru.ucf b/usrp2/top/u1e_passthru/passthru.ucf index fcfce61b2..64e6f0440 100644 --- a/usrp2/top/u1e_passthru/passthru.ucf +++ b/usrp2/top/u1e_passthru/passthru.ucf @@ -1,266 +1,6 @@ - -#NET "CLK_FPGA_P" LOC = "Y11" ; -#NET "CLK_FPGA_N" LOC = "Y10" ; - -## GPMC -#NET "EM_D<15>" LOC = "D13" ; -#NET "EM_D<14>" LOC = "D15" ; -#NET "EM_D<13>" LOC = "C16" ; -#NET "EM_D<12>" LOC = "B20" ; -#NET "EM_D<11>" LOC = "A19" ; -#NET "EM_D<10>" LOC = "A17" ; -#NET "EM_D<9>" LOC = "E15" ; -#NET "EM_D<8>" LOC = "F15" ; -#NET "EM_D<7>" LOC = "E16" ; -#NET "EM_D<6>" LOC = "F16" ; -#NET "EM_D<5>" LOC = "B17" ; -#NET "EM_D<4>" LOC = "C17" ; -#NET "EM_D<3>" LOC = "B19" ; -#NET "EM_D<2>" LOC = "D19" ; -#NET "EM_D<1>" LOC = "C19" ; -#NET "EM_D<0>" LOC = "A20" ; - -#NET "EM_A<10>" LOC = "C14" ; -#NET "EM_A<9>" LOC = "C10" ; -#NET "EM_A<8>" LOC = "C5" ; -#NET "EM_A<7>" LOC = "A18" ; -#NET "EM_A<6>" LOC = "A15" ; -#NET "EM_A<5>" LOC = "A12" ; -#NET "EM_A<4>" LOC = "A10" ; -#NET "EM_A<3>" LOC = "E7" ; -#NET "EM_A<2>" LOC = "A7" ; -#NET "EM_A<1>" LOC = "C15" ; - -#NET "EM_NCS6" LOC = "E17" ; -##NET "EM_NCS5" LOC = "E10" ; -#NET "EM_NCS4" LOC = "E6" ; -##NET "EM_NCS1" LOC = "D18" ; -##NET "EM_NCS0" LOC = "D17" ; - -#NET "EM_CLK" LOC = "F11" ; -#NET "EM_WAIT0" LOC = "F14" ; -#NET "EM_NBE<1>" LOC = "D14" ; -#NET "EM_NBE<0>" LOC = "A13" ; -#NET "EM_NWE" LOC = "B13" ; -#NET "EM_NOE" LOC = "A14" ; -##NET "EM_NADV_ALE" LOC = "B15" ; -##NET "EM_NWP" LOC = "F13" ; - -## Overo GPIO -#NET "overo_gpio0" LOC = "F9" ; # MISC GPIO for debug -#NET "overo_gpio14" LOC = "C4" ; # MISC GPIO for debug -#NET "overo_gpio21" LOC = "D5" ; # MISC GPIO for debug -#NET "overo_gpio22" LOC = "A3" ; # MISC GPIO for debug -#NET "overo_gpio23" LOC = "B3" ; # MISC GPIO for debug -#NET "overo_gpio64" LOC = "A4" ; # MISC GPIO for debug -#NET "overo_gpio65" LOC = "F8" ; # MISC GPIO for debug -#NET "overo_gpio127" LOC = "C8" ; # passed through as cgen_sen_b -#NET "overo_gpio128" LOC = "G8" ; # MISC GPIO for debug -#NET "overo_gpio144" LOC = "A5" ; # tx_have_space -NET "overo_gpio145" LOC = "C7" ; # tx_underrun -#NET "overo_gpio146" LOC = "A6" ; # rx_have_data -#NET "overo_gpio147" LOC = "B6" ; # rx_overrun -#NET "overo_gpio163" LOC = "D7" ; # MISC GPIO for debug -#NET "overo_gpio170" LOC = "E8" ; # MISC GPIO for debug -#NET "overo_gpio176" LOC = "B4" ; # MISC GPIO for debug - -## Overo UART -##NET "overo_txd1" LOC = "C6" ; -##NET "overo_rxd1" LOC = "D6" ; - -## FTDI UART to USB converter -#NET "FPGA_TXD" LOC = "U1" ; -#NET "FPGA_RXD" LOC = "T6" ; - -##NET "SYSEN" LOC = "C11" ; - -## I2C -#NET "db_scl" LOC = "U4" ; -#NET "db_sda" LOC = "U5" ; - -## SPI -### DBoard SPI -#NET "db_sclk_rx" LOC = "W3" ; -#NET "db_miso_rx" LOC = "W2" ; -#NET "db_mosi_rx" LOC = "V4" ; -#NET "db_sen_rx" LOC = "V3" ; -#NET "db_sclk_tx" LOC = "Y1" ; -#NET "db_miso_tx" LOC = "W1" ; -#NET "db_mosi_tx" LOC = "R3" ; -#NET "db_sen_tx" LOC = "T4" ; - -### AD9862 SPI and aux SPI Interfaces -##NET "aux_sdi_codec" LOC = "F19" ; -##NET "aux_sdo_codec" LOC = "F18" ; -##NET "aux_sclk_codec" LOC = "D21" ; -#NET "sen_codec" LOC = "D20" ; -#NET "mosi_codec" LOC = "E19" ; -#NET "miso_codec" LOC = "F21" ; -#NET "sclk_codec" LOC = "E20" ; - -### Clock Gen SPI -#NET "cgen_miso" LOC = "U2" ; -NET "cgen_mosi" LOC = "V1" ; -NET "cgen_sclk" LOC = "R5" ; -NET "cgen_sen_b" LOC = "T1" ; - -## Clock gen control -#NET "cgen_st_status" LOC = "D4" ; -#NET "cgen_st_ld" LOC = "D1" ; -#NET "cgen_st_refmon" LOC = "E1" ; -#NET "cgen_sync_b" LOC = "M1" ; -#NET "cgen_ref_sel" LOC = "J1" ; - -## Debug pins -#NET "debug_led<2>" LOC = "T5" ; -#NET "debug_led<1>" LOC = "R2" ; -#NET "debug_led<0>" LOC = "R1" ; -#NET "debug<0>" LOC = "P6" ; -#NET "debug<1>" LOC = "R6" ; -#NET "debug<2>" LOC = "P1" ; -#NET "debug<3>" LOC = "P2" ; -#NET "debug<4>" LOC = "N6" ; -#NET "debug<5>" LOC = "N5" ; -#NET "debug<6>" LOC = "N1" ; -#NET "debug<7>" LOC = "K2" ; -#NET "debug<8>" LOC = "K3" ; -#NET "debug<9>" LOC = "K6" ; -#NET "debug<10>" LOC = "L5" ; -#NET "debug<11>" LOC = "H2" ; -#NET "debug<12>" LOC = "K4" ; -#NET "debug<13>" LOC = "K5" ; -#NET "debug<14>" LOC = "G1" ; -#NET "debug<15>" LOC = "H1" ; -#NET "debug<16>" LOC = "H5" ; -#NET "debug<17>" LOC = "H6" ; -#NET "debug<18>" LOC = "E3" ; -#NET "debug<19>" LOC = "E4" ; -#NET "debug<20>" LOC = "G5" ; -#NET "debug<21>" LOC = "G6" ; -#NET "debug<22>" LOC = "F2" ; -#NET "debug<23>" LOC = "F1" ; -#NET "debug<24>" LOC = "H3" ; -#NET "debug<25>" LOC = "H4" ; -#NET "debug<26>" LOC = "F4" ; -#NET "debug<27>" LOC = "F5" ; -#NET "debug<28>" LOC = "C2" ; -#NET "debug<29>" LOC = "C1" ; -#NET "debug<30>" LOC = "F3" ; -#NET "debug<31>" LOC = "G3" ; -#NET "debug_clk<0>" LOC = "L6" ; -#NET "debug_clk<1>" LOC = "M5" ; - -#NET "debug_pb<2>" LOC = "Y2" ; -#NET "debug_pb<1>" LOC = "AA1" ; -#NET "debug_pb<0>" LOC = "N3" ; - -#NET "dip_sw<7>" LOC = "T3" ; -#NET "dip_sw<6>" LOC = "U3" ; -#NET "dip_sw<5>" LOC = "M3" ; -#NET "dip_sw<4>" LOC = "N4" ; -#NET "dip_sw<3>" LOC = "J3" ; -#NET "dip_sw<2>" LOC = "J4" ; -#NET "dip_sw<1>" LOC = "J6" ; -#NET "dip_sw<0>" LOC = "J7" ; - -##NET "RXSYNC" LOC = "F22" ; -##NET "reset_codec" LOC = "D22" ; - -##NET "DB<11>" LOC = "E22" ; -##NET "DB<10>" LOC = "J19" ; -##NET "DB<9>" LOC = "H20" ; -##NET "DB<8>" LOC = "G19" ; -##NET "DB<7>" LOC = "F20" ; -##NET "DB<6>" LOC = "K16" ; -##NET "DB<5>" LOC = "J17" ; -##NET "DB<4>" LOC = "H22" ; -##NET "DB<3>" LOC = "G22" ; -##NET "DB<2>" LOC = "H17" ; -##NET "DB<1>" LOC = "H18" ; -##NET "DB<0>" LOC = "K20" ; -##NET "DA<11>" LOC = "J20" ; -##NET "DA<10>" LOC = "K19" ; -##NET "DA<9>" LOC = "K18" ; -##NET "DA<8>" LOC = "L22" ; -##NET "DA<7>" LOC = "K22" ; -##NET "DA<6>" LOC = "N22" ; -##NET "DA<5>" LOC = "M22" ; -##NET "DA<4>" LOC = "N20" ; -##NET "DA<3>" LOC = "N19" ; -##NET "DA<2>" LOC = "R22" ; -##NET "DA<1>" LOC = "P22" ; -##NET "DA<0>" LOC = "N17" ; - -#NET "TX<13>" LOC = "P19" ; -#NET "TX<12>" LOC = "R18" ; -#NET "TX<11>" LOC = "U20" ; -#NET "TX<10>" LOC = "T20" ; -#NET "TX<9>" LOC = "R19" ; -#NET "TX<8>" LOC = "R20" ; -#NET "TX<7>" LOC = "W22" ; -#NET "TX<6>" LOC = "Y22" ; -#NET "TX<5>" LOC = "T18" ; -#NET "TX<4>" LOC = "T17" ; -#NET "TX<3>" LOC = "W19" ; -#NET "TX<2>" LOC = "V20" ; -#NET "TX<1>" LOC = "Y21" ; -#NET "TX<0>" LOC = "AA22" ; -#NET "TXSYNC" LOC = "U18" ; -#NET "TXBLANK" LOC = "U19" ; - -#NET "PPS_IN" LOC = "M17" ; - -#NET "io_tx<0>" LOC = "AB20" ; -#NET "io_tx<1>" LOC = "Y17" ; -#NET "io_tx<2>" LOC = "Y16" ; -#NET "io_tx<3>" LOC = "U16" ; -#NET "io_tx<4>" LOC = "V16" ; -#NET "io_tx<5>" LOC = "AB19" ; -#NET "io_tx<6>" LOC = "AA19" ; -#NET "io_tx<7>" LOC = "U14" ; -#NET "io_tx<8>" LOC = "U15" ; -#NET "io_tx<9>" LOC = "AB17" ; -#NET "io_tx<10>" LOC = "AB18" ; -#NET "io_tx<11>" LOC = "Y13" ; -#NET "io_tx<12>" LOC = "W14" ; -#NET "io_tx<13>" LOC = "U13" ; -#NET "io_tx<14>" LOC = "AA15" ; -#NET "io_tx<15>" LOC = "AB14" ; - -#NET "io_rx<0>" LOC = "Y8" ; -#NET "io_rx<1>" LOC = "Y9" ; -#NET "io_rx<2>" LOC = "V7" ; -#NET "io_rx<3>" LOC = "U8" ; -#NET "io_rx<4>" LOC = "V10" ; -#NET "io_rx<5>" LOC = "U9" ; -#NET "io_rx<6>" LOC = "AB7" ; -#NET "io_rx<7>" LOC = "AA8" ; -#NET "io_rx<8>" LOC = "W8" ; -#NET "io_rx<9>" LOC = "V8" ; -#NET "io_rx<10>" LOC = "AB5" ; -#NET "io_rx<11>" LOC = "AB6" ; -#NET "io_rx<12>" LOC = "AB4" ; -#NET "io_rx<13>" LOC = "AA4" ; -#NET "io_rx<14>" LOC = "W5" ; -#NET "io_rx<15>" LOC = "Y4" ; - -##NET "CLKOUT2_CODEC" LOC = "U12" ; -##NET "CLKOUT1_CODEC" LOC = "V12" ; - -## FPGA Config Pins -##NET "fpga_cfg_prog_b" LOC = "A2" ; -##NET "fpga_cfg_done" LOC = "AB21" ; +NET "overo_gpio145" LOC = "C7" ; +NET "cgen_mosi" LOC = "E22" ; +NET "cgen_sclk" LOC = "J19" ; +NET "cgen_sen_b" LOC = "H20" ; NET "fpga_cfg_din" LOC = "W17" ; NET "fpga_cfg_cclk" LOC = "V17" ; -##NET "fpga_cfg_init_b" LOC = "W15" ; - -## Unused -##NET "unnamed_net37" LOC = "B1" ; # TMS -##NET "unnamed_net36" LOC = "B22" ; # TDO -##NET "unnamed_net35" LOC = "D2" ; # TDI -##NET "unnamed_net34" LOC = "A21" ; # TCK -##NET "unnamed_net45" LOC = "F7" ; # PUDC_B -##NET "unnamed_net44" LOC = "V6" ; # M2 -##NET "unnamed_net43" LOC = "AA3" ; # M1 -##NET "unnamed_net42" LOC = "AB3" ; # M0 -##NET "GND" LOC = "V19" ; # Suspend, unused -- cgit v1.2.3 From 08eb9d2937c28edfb6d1fe7fb168ef77727406d5 Mon Sep 17 00:00:00 2001 From: Matt Ettus Date: Thu, 9 Sep 2010 14:19:14 -0700 Subject: updated pins to match rev2, removed dip switch, etc. seems to compile ok. --- usrp2/top/u1e/u1e.ucf | 251 +++++++++++++++++++++++------------------------ usrp2/top/u1e/u1e.v | 8 +- usrp2/top/u1e/u1e_core.v | 8 +- 3 files changed, 130 insertions(+), 137 deletions(-) diff --git a/usrp2/top/u1e/u1e.ucf b/usrp2/top/u1e/u1e.ucf index 659a9dce5..51968d24a 100644 --- a/usrp2/top/u1e/u1e.ucf +++ b/usrp2/top/u1e/u1e.ucf @@ -54,8 +54,10 @@ NET "overo_gpio22" LOC = "A3" ; # MISC GPIO for debug NET "overo_gpio23" LOC = "B3" ; # MISC GPIO for debug NET "overo_gpio64" LOC = "A4" ; # MISC GPIO for debug NET "overo_gpio65" LOC = "F8" ; # MISC GPIO for debug -NET "overo_gpio127" LOC = "C8" ; # MISC GPIO for debug, also used on the passthru image as the cgen_sen_b pin -NET "overo_gpio128" LOC = "G8" ; # MISC GPIO for debug + +NET "overo_gpio127" LOC = "C8" ; # Changed name to gpio10 +NET "overo_gpio128" LOC = "G8" ; # Changed name to gpio186 + NET "overo_gpio144" LOC = "A5" ; # tx_have_space NET "overo_gpio145" LOC = "C7" ; # tx_underrun NET "overo_gpio146" LOC = "A6" ; # rx_have_data @@ -69,146 +71,137 @@ NET "overo_gpio176" LOC = "B4" ; # MISC GPIO for debug #NET "overo_rxd1" LOC = "D6" ; ## FTDI UART to USB converter -NET "FPGA_TXD" LOC = "U1" ; -NET "FPGA_RXD" LOC = "T6" ; +NET "FPGA_TXD" LOC = "G19" ; +NET "FPGA_RXD" LOC = "F20" ; #NET "SYSEN" LOC = "C11" ; ## I2C -NET "db_scl" LOC = "U4" ; -NET "db_sda" LOC = "U5" ; +NET "db_scl" LOC = "F19" ; +NET "db_sda" LOC = "F18" ; ## SPI ### DBoard SPI -NET "db_sclk_rx" LOC = "W3" ; -NET "db_miso_rx" LOC = "W2" ; -NET "db_mosi_rx" LOC = "V4" ; -NET "db_sen_rx" LOC = "V3" ; -NET "db_sclk_tx" LOC = "Y1" ; -NET "db_miso_tx" LOC = "W1" ; -NET "db_mosi_tx" LOC = "R3" ; -NET "db_sen_tx" LOC = "T4" ; +NET "db_sclk_rx" LOC = "D21" ; +NET "db_miso_rx" LOC = "D22" ; +NET "db_mosi_rx" LOC = "D20" ; +NET "db_sen_rx" LOC = "E19" ; +NET "db_sclk_tx" LOC = "F21" ; +NET "db_miso_tx" LOC = "E20" ; +NET "db_mosi_tx" LOC = "G17" ; +NET "db_sen_tx" LOC = "G18" ; ### AD9862 SPI and aux SPI Interfaces -#NET "aux_sdi_codec" LOC = "F19" ; -#NET "aux_sdo_codec" LOC = "F18" ; -#NET "aux_sclk_codec" LOC = "D21" ; -NET "sen_codec" LOC = "D20" ; -NET "mosi_codec" LOC = "E19" ; -NET "miso_codec" LOC = "F21" ; -NET "sclk_codec" LOC = "E20" ; +#NET "aux_sdi_codec" LOC = "G3" ; +#NET "aux_sdo_codec" LOC = "F3" ; +#NET "aux_sclk_codec" LOC = "C1" ; +NET "sen_codec" LOC = "F5" ; +NET "mosi_codec" LOC = "F4" ; +NET "miso_codec" LOC = "H4" ; +NET "sclk_codec" LOC = "H3" ; ### Clock Gen SPI -NET "cgen_miso" LOC = "U2" ; -NET "cgen_mosi" LOC = "V1" ; -NET "cgen_sclk" LOC = "R5" ; -NET "cgen_sen_b" LOC = "T1" ; +NET "cgen_miso" LOC = "F22" ; +NET "cgen_mosi" LOC = "E22" ; +NET "cgen_sclk" LOC = "J19" ; +NET "cgen_sen_b" LOC = "H20" ; ## Clock gen control -NET "cgen_st_status" LOC = "D4" ; -NET "cgen_st_ld" LOC = "D1" ; -NET "cgen_st_refmon" LOC = "E1" ; -NET "cgen_sync_b" LOC = "M1" ; -NET "cgen_ref_sel" LOC = "J1" ; +NET "cgen_st_status" LOC = "P20" ; +NET "cgen_st_ld" LOC = "R17" ; +NET "cgen_st_refmon" LOC = "P17" ; +NET "cgen_sync_b" LOC = "U18" ; +NET "cgen_ref_sel" LOC = "U19" ; ## Debug pins -NET "debug_led<2>" LOC = "T5" ; -NET "debug_led<1>" LOC = "R2" ; -NET "debug_led<0>" LOC = "R1" ; -NET "debug<0>" LOC = "P6" ; -NET "debug<1>" LOC = "R6" ; -NET "debug<2>" LOC = "P1" ; -NET "debug<3>" LOC = "P2" ; -NET "debug<4>" LOC = "N6" ; -NET "debug<5>" LOC = "N5" ; -NET "debug<6>" LOC = "N1" ; -NET "debug<7>" LOC = "K2" ; -NET "debug<8>" LOC = "K3" ; -NET "debug<9>" LOC = "K6" ; -NET "debug<10>" LOC = "L5" ; -NET "debug<11>" LOC = "H2" ; -NET "debug<12>" LOC = "K4" ; -NET "debug<13>" LOC = "K5" ; -NET "debug<14>" LOC = "G1" ; -NET "debug<15>" LOC = "H1" ; -NET "debug<16>" LOC = "H5" ; -NET "debug<17>" LOC = "H6" ; -NET "debug<18>" LOC = "E3" ; -NET "debug<19>" LOC = "E4" ; -NET "debug<20>" LOC = "G5" ; -NET "debug<21>" LOC = "G6" ; -NET "debug<22>" LOC = "F2" ; -NET "debug<23>" LOC = "F1" ; -NET "debug<24>" LOC = "H3" ; -NET "debug<25>" LOC = "H4" ; -NET "debug<26>" LOC = "F4" ; -NET "debug<27>" LOC = "F5" ; -NET "debug<28>" LOC = "C2" ; -NET "debug<29>" LOC = "C1" ; -NET "debug<30>" LOC = "F3" ; -NET "debug<31>" LOC = "G3" ; -NET "debug_clk<0>" LOC = "L6" ; -NET "debug_clk<1>" LOC = "M5" ; +NET "debug_led<3>" LOC = "Y15" ; +NET "debug_led<2>" LOC = "K16" ; +NET "debug_led<1>" LOC = "J17" ; +NET "debug_led<0>" LOC = "H22" ; +NET "debug<0>" LOC = "G22" ; +NET "debug<1>" LOC = "H17" ; +NET "debug<2>" LOC = "H18" ; +NET "debug<3>" LOC = "K20" ; +NET "debug<4>" LOC = "J20" ; +NET "debug<5>" LOC = "K19" ; +NET "debug<6>" LOC = "K18" ; +NET "debug<7>" LOC = "L22" ; +NET "debug<8>" LOC = "K22" ; +NET "debug<9>" LOC = "N22" ; +NET "debug<10>" LOC = "M22" ; +NET "debug<11>" LOC = "N20" ; +NET "debug<12>" LOC = "N19" ; +NET "debug<13>" LOC = "R22" ; +NET "debug<14>" LOC = "P22" ; +NET "debug<15>" LOC = "N17" ; +NET "debug<16>" LOC = "P16" ; +NET "debug<17>" LOC = "U22" ; +NET "debug<18>" LOC = "P19" ; +NET "debug<19>" LOC = "R18" ; +NET "debug<20>" LOC = "U20" ; +NET "debug<21>" LOC = "T20" ; +NET "debug<22>" LOC = "R19" ; +NET "debug<23>" LOC = "R20" ; +NET "debug<24>" LOC = "W22" ; +NET "debug<25>" LOC = "Y22" ; +NET "debug<26>" LOC = "T18" ; +NET "debug<27>" LOC = "T17" ; +NET "debug<28>" LOC = "W19" ; +NET "debug<29>" LOC = "V20" ; +NET "debug<30>" LOC = "Y21" ; +NET "debug<31>" LOC = "AA22" ; +NET "debug_clk<0>" LOC = "N18" ; +NET "debug_clk<1>" LOC = "M17" ; -NET "debug_pb<2>" LOC = "Y2" ; -NET "debug_pb<1>" LOC = "AA1" ; -NET "debug_pb<0>" LOC = "N3" ; +NET "debug_pb" LOC = "C22" ; -NET "dip_sw<7>" LOC = "T3" ; -NET "dip_sw<6>" LOC = "U3" ; -NET "dip_sw<5>" LOC = "M3" ; -NET "dip_sw<4>" LOC = "N4" ; -NET "dip_sw<3>" LOC = "J3" ; -NET "dip_sw<2>" LOC = "J4" ; -NET "dip_sw<1>" LOC = "J6" ; -NET "dip_sw<0>" LOC = "J7" ; +#NET "reset_codec" LOC = "C2" ; -#NET "reset_codec" LOC = "D22" ; +NET "RXSYNC" LOC = "F2" ; +NET "DB<11>" LOC = "G6" ; +NET "DB<10>" LOC = "G5" ; +NET "DB<9>" LOC = "E4" ; +NET "DB<8>" LOC = "E3" ; +NET "DB<7>" LOC = "H6" ; +NET "DB<6>" LOC = "H5" ; +NET "DB<5>" LOC = "H1" ; +NET "DB<4>" LOC = "G1" ; +NET "DB<3>" LOC = "K5" ; +NET "DB<2>" LOC = "K4" ; +NET "DB<1>" LOC = "H2" ; +NET "DB<0>" LOC = "L5" ; -NET "RXSYNC" LOC = "F22" ; -NET "DB<11>" LOC = "E22" ; -NET "DB<10>" LOC = "J19" ; -NET "DB<9>" LOC = "H20" ; -NET "DB<8>" LOC = "G19" ; -NET "DB<7>" LOC = "F20" ; -NET "DB<6>" LOC = "K16" ; -NET "DB<5>" LOC = "J17" ; -NET "DB<4>" LOC = "H22" ; -NET "DB<3>" LOC = "G22" ; -NET "DB<2>" LOC = "H17" ; -NET "DB<1>" LOC = "H18" ; -NET "DB<0>" LOC = "K20" ; -NET "DA<11>" LOC = "J20" ; -NET "DA<10>" LOC = "K19" ; -NET "DA<9>" LOC = "K18" ; -NET "DA<8>" LOC = "L22" ; -NET "DA<7>" LOC = "K22" ; -NET "DA<6>" LOC = "N22" ; -NET "DA<5>" LOC = "M22" ; -NET "DA<4>" LOC = "N20" ; -NET "DA<3>" LOC = "N19" ; -NET "DA<2>" LOC = "R22" ; -NET "DA<1>" LOC = "P22" ; -NET "DA<0>" LOC = "N17" ; +NET "DA<11>" LOC = "K6" ; +NET "DA<10>" LOC = "K3" ; +NET "DA<9>" LOC = "K2" ; +NET "DA<8>" LOC = "N1" ; +NET "DA<7>" LOC = "N5" ; +NET "DA<6>" LOC = "N6" ; +NET "DA<5>" LOC = "P2" ; +NET "DA<4>" LOC = "P1" ; +NET "DA<3>" LOC = "R6" ; +NET "DA<2>" LOC = "P6" ; +NET "DA<1>" LOC = "R1" ; +NET "DA<0>" LOC = "R2" ; -NET "TX<13>" LOC = "P19" ; -NET "TX<12>" LOC = "R18" ; -NET "TX<11>" LOC = "U20" ; -NET "TX<10>" LOC = "T20" ; -NET "TX<9>" LOC = "R19" ; -NET "TX<8>" LOC = "R20" ; -NET "TX<7>" LOC = "W22" ; -NET "TX<6>" LOC = "Y22" ; -NET "TX<5>" LOC = "T18" ; -NET "TX<4>" LOC = "T17" ; -NET "TX<3>" LOC = "W19" ; -NET "TX<2>" LOC = "V20" ; -NET "TX<1>" LOC = "Y21" ; -NET "TX<0>" LOC = "AA22" ; -NET "TXSYNC" LOC = "U18" ; -NET "TXBLANK" LOC = "U19" ; +NET "TX<13>" LOC = "T6" ; +NET "TX<12>" LOC = "U1" ; +NET "TX<11>" LOC = "T1" ; +NET "TX<10>" LOC = "R5" ; +NET "TX<9>" LOC = "V1" ; +NET "TX<8>" LOC = "U2" ; +NET "TX<7>" LOC = "T4" ; +NET "TX<6>" LOC = "R3" ; +NET "TX<5>" LOC = "W1" ; +NET "TX<4>" LOC = "Y1" ; +NET "TX<3>" LOC = "V3" ; +NET "TX<2>" LOC = "V4" ; +NET "TX<1>" LOC = "W2" ; +NET "TX<0>" LOC = "W3" ; +NET "TXSYNC" LOC = "U5" ; +NET "TXBLANK" LOC = "U4" ; -NET "PPS_IN" LOC = "M17" ; +NET "PPS_IN" LOC = "M5" ; NET "io_tx<0>" LOC = "AB20" ; NET "io_tx<1>" LOC = "Y17" ; @@ -255,12 +248,12 @@ NET "io_rx<15>" LOC = "Y4" ; #NET "fpga_cfg_init_b" LOC = "W15" ; ## Unused -#NET "unnamed_net37" LOC = "B1" ; # TMS -#NET "unnamed_net36" LOC = "B22" ; # TDO -#NET "unnamed_net35" LOC = "D2" ; # TDI -#NET "unnamed_net34" LOC = "A21" ; # TCK -#NET "unnamed_net45" LOC = "F7" ; # PUDC_B -#NET "unnamed_net44" LOC = "V6" ; # M2 -#NET "unnamed_net43" LOC = "AA3" ; # M1 -#NET "unnamed_net42" LOC = "AB3" ; # M0 +#NET "unnamed_net53" LOC = "B1" ; # TMS +#NET "unnamed_net52" LOC = "B22" ; # TDO +#NET "unnamed_net51" LOC = "D2" ; # TDI +#NET "unnamed_net50" LOC = "A21" ; # TCK +#NET "unnamed_net59" LOC = "F7" ; # PUDC_B +#NET "unnamed_net58" LOC = "V6" ; # M2 +#NET "unnamed_net57" LOC = "AA3" ; # M1 +#NET "unnamed_net56" LOC = "AB3" ; # M0 #NET "GND" LOC = "V19" ; # Suspend, unused diff --git a/usrp2/top/u1e/u1e.v b/usrp2/top/u1e/u1e.v index 9536b5ced..7ddbfd537 100644 --- a/usrp2/top/u1e/u1e.v +++ b/usrp2/top/u1e/u1e.v @@ -5,8 +5,8 @@ module u1e (input CLK_FPGA_P, input CLK_FPGA_N, // Diff - output [2:0] debug_led, output [31:0] debug, output [1:0] debug_clk, - input [2:0] debug_pb, input [7:0] dip_sw, output FPGA_TXD, input FPGA_RXD, + output [3:0] debug_led, output [31:0] debug, output [1:0] debug_clk, + input debug_pb, output FPGA_TXD, input FPGA_RXD, // GPMC input EM_CLK, inout [15:0] EM_D, input [10:1] EM_A, input [1:0] EM_NBE, @@ -137,9 +137,9 @@ module u1e // ///////////////////////////////////////////////////////////////////////// // Main U1E Core - u1e_core u1e_core(.clk_fpga(clk_fpga), .rst_fpga(~debug_pb[2]), + u1e_core u1e_core(.clk_fpga(clk_fpga), .rst_fpga(~debug_pb), .debug_led(debug_led), .debug(debug), .debug_clk(debug_clk), - .debug_pb(~debug_pb), .dip_sw(dip_sw), .debug_txd(FPGA_TXD), .debug_rxd(FPGA_RXD), + .debug_txd(FPGA_TXD), .debug_rxd(FPGA_RXD), .EM_CLK(EM_CLK), .EM_D(EM_D), .EM_A(EM_A), .EM_NBE(EM_NBE), .EM_WAIT0(EM_WAIT0), .EM_NCS4(EM_NCS4), .EM_NCS6(EM_NCS6), .EM_NWE(EM_NWE), .EM_NOE(EM_NOE), diff --git a/usrp2/top/u1e/u1e_core.v b/usrp2/top/u1e/u1e_core.v index 5c4b6de6c..42333a722 100644 --- a/usrp2/top/u1e/u1e_core.v +++ b/usrp2/top/u1e/u1e_core.v @@ -6,8 +6,8 @@ module u1e_core (input clk_fpga, input rst_fpga, - output [2:0] debug_led, output [31:0] debug, output [1:0] debug_clk, - input [2:0] debug_pb, input [7:0] dip_sw, output debug_txd, input debug_rxd, + output [3:0] debug_led, output [31:0] debug, output [1:0] debug_clk, + output debug_txd, input debug_rxd, // GPMC input EM_CLK, inout [15:0] EM_D, input [10:1] EM_A, input [1:0] EM_NBE, @@ -343,11 +343,11 @@ module u1e_core assign rx_enable = xfer_rate[14]; assign rate = xfer_rate[7:0]; - assign { debug_led[2],debug_led[0],debug_led[1] } = {run_rx,run_tx,reg_leds[0]}; // LEDs are arranged funny on board + assign { debug_led[3:0] } = {run_rx,run_tx,reg_leds[1:0]}; assign { cgen_sync_b, cgen_ref_sel } = reg_cgen_ctrl; assign s0_dat_miso = (s0_adr[6:0] == REG_LEDS) ? reg_leds : - (s0_adr[6:0] == REG_SWITCHES) ? {5'b0,debug_pb[2:0],dip_sw[7:0]} : + (s0_adr[6:0] == REG_SWITCHES) ? { 16'd0 } : (s0_adr[6:0] == REG_CGEN_CTRL) ? reg_cgen_ctrl : (s0_adr[6:0] == REG_CGEN_ST) ? {13'b0,cgen_st_status,cgen_st_ld,cgen_st_refmon} : (s0_adr[6:0] == REG_TEST) ? reg_test : -- cgit v1.2.3 From f177ce94fb4d4d2bdb19339c24bf5dc6035f1411 Mon Sep 17 00:00:00 2001 From: Matt Ettus Date: Thu, 16 Sep 2010 14:01:43 -0700 Subject: send all gpmc signals to mictor --- usrp2/top/u1e_ethdebug/.gitignore | 6 +++ usrp2/top/u1e_ethdebug/Makefile | 83 +++++++++++++++++++++++++++++++++++++ usrp2/top/u1e_ethdebug/u1e.ucf | 86 +++++++++++++++++++++++++++++++++++++++ usrp2/top/u1e_ethdebug/u1e.v | 26 ++++++++++++ 4 files changed, 201 insertions(+) create mode 100644 usrp2/top/u1e_ethdebug/.gitignore create mode 100644 usrp2/top/u1e_ethdebug/Makefile create mode 100644 usrp2/top/u1e_ethdebug/u1e.ucf create mode 100644 usrp2/top/u1e_ethdebug/u1e.v diff --git a/usrp2/top/u1e_ethdebug/.gitignore b/usrp2/top/u1e_ethdebug/.gitignore new file mode 100644 index 000000000..8d872713e --- /dev/null +++ b/usrp2/top/u1e_ethdebug/.gitignore @@ -0,0 +1,6 @@ +*~ +build +*.log +*.cmd +tb_u1e +*.lxt diff --git a/usrp2/top/u1e_ethdebug/Makefile b/usrp2/top/u1e_ethdebug/Makefile new file mode 100644 index 000000000..751b52970 --- /dev/null +++ b/usrp2/top/u1e_ethdebug/Makefile @@ -0,0 +1,83 @@ +# +# Copyright 2008 Ettus Research LLC +# + +################################################## +# Project Setup +################################################## +TOP_MODULE = u1e +BUILD_DIR = $(abspath build$(ISE)) + +################################################## +# Include other makefiles +################################################## + +include ../Makefile.common + +################################################## +# Project Properties +################################################## +export PROJECT_PROPERTIES := \ +family "Spartan-3A DSP" \ +device xc3sd1800a \ +package cs484 \ +speed -4 \ +top_level_module_type "HDL" \ +synthesis_tool "XST (VHDL/Verilog)" \ +simulator "ISE Simulator (VHDL/Verilog)" \ +"Preferred Language" "Verilog" \ +"Enable Message Filtering" FALSE \ +"Display Incremental Messages" FALSE + +################################################## +# Sources +################################################## +TOP_SRCS = \ +u1e.v \ +u1e.ucf + +SOURCES = $(abspath $(TOP_SRCS)) + +################################################## +# Process Properties +################################################## +SYNTHESIZE_PROPERTIES = \ +"Number of Clock Buffers" 8 \ +"Pack I/O Registers into IOBs" Yes \ +"Optimization Effort" High \ +"Optimize Instantiated Primitives" TRUE \ +"Register Balancing" Yes \ +"Use Clock Enable" Auto \ +"Use Synchronous Reset" Auto \ +"Use Synchronous Set" Auto + +TRANSLATE_PROPERTIES = \ +"Macro Search Path" "$(shell pwd)/../../coregen/" + +MAP_PROPERTIES = \ +"Allow Logic Optimization Across Hierarchy" TRUE \ +"Map to Input Functions" 4 \ +"Optimization Strategy (Cover Mode)" Speed \ +"Pack I/O Registers/Latches into IOBs" "For Inputs and Outputs" \ +"Perform Timing-Driven Packing and Placement" TRUE \ +"Map Effort Level" High \ +"Extra Effort" Normal \ +"Combinatorial Logic Optimization" TRUE \ +"Register Duplication" TRUE + +PLACE_ROUTE_PROPERTIES = \ +"Place & Route Effort Level (Overall)" High + +STATIC_TIMING_PROPERTIES = \ +"Number of Paths in Error/Verbose Report" 10 \ +"Report Type" "Error Report" + +GEN_PROG_FILE_PROPERTIES = \ +"Configuration Rate" 6 \ +"Create Binary Configuration File" TRUE \ +"Done (Output Events)" 5 \ +"Enable Bitstream Compression" TRUE \ +"Enable Outputs (Output Events)" 6 \ +"Unused IOB Pins" "Pull Up" + +SIM_MODEL_PROPERTIES = "" diff --git a/usrp2/top/u1e_ethdebug/u1e.ucf b/usrp2/top/u1e_ethdebug/u1e.ucf new file mode 100644 index 000000000..0d4384a2a --- /dev/null +++ b/usrp2/top/u1e_ethdebug/u1e.ucf @@ -0,0 +1,86 @@ + +## GPMC +NET "EM_D<15>" LOC = "D13" ; +NET "EM_D<14>" LOC = "D15" ; +NET "EM_D<13>" LOC = "C16" ; +NET "EM_D<12>" LOC = "B20" ; +NET "EM_D<11>" LOC = "A19" ; +NET "EM_D<10>" LOC = "A17" ; +NET "EM_D<9>" LOC = "E15" ; +NET "EM_D<8>" LOC = "F15" ; +NET "EM_D<7>" LOC = "E16" ; +NET "EM_D<6>" LOC = "F16" ; +NET "EM_D<5>" LOC = "B17" ; +NET "EM_D<4>" LOC = "C17" ; +NET "EM_D<3>" LOC = "B19" ; +NET "EM_D<2>" LOC = "D19" ; +NET "EM_D<1>" LOC = "C19" ; +NET "EM_D<0>" LOC = "A20" ; + +NET "EM_A<10>" LOC = "C14" ; +NET "EM_A<9>" LOC = "C10" ; +NET "EM_A<8>" LOC = "C5" ; +NET "EM_A<7>" LOC = "A18" ; +NET "EM_A<6>" LOC = "A15" ; +NET "EM_A<5>" LOC = "A12" ; +NET "EM_A<4>" LOC = "A10" ; +NET "EM_A<3>" LOC = "E7" ; +NET "EM_A<2>" LOC = "A7" ; +NET "EM_A<1>" LOC = "C15" ; + +NET "EM_NCS6" LOC = "E17" ; +NET "EM_NCS5" LOC = "E10" ; +NET "EM_NCS4" LOC = "E6" ; +#NET "EM_NCS1" LOC = "D18" ; +#NET "EM_NCS0" LOC = "D17" ; + +NET "EM_CLK" LOC = "F11" ; +NET "EM_WAIT0" LOC = "F14" ; +NET "EM_NBE<1>" LOC = "D14" ; +NET "EM_NBE<0>" LOC = "A13" ; +NET "EM_NWE" LOC = "B13" ; +NET "EM_NOE" LOC = "A14" ; +NET "EM_NADV_ALE" LOC = "B15" ; +NET "EM_NWP" LOC = "F13" ; + +## Debug pins +NET "debug_led<3>" LOC = "Y15" ; +NET "debug_led<2>" LOC = "K16" ; +NET "debug_led<1>" LOC = "J17" ; +NET "debug_led<0>" LOC = "H22" ; +NET "debug<0>" LOC = "G22" ; +NET "debug<1>" LOC = "H17" ; +NET "debug<2>" LOC = "H18" ; +NET "debug<3>" LOC = "K20" ; +NET "debug<4>" LOC = "J20" ; +NET "debug<5>" LOC = "K19" ; +NET "debug<6>" LOC = "K18" ; +NET "debug<7>" LOC = "L22" ; +NET "debug<8>" LOC = "K22" ; +NET "debug<9>" LOC = "N22" ; +NET "debug<10>" LOC = "M22" ; +NET "debug<11>" LOC = "N20" ; +NET "debug<12>" LOC = "N19" ; +NET "debug<13>" LOC = "R22" ; +NET "debug<14>" LOC = "P22" ; +NET "debug<15>" LOC = "N17" ; +NET "debug<16>" LOC = "P16" ; +NET "debug<17>" LOC = "U22" ; +NET "debug<18>" LOC = "P19" ; +NET "debug<19>" LOC = "R18" ; +NET "debug<20>" LOC = "U20" ; +NET "debug<21>" LOC = "T20" ; +NET "debug<22>" LOC = "R19" ; +NET "debug<23>" LOC = "R20" ; +NET "debug<24>" LOC = "W22" ; +NET "debug<25>" LOC = "Y22" ; +NET "debug<26>" LOC = "T18" ; +NET "debug<27>" LOC = "T17" ; +NET "debug<28>" LOC = "W19" ; +NET "debug<29>" LOC = "V20" ; +NET "debug<30>" LOC = "Y21" ; +NET "debug<31>" LOC = "AA22" ; +NET "debug_clk<0>" LOC = "N18" ; +NET "debug_clk<1>" LOC = "M17" ; + +NET "debug_pb" LOC = "C22" ; diff --git a/usrp2/top/u1e_ethdebug/u1e.v b/usrp2/top/u1e_ethdebug/u1e.v new file mode 100644 index 000000000..c4740b941 --- /dev/null +++ b/usrp2/top/u1e_ethdebug/u1e.v @@ -0,0 +1,26 @@ +`timescale 1ns / 1ps +////////////////////////////////////////////////////////////////////////////////// + +//`define DCM 1 + +module u1e + (output [3:0] debug_led, output [31:0] debug, output [1:0] debug_clk, + input debug_pb, + + // GPMC + input EM_CLK, input [15:0] EM_D, input [10:1] EM_A, input [1:0] EM_NBE, + input EM_WAIT0, input EM_NCS4, input EM_NCS5, input EM_NCS6, input EM_NWE, input EM_NOE, + input EM_NADV_ALE, input EM_NWP + ); + + assign debug_clk = {EM_CLK, EM_NADV_ALE}; + + assign debug_led = {EM_NWP, EM_A[9], EM_A[8], debug_pb}; + + assign debug = { { EM_NBE[1:0], EM_WAIT0, EM_NCS4, EM_NCS5, EM_NCS6, EM_NWE, EM_NOE }, + { EM_A[10], EM_A[7:1] }, + { EM_D[15:8] }, + { EM_D[7:0] } }; + + +endmodule // u1e -- cgit v1.2.3 From d78fd935865e3ebece9163a85b4b8043beef4eee Mon Sep 17 00:00:00 2001 From: Matt Ettus Date: Tue, 21 Sep 2010 17:00:44 -0700 Subject: fix timing issue on DAC outputs with rev 2. This puts the whole system on a 90 degree phase shift --- usrp2/top/u1e/u1e.ucf | 38 +++++++++++++++++++------------------- usrp2/top/u1e/u1e.v | 37 ++++++------------------------------- 2 files changed, 25 insertions(+), 50 deletions(-) diff --git a/usrp2/top/u1e/u1e.ucf b/usrp2/top/u1e/u1e.ucf index 51968d24a..5581b1dbd 100644 --- a/usrp2/top/u1e/u1e.ucf +++ b/usrp2/top/u1e/u1e.ucf @@ -95,10 +95,10 @@ NET "db_sen_tx" LOC = "G18" ; #NET "aux_sdi_codec" LOC = "G3" ; #NET "aux_sdo_codec" LOC = "F3" ; #NET "aux_sclk_codec" LOC = "C1" ; -NET "sen_codec" LOC = "F5" ; -NET "mosi_codec" LOC = "F4" ; +NET "sen_codec" LOC = "F5" |IOSTANDARD = LVCMOS33; +NET "mosi_codec" LOC = "F4" |IOSTANDARD = LVCMOS33; NET "miso_codec" LOC = "H4" ; -NET "sclk_codec" LOC = "H3" ; +NET "sclk_codec" LOC = "H3" |IOSTANDARD = LVCMOS33; ### Clock Gen SPI NET "cgen_miso" LOC = "F22" ; @@ -184,22 +184,22 @@ NET "DA<2>" LOC = "P6" ; NET "DA<1>" LOC = "R1" ; NET "DA<0>" LOC = "R2" ; -NET "TX<13>" LOC = "T6" ; -NET "TX<12>" LOC = "U1" ; -NET "TX<11>" LOC = "T1" ; -NET "TX<10>" LOC = "R5" ; -NET "TX<9>" LOC = "V1" ; -NET "TX<8>" LOC = "U2" ; -NET "TX<7>" LOC = "T4" ; -NET "TX<6>" LOC = "R3" ; -NET "TX<5>" LOC = "W1" ; -NET "TX<4>" LOC = "Y1" ; -NET "TX<3>" LOC = "V3" ; -NET "TX<2>" LOC = "V4" ; -NET "TX<1>" LOC = "W2" ; -NET "TX<0>" LOC = "W3" ; -NET "TXSYNC" LOC = "U5" ; -NET "TXBLANK" LOC = "U4" ; +NET "TX<13>" LOC = "T6" |IOSTANDARD = LVCMOS33 |DRIVE = 12 |SLEW = FAST ; +NET "TX<12>" LOC = "U1" |IOSTANDARD = LVCMOS33 |DRIVE = 12 |SLEW = FAST ; +NET "TX<11>" LOC = "T1" |IOSTANDARD = LVCMOS33 |DRIVE = 12 |SLEW = FAST ; +NET "TX<10>" LOC = "R5" |IOSTANDARD = LVCMOS33 |DRIVE = 12 |SLEW = FAST ; +NET "TX<9>" LOC = "V1" |IOSTANDARD = LVCMOS33 |DRIVE = 12 |SLEW = FAST ; +NET "TX<8>" LOC = "U2" |IOSTANDARD = LVCMOS33 |DRIVE = 12 |SLEW = FAST ; +NET "TX<7>" LOC = "T4" |IOSTANDARD = LVCMOS33 |DRIVE = 12 |SLEW = FAST ; +NET "TX<6>" LOC = "R3" |IOSTANDARD = LVCMOS33 |DRIVE = 12 |SLEW = FAST ; +NET "TX<5>" LOC = "W1" |IOSTANDARD = LVCMOS33 |DRIVE = 12 |SLEW = FAST ; +NET "TX<4>" LOC = "Y1" |IOSTANDARD = LVCMOS33 |DRIVE = 12 |SLEW = FAST ; +NET "TX<3>" LOC = "V3" |IOSTANDARD = LVCMOS33 |DRIVE = 12 |SLEW = FAST ; +NET "TX<2>" LOC = "V4" |IOSTANDARD = LVCMOS33 |DRIVE = 12 |SLEW = FAST ; +NET "TX<1>" LOC = "W2" |IOSTANDARD = LVCMOS33 |DRIVE = 12 |SLEW = FAST ; +NET "TX<0>" LOC = "W3" |IOSTANDARD = LVCMOS33 |DRIVE = 12 |SLEW = FAST ; +NET "TXSYNC" LOC = "U5" |IOSTANDARD = LVCMOS33 |DRIVE = 12 |SLEW = FAST ; +NET "TXBLANK" LOC = "U4" |IOSTANDARD = LVCMOS33 |DRIVE = 12 |SLEW = FAST ; NET "PPS_IN" LOC = "M5" ; diff --git a/usrp2/top/u1e/u1e.v b/usrp2/top/u1e/u1e.v index 7ddbfd537..ee087e59d 100644 --- a/usrp2/top/u1e/u1e.v +++ b/usrp2/top/u1e/u1e.v @@ -1,8 +1,6 @@ `timescale 1ns / 1ps ////////////////////////////////////////////////////////////////////////////////// -//`define DCM 1 - module u1e (input CLK_FPGA_P, input CLK_FPGA_N, // Diff output [3:0] debug_led, output [31:0] debug, output [1:0] debug_clk, @@ -41,11 +39,10 @@ module u1e IBUFGDS #(.IOSTANDARD("LVDS_33"), .DIFF_TERM("TRUE")) clk_fpga_pin (.O(clk_fpga_in),.I(CLK_FPGA_P),.IB(CLK_FPGA_N)); -`ifdef DCM - wire clk_2x, dcm_rst, dcm_locked; + wire clk_2x, dcm_rst, dcm_locked, clk_fb; DCM #(.CLK_FEEDBACK ( "1X" ), - .CLKDV_DIVIDE ( 2.0 ), - .CLKFX_DIVIDE ( 1 ), + .CLKDV_DIVIDE ( 2 ), + .CLKFX_DIVIDE ( 2 ), .CLKFX_MULTIPLY ( 2 ), .CLKIN_DIVIDE_BY_2 ( "FALSE" ), .CLKIN_PERIOD ( 15.625 ), @@ -57,15 +54,12 @@ module u1e .FACTORY_JF ( 16'h8080 ), .PHASE_SHIFT ( 0 ), .STARTUP_WAIT ( "FALSE" )) - clk_doubler (.CLKFB(clk_fpga), .CLKIN(clk_fpga_in), .RST(dcm_rst), + clk_doubler (.CLKFB(clk_fb), .CLKIN(clk_fpga_in), .RST(dcm_rst), .DSSEN(0), .PSCLK(0), .PSEN(0), .PSINCDEC(0), .PSDONE(), .CLKDV(), .CLKFX(), .CLKFX180(), - .CLK2X(clk_2x), .CLK2X180(), - .CLK0(clk_fpga), .CLK90(), .CLK180(), .CLK270(), + .CLK2X(), .CLK2X180(), + .CLK0(clk_fb), .CLK90(clk_fpga), .CLK180(), .CLK270(), .LOCKED(dcm_locked), .STATUS()); -`else // !`ifdef DCM - BUFG clk_fpga_BUFG (.I(clk_fpga_in), .O(clk_fpga)); -`endif // !`ifdef DCM // ///////////////////////////////////////////////////////////////////////// // SPI @@ -83,23 +77,6 @@ module u1e assign TXBLANK = 0; wire [13:0] tx_i, tx_q; -`ifdef DCM - reg [13:0] TX; - reg TXSYNC; - - always @(posedge clk_2x) - if(clk_fpga) - begin - TX <= tx_i; - TXSYNC <= 0; // Low indicates first data item - end - else - begin - TX <= tx_q; - TXSYNC <= 1; - end -`else // !`ifdef DCM - reg[13:0] delay_q; always @(posedge clk_fpga) delay_q <= tx_q; @@ -133,8 +110,6 @@ module u1e .R(1'b0), // 1-bit reset input .S(1'b0)); // 1-bit set input -`endif // !`ifdef DCM - // ///////////////////////////////////////////////////////////////////////// // Main U1E Core u1e_core u1e_core(.clk_fpga(clk_fpga), .rst_fpga(~debug_pb), -- cgit v1.2.3 From 27eb894c397f758528f59bc24f2ac645f0fccc4b Mon Sep 17 00:00:00 2001 From: Matt Ettus Date: Thu, 23 Sep 2010 11:40:19 -0700 Subject: watch the ethernet chip select on our debug bus --- usrp2/top/u1e/u1e.ucf | 2 +- usrp2/top/u1e/u1e.v | 7 ++++--- usrp2/top/u1e/u1e_core.v | 5 +++-- 3 files changed, 8 insertions(+), 6 deletions(-) diff --git a/usrp2/top/u1e/u1e.ucf b/usrp2/top/u1e/u1e.ucf index 5581b1dbd..0c487a601 100644 --- a/usrp2/top/u1e/u1e.ucf +++ b/usrp2/top/u1e/u1e.ucf @@ -32,7 +32,7 @@ NET "EM_A<2>" LOC = "A7" ; NET "EM_A<1>" LOC = "C15" ; NET "EM_NCS6" LOC = "E17" ; -#NET "EM_NCS5" LOC = "E10" ; +NET "EM_NCS5" LOC = "E10" ; NET "EM_NCS4" LOC = "E6" ; #NET "EM_NCS1" LOC = "D18" ; #NET "EM_NCS0" LOC = "D17" ; diff --git a/usrp2/top/u1e/u1e.v b/usrp2/top/u1e/u1e.v index ee087e59d..445b14a03 100644 --- a/usrp2/top/u1e/u1e.v +++ b/usrp2/top/u1e/u1e.v @@ -8,7 +8,8 @@ module u1e // GPMC input EM_CLK, inout [15:0] EM_D, input [10:1] EM_A, input [1:0] EM_NBE, - input EM_WAIT0, input EM_NCS4, input EM_NCS6, input EM_NWE, input EM_NOE, + input EM_WAIT0, input EM_NCS4, input EM_NCS5, input EM_NCS6, + input EM_NWE, input EM_NOE, inout db_sda, inout db_scl, // I2C @@ -116,8 +117,8 @@ module u1e .debug_led(debug_led), .debug(debug), .debug_clk(debug_clk), .debug_txd(FPGA_TXD), .debug_rxd(FPGA_RXD), .EM_CLK(EM_CLK), .EM_D(EM_D), .EM_A(EM_A), .EM_NBE(EM_NBE), - .EM_WAIT0(EM_WAIT0), .EM_NCS4(EM_NCS4), .EM_NCS6(EM_NCS6), - .EM_NWE(EM_NWE), .EM_NOE(EM_NOE), + .EM_WAIT0(EM_WAIT0), .EM_NCS4(EM_NCS4), .EM_NCS5(EM_NCS5), + .EM_NCS6(EM_NCS6), .EM_NWE(EM_NWE), .EM_NOE(EM_NOE), .db_sda(db_sda), .db_scl(db_scl), .sclk(sclk), .sen({cgen_sen_b,sen_codec,db_sen_tx,db_sen_rx}), .mosi(mosi), .miso(miso), .cgen_st_status(cgen_st_status), .cgen_st_ld(cgen_st_ld),.cgen_st_refmon(cgen_st_refmon), diff --git a/usrp2/top/u1e/u1e_core.v b/usrp2/top/u1e/u1e_core.v index 42333a722..619e44b8a 100644 --- a/usrp2/top/u1e/u1e_core.v +++ b/usrp2/top/u1e/u1e_core.v @@ -11,7 +11,8 @@ module u1e_core // GPMC input EM_CLK, inout [15:0] EM_D, input [10:1] EM_A, input [1:0] EM_NBE, - input EM_WAIT0, input EM_NCS4, input EM_NCS6, input EM_NWE, input EM_NOE, + input EM_WAIT0, input EM_NCS4, input EM_NCS5, input EM_NCS6, + input EM_NWE, input EM_NOE, inout db_sda, inout db_scl, output sclk, output [7:0] sen, output mosi, input miso, @@ -439,7 +440,7 @@ module u1e_core assign debug_clk = { EM_CLK, clk_fpga }; - assign debug = { { rx_have_data, tx_have_space, EM_NCS6, EM_NCS4, EM_NWE, EM_NOE, rx_overrun, tx_underrun }, + assign debug = { { rx_have_data, tx_have_space, EM_NCS6, EM_NCS5, EM_NCS4, EM_NWE, EM_NOE, rx_overrun }, { tx_src_rdy, tx_src_rdy_int, tx_dst_rdy, tx_dst_rdy_int, rx_src_rdy, rx_src_rdy_int, rx_dst_rdy, rx_dst_rdy_int }, { EM_D } }; -- cgit v1.2.3 From 69992b4133145cd92629a0d15354b5d33f0c4973 Mon Sep 17 00:00:00 2001 From: Matt Ettus Date: Thu, 23 Sep 2010 17:15:14 -0700 Subject: better debug pins --- usrp2/top/u1e_ethdebug/u1e.ucf | 8 +++++--- usrp2/top/u1e_ethdebug/u1e.v | 10 ++++++---- 2 files changed, 11 insertions(+), 7 deletions(-) diff --git a/usrp2/top/u1e_ethdebug/u1e.ucf b/usrp2/top/u1e_ethdebug/u1e.ucf index 0d4384a2a..d6a2ea4ed 100644 --- a/usrp2/top/u1e_ethdebug/u1e.ucf +++ b/usrp2/top/u1e_ethdebug/u1e.ucf @@ -36,12 +36,14 @@ NET "EM_NCS4" LOC = "E6" ; NET "EM_CLK" LOC = "F11" ; NET "EM_WAIT0" LOC = "F14" ; -NET "EM_NBE<1>" LOC = "D14" ; -NET "EM_NBE<0>" LOC = "A13" ; +#NET "EM_NBE<1>" LOC = "D14" ; +#NET "EM_NBE<0>" LOC = "A13" ; NET "EM_NWE" LOC = "B13" ; NET "EM_NOE" LOC = "A14" ; NET "EM_NADV_ALE" LOC = "B15" ; -NET "EM_NWP" LOC = "F13" ; +#NET "EM_NWP" LOC = "F13" ; +NET "overo_gpio64" LOC = "A4" ; # nRESET +NET "overo_gpio176" LOC = "B4" ; # IRQ ## Debug pins NET "debug_led<3>" LOC = "Y15" ; diff --git a/usrp2/top/u1e_ethdebug/u1e.v b/usrp2/top/u1e_ethdebug/u1e.v index c4740b941..2a543a313 100644 --- a/usrp2/top/u1e_ethdebug/u1e.v +++ b/usrp2/top/u1e_ethdebug/u1e.v @@ -8,16 +8,18 @@ module u1e input debug_pb, // GPMC - input EM_CLK, input [15:0] EM_D, input [10:1] EM_A, input [1:0] EM_NBE, + input EM_CLK, input [15:0] EM_D, input [10:1] EM_A, input EM_WAIT0, input EM_NCS4, input EM_NCS5, input EM_NCS6, input EM_NWE, input EM_NOE, - input EM_NADV_ALE, input EM_NWP + input EM_NADV_ALE, + + input overo_gpio64, input overo_gpio176 ); assign debug_clk = {EM_CLK, EM_NADV_ALE}; - assign debug_led = {EM_NWP, EM_A[9], EM_A[8], debug_pb}; + assign debug_led = {1'b0, EM_A[9], EM_A[8], debug_pb}; - assign debug = { { EM_NBE[1:0], EM_WAIT0, EM_NCS4, EM_NCS5, EM_NCS6, EM_NWE, EM_NOE }, + assign debug = { {overo_gpio64, overo_gpio176, EM_WAIT0, EM_NCS4, EM_NCS5, EM_NCS6, EM_NWE, EM_NOE }, { EM_A[10], EM_A[7:1] }, { EM_D[15:8] }, { EM_D[7:0] } }; -- cgit v1.2.3 From 1f77494788fa4fa8450aaf170055553bd0e5fe8e Mon Sep 17 00:00:00 2001 From: Matt Ettus Date: Fri, 24 Sep 2010 14:37:15 -0700 Subject: allow for CS to rise before, at the same time, or after OE --- usrp2/gpmc/fifo_to_gpmc_async.v | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/usrp2/gpmc/fifo_to_gpmc_async.v b/usrp2/gpmc/fifo_to_gpmc_async.v index 5ac8b19bd..cf8b6e861 100644 --- a/usrp2/gpmc/fifo_to_gpmc_async.v +++ b/usrp2/gpmc/fifo_to_gpmc_async.v @@ -11,23 +11,22 @@ module fifo_to_gpmc_async input [15:0] frame_len); // Synchronize the async control signals - reg [1:0] cs_del, oe_del; + reg [2:0] cs_del, oe_del; reg [15:0] counter; always @(posedge clk) if(reset) begin - cs_del <= 2'b11; - oe_del <= 2'b11; + cs_del <= 3'b11; + oe_del <= 3'b11; end else begin - cs_del <= { cs_del[0], EM_NCS }; - oe_del <= { oe_del[0], EM_NOE }; + cs_del <= { cs_del[1:0], EM_NCS }; + oe_del <= { oe_del[1:0], EM_NOE }; end - //wire do_read = (~cs_del[0] & (oe_del == 2'b10)); - wire do_read = (~cs_del[1] & (oe_del == 2'b01)); // change output on trailing edge + wire do_read = ( (~cs_del[1] | ~cs_del[2]) & (oe_del[1:0] == 2'b01)); // change output on trailing edge wire first_read = (counter == 0); wire last_read = ((counter+1) == frame_len); -- cgit v1.2.3 From 4c85220512ed25ae87e26c1e550e8e2debd5e64e Mon Sep 17 00:00:00 2001 From: Nick Foster Date: Tue, 5 Oct 2010 17:37:21 -0700 Subject: U2P: newest bootloader with support for 32Mbit flash --- usrp2/top/u2plus/u2plus_core.v | 353 +++++++++++++++++++++++------------------ 1 file changed, 196 insertions(+), 157 deletions(-) diff --git a/usrp2/top/u2plus/u2plus_core.v b/usrp2/top/u2plus/u2plus_core.v index e394e68af..3a6bf0f64 100644 --- a/usrp2/top/u2plus/u2plus_core.v +++ b/usrp2/top/u2plus/u2plus_core.v @@ -286,171 +286,210 @@ module u2plus_core //defparam bootram.RAM0.INIT_00=256'hbc32fff0_aa43502b_b00000fe_30630001_80000000_10600000_a48500ff_10a00000; //defparam bootram.RAM0.INIT_01=256'ha48500ff_b810ffd0_f880200c_30a50001_10830000_308000ff_be23000c_a4640001; -////ICAP test v0.1 -defparam bootram.RAM0.INIT_00=256'h00000000_00000000_00000000_b80801c0_00000000_b8080d54_00000000_b8080050; -defparam bootram.RAM0.INIT_01=256'h00000000_00000000_00000000_00000000_00000000_00000000_00000000_b8080d5c; -defparam bootram.RAM0.INIT_02=256'h3020ffe0_b0000000_30401448_31a01468_00000000_00000000_00000000_00000000; +////bootloader 10/5/10 for 32/64Mbit FLASH +defparam bootram.RAM0.INIT_00=256'h00000000_00000000_00000000_b80801c0_00000000_b8081210_00000000_b8080050; +defparam bootram.RAM0.INIT_01=256'h00000000_00000000_00000000_00000000_00000000_00000000_00000000_b8081218; +defparam bootram.RAM0.INIT_02=256'h3020ffe0_b0000000_30401920_31a01948_00000000_00000000_00000000_00000000; defparam bootram.RAM0.INIT_03=256'h3021ffe4_e060f800_b0000000_b8000000_30a30000_b9f4047c_80000000_b9f400cc; -defparam bootram.RAM0.INIT_04=256'he8830000_e8601450_80000000_99fc2000_f8601450_b8000044_bc030014_f9e10000; -defparam bootram.RAM0.INIT_05=256'h80000000_99fc1800_30a01460_bc030010_30600000_b0000000_30630004_be24ffec; +defparam bootram.RAM0.INIT_04=256'he8830000_e8601928_80000000_99fc2000_f8601928_b8000044_bc030014_f9e10000; +defparam bootram.RAM0.INIT_05=256'h80000000_99fc1800_30a0193c_bc030010_30600000_b0000000_30630004_be24ffec; defparam bootram.RAM0.INIT_06=256'h30600000_b0000000_3021001c_b60f0008_e9e10000_f060f800_b0000000_30600001; -defparam bootram.RAM0.INIT_07=256'h80000000_99fc1800_bc03000c_30c0f804_b0000000_30a01460_f9e10000_3021ffe4; -defparam bootram.RAM0.INIT_08=256'h80000000_99fc2000_bc04000c_30a01464_bc030014_30800000_b0000000_e8601464; -defparam bootram.RAM0.INIT_09=256'h06463800_20e01468_20c01468_f9e10000_2021ffec_3021001c_b60f0008_e9e10000; +defparam bootram.RAM0.INIT_07=256'h80000000_99fc1800_bc03000c_30c0f804_b0000000_30a0193c_f9e10000_3021ffe4; +defparam bootram.RAM0.INIT_08=256'h80000000_99fc2000_bc04000c_30a01940_bc030014_30800000_b0000000_e8601940; +defparam bootram.RAM0.INIT_09=256'h06463800_20e01948_20c01948_f9e10000_2021ffec_3021001c_b60f0008_e9e10000; defparam bootram.RAM0.INIT_0A=256'hb0000000_20c0f800_b0000000_bc92fff4_06463800_20c60004_f8060000_bc720014; -defparam bootram.RAM0.INIT_0B=256'hb9f40bf0_bc92fff4_06463800_20c60004_f8060000_bc720014_06463800_20e0f828; -defparam bootram.RAM0.INIT_0C=256'h32630000_20a00000_b9f4014c_20e00000_20c00000_80000000_b9f40d70_80000000; -defparam bootram.RAM0.INIT_0D=256'h20210014_b60f0008_30730000_c9e10000_80000000_b9f40bbc_80000000_b9f40d78; +defparam bootram.RAM0.INIT_0B=256'hb9f410ac_bc92fff4_06463800_20c60004_f8060000_bc720014_06463800_20e0f82c; +defparam bootram.RAM0.INIT_0C=256'h32630000_20a00000_b9f4014c_20e00000_20c00000_80000000_b9f4122c_80000000; +defparam bootram.RAM0.INIT_0D=256'h20210014_b60f0008_30730000_c9e10000_80000000_b9f41078_80000000_b9f41234; defparam bootram.RAM0.INIT_0E=256'he9e10000_f9610004_fa410010_95608001_fa21000c_f9610008_f9e10000_3021ffec; defparam bootram.RAM0.INIT_0F=256'hbc050018_30210014_b62e0000_ea410010_ea21000c_e9610008_940bc001_e9610004; defparam bootram.RAM0.INIT_10=256'h3021ff2c_80000000_b60f0008_bc32fff4_16432800_30630001_80000000_10600000; -defparam bootram.RAM0.INIT_11=256'hb9f402c0_32c1001c_3261004c_f8610028_f9e10000_fac100d0_fa6100cc_3061002c; -defparam bootram.RAM0.INIT_12=256'h22407fff_e8610024_bc230038_30a00f7c_10b30000_b9f405cc_10d60000_10b30000; -defparam bootram.RAM0.INIT_13=256'h30a00f7c_bc120040_aa430001_30a00f44_e061001c_10a30000_be520034_16439003; -defparam bootram.RAM0.INIT_14=256'he8e10020_e8c10028_b800ffa8_80000000_b9f40440_b800ffb4_80000000_b9f4044c; -defparam bootram.RAM0.INIT_15=256'h80000000_b9f40414_b800ff88_80000000_b9f40420_30a00f44_80000000_b9f40b54; -defparam bootram.RAM0.INIT_16=256'hb800ff60_80000000_b9f403f8_30a00f48_80000000_b9f409a0_30a08000_b0000000; +defparam bootram.RAM0.INIT_11=256'hb9f40440_32c1001c_3261004c_f8610028_f9e10000_fac100d0_fa6100cc_3061002c; +defparam bootram.RAM0.INIT_12=256'h22407fff_e8610024_bc230038_30a01438_10b30000_b9f40a18_10d60000_10b30000; +defparam bootram.RAM0.INIT_13=256'h30a01438_bc120040_aa430001_30a01400_e061001c_10a30000_be520034_16439003; +defparam bootram.RAM0.INIT_14=256'he8e10020_e8c10028_b800ffa8_80000000_b9f404d4_b800ffb4_80000000_b9f404e0; +defparam bootram.RAM0.INIT_15=256'h80000000_b9f404a8_b800ff88_80000000_b9f404b4_30a01400_80000000_b9f41010; +defparam bootram.RAM0.INIT_16=256'hb800ff60_80000000_b9f4048c_30a01404_80000000_b9f40e5c_30a08000_b0000000; defparam bootram.RAM0.INIT_17=256'h30a0a120_b0000007_9403c001_ac640002_94808001_fa61001c_f9e10000_3021ffe0; -defparam bootram.RAM0.INIT_18=256'hb9f40750_80000000_b9f40408_f800200c_80000000_b9f4fef4_f860200c_306000ff; -defparam bootram.RAM0.INIT_19=256'h30a01048_bc04013c_a4842000_e8803334_80000000_b9f403a4_30a00f80_80000000; -defparam bootram.RAM0.INIT_1A=256'h30a010ac_bc23010c_80000000_b9f4099c_30a00000_b0000020_80000000_b9f4038c; -defparam bootram.RAM0.INIT_1B=256'h30a010fc_bc030058_80000000_b9f40930_30a00000_b0000040_80000000_b9f4036c; -defparam bootram.RAM0.INIT_1C=256'h30c07c00_b9f4070c_30a00000_b0000040_30e08000_b0000000_80000000_b9f4034c; -defparam bootram.RAM0.INIT_1D=256'he9e10000_80000000_b9f40318_30a01128_80000000_b9f408c0_30a08000_b0000000; -defparam bootram.RAM0.INIT_1E=256'hb000007f_80000000_b9f402f8_30a01164_30210020_b60f0008_30600001_ea61001c; -defparam bootram.RAM0.INIT_1F=256'h80000000_b9f402d4_30a00ff0_12630000_be230030_80000000_b9f408bc_30a00000; +defparam bootram.RAM0.INIT_18=256'hb9f40b9c_80000000_b9f406c0_f800200c_80000000_b9f4fef4_f860200c_306000ff; +defparam bootram.RAM0.INIT_19=256'h30a01504_bc04013c_a4842000_e8803334_80000000_b9f40438_30a0143c_80000000; +defparam bootram.RAM0.INIT_1A=256'h30a01568_bc23010c_80000000_b9f40e58_30a00000_b0000018_80000000_b9f40420; +defparam bootram.RAM0.INIT_1B=256'h30a015b8_bc030058_80000000_b9f40dec_30a00000_b0000030_80000000_b9f40400; +defparam bootram.RAM0.INIT_1C=256'h30c07c00_b9f40b58_30a00000_b0000030_30e08000_b0000000_80000000_b9f403e0; +defparam bootram.RAM0.INIT_1D=256'he9e10000_80000000_b9f403ac_30a015e4_80000000_b9f40d7c_30a08000_b0000000; +defparam bootram.RAM0.INIT_1E=256'hb000003f_80000000_b9f4038c_30a01620_30210020_b60f0008_30600001_ea61001c; +defparam bootram.RAM0.INIT_1F=256'h80000000_b9f40368_30a014ac_12630000_be230030_80000000_b9f40d78_30a00000; defparam bootram.RAM0.INIT_20=256'hb0000000_30210020_b60f0008_ea61001c_e9e10000_10730000_80000000_b9f4fe1c; -defparam bootram.RAM0.INIT_21=256'hb9f4082c_30a08000_b0000000_30c07c00_b9f40678_30a00000_b000007f_30e08000; -defparam bootram.RAM0.INIT_22=256'hb60f0008_30600001_ea61001c_e9e10000_80000000_b9f40284_30a00fb4_80000000; -defparam bootram.RAM0.INIT_23=256'h80000000_b9f40254_30a00f94_b800feec_80000000_b9f40264_30a01074_30210020; -defparam bootram.RAM0.INIT_24=256'h80000000_b9f40234_30a00ff0_bc23001c_80000000_b9f40818_30a00000_b000007f; -defparam bootram.RAM0.INIT_25=256'hb9f405e8_30a00000_b000007f_30e08000_b0000000_b800fe94_80000000_b9f4fd7c; -defparam bootram.RAM0.INIT_26=256'h80000000_b9f401f4_30a00fb4_80000000_b9f4079c_30a08000_b0000000_30c07c00; -defparam bootram.RAM0.INIT_27=256'h3021ffdc_80000000_b60f0008_80000000_b9f4fb84_f9e10000_3021ffe4_b800fe5c; -defparam bootram.RAM0.INIT_28=256'h90630060_80000000_b9f402b0_12c50000_f9e10000_12650000_fac10020_fa61001c; -defparam bootram.RAM0.INIT_29=256'he9e10000_10760000_f0130000_3273ffff_32730001_be32ffec_aa43000a_f0730000; -defparam bootram.RAM0.INIT_2A=256'h80000000_b9f4026c_f9e10000_3021ffe4_30210024_b60f0008_eac10020_ea61001c; -defparam bootram.RAM0.INIT_2B=256'h12650000_e0650000_f9e10000_fa61001c_3021ffe0_3021001c_b60f0008_e9e10000; -defparam bootram.RAM0.INIT_2C=256'he9e10000_bc25fff0_90a30060_e0730000_32730001_b9f401b8_bc050018_90a30060; -defparam bootram.RAM0.INIT_2D=256'hb9f40184_f9e10000_fac1001c_3021ffe0_30210020_b60f0008_10600000_ea61001c; -defparam bootram.RAM0.INIT_2E=256'hf9e10000_3021ffe4_30210020_b60f0008_eac1001c_e9e10000_10760000_12c50000; -defparam bootram.RAM0.INIT_2F=256'h9404c001_ac870002_94e08001_3021001c_b60f0008_e9e10000_80000000_b9f4013c; -defparam bootram.RAM0.INIT_30=256'hb0000000_f860200c_80633000_84632000_84c62800_a866ffff_e880f81c_b0000000; -defparam bootram.RAM0.INIT_31=256'h80000000_b60f0008_9404c001_80843800_ac840002_94808001_a4e70002_f860f81c; -defparam bootram.RAM0.INIT_32=256'hb0000000_f8a0200c_88a52000_e880f81c_b0000000_9406c001_acc30002_94608001; -defparam bootram.RAM0.INIT_33=256'h80000000_b60f0008_9404c001_80841800_ac840002_94808001_a4630002_f8a0f81c; -defparam bootram.RAM0.INIT_34=256'h84632000_84c62800_a866ffff_e880f820_b0000000_9404c001_ac870002_94e08001; -defparam bootram.RAM0.INIT_35=256'h80843800_ac840002_94808001_a4e70002_f860f820_b0000000_f8602020_80633000; -defparam bootram.RAM0.INIT_36=256'hb9f40064_80000000_b9f4fe98_f9e10000_3021ffe4_80000000_b60f0008_9404c001; -defparam bootram.RAM0.INIT_37=256'hb9f40044_f9e10000_3021ffe4_3021001c_b60f0008_10600000_e9e10000_30a0000a; -defparam bootram.RAM0.INIT_38=256'h3021ffe4_80000000_b60f0008_f0a01454_3021001c_b60f0008_e9e10000_30a0000a; -defparam bootram.RAM0.INIT_39=256'h3021001c_b60f0008_e9e10000_f8603700_306000d9_30a00001_b9f4ffec_f9e10000; -defparam bootram.RAM0.INIT_3A=256'hbc03fffc_e8603704_12650000_be120024_aa45000a_f9e10000_fa61001c_3021ffe0; -defparam bootram.RAM0.INIT_3B=256'hb800ffdc_30a0000d_b9f4ffcc_30210020_b60f0008_ea61001c_e9e10000_fa60370c; -defparam bootram.RAM0.INIT_3C=256'he8603704_30a0000d_be120024_aa53000a_f9e10000_12650000_fa61001c_3021ffe0; -defparam bootram.RAM0.INIT_3D=256'h80000000_b9f4ff88_30210020_b60f0008_ea61001c_e9e10000_fa60370c_bc030008; -defparam bootram.RAM0.INIT_3E=256'h3065ffa9_90a50060_80000000_b60f0008_e8603710_bc03fffc_e8603708_b800ffdc; -defparam bootram.RAM0.INIT_3F=256'h16459001_32400039_a46300ff_3065ffc9_a46300ff_be520024_16459001_3240005a; -defparam bootram.RAM1.INIT_00=256'h13250000_fb21002c_3021ffc8_80000000_b60f0008_a46400ff_3085ffd0_be52000c; -defparam bootram.RAM1.INIT_01=256'he0790000_fb410030_fb010028_fae10024_fac10020_fa61001c_f9e10000_fb610034; -defparam bootram.RAM1.INIT_02=256'heac10020_ea61001c_e9e10000_10650000_30a0ffff_be120034_aa43003a_13660000; -defparam bootram.RAM1.INIT_03=256'he8c01458_30210038_b60f0008_eb610034_eb410030_eb21002c_eb010028_eae10024; -defparam bootram.RAM1.INIT_04=256'ha4630044_c0662000_a4a300ff_be04001c_90840060_30650001_c085c800_30a00001; -defparam bootram.RAM1.INIT_05=256'hb9f4ff1c_e0b90002_80000000_b9f4ff28_e0b90001_30a0fffe_b810ffac_bc23ffe4; -defparam bootram.RAM1.INIT_06=256'hbe38ff74_93040060_e083000b_10791800_fa7b0004_10739800_12761800_66c30404; -defparam bootram.RAM1.INIT_07=256'he0b90004_66e30404_b9f4fee4_e0b90003_13530000_b9f4fef0_e0b90005_30a0fffd; -defparam bootram.RAM1.INIT_08=256'h12f7b000_12d61800_12d61800_b9f4fec8_64630408_e0b90006_66c3040c_b9f4fed8; -defparam bootram.RAM1.INIT_09=256'h1063b000_66c30404_b9f4fea4_e0b90008_80000000_b9f4feb0_e0b90007_fafb0008; -defparam bootram.RAM1.INIT_0A=256'ha6d600ff_32d60009_12d8c000_ea7b000c_13580000_10f30000_be130060_f07b0000; -defparam bootram.RAM1.INIT_0B=256'hd0789800_1063b800_66e30404_b9f4fe68_e0b60001_12d9b000_b9f4fe74_c0b6c800; -defparam bootram.RAM1.INIT_0C=256'hbe52ffb8_1647c003_107a1800_a70400ff_c073c000_30980001_e8fb0004_ea7b000c; -defparam bootram.RAM1.INIT_0D=256'h10632000_e0b70009_12f9b800_64760008_12e73800_e09b0000_eadb0008_a74300ff; -defparam bootram.RAM1.INIT_0E=256'h16d60000_67030404_b9f4fe04_e0b7000a_12d61800_b9f4fe10_107a1800_12c7b000; -defparam bootram.RAM1.INIT_0F=256'h10a00000_b810fe58_30a0fffb_be32fe60_1643b000_a46300ff_a6d600ff_1063c000; -defparam bootram.RAM1.INIT_10=256'ha1292000_a508007f_a5290600_80000000_b60f0008_bc23fff8_a4630100_e8603b10; -defparam bootram.RAM1.INIT_11=256'ha46600ff_f8803b10_f8e03b00_bc23fff8_a4630100_e8603b10_a4a500ff_80884800; -defparam bootram.RAM1.INIT_12=256'hbc23fff8_a4630100_e8603b10_10650000_be050018_f8803b10_a0840100_f8603b18; -defparam bootram.RAM1.INIT_13=256'h10a00000_f9e10000_3021ffe4_10e60000_10c00000_80000000_b60f0008_e8603b00; -defparam bootram.RAM1.INIT_14=256'hb60f0008_e9e10000_80000000_b9f4ff84_f8603b14_30600001_31200400_31000008; -defparam bootram.RAM1.INIT_15=256'h13060000_f9e10000_fb010038_fa61002c_12c50000_fac10030_3021ffc4_3021001c; -defparam bootram.RAM1.INIT_16=256'h3060000b_66d60408_f8603b10_f8003b18_30600400_12670000_b9f4ff3c_fae10034; -defparam bootram.RAM1.INIT_17=256'hf8603b10_30600528_f8803b10_30800428_f8603b18_30600001_fac03b00_f8603b04; -defparam bootram.RAM1.INIT_18=256'hf8603b10_30600400_3261001c_12e00000_12d30000_be18009c_80000000_b9f4ff00; -defparam bootram.RAM1.INIT_19=256'he8603b08_f881001c_14b7c000_e8803b0c_80000000_b9f4fed8_f8803b10_30800500; -defparam bootram.RAM1.INIT_1A=256'hbeb20034_16459003_22400010_f8610028_e8603b00_f8810024_e8803b04_f8610020; -defparam bootram.RAM1.INIT_1B=256'h12f72800_bc32fff0_16442800_30840001_d0762000_c0732000_30a00010_10800000; -defparam bootram.RAM1.INIT_1C=256'hbe52ff7c_1658b803_12f72800_bc25ffd8_b800ff8c_12d62800_beb20020_1658b803; -defparam bootram.RAM1.INIT_1D=256'hb60f0008_eb010038_eae10034_eac10030_ea61002c_e9e10000_f8003b18_12d62800; -defparam bootram.RAM1.INIT_1E=256'hf9e10000_31000020_30c00001_30a00001_3021ffe4_30e00000_b0009f00_3021003c; -defparam bootram.RAM1.INIT_1F=256'hb0000000_3021001c_b60f0008_a463ffff_b00000ff_e9e10000_31200400_b9f4fe34; -defparam bootram.RAM1.INIT_20=256'hb9f4ffa8_3021001c_b60f0008_e9e10000_bc030010_f9e10000_3021ffe4_e860f824; -defparam bootram.RAM1.INIT_21=256'h80000000_b9f40100_a46300ff_be120010_aa440020_a48400ff_64830008_80000000; -defparam bootram.RAM1.INIT_22=256'hb0000000_e063118a_bc52ffe4_16439001_32400018_bcb2fff0_16439001_32400015; -defparam bootram.RAM1.INIT_23=256'hf9e10000_10b60000_10c50000_12c00000_fac1001c_3021ffe0_b800ffac_f860f824; -defparam bootram.RAM1.INIT_24=256'h30210020_b60f0008_eac1001c_e9e10000_80000000_99fcb000_30e00024_b9f40174; -defparam bootram.RAM1.INIT_25=256'h10b60000_30c00006_b9f4fdf0_f9e10000_10f60000_32c1001c_fac10028_3021ffd4; -defparam bootram.RAM1.INIT_26=256'heac10028_e9e10000_a884ffff_80841800_14830000_30e00006_b9f400b0_30c011a4; -defparam bootram.RAM1.INIT_27=256'hf9e10000_10f60000_32c1001c_fac10028_3021ffd4_3021002c_b60f0008_6464001f; -defparam bootram.RAM1.INIT_28=256'h80841800_14830000_30e00006_b9f40064_30c011ac_10b60000_30c00006_b9f4fda4; -defparam bootram.RAM1.INIT_29=256'h3021ffe4_30a011b4_3021002c_b60f0008_6464001f_eac10028_e9e10000_a884ffff; -defparam bootram.RAM1.INIT_2A=256'hb6910000_80000000_b6110000_30a0ffff_b9f4f324_80000000_b9f4f828_f9e10000; -defparam bootram.RAM1.INIT_2B=256'hbeb2005c_16479003_22400003_80000000_b60f0008_80000000_b60f0008_80000000; -defparam bootram.RAM1.INIT_2C=256'h30e7fffc_bc320040_16432000_e8660000_e8850000_bc230050_a4630003_80653000; -defparam bootram.RAM1.INIT_2D=256'hbc120028_aa47ffff_30e7ffff_30c60004_be52ffe0_16479003_22400003_30a50004; -defparam bootram.RAM1.INIT_2E=256'haa47ffff_30e7ffff_30c60001_30a50001_be320020_16434000_e0660000_e1050000; -defparam bootram.RAM1.INIT_2F=256'hbeb20018_16479003_2240000f_14634000_b60f0008_10600000_b60f0008_bc32ffe0; -defparam bootram.RAM1.INIT_30=256'h10e72000_11040000_bc070024_11050000_be030034_a4630003_80662800_10850000; -defparam bootram.RAM1.INIT_31=256'h10650000_b60f0008_30c60001_be32fff0_16474000_31080001_f0680000_e0660000; -defparam bootram.RAM1.INIT_32=256'he866000c_f8880008_e8860008_f8680004_e8660004_f8880000_30e7fff0_e8860000; -defparam bootram.RAM1.INIT_33=256'h16479003_22400003_31080010_be52ffd0_16479003_2240000f_f868000c_30c60010; -defparam bootram.RAM1.INIT_34=256'hbe52ffec_16479003_22400003_d8682000_30e7fffc_c8662000_10800000_bcb2002c; -defparam bootram.RAM1.INIT_35=256'hfa61001c_3021ffe0_e8600f34_10880000_b810ff68_11044000_10c43000_30840004; -defparam bootram.RAM1.INIT_36=256'haa43ffff_e8730000_3273fffc_99fc1800_bc120018_aa43ffff_32600f34_f9e10000; -defparam bootram.RAM1.INIT_37=256'hb9f4f1dc_d9e00800_3021fff8_30210020_b60f0008_ea61001c_e9e10000_bc32fff0; -defparam bootram.RAM1.INIT_38=256'hd9e00800_3021fff8_30210008_b60f0008_c9e00800_80000000_b9f4ffb0_80000000; -defparam bootram.RAM1.INIT_39=256'hffffffff_00000000_ffffffff_30210008_b60f0008_c9e00800_80000000_b9f4f154; -defparam bootram.RAM1.INIT_3A=256'h7475726e_65207265_696d6167_61696e20_523a206d_4552524f_4f4b0000_00000000; -defparam bootram.RAM1.INIT_3B=256'h4e4f4b00_64652e00_64206d6f_206c6f61_49484558_20696e20_4261636b_65642120; -defparam bootram.RAM1.INIT_3C=256'h20555352_74696e67_53746172_720a0000_6f616465_6f6f746c_322b2062_55535250; -defparam bootram.RAM1.INIT_3D=256'h65747572_523a2072_4552524f_2e000000_6d6f6465_61666520_696e2073_50322b20; -defparam bootram.RAM1.INIT_3E=256'h6f756c64_73207368_20546869_72616d21_70726f67_61696e20_6f6d206d_6e206672; -defparam bootram.RAM1.INIT_3F=256'h66652066_6f207361_523a206e_4552524f_6e210000_61707065_65722068_206e6576; -defparam bootram.RAM2.INIT_00=256'h6d206120_20492061_626c652e_61696c61_65206176_696d6167_61726520_69726d77; -defparam bootram.RAM2.INIT_01=256'h5820746f_20494845_6c6f6164_20746f20_66726565_65656c20_6b2e2046_62726963; -defparam bootram.RAM2.INIT_02=256'h726f6475_69642070_2076616c_20666f72_6b696e67_43686563_2e000000_2052414d; -defparam bootram.RAM2.INIT_03=256'h6f647563_64207072_56616c69_2e2e2e00_6d616765_47412069_6e204650_6374696f; -defparam bootram.RAM2.INIT_04=256'h7074696e_7474656d_642e2041_666f756e_61676520_4120696d_20465047_74696f6e; -defparam bootram.RAM2.INIT_05=256'h696f6e20_64756374_2070726f_616c6964_4e6f2076_742e0000_20626f6f_6720746f; -defparam bootram.RAM2.INIT_06=256'h20746f20_74696e67_74656d70_2e0a4174_6f756e64_67652066_20696d61_46504741; -defparam bootram.RAM2.INIT_07=256'h56616c69_2e2e2e00_77617265_6669726d_696f6e20_64756374_2070726f_6c6f6164; -defparam bootram.RAM2.INIT_08=256'h204c6f61_756e642e_6520666f_6d776172_20666972_74696f6e_6f647563_64207072; -defparam bootram.RAM2.INIT_09=256'h61696e20_6f6d206d_6e206672_65747572_523a2052_4552524f_2e2e2e00_64696e67; -defparam bootram.RAM2.INIT_0A=256'h61707065_65722068_206e6576_6f756c64_73207368_20546869_72616d21_70726f67; -defparam bootram.RAM2.INIT_0B=256'h77617265_6669726d_696f6e20_64756374_2070726f_616c6964_4e6f2076_6e210000; -defparam bootram.RAM2.INIT_0C=256'h2e2e2e00_77617265_6669726d_61666520_6e672073_54727969_6e642e20_20666f75; -defparam bootram.RAM2.INIT_0D=256'h00000000_6f72740a_0a0a6162_aa990000_ffffffff_b8080000_b0000000_10101200; -defparam bootram.RAM2.INIT_0E=256'h20202020_20202020_20202020_20202020_28282820_20202828_20202020_00202020; -defparam bootram.RAM2.INIT_0F=256'h10101010_04040410_04040404_10040404_10101010_10101010_10101010_20881010; -defparam bootram.RAM2.INIT_10=256'h10101010_01010101_01010101_01010101_01010101_01010101_41414141_10104141; -defparam bootram.RAM2.INIT_11=256'h10101010_02020202_02020202_02020202_02020202_02020202_42424242_10104242; -defparam bootram.RAM2.INIT_12=256'h00000000_00000000_00000000_00000000_00000000_00000000_00000000_20000000; -defparam bootram.RAM2.INIT_13=256'h00000000_00000000_00000000_00000000_00000000_00000000_00000000_00000000; -defparam bootram.RAM2.INIT_14=256'h00000000_00000000_00000000_00000000_00000000_00000000_00000000_00000000; -defparam bootram.RAM2.INIT_15=256'h00000000_00000000_00000000_00000000_00000000_00000000_00000000_00000000; -defparam bootram.RAM2.INIT_16=256'h00000000_00000000_00000000_00000000_00000000_00000000_00000000_00000000; -defparam bootram.RAM2.INIT_17=256'h00000000_00000000_00000000_00000000_00000000_00000000_00000000_00000000; -defparam bootram.RAM2.INIT_18=256'h00000000_00000000_00000000_00000000_00000000_00000000_00000000_00000000; -defparam bootram.RAM2.INIT_19=256'h00000000_00000000_00000000_00000000_00000000_00000000_00000000_00000000; -defparam bootram.RAM2.INIT_1A=256'h20202020_20202020_20202020_28282020_20282828_20202020_20202020_00000000; -defparam bootram.RAM2.INIT_1B=256'h04041010_04040404_04040404_10101010_10101010_10101010_88101010_20202020; -defparam bootram.RAM2.INIT_1C=256'h01010110_01010101_01010101_01010101_01010101_41414101_10414141_10101010; -defparam bootram.RAM2.INIT_1D=256'h02020210_02020202_02020202_02020202_02020202_42424202_10424242_10101010; -defparam bootram.RAM2.INIT_1E=256'h00000000_00000000_00000000_00000000_00000000_00000000_00000000_10101020; -defparam bootram.RAM2.INIT_1F=256'h00000000_00000000_00000000_00000000_00000000_00000000_00000000_00000000; -defparam bootram.RAM2.INIT_20=256'h00000000_00000000_00000000_00000000_00000000_00000000_00000000_00000000; -defparam bootram.RAM2.INIT_21=256'h00000000_00000000_00000000_00000000_00000000_00000000_00000000_00000000; -defparam bootram.RAM2.INIT_22=256'h00000000_00001344_01000000_00000f40_00000000_00000000_00000000_00000000; -defparam bootram.RAM2.INIT_23=256'h00000000_00000000_00000000_00000000_00000000_00000000_00000000_00000000; +defparam bootram.RAM0.INIT_21=256'hb9f40ce8_30a08000_b0000000_30c07c00_b9f40ac4_30a00000_b000003f_30e08000; +defparam bootram.RAM0.INIT_22=256'hb60f0008_30600001_ea61001c_e9e10000_80000000_b9f40318_30a01470_80000000; +defparam bootram.RAM0.INIT_23=256'h80000000_b9f402e8_30a01450_b800feec_80000000_b9f402f8_30a01530_30210020; +defparam bootram.RAM0.INIT_24=256'h80000000_b9f402c8_30a014ac_bc23001c_80000000_b9f40cd4_30a00000_b000003f; +defparam bootram.RAM0.INIT_25=256'hb9f40a34_30a00000_b000003f_30e08000_b0000000_b800fe94_80000000_b9f4fd7c; +defparam bootram.RAM0.INIT_26=256'h80000000_b9f40288_30a01470_80000000_b9f40c58_30a08000_b0000000_30c07c00; +defparam bootram.RAM0.INIT_27=256'h3021ffd0_80000000_b60f0008_80000000_b9f4fb84_f9e10000_3021ffe4_b800fe5c; +defparam bootram.RAM0.INIT_28=256'h13260000_12e70000_13050000_12660000_fb21002c_fb010028_fae10024_fa61001c; +defparam bootram.RAM0.INIT_29=256'hbcb2002c_16572001_bc120030_aa43ffff_12c00000_b810001c_f9e10000_fac10020; +defparam bootram.RAM0.INIT_2A=256'hbe32ffd4_aa43000a_f0730000_10960000_90630060_10b80000_b9f405ec_32730001; +defparam bootram.RAM0.INIT_2B=256'heae10024_eac10020_ea61001c_e9e10000_10640000_f0130000_14999800_32d60001; +defparam bootram.RAM0.INIT_2C=256'hfb010028_fae10024_fa61001c_3021ffd0_30210030_b60f0008_eb21002c_eb010028; +defparam bootram.RAM0.INIT_2D=256'hb8100014_f9e10000_fac10020_13260000_12e70000_13050000_12660000_fb21002c; +defparam bootram.RAM0.INIT_2E=256'h10960000_90630060_10b80000_b9f4051c_32730001_bcb2002c_16572001_12c00000; +defparam bootram.RAM0.INIT_2F=256'he9e10000_10640000_f0130000_14999800_32d60001_be32ffdc_aa43000a_f0730000; +defparam bootram.RAM0.INIT_30=256'h3021ffd8_30210030_b60f0008_eb21002c_eb010028_eae10024_eac10020_ea61001c; +defparam bootram.RAM0.INIT_31=256'hb9f404b0_12660000_f9e10000_12e60000_12c50000_fae10024_fac10020_fa61001c; +defparam bootram.RAM0.INIT_32=256'hf0130000_3273ffff_32730001_be32ffec_aa43000a_f0730000_90630060_10b60000; +defparam bootram.RAM0.INIT_33=256'h10c50000_30210028_b60f0008_eae10024_eac10020_ea61001c_e9e10000_10770000; +defparam bootram.RAM0.INIT_34=256'h3021ffe4_3021001c_b60f0008_e9e10000_10a00000_b9f4ff94_f9e10000_3021ffe4; +defparam bootram.RAM0.INIT_35=256'hf9e10000_3021ffe4_3021001c_b60f0008_e9e10000_80000000_b9f40448_f9e10000; +defparam bootram.RAM0.INIT_36=256'hfac10020_fa61001c_3021ffdc_3021001c_b60f0008_e9e10000_10a00000_b9f4ffdc; +defparam bootram.RAM0.INIT_37=256'hb9f40324_10b60000_12c50000_be060024_90c30060_12660000_e0660000_f9e10000; +defparam bootram.RAM0.INIT_38=256'heac10020_ea61001c_e9e10000_10b60000_be26fff0_90c30060_e0730000_32730001; +defparam bootram.RAM0.INIT_39=256'h12c50000_b9f4ff9c_f9e10000_fac1001c_3021ffe0_30210024_b60f0008_10600000; +defparam bootram.RAM0.INIT_3A=256'h30210020_b60f0008_10600000_eac1001c_e9e10000_30c0000a_b9f402dc_10b60000; +defparam bootram.RAM0.INIT_3B=256'h3021001c_b60f0008_e9e10000_10a00000_b9f4ffc0_f9e10000_3021ffe4_10c50000; +defparam bootram.RAM0.INIT_3C=256'h3021001c_b60f0008_e9e10000_10a00000_b9f4ff48_f9e10000_3021ffe4_10c50000; +defparam bootram.RAM0.INIT_3D=256'h3021ffe0_3021001c_b60f0008_e9e10000_30c0000a_b9f40278_f9e10000_3021ffe4; +defparam bootram.RAM0.INIT_3E=256'he9e10000_10760000_10d60000_b9f40250_f9e10000_10a00000_12c50000_fac1001c; +defparam bootram.RAM0.INIT_3F=256'h12c60000_b9f40228_f9e10000_fac1001c_3021ffe0_30210020_b60f0008_eac1001c; +defparam bootram.RAM1.INIT_00=256'hb9f401b8_f9e10000_3021ffe4_30210020_b60f0008_eac1001c_e9e10000_10760000; +defparam bootram.RAM1.INIT_01=256'hb0000000_9404c001_ac870002_94e08001_3021001c_b60f0008_e9e10000_80000000; +defparam bootram.RAM1.INIT_02=256'hf860f81c_b0000000_f860200c_80633000_84632000_84c62800_a866ffff_e880f81c; +defparam bootram.RAM1.INIT_03=256'h94608001_80000000_b60f0008_9404c001_80843800_ac840002_94808001_a4e70002; +defparam bootram.RAM1.INIT_04=256'hf8a0f81c_b0000000_f8a0200c_88a52000_e880f81c_b0000000_9406c001_acc30002; +defparam bootram.RAM1.INIT_05=256'h94e08001_80000000_b60f0008_9404c001_80841800_ac840002_94808001_a4630002; +defparam bootram.RAM1.INIT_06=256'h80633000_84632000_84c62800_a866ffff_e880f820_b0000000_9404c001_ac870002; +defparam bootram.RAM1.INIT_07=256'h9404c001_80843800_ac840002_94808001_a4e70002_f860f820_b0000000_f8602020; +defparam bootram.RAM1.INIT_08=256'hfac10020_f9e10000_fb010028_fae10024_fa61001c_3021ffd4_80000000_b60f0008; +defparam bootram.RAM1.INIT_09=256'h32600001_be670038_12660000_be060040_90c30060_13050000_12e60000_e0660000; +defparam bootram.RAM1.INIT_0A=256'hc0779800_10b80000_b9f400cc_10730000_be120028_16569800_32c70001_b8100014; +defparam bootram.RAM1.INIT_0B=256'heac10020_ea61001c_e9e10000_10730000_3273ffff_32730001_be26ffe4_90c30060; +defparam bootram.RAM1.INIT_0C=256'hb9f40084_f9e10000_10a00000_3021ffe4_3021002c_b60f0008_eb010028_eae10024; +defparam bootram.RAM1.INIT_0D=256'h10c63000_80000000_b60f0008_f0c5192c_3021001c_b60f0008_e9e10000_30c0000a; +defparam bootram.RAM1.INIT_0E=256'hf9e10000_fa61001c_3021ffe0_80000000_b60f0008_f8653700_64a50405_e4661660; +defparam bootram.RAM1.INIT_0F=256'h32730001_10b30000_e0d3165c_90c60060_b9f4ffc4_10b30000_e0d3192c_12600000; +defparam bootram.RAM1.INIT_10=256'h30210020_b60f0008_ea61001c_e9e10000_bc32ffd8_aa530003_90c60060_b9f4ffbc; +defparam bootram.RAM1.INIT_11=256'h12650000_be120030_aa46000a_12c60000_f9e10000_fac10020_fa61001c_3021ffdc; +defparam bootram.RAM1.INIT_12=256'heac10020_ea61001c_e9e10000_fac5000c_bc03fffc_e8650004_30a33700_64730405; +defparam bootram.RAM1.INIT_13=256'hb810ffc8_30c0000d_b9f4ffac_bc32ffd0_aa430001_e065192c_30210024_b60f0008; +defparam bootram.RAM1.INIT_14=256'hbe120030_aa46000a_12c60000_f9e10000_fac10020_fa61001c_3021ffdc_64730405; +defparam bootram.RAM1.INIT_15=256'hea61001c_e9e10000_fac3000c_bc040008_e8830004_30633700_64730405_12650000; +defparam bootram.RAM1.INIT_16=256'hb9f4ff44_30c0000d_be32ffd0_aa430001_e065192c_30210024_b60f0008_eac10020; +defparam bootram.RAM1.INIT_17=256'he8650010_bc03fffc_e8650008_30a53700_64a50405_64730405_b810ffc4_80000000; +defparam bootram.RAM1.INIT_18=256'he8850008_e8650010_bc030014_e8650008_30a53700_64a50405_80000000_b60f0008; +defparam bootram.RAM1.INIT_19=256'hf9e10000_fac10020_3021ffdc_64a50405_80000000_b60f0008_90630060_be24fff8; +defparam bootram.RAM1.INIT_1A=256'hbe120034_aa53012d_b8000010_32600001_be230040_e8760008_32c53700_fa61001c; +defparam bootram.RAM1.INIT_1B=256'h3240012b_3273ffff_32730001_be03ffe8_e8760008_30a00001_b9f40040_3060ffff; +defparam bootram.RAM1.INIT_1C=256'hb60f0008_eac10020_ea61001c_e9e10000_e8760010_3060ffff_be52000c_16539001; +defparam bootram.RAM1.INIT_1D=256'hbe650048_bc430054_e8601930_bc260054_a4c30000_b0008000_e8603324_30210024; +defparam bootram.RAM1.INIT_1E=256'h80000000_80000000_80000000_80000000_10800000_bc660030_e8c01930_10660000; +defparam bootram.RAM1.INIT_1F=256'h16432800_30630001_bc32ffdc_16443000_30840001_80000000_80000000_80000000; +defparam bootram.RAM1.INIT_20=256'hf8801930_e483166c_10631800_a4630007_e8603324_80000000_b60f0008_bc32ffc8; +defparam bootram.RAM1.INIT_21=256'h3065ffc9_a46300ff_be520024_16459001_3240005a_3065ffa9_90a50060_b800ff9c; +defparam bootram.RAM1.INIT_22=256'h80000000_b60f0008_a46400ff_3085ffd0_be52000c_16459001_32400039_a46300ff; +defparam bootram.RAM1.INIT_23=256'hfae10024_fac10020_fa61001c_f9e10000_fb610034_13250000_fb21002c_3021ffc8; +defparam bootram.RAM1.INIT_24=256'h10650000_30a0ffff_be120034_aa43003a_13660000_e0790000_fb410030_fb010028; +defparam bootram.RAM1.INIT_25=256'heb610034_eb410030_eb21002c_eb010028_eae10024_eac10020_ea61001c_e9e10000; +defparam bootram.RAM1.INIT_26=256'hbe04001c_90840060_30650001_c085c800_30a00001_e8c01934_30210038_b60f0008; +defparam bootram.RAM1.INIT_27=256'hb9f4ff28_e0b90001_30a0fffe_b810ffac_bc23ffe4_a4630044_c0662000_a4a300ff; +defparam bootram.RAM1.INIT_28=256'h10791800_fa7b0004_10739800_12761800_66c30404_b9f4ff1c_e0b90002_80000000; +defparam bootram.RAM1.INIT_29=256'he0b90003_13530000_b9f4fef0_e0b90005_30a0fffd_be38ff74_93040060_e083000b; +defparam bootram.RAM1.INIT_2A=256'hb9f4fec8_64630408_e0b90006_66c3040c_b9f4fed8_e0b90004_66e30404_b9f4fee4; +defparam bootram.RAM1.INIT_2B=256'he0b90008_80000000_b9f4feb0_e0b90007_fafb0008_12f7b000_12d61800_12d61800; +defparam bootram.RAM1.INIT_2C=256'hea7b000c_13580000_10f30000_be130060_f07b0000_1063b000_66c30404_b9f4fea4; +defparam bootram.RAM1.INIT_2D=256'hb9f4fe68_e0b60001_12d9b000_b9f4fe74_c0b6c800_a6d600ff_32d60009_12d8c000; +defparam bootram.RAM1.INIT_2E=256'ha70400ff_c073c000_30980001_e8fb0004_ea7b000c_d0789800_1063b800_66e30404; +defparam bootram.RAM1.INIT_2F=256'h64760008_12e73800_e09b0000_eadb0008_a74300ff_be52ffb8_1647c003_107a1800; +defparam bootram.RAM1.INIT_30=256'he0b7000a_12d61800_b9f4fe10_107a1800_12c7b000_10632000_e0b70009_12f9b800; +defparam bootram.RAM1.INIT_31=256'hbe32fe60_1643b000_a46300ff_a6d600ff_1063c000_16d60000_67030404_b9f4fe04; +defparam bootram.RAM1.INIT_32=256'h80000000_b60f0008_bc23fff8_a4630100_e8603b10_10a00000_b810fe58_30a0fffb; +defparam bootram.RAM1.INIT_33=256'hbc23fff8_a4630100_e8603b10_a4a500ff_80884800_a1292000_a508007f_a5290600; +defparam bootram.RAM1.INIT_34=256'h10650000_be050018_f8803b10_a0840100_f8603b18_a46600ff_f8803b10_f8e03b00; +defparam bootram.RAM1.INIT_35=256'h10e60000_10c00000_80000000_b60f0008_e8603b00_bc23fff8_a4630100_e8603b10; +defparam bootram.RAM1.INIT_36=256'hb9f4ff84_f8603b14_30600001_31200400_31000008_10a00000_f9e10000_3021ffe4; +defparam bootram.RAM1.INIT_37=256'hfa61002c_12c50000_fac10030_3021ffc4_3021001c_b60f0008_e9e10000_80000000; +defparam bootram.RAM1.INIT_38=256'hf8003b18_30600400_12670000_b9f4ff3c_fae10034_13060000_f9e10000_fb010038; +defparam bootram.RAM1.INIT_39=256'h30800428_f8603b18_30600001_fac03b00_f8603b04_3060000b_66d60408_f8603b10; +defparam bootram.RAM1.INIT_3A=256'h12e00000_12d30000_be18009c_80000000_b9f4ff00_f8603b10_30600528_f8803b10; +defparam bootram.RAM1.INIT_3B=256'he8803b0c_80000000_b9f4fed8_f8803b10_30800500_f8603b10_30600400_3261001c; +defparam bootram.RAM1.INIT_3C=256'hf8610028_e8603b00_f8810024_e8803b04_f8610020_e8603b08_f881001c_14b7c000; +defparam bootram.RAM1.INIT_3D=256'h30840001_d0762000_c0732000_30a00010_10800000_beb20034_16459003_22400010; +defparam bootram.RAM1.INIT_3E=256'hbc25ffd8_b800ff8c_12d62800_beb20020_1658b803_12f72800_bc32fff0_16442800; +defparam bootram.RAM1.INIT_3F=256'heac10030_ea61002c_e9e10000_f8003b18_12d62800_be52ff7c_1658b803_12f72800; +defparam bootram.RAM2.INIT_00=256'h30a00001_3021ffe4_30e00000_b0009f00_3021003c_b60f0008_eb010038_eae10034; +defparam bootram.RAM2.INIT_01=256'ha463ffff_b00000ff_e9e10000_31200400_b9f4fe34_f9e10000_31000020_30c00001; +defparam bootram.RAM2.INIT_02=256'he9e10000_bc030010_f9e10000_3021ffe4_e860f828_b0000000_3021001c_b60f0008; +defparam bootram.RAM2.INIT_03=256'hbe120010_aa440020_a48400ff_64830008_80000000_b9f4ffa8_3021001c_b60f0008; +defparam bootram.RAM2.INIT_04=256'h16439001_32400018_bcb2fff0_16439001_32400015_80000000_b9f40170_a46300ff; +defparam bootram.RAM2.INIT_05=256'hf9e10000_3021ffe4_e860f824_b0000000_b800ffb0_f860f828_b0000000_bc52ffe4; +defparam bootram.RAM2.INIT_06=256'ha48400ff_64830008_80000000_b9f4ff40_3021001c_b60f0008_e9e10000_bc030010; +defparam bootram.RAM2.INIT_07=256'hbcb2fff0_16459001_32400015_80000000_b9f40108_a4a300ff_be120010_aa440020; +defparam bootram.RAM2.INIT_08=256'hf860f824_b0000000_f8a0f828_b0000000_e0651666_bc52ffe4_16459001_32400018; +defparam bootram.RAM2.INIT_09=256'hb9f40174_f9e10000_10b60000_10c50000_12c00000_fac1001c_3021ffe0_b800ffa4; +defparam bootram.RAM2.INIT_0A=256'h3021ffd4_30210020_b60f0008_eac1001c_e9e10000_80000000_99fcb000_30e00024; +defparam bootram.RAM2.INIT_0B=256'h30c01680_10b60000_30c00006_b9f4fd80_f9e10000_10f60000_32c1001c_fac10028; +defparam bootram.RAM2.INIT_0C=256'h6464001f_eac10028_e9e10000_a884ffff_80841800_14830000_30e00006_b9f400b0; +defparam bootram.RAM2.INIT_0D=256'hb9f4fd34_f9e10000_10f60000_32c1001c_fac10028_3021ffd4_3021002c_b60f0008; +defparam bootram.RAM2.INIT_0E=256'ha884ffff_80841800_14830000_30e00006_b9f40064_30c01688_10b60000_30c00006; +defparam bootram.RAM2.INIT_0F=256'hf9e10000_3021ffe4_30a01690_3021002c_b60f0008_6464001f_eac10028_e9e10000; +defparam bootram.RAM2.INIT_10=256'h80000000_b6910000_80000000_b6110000_30a0ffff_b9f4ee68_80000000_b9f4f580; +defparam bootram.RAM2.INIT_11=256'h80653000_beb2005c_16479003_22400003_80000000_b60f0008_80000000_b60f0008; +defparam bootram.RAM2.INIT_12=256'h30a50004_30e7fffc_bc320040_16432000_e8660000_e8850000_bc230050_a4630003; +defparam bootram.RAM2.INIT_13=256'he1050000_bc120028_aa47ffff_30e7ffff_30c60004_be52ffe0_16479003_22400003; +defparam bootram.RAM2.INIT_14=256'hbc32ffe0_aa47ffff_30e7ffff_30c60001_30a50001_be320020_16434000_e0660000; +defparam bootram.RAM2.INIT_15=256'h10850000_beb20018_16479003_2240000f_14634000_b60f0008_10600000_b60f0008; +defparam bootram.RAM2.INIT_16=256'he0660000_10e72000_11040000_bc070024_11050000_be030034_a4630003_80662800; +defparam bootram.RAM2.INIT_17=256'he8860000_10650000_b60f0008_30c60001_be32fff0_16474000_31080001_f0680000; +defparam bootram.RAM2.INIT_18=256'h30c60010_e866000c_f8880008_e8860008_f8680004_e8660004_f8880000_30e7fff0; +defparam bootram.RAM2.INIT_19=256'hbcb2002c_16479003_22400003_31080010_be52ffd0_16479003_2240000f_f868000c; +defparam bootram.RAM2.INIT_1A=256'h30840004_be52ffec_16479003_22400003_d8682000_30e7fffc_c8662000_10800000; +defparam bootram.RAM2.INIT_1B=256'hf9e10000_fa61001c_3021ffe0_e86013f0_10880000_b810ff68_11044000_10c43000; +defparam bootram.RAM2.INIT_1C=256'hbc32fff0_aa43ffff_e8730000_3273fffc_99fc1800_bc120018_aa43ffff_326013f0; +defparam bootram.RAM2.INIT_1D=256'h80000000_b9f4ed20_d9e00800_3021fff8_30210020_b60f0008_ea61001c_e9e10000; +defparam bootram.RAM2.INIT_1E=256'hb9f4ec98_d9e00800_3021fff8_30210008_b60f0008_c9e00800_80000000_b9f4ffb0; +defparam bootram.RAM2.INIT_1F=256'h00000000_ffffffff_00000000_ffffffff_30210008_b60f0008_c9e00800_80000000; +defparam bootram.RAM2.INIT_20=256'h65642120_7475726e_65207265_696d6167_61696e20_523a206d_4552524f_4f4b0000; +defparam bootram.RAM2.INIT_21=256'h55535250_4e4f4b00_64652e00_64206d6f_206c6f61_49484558_20696e20_4261636b; +defparam bootram.RAM2.INIT_22=256'h50322b20_20555352_74696e67_53746172_720a0000_6f616465_6f6f746c_322b2062; +defparam bootram.RAM2.INIT_23=256'h6e206672_65747572_523a2072_4552524f_2e000000_6d6f6465_61666520_696e2073; +defparam bootram.RAM2.INIT_24=256'h206e6576_6f756c64_73207368_20546869_72616d21_70726f67_61696e20_6f6d206d; +defparam bootram.RAM2.INIT_25=256'h69726d77_66652066_6f207361_523a206e_4552524f_6e210000_61707065_65722068; +defparam bootram.RAM2.INIT_26=256'h62726963_6d206120_20492061_626c652e_61696c61_65206176_696d6167_61726520; +defparam bootram.RAM2.INIT_27=256'h2052414d_5820746f_20494845_6c6f6164_20746f20_66726565_65656c20_6b2e2046; +defparam bootram.RAM2.INIT_28=256'h6374696f_726f6475_69642070_2076616c_20666f72_6b696e67_43686563_2e000000; +defparam bootram.RAM2.INIT_29=256'h74696f6e_6f647563_64207072_56616c69_2e2e2e00_6d616765_47412069_6e204650; +defparam bootram.RAM2.INIT_2A=256'h6720746f_7074696e_7474656d_642e2041_666f756e_61676520_4120696d_20465047; +defparam bootram.RAM2.INIT_2B=256'h46504741_696f6e20_64756374_2070726f_616c6964_4e6f2076_742e0000_20626f6f; +defparam bootram.RAM2.INIT_2C=256'h6c6f6164_20746f20_74696e67_74656d70_2e0a4174_6f756e64_67652066_20696d61; +defparam bootram.RAM2.INIT_2D=256'h64207072_56616c69_2e2e2e00_77617265_6669726d_696f6e20_64756374_2070726f; +defparam bootram.RAM2.INIT_2E=256'h64696e67_204c6f61_756e642e_6520666f_6d776172_20666972_74696f6e_6f647563; +defparam bootram.RAM2.INIT_2F=256'h70726f67_61696e20_6f6d206d_6e206672_65747572_523a2052_4552524f_2e2e2e00; +defparam bootram.RAM2.INIT_30=256'h6e210000_61707065_65722068_206e6576_6f756c64_73207368_20546869_72616d21; +defparam bootram.RAM2.INIT_31=256'h20666f75_77617265_6669726d_696f6e20_64756374_2070726f_616c6964_4e6f2076; +defparam bootram.RAM2.INIT_32=256'h05050400_2e2e2e00_77617265_6669726d_61666520_6e672073_54727969_6e642e20; +defparam bootram.RAM2.INIT_33=256'h10101200_06820594_09c407d0_13880d05_00002710_01b200d9_05160364_14580a2c; +defparam bootram.RAM2.INIT_34=256'h00202020_00000000_6f72740a_0a0a6162_aa990000_ffffffff_b8080000_b0000000; +defparam bootram.RAM2.INIT_35=256'h20881010_20202020_20202020_20202020_20202020_28282820_20202828_20202020; +defparam bootram.RAM2.INIT_36=256'h10104141_10101010_04040410_04040404_10040404_10101010_10101010_10101010; +defparam bootram.RAM2.INIT_37=256'h10104242_10101010_01010101_01010101_01010101_01010101_01010101_41414141; +defparam bootram.RAM2.INIT_38=256'h20000000_10101010_02020202_02020202_02020202_02020202_02020202_42424242; +defparam bootram.RAM2.INIT_39=256'h00000000_00000000_00000000_00000000_00000000_00000000_00000000_00000000; +defparam bootram.RAM2.INIT_3A=256'h00000000_00000000_00000000_00000000_00000000_00000000_00000000_00000000; +defparam bootram.RAM2.INIT_3B=256'h00000000_00000000_00000000_00000000_00000000_00000000_00000000_00000000; +defparam bootram.RAM2.INIT_3C=256'h00000000_00000000_00000000_00000000_00000000_00000000_00000000_00000000; +defparam bootram.RAM2.INIT_3D=256'h00000000_00000000_00000000_00000000_00000000_00000000_00000000_00000000; +defparam bootram.RAM2.INIT_3E=256'h00000000_00000000_00000000_00000000_00000000_00000000_00000000_00000000; +defparam bootram.RAM2.INIT_3F=256'h00000000_00000000_00000000_00000000_00000000_00000000_00000000_00000000; +defparam bootram.RAM3.INIT_00=256'h00000000_00000000_00000000_00000000_00000000_00000000_00000000_00000000; +defparam bootram.RAM3.INIT_01=256'h20202020_20202020_20202020_20202020_28282020_20282828_20202020_20202020; +defparam bootram.RAM3.INIT_02=256'h10101010_04041010_04040404_04040404_10101010_10101010_10101010_88101010; +defparam bootram.RAM3.INIT_03=256'h10101010_01010110_01010101_01010101_01010101_01010101_41414101_10414141; +defparam bootram.RAM3.INIT_04=256'h10101020_02020210_02020202_02020202_02020202_02020202_42424202_10424242; +defparam bootram.RAM3.INIT_05=256'h00000000_00000000_00000000_00000000_00000000_00000000_00000000_00000000; +defparam bootram.RAM3.INIT_06=256'h00000000_00000000_00000000_00000000_00000000_00000000_00000000_00000000; +defparam bootram.RAM3.INIT_07=256'h00000000_00000000_00000000_00000000_00000000_00000000_00000000_00000000; +defparam bootram.RAM3.INIT_08=256'h00000000_00000000_00000000_00000000_00000000_00000000_00000000_00000000; +defparam bootram.RAM3.INIT_09=256'h00000000_00000000_00001820_ffffffff_01010100_000013fc_00000000_00000000; +defparam bootram.RAM3.INIT_0A=256'h00000000_00000000_00000000_00000000_00000000_00000000_00000000_00000000; ram_harvard2 #(.AWIDTH(15),.RAM_SIZE(32768)) sys_ram(.wb_clk_i(wb_clk),.wb_rst_i(wb_rst), -- cgit v1.2.3 From dfbc0653beabe4ee1b9e8816a1932734d12b89d2 Mon Sep 17 00:00:00 2001 From: Matt Ettus Date: Thu, 7 Oct 2010 10:55:17 -0700 Subject: separate the bootloader image into another file --- usrp2/top/u2plus/bootloader.rmi | 204 +++++++++++++++++++++++++++++++++++++++ usrp2/top/u2plus/u2plus_core.v | 205 +--------------------------------------- 2 files changed, 205 insertions(+), 204 deletions(-) create mode 100644 usrp2/top/u2plus/bootloader.rmi diff --git a/usrp2/top/u2plus/bootloader.rmi b/usrp2/top/u2plus/bootloader.rmi new file mode 100644 index 000000000..02ec11060 --- /dev/null +++ b/usrp2/top/u2plus/bootloader.rmi @@ -0,0 +1,204 @@ +////bootloader 10/5/10 for 32/64Mbit FLASH +defparam bootram.RAM0.INIT_00=256'h00000000_00000000_00000000_b80801c0_00000000_b8081210_00000000_b8080050; +defparam bootram.RAM0.INIT_01=256'h00000000_00000000_00000000_00000000_00000000_00000000_00000000_b8081218; +defparam bootram.RAM0.INIT_02=256'h3020ffe0_b0000000_30401920_31a01948_00000000_00000000_00000000_00000000; +defparam bootram.RAM0.INIT_03=256'h3021ffe4_e060f800_b0000000_b8000000_30a30000_b9f4047c_80000000_b9f400cc; +defparam bootram.RAM0.INIT_04=256'he8830000_e8601928_80000000_99fc2000_f8601928_b8000044_bc030014_f9e10000; +defparam bootram.RAM0.INIT_05=256'h80000000_99fc1800_30a0193c_bc030010_30600000_b0000000_30630004_be24ffec; +defparam bootram.RAM0.INIT_06=256'h30600000_b0000000_3021001c_b60f0008_e9e10000_f060f800_b0000000_30600001; +defparam bootram.RAM0.INIT_07=256'h80000000_99fc1800_bc03000c_30c0f804_b0000000_30a0193c_f9e10000_3021ffe4; +defparam bootram.RAM0.INIT_08=256'h80000000_99fc2000_bc04000c_30a01940_bc030014_30800000_b0000000_e8601940; +defparam bootram.RAM0.INIT_09=256'h06463800_20e01948_20c01948_f9e10000_2021ffec_3021001c_b60f0008_e9e10000; +defparam bootram.RAM0.INIT_0A=256'hb0000000_20c0f800_b0000000_bc92fff4_06463800_20c60004_f8060000_bc720014; +defparam bootram.RAM0.INIT_0B=256'hb9f410ac_bc92fff4_06463800_20c60004_f8060000_bc720014_06463800_20e0f82c; +defparam bootram.RAM0.INIT_0C=256'h32630000_20a00000_b9f4014c_20e00000_20c00000_80000000_b9f4122c_80000000; +defparam bootram.RAM0.INIT_0D=256'h20210014_b60f0008_30730000_c9e10000_80000000_b9f41078_80000000_b9f41234; +defparam bootram.RAM0.INIT_0E=256'he9e10000_f9610004_fa410010_95608001_fa21000c_f9610008_f9e10000_3021ffec; +defparam bootram.RAM0.INIT_0F=256'hbc050018_30210014_b62e0000_ea410010_ea21000c_e9610008_940bc001_e9610004; +defparam bootram.RAM0.INIT_10=256'h3021ff2c_80000000_b60f0008_bc32fff4_16432800_30630001_80000000_10600000; +defparam bootram.RAM0.INIT_11=256'hb9f40440_32c1001c_3261004c_f8610028_f9e10000_fac100d0_fa6100cc_3061002c; +defparam bootram.RAM0.INIT_12=256'h22407fff_e8610024_bc230038_30a01438_10b30000_b9f40a18_10d60000_10b30000; +defparam bootram.RAM0.INIT_13=256'h30a01438_bc120040_aa430001_30a01400_e061001c_10a30000_be520034_16439003; +defparam bootram.RAM0.INIT_14=256'he8e10020_e8c10028_b800ffa8_80000000_b9f404d4_b800ffb4_80000000_b9f404e0; +defparam bootram.RAM0.INIT_15=256'h80000000_b9f404a8_b800ff88_80000000_b9f404b4_30a01400_80000000_b9f41010; +defparam bootram.RAM0.INIT_16=256'hb800ff60_80000000_b9f4048c_30a01404_80000000_b9f40e5c_30a08000_b0000000; +defparam bootram.RAM0.INIT_17=256'h30a0a120_b0000007_9403c001_ac640002_94808001_fa61001c_f9e10000_3021ffe0; +defparam bootram.RAM0.INIT_18=256'hb9f40b9c_80000000_b9f406c0_f800200c_80000000_b9f4fef4_f860200c_306000ff; +defparam bootram.RAM0.INIT_19=256'h30a01504_bc04013c_a4842000_e8803334_80000000_b9f40438_30a0143c_80000000; +defparam bootram.RAM0.INIT_1A=256'h30a01568_bc23010c_80000000_b9f40e58_30a00000_b0000018_80000000_b9f40420; +defparam bootram.RAM0.INIT_1B=256'h30a015b8_bc030058_80000000_b9f40dec_30a00000_b0000030_80000000_b9f40400; +defparam bootram.RAM0.INIT_1C=256'h30c07c00_b9f40b58_30a00000_b0000030_30e08000_b0000000_80000000_b9f403e0; +defparam bootram.RAM0.INIT_1D=256'he9e10000_80000000_b9f403ac_30a015e4_80000000_b9f40d7c_30a08000_b0000000; +defparam bootram.RAM0.INIT_1E=256'hb000003f_80000000_b9f4038c_30a01620_30210020_b60f0008_30600001_ea61001c; +defparam bootram.RAM0.INIT_1F=256'h80000000_b9f40368_30a014ac_12630000_be230030_80000000_b9f40d78_30a00000; +defparam bootram.RAM0.INIT_20=256'hb0000000_30210020_b60f0008_ea61001c_e9e10000_10730000_80000000_b9f4fe1c; +defparam bootram.RAM0.INIT_21=256'hb9f40ce8_30a08000_b0000000_30c07c00_b9f40ac4_30a00000_b000003f_30e08000; +defparam bootram.RAM0.INIT_22=256'hb60f0008_30600001_ea61001c_e9e10000_80000000_b9f40318_30a01470_80000000; +defparam bootram.RAM0.INIT_23=256'h80000000_b9f402e8_30a01450_b800feec_80000000_b9f402f8_30a01530_30210020; +defparam bootram.RAM0.INIT_24=256'h80000000_b9f402c8_30a014ac_bc23001c_80000000_b9f40cd4_30a00000_b000003f; +defparam bootram.RAM0.INIT_25=256'hb9f40a34_30a00000_b000003f_30e08000_b0000000_b800fe94_80000000_b9f4fd7c; +defparam bootram.RAM0.INIT_26=256'h80000000_b9f40288_30a01470_80000000_b9f40c58_30a08000_b0000000_30c07c00; +defparam bootram.RAM0.INIT_27=256'h3021ffd0_80000000_b60f0008_80000000_b9f4fb84_f9e10000_3021ffe4_b800fe5c; +defparam bootram.RAM0.INIT_28=256'h13260000_12e70000_13050000_12660000_fb21002c_fb010028_fae10024_fa61001c; +defparam bootram.RAM0.INIT_29=256'hbcb2002c_16572001_bc120030_aa43ffff_12c00000_b810001c_f9e10000_fac10020; +defparam bootram.RAM0.INIT_2A=256'hbe32ffd4_aa43000a_f0730000_10960000_90630060_10b80000_b9f405ec_32730001; +defparam bootram.RAM0.INIT_2B=256'heae10024_eac10020_ea61001c_e9e10000_10640000_f0130000_14999800_32d60001; +defparam bootram.RAM0.INIT_2C=256'hfb010028_fae10024_fa61001c_3021ffd0_30210030_b60f0008_eb21002c_eb010028; +defparam bootram.RAM0.INIT_2D=256'hb8100014_f9e10000_fac10020_13260000_12e70000_13050000_12660000_fb21002c; +defparam bootram.RAM0.INIT_2E=256'h10960000_90630060_10b80000_b9f4051c_32730001_bcb2002c_16572001_12c00000; +defparam bootram.RAM0.INIT_2F=256'he9e10000_10640000_f0130000_14999800_32d60001_be32ffdc_aa43000a_f0730000; +defparam bootram.RAM0.INIT_30=256'h3021ffd8_30210030_b60f0008_eb21002c_eb010028_eae10024_eac10020_ea61001c; +defparam bootram.RAM0.INIT_31=256'hb9f404b0_12660000_f9e10000_12e60000_12c50000_fae10024_fac10020_fa61001c; +defparam bootram.RAM0.INIT_32=256'hf0130000_3273ffff_32730001_be32ffec_aa43000a_f0730000_90630060_10b60000; +defparam bootram.RAM0.INIT_33=256'h10c50000_30210028_b60f0008_eae10024_eac10020_ea61001c_e9e10000_10770000; +defparam bootram.RAM0.INIT_34=256'h3021ffe4_3021001c_b60f0008_e9e10000_10a00000_b9f4ff94_f9e10000_3021ffe4; +defparam bootram.RAM0.INIT_35=256'hf9e10000_3021ffe4_3021001c_b60f0008_e9e10000_80000000_b9f40448_f9e10000; +defparam bootram.RAM0.INIT_36=256'hfac10020_fa61001c_3021ffdc_3021001c_b60f0008_e9e10000_10a00000_b9f4ffdc; +defparam bootram.RAM0.INIT_37=256'hb9f40324_10b60000_12c50000_be060024_90c30060_12660000_e0660000_f9e10000; +defparam bootram.RAM0.INIT_38=256'heac10020_ea61001c_e9e10000_10b60000_be26fff0_90c30060_e0730000_32730001; +defparam bootram.RAM0.INIT_39=256'h12c50000_b9f4ff9c_f9e10000_fac1001c_3021ffe0_30210024_b60f0008_10600000; +defparam bootram.RAM0.INIT_3A=256'h30210020_b60f0008_10600000_eac1001c_e9e10000_30c0000a_b9f402dc_10b60000; +defparam bootram.RAM0.INIT_3B=256'h3021001c_b60f0008_e9e10000_10a00000_b9f4ffc0_f9e10000_3021ffe4_10c50000; +defparam bootram.RAM0.INIT_3C=256'h3021001c_b60f0008_e9e10000_10a00000_b9f4ff48_f9e10000_3021ffe4_10c50000; +defparam bootram.RAM0.INIT_3D=256'h3021ffe0_3021001c_b60f0008_e9e10000_30c0000a_b9f40278_f9e10000_3021ffe4; +defparam bootram.RAM0.INIT_3E=256'he9e10000_10760000_10d60000_b9f40250_f9e10000_10a00000_12c50000_fac1001c; +defparam bootram.RAM0.INIT_3F=256'h12c60000_b9f40228_f9e10000_fac1001c_3021ffe0_30210020_b60f0008_eac1001c; +defparam bootram.RAM1.INIT_00=256'hb9f401b8_f9e10000_3021ffe4_30210020_b60f0008_eac1001c_e9e10000_10760000; +defparam bootram.RAM1.INIT_01=256'hb0000000_9404c001_ac870002_94e08001_3021001c_b60f0008_e9e10000_80000000; +defparam bootram.RAM1.INIT_02=256'hf860f81c_b0000000_f860200c_80633000_84632000_84c62800_a866ffff_e880f81c; +defparam bootram.RAM1.INIT_03=256'h94608001_80000000_b60f0008_9404c001_80843800_ac840002_94808001_a4e70002; +defparam bootram.RAM1.INIT_04=256'hf8a0f81c_b0000000_f8a0200c_88a52000_e880f81c_b0000000_9406c001_acc30002; +defparam bootram.RAM1.INIT_05=256'h94e08001_80000000_b60f0008_9404c001_80841800_ac840002_94808001_a4630002; +defparam bootram.RAM1.INIT_06=256'h80633000_84632000_84c62800_a866ffff_e880f820_b0000000_9404c001_ac870002; +defparam bootram.RAM1.INIT_07=256'h9404c001_80843800_ac840002_94808001_a4e70002_f860f820_b0000000_f8602020; +defparam bootram.RAM1.INIT_08=256'hfac10020_f9e10000_fb010028_fae10024_fa61001c_3021ffd4_80000000_b60f0008; +defparam bootram.RAM1.INIT_09=256'h32600001_be670038_12660000_be060040_90c30060_13050000_12e60000_e0660000; +defparam bootram.RAM1.INIT_0A=256'hc0779800_10b80000_b9f400cc_10730000_be120028_16569800_32c70001_b8100014; +defparam bootram.RAM1.INIT_0B=256'heac10020_ea61001c_e9e10000_10730000_3273ffff_32730001_be26ffe4_90c30060; +defparam bootram.RAM1.INIT_0C=256'hb9f40084_f9e10000_10a00000_3021ffe4_3021002c_b60f0008_eb010028_eae10024; +defparam bootram.RAM1.INIT_0D=256'h10c63000_80000000_b60f0008_f0c5192c_3021001c_b60f0008_e9e10000_30c0000a; +defparam bootram.RAM1.INIT_0E=256'hf9e10000_fa61001c_3021ffe0_80000000_b60f0008_f8653700_64a50405_e4661660; +defparam bootram.RAM1.INIT_0F=256'h32730001_10b30000_e0d3165c_90c60060_b9f4ffc4_10b30000_e0d3192c_12600000; +defparam bootram.RAM1.INIT_10=256'h30210020_b60f0008_ea61001c_e9e10000_bc32ffd8_aa530003_90c60060_b9f4ffbc; +defparam bootram.RAM1.INIT_11=256'h12650000_be120030_aa46000a_12c60000_f9e10000_fac10020_fa61001c_3021ffdc; +defparam bootram.RAM1.INIT_12=256'heac10020_ea61001c_e9e10000_fac5000c_bc03fffc_e8650004_30a33700_64730405; +defparam bootram.RAM1.INIT_13=256'hb810ffc8_30c0000d_b9f4ffac_bc32ffd0_aa430001_e065192c_30210024_b60f0008; +defparam bootram.RAM1.INIT_14=256'hbe120030_aa46000a_12c60000_f9e10000_fac10020_fa61001c_3021ffdc_64730405; +defparam bootram.RAM1.INIT_15=256'hea61001c_e9e10000_fac3000c_bc040008_e8830004_30633700_64730405_12650000; +defparam bootram.RAM1.INIT_16=256'hb9f4ff44_30c0000d_be32ffd0_aa430001_e065192c_30210024_b60f0008_eac10020; +defparam bootram.RAM1.INIT_17=256'he8650010_bc03fffc_e8650008_30a53700_64a50405_64730405_b810ffc4_80000000; +defparam bootram.RAM1.INIT_18=256'he8850008_e8650010_bc030014_e8650008_30a53700_64a50405_80000000_b60f0008; +defparam bootram.RAM1.INIT_19=256'hf9e10000_fac10020_3021ffdc_64a50405_80000000_b60f0008_90630060_be24fff8; +defparam bootram.RAM1.INIT_1A=256'hbe120034_aa53012d_b8000010_32600001_be230040_e8760008_32c53700_fa61001c; +defparam bootram.RAM1.INIT_1B=256'h3240012b_3273ffff_32730001_be03ffe8_e8760008_30a00001_b9f40040_3060ffff; +defparam bootram.RAM1.INIT_1C=256'hb60f0008_eac10020_ea61001c_e9e10000_e8760010_3060ffff_be52000c_16539001; +defparam bootram.RAM1.INIT_1D=256'hbe650048_bc430054_e8601930_bc260054_a4c30000_b0008000_e8603324_30210024; +defparam bootram.RAM1.INIT_1E=256'h80000000_80000000_80000000_80000000_10800000_bc660030_e8c01930_10660000; +defparam bootram.RAM1.INIT_1F=256'h16432800_30630001_bc32ffdc_16443000_30840001_80000000_80000000_80000000; +defparam bootram.RAM1.INIT_20=256'hf8801930_e483166c_10631800_a4630007_e8603324_80000000_b60f0008_bc32ffc8; +defparam bootram.RAM1.INIT_21=256'h3065ffc9_a46300ff_be520024_16459001_3240005a_3065ffa9_90a50060_b800ff9c; +defparam bootram.RAM1.INIT_22=256'h80000000_b60f0008_a46400ff_3085ffd0_be52000c_16459001_32400039_a46300ff; +defparam bootram.RAM1.INIT_23=256'hfae10024_fac10020_fa61001c_f9e10000_fb610034_13250000_fb21002c_3021ffc8; +defparam bootram.RAM1.INIT_24=256'h10650000_30a0ffff_be120034_aa43003a_13660000_e0790000_fb410030_fb010028; +defparam bootram.RAM1.INIT_25=256'heb610034_eb410030_eb21002c_eb010028_eae10024_eac10020_ea61001c_e9e10000; +defparam bootram.RAM1.INIT_26=256'hbe04001c_90840060_30650001_c085c800_30a00001_e8c01934_30210038_b60f0008; +defparam bootram.RAM1.INIT_27=256'hb9f4ff28_e0b90001_30a0fffe_b810ffac_bc23ffe4_a4630044_c0662000_a4a300ff; +defparam bootram.RAM1.INIT_28=256'h10791800_fa7b0004_10739800_12761800_66c30404_b9f4ff1c_e0b90002_80000000; +defparam bootram.RAM1.INIT_29=256'he0b90003_13530000_b9f4fef0_e0b90005_30a0fffd_be38ff74_93040060_e083000b; +defparam bootram.RAM1.INIT_2A=256'hb9f4fec8_64630408_e0b90006_66c3040c_b9f4fed8_e0b90004_66e30404_b9f4fee4; +defparam bootram.RAM1.INIT_2B=256'he0b90008_80000000_b9f4feb0_e0b90007_fafb0008_12f7b000_12d61800_12d61800; +defparam bootram.RAM1.INIT_2C=256'hea7b000c_13580000_10f30000_be130060_f07b0000_1063b000_66c30404_b9f4fea4; +defparam bootram.RAM1.INIT_2D=256'hb9f4fe68_e0b60001_12d9b000_b9f4fe74_c0b6c800_a6d600ff_32d60009_12d8c000; +defparam bootram.RAM1.INIT_2E=256'ha70400ff_c073c000_30980001_e8fb0004_ea7b000c_d0789800_1063b800_66e30404; +defparam bootram.RAM1.INIT_2F=256'h64760008_12e73800_e09b0000_eadb0008_a74300ff_be52ffb8_1647c003_107a1800; +defparam bootram.RAM1.INIT_30=256'he0b7000a_12d61800_b9f4fe10_107a1800_12c7b000_10632000_e0b70009_12f9b800; +defparam bootram.RAM1.INIT_31=256'hbe32fe60_1643b000_a46300ff_a6d600ff_1063c000_16d60000_67030404_b9f4fe04; +defparam bootram.RAM1.INIT_32=256'h80000000_b60f0008_bc23fff8_a4630100_e8603b10_10a00000_b810fe58_30a0fffb; +defparam bootram.RAM1.INIT_33=256'hbc23fff8_a4630100_e8603b10_a4a500ff_80884800_a1292000_a508007f_a5290600; +defparam bootram.RAM1.INIT_34=256'h10650000_be050018_f8803b10_a0840100_f8603b18_a46600ff_f8803b10_f8e03b00; +defparam bootram.RAM1.INIT_35=256'h10e60000_10c00000_80000000_b60f0008_e8603b00_bc23fff8_a4630100_e8603b10; +defparam bootram.RAM1.INIT_36=256'hb9f4ff84_f8603b14_30600001_31200400_31000008_10a00000_f9e10000_3021ffe4; +defparam bootram.RAM1.INIT_37=256'hfa61002c_12c50000_fac10030_3021ffc4_3021001c_b60f0008_e9e10000_80000000; +defparam bootram.RAM1.INIT_38=256'hf8003b18_30600400_12670000_b9f4ff3c_fae10034_13060000_f9e10000_fb010038; +defparam bootram.RAM1.INIT_39=256'h30800428_f8603b18_30600001_fac03b00_f8603b04_3060000b_66d60408_f8603b10; +defparam bootram.RAM1.INIT_3A=256'h12e00000_12d30000_be18009c_80000000_b9f4ff00_f8603b10_30600528_f8803b10; +defparam bootram.RAM1.INIT_3B=256'he8803b0c_80000000_b9f4fed8_f8803b10_30800500_f8603b10_30600400_3261001c; +defparam bootram.RAM1.INIT_3C=256'hf8610028_e8603b00_f8810024_e8803b04_f8610020_e8603b08_f881001c_14b7c000; +defparam bootram.RAM1.INIT_3D=256'h30840001_d0762000_c0732000_30a00010_10800000_beb20034_16459003_22400010; +defparam bootram.RAM1.INIT_3E=256'hbc25ffd8_b800ff8c_12d62800_beb20020_1658b803_12f72800_bc32fff0_16442800; +defparam bootram.RAM1.INIT_3F=256'heac10030_ea61002c_e9e10000_f8003b18_12d62800_be52ff7c_1658b803_12f72800; +defparam bootram.RAM2.INIT_00=256'h30a00001_3021ffe4_30e00000_b0009f00_3021003c_b60f0008_eb010038_eae10034; +defparam bootram.RAM2.INIT_01=256'ha463ffff_b00000ff_e9e10000_31200400_b9f4fe34_f9e10000_31000020_30c00001; +defparam bootram.RAM2.INIT_02=256'he9e10000_bc030010_f9e10000_3021ffe4_e860f828_b0000000_3021001c_b60f0008; +defparam bootram.RAM2.INIT_03=256'hbe120010_aa440020_a48400ff_64830008_80000000_b9f4ffa8_3021001c_b60f0008; +defparam bootram.RAM2.INIT_04=256'h16439001_32400018_bcb2fff0_16439001_32400015_80000000_b9f40170_a46300ff; +defparam bootram.RAM2.INIT_05=256'hf9e10000_3021ffe4_e860f824_b0000000_b800ffb0_f860f828_b0000000_bc52ffe4; +defparam bootram.RAM2.INIT_06=256'ha48400ff_64830008_80000000_b9f4ff40_3021001c_b60f0008_e9e10000_bc030010; +defparam bootram.RAM2.INIT_07=256'hbcb2fff0_16459001_32400015_80000000_b9f40108_a4a300ff_be120010_aa440020; +defparam bootram.RAM2.INIT_08=256'hf860f824_b0000000_f8a0f828_b0000000_e0651666_bc52ffe4_16459001_32400018; +defparam bootram.RAM2.INIT_09=256'hb9f40174_f9e10000_10b60000_10c50000_12c00000_fac1001c_3021ffe0_b800ffa4; +defparam bootram.RAM2.INIT_0A=256'h3021ffd4_30210020_b60f0008_eac1001c_e9e10000_80000000_99fcb000_30e00024; +defparam bootram.RAM2.INIT_0B=256'h30c01680_10b60000_30c00006_b9f4fd80_f9e10000_10f60000_32c1001c_fac10028; +defparam bootram.RAM2.INIT_0C=256'h6464001f_eac10028_e9e10000_a884ffff_80841800_14830000_30e00006_b9f400b0; +defparam bootram.RAM2.INIT_0D=256'hb9f4fd34_f9e10000_10f60000_32c1001c_fac10028_3021ffd4_3021002c_b60f0008; +defparam bootram.RAM2.INIT_0E=256'ha884ffff_80841800_14830000_30e00006_b9f40064_30c01688_10b60000_30c00006; +defparam bootram.RAM2.INIT_0F=256'hf9e10000_3021ffe4_30a01690_3021002c_b60f0008_6464001f_eac10028_e9e10000; +defparam bootram.RAM2.INIT_10=256'h80000000_b6910000_80000000_b6110000_30a0ffff_b9f4ee68_80000000_b9f4f580; +defparam bootram.RAM2.INIT_11=256'h80653000_beb2005c_16479003_22400003_80000000_b60f0008_80000000_b60f0008; +defparam bootram.RAM2.INIT_12=256'h30a50004_30e7fffc_bc320040_16432000_e8660000_e8850000_bc230050_a4630003; +defparam bootram.RAM2.INIT_13=256'he1050000_bc120028_aa47ffff_30e7ffff_30c60004_be52ffe0_16479003_22400003; +defparam bootram.RAM2.INIT_14=256'hbc32ffe0_aa47ffff_30e7ffff_30c60001_30a50001_be320020_16434000_e0660000; +defparam bootram.RAM2.INIT_15=256'h10850000_beb20018_16479003_2240000f_14634000_b60f0008_10600000_b60f0008; +defparam bootram.RAM2.INIT_16=256'he0660000_10e72000_11040000_bc070024_11050000_be030034_a4630003_80662800; +defparam bootram.RAM2.INIT_17=256'he8860000_10650000_b60f0008_30c60001_be32fff0_16474000_31080001_f0680000; +defparam bootram.RAM2.INIT_18=256'h30c60010_e866000c_f8880008_e8860008_f8680004_e8660004_f8880000_30e7fff0; +defparam bootram.RAM2.INIT_19=256'hbcb2002c_16479003_22400003_31080010_be52ffd0_16479003_2240000f_f868000c; +defparam bootram.RAM2.INIT_1A=256'h30840004_be52ffec_16479003_22400003_d8682000_30e7fffc_c8662000_10800000; +defparam bootram.RAM2.INIT_1B=256'hf9e10000_fa61001c_3021ffe0_e86013f0_10880000_b810ff68_11044000_10c43000; +defparam bootram.RAM2.INIT_1C=256'hbc32fff0_aa43ffff_e8730000_3273fffc_99fc1800_bc120018_aa43ffff_326013f0; +defparam bootram.RAM2.INIT_1D=256'h80000000_b9f4ed20_d9e00800_3021fff8_30210020_b60f0008_ea61001c_e9e10000; +defparam bootram.RAM2.INIT_1E=256'hb9f4ec98_d9e00800_3021fff8_30210008_b60f0008_c9e00800_80000000_b9f4ffb0; +defparam bootram.RAM2.INIT_1F=256'h00000000_ffffffff_00000000_ffffffff_30210008_b60f0008_c9e00800_80000000; +defparam bootram.RAM2.INIT_20=256'h65642120_7475726e_65207265_696d6167_61696e20_523a206d_4552524f_4f4b0000; +defparam bootram.RAM2.INIT_21=256'h55535250_4e4f4b00_64652e00_64206d6f_206c6f61_49484558_20696e20_4261636b; +defparam bootram.RAM2.INIT_22=256'h50322b20_20555352_74696e67_53746172_720a0000_6f616465_6f6f746c_322b2062; +defparam bootram.RAM2.INIT_23=256'h6e206672_65747572_523a2072_4552524f_2e000000_6d6f6465_61666520_696e2073; +defparam bootram.RAM2.INIT_24=256'h206e6576_6f756c64_73207368_20546869_72616d21_70726f67_61696e20_6f6d206d; +defparam bootram.RAM2.INIT_25=256'h69726d77_66652066_6f207361_523a206e_4552524f_6e210000_61707065_65722068; +defparam bootram.RAM2.INIT_26=256'h62726963_6d206120_20492061_626c652e_61696c61_65206176_696d6167_61726520; +defparam bootram.RAM2.INIT_27=256'h2052414d_5820746f_20494845_6c6f6164_20746f20_66726565_65656c20_6b2e2046; +defparam bootram.RAM2.INIT_28=256'h6374696f_726f6475_69642070_2076616c_20666f72_6b696e67_43686563_2e000000; +defparam bootram.RAM2.INIT_29=256'h74696f6e_6f647563_64207072_56616c69_2e2e2e00_6d616765_47412069_6e204650; +defparam bootram.RAM2.INIT_2A=256'h6720746f_7074696e_7474656d_642e2041_666f756e_61676520_4120696d_20465047; +defparam bootram.RAM2.INIT_2B=256'h46504741_696f6e20_64756374_2070726f_616c6964_4e6f2076_742e0000_20626f6f; +defparam bootram.RAM2.INIT_2C=256'h6c6f6164_20746f20_74696e67_74656d70_2e0a4174_6f756e64_67652066_20696d61; +defparam bootram.RAM2.INIT_2D=256'h64207072_56616c69_2e2e2e00_77617265_6669726d_696f6e20_64756374_2070726f; +defparam bootram.RAM2.INIT_2E=256'h64696e67_204c6f61_756e642e_6520666f_6d776172_20666972_74696f6e_6f647563; +defparam bootram.RAM2.INIT_2F=256'h70726f67_61696e20_6f6d206d_6e206672_65747572_523a2052_4552524f_2e2e2e00; +defparam bootram.RAM2.INIT_30=256'h6e210000_61707065_65722068_206e6576_6f756c64_73207368_20546869_72616d21; +defparam bootram.RAM2.INIT_31=256'h20666f75_77617265_6669726d_696f6e20_64756374_2070726f_616c6964_4e6f2076; +defparam bootram.RAM2.INIT_32=256'h05050400_2e2e2e00_77617265_6669726d_61666520_6e672073_54727969_6e642e20; +defparam bootram.RAM2.INIT_33=256'h10101200_06820594_09c407d0_13880d05_00002710_01b200d9_05160364_14580a2c; +defparam bootram.RAM2.INIT_34=256'h00202020_00000000_6f72740a_0a0a6162_aa990000_ffffffff_b8080000_b0000000; +defparam bootram.RAM2.INIT_35=256'h20881010_20202020_20202020_20202020_20202020_28282820_20202828_20202020; +defparam bootram.RAM2.INIT_36=256'h10104141_10101010_04040410_04040404_10040404_10101010_10101010_10101010; +defparam bootram.RAM2.INIT_37=256'h10104242_10101010_01010101_01010101_01010101_01010101_01010101_41414141; +defparam bootram.RAM2.INIT_38=256'h20000000_10101010_02020202_02020202_02020202_02020202_02020202_42424242; +defparam bootram.RAM2.INIT_39=256'h00000000_00000000_00000000_00000000_00000000_00000000_00000000_00000000; +defparam bootram.RAM2.INIT_3A=256'h00000000_00000000_00000000_00000000_00000000_00000000_00000000_00000000; +defparam bootram.RAM2.INIT_3B=256'h00000000_00000000_00000000_00000000_00000000_00000000_00000000_00000000; +defparam bootram.RAM2.INIT_3C=256'h00000000_00000000_00000000_00000000_00000000_00000000_00000000_00000000; +defparam bootram.RAM2.INIT_3D=256'h00000000_00000000_00000000_00000000_00000000_00000000_00000000_00000000; +defparam bootram.RAM2.INIT_3E=256'h00000000_00000000_00000000_00000000_00000000_00000000_00000000_00000000; +defparam bootram.RAM2.INIT_3F=256'h00000000_00000000_00000000_00000000_00000000_00000000_00000000_00000000; +defparam bootram.RAM3.INIT_00=256'h00000000_00000000_00000000_00000000_00000000_00000000_00000000_00000000; +defparam bootram.RAM3.INIT_01=256'h20202020_20202020_20202020_20202020_28282020_20282828_20202020_20202020; +defparam bootram.RAM3.INIT_02=256'h10101010_04041010_04040404_04040404_10101010_10101010_10101010_88101010; +defparam bootram.RAM3.INIT_03=256'h10101010_01010110_01010101_01010101_01010101_01010101_41414101_10414141; +defparam bootram.RAM3.INIT_04=256'h10101020_02020210_02020202_02020202_02020202_02020202_42424202_10424242; +defparam bootram.RAM3.INIT_05=256'h00000000_00000000_00000000_00000000_00000000_00000000_00000000_00000000; +defparam bootram.RAM3.INIT_06=256'h00000000_00000000_00000000_00000000_00000000_00000000_00000000_00000000; +defparam bootram.RAM3.INIT_07=256'h00000000_00000000_00000000_00000000_00000000_00000000_00000000_00000000; +defparam bootram.RAM3.INIT_08=256'h00000000_00000000_00000000_00000000_00000000_00000000_00000000_00000000; +defparam bootram.RAM3.INIT_09=256'h00000000_00000000_00001820_ffffffff_01010100_000013fc_00000000_00000000; +defparam bootram.RAM3.INIT_0A=256'h00000000_00000000_00000000_00000000_00000000_00000000_00000000_00000000; diff --git a/usrp2/top/u2plus/u2plus_core.v b/usrp2/top/u2plus/u2plus_core.v index 3a6bf0f64..237276fb6 100644 --- a/usrp2/top/u2plus/u2plus_core.v +++ b/usrp2/top/u2plus/u2plus_core.v @@ -286,210 +286,7 @@ module u2plus_core //defparam bootram.RAM0.INIT_00=256'hbc32fff0_aa43502b_b00000fe_30630001_80000000_10600000_a48500ff_10a00000; //defparam bootram.RAM0.INIT_01=256'ha48500ff_b810ffd0_f880200c_30a50001_10830000_308000ff_be23000c_a4640001; -////bootloader 10/5/10 for 32/64Mbit FLASH -defparam bootram.RAM0.INIT_00=256'h00000000_00000000_00000000_b80801c0_00000000_b8081210_00000000_b8080050; -defparam bootram.RAM0.INIT_01=256'h00000000_00000000_00000000_00000000_00000000_00000000_00000000_b8081218; -defparam bootram.RAM0.INIT_02=256'h3020ffe0_b0000000_30401920_31a01948_00000000_00000000_00000000_00000000; -defparam bootram.RAM0.INIT_03=256'h3021ffe4_e060f800_b0000000_b8000000_30a30000_b9f4047c_80000000_b9f400cc; -defparam bootram.RAM0.INIT_04=256'he8830000_e8601928_80000000_99fc2000_f8601928_b8000044_bc030014_f9e10000; -defparam bootram.RAM0.INIT_05=256'h80000000_99fc1800_30a0193c_bc030010_30600000_b0000000_30630004_be24ffec; -defparam bootram.RAM0.INIT_06=256'h30600000_b0000000_3021001c_b60f0008_e9e10000_f060f800_b0000000_30600001; -defparam bootram.RAM0.INIT_07=256'h80000000_99fc1800_bc03000c_30c0f804_b0000000_30a0193c_f9e10000_3021ffe4; -defparam bootram.RAM0.INIT_08=256'h80000000_99fc2000_bc04000c_30a01940_bc030014_30800000_b0000000_e8601940; -defparam bootram.RAM0.INIT_09=256'h06463800_20e01948_20c01948_f9e10000_2021ffec_3021001c_b60f0008_e9e10000; -defparam bootram.RAM0.INIT_0A=256'hb0000000_20c0f800_b0000000_bc92fff4_06463800_20c60004_f8060000_bc720014; -defparam bootram.RAM0.INIT_0B=256'hb9f410ac_bc92fff4_06463800_20c60004_f8060000_bc720014_06463800_20e0f82c; -defparam bootram.RAM0.INIT_0C=256'h32630000_20a00000_b9f4014c_20e00000_20c00000_80000000_b9f4122c_80000000; -defparam bootram.RAM0.INIT_0D=256'h20210014_b60f0008_30730000_c9e10000_80000000_b9f41078_80000000_b9f41234; -defparam bootram.RAM0.INIT_0E=256'he9e10000_f9610004_fa410010_95608001_fa21000c_f9610008_f9e10000_3021ffec; -defparam bootram.RAM0.INIT_0F=256'hbc050018_30210014_b62e0000_ea410010_ea21000c_e9610008_940bc001_e9610004; -defparam bootram.RAM0.INIT_10=256'h3021ff2c_80000000_b60f0008_bc32fff4_16432800_30630001_80000000_10600000; -defparam bootram.RAM0.INIT_11=256'hb9f40440_32c1001c_3261004c_f8610028_f9e10000_fac100d0_fa6100cc_3061002c; -defparam bootram.RAM0.INIT_12=256'h22407fff_e8610024_bc230038_30a01438_10b30000_b9f40a18_10d60000_10b30000; -defparam bootram.RAM0.INIT_13=256'h30a01438_bc120040_aa430001_30a01400_e061001c_10a30000_be520034_16439003; -defparam bootram.RAM0.INIT_14=256'he8e10020_e8c10028_b800ffa8_80000000_b9f404d4_b800ffb4_80000000_b9f404e0; -defparam bootram.RAM0.INIT_15=256'h80000000_b9f404a8_b800ff88_80000000_b9f404b4_30a01400_80000000_b9f41010; -defparam bootram.RAM0.INIT_16=256'hb800ff60_80000000_b9f4048c_30a01404_80000000_b9f40e5c_30a08000_b0000000; -defparam bootram.RAM0.INIT_17=256'h30a0a120_b0000007_9403c001_ac640002_94808001_fa61001c_f9e10000_3021ffe0; -defparam bootram.RAM0.INIT_18=256'hb9f40b9c_80000000_b9f406c0_f800200c_80000000_b9f4fef4_f860200c_306000ff; -defparam bootram.RAM0.INIT_19=256'h30a01504_bc04013c_a4842000_e8803334_80000000_b9f40438_30a0143c_80000000; -defparam bootram.RAM0.INIT_1A=256'h30a01568_bc23010c_80000000_b9f40e58_30a00000_b0000018_80000000_b9f40420; -defparam bootram.RAM0.INIT_1B=256'h30a015b8_bc030058_80000000_b9f40dec_30a00000_b0000030_80000000_b9f40400; -defparam bootram.RAM0.INIT_1C=256'h30c07c00_b9f40b58_30a00000_b0000030_30e08000_b0000000_80000000_b9f403e0; -defparam bootram.RAM0.INIT_1D=256'he9e10000_80000000_b9f403ac_30a015e4_80000000_b9f40d7c_30a08000_b0000000; -defparam bootram.RAM0.INIT_1E=256'hb000003f_80000000_b9f4038c_30a01620_30210020_b60f0008_30600001_ea61001c; -defparam bootram.RAM0.INIT_1F=256'h80000000_b9f40368_30a014ac_12630000_be230030_80000000_b9f40d78_30a00000; -defparam bootram.RAM0.INIT_20=256'hb0000000_30210020_b60f0008_ea61001c_e9e10000_10730000_80000000_b9f4fe1c; -defparam bootram.RAM0.INIT_21=256'hb9f40ce8_30a08000_b0000000_30c07c00_b9f40ac4_30a00000_b000003f_30e08000; -defparam bootram.RAM0.INIT_22=256'hb60f0008_30600001_ea61001c_e9e10000_80000000_b9f40318_30a01470_80000000; -defparam bootram.RAM0.INIT_23=256'h80000000_b9f402e8_30a01450_b800feec_80000000_b9f402f8_30a01530_30210020; -defparam bootram.RAM0.INIT_24=256'h80000000_b9f402c8_30a014ac_bc23001c_80000000_b9f40cd4_30a00000_b000003f; -defparam bootram.RAM0.INIT_25=256'hb9f40a34_30a00000_b000003f_30e08000_b0000000_b800fe94_80000000_b9f4fd7c; -defparam bootram.RAM0.INIT_26=256'h80000000_b9f40288_30a01470_80000000_b9f40c58_30a08000_b0000000_30c07c00; -defparam bootram.RAM0.INIT_27=256'h3021ffd0_80000000_b60f0008_80000000_b9f4fb84_f9e10000_3021ffe4_b800fe5c; -defparam bootram.RAM0.INIT_28=256'h13260000_12e70000_13050000_12660000_fb21002c_fb010028_fae10024_fa61001c; -defparam bootram.RAM0.INIT_29=256'hbcb2002c_16572001_bc120030_aa43ffff_12c00000_b810001c_f9e10000_fac10020; -defparam bootram.RAM0.INIT_2A=256'hbe32ffd4_aa43000a_f0730000_10960000_90630060_10b80000_b9f405ec_32730001; -defparam bootram.RAM0.INIT_2B=256'heae10024_eac10020_ea61001c_e9e10000_10640000_f0130000_14999800_32d60001; -defparam bootram.RAM0.INIT_2C=256'hfb010028_fae10024_fa61001c_3021ffd0_30210030_b60f0008_eb21002c_eb010028; -defparam bootram.RAM0.INIT_2D=256'hb8100014_f9e10000_fac10020_13260000_12e70000_13050000_12660000_fb21002c; -defparam bootram.RAM0.INIT_2E=256'h10960000_90630060_10b80000_b9f4051c_32730001_bcb2002c_16572001_12c00000; -defparam bootram.RAM0.INIT_2F=256'he9e10000_10640000_f0130000_14999800_32d60001_be32ffdc_aa43000a_f0730000; -defparam bootram.RAM0.INIT_30=256'h3021ffd8_30210030_b60f0008_eb21002c_eb010028_eae10024_eac10020_ea61001c; -defparam bootram.RAM0.INIT_31=256'hb9f404b0_12660000_f9e10000_12e60000_12c50000_fae10024_fac10020_fa61001c; -defparam bootram.RAM0.INIT_32=256'hf0130000_3273ffff_32730001_be32ffec_aa43000a_f0730000_90630060_10b60000; -defparam bootram.RAM0.INIT_33=256'h10c50000_30210028_b60f0008_eae10024_eac10020_ea61001c_e9e10000_10770000; -defparam bootram.RAM0.INIT_34=256'h3021ffe4_3021001c_b60f0008_e9e10000_10a00000_b9f4ff94_f9e10000_3021ffe4; -defparam bootram.RAM0.INIT_35=256'hf9e10000_3021ffe4_3021001c_b60f0008_e9e10000_80000000_b9f40448_f9e10000; -defparam bootram.RAM0.INIT_36=256'hfac10020_fa61001c_3021ffdc_3021001c_b60f0008_e9e10000_10a00000_b9f4ffdc; -defparam bootram.RAM0.INIT_37=256'hb9f40324_10b60000_12c50000_be060024_90c30060_12660000_e0660000_f9e10000; -defparam bootram.RAM0.INIT_38=256'heac10020_ea61001c_e9e10000_10b60000_be26fff0_90c30060_e0730000_32730001; -defparam bootram.RAM0.INIT_39=256'h12c50000_b9f4ff9c_f9e10000_fac1001c_3021ffe0_30210024_b60f0008_10600000; -defparam bootram.RAM0.INIT_3A=256'h30210020_b60f0008_10600000_eac1001c_e9e10000_30c0000a_b9f402dc_10b60000; -defparam bootram.RAM0.INIT_3B=256'h3021001c_b60f0008_e9e10000_10a00000_b9f4ffc0_f9e10000_3021ffe4_10c50000; -defparam bootram.RAM0.INIT_3C=256'h3021001c_b60f0008_e9e10000_10a00000_b9f4ff48_f9e10000_3021ffe4_10c50000; -defparam bootram.RAM0.INIT_3D=256'h3021ffe0_3021001c_b60f0008_e9e10000_30c0000a_b9f40278_f9e10000_3021ffe4; -defparam bootram.RAM0.INIT_3E=256'he9e10000_10760000_10d60000_b9f40250_f9e10000_10a00000_12c50000_fac1001c; -defparam bootram.RAM0.INIT_3F=256'h12c60000_b9f40228_f9e10000_fac1001c_3021ffe0_30210020_b60f0008_eac1001c; -defparam bootram.RAM1.INIT_00=256'hb9f401b8_f9e10000_3021ffe4_30210020_b60f0008_eac1001c_e9e10000_10760000; -defparam bootram.RAM1.INIT_01=256'hb0000000_9404c001_ac870002_94e08001_3021001c_b60f0008_e9e10000_80000000; -defparam bootram.RAM1.INIT_02=256'hf860f81c_b0000000_f860200c_80633000_84632000_84c62800_a866ffff_e880f81c; -defparam bootram.RAM1.INIT_03=256'h94608001_80000000_b60f0008_9404c001_80843800_ac840002_94808001_a4e70002; -defparam bootram.RAM1.INIT_04=256'hf8a0f81c_b0000000_f8a0200c_88a52000_e880f81c_b0000000_9406c001_acc30002; -defparam bootram.RAM1.INIT_05=256'h94e08001_80000000_b60f0008_9404c001_80841800_ac840002_94808001_a4630002; -defparam bootram.RAM1.INIT_06=256'h80633000_84632000_84c62800_a866ffff_e880f820_b0000000_9404c001_ac870002; -defparam bootram.RAM1.INIT_07=256'h9404c001_80843800_ac840002_94808001_a4e70002_f860f820_b0000000_f8602020; -defparam bootram.RAM1.INIT_08=256'hfac10020_f9e10000_fb010028_fae10024_fa61001c_3021ffd4_80000000_b60f0008; -defparam bootram.RAM1.INIT_09=256'h32600001_be670038_12660000_be060040_90c30060_13050000_12e60000_e0660000; -defparam bootram.RAM1.INIT_0A=256'hc0779800_10b80000_b9f400cc_10730000_be120028_16569800_32c70001_b8100014; -defparam bootram.RAM1.INIT_0B=256'heac10020_ea61001c_e9e10000_10730000_3273ffff_32730001_be26ffe4_90c30060; -defparam bootram.RAM1.INIT_0C=256'hb9f40084_f9e10000_10a00000_3021ffe4_3021002c_b60f0008_eb010028_eae10024; -defparam bootram.RAM1.INIT_0D=256'h10c63000_80000000_b60f0008_f0c5192c_3021001c_b60f0008_e9e10000_30c0000a; -defparam bootram.RAM1.INIT_0E=256'hf9e10000_fa61001c_3021ffe0_80000000_b60f0008_f8653700_64a50405_e4661660; -defparam bootram.RAM1.INIT_0F=256'h32730001_10b30000_e0d3165c_90c60060_b9f4ffc4_10b30000_e0d3192c_12600000; -defparam bootram.RAM1.INIT_10=256'h30210020_b60f0008_ea61001c_e9e10000_bc32ffd8_aa530003_90c60060_b9f4ffbc; -defparam bootram.RAM1.INIT_11=256'h12650000_be120030_aa46000a_12c60000_f9e10000_fac10020_fa61001c_3021ffdc; -defparam bootram.RAM1.INIT_12=256'heac10020_ea61001c_e9e10000_fac5000c_bc03fffc_e8650004_30a33700_64730405; -defparam bootram.RAM1.INIT_13=256'hb810ffc8_30c0000d_b9f4ffac_bc32ffd0_aa430001_e065192c_30210024_b60f0008; -defparam bootram.RAM1.INIT_14=256'hbe120030_aa46000a_12c60000_f9e10000_fac10020_fa61001c_3021ffdc_64730405; -defparam bootram.RAM1.INIT_15=256'hea61001c_e9e10000_fac3000c_bc040008_e8830004_30633700_64730405_12650000; -defparam bootram.RAM1.INIT_16=256'hb9f4ff44_30c0000d_be32ffd0_aa430001_e065192c_30210024_b60f0008_eac10020; -defparam bootram.RAM1.INIT_17=256'he8650010_bc03fffc_e8650008_30a53700_64a50405_64730405_b810ffc4_80000000; -defparam bootram.RAM1.INIT_18=256'he8850008_e8650010_bc030014_e8650008_30a53700_64a50405_80000000_b60f0008; -defparam bootram.RAM1.INIT_19=256'hf9e10000_fac10020_3021ffdc_64a50405_80000000_b60f0008_90630060_be24fff8; -defparam bootram.RAM1.INIT_1A=256'hbe120034_aa53012d_b8000010_32600001_be230040_e8760008_32c53700_fa61001c; -defparam bootram.RAM1.INIT_1B=256'h3240012b_3273ffff_32730001_be03ffe8_e8760008_30a00001_b9f40040_3060ffff; -defparam bootram.RAM1.INIT_1C=256'hb60f0008_eac10020_ea61001c_e9e10000_e8760010_3060ffff_be52000c_16539001; -defparam bootram.RAM1.INIT_1D=256'hbe650048_bc430054_e8601930_bc260054_a4c30000_b0008000_e8603324_30210024; -defparam bootram.RAM1.INIT_1E=256'h80000000_80000000_80000000_80000000_10800000_bc660030_e8c01930_10660000; -defparam bootram.RAM1.INIT_1F=256'h16432800_30630001_bc32ffdc_16443000_30840001_80000000_80000000_80000000; -defparam bootram.RAM1.INIT_20=256'hf8801930_e483166c_10631800_a4630007_e8603324_80000000_b60f0008_bc32ffc8; -defparam bootram.RAM1.INIT_21=256'h3065ffc9_a46300ff_be520024_16459001_3240005a_3065ffa9_90a50060_b800ff9c; -defparam bootram.RAM1.INIT_22=256'h80000000_b60f0008_a46400ff_3085ffd0_be52000c_16459001_32400039_a46300ff; -defparam bootram.RAM1.INIT_23=256'hfae10024_fac10020_fa61001c_f9e10000_fb610034_13250000_fb21002c_3021ffc8; -defparam bootram.RAM1.INIT_24=256'h10650000_30a0ffff_be120034_aa43003a_13660000_e0790000_fb410030_fb010028; -defparam bootram.RAM1.INIT_25=256'heb610034_eb410030_eb21002c_eb010028_eae10024_eac10020_ea61001c_e9e10000; -defparam bootram.RAM1.INIT_26=256'hbe04001c_90840060_30650001_c085c800_30a00001_e8c01934_30210038_b60f0008; -defparam bootram.RAM1.INIT_27=256'hb9f4ff28_e0b90001_30a0fffe_b810ffac_bc23ffe4_a4630044_c0662000_a4a300ff; -defparam bootram.RAM1.INIT_28=256'h10791800_fa7b0004_10739800_12761800_66c30404_b9f4ff1c_e0b90002_80000000; -defparam bootram.RAM1.INIT_29=256'he0b90003_13530000_b9f4fef0_e0b90005_30a0fffd_be38ff74_93040060_e083000b; -defparam bootram.RAM1.INIT_2A=256'hb9f4fec8_64630408_e0b90006_66c3040c_b9f4fed8_e0b90004_66e30404_b9f4fee4; -defparam bootram.RAM1.INIT_2B=256'he0b90008_80000000_b9f4feb0_e0b90007_fafb0008_12f7b000_12d61800_12d61800; -defparam bootram.RAM1.INIT_2C=256'hea7b000c_13580000_10f30000_be130060_f07b0000_1063b000_66c30404_b9f4fea4; -defparam bootram.RAM1.INIT_2D=256'hb9f4fe68_e0b60001_12d9b000_b9f4fe74_c0b6c800_a6d600ff_32d60009_12d8c000; -defparam bootram.RAM1.INIT_2E=256'ha70400ff_c073c000_30980001_e8fb0004_ea7b000c_d0789800_1063b800_66e30404; -defparam bootram.RAM1.INIT_2F=256'h64760008_12e73800_e09b0000_eadb0008_a74300ff_be52ffb8_1647c003_107a1800; -defparam bootram.RAM1.INIT_30=256'he0b7000a_12d61800_b9f4fe10_107a1800_12c7b000_10632000_e0b70009_12f9b800; -defparam bootram.RAM1.INIT_31=256'hbe32fe60_1643b000_a46300ff_a6d600ff_1063c000_16d60000_67030404_b9f4fe04; -defparam bootram.RAM1.INIT_32=256'h80000000_b60f0008_bc23fff8_a4630100_e8603b10_10a00000_b810fe58_30a0fffb; -defparam bootram.RAM1.INIT_33=256'hbc23fff8_a4630100_e8603b10_a4a500ff_80884800_a1292000_a508007f_a5290600; -defparam bootram.RAM1.INIT_34=256'h10650000_be050018_f8803b10_a0840100_f8603b18_a46600ff_f8803b10_f8e03b00; -defparam bootram.RAM1.INIT_35=256'h10e60000_10c00000_80000000_b60f0008_e8603b00_bc23fff8_a4630100_e8603b10; -defparam bootram.RAM1.INIT_36=256'hb9f4ff84_f8603b14_30600001_31200400_31000008_10a00000_f9e10000_3021ffe4; -defparam bootram.RAM1.INIT_37=256'hfa61002c_12c50000_fac10030_3021ffc4_3021001c_b60f0008_e9e10000_80000000; -defparam bootram.RAM1.INIT_38=256'hf8003b18_30600400_12670000_b9f4ff3c_fae10034_13060000_f9e10000_fb010038; -defparam bootram.RAM1.INIT_39=256'h30800428_f8603b18_30600001_fac03b00_f8603b04_3060000b_66d60408_f8603b10; -defparam bootram.RAM1.INIT_3A=256'h12e00000_12d30000_be18009c_80000000_b9f4ff00_f8603b10_30600528_f8803b10; -defparam bootram.RAM1.INIT_3B=256'he8803b0c_80000000_b9f4fed8_f8803b10_30800500_f8603b10_30600400_3261001c; -defparam bootram.RAM1.INIT_3C=256'hf8610028_e8603b00_f8810024_e8803b04_f8610020_e8603b08_f881001c_14b7c000; -defparam bootram.RAM1.INIT_3D=256'h30840001_d0762000_c0732000_30a00010_10800000_beb20034_16459003_22400010; -defparam bootram.RAM1.INIT_3E=256'hbc25ffd8_b800ff8c_12d62800_beb20020_1658b803_12f72800_bc32fff0_16442800; -defparam bootram.RAM1.INIT_3F=256'heac10030_ea61002c_e9e10000_f8003b18_12d62800_be52ff7c_1658b803_12f72800; -defparam bootram.RAM2.INIT_00=256'h30a00001_3021ffe4_30e00000_b0009f00_3021003c_b60f0008_eb010038_eae10034; -defparam bootram.RAM2.INIT_01=256'ha463ffff_b00000ff_e9e10000_31200400_b9f4fe34_f9e10000_31000020_30c00001; -defparam bootram.RAM2.INIT_02=256'he9e10000_bc030010_f9e10000_3021ffe4_e860f828_b0000000_3021001c_b60f0008; -defparam bootram.RAM2.INIT_03=256'hbe120010_aa440020_a48400ff_64830008_80000000_b9f4ffa8_3021001c_b60f0008; -defparam bootram.RAM2.INIT_04=256'h16439001_32400018_bcb2fff0_16439001_32400015_80000000_b9f40170_a46300ff; -defparam bootram.RAM2.INIT_05=256'hf9e10000_3021ffe4_e860f824_b0000000_b800ffb0_f860f828_b0000000_bc52ffe4; -defparam bootram.RAM2.INIT_06=256'ha48400ff_64830008_80000000_b9f4ff40_3021001c_b60f0008_e9e10000_bc030010; -defparam bootram.RAM2.INIT_07=256'hbcb2fff0_16459001_32400015_80000000_b9f40108_a4a300ff_be120010_aa440020; -defparam bootram.RAM2.INIT_08=256'hf860f824_b0000000_f8a0f828_b0000000_e0651666_bc52ffe4_16459001_32400018; -defparam bootram.RAM2.INIT_09=256'hb9f40174_f9e10000_10b60000_10c50000_12c00000_fac1001c_3021ffe0_b800ffa4; -defparam bootram.RAM2.INIT_0A=256'h3021ffd4_30210020_b60f0008_eac1001c_e9e10000_80000000_99fcb000_30e00024; -defparam bootram.RAM2.INIT_0B=256'h30c01680_10b60000_30c00006_b9f4fd80_f9e10000_10f60000_32c1001c_fac10028; -defparam bootram.RAM2.INIT_0C=256'h6464001f_eac10028_e9e10000_a884ffff_80841800_14830000_30e00006_b9f400b0; -defparam bootram.RAM2.INIT_0D=256'hb9f4fd34_f9e10000_10f60000_32c1001c_fac10028_3021ffd4_3021002c_b60f0008; -defparam bootram.RAM2.INIT_0E=256'ha884ffff_80841800_14830000_30e00006_b9f40064_30c01688_10b60000_30c00006; -defparam bootram.RAM2.INIT_0F=256'hf9e10000_3021ffe4_30a01690_3021002c_b60f0008_6464001f_eac10028_e9e10000; -defparam bootram.RAM2.INIT_10=256'h80000000_b6910000_80000000_b6110000_30a0ffff_b9f4ee68_80000000_b9f4f580; -defparam bootram.RAM2.INIT_11=256'h80653000_beb2005c_16479003_22400003_80000000_b60f0008_80000000_b60f0008; -defparam bootram.RAM2.INIT_12=256'h30a50004_30e7fffc_bc320040_16432000_e8660000_e8850000_bc230050_a4630003; -defparam bootram.RAM2.INIT_13=256'he1050000_bc120028_aa47ffff_30e7ffff_30c60004_be52ffe0_16479003_22400003; -defparam bootram.RAM2.INIT_14=256'hbc32ffe0_aa47ffff_30e7ffff_30c60001_30a50001_be320020_16434000_e0660000; -defparam bootram.RAM2.INIT_15=256'h10850000_beb20018_16479003_2240000f_14634000_b60f0008_10600000_b60f0008; -defparam bootram.RAM2.INIT_16=256'he0660000_10e72000_11040000_bc070024_11050000_be030034_a4630003_80662800; -defparam bootram.RAM2.INIT_17=256'he8860000_10650000_b60f0008_30c60001_be32fff0_16474000_31080001_f0680000; -defparam bootram.RAM2.INIT_18=256'h30c60010_e866000c_f8880008_e8860008_f8680004_e8660004_f8880000_30e7fff0; -defparam bootram.RAM2.INIT_19=256'hbcb2002c_16479003_22400003_31080010_be52ffd0_16479003_2240000f_f868000c; -defparam bootram.RAM2.INIT_1A=256'h30840004_be52ffec_16479003_22400003_d8682000_30e7fffc_c8662000_10800000; -defparam bootram.RAM2.INIT_1B=256'hf9e10000_fa61001c_3021ffe0_e86013f0_10880000_b810ff68_11044000_10c43000; -defparam bootram.RAM2.INIT_1C=256'hbc32fff0_aa43ffff_e8730000_3273fffc_99fc1800_bc120018_aa43ffff_326013f0; -defparam bootram.RAM2.INIT_1D=256'h80000000_b9f4ed20_d9e00800_3021fff8_30210020_b60f0008_ea61001c_e9e10000; -defparam bootram.RAM2.INIT_1E=256'hb9f4ec98_d9e00800_3021fff8_30210008_b60f0008_c9e00800_80000000_b9f4ffb0; -defparam bootram.RAM2.INIT_1F=256'h00000000_ffffffff_00000000_ffffffff_30210008_b60f0008_c9e00800_80000000; -defparam bootram.RAM2.INIT_20=256'h65642120_7475726e_65207265_696d6167_61696e20_523a206d_4552524f_4f4b0000; -defparam bootram.RAM2.INIT_21=256'h55535250_4e4f4b00_64652e00_64206d6f_206c6f61_49484558_20696e20_4261636b; -defparam bootram.RAM2.INIT_22=256'h50322b20_20555352_74696e67_53746172_720a0000_6f616465_6f6f746c_322b2062; -defparam bootram.RAM2.INIT_23=256'h6e206672_65747572_523a2072_4552524f_2e000000_6d6f6465_61666520_696e2073; -defparam bootram.RAM2.INIT_24=256'h206e6576_6f756c64_73207368_20546869_72616d21_70726f67_61696e20_6f6d206d; -defparam bootram.RAM2.INIT_25=256'h69726d77_66652066_6f207361_523a206e_4552524f_6e210000_61707065_65722068; -defparam bootram.RAM2.INIT_26=256'h62726963_6d206120_20492061_626c652e_61696c61_65206176_696d6167_61726520; -defparam bootram.RAM2.INIT_27=256'h2052414d_5820746f_20494845_6c6f6164_20746f20_66726565_65656c20_6b2e2046; -defparam bootram.RAM2.INIT_28=256'h6374696f_726f6475_69642070_2076616c_20666f72_6b696e67_43686563_2e000000; -defparam bootram.RAM2.INIT_29=256'h74696f6e_6f647563_64207072_56616c69_2e2e2e00_6d616765_47412069_6e204650; -defparam bootram.RAM2.INIT_2A=256'h6720746f_7074696e_7474656d_642e2041_666f756e_61676520_4120696d_20465047; -defparam bootram.RAM2.INIT_2B=256'h46504741_696f6e20_64756374_2070726f_616c6964_4e6f2076_742e0000_20626f6f; -defparam bootram.RAM2.INIT_2C=256'h6c6f6164_20746f20_74696e67_74656d70_2e0a4174_6f756e64_67652066_20696d61; -defparam bootram.RAM2.INIT_2D=256'h64207072_56616c69_2e2e2e00_77617265_6669726d_696f6e20_64756374_2070726f; -defparam bootram.RAM2.INIT_2E=256'h64696e67_204c6f61_756e642e_6520666f_6d776172_20666972_74696f6e_6f647563; -defparam bootram.RAM2.INIT_2F=256'h70726f67_61696e20_6f6d206d_6e206672_65747572_523a2052_4552524f_2e2e2e00; -defparam bootram.RAM2.INIT_30=256'h6e210000_61707065_65722068_206e6576_6f756c64_73207368_20546869_72616d21; -defparam bootram.RAM2.INIT_31=256'h20666f75_77617265_6669726d_696f6e20_64756374_2070726f_616c6964_4e6f2076; -defparam bootram.RAM2.INIT_32=256'h05050400_2e2e2e00_77617265_6669726d_61666520_6e672073_54727969_6e642e20; -defparam bootram.RAM2.INIT_33=256'h10101200_06820594_09c407d0_13880d05_00002710_01b200d9_05160364_14580a2c; -defparam bootram.RAM2.INIT_34=256'h00202020_00000000_6f72740a_0a0a6162_aa990000_ffffffff_b8080000_b0000000; -defparam bootram.RAM2.INIT_35=256'h20881010_20202020_20202020_20202020_20202020_28282820_20202828_20202020; -defparam bootram.RAM2.INIT_36=256'h10104141_10101010_04040410_04040404_10040404_10101010_10101010_10101010; -defparam bootram.RAM2.INIT_37=256'h10104242_10101010_01010101_01010101_01010101_01010101_01010101_41414141; -defparam bootram.RAM2.INIT_38=256'h20000000_10101010_02020202_02020202_02020202_02020202_02020202_42424242; -defparam bootram.RAM2.INIT_39=256'h00000000_00000000_00000000_00000000_00000000_00000000_00000000_00000000; -defparam bootram.RAM2.INIT_3A=256'h00000000_00000000_00000000_00000000_00000000_00000000_00000000_00000000; -defparam bootram.RAM2.INIT_3B=256'h00000000_00000000_00000000_00000000_00000000_00000000_00000000_00000000; -defparam bootram.RAM2.INIT_3C=256'h00000000_00000000_00000000_00000000_00000000_00000000_00000000_00000000; -defparam bootram.RAM2.INIT_3D=256'h00000000_00000000_00000000_00000000_00000000_00000000_00000000_00000000; -defparam bootram.RAM2.INIT_3E=256'h00000000_00000000_00000000_00000000_00000000_00000000_00000000_00000000; -defparam bootram.RAM2.INIT_3F=256'h00000000_00000000_00000000_00000000_00000000_00000000_00000000_00000000; -defparam bootram.RAM3.INIT_00=256'h00000000_00000000_00000000_00000000_00000000_00000000_00000000_00000000; -defparam bootram.RAM3.INIT_01=256'h20202020_20202020_20202020_20202020_28282020_20282828_20202020_20202020; -defparam bootram.RAM3.INIT_02=256'h10101010_04041010_04040404_04040404_10101010_10101010_10101010_88101010; -defparam bootram.RAM3.INIT_03=256'h10101010_01010110_01010101_01010101_01010101_01010101_41414101_10414141; -defparam bootram.RAM3.INIT_04=256'h10101020_02020210_02020202_02020202_02020202_02020202_42424202_10424242; -defparam bootram.RAM3.INIT_05=256'h00000000_00000000_00000000_00000000_00000000_00000000_00000000_00000000; -defparam bootram.RAM3.INIT_06=256'h00000000_00000000_00000000_00000000_00000000_00000000_00000000_00000000; -defparam bootram.RAM3.INIT_07=256'h00000000_00000000_00000000_00000000_00000000_00000000_00000000_00000000; -defparam bootram.RAM3.INIT_08=256'h00000000_00000000_00000000_00000000_00000000_00000000_00000000_00000000; -defparam bootram.RAM3.INIT_09=256'h00000000_00000000_00001820_ffffffff_01010100_000013fc_00000000_00000000; -defparam bootram.RAM3.INIT_0A=256'h00000000_00000000_00000000_00000000_00000000_00000000_00000000_00000000; +`include "bootloader.rmi" ram_harvard2 #(.AWIDTH(15),.RAM_SIZE(32768)) sys_ram(.wb_clk_i(wb_clk),.wb_rst_i(wb_rst), -- cgit v1.2.3 From 1ec89790b085e7be3d69c785c036ce4e66201357 Mon Sep 17 00:00:00 2001 From: Nick Foster Date: Thu, 7 Oct 2010 15:44:30 -0700 Subject: U2P: modified ICAP. turns out ICAP needs clock disabled while CE is not asserted. which is the point of a CE, but... it works. Also committed latest bootloader, might not be final version. --- usrp2/control_lib/s3a_icap_wb.v | 17 +- usrp2/top/u2plus/bootloader.rmi | 427 +++++++++++++++++++++------------------- 2 files changed, 238 insertions(+), 206 deletions(-) diff --git a/usrp2/control_lib/s3a_icap_wb.v b/usrp2/control_lib/s3a_icap_wb.v index 9a9db0f96..73ddac385 100644 --- a/usrp2/control_lib/s3a_icap_wb.v +++ b/usrp2/control_lib/s3a_icap_wb.v @@ -3,18 +3,19 @@ module s3a_icap_wb (input clk, input reset, input cyc_i, input stb_i, input we_i, output ack_o, - input [31:0] dat_i, output [31:0] dat_o); + input [31:0] dat_i, output [31:0] dat_o)//, output [31:0] debug_out); assign dat_o[31:8] = 24'd0; - wire BUSY, CE, WRITE; + wire BUSY, CE, WRITE, ICAPCLK; + //changed this to gray-ish code to prevent glitching reg [2:0] icap_state; localparam ICAP_IDLE = 0; localparam ICAP_WR0 = 1; - localparam ICAP_WR1 = 2; - localparam ICAP_RD0 = 3; - localparam ICAP_RD1 = 4; + localparam ICAP_WR1 = 5; + localparam ICAP_RD0 = 2; + localparam ICAP_RD1 = 3; always @(posedge clk) if(reset) @@ -40,15 +41,17 @@ module s3a_icap_wb endcase // case (icap_state) assign WRITE = (icap_state == ICAP_WR0) | (icap_state == ICAP_WR1); - assign CE = (icap_state == ICAP_WR1) | (icap_state == ICAP_RD0); + assign CE = (icap_state == ICAP_WR0) | (icap_state == ICAP_RD0); + assign ICAPCLK = CE & (~clk); assign ack_o = (icap_state == ICAP_WR1) | (icap_state == ICAP_RD1); + //assign debug_out = {17'd0, BUSY, dat_i[7:0], ~CE, ICAPCLK, ~WRITE, icap_state}; ICAP_SPARTAN3A ICAP_SPARTAN3A_inst (.BUSY(BUSY), // Busy output .O(dat_o[7:0]), // 32-bit data output .CE(~CE), // Clock enable input - .CLK(clk), // Clock input + .CLK(ICAPCLK), // Clock input .I(dat_i[7:0]), // 32-bit data input .WRITE(~WRITE) // Write input ); diff --git a/usrp2/top/u2plus/bootloader.rmi b/usrp2/top/u2plus/bootloader.rmi index 02ec11060..9e3f99331 100644 --- a/usrp2/top/u2plus/bootloader.rmi +++ b/usrp2/top/u2plus/bootloader.rmi @@ -1,204 +1,233 @@ -////bootloader 10/5/10 for 32/64Mbit FLASH -defparam bootram.RAM0.INIT_00=256'h00000000_00000000_00000000_b80801c0_00000000_b8081210_00000000_b8080050; -defparam bootram.RAM0.INIT_01=256'h00000000_00000000_00000000_00000000_00000000_00000000_00000000_b8081218; -defparam bootram.RAM0.INIT_02=256'h3020ffe0_b0000000_30401920_31a01948_00000000_00000000_00000000_00000000; -defparam bootram.RAM0.INIT_03=256'h3021ffe4_e060f800_b0000000_b8000000_30a30000_b9f4047c_80000000_b9f400cc; -defparam bootram.RAM0.INIT_04=256'he8830000_e8601928_80000000_99fc2000_f8601928_b8000044_bc030014_f9e10000; -defparam bootram.RAM0.INIT_05=256'h80000000_99fc1800_30a0193c_bc030010_30600000_b0000000_30630004_be24ffec; +defparam bootram.RAM0.INIT_00=256'h00000000_00000000_00000000_b80801c0_00000000_b80815d8_00000000_b8080050; +defparam bootram.RAM0.INIT_01=256'h00000000_00000000_00000000_00000000_00000000_00000000_00000000_b80815e0; +defparam bootram.RAM0.INIT_02=256'h3020ffe0_b0000000_30401ce0_31a01d08_00000000_00000000_00000000_00000000; +defparam bootram.RAM0.INIT_03=256'h3021ffe4_e060f800_b0000000_b8000000_30a30000_b9f4069c_80000000_b9f400cc; +defparam bootram.RAM0.INIT_04=256'he8830000_e8601ce8_80000000_99fc2000_f8601ce8_b8000044_bc030014_f9e10000; +defparam bootram.RAM0.INIT_05=256'h80000000_99fc1800_30a01cfc_bc030010_30600000_b0000000_30630004_be24ffec; defparam bootram.RAM0.INIT_06=256'h30600000_b0000000_3021001c_b60f0008_e9e10000_f060f800_b0000000_30600001; -defparam bootram.RAM0.INIT_07=256'h80000000_99fc1800_bc03000c_30c0f804_b0000000_30a0193c_f9e10000_3021ffe4; -defparam bootram.RAM0.INIT_08=256'h80000000_99fc2000_bc04000c_30a01940_bc030014_30800000_b0000000_e8601940; -defparam bootram.RAM0.INIT_09=256'h06463800_20e01948_20c01948_f9e10000_2021ffec_3021001c_b60f0008_e9e10000; +defparam bootram.RAM0.INIT_07=256'h80000000_99fc1800_bc03000c_30c0f804_b0000000_30a01cfc_f9e10000_3021ffe4; +defparam bootram.RAM0.INIT_08=256'h80000000_99fc2000_bc04000c_30a01d00_bc030014_30800000_b0000000_e8601d00; +defparam bootram.RAM0.INIT_09=256'h06463800_20e01d08_20c01d08_f9e10000_2021ffec_3021001c_b60f0008_e9e10000; defparam bootram.RAM0.INIT_0A=256'hb0000000_20c0f800_b0000000_bc92fff4_06463800_20c60004_f8060000_bc720014; -defparam bootram.RAM0.INIT_0B=256'hb9f410ac_bc92fff4_06463800_20c60004_f8060000_bc720014_06463800_20e0f82c; -defparam bootram.RAM0.INIT_0C=256'h32630000_20a00000_b9f4014c_20e00000_20c00000_80000000_b9f4122c_80000000; -defparam bootram.RAM0.INIT_0D=256'h20210014_b60f0008_30730000_c9e10000_80000000_b9f41078_80000000_b9f41234; +defparam bootram.RAM0.INIT_0B=256'hb9f41474_bc92fff4_06463800_20c60004_f8060000_bc720014_06463800_20e0f82c; +defparam bootram.RAM0.INIT_0C=256'h32630000_20a00000_b9f401a4_20e00000_20c00000_80000000_b9f415f4_80000000; +defparam bootram.RAM0.INIT_0D=256'h20210014_b60f0008_30730000_c9e10000_80000000_b9f41440_80000000_b9f415fc; defparam bootram.RAM0.INIT_0E=256'he9e10000_f9610004_fa410010_95608001_fa21000c_f9610008_f9e10000_3021ffec; defparam bootram.RAM0.INIT_0F=256'hbc050018_30210014_b62e0000_ea410010_ea21000c_e9610008_940bc001_e9610004; defparam bootram.RAM0.INIT_10=256'h3021ff2c_80000000_b60f0008_bc32fff4_16432800_30630001_80000000_10600000; -defparam bootram.RAM0.INIT_11=256'hb9f40440_32c1001c_3261004c_f8610028_f9e10000_fac100d0_fa6100cc_3061002c; -defparam bootram.RAM0.INIT_12=256'h22407fff_e8610024_bc230038_30a01438_10b30000_b9f40a18_10d60000_10b30000; -defparam bootram.RAM0.INIT_13=256'h30a01438_bc120040_aa430001_30a01400_e061001c_10a30000_be520034_16439003; -defparam bootram.RAM0.INIT_14=256'he8e10020_e8c10028_b800ffa8_80000000_b9f404d4_b800ffb4_80000000_b9f404e0; -defparam bootram.RAM0.INIT_15=256'h80000000_b9f404a8_b800ff88_80000000_b9f404b4_30a01400_80000000_b9f41010; -defparam bootram.RAM0.INIT_16=256'hb800ff60_80000000_b9f4048c_30a01404_80000000_b9f40e5c_30a08000_b0000000; -defparam bootram.RAM0.INIT_17=256'h30a0a120_b0000007_9403c001_ac640002_94808001_fa61001c_f9e10000_3021ffe0; -defparam bootram.RAM0.INIT_18=256'hb9f40b9c_80000000_b9f406c0_f800200c_80000000_b9f4fef4_f860200c_306000ff; -defparam bootram.RAM0.INIT_19=256'h30a01504_bc04013c_a4842000_e8803334_80000000_b9f40438_30a0143c_80000000; -defparam bootram.RAM0.INIT_1A=256'h30a01568_bc23010c_80000000_b9f40e58_30a00000_b0000018_80000000_b9f40420; -defparam bootram.RAM0.INIT_1B=256'h30a015b8_bc030058_80000000_b9f40dec_30a00000_b0000030_80000000_b9f40400; -defparam bootram.RAM0.INIT_1C=256'h30c07c00_b9f40b58_30a00000_b0000030_30e08000_b0000000_80000000_b9f403e0; -defparam bootram.RAM0.INIT_1D=256'he9e10000_80000000_b9f403ac_30a015e4_80000000_b9f40d7c_30a08000_b0000000; -defparam bootram.RAM0.INIT_1E=256'hb000003f_80000000_b9f4038c_30a01620_30210020_b60f0008_30600001_ea61001c; -defparam bootram.RAM0.INIT_1F=256'h80000000_b9f40368_30a014ac_12630000_be230030_80000000_b9f40d78_30a00000; -defparam bootram.RAM0.INIT_20=256'hb0000000_30210020_b60f0008_ea61001c_e9e10000_10730000_80000000_b9f4fe1c; -defparam bootram.RAM0.INIT_21=256'hb9f40ce8_30a08000_b0000000_30c07c00_b9f40ac4_30a00000_b000003f_30e08000; -defparam bootram.RAM0.INIT_22=256'hb60f0008_30600001_ea61001c_e9e10000_80000000_b9f40318_30a01470_80000000; -defparam bootram.RAM0.INIT_23=256'h80000000_b9f402e8_30a01450_b800feec_80000000_b9f402f8_30a01530_30210020; -defparam bootram.RAM0.INIT_24=256'h80000000_b9f402c8_30a014ac_bc23001c_80000000_b9f40cd4_30a00000_b000003f; -defparam bootram.RAM0.INIT_25=256'hb9f40a34_30a00000_b000003f_30e08000_b0000000_b800fe94_80000000_b9f4fd7c; -defparam bootram.RAM0.INIT_26=256'h80000000_b9f40288_30a01470_80000000_b9f40c58_30a08000_b0000000_30c07c00; -defparam bootram.RAM0.INIT_27=256'h3021ffd0_80000000_b60f0008_80000000_b9f4fb84_f9e10000_3021ffe4_b800fe5c; -defparam bootram.RAM0.INIT_28=256'h13260000_12e70000_13050000_12660000_fb21002c_fb010028_fae10024_fa61001c; -defparam bootram.RAM0.INIT_29=256'hbcb2002c_16572001_bc120030_aa43ffff_12c00000_b810001c_f9e10000_fac10020; -defparam bootram.RAM0.INIT_2A=256'hbe32ffd4_aa43000a_f0730000_10960000_90630060_10b80000_b9f405ec_32730001; -defparam bootram.RAM0.INIT_2B=256'heae10024_eac10020_ea61001c_e9e10000_10640000_f0130000_14999800_32d60001; -defparam bootram.RAM0.INIT_2C=256'hfb010028_fae10024_fa61001c_3021ffd0_30210030_b60f0008_eb21002c_eb010028; -defparam bootram.RAM0.INIT_2D=256'hb8100014_f9e10000_fac10020_13260000_12e70000_13050000_12660000_fb21002c; -defparam bootram.RAM0.INIT_2E=256'h10960000_90630060_10b80000_b9f4051c_32730001_bcb2002c_16572001_12c00000; -defparam bootram.RAM0.INIT_2F=256'he9e10000_10640000_f0130000_14999800_32d60001_be32ffdc_aa43000a_f0730000; -defparam bootram.RAM0.INIT_30=256'h3021ffd8_30210030_b60f0008_eb21002c_eb010028_eae10024_eac10020_ea61001c; -defparam bootram.RAM0.INIT_31=256'hb9f404b0_12660000_f9e10000_12e60000_12c50000_fae10024_fac10020_fa61001c; -defparam bootram.RAM0.INIT_32=256'hf0130000_3273ffff_32730001_be32ffec_aa43000a_f0730000_90630060_10b60000; -defparam bootram.RAM0.INIT_33=256'h10c50000_30210028_b60f0008_eae10024_eac10020_ea61001c_e9e10000_10770000; -defparam bootram.RAM0.INIT_34=256'h3021ffe4_3021001c_b60f0008_e9e10000_10a00000_b9f4ff94_f9e10000_3021ffe4; -defparam bootram.RAM0.INIT_35=256'hf9e10000_3021ffe4_3021001c_b60f0008_e9e10000_80000000_b9f40448_f9e10000; -defparam bootram.RAM0.INIT_36=256'hfac10020_fa61001c_3021ffdc_3021001c_b60f0008_e9e10000_10a00000_b9f4ffdc; -defparam bootram.RAM0.INIT_37=256'hb9f40324_10b60000_12c50000_be060024_90c30060_12660000_e0660000_f9e10000; -defparam bootram.RAM0.INIT_38=256'heac10020_ea61001c_e9e10000_10b60000_be26fff0_90c30060_e0730000_32730001; -defparam bootram.RAM0.INIT_39=256'h12c50000_b9f4ff9c_f9e10000_fac1001c_3021ffe0_30210024_b60f0008_10600000; -defparam bootram.RAM0.INIT_3A=256'h30210020_b60f0008_10600000_eac1001c_e9e10000_30c0000a_b9f402dc_10b60000; -defparam bootram.RAM0.INIT_3B=256'h3021001c_b60f0008_e9e10000_10a00000_b9f4ffc0_f9e10000_3021ffe4_10c50000; -defparam bootram.RAM0.INIT_3C=256'h3021001c_b60f0008_e9e10000_10a00000_b9f4ff48_f9e10000_3021ffe4_10c50000; -defparam bootram.RAM0.INIT_3D=256'h3021ffe0_3021001c_b60f0008_e9e10000_30c0000a_b9f40278_f9e10000_3021ffe4; -defparam bootram.RAM0.INIT_3E=256'he9e10000_10760000_10d60000_b9f40250_f9e10000_10a00000_12c50000_fac1001c; -defparam bootram.RAM0.INIT_3F=256'h12c60000_b9f40228_f9e10000_fac1001c_3021ffe0_30210020_b60f0008_eac1001c; -defparam bootram.RAM1.INIT_00=256'hb9f401b8_f9e10000_3021ffe4_30210020_b60f0008_eac1001c_e9e10000_10760000; -defparam bootram.RAM1.INIT_01=256'hb0000000_9404c001_ac870002_94e08001_3021001c_b60f0008_e9e10000_80000000; -defparam bootram.RAM1.INIT_02=256'hf860f81c_b0000000_f860200c_80633000_84632000_84c62800_a866ffff_e880f81c; -defparam bootram.RAM1.INIT_03=256'h94608001_80000000_b60f0008_9404c001_80843800_ac840002_94808001_a4e70002; -defparam bootram.RAM1.INIT_04=256'hf8a0f81c_b0000000_f8a0200c_88a52000_e880f81c_b0000000_9406c001_acc30002; -defparam bootram.RAM1.INIT_05=256'h94e08001_80000000_b60f0008_9404c001_80841800_ac840002_94808001_a4630002; -defparam bootram.RAM1.INIT_06=256'h80633000_84632000_84c62800_a866ffff_e880f820_b0000000_9404c001_ac870002; -defparam bootram.RAM1.INIT_07=256'h9404c001_80843800_ac840002_94808001_a4e70002_f860f820_b0000000_f8602020; -defparam bootram.RAM1.INIT_08=256'hfac10020_f9e10000_fb010028_fae10024_fa61001c_3021ffd4_80000000_b60f0008; -defparam bootram.RAM1.INIT_09=256'h32600001_be670038_12660000_be060040_90c30060_13050000_12e60000_e0660000; -defparam bootram.RAM1.INIT_0A=256'hc0779800_10b80000_b9f400cc_10730000_be120028_16569800_32c70001_b8100014; -defparam bootram.RAM1.INIT_0B=256'heac10020_ea61001c_e9e10000_10730000_3273ffff_32730001_be26ffe4_90c30060; -defparam bootram.RAM1.INIT_0C=256'hb9f40084_f9e10000_10a00000_3021ffe4_3021002c_b60f0008_eb010028_eae10024; -defparam bootram.RAM1.INIT_0D=256'h10c63000_80000000_b60f0008_f0c5192c_3021001c_b60f0008_e9e10000_30c0000a; -defparam bootram.RAM1.INIT_0E=256'hf9e10000_fa61001c_3021ffe0_80000000_b60f0008_f8653700_64a50405_e4661660; -defparam bootram.RAM1.INIT_0F=256'h32730001_10b30000_e0d3165c_90c60060_b9f4ffc4_10b30000_e0d3192c_12600000; -defparam bootram.RAM1.INIT_10=256'h30210020_b60f0008_ea61001c_e9e10000_bc32ffd8_aa530003_90c60060_b9f4ffbc; -defparam bootram.RAM1.INIT_11=256'h12650000_be120030_aa46000a_12c60000_f9e10000_fac10020_fa61001c_3021ffdc; -defparam bootram.RAM1.INIT_12=256'heac10020_ea61001c_e9e10000_fac5000c_bc03fffc_e8650004_30a33700_64730405; -defparam bootram.RAM1.INIT_13=256'hb810ffc8_30c0000d_b9f4ffac_bc32ffd0_aa430001_e065192c_30210024_b60f0008; -defparam bootram.RAM1.INIT_14=256'hbe120030_aa46000a_12c60000_f9e10000_fac10020_fa61001c_3021ffdc_64730405; -defparam bootram.RAM1.INIT_15=256'hea61001c_e9e10000_fac3000c_bc040008_e8830004_30633700_64730405_12650000; -defparam bootram.RAM1.INIT_16=256'hb9f4ff44_30c0000d_be32ffd0_aa430001_e065192c_30210024_b60f0008_eac10020; -defparam bootram.RAM1.INIT_17=256'he8650010_bc03fffc_e8650008_30a53700_64a50405_64730405_b810ffc4_80000000; -defparam bootram.RAM1.INIT_18=256'he8850008_e8650010_bc030014_e8650008_30a53700_64a50405_80000000_b60f0008; -defparam bootram.RAM1.INIT_19=256'hf9e10000_fac10020_3021ffdc_64a50405_80000000_b60f0008_90630060_be24fff8; -defparam bootram.RAM1.INIT_1A=256'hbe120034_aa53012d_b8000010_32600001_be230040_e8760008_32c53700_fa61001c; -defparam bootram.RAM1.INIT_1B=256'h3240012b_3273ffff_32730001_be03ffe8_e8760008_30a00001_b9f40040_3060ffff; -defparam bootram.RAM1.INIT_1C=256'hb60f0008_eac10020_ea61001c_e9e10000_e8760010_3060ffff_be52000c_16539001; -defparam bootram.RAM1.INIT_1D=256'hbe650048_bc430054_e8601930_bc260054_a4c30000_b0008000_e8603324_30210024; -defparam bootram.RAM1.INIT_1E=256'h80000000_80000000_80000000_80000000_10800000_bc660030_e8c01930_10660000; -defparam bootram.RAM1.INIT_1F=256'h16432800_30630001_bc32ffdc_16443000_30840001_80000000_80000000_80000000; -defparam bootram.RAM1.INIT_20=256'hf8801930_e483166c_10631800_a4630007_e8603324_80000000_b60f0008_bc32ffc8; -defparam bootram.RAM1.INIT_21=256'h3065ffc9_a46300ff_be520024_16459001_3240005a_3065ffa9_90a50060_b800ff9c; -defparam bootram.RAM1.INIT_22=256'h80000000_b60f0008_a46400ff_3085ffd0_be52000c_16459001_32400039_a46300ff; -defparam bootram.RAM1.INIT_23=256'hfae10024_fac10020_fa61001c_f9e10000_fb610034_13250000_fb21002c_3021ffc8; -defparam bootram.RAM1.INIT_24=256'h10650000_30a0ffff_be120034_aa43003a_13660000_e0790000_fb410030_fb010028; -defparam bootram.RAM1.INIT_25=256'heb610034_eb410030_eb21002c_eb010028_eae10024_eac10020_ea61001c_e9e10000; -defparam bootram.RAM1.INIT_26=256'hbe04001c_90840060_30650001_c085c800_30a00001_e8c01934_30210038_b60f0008; -defparam bootram.RAM1.INIT_27=256'hb9f4ff28_e0b90001_30a0fffe_b810ffac_bc23ffe4_a4630044_c0662000_a4a300ff; -defparam bootram.RAM1.INIT_28=256'h10791800_fa7b0004_10739800_12761800_66c30404_b9f4ff1c_e0b90002_80000000; -defparam bootram.RAM1.INIT_29=256'he0b90003_13530000_b9f4fef0_e0b90005_30a0fffd_be38ff74_93040060_e083000b; -defparam bootram.RAM1.INIT_2A=256'hb9f4fec8_64630408_e0b90006_66c3040c_b9f4fed8_e0b90004_66e30404_b9f4fee4; -defparam bootram.RAM1.INIT_2B=256'he0b90008_80000000_b9f4feb0_e0b90007_fafb0008_12f7b000_12d61800_12d61800; -defparam bootram.RAM1.INIT_2C=256'hea7b000c_13580000_10f30000_be130060_f07b0000_1063b000_66c30404_b9f4fea4; -defparam bootram.RAM1.INIT_2D=256'hb9f4fe68_e0b60001_12d9b000_b9f4fe74_c0b6c800_a6d600ff_32d60009_12d8c000; -defparam bootram.RAM1.INIT_2E=256'ha70400ff_c073c000_30980001_e8fb0004_ea7b000c_d0789800_1063b800_66e30404; -defparam bootram.RAM1.INIT_2F=256'h64760008_12e73800_e09b0000_eadb0008_a74300ff_be52ffb8_1647c003_107a1800; -defparam bootram.RAM1.INIT_30=256'he0b7000a_12d61800_b9f4fe10_107a1800_12c7b000_10632000_e0b70009_12f9b800; -defparam bootram.RAM1.INIT_31=256'hbe32fe60_1643b000_a46300ff_a6d600ff_1063c000_16d60000_67030404_b9f4fe04; -defparam bootram.RAM1.INIT_32=256'h80000000_b60f0008_bc23fff8_a4630100_e8603b10_10a00000_b810fe58_30a0fffb; -defparam bootram.RAM1.INIT_33=256'hbc23fff8_a4630100_e8603b10_a4a500ff_80884800_a1292000_a508007f_a5290600; -defparam bootram.RAM1.INIT_34=256'h10650000_be050018_f8803b10_a0840100_f8603b18_a46600ff_f8803b10_f8e03b00; -defparam bootram.RAM1.INIT_35=256'h10e60000_10c00000_80000000_b60f0008_e8603b00_bc23fff8_a4630100_e8603b10; -defparam bootram.RAM1.INIT_36=256'hb9f4ff84_f8603b14_30600001_31200400_31000008_10a00000_f9e10000_3021ffe4; -defparam bootram.RAM1.INIT_37=256'hfa61002c_12c50000_fac10030_3021ffc4_3021001c_b60f0008_e9e10000_80000000; -defparam bootram.RAM1.INIT_38=256'hf8003b18_30600400_12670000_b9f4ff3c_fae10034_13060000_f9e10000_fb010038; -defparam bootram.RAM1.INIT_39=256'h30800428_f8603b18_30600001_fac03b00_f8603b04_3060000b_66d60408_f8603b10; -defparam bootram.RAM1.INIT_3A=256'h12e00000_12d30000_be18009c_80000000_b9f4ff00_f8603b10_30600528_f8803b10; -defparam bootram.RAM1.INIT_3B=256'he8803b0c_80000000_b9f4fed8_f8803b10_30800500_f8603b10_30600400_3261001c; -defparam bootram.RAM1.INIT_3C=256'hf8610028_e8603b00_f8810024_e8803b04_f8610020_e8603b08_f881001c_14b7c000; -defparam bootram.RAM1.INIT_3D=256'h30840001_d0762000_c0732000_30a00010_10800000_beb20034_16459003_22400010; -defparam bootram.RAM1.INIT_3E=256'hbc25ffd8_b800ff8c_12d62800_beb20020_1658b803_12f72800_bc32fff0_16442800; -defparam bootram.RAM1.INIT_3F=256'heac10030_ea61002c_e9e10000_f8003b18_12d62800_be52ff7c_1658b803_12f72800; -defparam bootram.RAM2.INIT_00=256'h30a00001_3021ffe4_30e00000_b0009f00_3021003c_b60f0008_eb010038_eae10034; -defparam bootram.RAM2.INIT_01=256'ha463ffff_b00000ff_e9e10000_31200400_b9f4fe34_f9e10000_31000020_30c00001; -defparam bootram.RAM2.INIT_02=256'he9e10000_bc030010_f9e10000_3021ffe4_e860f828_b0000000_3021001c_b60f0008; -defparam bootram.RAM2.INIT_03=256'hbe120010_aa440020_a48400ff_64830008_80000000_b9f4ffa8_3021001c_b60f0008; -defparam bootram.RAM2.INIT_04=256'h16439001_32400018_bcb2fff0_16439001_32400015_80000000_b9f40170_a46300ff; -defparam bootram.RAM2.INIT_05=256'hf9e10000_3021ffe4_e860f824_b0000000_b800ffb0_f860f828_b0000000_bc52ffe4; -defparam bootram.RAM2.INIT_06=256'ha48400ff_64830008_80000000_b9f4ff40_3021001c_b60f0008_e9e10000_bc030010; -defparam bootram.RAM2.INIT_07=256'hbcb2fff0_16459001_32400015_80000000_b9f40108_a4a300ff_be120010_aa440020; -defparam bootram.RAM2.INIT_08=256'hf860f824_b0000000_f8a0f828_b0000000_e0651666_bc52ffe4_16459001_32400018; -defparam bootram.RAM2.INIT_09=256'hb9f40174_f9e10000_10b60000_10c50000_12c00000_fac1001c_3021ffe0_b800ffa4; -defparam bootram.RAM2.INIT_0A=256'h3021ffd4_30210020_b60f0008_eac1001c_e9e10000_80000000_99fcb000_30e00024; -defparam bootram.RAM2.INIT_0B=256'h30c01680_10b60000_30c00006_b9f4fd80_f9e10000_10f60000_32c1001c_fac10028; -defparam bootram.RAM2.INIT_0C=256'h6464001f_eac10028_e9e10000_a884ffff_80841800_14830000_30e00006_b9f400b0; -defparam bootram.RAM2.INIT_0D=256'hb9f4fd34_f9e10000_10f60000_32c1001c_fac10028_3021ffd4_3021002c_b60f0008; -defparam bootram.RAM2.INIT_0E=256'ha884ffff_80841800_14830000_30e00006_b9f40064_30c01688_10b60000_30c00006; -defparam bootram.RAM2.INIT_0F=256'hf9e10000_3021ffe4_30a01690_3021002c_b60f0008_6464001f_eac10028_e9e10000; -defparam bootram.RAM2.INIT_10=256'h80000000_b6910000_80000000_b6110000_30a0ffff_b9f4ee68_80000000_b9f4f580; -defparam bootram.RAM2.INIT_11=256'h80653000_beb2005c_16479003_22400003_80000000_b60f0008_80000000_b60f0008; -defparam bootram.RAM2.INIT_12=256'h30a50004_30e7fffc_bc320040_16432000_e8660000_e8850000_bc230050_a4630003; -defparam bootram.RAM2.INIT_13=256'he1050000_bc120028_aa47ffff_30e7ffff_30c60004_be52ffe0_16479003_22400003; -defparam bootram.RAM2.INIT_14=256'hbc32ffe0_aa47ffff_30e7ffff_30c60001_30a50001_be320020_16434000_e0660000; -defparam bootram.RAM2.INIT_15=256'h10850000_beb20018_16479003_2240000f_14634000_b60f0008_10600000_b60f0008; -defparam bootram.RAM2.INIT_16=256'he0660000_10e72000_11040000_bc070024_11050000_be030034_a4630003_80662800; -defparam bootram.RAM2.INIT_17=256'he8860000_10650000_b60f0008_30c60001_be32fff0_16474000_31080001_f0680000; -defparam bootram.RAM2.INIT_18=256'h30c60010_e866000c_f8880008_e8860008_f8680004_e8660004_f8880000_30e7fff0; -defparam bootram.RAM2.INIT_19=256'hbcb2002c_16479003_22400003_31080010_be52ffd0_16479003_2240000f_f868000c; -defparam bootram.RAM2.INIT_1A=256'h30840004_be52ffec_16479003_22400003_d8682000_30e7fffc_c8662000_10800000; -defparam bootram.RAM2.INIT_1B=256'hf9e10000_fa61001c_3021ffe0_e86013f0_10880000_b810ff68_11044000_10c43000; -defparam bootram.RAM2.INIT_1C=256'hbc32fff0_aa43ffff_e8730000_3273fffc_99fc1800_bc120018_aa43ffff_326013f0; -defparam bootram.RAM2.INIT_1D=256'h80000000_b9f4ed20_d9e00800_3021fff8_30210020_b60f0008_ea61001c_e9e10000; -defparam bootram.RAM2.INIT_1E=256'hb9f4ec98_d9e00800_3021fff8_30210008_b60f0008_c9e00800_80000000_b9f4ffb0; -defparam bootram.RAM2.INIT_1F=256'h00000000_ffffffff_00000000_ffffffff_30210008_b60f0008_c9e00800_80000000; -defparam bootram.RAM2.INIT_20=256'h65642120_7475726e_65207265_696d6167_61696e20_523a206d_4552524f_4f4b0000; -defparam bootram.RAM2.INIT_21=256'h55535250_4e4f4b00_64652e00_64206d6f_206c6f61_49484558_20696e20_4261636b; -defparam bootram.RAM2.INIT_22=256'h50322b20_20555352_74696e67_53746172_720a0000_6f616465_6f6f746c_322b2062; -defparam bootram.RAM2.INIT_23=256'h6e206672_65747572_523a2072_4552524f_2e000000_6d6f6465_61666520_696e2073; -defparam bootram.RAM2.INIT_24=256'h206e6576_6f756c64_73207368_20546869_72616d21_70726f67_61696e20_6f6d206d; -defparam bootram.RAM2.INIT_25=256'h69726d77_66652066_6f207361_523a206e_4552524f_6e210000_61707065_65722068; -defparam bootram.RAM2.INIT_26=256'h62726963_6d206120_20492061_626c652e_61696c61_65206176_696d6167_61726520; -defparam bootram.RAM2.INIT_27=256'h2052414d_5820746f_20494845_6c6f6164_20746f20_66726565_65656c20_6b2e2046; -defparam bootram.RAM2.INIT_28=256'h6374696f_726f6475_69642070_2076616c_20666f72_6b696e67_43686563_2e000000; -defparam bootram.RAM2.INIT_29=256'h74696f6e_6f647563_64207072_56616c69_2e2e2e00_6d616765_47412069_6e204650; -defparam bootram.RAM2.INIT_2A=256'h6720746f_7074696e_7474656d_642e2041_666f756e_61676520_4120696d_20465047; -defparam bootram.RAM2.INIT_2B=256'h46504741_696f6e20_64756374_2070726f_616c6964_4e6f2076_742e0000_20626f6f; -defparam bootram.RAM2.INIT_2C=256'h6c6f6164_20746f20_74696e67_74656d70_2e0a4174_6f756e64_67652066_20696d61; -defparam bootram.RAM2.INIT_2D=256'h64207072_56616c69_2e2e2e00_77617265_6669726d_696f6e20_64756374_2070726f; -defparam bootram.RAM2.INIT_2E=256'h64696e67_204c6f61_756e642e_6520666f_6d776172_20666972_74696f6e_6f647563; -defparam bootram.RAM2.INIT_2F=256'h70726f67_61696e20_6f6d206d_6e206672_65747572_523a2052_4552524f_2e2e2e00; -defparam bootram.RAM2.INIT_30=256'h6e210000_61707065_65722068_206e6576_6f756c64_73207368_20546869_72616d21; -defparam bootram.RAM2.INIT_31=256'h20666f75_77617265_6669726d_696f6e20_64756374_2070726f_616c6964_4e6f2076; -defparam bootram.RAM2.INIT_32=256'h05050400_2e2e2e00_77617265_6669726d_61666520_6e672073_54727969_6e642e20; -defparam bootram.RAM2.INIT_33=256'h10101200_06820594_09c407d0_13880d05_00002710_01b200d9_05160364_14580a2c; -defparam bootram.RAM2.INIT_34=256'h00202020_00000000_6f72740a_0a0a6162_aa990000_ffffffff_b8080000_b0000000; -defparam bootram.RAM2.INIT_35=256'h20881010_20202020_20202020_20202020_20202020_28282820_20202828_20202020; -defparam bootram.RAM2.INIT_36=256'h10104141_10101010_04040410_04040404_10040404_10101010_10101010_10101010; -defparam bootram.RAM2.INIT_37=256'h10104242_10101010_01010101_01010101_01010101_01010101_01010101_41414141; -defparam bootram.RAM2.INIT_38=256'h20000000_10101010_02020202_02020202_02020202_02020202_02020202_42424242; -defparam bootram.RAM2.INIT_39=256'h00000000_00000000_00000000_00000000_00000000_00000000_00000000_00000000; -defparam bootram.RAM2.INIT_3A=256'h00000000_00000000_00000000_00000000_00000000_00000000_00000000_00000000; -defparam bootram.RAM2.INIT_3B=256'h00000000_00000000_00000000_00000000_00000000_00000000_00000000_00000000; -defparam bootram.RAM2.INIT_3C=256'h00000000_00000000_00000000_00000000_00000000_00000000_00000000_00000000; -defparam bootram.RAM2.INIT_3D=256'h00000000_00000000_00000000_00000000_00000000_00000000_00000000_00000000; -defparam bootram.RAM2.INIT_3E=256'h00000000_00000000_00000000_00000000_00000000_00000000_00000000_00000000; -defparam bootram.RAM2.INIT_3F=256'h00000000_00000000_00000000_00000000_00000000_00000000_00000000_00000000; -defparam bootram.RAM3.INIT_00=256'h00000000_00000000_00000000_00000000_00000000_00000000_00000000_00000000; -defparam bootram.RAM3.INIT_01=256'h20202020_20202020_20202020_20202020_28282020_20282828_20202020_20202020; -defparam bootram.RAM3.INIT_02=256'h10101010_04041010_04040404_04040404_10101010_10101010_10101010_88101010; -defparam bootram.RAM3.INIT_03=256'h10101010_01010110_01010101_01010101_01010101_01010101_41414101_10414141; -defparam bootram.RAM3.INIT_04=256'h10101020_02020210_02020202_02020202_02020202_02020202_42424202_10424242; -defparam bootram.RAM3.INIT_05=256'h00000000_00000000_00000000_00000000_00000000_00000000_00000000_00000000; -defparam bootram.RAM3.INIT_06=256'h00000000_00000000_00000000_00000000_00000000_00000000_00000000_00000000; -defparam bootram.RAM3.INIT_07=256'h00000000_00000000_00000000_00000000_00000000_00000000_00000000_00000000; -defparam bootram.RAM3.INIT_08=256'h00000000_00000000_00000000_00000000_00000000_00000000_00000000_00000000; -defparam bootram.RAM3.INIT_09=256'h00000000_00000000_00001820_ffffffff_01010100_000013fc_00000000_00000000; -defparam bootram.RAM3.INIT_0A=256'h00000000_00000000_00000000_00000000_00000000_00000000_00000000_00000000; +defparam bootram.RAM0.INIT_11=256'hb9f40660_32c1001c_3261004c_f8610028_f9e10000_fac100d0_fa6100cc_3061002c; +defparam bootram.RAM0.INIT_12=256'h22407fff_e8610024_bc230038_30a01800_10b30000_b9f40c38_10d60000_10b30000; +defparam bootram.RAM0.INIT_13=256'h30a01800_bc120040_aa430001_30a017c8_e061001c_10a30000_be520034_16439003; +defparam bootram.RAM0.INIT_14=256'he8e10020_e8c10028_b800ffa8_80000000_b9f406f4_b800ffb4_80000000_b9f40700; +defparam bootram.RAM0.INIT_15=256'h80000000_b9f406c8_b800ff88_80000000_b9f406d4_30a017c8_80000000_b9f413d8; +defparam bootram.RAM0.INIT_16=256'hb800ff60_80000000_b9f406ac_30a017cc_80000000_b9f410dc_30a08000_b0000000; +defparam bootram.RAM0.INIT_17=256'he9e10000_30e00001_b9f4035c_f9e10000_30a0fff7_30c1001c_f0a1001c_3021ffe0; +defparam bootram.RAM0.INIT_18=256'h30e00001_b9f40294_f9e10000_30c1001c_30a0fff7_3021ffe0_30210020_b60f0008; +defparam bootram.RAM0.INIT_19=256'hf9e10000_3021ffdc_30210020_b60f0008_6463001f_14630000_e9e10000_e061001c; +defparam bootram.RAM0.INIT_1A=256'h306000ff_30a0a120_b0000007_9403c001_ac640002_94808001_fac10020_fa61001c; +defparam bootram.RAM0.INIT_1B=256'h80000000_b9f40d60_80000000_b9f40884_f800200c_80000000_b9f4fe98_f860200c; +defparam bootram.RAM0.INIT_1C=256'hbe23017c_80000000_b9f4ff74_80000000_b9f405f4_30a01804_80000000_b9f4020c; +defparam bootram.RAM0.INIT_1D=256'hb9f41020_30a00000_b0000030_bc160100_bc130134_a6632000_e8603334_12c30000; +defparam bootram.RAM0.INIT_1E=256'h30e08000_b0000000_80000000_b9f405b0_30a01980_12c30000_be030068_80000000; +defparam bootram.RAM0.INIT_1F=256'h80000000_b9f40fac_30a08000_b0000000_30c07c00_b9f40d28_30a00000_b0000030; +defparam bootram.RAM0.INIT_20=256'hea61001c_e9e10000_30600001_10a00000_b9f410e4_80000000_b9f4057c_30a019ac; +defparam bootram.RAM0.INIT_21=256'h30a00000_b000003f_80000000_b9f40550_30a019e8_30210024_b60f0008_eac10020; +defparam bootram.RAM0.INIT_22=256'hb9f4fdc0_80000000_b9f4052c_30a01874_12630000_be230024_80000000_b9f40f9c; +defparam bootram.RAM0.INIT_23=256'hb9f40c94_30a00000_b000003f_30e08000_b0000000_10730000_b810ffb4_80000000; +defparam bootram.RAM0.INIT_24=256'h80000000_b9f404e8_30a01838_80000000_b9f40f18_30a08000_b0000000_30c07c00; +defparam bootram.RAM0.INIT_25=256'hb0000018_80000000_b9f404cc_30a018cc_30600001_b810ff70_10b60000_b9f41050; +defparam bootram.RAM0.INIT_26=256'hb800fed8_80000000_b9f404ac_30a01930_bc230098_80000000_b9f40e80_30a00000; +defparam bootram.RAM0.INIT_27=256'hbc230028_80000000_b9f40ee8_30a00000_b000003f_80000000_b9f4049c_30a01818; +defparam bootram.RAM0.INIT_28=256'h10a00000_b9f4fdc8_b800fe9c_80000000_b9f4fd10_80000000_b9f4047c_30a01874; +defparam bootram.RAM0.INIT_29=256'hb0000000_30c07c00_b9f40bdc_30a00000_b000003f_30e08000_b0000000_b800fe84; +defparam bootram.RAM0.INIT_2A=256'h10b30000_b9f40f98_80000000_b9f40430_30a01838_80000000_b9f40e60_30a08000; +defparam bootram.RAM0.INIT_2B=256'h30a00000_b0000018_30a00001_b9f4fd70_80000000_b9f40418_30a018f8_b800fe50; +defparam bootram.RAM0.INIT_2C=256'h30600080_f8003104_f8603100_30600012_f8003108_b800ff48_80000000_b9f40f70; +defparam bootram.RAM0.INIT_2D=256'hbe23fff8_a4630040_e8603110_a4a500ff_be070088_80000000_b60f0008_f8603108; +defparam bootram.RAM0.INIT_2E=256'hbc23fff8_a4630002_e8603110_f8803110_30800090_f860310c_a0630001_10652800; +defparam bootram.RAM0.INIT_2F=256'hf8603110_30600020_be120038_aa470001_10800000_be230058_a4630080_e8603110; +defparam bootram.RAM0.INIT_30=256'h30c60001_be07001c_f0660000_30e7ffff_e860310c_bc23fff8_a4630002_e8603110; +defparam bootram.RAM0.INIT_31=256'h10640000_b60f0008_30800001_30600068_b810ffd0_30600020_be32ffd8_aa470001; +defparam bootram.RAM0.INIT_32=256'hbe23fff8_a4630040_e8603110_a4a500ff_10640000_b60f0008_f8603110_30600040; +defparam bootram.RAM0.INIT_33=256'ha4630002_e8603110_f8603110_306000d0_30600090_be27000c_f860310c_10652800; +defparam bootram.RAM0.INIT_34=256'he0660000_30800001_be070068_10800000_be23005c_a4630080_e8603110_bc23fff8; +defparam bootram.RAM0.INIT_35=256'hbc23fff8_a4630002_e8603110_f8803110_bc120030_aa470001_f860310c_30800010; +defparam bootram.RAM0.INIT_36=256'hb810ffd4_b800ffc4_30c60001_be070028_30e7ffff_be23001c_a4630080_e8603110; +defparam bootram.RAM0.INIT_37=256'hb60f0008_30800001_10640000_b60f0008_f8603110_30600040_10800000_30800050; +defparam bootram.RAM0.INIT_38=256'h3021ffd0_80000000_b60f0008_80000000_b9f4f964_f9e10000_3021ffe4_10640000; +defparam bootram.RAM0.INIT_39=256'h13260000_12e70000_13050000_12660000_fb21002c_fb010028_fae10024_fa61001c; +defparam bootram.RAM0.INIT_3A=256'hbcb2002c_16572001_bc120030_aa43ffff_12c00000_b810001c_f9e10000_fac10020; +defparam bootram.RAM0.INIT_3B=256'hbe32ffd4_aa43000a_f0730000_10960000_90630060_10b80000_b9f405ec_32730001; +defparam bootram.RAM0.INIT_3C=256'heae10024_eac10020_ea61001c_e9e10000_10640000_f0130000_14999800_32d60001; +defparam bootram.RAM0.INIT_3D=256'hfb010028_fae10024_fa61001c_3021ffd0_30210030_b60f0008_eb21002c_eb010028; +defparam bootram.RAM0.INIT_3E=256'hb8100014_f9e10000_fac10020_13260000_12e70000_13050000_12660000_fb21002c; +defparam bootram.RAM0.INIT_3F=256'h10960000_90630060_10b80000_b9f4051c_32730001_bcb2002c_16572001_12c00000; +defparam bootram.RAM1.INIT_00=256'he9e10000_10640000_f0130000_14999800_32d60001_be32ffdc_aa43000a_f0730000; +defparam bootram.RAM1.INIT_01=256'h3021ffd8_30210030_b60f0008_eb21002c_eb010028_eae10024_eac10020_ea61001c; +defparam bootram.RAM1.INIT_02=256'hb9f404b0_12660000_f9e10000_12e60000_12c50000_fae10024_fac10020_fa61001c; +defparam bootram.RAM1.INIT_03=256'hf0130000_3273ffff_32730001_be32ffec_aa43000a_f0730000_90630060_10b60000; +defparam bootram.RAM1.INIT_04=256'h10c50000_30210028_b60f0008_eae10024_eac10020_ea61001c_e9e10000_10770000; +defparam bootram.RAM1.INIT_05=256'h3021ffe4_3021001c_b60f0008_e9e10000_10a00000_b9f4ff94_f9e10000_3021ffe4; +defparam bootram.RAM1.INIT_06=256'hf9e10000_3021ffe4_3021001c_b60f0008_e9e10000_80000000_b9f40448_f9e10000; +defparam bootram.RAM1.INIT_07=256'hfac10020_fa61001c_3021ffdc_3021001c_b60f0008_e9e10000_10a00000_b9f4ffdc; +defparam bootram.RAM1.INIT_08=256'hb9f40324_10b60000_12c50000_be060024_90c30060_12660000_e0660000_f9e10000; +defparam bootram.RAM1.INIT_09=256'heac10020_ea61001c_e9e10000_10b60000_be26fff0_90c30060_e0730000_32730001; +defparam bootram.RAM1.INIT_0A=256'h12c50000_b9f4ff9c_f9e10000_fac1001c_3021ffe0_30210024_b60f0008_10600000; +defparam bootram.RAM1.INIT_0B=256'h30210020_b60f0008_10600000_eac1001c_e9e10000_30c0000a_b9f402dc_10b60000; +defparam bootram.RAM1.INIT_0C=256'h3021001c_b60f0008_e9e10000_10a00000_b9f4ffc0_f9e10000_3021ffe4_10c50000; +defparam bootram.RAM1.INIT_0D=256'h3021001c_b60f0008_e9e10000_10a00000_b9f4ff48_f9e10000_3021ffe4_10c50000; +defparam bootram.RAM1.INIT_0E=256'h3021ffe0_3021001c_b60f0008_e9e10000_30c0000a_b9f40278_f9e10000_3021ffe4; +defparam bootram.RAM1.INIT_0F=256'he9e10000_10760000_10d60000_b9f40250_f9e10000_10a00000_12c50000_fac1001c; +defparam bootram.RAM1.INIT_10=256'h12c60000_b9f40228_f9e10000_fac1001c_3021ffe0_30210020_b60f0008_eac1001c; +defparam bootram.RAM1.INIT_11=256'hb9f401b8_f9e10000_3021ffe4_30210020_b60f0008_eac1001c_e9e10000_10760000; +defparam bootram.RAM1.INIT_12=256'hb0000000_9404c001_ac870002_94e08001_3021001c_b60f0008_e9e10000_80000000; +defparam bootram.RAM1.INIT_13=256'hf860f81c_b0000000_f860200c_80633000_84632000_84c62800_a866ffff_e880f81c; +defparam bootram.RAM1.INIT_14=256'h94608001_80000000_b60f0008_9404c001_80843800_ac840002_94808001_a4e70002; +defparam bootram.RAM1.INIT_15=256'hf8a0f81c_b0000000_f8a0200c_88a52000_e880f81c_b0000000_9406c001_acc30002; +defparam bootram.RAM1.INIT_16=256'h94e08001_80000000_b60f0008_9404c001_80841800_ac840002_94808001_a4630002; +defparam bootram.RAM1.INIT_17=256'h80633000_84632000_84c62800_a866ffff_e880f820_b0000000_9404c001_ac870002; +defparam bootram.RAM1.INIT_18=256'h9404c001_80843800_ac840002_94808001_a4e70002_f860f820_b0000000_f8602020; +defparam bootram.RAM1.INIT_19=256'hfac10020_f9e10000_fb010028_fae10024_fa61001c_3021ffd4_80000000_b60f0008; +defparam bootram.RAM1.INIT_1A=256'h32600001_be670038_12660000_be060040_90c30060_13050000_12e60000_e0660000; +defparam bootram.RAM1.INIT_1B=256'hc0779800_10b80000_b9f400cc_10730000_be120028_16569800_32c70001_b8100014; +defparam bootram.RAM1.INIT_1C=256'heac10020_ea61001c_e9e10000_10730000_3273ffff_32730001_be26ffe4_90c30060; +defparam bootram.RAM1.INIT_1D=256'hb9f40084_f9e10000_10a00000_3021ffe4_3021002c_b60f0008_eb010028_eae10024; +defparam bootram.RAM1.INIT_1E=256'h10c63000_80000000_b60f0008_f0c51cec_3021001c_b60f0008_e9e10000_30c0000a; +defparam bootram.RAM1.INIT_1F=256'hf9e10000_fa61001c_3021ffe0_80000000_b60f0008_f8653700_64a50405_e4661a28; +defparam bootram.RAM1.INIT_20=256'h32730001_10b30000_e0d31a24_90c60060_b9f4ffc4_10b30000_e0d31cec_12600000; +defparam bootram.RAM1.INIT_21=256'h30210020_b60f0008_ea61001c_e9e10000_bc32ffd8_aa530003_90c60060_b9f4ffbc; +defparam bootram.RAM1.INIT_22=256'h12650000_be120030_aa46000a_12c60000_f9e10000_fac10020_fa61001c_3021ffdc; +defparam bootram.RAM1.INIT_23=256'heac10020_ea61001c_e9e10000_fac5000c_bc03fffc_e8650004_30a33700_64730405; +defparam bootram.RAM1.INIT_24=256'hb810ffc8_30c0000d_b9f4ffac_bc32ffd0_aa430001_e0651cec_30210024_b60f0008; +defparam bootram.RAM1.INIT_25=256'hbe120030_aa46000a_12c60000_f9e10000_fac10020_fa61001c_3021ffdc_64730405; +defparam bootram.RAM1.INIT_26=256'hea61001c_e9e10000_fac3000c_bc040008_e8830004_30633700_64730405_12650000; +defparam bootram.RAM1.INIT_27=256'hb9f4ff44_30c0000d_be32ffd0_aa430001_e0651cec_30210024_b60f0008_eac10020; +defparam bootram.RAM1.INIT_28=256'he8650010_bc03fffc_e8650008_30a53700_64a50405_64730405_b810ffc4_80000000; +defparam bootram.RAM1.INIT_29=256'he8850008_e8650010_bc030014_e8650008_30a53700_64a50405_80000000_b60f0008; +defparam bootram.RAM1.INIT_2A=256'hf9e10000_fac10020_3021ffdc_64a50405_80000000_b60f0008_90630060_be24fff8; +defparam bootram.RAM1.INIT_2B=256'hbe120034_aa53012d_b8000010_32600001_be230040_e8760008_32c53700_fa61001c; +defparam bootram.RAM1.INIT_2C=256'h3240012b_3273ffff_32730001_be03ffe8_e8760008_30a00001_b9f40040_3060ffff; +defparam bootram.RAM1.INIT_2D=256'hb60f0008_eac10020_ea61001c_e9e10000_e8760010_3060ffff_be52000c_16539001; +defparam bootram.RAM1.INIT_2E=256'hbe650048_bc430054_e8601cf0_bc260054_a4c30000_b0008000_e8603324_30210024; +defparam bootram.RAM1.INIT_2F=256'h80000000_80000000_80000000_80000000_10800000_bc660030_e8c01cf0_10660000; +defparam bootram.RAM1.INIT_30=256'h16432800_30630001_bc32ffdc_16443000_30840001_80000000_80000000_80000000; +defparam bootram.RAM1.INIT_31=256'hf8801cf0_e4831a34_10631800_a4630007_e8603324_80000000_b60f0008_bc32ffc8; +defparam bootram.RAM1.INIT_32=256'h3065ffc9_a46300ff_be520024_16459001_3240005a_3065ffa9_90a50060_b800ff9c; +defparam bootram.RAM1.INIT_33=256'h80000000_b60f0008_a46400ff_3085ffd0_be52000c_16459001_32400039_a46300ff; +defparam bootram.RAM1.INIT_34=256'hfae10024_fac10020_fa61001c_f9e10000_fb610034_13250000_fb21002c_3021ffc8; +defparam bootram.RAM1.INIT_35=256'h10650000_30a0ffff_be120034_aa43003a_13660000_e0790000_fb410030_fb010028; +defparam bootram.RAM1.INIT_36=256'heb610034_eb410030_eb21002c_eb010028_eae10024_eac10020_ea61001c_e9e10000; +defparam bootram.RAM1.INIT_37=256'hbe04001c_90840060_30650001_c085c800_30a00001_e8c01cf4_30210038_b60f0008; +defparam bootram.RAM1.INIT_38=256'hb9f4ff28_e0b90001_30a0fffe_b810ffac_bc23ffe4_a4630044_c0662000_a4a300ff; +defparam bootram.RAM1.INIT_39=256'h10791800_fa7b0004_10739800_12761800_66c30404_b9f4ff1c_e0b90002_80000000; +defparam bootram.RAM1.INIT_3A=256'he0b90003_13530000_b9f4fef0_e0b90005_30a0fffd_be38ff74_93040060_e083000b; +defparam bootram.RAM1.INIT_3B=256'hb9f4fec8_64630408_e0b90006_66c3040c_b9f4fed8_e0b90004_66e30404_b9f4fee4; +defparam bootram.RAM1.INIT_3C=256'he0b90008_80000000_b9f4feb0_e0b90007_fafb0008_12f7b000_12d61800_12d61800; +defparam bootram.RAM1.INIT_3D=256'hea7b000c_13580000_10f30000_be130060_f07b0000_1063b000_66c30404_b9f4fea4; +defparam bootram.RAM1.INIT_3E=256'hb9f4fe68_e0b60001_12d9b000_b9f4fe74_c0b6c800_a6d600ff_32d60009_12d8c000; +defparam bootram.RAM1.INIT_3F=256'ha70400ff_c073c000_30980001_e8fb0004_ea7b000c_d0789800_1063b800_66e30404; +defparam bootram.RAM2.INIT_00=256'h64760008_12e73800_e09b0000_eadb0008_a74300ff_be52ffb8_1647c003_107a1800; +defparam bootram.RAM2.INIT_01=256'he0b7000a_12d61800_b9f4fe10_107a1800_12c7b000_10632000_e0b70009_12f9b800; +defparam bootram.RAM2.INIT_02=256'hbe32fe60_1643b000_a46300ff_a6d600ff_1063c000_16d60000_67030404_b9f4fe04; +defparam bootram.RAM2.INIT_03=256'h80000000_b60f0008_bc23fff8_a4630100_e8603b10_10a00000_b810fe58_30a0fffb; +defparam bootram.RAM2.INIT_04=256'hbc23fff8_a4630100_e8603b10_a4a500ff_80884800_a1292000_a508007f_a5290600; +defparam bootram.RAM2.INIT_05=256'h10650000_be050018_f8803b10_a0840100_f8603b18_a46600ff_f8803b10_f8e03b00; +defparam bootram.RAM2.INIT_06=256'h10e60000_10c00000_80000000_b60f0008_e8603b00_bc23fff8_a4630100_e8603b10; +defparam bootram.RAM2.INIT_07=256'hb9f4ff84_f8603b14_30600001_31200400_31000008_10a00000_f9e10000_3021ffe4; +defparam bootram.RAM2.INIT_08=256'hfa61002c_12c50000_fac10030_3021ffc4_3021001c_b60f0008_e9e10000_80000000; +defparam bootram.RAM2.INIT_09=256'hf8003b18_30600400_12670000_b9f4ff3c_fae10034_13060000_f9e10000_fb010038; +defparam bootram.RAM2.INIT_0A=256'h30800428_f8603b18_30600001_fac03b00_f8603b04_3060000b_66d60408_f8603b10; +defparam bootram.RAM2.INIT_0B=256'h12e00000_12d30000_be18009c_80000000_b9f4ff00_f8603b10_30600528_f8803b10; +defparam bootram.RAM2.INIT_0C=256'he8803b0c_80000000_b9f4fed8_f8803b10_30800500_f8603b10_30600400_3261001c; +defparam bootram.RAM2.INIT_0D=256'hf8610028_e8603b00_f8810024_e8803b04_f8610020_e8603b08_f881001c_14b7c000; +defparam bootram.RAM2.INIT_0E=256'h30840001_d0762000_c0732000_30a00010_10800000_beb20034_16459003_22400010; +defparam bootram.RAM2.INIT_0F=256'hbc25ffd8_b800ff8c_12d62800_beb20020_1658b803_12f72800_bc32fff0_16442800; +defparam bootram.RAM2.INIT_10=256'heac10030_ea61002c_e9e10000_f8003b18_12d62800_be52ff7c_1658b803_12f72800; +defparam bootram.RAM2.INIT_11=256'h30a00001_3021ffe4_30e00000_b0009f00_3021003c_b60f0008_eb010038_eae10034; +defparam bootram.RAM2.INIT_12=256'ha463ffff_b00000ff_e9e10000_31200400_b9f4fe34_f9e10000_31000020_30c00001; +defparam bootram.RAM2.INIT_13=256'he9e10000_bc030010_f9e10000_3021ffe4_e860f828_b0000000_3021001c_b60f0008; +defparam bootram.RAM2.INIT_14=256'hbe120010_aa440020_a48400ff_64830008_80000000_b9f4ffa8_3021001c_b60f0008; +defparam bootram.RAM2.INIT_15=256'h16439001_32400018_bcb2fff0_16439001_32400015_80000000_b9f40318_a46300ff; +defparam bootram.RAM2.INIT_16=256'hf9e10000_3021ffe4_e860f824_b0000000_b800ffb0_f860f828_b0000000_bc52ffe4; +defparam bootram.RAM2.INIT_17=256'ha48400ff_64830008_80000000_b9f4ff40_3021001c_b60f0008_e9e10000_bc030010; +defparam bootram.RAM2.INIT_18=256'hbcb2fff0_16459001_32400015_80000000_b9f402b0_a4a300ff_be120010_aa440020; +defparam bootram.RAM2.INIT_19=256'hf860f824_b0000000_f8a0f828_b0000000_e0651a2e_bc52ffe4_16459001_32400018; +defparam bootram.RAM2.INIT_1A=256'hbe520040_16459001_3240003e_30a50001_10a00000_b810001c_3021ffbc_b800ffa4; +defparam bootram.RAM2.INIT_1B=256'h30a50001_bc32ffd8_aa4300aa_bc12ffe0_aa4300ff_e0630004_10612800_10600000; +defparam bootram.RAM2.INIT_1C=256'hb60f0008_30210044_b60f0008_30600001_be32ffc8_aa440099_e0830004_10612800; +defparam bootram.RAM2.INIT_1D=256'hb9f402bc_f9e10000_10b60000_10c50000_12c00000_fac1001c_3021ffe0_30210044; +defparam bootram.RAM2.INIT_1E=256'h3021ffd4_30210020_b60f0008_eac1001c_e9e10000_80000000_99fcb000_30e00024; +defparam bootram.RAM2.INIT_1F=256'h30c01a48_10b60000_30c00006_b9f4fd20_f9e10000_10f60000_32c1001c_fac10028; +defparam bootram.RAM2.INIT_20=256'h6464001f_eac10028_e9e10000_a884ffff_80841800_14830000_30e00006_b9f401f8; +defparam bootram.RAM2.INIT_21=256'h65240405_65040403_64e40003_64a40007_64c40005_e0803a03_3021002c_b60f0008; +defparam bootram.RAM2.INIT_22=256'h10842000_a4a50008_80e73000_90a40041_a4e70004_80c62800_a4c60002_64640407; +defparam bootram.RAM2.INIT_23=256'h80634800_81294000_a5290040_81082000_a5080020_80842800_a4840010_80a53800; +defparam bootram.RAM2.INIT_24=256'h65050405_64e50403_64c50003_64650007_64850005_a4a500ff_a46300ff_b60f0008; +defparam bootram.RAM2.INIT_25=256'h10a52800_a4630008_80c62000_90650041_a4c60004_80841800_a4840002_65250407; +defparam bootram.RAM2.INIT_26=256'h81294000_81083800_a5080040_80e72800_a4e70020_80a51800_a4a50010_80633000; +defparam bootram.RAM2.INIT_27=256'ha6c5ffff_b00000ff_fac1001c_3021ffe0_80000000_b60f0008_f9203a00_a52900ff; +defparam bootram.RAM2.INIT_28=256'hb9f4ff6c_30a0ffaa_b9f4ff74_30a0ffff_b9f4ff7c_30a0ffff_b9f4ff84_f9e10000; +defparam bootram.RAM2.INIT_29=256'hb9f4ff4c_30a00061_b9f4ff54_30a00032_b9f4ff5c_a2d60000_b0000b00_30a0ff99; +defparam bootram.RAM2.INIT_2A=256'hb9f4ff2c_30a0ff81_b9f4ff34_30a00032_b9f4ff3c_10b60000_b9f4ff44_64b60008; +defparam bootram.RAM2.INIT_2B=256'hb9f4ff0c_30a0ffa1_b9f4ff14_30a00030_b9f4ff1c_64b60010_b9f4ff24_30a0000b; +defparam bootram.RAM2.INIT_2C=256'hb9f4feec_10a00000_b9f4fef4_30a00020_b9f4fefc_30a0000e_b9f4ff04_10a00000; +defparam bootram.RAM2.INIT_2D=256'h30a01a50_30210020_b60f0008_eac1001c_e9e10000_10a00000_b9f4fee4_30a00020; +defparam bootram.RAM2.INIT_2E=256'h80000000_b6110000_30a0ffff_b9f4eaa0_80000000_b9f4f3d8_f9e10000_3021ffe4; +defparam bootram.RAM2.INIT_2F=256'h16479003_22400003_80000000_b60f0008_80000000_b60f0008_80000000_b6910000; +defparam bootram.RAM2.INIT_30=256'hbc320040_16432000_e8660000_e8850000_bc230050_a4630003_80653000_beb2005c; +defparam bootram.RAM2.INIT_31=256'haa47ffff_30e7ffff_30c60004_be52ffe0_16479003_22400003_30a50004_30e7fffc; +defparam bootram.RAM2.INIT_32=256'h30e7ffff_30c60001_30a50001_be320020_16434000_e0660000_e1050000_bc120028; +defparam bootram.RAM2.INIT_33=256'h16479003_2240000f_14634000_b60f0008_10600000_b60f0008_bc32ffe0_aa47ffff; +defparam bootram.RAM2.INIT_34=256'h11040000_bc070024_11050000_be030034_a4630003_80662800_10850000_beb20018; +defparam bootram.RAM2.INIT_35=256'hb60f0008_30c60001_be32fff0_16474000_31080001_f0680000_e0660000_10e72000; +defparam bootram.RAM2.INIT_36=256'hf8880008_e8860008_f8680004_e8660004_f8880000_30e7fff0_e8860000_10650000; +defparam bootram.RAM2.INIT_37=256'h22400003_31080010_be52ffd0_16479003_2240000f_f868000c_30c60010_e866000c; +defparam bootram.RAM2.INIT_38=256'h16479003_22400003_d8682000_30e7fffc_c8662000_10800000_bcb2002c_16479003; +defparam bootram.RAM2.INIT_39=256'h3021ffe0_e86017b8_10880000_b810ff68_11044000_10c43000_30840004_be52ffec; +defparam bootram.RAM2.INIT_3A=256'he8730000_3273fffc_99fc1800_bc120018_aa43ffff_326017b8_f9e10000_fa61001c; +defparam bootram.RAM2.INIT_3B=256'hd9e00800_3021fff8_30210020_b60f0008_ea61001c_e9e10000_bc32fff0_aa43ffff; +defparam bootram.RAM2.INIT_3C=256'h3021fff8_30210008_b60f0008_c9e00800_80000000_b9f4ffb0_80000000_b9f4e958; +defparam bootram.RAM2.INIT_3D=256'h00000000_ffffffff_30210008_b60f0008_c9e00800_80000000_b9f4e8d0_d9e00800; +defparam bootram.RAM2.INIT_3E=256'h65207265_696d6167_61696e20_523a206d_4552524f_4f4b0000_00000000_ffffffff; +defparam bootram.RAM2.INIT_3F=256'h64652e00_64206d6f_206c6f61_49484558_20696e20_4261636b_65642120_7475726e; +defparam bootram.RAM3.INIT_00=256'h74696e67_53746172_720a0000_6f616465_6f6f746c_322b2062_55535250_4e4f4b00; +defparam bootram.RAM3.INIT_01=256'h523a2072_4552524f_2e000000_6d6f6465_61666520_696e2073_50322b20_20555352; +defparam bootram.RAM3.INIT_02=256'h73207368_20546869_72616d21_70726f67_61696e20_6f6d206d_6e206672_65747572; +defparam bootram.RAM3.INIT_03=256'h6f207361_523a206e_4552524f_6e210000_61707065_65722068_206e6576_6f756c64; +defparam bootram.RAM3.INIT_04=256'h20492061_626c652e_61696c61_65206176_696d6167_61726520_69726d77_66652066; +defparam bootram.RAM3.INIT_05=256'h20494845_6c6f6164_20746f20_66726565_65656c20_6b2e2046_62726963_6d206120; +defparam bootram.RAM3.INIT_06=256'h69642070_2076616c_20666f72_6b696e67_43686563_2e000000_2052414d_5820746f; +defparam bootram.RAM3.INIT_07=256'h64207072_56616c69_2e2e2e00_6d616765_47412069_6e204650_6374696f_726f6475; +defparam bootram.RAM3.INIT_08=256'h7474656d_642e2041_666f756e_61676520_4120696d_20465047_74696f6e_6f647563; +defparam bootram.RAM3.INIT_09=256'h64756374_2070726f_616c6964_4e6f2076_742e0000_20626f6f_6720746f_7074696e; +defparam bootram.RAM3.INIT_0A=256'h74696e67_74656d70_2e0a4174_6f756e64_67652066_20696d61_46504741_696f6e20; +defparam bootram.RAM3.INIT_0B=256'h2e2e2e00_77617265_6669726d_696f6e20_64756374_2070726f_6c6f6164_20746f20; +defparam bootram.RAM3.INIT_0C=256'h756e642e_6520666f_6d776172_20666972_74696f6e_6f647563_64207072_56616c69; +defparam bootram.RAM3.INIT_0D=256'h6f6d206d_6e206672_65747572_523a2052_4552524f_2e2e2e00_64696e67_204c6f61; +defparam bootram.RAM3.INIT_0E=256'h65722068_206e6576_6f756c64_73207368_20546869_72616d21_70726f67_61696e20; +defparam bootram.RAM3.INIT_0F=256'h6669726d_696f6e20_64756374_2070726f_616c6964_4e6f2076_6e210000_61707065; +defparam bootram.RAM3.INIT_10=256'h77617265_6669726d_61666520_6e672073_54727969_6e642e20_20666f75_77617265; +defparam bootram.RAM3.INIT_11=256'h09c407d0_13880d05_00002710_01b200d9_05160364_14580a2c_05050400_2e2e2e00; +defparam bootram.RAM3.INIT_12=256'h00202020_00000000_6f72740a_0a0a6162_b8080000_b0000000_10101200_06820594; +defparam bootram.RAM3.INIT_13=256'h20881010_20202020_20202020_20202020_20202020_28282820_20202828_20202020; +defparam bootram.RAM3.INIT_14=256'h10104141_10101010_04040410_04040404_10040404_10101010_10101010_10101010; +defparam bootram.RAM3.INIT_15=256'h10104242_10101010_01010101_01010101_01010101_01010101_01010101_41414141; +defparam bootram.RAM3.INIT_16=256'h20000000_10101010_02020202_02020202_02020202_02020202_02020202_42424242; +defparam bootram.RAM3.INIT_17=256'h00000000_00000000_00000000_00000000_00000000_00000000_00000000_00000000; +defparam bootram.RAM3.INIT_18=256'h00000000_00000000_00000000_00000000_00000000_00000000_00000000_00000000; +defparam bootram.RAM3.INIT_19=256'h00000000_00000000_00000000_00000000_00000000_00000000_00000000_00000000; +defparam bootram.RAM3.INIT_1A=256'h00000000_00000000_00000000_00000000_00000000_00000000_00000000_00000000; +defparam bootram.RAM3.INIT_1B=256'h00000000_00000000_00000000_00000000_00000000_00000000_00000000_00000000; +defparam bootram.RAM3.INIT_1C=256'h00000000_00000000_00000000_00000000_00000000_00000000_00000000_00000000; +defparam bootram.RAM3.INIT_1D=256'h00000000_00000000_00000000_00000000_00000000_00000000_00000000_00000000; +defparam bootram.RAM3.INIT_1E=256'h00000000_00000000_00000000_00000000_00000000_00000000_00000000_00000000; +defparam bootram.RAM3.INIT_1F=256'h20202020_20202020_20202020_20202020_28282020_20282828_20202020_20202020; +defparam bootram.RAM3.INIT_20=256'h10101010_04041010_04040404_04040404_10101010_10101010_10101010_88101010; +defparam bootram.RAM3.INIT_21=256'h10101010_01010110_01010101_01010101_01010101_01010101_41414101_10414141; +defparam bootram.RAM3.INIT_22=256'h10101020_02020210_02020202_02020202_02020202_02020202_42424202_10424242; +defparam bootram.RAM3.INIT_23=256'h00000000_00000000_00000000_00000000_00000000_00000000_00000000_00000000; +defparam bootram.RAM3.INIT_24=256'h00000000_00000000_00000000_00000000_00000000_00000000_00000000_00000000; +defparam bootram.RAM3.INIT_25=256'h00000000_00000000_00000000_00000000_00000000_00000000_00000000_00000000; +defparam bootram.RAM3.INIT_26=256'h00000000_00000000_00000000_00000000_00000000_00000000_00000000_00000000; +defparam bootram.RAM3.INIT_27=256'h00000000_00000000_00001be0_ffffffff_01010100_000017c4_00000000_00000000; +defparam bootram.RAM3.INIT_28=256'h00000000_00000000_00000000_00000000_00000000_00000000_00000000_00000000; -- cgit v1.2.3 From d8563de88b6630014bcd38f8229f3be1f2c795a5 Mon Sep 17 00:00:00 2001 From: Nick Foster Date: Thu, 7 Oct 2010 15:48:10 -0700 Subject: U2P: remember your semicolons. --- usrp2/control_lib/s3a_icap_wb.v | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/usrp2/control_lib/s3a_icap_wb.v b/usrp2/control_lib/s3a_icap_wb.v index 73ddac385..83d9f775e 100644 --- a/usrp2/control_lib/s3a_icap_wb.v +++ b/usrp2/control_lib/s3a_icap_wb.v @@ -3,7 +3,7 @@ module s3a_icap_wb (input clk, input reset, input cyc_i, input stb_i, input we_i, output ack_o, - input [31:0] dat_i, output [31:0] dat_o)//, output [31:0] debug_out); + input [31:0] dat_i, output [31:0] dat_o);//, output [31:0] debug_out); assign dat_o[31:8] = 24'd0; -- cgit v1.2.3 From 0edd06b736fb55cc740c5cf1cbe1ba718b8f3ef0 Mon Sep 17 00:00:00 2001 From: Nick Foster Date: Fri, 8 Oct 2010 12:50:48 -0700 Subject: U2P: Working ICAP bootloader. Should be ready for release. --- usrp2/top/u2plus/bootloader.rmi | 460 +++++++++++++++++++++------------------- 1 file changed, 236 insertions(+), 224 deletions(-) diff --git a/usrp2/top/u2plus/bootloader.rmi b/usrp2/top/u2plus/bootloader.rmi index 9e3f99331..7c15699db 100644 --- a/usrp2/top/u2plus/bootloader.rmi +++ b/usrp2/top/u2plus/bootloader.rmi @@ -1,233 +1,245 @@ -defparam bootram.RAM0.INIT_00=256'h00000000_00000000_00000000_b80801c0_00000000_b80815d8_00000000_b8080050; -defparam bootram.RAM0.INIT_01=256'h00000000_00000000_00000000_00000000_00000000_00000000_00000000_b80815e0; -defparam bootram.RAM0.INIT_02=256'h3020ffe0_b0000000_30401ce0_31a01d08_00000000_00000000_00000000_00000000; -defparam bootram.RAM0.INIT_03=256'h3021ffe4_e060f800_b0000000_b8000000_30a30000_b9f4069c_80000000_b9f400cc; -defparam bootram.RAM0.INIT_04=256'he8830000_e8601ce8_80000000_99fc2000_f8601ce8_b8000044_bc030014_f9e10000; -defparam bootram.RAM0.INIT_05=256'h80000000_99fc1800_30a01cfc_bc030010_30600000_b0000000_30630004_be24ffec; +defparam bootram.RAM0.INIT_00=256'h00000000_00000000_00000000_b80801c0_00000000_b808175c_00000000_b8080050; +defparam bootram.RAM0.INIT_01=256'h00000000_00000000_00000000_00000000_00000000_00000000_00000000_b8081764; +defparam bootram.RAM0.INIT_02=256'h3020ffe0_b0000000_30401e70_31a01e98_00000000_00000000_00000000_00000000; +defparam bootram.RAM0.INIT_03=256'h3021ffe4_e060f800_b0000000_b8000000_30a30000_b9f40668_80000000_b9f400cc; +defparam bootram.RAM0.INIT_04=256'he8830000_e8601e78_80000000_99fc2000_f8601e78_b8000044_bc030014_f9e10000; +defparam bootram.RAM0.INIT_05=256'h80000000_99fc1800_30a01e8c_bc030010_30600000_b0000000_30630004_be24ffec; defparam bootram.RAM0.INIT_06=256'h30600000_b0000000_3021001c_b60f0008_e9e10000_f060f800_b0000000_30600001; -defparam bootram.RAM0.INIT_07=256'h80000000_99fc1800_bc03000c_30c0f804_b0000000_30a01cfc_f9e10000_3021ffe4; -defparam bootram.RAM0.INIT_08=256'h80000000_99fc2000_bc04000c_30a01d00_bc030014_30800000_b0000000_e8601d00; -defparam bootram.RAM0.INIT_09=256'h06463800_20e01d08_20c01d08_f9e10000_2021ffec_3021001c_b60f0008_e9e10000; +defparam bootram.RAM0.INIT_07=256'h80000000_99fc1800_bc03000c_30c0f804_b0000000_30a01e8c_f9e10000_3021ffe4; +defparam bootram.RAM0.INIT_08=256'h80000000_99fc2000_bc04000c_30a01e90_bc030014_30800000_b0000000_e8601e90; +defparam bootram.RAM0.INIT_09=256'h06463800_20e01e98_20c01e98_f9e10000_2021ffec_3021001c_b60f0008_e9e10000; defparam bootram.RAM0.INIT_0A=256'hb0000000_20c0f800_b0000000_bc92fff4_06463800_20c60004_f8060000_bc720014; -defparam bootram.RAM0.INIT_0B=256'hb9f41474_bc92fff4_06463800_20c60004_f8060000_bc720014_06463800_20e0f82c; -defparam bootram.RAM0.INIT_0C=256'h32630000_20a00000_b9f401a4_20e00000_20c00000_80000000_b9f415f4_80000000; -defparam bootram.RAM0.INIT_0D=256'h20210014_b60f0008_30730000_c9e10000_80000000_b9f41440_80000000_b9f415fc; +defparam bootram.RAM0.INIT_0B=256'hb9f415f8_bc92fff4_06463800_20c60004_f8060000_bc720014_06463800_20e0f82c; +defparam bootram.RAM0.INIT_0C=256'h32630000_20a00000_b9f401c8_20e00000_20c00000_80000000_b9f41778_80000000; +defparam bootram.RAM0.INIT_0D=256'h20210014_b60f0008_30730000_c9e10000_80000000_b9f415c4_80000000_b9f41780; defparam bootram.RAM0.INIT_0E=256'he9e10000_f9610004_fa410010_95608001_fa21000c_f9610008_f9e10000_3021ffec; defparam bootram.RAM0.INIT_0F=256'hbc050018_30210014_b62e0000_ea410010_ea21000c_e9610008_940bc001_e9610004; defparam bootram.RAM0.INIT_10=256'h3021ff2c_80000000_b60f0008_bc32fff4_16432800_30630001_80000000_10600000; -defparam bootram.RAM0.INIT_11=256'hb9f40660_32c1001c_3261004c_f8610028_f9e10000_fac100d0_fa6100cc_3061002c; -defparam bootram.RAM0.INIT_12=256'h22407fff_e8610024_bc230038_30a01800_10b30000_b9f40c38_10d60000_10b30000; -defparam bootram.RAM0.INIT_13=256'h30a01800_bc120040_aa430001_30a017c8_e061001c_10a30000_be520034_16439003; -defparam bootram.RAM0.INIT_14=256'he8e10020_e8c10028_b800ffa8_80000000_b9f406f4_b800ffb4_80000000_b9f40700; -defparam bootram.RAM0.INIT_15=256'h80000000_b9f406c8_b800ff88_80000000_b9f406d4_30a017c8_80000000_b9f413d8; -defparam bootram.RAM0.INIT_16=256'hb800ff60_80000000_b9f406ac_30a017cc_80000000_b9f410dc_30a08000_b0000000; -defparam bootram.RAM0.INIT_17=256'he9e10000_30e00001_b9f4035c_f9e10000_30a0fff7_30c1001c_f0a1001c_3021ffe0; -defparam bootram.RAM0.INIT_18=256'h30e00001_b9f40294_f9e10000_30c1001c_30a0fff7_3021ffe0_30210020_b60f0008; -defparam bootram.RAM0.INIT_19=256'hf9e10000_3021ffdc_30210020_b60f0008_6463001f_14630000_e9e10000_e061001c; -defparam bootram.RAM0.INIT_1A=256'h306000ff_30a0a120_b0000007_9403c001_ac640002_94808001_fac10020_fa61001c; -defparam bootram.RAM0.INIT_1B=256'h80000000_b9f40d60_80000000_b9f40884_f800200c_80000000_b9f4fe98_f860200c; -defparam bootram.RAM0.INIT_1C=256'hbe23017c_80000000_b9f4ff74_80000000_b9f405f4_30a01804_80000000_b9f4020c; -defparam bootram.RAM0.INIT_1D=256'hb9f41020_30a00000_b0000030_bc160100_bc130134_a6632000_e8603334_12c30000; -defparam bootram.RAM0.INIT_1E=256'h30e08000_b0000000_80000000_b9f405b0_30a01980_12c30000_be030068_80000000; -defparam bootram.RAM0.INIT_1F=256'h80000000_b9f40fac_30a08000_b0000000_30c07c00_b9f40d28_30a00000_b0000030; -defparam bootram.RAM0.INIT_20=256'hea61001c_e9e10000_30600001_10a00000_b9f410e4_80000000_b9f4057c_30a019ac; -defparam bootram.RAM0.INIT_21=256'h30a00000_b000003f_80000000_b9f40550_30a019e8_30210024_b60f0008_eac10020; -defparam bootram.RAM0.INIT_22=256'hb9f4fdc0_80000000_b9f4052c_30a01874_12630000_be230024_80000000_b9f40f9c; -defparam bootram.RAM0.INIT_23=256'hb9f40c94_30a00000_b000003f_30e08000_b0000000_10730000_b810ffb4_80000000; -defparam bootram.RAM0.INIT_24=256'h80000000_b9f404e8_30a01838_80000000_b9f40f18_30a08000_b0000000_30c07c00; -defparam bootram.RAM0.INIT_25=256'hb0000018_80000000_b9f404cc_30a018cc_30600001_b810ff70_10b60000_b9f41050; -defparam bootram.RAM0.INIT_26=256'hb800fed8_80000000_b9f404ac_30a01930_bc230098_80000000_b9f40e80_30a00000; -defparam bootram.RAM0.INIT_27=256'hbc230028_80000000_b9f40ee8_30a00000_b000003f_80000000_b9f4049c_30a01818; -defparam bootram.RAM0.INIT_28=256'h10a00000_b9f4fdc8_b800fe9c_80000000_b9f4fd10_80000000_b9f4047c_30a01874; -defparam bootram.RAM0.INIT_29=256'hb0000000_30c07c00_b9f40bdc_30a00000_b000003f_30e08000_b0000000_b800fe84; -defparam bootram.RAM0.INIT_2A=256'h10b30000_b9f40f98_80000000_b9f40430_30a01838_80000000_b9f40e60_30a08000; -defparam bootram.RAM0.INIT_2B=256'h30a00000_b0000018_30a00001_b9f4fd70_80000000_b9f40418_30a018f8_b800fe50; -defparam bootram.RAM0.INIT_2C=256'h30600080_f8003104_f8603100_30600012_f8003108_b800ff48_80000000_b9f40f70; -defparam bootram.RAM0.INIT_2D=256'hbe23fff8_a4630040_e8603110_a4a500ff_be070088_80000000_b60f0008_f8603108; -defparam bootram.RAM0.INIT_2E=256'hbc23fff8_a4630002_e8603110_f8803110_30800090_f860310c_a0630001_10652800; -defparam bootram.RAM0.INIT_2F=256'hf8603110_30600020_be120038_aa470001_10800000_be230058_a4630080_e8603110; -defparam bootram.RAM0.INIT_30=256'h30c60001_be07001c_f0660000_30e7ffff_e860310c_bc23fff8_a4630002_e8603110; -defparam bootram.RAM0.INIT_31=256'h10640000_b60f0008_30800001_30600068_b810ffd0_30600020_be32ffd8_aa470001; -defparam bootram.RAM0.INIT_32=256'hbe23fff8_a4630040_e8603110_a4a500ff_10640000_b60f0008_f8603110_30600040; -defparam bootram.RAM0.INIT_33=256'ha4630002_e8603110_f8603110_306000d0_30600090_be27000c_f860310c_10652800; -defparam bootram.RAM0.INIT_34=256'he0660000_30800001_be070068_10800000_be23005c_a4630080_e8603110_bc23fff8; -defparam bootram.RAM0.INIT_35=256'hbc23fff8_a4630002_e8603110_f8803110_bc120030_aa470001_f860310c_30800010; -defparam bootram.RAM0.INIT_36=256'hb810ffd4_b800ffc4_30c60001_be070028_30e7ffff_be23001c_a4630080_e8603110; -defparam bootram.RAM0.INIT_37=256'hb60f0008_30800001_10640000_b60f0008_f8603110_30600040_10800000_30800050; -defparam bootram.RAM0.INIT_38=256'h3021ffd0_80000000_b60f0008_80000000_b9f4f964_f9e10000_3021ffe4_10640000; -defparam bootram.RAM0.INIT_39=256'h13260000_12e70000_13050000_12660000_fb21002c_fb010028_fae10024_fa61001c; -defparam bootram.RAM0.INIT_3A=256'hbcb2002c_16572001_bc120030_aa43ffff_12c00000_b810001c_f9e10000_fac10020; -defparam bootram.RAM0.INIT_3B=256'hbe32ffd4_aa43000a_f0730000_10960000_90630060_10b80000_b9f405ec_32730001; -defparam bootram.RAM0.INIT_3C=256'heae10024_eac10020_ea61001c_e9e10000_10640000_f0130000_14999800_32d60001; -defparam bootram.RAM0.INIT_3D=256'hfb010028_fae10024_fa61001c_3021ffd0_30210030_b60f0008_eb21002c_eb010028; -defparam bootram.RAM0.INIT_3E=256'hb8100014_f9e10000_fac10020_13260000_12e70000_13050000_12660000_fb21002c; -defparam bootram.RAM0.INIT_3F=256'h10960000_90630060_10b80000_b9f4051c_32730001_bcb2002c_16572001_12c00000; -defparam bootram.RAM1.INIT_00=256'he9e10000_10640000_f0130000_14999800_32d60001_be32ffdc_aa43000a_f0730000; -defparam bootram.RAM1.INIT_01=256'h3021ffd8_30210030_b60f0008_eb21002c_eb010028_eae10024_eac10020_ea61001c; -defparam bootram.RAM1.INIT_02=256'hb9f404b0_12660000_f9e10000_12e60000_12c50000_fae10024_fac10020_fa61001c; -defparam bootram.RAM1.INIT_03=256'hf0130000_3273ffff_32730001_be32ffec_aa43000a_f0730000_90630060_10b60000; -defparam bootram.RAM1.INIT_04=256'h10c50000_30210028_b60f0008_eae10024_eac10020_ea61001c_e9e10000_10770000; -defparam bootram.RAM1.INIT_05=256'h3021ffe4_3021001c_b60f0008_e9e10000_10a00000_b9f4ff94_f9e10000_3021ffe4; -defparam bootram.RAM1.INIT_06=256'hf9e10000_3021ffe4_3021001c_b60f0008_e9e10000_80000000_b9f40448_f9e10000; -defparam bootram.RAM1.INIT_07=256'hfac10020_fa61001c_3021ffdc_3021001c_b60f0008_e9e10000_10a00000_b9f4ffdc; -defparam bootram.RAM1.INIT_08=256'hb9f40324_10b60000_12c50000_be060024_90c30060_12660000_e0660000_f9e10000; -defparam bootram.RAM1.INIT_09=256'heac10020_ea61001c_e9e10000_10b60000_be26fff0_90c30060_e0730000_32730001; -defparam bootram.RAM1.INIT_0A=256'h12c50000_b9f4ff9c_f9e10000_fac1001c_3021ffe0_30210024_b60f0008_10600000; -defparam bootram.RAM1.INIT_0B=256'h30210020_b60f0008_10600000_eac1001c_e9e10000_30c0000a_b9f402dc_10b60000; -defparam bootram.RAM1.INIT_0C=256'h3021001c_b60f0008_e9e10000_10a00000_b9f4ffc0_f9e10000_3021ffe4_10c50000; -defparam bootram.RAM1.INIT_0D=256'h3021001c_b60f0008_e9e10000_10a00000_b9f4ff48_f9e10000_3021ffe4_10c50000; -defparam bootram.RAM1.INIT_0E=256'h3021ffe0_3021001c_b60f0008_e9e10000_30c0000a_b9f40278_f9e10000_3021ffe4; -defparam bootram.RAM1.INIT_0F=256'he9e10000_10760000_10d60000_b9f40250_f9e10000_10a00000_12c50000_fac1001c; -defparam bootram.RAM1.INIT_10=256'h12c60000_b9f40228_f9e10000_fac1001c_3021ffe0_30210020_b60f0008_eac1001c; -defparam bootram.RAM1.INIT_11=256'hb9f401b8_f9e10000_3021ffe4_30210020_b60f0008_eac1001c_e9e10000_10760000; -defparam bootram.RAM1.INIT_12=256'hb0000000_9404c001_ac870002_94e08001_3021001c_b60f0008_e9e10000_80000000; -defparam bootram.RAM1.INIT_13=256'hf860f81c_b0000000_f860200c_80633000_84632000_84c62800_a866ffff_e880f81c; -defparam bootram.RAM1.INIT_14=256'h94608001_80000000_b60f0008_9404c001_80843800_ac840002_94808001_a4e70002; -defparam bootram.RAM1.INIT_15=256'hf8a0f81c_b0000000_f8a0200c_88a52000_e880f81c_b0000000_9406c001_acc30002; -defparam bootram.RAM1.INIT_16=256'h94e08001_80000000_b60f0008_9404c001_80841800_ac840002_94808001_a4630002; -defparam bootram.RAM1.INIT_17=256'h80633000_84632000_84c62800_a866ffff_e880f820_b0000000_9404c001_ac870002; -defparam bootram.RAM1.INIT_18=256'h9404c001_80843800_ac840002_94808001_a4e70002_f860f820_b0000000_f8602020; -defparam bootram.RAM1.INIT_19=256'hfac10020_f9e10000_fb010028_fae10024_fa61001c_3021ffd4_80000000_b60f0008; -defparam bootram.RAM1.INIT_1A=256'h32600001_be670038_12660000_be060040_90c30060_13050000_12e60000_e0660000; -defparam bootram.RAM1.INIT_1B=256'hc0779800_10b80000_b9f400cc_10730000_be120028_16569800_32c70001_b8100014; -defparam bootram.RAM1.INIT_1C=256'heac10020_ea61001c_e9e10000_10730000_3273ffff_32730001_be26ffe4_90c30060; -defparam bootram.RAM1.INIT_1D=256'hb9f40084_f9e10000_10a00000_3021ffe4_3021002c_b60f0008_eb010028_eae10024; -defparam bootram.RAM1.INIT_1E=256'h10c63000_80000000_b60f0008_f0c51cec_3021001c_b60f0008_e9e10000_30c0000a; -defparam bootram.RAM1.INIT_1F=256'hf9e10000_fa61001c_3021ffe0_80000000_b60f0008_f8653700_64a50405_e4661a28; -defparam bootram.RAM1.INIT_20=256'h32730001_10b30000_e0d31a24_90c60060_b9f4ffc4_10b30000_e0d31cec_12600000; -defparam bootram.RAM1.INIT_21=256'h30210020_b60f0008_ea61001c_e9e10000_bc32ffd8_aa530003_90c60060_b9f4ffbc; -defparam bootram.RAM1.INIT_22=256'h12650000_be120030_aa46000a_12c60000_f9e10000_fac10020_fa61001c_3021ffdc; -defparam bootram.RAM1.INIT_23=256'heac10020_ea61001c_e9e10000_fac5000c_bc03fffc_e8650004_30a33700_64730405; -defparam bootram.RAM1.INIT_24=256'hb810ffc8_30c0000d_b9f4ffac_bc32ffd0_aa430001_e0651cec_30210024_b60f0008; -defparam bootram.RAM1.INIT_25=256'hbe120030_aa46000a_12c60000_f9e10000_fac10020_fa61001c_3021ffdc_64730405; -defparam bootram.RAM1.INIT_26=256'hea61001c_e9e10000_fac3000c_bc040008_e8830004_30633700_64730405_12650000; -defparam bootram.RAM1.INIT_27=256'hb9f4ff44_30c0000d_be32ffd0_aa430001_e0651cec_30210024_b60f0008_eac10020; -defparam bootram.RAM1.INIT_28=256'he8650010_bc03fffc_e8650008_30a53700_64a50405_64730405_b810ffc4_80000000; -defparam bootram.RAM1.INIT_29=256'he8850008_e8650010_bc030014_e8650008_30a53700_64a50405_80000000_b60f0008; -defparam bootram.RAM1.INIT_2A=256'hf9e10000_fac10020_3021ffdc_64a50405_80000000_b60f0008_90630060_be24fff8; -defparam bootram.RAM1.INIT_2B=256'hbe120034_aa53012d_b8000010_32600001_be230040_e8760008_32c53700_fa61001c; -defparam bootram.RAM1.INIT_2C=256'h3240012b_3273ffff_32730001_be03ffe8_e8760008_30a00001_b9f40040_3060ffff; -defparam bootram.RAM1.INIT_2D=256'hb60f0008_eac10020_ea61001c_e9e10000_e8760010_3060ffff_be52000c_16539001; -defparam bootram.RAM1.INIT_2E=256'hbe650048_bc430054_e8601cf0_bc260054_a4c30000_b0008000_e8603324_30210024; -defparam bootram.RAM1.INIT_2F=256'h80000000_80000000_80000000_80000000_10800000_bc660030_e8c01cf0_10660000; -defparam bootram.RAM1.INIT_30=256'h16432800_30630001_bc32ffdc_16443000_30840001_80000000_80000000_80000000; -defparam bootram.RAM1.INIT_31=256'hf8801cf0_e4831a34_10631800_a4630007_e8603324_80000000_b60f0008_bc32ffc8; -defparam bootram.RAM1.INIT_32=256'h3065ffc9_a46300ff_be520024_16459001_3240005a_3065ffa9_90a50060_b800ff9c; -defparam bootram.RAM1.INIT_33=256'h80000000_b60f0008_a46400ff_3085ffd0_be52000c_16459001_32400039_a46300ff; -defparam bootram.RAM1.INIT_34=256'hfae10024_fac10020_fa61001c_f9e10000_fb610034_13250000_fb21002c_3021ffc8; -defparam bootram.RAM1.INIT_35=256'h10650000_30a0ffff_be120034_aa43003a_13660000_e0790000_fb410030_fb010028; -defparam bootram.RAM1.INIT_36=256'heb610034_eb410030_eb21002c_eb010028_eae10024_eac10020_ea61001c_e9e10000; -defparam bootram.RAM1.INIT_37=256'hbe04001c_90840060_30650001_c085c800_30a00001_e8c01cf4_30210038_b60f0008; -defparam bootram.RAM1.INIT_38=256'hb9f4ff28_e0b90001_30a0fffe_b810ffac_bc23ffe4_a4630044_c0662000_a4a300ff; -defparam bootram.RAM1.INIT_39=256'h10791800_fa7b0004_10739800_12761800_66c30404_b9f4ff1c_e0b90002_80000000; -defparam bootram.RAM1.INIT_3A=256'he0b90003_13530000_b9f4fef0_e0b90005_30a0fffd_be38ff74_93040060_e083000b; -defparam bootram.RAM1.INIT_3B=256'hb9f4fec8_64630408_e0b90006_66c3040c_b9f4fed8_e0b90004_66e30404_b9f4fee4; -defparam bootram.RAM1.INIT_3C=256'he0b90008_80000000_b9f4feb0_e0b90007_fafb0008_12f7b000_12d61800_12d61800; -defparam bootram.RAM1.INIT_3D=256'hea7b000c_13580000_10f30000_be130060_f07b0000_1063b000_66c30404_b9f4fea4; -defparam bootram.RAM1.INIT_3E=256'hb9f4fe68_e0b60001_12d9b000_b9f4fe74_c0b6c800_a6d600ff_32d60009_12d8c000; -defparam bootram.RAM1.INIT_3F=256'ha70400ff_c073c000_30980001_e8fb0004_ea7b000c_d0789800_1063b800_66e30404; -defparam bootram.RAM2.INIT_00=256'h64760008_12e73800_e09b0000_eadb0008_a74300ff_be52ffb8_1647c003_107a1800; -defparam bootram.RAM2.INIT_01=256'he0b7000a_12d61800_b9f4fe10_107a1800_12c7b000_10632000_e0b70009_12f9b800; -defparam bootram.RAM2.INIT_02=256'hbe32fe60_1643b000_a46300ff_a6d600ff_1063c000_16d60000_67030404_b9f4fe04; -defparam bootram.RAM2.INIT_03=256'h80000000_b60f0008_bc23fff8_a4630100_e8603b10_10a00000_b810fe58_30a0fffb; -defparam bootram.RAM2.INIT_04=256'hbc23fff8_a4630100_e8603b10_a4a500ff_80884800_a1292000_a508007f_a5290600; -defparam bootram.RAM2.INIT_05=256'h10650000_be050018_f8803b10_a0840100_f8603b18_a46600ff_f8803b10_f8e03b00; -defparam bootram.RAM2.INIT_06=256'h10e60000_10c00000_80000000_b60f0008_e8603b00_bc23fff8_a4630100_e8603b10; -defparam bootram.RAM2.INIT_07=256'hb9f4ff84_f8603b14_30600001_31200400_31000008_10a00000_f9e10000_3021ffe4; -defparam bootram.RAM2.INIT_08=256'hfa61002c_12c50000_fac10030_3021ffc4_3021001c_b60f0008_e9e10000_80000000; -defparam bootram.RAM2.INIT_09=256'hf8003b18_30600400_12670000_b9f4ff3c_fae10034_13060000_f9e10000_fb010038; -defparam bootram.RAM2.INIT_0A=256'h30800428_f8603b18_30600001_fac03b00_f8603b04_3060000b_66d60408_f8603b10; -defparam bootram.RAM2.INIT_0B=256'h12e00000_12d30000_be18009c_80000000_b9f4ff00_f8603b10_30600528_f8803b10; -defparam bootram.RAM2.INIT_0C=256'he8803b0c_80000000_b9f4fed8_f8803b10_30800500_f8603b10_30600400_3261001c; -defparam bootram.RAM2.INIT_0D=256'hf8610028_e8603b00_f8810024_e8803b04_f8610020_e8603b08_f881001c_14b7c000; -defparam bootram.RAM2.INIT_0E=256'h30840001_d0762000_c0732000_30a00010_10800000_beb20034_16459003_22400010; -defparam bootram.RAM2.INIT_0F=256'hbc25ffd8_b800ff8c_12d62800_beb20020_1658b803_12f72800_bc32fff0_16442800; -defparam bootram.RAM2.INIT_10=256'heac10030_ea61002c_e9e10000_f8003b18_12d62800_be52ff7c_1658b803_12f72800; -defparam bootram.RAM2.INIT_11=256'h30a00001_3021ffe4_30e00000_b0009f00_3021003c_b60f0008_eb010038_eae10034; -defparam bootram.RAM2.INIT_12=256'ha463ffff_b00000ff_e9e10000_31200400_b9f4fe34_f9e10000_31000020_30c00001; -defparam bootram.RAM2.INIT_13=256'he9e10000_bc030010_f9e10000_3021ffe4_e860f828_b0000000_3021001c_b60f0008; -defparam bootram.RAM2.INIT_14=256'hbe120010_aa440020_a48400ff_64830008_80000000_b9f4ffa8_3021001c_b60f0008; -defparam bootram.RAM2.INIT_15=256'h16439001_32400018_bcb2fff0_16439001_32400015_80000000_b9f40318_a46300ff; -defparam bootram.RAM2.INIT_16=256'hf9e10000_3021ffe4_e860f824_b0000000_b800ffb0_f860f828_b0000000_bc52ffe4; -defparam bootram.RAM2.INIT_17=256'ha48400ff_64830008_80000000_b9f4ff40_3021001c_b60f0008_e9e10000_bc030010; -defparam bootram.RAM2.INIT_18=256'hbcb2fff0_16459001_32400015_80000000_b9f402b0_a4a300ff_be120010_aa440020; -defparam bootram.RAM2.INIT_19=256'hf860f824_b0000000_f8a0f828_b0000000_e0651a2e_bc52ffe4_16459001_32400018; -defparam bootram.RAM2.INIT_1A=256'hbe520040_16459001_3240003e_30a50001_10a00000_b810001c_3021ffbc_b800ffa4; -defparam bootram.RAM2.INIT_1B=256'h30a50001_bc32ffd8_aa4300aa_bc12ffe0_aa4300ff_e0630004_10612800_10600000; -defparam bootram.RAM2.INIT_1C=256'hb60f0008_30210044_b60f0008_30600001_be32ffc8_aa440099_e0830004_10612800; -defparam bootram.RAM2.INIT_1D=256'hb9f402bc_f9e10000_10b60000_10c50000_12c00000_fac1001c_3021ffe0_30210044; -defparam bootram.RAM2.INIT_1E=256'h3021ffd4_30210020_b60f0008_eac1001c_e9e10000_80000000_99fcb000_30e00024; -defparam bootram.RAM2.INIT_1F=256'h30c01a48_10b60000_30c00006_b9f4fd20_f9e10000_10f60000_32c1001c_fac10028; -defparam bootram.RAM2.INIT_20=256'h6464001f_eac10028_e9e10000_a884ffff_80841800_14830000_30e00006_b9f401f8; -defparam bootram.RAM2.INIT_21=256'h65240405_65040403_64e40003_64a40007_64c40005_e0803a03_3021002c_b60f0008; -defparam bootram.RAM2.INIT_22=256'h10842000_a4a50008_80e73000_90a40041_a4e70004_80c62800_a4c60002_64640407; -defparam bootram.RAM2.INIT_23=256'h80634800_81294000_a5290040_81082000_a5080020_80842800_a4840010_80a53800; -defparam bootram.RAM2.INIT_24=256'h65050405_64e50403_64c50003_64650007_64850005_a4a500ff_a46300ff_b60f0008; -defparam bootram.RAM2.INIT_25=256'h10a52800_a4630008_80c62000_90650041_a4c60004_80841800_a4840002_65250407; -defparam bootram.RAM2.INIT_26=256'h81294000_81083800_a5080040_80e72800_a4e70020_80a51800_a4a50010_80633000; -defparam bootram.RAM2.INIT_27=256'ha6c5ffff_b00000ff_fac1001c_3021ffe0_80000000_b60f0008_f9203a00_a52900ff; -defparam bootram.RAM2.INIT_28=256'hb9f4ff6c_30a0ffaa_b9f4ff74_30a0ffff_b9f4ff7c_30a0ffff_b9f4ff84_f9e10000; -defparam bootram.RAM2.INIT_29=256'hb9f4ff4c_30a00061_b9f4ff54_30a00032_b9f4ff5c_a2d60000_b0000b00_30a0ff99; -defparam bootram.RAM2.INIT_2A=256'hb9f4ff2c_30a0ff81_b9f4ff34_30a00032_b9f4ff3c_10b60000_b9f4ff44_64b60008; -defparam bootram.RAM2.INIT_2B=256'hb9f4ff0c_30a0ffa1_b9f4ff14_30a00030_b9f4ff1c_64b60010_b9f4ff24_30a0000b; -defparam bootram.RAM2.INIT_2C=256'hb9f4feec_10a00000_b9f4fef4_30a00020_b9f4fefc_30a0000e_b9f4ff04_10a00000; -defparam bootram.RAM2.INIT_2D=256'h30a01a50_30210020_b60f0008_eac1001c_e9e10000_10a00000_b9f4fee4_30a00020; -defparam bootram.RAM2.INIT_2E=256'h80000000_b6110000_30a0ffff_b9f4eaa0_80000000_b9f4f3d8_f9e10000_3021ffe4; -defparam bootram.RAM2.INIT_2F=256'h16479003_22400003_80000000_b60f0008_80000000_b60f0008_80000000_b6910000; -defparam bootram.RAM2.INIT_30=256'hbc320040_16432000_e8660000_e8850000_bc230050_a4630003_80653000_beb2005c; -defparam bootram.RAM2.INIT_31=256'haa47ffff_30e7ffff_30c60004_be52ffe0_16479003_22400003_30a50004_30e7fffc; -defparam bootram.RAM2.INIT_32=256'h30e7ffff_30c60001_30a50001_be320020_16434000_e0660000_e1050000_bc120028; -defparam bootram.RAM2.INIT_33=256'h16479003_2240000f_14634000_b60f0008_10600000_b60f0008_bc32ffe0_aa47ffff; -defparam bootram.RAM2.INIT_34=256'h11040000_bc070024_11050000_be030034_a4630003_80662800_10850000_beb20018; -defparam bootram.RAM2.INIT_35=256'hb60f0008_30c60001_be32fff0_16474000_31080001_f0680000_e0660000_10e72000; -defparam bootram.RAM2.INIT_36=256'hf8880008_e8860008_f8680004_e8660004_f8880000_30e7fff0_e8860000_10650000; -defparam bootram.RAM2.INIT_37=256'h22400003_31080010_be52ffd0_16479003_2240000f_f868000c_30c60010_e866000c; -defparam bootram.RAM2.INIT_38=256'h16479003_22400003_d8682000_30e7fffc_c8662000_10800000_bcb2002c_16479003; -defparam bootram.RAM2.INIT_39=256'h3021ffe0_e86017b8_10880000_b810ff68_11044000_10c43000_30840004_be52ffec; -defparam bootram.RAM2.INIT_3A=256'he8730000_3273fffc_99fc1800_bc120018_aa43ffff_326017b8_f9e10000_fa61001c; -defparam bootram.RAM2.INIT_3B=256'hd9e00800_3021fff8_30210020_b60f0008_ea61001c_e9e10000_bc32fff0_aa43ffff; -defparam bootram.RAM2.INIT_3C=256'h3021fff8_30210008_b60f0008_c9e00800_80000000_b9f4ffb0_80000000_b9f4e958; -defparam bootram.RAM2.INIT_3D=256'h00000000_ffffffff_30210008_b60f0008_c9e00800_80000000_b9f4e8d0_d9e00800; -defparam bootram.RAM2.INIT_3E=256'h65207265_696d6167_61696e20_523a206d_4552524f_4f4b0000_00000000_ffffffff; -defparam bootram.RAM2.INIT_3F=256'h64652e00_64206d6f_206c6f61_49484558_20696e20_4261636b_65642120_7475726e; -defparam bootram.RAM3.INIT_00=256'h74696e67_53746172_720a0000_6f616465_6f6f746c_322b2062_55535250_4e4f4b00; -defparam bootram.RAM3.INIT_01=256'h523a2072_4552524f_2e000000_6d6f6465_61666520_696e2073_50322b20_20555352; -defparam bootram.RAM3.INIT_02=256'h73207368_20546869_72616d21_70726f67_61696e20_6f6d206d_6e206672_65747572; -defparam bootram.RAM3.INIT_03=256'h6f207361_523a206e_4552524f_6e210000_61707065_65722068_206e6576_6f756c64; -defparam bootram.RAM3.INIT_04=256'h20492061_626c652e_61696c61_65206176_696d6167_61726520_69726d77_66652066; -defparam bootram.RAM3.INIT_05=256'h20494845_6c6f6164_20746f20_66726565_65656c20_6b2e2046_62726963_6d206120; -defparam bootram.RAM3.INIT_06=256'h69642070_2076616c_20666f72_6b696e67_43686563_2e000000_2052414d_5820746f; -defparam bootram.RAM3.INIT_07=256'h64207072_56616c69_2e2e2e00_6d616765_47412069_6e204650_6374696f_726f6475; -defparam bootram.RAM3.INIT_08=256'h7474656d_642e2041_666f756e_61676520_4120696d_20465047_74696f6e_6f647563; -defparam bootram.RAM3.INIT_09=256'h64756374_2070726f_616c6964_4e6f2076_742e0000_20626f6f_6720746f_7074696e; -defparam bootram.RAM3.INIT_0A=256'h74696e67_74656d70_2e0a4174_6f756e64_67652066_20696d61_46504741_696f6e20; -defparam bootram.RAM3.INIT_0B=256'h2e2e2e00_77617265_6669726d_696f6e20_64756374_2070726f_6c6f6164_20746f20; -defparam bootram.RAM3.INIT_0C=256'h756e642e_6520666f_6d776172_20666972_74696f6e_6f647563_64207072_56616c69; -defparam bootram.RAM3.INIT_0D=256'h6f6d206d_6e206672_65747572_523a2052_4552524f_2e2e2e00_64696e67_204c6f61; -defparam bootram.RAM3.INIT_0E=256'h65722068_206e6576_6f756c64_73207368_20546869_72616d21_70726f67_61696e20; -defparam bootram.RAM3.INIT_0F=256'h6669726d_696f6e20_64756374_2070726f_616c6964_4e6f2076_6e210000_61707065; -defparam bootram.RAM3.INIT_10=256'h77617265_6669726d_61666520_6e672073_54727969_6e642e20_20666f75_77617265; -defparam bootram.RAM3.INIT_11=256'h09c407d0_13880d05_00002710_01b200d9_05160364_14580a2c_05050400_2e2e2e00; -defparam bootram.RAM3.INIT_12=256'h00202020_00000000_6f72740a_0a0a6162_b8080000_b0000000_10101200_06820594; -defparam bootram.RAM3.INIT_13=256'h20881010_20202020_20202020_20202020_20202020_28282820_20202828_20202020; -defparam bootram.RAM3.INIT_14=256'h10104141_10101010_04040410_04040404_10040404_10101010_10101010_10101010; -defparam bootram.RAM3.INIT_15=256'h10104242_10101010_01010101_01010101_01010101_01010101_01010101_41414141; -defparam bootram.RAM3.INIT_16=256'h20000000_10101010_02020202_02020202_02020202_02020202_02020202_42424242; -defparam bootram.RAM3.INIT_17=256'h00000000_00000000_00000000_00000000_00000000_00000000_00000000_00000000; -defparam bootram.RAM3.INIT_18=256'h00000000_00000000_00000000_00000000_00000000_00000000_00000000_00000000; -defparam bootram.RAM3.INIT_19=256'h00000000_00000000_00000000_00000000_00000000_00000000_00000000_00000000; -defparam bootram.RAM3.INIT_1A=256'h00000000_00000000_00000000_00000000_00000000_00000000_00000000_00000000; -defparam bootram.RAM3.INIT_1B=256'h00000000_00000000_00000000_00000000_00000000_00000000_00000000_00000000; -defparam bootram.RAM3.INIT_1C=256'h00000000_00000000_00000000_00000000_00000000_00000000_00000000_00000000; -defparam bootram.RAM3.INIT_1D=256'h00000000_00000000_00000000_00000000_00000000_00000000_00000000_00000000; -defparam bootram.RAM3.INIT_1E=256'h00000000_00000000_00000000_00000000_00000000_00000000_00000000_00000000; -defparam bootram.RAM3.INIT_1F=256'h20202020_20202020_20202020_20202020_28282020_20282828_20202020_20202020; -defparam bootram.RAM3.INIT_20=256'h10101010_04041010_04040404_04040404_10101010_10101010_10101010_88101010; -defparam bootram.RAM3.INIT_21=256'h10101010_01010110_01010101_01010101_01010101_01010101_41414101_10414141; -defparam bootram.RAM3.INIT_22=256'h10101020_02020210_02020202_02020202_02020202_02020202_42424202_10424242; -defparam bootram.RAM3.INIT_23=256'h00000000_00000000_00000000_00000000_00000000_00000000_00000000_00000000; +defparam bootram.RAM0.INIT_11=256'hb9f4062c_32c1001c_3261004c_f8610028_f9e10000_fac100d0_fa6100cc_3061002c; +defparam bootram.RAM0.INIT_12=256'h22407fff_e8610024_bc230038_30a01984_10b30000_b9f40da4_10d60000_10b30000; +defparam bootram.RAM0.INIT_13=256'h30a01984_bc120040_aa430001_30a0194c_e061001c_10a30000_be520034_16439003; +defparam bootram.RAM0.INIT_14=256'he8e10020_e8c10028_b800ffa8_80000000_b9f406c0_b800ffb4_80000000_b9f406cc; +defparam bootram.RAM0.INIT_15=256'h80000000_b9f40694_b800ff88_80000000_b9f406a0_30a0194c_80000000_b9f4155c; +defparam bootram.RAM0.INIT_16=256'hb800ff60_80000000_b9f40678_30a01950_80000000_b9f411e8_30a08000_b0000000; +defparam bootram.RAM0.INIT_17=256'hbe030020_30a00050_31000001_30e1001c_30c000f7_f9e10000_a46500ff_3021ffe0; +defparam bootram.RAM0.INIT_18=256'hb810ffe8_30210020_b60f0008_e9e10000_80000000_b9f40330_f081001c_3080005e; +defparam bootram.RAM0.INIT_19=256'h31000001_b9f40280_f9e10000_30e1001c_30c000f7_30a00050_3021ffe0_308000dc; +defparam bootram.RAM0.INIT_1A=256'h3021ffdc_30210020_b60f0008_6463001f_3063ffff_a863005e_e9e10000_e061001c; +defparam bootram.RAM0.INIT_1B=256'h30a0a120_b0000007_9403c001_ac640002_94808001_fac10020_fa61001c_f9e10000; +defparam bootram.RAM0.INIT_1C=256'hb9f40ea8_80000000_b9f4082c_f800200c_80000000_b9f4fe74_f860200c_306000ff; +defparam bootram.RAM0.INIT_1D=256'h80000000_b9f4ff6c_80000000_b9f4059c_30a01988_80000000_b9f409ec_80000000; +defparam bootram.RAM0.INIT_1E=256'h30a00000_b0000030_bc160100_bc130134_a6632000_e8603334_12c30000_be23017c; +defparam bootram.RAM0.INIT_1F=256'hb0000000_80000000_b9f40558_30a01b04_12c30000_be030068_80000000_b9f41180; +defparam bootram.RAM0.INIT_20=256'hb9f41094_30a08000_b0000000_30c07c00_b9f40e70_30a00000_b0000030_30e08000; +defparam bootram.RAM0.INIT_21=256'he9e10000_30600001_10a00000_b9f41244_80000000_b9f40524_30a01b30_80000000; +defparam bootram.RAM0.INIT_22=256'hb000003f_80000000_b9f404f8_30a01b6c_30210024_b60f0008_eac10020_ea61001c; +defparam bootram.RAM0.INIT_23=256'h80000000_b9f404d4_30a019f8_12630000_be230024_80000000_b9f410fc_30a00000; +defparam bootram.RAM0.INIT_24=256'h30a00000_b000003f_30e08000_b0000000_10730000_b810ffb4_80000000_b9f4fd9c; +defparam bootram.RAM0.INIT_25=256'hb9f40490_30a019bc_80000000_b9f41000_30a08000_b0000000_30c07c00_b9f40ddc; +defparam bootram.RAM0.INIT_26=256'h80000000_b9f40474_30a01a50_30600001_b810ff70_10b60000_b9f411b0_80000000; +defparam bootram.RAM0.INIT_27=256'h80000000_b9f40454_30a01ab4_bc230098_80000000_b9f41000_30a00000_b0000018; +defparam bootram.RAM0.INIT_28=256'h80000000_b9f41048_30a00000_b000003f_80000000_b9f40444_30a0199c_b800fed8; +defparam bootram.RAM0.INIT_29=256'hb9f4fda4_b800fe9c_80000000_b9f4fcec_80000000_b9f40424_30a019f8_bc230028; +defparam bootram.RAM0.INIT_2A=256'h30c07c00_b9f40d24_30a00000_b000003f_30e08000_b0000000_b800fe84_10a00000; +defparam bootram.RAM0.INIT_2B=256'hb9f410f8_80000000_b9f403d8_30a019bc_80000000_b9f40f48_30a08000_b0000000; +defparam bootram.RAM0.INIT_2C=256'hb9f4fc60_30a00001_b9f4fd4c_80000000_b9f403c0_30a01a7c_b800fe50_10b30000; +defparam bootram.RAM0.INIT_2D=256'hfa610020_3021ffd4_b800ff40_80000000_b9f410c8_30a00000_b0000018_30a07530; +defparam bootram.RAM0.INIT_2E=256'hfac10024_30e00001_30c1001c_12e70000_f0c1001c_fae10028_10b30000_a66500ff; +defparam bootram.RAM0.INIT_2F=256'h10b30000_10f60000_10d70000_10830000_be030030_12c80000_b9f40898_f9e10000; +defparam bootram.RAM0.INIT_30=256'h10640000_a8830001_6463001f_3063ffff_80000000_b9f407d0_30800001_be76001c; +defparam bootram.RAM0.INIT_31=256'hfac10024_3021ffcc_3021002c_b60f0008_eae10028_eac10024_ea610020_e9e10000; +defparam bootram.RAM0.INIT_32=256'hf9e10000_12c80000_12e70000_13250000_13060000_fb210030_fb01002c_fae10028; +defparam bootram.RAM0.INIT_33=256'h32d6ffff_e0770000_f301001c_30e00002_be76005c_30c1001c_10b90000_fa610020; +defparam bootram.RAM0.INIT_34=256'hbe33ffcc_32f70001_b9f4089c_30a0000a_12630000_33180001_b9f407f8_f061001d; +defparam bootram.RAM0.INIT_35=256'heb210030_eb01002c_eae10028_eac10024_ea610020_e9e10000_10730000_10b90000; +defparam bootram.RAM0.INIT_36=256'h80000000_b9f4f998_f9e10000_3021ffe4_30600001_b810ffe0_30210034_b60f0008; +defparam bootram.RAM0.INIT_37=256'h12660000_fb21002c_fb010028_fae10024_fa61001c_3021ffd0_80000000_b60f0008; +defparam bootram.RAM0.INIT_38=256'haa43ffff_12c00000_b810001c_f9e10000_fac10020_13260000_12e70000_13050000; +defparam bootram.RAM0.INIT_39=256'h10960000_90630060_10b80000_b9f405ec_32730001_bcb2002c_16572001_bc120030; +defparam bootram.RAM0.INIT_3A=256'he9e10000_10640000_f0130000_14999800_32d60001_be32ffd4_aa43000a_f0730000; +defparam bootram.RAM0.INIT_3B=256'h3021ffd0_30210030_b60f0008_eb21002c_eb010028_eae10024_eac10020_ea61001c; +defparam bootram.RAM0.INIT_3C=256'h13260000_12e70000_13050000_12660000_fb21002c_fb010028_fae10024_fa61001c; +defparam bootram.RAM0.INIT_3D=256'hb9f4051c_32730001_bcb2002c_16572001_12c00000_b8100014_f9e10000_fac10020; +defparam bootram.RAM0.INIT_3E=256'h14999800_32d60001_be32ffdc_aa43000a_f0730000_10960000_90630060_10b80000; +defparam bootram.RAM0.INIT_3F=256'heb21002c_eb010028_eae10024_eac10020_ea61001c_e9e10000_10640000_f0130000; +defparam bootram.RAM1.INIT_00=256'h12e60000_12c50000_fae10024_fac10020_fa61001c_3021ffd8_30210030_b60f0008; +defparam bootram.RAM1.INIT_01=256'hbe32ffec_aa43000a_f0730000_90630060_10b60000_b9f404b0_12660000_f9e10000; +defparam bootram.RAM1.INIT_02=256'heae10024_eac10020_ea61001c_e9e10000_10770000_f0130000_3273ffff_32730001; +defparam bootram.RAM1.INIT_03=256'he9e10000_10a00000_b9f4ff94_f9e10000_3021ffe4_10c50000_30210028_b60f0008; +defparam bootram.RAM1.INIT_04=256'hb60f0008_e9e10000_80000000_b9f40448_f9e10000_3021ffe4_3021001c_b60f0008; +defparam bootram.RAM1.INIT_05=256'h3021001c_b60f0008_e9e10000_10a00000_b9f4ffdc_f9e10000_3021ffe4_3021001c; +defparam bootram.RAM1.INIT_06=256'hbe060024_90c30060_12660000_e0660000_f9e10000_fac10020_fa61001c_3021ffdc; +defparam bootram.RAM1.INIT_07=256'h10b60000_be26fff0_90c30060_e0730000_32730001_b9f40324_10b60000_12c50000; +defparam bootram.RAM1.INIT_08=256'hfac1001c_3021ffe0_30210024_b60f0008_10600000_eac10020_ea61001c_e9e10000; +defparam bootram.RAM1.INIT_09=256'heac1001c_e9e10000_30c0000a_b9f402dc_10b60000_12c50000_b9f4ff9c_f9e10000; +defparam bootram.RAM1.INIT_0A=256'h10a00000_b9f4ffc0_f9e10000_3021ffe4_10c50000_30210020_b60f0008_10600000; +defparam bootram.RAM1.INIT_0B=256'h10a00000_b9f4ff48_f9e10000_3021ffe4_10c50000_3021001c_b60f0008_e9e10000; +defparam bootram.RAM1.INIT_0C=256'he9e10000_30c0000a_b9f40278_f9e10000_3021ffe4_3021001c_b60f0008_e9e10000; +defparam bootram.RAM1.INIT_0D=256'hb9f40250_f9e10000_10a00000_12c50000_fac1001c_3021ffe0_3021001c_b60f0008; +defparam bootram.RAM1.INIT_0E=256'hfac1001c_3021ffe0_30210020_b60f0008_eac1001c_e9e10000_10760000_10d60000; +defparam bootram.RAM1.INIT_0F=256'h30210020_b60f0008_eac1001c_e9e10000_10760000_12c60000_b9f40228_f9e10000; +defparam bootram.RAM1.INIT_10=256'h94e08001_3021001c_b60f0008_e9e10000_80000000_b9f401b8_f9e10000_3021ffe4; +defparam bootram.RAM1.INIT_11=256'h80633000_84632000_84c62800_a866ffff_e880f81c_b0000000_9404c001_ac870002; +defparam bootram.RAM1.INIT_12=256'h9404c001_80843800_ac840002_94808001_a4e70002_f860f81c_b0000000_f860200c; +defparam bootram.RAM1.INIT_13=256'h88a52000_e880f81c_b0000000_9406c001_acc30002_94608001_80000000_b60f0008; +defparam bootram.RAM1.INIT_14=256'h9404c001_80841800_ac840002_94808001_a4630002_f8a0f81c_b0000000_f8a0200c; +defparam bootram.RAM1.INIT_15=256'ha866ffff_e880f820_b0000000_9404c001_ac870002_94e08001_80000000_b60f0008; +defparam bootram.RAM1.INIT_16=256'h94808001_a4e70002_f860f820_b0000000_f8602020_80633000_84632000_84c62800; +defparam bootram.RAM1.INIT_17=256'hfae10024_fa61001c_3021ffd4_80000000_b60f0008_9404c001_80843800_ac840002; +defparam bootram.RAM1.INIT_18=256'hbe060040_90c30060_13050000_12e60000_e0660000_fac10020_f9e10000_fb010028; +defparam bootram.RAM1.INIT_19=256'h10730000_be120028_16569800_32c70001_b8100014_32600001_be670038_12660000; +defparam bootram.RAM1.INIT_1A=256'h10730000_3273ffff_32730001_be26ffe4_90c30060_c0779800_10b80000_b9f400cc; +defparam bootram.RAM1.INIT_1B=256'h3021ffe4_3021002c_b60f0008_eb010028_eae10024_eac10020_ea61001c_e9e10000; +defparam bootram.RAM1.INIT_1C=256'hf0c51e7c_3021001c_b60f0008_e9e10000_30c0000a_b9f40084_f9e10000_10a00000; +defparam bootram.RAM1.INIT_1D=256'h80000000_b60f0008_f8653700_64a50405_e4661bac_10c63000_80000000_b60f0008; +defparam bootram.RAM1.INIT_1E=256'h90c60060_b9f4ffc4_10b30000_e0d31e7c_12600000_f9e10000_fa61001c_3021ffe0; +defparam bootram.RAM1.INIT_1F=256'he9e10000_bc32ffd8_aa530003_90c60060_b9f4ffbc_32730001_10b30000_e0d31ba8; +defparam bootram.RAM1.INIT_20=256'h12c60000_f9e10000_fac10020_fa61001c_3021ffdc_30210020_b60f0008_ea61001c; +defparam bootram.RAM1.INIT_21=256'hfac5000c_bc03fffc_e8650004_30a33700_64730405_12650000_be120030_aa46000a; +defparam bootram.RAM1.INIT_22=256'hbc32ffd0_aa430001_e0651e7c_30210024_b60f0008_eac10020_ea61001c_e9e10000; +defparam bootram.RAM1.INIT_23=256'hf9e10000_fac10020_fa61001c_3021ffdc_64730405_b810ffc8_30c0000d_b9f4ffac; +defparam bootram.RAM1.INIT_24=256'hbc040008_e8830004_30633700_64730405_12650000_be120030_aa46000a_12c60000; +defparam bootram.RAM1.INIT_25=256'haa430001_e0651e7c_30210024_b60f0008_eac10020_ea61001c_e9e10000_fac3000c; +defparam bootram.RAM1.INIT_26=256'h30a53700_64a50405_64730405_b810ffc4_80000000_b9f4ff44_30c0000d_be32ffd0; +defparam bootram.RAM1.INIT_27=256'he8650008_30a53700_64a50405_80000000_b60f0008_e8650010_bc03fffc_e8650008; +defparam bootram.RAM1.INIT_28=256'h64a50405_80000000_b60f0008_90630060_be24fff8_e8850008_e8650010_bc030014; +defparam bootram.RAM1.INIT_29=256'h32600001_be230040_e8760008_32c53700_fa61001c_f9e10000_fac10020_3021ffdc; +defparam bootram.RAM1.INIT_2A=256'hbe03ffe8_e8760008_30a00001_b9f401e0_3060ffff_be120034_aa53012d_b8000010; +defparam bootram.RAM1.INIT_2B=256'he9e10000_e8760010_3060ffff_be52000c_16539001_3240012b_3273ffff_32730001; +defparam bootram.RAM1.INIT_2C=256'h32400004_a463000f_e8603324_f8003108_30210024_b60f0008_eac10020_ea61001c; +defparam bootram.RAM1.INIT_2D=256'ha46300ff_64a30008_e4641bb8_10831800_30600004_10831800_beb20010_16439001; +defparam bootram.RAM1.INIT_2E=256'ha4a500ff_be070088_80000000_b60f0008_f8603108_30600080_f8a03104_f8603100; +defparam bootram.RAM1.INIT_2F=256'hf8803110_30800090_f860310c_a0630001_10652800_be23fff8_a4630040_e8603110; +defparam bootram.RAM1.INIT_30=256'haa470001_10800000_be230058_a4630080_e8603110_bc23fff8_a4630002_e8603110; +defparam bootram.RAM1.INIT_31=256'h30e7ffff_e860310c_bc23fff8_a4630002_e8603110_f8603110_30600020_be120038; +defparam bootram.RAM1.INIT_32=256'h30600068_b810ffd0_30600020_be32ffd8_aa470001_30c60001_be07001c_f0660000; +defparam bootram.RAM1.INIT_33=256'ha4a500ff_10640000_b60f0008_f8603110_30600040_10640000_b60f0008_30800001; +defparam bootram.RAM1.INIT_34=256'h306000d0_30600090_be27000c_f860310c_10652800_be23fff8_a4630040_e8603110; +defparam bootram.RAM1.INIT_35=256'h10800000_be23005c_a4630080_e8603110_bc23fff8_a4630002_e8603110_f8603110; +defparam bootram.RAM1.INIT_36=256'hf8803110_bc120030_aa470001_f860310c_30800010_e0660000_30800001_be070068; +defparam bootram.RAM1.INIT_37=256'hbe070028_30e7ffff_be23001c_a4630080_e8603110_bc23fff8_a4630002_e8603110; +defparam bootram.RAM1.INIT_38=256'hb60f0008_f8603110_30600040_10800000_30800050_b810ffd4_b800ffc4_30c60001; +defparam bootram.RAM1.INIT_39=256'hbc260054_a4c30000_b0008000_e8603324_10640000_b60f0008_30800001_10640000; +defparam bootram.RAM1.INIT_3A=256'h80000000_10800000_bc660030_e8c01e80_10660000_be650048_bc430054_e8601e80; +defparam bootram.RAM1.INIT_3B=256'h16443000_30840001_80000000_80000000_80000000_80000000_80000000_80000000; +defparam bootram.RAM1.INIT_3C=256'ha4630007_e8603324_80000000_b60f0008_bc32ffc8_16432800_30630001_bc32ffdc; +defparam bootram.RAM1.INIT_3D=256'h16459001_3240005a_3065ffa9_90a50060_b800ff9c_f8801e80_e4831bc4_10631800; +defparam bootram.RAM1.INIT_3E=256'h3085ffd0_be52000c_16459001_32400039_a46300ff_3065ffc9_a46300ff_be520024; +defparam bootram.RAM1.INIT_3F=256'hf9e10000_fb610034_13250000_fb21002c_3021ffc8_80000000_b60f0008_a46400ff; +defparam bootram.RAM2.INIT_00=256'haa43003a_13660000_e0790000_fb410030_fb010028_fae10024_fac10020_fa61001c; +defparam bootram.RAM2.INIT_01=256'heb010028_eae10024_eac10020_ea61001c_e9e10000_10650000_30a0ffff_be120034; +defparam bootram.RAM2.INIT_02=256'hc085c800_30a00001_e8c01e84_30210038_b60f0008_eb610034_eb410030_eb21002c; +defparam bootram.RAM2.INIT_03=256'hb810ffac_bc23ffe4_a4630044_c0662000_a4a300ff_be04001c_90840060_30650001; +defparam bootram.RAM2.INIT_04=256'h12761800_66c30404_b9f4ff1c_e0b90002_80000000_b9f4ff28_e0b90001_30a0fffe; +defparam bootram.RAM2.INIT_05=256'he0b90005_30a0fffd_be38ff74_93040060_e083000b_10791800_fa7b0004_10739800; +defparam bootram.RAM2.INIT_06=256'h66c3040c_b9f4fed8_e0b90004_66e30404_b9f4fee4_e0b90003_13530000_b9f4fef0; +defparam bootram.RAM2.INIT_07=256'he0b90007_fafb0008_12f7b000_12d61800_12d61800_b9f4fec8_64630408_e0b90006; +defparam bootram.RAM2.INIT_08=256'hbe130060_f07b0000_1063b000_66c30404_b9f4fea4_e0b90008_80000000_b9f4feb0; +defparam bootram.RAM2.INIT_09=256'hb9f4fe74_c0b6c800_a6d600ff_32d60009_12d8c000_ea7b000c_13580000_10f30000; +defparam bootram.RAM2.INIT_0A=256'he8fb0004_ea7b000c_d0789800_1063b800_66e30404_b9f4fe68_e0b60001_12d9b000; +defparam bootram.RAM2.INIT_0B=256'headb0008_a74300ff_be52ffb8_1647c003_107a1800_a70400ff_c073c000_30980001; +defparam bootram.RAM2.INIT_0C=256'h107a1800_12c7b000_10632000_e0b70009_12f9b800_64760008_12e73800_e09b0000; +defparam bootram.RAM2.INIT_0D=256'ha6d600ff_1063c000_16d60000_67030404_b9f4fe04_e0b7000a_12d61800_b9f4fe10; +defparam bootram.RAM2.INIT_0E=256'ha4630100_e8603b10_10a00000_b810fe58_30a0fffb_be32fe60_1643b000_a46300ff; +defparam bootram.RAM2.INIT_0F=256'ha4a500ff_80884800_a1292000_a508007f_a5290600_80000000_b60f0008_bc23fff8; +defparam bootram.RAM2.INIT_10=256'ha0840100_f8603b18_a46600ff_f8803b10_f8e03b00_bc23fff8_a4630100_e8603b10; +defparam bootram.RAM2.INIT_11=256'hb60f0008_e8603b00_bc23fff8_a4630100_e8603b10_10650000_be050018_f8803b10; +defparam bootram.RAM2.INIT_12=256'h31200400_31000008_10a00000_f9e10000_3021ffe4_10e60000_10c00000_80000000; +defparam bootram.RAM2.INIT_13=256'h3021ffc4_3021001c_b60f0008_e9e10000_80000000_b9f4ff84_f8603b14_30600001; +defparam bootram.RAM2.INIT_14=256'hb9f4ff3c_fae10034_13060000_f9e10000_fb010038_fa61002c_12c50000_fac10030; +defparam bootram.RAM2.INIT_15=256'hfac03b00_f8603b04_3060000b_66d60408_f8603b10_f8003b18_30600400_12670000; +defparam bootram.RAM2.INIT_16=256'h80000000_b9f4ff00_f8603b10_30600528_f8803b10_30800428_f8603b18_30600001; +defparam bootram.RAM2.INIT_17=256'hf8803b10_30800500_f8603b10_30600400_3261001c_12e00000_12d30000_be18009c; +defparam bootram.RAM2.INIT_18=256'he8803b04_f8610020_e8603b08_f881001c_14b7c000_e8803b0c_80000000_b9f4fed8; +defparam bootram.RAM2.INIT_19=256'h30a00010_10800000_beb20034_16459003_22400010_f8610028_e8603b00_f8810024; +defparam bootram.RAM2.INIT_1A=256'hbeb20020_1658b803_12f72800_bc32fff0_16442800_30840001_d0762000_c0732000; +defparam bootram.RAM2.INIT_1B=256'hf8003b18_12d62800_be52ff7c_1658b803_12f72800_bc25ffd8_b800ff8c_12d62800; +defparam bootram.RAM2.INIT_1C=256'hb0009f00_3021003c_b60f0008_eb010038_eae10034_eac10030_ea61002c_e9e10000; +defparam bootram.RAM2.INIT_1D=256'h31200400_b9f4fe34_f9e10000_31000020_30c00001_30a00001_3021ffe4_30e00000; +defparam bootram.RAM2.INIT_1E=256'h3021ffe4_e860f828_b0000000_3021001c_b60f0008_a463ffff_b00000ff_e9e10000; +defparam bootram.RAM2.INIT_1F=256'h64830008_80000000_b9f4ffa8_3021001c_b60f0008_e9e10000_bc030010_f9e10000; +defparam bootram.RAM2.INIT_20=256'h16439001_32400015_80000000_b9f40330_a46300ff_be120010_aa440020_a48400ff; +defparam bootram.RAM2.INIT_21=256'hb0000000_b800ffb0_f860f828_b0000000_bc52ffe4_16439001_32400018_bcb2fff0; +defparam bootram.RAM2.INIT_22=256'hb9f4ff40_3021001c_b60f0008_e9e10000_bc030010_f9e10000_3021ffe4_e860f824; +defparam bootram.RAM2.INIT_23=256'h80000000_b9f402c8_a4a300ff_be120010_aa440020_a48400ff_64830008_80000000; +defparam bootram.RAM2.INIT_24=256'hb0000000_e0651bbe_bc52ffe4_16459001_32400018_bcb2fff0_16459001_32400015; +defparam bootram.RAM2.INIT_25=256'h10c50000_12c00000_fac1001c_3021ffe0_b800ffa4_f860f824_b0000000_f8a0f828; +defparam bootram.RAM2.INIT_26=256'heac1001c_e9e10000_80000000_99fcb000_30e00024_b9f40334_f9e10000_10b60000; +defparam bootram.RAM2.INIT_27=256'hb810001c_30e1001c_b9f4fd88_f9e10000_30c00040_3021ffa4_30210020_b60f0008; +defparam bootram.RAM2.INIT_28=256'he063001c_10612800_10600000_be520044_16459001_3240003e_30a50001_10a00000; +defparam bootram.RAM2.INIT_29=256'haa440099_e083001c_10612800_30a50001_bc32ffd8_aa4300aa_bc12ffe0_aa4300ff; +defparam bootram.RAM2.INIT_2A=256'h3021005c_b60f0008_e9e10000_3021005c_b60f0008_e9e10000_30600001_be32ffc8; +defparam bootram.RAM2.INIT_2B=256'h10b60000_30c00006_b9f4fd08_f9e10000_10f60000_32c1001c_fac10028_3021ffd4; +defparam bootram.RAM2.INIT_2C=256'heac10028_e9e10000_a884ffff_80841800_14830000_30e00006_b9f401f8_30c01bd8; +defparam bootram.RAM2.INIT_2D=256'h65040403_64e40003_64a40007_64c40005_e0803a03_3021002c_b60f0008_6464001f; +defparam bootram.RAM2.INIT_2E=256'ha4a50008_80e73000_90a40041_a4e70004_80c62800_a4c60002_64640407_65240405; +defparam bootram.RAM2.INIT_2F=256'h81294000_a5290040_81082000_a5080020_80842800_a4840010_80a53800_10842000; +defparam bootram.RAM2.INIT_30=256'h64e50403_64c50003_64650007_64850005_a4a500ff_a46300ff_b60f0008_80634800; +defparam bootram.RAM2.INIT_31=256'ha4630008_80c62000_90650041_a4c60004_80841800_a4840002_65250407_65050405; +defparam bootram.RAM2.INIT_32=256'h81083800_a5080040_80e72800_a4e70020_80a51800_a4a50010_80633000_10a52800; +defparam bootram.RAM2.INIT_33=256'hb00000ff_fac1001c_3021ffe0_80000000_b60f0008_f9203a00_a52900ff_81294000; +defparam bootram.RAM2.INIT_34=256'h30a0ffaa_b9f4ff74_30a0ffff_b9f4ff7c_30a0ffff_b9f4ff84_f9e10000_a6c5ffff; +defparam bootram.RAM2.INIT_35=256'h30a00061_b9f4ff54_30a00032_b9f4ff5c_a2d60000_b0000b00_30a0ff99_b9f4ff6c; +defparam bootram.RAM2.INIT_36=256'h30a0ff81_b9f4ff34_30a00032_b9f4ff3c_10b60000_b9f4ff44_64b60008_b9f4ff4c; +defparam bootram.RAM2.INIT_37=256'h30a0ffa1_b9f4ff14_30a00030_b9f4ff1c_64b60010_b9f4ff24_30a0000b_b9f4ff2c; +defparam bootram.RAM2.INIT_38=256'h10a00000_b9f4fef4_30a00020_b9f4fefc_30a0000e_b9f4ff04_10a00000_b9f4ff0c; +defparam bootram.RAM2.INIT_39=256'h30210020_b60f0008_eac1001c_e9e10000_10a00000_b9f4fee4_30a00020_b9f4feec; +defparam bootram.RAM2.INIT_3A=256'hb6110000_30a0ffff_b9f4e91c_80000000_b9f4f220_f9e10000_3021ffe4_30a01be0; +defparam bootram.RAM2.INIT_3B=256'h22400003_80000000_b60f0008_80000000_b60f0008_80000000_b6910000_80000000; +defparam bootram.RAM2.INIT_3C=256'h16432000_e8660000_e8850000_bc230050_a4630003_80653000_beb2005c_16479003; +defparam bootram.RAM2.INIT_3D=256'h30e7ffff_30c60004_be52ffe0_16479003_22400003_30a50004_30e7fffc_bc320040; +defparam bootram.RAM2.INIT_3E=256'h30c60001_30a50001_be320020_16434000_e0660000_e1050000_bc120028_aa47ffff; +defparam bootram.RAM2.INIT_3F=256'h2240000f_14634000_b60f0008_10600000_b60f0008_bc32ffe0_aa47ffff_30e7ffff; +defparam bootram.RAM3.INIT_00=256'hbc070024_11050000_be030034_a4630003_80662800_10850000_beb20018_16479003; +defparam bootram.RAM3.INIT_01=256'h30c60001_be32fff0_16474000_31080001_f0680000_e0660000_10e72000_11040000; +defparam bootram.RAM3.INIT_02=256'he8860008_f8680004_e8660004_f8880000_30e7fff0_e8860000_10650000_b60f0008; +defparam bootram.RAM3.INIT_03=256'h31080010_be52ffd0_16479003_2240000f_f868000c_30c60010_e866000c_f8880008; +defparam bootram.RAM3.INIT_04=256'h22400003_d8682000_30e7fffc_c8662000_10800000_bcb2002c_16479003_22400003; +defparam bootram.RAM3.INIT_05=256'he860193c_10880000_b810ff68_11044000_10c43000_30840004_be52ffec_16479003; +defparam bootram.RAM3.INIT_06=256'h3273fffc_99fc1800_bc120018_aa43ffff_3260193c_f9e10000_fa61001c_3021ffe0; +defparam bootram.RAM3.INIT_07=256'h3021fff8_30210020_b60f0008_ea61001c_e9e10000_bc32fff0_aa43ffff_e8730000; +defparam bootram.RAM3.INIT_08=256'h30210008_b60f0008_c9e00800_80000000_b9f4ffb0_80000000_b9f4e7d4_d9e00800; +defparam bootram.RAM3.INIT_09=256'hffffffff_30210008_b60f0008_c9e00800_80000000_b9f4e74c_d9e00800_3021fff8; +defparam bootram.RAM3.INIT_0A=256'h696d6167_61696e20_523a206d_4552524f_4f4b0000_00000000_ffffffff_00000000; +defparam bootram.RAM3.INIT_0B=256'h64206d6f_206c6f61_49484558_20696e20_4261636b_65642120_7475726e_65207265; +defparam bootram.RAM3.INIT_0C=256'h53746172_720a0000_6f616465_6f6f746c_322b2062_55535250_4e4f4b00_64652e00; +defparam bootram.RAM3.INIT_0D=256'h4552524f_2e000000_6d6f6465_61666520_696e2073_50322b20_20555352_74696e67; +defparam bootram.RAM3.INIT_0E=256'h20546869_72616d21_70726f67_61696e20_6f6d206d_6e206672_65747572_523a2072; +defparam bootram.RAM3.INIT_0F=256'h523a206e_4552524f_6e210000_61707065_65722068_206e6576_6f756c64_73207368; +defparam bootram.RAM3.INIT_10=256'h626c652e_61696c61_65206176_696d6167_61726520_69726d77_66652066_6f207361; +defparam bootram.RAM3.INIT_11=256'h6c6f6164_20746f20_66726565_65656c20_6b2e2046_62726963_6d206120_20492061; +defparam bootram.RAM3.INIT_12=256'h2076616c_20666f72_6b696e67_43686563_2e000000_2052414d_5820746f_20494845; +defparam bootram.RAM3.INIT_13=256'h56616c69_2e2e2e00_6d616765_47412069_6e204650_6374696f_726f6475_69642070; +defparam bootram.RAM3.INIT_14=256'h642e2041_666f756e_61676520_4120696d_20465047_74696f6e_6f647563_64207072; +defparam bootram.RAM3.INIT_15=256'h2070726f_616c6964_4e6f2076_742e0000_20626f6f_6720746f_7074696e_7474656d; +defparam bootram.RAM3.INIT_16=256'h74656d70_2e0a4174_6f756e64_67652066_20696d61_46504741_696f6e20_64756374; +defparam bootram.RAM3.INIT_17=256'h77617265_6669726d_696f6e20_64756374_2070726f_6c6f6164_20746f20_74696e67; +defparam bootram.RAM3.INIT_18=256'h6520666f_6d776172_20666972_74696f6e_6f647563_64207072_56616c69_2e2e2e00; +defparam bootram.RAM3.INIT_19=256'h6e206672_65747572_523a2052_4552524f_2e2e2e00_64696e67_204c6f61_756e642e; +defparam bootram.RAM3.INIT_1A=256'h206e6576_6f756c64_73207368_20546869_72616d21_70726f67_61696e20_6f6d206d; +defparam bootram.RAM3.INIT_1B=256'h696f6e20_64756374_2070726f_616c6964_4e6f2076_6e210000_61707065_65722068; +defparam bootram.RAM3.INIT_1C=256'h6669726d_61666520_6e672073_54727969_6e642e20_20666f75_77617265_6669726d; +defparam bootram.RAM3.INIT_1D=256'h0018000f_ffff0031_01b200d9_05160364_14580a2c_05050400_2e2e2e00_77617265; +defparam bootram.RAM3.INIT_1E=256'hb8080000_b0000000_10101200_06820594_09c407d0_13880d05_00002710_000b0000; +defparam bootram.RAM3.INIT_1F=256'h20202020_28282820_20202828_20202020_00202020_00000000_6f72740a_0a0a6162; +defparam bootram.RAM3.INIT_20=256'h10040404_10101010_10101010_10101010_20881010_20202020_20202020_20202020; +defparam bootram.RAM3.INIT_21=256'h01010101_01010101_01010101_41414141_10104141_10101010_04040410_04040404; +defparam bootram.RAM3.INIT_22=256'h02020202_02020202_02020202_42424242_10104242_10101010_01010101_01010101; +defparam bootram.RAM3.INIT_23=256'h00000000_00000000_00000000_00000000_20000000_10101010_02020202_02020202; defparam bootram.RAM3.INIT_24=256'h00000000_00000000_00000000_00000000_00000000_00000000_00000000_00000000; defparam bootram.RAM3.INIT_25=256'h00000000_00000000_00000000_00000000_00000000_00000000_00000000_00000000; defparam bootram.RAM3.INIT_26=256'h00000000_00000000_00000000_00000000_00000000_00000000_00000000_00000000; -defparam bootram.RAM3.INIT_27=256'h00000000_00000000_00001be0_ffffffff_01010100_000017c4_00000000_00000000; +defparam bootram.RAM3.INIT_27=256'h00000000_00000000_00000000_00000000_00000000_00000000_00000000_00000000; defparam bootram.RAM3.INIT_28=256'h00000000_00000000_00000000_00000000_00000000_00000000_00000000_00000000; +defparam bootram.RAM3.INIT_29=256'h00000000_00000000_00000000_00000000_00000000_00000000_00000000_00000000; +defparam bootram.RAM3.INIT_2A=256'h00000000_00000000_00000000_00000000_00000000_00000000_00000000_00000000; +defparam bootram.RAM3.INIT_2B=256'h28282020_20282828_20202020_20202020_00000000_00000000_00000000_00000000; +defparam bootram.RAM3.INIT_2C=256'h10101010_10101010_10101010_88101010_20202020_20202020_20202020_20202020; +defparam bootram.RAM3.INIT_2D=256'h01010101_01010101_41414101_10414141_10101010_04041010_04040404_04040404; +defparam bootram.RAM3.INIT_2E=256'h02020202_02020202_42424202_10424242_10101010_01010110_01010101_01010101; +defparam bootram.RAM3.INIT_2F=256'h00000000_00000000_00000000_00000000_10101020_02020210_02020202_02020202; +defparam bootram.RAM3.INIT_30=256'h00000000_00000000_00000000_00000000_00000000_00000000_00000000_00000000; +defparam bootram.RAM3.INIT_31=256'h00000000_00000000_00000000_00000000_00000000_00000000_00000000_00000000; +defparam bootram.RAM3.INIT_32=256'h00000000_00000000_00000000_00000000_00000000_00000000_00000000_00000000; +defparam bootram.RAM3.INIT_33=256'h01010100_00001948_00000000_00000000_00000000_00000000_00000000_00000000; +defparam bootram.RAM3.INIT_34=256'h00000000_00000000_00000000_00000000_00000000_00000000_00001d70_ffffffff; -- cgit v1.2.3 From 57fcaa242088516813a178713f9316e8ef7657a1 Mon Sep 17 00:00:00 2001 From: Matt Ettus Date: Thu, 4 Nov 2010 14:26:16 -0700 Subject: duh --- usrp2/top/u1e/u1e_core.v | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/usrp2/top/u1e/u1e_core.v b/usrp2/top/u1e/u1e_core.v index 619e44b8a..256146a99 100644 --- a/usrp2/top/u1e/u1e_core.v +++ b/usrp2/top/u1e/u1e_core.v @@ -36,7 +36,7 @@ module u1e_core localparam SR_TX_CTRL = 24; // 2 regs localparam SR_TIME64 = 28; // 4 regs - wire COMPAT_NUM = 8'd2; + wire [7:0] COMPAT_NUM = 8'd2; wire wb_clk = clk_fpga; wire wb_rst = rst_fpga; -- cgit v1.2.3 From 9cd8652b42b5afcba67ef0475e5681b951fe0bdc Mon Sep 17 00:00:00 2001 From: Matt Ettus Date: Tue, 9 Nov 2010 18:26:02 -0800 Subject: invert led signals because they are active low --- usrp2/top/u1e/u1e_core.v | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/usrp2/top/u1e/u1e_core.v b/usrp2/top/u1e/u1e_core.v index 256146a99..e7e798b34 100644 --- a/usrp2/top/u1e/u1e_core.v +++ b/usrp2/top/u1e/u1e_core.v @@ -344,7 +344,7 @@ module u1e_core assign rx_enable = xfer_rate[14]; assign rate = xfer_rate[7:0]; - assign { debug_led[3:0] } = {run_rx,run_tx,reg_leds[1:0]}; + assign { debug_led[3:0] } = ~{run_rx,run_tx,reg_leds[1:0]}; assign { cgen_sync_b, cgen_ref_sel } = reg_cgen_ctrl; assign s0_dat_miso = (s0_adr[6:0] == REG_LEDS) ? reg_leds : -- cgit v1.2.3 From 76d2697276c067285135f444112d987ee53cb843 Mon Sep 17 00:00:00 2001 From: Matt Ettus Date: Fri, 1 Oct 2010 15:18:26 -0700 Subject: fix timing problem on DAC output bus --- usrp2/top/u2_rev3/u2_rev3.v | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/usrp2/top/u2_rev3/u2_rev3.v b/usrp2/top/u2_rev3/u2_rev3.v index 4daa66212..bab5a7706 100644 --- a/usrp2/top/u2_rev3/u2_rev3.v +++ b/usrp2/top/u2_rev3/u2_rev3.v @@ -330,8 +330,8 @@ module u2_rev3 wire [15:0] dac_a_int, dac_b_int; // DAC A and B are swapped in schematic to facilitate clean layout // DAC A is also inverted in schematic to facilitate clean layout - always @(negedge dsp_clk) dac_a <= ~dac_b_int; - always @(negedge dsp_clk) dac_b <= dac_a_int; + always @(posedge dsp_clk) dac_a <= ~dac_b_int; + always @(posedge dsp_clk) dac_b <= dac_a_int; /* OFDDRRSE OFDDRRSE_serdes_inst -- cgit v1.2.3 From 98a4130707cf7cad9597b65504211343138391ad Mon Sep 17 00:00:00 2001 From: Matt Ettus Date: Tue, 9 Nov 2010 19:08:13 -0800 Subject: remove old commented out code --- usrp2/top/u2_rev3/u2_core_udp.v | 180 ---------------------------------------- usrp2/top/u2plus/u2plus_core.v | 6 +- 2 files changed, 2 insertions(+), 184 deletions(-) diff --git a/usrp2/top/u2_rev3/u2_core_udp.v b/usrp2/top/u2_rev3/u2_core_udp.v index c9502898b..3b565ba90 100644 --- a/usrp2/top/u2_rev3/u2_core_udp.v +++ b/usrp2/top/u2_rev3/u2_core_udp.v @@ -552,14 +552,6 @@ module u2_core // Master Timer, Slave #9 // No longer used, replaced with simple_timer below - /* - wire [31:0] master_time; - timer timer - (.wb_clk_i(wb_clk),.rst_i(wb_rst), - .cyc_i(s9_cyc),.stb_i(s9_stb),.adr_i(s9_adr[4:2]), - .we_i(s9_we),.dat_i(s9_dat_o),.dat_o(s9_dat_i),.ack_o(s9_ack), - .sys_clk_i(dsp_clk),.master_time_i(master_time),.int_o(timer_int) ); - */ assign s9_ack = 0; // ///////////////////////////////////////////////////////////////////////// @@ -686,41 +678,6 @@ module u2_core .rx_occupied(ser_rx_occ),.rx_full(ser_rx_full),.rx_empty(ser_rx_empty), .serdes_link_up(serdes_link_up),.debug0(debug_serdes0), .debug1(debug_serdes1) ); - // /////////////////////////////////////////////////////////////////////////////////// - // External RAM Interface - - /* - localparam PAGE_SIZE = 10; // PAGE SIZE is in bytes, 10 = 1024 bytes - - wire [15:0] bus2ram, ram2bus; - wire [15:0] bridge_adr; - wire [1:0] bridge_sel; - wire bridge_stb, bridge_cyc, bridge_we, bridge_ack; - - wire [19:0] page; - wire [19:0] wb_ram_adr = {page[19:PAGE_SIZE],bridge_adr[PAGE_SIZE-1:0]}; - setting_reg #(.my_addr(6),.width(20)) sr_page (.clk(wb_clk),.rst(wb_rst),.strobe(set_stb),.addr(set_addr), - .in(set_data),.out(page),.changed()); - - wb_bridge_16_32 bridge - (.wb_clk(wb_clk),.wb_rst(wb_rst), - .A_cyc_i(se_cyc),.A_stb_i(se_stb),.A_we_i(se_we),.A_sel_i(se_sel), - .A_adr_i(se_adr),.A_dat_i(se_dat_o),.A_dat_o(se_dat_i),.A_ack_o(se_ack), - .B_cyc_o(bridge_cyc),.B_stb_o(bridge_stb),.B_we_o(bridge_we),.B_sel_o(bridge_sel), - .B_adr_o(bridge_adr),.B_dat_o(bus2ram),.B_dat_i(ram2bus),.B_ack_i(bridge_ack)); - - wb_zbt16_b wb_zbt16_b - (.clk(wb_clk),.rst(wb_rst), - .wb_adr_i(wb_ram_adr),.wb_dat_i(bus2ram),.wb_dat_o(ram2bus),.wb_sel_i(bridge_sel), - .wb_cyc_i(bridge_cyc),.wb_stb_i(bridge_stb),.wb_ack_o(bridge_ack),.wb_we_i(bridge_we), - .sram_clk(RAM_CLK),.sram_a(RAM_A),.sram_d(RAM_D[15:0]),.sram_we(RAM_WEn), - .sram_bw(),.sram_adv(RAM_LDn),.sram_ce(RAM_CENn),.sram_oe(RAM_OEn), - .sram_mode(),.sram_zz() ); - - assign RAM_CE1n = 0; - assign RAM_D[17:16] = 2'bzz; - */ - // ///////////////////////////////////////////////////////////////////////// // VITA Timing @@ -737,140 +694,3 @@ module u2_core assign debug_gpio_1 = 32'd0; endmodule // u2_core - -/* - // FIFO Level Debugging - reg [31:0] host_to_dsp_fifo,dsp_to_host_fifo,eth_mac_debug,serdes_to_dsp_fifo,dsp_to_serdes_fifo; - - always @(posedge dsp_clk) - serdes_to_dsp_fifo <= { {ser_rx_full,ser_rx_empty,ser_rx_occ[13:0]}, - {dsp_tx_full,dsp_tx_empty,dsp_tx_occ[13:0]} }; - - always @(posedge dsp_clk) - dsp_to_serdes_fifo <= { {ser_tx_full,ser_tx_empty,ser_tx_occ[13:0]}, - {dsp_rx_full,dsp_rx_empty,dsp_rx_occ[13:0]} }; - - always @(posedge dsp_clk) - host_to_dsp_fifo <= { {eth_rx_full,eth_rx_empty,eth_rx_occ[13:0]}, - {dsp_tx_full,dsp_tx_empty,dsp_tx_occ[13:0]} }; - - always @(posedge dsp_clk) - dsp_to_host_fifo <= { {eth_tx_full,eth_tx_empty,eth_tx_occ[13:0]}, - {dsp_rx_full,dsp_rx_empty,dsp_rx_occ[13:0]} }; - - always @(posedge dsp_clk) - eth_mac_debug <= { { 6'd0, GMII_TX_EN, GMII_RX_DV, debug_mac0[7:0]}, - {eth_rx_full2, eth_rx_empty2, eth_rx_occ2[13:0]} }; - - assign debug_clk[0] = GMII_RX_CLK; // wb_clk; - assign debug_clk[1] = dsp_clk; -*/ -/* - - wire mdio_cpy = MDIO; - assign debug = { { 1'b0, s6_stb, s6_ack, s6_we, s6_sel[3:0] }, - { s6_adr[15:8] }, - { s6_adr[7:0] }, - { 6'd0, mdio_cpy, MDC } }; - - assign debug = { { GMII_TXD }, - { 5'd0, GMII_TX_EN, GMII_TX_ER, GMII_GTX_CLK }, - { wr2_flags, rd2_flags }, - { 4'd0, wr2_ready_i, wr2_ready_o, rd2_ready_i, rd2_ready_o } }; - assign debug = { { GMII_RXD }, - { 5'd0, GMII_RX_DV, GMII_RX_ER, GMII_RX_CLK }, - { wr2_flags, rd2_flags }, - { GMII_TX_EN,3'd0, wr2_ready_i, wr2_ready_o, rd2_ready_i, rd2_ready_o } }; - -// assign debug = debug_udp; - // assign debug = vrc_debug; -/* - assign debug_gpio_0 = { {pps_in, pps_int, 2'd0, vita_state}, - {2'd0, rx_dst_rdy, rx_src_rdy, rx_data[99:96]}, - {run_rx_d1, run_rx, strobe_rx, overrun, wr1_flags[3:0]} , - {wr1_ready_i, wr1_ready_o, rx1_src_rdy, rx1_dst_rdy, rx1_data[35:32]}}; -*/ -// assign debug_gpio_1 = {vita_time[63:32] }; -/* - assign debug_gpio_1 = { { tx_f19_data[15:8] }, - { tx_f19_data[7:0] }, - { 3'd0, tx_f19_src_rdy, tx_f19_dst_rdy, tx_f19_data[18:16] }, - { 2'b0, rd2_ready_i, rd2_ready_o, rd2_flags } }; - */ - -// wire debug_mux; -// setting_reg #(.my_addr(5)) sr_debug (.clk(wb_clk),.rst(wb_rst),.strobe(set_stb),.addr(set_addr), -// .in(set_data),.out(debug_mux),.changed()); - -//assign debug = debug_mux ? host_to_dsp_fifo : dsp_to_host_fifo; -//assign debug = debug_mux ? serdes_to_dsp_fifo : dsp_to_serdes_fifo; - -//assign debug = {{strobe_rx,/*adc_ovf_a*/ 1'b0,adc_a}, -// {run_rx,/*adc_ovf_b*/ 1'b0,adc_b}}; - -//assign debug = debug_tx_dsp; -//assign debug = debug_serdes0; - -//assign debug_gpio_0 = 0; //debug_serdes0; -//assign debug_gpio_1 = 0; //debug_serdes1; - -// assign debug={{3'b0, wb_clk, wb_rst, dsp_rst, por, config_success}, -// {8'b0}, -// {3'b0,ram_loader_ack, ram_loader_stb, ram_loader_we,ram_loader_rst,ram_loader_done }, -// {cpld_start,cpld_mode,cpld_done,cpld_din,cpld_clk,cpld_detached,cpld_misc,cpld_init_b} }; - -//assign debug = {dac_a,dac_b}; - -/* - assign debug = {{ram_loader_done, takeover, 6'd0}, - {1'b0, cpld_start_int, cpld_mode_int, cpld_done_int, sd_clk, sd_csn, sd_miso, sd_mosi}, - {8'd0}, - {cpld_start, cpld_mode, cpld_done, cpld_din, cpld_misc, cpld_detached, cpld_clk, cpld_init_b}}; */ - -/*assign debug = host_to_dsp_fifo; - assign debug_gpio_0 = eth_mac_debug; - assign debug_gpio_1 = 0; - */ -// Assign various commonly used debug buses. -/* - wire [31:0] debug_rx_1 = {uart_tx_o,GMII_TX_EN,strobe_rx,overrun,proc_int,buffer_int,timer_int,GMII_RX_DV, - irq[7:0], - GMII_RXD, - GMII_TXD}; - - wire [31:0] debug_rx_2 = { 5'd0, s8_we, s8_stb, s8_ack, debug_rx[23:0] }; - - wire [31:0] debug_time = {uart_tx_o, 7'b0, - irq[7:0], - 6'b0, GMII_RX_DV, GMII_TX_EN, - 4'b0, exp_pps_in, exp_pps_out, pps_in, pps_int}; - - wire [31:0] debug_irq = {uart_tx_o, iwb_adr, iwb_ack, - irq[7:0], - proc_int, 7'b0 }; - - wire [31:0] debug_eth = - {{uart_tx_o,proc_int,underrun,buffer_int,wr2_ready,wr2_error,wr2_done,wr2_write}, - {8'd0}, - {8'd0}, - {GMII_TX_EN,GMII_RX_DV,Rx_mac_empty,Rx_mac_rd,Rx_mac_err,Rx_mac_sop,Rx_mac_eop,wr2_full} }; - - assign debug_serdes0 = { { rd0_dat[7:0] }, - { ser_tx_clk, ser_tkmsb, ser_tklsb, rd0_sop, rd0_eop, rd0_read, rd0_error, rd0_done }, - { ser_t[15:8] }, - { ser_t[7:0] } }; - - assign debug_serdes1 = { {1'b0,proc_int,underrun,buffer_int,wr0_ready,wr0_error,wr0_done,wr0_write}, - { 1'b0, ser_rx_clk, ser_rkmsb, ser_rklsb, ser_enable, ser_prbsen, ser_loopen, ser_rx_en }, - { ser_r[15:8] }, - { ser_r[7:0] } }; - - assign debug_gpio_1 = {uart_tx_o,7'd0, - 3'd0,rd1_sop,rd1_eop,rd1_read,rd1_done,rd1_error, - debug_txc[15:0]}; - assign debug_gpio_1 = debug_rx; - assign debug_gpio_1 = debug_serdes1; - assign debug_gpio_1 = debug_eth; - - */ - diff --git a/usrp2/top/u2plus/u2plus_core.v b/usrp2/top/u2plus/u2plus_core.v index 237276fb6..4378436a6 100644 --- a/usrp2/top/u2plus/u2plus_core.v +++ b/usrp2/top/u2plus/u2plus_core.v @@ -648,10 +648,8 @@ module u2plus_core // ///////////////////////////////////////////////////////////////////////////////////////// // Debug Pins - assign debug_clk = {dsp_clk, wb_clk}; -// assign debug = debug_vt; - assign debug = {wb_clk, wb_rst, sd_cyc, sd_stb, sd_we, sd_ack, sd_dat_o[7:0], sd_dat_i[7:0], 10'd0}; - + assign debug_clk = 2'b00; + assign debug = 32'd0; assign debug_gpio_0 = 32'd0; assign debug_gpio_1 = 32'd0; -- cgit v1.2.3 From ba36bdd2795b9ae4c11c8f65de92022a1d96bb0f Mon Sep 17 00:00:00 2001 From: Matt Ettus Date: Wed, 10 Nov 2010 11:32:00 -0800 Subject: occ needs to be 2 bits wide on a 36 bit fifo interface. --- usrp2/fifo/fifo19_to_fifo36.v | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/usrp2/fifo/fifo19_to_fifo36.v b/usrp2/fifo/fifo19_to_fifo36.v index 0e6bcea68..2f530109f 100644 --- a/usrp2/fifo/fifo19_to_fifo36.v +++ b/usrp2/fifo/fifo19_to_fifo36.v @@ -16,7 +16,8 @@ module fifo19_to_fifo36 output [31:0] debug ); - reg f36_sof, f36_eof, f36_occ; + reg f36_sof, f36_eof; + reg [1:0] f36_occ; reg [1:0] state; reg [15:0] dat0, dat1; -- cgit v1.2.3 From a0dfafffbf64ba007fc8695e105c72c93c654319 Mon Sep 17 00:00:00 2001 From: Matt Ettus Date: Wed, 10 Nov 2010 11:50:42 -0800 Subject: need to enable both 16 and 32 bit spi interfaces -- 16 used in u1e, 32 in u2 and u2p --- usrp2/opencores/Makefile.srcs | 1 + 1 file changed, 1 insertion(+) diff --git a/usrp2/opencores/Makefile.srcs b/usrp2/opencores/Makefile.srcs index 1ccecf337..284578b39 100644 --- a/usrp2/opencores/Makefile.srcs +++ b/usrp2/opencores/Makefile.srcs @@ -23,5 +23,6 @@ i2c/rtl/verilog/timescale.v \ spi/rtl/verilog/spi_clgen.v \ spi/rtl/verilog/spi_defines.v \ spi/rtl/verilog/spi_shift.v \ +spi/rtl/verilog/spi_top.v \ spi/rtl/verilog/spi_top16.v \ )) -- cgit v1.2.3 From 7e20fa3db8e4990b47b346200f3c38bd8fa76f27 Mon Sep 17 00:00:00 2001 From: Matt Ettus Date: Wed, 10 Nov 2010 16:28:50 -0800 Subject: u2p needs the bigger regs for some reason --- usrp2/opencores/spi/rtl/verilog/spi_defines.v | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/usrp2/opencores/spi/rtl/verilog/spi_defines.v b/usrp2/opencores/spi/rtl/verilog/spi_defines.v index 79509888b..86c301886 100644 --- a/usrp2/opencores/spi/rtl/verilog/spi_defines.v +++ b/usrp2/opencores/spi/rtl/verilog/spi_defines.v @@ -43,8 +43,8 @@ // low frequency of system clock this can be reduced. // Use SPI_DIVIDER_LEN for fine tuning theexact number. // -`define SPI_DIVIDER_LEN_8 -//`define SPI_DIVIDER_LEN_16 +//`define SPI_DIVIDER_LEN_8 +`define SPI_DIVIDER_LEN_16 //`define SPI_DIVIDER_LEN_24 //`define SPI_DIVIDER_LEN_32 @@ -66,9 +66,9 @@ // Use SPI_MAX_CHAR for fine tuning the exact number, when using // SPI_MAX_CHAR_32, SPI_MAX_CHAR_24, SPI_MAX_CHAR_16, SPI_MAX_CHAR_8. // -//`define SPI_MAX_CHAR_128 +`define SPI_MAX_CHAR_128 //`define SPI_MAX_CHAR_64 -`define SPI_MAX_CHAR_32 +//`define SPI_MAX_CHAR_32 //`define SPI_MAX_CHAR_24 //`define SPI_MAX_CHAR_16 //`define SPI_MAX_CHAR_8 -- cgit v1.2.3 From f64f1b5c86c605b7c769bbedd565e356d08e925d Mon Sep 17 00:00:00 2001 From: Matt Ettus Date: Wed, 10 Nov 2010 17:24:29 -0800 Subject: reverting part of the reversion of the spi settings. --- usrp2/opencores/spi/rtl/verilog/spi_defines.v | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/usrp2/opencores/spi/rtl/verilog/spi_defines.v b/usrp2/opencores/spi/rtl/verilog/spi_defines.v index 86c301886..3e4dd0e3c 100644 --- a/usrp2/opencores/spi/rtl/verilog/spi_defines.v +++ b/usrp2/opencores/spi/rtl/verilog/spi_defines.v @@ -43,8 +43,8 @@ // low frequency of system clock this can be reduced. // Use SPI_DIVIDER_LEN for fine tuning theexact number. // -//`define SPI_DIVIDER_LEN_8 -`define SPI_DIVIDER_LEN_16 +`define SPI_DIVIDER_LEN_8 +//`define SPI_DIVIDER_LEN_16 //`define SPI_DIVIDER_LEN_24 //`define SPI_DIVIDER_LEN_32 -- cgit v1.2.3 From f9db9f4eed98a7538d73b5463e762441198526c1 Mon Sep 17 00:00:00 2001 From: Matt Ettus Date: Wed, 14 Jul 2010 16:46:01 -0700 Subject: moved forward from the old branch --- usrp2/extramfifo/fifo_extram.v | 188 +++++++++++++ usrp2/extramfifo/fifo_extram36.v | 47 ++++ usrp2/extramfifo/fifo_extram36_tb.build | 1 + usrp2/extramfifo/fifo_extram36_tb.v | 475 ++++++++++++++++++++++++++++++++ usrp2/extramfifo/fifo_extram_tb.build | 1 + usrp2/extramfifo/fifo_extram_tb.v | 134 +++++++++ usrp2/fifo/fifo18_to_fifo36.v | 20 ++ usrp2/fifo/fifo_2clock_cascade.v | 14 +- 8 files changed, 876 insertions(+), 4 deletions(-) create mode 100644 usrp2/extramfifo/fifo_extram.v create mode 100644 usrp2/extramfifo/fifo_extram36.v create mode 100644 usrp2/extramfifo/fifo_extram36_tb.build create mode 100644 usrp2/extramfifo/fifo_extram36_tb.v create mode 100644 usrp2/extramfifo/fifo_extram_tb.build create mode 100644 usrp2/extramfifo/fifo_extram_tb.v create mode 100644 usrp2/fifo/fifo18_to_fifo36.v diff --git a/usrp2/extramfifo/fifo_extram.v b/usrp2/extramfifo/fifo_extram.v new file mode 100644 index 000000000..4e1f40371 --- /dev/null +++ b/usrp2/extramfifo/fifo_extram.v @@ -0,0 +1,188 @@ + +// Everything on sram_clk + +module fifo_extram + (input reset, input clear, + input [17:0] datain, input src_rdy_i, output dst_rdy_o, output [15:0] space, input [15:0] occ_in, + output [17:0] dataout, output src_rdy_o, input dst_rdy_i, output [15:0] occupied, input [15:0] space_in, + input sram_clk, output [18:0] sram_a, inout [17:0] sram_d, output sram_we, + output [1:0] sram_bw, output sram_adv, output sram_ce, output sram_oe, + output sram_mode, output sram_zz); + + localparam AWIDTH = 19; // 1 MB in x18 + localparam RAMSIZE = ((1< 1); + else + can_store <= (occ_in > 2); + + reg can_retrieve; + always @* + if(empty | ~dst_rdy_i) + can_retrieve <= 0; + else if(do_retr_del == 0) + can_retrieve <= 1; + else if((do_retr_del == 1) || (do_retr_del == 2)) + can_retrieve <= (space_in > 1); + else + can_retrieve <= (space_in > 2); + + reg [1:0] state; + localparam IDLE_STORE_NEXT = 0; + localparam STORE = 1; + localparam IDLE_RETR_NEXT = 2; + localparam RETRIEVE = 3; + + reg [7:0] countdown; + wire countdown_done = (countdown == 0); + + localparam CYCLE_SIZE = 6; + + assign do_store = can_store & (state == STORE); + assign do_retrieve = can_retrieve & (state == RETRIEVE); + always @(posedge sram_clk) + if(reset) + do_store_del <= 0; + else + do_store_del <= {do_store_del[0],do_store}; + + always @(posedge sram_clk) + if(reset) + do_retr_del <= 0; + else + do_retr_del <= {do_retr_del[0],do_retrieve}; + + always @(posedge sram_clk) + if(reset | clear) + begin + state <= IDLE_STORE_NEXT; + countdown <= 0; + end + else + case(state) + IDLE_STORE_NEXT : + if(can_store) + begin + state <= STORE; + countdown <= CYCLE_SIZE; + end + else if(can_retrieve) + begin + state <= RETRIEVE; + countdown <= CYCLE_SIZE; + end + STORE : + if(~can_store | (can_retrieve & countdown_done)) + state <= IDLE_RETR_NEXT; + else if(~countdown_done) + countdown <= countdown - 1; + IDLE_RETR_NEXT : + if(can_retrieve) + begin + state <= RETRIEVE; + countdown <= CYCLE_SIZE; + end + else if(can_store) + begin + state <= STORE; + countdown <= CYCLE_SIZE; + end + RETRIEVE : + if(~can_retrieve | (can_store & countdown_done)) + state <= IDLE_STORE_NEXT; + else if(~countdown_done) + countdown <= countdown - 1; + endcase // case (state) + + // RAM wires + assign sram_bw = 0; + assign sram_adv = 0; + assign sram_mode = 0; + assign sram_zz = 0; + assign sram_ce = 0; + + assign sram_a = (state==STORE) ? addr_store : addr_retrieve; + assign sram_we = ~do_store; + assign sram_oe = ~do_retr_del[1]; + assign my_oe = do_store_del[1] & sram_oe; + assign sram_d = my_oe ? datain : 18'bz; + + // FIFO wires + assign dataout = sram_d; + assign src_rdy_o = do_retr_del[1]; + assign dst_rdy_o = do_store_del[1]; + +endmodule // fifo_extram + + + //wire have_1 = (fullness == 1); + //wire have_2 = (fullness == 2); + //wire have_atleast_1 = ~empty; + //wire have_atleast_2 = ~(empty | have_1); + //wire have_atleast_3 = ~(empty | have_1 | have_2); + //wire full_minus_1 = (fullness == (RAMSIZE-1)); // 19'h7FE); + //wire full_minus_2 = (fullness == (RAMSIZE-2)); // 19'h7FD); + //wire spacefor_atleast_1 = ~full; + //wire spacefor_atleast_2 = ~(full | full_minus_1); + //wire spacefor_atleast_3 = ~(full | full_minus_1 | full_minus_2); diff --git a/usrp2/extramfifo/fifo_extram36.v b/usrp2/extramfifo/fifo_extram36.v new file mode 100644 index 000000000..29342fdc4 --- /dev/null +++ b/usrp2/extramfifo/fifo_extram36.v @@ -0,0 +1,47 @@ + +// 18 bit interface means we either can't handle errors or can't handle odd lengths +// unless we go to heroic measures + +module fifo_extram36 + (input clk, input reset, input clear, + input [35:0] datain, input src_rdy_i, output dst_rdy_o, output [15:0] space, + output [35:0] dataout, output src_rdy_o, input dst_rdy_i, output [15:0] occupied, + input sram_clk, output [18:0] sram_a, inout [17:0] sram_d, output sram_we, + output [1:0] sram_bw, output sram_adv, output sram_ce, output sram_oe, output sram_mode, + output sram_zz); + + wire [17:0] f18_data_1, f18_data_2, f18_data_3, f18_data_4; + wire f18_src_rdy_1, f18_dst_rdy_1, f18_src_rdy_2, f18_dst_rdy_2; + wire f18_src_rdy_3, f18_dst_rdy_3, f18_src_rdy_4, f18_dst_rdy_4; + + fifo36_to_fifo18 f36_to_f18 + (.clk(clk), .reset(reset), .clear(clear), + .f36_datain(datain), .f36_src_rdy_i(src_rdy_i), .f36_dst_rdy_o(dst_rdy_o), + .f18_dataout(f18_data_1), .f18_src_rdy_o(f18_src_rdy_1), .f18_dst_rdy_i(f18_dst_rdy_1) ); + + wire [15:0] f1_occ, f2_space; + + fifo_2clock_cascade #(.WIDTH(18), .SIZE(4)) fifo_2clock_in + (.wclk(clk), .datain(f18_data_1), .src_rdy_i(f18_src_rdy_1), .dst_rdy_o(f18_dst_rdy_1), .space(), + .rclk(sram_clk), .dataout(f18_data_2), .src_rdy_o(f18_src_rdy_2), .dst_rdy_i(f18_dst_rdy_2), .short_occupied(f1_occ), + .arst(reset) ); + + fifo_extram fifo_extram + (.reset(reset), .clear(clear), + .datain(f18_data_2), .src_rdy_i(f18_src_rdy_2), .dst_rdy_o(f18_dst_rdy_2), .space(), .occ_in(f1_occ), + .dataout(f18_data_3), .src_rdy_o(f18_src_rdy_3), .dst_rdy_i(f18_dst_rdy_3), .occupied(), .space_in(f2_space), + .sram_clk(sram_clk), .sram_a(sram_a), .sram_d(sram_d), .sram_we(sram_we), + .sram_bw(sram_bw), .sram_adv(sram_adv), .sram_ce(sram_ce), .sram_oe(sram_oe), + .sram_mode(sram_mode), .sram_zz(sram_zz)); + + fifo_2clock_cascade #(.WIDTH(18), .SIZE(4)) fifo_2clock_out + (.wclk(sram_clk), .datain(f18_data_3), .src_rdy_i(f18_src_rdy_3), .dst_rdy_o(f18_dst_rdy_3), .short_space(f2_space), + .rclk(clk), .dataout(f18_data_4), .src_rdy_o(f18_src_rdy_4), .dst_rdy_i(f18_dst_rdy_4), .occupied(), + .arst(reset) ); + + fifo18_to_fifo36 f18_to_f36 + (.clk(clk), .reset(reset), .clear(clear), + .f18_datain(f18_data_4), .f18_src_rdy_i(f18_src_rdy_4), .f18_dst_rdy_o(f18_dst_rdy_4), + .f36_dataout(dataout), .f36_src_rdy_o(src_rdy_o), .f36_dst_rdy_i(dst_rdy_i) ); + +endmodule // fifo_extram36 diff --git a/usrp2/extramfifo/fifo_extram36_tb.build b/usrp2/extramfifo/fifo_extram36_tb.build new file mode 100644 index 000000000..699591889 --- /dev/null +++ b/usrp2/extramfifo/fifo_extram36_tb.build @@ -0,0 +1 @@ +iverilog -y ../../models -y ../../models/CY7C1356C -y . -y ../../control_lib/ -y ../../coregen -y /opt/Xilinx/10.1/ISE/verilog/src/XilinxCoreLib -y /opt/Xilinx/10.1/ISE/verilog/src/unisims/ -o fifo_extram36_tb fifo_extram36_tb.v diff --git a/usrp2/extramfifo/fifo_extram36_tb.v b/usrp2/extramfifo/fifo_extram36_tb.v new file mode 100644 index 000000000..f28c35e4f --- /dev/null +++ b/usrp2/extramfifo/fifo_extram36_tb.v @@ -0,0 +1,475 @@ +`timescale 1ns/1ns + +module fifo_extram36_tb(); + + reg clk = 0; + reg sram_clk = 0; + reg rst = 1; + reg clear = 0; + + reg Verbose = 0; // + integer ErrorCount = 0; + + initial #1000 rst = 0; +// always #125 clk = ~clk; + task task_CLK; + reg [7:0] ran; + begin + while (1) begin + ran = $random; + if (ran[1]) + #62 clk = ~clk; + else + #63 clk = !clk; + end + end + endtask // task_CLK + initial task_CLK; + +// always #100 sram_clk = ~sram_clk; + task task_SSRAM_clk; + reg [7:0] ran; + begin + while (1) begin + ran = $random; + if (ran[0]) + #49 sram_clk = ~sram_clk; + else + #51 sram_clk = ~sram_clk; + end + end + endtask // task_SSRAM_clk + initial task_SSRAM_clk; + + reg [31:0] f36_data = 32'hX; + reg [1:0] f36_occ = 0; + reg f36_sof = 0, f36_eof = 0; + + wire [35:0] f36_in = {1'b0,f36_occ,f36_eof,f36_sof,f36_data}; + reg src_rdy_f36i = 0; + wire dst_rdy_f36i; + + wire [35:0] f36_out; + wire src_rdy_f36o; + reg dst_rdy_f36o = 0; + + wire [17:0] sram_d; + wire [18:0] sram_a; + wire [1:0] sram_bw; + wire sram_we, sram_adv, sram_ce, sram_oe, sram_mode, sram_zz; + + reg [31:0] ScoreBoard [524288:0]; + reg [18:0] put_index = 0; + reg [18:0] get_index = 0; + +// integer put_index = 0; +// integer get_index = 0; + + wire [15:0] DUT_space, DUT_occupied; + + fifo_extram36 fifo_extram36 + (.clk(clk), .reset(rst), .clear(clear), + .datain(f36_in), .src_rdy_i(src_rdy_f36i), .dst_rdy_o(dst_rdy_f36i), .space(DUT_space), + .dataout(f36_out), .src_rdy_o(src_rdy_f36o), .dst_rdy_i(dst_rdy_f36o), .occupied(DUT_occupied), + .sram_clk(sram_clk), .sram_a(sram_a), .sram_d(sram_d), .sram_we(sram_we), + .sram_bw(sram_bw), .sram_adv(sram_adv), .sram_ce(sram_ce), .sram_oe(sram_oe), + .sram_mode(sram_mode), .sram_zz(sram_zz)); + +`define idt 1 +`ifdef idt + wire [15:0] dummy16; + wire [1:0] dummy2; + + idt71v65603s150 + ram_model(.A(sram_a[17:0]), + .adv_ld_(sram_adv), // advance (high) / load (low) + .bw1_(0), .bw2_(0), .bw3_(0), .bw4_(0), // byte write enables (low) + .ce1_(0), .ce2(1), .ce2_(0), // chip enables + .cen_(sram_ce), // clock enable (low) + .clk(sram_clk), // clock + .IO({dummy16,sram_d[15:0]}), + .IOP({dummy2,sram_d[17:16]}), // data bus + .lbo_(sram_mode), // linear burst order (low) + .oe_(sram_oe), // output enable (low) + .r_w_(sram_we)); // read (high) / write (low) +`else + cy1356 ram_model(.d(sram_d),.clk(~sram_clk),.a(sram_a), + .bws(2'b00),.we_b(sram_we),.adv_lb(sram_adv), + .ce1b(0),.ce2(1),.ce3b(0), + .oeb(sram_oe),.cenb(sram_ce),.mode(sram_mode) ); +`endif + + task task_SSRAMMonitor; + reg last_mode; + reg last_clock; + reg last_load; + reg [18:0] sram_addr; + + begin + last_mode = 1'bX; + last_clock = 1'bX; + last_load = 1'bX; + + @ (posedge Verbose); + $dumpvars(0,fifo_extram36_tb); + + $display("%t:%m\t*** Task Started",$time); + while (1) @ (posedge sram_clk) begin + if (sram_mode !== last_mode) begin + $display("%t:%m\tSSRAM mode: %b",$time,sram_mode); + last_mode = sram_mode; + end + if (sram_adv !== last_load) begin + $display("%t:%m\tSSRAM adv/load: %b",$time,sram_adv); + last_load = sram_adv; + end + if (sram_ce !== last_clock) begin + $display("%t:%m\tSSRAM clock enable: %b",$time,sram_ce); + last_clock = sram_ce; + end + if (sram_ce == 1'b0) begin + if (sram_adv == 1'b0) begin +// $display("%t:%m\tSSRAM Address Load A=%h",$time,sram_a); + sram_addr = sram_a; + end else begin + sram_addr = sram_addr + 1; + end + if (sram_oe == 1'b0) begin + $display("%t:%m\tSSRAM Read Cycle A=%h(%h), D=%o",$time,sram_addr-2,sram_a,sram_d); + end + if (sram_we == 1'b0) begin + $display("%t:%m\tSSRAM Write Cycle A=%h(%h), D=%o",$time,sram_addr-2,sram_a,sram_d); + end + if ((sram_we == 1'b0) && (sram_oe == 1'b0)) begin + $display("%t:%m\t*** ERROR: _oe and _we both active",$time); + end + + end // if (sram_ce == 1'b0) + + end // always @ (posedge sram_clk) + end + endtask // task_SSRAMMonitor + + task ReadFromFIFO36; + begin + $display("%t: Read from FIFO36",$time); + #1 dst_rdy_f36o <= 1; + while(1) + begin + while(~src_rdy_f36o) + @(posedge clk); + $display("%t: Read: %h>",$time,f36_out); + @(posedge clk); + end + end + endtask // ReadFromFIFO36 + + initial dst_rdy_f36o = 0; + + task task_ReadFIFO36; + reg [7:0] ran; + begin + $display("%t:%m\t*** Task Started",$time); + while (1) begin + // Read on one of four clocks + #5 dst_rdy_f36o <= 1; + @(posedge clk); + if (src_rdy_f36o) begin + if (f36_out[31:0] != ScoreBoard[get_index]) begin + $display("%t:%m\tFIFO Get Error: R:%h, E:%h (%h)",$time,f36_out[31:0],ScoreBoard[get_index],get_index); + ErrorCount = ErrorCount + 1; + end else begin + if (Verbose) + $display("%t:%m\t(%5h) %o>",$time,get_index,f36_out); + end + get_index = get_index+1; + end else begin + if (ErrorCount >= 192) + $finish; + end // else: !if(src_rdy_f36o) + + #10; + ran = $random; + if (ran[2:0] != 3'b000) begin + dst_rdy_f36o <= 0; + if (ran[2] != 1'b0) begin + @(posedge clk); + @(posedge clk); + @(posedge clk); + end + if (ran[1] != 1'b0) begin + @(posedge clk); + @(posedge clk); + end + if (ran[0] != 1'b0) begin + @(posedge clk); + end + end + end // while (1) + end + + endtask // task_ReadFIFO36 + + + reg [15:0] count; + + task PutPacketInFIFO36; + input [31:0] data_start; + input [31:0] data_len; + + begin + count = 4; + src_rdy_f36i = 1; + f36_data = data_start; + f36_sof = 1; + f36_eof = 0; + f36_occ = 0; + + $display("%t: Put Packet in FIFO36",$time); + while(~dst_rdy_f36i) + #1; //@(posedge clk); + @(posedge clk); + + $display("%t: <%h PPI_FIFO36: Entered First Line",$time,f36_data); + f36_sof <= 0; + while(count+4 < data_len) + begin + f36_data = f36_data + 32'h01010101; + count = count + 4; + while(~dst_rdy_f36i) + #1; //@(posedge clk); + @(posedge clk); + $display("%t: <%h PPI_FIFO36: Entered New Line",$time,f36_data); + end + f36_data <= f36_data + 32'h01010101; + f36_eof <= 1; + if(count + 4 == data_len) + f36_occ <= 0; + else if(count + 3 == data_len) + f36_occ <= 3; + else if(count + 2 == data_len) + f36_occ <= 2; + else + f36_occ <= 1; + while(~dst_rdy_f36i) + @(posedge clk); + @(posedge clk); + f36_occ <= 0; + f36_eof <= 0; + f36_data <= 0; + src_rdy_f36i <= 0; + $display("%t: <%h PPI_FIFO36: Entered Last Line",$time,f36_data); + end + endtask // PutPacketInFIFO36 + + task task_WriteFIFO36; + integer i; + reg [7:0] ran; + + begin + f36_data = 32'bX; + if (rst != 1'b0) + @ (negedge rst); + $display("%t:%m\t*** Task Started",$time); + #10; + src_rdy_f36i = 1; + f36_data = $random; + for (i=0; i<64; i=i+0 ) begin + @ (posedge clk) ; + if (dst_rdy_f36i) begin + if (Verbose) + $display("%t:%m\t(%5h) %o<",$time,put_index,f36_in); + ScoreBoard[put_index] = f36_in[31:0]; + put_index = put_index + 1; + #5; + f36_data = $random; + i = i + 1; + end + ran = $random; + if (ran[1:0] != 2'b00) begin + @ (negedge clk); + src_rdy_f36i = 0; + #5; + @ (negedge clk) ; + src_rdy_f36i = 1; + end + end + src_rdy_f36i = 0; + f36_data = 32'bX; +//* if (put_index > 19'h3ff00) +//* Verbose = 1'b1; + + end + endtask // task_WriteFIFO36 + + initial $dumpfile("fifo_extram36_tb.vcd"); +// initial $dumpvars(0,fifo_extram36_tb); + initial $timeformat(-9, 0, " ns", 10); + initial task_SSRAMMonitor; + + initial + begin + @(negedge rst); + #40000; + @(posedge clk); + @(posedge clk); + @(posedge clk); + @(posedge clk); +// ReadFromFIFO36; + task_ReadFIFO36; + + end + + integer i; + + initial + begin + @(negedge rst); + @(posedge clk); + @(posedge clk); + @(posedge clk); + task_WriteFIFO36; + @(posedge clk); + @(posedge clk); + @(posedge clk); +// PutPacketInFIFO36(32'hA0B0C0D0,12); + @(posedge clk); + @(posedge clk); + #10000; + @(posedge clk); +// PutPacketInFIFO36(32'hE0F0A0B0,36); + @(posedge clk); + @(posedge clk); + task_WriteFIFO36; + @(posedge clk); + @(posedge clk); + #10000; + @(posedge clk); + @(posedge clk); + task_WriteFIFO36; +// @(posedge clk); +// #30000; +// @(posedge clk); +// @(posedge clk); + task_WriteFIFO36; +// @(posedge clk); +// #30000; +// @(posedge clk); +// @(posedge clk); + task_WriteFIFO36; +// @(posedge clk); +// #30000; +// @(posedge clk); +// @(posedge clk); + task_WriteFIFO36; + @(posedge clk); + #10000; + @(posedge clk); + @(posedge clk); + task_WriteFIFO36; + for (i=0; i<8192; i = i+1) begin + @(posedge clk); + #10000; + @(posedge clk); + @(posedge clk); + task_WriteFIFO36; + @(posedge clk); + end + +// $dumpvars(0,fifo_extram36_tb); + @(posedge clk); + task_WriteFIFO36; + @(posedge clk); + + #100000000; + $finish; + + end + */ + + initial + begin + @(negedge rst); + f36_occ <= 0; + repeat (100) + @(posedge clk); + src_rdy_f36i <= 1; + f36_data <= 32'h10203040; + f36_sof <= 1; + f36_eof <= 0; + @(posedge clk); + @(posedge clk); + src_rdy_f36i <= 1; + f36_data <= f36_data + 32'h01010101; + f36_sof <= 0; + f36_eof <= 0; + @(posedge clk); + @(posedge clk); + src_rdy_f36i <= 1; + f36_data <= f36_data + 32'h01010101; + f36_sof <= 0; + f36_eof <= 0; + @(posedge clk); + @(posedge clk); + src_rdy_f36i <= 1; + f36_data <= f36_data + 32'h01010101; + f36_sof <= 0; + f36_eof <= 0; + @(posedge clk); + @(posedge clk); + src_rdy_f36i <= 1; + f36_data <= f36_data + 32'h01010101; + f36_sof <= 0; + f36_eof <= 0; + @(posedge clk); + @(posedge clk); + src_rdy_f36i <= 1; + f36_data <= f36_data + 32'h01010101; + f36_sof <= 0; + f36_eof <= 0; + @(posedge clk); + @(posedge clk); + src_rdy_f36i <= 1; + f36_data <= f36_data + 32'h01010101; + f36_sof <= 0; + f36_eof <= 0; + @(posedge clk); + @(posedge clk); + src_rdy_f36i <= 1; + f36_data <= f36_data + 32'h01010101; + f36_sof <= 0; + f36_eof <= 0; + @(posedge clk); + @(posedge clk); + src_rdy_f36i <= 1; + f36_data <= f36_data + 32'h01010101; + f36_sof <= 0; + f36_eof <= 0; + @(posedge clk); + @(posedge clk); + src_rdy_f36i <= 1; + f36_data <= f36_data + 32'h01010101; + f36_sof <= 0; + f36_eof <= 0; + @(posedge clk); + @(posedge clk); + src_rdy_f36i <= 1; + f36_data <= f36_data + 32'h01010101; + f36_sof <= 0; + f36_eof <= 0; + @(posedge clk); + @(posedge clk); + src_rdy_f36i <= 1; + f36_data <= 32'h1F2F3F4F; + f36_sof <= 0; + f36_eof <= 1; + @(posedge clk); + @(posedge clk); + src_rdy_f36i <= 0; + + + + end + +// initial #500000 $finish; +endmodule // fifo_extram_tb diff --git a/usrp2/extramfifo/fifo_extram_tb.build b/usrp2/extramfifo/fifo_extram_tb.build new file mode 100644 index 000000000..e87217e5c --- /dev/null +++ b/usrp2/extramfifo/fifo_extram_tb.build @@ -0,0 +1 @@ +iverilog -y ../../models -y ../../models/CY7C1356C -y . -y ../../control_lib/ -y ../../coregen -y /opt/Xilinx/10.1/ISE/verilog/src/XilinxCoreLib -y /opt/Xilinx/10.1/ISE/verilog/src/unisims/ -o fifo_extram_tb fifo_extram_tb.v diff --git a/usrp2/extramfifo/fifo_extram_tb.v b/usrp2/extramfifo/fifo_extram_tb.v new file mode 100644 index 000000000..73550d9ca --- /dev/null +++ b/usrp2/extramfifo/fifo_extram_tb.v @@ -0,0 +1,134 @@ +module fifo_extram_tb(); + + reg clk = 0; + reg sram_clk = 0; + reg reset = 1; + reg clear = 0; + + initial #1000 reset = 0; + always #125 clk = ~clk; + always #100 sram_clk = ~sram_clk; + + reg [15:0] f18_data = 0; + reg f18_sof = 0, f18_eof = 0; + + wire [17:0] f18_in = {f18_eof,f18_sof,f18_data}; + reg src_rdy_f18i = 0; + wire dst_rdy_f18i; + + wire [17:0] f18_out; + wire src_rdy_f18o; + reg dst_rdy_f18o = 0; + + wire [17:0] f18_int; + wire src_rdy_f18int, dst_rdy_f18int; + + wire [17:0] sram_d; + wire [18:0] sram_a; + wire [1:0] sram_bw; + wire sram_we, sram_adv, sram_ce, sram_oe, sram_mode, sram_zz; + wire [15:0] f1_occ; + + fifo_short #(.WIDTH(18)) fifo_short + (.clk(sram_clk), .reset(reset), .clear(clear), + .datain(f18_in), .src_rdy_i(src_rdy_f18i), .dst_rdy_o(dst_rdy_f18i), .space(), + .dataout(f18_int), .src_rdy_o(src_rdy_f18int), .dst_rdy_i(dst_rdy_f18int), .occupied(f1_occ[4:0]) ); + + assign f1_occ[15:5] = 0; + + fifo_extram fifo_extram + (.reset(reset), .clear(clear), + .datain(f18_int), .src_rdy_i(src_rdy_f18int), .dst_rdy_o(dst_rdy_f18int), .space(), .occ_in(f1_occ), + .dataout(f18_out), .src_rdy_o(src_rdy_f18o), .dst_rdy_i(dst_rdy_f18o), .occupied(), .space_in(7), + .sram_clk(sram_clk), .sram_a(sram_a), .sram_d(sram_d), .sram_we(sram_we), + .sram_bw(sram_bw), .sram_adv(sram_adv), .sram_ce(sram_ce), .sram_oe(sram_oe), + .sram_mode(sram_mode), .sram_zz(sram_zz)); + +`define idt 1 +`ifdef idt + wire [15:0] dummy16; + wire [1:0] dummy2; + + idt71v65603s150 + ram_model(.A(sram_a[17:0]), + .adv_ld_(sram_adv), // advance (high) / load (low) + .bw1_(0), .bw2_(0), .bw3_(0), .bw4_(0), // byte write enables (low) + .ce1_(0), .ce2(1), .ce2_(0), // chip enables + .cen_(sram_ce), // clock enable (low) + .clk(sram_clk), // clock + .IO({dummy16,sram_d[15:0]}), + .IOP({dummy2,sram_d[17:16]}), // data bus + .lbo_(sram_mode), // linear burst order (low) + .oe_(sram_oe), // output enable (low) + .r_w_(sram_we)); // read (high) / write (low) +`else + cy1356 ram_model(.d(sram_d),.clk(sram_clk),.a(sram_a), + .bws(2'b00),.we_b(sram_we),.adv_lb(sram_adv), + .ce1b(0),.ce2(1),.ce3b(0), + .oeb(sram_oe),.cenb(sram_ce),.mode(sram_mode) ); +`endif // !`ifdef idt + + always @(posedge sram_clk) + if(dst_rdy_f18o & src_rdy_f18o) + $display("Read: %h",f18_out); + + always @(posedge sram_clk) + if(dst_rdy_f18int & src_rdy_f18int) + $display("Write: %h",f18_int); + + initial $dumpfile("fifo_extram_tb.vcd"); + initial $dumpvars(0,fifo_extram_tb); + + task SendPkt; + input [15:0] data_start; + input [31:0] data_len; + begin + @(posedge sram_clk); + f18_data = data_start; + f18_sof = 1; + f18_eof = 0; + src_rdy_f18i = 1; + while(~dst_rdy_f18i) + #1; + @(posedge sram_clk); + repeat(data_len - 2) + begin + f18_data = f18_data + 16'h0101; + f18_sof = 0; + while(~dst_rdy_f18i) + @(posedge sram_clk); + + @(posedge sram_clk); + end + f18_data = f18_data + 16'h0101; + f18_eof = 1; + while(~dst_rdy_f18i) + #1; + @(posedge sram_clk); + src_rdy_f18i = 0; + f18_data = 0; + f18_eof = 0; + end + endtask // SendPkt + + initial + begin + @(negedge reset); + @(posedge sram_clk); + @(posedge sram_clk); + #10000; + @(posedge sram_clk); + SendPkt(16'hA0B0, 100); + #10000; + //SendPkt(16'hC0D0, 220); + end + + initial + begin + #20000; + dst_rdy_f18o = 1; + end + + initial #200000 $finish; +endmodule // fifo_extram_tb + diff --git a/usrp2/fifo/fifo18_to_fifo36.v b/usrp2/fifo/fifo18_to_fifo36.v new file mode 100644 index 000000000..25bb215a1 --- /dev/null +++ b/usrp2/fifo/fifo18_to_fifo36.v @@ -0,0 +1,20 @@ + +// For now just assume FIFO18 is same as FIFO19 without occupancy bit + +module fifo18_to_fifo36 + (input clk, input reset, input clear, + input [17:0] f18_datain, + input f18_src_rdy_i, + output f18_dst_rdy_o, + + output [35:0] f36_dataout, + output f36_src_rdy_o, + input f36_dst_rdy_i + ); + + fifo19_to_fifo36 fifo19_to_fifo36 + (.clk(clk), .reset(reset), .clear(clear), + .f19_datain({1'b0,f18_datain}), .f19_src_rdy_i(f18_src_rdy_i), .f19_dst_rdy_o(f18_dst_rdy_o), + .f36_dataout(f36_dataout), .f36_src_rdy_o(f36_src_rdy_o), .f36_dst_rdy_i(f36_dst_rdy_i) ); + +endmodule // fifo18_to_fifo36 diff --git a/usrp2/fifo/fifo_2clock_cascade.v b/usrp2/fifo/fifo_2clock_cascade.v index 5ce726977..4e8c244c2 100644 --- a/usrp2/fifo/fifo_2clock_cascade.v +++ b/usrp2/fifo/fifo_2clock_cascade.v @@ -1,8 +1,10 @@ module fifo_2clock_cascade #(parameter WIDTH=32, SIZE=9) - (input wclk, input [WIDTH-1:0] datain, input src_rdy_i, output dst_rdy_o, output [15:0] space, - input rclk, output [WIDTH-1:0] dataout, output src_rdy_o, input dst_rdy_i, output [15:0] occupied, + (input wclk, input [WIDTH-1:0] datain, input src_rdy_i, output dst_rdy_o, + output [15:0] space, output [15:0] short_space, + input rclk, output [WIDTH-1:0] dataout, output src_rdy_o, input dst_rdy_i, + output [15:0] occupied, output [15:0] short_occupied, input arst); wire [WIDTH-1:0] data_int1, data_int2; @@ -29,7 +31,11 @@ module fifo_2clock_cascade .space(s2_space), .occupied(s2_occupied)); // Be conservative -- Only advertise space from input side of fifo, occupied from output side - assign space = {11'b0,s1_space} + l_space; - assign occupied = {11'b0,s2_occupied} + l_occupied; + assign space = {11'b0,s1_space} + l_space; + assign occupied = {11'b0,s2_occupied} + l_occupied; + + // For the fifo_extram, we only want to know the immediately adjacent space + assign short_space = {11'b0,s1_space}; + assign short_occupied = {11'b0,s2_occupied}; endmodule // fifo_2clock_cascade -- cgit v1.2.3 From d0742cf2a5285ed08d49e16948d8227414247f6a Mon Sep 17 00:00:00 2001 From: Matt Ettus Date: Wed, 14 Jul 2010 17:01:25 -0700 Subject: get it to build --- usrp2/extramfifo/.gitignore | 3 + usrp2/extramfifo/fifo_extram36_tb.build | 2 +- usrp2/extramfifo/fifo_extram36_tb.v | 6 +- usrp2/extramfifo/fifo_extram_tb.build | 2 +- usrp2/models/idt71v65603s150.v | 301 ++++++++++++++++++++++++++++++++ 5 files changed, 309 insertions(+), 5 deletions(-) create mode 100644 usrp2/extramfifo/.gitignore mode change 100644 => 100755 usrp2/extramfifo/fifo_extram36_tb.build mode change 100644 => 100755 usrp2/extramfifo/fifo_extram_tb.build create mode 100755 usrp2/models/idt71v65603s150.v diff --git a/usrp2/extramfifo/.gitignore b/usrp2/extramfifo/.gitignore new file mode 100644 index 000000000..94bbf6dcc --- /dev/null +++ b/usrp2/extramfifo/.gitignore @@ -0,0 +1,3 @@ +fifo_extram36_tb +fifo_extram_tb +*.vcd diff --git a/usrp2/extramfifo/fifo_extram36_tb.build b/usrp2/extramfifo/fifo_extram36_tb.build old mode 100644 new mode 100755 index 699591889..ac9369758 --- a/usrp2/extramfifo/fifo_extram36_tb.build +++ b/usrp2/extramfifo/fifo_extram36_tb.build @@ -1 +1 @@ -iverilog -y ../../models -y ../../models/CY7C1356C -y . -y ../../control_lib/ -y ../../coregen -y /opt/Xilinx/10.1/ISE/verilog/src/XilinxCoreLib -y /opt/Xilinx/10.1/ISE/verilog/src/unisims/ -o fifo_extram36_tb fifo_extram36_tb.v +iverilog -y ../models -y . -y ../control_lib/ -y ../coregen -y ../fifo -y /opt/Xilinx/10.1/ISE/verilog/src/XilinxCoreLib -y /opt/Xilinx/10.1/ISE/verilog/src/unisims/ -o fifo_extram36_tb fifo_extram36_tb.v diff --git a/usrp2/extramfifo/fifo_extram36_tb.v b/usrp2/extramfifo/fifo_extram36_tb.v index f28c35e4f..e5f8cef4c 100644 --- a/usrp2/extramfifo/fifo_extram36_tb.v +++ b/usrp2/extramfifo/fifo_extram36_tb.v @@ -296,8 +296,8 @@ module fifo_extram36_tb(); end src_rdy_f36i = 0; f36_data = 32'bX; -//* if (put_index > 19'h3ff00) -//* Verbose = 1'b1; +// if (put_index > 19'h3ff00) +// Verbose = 1'b1; end endtask // task_WriteFIFO36 @@ -385,7 +385,7 @@ module fifo_extram36_tb(); $finish; end - */ + initial begin diff --git a/usrp2/extramfifo/fifo_extram_tb.build b/usrp2/extramfifo/fifo_extram_tb.build old mode 100644 new mode 100755 index e87217e5c..5607c8691 --- a/usrp2/extramfifo/fifo_extram_tb.build +++ b/usrp2/extramfifo/fifo_extram_tb.build @@ -1 +1 @@ -iverilog -y ../../models -y ../../models/CY7C1356C -y . -y ../../control_lib/ -y ../../coregen -y /opt/Xilinx/10.1/ISE/verilog/src/XilinxCoreLib -y /opt/Xilinx/10.1/ISE/verilog/src/unisims/ -o fifo_extram_tb fifo_extram_tb.v +iverilog -y ../models -y . -y ../control_lib/ -y ../coregen -y ../fifo -y /opt/Xilinx/10.1/ISE/verilog/src/XilinxCoreLib -y /opt/Xilinx/10.1/ISE/verilog/src/unisims/ -o fifo_extram_tb fifo_extram_tb.v diff --git a/usrp2/models/idt71v65603s150.v b/usrp2/models/idt71v65603s150.v new file mode 100755 index 000000000..457dfa6dd --- /dev/null +++ b/usrp2/models/idt71v65603s150.v @@ -0,0 +1,301 @@ +/******************************************************************************* + * + * File Name : idt71v65603s150.v + * Product : IDT71V65603 + * Function : 256K x 36 pipeline ZBT Static RAM + * Simulation Tool/Version : Verilog-XL 2.5 + * Date : 07/19/00 + * + * Copyright 1999 Integrated Device Technology, Inc. + * + * Revision Notes: 07/19/00 Rev00 + * + ******************************************************************************/ +/******************************************************************************* + * Module Name: idt71v65603s150 + * + * Notes : This model is believed to be functionally + * accurate. Please direct any inquiries to + * IDT SRAM Applications at: sramhelp@idt.com + * + *******************************************************************************/ + + /*************************************************************** + * + * Integrated Device Technology, Inc. ("IDT") hereby grants the + * user of this Verilog/VCS model a non-exclusive, nontransferable + * license to use this Verilog/VCS model under the following terms. + * The user is granted this license only to use the Verilog/VCS + * model and is not granted rights to sell, copy (except as needed + * to run the IBIS model), rent, lease or sub-license the Verilog/VCS + * model in whole or in part, or in modified form to anyone. The User + * may modify the Verilog/VCS model to suit its specific applications, + * but rights to derivative works and such modifications shall belong + * to IDT. + * + * This Verilog/VCS model is provided on an "AS IS" basis and + * IDT makes absolutely no warranty with respect to the information + * contained herein. IDT DISCLAIMS AND CUSTOMER WAIVES ALL + * WARRANTIES, EXPRESS AND IMPLIED, INCLUDING WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE + * ENTIRE RISK AS TO QUALITY AND PERFORMANCE IS WITH THE + * USER ACCORDINGLY, IN NO EVENT SHALL IDT BE LIABLE + * FOR ANY DIRECT OR INDIRECT DAMAGES, WHETHER IN CONTRACT OR + * TORT, INCLUDING ANY LOST PROFITS OR OTHER INCIDENTAL, + * CONSEQUENTIAL, EXEMPLARY, OR PUNITIVE DAMAGES ARISING OUT OF + * THE USE OR APPLICATION OF THE VERILOG/VCS model. Further, + * IDT reserves the right to make changes without notice to any + * product herein to improve reliability, function, or design. + * IDT does not convey any license under patent rights or + * any other intellectual property rights, including those of + * third parties. IDT is not obligated to provide maintenance + * or support for the licensed Verilog/VCS model. + * + ***************************************************************/ + + `timescale 1ns/100ps + +module idt71v65603s150 (A, + adv_ld_, // advance (high) / load (low) + bw1_, bw2_, bw3_, bw4_, // byte write enables (low) + ce1_, ce2, ce2_, // chip enables + cen_, // clock enable (low) + clk, // clock + IO, IOP, // data bus + lbo_, // linear burst order (low) + oe_, // output enable (low) + r_w_); // read (high) / write (low) + +initial +begin + $write("\n********************************************************\n"); + $write(" idt71v65603s150, 256K x 36 Pipelined burst ZBT SRAM \n"); + $write(" Rev: 00 July 2000 \n"); + $write(" copyright 1997,1998,1999,2000 by IDT, Inc. \n"); + $write("********************************************************\n\n"); +end + +input [17:0] A; +inout [31:0] IO; +inout [4:1] IOP; +input adv_ld_, bw1_, bw2_, bw3_, bw4_, ce1_, ce2, ce2_, + cen_, clk, lbo_, oe_, r_w_; + + +//internal registers for data, address, etc +reg [8:0] mem1[0:262143]; //memory array +reg [8:0] mem2[0:262143]; //memory array +reg [8:0] mem3[0:262143]; //memory array +reg [8:0] mem4[0:262143]; //memory array + +reg [35:0] dout; +reg [17:0] addr_a, + addr_b; +reg wren_a, wren_b; +reg cs_a, cs_b; +reg bw_a1, bw_b1; +reg bw_a2, bw_b2; +reg bw_a3, bw_b3; +reg bw_a4, bw_b4; +reg [1:0] brst_cnt; + +wire[35:0] data_out; +wire doe; +wire cs = (~ce1_ & ce2 & ~ce2_); +wire baddr0, baddr1; + + +parameter regdelay = 0.2; +parameter outdly = 0.2; + +specify +specparam +//Clock Parameters + tCYC = 6.7, //clock cycle time + tCH = 2.0, //clock high time + tCL = 2.0, //clock low time + +//Output Parameters + tCD = 3.8, //clk to data valid + tCLZ = 1.5, //clk to output Low-Z + tCHZ = 3.0, //clk to data Hi-Z + tOE = 3.8, //OE to output valid + tOLZ = 0.0, //OE to output Hi-Z + tOHZ = 3.8, //OE to output Hi-Z + +//Set up times + tSE = 1.5, //clock enable set-up + tSA = 1.5, //address set-up + tSD = 1.5, //data set-up + tSW = 1.5, //Read/Write set-up + tSADV = 1.5, //Advance/Load set-up + tSC = 1.5, //Chip enable set-up + tSB = 1.5, //Byte write enable set-up + +//Hold times + tHE = 0.5, //clock enable hold + tHA = 0.5, //address hold + tHD = 0.5, //data hold + tHW = 0.5, //Read/Write hold + tHADV = 0.5, //Advance/Load hold + tHC = 0.5, //Chip enable hold + tHB = 0.5; //Byte write enable hold + + + (oe_ *> IO) = (tOE,tOE,tOHZ,tOLZ,tOHZ,tOLZ); //(01,10,0z,z1,1z,z0) + (clk *> IO) = (tCD,tCD,tCHZ,tCLZ,tCHZ,tCLZ); //(01,10,0z,z1,1z,z0) + + (oe_ *> IOP) = (tOE,tOE,tOHZ,tOLZ,tOHZ,tOLZ); //(01,10,0z,z1,1z,z0) + (clk *> IOP) = (tCD,tCD,tCHZ,tCLZ,tCHZ,tCLZ); //(01,10,0z,z1,1z,z0) + +//timing checks + + $period(posedge clk, tCYC ); + $width (posedge clk, tCH ); + $width (negedge clk, tCL ); + + + $setuphold(posedge clk, A, tSA, tHA); + $setuphold(posedge clk, IO, tSD, tHD); + $setuphold(posedge clk, IOP, tSD, tHD); + $setuphold(posedge clk, adv_ld_, tSADV, tHADV); + $setuphold(posedge clk, bw1_, tSB, tHB); + $setuphold(posedge clk, bw2_, tSB, tHB); + $setuphold(posedge clk, bw3_, tSB, tHB); + $setuphold(posedge clk, bw4_, tSB, tHB); + $setuphold(posedge clk, ce1_, tSC, tHC); + $setuphold(posedge clk, ce2, tSC, tHC); + $setuphold(posedge clk, ce2_, tSC, tHC); + $setuphold(posedge clk, cen_, tSE, tHE); + $setuphold(posedge clk, r_w_, tSW, tHW); + +endspecify + +initial begin + cs_a = 0; + cs_b = 0; +end + + +///////////////////////////////////////////////////////////////////////// +//input registers +//-------------------- +always @(posedge clk) +begin + if ( ~cen_ & ~adv_ld_ ) cs_a <= #regdelay cs; + if ( ~cen_ ) cs_b <= #regdelay cs_a; + + if ( ~cen_ & ~adv_ld_ ) wren_a <= #regdelay (cs & ~r_w_); + if ( ~cen_ ) wren_b <= #regdelay wren_a; + + if ( ~cen_ ) bw_a1 <= #regdelay ~bw1_; + if ( ~cen_ ) bw_a2 <= #regdelay ~bw2_; + if ( ~cen_ ) bw_a3 <= #regdelay ~bw3_; + if ( ~cen_ ) bw_a4 <= #regdelay ~bw4_; + + if ( ~cen_ ) bw_b1 <= #regdelay bw_a1; + if ( ~cen_ ) bw_b2 <= #regdelay bw_a2; + if ( ~cen_ ) bw_b3 <= #regdelay bw_a3; + if ( ~cen_ ) bw_b4 <= #regdelay bw_a4; + + if ( ~cen_ & ~adv_ld_ ) addr_a[17:0] <= #regdelay A[17:0]; + if ( ~cen_ ) addr_b[17:0] <= #regdelay {addr_a[17:2], baddr1, baddr0}; +end + + +///////////////////////////////////////////////////////////////////////// +//burst counter +//-------------------- +always @(posedge clk) +begin + if ( lbo_ & ~cen_ & ~adv_ld_) brst_cnt <= #regdelay 0; + else if (~lbo_ & ~cen_ & ~adv_ld_) brst_cnt <= #regdelay A[1:0]; + else if ( ~cen_ & adv_ld_) brst_cnt <= #regdelay brst_cnt + 1; +end + + +///////////////////////////////////////////////////////////////////////// +//address logic +//-------------------- +assign baddr1 = lbo_ ? (brst_cnt[1] ^ addr_a[1]) : brst_cnt[1]; +assign baddr0 = lbo_ ? (brst_cnt[0] ^ addr_a[0]) : brst_cnt[0]; + + +///////////////////////////////////////////////////////////////////////// +//data output register +//-------------------- +always @(posedge clk) +begin + #regdelay; + #regdelay; + dout[8:0] = mem1[addr_b]; + dout[17:9] = mem2[addr_b]; + dout[26:18] = mem3[addr_b]; + dout[35:27] = mem4[addr_b]; +end + +assign data_out = dout; + + +///////////////////////////////////////////////////////////////////////// +//Output buffers: using a bufif1 has the same effect as... +// +// assign D = doe ? data_out : 36'hz; +// +//It was coded this way to support SPECIFY delays in the specparam section. +//-------------------- +bufif1 #outdly (IO[0],data_out[0],doe); +bufif1 #outdly (IO[1],data_out[1],doe); +bufif1 #outdly (IO[2],data_out[2],doe); +bufif1 #outdly (IO[3],data_out[3],doe); +bufif1 #outdly (IO[4],data_out[4],doe); +bufif1 #outdly (IO[5],data_out[5],doe); +bufif1 #outdly (IO[6],data_out[6],doe); +bufif1 #outdly (IO[7],data_out[7],doe); +bufif1 #outdly (IOP[1],data_out[8],doe); + +bufif1 #outdly (IO[8],data_out[9],doe); +bufif1 #outdly (IO[9],data_out[10],doe); +bufif1 #outdly (IO[10],data_out[11],doe); +bufif1 #outdly (IO[11],data_out[12],doe); +bufif1 #outdly (IO[12],data_out[13],doe); +bufif1 #outdly (IO[13],data_out[14],doe); +bufif1 #outdly (IO[14],data_out[15],doe); +bufif1 #outdly (IO[15],data_out[16],doe); +bufif1 #outdly (IOP[2],data_out[17],doe); + +bufif1 #outdly (IO[16],data_out[18],doe); +bufif1 #outdly (IO[17],data_out[19],doe); +bufif1 #outdly (IO[18],data_out[20],doe); +bufif1 #outdly (IO[19],data_out[21],doe); +bufif1 #outdly (IO[20],data_out[22],doe); +bufif1 #outdly (IO[21],data_out[23],doe); +bufif1 #outdly (IO[22],data_out[24],doe); +bufif1 #outdly (IO[23],data_out[25],doe); +bufif1 #outdly (IOP[3],data_out[26],doe); + +bufif1 #outdly (IO[24],data_out[27],doe); +bufif1 #outdly (IO[25],data_out[28],doe); +bufif1 #outdly (IO[26],data_out[29],doe); +bufif1 #outdly (IO[27],data_out[30],doe); +bufif1 #outdly (IO[28],data_out[31],doe); +bufif1 #outdly (IO[29],data_out[32],doe); +bufif1 #outdly (IO[30],data_out[33],doe); +bufif1 #outdly (IO[31],data_out[34],doe); +bufif1 #outdly (IOP[4],data_out[35],doe); + +assign doe = cs_b & ~wren_b & ~oe_ ; + + +///////////////////////////////////////////////////////////////////////// +// write to ram +//------------- +always @(posedge clk) +begin + if (wren_b & bw_b1 & ~cen_) mem1[addr_b] = {IOP[1], IO[7:0]}; + if (wren_b & bw_b2 & ~cen_) mem2[addr_b] = {IOP[2], IO[15:8]}; + if (wren_b & bw_b3 & ~cen_) mem3[addr_b] = {IOP[3], IO[23:16]}; + if (wren_b & bw_b4 & ~cen_) mem4[addr_b] = {IOP[4], IO[31:24]}; +end + +endmodule -- cgit v1.2.3 From fb73ea172526319803756b985dd3c104881304b1 Mon Sep 17 00:00:00 2001 From: Ian Buckley Date: Thu, 29 Jul 2010 21:25:26 -0700 Subject: Checkpoint checkin. Loopback is running via the external ZBT SRAM...HOWEVER, its not running well, its stable but the data is corrupted sometimes. Not clear if its a logic or AC timing/SI issue yet. --- usrp2/coregen/fifo_xlnx_512x36_2clk_18to36.v | 165 ++++++++++++++ usrp2/coregen/fifo_xlnx_512x36_2clk_18to36.xco | 82 +++++++ usrp2/coregen/fifo_xlnx_512x36_2clk_36to18.v | 165 ++++++++++++++ usrp2/coregen/fifo_xlnx_512x36_2clk_36to18.xco | 82 +++++++ usrp2/extramfifo/Makefile.srcs | 16 ++ usrp2/extramfifo/ext_fifo.v | 120 +++++++++++ usrp2/extramfifo/ext_fifo_tb.cmd | 11 + usrp2/extramfifo/ext_fifo_tb.prj | 9 + usrp2/extramfifo/ext_fifo_tb.sh | 1 + usrp2/extramfifo/ext_fifo_tb.v | 285 +++++++++++++++++++++++++ usrp2/extramfifo/nobl_fifo.v | 264 +++++++++++++++++++++++ usrp2/extramfifo/nobl_if.v | 136 ++++++++++++ usrp2/extramfifo/test_sram_if.v | 171 +++++++++++++++ 13 files changed, 1507 insertions(+) create mode 100644 usrp2/coregen/fifo_xlnx_512x36_2clk_18to36.v create mode 100644 usrp2/coregen/fifo_xlnx_512x36_2clk_18to36.xco create mode 100644 usrp2/coregen/fifo_xlnx_512x36_2clk_36to18.v create mode 100644 usrp2/coregen/fifo_xlnx_512x36_2clk_36to18.xco create mode 100644 usrp2/extramfifo/Makefile.srcs create mode 100644 usrp2/extramfifo/ext_fifo.v create mode 100644 usrp2/extramfifo/ext_fifo_tb.cmd create mode 100644 usrp2/extramfifo/ext_fifo_tb.prj create mode 100644 usrp2/extramfifo/ext_fifo_tb.sh create mode 100644 usrp2/extramfifo/ext_fifo_tb.v create mode 100644 usrp2/extramfifo/nobl_fifo.v create mode 100644 usrp2/extramfifo/nobl_if.v create mode 100644 usrp2/extramfifo/test_sram_if.v diff --git a/usrp2/coregen/fifo_xlnx_512x36_2clk_18to36.v b/usrp2/coregen/fifo_xlnx_512x36_2clk_18to36.v new file mode 100644 index 000000000..1d7a5ca2a --- /dev/null +++ b/usrp2/coregen/fifo_xlnx_512x36_2clk_18to36.v @@ -0,0 +1,165 @@ +/******************************************************************************* +* This file is owned and controlled by Xilinx and must be used * +* solely for design, simulation, implementation and creation of * +* design files limited to Xilinx devices or technologies. Use * +* with non-Xilinx devices or technologies is expressly prohibited * +* and immediately terminates your license. * +* * +* XILINX IS PROVIDING THIS DESIGN, CODE, OR INFORMATION "AS IS" * +* SOLELY FOR USE IN DEVELOPING PROGRAMS AND SOLUTIONS FOR * +* XILINX DEVICES. BY PROVIDING THIS DESIGN, CODE, OR INFORMATION * +* AS ONE POSSIBLE IMPLEMENTATION OF THIS FEATURE, APPLICATION * +* OR STANDARD, XILINX IS MAKING NO REPRESENTATION THAT THIS * +* IMPLEMENTATION IS FREE FROM ANY CLAIMS OF INFRINGEMENT, * +* AND YOU ARE RESPONSIBLE FOR OBTAINING ANY RIGHTS YOU MAY REQUIRE * +* FOR YOUR IMPLEMENTATION. XILINX EXPRESSLY DISCLAIMS ANY * +* WARRANTY WHATSOEVER WITH RESPECT TO THE ADEQUACY OF THE * +* IMPLEMENTATION, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OR * +* REPRESENTATIONS THAT THIS IMPLEMENTATION IS FREE FROM CLAIMS OF * +* INFRINGEMENT, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS * +* FOR A PARTICULAR PURPOSE. * +* * +* Xilinx products are not intended for use in life support * +* appliances, devices, or systems. Use in such applications are * +* expressly prohibited. * +* * +* (c) Copyright 1995-2007 Xilinx, Inc. * +* All rights reserved. * +*******************************************************************************/ +// The synthesis directives "translate_off/translate_on" specified below are +// supported by Xilinx, Mentor Graphics and Synplicity synthesis +// tools. Ensure they are correct for your synthesis tool(s). + +// You must compile the wrapper file fifo_xlnx_512x36_2clk_18to36.v when simulating +// the core, fifo_xlnx_512x36_2clk_18to36. When compiling the wrapper file, be sure to +// reference the XilinxCoreLib Verilog simulation library. For detailed +// instructions, please refer to the "CORE Generator Help". + +`timescale 1ns/1ps + +module fifo_xlnx_512x36_2clk_18to36( + din, + rd_clk, + rd_en, + rst, + wr_clk, + wr_en, + dout, + empty, + full); + + +input [17 : 0] din; +input rd_clk; +input rd_en; +input rst; +input wr_clk; +input wr_en; +output [35 : 0] dout; +output empty; +output full; + +// synthesis translate_off + + FIFO_GENERATOR_V4_4 #( + .C_COMMON_CLOCK(0), + .C_COUNT_TYPE(0), + .C_DATA_COUNT_WIDTH(10), + .C_DEFAULT_VALUE("BlankString"), + .C_DIN_WIDTH(18), + .C_DOUT_RST_VAL("0"), + .C_DOUT_WIDTH(36), + .C_ENABLE_RLOCS(0), + .C_FAMILY("spartan3"), + .C_FULL_FLAGS_RST_VAL(0), + .C_HAS_ALMOST_EMPTY(0), + .C_HAS_ALMOST_FULL(0), + .C_HAS_BACKUP(0), + .C_HAS_DATA_COUNT(0), + .C_HAS_INT_CLK(0), + .C_HAS_MEMINIT_FILE(0), + .C_HAS_OVERFLOW(0), + .C_HAS_RD_DATA_COUNT(0), + .C_HAS_RD_RST(0), + .C_HAS_RST(1), + .C_HAS_SRST(0), + .C_HAS_UNDERFLOW(0), + .C_HAS_VALID(0), + .C_HAS_WR_ACK(0), + .C_HAS_WR_DATA_COUNT(0), + .C_HAS_WR_RST(0), + .C_IMPLEMENTATION_TYPE(2), + .C_INIT_WR_PNTR_VAL(0), + .C_MEMORY_TYPE(1), + .C_MIF_FILE_NAME("BlankString"), + .C_MSGON_VAL(1), + .C_OPTIMIZATION_MODE(0), + .C_OVERFLOW_LOW(0), + .C_PRELOAD_LATENCY(0), + .C_PRELOAD_REGS(1), + .C_PRIM_FIFO_TYPE("1kx18"), + .C_PROG_EMPTY_THRESH_ASSERT_VAL(4), + .C_PROG_EMPTY_THRESH_NEGATE_VAL(5), + .C_PROG_EMPTY_TYPE(0), + .C_PROG_FULL_THRESH_ASSERT_VAL(1023), + .C_PROG_FULL_THRESH_NEGATE_VAL(1022), + .C_PROG_FULL_TYPE(0), + .C_RD_DATA_COUNT_WIDTH(9), + .C_RD_DEPTH(512), + .C_RD_FREQ(1), + .C_RD_PNTR_WIDTH(9), + .C_UNDERFLOW_LOW(0), + .C_USE_DOUT_RST(1), + .C_USE_ECC(0), + .C_USE_EMBEDDED_REG(0), + .C_USE_FIFO16_FLAGS(0), + .C_USE_FWFT_DATA_COUNT(0), + .C_VALID_LOW(0), + .C_WR_ACK_LOW(0), + .C_WR_DATA_COUNT_WIDTH(10), + .C_WR_DEPTH(1024), + .C_WR_FREQ(1), + .C_WR_PNTR_WIDTH(10), + .C_WR_RESPONSE_LATENCY(1)) + inst ( + .DIN(din), + .RD_CLK(rd_clk), + .RD_EN(rd_en), + .RST(rst), + .WR_CLK(wr_clk), + .WR_EN(wr_en), + .DOUT(dout), + .EMPTY(empty), + .FULL(full), + .CLK(), + .INT_CLK(), + .BACKUP(), + .BACKUP_MARKER(), + .PROG_EMPTY_THRESH(), + .PROG_EMPTY_THRESH_ASSERT(), + .PROG_EMPTY_THRESH_NEGATE(), + .PROG_FULL_THRESH(), + .PROG_FULL_THRESH_ASSERT(), + .PROG_FULL_THRESH_NEGATE(), + .RD_RST(), + .SRST(), + .WR_RST(), + .ALMOST_EMPTY(), + .ALMOST_FULL(), + .DATA_COUNT(), + .OVERFLOW(), + .PROG_EMPTY(), + .PROG_FULL(), + .VALID(), + .RD_DATA_COUNT(), + .UNDERFLOW(), + .WR_ACK(), + .WR_DATA_COUNT(), + .SBITERR(), + .DBITERR()); + + +// synthesis translate_on + +endmodule + diff --git a/usrp2/coregen/fifo_xlnx_512x36_2clk_18to36.xco b/usrp2/coregen/fifo_xlnx_512x36_2clk_18to36.xco new file mode 100644 index 000000000..df97fd0e0 --- /dev/null +++ b/usrp2/coregen/fifo_xlnx_512x36_2clk_18to36.xco @@ -0,0 +1,82 @@ +############################################################## +# +# Xilinx Core Generator version K.39 +# Date: Thu Jul 29 23:02:41 2010 +# +############################################################## +# +# This file contains the customisation parameters for a +# Xilinx CORE Generator IP GUI. It is strongly recommended +# that you do not manually alter this file as it may cause +# unexpected and unsupported behavior. +# +############################################################## +# +# BEGIN Project Options +SET addpads = false +SET asysymbol = false +SET busformat = BusFormatAngleBracketNotRipped +SET createndf = false +SET designentry = Verilog +SET device = xc3s2000 +SET devicefamily = spartan3 +SET flowvendor = Other +SET formalverification = false +SET foundationsym = false +SET implementationfiletype = Ngc +SET package = fg456 +SET removerpms = false +SET simulationfiles = Behavioral +SET speedgrade = -5 +SET verilogsim = true +SET vhdlsim = false +# END Project Options +# BEGIN Select +SELECT Fifo_Generator family Xilinx,_Inc. 4.4 +# END Select +# BEGIN Parameters +CSET almost_empty_flag=false +CSET almost_full_flag=false +CSET component_name=fifo_xlnx_512x36_2clk_18to36 +CSET data_count=false +CSET data_count_width=10 +CSET disable_timing_violations=false +CSET dout_reset_value=0 +CSET empty_threshold_assert_value=4 +CSET empty_threshold_negate_value=5 +CSET enable_ecc=false +CSET enable_int_clk=false +CSET fifo_implementation=Independent_Clocks_Block_RAM +CSET full_flags_reset_value=0 +CSET full_threshold_assert_value=1023 +CSET full_threshold_negate_value=1022 +CSET input_data_width=18 +CSET input_depth=1024 +CSET output_data_width=36 +CSET output_depth=512 +CSET overflow_flag=false +CSET overflow_sense=Active_High +CSET performance_options=First_Word_Fall_Through +CSET programmable_empty_type=No_Programmable_Empty_Threshold +CSET programmable_full_type=No_Programmable_Full_Threshold +CSET read_clock_frequency=1 +CSET read_data_count=false +CSET read_data_count_width=9 +CSET reset_pin=true +CSET reset_type=Asynchronous_Reset +CSET underflow_flag=false +CSET underflow_sense=Active_High +CSET use_dout_reset=true +CSET use_embedded_registers=false +CSET use_extra_logic=false +CSET valid_flag=false +CSET valid_sense=Active_High +CSET write_acknowledge_flag=false +CSET write_acknowledge_sense=Active_High +CSET write_clock_frequency=1 +CSET write_data_count=false +CSET write_data_count_width=10 +# END Parameters +GENERATE +# CRC: 117ae77f + diff --git a/usrp2/coregen/fifo_xlnx_512x36_2clk_36to18.v b/usrp2/coregen/fifo_xlnx_512x36_2clk_36to18.v new file mode 100644 index 000000000..f7f6e7e9f --- /dev/null +++ b/usrp2/coregen/fifo_xlnx_512x36_2clk_36to18.v @@ -0,0 +1,165 @@ +/******************************************************************************* +* This file is owned and controlled by Xilinx and must be used * +* solely for design, simulation, implementation and creation of * +* design files limited to Xilinx devices or technologies. Use * +* with non-Xilinx devices or technologies is expressly prohibited * +* and immediately terminates your license. * +* * +* XILINX IS PROVIDING THIS DESIGN, CODE, OR INFORMATION "AS IS" * +* SOLELY FOR USE IN DEVELOPING PROGRAMS AND SOLUTIONS FOR * +* XILINX DEVICES. BY PROVIDING THIS DESIGN, CODE, OR INFORMATION * +* AS ONE POSSIBLE IMPLEMENTATION OF THIS FEATURE, APPLICATION * +* OR STANDARD, XILINX IS MAKING NO REPRESENTATION THAT THIS * +* IMPLEMENTATION IS FREE FROM ANY CLAIMS OF INFRINGEMENT, * +* AND YOU ARE RESPONSIBLE FOR OBTAINING ANY RIGHTS YOU MAY REQUIRE * +* FOR YOUR IMPLEMENTATION. XILINX EXPRESSLY DISCLAIMS ANY * +* WARRANTY WHATSOEVER WITH RESPECT TO THE ADEQUACY OF THE * +* IMPLEMENTATION, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OR * +* REPRESENTATIONS THAT THIS IMPLEMENTATION IS FREE FROM CLAIMS OF * +* INFRINGEMENT, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS * +* FOR A PARTICULAR PURPOSE. * +* * +* Xilinx products are not intended for use in life support * +* appliances, devices, or systems. Use in such applications are * +* expressly prohibited. * +* * +* (c) Copyright 1995-2007 Xilinx, Inc. * +* All rights reserved. * +*******************************************************************************/ +// The synthesis directives "translate_off/translate_on" specified below are +// supported by Xilinx, Mentor Graphics and Synplicity synthesis +// tools. Ensure they are correct for your synthesis tool(s). + +// You must compile the wrapper file fifo_xlnx_512x36_2clk_36to18.v when simulating +// the core, fifo_xlnx_512x36_2clk_36to18. When compiling the wrapper file, be sure to +// reference the XilinxCoreLib Verilog simulation library. For detailed +// instructions, please refer to the "CORE Generator Help". + +`timescale 1ns/1ps + +module fifo_xlnx_512x36_2clk_36to18( + din, + rd_clk, + rd_en, + rst, + wr_clk, + wr_en, + dout, + empty, + full); + + +input [35 : 0] din; +input rd_clk; +input rd_en; +input rst; +input wr_clk; +input wr_en; +output [17 : 0] dout; +output empty; +output full; + +// synthesis translate_off + + FIFO_GENERATOR_V4_4 #( + .C_COMMON_CLOCK(0), + .C_COUNT_TYPE(0), + .C_DATA_COUNT_WIDTH(9), + .C_DEFAULT_VALUE("BlankString"), + .C_DIN_WIDTH(36), + .C_DOUT_RST_VAL("0"), + .C_DOUT_WIDTH(18), + .C_ENABLE_RLOCS(0), + .C_FAMILY("spartan3"), + .C_FULL_FLAGS_RST_VAL(0), + .C_HAS_ALMOST_EMPTY(0), + .C_HAS_ALMOST_FULL(0), + .C_HAS_BACKUP(0), + .C_HAS_DATA_COUNT(0), + .C_HAS_INT_CLK(0), + .C_HAS_MEMINIT_FILE(0), + .C_HAS_OVERFLOW(0), + .C_HAS_RD_DATA_COUNT(0), + .C_HAS_RD_RST(0), + .C_HAS_RST(1), + .C_HAS_SRST(0), + .C_HAS_UNDERFLOW(0), + .C_HAS_VALID(0), + .C_HAS_WR_ACK(0), + .C_HAS_WR_DATA_COUNT(0), + .C_HAS_WR_RST(0), + .C_IMPLEMENTATION_TYPE(2), + .C_INIT_WR_PNTR_VAL(0), + .C_MEMORY_TYPE(1), + .C_MIF_FILE_NAME("BlankString"), + .C_MSGON_VAL(1), + .C_OPTIMIZATION_MODE(0), + .C_OVERFLOW_LOW(0), + .C_PRELOAD_LATENCY(0), + .C_PRELOAD_REGS(1), + .C_PRIM_FIFO_TYPE("512x36"), + .C_PROG_EMPTY_THRESH_ASSERT_VAL(4), + .C_PROG_EMPTY_THRESH_NEGATE_VAL(5), + .C_PROG_EMPTY_TYPE(0), + .C_PROG_FULL_THRESH_ASSERT_VAL(509), + .C_PROG_FULL_THRESH_NEGATE_VAL(508), + .C_PROG_FULL_TYPE(0), + .C_RD_DATA_COUNT_WIDTH(10), + .C_RD_DEPTH(1024), + .C_RD_FREQ(1), + .C_RD_PNTR_WIDTH(10), + .C_UNDERFLOW_LOW(0), + .C_USE_DOUT_RST(1), + .C_USE_ECC(0), + .C_USE_EMBEDDED_REG(0), + .C_USE_FIFO16_FLAGS(0), + .C_USE_FWFT_DATA_COUNT(0), + .C_VALID_LOW(0), + .C_WR_ACK_LOW(0), + .C_WR_DATA_COUNT_WIDTH(9), + .C_WR_DEPTH(512), + .C_WR_FREQ(1), + .C_WR_PNTR_WIDTH(9), + .C_WR_RESPONSE_LATENCY(1)) + inst ( + .DIN(din), + .RD_CLK(rd_clk), + .RD_EN(rd_en), + .RST(rst), + .WR_CLK(wr_clk), + .WR_EN(wr_en), + .DOUT(dout), + .EMPTY(empty), + .FULL(full), + .CLK(), + .INT_CLK(), + .BACKUP(), + .BACKUP_MARKER(), + .PROG_EMPTY_THRESH(), + .PROG_EMPTY_THRESH_ASSERT(), + .PROG_EMPTY_THRESH_NEGATE(), + .PROG_FULL_THRESH(), + .PROG_FULL_THRESH_ASSERT(), + .PROG_FULL_THRESH_NEGATE(), + .RD_RST(), + .SRST(), + .WR_RST(), + .ALMOST_EMPTY(), + .ALMOST_FULL(), + .DATA_COUNT(), + .OVERFLOW(), + .PROG_EMPTY(), + .PROG_FULL(), + .VALID(), + .RD_DATA_COUNT(), + .UNDERFLOW(), + .WR_ACK(), + .WR_DATA_COUNT(), + .SBITERR(), + .DBITERR()); + + +// synthesis translate_on + +endmodule + diff --git a/usrp2/coregen/fifo_xlnx_512x36_2clk_36to18.xco b/usrp2/coregen/fifo_xlnx_512x36_2clk_36to18.xco new file mode 100644 index 000000000..a1c75dc39 --- /dev/null +++ b/usrp2/coregen/fifo_xlnx_512x36_2clk_36to18.xco @@ -0,0 +1,82 @@ +############################################################## +# +# Xilinx Core Generator version K.39 +# Date: Thu Jul 29 18:10:59 2010 +# +############################################################## +# +# This file contains the customisation parameters for a +# Xilinx CORE Generator IP GUI. It is strongly recommended +# that you do not manually alter this file as it may cause +# unexpected and unsupported behavior. +# +############################################################## +# +# BEGIN Project Options +SET addpads = false +SET asysymbol = false +SET busformat = BusFormatAngleBracketNotRipped +SET createndf = false +SET designentry = Verilog +SET device = xc3s2000 +SET devicefamily = spartan3 +SET flowvendor = Other +SET formalverification = false +SET foundationsym = false +SET implementationfiletype = Ngc +SET package = fg456 +SET removerpms = false +SET simulationfiles = Behavioral +SET speedgrade = -5 +SET verilogsim = true +SET vhdlsim = false +# END Project Options +# BEGIN Select +SELECT Fifo_Generator family Xilinx,_Inc. 4.4 +# END Select +# BEGIN Parameters +CSET almost_empty_flag=false +CSET almost_full_flag=false +CSET component_name=fifo_xlnx_512x36_2clk_36to18 +CSET data_count=false +CSET data_count_width=9 +CSET disable_timing_violations=false +CSET dout_reset_value=0 +CSET empty_threshold_assert_value=4 +CSET empty_threshold_negate_value=5 +CSET enable_ecc=false +CSET enable_int_clk=false +CSET fifo_implementation=Independent_Clocks_Block_RAM +CSET full_flags_reset_value=0 +CSET full_threshold_assert_value=509 +CSET full_threshold_negate_value=508 +CSET input_data_width=36 +CSET input_depth=512 +CSET output_data_width=18 +CSET output_depth=1024 +CSET overflow_flag=false +CSET overflow_sense=Active_High +CSET performance_options=First_Word_Fall_Through +CSET programmable_empty_type=No_Programmable_Empty_Threshold +CSET programmable_full_type=No_Programmable_Full_Threshold +CSET read_clock_frequency=1 +CSET read_data_count=false +CSET read_data_count_width=10 +CSET reset_pin=true +CSET reset_type=Asynchronous_Reset +CSET underflow_flag=false +CSET underflow_sense=Active_High +CSET use_dout_reset=true +CSET use_embedded_registers=false +CSET use_extra_logic=false +CSET valid_flag=false +CSET valid_sense=Active_High +CSET write_acknowledge_flag=false +CSET write_acknowledge_sense=Active_High +CSET write_clock_frequency=1 +CSET write_data_count=false +CSET write_data_count_width=9 +# END Parameters +GENERATE +# CRC: 392ad537 + diff --git a/usrp2/extramfifo/Makefile.srcs b/usrp2/extramfifo/Makefile.srcs new file mode 100644 index 000000000..7cd49f4f6 --- /dev/null +++ b/usrp2/extramfifo/Makefile.srcs @@ -0,0 +1,16 @@ +# +# Copyright 2010 Ettus Research LLC +# + +################################################## +# Extram Sources +################################################## +EXTRAM_SRCS = $(abspath $(addprefix $(BASE_DIR)/../extramfifo/, \ +ext_fifo.v \ +nobl_if.v \ +nobl_fifo.v \ +icon.v \ +icon.xco \ +ila.v \ +ila.xco \ +)) diff --git a/usrp2/extramfifo/ext_fifo.v b/usrp2/extramfifo/ext_fifo.v new file mode 100644 index 000000000..55935146a --- /dev/null +++ b/usrp2/extramfifo/ext_fifo.v @@ -0,0 +1,120 @@ +module ext_fifo + #(parameter INT_WIDTH=36,EXT_WIDTH=18,DEPTH=19) + ( + input int_clk, + input ext_clk, + input rst, + input [EXT_WIDTH-1:0] RAM_D_pi, + output [EXT_WIDTH-1:0] RAM_D_po, + output RAM_D_poe, + output [DEPTH-1:0] RAM_A, + output RAM_WEn, + output RAM_CENn, + output RAM_LDn, + output RAM_OEn, + output RAM_CE1n, + input [INT_WIDTH-1:0] datain, + input src_rdy_i, // WRITE + output dst_rdy_o, // not FULL + output [INT_WIDTH-1:0] dataout, + output src_rdy_o, // not EMPTY + input dst_rdy_i // READ + ); + + wire [EXT_WIDTH-1:0] write_data; + wire [EXT_WIDTH-1:0] read_data; + wire full1, empty1; + wire full2, empty2; + + + // FIFO buffers data from UDP engine into external FIFO clock domain. + fifo_xlnx_512x36_2clk_36to18 fifo_xlnx_512x36_2clk_36to18_i1 ( + .rst(rst), + .wr_clk(int_clk), + .rd_clk(ext_clk), + .din(datain), // Bus [35 : 0] + .wr_en(src_rdy_i), + .rd_en(space_avail&~empty1), + // .rd_en(~full2&~empty1), + .dout(write_data), // Bus [17 : 0] + .full(full1), + .empty(empty1)); + assign dst_rdy_o = ~full1; + + + + // External FIFO running at ext clock rate and 18 bit width. + nobl_fifo #(.WIDTH(EXT_WIDTH),.DEPTH(DEPTH)) + nobl_fifo_i1 + ( + .clk(ext_clk), + .rst(rst), + .RAM_D_pi(RAM_D_pi), + .RAM_D_po(RAM_D_po), + .RAM_D_poe(RAM_D_poe), + .RAM_A(RAM_A), + .RAM_WEn(RAM_WEn), + .RAM_CENn(RAM_CENn), + .RAM_LDn(RAM_LDn), + .RAM_OEn(RAM_OEn), + .RAM_CE1n(RAM_CE1n), + .write_data(write_data), + .write_strobe(space_avail & ~empty1 ), + .space_avail(space_avail), + .read_data(read_data), + .read_strobe(data_avail & ~full2), + .data_avail(data_avail) + ); + + + + // FIFO buffers data read from external FIFO into DSP clk domain and to TX DSP. + fifo_xlnx_512x36_2clk_18to36 fifo_xlnx_512x36_2clk_18to36_i1 ( + .rst(rst), + .wr_clk(ext_clk), + .rd_clk(int_clk), + .din(read_data), // Bus [17 : 0] + // .din(write_data), // Bus [17 : 0] + .wr_en(data_avail & ~full2 ), + // .wr_en(~full2&~empty1), + .rd_en(dst_rdy_i), + .dout(dataout), // Bus [35 : 0] + .full(full2), + .empty(empty2)); + assign src_rdy_o = ~empty2; + + + + wire [35:0] CONTROL0; + reg [7:0] datain_reg,write_data_reg,read_data_reg ; + reg space_avail_reg,data_avail_reg,empty1_reg,full2_reg ; + + always @(posedge ext_clk) + begin + //datain_reg <= datain[7:0]; + write_data_reg <= write_data[7:0]; + read_data_reg <= read_data[7:0]; + space_avail_reg <= space_avail; + data_avail_reg <= data_avail; + empty1_reg <= empty1; + full2_reg <= full2; + end + + + icon icon_i1 + ( + .CONTROL0(CONTROL0) + ); + + ila ila_i1 + ( + .CLK(ext_clk), + .CONTROL(CONTROL0), + // .TRIG0(address_reg), + .TRIG0(write_data_reg[7:0]), + .TRIG1(read_data_reg[7:0]), + .TRIG2(0), + .TRIG3({space_avail_reg,data_avail_reg,empty1_reg,full2_reg}) + ); + +endmodule // ext_fifo diff --git a/usrp2/extramfifo/ext_fifo_tb.cmd b/usrp2/extramfifo/ext_fifo_tb.cmd new file mode 100644 index 000000000..b0ab830dc --- /dev/null +++ b/usrp2/extramfifo/ext_fifo_tb.cmd @@ -0,0 +1,11 @@ +/opt/Xilinx/12.1/ISE_DS/ISE/verilog/src/glbl.v +-y . +-y ../coregen/ +-y ../models +-y /home/ianb/usrp-fpga/usrp2/sdr_lib +-y /home/ianb/usrp-fpga/usrp2/control_lib +-y /home/ianb/usrp-fpga/usrp2/models +-y /opt/Xilinx/12.1/ISE_DS/ISE/verilog/src/unisims +-y /opt/Xilinx/12.1/ISE_DS/ISE/verilog/src +-y /opt/Xilinx/12.1/ISE_DS/ISE/verilog/src/XilinxCoreLib + diff --git a/usrp2/extramfifo/ext_fifo_tb.prj b/usrp2/extramfifo/ext_fifo_tb.prj new file mode 100644 index 000000000..a11a15b2f --- /dev/null +++ b/usrp2/extramfifo/ext_fifo_tb.prj @@ -0,0 +1,9 @@ +verilog work "./ext_fifo_tb.v" +verilog work "./ext_fifo.v" +verilog work "./nobl_fifo.v" +verilog work "./nobl_if.v" +verilog work "../coregen/fifo_xlnx_512x36_2clk_36to18.v" +verilog work "../coregen/fifo_xlnx_512x36_2clk_18to36.v" +verilog work "../models/CY7C1356C/cy1356.v" +verilog work "../models/idt71v65603s150.v" +verilog work "$XILINX/verilog/src/glbl.v" diff --git a/usrp2/extramfifo/ext_fifo_tb.sh b/usrp2/extramfifo/ext_fifo_tb.sh new file mode 100644 index 000000000..a56574102 --- /dev/null +++ b/usrp2/extramfifo/ext_fifo_tb.sh @@ -0,0 +1 @@ +fuse -prj ext_fifo_tb.prj -t work.glbl -t work.ext_fifo_tb -L unisims_ver -L xilinxcorelib_ver -o ext_fifo_tb diff --git a/usrp2/extramfifo/ext_fifo_tb.v b/usrp2/extramfifo/ext_fifo_tb.v new file mode 100644 index 000000000..aa1fd6e3c --- /dev/null +++ b/usrp2/extramfifo/ext_fifo_tb.v @@ -0,0 +1,285 @@ +`timescale 1ns / 1ps +`define INT_WIDTH 36 +`define EXT_WIDTH 18 +`define DEPTH 19 +`define DUMP_VCD_FULL + +module ext_fifo_tb(); + + + reg int_clk; + reg ext_clk; + reg rst; + + + + wire [`EXT_WIDTH-1:0] RAM_D_pi; + wire [`EXT_WIDTH-1:0] RAM_D_po; + wire [`EXT_WIDTH-1:0] RAM_D; + wire RAM_D_poe; + wire [`DEPTH-1:0] RAM_A; + wire RAM_WEn; + wire RAM_CENn; + wire RAM_LDn; + wire RAM_OEn; + wire RAM_CE1n; + reg [`INT_WIDTH-1:0] datain; + reg src_rdy_i; // WRITE + wire dst_rdy_o; // not FULL + wire [`INT_WIDTH-1:0] dataout; + reg [`INT_WIDTH-1:0] ref_dataout; + wire src_rdy_o; // not EMPTY + reg dst_rdy_i; + + + // Clocks + // Int clock is 100MHz + // Ext clock is 125MHz + initial + begin + int_clk <= 0; + ext_clk <= 0; + datain <= 0; + ref_dataout <= 1; + src_rdy_i <= 0; + dst_rdy_i <= 0; + end + + always + #5 int_clk <= ~int_clk; + + always + #4 ext_clk <= ~ext_clk; + + + initial + begin + rst <= 1; + repeat (5) @(negedge int_clk); + rst <= 0; + @(negedge int_clk); + repeat (1000) + begin + @(negedge int_clk); + datain <= datain + 1; + src_rdy_i <= 1; + @(negedge int_clk); + src_rdy_i <= 0; +// @(negedge int_clk); +// dst_rdy_i <= src_rdy_o; +// @(negedge int_clk); +// dst_rdy_i <= 0; + repeat (2) @(negedge int_clk); + end // repeat (1000) + // Fall through fifo, first output already valid + if (dataout !== ref_dataout) + $display("Error: Expected %x, got %x",ref_dataout, dataout); + repeat (1000) + begin + @(negedge int_clk); + datain <= datain + 1; + src_rdy_i <= 1; + @(negedge int_clk); + src_rdy_i <= 0; + @(negedge int_clk); + ref_dataout <= ref_dataout + 1; + dst_rdy_i <= src_rdy_o; + @(negedge int_clk); + if (dataout !== ref_dataout) + $display("Error: Expected %x, got %x",ref_dataout, dataout); + dst_rdy_i <= 0; +// repeat (2) @(negedge int_clk); + end // repeat (1000) + repeat (1000) + begin +// @(negedge int_clk); +// datain <= datain + 1; +// src_rdy_i <= 1; +// @(negedge int_clk); +// src_rdy_i <= 0; + @(negedge int_clk); + ref_dataout <= ref_dataout + 1; + dst_rdy_i <= src_rdy_o; + @(negedge int_clk); + if (dataout !== ref_dataout) + $display("Error: Expected %x, got %x",ref_dataout, dataout); + dst_rdy_i <= 0; +// repeat (2) @(negedge int_clk); + end // repeat (1000) + + $finish; + + end // initial begin + + + /////////////////////////////////////////////////////////////////////////////////// + // Simulation control // + /////////////////////////////////////////////////////////////////////////////////// + `ifdef DUMP_LX2_TOP + // Set up output files + initial begin + $dumpfile("ext_fifo_tb.lx2"); + $dumpvars(1,ext_fifo_tb); + end + `endif + + `ifdef DUMP_LX2_FULL + // Set up output files + initial begin + $dumpfile("ext_fifo_tb.lx2"); + $dumpvars(0,ext_fifo_tb); + end + `endif + + `ifdef DUMP_VCD_TOP + // Set up output files + initial begin + $dumpfile("ext_fifo_tb.vcd"); + $dumpvars(1,ext_fifo_tb); + end + `endif + + `ifdef DUMP_VCD_TOP_PLUS_NEXT + // Set up output files + initial begin + $dumpfile("ext_fifo_tb.vcd"); + $dumpvars(2,ext_fifo_tb); + end + `endif + + + `ifdef DUMP_VCD_FULL + // Set up output files + initial begin + $dumpfile("ext_fifo_tb.vcd"); + $dumpvars(0,ext_fifo_tb); + end + `endif + + // Update display every 10 us + always #10000 $monitor("Time in uS ",$time/1000); + + wire [`EXT_WIDTH-1:0] RAM_D_pi_ext; + wire [`EXT_WIDTH-1:0] RAM_D_po_ext; + wire [`EXT_WIDTH-1:0] RAM_D_ext; + wire RAM_D_poe_ext; + + genvar i; + + // + // Instantiate IO for Bidirectional bus to SRAM + // + + generate + for (i=0;i<18;i=i+1) + begin : gen_RAM_D_IO + + IOBUF #( + .DRIVE(12), + .IOSTANDARD("LVCMOS25"), + .SLEW("FAST") + ) + RAM_D_i ( + .O(RAM_D_pi_ext[i]), + .I(RAM_D_po_ext[i]), + .IO(RAM_D[i]), + .T(RAM_D_poe_ext) + ); + end // block: gen_RAM_D_IO + + endgenerate + + wire [`DEPTH-1:0] RAM_A_ext; + wire RAM_WEn_ext,RAM_LDn_ext,RAM_CE1n_ext,RAM_OEn_ext,RAM_CENn_ext; + + assign #1 RAM_D_pi = RAM_D_pi_ext; + + assign #1 RAM_D_po_ext = RAM_D_po; + + assign #1 RAM_D_poe_ext = RAM_D_poe; + + assign #2 RAM_WEn_ext = RAM_WEn; + + assign #2 RAM_LDn_ext = RAM_LDn; + + assign #2 RAM_CE1n_ext = RAM_CE1n; + + assign #2 RAM_OEn_ext = RAM_OEn; + + assign #2 RAM_CENn_ext = RAM_CENn; + + assign #2 RAM_A_ext = RAM_A; + +/* -----\/----- EXCLUDED -----\/----- + wire [13:0] temp1; + assign temp1 = 14'h0; + wire [3:0] temp2; + assign temp2 = 4'h0; + -----/\----- EXCLUDED -----/\----- */ + + + idt71v65603s150 idt71v65603s150_i1 + ( + .A(RAM_A_ext[17:0]), + .adv_ld_(RAM_LDn_ext), // advance (high) / load (low) + .bw1_(1'b0), + .bw2_(1'b0), + .bw3_(1'b1), + .bw4_(1'b1), // byte write enables (low) + .ce1_(RAM_CE1n_ext), + .ce2(1'b1), + .ce2_(1'b0), // chip enables + .cen_(RAM_CENn_ext), // clock enable (low) + .clk(ext_clk), // clock + .IO({RAM_D[16:9],RAM_D[7:0]}), + .IOP({RAM_D[17],RAM_D[8]}), // data bus + .lbo_(1'b0), // linear burst order (low) + .oe_(RAM_OEn_ext), // output enable (low) + .r_w_(RAM_WEn_ext) + ); // read (high) / write (low) + +/* -----\/----- EXCLUDED -----\/----- + + + cy1356 cy1356_i1 + ( .d(RAM_D), + .clk(ext_clk), + .a(RAM_A_ext), + .bws(2'b00), + .we_b(RAM_WEn_ext), + .adv_lb(RAM_LDn_ext), + .ce1b(RAM_CE1n_ext), + .ce2(1'b1), + .ce3b(1'b0), + .oeb(RAM_OEn_ext), + .cenb(RAM_CENn_ext), + .mode(1'b0) + ); + -----/\----- EXCLUDED -----/\----- */ + + + ext_fifo + #(.INT_WIDTH(`INT_WIDTH),.EXT_WIDTH(`EXT_WIDTH),.DEPTH(`DEPTH)) + ext_fifo_i1 + ( + .int_clk(int_clk), + .ext_clk(ext_clk), + .rst(rst), + .RAM_D_pi(RAM_D_pi), + .RAM_D_po(RAM_D_po), + .RAM_D_poe(RAM_D_poe), + .RAM_A(RAM_A), + .RAM_WEn(RAM_WEn), + .RAM_CENn(RAM_CENn), + .RAM_LDn(RAM_LDn), + .RAM_OEn(RAM_OEn), + .RAM_CE1n(RAM_CE1n), + .datain(datain), + .src_rdy_i(src_rdy_i), // WRITE + .dst_rdy_o(dst_rdy_o), // not FULL + .dataout(dataout), + .src_rdy_o(src_rdy_o), // not EMPTY + .dst_rdy_i(dst_rdy_i) + ); + +endmodule // ext_fifo_tb diff --git a/usrp2/extramfifo/nobl_fifo.v b/usrp2/extramfifo/nobl_fifo.v new file mode 100644 index 000000000..1bd7439ad --- /dev/null +++ b/usrp2/extramfifo/nobl_fifo.v @@ -0,0 +1,264 @@ +module nobl_fifo + #(parameter WIDTH=18,DEPTH=19) + ( + input clk, + input rst, + input [WIDTH-1:0] RAM_D_pi, + output [WIDTH-1:0] RAM_D_po, + output RAM_D_poe, + output [DEPTH-1:0] RAM_A, + output RAM_WEn, + output RAM_CENn, + output RAM_LDn, + output RAM_OEn, + output RAM_CE1n, + input [WIDTH-1:0] write_data, + input write_strobe, + output reg space_avail, + output reg [WIDTH-1:0] read_data, + input read_strobe, + output reg data_avail + ); + + reg [DEPTH-1:0] capacity; + reg [DEPTH-1:0] wr_pointer; + reg [DEPTH-1:0] rd_pointer; + wire [DEPTH-1:0] address; + + reg supress; + reg data_avail_int; // Data available with high latency from ext FIFO flag + wire [WIDTH-1:0] data_in; + wire data_in_valid; + reg [WIDTH-1:0] read_data_pending; + reg pending_avail; + wire read_strobe_int; + + + + assign read = read_strobe_int && data_avail_int; + assign write = write_strobe && space_avail; + + // When a read and write collision occur, supress availability flags next cycle + // and complete write followed by read over 2 cycles. This forces balanced arbitration + // and makes for a simple logic design. + + always @(posedge clk) + if (rst) + begin + capacity <= 1 << (DEPTH-1); + wr_pointer <= 0; + rd_pointer <= 0; + space_avail <= 0; + data_avail_int <= 0; + supress <= 0; + end + else + begin + space_avail <= ~((capacity == 0) || (read&&write) || (capacity == 1 && write) ); + // Capacity has 1 cycle delay so look ahead here for corner case of read of last item in FIFO. + data_avail_int <= ~((capacity == (1 << (DEPTH-1))) || (read&&write) || (capacity == ((1 << (DEPTH-1))-1) && read) ); + supress <= read && write; + wr_pointer <= wr_pointer + write; + rd_pointer <= rd_pointer + ((~write && read) || supress); + capacity <= capacity - write + ((~write && read) || supress); // REVISIT + end // else: !if(rst) + + assign address = write ? wr_pointer : rd_pointer; + assign enable = write || read || supress; + + // + // Need to have first item in external FIFO moved into local registers for single cycle latency and throughput on read. + // 2 local registers are provided so that a read every other clock cycle can be sustained. + // No fowarding logic is provided to bypass the external FIFO as latency is of no concern. + // + always @(posedge clk) + if (rst) + begin + read_data <= 0; + data_avail <= 0; + read_data_pending <= 0; + pending_avail <= 0; + end + else + begin + case({read_strobe,data_in_valid}) + // No read externally, no new data arriving from external FIFO + 2'b00: begin + case({data_avail,pending_avail}) + // Start Data empty, Pending empty. + // + // End Data full, Pending empty + 2'b00: begin + read_data <= read_data; + data_avail <= data_avail; + read_data_pending <= read_data_pending ; + pending_avail <= pending_avail; + end + // Start Data empty, Pending full. + // Data <= Pending, + // End Data full, Penidng empty. + 2'b01: begin + read_data <= read_data_pending; + data_avail <= 1'b1; + read_data_pending <= read_data_pending ; + pending_avail <= 1'b0; + end + // Start Data full, Pending empty. + // + // End Data full, Pending empty + 2'b10: begin + read_data <= read_data; + data_avail <= data_avail; + read_data_pending <= read_data_pending ; + pending_avail <= pending_avail; + end + // Start Data full, Pending full. + // + // End Data full, Pending full. + 2'b11: begin + read_data <= read_data; + data_avail <= data_avail; + read_data_pending <= read_data_pending ; + pending_avail <= pending_avail; + end + endcase + end + // No read externally, new data arriving from external FIFO + 2'b01: begin + case({data_avail,pending_avail}) + // Start Data empty, Pending empty. + // Data <= FIFO + // End Data full, Pending empty + 2'b00: begin + read_data <= data_in; + data_avail <= 1'b1; + read_data_pending <= read_data_pending ; + pending_avail <= 1'b0; + end + // Start Data empty, Pending full. + // Data <= Pending, Pending <= FIFO + // End Data full, Penidng full. + 2'b01: begin + read_data <= read_data_pending; + data_avail <= 1'b1; + read_data_pending <= data_in ; + pending_avail <= 1'b1; + end + // Start Data full, Pending empty. + // Pending <= FIFO + // End Data full, Pending full + 2'b10: begin + read_data <= read_data; + data_avail <= 1'b1; + read_data_pending <= data_in ; + pending_avail <= 1'b1; + end + // Data full, Pending full. + // *ILLEGAL STATE* + 2'b11: begin + + end + endcase + end + // Read externally, no new data arriving from external FIFO + 2'b10: begin + case({data_avail,pending_avail}) + // Start Data empty, Pending empty. + // *ILLEGAL STATE* + 2'b00: begin + + end + // Start Data empty, Pending full. + // *ILLEGAL STATE* + 2'b01: begin + + end + // Start Data full, Pending empty. + // Out <= Data + // End Data empty, Pending empty. + 2'b10: begin + read_data <= read_data; + data_avail <= 1'b0; + read_data_pending <= read_data_pending ; + pending_avail <= 1'b0; + end + // Start Data full, Pending full. + // Out <= Data, + // End Data full, Pending empty + 2'b11: begin + read_data <= read_data_pending; + data_avail <= 1'b1; + read_data_pending <= read_data_pending ; + pending_avail <= 1'b0; + end + endcase + end + // Read externally, new data arriving from external FIFO + 2'b11: begin + case({data_avail,pending_avail}) + // Start Data empty, Pending empty. + // *ILLEGAL STATE* + 2'b00: begin + + end + // Start Data empty, Pending full. + // *ILLEGAL STATE* + 2'b01: begin + + end + // Start Data full, Pending empty. + // Out <= Data, Data <= FIFO + // End Data full, Pending empty. + 2'b10: begin + read_data <= data_in; + data_avail <= 1'b1; + read_data_pending <= read_data_pending ; + pending_avail <= 1'b0; + end + // Start Data full, Pending full. + // Out <= Data, Data <= Pending, Pending <= FIFO + // End Data full, Pending full + 2'b11: begin + read_data <= read_data_pending; + data_avail <= 1'b1; + read_data_pending <= data_in ; + pending_avail <= 1'b1; + end + endcase + end + endcase + end + + // Start an external FIFO read as soon as a read of the buffer reg is strobed to minimise refill latency. + // If the buffer reg or the pending buffer reg is already empty also pre-emptively start a read. + // However there must be something in ext FIFO to read. + // This means that there can be 2 outstanding reads to the ext FIFO active at any time helping to hide latency. + assign read_strobe_int = (read_strobe & data_avail & ~pending_avail) || (~data_avail && ~pending_avail); + + + // + // Simple NoBL SRAM interface, 4 cycle read latency. + // Read/Write arbitration via temprary application of empty/full flags. + // + nobl_if nobl_if_i1 + ( + .clk(clk), + .rst(rst), + .RAM_D_pi(RAM_D_pi), + .RAM_D_po(RAM_D_po), + .RAM_D_poe(RAM_D_poe), + .RAM_A(RAM_A), + .RAM_WEn(RAM_WEn), + .RAM_CENn(RAM_CENn), + .RAM_LDn(RAM_LDn), + .RAM_OEn(RAM_OEn), + .RAM_CE1n(RAM_CE1n), + .address(address), + .data_out(write_data), + .data_in(data_in), + .data_in_valid(data_in_valid), + .write(write), + .enable(enable) + ); + +endmodule // nobl_fifo diff --git a/usrp2/extramfifo/nobl_if.v b/usrp2/extramfifo/nobl_if.v new file mode 100644 index 000000000..3143ce5ba --- /dev/null +++ b/usrp2/extramfifo/nobl_if.v @@ -0,0 +1,136 @@ +module nobl_if + #(parameter WIDTH=18,DEPTH=19) + ( + input clk, + input rst, + input [WIDTH-1:0] RAM_D_pi, + output [WIDTH-1:0] RAM_D_po, + output reg RAM_D_poe, + output [DEPTH-1:0] RAM_A, + output RAM_WEn, + output RAM_CENn, + output RAM_LDn, + output RAM_OEn, + output RAM_CE1n, + input [DEPTH-1:0] address, + input [WIDTH-1:0] data_out, + output reg [WIDTH-1:0] data_in, + output reg data_in_valid, + input write, + input enable + ); + + + reg enable_pipe1; + reg [DEPTH-1:0] address_pipe1; + reg write_pipe1; + reg [WIDTH-1:0] data_out_pipe1; + + reg enable_pipe2; + reg write_pipe2; + reg [WIDTH-1:0] data_out_pipe2; + + reg enable_pipe3; + reg write_pipe3; + reg [WIDTH-1:0] data_out_pipe3; + + assign RAM_LDn = 0; + assign RAM_OEn = 0; + + + // + // Pipeline stage 1 + // + always @(posedge clk) + if (rst) + begin + enable_pipe1 <= 0; + address_pipe1 <= 0; + write_pipe1 <= 0; + data_out_pipe1 <= 0; + end + else + begin + enable_pipe1 <= enable; + + if (enable) + begin + address_pipe1 <= address; + write_pipe1 <= write; + + if (write) + data_out_pipe1 <= data_out; + end + end // always @ (posedge clk) + + // Pipeline 1 drives address, write_enable, chip_select on NoBL SRAM + assign RAM_A = address_pipe1; + assign RAM_CENn = 1'b0; + assign RAM_WEn = ~write_pipe1; + assign RAM_CE1n = ~enable_pipe1; + + // + // Pipeline stage2 + // + always @(posedge clk) + if (rst) + begin + enable_pipe2 <= 0; + data_out_pipe2 <= 0; + write_pipe2 <= 0; + end + else + begin + data_out_pipe2 <= data_out_pipe1; + write_pipe2 <= write_pipe1; + enable_pipe2 <= enable_pipe1; + end + + // + // Pipeline stage3 + // + always @(posedge clk) + if (rst) + begin + enable_pipe3 <= 0; + data_out_pipe3 <= 0; + write_pipe3 <= 0; + RAM_D_poe <= 0; + end + else + begin + data_out_pipe3 <= data_out_pipe2; + write_pipe3 <= write_pipe2; + enable_pipe3 <= enable_pipe2; + RAM_D_poe <= ~(write_pipe2 & enable_pipe2); // Active low driver enable in Xilinx. + end + + // Pipeline 3 drives write data on NoBL SRAM + assign RAM_D_po = data_out_pipe3; + + + // + // Pipeline stage4 + // + always @(posedge clk) + if (rst) + begin + data_in_valid <= 0; + data_in <= 0; + end + else + begin + data_in <= RAM_D_pi; + if (enable_pipe3 & ~write_pipe3) + begin + // Read data now available to be registered. + data_in_valid <= 1'b1; + end + else + data_in_valid <= 1'b0; + end // always @ (posedge clk) + + + + +endmodule // nobl_if diff --git a/usrp2/extramfifo/test_sram_if.v b/usrp2/extramfifo/test_sram_if.v new file mode 100644 index 000000000..9f36b409c --- /dev/null +++ b/usrp2/extramfifo/test_sram_if.v @@ -0,0 +1,171 @@ +`define WIDTH 18 +`define DEPTH 19 + +module test_sram_if + ( + input clk, + input rst, + input [`WIDTH-1:0] RAM_D_pi, + output [`WIDTH-1:0] RAM_D_po, + output RAM_D_poe, + output [`DEPTH-1:0] RAM_A, + output RAM_WEn, + output RAM_CENn, + output RAM_LDn, + output RAM_OEn, + output RAM_CE1n, + output reg correct + ); + + reg [`DEPTH-1:0] write_count; + reg [`DEPTH-1:0] read_count; + reg enable; + reg write; + reg write_cycle; + reg read_cycle; + reg enable_reads; + reg [18:0] address; + reg [17:0] data_out; + wire [17:0] data_in; + wire data_in_valid; + + reg [17:0] check_data; + reg [17:0] check_data_old; + reg [17:0] check_data_old2; + + // + // Create counter that generates both external modulo 2^19 address and modulo 2^18 data to test RAM. + // + + always @(posedge clk) + if (rst) + begin + write_count <= 19'h0; + read_count <= 19'h0; + end + else if (write_cycle) // Write cycle + if (write_count == 19'h7FFFF) + begin + write_count <= 19'h0; + end + else + begin + write_count <= write_count + 1'b1; + end + else if (read_cycle) // Read cycle + if (read_count == 19'h7FFFF) + begin + read_count <= 19'h0; + end + else + begin + read_count <= read_count + 1'b1; + end + + always @(posedge clk) + if (rst) + begin + enable_reads <= 0; + read_cycle <= 0; + write_cycle <= 0; + end + else + begin + write_cycle <= ~write_cycle; + if (enable_reads) + read_cycle <= write_cycle; + if (write_count == 15) // Enable reads 15 writes after reset terminates. + enable_reads <= 1; + end // else: !if(rst) + + always @(posedge clk) + if (rst) + begin + enable <= 0; + end + else if (write_cycle) + begin + address <= write_count; + data_out <= write_count[17:0]; + enable <= 1; + write <= 1; + end + else if (read_cycle) + begin + address <= read_count; + check_data <= read_count[17:0]; + check_data_old <= check_data; + check_data_old2 <= check_data_old; + enable <= 1; + write <= 0; + end + else + enable <= 0; + + always @(posedge clk) + if (data_in_valid) + begin + correct <= (data_in == check_data_old2); + end + + + nobl_if nobl_if_i1 + ( + .clk(clk), + .rst(rst), + .RAM_D_pi(RAM_D_pi), + .RAM_D_po(RAM_D_po), + .RAM_D_poe(RAM_D_poe), + .RAM_A(RAM_A), + .RAM_WEn(RAM_WEn), + .RAM_CENn(RAM_CENn), + .RAM_LDn(RAM_LDn), + .RAM_OEn(RAM_OEn), + .RAM_CE1n(RAM_CE1n), + .address(address), + .data_out(data_out), + .data_in(data_in), + .data_in_valid(data_in_valid), + .write(write), + .enable(enable) + ); + + + wire [35:0] CONTROL0; + reg [7:0] data_in_reg, data_out_reg, address_reg; + reg data_in_valid_reg,write_reg,enable_reg,correct_reg; + + always @(posedge clk) + begin + data_in_reg <= data_in[7:0]; + data_out_reg <= data_out[7:0]; + data_in_valid_reg <= data_in_valid; + write_reg <= write; + enable_reg <= enable; + correct_reg <= correct; + address_reg <= address; + + end + + + icon icon_i1 + ( + .CONTROL0(CONTROL0) + ); + + ila ila_i1 + ( + .CLK(clk), + .CONTROL(CONTROL0), + // .TRIG0(address_reg), + .TRIG0(data_in_reg[7:0]), + .TRIG1(data_out_reg[7:0]), + .TRIG2(address_reg[7:0]), + .TRIG3({data_in_valid_reg,write_reg,enable_reg,correct_reg}) + ); + + + +endmodule // test_sram_if + + \ No newline at end of file -- cgit v1.2.3 From b48b0f171b9e24c161efc6d2b1d2b1a1dbb0324d Mon Sep 17 00:00:00 2001 From: Ian Buckley Date: Sat, 31 Jul 2010 00:15:16 -0700 Subject: External FIFO tested in simulation and on USRP2 from decimation 64->8 with current head UHD code. Apparently operation is "flawless" but more regression and corner case regression could and should be done. Tristate drivers have been added at the top level of the hierarchy for the SRAM databus as is considered good practice for both Xilinx and ASIC design flows and so both top level and core fils have been touched. --- usrp2/coregen/Makefile.srcs | 4 + usrp2/coregen/coregen.cgp | 22 +- usrp2/coregen/fifo_xlnx_512x36_2clk_18to36.v | 6 +- usrp2/coregen/fifo_xlnx_512x36_2clk_18to36.xco | 6 +- usrp2/extramfifo/ext_fifo.v | 76 +- usrp2/extramfifo/ext_fifo_tb.v | 36 +- usrp2/extramfifo/icon.v | 1286 ++++++ usrp2/extramfifo/icon.xco | 47 + usrp2/extramfifo/ila.v | 5544 ++++++++++++++++++++++++ usrp2/extramfifo/ila.xco | 130 + usrp2/extramfifo/nobl_fifo.v | 20 +- usrp2/extramfifo/nobl_if.v | 9 +- usrp2/extramfifo/test_sram_if.v | 4 + usrp2/top/Makefile.common | 1 + usrp2/top/u2_rev3/Makefile.udp | 2 + usrp2/top/u2_rev3/u2_core_udp.v | 33 +- usrp2/top/u2_rev3/u2_rev3.ucf | 86 +- usrp2/top/u2_rev3/u2_rev3.v | 221 +- 18 files changed, 7297 insertions(+), 236 deletions(-) create mode 100644 usrp2/extramfifo/icon.v create mode 100644 usrp2/extramfifo/icon.xco create mode 100644 usrp2/extramfifo/ila.v create mode 100644 usrp2/extramfifo/ila.xco diff --git a/usrp2/coregen/Makefile.srcs b/usrp2/coregen/Makefile.srcs index 7b29225ca..a59696d15 100644 --- a/usrp2/coregen/Makefile.srcs +++ b/usrp2/coregen/Makefile.srcs @@ -16,4 +16,8 @@ fifo_xlnx_16x19_2clk.v \ fifo_xlnx_16x19_2clk.xco \ fifo_xlnx_16x40_2clk.v \ fifo_xlnx_16x40_2clk.xco \ +fifo_xlnx_512x36_2clk_36to18.v \ +fifo_xlnx_512x36_2clk_36to18.xco \ +fifo_xlnx_512x36_2clk_18to36.v \ +fifo_xlnx_512x36_2clk_18to36.xco \ )) diff --git a/usrp2/coregen/coregen.cgp b/usrp2/coregen/coregen.cgp index 810d64dac..4c9201aff 100644 --- a/usrp2/coregen/coregen.cgp +++ b/usrp2/coregen/coregen.cgp @@ -1,20 +1,22 @@ -# Date: Thu Sep 3 17:40:48 2009 -SET addpads = False -SET asysymbol = False +# Date: Mon Jul 26 21:55:33 2010 + +SET addpads = false +SET asysymbol = false SET busformat = BusFormatAngleBracketNotRipped -SET createndf = False +SET createndf = false SET designentry = Verilog SET device = xc3s2000 SET devicefamily = spartan3 SET flowvendor = Other -SET formalverification = False -SET foundationsym = False +SET formalverification = false +SET foundationsym = false SET implementationfiletype = Ngc SET package = fg456 -SET removerpms = False +SET removerpms = false SET simulationfiles = Behavioral SET speedgrade = -5 -SET verilogsim = True -SET vhdlsim = False -SET workingdirectory = /home/matt/coregen/tmp +SET verilogsim = true +SET vhdlsim = false +SET workingdirectory = /tmp/ +# CRC: 394da717 diff --git a/usrp2/coregen/fifo_xlnx_512x36_2clk_18to36.v b/usrp2/coregen/fifo_xlnx_512x36_2clk_18to36.v index 1d7a5ca2a..32de19e8a 100644 --- a/usrp2/coregen/fifo_xlnx_512x36_2clk_18to36.v +++ b/usrp2/coregen/fifo_xlnx_512x36_2clk_18to36.v @@ -44,6 +44,7 @@ module fifo_xlnx_512x36_2clk_18to36( rst, wr_clk, wr_en, + almost_full, dout, empty, full); @@ -55,6 +56,7 @@ input rd_en; input rst; input wr_clk; input wr_en; +output almost_full; output [35 : 0] dout; output empty; output full; @@ -73,7 +75,7 @@ output full; .C_FAMILY("spartan3"), .C_FULL_FLAGS_RST_VAL(0), .C_HAS_ALMOST_EMPTY(0), - .C_HAS_ALMOST_FULL(0), + .C_HAS_ALMOST_FULL(1), .C_HAS_BACKUP(0), .C_HAS_DATA_COUNT(0), .C_HAS_INT_CLK(0), @@ -128,6 +130,7 @@ output full; .RST(rst), .WR_CLK(wr_clk), .WR_EN(wr_en), + .ALMOST_FULL(almost_full), .DOUT(dout), .EMPTY(empty), .FULL(full), @@ -145,7 +148,6 @@ output full; .SRST(), .WR_RST(), .ALMOST_EMPTY(), - .ALMOST_FULL(), .DATA_COUNT(), .OVERFLOW(), .PROG_EMPTY(), diff --git a/usrp2/coregen/fifo_xlnx_512x36_2clk_18to36.xco b/usrp2/coregen/fifo_xlnx_512x36_2clk_18to36.xco index df97fd0e0..05ceffbe9 100644 --- a/usrp2/coregen/fifo_xlnx_512x36_2clk_18to36.xco +++ b/usrp2/coregen/fifo_xlnx_512x36_2clk_18to36.xco @@ -1,7 +1,7 @@ ############################################################## # # Xilinx Core Generator version K.39 -# Date: Thu Jul 29 23:02:41 2010 +# Date: Fri Jul 30 20:43:00 2010 # ############################################################## # @@ -36,7 +36,7 @@ SELECT Fifo_Generator family Xilinx,_Inc. 4.4 # END Select # BEGIN Parameters CSET almost_empty_flag=false -CSET almost_full_flag=false +CSET almost_full_flag=true CSET component_name=fifo_xlnx_512x36_2clk_18to36 CSET data_count=false CSET data_count_width=10 @@ -78,5 +78,5 @@ CSET write_data_count=false CSET write_data_count_width=10 # END Parameters GENERATE -# CRC: 117ae77f +# CRC: 9b689ee4 diff --git a/usrp2/extramfifo/ext_fifo.v b/usrp2/extramfifo/ext_fifo.v index 55935146a..a506d71e2 100644 --- a/usrp2/extramfifo/ext_fifo.v +++ b/usrp2/extramfifo/ext_fifo.v @@ -1,3 +1,20 @@ +// +// FIFO backed by an off chip ZBT/NoBL SRAM. +// +// This module and its sub-hierarchy implment a FIFO capable of sustaining +// a data throughput rate of at least int_clk/2 * 36bits and bursts of int_clk * 36bits. +// +// This has been designed and tested for an int_clk of 100MHz and an ext_clk of 125MHz, +// your milage may vary with other clock ratio's especially those where int_clk < ext_clk. +// Testing has also exclusively used a rst signal synchronized to int_clk. +// +// Interface operation mimics a Xilinx FIFO configured as "First Word Fall Through", +// though signal naming differs. +// +// For FPGA use registers interfacing directly with signals prefixed "RAM_*" should be +// packed into the IO ring. +// + module ext_fifo #(parameter INT_WIDTH=36,EXT_WIDTH=18,DEPTH=19) ( @@ -24,25 +41,24 @@ module ext_fifo wire [EXT_WIDTH-1:0] write_data; wire [EXT_WIDTH-1:0] read_data; wire full1, empty1; - wire full2, empty2; - + wire almost_full2, full2, empty2; + wire [INT_WIDTH-1:0] data_to_fifo; + wire [INT_WIDTH-1:0] data_from_fifo; + // FIFO buffers data from UDP engine into external FIFO clock domain. fifo_xlnx_512x36_2clk_36to18 fifo_xlnx_512x36_2clk_36to18_i1 ( .rst(rst), .wr_clk(int_clk), .rd_clk(ext_clk), - .din(datain), // Bus [35 : 0] - .wr_en(src_rdy_i), - .rd_en(space_avail&~empty1), - // .rd_en(~full2&~empty1), + .din(datain), // Bus [35 : 0] + .wr_en(src_rdy_i), + .rd_en(space_avail&~empty1), .dout(write_data), // Bus [17 : 0] .full(full1), .empty(empty1)); assign dst_rdy_o = ~full1; - - // External FIFO running at ext clock rate and 18 bit width. nobl_fifo #(.WIDTH(EXT_WIDTH),.DEPTH(DEPTH)) nobl_fifo_i1 @@ -63,10 +79,10 @@ module ext_fifo .space_avail(space_avail), .read_data(read_data), .read_strobe(data_avail & ~full2), - .data_avail(data_avail) + .data_avail(data_avail), + .upstream_full(almost_full2) ); - - + // FIFO buffers data read from external FIFO into DSP clk domain and to TX DSP. fifo_xlnx_512x36_2clk_18to36 fifo_xlnx_512x36_2clk_18to36_i1 ( @@ -74,47 +90,13 @@ module ext_fifo .wr_clk(ext_clk), .rd_clk(int_clk), .din(read_data), // Bus [17 : 0] - // .din(write_data), // Bus [17 : 0] .wr_en(data_avail & ~full2 ), - // .wr_en(~full2&~empty1), .rd_en(dst_rdy_i), - .dout(dataout), // Bus [35 : 0] + .dout(dataout), // Bus [35 : 0] .full(full2), + .almost_full(almost_full2), .empty(empty2)); assign src_rdy_o = ~empty2; - - wire [35:0] CONTROL0; - reg [7:0] datain_reg,write_data_reg,read_data_reg ; - reg space_avail_reg,data_avail_reg,empty1_reg,full2_reg ; - - always @(posedge ext_clk) - begin - //datain_reg <= datain[7:0]; - write_data_reg <= write_data[7:0]; - read_data_reg <= read_data[7:0]; - space_avail_reg <= space_avail; - data_avail_reg <= data_avail; - empty1_reg <= empty1; - full2_reg <= full2; - end - - - icon icon_i1 - ( - .CONTROL0(CONTROL0) - ); - - ila ila_i1 - ( - .CLK(ext_clk), - .CONTROL(CONTROL0), - // .TRIG0(address_reg), - .TRIG0(write_data_reg[7:0]), - .TRIG1(read_data_reg[7:0]), - .TRIG2(0), - .TRIG3({space_avail_reg,data_avail_reg,empty1_reg,full2_reg}) - ); - endmodule // ext_fifo diff --git a/usrp2/extramfifo/ext_fifo_tb.v b/usrp2/extramfifo/ext_fifo_tb.v index aa1fd6e3c..38df4a285 100644 --- a/usrp2/extramfifo/ext_fifo_tb.v +++ b/usrp2/extramfifo/ext_fifo_tb.v @@ -58,18 +58,18 @@ module ext_fifo_tb(); repeat (5) @(negedge int_clk); rst <= 0; @(negedge int_clk); - repeat (1000) + repeat (4000) begin @(negedge int_clk); - datain <= datain + 1; - src_rdy_i <= 1; - @(negedge int_clk); - src_rdy_i <= 0; + datain <= datain + dst_rdy_o; + src_rdy_i <= dst_rdy_o; +// @(negedge int_clk); +// src_rdy_i <= 0; // @(negedge int_clk); // dst_rdy_i <= src_rdy_o; // @(negedge int_clk); // dst_rdy_i <= 0; - repeat (2) @(negedge int_clk); +// repeat (2) @(negedge int_clk); end // repeat (1000) // Fall through fifo, first output already valid if (dataout !== ref_dataout) @@ -77,16 +77,16 @@ module ext_fifo_tb(); repeat (1000) begin @(negedge int_clk); - datain <= datain + 1; - src_rdy_i <= 1; + datain <= datain + dst_rdy_o ; + src_rdy_i <= dst_rdy_o; @(negedge int_clk); src_rdy_i <= 0; @(negedge int_clk); - ref_dataout <= ref_dataout + 1; + ref_dataout <= ref_dataout + src_rdy_o ; dst_rdy_i <= src_rdy_o; - @(negedge int_clk); - if (dataout !== ref_dataout) + if ((dataout !== ref_dataout) && src_rdy_o) $display("Error: Expected %x, got %x",ref_dataout, dataout); + @(negedge int_clk); dst_rdy_i <= 0; // repeat (2) @(negedge int_clk); end // repeat (1000) @@ -98,11 +98,11 @@ module ext_fifo_tb(); // @(negedge int_clk); // src_rdy_i <= 0; @(negedge int_clk); - ref_dataout <= ref_dataout + 1; + ref_dataout <= ref_dataout + src_rdy_o; dst_rdy_i <= src_rdy_o; - @(negedge int_clk); - if (dataout !== ref_dataout) + if ((dataout !== ref_dataout) && src_rdy_o) $display("Error: Expected %x, got %x",ref_dataout, dataout); + @(negedge int_clk); dst_rdy_i <= 0; // repeat (2) @(negedge int_clk); end // repeat (1000) @@ -210,13 +210,7 @@ module ext_fifo_tb(); assign #2 RAM_A_ext = RAM_A; -/* -----\/----- EXCLUDED -----\/----- - wire [13:0] temp1; - assign temp1 = 14'h0; - wire [3:0] temp2; - assign temp2 = 4'h0; - -----/\----- EXCLUDED -----/\----- */ - + idt71v65603s150 idt71v65603s150_i1 ( diff --git a/usrp2/extramfifo/icon.v b/usrp2/extramfifo/icon.v new file mode 100644 index 000000000..6537e9340 --- /dev/null +++ b/usrp2/extramfifo/icon.v @@ -0,0 +1,1286 @@ +//////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 1995-2010 Xilinx, Inc. All rights reserved. +//////////////////////////////////////////////////////////////////////////////// +// ____ ____ +// / /\/ / +// /___/ \ / Vendor: Xilinx +// \ \ \/ Version: M.53d +// \ \ Application: netgen +// / / Filename: icon.v +// /___/ /\ Timestamp: Tue Jul 20 20:31:15 2010 +// \ \ / \ +// \___\/\___\ +// +// Command : -w -sim -ofmt verilog /home/ianb/ettus/sram_fifo/fpgapriv/usrp2/extramfifo/tmp/_cg/icon.ngc /home/ianb/ettus/sram_fifo/fpgapriv/usrp2/extramfifo/tmp/_cg/icon.v +// Device : xc3s2000-fg456-5 +// Input file : /home/ianb/ettus/sram_fifo/fpgapriv/usrp2/extramfifo/tmp/_cg/icon.ngc +// Output file : /home/ianb/ettus/sram_fifo/fpgapriv/usrp2/extramfifo/tmp/_cg/icon.v +// # of Modules : 1 +// Design Name : icon +// Xilinx : /opt/Xilinx/12.1/ISE_DS/ISE +// +// Purpose: +// This verilog netlist is a verification model and uses simulation +// primitives which may not represent the true implementation of the +// device, however the netlist is functionally correct and should not +// be modified. This file cannot be synthesized and should only be used +// with supported simulation tools. +// +// Reference: +// Command Line Tools User Guide, Chapter 23 and Synthesis and Simulation Design Guide, Chapter 6 +// +//////////////////////////////////////////////////////////////////////////////// + +`timescale 1 ns/1 ps + +module icon ( +CONTROL0 +)/* synthesis syn_black_box syn_noprune=1 */; + inout [35 : 0] CONTROL0; + + // synthesis translate_off + + wire N1; + wire \U0/U_ICON/I_YES_BSCAN.U_BS/DRCK1 ; + wire \U0/U_ICON/U_CMD/iSEL_n ; + wire \U0/U_ICON/U_CMD/iTARGET_CE ; + wire \U0/U_ICON/U_CTRL_OUT/iDATA_VALID ; + wire \U0/U_ICON/U_STAT/iCMD_GRP0_SEL ; + wire \U0/U_ICON/U_STAT/iDATA_VALID ; + wire \U0/U_ICON/U_STAT/iSTATCMD_CE ; + wire \U0/U_ICON/U_STAT/iSTATCMD_CE_n ; + wire \U0/U_ICON/U_STAT/iSTAT_HIGH ; + wire \U0/U_ICON/U_STAT/iSTAT_LOW ; + wire \U0/U_ICON/U_STAT/iTDO_next ; + wire \U0/U_ICON/U_SYNC/iDATA_CMD_n ; + wire \U0/U_ICON/U_SYNC/iGOT_SYNC ; + wire \U0/U_ICON/U_SYNC/iGOT_SYNC_HIGH ; + wire \U0/U_ICON/U_SYNC/iGOT_SYNC_LOW ; + wire \U0/U_ICON/U_TDO_MUX/U_CS_MUX/I4.U_MUX16/Mmux_O_3_91 ; + wire \U0/U_ICON/U_TDO_MUX/U_CS_MUX/I4.U_MUX16/Mmux_O_4_92 ; + wire \U0/U_ICON/iCORE_ID_SEL[0] ; + wire \U0/U_ICON/iCORE_ID_SEL[15] ; + wire \U0/U_ICON/iDATA_CMD ; + wire \U0/U_ICON/iDATA_CMD_n ; + wire \U0/U_ICON/iSEL ; + wire \U0/U_ICON/iSEL_n ; + wire \U0/U_ICON/iSYNC ; + wire \U0/U_ICON/iTDI ; + wire \U0/U_ICON/iTDO ; + wire \U0/U_ICON/iTDO_next ; + wire \U0/iSHIFT_OUT ; + wire \U0/iUPDATE_OUT ; + wire \NLW_U0/U_ICON/I_YES_BSCAN.U_BS/I_SPARTAN3.ISYN.I_USE_SOFTBSCAN_EQ0.I_3.U_BS_DRCK2_UNCONNECTED ; + wire \NLW_U0/U_ICON/I_YES_BSCAN.U_BS/I_SPARTAN3.ISYN.I_USE_SOFTBSCAN_EQ0.I_3.U_BS_RESET_UNCONNECTED ; + wire \NLW_U0/U_ICON/I_YES_BSCAN.U_BS/I_SPARTAN3.ISYN.I_USE_SOFTBSCAN_EQ0.I_3.U_BS_CAPTURE_UNCONNECTED ; + wire \NLW_U0/U_ICON/I_YES_BSCAN.U_BS/I_SPARTAN3.ISYN.I_USE_SOFTBSCAN_EQ0.I_3.U_BS_SEL2_UNCONNECTED ; + wire \NLW_U0/U_ICON/U_CMD/U_CORE_ID_SEL/I4.FI[1].U_LUT_O_UNCONNECTED ; + wire \NLW_U0/U_ICON/U_CMD/U_CORE_ID_SEL/I4.FI[2].U_LUT_O_UNCONNECTED ; + wire \NLW_U0/U_ICON/U_CMD/U_CORE_ID_SEL/I4.FI[3].U_LUT_O_UNCONNECTED ; + wire \NLW_U0/U_ICON/U_CMD/U_CORE_ID_SEL/I4.FI[4].U_LUT_O_UNCONNECTED ; + wire \NLW_U0/U_ICON/U_CMD/U_CORE_ID_SEL/I4.FI[5].U_LUT_O_UNCONNECTED ; + wire \NLW_U0/U_ICON/U_CMD/U_CORE_ID_SEL/I4.FI[6].U_LUT_O_UNCONNECTED ; + wire \NLW_U0/U_ICON/U_CMD/U_CORE_ID_SEL/I4.FI[7].U_LUT_O_UNCONNECTED ; + wire \NLW_U0/U_ICON/U_CMD/U_CORE_ID_SEL/I4.FI[8].U_LUT_O_UNCONNECTED ; + wire \NLW_U0/U_ICON/U_CMD/U_CORE_ID_SEL/I4.FI[9].U_LUT_O_UNCONNECTED ; + wire \NLW_U0/U_ICON/U_CMD/U_CORE_ID_SEL/I4.FI[10].U_LUT_O_UNCONNECTED ; + wire \NLW_U0/U_ICON/U_CMD/U_CORE_ID_SEL/I4.FI[11].U_LUT_O_UNCONNECTED ; + wire \NLW_U0/U_ICON/U_CMD/U_CORE_ID_SEL/I4.FI[12].U_LUT_O_UNCONNECTED ; + wire \NLW_U0/U_ICON/U_CMD/U_CORE_ID_SEL/I4.FI[13].U_LUT_O_UNCONNECTED ; + wire \NLW_U0/U_ICON/U_CMD/U_CORE_ID_SEL/I4.FI[14].U_LUT_O_UNCONNECTED ; + wire [11 : 8] \U0/U_ICON/U_CMD/iTARGET ; + wire [1 : 0] \U0/U_ICON/U_CTRL_OUT/iCOMMAND_GRP_SEL ; + wire [5 : 1] \U0/U_ICON/U_STAT/U_STAT_CNT/CI ; + wire [5 : 0] \U0/U_ICON/U_STAT/U_STAT_CNT/D ; + wire [5 : 0] \U0/U_ICON/U_STAT/U_STAT_CNT/S ; + wire [3 : 0] \U0/U_ICON/U_STAT/iSTAT ; + wire [5 : 0] \U0/U_ICON/U_STAT/iSTAT_CNT ; + wire [6 : 0] \U0/U_ICON/U_SYNC/iSYNC_WORD ; + wire [1 : 0] \U0/U_ICON/iCOMMAND_GRP ; + wire [15 : 0] \U0/U_ICON/iCOMMAND_SEL ; + wire [3 : 0] \U0/U_ICON/iCORE_ID ; + wire [15 : 15] \U0/U_ICON/iTDO_VEC ; + GND XST_GND ( + .G(CONTROL0[2]) + ); + VCC XST_VCC ( + .P(N1) + ); + FDE #( + .INIT ( 1'b0 )) + \U0/U_ICON/U_TDI_reg ( + .C(CONTROL0[0]), + .CE(N1), + .D(\U0/U_ICON/iTDI ), + .Q(CONTROL0[1]) + ); + FDE #( + .INIT ( 1'b0 )) + \U0/U_ICON/U_TDO_reg ( + .C(CONTROL0[0]), + .CE(N1), + .D(\U0/U_ICON/iTDO_next ), + .Q(\U0/U_ICON/iTDO ) + ); + FDC #( + .INIT ( 1'b0 )) + \U0/U_ICON/U_iDATA_CMD ( + .C(\U0/iUPDATE_OUT ), + .CLR(\U0/U_ICON/iSEL_n ), + .D(\U0/U_ICON/iDATA_CMD_n ), + .Q(\U0/U_ICON/iDATA_CMD ) + ); + MUXF5 \U0/U_ICON/U_TDO_MUX/U_CS_MUX/I4.U_MUX16/Mmux_O_2_f5 ( + .I0(\U0/U_ICON/U_TDO_MUX/U_CS_MUX/I4.U_MUX16/Mmux_O_4_92 ), + .I1(\U0/U_ICON/U_TDO_MUX/U_CS_MUX/I4.U_MUX16/Mmux_O_3_91 ), + .S(\U0/U_ICON/iCORE_ID [3]), + .O(\U0/U_ICON/iTDO_next ) + ); + LUT4 #( + .INIT ( 16'h0002 )) + \U0/U_ICON/U_TDO_MUX/U_CS_MUX/I4.U_MUX16/Mmux_O_4 ( + .I0(CONTROL0[3]), + .I1(\U0/U_ICON/iCORE_ID [0]), + .I2(\U0/U_ICON/iCORE_ID [1]), + .I3(\U0/U_ICON/iCORE_ID [2]), + .O(\U0/U_ICON/U_TDO_MUX/U_CS_MUX/I4.U_MUX16/Mmux_O_4_92 ) + ); + LUT4 #( + .INIT ( 16'h8000 )) + \U0/U_ICON/U_TDO_MUX/U_CS_MUX/I4.U_MUX16/Mmux_O_3 ( + .I0(\U0/U_ICON/iTDO_VEC [15]), + .I1(\U0/U_ICON/iCORE_ID [0]), + .I2(\U0/U_ICON/iCORE_ID [1]), + .I3(\U0/U_ICON/iCORE_ID [2]), + .O(\U0/U_ICON/U_TDO_MUX/U_CS_MUX/I4.U_MUX16/Mmux_O_3_91 ) + ); + INV \U0/U_ICON/U_iSEL_n ( + .I(\U0/U_ICON/iSEL ), + .O(\U0/U_ICON/iSEL_n ) + ); + INV \U0/U_ICON/U_iDATA_CMD_n ( + .I(\U0/U_ICON/iDATA_CMD ), + .O(\U0/U_ICON/iDATA_CMD_n ) + ); + BSCAN_SPARTAN3 \U0/U_ICON/I_YES_BSCAN.U_BS/I_SPARTAN3.ISYN.I_USE_SOFTBSCAN_EQ0.I_3.U_BS ( + .TDI(\U0/U_ICON/iTDI ), + .SHIFT(\U0/iSHIFT_OUT ), + .DRCK1(\U0/U_ICON/I_YES_BSCAN.U_BS/DRCK1 ), + .DRCK2(\NLW_U0/U_ICON/I_YES_BSCAN.U_BS/I_SPARTAN3.ISYN.I_USE_SOFTBSCAN_EQ0.I_3.U_BS_DRCK2_UNCONNECTED ), + .RESET(\NLW_U0/U_ICON/I_YES_BSCAN.U_BS/I_SPARTAN3.ISYN.I_USE_SOFTBSCAN_EQ0.I_3.U_BS_RESET_UNCONNECTED ), + .UPDATE(\U0/iUPDATE_OUT ), + .TDO1(\U0/U_ICON/iTDO ), + .TDO2(CONTROL0[2]), + .CAPTURE(\NLW_U0/U_ICON/I_YES_BSCAN.U_BS/I_SPARTAN3.ISYN.I_USE_SOFTBSCAN_EQ0.I_3.U_BS_CAPTURE_UNCONNECTED ), + .SEL1(\U0/U_ICON/iSEL ), + .SEL2(\NLW_U0/U_ICON/I_YES_BSCAN.U_BS/I_SPARTAN3.ISYN.I_USE_SOFTBSCAN_EQ0.I_3.U_BS_SEL2_UNCONNECTED ) + ); + icon_bscan_bufg \U0/U_ICON/I_YES_BSCAN.U_BS/I_USE_SOFTBSCAN_EQ0.I_USE_XST_TCK_WORKAROUND_EQ1.U_ICON_BSCAN_BUFG ( + .DRCK_LOCAL_I(\U0/U_ICON/I_YES_BSCAN.U_BS/DRCK1 ), + .DRCK_LOCAL_O(CONTROL0[0]) + ); + LUT2 #( + .INIT ( 4'h8 )) + \U0/U_ICON/U_SYNC/U_GOT_SYNC ( + .I0(\U0/U_ICON/U_SYNC/iGOT_SYNC_LOW ), + .I1(\U0/U_ICON/U_SYNC/iGOT_SYNC_HIGH ), + .O(\U0/U_ICON/U_SYNC/iGOT_SYNC ) + ); + LUT4 #( + .INIT ( 16'h0200 )) + \U0/U_ICON/U_SYNC/U_GOT_SYNC_L ( + .I0(\U0/U_ICON/U_SYNC/iSYNC_WORD [0]), + .I1(\U0/U_ICON/U_SYNC/iSYNC_WORD [1]), + .I2(\U0/U_ICON/U_SYNC/iSYNC_WORD [2]), + .I3(\U0/U_ICON/U_SYNC/iSYNC_WORD [3]), + .O(\U0/U_ICON/U_SYNC/iGOT_SYNC_LOW ) + ); + LUT4 #( + .INIT ( 16'h0400 )) + \U0/U_ICON/U_SYNC/U_GOT_SYNC_H ( + .I0(\U0/U_ICON/U_SYNC/iSYNC_WORD [4]), + .I1(\U0/U_ICON/U_SYNC/iSYNC_WORD [5]), + .I2(\U0/U_ICON/U_SYNC/iSYNC_WORD [6]), + .I3(CONTROL0[1]), + .O(\U0/U_ICON/U_SYNC/iGOT_SYNC_HIGH ) + ); + INV \U0/U_ICON/U_SYNC/U_iDATA_CMD_n ( + .I(\U0/U_ICON/iDATA_CMD ), + .O(\U0/U_ICON/U_SYNC/iDATA_CMD_n ) + ); + FDRE #( + .INIT ( 1'b0 )) + \U0/U_ICON/U_SYNC/U_SYNC ( + .C(CONTROL0[0]), + .CE(\U0/U_ICON/U_SYNC/iGOT_SYNC ), + .D(N1), + .R(\U0/U_ICON/U_SYNC/iDATA_CMD_n ), + .Q(\U0/U_ICON/iSYNC ) + ); + FDR #( + .INIT ( 1'b0 )) + \U0/U_ICON/U_SYNC/G_SYNC_WORD[0].I_NE0.U_FDR ( + .C(CONTROL0[0]), + .D(\U0/U_ICON/U_SYNC/iSYNC_WORD [1]), + .R(\U0/U_ICON/U_SYNC/iDATA_CMD_n ), + .Q(\U0/U_ICON/U_SYNC/iSYNC_WORD [0]) + ); + FDR #( + .INIT ( 1'b0 )) + \U0/U_ICON/U_SYNC/G_SYNC_WORD[1].I_NE0.U_FDR ( + .C(CONTROL0[0]), + .D(\U0/U_ICON/U_SYNC/iSYNC_WORD [2]), + .R(\U0/U_ICON/U_SYNC/iDATA_CMD_n ), + .Q(\U0/U_ICON/U_SYNC/iSYNC_WORD [1]) + ); + FDR #( + .INIT ( 1'b0 )) + \U0/U_ICON/U_SYNC/G_SYNC_WORD[2].I_NE0.U_FDR ( + .C(CONTROL0[0]), + .D(\U0/U_ICON/U_SYNC/iSYNC_WORD [3]), + .R(\U0/U_ICON/U_SYNC/iDATA_CMD_n ), + .Q(\U0/U_ICON/U_SYNC/iSYNC_WORD [2]) + ); + FDR #( + .INIT ( 1'b0 )) + \U0/U_ICON/U_SYNC/G_SYNC_WORD[3].I_NE0.U_FDR ( + .C(CONTROL0[0]), + .D(\U0/U_ICON/U_SYNC/iSYNC_WORD [4]), + .R(\U0/U_ICON/U_SYNC/iDATA_CMD_n ), + .Q(\U0/U_ICON/U_SYNC/iSYNC_WORD [3]) + ); + FDR #( + .INIT ( 1'b0 )) + \U0/U_ICON/U_SYNC/G_SYNC_WORD[4].I_NE0.U_FDR ( + .C(CONTROL0[0]), + .D(\U0/U_ICON/U_SYNC/iSYNC_WORD [5]), + .R(\U0/U_ICON/U_SYNC/iDATA_CMD_n ), + .Q(\U0/U_ICON/U_SYNC/iSYNC_WORD [4]) + ); + FDR #( + .INIT ( 1'b0 )) + \U0/U_ICON/U_SYNC/G_SYNC_WORD[5].I_NE0.U_FDR ( + .C(CONTROL0[0]), + .D(\U0/U_ICON/U_SYNC/iSYNC_WORD [6]), + .R(\U0/U_ICON/U_SYNC/iDATA_CMD_n ), + .Q(\U0/U_ICON/U_SYNC/iSYNC_WORD [5]) + ); + FDR #( + .INIT ( 1'b0 )) + \U0/U_ICON/U_SYNC/G_SYNC_WORD[6].I_EQ0.U_FDR ( + .C(CONTROL0[0]), + .D(CONTROL0[1]), + .R(\U0/U_ICON/U_SYNC/iDATA_CMD_n ), + .Q(\U0/U_ICON/U_SYNC/iSYNC_WORD [6]) + ); + LUT4 #( + .INIT ( 16'h8000 )) + \U0/U_ICON/U_CTRL_OUT/F_NCP[0].F_CMD[0].U_HCE ( + .I0(\U0/U_ICON/U_CTRL_OUT/iDATA_VALID ), + .I1(\U0/U_ICON/iCOMMAND_SEL [0]), + .I2(\U0/U_ICON/iCORE_ID_SEL[0] ), + .I3(\U0/U_ICON/U_CTRL_OUT/iCOMMAND_GRP_SEL [1]), + .O(CONTROL0[20]) + ); + LUT4 #( + .INIT ( 16'h8000 )) + \U0/U_ICON/U_CTRL_OUT/F_NCP[0].F_CMD[0].U_LCE ( + .I0(\U0/U_ICON/U_CTRL_OUT/iDATA_VALID ), + .I1(\U0/U_ICON/iCOMMAND_SEL [0]), + .I2(\U0/U_ICON/iCORE_ID_SEL[0] ), + .I3(\U0/U_ICON/U_CTRL_OUT/iCOMMAND_GRP_SEL [0]), + .O(CONTROL0[4]) + ); + LUT4 #( + .INIT ( 16'h8000 )) + \U0/U_ICON/U_CTRL_OUT/F_NCP[0].F_CMD[1].U_HCE ( + .I0(\U0/U_ICON/U_CTRL_OUT/iDATA_VALID ), + .I1(\U0/U_ICON/iCOMMAND_SEL [1]), + .I2(\U0/U_ICON/iCORE_ID_SEL[0] ), + .I3(\U0/U_ICON/U_CTRL_OUT/iCOMMAND_GRP_SEL [1]), + .O(CONTROL0[21]) + ); + LUT4 #( + .INIT ( 16'h8000 )) + \U0/U_ICON/U_CTRL_OUT/F_NCP[0].F_CMD[1].U_LCE ( + .I0(\U0/U_ICON/U_CTRL_OUT/iDATA_VALID ), + .I1(\U0/U_ICON/iCOMMAND_SEL [1]), + .I2(\U0/U_ICON/iCORE_ID_SEL[0] ), + .I3(\U0/U_ICON/U_CTRL_OUT/iCOMMAND_GRP_SEL [0]), + .O(CONTROL0[5]) + ); + LUT4 #( + .INIT ( 16'h8000 )) + \U0/U_ICON/U_CTRL_OUT/F_NCP[0].F_CMD[2].U_HCE ( + .I0(\U0/U_ICON/U_CTRL_OUT/iDATA_VALID ), + .I1(\U0/U_ICON/iCOMMAND_SEL [2]), + .I2(\U0/U_ICON/iCORE_ID_SEL[0] ), + .I3(\U0/U_ICON/U_CTRL_OUT/iCOMMAND_GRP_SEL [1]), + .O(CONTROL0[22]) + ); + LUT4 #( + .INIT ( 16'h8000 )) + \U0/U_ICON/U_CTRL_OUT/F_NCP[0].F_CMD[2].U_LCE ( + .I0(\U0/U_ICON/U_CTRL_OUT/iDATA_VALID ), + .I1(\U0/U_ICON/iCOMMAND_SEL [2]), + .I2(\U0/U_ICON/iCORE_ID_SEL[0] ), + .I3(\U0/U_ICON/U_CTRL_OUT/iCOMMAND_GRP_SEL [0]), + .O(CONTROL0[6]) + ); + LUT4 #( + .INIT ( 16'h8000 )) + \U0/U_ICON/U_CTRL_OUT/F_NCP[0].F_CMD[3].U_HCE ( + .I0(\U0/U_ICON/U_CTRL_OUT/iDATA_VALID ), + .I1(\U0/U_ICON/iCOMMAND_SEL [3]), + .I2(\U0/U_ICON/iCORE_ID_SEL[0] ), + .I3(\U0/U_ICON/U_CTRL_OUT/iCOMMAND_GRP_SEL [1]), + .O(CONTROL0[23]) + ); + LUT4 #( + .INIT ( 16'h8000 )) + \U0/U_ICON/U_CTRL_OUT/F_NCP[0].F_CMD[3].U_LCE ( + .I0(\U0/U_ICON/U_CTRL_OUT/iDATA_VALID ), + .I1(\U0/U_ICON/iCOMMAND_SEL [3]), + .I2(\U0/U_ICON/iCORE_ID_SEL[0] ), + .I3(\U0/U_ICON/U_CTRL_OUT/iCOMMAND_GRP_SEL [0]), + .O(CONTROL0[7]) + ); + LUT4 #( + .INIT ( 16'h8000 )) + \U0/U_ICON/U_CTRL_OUT/F_NCP[0].F_CMD[4].U_HCE ( + .I0(\U0/U_ICON/U_CTRL_OUT/iDATA_VALID ), + .I1(\U0/U_ICON/iCOMMAND_SEL [4]), + .I2(\U0/U_ICON/iCORE_ID_SEL[0] ), + .I3(\U0/U_ICON/U_CTRL_OUT/iCOMMAND_GRP_SEL [1]), + .O(CONTROL0[24]) + ); + LUT4 #( + .INIT ( 16'h8000 )) + \U0/U_ICON/U_CTRL_OUT/F_NCP[0].F_CMD[4].U_LCE ( + .I0(\U0/U_ICON/U_CTRL_OUT/iDATA_VALID ), + .I1(\U0/U_ICON/iCOMMAND_SEL [4]), + .I2(\U0/U_ICON/iCORE_ID_SEL[0] ), + .I3(\U0/U_ICON/U_CTRL_OUT/iCOMMAND_GRP_SEL [0]), + .O(CONTROL0[8]) + ); + LUT4 #( + .INIT ( 16'h8000 )) + \U0/U_ICON/U_CTRL_OUT/F_NCP[0].F_CMD[5].U_HCE ( + .I0(\U0/U_ICON/U_CTRL_OUT/iDATA_VALID ), + .I1(\U0/U_ICON/iCOMMAND_SEL [5]), + .I2(\U0/U_ICON/iCORE_ID_SEL[0] ), + .I3(\U0/U_ICON/U_CTRL_OUT/iCOMMAND_GRP_SEL [1]), + .O(CONTROL0[25]) + ); + LUT4 #( + .INIT ( 16'h8000 )) + \U0/U_ICON/U_CTRL_OUT/F_NCP[0].F_CMD[5].U_LCE ( + .I0(\U0/U_ICON/U_CTRL_OUT/iDATA_VALID ), + .I1(\U0/U_ICON/iCOMMAND_SEL [5]), + .I2(\U0/U_ICON/iCORE_ID_SEL[0] ), + .I3(\U0/U_ICON/U_CTRL_OUT/iCOMMAND_GRP_SEL [0]), + .O(CONTROL0[9]) + ); + LUT4 #( + .INIT ( 16'h8000 )) + \U0/U_ICON/U_CTRL_OUT/F_NCP[0].F_CMD[6].U_HCE ( + .I0(\U0/U_ICON/U_CTRL_OUT/iDATA_VALID ), + .I1(\U0/U_ICON/iCOMMAND_SEL [6]), + .I2(\U0/U_ICON/iCORE_ID_SEL[0] ), + .I3(\U0/U_ICON/U_CTRL_OUT/iCOMMAND_GRP_SEL [1]), + .O(CONTROL0[26]) + ); + LUT4 #( + .INIT ( 16'h8000 )) + \U0/U_ICON/U_CTRL_OUT/F_NCP[0].F_CMD[6].U_LCE ( + .I0(\U0/U_ICON/U_CTRL_OUT/iDATA_VALID ), + .I1(\U0/U_ICON/iCOMMAND_SEL [6]), + .I2(\U0/U_ICON/iCORE_ID_SEL[0] ), + .I3(\U0/U_ICON/U_CTRL_OUT/iCOMMAND_GRP_SEL [0]), + .O(CONTROL0[10]) + ); + LUT4 #( + .INIT ( 16'h8000 )) + \U0/U_ICON/U_CTRL_OUT/F_NCP[0].F_CMD[7].U_HCE ( + .I0(\U0/U_ICON/U_CTRL_OUT/iDATA_VALID ), + .I1(\U0/U_ICON/iCOMMAND_SEL [7]), + .I2(\U0/U_ICON/iCORE_ID_SEL[0] ), + .I3(\U0/U_ICON/U_CTRL_OUT/iCOMMAND_GRP_SEL [1]), + .O(CONTROL0[27]) + ); + LUT4 #( + .INIT ( 16'h8000 )) + \U0/U_ICON/U_CTRL_OUT/F_NCP[0].F_CMD[7].U_LCE ( + .I0(\U0/U_ICON/U_CTRL_OUT/iDATA_VALID ), + .I1(\U0/U_ICON/iCOMMAND_SEL [7]), + .I2(\U0/U_ICON/iCORE_ID_SEL[0] ), + .I3(\U0/U_ICON/U_CTRL_OUT/iCOMMAND_GRP_SEL [0]), + .O(CONTROL0[11]) + ); + LUT4 #( + .INIT ( 16'h8000 )) + \U0/U_ICON/U_CTRL_OUT/F_NCP[0].F_CMD[8].U_HCE ( + .I0(\U0/U_ICON/U_CTRL_OUT/iDATA_VALID ), + .I1(\U0/U_ICON/iCOMMAND_SEL [8]), + .I2(\U0/U_ICON/iCORE_ID_SEL[0] ), + .I3(\U0/U_ICON/U_CTRL_OUT/iCOMMAND_GRP_SEL [1]), + .O(CONTROL0[28]) + ); + LUT4 #( + .INIT ( 16'h8000 )) + \U0/U_ICON/U_CTRL_OUT/F_NCP[0].F_CMD[8].U_LCE ( + .I0(\U0/U_ICON/U_CTRL_OUT/iDATA_VALID ), + .I1(\U0/U_ICON/iCOMMAND_SEL [8]), + .I2(\U0/U_ICON/iCORE_ID_SEL[0] ), + .I3(\U0/U_ICON/U_CTRL_OUT/iCOMMAND_GRP_SEL [0]), + .O(CONTROL0[12]) + ); + LUT4 #( + .INIT ( 16'h8000 )) + \U0/U_ICON/U_CTRL_OUT/F_NCP[0].F_CMD[9].U_HCE ( + .I0(\U0/U_ICON/U_CTRL_OUT/iDATA_VALID ), + .I1(\U0/U_ICON/iCOMMAND_SEL [9]), + .I2(\U0/U_ICON/iCORE_ID_SEL[0] ), + .I3(\U0/U_ICON/U_CTRL_OUT/iCOMMAND_GRP_SEL [1]), + .O(CONTROL0[29]) + ); + LUT4 #( + .INIT ( 16'h8000 )) + \U0/U_ICON/U_CTRL_OUT/F_NCP[0].F_CMD[9].U_LCE ( + .I0(\U0/U_ICON/U_CTRL_OUT/iDATA_VALID ), + .I1(\U0/U_ICON/iCOMMAND_SEL [9]), + .I2(\U0/U_ICON/iCORE_ID_SEL[0] ), + .I3(\U0/U_ICON/U_CTRL_OUT/iCOMMAND_GRP_SEL [0]), + .O(CONTROL0[13]) + ); + LUT4 #( + .INIT ( 16'h8000 )) + \U0/U_ICON/U_CTRL_OUT/F_NCP[0].F_CMD[10].U_HCE ( + .I0(\U0/U_ICON/U_CTRL_OUT/iDATA_VALID ), + .I1(\U0/U_ICON/iCOMMAND_SEL [10]), + .I2(\U0/U_ICON/iCORE_ID_SEL[0] ), + .I3(\U0/U_ICON/U_CTRL_OUT/iCOMMAND_GRP_SEL [1]), + .O(CONTROL0[30]) + ); + LUT4 #( + .INIT ( 16'h8000 )) + \U0/U_ICON/U_CTRL_OUT/F_NCP[0].F_CMD[10].U_LCE ( + .I0(\U0/U_ICON/U_CTRL_OUT/iDATA_VALID ), + .I1(\U0/U_ICON/iCOMMAND_SEL [10]), + .I2(\U0/U_ICON/iCORE_ID_SEL[0] ), + .I3(\U0/U_ICON/U_CTRL_OUT/iCOMMAND_GRP_SEL [0]), + .O(CONTROL0[14]) + ); + LUT4 #( + .INIT ( 16'h8000 )) + \U0/U_ICON/U_CTRL_OUT/F_NCP[0].F_CMD[11].U_HCE ( + .I0(\U0/U_ICON/U_CTRL_OUT/iDATA_VALID ), + .I1(\U0/U_ICON/iCOMMAND_SEL [11]), + .I2(\U0/U_ICON/iCORE_ID_SEL[0] ), + .I3(\U0/U_ICON/U_CTRL_OUT/iCOMMAND_GRP_SEL [1]), + .O(CONTROL0[31]) + ); + LUT4 #( + .INIT ( 16'h8000 )) + \U0/U_ICON/U_CTRL_OUT/F_NCP[0].F_CMD[11].U_LCE ( + .I0(\U0/U_ICON/U_CTRL_OUT/iDATA_VALID ), + .I1(\U0/U_ICON/iCOMMAND_SEL [11]), + .I2(\U0/U_ICON/iCORE_ID_SEL[0] ), + .I3(\U0/U_ICON/U_CTRL_OUT/iCOMMAND_GRP_SEL [0]), + .O(CONTROL0[15]) + ); + LUT4 #( + .INIT ( 16'h8000 )) + \U0/U_ICON/U_CTRL_OUT/F_NCP[0].F_CMD[12].U_HCE ( + .I0(\U0/U_ICON/U_CTRL_OUT/iDATA_VALID ), + .I1(\U0/U_ICON/iCOMMAND_SEL [12]), + .I2(\U0/U_ICON/iCORE_ID_SEL[0] ), + .I3(\U0/U_ICON/U_CTRL_OUT/iCOMMAND_GRP_SEL [1]), + .O(CONTROL0[32]) + ); + LUT4 #( + .INIT ( 16'h8000 )) + \U0/U_ICON/U_CTRL_OUT/F_NCP[0].F_CMD[12].U_LCE ( + .I0(\U0/U_ICON/U_CTRL_OUT/iDATA_VALID ), + .I1(\U0/U_ICON/iCOMMAND_SEL [12]), + .I2(\U0/U_ICON/iCORE_ID_SEL[0] ), + .I3(\U0/U_ICON/U_CTRL_OUT/iCOMMAND_GRP_SEL [0]), + .O(CONTROL0[16]) + ); + LUT4 #( + .INIT ( 16'h8000 )) + \U0/U_ICON/U_CTRL_OUT/F_NCP[0].F_CMD[13].U_HCE ( + .I0(\U0/U_ICON/U_CTRL_OUT/iDATA_VALID ), + .I1(\U0/U_ICON/iCOMMAND_SEL [13]), + .I2(\U0/U_ICON/iCORE_ID_SEL[0] ), + .I3(\U0/U_ICON/U_CTRL_OUT/iCOMMAND_GRP_SEL [1]), + .O(CONTROL0[33]) + ); + LUT4 #( + .INIT ( 16'h8000 )) + \U0/U_ICON/U_CTRL_OUT/F_NCP[0].F_CMD[13].U_LCE ( + .I0(\U0/U_ICON/U_CTRL_OUT/iDATA_VALID ), + .I1(\U0/U_ICON/iCOMMAND_SEL [13]), + .I2(\U0/U_ICON/iCORE_ID_SEL[0] ), + .I3(\U0/U_ICON/U_CTRL_OUT/iCOMMAND_GRP_SEL [0]), + .O(CONTROL0[17]) + ); + LUT4 #( + .INIT ( 16'h8000 )) + \U0/U_ICON/U_CTRL_OUT/F_NCP[0].F_CMD[14].U_HCE ( + .I0(\U0/U_ICON/U_CTRL_OUT/iDATA_VALID ), + .I1(\U0/U_ICON/iCOMMAND_SEL [14]), + .I2(\U0/U_ICON/iCORE_ID_SEL[0] ), + .I3(\U0/U_ICON/U_CTRL_OUT/iCOMMAND_GRP_SEL [1]), + .O(CONTROL0[34]) + ); + LUT4 #( + .INIT ( 16'h8000 )) + \U0/U_ICON/U_CTRL_OUT/F_NCP[0].F_CMD[14].U_LCE ( + .I0(\U0/U_ICON/U_CTRL_OUT/iDATA_VALID ), + .I1(\U0/U_ICON/iCOMMAND_SEL [14]), + .I2(\U0/U_ICON/iCORE_ID_SEL[0] ), + .I3(\U0/U_ICON/U_CTRL_OUT/iCOMMAND_GRP_SEL [0]), + .O(CONTROL0[18]) + ); + LUT4 #( + .INIT ( 16'h8000 )) + \U0/U_ICON/U_CTRL_OUT/F_NCP[0].F_CMD[15].U_HCE ( + .I0(\U0/U_ICON/U_CTRL_OUT/iDATA_VALID ), + .I1(\U0/U_ICON/iCOMMAND_SEL [15]), + .I2(\U0/U_ICON/iCORE_ID_SEL[0] ), + .I3(\U0/U_ICON/U_CTRL_OUT/iCOMMAND_GRP_SEL [1]), + .O(CONTROL0[35]) + ); + LUT4 #( + .INIT ( 16'h8000 )) + \U0/U_ICON/U_CTRL_OUT/F_NCP[0].F_CMD[15].U_LCE ( + .I0(\U0/U_ICON/U_CTRL_OUT/iDATA_VALID ), + .I1(\U0/U_ICON/iCOMMAND_SEL [15]), + .I2(\U0/U_ICON/iCORE_ID_SEL[0] ), + .I3(\U0/U_ICON/U_CTRL_OUT/iCOMMAND_GRP_SEL [0]), + .O(CONTROL0[19]) + ); + LUT2 #( + .INIT ( 4'h2 )) + \U0/U_ICON/U_CTRL_OUT/U_CMDGRP1 ( + .I0(\U0/U_ICON/iCOMMAND_GRP [0]), + .I1(\U0/U_ICON/iCOMMAND_GRP [1]), + .O(\U0/U_ICON/U_CTRL_OUT/iCOMMAND_GRP_SEL [1]) + ); + LUT2 #( + .INIT ( 4'h1 )) + \U0/U_ICON/U_CTRL_OUT/U_CMDGRP0 ( + .I0(\U0/U_ICON/iCOMMAND_GRP [0]), + .I1(\U0/U_ICON/iCOMMAND_GRP [1]), + .O(\U0/U_ICON/U_CTRL_OUT/iCOMMAND_GRP_SEL [0]) + ); + LUT2 #( + .INIT ( 4'h8 )) + \U0/U_ICON/U_CTRL_OUT/U_DATA_VALID ( + .I0(\U0/U_ICON/iSYNC ), + .I1(\U0/iSHIFT_OUT ), + .O(\U0/U_ICON/U_CTRL_OUT/iDATA_VALID ) + ); + LUT4 #( + .INIT ( 16'h0001 )) + \U0/U_ICON/U_CMD/U_CORE_ID_SEL/I4.FI[0].U_LUT ( + .I0(\U0/U_ICON/iCORE_ID [0]), + .I1(\U0/U_ICON/iCORE_ID [1]), + .I2(\U0/U_ICON/iCORE_ID [2]), + .I3(\U0/U_ICON/iCORE_ID [3]), + .O(\U0/U_ICON/iCORE_ID_SEL[0] ) + ); + LUT4 #( + .INIT ( 16'h0002 )) + \U0/U_ICON/U_CMD/U_CORE_ID_SEL/I4.FI[1].U_LUT ( + .I0(\U0/U_ICON/iCORE_ID [0]), + .I1(\U0/U_ICON/iCORE_ID [1]), + .I2(\U0/U_ICON/iCORE_ID [2]), + .I3(\U0/U_ICON/iCORE_ID [3]), + .O(\NLW_U0/U_ICON/U_CMD/U_CORE_ID_SEL/I4.FI[1].U_LUT_O_UNCONNECTED ) + ); + LUT4 #( + .INIT ( 16'h0004 )) + \U0/U_ICON/U_CMD/U_CORE_ID_SEL/I4.FI[2].U_LUT ( + .I0(\U0/U_ICON/iCORE_ID [0]), + .I1(\U0/U_ICON/iCORE_ID [1]), + .I2(\U0/U_ICON/iCORE_ID [2]), + .I3(\U0/U_ICON/iCORE_ID [3]), + .O(\NLW_U0/U_ICON/U_CMD/U_CORE_ID_SEL/I4.FI[2].U_LUT_O_UNCONNECTED ) + ); + LUT4 #( + .INIT ( 16'h0008 )) + \U0/U_ICON/U_CMD/U_CORE_ID_SEL/I4.FI[3].U_LUT ( + .I0(\U0/U_ICON/iCORE_ID [0]), + .I1(\U0/U_ICON/iCORE_ID [1]), + .I2(\U0/U_ICON/iCORE_ID [2]), + .I3(\U0/U_ICON/iCORE_ID [3]), + .O(\NLW_U0/U_ICON/U_CMD/U_CORE_ID_SEL/I4.FI[3].U_LUT_O_UNCONNECTED ) + ); + LUT4 #( + .INIT ( 16'h0010 )) + \U0/U_ICON/U_CMD/U_CORE_ID_SEL/I4.FI[4].U_LUT ( + .I0(\U0/U_ICON/iCORE_ID [0]), + .I1(\U0/U_ICON/iCORE_ID [1]), + .I2(\U0/U_ICON/iCORE_ID [2]), + .I3(\U0/U_ICON/iCORE_ID [3]), + .O(\NLW_U0/U_ICON/U_CMD/U_CORE_ID_SEL/I4.FI[4].U_LUT_O_UNCONNECTED ) + ); + LUT4 #( + .INIT ( 16'h0020 )) + \U0/U_ICON/U_CMD/U_CORE_ID_SEL/I4.FI[5].U_LUT ( + .I0(\U0/U_ICON/iCORE_ID [0]), + .I1(\U0/U_ICON/iCORE_ID [1]), + .I2(\U0/U_ICON/iCORE_ID [2]), + .I3(\U0/U_ICON/iCORE_ID [3]), + .O(\NLW_U0/U_ICON/U_CMD/U_CORE_ID_SEL/I4.FI[5].U_LUT_O_UNCONNECTED ) + ); + LUT4 #( + .INIT ( 16'h0040 )) + \U0/U_ICON/U_CMD/U_CORE_ID_SEL/I4.FI[6].U_LUT ( + .I0(\U0/U_ICON/iCORE_ID [0]), + .I1(\U0/U_ICON/iCORE_ID [1]), + .I2(\U0/U_ICON/iCORE_ID [2]), + .I3(\U0/U_ICON/iCORE_ID [3]), + .O(\NLW_U0/U_ICON/U_CMD/U_CORE_ID_SEL/I4.FI[6].U_LUT_O_UNCONNECTED ) + ); + LUT4 #( + .INIT ( 16'h0080 )) + \U0/U_ICON/U_CMD/U_CORE_ID_SEL/I4.FI[7].U_LUT ( + .I0(\U0/U_ICON/iCORE_ID [0]), + .I1(\U0/U_ICON/iCORE_ID [1]), + .I2(\U0/U_ICON/iCORE_ID [2]), + .I3(\U0/U_ICON/iCORE_ID [3]), + .O(\NLW_U0/U_ICON/U_CMD/U_CORE_ID_SEL/I4.FI[7].U_LUT_O_UNCONNECTED ) + ); + LUT4 #( + .INIT ( 16'h0100 )) + \U0/U_ICON/U_CMD/U_CORE_ID_SEL/I4.FI[8].U_LUT ( + .I0(\U0/U_ICON/iCORE_ID [0]), + .I1(\U0/U_ICON/iCORE_ID [1]), + .I2(\U0/U_ICON/iCORE_ID [2]), + .I3(\U0/U_ICON/iCORE_ID [3]), + .O(\NLW_U0/U_ICON/U_CMD/U_CORE_ID_SEL/I4.FI[8].U_LUT_O_UNCONNECTED ) + ); + LUT4 #( + .INIT ( 16'h0200 )) + \U0/U_ICON/U_CMD/U_CORE_ID_SEL/I4.FI[9].U_LUT ( + .I0(\U0/U_ICON/iCORE_ID [0]), + .I1(\U0/U_ICON/iCORE_ID [1]), + .I2(\U0/U_ICON/iCORE_ID [2]), + .I3(\U0/U_ICON/iCORE_ID [3]), + .O(\NLW_U0/U_ICON/U_CMD/U_CORE_ID_SEL/I4.FI[9].U_LUT_O_UNCONNECTED ) + ); + LUT4 #( + .INIT ( 16'h0400 )) + \U0/U_ICON/U_CMD/U_CORE_ID_SEL/I4.FI[10].U_LUT ( + .I0(\U0/U_ICON/iCORE_ID [0]), + .I1(\U0/U_ICON/iCORE_ID [1]), + .I2(\U0/U_ICON/iCORE_ID [2]), + .I3(\U0/U_ICON/iCORE_ID [3]), + .O(\NLW_U0/U_ICON/U_CMD/U_CORE_ID_SEL/I4.FI[10].U_LUT_O_UNCONNECTED ) + ); + LUT4 #( + .INIT ( 16'h0800 )) + \U0/U_ICON/U_CMD/U_CORE_ID_SEL/I4.FI[11].U_LUT ( + .I0(\U0/U_ICON/iCORE_ID [0]), + .I1(\U0/U_ICON/iCORE_ID [1]), + .I2(\U0/U_ICON/iCORE_ID [2]), + .I3(\U0/U_ICON/iCORE_ID [3]), + .O(\NLW_U0/U_ICON/U_CMD/U_CORE_ID_SEL/I4.FI[11].U_LUT_O_UNCONNECTED ) + ); + LUT4 #( + .INIT ( 16'h1000 )) + \U0/U_ICON/U_CMD/U_CORE_ID_SEL/I4.FI[12].U_LUT ( + .I0(\U0/U_ICON/iCORE_ID [0]), + .I1(\U0/U_ICON/iCORE_ID [1]), + .I2(\U0/U_ICON/iCORE_ID [2]), + .I3(\U0/U_ICON/iCORE_ID [3]), + .O(\NLW_U0/U_ICON/U_CMD/U_CORE_ID_SEL/I4.FI[12].U_LUT_O_UNCONNECTED ) + ); + LUT4 #( + .INIT ( 16'h2000 )) + \U0/U_ICON/U_CMD/U_CORE_ID_SEL/I4.FI[13].U_LUT ( + .I0(\U0/U_ICON/iCORE_ID [0]), + .I1(\U0/U_ICON/iCORE_ID [1]), + .I2(\U0/U_ICON/iCORE_ID [2]), + .I3(\U0/U_ICON/iCORE_ID [3]), + .O(\NLW_U0/U_ICON/U_CMD/U_CORE_ID_SEL/I4.FI[13].U_LUT_O_UNCONNECTED ) + ); + LUT4 #( + .INIT ( 16'h4000 )) + \U0/U_ICON/U_CMD/U_CORE_ID_SEL/I4.FI[14].U_LUT ( + .I0(\U0/U_ICON/iCORE_ID [0]), + .I1(\U0/U_ICON/iCORE_ID [1]), + .I2(\U0/U_ICON/iCORE_ID [2]), + .I3(\U0/U_ICON/iCORE_ID [3]), + .O(\NLW_U0/U_ICON/U_CMD/U_CORE_ID_SEL/I4.FI[14].U_LUT_O_UNCONNECTED ) + ); + LUT4 #( + .INIT ( 16'h8000 )) + \U0/U_ICON/U_CMD/U_CORE_ID_SEL/I4.FI[15].U_LUT ( + .I0(\U0/U_ICON/iCORE_ID [0]), + .I1(\U0/U_ICON/iCORE_ID [1]), + .I2(\U0/U_ICON/iCORE_ID [2]), + .I3(\U0/U_ICON/iCORE_ID [3]), + .O(\U0/U_ICON/iCORE_ID_SEL[15] ) + ); + LUT4 #( + .INIT ( 16'h0001 )) + \U0/U_ICON/U_CMD/U_COMMAND_SEL/I4.FI[0].U_LUT ( + .I0(\U0/U_ICON/U_CMD/iTARGET [8]), + .I1(\U0/U_ICON/U_CMD/iTARGET [9]), + .I2(\U0/U_ICON/U_CMD/iTARGET [10]), + .I3(\U0/U_ICON/U_CMD/iTARGET [11]), + .O(\U0/U_ICON/iCOMMAND_SEL [0]) + ); + LUT4 #( + .INIT ( 16'h0002 )) + \U0/U_ICON/U_CMD/U_COMMAND_SEL/I4.FI[1].U_LUT ( + .I0(\U0/U_ICON/U_CMD/iTARGET [8]), + .I1(\U0/U_ICON/U_CMD/iTARGET [9]), + .I2(\U0/U_ICON/U_CMD/iTARGET [10]), + .I3(\U0/U_ICON/U_CMD/iTARGET [11]), + .O(\U0/U_ICON/iCOMMAND_SEL [1]) + ); + LUT4 #( + .INIT ( 16'h0004 )) + \U0/U_ICON/U_CMD/U_COMMAND_SEL/I4.FI[2].U_LUT ( + .I0(\U0/U_ICON/U_CMD/iTARGET [8]), + .I1(\U0/U_ICON/U_CMD/iTARGET [9]), + .I2(\U0/U_ICON/U_CMD/iTARGET [10]), + .I3(\U0/U_ICON/U_CMD/iTARGET [11]), + .O(\U0/U_ICON/iCOMMAND_SEL [2]) + ); + LUT4 #( + .INIT ( 16'h0008 )) + \U0/U_ICON/U_CMD/U_COMMAND_SEL/I4.FI[3].U_LUT ( + .I0(\U0/U_ICON/U_CMD/iTARGET [8]), + .I1(\U0/U_ICON/U_CMD/iTARGET [9]), + .I2(\U0/U_ICON/U_CMD/iTARGET [10]), + .I3(\U0/U_ICON/U_CMD/iTARGET [11]), + .O(\U0/U_ICON/iCOMMAND_SEL [3]) + ); + LUT4 #( + .INIT ( 16'h0010 )) + \U0/U_ICON/U_CMD/U_COMMAND_SEL/I4.FI[4].U_LUT ( + .I0(\U0/U_ICON/U_CMD/iTARGET [8]), + .I1(\U0/U_ICON/U_CMD/iTARGET [9]), + .I2(\U0/U_ICON/U_CMD/iTARGET [10]), + .I3(\U0/U_ICON/U_CMD/iTARGET [11]), + .O(\U0/U_ICON/iCOMMAND_SEL [4]) + ); + LUT4 #( + .INIT ( 16'h0020 )) + \U0/U_ICON/U_CMD/U_COMMAND_SEL/I4.FI[5].U_LUT ( + .I0(\U0/U_ICON/U_CMD/iTARGET [8]), + .I1(\U0/U_ICON/U_CMD/iTARGET [9]), + .I2(\U0/U_ICON/U_CMD/iTARGET [10]), + .I3(\U0/U_ICON/U_CMD/iTARGET [11]), + .O(\U0/U_ICON/iCOMMAND_SEL [5]) + ); + LUT4 #( + .INIT ( 16'h0040 )) + \U0/U_ICON/U_CMD/U_COMMAND_SEL/I4.FI[6].U_LUT ( + .I0(\U0/U_ICON/U_CMD/iTARGET [8]), + .I1(\U0/U_ICON/U_CMD/iTARGET [9]), + .I2(\U0/U_ICON/U_CMD/iTARGET [10]), + .I3(\U0/U_ICON/U_CMD/iTARGET [11]), + .O(\U0/U_ICON/iCOMMAND_SEL [6]) + ); + LUT4 #( + .INIT ( 16'h0080 )) + \U0/U_ICON/U_CMD/U_COMMAND_SEL/I4.FI[7].U_LUT ( + .I0(\U0/U_ICON/U_CMD/iTARGET [8]), + .I1(\U0/U_ICON/U_CMD/iTARGET [9]), + .I2(\U0/U_ICON/U_CMD/iTARGET [10]), + .I3(\U0/U_ICON/U_CMD/iTARGET [11]), + .O(\U0/U_ICON/iCOMMAND_SEL [7]) + ); + LUT4 #( + .INIT ( 16'h0100 )) + \U0/U_ICON/U_CMD/U_COMMAND_SEL/I4.FI[8].U_LUT ( + .I0(\U0/U_ICON/U_CMD/iTARGET [8]), + .I1(\U0/U_ICON/U_CMD/iTARGET [9]), + .I2(\U0/U_ICON/U_CMD/iTARGET [10]), + .I3(\U0/U_ICON/U_CMD/iTARGET [11]), + .O(\U0/U_ICON/iCOMMAND_SEL [8]) + ); + LUT4 #( + .INIT ( 16'h0200 )) + \U0/U_ICON/U_CMD/U_COMMAND_SEL/I4.FI[9].U_LUT ( + .I0(\U0/U_ICON/U_CMD/iTARGET [8]), + .I1(\U0/U_ICON/U_CMD/iTARGET [9]), + .I2(\U0/U_ICON/U_CMD/iTARGET [10]), + .I3(\U0/U_ICON/U_CMD/iTARGET [11]), + .O(\U0/U_ICON/iCOMMAND_SEL [9]) + ); + LUT4 #( + .INIT ( 16'h0400 )) + \U0/U_ICON/U_CMD/U_COMMAND_SEL/I4.FI[10].U_LUT ( + .I0(\U0/U_ICON/U_CMD/iTARGET [8]), + .I1(\U0/U_ICON/U_CMD/iTARGET [9]), + .I2(\U0/U_ICON/U_CMD/iTARGET [10]), + .I3(\U0/U_ICON/U_CMD/iTARGET [11]), + .O(\U0/U_ICON/iCOMMAND_SEL [10]) + ); + LUT4 #( + .INIT ( 16'h0800 )) + \U0/U_ICON/U_CMD/U_COMMAND_SEL/I4.FI[11].U_LUT ( + .I0(\U0/U_ICON/U_CMD/iTARGET [8]), + .I1(\U0/U_ICON/U_CMD/iTARGET [9]), + .I2(\U0/U_ICON/U_CMD/iTARGET [10]), + .I3(\U0/U_ICON/U_CMD/iTARGET [11]), + .O(\U0/U_ICON/iCOMMAND_SEL [11]) + ); + LUT4 #( + .INIT ( 16'h1000 )) + \U0/U_ICON/U_CMD/U_COMMAND_SEL/I4.FI[12].U_LUT ( + .I0(\U0/U_ICON/U_CMD/iTARGET [8]), + .I1(\U0/U_ICON/U_CMD/iTARGET [9]), + .I2(\U0/U_ICON/U_CMD/iTARGET [10]), + .I3(\U0/U_ICON/U_CMD/iTARGET [11]), + .O(\U0/U_ICON/iCOMMAND_SEL [12]) + ); + LUT4 #( + .INIT ( 16'h2000 )) + \U0/U_ICON/U_CMD/U_COMMAND_SEL/I4.FI[13].U_LUT ( + .I0(\U0/U_ICON/U_CMD/iTARGET [8]), + .I1(\U0/U_ICON/U_CMD/iTARGET [9]), + .I2(\U0/U_ICON/U_CMD/iTARGET [10]), + .I3(\U0/U_ICON/U_CMD/iTARGET [11]), + .O(\U0/U_ICON/iCOMMAND_SEL [13]) + ); + LUT4 #( + .INIT ( 16'h4000 )) + \U0/U_ICON/U_CMD/U_COMMAND_SEL/I4.FI[14].U_LUT ( + .I0(\U0/U_ICON/U_CMD/iTARGET [8]), + .I1(\U0/U_ICON/U_CMD/iTARGET [9]), + .I2(\U0/U_ICON/U_CMD/iTARGET [10]), + .I3(\U0/U_ICON/U_CMD/iTARGET [11]), + .O(\U0/U_ICON/iCOMMAND_SEL [14]) + ); + LUT4 #( + .INIT ( 16'h8000 )) + \U0/U_ICON/U_CMD/U_COMMAND_SEL/I4.FI[15].U_LUT ( + .I0(\U0/U_ICON/U_CMD/iTARGET [8]), + .I1(\U0/U_ICON/U_CMD/iTARGET [9]), + .I2(\U0/U_ICON/U_CMD/iTARGET [10]), + .I3(\U0/U_ICON/U_CMD/iTARGET [11]), + .O(\U0/U_ICON/iCOMMAND_SEL [15]) + ); + LUT2 #( + .INIT ( 4'h4 )) + \U0/U_ICON/U_CMD/U_TARGET_CE ( + .I0(\U0/U_ICON/iDATA_CMD ), + .I1(\U0/iSHIFT_OUT ), + .O(\U0/U_ICON/U_CMD/iTARGET_CE ) + ); + INV \U0/U_ICON/U_CMD/U_SEL_n ( + .I(\U0/U_ICON/iSEL ), + .O(\U0/U_ICON/U_CMD/iSEL_n ) + ); + FDCE #( + .INIT ( 1'b0 )) + \U0/U_ICON/U_CMD/G_TARGET[6].I_NE0.U_TARGET ( + .C(CONTROL0[0]), + .CE(\U0/U_ICON/U_CMD/iTARGET_CE ), + .CLR(\U0/U_ICON/U_CMD/iSEL_n ), + .D(\U0/U_ICON/iCOMMAND_GRP [1]), + .Q(\U0/U_ICON/iCOMMAND_GRP [0]) + ); + FDCE #( + .INIT ( 1'b0 )) + \U0/U_ICON/U_CMD/G_TARGET[7].I_NE0.U_TARGET ( + .C(CONTROL0[0]), + .CE(\U0/U_ICON/U_CMD/iTARGET_CE ), + .CLR(\U0/U_ICON/U_CMD/iSEL_n ), + .D(\U0/U_ICON/U_CMD/iTARGET [8]), + .Q(\U0/U_ICON/iCOMMAND_GRP [1]) + ); + FDCE #( + .INIT ( 1'b0 )) + \U0/U_ICON/U_CMD/G_TARGET[8].I_NE0.U_TARGET ( + .C(CONTROL0[0]), + .CE(\U0/U_ICON/U_CMD/iTARGET_CE ), + .CLR(\U0/U_ICON/U_CMD/iSEL_n ), + .D(\U0/U_ICON/U_CMD/iTARGET [9]), + .Q(\U0/U_ICON/U_CMD/iTARGET [8]) + ); + FDCE #( + .INIT ( 1'b0 )) + \U0/U_ICON/U_CMD/G_TARGET[9].I_NE0.U_TARGET ( + .C(CONTROL0[0]), + .CE(\U0/U_ICON/U_CMD/iTARGET_CE ), + .CLR(\U0/U_ICON/U_CMD/iSEL_n ), + .D(\U0/U_ICON/U_CMD/iTARGET [10]), + .Q(\U0/U_ICON/U_CMD/iTARGET [9]) + ); + FDCE #( + .INIT ( 1'b0 )) + \U0/U_ICON/U_CMD/G_TARGET[10].I_NE0.U_TARGET ( + .C(CONTROL0[0]), + .CE(\U0/U_ICON/U_CMD/iTARGET_CE ), + .CLR(\U0/U_ICON/U_CMD/iSEL_n ), + .D(\U0/U_ICON/U_CMD/iTARGET [11]), + .Q(\U0/U_ICON/U_CMD/iTARGET [10]) + ); + FDCE #( + .INIT ( 1'b0 )) + \U0/U_ICON/U_CMD/G_TARGET[11].I_NE0.U_TARGET ( + .C(CONTROL0[0]), + .CE(\U0/U_ICON/U_CMD/iTARGET_CE ), + .CLR(\U0/U_ICON/U_CMD/iSEL_n ), + .D(\U0/U_ICON/iCORE_ID [0]), + .Q(\U0/U_ICON/U_CMD/iTARGET [11]) + ); + FDCE #( + .INIT ( 1'b0 )) + \U0/U_ICON/U_CMD/G_TARGET[12].I_NE0.U_TARGET ( + .C(CONTROL0[0]), + .CE(\U0/U_ICON/U_CMD/iTARGET_CE ), + .CLR(\U0/U_ICON/U_CMD/iSEL_n ), + .D(\U0/U_ICON/iCORE_ID [1]), + .Q(\U0/U_ICON/iCORE_ID [0]) + ); + FDCE #( + .INIT ( 1'b0 )) + \U0/U_ICON/U_CMD/G_TARGET[13].I_NE0.U_TARGET ( + .C(CONTROL0[0]), + .CE(\U0/U_ICON/U_CMD/iTARGET_CE ), + .CLR(\U0/U_ICON/U_CMD/iSEL_n ), + .D(\U0/U_ICON/iCORE_ID [2]), + .Q(\U0/U_ICON/iCORE_ID [1]) + ); + FDCE #( + .INIT ( 1'b0 )) + \U0/U_ICON/U_CMD/G_TARGET[14].I_NE0.U_TARGET ( + .C(CONTROL0[0]), + .CE(\U0/U_ICON/U_CMD/iTARGET_CE ), + .CLR(\U0/U_ICON/U_CMD/iSEL_n ), + .D(\U0/U_ICON/iCORE_ID [3]), + .Q(\U0/U_ICON/iCORE_ID [2]) + ); + FDCE #( + .INIT ( 1'b0 )) + \U0/U_ICON/U_CMD/G_TARGET[15].I_EQ0.U_TARGET ( + .C(CONTROL0[0]), + .CE(\U0/U_ICON/U_CMD/iTARGET_CE ), + .CLR(\U0/U_ICON/U_CMD/iSEL_n ), + .D(CONTROL0[1]), + .Q(\U0/U_ICON/iCORE_ID [3]) + ); + FDRE #( + .INIT ( 1'b0 )) + \U0/U_ICON/U_STAT/U_STAT_CNT/G[5].U_FDRE ( + .C(CONTROL0[0]), + .CE(N1), + .D(\U0/U_ICON/U_STAT/U_STAT_CNT/D [5]), + .R(\U0/U_ICON/U_STAT/iSTATCMD_CE_n ), + .Q(\U0/U_ICON/U_STAT/iSTAT_CNT [5]) + ); + FDRE #( + .INIT ( 1'b0 )) + \U0/U_ICON/U_STAT/U_STAT_CNT/G[4].U_FDRE ( + .C(CONTROL0[0]), + .CE(N1), + .D(\U0/U_ICON/U_STAT/U_STAT_CNT/D [4]), + .R(\U0/U_ICON/U_STAT/iSTATCMD_CE_n ), + .Q(\U0/U_ICON/U_STAT/iSTAT_CNT [4]) + ); + FDRE #( + .INIT ( 1'b0 )) + \U0/U_ICON/U_STAT/U_STAT_CNT/G[3].U_FDRE ( + .C(CONTROL0[0]), + .CE(N1), + .D(\U0/U_ICON/U_STAT/U_STAT_CNT/D [3]), + .R(\U0/U_ICON/U_STAT/iSTATCMD_CE_n ), + .Q(\U0/U_ICON/U_STAT/iSTAT_CNT [3]) + ); + FDRE #( + .INIT ( 1'b0 )) + \U0/U_ICON/U_STAT/U_STAT_CNT/G[2].U_FDRE ( + .C(CONTROL0[0]), + .CE(N1), + .D(\U0/U_ICON/U_STAT/U_STAT_CNT/D [2]), + .R(\U0/U_ICON/U_STAT/iSTATCMD_CE_n ), + .Q(\U0/U_ICON/U_STAT/iSTAT_CNT [2]) + ); + FDRE #( + .INIT ( 1'b0 )) + \U0/U_ICON/U_STAT/U_STAT_CNT/G[1].U_FDRE ( + .C(CONTROL0[0]), + .CE(N1), + .D(\U0/U_ICON/U_STAT/U_STAT_CNT/D [1]), + .R(\U0/U_ICON/U_STAT/iSTATCMD_CE_n ), + .Q(\U0/U_ICON/U_STAT/iSTAT_CNT [1]) + ); + FDRE #( + .INIT ( 1'b0 )) + \U0/U_ICON/U_STAT/U_STAT_CNT/G[0].U_FDRE ( + .C(CONTROL0[0]), + .CE(N1), + .D(\U0/U_ICON/U_STAT/U_STAT_CNT/D [0]), + .R(\U0/U_ICON/U_STAT/iSTATCMD_CE_n ), + .Q(\U0/U_ICON/U_STAT/iSTAT_CNT [0]) + ); + LUT1 #( + .INIT ( 2'h2 )) + \U0/U_ICON/U_STAT/U_STAT_CNT/G[5].U_LUT ( + .I0(\U0/U_ICON/U_STAT/iSTAT_CNT [5]), + .O(\U0/U_ICON/U_STAT/U_STAT_CNT/S [5]) + ); + XORCY \U0/U_ICON/U_STAT/U_STAT_CNT/G[5].U_XORCY ( + .CI(\U0/U_ICON/U_STAT/U_STAT_CNT/CI [5]), + .LI(\U0/U_ICON/U_STAT/U_STAT_CNT/S [5]), + .O(\U0/U_ICON/U_STAT/U_STAT_CNT/D [5]) + ); + LUT1 #( + .INIT ( 2'h2 )) + \U0/U_ICON/U_STAT/U_STAT_CNT/G[4].U_LUT ( + .I0(\U0/U_ICON/U_STAT/iSTAT_CNT [4]), + .O(\U0/U_ICON/U_STAT/U_STAT_CNT/S [4]) + ); + MUXCY_L \U0/U_ICON/U_STAT/U_STAT_CNT/G[4].GnH.U_MUXCY ( + .CI(\U0/U_ICON/U_STAT/U_STAT_CNT/CI [4]), + .DI(CONTROL0[2]), + .S(\U0/U_ICON/U_STAT/U_STAT_CNT/S [4]), + .LO(\U0/U_ICON/U_STAT/U_STAT_CNT/CI [5]) + ); + XORCY \U0/U_ICON/U_STAT/U_STAT_CNT/G[4].U_XORCY ( + .CI(\U0/U_ICON/U_STAT/U_STAT_CNT/CI [4]), + .LI(\U0/U_ICON/U_STAT/U_STAT_CNT/S [4]), + .O(\U0/U_ICON/U_STAT/U_STAT_CNT/D [4]) + ); + LUT1 #( + .INIT ( 2'h2 )) + \U0/U_ICON/U_STAT/U_STAT_CNT/G[3].U_LUT ( + .I0(\U0/U_ICON/U_STAT/iSTAT_CNT [3]), + .O(\U0/U_ICON/U_STAT/U_STAT_CNT/S [3]) + ); + MUXCY_L \U0/U_ICON/U_STAT/U_STAT_CNT/G[3].GnH.U_MUXCY ( + .CI(\U0/U_ICON/U_STAT/U_STAT_CNT/CI [3]), + .DI(CONTROL0[2]), + .S(\U0/U_ICON/U_STAT/U_STAT_CNT/S [3]), + .LO(\U0/U_ICON/U_STAT/U_STAT_CNT/CI [4]) + ); + XORCY \U0/U_ICON/U_STAT/U_STAT_CNT/G[3].U_XORCY ( + .CI(\U0/U_ICON/U_STAT/U_STAT_CNT/CI [3]), + .LI(\U0/U_ICON/U_STAT/U_STAT_CNT/S [3]), + .O(\U0/U_ICON/U_STAT/U_STAT_CNT/D [3]) + ); + LUT1 #( + .INIT ( 2'h2 )) + \U0/U_ICON/U_STAT/U_STAT_CNT/G[2].U_LUT ( + .I0(\U0/U_ICON/U_STAT/iSTAT_CNT [2]), + .O(\U0/U_ICON/U_STAT/U_STAT_CNT/S [2]) + ); + MUXCY_L \U0/U_ICON/U_STAT/U_STAT_CNT/G[2].GnH.U_MUXCY ( + .CI(\U0/U_ICON/U_STAT/U_STAT_CNT/CI [2]), + .DI(CONTROL0[2]), + .S(\U0/U_ICON/U_STAT/U_STAT_CNT/S [2]), + .LO(\U0/U_ICON/U_STAT/U_STAT_CNT/CI [3]) + ); + XORCY \U0/U_ICON/U_STAT/U_STAT_CNT/G[2].U_XORCY ( + .CI(\U0/U_ICON/U_STAT/U_STAT_CNT/CI [2]), + .LI(\U0/U_ICON/U_STAT/U_STAT_CNT/S [2]), + .O(\U0/U_ICON/U_STAT/U_STAT_CNT/D [2]) + ); + LUT1 #( + .INIT ( 2'h2 )) + \U0/U_ICON/U_STAT/U_STAT_CNT/G[1].U_LUT ( + .I0(\U0/U_ICON/U_STAT/iSTAT_CNT [1]), + .O(\U0/U_ICON/U_STAT/U_STAT_CNT/S [1]) + ); + MUXCY_L \U0/U_ICON/U_STAT/U_STAT_CNT/G[1].GnH.U_MUXCY ( + .CI(\U0/U_ICON/U_STAT/U_STAT_CNT/CI [1]), + .DI(CONTROL0[2]), + .S(\U0/U_ICON/U_STAT/U_STAT_CNT/S [1]), + .LO(\U0/U_ICON/U_STAT/U_STAT_CNT/CI [2]) + ); + XORCY \U0/U_ICON/U_STAT/U_STAT_CNT/G[1].U_XORCY ( + .CI(\U0/U_ICON/U_STAT/U_STAT_CNT/CI [1]), + .LI(\U0/U_ICON/U_STAT/U_STAT_CNT/S [1]), + .O(\U0/U_ICON/U_STAT/U_STAT_CNT/D [1]) + ); + LUT1 #( + .INIT ( 2'h2 )) + \U0/U_ICON/U_STAT/U_STAT_CNT/G[0].U_LUT ( + .I0(\U0/U_ICON/U_STAT/iSTAT_CNT [0]), + .O(\U0/U_ICON/U_STAT/U_STAT_CNT/S [0]) + ); + MUXCY_L \U0/U_ICON/U_STAT/U_STAT_CNT/G[0].GnH.U_MUXCY ( + .CI(N1), + .DI(CONTROL0[2]), + .S(\U0/U_ICON/U_STAT/U_STAT_CNT/S [0]), + .LO(\U0/U_ICON/U_STAT/U_STAT_CNT/CI [1]) + ); + XORCY \U0/U_ICON/U_STAT/U_STAT_CNT/G[0].U_XORCY ( + .CI(N1), + .LI(\U0/U_ICON/U_STAT/U_STAT_CNT/S [0]), + .O(\U0/U_ICON/U_STAT/U_STAT_CNT/D [0]) + ); + MUXF6 \U0/U_ICON/U_STAT/U_TDO_next ( + .I0(\U0/U_ICON/U_STAT/iSTAT_LOW ), + .I1(\U0/U_ICON/U_STAT/iSTAT_HIGH ), + .S(\U0/U_ICON/U_STAT/iSTAT_CNT [5]), + .O(\U0/U_ICON/U_STAT/iTDO_next ) + ); + MUXF5 \U0/U_ICON/U_STAT/U_STAT_LOW ( + .I0(\U0/U_ICON/U_STAT/iSTAT [0]), + .I1(\U0/U_ICON/U_STAT/iSTAT [1]), + .S(\U0/U_ICON/U_STAT/iSTAT_CNT [4]), + .O(\U0/U_ICON/U_STAT/iSTAT_LOW ) + ); + MUXF5 \U0/U_ICON/U_STAT/U_STAT_HIGH ( + .I0(\U0/U_ICON/U_STAT/iSTAT [2]), + .I1(\U0/U_ICON/U_STAT/iSTAT [3]), + .S(\U0/U_ICON/U_STAT/iSTAT_CNT [4]), + .O(\U0/U_ICON/U_STAT/iSTAT_HIGH ) + ); + LUT4 #( + .INIT ( 16'h0101 )) + \U0/U_ICON/U_STAT/F_STAT[0].U_STAT ( + .I0(\U0/U_ICON/U_STAT/iSTAT_CNT [0]), + .I1(\U0/U_ICON/U_STAT/iSTAT_CNT [1]), + .I2(\U0/U_ICON/U_STAT/iSTAT_CNT [2]), + .I3(\U0/U_ICON/U_STAT/iSTAT_CNT [3]), + .O(\U0/U_ICON/U_STAT/iSTAT [0]) + ); + LUT4 #( + .INIT ( 16'hC101 )) + \U0/U_ICON/U_STAT/F_STAT[1].U_STAT ( + .I0(\U0/U_ICON/U_STAT/iSTAT_CNT [0]), + .I1(\U0/U_ICON/U_STAT/iSTAT_CNT [1]), + .I2(\U0/U_ICON/U_STAT/iSTAT_CNT [2]), + .I3(\U0/U_ICON/U_STAT/iSTAT_CNT [3]), + .O(\U0/U_ICON/U_STAT/iSTAT [1]) + ); + LUT4 #( + .INIT ( 16'h2100 )) + \U0/U_ICON/U_STAT/F_STAT[2].U_STAT ( + .I0(\U0/U_ICON/U_STAT/iSTAT_CNT [0]), + .I1(\U0/U_ICON/U_STAT/iSTAT_CNT [1]), + .I2(\U0/U_ICON/U_STAT/iSTAT_CNT [2]), + .I3(\U0/U_ICON/U_STAT/iSTAT_CNT [3]), + .O(\U0/U_ICON/U_STAT/iSTAT [2]) + ); + LUT4 #( + .INIT ( 16'h1610 )) + \U0/U_ICON/U_STAT/F_STAT[3].U_STAT ( + .I0(\U0/U_ICON/U_STAT/iSTAT_CNT [0]), + .I1(\U0/U_ICON/U_STAT/iSTAT_CNT [1]), + .I2(\U0/U_ICON/U_STAT/iSTAT_CNT [2]), + .I3(\U0/U_ICON/U_STAT/iSTAT_CNT [3]), + .O(\U0/U_ICON/U_STAT/iSTAT [3]) + ); + INV \U0/U_ICON/U_STAT/U_STATCMD_n ( + .I(\U0/U_ICON/U_STAT/iSTATCMD_CE ), + .O(\U0/U_ICON/U_STAT/iSTATCMD_CE_n ) + ); + LUT4 #( + .INIT ( 16'h8000 )) + \U0/U_ICON/U_STAT/U_STATCMD ( + .I0(\U0/U_ICON/U_STAT/iDATA_VALID ), + .I1(\U0/U_ICON/iCOMMAND_SEL [0]), + .I2(\U0/U_ICON/iCORE_ID_SEL[15] ), + .I3(\U0/U_ICON/U_STAT/iCMD_GRP0_SEL ), + .O(\U0/U_ICON/U_STAT/iSTATCMD_CE ) + ); + LUT2 #( + .INIT ( 4'h1 )) + \U0/U_ICON/U_STAT/U_CMDGRP0 ( + .I0(\U0/U_ICON/iCOMMAND_GRP [0]), + .I1(\U0/U_ICON/iCOMMAND_GRP [1]), + .O(\U0/U_ICON/U_STAT/iCMD_GRP0_SEL ) + ); + LUT2 #( + .INIT ( 4'h8 )) + \U0/U_ICON/U_STAT/U_DATA_VALID ( + .I0(\U0/U_ICON/iSYNC ), + .I1(\U0/iSHIFT_OUT ), + .O(\U0/U_ICON/U_STAT/iDATA_VALID ) + ); + FDE #( + .INIT ( 1'b0 )) + \U0/U_ICON/U_STAT/U_TDO ( + .C(CONTROL0[0]), + .CE(N1), + .D(\U0/U_ICON/U_STAT/iTDO_next ), + .Q(\U0/U_ICON/iTDO_VEC [15]) + ); + +// synthesis translate_on + +endmodule + +// synthesis translate_off + +`ifndef GLBL +`define GLBL + +`timescale 1 ps / 1 ps + +module glbl (); + + parameter ROC_WIDTH = 100000; + parameter TOC_WIDTH = 0; + + wire GSR; + wire GTS; + wire GWE; + wire PRLD; + tri1 p_up_tmp; + tri (weak1, strong0) PLL_LOCKG = p_up_tmp; + + reg GSR_int; + reg GTS_int; + reg PRLD_int; + +//-------- JTAG Globals -------------- + wire JTAG_TDO_GLBL; + wire JTAG_TCK_GLBL; + wire JTAG_TDI_GLBL; + wire JTAG_TMS_GLBL; + wire JTAG_TRST_GLBL; + + reg JTAG_CAPTURE_GLBL; + reg JTAG_RESET_GLBL; + reg JTAG_SHIFT_GLBL; + reg JTAG_UPDATE_GLBL; + reg JTAG_RUNTEST_GLBL; + + reg JTAG_SEL1_GLBL = 0; + reg JTAG_SEL2_GLBL = 0 ; + reg JTAG_SEL3_GLBL = 0; + reg JTAG_SEL4_GLBL = 0; + + reg JTAG_USER_TDO1_GLBL = 1'bz; + reg JTAG_USER_TDO2_GLBL = 1'bz; + reg JTAG_USER_TDO3_GLBL = 1'bz; + reg JTAG_USER_TDO4_GLBL = 1'bz; + + assign (weak1, weak0) GSR = GSR_int; + assign (weak1, weak0) GTS = GTS_int; + assign (weak1, weak0) PRLD = PRLD_int; + + initial begin + GSR_int = 1'b1; + PRLD_int = 1'b1; + #(ROC_WIDTH) + GSR_int = 1'b0; + PRLD_int = 1'b0; + end + + initial begin + GTS_int = 1'b1; + #(TOC_WIDTH) + GTS_int = 1'b0; + end + +endmodule + +`endif + +// synthesis translate_on diff --git a/usrp2/extramfifo/icon.xco b/usrp2/extramfifo/icon.xco new file mode 100644 index 000000000..fda273149 --- /dev/null +++ b/usrp2/extramfifo/icon.xco @@ -0,0 +1,47 @@ +############################################################## +# +# Xilinx Core Generator version 12.1 +# Date: Wed Jul 21 03:31:19 2010 +# +############################################################## +# +# This file contains the customisation parameters for a +# Xilinx CORE Generator IP GUI. It is strongly recommended +# that you do not manually alter this file as it may cause +# unexpected and unsupported behavior. +# +############################################################## +# +# BEGIN Project Options +SET addpads = false +SET asysymbol = true +SET busformat = BusFormatAngleBracketNotRipped +SET createndf = false +SET designentry = Verilog +SET device = xc3s2000 +SET devicefamily = spartan3 +SET flowvendor = Other +SET formalverification = false +SET foundationsym = false +SET implementationfiletype = Ngc +SET package = fg456 +SET removerpms = false +SET simulationfiles = Structural +SET speedgrade = -5 +SET verilogsim = true +SET vhdlsim = false +# END Project Options +# BEGIN Select +SELECT ICON_(ChipScope_Pro_-_Integrated_Controller) family Xilinx,_Inc. 1.04.a +# END Select +# BEGIN Parameters +CSET component_name=icon +CSET enable_jtag_bufg=true +CSET number_control_ports=1 +CSET use_ext_bscan=false +CSET use_softbscan=false +CSET use_unused_bscan=false +CSET user_scan_chain=USER1 +# END Parameters +GENERATE +# CRC: 799ba5a1 diff --git a/usrp2/extramfifo/ila.v b/usrp2/extramfifo/ila.v new file mode 100644 index 000000000..b0d8f8d0c --- /dev/null +++ b/usrp2/extramfifo/ila.v @@ -0,0 +1,5544 @@ +//////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 1995-2010 Xilinx, Inc. All rights reserved. +//////////////////////////////////////////////////////////////////////////////// +// ____ ____ +// / /\/ / +// /___/ \ / Vendor: Xilinx +// \ \ \/ Version: M.53d +// \ \ Application: netgen +// / / Filename: ila.v +// /___/ /\ Timestamp: Wed Jul 21 11:51:09 2010 +// \ \ / \ +// \___\/\___\ +// +// Command : -w -sim -ofmt verilog /home/ianb/ettus/sram_fifo/fpgapriv/usrp2/extramfifo/tmp/_cg/ila.ngc /home/ianb/ettus/sram_fifo/fpgapriv/usrp2/extramfifo/tmp/_cg/ila.v +// Device : xc3s2000-fg456-5 +// Input file : /home/ianb/ettus/sram_fifo/fpgapriv/usrp2/extramfifo/tmp/_cg/ila.ngc +// Output file : /home/ianb/ettus/sram_fifo/fpgapriv/usrp2/extramfifo/tmp/_cg/ila.v +// # of Modules : 1 +// Design Name : ila +// Xilinx : /opt/Xilinx/12.1/ISE_DS/ISE +// +// Purpose: +// This verilog netlist is a verification model and uses simulation +// primitives which may not represent the true implementation of the +// device, however the netlist is functionally correct and should not +// be modified. This file cannot be synthesized and should only be used +// with supported simulation tools. +// +// Reference: +// Command Line Tools User Guide, Chapter 23 and Synthesis and Simulation Design Guide, Chapter 6 +// +//////////////////////////////////////////////////////////////////////////////// + +`timescale 1 ns/1 ps + +module ila ( + CLK, CONTROL, TRIG0, TRIG1, TRIG2, TRIG3 +)/* synthesis syn_black_box syn_noprune=1 */; + input CLK; + inout [35 : 0] CONTROL; + input [7 : 0] TRIG0; + input [7 : 0] TRIG1; + input [7 : 0] TRIG2; + input [3 : 0] TRIG3; + + // synthesis translate_off + + wire N0; + wire N1; + wire N38; + wire N39; + wire \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/CMP_RESET ; + wire \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_CDONE/iCFG_DIN ; + wire \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_CDONE/iOUT ; + wire \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_CMPRESET/iCFG_DIN ; + wire \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_NS0/iCFG_DIN ; + wire \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_NS0/iOUT ; + wire \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_NS1/iCFG_DIN ; + wire \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_NS1/iOUT ; + wire \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_SCE/iCFG_DIN ; + wire \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_SCMPCE/iCFG_DIN ; + wire \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_SCRST/iCFG_DIN ; + wire \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_WCE/iCFG_DIN ; + wire \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_WHCMPCE/iCFG_DIN ; + wire \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_WLCMPCE/iCFG_DIN ; + wire \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/SCNT_CE ; + wire \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/SCNT_CMP ; + wire \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/SCNT_CMP_CE ; + wire \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/SCNT_CMP_Q ; + wire \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/SCNT_RESET ; + wire \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/U_SCNT_CMP/I_SRL16.U_GAND_SRL16/sel[0] ; + wire \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/U_SCNT_CMP/I_SRL16.U_GAND_SRL16/sel[1] ; + wire \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/U_SCNT_CMP/I_SRL16.U_GAND_SRL16/sel[8] ; + wire \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/U_SCNT_CMP/I_SRL16.U_GAND_SRL16/tmpCfgData ; + wire \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/U_SCNT_CMP/I_SRL16.U_GAND_SRL16/tmpCfgData0 ; + wire \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/U_WCNT_HCMP/I_SRL16.U_GAND_SRL16/sel[0] ; + wire \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/U_WCNT_HCMP/I_SRL16.U_GAND_SRL16/sel[1] ; + wire \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/U_WCNT_HCMP/I_SRL16.U_GAND_SRL16/sel[8] ; + wire \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/U_WCNT_HCMP/I_SRL16.U_GAND_SRL16/tmpCfgData ; + wire \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/U_WCNT_HCMP/I_SRL16.U_GAND_SRL16/tmpCfgData0 ; + wire \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/U_WCNT_LCMP/I_SRL16.U_GAND_SRL16/sel[0] ; + wire \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/U_WCNT_LCMP/I_SRL16.U_GAND_SRL16/sel[1] ; + wire \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/U_WCNT_LCMP/I_SRL16.U_GAND_SRL16/sel[8] ; + wire \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/U_WCNT_LCMP/I_SRL16.U_GAND_SRL16/tmpCfgData ; + wire \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/U_WCNT_LCMP/I_SRL16.U_GAND_SRL16/tmpCfgData0 ; + wire \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/WCNT_CE ; + wire \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/WCNT_HCMP ; + wire \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/WCNT_HCMP_CE ; + wire \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/WCNT_HCMP_Q ; + wire \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/WCNT_LCMP ; + wire \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/WCNT_LCMP_CE ; + wire \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/WCNT_LCMP_Q ; + wire \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/iCAP_WR_EN ; + wire \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/iTRIGGER_IN ; + wire \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/iTRIGGER_OUT ; + wire \U0/I_NO_D.U_ILA/U_RST/HALT_pulse ; + wire \U0/I_NO_D.U_ILA/U_RST/POR ; + wire \U0/I_NO_D.U_ILA/U_RST/PRE_RESET0 ; + wire \U0/I_NO_D.U_ILA/U_RST/PRE_RESET1 ; + wire \U0/I_NO_D.U_ILA/U_RST/U_ARM_XFER/din_latched ; + wire \U0/I_NO_D.U_ILA/U_RST/U_ARM_XFER/iCLR ; + wire \U0/I_NO_D.U_ILA/U_RST/U_ARM_XFER/iDOUT ; + wire \U0/I_NO_D.U_ILA/U_RST/U_ARM_XFER/iDOUT_dly[0] ; + wire \U0/I_NO_D.U_ILA/U_RST/U_ARM_XFER/iDOUT_dly[1] ; + wire \U0/I_NO_D.U_ILA/U_RST/U_ARM_XFER/iDOUT_dly[2] ; + wire \U0/I_NO_D.U_ILA/U_RST/U_ARM_XFER/iDOUT_dly[4] ; + wire \U0/I_NO_D.U_ILA/U_RST/U_HALT_XFER/din_latched ; + wire \U0/I_NO_D.U_ILA/U_RST/U_HALT_XFER/iCLR ; + wire \U0/I_NO_D.U_ILA/U_RST/U_HALT_XFER/iDOUT ; + wire \U0/I_NO_D.U_ILA/U_RST/U_HALT_XFER/iDOUT_dly[0] ; + wire \U0/I_NO_D.U_ILA/U_RST/U_HALT_XFER/iDOUT_dly[2] ; + wire \U0/I_NO_D.U_ILA/U_STAT/ACTRESET_pulse ; + wire \U0/I_NO_D.U_ILA/U_STAT/ACT_dstat ; + wire \U0/I_NO_D.U_ILA/U_STAT/ARM_dstat ; + wire \U0/I_NO_D.U_ILA/U_STAT/CAP_RESET_dly1 ; + wire \U0/I_NO_D.U_ILA/U_STAT/DIRTY_D0 ; + wire \U0/I_NO_D.U_ILA/U_STAT/DIRTY_D1 ; + wire \U0/I_NO_D.U_ILA/U_STAT/DIRTY_SEL ; + wire \U0/I_NO_D.U_ILA/U_STAT/DIRTY_dstat ; + wire \U0/I_NO_D.U_ILA/U_STAT/DSTAT_en_dly1 ; + wire \U0/I_NO_D.U_ILA/U_STAT/DSTAT_en_dly2 ; + wire \U0/I_NO_D.U_ILA/U_STAT/DSTAT_en_dly3 ; + wire \U0/I_NO_D.U_ILA/U_STAT/DSTAT_load ; + wire \U0/I_NO_D.U_ILA/U_STAT/EXTCAP_READY_dstat ; + wire \U0/I_NO_D.U_ILA/U_STAT/FULL_dstat ; + wire \U0/I_NO_D.U_ILA/U_STAT/NS_load ; + wire \U0/I_NO_D.U_ILA/U_STAT/TDO_mux_in<0>1 ; + wire \U0/I_NO_D.U_ILA/U_STAT/TDO_next ; + wire \U0/I_NO_D.U_ILA/U_STAT/TRIGGER_dstat ; + wire \U0/I_NO_D.U_ILA/U_STAT/U_DMUX/U_CS_MUX/I3.U_MUX8/Mmux_O_10_443 ; + wire \U0/I_NO_D.U_ILA/U_STAT/U_DMUX/U_CS_MUX/I3.U_MUX8/Mmux_O_101_444 ; + wire \U0/I_NO_D.U_ILA/U_STAT/U_DMUX/U_CS_MUX/I3.U_MUX8/Mmux_O_11_445 ; + wire \U0/I_NO_D.U_ILA/U_STAT/U_DMUX/U_CS_MUX/I3.U_MUX8/Mmux_O_12_f5_446 ; + wire \U0/I_NO_D.U_ILA/U_STAT/U_DMUX/U_CS_MUX/I3.U_MUX8/Mmux_O_13_447 ; + wire \U0/I_NO_D.U_ILA/U_STAT/U_DMUX/U_CS_MUX/I3.U_MUX8/Mmux_O_14_448 ; + wire \U0/I_NO_D.U_ILA/U_STAT/U_DMUX/U_CS_MUX/I3.U_MUX8/Mmux_O_3_449 ; + wire \U0/I_NO_D.U_ILA/U_STAT/U_DMUX/U_CS_MUX/I3.U_MUX8/Mmux_O_4_450 ; + wire \U0/I_NO_D.U_ILA/U_STAT/U_DMUX/U_CS_MUX/I3.U_MUX8/Mmux_O_7_f6_451 ; + wire \U0/I_NO_D.U_ILA/U_STAT/U_DMUX/U_CS_MUX/I3.U_MUX8/Mmux_O_8_452 ; + wire \U0/I_NO_D.U_ILA/U_STAT/U_DMUX/U_CS_MUX/I3.U_MUX8/Mmux_O_8_f5_453 ; + wire \U0/I_NO_D.U_ILA/U_STAT/U_DMUX/U_CS_MUX/I3.U_MUX8/Mmux_O_9_454 ; + wire \U0/I_NO_D.U_ILA/U_STAT/U_DMUX/U_CS_MUX/I3.U_MUX8/Mmux_O_91_455 ; + wire \U0/I_NO_D.U_ILA/U_STAT/U_DMUX/U_CS_MUX/I3.U_MUX8/Mmux_O_9_f5_456 ; + wire \U0/I_NO_D.U_ILA/U_STAT/U_DSL1/din_latched ; + wire \U0/I_NO_D.U_ILA/U_STAT/U_DSL1/iCLR ; + wire \U0/I_NO_D.U_ILA/U_STAT/U_MUX/U_CS_MUX/I1.U_MUX2/O15_463 ; + wire \U0/I_NO_D.U_ILA/U_STAT/U_MUX/U_CS_MUX/I1.U_MUX2/O2_464 ; + wire \U0/I_NO_D.U_ILA/U_STAT/U_MUX/U_CS_MUX/I1.U_MUX2/O26_465 ; + wire \U0/I_NO_D.U_ILA/U_STAT/U_MUX/U_CS_MUX/I1.U_MUX2/O36_466 ; + wire \U0/I_NO_D.U_ILA/U_STAT/U_MUX/U_CS_MUX/I1.U_MUX2/O82_467 ; + wire \U0/I_NO_D.U_ILA/U_STAT/U_SMUX/U_CS_MUX/I6.U_MUX64/Mmux_O_10_f5_470 ; + wire \U0/I_NO_D.U_ILA/U_STAT/U_SMUX/U_CS_MUX/I6.U_MUX64/Mmux_O_10_f6_471 ; + wire \U0/I_NO_D.U_ILA/U_STAT/U_SMUX/U_CS_MUX/I6.U_MUX64/Mmux_O_11_472 ; + wire \U0/I_NO_D.U_ILA/U_STAT/U_SMUX/U_CS_MUX/I6.U_MUX64/Mmux_O_11_f5_473 ; + wire \U0/I_NO_D.U_ILA/U_STAT/U_SMUX/U_CS_MUX/I6.U_MUX64/Mmux_O_11_f51 ; + wire \U0/I_NO_D.U_ILA/U_STAT/U_SMUX/U_CS_MUX/I6.U_MUX64/Mmux_O_12_475 ; + wire \U0/I_NO_D.U_ILA/U_STAT/U_SMUX/U_CS_MUX/I6.U_MUX64/Mmux_O_121_476 ; + wire \U0/I_NO_D.U_ILA/U_STAT/U_SMUX/U_CS_MUX/I6.U_MUX64/Mmux_O_122_477 ; + wire \U0/I_NO_D.U_ILA/U_STAT/U_SMUX/U_CS_MUX/I6.U_MUX64/Mmux_O_12_f5_478 ; + wire \U0/I_NO_D.U_ILA/U_STAT/U_SMUX/U_CS_MUX/I6.U_MUX64/Mmux_O_13_479 ; + wire \U0/I_NO_D.U_ILA/U_STAT/U_SMUX/U_CS_MUX/I6.U_MUX64/Mmux_O_131_480 ; + wire \U0/I_NO_D.U_ILA/U_STAT/U_SMUX/U_CS_MUX/I6.U_MUX64/Mmux_O_132_481 ; + wire \U0/I_NO_D.U_ILA/U_STAT/U_SMUX/U_CS_MUX/I6.U_MUX64/Mmux_O_14_482 ; + wire \U0/I_NO_D.U_ILA/U_STAT/U_SMUX/U_CS_MUX/I6.U_MUX64/Mmux_O_8_f7_483 ; + wire \U0/I_NO_D.U_ILA/U_STAT/U_SMUX/U_CS_MUX/I6.U_MUX64/Mmux_O_9_f6_484 ; + wire \U0/I_NO_D.U_ILA/U_STAT/iSTATCMD_CE ; + wire \U0/I_NO_D.U_ILA/U_STAT/iSTATCMD_CE_n ; + wire \U0/I_NO_D.U_ILA/U_STAT/iSTAT_CNT<1>1_535 ; + wire \U0/I_NO_D.U_ILA/U_STAT/iSTAT_CNT<2>1_537 ; + wire \U0/I_NO_D.U_ILA/U_TRIG/U_TC/I_STORAGE_QUAL.U_STORAGE_QUAL/I_SRLT_NE_1.I_NMU_1_TO_4.U_TCL/I_NMU_EQ4.U_iDOUT/iCFG_DIN ; + wire \U0/I_NO_D.U_ILA/U_TRIG/U_TC/I_STORAGE_QUAL.U_STORAGE_QUAL/I_SRLT_NE_1.I_NMU_1_TO_4.U_TCL/iDOUT ; + wire \U0/I_NO_D.U_ILA/U_TRIG/U_TC/I_STORAGE_QUAL.U_STORAGE_QUAL/iTRIGGER ; + wire \U0/I_NO_D.U_ILA/U_TRIG/U_TC/I_TSEQ_NEQ2.U_TC_EQUATION/I_SRLT_NE_1.I_NMU_1_TO_4.U_TCL/I_NMU_EQ4.U_iDOUT/iCFG_DIN ; + wire \U0/I_NO_D.U_ILA/U_TRIG/U_TC/I_TSEQ_NEQ2.U_TC_EQUATION/I_SRLT_NE_1.I_NMU_1_TO_4.U_TCL/iDOUT ; + wire \U0/I_NO_D.U_ILA/U_TRIG/U_TC/I_TSEQ_NEQ2.U_TC_EQUATION/iTRIGGER ; + wire \U0/I_NO_D.U_ILA/U_TRIG/U_TC/iCAPTURE ; + wire \U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[0].U_M/U_MU/DOUT_tmp ; + wire \U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[0].U_M/U_MU/I_MUT_GAND.U_match/I_SRL16.U_GAND_SRL16/din_dly1<0> ; + wire \U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[0].U_M/U_MU/I_MUT_GAND.U_match/I_SRL16.U_GAND_SRL16/din_dly1<1> ; + wire \U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[0].U_M/U_MU/I_MUT_GAND.U_match/I_SRL16.U_GAND_SRL16/din_dly1<2> ; + wire \U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[0].U_M/U_MU/I_MUT_GAND.U_match/I_SRL16.U_GAND_SRL16/din_dly1<3> ; + wire \U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[0].U_M/U_MU/I_MUT_GAND.U_match/I_SRL16.U_GAND_SRL16/din_dly1<4> ; + wire \U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[0].U_M/U_MU/I_MUT_GAND.U_match/I_SRL16.U_GAND_SRL16/din_dly1<5> ; + wire \U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[0].U_M/U_MU/I_MUT_GAND.U_match/I_SRL16.U_GAND_SRL16/din_dly1<6> ; + wire \U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[0].U_M/U_MU/I_MUT_GAND.U_match/I_SRL16.U_GAND_SRL16/din_dly1<7> ; + wire \U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[0].U_M/U_MU/I_MUT_GAND.U_match/I_SRL16.U_GAND_SRL16/sel<0> ; + wire \U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[0].U_M/U_MU/I_MUT_GAND.U_match/I_SRL16.U_GAND_SRL16/sel<1> ; + wire \U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[0].U_M/U_MU/I_MUT_GAND.U_match/I_SRL16.U_GAND_SRL16/tmpCfgData ; + wire \U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[0].U_M/U_MU/I_MUT_GAND.U_match/I_SRL16.U_GAND_SRL16/tmpCompData<0> ; + wire \U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[0].U_M/U_MU/I_MUT_GAND.U_match/I_SRL16.U_GAND_SRL16/tmpCompData<1> ; + wire \U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[0].U_M/U_MU/I_MUT_GAND.U_match/I_SRL16.U_GAND_SRL16/tmpCompData<2> ; + wire \U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[0].U_M/dout_tmp ; + wire \U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[1].U_M/U_MU/DOUT_tmp ; + wire \U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[1].U_M/U_MU/I_MUT_GAND.U_match/I_SRL16.U_GAND_SRL16/din_dly1<0> ; + wire \U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[1].U_M/U_MU/I_MUT_GAND.U_match/I_SRL16.U_GAND_SRL16/din_dly1<1> ; + wire \U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[1].U_M/U_MU/I_MUT_GAND.U_match/I_SRL16.U_GAND_SRL16/din_dly1<2> ; + wire \U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[1].U_M/U_MU/I_MUT_GAND.U_match/I_SRL16.U_GAND_SRL16/din_dly1<3> ; + wire \U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[1].U_M/U_MU/I_MUT_GAND.U_match/I_SRL16.U_GAND_SRL16/din_dly1<4> ; + wire \U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[1].U_M/U_MU/I_MUT_GAND.U_match/I_SRL16.U_GAND_SRL16/din_dly1<5> ; + wire \U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[1].U_M/U_MU/I_MUT_GAND.U_match/I_SRL16.U_GAND_SRL16/din_dly1<6> ; + wire \U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[1].U_M/U_MU/I_MUT_GAND.U_match/I_SRL16.U_GAND_SRL16/din_dly1<7> ; + wire \U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[1].U_M/U_MU/I_MUT_GAND.U_match/I_SRL16.U_GAND_SRL16/sel<0> ; + wire \U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[1].U_M/U_MU/I_MUT_GAND.U_match/I_SRL16.U_GAND_SRL16/sel<1> ; + wire \U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[1].U_M/U_MU/I_MUT_GAND.U_match/I_SRL16.U_GAND_SRL16/tmpCfgData ; + wire \U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[1].U_M/U_MU/I_MUT_GAND.U_match/I_SRL16.U_GAND_SRL16/tmpCompData<0> ; + wire \U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[1].U_M/U_MU/I_MUT_GAND.U_match/I_SRL16.U_GAND_SRL16/tmpCompData<1> ; + wire \U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[1].U_M/U_MU/I_MUT_GAND.U_match/I_SRL16.U_GAND_SRL16/tmpCompData<2> ; + wire \U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[1].U_M/dout_tmp ; + wire \U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[2].U_M/U_MU/DOUT_tmp ; + wire \U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[2].U_M/U_MU/I_MUT_GAND.U_match/I_SRL16.U_GAND_SRL16/din_dly1<0> ; + wire \U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[2].U_M/U_MU/I_MUT_GAND.U_match/I_SRL16.U_GAND_SRL16/din_dly1<1> ; + wire \U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[2].U_M/U_MU/I_MUT_GAND.U_match/I_SRL16.U_GAND_SRL16/din_dly1<2> ; + wire \U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[2].U_M/U_MU/I_MUT_GAND.U_match/I_SRL16.U_GAND_SRL16/din_dly1<3> ; + wire \U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[2].U_M/U_MU/I_MUT_GAND.U_match/I_SRL16.U_GAND_SRL16/din_dly1<4> ; + wire \U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[2].U_M/U_MU/I_MUT_GAND.U_match/I_SRL16.U_GAND_SRL16/din_dly1<5> ; + wire \U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[2].U_M/U_MU/I_MUT_GAND.U_match/I_SRL16.U_GAND_SRL16/din_dly1<6> ; + wire \U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[2].U_M/U_MU/I_MUT_GAND.U_match/I_SRL16.U_GAND_SRL16/din_dly1<7> ; + wire \U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[2].U_M/U_MU/I_MUT_GAND.U_match/I_SRL16.U_GAND_SRL16/sel<0> ; + wire \U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[2].U_M/U_MU/I_MUT_GAND.U_match/I_SRL16.U_GAND_SRL16/sel<1> ; + wire \U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[2].U_M/U_MU/I_MUT_GAND.U_match/I_SRL16.U_GAND_SRL16/tmpCfgData ; + wire \U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[2].U_M/U_MU/I_MUT_GAND.U_match/I_SRL16.U_GAND_SRL16/tmpCompData<0> ; + wire \U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[2].U_M/U_MU/I_MUT_GAND.U_match/I_SRL16.U_GAND_SRL16/tmpCompData<1> ; + wire \U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[2].U_M/U_MU/I_MUT_GAND.U_match/I_SRL16.U_GAND_SRL16/tmpCompData<2> ; + wire \U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[2].U_M/dout_tmp ; + wire \U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[3].U_M/U_MU/DOUT_tmp ; + wire \U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[3].U_M/U_MU/I_MUT_GAND.U_match/I_SRL16.U_GAND_SRL16/din_dly1<0> ; + wire \U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[3].U_M/U_MU/I_MUT_GAND.U_match/I_SRL16.U_GAND_SRL16/din_dly1<1> ; + wire \U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[3].U_M/U_MU/I_MUT_GAND.U_match/I_SRL16.U_GAND_SRL16/din_dly1<2> ; + wire \U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[3].U_M/U_MU/I_MUT_GAND.U_match/I_SRL16.U_GAND_SRL16/din_dly1<3> ; + wire \U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[3].U_M/U_MU/I_MUT_GAND.U_match/I_SRL16.U_GAND_SRL16/sel<3> ; + wire \U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[3].U_M/U_MU/I_MUT_GAND.U_match/I_SRL16.U_GAND_SRL16/sel<4> ; + wire \U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[3].U_M/U_MU/I_MUT_GAND.U_match/I_SRL16.U_GAND_SRL16/tmpCfgData ; + wire \U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[3].U_M/U_MU/I_MUT_GAND.U_match/I_SRL16.U_GAND_SRL16/tmpCompData<0> ; + wire \U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[3].U_M/U_MU/I_MUT_GAND.U_match/I_SRL16.U_GAND_SRL16/tmpCompData<2> ; + wire \U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[3].U_M/dout_tmp ; + wire \U0/I_NO_D.U_ILA/U_TRIG/trigCondOut ; + wire \U0/I_NO_D.U_ILA/iARM ; + wire \U0/I_NO_D.U_ILA/iCAPTURE ; + wire \U0/I_NO_D.U_ILA/iCAP_DONE ; + wire \U0/I_NO_D.U_ILA/iCAP_TRIGGER_OUT ; + wire \U0/I_NO_D.U_ILA/iCAP_WR_EN ; + wire \U0/I_NO_D.U_ILA/iDATA_DOUT ; + wire \U0/I_NO_D.U_ILA/iSTAT_DOUT ; + wire \U0/I_NO_D.U_ILA/iTRIGGER ; + wire \NLW_U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_WHCMPCE/I_NOLUT6.I_SRL_T2.I_YES_RPM.UF_cs_cfglut4_Q15_UNCONNECTED ; + wire \NLW_U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/U_SCNT_CMP/I_SRL16.U_GAND_SRL16/I_TWMOD8_NE0.I_YES_RPM.I_SRLT_EQ_2.U_SRLH_Q_UNCONNECTED ; + wire \NLW_U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/U_WCNT_HCMP/I_SRL16.U_GAND_SRL16/I_TWMOD8_NE0.I_YES_RPM.I_SRLT_EQ_2.U_SRLH_Q_UNCONNECTED ; + wire \NLW_U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/U_WCNT_LCMP/I_SRL16.U_GAND_SRL16/I_TWMOD8_NE0.I_YES_RPM.I_SRLT_EQ_2.U_SRLH_Q_UNCONNECTED ; + wire \NLW_U0/I_NO_D.U_ILA/U_STAT/U_DSR_O_UNCONNECTED ; + wire \NLW_U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[3].U_M/U_MU/I_MUT_GAND.U_match/I_SRL16.U_GAND_SRL16/I_TWMOD8_NE0.I_YES_RPM.I_SRLT_EQ_2.U_SRLL_Q15_UNCONNECTED ; + wire \NLW_U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[0].U_M/U_MU/I_MUT_GAND.U_match/I_SRL16.U_GAND_SRL16/I_TW_GTE8.F_TW[0].I_YES_RPM.I_SRLT_EQ_2.U_SRLL_Q15_UNCONNECTED ; + wire \NLW_U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[1].U_M/U_MU/I_MUT_GAND.U_match/I_SRL16.U_GAND_SRL16/I_TW_GTE8.F_TW[0].I_YES_RPM.I_SRLT_EQ_2.U_SRLL_Q15_UNCONNECTED ; + wire \NLW_U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[2].U_M/U_MU/I_MUT_GAND.U_match/I_SRL16.U_GAND_SRL16/I_TW_GTE8.F_TW[0].I_YES_RPM.I_SRLT_EQ_2.U_SRLL_Q15_UNCONNECTED ; + wire \NLW_U0/I_NO_D.U_ILA/U_TRIG/U_TC/I_STORAGE_QUAL.U_CAP_B_O_UNCONNECTED ; + wire \NLW_U0/I_NO_D.U_ILA/U_TRIG/U_TC/I_STORAGE_QUAL.U_STORAGE_QUAL/I_SRLT_NE_1.I_NMU_1_TO_4.U_TCL/I_NMU_EQ4.U_iDOUT/I_NOLUT6.I_SRL_T2.U_SRLC16E_Q15_UNCONNECTED ; + wire \NLW_U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.U_RAM/G_BRAM[0].U_BRAM/ram_rt1_s1_s32_if.ram_rt1_s1_s32_i_DOB<31>_UNCONNECTED ; + wire \NLW_U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.U_RAM/G_BRAM[0].U_BRAM/ram_rt1_s1_s32_if.ram_rt1_s1_s32_i_DOB<30>_UNCONNECTED ; + wire \NLW_U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.U_RAM/G_BRAM[0].U_BRAM/ram_rt1_s1_s32_if.ram_rt1_s1_s32_i_DOB<29>_UNCONNECTED ; + wire \NLW_U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.U_RAM/G_BRAM[0].U_BRAM/ram_rt1_s1_s32_if.ram_rt1_s1_s32_i_DOB<28>_UNCONNECTED ; + wire \NLW_U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.U_RAM/G_BRAM[0].U_BRAM/ram_rt1_s1_s32_if.ram_rt1_s1_s32_i_DOB<27>_UNCONNECTED ; + wire \NLW_U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.U_RAM/G_BRAM[0].U_BRAM/ram_rt1_s1_s32_if.ram_rt1_s1_s32_i_DOB<26>_UNCONNECTED ; + wire \NLW_U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.U_RAM/G_BRAM[0].U_BRAM/ram_rt1_s1_s32_if.ram_rt1_s1_s32_i_DOB<25>_UNCONNECTED ; + wire \NLW_U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.U_RAM/G_BRAM[0].U_BRAM/ram_rt1_s1_s32_if.ram_rt1_s1_s32_i_DOB<24>_UNCONNECTED ; + wire \NLW_U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.U_RAM/G_BRAM[0].U_BRAM/ram_rt1_s1_s32_if.ram_rt1_s1_s32_i_DOB<23>_UNCONNECTED ; + wire \NLW_U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.U_RAM/G_BRAM[0].U_BRAM/ram_rt1_s1_s32_if.ram_rt1_s1_s32_i_DOB<22>_UNCONNECTED ; + wire \NLW_U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.U_RAM/G_BRAM[0].U_BRAM/ram_rt1_s1_s32_if.ram_rt1_s1_s32_i_DOB<21>_UNCONNECTED ; + wire \NLW_U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.U_RAM/G_BRAM[0].U_BRAM/ram_rt1_s1_s32_if.ram_rt1_s1_s32_i_DOB<20>_UNCONNECTED ; + wire \NLW_U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.U_RAM/G_BRAM[0].U_BRAM/ram_rt1_s1_s32_if.ram_rt1_s1_s32_i_DOB<19>_UNCONNECTED ; + wire \NLW_U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.U_RAM/G_BRAM[0].U_BRAM/ram_rt1_s1_s32_if.ram_rt1_s1_s32_i_DOB<18>_UNCONNECTED ; + wire \NLW_U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.U_RAM/G_BRAM[0].U_BRAM/ram_rt1_s1_s32_if.ram_rt1_s1_s32_i_DOB<17>_UNCONNECTED ; + wire \NLW_U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.U_RAM/G_BRAM[0].U_BRAM/ram_rt1_s1_s32_if.ram_rt1_s1_s32_i_DOB<16>_UNCONNECTED ; + wire \NLW_U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.U_RAM/G_BRAM[0].U_BRAM/ram_rt1_s1_s32_if.ram_rt1_s1_s32_i_DOB<15>_UNCONNECTED ; + wire \NLW_U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.U_RAM/G_BRAM[0].U_BRAM/ram_rt1_s1_s32_if.ram_rt1_s1_s32_i_DOB<14>_UNCONNECTED ; + wire \NLW_U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.U_RAM/G_BRAM[0].U_BRAM/ram_rt1_s1_s32_if.ram_rt1_s1_s32_i_DOB<13>_UNCONNECTED ; + wire \NLW_U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.U_RAM/G_BRAM[0].U_BRAM/ram_rt1_s1_s32_if.ram_rt1_s1_s32_i_DOB<12>_UNCONNECTED ; + wire \NLW_U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.U_RAM/G_BRAM[0].U_BRAM/ram_rt1_s1_s32_if.ram_rt1_s1_s32_i_DOB<11>_UNCONNECTED ; + wire \NLW_U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.U_RAM/G_BRAM[0].U_BRAM/ram_rt1_s1_s32_if.ram_rt1_s1_s32_i_DOB<10>_UNCONNECTED ; + wire \NLW_U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.U_RAM/G_BRAM[0].U_BRAM/ram_rt1_s1_s32_if.ram_rt1_s1_s32_i_DOB<9>_UNCONNECTED ; + wire \NLW_U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.U_RAM/G_BRAM[0].U_BRAM/ram_rt1_s1_s32_if.ram_rt1_s1_s32_i_DOB<8>_UNCONNECTED ; + wire \NLW_U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.U_RAM/G_BRAM[0].U_BRAM/ram_rt1_s1_s32_if.ram_rt1_s1_s32_i_DOB<7>_UNCONNECTED ; + wire \NLW_U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.U_RAM/G_BRAM[0].U_BRAM/ram_rt1_s1_s32_if.ram_rt1_s1_s32_i_DOB<6>_UNCONNECTED ; + wire \NLW_U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.U_RAM/G_BRAM[0].U_BRAM/ram_rt1_s1_s32_if.ram_rt1_s1_s32_i_DOB<5>_UNCONNECTED ; + wire \NLW_U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.U_RAM/G_BRAM[0].U_BRAM/ram_rt1_s1_s32_if.ram_rt1_s1_s32_i_DOB<4>_UNCONNECTED ; + wire \NLW_U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.U_RAM/G_BRAM[0].U_BRAM/ram_rt1_s1_s32_if.ram_rt1_s1_s32_i_DOB<3>_UNCONNECTED ; + wire \NLW_U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.U_RAM/G_BRAM[0].U_BRAM/ram_rt1_s1_s32_if.ram_rt1_s1_s32_i_DOB<2>_UNCONNECTED ; + wire \NLW_U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.U_RAM/G_BRAM[0].U_BRAM/ram_rt1_s1_s32_if.ram_rt1_s1_s32_i_DOB<1>_UNCONNECTED ; + wire \NLW_U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.U_RAM/G_BRAM[0].U_BRAM/ram_rt1_s1_s32_if.ram_rt1_s1_s32_i_DOB<0>_UNCONNECTED ; + wire \NLW_U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.U_RAM/G_BRAM[0].U_BRAM/ram_rt1_s1_s32_if.ram_rt1_s1_s32_i_DOPB<3>_UNCONNECTED ; + wire \NLW_U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.U_RAM/G_BRAM[0].U_BRAM/ram_rt1_s1_s32_if.ram_rt1_s1_s32_i_DOPB<2>_UNCONNECTED ; + wire \NLW_U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.U_RAM/G_BRAM[0].U_BRAM/ram_rt1_s1_s32_if.ram_rt1_s1_s32_i_DOPB<1>_UNCONNECTED ; + wire \NLW_U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.U_RAM/G_BRAM[0].U_BRAM/ram_rt1_s1_s32_if.ram_rt1_s1_s32_i_DOPB<0>_UNCONNECTED ; + wire [27 : 0] \U0/I_NO_D.U_ILA/I_DQ.U_DQQ/temp ; + wire [13 : 1] \U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.I_RDADDR/U_HC/CI ; + wire [13 : 0] \U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.I_RDADDR/U_HC/D ; + wire [13 : 0] \U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.I_RDADDR/U_HC/S ; + wire [13 : 0] \U0/I_NO_D.U_ILA/U_CAPSTOR/RD_ADDR ; + wire [3 : 1] \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_CDONE/iCFG_DATA ; + wire [3 : 0] \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_CDONE/iO ; + wire [1 : 0] \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_CDONE/jO ; + wire [3 : 1] \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_CMPRESET/iCFG_DATA ; + wire [3 : 0] \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_CMPRESET/iO ; + wire [1 : 0] \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_CMPRESET/jO ; + wire [7 : 1] \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_NS0/iCFG_DATA ; + wire [7 : 0] \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_NS0/iO ; + wire [3 : 0] \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_NS0/jO ; + wire [1 : 0] \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_NS0/kO ; + wire [7 : 1] \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_NS1/iCFG_DATA ; + wire [7 : 0] \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_NS1/iO ; + wire [3 : 0] \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_NS1/jO ; + wire [1 : 0] \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_NS1/kO ; + wire [1 : 1] \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_SCMPCE/iCFG_DATA ; + wire [1 : 0] \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_SCMPCE/iO ; + wire [3 : 1] \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_SCRST/iCFG_DATA ; + wire [3 : 0] \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_SCRST/iO ; + wire [1 : 0] \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_SCRST/jO ; + wire [1 : 1] \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_WHCMPCE/iCFG_DATA ; + wire [1 : 0] \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_WHCMPCE/iO ; + wire [1 : 1] \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_WLCMPCE/iCFG_DATA ; + wire [1 : 0] \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_WLCMPCE/iO ; + wire [8 : 0] \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/CAP_ADDR_next ; + wire [8 : 1] \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_NO_TSEQ.I_SRLT_NE_1.U_SCNT/CI ; + wire [8 : 0] \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_NO_TSEQ.I_SRLT_NE_1.U_SCNT/D ; + wire [8 : 0] \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_NO_TSEQ.I_SRLT_NE_1.U_SCNT/S ; + wire [8 : 1] \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_SRLT_NE_1.U_WCNT/CI ; + wire [8 : 0] \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_SRLT_NE_1.U_WCNT/D ; + wire [8 : 0] \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_SRLT_NE_1.U_WCNT/S ; + wire [1 : 1] \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/U_SCNT_CMP/I_SRL16.U_GAND_SRL16/cfg_data ; + wire [1 : 0] \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/U_SCNT_CMP/I_SRL16.U_GAND_SRL16/tmpCompData ; + wire [1 : 1] \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/U_WCNT_HCMP/I_SRL16.U_GAND_SRL16/cfg_data ; + wire [1 : 0] \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/U_WCNT_HCMP/I_SRL16.U_GAND_SRL16/tmpCompData ; + wire [1 : 1] \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/U_WCNT_LCMP/I_SRL16.U_GAND_SRL16/cfg_data ; + wire [1 : 0] \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/U_WCNT_LCMP/I_SRL16.U_GAND_SRL16/tmpCompData ; + wire [4 : 0] \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/cfg_data ; + wire [16 : 1] \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/cfg_data_vec ; + wire [8 : 0] \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/iCAP_ADDR ; + wire [8 : 0] \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/iSCNT ; + wire [9 : 0] \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/cfg_data ; + wire [1 : 0] \U0/I_NO_D.U_ILA/U_RST/U_ARM_XFER/iDIN ; + wire [1 : 0] \U0/I_NO_D.U_ILA/U_RST/U_HALT_XFER/iDIN ; + wire [0 : 0] \U0/I_NO_D.U_ILA/U_RST/iRESET ; + wire [8 : 0] \U0/I_NO_D.U_ILA/U_STAT/NS_dstat ; + wire [1 : 0] \U0/I_NO_D.U_ILA/U_STAT/STATE_dstat ; + wire [1 : 0] \U0/I_NO_D.U_ILA/U_STAT/U_DSL1/iDIN ; + wire [1 : 0] \U0/I_NO_D.U_ILA/U_STAT/U_DSL1/iDOUT_dly ; + wire [1 : 0] \U0/I_NO_D.U_ILA/U_STAT/U_RESET_EDGE/iDOUT ; + wire [9 : 1] \U0/I_NO_D.U_ILA/U_STAT/U_STAT_CNT/CI ; + wire [9 : 0] \U0/I_NO_D.U_ILA/U_STAT/U_STAT_CNT/D ; + wire [9 : 0] \U0/I_NO_D.U_ILA/U_STAT/U_STAT_CNT/S ; + wire [16 : 0] \U0/I_NO_D.U_ILA/U_STAT/iSTAT ; + wire [9 : 0] \U0/I_NO_D.U_ILA/U_STAT/iSTAT_CNT ; + wire [1 : 1] \U0/I_NO_D.U_ILA/U_TRIG/U_TC/iCFG_DATA ; + wire [3 : 0] \U0/I_NO_D.U_ILA/U_TRIG/trigCondIn ; + wire [8 : 0] \U0/I_NO_D.U_ILA/iCAP_NUM_SAMPLES ; + wire [1 : 0] \U0/I_NO_D.U_ILA/iCAP_STATE ; + wire [8 : 0] \U0/I_NO_D.U_ILA/iCAP_WR_ADDR ; + wire [27 : 0] \U0/I_NO_D.U_ILA/iDATA ; + wire [7 : 0] \U0/I_NO_D.U_ILA/iRESET ; + wire [8 : 0] \U0/U_XST_CONTROLBUS_WORKAROUND/CONTROL_XST_WORKAROUND_O_cmp_eq0000_wg_cy ; + wire [8 : 0] \U0/U_XST_CONTROLBUS_WORKAROUND/CONTROL_XST_WORKAROUND_O_cmp_eq0000_wg_lut ; + wire [27 : 0] \U0/iTRIG_IN ; + GND XST_GND ( + .G(N0) + ); + VCC XST_VCC ( + .P(N1) + ); + FDRE #( + .INIT ( 1'b0 )) + \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_WCNT_HCMP_Q ( + .C(CLK), + .CE(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/WCNT_HCMP_CE ), + .D(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/WCNT_HCMP ), + .R(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/CMP_RESET ), + .Q(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/WCNT_HCMP_Q ) + ); + FDRE #( + .INIT ( 1'b0 )) + \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_WCNT_LCMP_Q ( + .C(CLK), + .CE(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/WCNT_LCMP_CE ), + .D(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/WCNT_LCMP ), + .R(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/CMP_RESET ), + .Q(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/WCNT_LCMP_Q ) + ); + FDRE #( + .INIT ( 1'b0 )) + \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_SCNT_CMP_Q ( + .C(CLK), + .CE(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/SCNT_CMP_CE ), + .D(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/SCNT_CMP ), + .R(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/CMP_RESET ), + .Q(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/SCNT_CMP_Q ) + ); + FDR #( + .INIT ( 1'b0 )) + \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_INTCAP_F.U_CAPWE0 ( + .C(CLK), + .D(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/SCNT_CE ), + .R(\U0/I_NO_D.U_ILA/iRESET [6]), + .Q(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/iCAP_WR_EN ) + ); + FDR #( + .INIT ( 1'b0 )) + \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_INTCAP_F.U_CAPWE1 ( + .C(CLK), + .D(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/iCAP_WR_EN ), + .R(\U0/I_NO_D.U_ILA/iRESET [7]), + .Q(\U0/I_NO_D.U_ILA/iCAP_WR_EN ) + ); + FDR #( + .INIT ( 1'b0 )) + \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_TRIG0 ( + .C(CLK), + .D(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/iTRIGGER_IN ), + .R(\U0/I_NO_D.U_ILA/iRESET [6]), + .Q(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/iTRIGGER_OUT ) + ); + FDR #( + .INIT ( 1'b0 )) + \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_TRIG1 ( + .C(CLK), + .D(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/iTRIGGER_OUT ), + .R(\U0/I_NO_D.U_ILA/iRESET [7]), + .Q(\U0/I_NO_D.U_ILA/iCAP_TRIGGER_OUT ) + ); + FDR #( + .INIT ( 1'b0 )) + \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_NS0/I_NOLUT6.I_SRL_T2.I_YES_RPM.I_YES_OREG.OUT_REG ( + .C(CLK), + .D(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_NS0/iOUT ), + .R(\U0/I_NO_D.U_ILA/iRESET [6]), + .Q(\U0/I_NO_D.U_ILA/iCAP_STATE [0]) + ); + FDR #( + .INIT ( 1'b0 )) + \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_NS1/I_NOLUT6.I_SRL_T2.I_YES_RPM.I_YES_OREG.OUT_REG ( + .C(CLK), + .D(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_NS1/iOUT ), + .R(\U0/I_NO_D.U_ILA/iRESET [6]), + .Q(\U0/I_NO_D.U_ILA/iCAP_STATE [1]) + ); + LUT3 #( + .INIT ( 8'h20 )) + \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_TRIG ( + .I0(\U0/I_NO_D.U_ILA/iTRIGGER ), + .I1(\U0/I_NO_D.U_ILA/iCAP_STATE [0]), + .I2(\U0/I_NO_D.U_ILA/iCAP_STATE [1]), + .O(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/iTRIGGER_IN ) + ); + SRLC16E #( + .INIT ( 16'h0000 )) + \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_SCE/I_NOLUT6.I_SRL_T2.U_SRLC16E ( + .A0(\U0/I_NO_D.U_ILA/iCAP_STATE [0]), + .A1(\U0/I_NO_D.U_ILA/iCAP_STATE [1]), + .A2(\U0/I_NO_D.U_ILA/iTRIGGER ), + .A3(\U0/I_NO_D.U_ILA/iCAPTURE ), + .CE(CONTROL[9]), + .CLK(CONTROL[0]), + .D(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_SCE/iCFG_DIN ), + .Q(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/SCNT_CE ), + .Q15(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/cfg_data [5]) + ); + LUT2 #( + .INIT ( 4'h8 )) + \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_SCE/I_NOLUT6.I_SRL_T2.U_LUT ( + .I0(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/cfg_data [4]), + .I1(CONTROL[9]), + .O(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_SCE/iCFG_DIN ) + ); + SRLC16E #( + .INIT ( 16'h0000 )) + \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_WCE/I_NOLUT6.I_SRL_T2.U_SRLC16E ( + .A0(\U0/I_NO_D.U_ILA/iCAP_STATE [0]), + .A1(\U0/I_NO_D.U_ILA/iCAP_STATE [1]), + .A2(\U0/I_NO_D.U_ILA/iTRIGGER ), + .A3(\U0/I_NO_D.U_ILA/iCAPTURE ), + .CE(CONTROL[9]), + .CLK(CONTROL[0]), + .D(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_WCE/iCFG_DIN ), + .Q(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/WCNT_CE ), + .Q15(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/cfg_data [4]) + ); + LUT2 #( + .INIT ( 4'h8 )) + \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_WCE/I_NOLUT6.I_SRL_T2.U_LUT ( + .I0(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/cfg_data [3]), + .I1(CONTROL[9]), + .O(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_WCE/iCFG_DIN ) + ); + LUT3 #( + .INIT ( 8'hCA )) + \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_NS0/I_NOLUT6.I_SRL_T2.I_YES_RPM.I_YES_OREG.U_MUXF7 ( + .I0(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_NS0/kO [1]), + .I1(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_NS0/kO [0]), + .I2(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/WCNT_HCMP_Q ), + .O(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_NS0/iOUT ) + ); + MUXF6 \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_NS0/I_NOLUT6.I_SRL_T2.I_YES_RPM.I_S3.U0_MUXF6 ( + .I0(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_NS0/jO [1]), + .I1(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_NS0/jO [0]), + .S(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/WCNT_LCMP_Q ), + .O(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_NS0/kO [0]) + ); + MUXF6 \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_NS0/I_NOLUT6.I_SRL_T2.I_YES_RPM.I_S3.U1_MUXF6 ( + .I0(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_NS0/jO [3]), + .I1(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_NS0/jO [2]), + .S(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/WCNT_LCMP_Q ), + .O(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_NS0/kO [1]) + ); + MUXF5 \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_NS0/I_NOLUT6.I_SRL_T2.I_YES_RPM.I_S3.U0_MUXF5 ( + .I0(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_NS0/iO [1]), + .I1(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_NS0/iO [0]), + .S(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/SCNT_CMP_Q ), + .O(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_NS0/jO [0]) + ); + MUXF5 \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_NS0/I_NOLUT6.I_SRL_T2.I_YES_RPM.I_S3.U1_MUXF5 ( + .I0(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_NS0/iO [3]), + .I1(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_NS0/iO [2]), + .S(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/SCNT_CMP_Q ), + .O(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_NS0/jO [1]) + ); + MUXF5 \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_NS0/I_NOLUT6.I_SRL_T2.I_YES_RPM.I_S3.U2_MUXF5 ( + .I0(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_NS0/iO [5]), + .I1(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_NS0/iO [4]), + .S(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/SCNT_CMP_Q ), + .O(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_NS0/jO [2]) + ); + MUXF5 \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_NS0/I_NOLUT6.I_SRL_T2.I_YES_RPM.I_S3.U3_MUXF5 ( + .I0(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_NS0/iO [7]), + .I1(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_NS0/iO [6]), + .S(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/SCNT_CMP_Q ), + .O(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_NS0/jO [3]) + ); + SRLC16E #( + .INIT ( 16'h0000 )) + \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_NS0/I_NOLUT6.I_SRL_T2.I_YES_RPM.I_S3.UF0_CFGLUT4 ( + .A0(\U0/I_NO_D.U_ILA/iCAP_STATE [0]), + .A1(\U0/I_NO_D.U_ILA/iCAP_STATE [1]), + .A2(\U0/I_NO_D.U_ILA/iTRIGGER ), + .A3(\U0/I_NO_D.U_ILA/iCAPTURE ), + .CE(CONTROL[9]), + .CLK(CONTROL[0]), + .D(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_NS0/iCFG_DATA [1]), + .Q(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_NS0/iO [0]), + .Q15(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/cfg_data [2]) + ); + SRLC16E #( + .INIT ( 16'h0000 )) + \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_NS0/I_NOLUT6.I_SRL_T2.I_YES_RPM.I_S3.UG0_CFGLUT4 ( + .A0(\U0/I_NO_D.U_ILA/iCAP_STATE [0]), + .A1(\U0/I_NO_D.U_ILA/iCAP_STATE [1]), + .A2(\U0/I_NO_D.U_ILA/iTRIGGER ), + .A3(\U0/I_NO_D.U_ILA/iCAPTURE ), + .CE(CONTROL[9]), + .CLK(CONTROL[0]), + .D(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_NS0/iCFG_DATA [2]), + .Q(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_NS0/iO [1]), + .Q15(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_NS0/iCFG_DATA [1]) + ); + SRLC16E #( + .INIT ( 16'h0000 )) + \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_NS0/I_NOLUT6.I_SRL_T2.I_YES_RPM.I_S3.UF1_CFGLUT4 ( + .A0(\U0/I_NO_D.U_ILA/iCAP_STATE [0]), + .A1(\U0/I_NO_D.U_ILA/iCAP_STATE [1]), + .A2(\U0/I_NO_D.U_ILA/iTRIGGER ), + .A3(\U0/I_NO_D.U_ILA/iCAPTURE ), + .CE(CONTROL[9]), + .CLK(CONTROL[0]), + .D(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_NS0/iCFG_DATA [3]), + .Q(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_NS0/iO [2]), + .Q15(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_NS0/iCFG_DATA [2]) + ); + SRLC16E #( + .INIT ( 16'h0000 )) + \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_NS0/I_NOLUT6.I_SRL_T2.I_YES_RPM.I_S3.UG1_CFGLUT4 ( + .A0(\U0/I_NO_D.U_ILA/iCAP_STATE [0]), + .A1(\U0/I_NO_D.U_ILA/iCAP_STATE [1]), + .A2(\U0/I_NO_D.U_ILA/iTRIGGER ), + .A3(\U0/I_NO_D.U_ILA/iCAPTURE ), + .CE(CONTROL[9]), + .CLK(CONTROL[0]), + .D(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_NS0/iCFG_DATA [4]), + .Q(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_NS0/iO [3]), + .Q15(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_NS0/iCFG_DATA [3]) + ); + SRLC16E #( + .INIT ( 16'h0000 )) + \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_NS0/I_NOLUT6.I_SRL_T2.I_YES_RPM.I_S3.UF2_CFGLUT4 ( + .A0(\U0/I_NO_D.U_ILA/iCAP_STATE [0]), + .A1(\U0/I_NO_D.U_ILA/iCAP_STATE [1]), + .A2(\U0/I_NO_D.U_ILA/iTRIGGER ), + .A3(\U0/I_NO_D.U_ILA/iCAPTURE ), + .CE(CONTROL[9]), + .CLK(CONTROL[0]), + .D(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_NS0/iCFG_DATA [5]), + .Q(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_NS0/iO [4]), + .Q15(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_NS0/iCFG_DATA [4]) + ); + SRLC16E #( + .INIT ( 16'h0000 )) + \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_NS0/I_NOLUT6.I_SRL_T2.I_YES_RPM.I_S3.UG2_CFGLUT4 ( + .A0(\U0/I_NO_D.U_ILA/iCAP_STATE [0]), + .A1(\U0/I_NO_D.U_ILA/iCAP_STATE [1]), + .A2(\U0/I_NO_D.U_ILA/iTRIGGER ), + .A3(\U0/I_NO_D.U_ILA/iCAPTURE ), + .CE(CONTROL[9]), + .CLK(CONTROL[0]), + .D(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_NS0/iCFG_DATA [6]), + .Q(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_NS0/iO [5]), + .Q15(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_NS0/iCFG_DATA [5]) + ); + SRLC16E #( + .INIT ( 16'h0000 )) + \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_NS0/I_NOLUT6.I_SRL_T2.I_YES_RPM.I_S3.UF3_CFGLUT4 ( + .A0(\U0/I_NO_D.U_ILA/iCAP_STATE [0]), + .A1(\U0/I_NO_D.U_ILA/iCAP_STATE [1]), + .A2(\U0/I_NO_D.U_ILA/iTRIGGER ), + .A3(\U0/I_NO_D.U_ILA/iCAPTURE ), + .CE(CONTROL[9]), + .CLK(CONTROL[0]), + .D(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_NS0/iCFG_DATA [7]), + .Q(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_NS0/iO [6]), + .Q15(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_NS0/iCFG_DATA [6]) + ); + SRLC16E #( + .INIT ( 16'h0000 )) + \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_NS0/I_NOLUT6.I_SRL_T2.I_YES_RPM.I_S3.UG3_CFGLUT4 ( + .A0(\U0/I_NO_D.U_ILA/iCAP_STATE [0]), + .A1(\U0/I_NO_D.U_ILA/iCAP_STATE [1]), + .A2(\U0/I_NO_D.U_ILA/iTRIGGER ), + .A3(\U0/I_NO_D.U_ILA/iCAPTURE ), + .CE(CONTROL[9]), + .CLK(CONTROL[0]), + .D(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_NS0/iCFG_DIN ), + .Q(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_NS0/iO [7]), + .Q15(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_NS0/iCFG_DATA [7]) + ); + LUT2 #( + .INIT ( 4'h8 )) + \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_NS0/I_NOLUT6.I_SRL_T2.U_LUT ( + .I0(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/cfg_data [1]), + .I1(CONTROL[9]), + .O(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_NS0/iCFG_DIN ) + ); + LUT3 #( + .INIT ( 8'hCA )) + \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_NS1/I_NOLUT6.I_SRL_T2.I_YES_RPM.I_YES_OREG.U_MUXF7 ( + .I0(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_NS1/kO [1]), + .I1(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_NS1/kO [0]), + .I2(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/WCNT_HCMP_Q ), + .O(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_NS1/iOUT ) + ); + MUXF6 \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_NS1/I_NOLUT6.I_SRL_T2.I_YES_RPM.I_S3.U0_MUXF6 ( + .I0(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_NS1/jO [1]), + .I1(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_NS1/jO [0]), + .S(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/WCNT_LCMP_Q ), + .O(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_NS1/kO [0]) + ); + MUXF6 \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_NS1/I_NOLUT6.I_SRL_T2.I_YES_RPM.I_S3.U1_MUXF6 ( + .I0(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_NS1/jO [3]), + .I1(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_NS1/jO [2]), + .S(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/WCNT_LCMP_Q ), + .O(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_NS1/kO [1]) + ); + MUXF5 \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_NS1/I_NOLUT6.I_SRL_T2.I_YES_RPM.I_S3.U0_MUXF5 ( + .I0(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_NS1/iO [1]), + .I1(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_NS1/iO [0]), + .S(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/SCNT_CMP_Q ), + .O(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_NS1/jO [0]) + ); + MUXF5 \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_NS1/I_NOLUT6.I_SRL_T2.I_YES_RPM.I_S3.U1_MUXF5 ( + .I0(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_NS1/iO [3]), + .I1(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_NS1/iO [2]), + .S(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/SCNT_CMP_Q ), + .O(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_NS1/jO [1]) + ); + MUXF5 \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_NS1/I_NOLUT6.I_SRL_T2.I_YES_RPM.I_S3.U2_MUXF5 ( + .I0(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_NS1/iO [5]), + .I1(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_NS1/iO [4]), + .S(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/SCNT_CMP_Q ), + .O(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_NS1/jO [2]) + ); + MUXF5 \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_NS1/I_NOLUT6.I_SRL_T2.I_YES_RPM.I_S3.U3_MUXF5 ( + .I0(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_NS1/iO [7]), + .I1(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_NS1/iO [6]), + .S(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/SCNT_CMP_Q ), + .O(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_NS1/jO [3]) + ); + SRLC16E #( + .INIT ( 16'h0000 )) + \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_NS1/I_NOLUT6.I_SRL_T2.I_YES_RPM.I_S3.UF0_CFGLUT4 ( + .A0(\U0/I_NO_D.U_ILA/iCAP_STATE [0]), + .A1(\U0/I_NO_D.U_ILA/iCAP_STATE [1]), + .A2(\U0/I_NO_D.U_ILA/iTRIGGER ), + .A3(\U0/I_NO_D.U_ILA/iCAPTURE ), + .CE(CONTROL[9]), + .CLK(CONTROL[0]), + .D(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_NS1/iCFG_DATA [1]), + .Q(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_NS1/iO [0]), + .Q15(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/cfg_data [1]) + ); + SRLC16E #( + .INIT ( 16'h0000 )) + \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_NS1/I_NOLUT6.I_SRL_T2.I_YES_RPM.I_S3.UG0_CFGLUT4 ( + .A0(\U0/I_NO_D.U_ILA/iCAP_STATE [0]), + .A1(\U0/I_NO_D.U_ILA/iCAP_STATE [1]), + .A2(\U0/I_NO_D.U_ILA/iTRIGGER ), + .A3(\U0/I_NO_D.U_ILA/iCAPTURE ), + .CE(CONTROL[9]), + .CLK(CONTROL[0]), + .D(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_NS1/iCFG_DATA [2]), + .Q(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_NS1/iO [1]), + .Q15(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_NS1/iCFG_DATA [1]) + ); + SRLC16E #( + .INIT ( 16'h0000 )) + \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_NS1/I_NOLUT6.I_SRL_T2.I_YES_RPM.I_S3.UF1_CFGLUT4 ( + .A0(\U0/I_NO_D.U_ILA/iCAP_STATE [0]), + .A1(\U0/I_NO_D.U_ILA/iCAP_STATE [1]), + .A2(\U0/I_NO_D.U_ILA/iTRIGGER ), + .A3(\U0/I_NO_D.U_ILA/iCAPTURE ), + .CE(CONTROL[9]), + .CLK(CONTROL[0]), + .D(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_NS1/iCFG_DATA [3]), + .Q(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_NS1/iO [2]), + .Q15(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_NS1/iCFG_DATA [2]) + ); + SRLC16E #( + .INIT ( 16'h0000 )) + \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_NS1/I_NOLUT6.I_SRL_T2.I_YES_RPM.I_S3.UG1_CFGLUT4 ( + .A0(\U0/I_NO_D.U_ILA/iCAP_STATE [0]), + .A1(\U0/I_NO_D.U_ILA/iCAP_STATE [1]), + .A2(\U0/I_NO_D.U_ILA/iTRIGGER ), + .A3(\U0/I_NO_D.U_ILA/iCAPTURE ), + .CE(CONTROL[9]), + .CLK(CONTROL[0]), + .D(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_NS1/iCFG_DATA [4]), + .Q(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_NS1/iO [3]), + .Q15(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_NS1/iCFG_DATA [3]) + ); + SRLC16E #( + .INIT ( 16'h0000 )) + \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_NS1/I_NOLUT6.I_SRL_T2.I_YES_RPM.I_S3.UF2_CFGLUT4 ( + .A0(\U0/I_NO_D.U_ILA/iCAP_STATE [0]), + .A1(\U0/I_NO_D.U_ILA/iCAP_STATE [1]), + .A2(\U0/I_NO_D.U_ILA/iTRIGGER ), + .A3(\U0/I_NO_D.U_ILA/iCAPTURE ), + .CE(CONTROL[9]), + .CLK(CONTROL[0]), + .D(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_NS1/iCFG_DATA [5]), + .Q(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_NS1/iO [4]), + .Q15(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_NS1/iCFG_DATA [4]) + ); + SRLC16E #( + .INIT ( 16'h0000 )) + \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_NS1/I_NOLUT6.I_SRL_T2.I_YES_RPM.I_S3.UG2_CFGLUT4 ( + .A0(\U0/I_NO_D.U_ILA/iCAP_STATE [0]), + .A1(\U0/I_NO_D.U_ILA/iCAP_STATE [1]), + .A2(\U0/I_NO_D.U_ILA/iTRIGGER ), + .A3(\U0/I_NO_D.U_ILA/iCAPTURE ), + .CE(CONTROL[9]), + .CLK(CONTROL[0]), + .D(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_NS1/iCFG_DATA [6]), + .Q(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_NS1/iO [5]), + .Q15(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_NS1/iCFG_DATA [5]) + ); + SRLC16E #( + .INIT ( 16'h0000 )) + \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_NS1/I_NOLUT6.I_SRL_T2.I_YES_RPM.I_S3.UF3_CFGLUT4 ( + .A0(\U0/I_NO_D.U_ILA/iCAP_STATE [0]), + .A1(\U0/I_NO_D.U_ILA/iCAP_STATE [1]), + .A2(\U0/I_NO_D.U_ILA/iTRIGGER ), + .A3(\U0/I_NO_D.U_ILA/iCAPTURE ), + .CE(CONTROL[9]), + .CLK(CONTROL[0]), + .D(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_NS1/iCFG_DATA [7]), + .Q(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_NS1/iO [6]), + .Q15(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_NS1/iCFG_DATA [6]) + ); + SRLC16E #( + .INIT ( 16'h0000 )) + \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_NS1/I_NOLUT6.I_SRL_T2.I_YES_RPM.I_S3.UG3_CFGLUT4 ( + .A0(\U0/I_NO_D.U_ILA/iCAP_STATE [0]), + .A1(\U0/I_NO_D.U_ILA/iCAP_STATE [1]), + .A2(\U0/I_NO_D.U_ILA/iTRIGGER ), + .A3(\U0/I_NO_D.U_ILA/iCAPTURE ), + .CE(CONTROL[9]), + .CLK(CONTROL[0]), + .D(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_NS1/iCFG_DIN ), + .Q(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_NS1/iO [7]), + .Q15(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_NS1/iCFG_DATA [7]) + ); + LUT2 #( + .INIT ( 4'h8 )) + \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_NS1/I_NOLUT6.I_SRL_T2.U_LUT ( + .I0(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/cfg_data [0]), + .I1(CONTROL[9]), + .O(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_NS1/iCFG_DIN ) + ); + MUXF6 \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_CMPRESET/I_NOLUT6.I_SRL_T2.I_YES_RPM.I_NO_OREG.U_MUXF6 ( + .I0(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_CMPRESET/jO [1]), + .I1(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_CMPRESET/jO [0]), + .S(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/SCNT_CMP_Q ), + .O(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/CMP_RESET ) + ); + MUXF5 \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_CMPRESET/I_NOLUT6.I_SRL_T2.I_YES_RPM.U0_MUXF5 ( + .I0(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_CMPRESET/iO [1]), + .I1(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_CMPRESET/iO [0]), + .S(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/WCNT_LCMP_Q ), + .O(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_CMPRESET/jO [0]) + ); + MUXF5 \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_CMPRESET/I_NOLUT6.I_SRL_T2.I_YES_RPM.U1_MUXF5 ( + .I0(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_CMPRESET/iO [3]), + .I1(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_CMPRESET/iO [2]), + .S(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/WCNT_LCMP_Q ), + .O(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_CMPRESET/jO [1]) + ); + SRLC16E #( + .INIT ( 16'h0000 )) + \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_CMPRESET/I_NOLUT6.I_SRL_T2.I_YES_RPM.UF0_CFGLUT4 ( + .A0(\U0/I_NO_D.U_ILA/iCAP_STATE [0]), + .A1(\U0/I_NO_D.U_ILA/iCAP_STATE [1]), + .A2(\U0/I_NO_D.U_ILA/iTRIGGER ), + .A3(\U0/I_NO_D.U_ILA/iCAPTURE ), + .CE(CONTROL[9]), + .CLK(CONTROL[0]), + .D(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_CMPRESET/iCFG_DATA [1]), + .Q(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_CMPRESET/iO [0]), + .Q15(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/cfg_data [6]) + ); + SRLC16E #( + .INIT ( 16'h0000 )) + \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_CMPRESET/I_NOLUT6.I_SRL_T2.I_YES_RPM.UG0_CFGLUT4 ( + .A0(\U0/I_NO_D.U_ILA/iCAP_STATE [0]), + .A1(\U0/I_NO_D.U_ILA/iCAP_STATE [1]), + .A2(\U0/I_NO_D.U_ILA/iTRIGGER ), + .A3(\U0/I_NO_D.U_ILA/iCAPTURE ), + .CE(CONTROL[9]), + .CLK(CONTROL[0]), + .D(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_CMPRESET/iCFG_DATA [2]), + .Q(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_CMPRESET/iO [1]), + .Q15(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_CMPRESET/iCFG_DATA [1]) + ); + SRLC16E #( + .INIT ( 16'h0000 )) + \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_CMPRESET/I_NOLUT6.I_SRL_T2.I_YES_RPM.UF1_CFGLUT4 ( + .A0(\U0/I_NO_D.U_ILA/iCAP_STATE [0]), + .A1(\U0/I_NO_D.U_ILA/iCAP_STATE [1]), + .A2(\U0/I_NO_D.U_ILA/iTRIGGER ), + .A3(\U0/I_NO_D.U_ILA/iCAPTURE ), + .CE(CONTROL[9]), + .CLK(CONTROL[0]), + .D(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_CMPRESET/iCFG_DATA [3]), + .Q(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_CMPRESET/iO [2]), + .Q15(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_CMPRESET/iCFG_DATA [2]) + ); + SRLC16E #( + .INIT ( 16'h0000 )) + \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_CMPRESET/I_NOLUT6.I_SRL_T2.I_YES_RPM.UG1_CFGLUT4 ( + .A0(\U0/I_NO_D.U_ILA/iCAP_STATE [0]), + .A1(\U0/I_NO_D.U_ILA/iCAP_STATE [1]), + .A2(\U0/I_NO_D.U_ILA/iTRIGGER ), + .A3(\U0/I_NO_D.U_ILA/iCAPTURE ), + .CE(CONTROL[9]), + .CLK(CONTROL[0]), + .D(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_CMPRESET/iCFG_DIN ), + .Q(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_CMPRESET/iO [3]), + .Q15(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_CMPRESET/iCFG_DATA [3]) + ); + LUT2 #( + .INIT ( 4'h8 )) + \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_CMPRESET/I_NOLUT6.I_SRL_T2.U_LUT ( + .I0(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/cfg_data [5]), + .I1(CONTROL[9]), + .O(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_CMPRESET/iCFG_DIN ) + ); + MUXF6 \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_SCRST/I_NOLUT6.I_SRL_T2.I_YES_RPM.I_NO_OREG.U_MUXF6 ( + .I0(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_SCRST/jO [1]), + .I1(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_SCRST/jO [0]), + .S(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/SCNT_CMP_Q ), + .O(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/SCNT_RESET ) + ); + MUXF5 \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_SCRST/I_NOLUT6.I_SRL_T2.I_YES_RPM.U0_MUXF5 ( + .I0(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_SCRST/iO [1]), + .I1(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_SCRST/iO [0]), + .S(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/WCNT_LCMP_Q ), + .O(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_SCRST/jO [0]) + ); + MUXF5 \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_SCRST/I_NOLUT6.I_SRL_T2.I_YES_RPM.U1_MUXF5 ( + .I0(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_SCRST/iO [3]), + .I1(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_SCRST/iO [2]), + .S(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/WCNT_LCMP_Q ), + .O(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_SCRST/jO [1]) + ); + SRLC16E #( + .INIT ( 16'h0000 )) + \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_SCRST/I_NOLUT6.I_SRL_T2.I_YES_RPM.UF0_CFGLUT4 ( + .A0(\U0/I_NO_D.U_ILA/iCAP_STATE [0]), + .A1(\U0/I_NO_D.U_ILA/iCAP_STATE [1]), + .A2(\U0/I_NO_D.U_ILA/iTRIGGER ), + .A3(\U0/I_NO_D.U_ILA/iCAPTURE ), + .CE(CONTROL[9]), + .CLK(CONTROL[0]), + .D(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_SCRST/iCFG_DATA [1]), + .Q(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_SCRST/iO [0]), + .Q15(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/cfg_data [3]) + ); + SRLC16E #( + .INIT ( 16'h0000 )) + \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_SCRST/I_NOLUT6.I_SRL_T2.I_YES_RPM.UG0_CFGLUT4 ( + .A0(\U0/I_NO_D.U_ILA/iCAP_STATE [0]), + .A1(\U0/I_NO_D.U_ILA/iCAP_STATE [1]), + .A2(\U0/I_NO_D.U_ILA/iTRIGGER ), + .A3(\U0/I_NO_D.U_ILA/iCAPTURE ), + .CE(CONTROL[9]), + .CLK(CONTROL[0]), + .D(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_SCRST/iCFG_DATA [2]), + .Q(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_SCRST/iO [1]), + .Q15(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_SCRST/iCFG_DATA [1]) + ); + SRLC16E #( + .INIT ( 16'h0000 )) + \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_SCRST/I_NOLUT6.I_SRL_T2.I_YES_RPM.UF1_CFGLUT4 ( + .A0(\U0/I_NO_D.U_ILA/iCAP_STATE [0]), + .A1(\U0/I_NO_D.U_ILA/iCAP_STATE [1]), + .A2(\U0/I_NO_D.U_ILA/iTRIGGER ), + .A3(\U0/I_NO_D.U_ILA/iCAPTURE ), + .CE(CONTROL[9]), + .CLK(CONTROL[0]), + .D(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_SCRST/iCFG_DATA [3]), + .Q(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_SCRST/iO [2]), + .Q15(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_SCRST/iCFG_DATA [2]) + ); + SRLC16E #( + .INIT ( 16'h0000 )) + \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_SCRST/I_NOLUT6.I_SRL_T2.I_YES_RPM.UG1_CFGLUT4 ( + .A0(\U0/I_NO_D.U_ILA/iCAP_STATE [0]), + .A1(\U0/I_NO_D.U_ILA/iCAP_STATE [1]), + .A2(\U0/I_NO_D.U_ILA/iTRIGGER ), + .A3(\U0/I_NO_D.U_ILA/iCAPTURE ), + .CE(CONTROL[9]), + .CLK(CONTROL[0]), + .D(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_SCRST/iCFG_DIN ), + .Q(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_SCRST/iO [3]), + .Q15(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_SCRST/iCFG_DATA [3]) + ); + LUT2 #( + .INIT ( 4'h8 )) + \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_SCRST/I_NOLUT6.I_SRL_T2.U_LUT ( + .I0(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/cfg_data [2]), + .I1(CONTROL[9]), + .O(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_SCRST/iCFG_DIN ) + ); + MUXF5 \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_WHCMPCE/I_NOLUT6.I_SRL_T2.I_YES_RPM.I_NO_OREG.U_MUXF5 ( + .I0(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_WHCMPCE/iO [1]), + .I1(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_WHCMPCE/iO [0]), + .S(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/WCNT_HCMP_Q ), + .O(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/WCNT_HCMP_CE ) + ); + SRLC16E #( + .INIT ( 16'h0000 )) + \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_WHCMPCE/I_NOLUT6.I_SRL_T2.I_YES_RPM.UF_cs_cfglut4 ( + .A0(\U0/I_NO_D.U_ILA/iCAP_STATE [0]), + .A1(\U0/I_NO_D.U_ILA/iCAP_STATE [1]), + .A2(\U0/I_NO_D.U_ILA/iTRIGGER ), + .A3(\U0/I_NO_D.U_ILA/iCAPTURE ), + .CE(CONTROL[9]), + .CLK(CONTROL[0]), + .D(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_WHCMPCE/iCFG_DATA [1]), + .Q(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_WHCMPCE/iO [0]), + .Q15(\NLW_U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_WHCMPCE/I_NOLUT6.I_SRL_T2.I_YES_RPM.UF_cs_cfglut4_Q15_UNCONNECTED ) + ); + SRLC16E #( + .INIT ( 16'h0000 )) + \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_WHCMPCE/I_NOLUT6.I_SRL_T2.I_YES_RPM.UG_cs_cfglut4 ( + .A0(\U0/I_NO_D.U_ILA/iCAP_STATE [0]), + .A1(\U0/I_NO_D.U_ILA/iCAP_STATE [1]), + .A2(\U0/I_NO_D.U_ILA/iTRIGGER ), + .A3(\U0/I_NO_D.U_ILA/iCAPTURE ), + .CE(CONTROL[9]), + .CLK(CONTROL[0]), + .D(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_WHCMPCE/iCFG_DIN ), + .Q(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_WHCMPCE/iO [1]), + .Q15(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_WHCMPCE/iCFG_DATA [1]) + ); + LUT2 #( + .INIT ( 4'h8 )) + \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_WHCMPCE/I_NOLUT6.I_SRL_T2.U_LUT ( + .I0(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/cfg_data [9]), + .I1(CONTROL[9]), + .O(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_WHCMPCE/iCFG_DIN ) + ); + MUXF5 \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_WLCMPCE/I_NOLUT6.I_SRL_T2.I_YES_RPM.I_NO_OREG.U_MUXF5 ( + .I0(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_WLCMPCE/iO [1]), + .I1(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_WLCMPCE/iO [0]), + .S(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/WCNT_LCMP_Q ), + .O(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/WCNT_LCMP_CE ) + ); + SRLC16E #( + .INIT ( 16'h0000 )) + \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_WLCMPCE/I_NOLUT6.I_SRL_T2.I_YES_RPM.UF_cs_cfglut4 ( + .A0(\U0/I_NO_D.U_ILA/iCAP_STATE [0]), + .A1(\U0/I_NO_D.U_ILA/iCAP_STATE [1]), + .A2(\U0/I_NO_D.U_ILA/iTRIGGER ), + .A3(\U0/I_NO_D.U_ILA/iCAPTURE ), + .CE(CONTROL[9]), + .CLK(CONTROL[0]), + .D(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_WLCMPCE/iCFG_DATA [1]), + .Q(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_WLCMPCE/iO [0]), + .Q15(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/cfg_data [9]) + ); + SRLC16E #( + .INIT ( 16'h0000 )) + \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_WLCMPCE/I_NOLUT6.I_SRL_T2.I_YES_RPM.UG_cs_cfglut4 ( + .A0(\U0/I_NO_D.U_ILA/iCAP_STATE [0]), + .A1(\U0/I_NO_D.U_ILA/iCAP_STATE [1]), + .A2(\U0/I_NO_D.U_ILA/iTRIGGER ), + .A3(\U0/I_NO_D.U_ILA/iCAPTURE ), + .CE(CONTROL[9]), + .CLK(CONTROL[0]), + .D(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_WLCMPCE/iCFG_DIN ), + .Q(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_WLCMPCE/iO [1]), + .Q15(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_WLCMPCE/iCFG_DATA [1]) + ); + LUT2 #( + .INIT ( 4'h8 )) + \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_WLCMPCE/I_NOLUT6.I_SRL_T2.U_LUT ( + .I0(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/cfg_data [8]), + .I1(CONTROL[9]), + .O(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_WLCMPCE/iCFG_DIN ) + ); + MUXF5 \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_SCMPCE/I_NOLUT6.I_SRL_T2.I_YES_RPM.I_NO_OREG.U_MUXF5 ( + .I0(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_SCMPCE/iO [1]), + .I1(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_SCMPCE/iO [0]), + .S(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/SCNT_CMP_Q ), + .O(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/SCNT_CMP_CE ) + ); + SRLC16E #( + .INIT ( 16'h0000 )) + \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_SCMPCE/I_NOLUT6.I_SRL_T2.I_YES_RPM.UF_cs_cfglut4 ( + .A0(\U0/I_NO_D.U_ILA/iCAP_STATE [0]), + .A1(\U0/I_NO_D.U_ILA/iCAP_STATE [1]), + .A2(\U0/I_NO_D.U_ILA/iTRIGGER ), + .A3(\U0/I_NO_D.U_ILA/iCAPTURE ), + .CE(CONTROL[9]), + .CLK(CONTROL[0]), + .D(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_SCMPCE/iCFG_DATA [1]), + .Q(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_SCMPCE/iO [0]), + .Q15(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/cfg_data [8]) + ); + SRLC16E #( + .INIT ( 16'h0000 )) + \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_SCMPCE/I_NOLUT6.I_SRL_T2.I_YES_RPM.UG_cs_cfglut4 ( + .A0(\U0/I_NO_D.U_ILA/iCAP_STATE [0]), + .A1(\U0/I_NO_D.U_ILA/iCAP_STATE [1]), + .A2(\U0/I_NO_D.U_ILA/iTRIGGER ), + .A3(\U0/I_NO_D.U_ILA/iCAPTURE ), + .CE(CONTROL[9]), + .CLK(CONTROL[0]), + .D(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_SCMPCE/iCFG_DIN ), + .Q(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_SCMPCE/iO [1]), + .Q15(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_SCMPCE/iCFG_DATA [1]) + ); + LUT2 #( + .INIT ( 4'h8 )) + \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_SCMPCE/I_NOLUT6.I_SRL_T2.U_LUT ( + .I0(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/cfg_data [7]), + .I1(CONTROL[9]), + .O(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_SCMPCE/iCFG_DIN ) + ); + LUT3 #( + .INIT ( 8'hCA )) + \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_CDONE/I_NOLUT6.I_SRL_T2.I_YES_RPM.I_YES_OREG.U_MUXF6 ( + .I0(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_CDONE/jO [1]), + .I1(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_CDONE/jO [0]), + .I2(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/WCNT_HCMP_Q ), + .O(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_CDONE/iOUT ) + ); + MUXF5 \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_CDONE/I_NOLUT6.I_SRL_T2.I_YES_RPM.U0_MUXF5 ( + .I0(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_CDONE/iO [1]), + .I1(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_CDONE/iO [0]), + .S(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/WCNT_LCMP_Q ), + .O(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_CDONE/jO [0]) + ); + MUXF5 \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_CDONE/I_NOLUT6.I_SRL_T2.I_YES_RPM.U1_MUXF5 ( + .I0(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_CDONE/iO [3]), + .I1(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_CDONE/iO [2]), + .S(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/WCNT_LCMP_Q ), + .O(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_CDONE/jO [1]) + ); + SRLC16E #( + .INIT ( 16'h0000 )) + \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_CDONE/I_NOLUT6.I_SRL_T2.I_YES_RPM.UF0_CFGLUT4 ( + .A0(\U0/I_NO_D.U_ILA/iCAP_STATE [0]), + .A1(\U0/I_NO_D.U_ILA/iCAP_STATE [1]), + .A2(\U0/I_NO_D.U_ILA/iTRIGGER ), + .A3(\U0/I_NO_D.U_ILA/iCAPTURE ), + .CE(CONTROL[9]), + .CLK(CONTROL[0]), + .D(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_CDONE/iCFG_DATA [1]), + .Q(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_CDONE/iO [0]), + .Q15(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/cfg_data [7]) + ); + SRLC16E #( + .INIT ( 16'h0000 )) + \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_CDONE/I_NOLUT6.I_SRL_T2.I_YES_RPM.UG0_CFGLUT4 ( + .A0(\U0/I_NO_D.U_ILA/iCAP_STATE [0]), + .A1(\U0/I_NO_D.U_ILA/iCAP_STATE [1]), + .A2(\U0/I_NO_D.U_ILA/iTRIGGER ), + .A3(\U0/I_NO_D.U_ILA/iCAPTURE ), + .CE(CONTROL[9]), + .CLK(CONTROL[0]), + .D(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_CDONE/iCFG_DATA [2]), + .Q(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_CDONE/iO [1]), + .Q15(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_CDONE/iCFG_DATA [1]) + ); + SRLC16E #( + .INIT ( 16'h0000 )) + \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_CDONE/I_NOLUT6.I_SRL_T2.I_YES_RPM.UF1_CFGLUT4 ( + .A0(\U0/I_NO_D.U_ILA/iCAP_STATE [0]), + .A1(\U0/I_NO_D.U_ILA/iCAP_STATE [1]), + .A2(\U0/I_NO_D.U_ILA/iTRIGGER ), + .A3(\U0/I_NO_D.U_ILA/iCAPTURE ), + .CE(CONTROL[9]), + .CLK(CONTROL[0]), + .D(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_CDONE/iCFG_DATA [3]), + .Q(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_CDONE/iO [2]), + .Q15(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_CDONE/iCFG_DATA [2]) + ); + SRLC16E #( + .INIT ( 16'h0000 )) + \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_CDONE/I_NOLUT6.I_SRL_T2.I_YES_RPM.UG1_CFGLUT4 ( + .A0(\U0/I_NO_D.U_ILA/iCAP_STATE [0]), + .A1(\U0/I_NO_D.U_ILA/iCAP_STATE [1]), + .A2(\U0/I_NO_D.U_ILA/iTRIGGER ), + .A3(\U0/I_NO_D.U_ILA/iCAPTURE ), + .CE(CONTROL[9]), + .CLK(CONTROL[0]), + .D(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_CDONE/iCFG_DIN ), + .Q(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_CDONE/iO [3]), + .Q15(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_CDONE/iCFG_DATA [3]) + ); + LUT2 #( + .INIT ( 4'h8 )) + \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_CDONE/I_NOLUT6.I_SRL_T2.U_LUT ( + .I0(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/cfg_data [6]), + .I1(CONTROL[9]), + .O(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_CDONE/iCFG_DIN ) + ); + FDR #( + .INIT ( 1'b0 )) + \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_CDONE/I_NOLUT6.I_SRL_T2.I_YES_RPM.I_YES_OREG.OUT_REG ( + .C(CLK), + .D(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/I_SRLT_NE_1.U_CDONE/iOUT ), + .R(N0), + .Q(\U0/I_NO_D.U_ILA/iCAP_DONE ) + ); + FDRE #( + .INIT ( 1'b0 )) + \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_NO_TSEQ.I_SRLT_NE_1.U_SCNT/G[8].U_FDRE ( + .C(CLK), + .CE(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/SCNT_CE ), + .D(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_NO_TSEQ.I_SRLT_NE_1.U_SCNT/D [8]), + .R(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/SCNT_RESET ), + .Q(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/iSCNT [8]) + ); + FDRE #( + .INIT ( 1'b0 )) + \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_NO_TSEQ.I_SRLT_NE_1.U_SCNT/G[7].U_FDRE ( + .C(CLK), + .CE(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/SCNT_CE ), + .D(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_NO_TSEQ.I_SRLT_NE_1.U_SCNT/D [7]), + .R(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/SCNT_RESET ), + .Q(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/iSCNT [7]) + ); + FDRE #( + .INIT ( 1'b0 )) + \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_NO_TSEQ.I_SRLT_NE_1.U_SCNT/G[6].U_FDRE ( + .C(CLK), + .CE(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/SCNT_CE ), + .D(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_NO_TSEQ.I_SRLT_NE_1.U_SCNT/D [6]), + .R(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/SCNT_RESET ), + .Q(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/iSCNT [6]) + ); + FDRE #( + .INIT ( 1'b0 )) + \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_NO_TSEQ.I_SRLT_NE_1.U_SCNT/G[5].U_FDRE ( + .C(CLK), + .CE(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/SCNT_CE ), + .D(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_NO_TSEQ.I_SRLT_NE_1.U_SCNT/D [5]), + .R(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/SCNT_RESET ), + .Q(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/iSCNT [5]) + ); + FDRE #( + .INIT ( 1'b0 )) + \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_NO_TSEQ.I_SRLT_NE_1.U_SCNT/G[4].U_FDRE ( + .C(CLK), + .CE(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/SCNT_CE ), + .D(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_NO_TSEQ.I_SRLT_NE_1.U_SCNT/D [4]), + .R(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/SCNT_RESET ), + .Q(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/iSCNT [4]) + ); + FDRE #( + .INIT ( 1'b0 )) + \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_NO_TSEQ.I_SRLT_NE_1.U_SCNT/G[3].U_FDRE ( + .C(CLK), + .CE(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/SCNT_CE ), + .D(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_NO_TSEQ.I_SRLT_NE_1.U_SCNT/D [3]), + .R(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/SCNT_RESET ), + .Q(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/iSCNT [3]) + ); + FDRE #( + .INIT ( 1'b0 )) + \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_NO_TSEQ.I_SRLT_NE_1.U_SCNT/G[2].U_FDRE ( + .C(CLK), + .CE(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/SCNT_CE ), + .D(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_NO_TSEQ.I_SRLT_NE_1.U_SCNT/D [2]), + .R(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/SCNT_RESET ), + .Q(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/iSCNT [2]) + ); + FDRE #( + .INIT ( 1'b0 )) + \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_NO_TSEQ.I_SRLT_NE_1.U_SCNT/G[1].U_FDRE ( + .C(CLK), + .CE(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/SCNT_CE ), + .D(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_NO_TSEQ.I_SRLT_NE_1.U_SCNT/D [1]), + .R(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/SCNT_RESET ), + .Q(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/iSCNT [1]) + ); + FDRE #( + .INIT ( 1'b0 )) + \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_NO_TSEQ.I_SRLT_NE_1.U_SCNT/G[0].U_FDRE ( + .C(CLK), + .CE(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/SCNT_CE ), + .D(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_NO_TSEQ.I_SRLT_NE_1.U_SCNT/D [0]), + .R(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/SCNT_RESET ), + .Q(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/iSCNT [0]) + ); + LUT1 #( + .INIT ( 2'h2 )) + \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_NO_TSEQ.I_SRLT_NE_1.U_SCNT/G[8].U_LUT ( + .I0(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/iSCNT [8]), + .O(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_NO_TSEQ.I_SRLT_NE_1.U_SCNT/S [8]) + ); + XORCY \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_NO_TSEQ.I_SRLT_NE_1.U_SCNT/G[8].U_XORCY ( + .CI(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_NO_TSEQ.I_SRLT_NE_1.U_SCNT/CI [8]), + .LI(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_NO_TSEQ.I_SRLT_NE_1.U_SCNT/S [8]), + .O(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_NO_TSEQ.I_SRLT_NE_1.U_SCNT/D [8]) + ); + LUT1 #( + .INIT ( 2'h2 )) + \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_NO_TSEQ.I_SRLT_NE_1.U_SCNT/G[7].U_LUT ( + .I0(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/iSCNT [7]), + .O(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_NO_TSEQ.I_SRLT_NE_1.U_SCNT/S [7]) + ); + MUXCY_L \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_NO_TSEQ.I_SRLT_NE_1.U_SCNT/G[7].GnH.U_MUXCY ( + .CI(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_NO_TSEQ.I_SRLT_NE_1.U_SCNT/CI [7]), + .DI(N0), + .S(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_NO_TSEQ.I_SRLT_NE_1.U_SCNT/S [7]), + .LO(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_NO_TSEQ.I_SRLT_NE_1.U_SCNT/CI [8]) + ); + XORCY \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_NO_TSEQ.I_SRLT_NE_1.U_SCNT/G[7].U_XORCY ( + .CI(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_NO_TSEQ.I_SRLT_NE_1.U_SCNT/CI [7]), + .LI(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_NO_TSEQ.I_SRLT_NE_1.U_SCNT/S [7]), + .O(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_NO_TSEQ.I_SRLT_NE_1.U_SCNT/D [7]) + ); + LUT1 #( + .INIT ( 2'h2 )) + \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_NO_TSEQ.I_SRLT_NE_1.U_SCNT/G[6].U_LUT ( + .I0(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/iSCNT [6]), + .O(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_NO_TSEQ.I_SRLT_NE_1.U_SCNT/S [6]) + ); + MUXCY_L \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_NO_TSEQ.I_SRLT_NE_1.U_SCNT/G[6].GnH.U_MUXCY ( + .CI(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_NO_TSEQ.I_SRLT_NE_1.U_SCNT/CI [6]), + .DI(N0), + .S(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_NO_TSEQ.I_SRLT_NE_1.U_SCNT/S [6]), + .LO(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_NO_TSEQ.I_SRLT_NE_1.U_SCNT/CI [7]) + ); + XORCY \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_NO_TSEQ.I_SRLT_NE_1.U_SCNT/G[6].U_XORCY ( + .CI(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_NO_TSEQ.I_SRLT_NE_1.U_SCNT/CI [6]), + .LI(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_NO_TSEQ.I_SRLT_NE_1.U_SCNT/S [6]), + .O(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_NO_TSEQ.I_SRLT_NE_1.U_SCNT/D [6]) + ); + LUT1 #( + .INIT ( 2'h2 )) + \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_NO_TSEQ.I_SRLT_NE_1.U_SCNT/G[5].U_LUT ( + .I0(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/iSCNT [5]), + .O(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_NO_TSEQ.I_SRLT_NE_1.U_SCNT/S [5]) + ); + MUXCY_L \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_NO_TSEQ.I_SRLT_NE_1.U_SCNT/G[5].GnH.U_MUXCY ( + .CI(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_NO_TSEQ.I_SRLT_NE_1.U_SCNT/CI [5]), + .DI(N0), + .S(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_NO_TSEQ.I_SRLT_NE_1.U_SCNT/S [5]), + .LO(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_NO_TSEQ.I_SRLT_NE_1.U_SCNT/CI [6]) + ); + XORCY \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_NO_TSEQ.I_SRLT_NE_1.U_SCNT/G[5].U_XORCY ( + .CI(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_NO_TSEQ.I_SRLT_NE_1.U_SCNT/CI [5]), + .LI(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_NO_TSEQ.I_SRLT_NE_1.U_SCNT/S [5]), + .O(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_NO_TSEQ.I_SRLT_NE_1.U_SCNT/D [5]) + ); + LUT1 #( + .INIT ( 2'h2 )) + \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_NO_TSEQ.I_SRLT_NE_1.U_SCNT/G[4].U_LUT ( + .I0(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/iSCNT [4]), + .O(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_NO_TSEQ.I_SRLT_NE_1.U_SCNT/S [4]) + ); + MUXCY_L \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_NO_TSEQ.I_SRLT_NE_1.U_SCNT/G[4].GnH.U_MUXCY ( + .CI(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_NO_TSEQ.I_SRLT_NE_1.U_SCNT/CI [4]), + .DI(N0), + .S(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_NO_TSEQ.I_SRLT_NE_1.U_SCNT/S [4]), + .LO(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_NO_TSEQ.I_SRLT_NE_1.U_SCNT/CI [5]) + ); + XORCY \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_NO_TSEQ.I_SRLT_NE_1.U_SCNT/G[4].U_XORCY ( + .CI(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_NO_TSEQ.I_SRLT_NE_1.U_SCNT/CI [4]), + .LI(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_NO_TSEQ.I_SRLT_NE_1.U_SCNT/S [4]), + .O(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_NO_TSEQ.I_SRLT_NE_1.U_SCNT/D [4]) + ); + LUT1 #( + .INIT ( 2'h2 )) + \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_NO_TSEQ.I_SRLT_NE_1.U_SCNT/G[3].U_LUT ( + .I0(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/iSCNT [3]), + .O(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_NO_TSEQ.I_SRLT_NE_1.U_SCNT/S [3]) + ); + MUXCY_L \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_NO_TSEQ.I_SRLT_NE_1.U_SCNT/G[3].GnH.U_MUXCY ( + .CI(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_NO_TSEQ.I_SRLT_NE_1.U_SCNT/CI [3]), + .DI(N0), + .S(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_NO_TSEQ.I_SRLT_NE_1.U_SCNT/S [3]), + .LO(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_NO_TSEQ.I_SRLT_NE_1.U_SCNT/CI [4]) + ); + XORCY \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_NO_TSEQ.I_SRLT_NE_1.U_SCNT/G[3].U_XORCY ( + .CI(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_NO_TSEQ.I_SRLT_NE_1.U_SCNT/CI [3]), + .LI(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_NO_TSEQ.I_SRLT_NE_1.U_SCNT/S [3]), + .O(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_NO_TSEQ.I_SRLT_NE_1.U_SCNT/D [3]) + ); + LUT1 #( + .INIT ( 2'h2 )) + \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_NO_TSEQ.I_SRLT_NE_1.U_SCNT/G[2].U_LUT ( + .I0(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/iSCNT [2]), + .O(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_NO_TSEQ.I_SRLT_NE_1.U_SCNT/S [2]) + ); + MUXCY_L \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_NO_TSEQ.I_SRLT_NE_1.U_SCNT/G[2].GnH.U_MUXCY ( + .CI(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_NO_TSEQ.I_SRLT_NE_1.U_SCNT/CI [2]), + .DI(N0), + .S(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_NO_TSEQ.I_SRLT_NE_1.U_SCNT/S [2]), + .LO(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_NO_TSEQ.I_SRLT_NE_1.U_SCNT/CI [3]) + ); + XORCY \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_NO_TSEQ.I_SRLT_NE_1.U_SCNT/G[2].U_XORCY ( + .CI(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_NO_TSEQ.I_SRLT_NE_1.U_SCNT/CI [2]), + .LI(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_NO_TSEQ.I_SRLT_NE_1.U_SCNT/S [2]), + .O(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_NO_TSEQ.I_SRLT_NE_1.U_SCNT/D [2]) + ); + LUT1 #( + .INIT ( 2'h2 )) + \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_NO_TSEQ.I_SRLT_NE_1.U_SCNT/G[1].U_LUT ( + .I0(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/iSCNT [1]), + .O(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_NO_TSEQ.I_SRLT_NE_1.U_SCNT/S [1]) + ); + MUXCY_L \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_NO_TSEQ.I_SRLT_NE_1.U_SCNT/G[1].GnH.U_MUXCY ( + .CI(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_NO_TSEQ.I_SRLT_NE_1.U_SCNT/CI [1]), + .DI(N0), + .S(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_NO_TSEQ.I_SRLT_NE_1.U_SCNT/S [1]), + .LO(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_NO_TSEQ.I_SRLT_NE_1.U_SCNT/CI [2]) + ); + XORCY \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_NO_TSEQ.I_SRLT_NE_1.U_SCNT/G[1].U_XORCY ( + .CI(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_NO_TSEQ.I_SRLT_NE_1.U_SCNT/CI [1]), + .LI(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_NO_TSEQ.I_SRLT_NE_1.U_SCNT/S [1]), + .O(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_NO_TSEQ.I_SRLT_NE_1.U_SCNT/D [1]) + ); + LUT1 #( + .INIT ( 2'h2 )) + \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_NO_TSEQ.I_SRLT_NE_1.U_SCNT/G[0].U_LUT ( + .I0(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/iSCNT [0]), + .O(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_NO_TSEQ.I_SRLT_NE_1.U_SCNT/S [0]) + ); + MUXCY_L \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_NO_TSEQ.I_SRLT_NE_1.U_SCNT/G[0].GnH.U_MUXCY ( + .CI(N1), + .DI(N0), + .S(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_NO_TSEQ.I_SRLT_NE_1.U_SCNT/S [0]), + .LO(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_NO_TSEQ.I_SRLT_NE_1.U_SCNT/CI [1]) + ); + XORCY \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_NO_TSEQ.I_SRLT_NE_1.U_SCNT/G[0].U_XORCY ( + .CI(N1), + .LI(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_NO_TSEQ.I_SRLT_NE_1.U_SCNT/S [0]), + .O(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_NO_TSEQ.I_SRLT_NE_1.U_SCNT/D [0]) + ); + FDRE #( + .INIT ( 1'b0 )) + \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_SRLT_NE_1.U_WCNT/G[8].U_FDRE ( + .C(CLK), + .CE(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/WCNT_CE ), + .D(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_SRLT_NE_1.U_WCNT/D [8]), + .R(\U0/I_NO_D.U_ILA/iRESET [6]), + .Q(\U0/I_NO_D.U_ILA/iCAP_NUM_SAMPLES [8]) + ); + FDRE #( + .INIT ( 1'b0 )) + \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_SRLT_NE_1.U_WCNT/G[7].U_FDRE ( + .C(CLK), + .CE(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/WCNT_CE ), + .D(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_SRLT_NE_1.U_WCNT/D [7]), + .R(\U0/I_NO_D.U_ILA/iRESET [6]), + .Q(\U0/I_NO_D.U_ILA/iCAP_NUM_SAMPLES [7]) + ); + FDRE #( + .INIT ( 1'b0 )) + \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_SRLT_NE_1.U_WCNT/G[6].U_FDRE ( + .C(CLK), + .CE(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/WCNT_CE ), + .D(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_SRLT_NE_1.U_WCNT/D [6]), + .R(\U0/I_NO_D.U_ILA/iRESET [6]), + .Q(\U0/I_NO_D.U_ILA/iCAP_NUM_SAMPLES [6]) + ); + FDRE #( + .INIT ( 1'b0 )) + \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_SRLT_NE_1.U_WCNT/G[5].U_FDRE ( + .C(CLK), + .CE(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/WCNT_CE ), + .D(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_SRLT_NE_1.U_WCNT/D [5]), + .R(\U0/I_NO_D.U_ILA/iRESET [6]), + .Q(\U0/I_NO_D.U_ILA/iCAP_NUM_SAMPLES [5]) + ); + FDRE #( + .INIT ( 1'b0 )) + \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_SRLT_NE_1.U_WCNT/G[4].U_FDRE ( + .C(CLK), + .CE(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/WCNT_CE ), + .D(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_SRLT_NE_1.U_WCNT/D [4]), + .R(\U0/I_NO_D.U_ILA/iRESET [6]), + .Q(\U0/I_NO_D.U_ILA/iCAP_NUM_SAMPLES [4]) + ); + FDRE #( + .INIT ( 1'b0 )) + \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_SRLT_NE_1.U_WCNT/G[3].U_FDRE ( + .C(CLK), + .CE(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/WCNT_CE ), + .D(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_SRLT_NE_1.U_WCNT/D [3]), + .R(\U0/I_NO_D.U_ILA/iRESET [6]), + .Q(\U0/I_NO_D.U_ILA/iCAP_NUM_SAMPLES [3]) + ); + FDRE #( + .INIT ( 1'b0 )) + \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_SRLT_NE_1.U_WCNT/G[2].U_FDRE ( + .C(CLK), + .CE(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/WCNT_CE ), + .D(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_SRLT_NE_1.U_WCNT/D [2]), + .R(\U0/I_NO_D.U_ILA/iRESET [6]), + .Q(\U0/I_NO_D.U_ILA/iCAP_NUM_SAMPLES [2]) + ); + FDRE #( + .INIT ( 1'b0 )) + \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_SRLT_NE_1.U_WCNT/G[1].U_FDRE ( + .C(CLK), + .CE(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/WCNT_CE ), + .D(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_SRLT_NE_1.U_WCNT/D [1]), + .R(\U0/I_NO_D.U_ILA/iRESET [6]), + .Q(\U0/I_NO_D.U_ILA/iCAP_NUM_SAMPLES [1]) + ); + FDRE #( + .INIT ( 1'b0 )) + \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_SRLT_NE_1.U_WCNT/G[0].U_FDRE ( + .C(CLK), + .CE(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/WCNT_CE ), + .D(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_SRLT_NE_1.U_WCNT/D [0]), + .R(\U0/I_NO_D.U_ILA/iRESET [6]), + .Q(\U0/I_NO_D.U_ILA/iCAP_NUM_SAMPLES [0]) + ); + LUT1 #( + .INIT ( 2'h2 )) + \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_SRLT_NE_1.U_WCNT/G[8].U_LUT ( + .I0(\U0/I_NO_D.U_ILA/iCAP_NUM_SAMPLES [8]), + .O(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_SRLT_NE_1.U_WCNT/S [8]) + ); + XORCY \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_SRLT_NE_1.U_WCNT/G[8].U_XORCY ( + .CI(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_SRLT_NE_1.U_WCNT/CI [8]), + .LI(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_SRLT_NE_1.U_WCNT/S [8]), + .O(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_SRLT_NE_1.U_WCNT/D [8]) + ); + LUT1 #( + .INIT ( 2'h2 )) + \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_SRLT_NE_1.U_WCNT/G[7].U_LUT ( + .I0(\U0/I_NO_D.U_ILA/iCAP_NUM_SAMPLES [7]), + .O(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_SRLT_NE_1.U_WCNT/S [7]) + ); + MUXCY_L \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_SRLT_NE_1.U_WCNT/G[7].GnH.U_MUXCY ( + .CI(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_SRLT_NE_1.U_WCNT/CI [7]), + .DI(N0), + .S(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_SRLT_NE_1.U_WCNT/S [7]), + .LO(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_SRLT_NE_1.U_WCNT/CI [8]) + ); + XORCY \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_SRLT_NE_1.U_WCNT/G[7].U_XORCY ( + .CI(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_SRLT_NE_1.U_WCNT/CI [7]), + .LI(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_SRLT_NE_1.U_WCNT/S [7]), + .O(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_SRLT_NE_1.U_WCNT/D [7]) + ); + LUT1 #( + .INIT ( 2'h2 )) + \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_SRLT_NE_1.U_WCNT/G[6].U_LUT ( + .I0(\U0/I_NO_D.U_ILA/iCAP_NUM_SAMPLES [6]), + .O(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_SRLT_NE_1.U_WCNT/S [6]) + ); + MUXCY_L \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_SRLT_NE_1.U_WCNT/G[6].GnH.U_MUXCY ( + .CI(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_SRLT_NE_1.U_WCNT/CI [6]), + .DI(N0), + .S(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_SRLT_NE_1.U_WCNT/S [6]), + .LO(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_SRLT_NE_1.U_WCNT/CI [7]) + ); + XORCY \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_SRLT_NE_1.U_WCNT/G[6].U_XORCY ( + .CI(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_SRLT_NE_1.U_WCNT/CI [6]), + .LI(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_SRLT_NE_1.U_WCNT/S [6]), + .O(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_SRLT_NE_1.U_WCNT/D [6]) + ); + LUT1 #( + .INIT ( 2'h2 )) + \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_SRLT_NE_1.U_WCNT/G[5].U_LUT ( + .I0(\U0/I_NO_D.U_ILA/iCAP_NUM_SAMPLES [5]), + .O(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_SRLT_NE_1.U_WCNT/S [5]) + ); + MUXCY_L \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_SRLT_NE_1.U_WCNT/G[5].GnH.U_MUXCY ( + .CI(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_SRLT_NE_1.U_WCNT/CI [5]), + .DI(N0), + .S(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_SRLT_NE_1.U_WCNT/S [5]), + .LO(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_SRLT_NE_1.U_WCNT/CI [6]) + ); + XORCY \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_SRLT_NE_1.U_WCNT/G[5].U_XORCY ( + .CI(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_SRLT_NE_1.U_WCNT/CI [5]), + .LI(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_SRLT_NE_1.U_WCNT/S [5]), + .O(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_SRLT_NE_1.U_WCNT/D [5]) + ); + LUT1 #( + .INIT ( 2'h2 )) + \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_SRLT_NE_1.U_WCNT/G[4].U_LUT ( + .I0(\U0/I_NO_D.U_ILA/iCAP_NUM_SAMPLES [4]), + .O(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_SRLT_NE_1.U_WCNT/S [4]) + ); + MUXCY_L \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_SRLT_NE_1.U_WCNT/G[4].GnH.U_MUXCY ( + .CI(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_SRLT_NE_1.U_WCNT/CI [4]), + .DI(N0), + .S(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_SRLT_NE_1.U_WCNT/S [4]), + .LO(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_SRLT_NE_1.U_WCNT/CI [5]) + ); + XORCY \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_SRLT_NE_1.U_WCNT/G[4].U_XORCY ( + .CI(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_SRLT_NE_1.U_WCNT/CI [4]), + .LI(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_SRLT_NE_1.U_WCNT/S [4]), + .O(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_SRLT_NE_1.U_WCNT/D [4]) + ); + LUT1 #( + .INIT ( 2'h2 )) + \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_SRLT_NE_1.U_WCNT/G[3].U_LUT ( + .I0(\U0/I_NO_D.U_ILA/iCAP_NUM_SAMPLES [3]), + .O(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_SRLT_NE_1.U_WCNT/S [3]) + ); + MUXCY_L \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_SRLT_NE_1.U_WCNT/G[3].GnH.U_MUXCY ( + .CI(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_SRLT_NE_1.U_WCNT/CI [3]), + .DI(N0), + .S(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_SRLT_NE_1.U_WCNT/S [3]), + .LO(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_SRLT_NE_1.U_WCNT/CI [4]) + ); + XORCY \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_SRLT_NE_1.U_WCNT/G[3].U_XORCY ( + .CI(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_SRLT_NE_1.U_WCNT/CI [3]), + .LI(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_SRLT_NE_1.U_WCNT/S [3]), + .O(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_SRLT_NE_1.U_WCNT/D [3]) + ); + LUT1 #( + .INIT ( 2'h2 )) + \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_SRLT_NE_1.U_WCNT/G[2].U_LUT ( + .I0(\U0/I_NO_D.U_ILA/iCAP_NUM_SAMPLES [2]), + .O(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_SRLT_NE_1.U_WCNT/S [2]) + ); + MUXCY_L \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_SRLT_NE_1.U_WCNT/G[2].GnH.U_MUXCY ( + .CI(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_SRLT_NE_1.U_WCNT/CI [2]), + .DI(N0), + .S(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_SRLT_NE_1.U_WCNT/S [2]), + .LO(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_SRLT_NE_1.U_WCNT/CI [3]) + ); + XORCY \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_SRLT_NE_1.U_WCNT/G[2].U_XORCY ( + .CI(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_SRLT_NE_1.U_WCNT/CI [2]), + .LI(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_SRLT_NE_1.U_WCNT/S [2]), + .O(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_SRLT_NE_1.U_WCNT/D [2]) + ); + LUT1 #( + .INIT ( 2'h2 )) + \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_SRLT_NE_1.U_WCNT/G[1].U_LUT ( + .I0(\U0/I_NO_D.U_ILA/iCAP_NUM_SAMPLES [1]), + .O(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_SRLT_NE_1.U_WCNT/S [1]) + ); + MUXCY_L \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_SRLT_NE_1.U_WCNT/G[1].GnH.U_MUXCY ( + .CI(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_SRLT_NE_1.U_WCNT/CI [1]), + .DI(N0), + .S(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_SRLT_NE_1.U_WCNT/S [1]), + .LO(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_SRLT_NE_1.U_WCNT/CI [2]) + ); + XORCY \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_SRLT_NE_1.U_WCNT/G[1].U_XORCY ( + .CI(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_SRLT_NE_1.U_WCNT/CI [1]), + .LI(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_SRLT_NE_1.U_WCNT/S [1]), + .O(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_SRLT_NE_1.U_WCNT/D [1]) + ); + LUT1 #( + .INIT ( 2'h2 )) + \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_SRLT_NE_1.U_WCNT/G[0].U_LUT ( + .I0(\U0/I_NO_D.U_ILA/iCAP_NUM_SAMPLES [0]), + .O(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_SRLT_NE_1.U_WCNT/S [0]) + ); + MUXCY_L \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_SRLT_NE_1.U_WCNT/G[0].GnH.U_MUXCY ( + .CI(N1), + .DI(N0), + .S(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_SRLT_NE_1.U_WCNT/S [0]), + .LO(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_SRLT_NE_1.U_WCNT/CI [1]) + ); + XORCY \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_SRLT_NE_1.U_WCNT/G[0].U_XORCY ( + .CI(N1), + .LI(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_SRLT_NE_1.U_WCNT/S [0]), + .O(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_SRLT_NE_1.U_WCNT/D [0]) + ); + MUXCY_L \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/U_SCNT_CMP/I_SRL16.U_GAND_SRL16/I_TWMOD8_NE0.I_YES_RPM.U_MUXL ( + .CI(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/U_SCNT_CMP/I_SRL16.U_GAND_SRL16/tmpCompData [1]), + .DI(N0), + .S(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/U_SCNT_CMP/I_SRL16.U_GAND_SRL16/sel[8] ), + .LO(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/SCNT_CMP ) + ); + SRLC16E #( + .INIT ( 16'h0000 )) + \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/U_SCNT_CMP/I_SRL16.U_GAND_SRL16/I_TWMOD8_NE0.I_YES_RPM.I_SRLT_EQ_2.U_SRLL ( + .A0(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/iSCNT [8]), + .A1(N1), + .A2(N1), + .A3(N1), + .CE(CONTROL[9]), + .CLK(CONTROL[0]), + .D(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/U_SCNT_CMP/I_SRL16.U_GAND_SRL16/tmpCfgData0 ), + .Q(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/U_SCNT_CMP/I_SRL16.U_GAND_SRL16/sel[8] ), + .Q15(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/U_SCNT_CMP/I_SRL16.U_GAND_SRL16/cfg_data [1]) + ); + SRLC16E #( + .INIT ( 16'h0000 )) + \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/U_SCNT_CMP/I_SRL16.U_GAND_SRL16/I_TWMOD8_NE0.I_YES_RPM.I_SRLT_EQ_2.U_SRLH ( + .A0(N1), + .A1(N1), + .A2(N1), + .A3(N1), + .CE(CONTROL[9]), + .CLK(CONTROL[0]), + .D(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/cfg_data [0]), + .Q(\NLW_U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/U_SCNT_CMP/I_SRL16.U_GAND_SRL16/I_TWMOD8_NE0.I_YES_RPM.I_SRLT_EQ_2.U_SRLH_Q_UNCONNECTED ), + .Q15(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/U_SCNT_CMP/I_SRL16.U_GAND_SRL16/tmpCfgData0 ) + ); + MUXCY_L \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/U_SCNT_CMP/I_SRL16.U_GAND_SRL16/I_TW_GTE8.F_TW[0].I_YES_RPM.U_MUXL ( + .CI(N1), + .DI(N0), + .S(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/U_SCNT_CMP/I_SRL16.U_GAND_SRL16/sel[0] ), + .LO(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/U_SCNT_CMP/I_SRL16.U_GAND_SRL16/tmpCompData [0]) + ); + MUXCY_L \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/U_SCNT_CMP/I_SRL16.U_GAND_SRL16/I_TW_GTE8.F_TW[0].I_YES_RPM.U_MUXH ( + .CI(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/U_SCNT_CMP/I_SRL16.U_GAND_SRL16/tmpCompData [0]), + .DI(N0), + .S(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/U_SCNT_CMP/I_SRL16.U_GAND_SRL16/sel[1] ), + .LO(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/U_SCNT_CMP/I_SRL16.U_GAND_SRL16/tmpCompData [1]) + ); + SRLC16E #( + .INIT ( 16'h0000 )) + \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/U_SCNT_CMP/I_SRL16.U_GAND_SRL16/I_TW_GTE8.F_TW[0].I_YES_RPM.I_SRLT_EQ_2.U_SRLL ( + .A0(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/iSCNT [0]), + .A1(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/iSCNT [1]), + .A2(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/iSCNT [2]), + .A3(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/iSCNT [3]), + .CE(CONTROL[9]), + .CLK(CONTROL[0]), + .D(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/U_SCNT_CMP/I_SRL16.U_GAND_SRL16/tmpCfgData ), + .Q(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/U_SCNT_CMP/I_SRL16.U_GAND_SRL16/sel[0] ), + .Q15(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/cfg_data [1]) + ); + SRLC16E #( + .INIT ( 16'h0000 )) + \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/U_SCNT_CMP/I_SRL16.U_GAND_SRL16/I_TW_GTE8.F_TW[0].I_YES_RPM.I_SRLT_EQ_2.U_SRLH ( + .A0(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/iSCNT [4]), + .A1(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/iSCNT [5]), + .A2(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/iSCNT [6]), + .A3(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/iSCNT [7]), + .CE(CONTROL[9]), + .CLK(CONTROL[0]), + .D(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/U_SCNT_CMP/I_SRL16.U_GAND_SRL16/cfg_data [1]), + .Q(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/U_SCNT_CMP/I_SRL16.U_GAND_SRL16/sel[1] ), + .Q15(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/U_SCNT_CMP/I_SRL16.U_GAND_SRL16/tmpCfgData ) + ); + MUXCY_L \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/U_WCNT_HCMP/I_SRL16.U_GAND_SRL16/I_TWMOD8_NE0.I_YES_RPM.U_MUXL ( + .CI(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/U_WCNT_HCMP/I_SRL16.U_GAND_SRL16/tmpCompData [1]), + .DI(N0), + .S(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/U_WCNT_HCMP/I_SRL16.U_GAND_SRL16/sel[8] ), + .LO(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/WCNT_HCMP ) + ); + SRLC16E #( + .INIT ( 16'h0000 )) + \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/U_WCNT_HCMP/I_SRL16.U_GAND_SRL16/I_TWMOD8_NE0.I_YES_RPM.I_SRLT_EQ_2.U_SRLL ( + .A0(\U0/I_NO_D.U_ILA/iCAP_NUM_SAMPLES [8]), + .A1(N1), + .A2(N1), + .A3(N1), + .CE(CONTROL[9]), + .CLK(CONTROL[0]), + .D(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/U_WCNT_HCMP/I_SRL16.U_GAND_SRL16/tmpCfgData0 ), + .Q(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/U_WCNT_HCMP/I_SRL16.U_GAND_SRL16/sel[8] ), + .Q15(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/U_WCNT_HCMP/I_SRL16.U_GAND_SRL16/cfg_data [1]) + ); + SRLC16E #( + .INIT ( 16'h0000 )) + \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/U_WCNT_HCMP/I_SRL16.U_GAND_SRL16/I_TWMOD8_NE0.I_YES_RPM.I_SRLT_EQ_2.U_SRLH ( + .A0(N1), + .A1(N1), + .A2(N1), + .A3(N1), + .CE(CONTROL[9]), + .CLK(CONTROL[0]), + .D(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/cfg_data [2]), + .Q(\NLW_U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/U_WCNT_HCMP/I_SRL16.U_GAND_SRL16/I_TWMOD8_NE0.I_YES_RPM.I_SRLT_EQ_2.U_SRLH_Q_UNCONNECTED ) +, + .Q15(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/U_WCNT_HCMP/I_SRL16.U_GAND_SRL16/tmpCfgData0 ) + ); + MUXCY_L \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/U_WCNT_HCMP/I_SRL16.U_GAND_SRL16/I_TW_GTE8.F_TW[0].I_YES_RPM.U_MUXL ( + .CI(N1), + .DI(N0), + .S(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/U_WCNT_HCMP/I_SRL16.U_GAND_SRL16/sel[0] ), + .LO(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/U_WCNT_HCMP/I_SRL16.U_GAND_SRL16/tmpCompData [0]) + ); + MUXCY_L \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/U_WCNT_HCMP/I_SRL16.U_GAND_SRL16/I_TW_GTE8.F_TW[0].I_YES_RPM.U_MUXH ( + .CI(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/U_WCNT_HCMP/I_SRL16.U_GAND_SRL16/tmpCompData [0]), + .DI(N0), + .S(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/U_WCNT_HCMP/I_SRL16.U_GAND_SRL16/sel[1] ), + .LO(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/U_WCNT_HCMP/I_SRL16.U_GAND_SRL16/tmpCompData [1]) + ); + SRLC16E #( + .INIT ( 16'h0000 )) + \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/U_WCNT_HCMP/I_SRL16.U_GAND_SRL16/I_TW_GTE8.F_TW[0].I_YES_RPM.I_SRLT_EQ_2.U_SRLL ( + .A0(\U0/I_NO_D.U_ILA/iCAP_NUM_SAMPLES [0]), + .A1(\U0/I_NO_D.U_ILA/iCAP_NUM_SAMPLES [1]), + .A2(\U0/I_NO_D.U_ILA/iCAP_NUM_SAMPLES [2]), + .A3(\U0/I_NO_D.U_ILA/iCAP_NUM_SAMPLES [3]), + .CE(CONTROL[9]), + .CLK(CONTROL[0]), + .D(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/U_WCNT_HCMP/I_SRL16.U_GAND_SRL16/tmpCfgData ), + .Q(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/U_WCNT_HCMP/I_SRL16.U_GAND_SRL16/sel[0] ), + .Q15(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/cfg_data [3]) + ); + SRLC16E #( + .INIT ( 16'h0000 )) + \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/U_WCNT_HCMP/I_SRL16.U_GAND_SRL16/I_TW_GTE8.F_TW[0].I_YES_RPM.I_SRLT_EQ_2.U_SRLH ( + .A0(\U0/I_NO_D.U_ILA/iCAP_NUM_SAMPLES [4]), + .A1(\U0/I_NO_D.U_ILA/iCAP_NUM_SAMPLES [5]), + .A2(\U0/I_NO_D.U_ILA/iCAP_NUM_SAMPLES [6]), + .A3(\U0/I_NO_D.U_ILA/iCAP_NUM_SAMPLES [7]), + .CE(CONTROL[9]), + .CLK(CONTROL[0]), + .D(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/U_WCNT_HCMP/I_SRL16.U_GAND_SRL16/cfg_data [1]), + .Q(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/U_WCNT_HCMP/I_SRL16.U_GAND_SRL16/sel[1] ), + .Q15(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/U_WCNT_HCMP/I_SRL16.U_GAND_SRL16/tmpCfgData ) + ); + MUXCY_L \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/U_WCNT_LCMP/I_SRL16.U_GAND_SRL16/I_TWMOD8_NE0.I_YES_RPM.U_MUXL ( + .CI(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/U_WCNT_LCMP/I_SRL16.U_GAND_SRL16/tmpCompData [1]), + .DI(N0), + .S(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/U_WCNT_LCMP/I_SRL16.U_GAND_SRL16/sel[8] ), + .LO(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/WCNT_LCMP ) + ); + SRLC16E #( + .INIT ( 16'h0000 )) + \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/U_WCNT_LCMP/I_SRL16.U_GAND_SRL16/I_TWMOD8_NE0.I_YES_RPM.I_SRLT_EQ_2.U_SRLL ( + .A0(\U0/I_NO_D.U_ILA/iCAP_NUM_SAMPLES [8]), + .A1(N1), + .A2(N1), + .A3(N1), + .CE(CONTROL[9]), + .CLK(CONTROL[0]), + .D(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/U_WCNT_LCMP/I_SRL16.U_GAND_SRL16/tmpCfgData0 ), + .Q(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/U_WCNT_LCMP/I_SRL16.U_GAND_SRL16/sel[8] ), + .Q15(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/U_WCNT_LCMP/I_SRL16.U_GAND_SRL16/cfg_data [1]) + ); + SRLC16E #( + .INIT ( 16'h0000 )) + \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/U_WCNT_LCMP/I_SRL16.U_GAND_SRL16/I_TWMOD8_NE0.I_YES_RPM.I_SRLT_EQ_2.U_SRLH ( + .A0(N1), + .A1(N1), + .A2(N1), + .A3(N1), + .CE(CONTROL[9]), + .CLK(CONTROL[0]), + .D(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/cfg_data [4]), + .Q(\NLW_U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/U_WCNT_LCMP/I_SRL16.U_GAND_SRL16/I_TWMOD8_NE0.I_YES_RPM.I_SRLT_EQ_2.U_SRLH_Q_UNCONNECTED ) +, + .Q15(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/U_WCNT_LCMP/I_SRL16.U_GAND_SRL16/tmpCfgData0 ) + ); + MUXCY_L \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/U_WCNT_LCMP/I_SRL16.U_GAND_SRL16/I_TW_GTE8.F_TW[0].I_YES_RPM.U_MUXL ( + .CI(N1), + .DI(N0), + .S(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/U_WCNT_LCMP/I_SRL16.U_GAND_SRL16/sel[0] ), + .LO(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/U_WCNT_LCMP/I_SRL16.U_GAND_SRL16/tmpCompData [0]) + ); + MUXCY_L \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/U_WCNT_LCMP/I_SRL16.U_GAND_SRL16/I_TW_GTE8.F_TW[0].I_YES_RPM.U_MUXH ( + .CI(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/U_WCNT_LCMP/I_SRL16.U_GAND_SRL16/tmpCompData [0]), + .DI(N0), + .S(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/U_WCNT_LCMP/I_SRL16.U_GAND_SRL16/sel[1] ), + .LO(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/U_WCNT_LCMP/I_SRL16.U_GAND_SRL16/tmpCompData [1]) + ); + SRLC16E #( + .INIT ( 16'h0000 )) + \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/U_WCNT_LCMP/I_SRL16.U_GAND_SRL16/I_TW_GTE8.F_TW[0].I_YES_RPM.I_SRLT_EQ_2.U_SRLL ( + .A0(\U0/I_NO_D.U_ILA/iCAP_NUM_SAMPLES [0]), + .A1(\U0/I_NO_D.U_ILA/iCAP_NUM_SAMPLES [1]), + .A2(\U0/I_NO_D.U_ILA/iCAP_NUM_SAMPLES [2]), + .A3(\U0/I_NO_D.U_ILA/iCAP_NUM_SAMPLES [3]), + .CE(CONTROL[9]), + .CLK(CONTROL[0]), + .D(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/U_WCNT_LCMP/I_SRL16.U_GAND_SRL16/tmpCfgData ), + .Q(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/U_WCNT_LCMP/I_SRL16.U_GAND_SRL16/sel[0] ), + .Q15(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/cfg_data [0]) + ); + SRLC16E #( + .INIT ( 16'h0000 )) + \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/U_WCNT_LCMP/I_SRL16.U_GAND_SRL16/I_TW_GTE8.F_TW[0].I_YES_RPM.I_SRLT_EQ_2.U_SRLH ( + .A0(\U0/I_NO_D.U_ILA/iCAP_NUM_SAMPLES [4]), + .A1(\U0/I_NO_D.U_ILA/iCAP_NUM_SAMPLES [5]), + .A2(\U0/I_NO_D.U_ILA/iCAP_NUM_SAMPLES [6]), + .A3(\U0/I_NO_D.U_ILA/iCAP_NUM_SAMPLES [7]), + .CE(CONTROL[9]), + .CLK(CONTROL[0]), + .D(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/U_WCNT_LCMP/I_SRL16.U_GAND_SRL16/cfg_data [1]), + .Q(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/U_WCNT_LCMP/I_SRL16.U_GAND_SRL16/sel[1] ), + .Q15(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/U_WCNT_LCMP/I_SRL16.U_GAND_SRL16/tmpCfgData ) + ); + LUT2 #( + .INIT ( 4'h8 )) + \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/U_BRK1 ( + .I0(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/cfg_data [3]), + .I1(CONTROL[9]), + .O(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/cfg_data [4]) + ); + LUT2 #( + .INIT ( 4'h8 )) + \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/U_BRK0 ( + .I0(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/cfg_data [1]), + .I1(CONTROL[9]), + .O(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/cfg_data [2]) + ); + LUT3 #( + .INIT ( 8'hCA )) + \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_INTCAP.F_CAP_ADDR[8].U_CAP_ADDR_MUX ( + .I0(\U0/I_NO_D.U_ILA/iCAP_NUM_SAMPLES [8]), + .I1(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/iSCNT [8]), + .I2(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/cfg_data_vec [9]), + .O(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/CAP_ADDR_next [8]) + ); + LUT3 #( + .INIT ( 8'hCA )) + \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_INTCAP.F_CAP_ADDR[7].U_CAP_ADDR_MUX ( + .I0(\U0/I_NO_D.U_ILA/iCAP_NUM_SAMPLES [7]), + .I1(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/iSCNT [7]), + .I2(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/cfg_data_vec [8]), + .O(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/CAP_ADDR_next [7]) + ); + LUT3 #( + .INIT ( 8'hCA )) + \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_INTCAP.F_CAP_ADDR[6].U_CAP_ADDR_MUX ( + .I0(\U0/I_NO_D.U_ILA/iCAP_NUM_SAMPLES [6]), + .I1(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/iSCNT [6]), + .I2(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/cfg_data_vec [7]), + .O(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/CAP_ADDR_next [6]) + ); + LUT3 #( + .INIT ( 8'hCA )) + \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_INTCAP.F_CAP_ADDR[5].U_CAP_ADDR_MUX ( + .I0(\U0/I_NO_D.U_ILA/iCAP_NUM_SAMPLES [5]), + .I1(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/iSCNT [5]), + .I2(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/cfg_data_vec [6]), + .O(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/CAP_ADDR_next [5]) + ); + LUT3 #( + .INIT ( 8'hCA )) + \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_INTCAP.F_CAP_ADDR[4].U_CAP_ADDR_MUX ( + .I0(\U0/I_NO_D.U_ILA/iCAP_NUM_SAMPLES [4]), + .I1(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/iSCNT [4]), + .I2(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/cfg_data_vec [5]), + .O(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/CAP_ADDR_next [4]) + ); + LUT3 #( + .INIT ( 8'hCA )) + \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_INTCAP.F_CAP_ADDR[3].U_CAP_ADDR_MUX ( + .I0(\U0/I_NO_D.U_ILA/iCAP_NUM_SAMPLES [3]), + .I1(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/iSCNT [3]), + .I2(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/cfg_data_vec [4]), + .O(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/CAP_ADDR_next [3]) + ); + LUT3 #( + .INIT ( 8'hCA )) + \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_INTCAP.F_CAP_ADDR[2].U_CAP_ADDR_MUX ( + .I0(\U0/I_NO_D.U_ILA/iCAP_NUM_SAMPLES [2]), + .I1(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/iSCNT [2]), + .I2(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/cfg_data_vec [3]), + .O(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/CAP_ADDR_next [2]) + ); + LUT3 #( + .INIT ( 8'hCA )) + \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_INTCAP.F_CAP_ADDR[1].U_CAP_ADDR_MUX ( + .I0(\U0/I_NO_D.U_ILA/iCAP_NUM_SAMPLES [1]), + .I1(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/iSCNT [1]), + .I2(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/cfg_data_vec [2]), + .O(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/CAP_ADDR_next [1]) + ); + LUT3 #( + .INIT ( 8'hCA )) + \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_INTCAP.F_CAP_ADDR[0].U_CAP_ADDR_MUX ( + .I0(\U0/I_NO_D.U_ILA/iCAP_NUM_SAMPLES [0]), + .I1(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/iSCNT [0]), + .I2(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/cfg_data_vec [1]), + .O(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/CAP_ADDR_next [0]) + ); + SRL16E #( + .INIT ( 16'h0000 )) + \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_0_TO_64K.I_SRL.U_SELX ( + .A0(N1), + .A1(N1), + .A2(N1), + .A3(N1), + .CE(CONTROL[9]), + .CLK(CONTROL[0]), + .D(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/cfg_data_vec [16]), + .Q(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/cfg_data [0]) + ); + FDR #( + .INIT ( 1'b0 )) + \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_INTCAP.F_CAP_ADDR[8].U_CAP_ADDR ( + .C(CLK), + .D(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/iCAP_ADDR [8]), + .R(\U0/I_NO_D.U_ILA/iRESET [6]), + .Q(\U0/I_NO_D.U_ILA/iCAP_WR_ADDR [8]) + ); + FDR #( + .INIT ( 1'b0 )) + \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_INTCAP.F_CAP_ADDR[8].U_iCAP_ADDR ( + .C(CLK), + .D(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/CAP_ADDR_next [8]), + .R(\U0/I_NO_D.U_ILA/iRESET [6]), + .Q(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/iCAP_ADDR [8]) + ); + FDR #( + .INIT ( 1'b0 )) + \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_INTCAP.F_CAP_ADDR[7].U_CAP_ADDR ( + .C(CLK), + .D(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/iCAP_ADDR [7]), + .R(\U0/I_NO_D.U_ILA/iRESET [6]), + .Q(\U0/I_NO_D.U_ILA/iCAP_WR_ADDR [7]) + ); + FDR #( + .INIT ( 1'b0 )) + \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_INTCAP.F_CAP_ADDR[7].U_iCAP_ADDR ( + .C(CLK), + .D(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/CAP_ADDR_next [7]), + .R(\U0/I_NO_D.U_ILA/iRESET [6]), + .Q(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/iCAP_ADDR [7]) + ); + FDR #( + .INIT ( 1'b0 )) + \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_INTCAP.F_CAP_ADDR[6].U_CAP_ADDR ( + .C(CLK), + .D(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/iCAP_ADDR [6]), + .R(\U0/I_NO_D.U_ILA/iRESET [6]), + .Q(\U0/I_NO_D.U_ILA/iCAP_WR_ADDR [6]) + ); + FDR #( + .INIT ( 1'b0 )) + \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_INTCAP.F_CAP_ADDR[6].U_iCAP_ADDR ( + .C(CLK), + .D(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/CAP_ADDR_next [6]), + .R(\U0/I_NO_D.U_ILA/iRESET [6]), + .Q(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/iCAP_ADDR [6]) + ); + FDR #( + .INIT ( 1'b0 )) + \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_INTCAP.F_CAP_ADDR[5].U_CAP_ADDR ( + .C(CLK), + .D(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/iCAP_ADDR [5]), + .R(\U0/I_NO_D.U_ILA/iRESET [6]), + .Q(\U0/I_NO_D.U_ILA/iCAP_WR_ADDR [5]) + ); + FDR #( + .INIT ( 1'b0 )) + \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_INTCAP.F_CAP_ADDR[5].U_iCAP_ADDR ( + .C(CLK), + .D(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/CAP_ADDR_next [5]), + .R(\U0/I_NO_D.U_ILA/iRESET [6]), + .Q(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/iCAP_ADDR [5]) + ); + FDR #( + .INIT ( 1'b0 )) + \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_INTCAP.F_CAP_ADDR[4].U_CAP_ADDR ( + .C(CLK), + .D(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/iCAP_ADDR [4]), + .R(\U0/I_NO_D.U_ILA/iRESET [6]), + .Q(\U0/I_NO_D.U_ILA/iCAP_WR_ADDR [4]) + ); + FDR #( + .INIT ( 1'b0 )) + \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_INTCAP.F_CAP_ADDR[4].U_iCAP_ADDR ( + .C(CLK), + .D(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/CAP_ADDR_next [4]), + .R(\U0/I_NO_D.U_ILA/iRESET [6]), + .Q(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/iCAP_ADDR [4]) + ); + FDR #( + .INIT ( 1'b0 )) + \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_INTCAP.F_CAP_ADDR[3].U_CAP_ADDR ( + .C(CLK), + .D(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/iCAP_ADDR [3]), + .R(\U0/I_NO_D.U_ILA/iRESET [6]), + .Q(\U0/I_NO_D.U_ILA/iCAP_WR_ADDR [3]) + ); + FDR #( + .INIT ( 1'b0 )) + \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_INTCAP.F_CAP_ADDR[3].U_iCAP_ADDR ( + .C(CLK), + .D(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/CAP_ADDR_next [3]), + .R(\U0/I_NO_D.U_ILA/iRESET [6]), + .Q(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/iCAP_ADDR [3]) + ); + FDR #( + .INIT ( 1'b0 )) + \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_INTCAP.F_CAP_ADDR[2].U_CAP_ADDR ( + .C(CLK), + .D(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/iCAP_ADDR [2]), + .R(\U0/I_NO_D.U_ILA/iRESET [6]), + .Q(\U0/I_NO_D.U_ILA/iCAP_WR_ADDR [2]) + ); + FDR #( + .INIT ( 1'b0 )) + \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_INTCAP.F_CAP_ADDR[2].U_iCAP_ADDR ( + .C(CLK), + .D(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/CAP_ADDR_next [2]), + .R(\U0/I_NO_D.U_ILA/iRESET [6]), + .Q(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/iCAP_ADDR [2]) + ); + FDR #( + .INIT ( 1'b0 )) + \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_INTCAP.F_CAP_ADDR[1].U_CAP_ADDR ( + .C(CLK), + .D(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/iCAP_ADDR [1]), + .R(\U0/I_NO_D.U_ILA/iRESET [6]), + .Q(\U0/I_NO_D.U_ILA/iCAP_WR_ADDR [1]) + ); + FDR #( + .INIT ( 1'b0 )) + \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_INTCAP.F_CAP_ADDR[1].U_iCAP_ADDR ( + .C(CLK), + .D(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/CAP_ADDR_next [1]), + .R(\U0/I_NO_D.U_ILA/iRESET [6]), + .Q(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/iCAP_ADDR [1]) + ); + FDR #( + .INIT ( 1'b0 )) + \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_INTCAP.F_CAP_ADDR[0].U_CAP_ADDR ( + .C(CLK), + .D(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/iCAP_ADDR [0]), + .R(\U0/I_NO_D.U_ILA/iRESET [6]), + .Q(\U0/I_NO_D.U_ILA/iCAP_WR_ADDR [0]) + ); + FDR #( + .INIT ( 1'b0 )) + \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_INTCAP.F_CAP_ADDR[0].U_iCAP_ADDR ( + .C(CLK), + .D(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/CAP_ADDR_next [0]), + .R(\U0/I_NO_D.U_ILA/iRESET [6]), + .Q(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/iCAP_ADDR [0]) + ); + FDE #( + .INIT ( 1'b0 )) + \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_0_TO_64K.F_SEL[15].U_SEL ( + .C(CONTROL[0]), + .CE(CONTROL[9]), + .D(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/cfg_data_vec [15]), + .Q(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/cfg_data_vec [16]) + ); + FDE #( + .INIT ( 1'b0 )) + \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_0_TO_64K.F_SEL[14].U_SEL ( + .C(CONTROL[0]), + .CE(CONTROL[9]), + .D(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/cfg_data_vec [14]), + .Q(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/cfg_data_vec [15]) + ); + FDE #( + .INIT ( 1'b0 )) + \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_0_TO_64K.F_SEL[13].U_SEL ( + .C(CONTROL[0]), + .CE(CONTROL[9]), + .D(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/cfg_data_vec [13]), + .Q(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/cfg_data_vec [14]) + ); + FDE #( + .INIT ( 1'b0 )) + \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_0_TO_64K.F_SEL[12].U_SEL ( + .C(CONTROL[0]), + .CE(CONTROL[9]), + .D(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/cfg_data_vec [12]), + .Q(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/cfg_data_vec [13]) + ); + FDE #( + .INIT ( 1'b0 )) + \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_0_TO_64K.F_SEL[11].U_SEL ( + .C(CONTROL[0]), + .CE(CONTROL[9]), + .D(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/cfg_data_vec [11]), + .Q(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/cfg_data_vec [12]) + ); + FDE #( + .INIT ( 1'b0 )) + \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_0_TO_64K.F_SEL[10].U_SEL ( + .C(CONTROL[0]), + .CE(CONTROL[9]), + .D(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/cfg_data_vec [10]), + .Q(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/cfg_data_vec [11]) + ); + FDE #( + .INIT ( 1'b0 )) + \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_0_TO_64K.F_SEL[9].U_SEL ( + .C(CONTROL[0]), + .CE(CONTROL[9]), + .D(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/cfg_data_vec [9]), + .Q(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/cfg_data_vec [10]) + ); + FDE #( + .INIT ( 1'b0 )) + \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_0_TO_64K.F_SEL[8].U_SEL ( + .C(CONTROL[0]), + .CE(CONTROL[9]), + .D(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/cfg_data_vec [8]), + .Q(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/cfg_data_vec [9]) + ); + FDE #( + .INIT ( 1'b0 )) + \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_0_TO_64K.F_SEL[7].U_SEL ( + .C(CONTROL[0]), + .CE(CONTROL[9]), + .D(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/cfg_data_vec [7]), + .Q(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/cfg_data_vec [8]) + ); + FDE #( + .INIT ( 1'b0 )) + \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_0_TO_64K.F_SEL[6].U_SEL ( + .C(CONTROL[0]), + .CE(CONTROL[9]), + .D(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/cfg_data_vec [6]), + .Q(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/cfg_data_vec [7]) + ); + FDE #( + .INIT ( 1'b0 )) + \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_0_TO_64K.F_SEL[5].U_SEL ( + .C(CONTROL[0]), + .CE(CONTROL[9]), + .D(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/cfg_data_vec [5]), + .Q(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/cfg_data_vec [6]) + ); + FDE #( + .INIT ( 1'b0 )) + \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_0_TO_64K.F_SEL[4].U_SEL ( + .C(CONTROL[0]), + .CE(CONTROL[9]), + .D(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/cfg_data_vec [4]), + .Q(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/cfg_data_vec [5]) + ); + FDE #( + .INIT ( 1'b0 )) + \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_0_TO_64K.F_SEL[3].U_SEL ( + .C(CONTROL[0]), + .CE(CONTROL[9]), + .D(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/cfg_data_vec [3]), + .Q(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/cfg_data_vec [4]) + ); + FDE #( + .INIT ( 1'b0 )) + \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_0_TO_64K.F_SEL[2].U_SEL ( + .C(CONTROL[0]), + .CE(CONTROL[9]), + .D(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/cfg_data_vec [2]), + .Q(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/cfg_data_vec [3]) + ); + FDE #( + .INIT ( 1'b0 )) + \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_0_TO_64K.F_SEL[1].U_SEL ( + .C(CONTROL[0]), + .CE(CONTROL[9]), + .D(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/cfg_data_vec [1]), + .Q(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/cfg_data_vec [2]) + ); + FDE #( + .INIT ( 1'b0 )) + \U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/I_0_TO_64K.F_SEL[0].U_SEL ( + .C(CONTROL[0]), + .CE(CONTROL[9]), + .D(CONTROL[1]), + .Q(\U0/I_NO_D.U_ILA/U_G2_SQ.U_CAPCTRL/U_CAP_ADDRGEN/cfg_data_vec [1]) + ); + FDE #( + .INIT ( 1'b0 )) + \U0/I_NO_D.U_ILA/U_STAT/U_DSL2 ( + .C(CLK), + .CE(N1), + .D(\U0/I_NO_D.U_ILA/U_STAT/DSTAT_en_dly1 ), + .Q(\U0/I_NO_D.U_ILA/U_STAT/DSTAT_en_dly2 ) + ); + FDE #( + .INIT ( 1'b0 )) + \U0/I_NO_D.U_ILA/U_STAT/U_DSL3 ( + .C(CLK), + .CE(N1), + .D(\U0/I_NO_D.U_ILA/U_STAT/DSTAT_en_dly2 ), + .Q(\U0/I_NO_D.U_ILA/U_STAT/DSTAT_en_dly3 ) + ); + FDE #( + .INIT ( 1'b0 )) + \U0/I_NO_D.U_ILA/U_STAT/U_CR ( + .C(CLK), + .CE(N1), + .D(\U0/I_NO_D.U_ILA/iRESET [0]), + .Q(\U0/I_NO_D.U_ILA/U_STAT/CAP_RESET_dly1 ) + ); + FDRE #( + .INIT ( 1'b0 )) + \U0/I_NO_D.U_ILA/U_STAT/G_NS[8].U_NSQ ( + .C(CLK), + .CE(\U0/I_NO_D.U_ILA/U_STAT/NS_load ), + .D(\U0/I_NO_D.U_ILA/iCAP_NUM_SAMPLES [8]), + .R(\U0/I_NO_D.U_ILA/iARM ), + .Q(\U0/I_NO_D.U_ILA/U_STAT/NS_dstat [8]) + ); + FDRE #( + .INIT ( 1'b0 )) + \U0/I_NO_D.U_ILA/U_STAT/G_NS[7].U_NSQ ( + .C(CLK), + .CE(\U0/I_NO_D.U_ILA/U_STAT/NS_load ), + .D(\U0/I_NO_D.U_ILA/iCAP_NUM_SAMPLES [7]), + .R(\U0/I_NO_D.U_ILA/iARM ), + .Q(\U0/I_NO_D.U_ILA/U_STAT/NS_dstat [7]) + ); + FDRE #( + .INIT ( 1'b0 )) + \U0/I_NO_D.U_ILA/U_STAT/G_NS[6].U_NSQ ( + .C(CLK), + .CE(\U0/I_NO_D.U_ILA/U_STAT/NS_load ), + .D(\U0/I_NO_D.U_ILA/iCAP_NUM_SAMPLES [6]), + .R(\U0/I_NO_D.U_ILA/iARM ), + .Q(\U0/I_NO_D.U_ILA/U_STAT/NS_dstat [6]) + ); + FDRE #( + .INIT ( 1'b0 )) + \U0/I_NO_D.U_ILA/U_STAT/G_NS[5].U_NSQ ( + .C(CLK), + .CE(\U0/I_NO_D.U_ILA/U_STAT/NS_load ), + .D(\U0/I_NO_D.U_ILA/iCAP_NUM_SAMPLES [5]), + .R(\U0/I_NO_D.U_ILA/iARM ), + .Q(\U0/I_NO_D.U_ILA/U_STAT/NS_dstat [5]) + ); + FDRE #( + .INIT ( 1'b0 )) + \U0/I_NO_D.U_ILA/U_STAT/G_NS[4].U_NSQ ( + .C(CLK), + .CE(\U0/I_NO_D.U_ILA/U_STAT/NS_load ), + .D(\U0/I_NO_D.U_ILA/iCAP_NUM_SAMPLES [4]), + .R(\U0/I_NO_D.U_ILA/iARM ), + .Q(\U0/I_NO_D.U_ILA/U_STAT/NS_dstat [4]) + ); + FDRE #( + .INIT ( 1'b0 )) + \U0/I_NO_D.U_ILA/U_STAT/G_NS[3].U_NSQ ( + .C(CLK), + .CE(\U0/I_NO_D.U_ILA/U_STAT/NS_load ), + .D(\U0/I_NO_D.U_ILA/iCAP_NUM_SAMPLES [3]), + .R(\U0/I_NO_D.U_ILA/iARM ), + .Q(\U0/I_NO_D.U_ILA/U_STAT/NS_dstat [3]) + ); + FDRE #( + .INIT ( 1'b0 )) + \U0/I_NO_D.U_ILA/U_STAT/G_NS[2].U_NSQ ( + .C(CLK), + .CE(\U0/I_NO_D.U_ILA/U_STAT/NS_load ), + .D(\U0/I_NO_D.U_ILA/iCAP_NUM_SAMPLES [2]), + .R(\U0/I_NO_D.U_ILA/iARM ), + .Q(\U0/I_NO_D.U_ILA/U_STAT/NS_dstat [2]) + ); + FDRE #( + .INIT ( 1'b0 )) + \U0/I_NO_D.U_ILA/U_STAT/G_NS[1].U_NSQ ( + .C(CLK), + .CE(\U0/I_NO_D.U_ILA/U_STAT/NS_load ), + .D(\U0/I_NO_D.U_ILA/iCAP_NUM_SAMPLES [1]), + .R(\U0/I_NO_D.U_ILA/iARM ), + .Q(\U0/I_NO_D.U_ILA/U_STAT/NS_dstat [1]) + ); + FDRE #( + .INIT ( 1'b0 )) + \U0/I_NO_D.U_ILA/U_STAT/G_NS[0].U_NSQ ( + .C(CLK), + .CE(\U0/I_NO_D.U_ILA/U_STAT/NS_load ), + .D(\U0/I_NO_D.U_ILA/iCAP_NUM_SAMPLES [0]), + .R(\U0/I_NO_D.U_ILA/iARM ), + .Q(\U0/I_NO_D.U_ILA/U_STAT/NS_dstat [0]) + ); + FDRE #( + .INIT ( 1'b0 )) + \U0/I_NO_D.U_ILA/U_STAT/U_STATE1 ( + .C(CLK), + .CE(\U0/I_NO_D.U_ILA/U_STAT/DSTAT_load ), + .D(\U0/I_NO_D.U_ILA/iCAP_STATE [1]), + .R(\U0/I_NO_D.U_ILA/iARM ), + .Q(\U0/I_NO_D.U_ILA/U_STAT/STATE_dstat [1]) + ); + FDRE #( + .INIT ( 1'b0 )) + \U0/I_NO_D.U_ILA/U_STAT/U_STATE0 ( + .C(CLK), + .CE(\U0/I_NO_D.U_ILA/U_STAT/DSTAT_load ), + .D(\U0/I_NO_D.U_ILA/iCAP_STATE [0]), + .R(\U0/I_NO_D.U_ILA/iARM ), + .Q(\U0/I_NO_D.U_ILA/U_STAT/STATE_dstat [0]) + ); + FDRS #( + .INIT ( 1'b0 )) + \U0/I_NO_D.U_ILA/U_STAT/U_ARM ( + .C(CLK), + .D(\U0/I_NO_D.U_ILA/U_STAT/ARM_dstat ), + .R(\U0/I_NO_D.U_ILA/iRESET [0]), + .S(\U0/I_NO_D.U_ILA/iARM ), + .Q(\U0/I_NO_D.U_ILA/U_STAT/ARM_dstat ) + ); + FDRS #( + .INIT ( 1'b0 )) + \U0/I_NO_D.U_ILA/U_STAT/U_TRIGGER ( + .C(CLK), + .D(\U0/I_NO_D.U_ILA/U_STAT/TRIGGER_dstat ), + .R(\U0/I_NO_D.U_ILA/iRESET [0]), + .S(\U0/I_NO_D.U_ILA/iCAP_TRIGGER_OUT ), + .Q(\U0/I_NO_D.U_ILA/U_STAT/TRIGGER_dstat ) + ); + FDRS #( + .INIT ( 1'b0 )) + \U0/I_NO_D.U_ILA/U_STAT/U_FULL ( + .C(CLK), + .D(\U0/I_NO_D.U_ILA/U_STAT/FULL_dstat ), + .R(\U0/I_NO_D.U_ILA/iARM ), + .S(\U0/I_NO_D.U_ILA/iCAP_DONE ), + .Q(\U0/I_NO_D.U_ILA/U_STAT/FULL_dstat ) + ); + FDRS #( + .INIT ( 1'b0 )) + \U0/I_NO_D.U_ILA/U_STAT/U_ECR ( + .C(CLK), + .D(\U0/I_NO_D.U_ILA/U_STAT/EXTCAP_READY_dstat ), + .R(\U0/I_NO_D.U_ILA/iARM ), + .S(N1), + .Q(\U0/I_NO_D.U_ILA/U_STAT/EXTCAP_READY_dstat ) + ); + FDCE #( + .INIT ( 1'b0 )) + \U0/I_NO_D.U_ILA/U_STAT/U_DIRTY_FDCE ( + .C(CONTROL[0]), + .CE(N1), + .CLR(\U0/I_NO_D.U_ILA/iARM ), + .D(\U0/I_NO_D.U_ILA/U_STAT/DIRTY_dstat ), + .Q(\U0/I_NO_D.U_ILA/U_STAT/DIRTY_D0 ) + ); + FDPE #( + .INIT ( 1'b1 )) + \U0/I_NO_D.U_ILA/U_STAT/U_DIRTY_FDPE ( + .C(CONTROL[0]), + .CE(N1), + .D(\U0/I_NO_D.U_ILA/U_STAT/DIRTY_dstat ), + .PRE(CONTROL[13]), + .Q(\U0/I_NO_D.U_ILA/U_STAT/DIRTY_D1 ) + ); + LDC #( + .INIT ( 1'b0 )) + \U0/I_NO_D.U_ILA/U_STAT/U_DIRTY_LDC ( + .CLR(\U0/I_NO_D.U_ILA/iARM ), + .D(N1), + .G(CONTROL[13]), + .Q(\U0/I_NO_D.U_ILA/U_STAT/DIRTY_SEL ) + ); + FDCE #( + .INIT ( 1'b0 )) + \U0/I_NO_D.U_ILA/U_STAT/U_RISING ( + .C(CLK), + .CE(N1), + .CLR(\U0/I_NO_D.U_ILA/U_STAT/ACTRESET_pulse ), + .D(N1), + .Q(\U0/I_NO_D.U_ILA/U_STAT/ACT_dstat ) + ); + FDE #( + .INIT ( 1'b0 )) + \U0/I_NO_D.U_ILA/U_STAT/U_TDO ( + .C(CONTROL[0]), + .CE(N1), + .D(\U0/I_NO_D.U_ILA/U_STAT/TDO_next ), + .Q(\U0/I_NO_D.U_ILA/iSTAT_DOUT ) + ); + FDE #( + .INIT ( 1'b0 )) + \U0/I_NO_D.U_ILA/U_STAT/U_DSL1/U_GEN_DELAY[1].U_FD ( + .C(CLK), + .CE(N1), + .D(\U0/I_NO_D.U_ILA/U_STAT/U_DSL1/iDOUT_dly [0]), + .Q(\U0/I_NO_D.U_ILA/U_STAT/U_DSL1/iDOUT_dly [1]) + ); + FDCE #( + .INIT ( 1'b0 )) + \U0/I_NO_D.U_ILA/U_STAT/U_DSL1/U_RFDRE ( + .C(CLK), + .CE(\U0/I_NO_D.U_ILA/U_STAT/DSTAT_en_dly1 ), + .CLR(\U0/I_NO_D.U_ILA/U_STAT/U_DSL1/iCLR ), + .D(\U0/I_NO_D.U_ILA/U_STAT/DSTAT_en_dly1 ), + .Q(\U0/I_NO_D.U_ILA/U_STAT/U_DSL1/iDOUT_dly [0]) + ); + FDR #( + .INIT ( 1'b0 )) + \U0/I_NO_D.U_ILA/U_STAT/U_DSL1/U_DOUT ( + .C(CLK), + .D(\U0/I_NO_D.U_ILA/U_STAT/U_DSL1/iDIN [0]), + .R(\U0/I_NO_D.U_ILA/U_STAT/U_DSL1/iDIN [1]), + .Q(\U0/I_NO_D.U_ILA/U_STAT/DSTAT_en_dly1 ) + ); + FDCE #( + .INIT ( 1'b0 )) + \U0/I_NO_D.U_ILA/U_STAT/U_DSL1/U_DOUT1 ( + .C(CLK), + .CE(N1), + .CLR(\U0/I_NO_D.U_ILA/U_STAT/U_DSL1/iCLR ), + .D(\U0/I_NO_D.U_ILA/U_STAT/U_DSL1/iDIN [0]), + .Q(\U0/I_NO_D.U_ILA/U_STAT/U_DSL1/iDIN [1]) + ); + FDCE #( + .INIT ( 1'b0 )) + \U0/I_NO_D.U_ILA/U_STAT/U_DSL1/U_DOUT0 ( + .C(CLK), + .CE(N1), + .CLR(\U0/I_NO_D.U_ILA/U_STAT/U_DSL1/iCLR ), + .D(\U0/I_NO_D.U_ILA/U_STAT/U_DSL1/din_latched ), + .Q(\U0/I_NO_D.U_ILA/U_STAT/U_DSL1/iDIN [0]) + ); + FDCE #( + .INIT ( 1'b0 )) + \U0/I_NO_D.U_ILA/U_STAT/U_DSL1/U_TFDRE ( + .C(CONTROL[0]), + .CE(CONTROL[5]), + .CLR(\U0/I_NO_D.U_ILA/U_STAT/U_DSL1/iCLR ), + .D(CONTROL[5]), + .Q(\U0/I_NO_D.U_ILA/U_STAT/U_DSL1/din_latched ) + ); + FDR #( + .INIT ( 1'b0 )) + \U0/I_NO_D.U_ILA/U_STAT/U_RESET_EDGE/I_H2L.U_DOUT ( + .C(CONTROL[0]), + .D(\U0/I_NO_D.U_ILA/U_STAT/U_RESET_EDGE/iDOUT [1]), + .R(\U0/I_NO_D.U_ILA/U_STAT/U_RESET_EDGE/iDOUT [0]), + .Q(\U0/I_NO_D.U_ILA/U_STAT/ACTRESET_pulse ) + ); + FDE #( + .INIT ( 1'b0 )) + \U0/I_NO_D.U_ILA/U_STAT/U_RESET_EDGE/U_DOUT1 ( + .C(CONTROL[0]), + .CE(N1), + .D(\U0/I_NO_D.U_ILA/U_STAT/U_RESET_EDGE/iDOUT [0]), + .Q(\U0/I_NO_D.U_ILA/U_STAT/U_RESET_EDGE/iDOUT [1]) + ); + FDE #( + .INIT ( 1'b0 )) + \U0/I_NO_D.U_ILA/U_STAT/U_RESET_EDGE/U_DOUT0 ( + .C(CONTROL[0]), + .CE(N1), + .D(CONTROL[5]), + .Q(\U0/I_NO_D.U_ILA/U_STAT/U_RESET_EDGE/iDOUT [0]) + ); + MUXF5 \U0/I_NO_D.U_ILA/U_STAT/U_DMUX/U_CS_MUX/I3.U_MUX8/Mmux_O_2_f5 ( + .I0(\U0/I_NO_D.U_ILA/U_STAT/U_DMUX/U_CS_MUX/I3.U_MUX8/Mmux_O_4_450 ), + .I1(\U0/I_NO_D.U_ILA/U_STAT/U_DMUX/U_CS_MUX/I3.U_MUX8/Mmux_O_3_449 ), + .S(\U0/I_NO_D.U_ILA/U_STAT/iSTAT_CNT [5]), + .O(\U0/I_NO_D.U_ILA/U_STAT/TDO_mux_in<0>1 ) + ); + LUT4 #( + .INIT ( 16'h5140 )) + \U0/I_NO_D.U_ILA/U_STAT/U_DMUX/U_CS_MUX/I3.U_MUX8/Mmux_O_4 ( + .I0(\U0/I_NO_D.U_ILA/U_STAT/iSTAT_CNT [4]), + .I1(\U0/I_NO_D.U_ILA/U_STAT/iSTAT_CNT [3]), + .I2(\U0/I_NO_D.U_ILA/U_STAT/U_DMUX/U_CS_MUX/I3.U_MUX8/Mmux_O_91_455 ), + .I3(\U0/I_NO_D.U_ILA/U_STAT/U_DMUX/U_CS_MUX/I3.U_MUX8/Mmux_O_8_452 ), + .O(\U0/I_NO_D.U_ILA/U_STAT/U_DMUX/U_CS_MUX/I3.U_MUX8/Mmux_O_4_450 ) + ); + LUT3 #( + .INIT ( 8'hE4 )) + \U0/I_NO_D.U_ILA/U_STAT/U_DMUX/U_CS_MUX/I3.U_MUX8/Mmux_O_8 ( + .I0(\U0/I_NO_D.U_ILA/U_STAT/iSTAT_CNT [2]), + .I1(\U0/I_NO_D.U_ILA/U_STAT/iSTAT_CNT<1>1_535 ), + .I2(\U0/I_NO_D.U_ILA/U_STAT/U_DMUX/U_CS_MUX/I3.U_MUX8/Mmux_O_12_f5_446 ), + .O(\U0/I_NO_D.U_ILA/U_STAT/U_DMUX/U_CS_MUX/I3.U_MUX8/Mmux_O_8_452 ) + ); + MUXF5 \U0/I_NO_D.U_ILA/U_STAT/U_DMUX/U_CS_MUX/I3.U_MUX8/Mmux_O_12_f5 ( + .I0(\U0/I_NO_D.U_ILA/U_STAT/U_DMUX/U_CS_MUX/I3.U_MUX8/Mmux_O_14_448 ), + .I1(\U0/I_NO_D.U_ILA/U_STAT/U_DMUX/U_CS_MUX/I3.U_MUX8/Mmux_O_13_447 ), + .S(\U0/I_NO_D.U_ILA/U_STAT/iSTAT_CNT [1]), + .O(\U0/I_NO_D.U_ILA/U_STAT/U_DMUX/U_CS_MUX/I3.U_MUX8/Mmux_O_12_f5_446 ) + ); + LUT2 #( + .INIT ( 4'hD )) + \U0/I_NO_D.U_ILA/U_STAT/U_DMUX/U_CS_MUX/I3.U_MUX8/Mmux_O_14 ( + .I0(\U0/I_NO_D.U_ILA/U_STAT/FULL_dstat ), + .I1(\U0/I_NO_D.U_ILA/U_STAT/iSTAT_CNT [0]), + .O(\U0/I_NO_D.U_ILA/U_STAT/U_DMUX/U_CS_MUX/I3.U_MUX8/Mmux_O_14_448 ) + ); + LUT3 #( + .INIT ( 8'h53 )) + \U0/I_NO_D.U_ILA/U_STAT/U_DMUX/U_CS_MUX/I3.U_MUX8/Mmux_O_13 ( + .I0(\U0/I_NO_D.U_ILA/U_STAT/STATE_dstat [1]), + .I1(\U0/I_NO_D.U_ILA/U_STAT/STATE_dstat [0]), + .I2(\U0/I_NO_D.U_ILA/U_STAT/iSTAT_CNT [0]), + .O(\U0/I_NO_D.U_ILA/U_STAT/U_DMUX/U_CS_MUX/I3.U_MUX8/Mmux_O_13_447 ) + ); + LUT4 #( + .INIT ( 16'hFBEA )) + \U0/I_NO_D.U_ILA/U_STAT/U_DMUX/U_CS_MUX/I3.U_MUX8/Mmux_O_3 ( + .I0(\U0/I_NO_D.U_ILA/U_STAT/iSTAT_CNT [4]), + .I1(\U0/I_NO_D.U_ILA/U_STAT/iSTAT_CNT [3]), + .I2(\U0/I_NO_D.U_ILA/U_STAT/iSTAT_CNT<2>1_537 ), + .I3(\U0/I_NO_D.U_ILA/U_STAT/U_DMUX/U_CS_MUX/I3.U_MUX8/Mmux_O_7_f6_451 ), + .O(\U0/I_NO_D.U_ILA/U_STAT/U_DMUX/U_CS_MUX/I3.U_MUX8/Mmux_O_3_449 ) + ); + MUXF6 \U0/I_NO_D.U_ILA/U_STAT/U_DMUX/U_CS_MUX/I3.U_MUX8/Mmux_O_7_f6 ( + .I0(\U0/I_NO_D.U_ILA/U_STAT/U_DMUX/U_CS_MUX/I3.U_MUX8/Mmux_O_9_f5_456 ), + .I1(\U0/I_NO_D.U_ILA/U_STAT/U_DMUX/U_CS_MUX/I3.U_MUX8/Mmux_O_8_f5_453 ), + .S(\U0/I_NO_D.U_ILA/U_STAT/iSTAT_CNT [2]), + .O(\U0/I_NO_D.U_ILA/U_STAT/U_DMUX/U_CS_MUX/I3.U_MUX8/Mmux_O_7_f6_451 ) + ); + MUXF5 \U0/I_NO_D.U_ILA/U_STAT/U_DMUX/U_CS_MUX/I3.U_MUX8/Mmux_O_9_f5 ( + .I0(\U0/I_NO_D.U_ILA/U_STAT/U_DMUX/U_CS_MUX/I3.U_MUX8/Mmux_O_11_445 ), + .I1(\U0/I_NO_D.U_ILA/U_STAT/U_DMUX/U_CS_MUX/I3.U_MUX8/Mmux_O_101_444 ), + .S(\U0/I_NO_D.U_ILA/U_STAT/iSTAT_CNT [1]), + .O(\U0/I_NO_D.U_ILA/U_STAT/U_DMUX/U_CS_MUX/I3.U_MUX8/Mmux_O_9_f5_456 ) + ); + LUT3 #( + .INIT ( 8'h53 )) + \U0/I_NO_D.U_ILA/U_STAT/U_DMUX/U_CS_MUX/I3.U_MUX8/Mmux_O_11 ( + .I0(\U0/I_NO_D.U_ILA/U_STAT/NS_dstat [1]), + .I1(\U0/I_NO_D.U_ILA/U_STAT/NS_dstat [0]), + .I2(\U0/I_NO_D.U_ILA/U_STAT/iSTAT_CNT [0]), + .O(\U0/I_NO_D.U_ILA/U_STAT/U_DMUX/U_CS_MUX/I3.U_MUX8/Mmux_O_11_445 ) + ); + LUT3 #( + .INIT ( 8'h53 )) + \U0/I_NO_D.U_ILA/U_STAT/U_DMUX/U_CS_MUX/I3.U_MUX8/Mmux_O_101 ( + .I0(\U0/I_NO_D.U_ILA/U_STAT/NS_dstat [3]), + .I1(\U0/I_NO_D.U_ILA/U_STAT/NS_dstat [2]), + .I2(\U0/I_NO_D.U_ILA/U_STAT/iSTAT_CNT [0]), + .O(\U0/I_NO_D.U_ILA/U_STAT/U_DMUX/U_CS_MUX/I3.U_MUX8/Mmux_O_101_444 ) + ); + MUXF5 \U0/I_NO_D.U_ILA/U_STAT/U_DMUX/U_CS_MUX/I3.U_MUX8/Mmux_O_8_f5 ( + .I0(\U0/I_NO_D.U_ILA/U_STAT/U_DMUX/U_CS_MUX/I3.U_MUX8/Mmux_O_10_443 ), + .I1(\U0/I_NO_D.U_ILA/U_STAT/U_DMUX/U_CS_MUX/I3.U_MUX8/Mmux_O_9_454 ), + .S(\U0/I_NO_D.U_ILA/U_STAT/iSTAT_CNT [1]), + .O(\U0/I_NO_D.U_ILA/U_STAT/U_DMUX/U_CS_MUX/I3.U_MUX8/Mmux_O_8_f5_453 ) + ); + LUT3 #( + .INIT ( 8'h53 )) + \U0/I_NO_D.U_ILA/U_STAT/U_DMUX/U_CS_MUX/I3.U_MUX8/Mmux_O_10 ( + .I0(\U0/I_NO_D.U_ILA/U_STAT/NS_dstat [5]), + .I1(\U0/I_NO_D.U_ILA/U_STAT/NS_dstat [4]), + .I2(\U0/I_NO_D.U_ILA/U_STAT/iSTAT_CNT [0]), + .O(\U0/I_NO_D.U_ILA/U_STAT/U_DMUX/U_CS_MUX/I3.U_MUX8/Mmux_O_10_443 ) + ); + LUT3 #( + .INIT ( 8'h53 )) + \U0/I_NO_D.U_ILA/U_STAT/U_DMUX/U_CS_MUX/I3.U_MUX8/Mmux_O_9 ( + .I0(\U0/I_NO_D.U_ILA/U_STAT/NS_dstat [7]), + .I1(\U0/I_NO_D.U_ILA/U_STAT/NS_dstat [6]), + .I2(\U0/I_NO_D.U_ILA/U_STAT/iSTAT_CNT [0]), + .O(\U0/I_NO_D.U_ILA/U_STAT/U_DMUX/U_CS_MUX/I3.U_MUX8/Mmux_O_9_454 ) + ); + MUXF7 \U0/I_NO_D.U_ILA/U_STAT/U_SMUX/U_CS_MUX/I6.U_MUX64/Mmux_O_8_f7 ( + .I0(\U0/I_NO_D.U_ILA/U_STAT/U_SMUX/U_CS_MUX/I6.U_MUX64/Mmux_O_10_f6_471 ), + .I1(\U0/I_NO_D.U_ILA/U_STAT/U_SMUX/U_CS_MUX/I6.U_MUX64/Mmux_O_9_f6_484 ), + .S(\U0/I_NO_D.U_ILA/U_STAT/iSTAT_CNT [7]), + .O(\U0/I_NO_D.U_ILA/U_STAT/U_SMUX/U_CS_MUX/I6.U_MUX64/Mmux_O_8_f7_483 ) + ); + MUXF6 \U0/I_NO_D.U_ILA/U_STAT/U_SMUX/U_CS_MUX/I6.U_MUX64/Mmux_O_10_f6 ( + .I0(\U0/I_NO_D.U_ILA/U_STAT/U_SMUX/U_CS_MUX/I6.U_MUX64/Mmux_O_12_f5_478 ), + .I1(\U0/I_NO_D.U_ILA/U_STAT/U_SMUX/U_CS_MUX/I6.U_MUX64/Mmux_O_11_f51 ), + .S(\U0/I_NO_D.U_ILA/U_STAT/iSTAT_CNT [6]), + .O(\U0/I_NO_D.U_ILA/U_STAT/U_SMUX/U_CS_MUX/I6.U_MUX64/Mmux_O_10_f6_471 ) + ); + MUXF5 \U0/I_NO_D.U_ILA/U_STAT/U_SMUX/U_CS_MUX/I6.U_MUX64/Mmux_O_12_f5 ( + .I0(\U0/I_NO_D.U_ILA/U_STAT/U_SMUX/U_CS_MUX/I6.U_MUX64/Mmux_O_14_482 ), + .I1(\U0/I_NO_D.U_ILA/U_STAT/U_SMUX/U_CS_MUX/I6.U_MUX64/Mmux_O_132_481 ), + .S(\U0/I_NO_D.U_ILA/U_STAT/iSTAT_CNT [5]), + .O(\U0/I_NO_D.U_ILA/U_STAT/U_SMUX/U_CS_MUX/I6.U_MUX64/Mmux_O_12_f5_478 ) + ); + LUT3 #( + .INIT ( 8'hE4 )) + \U0/I_NO_D.U_ILA/U_STAT/U_SMUX/U_CS_MUX/I6.U_MUX64/Mmux_O_14 ( + .I0(\U0/I_NO_D.U_ILA/U_STAT/iSTAT_CNT [4]), + .I1(\U0/I_NO_D.U_ILA/U_STAT/iSTAT [0]), + .I2(\U0/I_NO_D.U_ILA/U_STAT/iSTAT [1]), + .O(\U0/I_NO_D.U_ILA/U_STAT/U_SMUX/U_CS_MUX/I6.U_MUX64/Mmux_O_14_482 ) + ); + LUT3 #( + .INIT ( 8'hE4 )) + \U0/I_NO_D.U_ILA/U_STAT/U_SMUX/U_CS_MUX/I6.U_MUX64/Mmux_O_132 ( + .I0(\U0/I_NO_D.U_ILA/U_STAT/iSTAT_CNT [4]), + .I1(\U0/I_NO_D.U_ILA/U_STAT/iSTAT [2]), + .I2(\U0/I_NO_D.U_ILA/U_STAT/iSTAT [3]), + .O(\U0/I_NO_D.U_ILA/U_STAT/U_SMUX/U_CS_MUX/I6.U_MUX64/Mmux_O_132_481 ) + ); + MUXF5 \U0/I_NO_D.U_ILA/U_STAT/U_SMUX/U_CS_MUX/I6.U_MUX64/Mmux_O_11_f5_0 ( + .I0(\U0/I_NO_D.U_ILA/U_STAT/U_SMUX/U_CS_MUX/I6.U_MUX64/Mmux_O_131_480 ), + .I1(\U0/I_NO_D.U_ILA/U_STAT/U_SMUX/U_CS_MUX/I6.U_MUX64/Mmux_O_122_477 ), + .S(\U0/I_NO_D.U_ILA/U_STAT/iSTAT_CNT [5]), + .O(\U0/I_NO_D.U_ILA/U_STAT/U_SMUX/U_CS_MUX/I6.U_MUX64/Mmux_O_11_f51 ) + ); + LUT3 #( + .INIT ( 8'hE4 )) + \U0/I_NO_D.U_ILA/U_STAT/U_SMUX/U_CS_MUX/I6.U_MUX64/Mmux_O_131 ( + .I0(\U0/I_NO_D.U_ILA/U_STAT/iSTAT_CNT [4]), + .I1(\U0/I_NO_D.U_ILA/U_STAT/iSTAT [4]), + .I2(\U0/I_NO_D.U_ILA/U_STAT/iSTAT [5]), + .O(\U0/I_NO_D.U_ILA/U_STAT/U_SMUX/U_CS_MUX/I6.U_MUX64/Mmux_O_131_480 ) + ); + LUT3 #( + .INIT ( 8'hE4 )) + \U0/I_NO_D.U_ILA/U_STAT/U_SMUX/U_CS_MUX/I6.U_MUX64/Mmux_O_122 ( + .I0(\U0/I_NO_D.U_ILA/U_STAT/iSTAT_CNT [4]), + .I1(\U0/I_NO_D.U_ILA/U_STAT/iSTAT [6]), + .I2(\U0/I_NO_D.U_ILA/U_STAT/iSTAT [7]), + .O(\U0/I_NO_D.U_ILA/U_STAT/U_SMUX/U_CS_MUX/I6.U_MUX64/Mmux_O_122_477 ) + ); + MUXF6 \U0/I_NO_D.U_ILA/U_STAT/U_SMUX/U_CS_MUX/I6.U_MUX64/Mmux_O_9_f6 ( + .I0(\U0/I_NO_D.U_ILA/U_STAT/U_SMUX/U_CS_MUX/I6.U_MUX64/Mmux_O_11_f5_473 ), + .I1(\U0/I_NO_D.U_ILA/U_STAT/U_SMUX/U_CS_MUX/I6.U_MUX64/Mmux_O_10_f5_470 ), + .S(\U0/I_NO_D.U_ILA/U_STAT/iSTAT_CNT [6]), + .O(\U0/I_NO_D.U_ILA/U_STAT/U_SMUX/U_CS_MUX/I6.U_MUX64/Mmux_O_9_f6_484 ) + ); + MUXF5 \U0/I_NO_D.U_ILA/U_STAT/U_SMUX/U_CS_MUX/I6.U_MUX64/Mmux_O_11_f5 ( + .I0(\U0/I_NO_D.U_ILA/U_STAT/U_SMUX/U_CS_MUX/I6.U_MUX64/Mmux_O_13_479 ), + .I1(\U0/I_NO_D.U_ILA/U_STAT/U_SMUX/U_CS_MUX/I6.U_MUX64/Mmux_O_121_476 ), + .S(\U0/I_NO_D.U_ILA/U_STAT/iSTAT_CNT [5]), + .O(\U0/I_NO_D.U_ILA/U_STAT/U_SMUX/U_CS_MUX/I6.U_MUX64/Mmux_O_11_f5_473 ) + ); + LUT3 #( + .INIT ( 8'hE4 )) + \U0/I_NO_D.U_ILA/U_STAT/U_SMUX/U_CS_MUX/I6.U_MUX64/Mmux_O_13 ( + .I0(\U0/I_NO_D.U_ILA/U_STAT/iSTAT_CNT [4]), + .I1(\U0/I_NO_D.U_ILA/U_STAT/iSTAT [8]), + .I2(\U0/I_NO_D.U_ILA/U_STAT/iSTAT [9]), + .O(\U0/I_NO_D.U_ILA/U_STAT/U_SMUX/U_CS_MUX/I6.U_MUX64/Mmux_O_13_479 ) + ); + LUT3 #( + .INIT ( 8'hE4 )) + \U0/I_NO_D.U_ILA/U_STAT/U_SMUX/U_CS_MUX/I6.U_MUX64/Mmux_O_121 ( + .I0(\U0/I_NO_D.U_ILA/U_STAT/iSTAT_CNT [4]), + .I1(\U0/I_NO_D.U_ILA/U_STAT/iSTAT [10]), + .I2(\U0/I_NO_D.U_ILA/U_STAT/iSTAT [11]), + .O(\U0/I_NO_D.U_ILA/U_STAT/U_SMUX/U_CS_MUX/I6.U_MUX64/Mmux_O_121_476 ) + ); + MUXF5 \U0/I_NO_D.U_ILA/U_STAT/U_SMUX/U_CS_MUX/I6.U_MUX64/Mmux_O_10_f5 ( + .I0(\U0/I_NO_D.U_ILA/U_STAT/U_SMUX/U_CS_MUX/I6.U_MUX64/Mmux_O_12_475 ), + .I1(\U0/I_NO_D.U_ILA/U_STAT/U_SMUX/U_CS_MUX/I6.U_MUX64/Mmux_O_11_472 ), + .S(\U0/I_NO_D.U_ILA/U_STAT/iSTAT_CNT [5]), + .O(\U0/I_NO_D.U_ILA/U_STAT/U_SMUX/U_CS_MUX/I6.U_MUX64/Mmux_O_10_f5_470 ) + ); + LUT3 #( + .INIT ( 8'hE4 )) + \U0/I_NO_D.U_ILA/U_STAT/U_SMUX/U_CS_MUX/I6.U_MUX64/Mmux_O_12 ( + .I0(\U0/I_NO_D.U_ILA/U_STAT/iSTAT_CNT [4]), + .I1(\U0/I_NO_D.U_ILA/U_STAT/iSTAT [12]), + .I2(\U0/I_NO_D.U_ILA/U_STAT/iSTAT [13]), + .O(\U0/I_NO_D.U_ILA/U_STAT/U_SMUX/U_CS_MUX/I6.U_MUX64/Mmux_O_12_475 ) + ); + LUT3 #( + .INIT ( 8'hE4 )) + \U0/I_NO_D.U_ILA/U_STAT/U_SMUX/U_CS_MUX/I6.U_MUX64/Mmux_O_11 ( + .I0(\U0/I_NO_D.U_ILA/U_STAT/iSTAT_CNT [4]), + .I1(\U0/I_NO_D.U_ILA/U_STAT/iSTAT [14]), + .I2(\U0/I_NO_D.U_ILA/U_STAT/iSTAT [15]), + .O(\U0/I_NO_D.U_ILA/U_STAT/U_SMUX/U_CS_MUX/I6.U_MUX64/Mmux_O_11_472 ) + ); + LUT2 #( + .INIT ( 4'hE )) + \U0/I_NO_D.U_ILA/U_STAT/U_STATCMD ( + .I0(CONTROL[4]), + .I1(CONTROL[5]), + .O(\U0/I_NO_D.U_ILA/U_STAT/iSTATCMD_CE ) + ); + INV \U0/I_NO_D.U_ILA/U_STAT/U_STATCMD_n ( + .I(\U0/I_NO_D.U_ILA/U_STAT/iSTATCMD_CE ), + .O(\U0/I_NO_D.U_ILA/U_STAT/iSTATCMD_CE_n ) + ); + LUT2 #( + .INIT ( 4'h4 )) + \U0/I_NO_D.U_ILA/U_STAT/U_DSL ( + .I0(\U0/I_NO_D.U_ILA/U_STAT/DSTAT_en_dly3 ), + .I1(\U0/I_NO_D.U_ILA/U_STAT/DSTAT_en_dly2 ), + .O(\U0/I_NO_D.U_ILA/U_STAT/DSTAT_load ) + ); + LUT2 #( + .INIT ( 4'h2 )) + \U0/I_NO_D.U_ILA/U_STAT/U_DSR ( + .I0(\U0/I_NO_D.U_ILA/U_STAT/DSTAT_en_dly3 ), + .I1(\U0/I_NO_D.U_ILA/U_STAT/DSTAT_en_dly2 ), + .O(\NLW_U0/I_NO_D.U_ILA/U_STAT/U_DSR_O_UNCONNECTED ) + ); + LUT4 #( + .INIT ( 16'h0F22 )) + \U0/I_NO_D.U_ILA/U_STAT/U_NSL ( + .I0(\U0/I_NO_D.U_ILA/U_STAT/DSTAT_en_dly3 ), + .I1(\U0/I_NO_D.U_ILA/U_STAT/DSTAT_en_dly2 ), + .I2(\U0/I_NO_D.U_ILA/U_STAT/CAP_RESET_dly1 ), + .I3(\U0/I_NO_D.U_ILA/iRESET [0]), + .O(\U0/I_NO_D.U_ILA/U_STAT/NS_load ) + ); + LUT4 #( + .INIT ( 16'h0030 )) + \U0/I_NO_D.U_ILA/U_STAT/F_SSTAT[16].I_STAT.U_STAT ( + .I0(\U0/I_NO_D.U_ILA/U_STAT/iSTAT_CNT [0]), + .I1(\U0/I_NO_D.U_ILA/U_STAT/iSTAT_CNT [1]), + .I2(\U0/I_NO_D.U_ILA/U_STAT/iSTAT_CNT [2]), + .I3(\U0/I_NO_D.U_ILA/U_STAT/iSTAT_CNT [3]), + .O(\U0/I_NO_D.U_ILA/U_STAT/iSTAT [16]) + ); + LUT4 #( + .INIT ( 16'h1030 )) + \U0/I_NO_D.U_ILA/U_STAT/F_SSTAT[15].I_STAT.U_STAT ( + .I0(\U0/I_NO_D.U_ILA/U_STAT/iSTAT_CNT [0]), + .I1(\U0/I_NO_D.U_ILA/U_STAT/iSTAT_CNT [1]), + .I2(\U0/I_NO_D.U_ILA/U_STAT/iSTAT_CNT [2]), + .I3(\U0/I_NO_D.U_ILA/U_STAT/iSTAT_CNT [3]), + .O(\U0/I_NO_D.U_ILA/U_STAT/iSTAT [15]) + ); + LUT4 #( + .INIT ( 16'h0070 )) + \U0/I_NO_D.U_ILA/U_STAT/F_SSTAT[14].I_STAT.U_STAT ( + .I0(\U0/I_NO_D.U_ILA/U_STAT/iSTAT_CNT [0]), + .I1(\U0/I_NO_D.U_ILA/U_STAT/iSTAT_CNT [1]), + .I2(\U0/I_NO_D.U_ILA/U_STAT/iSTAT_CNT [2]), + .I3(\U0/I_NO_D.U_ILA/U_STAT/iSTAT_CNT [3]), + .O(\U0/I_NO_D.U_ILA/U_STAT/iSTAT [14]) + ); + LUT4 #( + .INIT ( 16'h1020 )) + \U0/I_NO_D.U_ILA/U_STAT/F_SSTAT[13].I_STAT.U_STAT ( + .I0(\U0/I_NO_D.U_ILA/U_STAT/iSTAT_CNT [0]), + .I1(\U0/I_NO_D.U_ILA/U_STAT/iSTAT_CNT [1]), + .I2(\U0/I_NO_D.U_ILA/U_STAT/iSTAT_CNT [2]), + .I3(\U0/I_NO_D.U_ILA/U_STAT/iSTAT_CNT [3]), + .O(\U0/I_NO_D.U_ILA/U_STAT/iSTAT [13]) + ); + LUT4 #( + .INIT ( 16'h0070 )) + \U0/I_NO_D.U_ILA/U_STAT/F_SSTAT[12].I_STAT.U_STAT ( + .I0(\U0/I_NO_D.U_ILA/U_STAT/iSTAT_CNT [0]), + .I1(\U0/I_NO_D.U_ILA/U_STAT/iSTAT_CNT [1]), + .I2(\U0/I_NO_D.U_ILA/U_STAT/iSTAT_CNT [2]), + .I3(\U0/I_NO_D.U_ILA/U_STAT/iSTAT_CNT [3]), + .O(\U0/I_NO_D.U_ILA/U_STAT/iSTAT [12]) + ); + LUT4 #( + .INIT ( 16'h1010 )) + \U0/I_NO_D.U_ILA/U_STAT/F_SSTAT[11].I_STAT.U_STAT ( + .I0(\U0/I_NO_D.U_ILA/U_STAT/iSTAT_CNT [0]), + .I1(\U0/I_NO_D.U_ILA/U_STAT/iSTAT_CNT [1]), + .I2(\U0/I_NO_D.U_ILA/U_STAT/iSTAT_CNT [2]), + .I3(\U0/I_NO_D.U_ILA/U_STAT/iSTAT_CNT [3]), + .O(\U0/I_NO_D.U_ILA/U_STAT/iSTAT [11]) + ); + LUT4 #( + .INIT ( 16'h0070 )) + \U0/I_NO_D.U_ILA/U_STAT/F_SSTAT[10].I_STAT.U_STAT ( + .I0(\U0/I_NO_D.U_ILA/U_STAT/iSTAT_CNT [0]), + .I1(\U0/I_NO_D.U_ILA/U_STAT/iSTAT_CNT [1]), + .I2(\U0/I_NO_D.U_ILA/U_STAT/iSTAT_CNT [2]), + .I3(\U0/I_NO_D.U_ILA/U_STAT/iSTAT_CNT [3]), + .O(\U0/I_NO_D.U_ILA/U_STAT/iSTAT [10]) + ); + LUT4 #( + .INIT ( 16'h100F )) + \U0/I_NO_D.U_ILA/U_STAT/F_SSTAT[9].I_STAT.U_STAT ( + .I0(\U0/I_NO_D.U_ILA/U_STAT/iSTAT_CNT [0]), + .I1(\U0/I_NO_D.U_ILA/U_STAT/iSTAT_CNT [1]), + .I2(\U0/I_NO_D.U_ILA/U_STAT/iSTAT_CNT [2]), + .I3(\U0/I_NO_D.U_ILA/U_STAT/iSTAT_CNT [3]), + .O(\U0/I_NO_D.U_ILA/U_STAT/iSTAT [9]) + ); + LUT4 #( + .INIT ( 16'hFFF0 )) + \U0/I_NO_D.U_ILA/U_STAT/F_SSTAT[8].I_STAT.U_STAT ( + .I0(\U0/I_NO_D.U_ILA/U_STAT/iSTAT_CNT [0]), + .I1(\U0/I_NO_D.U_ILA/U_STAT/iSTAT_CNT [1]), + .I2(\U0/I_NO_D.U_ILA/U_STAT/iSTAT_CNT [2]), + .I3(\U0/I_NO_D.U_ILA/U_STAT/iSTAT_CNT [3]), + .O(\U0/I_NO_D.U_ILA/U_STAT/iSTAT [8]) + ); + LUT4 #( + .INIT ( 16'h0004 )) + \U0/I_NO_D.U_ILA/U_STAT/F_SSTAT[7].I_STAT.U_STAT ( + .I0(\U0/I_NO_D.U_ILA/U_STAT/iSTAT_CNT [0]), + .I1(\U0/I_NO_D.U_ILA/U_STAT/iSTAT_CNT [1]), + .I2(\U0/I_NO_D.U_ILA/U_STAT/iSTAT_CNT [2]), + .I3(\U0/I_NO_D.U_ILA/U_STAT/iSTAT_CNT [3]), + .O(\U0/I_NO_D.U_ILA/U_STAT/iSTAT [7]) + ); + LUT4 #( + .INIT ( 16'h3000 )) + \U0/I_NO_D.U_ILA/U_STAT/F_SSTAT[6].I_STAT.U_STAT ( + .I0(\U0/I_NO_D.U_ILA/U_STAT/iSTAT_CNT [0]), + .I1(\U0/I_NO_D.U_ILA/U_STAT/iSTAT_CNT [1]), + .I2(\U0/I_NO_D.U_ILA/U_STAT/iSTAT_CNT [2]), + .I3(\U0/I_NO_D.U_ILA/U_STAT/iSTAT_CNT [3]), + .O(\U0/I_NO_D.U_ILA/U_STAT/iSTAT [6]) + ); + LUT4 #( + .INIT ( 16'h001F )) + \U0/I_NO_D.U_ILA/U_STAT/F_SSTAT[5].I_STAT.U_STAT ( + .I0(\U0/I_NO_D.U_ILA/U_STAT/iSTAT_CNT [0]), + .I1(\U0/I_NO_D.U_ILA/U_STAT/iSTAT_CNT [1]), + .I2(\U0/I_NO_D.U_ILA/U_STAT/iSTAT_CNT [2]), + .I3(\U0/I_NO_D.U_ILA/U_STAT/iSTAT_CNT [3]), + .O(\U0/I_NO_D.U_ILA/U_STAT/iSTAT [5]) + ); + LUT4 #( + .INIT ( 16'hF001 )) + \U0/I_NO_D.U_ILA/U_STAT/F_SSTAT[4].I_STAT.U_STAT ( + .I0(\U0/I_NO_D.U_ILA/U_STAT/iSTAT_CNT [0]), + .I1(\U0/I_NO_D.U_ILA/U_STAT/iSTAT_CNT [1]), + .I2(\U0/I_NO_D.U_ILA/U_STAT/iSTAT_CNT [2]), + .I3(\U0/I_NO_D.U_ILA/U_STAT/iSTAT_CNT [3]), + .O(\U0/I_NO_D.U_ILA/U_STAT/iSTAT [4]) + ); + LUT4 #( + .INIT ( 16'hB610 )) + \U0/I_NO_D.U_ILA/U_STAT/F_SSTAT[3].I_STAT.U_STAT ( + .I0(\U0/I_NO_D.U_ILA/U_STAT/iSTAT_CNT [0]), + .I1(\U0/I_NO_D.U_ILA/U_STAT/iSTAT_CNT [1]), + .I2(\U0/I_NO_D.U_ILA/U_STAT/iSTAT_CNT [2]), + .I3(\U0/I_NO_D.U_ILA/U_STAT/iSTAT_CNT [3]), + .O(\U0/I_NO_D.U_ILA/U_STAT/iSTAT [3]) + ); + LUT4 #( + .INIT ( 16'h2100 )) + \U0/I_NO_D.U_ILA/U_STAT/F_SSTAT[2].I_STAT.U_STAT ( + .I0(\U0/I_NO_D.U_ILA/U_STAT/iSTAT_CNT [0]), + .I1(\U0/I_NO_D.U_ILA/U_STAT/iSTAT_CNT [1]), + .I2(\U0/I_NO_D.U_ILA/U_STAT/iSTAT_CNT [2]), + .I3(\U0/I_NO_D.U_ILA/U_STAT/iSTAT_CNT [3]), + .O(\U0/I_NO_D.U_ILA/U_STAT/iSTAT [2]) + ); + LUT4 #( + .INIT ( 16'hC102 )) + \U0/I_NO_D.U_ILA/U_STAT/F_SSTAT[1].I_STAT.U_STAT ( + .I0(\U0/I_NO_D.U_ILA/U_STAT/iSTAT_CNT [0]), + .I1(\U0/I_NO_D.U_ILA/U_STAT/iSTAT_CNT [1]), + .I2(\U0/I_NO_D.U_ILA/U_STAT/iSTAT_CNT [2]), + .I3(\U0/I_NO_D.U_ILA/U_STAT/iSTAT_CNT [3]), + .O(\U0/I_NO_D.U_ILA/U_STAT/iSTAT [1]) + ); + LUT4 #( + .INIT ( 16'h0101 )) + \U0/I_NO_D.U_ILA/U_STAT/F_SSTAT[0].I_STAT.U_STAT ( + .I0(\U0/I_NO_D.U_ILA/U_STAT/iSTAT_CNT [0]), + .I1(\U0/I_NO_D.U_ILA/U_STAT/iSTAT_CNT [1]), + .I2(\U0/I_NO_D.U_ILA/U_STAT/iSTAT_CNT [2]), + .I3(\U0/I_NO_D.U_ILA/U_STAT/iSTAT_CNT [3]), + .O(\U0/I_NO_D.U_ILA/U_STAT/iSTAT [0]) + ); + LUT2 #( + .INIT ( 4'h2 )) + \U0/I_NO_D.U_ILA/U_STAT/U_DSL1/U_CLEAR ( + .I0(\U0/I_NO_D.U_ILA/U_STAT/U_DSL1/iDOUT_dly [1]), + .I1(CONTROL[5]), + .O(\U0/I_NO_D.U_ILA/U_STAT/U_DSL1/iCLR ) + ); + XORCY \U0/I_NO_D.U_ILA/U_STAT/U_STAT_CNT/G[0].U_XORCY ( + .CI(N1), + .LI(\U0/I_NO_D.U_ILA/U_STAT/U_STAT_CNT/S [0]), + .O(\U0/I_NO_D.U_ILA/U_STAT/U_STAT_CNT/D [0]) + ); + MUXCY_L \U0/I_NO_D.U_ILA/U_STAT/U_STAT_CNT/G[0].GnH.U_MUXCY ( + .CI(N1), + .DI(N0), + .S(\U0/I_NO_D.U_ILA/U_STAT/U_STAT_CNT/S [0]), + .LO(\U0/I_NO_D.U_ILA/U_STAT/U_STAT_CNT/CI [1]) + ); + LUT1 #( + .INIT ( 2'h2 )) + \U0/I_NO_D.U_ILA/U_STAT/U_STAT_CNT/G[0].U_LUT ( + .I0(\U0/I_NO_D.U_ILA/U_STAT/iSTAT_CNT [0]), + .O(\U0/I_NO_D.U_ILA/U_STAT/U_STAT_CNT/S [0]) + ); + XORCY \U0/I_NO_D.U_ILA/U_STAT/U_STAT_CNT/G[1].U_XORCY ( + .CI(\U0/I_NO_D.U_ILA/U_STAT/U_STAT_CNT/CI [1]), + .LI(\U0/I_NO_D.U_ILA/U_STAT/U_STAT_CNT/S [1]), + .O(\U0/I_NO_D.U_ILA/U_STAT/U_STAT_CNT/D [1]) + ); + MUXCY_L \U0/I_NO_D.U_ILA/U_STAT/U_STAT_CNT/G[1].GnH.U_MUXCY ( + .CI(\U0/I_NO_D.U_ILA/U_STAT/U_STAT_CNT/CI [1]), + .DI(N0), + .S(\U0/I_NO_D.U_ILA/U_STAT/U_STAT_CNT/S [1]), + .LO(\U0/I_NO_D.U_ILA/U_STAT/U_STAT_CNT/CI [2]) + ); + LUT1 #( + .INIT ( 2'h2 )) + \U0/I_NO_D.U_ILA/U_STAT/U_STAT_CNT/G[1].U_LUT ( + .I0(\U0/I_NO_D.U_ILA/U_STAT/iSTAT_CNT [1]), + .O(\U0/I_NO_D.U_ILA/U_STAT/U_STAT_CNT/S [1]) + ); + XORCY \U0/I_NO_D.U_ILA/U_STAT/U_STAT_CNT/G[2].U_XORCY ( + .CI(\U0/I_NO_D.U_ILA/U_STAT/U_STAT_CNT/CI [2]), + .LI(\U0/I_NO_D.U_ILA/U_STAT/U_STAT_CNT/S [2]), + .O(\U0/I_NO_D.U_ILA/U_STAT/U_STAT_CNT/D [2]) + ); + MUXCY_L \U0/I_NO_D.U_ILA/U_STAT/U_STAT_CNT/G[2].GnH.U_MUXCY ( + .CI(\U0/I_NO_D.U_ILA/U_STAT/U_STAT_CNT/CI [2]), + .DI(N0), + .S(\U0/I_NO_D.U_ILA/U_STAT/U_STAT_CNT/S [2]), + .LO(\U0/I_NO_D.U_ILA/U_STAT/U_STAT_CNT/CI [3]) + ); + LUT1 #( + .INIT ( 2'h2 )) + \U0/I_NO_D.U_ILA/U_STAT/U_STAT_CNT/G[2].U_LUT ( + .I0(\U0/I_NO_D.U_ILA/U_STAT/iSTAT_CNT [2]), + .O(\U0/I_NO_D.U_ILA/U_STAT/U_STAT_CNT/S [2]) + ); + XORCY \U0/I_NO_D.U_ILA/U_STAT/U_STAT_CNT/G[3].U_XORCY ( + .CI(\U0/I_NO_D.U_ILA/U_STAT/U_STAT_CNT/CI [3]), + .LI(\U0/I_NO_D.U_ILA/U_STAT/U_STAT_CNT/S [3]), + .O(\U0/I_NO_D.U_ILA/U_STAT/U_STAT_CNT/D [3]) + ); + MUXCY_L \U0/I_NO_D.U_ILA/U_STAT/U_STAT_CNT/G[3].GnH.U_MUXCY ( + .CI(\U0/I_NO_D.U_ILA/U_STAT/U_STAT_CNT/CI [3]), + .DI(N0), + .S(\U0/I_NO_D.U_ILA/U_STAT/U_STAT_CNT/S [3]), + .LO(\U0/I_NO_D.U_ILA/U_STAT/U_STAT_CNT/CI [4]) + ); + LUT1 #( + .INIT ( 2'h2 )) + \U0/I_NO_D.U_ILA/U_STAT/U_STAT_CNT/G[3].U_LUT ( + .I0(\U0/I_NO_D.U_ILA/U_STAT/iSTAT_CNT [3]), + .O(\U0/I_NO_D.U_ILA/U_STAT/U_STAT_CNT/S [3]) + ); + XORCY \U0/I_NO_D.U_ILA/U_STAT/U_STAT_CNT/G[4].U_XORCY ( + .CI(\U0/I_NO_D.U_ILA/U_STAT/U_STAT_CNT/CI [4]), + .LI(\U0/I_NO_D.U_ILA/U_STAT/U_STAT_CNT/S [4]), + .O(\U0/I_NO_D.U_ILA/U_STAT/U_STAT_CNT/D [4]) + ); + MUXCY_L \U0/I_NO_D.U_ILA/U_STAT/U_STAT_CNT/G[4].GnH.U_MUXCY ( + .CI(\U0/I_NO_D.U_ILA/U_STAT/U_STAT_CNT/CI [4]), + .DI(N0), + .S(\U0/I_NO_D.U_ILA/U_STAT/U_STAT_CNT/S [4]), + .LO(\U0/I_NO_D.U_ILA/U_STAT/U_STAT_CNT/CI [5]) + ); + LUT1 #( + .INIT ( 2'h2 )) + \U0/I_NO_D.U_ILA/U_STAT/U_STAT_CNT/G[4].U_LUT ( + .I0(\U0/I_NO_D.U_ILA/U_STAT/iSTAT_CNT [4]), + .O(\U0/I_NO_D.U_ILA/U_STAT/U_STAT_CNT/S [4]) + ); + XORCY \U0/I_NO_D.U_ILA/U_STAT/U_STAT_CNT/G[5].U_XORCY ( + .CI(\U0/I_NO_D.U_ILA/U_STAT/U_STAT_CNT/CI [5]), + .LI(\U0/I_NO_D.U_ILA/U_STAT/U_STAT_CNT/S [5]), + .O(\U0/I_NO_D.U_ILA/U_STAT/U_STAT_CNT/D [5]) + ); + MUXCY_L \U0/I_NO_D.U_ILA/U_STAT/U_STAT_CNT/G[5].GnH.U_MUXCY ( + .CI(\U0/I_NO_D.U_ILA/U_STAT/U_STAT_CNT/CI [5]), + .DI(N0), + .S(\U0/I_NO_D.U_ILA/U_STAT/U_STAT_CNT/S [5]), + .LO(\U0/I_NO_D.U_ILA/U_STAT/U_STAT_CNT/CI [6]) + ); + LUT1 #( + .INIT ( 2'h2 )) + \U0/I_NO_D.U_ILA/U_STAT/U_STAT_CNT/G[5].U_LUT ( + .I0(\U0/I_NO_D.U_ILA/U_STAT/iSTAT_CNT [5]), + .O(\U0/I_NO_D.U_ILA/U_STAT/U_STAT_CNT/S [5]) + ); + XORCY \U0/I_NO_D.U_ILA/U_STAT/U_STAT_CNT/G[6].U_XORCY ( + .CI(\U0/I_NO_D.U_ILA/U_STAT/U_STAT_CNT/CI [6]), + .LI(\U0/I_NO_D.U_ILA/U_STAT/U_STAT_CNT/S [6]), + .O(\U0/I_NO_D.U_ILA/U_STAT/U_STAT_CNT/D [6]) + ); + MUXCY_L \U0/I_NO_D.U_ILA/U_STAT/U_STAT_CNT/G[6].GnH.U_MUXCY ( + .CI(\U0/I_NO_D.U_ILA/U_STAT/U_STAT_CNT/CI [6]), + .DI(N0), + .S(\U0/I_NO_D.U_ILA/U_STAT/U_STAT_CNT/S [6]), + .LO(\U0/I_NO_D.U_ILA/U_STAT/U_STAT_CNT/CI [7]) + ); + LUT1 #( + .INIT ( 2'h2 )) + \U0/I_NO_D.U_ILA/U_STAT/U_STAT_CNT/G[6].U_LUT ( + .I0(\U0/I_NO_D.U_ILA/U_STAT/iSTAT_CNT [6]), + .O(\U0/I_NO_D.U_ILA/U_STAT/U_STAT_CNT/S [6]) + ); + XORCY \U0/I_NO_D.U_ILA/U_STAT/U_STAT_CNT/G[7].U_XORCY ( + .CI(\U0/I_NO_D.U_ILA/U_STAT/U_STAT_CNT/CI [7]), + .LI(\U0/I_NO_D.U_ILA/U_STAT/U_STAT_CNT/S [7]), + .O(\U0/I_NO_D.U_ILA/U_STAT/U_STAT_CNT/D [7]) + ); + MUXCY_L \U0/I_NO_D.U_ILA/U_STAT/U_STAT_CNT/G[7].GnH.U_MUXCY ( + .CI(\U0/I_NO_D.U_ILA/U_STAT/U_STAT_CNT/CI [7]), + .DI(N0), + .S(\U0/I_NO_D.U_ILA/U_STAT/U_STAT_CNT/S [7]), + .LO(\U0/I_NO_D.U_ILA/U_STAT/U_STAT_CNT/CI [8]) + ); + LUT1 #( + .INIT ( 2'h2 )) + \U0/I_NO_D.U_ILA/U_STAT/U_STAT_CNT/G[7].U_LUT ( + .I0(\U0/I_NO_D.U_ILA/U_STAT/iSTAT_CNT [7]), + .O(\U0/I_NO_D.U_ILA/U_STAT/U_STAT_CNT/S [7]) + ); + XORCY \U0/I_NO_D.U_ILA/U_STAT/U_STAT_CNT/G[8].U_XORCY ( + .CI(\U0/I_NO_D.U_ILA/U_STAT/U_STAT_CNT/CI [8]), + .LI(\U0/I_NO_D.U_ILA/U_STAT/U_STAT_CNT/S [8]), + .O(\U0/I_NO_D.U_ILA/U_STAT/U_STAT_CNT/D [8]) + ); + MUXCY_L \U0/I_NO_D.U_ILA/U_STAT/U_STAT_CNT/G[8].GnH.U_MUXCY ( + .CI(\U0/I_NO_D.U_ILA/U_STAT/U_STAT_CNT/CI [8]), + .DI(N0), + .S(\U0/I_NO_D.U_ILA/U_STAT/U_STAT_CNT/S [8]), + .LO(\U0/I_NO_D.U_ILA/U_STAT/U_STAT_CNT/CI [9]) + ); + LUT1 #( + .INIT ( 2'h2 )) + \U0/I_NO_D.U_ILA/U_STAT/U_STAT_CNT/G[8].U_LUT ( + .I0(\U0/I_NO_D.U_ILA/U_STAT/iSTAT_CNT [8]), + .O(\U0/I_NO_D.U_ILA/U_STAT/U_STAT_CNT/S [8]) + ); + XORCY \U0/I_NO_D.U_ILA/U_STAT/U_STAT_CNT/G[9].U_XORCY ( + .CI(\U0/I_NO_D.U_ILA/U_STAT/U_STAT_CNT/CI [9]), + .LI(\U0/I_NO_D.U_ILA/U_STAT/U_STAT_CNT/S [9]), + .O(\U0/I_NO_D.U_ILA/U_STAT/U_STAT_CNT/D [9]) + ); + LUT1 #( + .INIT ( 2'h2 )) + \U0/I_NO_D.U_ILA/U_STAT/U_STAT_CNT/G[9].U_LUT ( + .I0(\U0/I_NO_D.U_ILA/U_STAT/iSTAT_CNT [9]), + .O(\U0/I_NO_D.U_ILA/U_STAT/U_STAT_CNT/S [9]) + ); + FDRE #( + .INIT ( 1'b0 )) + \U0/I_NO_D.U_ILA/U_STAT/U_STAT_CNT/G[0].U_FDRE ( + .C(CONTROL[0]), + .CE(N1), + .D(\U0/I_NO_D.U_ILA/U_STAT/U_STAT_CNT/D [0]), + .R(\U0/I_NO_D.U_ILA/U_STAT/iSTATCMD_CE_n ), + .Q(\U0/I_NO_D.U_ILA/U_STAT/iSTAT_CNT [0]) + ); + FDRE #( + .INIT ( 1'b0 )) + \U0/I_NO_D.U_ILA/U_STAT/U_STAT_CNT/G[1].U_FDRE ( + .C(CONTROL[0]), + .CE(N1), + .D(\U0/I_NO_D.U_ILA/U_STAT/U_STAT_CNT/D [1]), + .R(\U0/I_NO_D.U_ILA/U_STAT/iSTATCMD_CE_n ), + .Q(\U0/I_NO_D.U_ILA/U_STAT/iSTAT_CNT [1]) + ); + FDRE #( + .INIT ( 1'b0 )) + \U0/I_NO_D.U_ILA/U_STAT/U_STAT_CNT/G[2].U_FDRE ( + .C(CONTROL[0]), + .CE(N1), + .D(\U0/I_NO_D.U_ILA/U_STAT/U_STAT_CNT/D [2]), + .R(\U0/I_NO_D.U_ILA/U_STAT/iSTATCMD_CE_n ), + .Q(\U0/I_NO_D.U_ILA/U_STAT/iSTAT_CNT [2]) + ); + FDRE #( + .INIT ( 1'b0 )) + \U0/I_NO_D.U_ILA/U_STAT/U_STAT_CNT/G[3].U_FDRE ( + .C(CONTROL[0]), + .CE(N1), + .D(\U0/I_NO_D.U_ILA/U_STAT/U_STAT_CNT/D [3]), + .R(\U0/I_NO_D.U_ILA/U_STAT/iSTATCMD_CE_n ), + .Q(\U0/I_NO_D.U_ILA/U_STAT/iSTAT_CNT [3]) + ); + FDRE #( + .INIT ( 1'b0 )) + \U0/I_NO_D.U_ILA/U_STAT/U_STAT_CNT/G[4].U_FDRE ( + .C(CONTROL[0]), + .CE(N1), + .D(\U0/I_NO_D.U_ILA/U_STAT/U_STAT_CNT/D [4]), + .R(\U0/I_NO_D.U_ILA/U_STAT/iSTATCMD_CE_n ), + .Q(\U0/I_NO_D.U_ILA/U_STAT/iSTAT_CNT [4]) + ); + FDRE #( + .INIT ( 1'b0 )) + \U0/I_NO_D.U_ILA/U_STAT/U_STAT_CNT/G[5].U_FDRE ( + .C(CONTROL[0]), + .CE(N1), + .D(\U0/I_NO_D.U_ILA/U_STAT/U_STAT_CNT/D [5]), + .R(\U0/I_NO_D.U_ILA/U_STAT/iSTATCMD_CE_n ), + .Q(\U0/I_NO_D.U_ILA/U_STAT/iSTAT_CNT [5]) + ); + FDRE #( + .INIT ( 1'b0 )) + \U0/I_NO_D.U_ILA/U_STAT/U_STAT_CNT/G[6].U_FDRE ( + .C(CONTROL[0]), + .CE(N1), + .D(\U0/I_NO_D.U_ILA/U_STAT/U_STAT_CNT/D [6]), + .R(\U0/I_NO_D.U_ILA/U_STAT/iSTATCMD_CE_n ), + .Q(\U0/I_NO_D.U_ILA/U_STAT/iSTAT_CNT [6]) + ); + FDRE #( + .INIT ( 1'b0 )) + \U0/I_NO_D.U_ILA/U_STAT/U_STAT_CNT/G[7].U_FDRE ( + .C(CONTROL[0]), + .CE(N1), + .D(\U0/I_NO_D.U_ILA/U_STAT/U_STAT_CNT/D [7]), + .R(\U0/I_NO_D.U_ILA/U_STAT/iSTATCMD_CE_n ), + .Q(\U0/I_NO_D.U_ILA/U_STAT/iSTAT_CNT [7]) + ); + FDRE #( + .INIT ( 1'b0 )) + \U0/I_NO_D.U_ILA/U_STAT/U_STAT_CNT/G[8].U_FDRE ( + .C(CONTROL[0]), + .CE(N1), + .D(\U0/I_NO_D.U_ILA/U_STAT/U_STAT_CNT/D [8]), + .R(\U0/I_NO_D.U_ILA/U_STAT/iSTATCMD_CE_n ), + .Q(\U0/I_NO_D.U_ILA/U_STAT/iSTAT_CNT [8]) + ); + FDRE #( + .INIT ( 1'b0 )) + \U0/I_NO_D.U_ILA/U_STAT/U_STAT_CNT/G[9].U_FDRE ( + .C(CONTROL[0]), + .CE(N1), + .D(\U0/I_NO_D.U_ILA/U_STAT/U_STAT_CNT/D [9]), + .R(\U0/I_NO_D.U_ILA/U_STAT/iSTATCMD_CE_n ), + .Q(\U0/I_NO_D.U_ILA/U_STAT/iSTAT_CNT [9]) + ); + FDP #( + .INIT ( 1'b1 )) + \U0/I_NO_D.U_ILA/U_RST/U_POR ( + .C(CLK), + .D(N0), + .PRE(N0), + .Q(\U0/I_NO_D.U_ILA/U_RST/POR ) + ); + FDS #( + .INIT ( 1'b1 )) + \U0/I_NO_D.U_ILA/U_RST/G_RST[0].U_RST ( + .C(CLK), + .D(\U0/I_NO_D.U_ILA/U_RST/iRESET [0]), + .S(\U0/I_NO_D.U_ILA/U_RST/PRE_RESET0 ), + .Q(\U0/I_NO_D.U_ILA/iRESET [0]) + ); + FDS #( + .INIT ( 1'b1 )) + \U0/I_NO_D.U_ILA/U_RST/G_RST[1].U_RST ( + .C(CLK), + .D(\U0/I_NO_D.U_ILA/iRESET [0]), + .S(\U0/I_NO_D.U_ILA/U_RST/PRE_RESET0 ), + .Q(\U0/I_NO_D.U_ILA/iRESET [1]) + ); + FDS #( + .INIT ( 1'b1 )) + \U0/I_NO_D.U_ILA/U_RST/G_RST[2].U_RST ( + .C(CLK), + .D(\U0/I_NO_D.U_ILA/iRESET [1]), + .S(\U0/I_NO_D.U_ILA/U_RST/PRE_RESET0 ), + .Q(\U0/I_NO_D.U_ILA/iRESET [2]) + ); + FDS #( + .INIT ( 1'b1 )) + \U0/I_NO_D.U_ILA/U_RST/G_RST[3].U_RST ( + .C(CLK), + .D(\U0/I_NO_D.U_ILA/iRESET [2]), + .S(\U0/I_NO_D.U_ILA/U_RST/PRE_RESET0 ), + .Q(\U0/I_NO_D.U_ILA/iRESET [3]) + ); + FDS #( + .INIT ( 1'b1 )) + \U0/I_NO_D.U_ILA/U_RST/G_RST[4].U_RST ( + .C(CLK), + .D(\U0/I_NO_D.U_ILA/iRESET [3]), + .S(\U0/I_NO_D.U_ILA/U_RST/PRE_RESET0 ), + .Q(\U0/I_NO_D.U_ILA/iRESET [4]) + ); + FDS #( + .INIT ( 1'b1 )) + \U0/I_NO_D.U_ILA/U_RST/G_RST[5].U_RST ( + .C(CLK), + .D(\U0/I_NO_D.U_ILA/iRESET [4]), + .S(\U0/I_NO_D.U_ILA/U_RST/PRE_RESET0 ), + .Q(\U0/I_NO_D.U_ILA/iRESET [5]) + ); + FDS #( + .INIT ( 1'b1 )) + \U0/I_NO_D.U_ILA/U_RST/G_RST[6].U_RST ( + .C(CLK), + .D(\U0/I_NO_D.U_ILA/iRESET [5]), + .S(\U0/I_NO_D.U_ILA/U_RST/PRE_RESET0 ), + .Q(\U0/I_NO_D.U_ILA/iRESET [6]) + ); + FDS #( + .INIT ( 1'b1 )) + \U0/I_NO_D.U_ILA/U_RST/G_RST[7].U_RST ( + .C(CLK), + .D(\U0/I_NO_D.U_ILA/iRESET [6]), + .S(\U0/I_NO_D.U_ILA/U_RST/PRE_RESET0 ), + .Q(\U0/I_NO_D.U_ILA/iRESET [7]) + ); + LUT3 #( + .INIT ( 8'hEF )) + \U0/I_NO_D.U_ILA/U_RST/U_PRST1 ( + .I0(\U0/I_NO_D.U_ILA/U_RST/HALT_pulse ), + .I1(\U0/I_NO_D.U_ILA/U_RST/POR ), + .I2(N1), + .O(\U0/I_NO_D.U_ILA/U_RST/PRE_RESET1 ) + ); + LUT4 #( + .INIT ( 16'hFFFE )) + \U0/I_NO_D.U_ILA/U_RST/U_PRST0 ( + .I0(N0), + .I1(\U0/I_NO_D.U_ILA/iCAP_DONE ), + .I2(N0), + .I3(\U0/I_NO_D.U_ILA/U_RST/PRE_RESET1 ), + .O(\U0/I_NO_D.U_ILA/U_RST/PRE_RESET0 ) + ); + LUT2 #( + .INIT ( 4'h4 )) + \U0/I_NO_D.U_ILA/U_RST/U_RST0 ( + .I0(\U0/I_NO_D.U_ILA/iARM ), + .I1(\U0/I_NO_D.U_ILA/iRESET [0]), + .O(\U0/I_NO_D.U_ILA/U_RST/iRESET [0]) + ); + LUT2 #( + .INIT ( 4'h2 )) + \U0/I_NO_D.U_ILA/U_RST/U_HALT_XFER/U_CLEAR ( + .I0(\U0/I_NO_D.U_ILA/U_RST/U_HALT_XFER/iDOUT_dly[2] ), + .I1(CONTROL[13]), + .O(\U0/I_NO_D.U_ILA/U_RST/U_HALT_XFER/iCLR ) + ); + FDE #( + .INIT ( 1'b0 )) + \U0/I_NO_D.U_ILA/U_RST/U_HALT_XFER/U_GEN_DELAY[2].U_FD ( + .C(CLK), + .CE(N1), + .D(\U0/I_NO_D.U_ILA/U_RST/HALT_pulse ), + .Q(\U0/I_NO_D.U_ILA/U_RST/U_HALT_XFER/iDOUT_dly[2] ) + ); + FDE #( + .INIT ( 1'b0 )) + \U0/I_NO_D.U_ILA/U_RST/U_HALT_XFER/U_GEN_DELAY[1].U_FD ( + .C(CLK), + .CE(N1), + .D(\U0/I_NO_D.U_ILA/U_RST/U_HALT_XFER/iDOUT_dly[0] ), + .Q(\U0/I_NO_D.U_ILA/U_RST/HALT_pulse ) + ); + FDCE #( + .INIT ( 1'b0 )) + \U0/I_NO_D.U_ILA/U_RST/U_HALT_XFER/U_RFDRE ( + .C(CLK), + .CE(\U0/I_NO_D.U_ILA/U_RST/U_HALT_XFER/iDOUT ), + .CLR(\U0/I_NO_D.U_ILA/U_RST/U_HALT_XFER/iCLR ), + .D(\U0/I_NO_D.U_ILA/U_RST/U_HALT_XFER/iDOUT ), + .Q(\U0/I_NO_D.U_ILA/U_RST/U_HALT_XFER/iDOUT_dly[0] ) + ); + FDR #( + .INIT ( 1'b0 )) + \U0/I_NO_D.U_ILA/U_RST/U_HALT_XFER/U_DOUT ( + .C(CLK), + .D(\U0/I_NO_D.U_ILA/U_RST/U_HALT_XFER/iDIN [0]), + .R(\U0/I_NO_D.U_ILA/U_RST/U_HALT_XFER/iDIN [1]), + .Q(\U0/I_NO_D.U_ILA/U_RST/U_HALT_XFER/iDOUT ) + ); + FDCE #( + .INIT ( 1'b0 )) + \U0/I_NO_D.U_ILA/U_RST/U_HALT_XFER/U_DOUT1 ( + .C(CLK), + .CE(N1), + .CLR(\U0/I_NO_D.U_ILA/U_RST/U_HALT_XFER/iCLR ), + .D(\U0/I_NO_D.U_ILA/U_RST/U_HALT_XFER/iDIN [0]), + .Q(\U0/I_NO_D.U_ILA/U_RST/U_HALT_XFER/iDIN [1]) + ); + FDCE #( + .INIT ( 1'b0 )) + \U0/I_NO_D.U_ILA/U_RST/U_HALT_XFER/U_DOUT0 ( + .C(CLK), + .CE(N1), + .CLR(\U0/I_NO_D.U_ILA/U_RST/U_HALT_XFER/iCLR ), + .D(\U0/I_NO_D.U_ILA/U_RST/U_HALT_XFER/din_latched ), + .Q(\U0/I_NO_D.U_ILA/U_RST/U_HALT_XFER/iDIN [0]) + ); + FDCE #( + .INIT ( 1'b0 )) + \U0/I_NO_D.U_ILA/U_RST/U_HALT_XFER/U_TFDRE ( + .C(CONTROL[0]), + .CE(CONTROL[13]), + .CLR(\U0/I_NO_D.U_ILA/U_RST/U_HALT_XFER/iCLR ), + .D(CONTROL[13]), + .Q(\U0/I_NO_D.U_ILA/U_RST/U_HALT_XFER/din_latched ) + ); + LUT2 #( + .INIT ( 4'h2 )) + \U0/I_NO_D.U_ILA/U_RST/U_ARM_XFER/U_CLEAR ( + .I0(\U0/I_NO_D.U_ILA/U_RST/U_ARM_XFER/iDOUT_dly[4] ), + .I1(CONTROL[12]), + .O(\U0/I_NO_D.U_ILA/U_RST/U_ARM_XFER/iCLR ) + ); + FDE #( + .INIT ( 1'b0 )) + \U0/I_NO_D.U_ILA/U_RST/U_ARM_XFER/U_GEN_DELAY[4].U_FD ( + .C(CLK), + .CE(N1), + .D(\U0/I_NO_D.U_ILA/iARM ), + .Q(\U0/I_NO_D.U_ILA/U_RST/U_ARM_XFER/iDOUT_dly[4] ) + ); + FDE #( + .INIT ( 1'b0 )) + \U0/I_NO_D.U_ILA/U_RST/U_ARM_XFER/U_GEN_DELAY[3].U_FD ( + .C(CLK), + .CE(N1), + .D(\U0/I_NO_D.U_ILA/U_RST/U_ARM_XFER/iDOUT_dly[2] ), + .Q(\U0/I_NO_D.U_ILA/iARM ) + ); + FDE #( + .INIT ( 1'b0 )) + \U0/I_NO_D.U_ILA/U_RST/U_ARM_XFER/U_GEN_DELAY[2].U_FD ( + .C(CLK), + .CE(N1), + .D(\U0/I_NO_D.U_ILA/U_RST/U_ARM_XFER/iDOUT_dly[1] ), + .Q(\U0/I_NO_D.U_ILA/U_RST/U_ARM_XFER/iDOUT_dly[2] ) + ); + FDE #( + .INIT ( 1'b0 )) + \U0/I_NO_D.U_ILA/U_RST/U_ARM_XFER/U_GEN_DELAY[1].U_FD ( + .C(CLK), + .CE(N1), + .D(\U0/I_NO_D.U_ILA/U_RST/U_ARM_XFER/iDOUT_dly[0] ), + .Q(\U0/I_NO_D.U_ILA/U_RST/U_ARM_XFER/iDOUT_dly[1] ) + ); + FDCE #( + .INIT ( 1'b0 )) + \U0/I_NO_D.U_ILA/U_RST/U_ARM_XFER/U_RFDRE ( + .C(CLK), + .CE(\U0/I_NO_D.U_ILA/U_RST/U_ARM_XFER/iDOUT ), + .CLR(\U0/I_NO_D.U_ILA/U_RST/U_ARM_XFER/iCLR ), + .D(\U0/I_NO_D.U_ILA/U_RST/U_ARM_XFER/iDOUT ), + .Q(\U0/I_NO_D.U_ILA/U_RST/U_ARM_XFER/iDOUT_dly[0] ) + ); + FDR #( + .INIT ( 1'b0 )) + \U0/I_NO_D.U_ILA/U_RST/U_ARM_XFER/U_DOUT ( + .C(CLK), + .D(\U0/I_NO_D.U_ILA/U_RST/U_ARM_XFER/iDIN [0]), + .R(\U0/I_NO_D.U_ILA/U_RST/U_ARM_XFER/iDIN [1]), + .Q(\U0/I_NO_D.U_ILA/U_RST/U_ARM_XFER/iDOUT ) + ); + FDCE #( + .INIT ( 1'b0 )) + \U0/I_NO_D.U_ILA/U_RST/U_ARM_XFER/U_DOUT1 ( + .C(CLK), + .CE(N1), + .CLR(\U0/I_NO_D.U_ILA/U_RST/U_ARM_XFER/iCLR ), + .D(\U0/I_NO_D.U_ILA/U_RST/U_ARM_XFER/iDIN [0]), + .Q(\U0/I_NO_D.U_ILA/U_RST/U_ARM_XFER/iDIN [1]) + ); + FDCE #( + .INIT ( 1'b0 )) + \U0/I_NO_D.U_ILA/U_RST/U_ARM_XFER/U_DOUT0 ( + .C(CLK), + .CE(N1), + .CLR(\U0/I_NO_D.U_ILA/U_RST/U_ARM_XFER/iCLR ), + .D(\U0/I_NO_D.U_ILA/U_RST/U_ARM_XFER/din_latched ), + .Q(\U0/I_NO_D.U_ILA/U_RST/U_ARM_XFER/iDIN [0]) + ); + FDCE #( + .INIT ( 1'b0 )) + \U0/I_NO_D.U_ILA/U_RST/U_ARM_XFER/U_TFDRE ( + .C(CONTROL[0]), + .CE(CONTROL[12]), + .CLR(\U0/I_NO_D.U_ILA/U_RST/U_ARM_XFER/iCLR ), + .D(CONTROL[12]), + .Q(\U0/I_NO_D.U_ILA/U_RST/U_ARM_XFER/din_latched ) + ); + FDRE #( + .INIT ( 1'b0 )) + \U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.I_RDADDR/U_HC/G[13].U_FDRE ( + .C(CONTROL[0]), + .CE(CONTROL[6]), + .D(\U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.I_RDADDR/U_HC/D [13]), + .R(CONTROL[14]), + .Q(\U0/I_NO_D.U_ILA/U_CAPSTOR/RD_ADDR [13]) + ); + FDRE #( + .INIT ( 1'b0 )) + \U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.I_RDADDR/U_HC/G[12].U_FDRE ( + .C(CONTROL[0]), + .CE(CONTROL[6]), + .D(\U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.I_RDADDR/U_HC/D [12]), + .R(CONTROL[14]), + .Q(\U0/I_NO_D.U_ILA/U_CAPSTOR/RD_ADDR [12]) + ); + FDRE #( + .INIT ( 1'b0 )) + \U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.I_RDADDR/U_HC/G[11].U_FDRE ( + .C(CONTROL[0]), + .CE(CONTROL[6]), + .D(\U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.I_RDADDR/U_HC/D [11]), + .R(CONTROL[14]), + .Q(\U0/I_NO_D.U_ILA/U_CAPSTOR/RD_ADDR [11]) + ); + FDRE #( + .INIT ( 1'b0 )) + \U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.I_RDADDR/U_HC/G[10].U_FDRE ( + .C(CONTROL[0]), + .CE(CONTROL[6]), + .D(\U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.I_RDADDR/U_HC/D [10]), + .R(CONTROL[14]), + .Q(\U0/I_NO_D.U_ILA/U_CAPSTOR/RD_ADDR [10]) + ); + FDRE #( + .INIT ( 1'b0 )) + \U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.I_RDADDR/U_HC/G[9].U_FDRE ( + .C(CONTROL[0]), + .CE(CONTROL[6]), + .D(\U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.I_RDADDR/U_HC/D [9]), + .R(CONTROL[14]), + .Q(\U0/I_NO_D.U_ILA/U_CAPSTOR/RD_ADDR [9]) + ); + FDRE #( + .INIT ( 1'b0 )) + \U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.I_RDADDR/U_HC/G[8].U_FDRE ( + .C(CONTROL[0]), + .CE(CONTROL[6]), + .D(\U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.I_RDADDR/U_HC/D [8]), + .R(CONTROL[14]), + .Q(\U0/I_NO_D.U_ILA/U_CAPSTOR/RD_ADDR [8]) + ); + FDRE #( + .INIT ( 1'b0 )) + \U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.I_RDADDR/U_HC/G[7].U_FDRE ( + .C(CONTROL[0]), + .CE(CONTROL[6]), + .D(\U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.I_RDADDR/U_HC/D [7]), + .R(CONTROL[14]), + .Q(\U0/I_NO_D.U_ILA/U_CAPSTOR/RD_ADDR [7]) + ); + FDRE #( + .INIT ( 1'b0 )) + \U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.I_RDADDR/U_HC/G[6].U_FDRE ( + .C(CONTROL[0]), + .CE(CONTROL[6]), + .D(\U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.I_RDADDR/U_HC/D [6]), + .R(CONTROL[14]), + .Q(\U0/I_NO_D.U_ILA/U_CAPSTOR/RD_ADDR [6]) + ); + FDRE #( + .INIT ( 1'b0 )) + \U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.I_RDADDR/U_HC/G[5].U_FDRE ( + .C(CONTROL[0]), + .CE(CONTROL[6]), + .D(\U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.I_RDADDR/U_HC/D [5]), + .R(CONTROL[14]), + .Q(\U0/I_NO_D.U_ILA/U_CAPSTOR/RD_ADDR [5]) + ); + FDRE #( + .INIT ( 1'b0 )) + \U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.I_RDADDR/U_HC/G[4].U_FDRE ( + .C(CONTROL[0]), + .CE(CONTROL[6]), + .D(\U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.I_RDADDR/U_HC/D [4]), + .R(CONTROL[14]), + .Q(\U0/I_NO_D.U_ILA/U_CAPSTOR/RD_ADDR [4]) + ); + FDRE #( + .INIT ( 1'b0 )) + \U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.I_RDADDR/U_HC/G[3].U_FDRE ( + .C(CONTROL[0]), + .CE(CONTROL[6]), + .D(\U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.I_RDADDR/U_HC/D [3]), + .R(CONTROL[14]), + .Q(\U0/I_NO_D.U_ILA/U_CAPSTOR/RD_ADDR [3]) + ); + FDRE #( + .INIT ( 1'b0 )) + \U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.I_RDADDR/U_HC/G[2].U_FDRE ( + .C(CONTROL[0]), + .CE(CONTROL[6]), + .D(\U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.I_RDADDR/U_HC/D [2]), + .R(CONTROL[14]), + .Q(\U0/I_NO_D.U_ILA/U_CAPSTOR/RD_ADDR [2]) + ); + FDRE #( + .INIT ( 1'b0 )) + \U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.I_RDADDR/U_HC/G[1].U_FDRE ( + .C(CONTROL[0]), + .CE(CONTROL[6]), + .D(\U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.I_RDADDR/U_HC/D [1]), + .R(CONTROL[14]), + .Q(\U0/I_NO_D.U_ILA/U_CAPSTOR/RD_ADDR [1]) + ); + FDRE #( + .INIT ( 1'b0 )) + \U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.I_RDADDR/U_HC/G[0].U_FDRE ( + .C(CONTROL[0]), + .CE(CONTROL[6]), + .D(\U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.I_RDADDR/U_HC/D [0]), + .R(CONTROL[14]), + .Q(\U0/I_NO_D.U_ILA/U_CAPSTOR/RD_ADDR [0]) + ); + LUT1 #( + .INIT ( 2'h2 )) + \U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.I_RDADDR/U_HC/G[13].U_LUT ( + .I0(\U0/I_NO_D.U_ILA/U_CAPSTOR/RD_ADDR [13]), + .O(\U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.I_RDADDR/U_HC/S [13]) + ); + XORCY \U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.I_RDADDR/U_HC/G[13].U_XORCY ( + .CI(\U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.I_RDADDR/U_HC/CI [13]), + .LI(\U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.I_RDADDR/U_HC/S [13]), + .O(\U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.I_RDADDR/U_HC/D [13]) + ); + LUT1 #( + .INIT ( 2'h2 )) + \U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.I_RDADDR/U_HC/G[12].U_LUT ( + .I0(\U0/I_NO_D.U_ILA/U_CAPSTOR/RD_ADDR [12]), + .O(\U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.I_RDADDR/U_HC/S [12]) + ); + MUXCY_L \U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.I_RDADDR/U_HC/G[12].GnH.U_MUXCY ( + .CI(\U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.I_RDADDR/U_HC/CI [12]), + .DI(N0), + .S(\U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.I_RDADDR/U_HC/S [12]), + .LO(\U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.I_RDADDR/U_HC/CI [13]) + ); + XORCY \U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.I_RDADDR/U_HC/G[12].U_XORCY ( + .CI(\U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.I_RDADDR/U_HC/CI [12]), + .LI(\U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.I_RDADDR/U_HC/S [12]), + .O(\U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.I_RDADDR/U_HC/D [12]) + ); + LUT1 #( + .INIT ( 2'h2 )) + \U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.I_RDADDR/U_HC/G[11].U_LUT ( + .I0(\U0/I_NO_D.U_ILA/U_CAPSTOR/RD_ADDR [11]), + .O(\U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.I_RDADDR/U_HC/S [11]) + ); + MUXCY_L \U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.I_RDADDR/U_HC/G[11].GnH.U_MUXCY ( + .CI(\U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.I_RDADDR/U_HC/CI [11]), + .DI(N0), + .S(\U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.I_RDADDR/U_HC/S [11]), + .LO(\U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.I_RDADDR/U_HC/CI [12]) + ); + XORCY \U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.I_RDADDR/U_HC/G[11].U_XORCY ( + .CI(\U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.I_RDADDR/U_HC/CI [11]), + .LI(\U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.I_RDADDR/U_HC/S [11]), + .O(\U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.I_RDADDR/U_HC/D [11]) + ); + LUT1 #( + .INIT ( 2'h2 )) + \U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.I_RDADDR/U_HC/G[10].U_LUT ( + .I0(\U0/I_NO_D.U_ILA/U_CAPSTOR/RD_ADDR [10]), + .O(\U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.I_RDADDR/U_HC/S [10]) + ); + MUXCY_L \U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.I_RDADDR/U_HC/G[10].GnH.U_MUXCY ( + .CI(\U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.I_RDADDR/U_HC/CI [10]), + .DI(N0), + .S(\U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.I_RDADDR/U_HC/S [10]), + .LO(\U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.I_RDADDR/U_HC/CI [11]) + ); + XORCY \U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.I_RDADDR/U_HC/G[10].U_XORCY ( + .CI(\U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.I_RDADDR/U_HC/CI [10]), + .LI(\U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.I_RDADDR/U_HC/S [10]), + .O(\U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.I_RDADDR/U_HC/D [10]) + ); + LUT1 #( + .INIT ( 2'h2 )) + \U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.I_RDADDR/U_HC/G[9].U_LUT ( + .I0(\U0/I_NO_D.U_ILA/U_CAPSTOR/RD_ADDR [9]), + .O(\U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.I_RDADDR/U_HC/S [9]) + ); + MUXCY_L \U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.I_RDADDR/U_HC/G[9].GnH.U_MUXCY ( + .CI(\U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.I_RDADDR/U_HC/CI [9]), + .DI(N0), + .S(\U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.I_RDADDR/U_HC/S [9]), + .LO(\U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.I_RDADDR/U_HC/CI [10]) + ); + XORCY \U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.I_RDADDR/U_HC/G[9].U_XORCY ( + .CI(\U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.I_RDADDR/U_HC/CI [9]), + .LI(\U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.I_RDADDR/U_HC/S [9]), + .O(\U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.I_RDADDR/U_HC/D [9]) + ); + LUT1 #( + .INIT ( 2'h2 )) + \U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.I_RDADDR/U_HC/G[8].U_LUT ( + .I0(\U0/I_NO_D.U_ILA/U_CAPSTOR/RD_ADDR [8]), + .O(\U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.I_RDADDR/U_HC/S [8]) + ); + MUXCY_L \U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.I_RDADDR/U_HC/G[8].GnH.U_MUXCY ( + .CI(\U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.I_RDADDR/U_HC/CI [8]), + .DI(N0), + .S(\U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.I_RDADDR/U_HC/S [8]), + .LO(\U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.I_RDADDR/U_HC/CI [9]) + ); + XORCY \U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.I_RDADDR/U_HC/G[8].U_XORCY ( + .CI(\U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.I_RDADDR/U_HC/CI [8]), + .LI(\U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.I_RDADDR/U_HC/S [8]), + .O(\U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.I_RDADDR/U_HC/D [8]) + ); + LUT1 #( + .INIT ( 2'h2 )) + \U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.I_RDADDR/U_HC/G[7].U_LUT ( + .I0(\U0/I_NO_D.U_ILA/U_CAPSTOR/RD_ADDR [7]), + .O(\U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.I_RDADDR/U_HC/S [7]) + ); + MUXCY_L \U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.I_RDADDR/U_HC/G[7].GnH.U_MUXCY ( + .CI(\U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.I_RDADDR/U_HC/CI [7]), + .DI(N0), + .S(\U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.I_RDADDR/U_HC/S [7]), + .LO(\U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.I_RDADDR/U_HC/CI [8]) + ); + XORCY \U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.I_RDADDR/U_HC/G[7].U_XORCY ( + .CI(\U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.I_RDADDR/U_HC/CI [7]), + .LI(\U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.I_RDADDR/U_HC/S [7]), + .O(\U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.I_RDADDR/U_HC/D [7]) + ); + LUT1 #( + .INIT ( 2'h2 )) + \U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.I_RDADDR/U_HC/G[6].U_LUT ( + .I0(\U0/I_NO_D.U_ILA/U_CAPSTOR/RD_ADDR [6]), + .O(\U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.I_RDADDR/U_HC/S [6]) + ); + MUXCY_L \U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.I_RDADDR/U_HC/G[6].GnH.U_MUXCY ( + .CI(\U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.I_RDADDR/U_HC/CI [6]), + .DI(N0), + .S(\U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.I_RDADDR/U_HC/S [6]), + .LO(\U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.I_RDADDR/U_HC/CI [7]) + ); + XORCY \U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.I_RDADDR/U_HC/G[6].U_XORCY ( + .CI(\U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.I_RDADDR/U_HC/CI [6]), + .LI(\U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.I_RDADDR/U_HC/S [6]), + .O(\U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.I_RDADDR/U_HC/D [6]) + ); + LUT1 #( + .INIT ( 2'h2 )) + \U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.I_RDADDR/U_HC/G[5].U_LUT ( + .I0(\U0/I_NO_D.U_ILA/U_CAPSTOR/RD_ADDR [5]), + .O(\U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.I_RDADDR/U_HC/S [5]) + ); + MUXCY_L \U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.I_RDADDR/U_HC/G[5].GnH.U_MUXCY ( + .CI(\U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.I_RDADDR/U_HC/CI [5]), + .DI(N0), + .S(\U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.I_RDADDR/U_HC/S [5]), + .LO(\U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.I_RDADDR/U_HC/CI [6]) + ); + XORCY \U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.I_RDADDR/U_HC/G[5].U_XORCY ( + .CI(\U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.I_RDADDR/U_HC/CI [5]), + .LI(\U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.I_RDADDR/U_HC/S [5]), + .O(\U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.I_RDADDR/U_HC/D [5]) + ); + LUT1 #( + .INIT ( 2'h2 )) + \U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.I_RDADDR/U_HC/G[4].U_LUT ( + .I0(\U0/I_NO_D.U_ILA/U_CAPSTOR/RD_ADDR [4]), + .O(\U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.I_RDADDR/U_HC/S [4]) + ); + MUXCY_L \U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.I_RDADDR/U_HC/G[4].GnH.U_MUXCY ( + .CI(\U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.I_RDADDR/U_HC/CI [4]), + .DI(N0), + .S(\U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.I_RDADDR/U_HC/S [4]), + .LO(\U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.I_RDADDR/U_HC/CI [5]) + ); + XORCY \U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.I_RDADDR/U_HC/G[4].U_XORCY ( + .CI(\U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.I_RDADDR/U_HC/CI [4]), + .LI(\U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.I_RDADDR/U_HC/S [4]), + .O(\U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.I_RDADDR/U_HC/D [4]) + ); + LUT1 #( + .INIT ( 2'h2 )) + \U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.I_RDADDR/U_HC/G[3].U_LUT ( + .I0(\U0/I_NO_D.U_ILA/U_CAPSTOR/RD_ADDR [3]), + .O(\U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.I_RDADDR/U_HC/S [3]) + ); + MUXCY_L \U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.I_RDADDR/U_HC/G[3].GnH.U_MUXCY ( + .CI(\U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.I_RDADDR/U_HC/CI [3]), + .DI(N0), + .S(\U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.I_RDADDR/U_HC/S [3]), + .LO(\U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.I_RDADDR/U_HC/CI [4]) + ); + XORCY \U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.I_RDADDR/U_HC/G[3].U_XORCY ( + .CI(\U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.I_RDADDR/U_HC/CI [3]), + .LI(\U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.I_RDADDR/U_HC/S [3]), + .O(\U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.I_RDADDR/U_HC/D [3]) + ); + LUT1 #( + .INIT ( 2'h2 )) + \U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.I_RDADDR/U_HC/G[2].U_LUT ( + .I0(\U0/I_NO_D.U_ILA/U_CAPSTOR/RD_ADDR [2]), + .O(\U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.I_RDADDR/U_HC/S [2]) + ); + MUXCY_L \U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.I_RDADDR/U_HC/G[2].GnH.U_MUXCY ( + .CI(\U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.I_RDADDR/U_HC/CI [2]), + .DI(N0), + .S(\U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.I_RDADDR/U_HC/S [2]), + .LO(\U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.I_RDADDR/U_HC/CI [3]) + ); + XORCY \U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.I_RDADDR/U_HC/G[2].U_XORCY ( + .CI(\U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.I_RDADDR/U_HC/CI [2]), + .LI(\U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.I_RDADDR/U_HC/S [2]), + .O(\U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.I_RDADDR/U_HC/D [2]) + ); + LUT1 #( + .INIT ( 2'h2 )) + \U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.I_RDADDR/U_HC/G[1].U_LUT ( + .I0(\U0/I_NO_D.U_ILA/U_CAPSTOR/RD_ADDR [1]), + .O(\U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.I_RDADDR/U_HC/S [1]) + ); + MUXCY_L \U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.I_RDADDR/U_HC/G[1].GnH.U_MUXCY ( + .CI(\U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.I_RDADDR/U_HC/CI [1]), + .DI(N0), + .S(\U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.I_RDADDR/U_HC/S [1]), + .LO(\U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.I_RDADDR/U_HC/CI [2]) + ); + XORCY \U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.I_RDADDR/U_HC/G[1].U_XORCY ( + .CI(\U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.I_RDADDR/U_HC/CI [1]), + .LI(\U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.I_RDADDR/U_HC/S [1]), + .O(\U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.I_RDADDR/U_HC/D [1]) + ); + LUT1 #( + .INIT ( 2'h2 )) + \U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.I_RDADDR/U_HC/G[0].U_LUT ( + .I0(\U0/I_NO_D.U_ILA/U_CAPSTOR/RD_ADDR [0]), + .O(\U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.I_RDADDR/U_HC/S [0]) + ); + MUXCY_L \U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.I_RDADDR/U_HC/G[0].GnH.U_MUXCY ( + .CI(N1), + .DI(N0), + .S(\U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.I_RDADDR/U_HC/S [0]), + .LO(\U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.I_RDADDR/U_HC/CI [1]) + ); + XORCY \U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.I_RDADDR/U_HC/G[0].U_XORCY ( + .CI(N1), + .LI(\U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.I_RDADDR/U_HC/S [0]), + .O(\U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.I_RDADDR/U_HC/D [0]) + ); + FDPE #( + .INIT ( 1'b1 )) + \U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[3].U_M/U_MU/I_MUT_GAND.U_match/I_SRL16.U_GAND_SRL16/I_YES_IREG.F_TW[0].U_IREG ( + .C(CLK), + .CE(N1), + .D(\U0/iTRIG_IN [24]), + .PRE(CONTROL[23]), + .Q(\U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[3].U_M/U_MU/I_MUT_GAND.U_match/I_SRL16.U_GAND_SRL16/din_dly1<0> ) + ); + FDPE #( + .INIT ( 1'b1 )) + \U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[3].U_M/U_MU/I_MUT_GAND.U_match/I_SRL16.U_GAND_SRL16/I_YES_IREG.F_TW[1].U_IREG ( + .C(CLK), + .CE(N1), + .D(\U0/iTRIG_IN [25]), + .PRE(CONTROL[23]), + .Q(\U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[3].U_M/U_MU/I_MUT_GAND.U_match/I_SRL16.U_GAND_SRL16/din_dly1<1> ) + ); + FDPE #( + .INIT ( 1'b1 )) + \U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[3].U_M/U_MU/I_MUT_GAND.U_match/I_SRL16.U_GAND_SRL16/I_YES_IREG.F_TW[2].U_IREG ( + .C(CLK), + .CE(N1), + .D(\U0/iTRIG_IN [26]), + .PRE(CONTROL[23]), + .Q(\U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[3].U_M/U_MU/I_MUT_GAND.U_match/I_SRL16.U_GAND_SRL16/din_dly1<2> ) + ); + FDPE #( + .INIT ( 1'b1 )) + \U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[3].U_M/U_MU/I_MUT_GAND.U_match/I_SRL16.U_GAND_SRL16/I_YES_IREG.F_TW[3].U_IREG ( + .C(CLK), + .CE(N1), + .D(\U0/iTRIG_IN [27]), + .PRE(CONTROL[23]), + .Q(\U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[3].U_M/U_MU/I_MUT_GAND.U_match/I_SRL16.U_GAND_SRL16/din_dly1<3> ) + ); + FDS #( + .INIT ( 1'b1 )) + \U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[3].U_M/U_MU/I_MUT_GAND.U_match/I_SRL16.U_GAND_SRL16/I_TWMOD8_NE0.I_YES_RPM.I_OREG.U_OREG ( + .C(CLK), + .D(\U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[3].U_M/U_MU/I_MUT_GAND.U_match/I_SRL16.U_GAND_SRL16/tmpCompData<2> ), + .S(\U0/I_NO_D.U_ILA/iRESET [0]), + .Q(\U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[3].U_M/U_MU/DOUT_tmp ) + ); + SRLC16E #( + .INIT ( 16'h0000 )) + \U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[3].U_M/U_MU/I_MUT_GAND.U_match/I_SRL16.U_GAND_SRL16/I_TWMOD8_NE0.I_YES_RPM.I_SRLT_EQ_2.U_SRLH ( + .A0(N1), + .A1(N1), + .A2(N1), + .A3(N1), + .CE(CONTROL[23]), + .CLK(CONTROL[0]), + .D(CONTROL[1]), + .Q(\U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[3].U_M/U_MU/I_MUT_GAND.U_match/I_SRL16.U_GAND_SRL16/sel<4> ), + .Q15(\U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[3].U_M/U_MU/I_MUT_GAND.U_match/I_SRL16.U_GAND_SRL16/tmpCfgData ) + ); + SRLC16E #( + .INIT ( 16'h0000 )) + \U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[3].U_M/U_MU/I_MUT_GAND.U_match/I_SRL16.U_GAND_SRL16/I_TWMOD8_NE0.I_YES_RPM.I_SRLT_EQ_2.U_SRLL ( + .A0(\U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[3].U_M/U_MU/I_MUT_GAND.U_match/I_SRL16.U_GAND_SRL16/din_dly1<0> ), + .A1(\U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[3].U_M/U_MU/I_MUT_GAND.U_match/I_SRL16.U_GAND_SRL16/din_dly1<1> ), + .A2(\U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[3].U_M/U_MU/I_MUT_GAND.U_match/I_SRL16.U_GAND_SRL16/din_dly1<2> ), + .A3(\U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[3].U_M/U_MU/I_MUT_GAND.U_match/I_SRL16.U_GAND_SRL16/din_dly1<3> ), + .CE(CONTROL[23]), + .CLK(CONTROL[0]), + .D(\U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[3].U_M/U_MU/I_MUT_GAND.U_match/I_SRL16.U_GAND_SRL16/tmpCfgData ), + .Q(\U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[3].U_M/U_MU/I_MUT_GAND.U_match/I_SRL16.U_GAND_SRL16/sel<3> ), + .Q15 +(\NLW_U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[3].U_M/U_MU/I_MUT_GAND.U_match/I_SRL16.U_GAND_SRL16/I_TWMOD8_NE0.I_YES_RPM.I_SRLT_EQ_2.U_SRLL_Q15_UNCONNECTED ) + + ); + MUXCY_L \U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[3].U_M/U_MU/I_MUT_GAND.U_match/I_SRL16.U_GAND_SRL16/I_TWMOD8_NE0.I_YES_RPM.I_YES_MUXH.U_MUXH ( + .CI(\U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[3].U_M/U_MU/I_MUT_GAND.U_match/I_SRL16.U_GAND_SRL16/tmpCompData<0> ), + .DI(N0), + .S(\U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[3].U_M/U_MU/I_MUT_GAND.U_match/I_SRL16.U_GAND_SRL16/sel<4> ), + .LO(\U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[3].U_M/U_MU/I_MUT_GAND.U_match/I_SRL16.U_GAND_SRL16/tmpCompData<2> ) + ); + MUXCY_L \U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[3].U_M/U_MU/I_MUT_GAND.U_match/I_SRL16.U_GAND_SRL16/I_TWMOD8_NE0.I_YES_RPM.U_MUXL ( + .CI(N1), + .DI(N0), + .S(\U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[3].U_M/U_MU/I_MUT_GAND.U_match/I_SRL16.U_GAND_SRL16/sel<3> ), + .LO(\U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[3].U_M/U_MU/I_MUT_GAND.U_match/I_SRL16.U_GAND_SRL16/tmpCompData<0> ) + ); + FDPE #( + .INIT ( 1'b1 )) + \U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[0].U_M/U_MU/I_MUT_GAND.U_match/I_SRL16.U_GAND_SRL16/I_YES_IREG.F_TW[0].U_IREG ( + .C(CLK), + .CE(N1), + .D(\U0/iTRIG_IN [0]), + .PRE(CONTROL[20]), + .Q(\U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[0].U_M/U_MU/I_MUT_GAND.U_match/I_SRL16.U_GAND_SRL16/din_dly1<0> ) + ); + FDPE #( + .INIT ( 1'b1 )) + \U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[0].U_M/U_MU/I_MUT_GAND.U_match/I_SRL16.U_GAND_SRL16/I_YES_IREG.F_TW[1].U_IREG ( + .C(CLK), + .CE(N1), + .D(\U0/iTRIG_IN [1]), + .PRE(CONTROL[20]), + .Q(\U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[0].U_M/U_MU/I_MUT_GAND.U_match/I_SRL16.U_GAND_SRL16/din_dly1<1> ) + ); + FDPE #( + .INIT ( 1'b1 )) + \U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[0].U_M/U_MU/I_MUT_GAND.U_match/I_SRL16.U_GAND_SRL16/I_YES_IREG.F_TW[2].U_IREG ( + .C(CLK), + .CE(N1), + .D(\U0/iTRIG_IN [2]), + .PRE(CONTROL[20]), + .Q(\U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[0].U_M/U_MU/I_MUT_GAND.U_match/I_SRL16.U_GAND_SRL16/din_dly1<2> ) + ); + FDPE #( + .INIT ( 1'b1 )) + \U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[0].U_M/U_MU/I_MUT_GAND.U_match/I_SRL16.U_GAND_SRL16/I_YES_IREG.F_TW[3].U_IREG ( + .C(CLK), + .CE(N1), + .D(\U0/iTRIG_IN [3]), + .PRE(CONTROL[20]), + .Q(\U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[0].U_M/U_MU/I_MUT_GAND.U_match/I_SRL16.U_GAND_SRL16/din_dly1<3> ) + ); + FDPE #( + .INIT ( 1'b1 )) + \U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[0].U_M/U_MU/I_MUT_GAND.U_match/I_SRL16.U_GAND_SRL16/I_YES_IREG.F_TW[4].U_IREG ( + .C(CLK), + .CE(N1), + .D(\U0/iTRIG_IN [4]), + .PRE(CONTROL[20]), + .Q(\U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[0].U_M/U_MU/I_MUT_GAND.U_match/I_SRL16.U_GAND_SRL16/din_dly1<4> ) + ); + FDPE #( + .INIT ( 1'b1 )) + \U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[0].U_M/U_MU/I_MUT_GAND.U_match/I_SRL16.U_GAND_SRL16/I_YES_IREG.F_TW[5].U_IREG ( + .C(CLK), + .CE(N1), + .D(\U0/iTRIG_IN [5]), + .PRE(CONTROL[20]), + .Q(\U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[0].U_M/U_MU/I_MUT_GAND.U_match/I_SRL16.U_GAND_SRL16/din_dly1<5> ) + ); + FDPE #( + .INIT ( 1'b1 )) + \U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[0].U_M/U_MU/I_MUT_GAND.U_match/I_SRL16.U_GAND_SRL16/I_YES_IREG.F_TW[6].U_IREG ( + .C(CLK), + .CE(N1), + .D(\U0/iTRIG_IN [6]), + .PRE(CONTROL[20]), + .Q(\U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[0].U_M/U_MU/I_MUT_GAND.U_match/I_SRL16.U_GAND_SRL16/din_dly1<6> ) + ); + FDPE #( + .INIT ( 1'b1 )) + \U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[0].U_M/U_MU/I_MUT_GAND.U_match/I_SRL16.U_GAND_SRL16/I_YES_IREG.F_TW[7].U_IREG ( + .C(CLK), + .CE(N1), + .D(\U0/iTRIG_IN [7]), + .PRE(CONTROL[20]), + .Q(\U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[0].U_M/U_MU/I_MUT_GAND.U_match/I_SRL16.U_GAND_SRL16/din_dly1<7> ) + ); + FDS #( + .INIT ( 1'b1 )) + \U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[0].U_M/U_MU/I_MUT_GAND.U_match/I_SRL16.U_GAND_SRL16/I_TW_GTE8.F_TW[0].I_YES_RPM.I_OREG.U_OREG ( + .C(CLK), + .D(\U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[0].U_M/U_MU/I_MUT_GAND.U_match/I_SRL16.U_GAND_SRL16/tmpCompData<2> ), + .S(\U0/I_NO_D.U_ILA/iRESET [0]), + .Q(\U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[0].U_M/U_MU/DOUT_tmp ) + ); + SRLC16E #( + .INIT ( 16'h0000 )) + \U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[0].U_M/U_MU/I_MUT_GAND.U_match/I_SRL16.U_GAND_SRL16/I_TW_GTE8.F_TW[0].I_YES_RPM.I_SRLT_EQ_2.U_SRLH ( + .A0(\U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[0].U_M/U_MU/I_MUT_GAND.U_match/I_SRL16.U_GAND_SRL16/din_dly1<4> ), + .A1(\U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[0].U_M/U_MU/I_MUT_GAND.U_match/I_SRL16.U_GAND_SRL16/din_dly1<5> ), + .A2(\U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[0].U_M/U_MU/I_MUT_GAND.U_match/I_SRL16.U_GAND_SRL16/din_dly1<6> ), + .A3(\U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[0].U_M/U_MU/I_MUT_GAND.U_match/I_SRL16.U_GAND_SRL16/din_dly1<7> ), + .CE(CONTROL[20]), + .CLK(CONTROL[0]), + .D(CONTROL[1]), + .Q(\U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[0].U_M/U_MU/I_MUT_GAND.U_match/I_SRL16.U_GAND_SRL16/sel<1> ), + .Q15(\U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[0].U_M/U_MU/I_MUT_GAND.U_match/I_SRL16.U_GAND_SRL16/tmpCfgData ) + ); + SRLC16E #( + .INIT ( 16'h0000 )) + \U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[0].U_M/U_MU/I_MUT_GAND.U_match/I_SRL16.U_GAND_SRL16/I_TW_GTE8.F_TW[0].I_YES_RPM.I_SRLT_EQ_2.U_SRLL ( + .A0(\U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[0].U_M/U_MU/I_MUT_GAND.U_match/I_SRL16.U_GAND_SRL16/din_dly1<0> ), + .A1(\U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[0].U_M/U_MU/I_MUT_GAND.U_match/I_SRL16.U_GAND_SRL16/din_dly1<1> ), + .A2(\U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[0].U_M/U_MU/I_MUT_GAND.U_match/I_SRL16.U_GAND_SRL16/din_dly1<2> ), + .A3(\U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[0].U_M/U_MU/I_MUT_GAND.U_match/I_SRL16.U_GAND_SRL16/din_dly1<3> ), + .CE(CONTROL[20]), + .CLK(CONTROL[0]), + .D(\U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[0].U_M/U_MU/I_MUT_GAND.U_match/I_SRL16.U_GAND_SRL16/tmpCfgData ), + .Q(\U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[0].U_M/U_MU/I_MUT_GAND.U_match/I_SRL16.U_GAND_SRL16/sel<0> ), + .Q15 +(\NLW_U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[0].U_M/U_MU/I_MUT_GAND.U_match/I_SRL16.U_GAND_SRL16/I_TW_GTE8.F_TW[0].I_YES_RPM.I_SRLT_EQ_2.U_SRLL_Q15_UNCONNECTED ) + + ); + MUXCY_L \U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[0].U_M/U_MU/I_MUT_GAND.U_match/I_SRL16.U_GAND_SRL16/I_TW_GTE8.F_TW[0].I_YES_RPM.U_MUXH ( + .CI(\U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[0].U_M/U_MU/I_MUT_GAND.U_match/I_SRL16.U_GAND_SRL16/tmpCompData<0> ), + .DI(N0), + .S(\U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[0].U_M/U_MU/I_MUT_GAND.U_match/I_SRL16.U_GAND_SRL16/sel<1> ), + .LO(\U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[0].U_M/U_MU/I_MUT_GAND.U_match/I_SRL16.U_GAND_SRL16/tmpCompData<1> ) + ); + MUXCY_L \U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[0].U_M/U_MU/I_MUT_GAND.U_match/I_SRL16.U_GAND_SRL16/I_TW_GTE8.F_TW[0].I_YES_RPM.U_MUXL ( + .CI(N1), + .DI(N0), + .S(\U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[0].U_M/U_MU/I_MUT_GAND.U_match/I_SRL16.U_GAND_SRL16/sel<0> ), + .LO(\U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[0].U_M/U_MU/I_MUT_GAND.U_match/I_SRL16.U_GAND_SRL16/tmpCompData<0> ) + ); + XORCY \U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[0].U_M/U_MU/I_MUT_GAND.U_match/I_SRL16.U_GAND_SRL16/I_TW_GTE8.F_TW[0].I_YES_RPM.I_OREG.U_XORH ( + .CI(\U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[0].U_M/U_MU/I_MUT_GAND.U_match/I_SRL16.U_GAND_SRL16/tmpCompData<1> ), + .LI(N0), + .O(\U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[0].U_M/U_MU/I_MUT_GAND.U_match/I_SRL16.U_GAND_SRL16/tmpCompData<2> ) + ); + FDPE #( + .INIT ( 1'b1 )) + \U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[1].U_M/U_MU/I_MUT_GAND.U_match/I_SRL16.U_GAND_SRL16/I_YES_IREG.F_TW[0].U_IREG ( + .C(CLK), + .CE(N1), + .D(\U0/iTRIG_IN [8]), + .PRE(CONTROL[21]), + .Q(\U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[1].U_M/U_MU/I_MUT_GAND.U_match/I_SRL16.U_GAND_SRL16/din_dly1<0> ) + ); + FDPE #( + .INIT ( 1'b1 )) + \U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[1].U_M/U_MU/I_MUT_GAND.U_match/I_SRL16.U_GAND_SRL16/I_YES_IREG.F_TW[1].U_IREG ( + .C(CLK), + .CE(N1), + .D(\U0/iTRIG_IN [9]), + .PRE(CONTROL[21]), + .Q(\U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[1].U_M/U_MU/I_MUT_GAND.U_match/I_SRL16.U_GAND_SRL16/din_dly1<1> ) + ); + FDPE #( + .INIT ( 1'b1 )) + \U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[1].U_M/U_MU/I_MUT_GAND.U_match/I_SRL16.U_GAND_SRL16/I_YES_IREG.F_TW[2].U_IREG ( + .C(CLK), + .CE(N1), + .D(\U0/iTRIG_IN [10]), + .PRE(CONTROL[21]), + .Q(\U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[1].U_M/U_MU/I_MUT_GAND.U_match/I_SRL16.U_GAND_SRL16/din_dly1<2> ) + ); + FDPE #( + .INIT ( 1'b1 )) + \U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[1].U_M/U_MU/I_MUT_GAND.U_match/I_SRL16.U_GAND_SRL16/I_YES_IREG.F_TW[3].U_IREG ( + .C(CLK), + .CE(N1), + .D(\U0/iTRIG_IN [11]), + .PRE(CONTROL[21]), + .Q(\U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[1].U_M/U_MU/I_MUT_GAND.U_match/I_SRL16.U_GAND_SRL16/din_dly1<3> ) + ); + FDPE #( + .INIT ( 1'b1 )) + \U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[1].U_M/U_MU/I_MUT_GAND.U_match/I_SRL16.U_GAND_SRL16/I_YES_IREG.F_TW[4].U_IREG ( + .C(CLK), + .CE(N1), + .D(\U0/iTRIG_IN [12]), + .PRE(CONTROL[21]), + .Q(\U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[1].U_M/U_MU/I_MUT_GAND.U_match/I_SRL16.U_GAND_SRL16/din_dly1<4> ) + ); + FDPE #( + .INIT ( 1'b1 )) + \U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[1].U_M/U_MU/I_MUT_GAND.U_match/I_SRL16.U_GAND_SRL16/I_YES_IREG.F_TW[5].U_IREG ( + .C(CLK), + .CE(N1), + .D(\U0/iTRIG_IN [13]), + .PRE(CONTROL[21]), + .Q(\U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[1].U_M/U_MU/I_MUT_GAND.U_match/I_SRL16.U_GAND_SRL16/din_dly1<5> ) + ); + FDPE #( + .INIT ( 1'b1 )) + \U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[1].U_M/U_MU/I_MUT_GAND.U_match/I_SRL16.U_GAND_SRL16/I_YES_IREG.F_TW[6].U_IREG ( + .C(CLK), + .CE(N1), + .D(\U0/iTRIG_IN [14]), + .PRE(CONTROL[21]), + .Q(\U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[1].U_M/U_MU/I_MUT_GAND.U_match/I_SRL16.U_GAND_SRL16/din_dly1<6> ) + ); + FDPE #( + .INIT ( 1'b1 )) + \U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[1].U_M/U_MU/I_MUT_GAND.U_match/I_SRL16.U_GAND_SRL16/I_YES_IREG.F_TW[7].U_IREG ( + .C(CLK), + .CE(N1), + .D(\U0/iTRIG_IN [15]), + .PRE(CONTROL[21]), + .Q(\U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[1].U_M/U_MU/I_MUT_GAND.U_match/I_SRL16.U_GAND_SRL16/din_dly1<7> ) + ); + FDS #( + .INIT ( 1'b1 )) + \U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[1].U_M/U_MU/I_MUT_GAND.U_match/I_SRL16.U_GAND_SRL16/I_TW_GTE8.F_TW[0].I_YES_RPM.I_OREG.U_OREG ( + .C(CLK), + .D(\U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[1].U_M/U_MU/I_MUT_GAND.U_match/I_SRL16.U_GAND_SRL16/tmpCompData<2> ), + .S(\U0/I_NO_D.U_ILA/iRESET [0]), + .Q(\U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[1].U_M/U_MU/DOUT_tmp ) + ); + SRLC16E #( + .INIT ( 16'h0000 )) + \U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[1].U_M/U_MU/I_MUT_GAND.U_match/I_SRL16.U_GAND_SRL16/I_TW_GTE8.F_TW[0].I_YES_RPM.I_SRLT_EQ_2.U_SRLH ( + .A0(\U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[1].U_M/U_MU/I_MUT_GAND.U_match/I_SRL16.U_GAND_SRL16/din_dly1<4> ), + .A1(\U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[1].U_M/U_MU/I_MUT_GAND.U_match/I_SRL16.U_GAND_SRL16/din_dly1<5> ), + .A2(\U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[1].U_M/U_MU/I_MUT_GAND.U_match/I_SRL16.U_GAND_SRL16/din_dly1<6> ), + .A3(\U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[1].U_M/U_MU/I_MUT_GAND.U_match/I_SRL16.U_GAND_SRL16/din_dly1<7> ), + .CE(CONTROL[21]), + .CLK(CONTROL[0]), + .D(CONTROL[1]), + .Q(\U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[1].U_M/U_MU/I_MUT_GAND.U_match/I_SRL16.U_GAND_SRL16/sel<1> ), + .Q15(\U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[1].U_M/U_MU/I_MUT_GAND.U_match/I_SRL16.U_GAND_SRL16/tmpCfgData ) + ); + SRLC16E #( + .INIT ( 16'h0000 )) + \U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[1].U_M/U_MU/I_MUT_GAND.U_match/I_SRL16.U_GAND_SRL16/I_TW_GTE8.F_TW[0].I_YES_RPM.I_SRLT_EQ_2.U_SRLL ( + .A0(\U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[1].U_M/U_MU/I_MUT_GAND.U_match/I_SRL16.U_GAND_SRL16/din_dly1<0> ), + .A1(\U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[1].U_M/U_MU/I_MUT_GAND.U_match/I_SRL16.U_GAND_SRL16/din_dly1<1> ), + .A2(\U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[1].U_M/U_MU/I_MUT_GAND.U_match/I_SRL16.U_GAND_SRL16/din_dly1<2> ), + .A3(\U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[1].U_M/U_MU/I_MUT_GAND.U_match/I_SRL16.U_GAND_SRL16/din_dly1<3> ), + .CE(CONTROL[21]), + .CLK(CONTROL[0]), + .D(\U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[1].U_M/U_MU/I_MUT_GAND.U_match/I_SRL16.U_GAND_SRL16/tmpCfgData ), + .Q(\U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[1].U_M/U_MU/I_MUT_GAND.U_match/I_SRL16.U_GAND_SRL16/sel<0> ), + .Q15 +(\NLW_U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[1].U_M/U_MU/I_MUT_GAND.U_match/I_SRL16.U_GAND_SRL16/I_TW_GTE8.F_TW[0].I_YES_RPM.I_SRLT_EQ_2.U_SRLL_Q15_UNCONNECTED ) + + ); + MUXCY_L \U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[1].U_M/U_MU/I_MUT_GAND.U_match/I_SRL16.U_GAND_SRL16/I_TW_GTE8.F_TW[0].I_YES_RPM.U_MUXH ( + .CI(\U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[1].U_M/U_MU/I_MUT_GAND.U_match/I_SRL16.U_GAND_SRL16/tmpCompData<0> ), + .DI(N0), + .S(\U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[1].U_M/U_MU/I_MUT_GAND.U_match/I_SRL16.U_GAND_SRL16/sel<1> ), + .LO(\U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[1].U_M/U_MU/I_MUT_GAND.U_match/I_SRL16.U_GAND_SRL16/tmpCompData<1> ) + ); + MUXCY_L \U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[1].U_M/U_MU/I_MUT_GAND.U_match/I_SRL16.U_GAND_SRL16/I_TW_GTE8.F_TW[0].I_YES_RPM.U_MUXL ( + .CI(N1), + .DI(N0), + .S(\U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[1].U_M/U_MU/I_MUT_GAND.U_match/I_SRL16.U_GAND_SRL16/sel<0> ), + .LO(\U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[1].U_M/U_MU/I_MUT_GAND.U_match/I_SRL16.U_GAND_SRL16/tmpCompData<0> ) + ); + XORCY \U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[1].U_M/U_MU/I_MUT_GAND.U_match/I_SRL16.U_GAND_SRL16/I_TW_GTE8.F_TW[0].I_YES_RPM.I_OREG.U_XORH ( + .CI(\U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[1].U_M/U_MU/I_MUT_GAND.U_match/I_SRL16.U_GAND_SRL16/tmpCompData<1> ), + .LI(N0), + .O(\U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[1].U_M/U_MU/I_MUT_GAND.U_match/I_SRL16.U_GAND_SRL16/tmpCompData<2> ) + ); + FDPE #( + .INIT ( 1'b1 )) + \U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[2].U_M/U_MU/I_MUT_GAND.U_match/I_SRL16.U_GAND_SRL16/I_YES_IREG.F_TW[0].U_IREG ( + .C(CLK), + .CE(N1), + .D(\U0/iTRIG_IN [16]), + .PRE(CONTROL[22]), + .Q(\U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[2].U_M/U_MU/I_MUT_GAND.U_match/I_SRL16.U_GAND_SRL16/din_dly1<0> ) + ); + FDPE #( + .INIT ( 1'b1 )) + \U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[2].U_M/U_MU/I_MUT_GAND.U_match/I_SRL16.U_GAND_SRL16/I_YES_IREG.F_TW[1].U_IREG ( + .C(CLK), + .CE(N1), + .D(\U0/iTRIG_IN [17]), + .PRE(CONTROL[22]), + .Q(\U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[2].U_M/U_MU/I_MUT_GAND.U_match/I_SRL16.U_GAND_SRL16/din_dly1<1> ) + ); + FDPE #( + .INIT ( 1'b1 )) + \U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[2].U_M/U_MU/I_MUT_GAND.U_match/I_SRL16.U_GAND_SRL16/I_YES_IREG.F_TW[2].U_IREG ( + .C(CLK), + .CE(N1), + .D(\U0/iTRIG_IN [18]), + .PRE(CONTROL[22]), + .Q(\U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[2].U_M/U_MU/I_MUT_GAND.U_match/I_SRL16.U_GAND_SRL16/din_dly1<2> ) + ); + FDPE #( + .INIT ( 1'b1 )) + \U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[2].U_M/U_MU/I_MUT_GAND.U_match/I_SRL16.U_GAND_SRL16/I_YES_IREG.F_TW[3].U_IREG ( + .C(CLK), + .CE(N1), + .D(\U0/iTRIG_IN [19]), + .PRE(CONTROL[22]), + .Q(\U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[2].U_M/U_MU/I_MUT_GAND.U_match/I_SRL16.U_GAND_SRL16/din_dly1<3> ) + ); + FDPE #( + .INIT ( 1'b1 )) + \U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[2].U_M/U_MU/I_MUT_GAND.U_match/I_SRL16.U_GAND_SRL16/I_YES_IREG.F_TW[4].U_IREG ( + .C(CLK), + .CE(N1), + .D(\U0/iTRIG_IN [20]), + .PRE(CONTROL[22]), + .Q(\U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[2].U_M/U_MU/I_MUT_GAND.U_match/I_SRL16.U_GAND_SRL16/din_dly1<4> ) + ); + FDPE #( + .INIT ( 1'b1 )) + \U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[2].U_M/U_MU/I_MUT_GAND.U_match/I_SRL16.U_GAND_SRL16/I_YES_IREG.F_TW[5].U_IREG ( + .C(CLK), + .CE(N1), + .D(\U0/iTRIG_IN [21]), + .PRE(CONTROL[22]), + .Q(\U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[2].U_M/U_MU/I_MUT_GAND.U_match/I_SRL16.U_GAND_SRL16/din_dly1<5> ) + ); + FDPE #( + .INIT ( 1'b1 )) + \U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[2].U_M/U_MU/I_MUT_GAND.U_match/I_SRL16.U_GAND_SRL16/I_YES_IREG.F_TW[6].U_IREG ( + .C(CLK), + .CE(N1), + .D(\U0/iTRIG_IN [22]), + .PRE(CONTROL[22]), + .Q(\U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[2].U_M/U_MU/I_MUT_GAND.U_match/I_SRL16.U_GAND_SRL16/din_dly1<6> ) + ); + FDPE #( + .INIT ( 1'b1 )) + \U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[2].U_M/U_MU/I_MUT_GAND.U_match/I_SRL16.U_GAND_SRL16/I_YES_IREG.F_TW[7].U_IREG ( + .C(CLK), + .CE(N1), + .D(\U0/iTRIG_IN [23]), + .PRE(CONTROL[22]), + .Q(\U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[2].U_M/U_MU/I_MUT_GAND.U_match/I_SRL16.U_GAND_SRL16/din_dly1<7> ) + ); + FDS #( + .INIT ( 1'b1 )) + \U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[2].U_M/U_MU/I_MUT_GAND.U_match/I_SRL16.U_GAND_SRL16/I_TW_GTE8.F_TW[0].I_YES_RPM.I_OREG.U_OREG ( + .C(CLK), + .D(\U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[2].U_M/U_MU/I_MUT_GAND.U_match/I_SRL16.U_GAND_SRL16/tmpCompData<2> ), + .S(\U0/I_NO_D.U_ILA/iRESET [0]), + .Q(\U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[2].U_M/U_MU/DOUT_tmp ) + ); + SRLC16E #( + .INIT ( 16'h0000 )) + \U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[2].U_M/U_MU/I_MUT_GAND.U_match/I_SRL16.U_GAND_SRL16/I_TW_GTE8.F_TW[0].I_YES_RPM.I_SRLT_EQ_2.U_SRLH ( + .A0(\U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[2].U_M/U_MU/I_MUT_GAND.U_match/I_SRL16.U_GAND_SRL16/din_dly1<4> ), + .A1(\U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[2].U_M/U_MU/I_MUT_GAND.U_match/I_SRL16.U_GAND_SRL16/din_dly1<5> ), + .A2(\U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[2].U_M/U_MU/I_MUT_GAND.U_match/I_SRL16.U_GAND_SRL16/din_dly1<6> ), + .A3(\U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[2].U_M/U_MU/I_MUT_GAND.U_match/I_SRL16.U_GAND_SRL16/din_dly1<7> ), + .CE(CONTROL[22]), + .CLK(CONTROL[0]), + .D(CONTROL[1]), + .Q(\U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[2].U_M/U_MU/I_MUT_GAND.U_match/I_SRL16.U_GAND_SRL16/sel<1> ), + .Q15(\U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[2].U_M/U_MU/I_MUT_GAND.U_match/I_SRL16.U_GAND_SRL16/tmpCfgData ) + ); + SRLC16E #( + .INIT ( 16'h0000 )) + \U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[2].U_M/U_MU/I_MUT_GAND.U_match/I_SRL16.U_GAND_SRL16/I_TW_GTE8.F_TW[0].I_YES_RPM.I_SRLT_EQ_2.U_SRLL ( + .A0(\U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[2].U_M/U_MU/I_MUT_GAND.U_match/I_SRL16.U_GAND_SRL16/din_dly1<0> ), + .A1(\U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[2].U_M/U_MU/I_MUT_GAND.U_match/I_SRL16.U_GAND_SRL16/din_dly1<1> ), + .A2(\U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[2].U_M/U_MU/I_MUT_GAND.U_match/I_SRL16.U_GAND_SRL16/din_dly1<2> ), + .A3(\U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[2].U_M/U_MU/I_MUT_GAND.U_match/I_SRL16.U_GAND_SRL16/din_dly1<3> ), + .CE(CONTROL[22]), + .CLK(CONTROL[0]), + .D(\U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[2].U_M/U_MU/I_MUT_GAND.U_match/I_SRL16.U_GAND_SRL16/tmpCfgData ), + .Q(\U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[2].U_M/U_MU/I_MUT_GAND.U_match/I_SRL16.U_GAND_SRL16/sel<0> ), + .Q15 +(\NLW_U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[2].U_M/U_MU/I_MUT_GAND.U_match/I_SRL16.U_GAND_SRL16/I_TW_GTE8.F_TW[0].I_YES_RPM.I_SRLT_EQ_2.U_SRLL_Q15_UNCONNECTED ) + + ); + MUXCY_L \U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[2].U_M/U_MU/I_MUT_GAND.U_match/I_SRL16.U_GAND_SRL16/I_TW_GTE8.F_TW[0].I_YES_RPM.U_MUXH ( + .CI(\U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[2].U_M/U_MU/I_MUT_GAND.U_match/I_SRL16.U_GAND_SRL16/tmpCompData<0> ), + .DI(N0), + .S(\U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[2].U_M/U_MU/I_MUT_GAND.U_match/I_SRL16.U_GAND_SRL16/sel<1> ), + .LO(\U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[2].U_M/U_MU/I_MUT_GAND.U_match/I_SRL16.U_GAND_SRL16/tmpCompData<1> ) + ); + MUXCY_L \U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[2].U_M/U_MU/I_MUT_GAND.U_match/I_SRL16.U_GAND_SRL16/I_TW_GTE8.F_TW[0].I_YES_RPM.U_MUXL ( + .CI(N1), + .DI(N0), + .S(\U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[2].U_M/U_MU/I_MUT_GAND.U_match/I_SRL16.U_GAND_SRL16/sel<0> ), + .LO(\U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[2].U_M/U_MU/I_MUT_GAND.U_match/I_SRL16.U_GAND_SRL16/tmpCompData<0> ) + ); + XORCY \U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[2].U_M/U_MU/I_MUT_GAND.U_match/I_SRL16.U_GAND_SRL16/I_TW_GTE8.F_TW[0].I_YES_RPM.I_OREG.U_XORH ( + .CI(\U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[2].U_M/U_MU/I_MUT_GAND.U_match/I_SRL16.U_GAND_SRL16/tmpCompData<1> ), + .LI(N0), + .O(\U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[2].U_M/U_MU/I_MUT_GAND.U_match/I_SRL16.U_GAND_SRL16/tmpCompData<2> ) + ); + FD #( + .INIT ( 1'b0 )) + \U0/I_NO_D.U_ILA/I_DQ.U_DQQ/DLY_9.DLY_9_GEN[0].I_SRLT_NE_0.FF ( + .C(CLK), + .D(\U0/I_NO_D.U_ILA/I_DQ.U_DQQ/temp [0]), + .Q(\U0/I_NO_D.U_ILA/iDATA [0]) + ); + FD #( + .INIT ( 1'b0 )) + \U0/I_NO_D.U_ILA/I_DQ.U_DQQ/DLY_9.DLY_9_GEN[1].I_SRLT_NE_0.FF ( + .C(CLK), + .D(\U0/I_NO_D.U_ILA/I_DQ.U_DQQ/temp [1]), + .Q(\U0/I_NO_D.U_ILA/iDATA [1]) + ); + FD #( + .INIT ( 1'b0 )) + \U0/I_NO_D.U_ILA/I_DQ.U_DQQ/DLY_9.DLY_9_GEN[2].I_SRLT_NE_0.FF ( + .C(CLK), + .D(\U0/I_NO_D.U_ILA/I_DQ.U_DQQ/temp [2]), + .Q(\U0/I_NO_D.U_ILA/iDATA [2]) + ); + FD #( + .INIT ( 1'b0 )) + \U0/I_NO_D.U_ILA/I_DQ.U_DQQ/DLY_9.DLY_9_GEN[3].I_SRLT_NE_0.FF ( + .C(CLK), + .D(\U0/I_NO_D.U_ILA/I_DQ.U_DQQ/temp [3]), + .Q(\U0/I_NO_D.U_ILA/iDATA [3]) + ); + FD #( + .INIT ( 1'b0 )) + \U0/I_NO_D.U_ILA/I_DQ.U_DQQ/DLY_9.DLY_9_GEN[4].I_SRLT_NE_0.FF ( + .C(CLK), + .D(\U0/I_NO_D.U_ILA/I_DQ.U_DQQ/temp [4]), + .Q(\U0/I_NO_D.U_ILA/iDATA [4]) + ); + FD #( + .INIT ( 1'b0 )) + \U0/I_NO_D.U_ILA/I_DQ.U_DQQ/DLY_9.DLY_9_GEN[5].I_SRLT_NE_0.FF ( + .C(CLK), + .D(\U0/I_NO_D.U_ILA/I_DQ.U_DQQ/temp [5]), + .Q(\U0/I_NO_D.U_ILA/iDATA [5]) + ); + FD #( + .INIT ( 1'b0 )) + \U0/I_NO_D.U_ILA/I_DQ.U_DQQ/DLY_9.DLY_9_GEN[6].I_SRLT_NE_0.FF ( + .C(CLK), + .D(\U0/I_NO_D.U_ILA/I_DQ.U_DQQ/temp [6]), + .Q(\U0/I_NO_D.U_ILA/iDATA [6]) + ); + FD #( + .INIT ( 1'b0 )) + \U0/I_NO_D.U_ILA/I_DQ.U_DQQ/DLY_9.DLY_9_GEN[7].I_SRLT_NE_0.FF ( + .C(CLK), + .D(\U0/I_NO_D.U_ILA/I_DQ.U_DQQ/temp [7]), + .Q(\U0/I_NO_D.U_ILA/iDATA [7]) + ); + FD #( + .INIT ( 1'b0 )) + \U0/I_NO_D.U_ILA/I_DQ.U_DQQ/DLY_9.DLY_9_GEN[8].I_SRLT_NE_0.FF ( + .C(CLK), + .D(\U0/I_NO_D.U_ILA/I_DQ.U_DQQ/temp [8]), + .Q(\U0/I_NO_D.U_ILA/iDATA [8]) + ); + FD #( + .INIT ( 1'b0 )) + \U0/I_NO_D.U_ILA/I_DQ.U_DQQ/DLY_9.DLY_9_GEN[9].I_SRLT_NE_0.FF ( + .C(CLK), + .D(\U0/I_NO_D.U_ILA/I_DQ.U_DQQ/temp [9]), + .Q(\U0/I_NO_D.U_ILA/iDATA [9]) + ); + FD #( + .INIT ( 1'b0 )) + \U0/I_NO_D.U_ILA/I_DQ.U_DQQ/DLY_9.DLY_9_GEN[10].I_SRLT_NE_0.FF ( + .C(CLK), + .D(\U0/I_NO_D.U_ILA/I_DQ.U_DQQ/temp [10]), + .Q(\U0/I_NO_D.U_ILA/iDATA [10]) + ); + FD #( + .INIT ( 1'b0 )) + \U0/I_NO_D.U_ILA/I_DQ.U_DQQ/DLY_9.DLY_9_GEN[11].I_SRLT_NE_0.FF ( + .C(CLK), + .D(\U0/I_NO_D.U_ILA/I_DQ.U_DQQ/temp [11]), + .Q(\U0/I_NO_D.U_ILA/iDATA [11]) + ); + FD #( + .INIT ( 1'b0 )) + \U0/I_NO_D.U_ILA/I_DQ.U_DQQ/DLY_9.DLY_9_GEN[12].I_SRLT_NE_0.FF ( + .C(CLK), + .D(\U0/I_NO_D.U_ILA/I_DQ.U_DQQ/temp [12]), + .Q(\U0/I_NO_D.U_ILA/iDATA [12]) + ); + FD #( + .INIT ( 1'b0 )) + \U0/I_NO_D.U_ILA/I_DQ.U_DQQ/DLY_9.DLY_9_GEN[13].I_SRLT_NE_0.FF ( + .C(CLK), + .D(\U0/I_NO_D.U_ILA/I_DQ.U_DQQ/temp [13]), + .Q(\U0/I_NO_D.U_ILA/iDATA [13]) + ); + FD #( + .INIT ( 1'b0 )) + \U0/I_NO_D.U_ILA/I_DQ.U_DQQ/DLY_9.DLY_9_GEN[14].I_SRLT_NE_0.FF ( + .C(CLK), + .D(\U0/I_NO_D.U_ILA/I_DQ.U_DQQ/temp [14]), + .Q(\U0/I_NO_D.U_ILA/iDATA [14]) + ); + FD #( + .INIT ( 1'b0 )) + \U0/I_NO_D.U_ILA/I_DQ.U_DQQ/DLY_9.DLY_9_GEN[15].I_SRLT_NE_0.FF ( + .C(CLK), + .D(\U0/I_NO_D.U_ILA/I_DQ.U_DQQ/temp [15]), + .Q(\U0/I_NO_D.U_ILA/iDATA [15]) + ); + FD #( + .INIT ( 1'b0 )) + \U0/I_NO_D.U_ILA/I_DQ.U_DQQ/DLY_9.DLY_9_GEN[16].I_SRLT_NE_0.FF ( + .C(CLK), + .D(\U0/I_NO_D.U_ILA/I_DQ.U_DQQ/temp [16]), + .Q(\U0/I_NO_D.U_ILA/iDATA [16]) + ); + FD #( + .INIT ( 1'b0 )) + \U0/I_NO_D.U_ILA/I_DQ.U_DQQ/DLY_9.DLY_9_GEN[17].I_SRLT_NE_0.FF ( + .C(CLK), + .D(\U0/I_NO_D.U_ILA/I_DQ.U_DQQ/temp [17]), + .Q(\U0/I_NO_D.U_ILA/iDATA [17]) + ); + FD #( + .INIT ( 1'b0 )) + \U0/I_NO_D.U_ILA/I_DQ.U_DQQ/DLY_9.DLY_9_GEN[18].I_SRLT_NE_0.FF ( + .C(CLK), + .D(\U0/I_NO_D.U_ILA/I_DQ.U_DQQ/temp [18]), + .Q(\U0/I_NO_D.U_ILA/iDATA [18]) + ); + FD #( + .INIT ( 1'b0 )) + \U0/I_NO_D.U_ILA/I_DQ.U_DQQ/DLY_9.DLY_9_GEN[19].I_SRLT_NE_0.FF ( + .C(CLK), + .D(\U0/I_NO_D.U_ILA/I_DQ.U_DQQ/temp [19]), + .Q(\U0/I_NO_D.U_ILA/iDATA [19]) + ); + FD #( + .INIT ( 1'b0 )) + \U0/I_NO_D.U_ILA/I_DQ.U_DQQ/DLY_9.DLY_9_GEN[20].I_SRLT_NE_0.FF ( + .C(CLK), + .D(\U0/I_NO_D.U_ILA/I_DQ.U_DQQ/temp [20]), + .Q(\U0/I_NO_D.U_ILA/iDATA [20]) + ); + FD #( + .INIT ( 1'b0 )) + \U0/I_NO_D.U_ILA/I_DQ.U_DQQ/DLY_9.DLY_9_GEN[21].I_SRLT_NE_0.FF ( + .C(CLK), + .D(\U0/I_NO_D.U_ILA/I_DQ.U_DQQ/temp [21]), + .Q(\U0/I_NO_D.U_ILA/iDATA [21]) + ); + FD #( + .INIT ( 1'b0 )) + \U0/I_NO_D.U_ILA/I_DQ.U_DQQ/DLY_9.DLY_9_GEN[22].I_SRLT_NE_0.FF ( + .C(CLK), + .D(\U0/I_NO_D.U_ILA/I_DQ.U_DQQ/temp [22]), + .Q(\U0/I_NO_D.U_ILA/iDATA [22]) + ); + FD #( + .INIT ( 1'b0 )) + \U0/I_NO_D.U_ILA/I_DQ.U_DQQ/DLY_9.DLY_9_GEN[23].I_SRLT_NE_0.FF ( + .C(CLK), + .D(\U0/I_NO_D.U_ILA/I_DQ.U_DQQ/temp [23]), + .Q(\U0/I_NO_D.U_ILA/iDATA [23]) + ); + FD #( + .INIT ( 1'b0 )) + \U0/I_NO_D.U_ILA/I_DQ.U_DQQ/DLY_9.DLY_9_GEN[24].I_SRLT_NE_0.FF ( + .C(CLK), + .D(\U0/I_NO_D.U_ILA/I_DQ.U_DQQ/temp [24]), + .Q(\U0/I_NO_D.U_ILA/iDATA [24]) + ); + FD #( + .INIT ( 1'b0 )) + \U0/I_NO_D.U_ILA/I_DQ.U_DQQ/DLY_9.DLY_9_GEN[25].I_SRLT_NE_0.FF ( + .C(CLK), + .D(\U0/I_NO_D.U_ILA/I_DQ.U_DQQ/temp [25]), + .Q(\U0/I_NO_D.U_ILA/iDATA [25]) + ); + FD #( + .INIT ( 1'b0 )) + \U0/I_NO_D.U_ILA/I_DQ.U_DQQ/DLY_9.DLY_9_GEN[26].I_SRLT_NE_0.FF ( + .C(CLK), + .D(\U0/I_NO_D.U_ILA/I_DQ.U_DQQ/temp [26]), + .Q(\U0/I_NO_D.U_ILA/iDATA [26]) + ); + FD #( + .INIT ( 1'b0 )) + \U0/I_NO_D.U_ILA/I_DQ.U_DQQ/DLY_9.DLY_9_GEN[27].I_SRLT_NE_0.FF ( + .C(CLK), + .D(\U0/I_NO_D.U_ILA/I_DQ.U_DQQ/temp [27]), + .Q(\U0/I_NO_D.U_ILA/iDATA [27]) + ); + SRL16 #( + .INIT ( 16'h0000 )) + \U0/I_NO_D.U_ILA/I_DQ.U_DQQ/DLY_9.DLY_9_GEN[0].I_SRLT_NE_0.DLY9 ( + .A0(N1), + .A1(N1), + .A2(N1), + .A3(N0), + .CLK(CLK), + .D(\U0/iTRIG_IN [0]), + .Q(\U0/I_NO_D.U_ILA/I_DQ.U_DQQ/temp [0]) + ); + SRL16 #( + .INIT ( 16'h0000 )) + \U0/I_NO_D.U_ILA/I_DQ.U_DQQ/DLY_9.DLY_9_GEN[1].I_SRLT_NE_0.DLY9 ( + .A0(N1), + .A1(N1), + .A2(N1), + .A3(N0), + .CLK(CLK), + .D(\U0/iTRIG_IN [1]), + .Q(\U0/I_NO_D.U_ILA/I_DQ.U_DQQ/temp [1]) + ); + SRL16 #( + .INIT ( 16'h0000 )) + \U0/I_NO_D.U_ILA/I_DQ.U_DQQ/DLY_9.DLY_9_GEN[2].I_SRLT_NE_0.DLY9 ( + .A0(N1), + .A1(N1), + .A2(N1), + .A3(N0), + .CLK(CLK), + .D(\U0/iTRIG_IN [2]), + .Q(\U0/I_NO_D.U_ILA/I_DQ.U_DQQ/temp [2]) + ); + SRL16 #( + .INIT ( 16'h0000 )) + \U0/I_NO_D.U_ILA/I_DQ.U_DQQ/DLY_9.DLY_9_GEN[3].I_SRLT_NE_0.DLY9 ( + .A0(N1), + .A1(N1), + .A2(N1), + .A3(N0), + .CLK(CLK), + .D(\U0/iTRIG_IN [3]), + .Q(\U0/I_NO_D.U_ILA/I_DQ.U_DQQ/temp [3]) + ); + SRL16 #( + .INIT ( 16'h0000 )) + \U0/I_NO_D.U_ILA/I_DQ.U_DQQ/DLY_9.DLY_9_GEN[4].I_SRLT_NE_0.DLY9 ( + .A0(N1), + .A1(N1), + .A2(N1), + .A3(N0), + .CLK(CLK), + .D(\U0/iTRIG_IN [4]), + .Q(\U0/I_NO_D.U_ILA/I_DQ.U_DQQ/temp [4]) + ); + SRL16 #( + .INIT ( 16'h0000 )) + \U0/I_NO_D.U_ILA/I_DQ.U_DQQ/DLY_9.DLY_9_GEN[5].I_SRLT_NE_0.DLY9 ( + .A0(N1), + .A1(N1), + .A2(N1), + .A3(N0), + .CLK(CLK), + .D(\U0/iTRIG_IN [5]), + .Q(\U0/I_NO_D.U_ILA/I_DQ.U_DQQ/temp [5]) + ); + SRL16 #( + .INIT ( 16'h0000 )) + \U0/I_NO_D.U_ILA/I_DQ.U_DQQ/DLY_9.DLY_9_GEN[6].I_SRLT_NE_0.DLY9 ( + .A0(N1), + .A1(N1), + .A2(N1), + .A3(N0), + .CLK(CLK), + .D(\U0/iTRIG_IN [6]), + .Q(\U0/I_NO_D.U_ILA/I_DQ.U_DQQ/temp [6]) + ); + SRL16 #( + .INIT ( 16'h0000 )) + \U0/I_NO_D.U_ILA/I_DQ.U_DQQ/DLY_9.DLY_9_GEN[7].I_SRLT_NE_0.DLY9 ( + .A0(N1), + .A1(N1), + .A2(N1), + .A3(N0), + .CLK(CLK), + .D(\U0/iTRIG_IN [7]), + .Q(\U0/I_NO_D.U_ILA/I_DQ.U_DQQ/temp [7]) + ); + SRL16 #( + .INIT ( 16'h0000 )) + \U0/I_NO_D.U_ILA/I_DQ.U_DQQ/DLY_9.DLY_9_GEN[8].I_SRLT_NE_0.DLY9 ( + .A0(N1), + .A1(N1), + .A2(N1), + .A3(N0), + .CLK(CLK), + .D(\U0/iTRIG_IN [8]), + .Q(\U0/I_NO_D.U_ILA/I_DQ.U_DQQ/temp [8]) + ); + SRL16 #( + .INIT ( 16'h0000 )) + \U0/I_NO_D.U_ILA/I_DQ.U_DQQ/DLY_9.DLY_9_GEN[9].I_SRLT_NE_0.DLY9 ( + .A0(N1), + .A1(N1), + .A2(N1), + .A3(N0), + .CLK(CLK), + .D(\U0/iTRIG_IN [9]), + .Q(\U0/I_NO_D.U_ILA/I_DQ.U_DQQ/temp [9]) + ); + SRL16 #( + .INIT ( 16'h0000 )) + \U0/I_NO_D.U_ILA/I_DQ.U_DQQ/DLY_9.DLY_9_GEN[10].I_SRLT_NE_0.DLY9 ( + .A0(N1), + .A1(N1), + .A2(N1), + .A3(N0), + .CLK(CLK), + .D(\U0/iTRIG_IN [10]), + .Q(\U0/I_NO_D.U_ILA/I_DQ.U_DQQ/temp [10]) + ); + SRL16 #( + .INIT ( 16'h0000 )) + \U0/I_NO_D.U_ILA/I_DQ.U_DQQ/DLY_9.DLY_9_GEN[11].I_SRLT_NE_0.DLY9 ( + .A0(N1), + .A1(N1), + .A2(N1), + .A3(N0), + .CLK(CLK), + .D(\U0/iTRIG_IN [11]), + .Q(\U0/I_NO_D.U_ILA/I_DQ.U_DQQ/temp [11]) + ); + SRL16 #( + .INIT ( 16'h0000 )) + \U0/I_NO_D.U_ILA/I_DQ.U_DQQ/DLY_9.DLY_9_GEN[12].I_SRLT_NE_0.DLY9 ( + .A0(N1), + .A1(N1), + .A2(N1), + .A3(N0), + .CLK(CLK), + .D(\U0/iTRIG_IN [12]), + .Q(\U0/I_NO_D.U_ILA/I_DQ.U_DQQ/temp [12]) + ); + SRL16 #( + .INIT ( 16'h0000 )) + \U0/I_NO_D.U_ILA/I_DQ.U_DQQ/DLY_9.DLY_9_GEN[13].I_SRLT_NE_0.DLY9 ( + .A0(N1), + .A1(N1), + .A2(N1), + .A3(N0), + .CLK(CLK), + .D(\U0/iTRIG_IN [13]), + .Q(\U0/I_NO_D.U_ILA/I_DQ.U_DQQ/temp [13]) + ); + SRL16 #( + .INIT ( 16'h0000 )) + \U0/I_NO_D.U_ILA/I_DQ.U_DQQ/DLY_9.DLY_9_GEN[14].I_SRLT_NE_0.DLY9 ( + .A0(N1), + .A1(N1), + .A2(N1), + .A3(N0), + .CLK(CLK), + .D(\U0/iTRIG_IN [14]), + .Q(\U0/I_NO_D.U_ILA/I_DQ.U_DQQ/temp [14]) + ); + SRL16 #( + .INIT ( 16'h0000 )) + \U0/I_NO_D.U_ILA/I_DQ.U_DQQ/DLY_9.DLY_9_GEN[15].I_SRLT_NE_0.DLY9 ( + .A0(N1), + .A1(N1), + .A2(N1), + .A3(N0), + .CLK(CLK), + .D(\U0/iTRIG_IN [15]), + .Q(\U0/I_NO_D.U_ILA/I_DQ.U_DQQ/temp [15]) + ); + SRL16 #( + .INIT ( 16'h0000 )) + \U0/I_NO_D.U_ILA/I_DQ.U_DQQ/DLY_9.DLY_9_GEN[16].I_SRLT_NE_0.DLY9 ( + .A0(N1), + .A1(N1), + .A2(N1), + .A3(N0), + .CLK(CLK), + .D(\U0/iTRIG_IN [16]), + .Q(\U0/I_NO_D.U_ILA/I_DQ.U_DQQ/temp [16]) + ); + SRL16 #( + .INIT ( 16'h0000 )) + \U0/I_NO_D.U_ILA/I_DQ.U_DQQ/DLY_9.DLY_9_GEN[17].I_SRLT_NE_0.DLY9 ( + .A0(N1), + .A1(N1), + .A2(N1), + .A3(N0), + .CLK(CLK), + .D(\U0/iTRIG_IN [17]), + .Q(\U0/I_NO_D.U_ILA/I_DQ.U_DQQ/temp [17]) + ); + SRL16 #( + .INIT ( 16'h0000 )) + \U0/I_NO_D.U_ILA/I_DQ.U_DQQ/DLY_9.DLY_9_GEN[18].I_SRLT_NE_0.DLY9 ( + .A0(N1), + .A1(N1), + .A2(N1), + .A3(N0), + .CLK(CLK), + .D(\U0/iTRIG_IN [18]), + .Q(\U0/I_NO_D.U_ILA/I_DQ.U_DQQ/temp [18]) + ); + SRL16 #( + .INIT ( 16'h0000 )) + \U0/I_NO_D.U_ILA/I_DQ.U_DQQ/DLY_9.DLY_9_GEN[19].I_SRLT_NE_0.DLY9 ( + .A0(N1), + .A1(N1), + .A2(N1), + .A3(N0), + .CLK(CLK), + .D(\U0/iTRIG_IN [19]), + .Q(\U0/I_NO_D.U_ILA/I_DQ.U_DQQ/temp [19]) + ); + SRL16 #( + .INIT ( 16'h0000 )) + \U0/I_NO_D.U_ILA/I_DQ.U_DQQ/DLY_9.DLY_9_GEN[20].I_SRLT_NE_0.DLY9 ( + .A0(N1), + .A1(N1), + .A2(N1), + .A3(N0), + .CLK(CLK), + .D(\U0/iTRIG_IN [20]), + .Q(\U0/I_NO_D.U_ILA/I_DQ.U_DQQ/temp [20]) + ); + SRL16 #( + .INIT ( 16'h0000 )) + \U0/I_NO_D.U_ILA/I_DQ.U_DQQ/DLY_9.DLY_9_GEN[21].I_SRLT_NE_0.DLY9 ( + .A0(N1), + .A1(N1), + .A2(N1), + .A3(N0), + .CLK(CLK), + .D(\U0/iTRIG_IN [21]), + .Q(\U0/I_NO_D.U_ILA/I_DQ.U_DQQ/temp [21]) + ); + SRL16 #( + .INIT ( 16'h0000 )) + \U0/I_NO_D.U_ILA/I_DQ.U_DQQ/DLY_9.DLY_9_GEN[22].I_SRLT_NE_0.DLY9 ( + .A0(N1), + .A1(N1), + .A2(N1), + .A3(N0), + .CLK(CLK), + .D(\U0/iTRIG_IN [22]), + .Q(\U0/I_NO_D.U_ILA/I_DQ.U_DQQ/temp [22]) + ); + SRL16 #( + .INIT ( 16'h0000 )) + \U0/I_NO_D.U_ILA/I_DQ.U_DQQ/DLY_9.DLY_9_GEN[23].I_SRLT_NE_0.DLY9 ( + .A0(N1), + .A1(N1), + .A2(N1), + .A3(N0), + .CLK(CLK), + .D(\U0/iTRIG_IN [23]), + .Q(\U0/I_NO_D.U_ILA/I_DQ.U_DQQ/temp [23]) + ); + SRL16 #( + .INIT ( 16'h0000 )) + \U0/I_NO_D.U_ILA/I_DQ.U_DQQ/DLY_9.DLY_9_GEN[24].I_SRLT_NE_0.DLY9 ( + .A0(N1), + .A1(N1), + .A2(N1), + .A3(N0), + .CLK(CLK), + .D(\U0/iTRIG_IN [24]), + .Q(\U0/I_NO_D.U_ILA/I_DQ.U_DQQ/temp [24]) + ); + SRL16 #( + .INIT ( 16'h0000 )) + \U0/I_NO_D.U_ILA/I_DQ.U_DQQ/DLY_9.DLY_9_GEN[25].I_SRLT_NE_0.DLY9 ( + .A0(N1), + .A1(N1), + .A2(N1), + .A3(N0), + .CLK(CLK), + .D(\U0/iTRIG_IN [25]), + .Q(\U0/I_NO_D.U_ILA/I_DQ.U_DQQ/temp [25]) + ); + SRL16 #( + .INIT ( 16'h0000 )) + \U0/I_NO_D.U_ILA/I_DQ.U_DQQ/DLY_9.DLY_9_GEN[26].I_SRLT_NE_0.DLY9 ( + .A0(N1), + .A1(N1), + .A2(N1), + .A3(N0), + .CLK(CLK), + .D(\U0/iTRIG_IN [26]), + .Q(\U0/I_NO_D.U_ILA/I_DQ.U_DQQ/temp [26]) + ); + SRL16 #( + .INIT ( 16'h0000 )) + \U0/I_NO_D.U_ILA/I_DQ.U_DQQ/DLY_9.DLY_9_GEN[27].I_SRLT_NE_0.DLY9 ( + .A0(N1), + .A1(N1), + .A2(N1), + .A3(N0), + .CLK(CLK), + .D(\U0/iTRIG_IN [27]), + .Q(\U0/I_NO_D.U_ILA/I_DQ.U_DQQ/temp [27]) + ); + LUT3 #( + .INIT ( 8'hCA )) + \U0/I_NO_D.U_ILA/U_DOUT ( + .I0(\U0/I_NO_D.U_ILA/iSTAT_DOUT ), + .I1(\U0/I_NO_D.U_ILA/iDATA_DOUT ), + .I2(CONTROL[6]), + .O(CONTROL[3]) + ); + LUT1 #( + .INIT ( 2'h1 )) + \U0/I_NO_D.U_ILA/U_TRIG/U_TC/I_STORAGE_QUAL.U_CAP_B ( + .I0(\U0/I_NO_D.U_ILA/U_TRIG/U_TC/iCAPTURE ), + .O(\NLW_U0/I_NO_D.U_ILA/U_TRIG/U_TC/I_STORAGE_QUAL.U_CAP_B_O_UNCONNECTED ) + ); + SRLC16E #( + .INIT ( 16'h0000 )) + \U0/I_NO_D.U_ILA/U_TRIG/U_TC/I_STORAGE_QUAL.U_STORAGE_QUAL/I_SRLT_NE_1.I_NMU_1_TO_4.U_TCL/I_NMU_EQ4.U_iDOUT/I_NOLUT6.I_SRL_T2.U_SRLC16E ( + .A0(\U0/I_NO_D.U_ILA/U_TRIG/trigCondIn [0]), + .A1(\U0/I_NO_D.U_ILA/U_TRIG/trigCondIn [1]), + .A2(\U0/I_NO_D.U_ILA/U_TRIG/trigCondIn [2]), + .A3(\U0/I_NO_D.U_ILA/U_TRIG/trigCondIn [3]), + .CE(CONTROL[8]), + .CLK(CONTROL[0]), + .D(\U0/I_NO_D.U_ILA/U_TRIG/U_TC/I_STORAGE_QUAL.U_STORAGE_QUAL/I_SRLT_NE_1.I_NMU_1_TO_4.U_TCL/I_NMU_EQ4.U_iDOUT/iCFG_DIN ), + .Q(\U0/I_NO_D.U_ILA/U_TRIG/U_TC/I_STORAGE_QUAL.U_STORAGE_QUAL/I_SRLT_NE_1.I_NMU_1_TO_4.U_TCL/iDOUT ), + .Q15 +(\NLW_U0/I_NO_D.U_ILA/U_TRIG/U_TC/I_STORAGE_QUAL.U_STORAGE_QUAL/I_SRLT_NE_1.I_NMU_1_TO_4.U_TCL/I_NMU_EQ4.U_iDOUT/I_NOLUT6.I_SRL_T2.U_SRLC16E_Q15_UNCONNECTED ) + + ); + LUT2 #( + .INIT ( 4'h8 )) + \U0/I_NO_D.U_ILA/U_TRIG/U_TC/I_STORAGE_QUAL.U_STORAGE_QUAL/I_SRLT_NE_1.I_NMU_1_TO_4.U_TCL/I_NMU_EQ4.U_iDOUT/I_NOLUT6.I_SRL_T2.U_LUT ( + .I0(\U0/I_NO_D.U_ILA/U_TRIG/U_TC/iCFG_DATA [1]), + .I1(CONTROL[8]), + .O(\U0/I_NO_D.U_ILA/U_TRIG/U_TC/I_STORAGE_QUAL.U_STORAGE_QUAL/I_SRLT_NE_1.I_NMU_1_TO_4.U_TCL/I_NMU_EQ4.U_iDOUT/iCFG_DIN ) + ); + SRLC16E #( + .INIT ( 16'h0000 )) + \U0/I_NO_D.U_ILA/U_TRIG/U_TC/I_TSEQ_NEQ2.U_TC_EQUATION/I_SRLT_NE_1.I_NMU_1_TO_4.U_TCL/I_NMU_EQ4.U_iDOUT/I_NOLUT6.I_SRL_T2.U_SRLC16E ( + .A0(\U0/I_NO_D.U_ILA/U_TRIG/trigCondIn [0]), + .A1(\U0/I_NO_D.U_ILA/U_TRIG/trigCondIn [1]), + .A2(\U0/I_NO_D.U_ILA/U_TRIG/trigCondIn [2]), + .A3(\U0/I_NO_D.U_ILA/U_TRIG/trigCondIn [3]), + .CE(CONTROL[8]), + .CLK(CONTROL[0]), + .D(\U0/I_NO_D.U_ILA/U_TRIG/U_TC/I_TSEQ_NEQ2.U_TC_EQUATION/I_SRLT_NE_1.I_NMU_1_TO_4.U_TCL/I_NMU_EQ4.U_iDOUT/iCFG_DIN ), + .Q(\U0/I_NO_D.U_ILA/U_TRIG/U_TC/I_TSEQ_NEQ2.U_TC_EQUATION/I_SRLT_NE_1.I_NMU_1_TO_4.U_TCL/iDOUT ), + .Q15(\U0/I_NO_D.U_ILA/U_TRIG/U_TC/iCFG_DATA [1]) + ); + LUT2 #( + .INIT ( 4'h8 )) + \U0/I_NO_D.U_ILA/U_TRIG/U_TC/I_TSEQ_NEQ2.U_TC_EQUATION/I_SRLT_NE_1.I_NMU_1_TO_4.U_TCL/I_NMU_EQ4.U_iDOUT/I_NOLUT6.I_SRL_T2.U_LUT ( + .I0(CONTROL[1]), + .I1(CONTROL[8]), + .O(\U0/I_NO_D.U_ILA/U_TRIG/U_TC/I_TSEQ_NEQ2.U_TC_EQUATION/I_SRLT_NE_1.I_NMU_1_TO_4.U_TCL/I_NMU_EQ4.U_iDOUT/iCFG_DIN ) + ); + FDPE #( + .INIT ( 1'b1 )) + \U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[2].U_M/U_MU/I_OREG.I_YES_OREG.U_OREG ( + .C(CLK), + .CE(N1), + .D(\U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[2].U_M/U_MU/DOUT_tmp ), + .PRE(\U0/I_NO_D.U_ILA/iRESET [1]), + .Q(\U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[2].U_M/dout_tmp ) + ); + FDS #( + .INIT ( 1'b1 )) + \U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[2].U_M/I_MC_NO.U_NO_MC_REG ( + .C(CLK), + .D(\U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[2].U_M/dout_tmp ), + .S(\U0/I_NO_D.U_ILA/iRESET [2]), + .Q(\U0/I_NO_D.U_ILA/U_TRIG/trigCondIn [2]) + ); + FDPE #( + .INIT ( 1'b1 )) + \U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[1].U_M/U_MU/I_OREG.I_YES_OREG.U_OREG ( + .C(CLK), + .CE(N1), + .D(\U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[1].U_M/U_MU/DOUT_tmp ), + .PRE(\U0/I_NO_D.U_ILA/iRESET [1]), + .Q(\U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[1].U_M/dout_tmp ) + ); + FDS #( + .INIT ( 1'b1 )) + \U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[1].U_M/I_MC_NO.U_NO_MC_REG ( + .C(CLK), + .D(\U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[1].U_M/dout_tmp ), + .S(\U0/I_NO_D.U_ILA/iRESET [2]), + .Q(\U0/I_NO_D.U_ILA/U_TRIG/trigCondIn [1]) + ); + FDPE #( + .INIT ( 1'b1 )) + \U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[0].U_M/U_MU/I_OREG.I_YES_OREG.U_OREG ( + .C(CLK), + .CE(N1), + .D(\U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[0].U_M/U_MU/DOUT_tmp ), + .PRE(\U0/I_NO_D.U_ILA/iRESET [1]), + .Q(\U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[0].U_M/dout_tmp ) + ); + FDS #( + .INIT ( 1'b1 )) + \U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[0].U_M/I_MC_NO.U_NO_MC_REG ( + .C(CLK), + .D(\U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[0].U_M/dout_tmp ), + .S(\U0/I_NO_D.U_ILA/iRESET [2]), + .Q(\U0/I_NO_D.U_ILA/U_TRIG/trigCondIn [0]) + ); + FDPE #( + .INIT ( 1'b1 )) + \U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[3].U_M/U_MU/I_OREG.I_YES_OREG.U_OREG ( + .C(CLK), + .CE(N1), + .D(\U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[3].U_M/U_MU/DOUT_tmp ), + .PRE(\U0/I_NO_D.U_ILA/iRESET [1]), + .Q(\U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[3].U_M/dout_tmp ) + ); + FDS #( + .INIT ( 1'b1 )) + \U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[3].U_M/I_MC_NO.U_NO_MC_REG ( + .C(CLK), + .D(\U0/I_NO_D.U_ILA/U_TRIG/U_TM/G_NMU[3].U_M/dout_tmp ), + .S(\U0/I_NO_D.U_ILA/iRESET [2]), + .Q(\U0/I_NO_D.U_ILA/U_TRIG/trigCondIn [3]) + ); + FDR #( + .INIT ( 1'b0 )) + \U0/I_NO_D.U_ILA/U_TRIG/U_TC/I_STORAGE_QUAL.U_CAP_DLY ( + .C(CLK), + .D(\U0/I_NO_D.U_ILA/U_TRIG/U_TC/iCAPTURE ), + .R(\U0/I_NO_D.U_ILA/iRESET [3]), + .Q(\U0/I_NO_D.U_ILA/iCAPTURE ) + ); + FDR #( + .INIT ( 1'b0 )) + \U0/I_NO_D.U_ILA/U_TRIG/U_TC/I_STORAGE_QUAL.U_STORAGE_QUAL/I_SRLT_NE_1.I_NMU_1_TO_4.U_TCL/I_OUTREG.U_DOUT ( + .C(CLK), + .D(\U0/I_NO_D.U_ILA/U_TRIG/U_TC/I_STORAGE_QUAL.U_STORAGE_QUAL/I_SRLT_NE_1.I_NMU_1_TO_4.U_TCL/iDOUT ), + .R(\U0/I_NO_D.U_ILA/iRESET [3]), + .Q(\U0/I_NO_D.U_ILA/U_TRIG/U_TC/I_STORAGE_QUAL.U_STORAGE_QUAL/iTRIGGER ) + ); + FDR #( + .INIT ( 1'b0 )) + \U0/I_NO_D.U_ILA/U_TRIG/U_TC/I_STORAGE_QUAL.U_STORAGE_QUAL/I_SRLT_NE_1.I_NMU_1_TO_4.U_TRIGQ ( + .C(CLK), + .D(\U0/I_NO_D.U_ILA/U_TRIG/U_TC/I_STORAGE_QUAL.U_STORAGE_QUAL/iTRIGGER ), + .R(\U0/I_NO_D.U_ILA/iRESET [4]), + .Q(\U0/I_NO_D.U_ILA/U_TRIG/U_TC/iCAPTURE ) + ); + FDR #( + .INIT ( 1'b0 )) + \U0/I_NO_D.U_ILA/U_TRIG/U_TC/I_TSEQ_NEQ2.U_TC_EQUATION/I_SRLT_NE_1.I_NMU_1_TO_4.U_TCL/I_OUTREG.U_DOUT ( + .C(CLK), + .D(\U0/I_NO_D.U_ILA/U_TRIG/U_TC/I_TSEQ_NEQ2.U_TC_EQUATION/I_SRLT_NE_1.I_NMU_1_TO_4.U_TCL/iDOUT ), + .R(\U0/I_NO_D.U_ILA/iRESET [3]), + .Q(\U0/I_NO_D.U_ILA/U_TRIG/U_TC/I_TSEQ_NEQ2.U_TC_EQUATION/iTRIGGER ) + ); + FDR #( + .INIT ( 1'b0 )) + \U0/I_NO_D.U_ILA/U_TRIG/U_TC/I_TSEQ_NEQ2.U_TC_EQUATION/I_SRLT_NE_1.I_NMU_1_TO_4.U_TRIGQ ( + .C(CLK), + .D(\U0/I_NO_D.U_ILA/U_TRIG/U_TC/I_TSEQ_NEQ2.U_TC_EQUATION/iTRIGGER ), + .R(\U0/I_NO_D.U_ILA/iRESET [4]), + .Q(\U0/I_NO_D.U_ILA/U_TRIG/trigCondOut ) + ); + FDR #( + .INIT ( 1'b0 )) + \U0/I_NO_D.U_ILA/U_TRIG/F_NO_TCMC.U_FDR ( + .C(CLK), + .D(\U0/I_NO_D.U_ILA/U_TRIG/trigCondOut ), + .R(\U0/I_NO_D.U_ILA/iRESET [5]), + .Q(\U0/I_NO_D.U_ILA/iTRIGGER ) + ); + FDP #( + .INIT ( 1'b1 )) + \U0/I_TQ3.G_TW[3].U_TQ ( + .C(CLK), + .D(TRIG3[3]), + .PRE(N0), + .Q(\U0/iTRIG_IN [27]) + ); + FDP #( + .INIT ( 1'b1 )) + \U0/I_TQ3.G_TW[2].U_TQ ( + .C(CLK), + .D(TRIG3[2]), + .PRE(N0), + .Q(\U0/iTRIG_IN [26]) + ); + FDP #( + .INIT ( 1'b1 )) + \U0/I_TQ3.G_TW[1].U_TQ ( + .C(CLK), + .D(TRIG3[1]), + .PRE(N0), + .Q(\U0/iTRIG_IN [25]) + ); + FDP #( + .INIT ( 1'b1 )) + \U0/I_TQ3.G_TW[0].U_TQ ( + .C(CLK), + .D(TRIG3[0]), + .PRE(N0), + .Q(\U0/iTRIG_IN [24]) + ); + FDP #( + .INIT ( 1'b1 )) + \U0/I_TQ2.G_TW[7].U_TQ ( + .C(CLK), + .D(TRIG2[7]), + .PRE(N0), + .Q(\U0/iTRIG_IN [23]) + ); + FDP #( + .INIT ( 1'b1 )) + \U0/I_TQ2.G_TW[6].U_TQ ( + .C(CLK), + .D(TRIG2[6]), + .PRE(N0), + .Q(\U0/iTRIG_IN [22]) + ); + FDP #( + .INIT ( 1'b1 )) + \U0/I_TQ2.G_TW[5].U_TQ ( + .C(CLK), + .D(TRIG2[5]), + .PRE(N0), + .Q(\U0/iTRIG_IN [21]) + ); + FDP #( + .INIT ( 1'b1 )) + \U0/I_TQ2.G_TW[4].U_TQ ( + .C(CLK), + .D(TRIG2[4]), + .PRE(N0), + .Q(\U0/iTRIG_IN [20]) + ); + FDP #( + .INIT ( 1'b1 )) + \U0/I_TQ2.G_TW[3].U_TQ ( + .C(CLK), + .D(TRIG2[3]), + .PRE(N0), + .Q(\U0/iTRIG_IN [19]) + ); + FDP #( + .INIT ( 1'b1 )) + \U0/I_TQ2.G_TW[2].U_TQ ( + .C(CLK), + .D(TRIG2[2]), + .PRE(N0), + .Q(\U0/iTRIG_IN [18]) + ); + FDP #( + .INIT ( 1'b1 )) + \U0/I_TQ2.G_TW[1].U_TQ ( + .C(CLK), + .D(TRIG2[1]), + .PRE(N0), + .Q(\U0/iTRIG_IN [17]) + ); + FDP #( + .INIT ( 1'b1 )) + \U0/I_TQ2.G_TW[0].U_TQ ( + .C(CLK), + .D(TRIG2[0]), + .PRE(N0), + .Q(\U0/iTRIG_IN [16]) + ); + FDP #( + .INIT ( 1'b1 )) + \U0/I_TQ1.G_TW[7].U_TQ ( + .C(CLK), + .D(TRIG1[7]), + .PRE(N0), + .Q(\U0/iTRIG_IN [15]) + ); + FDP #( + .INIT ( 1'b1 )) + \U0/I_TQ1.G_TW[6].U_TQ ( + .C(CLK), + .D(TRIG1[6]), + .PRE(N0), + .Q(\U0/iTRIG_IN [14]) + ); + FDP #( + .INIT ( 1'b1 )) + \U0/I_TQ1.G_TW[5].U_TQ ( + .C(CLK), + .D(TRIG1[5]), + .PRE(N0), + .Q(\U0/iTRIG_IN [13]) + ); + FDP #( + .INIT ( 1'b1 )) + \U0/I_TQ1.G_TW[4].U_TQ ( + .C(CLK), + .D(TRIG1[4]), + .PRE(N0), + .Q(\U0/iTRIG_IN [12]) + ); + FDP #( + .INIT ( 1'b1 )) + \U0/I_TQ1.G_TW[3].U_TQ ( + .C(CLK), + .D(TRIG1[3]), + .PRE(N0), + .Q(\U0/iTRIG_IN [11]) + ); + FDP #( + .INIT ( 1'b1 )) + \U0/I_TQ1.G_TW[2].U_TQ ( + .C(CLK), + .D(TRIG1[2]), + .PRE(N0), + .Q(\U0/iTRIG_IN [10]) + ); + FDP #( + .INIT ( 1'b1 )) + \U0/I_TQ1.G_TW[1].U_TQ ( + .C(CLK), + .D(TRIG1[1]), + .PRE(N0), + .Q(\U0/iTRIG_IN [9]) + ); + FDP #( + .INIT ( 1'b1 )) + \U0/I_TQ1.G_TW[0].U_TQ ( + .C(CLK), + .D(TRIG1[0]), + .PRE(N0), + .Q(\U0/iTRIG_IN [8]) + ); + FDP #( + .INIT ( 1'b1 )) + \U0/I_TQ0.G_TW[7].U_TQ ( + .C(CLK), + .D(TRIG0[7]), + .PRE(N0), + .Q(\U0/iTRIG_IN [7]) + ); + FDP #( + .INIT ( 1'b1 )) + \U0/I_TQ0.G_TW[6].U_TQ ( + .C(CLK), + .D(TRIG0[6]), + .PRE(N0), + .Q(\U0/iTRIG_IN [6]) + ); + FDP #( + .INIT ( 1'b1 )) + \U0/I_TQ0.G_TW[5].U_TQ ( + .C(CLK), + .D(TRIG0[5]), + .PRE(N0), + .Q(\U0/iTRIG_IN [5]) + ); + FDP #( + .INIT ( 1'b1 )) + \U0/I_TQ0.G_TW[4].U_TQ ( + .C(CLK), + .D(TRIG0[4]), + .PRE(N0), + .Q(\U0/iTRIG_IN [4]) + ); + FDP #( + .INIT ( 1'b1 )) + \U0/I_TQ0.G_TW[3].U_TQ ( + .C(CLK), + .D(TRIG0[3]), + .PRE(N0), + .Q(\U0/iTRIG_IN [3]) + ); + FDP #( + .INIT ( 1'b1 )) + \U0/I_TQ0.G_TW[2].U_TQ ( + .C(CLK), + .D(TRIG0[2]), + .PRE(N0), + .Q(\U0/iTRIG_IN [2]) + ); + FDP #( + .INIT ( 1'b1 )) + \U0/I_TQ0.G_TW[1].U_TQ ( + .C(CLK), + .D(TRIG0[1]), + .PRE(N0), + .Q(\U0/iTRIG_IN [1]) + ); + FDP #( + .INIT ( 1'b1 )) + \U0/I_TQ0.G_TW[0].U_TQ ( + .C(CLK), + .D(TRIG0[0]), + .PRE(N0), + .Q(\U0/iTRIG_IN [0]) + ); + LUT2 #( + .INIT ( 4'h8 )) + \U0/U_XST_CONTROLBUS_WORKAROUND/CONTROL_XST_WORKAROUND_O_cmp_eq0000_wg_lut<0> ( + .I0(CONTROL[10]), + .I1(CONTROL[11]), + .O(\U0/U_XST_CONTROLBUS_WORKAROUND/CONTROL_XST_WORKAROUND_O_cmp_eq0000_wg_lut [0]) + ); + MUXCY \U0/U_XST_CONTROLBUS_WORKAROUND/CONTROL_XST_WORKAROUND_O_cmp_eq0000_wg_cy<0> ( + .CI(N1), + .DI(N0), + .S(\U0/U_XST_CONTROLBUS_WORKAROUND/CONTROL_XST_WORKAROUND_O_cmp_eq0000_wg_lut [0]), + .O(\U0/U_XST_CONTROLBUS_WORKAROUND/CONTROL_XST_WORKAROUND_O_cmp_eq0000_wg_cy [0]) + ); + LUT4 #( + .INIT ( 16'h8000 )) + \U0/U_XST_CONTROLBUS_WORKAROUND/CONTROL_XST_WORKAROUND_O_cmp_eq0000_wg_lut<1> ( + .I0(CONTROL[12]), + .I1(CONTROL[13]), + .I2(CONTROL[9]), + .I3(CONTROL[14]), + .O(\U0/U_XST_CONTROLBUS_WORKAROUND/CONTROL_XST_WORKAROUND_O_cmp_eq0000_wg_lut [1]) + ); + MUXCY \U0/U_XST_CONTROLBUS_WORKAROUND/CONTROL_XST_WORKAROUND_O_cmp_eq0000_wg_cy<1> ( + .CI(\U0/U_XST_CONTROLBUS_WORKAROUND/CONTROL_XST_WORKAROUND_O_cmp_eq0000_wg_cy [0]), + .DI(N0), + .S(\U0/U_XST_CONTROLBUS_WORKAROUND/CONTROL_XST_WORKAROUND_O_cmp_eq0000_wg_lut [1]), + .O(\U0/U_XST_CONTROLBUS_WORKAROUND/CONTROL_XST_WORKAROUND_O_cmp_eq0000_wg_cy [1]) + ); + LUT4 #( + .INIT ( 16'h8000 )) + \U0/U_XST_CONTROLBUS_WORKAROUND/CONTROL_XST_WORKAROUND_O_cmp_eq0000_wg_lut<2> ( + .I0(CONTROL[15]), + .I1(CONTROL[16]), + .I2(CONTROL[8]), + .I3(CONTROL[17]), + .O(\U0/U_XST_CONTROLBUS_WORKAROUND/CONTROL_XST_WORKAROUND_O_cmp_eq0000_wg_lut [2]) + ); + MUXCY \U0/U_XST_CONTROLBUS_WORKAROUND/CONTROL_XST_WORKAROUND_O_cmp_eq0000_wg_cy<2> ( + .CI(\U0/U_XST_CONTROLBUS_WORKAROUND/CONTROL_XST_WORKAROUND_O_cmp_eq0000_wg_cy [1]), + .DI(N0), + .S(\U0/U_XST_CONTROLBUS_WORKAROUND/CONTROL_XST_WORKAROUND_O_cmp_eq0000_wg_lut [2]), + .O(\U0/U_XST_CONTROLBUS_WORKAROUND/CONTROL_XST_WORKAROUND_O_cmp_eq0000_wg_cy [2]) + ); + LUT4 #( + .INIT ( 16'h8000 )) + \U0/U_XST_CONTROLBUS_WORKAROUND/CONTROL_XST_WORKAROUND_O_cmp_eq0000_wg_lut<3> ( + .I0(CONTROL[18]), + .I1(CONTROL[21]), + .I2(CONTROL[7]), + .I3(CONTROL[19]), + .O(\U0/U_XST_CONTROLBUS_WORKAROUND/CONTROL_XST_WORKAROUND_O_cmp_eq0000_wg_lut [3]) + ); + MUXCY \U0/U_XST_CONTROLBUS_WORKAROUND/CONTROL_XST_WORKAROUND_O_cmp_eq0000_wg_cy<3> ( + .CI(\U0/U_XST_CONTROLBUS_WORKAROUND/CONTROL_XST_WORKAROUND_O_cmp_eq0000_wg_cy [2]), + .DI(N0), + .S(\U0/U_XST_CONTROLBUS_WORKAROUND/CONTROL_XST_WORKAROUND_O_cmp_eq0000_wg_lut [3]), + .O(\U0/U_XST_CONTROLBUS_WORKAROUND/CONTROL_XST_WORKAROUND_O_cmp_eq0000_wg_cy [3]) + ); + LUT4 #( + .INIT ( 16'h8000 )) + \U0/U_XST_CONTROLBUS_WORKAROUND/CONTROL_XST_WORKAROUND_O_cmp_eq0000_wg_lut<4> ( + .I0(CONTROL[20]), + .I1(CONTROL[22]), + .I2(CONTROL[6]), + .I3(CONTROL[23]), + .O(\U0/U_XST_CONTROLBUS_WORKAROUND/CONTROL_XST_WORKAROUND_O_cmp_eq0000_wg_lut [4]) + ); + MUXCY \U0/U_XST_CONTROLBUS_WORKAROUND/CONTROL_XST_WORKAROUND_O_cmp_eq0000_wg_cy<4> ( + .CI(\U0/U_XST_CONTROLBUS_WORKAROUND/CONTROL_XST_WORKAROUND_O_cmp_eq0000_wg_cy [3]), + .DI(N0), + .S(\U0/U_XST_CONTROLBUS_WORKAROUND/CONTROL_XST_WORKAROUND_O_cmp_eq0000_wg_lut [4]), + .O(\U0/U_XST_CONTROLBUS_WORKAROUND/CONTROL_XST_WORKAROUND_O_cmp_eq0000_wg_cy [4]) + ); + LUT4 #( + .INIT ( 16'h8000 )) + \U0/U_XST_CONTROLBUS_WORKAROUND/CONTROL_XST_WORKAROUND_O_cmp_eq0000_wg_lut<5> ( + .I0(CONTROL[24]), + .I1(CONTROL[25]), + .I2(CONTROL[5]), + .I3(CONTROL[26]), + .O(\U0/U_XST_CONTROLBUS_WORKAROUND/CONTROL_XST_WORKAROUND_O_cmp_eq0000_wg_lut [5]) + ); + MUXCY \U0/U_XST_CONTROLBUS_WORKAROUND/CONTROL_XST_WORKAROUND_O_cmp_eq0000_wg_cy<5> ( + .CI(\U0/U_XST_CONTROLBUS_WORKAROUND/CONTROL_XST_WORKAROUND_O_cmp_eq0000_wg_cy [4]), + .DI(N0), + .S(\U0/U_XST_CONTROLBUS_WORKAROUND/CONTROL_XST_WORKAROUND_O_cmp_eq0000_wg_lut [5]), + .O(\U0/U_XST_CONTROLBUS_WORKAROUND/CONTROL_XST_WORKAROUND_O_cmp_eq0000_wg_cy [5]) + ); + LUT4 #( + .INIT ( 16'h8000 )) + \U0/U_XST_CONTROLBUS_WORKAROUND/CONTROL_XST_WORKAROUND_O_cmp_eq0000_wg_lut<6> ( + .I0(CONTROL[27]), + .I1(CONTROL[28]), + .I2(CONTROL[2]), + .I3(CONTROL[29]), + .O(\U0/U_XST_CONTROLBUS_WORKAROUND/CONTROL_XST_WORKAROUND_O_cmp_eq0000_wg_lut [6]) + ); + MUXCY \U0/U_XST_CONTROLBUS_WORKAROUND/CONTROL_XST_WORKAROUND_O_cmp_eq0000_wg_cy<6> ( + .CI(\U0/U_XST_CONTROLBUS_WORKAROUND/CONTROL_XST_WORKAROUND_O_cmp_eq0000_wg_cy [5]), + .DI(N0), + .S(\U0/U_XST_CONTROLBUS_WORKAROUND/CONTROL_XST_WORKAROUND_O_cmp_eq0000_wg_lut [6]), + .O(\U0/U_XST_CONTROLBUS_WORKAROUND/CONTROL_XST_WORKAROUND_O_cmp_eq0000_wg_cy [6]) + ); + LUT4 #( + .INIT ( 16'h8000 )) + \U0/U_XST_CONTROLBUS_WORKAROUND/CONTROL_XST_WORKAROUND_O_cmp_eq0000_wg_lut<7> ( + .I0(CONTROL[30]), + .I1(CONTROL[31]), + .I2(CONTROL[1]), + .I3(CONTROL[32]), + .O(\U0/U_XST_CONTROLBUS_WORKAROUND/CONTROL_XST_WORKAROUND_O_cmp_eq0000_wg_lut [7]) + ); + MUXCY \U0/U_XST_CONTROLBUS_WORKAROUND/CONTROL_XST_WORKAROUND_O_cmp_eq0000_wg_cy<7> ( + .CI(\U0/U_XST_CONTROLBUS_WORKAROUND/CONTROL_XST_WORKAROUND_O_cmp_eq0000_wg_cy [6]), + .DI(N0), + .S(\U0/U_XST_CONTROLBUS_WORKAROUND/CONTROL_XST_WORKAROUND_O_cmp_eq0000_wg_lut [7]), + .O(\U0/U_XST_CONTROLBUS_WORKAROUND/CONTROL_XST_WORKAROUND_O_cmp_eq0000_wg_cy [7]) + ); + LUT4 #( + .INIT ( 16'h8000 )) + \U0/U_XST_CONTROLBUS_WORKAROUND/CONTROL_XST_WORKAROUND_O_cmp_eq0000_wg_lut<8> ( + .I0(CONTROL[33]), + .I1(CONTROL[34]), + .I2(CONTROL[4]), + .I3(CONTROL[35]), + .O(\U0/U_XST_CONTROLBUS_WORKAROUND/CONTROL_XST_WORKAROUND_O_cmp_eq0000_wg_lut [8]) + ); + MUXCY \U0/U_XST_CONTROLBUS_WORKAROUND/CONTROL_XST_WORKAROUND_O_cmp_eq0000_wg_cy<8> ( + .CI(\U0/U_XST_CONTROLBUS_WORKAROUND/CONTROL_XST_WORKAROUND_O_cmp_eq0000_wg_cy [7]), + .DI(N0), + .S(\U0/U_XST_CONTROLBUS_WORKAROUND/CONTROL_XST_WORKAROUND_O_cmp_eq0000_wg_lut [8]), + .O(\U0/U_XST_CONTROLBUS_WORKAROUND/CONTROL_XST_WORKAROUND_O_cmp_eq0000_wg_cy [8]) + ); + LUT4 #( + .INIT ( 16'hFEFF )) + \U0/I_NO_D.U_ILA/U_STAT/iSTAT_CNT<2>1 ( + .I0(\U0/I_NO_D.U_ILA/U_STAT/iSTAT_CNT [2]), + .I1(\U0/I_NO_D.U_ILA/U_STAT/iSTAT_CNT [0]), + .I2(\U0/I_NO_D.U_ILA/U_STAT/iSTAT_CNT [1]), + .I3(\U0/I_NO_D.U_ILA/U_STAT/NS_dstat [8]), + .O(\U0/I_NO_D.U_ILA/U_STAT/iSTAT_CNT<2>1_537 ) + ); + LUT3 #( + .INIT ( 8'hE4 )) + \U0/I_NO_D.U_ILA/U_STAT/DIRTY_dstat1 ( + .I0(\U0/I_NO_D.U_ILA/U_STAT/DIRTY_SEL ), + .I1(\U0/I_NO_D.U_ILA/U_STAT/DIRTY_D0 ), + .I2(\U0/I_NO_D.U_ILA/U_STAT/DIRTY_D1 ), + .O(\U0/I_NO_D.U_ILA/U_STAT/DIRTY_dstat ) + ); + LUT2 #( + .INIT ( 4'h2 )) + \U0/I_NO_D.U_ILA/U_STAT/U_MUX/U_CS_MUX/I1.U_MUX2/O2 ( + .I0(\U0/I_NO_D.U_ILA/U_STAT/iSTAT_CNT [9]), + .I1(\U0/U_XST_CONTROLBUS_WORKAROUND/CONTROL_XST_WORKAROUND_O_cmp_eq0000_wg_cy [8]), + .O(\U0/I_NO_D.U_ILA/U_STAT/U_MUX/U_CS_MUX/I1.U_MUX2/O2_464 ) + ); + LUT4 #( + .INIT ( 16'h0001 )) + \U0/I_NO_D.U_ILA/U_STAT/U_MUX/U_CS_MUX/I1.U_MUX2/O15 ( + .I0(\U0/I_NO_D.U_ILA/U_STAT/iSTAT_CNT [7]), + .I1(\U0/I_NO_D.U_ILA/U_STAT/iSTAT_CNT [6]), + .I2(\U0/I_NO_D.U_ILA/U_STAT/iSTAT_CNT [5]), + .I3(\U0/I_NO_D.U_ILA/U_STAT/iSTAT_CNT [4]), + .O(\U0/I_NO_D.U_ILA/U_STAT/U_MUX/U_CS_MUX/I1.U_MUX2/O15_463 ) + ); + LUT4 #( + .INIT ( 16'hFFFE )) + \U0/I_NO_D.U_ILA/U_STAT/U_MUX/U_CS_MUX/I1.U_MUX2/O26 ( + .I0(\U0/I_NO_D.U_ILA/U_STAT/iSTAT_CNT [7]), + .I1(\U0/I_NO_D.U_ILA/U_STAT/iSTAT_CNT [6]), + .I2(\U0/I_NO_D.U_ILA/U_STAT/iSTAT_CNT [5]), + .I3(\U0/I_NO_D.U_ILA/U_STAT/iSTAT_CNT [4]), + .O(\U0/I_NO_D.U_ILA/U_STAT/U_MUX/U_CS_MUX/I1.U_MUX2/O26_465 ) + ); + LUT4 #( + .INIT ( 16'hF222 )) + \U0/I_NO_D.U_ILA/U_STAT/U_MUX/U_CS_MUX/I1.U_MUX2/O36 ( + .I0(\U0/I_NO_D.U_ILA/U_STAT/U_MUX/U_CS_MUX/I1.U_MUX2/O26_465 ), + .I1(\U0/U_XST_CONTROLBUS_WORKAROUND/CONTROL_XST_WORKAROUND_O_cmp_eq0000_wg_cy [8]), + .I2(\U0/I_NO_D.U_ILA/U_STAT/U_MUX/U_CS_MUX/I1.U_MUX2/O15_463 ), + .I3(\U0/I_NO_D.U_ILA/U_STAT/iSTAT [16]), + .O(\U0/I_NO_D.U_ILA/U_STAT/U_MUX/U_CS_MUX/I1.U_MUX2/O36_466 ) + ); + LUT4 #( + .INIT ( 16'hAF8D )) + \U0/I_NO_D.U_ILA/U_STAT/U_MUX/U_CS_MUX/I1.U_MUX2/O129 ( + .I0(CONTROL[4]), + .I1(\U0/I_NO_D.U_ILA/U_STAT/U_MUX/U_CS_MUX/I1.U_MUX2/O2_464 ), + .I2(\U0/I_NO_D.U_ILA/U_STAT/TDO_mux_in<0>1 ), + .I3(\U0/I_NO_D.U_ILA/U_STAT/U_MUX/U_CS_MUX/I1.U_MUX2/O82_467 ), + .O(\U0/I_NO_D.U_ILA/U_STAT/TDO_next ) + ); + MUXF5 \U0/I_NO_D.U_ILA/U_STAT/U_DMUX/U_CS_MUX/I3.U_MUX8/Mmux_O_91 ( + .I0(N38), + .I1(N39), + .S(\U0/I_NO_D.U_ILA/U_STAT/iSTAT_CNT [0]), + .O(\U0/I_NO_D.U_ILA/U_STAT/U_DMUX/U_CS_MUX/I3.U_MUX8/Mmux_O_91_455 ) + ); + LUT3 #( + .INIT ( 8'h15 )) + \U0/I_NO_D.U_ILA/U_STAT/U_DMUX/U_CS_MUX/I3.U_MUX8/Mmux_O_91_F ( + .I0(\U0/I_NO_D.U_ILA/U_STAT/iSTAT_CNT [2]), + .I1(\U0/I_NO_D.U_ILA/U_STAT/iSTAT_CNT [1]), + .I2(\U0/I_NO_D.U_ILA/U_STAT/DIRTY_dstat ), + .O(N38) + ); + LUT4 #( + .INIT ( 16'h0145 )) + \U0/I_NO_D.U_ILA/U_STAT/U_DMUX/U_CS_MUX/I3.U_MUX8/Mmux_O_91_G ( + .I0(\U0/I_NO_D.U_ILA/U_STAT/iSTAT_CNT [2]), + .I1(\U0/I_NO_D.U_ILA/U_STAT/iSTAT_CNT [1]), + .I2(\U0/I_NO_D.U_ILA/U_STAT/EXTCAP_READY_dstat ), + .I3(\U0/I_NO_D.U_ILA/U_STAT/ACT_dstat ), + .O(N39) + ); + LUT4_L #( + .INIT ( 16'h3F50 )) + \U0/I_NO_D.U_ILA/U_STAT/iSTAT_CNT<1>1 ( + .I0(\U0/I_NO_D.U_ILA/U_STAT/ARM_dstat ), + .I1(\U0/I_NO_D.U_ILA/U_STAT/TRIGGER_dstat ), + .I2(\U0/I_NO_D.U_ILA/U_STAT/iSTAT_CNT [1]), + .I3(\U0/I_NO_D.U_ILA/U_STAT/iSTAT_CNT [0]), + .LO(\U0/I_NO_D.U_ILA/U_STAT/iSTAT_CNT<1>1_535 ) + ); + LUT4_L #( + .INIT ( 16'h3120 )) + \U0/I_NO_D.U_ILA/U_STAT/U_MUX/U_CS_MUX/I1.U_MUX2/O82 ( + .I0(\U0/I_NO_D.U_ILA/U_STAT/iSTAT_CNT [8]), + .I1(\U0/I_NO_D.U_ILA/U_STAT/iSTAT_CNT [9]), + .I2(\U0/I_NO_D.U_ILA/U_STAT/U_MUX/U_CS_MUX/I1.U_MUX2/O36_466 ), + .I3(\U0/I_NO_D.U_ILA/U_STAT/U_SMUX/U_CS_MUX/I6.U_MUX64/Mmux_O_8_f7_483 ), + .LO(\U0/I_NO_D.U_ILA/U_STAT/U_MUX/U_CS_MUX/I1.U_MUX2/O82_467 ) + ); + RAMB16_S1_S36 #( + .INIT_B ( 36'h000000000 ), + .INITP_00 ( 256'h0000000000000000000000000000000000000000000000000000000000000000 ), + .INITP_01 ( 256'h0000000000000000000000000000000000000000000000000000000000000000 ), + .INITP_02 ( 256'h0000000000000000000000000000000000000000000000000000000000000000 ), + .INITP_03 ( 256'h0000000000000000000000000000000000000000000000000000000000000000 ), + .INITP_04 ( 256'h0000000000000000000000000000000000000000000000000000000000000000 ), + .INITP_05 ( 256'h0000000000000000000000000000000000000000000000000000000000000000 ), + .INITP_06 ( 256'h0000000000000000000000000000000000000000000000000000000000000000 ), + .INIT_00 ( 256'h0000000000000000000000000000000000000000000000000000000000000000 ), + .INIT_01 ( 256'h0000000000000000000000000000000000000000000000000000000000000000 ), + .INIT_02 ( 256'h0000000000000000000000000000000000000000000000000000000000000000 ), + .INIT_03 ( 256'h0000000000000000000000000000000000000000000000000000000000000000 ), + .INIT_04 ( 256'h0000000000000000000000000000000000000000000000000000000000000000 ), + .INIT_05 ( 256'h0000000000000000000000000000000000000000000000000000000000000000 ), + .INIT_06 ( 256'h0000000000000000000000000000000000000000000000000000000000000000 ), + .INIT_07 ( 256'h0000000000000000000000000000000000000000000000000000000000000000 ), + .INIT_08 ( 256'h0000000000000000000000000000000000000000000000000000000000000000 ), + .INIT_09 ( 256'h0000000000000000000000000000000000000000000000000000000000000000 ), + .INIT_0A ( 256'h0000000000000000000000000000000000000000000000000000000000000000 ), + .INIT_0B ( 256'h0000000000000000000000000000000000000000000000000000000000000000 ), + .INIT_0C ( 256'h0000000000000000000000000000000000000000000000000000000000000000 ), + .INIT_0D ( 256'h0000000000000000000000000000000000000000000000000000000000000000 ), + .INIT_0E ( 256'h0000000000000000000000000000000000000000000000000000000000000000 ), + .INIT_0F ( 256'h0000000000000000000000000000000000000000000000000000000000000000 ), + .INIT_10 ( 256'h0000000000000000000000000000000000000000000000000000000000000000 ), + .INIT_11 ( 256'h0000000000000000000000000000000000000000000000000000000000000000 ), + .INIT_12 ( 256'h0000000000000000000000000000000000000000000000000000000000000000 ), + .INIT_13 ( 256'h0000000000000000000000000000000000000000000000000000000000000000 ), + .INIT_14 ( 256'h0000000000000000000000000000000000000000000000000000000000000000 ), + .INIT_15 ( 256'h0000000000000000000000000000000000000000000000000000000000000000 ), + .INIT_16 ( 256'h0000000000000000000000000000000000000000000000000000000000000000 ), + .INIT_17 ( 256'h0000000000000000000000000000000000000000000000000000000000000000 ), + .INIT_18 ( 256'h0000000000000000000000000000000000000000000000000000000000000000 ), + .INIT_19 ( 256'h0000000000000000000000000000000000000000000000000000000000000000 ), + .INIT_1A ( 256'h0000000000000000000000000000000000000000000000000000000000000000 ), + .INIT_1B ( 256'h0000000000000000000000000000000000000000000000000000000000000000 ), + .INIT_1C ( 256'h0000000000000000000000000000000000000000000000000000000000000000 ), + .INIT_1D ( 256'h0000000000000000000000000000000000000000000000000000000000000000 ), + .INIT_1E ( 256'h0000000000000000000000000000000000000000000000000000000000000000 ), + .INIT_1F ( 256'h0000000000000000000000000000000000000000000000000000000000000000 ), + .INIT_20 ( 256'h0000000000000000000000000000000000000000000000000000000000000000 ), + .INIT_21 ( 256'h0000000000000000000000000000000000000000000000000000000000000000 ), + .INIT_22 ( 256'h0000000000000000000000000000000000000000000000000000000000000000 ), + .INIT_23 ( 256'h0000000000000000000000000000000000000000000000000000000000000000 ), + .INIT_24 ( 256'h0000000000000000000000000000000000000000000000000000000000000000 ), + .INIT_25 ( 256'h0000000000000000000000000000000000000000000000000000000000000000 ), + .INIT_26 ( 256'h0000000000000000000000000000000000000000000000000000000000000000 ), + .INIT_27 ( 256'h0000000000000000000000000000000000000000000000000000000000000000 ), + .INIT_28 ( 256'h0000000000000000000000000000000000000000000000000000000000000000 ), + .INIT_29 ( 256'h0000000000000000000000000000000000000000000000000000000000000000 ), + .INIT_2A ( 256'h0000000000000000000000000000000000000000000000000000000000000000 ), + .INIT_2B ( 256'h0000000000000000000000000000000000000000000000000000000000000000 ), + .INIT_2C ( 256'h0000000000000000000000000000000000000000000000000000000000000000 ), + .INIT_2D ( 256'h0000000000000000000000000000000000000000000000000000000000000000 ), + .INIT_2E ( 256'h0000000000000000000000000000000000000000000000000000000000000000 ), + .INIT_2F ( 256'h0000000000000000000000000000000000000000000000000000000000000000 ), + .INIT_30 ( 256'h0000000000000000000000000000000000000000000000000000000000000000 ), + .INIT_31 ( 256'h0000000000000000000000000000000000000000000000000000000000000000 ), + .INIT_32 ( 256'h0000000000000000000000000000000000000000000000000000000000000000 ), + .INIT_33 ( 256'h0000000000000000000000000000000000000000000000000000000000000000 ), + .INIT_34 ( 256'h0000000000000000000000000000000000000000000000000000000000000000 ), + .INIT_35 ( 256'h0000000000000000000000000000000000000000000000000000000000000000 ), + .INIT_36 ( 256'h0000000000000000000000000000000000000000000000000000000000000000 ), + .INIT_37 ( 256'h0000000000000000000000000000000000000000000000000000000000000000 ), + .INIT_38 ( 256'h0000000000000000000000000000000000000000000000000000000000000000 ), + .INIT_39 ( 256'h0000000000000000000000000000000000000000000000000000000000000000 ), + .INIT_3A ( 256'h0000000000000000000000000000000000000000000000000000000000000000 ), + .INIT_3B ( 256'h0000000000000000000000000000000000000000000000000000000000000000 ), + .INIT_3C ( 256'h0000000000000000000000000000000000000000000000000000000000000000 ), + .INIT_3D ( 256'h0000000000000000000000000000000000000000000000000000000000000000 ), + .INIT_3E ( 256'h0000000000000000000000000000000000000000000000000000000000000000 ), + .INIT_3F ( 256'h0000000000000000000000000000000000000000000000000000000000000000 ), + .INIT_A ( 1'h0 ), + .SIM_COLLISION_CHECK ( "ALL" ), + .INITP_07 ( 256'h0000000000000000000000000000000000000000000000000000000000000000 ), + .SRVAL_A ( 1'h0 ), + .WRITE_MODE_A ( "WRITE_FIRST" ), + .WRITE_MODE_B ( "WRITE_FIRST" ), + .SRVAL_B ( 36'h000000000 )) + \U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.U_RAM/G_BRAM[0].U_BRAM/ram_rt1_s1_s32_if.ram_rt1_s1_s32_i ( + .CLKA(CONTROL[0]), + .CLKB(CLK), + .ENA(CONTROL[6]), + .ENB(N1), + .WEB(\U0/I_NO_D.U_ILA/iCAP_WR_EN ), + .SSRA(N0), + .SSRB(N0), + .WEA(N0), + .DIPB({N0, N0, N0, N0}), + .ADDRA({\U0/I_NO_D.U_ILA/U_CAPSTOR/RD_ADDR [13], \U0/I_NO_D.U_ILA/U_CAPSTOR/RD_ADDR [12], \U0/I_NO_D.U_ILA/U_CAPSTOR/RD_ADDR [11], +\U0/I_NO_D.U_ILA/U_CAPSTOR/RD_ADDR [10], \U0/I_NO_D.U_ILA/U_CAPSTOR/RD_ADDR [9], \U0/I_NO_D.U_ILA/U_CAPSTOR/RD_ADDR [8], +\U0/I_NO_D.U_ILA/U_CAPSTOR/RD_ADDR [7], \U0/I_NO_D.U_ILA/U_CAPSTOR/RD_ADDR [6], \U0/I_NO_D.U_ILA/U_CAPSTOR/RD_ADDR [5], +\U0/I_NO_D.U_ILA/U_CAPSTOR/RD_ADDR [4], \U0/I_NO_D.U_ILA/U_CAPSTOR/RD_ADDR [3], \U0/I_NO_D.U_ILA/U_CAPSTOR/RD_ADDR [2], +\U0/I_NO_D.U_ILA/U_CAPSTOR/RD_ADDR [1], \U0/I_NO_D.U_ILA/U_CAPSTOR/RD_ADDR [0]}), + .ADDRB({\U0/I_NO_D.U_ILA/iCAP_WR_ADDR [8], \U0/I_NO_D.U_ILA/iCAP_WR_ADDR [7], \U0/I_NO_D.U_ILA/iCAP_WR_ADDR [6], \U0/I_NO_D.U_ILA/iCAP_WR_ADDR [5] +, \U0/I_NO_D.U_ILA/iCAP_WR_ADDR [4], \U0/I_NO_D.U_ILA/iCAP_WR_ADDR [3], \U0/I_NO_D.U_ILA/iCAP_WR_ADDR [2], \U0/I_NO_D.U_ILA/iCAP_WR_ADDR [1], +\U0/I_NO_D.U_ILA/iCAP_WR_ADDR [0]}), + .DIB({N0, N0, N0, \U0/I_NO_D.U_ILA/iDATA [27], \U0/I_NO_D.U_ILA/iDATA [26], \U0/I_NO_D.U_ILA/iDATA [25], \U0/I_NO_D.U_ILA/iDATA [24], +\U0/I_NO_D.U_ILA/iDATA [23], \U0/I_NO_D.U_ILA/iDATA [22], \U0/I_NO_D.U_ILA/iDATA [21], \U0/I_NO_D.U_ILA/iDATA [20], \U0/I_NO_D.U_ILA/iDATA [19], +\U0/I_NO_D.U_ILA/iDATA [18], \U0/I_NO_D.U_ILA/iDATA [17], \U0/I_NO_D.U_ILA/iDATA [16], \U0/I_NO_D.U_ILA/iDATA [15], \U0/I_NO_D.U_ILA/iDATA [14], +\U0/I_NO_D.U_ILA/iDATA [13], \U0/I_NO_D.U_ILA/iDATA [12], \U0/I_NO_D.U_ILA/iDATA [11], \U0/I_NO_D.U_ILA/iDATA [10], \U0/I_NO_D.U_ILA/iDATA [9], +\U0/I_NO_D.U_ILA/iDATA [8], \U0/I_NO_D.U_ILA/iDATA [7], \U0/I_NO_D.U_ILA/iDATA [6], \U0/I_NO_D.U_ILA/iDATA [5], \U0/I_NO_D.U_ILA/iDATA [4], +\U0/I_NO_D.U_ILA/iDATA [3], \U0/I_NO_D.U_ILA/iDATA [2], \U0/I_NO_D.U_ILA/iDATA [1], \U0/I_NO_D.U_ILA/iDATA [0], \U0/I_NO_D.U_ILA/iCAP_TRIGGER_OUT }), + .DOA({\U0/I_NO_D.U_ILA/iDATA_DOUT }), + .DIA({N0}), + .DOB({\NLW_U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.U_RAM/G_BRAM[0].U_BRAM/ram_rt1_s1_s32_if.ram_rt1_s1_s32_i_DOB<31>_UNCONNECTED , +\NLW_U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.U_RAM/G_BRAM[0].U_BRAM/ram_rt1_s1_s32_if.ram_rt1_s1_s32_i_DOB<30>_UNCONNECTED , +\NLW_U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.U_RAM/G_BRAM[0].U_BRAM/ram_rt1_s1_s32_if.ram_rt1_s1_s32_i_DOB<29>_UNCONNECTED , +\NLW_U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.U_RAM/G_BRAM[0].U_BRAM/ram_rt1_s1_s32_if.ram_rt1_s1_s32_i_DOB<28>_UNCONNECTED , +\NLW_U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.U_RAM/G_BRAM[0].U_BRAM/ram_rt1_s1_s32_if.ram_rt1_s1_s32_i_DOB<27>_UNCONNECTED , +\NLW_U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.U_RAM/G_BRAM[0].U_BRAM/ram_rt1_s1_s32_if.ram_rt1_s1_s32_i_DOB<26>_UNCONNECTED , +\NLW_U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.U_RAM/G_BRAM[0].U_BRAM/ram_rt1_s1_s32_if.ram_rt1_s1_s32_i_DOB<25>_UNCONNECTED , +\NLW_U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.U_RAM/G_BRAM[0].U_BRAM/ram_rt1_s1_s32_if.ram_rt1_s1_s32_i_DOB<24>_UNCONNECTED , +\NLW_U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.U_RAM/G_BRAM[0].U_BRAM/ram_rt1_s1_s32_if.ram_rt1_s1_s32_i_DOB<23>_UNCONNECTED , +\NLW_U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.U_RAM/G_BRAM[0].U_BRAM/ram_rt1_s1_s32_if.ram_rt1_s1_s32_i_DOB<22>_UNCONNECTED , +\NLW_U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.U_RAM/G_BRAM[0].U_BRAM/ram_rt1_s1_s32_if.ram_rt1_s1_s32_i_DOB<21>_UNCONNECTED , +\NLW_U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.U_RAM/G_BRAM[0].U_BRAM/ram_rt1_s1_s32_if.ram_rt1_s1_s32_i_DOB<20>_UNCONNECTED , +\NLW_U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.U_RAM/G_BRAM[0].U_BRAM/ram_rt1_s1_s32_if.ram_rt1_s1_s32_i_DOB<19>_UNCONNECTED , +\NLW_U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.U_RAM/G_BRAM[0].U_BRAM/ram_rt1_s1_s32_if.ram_rt1_s1_s32_i_DOB<18>_UNCONNECTED , +\NLW_U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.U_RAM/G_BRAM[0].U_BRAM/ram_rt1_s1_s32_if.ram_rt1_s1_s32_i_DOB<17>_UNCONNECTED , +\NLW_U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.U_RAM/G_BRAM[0].U_BRAM/ram_rt1_s1_s32_if.ram_rt1_s1_s32_i_DOB<16>_UNCONNECTED , +\NLW_U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.U_RAM/G_BRAM[0].U_BRAM/ram_rt1_s1_s32_if.ram_rt1_s1_s32_i_DOB<15>_UNCONNECTED , +\NLW_U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.U_RAM/G_BRAM[0].U_BRAM/ram_rt1_s1_s32_if.ram_rt1_s1_s32_i_DOB<14>_UNCONNECTED , +\NLW_U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.U_RAM/G_BRAM[0].U_BRAM/ram_rt1_s1_s32_if.ram_rt1_s1_s32_i_DOB<13>_UNCONNECTED , +\NLW_U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.U_RAM/G_BRAM[0].U_BRAM/ram_rt1_s1_s32_if.ram_rt1_s1_s32_i_DOB<12>_UNCONNECTED , +\NLW_U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.U_RAM/G_BRAM[0].U_BRAM/ram_rt1_s1_s32_if.ram_rt1_s1_s32_i_DOB<11>_UNCONNECTED , +\NLW_U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.U_RAM/G_BRAM[0].U_BRAM/ram_rt1_s1_s32_if.ram_rt1_s1_s32_i_DOB<10>_UNCONNECTED , +\NLW_U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.U_RAM/G_BRAM[0].U_BRAM/ram_rt1_s1_s32_if.ram_rt1_s1_s32_i_DOB<9>_UNCONNECTED , +\NLW_U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.U_RAM/G_BRAM[0].U_BRAM/ram_rt1_s1_s32_if.ram_rt1_s1_s32_i_DOB<8>_UNCONNECTED , +\NLW_U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.U_RAM/G_BRAM[0].U_BRAM/ram_rt1_s1_s32_if.ram_rt1_s1_s32_i_DOB<7>_UNCONNECTED , +\NLW_U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.U_RAM/G_BRAM[0].U_BRAM/ram_rt1_s1_s32_if.ram_rt1_s1_s32_i_DOB<6>_UNCONNECTED , +\NLW_U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.U_RAM/G_BRAM[0].U_BRAM/ram_rt1_s1_s32_if.ram_rt1_s1_s32_i_DOB<5>_UNCONNECTED , +\NLW_U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.U_RAM/G_BRAM[0].U_BRAM/ram_rt1_s1_s32_if.ram_rt1_s1_s32_i_DOB<4>_UNCONNECTED , +\NLW_U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.U_RAM/G_BRAM[0].U_BRAM/ram_rt1_s1_s32_if.ram_rt1_s1_s32_i_DOB<3>_UNCONNECTED , +\NLW_U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.U_RAM/G_BRAM[0].U_BRAM/ram_rt1_s1_s32_if.ram_rt1_s1_s32_i_DOB<2>_UNCONNECTED , +\NLW_U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.U_RAM/G_BRAM[0].U_BRAM/ram_rt1_s1_s32_if.ram_rt1_s1_s32_i_DOB<1>_UNCONNECTED , +\NLW_U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.U_RAM/G_BRAM[0].U_BRAM/ram_rt1_s1_s32_if.ram_rt1_s1_s32_i_DOB<0>_UNCONNECTED }), + .DOPB({\NLW_U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.U_RAM/G_BRAM[0].U_BRAM/ram_rt1_s1_s32_if.ram_rt1_s1_s32_i_DOPB<3>_UNCONNECTED , +\NLW_U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.U_RAM/G_BRAM[0].U_BRAM/ram_rt1_s1_s32_if.ram_rt1_s1_s32_i_DOPB<2>_UNCONNECTED , +\NLW_U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.U_RAM/G_BRAM[0].U_BRAM/ram_rt1_s1_s32_if.ram_rt1_s1_s32_i_DOPB<1>_UNCONNECTED , +\NLW_U0/I_NO_D.U_ILA/U_CAPSTOR/I_CASE1.I_NO_TB.I_RT1.U_RAM/G_BRAM[0].U_BRAM/ram_rt1_s1_s32_if.ram_rt1_s1_s32_i_DOPB<0>_UNCONNECTED }) + ); + +// synthesis translate_on + +endmodule + +// synthesis translate_off + +`ifndef GLBL +`define GLBL + +`timescale 1 ps / 1 ps + +module glbl (); + + parameter ROC_WIDTH = 100000; + parameter TOC_WIDTH = 0; + + wire GSR; + wire GTS; + wire GWE; + wire PRLD; + tri1 p_up_tmp; + tri (weak1, strong0) PLL_LOCKG = p_up_tmp; + + reg GSR_int; + reg GTS_int; + reg PRLD_int; + +//-------- JTAG Globals -------------- + wire JTAG_TDO_GLBL; + wire JTAG_TCK_GLBL; + wire JTAG_TDI_GLBL; + wire JTAG_TMS_GLBL; + wire JTAG_TRST_GLBL; + + reg JTAG_CAPTURE_GLBL; + reg JTAG_RESET_GLBL; + reg JTAG_SHIFT_GLBL; + reg JTAG_UPDATE_GLBL; + reg JTAG_RUNTEST_GLBL; + + reg JTAG_SEL1_GLBL = 0; + reg JTAG_SEL2_GLBL = 0 ; + reg JTAG_SEL3_GLBL = 0; + reg JTAG_SEL4_GLBL = 0; + + reg JTAG_USER_TDO1_GLBL = 1'bz; + reg JTAG_USER_TDO2_GLBL = 1'bz; + reg JTAG_USER_TDO3_GLBL = 1'bz; + reg JTAG_USER_TDO4_GLBL = 1'bz; + + assign (weak1, weak0) GSR = GSR_int; + assign (weak1, weak0) GTS = GTS_int; + assign (weak1, weak0) PRLD = PRLD_int; + + initial begin + GSR_int = 1'b1; + PRLD_int = 1'b1; + #(ROC_WIDTH) + GSR_int = 1'b0; + PRLD_int = 1'b0; + end + + initial begin + GTS_int = 1'b1; + #(TOC_WIDTH) + GTS_int = 1'b0; + end + +endmodule + +`endif + +// synthesis translate_on diff --git a/usrp2/extramfifo/ila.xco b/usrp2/extramfifo/ila.xco new file mode 100644 index 000000000..c8d4d2f75 --- /dev/null +++ b/usrp2/extramfifo/ila.xco @@ -0,0 +1,130 @@ +############################################################## +# +# Xilinx Core Generator version 12.1 +# Date: Wed Jul 21 18:51:14 2010 +# +############################################################## +# +# This file contains the customisation parameters for a +# Xilinx CORE Generator IP GUI. It is strongly recommended +# that you do not manually alter this file as it may cause +# unexpected and unsupported behavior. +# +############################################################## +# +# BEGIN Project Options +SET addpads = false +SET asysymbol = true +SET busformat = BusFormatAngleBracketNotRipped +SET createndf = false +SET designentry = Verilog +SET device = xc3s2000 +SET devicefamily = spartan3 +SET flowvendor = Other +SET formalverification = false +SET foundationsym = false +SET implementationfiletype = Ngc +SET package = fg456 +SET removerpms = false +SET simulationfiles = Structural +SET speedgrade = -5 +SET verilogsim = true +SET vhdlsim = false +# END Project Options +# BEGIN Select +SELECT ILA_(ChipScope_Pro_-_Integrated_Logic_Analyzer) family Xilinx,_Inc. 1.03.a +# END Select +# BEGIN Parameters +CSET component_name=ila +CSET counter_width_1=Disabled +CSET counter_width_10=Disabled +CSET counter_width_11=Disabled +CSET counter_width_12=Disabled +CSET counter_width_13=Disabled +CSET counter_width_14=Disabled +CSET counter_width_15=Disabled +CSET counter_width_16=Disabled +CSET counter_width_2=Disabled +CSET counter_width_3=Disabled +CSET counter_width_4=Disabled +CSET counter_width_5=Disabled +CSET counter_width_6=Disabled +CSET counter_width_7=Disabled +CSET counter_width_8=Disabled +CSET counter_width_9=Disabled +CSET data_port_width=0 +CSET data_same_as_trigger=true +CSET enable_storage_qualification=true +CSET enable_trigger_output_port=false +CSET exclude_from_data_storage_1=false +CSET exclude_from_data_storage_10=false +CSET exclude_from_data_storage_11=false +CSET exclude_from_data_storage_12=false +CSET exclude_from_data_storage_13=false +CSET exclude_from_data_storage_14=false +CSET exclude_from_data_storage_15=false +CSET exclude_from_data_storage_16=false +CSET exclude_from_data_storage_2=false +CSET exclude_from_data_storage_3=false +CSET exclude_from_data_storage_4=false +CSET exclude_from_data_storage_5=false +CSET exclude_from_data_storage_6=false +CSET exclude_from_data_storage_7=false +CSET exclude_from_data_storage_8=false +CSET exclude_from_data_storage_9=false +CSET match_type_1=basic +CSET match_type_10=basic +CSET match_type_11=basic +CSET match_type_12=basic +CSET match_type_13=basic +CSET match_type_14=basic +CSET match_type_15=basic +CSET match_type_16=basic +CSET match_type_2=basic +CSET match_type_3=basic +CSET match_type_4=basic +CSET match_type_5=basic +CSET match_type_6=basic +CSET match_type_7=basic +CSET match_type_8=basic +CSET match_type_9=basic +CSET match_units_1=1 +CSET match_units_10=1 +CSET match_units_11=1 +CSET match_units_12=1 +CSET match_units_13=1 +CSET match_units_14=1 +CSET match_units_15=1 +CSET match_units_16=1 +CSET match_units_2=1 +CSET match_units_3=1 +CSET match_units_4=1 +CSET match_units_5=1 +CSET match_units_6=1 +CSET match_units_7=1 +CSET match_units_8=1 +CSET match_units_9=1 +CSET max_sequence_levels=1 +CSET number_of_trigger_ports=4 +CSET sample_data_depth=512 +CSET sample_on=Rising +CSET trigger_port_width_1=8 +CSET trigger_port_width_10=8 +CSET trigger_port_width_11=8 +CSET trigger_port_width_12=8 +CSET trigger_port_width_13=8 +CSET trigger_port_width_14=8 +CSET trigger_port_width_15=8 +CSET trigger_port_width_16=8 +CSET trigger_port_width_2=8 +CSET trigger_port_width_3=8 +CSET trigger_port_width_4=4 +CSET trigger_port_width_5=8 +CSET trigger_port_width_6=8 +CSET trigger_port_width_7=8 +CSET trigger_port_width_8=8 +CSET trigger_port_width_9=8 +CSET use_rpms=true +# END Parameters +GENERATE +# CRC: 66151c7c diff --git a/usrp2/extramfifo/nobl_fifo.v b/usrp2/extramfifo/nobl_fifo.v index 1bd7439ad..7ddb517c7 100644 --- a/usrp2/extramfifo/nobl_fifo.v +++ b/usrp2/extramfifo/nobl_fifo.v @@ -1,3 +1,9 @@ +// Since this FIFO uses a ZBT/NoBL SRAM for its storage which is a since port +// device it can only sustain data throughput at half the RAM clock rate. +// Fair arbitration to ensure this occurs is included in this logic and +// requests for transactions that can not be completed are held off by (re)using the +// "full" and "empty" flags. + module nobl_fifo #(parameter WIDTH=18,DEPTH=19) ( @@ -17,14 +23,14 @@ module nobl_fifo output reg space_avail, output reg [WIDTH-1:0] read_data, input read_strobe, - output reg data_avail + output reg data_avail, + input upstream_full // (Connect to almost full flag upstream) ); reg [DEPTH-1:0] capacity; reg [DEPTH-1:0] wr_pointer; reg [DEPTH-1:0] rd_pointer; wire [DEPTH-1:0] address; - reg supress; reg data_avail_int; // Data available with high latency from ext FIFO flag wire [WIDTH-1:0] data_in; @@ -38,7 +44,7 @@ module nobl_fifo assign read = read_strobe_int && data_avail_int; assign write = write_strobe && space_avail; - // When a read and write collision occur, supress availability flags next cycle + // When a read and write collision occur, supress the availability flags next cycle // and complete write followed by read over 2 cycles. This forces balanced arbitration // and makes for a simple logic design. @@ -231,9 +237,11 @@ module nobl_fifo // Start an external FIFO read as soon as a read of the buffer reg is strobed to minimise refill latency. // If the buffer reg or the pending buffer reg is already empty also pre-emptively start a read. - // However there must be something in ext FIFO to read. - // This means that there can be 2 outstanding reads to the ext FIFO active at any time helping to hide latency. - assign read_strobe_int = (read_strobe & data_avail & ~pending_avail) || (~data_avail && ~pending_avail); + // However there must be something in the main external FIFO to read for this to occur!. + // Pay special attention to upstream devices signalling full due to the number of potential in-flight reads\ that need + // to be stalled and stored somewhere. + // This means that there can be 3 outstanding reads to the ext FIFO active at any time helping to hide latency. + assign read_strobe_int = (read_strobe && data_avail && ~pending_avail && ~upstream_full) || (~data_avail && ~pending_avail && ~upstream_full); // diff --git a/usrp2/extramfifo/nobl_if.v b/usrp2/extramfifo/nobl_if.v index 3143ce5ba..24d463b1e 100644 --- a/usrp2/extramfifo/nobl_if.v +++ b/usrp2/extramfifo/nobl_if.v @@ -1,3 +1,5 @@ +// Tested against an IDT 71v65603s150 in simulation and a Cypress 7C1356C in the real world. + module nobl_if #(parameter WIDTH=18,DEPTH=19) ( @@ -35,9 +37,9 @@ module nobl_if reg [WIDTH-1:0] data_out_pipe3; assign RAM_LDn = 0; + // ZBT/NoBL RAM actually manages its own output enables very well. assign RAM_OEn = 0; - // // Pipeline stage 1 // @@ -129,8 +131,5 @@ module nobl_if else data_in_valid <= 1'b0; end // always @ (posedge clk) - - - - + endmodule // nobl_if diff --git a/usrp2/extramfifo/test_sram_if.v b/usrp2/extramfifo/test_sram_if.v index 9f36b409c..0e74b49eb 100644 --- a/usrp2/extramfifo/test_sram_if.v +++ b/usrp2/extramfifo/test_sram_if.v @@ -1,3 +1,7 @@ +// Instantiate this block at the core level to conduct closed +// loop testing of the AC performance of the USRP2 SRAM interface + + `define WIDTH 18 `define DEPTH 19 diff --git a/usrp2/top/Makefile.common b/usrp2/top/Makefile.common index 1114c731e..6f855a070 100644 --- a/usrp2/top/Makefile.common +++ b/usrp2/top/Makefile.common @@ -34,6 +34,7 @@ synth: $(ISE_FILE) $(ISE_HELPER) "Synthesize - XST" bin: check $(BIN_FILE) + $(ISE_HELPER) "Generate Programming File" mcs: $(MCS_FILE) diff --git a/usrp2/top/u2_rev3/Makefile.udp b/usrp2/top/u2_rev3/Makefile.udp index 9962887d4..99effb038 100644 --- a/usrp2/top/u2_rev3/Makefile.udp +++ b/usrp2/top/u2_rev3/Makefile.udp @@ -24,6 +24,8 @@ include ../../vrt/Makefile.srcs include ../../udp/Makefile.srcs include ../../coregen/Makefile.srcs include ../../extram/Makefile.srcs +include ../../extramfifo/Makefile.srcs + ################################################## # Project Properties diff --git a/usrp2/top/u2_rev3/u2_core_udp.v b/usrp2/top/u2_rev3/u2_core_udp.v index 3b565ba90..b0c8e6d52 100644 --- a/usrp2/top/u2_rev3/u2_core_udp.v +++ b/usrp2/top/u2_rev3/u2_core_udp.v @@ -119,7 +119,9 @@ module u2_core inout [15:0] io_rx, // External RAM - inout [17:0] RAM_D, + input [17:0] RAM_D_pi, + output [17:0] RAM_D_po, + output RAM_D_poe, output [18:0] RAM_A, output RAM_CE1n, output RAM_CENn, @@ -646,10 +648,28 @@ module u2_core wire tx_src_rdy, tx_dst_rdy; wire [31:0] debug_vt; - fifo_cascade #(.WIDTH(36), .SIZE(DSP_TX_FIFOSIZE)) tx_fifo_cascade - (.clk(dsp_clk), .reset(dsp_rst), .clear(0), - .datain({rd1_flags,rd1_dat}), .src_rdy_i(rd1_ready_o), .dst_rdy_o(rd1_ready_i), - .dataout(tx_data), .src_rdy_o(tx_src_rdy), .dst_rdy_i(tx_dst_rdy) ); + ext_fifo #(.EXT_WIDTH(18),.INT_WIDTH(36),.DEPTH(19)) + ext_fifo_i1 + ( + .int_clk(dsp_clk), + .ext_clk(clk_to_mac), + .rst(dsp_rst), + .RAM_D_pi(RAM_D_pi), + .RAM_D_po(RAM_D_po), + .RAM_D_poe(RAM_D_poe), + .RAM_A(RAM_A), + .RAM_WEn(RAM_WEn), + .RAM_CENn(RAM_CENn), + .RAM_LDn(RAM_LDn), + .RAM_OEn(RAM_OEn), + .RAM_CE1n(RAM_CE1n), + .datain({rd1_flags,rd1_dat}), + .src_rdy_i(rd1_ready_o), // WRITE + .dst_rdy_o(rd1_ready_i), // not FULL + .dataout(tx_data), + .src_rdy_o(tx_src_rdy), // not EMPTY + .dst_rdy_i(tx_dst_rdy) + ); vita_tx_chain #(.BASE_CTRL(SR_TX_CTRL), .BASE_DSP(SR_TX_DSP), .REPORT_ERROR(1), .PROT_ENG_FLAGS(1)) @@ -678,6 +698,9 @@ module u2_core .rx_occupied(ser_rx_occ),.rx_full(ser_rx_full),.rx_empty(ser_rx_empty), .serdes_link_up(serdes_link_up),.debug0(debug_serdes0), .debug1(debug_serdes1) ); + assign RAM_CLK = clk_to_mac; + + // ///////////////////////////////////////////////////////////////////////// // VITA Timing diff --git a/usrp2/top/u2_rev3/u2_rev3.ucf b/usrp2/top/u2_rev3/u2_rev3.ucf index 6aa699d2a..82d879446 100644 --- a/usrp2/top/u2_rev3/u2_rev3.ucf +++ b/usrp2/top/u2_rev3/u2_rev3.ucf @@ -74,49 +74,49 @@ NET "MDC" LOC = "V18" ; NET "PHY_INTn" LOC = "AB13" ; NET "PHY_RESETn" LOC = "AA19" ; NET "PHY_CLK" LOC = "V15" ; -NET "RAM_D[0]" LOC = "N20" ; -NET "RAM_D[1]" LOC = "N21" ; -NET "RAM_D[2]" LOC = "N22" ; -NET "RAM_D[3]" LOC = "M17" ; -NET "RAM_D[4]" LOC = "M18" ; -NET "RAM_D[5]" LOC = "M19" ; -NET "RAM_D[6]" LOC = "M20" ; -NET "RAM_D[7]" LOC = "M21" ; -NET "RAM_D[8]" LOC = "M22" ; -NET "RAM_D[9]" LOC = "Y22" ; -NET "RAM_D[10]" LOC = "Y21" ; -NET "RAM_D[11]" LOC = "Y20" ; -NET "RAM_D[12]" LOC = "Y19" ; -NET "RAM_D[13]" LOC = "W22" ; -NET "RAM_D[14]" LOC = "W21" ; -NET "RAM_D[15]" LOC = "W20" ; -NET "RAM_D[16]" LOC = "W19" ; -NET "RAM_D[17]" LOC = "V22" ; -NET "RAM_A[0]" LOC = "U21" ; -NET "RAM_A[1]" LOC = "T19" ; -NET "RAM_A[2]" LOC = "V21" ; -NET "RAM_A[3]" LOC = "V20" ; -NET "RAM_A[4]" LOC = "T20" ; -NET "RAM_A[5]" LOC = "T21" ; -NET "RAM_A[6]" LOC = "T22" ; -NET "RAM_A[7]" LOC = "T18" ; -NET "RAM_A[8]" LOC = "R18" ; -NET "RAM_A[9]" LOC = "P19" ; -NET "RAM_A[10]" LOC = "P21" ; -NET "RAM_A[11]" LOC = "P22" ; -NET "RAM_A[12]" LOC = "N19" ; -NET "RAM_A[13]" LOC = "N17" ; -NET "RAM_A[14]" LOC = "N18" ; -NET "RAM_A[15]" LOC = "T17" ; -NET "RAM_A[16]" LOC = "U19" ; -NET "RAM_A[17]" LOC = "U18" ; -NET "RAM_A[18]" LOC = "V19" ; -NET "RAM_CE1n" LOC = "U20" ; -NET "RAM_CENn" LOC = "P18" ; -NET "RAM_CLK" LOC = "P17" ; -NET "RAM_WEn" LOC = "R22" ; -NET "RAM_OEn" LOC = "R21" ; -NET "RAM_LDn" LOC = "R19" ; +NET "RAM_D[0]" LOC = "N20" |IOSTANDARD = LVCMOS25 |DRIVE = 12 |SLEW = FAST ; +NET "RAM_D[1]" LOC = "N21" |IOSTANDARD = LVCMOS25 |DRIVE = 12 |SLEW = FAST ; +NET "RAM_D[2]" LOC = "N22" |IOSTANDARD = LVCMOS25 |DRIVE = 12 |SLEW = FAST ; +NET "RAM_D[3]" LOC = "M17" |IOSTANDARD = LVCMOS25 |DRIVE = 12 |SLEW = FAST ; +NET "RAM_D[4]" LOC = "M18" |IOSTANDARD = LVCMOS25 |DRIVE = 12 |SLEW = FAST ; +NET "RAM_D[5]" LOC = "M19" |IOSTANDARD = LVCMOS25 |DRIVE = 12 |SLEW = FAST ; +NET "RAM_D[6]" LOC = "M20" |IOSTANDARD = LVCMOS25 |DRIVE = 12 |SLEW = FAST ; +NET "RAM_D[7]" LOC = "M21" |IOSTANDARD = LVCMOS25 |DRIVE = 12 |SLEW = FAST ; +NET "RAM_D[8]" LOC = "M22" |IOSTANDARD = LVCMOS25 |DRIVE = 12 |SLEW = FAST ; +NET "RAM_D[9]" LOC = "Y22" |IOSTANDARD = LVCMOS25 |DRIVE = 12 |SLEW = FAST ; +NET "RAM_D[10]" LOC = "Y21" |IOSTANDARD = LVCMOS25 |DRIVE = 12 |SLEW = FAST ; +NET "RAM_D[11]" LOC = "Y20" |IOSTANDARD = LVCMOS25 |DRIVE = 12 |SLEW = FAST ; +NET "RAM_D[12]" LOC = "Y19" |IOSTANDARD = LVCMOS25 |DRIVE = 12 |SLEW = FAST ; +NET "RAM_D[13]" LOC = "W22" |IOSTANDARD = LVCMOS25 |DRIVE = 12 |SLEW = FAST ; +NET "RAM_D[14]" LOC = "W21" |IOSTANDARD = LVCMOS25 |DRIVE = 12 |SLEW = FAST ; +NET "RAM_D[15]" LOC = "W20" |IOSTANDARD = LVCMOS25 |DRIVE = 12 |SLEW = FAST ; +NET "RAM_D[16]" LOC = "W19" |IOSTANDARD = LVCMOS25 |DRIVE = 12 |SLEW = FAST ; +NET "RAM_D[17]" LOC = "V22" |IOSTANDARD = LVCMOS25 |DRIVE = 12 |SLEW = FAST ; +NET "RAM_A[0]" LOC = "U21" |IOSTANDARD = LVCMOS25 |DRIVE = 12 |SLEW = FAST ; +NET "RAM_A[1]" LOC = "T19" |IOSTANDARD = LVCMOS25 |DRIVE = 12 |SLEW = FAST ; +NET "RAM_A[2]" LOC = "V21" |IOSTANDARD = LVCMOS25 |DRIVE = 12 |SLEW = FAST ; +NET "RAM_A[3]" LOC = "V20" |IOSTANDARD = LVCMOS25 |DRIVE = 12 |SLEW = FAST ; +NET "RAM_A[4]" LOC = "T20" |IOSTANDARD = LVCMOS25 |DRIVE = 12 |SLEW = FAST ; +NET "RAM_A[5]" LOC = "T21" |IOSTANDARD = LVCMOS25 |DRIVE = 12 |SLEW = FAST ; +NET "RAM_A[6]" LOC = "T22" |IOSTANDARD = LVCMOS25 |DRIVE = 12 |SLEW = FAST ; +NET "RAM_A[7]" LOC = "T18" |IOSTANDARD = LVCMOS25 |DRIVE = 12 |SLEW = FAST ; +NET "RAM_A[8]" LOC = "R18" |IOSTANDARD = LVCMOS25 |DRIVE = 12 |SLEW = FAST ; +NET "RAM_A[9]" LOC = "P19" |IOSTANDARD = LVCMOS25 |DRIVE = 12 |SLEW = FAST ; +NET "RAM_A[10]" LOC = "P21" |IOSTANDARD = LVCMOS25 |DRIVE = 12 |SLEW = FAST ; +NET "RAM_A[11]" LOC = "P22" |IOSTANDARD = LVCMOS25 |DRIVE = 12 |SLEW = FAST ; +NET "RAM_A[12]" LOC = "N19" |IOSTANDARD = LVCMOS25 |DRIVE = 12 |SLEW = FAST ; +NET "RAM_A[13]" LOC = "N17" |IOSTANDARD = LVCMOS25 |DRIVE = 12 |SLEW = FAST ; +NET "RAM_A[14]" LOC = "N18" |IOSTANDARD = LVCMOS25 |DRIVE = 12 |SLEW = FAST ; +NET "RAM_A[15]" LOC = "T17" |IOSTANDARD = LVCMOS25 |DRIVE = 12 |SLEW = FAST ; +NET "RAM_A[16]" LOC = "U19" |IOSTANDARD = LVCMOS25 |DRIVE = 12 |SLEW = FAST ; +NET "RAM_A[17]" LOC = "U18" |IOSTANDARD = LVCMOS25 |DRIVE = 12 |SLEW = FAST ; +NET "RAM_A[18]" LOC = "V19" |IOSTANDARD = LVCMOS25 |DRIVE = 12 |SLEW = FAST ; +NET "RAM_CE1n" LOC = "U20" |IOSTANDARD = LVCMOS25 |DRIVE = 12 |SLEW = FAST ; +NET "RAM_CENn" LOC = "P18" |IOSTANDARD = LVCMOS25 |DRIVE = 12 |SLEW = FAST ; +NET "RAM_CLK" LOC = "P17" |IOSTANDARD = LVCMOS25 |DRIVE = 12 |SLEW = FAST ; +NET "RAM_WEn" LOC = "R22" |IOSTANDARD = LVCMOS25 |DRIVE = 12 |SLEW = FAST ; +NET "RAM_OEn" LOC = "R21" |IOSTANDARD = LVCMOS25 |DRIVE = 12 |SLEW = FAST ; +NET "RAM_LDn" LOC = "R19" |IOSTANDARD = LVCMOS25 |DRIVE = 12 |SLEW = FAST ; NET "ser_enable" LOC = "W11" ; NET "ser_prbsen" LOC = "AA3" ; NET "ser_loopen" LOC = "Y4" ; diff --git a/usrp2/top/u2_rev3/u2_rev3.v b/usrp2/top/u2_rev3/u2_rev3.v index bab5a7706..5e32b368a 100644 --- a/usrp2/top/u2_rev3/u2_rev3.v +++ b/usrp2/top/u2_rev3/u2_rev3.v @@ -345,100 +345,133 @@ module u2_rev3 .S(0) // Synchronous preset input ); */ + + wire [17:0] RAM_D_pi; + wire [17:0] RAM_D_po; + wire RAM_D_poe; + + genvar i; + + // + // Instantiate IO for Bidirectional bus to SRAM + // + + generate + for (i=0;i<18;i=i+1) + begin : gen_RAM_D_IO + + IOBUF #( + .DRIVE(12), + .IOSTANDARD("LVCMOS25"), + .SLEW("FAST") + ) + RAM_D_i ( + .O(RAM_D_pi[i]), + .I(RAM_D_po[i]), + .IO(RAM_D[i]), + .T(RAM_D_poe) + ); + end // block: gen_RAM_D_IO + endgenerate + + + u2_core #(.RAM_SIZE(32768)) - u2_core(.dsp_clk (dsp_clk), - .wb_clk (wb_clk), - .clock_ready (clock_ready), - .clk_to_mac (clk_to_mac), - .pps_in (pps_in), - .leds (leds_int), - .debug (debug[31:0]), - .debug_clk (debug_clk[1:0]), - .exp_pps_in (exp_pps_in), - .exp_pps_out (exp_pps_out), - .GMII_COL (GMII_COL), - .GMII_CRS (GMII_CRS), - .GMII_TXD (GMII_TXD_unreg[7:0]), - .GMII_TX_EN (GMII_TX_EN_unreg), - .GMII_TX_ER (GMII_TX_ER_unreg), - .GMII_GTX_CLK (GMII_GTX_CLK_int), - .GMII_TX_CLK (GMII_TX_CLK), - .GMII_RXD (GMII_RXD[7:0]), - .GMII_RX_CLK (GMII_RX_CLK), - .GMII_RX_DV (GMII_RX_DV), - .GMII_RX_ER (GMII_RX_ER), - .MDIO (MDIO), - .MDC (MDC), - .PHY_INTn (PHY_INTn), - .PHY_RESETn (PHY_RESETn), - .ser_enable (ser_enable), - .ser_prbsen (ser_prbsen), - .ser_loopen (ser_loopen), - .ser_rx_en (ser_rx_en), - .ser_tx_clk (ser_tx_clk_int), - .ser_t (ser_t_unreg[15:0]), - .ser_tklsb (ser_tklsb_unreg), - .ser_tkmsb (ser_tkmsb_unreg), - .ser_rx_clk (ser_rx_clk_buf), - .ser_r (ser_r_int[15:0]), - .ser_rklsb (ser_rklsb_int), - .ser_rkmsb (ser_rkmsb_int), - .cpld_start (cpld_start), - .cpld_mode (cpld_mode), - .cpld_done (cpld_done), - .cpld_din (cpld_din), - .cpld_clk (cpld_clk), - .cpld_detached (cpld_detached), - .cpld_misc (cpld_misc), - .cpld_init_b (cpld_init_b), - .por (~POR), - .config_success (config_success), - .adc_a (adc_a_reg2), - .adc_ovf_a (adc_ovf_a_reg2), - .adc_on_a (adc_on_a), - .adc_oe_a (adc_oe_a), - .adc_b (adc_b_reg2), - .adc_ovf_b (adc_ovf_b_reg2), - .adc_on_b (adc_on_b), - .adc_oe_b (adc_oe_b), - .dac_a (dac_a_int), - .dac_b (dac_b_int), - .scl_pad_i (scl_pad_i), - .scl_pad_o (scl_pad_o), - .scl_pad_oen_o (scl_pad_oen_o), - .sda_pad_i (sda_pad_i), - .sda_pad_o (sda_pad_o), - .sda_pad_oen_o (sda_pad_oen_o), - .clk_en (clk_en[1:0]), - .clk_sel (clk_sel[1:0]), - .clk_func (clk_func), - .clk_status (clk_status), - .sclk (sclk_int), - .mosi (mosi), - .miso (miso), - .sen_clk (sen_clk), - .sen_dac (sen_dac), - .sen_tx_db (sen_tx_db), - .sen_tx_adc (sen_tx_adc), - .sen_tx_dac (sen_tx_dac), - .sen_rx_db (sen_rx_db), - .sen_rx_adc (sen_rx_adc), - .sen_rx_dac (sen_rx_dac), - .io_tx (io_tx[15:0]), - .io_rx (io_rx[15:0]), - .RAM_D (RAM_D), - .RAM_A (RAM_A), - .RAM_CE1n (RAM_CE1n), - .RAM_CENn (RAM_CENn), - .RAM_CLK (RAM_CLK), - .RAM_WEn (RAM_WEn), - .RAM_OEn (RAM_OEn), - .RAM_LDn (RAM_LDn), - .uart_tx_o (uart_tx_o), - .uart_rx_i (uart_rx_i), - .uart_baud_o (), - .sim_mode (1'b0), - .clock_divider (2) - ); + u2_core(.dsp_clk (dsp_clk), + .wb_clk (wb_clk), + .clock_ready (clock_ready), + .clk_to_mac (clk_to_mac), + .pps_in (pps_in), + .leds (leds_int), + .debug (debug[31:0]), + .debug_clk (debug_clk[1:0]), + .exp_pps_in (exp_pps_in), + .exp_pps_out (exp_pps_out), + .GMII_COL (GMII_COL), + .GMII_CRS (GMII_CRS), + .GMII_TXD (GMII_TXD_unreg[7:0]), + .GMII_TX_EN (GMII_TX_EN_unreg), + .GMII_TX_ER (GMII_TX_ER_unreg), + .GMII_GTX_CLK (GMII_GTX_CLK_int), + .GMII_TX_CLK (GMII_TX_CLK), + .GMII_RXD (GMII_RXD[7:0]), + .GMII_RX_CLK (GMII_RX_CLK), + .GMII_RX_DV (GMII_RX_DV), + .GMII_RX_ER (GMII_RX_ER), + .MDIO (MDIO), + .MDC (MDC), + .PHY_INTn (PHY_INTn), + .PHY_RESETn (PHY_RESETn), + .ser_enable (ser_enable), + .ser_prbsen (ser_prbsen), + .ser_loopen (ser_loopen), + .ser_rx_en (ser_rx_en), + .ser_tx_clk (ser_tx_clk_int), + .ser_t (ser_t_unreg[15:0]), + .ser_tklsb (ser_tklsb_unreg), + .ser_tkmsb (ser_tkmsb_unreg), + .ser_rx_clk (ser_rx_clk_buf), + .ser_r (ser_r_int[15:0]), + .ser_rklsb (ser_rklsb_int), + .ser_rkmsb (ser_rkmsb_int), + .cpld_start (cpld_start), + .cpld_mode (cpld_mode), + .cpld_done (cpld_done), + .cpld_din (cpld_din), + .cpld_clk (cpld_clk), + .cpld_detached (cpld_detached), + .cpld_misc (cpld_misc), + .cpld_init_b (cpld_init_b), + .por (~POR), + .config_success (config_success), + .adc_a (adc_a_reg2), + .adc_ovf_a (adc_ovf_a_reg2), + .adc_on_a (adc_on_a), + .adc_oe_a (adc_oe_a), + .adc_b (adc_b_reg2), + .adc_ovf_b (adc_ovf_b_reg2), + .adc_on_b (adc_on_b), + .adc_oe_b (adc_oe_b), + .dac_a (dac_a_int), + .dac_b (dac_b_int), + .scl_pad_i (scl_pad_i), + .scl_pad_o (scl_pad_o), + .scl_pad_oen_o (scl_pad_oen_o), + .sda_pad_i (sda_pad_i), + .sda_pad_o (sda_pad_o), + .sda_pad_oen_o (sda_pad_oen_o), + .clk_en (clk_en[1:0]), + .clk_sel (clk_sel[1:0]), + .clk_func (clk_func), + .clk_status (clk_status), + .sclk (sclk_int), + .mosi (mosi), + .miso (miso), + .sen_clk (sen_clk), + .sen_dac (sen_dac), + .sen_tx_db (sen_tx_db), + .sen_tx_adc (sen_tx_adc), + .sen_tx_dac (sen_tx_dac), + .sen_rx_db (sen_rx_db), + .sen_rx_adc (sen_rx_adc), + .sen_rx_dac (sen_rx_dac), + .io_tx (io_tx[15:0]), + .io_rx (io_rx[15:0]), + .RAM_D_pi (RAM_D_pi), + .RAM_D_po (RAM_D_po), + .RAM_D_poe (RAM_D_poe), + .RAM_A (RAM_A), + .RAM_CE1n (RAM_CE1n), + .RAM_CENn (RAM_CENn), + .RAM_CLK (RAM_CLK), + .RAM_WEn (RAM_WEn), + .RAM_OEn (RAM_OEn), + .RAM_LDn (RAM_LDn), + .uart_tx_o (uart_tx_o), + .uart_rx_i (uart_rx_i), + .uart_baud_o (), + .sim_mode (1'b0), + .clock_divider (2) + ); endmodule // u2_rev2 -- cgit v1.2.3 From 408fac953746c8da3d476f294afdbf578df68754 Mon Sep 17 00:00:00 2001 From: Matt Ettus Date: Wed, 11 Aug 2010 13:59:06 -0700 Subject: checkin of generated coregen files --- usrp2/coregen/fifo_xlnx_512x36_2clk_18to36.ngc | 3 + usrp2/coregen/fifo_xlnx_512x36_2clk_18to36.v | 2 +- usrp2/coregen/fifo_xlnx_512x36_2clk_18to36.veo | 52 +++++++++++ usrp2/coregen/fifo_xlnx_512x36_2clk_18to36.xco | 6 +- ...12x36_2clk_18to36_fifo_generator_v4_3_xst_1.lso | 3 + ...k_18to36_fifo_generator_v4_3_xst_1.ngc_xst.xrpt | 102 +++++++++++++++++++++ .../coregen/fifo_xlnx_512x36_2clk_18to36_flist.txt | 8 ++ .../fifo_xlnx_512x36_2clk_18to36_readme.txt | 39 ++++++++ .../coregen/fifo_xlnx_512x36_2clk_18to36_xmdf.tcl | 68 ++++++++++++++ usrp2/coregen/fifo_xlnx_512x36_2clk_36to18.ngc | 3 + usrp2/coregen/fifo_xlnx_512x36_2clk_36to18.v | 2 +- usrp2/coregen/fifo_xlnx_512x36_2clk_36to18.veo | 51 +++++++++++ usrp2/coregen/fifo_xlnx_512x36_2clk_36to18.xco | 6 +- ...12x36_2clk_36to18_fifo_generator_v4_3_xst_1.lso | 3 + ...k_36to18_fifo_generator_v4_3_xst_1.ngc_xst.xrpt | 101 ++++++++++++++++++++ .../coregen/fifo_xlnx_512x36_2clk_36to18_flist.txt | 8 ++ .../fifo_xlnx_512x36_2clk_36to18_readme.txt | 39 ++++++++ .../coregen/fifo_xlnx_512x36_2clk_36to18_xmdf.tcl | 68 ++++++++++++++ 18 files changed, 556 insertions(+), 8 deletions(-) create mode 100644 usrp2/coregen/fifo_xlnx_512x36_2clk_18to36.ngc create mode 100644 usrp2/coregen/fifo_xlnx_512x36_2clk_18to36.veo create mode 100644 usrp2/coregen/fifo_xlnx_512x36_2clk_18to36_fifo_generator_v4_3_xst_1.lso create mode 100644 usrp2/coregen/fifo_xlnx_512x36_2clk_18to36_fifo_generator_v4_3_xst_1.ngc_xst.xrpt create mode 100644 usrp2/coregen/fifo_xlnx_512x36_2clk_18to36_flist.txt create mode 100644 usrp2/coregen/fifo_xlnx_512x36_2clk_18to36_readme.txt create mode 100644 usrp2/coregen/fifo_xlnx_512x36_2clk_18to36_xmdf.tcl create mode 100644 usrp2/coregen/fifo_xlnx_512x36_2clk_36to18.ngc create mode 100644 usrp2/coregen/fifo_xlnx_512x36_2clk_36to18.veo create mode 100644 usrp2/coregen/fifo_xlnx_512x36_2clk_36to18_fifo_generator_v4_3_xst_1.lso create mode 100644 usrp2/coregen/fifo_xlnx_512x36_2clk_36to18_fifo_generator_v4_3_xst_1.ngc_xst.xrpt create mode 100644 usrp2/coregen/fifo_xlnx_512x36_2clk_36to18_flist.txt create mode 100644 usrp2/coregen/fifo_xlnx_512x36_2clk_36to18_readme.txt create mode 100644 usrp2/coregen/fifo_xlnx_512x36_2clk_36to18_xmdf.tcl diff --git a/usrp2/coregen/fifo_xlnx_512x36_2clk_18to36.ngc b/usrp2/coregen/fifo_xlnx_512x36_2clk_18to36.ngc new file mode 100644 index 000000000..376e18c57 --- /dev/null +++ b/usrp2/coregen/fifo_xlnx_512x36_2clk_18to36.ngc @@ -0,0 +1,3 @@ +XILINX-XDB 0.1 STUB 0.1 ASCII +XILINX-XDM V1.4e +$4264g<,[o}e~g`n;"2*413&;$>"9 > %0:?*rjx&Uhk"hffn]{hk~X=88s?;Q=cmi\5=rh;?$ekb?40493456712:;<=>?01274>6789:;<=>?0123456789:;<=>?0123456789:;<=>?0123456789:;<=>?0123457<9:1:"=?<;029MKVR\3KOH_O39;2=5`=683CE\XZ5psmd[cskdV~c~h}g<883:73<990BB][[:qplcZ`rdeUdk|h^cpw`ts400;2?;4118JJUSS2yxdkRhzlm]wlwct`Vdnklzj<883:4?<990DYY^ZT;fbpdYdg|d044?>0a855113922?OIX\^1HDO31483:45<9?0DYY^ZT;FLE972294:>6?7:HLSQQ11:025>4=AGZ^X7JFP@>2>586:281CXZ_UU8GKUG;93:5=?5<2;KMTPR=L@H7?<4?>018775833:99?<:4378LQQVR\3ndyy2<5;2=6>5?l29x>=>?ff662(363=808;58JJUSS2MC[N1=50?31?10>5833<>><<592:4:0>0>1?>0:4O>2:4F0>>3:8;0595601;1?<0330<=5<<49;KMTPR=IMNYN1650?3f?<?=AGZ^X7~}of]fiur~W}byi~fParqfvq:?29499675IORVP?vugnUna}zv_ujqavnXflmjxh27:1<2f>?=G\^[YY4}d^fbpdYdg|d054?>99B@ATF49437LJKR@>2:==FLMXJ0?07;@FGVD:4611JHI\N<5<;?DBCZH6>255NDEPB838?3HNO^L28>99B@ATF414j7LJKR@>:>58?3HNO^L26>99B@ATE49437LJKRC>2:==FLMXI0?07;@FGVG:4611JHI\M<5<;?DBCZK6>255NDEPA838?3HNO^O28>`9B@ATE410;255NDEPA8=8>3HYRBNQ]EF38F6=E];20NX]PIODL5>E33JK3M?5LE008GMCDCVFBOH@\E^VZT@40OAEN4:AOOG53:2=CAH6:<394DHC?54803MCJ0<<17:FJE9746>1OEL2>4?;8@LG;9<0;2:5KI@>21;069GMG:6;7=0HDL315<4?AOE48?5;6JFB=35:2=CAK6:;394DH@?5=803MCI0<716:FJF979?2NBN169GMG:597=0HDL323<4?AOE4;95;6JFB=07:2=CAK699394DH@?63803MCI0?917:FJF94?6>1OEO2=9?48@LD;:7=0HDL331<:?AOE4:;1<394DH@?74813MCI0>09;EKA81813MCI0809;EKA83813MCI0:09;EKA8=813MCI0408;EKSE96912NB\L2>:1<4?AOWI5;5;6JFPC>3:2=CAYH7=394DHRA878>3MC[N1=50?58@LVE4:4=7IAN<1<4?AIF48:5;6J@A=32:2=CGH6:>394DNC?56803MEJ0<:19:FLE972294<7IAN<07=2>BHI5;5:6J@A=0=2>BHI595:6J@A=6=2>BHI5?5:6J@A=4=2>BHI5=5:6J@A=:=2>BHI535:6J@B=2=3>BHJ5;;2:5KOC>25;169GKG:6=7=0HBL317<4?AIE48=5;6J@B=3;:2=CGK6:5384DN@?5;1=08;EMA8779?2NDN1<=>69GKG:5;7=0HBL325<4?AIE4;?5;6J@B=05:2=CGK69;394DN@?6=803MEI0?716:FLF949?2NDN1=?>89GKG:493:5;6J@B=12:3=CGK682;5KOC>7:3=CGK6>2;5KOC>5:3=CGK6<2;5KOC>;:3=CGK622:5KOQC?4;?69GKUG;97=0HB^M<1<4?AIWJ5;5;6J@PC>1:<=CGYH7?7>17:FLTG:4681N?6KAA29FJG26H72:DG7>@CK=1MHNK<;GFS0>@CXL?0Jlb|e09D7>AIL;1B37D@FTQ]31==NF@^[S=87;HLJPUY7?01BBDZ\T@VF3>OIA]U;<:5FNHV\441M7:KMMQY7K>1BBDZP0E58MKOSW9O<7D@FT^2E3>OIA]U:<:5FNHV\541469JJLRX9<=0ECG[_044?LHN\V;<;6GAIU]2<2=NF@^T=494IOKW[4G03@DBXR?M7:KMMQY6K>1BBDZP1E58MKOSW8O<7D@FT^3E3>OIA]U9<:5FNHV\641494IOKW[7G03@DBXR1BBDZP2E58MKOSW;O<7D@FT^0E3>OIA]U8<:5FNHV\741<8;HLJPZ54?2CEEYQ<469JJLRX;<=0ECG[_244?LHN\V9<;6GAIU]0<2=NF@^T?494IOKW[6G03@DBXR=M7:KMMQY4K>1BBDZP3E58MKOSW:O<7D@FT^1E2>OIA]UJ:6GAIU]A7>OHJ;1GE?5CO79OKDBBL>1GCJGLAM68HPR6<2F^X?84LTV1[I2JR\=<0@XZ;_M78IVAHF<1FYUMVc:ObnjtQm{ybccm4MhllvScu{`ee>6@>3:L241=I99;?7C??259M55533G;;895A1177?K77>=1E==9;;O33<1=I99387C?>4:L25521368J474<2D:=9:4N0360>H69?>0B259M57633G;9=95A1307?K75;=1E=?:;;O3111=I9;33G;95>5A1268J457<2D:?<:4N0110>H6;:>0B<=;4:L27023668J45?;2D:8>5A1418J4043G;829M5<53:L166=I::90B9:<;O657>H30:1E9=<4N708J24H?<:1E4;=4N951?K?43G3;j6@M_CWPTLHXX[E[_:5AEUULVN2PRdqvhq74:2_;#j|i.sd,cf~)keas#@v`r^pg[uhszVmhSua}0122[Wct}e~:??5Z0.eqb+ta'nis"nbdx.O{kwYulVzexQhc^zlv567:VXnxb{1208Q5)`zo$yj"ilx/aoo})JpfxT~iQnup\cfYg{:;<>Q]erwop4553\:$kh!rg-dg}(ddbr$Aua}_sf\tkruWniTtb|?016\V`urd};8>6[?/fpe*w`(ojr%oaew/LzlvZtcWyd~Ril_ymq4562W[oxyaz>339V4*aun'xm#jmw.bnh|*Kg{UyhR~ats]dgZ~hz9:;:R\jstnw564<]9%l~k }f.e`|+ekcq%Ftb|Pre]sjqtXojUsc>?06]Qavsk|8997X> gsd-vc)`kq$h`fv Mymq[rtXxg~ySjmPxnp3456XZly~`y?<2:W3+bta&{l$knv!cmi{+H~hzV}yS}`{r^e`[}iu89::S_k|umv277=R8&myj#|i/fa{*fjlp&GscQxr^rmpwY`kVrd~=>?2^Pfwpjs9:80Y=!hrg,qb*adp'iggu!Bxnp\swYwf}xTknQwos2346YUmzgx<==;T2,cw`)zo%lou lljz,I}iuW~xT|cz}_fa\|jt789>T^h}zlu306>S7'nxm"h gbz-gim'Drd~Ry}_qlwvZadWqey<=>:_Sgpqir6;;1^<"i}f/pe+be&jf`t"Cwos]tvZvi|{UloRv`r1232ZTb{|f=><4U1-dvc(un&mht#mcky-N|jtX{U{by|Pgb]{kw678>UYi~{ct011?P6(o{l%~k!hcy,`hn~(EqeySz|Ppovq[beXpfx;<=6PRdqvhq7592_;#j|i.sd,cf~)keas#jPpovq[goi4949=6[?/fpe*w`(ojr%oaew/sf\tkruWkce0<0=1:W3+bta&{l$knv!cmi{+wbXxg~ySoga<3<15>S7'nxm"h gbz-gim'{nT|cz}_ckm868592_;#j|i.sd,cf~)keas#jPpovq[goi4=49=6[?/fpe*w`(ojr%oaew/sf\tkruWkce080=1:W3+bta&{l$knv!cmi{+wbXxg~ySoga<7<15>S7'nxm"h gbz-gim'{nT|cz}_ckm828592_;#j|i.sd,cf~)keas#jPpovq[goi4149<6[?/fpe*w`(ojr%oaew/sf\tkruWkceS= gsd-vc)`kq$h`fv re]sjqtXj`dT9?>4U1-dvc(un&mht#mcky-q`Zvi|{UiecQ9219V4*aun'xm#jmw.bnh|*tcWyd~Rlfn^514>S7'nxm"h gbz-gim'{nT|cz}_ckm[=413\:$kh!rg-dg}(ddbr$~iQnup\flhXpfx;<=>=7:W3+bta&{l$knv!cmi{+wbXxg~ySoga_ymq45679;<0Y=!hrg,qb*adp'iggu!}d^rmpwYeagUsc>?0004?P6(o{l%~k!hcy,`hn~(zmU{by|Pbhl\|jt789;:>;5Z0.eqb+ta'nis"nbdx.pg[uhszVhbbRv`r123671<]9%l~k }f.e`|+ekcq%yhR~ats]amkYg{:;1^<"i}f/pe+be&jf`t"|k_qlwvZdnfVrd~=>?3305?P6(o{l%~k!hcy,`hn~(zmU{by|Pbhl\|jt789>9;6[?/fpe*w`(ojr%oaew/sf\tkruWkceSua}0127570<]9%l~k }f.e`|+ekcq%yhR~ats]amkYg{:;<8<8;T2,cw`)zo%lou lljz,vaYwf}xTnd`Pxnp34536:?1^<"i}f/pe+be&jf`t"|k_qlwvZdnfVrd~=>?63a8Q5)`zo$yj"ilx/aoo})ulVzexQmio]{kw678?;:S^Y?2b9V4*aun'xm#jmw.bnh|*tcWyd~Rlfn^zlv567>8;T_Z?=7:W3+bta&{l$knv!cmi{+wbXxg~ySoga_ymq4561:;<0Y=!hrg,qb*adp'iggu!}d^rmpwYeagUsc>?0604?P6(o{l%~k!hcy,`hn~(zmU{by|Pbhl\|jt789=:>=5Z0.eqb+ta'nis"nbdx.pg[uhszVmh0=0=0:W3+bta&{l$knv!cmi{+wbXxg~ySjm31?03?P6(o{l%~k!hcy,`hn~(zmU{by|Pgb>1:76<]9%l~k }f.e`|+ekcq%yhR~ats]dg959:91^<"i}f/pe+be&jf`t"|k_qlwvZad4=49<6[?/fpe*w`(ojr%oaew/sf\tkruWni793328Q5)`zo$yj"ilx/aoo})ulVzexQhc=5=65=R8&myj#|i/fa{*fjlp&xoS}`{r^e`8=86n2_;#j|i.sd,cf~)keas#jPpovq[beX88l0Y=!hrg,qb*adp'iggu!}d^rmpwY`kV;:j6[?/fpe*w`(ojr%oaew/sf\tkruWniT>f:W3+bta&{l$knv!cmi{+wbXxg~ySjmP40d8Q5)`zo$yj"ilx/aoo})ulVzexQhc^72b>S7'nxm"h gbz-gim'{nT|cz}_fa\24`<]9%l~k }f.e`|+ekcq%yhR~ats]dgZ16n2_;#j|i.sd,cf~)keas#jPpovq[beX0;<0Y=!hrg,qb*adp'iggu!}d^rmpwY`kVkx~hi30?05?P6(o{l%~k!hcy,`hn~(zmU{by|Pgb]bwwc`4849:6[?/fpe*w`(ojr%oaew/sf\tkruWniTm~|jg=0=63=R8&myj#|i/fa{*fjlp&xoS}`{r^e`[duumn682?84U1-dvc(un&mht#mcky-q`Zvi|{UloRo|rde?0;413\:$kh!rg-dg}(ddbr$~iQnup\cfYf{{ol080=6:W3+bta&{l$knv!cmi{+wbXxg~ySjmParpfc909:?1^<"i}f/pe+be&jf`t"|k_qlwvZadWhyyij28>348Q5)`zo$yj"ilx/aoo})ulVzexQhc^cpv`a;078>7X> gsd-vc)`kq$h`fv re]sjqtXojUjkh_106?P6(o{l%~k!hcy,`hn~(zmU{by|Pgb]bwwc`W88>7X> gsd-vc)`kq$h`fv re]sjqtXojUjkh_306?P6(o{l%~k!hcy,`hn~(zmU{by|Pgb]bwwc`W:8>7X> gsd-vc)`kq$h`fv re]sjqtXojUjkh_506?P6(o{l%~k!hcy,`hn~(zmU{by|Pgb]bwwc`W<8>7X> gsd-vc)`kq$h`fv re]sjqtXojUjkh_706?P6(o{l%~k!hcy,`hn~(zmU{by|Pgb]bwwc`W>8>7X> gsd-vc)`kq$h`fv re]sjqtXojUjkh_90:?P6(o{l%~k!hcy,`hn~(zmU{by|Pgb]bwwc`Wm;7<3<6;T2,cw`)zo%lou lljz,vaYwf}xTknQnssgd[a7;97827X> gsd-vc)`kq$h`fv re]sjqtXojUjkh_e3?6;4>3\:$kh!rg-dg}(ddbr$~iQnup\cfYf{{olSi?33?0:?P6(o{l%~k!hcy,`hn~(zmU{by|Pgb]bwwc`Wm;783<6;T2,cw`)zo%lou lljz,vaYwf}xTknQnssgd[a7;=7827X> gsd-vc)`kq$h`fv re]sjqtXojUjkh_e3?2;4>3\:$kh!rg-dg}(ddbr$~iQnup\cfYf{{olSi?37?0:?P6(o{l%~k!hcy,`hn~(zmU{by|Pgb]bwwc`Wm;743<7;T2,cw`)zo%lou lljz,vaYwf}xTknQnssgd[a7X8;20Y=!hrg,qb*adp'iggu!}d^rmpwY`kVkx~hiPd0]26==R8&myj#|i/fa{*fjlp&xoS}`{r^e`[duumnUo=R<=8:W3+bta&{l$knv!cmi{+wbXxg~ySjmParpfcZb6W:837X> gsd-vc)`kq$h`fv re]sjqtXojUjkh_e3\07><]9%l~k }f.e`|+ekcq%yhR~ats]dgZgtzlmTh?1378Q5)`zo$yj"ilx/aoo})ulVzexQhc^zlv567:;?0Y=!hrg,qb*adp'iggu!}d^rmpwY`kVrd~=>?3378Q5)`zo$yj"ilx/aoo})ulVzexQhc^zlv567<;?0Y=!hrg,qb*adp'iggu!}d^rmpwY`kVrd~=>?5378Q5)`zo$yj"ilx/aoo})ulVzexQhc^zlv567>;?0Y=!hrg,qb*adp'iggu!}d^rmpwY`kVrd~=>?7338Q5)`zo$yj"ilx/aoo})pzVzexQmio>2:77<]9%l~k }f.e`|+ekcq%|~R~ats]amk:56;;0Y=!hrg,qb*adp'iggu!xr^rmpwYeag682??4U1-dvc(un&mht#mcky-tvZvi|{Uiec2;>338Q5)`zo$yj"ilx/aoo})pzVzexQmio>6:77<]9%l~k }f.e`|+ekcq%|~R~ats]amk:16;;0Y=!hrg,qb*adp'iggu!xr^rmpwYeag6<2??4U1-dvc(un&mht#mcky-tvZvi|{Uiec27>338Q5)`zo$yj"ilx/aoo})pzVzexQmio>::76<]9%l~k }f.e`|+ekcq%|~R~ats]amkY6:91^<"i}f/pe+be&jf`t"y}_qlwvZdnfV89<6[?/fpe*w`(ojr%oaew/vp\tkruWkceS>8;7X> gsd-vc)`kq$h`fv ws]sjqtXj`dT4?>4U1-dvc(un&mht#mcky-tvZvi|{UiecQ6279V4*aun'xm#jmw.bnh|*quWyd~Rlfn^zlv5678;=0Y=!hrg,qb*adp'iggu!xr^rmpwYeagUsc>?01312>S7'nxm"h gbz-gim'~xT|cz}_ckm[}iu89::>:5Z0.eqb+ta'nis"nbdx.uq[uhszVhbbRv`r12354413\:$kh!rg-dg}(ddbr${Qnup\flhXpfx;<=<=7:W3+bta&{l$knv!cmi{+rtXxg~ySoga_ymq45659;<0Y=!hrg,qb*adp'iggu!xr^rmpwYeagUsc>?0204?P6(o{l%~k!hcy,`hn~({U{by|Pbhl\|jt78999>;5Z0.eqb+ta'nis"nbdx.uq[uhszVhbbRv`r123071<]9%l~k }f.e`|+ekcq%|~R~ats]amkYg{:;<9?=6:W3+bta&{l$knv!cmi{+rtXxg~ySoga_ymq4562:>1^<"i}f/pe+be&jf`t"y}_qlwvZdnfVrd~=>?5005?P6(o{l%~k!hcy,`hn~({U{by|Pbhl\|jt789<9o6[?/fpe*w`(ojr%oaew/vp\tkruWkceSua}012554YT_98h7X> gsd-vc)`kq$h`fv ws]sjqtXj`dTtb|?01425ZUP9;=0Y=!hrg,qb*adp'iggu!xr^rmpwYeagUsc>?07012>S7'nxm"h gbz-gim'~xT|cz}_ckm[}iu89:<>:5Z0.eqb+ta'nis"nbdx.uq[uhszVhbbRv`r12334473\:$kh!rg-dg}(ddbr${Qnup\cf:76;:0Y=!hrg,qb*adp'iggu!xr^rmpwY`k5;5>=5Z0.eqb+ta'nis"nbdx.uq[uhszVmh0?0=0:W3+bta&{l$knv!cmi{+rtXxg~ySjm33?03?P6(o{l%~k!hcy,`hn~({U{by|Pgb>7:76<]9%l~k }f.e`|+ekcq%|~R~ats]dg939:91^<"i}f/pe+be&jf`t"y}_qlwvZad4?49<6[?/fpe*w`(ojr%oaew/vp\tkruWni7;3328Q5)`zo$yj"ilx/aoo})pzVzexQhc=;=5c=R8&myj#|i/fa{*fjlp&}yS}`{r^e`[57a3\:$kh!rg-dg}(ddbr${Qnup\cfY69o1^<"i}f/pe+be&jf`t"y}_qlwvZadW;;m7X> gsd-vc)`kq$h`fv ws]sjqtXojU8=k5Z0.eqb+ta'nis"nbdx.uq[uhszVmhS9?i;T2,cw`)zo%lou lljz,swYwf}xTknQ:1g9V4*aun'xm#jmw.bnh|*quWyd~Ril_73e?P6(o{l%~k!hcy,`hn~({U{by|Pgb]45c=R8&myj#|i/fa{*fjlp&}yS}`{r^e`[=7a3\:$kh!rg-dg}(ddbr${Qnup\cfY>:?1^<"i}f/pe+be&jf`t"y}_qlwvZadWhyyij2?>348Q5)`zo$yj"ilx/aoo})pzVzexQhc^cpv`a;978=7X> gsd-vc)`kq$h`fv ws]sjqtXojUjkh<3<12>S7'nxm"h gbz-gim'~xT|cz}_fa\evtbo595>;5Z0.eqb+ta'nis"nbdx.uq[uhszVmhSl}}ef>7:70<]9%l~k }f.e`|+ekcq%|~R~ats]dgZgtzlm793<9;T2,cw`)zo%lou lljz,swYwf}xTknQnssgd8385>2_;#j|i.sd,cf~)keas#z|Ppovq[beXizxnk191279V4*aun'xm#jmw.bnh|*quWyd~Ril_`qqab:?6;<0Y=!hrg,qb*adp'iggu!xr^rmpwY`kVkx~hi39?06?P6(o{l%~k!hcy,`hn~({U{by|Pgb]bwwc`W98>7X> gsd-vc)`kq$h`fv ws]sjqtXojUjkh_006?P6(o{l%~k!hcy,`hn~({U{by|Pgb]bwwc`W;8>7X> gsd-vc)`kq$h`fv ws]sjqtXojUjkh_206?P6(o{l%~k!hcy,`hn~({U{by|Pgb]bwwc`W=8>7X> gsd-vc)`kq$h`fv ws]sjqtXojUjkh_406?P6(o{l%~k!hcy,`hn~({U{by|Pgb]bwwc`W?8>7X> gsd-vc)`kq$h`fv ws]sjqtXojUjkh_606?P6(o{l%~k!hcy,`hn~({U{by|Pgb]bwwc`W18>7X> gsd-vc)`kq$h`fv ws]sjqtXojUjkh_80:?P6(o{l%~k!hcy,`hn~({U{by|Pgb]bwwc`Wm;7=3<6;T2,cw`)zo%lou lljz,swYwf}xTknQnssgd[a7;:7827X> gsd-vc)`kq$h`fv ws]sjqtXojUjkh_e3?7;4>3\:$kh!rg-dg}(ddbr${Qnup\cfYf{{olSi?34?0:?P6(o{l%~k!hcy,`hn~({U{by|Pgb]bwwc`Wm;793<6;T2,cw`)zo%lou lljz,swYwf}xTknQnssgd[a7;>7827X> gsd-vc)`kq$h`fv ws]sjqtXojUjkh_e3?3;4>3\:$kh!rg-dg}(ddbr${Qnup\cfYf{{olSi?38?0:?P6(o{l%~k!hcy,`hn~({U{by|Pgb]bwwc`Wm;753<7;T2,cw`)zo%lou lljz,swYwf}xTknQnssgd[a7X9;20Y=!hrg,qb*adp'iggu!xr^rmpwY`kVkx~hiPd0]16==R8&myj#|i/fa{*fjlp&}yS}`{r^e`[duumnUo=R==8:W3+bta&{l$knv!cmi{+rtXxg~ySjmParpfcZb6W=837X> gsd-vc)`kq$h`fv ws]sjqtXojUjkh_e3\17><]9%l~k }f.e`|+ekcq%|~R~ats]dgZgtzlmTh?1378Q5)`zo$yj"ilx/aoo})pzVzexQhc^zlv567:;?0Y=!hrg,qb*adp'iggu!xr^rmpwY`kVrd~=>?3378Q5)`zo$yj"ilx/aoo})pzVzexQhc^zlv567<;?0Y=!hrg,qb*adp'iggu!xr^rmpwY`kVrd~=>?5378Q5)`zo$yj"ilx/aoo})pzVzexQhc^zlv567>;?0Y=!hrg,qb*adp'iggu!xr^rmpwY`kVrd~=>?7378Q5)`zo$yj"ilx/aoo})pzVzexQhc^zlv5670;k0Y=!hrg,qb*ak8'xo#j|>.sdtbq)UIDUYHRKA_GUEP44d3\:$kh!rg-dh5(ul&my=#|iwgv,VDKXZMUNBRHXFU3\57?<]9%l~k }f.eo4+tc'nx:"hxfu-QEHYUMNE^XRKA1218Q5)`zo$yj"ic0/pg+bt6&{l|jy!lusp\br`sWz~jxhQISL]EBa74>2_;#j|i.sd,ci6)zm%l~< }fvdw+fsuzVl|jyQ|t`vf[CUJWOLo= Ga399V4*aun'xm#jb?.sf,cw7)zo}mx"mzrs]escrX{}kiRH\M^DE`4+Nf8;8?6[?/fpe*w`(oe:%~i!hr0,qbr`s'jy~Rhxfu]ppdrbWOYFSKHk2248Q5)`zo$yj"ic0/pg+bt6&{l|jy!lusp\br`sWz~jxhQISL]EBa4*Ag937X> gsd-vc)`d9$yh"i}1/pescr(k|xySkyit^qweqcXNZGTJKj=-Hl257><]9%l~k }f.eo4+tc'nx:"hxfu-fiur~Wo}mxRhm269V4*aun'xm#jb?.sf,cw7)zo}mx"kbpu{\br`sW`8n7X> gsd-vc)`d9$yh"i}1/pescr(mdzuRhxfu]j[jt789:9j6[?/fpe*w`(oe:%~i!hr0,qbr`s'lg{xtQiwgv\mZiu89:;=?74U1-dvc(un&mg<#|k/fpbw+tt|z%h<"mnrs{maq:76;30Y=!hrg,qb*ak8'xo#j|ns/pppv)d8&ij~waeu>2:7?<]9%l~k }f.eo4+tc'nxj#||tr-`4*efz{seiy2=>3;8Q5)`zo$yj"ic0/pg+btf{'xxx~!l0.abvwim}682?h4U1-dvc(un&mg<#|k/fpbw+tt|z%h<"ibuy,di^6Z&ng:"`?=f:W3+bta&{l$ka>!re-dvdu)zz~x#n> glw{*bk\9T$la~ bs3d8Q5)`zo$yj"ic0/pg+btf{'xxx~!l0.enq}(`eR8V"jc|.lq1b>S7'nxm"h gm2-va)`zhy%~~z|/b2,chs&ngP?P hmr,nw7`<]9%l~k }f.eo4+tc'nxj#||tr-`4*aj}q$laV:R.fop*hu5;2_;#j|i.sd,ci6)zm%l~l}!rrvp+f6(~86;2?=4U1-dvc(un&mg<#|k/fpbw+tt|z%h<"x><0<17>S7'nxm"h gm2-va)`zhy%~~z|/b2,r4:56;90Y=!hrg,qb*ak8'xo#j|ns/pppv)d8&|:0>0=3:W3+bta&{l$ka>!re-dvdu)zz~x#n> v0>7:7d<]9%l~k }f.eo4+tc'nxj#||tr-`4*p6W9Ujbi>?0131f>S7'nxm"h gm2-va)`zhy%~~z|/b2,r4Y6Whdo<=>?13`8Q5)`zo$yj"ic0/pg+btf{'xxx~!l0.t2[7Yffm:;<=?=b:W3+bta&{l$ka>!re-dvdu)zz~x#n> v0]0[dhc89:;=?l4U1-dvc(un&mg<#|k/fpbw+tt|z%h<"x>_5]mkq6789;956[?/fpe*w`(oe:%~i!hr`q-vvrt'j;$ol|}yogw858512_;#j|i.sd,ci6)zm%l~l}!rrvp+f7(khxyuck{<0<1=>S7'nxm"h gm2-va)`zhy%~~z|/b3,gdtuqgo0?0=9:W3+bta&{l$ka>!re-dvdu)zz~x#n? c`pq}kcs4:49j6[?/fpe*w`(oe:%~i!hr`q-vvrt'j;$k`{w.foX4X(`e8$f=?h4U1-dvc(un&mg<#|k/fpbw+tt|z%h="ibuy,di^7Z&ngx"`}=f:W3+bta&{l$ka>!re-dvdu)zz~x#n? glw{*bk\:T$la~ bs3d8Q5)`zo$yj"ic0/pg+btf{'xxx~!l1.enq}(`eR9V"jc|.lq1b>S7'nxm"h gm2-va)`zhy%~~z|/b3,chs&ngP8P hmr,nw75<]9%l~k }f.eo4+tc'nxj#||tr-`5*p64949?6[?/fpe*w`(oe:%~i!hr`q-vvrt'j;$z<2>>318Q5)`zo$yj"ic0/pg+btf{'xxx~!l1.t28785;2_;#j|i.sd,ci6)zm%l~l}!rrvp+f7(~8682?=4U1-dvc(un&mg<#|k/fpbw+tt|z%h="x><5<1f>S7'nxm"h gm2-va)`zhy%~~z|/b3,r4Y7Whdo<=>?13`8Q5)`zo$yj"ic0/pg+btf{'xxx~!l1.t2[4Yffm:;<=?=b:W3+bta&{l$ka>!re-dvdu)zz~x#n? v0]1[dhc89:;=?l4U1-dvc(un&mg<#|k/fpbw+tt|z%h="x>_2]bja6789;9n6[?/fpe*w`(oe:%~i!hr`q-vvrt'j;$z=5Z0.eqb+ta'nf;"j gscp*wus{&ida}?=9:W3+bta&{l$ka>!re-dvdu)zz~x#ob_dosp|YajVc8<6[?/fpe*w`(oe:%~i!hr`q-vvrt'{kfShctx]efZoXg{:;<==>;T2,cw`)zo%l`= }d.eqev(u{}y$~lcPelrw}Z`eW`Ud~=>?0000?P6(o{l%~k!hl1,q`*twf}x$Anaznu]`kphs:=1^<"i}f/pe+bj7&{n$~}`{r.O`kphsWje~by?=4:W3+bta&{l$ka>!re-qtkru'DidyczPcnwmp7433\:$kh!rg-dh5(ul&x{by| MbmvjqYdg|d??:4U1-dvc(un&mg<#|k/srmpw)JkfexRm`uov761=R8&myj#|i/fn3*wb(zyd~"Clotlw[firf}?986[?/fpe*w`(oe:%~i!}povq+Heh}g~Tob{at707?P6(o{l%~k!hl1,q`*twf}x$Anaznu]`kphs?;>0Y=!hrg,qb*ak8'xo#~ats-Ngjsi|Vidycz7289V4*aun'xm#jb?.sf,vuhsz&Ghcx`{_bmvjqYdq5:5>n5Z0.eqb+ta'nf;"j rqlwv*Kdg|dSnaznu]`}969W{~956[?/fpe*w`(oe:%~i!}povq+Heh}g~Tob{at^az8485k2_;#j|i.sd,ci6)zm%y|cz}/LalqkrXkfexRmv<0<\vq4>3\:$kh!rg-dh5(ul&x{by| MbmvjqYdg|dSnw32?0`?P6(o{l%~k!hl1,q`*twf}x$Anaznu]`kphsWjs7>3Q}t3;8Q5)`zo$yj"ic0/pg+wvi|{%Fob{at^alqkrXkp682?m4U1-dvc(un&mg<#|k/srmpw)JkfexRm`uov\g|:46Vx>45Z0.eqb+ta'nf;"j rqlwv*Kdg|dSnaznu]`}929:j1^<"i}f/pe+bj7&{n$~}`{r.O`kphsWje~byQly=6=[wr512_;#j|i.sd,ci6)zm%y|cz}/LalqkrXkfexRmv<4<1g>S7'nxm"h gm2-va)uxg~y#@m`uov\gjsi|Vir080Pru0:?P6(o{l%~k!hl1,q`*twf}x$Anaznu]`kphsWjs7:37Uyx?74U1-dvc(un&mg<#|k/srmpw)JkfexRm`uov\g|:06;i0Y=!hrg,qb*ak8'xo#~ats-Ngjsi|VidyczPcx>4:Zts:h1^<"i}f/pe+bj7&{n$~}`{r.O`kphsWje~byQwos>3:7g<]9%l~k }f.eo4+tc'{zex!BcnwmpZeh}g~Ttb|31?0b?P6(o{l%~k!hl1,q`*twf}x$Anaznu]`kphsWqey0?0=a:W3+bta&{l$ka>!re-qtkru'DidyczPcnwmpZ~hz595>l5Z0.eqb+ta'nf;"j rqlwv*Kdg|dSnaznu]{kw:36;k0Y=!hrg,qb*ak8'xo#~ats-Ngjsi|VidyczPxnp?1;4f3\:$kh!rg-dh5(ul&x{by| MbmvjqYdg|dSua}<7<1e>S7'nxm"h gm2-va)uxg~y#@m`uov\gjsi|Vrd~1912`9V4*aun'xm#jb?.sf,vuhsz&Ghcx`{_bmvjqYg{632?j4U1-dvc(un&mg<#|k/srmpw)JkfexRm`uov\|jt;07Uyxf:W3+bta&{l$ka>!re-qtkru'je~by2>>0d8Q5)`zo$yj"ic0/pg+wvi|{%hcx`{<3<2b>S7'nxm"h gm2-va)uxg~y#naznu>0:4`<]9%l~k }f.eo4+tc'{zex!lotlw8186n2_;#j|i.sd,ci6)zm%y|cz}/bmvjq:268l0Y=!hrg,qb*ak8'xo#~ats-`kphs4?4:j6[?/fpe*w`(oe:%~i!}povq+firf}6<2e:W3+bta&{l$ka>!re-qtkru'je~byQ?1d9V4*aun'xm#jb?.sf,vuhsz&idyczP10g8Q5)`zo$yj"ic0/pg+wvi|{%hcx`{_33f?P6(o{l%~k!hl1,q`*twf}x$ob{at^12a>S7'nxm"h gm2-va)uxg~y#naznu]75`=R8&myj#|i/fn3*wb(zyd~"m`uov\14c<]9%l~k }f.eo4+tc'{zex!lotlw[37b3\:$kh!rg-dh5(ul&x{by| cnwmpZ16m2_;#j|i.sd,ci6)zm%y|cz}/bmvjqY?:;1^<"i}f/pe+bj7&{n$~}`{r.alqkrXl86;2?<4U1-dvc(un&mg<#|k/srmpw)dg|dSi?31?01?P6(o{l%~k!hl1,q`*twf}x$ob{at^f28785:2_;#j|i.sd,ci6)zm%y|cz}/bmvjqYc9595>?5Z0.eqb+ta'nf;"j rqlwv*eh}g~Th<2;>308Q5)`zo$yj"ic0/pg+wvi|{%hcx`{_e3?1;453\:$kh!rg-dh5(ul&x{by| cnwmpZb64?49>6[?/fpe*w`(oe:%~i!}povq+firf}Uo=191239V4*aun'xm#jb?.sf,vuhsz&idyczPd0>;:77<]9%l~k }f.eo4+tc'{zex!lotlw[a7X8;;0Y=!hrg,qb*ak8'xo#~ats-`kphsWm;T=??4U1-dvc(un&mg<#|k/srmpw)dg|dSi?P2338Q5)`zo$yj"ic0/pg+wvi|{%hcx`{_e3\777<]9%l~k }f.eo4+tc'{zex!lotlw[a7X<;;0Y=!hrg,qb*ak8'xo#~ats-`kphsWm;T9??4U1-dvc(un&mg<#|k/srmpw)dg|dSi?P6338Q5)`zo$yj"ic0/pg+wvi|{%hcx`{_e3\377<]9%l~k }f.eo4+tc'{zex!lotlw[a7X0;30Y=!hrg,qb*ak8'}y#jyns/uppv)d9&ij~waeu>3:7?<]9%l~k }f.eo4+qu'n}j#y|tr-`5*efz{seiy2>>3;8Q5)`zo$yj"ic0/uq+bqf{'}xx~!l1.abvwim}692?74U1-dvc(un&mg<#y}/fubw+qt|z%h="mnrs{maq:46;l0Y=!hrg,qb*ak8'}y#jyns/uppv)d9&mfyu hmZ2^*bk6&d;9j6[?/fpe*w`(oe:%{!hw`q-svrt'j;$k`{w.foX5X(`ez$f?h4U1-dvc(un&mg<#y}/fubw+qt|z%h="ibuy,di^4Z&ngx"`}=f:W3+bta&{l$ka>!ws-dsdu)z~x#n? glw{*bk\;T$la~ bs3d8Q5)`zo$yj"ic0/uq+bqf{'}xx~!l1.enq}(`eR>V"jc|.lq17>S7'nxm"h gm2-sw)`hy%{~z|/b3,r4:76;90Y=!hrg,qb*ak8'}y#jyns/uppv)d9&|:0<0=3:W3+bta&{l$ka>!ws-dsdu)z~x#n? v0>1:75<]9%l~k }f.eo4+qu'n}j#y|tr-`5*p64:49?6[?/fpe*w`(oe:%{!hw`q-svrt'j;$z<2;>3`8Q5)`zo$yj"ic0/uq+bqf{'}xx~!l1.t2[5Yffm:;<=?=b:W3+bta&{l$ka>!ws-dsdu)z~x#n? v0]2[dhc89:;=?l4U1-dvc(un&mg<#y}/fubw+qt|z%h="x>_3]bja6789;9n6[?/fpe*w`(oe:%{!hw`q-svrt'j;$zS7'nxm"h gm2-sw)`hy%{~z|/b0,gdtuqgo0<0=9:W3+bta&{l$ka>!ws-dsdu)z~x#n< c`pq}kcs4;4956[?/fpe*w`(oe:%{!hw`q-svrt'j8$ol|}yogw8685n2_;#j|i.sd,ci6){%l{l}!wrvp+f4(ods"jcT0\,di4(j9;l0Y=!hrg,qb*ak8'}y#jyns/uppv)d:&mfyu hmZ3^*bkt&dy9j6[?/fpe*w`(oe:%{!hw`q-svrt'j8$k`{w.foX6X(`ez$f?h4U1-dvc(un&mg<#y}/fubw+qt|z%h>"ibuy,di^5Z&ngx"`}=f:W3+bta&{l$ka>!ws-dsdu)z~x#n< glw{*bk\"x><3<17>S7'nxm"h gm2-sw)`hy%{~z|/b0,r4:46;90Y=!hrg,qb*ak8'}y#jyns/uppv)d:&|:090=b:W3+bta&{l$ka>!ws-dsdu)z~x#n< v0]3[dhc89:;=?l4U1-dvc(un&mg<#y}/fubw+qt|z%h>"x>_0]bja6789;9n6[?/fpe*w`(oe:%{!hw`q-svrt'j8$zQnne234575j2_;#j|i.sd,ci6){%l{l}!wrvp+f4(~8U?Sl`k0123576<]9%l~k }f.eo4+qu'n}j#y|tr-`khv6:91^<"i}f/pe+bj7&~x$kzo|.vqww*ehey89<6[?/fpe*w`(oe:%{!hw`q-svrt'jef|>3 gsd-vc)`d9$|~"ixar,twqu(ohl%o>!hmtz-ch]5U'mf#c|329V4*aun'xm#jb?.vp,crgt&~y"inf/a0+bkrp'mfW>S!glq-iv543\:$kh!rg-dh5(pz&m|m~ xsuq,cd`)k:%laxv!glY7Y+aj{'gx>:5Z0.eqb+ta'nf;"z| gvcp*rus{&mjj#m gsd-vc)`d9$|~"ixar,twqu(ohl%o>!y1=1=62=R8&myj#|i/fn3*rt(o~kx"z}{s.ebb+e4';783>2g9V4*aun'xm#jb?.vp,crgt&~y"inf/a0+s7X9Vkeh=>?000e?P6(o{l%~k!hl1,tv*apiz$|y} g`d-g6)q9V8Tmcj?01226c=R8&myj#|i/fn3*rt(o~kx"z}{s.ebb+e4';T?Road123444a3\:$kh!rg-dh5(pz&m|m~ xsuq,cd`)k:%}=R:Paof34566:j1^<"i}f/pe+bj7&~x$kzo|.vqww*tfeVkgab}{_gwohZo4<2_;#j|i.sd,ci6){%l{l}!wrvp+wgjWhffc~zPftno[lYj}q:;<==:;T2,cw`)zo%l`= xr.etev(p{}y$~lcPamolwqYa}efTeRczx12344533\:$kh!rg-dh5(pz&m|m~ xsuq,vdkXiegdyQiumn\mZhh|9:;=>;4U1-dvc(un&mg<#y}/fubw+qt|z%ym`QnllmppZ`rdeUbSca{012257><]9%l~k }f.eo4+qu'n}j#y|tr-qehYa}efTjoQf249V4*aun'xm#jb?.vp,crgt&~y"|nm^dvhiYn:j1^<"i}f/pe+bj7&~x$kzo|.vqww*tfeVl~`aQf_np34565l2_;#j|i.sd,ci6){%l{l}!wrvp+wgjWog`RgPos234575<2_;#j|i.sd,ci6){%l{l}!wrvp+rtXzz~Th0Y=!hrg,qb*ak8'}y#z~ats-Ngjsi|Vidycz;259V4*aun'xm#jb?.vp,suhsz&Ghcx`{_bmvjq35<2_;#j|i.sd,ci6){%||cz}/LalqkrXkfex;<;;T2,cw`)zo%l`= xr.usjqt(Eje~byQlotlw372<]9%l~k }f.eo4+qu'~zex!BcnwmpZeh}g~3>95Z0.eqb+ta'nf;"z| wqlwv*Kdg|dSnaznu;1=>S7'nxm"h gm2-sw)pxg~y#@m`uov\gjsi|Vir0=0=c:W3+bta&{l$ka>!ws-ttkru'DidyczPcnwmpZe~494T~y<6;T2,cw`)zo%l`= xr.usjqt(Eje~byQlotlw[f;978h7X> gsd-vc)`d9$|~"ynup,Ifirf}Uhcx`{_b{?5;Yu|;30Y=!hrg,qb*ak8'}y#z~ats-Ngjsi|VidyczPcx>1:7e<]9%l~k }f.eo4+qu'~zex!BcnwmpZeh}g~Tot2=>^pw6<=R8&myj#|i/fn3*rt(yd~"Clotlw[firf}Uhu1=12b9V4*aun'xm#jb?.vp,suhsz&Ghcx`{_bmvjqYdq595Sz=9:W3+bta&{l$ka>!ws-ttkru'DidyczPcnwmpZe~4=49o6[?/fpe*w`(oe:%{!xpovq+Heh}g~Tob{at^az818Xz}827X> gsd-vc)`d9$|~"ynup,Ifirf}Uhcx`{_b{?1;4d3\:$kh!rg-dh5(pz&}{by| MbmvjqYdg|dSnw35?]qp7?<]9%l~k }f.eo4+qu'~zex!BcnwmpZeh}g~Tot29>3a8Q5)`zo$yj"ic0/uq+rvi|{%Fob{at^alqkrXkp6=2R|{289V4*aun'xm#jb?.vp,suhsz&Ghcx`{_bmvjqYdq5=5>n5Z0.eqb+ta'nf;"z| wqlwv*Kdg|dSnaznu]`}919W{~956[?/fpe*w`(oe:%{!xpovq+Heh}g~Tob{at^az8=85k2_;#j|i.sd,ci6){%||cz}/LalqkrXkfexRmv<9<\vq4f3\:$kh!rg-dh5(pz&}{by| MbmvjqYdg|dSua}<1<1e>S7'nxm"h gm2-sw)pxg~y#@m`uov\gjsi|Vrd~1?12`9V4*aun'xm#jb?.vp,suhsz&Ghcx`{_bmvjqYg{692?o4U1-dvc(un&mg<#y}/vrmpw)JkfexRm`uov\|jt;;78j7X> gsd-vc)`d9$|~"ynup,Ifirf}Uhcx`{_ymq8185i2_;#j|i.sd,ci6){%||cz}/LalqkrXkfexRv`r=7=6d=R8&myj#|i/fn3*rt(yd~"Clotlw[firf}Usc29>3c8Q5)`zo$yj"ic0/uq+rvi|{%Fob{at^alqkrXpfx7;3::Zts9o1^<"i}f/pe+bj7&~x${}`{r.alqkr;87;m7X> gsd-vc)`d9$|~"ynup,gjsi|5;5=k5Z0.eqb+ta'nf;"z| wqlwv*eh}g~7>3?i;T2,cw`)zo%l`= xr.usjqt(kfex1=11g9V4*aun'xm#jb?.vp,suhsz&idycz34?3e?P6(o{l%~k!hl1,tv*qwf}x$ob{at=7=5c=R8&myj#|i/fn3*rt(yd~"m`uov?2;7a3\:$kh!rg-dh5(pz&}{by| cnwmp9199o1^<"i}f/pe+bj7&~x${}`{r.alqkr;07;m7X> gsd-vc)`d9$|~"ynup,gjsi|535=h5Z0.eqb+ta'nf;"z| wqlwv*eh}g~T<e:W3+bta&{l$ka>!ws-ttkru'je~byQ<1d9V4*aun'xm#jb?.vp,suhsz&idyczP40g8Q5)`zo$yj"ic0/uq+rvi|{%hcx`{_43f?P6(o{l%~k!hl1,tv*qwf}x$ob{at^42a>S7'nxm"h gm2-sw)pxg~y#naznu]45`=R8&myj#|i/fn3*rt(yd~"m`uov\<4c<]9%l~k }f.eo4+qu'~zex!lotlw[<453\:$kh!rg-dh5(pz&}{by| cnwmpZb64949>6[?/fpe*w`(oe:%{!xpovq+firf}Uo=1?1239V4*aun'xm#jb?.vp,suhsz&idyczPd0>1:74<]9%l~k }f.eo4+qu'~zex!lotlw[a7;;7897X> gsd-vc)`d9$|~"ynup,gjsi|Vn:090=2:W3+bta&{l$ka>!ws-ttkru'je~byQk1=7=67=R8&myj#|i/fn3*rt(yd~"m`uov\`4:16;80Y=!hrg,qb*ak8'}y#z~ats-`kphsWm;7;3<=;T2,cw`)zo%l`= xr.usjqt(kfexRj><9<16>S7'nxm"h gm2-sw)pxg~y#naznu]g59?9:81^<"i}f/pe+bj7&~x${}`{r.alqkrXl8U;><5Z0.eqb+ta'nf;"z| wqlwv*eh}g~Th209V4*aun'xm#jb?.vp,suhsz&idyczPd0]164=R8&myj#|i/fn3*rt(yd~"m`uov\`4Y4:81^<"i}f/pe+bj7&~x${}`{r.alqkrXl8U?><5Z0.eqb+ta'nf;"z| wqlwv*eh}g~Th<5Z0.eqb+ta'nf;"z| wqlwv*eh}g~Th3:74<]9%l~k }f.eo4+qu'~zex!lotlw[a4;97897X> gsd-vc)`d9$|~"ynup,gjsi|Vn90?0=2:W3+bta&{l$ka>!ws-ttkru'je~byQk2=1=67=R8&myj#|i/fn3*rt(yd~"m`uov\`7:36;80Y=!hrg,qb*ak8'}y#z~ats-`kphsWm8793<=;T2,cw`)zo%l`= xr.usjqt(kfexRj=<7<16>S7'nxm"h gm2-sw)pxg~y#naznu]g6919:;1^<"i}f/pe+bj7&~x${}`{r.alqkrXl;632?<4U1-dvc(un&mg<#y}/vrmpw)dg|dSi<39?02?P6(o{l%~k!hl1,tv*qwf}x$ob{at^f1[5463\:$kh!rg-dh5(pz&}{by| cnwmpZb5W88:7X> gsd-vc)`d9$|~"ynup,gjsi|Vn9S?<>;T2,cw`)zo%l`= xr.usjqt(kfexRj=_202?P6(o{l%~k!hl1,tv*qwf}x$ob{at^f1[1463\:$kh!rg-dh5(pz&}{by| cnwmpZb5W<8:7X> gsd-vc)`d9$|~"ynup,gjsi|Vn9S;<>;T2,cw`)zo%l`= xr.usjqt(kfexRj=_602?P6(o{l%~k!hl1,tv*qwf}x$ob{at^f1[=463\:$kh!rg-dh5(pz&}{by| cnwmpZb5W0897X> gsd-vc)`d9$|~"ynup,gjsi|Vn80=0=2:W3+bta&{l$ka>!ws-ttkru'je~byQk3=3=67=R8&myj#|i/fn3*rt(yd~"m`uov\`6:56;80Y=!hrg,qb*ak8'}y#z~ats-`kphsWm97?3<=;T2,cw`)zo%l`= xr.usjqt(kfexRj<<5<16>S7'nxm"h gm2-sw)pxg~y#naznu]g7939:;1^<"i}f/pe+bj7&~x${}`{r.alqkrXl:6=2?<4U1-dvc(un&mg<#y}/vrmpw)dg|dSi=37?01?P6(o{l%~k!hl1,tv*qwf}x$ob{at^f08=85:2_;#j|i.sd,ci6){%||cz}/bmvjqYc;535><5Z0.eqb+ta'nf;"z| wqlwv*eh}g~Th>Q?209V4*aun'xm#jb?.vp,suhsz&idyczPd2]264=R8&myj#|i/fn3*rt(yd~"m`uov\`6Y5:81^<"i}f/pe+bj7&~x${}`{r.alqkrXl:U8><5Z0.eqb+ta'nf;"z| wqlwv*eh}g~Th>Q;209V4*aun'xm#jb?.vp,suhsz&idyczPd2]664=R8&myj#|i/fn3*rt(yd~"m`uov\`6Y1:81^<"i}f/pe+bj7&~x${}`{r.alqkrXl:U<><5Z0.eqb+ta'nf;"z| wqlwv*eh}g~Th>Q7209V4*aun'xm#jb?.vp,suhsz&idyczPd2]:53=R8&myj#|i/lgn+air|VcT<<84U1-dvc(un&gna"j`uu]j[4703\:$kh!rg-nah)cg|~TeR??169V4*aun'xm#`kb/emvpZoX98;<7X> gsd-vc)jmd%ocxzPi^3152=R8&myj#|i/lgn+air|VcT=>?8;T2,cw`)zo%fi`!kotv\mZ739>1^<"i}f/pe+hcj'me~xRgP1434?P6(o{l%~k!bel-gkprXaV;==:5Z0.eqb+ta'dof#iazt^k\52703\:$kh!rg-nah)cg|~TeR?7169V4*aun'xm#`kb/emvpZoX90;=7X> gsd-vc)jmd%ocxzPi^023>S7'nxm"h mdo,`jssW`U9<<94U1-dvc(un&gna"j`uu]j[776?2_;#j|i.sd,i`k(lfSdQ=2058Q5)`zo$yj"cjm.flqqYnW;9:;6[?/fpe*w`(elg$hb{{_h]1041<]9%l~k }f.ofi*bh}}UbS?;>7:W3+bta&{l$ahc dnww[lY5>8=0Y=!hrg,qb*kbe&ndyyQf_3523>S7'nxm"h mdo,`jssW`U94<94U1-dvc(un&gna"j`uu]j[7?6>2_;#j|i.sd,i`k(lfSdQ<169V4*aun'xm#`kb/emvpZoX;9;<7X> gsd-vc)jmd%ocxzPi^1252=R8&myj#|i/lgn+air|VcT???8;T2,cw`)zo%fi`!kotv\mZ549>1^<"i}f/pe+hcj'me~xRgP3534?P6(o{l%~k!bel-gkprXaV9>=;5Z0.eqb+ta'dof#iazt^k\040<]9%l~k }f.ofi*bh}}UbS8?9;T2,cw`)zo%fi`!kotv\mZ06>2_;#j|i.sd,i`k(lfSdQ8179V4*aun'xm#`kb/emvpZoX08<0Y=!hrg,qb*kbe&ndyyQf_83:?P6(o{l%~k!bel-gkprXelg7<3?n;T2,cw`)zo%fi`!kotv\i`k;994:m6[?/fpe*w`(elg$hb{{_lgn84799h1^<"i}f/pe+hcj'me~xRcjm=31:4g<]9%l~k }f.ofi*bh}}Ufi`2>3?3b?P6(o{l%~k!bel-gkprXelg7=90>a:W3+bta&{l$ahc dnww[hcj48?5=l5Z0.eqb+ta'dof#iazt^ofi97168k0Y=!hrg,qb*kbe&ndyyQbel>23;7f3\:$kh!rg-nah)cg|~Tahc319<2e>S7'nxm"h mdo,`jssWdof0<71189V4*aun'xm#`kb/emvpZkbe5;5=l5Z0.eqb+ta'dof#iazt^ofi94768k0Y=!hrg,qb*kbe&ndyyQbel>15;7f3\:$kh!rg-nah)cg|~Tahc323<2e>S7'nxm"h mdo,`jssWdof0?=11`9V4*aun'xm#`kb/emvpZkbe58?2 gsd-vc)jmd%ocxzPmdo?6386i2_;#j|i.sd,i`k(lfS`kb<35=5d=R8&myj#|i/lgn+air|Vgna1<7>0c8Q5)`zo$yj"cjm.flqqYjmd6953?6;T2,cw`)zo%fi`!kotv\i`k;:7;j7X> gsd-vc)jmd%ocxzPmdo?7586i2_;#j|i.sd,i`k(lfS`kb<23=5d=R8&myj#|i/lgn+air|Vgna1==>0c8Q5)`zo$yj"cjm.flqqYjmd68?3?n;T2,cw`)zo%fi`!kotv\i`k;;=4:m6[?/fpe*w`(elg$hb{{_lgn8639901^<"i}f/pe+hcj'me~xRcjm=1=5<=R8&myj#|i/lgn+air|Vgna1:1189V4*aun'xm#`kb/emvpZkbe5?5=45Z0.eqb+ta'dof#iazt^ofi909901^<"i}f/pe+hcj'me~xRcjm=5=5<=R8&myj#|i/lgn+air|Vgna161189V4*aun'xm#`kb/emvpZkbe535:h5Z0.eqb+ta'dof#jlb.f`nc+aeenk%bjklc/`nc*dkcVgnaRijndpbpjt(~hfbh#m|ts-qehjhgyQ;Q#|nm/p,r7Yig`dbx#|nm.fs5=~4>'xja gsd-vc)uidUyhRka169V4*aun'xm#ob_sgdkprXmg;87X> gsd-vc)uidU|~Rka1e9V4*aun'xm#}{bmi,vaYu{}Ujkh219V4*aun'xm#}{bmi,vaYu{}Ujkh_e314>S7'nxm"h rrvahn)ulVxxxRo|rde\`77d3\:$kh!rg-qwqdkc&xoS}{_bmnf4b<]9%l~k }f.pppgjl'{nT~~zPcnoa54c<]9%l~k }f.pppgjl'{nT~~zPrde?4;7b3\:$kh!rg-qwqdkc&xoS}{_sgd8486m2_;#j|i.sd,vvredb%yhR||t^pfc9499m1^<"i}f/pe+wusjea$~iQ}su]qabY79m1^<"i}f/pe+wusjea$~iQ}su]qabY69m1^<"i}f/pe+wusjea$~iQ}su]qabY59m1^<"i}f/pe+wusjea${Q}su]bwwc`:91^<"i}f/pe+wusjea${Q}su]bwwc`Wm;9<6[?/fpe*w`(zz~i`f!xr^pppZgtzlmTh??l;T2,cw`)zo%yylck.uq[wusWjefnd:W3+bta&{l$~~zmlj-tvZtt|VxnkR>>d:W3+bta&{l$~~zmlj-tvZtt|VxnkR?n;TQFVZGKAHYh7X]JR^TJWLDKM:1]ON74VHGT[Q_WM:1\IL=4WD@a?RTN\LUME_][c:UQMQCXEFNNSLm4WSKWAZKHLLUI=i5WIMKM\(^CJ):%=-][UC"3*4&F[JCB96V@RB[5?]USD@H<7U][_FLG3>^T\V\HOo5W_BMQAZOINF<0TilPIed8\anXX{cfZh||inl24>^ceVGjfb|Yesqjkk773QnfS@gaosTfvvohfj1j``a|t^gntqe3hffc~zPftno2>dfkb{h6lncjws[hguclx87nbdd:fbpdYdg|d$='k;ecweZeh}g~#=$j4d`vb[firf}"9%i5kauc\gjsi|!9"h6jnt`]`kphs =#o7io{a^alqkr/= n0hlzn_bmvjq.1!m1omyoPcnwmp-1.l2njxlQlotlw,=/c3mkmRm`uov+=,`:>5803mhbxh|}6:fjj-6.>2nbb%?&7:fjj-77!>1oec&>1(58`lh/9;#<7iga(01*3>bnf!;?%:5kio*21,12nbb%<&6:fjj-5.>2nbb%:&6:fjj-3.>2nbb%8&6:fjj-1.>2nbb%6&6:fjj-?.>2nbb1>17:fjj9776>1oec2>1?58`lh;9;4<7iga<01=3>bnf5;?2:5kio>21;14=7iga<9<5?aoi404<7iazt)2*3>bh}}":%55kotv+55/?3me~x%?>)99gkpr/9;#37iazt)30-==cg|~#=9'7;emvp-72!11ocxz'17+;?air|!;<%55kotv+5=/?3me~x%?6)69gkpr/: 20hb{{(32*<>bh}}"9=$64dnww,74.02ndyy&=3(:8`jss ;>"46j`uu*11,>bh}}"95$94dnww,6/?3me~x%=?)99gkpr/;8#37iazt)11-==cg|~#?>'7;emvp-53!11ocxz'34+4?air|!>";6j`uu*6-2=cg|~#:$94dnww,2/03me~x%6&7:flqq.>!>1ocxz30?:8`jss48:546j`uu>25;>bh}}6:9364dnww840902ndyy2>7?:8`jss482546j`uu>2=;199gkpr;:<437iazt=05:==cg|~7>:07;emvp94?611ocxz328<4?air|58546j`uu>04;>?18:flqq:4:720hb{{<21=<>bh}}6883o4dnww863=8720hb{{<27=3>bh}}682:5kotv?0;169gkpr;07=0hb{{<8<;?`bnn;dlh85jmqvz77=aaoeTkh`jr`vlvZp3W:&+Tdbfny"@KWC'Oldn~lz`r!33*4(7;8i0jdh`_ynm|Z36:q9=S?mck^3;pj51;h1mekaPxml{[075p:nbd_0:wk60+n`ldSjkaescwkwYqV8h`fQ>8um02)`nnfUlick}aumq[s2X;%qhSeo|_hlw[fjl59&hSeo|_rppp86+kVxoSk|jq<3/gZnf{VxoSio{a^alqkr:8%iThd`Pwhfwl87?$jUcm~Qxr^fbpdYdg|d1="l_gwohZ`kinyT~~zPv`n>4)eXadzgi`kat`vjkkYsqyo6>!mPurg\ahdblmooSkh=1.`[rtXn{oz1<"l_tqf[air|Vxxx0?#c^wm``tadf}T`by20-a\lduXgoyjaax=1.`[utbdfkoSao{eoaz95*dWme~xRyfduj>73*dWdylccQyam?2(fYulVnn|yf2500/gZnf{Vehh|ilnu>4)eX`hyTmac`su]eqij:9%iTdl}Prrv>5)eXlh~jSnaznu]tmaro58:'oRfns^uq[del59&hSx}j_da`95*dWjefab`Pcmm`o86+kV}ySlmd_mmt95*dW{nT|cz}_vkgpm;>$jU~hQiwgv\`drfWje~by3?,b]kevYfddexxRkbpu{>4)eXzmUomyoPcnwmpZqnl}b65!mPowgqbiipWee|1="l_vp\tkruW~coxe3>0-a\twi`Wlg{xtQ{yqg>4)eX{UomyoPcnwmpZqnl}b6=="l_qpfhjgcW{ol0?#c^flqqYu{}U}ma3?,b]kevYci}kTob{at<2/gZvugnUmyabPtipfwmYimnkiRxnl<3367*dW~xThh~{h<3361*dWyxdkRkbpu{\pmtb{aUeijo{e^tbh83+kVzycjQjmqvz[qnumzbTm~}jru]uei;3$jUcm~Qyamkg95*dWyxdkRhzlm]wlwct`Vkxh|{_wco9465;%ida}aaeov\jdkb5ocmcRvcny]657~4>V8h`fQ>8um02)eX~hfbhRb`w<2/gZvuadUmekaPtxrf94m91&hS}|`g^dvhiYsqyo6vugnUna}zv_ujqavn/< ;?7}|`g^gntqX|axne&:)068twi`Wlg{xtQ{hsgpl-0.9=1{~biPelrw}Zrozlyc$:'>4:rqkbYbey~rSyf}erj+<,713yxdkRkbpu{\pmtb{a636=0>b:rqkbYbey~rSyf}erj\evubz}";%vugnUna}zv_ujqavnXizyn~y&9)0`8twi`Wlg{xtQ{hsgplZgt{lx$:'>b:rqkbYbey~rSyf}erj\evubz}"3%vugnUna}zv_ujqavnXflmjxh&:)0`8twi`Wlg{xtQ{hsgplZhboh~n$;'>b:rqkbYbey~rSyf}erj\j`af|l"<%5rne\bpjkW}byi~f'1(30?uthoVl~`aQ{hsgpl-4.9:1{~biPftno[qnumzb#?$?<;qplcZ`rdeUdk|h)6*56=wzfmTjxbc_ujqavn/= ;87}|`g^dvhiYs`{oxd%8&129svjaXn|fgSyf}erj+3,743yxdkRhzlm]wlwct`!2"=>5rne\bpjkW}byi~f'9(36?uthoVl~`aQ{hsgpl9?=87;j7}|`g^dvhiYs`{oxdRo|sdpw,5/6i2zycjQiumn\pmtb{aUj~k}t)3*5d=wzfmTjxbc_ujqavnXizyn~y&=)0c8twi`Wog`Rzgrdqk[dutm{~#?$?n;qplcZ`rdeUdk|h^cpw`ts =#:m6~}of]eqijX|axneQnsrgqp-3.9h1{~biPftno[qnumzbTm~}jru*5-4ga:rqkbYa}efTxe|jsi]bwvcu|!3"=n5rne\bpjkW}byi~fParqfvq:>294:m6~}of]eqijX|axneQaefcwa-6.9h1{~biPftno[qnumzbTbhintd*2-4g'>a:rqkbYa}efTxe|jsi]mabgsm!>"=l5rne\bpjkW}byi~fPndebp`.2!8k0|ah_gwohZrozlycSckhaug+2,7f3yxdkRhzlm]wlwct`Vdnklzj(6+2e>vugnUmyabPtipfwmYimnki%6&1`9svjaXn|fgSyf}erj\j`af|l"2%4re]geqgXkfex%=&119q`Zbf|hUhcx`{(5+24>tcWmkmRm`uov+1,773{nThlzn_bmvjq.1!8:0~iQkauc\gjsi|!="==5}d^fbpdYdg|d$5'>0:pg[agsiVidycz30?31?wbXlh~jSnaznu>;>5823{nTic84re]qwq5uu{}>0x{j9:wm``tadf}>7{ocie48swYfkb<0{Qllj33?rtXlh~jSnaznu*3-46<{UomyoPcnwmp-7.991|~Rjnt`]`kphs ;#:<6y}_ecweZeh}g~#?$??;vp\`drfWje~by&;)028swYci}kTob{at)7*55=pzVnjxlQlotlw,3/682}ySio{a^alqkr/? ;;7z|Pd`vb[firf}"3%<>4ws]geqgXkfex%7&139tvZbf|hUhcx`{<883:0=pzVoe:6y}_sqwyEFwjj<0LMv>:G87>4}T=80?5;48:011f3ef2:2<9>ua40795>h39?0?7):>3;63`>{T5\13590<`=83;8>o8la;1;303<[=l184h50;306g0di393;8;4d5;:>5<628qX9<4;9784>455j?ij6>68529uP4>2290:6<4>94yP14<31?0<6<==b7ab>6>0=:1/8=9513:8R1732;q~=><51:w276<73t.:;i4>9:`7=<<72:o1?7=j{I631>\3>38p=:4>0;'5=g=<030(9?=:5;;?l2bm3:17d;?3;29?j2>l3:17b:67;29?l2a?3:17b:>8;29?l2a83:17b:9a;29 41a2=2o7c?8e;28?j2113:1(<9i:5:g?k70m3;07b:98;29 41a2=2o7c?8e;08?j21?3:1(<9i:5:g?k70m3907b:96;29 41a2=2o7c?8e;68?j21=3:1(<9i:5:g?k70m3?07b:93;29 41a2=2o7c?8e;48?j21:3:1(<9i:5:g?k70m3=07b:91;29 41a2=2o7c?8e;:8?j2183:1(<9i:5:g?k70m3307b::f;29 41a2=2o7c?8e;c8?j22m3:1(<9i:5:g?k70m3h07b::d;29 41a2=2o7c?8e;a8?j22k3:1(<9i:5:g?k70m3n07b::b;29 41a2=2o7c?8e;g8?j22i3:1(<9i:5:g?k70m3l07b::8;29 41a2=2o7c?8e;33?>i3=>0;6)?8f;6;`>h6?l0:=65`44494?"6?o0?4i5a16g957=6=4+16d90=b4?:%34b?2?l2d:;h4>5:9l004=83.:;k4;8e9m52c=9?10c9;>:18'52`=<1n0b<9j:058?j2283:1(<9i:5:g?k70m3;376a;4g83>!70n3>3h6`>7d82=>=h<>:1<7*>7g87o1=l54o54e>5<#9>l185j4n05f>4d<3f>=i7>5$05e>1>c3g;i3=00;6)?8f;6;`>h6?l09=65`45g94?"6?o0?4i5a16g967=o6=4+16d90=b8<7>5$05e>1253g;9i7>5$05e>1253g;9o7>5$05e>1253g;9m7>5$05e>1253g;<3`>847>5$05e>1253g;8:7>5$05e>1253g;887>5$05e>1253g;8>7>5$05e>1253g;54?:%34b?23:2d:;h4>1:9j0`4=831i8=850;394?6|@=:>7)?7a;632>i6?j0;66smd583>4<729qC8=;4$0:b>a2\3>3;=w?l5d;0g>gx"60h0?5n5+1369`7=#=1=:l4i5ge>5<5<5<5<#9>l18o;4n05f>5=5<#9>l18o;4n05f>7=54i5`3>5<#9>l18o;4n05f>1=5<#9>l18o;4n05f>3=5<#9>l18o;4n05f>==5<5<#9>l19=<4n05f>4=5<#9>l19=<4n05f>6=5<#9>l19=<4n05f>0=5<#9>l19=<4n05f>2=5<#9>l19=<4n05f><=5<#9>l18hj4n05f>4=5<#9>l18hj4n05f>6=5<#9>l18hj4n05f>0=6=4+16d90`b5<#9>l18hj4n05f>2=5<#9>l18h?4n05f>5=5<#9>l18h?4n05f>7=54i5f`>5<#9>l18h?4n05f>1=5<#9>l18h?4n05f>3=5<#9>l18h?4n05f>==5<6=4+16d90705<#9>l18?84n05f>4=5<#9>l18?84n05f>6=5<#9>l18?84n05f>0=5<#9>l18?84n05f>2=5<#9>l18?84n05f><=5<5<#9>l18nl4n05f>4=5<#9>l18nl4n05f>6=5<#9>l18nl4n05f>0=5<#9>l18nl4n05f>2=5<#9>l18nl4n05f><=5<5<5<5<5<#9>l185j4n05f>5=5<#9>l185j4n05f>7=54o545>5<#9>l185j4n05f>1=6=4+16d90=b5<#9>l185j4n05f>3=5<#9>l185j4n05f>==5<#9>l185j4n05f>d=5<#9>l185j4n05f>f=5<#9>l185j4n05f>`=5<#9>l185j4n05f>46<3f>>;7>5$05e>1>c3g;;:m713<72-;07b::3;29 41a2=2o7c?8e;36?>i3=;0;6)?8f;6;`>h6?l0::65`44394?"6?o0?4i5a16g952=32e?;=4?:%34b?2?l2d:;h4>a:9l03`=83.:;k4;8e9m52c=9k10c98j:18'52`=<1n0b<9j:0a8?j21l3:1(<9i:5:g?k70m3;o76a;6b83>!70n3>3h6`>7d82a>=h7g87o1=k54o547>5<#9>l185j4n05f>76<3f>>57>5$05e>1>c3g;;:m70`<72-;:18'52`=<=80b<9j:198m157290/=:h54508j41b2810e910e9=6:18'52`=<=80b<9j:998m15?290/=:h54508j41b2010e9=8:18'52`=<=80b<9j:`98m151290/=:h54508j41b2k10e9=::18'52`=<=80b<9j:b98m153290/=:h54508j41b2m10e9=<:18'52`=<=80b<9j:d98m155290/=:h54508j41b2o10e9<6:18'52`=<=80b<9j:028?l2503:1(<9i:561?k70m3;:76g;1883>>o3l<0;6)?8f;6g2>h6?l0;76g;d583>!70n3>o:6`>7d82?>o3l:0;6)?8f;6g2>h6?l0976g;d383>!70n3>o:6`>7d80?>o3l80;6)?8f;6g2>h6?l0?76g;d183>!70n3>o:6`>7d86?>o3ko0;6)?8f;6g2>h6?l0=76g;cd83>!70n3>o:6`>7d84?>o3km0;6)?8f;6g2>h6?l0376g;cb83>!70n3>o:6`>7d8:?>o3jl0;6)?8f;6ab>h6?l0;76g;be83>!70n3>ij6`>7d82?>o3jj0;6)?8f;6ab>h6?l0976g;bc83>!70n3>ij6`>7d80?>o3jh0;6)?8f;6ab>h6?l0?76g;b883>!70n3>ij6`>7d86?>o3j10;6)?8f;6ab>h6?l0=76g;b683>!70n3>ij6`>7d84?>o3j?0;6)?8f;6ab>h6?l0376a;a083>>i3:>0;66g;e383>>d3990;6<4?:1y'5=g=l=1C8=h4H526?jb42900qo:>1;295?6=8r.:4l4;079K05`<@=:>7b?8c;29?xd4n;0;6>4?:1y'5=g=km1C8=h4H526?M243-;8<7:i3:&f5?4>i6080;66sm3gf94?5=83:p(<6n:bf8L16a3A>;96F;3:&275<3n:1/i<4=;h64>5<>54g18 `7=:2c?;7>5;h71>5<8`8g5>N38o1C8=;4H518 4572=l87)k>:39j02<722c?57>5;h71>5<5<53;294~"60h0hh6F;0g9K053<@=90(<=?:5d0?!c62;1b8:4?::k66?6=3f;3=7>5;|`0b5<72<0;6=u+19c9`4=O<9l0D9>:;I60?!7483>m?6*j1;08m11=831b844?::k66?6=3`;3<7>5;n3;5?6=3th8jl4?:583>5}#91k1h=5G41d8L1623-o:6?5f4683>>o2:3:17d?70;29?j7?93:17pl1<729q/=5o5d19K05`<@=:>7)k>:39j02<722c>>7>5;h3;4?6=3f;3=7>5;|`0b=<72=0;6=u+19c9`5=O<9l0D9>:;%g2>7=n<>0;66g:2;29?l7?83:17b?71;29?xd38:0;694?:1y'5=g=l91C8=h4H526?!c62;1b8:4?::k66?6=3`;3<7>5;n3;5?6=3th?5}#91k1h=5G41d8L1623-o:6?5f4683>>o2:3:17d?70;29?j7?93:17pl=9`83>1<729q/=5o5d19K05`<@=:>7)k>:79j02<722c>>7>5;h3;4?6=3f;3=7>5;|`063<72=0;6=u+19c9g`=O<9l0D9>:;%g2>7=n<>0;66g;e;29?l352900c<6>:188yg5583:197>50z&25;h6:>5<>i6080;66sm33;94?2=83:p(<6n:e28L16a3A>;96*j1;08m11=831b9?4?::k2<5<722e:4<4?::a773=83>1<7>t$0:b>fc<@=:m7E:?5:&f5?4>o2:3:17b?71;29?xd5?h0;694?:1y'5=g=9:;0D9>i;I631>o3j3:17d;<:188m4>42900c<9n:188yg4013:187>50z&24?::k2<6<722e:;l4?::a621=83>1<7>t$0:b>4563A>;j6F;049j0g<722c>?7>5;h3;7?6=3f;5;|`133<72=0;6=u+19c9567<@=:m7E:?5:k7f?6=3`?86=44i0:0>5<8`8274=O<9l0D9>:;h6a>5<k1<75rb3:`>5<3290;w)?7a;305>N38o1C8=;4i5`94?=n=:0;66g>8283>>i6?h0;66sm29`94?2=83:p(<6n:012?M27n2B?<85f4c83>>o2;3:17d?73;29?j70i3:17pl=8`83>1<729q/=5o51238L16a3A>;96g;b;29?l342900e<6<:188k41f2900qo<79;290?6=8r.:4l4>309K05`<@=:>7d:m:188m05=831b=5=50;9l52g=831vn?kl:187>5<7s-;3m7?<1:J74c=O<9?0e9l50;9j16<722c:4>4?::m23d<722wi>hl50;694?6|,82j6<=>;I63b>N38<1b8o4?::k67?6=3`;3?7>5;n34e?6=3th9il4?:583>5}#91k1=>?4H52e?M27=2c?n7>5;h70>5<5<54;294~"60h0:?<5G41d8L1623`>i6=44i4194?=n9191<75`16c94?=zj;o36=4;:183!7?i3;8=6F;0g9K053>o60:0;66a>7`83>>{e:ol1<7:50;2x 4>f289:7E:?f:J740=ni;I631>o3j3:17d;<:188m4>42900c<9n:188yg4al3:187>50z&24?::k2<6<722e:;l4?::a6cd=83>1<7>t$0:b>4563A>;j6F;049j0g<722c>?7>5;h3;7?6=3f;5;|`050<72=0;6=u+19c9567<@=:m7E:?5:k7f?6=3`?86=44i0:0>5<8`8274=O<9l0D9>:;h6a>5<k1<75rb230>5<3290;w)?7a;305>N38o1C8=;4i5`94?=n=:0;66g>8283>>i6?h0;66sm30094?2=83:p(<6n:012?M27n2B?<85f4c83>>o2;3:17d?73;29?j70i3:17pl<1083>1<729q/=5o51238L16a3A>;96g;b;29?l342900e<6<:188k41f2900qon6=44i4094?=h91;1<75rb32f>5<3290;w)?7a;af?M27n2B?<85+e081?l202900e9k50;9j17<722e:4<4?::a65b=83>1<7>t$0:b>fc<@=:m7E:?5:&f5?4>o2:3:17b?71;29?xd58j0;694?:1y'5=g=kl1C8=h4H526?!c62;1b8:4?::k7a?6=3`?96=44o0:2>5<54;294~"60h0hi6F;0g9K053<,l;1>6g;7;29?l2b2900e8<50;9l5=7=831vn?>n:187>5<7s-;3m7mj;I63b>N38<1/i<4=;h64>5<>i6080;66sm21;94?2=83:p(<6n:bg8L16a3A>;96*j1;08m11=831b8h4?::k66?6=3f;3=7>5;|`14=<72=0;6=u+19c9g`=O<9l0D9>:;%g2>7=n<>0;66g;e;29?l352900c<6>:188yg47?3:187>50z&25;h6f>5<ac83>1<729q/=5o5cd9K05`<@=:>7)k>:39j02<722c?i7>5;h71>5<8`8`a>N38o1C8=;4$d396>o3?3:17d:j:188m04=831d=5?50;9~f4g>290?6=4?{%3;e?eb3A>;j6F;049'a4<53`><6=44i5g94?=n=;0;66a>8083>>{e9h21<7:50;2x 4>f2jo0D9>i;I631>"b9380e9950;9j0`<722c>>7>5;n3;5?6=3th:m:4?:583>5}#91k1oh5G41d8L1623-o:6?5f4683>>o3m3:17d;=:188k4>62900qo?n6;290?6=8r.:4l4le:J74c=O<9?0(h?52:k73?6=3`>n6=44i4094?=h91;1<75rb0c6>5<3290;w)?7a;af?M27n2B?<85+e081?l202900e9k50;9j17<722e:4<4?::a60d=83>1<7>t$0:b>fc<@=:m7E:?5:&f5?4>o2:3:17b?71;29?xd5=h0;694?:1y'5=g=kl1C8=h4H526?!c62;1b8:4?::k7a?6=3`?96=44o0:2>5<57>54;294~"60h0hi6F;0g9K053<,l;1>6g;7;29?l2b2900e8<50;9l5=7=831vn?;7:187>5<7s-;3m7mj;I63b>N38<1/i<4=;h64>5<>i6080;66sm24594?2=83:p(<6n:bg8L16a3A>;96*j1;08m11=831b8h4?::k66?6=3f;3=7>5;|`113<72=0;6=u+19c9g`=O<9l0D9>:;%g2>7=n<>0;66g;e;29?l352900c<6>:188yg42=3:187>50z&25;h6f>5<8=50;694?6|,82j6nk4H52e?M27=2.n=7<4i5594?=nf483>1<729q/=5o5cd9K05`<@=:>7)k>:39j02<722c?i7>5;h71>5<8`8`a>N38o1C8=;4$d396>o3?3:17d:j:188m04=831d=5?50;9~f4`4290?6=4?{%3;e?eb3A>;j6F;049'a4<53`><6=44i5g94?=n=;0;66a>8083>>{e9o81<7:50;2x 4>f2jo0D9>i;I631>"b9380e9950;9j0`<722c>>7>5;n3;5?6=3th:j<4?:583>5}#91k1oh5G41d8L1623-o:6?5f4683>>o3m3:17d;=:188k4>62900qo?i0;290?6=8r.:4l4le:J74c=O<9?0(h?52:k73?6=3`>n6=44i4094?=h91;1<75rb0ge>5<3290;w)?7a;af?M27n2B?<85+e081?l202900e9k50;9j17<722e:4<4?::a5`c=83>1<7>t$0:b>fc<@=:m7E:?5:&f5?4>o2:3:17b?71;29?xd6mm0;694?:1y'5=g=kl1C8=h4H526?!c62;1b8:4?::k7a?6=3`?96=44o0:2>5<54;294~"60h0hi6F;0g9K053<@=90(<=?:5d0?!c62;1b8:4?::k7a?6=3`?96=44o0:2>5<54;294~"60h0hi6F;0g9K053<@=90(<=?:5d0?!c62;1b8:4?::k7a?6=3`?96=44o0:2>5<54;294~"60h0hi6F;0g9K053<@=90(<=?:5d0?!c62;1b8:4?::k7a?6=3`?96=44o0:2>5<54;294~"60h0hi6F;0g9K053<@=90(<=?:5d0?!c62;1b8:4?::k7a?6=3`?96=44o0:2>5<54;294~"60h0hi6F;0g9K053<@=90(<=?:5d0?!c62;1b8:4?::k7a?6=3`?96=44o0:2>5<54;294~"60h0hi6F;0g9K053<@=90(<=?:5d0?!c62;1b8:4?::k7a?6=3`?96=44o0:2>5<54;294~"60h0hi6F;0g9K053<@=90(<=?:5d0?!c62;1b8:4?::k7a?6=3`?96=44o0:2>5<7>54;294~"60h0hi6F;0g9K053<@=90(<=?:5d0?!c62;1b8:4?::k7a?6=3`?96=44o0:2>5<54;294~"60h0hi6F;0g9K053<@=90(<=?:5d0?!c62;1b8:4?::k7a?6=3`?96=44o0:2>5<54;294~"60h0hi6F;0g9K053<@=90(<=?:5d0?!c62;1b8:4?::k7a?6=3`?96=44o0:2>5<54;294~"60h0hi6F;0g9K053<@=90(<=?:5d0?!c62;1b8:4?::k7a?6=3`?96=44o0:2>5<7>54;294~"60h0hi6F;0g9K053<@=90(<=?:5d0?!c62;1b8:4?::k7a?6=3`?96=44o0:2>5<54;294~"60h0hi6F;0g9K053<@=90(<=?:5d0?!c62;1b8:4?::k7a?6=3`?96=44o0:2>5<54;294~"60h0hi6F;0g9K053<@=90(<=?:5d0?!c62;1b8:4?::k7a?6=3`?96=44o0:2>5<54;294~"60h0hi6F;0g9K053<@=90(<=?:5d0?!c62;1b8:4?::k7a?6=3`?96=44o0:2>5<54;294~"60h0hi6F;0g9K053<@=90(<=?:5d0?!c62;1b8:4?::k7a?6=3`?96=44o0:2>5<54;294~"60h0hi6F;0g9K053<@=90(<=?:5d0?!c62;1b8:4?::k7a?6=3`?96=44o0:2>5<54;294~"60h0hi6F;0g9K053<@=90(<=?:5d0?!c62;1b8:4?::k7a?6=3`?96=44o0:2>5<54;294~"60h0hi6F;0g9K053<@=90(<=?:5d0?!c62;1b8:4?::k7a?6=3`?96=44o0:2>5<54;294~"60h0hi6F;0g9K053<,l;1>6g;7;29?l2b2900e8<50;9l5=7=831vn5<7s-;3m7mj;I63b>N38<1/i<4=;h64>5<>i6080;66sm1bd94?2=83:p(<6n:bg8L16a3A>;96*j1;08m11=831b8h4?::k66?6=3f;3=7>5;|`2g`<72=0;6=u+19c9g`=O<9l0D9>:;%g2>7=n<>0;66g;e;29?l352900c<6>:188yg7dl3:187>50z&25;h6f>5<c`83>1<729q/=5o5cd9K05`<@=:>7)k>:39j02<722c?i7>5;h71>5<8`8`a>N38o1C8=;4$d396>o3?3:17d:j:188m04=831d=5?50;9~f752290?6=4?{%3;e?eb3A>;j6F;049'a4<53`><6=44i5g94?=n=;0;66a>8083>>{e::>1<7:50;2x 4>f2jo0D9>i;I631>"b9380e9950;9j0`<722c>>7>5;n3;5?6=3th9?>4?:583>5}#91k1oh5G41d8L1623-o:6?5f4683>>o3m3:17d;=:188k4>62900qo<<2;290?6=8r.:4l4le:J74c=O<9?0(h?52:k73?6=3`>n6=44i4094?=h91;1<75rb312>5<3290;w)?7a;af?M27n2B?<85+e081?l202900e9k50;9j17<722e:4<4?::a666=83>1<7>t$0:b>fc<@=:m7E:?5:&f5?4>o2:3:17b?71;29?xd5:o0;694?:1y'5=g=kl1C8=h4H526?!c62;1b8:4?::k7a?6=3`?96=44o0:2>5<54;294~"60h0hi6F;0g9K053<,l;1>6g;7;29?l2b2900e8<50;9l5=7=831vn?5<7s-;3m7mj;I63b>N38<1/i<4=;h64>5<>i6080;66sm23a94?2=83:p(<6n:bg8L16a3A>;96*j1;08m11=831b8h4?::k66?6=3f;3=7>5;|`1`4<72<0;6=u+19c9gc=O<9l0D9>:;%g2>7=n<>0;66g;9;29?l2b2900e8<50;9l5=7=831vn?j?:186>5<7s-;3m7mi;I63b>N38<1/i<4=;h64>5<>o2:3:17b?71;29?xd5ko0;684?:1y'5=g=ko1C8=h4H526?!c62;1b8:4?::k7=?6=3`>n6=44i4094?=h91;1<75rb3af>5<2290;w)?7a;ae?M27n2B?<85+e081?l202900e9750;9j0`<722c>>7>5;n3;5?6=3th9oi4?:483>5}#91k1ok5G41d8L1623-o:6?5f4683>>o313:17d:j:188m04=831d=5?50;9~f7ed290>6=4?{%3;e?ea3A>;j6F;049'a4<53`><6=44i5;94?=n0<729q/=5o5cg9K05`<@=:>7)k>:39j02<722c?57>5;h6f>5<t$0:b>f`<@=:m7E:?5:&f5?4>o3m3:17d;=:188k4>62900qo7d:m:188m4422900c<9n:188yg4el3:1?7>50z&2309K05`<@=:>7d:m:188m05=831b=5=50;9l52g=831vn?ll:180>5<7s-;3m7:?e:J74c=O<9?0e9l50;9j573=831d=:o50;9~f7d5290?6=4?{%3;e?7492B?4?::k2<6<722e:;l4?::a6gd=8391<7>t$0:b>16b3A>;j6F;049j0g<722c:>84?::m23d<722wi>o>50;694?6|,82j6<=>;I63b>N38<1b8o4?::k67?6=3`;3?7>5;n34e?6=3th9nl4?:283>5}#91k18=k4H52e?M27=2c?n7>5;h311?6=3f;5;|`1e`<72=0;6=u+19c9567<@=:m7E:?5:k7f?6=3`?86=44i0:0>5<8`874`=O<9l0D9>:;h6a>5<6=44o05b>5<54;294~"60h0:?<5G41d8L1623`>i6=44i4194?=n9191<75`16c94?=zj;h36=4<:183!7?i3>;i6F;0g9K053k1<75rb3cb>5<3290;w)?7a;305>N38o1C8=;4i5`94?=n=:0;66g>8283>>i6?h0;66sm2c594?5=83:p(<6n:52f?M27n2B?<85f4c83>>o6:<0;66a>7`83>>{e:h21<7:50;2x 4>f289:7E:?f:J740=n4?:1y'5=g=<9o0D9>i;I631>o3j3:17d?=5;29?j70i3:17pl=a783>1<729q/=5o51238L16a3A>;96g;b;29?l342900e<6<:188k41f2900qo26=44i5g94?=n=;0;66a>8083>>{e:l81<7;50;2x 4>f2jl0D9>i;I631>"b9380e9950;9j0<<722c?i7>5;h71>5<8`8`b>N38o1C8=;4$d396>o3?3:17d:6:188m1c=831b9?4?::m2<4<722wi>h>50;794?6|,82j6nh4H52e?M27=2.n=7<4i5594?=n<00;66g;e;29?l352900c<6>:188yg4cn3:197>50z&25;h6:>5<>i6080;66sm2eg94?3=83:p(<6n:bd8L16a3A>;96*j1;08m11=831b844?::k7a?6=3`?96=44o0:2>5<55;294~"60h0hj6F;0g9K053<,l;1>6g;7;29?l2>2900e9k50;9j17<722e:4<4?::a6ae=83?1<7>t$0:b>f`<@=:m7E:?5:&f5?4>o3m3:17d;=:188k4>62900qo26=44i5g94?=n=;0;66a>8083>>{e:?h1<7:50;2x 4>f2jo0D9>i;I631>"b9380e9950;9j0`<722c>>7>5;n3;5?6=3th9:54?:583>5}#91k1oh5G41d8L1623-o:6?5f4683>>o3m3:17d;=:188k4>62900qo<9f;290?6=8r.:4l4k0:J74c=O<9?0(h?56:k73?6=3`?96=44i0:3>5<8`8g4>N38o1C8=;4$d392>o3?3:17d;=:188m4>72900c<6>:188yg51=3:197>50z&25;h6:>5<>i6080;66sm37694?3=83:p(<6n:bd8L16a3A>;96*j1;08m11=831b844?::k7a?6=3`?96=44o0:2>5<7>55;294~"60h0hj6F;0g9K053<,l;1>6g;7;29?l2>2900e9k50;9j17<722e:4<4?::a737=83?1<7>t$0:b>f`<@=:m7E:?5:&f5?4>o3m3:17d;=:188k4>62900qo=93;291?6=8r.:4l4lf:J74c=O<9?0(h?52:k73?6=3`>26=44i5g94?=n=;0;66a>8083>>{e;?:1<7;50;2x 4>f2jl0D9>i;I631>"b9380e9950;9j0<<722c?i7>5;h71>5<8`8`b>N38o1C8=;4$d396>o3?3:17d:6:188m1c=831b9?4?::m2<4<722wi?8j50;794?6|,82j6i?4H52e?M27=2.n=784i5594?=n<00;66g:2;29?l7?83:17b?71;29?xd4=j0;684?:1y'5=g=l81C8=h4H526?!c62?1b8:4?::k7=?6=3`?96=44i0:3>5<8`8`b>N38o1C8=;4$d396>o3?3:17d:6:188m1c=831b9?4?::m2<4<722wi?8>50;194?6|,82j69>j;I63b>N38<1b8o4?::k260<722e:;l4?::a71`=8391<7>t$0:b>16b3A>;j6F;049j0g<722c:>84?::m23d<722wi?9;50;694?6|,82j6<=>;I63b>N38<1b8o4?::k67?6=3`;3?7>5;n34e?6=3th88h4?:283>5}#91k18=k4H52e?M27=2c?n7>5;h311?6=3f;5;|`006<72=0;6=u+19c9567<@=:m7E:?5:k7f?6=3`?86=44i0:0>5<8`874`=O<9l0D9>:;h6a>5<6=44o05b>5<54;294~"60h0:?<5G41d8L1623`>i6=44i4194?=n9191<75`16c94?=zj:>h6=4<:183!7?i3>;i6F;0g9K053k1<75rb21e>5<3290;w)?7a;305>N38o1C8=;4i5`94?=n=:0;66g>8283>>i6?h0;66sm35`94?5=83:p(<6n:52f?M27n2B?<85f4c83>>o6:<0;66a>7`83>>{e;:n1<7:50;2x 4>f289:7E:?f:J740=n4?:1y'5=g=<9o0D9>i;I631>o3j3:17d?=5;29?j70i3:17pl<3c83>1<729q/=5o51238L16a3A>;96g;b;29?l342900e<6<:188k41f2900qo=;9;297?6=8r.:4l4;0d9K05`<@=:>7d:m:188m4422900c<9n:188yg5413:187>50z&2=8:187>5<7s-;3m7?<1:J74c=O<9?0e9l50;9j16<722c:4>4?::m23d<722wi?9950;194?6|,82j69>j;I63b>N38<1b8o4?::k260<722e:;l4?::a763=83>1<7>t$0:b>4563A>;j6F;049j0g<722c>?7>5;h3;7?6=3f;5;|`037<72<0;6=u+19c9gc=O<9l0D9>:;%g2>7=n<>0;66g;9;29?l2b2900e8<50;9l5=7=831vn>9?:186>5<7s-;3m7mi;I63b>N38<1/i<4=;h64>5<>o2:3:17b?71;29?xd4?80;684?:1y'5=g=l81C8=h4H526?!c62?1b8:4?::k7=?6=3`?96=44i0:3>5<8`8`b>N38o1C8=;4$d396>o3?3:17d:6:188m1c=831b9?4?::m2<4<722wi?::50;794?6|,82j6nh4H52e?M27=2.n=7<4i5594?=n<00;66g;e;29?l352900c<6>:188yg50?3:197>50z&25;h6:>5<>i6080;66sm36794?3=83:p(<6n:bd8L16a3A>;96*j1;08m11=831b844?::k7a?6=3`?96=44o0:2>5<55;294~"60h0hj6F;0g9K053<,l;1>6g;7;29?l2>2900e9k50;9j17<722e:4<4?::a72>=83?1<7>t$0:b>f`<@=:m7E:?5:&f5?4>o3m3:17d;=:188k4>62900qo=89;291?6=8r.:4l4lf:J74c=O<9?0(h?52:k73?6=3`>26=44i5g94?=n=;0;66a>8083>>{e;1<1<7;50;2x 4>f2jl0D9>i;I631>"b9380e9950;9j0<<722c?i7>5;h71>5<8`8g5>N38o1C8=;4$d392>o3?3:17d:6:188m04=831b=5>50;9l5=7=831vn>6::186>5<7s-;3m7mi;I63b>N38<1/i<4=;h64>5<>o2:3:17b?71;29?xd40>0;684?:1y'5=g=ko1C8=h4H526?!c62;1b8:4?::k7=?6=3`>n6=44i4094?=h91;1<75rb2:;>5<2290;w)?7a;ae?M27n2B?<85+e081?l202900e9750;9j0`<722c>>7>5;n3;5?6=3th84o4?:483>5}#91k1ok5G41d8L1623-o:6?5f4683>>o313:17d:j:188m04=831d=5?50;9~f6>>290>6=4?{%3;e?ea3A>;j6F;049'a4<53`><6=44i5;94?=n0<729q/=5o5cg9K05`<@=:>7)k>:39j02<722c?57>5;h6f>5<5;|`0:;%g2>7=n<>0;66g;9;29?l2b2900e8<50;9l5=7=831vn>o>:186>5<7s-;3m7mi;I63b>N38<1/i<4=;h64>5<>o2:3:17b?71;29?xd4i90;684?:1y'5=g=ko1C8=h4H526?!c62;1b8:4?::k7=?6=3`>n6=44i4094?=h91;1<75rb2;e>5<2290;w)?7a;ae?M27n2B?<85+e081?l202900e9750;9j0`<722c>>7>5;n3;5?6=3th85h4?:483>5}#91k1ok5G41d8L1623-o:6?5f4683>>o313:17d:j:188m04=831d=5?50;9~f6?c290>6=4?{%3;e?ea3A>;j6F;049'a4<53`><6=44i5;94?=n0<729q/=5o5cg9K05`<@=:>7)k>:39j02<722c?57>5;h6f>5<5;|`0=d<72<0;6=u+19c9gc=O<9l0D9>:;%g2>7=n<>0;66g;9;29?l2b2900e8<50;9l5=7=831vn>76:186>5<7s-;3m7mi;I63b>N38<1/i<4=;h64>5<>o2:3:17b?71;29?xd4110;684?:1y'5=g=ko1C8=h4H526?!c62;1b8:4?::k7=?6=3`>n6=44i4094?=h91;1<75rb2`e>5<2290;w)?7a;ae?M27n2B?<85+e081?l202900e9750;9j0`<722c>>7>5;n3;5?6=3th8nh4?:483>5}#91k1ok5G41d8L1623-o:6?5f4683>>o313:17d:j:188m04=831d=5?50;9~f6dc290>6=4?{%3;e?ea3A>;j6F;049'a4<53`><6=44i5;94?=n0<729q/=5o5cg9K05`<@=:>7)k>:39j02<722c?57>5;h6f>5<5;|`0fd<72<0;6=u+19c9gc=O<9l0D9>:;%g2>7=n<>0;66g;9;29?l2b2900e8<50;9l5=7=831vn>l7:186>5<7s-;3m7mi;I63b>N38<1/i<4=;h64>5<>o2:3:17b?71;29?xd4j>0;684?:1y'5=g=ko1C8=h4H526?!c62;1b8:4?::k7=?6=3`>n6=44i4094?=h91;1<75rb2`5>5<2290;w)?7a;ae?M27n2B?<85+e081?l202900e9750;9j0`<722c>>7>5;n3;5?6=3th8n84?:483>5}#91k1ok5G41d8L1623-o:6?5f4683>>o313:17d:j:188m04=831d=5?50;9~f6d3290>6=4?{%3;e?ea3A>;j6F;049'a4<53`><6=44i5;94?=n0<729q/=5o5cg9K05`<@=:>7)k>:39j02<722c?57>5;h6f>5<5;|`0f4<72<0;6=u+19c9gc=O<9l0D9>:;%g2>7=n<>0;66g;9;29?l2b2900e8<50;9l5=7=831vn>l?:186>5<7s-;3m7mi;I63b>N38<1/i<4=;h64>5<>o2:3:17b?71;29?xd4io0;684?:1y'5=g=ko1C8=h4H526?!c62;1b8:4?::k7=?6=3`>n6=44i4094?=h91;1<75rb2cg>5<2290;w)?7a;ae?M27n2B?<85+e081?l202900e9750;9j0`<722c>>7>5;n3;5?6=3th8mn4?:483>5}#91k1ok5G41d8L1623-o:6?5f4683>>o313:17d:j:188m04=831d=5?50;9~f6ge290>6=4?{%3;e?ea3A>;j6F;049'a4<53`><6=44i5;94?=n0<729q/=5o5cg9K05`<@=:>7)k>:39j02<722c?57>5;h6f>5<5;|`0e=<72<0;6=u+19c9gc=O<9l0D9>:;%g2>7=n<>0;66g;9;29?l2b2900e8<50;9l5=7=831vn>o8:186>5<7s-;3m7mi;I63b>N38<1/i<4=;h64>5<>o2:3:17b?71;29?xd4i?0;684?:1y'5=g=ko1C8=h4H526?!c62;1b8:4?::k7=?6=3`>n6=44i4094?=h91;1<75rb2c6>5<2290;w)?7a;ae?M27n2B?<85+e081?l202900e9750;9j0`<722c>>7>5;n3;5?6=3th8m94?:483>5}#91k1ok5G41d8L1623-o:6?5f4683>>o313:17d:j:188m04=831d=5?50;9~f6e2290>6=4?{%3;e?ea3A>;j6F;049'a4<53`><6=44i5;94?=n0<729q/=5o5cg9K05`<@=:>7)k>:39j02<722c?57>5;h6f>5<5;|`0g7<72<0;6=u+19c9gc=O<9l0D9>:;%g2>7=n<>0;66g;9;29?l2b2900e8<50;9l5=7=831vn>m>:186>5<7s-;3m7mi;I63b>N38<1/i<4=;h64>5<>o2:3:17b?71;29?xd4k90;684?:1y'5=g=ko1C8=h4H526?!c62;1b8:4?::k7=?6=3`>n6=44i4094?=h91;1<75rb2`:>5<2290;w)?7a;ae?M27n2B?<85+e081?l202900e9750;9j0`<722c>>7>5;n3;5?6=3th8mh4?:483>5}#91k1ok5G41d8L1623-o:6?5f4683>>o313:17d:j:188m04=831d=5?50;9~f6g4290>6=4?{%3;e?ea3A>;j6F;049'a4<53`><6=44i5;94?=n0<729q/=5o5cg9K05`<@=:>7)k>:39j02<722c?57>5;h6f>5<>oc>3:17b?8a;29?xd4n=0;6>4?:1y'5=g=9;k0D9>i;I631>"b93;j7dj::188ma0=831d=:o50;9~f77629086=4?{%3;e?75i2B?5;|`2ec<72:0;6=u+19c957g<@=:m7E:?5:&f5?7a3`n>6=44ie494?=h9>k1<75rb0;a>5<4290;w)?7a;31e>N38o1C8=;4$d395c=nl<0;66gk6;29?j70i3:17pl>9`83>6<729q/=5o513c8L16a3A>;96*j1;3e?lb22900ei850;9l52g=831vn<76:180>5<7s-;3m7?=a:J74c=O<9?0(h?51g9j`0<722co:7>5;n34e?6=3th:554?:283>5}#91k1=?o4H52e?M27=2.n=7?i;hf6>5<>oc>3:17b?8a;29?xd61?0;6>4?:1y'5=g=9;k0D9>i;I631>"b93;m7dj::188ma0=831d=:o50;9~f4?229086=4?{%3;e?75i2B?5;|`2=1<72:0;6=u+19c957g<@=:m7E:?5:&f5?7a3`n>6=44ie494?=h9>k1<75rb0;0>5<4290;w)?7a;31e>N38o1C8=;4$d395c=nl<0;66gk6;29?j70i3:17pl>9383>6<729q/=5o513c8L16a3A>;96*j1;3e?lb22900ei850;9l52g=831vn<7>:180>5<7s-;3m7?=a:J74c=O<9?0(h?51g9j`0<722co:7>5;n34e?6=3th:5=4?:283>5}#91k1=?o4H52e?M27=2.n=7?i;hf6>5<>oc>3:17b?8a;29?xd60l0;6>4?:1y'5=g=9;k0D9>i;I631>"b93;m7dj::188ma0=831d=:o50;9~f4>c29086=4?{%3;e?75i2B?5;|`26=44ie494?=h9>k1<75rb0:a>5<4290;w)?7a;31e>N38o1C8=;4$d395c=nl<0;66gk6;29?j70i3:17pl=1283>1<729q/=5o513a8L16a3A>;96*j1;04?lb22900ei850;9j`2<722e:;l4?::a5g7=83>1<7>t$0:b>44d3A>;j6F;049'a4<5?2co97>5;hf5>5<>5fd483>>oc>3:17dj8:188k41f2900qo<>5;291?6=8r.:4l4>2d9K05`<@=:>7)k>:338ma3=831bh;4?::kg3?6=3`n36=44o05b>5<55;294~"60h0:>h5G41d8L1623-o:6??4ie794?=nl?0;66gk7;29?lb?2900c<9n:188yg4093:197>50z&25;hf;>5<8`826`=O<9l0D9>:;%g2>74>oc?3:17dj7:188k41f2900qo==4;297?6=8r.:4l4>2`9K05`<@=:>7)k>:568ma3=831bh;4?::m23d<722wi>;950;694?6|,82j6<N38<1/i<4>8:kg1?6=3`n=6=44ie594?=h9>k1<75rb20b>5<4290;w)?7a;31e>N38o1C8=;4$d3954=nl<0;66gk6;29?j70i3:17pl=1683>6<729q/=5o513c8L16a3A>;96*j1;3e?lb22900ei850;9l52g=831vn5<7s-;3m7?=a:J74c=O<9?0(h?51g9j`0<722co:7>5;n34e?6=3th9=44?:583>5}#91k1=?m4H52e?M27=2.n=7<8;hf6>5<>i6?h0;66sm1c594?2=83:p(<6n:00`?M27n2B?<85+e0813>oc=3:17dj9:188ma1=831d=:o50;9~f77e290>6=4?{%3;e?75m2B?k1<75rb0`:>5<2290;w)?7a;31a>N38o1C8=;4$d3964=nl<0;66gk6;29?lb02900ei650;9l52g=831vn>kl:180>5<7s-;3m7?=a:J74c=O<9?0(h?5c99j`0<722co:7>5;n34e?6=3th95:4?:283>5}#91k1=?o4H52e?M27=2.n=7<:;hf6>5<85fd483>>oc>3:17b?8a;29?xd49o0;684?:1y'5=g=9;o0D9>i;I631>"b938=7dj::188ma0=831bh:4?::kg5;|`04<<72<0;6=u+19c957c<@=:m7E:?5:&f5?413`n>6=44ie494?=nl>0;66gk8;29?j70i3:17pl=f783>0<729q/=5o513g8L16a3A>;96*j1;05?lb22900ei850;9j`2<722co47>5;n34e?6=3th8=h4?:483>5}#91k1=?k4H52e?M27=2.n=7<9;hf6>5<>oc03:17b?8a;29?xd4810;684?:1y'5=g=9;o0D9>i;I631>"b938=7dj::188ma0=831bh:4?::kg5;|`1b0<72<0;6=u+19c957c<@=:m7E:?5:&f5?413`n>6=44ie494?=nl>0;66gk8;29?j70i3:17pl=9783>0<729q/=5o513g8L16a3A>;96*j1;07?lb22900ei850;9j`2<722co47>5;n34e?6=3th94>4?:483>5}#91k1=?k4H52e?M27=2.n=7<;;hf6>5<>oc03:17b?8a;29?xd49m0;684?:1y'5=g=9;o0D9>i;I631>"b938=7dj::188ma0=831bh:4?::kg5;|`042<72<0;6=u+19c957c<@=:m7E:?5:&f5?413`n>6=44ie494?=nl>0;66gk8;29?j70i3:17pl=f583>0<729q/=5o513g8L16a3A>;96*j1;05?lb22900ei850;9j`2<722co47>5;n34e?6=3th9584?:483>5}#91k1=?k4H52e?M27=2.n=7<;;hf6>5<>oc03:17b?8a;29?xd50;0;684?:1y'5=g=9;o0D9>i;I631>"b938?7dj::188ma0=831bh:4?::kg5;|`05f<72<0;6=u+19c957c<@=:m7E:?5:&f5?413`n>6=44ie494?=nl>0;66gk8;29?j70i3:17pl<0783>0<729q/=5o513g8L16a3A>;96*j1;05?lb22900ei850;9j`2<722co47>5;n34e?6=3th9j>4?:483>5}#91k1=?k4H52e?M27=2.n=7<9;hf6>5<>oc03:17b?8a;29?xd51=0;684?:1y'5=g=9;o0D9>i;I631>"b938?7dj::188ma0=831bh:4?::kg5;|`1<4<72<0;6=u+19c957c<@=:m7E:?5:&f5?433`n>6=44ie494?=nl>0;66gk8;29?j70i3:17pl=9b83>1<729q/=5o513a8L16a3A>;96*j1;a`?lb22900ei850;9j`2<722e:;l4?::a74d=83>1<7>t$0:b>44d3A>;j6F;049'a4<6j2co97>5;hf5>5<6=4;:183!7?i3;9o6F;0g9K053<,l;1=o5fd483>>oc>3:17dj8:188k41f2900qo2b9K05`<@=:>7)k>:0`8ma3=831bh;4?::kg3?6=3f;5;|`067<72<0;6=u+19c957c<@=:m7E:?5:&f5?7b3`n>6=44ie494?=nl>0;66gk8;29?j70i3:17pl=9283>0<729q/=5o513g8L16a3A>;96*j1;07?lb22900ei850;9j`2<722co47>5;n34e?6=3th94=4?:483>5}#91k1=?k4H52e?M27=2.n=7<;;hf6>5<>oc03:17b?8a;29?xd5j<0;6?4?:1y'5=g=9;30D9>i;I631>"b93;:7dj::188k41f2900qo289K05`<@=:>7)k>:038ma3=831d=:o50;9~f7d629096=4?{%3;e?7512B?lh50;094?6|,82j6<<6;I63b>N38<1/i<4>1:kg1?6=3f;5;|`1ea<72;0;6=u+19c957?<@=:m7E:?5:&f5?763`n>6=44o05b>5<52;294~"60h0:>45G41d8L1623-o:6k1<75rb3c:>5<5290;w)?7a;31=>N38o1C8=;4$d3954=nl<0;66a>7`83>>{e:h=1<7<50;2x 4>f28827E:?f:J740=#m80:=6gk5;29?j70i3:17pl<4783>7<729q/=5o513;8L16a3A>;96*j1;32?lb22900c<9n:188yg53<3:1>7>50z&2:=:181>5<7s-;3m7?=9:J74c=O<9?0(h?5109j`0<722e:;l4?::a716=8381<7>t$0:b>44>3A>;j6F;049'a4<692co97>5;n34e?6=3th8?h4?:383>5}#91k1=?74H52e?M27=2.n=7?>;hf6>5<8`826<=O<9l0D9>:;%g2>47>i6?h0;66sm32:94?4=83:p(<6n:00:?M27n2B?<85+e0825>oc=3:17b?8a;29?xd4;?0;6?4?:1y'5=g=9;30D9>i;I631>"b93;:7dj::188k41f2900qo289K05`<@=:>7)k>:038ma3=831d=:o50;9~f63629096=4?{%3;e?7512B?N38<1/i<4=1:kg1?6=3`n=6=44ie594?=nl10;66a>7`83>>{e9kl1<7;50;2x 4>f288n7E:?f:J740=#m80946gk5;29?lb12900ei950;9j`=<722e:;l4?::a64`=83?1<7>t$0:b>44b3A>;j6F;049'a4<592co97>5;hf5>5<>i6?h0;66sm23394?3=83:p(<6n:00f?M27n2B?<85+e081<>oc=3:17dj9:188ma1=831bh54?::m23d<722wi??650;794?6|,82j6<N38<1/i<4lb:kg1?6=3`n=6=44ie594?=nl10;66a>7`83>>{e:?<1<7;50;2x 4>f288n7E:?f:J740=#m80::6gk5;29?lb12900ei950;9j`=<722e:;l4?::a7`g=832<6=4?{%3;e?7?:2B?44j:06957<6k3l1=>4>5;3g>x"6:90>7)?=1;78 a?==2.om7;4$e`91>"ck3?0(ij55:&ga?3<,82=6>5+19590>"b:3?0(h=55:&f0?3<,l?196*j6;78 `1==2.n47;4$d;91>"bi3?0(hl55:&fg?3<,ln196*je;78 ``==2.m<7;4$g391>"a:3?0(k=55:&e0?3<,o?196*i6;78 c1==2.m47;4$g;91>"ai3?0(kl55:&eg?3<,on196*ie;78 c`==2.:<=4:;%335?3<,8:9685+11191>"68=0>7)??5;78 4612<1/==955:&24=<23-;;57;4$02b>0=#99h196*>0b86?!77l3?0(<>j:49'55`==2.:==4:;%325?3<,8;9685+10191>"69=0>7)?>5;78 4712<1/=<955:&25=<23-;:57;4$03b>0=#98h196*>1b86?!76l3?0(16f3-o;685f4b83>>o3l3:17dm6:188mfg=831b=5650;9j5=?=831b8=650;9j05?=831b?54?:%34b?503g;4;h15>5<#9>l1?:5a16g95>=n;<0;6)?8f;14?k70m3807d=;:18'52`=;>1e=:k53:9j76<72-;o1965f3083>!70n39<7c?8e;48?l57290/=:h5369m52c=?21b>k4?:%34b?503g;5<#9>l1?:5a16g9=>=n<;0;6)?8f;62?k70m3:07d:?:18'52`=<81e=:k51:9j7c<72-;;o34a?4<3`9n6=4+16d904=i9>o1?65f3e83>!70n3>:7c?8e;68?l5d290/=:h5409m52c==21b?o4?:%34b?263g;5<#9>l18<5a16g93>=n;00;6)?8f;62?k70m3207d;m:18'52`==h1e=:k50:9j1<<72-;o1>65f5683>!70n3?j7c?8e;18?l31290/=:h55`9m52c=<21b984?:%34b?3f3g;5<#9>l19l5a16g92>=n>:0;6)?8f;7b?k70m3=07d8=:18'52`==h1e=:k58:9j24<72-;o1m65f5g83>!70n3?j7c?8e;`8?l3b290/=:h55`9m52c=k21b9i4?:%34b?3f3g;5<#9>l19l5a16g9a>=n==0;6)?8f;7b?k70m3l07d9j:18'52`=?m1e=:k50:9j3f<72-;o1>65f7883>!70n3=o7c?8e;18?l1?290/=:h57e9m52c=<21b;:4?:%34b?1c3g;5<#9>l1;i5a16g92>=n?<0;6)?8f;5g?k70m3=07d9;:18'52`=?m1e=:k58:9j36<72-;o1m65f7083>!70n3=o7c?8e;`8?l0a290/=:h57e9m52c=k21b:h4?:%34b?1c3g;5<#9>l1;i5a16g9a>=n>j0;6)?8f;5g?k70m3l07d8m:18'52`=?m1e=:k51198m3g=83.:;k48d:l23`<6921b:44?:%34b?1c3g;45<3`<<6=4+16d93a=i9>o1=954i7494?"6?o07d821>=n0<0;6)?8f;5g?k70m3;=76g74;29 41a2>n0b<9j:058?l>4290/=:h57e9m52c=9110e5<50;&23c<0l2d:;h4>9:9j<4<72-;5$05e>2b5<#9>l1;i5a16g95f=h1<7*>7g84`>h6?l0:h65f7183>!70n3=o7c?8e;3f?>o1=3:1(<9i:6f8j41b28l07d67:18'52`=0>1e=:k50:9j<3<72-;o1<65f8c83>!70n32h7c?8e;38?l>f290/=:h58b9m52c=:21b444?:%34b?>d3g;5<#9>l1595a16g94>=h1:0;6)?8f;;7?k70m3;07b7=:18'52`=1=1e=:k52:9l=4<72-;o1865`8g83>!70n33?7c?8e;78?j?b290/=:h5959m52c=>21d5i4?:%34b??33g;5<#9>l1595a16g9<>=h1k0;6)?8f;;7?k70m3307b7n:18'52`=1=1e=:k5a:9l=<<72-;o1o65`9683>!70n33?7c?8e;f8?j?1290/=:h5959m52c=m21d4h4?:%34b??33g;5<#9>l1o<5a16g94>=hk90;6)?8f;a2?k70m3;07bl7:18'52`=j>1e=:k50:9lf3<72-;o1>65`b283>!70n3h<7c?8e;18?jd5290/=:h5b69m52c=<21dn<4?:%34b?d03g;5<#9>l1n:5a16g92>=hio0;6)?8f;`4?k70m3=07boj:18'52`=j>1e=:k58:9lea<72-;o1m65`ac83>!70n3h<7c?8e;`8?jg>290/=:h5b69m52c=k21dm54?:%34b?d03g;5<#9>l1n:5a16g9a>=hi?0;6)?8f;`4?k70m3l07bo::18'52`=j>1e=:k51198kd2=83.:;k4m7:l23`<6921dm>4?:%34b?d03g;45<3fk:6=4+16d9f2=i9>o1=954o`294?"6?o0i;6`>7d821>=hjo0;6)?8f;`4?k70m3;=76ame;29 41a2k=0b<9j:058?jdc290/=:h5b69m52c=9110com50;&23c9:9lfg<72-;5$05e>g15<#9>l1n:5a16g95f=7g8a3>h6?l0:h65`a`83>!70n3h<7c?8e;3f?>i>n3:1(<9i:c58j41b28l07bm8:18'52`=k?1e=:k50:9lg0<72-;o1>65`c283>!70n3i=7c?8e;18?xd5><0;684?:1y'5=g=9;l0D9>i;I631>"b93;=7dj::188ma0=831bh:4?::kg5;|`2fg<72:0;6=u+19c957d<@=:m7E:?5:&f5?7a3`n>6=44ie494?=h9;<1<75rb0``>5<3290;w)?7a;31`>N38o1C8=;4$d3965=nl<0;66gk6;29?lb02900c<<9:188yg46l3:1?7>50z&2;4?::a64c=83>1<7>t$0:b>44c3A>;j6F;049'a4<582co97>5;hf5>5<;5>h0o;63=708g<>;5>m0o463=668g1>;5>?0o963=648g1>{tX3n?1U8k:4^534?[2a92T?m=5Q4g78Z1g63W>h<6P;249]072X39m1U8mo6P;fc9]0cgX3m>1U8h84^5g6?[2b<2T?i>524029`6=:;oh19?523g2917=:;ok19?523g;917=:;o219?52411917=:<9819?5233;917=::>k19>5226;916=::>219>52265916=::><19>5229f916=::1i19>5229`916=::1k19>5229;916=::li19>522d`916=::lk19>522d;916=::l219>522gd916=::oo19>522gf916=::oi19>522g`916=:;8?19>52306916=:;8919>52300916=:;8;19>522c6916=::k819>522c2916=::ho19>522`a916=::hk19>522`:916=::h<19>52357916=:;=919>52353916=:;:l19>5232f916=:;:h19>5232;916=:;:=19>52327916=:;lk1=564=2gb>16>349nm79j;<1fe?1d349nm79n;<1fe?1>349nm797;<1fe?10349nm799;<1fe?12349nm79;;<1fe?14349nm79=;<1fe?16349nm78i;<1fe?0b349nm78k;<1fe?0d349nm78m;<1fe?0f349nm786;<1fe?0?349nm788;<1fe?01349nm76:;<1fe?>3349nm76<;<1fe?>5349nm76>;<1fe?>7349nm79i;<1fe?1e349nm79?;<1fe?02349nm76k;<1fe?>e349nm76n;<1fe?>>3ty?=54?:3y]04><5:8;6<6>;|q7b5<72:qU8k>4=2da>4>7349m<7?70:p0<1=838pR978;<05b?7?92wx9==50;1xZ0643499m7j:;<117:8;<1e5?20349m<7:8;<1ee?20349m57:8;<1en7:8;<06e?20348>57:8;<06;7:8;<062?20348>97:8;<060?20348>?7:8;<07=?20348?47:8;<073?20348?:7:8;<071?20348?87:8;<077?20348?>7:8;<075?20348?<7:8;<3g5?2034;o<7:8;<3`b?2034;hi7:8;<3``?2034;ho7:8;<3`f?2034;hm7:8;<3`=?20348o=7:8;<0g4?20348hj7:8;<0`a?20348hh7:8;<0`g?20348hm7:8;<0`=?20348hn7:8;<0f7?20348n>7:8;<0f5?20348n<7:8;<0gb?20348oi7:8;<0g`?20348oo7:8;<0gf?20348=n7:8;<057:8;<1a5?20349i<7:8;<1bb?20349jh7:8;<1bg?20349jn7:8;<1be?20349j57:8;<1b4>63ty?j:4?:4:xZ1`0349mh7:8;<1ef?20349mo7:8;<637?2034>;>7:8;<112?203499<7:8;<11=?20349997:8;<3b`?2034;jo7:8;<3bf?2034;jm7:8;<3b=?2034;j47:8;<3b3?2034;j:7:8;<3b1?2034;m97:8;<3e0?2034;m?7:8;<3e6?2034;m=7:8;<3e4?2034;nj7:8;<3fa?2034;nh7:8;<3f7?2034;n>7:8;<3f5?2034;n<7:8;<3gb?2034;oi7:8;<3g`?2034;oo7:8;<3gf?20348897:8;<000?203488?7:8;<006?203488=7:8;<004?203489j7:8;<01a?203489h7:8;<01g?20349=97:8;<150?20349=>7:8;<155?20349=?7:8;<154?20349>j7:8;<16`?20349>o7:8;<16a?20349<>7:8;<144?20349<=7:8;<147?20349<87:8;<143?20349<97:8;<142?20349<47:8;<14=?203493:7:8;<1;0?20349397:8;<1;3?20349347:8;<1;f?20349357:8;<1;e?203493o7:8;<1;`?20349j=7:8;<1b4?203492j7:8;<1:a?203492h7:8;<1:g?203492n7:8;<1:e?20349257:8;<1:4>63ty?4n4?:3y]03?<5:kj6<6>;|q74>63ty?4l4?:3y]031<5:k36<6>;|q7<<<72;qU8;84=2c4>4>63ty?454?:3y]033<5:k=6<6>;|q7<3<72;qU8;=4=2c6>4>63ty?484?:3y]034<5:k?6<6>;|q7<1<72;qU8;?4=2a6>4>63ty?4>4?:3y]036<5:i?6<6>;|q7<7<72;qU88h4=2a0>4>63ty?4<4?:3y]00c<5:i96<6>;|q7<5<72;qU88j4=2a2>4>63ty?;k4?:3y]00e<5:i;6<6>;|q73`<72;qU88l4=2`:>4>63ty?;i4?:3y]00g<5:kn6<6>;|q73g<72;qU8864=2c0>4>63ty?;l4?:3y]001<5:k96<6>;|q73<<72;qU8884=2`e>4>63ty?;54?:3y]003<5:hn6<6>;|q732<72;qU88:4=2`g>4>63ty?;;4?:3y]005<5:hh6<6>;|q730<72;qU88<4=2`a>4>63ty?;94?:3y]007<5:hj6<6>;|q736<72;qU88>4=2`;>4>63ty?;?4?:3y]01`<5:h<6<6>;|q7=0<72;qU8:>4=2`5>4>63ty?594?:3y]03`<5:h>6<6>;|q7=6<72;qU8;k4=2`7>4>63ty?5?4?:3y]03b<5:h86<6>;|q7=4<72;qU8;m4=2`1>4>63ty?5=4?:3y]03d<5:h:6<6>;|q74>63ty?4:4?:3y]00?<5:km6<6>;|q73f<72;qU89k4=2cg>4>63ty?;<4?:3y]01b<5:kh6<6>;|q706<72;qU8>?4=2gb>=>?=7>52z\775=:;lk19o5rs563>5<5sW>9j63{t<:l1<77}Y<;n01>kn:458yv24l3:1>vP;2b9>7`g==?1v9=l:181[25j278il4:5:p06d=838pR9j6=4={_603>;4mh0=>6s|45;94?4|V=9=70=ja;42?xu3<10;6?uQ427896cf2?:0q~:;7;296~X3;=16?ho55g9~w1212909wS:<3:?0ad<2m2wx89;50;0xZ155349nm7;k;|q701<72;qU8?74=2gb>0e8m7>52z\76==:;lk1995rs017>5:=7?8c:?133<3j279444;b:?1a=<3j279jo4;b:?054<3j279n;4;b:?1e3<3j2788:4;b:?070<3j278il4l9:p7c7=839p1>h=:40896`6282:70=i0;6:?xu4n;0;6?u23g095=7<5:l?6i;4}r1eg?6=;r78ji4:2:?0bg<31278jn4>809~w6`c2909w0=id;3;5>;4no0o96s|3g294?5|5:l:68<4=2d3>4>6349m87j9;|q0bg<72:q6?kl5193896`d2<801>hi:e48yv5a;3:18v34=2d;>4>7349m87?8a:p7c1=83;3w0=ia;3;5>;51h0:4=522e390`=::m:18h522bd90`=::jo18h522bf90`=::ji18h522bc90`=::j31=5>4=3aa>1c<5;o869k4=3g1>1c<5;o:69k4=3g3>1c<5;nm69k4=3ff>1c<5;no69k4=3f`>1c<5;ni69k4=34a>1c<5;<369k4=34e>4>7348=i7?70:p7c0=838=w0=i9;3;5>;58o0?i63=0d87a>;58m0?i63=0b87a>;58k0?i63=0`87a>;5800?i63=0987a>;58>0?i63=5c87a>;5=h0?i63=5887a>;5=10?i63=5687a>;5=?0?i63=5487a>;5==0?i63=5287a>;5<00?i63=4987a>;5<>0?i63=4787a>;5<<0?i63=4587a>;5<:0?i63=4387a>;5<80?i63=4187a>;6l80?i63>d187a>;6ko0?i63>cd87a>;6km0?i63>cb87a>;6kk0?i63>c`87a>;6k00?i6s|3g794?40s49m47?71:?0fc<3m278nh4;e:?0fa<3m278nn4;e:?0fg<3m278nl4;e:?0f=<3m278n:4;e:?0f3<3m278n84;e:?0f1<3m278n>4;e:?0f7<3m278n<4;e:?0f5<3m278mk4;e:?0ea<3m278mn4;e:?0eg<3m278ml4;e:?0e<<3m278m54;e:?0e2<3m278m;4;e:?0e0<3m278m94;e:?0g0<3m278o94;e:?0g6<3m278o?4;e:?0g4<3m278o=4;e:?0f<<3m278mh4;e:?0e6<3m278m?4;e:?0af889~w6`b2908w0:?3;3;4>;38;0:4=523gd952g;=7>52ey>055=91;01><9:5g896472=o01><6:0:3?855=3>n70=95;6f?851<3>n70=92;6f?85193>n70=93;6f?85183>n70=:f;6f?852l3;3<63<5b82<5=:;:18h5236395=6<5:=869k4=257>1c<5:=<69k4=256>1c<5:==69k4=25;>1c<5:=269k4=2:5>1c<5:2?6<6?;<1;1?2b3493;7:j;<1;=:0:2?87fl3>n70?nc;6f?87fj3>n70?na;6f?87f13>n70?n8;6f?87f?3>n70?n6;6f?87f=3>n70?i5;6f?87a<3>n70?i3;6f?87a:3>n70?i1;6f?87a83>n70?jf;6f?87bm3>n70?jd;6f?87b;3>n70?j2;6f?87b93>n70?j0;6f?87cn3>n70?ke;6f?87cl3>n70?kc;6f?87cj3>n70<<5;6f?844<3>n70<<3;6f?844:3>n70<<1;6f?84483>n70<=f;6f?845m3>n70<=d;6f?845k3>n7p}=9c83>7}::0k19?5228a952g54z?1=d<60816>;j5d49>630=l?16>;;5d79~w6402908w0==6;71?855=3?970==8;34e>{t;;91<71?<5:8?6<9n;|q064<72;q6??>5539>774=9>k0q~==9;297~;4:00:4<523369`0=:;;81h85rs206>5<3s49997?71:?061278>l4k6:?06=2wx>:;50;0x971f2=h01?96:05b?xu5?o0;6?u226c95=5<5;2?6<9n;|q1==<72;q6>:o516c897?d2m=0q~<84;296~;5?00?n63=79823d=z{;=n6=4={<04=?7?;2794>4>7`9~w7142909w0<88;6a?840?3;:<50;0x97102=h01?99:05b?xu5?j0;6?u226595=5<5;2:6<9n;|q13g<72;q6>:85191897>728=j7p}=8983>7}::1n18o5229a952g7>52z?149516c8yv4>13:1>v3=8e823d=::0i1h;5rs3:4>5<5s483o7:m;<0;f?70i2wx>4?50;0x97>d282870<66;34e>{t:1<1<71d<5;2j6<9n;|q1=5<72;q6>5l5191897?228=j7p}=8483>7}::1k18o5229;952g52z?14:516c8yv4?m3:1>v3=8882<6=::091=:o4}r0f3?6=:r79in4;b:?1ag<6?h1v?h>:18184bk3;3?63=f7823d=z{::j6=4={<0fg?70i278>54k7:p6`0=838p1?km:5`897cf28=j7p}=f183>7}::lh1=5=4=3d6>41f3ty9i84?:3y>6`g=h7516c8yv4bn3:1>v3=e`82<6=::o>1=:o4}r0f0?6=:r79i44;b:?1a=<6?h1v?kj:18184b13;3?63=f2823d=z{;oo6=4={<0f7`9~w7`f2909w07}::oo18o522gf952g52z?1b`<60:16?=6516c8yv4a03:1>v3=fe87f>;5nj0:;l5rs221>5<5s48mh7?73:?042<6?h1v?h8:18184ak3>i70{t;9;1<74>4349;:7?8a:p756=838p1?hm:0:0?857=3;69l4=237>41f3ty8=l4?:3y>743=91901>?i:05b?xu48j0;6?u2307952g<5:896i84}r13b?6=:r78=94;b:?056<6?h1v>?6:181856<3;3?63<1d823d=z{::n6=4={<127?2e349:>7?8a:p74>=838p1>?<:0:0?856l3;41f3ty8=:4?:3y>744=91901>?l:05b?xu49?0;6?u230395=5<5:;i6<9n;|q117<72=h5539>60d=91;01??>:e4897742m?01??::e58yv47>3:1?v3=0g82<4=::0=1h8522969`0=z{;;;6=4={<03a?35348:=7?8a:p653=839p1?>j:0:2?84>>3n=70<73;f5?xu59;0;6?u221f917=::891=:o4}r030?6=;r79809>6<0=l<16>5=5d49~w773290;5900o963=1c8g3>;59o0o963=208g1>{t:991<7=t=32`>4>6348297j9;<0;6?b13ty9=;4?:3y>65d==;16><9516c8yv47:3:1?v3=0c82<4=::0?1h8522909`0=z{;;36=4={<03e?35348:57?8a:p657=839p1?>n:0:2?84><3n=70<71;f5?xu59h0;6?u221;917=::8h1=:o4}r034?6=;r79<44>809>6<2=l<16>5?5d49~w77d2909w0;<0:7?b13483<7j9;|q165<72;q6>=95539>677=9>k0q~?ie;297~;58>0:4<522819`0=::1:1h85rs0g`>5<2s4;jh7;=;<3e1?7?927:mk4k6:?2f44k7:p5d2=83>p13n=7p}>ad83>7}:9hi19?521`d952g54z?2ef<60816?75?=l116>k85d99~w4d72909w0?nb;71?87e93;;<12a?b1349;47j9;<0e1?b13ty:n?4?:6y>5dg==;16=o=516c894d22m<012m=01p1b783>7}:9h219?521c5952g54z?2e=<60816?751=l116>k:5d99~w4d?2909w0?n7;71?87e13;;<12g?b1349;:7j9;<0e7?b13ty:nl4?:3y>5d0==;16=oj516c8yv7>l3:18v3>a782<4=:;8i1h5523149`==::o91h55rs0`f>5<5s4;j97;=;<3ab?70i2wx=4m50;6x94g2282:70=>b;f4?857=3n<70:187842i3;3=63=108g1>;59:0o:63=148g<>{t::n1<704<5;><6<6>;|q115<72:q6>875193897742m=01??::e78yv44k3:1>v3=59866>;55<5s48>47?71:?1502wx>>l50;0x97302<801?:::0:2?xu5a0<5;;i6i64=33e>a0<5;8:6i84}r00e?6=:r799;4:2:?101<6081v?:k:186842>3;3=63=188g3>;59k0o963=1g8g3>;5:80o;6s|22;94?4|5;?>68<4=360>4>63ty98n4?:5y>603=91;01??m:e48977c2m?01??j:e78yv4403:1>v3=55866>;5<;0:4<5rs36a>5<4s48>87?71:?15a279=h4k6:p661=838p1?;<:4089726282:7p}=4`83>7}::<91=5?4=33f>a152z?2b0<2:27:i>4>809~w4b>2909w0?i4;71?87b:3;3=6s|1d`94?2|58l?6<6>;<3bb?b234;i=7j9;<3a7?b?3ty:h54?:3y>5c5==;16=h?51938yv7bi3:1?v3>f282<4=:9k;1h:521c19`0=z{8n<6=4={<3e6?3534;n<7?71:p5`?=838p1d783>7}:9o;19?521ed95=756z?2b4<60816=o;5d49>5g1=l?16=o75d99>5gb=l?16=oh5d79~w4b22909w0?i0;71?87cm3;3=6s|1d594?3|58l;6<6>;<3a3?b034;i57j:;<3a`?b034;ij7j8;|q2`1<72;q6=hh5539>5ab=91;0q~?j6;290~;6mo0:4<521c;9`3=:9kh1h8521ca9`0=z{8n86=4={<3fa?3534;oo7?71:p5`3=839p1809>5ge=l>1v?{t:;k1<704<5;9?6<6>;|q16<<72;q6>995539>665=91;0q~<=8;296~;5>63=3382<4=z{;8<6=4={<071?353488=7?71:p670=838p1?:;:4089757282:7p}=2483>7}::=919?5223d95=752z?107<2:279>h4>809~w7442909w0<;1;71?845l3;3=6s|23094?4|5;>;68<4=30`>4>63ty9?;4?:0y>616=91;0q~?l8;296~;6m:0>>63>d082<4=z{8i<6=4={<3f6?3534;o<7?71:p5f0=838p1:40894ea282:7p}>c483>7}:9l:19?521bg95=752z?2`c<2:27:oi4>809~w4e42909w0?ke;71?87dk3;3=6s|1b094?4|58no68<4=0aa>4>63ty:o<4?:3y>5ae==;16=no51938yv7d83:1>v3>dc866>;6k00:4<5rs3fb>5<2s4;o=7;=;<0f7?7?927:4o4k5:?1<1278il4;2:p5c0=838p1e28=j7p}>f683>7}:9jl19?5219a952g52z?2g`<2:27:4i4>7`9~w4`>2909w0?ld;71?87?m3;41f3ty:jo4?:3y>5fd==;16=4>516c8yv7ak3:1>v3>c`866>;6180:;l5rs0dg>5<5s4;h57;=;<3:6?70i2wx?4950;6x97522<801>o>:0:2?87>;3n>70=ja;1;?xu5=j0;6?u2226917=:9091=:o4}r06`?6=:r79?>4:2:?2=1<6?h1v?;j:181844:3?970?65;34e>{t:04<583=6<9n;|q125<72;q6>>>5539>5<1=9>k0q~<91;296~;5:o0>>63>99823d=z{;<96=4={<01a?3534;257?8a:p635=838p1?7}::;i19?5218`952g515y>6a7=<016>i>5489>6f`=<016>nk5489>6fb=<016>nm5489>6fg=<016>n75489>6fd=<016>h=5489>6`4=<016>h?5489>6`6=<016>ih5489>6ac=<016>ij5489>6ae=<016>il5489>7`e=l?16>;8516c8yv4f=3:1>v3=d0866>;5jl0:;l5rs3a;>5<3s48o=7?71:?1a6<2:2795:4k6:?1fcl:50;0x97b72<801?lk:05b?xu5k>0;69u22e295=7<5;o968<4=3;5>a><5;h>6i;4}r0b7?6=:r79ok4:2:?1ff<6?h1v?m9:18784dn3;3=63=e0866>;51?0o;63=b28g1>{t:h81<704<5;hi6<9n;|q1g0<72=q6>nk5193897c72<801?7::e:897d62m?0q~>63=b`823d=z{;i?6=4;{<0``?7?9279hk4:2:?1=028=j7p}=c283>1}::ji1=5?4=3ff>04<5;3?6i64=3cg>a352z?1gd<2:279n:4>7`9~w7e6290?w0;5lj0>>63=928g<>;5i00o96s|28f94?4|5;i268<4=3`5>41f3ty9o=4?:5y>6f?=91;01?jm:40897?42m=01?o8:e78yv4>n3:1>v3=cc866>;5j10:;l5rs3a1>5<3s48hn7?71:?1`a<2:279594k7:?1ego:50;0x97db2=h01?l;:05b?xu5jo0;6?u22cg9573<5;hm6<9n;|q1f7<72:q6>oj54c9>6g2=o<516c8yv4e=3:1?v3=be8260=::k>1=5=4=3`6>41f3ty9n=4?:2y>6ge=o<54c9>6g6=9>k0q~8522c095=5<5;h86<9n;|q1e`<72:q6>ol54c9>6g6=lk516c8yv4e93:1?v3=bc8260=::k:1=5=4=3`2>41f3ty9mn4?:2y>6gg=lk54c9>6de=9>k0q~8522`g95=5<5;km6<9n;|q1ed<72:q6>o754c9>6de=lo516c8yv4fl3:1?v3=b88260=::hi1=5=4=3cg>41f3ty9m54?:2y>6g>=lo54c9>6d>=9>k0q~8522`c95=5<5;ki6<9n;|q1e3<72:q6>o954c9>6d>=l8516c8yv4f13:1?v3=b68260=::h21=5=4=3c:>41f3ty9m:4?:2y>6g0=9;?01?o9:0:0?84f?3;;<3;g?b234;3n7j9;<0;7?b?349nm7:?;|q1`=<72h?5193894>c2m?01<6l:e4897>42m=01>kn:2d8yv4c?3:19v3=e182<4=:91o1h85219f9`3=::181h5523dc97`=z{;n=6=4:{<0gb?7?927:4k4k5:?2<`2794?4k7:?0ad<4l2wx>i;50;7x97bb282:70?60;f6?87?n3n=70<71;f;?85bi39h7p}=d583>0}::mn1=5?4=0;2>a3<583;6i84=3:2>a1<5:oj6>l4}r0g7?6==r79hn4>809>5<4=l<16=4?5d79>6=6=l116?ho53`9~w7b5290?w0;61;0o:63=818g3>;4mh0856s|27a94?4|5;41f3ty9:o4?:6y>63d=91;01?8n:e4897162m=01?8k:e5897002m=01?89:e:897022m20q~<99;296~;5>10>>63=6`823d=z{;<36=48{<05279:i4k6:?122279:;4k7:?120:>50;1x970a2<801?8j:408971628=j7p}=6d83>7}::?o1=5?4=352>a352cy>733=<016?;:5489>734=<016?;?5489>735=<016?;>5489>70`=<016?8j5489>70e=<016?8k5489>724=<016?:>5489>727=<016?:=5489>722=<016?:95489>723=<016?:85489>72>=<016?:75489>7=0=<016?5:5489>7=3=<016?595489>7=>=<016?5l5489>7=?=<016?5o5489>7=e=<016?5j5489>7d7=<016?l>5489>7<`=<016?4k5489>77777g=9>k01><=:e:896cf2=:37p}<3583>7}:;??19?52342952gn7>54z?020<60816?:75539>74`=l<16?8?5d49~w6542909w0=94;71?853n3;;<14734==;16?9j516c8yv5203:18v3<6382<4=:;><19?5230g9`2=:;=81h85rs213>5<5s49==7;=;<17g?70i2wx?8950;6x9606282:70=85;71?856l3n>70=;0;f6?xu4;;0;6?u2371917=:;=o1=:o4}r16=?6=4>809>721==;16?712=l<1v>{t;<<1<7:t=243>4>6349<87;=;<12`?b03498i7j:;|q06`<72;q6?8h5539>71g=9>k0q~=:5;290~;4=o0:4<52361917=:;8i1h85232a9`0=z{:8h6=4={<16`?35349?47?8a:p705=83>p1>;k:0:2?85093?970=>b;f5?85403n>7p}<2c83>7}:;>7>54z?01f<60816?:>5539>74d=l<16?>85d49~w64c2909w0=:e;71?85313;;<146?35349:o7j8;<10e?b23ty8884?:3y>706=v3<518260=:;<;1=:o4}r177?6=;r788k4;b:?000<3j2788>4>7`9~w6212908w0=;f;311>;4<<0:4>52354952g53z?00`<3j2788>4;b:?004<6?h1v>:;:180853m3;9963<4282<6=:;=>1=:o4}r10b?6=;r788i4;b:?004<3j278?k4>7`9~w6252908w0=;d;311>;4<80:4>52350952g53z?00f<3j278?k4;b:?07a<6?h1v>:?:180853k3;9963<3g82<6=:;=:1=:o4}r10f?6=;r788o4;b:?07a<3j278?o4>7`9~w65b2908w0=;b;311>;4;m0:4>5232g952g53z?00d<3j278?o4;b:?07<<6?h1v>=l:180853i3;9963<3c82<6=:;:i1=:o4}r103?6=;r78844;b:?07<<3j278?:4>7`9~w65f2908w0=;9;311>;4;00:4>5232c952g53z?00=<3j278?:4;b:?070<6?h1v>=7:18085303;9963<3682<6=:;:21=:o4}r102?6=;r788:4>249>763=91901>=9:05b?xu4>10;6>u236095=7<5:2=68<4=225>a153z?035<60816?5:5539>753=l<1v>88:18085093;3=63<84866>;48<0o:6s|37;94?5|5:=86<6>;<1;3?35349;:7j:;|q02d<72:q6?::5193896>?2<801>>8:e58yv51l3:1?v3<7682<4=:;1h19?5231:9`0=z{:6}:;>21=5?4=2:`>04<5::26i94}r15b?6=;r78;44>809>7=b==;16?=75d49~w61d2908w0=76;3;5>;41h0>>63=f28g3>{t;>k1<7=t=2:7>4>6349247;=;<0e6?b23ty8;o4?:2y>7=3=91;01>76:40897`52m<0q~=8d;297~;40>0:4<5238`917=::o91h85rs25f>5<4s49347?71:?0=f<2:279j94k7:p7=7=839p1>6m:0:2?85>n3?970u239;95=7<5:3o68<4=3d7>a353z?06c3=l>1v>6=:18085?k3;3=63;5n?0o;6s|39194?5|5:2o6<6>;<1b5?35348m:7j:;|q0=3<72=q6?l>5193894?32m?01<7<:e4896cf2:<0q~=65;290~;41o0:4<521879`0=:90>1h;523dc970=z{:3?6=4;{<1:a?7?927:5;4k5:?2=0278il4<4:p7<5=83>p1>7k:0:2?87>?3n>70?66;f5?85bi3987p}<9383>1}:;0i1=5?4=0;;>a3<583<6i84=2gb>6454z?0=g<60816=475d49>5<>=l?16?ho5309~w6?7290?w0=6a;3;5>;61h0o963>988g2>;4mh08<6s|39d94?2|5:326<6>;<3:f?b234;2m7j9;<1fe?4a3ty84h4?:2y>7<>=91;01<7m:e4896cf2;o0q~=je;2960}:;kl184523cg90<=:;kn184523ca90<=:;kh184523cc90<=:;k2184523c590<=:;k<184523c790<=:;k>184523c190<=:;k8184523c390<=:;k:184523`d90<=:;hn184523`a90<=:;hh184523`c90<=:;h3184523`:90<=:;h=184523`490<=:;h?184523`690<=:;j?184523b690<=:;j9184523b090<=:;j;184523b290<=:;k3184523`g90<=:;h9184523`090<=::?=1=:o4}r1f6?6=:r78nk4:2:?0adkn:c:8yv5b83:1>v3;4mh0i:6s|3ed94?4|5:hh68<4=2gb>g252z?0fg<2:278il4m3:p7ab=838p1>ln:40896cf2k80q~=kb;296~;4j10>>63{t;mk1<704<5:oj6o>4}r1g=?6=:r78n;4:2:?0adkn:b78yv5c?3:1>v3;4mh0ji6s|3e494?4|5:h868<4=2gb>db52z?0f7<2:278il4nc:p7a2=838p1>l>:40896cf2hh0q~=k3;296~;4j90>>63{t;m81<704<5:oj6l64}r1g4?6=:r78mi4:2:?0adkn:`48yv5dm3:1>v3;4mh0h86s|3bf94?4|5:kj68<4=2gb>d352z?0e<<2:278il4n4:p7fd=838p1>o7:40896cf2h90q~=la;296~;4i>0>>63{t;j31<704<5:oj6l?4}r1`kn:cd8yv5b13:1>v3;4mh0ii6s|3d:94?4|5:i?68<4=2gb>f552z?0g6<2:278il4md:p7`0=838p1>m=:40896cf2ki0q~=j5;296~;4k80>>63{t;l>1<704<5:oj6oo4}r1f7?6=:r78n44:2:?0adkn:c78yv5c93:1>v3;4mh0jm6s|3b494?4|5:k968<4=2gb><`52z?0af<6?h16?ho5c`9~w6cc2909w0<6c;f6?841=3;9:6s|17;94?4|58ho6i64=0`a>4413ty::l4?:3y>5g`=l116=om51348yv71j3:1>v3=1g8g<>;59m0:>;5rs04`>5<5s489=7j7;<02a?75>2wv9:<:181[24927?97:<1:&741<6>m1v9:>:181[24827?97:<0:&741<6>l1v9:?:181[25n27?97:=f:&741<6>o1v9=i:181[25m27?97:=e:&741<6?<1v9=j:181[25l27?97:=d:&741<6;<1v9=k:181[25k27?97:=c:&741<6;o1v9=l:181[25j27?97:=b:&741<691v9:n:181[24?27?97:<7:&741<6>81v9:6:181[24>27?97:<6:&741<6>;1v9:7:181[24=27?97:<5:&741<6>:1v9:8:181[24<27?97:<4:&741<6>=1v9:9:181[24;27?97:<3:&741<6><1v9:::181[24:27?97:<2:&741<6>?1v9:;:181[25127?97:=9:&741<6>>1v9=n:181[25027?97:=8:&741<6>11v9k=:181[2b:27?97:j2:&741<6?91v9kj:181[2bm27?97:je:&741<6?81v9h?:181[2a827?97:i0:&741<6?;1v9h8:181[2a?27?97:i7:&741<6?:1v8><:181[37;27?97;?3:&741<6?=1v9?7:181[26027?97:>8:&741<6??1v96j:181[21i27?97:9a:&741<6;?1v96l:181[21127?97:99:&741<6;>1v96m:181[21027?97:98:&741<6;11v96n:181[21?27?97:97:&741<6;01v966:181[21>27?97:96:&741<6;h1v967:181[21=27?97:95:&741<6;k1v969:181[21;27?97:93:&741<6;j1v96::181[21:27?97:92:&741<6;m1v96;:181[21927?97:91:&741<6;l1v96<:181[21827?97:90:&741<6<91v96=:181[22n27?97::f:&741<6<81v96>:181[22m27?97::e:&741<6<;1v96?:181[22l27?97::d:&741<6<:1v99i:181[22k27?97::c:&741<6<=1v99j:181[22j27?97::b:&741<6<<1v99k:181[22i27?97::a:&741<61v99n:181[22?27?97::7:&741<6<11v996:181[22>27?97::6:&741<6<01v997:181[22=27?97::5:&741<6:181[21k27?97:9c:&741<6=>1v97?:181[21j27?97:9b:&741<6=11v96i:181[21<27?97:94:&741<6=01v968:181[22127?97::9:&741<6=h1v99l:181[23m27?97:;e:&741<6=k1v99>:181[23l27?97:;d:&741<6=j1v978:181[2>?27?97:67:&741<6=m1v97k:181[2>l27?97:6d:&741<6=l1vqc7i3;296~N38<1vb4h;:181M27=2we5k;50;0xL1623td2j;4?:3yK05352zJ740=zf0l36=4={I631>{i1o31<7nh0;6?uG4178yk?aj3:1>vF;049~j<`d2909wE:?5:m=cb=838pD9>:;|l:b`<72;qC8=;4}o;eb?6=:rB?<85rn`23>5<5sA>;96saa1394?4|@=:>7p`n0383>7}O<9?0qco?3;296~N38<1vbl>;:181M27=2wem=;50;0xL1623tdj<;4?:3yK05352zJ740=zfh:36=4={I631>{ii931<7vF;049~jd6d2909wE:?5:me5b=838pD9>:;|lb4`<72;qC8=;4}oc3b?6=:rB?<85rn`33>5<5sA>;96saa0394?4|@=:>7p`n1383>7}O<9?0qco>3;296~N38<1vbl?;:181M27=2wem<;50;0xL1623tdj=;4?:3yK05352zJ740=zfh;36=4={I631>{ii831<7vF;049~jd7d2909wE:?5:me4b=838pD9>:;|lb5`<72;qC8=;4}oc2b?6=:rB?<85rn`03>5<5sA>;96saa3394?4|@=:>7p`n2383>7}O<9?0qco=3;296~N38<1vbl<;:181M27=2wem?;50;0xL1623tdj>;4?:3yK05352zJ740=zfh836=4={I631>{ii;31<7vF;049~jd4d2909wE:?5:me7b=838pD9>:;|lb6`<72;qC8=;4}oc1b?6=:rB?<85rn`13>5<5sA>;96sa84d94?7|@=:>7p`79e83>4}O<9?0qc66e;295~N38<1vb57i:182M27=2we4l>50;3xL1623td3m<4?:0yK0537>51zJ740=zf1k86=4>{I631>{i0h>1<7?tH526?xh?i<0;6f>3:1=vF;049~j=g0290:wE:?5:m=83;pD9>:;|l;e<<728qC8=;4}o:be?6=9rB?<85rn9ca>5<6sA>;96sa8`a94?7|@=:>7p`7ae83>4}O<9?0qc6ne;295~N38<1vb5oi:182M27=2we4o>50;3xL1623td3n<4?:0yK0537>51zJ740=zf1h86=4>{I631>{i0k>1<7?tH526?xh?j<0;6e>3:1=vF;049~j=d0290:wE:?5:m=83;pD9>:;|l;f<<728qC8=;4}o:ae?6=9rB?<85rn9`a>5<6sA>;96sa8ca94?7|@=:>7p`7be83>4}O<9?0qc6me;295~N38<1vb5li:182M27=2we4n>50;3xL1623td3o<4?:0yK0537>51zJ740=zf1i86=4>{I631>{i0j>1<7?tH526?xh?k<0;6d>3:1=vF;049~j=e0290:wE:?5:m=83;pD9>:;|l;g<<728qC8=;4}o:`e?6=9rB?<85rn9aa>5<6sA>;96sa8ba94?7|@=:>7p`7ce83>4}O<9?0qc6le;295~N38<1vb5mi:182M27=2we4i>50;3xL1623td3h<4?:0yK0537>51zJ740=zf1n86=4>{I631>{i0m>1<7?tH526?xh?l<0;6c>3:1=vF;049~j=b0290:wE:?5:m=83;pD9>:;|l;`<<728qC8=;4}o:ge?6=9rB?<85rn9fa>5<6sA>;96sa8ea94?7|@=:>7p`7de83>4}O<9?0qc6ke;295~N38<1vb5ji:182M27=2we4h>50;3xL1623td3i<4?:0yK0537>51zJ740=zf1o86=4>{I631>{i0l>1<7?tH526?xh?m<0;6b>3:1=vF;049~j=c0290:wE:?5:m<`>=83;pD9>:;|l;a<<728qC8=;4}o:fe?6=9rB?<85rn9ga>5<6sA>;96sa8da94?7|@=:>7p`7ee83>4}O<9?0qc6je;295~N38<1vb5ki:182M27=2we4k>50;3xL1623td3j<4?:0yK0537>51zJ740=zf1l86=4>{I631>{i0o>1<7?tH526?xh?n<0;6a>3:1=vF;049~j=`0290:wE:?5:m=83;pD9>:;|l;b<<728qC8=;4}o:ee?6=9rB?<85rn9da>5<6sA>;96sa8ga94?7|@=:>7p`7fe83>4}O<9?0qc6ie;295~N38<1vb5hi:182M27=2we5=>50;3xL1623td2<<4?:0yK0537>51zJ740=zf0:86=4>{I631>{i19>1<7?tH526?xh>8<0;63:1=vF;049~j<60290:wE:?5:m=5>=83;pD9>:;|l:4<<728qC8=;4}o;3e?6=9rB?<85rn82a>5<6sA>;96sa91a94?7|@=:>7p`60e83>4}O<9?0qc7?e;295~N38<1vb4>i:182M27=2we5<>50;3xL1623td2=<4?:0yK0537>51zJ740=zf0;86=4>{I631>{i18>1<7?tH526?xh>9<0;63:1=vF;049~j<70290:wE:?5:m=4>=83;pD9>:;|l:5<<728qC8=;4}o;2e?6=9rB?<85rn83a>5<6sA>;96sa90a94?7|@=:>7p`61e83>4}O<9?0qc7>e;295~N38<1vb4?i:182M27=2we5?>50;3xL1623td2><4?:0yK0537>51zJ740=zf0886=4>{I631>{i1;>1<7?tH526?xh>:<0;63:1=vF;049~j<40290:wE:?5:m=7>=83;pD9>:;|l:6<<728qC8=;4}o;1e?6=9rB?<85rn80a>5<6sA>;96sa93a94?7|@=:>7p`62e83>4}O<9?0qc7=e;295~N38<1vb4>50;3xL1623td2?<4?:0yK0537>51zJ740=zf0986=4>{I631>{i1:>1<7?tH526?xh>;<0;63:1=vF;049~j<50290:wE:?5:m=6>=83;pD9>:;|l:7<<728qC8=;4}o;0e?6=9rB?<85rn81a>5<6sA>;96sa92a94?7|@=:>7p`63e83>4}O<9?0qc750;3xL1623td28<4?:0yK0537>51zJ740=zf0>86=4>{I631>{i1=>1<7?tH526?xh><<0;63:1=vF;049~j<20290:wE:?5:m=1>=83;pD9>:;|l:0<<728qC8=;4}o;7e?6=9rB?<85rn86a>5<6sA>;96sa95a94?7|@=:>7p`64e83>4}O<9?0qc7;e;295~N38<1vb4:i:182M27=2we58>50;3xL1623td29<4?:0yK053>7>51zJ740=zf0?86=4>{I631>{i1<>1<7?tH526?xh>=<0;63:1=vF;049~j<30290:wE:?5:m=0>=83;pD9>:;|l:1<<728qC8=;4}o;6e?6=9rB?<85rn87a>5<6sA>;96sa94a94?7|@=:>7p`65e83>4}O<9?0qc7:e;295~N38<1vb4;i:182M27=2we5;>50;3xL1623td2:<4?:0yK0537>51zJ740=zf0<86=4>{I631>{i1?>1<7?tH526?xh>><0;63:1=vF;049~j<00290:wE:?5:m=3>=83;pD9>:;|l:2<<728qC8=;4}o;5e?6=9rB?<85rn84a>5<6sA>;96sa97a94?7|@=:>7p`66e83>4}O<9?0qc79e;295~N38<1vb48i:182M27=2we5:>50;3xL1623td2;<4?:0yK0537>51zJ740=zf0=86=4>{I631>{i1>>1<7?tH526?xh>?<0;63:1=vF;049~j<10290:wE:?5:m=2>=83;pD9>:;|l:3<<728qC8=;4}o;4e?6=9rB?<85rn85a>5<6sA>;96sa96a94?7|@=:>7p`67e83>4}O<9?0qc78e;295~N38<1vb49i:182M27=2we55>50;3xL1623td24<4?:0yK0537>51zJ740=zf0286=4>{I631>{i11>1<7?tH526?xh>0<0;63:1=vF;049~j<>0290:wE:?5:m==>=83;pD9>:;|l:<<<728qC8=;4}o;;e?6=9rB?<85rn8:a>5<6sA>;96sa99a94?7|@=:>7p`68e83>4}O<9?0qc77e;295~N38<1vb46i:182M27=2we54>50;3xL1623td25<4?:0yK0537>51zJ740=zf0386=4>{I631>{i10>1<7?tH526?xh>1<0;6>3:1=vF;049~j=83;pD9>:;|l:=<<728qC8=;4}o;:e?6=9rB?<85rn8;a>5<6sA>;96sa98a94?7|@=:>7p`69e83>4}O<9?0qc76e;295~N38<1vb47i:182M27=2we5l>50;3xL1623td2m<4?:0yK0537>51zJ740=zf0k86=4>{I631>{i1h>1<7?tH526?xh>i<0;63:1=vF;049~j=83;pD9>:;|l:e<<728qC8=;4}o;be?6=9rB?<85rn8ca>5<6sA>;96sa9`a94?7|@=:>7p`6ae83>4}O<9?0qc7ne;295~N38<1vb4oi:182M27=2we5o>50;3xL1623td2n<4?:0yK0537>51zJ740=zf0h86=4>{I631>{i1k>1<7?tH526?xh>j<0;63:1=vF;049~j=83;pD9>:;|l:f<<728qC8=;4}o;ae?6=9rB?<85rn8`a>5<6sA>;96sa9ca94?7|@=:>7p`6be83>4}O<9?0qc7me;295~N38<1vb4li:182M27=2we5n>50;3xL1623td2o<4?:0yK0537>51zJ740=zf0i86=4>{I631>{i1j>1<7?tH526?xh>k<0;63:1=vF;049~j=83;pD9>:;|l:g<<728qC8=;4}o;`e?6=9rB?<85rn8aa>5<6sA>;96sa9ba94?7|@=:>7p`6ce83>4}O<9?0qc7le;295~N38<1vb4mi:182M27=2we5i>50;3xL1623td2h<4?:0yK0537>51zJ740=zf0n86=4>{I631>{i1m>1<7?tH526?xh>l<0;63:1=vF;049~j=83;pD9>:;|l:`<<728qC8=;4}o;ge?6=9rB?<85rn8fa>5<6sA>;96sa9ea94?7|@=:>7p`6de83>4}O<9?0qc7ke;295~N38<1vb4ji:182M27=2we5h>50;3xL1623td2i<4?:0yK0537>51zJ740=zf0o86=4>{I631>{i1l>1<7?tH526?xh>m<0;63:1=vF;049~j=83;pD9>:;|l:a<<728qC8=;4}o;fe?6=9rB?<85rn8ga>5<6sA>;96sa9da94?7|@=:>7p`6ee83>4}O<9?0qc7je;295~N38<1vb4ki:182M27=2we5k>50;3xL1623td2j<4?:0yK0537>51zJ740=zutwKLNumc78;2d33k=9vLMLt0|BCT~{GH \ No newline at end of file diff --git a/usrp2/coregen/fifo_xlnx_512x36_2clk_18to36.v b/usrp2/coregen/fifo_xlnx_512x36_2clk_18to36.v index 32de19e8a..531d56c08 100644 --- a/usrp2/coregen/fifo_xlnx_512x36_2clk_18to36.v +++ b/usrp2/coregen/fifo_xlnx_512x36_2clk_18to36.v @@ -63,7 +63,7 @@ output full; // synthesis translate_off - FIFO_GENERATOR_V4_4 #( + FIFO_GENERATOR_V4_3 #( .C_COMMON_CLOCK(0), .C_COUNT_TYPE(0), .C_DATA_COUNT_WIDTH(10), diff --git a/usrp2/coregen/fifo_xlnx_512x36_2clk_18to36.veo b/usrp2/coregen/fifo_xlnx_512x36_2clk_18to36.veo new file mode 100644 index 000000000..cd949ccaa --- /dev/null +++ b/usrp2/coregen/fifo_xlnx_512x36_2clk_18to36.veo @@ -0,0 +1,52 @@ +/******************************************************************************* +* This file is owned and controlled by Xilinx and must be used * +* solely for design, simulation, implementation and creation of * +* design files limited to Xilinx devices or technologies. Use * +* with non-Xilinx devices or technologies is expressly prohibited * +* and immediately terminates your license. * +* * +* XILINX IS PROVIDING THIS DESIGN, CODE, OR INFORMATION "AS IS" * +* SOLELY FOR USE IN DEVELOPING PROGRAMS AND SOLUTIONS FOR * +* XILINX DEVICES. BY PROVIDING THIS DESIGN, CODE, OR INFORMATION * +* AS ONE POSSIBLE IMPLEMENTATION OF THIS FEATURE, APPLICATION * +* OR STANDARD, XILINX IS MAKING NO REPRESENTATION THAT THIS * +* IMPLEMENTATION IS FREE FROM ANY CLAIMS OF INFRINGEMENT, * +* AND YOU ARE RESPONSIBLE FOR OBTAINING ANY RIGHTS YOU MAY REQUIRE * +* FOR YOUR IMPLEMENTATION. XILINX EXPRESSLY DISCLAIMS ANY * +* WARRANTY WHATSOEVER WITH RESPECT TO THE ADEQUACY OF THE * +* IMPLEMENTATION, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OR * +* REPRESENTATIONS THAT THIS IMPLEMENTATION IS FREE FROM CLAIMS OF * +* INFRINGEMENT, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS * +* FOR A PARTICULAR PURPOSE. * +* * +* Xilinx products are not intended for use in life support * +* appliances, devices, or systems. Use in such applications are * +* expressly prohibited. * +* * +* (c) Copyright 1995-2007 Xilinx, Inc. * +* All rights reserved. * +*******************************************************************************/ +// The following must be inserted into your Verilog file for this +// core to be instantiated. Change the instance name and port connections +// (in parentheses) to your own signal names. + +//----------- Begin Cut here for INSTANTIATION Template ---// INST_TAG +fifo_xlnx_512x36_2clk_18to36 YourInstanceName ( + .din(din), // Bus [17 : 0] + .rd_clk(rd_clk), + .rd_en(rd_en), + .rst(rst), + .wr_clk(wr_clk), + .wr_en(wr_en), + .almost_full(almost_full), + .dout(dout), // Bus [35 : 0] + .empty(empty), + .full(full)); + +// INST_TAG_END ------ End INSTANTIATION Template --------- + +// You must compile the wrapper file fifo_xlnx_512x36_2clk_18to36.v when simulating +// the core, fifo_xlnx_512x36_2clk_18to36. When compiling the wrapper file, be sure to +// reference the XilinxCoreLib Verilog simulation library. For detailed +// instructions, please refer to the "CORE Generator Help". + diff --git a/usrp2/coregen/fifo_xlnx_512x36_2clk_18to36.xco b/usrp2/coregen/fifo_xlnx_512x36_2clk_18to36.xco index 05ceffbe9..12b88da39 100644 --- a/usrp2/coregen/fifo_xlnx_512x36_2clk_18to36.xco +++ b/usrp2/coregen/fifo_xlnx_512x36_2clk_18to36.xco @@ -1,7 +1,7 @@ ############################################################## # # Xilinx Core Generator version K.39 -# Date: Fri Jul 30 20:43:00 2010 +# Date: Tue Aug 10 23:12:53 2010 # ############################################################## # @@ -32,7 +32,7 @@ SET verilogsim = true SET vhdlsim = false # END Project Options # BEGIN Select -SELECT Fifo_Generator family Xilinx,_Inc. 4.4 +SELECT Fifo_Generator family Xilinx,_Inc. 4.3 # END Select # BEGIN Parameters CSET almost_empty_flag=false @@ -78,5 +78,5 @@ CSET write_data_count=false CSET write_data_count_width=10 # END Parameters GENERATE -# CRC: 9b689ee4 +# CRC: 6866170 diff --git a/usrp2/coregen/fifo_xlnx_512x36_2clk_18to36_fifo_generator_v4_3_xst_1.lso b/usrp2/coregen/fifo_xlnx_512x36_2clk_18to36_fifo_generator_v4_3_xst_1.lso new file mode 100644 index 000000000..f1a6f7899 --- /dev/null +++ b/usrp2/coregen/fifo_xlnx_512x36_2clk_18to36_fifo_generator_v4_3_xst_1.lso @@ -0,0 +1,3 @@ +blkmemdp_v6_2 +blk_mem_gen_v2_6 +fifo_generator_v4_3 diff --git a/usrp2/coregen/fifo_xlnx_512x36_2clk_18to36_fifo_generator_v4_3_xst_1.ngc_xst.xrpt b/usrp2/coregen/fifo_xlnx_512x36_2clk_18to36_fifo_generator_v4_3_xst_1.ngc_xst.xrpt new file mode 100644 index 000000000..f718bb394 --- /dev/null +++ b/usrp2/coregen/fifo_xlnx_512x36_2clk_18to36_fifo_generator_v4_3_xst_1.ngc_xst.xrpt @@ -0,0 +1,102 @@ + + + + + + +
+ + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + +
+
+ + + +
+
+
+
+
+
+
+
+ + + + +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + +
+
+
+ + + + + + + +
+
+
+
+
+ + + +
+ + + diff --git a/usrp2/coregen/fifo_xlnx_512x36_2clk_18to36_flist.txt b/usrp2/coregen/fifo_xlnx_512x36_2clk_18to36_flist.txt new file mode 100644 index 000000000..18ba3e664 --- /dev/null +++ b/usrp2/coregen/fifo_xlnx_512x36_2clk_18to36_flist.txt @@ -0,0 +1,8 @@ +# Output products list for +fifo_xlnx_512x36_2clk_18to36.ngc +fifo_xlnx_512x36_2clk_18to36.v +fifo_xlnx_512x36_2clk_18to36.veo +fifo_xlnx_512x36_2clk_18to36.xco +fifo_xlnx_512x36_2clk_18to36_fifo_generator_v4_3_xst_1.ngc_xst.xrpt +fifo_xlnx_512x36_2clk_18to36_flist.txt +fifo_xlnx_512x36_2clk_18to36_xmdf.tcl diff --git a/usrp2/coregen/fifo_xlnx_512x36_2clk_18to36_readme.txt b/usrp2/coregen/fifo_xlnx_512x36_2clk_18to36_readme.txt new file mode 100644 index 000000000..e0d45849d --- /dev/null +++ b/usrp2/coregen/fifo_xlnx_512x36_2clk_18to36_readme.txt @@ -0,0 +1,39 @@ +The following files were generated for 'fifo_xlnx_512x36_2clk_18to36' in directory +/home/matt/fpgapriv/usrp2/coregen/: + +fifo_xlnx_512x36_2clk_18to36.ngc: + Binary Xilinx implementation netlist file containing the information + required to implement the module in a Xilinx (R) FPGA. + +fifo_xlnx_512x36_2clk_18to36.v: + Verilog wrapper file provided to support functional simulation. + This file contains simulation model customization data that is + passed to a parameterized simulation model for the core. + +fifo_xlnx_512x36_2clk_18to36.veo: + VEO template file containing code that can be used as a model for + instantiating a CORE Generator module in a Verilog design. + +fifo_xlnx_512x36_2clk_18to36.xco: + CORE Generator input file containing the parameters used to + regenerate a core. + +fifo_xlnx_512x36_2clk_18to36_fifo_generator_v4_3_xst_1.ngc_xst.xrpt: + Please see the core data sheet. + +fifo_xlnx_512x36_2clk_18to36_flist.txt: + Text file listing all of the output files produced when a customized + core was generated in the CORE Generator. + +fifo_xlnx_512x36_2clk_18to36_readme.txt: + Text file indicating the files generated and how they are used. + +fifo_xlnx_512x36_2clk_18to36_xmdf.tcl: + ISE Project Navigator interface file. ISE uses this file to determine + how the files output by CORE Generator for the core can be integrated + into your ISE project. + + +Please see the Xilinx CORE Generator online help for further details on +generated files and how to use them. + diff --git a/usrp2/coregen/fifo_xlnx_512x36_2clk_18to36_xmdf.tcl b/usrp2/coregen/fifo_xlnx_512x36_2clk_18to36_xmdf.tcl new file mode 100644 index 000000000..f20d53f64 --- /dev/null +++ b/usrp2/coregen/fifo_xlnx_512x36_2clk_18to36_xmdf.tcl @@ -0,0 +1,68 @@ +# The package naming convention is _xmdf +package provide fifo_xlnx_512x36_2clk_18to36_xmdf 1.0 + +# This includes some utilities that support common XMDF operations +package require utilities_xmdf + +# Define a namespace for this package. The name of the name space +# is _xmdf +namespace eval ::fifo_xlnx_512x36_2clk_18to36_xmdf { +# Use this to define any statics +} + +# Function called by client to rebuild the params and port arrays +# Optional when the use context does not require the param or ports +# arrays to be available. +proc ::fifo_xlnx_512x36_2clk_18to36_xmdf::xmdfInit { instance } { +# Variable containg name of library into which module is compiled +# Recommendation: +# Required +utilities_xmdf::xmdfSetData $instance Module Attributes Name fifo_xlnx_512x36_2clk_18to36 +} +# ::fifo_xlnx_512x36_2clk_18to36_xmdf::xmdfInit + +# Function called by client to fill in all the xmdf* data variables +# based on the current settings of the parameters +proc ::fifo_xlnx_512x36_2clk_18to36_xmdf::xmdfApplyParams { instance } { + +set fcount 0 +# Array containing libraries that are assumed to exist +# Examples include unisim and xilinxcorelib +# Optional +# In this example, we assume that the unisim library will +# be magically +# available to the simulation and synthesis tool +utilities_xmdf::xmdfSetData $instance FileSet $fcount type logical_library +utilities_xmdf::xmdfSetData $instance FileSet $fcount logical_library unisim +incr fcount + +utilities_xmdf::xmdfSetData $instance FileSet $fcount relative_path fifo_xlnx_512x36_2clk_18to36.ngc +utilities_xmdf::xmdfSetData $instance FileSet $fcount type ngc +incr fcount + +utilities_xmdf::xmdfSetData $instance FileSet $fcount relative_path fifo_xlnx_512x36_2clk_18to36.v +utilities_xmdf::xmdfSetData $instance FileSet $fcount type verilog +incr fcount + +utilities_xmdf::xmdfSetData $instance FileSet $fcount relative_path fifo_xlnx_512x36_2clk_18to36.veo +utilities_xmdf::xmdfSetData $instance FileSet $fcount type verilog_template +incr fcount + +utilities_xmdf::xmdfSetData $instance FileSet $fcount relative_path fifo_xlnx_512x36_2clk_18to36.xco +utilities_xmdf::xmdfSetData $instance FileSet $fcount type coregen_ip +incr fcount + +utilities_xmdf::xmdfSetData $instance FileSet $fcount relative_path fifo_xlnx_512x36_2clk_18to36_fifo_generator_v4_3_xst_1.ngc_xst.xrpt +utilities_xmdf::xmdfSetData $instance FileSet $fcount type AnyView +incr fcount + +utilities_xmdf::xmdfSetData $instance FileSet $fcount relative_path fifo_xlnx_512x36_2clk_18to36_xmdf.tcl +utilities_xmdf::xmdfSetData $instance FileSet $fcount type AnyView +incr fcount + +utilities_xmdf::xmdfSetData $instance FileSet $fcount associated_module fifo_xlnx_512x36_2clk_18to36 +incr fcount + +} + +# ::gen_comp_name_xmdf::xmdfApplyParams diff --git a/usrp2/coregen/fifo_xlnx_512x36_2clk_36to18.ngc b/usrp2/coregen/fifo_xlnx_512x36_2clk_36to18.ngc new file mode 100644 index 000000000..d76e4c3db --- /dev/null +++ b/usrp2/coregen/fifo_xlnx_512x36_2clk_36to18.ngc @@ -0,0 +1,3 @@ +XILINX-XDB 0.1 STUB 0.1 ASCII +XILINX-XDM V1.4e +$5ca4g<,[o}e~g`n;"2*413&;$>"9 > %0:?*rjx&Uhk"hffn]{hk~X=88s?;Q=cmi\73rh91$ekb?40493456712:;<=>?01274>6789:;<=>?0123456789:;<=>?0123456789:;<=>?0123456789:;<=>?0123454<80;0=>5>.130?46=AGZ^X7OKDSC?=?699o1:<7GAPTV9twi`Wlg{xtQ{hsgpl9?=878=7<>5IORVP?vugnUna}zv_ujqavnXizyn~y26:1<12>772@D[YY4rne\ahvsqV~c~h}g_ogdeqc;13:5=n5>0;MVPUSS2{nThlzn_bmvjq:>294:>6?9:HLSQQ112922?IR\Y__6IAN<0794;733821CXZ_UU8gkpr;9>0;2<5=2:0254=52@D[YY4KIQC?5?699;196B[[PTV9@JVF480;2<<4338JJUSS2MCI0>?50?30?64=G\^[YY4KOC>05?69<298>>?=;249MKVR\3nbb1=::1<1?6>c3:y9<=>ig575)07<<8;087GAPTV9@LVE4:0;2<<44;MVPUSS2ME[N1=50?3827=11=1=548;;7;B57=1M=138??>;868=56>:23=86796831?<;>586l231EC^ZT;rqkbYa}efTxe|jsi>;>585<231EC^ZT;rqkbYa}efTxe|jsi]bwvcu|521<3<;;88JJUSS2yxdkRhzlm]wlwct`Vdnklzj<983:4><13E^X][[:ecweZeh}g~747>11c9:>JSSX\^1{Qkauc\gjsi|521<364AEFQE96902KOH_O31?:8EABUI58546OKDSC?7;>GCL[K7;364AEFQE9>9i2KOH_O39;2=<>GCL[K75364AEFQF96902KOH_L31?:8EABUJ58546OKDS@?7;>GCL[H7;3o4AEFQF9>=8720MIJ]B=:==>GTQGIT^HI<;CW1<>DR[VCEJB?4C59@E=G53JO:>6MGEBI\HLEBFZOTXT^J2:AJ0>EKCH>0OAEM3:AOV<=DGDGBXYKK159@KWCXOLDN^LZFOO]JJCI03JXNMYKK1:F1?AO13MCJ0=08;EKB8469?2NBM1?>>69GMD:6:7=0HDO312<4?AOF48>556JFA=36>5803MCJ0<;16:FJE979>2NBM1<16:FJE959>2NBM1:16:FJE939>2NBM1816:FJE919>2NBM1616:FJE9?9>2NBN1>17:FJF9776>1OEO2>1?58@LD;9;4<7IGM<01=3>BNJ5;?2:5KIC>21;169GMG:617<0HDL31?58@LD;:94<7IGM<33=3>BNJ5892:5KIC>17;1908;EKA8739?2NBN1<9>69GMG:5?7=0HDL329<4?AOE4;35:6JFB=0=3>BNJ59;245KIC>05?69?2NBN1=>>79GMG:46?1OEO2;>79GMG:26?1OEO29>79GMG:06?1OEO27>79GMG:>6>1OE]O30?;8@LVF480;2:5KIQC?5;189GMUD;;3:5;6JFPC>0:3=CGH6;2:5KO@>24;169GKD:6<730HBO31483:2=CGH6:9384DNC?5;0384DNC?7;01OCO2>3?58@JD;9=4<7IAM<07=3>BHJ5;=2:5KOC>23;12NDN1?17:FLF9476>1OCO2=1?58@JD;:;4<7IAM<31=3>BHJ58?2:5KOC>11;1;08;EMA8719?2NDN1<7>69GKG:517<0HBL32?58@JD;;9427IAM<2394;119:FLTD:6294<7IA_A=3=3>BHXK6;2:5KOQ@?5;1@fdzo:7J=4GOF1?L653@;97D<=;H1;?LHN\YU;<55FNHVS[57?3@DBX]Q?299JJLRWW9937D@FTQ]30==NF@^[S=;7;HLJPUY7>11BBDZ__15:?LHN\Z^JXH94IOKW[5603@DBXR>>7:KMMQY7:>1BBDZP0258MKOSW9><7D@FT^263>OIA]U;::5FNHV\421?2CEEYQ?A69JJLRX8K=0ECG[_1A4?LHN\V:O;6GAIU]3A2=NF@^T7:KMMQY6:>1BBDZP1258MKOSW8><7D@FT^363>OIA]U:::5FNHV\521?2CEEYQ>A69JJLRX9K=0ECG[_0A4?LHN\V;O;6GAIU]2A2=NF@^T=K94IOKW[7603@DBXR<>7:KMMQY5:>1BBDZP2258MKOSW;><7D@FT^063>OIA]U9::5FNHV\621?2CEEYQ=A69JJLRX:K=0ECG[_3A4?LHN\V8O;6GAIU]1A2=NF@^T>K94IOKW[6603@DBXR=>7:KMMQY4:>1BBDZP3258MKOSW:><7D@FT^163>OIA]U8::5FNHV\72168;HLJPZ5>?2CEEYQ2F^X?QC4:NVP60JR\=UG96C\GNL6?HS_KPi0Ald`rWgqwliik2Gbbb|Yesqjkk4;;O3341=I998?7C??459M55343G;:86@>1968J47>;2D:>95A1327?K759=1E=?<;;O3171=I9;>?7C?=559M57033G;9;95A13:7?K751:1E=>:4N0130>H6;8>0B<==4:L27623468J451<2D:?:=4N060?K72;2D::>5A1618J4>43G;2?6@=029M645H50:1E>4=4N220?K56;2D8>>5A3218J6243G9>?6@<629M725;N08KN7UNEVID@AG\INL\GMCDC?1XCX\LE69PVSGKWH=0__XNL^@7?VUUI=1X__L;;U[SA64<]9%l~k }f.e`|+ekcq%Ftb|Pre]sjqtXojUsc>?01]Qavsk|8997X> gsd-vc)`kq$h`fv Mymq[wbXxg~ySjmPxnp3457XZly~`y?<2:W3+bta&{l$knv!cmi{+H~hzVxoS}`{r^e`[}iu89:9S_k|umv277=R8&myj#|i/fa{*fjlp&GscQ}d^rmpwY`kVrd~=>?3^Pfwpjs9:80Y=!hrg,qb*adp'iggu!Bxnp\vaYwf}xTknQwos2341YUmzgx<==;T2,cw`)zo%lou lljz,I}iuW{nT|cz}_fa\|jt789?T^h}zlu306>S7'nxm"h gbz-gim'Drd~R|k_qlwvZadWqey<=>9_Sgpqir6;;1^<"i}f/pe+be&jf`t"Cwos]q`Zvi|{UloRv`r1233ZTb{|f=><4U1-dvc(un&mht#mcky-N|jtXzmU{by|Pgb]{kw6781UYi~{ct011?P6(o{l%~k!hcy,`hn~(EqeySz|Ppovq[beXpfx;<=>PRdqvhq74:2_;#j|i.sd,cf~)keas#@v`r^uq[uhszVmhSua}0122[Wct}e~:??5Z0.eqb+ta'nis"nbdx.O{kwYpzVzexQhc^zlv567:VXnxb{1208Q5)`zo$yj"ilx/aoo})JpfxT{Qnup\cfYg{:;<>Q]erwop4553\:$kh!rg-dg}(ddbr$Aua}_vp\tkruWniTtb|?016\V`urd};8>6[?/fpe*w`(ojr%oaew/LzlvZquWyd~Ril_ymq4562W[oxyaz>339V4*aun'xm#jmw.bnh|*Kg{U|~R~ats]dgZ~hz9:;:R\jstnw564<]9%l~k }f.e`|+ekcq%Ftb|Pws]sjqtXojUsc>?06]Qavsk|88:7X> gsd-vc)`kq$h`fv re]sjqtXj`d7=3<>;T2,cw`)zo%lou lljz,vaYwf}xTnd`32?02?P6(o{l%~k!hcy,`hn~(zmU{by|Pbhl?7;463\:$kh!rg-dg}(ddbr$~iQnup\flh;<78:7X> gsd-vc)`kq$h`fv re]sjqtXj`d793<>;T2,cw`)zo%lou lljz,vaYwf}xTnd`36?02?P6(o{l%~k!hcy,`hn~(zmU{by|Pbhl?3;463\:$kh!rg-dg}(ddbr$~iQnup\flh;078:7X> gsd-vc)`kq$h`fv re]sjqtXj`d753 gsd-vc)`kq$h`fv re]sjqtXj`dT9?>4U1-dvc(un&mht#mcky-q`Zvi|{UiecQ9219V4*aun'xm#jmw.bnh|*tcWyd~Rlfn^514>S7'nxm"h gbz-gim'{nT|cz}_ckm[=473\:$kh!rg-dg}(ddbr$~iQnup\flhX1;<0Y=!hrg,qb*adp'iggu!}d^rmpwYeagUsc>?0104?P6(o{l%~k!hcy,`hn~(zmU{by|Pbhl\|jt789::>;5Z0.eqb+ta'nis"nbdx.pg[uhszVhbbRv`r123571<]9%l~k }f.e`|+ekcq%yhR~ats]amkYg{:;<1^<"i}f/pe+be&jf`t"|k_qlwvZdnfVrd~=>?2005?P6(o{l%~k!hcy,`hn~(zmU{by|Pbhl\|jt78999;6[?/fpe*w`(ojr%oaew/sf\tkruWkceSua}0120670<]9%l~k }f.e`|+ekcq%yhR~ats]amkYg{:;<9<8;T2,cw`)zo%lou lljz,vaYwf}xTnd`Pxnp34526:?1^<"i}f/pe+be&jf`t"|k_qlwvZdnfVrd~=>?5358Q5)`zo$yj"ilx/aoo})ulVzexQmio]{kw678<;9:6[?/fpe*w`(ojr%oaew/sf\tkruWkceSua}01256f=R8&myj#|i/fa{*fjlp&xoS}`{r^`jjZ~hz9:;:S7'nxm"h gbz-gim'{nT|cz}_ckm[}iu89:==;5Z0.eqb+ta'nis"nbdx.pg[uhszVhbbRv`r123371<]9%l~k }f.e`|+ekcq%yhR~ats]amkYg{:;<:?=0:W3+bta&{l$knv!cmi{+wbXxg~ySjm30?03?P6(o{l%~k!hcy,`hn~(zmU{by|Pgb>2:76<]9%l~k }f.e`|+ekcq%yhR~ats]dg949:91^<"i}f/pe+be&jf`t"|k_qlwvZad4:49<6[?/fpe*w`(ojr%oaew/sf\tkruWni783328Q5)`zo$yj"ilx/aoo})ulVzexQhc=4=65=R8&myj#|i/fa{*fjlp&xoS}`{r^e`828582_;#j|i.sd,cf~)keas#jPpovq[be;078;7X> gsd-vc)`kq$h`fv re]sjqtXoj622>f:W3+bta&{l$knv!cmi{+wbXxg~ySjmP10d8Q5)`zo$yj"ilx/aoo})ulVzexQhc^02b>S7'nxm"h gbz-gim'{nT|cz}_fa\74`<]9%l~k }f.e`|+ekcq%yhR~ats]dgZ26n2_;#j|i.sd,cf~)keas#jPpovq[beX=8l0Y=!hrg,qb*adp'iggu!}d^rmpwY`kV<:j6[?/fpe*w`(ojr%oaew/sf\tkruWniT;f:W3+bta&{l$knv!cmi{+wbXxg~ySjmP9348Q5)`zo$yj"ilx/aoo})ulVzexQhc^cpv`a;878=7X> gsd-vc)`kq$h`fv re]sjqtXojUjkh<0<12>S7'nxm"h gbz-gim'{nT|cz}_fa\evtbo585>;5Z0.eqb+ta'nis"nbdx.pg[uhszVmhSl}}ef>0:70<]9%l~k }f.e`|+ekcq%yhR~ats]dgZgtzlm783<9;T2,cw`)zo%lou lljz,vaYwf}xTknQnssgd8085>2_;#j|i.sd,cf~)keas#jPpovq[beXizxnk181279V4*aun'xm#jmw.bnh|*tcWyd~Ril_`qqab:06;<0Y=!hrg,qb*adp'iggu!}d^rmpwY`kVkx~hi38?05?P6(o{l%~k!hcy,`hn~(zmU{by|Pgb]bwwc`404996[?/fpe*w`(ojr%oaew/sf\tkruWniTm~|jg^211>S7'nxm"h gbz-gim'{nT|cz}_fa\evtboV;996[?/fpe*w`(ojr%oaew/sf\tkruWniTm~|jg^011>S7'nxm"h gbz-gim'{nT|cz}_fa\evtboV9996[?/fpe*w`(ojr%oaew/sf\tkruWniTm~|jg^611>S7'nxm"h gbz-gim'{nT|cz}_fa\evtboV?996[?/fpe*w`(ojr%oaew/sf\tkruWniTm~|jg^411>S7'nxm"h gbz-gim'{nT|cz}_fa\evtboV=996[?/fpe*w`(ojr%oaew/sf\tkruWniTm~|jg^:11>S7'nxm"h gbz-gim'{nT|cz}_fa\evtboV3956[?/fpe*w`(ojr%oaew/sf\tkruWniTm~|jg^f2848512_;#j|i.sd,cf~)keas#jPpovq[beXizxnkRj><3<1=>S7'nxm"h gbz-gim'{nT|cz}_fa\evtboVn:0>0=9:W3+bta&{l$knv!cmi{+wbXxg~ySjmParpfcZb64=4956[?/fpe*w`(ojr%oaew/sf\tkruWniTm~|jg^f2808512_;#j|i.sd,cf~)keas#jPpovq[beXizxnkRj><7<1=>S7'nxm"h gbz-gim'{nT|cz}_fa\evtboVn:0:0=9:W3+bta&{l$knv!cmi{+wbXxg~ySjmParpfcZb6414956[?/fpe*w`(ojr%oaew/sf\tkruWniTm~|jg^f28<8502_;#j|i.sd,cf~)keas#jPpovq[beXizxnkRj>_00;?P6(o{l%~k!hcy,`hn~(zmU{by|Pgb]bwwc`Wm;T>?64U1-dvc(un&mht#mcky-q`Zvi|{UloRo|rde\`4Y4:11^<"i}f/pe+be&jf`t"|k_qlwvZadWhyyijQk1^61<>S7'nxm"h gbz-gim'{nT|cz}_fa\evtboVn:S8<7;T2,cw`)zo%lou lljz,vaYwf}xTknQnssgd[a7X>;20Y=!hrg,qb*adp'iggu!}d^rmpwY`kVkx~hiPd0]46==R8&myj#|i/fa{*fjlp&xoS}`{r^e`[duumnUo=R6=8:W3+bta&{l$knv!cmi{+wbXxg~ySjmParpfcZb6W08>7X> gsd-vc)`kq$h`fv re]sjqtXojUsc>?0106?P6(o{l%~k!hcy,`hn~(zmU{by|Pgb]{kw67888>7X> gsd-vc)`kq$h`fv re]sjqtXojUsc>?0306?P6(o{l%~k!hcy,`hn~(zmU{by|Pgb]{kw678:8>7X> gsd-vc)`kq$h`fv re]sjqtXojUsc>?0506?P6(o{l%~k!hcy,`hn~(zmU{by|Pgb]{kw678<8>7X> gsd-vc)`kq$h`fv re]sjqtXojUsc>?0706?P6(o{l%~k!hcy,`hn~(zmU{by|Pgb]{kw678>8>7X> gsd-vc)`kq$h`fv re]sjqtXojUsc>?0902?P6(o{l%~k!hcy,`hn~({U{by|Pbhl?4;463\:$kh!rg-dg}(ddbr${Qnup\flh;978:7X> gsd-vc)`kq$h`fv ws]sjqtXj`d7>3<>;T2,cw`)zo%lou lljz,swYwf}xTnd`33?02?P6(o{l%~k!hcy,`hn~({U{by|Pbhl?0;463\:$kh!rg-dg}(ddbr${Qnup\flh;=78:7X> gsd-vc)`kq$h`fv ws]sjqtXj`d7:3<>;T2,cw`)zo%lou lljz,swYwf}xTnd`37?02?P6(o{l%~k!hcy,`hn~({U{by|Pbhl?<;473\:$kh!rg-dg}(ddbr${Qnup\flhX8;:0Y=!hrg,qb*adp'iggu!xr^rmpwYeagU:>=5Z0.eqb+ta'nis"nbdx.uq[uhszVhbbR<=0:W3+bta&{l$knv!cmi{+rtXxg~ySoga_203?P6(o{l%~k!hcy,`hn~({U{by|Pbhl\076<]9%l~k }f.e`|+ekcq%|~R~ats]amkY2:91^<"i}f/pe+be&jf`t"y}_qlwvZdnfV<9<6[?/fpe*w`(ojr%oaew/vp\tkruWkceS: gsd-vc)`kq$h`fv ws]sjqtXj`dTtb|?012263=R8&myj#|i/fa{*fjlp&}yS}`{r^`jjZ~hz9:;=?94U1-dvc(un&mht#mcky-tvZvi|{UiecQwos234475>2_;#j|i.sd,cf~)keas#z|Ppovq[goiWqey<=>=269V4*aun'xm#jmw.bnh|*quWyd~Rlfn^zlv567:88=7X> gsd-vc)`kq$h`fv ws]sjqtXj`dTtb|?01113>S7'nxm"h gbz-gim'~xT|cz}_ckm[}iu89:8>?84U1-dvc(un&mht#mcky-tvZvi|{UiecQwos2341403\:$kh!rg-dg}(ddbr${Qnup\flhXpfx;<=:>279V4*aun'xm#jmw.bnh|*quWyd~Rlfn^zlv567=;=0Y=!hrg,qb*adp'iggu!xr^rmpwYeagUsc>?04312>S7'nxm"h gbz-gim'~xT|cz}_ckm[}iu89:=>n5Z0.eqb+ta'nis"nbdx.uq[uhszVhbbRv`r123247X[^:9o6[?/fpe*w`(ojr%oaew/vp\tkruWkceSua}012554YT_88<7X> gsd-vc)`kq$h`fv ws]sjqtXj`dTtb|?014163=R8&myj#|i/fa{*fjlp&}yS}`{r^`jjZ~hz9:;;?94U1-dvc(un&mht#mcky-tvZvi|{UiecQwos23427582_;#j|i.sd,cf~)keas#z|Ppovq[be;878;7X> gsd-vc)`kq$h`fv ws]sjqtXoj6:2?>4U1-dvc(un&mht#mcky-tvZvi|{Ulo1<1219V4*aun'xm#jmw.bnh|*quWyd~Ril<2<14>S7'nxm"h gbz-gim'~xT|cz}_fa?0;473\:$kh!rg-dg}(ddbr${Qnup\cf:26;:0Y=!hrg,qb*adp'iggu!xr^rmpwY`k5<5>=5Z0.eqb+ta'nis"nbdx.uq[uhszVmh0:0=0:W3+bta&{l$knv!cmi{+rtXxg~ySjm38?3e?P6(o{l%~k!hcy,`hn~({U{by|Pgb]35c=R8&myj#|i/fa{*fjlp&}yS}`{r^e`[47a3\:$kh!rg-dg}(ddbr${Qnup\cfY59o1^<"i}f/pe+be&jf`t"y}_qlwvZadW:;m7X> gsd-vc)`kq$h`fv ws]sjqtXojU?=k5Z0.eqb+ta'nis"nbdx.uq[uhszVmhS8?i;T2,cw`)zo%lou lljz,swYwf}xTknQ91g9V4*aun'xm#jmw.bnh|*quWyd~Ril_63e?P6(o{l%~k!hcy,`hn~({U{by|Pgb];63=R8&myj#|i/fa{*fjlp&}yS}`{r^e`[duumn6;2?84U1-dvc(un&mht#mcky-tvZvi|{UloRo|rde?5;413\:$kh!rg-dg}(ddbr${Qnup\cfYf{{ol0?0=6:W3+bta&{l$knv!cmi{+rtXxg~ySjmParpfc959:?1^<"i}f/pe+be&jf`t"y}_qlwvZadWhyyij2;>348Q5)`zo$yj"ilx/aoo})pzVzexQhc^cpv`a;=78=7X> gsd-vc)`kq$h`fv ws]sjqtXojUjkh<7<12>S7'nxm"h gbz-gim'~xT|cz}_fa\evtbo5=5>;5Z0.eqb+ta'nis"nbdx.uq[uhszVmhSl}}ef>;:73<]9%l~k }f.e`|+ekcq%|~R~ats]dgZgtzlmT?;4U1-dvc(un&mht#mcky-tvZvi|{UloRo|rde\773<]9%l~k }f.e`|+ekcq%|~R~ats]dgZgtzlmT8?;4U1-dvc(un&mht#mcky-tvZvi|{UloRo|rde\173<]9%l~k }f.e`|+ekcq%|~R~ats]dgZgtzlmT:?;4U1-dvc(un&mht#mcky-tvZvi|{UloRo|rde\373<]9%l~k }f.e`|+ekcq%|~R~ats]dgZgtzlmT4?74U1-dvc(un&mht#mcky-tvZvi|{UloRo|rde\`4:76;30Y=!hrg,qb*adp'iggu!xr^rmpwY`kVkx~hiPd0>2:7?<]9%l~k }f.e`|+ekcq%|~R~ats]dgZgtzlmTh<2=>3;8Q5)`zo$yj"ilx/aoo})pzVzexQhc^cpv`aXl8682?74U1-dvc(un&mht#mcky-tvZvi|{UloRo|rde\`4:36;30Y=!hrg,qb*adp'iggu!xr^rmpwY`kVkx~hiPd0>6:7?<]9%l~k }f.e`|+ekcq%|~R~ats]dgZgtzlmTh<29>3;8Q5)`zo$yj"ilx/aoo})pzVzexQhc^cpv`aXl86<2?74U1-dvc(un&mht#mcky-tvZvi|{UloRo|rde\`4:?6;20Y=!hrg,qb*adp'iggu!xr^rmpwY`kVkx~hiPd0]36==R8&myj#|i/fa{*fjlp&}yS}`{r^e`[duumnUo=R?=8:W3+bta&{l$knv!cmi{+rtXxg~ySjmParpfcZb6W;837X> gsd-vc)`kq$h`fv ws]sjqtXojUjkh_e3\77><]9%l~k }f.e`|+ekcq%|~R~ats]dgZgtzlmTh85Z0.eqb+ta'nis"nbdx.uq[uhszVmhSua}012360=R8&myj#|i/fa{*fjlp&}yS}`{r^e`[}iu89::>85Z0.eqb+ta'nis"nbdx.uq[uhszVmhSua}012160=R8&myj#|i/fa{*fjlp&}yS}`{r^e`[}iu89:8>85Z0.eqb+ta'nis"nbdx.uq[uhszVmhSua}012760=R8&myj#|i/fa{*fjlp&}yS}`{r^e`[}iu89:>>85Z0.eqb+ta'nis"nbdx.uq[uhszVmhSua}012560=R8&myj#|i/fa{*fjlp&}yS}`{r^e`[}iu89:<>l5Z0.eqb+ta'nf;"j gs3-vcqa|&XJAR\K_DL\BR@S9;i0Y=!hrg,qb*ak8'xo#j|>.sdtbq)UIDUYHRKA_GUEP4Y6:j1^<"i}f/pe+bj7&{n$k?!rguep*TFEVXOSH@PFVDW5Z4512_;#j|i.sd,ci6)zm%l~< }fvdw+WGJW[OLCXZPEO307>S7'nxm"h gm2-va)`z8$yjzh{/bwqvZ`pn}Uxxlzj_GQN[C@c9:<0Y=!hrg,qb*ak8'xo#j|>.sdtbq)d}{xTjzh{_rvbp`YA[DUMJi?"Io1;?P6(o{l%~k!hl1,q`*au9'xm{kz ctpq[cqa|VymykPFRO\BCb6%@d:=>=4U1-dvc(un&mg<#|k/fp2*w`pn}%hy|Pfvdw[vrf|lUM_@QIFe002>S7'nxm"h gm2-va)`z8$yjzh{/bwqvZ`pn}Uxxlzj_GQN[C@c:$Ce?55Z0.eqb+ta'nf;"j gs3-vcqa|&i~~Qiwgv\wqgsmVLXARHId3/Jj47502_;#j|i.sd,ci6)zm%l~< }fvdw+`kw|pUm{kzPfc04?P6(o{l%~k!hl1,q`*au9'xm{kz elrw}Z`pn}Ub>h5Z0.eqb+ta'nf;"j gs3-vcqa|&of|ywPfvdw[lYhz9:;!re-dvdu)zz~x#n> c`pq}kcs494956[?/fpe*w`(oe:%~i!hr`q-vvrt'j:$ol|}yogw848512_;#j|i.sd,ci6)zm%l~l}!rrvp+f6(khxyuck{<3<1=>S7'nxm"h gm2-va)`zhy%~~z|/b2,gdtuqgo0>0=f:W3+bta&{l$ka>!re-dvdu)zz~x#n> glw{*bk\8T$la< b13d8Q5)`zo$yj"ic0/pg+btf{'xxx~!l0.enq}(`eR;V"jc|.lq1b>S7'nxm"h gm2-va)`zhy%~~z|/b2,chs&ngP>P hmr,nw7`<]9%l~k }f.eo4+tc'nxj#||tr-`4*aj}q$laV=R.fop*hu5n2_;#j|i.sd,ci6)zm%l~l}!rrvp+f6(ods"jcT4\,div(j{;90Y=!hrg,qb*ak8'xo#j|ns/pppv)d8&|:0=0=3:W3+bta&{l$ka>!re-dvdu)zz~x#n> v0>2:75<]9%l~k }f.eo4+tc'nxj#||tr-`4*p64;49?6[?/fpe*w`(oe:%~i!hr`q-vvrt'j:$z<2<>318Q5)`zo$yj"ic0/pg+btf{'xxx~!l0.t28185j2_;#j|i.sd,ci6)zm%l~l}!rrvp+f6(~8U;Sl`k012357d<]9%l~k }f.eo4+tc'nxj#||tr-`4*p6W8Ujbi>?0131f>S7'nxm"h gm2-va)`zhy%~~z|/b2,r4Y5Whdo<=>?13`8Q5)`zo$yj"ic0/pg+btf{'xxx~!l0.t2[6Yffm:;<=?=b:W3+bta&{l$ka>!re-dvdu)zz~x#n> v0]7[dhc89:;=?74U1-dvc(un&mg<#|k/fpbw+tt|z%h="mnrs{maq:76;30Y=!hrg,qb*ak8'xo#j|ns/pppv)d9&ij~waeu>2:7?<]9%l~k }f.eo4+tc'nxj#||tr-`5*efz{seiy2=>3;8Q5)`zo$yj"ic0/pg+btf{'xxx~!l1.abvwim}682?h4U1-dvc(un&mg<#|k/fpbw+tt|z%h="ibuy,di^6Z&ng:"`?=f:W3+bta&{l$ka>!re-dvdu)zz~x#n? glw{*bk\9T$la~ bs3d8Q5)`zo$yj"ic0/pg+btf{'xxx~!l1.enq}(`eR8V"jc|.lq1b>S7'nxm"h gm2-va)`zhy%~~z|/b3,chs&ngP?P hmr,nw7`<]9%l~k }f.eo4+tc'nxj#||tr-`5*aj}q$laV:R.fop*hu5;2_;#j|i.sd,ci6)zm%l~l}!rrvp+f7(~86;2?=4U1-dvc(un&mg<#|k/fpbw+tt|z%h="x><0<17>S7'nxm"h gm2-va)`zhy%~~z|/b3,r4:56;90Y=!hrg,qb*ak8'xo#j|ns/pppv)d9&|:0>0=3:W3+bta&{l$ka>!re-dvdu)zz~x#n? v0>7:7d<]9%l~k }f.eo4+tc'nxj#||tr-`5*p6W9Ujbi>?0131f>S7'nxm"h gm2-va)`zhy%~~z|/b3,r4Y6Whdo<=>?13`8Q5)`zo$yj"ic0/pg+btf{'xxx~!l1.t2[7Yffm:;<=?=b:W3+bta&{l$ka>!re-dvdu)zz~x#n? v0]0[dhc89:;=?l4U1-dvc(un&mg<#|k/fpbw+tt|z%h="x>_5]bja6789;9<6[?/fpe*w`(oe:%~i!hr`q-vvrt'jef|=>4U1-dvc(un&mg<#|k/fpbw+tt|z%ym`Qjmqvz[cdXaVey<=>?309V4*aun'xm#jb?.sf,cwgt&{y"|nm^gntqXnkUbSb|?012266=R8&myj#|i/fn3*wb(zyd~"Clotlw[firf}8?7X> gsd-vc)`d9$yh"|nup,Ifirf}Uhcx`{1368Q5)`zo$yj"ic0/pg+wvi|{%Fob{at^alqkr5:=1^<"i}f/pe+bj7&{n$~}`{r.O`kphsWje~by==4:W3+bta&{l$ka>!re-qtkru'DidyczPcnwmp1433\:$kh!rg-dh5(ul&x{by| MbmvjqYdg|d9?:4U1-dvc(un&mg<#|k/srmpw)JkfexRm`uov561=R8&myj#|i/fn3*wb(zyd~"Clotlw[firf}=986[?/fpe*w`(oe:%~i!}povq+Heh}g~Tob{at907?P6(o{l%~k!hl1,q`*twf}x$Anaznu]`kphs1;30Y=!hrg,qb*ak8'xo#~ats-Ngjsi|VidyczPcx>3:7e<]9%l~k }f.eo4+tc'{zex!BcnwmpZeh}g~Tot2?>^pw6<=R8&myj#|i/fn3*wb(zyd~"Clotlw[firf}Uhu1?12b9V4*aun'xm#jb?.sf,vuhsz&Ghcx`{_bmvjqYdq5;5Sz=9:W3+bta&{l$ka>!re-qtkru'DidyczPcnwmpZe~4;49o6[?/fpe*w`(oe:%~i!}povq+Heh}g~Tob{at^az878Xz}827X> gsd-vc)`d9$yh"|nup,Ifirf}Uhcx`{_b{?7;4d3\:$kh!rg-dh5(ul&x{by| MbmvjqYdg|dSnw33?]qp7?<]9%l~k }f.eo4+tc'{zex!BcnwmpZeh}g~Tot2;>3a8Q5)`zo$yj"ic0/pg+wvi|{%Fob{at^alqkrXkp6?2R|{289V4*aun'xm#jb?.sf,vuhsz&Ghcx`{_bmvjqYdq5?5>n5Z0.eqb+ta'nf;"j rqlwv*Kdg|dSnaznu]`}939W{~956[?/fpe*w`(oe:%~i!}povq+Heh}g~Tob{at^az8385k2_;#j|i.sd,ci6)zm%y|cz}/LalqkrXkfexRmv<7<\vq4>3\:$kh!rg-dh5(ul&x{by| MbmvjqYdg|dSnw37?0`?P6(o{l%~k!hl1,q`*twf}x$Anaznu]`kphsWjs7;3Q}t3;8Q5)`zo$yj"ic0/pg+wvi|{%Fob{at^alqkrXkp632?m4U1-dvc(un&mg<#|k/srmpw)JkfexRm`uov\g|:?6Vx>l5Z0.eqb+ta'nf;"j rqlwv*Kdg|dSnaznu]{kw:76;k0Y=!hrg,qb*ak8'xo#~ats-Ngjsi|VidyczPxnp?5;4f3\:$kh!rg-dh5(ul&x{by| MbmvjqYdg|dSua}<3<1e>S7'nxm"h gm2-va)uxg~y#@m`uov\gjsi|Vrd~1=12`9V4*aun'xm#jb?.sf,vuhsz&Ghcx`{_bmvjqYg{6?2?o4U1-dvc(un&mg<#|k/srmpw)JkfexRm`uov\|jt;=78j7X> gsd-vc)`d9$yh"|nup,Ifirf}Uhcx`{_ymq8385i2_;#j|i.sd,ci6)zm%y|cz}/LalqkrXkfexRv`r=5=6d=R8&myj#|i/fn3*wb(zyd~"Clotlw[firf}Usc27>3c8Q5)`zo$yj"ic0/pg+wvi|{%Fob{at^alqkrXpfx75311g9V4*aun'xm#jb?.sf,vuhsz&idycz31?3e?P6(o{l%~k!hl1,q`*twf}x$ob{at=0=5c=R8&myj#|i/fn3*wb(zyd~"m`uov?7;7a3\:$kh!rg-dh5(ul&x{by| cnwmp9299o1^<"i}f/pe+bj7&{n$~}`{r.alqkr;=7;m7X> gsd-vc)`d9$yh"|nup,gjsi|5<5=k5Z0.eqb+ta'nf;"j rqlwv*eh}g~7;3?i;T2,cw`)zo%l`= }d.psjqt(kfex1611g9V4*aun'xm#jb?.sf,vuhsz&idycz39?3f?P6(o{l%~k!hl1,q`*twf}x$ob{at^22a>S7'nxm"h gm2-va)uxg~y#naznu]25`=R8&myj#|i/fn3*wb(zyd~"m`uov\64c<]9%l~k }f.eo4+tc'{zex!lotlw[67b3\:$kh!rg-dh5(ul&x{by| cnwmpZ26m2_;#j|i.sd,ci6)zm%y|cz}/bmvjqY29l1^<"i}f/pe+bj7&{n$~}`{r.alqkrX>8o0Y=!hrg,qb*ak8'xo#~ats-`kphsW>;n7X> gsd-vc)`d9$yh"|nup,gjsi|V2:i6[?/fpe*w`(oe:%~i!}povq+firf}U2>?5Z0.eqb+ta'nf;"j rqlwv*eh}g~Th<2?>308Q5)`zo$yj"ic0/pg+wvi|{%hcx`{_e3?5;453\:$kh!rg-dh5(ul&x{by| cnwmpZb64;49>6[?/fpe*w`(oe:%~i!}povq+firf}Uo=1=1239V4*aun'xm#jb?.sf,vuhsz&idyczPd0>7:74<]9%l~k }f.eo4+tc'{zex!lotlw[a7;=7897X> gsd-vc)`d9$yh"|nup,gjsi|Vn:0;0=2:W3+bta&{l$ka>!re-qtkru'je~byQk1=5=67=R8&myj#|i/fn3*wb(zyd~"m`uov\`4:?6;80Y=!hrg,qb*ak8'xo#~ats-`kphsWm;753<>;T2,cw`)zo%l`= }d.psjqt(kfexRj>_102?P6(o{l%~k!hl1,q`*twf}x$ob{at^f2[4463\:$kh!rg-dh5(ul&x{by| cnwmpZb6W;8:7X> gsd-vc)`d9$yh"|nup,gjsi|Vn:S><>;T2,cw`)zo%l`= }d.psjqt(kfexRj>_502?P6(o{l%~k!hl1,q`*twf}x$ob{at^f2[0463\:$kh!rg-dh5(ul&x{by| cnwmpZb6W?8:7X> gsd-vc)`d9$yh"|nup,gjsi|Vn:S:<>;T2,cw`)zo%l`= }d.psjqt(kfexRj>_902?P6(o{l%~k!hl1,q`*twf}x$ob{at^f2[<4>3\:$kh!rg-dh5(pz&m|m~ xsuq,g4)di{xrbhz30?0:?P6(o{l%~k!hl1,tv*apiz$|y} c0-`ewt~fl~7=3<6;T2,cw`)zo%l`= xr.etev(p{}y$o gsd-vc)`d9$|~"ixar,twqu(k8%hm|vndv?7;4a3\:$kh!rg-dh5(pz&m|m~ xsuq,g4)`e|r%k`U?]/en5+k6:o1^<"i}f/pe+bj7&~x$kzo|.vqww*e6'ng~t#ib[0_-chu)ez8m7X> gsd-vc)`d9$|~"ixar,twqu(k8%laxv!glY1Y+aj{'gx>k5Z0.eqb+ta'nf;"z| gvcp*rus{&i:#jczx/en_6[)ody%a~/w3?4;443\:$kh!rg-dh5(pz&m|m~ xsuq,g4)q95;5>>5Z0.eqb+ta'nf;"z| gvcp*rus{&i:#{?32?00?P6(o{l%~k!hl1,tv*apiz$|y} c0-u5959::1^<"i}f/pe+bj7&~x$kzo|.vqww*e6';783o5Z0.eqb+ta'nf;"z| gvcp*rus{&i:#{?P1^cm`567888i7X> gsd-vc)`d9$|~"ixar,twqu(k8%}=RTbbz?01226<=R8&myj#|i/fn3*rt(o~kx"z}{s.a1+fguzpdnx1>1289V4*aun'xm#jb?.vp,crgt&~y"m=/bcqv|hb|5;5>45Z0.eqb+ta'nf;"z| gvcp*rus{&i9#no}rxlfp949:01^<"i}f/pe+bj7&~x$kzo|.vqww*e5'jky~t`jt=1=6c=R8&myj#|i/fn3*rt(o~kx"z}{s.a1+bkrp'mfW=S!gl3-i44a3\:$kh!rg-dh5(pz&m|m~ xsuq,g7)`e|r%k`U>]/enw+kt:o1^<"i}f/pe+bj7&~x$kzo|.vqww*e5'ng~t#ib[3_-chu)ez8m7X> gsd-vc)`d9$|~"ixar,twqu(k;%laxv!glY0Y+aj{'gx>k5Z0.eqb+ta'nf;"z| gvcp*rus{&i9#jczx/en_1[)ody%a~<<;T2,cw`)zo%l`= xr.etev(p{}y$o?!y1=2=66=R8&myj#|i/fn3*rt(o~kx"z}{s.a1+s7;97887X> gsd-vc)`d9$|~"ixar,twqu(k;%}=1<1229V4*aun'xm#jb?.vp,crgt&~y"m=/w3?7;443\:$kh!rg-dh5(pz&m|m~ xsuq,g7)q95>5>o5Z0.eqb+ta'nf;"z| gvcp*rus{&i9#{?P0^cm`567888i7X> gsd-vc)`d9$|~"ixar,twqu(k;%}=R?Paof34566:k1^<"i}f/pe+bj7&~x$kzo|.vqww*e5';T>Road123444e3\:$kh!rg-dh5(pz&m|m~ xsuq,g7)q9V9Tmcj?01226g=R8&myj#|i/fn3*rt(o~kx"z}{s.a1+s7X?0003?P6(o{l%~k!hl1,tv*apiz$|y} cnos576<]9%l~k }f.eo4+qu'n}j#y|tr-`khv5:11^<"i}f/pe+bj7&~x$kzo|.vqww*tfeVl~`aQib^k11>S7'nxm"h gm2-sw)`hy%{~z|/scn[cskdVc9o6[?/fpe*w`(oe:%{!hw`q-svrt'{kfSk{cl^k\kw67898o7X> gsd-vc)`d9$|~"ixar,twqu(zhgTjxbc_h]lv56788;o7X> gsd-vc)`d9$|~"|nm^uq[`hXa8887X> gsd-vc)`d9$|~"ynup,Ifirf}Uhcx`{259V4*aun'xm#jb?.vp,suhsz&Ghcx`{_bmvjq75<2_;#j|i.sd,ci6){%||cz}/LalqkrXkfex?<;;T2,cw`)zo%l`= xr.usjqt(Eje~byQlotlw772<]9%l~k }f.eo4+qu'~zex!BcnwmpZeh}g~?>95Z0.eqb+ta'nf;"z| wqlwv*Kdg|dSnaznu710>S7'nxm"h gm2-sw)pxg~y#@m`uov\gjsi|?8?7X> gsd-vc)`d9$|~"ynup,Ifirf}Uhcx`{7368Q5)`zo$yj"ic0/uq+rvi|{%Fob{at^alqkr?:01^<"i}f/pe+bj7&~x${}`{r.O`kphsWje~byQly=2=6f=R8&myj#|i/fn3*rt(yd~"Clotlw[firf}Uhu1>1_sv1=>S7'nxm"h gm2-sw)pxg~y#@m`uov\gjsi|Vir0<0=c:W3+bta&{l$ka>!ws-ttkru'DidyczPcnwmpZe~484T~y<6;T2,cw`)zo%l`= xr.usjqt(Eje~byQlotlw[f;:78h7X> gsd-vc)`d9$|~"ynup,Ifirf}Uhcx`{_b{?6;Yu|;30Y=!hrg,qb*ak8'}y#z~ats-Ngjsi|VidyczPcx>0:7e<]9%l~k }f.eo4+qu'~zex!BcnwmpZeh}g~Tot2<>^pw6<=R8&myj#|i/fn3*rt(yd~"Clotlw[firf}Uhu1:12b9V4*aun'xm#jb?.vp,suhsz&Ghcx`{_bmvjqYdq5>5Sz=9:W3+bta&{l$ka>!ws-ttkru'DidyczPcnwmpZe~4<49o6[?/fpe*w`(oe:%{!xpovq+Heh}g~Tob{at^az808Xz}827X> gsd-vc)`d9$|~"ynup,Ifirf}Uhcx`{_b{?2;4d3\:$kh!rg-dh5(pz&}{by| MbmvjqYdg|dSnw36?]qp7?<]9%l~k }f.eo4+qu'~zex!BcnwmpZeh}g~Tot28>3a8Q5)`zo$yj"ic0/uq+rvi|{%Fob{at^alqkrXkp6<2R|{2`9V4*aun'xm#jb?.vp,suhsz&Ghcx`{_bmvjqYg{6;2?o4U1-dvc(un&mg<#y}/vrmpw)JkfexRm`uov\|jt;978j7X> gsd-vc)`d9$|~"ynup,Ifirf}Uhcx`{_ymq8785i2_;#j|i.sd,ci6){%||cz}/LalqkrXkfexRv`r=1=6d=R8&myj#|i/fn3*rt(yd~"Clotlw[firf}Usc2;>3c8Q5)`zo$yj"ic0/uq+rvi|{%Fob{at^alqkrXpfx793;:7b<]9%l~k }f.eo4+qu'~zex!BcnwmpZeh}g~Ttb|38?]qp4`<]9%l~k }f.eo4+qu'~zex!lotlw8586n2_;#j|i.sd,ci6){%||cz}/bmvjq:668l0Y=!hrg,qb*ak8'}y#z~ats-`kphs4;4:j6[?/fpe*w`(oe:%{!xpovq+firf}682f:W3+bta&{l$ka>!ws-ttkru'je~by2:>0d8Q5)`zo$yj"ic0/uq+rvi|{%hcx`{<7<2b>S7'nxm"h gm2-sw)pxg~y#naznu>4:4`<]9%l~k }f.eo4+qu'~zex!lotlw8=86m2_;#j|i.sd,ci6){%||cz}/bmvjqY79l1^<"i}f/pe+bj7&~x${}`{r.alqkrX98o0Y=!hrg,qb*ak8'}y#z~ats-`kphsW;;n7X> gsd-vc)`d9$|~"ynup,gjsi|V9:i6[?/fpe*w`(oe:%{!xpovq+firf}U?=h5Z0.eqb+ta'nf;"z| wqlwv*eh}g~T9e:W3+bta&{l$ka>!ws-ttkru'je~byQ7239V4*aun'xm#jb?.vp,suhsz&idyczPd0>3:74<]9%l~k }f.eo4+qu'~zex!lotlw[a7;97897X> gsd-vc)`d9$|~"ynup,gjsi|Vn:0?0=2:W3+bta&{l$ka>!ws-ttkru'je~byQk1=1=67=R8&myj#|i/fn3*rt(yd~"m`uov\`4:36;80Y=!hrg,qb*ak8'}y#z~ats-`kphsWm;793<=;T2,cw`)zo%l`= xr.usjqt(kfexRj><7<16>S7'nxm"h gm2-sw)pxg~y#naznu]g5919:;1^<"i}f/pe+bj7&~x${}`{r.alqkrXl8632??4U1-dvc(un&mg<#y}/vrmpw)dg|dSi?P0338Q5)`zo$yj"ic0/uq+rvi|{%hcx`{_e3\577<]9%l~k }f.eo4+qu'~zex!lotlw[a7X:;;0Y=!hrg,qb*ak8'}y#z~ats-`kphsWm;T???4U1-dvc(un&mg<#y}/vrmpw)dg|dSi?P4338Q5)`zo$yj"ic0/uq+rvi|{%hcx`{_e3\177<]9%l~k }f.eo4+qu'~zex!lotlw[a7X>;;0Y=!hrg,qb*ak8'}y#z~ats-`kphsWm;T;??4U1-dvc(un&mg<#y}/vrmpw)dg|dSi?P8308Q5)`zo$yj"ic0/uq+rvi|{%hcx`{_e0?4;453\:$kh!rg-dh5(pz&}{by| cnwmpZb54849>6[?/fpe*w`(oe:%{!xpovq+firf}Uo>1<1239V4*aun'xm#jb?.vp,suhsz&idyczPd3>0:74<]9%l~k }f.eo4+qu'~zex!lotlw[a4;<7897X> gsd-vc)`d9$|~"ynup,gjsi|Vn9080=2:W3+bta&{l$ka>!ws-ttkru'je~byQk2=4=67=R8&myj#|i/fn3*rt(yd~"m`uov\`7:06;80Y=!hrg,qb*ak8'}y#z~ats-`kphsWm8743<>;T2,cw`)zo%l`= xr.usjqt(kfexRj=_102?P6(o{l%~k!hl1,tv*qwf}x$ob{at^f1[4463\:$kh!rg-dh5(pz&}{by| cnwmpZb5W;8:7X> gsd-vc)`d9$|~"ynup,gjsi|Vn9S><>;T2,cw`)zo%l`= xr.usjqt(kfexRj=_502?P6(o{l%~k!hl1,tv*qwf}x$ob{at^f1[0463\:$kh!rg-dh5(pz&}{by| cnwmpZb5W?8:7X> gsd-vc)`d9$|~"ynup,gjsi|Vn9S:<>;T2,cw`)zo%l`= xr.usjqt(kfexRj=_935?P6(o{l%~k!bel-gkprXaV:::6[?/fpe*w`(elg$hb{{_h]252=R8&myj#|i/lgn+air|VcT==?8;T2,cw`)zo%fi`!kotv\mZ769>1^<"i}f/pe+hcj'me~xRgP1334?P6(o{l%~k!bel-gkprXaV;8=:5Z0.eqb+ta'dof#iazt^k\51703\:$kh!rg-nah)cg|~TeR?:169V4*aun'xm#`kb/emvpZoX9?;<7X> gsd-vc)jmd%ocxzPi^3453=R8&myj#|i/lgn+air|VcT><84U1-dvc(un&gna"j`uu]j[6713\:$kh!rg-nah)cg|~TeR:>6:W3+bta&{l$ahc dnww[lY29?1^<"i}f/pe+hcj'me~xRgP6048Q5)`zo$yj"cjm.flqqYnW>;=7X> gsd-vc)jmd%ocxzPi^:22>S7'nxm"h mdo,`jssW`U2=45Z0.eqb+ta'dof#iazt^ofi9699h1^<"i}f/pe+hcj'me~xRcjm=33:4g<]9%l~k }f.ofi*bh}}Ufi`2>1?3b?P6(o{l%~k!bel-gkprXelg7=?0>a:W3+bta&{l$ahc dnww[hcj4895=l5Z0.eqb+ta'dof#iazt^ofi97368k0Y=!hrg,qb*kbe&ndyyQbel>21;7f3\:$kh!rg-nah)cg|~Tahc317<2e>S7'nxm"h mdo,`jssWdof0<91189V4*aun'xm#`kb/emvpZkbe5;5=45Z0.eqb+ta'dof#iazt^ofi949901^<"i}f/pe+hcj'me~xRcjm=1=5<=R8&myj#|i/lgn+air|Vgna1:1189V4*aun'xm#`kb/emvpZkbe5?5=45Z0.eqb+ta'dof#iazt^ofi909901^<"i}f/pe+hcj'me~xRcjm=5=5<=R8&myj#|i/lgn+air|Vgna161189V4*aun'xm#`kb/emvpZkbe535:h5Z0.eqb+ta'dof#jlb.f`nc+aeenk%bjklc/`nc*dkcVgnaRijndpbpjt(~hfbh#m|ts-qehjhgyQ;Q#|nm/p,r7Yig`dbx#|nm.fs73~60'xja gsd-vc)uidUyhRka169V4*aun'xm#ob_sgdkprXmg;87X> gsd-vc)uidU|~Rka1e9V4*aun'xm#}{bmi,vaYu{}Ujkh219V4*aun'xm#}{bmi,vaYu{}Ujkh_e314>S7'nxm"h rrvahn)ulVxxxRo|rde\`77d3\:$kh!rg-qwqdkc&xoS}{_bmnf4b<]9%l~k }f.pppgjl'{nT~~zPcnoa54c<]9%l~k }f.pppgjl'{nT~~zPrde?4;7b3\:$kh!rg-qwqdkc&xoS}{_sgd8486m2_;#j|i.sd,vvredb%yhR||t^pfc9499m1^<"i}f/pe+wusjea$~iQ}su]qabY79m1^<"i}f/pe+wusjea$~iQ}su]qabY69m1^<"i}f/pe+wusjea$~iQ}su]qabY59m1^<"i}f/pe+wusjea${Q}su]bwwc`:91^<"i}f/pe+wusjea${Q}su]bwwc`Wm;9<6[?/fpe*w`(zz~i`f!xr^pppZgtzlmTh??l;T2,cw`)zo%yylck.uq[wusWjefnd:W3+bta&{l$~~zmlj-tvZtt|VxnkR>>d:W3+bta&{l$~~zmlj-tvZtt|VxnkR?n;TQFVZGKAHYh7X]JR^TJWLDKM:1]ON74VHGT[Q_WM:1\IL=4WD@a?RTN\LUME_][c:UQMQCXEFNNSLm4WSKWAZKHLLUI=i5WIMKM\(^CJ):%=-][UC"3*4&F[JCB96V@RB[5?]USD@H<7U][_FLG3>^T\V\HOo5W_BMQAZOINF<0TilPIed8\anXX{cfZh||inl24>^ceVGjfb|Yesqjkk773QnfS@gaosTfvvohfj1j``a|t^gntqe3hffc~zPftno2>dfkb{h6lncjws[hguclx87nbdd:fbpdYdg|d$='k;ecweZeh}g~#=$j4d`vb[firf}"9%i5kauc\gjsi|!9"h6jnt`]`kphs =#o7io{a^alqkr/= n0hlzn_bmvjq.1!m1omyoPcnwmp-1.l2njxlQlotlw,=/a3mkmRm`uov?)69gmk.68 =0hd`'10+4?aoi 88";6jfn)30-2=cag":8$94dhl+50/03mce$<8&7:fjj-70!>1oec&>8(58`lh/90#=7iga(3+4?aoi ;:";6jfn)02-2=cag"9>$94dhl+66/03mce$?:&7:fjj-42!>1oec&=6(58`lh/:>#<7iga(3:*3>bnf!82%;5kio*0-2=cag"8<$94dhl+74/03mce$><&7:fjj-54!>1oec&<4(58`lh/;<#=7iga(5+5?aoi <#=7iga(7+5?aoi >#=7iga(9+5?aoi 0#=7iga<1<4?aoi48:5;6jfn=32:2=cag6:>394dhl?56803mce0<:17:fjj9726>1oec2>6?58`lh;9>4<7iga<0:=3>bnf5;22;5kio>2:2=cag69<394dhl?64803mce0?<17:fjj9446>1oec2=4?58`lh;:<4<7iga<34=3>bnf58<2:5kio>1<;1409;ekm87803mce0>>17:fjj9566>1oec2<2?58`lh;;:4<7iga<26==>bnf59>6=08;ekm8639>2nbb1=16:fjj929>2nbb1;16:fjj909>2nbb1916:fjj9>9>2nbb1717:flqq.7!>1ocxz'1(:8`jss 8:"46j`uu*25,>bh}}":9$64dnww,40.02ndyy&>7(58`jss ;#<7iazt)1*3>bh}}"?%:5kotv+1,199gkpr;9:437iazt=37:==cg|~7=807;emvp9716h1ocxz31683:==cg|~7=:08;emvp979?2ndyy2=>69gkpr;;7=0hb{{<5<4?air|5?5;6j`uu>5:2=cg|~7;394dnww8=803me~x1718:ggmc4iom?0i`~{y208bl`hWnoeio{os]u0Z5+(Qcgecv/CNPF$Bcim{kc.>0/3-467d3ocmcRvcny]657~4>V8h`fQ<6um2<6g`nnfUs`cvP500{73Y5keaT?;z`19.emciXoldn~lz`r^t7[6*|kVbjRgat^aoo86+kVbjR}}su?3(fYulVlyi|3>,b]kevYulVnjxlQlotlw95*dWmceSzgkti?02)eX`hyT{Qkauc\gjsi|4:'oRhzlm]ehdatW{yS{oc=1.`[lkwdlgnbyo{inl\p|vb5;&hSx}j_doaaabblVxnk0>#c^uq[ctby4;'oR{|e^flqqYu{}7: nQznegqbiipWee|1="l_icp[jpbzofd{0>#c^rqaiiflVfjxh`ly<2/gZbh}}U|eizg=0:/gZktofdTzlb21-a\vaYcmy~c1<>=4-a\lduX}gnn~kb`w<2/gZnf{Vkgab}{_gwoh86+kVbjR||t<3/gZbf|hUhcx`{_vkgpm;>$jUcm~Qxr^c`o86+kVxiRklc<2/gZehedeeSnb`cj?3(fYpzVkhgRb`w<2/gZtcWyd~Ryfduj>55*dW|ynSkyit^fbpdYdg|d1="l_icp[djjgz~Ti`~{y<2/gZtcWmkmRm`uov\slbs`4;; nQ`vdpehjqXdf}62-a\twi`Wlg{xtQ{hsgplZhboh~nS{oc=4.`[uthoVof|ywPtipfwmYf{zoyxRxnl<6/gZnf{V|j`dj20-a\twi`Wog`Rzgrdqk[dutm{~Tzlb251;/gjkwggoexR`nmd?emciXpedsS8?=x24\6fjlW:<c<6#c^tbhlbXdf}6T?Rv|t^37?cskd>1bbyQllj:8jbee}`fo46ayesdokrg0|ah_dosp|Ys`{oxd%?&159svjaXmdzuRzgrdqk,7/6<2zycjQjmqvz[qnumzb#?$?;;qplcZcjx}sTxe|jsi*7-42vugnUna}zv_ujqavn/? ;?7}|`g^gntqX|axne&7)068twi`Wlg{xtQ{hsgpl-?.9?1{~biPelrw}Zrozlyc044?>0`8twi`Wlg{xtQ{hsgplZgt{lx$='>b:rqkbYbey~rSyf}erj\evubz}":%vugnUna}zv_ujqavnXizyn~y&8)0`8twi`Wlg{xtQ{hsgplZgt{lx$5'>b:rqkbYbey~rSyf}erj\evubz}"2%vugnUna}zv_ujqavnXflmjxh&:)0`8twi`Wlg{xtQ{hsgplZhboh~n$;'>b:rqkbYbey~rSyf}erj\j`af|l"<%!8n0|ah_dosp|Ys`{oxdR`jg`vf8<<7601{~biPftno56=wzfmTjxbc_ujqavn/8 ;87}|`g^dvhiYs`{oxd%?&129svjaXn|fgSyf}erj+6,743yxdkRhzlm]wlwct`!9"=>5rne\bpjkW}byi~f'4(30?uthoVl~`aQ{hsgpl-3.9:1{~biPftno[qnumzb#:$?<;qplcZ`rdeUdk|h)5*56=wzfmTjxbc_ujqavn/0 ;>7}|`g^dvhiYs`{oxd1650?3b?uthoVl~`aQ{hsgplZgt{lx$='>a:rqkbYa}efTxe|jsi]bwvcu|!;"=l5rne\bpjkW}byi~fParqfvq.5!8k0|ah_gwohZrozlycSl}|esv+7,7f3yxdkRhzlm]wlwct`Vkxh|{(5+2e>vugnUmyabPtipfwmYf{zoyx%;&1`9svjaXn|fgSyf}erj\evubz}"=%vugnUmyabPtipfwmYimnki%?&1`9svjaXn|fgSyf}erj\j`af|l"9%=87<0~iQllj33?wbXlh~jSnaznu*3-464re]geqgXkfex%7&119q`Zbf|hUhcx`{<1<26>tcWmkmRm`uov?=?69=2xoSh`9;sf\vvr43{y;6}miugqv1=tzz~?7y|ze89vjacunee|96xnlhf5?rtXija=7z|Pcmi24>quWmkmRm`uov+4,773~xThlzn_bmvjq.6!8:0{Qkauc\gjsi|!8"==5xr^fbpdYdg|d$>'>0:uq[agsiVidycz'4(33?rtXlh~jSnaznu*6-46<{UomyoPcnwmp-0.991|~Rjnt`]`kphs >#:<6y}_ecweZeh}g~#4$?=;vp\`drfWje~by27:1<6?rtXmg<0{Q}suCDug0k2JKt<4I:582V372=9h654>33`5gd<40?;2wc=mc;38j6dc2=1/?oo53c68yV2b2=9h654>33`5gd<40?;27^?=6;671?6=9:8i:no53942f>U3m3>?97>5120a2fg=;1<:n6j;3g83>4<6sZ?;69=l:98277d1kh084;?6;wV23c<7280:6<8m{R73>15d210:??l9c`80<37>3-9ji7?=7:T0fg<5s|;8=7?4u011>5=z,8=<65<4l391?iuG3`a8^13=:r;;6<65}%3;0?24n2.8n44;3d9j0<3=831b8l750;9l015=831d8>j50;9j0=821d8=:21d8=<21d8=>21d8<750;&23<<3;81e=:657:9l07>=83.:;44;309m52>=021d8?950;&23<<3;81e=:659:9l070=83.:;44;309m52>=i21d8?;50;&23<<3;81e=:65b:9l072=83.:;44;309m52>=k21d8?=50;&23<<3;81e=:65d:9l074=83.:;44;309m52>=m21d8??50;&23<<3;81e=:65f:9l04>=83.:;44;309m52>=9910c9?8:18'52?=<:;0b<97:038?l5bj3:1(<96:52f?k7003:07d=ja;29 41>2=:n7c?88;38?l5b13:1(<96:52f?k7003807d=j8;29 41>2=:n7c?88;18?l5b?3:1(<96:52f?k7003>07d=j6;29 41>2=:n7c?88;78?l5b<3:1(<96:52f?k7003<07d=j3;29 41>2=:n7c?88;58?l5b:3:1(<96:52f?k7003207d=j1;29 41>2=:n7c?88;;8?l5b83:1(<96:52f?k7003k07d=kf;29 41>2=:n7c?88;`8?l5cm3:1(<96:52f?k7003i07d=kd;29 41>2=:n7c?88;f8?l5ck3:1(<96:52f?k7003o07d=kb;29 41>2=:n7c?88;d8?l5c13:1(<96:52f?k7003;;76g!7013>;i6`>79825>=n;m=1<7*>78874`=i9>21=?54i2f5>5<#9>318=k4n05;>45<3`9o97>5$05:>16b3g;<47?;;:k0`1<72-;<57:?e:l23=<6=21b?i=50;&23<<38l1e=:651798m6b5290/=:7541g8j41?28=07d=k1;29 41>2=:n7c?88;3;?>o4l90;6)?89;63a>h6?10:565f3g394?"6?00?j;o34d:9j7`b=83.:;44;0d9m52>=9l10e>kl:18'52?=<9o0b<97:0d8?l5b=3:1(<96:52f?k70038;76g!7013>;i6`>79815>=n;jl1<7*>78874`=i9>21>?54i2af>5<#9>318=k4n05;>75<3`>347>5;c1b`?6=93:1"60=0o?6ak2;29?xd3<3:1m>4>30822g}O;hi0V9;517ya>7b=l38i6?m528824?g=9109m7m52b81`?772m0i6<652c81e?4>2j0j6p*>858707=#9;91h<5+488705=#5<5<5<5<#9>3188j4n05;>4=5<#9>3188j4n05;>6=5<#9>3188j4n05;>0=5<#9>3188j4n05;>2=5<#9>3188j4n05;><=6=44o565>5<5<#9>318l64n05;>4=6=4+16;90d>5<#9>318l64n05;>6=5<#9>318l64n05;>0=5<#9>318l64n05;>2=5<#9>3184:4n05;>5=5<#9>3184:4n05;>7=54o5:f>5<#9>3184:4n05;>1=5<#9>3184:4n05;>3=5<#9>3184:4n05;>==5<#9>318594n05;>5=6=4+16;90=15<#9>318594n05;>7=54i5:1>5<#9>318594n05;>1=5<#9>318594n05;>3=5<#9>318594n05;>==5<#9>31?nm4n05;>5=5<#9>31?nm4n05;>7=54o2a4>5<#9>31?nm4n05;>1=5<#9>31?nm4n05;>3=5<#9>31?nm4n05;>==86=44o51g>5<5<#9>318:=4n05;>4=5<#9>318:=4n05;>6=5<#9>318:=4n05;>0=5<#9>318:=4n05;>2=5<?6=44i2a1>5<5<5<5<5<#9>318>?4n05;>4=5<#9>318>?4n05;>6=5<#9>318>?4n05;>0=5<#9>318>?4n05;>2=5<#9>318>?4n05;><=5<#9>318>?4n05;>g=5<#9>318>?4n05;>a=5<#9>318>?4n05;>c=4;n623?6=,8=269=>;o3432c8io4?:%34=?27m2d:;54?;:k0ad<72-;<57:?e:l23=<632c8i44?:%34=?27m2d:;54=;:k0a=<72-;<57:?e:l23=<432c8i:4?:%34=?27m2d:;54;;:k0a3<72-;<57:?e:l23=<232c8i94?:%34=?27m2d:;549;:k0a6<72-;<57:?e:l23=<032c8i?4?:%34=?27m2d:;547;:k0a4<72-;<57:?e:l23=<>32c8i=4?:%34=?27m2d:;54n;:k0`c<72-;<57:?e:l23=0:9j7a>=83.:;44;0d9m52>=9810e>j8:18'52?=<9o0b<97:008?l5c>3:1(<96:52f?k7003;876g!7013>;i6`>79820>=n;m>1<7*>78874`=i9>21=854i2f0>5<#9>318=k4n05;>40<3`9o>7>5$05:>16b3g;<47?8;:k0`4<72-;<57:?e:l23=<6021b?i>50;&23<<38l1e=:651898m6`6290/=:7541g8j41?28k07d=i0;29 41>2=:n7c?88;3a?>o4mo0;6)?89;63a>h6?10:o65f3dg94?"6?00?j;o34=:810e>mi:18'52?=<9o0b<97:308?l5dm3:1(<96:52f?k70038876g>o3?j0;6)?89;64`>h6?10;76g;7c83>!7013>7982?>o3?h0;6)?89;64`>h6?10976g;7883>!7013>7980?>o3?10;6)?89;64`>h6?10?76g;7683>!7013>7986?>o3??0;6)?89;64`>h6?10=76g;7483>!7013>7984?>o3?=0;6)?89;64`>h6?10376g;6683>!7013>=46`>7983?>o3>?0;6)?89;65<>h6?10:76g;6483>!7013>=46`>7981?>o3>=0;6)?89;65<>h6?10876g;6283>!7013>=46`>7987?>o3>;0;6)?89;65<>h6?10>76g;6083>!7013>=46`>7985?>o3>90;6)?89;65<>h6?10<76g;5g83>!7013>=46`>798;?>o3=l0;6)?89;65<>h6?10276a;4683>>i4km0;66g;8983>>d4j>0;6<4?:1y'5=2=l:1C?o84H2c`?jb52900qo=m8;295?6=8r.:4944?:1y'5=2=kj1C?o84H2c`?M243-;9j7:6a:&f4?4>i6?k0;66sm3`694?5=83:p(<6;:ba8L6d13A9jo6F;3:&26c<31h1/i=4=;h65>5<5;h72>5<858g4>N4j?1C?lm4H518 44a2=3j7)k?:39j03<722c?47>5;h72>5<5<53;294~"60=0ho6F5;|`0=2<72<0;6=u+1969`5=O;k<0D>ol;I60?!75n3>2m6*j0;08m10=831b854?::k65?6=3`;5;n34f?6=3th8m<4?:583>5}#91>1ok5G3c48L6gd3-o;6?5f4783>>o293:17d?8a;29?j70j3:17pl1<729q/=5:5cg9K7g0<@:kh7)k?:39j03<722c>=7>5;h34e?6=3f;5;|`0=c<72=0;6=u+1969gc=O;k<0D>ol;%g3>7=n5;n34f?6=3th8m44?:583>5}#91>1ok5G3c48L6gd3-o;6?5f4783>>o293:17d?8a;29?j70j3:17pl=9483>1<729q/=5:5cg9K7g0<@:kh7)k?:69j03<722c>=7>5;h34e?6=3f;5;|`055<72=0;6=u+1969ga=O;k<0D>ol;%g3>7=n50z&2<15;h6g>5<6=4;:183!7?<3;8<6F>o6?m0;66a>7583>>{e:>>1<7:50;2x 4>3289;7E=m6:J0ef=nl9;I1bg>o3i3:17d;=:188m41c2900c<9;:188yg40:3:187>50z&2<1<6;91C?o84H2c`?l2f2900e8<50;9j52b=831d=::50;9~f716290?6=4?{%3;0?7482B8n;5G3`a8m1g=831b9?4?::k23a<722e:;94?::a6=>=83>1<7>t$0:7>4573A9i:6F>7>5;h34`?6=3f;<87>5;|`1<2<72=0;6=u+1969566<@:h=7E=nc:k7e?6=3`?96=44i05g>5<858275=O;k<0D>ol;h6b>5<>1<75rb3:6>5<3290;w)?74;304>N4j?1C?lm4i5c94?=n=;0;66g>7e83>>i6?=0;66sm29694?2=83:p(<6;:013?M5e>2B8mn5f4`83>>o2:3:17d?8d;29?j70<3:17pl=eg83>1<729q/=5:51228L6d13A9jo6g;a;29?l352900e<9k:188k4132900qo319K7g0<@:kh7d:n:188m04=831b=:j50;9l522=831vn?kk:187>5<7s-;387?<0:J0f3=O;hi0e9o50;9j17<722c:;i4?::m231<722wi>hm50;694?6|,82?6<=?;I1a2>N4ij1b8l4?::k66?6=3`;5;n340?6=3th9io4?:583>5}#91>1=>>4H2`5?M5fk2c?m7>5;h71>5<5<7>54;294~"60=0:?=5G3c48L6gd3`>j6=44i4094?=n9>n1<75`16694?=zj:::6=4;:183!7?<3;8<6F>o6?m0;66a>7583>>{e;9:1<7:50;2x 4>3289;7E=m6:J0ef=nl9;I1bg>o3i3:17d;=:188m41c2900c<9;:188yg4am3:187>50z&2<1<6;91C?o84H2c`?l2f2900e8<50;9j52b=831d=::50;9~f4g0290?6=4?{%3;0?ec3A9i:6F=6=44i5f94?=n=80;66a>7c83>>{e9h<1<7:50;2x 4>32jn0D>l9;I1bg>"b8380e9850;9j0a<722c>=7>5;n34f?6=3th:m84?:583>5}#91>1oi5G3c48L6gd3-o;6?5f4783>>o3l3:17d;>:188k41e2900qo?n4;290?6=8r.:494ld:J0f3=O;hi0(h>52:k72?6=3`>o6=44i4394?=h9>h1<75rb0c0>5<3290;w)?74;ag?M5e>2B8mn5+e181?l212900e9j50;9j14<722e:;o4?::a5d4=83>1<7>t$0:7>fb<@:h=7E=nc:&f4?4>o293:17b?8b;29?xd6i80;694?:1y'5=2=km1C?o84H2c`?!c72;1b8;4?::k7`?6=3`?:6=44o05a>5<54;294~"60=0hh6F6g;6;29?l2c2900e8?50;9l52d=831vn<7i:187>5<7s-;387mk;I1a2>N4ij1/i=4=;h65>5<>i6?k0;66sm21g94?2=83:p(<6;:bf8L6d13A9jo6*j0;08m10=831b8i4?::k65?6=3f;5;|`14a<72=0;6=u+1969ga=O;k<0D>ol;%g3>7=n50z&2<15;h6g>5<=o50;694?6|,82?6nj4H2`5?M5fk2.n<7<4i5494?=n1<729q/=5:5ce9K7g0<@:kh7)k?:39j03<722c?h7>5;h72>5<858``>N4j?1C?lm4$d296>o3>3:17d:k:188m07=831d=:l50;9~f760290?6=4?{%3;0?ec3A9i:6F=6=44i5f94?=n=80;66a>7c83>>{e:9<1<7:50;2x 4>32jn0D>l9;I1bg>"b8380e9850;9j0a<722c>=7>5;n34f?6=3th99;4?:583>5}#91>1oi5G3c48L6gd3-o;6?5f4783>>o3l3:17d;>:188k41e2900qo<:5;290?6=8r.:494ld:J0f3=O;hi0(h>52:k72?6=3`>o6=44i4394?=h9>h1<75rb377>5<3290;w)?74;ag?M5e>2B8mn5+e181?l212900e9j50;9j14<722e:;o4?::a605=83>1<7>t$0:7>fb<@:h=7E=nc:&f4?4>o293:17b?8b;29?xd5=;0;694?:1y'5=2=km1C?o84H2c`?!c72;1b8;4?::k7`?6=3`?:6=44o05a>5<=7>54;294~"60=0hh6F6g;6;29?l2c2900e8?50;9l52d=831vn?;?:187>5<7s-;387mk;I1a2>N4ij1/i=4=;h65>5<>i6?k0;66sm25d94?2=83:p(<6;:bf8L6d13A9jo6*j0;08m10=831b8i4?::k65?6=3f;5;|`10`<72=0;6=u+1969ga=O;k<0D>ol;%g3>7=n50z&2<15;h6g>5<f183>1<729q/=5:5ce9K7g0<@:kh7)k?:39j03<722c?h7>5;h72>5<858``>N4j?1C?lm4$d296>o3>3:17d:k:188m07=831d=:l50;9~f4cb290?6=4?{%3;0?ec3A9i:6F=6=44i5f94?=n=80;66a>7c83>>{e9ln1<7:50;2x 4>32jn0D>l9;I1bg>"b8380e9850;9j0a<722c>=7>5;n34f?6=3th:in4?:583>5}#91>1oi5G3c48L6gd3-o;6?5f4783>>o3l3:17d;>:188k41e2900qo?jb;290?6=8r.:494ld:J0f3=O;hi0(h>52:k72?6=3`>o6=44i4394?=h9>h1<75rb367>5<3290;w)?74;ag?M5e>2B8mn5G429'57`=<0k0(h>52:k72?6=3`>o6=44i4394?=h9>h1<75rb360>5<3290;w)?74;ag?M5e>2B8mn5G429'57`=<0k0(h>52:k72?6=3`>o6=44i4394?=h9>h1<75rb361>5<3290;w)?74;ag?M5e>2B8mn5G429'57`=<0k0(h>52:k72?6=3`>o6=44i4394?=h9>h1<75rb362>5<3290;w)?74;ag?M5e>2B8mn5G429'57`=<0k0(h>52:k72?6=3`>o6=44i4394?=h9>h1<75rb363>5<3290;w)?74;ag?M5e>2B8mn5G429'57`=<0k0(h>52:k72?6=3`>o6=44i4394?=h9>h1<75rb31e>5<3290;w)?74;ag?M5e>2B8mn5G429'57`=<0k0(h>52:k72?6=3`>o6=44i4394?=h9>h1<75rb31f>5<3290;w)?74;ag?M5e>2B8mn5G429'57`=<0k0(h>52:k72?6=3`>o6=44i4394?=h9>h1<75rb31g>5<3290;w)?74;ag?M5e>2B8mn5G429'57`=<0k0(h>52:k72?6=3`>o6=44i4394?=h9>h1<75rb31`>5<3290;w)?74;ag?M5e>2B8mn5G429'57`=<0k0(h>52:k72?6=3`>o6=44i4394?=h9>h1<75rb0g2>5<3290;w)?74;ag?M5e>2B8mn5G429'57`=<0k0(h>52:k72?6=3`>o6=44i4394?=h9>h1<75rb0g3>5<3290;w)?74;ag?M5e>2B8mn5G429'57`=<0k0(h>52:k72?6=3`>o6=44i4394?=h9>h1<75rb0fe>5<3290;w)?74;ag?M5e>2B8mn5G429'57`=<0k0(h>52:k72?6=3`>o6=44i4394?=h9>h1<75rb0ff>5<3290;w)?74;ag?M5e>2B8mn5G429'57`=<0k0(h>52:k72?6=3`>o6=44i4394?=h9>h1<75rb0fg>5<3290;w)?74;ag?M5e>2B8mn5G429'57`=<0k0(h>52:k72?6=3`>o6=44i4394?=h9>h1<75rb0f`>5<3290;w)?74;ag?M5e>2B8mn5G429'57`=<0k0(h>52:k72?6=3`>o6=44i4394?=h9>h1<75rb0fa>5<3290;w)?74;ag?M5e>2B8mn5G429'57`=<0k0(h>52:k72?6=3`>o6=44i4394?=h9>h1<75rb0fb>5<3290;w)?74;ag?M5e>2B8mn5G429'57`=<0k0(h>52:k72?6=3`>o6=44i4394?=h9>h1<75rb0f:>5<3290;w)?74;ag?M5e>2B8mn5G429'57`=<0k0(h>52:k72?6=3`>o6=44i4394?=h9>h1<75rb0f;>5<3290;w)?74;ag?M5e>2B8mn5G429'57`=<0k0(h>52:k72?6=3`>o6=44i4394?=h9>h1<75rb0ag>5<3290;w)?74;ag?M5e>2B8mn5+e181?l212900e9j50;9j14<722e:;o4?::a5fe=83>1<7>t$0:7>fb<@:h=7E=nc:&f4?4>o293:17b?8b;29?xd6kk0;694?:1y'5=2=km1C?o84H2c`?!c72;1b8;4?::k7`?6=3`?:6=44o05a>5<54;294~"60=0hh6F6g;6;29?l2c2900e8?50;9l52d=831vn5<7s-;387mk;I1a2>N4ij1/i=4=;h65>5<>i6?k0;66sm1b:94?2=83:p(<6;:bf8L6d13A9jo6*j0;08m10=831b8i4?::k65?6=3f;5;|`2g2<72=0;6=u+1969ga=O;k<0D>ol;%g3>7=n3:187>50z&2<15;h6g>5<6=4;:183!7?<3io7E=m6:J0ef=#m9097d:9:188m1b=831b9<4?::m23g<722wi=n:50;694?6|,82?6nj4H2`5?M5fk2.n<7<4i5494?=n1<729q/=5:5ce9K7g0<@:kh7)k?:39j03<722c?h7>5;h72>5<858``>N4j?1C?lm4$d296>o3>3:17d:k:188m07=831d=:l50;9~f757290?6=4?{%3;0?ec3A9i:6F=6=44i5f94?=n=80;66a>7c83>>{e:;l1<7:50;2x 4>32jn0D>l9;I1bg>"b8380e9850;9j0a<722c>=7>5;n34f?6=3th9>h4?:583>5}#91>1oi5G3c48L6gd3-o;6?5f4783>>o3l3:17d;>:188k41e2900qo<=d;290?6=8r.:494ld:J0f3=O;hi0(h>52:k72?6=3`>o6=44i4394?=h9>h1<75rb30`>5<3290;w)?74;ag?M5e>2B8mn5+e181?l212900e9j50;9j14<722e:;o4?::a67d=83>1<7>t$0:7>fb<@:h=7E=nc:&f4?4>o293:17b?8b;29?xd5:h0;694?:1y'5=2=km1C?o84H2c`?!c72;1b8;4?::k7`?6=3`?:6=44o05a>5<7>55;294~"60=0hi6F6g;6;29?l2?2900e9j50;9j14<722e:;o4?::a6a7=83?1<7>t$0:7>fc<@:h=7E=nc:&f4?4>o3l3:17d;>:188k41e2900qo52:k72?6=3`>36=44i5f94?=n=80;66a>7c83>>{e:jo1<7;50;2x 4>32jo0D>l9;I1bg>"b8380e9850;9j0=<722c?h7>5;h72>5<858`a>N4j?1C?lm4$d296>o3>3:17d:7:188m1b=831b9<4?::m23g<722wi>nj50;794?6|,82?6nk4H2`5?M5fk2.n<7<4i5494?=n<10;66g;d;29?l362900c<9m:188yg4dk3:197>50z&2<15;h6;>5<>i6?k0;66sm2bc94?3=83:p(<6;:bg8L6d13A9jo6*j0;08m10=831b854?::k7`?6=3`?:6=44o05a>5<55;294~"60=0o<6F6=4?{%3;0?eb3A9i:6F=6=44i5:94?=n6<729q/=5:53c78L6d13A9jo6g;a;29?l75<3:17b?84;29?xd5jj0;6>4?:1y'5=2=;k?0D>l9;I1bg>o3i3:17d?=4;29?j70<3:17pl=b383>1<729q/=5:51228L6d13A9jo6g;a;29?l352900e<9k:188k4132900qo50z&2<1<6;91C?o84H2c`?l2f2900e8<50;9j52b=831d=::50;9~f7df29086=4?{%3;0?5e=2B8n;5G3`a8m1g=831b=?:50;9l522=831vn?oj:187>5<7s-;387?<0:J0f3=O;hi0e9o50;9j17<722c:;i4?::m231<722wi>o750;194?6|,82?6>l:;I1a2>N4ij1b8l4?::k261<722e:;94?::a6de=83>1<7>t$0:7>4573A9i:6F>7>5;h34`?6=3f;<87>5;|`1f=<72:0;6=u+19697g3<@:h=7E=nc:k7e?6=3`;987>5;n340?6=3th9ml4?:583>5}#91>1=>>4H2`5?M5fk2c?m7>5;h71>5<5<53;294~"60=08n85G3c48L6gd3`>j6=44i007>5<858275=O;k<0D>ol;h6b>5<>1<75rb3`5>5<4290;w)?74;1a1>N4j?1C?lm4i5c94?=n9;>1<75`16694?=zj;k=6=4;:183!7?<3;8<6F>o6?m0;66a>7583>>{e:k?1<7=50;2x 4>32:h>7E=m6:J0ef=n2583>>i6?=0;66sm2`694?2=83:p(<6;:013?M5e>2B8mn5f4`83>>o2:3:17d?8d;29?j70<3:17pl=b583>6<729q/=5:53c78L6d13A9jo6g;a;29?l75<3:17b?84;29?xd5i;0;694?:1y'5=2=9::0D>l9;I1bg>o3i3:17d;=:188m41c2900c<9;:188yg4b>3:197>50z&2<15;h6;>5<>i6?k0;66sm2d794?3=83:p(<6;:bg8L6d13A9jo6*j0;08m10=831b854?::k7`?6=3`?:6=44o05a>5<55;294~"60=0hi6F6g;6;29?l2?2900e9j50;9j14<722e:;o4?::a6`5=83?1<7>t$0:7>fc<@:h=7E=nc:&f4?4>o3l3:17d;>:188k41e2900qo52:k72?6=3`>36=44i5f94?=n=80;66a>7c83>>{e:l;1<7;50;2x 4>32jo0D>l9;I1bg>"b8380e9850;9j0=<722c?h7>5;h72>5<858`a>N4j?1C?lm4$d296>o3>3:17d:7:188m1b=831b9<4?::m23g<722wi>ih50;794?6|,82?6nk4H2`5?M5fk2.n<7<4i5494?=n<10;66g;d;29?l362900c<9m:188yg4cm3:197>50z&2<15;h6;>5<>i6?k0;66sm2ef94?3=83:p(<6;:bg8L6d13A9jo6*j0;08m10=831b854?::k7`?6=3`?:6=44o05a>5<54;294~"60=0hh6F6g;6;29?l2c2900e8?50;9l52d=831vn?8<:187>5<7s-;387mk;I1a2>N4ij1/i=4=;h65>5<>i6?k0;66sm27c94?2=83:p(<6;:bd8L6d13A9jo6*j0;58m10=831b9<4?::k23d<722e:;o4?::a63?=83>1<7>t$0:7>f`<@:h=7E=nc:&f4?1>o6?h0;66a>7c83>>{e;=21<7;50;2x 4>32jo0D>l9;I1bg>"b8380e9850;9j0=<722c?h7>5;h72>5<858`a>N4j?1C?lm4$d296>o3>3:17d:7:188m1b=831b9<4?::m23g<722wi?9850;794?6|,82?6nk4H2`5?M5fk2.n<7<4i5494?=n<10;66g;d;29?l362900c<9m:188yg53=3:197>50z&2<15;h6;>5<>i6?k0;66sm35694?3=83:p(<6;:bg8L6d13A9jo6*j0;08m10=831b854?::k7`?6=3`?:6=44o05a>5<55;294~"60=0hi6F6g;6;29?l2?2900e9j50;9j14<722e:;o4?::a717=83?1<7>t$0:7>a6<@:h=7E=nc:&f4?1>o293:17d?8a;29?j70j3:17pl<4183>0<729q/=5:5cd9K7g0<@:kh7)k?:39j03<722c?47>5;h6g>5<96=4::183!7?<3in7E=m6:J0ef=#m9097d:9:188m1>=831b8i4?::k65?6=3f;5;|`070<72:0;6=u+19697g3<@:h=7E=nc:k7e?6=3`;987>5;n340?6=3th8?94?:283>5}#91>1?o;4H2`5?M5fk2c?m7>5;h310?6=3f;<87>5;|`06g<72=0;6=u+1969566<@:h=7E=nc:k7e?6=3`?96=44i05g>5<8580f0=O;k<0D>ol;h6b>5<5<54;294~"60=0:?=5G3c48L6gd3`>j6=44i4094?=n9>n1<75`16694?=zj:996=4<:183!7?<39i96F>1<75rb204>5<3290;w)?74;304>N4j?1C?lm4i5c94?=n=;0;66g>7e83>>i6?=0;66sm32394?5=83:p(<6;:2`6?M5e>2B8mn5f4`83>>o6:=0;66a>7583>>{e;;?1<7:50;2x 4>3289;7E=m6:J0ef=n4?:1y'5=2=;k?0D>l9;I1bg>o3i3:17d?=4;29?j70<3:17pl<2283>1<729q/=5:51228L6d13A9jo6g;a;29?l352900e<9k:188k4132900qo==f;297?6=8r.:49450z&2<1<6;91C?o84H2c`?l2f2900e8<50;9j52b=831d=::50;9~f64b29086=4?{%3;0?5e=2B8n;5G3`a8m1g=831b=?:50;9l522=831vn>?i:187>5<7s-;387?<0:J0f3=O;hi0e9o50;9j17<722c:;i4?::m231<722wi??j50;194?6|,82?6>l:;I1a2>N4ij1b8l4?::k261<722e:;94?::a74b=83>1<7>t$0:7>4573A9i:6F>7>5;h34`?6=3f;<87>5;|`011<72<0;6=u+1969g`=O;k<0D>ol;%g3>7=n;=:186>5<7s-;387j?;I1a2>N4ij1/i=48;h65>5<>o6?h0;66a>7c83>>{e;<91<7;50;2x 4>32jo0D>l9;I1bg>"b8380e9850;9j0=<722c?h7>5;h72>5<858`a>N4j?1C?lm4$d296>o3>3:17d:7:188m1b=831b9<4?::m23g<722wi?8850;794?6|,82?6nk4H2`5?M5fk2.n<7<4i5494?=n<10;66g;d;29?l362900c<9m:188yg52?3:197>50z&2<15;h6;>5<>i6?k0;66sm34:94?3=83:p(<6;:bg8L6d13A9jo6*j0;08m10=831b854?::k7`?6=3`?:6=44o05a>5<57>55;294~"60=0hi6F6g;6;29?l2?2900e9j50;9j14<722e:;o4?::a70g=83?1<7>t$0:7>fc<@:h=7E=nc:&f4?4>o3l3:17d;>:188k41e2900qo=9c;291?6=8r.:494le:J0f3=O;hi0(h>52:k72?6=3`>36=44i5f94?=n=80;66a>7c83>>{e;?h1<7;50;2x 4>32jo0D>l9;I1bg>"b8380e9850;9j0=<722c?h7>5;h72>5<858`a>N4j?1C?lm4$d296>o3>3:17d:7:188m1b=831b9<4?::m23g<722wi?;750;794?6|,82?6nk4H2`5?M5fk2.n<7<4i5494?=n<10;66g;d;29?l362900c<9m:188yg5103:197>50z&2<15;h6;>5<>i6?k0;66sm37594?3=83:p(<6;:bg8L6d13A9jo6*j0;08m10=831b854?::k7`?6=3`?:6=44o05a>5<55;294~"60=0hi6F6g;6;29?l2?2900e9j50;9j14<722e:;o4?::a733=83?1<7>t$0:7>fc<@:h=7E=nc:&f4?4>o3l3:17d;>:188k41e2900qo=94;291?6=8r.:494le:J0f3=O;hi0(h>52:k72?6=3`>36=44i5f94?=n=80;66a>7c83>>{e;><1<7;50;2x 4>32jo0D>l9;I1bg>"b8380e9850;9j0=<722c?h7>5;h72>5<858`a>N4j?1C?lm4$d296>o3>3:17d:7:188m1b=831b9<4?::m23g<722wi?::50;794?6|,82?6nk4H2`5?M5fk2.n<7<4i5494?=n<10;66g;d;29?l362900c<9m:188yg50;3:197>50z&2<15;h6;>5<>i6?k0;66sm36094?3=83:p(<6;:bg8L6d13A9jo6*j0;08m10=831b854?::k7`?6=3`?:6=44o05a>5<55;294~"60=0hi6F6g;6;29?l2?2900e9j50;9j14<722e:;o4?::a726=83?1<7>t$0:7>fc<@:h=7E=nc:&f4?4>o3l3:17d;>:188k41e2900qo=9f;291?6=8r.:494le:J0f3=O;hi0(h>52:k72?6=3`>36=44i5f94?=n=80;66a>7c83>>{e;>o1<7;50;2x 4>32jo0D>l9;I1bg>"b8380e9850;9j0=<722c?h7>5;h72>5<858`a>N4j?1C?lm4$d296>o3>3:17d:7:188m1b=831b9<4?::m23g<722wi?:m50;794?6|,82?6nk4H2`5?M5fk2.n<7<4i5494?=n<10;66g;d;29?l362900c<9m:188yg50j3:197>50z&2<15;h6;>5<>i6?k0;66sm36c94?3=83:p(<6;:bg8L6d13A9jo6*j0;08m10=831b854?::k7`?6=3`?:6=44o05a>5<55;294~"60=0hi6F6g;6;29?l2?2900e9j50;9j14<722e:;o4?::a72>=83?1<7>t$0:7>fc<@:h=7E=nc:&f4?4>o3l3:17d;>:188k41e2900qo=87;291?6=8r.:494le:J0f3=O;hi0(h>52:k72?6=3`>36=44i5f94?=n=80;66a>7c83>>{e;?o1<7;50;2x 4>32jo0D>l9;I1bg>"b8380e9850;9j0=<722c?h7>5;h72>5<858`a>N4j?1C?lm4$d296>o3>3:17d:7:188m1b=831b9<4?::m23g<722wi?l850;194?6|,82?6<<6;I1a2>N4ij1/i=4>b:kg0?6=3`n>6=44o057>5<53;294~"60=0:>45G3c48L6gd3-o;67583>>{e:8:1<7=50;2x 4>328827E=m6:J0ef=#m90:i6gk4;29?lb22900c<9;:188yg7f13:1?7>50z&2<1<6:01C?o84H2c`?!c728o0ei:50;9j`0<722e:;94?::a5<3=8391<7>t$0:7>44>3A9i:6F5;hf6>5<85826<=O;k<0D>ol;%g3>4c1<75fd483>>i6?=0;66sm18194?5=83:p(<6;:00:?M5e>2B8mn5+e182a>oc<3:17dj::188k4132900qo?62;297?6=8r.:494>289K7g0<@:kh7)k?:0g8ma2=831bh84?::m231<722wi=4?50;194?6|,82?6<<6;I1a2>N4ij1/i=4>e:kg0?6=3`n>6=44o057>5<53;294~"60=0:>45G3c48L6gd3-o;67583>>{e91l1<7=50;2x 4>328827E=m6:J0ef=#m90:i6gk4;29?lb22900c<9;:188yg7?m3:1?7>50z&2<1<6:01C?o84H2c`?!c728o0ei:50;9j`0<722e:;94?::a5=b=8391<7>t$0:7>44>3A9i:6F5;hf6>5<85826<=O;k<0D>ol;%g3>4c1<75fd483>>i6?=0;66sm19`94?5=83:p(<6;:00:?M5e>2B8mn5+e182a>oc<3:17dj::188k4132900qo?7a;297?6=8r.:494>289K7g0<@:kh7)k?:0g8ma2=831bh84?::m231<722wi=5750;194?6|,82?6<<6;I1a2>N4ij1/i=4>e:kg0?6=3`n>6=44o057>5<53;294~"60=0:>45G3c48L6gd3-o;67583>>{e91=1<7=50;2x 4>328827E=m6:J0ef=#m90:i6gk4;29?lb22900c<9;:188yg7?>3:1?7>50z&2<1<6:01C?o84H2c`?!c728o0ei:50;9j`0<722e:;94?::a5=3=8391<7>t$0:7>44>3A9i:6F5;hf6>5<85826g=O;k<0D>ol;%g3>701<75fd483>>oc>3:17b?84;29?xd6ik0;694?:1y'5=2=9;h0D>l9;I1bg>"b838=7dj;:188ma3=831bh;4?::m231<722wi>;;50;694?6|,82?6<N4ij1/i=4=2:kg0?6=3`n>6=44ie494?=h9>>1<75rb337>5<2290;w)?74;31`>N4j?1C?lm4$d2965=nl=0;66gk5;29?lb12900ei950;9l522=831vn5<7s-;387?=d:J0f3=O;hi0(h>5219j`1<722co97>5;hf5>5<>oc=3:17dj9:188ma1=831d=::50;9~f70?290>6=4?{%3;0?75l2B8n;5G3`a8 `6=:81bh94?::kg1?6=3`n=6=44ie594?=h9>>1<75rb230>5<4290;w)?74;31=>N4j?1C?lm4$d2954=nl=0;66gk5;29?j70<3:17pl=6383>1<729q/=5:513`8L6d13A9jo6*j0;3:?lb32900ei;50;9j`3<722e:;94?::a640=8391<7>t$0:7>44>3A9i:6F5;hf6>5<85826<=O;k<0D>ol;%g3>4c1<75fd483>>i6?=0;66sm20:94?2=83:p(<6;:00a?M5e>2B8mn5+e1812>oc<3:17dj::188ma0=831d=::50;9~f4d6290?6=4?{%3;0?75j2B8n;5G3`a8 `6=:?1bh94?::kg1?6=3`n=6=44o057>5<55;294~"60=0:>i5G3c48L6gd3-o;6?>4ie694?=nl<0;66gk6;29?lb02900c<9;:188yg7e;3:197>50z&2<1<6:m1C?o84H2c`?!c72;:0ei:50;9j`0<722co:7>5;hf4>5<85826<=O;k<0D>ol;%g3>f11<75fd483>>i6?=0;66sm31a94?5=83:p(<6;:00:?M5e>2B8mn5+e1810>oc<3:17dj::188k4132900qo289K7g0<@:kh7)k?:368ma2=831bh84?::m231<722wi>4<50;794?6|,82?6<N4ij1/i=4=3:kg0?6=3`n>6=44ie494?=nl>0;66a>7583>>{e:>l1<7;50;2x 4>3288o7E=m6:J0ef=#m909?6gk4;29?lb22900ei850;9j`2<722e:;94?::a75d=83?1<7>t$0:7>44c3A9i:6F5;hf6>5<>i6?=0;66sm2g:94?3=83:p(<6;:00g?M5e>2B8mn5+e1811>oc<3:17dj::188ma0=831bh:4?::m231<722wi>4?50;794?6|,82?6<N4ij1/i=4=3:kg0?6=3`n>6=44ie494?=nl>0;66a>7583>>{e:>o1<7;50;2x 4>3288o7E=m6:J0ef=#m909?6gk4;29?lb22900ei850;9j`2<722e:;94?::a75g=83?1<7>t$0:7>44c3A9i:6F5;hf6>5<>i6?=0;66sm2g594?3=83:p(<6;:00g?M5e>2B8mn5+e1811>oc<3:17dj::188ma0=831bh:4?::m231<722wi>4>50;794?6|,82?6<N4ij1/i=4=3:kg0?6=3`n>6=44ie494?=nl>0;66a>7583>>{e:>n1<7;50;2x 4>3288o7E=m6:J0ef=#m909?6gk4;29?lb22900ei850;9j`2<722e:;94?::a75?=83?1<7>t$0:7>44c3A9i:6F5;hf6>5<>i6?=0;66sm2g494?3=83:p(<6;:00g?M5e>2B8mn5+e1811>oc<3:17dj::188ma0=831bh:4?::m231<722wi>5h50;794?6|,82?6<N4ij1/i=4=3:kg0?6=3`n>6=44ie494?=nl>0;66a>7583>>{e:>i1<7;50;2x 4>3288o7E=m6:J0ef=#m909?6gk4;29?lb22900ei850;9j`2<722e:;94?::a6<1=83>1<7>t$0:7>44e3A9i:6F5;hf6>5<5<7s-;387?=b:J0f3=O;hi0(h>5139j`1<722co97>5;hf5>5<85826a=O;k<0D>ol;%g3>fg1<75fd483>>oc>3:17dj8:188k4132900qo=?8;291?6=8r.:494>2e9K7g0<@:kh7)k?:318ma2=831bh84?::kg2?6=3`n<6=44o057>5<55;294~"60=0:>i5G3c48L6gd3-o;6?;4ie694?=nl<0;66gk6;29?lb02900c<9;:188yg4e;3:1>7>50z&2<1<6:11C?o84H2c`?!c728;0ei:50;9l522=831vn?l>:181>5<7s-;387?=8:J0f3=O;hi0(h>5109j`1<722e:;94?::a6d`=8381<7>t$0:7>44?3A9i:6F5;n340?6=3th9mi4?:383>5}#91>1=?64H2`5?M5fk2.n<7?>;hf7>5<85826==O;k<0D>ol;%g3>471<75`16694?=zj;k26=4=:183!7?<3;946F>i6?=0;66sm2`594?4=83:p(<6;:00;?M5e>2B8mn5+e1825>oc<3:17b?84;29?xd5i<0;6?4?:1y'5=2=9;20D>l9;I1bg>"b83;:7dj;:188k4132900qo299K7g0<@:kh7)k?:038ma2=831d=::50;9~f64d29096=4?{%3;0?7502B8n;5G3`a8 `6=981bh94?::m231<722wi??o50;094?6|,82?6<<7;I1a2>N4ij1/i=4>1:kg0?6=3f;<87>5;|`06=<72;0;6=u+196957><@:h=7E=nc:&f4?763`n?6=44o057>5<52;294~"60=0:>55G3c48L6gd3-o;6>1<75rb207>5<5290;w)?74;31<>N4j?1C?lm4$d2954=nl=0;66a>7583>>{e;;81<7<50;2x 4>328837E=m6:J0ef=#m90:=6gk4;29?j70<3:17pl<2183>7<729q/=5:513:8L6d13A9jo6*j0;32?lb32900c<9;:188yg56m3:1>7>50z&2<1<6:11C?o84H2c`?!c728;0ei:50;9l522=831vn?lj:181>5<7s-;387?=8:J0f3=O;hi0(h>5109j`1<722e:;94?::a760=8381<7>t$0:7>44?3A9i:6F5;n340?6=3th:n:4?:483>5}#91>1=?j4H2`5?M5fk2.n<75<>oc?3:17b?84;29?xd6j00;684?:1y'5=2=9;n0D>l9;I1bg>"b838<7dj;:188ma3=831bh;4?::kg3?6=3f;<87>5;|`15`<72<0;6=u+196957b<@:h=7E=nc:&f4?473`n?6=44ie794?=nl?0;66gk7;29?j70<3:17pl=2183>0<729q/=5:513f8L6d13A9jo6*j0;04?lb32900ei;50;9j`3<722co;7>5;n340?6=3th9:<4?:483>5}#91>1=?j4H2`5?M5fk2.n<7?8;hf7>5<>oc?3:17b?84;29?xd4180;65950;2x 4>328=h7E=m6:J0ef=]<<0jw44=8;g950<6;3;h6k4>4;35>4b=u-;:j7;4$003>0=#l10>7)j6:49'`d<23-ni685+db86?!bc2<1/=5>53:&2<4<33-o:685+e386?!c42<1/i94:;%g6>0=#m?0>7)k8:49'a=<23-o2685+e`86?!ce2<1/in4:;%gg>0=#ml0>7)ki:49'b5<23-l:685+f386?!`42<1/j94:;%d6>0=#n?0>7)h8:49'b=<23-l2685+f`86?!`e2<1/jn4:;%dg>0=#nl0>7)hi:49'556==2.:<<4:;%336?3<,8:8685+11691>"68<0>7)??6;78 4602<1/==655:&24<<23-;;m7;4$02a>0=#99i196*>0e86?!77m3?0(<>i:49'546==2.:=<4:;%326?3<,8;8685+10691>"69<0>7)?>6;78 4702<1/=<655:&25<<23-;:m7;4$03a>0=#98i196*>1e86?!76m3?0(>l<:2`2?!bb2<1/=:k51618 4462:1/=?<54:&0f7<4j81/hk4:;h6a>5<>od13:17d?72;29?l7?;3:17d=nf;29?l5e83:17d=7:18'52?=;>1e=:650:9j73<72-;<57=8;o346=4+16;972=i9>21>65f3583>!70139<7c?88;18?l54290/=:75369m52>=<21b??4?:%34=?503g;<47;4;h12>5<#9>31?:5a16:92>=n;90;6)?89;14?k7003=07d1e=:658:9j6`<72-;<57=8;o3496=4+16;904=i9>21<65f4183>!7013>:7c?88;38?l5a290/=:75409m52>=:21b?h4?:%34=?263g;<47=4;h1g>5<#9>318<5a16:90>=n;j0;6)?89;62?k7003?07d=m:18'52?=<81e=:656:9j7d<72-;<57:>;o3421465f5`83>!7013?27c?88;28?l3?290/=:75589m52>=921b9:4?:%34=?3>3g;<47<4;h75>5<#9>31945a16:97>=n=<0;6)?89;7:?k7003>07d;;:18'52?==01e=:655:9j26<72-;<57;6;o3421;65f6083>!7013?27c?88;:8?l07290/=:75589m52>=121b9k4?:%34=?3>3g;<47o4;h7f>5<#9>31945a16:9f>=n=m0;6)?89;7:?k7003i07d;l:18'52?==01e=:65d:9j1g<72-;<57;6;o3421j65f7e83>!7013=h7c?88;28?l1e290/=:757b9m52>=921b;44?:%34=?1d3g;<47<4;h5;>5<#9>31;n5a16:97>=n?>0;6)?89;5`?k7003>07d99:18'52?=?j1e=:655:9j30<72-;<579l;o3421;65f7283>!7013=h7c?88;:8?l15290/=:757b9m52>=121b;<4?:%34=?1d3g;<47o4;h53>5<#9>31;n5a16:9f>=n>l0;6)?89;5`?k7003i07d8k:18'52?=?j1e=:65d:9j2f<72-;<579l;o3421j65f6`83>!7013=h7c?88;33?>o113:1(<96:6a8j41?28;07d87:18'52?=?j1e=:651398m31=83.:;448c:l23=<6;21b:;4?:%34=?1d3g;<47?;;:k51?6=,8=26:m4n05;>43<3`2?6=4+16;93f=i9>21=;54i9194?"6?0079823>=n0;0;6)?89;5`?k7003;376g71;29 41>2>i0b<97:0;8?l>7290/=:757b9m52>=9h10e:h50;&23<<0k2d:;54>b:9j3`<72-;<579l;o345$05:>2e5<#9>31;n5a16:95`=1<7*>7884g>h6?10:j65f8683>!70132=7c?88;28?l>2290/=:75879m52>=921b4n4?:%34=?>e3g;<47>4;h:b>5<#9>314o5a16:95>=n000;6)?89;:a?k7003807d67:18'52?=0k1e=:653:9l=1<72-;<577<;o3421=65`9083>!7013387c?88;08?j?7290/=:75929m52>=;21d4k4?:%34=??43g;<47:4;n:f>5<#9>315>5a16:91>=h1m0;6)?89;;0?k7003<07b7l:18'52?=1:1e=:657:9l=g<72-;<577<;o34<3f3j6=4+16;9=6=i9>21565`9883>!7013387c?88;c8?j??290/=:75929m52>=j21d5:4?:%34=??43g;<47m4;n;5>5<#9>315>5a16:9`>=h1<0;6)?89;;0?k7003o07b6k:18'52?=1:1e=:65f:9lg4<72-;<57m?;o3421=65`b683>!7013h=7c?88;28?jd2290/=:75b79m52>=921dn>4?:%34=?d13g;<47<4;n`1>5<#9>31n;5a16:97>=hj80;6)?89;`5?k7003>07bl?:18'52?=j?1e=:655:9lec<72-;<57l9;o3421;65`ae83>!7013h=7c?88;:8?jgd290/=:75b79m52>=121dmo4?:%34=?d13g;<47o4;ncb>5<#9>31n;5a16:9f>=hi10;6)?89;`5?k7003i07bo8:18'52?=j?1e=:65d:9le3<72-;<57l9;o346=4+16;9f3=i9>21j65`a583>!7013h=7c?88;33?>if;3:1(<96:c48j41?28;07bo=:18'52?=j?1e=:651398kd7=83.:;44m6:l23=<6;21dm=4?:%34=?d13g;<47?;;:m:b?6=,8=26o84n05;>43<3fhn6=4+16;9f3=i9>21=;54ocf94?"6?00i:6`>79823>=hjj0;6)?89;`5?k7003;376amb;29 41>2k<0b<97:0;8?jdf290/=:75b79m52>=9h10co750;&23<2d:;54>b:9lf=<72-;<57l9;o345$05:>g05<#9>31n;5a16:95`=788a2>h6?10:j65`c783>!7013i>7c?88;28?je3290/=:75c49m52>=921do>4?:%34=?e23g;<47<4;na1>5<#9>31o85a16:97>=zj;?m6=4::183!7?<3;9i6F>oc=3:17dj9:188ma1=831d=?;50;9~f4d229086=4?{%3;0?75i2B8n;5G3`a8 `6=9l1bh94?::kg1?6=3f;997>5;|`2f3<72=0;6=u+196957e<@:h=7E=nc:&f4?7a3`n?6=44ie794?=nl?0;66a>2483>>{e:8i1<7=50;2x 4>3288j7E=m6:J0ef=#m90:i6gk4;29?lb22900c<<::188yg46l3:187>50z&2<1<6:j1C?o84H2c`?!c728l0ei:50;9j`0<722co:7>5;n311?6=3th9:=4?:483>5}#91>1=?k4H2`5?M5fk2.n<7?8;hf7>5<>oc?3:17b?=5;29?xu31<0;65uQ487897022m<01?8l:e58970?2m=01?8=:e6897062m>01?;i:e6897072m>0q~:63;2922}Y;jn0R>li;_6:`>X31k1U?ok4^5;;?[23>2T?5n5Q4558Z10>3W9hn6Pm;;_1`7>X3i>1U8l84^5c6?[2f<2T?m>5Q4`08Z1g63W>j<6P;9g9]0<4X30k1U85o4^5::?85e?3n970=n2;72?85>?3?:70=n1;72?85f83?:70=6f;72?85fi3?:70=n9;72?840=3?970<84;71?840;3?970<82;71?84093?970<78;71?84??3?970<76;71?84?=3?970<74;71?84bn3?9703?970f;71?856l3?970=61;3;7>;41808mk5238391d=:;0;19552383912=:;0;19;52383910=:;0;19952383926=:;0;1:?52383924=:;0;1:=5238391c=:;0;19h5238391a=:;0;19n5238391g=:;0;19>523839<2=:;0;1485rs5;4>5<4sW>2;63j57>53z\7e<=:;891h9523009`1=z{=236=4:8z\7<==:;0318;5238:903=:;0=18;523`3903=:;h:18;5238d903=::0?18;5221g903=::9n18;5221a903=::9h18;5221c903=::9318;5221:903=::9=18;52214903=::<<18;52247903=::<>18;52241903=::<818;52243903=::<:18;5225d903=::=o18;52256903=::=918;52250903=::=;18;52252903=:::l18;5222g903=:::n18;5222a903=:9jn18;521ba903=:9jh18;521bc903=:9j318;521b:903=:9j=18;521b4903=:9j?18;521b6903=::m818;522e3903=::jl18;522bg903=::m:18;522bf903=::ji18;522bc903=::j318;522b`903=::l<18;522d7903=::l>18;522d1903=::l818;522d3903=::l:18;522ed903=::mo18;522ef903=::?<18;52271903=::?k18;5227;903=:;><18;52367903=:;>>18;52361903=:;>818;52363903=:;>:18;5237d903=:;>o18;5236f903=:;>i18;5236`903=:;>k18;5236;903=:;>218;52365903=:;?o18;5237f903=:;0;18o5rs560>5<5sW>??63<11823g=z{=3n6=4;9z\7=`=:;h>18;523`0903=:;h918;523`c903=:;h318;52302903=:;9l18;521`5903=:9h<18;521`7903=:9h>18;521`1903=:9h818;521`3903=:9h:18;5218d903=:9o918;521g0903=:9o;18;521g2903=:9ll18;521dg903=:9ln18;521da903=:9lh18;521d3903=:9l:18;521ed903=:9mo18;521ef903=:9mi18;521e`903=:9mk18;521e;903=:9m218;52220903=:::;18;52222903=::;l18;5223g903=::;n18;5223a903=::;h18;5223c903=:;=218;52355903=:;=<18;52357903=:;=>18;52351903=:;=;18;52352903=:;=818;52346903=:;<818;52341903=:;18;5238390f=z{=996=4={_614>;4??0:;o5rs513>5<5sW>:j63<74823g=z{=8m6=4={_62a>;4?=0:;o5rs50f>5<5sW>:h63<72823g=z{=8o6=4={_62g>;4?;0:;o5rs50`>5<5sW>:n63<70823g=z{=8i6=4={_62e>;4?90:;o5rs50b>5<5sW>:563<6g823g=z{=9i6=4={_61<>;4?l0:;o5rs51b>5<5sW>9;63<7e823g=z{=926=4={_612>;4?j0:;o5rs51;>5<5sW>9963<7c823g=z{=9<6=4={_610>;4?h0:;o5rs515>5<5sW>9?63<78823g=z{=9>6=4={_616>;4?10:;o5rs517>5<5sW>9=63<76823g=z{=986=4={_62<>;4>l0:;o5rs50:>5<5sW>:;63<6e823g=z{=:m6=4={_1ff>;4180356s|41f94?4|V:oj70=61;4b?xu38j0;6?uQ3d;896?62?30q~:?b;296~X4m116?4?5699~w16f2909wS=j7:?0=4<1?2wx8=750;0xZ6c13492=789;|q742<72;qU?h:4=2;2>33;:7>52z\0a6=:;0;1495rs526>5<5sW9n>63<908;7>{t<9>1<793237p};0283>7}Y;l:01>7>:908yv27:3:1>vP7<7=081v9>>:181[5cm2785<470:p056=838pR>jk;<1:5?1a3ty8jk4?:3y]7ae<5:3:6:k4}r1ea?6=:rT8ho5238393d=z{:lh6=4={_1g=>;4180=j6s|3g`94?4|V:n370=61;47?xu4nh0;6?uQ3e5896?621i0q~=i9;296~X4l?16?4?57e9~w6`?2909wS=k5:?0=4<0j2wx?k950;0xZ6b33492=796;|q0b3<72;qU?i=4=2;2>2>52z\0`7=:;0;1;:5rs2d7>5<5sW9o=63<90842>{t;o91<793=>7p};1783>7}Y;o;01>7>:668yv26=3:1>vP7<7=0h1v9?;:181[5bn2785<483:p045=838pR>kj;<1:5?153ty?=?4?:3y]7`b<5:3:6:?4}r625?6=:rT8in52383935=z{=;;6=4={_1f1>;4180=i6s|41:94?4|V:nj70=61;4g?xu4nm0;6?uQ3bd896?62?i0q~=i2;296~X4kl16?4?56c9~w454290jw0=m8;342>;5?80?m63=8587e>;5mk0?m63=fd87e>;5j=0?m63=a387e>;4:m0?m63<1e87e>;4180h56s|38:94?5|5:3268?4=2;;>41e3492;7:7;|q0=<<72;q6?47516`896?e2m>0q~=n3;297~;4i=0>=63;4i:0:;o5rs2c7>5<5s49j87?8b:?0e378:05a?85>j3n>7p}6}:;h81=:l4=2c0>07<5:k=6i;4}r1:e?6=7`9>7d6=9>k01>7i:05b?85>j3;<86s|38g94?7fs49j=7?8b:?1=0<6?h16>i<54e9>6a7=nh54e9>6fc=i>54e9>6fb=nm54e9>6fg=n7516c897ee2=n01?k9:5f897c22=n01?k;:5f897c42=n01?k=:5f897c62=n01?k?:5f897ba2=n01?jj:5f897bc2=n01?89:5f897042=n01?8n:05b?84113;4;d:?107<3l2798<4;d:?105<3l279?k4;d:?17`<3l279?i4;d:?17f<3l27:oi4;d:?2gf<3l27:oo4;d:?2gd<3l27:o44;d:?2g=<3l27:o:4;d:?2g3<3l27:o84;d:?2g1<3l2wx?4m50;3685>n3;;4?<0?h63<7587`>;4?:0?h63<7387`>;4?80?h63<7187`>;4>o0?h63<7d87`>;4?m0?h63<7b87`>;4?k0?h63<7`87`>;4?00?h63<7987`>;4?>0?h63<6d87`>;4>m0?h63<928g0>;4180:4?5rs2c6>5<4s49jm7?8a:?0e<<6?h16?l851668yv5f03:1=hu23`c952d<5:;;69j4=22e>1b<5:>369j4=264>1b<5:>=69j4=266>1b<5:>?69j4=260>1b<5:>:6<9n;<174?2c349?>7:k;<160?2c349>>7?8a:?016<3l278984;d:?013<3l2789:4;d:?01=<3l278944;d:?01d<3l278:n4;d:?02g<3l278:l4;d:?02<<3l278:54;d:?022<3l278:;4;d:?020<3l278:94;d:p7d1=838=w0=n9;34f>;6i>0?h63>a787`>;6i<0?h63>a587`>;6i:0?h63>a387`>;6i80?h63>a187`>;61o0?h63>f287`>;6n;0?h63>f087`>;6n90?h63>eg87`>;6ml0?h63>ee87`>;6mj0?h63>ec87`>;6m80?h63>e187`>;6lo0?h63>dd87`>;6lm0?h63>db87`>;6lk0?h63>d`87`>;6l00?h63>d987`>;5;;0?h63=3087`>;5;90?h63=2g87`>;5:l0?h63=2e87`>;5:j0?h63=2c87`>;5:h0?h6s|28494?4|5;3>68?4=3;4>4133ty9584?:4y>6<3=9>h01?87:e6897062m?01?;i:e7897072m?0q~=>1;297~;4990>=63<0g865>;49;0:;95rs22e>5<4s49;j7?8b:?0567}::>?1=:j4=35e>4133ty95>4?:3y>623=9>>01?78:e48yv41n3:1>v3=7587e>;5?:0:;95rs35:>5<5s48<87?8d:?13`<6?=1v?8j:181840;3>j70<82;340>{t:>21<741c3487}::>81=:j4=35`>4133ty9;;4?:3y>627=9>n01?9m:057?xu50:0;6?u229:90d=::1=1=::4}r0;`?6=:r79454>7e9>6<4=9>>0q~<64;296~;5010:;9522859`0=z{;296=4={<0;3?2f3483:7?84:p6=e=838p1?68:05g?84>93;<86s|29394?4|5;2=69o4=3:6>4133ty94o4?:3y>6=0=9>n01?7?:057?xu5090;6?u229790d=::1>1=::4}r0;e?6=:r79484>7e9>6=`=9>>0q~<79;296~;50=0:;i5229g952252z?1ac<3i279ih4>759~w7`32909w0;5n00:;95rs22g>5<5s48nj7?84:?0572wx>h750;0x97cb2=k01?kk:057?xu5n:0;6?u22dg952b<5;l36<9;;|q1a=<72;q6>hj54`9>6`e=9>>0q~52z?1af<3i279io4>759~w7`62909w0;5n?0:;95rs3d3>5<5s48nn7?8d:?1b0<6?=1v?hk:181857:3>j70=?1;340>{t;9=1<741c349;o7?84:p75c=838p1>>=:057?856:3n<7p}=fb83>7}:;9;18l52312952252z?044<6?m16?=l51668yv4aj3:1>v3<0187e>;5no0:;95rs226>5<5s49;<7?8d:?04d<6?=1v?hn:18184an3>j70{t;9>1<741c349;57?84:p755=838p1?hj:05g?85703;<86s|1dc94?3|58k<68?4=0d0>41e34;j57j:;<3bf?b334;jh7j8;|q2=`<72:q6=l9516`8966d2m>01?h6:e78yv7f03:1>v3>a7865>;6i00:;95rs0;g>5<4s4;j:7?8b:?04g9b83>6}:9h?1=:l4=22a>a2<5;l36i94}r3bg?6=?r7:m94:1:?2ea<6?=16=lh5d49>5g7=l?16=o=5d69>5g1=l>16=o75d69~w4?e2908w0?n4;34f>;48h0o963=f68g1>{t9ho1<707<58km6<9;;|q2=d<72:q6=l=516`8966f2m>01?h8:e58yv7e83:1>v3>a3865>;6j80:;95rs0;:>5<4s4;j>7?8b:?04<:43894d428=?7p}>9983>6}:9h;1=:l4=22:>a2<5;l=6i94}r3a0?6=:r7:m=4:1:?2f2<6?=1v<78:18087f83;;5n<0o96s|1c:94?4|583m68?4=0`:>4133ty:5;4?:2y>5<`=9>h01>>7:e6897`22m=0q~<;d;291~;58l0>=63=57823g=::8:1h8522009`1=::8>1h:5rs326>5<4s48;i7?8b:?1=7k:438977728=?7p}=0583>6}::9n1=:l4=3;1>a2<5;=m6i:4}r025?6=:r79<:180847k3;;5?l0o96s|20194?1|5;:i68?4=337>413348::7j:;<02=l516`897?62m>01?9j:e68yv46=3:1>v3=0`865>;59?0:;95rs322>5<4s48;m7?8b:?1=56:438977?28=?7p}=0183>6}::931=:l4=3;3>a2<5;=o6i:4}r02=?6=:r79<54:1:?15d<6?=1v;5?j0o96s|20`94?4|5;:<68?4=33f>4133ty:jh4?:2y>651=9>h01?6i:e68971d2m>0q~<>f;296~;58?0>=63=218231=z{8lo6=4<{<032?70j2794h4k4:?13g>l50;0x97312<;01?:;:05a?xu5;h0;6?u2247914=::=91=:l4}r07g?6=7c9>646=l=16><<5d49>642=l?1v?=6:181842<3?:70<;2;34f>{t:=h1<7=t=377>41e348:>7j9;<020?b23ty9?54?:3y>605==816>9?516`8yv43i3:1>v3=52823g=::8>1h95rs314>5<5s48>>7;>;<074?70j2wx>9750;4x973528=i70<>6;f7?84603n>70<>a;f5?846m3n>70<=0;f6?xu5;?0;6?u2243914=:::l1=:l4}r077c9>64>=l=16>64c=l=16>?>5d59~w7522909w0<:0;72?844m3;61`==816>>j516`8yv43>3:1?v3=4g823g=::8i1h85220f9`0=z{;986=4={<07a?363488o7?8b:p613=838p1?:j:05a?846l3n=7p}>d683>7}:9o919<521d3952d52z?2b7<2927:i=4>7c9~w4c>290?w0?i2;34f>;6i00o863>ac8g1>;6im0o:6s|1e794?4|58l:68?4=0fe>41e3ty:i54?:2y>5c7=9>h01=63>dd823g=z{8o<6=4={<3e4?70j27:mi4k4:p5a5=838p1e783>3}:9ll1=:l4=0ce>a2<58h:6i;4=0`0>a0<58h<6i;4=0`:>a37>52z?2a`<2927:hn4>7c9~w4c2290>w0?je;34f>;6j80o863>b28g1>;6j>0o863>b88g0>{t9m;1<707<58ni6<9m;|q2a1<72=q6=hj516`894d42m>010q~?k0;296~;6mj0>=63>d`823g=z{8o86=4<{<3fg?70j27:n84k5:?2f3{t:;=1<707<5;9;6<9m;|q163<72;q6>9?5509>67`=9>h0q~<=5;296~;5<90>=63=2d823g=z{;8?6=4={<00b?363489h7?8b:p675=838p1?=j:438974d28=i7p}=2383>7}:::n19<5223`952d52z?17f<29279>l4>7c9~w4e42909w0?j1;72?87dl3;41e3ty:o<4?:3y>5a`==816=nl516`8yv7d83:1>v3>dd865>;6kh0:;o5rs0`e>5<5s4;oh7;>;<3`=?70j2wx=ok50;0x94bd2<;01{t9kk1<707<58i?6<9m;|q2g`<728q6=i6516`8yv4ck3:19v3>ce865>;5m?0:;o521979`1=::>l1h:5238397==z{8l?6=4={<3`g?3634;397?84:p5c3=838p1128=?7p}>f783>7}:9jk19<52195952252z?2g<<2927:454>759~w4`?2909w0?l8;72?87?13;<86s|1g;94?4|58i<68?4=0:b>4133ty:jl4?:3y>5f0==816=5l51668yv7aj3:1>v3>c4865>;60j0:;95rs0d`>5<5s4;h87;>;<3;`?70<2wx?;=50;6x97552<;01>8l:05a?87?m3n?70=61;61?xu5=>0;6?u2223914=:91o1=::4}r06{t:07<583:6<9;;|q11g<72;q6>?j5509>5<4=9>>0q~<:c;296~;5:j0>=63>928231=z{;?o6=4={<01f?3634;287?84:p60c=838p1?43|5;n96964=3f2>1><5;im6964=3af>1><5;n;6964=3ag>1><5;ih6964=3ab>1><5;i26964=3aa>1><5;o=6964=3g6>1><5;o?6964=3g0>1><5;o96964=3g2>1><5;o;6964=3fe>1><5;nn6964=3fg>1><5;<:6<9;;|q1e4<72;q6>i<5509>6gb=9>>0q~p1?j>:05a?84b=3?:70<62;f5?84e;3n?7p}=9d83>7}::jl19<522cc952254z?1gc<6?k16>h=5509>6<7=l?16>lh5d59~w7?c2909w06a6==816>ol51668yv4d>3:18v3=d1823g=::l>19<522839`2=::k;1h95rs3;`>5<5s48hh7;>;<0an=50;6x97ec28=i7083n=707c9>6`6==816>5h5d69>6d?=l=1v?76:18184di3?:70{t:j:1<7:t=3ab>41e348oi7;>;<0;a?b2348j97j;;|q1==<72;q6>n75509>6g2=9>>0q~p1?mm:05a?84cn3?:70<7f;f5?84f?3n?7p}=b383>7}::kn18l522c0952252z?1fa<6:=16>ok51668yv4e83:1?v3=bb87e>;5j;0?m63=b18231=z{;h86=4<{<0ag?75<279n?4>7e9>6g5=9>>0q~;5il0:;95rs3`2>5<4s48in7?=4:?1f5<6?m16>o?51668yv4fk3:1?v3=b`87e>;5il0?m63=ab8231=z{;km6=4<{<0ae?75<279mh4>7e9>6d`=9>>0q~;5ih0:;95rs3cg>5<4s48i57?=4:?1ef<6?m16>lj51668yv4f03:1?v3=b987e>;5ih0?m63=a98231=z{;ki6=4<{<0a7e9>6dd=9>>0q~0?m63=a987e>;5i?0:;95rs3c:>5<4s48i;7?=4:?1e=<6?m16>l751668yv4f<3:1?v3=b787e>;5i?0?m63=a58231=z{;k<6=4<{<0a2?75<279m;4>7e9>6d1=9>>0q~;5i;0:;95rs3c6>5<4s48i97?=4:?1e1<6?m16>l;51668yv4f;3:1?v3=b58261=::h81=:j4=3c0>4133ty9ho4?:4y>6`3=9>h01<69:e6894>22m?01?9i:e4896?62:<0q~5<2s48n?7?8b:?2<=2785<4<4:p6a>=83?p1?k=:05a?87?13n?70?78;f6?840l3n<70=61;10?xu5l>0;68u22d3952d<582j6i:4=0::>a3<5;=o6i84=2;2>6455z?1a5<6?k16=5l5d59>5=g=l<16>:m5d69>7<7=;81v?j::18684cn3;8b8g0>;60k0o963=7b8g2>;41808<6s|2e694?3|5;nn6<9m;<3;`?b334;3o7j:;<04f?b13492=7ij516`894>c2m?01?9m:e7896?62;o0q~<97;296~;5>?0>=63=698231=z{;<=6=47{<052?70j279:84k5:?12f279:54k6:?127279:<4k7:?11c=}::?91=:l4=346>a2<5;a3<5;<96i;4=342>a0<5;?m6i84=343>a053z?12d<29279:44:1:?12f<6?=1v?86:18184113;{t;0<1<7?k{<1787:7;<166?2?349>?7:7;<161?2?349>:7:7;<163?2?349>47:7;<16=?2?349>m7:7;<15g?2?349=n7:7;<15e?2?349=57:7;<15?l:18185303?:70=<5;340>{t;:l1<7:t=26;>41e349>m7;>;<13g?b23498:7j;;|q05g<72;q6?995509>762=9>>0q~=0:;o5234;914=:;9h1h:5233a9`1=z{:;j6=4={<172?363498?7?84:p76b=83>p1>:9:05a?85203?:70=?b;f5?855i3n?7p}<1883>7}:;=?19<52320952254z?000<6?k16?895509>75g=l>16??65d59~w67?2909w0=;4;72?85493;<86s|32`94?2|5:>?6<9m;<162?36349;m7j9;<112?b33ty8=:4?:3y>715==816?>>51668yv54i3:18v3<42823g=:;1h95rs236>5<5s49?=7;>;<11a?70<2wx?>650;6x962628=i70=:3;72?85703n<70==0;f7?xu49=0;6?u2352914=:;;n1=::4}r103?6=7c9>704==816?=65d79>74c=l=1v>?9:181853:3?:70==f;340>{t;:31<7:t=261>41e349>87;>;<13=?b13499>7j;;|q06g<72;q6?>;54`9>77d=9>>0q~=<6;296~;4;<0:>952324952253z?071<3i278>o4;a:?06<<6?=1v>4;a:?06<<3i278>:4>759~w64f2908w0=<3;310>;4:00:;i5233c952253z?077<3i278>:4;a:?060<6?=1v><7:180854:3;9863<26823a=:;;21=::4}r117?6=;r78?<4;a:?060<3i278>>4>759~w6412908w0=<1;310>;4:<0:;i52334952253z?075<3i278>>4;a:?064<6?=1v><;:18085483;9863<22823a=:;;>1=::4}r12b?6=;r78>k4;a:?064<3i278=k4>759~w6452908w0==f;310>;4:80:;i52330952253z?06`<3i278=k4;a:?05a<6?=1v>i4>259>74b=9>n01>?j:057?xu4u2346952d<5:<=68?4=3d5>a053z?017<6?k16?;:5509>6c3=l?1v>:n:180852;3;;5n<0o86s|35a94?5|5:?>6<9m;<153?36348m:7j;;|q00a<72:q6?88516`8960?2<;01?h8:e48yv53m3:1?v3<56823g=:;?319<522g59`1=z{:>m6=4<{<162wx?8>50;1x963>28=i70=9b;72?84a03n?7p}<5083>6}:;07<5;l26i:4}r156?6=7c9>5=`=l=16=5k5d49>7<7=<91v>8>:187851i3;918g0>;60o0o963<9080b>{t;?:1<7:t=24:>41e34;2=7j;;<3:4?b23492=7=j;|q01c<72=q6?;6516`894?52m>01<7>:e7896?62:n0q~=:e;290~;4>>0:;o521819`1=:9081h85238397f=z{:?o6=4;{<152?70j27:594k4:?2=6p1>8::05a?87>=3n?70?64;f6?85>939j7p}<5c83>6}:;?>1=:l4=0;6>a3<5:3:6>74}r1:1?6=9:q6?:85499>723=<116?::5499>725=<116?:<5499>727=<116?:>5499>73`=<116?:k5499>72b=<116?:m5499>72d=<116?:o5499>72?=<116?:65499>721=<116?;k5499>73b=<116>;<51668yv5??3:1>v3<77865>;4180h=6s|39494?4|5:=>68?4=2;2><252z?031<292785<462:p7=2=838p1>9<:43896?620;0q~=73;296~;4?;0>=63<908:4>{t;181<707<5:3:65h4}r1;5?6=:r78;=4:1:?0=450;0x960a2<;01>7>:8f8yv5>83:1>v3<7d865>;41802o6s|39d94?4|5:=o68?4=2;2>g`52z?03f<292785<46b:p7=b=838p1>9m:43896?620k0q~=7c;296~;4?h0>=63<908:=>{t;1h1<707<5:3:6464}r1;e?6=:r78;54:1:?0=4<>?2wx?5750;0x96102<;01>7>:848yv5?03:1>v3<6d865>;4180296s|36d94?4|5:=bj7>52z?0=6249~w6?52909w0=63;340>;4180h46s|38694?4|5;3<6i:4=37e>4423ty::94?:3y>5g1=l?16=o;51378yv71>3:1>v3>b88g2>;6j?0:>85rs04;>5<5s48:i7j9;<02g?75=2wx=;o50;0x97472m<01??k:006?x{t<9l1<7{t<9n1<7{t<9i1<7{t<9h1<7{t<9k1<7{t<931<7{t<9=1<7{t<9<1<7{t<9?1<7{t<9>1<7{t<991<7{t<981<7{t<9;1<7{t<9:1<7{t;ol1<7{t;oo1<7{t;oi1<7{t;oh1<7{t;ok1<7{t;o31<7{t;o21<77)=nb;36g>{t;o=1<7{t;o<1<7{t;o?1<7{t;o>1<7{t;o91<7{t<8<1<7{t<8?1<7{t<8>1<7{t<891<7{t<881<7{t<8;1<7{t<8:1<77)=nb;35<>{t<921<7{t;on1<7{t;o81<7{t<121<7{t<0?1<77)=nb;301>{t<0=1<7{t<0o1<7{t{t<:81<7{t<::1<7{t<;l1<7{t<;o1<7{t<;n1<7{t<;i1<7{t<;h1<7{t<;k1<7{t<:h1<7{t<:k1<7{t<:31<7{t<:21<77)=nb;372>{t<:=1<7{t<:<1<7{t<:?1<7{t<:>1<7{t<:91<7{t<;31<7{t<:n1<7{t<=91<787)=nb;37b>{zf1n?6=4={I1bg>{i0m?1<7c?3:1>vFol;|l;`d<72;qC?lm4}o:gf?6=:rB8mn5rn9f`>5<5sA9jo6sa8ef94?4|@:kh7p`7dd83>7}O;hi0qc6kf;296~N4ij1vb5k?:181M5fk2we4h?50;0xL6gd3td3i?4?:3yK7de52zJ0ef=zf1o?6=4={I1bg>{i0l?1<7b?3:1>vFol;|l;ad<72;qC?lm4}o:ff?6=:rB8mn5rn9g`>5<5sA9jo6sa8df94?4|@:kh7p`7ed83>7}O;hi0qc6jf;296~N4ij1vb5h?:181M5fk2we4k?50;0xL6gd3td3j?4?:3yK7de52zJ0ef=zf1l?6=4={I1bg>{i0o?1<7a?3:1>vFol;|l;bd<72;qC?lm4}o:ef?6=:rB8mn5rn9d`>5<5sA9jo6sa8gf94?4|@:kh7p`7fd83>7}O;hi0qc6if;296~N4ij1vb4>?:181M5fk2we5=?50;0xL6gd3td252zJ0ef=zf0:?6=4={I1bg>{i19?1<78?0;6?uG3`a8yk?7?3:1>vFol;|l:4d<72;qC?lm4}o;3f?6=:rB8mn5rn82`>5<5sA9jo6sa91f94?4|@:kh7p`60d83>7}O;hi0qc7?f;296~N4ij1vb4??:181M5fk2we;;o50;3xL6gd3td51zJ0ef=zf>k26=4>{I1bg>{i?hk1<7?tH2c`?xh0ik0;6ol;|l4ec<728qC?lm4}o5a4?6=9rB8mn5rn6`2>5<6sA9jo6sa7c094?7|@:kh7p`8b283>4}O;hi0qc9m4;295~N4ij1vb:l::182M5fk2we;o850;3xL6gd3td51zJ0ef=zf>h26=4>{I1bg>{i?kk1<7?tH2c`?xh0jk0;6ol;|l4fc<728qC?lm4}o5`4?6=9rB8mn5rn6a2>5<6sA9jo6sa7b094?7|@:kh7p`8c283>4}O;hi0qc9l4;295~N4ij1vb:m::182M5fk2we;n850;3xL6gd3td51zJ0ef=zf>i26=4>{I1bg>{i?jk1<7?tH2c`?xh0kk0;6ol;|l4gc<728qC?lm4}o5g4?6=9rB8mn5rn6f2>5<6sA9jo6sa7e094?7|@:kh7p`8d283>4}O;hi0qc9k4;295~N4ij1vb:j::182M5fk2we;i850;3xL6gd3td51zJ0ef=zf>n26=4>{I1bg>{i?mk1<7?tH2c`?xh0lk0;6ol;|l4`c<728qC?lm4}o5f4?6=9rB8mn5rn6g2>5<6sA9jo6sa7d094?7|@:kh7p`8e283>4}O;hi0qc9j4;295~N4ij1vb:k::182M5fk2we;h850;3xL6gd3td51zJ0ef=zf>o26=4>{I1bg>{i?lk1<7?tH2c`?xh0mk0;6ol;|l4ac<728qC?lm4}o5e4?6=9rB8mn5rn6d2>5<6sA9jo6sa7g094?7|@:kh7p`8f283>4}O;hi0qc9i4;295~N4ij1vb:h::182M5fk2we;k850;3xL6gd3td51zJ0ef=zf>l26=4>{I1bg>{i?ok1<7?tH2c`?xh0nk0;6ol;|l4bc<728qC?lm4}o:34?6=9rB8mn5rn922>5<6sA9jo6sa81094?7|@:kh7p`70283>4}O;hi0qc6?4;295~N4ij1vb5>::182M5fk2we4=850;3xL6gd3td3<:4?:0yK7de51zJ0ef=zf1:26=4>{I1bg>{i09k1<7?tH2c`?xh?8k0;67k3:1=vFol;|l;4c<728qC?lm4}o:24?6=9rB8mn5rn932>5<6sA9jo6sa80094?7|@:kh7p`71283>4}O;hi0qc6>4;295~N4ij1vb5?::182M5fk2we4<850;3xL6gd3td3=:4?:0yK7de51zJ0ef=zf1;26=4>{I1bg>{i08k1<7?tH2c`?xh?9k0;66k3:1=vFol;|l;5c<728qC?lm4}o:14?6=9rB8mn5rn902>5<6sA9jo6sa83094?7|@:kh7p`72283>4}O;hi0qc6=4;295~N4ij1vb5<::182M5fk2we4?850;3xL6gd3td3>:4?:0yK7de51zJ0ef=zf1826=4>{I1bg>{i0;k1<7?tH2c`?xh?:k0;65k3:1=vFol;|l;6c<728qC?lm4}o:04?6=9rB8mn5rn912>5<6sA9jo6sa82094?7|@:kh7p`73283>4}O;hi0qc6<4;295~N4ij1vb5=::182M5fk2we4>850;3xL6gd3td3?:4?:0yK7de51zJ0ef=zf1926=4>{I1bg>{i0:k1<7?tH2c`?xh?;k0;64k3:1=vFol;|l;7c<728qC?lm4}o:74?6=9rB8mn5rn962>5<6sA9jo6sa85094?7|@:kh7p`74283>4}O;hi0qc6;4;295~N4ij1vb5:::182M5fk2we49850;3xL6gd3td38:4?:0yK7de51zJ0ef=zf1>26=4>{I1bg>{i0=k1<7?tH2c`?xh?3k3:1=vFol;|l;0c<728qC?lm4}o:64?6=9rB8mn5rn972>5<6sA9jo6sa84094?7|@:kh7p`75283>4}O;hi0qc6:4;295~N4ij1vb5;::182M5fk2we48850;3xL6gd3td39:4?:0yK7de47>51zJ0ef=zf1?26=4>{I1bg>{i02k3:1=vFol;|l;1c<728qC?lm4}o:54?6=9rB8mn5rn942>5<6sA9jo6sa87094?7|@:kh7p`76283>4}O;hi0qc694;295~N4ij1vb58::182M5fk2we4;850;3xL6gd3td3::4?:0yK7de51zJ0ef=zf1<26=4>{I1bg>{i0?k1<7?tH2c`?xh?>k0;61k3:1=vFol;|l;2c<728qC?lm4}o:44?6=9rB8mn5rn952>5<6sA9jo6sa86094?7|@:kh7p`77283>4}O;hi0qc684;295~N4ij1vb59::182M5fk2we4:850;3xL6gd3td3;:4?:0yK7de51zJ0ef=zf1=26=4>{I1bg>{i0>k1<7?tH2c`?xh??k0;60k3:1=vFol;|l;3c<728qC?lm4}o:;4?6=9rB8mn5rn9:2>5<6sA9jo6sa89094?7|@:kh7p`78283>4}O;hi0qc674;295~N4ij1vb56::182M5fk2we45850;3xL6gd3td34:4?:0yK7de51zJ0ef=zf1226=4>{I1bg>{i01k1<7?tH2c`?xh?0k0;6?k3:1=vFc290:wE=nc:m<=c=83;pD>ol;|l;5<6sA9jo6sa88094?7|@:kh7p`79283>4}O;hi0qc664;295~N4ij1vb57::182M5fk2we44850;3xL6gd3td35:4?:0yK7de51zJ0ef=zf1326=4>{I1bg>{i00k1<7?tH2c`?xh?1k0;6>k3:1=vFol;|l;=c<728qC?lm4}o:b4?6=9rB8mn5rn9c2>5<6sA9jo6sa8`094?7|@:kh7p`7a283>4}O;hi0qc6n4;295~N4ij1vb5o::182M5fk2we4l850;3xL6gd3td3m:4?:0yK7de51zJ0ef=zf1k26=4>{I1bg>{i0hk1<7?tH2c`?xh?ik0;6fk3:1=vFol;|l;ec<728qC?lm4}o:a4?6=9rB8mn5rn9`2>5<6sA9jo6sa8c094?7|@:kh7p`7b283>4}O;hi0qc6m4;295~N4ij1vb5l::182M5fk2we4o850;3xL6gd3td3n:4?:0yK7de51zJ0ef=zf1h26=4>{I1bg>{i0kk1<7?tH2c`?xh?jk0;6ek3:1=vFol;|l;fc<728qC?lm4}o:`4?6=9rB8mn5rn9a2>5<6sA9jo6sa8b094?7|@:kh7p`7c283>4}O;hi0qc6l4;295~N4ij1vb5m::182M5fk2we4n850;3xL6gd3td3o:4?:0yK7de51zJ0ef=zf1i26=4>{I1bg>{i0jk1<7?tH2c`?xh?kk0;6dk3:1=vFol;|l;gc<728qC?lm4}o:g4?6=9rB8mn5rn9f2>5<6sA9jo6sa8e094?7|@:kh7p`7d283>4}O;hi0qpsr@AAxe2e==ml>?i==}ABA5{GHYqvLM \ No newline at end of file diff --git a/usrp2/coregen/fifo_xlnx_512x36_2clk_36to18.v b/usrp2/coregen/fifo_xlnx_512x36_2clk_36to18.v index f7f6e7e9f..6f849b24c 100644 --- a/usrp2/coregen/fifo_xlnx_512x36_2clk_36to18.v +++ b/usrp2/coregen/fifo_xlnx_512x36_2clk_36to18.v @@ -61,7 +61,7 @@ output full; // synthesis translate_off - FIFO_GENERATOR_V4_4 #( + FIFO_GENERATOR_V4_3 #( .C_COMMON_CLOCK(0), .C_COUNT_TYPE(0), .C_DATA_COUNT_WIDTH(9), diff --git a/usrp2/coregen/fifo_xlnx_512x36_2clk_36to18.veo b/usrp2/coregen/fifo_xlnx_512x36_2clk_36to18.veo new file mode 100644 index 000000000..5c2da4b97 --- /dev/null +++ b/usrp2/coregen/fifo_xlnx_512x36_2clk_36to18.veo @@ -0,0 +1,51 @@ +/******************************************************************************* +* This file is owned and controlled by Xilinx and must be used * +* solely for design, simulation, implementation and creation of * +* design files limited to Xilinx devices or technologies. Use * +* with non-Xilinx devices or technologies is expressly prohibited * +* and immediately terminates your license. * +* * +* XILINX IS PROVIDING THIS DESIGN, CODE, OR INFORMATION "AS IS" * +* SOLELY FOR USE IN DEVELOPING PROGRAMS AND SOLUTIONS FOR * +* XILINX DEVICES. BY PROVIDING THIS DESIGN, CODE, OR INFORMATION * +* AS ONE POSSIBLE IMPLEMENTATION OF THIS FEATURE, APPLICATION * +* OR STANDARD, XILINX IS MAKING NO REPRESENTATION THAT THIS * +* IMPLEMENTATION IS FREE FROM ANY CLAIMS OF INFRINGEMENT, * +* AND YOU ARE RESPONSIBLE FOR OBTAINING ANY RIGHTS YOU MAY REQUIRE * +* FOR YOUR IMPLEMENTATION. XILINX EXPRESSLY DISCLAIMS ANY * +* WARRANTY WHATSOEVER WITH RESPECT TO THE ADEQUACY OF THE * +* IMPLEMENTATION, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OR * +* REPRESENTATIONS THAT THIS IMPLEMENTATION IS FREE FROM CLAIMS OF * +* INFRINGEMENT, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS * +* FOR A PARTICULAR PURPOSE. * +* * +* Xilinx products are not intended for use in life support * +* appliances, devices, or systems. Use in such applications are * +* expressly prohibited. * +* * +* (c) Copyright 1995-2007 Xilinx, Inc. * +* All rights reserved. * +*******************************************************************************/ +// The following must be inserted into your Verilog file for this +// core to be instantiated. Change the instance name and port connections +// (in parentheses) to your own signal names. + +//----------- Begin Cut here for INSTANTIATION Template ---// INST_TAG +fifo_xlnx_512x36_2clk_36to18 YourInstanceName ( + .din(din), // Bus [35 : 0] + .rd_clk(rd_clk), + .rd_en(rd_en), + .rst(rst), + .wr_clk(wr_clk), + .wr_en(wr_en), + .dout(dout), // Bus [17 : 0] + .empty(empty), + .full(full)); + +// INST_TAG_END ------ End INSTANTIATION Template --------- + +// You must compile the wrapper file fifo_xlnx_512x36_2clk_36to18.v when simulating +// the core, fifo_xlnx_512x36_2clk_36to18. When compiling the wrapper file, be sure to +// reference the XilinxCoreLib Verilog simulation library. For detailed +// instructions, please refer to the "CORE Generator Help". + diff --git a/usrp2/coregen/fifo_xlnx_512x36_2clk_36to18.xco b/usrp2/coregen/fifo_xlnx_512x36_2clk_36to18.xco index a1c75dc39..9f47c073c 100644 --- a/usrp2/coregen/fifo_xlnx_512x36_2clk_36to18.xco +++ b/usrp2/coregen/fifo_xlnx_512x36_2clk_36to18.xco @@ -1,7 +1,7 @@ ############################################################## # # Xilinx Core Generator version K.39 -# Date: Thu Jul 29 18:10:59 2010 +# Date: Tue Aug 10 23:09:39 2010 # ############################################################## # @@ -32,7 +32,7 @@ SET verilogsim = true SET vhdlsim = false # END Project Options # BEGIN Select -SELECT Fifo_Generator family Xilinx,_Inc. 4.4 +SELECT Fifo_Generator family Xilinx,_Inc. 4.3 # END Select # BEGIN Parameters CSET almost_empty_flag=false @@ -78,5 +78,5 @@ CSET write_data_count=false CSET write_data_count_width=9 # END Parameters GENERATE -# CRC: 392ad537 +# CRC: b2f58113 diff --git a/usrp2/coregen/fifo_xlnx_512x36_2clk_36to18_fifo_generator_v4_3_xst_1.lso b/usrp2/coregen/fifo_xlnx_512x36_2clk_36to18_fifo_generator_v4_3_xst_1.lso new file mode 100644 index 000000000..f1a6f7899 --- /dev/null +++ b/usrp2/coregen/fifo_xlnx_512x36_2clk_36to18_fifo_generator_v4_3_xst_1.lso @@ -0,0 +1,3 @@ +blkmemdp_v6_2 +blk_mem_gen_v2_6 +fifo_generator_v4_3 diff --git a/usrp2/coregen/fifo_xlnx_512x36_2clk_36to18_fifo_generator_v4_3_xst_1.ngc_xst.xrpt b/usrp2/coregen/fifo_xlnx_512x36_2clk_36to18_fifo_generator_v4_3_xst_1.ngc_xst.xrpt new file mode 100644 index 000000000..3abf04253 --- /dev/null +++ b/usrp2/coregen/fifo_xlnx_512x36_2clk_36to18_fifo_generator_v4_3_xst_1.ngc_xst.xrpt @@ -0,0 +1,101 @@ + + + + + + +
+ + + + + + + + + + + + + + +
+
+ + + + + + + + + + + +
+
+ + + +
+
+
+
+
+
+
+
+ + + + +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + +
+
+
+ + + + + + + +
+
+
+
+
+ + + +
+ + + diff --git a/usrp2/coregen/fifo_xlnx_512x36_2clk_36to18_flist.txt b/usrp2/coregen/fifo_xlnx_512x36_2clk_36to18_flist.txt new file mode 100644 index 000000000..aadac46c0 --- /dev/null +++ b/usrp2/coregen/fifo_xlnx_512x36_2clk_36to18_flist.txt @@ -0,0 +1,8 @@ +# Output products list for +fifo_xlnx_512x36_2clk_36to18.ngc +fifo_xlnx_512x36_2clk_36to18.v +fifo_xlnx_512x36_2clk_36to18.veo +fifo_xlnx_512x36_2clk_36to18.xco +fifo_xlnx_512x36_2clk_36to18_fifo_generator_v4_3_xst_1.ngc_xst.xrpt +fifo_xlnx_512x36_2clk_36to18_flist.txt +fifo_xlnx_512x36_2clk_36to18_xmdf.tcl diff --git a/usrp2/coregen/fifo_xlnx_512x36_2clk_36to18_readme.txt b/usrp2/coregen/fifo_xlnx_512x36_2clk_36to18_readme.txt new file mode 100644 index 000000000..568c757ec --- /dev/null +++ b/usrp2/coregen/fifo_xlnx_512x36_2clk_36to18_readme.txt @@ -0,0 +1,39 @@ +The following files were generated for 'fifo_xlnx_512x36_2clk_36to18' in directory +/home/matt/fpgapriv/usrp2/coregen/: + +fifo_xlnx_512x36_2clk_36to18.ngc: + Binary Xilinx implementation netlist file containing the information + required to implement the module in a Xilinx (R) FPGA. + +fifo_xlnx_512x36_2clk_36to18.v: + Verilog wrapper file provided to support functional simulation. + This file contains simulation model customization data that is + passed to a parameterized simulation model for the core. + +fifo_xlnx_512x36_2clk_36to18.veo: + VEO template file containing code that can be used as a model for + instantiating a CORE Generator module in a Verilog design. + +fifo_xlnx_512x36_2clk_36to18.xco: + CORE Generator input file containing the parameters used to + regenerate a core. + +fifo_xlnx_512x36_2clk_36to18_fifo_generator_v4_3_xst_1.ngc_xst.xrpt: + Please see the core data sheet. + +fifo_xlnx_512x36_2clk_36to18_flist.txt: + Text file listing all of the output files produced when a customized + core was generated in the CORE Generator. + +fifo_xlnx_512x36_2clk_36to18_readme.txt: + Text file indicating the files generated and how they are used. + +fifo_xlnx_512x36_2clk_36to18_xmdf.tcl: + ISE Project Navigator interface file. ISE uses this file to determine + how the files output by CORE Generator for the core can be integrated + into your ISE project. + + +Please see the Xilinx CORE Generator online help for further details on +generated files and how to use them. + diff --git a/usrp2/coregen/fifo_xlnx_512x36_2clk_36to18_xmdf.tcl b/usrp2/coregen/fifo_xlnx_512x36_2clk_36to18_xmdf.tcl new file mode 100644 index 000000000..09248b321 --- /dev/null +++ b/usrp2/coregen/fifo_xlnx_512x36_2clk_36to18_xmdf.tcl @@ -0,0 +1,68 @@ +# The package naming convention is _xmdf +package provide fifo_xlnx_512x36_2clk_36to18_xmdf 1.0 + +# This includes some utilities that support common XMDF operations +package require utilities_xmdf + +# Define a namespace for this package. The name of the name space +# is _xmdf +namespace eval ::fifo_xlnx_512x36_2clk_36to18_xmdf { +# Use this to define any statics +} + +# Function called by client to rebuild the params and port arrays +# Optional when the use context does not require the param or ports +# arrays to be available. +proc ::fifo_xlnx_512x36_2clk_36to18_xmdf::xmdfInit { instance } { +# Variable containg name of library into which module is compiled +# Recommendation: +# Required +utilities_xmdf::xmdfSetData $instance Module Attributes Name fifo_xlnx_512x36_2clk_36to18 +} +# ::fifo_xlnx_512x36_2clk_36to18_xmdf::xmdfInit + +# Function called by client to fill in all the xmdf* data variables +# based on the current settings of the parameters +proc ::fifo_xlnx_512x36_2clk_36to18_xmdf::xmdfApplyParams { instance } { + +set fcount 0 +# Array containing libraries that are assumed to exist +# Examples include unisim and xilinxcorelib +# Optional +# In this example, we assume that the unisim library will +# be magically +# available to the simulation and synthesis tool +utilities_xmdf::xmdfSetData $instance FileSet $fcount type logical_library +utilities_xmdf::xmdfSetData $instance FileSet $fcount logical_library unisim +incr fcount + +utilities_xmdf::xmdfSetData $instance FileSet $fcount relative_path fifo_xlnx_512x36_2clk_36to18.ngc +utilities_xmdf::xmdfSetData $instance FileSet $fcount type ngc +incr fcount + +utilities_xmdf::xmdfSetData $instance FileSet $fcount relative_path fifo_xlnx_512x36_2clk_36to18.v +utilities_xmdf::xmdfSetData $instance FileSet $fcount type verilog +incr fcount + +utilities_xmdf::xmdfSetData $instance FileSet $fcount relative_path fifo_xlnx_512x36_2clk_36to18.veo +utilities_xmdf::xmdfSetData $instance FileSet $fcount type verilog_template +incr fcount + +utilities_xmdf::xmdfSetData $instance FileSet $fcount relative_path fifo_xlnx_512x36_2clk_36to18.xco +utilities_xmdf::xmdfSetData $instance FileSet $fcount type coregen_ip +incr fcount + +utilities_xmdf::xmdfSetData $instance FileSet $fcount relative_path fifo_xlnx_512x36_2clk_36to18_fifo_generator_v4_3_xst_1.ngc_xst.xrpt +utilities_xmdf::xmdfSetData $instance FileSet $fcount type AnyView +incr fcount + +utilities_xmdf::xmdfSetData $instance FileSet $fcount relative_path fifo_xlnx_512x36_2clk_36to18_xmdf.tcl +utilities_xmdf::xmdfSetData $instance FileSet $fcount type AnyView +incr fcount + +utilities_xmdf::xmdfSetData $instance FileSet $fcount associated_module fifo_xlnx_512x36_2clk_36to18 +incr fcount + +} + +# ::gen_comp_name_xmdf::xmdfApplyParams -- cgit v1.2.3 From ff21cc7592573249938022fdcf118d73928a037e Mon Sep 17 00:00:00 2001 From: Ian Buckley Date: Thu, 12 Aug 2010 12:00:01 -0700 Subject: Found bug due to not accounting for the correct number of possible in flight READ operations that can be in the extfifo pipeline. Regenerated fifo_xlnx_512x36_2clk_18to36 to include prog_full output triggered at 1017 so that there are 6 empty spaces to accept in flight read data upon completion. Had to generate the FIFO using Coregen from ISE12.1 due to 10.1 verion not working correctly in FPGA Still have to tackle making this simulate in Icarus --- usrp2/coregen/fifo_xlnx_512x36_2clk_18to36.ngc | 4 +- usrp2/coregen/fifo_xlnx_512x36_2clk_18to36.v | 68 ++++++++++++++------------ usrp2/coregen/fifo_xlnx_512x36_2clk_18to36.xco | 18 ++++--- usrp2/coregen/fifo_xlnx_512x36_2clk_36to18.ngc | 2 +- usrp2/extramfifo/ext_fifo.v | 15 ++++-- usrp2/extramfifo/ext_fifo_tb.v | 39 +++++++++++++++ usrp2/extramfifo/nobl_fifo.v | 16 +++--- 7 files changed, 110 insertions(+), 52 deletions(-) diff --git a/usrp2/coregen/fifo_xlnx_512x36_2clk_18to36.ngc b/usrp2/coregen/fifo_xlnx_512x36_2clk_18to36.ngc index 376e18c57..657b1aa98 100644 --- a/usrp2/coregen/fifo_xlnx_512x36_2clk_18to36.ngc +++ b/usrp2/coregen/fifo_xlnx_512x36_2clk_18to36.ngc @@ -1,3 +1,3 @@ XILINX-XDB 0.1 STUB 0.1 ASCII -XILINX-XDM V1.4e -$4264g<,[o}e~g`n;"2*413&;$>"9 > %0:?*rjx&Uhk"hffn]{hk~X=88s?;Q=cmi\5=rh;?$ekb?40493456712:;<=>?01274>6789:;<=>?0123456789:;<=>?0123456789:;<=>?0123456789:;<=>?0123457<9:1:"=?<;029MKVR\3KOH_O39;2=5`=683CE\XZ5psmd[cskdV~c~h}g<883:73<990BB][[:qplcZ`rdeUdk|h^cpw`ts400;2?;4118JJUSS2yxdkRhzlm]wlwct`Vdnklzj<883:4?<990DYY^ZT;fbpdYdg|d044?>0a855113922?OIX\^1HDO31483:45<9?0DYY^ZT;FLE972294:>6?7:HLSQQ11:025>4=AGZ^X7JFP@>2>586:281CXZ_UU8GKUG;93:5=?5<2;KMTPR=L@H7?<4?>018775833:99?<:4378LQQVR\3ndyy2<5;2=6>5?l29x>=>?ff662(363=808;58JJUSS2MC[N1=50?31?10>5833<>><<592:4:0>0>1?>0:4O>2:4F0>>3:8;0595601;1?<0330<=5<<49;KMTPR=IMNYN1650?3f?<?=AGZ^X7~}of]fiur~W}byi~fParqfvq:?29499675IORVP?vugnUna}zv_ujqavnXflmjxh27:1<2f>?=G\^[YY4}d^fbpdYdg|d054?>99B@ATF49437LJKR@>2:==FLMXJ0?07;@FGVD:4611JHI\N<5<;?DBCZH6>255NDEPB838?3HNO^L28>99B@ATF414j7LJKR@>:>58?3HNO^L26>99B@ATE49437LJKRC>2:==FLMXI0?07;@FGVG:4611JHI\M<5<;?DBCZK6>255NDEPA838?3HNO^O28>`9B@ATE410;255NDEPA8=8>3HYRBNQ]EF38F6=E];20NX]PIODL5>E33JK3M?5LE008GMCDCVFBOH@\E^VZT@40OAEN4:AOOG53:2=CAH6:<394DHC?54803MCJ0<<17:FJE9746>1OEL2>4?;8@LG;9<0;2:5KI@>21;069GMG:6;7=0HDL315<4?AOE48?5;6JFB=35:2=CAK6:;394DH@?5=803MCI0<716:FJF979?2NBN169GMG:597=0HDL323<4?AOE4;95;6JFB=07:2=CAK699394DH@?63803MCI0?917:FJF94?6>1OEO2=9?48@LD;:7=0HDL331<:?AOE4:;1<394DH@?74813MCI0>09;EKA81813MCI0809;EKA83813MCI0:09;EKA8=813MCI0408;EKSE96912NB\L2>:1<4?AOWI5;5;6JFPC>3:2=CAYH7=394DHRA878>3MC[N1=50?58@LVE4:4=7IAN<1<4?AIF48:5;6J@A=32:2=CGH6:>394DNC?56803MEJ0<:19:FLE972294<7IAN<07=2>BHI5;5:6J@A=0=2>BHI595:6J@A=6=2>BHI5?5:6J@A=4=2>BHI5=5:6J@A=:=2>BHI535:6J@B=2=3>BHJ5;;2:5KOC>25;169GKG:6=7=0HBL317<4?AIE48=5;6J@B=3;:2=CGK6:5384DN@?5;1=08;EMA8779?2NDN1<=>69GKG:5;7=0HBL325<4?AIE4;?5;6J@B=05:2=CGK69;394DN@?6=803MEI0?716:FLF949?2NDN1=?>89GKG:493:5;6J@B=12:3=CGK682;5KOC>7:3=CGK6>2;5KOC>5:3=CGK6<2;5KOC>;:3=CGK622:5KOQC?4;?69GKUG;97=0HB^M<1<4?AIWJ5;5;6J@PC>1:<=CGYH7?7>17:FLTG:4681N?6KAA29FJG26H72:DG7>@CK=1MHNK<;GFS0>@CXL?0Jlb|e09D7>AIL;1B37D@FTQ]31==NF@^[S=87;HLJPUY7?01BBDZ\T@VF3>OIA]U;<:5FNHV\441M7:KMMQY7K>1BBDZP0E58MKOSW9O<7D@FT^2E3>OIA]U:<:5FNHV\541469JJLRX9<=0ECG[_044?LHN\V;<;6GAIU]2<2=NF@^T=494IOKW[4G03@DBXR?M7:KMMQY6K>1BBDZP1E58MKOSW8O<7D@FT^3E3>OIA]U9<:5FNHV\641494IOKW[7G03@DBXR1BBDZP2E58MKOSW;O<7D@FT^0E3>OIA]U8<:5FNHV\741<8;HLJPZ54?2CEEYQ<469JJLRX;<=0ECG[_244?LHN\V9<;6GAIU]0<2=NF@^T?494IOKW[6G03@DBXR=M7:KMMQY4K>1BBDZP3E58MKOSW:O<7D@FT^1E2>OIA]UJ:6GAIU]A7>OHJ;1GE?5CO79OKDBBL>1GCJGLAM68HPR6<2F^X?84LTV1[I2JR\=<0@XZ;_M78IVAHF<1FYUMVc:ObnjtQm{ybccm4MhllvScu{`ee>6@>3:L241=I99;?7C??259M55533G;;895A1177?K77>=1E==9;;O33<1=I99387C?>4:L25521368J474<2D:=9:4N0360>H69?>0B259M57633G;9=95A1307?K75;=1E=?:;;O3111=I9;33G;95>5A1268J457<2D:?<:4N0110>H6;:>0B<=;4:L27023668J45?;2D:8>5A1418J4043G;829M5<53:L166=I::90B9:<;O657>H30:1E9=<4N708J24H?<:1E4;=4N951?K?43G3;j6@M_CWPTLHXX[E[_:5AEUULVN2PRdqvhq74:2_;#j|i.sd,cf~)keas#@v`r^pg[uhszVmhSua}0122[Wct}e~:??5Z0.eqb+ta'nis"nbdx.O{kwYulVzexQhc^zlv567:VXnxb{1208Q5)`zo$yj"ilx/aoo})JpfxT~iQnup\cfYg{:;<>Q]erwop4553\:$kh!rg-dg}(ddbr$Aua}_sf\tkruWniTtb|?016\V`urd};8>6[?/fpe*w`(ojr%oaew/LzlvZtcWyd~Ril_ymq4562W[oxyaz>339V4*aun'xm#jmw.bnh|*Kg{UyhR~ats]dgZ~hz9:;:R\jstnw564<]9%l~k }f.e`|+ekcq%Ftb|Pre]sjqtXojUsc>?06]Qavsk|8997X> gsd-vc)`kq$h`fv Mymq[rtXxg~ySjmPxnp3456XZly~`y?<2:W3+bta&{l$knv!cmi{+H~hzV}yS}`{r^e`[}iu89::S_k|umv277=R8&myj#|i/fa{*fjlp&GscQxr^rmpwY`kVrd~=>?2^Pfwpjs9:80Y=!hrg,qb*adp'iggu!Bxnp\swYwf}xTknQwos2346YUmzgx<==;T2,cw`)zo%lou lljz,I}iuW~xT|cz}_fa\|jt789>T^h}zlu306>S7'nxm"h gbz-gim'Drd~Ry}_qlwvZadWqey<=>:_Sgpqir6;;1^<"i}f/pe+be&jf`t"Cwos]tvZvi|{UloRv`r1232ZTb{|f=><4U1-dvc(un&mht#mcky-N|jtX{U{by|Pgb]{kw678>UYi~{ct011?P6(o{l%~k!hcy,`hn~(EqeySz|Ppovq[beXpfx;<=6PRdqvhq7592_;#j|i.sd,cf~)keas#jPpovq[goi4949=6[?/fpe*w`(ojr%oaew/sf\tkruWkce0<0=1:W3+bta&{l$knv!cmi{+wbXxg~ySoga<3<15>S7'nxm"h gbz-gim'{nT|cz}_ckm868592_;#j|i.sd,cf~)keas#jPpovq[goi4=49=6[?/fpe*w`(ojr%oaew/sf\tkruWkce080=1:W3+bta&{l$knv!cmi{+wbXxg~ySoga<7<15>S7'nxm"h gbz-gim'{nT|cz}_ckm828592_;#j|i.sd,cf~)keas#jPpovq[goi4149<6[?/fpe*w`(ojr%oaew/sf\tkruWkceS= gsd-vc)`kq$h`fv re]sjqtXj`dT9?>4U1-dvc(un&mht#mcky-q`Zvi|{UiecQ9219V4*aun'xm#jmw.bnh|*tcWyd~Rlfn^514>S7'nxm"h gbz-gim'{nT|cz}_ckm[=413\:$kh!rg-dg}(ddbr$~iQnup\flhXpfx;<=>=7:W3+bta&{l$knv!cmi{+wbXxg~ySoga_ymq45679;<0Y=!hrg,qb*adp'iggu!}d^rmpwYeagUsc>?0004?P6(o{l%~k!hcy,`hn~(zmU{by|Pbhl\|jt789;:>;5Z0.eqb+ta'nis"nbdx.pg[uhszVhbbRv`r123671<]9%l~k }f.e`|+ekcq%yhR~ats]amkYg{:;1^<"i}f/pe+be&jf`t"|k_qlwvZdnfVrd~=>?3305?P6(o{l%~k!hcy,`hn~(zmU{by|Pbhl\|jt789>9;6[?/fpe*w`(ojr%oaew/sf\tkruWkceSua}0127570<]9%l~k }f.e`|+ekcq%yhR~ats]amkYg{:;<8<8;T2,cw`)zo%lou lljz,vaYwf}xTnd`Pxnp34536:?1^<"i}f/pe+be&jf`t"|k_qlwvZdnfVrd~=>?63a8Q5)`zo$yj"ilx/aoo})ulVzexQmio]{kw678?;:S^Y?2b9V4*aun'xm#jmw.bnh|*tcWyd~Rlfn^zlv567>8;T_Z?=7:W3+bta&{l$knv!cmi{+wbXxg~ySoga_ymq4561:;<0Y=!hrg,qb*adp'iggu!}d^rmpwYeagUsc>?0604?P6(o{l%~k!hcy,`hn~(zmU{by|Pbhl\|jt789=:>=5Z0.eqb+ta'nis"nbdx.pg[uhszVmh0=0=0:W3+bta&{l$knv!cmi{+wbXxg~ySjm31?03?P6(o{l%~k!hcy,`hn~(zmU{by|Pgb>1:76<]9%l~k }f.e`|+ekcq%yhR~ats]dg959:91^<"i}f/pe+be&jf`t"|k_qlwvZad4=49<6[?/fpe*w`(ojr%oaew/sf\tkruWni793328Q5)`zo$yj"ilx/aoo})ulVzexQhc=5=65=R8&myj#|i/fa{*fjlp&xoS}`{r^e`8=86n2_;#j|i.sd,cf~)keas#jPpovq[beX88l0Y=!hrg,qb*adp'iggu!}d^rmpwY`kV;:j6[?/fpe*w`(ojr%oaew/sf\tkruWniT>f:W3+bta&{l$knv!cmi{+wbXxg~ySjmP40d8Q5)`zo$yj"ilx/aoo})ulVzexQhc^72b>S7'nxm"h gbz-gim'{nT|cz}_fa\24`<]9%l~k }f.e`|+ekcq%yhR~ats]dgZ16n2_;#j|i.sd,cf~)keas#jPpovq[beX0;<0Y=!hrg,qb*adp'iggu!}d^rmpwY`kVkx~hi30?05?P6(o{l%~k!hcy,`hn~(zmU{by|Pgb]bwwc`4849:6[?/fpe*w`(ojr%oaew/sf\tkruWniTm~|jg=0=63=R8&myj#|i/fa{*fjlp&xoS}`{r^e`[duumn682?84U1-dvc(un&mht#mcky-q`Zvi|{UloRo|rde?0;413\:$kh!rg-dg}(ddbr$~iQnup\cfYf{{ol080=6:W3+bta&{l$knv!cmi{+wbXxg~ySjmParpfc909:?1^<"i}f/pe+be&jf`t"|k_qlwvZadWhyyij28>348Q5)`zo$yj"ilx/aoo})ulVzexQhc^cpv`a;078>7X> gsd-vc)`kq$h`fv re]sjqtXojUjkh_106?P6(o{l%~k!hcy,`hn~(zmU{by|Pgb]bwwc`W88>7X> gsd-vc)`kq$h`fv re]sjqtXojUjkh_306?P6(o{l%~k!hcy,`hn~(zmU{by|Pgb]bwwc`W:8>7X> gsd-vc)`kq$h`fv re]sjqtXojUjkh_506?P6(o{l%~k!hcy,`hn~(zmU{by|Pgb]bwwc`W<8>7X> gsd-vc)`kq$h`fv re]sjqtXojUjkh_706?P6(o{l%~k!hcy,`hn~(zmU{by|Pgb]bwwc`W>8>7X> gsd-vc)`kq$h`fv re]sjqtXojUjkh_90:?P6(o{l%~k!hcy,`hn~(zmU{by|Pgb]bwwc`Wm;7<3<6;T2,cw`)zo%lou lljz,vaYwf}xTknQnssgd[a7;97827X> gsd-vc)`kq$h`fv re]sjqtXojUjkh_e3?6;4>3\:$kh!rg-dg}(ddbr$~iQnup\cfYf{{olSi?33?0:?P6(o{l%~k!hcy,`hn~(zmU{by|Pgb]bwwc`Wm;783<6;T2,cw`)zo%lou lljz,vaYwf}xTknQnssgd[a7;=7827X> gsd-vc)`kq$h`fv re]sjqtXojUjkh_e3?2;4>3\:$kh!rg-dg}(ddbr$~iQnup\cfYf{{olSi?37?0:?P6(o{l%~k!hcy,`hn~(zmU{by|Pgb]bwwc`Wm;743<7;T2,cw`)zo%lou lljz,vaYwf}xTknQnssgd[a7X8;20Y=!hrg,qb*adp'iggu!}d^rmpwY`kVkx~hiPd0]26==R8&myj#|i/fa{*fjlp&xoS}`{r^e`[duumnUo=R<=8:W3+bta&{l$knv!cmi{+wbXxg~ySjmParpfcZb6W:837X> gsd-vc)`kq$h`fv re]sjqtXojUjkh_e3\07><]9%l~k }f.e`|+ekcq%yhR~ats]dgZgtzlmTh?1378Q5)`zo$yj"ilx/aoo})ulVzexQhc^zlv567:;?0Y=!hrg,qb*adp'iggu!}d^rmpwY`kVrd~=>?3378Q5)`zo$yj"ilx/aoo})ulVzexQhc^zlv567<;?0Y=!hrg,qb*adp'iggu!}d^rmpwY`kVrd~=>?5378Q5)`zo$yj"ilx/aoo})ulVzexQhc^zlv567>;?0Y=!hrg,qb*adp'iggu!}d^rmpwY`kVrd~=>?7338Q5)`zo$yj"ilx/aoo})pzVzexQmio>2:77<]9%l~k }f.e`|+ekcq%|~R~ats]amk:56;;0Y=!hrg,qb*adp'iggu!xr^rmpwYeag682??4U1-dvc(un&mht#mcky-tvZvi|{Uiec2;>338Q5)`zo$yj"ilx/aoo})pzVzexQmio>6:77<]9%l~k }f.e`|+ekcq%|~R~ats]amk:16;;0Y=!hrg,qb*adp'iggu!xr^rmpwYeag6<2??4U1-dvc(un&mht#mcky-tvZvi|{Uiec27>338Q5)`zo$yj"ilx/aoo})pzVzexQmio>::76<]9%l~k }f.e`|+ekcq%|~R~ats]amkY6:91^<"i}f/pe+be&jf`t"y}_qlwvZdnfV89<6[?/fpe*w`(ojr%oaew/vp\tkruWkceS>8;7X> gsd-vc)`kq$h`fv ws]sjqtXj`dT4?>4U1-dvc(un&mht#mcky-tvZvi|{UiecQ6279V4*aun'xm#jmw.bnh|*quWyd~Rlfn^zlv5678;=0Y=!hrg,qb*adp'iggu!xr^rmpwYeagUsc>?01312>S7'nxm"h gbz-gim'~xT|cz}_ckm[}iu89::>:5Z0.eqb+ta'nis"nbdx.uq[uhszVhbbRv`r12354413\:$kh!rg-dg}(ddbr${Qnup\flhXpfx;<=<=7:W3+bta&{l$knv!cmi{+rtXxg~ySoga_ymq45659;<0Y=!hrg,qb*adp'iggu!xr^rmpwYeagUsc>?0204?P6(o{l%~k!hcy,`hn~({U{by|Pbhl\|jt78999>;5Z0.eqb+ta'nis"nbdx.uq[uhszVhbbRv`r123071<]9%l~k }f.e`|+ekcq%|~R~ats]amkYg{:;<9?=6:W3+bta&{l$knv!cmi{+rtXxg~ySoga_ymq4562:>1^<"i}f/pe+be&jf`t"y}_qlwvZdnfVrd~=>?5005?P6(o{l%~k!hcy,`hn~({U{by|Pbhl\|jt789<9o6[?/fpe*w`(ojr%oaew/vp\tkruWkceSua}012554YT_98h7X> gsd-vc)`kq$h`fv ws]sjqtXj`dTtb|?01425ZUP9;=0Y=!hrg,qb*adp'iggu!xr^rmpwYeagUsc>?07012>S7'nxm"h gbz-gim'~xT|cz}_ckm[}iu89:<>:5Z0.eqb+ta'nis"nbdx.uq[uhszVhbbRv`r12334473\:$kh!rg-dg}(ddbr${Qnup\cf:76;:0Y=!hrg,qb*adp'iggu!xr^rmpwY`k5;5>=5Z0.eqb+ta'nis"nbdx.uq[uhszVmh0?0=0:W3+bta&{l$knv!cmi{+rtXxg~ySjm33?03?P6(o{l%~k!hcy,`hn~({U{by|Pgb>7:76<]9%l~k }f.e`|+ekcq%|~R~ats]dg939:91^<"i}f/pe+be&jf`t"y}_qlwvZad4?49<6[?/fpe*w`(ojr%oaew/vp\tkruWni7;3328Q5)`zo$yj"ilx/aoo})pzVzexQhc=;=5c=R8&myj#|i/fa{*fjlp&}yS}`{r^e`[57a3\:$kh!rg-dg}(ddbr${Qnup\cfY69o1^<"i}f/pe+be&jf`t"y}_qlwvZadW;;m7X> gsd-vc)`kq$h`fv ws]sjqtXojU8=k5Z0.eqb+ta'nis"nbdx.uq[uhszVmhS9?i;T2,cw`)zo%lou lljz,swYwf}xTknQ:1g9V4*aun'xm#jmw.bnh|*quWyd~Ril_73e?P6(o{l%~k!hcy,`hn~({U{by|Pgb]45c=R8&myj#|i/fa{*fjlp&}yS}`{r^e`[=7a3\:$kh!rg-dg}(ddbr${Qnup\cfY>:?1^<"i}f/pe+be&jf`t"y}_qlwvZadWhyyij2?>348Q5)`zo$yj"ilx/aoo})pzVzexQhc^cpv`a;978=7X> gsd-vc)`kq$h`fv ws]sjqtXojUjkh<3<12>S7'nxm"h gbz-gim'~xT|cz}_fa\evtbo595>;5Z0.eqb+ta'nis"nbdx.uq[uhszVmhSl}}ef>7:70<]9%l~k }f.e`|+ekcq%|~R~ats]dgZgtzlm793<9;T2,cw`)zo%lou lljz,swYwf}xTknQnssgd8385>2_;#j|i.sd,cf~)keas#z|Ppovq[beXizxnk191279V4*aun'xm#jmw.bnh|*quWyd~Ril_`qqab:?6;<0Y=!hrg,qb*adp'iggu!xr^rmpwY`kVkx~hi39?06?P6(o{l%~k!hcy,`hn~({U{by|Pgb]bwwc`W98>7X> gsd-vc)`kq$h`fv ws]sjqtXojUjkh_006?P6(o{l%~k!hcy,`hn~({U{by|Pgb]bwwc`W;8>7X> gsd-vc)`kq$h`fv ws]sjqtXojUjkh_206?P6(o{l%~k!hcy,`hn~({U{by|Pgb]bwwc`W=8>7X> gsd-vc)`kq$h`fv ws]sjqtXojUjkh_406?P6(o{l%~k!hcy,`hn~({U{by|Pgb]bwwc`W?8>7X> gsd-vc)`kq$h`fv ws]sjqtXojUjkh_606?P6(o{l%~k!hcy,`hn~({U{by|Pgb]bwwc`W18>7X> gsd-vc)`kq$h`fv ws]sjqtXojUjkh_80:?P6(o{l%~k!hcy,`hn~({U{by|Pgb]bwwc`Wm;7=3<6;T2,cw`)zo%lou lljz,swYwf}xTknQnssgd[a7;:7827X> gsd-vc)`kq$h`fv ws]sjqtXojUjkh_e3?7;4>3\:$kh!rg-dg}(ddbr${Qnup\cfYf{{olSi?34?0:?P6(o{l%~k!hcy,`hn~({U{by|Pgb]bwwc`Wm;793<6;T2,cw`)zo%lou lljz,swYwf}xTknQnssgd[a7;>7827X> gsd-vc)`kq$h`fv ws]sjqtXojUjkh_e3?3;4>3\:$kh!rg-dg}(ddbr${Qnup\cfYf{{olSi?38?0:?P6(o{l%~k!hcy,`hn~({U{by|Pgb]bwwc`Wm;753<7;T2,cw`)zo%lou lljz,swYwf}xTknQnssgd[a7X9;20Y=!hrg,qb*adp'iggu!xr^rmpwY`kVkx~hiPd0]16==R8&myj#|i/fa{*fjlp&}yS}`{r^e`[duumnUo=R==8:W3+bta&{l$knv!cmi{+rtXxg~ySjmParpfcZb6W=837X> gsd-vc)`kq$h`fv ws]sjqtXojUjkh_e3\17><]9%l~k }f.e`|+ekcq%|~R~ats]dgZgtzlmTh?1378Q5)`zo$yj"ilx/aoo})pzVzexQhc^zlv567:;?0Y=!hrg,qb*adp'iggu!xr^rmpwY`kVrd~=>?3378Q5)`zo$yj"ilx/aoo})pzVzexQhc^zlv567<;?0Y=!hrg,qb*adp'iggu!xr^rmpwY`kVrd~=>?5378Q5)`zo$yj"ilx/aoo})pzVzexQhc^zlv567>;?0Y=!hrg,qb*adp'iggu!xr^rmpwY`kVrd~=>?7378Q5)`zo$yj"ilx/aoo})pzVzexQhc^zlv5670;k0Y=!hrg,qb*ak8'xo#j|>.sdtbq)UIDUYHRKA_GUEP44d3\:$kh!rg-dh5(ul&my=#|iwgv,VDKXZMUNBRHXFU3\57?<]9%l~k }f.eo4+tc'nx:"hxfu-QEHYUMNE^XRKA1218Q5)`zo$yj"ic0/pg+bt6&{l|jy!lusp\br`sWz~jxhQISL]EBa74>2_;#j|i.sd,ci6)zm%l~< }fvdw+fsuzVl|jyQ|t`vf[CUJWOLo= Ga399V4*aun'xm#jb?.sf,cw7)zo}mx"mzrs]escrX{}kiRH\M^DE`4+Nf8;8?6[?/fpe*w`(oe:%~i!hr0,qbr`s'jy~Rhxfu]ppdrbWOYFSKHk2248Q5)`zo$yj"ic0/pg+bt6&{l|jy!lusp\br`sWz~jxhQISL]EBa4*Ag937X> gsd-vc)`d9$yh"i}1/pescr(k|xySkyit^qweqcXNZGTJKj=-Hl257><]9%l~k }f.eo4+tc'nx:"hxfu-fiur~Wo}mxRhm269V4*aun'xm#jb?.sf,cw7)zo}mx"kbpu{\br`sW`8n7X> gsd-vc)`d9$yh"i}1/pescr(mdzuRhxfu]j[jt789:9j6[?/fpe*w`(oe:%~i!hr0,qbr`s'lg{xtQiwgv\mZiu89:;=?74U1-dvc(un&mg<#|k/fpbw+tt|z%h<"mnrs{maq:76;30Y=!hrg,qb*ak8'xo#j|ns/pppv)d8&ij~waeu>2:7?<]9%l~k }f.eo4+tc'nxj#||tr-`4*efz{seiy2=>3;8Q5)`zo$yj"ic0/pg+btf{'xxx~!l0.abvwim}682?h4U1-dvc(un&mg<#|k/fpbw+tt|z%h<"ibuy,di^6Z&ng:"`?=f:W3+bta&{l$ka>!re-dvdu)zz~x#n> glw{*bk\9T$la~ bs3d8Q5)`zo$yj"ic0/pg+btf{'xxx~!l0.enq}(`eR8V"jc|.lq1b>S7'nxm"h gm2-va)`zhy%~~z|/b2,chs&ngP?P hmr,nw7`<]9%l~k }f.eo4+tc'nxj#||tr-`4*aj}q$laV:R.fop*hu5;2_;#j|i.sd,ci6)zm%l~l}!rrvp+f6(~86;2?=4U1-dvc(un&mg<#|k/fpbw+tt|z%h<"x><0<17>S7'nxm"h gm2-va)`zhy%~~z|/b2,r4:56;90Y=!hrg,qb*ak8'xo#j|ns/pppv)d8&|:0>0=3:W3+bta&{l$ka>!re-dvdu)zz~x#n> v0>7:7d<]9%l~k }f.eo4+tc'nxj#||tr-`4*p6W9Ujbi>?0131f>S7'nxm"h gm2-va)`zhy%~~z|/b2,r4Y6Whdo<=>?13`8Q5)`zo$yj"ic0/pg+btf{'xxx~!l0.t2[7Yffm:;<=?=b:W3+bta&{l$ka>!re-dvdu)zz~x#n> v0]0[dhc89:;=?l4U1-dvc(un&mg<#|k/fpbw+tt|z%h<"x>_5]mkq6789;956[?/fpe*w`(oe:%~i!hr`q-vvrt'j;$ol|}yogw858512_;#j|i.sd,ci6)zm%l~l}!rrvp+f7(khxyuck{<0<1=>S7'nxm"h gm2-va)`zhy%~~z|/b3,gdtuqgo0?0=9:W3+bta&{l$ka>!re-dvdu)zz~x#n? c`pq}kcs4:49j6[?/fpe*w`(oe:%~i!hr`q-vvrt'j;$k`{w.foX4X(`e8$f=?h4U1-dvc(un&mg<#|k/fpbw+tt|z%h="ibuy,di^7Z&ngx"`}=f:W3+bta&{l$ka>!re-dvdu)zz~x#n? glw{*bk\:T$la~ bs3d8Q5)`zo$yj"ic0/pg+btf{'xxx~!l1.enq}(`eR9V"jc|.lq1b>S7'nxm"h gm2-va)`zhy%~~z|/b3,chs&ngP8P hmr,nw75<]9%l~k }f.eo4+tc'nxj#||tr-`5*p64949?6[?/fpe*w`(oe:%~i!hr`q-vvrt'j;$z<2>>318Q5)`zo$yj"ic0/pg+btf{'xxx~!l1.t28785;2_;#j|i.sd,ci6)zm%l~l}!rrvp+f7(~8682?=4U1-dvc(un&mg<#|k/fpbw+tt|z%h="x><5<1f>S7'nxm"h gm2-va)`zhy%~~z|/b3,r4Y7Whdo<=>?13`8Q5)`zo$yj"ic0/pg+btf{'xxx~!l1.t2[4Yffm:;<=?=b:W3+bta&{l$ka>!re-dvdu)zz~x#n? v0]1[dhc89:;=?l4U1-dvc(un&mg<#|k/fpbw+tt|z%h="x>_2]bja6789;9n6[?/fpe*w`(oe:%~i!hr`q-vvrt'j;$z=5Z0.eqb+ta'nf;"j gscp*wus{&ida}?=9:W3+bta&{l$ka>!re-dvdu)zz~x#ob_dosp|YajVc8<6[?/fpe*w`(oe:%~i!hr`q-vvrt'{kfShctx]efZoXg{:;<==>;T2,cw`)zo%l`= }d.eqev(u{}y$~lcPelrw}Z`eW`Ud~=>?0000?P6(o{l%~k!hl1,q`*twf}x$Anaznu]`kphs:=1^<"i}f/pe+bj7&{n$~}`{r.O`kphsWje~by?=4:W3+bta&{l$ka>!re-qtkru'DidyczPcnwmp7433\:$kh!rg-dh5(ul&x{by| MbmvjqYdg|d??:4U1-dvc(un&mg<#|k/srmpw)JkfexRm`uov761=R8&myj#|i/fn3*wb(zyd~"Clotlw[firf}?986[?/fpe*w`(oe:%~i!}povq+Heh}g~Tob{at707?P6(o{l%~k!hl1,q`*twf}x$Anaznu]`kphs?;>0Y=!hrg,qb*ak8'xo#~ats-Ngjsi|Vidycz7289V4*aun'xm#jb?.sf,vuhsz&Ghcx`{_bmvjqYdq5:5>n5Z0.eqb+ta'nf;"j rqlwv*Kdg|dSnaznu]`}969W{~956[?/fpe*w`(oe:%~i!}povq+Heh}g~Tob{at^az8485k2_;#j|i.sd,ci6)zm%y|cz}/LalqkrXkfexRmv<0<\vq4>3\:$kh!rg-dh5(ul&x{by| MbmvjqYdg|dSnw32?0`?P6(o{l%~k!hl1,q`*twf}x$Anaznu]`kphsWjs7>3Q}t3;8Q5)`zo$yj"ic0/pg+wvi|{%Fob{at^alqkrXkp682?m4U1-dvc(un&mg<#|k/srmpw)JkfexRm`uov\g|:46Vx>45Z0.eqb+ta'nf;"j rqlwv*Kdg|dSnaznu]`}929:j1^<"i}f/pe+bj7&{n$~}`{r.O`kphsWje~byQly=6=[wr512_;#j|i.sd,ci6)zm%y|cz}/LalqkrXkfexRmv<4<1g>S7'nxm"h gm2-va)uxg~y#@m`uov\gjsi|Vir080Pru0:?P6(o{l%~k!hl1,q`*twf}x$Anaznu]`kphsWjs7:37Uyx?74U1-dvc(un&mg<#|k/srmpw)JkfexRm`uov\g|:06;i0Y=!hrg,qb*ak8'xo#~ats-Ngjsi|VidyczPcx>4:Zts:h1^<"i}f/pe+bj7&{n$~}`{r.O`kphsWje~byQwos>3:7g<]9%l~k }f.eo4+tc'{zex!BcnwmpZeh}g~Ttb|31?0b?P6(o{l%~k!hl1,q`*twf}x$Anaznu]`kphsWqey0?0=a:W3+bta&{l$ka>!re-qtkru'DidyczPcnwmpZ~hz595>l5Z0.eqb+ta'nf;"j rqlwv*Kdg|dSnaznu]{kw:36;k0Y=!hrg,qb*ak8'xo#~ats-Ngjsi|VidyczPxnp?1;4f3\:$kh!rg-dh5(ul&x{by| MbmvjqYdg|dSua}<7<1e>S7'nxm"h gm2-va)uxg~y#@m`uov\gjsi|Vrd~1912`9V4*aun'xm#jb?.sf,vuhsz&Ghcx`{_bmvjqYg{632?j4U1-dvc(un&mg<#|k/srmpw)JkfexRm`uov\|jt;07Uyxf:W3+bta&{l$ka>!re-qtkru'je~by2>>0d8Q5)`zo$yj"ic0/pg+wvi|{%hcx`{<3<2b>S7'nxm"h gm2-va)uxg~y#naznu>0:4`<]9%l~k }f.eo4+tc'{zex!lotlw8186n2_;#j|i.sd,ci6)zm%y|cz}/bmvjq:268l0Y=!hrg,qb*ak8'xo#~ats-`kphs4?4:j6[?/fpe*w`(oe:%~i!}povq+firf}6<2e:W3+bta&{l$ka>!re-qtkru'je~byQ?1d9V4*aun'xm#jb?.sf,vuhsz&idyczP10g8Q5)`zo$yj"ic0/pg+wvi|{%hcx`{_33f?P6(o{l%~k!hl1,q`*twf}x$ob{at^12a>S7'nxm"h gm2-va)uxg~y#naznu]75`=R8&myj#|i/fn3*wb(zyd~"m`uov\14c<]9%l~k }f.eo4+tc'{zex!lotlw[37b3\:$kh!rg-dh5(ul&x{by| cnwmpZ16m2_;#j|i.sd,ci6)zm%y|cz}/bmvjqY?:;1^<"i}f/pe+bj7&{n$~}`{r.alqkrXl86;2?<4U1-dvc(un&mg<#|k/srmpw)dg|dSi?31?01?P6(o{l%~k!hl1,q`*twf}x$ob{at^f28785:2_;#j|i.sd,ci6)zm%y|cz}/bmvjqYc9595>?5Z0.eqb+ta'nf;"j rqlwv*eh}g~Th<2;>308Q5)`zo$yj"ic0/pg+wvi|{%hcx`{_e3?1;453\:$kh!rg-dh5(ul&x{by| cnwmpZb64?49>6[?/fpe*w`(oe:%~i!}povq+firf}Uo=191239V4*aun'xm#jb?.sf,vuhsz&idyczPd0>;:77<]9%l~k }f.eo4+tc'{zex!lotlw[a7X8;;0Y=!hrg,qb*ak8'xo#~ats-`kphsWm;T=??4U1-dvc(un&mg<#|k/srmpw)dg|dSi?P2338Q5)`zo$yj"ic0/pg+wvi|{%hcx`{_e3\777<]9%l~k }f.eo4+tc'{zex!lotlw[a7X<;;0Y=!hrg,qb*ak8'xo#~ats-`kphsWm;T9??4U1-dvc(un&mg<#|k/srmpw)dg|dSi?P6338Q5)`zo$yj"ic0/pg+wvi|{%hcx`{_e3\377<]9%l~k }f.eo4+tc'{zex!lotlw[a7X0;30Y=!hrg,qb*ak8'}y#jyns/uppv)d9&ij~waeu>3:7?<]9%l~k }f.eo4+qu'n}j#y|tr-`5*efz{seiy2>>3;8Q5)`zo$yj"ic0/uq+bqf{'}xx~!l1.abvwim}692?74U1-dvc(un&mg<#y}/fubw+qt|z%h="mnrs{maq:46;l0Y=!hrg,qb*ak8'}y#jyns/uppv)d9&mfyu hmZ2^*bk6&d;9j6[?/fpe*w`(oe:%{!hw`q-svrt'j;$k`{w.foX5X(`ez$f?h4U1-dvc(un&mg<#y}/fubw+qt|z%h="ibuy,di^4Z&ngx"`}=f:W3+bta&{l$ka>!ws-dsdu)z~x#n? glw{*bk\;T$la~ bs3d8Q5)`zo$yj"ic0/uq+bqf{'}xx~!l1.enq}(`eR>V"jc|.lq17>S7'nxm"h gm2-sw)`hy%{~z|/b3,r4:76;90Y=!hrg,qb*ak8'}y#jyns/uppv)d9&|:0<0=3:W3+bta&{l$ka>!ws-dsdu)z~x#n? v0>1:75<]9%l~k }f.eo4+qu'n}j#y|tr-`5*p64:49?6[?/fpe*w`(oe:%{!hw`q-svrt'j;$z<2;>3`8Q5)`zo$yj"ic0/uq+bqf{'}xx~!l1.t2[5Yffm:;<=?=b:W3+bta&{l$ka>!ws-dsdu)z~x#n? v0]2[dhc89:;=?l4U1-dvc(un&mg<#y}/fubw+qt|z%h="x>_3]bja6789;9n6[?/fpe*w`(oe:%{!hw`q-svrt'j;$zS7'nxm"h gm2-sw)`hy%{~z|/b0,gdtuqgo0<0=9:W3+bta&{l$ka>!ws-dsdu)z~x#n< c`pq}kcs4;4956[?/fpe*w`(oe:%{!hw`q-svrt'j8$ol|}yogw8685n2_;#j|i.sd,ci6){%l{l}!wrvp+f4(ods"jcT0\,di4(j9;l0Y=!hrg,qb*ak8'}y#jyns/uppv)d:&mfyu hmZ3^*bkt&dy9j6[?/fpe*w`(oe:%{!hw`q-svrt'j8$k`{w.foX6X(`ez$f?h4U1-dvc(un&mg<#y}/fubw+qt|z%h>"ibuy,di^5Z&ngx"`}=f:W3+bta&{l$ka>!ws-dsdu)z~x#n< glw{*bk\"x><3<17>S7'nxm"h gm2-sw)`hy%{~z|/b0,r4:46;90Y=!hrg,qb*ak8'}y#jyns/uppv)d:&|:090=b:W3+bta&{l$ka>!ws-dsdu)z~x#n< v0]3[dhc89:;=?l4U1-dvc(un&mg<#y}/fubw+qt|z%h>"x>_0]bja6789;9n6[?/fpe*w`(oe:%{!hw`q-svrt'j8$zQnne234575j2_;#j|i.sd,ci6){%l{l}!wrvp+f4(~8U?Sl`k0123576<]9%l~k }f.eo4+qu'n}j#y|tr-`khv6:91^<"i}f/pe+bj7&~x$kzo|.vqww*ehey89<6[?/fpe*w`(oe:%{!hw`q-svrt'jef|>3 gsd-vc)`d9$|~"ixar,twqu(ohl%o>!hmtz-ch]5U'mf#c|329V4*aun'xm#jb?.vp,crgt&~y"inf/a0+bkrp'mfW>S!glq-iv543\:$kh!rg-dh5(pz&m|m~ xsuq,cd`)k:%laxv!glY7Y+aj{'gx>:5Z0.eqb+ta'nf;"z| gvcp*rus{&mjj#m gsd-vc)`d9$|~"ixar,twqu(ohl%o>!y1=1=62=R8&myj#|i/fn3*rt(o~kx"z}{s.ebb+e4';783>2g9V4*aun'xm#jb?.vp,crgt&~y"inf/a0+s7X9Vkeh=>?000e?P6(o{l%~k!hl1,tv*apiz$|y} g`d-g6)q9V8Tmcj?01226c=R8&myj#|i/fn3*rt(o~kx"z}{s.ebb+e4';T?Road123444a3\:$kh!rg-dh5(pz&m|m~ xsuq,cd`)k:%}=R:Paof34566:j1^<"i}f/pe+bj7&~x$kzo|.vqww*tfeVkgab}{_gwohZo4<2_;#j|i.sd,ci6){%l{l}!wrvp+wgjWhffc~zPftno[lYj}q:;<==:;T2,cw`)zo%l`= xr.etev(p{}y$~lcPamolwqYa}efTeRczx12344533\:$kh!rg-dh5(pz&m|m~ xsuq,vdkXiegdyQiumn\mZhh|9:;=>;4U1-dvc(un&mg<#y}/fubw+qt|z%ym`QnllmppZ`rdeUbSca{012257><]9%l~k }f.eo4+qu'n}j#y|tr-qehYa}efTjoQf249V4*aun'xm#jb?.vp,crgt&~y"|nm^dvhiYn:j1^<"i}f/pe+bj7&~x$kzo|.vqww*tfeVl~`aQf_np34565l2_;#j|i.sd,ci6){%l{l}!wrvp+wgjWog`RgPos234575<2_;#j|i.sd,ci6){%l{l}!wrvp+rtXzz~Th0Y=!hrg,qb*ak8'}y#z~ats-Ngjsi|Vidycz;259V4*aun'xm#jb?.vp,suhsz&Ghcx`{_bmvjq35<2_;#j|i.sd,ci6){%||cz}/LalqkrXkfex;<;;T2,cw`)zo%l`= xr.usjqt(Eje~byQlotlw372<]9%l~k }f.eo4+qu'~zex!BcnwmpZeh}g~3>95Z0.eqb+ta'nf;"z| wqlwv*Kdg|dSnaznu;1=>S7'nxm"h gm2-sw)pxg~y#@m`uov\gjsi|Vir0=0=c:W3+bta&{l$ka>!ws-ttkru'DidyczPcnwmpZe~494T~y<6;T2,cw`)zo%l`= xr.usjqt(Eje~byQlotlw[f;978h7X> gsd-vc)`d9$|~"ynup,Ifirf}Uhcx`{_b{?5;Yu|;30Y=!hrg,qb*ak8'}y#z~ats-Ngjsi|VidyczPcx>1:7e<]9%l~k }f.eo4+qu'~zex!BcnwmpZeh}g~Tot2=>^pw6<=R8&myj#|i/fn3*rt(yd~"Clotlw[firf}Uhu1=12b9V4*aun'xm#jb?.vp,suhsz&Ghcx`{_bmvjqYdq595Sz=9:W3+bta&{l$ka>!ws-ttkru'DidyczPcnwmpZe~4=49o6[?/fpe*w`(oe:%{!xpovq+Heh}g~Tob{at^az818Xz}827X> gsd-vc)`d9$|~"ynup,Ifirf}Uhcx`{_b{?1;4d3\:$kh!rg-dh5(pz&}{by| MbmvjqYdg|dSnw35?]qp7?<]9%l~k }f.eo4+qu'~zex!BcnwmpZeh}g~Tot29>3a8Q5)`zo$yj"ic0/uq+rvi|{%Fob{at^alqkrXkp6=2R|{289V4*aun'xm#jb?.vp,suhsz&Ghcx`{_bmvjqYdq5=5>n5Z0.eqb+ta'nf;"z| wqlwv*Kdg|dSnaznu]`}919W{~956[?/fpe*w`(oe:%{!xpovq+Heh}g~Tob{at^az8=85k2_;#j|i.sd,ci6){%||cz}/LalqkrXkfexRmv<9<\vq4f3\:$kh!rg-dh5(pz&}{by| MbmvjqYdg|dSua}<1<1e>S7'nxm"h gm2-sw)pxg~y#@m`uov\gjsi|Vrd~1?12`9V4*aun'xm#jb?.vp,suhsz&Ghcx`{_bmvjqYg{692?o4U1-dvc(un&mg<#y}/vrmpw)JkfexRm`uov\|jt;;78j7X> gsd-vc)`d9$|~"ynup,Ifirf}Uhcx`{_ymq8185i2_;#j|i.sd,ci6){%||cz}/LalqkrXkfexRv`r=7=6d=R8&myj#|i/fn3*rt(yd~"Clotlw[firf}Usc29>3c8Q5)`zo$yj"ic0/uq+rvi|{%Fob{at^alqkrXpfx7;3::Zts9o1^<"i}f/pe+bj7&~x${}`{r.alqkr;87;m7X> gsd-vc)`d9$|~"ynup,gjsi|5;5=k5Z0.eqb+ta'nf;"z| wqlwv*eh}g~7>3?i;T2,cw`)zo%l`= xr.usjqt(kfex1=11g9V4*aun'xm#jb?.vp,suhsz&idycz34?3e?P6(o{l%~k!hl1,tv*qwf}x$ob{at=7=5c=R8&myj#|i/fn3*rt(yd~"m`uov?2;7a3\:$kh!rg-dh5(pz&}{by| cnwmp9199o1^<"i}f/pe+bj7&~x${}`{r.alqkr;07;m7X> gsd-vc)`d9$|~"ynup,gjsi|535=h5Z0.eqb+ta'nf;"z| wqlwv*eh}g~T<e:W3+bta&{l$ka>!ws-ttkru'je~byQ<1d9V4*aun'xm#jb?.vp,suhsz&idyczP40g8Q5)`zo$yj"ic0/uq+rvi|{%hcx`{_43f?P6(o{l%~k!hl1,tv*qwf}x$ob{at^42a>S7'nxm"h gm2-sw)pxg~y#naznu]45`=R8&myj#|i/fn3*rt(yd~"m`uov\<4c<]9%l~k }f.eo4+qu'~zex!lotlw[<453\:$kh!rg-dh5(pz&}{by| cnwmpZb64949>6[?/fpe*w`(oe:%{!xpovq+firf}Uo=1?1239V4*aun'xm#jb?.vp,suhsz&idyczPd0>1:74<]9%l~k }f.eo4+qu'~zex!lotlw[a7;;7897X> gsd-vc)`d9$|~"ynup,gjsi|Vn:090=2:W3+bta&{l$ka>!ws-ttkru'je~byQk1=7=67=R8&myj#|i/fn3*rt(yd~"m`uov\`4:16;80Y=!hrg,qb*ak8'}y#z~ats-`kphsWm;7;3<=;T2,cw`)zo%l`= xr.usjqt(kfexRj><9<16>S7'nxm"h gm2-sw)pxg~y#naznu]g59?9:81^<"i}f/pe+bj7&~x${}`{r.alqkrXl8U;><5Z0.eqb+ta'nf;"z| wqlwv*eh}g~Th209V4*aun'xm#jb?.vp,suhsz&idyczPd0]164=R8&myj#|i/fn3*rt(yd~"m`uov\`4Y4:81^<"i}f/pe+bj7&~x${}`{r.alqkrXl8U?><5Z0.eqb+ta'nf;"z| wqlwv*eh}g~Th<5Z0.eqb+ta'nf;"z| wqlwv*eh}g~Th3:74<]9%l~k }f.eo4+qu'~zex!lotlw[a4;97897X> gsd-vc)`d9$|~"ynup,gjsi|Vn90?0=2:W3+bta&{l$ka>!ws-ttkru'je~byQk2=1=67=R8&myj#|i/fn3*rt(yd~"m`uov\`7:36;80Y=!hrg,qb*ak8'}y#z~ats-`kphsWm8793<=;T2,cw`)zo%l`= xr.usjqt(kfexRj=<7<16>S7'nxm"h gm2-sw)pxg~y#naznu]g6919:;1^<"i}f/pe+bj7&~x${}`{r.alqkrXl;632?<4U1-dvc(un&mg<#y}/vrmpw)dg|dSi<39?02?P6(o{l%~k!hl1,tv*qwf}x$ob{at^f1[5463\:$kh!rg-dh5(pz&}{by| cnwmpZb5W88:7X> gsd-vc)`d9$|~"ynup,gjsi|Vn9S?<>;T2,cw`)zo%l`= xr.usjqt(kfexRj=_202?P6(o{l%~k!hl1,tv*qwf}x$ob{at^f1[1463\:$kh!rg-dh5(pz&}{by| cnwmpZb5W<8:7X> gsd-vc)`d9$|~"ynup,gjsi|Vn9S;<>;T2,cw`)zo%l`= xr.usjqt(kfexRj=_602?P6(o{l%~k!hl1,tv*qwf}x$ob{at^f1[=463\:$kh!rg-dh5(pz&}{by| cnwmpZb5W0897X> gsd-vc)`d9$|~"ynup,gjsi|Vn80=0=2:W3+bta&{l$ka>!ws-ttkru'je~byQk3=3=67=R8&myj#|i/fn3*rt(yd~"m`uov\`6:56;80Y=!hrg,qb*ak8'}y#z~ats-`kphsWm97?3<=;T2,cw`)zo%l`= xr.usjqt(kfexRj<<5<16>S7'nxm"h gm2-sw)pxg~y#naznu]g7939:;1^<"i}f/pe+bj7&~x${}`{r.alqkrXl:6=2?<4U1-dvc(un&mg<#y}/vrmpw)dg|dSi=37?01?P6(o{l%~k!hl1,tv*qwf}x$ob{at^f08=85:2_;#j|i.sd,ci6){%||cz}/bmvjqYc;535><5Z0.eqb+ta'nf;"z| wqlwv*eh}g~Th>Q?209V4*aun'xm#jb?.vp,suhsz&idyczPd2]264=R8&myj#|i/fn3*rt(yd~"m`uov\`6Y5:81^<"i}f/pe+bj7&~x${}`{r.alqkrXl:U8><5Z0.eqb+ta'nf;"z| wqlwv*eh}g~Th>Q;209V4*aun'xm#jb?.vp,suhsz&idyczPd2]664=R8&myj#|i/fn3*rt(yd~"m`uov\`6Y1:81^<"i}f/pe+bj7&~x${}`{r.alqkrXl:U<><5Z0.eqb+ta'nf;"z| wqlwv*eh}g~Th>Q7209V4*aun'xm#jb?.vp,suhsz&idyczPd2]:53=R8&myj#|i/lgn+air|VcT<<84U1-dvc(un&gna"j`uu]j[4703\:$kh!rg-nah)cg|~TeR??169V4*aun'xm#`kb/emvpZoX98;<7X> gsd-vc)jmd%ocxzPi^3152=R8&myj#|i/lgn+air|VcT=>?8;T2,cw`)zo%fi`!kotv\mZ739>1^<"i}f/pe+hcj'me~xRgP1434?P6(o{l%~k!bel-gkprXaV;==:5Z0.eqb+ta'dof#iazt^k\52703\:$kh!rg-nah)cg|~TeR?7169V4*aun'xm#`kb/emvpZoX90;=7X> gsd-vc)jmd%ocxzPi^023>S7'nxm"h mdo,`jssW`U9<<94U1-dvc(un&gna"j`uu]j[776?2_;#j|i.sd,i`k(lfSdQ=2058Q5)`zo$yj"cjm.flqqYnW;9:;6[?/fpe*w`(elg$hb{{_h]1041<]9%l~k }f.ofi*bh}}UbS?;>7:W3+bta&{l$ahc dnww[lY5>8=0Y=!hrg,qb*kbe&ndyyQf_3523>S7'nxm"h mdo,`jssW`U94<94U1-dvc(un&gna"j`uu]j[7?6>2_;#j|i.sd,i`k(lfSdQ<169V4*aun'xm#`kb/emvpZoX;9;<7X> gsd-vc)jmd%ocxzPi^1252=R8&myj#|i/lgn+air|VcT???8;T2,cw`)zo%fi`!kotv\mZ549>1^<"i}f/pe+hcj'me~xRgP3534?P6(o{l%~k!bel-gkprXaV9>=;5Z0.eqb+ta'dof#iazt^k\040<]9%l~k }f.ofi*bh}}UbS8?9;T2,cw`)zo%fi`!kotv\mZ06>2_;#j|i.sd,i`k(lfSdQ8179V4*aun'xm#`kb/emvpZoX08<0Y=!hrg,qb*kbe&ndyyQf_83:?P6(o{l%~k!bel-gkprXelg7<3?n;T2,cw`)zo%fi`!kotv\i`k;994:m6[?/fpe*w`(elg$hb{{_lgn84799h1^<"i}f/pe+hcj'me~xRcjm=31:4g<]9%l~k }f.ofi*bh}}Ufi`2>3?3b?P6(o{l%~k!bel-gkprXelg7=90>a:W3+bta&{l$ahc dnww[hcj48?5=l5Z0.eqb+ta'dof#iazt^ofi97168k0Y=!hrg,qb*kbe&ndyyQbel>23;7f3\:$kh!rg-nah)cg|~Tahc319<2e>S7'nxm"h mdo,`jssWdof0<71189V4*aun'xm#`kb/emvpZkbe5;5=l5Z0.eqb+ta'dof#iazt^ofi94768k0Y=!hrg,qb*kbe&ndyyQbel>15;7f3\:$kh!rg-nah)cg|~Tahc323<2e>S7'nxm"h mdo,`jssWdof0?=11`9V4*aun'xm#`kb/emvpZkbe58?2 gsd-vc)jmd%ocxzPmdo?6386i2_;#j|i.sd,i`k(lfS`kb<35=5d=R8&myj#|i/lgn+air|Vgna1<7>0c8Q5)`zo$yj"cjm.flqqYjmd6953?6;T2,cw`)zo%fi`!kotv\i`k;:7;j7X> gsd-vc)jmd%ocxzPmdo?7586i2_;#j|i.sd,i`k(lfS`kb<23=5d=R8&myj#|i/lgn+air|Vgna1==>0c8Q5)`zo$yj"cjm.flqqYjmd68?3?n;T2,cw`)zo%fi`!kotv\i`k;;=4:m6[?/fpe*w`(elg$hb{{_lgn8639901^<"i}f/pe+hcj'me~xRcjm=1=5<=R8&myj#|i/lgn+air|Vgna1:1189V4*aun'xm#`kb/emvpZkbe5?5=45Z0.eqb+ta'dof#iazt^ofi909901^<"i}f/pe+hcj'me~xRcjm=5=5<=R8&myj#|i/lgn+air|Vgna161189V4*aun'xm#`kb/emvpZkbe535:h5Z0.eqb+ta'dof#jlb.f`nc+aeenk%bjklc/`nc*dkcVgnaRijndpbpjt(~hfbh#m|ts-qehjhgyQ;Q#|nm/p,r7Yig`dbx#|nm.fs5=~4>'xja gsd-vc)uidUyhRka169V4*aun'xm#ob_sgdkprXmg;87X> gsd-vc)uidU|~Rka1e9V4*aun'xm#}{bmi,vaYu{}Ujkh219V4*aun'xm#}{bmi,vaYu{}Ujkh_e314>S7'nxm"h rrvahn)ulVxxxRo|rde\`77d3\:$kh!rg-qwqdkc&xoS}{_bmnf4b<]9%l~k }f.pppgjl'{nT~~zPcnoa54c<]9%l~k }f.pppgjl'{nT~~zPrde?4;7b3\:$kh!rg-qwqdkc&xoS}{_sgd8486m2_;#j|i.sd,vvredb%yhR||t^pfc9499m1^<"i}f/pe+wusjea$~iQ}su]qabY79m1^<"i}f/pe+wusjea$~iQ}su]qabY69m1^<"i}f/pe+wusjea$~iQ}su]qabY59m1^<"i}f/pe+wusjea${Q}su]bwwc`:91^<"i}f/pe+wusjea${Q}su]bwwc`Wm;9<6[?/fpe*w`(zz~i`f!xr^pppZgtzlmTh??l;T2,cw`)zo%yylck.uq[wusWjefnd:W3+bta&{l$~~zmlj-tvZtt|VxnkR>>d:W3+bta&{l$~~zmlj-tvZtt|VxnkR?n;TQFVZGKAHYh7X]JR^TJWLDKM:1]ON74VHGT[Q_WM:1\IL=4WD@a?RTN\LUME_][c:UQMQCXEFNNSLm4WSKWAZKHLLUI=i5WIMKM\(^CJ):%=-][UC"3*4&F[JCB96V@RB[5?]USD@H<7U][_FLG3>^T\V\HOo5W_BMQAZOINF<0TilPIed8\anXX{cfZh||inl24>^ceVGjfb|Yesqjkk773QnfS@gaosTfvvohfj1j``a|t^gntqe3hffc~zPftno2>dfkb{h6lncjws[hguclx87nbdd:fbpdYdg|d$='k;ecweZeh}g~#=$j4d`vb[firf}"9%i5kauc\gjsi|!9"h6jnt`]`kphs =#o7io{a^alqkr/= n0hlzn_bmvjq.1!m1omyoPcnwmp-1.l2njxlQlotlw,=/c3mkmRm`uov+=,`:>5803mhbxh|}6:fjj-6.>2nbb%?&7:fjj-77!>1oec&>1(58`lh/9;#<7iga(01*3>bnf!;?%:5kio*21,12nbb%<&6:fjj-5.>2nbb%:&6:fjj-3.>2nbb%8&6:fjj-1.>2nbb%6&6:fjj-?.>2nbb1>17:fjj9776>1oec2>1?58`lh;9;4<7iga<01=3>bnf5;?2:5kio>21;14=7iga<9<5?aoi404<7iazt)2*3>bh}}":%55kotv+55/?3me~x%?>)99gkpr/9;#37iazt)30-==cg|~#=9'7;emvp-72!11ocxz'17+;?air|!;<%55kotv+5=/?3me~x%?6)69gkpr/: 20hb{{(32*<>bh}}"9=$64dnww,74.02ndyy&=3(:8`jss ;>"46j`uu*11,>bh}}"95$94dnww,6/?3me~x%=?)99gkpr/;8#37iazt)11-==cg|~#?>'7;emvp-53!11ocxz'34+4?air|!>";6j`uu*6-2=cg|~#:$94dnww,2/03me~x%6&7:flqq.>!>1ocxz30?:8`jss48:546j`uu>25;>bh}}6:9364dnww840902ndyy2>7?:8`jss482546j`uu>2=;199gkpr;:<437iazt=05:==cg|~7>:07;emvp94?611ocxz328<4?air|58546j`uu>04;>?18:flqq:4:720hb{{<21=<>bh}}6883o4dnww863=8720hb{{<27=3>bh}}682:5kotv?0;169gkpr;07=0hb{{<8<;?`bnn;dlh85jmqvz77=aaoeTkh`jr`vlvZp3W:&+Tdbfny"@KWC'Oldn~lz`r!33*4(7;8i0jdh`_ynm|Z36:q9=S?mck^3;pj51;h1mekaPxml{[075p:nbd_0:wk60+n`ldSjkaescwkwYqV8h`fQ>8um02)`nnfUlick}aumq[s2X;%qhSeo|_hlw[fjl59&hSeo|_rppp86+kVxoSk|jq<3/gZnf{VxoSio{a^alqkr:8%iThd`Pwhfwl87?$jUcm~Qxr^fbpdYdg|d1="l_gwohZ`kinyT~~zPv`n>4)eXadzgi`kat`vjkkYsqyo6>!mPurg\ahdblmooSkh=1.`[rtXn{oz1<"l_tqf[air|Vxxx0?#c^wm``tadf}T`by20-a\lduXgoyjaax=1.`[utbdfkoSao{eoaz95*dWme~xRyfduj>73*dWdylccQyam?2(fYulVnn|yf2500/gZnf{Vehh|ilnu>4)eX`hyTmac`su]eqij:9%iTdl}Prrv>5)eXlh~jSnaznu]tmaro58:'oRfns^uq[del59&hSx}j_da`95*dWjefab`Pcmm`o86+kV}ySlmd_mmt95*dW{nT|cz}_vkgpm;>$jU~hQiwgv\`drfWje~by3?,b]kevYfddexxRkbpu{>4)eXzmUomyoPcnwmpZqnl}b65!mPowgqbiipWee|1="l_vp\tkruW~coxe3>0-a\twi`Wlg{xtQ{yqg>4)eX{UomyoPcnwmpZqnl}b6=="l_qpfhjgcW{ol0?#c^flqqYu{}U}ma3?,b]kevYci}kTob{at<2/gZvugnUmyabPtipfwmYimnkiRxnl<3367*dW~xThh~{h<3361*dWyxdkRkbpu{\pmtb{aUeijo{e^tbh83+kVzycjQjmqvz[qnumzbTm~}jru]uei;3$jUcm~Qyamkg95*dWyxdkRhzlm]wlwct`Vkxh|{_wco9465;%ida}aaeov\jdkb5ocmcRvcny]657~4>V8h`fQ>8um02)eX~hfbhRb`w<2/gZvuadUmekaPtxrf94m91&hS}|`g^dvhiYsqyo6vugnUna}zv_ujqavn/< ;?7}|`g^gntqX|axne&:)068twi`Wlg{xtQ{hsgpl-0.9=1{~biPelrw}Zrozlyc$:'>4:rqkbYbey~rSyf}erj+<,713yxdkRkbpu{\pmtb{a636=0>b:rqkbYbey~rSyf}erj\evubz}";%vugnUna}zv_ujqavnXizyn~y&9)0`8twi`Wlg{xtQ{hsgplZgt{lx$:'>b:rqkbYbey~rSyf}erj\evubz}"3%vugnUna}zv_ujqavnXflmjxh&:)0`8twi`Wlg{xtQ{hsgplZhboh~n$;'>b:rqkbYbey~rSyf}erj\j`af|l"<%5rne\bpjkW}byi~f'1(30?uthoVl~`aQ{hsgpl-4.9:1{~biPftno[qnumzb#?$?<;qplcZ`rdeUdk|h)6*56=wzfmTjxbc_ujqavn/= ;87}|`g^dvhiYs`{oxd%8&129svjaXn|fgSyf}erj+3,743yxdkRhzlm]wlwct`!2"=>5rne\bpjkW}byi~f'9(36?uthoVl~`aQ{hsgpl9?=87;j7}|`g^dvhiYs`{oxdRo|sdpw,5/6i2zycjQiumn\pmtb{aUj~k}t)3*5d=wzfmTjxbc_ujqavnXizyn~y&=)0c8twi`Wog`Rzgrdqk[dutm{~#?$?n;qplcZ`rdeUdk|h^cpw`ts =#:m6~}of]eqijX|axneQnsrgqp-3.9h1{~biPftno[qnumzbTm~}jru*5-4ga:rqkbYa}efTxe|jsi]bwvcu|!3"=n5rne\bpjkW}byi~fParqfvq:>294:m6~}of]eqijX|axneQaefcwa-6.9h1{~biPftno[qnumzbTbhintd*2-4g'>a:rqkbYa}efTxe|jsi]mabgsm!>"=l5rne\bpjkW}byi~fPndebp`.2!8k0|ah_gwohZrozlycSckhaug+2,7f3yxdkRhzlm]wlwct`Vdnklzj(6+2e>vugnUmyabPtipfwmYimnki%6&1`9svjaXn|fgSyf}erj\j`af|l"2%4re]geqgXkfex%=&119q`Zbf|hUhcx`{(5+24>tcWmkmRm`uov+1,773{nThlzn_bmvjq.1!8:0~iQkauc\gjsi|!="==5}d^fbpdYdg|d$5'>0:pg[agsiVidycz30?31?wbXlh~jSnaznu>;>5823{nTic84re]qwq5uu{}>0x{j9:wm``tadf}>7{ocie48swYfkb<0{Qllj33?rtXlh~jSnaznu*3-46<{UomyoPcnwmp-7.991|~Rjnt`]`kphs ;#:<6y}_ecweZeh}g~#?$??;vp\`drfWje~by&;)028swYci}kTob{at)7*55=pzVnjxlQlotlw,3/682}ySio{a^alqkr/? ;;7z|Pd`vb[firf}"3%<>4ws]geqgXkfex%7&139tvZbf|hUhcx`{<883:0=pzVoe:6y}_sqwyEFwjj<0LMv>:G87>4}T=80?5;48:011f3ef2:2<9>ua40795>h39?0?7):>3;63`>{T5\13590<`=83;8>o8la;1;303<[=l184h50;306g0di393;8;4d5;:>5<628qX9<4;9784>455j?ij6>68529uP4>2290:6<4>94yP14<31?0<6<==b7ab>6>0=:1/8=9513:8R1732;q~=><51:w276<73t.:;i4>9:`7=<<72:o1?7=j{I631>\3>38p=:4>0;'5=g=<030(9?=:5;;?l2bm3:17d;?3;29?j2>l3:17b:67;29?l2a?3:17b:>8;29?l2a83:17b:9a;29 41a2=2o7c?8e;28?j2113:1(<9i:5:g?k70m3;07b:98;29 41a2=2o7c?8e;08?j21?3:1(<9i:5:g?k70m3907b:96;29 41a2=2o7c?8e;68?j21=3:1(<9i:5:g?k70m3?07b:93;29 41a2=2o7c?8e;48?j21:3:1(<9i:5:g?k70m3=07b:91;29 41a2=2o7c?8e;:8?j2183:1(<9i:5:g?k70m3307b::f;29 41a2=2o7c?8e;c8?j22m3:1(<9i:5:g?k70m3h07b::d;29 41a2=2o7c?8e;a8?j22k3:1(<9i:5:g?k70m3n07b::b;29 41a2=2o7c?8e;g8?j22i3:1(<9i:5:g?k70m3l07b::8;29 41a2=2o7c?8e;33?>i3=>0;6)?8f;6;`>h6?l0:=65`44494?"6?o0?4i5a16g957=6=4+16d90=b4?:%34b?2?l2d:;h4>5:9l004=83.:;k4;8e9m52c=9?10c9;>:18'52`=<1n0b<9j:058?j2283:1(<9i:5:g?k70m3;376a;4g83>!70n3>3h6`>7d82=>=h<>:1<7*>7g87o1=l54o54e>5<#9>l185j4n05f>4d<3f>=i7>5$05e>1>c3g;i3=00;6)?8f;6;`>h6?l09=65`45g94?"6?o0?4i5a16g967=o6=4+16d90=b8<7>5$05e>1253g;9i7>5$05e>1253g;9o7>5$05e>1253g;9m7>5$05e>1253g;<3`>847>5$05e>1253g;8:7>5$05e>1253g;887>5$05e>1253g;8>7>5$05e>1253g;54?:%34b?23:2d:;h4>1:9j0`4=831i8=850;394?6|@=:>7)?7a;632>i6?j0;66smd583>4<729qC8=;4$0:b>a2\3>3;=w?l5d;0g>gx"60h0?5n5+1369`7=#=1=:l4i5ge>5<5<5<5<#9>l18o;4n05f>5=5<#9>l18o;4n05f>7=54i5`3>5<#9>l18o;4n05f>1=5<#9>l18o;4n05f>3=5<#9>l18o;4n05f>==5<5<#9>l19=<4n05f>4=5<#9>l19=<4n05f>6=5<#9>l19=<4n05f>0=5<#9>l19=<4n05f>2=5<#9>l19=<4n05f><=5<#9>l18hj4n05f>4=5<#9>l18hj4n05f>6=5<#9>l18hj4n05f>0=6=4+16d90`b5<#9>l18hj4n05f>2=5<#9>l18h?4n05f>5=5<#9>l18h?4n05f>7=54i5f`>5<#9>l18h?4n05f>1=5<#9>l18h?4n05f>3=5<#9>l18h?4n05f>==5<6=4+16d90705<#9>l18?84n05f>4=5<#9>l18?84n05f>6=5<#9>l18?84n05f>0=5<#9>l18?84n05f>2=5<#9>l18?84n05f><=5<5<#9>l18nl4n05f>4=5<#9>l18nl4n05f>6=5<#9>l18nl4n05f>0=5<#9>l18nl4n05f>2=5<#9>l18nl4n05f><=5<5<5<5<5<#9>l185j4n05f>5=5<#9>l185j4n05f>7=54o545>5<#9>l185j4n05f>1=6=4+16d90=b5<#9>l185j4n05f>3=5<#9>l185j4n05f>==5<#9>l185j4n05f>d=5<#9>l185j4n05f>f=5<#9>l185j4n05f>`=5<#9>l185j4n05f>46<3f>>;7>5$05e>1>c3g;;:m713<72-;07b::3;29 41a2=2o7c?8e;36?>i3=;0;6)?8f;6;`>h6?l0::65`44394?"6?o0?4i5a16g952=32e?;=4?:%34b?2?l2d:;h4>a:9l03`=83.:;k4;8e9m52c=9k10c98j:18'52`=<1n0b<9j:0a8?j21l3:1(<9i:5:g?k70m3;o76a;6b83>!70n3>3h6`>7d82a>=h7g87o1=k54o547>5<#9>l185j4n05f>76<3f>>57>5$05e>1>c3g;;:m70`<72-;:18'52`=<=80b<9j:198m157290/=:h54508j41b2810e910e9=6:18'52`=<=80b<9j:998m15?290/=:h54508j41b2010e9=8:18'52`=<=80b<9j:`98m151290/=:h54508j41b2k10e9=::18'52`=<=80b<9j:b98m153290/=:h54508j41b2m10e9=<:18'52`=<=80b<9j:d98m155290/=:h54508j41b2o10e9<6:18'52`=<=80b<9j:028?l2503:1(<9i:561?k70m3;:76g;1883>>o3l<0;6)?8f;6g2>h6?l0;76g;d583>!70n3>o:6`>7d82?>o3l:0;6)?8f;6g2>h6?l0976g;d383>!70n3>o:6`>7d80?>o3l80;6)?8f;6g2>h6?l0?76g;d183>!70n3>o:6`>7d86?>o3ko0;6)?8f;6g2>h6?l0=76g;cd83>!70n3>o:6`>7d84?>o3km0;6)?8f;6g2>h6?l0376g;cb83>!70n3>o:6`>7d8:?>o3jl0;6)?8f;6ab>h6?l0;76g;be83>!70n3>ij6`>7d82?>o3jj0;6)?8f;6ab>h6?l0976g;bc83>!70n3>ij6`>7d80?>o3jh0;6)?8f;6ab>h6?l0?76g;b883>!70n3>ij6`>7d86?>o3j10;6)?8f;6ab>h6?l0=76g;b683>!70n3>ij6`>7d84?>o3j?0;6)?8f;6ab>h6?l0376a;a083>>i3:>0;66g;e383>>d3990;6<4?:1y'5=g=l=1C8=h4H526?jb42900qo:>1;295?6=8r.:4l4;079K05`<@=:>7b?8c;29?xd4n;0;6>4?:1y'5=g=km1C8=h4H526?M243-;8<7:i3:&f5?4>i6080;66sm3gf94?5=83:p(<6n:bf8L16a3A>;96F;3:&275<3n:1/i<4=;h64>5<>54g18 `7=:2c?;7>5;h71>5<8`8g5>N38o1C8=;4H518 4572=l87)k>:39j02<722c?57>5;h71>5<5<53;294~"60h0hh6F;0g9K053<@=90(<=?:5d0?!c62;1b8:4?::k66?6=3f;3=7>5;|`0b5<72<0;6=u+19c9`4=O<9l0D9>:;I60?!7483>m?6*j1;08m11=831b844?::k66?6=3`;3<7>5;n3;5?6=3th8jl4?:583>5}#91k1h=5G41d8L1623-o:6?5f4683>>o2:3:17d?70;29?j7?93:17pl1<729q/=5o5d19K05`<@=:>7)k>:39j02<722c>>7>5;h3;4?6=3f;3=7>5;|`0b=<72=0;6=u+19c9`5=O<9l0D9>:;%g2>7=n<>0;66g:2;29?l7?83:17b?71;29?xd38:0;694?:1y'5=g=l91C8=h4H526?!c62;1b8:4?::k66?6=3`;3<7>5;n3;5?6=3th?5}#91k1h=5G41d8L1623-o:6?5f4683>>o2:3:17d?70;29?j7?93:17pl=9`83>1<729q/=5o5d19K05`<@=:>7)k>:79j02<722c>>7>5;h3;4?6=3f;3=7>5;|`063<72=0;6=u+19c9g`=O<9l0D9>:;%g2>7=n<>0;66g;e;29?l352900c<6>:188yg5583:197>50z&25;h6:>5<>i6080;66sm33;94?2=83:p(<6n:e28L16a3A>;96*j1;08m11=831b9?4?::k2<5<722e:4<4?::a773=83>1<7>t$0:b>fc<@=:m7E:?5:&f5?4>o2:3:17b?71;29?xd5?h0;694?:1y'5=g=9:;0D9>i;I631>o3j3:17d;<:188m4>42900c<9n:188yg4013:187>50z&24?::k2<6<722e:;l4?::a621=83>1<7>t$0:b>4563A>;j6F;049j0g<722c>?7>5;h3;7?6=3f;5;|`133<72=0;6=u+19c9567<@=:m7E:?5:k7f?6=3`?86=44i0:0>5<8`8274=O<9l0D9>:;h6a>5<k1<75rb3:`>5<3290;w)?7a;305>N38o1C8=;4i5`94?=n=:0;66g>8283>>i6?h0;66sm29`94?2=83:p(<6n:012?M27n2B?<85f4c83>>o2;3:17d?73;29?j70i3:17pl=8`83>1<729q/=5o51238L16a3A>;96g;b;29?l342900e<6<:188k41f2900qo<79;290?6=8r.:4l4>309K05`<@=:>7d:m:188m05=831b=5=50;9l52g=831vn?kl:187>5<7s-;3m7?<1:J74c=O<9?0e9l50;9j16<722c:4>4?::m23d<722wi>hl50;694?6|,82j6<=>;I63b>N38<1b8o4?::k67?6=3`;3?7>5;n34e?6=3th9il4?:583>5}#91k1=>?4H52e?M27=2c?n7>5;h70>5<5<54;294~"60h0:?<5G41d8L1623`>i6=44i4194?=n9191<75`16c94?=zj;o36=4;:183!7?i3;8=6F;0g9K053>o60:0;66a>7`83>>{e:ol1<7:50;2x 4>f289:7E:?f:J740=ni;I631>o3j3:17d;<:188m4>42900c<9n:188yg4al3:187>50z&24?::k2<6<722e:;l4?::a6cd=83>1<7>t$0:b>4563A>;j6F;049j0g<722c>?7>5;h3;7?6=3f;5;|`050<72=0;6=u+19c9567<@=:m7E:?5:k7f?6=3`?86=44i0:0>5<8`8274=O<9l0D9>:;h6a>5<k1<75rb230>5<3290;w)?7a;305>N38o1C8=;4i5`94?=n=:0;66g>8283>>i6?h0;66sm30094?2=83:p(<6n:012?M27n2B?<85f4c83>>o2;3:17d?73;29?j70i3:17pl<1083>1<729q/=5o51238L16a3A>;96g;b;29?l342900e<6<:188k41f2900qon6=44i4094?=h91;1<75rb32f>5<3290;w)?7a;af?M27n2B?<85+e081?l202900e9k50;9j17<722e:4<4?::a65b=83>1<7>t$0:b>fc<@=:m7E:?5:&f5?4>o2:3:17b?71;29?xd58j0;694?:1y'5=g=kl1C8=h4H526?!c62;1b8:4?::k7a?6=3`?96=44o0:2>5<54;294~"60h0hi6F;0g9K053<,l;1>6g;7;29?l2b2900e8<50;9l5=7=831vn?>n:187>5<7s-;3m7mj;I63b>N38<1/i<4=;h64>5<>i6080;66sm21;94?2=83:p(<6n:bg8L16a3A>;96*j1;08m11=831b8h4?::k66?6=3f;3=7>5;|`14=<72=0;6=u+19c9g`=O<9l0D9>:;%g2>7=n<>0;66g;e;29?l352900c<6>:188yg47?3:187>50z&25;h6f>5<ac83>1<729q/=5o5cd9K05`<@=:>7)k>:39j02<722c?i7>5;h71>5<8`8`a>N38o1C8=;4$d396>o3?3:17d:j:188m04=831d=5?50;9~f4g>290?6=4?{%3;e?eb3A>;j6F;049'a4<53`><6=44i5g94?=n=;0;66a>8083>>{e9h21<7:50;2x 4>f2jo0D9>i;I631>"b9380e9950;9j0`<722c>>7>5;n3;5?6=3th:m:4?:583>5}#91k1oh5G41d8L1623-o:6?5f4683>>o3m3:17d;=:188k4>62900qo?n6;290?6=8r.:4l4le:J74c=O<9?0(h?52:k73?6=3`>n6=44i4094?=h91;1<75rb0c6>5<3290;w)?7a;af?M27n2B?<85+e081?l202900e9k50;9j17<722e:4<4?::a60d=83>1<7>t$0:b>fc<@=:m7E:?5:&f5?4>o2:3:17b?71;29?xd5=h0;694?:1y'5=g=kl1C8=h4H526?!c62;1b8:4?::k7a?6=3`?96=44o0:2>5<57>54;294~"60h0hi6F;0g9K053<,l;1>6g;7;29?l2b2900e8<50;9l5=7=831vn?;7:187>5<7s-;3m7mj;I63b>N38<1/i<4=;h64>5<>i6080;66sm24594?2=83:p(<6n:bg8L16a3A>;96*j1;08m11=831b8h4?::k66?6=3f;3=7>5;|`113<72=0;6=u+19c9g`=O<9l0D9>:;%g2>7=n<>0;66g;e;29?l352900c<6>:188yg42=3:187>50z&25;h6f>5<8=50;694?6|,82j6nk4H52e?M27=2.n=7<4i5594?=nf483>1<729q/=5o5cd9K05`<@=:>7)k>:39j02<722c?i7>5;h71>5<8`8`a>N38o1C8=;4$d396>o3?3:17d:j:188m04=831d=5?50;9~f4`4290?6=4?{%3;e?eb3A>;j6F;049'a4<53`><6=44i5g94?=n=;0;66a>8083>>{e9o81<7:50;2x 4>f2jo0D9>i;I631>"b9380e9950;9j0`<722c>>7>5;n3;5?6=3th:j<4?:583>5}#91k1oh5G41d8L1623-o:6?5f4683>>o3m3:17d;=:188k4>62900qo?i0;290?6=8r.:4l4le:J74c=O<9?0(h?52:k73?6=3`>n6=44i4094?=h91;1<75rb0ge>5<3290;w)?7a;af?M27n2B?<85+e081?l202900e9k50;9j17<722e:4<4?::a5`c=83>1<7>t$0:b>fc<@=:m7E:?5:&f5?4>o2:3:17b?71;29?xd6mm0;694?:1y'5=g=kl1C8=h4H526?!c62;1b8:4?::k7a?6=3`?96=44o0:2>5<54;294~"60h0hi6F;0g9K053<@=90(<=?:5d0?!c62;1b8:4?::k7a?6=3`?96=44o0:2>5<54;294~"60h0hi6F;0g9K053<@=90(<=?:5d0?!c62;1b8:4?::k7a?6=3`?96=44o0:2>5<54;294~"60h0hi6F;0g9K053<@=90(<=?:5d0?!c62;1b8:4?::k7a?6=3`?96=44o0:2>5<54;294~"60h0hi6F;0g9K053<@=90(<=?:5d0?!c62;1b8:4?::k7a?6=3`?96=44o0:2>5<54;294~"60h0hi6F;0g9K053<@=90(<=?:5d0?!c62;1b8:4?::k7a?6=3`?96=44o0:2>5<54;294~"60h0hi6F;0g9K053<@=90(<=?:5d0?!c62;1b8:4?::k7a?6=3`?96=44o0:2>5<54;294~"60h0hi6F;0g9K053<@=90(<=?:5d0?!c62;1b8:4?::k7a?6=3`?96=44o0:2>5<7>54;294~"60h0hi6F;0g9K053<@=90(<=?:5d0?!c62;1b8:4?::k7a?6=3`?96=44o0:2>5<54;294~"60h0hi6F;0g9K053<@=90(<=?:5d0?!c62;1b8:4?::k7a?6=3`?96=44o0:2>5<54;294~"60h0hi6F;0g9K053<@=90(<=?:5d0?!c62;1b8:4?::k7a?6=3`?96=44o0:2>5<54;294~"60h0hi6F;0g9K053<@=90(<=?:5d0?!c62;1b8:4?::k7a?6=3`?96=44o0:2>5<7>54;294~"60h0hi6F;0g9K053<@=90(<=?:5d0?!c62;1b8:4?::k7a?6=3`?96=44o0:2>5<54;294~"60h0hi6F;0g9K053<@=90(<=?:5d0?!c62;1b8:4?::k7a?6=3`?96=44o0:2>5<54;294~"60h0hi6F;0g9K053<@=90(<=?:5d0?!c62;1b8:4?::k7a?6=3`?96=44o0:2>5<54;294~"60h0hi6F;0g9K053<@=90(<=?:5d0?!c62;1b8:4?::k7a?6=3`?96=44o0:2>5<54;294~"60h0hi6F;0g9K053<@=90(<=?:5d0?!c62;1b8:4?::k7a?6=3`?96=44o0:2>5<54;294~"60h0hi6F;0g9K053<@=90(<=?:5d0?!c62;1b8:4?::k7a?6=3`?96=44o0:2>5<54;294~"60h0hi6F;0g9K053<@=90(<=?:5d0?!c62;1b8:4?::k7a?6=3`?96=44o0:2>5<54;294~"60h0hi6F;0g9K053<@=90(<=?:5d0?!c62;1b8:4?::k7a?6=3`?96=44o0:2>5<54;294~"60h0hi6F;0g9K053<,l;1>6g;7;29?l2b2900e8<50;9l5=7=831vn5<7s-;3m7mj;I63b>N38<1/i<4=;h64>5<>i6080;66sm1bd94?2=83:p(<6n:bg8L16a3A>;96*j1;08m11=831b8h4?::k66?6=3f;3=7>5;|`2g`<72=0;6=u+19c9g`=O<9l0D9>:;%g2>7=n<>0;66g;e;29?l352900c<6>:188yg7dl3:187>50z&25;h6f>5<c`83>1<729q/=5o5cd9K05`<@=:>7)k>:39j02<722c?i7>5;h71>5<8`8`a>N38o1C8=;4$d396>o3?3:17d:j:188m04=831d=5?50;9~f752290?6=4?{%3;e?eb3A>;j6F;049'a4<53`><6=44i5g94?=n=;0;66a>8083>>{e::>1<7:50;2x 4>f2jo0D9>i;I631>"b9380e9950;9j0`<722c>>7>5;n3;5?6=3th9?>4?:583>5}#91k1oh5G41d8L1623-o:6?5f4683>>o3m3:17d;=:188k4>62900qo<<2;290?6=8r.:4l4le:J74c=O<9?0(h?52:k73?6=3`>n6=44i4094?=h91;1<75rb312>5<3290;w)?7a;af?M27n2B?<85+e081?l202900e9k50;9j17<722e:4<4?::a666=83>1<7>t$0:b>fc<@=:m7E:?5:&f5?4>o2:3:17b?71;29?xd5:o0;694?:1y'5=g=kl1C8=h4H526?!c62;1b8:4?::k7a?6=3`?96=44o0:2>5<54;294~"60h0hi6F;0g9K053<,l;1>6g;7;29?l2b2900e8<50;9l5=7=831vn?5<7s-;3m7mj;I63b>N38<1/i<4=;h64>5<>i6080;66sm23a94?2=83:p(<6n:bg8L16a3A>;96*j1;08m11=831b8h4?::k66?6=3f;3=7>5;|`1`4<72<0;6=u+19c9gc=O<9l0D9>:;%g2>7=n<>0;66g;9;29?l2b2900e8<50;9l5=7=831vn?j?:186>5<7s-;3m7mi;I63b>N38<1/i<4=;h64>5<>o2:3:17b?71;29?xd5ko0;684?:1y'5=g=ko1C8=h4H526?!c62;1b8:4?::k7=?6=3`>n6=44i4094?=h91;1<75rb3af>5<2290;w)?7a;ae?M27n2B?<85+e081?l202900e9750;9j0`<722c>>7>5;n3;5?6=3th9oi4?:483>5}#91k1ok5G41d8L1623-o:6?5f4683>>o313:17d:j:188m04=831d=5?50;9~f7ed290>6=4?{%3;e?ea3A>;j6F;049'a4<53`><6=44i5;94?=n0<729q/=5o5cg9K05`<@=:>7)k>:39j02<722c?57>5;h6f>5<t$0:b>f`<@=:m7E:?5:&f5?4>o3m3:17d;=:188k4>62900qo7d:m:188m4422900c<9n:188yg4el3:1?7>50z&2309K05`<@=:>7d:m:188m05=831b=5=50;9l52g=831vn?ll:180>5<7s-;3m7:?e:J74c=O<9?0e9l50;9j573=831d=:o50;9~f7d5290?6=4?{%3;e?7492B?4?::k2<6<722e:;l4?::a6gd=8391<7>t$0:b>16b3A>;j6F;049j0g<722c:>84?::m23d<722wi>o>50;694?6|,82j6<=>;I63b>N38<1b8o4?::k67?6=3`;3?7>5;n34e?6=3th9nl4?:283>5}#91k18=k4H52e?M27=2c?n7>5;h311?6=3f;5;|`1e`<72=0;6=u+19c9567<@=:m7E:?5:k7f?6=3`?86=44i0:0>5<8`874`=O<9l0D9>:;h6a>5<6=44o05b>5<54;294~"60h0:?<5G41d8L1623`>i6=44i4194?=n9191<75`16c94?=zj;h36=4<:183!7?i3>;i6F;0g9K053k1<75rb3cb>5<3290;w)?7a;305>N38o1C8=;4i5`94?=n=:0;66g>8283>>i6?h0;66sm2c594?5=83:p(<6n:52f?M27n2B?<85f4c83>>o6:<0;66a>7`83>>{e:h21<7:50;2x 4>f289:7E:?f:J740=n4?:1y'5=g=<9o0D9>i;I631>o3j3:17d?=5;29?j70i3:17pl=a783>1<729q/=5o51238L16a3A>;96g;b;29?l342900e<6<:188k41f2900qo26=44i5g94?=n=;0;66a>8083>>{e:l81<7;50;2x 4>f2jl0D9>i;I631>"b9380e9950;9j0<<722c?i7>5;h71>5<8`8`b>N38o1C8=;4$d396>o3?3:17d:6:188m1c=831b9?4?::m2<4<722wi>h>50;794?6|,82j6nh4H52e?M27=2.n=7<4i5594?=n<00;66g;e;29?l352900c<6>:188yg4cn3:197>50z&25;h6:>5<>i6080;66sm2eg94?3=83:p(<6n:bd8L16a3A>;96*j1;08m11=831b844?::k7a?6=3`?96=44o0:2>5<55;294~"60h0hj6F;0g9K053<,l;1>6g;7;29?l2>2900e9k50;9j17<722e:4<4?::a6ae=83?1<7>t$0:b>f`<@=:m7E:?5:&f5?4>o3m3:17d;=:188k4>62900qo26=44i5g94?=n=;0;66a>8083>>{e:?h1<7:50;2x 4>f2jo0D9>i;I631>"b9380e9950;9j0`<722c>>7>5;n3;5?6=3th9:54?:583>5}#91k1oh5G41d8L1623-o:6?5f4683>>o3m3:17d;=:188k4>62900qo<9f;290?6=8r.:4l4k0:J74c=O<9?0(h?56:k73?6=3`?96=44i0:3>5<8`8g4>N38o1C8=;4$d392>o3?3:17d;=:188m4>72900c<6>:188yg51=3:197>50z&25;h6:>5<>i6080;66sm37694?3=83:p(<6n:bd8L16a3A>;96*j1;08m11=831b844?::k7a?6=3`?96=44o0:2>5<7>55;294~"60h0hj6F;0g9K053<,l;1>6g;7;29?l2>2900e9k50;9j17<722e:4<4?::a737=83?1<7>t$0:b>f`<@=:m7E:?5:&f5?4>o3m3:17d;=:188k4>62900qo=93;291?6=8r.:4l4lf:J74c=O<9?0(h?52:k73?6=3`>26=44i5g94?=n=;0;66a>8083>>{e;?:1<7;50;2x 4>f2jl0D9>i;I631>"b9380e9950;9j0<<722c?i7>5;h71>5<8`8`b>N38o1C8=;4$d396>o3?3:17d:6:188m1c=831b9?4?::m2<4<722wi?8j50;794?6|,82j6i?4H52e?M27=2.n=784i5594?=n<00;66g:2;29?l7?83:17b?71;29?xd4=j0;684?:1y'5=g=l81C8=h4H526?!c62?1b8:4?::k7=?6=3`?96=44i0:3>5<8`8`b>N38o1C8=;4$d396>o3?3:17d:6:188m1c=831b9?4?::m2<4<722wi?8>50;194?6|,82j69>j;I63b>N38<1b8o4?::k260<722e:;l4?::a71`=8391<7>t$0:b>16b3A>;j6F;049j0g<722c:>84?::m23d<722wi?9;50;694?6|,82j6<=>;I63b>N38<1b8o4?::k67?6=3`;3?7>5;n34e?6=3th88h4?:283>5}#91k18=k4H52e?M27=2c?n7>5;h311?6=3f;5;|`006<72=0;6=u+19c9567<@=:m7E:?5:k7f?6=3`?86=44i0:0>5<8`874`=O<9l0D9>:;h6a>5<6=44o05b>5<54;294~"60h0:?<5G41d8L1623`>i6=44i4194?=n9191<75`16c94?=zj:>h6=4<:183!7?i3>;i6F;0g9K053k1<75rb21e>5<3290;w)?7a;305>N38o1C8=;4i5`94?=n=:0;66g>8283>>i6?h0;66sm35`94?5=83:p(<6n:52f?M27n2B?<85f4c83>>o6:<0;66a>7`83>>{e;:n1<7:50;2x 4>f289:7E:?f:J740=n4?:1y'5=g=<9o0D9>i;I631>o3j3:17d?=5;29?j70i3:17pl<3c83>1<729q/=5o51238L16a3A>;96g;b;29?l342900e<6<:188k41f2900qo=;9;297?6=8r.:4l4;0d9K05`<@=:>7d:m:188m4422900c<9n:188yg5413:187>50z&2=8:187>5<7s-;3m7?<1:J74c=O<9?0e9l50;9j16<722c:4>4?::m23d<722wi?9950;194?6|,82j69>j;I63b>N38<1b8o4?::k260<722e:;l4?::a763=83>1<7>t$0:b>4563A>;j6F;049j0g<722c>?7>5;h3;7?6=3f;5;|`037<72<0;6=u+19c9gc=O<9l0D9>:;%g2>7=n<>0;66g;9;29?l2b2900e8<50;9l5=7=831vn>9?:186>5<7s-;3m7mi;I63b>N38<1/i<4=;h64>5<>o2:3:17b?71;29?xd4?80;684?:1y'5=g=l81C8=h4H526?!c62?1b8:4?::k7=?6=3`?96=44i0:3>5<8`8`b>N38o1C8=;4$d396>o3?3:17d:6:188m1c=831b9?4?::m2<4<722wi?::50;794?6|,82j6nh4H52e?M27=2.n=7<4i5594?=n<00;66g;e;29?l352900c<6>:188yg50?3:197>50z&25;h6:>5<>i6080;66sm36794?3=83:p(<6n:bd8L16a3A>;96*j1;08m11=831b844?::k7a?6=3`?96=44o0:2>5<55;294~"60h0hj6F;0g9K053<,l;1>6g;7;29?l2>2900e9k50;9j17<722e:4<4?::a72>=83?1<7>t$0:b>f`<@=:m7E:?5:&f5?4>o3m3:17d;=:188k4>62900qo=89;291?6=8r.:4l4lf:J74c=O<9?0(h?52:k73?6=3`>26=44i5g94?=n=;0;66a>8083>>{e;1<1<7;50;2x 4>f2jl0D9>i;I631>"b9380e9950;9j0<<722c?i7>5;h71>5<8`8g5>N38o1C8=;4$d392>o3?3:17d:6:188m04=831b=5>50;9l5=7=831vn>6::186>5<7s-;3m7mi;I63b>N38<1/i<4=;h64>5<>o2:3:17b?71;29?xd40>0;684?:1y'5=g=ko1C8=h4H526?!c62;1b8:4?::k7=?6=3`>n6=44i4094?=h91;1<75rb2:;>5<2290;w)?7a;ae?M27n2B?<85+e081?l202900e9750;9j0`<722c>>7>5;n3;5?6=3th84o4?:483>5}#91k1ok5G41d8L1623-o:6?5f4683>>o313:17d:j:188m04=831d=5?50;9~f6>>290>6=4?{%3;e?ea3A>;j6F;049'a4<53`><6=44i5;94?=n0<729q/=5o5cg9K05`<@=:>7)k>:39j02<722c?57>5;h6f>5<5;|`0:;%g2>7=n<>0;66g;9;29?l2b2900e8<50;9l5=7=831vn>o>:186>5<7s-;3m7mi;I63b>N38<1/i<4=;h64>5<>o2:3:17b?71;29?xd4i90;684?:1y'5=g=ko1C8=h4H526?!c62;1b8:4?::k7=?6=3`>n6=44i4094?=h91;1<75rb2;e>5<2290;w)?7a;ae?M27n2B?<85+e081?l202900e9750;9j0`<722c>>7>5;n3;5?6=3th85h4?:483>5}#91k1ok5G41d8L1623-o:6?5f4683>>o313:17d:j:188m04=831d=5?50;9~f6?c290>6=4?{%3;e?ea3A>;j6F;049'a4<53`><6=44i5;94?=n0<729q/=5o5cg9K05`<@=:>7)k>:39j02<722c?57>5;h6f>5<5;|`0=d<72<0;6=u+19c9gc=O<9l0D9>:;%g2>7=n<>0;66g;9;29?l2b2900e8<50;9l5=7=831vn>76:186>5<7s-;3m7mi;I63b>N38<1/i<4=;h64>5<>o2:3:17b?71;29?xd4110;684?:1y'5=g=ko1C8=h4H526?!c62;1b8:4?::k7=?6=3`>n6=44i4094?=h91;1<75rb2`e>5<2290;w)?7a;ae?M27n2B?<85+e081?l202900e9750;9j0`<722c>>7>5;n3;5?6=3th8nh4?:483>5}#91k1ok5G41d8L1623-o:6?5f4683>>o313:17d:j:188m04=831d=5?50;9~f6dc290>6=4?{%3;e?ea3A>;j6F;049'a4<53`><6=44i5;94?=n0<729q/=5o5cg9K05`<@=:>7)k>:39j02<722c?57>5;h6f>5<5;|`0fd<72<0;6=u+19c9gc=O<9l0D9>:;%g2>7=n<>0;66g;9;29?l2b2900e8<50;9l5=7=831vn>l7:186>5<7s-;3m7mi;I63b>N38<1/i<4=;h64>5<>o2:3:17b?71;29?xd4j>0;684?:1y'5=g=ko1C8=h4H526?!c62;1b8:4?::k7=?6=3`>n6=44i4094?=h91;1<75rb2`5>5<2290;w)?7a;ae?M27n2B?<85+e081?l202900e9750;9j0`<722c>>7>5;n3;5?6=3th8n84?:483>5}#91k1ok5G41d8L1623-o:6?5f4683>>o313:17d:j:188m04=831d=5?50;9~f6d3290>6=4?{%3;e?ea3A>;j6F;049'a4<53`><6=44i5;94?=n0<729q/=5o5cg9K05`<@=:>7)k>:39j02<722c?57>5;h6f>5<5;|`0f4<72<0;6=u+19c9gc=O<9l0D9>:;%g2>7=n<>0;66g;9;29?l2b2900e8<50;9l5=7=831vn>l?:186>5<7s-;3m7mi;I63b>N38<1/i<4=;h64>5<>o2:3:17b?71;29?xd4io0;684?:1y'5=g=ko1C8=h4H526?!c62;1b8:4?::k7=?6=3`>n6=44i4094?=h91;1<75rb2cg>5<2290;w)?7a;ae?M27n2B?<85+e081?l202900e9750;9j0`<722c>>7>5;n3;5?6=3th8mn4?:483>5}#91k1ok5G41d8L1623-o:6?5f4683>>o313:17d:j:188m04=831d=5?50;9~f6ge290>6=4?{%3;e?ea3A>;j6F;049'a4<53`><6=44i5;94?=n0<729q/=5o5cg9K05`<@=:>7)k>:39j02<722c?57>5;h6f>5<5;|`0e=<72<0;6=u+19c9gc=O<9l0D9>:;%g2>7=n<>0;66g;9;29?l2b2900e8<50;9l5=7=831vn>o8:186>5<7s-;3m7mi;I63b>N38<1/i<4=;h64>5<>o2:3:17b?71;29?xd4i?0;684?:1y'5=g=ko1C8=h4H526?!c62;1b8:4?::k7=?6=3`>n6=44i4094?=h91;1<75rb2c6>5<2290;w)?7a;ae?M27n2B?<85+e081?l202900e9750;9j0`<722c>>7>5;n3;5?6=3th8m94?:483>5}#91k1ok5G41d8L1623-o:6?5f4683>>o313:17d:j:188m04=831d=5?50;9~f6e2290>6=4?{%3;e?ea3A>;j6F;049'a4<53`><6=44i5;94?=n0<729q/=5o5cg9K05`<@=:>7)k>:39j02<722c?57>5;h6f>5<5;|`0g7<72<0;6=u+19c9gc=O<9l0D9>:;%g2>7=n<>0;66g;9;29?l2b2900e8<50;9l5=7=831vn>m>:186>5<7s-;3m7mi;I63b>N38<1/i<4=;h64>5<>o2:3:17b?71;29?xd4k90;684?:1y'5=g=ko1C8=h4H526?!c62;1b8:4?::k7=?6=3`>n6=44i4094?=h91;1<75rb2`:>5<2290;w)?7a;ae?M27n2B?<85+e081?l202900e9750;9j0`<722c>>7>5;n3;5?6=3th8mh4?:483>5}#91k1ok5G41d8L1623-o:6?5f4683>>o313:17d:j:188m04=831d=5?50;9~f6g4290>6=4?{%3;e?ea3A>;j6F;049'a4<53`><6=44i5;94?=n0<729q/=5o5cg9K05`<@=:>7)k>:39j02<722c?57>5;h6f>5<>oc>3:17b?8a;29?xd4n=0;6>4?:1y'5=g=9;k0D9>i;I631>"b93;j7dj::188ma0=831d=:o50;9~f77629086=4?{%3;e?75i2B?5;|`2ec<72:0;6=u+19c957g<@=:m7E:?5:&f5?7a3`n>6=44ie494?=h9>k1<75rb0;a>5<4290;w)?7a;31e>N38o1C8=;4$d395c=nl<0;66gk6;29?j70i3:17pl>9`83>6<729q/=5o513c8L16a3A>;96*j1;3e?lb22900ei850;9l52g=831vn<76:180>5<7s-;3m7?=a:J74c=O<9?0(h?51g9j`0<722co:7>5;n34e?6=3th:554?:283>5}#91k1=?o4H52e?M27=2.n=7?i;hf6>5<>oc>3:17b?8a;29?xd61?0;6>4?:1y'5=g=9;k0D9>i;I631>"b93;m7dj::188ma0=831d=:o50;9~f4?229086=4?{%3;e?75i2B?5;|`2=1<72:0;6=u+19c957g<@=:m7E:?5:&f5?7a3`n>6=44ie494?=h9>k1<75rb0;0>5<4290;w)?7a;31e>N38o1C8=;4$d395c=nl<0;66gk6;29?j70i3:17pl>9383>6<729q/=5o513c8L16a3A>;96*j1;3e?lb22900ei850;9l52g=831vn<7>:180>5<7s-;3m7?=a:J74c=O<9?0(h?51g9j`0<722co:7>5;n34e?6=3th:5=4?:283>5}#91k1=?o4H52e?M27=2.n=7?i;hf6>5<>oc>3:17b?8a;29?xd60l0;6>4?:1y'5=g=9;k0D9>i;I631>"b93;m7dj::188ma0=831d=:o50;9~f4>c29086=4?{%3;e?75i2B?5;|`26=44ie494?=h9>k1<75rb0:a>5<4290;w)?7a;31e>N38o1C8=;4$d395c=nl<0;66gk6;29?j70i3:17pl=1283>1<729q/=5o513a8L16a3A>;96*j1;04?lb22900ei850;9j`2<722e:;l4?::a5g7=83>1<7>t$0:b>44d3A>;j6F;049'a4<5?2co97>5;hf5>5<>5fd483>>oc>3:17dj8:188k41f2900qo<>5;291?6=8r.:4l4>2d9K05`<@=:>7)k>:338ma3=831bh;4?::kg3?6=3`n36=44o05b>5<55;294~"60h0:>h5G41d8L1623-o:6??4ie794?=nl?0;66gk7;29?lb?2900c<9n:188yg4093:197>50z&25;hf;>5<8`826`=O<9l0D9>:;%g2>74>oc?3:17dj7:188k41f2900qo==4;297?6=8r.:4l4>2`9K05`<@=:>7)k>:568ma3=831bh;4?::m23d<722wi>;950;694?6|,82j6<N38<1/i<4>8:kg1?6=3`n=6=44ie594?=h9>k1<75rb20b>5<4290;w)?7a;31e>N38o1C8=;4$d3954=nl<0;66gk6;29?j70i3:17pl=1683>6<729q/=5o513c8L16a3A>;96*j1;3e?lb22900ei850;9l52g=831vn5<7s-;3m7?=a:J74c=O<9?0(h?51g9j`0<722co:7>5;n34e?6=3th9=44?:583>5}#91k1=?m4H52e?M27=2.n=7<8;hf6>5<>i6?h0;66sm1c594?2=83:p(<6n:00`?M27n2B?<85+e0813>oc=3:17dj9:188ma1=831d=:o50;9~f77e290>6=4?{%3;e?75m2B?k1<75rb0`:>5<2290;w)?7a;31a>N38o1C8=;4$d3964=nl<0;66gk6;29?lb02900ei650;9l52g=831vn>kl:180>5<7s-;3m7?=a:J74c=O<9?0(h?5c99j`0<722co:7>5;n34e?6=3th95:4?:283>5}#91k1=?o4H52e?M27=2.n=7<:;hf6>5<85fd483>>oc>3:17b?8a;29?xd49o0;684?:1y'5=g=9;o0D9>i;I631>"b938=7dj::188ma0=831bh:4?::kg5;|`04<<72<0;6=u+19c957c<@=:m7E:?5:&f5?413`n>6=44ie494?=nl>0;66gk8;29?j70i3:17pl=f783>0<729q/=5o513g8L16a3A>;96*j1;05?lb22900ei850;9j`2<722co47>5;n34e?6=3th8=h4?:483>5}#91k1=?k4H52e?M27=2.n=7<9;hf6>5<>oc03:17b?8a;29?xd4810;684?:1y'5=g=9;o0D9>i;I631>"b938=7dj::188ma0=831bh:4?::kg5;|`1b0<72<0;6=u+19c957c<@=:m7E:?5:&f5?413`n>6=44ie494?=nl>0;66gk8;29?j70i3:17pl=9783>0<729q/=5o513g8L16a3A>;96*j1;07?lb22900ei850;9j`2<722co47>5;n34e?6=3th94>4?:483>5}#91k1=?k4H52e?M27=2.n=7<;;hf6>5<>oc03:17b?8a;29?xd49m0;684?:1y'5=g=9;o0D9>i;I631>"b938=7dj::188ma0=831bh:4?::kg5;|`042<72<0;6=u+19c957c<@=:m7E:?5:&f5?413`n>6=44ie494?=nl>0;66gk8;29?j70i3:17pl=f583>0<729q/=5o513g8L16a3A>;96*j1;05?lb22900ei850;9j`2<722co47>5;n34e?6=3th9584?:483>5}#91k1=?k4H52e?M27=2.n=7<;;hf6>5<>oc03:17b?8a;29?xd50;0;684?:1y'5=g=9;o0D9>i;I631>"b938?7dj::188ma0=831bh:4?::kg5;|`05f<72<0;6=u+19c957c<@=:m7E:?5:&f5?413`n>6=44ie494?=nl>0;66gk8;29?j70i3:17pl<0783>0<729q/=5o513g8L16a3A>;96*j1;05?lb22900ei850;9j`2<722co47>5;n34e?6=3th9j>4?:483>5}#91k1=?k4H52e?M27=2.n=7<9;hf6>5<>oc03:17b?8a;29?xd51=0;684?:1y'5=g=9;o0D9>i;I631>"b938?7dj::188ma0=831bh:4?::kg5;|`1<4<72<0;6=u+19c957c<@=:m7E:?5:&f5?433`n>6=44ie494?=nl>0;66gk8;29?j70i3:17pl=9b83>1<729q/=5o513a8L16a3A>;96*j1;a`?lb22900ei850;9j`2<722e:;l4?::a74d=83>1<7>t$0:b>44d3A>;j6F;049'a4<6j2co97>5;hf5>5<6=4;:183!7?i3;9o6F;0g9K053<,l;1=o5fd483>>oc>3:17dj8:188k41f2900qo2b9K05`<@=:>7)k>:0`8ma3=831bh;4?::kg3?6=3f;5;|`067<72<0;6=u+19c957c<@=:m7E:?5:&f5?7b3`n>6=44ie494?=nl>0;66gk8;29?j70i3:17pl=9283>0<729q/=5o513g8L16a3A>;96*j1;07?lb22900ei850;9j`2<722co47>5;n34e?6=3th94=4?:483>5}#91k1=?k4H52e?M27=2.n=7<;;hf6>5<>oc03:17b?8a;29?xd5j<0;6?4?:1y'5=g=9;30D9>i;I631>"b93;:7dj::188k41f2900qo289K05`<@=:>7)k>:038ma3=831d=:o50;9~f7d629096=4?{%3;e?7512B?lh50;094?6|,82j6<<6;I63b>N38<1/i<4>1:kg1?6=3f;5;|`1ea<72;0;6=u+19c957?<@=:m7E:?5:&f5?763`n>6=44o05b>5<52;294~"60h0:>45G41d8L1623-o:6k1<75rb3c:>5<5290;w)?7a;31=>N38o1C8=;4$d3954=nl<0;66a>7`83>>{e:h=1<7<50;2x 4>f28827E:?f:J740=#m80:=6gk5;29?j70i3:17pl<4783>7<729q/=5o513;8L16a3A>;96*j1;32?lb22900c<9n:188yg53<3:1>7>50z&2:=:181>5<7s-;3m7?=9:J74c=O<9?0(h?5109j`0<722e:;l4?::a716=8381<7>t$0:b>44>3A>;j6F;049'a4<692co97>5;n34e?6=3th8?h4?:383>5}#91k1=?74H52e?M27=2.n=7?>;hf6>5<8`826<=O<9l0D9>:;%g2>47>i6?h0;66sm32:94?4=83:p(<6n:00:?M27n2B?<85+e0825>oc=3:17b?8a;29?xd4;?0;6?4?:1y'5=g=9;30D9>i;I631>"b93;:7dj::188k41f2900qo289K05`<@=:>7)k>:038ma3=831d=:o50;9~f63629096=4?{%3;e?7512B?N38<1/i<4=1:kg1?6=3`n=6=44ie594?=nl10;66a>7`83>>{e9kl1<7;50;2x 4>f288n7E:?f:J740=#m80946gk5;29?lb12900ei950;9j`=<722e:;l4?::a64`=83?1<7>t$0:b>44b3A>;j6F;049'a4<592co97>5;hf5>5<>i6?h0;66sm23394?3=83:p(<6n:00f?M27n2B?<85+e081<>oc=3:17dj9:188ma1=831bh54?::m23d<722wi??650;794?6|,82j6<N38<1/i<4lb:kg1?6=3`n=6=44ie594?=nl10;66a>7`83>>{e:?<1<7;50;2x 4>f288n7E:?f:J740=#m80::6gk5;29?lb12900ei950;9j`=<722e:;l4?::a7`g=832<6=4?{%3;e?7?:2B?44j:06957<6k3l1=>4>5;3g>x"6:90>7)?=1;78 a?==2.om7;4$e`91>"ck3?0(ij55:&ga?3<,82=6>5+19590>"b:3?0(h=55:&f0?3<,l?196*j6;78 `1==2.n47;4$d;91>"bi3?0(hl55:&fg?3<,ln196*je;78 ``==2.m<7;4$g391>"a:3?0(k=55:&e0?3<,o?196*i6;78 c1==2.m47;4$g;91>"ai3?0(kl55:&eg?3<,on196*ie;78 c`==2.:<=4:;%335?3<,8:9685+11191>"68=0>7)??5;78 4612<1/==955:&24=<23-;;57;4$02b>0=#99h196*>0b86?!77l3?0(<>j:49'55`==2.:==4:;%325?3<,8;9685+10191>"69=0>7)?>5;78 4712<1/=<955:&25=<23-;:57;4$03b>0=#98h196*>1b86?!76l3?0(16f3-o;685f4b83>>o3l3:17dm6:188mfg=831b=5650;9j5=?=831b8=650;9j05?=831b?54?:%34b?503g;4;h15>5<#9>l1?:5a16g95>=n;<0;6)?8f;14?k70m3807d=;:18'52`=;>1e=:k53:9j76<72-;o1965f3083>!70n39<7c?8e;48?l57290/=:h5369m52c=?21b>k4?:%34b?503g;5<#9>l1?:5a16g9=>=n<;0;6)?8f;62?k70m3:07d:?:18'52`=<81e=:k51:9j7c<72-;;o34a?4<3`9n6=4+16d904=i9>o1?65f3e83>!70n3>:7c?8e;68?l5d290/=:h5409m52c==21b?o4?:%34b?263g;5<#9>l18<5a16g93>=n;00;6)?8f;62?k70m3207d;m:18'52`==h1e=:k50:9j1<<72-;o1>65f5683>!70n3?j7c?8e;18?l31290/=:h55`9m52c=<21b984?:%34b?3f3g;5<#9>l19l5a16g92>=n>:0;6)?8f;7b?k70m3=07d8=:18'52`==h1e=:k58:9j24<72-;o1m65f5g83>!70n3?j7c?8e;`8?l3b290/=:h55`9m52c=k21b9i4?:%34b?3f3g;5<#9>l19l5a16g9a>=n==0;6)?8f;7b?k70m3l07d9j:18'52`=?m1e=:k50:9j3f<72-;o1>65f7883>!70n3=o7c?8e;18?l1?290/=:h57e9m52c=<21b;:4?:%34b?1c3g;5<#9>l1;i5a16g92>=n?<0;6)?8f;5g?k70m3=07d9;:18'52`=?m1e=:k58:9j36<72-;o1m65f7083>!70n3=o7c?8e;`8?l0a290/=:h57e9m52c=k21b:h4?:%34b?1c3g;5<#9>l1;i5a16g9a>=n>j0;6)?8f;5g?k70m3l07d8m:18'52`=?m1e=:k51198m3g=83.:;k48d:l23`<6921b:44?:%34b?1c3g;45<3`<<6=4+16d93a=i9>o1=954i7494?"6?o07d821>=n0<0;6)?8f;5g?k70m3;=76g74;29 41a2>n0b<9j:058?l>4290/=:h57e9m52c=9110e5<50;&23c<0l2d:;h4>9:9j<4<72-;5$05e>2b5<#9>l1;i5a16g95f=
h1<7*>7g84`>h6?l0:h65f7183>!70n3=o7c?8e;3f?>o1=3:1(<9i:6f8j41b28l07d67:18'52`=0>1e=:k50:9j<3<72-;o1<65f8c83>!70n32h7c?8e;38?l>f290/=:h58b9m52c=:21b444?:%34b?>d3g;5<#9>l1595a16g94>=h1:0;6)?8f;;7?k70m3;07b7=:18'52`=1=1e=:k52:9l=4<72-;o1865`8g83>!70n33?7c?8e;78?j?b290/=:h5959m52c=>21d5i4?:%34b??33g;5<#9>l1595a16g9<>=h1k0;6)?8f;;7?k70m3307b7n:18'52`=1=1e=:k5a:9l=<<72-;o1o65`9683>!70n33?7c?8e;f8?j?1290/=:h5959m52c=m21d4h4?:%34b??33g;5<#9>l1o<5a16g94>=hk90;6)?8f;a2?k70m3;07bl7:18'52`=j>1e=:k50:9lf3<72-;o1>65`b283>!70n3h<7c?8e;18?jd5290/=:h5b69m52c=<21dn<4?:%34b?d03g;5<#9>l1n:5a16g92>=hio0;6)?8f;`4?k70m3=07boj:18'52`=j>1e=:k58:9lea<72-;o1m65`ac83>!70n3h<7c?8e;`8?jg>290/=:h5b69m52c=k21dm54?:%34b?d03g;5<#9>l1n:5a16g9a>=hi?0;6)?8f;`4?k70m3l07bo::18'52`=j>1e=:k51198kd2=83.:;k4m7:l23`<6921dm>4?:%34b?d03g;45<3fk:6=4+16d9f2=i9>o1=954o`294?"6?o0i;6`>7d821>=hjo0;6)?8f;`4?k70m3;=76ame;29 41a2k=0b<9j:058?jdc290/=:h5b69m52c=9110com50;&23c9:9lfg<72-;5$05e>g15<#9>l1n:5a16g95f=7g8a3>h6?l0:h65`a`83>!70n3h<7c?8e;3f?>i>n3:1(<9i:c58j41b28l07bm8:18'52`=k?1e=:k50:9lg0<72-;o1>65`c283>!70n3i=7c?8e;18?xd5><0;684?:1y'5=g=9;l0D9>i;I631>"b93;=7dj::188ma0=831bh:4?::kg5;|`2fg<72:0;6=u+19c957d<@=:m7E:?5:&f5?7a3`n>6=44ie494?=h9;<1<75rb0``>5<3290;w)?7a;31`>N38o1C8=;4$d3965=nl<0;66gk6;29?lb02900c<<9:188yg46l3:1?7>50z&2;4?::a64c=83>1<7>t$0:b>44c3A>;j6F;049'a4<582co97>5;hf5>5<;5>h0o;63=708g<>;5>m0o463=668g1>;5>?0o963=648g1>{tX3n?1U8k:4^534?[2a92T?m=5Q4g78Z1g63W>h<6P;249]072X39m1U8mo6P;fc9]0cgX3m>1U8h84^5g6?[2b<2T?i>524029`6=:;oh19?523g2917=:;ok19?523g;917=:;o219?52411917=:<9819?5233;917=::>k19>5226;916=::>219>52265916=::><19>5229f916=::1i19>5229`916=::1k19>5229;916=::li19>522d`916=::lk19>522d;916=::l219>522gd916=::oo19>522gf916=::oi19>522g`916=:;8?19>52306916=:;8919>52300916=:;8;19>522c6916=::k819>522c2916=::ho19>522`a916=::hk19>522`:916=::h<19>52357916=:;=919>52353916=:;:l19>5232f916=:;:h19>5232;916=:;:=19>52327916=:;lk1=564=2gb>16>349nm79j;<1fe?1d349nm79n;<1fe?1>349nm797;<1fe?10349nm799;<1fe?12349nm79;;<1fe?14349nm79=;<1fe?16349nm78i;<1fe?0b349nm78k;<1fe?0d349nm78m;<1fe?0f349nm786;<1fe?0?349nm788;<1fe?01349nm76:;<1fe?>3349nm76<;<1fe?>5349nm76>;<1fe?>7349nm79i;<1fe?1e349nm79?;<1fe?02349nm76k;<1fe?>e349nm76n;<1fe?>>3ty?=54?:3y]04><5:8;6<6>;|q7b5<72:qU8k>4=2da>4>7349m<7?70:p0<1=838pR978;<05b?7?92wx9==50;1xZ0643499m7j:;<117:8;<1e5?20349m<7:8;<1ee?20349m57:8;<1en7:8;<06e?20348>57:8;<06;7:8;<062?20348>97:8;<060?20348>?7:8;<07=?20348?47:8;<073?20348?:7:8;<071?20348?87:8;<077?20348?>7:8;<075?20348?<7:8;<3g5?2034;o<7:8;<3`b?2034;hi7:8;<3``?2034;ho7:8;<3`f?2034;hm7:8;<3`=?20348o=7:8;<0g4?20348hj7:8;<0`a?20348hh7:8;<0`g?20348hm7:8;<0`=?20348hn7:8;<0f7?20348n>7:8;<0f5?20348n<7:8;<0gb?20348oi7:8;<0g`?20348oo7:8;<0gf?20348=n7:8;<057:8;<1a5?20349i<7:8;<1bb?20349jh7:8;<1bg?20349jn7:8;<1be?20349j57:8;<1b4>63ty?j:4?:4:xZ1`0349mh7:8;<1ef?20349mo7:8;<637?2034>;>7:8;<112?203499<7:8;<11=?20349997:8;<3b`?2034;jo7:8;<3bf?2034;jm7:8;<3b=?2034;j47:8;<3b3?2034;j:7:8;<3b1?2034;m97:8;<3e0?2034;m?7:8;<3e6?2034;m=7:8;<3e4?2034;nj7:8;<3fa?2034;nh7:8;<3f7?2034;n>7:8;<3f5?2034;n<7:8;<3gb?2034;oi7:8;<3g`?2034;oo7:8;<3gf?20348897:8;<000?203488?7:8;<006?203488=7:8;<004?203489j7:8;<01a?203489h7:8;<01g?20349=97:8;<150?20349=>7:8;<155?20349=?7:8;<154?20349>j7:8;<16`?20349>o7:8;<16a?20349<>7:8;<144?20349<=7:8;<147?20349<87:8;<143?20349<97:8;<142?20349<47:8;<14=?203493:7:8;<1;0?20349397:8;<1;3?20349347:8;<1;f?20349357:8;<1;e?203493o7:8;<1;`?20349j=7:8;<1b4?203492j7:8;<1:a?203492h7:8;<1:g?203492n7:8;<1:e?20349257:8;<1:4>63ty?4n4?:3y]03?<5:kj6<6>;|q74>63ty?4l4?:3y]031<5:k36<6>;|q7<<<72;qU8;84=2c4>4>63ty?454?:3y]033<5:k=6<6>;|q7<3<72;qU8;=4=2c6>4>63ty?484?:3y]034<5:k?6<6>;|q7<1<72;qU8;?4=2a6>4>63ty?4>4?:3y]036<5:i?6<6>;|q7<7<72;qU88h4=2a0>4>63ty?4<4?:3y]00c<5:i96<6>;|q7<5<72;qU88j4=2a2>4>63ty?;k4?:3y]00e<5:i;6<6>;|q73`<72;qU88l4=2`:>4>63ty?;i4?:3y]00g<5:kn6<6>;|q73g<72;qU8864=2c0>4>63ty?;l4?:3y]001<5:k96<6>;|q73<<72;qU8884=2`e>4>63ty?;54?:3y]003<5:hn6<6>;|q732<72;qU88:4=2`g>4>63ty?;;4?:3y]005<5:hh6<6>;|q730<72;qU88<4=2`a>4>63ty?;94?:3y]007<5:hj6<6>;|q736<72;qU88>4=2`;>4>63ty?;?4?:3y]01`<5:h<6<6>;|q7=0<72;qU8:>4=2`5>4>63ty?594?:3y]03`<5:h>6<6>;|q7=6<72;qU8;k4=2`7>4>63ty?5?4?:3y]03b<5:h86<6>;|q7=4<72;qU8;m4=2`1>4>63ty?5=4?:3y]03d<5:h:6<6>;|q74>63ty?4:4?:3y]00?<5:km6<6>;|q73f<72;qU89k4=2cg>4>63ty?;<4?:3y]01b<5:kh6<6>;|q706<72;qU8>?4=2gb>=>?=7>52z\775=:;lk19o5rs563>5<5sW>9j63{t<:l1<77}Y<;n01>kn:458yv24l3:1>vP;2b9>7`g==?1v9=l:181[25j278il4:5:p06d=838pR9j6=4={_603>;4mh0=>6s|45;94?4|V=9=70=ja;42?xu3<10;6?uQ427896cf2?:0q~:;7;296~X3;=16?ho55g9~w1212909wS:<3:?0ad<2m2wx89;50;0xZ155349nm7;k;|q701<72;qU8?74=2gb>0e8m7>52z\76==:;lk1995rs017>5:=7?8c:?133<3j279444;b:?1a=<3j279jo4;b:?054<3j279n;4;b:?1e3<3j2788:4;b:?070<3j278il4l9:p7c7=839p1>h=:40896`6282:70=i0;6:?xu4n;0;6?u23g095=7<5:l?6i;4}r1eg?6=;r78ji4:2:?0bg<31278jn4>809~w6`c2909w0=id;3;5>;4no0o96s|3g294?5|5:l:68<4=2d3>4>6349m87j9;|q0bg<72:q6?kl5193896`d2<801>hi:e48yv5a;3:18v34=2d;>4>7349m87?8a:p7c1=83;3w0=ia;3;5>;51h0:4=522e390`=::m:18h522bd90`=::jo18h522bf90`=::ji18h522bc90`=::j31=5>4=3aa>1c<5;o869k4=3g1>1c<5;o:69k4=3g3>1c<5;nm69k4=3ff>1c<5;no69k4=3f`>1c<5;ni69k4=34a>1c<5;<369k4=34e>4>7348=i7?70:p7c0=838=w0=i9;3;5>;58o0?i63=0d87a>;58m0?i63=0b87a>;58k0?i63=0`87a>;5800?i63=0987a>;58>0?i63=5c87a>;5=h0?i63=5887a>;5=10?i63=5687a>;5=?0?i63=5487a>;5==0?i63=5287a>;5<00?i63=4987a>;5<>0?i63=4787a>;5<<0?i63=4587a>;5<:0?i63=4387a>;5<80?i63=4187a>;6l80?i63>d187a>;6ko0?i63>cd87a>;6km0?i63>cb87a>;6kk0?i63>c`87a>;6k00?i6s|3g794?40s49m47?71:?0fc<3m278nh4;e:?0fa<3m278nn4;e:?0fg<3m278nl4;e:?0f=<3m278n:4;e:?0f3<3m278n84;e:?0f1<3m278n>4;e:?0f7<3m278n<4;e:?0f5<3m278mk4;e:?0ea<3m278mn4;e:?0eg<3m278ml4;e:?0e<<3m278m54;e:?0e2<3m278m;4;e:?0e0<3m278m94;e:?0g0<3m278o94;e:?0g6<3m278o?4;e:?0g4<3m278o=4;e:?0f<<3m278mh4;e:?0e6<3m278m?4;e:?0af889~w6`b2908w0:?3;3;4>;38;0:4=523gd952g;=7>52ey>055=91;01><9:5g896472=o01><6:0:3?855=3>n70=95;6f?851<3>n70=92;6f?85193>n70=93;6f?85183>n70=:f;6f?852l3;3<63<5b82<5=:;:18h5236395=6<5:=869k4=257>1c<5:=<69k4=256>1c<5:==69k4=25;>1c<5:=269k4=2:5>1c<5:2?6<6?;<1;1?2b3493;7:j;<1;=:0:2?87fl3>n70?nc;6f?87fj3>n70?na;6f?87f13>n70?n8;6f?87f?3>n70?n6;6f?87f=3>n70?i5;6f?87a<3>n70?i3;6f?87a:3>n70?i1;6f?87a83>n70?jf;6f?87bm3>n70?jd;6f?87b;3>n70?j2;6f?87b93>n70?j0;6f?87cn3>n70?ke;6f?87cl3>n70?kc;6f?87cj3>n70<<5;6f?844<3>n70<<3;6f?844:3>n70<<1;6f?84483>n70<=f;6f?845m3>n70<=d;6f?845k3>n7p}=9c83>7}::0k19?5228a952g54z?1=d<60816>;j5d49>630=l?16>;;5d79~w6402908w0==6;71?855=3?970==8;34e>{t;;91<71?<5:8?6<9n;|q064<72;q6??>5539>774=9>k0q~==9;297~;4:00:4<523369`0=:;;81h85rs206>5<3s49997?71:?061278>l4k6:?06=2wx>:;50;0x971f2=h01?96:05b?xu5?o0;6?u226c95=5<5;2?6<9n;|q1==<72;q6>:o516c897?d2m=0q~<84;296~;5?00?n63=79823d=z{;=n6=4={<04=?7?;2794>4>7`9~w7142909w0<88;6a?840?3;:<50;0x97102=h01?99:05b?xu5?j0;6?u226595=5<5;2:6<9n;|q13g<72;q6>:85191897>728=j7p}=8983>7}::1n18o5229a952g7>52z?149516c8yv4>13:1>v3=8e823d=::0i1h;5rs3:4>5<5s483o7:m;<0;f?70i2wx>4?50;0x97>d282870<66;34e>{t:1<1<71d<5;2j6<9n;|q1=5<72;q6>5l5191897?228=j7p}=8483>7}::1k18o5229;952g52z?14:516c8yv4?m3:1>v3=8882<6=::091=:o4}r0f3?6=:r79in4;b:?1ag<6?h1v?h>:18184bk3;3?63=f7823d=z{::j6=4={<0fg?70i278>54k7:p6`0=838p1?km:5`897cf28=j7p}=f183>7}::lh1=5=4=3d6>41f3ty9i84?:3y>6`g=h7516c8yv4bn3:1>v3=e`82<6=::o>1=:o4}r0f0?6=:r79i44;b:?1a=<6?h1v?kj:18184b13;3?63=f2823d=z{;oo6=4={<0f7`9~w7`f2909w07}::oo18o522gf952g52z?1b`<60:16?=6516c8yv4a03:1>v3=fe87f>;5nj0:;l5rs221>5<5s48mh7?73:?042<6?h1v?h8:18184ak3>i70{t;9;1<74>4349;:7?8a:p756=838p1?hm:0:0?857=3;69l4=237>41f3ty8=l4?:3y>743=91901>?i:05b?xu48j0;6?u2307952g<5:896i84}r13b?6=:r78=94;b:?056<6?h1v>?6:181856<3;3?63<1d823d=z{::n6=4={<127?2e349:>7?8a:p74>=838p1>?<:0:0?856l3;41f3ty8=:4?:3y>744=91901>?l:05b?xu49?0;6?u230395=5<5:;i6<9n;|q117<72=h5539>60d=91;01??>:e4897742m?01??::e58yv47>3:1?v3=0g82<4=::0=1h8522969`0=z{;;;6=4={<03a?35348:=7?8a:p653=839p1?>j:0:2?84>>3n=70<73;f5?xu59;0;6?u221f917=::891=:o4}r030?6=;r79809>6<0=l<16>5=5d49~w773290;5900o963=1c8g3>;59o0o963=208g1>{t:991<7=t=32`>4>6348297j9;<0;6?b13ty9=;4?:3y>65d==;16><9516c8yv47:3:1?v3=0c82<4=::0?1h8522909`0=z{;;36=4={<03e?35348:57?8a:p657=839p1?>n:0:2?84><3n=70<71;f5?xu59h0;6?u221;917=::8h1=:o4}r034?6=;r79<44>809>6<2=l<16>5?5d49~w77d2909w0;<0:7?b13483<7j9;|q165<72;q6>=95539>677=9>k0q~?ie;297~;58>0:4<522819`0=::1:1h85rs0g`>5<2s4;jh7;=;<3e1?7?927:mk4k6:?2f44k7:p5d2=83>p13n=7p}>ad83>7}:9hi19?521`d952g54z?2ef<60816?75?=l116>k85d99~w4d72909w0?nb;71?87e93;;<12a?b1349;47j9;<0e1?b13ty:n?4?:6y>5dg==;16=o=516c894d22m<012m=01p1b783>7}:9h219?521c5952g54z?2e=<60816?751=l116>k:5d99~w4d?2909w0?n7;71?87e13;;<12g?b1349;:7j9;<0e7?b13ty:nl4?:3y>5d0==;16=oj516c8yv7>l3:18v3>a782<4=:;8i1h5523149`==::o91h55rs0`f>5<5s4;j97;=;<3ab?70i2wx=4m50;6x94g2282:70=>b;f4?857=3n<70:187842i3;3=63=108g1>;59:0o:63=148g<>{t::n1<704<5;><6<6>;|q115<72:q6>875193897742m=01??::e78yv44k3:1>v3=59866>;55<5s48>47?71:?1502wx>>l50;0x97302<801?:::0:2?xu5a0<5;;i6i64=33e>a0<5;8:6i84}r00e?6=:r799;4:2:?101<6081v?:k:186842>3;3=63=188g3>;59k0o963=1g8g3>;5:80o;6s|22;94?4|5;?>68<4=360>4>63ty98n4?:5y>603=91;01??m:e48977c2m?01??j:e78yv4403:1>v3=55866>;5<;0:4<5rs36a>5<4s48>87?71:?15a279=h4k6:p661=838p1?;<:4089726282:7p}=4`83>7}::<91=5?4=33f>a152z?2b0<2:27:i>4>809~w4b>2909w0?i4;71?87b:3;3=6s|1d`94?2|58l?6<6>;<3bb?b234;i=7j9;<3a7?b?3ty:h54?:3y>5c5==;16=h?51938yv7bi3:1?v3>f282<4=:9k;1h:521c19`0=z{8n<6=4={<3e6?3534;n<7?71:p5`?=838p1d783>7}:9o;19?521ed95=756z?2b4<60816=o;5d49>5g1=l?16=o75d99>5gb=l?16=oh5d79~w4b22909w0?i0;71?87cm3;3=6s|1d594?3|58l;6<6>;<3a3?b034;i57j:;<3a`?b034;ij7j8;|q2`1<72;q6=hh5539>5ab=91;0q~?j6;290~;6mo0:4<521c;9`3=:9kh1h8521ca9`0=z{8n86=4={<3fa?3534;oo7?71:p5`3=839p1809>5ge=l>1v?{t:;k1<704<5;9?6<6>;|q16<<72;q6>995539>665=91;0q~<=8;296~;5>63=3382<4=z{;8<6=4={<071?353488=7?71:p670=838p1?:;:4089757282:7p}=2483>7}::=919?5223d95=752z?107<2:279>h4>809~w7442909w0<;1;71?845l3;3=6s|23094?4|5;>;68<4=30`>4>63ty9?;4?:0y>616=91;0q~?l8;296~;6m:0>>63>d082<4=z{8i<6=4={<3f6?3534;o<7?71:p5f0=838p1:40894ea282:7p}>c483>7}:9l:19?521bg95=752z?2`c<2:27:oi4>809~w4e42909w0?ke;71?87dk3;3=6s|1b094?4|58no68<4=0aa>4>63ty:o<4?:3y>5ae==;16=no51938yv7d83:1>v3>dc866>;6k00:4<5rs3fb>5<2s4;o=7;=;<0f7?7?927:4o4k5:?1<1278il4;2:p5c0=838p1e28=j7p}>f683>7}:9jl19?5219a952g52z?2g`<2:27:4i4>7`9~w4`>2909w0?ld;71?87?m3;41f3ty:jo4?:3y>5fd==;16=4>516c8yv7ak3:1>v3>c`866>;6180:;l5rs0dg>5<5s4;h57;=;<3:6?70i2wx?4950;6x97522<801>o>:0:2?87>;3n>70=ja;1;?xu5=j0;6?u2226917=:9091=:o4}r06`?6=:r79?>4:2:?2=1<6?h1v?;j:181844:3?970?65;34e>{t:04<583=6<9n;|q125<72;q6>>>5539>5<1=9>k0q~<91;296~;5:o0>>63>99823d=z{;<96=4={<01a?3534;257?8a:p635=838p1?7}::;i19?5218`952g515y>6a7=<016>i>5489>6f`=<016>nk5489>6fb=<016>nm5489>6fg=<016>n75489>6fd=<016>h=5489>6`4=<016>h?5489>6`6=<016>ih5489>6ac=<016>ij5489>6ae=<016>il5489>7`e=l?16>;8516c8yv4f=3:1>v3=d0866>;5jl0:;l5rs3a;>5<3s48o=7?71:?1a6<2:2795:4k6:?1fcl:50;0x97b72<801?lk:05b?xu5k>0;69u22e295=7<5;o968<4=3;5>a><5;h>6i;4}r0b7?6=:r79ok4:2:?1ff<6?h1v?m9:18784dn3;3=63=e0866>;51?0o;63=b28g1>{t:h81<704<5;hi6<9n;|q1g0<72=q6>nk5193897c72<801?7::e:897d62m?0q~>63=b`823d=z{;i?6=4;{<0``?7?9279hk4:2:?1=028=j7p}=c283>1}::ji1=5?4=3ff>04<5;3?6i64=3cg>a352z?1gd<2:279n:4>7`9~w7e6290?w0;5lj0>>63=928g<>;5i00o96s|28f94?4|5;i268<4=3`5>41f3ty9o=4?:5y>6f?=91;01?jm:40897?42m=01?o8:e78yv4>n3:1>v3=cc866>;5j10:;l5rs3a1>5<3s48hn7?71:?1`a<2:279594k7:?1ego:50;0x97db2=h01?l;:05b?xu5jo0;6?u22cg9573<5;hm6<9n;|q1f7<72:q6>oj54c9>6g2=o<516c8yv4e=3:1?v3=be8260=::k>1=5=4=3`6>41f3ty9n=4?:2y>6ge=o<54c9>6g6=9>k0q~8522c095=5<5;h86<9n;|q1e`<72:q6>ol54c9>6g6=lk516c8yv4e93:1?v3=bc8260=::k:1=5=4=3`2>41f3ty9mn4?:2y>6gg=lk54c9>6de=9>k0q~8522`g95=5<5;km6<9n;|q1ed<72:q6>o754c9>6de=lo516c8yv4fl3:1?v3=b88260=::hi1=5=4=3cg>41f3ty9m54?:2y>6g>=lo54c9>6d>=9>k0q~8522`c95=5<5;ki6<9n;|q1e3<72:q6>o954c9>6d>=l8516c8yv4f13:1?v3=b68260=::h21=5=4=3c:>41f3ty9m:4?:2y>6g0=9;?01?o9:0:0?84f?3;;<3;g?b234;3n7j9;<0;7?b?349nm7:?;|q1`=<72h?5193894>c2m?01<6l:e4897>42m=01>kn:2d8yv4c?3:19v3=e182<4=:91o1h85219f9`3=::181h5523dc97`=z{;n=6=4:{<0gb?7?927:4k4k5:?2<`2794?4k7:?0ad<4l2wx>i;50;7x97bb282:70?60;f6?87?n3n=70<71;f;?85bi39h7p}=d583>0}::mn1=5?4=0;2>a3<583;6i84=3:2>a1<5:oj6>l4}r0g7?6==r79hn4>809>5<4=l<16=4?5d79>6=6=l116?ho53`9~w7b5290?w0;61;0o:63=818g3>;4mh0856s|27a94?4|5;41f3ty9:o4?:6y>63d=91;01?8n:e4897162m=01?8k:e5897002m=01?89:e:897022m20q~<99;296~;5>10>>63=6`823d=z{;<36=48{<05279:i4k6:?122279:;4k7:?120:>50;1x970a2<801?8j:408971628=j7p}=6d83>7}::?o1=5?4=352>a352cy>733=<016?;:5489>734=<016?;?5489>735=<016?;>5489>70`=<016?8j5489>70e=<016?8k5489>724=<016?:>5489>727=<016?:=5489>722=<016?:95489>723=<016?:85489>72>=<016?:75489>7=0=<016?5:5489>7=3=<016?595489>7=>=<016?5l5489>7=?=<016?5o5489>7=e=<016?5j5489>7d7=<016?l>5489>7<`=<016?4k5489>77777g=9>k01><=:e:896cf2=:37p}<3583>7}:;??19?52342952gn7>54z?020<60816?:75539>74`=l<16?8?5d49~w6542909w0=94;71?853n3;;<14734==;16?9j516c8yv5203:18v3<6382<4=:;><19?5230g9`2=:;=81h85rs213>5<5s49==7;=;<17g?70i2wx?8950;6x9606282:70=85;71?856l3n>70=;0;f6?xu4;;0;6?u2371917=:;=o1=:o4}r16=?6=4>809>721==;16?712=l<1v>{t;<<1<7:t=243>4>6349<87;=;<12`?b03498i7j:;|q06`<72;q6?8h5539>71g=9>k0q~=:5;290~;4=o0:4<52361917=:;8i1h85232a9`0=z{:8h6=4={<16`?35349?47?8a:p705=83>p1>;k:0:2?85093?970=>b;f5?85403n>7p}<2c83>7}:;>7>54z?01f<60816?:>5539>74d=l<16?>85d49~w64c2909w0=:e;71?85313;;<146?35349:o7j8;<10e?b23ty8884?:3y>706=v3<518260=:;<;1=:o4}r177?6=;r788k4;b:?000<3j2788>4>7`9~w6212908w0=;f;311>;4<<0:4>52354952g53z?00`<3j2788>4;b:?004<6?h1v>:;:180853m3;9963<4282<6=:;=>1=:o4}r10b?6=;r788i4;b:?004<3j278?k4>7`9~w6252908w0=;d;311>;4<80:4>52350952g53z?00f<3j278?k4;b:?07a<6?h1v>:?:180853k3;9963<3g82<6=:;=:1=:o4}r10f?6=;r788o4;b:?07a<3j278?o4>7`9~w65b2908w0=;b;311>;4;m0:4>5232g952g53z?00d<3j278?o4;b:?07<<6?h1v>=l:180853i3;9963<3c82<6=:;:i1=:o4}r103?6=;r78844;b:?07<<3j278?:4>7`9~w65f2908w0=;9;311>;4;00:4>5232c952g53z?00=<3j278?:4;b:?070<6?h1v>=7:18085303;9963<3682<6=:;:21=:o4}r102?6=;r788:4>249>763=91901>=9:05b?xu4>10;6>u236095=7<5:2=68<4=225>a153z?035<60816?5:5539>753=l<1v>88:18085093;3=63<84866>;48<0o:6s|37;94?5|5:=86<6>;<1;3?35349;:7j:;|q02d<72:q6?::5193896>?2<801>>8:e58yv51l3:1?v3<7682<4=:;1h19?5231:9`0=z{:6}:;>21=5?4=2:`>04<5::26i94}r15b?6=;r78;44>809>7=b==;16?=75d49~w61d2908w0=76;3;5>;41h0>>63=f28g3>{t;>k1<7=t=2:7>4>6349247;=;<0e6?b23ty8;o4?:2y>7=3=91;01>76:40897`52m<0q~=8d;297~;40>0:4<5238`917=::o91h85rs25f>5<4s49347?71:?0=f<2:279j94k7:p7=7=839p1>6m:0:2?85>n3?970u239;95=7<5:3o68<4=3d7>a353z?06c3=l>1v>6=:18085?k3;3=63;5n?0o;6s|39194?5|5:2o6<6>;<1b5?35348m:7j:;|q0=3<72=q6?l>5193894?32m?01<7<:e4896cf2:<0q~=65;290~;41o0:4<521879`0=:90>1h;523dc970=z{:3?6=4;{<1:a?7?927:5;4k5:?2=0278il4<4:p7<5=83>p1>7k:0:2?87>?3n>70?66;f5?85bi3987p}<9383>1}:;0i1=5?4=0;;>a3<583<6i84=2gb>6454z?0=g<60816=475d49>5<>=l?16?ho5309~w6?7290?w0=6a;3;5>;61h0o963>988g2>;4mh08<6s|39d94?2|5:326<6>;<3:f?b234;2m7j9;<1fe?4a3ty84h4?:2y>7<>=91;01<7m:e4896cf2;o0q~=je;2960}:;kl184523cg90<=:;kn184523ca90<=:;kh184523cc90<=:;k2184523c590<=:;k<184523c790<=:;k>184523c190<=:;k8184523c390<=:;k:184523`d90<=:;hn184523`a90<=:;hh184523`c90<=:;h3184523`:90<=:;h=184523`490<=:;h?184523`690<=:;j?184523b690<=:;j9184523b090<=:;j;184523b290<=:;k3184523`g90<=:;h9184523`090<=::?=1=:o4}r1f6?6=:r78nk4:2:?0adkn:c:8yv5b83:1>v3;4mh0i:6s|3ed94?4|5:hh68<4=2gb>g252z?0fg<2:278il4m3:p7ab=838p1>ln:40896cf2k80q~=kb;296~;4j10>>63{t;mk1<704<5:oj6o>4}r1g=?6=:r78n;4:2:?0adkn:b78yv5c?3:1>v3;4mh0ji6s|3e494?4|5:h868<4=2gb>db52z?0f7<2:278il4nc:p7a2=838p1>l>:40896cf2hh0q~=k3;296~;4j90>>63{t;m81<704<5:oj6l64}r1g4?6=:r78mi4:2:?0adkn:`48yv5dm3:1>v3;4mh0h86s|3bf94?4|5:kj68<4=2gb>d352z?0e<<2:278il4n4:p7fd=838p1>o7:40896cf2h90q~=la;296~;4i>0>>63{t;j31<704<5:oj6l?4}r1`kn:cd8yv5b13:1>v3;4mh0ii6s|3d:94?4|5:i?68<4=2gb>f552z?0g6<2:278il4md:p7`0=838p1>m=:40896cf2ki0q~=j5;296~;4k80>>63{t;l>1<704<5:oj6oo4}r1f7?6=:r78n44:2:?0adkn:c78yv5c93:1>v3;4mh0jm6s|3b494?4|5:k968<4=2gb><`52z?0af<6?h16?ho5c`9~w6cc2909w0<6c;f6?841=3;9:6s|17;94?4|58ho6i64=0`a>4413ty::l4?:3y>5g`=l116=om51348yv71j3:1>v3=1g8g<>;59m0:>;5rs04`>5<5s489=7j7;<02a?75>2wv9:<:181[24927?97:<1:&741<6>m1v9:>:181[24827?97:<0:&741<6>l1v9:?:181[25n27?97:=f:&741<6>o1v9=i:181[25m27?97:=e:&741<6?<1v9=j:181[25l27?97:=d:&741<6;<1v9=k:181[25k27?97:=c:&741<6;o1v9=l:181[25j27?97:=b:&741<691v9:n:181[24?27?97:<7:&741<6>81v9:6:181[24>27?97:<6:&741<6>;1v9:7:181[24=27?97:<5:&741<6>:1v9:8:181[24<27?97:<4:&741<6>=1v9:9:181[24;27?97:<3:&741<6><1v9:::181[24:27?97:<2:&741<6>?1v9:;:181[25127?97:=9:&741<6>>1v9=n:181[25027?97:=8:&741<6>11v9k=:181[2b:27?97:j2:&741<6?91v9kj:181[2bm27?97:je:&741<6?81v9h?:181[2a827?97:i0:&741<6?;1v9h8:181[2a?27?97:i7:&741<6?:1v8><:181[37;27?97;?3:&741<6?=1v9?7:181[26027?97:>8:&741<6??1v96j:181[21i27?97:9a:&741<6;?1v96l:181[21127?97:99:&741<6;>1v96m:181[21027?97:98:&741<6;11v96n:181[21?27?97:97:&741<6;01v966:181[21>27?97:96:&741<6;h1v967:181[21=27?97:95:&741<6;k1v969:181[21;27?97:93:&741<6;j1v96::181[21:27?97:92:&741<6;m1v96;:181[21927?97:91:&741<6;l1v96<:181[21827?97:90:&741<6<91v96=:181[22n27?97::f:&741<6<81v96>:181[22m27?97::e:&741<6<;1v96?:181[22l27?97::d:&741<6<:1v99i:181[22k27?97::c:&741<6<=1v99j:181[22j27?97::b:&741<6<<1v99k:181[22i27?97::a:&741<61v99n:181[22?27?97::7:&741<6<11v996:181[22>27?97::6:&741<6<01v997:181[22=27?97::5:&741<6:181[21k27?97:9c:&741<6=>1v97?:181[21j27?97:9b:&741<6=11v96i:181[21<27?97:94:&741<6=01v968:181[22127?97::9:&741<6=h1v99l:181[23m27?97:;e:&741<6=k1v99>:181[23l27?97:;d:&741<6=j1v978:181[2>?27?97:67:&741<6=m1v97k:181[2>l27?97:6d:&741<6=l1vqc7i3;296~N38<1vb4h;:181M27=2we5k;50;0xL1623td2j;4?:3yK05352zJ740=zf0l36=4={I631>{i1o31<7nh0;6?uG4178yk?aj3:1>vF;049~j<`d2909wE:?5:m=cb=838pD9>:;|l:b`<72;qC8=;4}o;eb?6=:rB?<85rn`23>5<5sA>;96saa1394?4|@=:>7p`n0383>7}O<9?0qco?3;296~N38<1vbl>;:181M27=2wem=;50;0xL1623tdj<;4?:3yK05352zJ740=zfh:36=4={I631>{ii931<7vF;049~jd6d2909wE:?5:me5b=838pD9>:;|lb4`<72;qC8=;4}oc3b?6=:rB?<85rn`33>5<5sA>;96saa0394?4|@=:>7p`n1383>7}O<9?0qco>3;296~N38<1vbl?;:181M27=2wem<;50;0xL1623tdj=;4?:3yK05352zJ740=zfh;36=4={I631>{ii831<7vF;049~jd7d2909wE:?5:me4b=838pD9>:;|lb5`<72;qC8=;4}oc2b?6=:rB?<85rn`03>5<5sA>;96saa3394?4|@=:>7p`n2383>7}O<9?0qco=3;296~N38<1vbl<;:181M27=2wem?;50;0xL1623tdj>;4?:3yK05352zJ740=zfh836=4={I631>{ii;31<7vF;049~jd4d2909wE:?5:me7b=838pD9>:;|lb6`<72;qC8=;4}oc1b?6=:rB?<85rn`13>5<5sA>;96sa84d94?7|@=:>7p`79e83>4}O<9?0qc66e;295~N38<1vb57i:182M27=2we4l>50;3xL1623td3m<4?:0yK0537>51zJ740=zf1k86=4>{I631>{i0h>1<7?tH526?xh?i<0;6f>3:1=vF;049~j=g0290:wE:?5:m=83;pD9>:;|l;e<<728qC8=;4}o:be?6=9rB?<85rn9ca>5<6sA>;96sa8`a94?7|@=:>7p`7ae83>4}O<9?0qc6ne;295~N38<1vb5oi:182M27=2we4o>50;3xL1623td3n<4?:0yK0537>51zJ740=zf1h86=4>{I631>{i0k>1<7?tH526?xh?j<0;6e>3:1=vF;049~j=d0290:wE:?5:m=83;pD9>:;|l;f<<728qC8=;4}o:ae?6=9rB?<85rn9`a>5<6sA>;96sa8ca94?7|@=:>7p`7be83>4}O<9?0qc6me;295~N38<1vb5li:182M27=2we4n>50;3xL1623td3o<4?:0yK0537>51zJ740=zf1i86=4>{I631>{i0j>1<7?tH526?xh?k<0;6d>3:1=vF;049~j=e0290:wE:?5:m=83;pD9>:;|l;g<<728qC8=;4}o:`e?6=9rB?<85rn9aa>5<6sA>;96sa8ba94?7|@=:>7p`7ce83>4}O<9?0qc6le;295~N38<1vb5mi:182M27=2we4i>50;3xL1623td3h<4?:0yK0537>51zJ740=zf1n86=4>{I631>{i0m>1<7?tH526?xh?l<0;6c>3:1=vF;049~j=b0290:wE:?5:m=83;pD9>:;|l;`<<728qC8=;4}o:ge?6=9rB?<85rn9fa>5<6sA>;96sa8ea94?7|@=:>7p`7de83>4}O<9?0qc6ke;295~N38<1vb5ji:182M27=2we4h>50;3xL1623td3i<4?:0yK0537>51zJ740=zf1o86=4>{I631>{i0l>1<7?tH526?xh?m<0;6b>3:1=vF;049~j=c0290:wE:?5:m<`>=83;pD9>:;|l;a<<728qC8=;4}o:fe?6=9rB?<85rn9ga>5<6sA>;96sa8da94?7|@=:>7p`7ee83>4}O<9?0qc6je;295~N38<1vb5ki:182M27=2we4k>50;3xL1623td3j<4?:0yK0537>51zJ740=zf1l86=4>{I631>{i0o>1<7?tH526?xh?n<0;6a>3:1=vF;049~j=`0290:wE:?5:m=83;pD9>:;|l;b<<728qC8=;4}o:ee?6=9rB?<85rn9da>5<6sA>;96sa8ga94?7|@=:>7p`7fe83>4}O<9?0qc6ie;295~N38<1vb5hi:182M27=2we5=>50;3xL1623td2<<4?:0yK0537>51zJ740=zf0:86=4>{I631>{i19>1<7?tH526?xh>8<0;63:1=vF;049~j<60290:wE:?5:m=5>=83;pD9>:;|l:4<<728qC8=;4}o;3e?6=9rB?<85rn82a>5<6sA>;96sa91a94?7|@=:>7p`60e83>4}O<9?0qc7?e;295~N38<1vb4>i:182M27=2we5<>50;3xL1623td2=<4?:0yK0537>51zJ740=zf0;86=4>{I631>{i18>1<7?tH526?xh>9<0;63:1=vF;049~j<70290:wE:?5:m=4>=83;pD9>:;|l:5<<728qC8=;4}o;2e?6=9rB?<85rn83a>5<6sA>;96sa90a94?7|@=:>7p`61e83>4}O<9?0qc7>e;295~N38<1vb4?i:182M27=2we5?>50;3xL1623td2><4?:0yK0537>51zJ740=zf0886=4>{I631>{i1;>1<7?tH526?xh>:<0;63:1=vF;049~j<40290:wE:?5:m=7>=83;pD9>:;|l:6<<728qC8=;4}o;1e?6=9rB?<85rn80a>5<6sA>;96sa93a94?7|@=:>7p`62e83>4}O<9?0qc7=e;295~N38<1vb4>50;3xL1623td2?<4?:0yK0537>51zJ740=zf0986=4>{I631>{i1:>1<7?tH526?xh>;<0;63:1=vF;049~j<50290:wE:?5:m=6>=83;pD9>:;|l:7<<728qC8=;4}o;0e?6=9rB?<85rn81a>5<6sA>;96sa92a94?7|@=:>7p`63e83>4}O<9?0qc750;3xL1623td28<4?:0yK0537>51zJ740=zf0>86=4>{I631>{i1=>1<7?tH526?xh><<0;63:1=vF;049~j<20290:wE:?5:m=1>=83;pD9>:;|l:0<<728qC8=;4}o;7e?6=9rB?<85rn86a>5<6sA>;96sa95a94?7|@=:>7p`64e83>4}O<9?0qc7;e;295~N38<1vb4:i:182M27=2we58>50;3xL1623td29<4?:0yK053>7>51zJ740=zf0?86=4>{I631>{i1<>1<7?tH526?xh>=<0;63:1=vF;049~j<30290:wE:?5:m=0>=83;pD9>:;|l:1<<728qC8=;4}o;6e?6=9rB?<85rn87a>5<6sA>;96sa94a94?7|@=:>7p`65e83>4}O<9?0qc7:e;295~N38<1vb4;i:182M27=2we5;>50;3xL1623td2:<4?:0yK0537>51zJ740=zf0<86=4>{I631>{i1?>1<7?tH526?xh>><0;63:1=vF;049~j<00290:wE:?5:m=3>=83;pD9>:;|l:2<<728qC8=;4}o;5e?6=9rB?<85rn84a>5<6sA>;96sa97a94?7|@=:>7p`66e83>4}O<9?0qc79e;295~N38<1vb48i:182M27=2we5:>50;3xL1623td2;<4?:0yK0537>51zJ740=zf0=86=4>{I631>{i1>>1<7?tH526?xh>?<0;63:1=vF;049~j<10290:wE:?5:m=2>=83;pD9>:;|l:3<<728qC8=;4}o;4e?6=9rB?<85rn85a>5<6sA>;96sa96a94?7|@=:>7p`67e83>4}O<9?0qc78e;295~N38<1vb49i:182M27=2we55>50;3xL1623td24<4?:0yK0537>51zJ740=zf0286=4>{I631>{i11>1<7?tH526?xh>0<0;63:1=vF;049~j<>0290:wE:?5:m==>=83;pD9>:;|l:<<<728qC8=;4}o;;e?6=9rB?<85rn8:a>5<6sA>;96sa99a94?7|@=:>7p`68e83>4}O<9?0qc77e;295~N38<1vb46i:182M27=2we54>50;3xL1623td25<4?:0yK0537>51zJ740=zf0386=4>{I631>{i10>1<7?tH526?xh>1<0;6>3:1=vF;049~j=83;pD9>:;|l:=<<728qC8=;4}o;:e?6=9rB?<85rn8;a>5<6sA>;96sa98a94?7|@=:>7p`69e83>4}O<9?0qc76e;295~N38<1vb47i:182M27=2we5l>50;3xL1623td2m<4?:0yK0537>51zJ740=zf0k86=4>{I631>{i1h>1<7?tH526?xh>i<0;63:1=vF;049~j=83;pD9>:;|l:e<<728qC8=;4}o;be?6=9rB?<85rn8ca>5<6sA>;96sa9`a94?7|@=:>7p`6ae83>4}O<9?0qc7ne;295~N38<1vb4oi:182M27=2we5o>50;3xL1623td2n<4?:0yK0537>51zJ740=zf0h86=4>{I631>{i1k>1<7?tH526?xh>j<0;63:1=vF;049~j=83;pD9>:;|l:f<<728qC8=;4}o;ae?6=9rB?<85rn8`a>5<6sA>;96sa9ca94?7|@=:>7p`6be83>4}O<9?0qc7me;295~N38<1vb4li:182M27=2we5n>50;3xL1623td2o<4?:0yK0537>51zJ740=zf0i86=4>{I631>{i1j>1<7?tH526?xh>k<0;63:1=vF;049~j=83;pD9>:;|l:g<<728qC8=;4}o;`e?6=9rB?<85rn8aa>5<6sA>;96sa9ba94?7|@=:>7p`6ce83>4}O<9?0qc7le;295~N38<1vb4mi:182M27=2we5i>50;3xL1623td2h<4?:0yK0537>51zJ740=zf0n86=4>{I631>{i1m>1<7?tH526?xh>l<0;63:1=vF;049~j=83;pD9>:;|l:`<<728qC8=;4}o;ge?6=9rB?<85rn8fa>5<6sA>;96sa9ea94?7|@=:>7p`6de83>4}O<9?0qc7ke;295~N38<1vb4ji:182M27=2we5h>50;3xL1623td2i<4?:0yK0537>51zJ740=zf0o86=4>{I631>{i1l>1<7?tH526?xh>m<0;63:1=vF;049~j=83;pD9>:;|l:a<<728qC8=;4}o;fe?6=9rB?<85rn8ga>5<6sA>;96sa9da94?7|@=:>7p`6ee83>4}O<9?0qc7je;295~N38<1vb4ki:182M27=2we5k>50;3xL1623td2j<4?:0yK0537>51zJ740=zutwKLNumc78;2d33k=9vLMLt0|BCT~{GH \ No newline at end of file +XILINX-XDM V1.6e +$45540<,[o}e~g`n;"2*726&;$:,)<6;.vnt*Ydo&lbjbQwloz\144;?U9oaeP19vl73(iof;0<85?0123=>6789:;<=>;0:23456789:;<=>?0123456789:;<=>?0123456789:;<=>?0123456789:;<=>?01084<7<9:1:"=?<;029MKVR\3KOH_O39;2=5`=683CE\XZ5psmd[cskdV~c~h}g<883:73<990BB][[:qplcZ`rdeUdk|h^cpw`ts400;2?;4118JJUSS2yxdkRhzlm]wlwct`Vdnklzj<883:4?<990DYY^ZT;fbpdYdg|d044?>0a855113922?OIX\^1HDO31483:45<9?0DYY^ZT;FLE972294:>6?7:HLSQQ11:07?754;8;0>7GAPTV9@LVF480;2<<42;MVPUSS2ME[M1?50?31?64=AGZ^X7JFB=12>586;2996B[[PTV9@JD;;80;2<:4378LQQVR\3ndyy2<5;2=`>5t:9:;jj::6,72?12<<9LM=<5;:HLSQQ11397>JSSX\^1HB^M<283:4=1:2<286869768<567<22N4L?4959:45?530;>585=231EC^ZT;rqkbYbey~rSyf}erj\evubz}636=0=5:;9MKVR\3zycjQjmqvz[qnumzbTbhintd>;>586j231CXZ_UU8q`Zbf|hUhcx`{<983:7=F:11JHI\N<1<;?DBCZH6:255NDEPB878?3HNO^L2<>99B@ATF4=437LJKR@>6:==FLMXJ0;07;@FGVD:0611JHI\N<9611JHI\M<1<;?DBCZK6:255NDEPA878?3HNO^O2<>99B@ATE4=437LJKRC>6:==FLMXI0;07;@FGVG:06h1JHI\M<983:==FLMXI050<;@NO=>GTQGIT^HI<;CW1<>DR[VCEJB?4C39@A44EKCK90OA\6;BMNILRSMM;?7NA]E^EFJ@TF\@EESD@IO69@V@GSMM;0H?5KC39GM3=CAH6;2:5KI@>24;169GMD:6<730HDO31483:2=CAH6:9384DHC?5;0384DHC?7;01OEO2>3?58@LD;9=4<7IGM<07=3>BNJ5;=2:5KIC>23;12NBN1?17:FJF9476>1OEO2=1?58@LD;:;4<7IGM<31=3>BNJ58?2:5KIC>11;1;08;EKA8719?2NBN1<7>69GMG:517<0HDL32?58@LD;;9427IGM<2394;119:FJTD:6294<7IG_A=3=3>BNXK6;2:5KIQ@?5;1BHI5;:2:5KO@>26;108;EMB842912NDM1?::1<4?AIF48?5:6J@A=3=2>BHI585:6J@A=1=2>BHI5>5:6J@A=7=2>BHI5<5:6J@A=5=2>BHI525:6J@A=;=3>BHIVXNK;5KOC>3:2=CGK6:<394DN@?54803MEI0<<17:FLF9746>1OCO2>4?58@JD;9<4<7IAM<04=3>BHJ5;<2:5KOC>2<;117:FLF9466>1OCO2=2?58@JD;::4<7IAM<36=3>BHJ58>2:5KOC>12;1:08;EMA87>9?2NDN1<6>79GKG:56>1OCO2<0?;8@JD;;80;2:5KOC>05;019:FLTD:6294<7IA_A=3=3>BHXK6;2:5KOQ@?5;16H75:DBHVC53ON87KJL4:DGG@56G>2:K16>O402CEEY^P01:8MKOSXV::46GAIUR\47><8:KMMQVX8=20ECG[P^26<>OIA]ZT<;64IOKWTZ6012CEEY][AUG4?LHN\V:;;6GAIU]352=NF@^T;7:KMMQY7=>1BBDZP0758MKOSW9=<7D@FT^2;3>OIA]U;5:5FNHV\4D11BBDZP1758MKOSW8=<7D@FT^3;3>OIA]U:5:5FNHV\5D1D69JJLRX9L=0ECG[_0D4?LHN\V8;;6GAIU]152=NF@^T>?94IOKW[7503@DBXR<;7:KMMQY5=>1BBDZP2758MKOSW;=<7D@FT^0;3>OIA]U95:5FNHV\6D11BBDZP3758MKOSW:=<7D@FT^1;3>OIA]U85:5FNHV\7D1L8;HLJPZ5D?2CEEYQ6B@6:NLEACC?2FDKDMNL59OQQ733E__>95CUU17?ISS0168J466<2D:H68=>0B<>:4:L24320968J46>;2D:=95A1027?K769=1E=<<;;O3271=I98>?7C?>559M54033G;:;95A10:7?K761:1E=?:4N0030>H6:8>0B<<=4:L26622468J441<2D:>::4N00;7>H6;=1E=>?<;O377>H6=:1E=;:4N0477>H6?:1E=5=4N0;1?K443G8;?6@=129M675H51;1E?>5A3108J0480B4=4N830?K?5;2D2?>5A9518J<343G3=?6@6729M==56^Q2h1YILJPFHPPPf=UMHNT[DJ[H^C`?WCFLV]BHYFPB09P56=TADUHCABFSHMM[FNBKB<0_B[]CD58WWPFDVK<7^\YAM]A0>UTZH>0_^\M4:VZT@553\:$kh!rg-dg}(ddbr$Aua}_sf\tkruWniTtb|?012\V`urd};8>6[?/fpe*w`(ojr%oaew/LzlvZtcWyd~Ril_ymq4566W[oxyaz>339V4*aun'xm#jmw.bnh|*Kg{UyhR~ats]dgZ~hz9:;>R\jstnw564<]9%l~k }f.e`|+ekcq%Ftb|Pre]sjqtXojUsc>?02]Qavsk|8997X> gsd-vc)`kq$h`fv Mymq[wbXxg~ySjmPxnp3452XZly~`y?<2:W3+bta&{l$knv!cmi{+H~hzVxoS}`{r^e`[}iu89:>S_k|umv277=R8&myj#|i/fa{*fjlp&GscQ}d^rmpwY`kVrd~=>?6^Pfwpjs9:80Y=!hrg,qb*adp'iggu!Bxnp\vaYwf}xTknQwos2342YUmzgx<==;T2,cw`)zo%lou lljz,I}iuW~xT|cz}_fa\|jt789:T^h}zlu306>S7'nxm"h gbz-gim'Drd~Ry}_qlwvZadWqey<=>>_Sgpqir6;;1^<"i}f/pe+be&jf`t"Cwos]tvZvi|{UloRv`r1236ZTb{|f=><4U1-dvc(un&mht#mcky-N|jtX{U{by|Pgb]{kw678:UYi~{ct011?P6(o{l%~k!hcy,`hn~(EqeySz|Ppovq[beXpfx;<=:PRdqvhq74:2_;#j|i.sd,cf~)keas#@v`r^uq[uhszVmhSua}0126[Wct}e~:??5Z0.eqb+ta'nis"nbdx.O{kwYpzVzexQhc^zlv567>VXnxb{1208Q5)`zo$yj"ilx/aoo})JpfxT{Qnup\cfYg{:;<:Q]erwop4553\:$kh!rg-dg}(ddbr$Aua}_vp\tkruWniTtb|?01:\V`urd};9=6[?/fpe*w`(ojr%oaew/sf\tkruWkce0=0=1:W3+bta&{l$knv!cmi{+wbXxg~ySoga<0<15>S7'nxm"h gbz-gim'{nT|cz}_ckm878592_;#j|i.sd,cf~)keas#jPpovq[goi4:49=6[?/fpe*w`(ojr%oaew/sf\tkruWkce090=1:W3+bta&{l$knv!cmi{+wbXxg~ySoga<4<15>S7'nxm"h gbz-gim'{nT|cz}_ckm838592_;#j|i.sd,cf~)keas#jPpovq[goi4>49=6[?/fpe*w`(ojr%oaew/sf\tkruWkce050=0:W3+bta&{l$knv!cmi{+wbXxg~ySoga_103?P6(o{l%~k!hcy,`hn~(zmU{by|Pbhl\576<]9%l~k }f.e`|+ekcq%yhR~ats]amkY5:91^<"i}f/pe+be&jf`t"|k_qlwvZdnfV99<6[?/fpe*w`(ojr%oaew/sf\tkruWkceS9 gsd-vc)`kq$h`fv re]sjqtXj`dTtb|?01213>S7'nxm"h gbz-gim'{nT|cz}_ckm[}iu89:;=?84U1-dvc(un&mht#mcky-q`Zvi|{UiecQwos2344403\:$kh!rg-dg}(ddbr$~iQnup\flhXpfx;<=?>279V4*aun'xm#jmw.bnh|*tcWyd~Rlfn^zlv567:;=0Y=!hrg,qb*adp'iggu!}d^rmpwYeagUsc>?03312>S7'nxm"h gbz-gim'{nT|cz}_ckm[}iu89:8>:5Z0.eqb+ta'nis"nbdx.pg[uhszVhbbRv`r12377413\:$kh!rg-dg}(ddbr$~iQnup\flhXpfx;<=:=7:W3+bta&{l$knv!cmi{+wbXxg~ySoga_ymq45639;<0Y=!hrg,qb*adp'iggu!}d^rmpwYeagUsc>?0404?P6(o{l%~k!hcy,`hn~(zmU{by|Pbhl\|jt789?:>;5Z0.eqb+ta'nis"nbdx.pg[uhszVhbbRv`r12327><]9%l~k }f.e`|+ekcq%yhR~ats]amkYg{:;<;?>269V4*aun'xm#jmw.bnh|*tcWyd~Rlfn^zlv567>;8i7X> gsd-vc)`kq$h`fv re]sjqtXj`dTtb|?014\fab7:?1^<"i}f/pe+be&jf`t"|k_qlwvZdnfVrd~=>?7358Q5)`zo$yj"ilx/aoo})ulVzexQmio]{kw678>;9<6[?/fpe*w`(ojr%oaew/sf\tkruWni7<3>328Q5)`zo$yj"ilx/aoo})ulVzexQhc=0=65=R8&myj#|i/fa{*fjlp&xoS}`{r^e`868582_;#j|i.sd,cf~)keas#jPpovq[be;<78;7X> gsd-vc)`kq$h`fv re]sjqtXoj6>2?>4U1-dvc(un&mht#mcky-q`Zvi|{Ulo181219V4*aun'xm#jmw.bnh|*tcWyd~Ril<6<14>S7'nxm"h gbz-gim'{nT|cz}_fa?<;7a3\:$kh!rg-dg}(ddbr$~iQnup\cfY79o1^<"i}f/pe+be&jf`t"|k_qlwvZadW8;m7X> gsd-vc)`kq$h`fv re]sjqtXojU9=k5Z0.eqb+ta'nis"nbdx.pg[uhszVmhS>?i;T2,cw`)zo%lou lljz,vaYwf}xTknQ;1g9V4*aun'xm#jmw.bnh|*tcWyd~Ril_43e?P6(o{l%~k!hcy,`hn~(zmU{by|Pgb]55c=R8&myj#|i/fa{*fjlp&xoS}`{r^e`[27a3\:$kh!rg-dg}(ddbr$~iQnup\cfY?:?1^<"i}f/pe+be&jf`t"|k_qlwvZadWhyyij2?>348Q5)`zo$yj"ilx/aoo})ulVzexQhc^cpv`a;978=7X> gsd-vc)`kq$h`fv re]sjqtXojUjkh<3<12>S7'nxm"h gbz-gim'{nT|cz}_fa\evtbo595>;5Z0.eqb+ta'nis"nbdx.pg[uhszVmhSl}}ef>7:70<]9%l~k }f.e`|+ekcq%yhR~ats]dgZgtzlm793<9;T2,cw`)zo%lou lljz,vaYwf}xTknQnssgd8385>2_;#j|i.sd,cf~)keas#jPpovq[beXizxnk191279V4*aun'xm#jmw.bnh|*tcWyd~Ril_`qqab:?6;?0Y=!hrg,qb*adp'iggu!}d^rmpwY`kVkx~hiP0378Q5)`zo$yj"ilx/aoo})ulVzexQhc^cpv`aX9;?0Y=!hrg,qb*adp'iggu!}d^rmpwY`kVkx~hiP2378Q5)`zo$yj"ilx/aoo})ulVzexQhc^cpv`aX;;?0Y=!hrg,qb*adp'iggu!}d^rmpwY`kVkx~hiP4378Q5)`zo$yj"ilx/aoo})ulVzexQhc^cpv`aX=;?0Y=!hrg,qb*adp'iggu!}d^rmpwY`kVkx~hiP6378Q5)`zo$yj"ilx/aoo})ulVzexQhc^cpv`aX?;?0Y=!hrg,qb*adp'iggu!}d^rmpwY`kVkx~hiP83;8Q5)`zo$yj"ilx/aoo})ulVzexQhc^cpv`aXl86;2?74U1-dvc(un&mht#mcky-q`Zvi|{UloRo|rde\`4:66;30Y=!hrg,qb*adp'iggu!}d^rmpwY`kVkx~hiPd0>1:7?<]9%l~k }f.e`|+ekcq%yhR~ats]dgZgtzlmTh<2<>3;8Q5)`zo$yj"ilx/aoo})ulVzexQhc^cpv`aXl86?2?74U1-dvc(un&mht#mcky-q`Zvi|{UloRo|rde\`4:26;30Y=!hrg,qb*adp'iggu!}d^rmpwY`kVkx~hiPd0>5:7?<]9%l~k }f.e`|+ekcq%yhR~ats]dgZgtzlmTh<28>3;8Q5)`zo$yj"ilx/aoo})ulVzexQhc^cpv`aXl8632?64U1-dvc(un&mht#mcky-q`Zvi|{UloRo|rde\`4Y7:11^<"i}f/pe+be&jf`t"|k_qlwvZadWhyyijQk1^31<>S7'nxm"h gbz-gim'{nT|cz}_fa\evtboVn:S?<7;T2,cw`)zo%lou lljz,vaYwf}xTknQnssgd[a7X;;20Y=!hrg,qb*adp'iggu!}d^rmpwY`kVkx~hiPd0]76==R8&myj#|i/fa{*fjlp&xoS}`{r^e`[duumnUo=R;=8:W3+bta&{l$knv!cmi{+wbXxg~ySjmParpfcZb6W?837X> gsd-vc)`kq$h`fv re]sjqtXojUjkh_e3\37><]9%l~k }f.e`|+ekcq%yhR~ats]dgZgtzlmTh>249V4*aun'xm#jmw.bnh|*tcWyd~Ril_ymq4565:<1^<"i}f/pe+be&jf`t"|k_qlwvZadWqey<=><249V4*aun'xm#jmw.bnh|*tcWyd~Ril_ymq4563:<1^<"i}f/pe+be&jf`t"|k_qlwvZadWqey<=>:249V4*aun'xm#jmw.bnh|*tcWyd~Ril_ymq4561:<1^<"i}f/pe+be&jf`t"|k_qlwvZadWqey<=>8209V4*aun'xm#jmw.bnh|*quWyd~Rlfn=3=64=R8&myj#|i/fa{*fjlp&}yS}`{r^`jj949:81^<"i}f/pe+be&jf`t"y}_qlwvZdnf595><5Z0.eqb+ta'nis"nbdx.uq[uhszVhbb1:1209V4*aun'xm#jmw.bnh|*quWyd~Rlfn=7=64=R8&myj#|i/fa{*fjlp&}yS}`{r^`jj909:81^<"i}f/pe+be&jf`t"y}_qlwvZdnf5=5><5Z0.eqb+ta'nis"nbdx.uq[uhszVhbb161209V4*aun'xm#jmw.bnh|*quWyd~Rlfn=;=65=R8&myj#|i/fa{*fjlp&}yS}`{r^`jjZ7582_;#j|i.sd,cf~)keas#z|Ppovq[goiW;8;7X> gsd-vc)`kq$h`fv ws]sjqtXj`dT??>4U1-dvc(un&mht#mcky-tvZvi|{UiecQ;219V4*aun'xm#jmw.bnh|*quWyd~Rlfn^714>S7'nxm"h gbz-gim'~xT|cz}_ckm[3473\:$kh!rg-dg}(ddbr${Qnup\flhX?;:0Y=!hrg,qb*adp'iggu!xr^rmpwYeagU3>=5Z0.eqb+ta'nis"nbdx.uq[uhszVhbbR7=6:W3+bta&{l$knv!cmi{+rtXxg~ySoga_ymq4567:>1^<"i}f/pe+be&jf`t"y}_qlwvZdnfVrd~=>?0005?P6(o{l%~k!hcy,`hn~({U{by|Pbhl\|jt789;9;6[?/fpe*w`(ojr%oaew/vp\tkruWkceSua}0122570<]9%l~k }f.e`|+ekcq%|~R~ats]amkYg{:;?3358Q5)`zo$yj"ilx/aoo})pzVzexQmio]{kw678:89:6[?/fpe*w`(ojr%oaew/vp\tkruWkceSua}012762=R8&myj#|i/fa{*fjlp&}yS}`{r^`jjZ~hz9:;8<<9;T2,cw`)zo%lou lljz,swYwf}xTnd`Pxnp34535?2_;#j|i.sd,cf~)keas#z|Ppovq[goiWqey<=>:1348Q5)`zo$yj"ilx/aoo})pzVzexQmio]{kw678?837X> gsd-vc)`kq$h`fv ws]sjqtXj`dTtb|?0142571<]9%l~k }f.e`|+ekcq%|~R~ats]amkYg{:;<;<=b:W3+bta&{l$knv!cmi{+rtXxg~ySoga_ymq4561Wkno219V4*aun'xm#jmw.bnh|*quWyd~Ril<1<14>S7'nxm"h gbz-gim'~xT|cz}_fa?5;473\:$kh!rg-dg}(ddbr${Qnup\cf:56;:0Y=!hrg,qb*adp'iggu!xr^rmpwY`k595>=5Z0.eqb+ta'nis"nbdx.uq[uhszVmh090=0:W3+bta&{l$knv!cmi{+rtXxg~ySjm35?03?P6(o{l%~k!hcy,`hn~({U{by|Pgb>5:76<]9%l~k }f.e`|+ekcq%|~R~ats]dg919:91^<"i}f/pe+be&jf`t"y}_qlwvZad4149<6[?/fpe*w`(ojr%oaew/vp\tkruWni753?i;T2,cw`)zo%lou lljz,swYwf}xTknQ?1g9V4*aun'xm#jmw.bnh|*quWyd~Ril_03e?P6(o{l%~k!hcy,`hn~({U{by|Pgb]15c=R8&myj#|i/fa{*fjlp&}yS}`{r^e`[67a3\:$kh!rg-dg}(ddbr${Qnup\cfY39o1^<"i}f/pe+be&jf`t"y}_qlwvZadW<;m7X> gsd-vc)`kq$h`fv ws]sjqtXojU==k5Z0.eqb+ta'nis"nbdx.uq[uhszVmhS:?i;T2,cw`)zo%lou lljz,swYwf}xTknQ71g9V4*aun'xm#jmw.bnh|*quWyd~Ril_805?P6(o{l%~k!hcy,`hn~({U{by|Pgb]bwwc`4949:6[?/fpe*w`(ojr%oaew/vp\tkruWniTm~|jg=3=63=R8&myj#|i/fa{*fjlp&}yS}`{r^e`[duumn692?84U1-dvc(un&mht#mcky-tvZvi|{UloRo|rde?7;413\:$kh!rg-dg}(ddbr${Qnup\cfYf{{ol090=6:W3+bta&{l$knv!cmi{+rtXxg~ySjmParpfc939:?1^<"i}f/pe+be&jf`t"y}_qlwvZadWhyyij29>348Q5)`zo$yj"ilx/aoo})pzVzexQhc^cpv`a;?78=7X> gsd-vc)`kq$h`fv ws]sjqtXojUjkh<9<12>S7'nxm"h gbz-gim'~xT|cz}_fa\evtbo535>85Z0.eqb+ta'nis"nbdx.uq[uhszVmhSl}}ef]360=R8&myj#|i/fa{*fjlp&}yS}`{r^e`[duumnU:>85Z0.eqb+ta'nis"nbdx.uq[uhszVmhSl}}ef]160=R8&myj#|i/fa{*fjlp&}yS}`{r^e`[duumnU8>85Z0.eqb+ta'nis"nbdx.uq[uhszVmhSl}}ef]760=R8&myj#|i/fa{*fjlp&}yS}`{r^e`[duumnU>>85Z0.eqb+ta'nis"nbdx.uq[uhszVmhSl}}ef]560=R8&myj#|i/fa{*fjlp&}yS}`{r^e`[duumnU<>85Z0.eqb+ta'nis"nbdx.uq[uhszVmhSl}}ef];60=R8&myj#|i/fa{*fjlp&}yS}`{r^e`[duumnU2>45Z0.eqb+ta'nis"nbdx.uq[uhszVmhSl}}ef]g5979:01^<"i}f/pe+be&jf`t"y}_qlwvZadWhyyijQk1=0=6<=R8&myj#|i/fa{*fjlp&}yS}`{r^e`[duumnUo=1=1289V4*aun'xm#jmw.bnh|*quWyd~Ril_`qqabYc95>5>45Z0.eqb+ta'nis"nbdx.uq[uhszVmhSl}}ef]g5939:01^<"i}f/pe+be&jf`t"y}_qlwvZadWhyyijQk1=4=6<=R8&myj#|i/fa{*fjlp&}yS}`{r^e`[duumnUo=191289V4*aun'xm#jmw.bnh|*quWyd~Ril_`qqabYc9525>45Z0.eqb+ta'nis"nbdx.uq[uhszVmhSl}}ef]g59?9:11^<"i}f/pe+be&jf`t"y}_qlwvZadWhyyijQk1^31<>S7'nxm"h gbz-gim'~xT|cz}_fa\evtboVn:S?<7;T2,cw`)zo%lou lljz,swYwf}xTknQnssgd[a7X;;20Y=!hrg,qb*adp'iggu!xr^rmpwY`kVkx~hiPd0]76==R8&myj#|i/fa{*fjlp&}yS}`{r^e`[duumnUo=R;=8:W3+bta&{l$knv!cmi{+rtXxg~ySjmParpfcZb6W?837X> gsd-vc)`kq$h`fv ws]sjqtXojUjkh_e3\37><]9%l~k }f.e`|+ekcq%|~R~ats]dgZgtzlmThS7'nxm"h gbz-gim'~xT|cz}_fa\|jt789;996[?/fpe*w`(ojr%oaew/vp\tkruWniTtb|?01011>S7'nxm"h gbz-gim'~xT|cz}_fa\|jt7899996[?/fpe*w`(ojr%oaew/vp\tkruWniTtb|?01611>S7'nxm"h gbz-gim'~xT|cz}_fa\|jt789?996[?/fpe*w`(ojr%oaew/vp\tkruWniTtb|?01411>S7'nxm"h gbz-gim'~xT|cz}_fa\|jt789=996[?/fpe*w`(ojr%oaew/vp\tkruWniTtb|?01:04>S7'nxm"h gm2-va)`z8$yjzh{/Lov|ZTFEVXOSH@PFVDW644a3\:$kh!rg-dh5(ul&my=#|iwgv,IhsW[KFS_KHOTV\AK76:m1^<"i}f/pe+bj7&{n$k?!rguep*erz{Um{kzPsucwa969:m1^<"i}f/pe+bj7&{n$k?!rguep*erz{Um{kzPsucwa979:j1^<"i}f/pe+bj7&{n$k?!rguep*erz{Um{kzPsucwaZ65k2_;#j|i.sd,ci6)zm%l~< }fvdw+fsuzVl|jyQ|t`vf[4523\:$kh!rg-dh5(ul&my=#|iwgv,gptuWo}mxR}{aug\ip~789;7<3=9;T2,cw`)zo%l`= }d.eq5+tao~$ox|}_guepZusi}oTaxv?013?4;74=2_;#j|i.sd,ci6)zm%l~< }fvdw+fsuzVl|jyQ|t`vf[hs89::0<0<6:W3+bta&{l$ka>!re-dv4(un~l#n{}r^dtbqYt|h~nS`{w01228486:11^<"i}f/pe+bj7&{n$k?!rguep*cjx}sTjzh{_g`13>S7'nxm"h gm2-va)`z8$yjzh{/dosp|Yao~Te?h4U1-dvc(un&mg<#|k/fp2*w`pn}%na}zv_guepZoXe|r;<=><0:W3+bta&{l$ka>!re-dv4(un~l#hctx]escrXaVg~t=>?000:?P6(o{l%~k!hl1,q`*auiz$yy} c1-`ewt~fl~7<3<6;T2,cw`)zo%l`= }d.eqev(u{}y$o=!laspzj`r;97827X> gsd-vc)`d9$yh"i}ar,qwqu(k9%hm|vndv?6;4>3\:$kh!rg-dh5(ul&mym~ }suq,g5)di{xrbhz33?0e?P6(o{l%~k!hl1,q`*auiz$yy} c1-dip~)odQ;Q#ib1/o26c=R8&myj#|i/fn3*wb(o{kx"}{s.a3+bkrp'mfW gsd-vc)`d9$yh"i}ar,qwqu(k9%laxv!glY7Y+aj{'gx>>5Z0.eqb+ta'nf;"j gscp*wus{&i;#{?30?00?P6(o{l%~k!hl1,q`*auiz$yy} c1-u5979::1^<"i}f/pe+bj7&{n$ko|.sqww*e7';7>3<<;T2,cw`)zo%l`= }d.eqev(u{}y$o=!y1=1=66=R8&myj#|i/fn3*wb(o{kx"}{s.a3+s7;<78i7X> gsd-vc)`d9$yh"i}ar,qwqu(k9%}=R>Paof34566:k1^<"i}f/pe+bj7&{n$ko|.sqww*e7';T=Road123444e3\:$kh!rg-dh5(ul&mym~ }suq,g5)q9V8Tmcj?01226g=R8&myj#|i/fn3*wb(o{kx"}{s.a3+s7X;Vkeh=>?000a?P6(o{l%~k!hl1,q`*auiz$yy} c1-u5Z2Xff~;<=>>289V4*aun'xm#jb?.sf,cwgt&{y"m>/bcqv|hb|5:5>45Z0.eqb+ta'nf;"j gscp*wus{&i:#no}rxlfp979:01^<"i}f/pe+bj7&{n$ko|.sqww*e6'jky~t`jt=0=6<=R8&myj#|i/fn3*wb(o{kx"}{s.a2+fguzpdnx1=12g9V4*aun'xm#jb?.sf,cwgt&{y"m>/fov|+ajS9W%k`?!m00e?P6(o{l%~k!hl1,q`*auiz$yy} c0-dip~)odQ:Q#ibs/op6c=R8&myj#|i/fn3*wb(o{kx"}{s.a2+bkrp'mfW?S!glq-iv4a3\:$kh!rg-dh5(ul&mym~ }suq,g4)`e|r%k`U<]/enw+kt:o1^<"i}f/pe+bj7&{n$ko|.sqww*e6'ng~t#ib[5_-chu)ez887X> gsd-vc)`d9$yh"i}ar,qwqu(k8%}=1>1229V4*aun'xm#jb?.sf,cwgt&{y"m>/w3?5;443\:$kh!rg-dh5(ul&mym~ }suq,g4)q9585>>5Z0.eqb+ta'nf;"j gscp*wus{&i:#{?33?00?P6(o{l%~k!hl1,q`*auiz$yy} c0-u5929:k1^<"i}f/pe+bj7&{n$ko|.sqww*e6';T?000a?P6(o{l%~k!hl1,q`*auiz$yy} c0-u5Z5Xign;<=>>2c9V4*aun'xm#jb?.sf,cwgt&{y"m>/w3\0Zhh|9:;<<S7'nxm"h gm2-va)`zhy%~~z|/scn[`kw|pUmnRgPos234575;2_;#j|i.sd,ci6)zm%y|cz}/LalqkrXkfex?:4U1-dvc(un&mg<#|k/srmpw)JkfexRm`uov261=R8&myj#|i/fn3*wb(zyd~"Clotlw[firf}8986[?/fpe*w`(oe:%~i!}povq+Heh}g~Tob{at207?P6(o{l%~k!hl1,q`*twf}x$Anaznu]`kphs<;>0Y=!hrg,qb*ak8'xo#~ats-Ngjsi|Vidycz:259V4*aun'xm#jb?.sf,vuhsz&Ghcx`{_bmvjq05<2_;#j|i.sd,ci6)zm%y|cz}/LalqkrXkfex:<;;T2,cw`)zo%l`= }d.psjqt(Eje~byQlotlw<7?<]9%l~k }f.eo4+tc'{zex!BcnwmpZeh}g~Tot2?>3a8Q5)`zo$yj"ic0/pg+wvi|{%Fob{at^alqkrXkp6;2R|{289V4*aun'xm#jb?.sf,vuhsz&Ghcx`{_bmvjqYdq5;5>n5Z0.eqb+ta'nf;"j rqlwv*Kdg|dSnaznu]`}979W{~956[?/fpe*w`(oe:%~i!}povq+Heh}g~Tob{at^az8785k2_;#j|i.sd,ci6)zm%y|cz}/LalqkrXkfexRmv<3<\vq4>3\:$kh!rg-dh5(ul&x{by| MbmvjqYdg|dSnw33?0`?P6(o{l%~k!hl1,q`*twf}x$Anaznu]`kphsWjs7?3Q}t3;8Q5)`zo$yj"ic0/pg+wvi|{%Fob{at^alqkrXkp6?2?m4U1-dvc(un&mg<#|k/srmpw)JkfexRm`uov\g|:36Vx>45Z0.eqb+ta'nf;"j rqlwv*Kdg|dSnaznu]`}939:j1^<"i}f/pe+bj7&{n$~}`{r.O`kphsWje~byQly=7=[wr512_;#j|i.sd,ci6)zm%y|cz}/LalqkrXkfexRmv<7<1g>S7'nxm"h gm2-va)uxg~y#@m`uov\gjsi|Vir0;0Pru0:?P6(o{l%~k!hl1,q`*twf}x$Anaznu]`kphsWjs7;3 gsd-vc)`d9$yh"|nup,Ifirf}Uhcx`{_ymq8485i2_;#j|i.sd,ci6)zm%y|cz}/LalqkrXkfexRv`r=0=6d=R8&myj#|i/fn3*wb(zyd~"Clotlw[firf}Usc2<>3c8Q5)`zo$yj"ic0/pg+wvi|{%Fob{at^alqkrXpfx7834:7g<]9%l~k }f.eo4+tc'{zex!BcnwmpZeh}g~Ttb|38?0g?P6(o{l%~k!hl1,q`*twf}x$Anaznu]`kphsWqey050Pru3e?P6(o{l%~k!hl1,q`*twf}x$ob{at=2=5c=R8&myj#|i/fn3*wb(zyd~"m`uov?5;7a3\:$kh!rg-dh5(ul&x{by| cnwmp9499o1^<"i}f/pe+bj7&{n$~}`{r.alqkr;;7;m7X> gsd-vc)`d9$yh"|nup,gjsi|5>5=k5Z0.eqb+ta'nf;"j rqlwv*eh}g~793?i;T2,cw`)zo%l`= }d.psjqt(kfex1811g9V4*aun'xm#jb?.sf,vuhsz&idycz37?3e?P6(o{l%~k!hl1,q`*twf}x$ob{at=:=5`=R8&myj#|i/fn3*wb(zyd~"m`uov\44c<]9%l~k }f.eo4+tc'{zex!lotlw[47b3\:$kh!rg-dh5(ul&x{by| cnwmpZ46m2_;#j|i.sd,ci6)zm%y|cz}/bmvjqY49l1^<"i}f/pe+bj7&{n$~}`{r.alqkrX<8o0Y=!hrg,qb*ak8'xo#~ats-`kphsW<;n7X> gsd-vc)`d9$yh"|nup,gjsi|V<:i6[?/fpe*w`(oe:%~i!}povq+firf}U<=h5Z0.eqb+ta'nf;"j rqlwv*eh}g~T4?<4U1-dvc(un&mg<#|k/srmpw)dg|dSi?30?01?P6(o{l%~k!hl1,q`*twf}x$ob{at^f28485:2_;#j|i.sd,ci6)zm%y|cz}/bmvjqYc9585>?5Z0.eqb+ta'nf;"j rqlwv*eh}g~Th<2<>308Q5)`zo$yj"ic0/pg+wvi|{%hcx`{_e3?0;453\:$kh!rg-dh5(ul&x{by| cnwmpZb64<49>6[?/fpe*w`(oe:%~i!}povq+firf}Uo=181239V4*aun'xm#jb?.sf,vuhsz&idyczPd0>4:74<]9%l~k }f.eo4+tc'{zex!lotlw[a7;078:7X> gsd-vc)`d9$yh"|nup,gjsi|Vn:S=<>;T2,cw`)zo%l`= }d.psjqt(kfexRj>_002?P6(o{l%~k!hl1,q`*twf}x$ob{at^f2[7463\:$kh!rg-dh5(ul&x{by| cnwmpZb6W:8:7X> gsd-vc)`d9$yh"|nup,gjsi|Vn:S9<>;T2,cw`)zo%l`= }d.psjqt(kfexRj>_402?P6(o{l%~k!hl1,q`*twf}x$ob{at^f2[3463\:$kh!rg-dh5(ul&x{by| cnwmpZb6W>8:7X> gsd-vc)`d9$yh"|nup,gjsi|Vn:S5<;;T2,cw`)zo%l`= }d.psjqt(kfexR``t12356`<]9%l~k }f.eo4+qu'n}j#if/uqtc)JimnThdhi_qlwvZvflVkoh=>?0^az8584n2_;#j|i.sd,ci6){%l{l}!gqd-swva'DkohRjffg]sjqtXxhnTmij?012\g|:66:l0Y=!hrg,qb*ak8'}y#jyns/esb+quxo%FmijPdhde[uhszVzjhRokd1234Ze~4;48j6[?/fpe*w`(oe:%{!hw`q-cu`){zm#@okd^fjbcYwf}xT|ljPaef3456Xkp682>h4U1-dvc(un&mg<#y}/fubw+awn'}y|k!Baef\`l`aWyd~R~nd^cg`5678Vir090!ws-dsdu)oyl%{~i/Lcg`ZbnnoU{by|Pp`f\eab789:Tot2:>2d8Q5)`zo$yj"ic0/uq+bqf{'m{j#y}pg-NeabXl`lmS}`{r^rb`Zgcl9:;S7'nxm"h gm2-sw)`hy%k}h!wsre+HgclVnbjkQnup\tdbXimn;<=>Pcx>4:6`<]9%l~k }f.eo4+qu'n}j#if/uqtc)JimnThdhi_qlwvZvflVkoh=>?0^az8=84n2_;#j|i.sd,ci6){%l{l}!gqd-swva'DkohRjffg]sjqtXxhnTmij?012\g|:>6=;0Y=!hrg,qb*ak8'}y#jyns/esb+quxo%FmijPdhde[uhszVzjhRokd1234Zjr|5;;29>4U1-dvc(un&mg<#y}/fubw+awn'}y|k!Baef\`l`aWyd~R~nd^cg`5678Vf~x1?1479V4*aun'xm#jb?.vp,crgt&nzm"z|f.Ob`aYcaolT|cz}_qcg[dbc89:;Sa{{<0<\MKPX8=:0Y=!hrg,qb*ak8'}y#jyns/esb+quxo%FmijPdhde[uhszVzjhRokd1234Zjr|5858=5Z0.eqb+ta'nf;"z| gvcp*bva&~x{j"Cnde]gmc`Xxg~yS}ok_`fg4567We0>0;0:W3+bta&{l$ka>!ws-dsdu)oyl%{~i/Lcg`ZbnnoU{by|Pp`f\eab789:T`xz34?63?P6(o{l%~k!hl1,tv*apiz$l|k xrqd,IdbcWmcmjR~ats]seaYflm:;<=Qcuu>6:16<]9%l~k }f.eo4+qu'n}j#if/uqtc)JimnThdhi_qlwvZvflVkoh=>?0^nvp909<91^<"i}f/pe+bj7&~x$kzo|.fre*rtwn&GjhiQkigd\tkruWykoSljk0123[iss4>4?<6[?/fpe*w`(oe:%{!hw`q-cu`){zm#@okd^fjbcYwf}xT|ljPaef3456Xd|~743:?;T2,cw`)zo%l`= xr.etev(`xo$|~}h M`fg[aoanVzexQae]b`a6789Ugyy26>538Q5)`zo$yj"ic0/uq+bqf{'m{j#y}pg-NeabXl`lmS}`{r^rb`Zgcl9:;?0^zlv979<91^<"i}f/pe+bj7&~x$kzo|.fre*rtwn&GjhiQkigd\tkruWykoSljk0123[}iu4;4?<6[?/fpe*w`(oe:%{!hw`q-cu`){zm#@okd^fjbcYwf}xT|ljPaef3456Xpfx7?3:?;T2,cw`)zo%l`= xr.etev(`xo$|~}h M`fg[aoanVzexQae]b`a6789Usc2;>528Q5)`zo$yj"ic0/uq+bqf{'m{j#y}pg-NeabXl`lmS}`{r^rb`Zgcl9:;?_ymq838382_;#j|i.sd,ci6){%l{l}!gqd-swva'DkohRjffg]sjqtXxhnTmij?012\|jt;?7>;7X> gsd-vc)`d9$|~"ixar,dtc(pzyl$Aljk_ekebZvi|{U{miQnde2345Yg{6329>4U1-dvc(un&mg<#y}/fubw+awn'}y|k!Baef\`l`aWyd~R~nd^cg`5678Vrd~171319V4*aun'xm#jb?.vp,crgt&nzm"z|f.fjbcYwf}xT|lj311<1b>S7'nxm"h gm2-sw)`hy%k}h!wsre+aoanVzexQae>2:7`<]9%l~k }f.eo4+qu'n}j#if/uqtc)caolT|cz}_qcg8785n2_;#j|i.sd,ci6){%l{l}!gqd-swva'mcmjR~ats]sea:46;l0Y=!hrg,qb*ak8'}y#jyns/esb+quxo%oekhPpovq[ugc4=49j6[?/fpe*w`(oe:%{!hw`q-cu`){zm#igif^rmpwYwim6>2?h4U1-dvc(un&mg<#y}/fubw+awn'}y|k!kigd\tkruWyko0;0=f:W3+bta&{l$ka>!ws-dsdu)oyl%{~i/ekebZvi|{U{mi28>3d8Q5)`zo$yj"ic0/uq+bqf{'m{j#y}pg-gmc`Xxg~yS}ok<9<1b>S7'nxm"h gm2-sw)`hy%k}h!wsre+aoanVzexQae>::7c<]9%l~k }f.eo4+qu'n}j#if/uqtc)caolT|cz}_qcg[44a3\:$kh!rg-dh5(pz&m|m~ hpg,tvu`(l`lmS}`{r^rb`Z77:l1^<"i}f/pe+bj7&~x$kzo|.fre*rtwn&nbjkQnup\tdbX:;o0Y=!hrg,qb*ak8'}y#jyns/esb+quxo%oekhPpovq[ugcW:8n7X> gsd-vc)`d9$|~"ixar,dtc(pzyl$hdhi_qlwvZvflV>9i6[?/fpe*w`(oe:%{!hw`q-cu`){zm#igif^rmpwYwimU>>h5Z0.eqb+ta'nf;"z| gvcp*bva&~x{j"jffg]sjqtXxhnT:?k4U1-dvc(un&mg<#y}/fubw+awn'}y|k!kigd\tkruWykoS:!ws-dsdu)oyl%{~i/ekebZvi|{U{miQ6399V4*aun'xm#jb?.vp,crgt&nzm"z|f.fjbcYwf}xT|ljPaef3456;9948;6[?/fpe*w`(oe:%{!hw`q-cu`){zm#igif^rmpwYwimUjhi>?01>2:61<]9%l~k }f.eo4+qu'n}j#if/uqtc)caolT|cz}_qcg[dbc89:;0?0<7:W3+bta&{l$ka>!ws-dsdu)oyl%{~i/ekebZvi|{U{miQnde2345:46:=0Y=!hrg,qb*ak8'}y#jyns/esb+quxo%oekhPpovq[ugcWhno<=>?<5<03>S7'nxm"h gm2-sw)`hy%k}h!wsre+aoanVzexQae]b`a67896>2>94U1-dvc(un&mg<#y}/fubw+awn'}y|k!kigd\tkruWykoSljk01238384?2_;#j|i.sd,ci6){%l{l}!gqd-swva'mcmjR~ats]seaYflm:;<=28>258Q5)`zo$yj"ic0/uq+bqf{'m{j#y}pg-gmc`Xxg~yS}ok_`fg45674148;6[?/fpe*w`(oe:%{!hw`q-cu`){zm#igif^rmpwYwimUjhi>?01>::7g<]9%l~k }f.eo4+qu'n}j#if/uqtc)wzfmTjxbc_h11?P6(o{l%~k!hl1,tv*apiz$l|k xrqd,twi`Wog`RgPmtz34554<2_;#j|i.sd,ci6){%l{l}!gqd-swva'yxdkRhzlm]j[hs89:8=8=;;T2,cw`)zo%l`= xr.etev(`xo$|~}h psmd[cskdVcTaxv?0112<6><]9%l~k }f.eo4+qu'n}j#if/uqtc)wzfmTjxbc_h]nq}678:;3S^Y?339V4*aun'xm#jb?.vp,crgt&nzm"z|f.rqkbYa}efTeR``t12357?<]9%l~k }f.eo4+qu'n}j#y|tr-`5*efz{seiy2?>3;8Q5)`zo$yj"ic0/uq+bqf{'}xx~!l1.abvwim}6:2?74U1-dvc(un&mg<#y}/fubw+qt|z%h="mnrs{maq:56;30Y=!hrg,qb*ak8'}y#jyns/uppv)d9&ij~waeu>0:7`<]9%l~k }f.eo4+qu'n}j#y|tr-`5*aj}q$laV>R.fo2*h75n2_;#j|i.sd,ci6){%l{l}!wrvp+f7(ods"jcT1\,div(j{;l0Y=!hrg,qb*ak8'}y#jyns/uppv)d9&mfyu hmZ0^*bkt&dy9j6[?/fpe*w`(oe:%{!hw`q-svrt'j;$k`{w.foX7X(`ez$f?h4U1-dvc(un&mg<#y}/fubw+qt|z%h="ibuy,di^2Z&ngx"`}=3:W3+bta&{l$ka>!ws-dsdu)z~x#n? v0>3:75<]9%l~k }f.eo4+qu'n}j#y|tr-`5*p64849?6[?/fpe*w`(oe:%{!hw`q-svrt'j;$z<2=>318Q5)`zo$yj"ic0/uq+bqf{'}xx~!l1.t28685;2_;#j|i.sd,ci6){%l{l}!wrvp+f7(~86?2?l4U1-dvc(un&mg<#y}/fubw+qt|z%h="x>_1]bja6789;9n6[?/fpe*w`(oe:%{!hw`q-svrt'j;$z_`lg45679;h0Y=!hrg,qb*ak8'}y#jyns/uppv)d9&|:S?Qnne234575j2_;#j|i.sd,ci6){%l{l}!wrvp+f7(~8U8Sl`k012357d<]9%l~k }f.eo4+qu'n}j#y|tr-`5*p6W=Ujbi>?0131=>S7'nxm"h gm2-sw)`hy%{~z|/b0,gdtuqgo0=0=9:W3+bta&{l$ka>!ws-dsdu)z~x#n< c`pq}kcs484956[?/fpe*w`(oe:%{!hw`q-svrt'j8$ol|}yogw878512_;#j|i.sd,ci6){%l{l}!wrvp+f4(khxyuck{<2<1b>S7'nxm"h gm2-sw)`hy%{~z|/b0,chs&ngP

"x><1<17>S7'nxm"h gm2-sw)`hy%{~z|/b0,r4:66;90Y=!hrg,qb*ak8'}y#jyns/uppv)d:&|:0?0=3:W3+bta&{l$ka>!ws-dsdu)z~x#n< v0>0:75<]9%l~k }f.eo4+qu'n}j#y|tr-`6*p64=49n6[?/fpe*w`(oe:%{!hw`q-svrt'j8$z?0131f>S7'nxm"h gm2-sw)`hy%{~z|/b0,r4Y3Whdo<=>?1328Q5)`zo$yj"ic0/uq+bqf{'}xx~!lolr265=R8&myj#|i/fn3*rt(o~kx"z}{s.aliu4582_;#j|i.sd,ci6){%l{l}!wrvp+fijx:8o7X> gsd-vc)`d9$|~"ixar,twqu(ohl%o>!laspzj`r;878o7X> gsd-vc)`d9$|~"ixar,twqu(ohl%o>!laspzj`r;978o7X> gsd-vc)`d9$|~"ixar,twqu(ohl%o>!laspzj`r;:78o7X> gsd-vc)`d9$|~"ixar,twqu(ohl%o>!laspzj`r;;7987X> gsd-vc)`d9$|~"ixar,twqu(ohl%o>!hmtz-ch]7U'mf=#c>329V4*aun'xm#jb?.vp,crgt&~y"inf/a0+bkrp'mfW5Z0.eqb+ta'nf;"z| gvcp*rus{&mjj#m1^<"i}f/pe+bj7&~x$kzo|.vqww*afn'i8#{?30?04?P6(o{l%~k!hl1,tv*apiz$|y} g`d-g6)q95;5>:5Z0.eqb+ta'nf;"z| gvcp*rus{&mjj#m gsd-vc)`d9$|~"ixar,twqu(ohl%o>!y1^2\ekb789::>k5Z0.eqb+ta'nf;"z| gvcp*rus{&mjj#m>2g9V4*aun'xm#jb?.vp,crgt&~y"inf/a0+s7X;Vkeh=>?000e?P6(o{l%~k!hl1,tv*apiz$|y} g`d-g6)q9V>Tmcj?01226f=R8&myj#|i/fn3*rt(o~kx"z}{s.pbiZgkefySk{cl^k00>S7'nxm"h gm2-sw)`hy%{~z|/scn[djjgz~Tjxbc_h]nq}67899>7X> gsd-vc)`d9$|~"ixar,twqu(zhgTmac`su]eqijXaVg~t=>?001a?P6(o{l%~k!hl1,tv*apiz$|y} r`o\eikh{}UmyabPi^llp56798UBB[Q?299V4*aun'xm#jb?.vp,crgt&~y"|nm^dvhiYajVc996[?/fpe*w`(oe:%{!hw`q-svrt'{kfSk{cl^k1`>S7'nxm"h gm2-sw)`hy%{~z|/scn[cskdVcTaxv?0121a>S7'nxm"h gm2-sw)`hy%{~z|/scn[cskdVcTaxv?01225a=R8&myj#|i/fn3*rt(zhgT{Qjn^k25c=R8&myj#|i/fn3*rt(zhgT{Qjn^k2[4443\:$kh!rg-dh5(pz&}{by| MbmvjqYdg|d>95Z0.eqb+ta'nf;"z| wqlwv*Kdg|dSnaznu310>S7'nxm"h gm2-sw)pxg~y#@m`uov\gjsi|;8?7X> gsd-vc)`d9$|~"ynup,Ifirf}Uhcx`{3368Q5)`zo$yj"ic0/uq+rvi|{%Fob{at^alqkr3:=1^<"i}f/pe+bj7&~x${}`{r.O`kphsWje~by;=4:W3+bta&{l$ka>!ws-ttkru'DidyczPcnwmp3433\:$kh!rg-dh5(pz&}{by| MbmvjqYdg|d;?:4U1-dvc(un&mg<#y}/vrmpw)JkfexRm`uov;61=R8&myj#|i/fn3*rt(yd~"Clotlw[firf}3956[?/fpe*w`(oe:%{!xpovq+Heh}g~Tob{at^az8585k2_;#j|i.sd,ci6){%||cz}/LalqkrXkfexRmv<1<\vq4>3\:$kh!rg-dh5(pz&}{by| MbmvjqYdg|dSnw31?0`?P6(o{l%~k!hl1,tv*qwf}x$Anaznu]`kphsWjs7=3Q}t3;8Q5)`zo$yj"ic0/uq+rvi|{%Fob{at^alqkrXkp692?m4U1-dvc(un&mg<#y}/vrmpw)JkfexRm`uov\g|:56Vx>45Z0.eqb+ta'nf;"z| wqlwv*Kdg|dSnaznu]`}959:j1^<"i}f/pe+bj7&~x${}`{r.O`kphsWje~byQly=1=[wr512_;#j|i.sd,ci6){%||cz}/LalqkrXkfexRmv<5<1g>S7'nxm"h gm2-sw)pxg~y#@m`uov\gjsi|Vir090Pru0:?P6(o{l%~k!hl1,tv*qwf}x$Anaznu]`kphsWjs7935:Zts:01^<"i}f/pe+bj7&~x${}`{r.O`kphsWje~byQly=5=6f=R8&myj#|i/fn3*rt(yd~"Clotlw[firf}Uhu191_sv1=>S7'nxm"h gm2-sw)pxg~y#@m`uov\gjsi|Vir050=c:W3+bta&{l$ka>!ws-ttkru'DidyczPcnwmpZe~414T~y1:7g<]9%l~k }f.eo4+qu'~zex!BcnwmpZeh}g~Ttb|33?0b?P6(o{l%~k!hl1,tv*qwf}x$Anaznu]`kphsWqey090=a:W3+bta&{l$ka>!ws-ttkru'DidyczPcnwmpZ~hz5?5>l5Z0.eqb+ta'nf;"z| wqlwv*Kdg|dSnaznu]{kw:16;k0Y=!hrg,qb*ak8'}y#z~ats-Ngjsi|VidyczPxnp?3;4f3\:$kh!rg-dh5(pz&}{by| MbmvjqYdg|dSua}<9<1e>S7'nxm"h gm2-sw)pxg~y#@m`uov\gjsi|Vrd~1712e9V4*aun'xm#jb?.vp,suhsz&Ghcx`{_bmvjqYg{622R|{1g9V4*aun'xm#jb?.vp,suhsz&idycz30?3e?P6(o{l%~k!hl1,tv*qwf}x$ob{at=3=5c=R8&myj#|i/fn3*rt(yd~"m`uov?6;7a3\:$kh!rg-dh5(pz&}{by| cnwmp9599o1^<"i}f/pe+bj7&~x${}`{r.alqkr;<7;m7X> gsd-vc)`d9$|~"ynup,gjsi|5?5=k5Z0.eqb+ta'nf;"z| wqlwv*eh}g~7:3?i;T2,cw`)zo%l`= xr.usjqt(kfex1911g9V4*aun'xm#jb?.vp,suhsz&idycz38?3e?P6(o{l%~k!hl1,tv*qwf}x$ob{at=;=5`=R8&myj#|i/fn3*rt(yd~"m`uov\44c<]9%l~k }f.eo4+qu'~zex!lotlw[47b3\:$kh!rg-dh5(pz&}{by| cnwmpZ46m2_;#j|i.sd,ci6){%||cz}/bmvjqY49l1^<"i}f/pe+bj7&~x${}`{r.alqkrX<8o0Y=!hrg,qb*ak8'}y#z~ats-`kphsW<;n7X> gsd-vc)`d9$|~"ynup,gjsi|V<:i6[?/fpe*w`(oe:%{!xpovq+firf}U<=h5Z0.eqb+ta'nf;"z| wqlwv*eh}g~T4<1<16>S7'nxm"h gm2-sw)pxg~y#naznu]g5979:;1^<"i}f/pe+bj7&~x${}`{r.alqkrXl8692?<4U1-dvc(un&mg<#y}/vrmpw)dg|dSi?33?01?P6(o{l%~k!hl1,tv*qwf}x$ob{at^f28185:2_;#j|i.sd,ci6){%||cz}/bmvjqYc95?5>?5Z0.eqb+ta'nf;"z| wqlwv*eh}g~Th<29>308Q5)`zo$yj"ic0/uq+rvi|{%hcx`{_e3?3;453\:$kh!rg-dh5(pz&}{by| cnwmpZb64149>6[?/fpe*w`(oe:%{!xpovq+firf}Uo=171209V4*aun'xm#jb?.vp,suhsz&idyczPd0]364=R8&myj#|i/fn3*rt(yd~"m`uov\`4Y6:81^<"i}f/pe+bj7&~x${}`{r.alqkrXl8U9><5Z0.eqb+ta'nf;"z| wqlwv*eh}g~Th<5Z0.eqb+ta'nf;"z| wqlwv*eh}g~Th:;1^<"i}f/pe+bj7&~x${}`{r.alqkrXl;6;2?<4U1-dvc(un&mg<#y}/vrmpw)dg|dSi<31?01?P6(o{l%~k!hl1,tv*qwf}x$ob{at^f18785:2_;#j|i.sd,ci6){%||cz}/bmvjqYc:595>?5Z0.eqb+ta'nf;"z| wqlwv*eh}g~Th?2;>308Q5)`zo$yj"ic0/uq+rvi|{%hcx`{_e0?1;453\:$kh!rg-dh5(pz&}{by| cnwmpZb54?49>6[?/fpe*w`(oe:%{!xpovq+firf}Uo>191239V4*aun'xm#jb?.vp,suhsz&idyczPd3>;:74<]9%l~k }f.eo4+qu'~zex!lotlw[a4;178:7X> gsd-vc)`d9$|~"ynup,gjsi|Vn9S=<>;T2,cw`)zo%l`= xr.usjqt(kfexRj=_002?P6(o{l%~k!hl1,tv*qwf}x$ob{at^f1[7463\:$kh!rg-dh5(pz&}{by| cnwmpZb5W:8:7X> gsd-vc)`d9$|~"ynup,gjsi|Vn9S9<>;T2,cw`)zo%l`= xr.usjqt(kfexRj=_402?P6(o{l%~k!hl1,tv*qwf}x$ob{at^f1[3463\:$kh!rg-dh5(pz&}{by| cnwmpZb5W>8:7X> gsd-vc)`d9$|~"ynup,gjsi|Vn9S5<>;T2,cw`)zo%l`= xr.usjqt(kfexRj=_801?P6(o{l%~k!hl1,tv*qwf}x$ob{at^f08585:2_;#j|i.sd,ci6){%||cz}/bmvjqYc;5;5>?5Z0.eqb+ta'nf;"z| wqlwv*eh}g~Th>2=>308Q5)`zo$yj"ic0/uq+rvi|{%hcx`{_e1?7;453\:$kh!rg-dh5(pz&}{by| cnwmpZb44=49>6[?/fpe*w`(oe:%{!xpovq+firf}Uo?1;1239V4*aun'xm#jb?.vp,suhsz&idyczPd2>5:74<]9%l~k }f.eo4+qu'~zex!lotlw[a5;?7897X> gsd-vc)`d9$|~"ynup,gjsi|Vn8050=2:W3+bta&{l$ka>!ws-ttkru'je~byQk3=;=64=R8&myj#|i/fn3*rt(yd~"m`uov\`6Y7:81^<"i}f/pe+bj7&~x${}`{r.alqkrXl:U:><5Z0.eqb+ta'nf;"z| wqlwv*eh}g~Th>Q=209V4*aun'xm#jb?.vp,suhsz&idyczPd2]064=R8&myj#|i/fn3*rt(yd~"m`uov\`6Y3:81^<"i}f/pe+bj7&~x${}`{r.alqkrXl:U>><5Z0.eqb+ta'nf;"z| wqlwv*eh}g~Th>Q9209V4*aun'xm#jb?.vp,suhsz&idyczPd2]464=R8&myj#|i/fn3*rt(yd~"m`uov\`6Y?:81^<"i}f/pe+bj7&~x${}`{r.alqkrXl:U2>95Z0.eqb+ta'nf;"z| wqlwv*eh}g~Tbbz?01323>S7'nxm"h mdo,`jssW`6;2<64U1-dvc(un&gna"j`uu]j8469911^<"i}f/pe+hcj'me~xRg310<2<>S7'nxm"h mdo,`jssW`6:>3?7;T2,cw`)zo%fi`!kotv\m9746820Y=!hrg,qb*kbe&ndyyQf<06=5==R8&myj#|i/lgn+air|Vc7=80>8:W3+bta&{l$ahc dnww[l:6>7;37X> gsd-vc)jmd%ocxzPi=34:4><]9%l~k }f.ofi*bh}}Ub0<61199V4*aun'xm#`kb/emvpZo;904:;6[?/fpe*w`(elg$hb{{_h>2:4><]9%l~k }f.ofi*bh}}Ub0?>1199V4*aun'xm#`kb/emvpZo;:84:46[?/fpe*w`(elg$hb{{_h>16;7?3\:$kh!rg-nah)cg|~Te1<<>0:8Q5)`zo$yj"cjm.flqqYn4;>5=55Z0.eqb+ta'dof#iazt^k?608602_;#j|i.sd,i`k(lfSd2=6?3;?P6(o{l%~k!bel-gkprXa58<2<64U1-dvc(un&gna"j`uu]j87>9911^<"i}f/pe+hcj'me~xRg328<23>S7'nxm"h mdo,`jssW`692<64U1-dvc(un&gna"j`uu]j8669911^<"i}f/pe+hcj'me~xRg330<2<>S7'nxm"h mdo,`jssW`68>3?7;T2,cw`)zo%fi`!kotv\m9546820Y=!hrg,qb*kbe&ndyyQf<26=5==R8&myj#|i/lgn+air|Vc7?80>7:W3+bta&{l$ahc dnww[l:468=0Y=!hrg,qb*kbe&ndyyQf<5<23>S7'nxm"h mdo,`jssW`6>2<94U1-dvc(un&gna"j`uu]j8386?2_;#j|i.sd,i`k(lfSd28>058Q5)`zo$yj"cjm.flqqYn414:;6[?/fpe*w`(elg$hb{{_h>::40<]9%l~k }f.ofi*bh}}UbS=?9;T2,cw`)zo%fi`!kotv\mZ76?2_;#j|i.sd,i`k(lfSdQ>0058Q5)`zo$yj"cjm.flqqYnW8;:;6[?/fpe*w`(elg$hb{{_h]2641<]9%l~k }f.ofi*bh}}UbS<=>7:W3+bta&{l$ahc dnww[lY6<8=0Y=!hrg,qb*kbe&ndyyQf_0723>S7'nxm"h mdo,`jssW`U::<94U1-dvc(un&gna"j`uu]j[416?2_;#j|i.sd,i`k(lfSdQ>8058Q5)`zo$yj"cjm.flqqYnW83::6[?/fpe*w`(elg$hb{{_h]152=R8&myj#|i/lgn+air|VcT>=?8;T2,cw`)zo%fi`!kotv\mZ469>1^<"i}f/pe+hcj'me~xRgP2334?P6(o{l%~k!bel-gkprXaV88=:5Z0.eqb+ta'dof#iazt^k\61703\:$kh!rg-nah)cg|~TeR<:169V4*aun'xm#`kb/emvpZoX:?;<7X> gsd-vc)jmd%ocxzPi^0452=R8&myj#|i/lgn+air|VcT>5?8;T2,cw`)zo%fi`!kotv\mZ4>9?1^<"i}f/pe+hcj'me~xRgP3058Q5)`zo$yj"cjm.flqqYnW:::;6[?/fpe*w`(elg$hb{{_h]0541<]9%l~k }f.ofi*bh}}UbS><>7:W3+bta&{l$ahc dnww[lY4;8=0Y=!hrg,qb*kbe&ndyyQf_2623>S7'nxm"h mdo,`jssW`U89<84U1-dvc(un&gna"j`uu]j[1713\:$kh!rg-nah)cg|~TeR;>6:W3+bta&{l$ahc dnww[lY19?1^<"i}f/pe+hcj'me~xRgP7048Q5)`zo$yj"cjm.flqqYnW1;=7X> gsd-vc)jmd%ocxzPi^;2=>S7'nxm"h mdo,`jssWdof0=0>a:W3+bta&{l$ahc dnww[hcj48:5=l5Z0.eqb+ta'dof#iazt^ofi97668k0Y=!hrg,qb*kbe&ndyyQbel>26;7f3\:$kh!rg-nah)cg|~Tahc312<2e>S7'nxm"h mdo,`jssWdof0<:11`9V4*aun'xm#`kb/emvpZkbe5;>27;j7X> gsd-vc)jmd%ocxzPmdo?5286i2_;#j|i.sd,i`k(lfS`kb<0:=5d=R8&myj#|i/lgn+air|Vgna1?6>0;8Q5)`zo$yj"cjm.flqqYjmd6:2 gsd-vc)jmd%ocxzPmdo?6486i2_;#j|i.sd,i`k(lfS`kb<30=5d=R8&myj#|i/lgn+air|Vgna1<<>0c8Q5)`zo$yj"cjm.flqqYjmd6983?n;T2,cw`)zo%fi`!kotv\i`k;:<4:m6[?/fpe*w`(elg$hb{{_lgn87099h1^<"i}f/pe+hcj'me~xRcjm=04:4g<]9%l~k }f.ofi*bh}}Ufi`2=8?3b?P6(o{l%~k!bel-gkprXelg7>40>9:W3+bta&{l$ahc dnww[hcj4;4:m6[?/fpe*w`(elg$hb{{_lgn86699h1^<"i}f/pe+hcj'me~xRcjm=12:4g<]9%l~k }f.ofi*bh}}Ufi`2<2?3b?P6(o{l%~k!bel-gkprXelg7?>0>a:W3+bta&{l$ahc dnww[hcj4:>5=l5Z0.eqb+ta'dof#iazt^ofi9526830Y=!hrg,qb*kbe&ndyyQbel>0:4?<]9%l~k }f.ofi*bh}}Ufi`2;>0;8Q5)`zo$yj"cjm.flqqYjmd6>2<74U1-dvc(un&gna"j`uu]nah:16830Y=!hrg,qb*kbe&ndyyQbel>4:4?<]9%l~k }f.ofi*bh}}Ufi`27>0;8Q5)`zo$yj"cjm.flqqYjmd622::4U1-dvc(un&gna"imm/eaib(`jdmj"cijcb,aib)edbUfi`Qheogqeqiu'kgei lsup,vdkkgfzP

1d9V4*aun'xm#}{bmi,vaYu{}Uyij2?>0g8Q5)`zo$yj"||tcnh+wbXzz~T~hi31?3f?P6(o{l%~k!}su`oo*tcW{ySkh<3<2`>S7'nxm"h rrvahn)ulVxxxR|jg^22`>S7'nxm"h rrvahn)ulVxxxR|jg^32`>S7'nxm"h rrvahn)ulVxxxR|jg^02`>S7'nxm"h rrvahn)pzVxxxRo|rde14>S7'nxm"h rrvahn)pzVxxxRo|rde\`4473\:$kh!rg-qwqdkc&}yS}{_`qqabYc:8i0Y=!hrg,qb*tt|kf`#z|Prrv\gjke9m1^<"i}f/pe+wusjea${Q}su]`khd69l1^<"i}f/pe+wusjea${Q}su]qab:768o0Y=!hrg,qb*tt|kf`#z|Prrv\v`a;97;o7X> gsd-vc)u{}hgg"y}_sqw[wc`W9;o7X> gsd-vc)u{}hgg"y}_sqw[wc`W8k0Y^K]_@NJEVe<]ZOYS[G\ICNF7>PDK01]EHYPTXRF7>QBI:1\IOm4WSKWAZKHLLUJo6Y]IUG\IJBBWKn0[_G[E^UJ@QNXIm1\^DZJ_VKGPMYE9m1SEAGAX,ZGF%6)9)Y_YO.?.0"BWFON=2RD^NW9;YQWHLD03QY_SJ@K7:ZPPZPDKk1SSNA]E^KMBJ00:ZgiZKfbfx]i}foo33?]bjWDcecXjrrkljf=fddexxRkbpu{a?djjgz~Tjxbc6:`bgnswl2hjof{_lcqo`t43jf`h6jnt`]`kphs 9#o7io{a^alqkr/9 n0hlzn_bmvjq.5!m1omyoPcnwmp-5.l2njxlQlotlw,1/c3mkmRm`uov+1,bbf|hUhcx`{(9+g?agsiVidycz'9(d8`drfWje~by26:1<4?adn|lxy:6jfn)2*2>bnf!;";6jfn)33-2=cag":=$94dhl+57/03mce$<=&7:fjj-73!>1oec&>5(58`lh/9?#<7iga(05*2>bnf!8":6jfn)1*2>bnf!>":6jfn)7*2>bnf!<":6jfn)5*2>bnf!2":6jfn);*2>bnf5:5;6jfn=33:2=cag6:=394dhl?57803mce0<=17:fjj9736>1oec2>5?58`lh;9?427iga<0594;1&7:flqq.6!11ocxz'11+;?air|!;:%55kotv+57/?3me~x%?<)99gkpr/9=#37iazt)36-==cg|~#=;'7;emvp-70!11ocxz'19+;?air|!;2%:5kotv+6,>&8:flqq.59 20hb{{(30*<>bh}}"9?$64dnww,72.02ndyy&=5(:8`jss ;<"46j`uu*13,> =0hb{{(6+4?air|!2";6j`uu*:-2=cg|~7<364dnww846902ndyy2>1?:8`jss488546j`uu>27;>bh}}6:;364dnww84>902ndyy2>9?58`jss48437iazt=03:==cg|~7><07;emvp945611ocxz322<;?air|58?255kotv?608?3me~x1<9>99gkpr;:>437iazt=0;:==cg|~7>408;emvp94902ndyy2<0?:8`jss4:;546j`uu>06;>=18:flqq:4<7k0hb{{<2794;>;17:flqq:46>1ocxz34?58`jss4<4<7iazt=4=3>bh}}6<2:5kotv?<;12y15[7ekcV;3xb=9,gkekZabflxjxb|Pv7]2(KIIM%DDBH:?3:djbjYdgrT9<,b]kevYulVnjxlQlotlw95*dWmceSzgkti?2<)eX`hyT{Qkauc\gjsi|4:'oRhzlm]ehdatW{yS{oc=1.`[lkwdlgnbyo{inl\p|vb5;&hSx}j_doaaabblVxnk0>#c^uq[ctby4;'oR{|e^flqqYu{}7: nQznegqbiipWee|1="l_icp[jpbzofd{0>#c^rqaiiflVfjxh`ly<2/gZbh}}U|eizg=24/gZktofdTzlb21-a\vaYcmy~c18?=,b]fvwiuW`dainzfoo]w}uc:8%iTdl}Puoffvcjh4:'oRfns^coijusWog`0?#c^jbwZtt|4;'oRjnt`]`kphsW~coxe3>0-a\lduX{Ujof3?,b]vw`Ybkj7; nQlololjZekgja65)eXlfS}{_wco95*dWakxSio{a^alqkr:8%iT|ah_gwohZrozlycSckhaug\rdj:99;= nQxr^fftqn:998? nQrne\ahvsqV~c~h}g_ogdeqcX~hf69!mPpsmd[`kw|pUdk|h^cpw`tsWkg19"l_icp[sgkam7; nQrne\bpjkW}byi~fParqfvqYqie7:<<9#cnoskkci|Vdjah3iigm\|ihW<;9t>8P2bnh[4>sg:<'oRxnlhf\hjq:8%iT|gb_gkekZr~xl7:gu?7,b]svjaXn|fgSywe<3/gZkbefxrSywe<3/y60oiblihog{espg?lhmmj~xndzjrs58mkrXkea37cilbtko`==h~lxm`byn;qplcZcjx}s:86~}of]fiur~W}byi~f'0(37?uthoVof|ywPtipfwm.6!8>0|ah_dosp|Ys`{oxd%<&159svjaXmdzuRzgrdqk,6/6<2zycjQjmqvz[qnumzb#8$?;;qplcZcjx}sTxe|jsi*6-42vugnUna}zv_ujqavn/0 ;=7}|`g^gntqX|axne27:1<2f>vugnUna}zv_ujqavnXizyn~y&?)0`8twi`Wlg{xtQ{hsgplZgt{lx$<'>b:rqkbYbey~rSyf}erj\evubz}"9%vugnUna}zv_ujqavnXizyn~y&7)0f8twi`Wlg{xtQ{hsgplZgt{lx054?>0`8twi`Wlg{xtQ{hsgplZhboh~n$='>b:rqkbYbey~rSyf}erj\j`af|l":%vugnUna}zv_ujqavnXflmjxh&8)0`8twi`Wlg{xtQ{hsgplZhboh~n$5'>d:rqkbYbey~rSyf}erj\j`af|l636=06;qplcZ`rde;87}|`g^dvhiYs`{oxd%>&129svjaXn|fgSyf}erj+5,743yxdkRhzlm]wlwct`!8"=>5rne\bpjkW}byi~f'3(30?uthoVl~`aQ{hsgpl-2.9:1{~biPftno[qnumzb#9$?<;qplcZ`rdeUdk|h)4*56=wzfmTjxbc_ujqavn/? ;87}|`g^dvhiYs`{oxd%6&129svjaXn|fgSyf}erj+=,723yxdkRhzlm]wlwct`531<3?n;qplcZ`rdeUdk|h^cpw`ts 9#:m6~}of]eqijX|axneQnsrgqp-7.9h1{~biPftno[qnumzbTm~}jru*1-4ga:rqkbYa}efTxe|jsi]bwvcu|!?"=l5rne\bpjkW}byi~fParqfvq.1!8k0|ah_gwohZrozlycSl}|esv+3,7f3yxdkRhzlm]wlwct`Vkxh|{(9+2e>vugnUmyabPtipfwmYf{zoyx%7&1b9svjaXn|fgSyf}erj\evubz}626=0>a:rqkbYa}efTxe|jsi]mabgsm!:"=l5rne\bpjkW}byi~fPndebp`.6!8k0|ah_gwohZrozlycSckhaug+6,7f3yxdkRhzlm]wlwct`Vdnklzj(2+2e>vugnUmyabPtipfwmYimnki%:&1`9svjaXn|fgSyf}erj\j`af|l">% ;j7}|`g^dvhiYs`{oxdR`jg`vf,2/6i2zycjQiumn\pmtb{aUeijo{e):*5d=wzfmTjxbc_ujqavnXflmjxh&6)0a8twi`Wog`Rzgrdqk[kc`i}o757>16:pg[fjl991yhRjnt`]`kphs 9#:<6|k_ecweZeh}g~#=$??;sf\`drfWje~by&=)028vaYci}kTob{at)1*55=ulVnjxlQlotlw,1/682xoSio{a^alqkr/= ;;7jPd`vb[firf}"=%<>4re]geqgXkfex%9&119q`Zbf|hUhcx`{(9+24>tcWmkmRm`uov?4;753{nThlzn_bmvjq:?294>7jPeo48vaYu{}90~~z8;r`jp`tu<2yyy:4tswf=>sillxm`by:;wcoma0<{Ujof84ws]`hn773~xThlzn_bmvjq.7!8:0{Qkauc\gjsi|!;"==5xr^fbpdYdg|d$?'>0:uq[agsiVidycz'3(33?rtXlh~jSnaznu*7-46<{UomyoPcnwmp-3.991|~Rjnt`]`kphs ?#:<6y}_ecweZeh}g~#;$??;vp\`drfWje~by&7)028swYci}kTob{at);*57=pzVnjxlQlotlw8<<76<1|~Rka6:uq[wusuIJ{oi64@Az2>C<328qX8k4:048;>455j?ih6:69czl7<1<63g>39784$5:1>11d3tY?h7;?5;:9564e>ji1;58l;R31g?3683:1=>o68??:18277d1kj0<4;j4d42;>5<628qX8k4:048;>455j?ih6:69c:tW5=e=83;1=7?l0zQ7b?37=321=><97?=d:T7<6<5s|;8:7?4u014>5=z,82;6<74b42;>5<4n391?kuG4618^13=:r;36=831b9;?50;9l0a?=83.:4?4;fb9m5=7=821d8i650;&2<7<3nj1e=5?51:9l0a1=83.:4?4;fb9m5=7=:21d8i850;&2<7<3nj1e=5?53:9l0a3=83.:4?4;fb9m5=7=<21d8i:50;&2<7<3nj1e=5?55:9l0a4=83.:4?4;fb9m5=7=>21d8i?50;&2<7<3nj1e=5?57:9l0a6=83.:4?4;fb9m5=7=021d8nh50;&2<7<3nj1e=5?59:9l0fc=83.:4?4;fb9m5=7=i21d8nj50;&2<7<3nj1e=5?5b:9l0fe=83.:4?4;fb9m5=7=k21d8nl50;&2<7<3nj1e=5?5d:9l0fg=83.:4?4;fb9m5=7=m21d8n750;&2<7<3nj1e=5?5f:9l0f1=83.:4?4;fb9m5=7=9910c9m9:18'5=4=:038?j2d=3:1(<6=:5d`?k7?93;976a;c583>!7?:3>mo6`>80827>=h8387bf=i91;1=954o5a1>5<#91818km4n0:2>43<3f>h=7>5$0:1>1`d3g;3=7?9;:m7g5<72-;3>7:ic:l2<4<6?21d8oh50;&2<7<3nj1e=5?51998k1db290/=5<54ga8j4>628307b:kf;29 4>52=lh7c?71;3b?>i3ll0;6)?72;6eg>h6080:n65`4ef94?"60;0?jn5a19395f=f:9l0a5=83.:4?4;fb9m5=7=:910c9m7:18'5=4=:338?j2el3:1(<6=:5d`?k7?938976a;bb83>!7?:3>mo6`>80817>=n8387f4=i91;1<65f48d94?"60;0?n<5a19395>=n<0o1<7*>8387f4=i91;1>65f48f94?"60;0?n<5a19397>=n<0i1<7*>8387f4=i91;1865f48`94?"60;0?n<5a19391>=n<0k1<7*>8387f4=i91;1:65f48;94?"60;0?n<5a19393>=n8387f4=i91;1465f4`594?"60;0?n<5a1939=>=n8387f4=i91;1m65f4`794?"60;0?n<5a1939f>=n1<7*>8387f4=i91;1o65f4`194?"60;0?n<5a1939`>=n8387f4=i91;1i65f4`394?"60;0?n<5a1939b>=n<021<7*>8387f4=i91;1==54i5;4>5<#91818o?4n0:2>47<3`?>?7>5;c640?6=93:1>0c<9i:188ygb?290:6=4?{I647>"6180o46ak7;29?xd3<3:1m;4>8582g5}O<>90V9;517y1=?4?2;k1h7o5b;a95=<6938i6h4k:d827g=:10v(<7>:42a?!2?2<:27):j:42b?!70j3;!7?:3?9:6`>8083?>o2:=0;6)?72;712>h6080:76g:2283>!7?:3?9:6`>8081?>o2:;0;6)?72;712>h6080876g:2083>!7?:3?9:6`>8087?>o2:90;6)?72;712>h6080>76g:1g83>!7?:3?9:6`>8085?>o29l0;6)?72;712>h6080<76g:1e83>!7?:3?9:6`>808;?>o28l0;66g:6183>>o2>:0;66a:6783>>o29k0;6)?72;72g>h6080;76g:1`83>!7?:3?:o6`>8082?>o2900;6)?72;72g>h6080976g:1983>!7?:3?:o6`>8080?>o29>0;6)?72;72g>h6080?76g:1783>!7?:3?:o6`>8086?>o29<0;6)?72;72g>h6080=76g:1583>!7?:3?:o6`>8084?>o29:0;6)?72;72g>h6080376g:5g83>>i2980;66g:2g83>!7?:3?8<6`>8083?>o2:l0;6)?72;704>h6080:76g:2e83>!7?:3?8<6`>8081?>o2:j0;6)?72;704>h6080876g:2c83>!7?:3?8<6`>8087?>o2:h0;6)?72;704>h6080>76g:2883>!7?:3?8<6`>8085?>o2:10;6)?72;704>h6080<76g:2683>!7?:3?8<6`>808;?>i30>0;66a;9583>!7?:3>296`>8083?>i31:0;6)?72;6:1>h6080:76a;9383>!7?:3>296`>8081?>i3180;6)?72;6:1>h6080876a;9183>!7?:3>296`>8087?>i30o0;6)?72;6:1>h6080>76a;8d83>!7?:3>296`>8085?>i30m0;6)?72;6:1>h6080<76a;8b83>!7?:3>296`>808;?>i30k0;6)?72;6:1>h6080276a:3083>>o2?=0;66g:3c83>!7?:3?8o6`>8083?>o2;h0;6)?72;70g>h6080:76g:3883>!7?:3?8o6`>8081?>o2;10;6)?72;70g>h6080876g:3683>!7?:3?8o6`>8087?>o2;?0;6)?72;70g>h6080>76g:3483>!7?:3?8o6`>8085?>o2;=0;6)?72;70g>h6080<76g:3283>!7?:3?8o6`>808;?>o2;;0;6)?72;70g>h6080276a:0b83>>i28?0;66g:6983>>o3000;66g:4783>!7?:3??;6`>8083?>o2<<0;6)?72;773>h6080:76g:4583>!7?:3??;6`>8081?>o2<:0;6)?72;773>h6080876g:4383>!7?:3??;6`>8087?>o2<80;6)?72;773>h6080>76g:4183>!7?:3??;6`>8085?>o2;o0;6)?72;773>h6080<76g:3d83>!7?:3??;6`>808;?>o2;m0;6)?72;773>h6080276g:5083>!7?:3?>>6`>8083?>o2=90;6)?72;766>h6080:76g:4g83>!7?:3?>>6`>8081?>o2h6080876g:4e83>!7?:3?>>6`>8087?>o2h6080>76g:4c83>!7?:3?>>6`>8085?>o2h6080<76g:4883>!7?:3?>>6`>808;?>o2<10;6)?72;766>h6080276a;8783>>o28o0;66g;8`83>>o2?<0;66a:6383>>i2>>0;66g:6083>>i3l00;6)?72;6eg>h6080;76a;d983>!7?:3>mo6`>8082?>i3l>0;6)?72;6eg>h6080976a;d783>!7?:3>mo6`>8080?>i3l<0;6)?72;6eg>h6080?76a;d583>!7?:3>mo6`>8086?>i3l;0;6)?72;6eg>h6080=76a;d083>!7?:3>mo6`>8084?>i3l90;6)?72;6eg>h6080376a;cg83>!7?:3>mo6`>808:?>i3kl0;6)?72;6eg>h6080j76a;ce83>!7?:3>mo6`>808a?>i3kj0;6)?72;6eg>h6080h76a;cc83>!7?:3>mo6`>808g?>i3kh0;6)?72;6eg>h6080n76a;c883>!7?:3>mo6`>808e?>i3k>0;6)?72;6eg>h6080:<65`4b494?"60;0?jn5a193954=6=4+19090ce4?:%3;6?2ak2d:4<4>4:9l0f4=83.:4?4;fb9m5=7=9<10c9m>:18'5=4=:048?j2d83:1(<6=:5d`?k7?93;<76a;bg83>!7?:3>mo6`>8082<>=h8387bf=i91;1=454o5fe>5<#91818km4n0:2>4g<3f>oi7>5$0:1>1`d3g;3=7?m;:m7`a<72-;3>7:ic:l2<4<6k21d8im50;&2<7<3nj1e=5?51e98k1be290/=5<54ga8j4>628o07b:ka;29 4>52=lh7c?71;3e?>i3l:0;6)?72;6eg>h60809<65`4b:94?"60;0?jn5a193964=7:m1:l2<4<632c?5h4?:%3;6?2e92d:4<4=;:k7=a<72-;3>7:m1:l2<4<432c?5n4?:%3;6?2e92d:4<4;;:k7=g<72-;3>7:m1:l2<4<232c?5l4?:%3;6?2e92d:4<49;:k7=<<72-;3>7:m1:l2<4<032c?m54?:%3;6?2e92d:4<47;:k7e2<72-;3>7:m1:l2<4<>32c?m;4?:%3;6?2e92d:4<4n;:k7e0<72-;3>7:m1:l2<47:m1:l2<47:m1:l2<40:9j0<1=83.:4?4;b09m5=7=9810e967:188k03d290/=5<554g8j4>62910c8;m:18'5=4==:098k03f290/=5<554g8j4>62;10c8;6:18'5=4==:298k03?290/=5<554g8j4>62=10c8;8:18'5=4==:498k031290/=5<554g8j4>62?10c8;::18'5=4==:698k033290/=5<554g8j4>62110c89=:18'5=4==>90b<6>:198k016290/=5<55618j4>62810c89?:18'5=4==>90b<6>:398k00a290/=5<55618j4>62:10c88j:18'5=4==>90b<6>:598k00c290/=5<55618j4>62<10c88l:18'5=4==>90b<6>:798k00e290/=5<55618j4>62>10c88n:18'5=4==>90b<6>:998k00>290/=5<55618j4>62010c8?=:188m06c2900c979:188m0342900c88::188f11a290:6=4?{%3:5?b?3A>50;394?6|,83:699;;I64a>N3?:1d=:h50;9~f7g5290?6=4?{%3:5?b43A>=6=44i4294?=n9191<75`19694?=zj=<;6=4<:183!7>93n;7E:8e:J736=O<:1/=>:55768 `0=:2c?:7>5;h73>5<908g4>N3?l1C8:=4H518 4532<<7>5;n3;0?6=3th?9k4?:283>5}#90;1h=5G46g8L1143A>87)?<4;750>"b>380e9850;9j15<722e:494?::a03?=83?1<7>t$0;2>a2<@==n7E:83:J77>"6;=0>:95f4783>>o3?3:17d;?:188m4>42900c<6;:188yg21i3:1?7>50z&2=47=n0<729q/=4?5d59K02c<@==87E:<;%300?31<2c?:7>5;h64>5<1<75rb54;>5<3290;w)?61;f0?M20m2B?;>5+e784?l212900e8>50;9j5=5=831d=5:50;9~f100290?6=4?{%3:5?b43A>=6=44i4294?=n9191<75`19694?=zj=<=6=4;:183!7>93n87E:8e:J736=#m?0<7d:9:188m06=831b=5=50;9l5=2=831vn99>:187>5<7s-;2=7j<;I64a>N3?:1/i;48;h65>5<1<75rb553>5<3290;w)?61;f0?M20m2B?;>5+e784?l212900e8>50;9j5=5=831d=5:50;9~f771290?6=4?{%3:5?b63A>=6=44i5a94?=n=90;66a>8583>>{e:8?1<7:50;2x 4?62m;0D99j;I647>"b>380e9850;9j0f<722c><7>5;n3;0?6=3th9=94?:583>5}#90;1h<5G46g8L1143-o=6?5f4783>>o3k3:17d;?:188k4>32900qo<>3;290?6=8r.:5<4k1:J73`=O<>90(h852:k72?6=3`>h6=44i4294?=h91>1<75rb331>5<3290;w)?61;f2?M20m2B?;>5+e781?l212900e9m50;9j15<722e:494?::a647=83>1<7>t$0;2>a7<@==n7E:83:&f2?4>o283:17b?74;29?xd5990;694?:1y'5<7=l81C8:k4H550?!c12;1b8;4?::k7g?6=3`?;6=44o0:7>5<54;294~"6180o=6F;7d9K025<,l<1>6g;6;29?l2d2900e8>50;9l5=2=831vn?>j:187>5<7s-;2=7j>;I64a>N3?:1/i;4=;h65>5<>i60=0;66sm1c694?2=83:p(<7>:e38L11b3A>5;|`2f6<72=0;6=u+1839`4=O<>o0D99<;%g5>7=n50z&2=45;h6`>5<93n:7E:8e:J736=#m?097d:9:188m1e=831b9=4?::m2<1<722wi=o>50;694?6|,83:6i?4H55f?M20;2.n:7<4i5494?=nag83>1<729q/=4?5d09K02c<@==87)k9:39j03<722c?o7>5;h73>5<908g5>N3?l1C8:=4$d496>o3>3:17d:l:188m06=831d=5:50;9~f4gc290?6=4?{%3:5?b63A>=6=44i5a94?=n=90;66a>8583>>{e9hi1<7:50;2x 4?62m;0D99j;I647>"b>380e9850;9j0f<722c><7>5;n3;0?6=3th9:?4?:583>5}#90;1h<5G46g8L1143-o=6?5f4783>>o3k3:17d;?:188k4>32900qo<91;290?6=8r.:5<4k1:J73`=O<>90(h852:k72?6=3`>h6=44i4294?=h91>1<75rb343>5<3290;w)?61;f2?M20m2B?;>5+e781?l212900e9m50;9j15<722e:494?::a60`=83>1<7>t$0;2>a7<@==n7E:83:&f2?4>o283:17b?74;29?xd5=l0;694?:1y'5<7=l81C8:k4H550?!c12;1b8;4?::k7g?6=3`?;6=44o0:7>5<h7>54;294~"6180o=6F;7d9K025<,l<1>6g;6;29?l2d2900e8>50;9l5=2=831vn?;l:187>5<7s-;2=7j>;I64a>N3?:1/i;4=;h65>5<>i60=0;66sm24`94?2=83:p(<7>:e38L11b3A>5;|`11d<72=0;6=u+1839`4=O<>o0D99<;%g5>7=n50z&2=45;h6`>5<93n:7E:8e:J736=#m?097d:9:188m1e=831b9=4?::m2<1<722wi=ko50;694?6|,83:6i?4H55f?M20;2.n:7<4i5494?=nf883>1<729q/=4?5d09K02c<@==87)k9:39j03<722c?o7>5;h73>5<908g5>N3?l1C8:=4$d496>o3>3:17d:l:188m06=831d=5:50;9~f4`0290?6=4?{%3:5?b63A>=6=44i5a94?=n=90;66a>8583>>{e9o<1<7:50;2x 4?62m;0D99j;I647>"b>380e9850;9j0f<722c><7>5;n3;0?6=3th:j84?:583>5}#90;1h<5G46g8L1143-o=6?5f4783>>o3k3:17d;?:188k4>32900qo?i4;290?6=8r.:5<4k1:J73`=O<>90(h852:k72?6=3`>h6=44i4294?=h91>1<75rb373>5<3290;w)?61;f2?M20m2B?;>5G429'562==?>0(h852:k72?6=3`>h6=44i4294?=h91>1<75rb36e>5<3290;w)?61;f2?M20m2B?;>5G429'562==?>0(h852:k72?6=3`>h6=44i4294?=h91>1<75rb36f>5<3290;w)?61;f2?M20m2B?;>5G429'562==?>0(h852:k72?6=3`>h6=44i4294?=h91>1<75rb36g>5<3290;w)?61;f2?M20m2B?;>5G429'562==?>0(h852:k72?6=3`>h6=44i4294?=h91>1<75rb36`>5<3290;w)?61;f2?M20m2B?;>5G429'562==?>0(h852:k72?6=3`>h6=44i4294?=h91>1<75rb36a>5<3290;w)?61;f2?M20m2B?;>5G429'562==?>0(h852:k72?6=3`>h6=44i4294?=h91>1<75rb36b>5<3290;w)?61;f2?M20m2B?;>5G429'562==?>0(h852:k72?6=3`>h6=44i4294?=h91>1<75rb36:>5<3290;w)?61;f2?M20m2B?;>5G429'562==?>0(h852:k72?6=3`>h6=44i4294?=h91>1<75rb36;>5<3290;w)?61;f2?M20m2B?;>5G429'562==?>0(h852:k72?6=3`>h6=44i4294?=h91>1<75rb364>5<3290;w)?61;f2?M20m2B?;>5G429'562==?>0(h852:k72?6=3`>h6=44i4294?=h91>1<75rb0gb>5<3290;w)?61;f2?M20m2B?;>5G429'562==?>0(h852:k72?6=3`>h6=44i4294?=h91>1<75rb0g:>5<3290;w)?61;f2?M20m2B?;>5G429'562==?>0(h852:k72?6=3`>h6=44i4294?=h91>1<75rb0g;>5<3290;w)?61;f2?M20m2B?;>5G429'562==?>0(h852:k72?6=3`>h6=44i4294?=h91>1<75rb0g4>5<3290;w)?61;f2?M20m2B?;>5G429'562==?>0(h852:k72?6=3`>h6=44i4294?=h91>1<75rb0g5>5<3290;w)?61;f2?M20m2B?;>5G429'562==?>0(h852:k72?6=3`>h6=44i4294?=h91>1<75rb0g6>5<3290;w)?61;f2?M20m2B?;>5G429'562==?>0(h852:k72?6=3`>h6=44i4294?=h91>1<75rb0g7>5<3290;w)?61;f2?M20m2B?;>5G429'562==?>0(h852:k72?6=3`>h6=44i4294?=h91>1<75rb0g0>5<3290;w)?61;f2?M20m2B?;>5G429'562==?>0(h852:k72?6=3`>h6=44i4294?=h91>1<75rb0g1>5<3290;w)?61;f2?M20m2B?;>5G429'562==?>0(h852:k72?6=3`>h6=44i4294?=h91>1<75rb0f;>5<3290;w)?61;f2?M20m2B?;>5+e781?l212900e9m50;9j15<722e:494?::a5a1=83>1<7>t$0;2>a7<@==n7E:83:&f2?4>o283:17b?74;29?xd6l?0;694?:1y'5<7=l81C8:k4H550?!c12;1b8;4?::k7g?6=3`?;6=44o0:7>5<54;294~"6180o=6F;7d9K025<,l<1>6g;6;29?l2d2900e8>50;9l5=2=831vn5<7s-;2=7j>;I64a>N3?:1/i;4=;h65>5<>i60=0;66sm1e194?2=83:p(<7>:e38L11b3A>5;|`2`7<72=0;6=u+1839`4=O<>o0D99<;%g5>7=n50z&2=45;h6`>5<93n:7E:8e:J736=#m?097d:9:188m1e=831b9=4?::m2<1<722wi>>m50;694?6|,83:6i?4H55f?M20;2.n:7<4i5494?=n1<729q/=4?5d09K02c<@==87)k9:39j03<722c?o7>5;h73>5<908g5>N3?l1C8:=4$d496>o3>3:17d:l:188m06=831d=5:50;9~f75>290?6=4?{%3:5?b63A>=6=44i5a94?=n=90;66a>8583>>{e::21<7:50;2x 4?62m;0D99j;I647>"b>380e9850;9j0f<722c><7>5;n3;0?6=3th9?:4?:583>5}#90;1h<5G46g8L1143-o=6?5f4783>>o3k3:17d;?:188k4>32900qo<<6;290?6=8r.:5<4k1:J73`=O<>90(h852:k72?6=3`>h6=44i4294?=h91>1<75rb316>5<3290;w)?61;f2?M20m2B?;>5+e781?l212900e9m50;9j15<722e:494?::a662=83>1<7>t$0;2>a7<@==n7E:83:&f2?4>o283:17b?74;29?xd5;:0;694?:1y'5<7=l81C8:k4H550?!c12;1b8;4?::k7g?6=3`?;6=44o0:7>5<55;294~"6180o>6F;7d9K025<,l<1>6g;6;29?l202900e9m50;9j15<722e:494?::a6a>=83?1<7>t$0;2>a4<@==n7E:83:&f2?4>o3k3:17d;?:188k4>32900qo90(h852:k72?6=3`><6=44i5a94?=n=90;66a>8583>>{e:m<1<7;50;2x 4?62m80D99j;I647>"b>380e9850;9j02<722c?o7>5;h73>5<908g6>N3?l1C8:=4$d496>o3>3:17d:8:188m1e=831b9=4?::m2<1<722wi>i:50;794?6|,83:6i<4H55f?M20;2.n:7<4i5494?=n<>0;66g;c;29?l372900c<6;:188yg4c:3:197>50z&2=45;h64>5<>i60=0;66sm2e394?3=83:p(<7>:e68L11b3A>5;n3;0?6=3th9h>4?:483>5}#90;1h?5G46g8L1143-o=6?5f4783>>o3?3:17d:l:188m06=831d=5:50;9~f7e129086=4?{%3:5?20l2B?;h5G4618m1?=831b=?o50;9l52b=831vn?m::180>5<7s-;2=7:8d:J73`=O<>90e9750;9j57g=831d=:j50;9~f7dd290?6=4?{%3:5?74=2B?;h5G4618m1?=831b9?4?::k2t$0;2>11c3A>l4?::m23a<722wi>oo50;694?6|,83:6<=:;I64a>N3?:1b844?::k66?6=3`;3m7>5;n34`?6=3th9o>4?:283>5}#90;18:j4H55f?M20;2c?57>5;h31e?6=3f;5;|`1f=<72=0;6=u+1839563<@==n7E:83:k7=?6=3`?96=44i0:b>5<90873a=O<>o0D99<;h6:>5<5<54;294~"6180:?85G46g8L1143`>26=44i4094?=n91k1<75`16f94?=zj;i:6=4<:183!7>93>n1<75rb3`7>5<3290;w)?61;301>N3?l1C8:=4i5;94?=n=;0;66g>8`83>>i6?m0;66sm2b294?5=83:p(<7>:55g?M20m2B?;>5f4883>>o6:h0;66a>7e83>>{e:k81<7:50;2x 4?6289>7E:8e:J736=n<00;66g:2;29?l7?i3:17b?8d;29?xd5jo0;6>4?:1y'5<7=<>n0D99j;I647>o313:17d?=a;29?j70l3:17pl=b183>1<729q/=4?51278L11b3A>50z&2=4<6;<1C8:k4H550?l2>2900e8<50;9j5=g=831d=:j50;9~f7ce290>6=4?{%3:5?b53A>=6=44i5594?=n0<729q/=4?5d39K02c<@==87)k9:39j03<722c?;7>5;h6`>5<93n97E:8e:J736=#m?097d:9:188m11=831b8n4?::k64?6=3f;387>5;|`1a=<72<0;6=u+1839`7=O<>o0D99<;%g5>7=n50;9l5=2=831vn?k8:186>5<7s-;2=7j=;I64a>N3?:1/i;4=;h65>5<>o283:17b?74;29?xd5m?0;684?:1y'5<7=l;1C8:k4H550?!c12;1b8;4?::k73?6=3`>h6=44i4294?=h91>1<75rb3g6>5<2290;w)?61;f1?M20m2B?;>5+e781?l212900e9950;9j0f<722c><7>5;n3;0?6=3th9i94?:483>5}#90;1h?5G46g8L1143-o=6?5f4783>>o3?3:17d:l:188m06=831d=5:50;9~f7c4290>6=4?{%3:5?b53A>=6=44i5594?=n1<729q/=4?5d29K02c<@==87)k9:69j03<722c><7>5;h3;7?6=3f;387>5;|`132<72=0;6=u+1839`6=O<>o0D99<;%g5>2=n5<54;294~"6180o=6F;7d9K025<,l<1>6g;6;29?l2d2900e8>50;9l5=2=831vn>>=:180>5<7s-;2=7:8d:J73`=O<>90e9750;9j57g=831d=:j50;9~f66e29086=4?{%3:5?20l2B?;h5G4618m1?=831b=?o50;9l52b=831vn?h9:187>5<7s-;2=7?<5:J73`=O<>90e9750;9j17<722c:4l4?::m23a<722wi?=o50;194?6|,83:699k;I64a>N3?:1b844?::k26d<722e:;i4?::a6c3=83>1<7>t$0;2>4523A>>7>5;h3;e?6=3f;5;|`04<<72:0;6=u+183902b<@==n7E:83:k7=?6=3`;9m7>5;n34`?6=3th9j94?:583>5}#90;1=>;4H55f?M20;2c?57>5;h71>5<5<53;294~"6180?;i5G46g8L1143`>26=44i00b>5<908270=O<>o0D99<;h6:>5<n1<75rb224>5<4290;w)?61;64`>N3?l1C8:=4i5;94?=n9;k1<75`16f94?=zj;l96=4;:183!7>93;896F;7d9K025>o60h0;66a>7e83>>{e;9<1<7=50;2x 4?62==o7E:8e:J736=n<00;66g>2`83>>i6?m0;66sm2g394?2=83:p(<7>:016?M20m2B?;>5f4883>>o2:3:17d?7a;29?j70l3:17pl<0483>6<729q/=4?546f8L11b3A>o313:17d;=:188m4>f2900c<9k:188yg57<3:1?7>50z&2=4<3?m1C8:k4H550?l2>2900e<349K02c<@==87d:6:188m04=831b=5o50;9l52b=831vn>><:180>5<7s-;2=7:8d:J73`=O<>90e9750;9j57g=831d=:j50;9~f7cb290?6=4?{%3:5?74=2B?;h5G4618m1?=831b9?4?::k21<7>t$0;2>4523A>>7>5;h3;e?6=3f;5;|`052<72=0;6=u+1839`4=O<>o0D99<;%g5>7=n50z&2=45;h6`>5<93n:7E:8e:J736=#m?097d:9:188m1e=831b9=4?::m2<1<722wi?1<729q/=4?5d09K02c<@==87)k9:39j03<722c?o7>5;h73>5<908g5>N3?l1C8:=4$d496>o3>3:17d:l:188m06=831d=5:50;9~f67f290?6=4?{%3:5?b63A>=6=44i5a94?=n=90;66a>8583>>{e;831<7:50;2x 4?62m;0D99j;I647>"b>380e9850;9j0f<722c><7>5;n3;0?6=3th8=54?:583>5}#90;1h<5G46g8L1143-o=6?5f4783>>o3k3:17d;?:188k4>32900qo=>6;290?6=8r.:5<4k1:J73`=O<>90(h852:k72?6=3`>h6=44i4294?=h91>1<75rb20b>5<2290;w)?61;f1?M20m2B?;>5+e781?l212900e9950;9j0f<722c><7>5;n3;0?6=3th9584?:583>5}#90;1=>;4H55f?M20;2c?57>5;h71>5<5<54;294~"6180:?85G46g8L1143`>26=44i4094?=n91k1<75`16f94?=zj;386=4;:183!7>93;896F;7d9K025>o60h0;66a>7e83>>{e:081<7:50;2x 4?6289>7E:8e:J736=n<00;66g:2;29?l7?i3:17b?8d;29?xd5180;694?:1y'5<7=9:?0D99j;I647>o313:17d;=:188m4>f2900c<9k:188yg4?:3:187>50z&2=4<6;<1C8:k4H550?l2>2900e8<50;9j5=g=831d=:j50;9~f7>6290?6=4?{%3:5?74=2B?;h5G4618m1?=831b9?4?::k21<7>t$0;2>4523A>>7>5;h3;e?6=3f;5;|`13c<72=0;6=u+1839563<@==n7E:83:k7=?6=3`?96=44i0:b>5<908270=O<>o0D99<;h6:>5<n1<75rb2`g>5<2290;w)?61;f1?M20m2B?;>5+e781?l212900e9950;9j0f<722c><7>5;n3;0?6=3th8no4?:483>5}#90;1h?5G46g8L1143-o=6?5f4783>>o3?3:17d:l:188m06=831d=5:50;9~f6dd290>6=4?{%3:5?b33A>=6=44i5594?=n=90;66g>8283>>i60=0;66sm3cg94?3=83:p(<7>:e08L11b3A>5<55;294~"6180o>6F;7d9K025<,l<1>6g;6;29?l202900e9m50;9j15<722e:494?::a7f4=83?1<7>t$0;2>a4<@==n7E:83:&f2?4>o3k3:17d;?:188k4>32900qo=l0;291?6=8r.:5<4k2:J73`=O<>90(h852:k72?6=3`><6=44i5a94?=n=90;66a>8583>>{e;j;1<7;50;2x 4?62m80D99j;I647>"b>380e9850;9j02<722c?o7>5;h73>5<908g6>N3?l1C8:=4$d496>o3>3:17d:8:188m1e=831b9=4?::m2<1<722wi?n:50;794?6|,83:6i<4H55f?M20;2.n:7<4i5494?=n<>0;66g;c;29?l372900c<6;:188yg5c93:197>50z&2=45;h64>5<>i60=0;66sm3bd94?3=83:p(<7>:e68L11b3A>5;n3;0?6=3th8h=4?:483>5}#90;1h?5G46g8L1143-o=6?5f4783>>o3?3:17d:l:188m06=831d=5:50;9~f6b5290>6=4?{%3:5?b53A>=6=44i5594?=n0<729q/=4?5d39K02c<@==87)k9:39j03<722c?;7>5;h6`>5<93n97E:8e:J736=#m?097d:9:188m11=831b8n4?::k64?6=3f;387>5;|`0`1<72<0;6=u+1839`7=O<>o0D99<;%g5>7=n50;9l5=2=831vn>j::186>5<7s-;2=7j=;I64a>N3?:1/i;4=;h65>5<>o283:17b?74;29?xd4l>0;684?:1y'5<7=l;1C8:k4H550?!c12;1b8;4?::k73?6=3`>h6=44i4294?=h91>1<75rb2f;>5<2290;w)?61;f1?M20m2B?;>5+e781?l212900e9950;9j0f<722c><7>5;n3;0?6=3th8mk4?:483>5}#90;1h?5G46g8L1143-o=6?5f4783>>o3?3:17d:l:188m06=831d=5:50;9~f6gb290>6=4?{%3:5?b53A>=6=44i5594?=n0<729q/=4?5d39K02c<@==87)k9:39j03<722c?;7>5;h6`>5<93n97E:8e:J736=#m?097d:9:188m11=831b8n4?::k64?6=3f;387>5;|`0eg<72<0;6=u+1839`7=O<>o0D99<;%g5>7=n50;9l5=2=831vn>ok:186>5<7s-;2=7j=;I64a>N3?:1/i;4=;h65>5<>o283:17b?74;29?xd4i00;684?:1y'5<7=l;1C8:k4H550?!c12;1b8;4?::k73?6=3`>h6=44i4294?=h91>1<75rb2c;>5<2290;w)?61;f7?M20m2B?;>5+e784?l212900e9950;9j15<722c:4>4?::m2<1<722wi?lo50;794?6|,83:6i<4H55f?M20;2.n:7<4i5494?=n<>0;66g;c;29?l372900c<6;:188yg5f?3:197>50z&2=45;h64>5<1<75rb2;a>5<4290;w)?61;64`>N3?l1C8:=4i5;94?=n9;k1<75`16f94?=zj:3j6=4<:183!7>93>n1<75rb2;3>5<3290;w)?61;301>N3?l1C8:=4i5;94?=n=;0;66g>8`83>>i6?m0;66sm38;94?5=83:p(<7>:55g?M20m2B?;>5f4883>>o6:h0;66a>7e83>>{e;1o1<7:50;2x 4?6289>7E:8e:J736=n<00;66g:2;29?l7?i3:17b?8d;29?xd4110;6>4?:1y'5<7=<>n0D99j;I647>o313:17d?=a;29?j70l3:17pl<8b83>1<729q/=4?51278L11b3A>50z&2=4<6;<1C8:k4H550?l2>2900e8<50;9j5=g=831d=:j50;9~f6?129086=4?{%3:5?20l2B?;h5G4618m1?=831b=?o50;9l52b=831vn>67:187>5<7s-;2=7?<5:J73`=O<>90e9750;9j17<722c:4l4?::m23a<722wi?4;50;194?6|,83:699k;I64a>N3?:1b844?::k26d<722e:;i4?::a7=0=83>1<7>t$0;2>4523A>>7>5;h3;e?6=3f;5;|`0=1<72:0;6=u+183902b<@==n7E:83:k7=?6=3`;9m7>5;n34`?6=3th8494?:583>5}#90;1=>;4H55f?M20;2c?57>5;h71>5<5<53;294~"6180?;i5G46g8L1143`>26=44i00b>5<908270=O<>o0D99<;h6:>5<n1<75rb2;1>5<4290;w)?61;64`>N3?l1C8:=4i5;94?=n9;k1<75`16f94?=zj:2;6=4;:183!7>93;896F;7d9K025>o60h0;66a>7e83>>{e;li1<7;50;2x 4?62m80D99j;I647>"b>380e9850;9j02<722c?o7>5;h73>5<908g6>N3?l1C8:=4$d496>o3>3:17d:8:188m1e=831b9=4?::m2<1<722wi?ho50;794?6|,83:6i<4H55f?M20;2.n:7<4i5494?=n<>0;66g;c;29?l372900c<6;:188yg5b13:197>50z&2=45;h64>5<>i60=0;66sm3d:94?3=83:p(<7>:e08L11b3A>5<55;294~"6180o>6F;7d9K025<,l<1>6g;6;29?l202900e9m50;9j15<722e:494?::a7`0=83?1<7>t$0;2>a4<@==n7E:83:&f2?4>o3k3:17d;?:188k4>32900qo=j5;291?6=8r.:5<4k2:J73`=O<>90(h852:k72?6=3`><6=44i5a94?=n=90;66a>8583>>{e;l>1<7;50;2x 4?62m80D99j;I647>"b>380e9850;9j02<722c?o7>5;h73>5<908g6>N3?l1C8:=4$d496>o3>3:17d:8:188m1e=831b9=4?::m2<1<722wi?>:50;694?6|,83:6<=:;I64a>N3?:1b844?::k66?6=3`;3m7>5;n34`?6=3th8?84?:583>5}#90;1=>;4H55f?M20;2c?57>5;h71>5<5<54;294~"6180:?85G46g8L1143`>26=44i4094?=n91k1<75`16f94?=zj:9<6=4;:183!7>93;896F;7d9K025>o60h0;66a>7e83>>{e;:21<7:50;2x 4?6289>7E:8e:J736=n<00;66g:2;29?l7?i3:17b?8d;29?xd4<>0;694?:1y'5<7=9:?0D99j;I647>o313:17d;=:188m4>f2900c<9k:188yg5303:187>50z&2=4<6;<1C8:k4H550?l2>2900e8<50;9j5=g=831d=:j50;9~f62>290?6=4?{%3:5?74=2B?;h5G4618m1?=831b9?4?::k21<7>t$0;2>4523A>>7>5;h3;e?6=3f;5;|`00g<72=0;6=u+1839563<@==n7E:83:k7=?6=3`?96=44i0:b>5<908270=O<>o0D99<;h6:>5<n1<75rb27f>5<3290;w)?61;301>N3?l1C8:=4i5;94?=n=;0;66g>8`83>>i6?m0;66sm34d94?2=83:p(<7>:016?M20m2B?;>5f4883>>o2:3:17d?7a;29?j70l3:17pl<6183>1<729q/=4?51278L11b3A>349K02c<@==87d:6:188m04=831b=5o50;9l52b=831vn>9?:187>5<7s-;2=7j>;I64a>N3?:1/i;4=;h65>5<>i60=0;66sm36394?2=83:p(<7>:e38L11b3A>5;|`02f<72<0;6=u+1839`7=O<>o0D99<;%g5>7=n50;9l5=2=831vn95<7s-;2=7j:;I64a>N3?:1/i;4=;h65>5<>o60<0;66a>8583>>{e<;o1<7;50;2x 4?62m?0D99j;I647>"b>380e9850;9j02<722c><7>5;h3;1?6=3f;387>5;|`76a<72<0;6=u+1839`0=O<>o0D99<;%g5>7=n32900qo:=c;291?6=8r.:5<4k5:J73`=O<>90(h852:k72?6=3`><6=44i4294?=n91?1<75`19694?=zj=8i6=4::183!7>93n>7E:8e:J736=#m?097d:9:188m11=831b9=4?::k2<0<722e:494?::a07g=83?1<7>t$0;2>a3<@==n7E:83:&f2?4>o283:17d?75;29?j7?<3:17pl;2983>0<729q/=4?5d49K02c<@==87)k9:39j03<722c?;7>5;h73>5<6=44o0:7>5<9;7>55;294~"6180o96F;7d9K025<,l<1>6g;6;29?l202900e8>50;9j5=3=831d=5:50;9~f141290>6=4?{%3:5?b23A>=6=44i5594?=n=90;66g>8483>>i60=0;66sm43794?3=83:p(<7>:e78L11b3A>5;n3;0?6=3th?>94?:483>5}#90;1h85G46g8L1143-o=6?5f4783>>o3?3:17d;?:188m4>22900c<6;:188yg25;3:197>50z&2=45;h64>5<1<75rb501>5<2290;w)?61;f6?M20m2B?;>5+e781?l212900e9950;9j15<722c:484?::m2<1<722wi8??50;794?6|,83:6i;4H55f?M20;2.n:7<4i5494?=n<>0;66g:0;29?l7?=3:17b?74;29?xd3:90;684?:1y'5<7=l<1C8:k4H550?!c12;1b8;4?::k73?6=3`?;6=44i0:6>5<908g1>N3?l1C8:=4$d496>o3>3:17d:8:188m06=831b=5;50;9l5=2=831vn9?k:186>5<7s-;2=7j:;I64a>N3?:1/i;4=;h65>5<>o60<0;66a>8583>>{e<8i1<7;50;2x 4?62m?0D99j;I647>"b>380e9850;9j02<722c><7>5;h3;1?6=3f;387>5;|`75g<72<0;6=u+1839`0=O<>o0D99<;%g5>7=n32900qo:>a;291?6=8r.:5<4k5:J73`=O<>90(h852:k72?6=3`><6=44i4294?=n91?1<75`19694?=zj=;26=4::183!7>93n>7E:8e:J736=#m?097d:9:188m11=831b9=4?::k2<0<722e:494?::a04>=83?1<7>t$0;2>a3<@==n7E:83:&f2?4>o283:17d?75;29?j7?<3:17pl;1683>0<729q/=4?5d49K02c<@==87)k9:39j03<722c?;7>5;h73>5<6=44o0:7>5<::7>55;294~"6180o96F;7d9K025<,l<1>6g;6;29?l202900e8>50;9j5=3=831d=5:50;9~f172290>6=4?{%3:5?b23A>=6=44i5594?=n=90;66g>8483>>i60=0;66sm40694?3=83:p(<7>:e78L11b3A>5;n3;0?6=3th??84?:483>5}#90;1h85G46g8L1143-o=6?5f4783>>o3?3:17d;?:188m4>22900c<6;:188yg24<3:197>50z&2=45;h64>5<1<75rb510>5<2290;w)?61;f6?M20m2B?;>5+e781?l212900e9950;9j15<722c:484?::m2<1<722wi8><50;794?6|,83:6i;4H55f?M20;2.n:7<4i5494?=n<>0;66g:0;29?l7?=3:17b?74;29?xd3;80;684?:1y'5<7=l<1C8:k4H550?!c12;1b8;4?::k73?6=3`?;6=44i0:6>5<908g1>N3?l1C8:=4$d496>o3>3:17d:8:188m06=831b=5;50;9l5=2=831vn9<6:186>5<7s-;2=7j:;I64a>N3?:1/i;4=;h65>5<>o60<0;66a>8583>>{e<8o1<7;50;2x 4?62m?0D99j;I647>"b>380e9850;9j02<722c><7>5;h3;1?6=3f;387>5;|`756<72<0;6=u+1839`0=O<>o0D99<;%g5>7=n32900qo:>2;291?6=8r.:5<4k5:J73`=O<>90(h852:k72?6=3`><6=44i4294?=n91?1<75`19694?=zj=93;9j6F;7d9K025<,l<1=l5fd`83>>ocj3:17b?8d;29?xd3>;0;6>4?:1y'5<7=9;l0D99j;I647>"b>3;j7djn:188mad=831d=:j50;9~f77?29086=4?{%3:5?75n2B?;h5G4618 `0=9l1bhl4?::kgf?6=3f;5;|`2f3<72:0;6=u+183957`<@==n7E:83:&f2?7b3`nj6=44ie`94?=h9>n1<75rb0c1>5<4290;w)?61;31b>N3?l1C8:=4$d495`=nlh0;66gkb;29?j70l3:17pl>a083>6<729q/=4?513d8L11b3A>5<7s-;2=7?=f:J73`=O<>90(h851d9j`d<722con7>5;n34`?6=3th:5k4?:283>5}#90;1=?h4H55f?M20;2.n:7?j;hfb>5<93;9j6F;7d9K025<,l<1=h5fd`83>>ocj3:17b?8d;29?xd61m0;6>4?:1y'5<7=9;l0D99j;I647>"b>3;n7djn:188mad=831d=:j50;9~f4?d29086=4?{%3:5?75n2B?;h5G4618 `0=9l1bhl4?::kgf?6=3f;5;|`2=g<72:0;6=u+183957`<@==n7E:83:&f2?7b3`nj6=44ie`94?=h9>n1<75rb0;b>5<4290;w)?61;31b>N3?l1C8:=4$d495`=nlh0;66gkb;29?j70l3:17pl>9883>6<729q/=4?513d8L11b3A>5<7s-;2=7?=f:J73`=O<>90(h851d9j`d<722con7>5;n34`?6=3th:5:4?:283>5}#90;1=?h4H55f?M20;2.n:7?j;hfb>5<93;9j6F;7d9K025<,l<1=h5fd`83>>ocj3:17b?8d;29?xd61<0;6>4?:1y'5<7=9;l0D99j;I647>"b>3;n7djn:188mad=831d=:j50;9~f4?329086=4?{%3:5?75n2B?;h5G4618 `0=9l1bhl4?::kgf?6=3f;5;|`2=6<72:0;6=u+183957`<@==n7E:83:&f2?7b3`nj6=44ie`94?=h9>n1<75rb0;1>5<4290;w)?61;31b>N3?l1C8:=4$d495`=nlh0;66gkb;29?j70l3:17pl=7483>1<729q/=4?51228L11b3A>1<7>t$0;2>4573A>5;hfa>5<93;8<6F;7d9K025<,l<1>85fd`83>>ocj3:17djl:188k41c2900qo<83;291?6=8r.:5<4>309K02c<@==87)k9:0`8mag=831bho4?::kgg?6=3`no6=44o05g>5<55;294~"6180:?<5G46g8L1143-o=6?>4iec94?=nlk0;66gkc;29?lbc2900c<9k:188yg7ei3:197>50z&2=4<6;81C8:k4H550?!c12;:0eio50;9j`g<722coo7>5;hfg>5<908274=O<>o0D99<;%g5>74>ock3:17djk:188k41c2900qo<9d;290?6=8r.:5<4>319K02c<@==87)k9:3a8mag=831bho4?::kgg?6=3f;5;|`15`<72:0;6=u+183957`<@==n7E:83:&f2?7b3`nj6=44ie`94?=h9>n1<75rb0``>5<4290;w)?61;31b>N3?l1C8:=4$d495`=nlh0;66gkb;29?j70l3:17pl=2183>1<729q/=4?51228L11b3A>1<7>t$0;2>4573A>5;hfa>5<93;8=6F;7d9K025<,l<1>=5fd`83>>ocj3:17djl:188mab=831d=:j50;9~f4e7290>6=4?{%3:5?7492B?;h5G4618 `0=:91bhl4?::kgf?6=3`nh6=44ief94?=h9>n1<75rb57`>5<3290;w)?61;304>N3?l1C8:=4$d4914=nlh0;66gkb;29?lbd2900c<9k:188yg41k3:197>50z&2=4<6;81C8:k4H550?!c12890eio50;9j`g<722coo7>5;hfg>5<90826c=O<>o0D99<;%g5>75>i6?m0;66sm29a94?5=83:p(<7>:00e?M20m2B?;>5+e7817>oci3:17djm:188k41c2900qo=9b;291?6=8r.:5<4>309K02c<@==87)k9:368mag=831bho4?::kgg?6=3`no6=44o05g>5<97>55;294~"6180:?<5G46g8L1143-o=6?:4iec94?=nlk0;66gkc;29?lbc2900c<9k:188yg53:3:197>50z&2=4<6;81C8:k4H550?!c12;>0eio50;9j`g<722coo7>5;hfg>5<908274=O<>o0D99<;%g5>72>ock3:17djk:188k41c2900qo=:4;291?6=8r.:5<4>309K02c<@==87)k9:368mag=831bho4?::kgg?6=3`no6=44o05g>5<55;294~"6180:?<5G46g8L1143-o=6?:4iec94?=nlk0;66gkc;29?lbc2900c<9k:188yg4>m3:197>50z&2=4<6;81C8:k4H550?!c12;>0eio50;9j`g<722coo7>5;hfg>5<908274=O<>o0D99<;%g5>72>ock3:17djk:188k41c2900qo=99;291?6=8r.:5<4>309K02c<@==87)k9:368mag=831bho4?::kgg?6=3`no6=44o05g>5<?7>55;294~"6180:?<5G46g8L1143-o=6?:4iec94?=nlk0;66gkc;29?lbc2900c<9k:188yg5383:197>50z&2=4<6;81C8:k4H550?!c12;>0eio50;9j`g<722coo7>5;hfg>5<908274=O<>o0D99<;%g5>72>ock3:17djk:188k41c2900qo<7a;291?6=8r.:5<4>309K02c<@==87)k9:368mag=831bho4?::kgg?6=3`no6=44o05g>5<55;294~"6180:?<5G46g8L1143-o=6?:4iec94?=nlk0;66gkc;29?lbc2900c<9k:188yg52:3:197>50z&2=4<6;81C8:k4H550?!c12;>0eio50;9j`g<722coo7>5;hfg>5<908274=O<>o0D99<;%g5>72>ock3:17djk:188k41c2900qo<6c;291?6=8r.:5<4>309K02c<@==87)k9:368mag=831bho4?::kgg?6=3`no6=44o05g>5<55;294~"6180:?<5G46g8L1143-o=6?:4iec94?=nlk0;66gkc;29?lbc2900c<9k:188yg50;3:187>50z&2=4<6;91C8:k4H550?!c12jo0eio50;9j`g<722coo7>5;n34`?6=3th8:h4?:583>5}#90;1=>>4H55f?M20;2.n:7mj;hfb>5<>i6?m0;66sm2`694?2=83:p(<7>:013?M20m2B?;>5+e78`a>oci3:17djm:188mae=831d=:j50;9~f600290?6=4?{%3:5?7482B?;h5G4618 `0=>2com7>5;hfa>5<93;8<6F;7d9K025<,l<1:6gka;29?lbe2900eim50;9l52b=831vn>=j:187>5<7s-;2=7?<0:J73`=O<>90(h856:kge?6=3`ni6=44iea94?=h9>n1<75rb3;a>5<2290;w)?61;305>N3?l1C8:=4$d4961=nlh0;66gkb;29?lbd2900eij50;9l52b=831vn?67:186>5<7s-;2=7?<1:J73`=O<>90(h85259j`d<722con7>5;hf`>5<6=4<:183!7>93;9j6F;7d9K025<,l<1>>5fd`83>>ocj3:17b?8d;29?xd6k:0;6>4?:1y'5<7=9;l0D99j;I647>"b>3887djn:188mad=831d=:j50;9~f74?290?6=4?{%3:5?7482B?;h5G4618 `0=9o1bhl4?::kgf?6=3`nh6=44o05g>5<54;294~"6180:?=5G46g8L1143-o=66<729q/=4?513d8L11b3A>5<7s-;2=7?=e:J73`=O<>90(h85139j`d<722e:;i4?::a6gd=8381<7>t$0;2>44b3A>5;n34`?6=3th9n44?:383>5}#90;1=?k4H55f?M20;2.n:7?=;hfb>5<90826`=O<>o0D99<;%g5>446=4=:183!7>93;9i6F;7d9K025<,l<1=?5fd`83>>i6?m0;66sm2c194?4=83:p(<7>:00f?M20m2B?;>5+e7826>oci3:17b?8d;29?xd5j80;6?4?:1y'5<7=9;o0D99j;I647>"b>3;97djn:188k41c2900qo2d9K02c<@==87)k9:008mag=831d=:j50;9~f6?629096=4?{%3:5?75m2B?;h5G4618 `0=9;1bhl4?::m23a<722wi?5h50;094?6|,83:6<N3?:1/i;4>2:kge?6=3f;5;|`05<52;294~"6180:>h5G46g8L1143-o=6<<4iec94?=h9>n1<75rb2::>5<5290;w)?61;31a>N3?l1C8:=4$d4957=nlh0;66a>7e83>>{e;1=1<7<50;2x 4?6288n7E:8e:J736=#m?0:>6gka;29?j70l3:17pl<8483>7<729q/=4?513g8L11b3A>7>50z&2=4<6:l1C8:k4H550?!c12880eio50;9l52b=831vn>6>:181>5<7s-;2=7?=e:J73`=O<>90(h85139j`d<722e:;i4?::a6f1=8381<7>t$0;2>44b3A>5;n34`?6=3th85n4?:383>5}#90;1=?k4H55f?M20;2.n:7?=;hfb>5<90826c=O<>o0D99<;%g5>75>i6?m0;66sm2g`94?5=83:p(<7>:00e?M20m2B?;>5+e7817>oci3:17djm:188k41c2900qo2g9K02c<@==87)k9:318mag=831bho4?::m23a<722wi>kj50;194?6|,83:6<N3?:1/i;4=3:kge?6=3`ni6=44o05g>5<53;294~"6180:>k5G46g8L1143-o=6?=4iec94?=nlk0;66a>7e83>>{e:ol1<7=50;2x 4?6288m7E:8e:J736=#m?09?6gka;29?lbe2900c<9k:188yg5783:1?7>50z&2=4<6:o1C8:k4H550?!c12;90eio50;9j`g<722e:;i4?::a757=8391<7>t$0;2>44a3A>5;hfa>5<90826c=O<>o0D99<;%g5>75>i6?m0;66sm33g94?3=83:p(<7>:012?M20m2B?;>5+e78g2>oci3:17djm:188mae=831bhi4?::m23a<722wi??j50;794?6|,83:6<=>;I64a>N3?:1/i;4=1:kge?6=3`ni6=44iea94?=nlm0;66a>7e83>>{e;>?1<7=50;2x 4?6288m7E:8e:J736=#m?0:>6gka;29?lbe2900c<9k:188yg4a13:1>7>50z&2=4<6:01C8:k4H550?lb>2900c<9k:188yg51n3:1>7>50z&2=4<6:01C8:k4H550?lb>2900c<9k:188yg55k3:197>50z&2=4<6;:1C8:k4H550?!c12;;0eio50;9j`g<722coo7>5;hfg>5<3:1908277=O<>o0D99<;%g5>70>ock3:17djk:188k44e2900c<9k:188yg7d:3:1:7>50z&2=4<6;;1C8:k4H550?!c12;<0eio50;9j`g<722coo7>5;hfg>5<5<>m7>58683>5}O<>90(<7>:0:5?_222hq26?95f;35>42=9j0:<7?8:0795a0=#m;0>7)k<:49'a1<23-ii6nh4$d591>"b03?0(h755:&fe?3<,lh196*jc;78 `b==2.ni7;4$dd91>"a83?0(k?55:&e6?3<,o9196*i4;78 c3==2.m:7;4$g591>"a03?0(k755:&ee?3<,oh196*ic;78 cb==2.mi7;4$gd91>"6890>7)??1;78 4652<1/===55:&241<23-;;97;4$025>0=#99=196*>0986?!7713?0(<>n:49'55d==2.:"6990>7)?>1;78 4752<1/=<=55:&251<23-;:97;4$035>0=#98=196*>1986?!7613?0("6:90>7)?=1;78 4452<1/=?=55:&261<23-;997;4$005>0=#9;=1?6*>8c876>"b=3?0(<6k:29'02>=91=0(996:0:4?k?b291eo=4?;o3;f`<,82n695f4`83>>o3j3:17d:86;29?lef2900e5650;&2<75$0:1>608082?>o4<3:1(<6=:248j4>62;10e>=50;&2<7<4>2d:4<4<;:k06?6=,8296>84n0:2>1=83802>h6080>76g<0;29 4>52:<0b<6>:798m7`=83.:4?4<6:l2<4<032c9i7>5$0:1>60808:?>o393:1(<6=:528j4>62910e>h50;&2<7<382d:4<4>;:k0a?6=,82969>4n0:2>7=83874>h6080876g52=:0b<6>:598m6d=83.:4?4;0:l2<4<232c8m7>5$0:1>168084?>o403:1(<6=:528j4>62110e8o50;&2<7<212d:4<4?;:k64=8386=>h6080976g:6;29 4>52<30b<6>:298m03=83.:4?4:9:l2<4<332c>87>5$0:1>0?56`>8085?>o1:3:1(<6=:4;8j4>62>10e;?50;&2<7<212d:4<47;:k54?6=,8296874n0:2><=8386=>h6080j76g:e;29 4>52<30b<6>:c98m0b=83.:4?4:9:l2<4o7>5$0:1>0?56`>808f?>o2;3:1(<6=:4;8j4>62o10e5950;&2<72d:4<4?;:k;1?6=,8296584n0:2>4=838a3>h6080;76am6;29 4>52k=0b<6>:098kg2=83.:4?4m7:l2<4<532ei?7>5$0:1>g154oc094?"60;0i;6`>8087?>ie93:1(<6=:c58j4>62<10co>50;&2<72=838a3>h6080376and;29 4>52k=0b<6>:898kde=83.:4?4m7:l2<45$0:1>g1808`?>if03:1(<6=:c58j4>62m10cl950;&2<7c=838a3>h6080:<65`a583>!7?:3h<7c?71;32?>if;3:1(<6=:c58j4>628807bo=:18'5=4=j>1e=5?51298kd7=83.:4?4m7:l2<4<6<21dm=4?:%3;6?d03g;3=7?:;:mab?6=,8296o94n0:2>40<3fhn6=4+1909f2=i91;1=:54ocf94?"60;0i;6`>8082<>=hjj0;6)?72;`4?k7?93;276amb;29 4>52k=0b<6>:0c8?jdf290/=5<5b69m5=7=9k10co750;&2<7c:9lf0<72-;3>7l8;o3;5?7c32ejm7>5$0:1>g15<#9181n:5a19395c=838`3>h6080;76al6;29 4>52j=0b<6>:098kf3=83.:4?4l7:l2<4<532eh87>5$0:1>f154ib;94?=n91l1<75f46594?=n?m0;6)?72;5`?k7?93:07d9m:18'5=4=?j1e=5?51:9j3<<72-;3>79l;o3;5?4<3`=36=4+19093f=i91;1?65f7683>!7?:3=h7c?71;68?l11290/=5<57b9m5=7==21b;84?:%3;6?1d3g;3=784;h57>5<#9181;n5a19393>=n?:0;6)?72;5`?k7?93207d9=:18'5=4=?j1e=5?59:9j34<72-;3>79l;o3;5?g<3`=;6=4+19093f=i91;1n65f6d83>!7?:3=h7c?71;a8?l0c290/=5<57b9m5=7=l21b:n4?:%3;6?1d3g;3=7k4;h4a>5<#9181;n5a1939b>=n>h0;6)?72;5`?k7?93;;76g99;29 4>52>i0b<6>:038?l0?290/=5<57b9m5=7=9;10e;950;&2<7<0k2d:4<4>3:9j23<72-;3>79l;o3;5?7332c=97>5$0:1>2e5<#9181;n5a193953=8384g>h6080:;65f8383>!7?:3=h7c?71;3;?>o?93:1(<6=:6a8j4>628307d6?:18'5=4=?j1e=5?51`98m2`=83.:4?48c:l2<4<6j21b;h4?:%3;6?1d3g;3=7?l;:k4e?6=,8296:m4n0:2>4b<3`8082b>=n0j0;6)?72;:a?k7?93:07d6n:18'5=4=0k1e=5?51:9j<<<72-;3>76m;o3;5?4<3f3?6=4+1909=6=i91;1<65`9383>!7?:3387c?71;38?j?6290/=5<5929m5=7=:21d5=4?:%3;6??43g;3=7=4;n:e>5<#91815>5a19390>=h0l0;6)?72;;0?k7?93?07b7k:18'5=4=1:1e=5?56:9l=f<72-;3>77<;o3;5?1<3f3i6=4+1909=6=i91;1465`9`83>!7?:3387c?71;;8?j?>290/=5<5929m5=7=i21d554?:%3;6??43g;3=7l4;n;4>5<#91815>5a1939g>=h1?0;6)?72;;0?k7?93n07b7::18'5=4=1:1e=5?5e:9l77<;o3;5?`<3fi86=4+1909g7=i91;1<65`c083>!7?:3i97c?71;38?xu2=o0;6;uQ54d897122mh01?9<:ec8971>2mn01?8k:ea8970d2mk0q~;:d;293`}Y<0<0R888;_751>X30?1U9;<4^432?[31>2T>=?5Q4868Z1?43W>2>6P;909]0<6X2?81U9:>4^44e?[31m2T>:i5Q57a8Z00e3W?=m6P:689]10eX2=<1U98:4=55e>a1<5=<268>4=57f>06<5=<368>4=544>06<5=<=68>4=552>06<5==;68>4=3``>04<5;hj68<4=3`;>04<5;h=68<4=3`7>04<5;h968<4=3`3>04<5;kn68<4=3gg>4>f348297;=;<0:0?353482?7;=;<0:6?353482=7;=;<0;6?353483=7;=;<0;4?35348i7;=;<16b?35349=<7;=;<155?3534>>m767;<66e?7?n27?9l4;769>00g=?m1688o57c9>00g=?01688o5799>00g=?>1688o5779>00g=?<1688o5759>00g=?:1688o5739>00g=?81688o5719>00g=>l1688o56e9>00g=>j1688o56c9>00g=>h1688o5689>00g=>11688o5669>00g=>?1688o5649>00g=0=1688o5829>00g=0;1688o5809>00g=091688o57g9>00g=?l1688o57`9>00g=>o1688o5659>00g=0j1688o58`9>00g=001v>8l:181[2??278:n4>859~w0062908wS;91:?72<<60:1688k51918yv40?3:1>vP:079>621=91>0q~;84;297~X2?=16?::5d`9>723=lh1v8;<:185<~X2=:16>l<5479>036=00c=031=640=<;5479>642=<=5479>644=646==h5479>65c=;<5479>637=;>5479>60`=8k5479>60b=8m5479>60d=8o5479>606=9h5479>61c=9j5479>61e=9l5479>61g=975479>61>=995479>5a>=5a0=5a2=5a4=5a6=i75479>6a>=i95479>6a0=i;5479>6a2=i<5479>6a7=i=5479>6`d=ho5479>6`?=h65479>6`1=h85479>6`3=h:5479>6`5=:85479>621=:?5479>626=07c=07e=07g=071=073=075=077=5479>04`=04e=04g=04>=040=042=;5479>062==5479>064=?5479>066=04c=044=1168;l5479>03?=027=5479>5g2=5g4=5g6=5dc=5de=5cd=5c?=5c1=5c3=5`g=5`>=5`0=5`2=5`4=>m5479>66d=>o5479>66?=>65479>661=>85479>663=>:5479>665=74`=74b=74d=74?=740=7gb=7ge=7g`=7f6=7f5=7a7=7a6=7a5=7a2=7a1=7d`=7g6=7dd=7d?=7dg=7`e=7`g=7`>=7`0=7`2=726=73e=h9:181[2c127?=o4>859~w6`22909wS:k8:?75d<60=1v>h;:181[2c?27?=44>859~w6`42909wS:k6:?75=<60=1v>h=:181[2c=27?=:4>859~w6`62909wS:k4:?753<60=1v>h?:181[2c:27?=84>859~w6ca2909wS:k1:?751<60=1v9?>:181[2c827??84>859~w1772909wS:lf:?771<60=1v9>i:181[2dm27??>4>859~w16b2909wS:ld:?777<60=1v9>k:181[2dk27??<4>859~w16d2909wS:lb:?775<60=1v9>m:181[2di27?>44>859~w1632909wS:l9:?75`<60=1v>h6:181[2d?27?=>4>859~w6cb2909wS:l6:?757<60=1v9>n:181[2d=27?>k4>859~w16>2909wS:l4:?76`<60=1v9>7:181[2d;27?>i4>859~w1602909wS:l2:?76f<60=1v9>9:181[2d927?>o4>859~w1622909wS:l0:?76d<60=1v9><:181[2en27?>54>859~w1652909wS:me:?762<60=1v9>>:181[2cn27?>;4>859~w1672909wS:ke:?760<60=1v>hi:181[2cl27?>94>859~w6`b2909wS:kc:?766<60=1v>hk:181[2cj27?>?4>859~w6`d2909wS:ka:?764<60=1v>hm:181[2c;27?>=4>859~w6`f2909wS:l8:?75c<60=1v>h7:181[2el27?=i4>859~w6`02909wS:mc:?75f<60=1v9l=:181[2f827?9l477:p0g6=838pR97i;<66e?3f3ty?mk4?:3y]0;3=h0>:6s|4`a94?4|V=3i70::a;76?xu3ik0;6?uQ48c8913f2<>0q~:na;296~X3101688o5629~w1de2909wS:n8:?71d<1:2wx8oo50;0xZ1g034>>m76:;|q7f<<72;qU8l84=57b>37i47>52z\7e0=:<5<5sW>j863;5`86b>{t7}YvP;a09>00g==j1v9l<:181[2>027?9l4:b:p0d?=838pR978;<66e?343ty:?44?:by>0=6=9>l01?lj:5;897gb2=301?kj:40897cc2=301?7>:5;8971b2=301>7=:5;896>72=301>=;:5;896202=301>;k:5;8yv4f;3:1>v3=a3864>;5i=0:;i5rs546>5<60r79m?4>829>03>=91>01?j6:5a897b?2=i01?j8:5a897b12=i01?j::5a897b32=i01?j=:5a897b6282870h70h70h70h70h70<86;3;7>;5?>0:4>5226390f=::>:18n5rs3c1>5<3s48j>7?74:?136<7p};6183>7}:ag=m7>53z?72g<2827?:44;7:?72d<60=1v98m:181821j3;3863;6e8ge>{t<06<5=?n6<6;;<656?be3ty?:44?:2y>03?=91>0198n:428910c2mh0q~:91;290~;3>10:4>5247595=5<5=<=6<6<;<656?70l2wx8;:50;05821?3;3863=1787g>;59<0?o63=1587g>;59:0?o63=1387g>;5980?o63=1187g>;58o0?o63=0d87g>;5>;0?o63=6087g>;5>90?o63=5g87g>;5=l0?o63=5e87g>;5=j0?o63=5c87g>;5=h0?o63=5187g>;5;5;5;5<00?o63=4987g>;5<>0?o63>d987g>;6l>0?o63>d787g>;6l<0?o63>d587g>;6l:0?o63>d387g>;6l80?o63>d187g>{tk4>849>07c=91?0194>234>9;7?75:?763<60<168?;519789143282>70:=3;3;1>;3:;0:485243395=3<5=8;6<6:;<62b?7?=27?=i4>849>04e=91?019?m:0:6?826i3;3963;1882<0=:<821=5;4=534>4>234>::7?75:?750<60<168<:519789152282>70:<4;3;1>;3;:0:485242095=3<5=9:6<6:;<604?7?=27?>44>849>04c=91?019?<:0:6?826:3;3963;5b8gf>;3=h0:5=5rs54`>5<4s4><=7?73:?735<60:168;j516f8yv21n3:1?>u246395=2<5:;<69m4=23e>1e<5:;n69m4=23g>1e<5:;h69m4=23a>1e<5:;j69m4=23:>1e<5:;369m4=235>1e<5:ho69m4=2`a>1e<5:hh6<6<;<1aa?2d349ij7:l;<1`6?2d349h<7:l;<1`5?2d349h?7:l;<1`0?2d349o=7:l;<1`b?7?;278h=4;c:?0`7<3k278h>4;c:?0`3<3k278h94;c:?0`0<3k278h:4;c:?0`=<3k278mk4;c:?0e`<3k278n=4;c:?0ef<3k278mo4;c:?0ea<3k278m44;c:?0e=<60:16?lo54b9>7d1=91901>kl:5a896ce2=i01>kn:5a896c>2=i01>k7:5a896c02=i01>k9:5a896c22=i01>k;:5a896c42=i0q~:9e;296d}:<>:1=5:4=0`7>1e<58h869m4=0`1>1e<58h:69m4=0`3>1e<58km69m4=0cf>1e<58ko69m4=0c`>1e<58lh69m4=0da>1e<58lj69m4=0d:>1e<58l369m4=0d4>1e<58l=69m4=0d6>1e<58l?69m4=0gb>1e<58o269m4=0g;>1e<58o<69m4=0g5>1e<58o>69m4=0g7>1e<58o869m4=0g1>1e<5;9h69m4=31a>1e<5;9j69m4=31:>1e<5;9369m4=314>1e<5;9=69m4=316>1e<5;9?69m4=310>1e<5:8j69m4=253>1e<5:=:69m4=24`>1e57>55z?153<28279:?4>859>64>=lk16>64e=lm1v?>k:180846>3;3863=9g8ge>;50j0om6s|20594?4|5;;>68>4=33;>41c3ty9643=91>01?7j:e`897>e2mh0q~<>9;296~;59=0><63=1`823a=z{;:i6=4<{<020?7?<2795h4kd:?1u220195=2<5;3o6il4=3:b>ad52z?157<28279=h4>7e9~w76>2908w0<>2;3;0>;51m0oh63=8`8g`>{t:8l1<706<5;8;6<9k;|q14=<72:q6>v3=11864>;5:;0:;i5rs324>5<4s48:<7?74:?1=fi:428974228=o7p}=0783>6}::9l1=5:4=3;a>ad<5;236il4}r013?6=:r79::180847m3;3863=9c8g`>;5010oh6s|1g194?3|58h?68>4=0d`>4>334;i:7jm;<3a;::ec896252mk01?h8:e`8yv7e=3:1>v3>b2864>;6j?0:;i5rs0cb>5<2s4;i?7?74:?02ga883>0}:9k81=5:4=24b>ag<5:??6io4=262>ag<5::;6il4}r3a=?6=>r7:n<4:0:?2fd<6?m16=om5dc9>5gc=lh16=n>5db9>5f4=lm1v;4==0oo63<408gg>;5no0on6s|1c`94?4|58h;68>4=0``>41c3ty:m:4?:4y>5g6=91>01>86:ec896342mk01>:?:ec897`b2mh0q~?md;296~;6io0><63>bd823a=z{8k=6=4:{<3bb?7?<278:44kc:?016ag<5:9m6io4=3d`>ad52z?2ea<2827:o>4>7e9~w4g3290>w0?nd;3;0>;4>10oo63<538gg>;4;o0oo63=fc8gf>{t9j?1<706<58i=6<9k;|q2e6<72;>:ec8965b2mk01?hn:e`8yv43>3:1>v3=63864>;5=90:495rs366>5<5s48==7;?;<07b?7?<2wx>8650;6x9706282?70<>8;fb?846i3ni70<>c;f`?xu5<=0;6?u2272915=::=o1=5:4}r063?6=;r79:=4>859>64g=lj16>60c==916>9m51968yv42=3:19v3=5d82<1=::8o1hl522329`g=::;81hi522369`f=z{;>:6=4={<06`?37348?n7?74:p602=83>p1?;k:0:7?84583nh70<=2;fb?845<3ni7p}=4183>7}::?7>53z?11f<60=16>?<5dc9>672=lh1v?=i:181842j3?;70<;9;3;0>{t:<81<7=t=37a>4>3348997jn;<0160g==916>9651968yv4293:1>v3=5`82<1=::;21hl5rs0g2>5<5s4;mo7;?;<3fe?7?<2wx=h>50;0x94`e2<:01ad<58hj6im4}r3gb?6=:r7:jl4:0:?2a=<60=1v:18087ai3;3863>b98gg>;6jh0on6s|1eg94?4|58l268>4=0g4>4>33ty:j=4?:3y>5c?=91>01v3>f9864>;6m?0:495rs0ge>5<2s4;m47?74:?2ffed83>1}:9o=1=5:4=0`f>ae<58i;6io4=0a1>ad52z?2b3<2827:i94>859~w4cc2908w0?i6;3;0>;6k90on63>c38ge>{t9mk1<706<58o86<6;;|q2af<72:q6=k;5196894e42mk01v3>f5864>;6m;0:495rs0ga>5<5s4;m87?74:?2g3><50;0x97372<:01?=l:0:7?xu5;80;6?u225d915=:::h1=5:4}r004?6=:r798h4:0:?17d<60=1v?{t:;o1<706<5;936<6;;|q16a<72;q6>9l5519>661=91>0q~<=c;296~;5<63=3782<1=z{;8i6=4={<07=?37348897?74:p67g=838p1?:7:4289753282?7p}=2883>7}::==19=5222195=251z?102<60=1v{t9jo1<706<58n<6<6;;|q2ga<72;q6=h65519>5a0=91>0q~?lc;296~;6m>0><63>d482<1=z{8ii6=4={<3f2?3734;o87?74:p5fg=838p1c883>7}:9l>19=521e095=252z?2a6<2827:h<4>859~w4e02909w0?j2;73?87c83;386s|2d094?3|58n368>4=3ga>4>334;2>7jn;<0;g?be34>>m7:>;|q2ba<72;q6=i95519>5<4=9>n0q~?ie;296~;6l?0><63>92823a=z{8lm6=4={<3g1?3734;287?8d:p656=838p17}:9m919=52184952b7>52z?2`7<2827:5:4>7e9~w7642909w0?k1;73?87>03;4=0;:>41c3ty8i?4?:5y>66e==916?hm5196894?f2mk019;n:258yv41;3:1>v3=3c864>;61h0:;i5rs347>5<5s488m7;?;<3:f?70l2wx>;;50;0x975>2<:01<7l:05g?xu5>?0;6?u222:915=:90n1=:j4}r053?6=:r79?:4:0:?2=`<6?m1v?87:181844>3?;70?6f;34`>{t:?31<706<58k;6<9k;|q12d<72;q6>>:5519>5d7=9>n0q~<9b;296~;5;:0><63>a3823a=z{;oh6=4>5z?1`<<3?279h54;7:?1`2<3?279h;4;7:?1`0<3?279h94;7:?1`7<3?279h<4;7:?1`6<3?279io4;7:?1ad<3?279i44;7:?1a=<3?279i:4;7:?1a3<3?279i84;7:?1a1<3?279i>4;7:?71f7e9>6d2=lk1v?ok:18184c13?;70{t:m:1<7:t=3f:>4>3348nn7;?;<0:b?be348h;7jn;|q1ef<72;q6>i65519>6f3=9>n0q~p1?j8:0:7?84b13?;70<6e;f`?84ej3nj7p}=a`83>7}::m<19=522b1952b54z?1`3<60=16>h65519>6o75d`9~w7g>2909w06<6;;<0f3?373482h7jl;<0a3?bf3ty9m54?:3y>6a2==916>n?516f8yv4dj3:18v3=d582<1=::l<19=5228a9`d=::k?1hl5rs3c5>5<5s48o>7;?;<0ab?70l2wx>n750;6x97b5282?70j3nj70859>6`5==916>4l5db9>6d`=lh1v?o8:18184c;3?;70{t:jk1<7:t=3f0>4>3348n97;?;<0:g?bd348i?7jn;|q1ff<72;q6>n85489>6ge=9>n0q~l522b5952b53z?1g0<31279nn4;9:?1fd<6?m1v?lk:18084d=3;9m63=bb827e9~w7de2908w0;5jh0:4l522c`952b53z?1g6<31279n54;9:?1f3<6?m1v?l6:18084d;3;9m63=b9827e9~w7d02908w0;5j?0:4l522c5952b7>53z?1g4<31279n94;9:?1f7<6?m1v?l::18084d93;9m63=b5827e9~w7d42908w0;5j;0:4l522c1952b53z?1fc<31279n=4;9:?1e`<6?m1v?l>:18084en3;9m63=b1822`9>6dc=91k01?oi:05g?xu5m80;68u22dc95=2<58386io4=0;1>ad<5;2i6io4=57b>6`55z?1a<<60=16=4:5d`9>5<5=lk16>5l5db9>00g=;l1v?ji:18684b03;3863>948ge>;61=0on63=8`8ge>;3=h08h6s|2eg94?3|5;o<6<6;;<3:2?bf34;297jm;<0;e?bd34>>m7=l;|q1`a<72h85196894?02mk01<79:e`897>>2mk019;n:2`8yv4ck3:19v3=e482<1=:9021hl521859`g=::131hn5244c97d=z{;ni6=4:{<0f0?7?<27:544ka:?2==io50;6x97c4282?70?69;fa?84?03nh70::a;1;?xu5?10;6>u2264915=::>=19=5226;952b52z?133<60=16>:75d`9~w7152909w0<81;73?840;3;626==916>:;516f8yv41m3:1:v3=7182<1=::>?1hl522619`g=::>31ho5227f9`g=::?i1hn5rs3d5>5<5s49;>7:6;<0e2?70l2wx>k950;0x9665288j70{t;;:1<741c349:;7;?;|q1b0<72:q6?=l5489>6c0=<016>k;516f8yv5793:1?v3<0c826d=::o<1=5o4=222>41c3ty8>44?:3y>75d=9>n01>?i:428yv5dl3:19v3=f7866>;4l>0:49523d`915=:;=81hi523139`d=z{;l?6=4<{<13e?2>348m97:6;<0e0?70l2wx?=>50;1x966f288j70;4890:;i5rs20;>5<5s49;m7?8d:?05`<282wx?nm50;7x97`22<801>j9:0:7?85bi3?;70=;1;fa?85783nj7p}=f283>6}:;93184522g690<=::o91=:j4}r0eb?6=;r78<44>2`9>6c2=91k01?hi:05g?xu4:>0;6?u231;952b<5:;o68>4}r1`f?6==r79j94:2:?0`0<60=16?h75519>717=lm16>kh5d`9~w7`52908w0=?8;6:?84a;3>270{t:oo1<7=t=22;>44f348m?7?7a:?1b`<6?m1v><9:18185703;{t;jk1<7;t=3d0>04<5:n?6<6;;<1f751=<016>k<5489>6c7=9>n0q~0:>l522g095=g<5;lo6<9k;|q060<72;q6?=9516f8967e2<:0q~=l9;291~;5n;0>>635<4s49;:7:6;<0e5?2>348m<7?8d:p6ce=839p1>>9:00b?84a93;3m63=fb823a=z{:8?6=4={<132?70l278=l4:0:p7f>=83?p1?h>:40896b5282?70=j6;73?854n3ni70u231790<=::o:184522dd952b53z?040<6:h16>k>519c897`e28=o7p}<2283>7}:;9?1=:j4=23:>0655z?1b5<2:278h<4>859>7`3==916?>h5de9>6cd=lh1v?kj:180857<3>2707e9~w6452909w0=?4;34`>;4910><6s|3b494?3|5;om68<4=2f3>4>3349n87;?;<10a?be348mm7jn;|q1aa<72:q6?==5489>6`c=<016>hj516f8yv4a03:1?v3<02826d=::lo1=5o4=3d:>41c3ty8><4?:3y>755=9>n01>?9:428yv50<3:1>lu22df917=:;kn18:523c`902=:;ki18:523cg902=:;kl18:523b0902=:;j:18:523b3902=:;j918:523b6902=:;m;18:523bd902=:;m:18:523e0902=:;m918:523e4902=:;m>18:523e7902=:;m=18:523e:902=:;hl18:523`g902=:;k:18:523`a902=:;hh18:523`f902=:;h318:523`:902=:;hk18:523`5902=:;li18:523d`902=:;lk18:523d;902=:;l218:523d5902=:;l<18:523d7902=:;l>18:523d1902=:;>?1=:j4}r13g?6=:r78=:4>859>77b=lh1v>?::181856n3;3863<2e8gg>{t;8>1<74>33499o7jk;|q056<72;q6?2;296~;49j0:495233a9`g=z{:;:6=4={<12f?7?<278>n4ka:p746=838p1>?n:0:7?855l3ni7p}<0g83>7}:;831=5:4=20f>ag52z?05=<60=16??k5dc9~w66c2909w0=>6;3;0>;4:l0oo6s|33d94?5|5:8j6994=24`>11<5:77b=9>n0q~<60;296~;51<0?563=95823a=z{;3j6=4={<0:1?7?i2795k4>7e9~w7g62909w0<65;34`>;5i=0om6s|29d94?4|5;3?6974=3;0>41c3ty9544?:3y>6<2=91k01?7j:05g?xu50l0;6?u228190<=::081=:j4}r0:4>8`9>6n0q~<7d;296~;51;0?563=90823a=z{;3<6=4={<0:6?7?i2795n4>7e9~w7?12909w0<61;3;e>;51k0:;i5rs35g>5<5s483>7:6;<0;5?70l2wx>5950;0x97>5282j70<7c;34`>{t:h:1<741c348j87jl;|q13f<72;q6>5?5489>6=6=9>n0q~<76;296~;5080:4l5229`952b52z?1<5<31279;k4>7e9~w7>22909w0<70;3;e>;50h0:;i5rs35b>5<5s485:50;0x971a282j70<79;34`>{t:191<74>f348347?8d:p7<`=83>p1>lk:42896g>282?70=98;fg?85?=3nj7p}6}:;kn1=5:4=2f2>06<5:?96ij4}r1:`?6=7=7=lh1v>l>:18085ej3;3863;4=80oo6s|38g94?2|5:hh68>4=2c;>4>3349=;7jm;<1;7?bf3ty8n?4?:2y>7ge=91>01>j?:42896362mh0q~=n0;290~;4jl0><63om:0:7?85113no70=79;fb?xu4j<0;6>u23cd95=2<5:n868>4=270>ab54z?0g7<28278mh4>859>73g=lk16?5h5d`9~w6d?2908w0=l2;3;0>;4l?0><63<558gf>{t;h81<7:t=2a3>06<5:kh6<6;;<15=?be3493n7jn;|q0f3<72:q6?n>5196896b32<:01>;<:e`8yv5f;3:18v3;4im0:495237c9`a=:;1n1hl5rs2`4>5<4s49h=7?74:?0`0<28278994kd:p7d3=83>p1>m<:42896ga282?70=9b;fg?85>93nj7p}6}:;j91=5:4=2f4>06<5:?>6ij4}r1b2?6=7ln:18085d<3;3863;4=<0on6s|3b794?2|5:im6<6;;<1f7?373498i7jl;<0e=?b>3ty8oh4?:5y>7a>=91>01>kl:42896252mh01?h8:ec8yv50m3:1>v3;41h0:;i5rs25g>5<5s49ji7;?;<1:=?70l2wx?:h50;0x96d72<:01>7m:05g?xu4?k0;6?u23`a915=:;0=1=:j4}r14e?6=:r78mo4:0:?0=3<6?m1v>9l:18185fl3?;70=68;34`>{t;>21<706<5:3?6<9k;|q032<72;q6?l65519>7<5=9>n0q~=89;296~;4ih0><63<94823a=z{:==6=4={<1b3?373492>7?8d:p7<6=838p1>7m:5;896?728=o7p}<9b83>7}:;0h1=?o4=2;`>41c3ty84h4?:2y>75489>7=c=9>n0q~=61;297~;41h0:>l5238295=g<5:3:6<9k;|q07=c=<016?5m516f8yv5?n3:1?v3<98826d=:;1o1=5o4=2:e>41c3ty84l4?:2y>7<>=<016?5m5489>7=g=9>n0q~=7d;297~;4110:>l5239a95=g<5:2o6<9k;|q0<=<72:q6?495489>7=g=<016?56516f8yv5?j3:1?v3<96826d=:;1k1=5o4=2:a>41c3ty84;4?:2y>7<0=<016?565489>7=0=9>n0q~=79;297~;41?0:>l5239:95=g<5:226<9k;|q0<1<72:q6?4;5489>7=0=<016?5:516f8yv5??3:1?v3<94826d=:;1<1=5o4=2:4>41c3ty84?4?:2y>7<2=<016?5:5489>7=4=9>n0q~=75;297~;41=0:>l5239695=g<5:2>6<9k;|q0<5<72:q6?4=5489>7=4=<016?5>516f8yv5?;3:1?v3<92826d=:;181=5o4=2:0>41c3ty84<4?:2y>7<4=9;k01>6?:0:b?85?93;7`g=91>01<7l:ec894?e2mh019;n:268yv5cn3:18v35rs2ff>5<3s49n47?74:?2=`m3ni70::a;12?xu4lj0;69u23d495=2<58k;6io4=0;e>ad<5=?j6>>4}r1gf?6=859>5d7=lh16=l>5dc9>00g=:o1v>jn:18785b<3;3863>a38ge>;6i80on63;5`81a>{t;m31<7=t=2g0>4>334;j>7jm;<66e?4c3ty8?44?:3y>762=91k01>=j:05g?xu4;90;6?u2326952b<5:9>6974}r10e?6=:r78?84>8`9>76`=9>n0q~=<1;296~;4;<0:;i5232490<=z{:9i6=4={<102?7?i2788=4>7e9~w6552909w0=<6;34`>;4;>0?56s|32a94?4|5:9<6<6n;<175?70l2wx?>=50;0x965028=o70=<8;6:?xu4;m0;6?u232:95=g<5:>96<9k;|q013<72;q6?>6516f896142mi0q~=;c;296~;4<>0:4l52343952b52z?002<6?m16?965489~w62c2909w0=;8;3;e>;4=;0:;i5rs267>5<5s49?47?8d:?00<<312wx?9k50;0x962>282j70=:3;34`>{t;=?1<741c349?m7:6;|q00c<72;q6?9o519c8963328=o7p}<4783>7}:;=k1=:j4=26a>1?<7>52z?00g<60h16?8;516f8yv52?3:1?v3<4c823a=:;>91hl5237g9`f=z{:<96=4={<16`?7?i278::4>7e9~w63>2909w0=:d;34`>;4=l0?56s|37194?4|5:?n6<6n;<15=0;6?u234d95=g<5:<26<9k;|q01g<72;q6?8h516f896072=30q~=95;296~;4>90:4l5237c952bo7>52z?025<6?m16?;?5489~w6012909w0=91;3;e>;4>k0:;i5rs27;>5<5s49==7?8d:?02`9>:428961428=o7p}<7183>1}:;>:1=5:4=257>ad<5:=>6il4=24e>a?52z?02f<28278:h4>7e9~w13c29099v3;2g873>;3:l0?;63;2e873>;3:j0?;63;2c873>;3:h0?;63;29873>;3:>0?;63;27873>;3:<0?;63;25873>;3::0?;63;23873>;3:80?;63;21873>;39o0?;63;1e873>;39j0?;63;1c873>;39h0?;63;18873>;3910?;63;16873>;39?0?;63;14873>;39=0?;63;34873>;3;=0?;63;32873>;3;;0?;63;30873>;3;90?;63;28873>;39l0?;63;12873>;39;0?;63=6e823a=z{=?96=4={<61b?3734>>m7m7;|q714<72;q68?k5519>00g=j11v9;?:181825l3?;70::a;`5?xu35<5s4>9n7;?;<66e?d43ty?8i4?:3y>07g==91688o5b39~w12e2909w0:=8;73?822i3h:7p};4`83>7}:<;=19=5244c9f5=z{=>26=4={<612?3734>>m7oi;|q70=<72;q68?;5519>00g=k?1v9:8:181825<3?;70::a;cf?xu35<5s4>9>7;?;<66e?gd3ty?894?:3y>077==91688o5ac9~w1242909w0:=0;73?822i3k27p};4383>7}:<8l19=5244c9e==z{=>;6=4={<62`?3734>>m7o8;|q77c<72;q6800g=i?1v9=j:181826j3?;70::a;a6?xu3;m0;6?u240c915=:<5<5s4>:57;?;<66e?g33ty??o4?:3y>04>==91688o5a29~w15f2909w0:>7;73?822i3k97p};3883>7}:<8<19=5244c9e4=z{=936=4={<621?3734>>m7o?;|q772<72;q68<:5519>00g=jo1v9;6:181824=3?;70::a;`f?xu3=10;6?u2426915=:<5<5s4>8?7;?;<66e?dc3ty?9;4?:3y>064==91688o5bb9~w1322909w0:<1;73?822i3hi7p};5583>7}:<::19=5244c9fd=z{=?86=4={<61=?3734>>m7l6;|q70f<72;q6800g=j<1v9:>:181826;3?;70::a;cb?xu3;?0;6?u2400915=:<5<5s4>>o7?8d:?71d8j:e`8961328=o70::a;642>;3=h0h56s|17094?4|5;8>6il4=307>44e3ty::i4?:3y>5f5=lk16=n<513`8yv45>3:1>v3=298gg>;5:=0:;i5rs0a7>5<5s4;h:7jl;<3`6?70l2wx??m50;0x964b2mn01><,==96<9?;|q616<72;qU98=4=569105<,==96<9>;|q7f7<72;qU8l>4=5690d6<,==96<:;;|q7f5<72;qU84h4=5690<`<,==96<:i;|q7ec<72;qU84k4=5690<,==96<8>;|q7fd<72;qU8l94=5690d1<,==96<8<;|q7f<<72;qU8l84=5690d0<,==96<8;;|q7f=<72;qU8l;4=5690d3<,==96<8:;|q7f2<72;qU8l:4=5690d2<,==96<89;|q7f3<72;qU8l=4=5690d5<,==96<88;|q7f0<72;qU8l<4=5690d4<,==96<87;|q7f1<72;qU8l?4=5690d7<,==96<86;|q7f6<72;qU8464=5690<><,==96<8n;|q7e<<72;qU8494=5690<1<,==96<8m;|q631<72;qU9::4=569122<,==96<8l;|q61c<72;qU98h4=56910`<,==96<8j;|q7ba<72;qU8i74=5690a?<,==96<9=;|q7bg<72;qU8i64=5690a><,==96<9<;|q7bd<72;qU8i94=5690a1<,==96<9;;|q7b<<72;qU8i84=5690a0<,==96<9:;|q7b=<72;qU8i;4=5690a3<,==96<99;|q7b2<72;qU8i:4=5690a2<,==96<98;|q7b0<72;qU8i<4=5690a4<,==96<97;|q7b1<72;qU8i?4=5690a7<,==96<96;|q7b6<72;qU8i>4=5690a6<,==96<9n;|q7b7<72;qU8nh4=5690f`<,==96<=n;|q7b4<72;qU8nk4=5690fc<,==96<=m;|q7b5<72;qU8nj4=5690fb<,==96<=l;|q7ac<72;qU8nm4=5690fe<,==96<=k;|q7a`<72;qU8nl4=5690fd<,==96<=j;|q7aa<72;qU8no4=5690fg<,==96<=i;|q7af<72;qU8n74=5690f?<,==96<:?;|q7ad<72;qU8n94=5690f1<,==96<:>;|q7a<<72;qU8n84=5690f0<,==96<:=;|q7a=<72;qU8n;4=5690f3<,==96<:<;|q7a2<72;qU8n:4=5690f2<,==96<::;|q7a3<72;qU8n=4=5690f5<,==96<:9;|q7a0<72;qU8n<4=5690f4<,==96<:8;|q7a1<72;qU8n?4=5690f7<,==96<:7;|q7a6<72;qU8n>4=5690f6<,==96<:6;|q7a7<72;qU8oh4=5690g`<,==96<:n;|q7a4<72;qU8ok4=5690gc<,==96<:m;|q641<72;qU8ih4=5690a`<,==96<:l;|q646<72;qU8ik4=5690ac<,==96<:k;|q647<72;qU8ij4=5690ab<,==96<:j;|q644<72;qU8im4=5690ae<,==96<;?;|q645<72;qU8il4=5690ad<,==96<;>;|q7bc<72;qU8io4=5690ag<,==96<;=;|q7b`<72;qU8i=4=5690a5<,==96<;<;|q7b3<72;qU8n64=5690f><,==96<;;;|q7ag<72;qU8oj4=5690gb<,==96<;:;|q7a5<72;qU8om4=5690ge<,==96<;9;|q64f<72;qU9=m4=56915e<,==96<;8;|q7<2<72;qU8594=5690=1<,==96<;7;|q643<72;qU9=84=569150<,==96<;n;|q674<72;qU9>?4=569167<,==96<;j;|mea?=838pD99<;|lb`d<72;qC8:=4}ocgf?6=:rB?;>5rn`f`>5<5sA>7}O<>90qcokf;296~N3?:1vblk?:181M20;2wemh?50;0xL1143tdji?4?:3yK02552zJ736=zfho?6=4={I647>{iil?1<7vF;729~jdc?2909wE:83:me`?=838pD99<;|lbad<72;qC8:=4}ocff?6=:rB?;>5rn`g`>5<5sA>7}O<>90qcojf;296~N3?:1vblh?:181M20;2wemk?50;0xL1143tdjj?4?:3yK02552zJ736=zfhl?6=4={I647>{iio?1<7vF;729~jd`?2909wE:83:mec?=838pD99<;|lbbd<72;qC8:=4}ocef?6=:rB?;>5rn`d`>5<5sA>7}O<>90qcoif;296~N3?:1vbo>?:181M20;2wen=?50;0xL1143tdi52zJ736=zfk:?6=4={I647>{ij9?1<7vF;729~jg6?2909wE:83:mf5?=838pD99<;|la4d<72;qC8:=4}o`3f?6=:rB?;>5rnc2`>5<5sA>7}O<>90qcl?f;296~N3?:1vbo??:181M20;2wen52zJ736=zfk;?6=4={I647>{ij8?1<7vF;729~j<7f290:wE:83:m=0?=83;pD99<;|l:1d<728qC8:=4}o;6f?6=9rB?;>5rn87`>5<6sA>4}O<>90qc7:f;295~N3?:1vb48?:182M20;2we5;?50;3xL1143td2:?4?:0yK02551zJ736=zf0{I647>{i1??1<7?tH550?xh>>?0;65rn84`>5<6sA>4}O<>90qc79f;295~N3?:1vb49?:182M20;2we5:?50;3xL1143td2;?4?:0yK02551zJ736=zf0=?6=4>{I647>{i1>?1<7?tH550?xh>??0;65rn85`>5<6sA>4}O<>90qc78f;295~N3?:1vb46?:182M20;2we55?50;3xL1143td24?4?:0yK02551zJ736=zf02?6=4>{I647>{i11?1<7?tH550?xh>0?0;6?290:wE:83:m==?=83;pD99<;|l:5rn8:`>5<6sA>4}O<>90qc77f;295~N3?:1vb47?:182M20;2we54?50;3xL1143td25?4?:0yK02551zJ736=zf03?6=4>{I647>{i10?1<7?tH550?xh>1?0;6?3:1=vF;729~j5rn8;`>5<6sA>4}O<>90qc76f;295~N3?:1vb4o?:182M20;2we5l?50;3xL1143td2m?4?:0yK02551zJ736=zf0k?6=4>{I647>{i1h?1<7?tH550?xh>i?0;65rn8c`>5<6sA>4}O<>90qc7nf;295~N3?:1vb4l?:182M20;2we5o?50;3xL1143td2n?4?:0yK02551zJ736=zf0h?6=4>{I647>{i1k?1<7?tH550?xh>j?0;65rn8``>5<6sA>4}O<>90qc7mf;295~N3?:1vb4m?:182M20;2we5n?50;3xL1143td2o?4?:0yK02551zJ736=zf0i?6=4>{I647>{i1j?1<7?tH550?xh>k?0;65rn8a`>5<6sA>4}O<>90qc7lf;295~N3?:1vb4j?:182M20;2we5i?50;3xL1143td2h?4?:0yK02551zJ736=zf0n?6=4>{I647>{i1m?1<7?tH550?xh>l?0;65rn8f`>5<6sA>4}O<>90qc7kf;295~N3?:1vb4k?:182M20;2we5h?50;3xL1143td2i?4?:0yK02551zJ736=zf0o?6=4>{I647>{i1l?1<7?tH550?xh>m?0;65rn8g`>5<6sA>4}O<>90qc7jf;295~N3?:1vb4h?:182M20;2we5k?50;3xL1143td2j?4?:0yK02551zJ736=zf0l?6=4>{I647>{i1o?1<7?tH550?xh>n?0;65rn8d`>5<6sA>4}O<>90qc7if;295~N3?:1vbl>?:182M20;2wem=?50;3xL1143tdj51zJ736=zfh:?6=4>{I647>{ii9?1<7?tH550?xhf8?0;65rn`2`>5<6sA>4}O<>90qco?f;295~N3?:1vbl??:182M20;2wem51zJ736=zfh;?6=4>{I647>{ii8?1<7?tH550?xhf9?0;65rn`3`>5<6sA>4}O<>90qco>f;295~N3?:1vbl?4?:0yK02551zJ736=zfh8?6=4>{I647>{ii;?1<7?tH550?xhf:?0;65rn`0`>5<6sA>4}O<>90qco=f;295~N3?:1vbl=?:182M20;2wem>?50;3xL1143tdj??4?:0yK02551zJ736=zfh9?6=4>{I647>{ii:?1<7?tH550?xhf;?0;65rn`1`>5<6sA>4}O<>90qco51zJ736=zfh>?6=4>{I647>{ii=?1<7?tH550?xhf5rn`6`>5<6sA>4}O<>90qco;f;295~N3?:1vbl;?:182M20;2wem8?50;3xL1143tdj9?4?:0yK025?7>51zJ736=zfh??6=4>{I647>{ii5rn`7`>5<6sA>4}O<>90qco:f;295~N3?:1vbl8?:182M20;2wem;?50;3xL1143tdj:?4?:0yK02551zJ736=zfh{I647>{ii??1<7?tH550?xhf>?0;65rn`4`>5<6sA>4}O<>90qco9f;295~N3?:1vbl9?:182M20;2wem:?50;3xL1143tdj;?4?:0yK02551zJ736=zfh=?6=4>{I647>{ii>?1<7?tH550?xhf??0;65rn`5`>5<6sA>4}O<>90qco8f;295~N3?:1vbl6?:182M20;2wem5?50;3xL1143tdj4?4?:0yK02551zJ736=zfh2?6=4>{I647>{ii1?1<7?tH550?xhf0?0;6?290:wE:83:me=?=83;pD99<;|lb5rn`:`>5<6sA>4}O<>90qco7f;295~N3?:1vbl7?:182M20;2wem4?50;3xL1143tdj5?4?:0yK02551zJ736=zfh3?6=4>{I647>{ii0?1<7?tH550?xhf1?0;6?3:1=vF;729~jd??290:wE:83:me5rn`;`>5<6sA>4}O<>90qco6f;295~N3?:1vblo?:182M20;2weml?50;3xL1143tdjm?4?:0yK02551zJ736=zfhk?6=4>{I647>{iih?1<7?tH550?xhfi?0;65rn`c`>5<6sA>4}O<>90qconf;295~N3?:1vbll?:182M20;2wemo?50;3xL1143tdjn?4?:0yK02551zJ736=zfhh?6=4>{I647>{iik?1<7?tH550?xhfj?0;65rn```>5<6sA>4}O<>90qcomf;295~N3?:1vblm?:182M20;2wemn?50;3xL1143tdjo?4?:0yK02551zJ736=zfhi?6=4>{I647>{iij?1<7?tH550?xhfk?0;65rn`a`>5<6sA>4}O<>90qcolf;295~N3?:1vblj?:182M20;2wemi?50;3xL1143tdjh?4?:0yK02551zJ736=zfhn?6=4>{I647>{iim?1<7?tH550?xhfl?0;6"9 > %0:?*rjx&Uhk"hffn]{hk~X=88s?;Q=cmi\73rh91$ekb?40493456712:;<=>?01274>6789:;<=>?0123456789:;<=>?0123456789:;<=>?0123456789:;<=>?0123454<80;0=>5>.130?46=AGZ^X7OKDSC?=?699o1:<7GAPTV9twi`Wlg{xtQ{hsgpl9?=878=7<>5IORVP?vugnUna}zv_ujqavnXizyn~y26:1<12>772@D[YY4rne\ahvsqV~c~h}g_ogdeqc;13:5=n5>0;MVPUSS2{nThlzn_bmvjq:>294:>6?9:HLSQQ112922?IR\Y__6IAN<0794;733821CXZ_UU8gkpr;9>0;2<5=2:0254=52@D[YY4KIQC?5?699;196B[[PTV9@JVF480;2<<4338JJUSS2MCI0>?50?30?64=G\^[YY4KOC>05?69<298>>?=;249MKVR\3nbb1=::1<1?6>c3:y9<=>ig575)07<<8;087GAPTV9@LVE4:0;2<<44;MVPUSS2ME[N1=50?3827=11=1=548;;7;B57=1M=138??>;868=56>:23=86796831?<;>586l231EC^ZT;rqkbYa}efTxe|jsi>;>585<231EC^ZT;rqkbYa}efTxe|jsi]bwvcu|521<3<;;88JJUSS2yxdkRhzlm]wlwct`Vdnklzj<983:4><13E^X][[:ecweZeh}g~747>11c9:>JSSX\^1{Qkauc\gjsi|521<364AEFQE96902KOH_O31?:8EABUI58546OKDSC?7;>GCL[K7;364AEFQE9>9i2KOH_O39;2=<>GCL[K75364AEFQF96902KOH_L31?:8EABUJ58546OKDS@?7;>GCL[H7;3o4AEFQF9>=8720MIJ]B=:==>GTQGIT^HI<;CW1<>DR[VCEJB?4C59@E=G53JO:>6MGEBI\HLEBFZOTXT^J2:AJ0>EKCH>0OAEM3:AOV<=DGDGBXYKK159@KWCXOLDN^LZFOO]JJCI03JXNMYKK1:F1?AO13MCJ0=08;EKB8469?2NBM1?>>69GMD:6:7=0HDO312<4?AOF48>556JFA=36>5803MCJ0<;16:FJE979>2NBM1<16:FJE959>2NBM1:16:FJE939>2NBM1816:FJE919>2NBM1616:FJE9?9>2NBN1>17:FJF9776>1OEO2>1?58@LD;9;4<7IGM<01=3>BNJ5;?2:5KIC>21;169GMG:617<0HDL31?58@LD;:94<7IGM<33=3>BNJ5892:5KIC>17;1908;EKA8739?2NBN1<9>69GMG:5?7=0HDL329<4?AOE4;35:6JFB=0=3>BNJ59;245KIC>05?69?2NBN1=>>79GMG:46?1OEO2;>79GMG:26?1OEO29>79GMG:06?1OEO27>79GMG:>6>1OE]O30?;8@LVF480;2:5KIQC?5;189GMUD;;3:5;6JFPC>0:3=CGH6;2:5KO@>24;169GKD:6<730HBO31483:2=CGH6:9384DNC?5;0384DNC?7;01OCO2>3?58@JD;9=4<7IAM<07=3>BHJ5;=2:5KOC>23;12NDN1?17:FLF9476>1OCO2=1?58@JD;:;4<7IAM<31=3>BHJ58?2:5KOC>11;1;08;EMA8719?2NDN1<7>69GKG:517<0HBL32?58@JD;;9427IAM<2394;119:FLTD:6294<7IA_A=3=3>BHXK6;2:5KOQ@?5;1@fdzo:7J=4GOF1?L653@;97D<=;H1;?LHN\YU;<55FNHVS[57?3@DBX]Q?299JJLRWW9937D@FTQ]30==NF@^[S=;7;HLJPUY7>11BBDZ__15:?LHN\Z^JXH94IOKW[5603@DBXR>>7:KMMQY7:>1BBDZP0258MKOSW9><7D@FT^263>OIA]U;::5FNHV\421?2CEEYQ?A69JJLRX8K=0ECG[_1A4?LHN\V:O;6GAIU]3A2=NF@^T7:KMMQY6:>1BBDZP1258MKOSW8><7D@FT^363>OIA]U:::5FNHV\521?2CEEYQ>A69JJLRX9K=0ECG[_0A4?LHN\V;O;6GAIU]2A2=NF@^T=K94IOKW[7603@DBXR<>7:KMMQY5:>1BBDZP2258MKOSW;><7D@FT^063>OIA]U9::5FNHV\621?2CEEYQ=A69JJLRX:K=0ECG[_3A4?LHN\V8O;6GAIU]1A2=NF@^T>K94IOKW[6603@DBXR=>7:KMMQY4:>1BBDZP3258MKOSW:><7D@FT^163>OIA]U8::5FNHV\72168;HLJPZ5>?2CEEYQ2F^X?QC4:NVP60JR\=UG96C\GNL6?HS_KPi0Ald`rWgqwliik2Gbbb|Yesqjkk4;;O3341=I998?7C??459M55343G;:86@>1968J47>;2D:>95A1327?K759=1E=?<;;O3171=I9;>?7C?=559M57033G;9;95A13:7?K751:1E=>:4N0130>H6;8>0B<==4:L27623468J451<2D:?:=4N060?K72;2D::>5A1618J4>43G;2?6@=029M645H50:1E>4=4N220?K56;2D8>>5A3218J6243G9>?6@<629M725;N08KN7UNEVID@AG\INL\GMCDC?1XCX\LE69PVSGKWH=0__XNL^@7?VUUI=1X__L;;U[SA64<]9%l~k }f.e`|+ekcq%Ftb|Pre]sjqtXojUsc>?01]Qavsk|8997X> gsd-vc)`kq$h`fv Mymq[wbXxg~ySjmPxnp3457XZly~`y?<2:W3+bta&{l$knv!cmi{+H~hzVxoS}`{r^e`[}iu89:9S_k|umv277=R8&myj#|i/fa{*fjlp&GscQ}d^rmpwY`kVrd~=>?3^Pfwpjs9:80Y=!hrg,qb*adp'iggu!Bxnp\vaYwf}xTknQwos2341YUmzgx<==;T2,cw`)zo%lou lljz,I}iuW{nT|cz}_fa\|jt789?T^h}zlu306>S7'nxm"h gbz-gim'Drd~R|k_qlwvZadWqey<=>9_Sgpqir6;;1^<"i}f/pe+be&jf`t"Cwos]q`Zvi|{UloRv`r1233ZTb{|f=><4U1-dvc(un&mht#mcky-N|jtXzmU{by|Pgb]{kw6781UYi~{ct011?P6(o{l%~k!hcy,`hn~(EqeySz|Ppovq[beXpfx;<=>PRdqvhq74:2_;#j|i.sd,cf~)keas#@v`r^uq[uhszVmhSua}0122[Wct}e~:??5Z0.eqb+ta'nis"nbdx.O{kwYpzVzexQhc^zlv567:VXnxb{1208Q5)`zo$yj"ilx/aoo})JpfxT{Qnup\cfYg{:;<>Q]erwop4553\:$kh!rg-dg}(ddbr$Aua}_vp\tkruWniTtb|?016\V`urd};8>6[?/fpe*w`(ojr%oaew/LzlvZquWyd~Ril_ymq4562W[oxyaz>339V4*aun'xm#jmw.bnh|*Kg{U|~R~ats]dgZ~hz9:;:R\jstnw564<]9%l~k }f.e`|+ekcq%Ftb|Pws]sjqtXojUsc>?06]Qavsk|88:7X> gsd-vc)`kq$h`fv re]sjqtXj`d7=3<>;T2,cw`)zo%lou lljz,vaYwf}xTnd`32?02?P6(o{l%~k!hcy,`hn~(zmU{by|Pbhl?7;463\:$kh!rg-dg}(ddbr$~iQnup\flh;<78:7X> gsd-vc)`kq$h`fv re]sjqtXj`d793<>;T2,cw`)zo%lou lljz,vaYwf}xTnd`36?02?P6(o{l%~k!hcy,`hn~(zmU{by|Pbhl?3;463\:$kh!rg-dg}(ddbr$~iQnup\flh;078:7X> gsd-vc)`kq$h`fv re]sjqtXj`d753 gsd-vc)`kq$h`fv re]sjqtXj`dT9?>4U1-dvc(un&mht#mcky-q`Zvi|{UiecQ9219V4*aun'xm#jmw.bnh|*tcWyd~Rlfn^514>S7'nxm"h gbz-gim'{nT|cz}_ckm[=473\:$kh!rg-dg}(ddbr$~iQnup\flhX1;<0Y=!hrg,qb*adp'iggu!}d^rmpwYeagUsc>?0104?P6(o{l%~k!hcy,`hn~(zmU{by|Pbhl\|jt789::>;5Z0.eqb+ta'nis"nbdx.pg[uhszVhbbRv`r123571<]9%l~k }f.e`|+ekcq%yhR~ats]amkYg{:;<1^<"i}f/pe+be&jf`t"|k_qlwvZdnfVrd~=>?2005?P6(o{l%~k!hcy,`hn~(zmU{by|Pbhl\|jt78999;6[?/fpe*w`(ojr%oaew/sf\tkruWkceSua}0120670<]9%l~k }f.e`|+ekcq%yhR~ats]amkYg{:;<9<8;T2,cw`)zo%lou lljz,vaYwf}xTnd`Pxnp34526:?1^<"i}f/pe+be&jf`t"|k_qlwvZdnfVrd~=>?5358Q5)`zo$yj"ilx/aoo})ulVzexQmio]{kw678<;9:6[?/fpe*w`(ojr%oaew/sf\tkruWkceSua}01256f=R8&myj#|i/fa{*fjlp&xoS}`{r^`jjZ~hz9:;:S7'nxm"h gbz-gim'{nT|cz}_ckm[}iu89:==;5Z0.eqb+ta'nis"nbdx.pg[uhszVhbbRv`r123371<]9%l~k }f.e`|+ekcq%yhR~ats]amkYg{:;<:?=0:W3+bta&{l$knv!cmi{+wbXxg~ySjm30?03?P6(o{l%~k!hcy,`hn~(zmU{by|Pgb>2:76<]9%l~k }f.e`|+ekcq%yhR~ats]dg949:91^<"i}f/pe+be&jf`t"|k_qlwvZad4:49<6[?/fpe*w`(ojr%oaew/sf\tkruWni783328Q5)`zo$yj"ilx/aoo})ulVzexQhc=4=65=R8&myj#|i/fa{*fjlp&xoS}`{r^e`828582_;#j|i.sd,cf~)keas#jPpovq[be;078;7X> gsd-vc)`kq$h`fv re]sjqtXoj622>f:W3+bta&{l$knv!cmi{+wbXxg~ySjmP10d8Q5)`zo$yj"ilx/aoo})ulVzexQhc^02b>S7'nxm"h gbz-gim'{nT|cz}_fa\74`<]9%l~k }f.e`|+ekcq%yhR~ats]dgZ26n2_;#j|i.sd,cf~)keas#jPpovq[beX=8l0Y=!hrg,qb*adp'iggu!}d^rmpwY`kV<:j6[?/fpe*w`(ojr%oaew/sf\tkruWniT;f:W3+bta&{l$knv!cmi{+wbXxg~ySjmP9348Q5)`zo$yj"ilx/aoo})ulVzexQhc^cpv`a;878=7X> gsd-vc)`kq$h`fv re]sjqtXojUjkh<0<12>S7'nxm"h gbz-gim'{nT|cz}_fa\evtbo585>;5Z0.eqb+ta'nis"nbdx.pg[uhszVmhSl}}ef>0:70<]9%l~k }f.e`|+ekcq%yhR~ats]dgZgtzlm783<9;T2,cw`)zo%lou lljz,vaYwf}xTknQnssgd8085>2_;#j|i.sd,cf~)keas#jPpovq[beXizxnk181279V4*aun'xm#jmw.bnh|*tcWyd~Ril_`qqab:06;<0Y=!hrg,qb*adp'iggu!}d^rmpwY`kVkx~hi38?05?P6(o{l%~k!hcy,`hn~(zmU{by|Pgb]bwwc`404996[?/fpe*w`(ojr%oaew/sf\tkruWniTm~|jg^211>S7'nxm"h gbz-gim'{nT|cz}_fa\evtboV;996[?/fpe*w`(ojr%oaew/sf\tkruWniTm~|jg^011>S7'nxm"h gbz-gim'{nT|cz}_fa\evtboV9996[?/fpe*w`(ojr%oaew/sf\tkruWniTm~|jg^611>S7'nxm"h gbz-gim'{nT|cz}_fa\evtboV?996[?/fpe*w`(ojr%oaew/sf\tkruWniTm~|jg^411>S7'nxm"h gbz-gim'{nT|cz}_fa\evtboV=996[?/fpe*w`(ojr%oaew/sf\tkruWniTm~|jg^:11>S7'nxm"h gbz-gim'{nT|cz}_fa\evtboV3956[?/fpe*w`(ojr%oaew/sf\tkruWniTm~|jg^f2848512_;#j|i.sd,cf~)keas#jPpovq[beXizxnkRj><3<1=>S7'nxm"h gbz-gim'{nT|cz}_fa\evtboVn:0>0=9:W3+bta&{l$knv!cmi{+wbXxg~ySjmParpfcZb64=4956[?/fpe*w`(ojr%oaew/sf\tkruWniTm~|jg^f2808512_;#j|i.sd,cf~)keas#jPpovq[beXizxnkRj><7<1=>S7'nxm"h gbz-gim'{nT|cz}_fa\evtboVn:0:0=9:W3+bta&{l$knv!cmi{+wbXxg~ySjmParpfcZb6414956[?/fpe*w`(ojr%oaew/sf\tkruWniTm~|jg^f28<8502_;#j|i.sd,cf~)keas#jPpovq[beXizxnkRj>_00;?P6(o{l%~k!hcy,`hn~(zmU{by|Pgb]bwwc`Wm;T>?64U1-dvc(un&mht#mcky-q`Zvi|{UloRo|rde\`4Y4:11^<"i}f/pe+be&jf`t"|k_qlwvZadWhyyijQk1^61<>S7'nxm"h gbz-gim'{nT|cz}_fa\evtboVn:S8<7;T2,cw`)zo%lou lljz,vaYwf}xTknQnssgd[a7X>;20Y=!hrg,qb*adp'iggu!}d^rmpwY`kVkx~hiPd0]46==R8&myj#|i/fa{*fjlp&xoS}`{r^e`[duumnUo=R6=8:W3+bta&{l$knv!cmi{+wbXxg~ySjmParpfcZb6W08>7X> gsd-vc)`kq$h`fv re]sjqtXojUsc>?0106?P6(o{l%~k!hcy,`hn~(zmU{by|Pgb]{kw67888>7X> gsd-vc)`kq$h`fv re]sjqtXojUsc>?0306?P6(o{l%~k!hcy,`hn~(zmU{by|Pgb]{kw678:8>7X> gsd-vc)`kq$h`fv re]sjqtXojUsc>?0506?P6(o{l%~k!hcy,`hn~(zmU{by|Pgb]{kw678<8>7X> gsd-vc)`kq$h`fv re]sjqtXojUsc>?0706?P6(o{l%~k!hcy,`hn~(zmU{by|Pgb]{kw678>8>7X> gsd-vc)`kq$h`fv re]sjqtXojUsc>?0902?P6(o{l%~k!hcy,`hn~({U{by|Pbhl?4;463\:$kh!rg-dg}(ddbr${Qnup\flh;978:7X> gsd-vc)`kq$h`fv ws]sjqtXj`d7>3<>;T2,cw`)zo%lou lljz,swYwf}xTnd`33?02?P6(o{l%~k!hcy,`hn~({U{by|Pbhl?0;463\:$kh!rg-dg}(ddbr${Qnup\flh;=78:7X> gsd-vc)`kq$h`fv ws]sjqtXj`d7:3<>;T2,cw`)zo%lou lljz,swYwf}xTnd`37?02?P6(o{l%~k!hcy,`hn~({U{by|Pbhl?<;473\:$kh!rg-dg}(ddbr${Qnup\flhX8;:0Y=!hrg,qb*adp'iggu!xr^rmpwYeagU:>=5Z0.eqb+ta'nis"nbdx.uq[uhszVhbbR<=0:W3+bta&{l$knv!cmi{+rtXxg~ySoga_203?P6(o{l%~k!hcy,`hn~({U{by|Pbhl\076<]9%l~k }f.e`|+ekcq%|~R~ats]amkY2:91^<"i}f/pe+be&jf`t"y}_qlwvZdnfV<9<6[?/fpe*w`(ojr%oaew/vp\tkruWkceS: gsd-vc)`kq$h`fv ws]sjqtXj`dTtb|?012263=R8&myj#|i/fa{*fjlp&}yS}`{r^`jjZ~hz9:;=?94U1-dvc(un&mht#mcky-tvZvi|{UiecQwos234475>2_;#j|i.sd,cf~)keas#z|Ppovq[goiWqey<=>=269V4*aun'xm#jmw.bnh|*quWyd~Rlfn^zlv567:88=7X> gsd-vc)`kq$h`fv ws]sjqtXj`dTtb|?01113>S7'nxm"h gbz-gim'~xT|cz}_ckm[}iu89:8>?84U1-dvc(un&mht#mcky-tvZvi|{UiecQwos2341403\:$kh!rg-dg}(ddbr${Qnup\flhXpfx;<=:>279V4*aun'xm#jmw.bnh|*quWyd~Rlfn^zlv567=;=0Y=!hrg,qb*adp'iggu!xr^rmpwYeagUsc>?04312>S7'nxm"h gbz-gim'~xT|cz}_ckm[}iu89:=>n5Z0.eqb+ta'nis"nbdx.uq[uhszVhbbRv`r123247X[^:9o6[?/fpe*w`(ojr%oaew/vp\tkruWkceSua}012554YT_88<7X> gsd-vc)`kq$h`fv ws]sjqtXj`dTtb|?014163=R8&myj#|i/fa{*fjlp&}yS}`{r^`jjZ~hz9:;;?94U1-dvc(un&mht#mcky-tvZvi|{UiecQwos23427582_;#j|i.sd,cf~)keas#z|Ppovq[be;878;7X> gsd-vc)`kq$h`fv ws]sjqtXoj6:2?>4U1-dvc(un&mht#mcky-tvZvi|{Ulo1<1219V4*aun'xm#jmw.bnh|*quWyd~Ril<2<14>S7'nxm"h gbz-gim'~xT|cz}_fa?0;473\:$kh!rg-dg}(ddbr${Qnup\cf:26;:0Y=!hrg,qb*adp'iggu!xr^rmpwY`k5<5>=5Z0.eqb+ta'nis"nbdx.uq[uhszVmh0:0=0:W3+bta&{l$knv!cmi{+rtXxg~ySjm38?3e?P6(o{l%~k!hcy,`hn~({U{by|Pgb]35c=R8&myj#|i/fa{*fjlp&}yS}`{r^e`[47a3\:$kh!rg-dg}(ddbr${Qnup\cfY59o1^<"i}f/pe+be&jf`t"y}_qlwvZadW:;m7X> gsd-vc)`kq$h`fv ws]sjqtXojU?=k5Z0.eqb+ta'nis"nbdx.uq[uhszVmhS8?i;T2,cw`)zo%lou lljz,swYwf}xTknQ91g9V4*aun'xm#jmw.bnh|*quWyd~Ril_63e?P6(o{l%~k!hcy,`hn~({U{by|Pgb];63=R8&myj#|i/fa{*fjlp&}yS}`{r^e`[duumn6;2?84U1-dvc(un&mht#mcky-tvZvi|{UloRo|rde?5;413\:$kh!rg-dg}(ddbr${Qnup\cfYf{{ol0?0=6:W3+bta&{l$knv!cmi{+rtXxg~ySjmParpfc959:?1^<"i}f/pe+be&jf`t"y}_qlwvZadWhyyij2;>348Q5)`zo$yj"ilx/aoo})pzVzexQhc^cpv`a;=78=7X> gsd-vc)`kq$h`fv ws]sjqtXojUjkh<7<12>S7'nxm"h gbz-gim'~xT|cz}_fa\evtbo5=5>;5Z0.eqb+ta'nis"nbdx.uq[uhszVmhSl}}ef>;:73<]9%l~k }f.e`|+ekcq%|~R~ats]dgZgtzlmT?;4U1-dvc(un&mht#mcky-tvZvi|{UloRo|rde\773<]9%l~k }f.e`|+ekcq%|~R~ats]dgZgtzlmT8?;4U1-dvc(un&mht#mcky-tvZvi|{UloRo|rde\173<]9%l~k }f.e`|+ekcq%|~R~ats]dgZgtzlmT:?;4U1-dvc(un&mht#mcky-tvZvi|{UloRo|rde\373<]9%l~k }f.e`|+ekcq%|~R~ats]dgZgtzlmT4?74U1-dvc(un&mht#mcky-tvZvi|{UloRo|rde\`4:76;30Y=!hrg,qb*adp'iggu!xr^rmpwY`kVkx~hiPd0>2:7?<]9%l~k }f.e`|+ekcq%|~R~ats]dgZgtzlmTh<2=>3;8Q5)`zo$yj"ilx/aoo})pzVzexQhc^cpv`aXl8682?74U1-dvc(un&mht#mcky-tvZvi|{UloRo|rde\`4:36;30Y=!hrg,qb*adp'iggu!xr^rmpwY`kVkx~hiPd0>6:7?<]9%l~k }f.e`|+ekcq%|~R~ats]dgZgtzlmTh<29>3;8Q5)`zo$yj"ilx/aoo})pzVzexQhc^cpv`aXl86<2?74U1-dvc(un&mht#mcky-tvZvi|{UloRo|rde\`4:?6;20Y=!hrg,qb*adp'iggu!xr^rmpwY`kVkx~hiPd0]36==R8&myj#|i/fa{*fjlp&}yS}`{r^e`[duumnUo=R?=8:W3+bta&{l$knv!cmi{+rtXxg~ySjmParpfcZb6W;837X> gsd-vc)`kq$h`fv ws]sjqtXojUjkh_e3\77><]9%l~k }f.e`|+ekcq%|~R~ats]dgZgtzlmTh85Z0.eqb+ta'nis"nbdx.uq[uhszVmhSua}012360=R8&myj#|i/fa{*fjlp&}yS}`{r^e`[}iu89::>85Z0.eqb+ta'nis"nbdx.uq[uhszVmhSua}012160=R8&myj#|i/fa{*fjlp&}yS}`{r^e`[}iu89:8>85Z0.eqb+ta'nis"nbdx.uq[uhszVmhSua}012760=R8&myj#|i/fa{*fjlp&}yS}`{r^e`[}iu89:>>85Z0.eqb+ta'nis"nbdx.uq[uhszVmhSua}012560=R8&myj#|i/fa{*fjlp&}yS}`{r^e`[}iu89:<>l5Z0.eqb+ta'nf;"j gs3-vcqa|&XJAR\K_DL\BR@S9;i0Y=!hrg,qb*ak8'xo#j|>.sdtbq)UIDUYHRKA_GUEP4Y6:j1^<"i}f/pe+bj7&{n$k?!rguep*TFEVXOSH@PFVDW5Z4512_;#j|i.sd,ci6)zm%l~< }fvdw+WGJW[OLCXZPEO307>S7'nxm"h gm2-va)`z8$yjzh{/bwqvZ`pn}Uxxlzj_GQN[C@c9:<0Y=!hrg,qb*ak8'xo#j|>.sdtbq)d}{xTjzh{_rvbp`YA[DUMJi?"Io1;?P6(o{l%~k!hl1,q`*au9'xm{kz ctpq[cqa|VymykPFRO\BCb6%@d:=>=4U1-dvc(un&mg<#|k/fp2*w`pn}%hy|Pfvdw[vrf|lUM_@QIFe002>S7'nxm"h gm2-va)`z8$yjzh{/bwqvZ`pn}Uxxlzj_GQN[C@c:$Ce?55Z0.eqb+ta'nf;"j gs3-vcqa|&i~~Qiwgv\wqgsmVLXARHId3/Jj47502_;#j|i.sd,ci6)zm%l~< }fvdw+`kw|pUm{kzPfc04?P6(o{l%~k!hl1,q`*au9'xm{kz elrw}Z`pn}Ub>h5Z0.eqb+ta'nf;"j gs3-vcqa|&of|ywPfvdw[lYhz9:;!re-dvdu)zz~x#n> c`pq}kcs494956[?/fpe*w`(oe:%~i!hr`q-vvrt'j:$ol|}yogw848512_;#j|i.sd,ci6)zm%l~l}!rrvp+f6(khxyuck{<3<1=>S7'nxm"h gm2-va)`zhy%~~z|/b2,gdtuqgo0>0=f:W3+bta&{l$ka>!re-dvdu)zz~x#n> glw{*bk\8T$la< b13d8Q5)`zo$yj"ic0/pg+btf{'xxx~!l0.enq}(`eR;V"jc|.lq1b>S7'nxm"h gm2-va)`zhy%~~z|/b2,chs&ngP>P hmr,nw7`<]9%l~k }f.eo4+tc'nxj#||tr-`4*aj}q$laV=R.fop*hu5n2_;#j|i.sd,ci6)zm%l~l}!rrvp+f6(ods"jcT4\,div(j{;90Y=!hrg,qb*ak8'xo#j|ns/pppv)d8&|:0=0=3:W3+bta&{l$ka>!re-dvdu)zz~x#n> v0>2:75<]9%l~k }f.eo4+tc'nxj#||tr-`4*p64;49?6[?/fpe*w`(oe:%~i!hr`q-vvrt'j:$z<2<>318Q5)`zo$yj"ic0/pg+btf{'xxx~!l0.t28185j2_;#j|i.sd,ci6)zm%l~l}!rrvp+f6(~8U;Sl`k012357d<]9%l~k }f.eo4+tc'nxj#||tr-`4*p6W8Ujbi>?0131f>S7'nxm"h gm2-va)`zhy%~~z|/b2,r4Y5Whdo<=>?13`8Q5)`zo$yj"ic0/pg+btf{'xxx~!l0.t2[6Yffm:;<=?=b:W3+bta&{l$ka>!re-dvdu)zz~x#n> v0]7[dhc89:;=?74U1-dvc(un&mg<#|k/fpbw+tt|z%h="mnrs{maq:76;30Y=!hrg,qb*ak8'xo#j|ns/pppv)d9&ij~waeu>2:7?<]9%l~k }f.eo4+tc'nxj#||tr-`5*efz{seiy2=>3;8Q5)`zo$yj"ic0/pg+btf{'xxx~!l1.abvwim}682?h4U1-dvc(un&mg<#|k/fpbw+tt|z%h="ibuy,di^6Z&ng:"`?=f:W3+bta&{l$ka>!re-dvdu)zz~x#n? glw{*bk\9T$la~ bs3d8Q5)`zo$yj"ic0/pg+btf{'xxx~!l1.enq}(`eR8V"jc|.lq1b>S7'nxm"h gm2-va)`zhy%~~z|/b3,chs&ngP?P hmr,nw7`<]9%l~k }f.eo4+tc'nxj#||tr-`5*aj}q$laV:R.fop*hu5;2_;#j|i.sd,ci6)zm%l~l}!rrvp+f7(~86;2?=4U1-dvc(un&mg<#|k/fpbw+tt|z%h="x><0<17>S7'nxm"h gm2-va)`zhy%~~z|/b3,r4:56;90Y=!hrg,qb*ak8'xo#j|ns/pppv)d9&|:0>0=3:W3+bta&{l$ka>!re-dvdu)zz~x#n? v0>7:7d<]9%l~k }f.eo4+tc'nxj#||tr-`5*p6W9Ujbi>?0131f>S7'nxm"h gm2-va)`zhy%~~z|/b3,r4Y6Whdo<=>?13`8Q5)`zo$yj"ic0/pg+btf{'xxx~!l1.t2[7Yffm:;<=?=b:W3+bta&{l$ka>!re-dvdu)zz~x#n? v0]0[dhc89:;=?l4U1-dvc(un&mg<#|k/fpbw+tt|z%h="x>_5]bja6789;9<6[?/fpe*w`(oe:%~i!hr`q-vvrt'jef|=>4U1-dvc(un&mg<#|k/fpbw+tt|z%ym`Qjmqvz[cdXaVey<=>?309V4*aun'xm#jb?.sf,cwgt&{y"|nm^gntqXnkUbSb|?012266=R8&myj#|i/fn3*wb(zyd~"Clotlw[firf}8?7X> gsd-vc)`d9$yh"|nup,Ifirf}Uhcx`{1368Q5)`zo$yj"ic0/pg+wvi|{%Fob{at^alqkr5:=1^<"i}f/pe+bj7&{n$~}`{r.O`kphsWje~by==4:W3+bta&{l$ka>!re-qtkru'DidyczPcnwmp1433\:$kh!rg-dh5(ul&x{by| MbmvjqYdg|d9?:4U1-dvc(un&mg<#|k/srmpw)JkfexRm`uov561=R8&myj#|i/fn3*wb(zyd~"Clotlw[firf}=986[?/fpe*w`(oe:%~i!}povq+Heh}g~Tob{at907?P6(o{l%~k!hl1,q`*twf}x$Anaznu]`kphs1;30Y=!hrg,qb*ak8'xo#~ats-Ngjsi|VidyczPcx>3:7e<]9%l~k }f.eo4+tc'{zex!BcnwmpZeh}g~Tot2?>^pw6<=R8&myj#|i/fn3*wb(zyd~"Clotlw[firf}Uhu1?12b9V4*aun'xm#jb?.sf,vuhsz&Ghcx`{_bmvjqYdq5;5Sz=9:W3+bta&{l$ka>!re-qtkru'DidyczPcnwmpZe~4;49o6[?/fpe*w`(oe:%~i!}povq+Heh}g~Tob{at^az878Xz}827X> gsd-vc)`d9$yh"|nup,Ifirf}Uhcx`{_b{?7;4d3\:$kh!rg-dh5(ul&x{by| MbmvjqYdg|dSnw33?]qp7?<]9%l~k }f.eo4+tc'{zex!BcnwmpZeh}g~Tot2;>3a8Q5)`zo$yj"ic0/pg+wvi|{%Fob{at^alqkrXkp6?2R|{289V4*aun'xm#jb?.sf,vuhsz&Ghcx`{_bmvjqYdq5?5>n5Z0.eqb+ta'nf;"j rqlwv*Kdg|dSnaznu]`}939W{~956[?/fpe*w`(oe:%~i!}povq+Heh}g~Tob{at^az8385k2_;#j|i.sd,ci6)zm%y|cz}/LalqkrXkfexRmv<7<\vq4>3\:$kh!rg-dh5(ul&x{by| MbmvjqYdg|dSnw37?0`?P6(o{l%~k!hl1,q`*twf}x$Anaznu]`kphsWjs7;3Q}t3;8Q5)`zo$yj"ic0/pg+wvi|{%Fob{at^alqkrXkp632?m4U1-dvc(un&mg<#|k/srmpw)JkfexRm`uov\g|:?6Vx>l5Z0.eqb+ta'nf;"j rqlwv*Kdg|dSnaznu]{kw:76;k0Y=!hrg,qb*ak8'xo#~ats-Ngjsi|VidyczPxnp?5;4f3\:$kh!rg-dh5(ul&x{by| MbmvjqYdg|dSua}<3<1e>S7'nxm"h gm2-va)uxg~y#@m`uov\gjsi|Vrd~1=12`9V4*aun'xm#jb?.sf,vuhsz&Ghcx`{_bmvjqYg{6?2?o4U1-dvc(un&mg<#|k/srmpw)JkfexRm`uov\|jt;=78j7X> gsd-vc)`d9$yh"|nup,Ifirf}Uhcx`{_ymq8385i2_;#j|i.sd,ci6)zm%y|cz}/LalqkrXkfexRv`r=5=6d=R8&myj#|i/fn3*wb(zyd~"Clotlw[firf}Usc27>3c8Q5)`zo$yj"ic0/pg+wvi|{%Fob{at^alqkrXpfx75311g9V4*aun'xm#jb?.sf,vuhsz&idycz31?3e?P6(o{l%~k!hl1,q`*twf}x$ob{at=0=5c=R8&myj#|i/fn3*wb(zyd~"m`uov?7;7a3\:$kh!rg-dh5(ul&x{by| cnwmp9299o1^<"i}f/pe+bj7&{n$~}`{r.alqkr;=7;m7X> gsd-vc)`d9$yh"|nup,gjsi|5<5=k5Z0.eqb+ta'nf;"j rqlwv*eh}g~7;3?i;T2,cw`)zo%l`= }d.psjqt(kfex1611g9V4*aun'xm#jb?.sf,vuhsz&idycz39?3f?P6(o{l%~k!hl1,q`*twf}x$ob{at^22a>S7'nxm"h gm2-va)uxg~y#naznu]25`=R8&myj#|i/fn3*wb(zyd~"m`uov\64c<]9%l~k }f.eo4+tc'{zex!lotlw[67b3\:$kh!rg-dh5(ul&x{by| cnwmpZ26m2_;#j|i.sd,ci6)zm%y|cz}/bmvjqY29l1^<"i}f/pe+bj7&{n$~}`{r.alqkrX>8o0Y=!hrg,qb*ak8'xo#~ats-`kphsW>;n7X> gsd-vc)`d9$yh"|nup,gjsi|V2:i6[?/fpe*w`(oe:%~i!}povq+firf}U2>?5Z0.eqb+ta'nf;"j rqlwv*eh}g~Th<2?>308Q5)`zo$yj"ic0/pg+wvi|{%hcx`{_e3?5;453\:$kh!rg-dh5(ul&x{by| cnwmpZb64;49>6[?/fpe*w`(oe:%~i!}povq+firf}Uo=1=1239V4*aun'xm#jb?.sf,vuhsz&idyczPd0>7:74<]9%l~k }f.eo4+tc'{zex!lotlw[a7;=7897X> gsd-vc)`d9$yh"|nup,gjsi|Vn:0;0=2:W3+bta&{l$ka>!re-qtkru'je~byQk1=5=67=R8&myj#|i/fn3*wb(zyd~"m`uov\`4:?6;80Y=!hrg,qb*ak8'xo#~ats-`kphsWm;753<>;T2,cw`)zo%l`= }d.psjqt(kfexRj>_102?P6(o{l%~k!hl1,q`*twf}x$ob{at^f2[4463\:$kh!rg-dh5(ul&x{by| cnwmpZb6W;8:7X> gsd-vc)`d9$yh"|nup,gjsi|Vn:S><>;T2,cw`)zo%l`= }d.psjqt(kfexRj>_502?P6(o{l%~k!hl1,q`*twf}x$ob{at^f2[0463\:$kh!rg-dh5(ul&x{by| cnwmpZb6W?8:7X> gsd-vc)`d9$yh"|nup,gjsi|Vn:S:<>;T2,cw`)zo%l`= }d.psjqt(kfexRj>_902?P6(o{l%~k!hl1,q`*twf}x$ob{at^f2[<4>3\:$kh!rg-dh5(pz&m|m~ xsuq,g4)di{xrbhz30?0:?P6(o{l%~k!hl1,tv*apiz$|y} c0-`ewt~fl~7=3<6;T2,cw`)zo%l`= xr.etev(p{}y$o gsd-vc)`d9$|~"ixar,twqu(k8%hm|vndv?7;4a3\:$kh!rg-dh5(pz&m|m~ xsuq,g4)`e|r%k`U?]/en5+k6:o1^<"i}f/pe+bj7&~x$kzo|.vqww*e6'ng~t#ib[0_-chu)ez8m7X> gsd-vc)`d9$|~"ixar,twqu(k8%laxv!glY1Y+aj{'gx>k5Z0.eqb+ta'nf;"z| gvcp*rus{&i:#jczx/en_6[)ody%a~/w3?4;443\:$kh!rg-dh5(pz&m|m~ xsuq,g4)q95;5>>5Z0.eqb+ta'nf;"z| gvcp*rus{&i:#{?32?00?P6(o{l%~k!hl1,tv*apiz$|y} c0-u5959::1^<"i}f/pe+bj7&~x$kzo|.vqww*e6';783o5Z0.eqb+ta'nf;"z| gvcp*rus{&i:#{?P1^cm`567888i7X> gsd-vc)`d9$|~"ixar,twqu(k8%}=RTbbz?01226<=R8&myj#|i/fn3*rt(o~kx"z}{s.a1+fguzpdnx1>1289V4*aun'xm#jb?.vp,crgt&~y"m=/bcqv|hb|5;5>45Z0.eqb+ta'nf;"z| gvcp*rus{&i9#no}rxlfp949:01^<"i}f/pe+bj7&~x$kzo|.vqww*e5'jky~t`jt=1=6c=R8&myj#|i/fn3*rt(o~kx"z}{s.a1+bkrp'mfW=S!gl3-i44a3\:$kh!rg-dh5(pz&m|m~ xsuq,g7)`e|r%k`U>]/enw+kt:o1^<"i}f/pe+bj7&~x$kzo|.vqww*e5'ng~t#ib[3_-chu)ez8m7X> gsd-vc)`d9$|~"ixar,twqu(k;%laxv!glY0Y+aj{'gx>k5Z0.eqb+ta'nf;"z| gvcp*rus{&i9#jczx/en_1[)ody%a~<<;T2,cw`)zo%l`= xr.etev(p{}y$o?!y1=2=66=R8&myj#|i/fn3*rt(o~kx"z}{s.a1+s7;97887X> gsd-vc)`d9$|~"ixar,twqu(k;%}=1<1229V4*aun'xm#jb?.vp,crgt&~y"m=/w3?7;443\:$kh!rg-dh5(pz&m|m~ xsuq,g7)q95>5>o5Z0.eqb+ta'nf;"z| gvcp*rus{&i9#{?P0^cm`567888i7X> gsd-vc)`d9$|~"ixar,twqu(k;%}=R?Paof34566:k1^<"i}f/pe+bj7&~x$kzo|.vqww*e5';T>Road123444e3\:$kh!rg-dh5(pz&m|m~ xsuq,g7)q9V9Tmcj?01226g=R8&myj#|i/fn3*rt(o~kx"z}{s.a1+s7X?0003?P6(o{l%~k!hl1,tv*apiz$|y} cnos576<]9%l~k }f.eo4+qu'n}j#y|tr-`khv5:11^<"i}f/pe+bj7&~x$kzo|.vqww*tfeVl~`aQib^k11>S7'nxm"h gm2-sw)`hy%{~z|/scn[cskdVc9o6[?/fpe*w`(oe:%{!hw`q-svrt'{kfSk{cl^k\kw67898o7X> gsd-vc)`d9$|~"ixar,twqu(zhgTjxbc_h]lv56788;o7X> gsd-vc)`d9$|~"|nm^uq[`hXa8887X> gsd-vc)`d9$|~"ynup,Ifirf}Uhcx`{259V4*aun'xm#jb?.vp,suhsz&Ghcx`{_bmvjq75<2_;#j|i.sd,ci6){%||cz}/LalqkrXkfex?<;;T2,cw`)zo%l`= xr.usjqt(Eje~byQlotlw772<]9%l~k }f.eo4+qu'~zex!BcnwmpZeh}g~?>95Z0.eqb+ta'nf;"z| wqlwv*Kdg|dSnaznu710>S7'nxm"h gm2-sw)pxg~y#@m`uov\gjsi|?8?7X> gsd-vc)`d9$|~"ynup,Ifirf}Uhcx`{7368Q5)`zo$yj"ic0/uq+rvi|{%Fob{at^alqkr?:01^<"i}f/pe+bj7&~x${}`{r.O`kphsWje~byQly=2=6f=R8&myj#|i/fn3*rt(yd~"Clotlw[firf}Uhu1>1_sv1=>S7'nxm"h gm2-sw)pxg~y#@m`uov\gjsi|Vir0<0=c:W3+bta&{l$ka>!ws-ttkru'DidyczPcnwmpZe~484T~y<6;T2,cw`)zo%l`= xr.usjqt(Eje~byQlotlw[f;:78h7X> gsd-vc)`d9$|~"ynup,Ifirf}Uhcx`{_b{?6;Yu|;30Y=!hrg,qb*ak8'}y#z~ats-Ngjsi|VidyczPcx>0:7e<]9%l~k }f.eo4+qu'~zex!BcnwmpZeh}g~Tot2<>^pw6<=R8&myj#|i/fn3*rt(yd~"Clotlw[firf}Uhu1:12b9V4*aun'xm#jb?.vp,suhsz&Ghcx`{_bmvjqYdq5>5Sz=9:W3+bta&{l$ka>!ws-ttkru'DidyczPcnwmpZe~4<49o6[?/fpe*w`(oe:%{!xpovq+Heh}g~Tob{at^az808Xz}827X> gsd-vc)`d9$|~"ynup,Ifirf}Uhcx`{_b{?2;4d3\:$kh!rg-dh5(pz&}{by| MbmvjqYdg|dSnw36?]qp7?<]9%l~k }f.eo4+qu'~zex!BcnwmpZeh}g~Tot28>3a8Q5)`zo$yj"ic0/uq+rvi|{%Fob{at^alqkrXkp6<2R|{2`9V4*aun'xm#jb?.vp,suhsz&Ghcx`{_bmvjqYg{6;2?o4U1-dvc(un&mg<#y}/vrmpw)JkfexRm`uov\|jt;978j7X> gsd-vc)`d9$|~"ynup,Ifirf}Uhcx`{_ymq8785i2_;#j|i.sd,ci6){%||cz}/LalqkrXkfexRv`r=1=6d=R8&myj#|i/fn3*rt(yd~"Clotlw[firf}Usc2;>3c8Q5)`zo$yj"ic0/uq+rvi|{%Fob{at^alqkrXpfx793;:7b<]9%l~k }f.eo4+qu'~zex!BcnwmpZeh}g~Ttb|38?]qp4`<]9%l~k }f.eo4+qu'~zex!lotlw8586n2_;#j|i.sd,ci6){%||cz}/bmvjq:668l0Y=!hrg,qb*ak8'}y#z~ats-`kphs4;4:j6[?/fpe*w`(oe:%{!xpovq+firf}682f:W3+bta&{l$ka>!ws-ttkru'je~by2:>0d8Q5)`zo$yj"ic0/uq+rvi|{%hcx`{<7<2b>S7'nxm"h gm2-sw)pxg~y#naznu>4:4`<]9%l~k }f.eo4+qu'~zex!lotlw8=86m2_;#j|i.sd,ci6){%||cz}/bmvjqY79l1^<"i}f/pe+bj7&~x${}`{r.alqkrX98o0Y=!hrg,qb*ak8'}y#z~ats-`kphsW;;n7X> gsd-vc)`d9$|~"ynup,gjsi|V9:i6[?/fpe*w`(oe:%{!xpovq+firf}U?=h5Z0.eqb+ta'nf;"z| wqlwv*eh}g~T9e:W3+bta&{l$ka>!ws-ttkru'je~byQ7239V4*aun'xm#jb?.vp,suhsz&idyczPd0>3:74<]9%l~k }f.eo4+qu'~zex!lotlw[a7;97897X> gsd-vc)`d9$|~"ynup,gjsi|Vn:0?0=2:W3+bta&{l$ka>!ws-ttkru'je~byQk1=1=67=R8&myj#|i/fn3*rt(yd~"m`uov\`4:36;80Y=!hrg,qb*ak8'}y#z~ats-`kphsWm;793<=;T2,cw`)zo%l`= xr.usjqt(kfexRj><7<16>S7'nxm"h gm2-sw)pxg~y#naznu]g5919:;1^<"i}f/pe+bj7&~x${}`{r.alqkrXl8632??4U1-dvc(un&mg<#y}/vrmpw)dg|dSi?P0338Q5)`zo$yj"ic0/uq+rvi|{%hcx`{_e3\577<]9%l~k }f.eo4+qu'~zex!lotlw[a7X:;;0Y=!hrg,qb*ak8'}y#z~ats-`kphsWm;T???4U1-dvc(un&mg<#y}/vrmpw)dg|dSi?P4338Q5)`zo$yj"ic0/uq+rvi|{%hcx`{_e3\177<]9%l~k }f.eo4+qu'~zex!lotlw[a7X>;;0Y=!hrg,qb*ak8'}y#z~ats-`kphsWm;T;??4U1-dvc(un&mg<#y}/vrmpw)dg|dSi?P8308Q5)`zo$yj"ic0/uq+rvi|{%hcx`{_e0?4;453\:$kh!rg-dh5(pz&}{by| cnwmpZb54849>6[?/fpe*w`(oe:%{!xpovq+firf}Uo>1<1239V4*aun'xm#jb?.vp,suhsz&idyczPd3>0:74<]9%l~k }f.eo4+qu'~zex!lotlw[a4;<7897X> gsd-vc)`d9$|~"ynup,gjsi|Vn9080=2:W3+bta&{l$ka>!ws-ttkru'je~byQk2=4=67=R8&myj#|i/fn3*rt(yd~"m`uov\`7:06;80Y=!hrg,qb*ak8'}y#z~ats-`kphsWm8743<>;T2,cw`)zo%l`= xr.usjqt(kfexRj=_102?P6(o{l%~k!hl1,tv*qwf}x$ob{at^f1[4463\:$kh!rg-dh5(pz&}{by| cnwmpZb5W;8:7X> gsd-vc)`d9$|~"ynup,gjsi|Vn9S><>;T2,cw`)zo%l`= xr.usjqt(kfexRj=_502?P6(o{l%~k!hl1,tv*qwf}x$ob{at^f1[0463\:$kh!rg-dh5(pz&}{by| cnwmpZb5W?8:7X> gsd-vc)`d9$|~"ynup,gjsi|Vn9S:<>;T2,cw`)zo%l`= xr.usjqt(kfexRj=_935?P6(o{l%~k!bel-gkprXaV:::6[?/fpe*w`(elg$hb{{_h]252=R8&myj#|i/lgn+air|VcT==?8;T2,cw`)zo%fi`!kotv\mZ769>1^<"i}f/pe+hcj'me~xRgP1334?P6(o{l%~k!bel-gkprXaV;8=:5Z0.eqb+ta'dof#iazt^k\51703\:$kh!rg-nah)cg|~TeR?:169V4*aun'xm#`kb/emvpZoX9?;<7X> gsd-vc)jmd%ocxzPi^3453=R8&myj#|i/lgn+air|VcT><84U1-dvc(un&gna"j`uu]j[6713\:$kh!rg-nah)cg|~TeR:>6:W3+bta&{l$ahc dnww[lY29?1^<"i}f/pe+hcj'me~xRgP6048Q5)`zo$yj"cjm.flqqYnW>;=7X> gsd-vc)jmd%ocxzPi^:22>S7'nxm"h mdo,`jssW`U2=45Z0.eqb+ta'dof#iazt^ofi9699h1^<"i}f/pe+hcj'me~xRcjm=33:4g<]9%l~k }f.ofi*bh}}Ufi`2>1?3b?P6(o{l%~k!bel-gkprXelg7=?0>a:W3+bta&{l$ahc dnww[hcj4895=l5Z0.eqb+ta'dof#iazt^ofi97368k0Y=!hrg,qb*kbe&ndyyQbel>21;7f3\:$kh!rg-nah)cg|~Tahc317<2e>S7'nxm"h mdo,`jssWdof0<91189V4*aun'xm#`kb/emvpZkbe5;5=45Z0.eqb+ta'dof#iazt^ofi949901^<"i}f/pe+hcj'me~xRcjm=1=5<=R8&myj#|i/lgn+air|Vgna1:1189V4*aun'xm#`kb/emvpZkbe5?5=45Z0.eqb+ta'dof#iazt^ofi909901^<"i}f/pe+hcj'me~xRcjm=5=5<=R8&myj#|i/lgn+air|Vgna161189V4*aun'xm#`kb/emvpZkbe535:h5Z0.eqb+ta'dof#jlb.f`nc+aeenk%bjklc/`nc*dkcVgnaRijndpbpjt(~hfbh#m|ts-qehjhgyQ;Q#|nm/p,r7Yig`dbx#|nm.fs73~60'xja gsd-vc)uidUyhRka169V4*aun'xm#ob_sgdkprXmg;87X> gsd-vc)uidU|~Rka1e9V4*aun'xm#}{bmi,vaYu{}Ujkh219V4*aun'xm#}{bmi,vaYu{}Ujkh_e314>S7'nxm"h rrvahn)ulVxxxRo|rde\`77d3\:$kh!rg-qwqdkc&xoS}{_bmnf4b<]9%l~k }f.pppgjl'{nT~~zPcnoa54c<]9%l~k }f.pppgjl'{nT~~zPrde?4;7b3\:$kh!rg-qwqdkc&xoS}{_sgd8486m2_;#j|i.sd,vvredb%yhR||t^pfc9499m1^<"i}f/pe+wusjea$~iQ}su]qabY79m1^<"i}f/pe+wusjea$~iQ}su]qabY69m1^<"i}f/pe+wusjea$~iQ}su]qabY59m1^<"i}f/pe+wusjea${Q}su]bwwc`:91^<"i}f/pe+wusjea${Q}su]bwwc`Wm;9<6[?/fpe*w`(zz~i`f!xr^pppZgtzlmTh??l;T2,cw`)zo%yylck.uq[wusWjefnd:W3+bta&{l$~~zmlj-tvZtt|VxnkR>>d:W3+bta&{l$~~zmlj-tvZtt|VxnkR?n;TQFVZGKAHYh7X]JR^TJWLDKM:1]ON74VHGT[Q_WM:1\IL=4WD@a?RTN\LUME_][c:UQMQCXEFNNSLm4WSKWAZKHLLUI=i5WIMKM\(^CJ):%=-][UC"3*4&F[JCB96V@RB[5?]USD@H<7U][_FLG3>^T\V\HOo5W_BMQAZOINF<0TilPIed8\anXX{cfZh||inl24>^ceVGjfb|Yesqjkk773QnfS@gaosTfvvohfj1j``a|t^gntqe3hffc~zPftno2>dfkb{h6lncjws[hguclx87nbdd:fbpdYdg|d$='k;ecweZeh}g~#=$j4d`vb[firf}"9%i5kauc\gjsi|!9"h6jnt`]`kphs =#o7io{a^alqkr/= n0hlzn_bmvjq.1!m1omyoPcnwmp-1.l2njxlQlotlw,=/a3mkmRm`uov?)69gmk.68 =0hd`'10+4?aoi 88";6jfn)30-2=cag":8$94dhl+50/03mce$<8&7:fjj-70!>1oec&>8(58`lh/90#=7iga(3+4?aoi ;:";6jfn)02-2=cag"9>$94dhl+66/03mce$?:&7:fjj-42!>1oec&=6(58`lh/:>#<7iga(3:*3>bnf!82%;5kio*0-2=cag"8<$94dhl+74/03mce$><&7:fjj-54!>1oec&<4(58`lh/;<#=7iga(5+5?aoi <#=7iga(7+5?aoi >#=7iga(9+5?aoi 0#=7iga<1<4?aoi48:5;6jfn=32:2=cag6:>394dhl?56803mce0<:17:fjj9726>1oec2>6?58`lh;9>4<7iga<0:=3>bnf5;22;5kio>2:2=cag69<394dhl?64803mce0?<17:fjj9446>1oec2=4?58`lh;:<4<7iga<34=3>bnf58<2:5kio>1<;1409;ekm87803mce0>>17:fjj9566>1oec2<2?58`lh;;:4<7iga<26==>bnf59>6=08;ekm8639>2nbb1=16:fjj929>2nbb1;16:fjj909>2nbb1916:fjj9>9>2nbb1717:flqq.7!>1ocxz'1(:8`jss 8:"46j`uu*25,>bh}}":9$64dnww,40.02ndyy&>7(58`jss ;#<7iazt)1*3>bh}}"?%:5kotv+1,199gkpr;9:437iazt=37:==cg|~7=807;emvp9716h1ocxz31683:==cg|~7=:08;emvp979?2ndyy2=>69gkpr;;7=0hb{{<5<4?air|5?5;6j`uu>5:2=cg|~7;394dnww8=803me~x1718:ggmc4iom?0i`~{y208bl`hWnoeio{os]u0Z5+(Qcgecv/CNPF$Bcim{kc.>0/3-467d3ocmcRvcny]657~4>V8h`fQ<6um2<6g`nnfUs`cvP500{73Y5keaT?;z`19.emciXoldn~lz`r^t7[6*|kVbjRgat^aoo86+kVbjR}}su?3(fYulVlyi|3>,b]kevYulVnjxlQlotlw95*dWmceSzgkti?02)eX`hyT{Qkauc\gjsi|4:'oRhzlm]ehdatW{yS{oc=1.`[lkwdlgnbyo{inl\p|vb5;&hSx}j_doaaabblVxnk0>#c^uq[ctby4;'oR{|e^flqqYu{}7: nQznegqbiipWee|1="l_icp[jpbzofd{0>#c^rqaiiflVfjxh`ly<2/gZbh}}U|eizg=0:/gZktofdTzlb21-a\vaYcmy~c1<>=4-a\lduX}gnn~kb`w<2/gZnf{Vkgab}{_gwoh86+kVbjR||t<3/gZbf|hUhcx`{_vkgpm;>$jUcm~Qxr^c`o86+kVxiRklc<2/gZehedeeSnb`cj?3(fYpzVkhgRb`w<2/gZtcWyd~Ryfduj>55*dW|ynSkyit^fbpdYdg|d1="l_icp[djjgz~Ti`~{y<2/gZtcWmkmRm`uov\slbs`4;; nQ`vdpehjqXdf}62-a\twi`Wlg{xtQ{hsgplZhboh~nS{oc=4.`[uthoVof|ywPtipfwmYf{zoyxRxnl<6/gZnf{V|j`dj20-a\twi`Wog`Rzgrdqk[dutm{~Tzlb251;/gjkwggoexR`nmd?emciXpedsS8?=x24\6fjlW:<c<6#c^tbhlbXdf}6T?Rv|t^37?cskd>1bbyQllj:8jbee}`fo46ayesdokrg0|ah_dosp|Ys`{oxd%?&159svjaXmdzuRzgrdqk,7/6<2zycjQjmqvz[qnumzb#?$?;;qplcZcjx}sTxe|jsi*7-42vugnUna}zv_ujqavn/? ;?7}|`g^gntqX|axne&7)068twi`Wlg{xtQ{hsgpl-?.9?1{~biPelrw}Zrozlyc044?>0`8twi`Wlg{xtQ{hsgplZgt{lx$='>b:rqkbYbey~rSyf}erj\evubz}":%vugnUna}zv_ujqavnXizyn~y&8)0`8twi`Wlg{xtQ{hsgplZgt{lx$5'>b:rqkbYbey~rSyf}erj\evubz}"2%vugnUna}zv_ujqavnXflmjxh&:)0`8twi`Wlg{xtQ{hsgplZhboh~n$;'>b:rqkbYbey~rSyf}erj\j`af|l"<%!8n0|ah_dosp|Ys`{oxdR`jg`vf8<<7601{~biPftno56=wzfmTjxbc_ujqavn/8 ;87}|`g^dvhiYs`{oxd%?&129svjaXn|fgSyf}erj+6,743yxdkRhzlm]wlwct`!9"=>5rne\bpjkW}byi~f'4(30?uthoVl~`aQ{hsgpl-3.9:1{~biPftno[qnumzb#:$?<;qplcZ`rdeUdk|h)5*56=wzfmTjxbc_ujqavn/0 ;>7}|`g^dvhiYs`{oxd1650?3b?uthoVl~`aQ{hsgplZgt{lx$='>a:rqkbYa}efTxe|jsi]bwvcu|!;"=l5rne\bpjkW}byi~fParqfvq.5!8k0|ah_gwohZrozlycSl}|esv+7,7f3yxdkRhzlm]wlwct`Vkxh|{(5+2e>vugnUmyabPtipfwmYf{zoyx%;&1`9svjaXn|fgSyf}erj\evubz}"=%vugnUmyabPtipfwmYimnki%?&1`9svjaXn|fgSyf}erj\j`af|l"9%=87<0~iQllj33?wbXlh~jSnaznu*3-464re]geqgXkfex%7&119q`Zbf|hUhcx`{<1<26>tcWmkmRm`uov?=?69=2xoSh`9;sf\vvr43{y;6}miugqv1=tzz~?7y|ze89vjacunee|96xnlhf5?rtXija=7z|Pcmi24>quWmkmRm`uov+4,773~xThlzn_bmvjq.6!8:0{Qkauc\gjsi|!8"==5xr^fbpdYdg|d$>'>0:uq[agsiVidycz'4(33?rtXlh~jSnaznu*6-46<{UomyoPcnwmp-0.991|~Rjnt`]`kphs >#:<6y}_ecweZeh}g~#4$?=;vp\`drfWje~by27:1<6?rtXmg<0{Q}suCDug0k2JKt<4I:582V372=9h654>33`5gd<40?;2wc=mc;38j6dc2=1/?oo53c68yV2b2=9h654>33`5gd<40?;27^?=6;671?6=9:8i:no53942f>U3m3>?97>5120a2fg=;1<:n6j;3g83>4<6sZ?;69=l:98277d1kh084;?6;wV23c<7280:6<8m{R73>15d210:??l9c`80<37>3-9ji7?=7:T0fg<5s|;8=7?4u011>5=z,8=<65<4l391?iuG3`a8^13=:r;;6<65}%3;0?24n2.8n44;3d9j0<3=831b8l750;9l015=831d8>j50;9j0=821d8=:21d8=<21d8=>21d8<750;&23<<3;81e=:657:9l07>=83.:;44;309m52>=021d8?950;&23<<3;81e=:659:9l070=83.:;44;309m52>=i21d8?;50;&23<<3;81e=:65b:9l072=83.:;44;309m52>=k21d8?=50;&23<<3;81e=:65d:9l074=83.:;44;309m52>=m21d8??50;&23<<3;81e=:65f:9l04>=83.:;44;309m52>=9910c9?8:18'52?=<:;0b<97:038?l5bj3:1(<96:52f?k7003:07d=ja;29 41>2=:n7c?88;38?l5b13:1(<96:52f?k7003807d=j8;29 41>2=:n7c?88;18?l5b?3:1(<96:52f?k7003>07d=j6;29 41>2=:n7c?88;78?l5b<3:1(<96:52f?k7003<07d=j3;29 41>2=:n7c?88;58?l5b:3:1(<96:52f?k7003207d=j1;29 41>2=:n7c?88;;8?l5b83:1(<96:52f?k7003k07d=kf;29 41>2=:n7c?88;`8?l5cm3:1(<96:52f?k7003i07d=kd;29 41>2=:n7c?88;f8?l5ck3:1(<96:52f?k7003o07d=kb;29 41>2=:n7c?88;d8?l5c13:1(<96:52f?k7003;;76g!7013>;i6`>79825>=n;m=1<7*>78874`=i9>21=?54i2f5>5<#9>318=k4n05;>45<3`9o97>5$05:>16b3g;<47?;;:k0`1<72-;<57:?e:l23=<6=21b?i=50;&23<<38l1e=:651798m6b5290/=:7541g8j41?28=07d=k1;29 41>2=:n7c?88;3;?>o4l90;6)?89;63a>h6?10:565f3g394?"6?00?j;o34d:9j7`b=83.:;44;0d9m52>=9l10e>kl:18'52?=<9o0b<97:0d8?l5b=3:1(<96:52f?k70038;76g!7013>;i6`>79815>=n;jl1<7*>78874`=i9>21>?54i2af>5<#9>318=k4n05;>75<3`>347>5;c1b`?6=93:1"60=0o?6ak2;29?xd3<3:1m>4>30822g}O;hi0V9;517ya>7b=l38i6?m528824?g=9109m7m52b81`?772m0i6<652c81e?4>2j0j6p*>858707=#9;91h<5+488705=#5<5<5<5<#9>3188j4n05;>4=5<#9>3188j4n05;>6=5<#9>3188j4n05;>0=5<#9>3188j4n05;>2=5<#9>3188j4n05;><=6=44o565>5<5<#9>318l64n05;>4=6=4+16;90d>5<#9>318l64n05;>6=5<#9>318l64n05;>0=5<#9>318l64n05;>2=5<#9>3184:4n05;>5=5<#9>3184:4n05;>7=54o5:f>5<#9>3184:4n05;>1=5<#9>3184:4n05;>3=5<#9>3184:4n05;>==5<#9>318594n05;>5=6=4+16;90=15<#9>318594n05;>7=54i5:1>5<#9>318594n05;>1=5<#9>318594n05;>3=5<#9>318594n05;>==5<#9>31?nm4n05;>5=5<#9>31?nm4n05;>7=54o2a4>5<#9>31?nm4n05;>1=5<#9>31?nm4n05;>3=5<#9>31?nm4n05;>==86=44o51g>5<5<#9>318:=4n05;>4=5<#9>318:=4n05;>6=5<#9>318:=4n05;>0=5<#9>318:=4n05;>2=5<?6=44i2a1>5<5<5<5<5<#9>318>?4n05;>4=5<#9>318>?4n05;>6=5<#9>318>?4n05;>0=5<#9>318>?4n05;>2=5<#9>318>?4n05;><=5<#9>318>?4n05;>g=5<#9>318>?4n05;>a=5<#9>318>?4n05;>c=4;n623?6=,8=269=>;o3432c8io4?:%34=?27m2d:;54?;:k0ad<72-;<57:?e:l23=<632c8i44?:%34=?27m2d:;54=;:k0a=<72-;<57:?e:l23=<432c8i:4?:%34=?27m2d:;54;;:k0a3<72-;<57:?e:l23=<232c8i94?:%34=?27m2d:;549;:k0a6<72-;<57:?e:l23=<032c8i?4?:%34=?27m2d:;547;:k0a4<72-;<57:?e:l23=<>32c8i=4?:%34=?27m2d:;54n;:k0`c<72-;<57:?e:l23=0:9j7a>=83.:;44;0d9m52>=9810e>j8:18'52?=<9o0b<97:008?l5c>3:1(<96:52f?k7003;876g!7013>;i6`>79820>=n;m>1<7*>78874`=i9>21=854i2f0>5<#9>318=k4n05;>40<3`9o>7>5$05:>16b3g;<47?8;:k0`4<72-;<57:?e:l23=<6021b?i>50;&23<<38l1e=:651898m6`6290/=:7541g8j41?28k07d=i0;29 41>2=:n7c?88;3a?>o4mo0;6)?89;63a>h6?10:o65f3dg94?"6?00?j;o34=:810e>mi:18'52?=<9o0b<97:308?l5dm3:1(<96:52f?k70038876g>o3?j0;6)?89;64`>h6?10;76g;7c83>!7013>7982?>o3?h0;6)?89;64`>h6?10976g;7883>!7013>7980?>o3?10;6)?89;64`>h6?10?76g;7683>!7013>7986?>o3??0;6)?89;64`>h6?10=76g;7483>!7013>7984?>o3?=0;6)?89;64`>h6?10376g;6683>!7013>=46`>7983?>o3>?0;6)?89;65<>h6?10:76g;6483>!7013>=46`>7981?>o3>=0;6)?89;65<>h6?10876g;6283>!7013>=46`>7987?>o3>;0;6)?89;65<>h6?10>76g;6083>!7013>=46`>7985?>o3>90;6)?89;65<>h6?10<76g;5g83>!7013>=46`>798;?>o3=l0;6)?89;65<>h6?10276a;4683>>i4km0;66g;8983>>d4j>0;6<4?:1y'5=2=l:1C?o84H2c`?jb52900qo=m8;295?6=8r.:4944?:1y'5=2=kj1C?o84H2c`?M243-;9j7:6a:&f4?4>i6?k0;66sm3`694?5=83:p(<6;:ba8L6d13A9jo6F;3:&26c<31h1/i=4=;h65>5<5;h72>5<858g4>N4j?1C?lm4H518 44a2=3j7)k?:39j03<722c?47>5;h72>5<5<53;294~"60=0ho6F5;|`0=2<72<0;6=u+1969`5=O;k<0D>ol;I60?!75n3>2m6*j0;08m10=831b854?::k65?6=3`;5;n34f?6=3th8m<4?:583>5}#91>1ok5G3c48L6gd3-o;6?5f4783>>o293:17d?8a;29?j70j3:17pl1<729q/=5:5cg9K7g0<@:kh7)k?:39j03<722c>=7>5;h34e?6=3f;5;|`0=c<72=0;6=u+1969gc=O;k<0D>ol;%g3>7=n5;n34f?6=3th8m44?:583>5}#91>1ok5G3c48L6gd3-o;6?5f4783>>o293:17d?8a;29?j70j3:17pl=9483>1<729q/=5:5cg9K7g0<@:kh7)k?:69j03<722c>=7>5;h34e?6=3f;5;|`055<72=0;6=u+1969ga=O;k<0D>ol;%g3>7=n50z&2<15;h6g>5<6=4;:183!7?<3;8<6F>o6?m0;66a>7583>>{e:>>1<7:50;2x 4>3289;7E=m6:J0ef=nl9;I1bg>o3i3:17d;=:188m41c2900c<9;:188yg40:3:187>50z&2<1<6;91C?o84H2c`?l2f2900e8<50;9j52b=831d=::50;9~f716290?6=4?{%3;0?7482B8n;5G3`a8m1g=831b9?4?::k23a<722e:;94?::a6=>=83>1<7>t$0:7>4573A9i:6F>7>5;h34`?6=3f;<87>5;|`1<2<72=0;6=u+1969566<@:h=7E=nc:k7e?6=3`?96=44i05g>5<858275=O;k<0D>ol;h6b>5<>1<75rb3:6>5<3290;w)?74;304>N4j?1C?lm4i5c94?=n=;0;66g>7e83>>i6?=0;66sm29694?2=83:p(<6;:013?M5e>2B8mn5f4`83>>o2:3:17d?8d;29?j70<3:17pl=eg83>1<729q/=5:51228L6d13A9jo6g;a;29?l352900e<9k:188k4132900qo319K7g0<@:kh7d:n:188m04=831b=:j50;9l522=831vn?kk:187>5<7s-;387?<0:J0f3=O;hi0e9o50;9j17<722c:;i4?::m231<722wi>hm50;694?6|,82?6<=?;I1a2>N4ij1b8l4?::k66?6=3`;5;n340?6=3th9io4?:583>5}#91>1=>>4H2`5?M5fk2c?m7>5;h71>5<5<7>54;294~"60=0:?=5G3c48L6gd3`>j6=44i4094?=n9>n1<75`16694?=zj:::6=4;:183!7?<3;8<6F>o6?m0;66a>7583>>{e;9:1<7:50;2x 4>3289;7E=m6:J0ef=nl9;I1bg>o3i3:17d;=:188m41c2900c<9;:188yg4am3:187>50z&2<1<6;91C?o84H2c`?l2f2900e8<50;9j52b=831d=::50;9~f4g0290?6=4?{%3;0?ec3A9i:6F=6=44i5f94?=n=80;66a>7c83>>{e9h<1<7:50;2x 4>32jn0D>l9;I1bg>"b8380e9850;9j0a<722c>=7>5;n34f?6=3th:m84?:583>5}#91>1oi5G3c48L6gd3-o;6?5f4783>>o3l3:17d;>:188k41e2900qo?n4;290?6=8r.:494ld:J0f3=O;hi0(h>52:k72?6=3`>o6=44i4394?=h9>h1<75rb0c0>5<3290;w)?74;ag?M5e>2B8mn5+e181?l212900e9j50;9j14<722e:;o4?::a5d4=83>1<7>t$0:7>fb<@:h=7E=nc:&f4?4>o293:17b?8b;29?xd6i80;694?:1y'5=2=km1C?o84H2c`?!c72;1b8;4?::k7`?6=3`?:6=44o05a>5<54;294~"60=0hh6F6g;6;29?l2c2900e8?50;9l52d=831vn<7i:187>5<7s-;387mk;I1a2>N4ij1/i=4=;h65>5<>i6?k0;66sm21g94?2=83:p(<6;:bf8L6d13A9jo6*j0;08m10=831b8i4?::k65?6=3f;5;|`14a<72=0;6=u+1969ga=O;k<0D>ol;%g3>7=n50z&2<15;h6g>5<=o50;694?6|,82?6nj4H2`5?M5fk2.n<7<4i5494?=n1<729q/=5:5ce9K7g0<@:kh7)k?:39j03<722c?h7>5;h72>5<858``>N4j?1C?lm4$d296>o3>3:17d:k:188m07=831d=:l50;9~f760290?6=4?{%3;0?ec3A9i:6F=6=44i5f94?=n=80;66a>7c83>>{e:9<1<7:50;2x 4>32jn0D>l9;I1bg>"b8380e9850;9j0a<722c>=7>5;n34f?6=3th99;4?:583>5}#91>1oi5G3c48L6gd3-o;6?5f4783>>o3l3:17d;>:188k41e2900qo<:5;290?6=8r.:494ld:J0f3=O;hi0(h>52:k72?6=3`>o6=44i4394?=h9>h1<75rb377>5<3290;w)?74;ag?M5e>2B8mn5+e181?l212900e9j50;9j14<722e:;o4?::a605=83>1<7>t$0:7>fb<@:h=7E=nc:&f4?4>o293:17b?8b;29?xd5=;0;694?:1y'5=2=km1C?o84H2c`?!c72;1b8;4?::k7`?6=3`?:6=44o05a>5<=7>54;294~"60=0hh6F6g;6;29?l2c2900e8?50;9l52d=831vn?;?:187>5<7s-;387mk;I1a2>N4ij1/i=4=;h65>5<>i6?k0;66sm25d94?2=83:p(<6;:bf8L6d13A9jo6*j0;08m10=831b8i4?::k65?6=3f;5;|`10`<72=0;6=u+1969ga=O;k<0D>ol;%g3>7=n50z&2<15;h6g>5<f183>1<729q/=5:5ce9K7g0<@:kh7)k?:39j03<722c?h7>5;h72>5<858``>N4j?1C?lm4$d296>o3>3:17d:k:188m07=831d=:l50;9~f4cb290?6=4?{%3;0?ec3A9i:6F=6=44i5f94?=n=80;66a>7c83>>{e9ln1<7:50;2x 4>32jn0D>l9;I1bg>"b8380e9850;9j0a<722c>=7>5;n34f?6=3th:in4?:583>5}#91>1oi5G3c48L6gd3-o;6?5f4783>>o3l3:17d;>:188k41e2900qo?jb;290?6=8r.:494ld:J0f3=O;hi0(h>52:k72?6=3`>o6=44i4394?=h9>h1<75rb367>5<3290;w)?74;ag?M5e>2B8mn5G429'57`=<0k0(h>52:k72?6=3`>o6=44i4394?=h9>h1<75rb360>5<3290;w)?74;ag?M5e>2B8mn5G429'57`=<0k0(h>52:k72?6=3`>o6=44i4394?=h9>h1<75rb361>5<3290;w)?74;ag?M5e>2B8mn5G429'57`=<0k0(h>52:k72?6=3`>o6=44i4394?=h9>h1<75rb362>5<3290;w)?74;ag?M5e>2B8mn5G429'57`=<0k0(h>52:k72?6=3`>o6=44i4394?=h9>h1<75rb363>5<3290;w)?74;ag?M5e>2B8mn5G429'57`=<0k0(h>52:k72?6=3`>o6=44i4394?=h9>h1<75rb31e>5<3290;w)?74;ag?M5e>2B8mn5G429'57`=<0k0(h>52:k72?6=3`>o6=44i4394?=h9>h1<75rb31f>5<3290;w)?74;ag?M5e>2B8mn5G429'57`=<0k0(h>52:k72?6=3`>o6=44i4394?=h9>h1<75rb31g>5<3290;w)?74;ag?M5e>2B8mn5G429'57`=<0k0(h>52:k72?6=3`>o6=44i4394?=h9>h1<75rb31`>5<3290;w)?74;ag?M5e>2B8mn5G429'57`=<0k0(h>52:k72?6=3`>o6=44i4394?=h9>h1<75rb0g2>5<3290;w)?74;ag?M5e>2B8mn5G429'57`=<0k0(h>52:k72?6=3`>o6=44i4394?=h9>h1<75rb0g3>5<3290;w)?74;ag?M5e>2B8mn5G429'57`=<0k0(h>52:k72?6=3`>o6=44i4394?=h9>h1<75rb0fe>5<3290;w)?74;ag?M5e>2B8mn5G429'57`=<0k0(h>52:k72?6=3`>o6=44i4394?=h9>h1<75rb0ff>5<3290;w)?74;ag?M5e>2B8mn5G429'57`=<0k0(h>52:k72?6=3`>o6=44i4394?=h9>h1<75rb0fg>5<3290;w)?74;ag?M5e>2B8mn5G429'57`=<0k0(h>52:k72?6=3`>o6=44i4394?=h9>h1<75rb0f`>5<3290;w)?74;ag?M5e>2B8mn5G429'57`=<0k0(h>52:k72?6=3`>o6=44i4394?=h9>h1<75rb0fa>5<3290;w)?74;ag?M5e>2B8mn5G429'57`=<0k0(h>52:k72?6=3`>o6=44i4394?=h9>h1<75rb0fb>5<3290;w)?74;ag?M5e>2B8mn5G429'57`=<0k0(h>52:k72?6=3`>o6=44i4394?=h9>h1<75rb0f:>5<3290;w)?74;ag?M5e>2B8mn5G429'57`=<0k0(h>52:k72?6=3`>o6=44i4394?=h9>h1<75rb0f;>5<3290;w)?74;ag?M5e>2B8mn5G429'57`=<0k0(h>52:k72?6=3`>o6=44i4394?=h9>h1<75rb0ag>5<3290;w)?74;ag?M5e>2B8mn5+e181?l212900e9j50;9j14<722e:;o4?::a5fe=83>1<7>t$0:7>fb<@:h=7E=nc:&f4?4>o293:17b?8b;29?xd6kk0;694?:1y'5=2=km1C?o84H2c`?!c72;1b8;4?::k7`?6=3`?:6=44o05a>5<54;294~"60=0hh6F6g;6;29?l2c2900e8?50;9l52d=831vn5<7s-;387mk;I1a2>N4ij1/i=4=;h65>5<>i6?k0;66sm1b:94?2=83:p(<6;:bf8L6d13A9jo6*j0;08m10=831b8i4?::k65?6=3f;5;|`2g2<72=0;6=u+1969ga=O;k<0D>ol;%g3>7=n3:187>50z&2<15;h6g>5<6=4;:183!7?<3io7E=m6:J0ef=#m9097d:9:188m1b=831b9<4?::m23g<722wi=n:50;694?6|,82?6nj4H2`5?M5fk2.n<7<4i5494?=n1<729q/=5:5ce9K7g0<@:kh7)k?:39j03<722c?h7>5;h72>5<858``>N4j?1C?lm4$d296>o3>3:17d:k:188m07=831d=:l50;9~f757290?6=4?{%3;0?ec3A9i:6F=6=44i5f94?=n=80;66a>7c83>>{e:;l1<7:50;2x 4>32jn0D>l9;I1bg>"b8380e9850;9j0a<722c>=7>5;n34f?6=3th9>h4?:583>5}#91>1oi5G3c48L6gd3-o;6?5f4783>>o3l3:17d;>:188k41e2900qo<=d;290?6=8r.:494ld:J0f3=O;hi0(h>52:k72?6=3`>o6=44i4394?=h9>h1<75rb30`>5<3290;w)?74;ag?M5e>2B8mn5+e181?l212900e9j50;9j14<722e:;o4?::a67d=83>1<7>t$0:7>fb<@:h=7E=nc:&f4?4>o293:17b?8b;29?xd5:h0;694?:1y'5=2=km1C?o84H2c`?!c72;1b8;4?::k7`?6=3`?:6=44o05a>5<7>55;294~"60=0hi6F6g;6;29?l2?2900e9j50;9j14<722e:;o4?::a6a7=83?1<7>t$0:7>fc<@:h=7E=nc:&f4?4>o3l3:17d;>:188k41e2900qo52:k72?6=3`>36=44i5f94?=n=80;66a>7c83>>{e:jo1<7;50;2x 4>32jo0D>l9;I1bg>"b8380e9850;9j0=<722c?h7>5;h72>5<858`a>N4j?1C?lm4$d296>o3>3:17d:7:188m1b=831b9<4?::m23g<722wi>nj50;794?6|,82?6nk4H2`5?M5fk2.n<7<4i5494?=n<10;66g;d;29?l362900c<9m:188yg4dk3:197>50z&2<15;h6;>5<>i6?k0;66sm2bc94?3=83:p(<6;:bg8L6d13A9jo6*j0;08m10=831b854?::k7`?6=3`?:6=44o05a>5<55;294~"60=0o<6F6=4?{%3;0?eb3A9i:6F=6=44i5:94?=n6<729q/=5:53c78L6d13A9jo6g;a;29?l75<3:17b?84;29?xd5jj0;6>4?:1y'5=2=;k?0D>l9;I1bg>o3i3:17d?=4;29?j70<3:17pl=b383>1<729q/=5:51228L6d13A9jo6g;a;29?l352900e<9k:188k4132900qo50z&2<1<6;91C?o84H2c`?l2f2900e8<50;9j52b=831d=::50;9~f7df29086=4?{%3;0?5e=2B8n;5G3`a8m1g=831b=?:50;9l522=831vn?oj:187>5<7s-;387?<0:J0f3=O;hi0e9o50;9j17<722c:;i4?::m231<722wi>o750;194?6|,82?6>l:;I1a2>N4ij1b8l4?::k261<722e:;94?::a6de=83>1<7>t$0:7>4573A9i:6F>7>5;h34`?6=3f;<87>5;|`1f=<72:0;6=u+19697g3<@:h=7E=nc:k7e?6=3`;987>5;n340?6=3th9ml4?:583>5}#91>1=>>4H2`5?M5fk2c?m7>5;h71>5<5<53;294~"60=08n85G3c48L6gd3`>j6=44i007>5<858275=O;k<0D>ol;h6b>5<>1<75rb3`5>5<4290;w)?74;1a1>N4j?1C?lm4i5c94?=n9;>1<75`16694?=zj;k=6=4;:183!7?<3;8<6F>o6?m0;66a>7583>>{e:k?1<7=50;2x 4>32:h>7E=m6:J0ef=n2583>>i6?=0;66sm2`694?2=83:p(<6;:013?M5e>2B8mn5f4`83>>o2:3:17d?8d;29?j70<3:17pl=b583>6<729q/=5:53c78L6d13A9jo6g;a;29?l75<3:17b?84;29?xd5i;0;694?:1y'5=2=9::0D>l9;I1bg>o3i3:17d;=:188m41c2900c<9;:188yg4b>3:197>50z&2<15;h6;>5<>i6?k0;66sm2d794?3=83:p(<6;:bg8L6d13A9jo6*j0;08m10=831b854?::k7`?6=3`?:6=44o05a>5<55;294~"60=0hi6F6g;6;29?l2?2900e9j50;9j14<722e:;o4?::a6`5=83?1<7>t$0:7>fc<@:h=7E=nc:&f4?4>o3l3:17d;>:188k41e2900qo52:k72?6=3`>36=44i5f94?=n=80;66a>7c83>>{e:l;1<7;50;2x 4>32jo0D>l9;I1bg>"b8380e9850;9j0=<722c?h7>5;h72>5<858`a>N4j?1C?lm4$d296>o3>3:17d:7:188m1b=831b9<4?::m23g<722wi>ih50;794?6|,82?6nk4H2`5?M5fk2.n<7<4i5494?=n<10;66g;d;29?l362900c<9m:188yg4cm3:197>50z&2<15;h6;>5<>i6?k0;66sm2ef94?3=83:p(<6;:bg8L6d13A9jo6*j0;08m10=831b854?::k7`?6=3`?:6=44o05a>5<54;294~"60=0hh6F6g;6;29?l2c2900e8?50;9l52d=831vn?8<:187>5<7s-;387mk;I1a2>N4ij1/i=4=;h65>5<>i6?k0;66sm27c94?2=83:p(<6;:bd8L6d13A9jo6*j0;58m10=831b9<4?::k23d<722e:;o4?::a63?=83>1<7>t$0:7>f`<@:h=7E=nc:&f4?1>o6?h0;66a>7c83>>{e;=21<7;50;2x 4>32jo0D>l9;I1bg>"b8380e9850;9j0=<722c?h7>5;h72>5<858`a>N4j?1C?lm4$d296>o3>3:17d:7:188m1b=831b9<4?::m23g<722wi?9850;794?6|,82?6nk4H2`5?M5fk2.n<7<4i5494?=n<10;66g;d;29?l362900c<9m:188yg53=3:197>50z&2<15;h6;>5<>i6?k0;66sm35694?3=83:p(<6;:bg8L6d13A9jo6*j0;08m10=831b854?::k7`?6=3`?:6=44o05a>5<55;294~"60=0hi6F6g;6;29?l2?2900e9j50;9j14<722e:;o4?::a717=83?1<7>t$0:7>a6<@:h=7E=nc:&f4?1>o293:17d?8a;29?j70j3:17pl<4183>0<729q/=5:5cd9K7g0<@:kh7)k?:39j03<722c?47>5;h6g>5<96=4::183!7?<3in7E=m6:J0ef=#m9097d:9:188m1>=831b8i4?::k65?6=3f;5;|`070<72:0;6=u+19697g3<@:h=7E=nc:k7e?6=3`;987>5;n340?6=3th8?94?:283>5}#91>1?o;4H2`5?M5fk2c?m7>5;h310?6=3f;<87>5;|`06g<72=0;6=u+1969566<@:h=7E=nc:k7e?6=3`?96=44i05g>5<8580f0=O;k<0D>ol;h6b>5<5<54;294~"60=0:?=5G3c48L6gd3`>j6=44i4094?=n9>n1<75`16694?=zj:996=4<:183!7?<39i96F>1<75rb204>5<3290;w)?74;304>N4j?1C?lm4i5c94?=n=;0;66g>7e83>>i6?=0;66sm32394?5=83:p(<6;:2`6?M5e>2B8mn5f4`83>>o6:=0;66a>7583>>{e;;?1<7:50;2x 4>3289;7E=m6:J0ef=n4?:1y'5=2=;k?0D>l9;I1bg>o3i3:17d?=4;29?j70<3:17pl<2283>1<729q/=5:51228L6d13A9jo6g;a;29?l352900e<9k:188k4132900qo==f;297?6=8r.:49450z&2<1<6;91C?o84H2c`?l2f2900e8<50;9j52b=831d=::50;9~f64b29086=4?{%3;0?5e=2B8n;5G3`a8m1g=831b=?:50;9l522=831vn>?i:187>5<7s-;387?<0:J0f3=O;hi0e9o50;9j17<722c:;i4?::m231<722wi??j50;194?6|,82?6>l:;I1a2>N4ij1b8l4?::k261<722e:;94?::a74b=83>1<7>t$0:7>4573A9i:6F>7>5;h34`?6=3f;<87>5;|`011<72<0;6=u+1969g`=O;k<0D>ol;%g3>7=n;=:186>5<7s-;387j?;I1a2>N4ij1/i=48;h65>5<>o6?h0;66a>7c83>>{e;<91<7;50;2x 4>32jo0D>l9;I1bg>"b8380e9850;9j0=<722c?h7>5;h72>5<858`a>N4j?1C?lm4$d296>o3>3:17d:7:188m1b=831b9<4?::m23g<722wi?8850;794?6|,82?6nk4H2`5?M5fk2.n<7<4i5494?=n<10;66g;d;29?l362900c<9m:188yg52?3:197>50z&2<15;h6;>5<>i6?k0;66sm34:94?3=83:p(<6;:bg8L6d13A9jo6*j0;08m10=831b854?::k7`?6=3`?:6=44o05a>5<57>55;294~"60=0hi6F6g;6;29?l2?2900e9j50;9j14<722e:;o4?::a70g=83?1<7>t$0:7>fc<@:h=7E=nc:&f4?4>o3l3:17d;>:188k41e2900qo=9c;291?6=8r.:494le:J0f3=O;hi0(h>52:k72?6=3`>36=44i5f94?=n=80;66a>7c83>>{e;?h1<7;50;2x 4>32jo0D>l9;I1bg>"b8380e9850;9j0=<722c?h7>5;h72>5<858`a>N4j?1C?lm4$d296>o3>3:17d:7:188m1b=831b9<4?::m23g<722wi?;750;794?6|,82?6nk4H2`5?M5fk2.n<7<4i5494?=n<10;66g;d;29?l362900c<9m:188yg5103:197>50z&2<15;h6;>5<>i6?k0;66sm37594?3=83:p(<6;:bg8L6d13A9jo6*j0;08m10=831b854?::k7`?6=3`?:6=44o05a>5<55;294~"60=0hi6F6g;6;29?l2?2900e9j50;9j14<722e:;o4?::a733=83?1<7>t$0:7>fc<@:h=7E=nc:&f4?4>o3l3:17d;>:188k41e2900qo=94;291?6=8r.:494le:J0f3=O;hi0(h>52:k72?6=3`>36=44i5f94?=n=80;66a>7c83>>{e;><1<7;50;2x 4>32jo0D>l9;I1bg>"b8380e9850;9j0=<722c?h7>5;h72>5<858`a>N4j?1C?lm4$d296>o3>3:17d:7:188m1b=831b9<4?::m23g<722wi?::50;794?6|,82?6nk4H2`5?M5fk2.n<7<4i5494?=n<10;66g;d;29?l362900c<9m:188yg50;3:197>50z&2<15;h6;>5<>i6?k0;66sm36094?3=83:p(<6;:bg8L6d13A9jo6*j0;08m10=831b854?::k7`?6=3`?:6=44o05a>5<55;294~"60=0hi6F6g;6;29?l2?2900e9j50;9j14<722e:;o4?::a726=83?1<7>t$0:7>fc<@:h=7E=nc:&f4?4>o3l3:17d;>:188k41e2900qo=9f;291?6=8r.:494le:J0f3=O;hi0(h>52:k72?6=3`>36=44i5f94?=n=80;66a>7c83>>{e;>o1<7;50;2x 4>32jo0D>l9;I1bg>"b8380e9850;9j0=<722c?h7>5;h72>5<858`a>N4j?1C?lm4$d296>o3>3:17d:7:188m1b=831b9<4?::m23g<722wi?:m50;794?6|,82?6nk4H2`5?M5fk2.n<7<4i5494?=n<10;66g;d;29?l362900c<9m:188yg50j3:197>50z&2<15;h6;>5<>i6?k0;66sm36c94?3=83:p(<6;:bg8L6d13A9jo6*j0;08m10=831b854?::k7`?6=3`?:6=44o05a>5<55;294~"60=0hi6F6g;6;29?l2?2900e9j50;9j14<722e:;o4?::a72>=83?1<7>t$0:7>fc<@:h=7E=nc:&f4?4>o3l3:17d;>:188k41e2900qo=87;291?6=8r.:494le:J0f3=O;hi0(h>52:k72?6=3`>36=44i5f94?=n=80;66a>7c83>>{e;?o1<7;50;2x 4>32jo0D>l9;I1bg>"b8380e9850;9j0=<722c?h7>5;h72>5<858`a>N4j?1C?lm4$d296>o3>3:17d:7:188m1b=831b9<4?::m23g<722wi?l850;194?6|,82?6<<6;I1a2>N4ij1/i=4>b:kg0?6=3`n>6=44o057>5<53;294~"60=0:>45G3c48L6gd3-o;67583>>{e:8:1<7=50;2x 4>328827E=m6:J0ef=#m90:i6gk4;29?lb22900c<9;:188yg7f13:1?7>50z&2<1<6:01C?o84H2c`?!c728o0ei:50;9j`0<722e:;94?::a5<3=8391<7>t$0:7>44>3A9i:6F5;hf6>5<85826<=O;k<0D>ol;%g3>4c1<75fd483>>i6?=0;66sm18194?5=83:p(<6;:00:?M5e>2B8mn5+e182a>oc<3:17dj::188k4132900qo?62;297?6=8r.:494>289K7g0<@:kh7)k?:0g8ma2=831bh84?::m231<722wi=4?50;194?6|,82?6<<6;I1a2>N4ij1/i=4>e:kg0?6=3`n>6=44o057>5<53;294~"60=0:>45G3c48L6gd3-o;67583>>{e91l1<7=50;2x 4>328827E=m6:J0ef=#m90:i6gk4;29?lb22900c<9;:188yg7?m3:1?7>50z&2<1<6:01C?o84H2c`?!c728o0ei:50;9j`0<722e:;94?::a5=b=8391<7>t$0:7>44>3A9i:6F5;hf6>5<85826<=O;k<0D>ol;%g3>4c1<75fd483>>i6?=0;66sm19`94?5=83:p(<6;:00:?M5e>2B8mn5+e182a>oc<3:17dj::188k4132900qo?7a;297?6=8r.:494>289K7g0<@:kh7)k?:0g8ma2=831bh84?::m231<722wi=5750;194?6|,82?6<<6;I1a2>N4ij1/i=4>e:kg0?6=3`n>6=44o057>5<53;294~"60=0:>45G3c48L6gd3-o;67583>>{e91=1<7=50;2x 4>328827E=m6:J0ef=#m90:i6gk4;29?lb22900c<9;:188yg7?>3:1?7>50z&2<1<6:01C?o84H2c`?!c728o0ei:50;9j`0<722e:;94?::a5=3=8391<7>t$0:7>44>3A9i:6F5;hf6>5<85826g=O;k<0D>ol;%g3>701<75fd483>>oc>3:17b?84;29?xd6ik0;694?:1y'5=2=9;h0D>l9;I1bg>"b838=7dj;:188ma3=831bh;4?::m231<722wi>;;50;694?6|,82?6<N4ij1/i=4=2:kg0?6=3`n>6=44ie494?=h9>>1<75rb337>5<2290;w)?74;31`>N4j?1C?lm4$d2965=nl=0;66gk5;29?lb12900ei950;9l522=831vn5<7s-;387?=d:J0f3=O;hi0(h>5219j`1<722co97>5;hf5>5<>oc=3:17dj9:188ma1=831d=::50;9~f70?290>6=4?{%3;0?75l2B8n;5G3`a8 `6=:81bh94?::kg1?6=3`n=6=44ie594?=h9>>1<75rb230>5<4290;w)?74;31=>N4j?1C?lm4$d2954=nl=0;66gk5;29?j70<3:17pl=6383>1<729q/=5:513`8L6d13A9jo6*j0;3:?lb32900ei;50;9j`3<722e:;94?::a640=8391<7>t$0:7>44>3A9i:6F5;hf6>5<85826<=O;k<0D>ol;%g3>4c1<75fd483>>i6?=0;66sm20:94?2=83:p(<6;:00a?M5e>2B8mn5+e1812>oc<3:17dj::188ma0=831d=::50;9~f4d6290?6=4?{%3;0?75j2B8n;5G3`a8 `6=:?1bh94?::kg1?6=3`n=6=44o057>5<55;294~"60=0:>i5G3c48L6gd3-o;6?>4ie694?=nl<0;66gk6;29?lb02900c<9;:188yg7e;3:197>50z&2<1<6:m1C?o84H2c`?!c72;:0ei:50;9j`0<722co:7>5;hf4>5<85826<=O;k<0D>ol;%g3>f11<75fd483>>i6?=0;66sm31a94?5=83:p(<6;:00:?M5e>2B8mn5+e1810>oc<3:17dj::188k4132900qo289K7g0<@:kh7)k?:368ma2=831bh84?::m231<722wi>4<50;794?6|,82?6<N4ij1/i=4=3:kg0?6=3`n>6=44ie494?=nl>0;66a>7583>>{e:>l1<7;50;2x 4>3288o7E=m6:J0ef=#m909?6gk4;29?lb22900ei850;9j`2<722e:;94?::a75d=83?1<7>t$0:7>44c3A9i:6F5;hf6>5<>i6?=0;66sm2g:94?3=83:p(<6;:00g?M5e>2B8mn5+e1811>oc<3:17dj::188ma0=831bh:4?::m231<722wi>4?50;794?6|,82?6<N4ij1/i=4=3:kg0?6=3`n>6=44ie494?=nl>0;66a>7583>>{e:>o1<7;50;2x 4>3288o7E=m6:J0ef=#m909?6gk4;29?lb22900ei850;9j`2<722e:;94?::a75g=83?1<7>t$0:7>44c3A9i:6F5;hf6>5<>i6?=0;66sm2g594?3=83:p(<6;:00g?M5e>2B8mn5+e1811>oc<3:17dj::188ma0=831bh:4?::m231<722wi>4>50;794?6|,82?6<N4ij1/i=4=3:kg0?6=3`n>6=44ie494?=nl>0;66a>7583>>{e:>n1<7;50;2x 4>3288o7E=m6:J0ef=#m909?6gk4;29?lb22900ei850;9j`2<722e:;94?::a75?=83?1<7>t$0:7>44c3A9i:6F5;hf6>5<>i6?=0;66sm2g494?3=83:p(<6;:00g?M5e>2B8mn5+e1811>oc<3:17dj::188ma0=831bh:4?::m231<722wi>5h50;794?6|,82?6<N4ij1/i=4=3:kg0?6=3`n>6=44ie494?=nl>0;66a>7583>>{e:>i1<7;50;2x 4>3288o7E=m6:J0ef=#m909?6gk4;29?lb22900ei850;9j`2<722e:;94?::a6<1=83>1<7>t$0:7>44e3A9i:6F5;hf6>5<5<7s-;387?=b:J0f3=O;hi0(h>5139j`1<722co97>5;hf5>5<85826a=O;k<0D>ol;%g3>fg1<75fd483>>oc>3:17dj8:188k4132900qo=?8;291?6=8r.:494>2e9K7g0<@:kh7)k?:318ma2=831bh84?::kg2?6=3`n<6=44o057>5<55;294~"60=0:>i5G3c48L6gd3-o;6?;4ie694?=nl<0;66gk6;29?lb02900c<9;:188yg4e;3:1>7>50z&2<1<6:11C?o84H2c`?!c728;0ei:50;9l522=831vn?l>:181>5<7s-;387?=8:J0f3=O;hi0(h>5109j`1<722e:;94?::a6d`=8381<7>t$0:7>44?3A9i:6F5;n340?6=3th9mi4?:383>5}#91>1=?64H2`5?M5fk2.n<7?>;hf7>5<85826==O;k<0D>ol;%g3>471<75`16694?=zj;k26=4=:183!7?<3;946F>i6?=0;66sm2`594?4=83:p(<6;:00;?M5e>2B8mn5+e1825>oc<3:17b?84;29?xd5i<0;6?4?:1y'5=2=9;20D>l9;I1bg>"b83;:7dj;:188k4132900qo299K7g0<@:kh7)k?:038ma2=831d=::50;9~f64d29096=4?{%3;0?7502B8n;5G3`a8 `6=981bh94?::m231<722wi??o50;094?6|,82?6<<7;I1a2>N4ij1/i=4>1:kg0?6=3f;<87>5;|`06=<72;0;6=u+196957><@:h=7E=nc:&f4?763`n?6=44o057>5<52;294~"60=0:>55G3c48L6gd3-o;6>1<75rb207>5<5290;w)?74;31<>N4j?1C?lm4$d2954=nl=0;66a>7583>>{e;;81<7<50;2x 4>328837E=m6:J0ef=#m90:=6gk4;29?j70<3:17pl<2183>7<729q/=5:513:8L6d13A9jo6*j0;32?lb32900c<9;:188yg56m3:1>7>50z&2<1<6:11C?o84H2c`?!c728;0ei:50;9l522=831vn?lj:181>5<7s-;387?=8:J0f3=O;hi0(h>5109j`1<722e:;94?::a760=8381<7>t$0:7>44?3A9i:6F5;n340?6=3th:n:4?:483>5}#91>1=?j4H2`5?M5fk2.n<75<>oc?3:17b?84;29?xd6j00;684?:1y'5=2=9;n0D>l9;I1bg>"b838<7dj;:188ma3=831bh;4?::kg3?6=3f;<87>5;|`15`<72<0;6=u+196957b<@:h=7E=nc:&f4?473`n?6=44ie794?=nl?0;66gk7;29?j70<3:17pl=2183>0<729q/=5:513f8L6d13A9jo6*j0;04?lb32900ei;50;9j`3<722co;7>5;n340?6=3th9:<4?:483>5}#91>1=?j4H2`5?M5fk2.n<7?8;hf7>5<>oc?3:17b?84;29?xd4180;65950;2x 4>328=h7E=m6:J0ef=]<<0jw44=8;g950<6;3;h6k4>4;35>4b=u-;:j7;4$003>0=#l10>7)j6:49'`d<23-ni685+db86?!bc2<1/=5>53:&2<4<33-o:685+e386?!c42<1/i94:;%g6>0=#m?0>7)k8:49'a=<23-o2685+e`86?!ce2<1/in4:;%gg>0=#ml0>7)ki:49'b5<23-l:685+f386?!`42<1/j94:;%d6>0=#n?0>7)h8:49'b=<23-l2685+f`86?!`e2<1/jn4:;%dg>0=#nl0>7)hi:49'556==2.:<<4:;%336?3<,8:8685+11691>"68<0>7)??6;78 4602<1/==655:&24<<23-;;m7;4$02a>0=#99i196*>0e86?!77m3?0(<>i:49'546==2.:=<4:;%326?3<,8;8685+10691>"69<0>7)?>6;78 4702<1/=<655:&25<<23-;:m7;4$03a>0=#98i196*>1e86?!76m3?0(>l<:2`2?!bb2<1/=:k51618 4462:1/=?<54:&0f7<4j81/hk4:;h6a>5<>od13:17d?72;29?l7?;3:17d=nf;29?l5e83:17d=7:18'52?=;>1e=:650:9j73<72-;<57=8;o346=4+16;972=i9>21>65f3583>!70139<7c?88;18?l54290/=:75369m52>=<21b??4?:%34=?503g;<47;4;h12>5<#9>31?:5a16:92>=n;90;6)?89;14?k7003=07d1e=:658:9j6`<72-;<57=8;o3496=4+16;904=i9>21<65f4183>!7013>:7c?88;38?l5a290/=:75409m52>=:21b?h4?:%34=?263g;<47=4;h1g>5<#9>318<5a16:90>=n;j0;6)?89;62?k7003?07d=m:18'52?=<81e=:656:9j7d<72-;<57:>;o3421465f5`83>!7013?27c?88;28?l3?290/=:75589m52>=921b9:4?:%34=?3>3g;<47<4;h75>5<#9>31945a16:97>=n=<0;6)?89;7:?k7003>07d;;:18'52?==01e=:655:9j26<72-;<57;6;o3421;65f6083>!7013?27c?88;:8?l07290/=:75589m52>=121b9k4?:%34=?3>3g;<47o4;h7f>5<#9>31945a16:9f>=n=m0;6)?89;7:?k7003i07d;l:18'52?==01e=:65d:9j1g<72-;<57;6;o3421j65f7e83>!7013=h7c?88;28?l1e290/=:757b9m52>=921b;44?:%34=?1d3g;<47<4;h5;>5<#9>31;n5a16:97>=n?>0;6)?89;5`?k7003>07d99:18'52?=?j1e=:655:9j30<72-;<579l;o3421;65f7283>!7013=h7c?88;:8?l15290/=:757b9m52>=121b;<4?:%34=?1d3g;<47o4;h53>5<#9>31;n5a16:9f>=n>l0;6)?89;5`?k7003i07d8k:18'52?=?j1e=:65d:9j2f<72-;<579l;o3421j65f6`83>!7013=h7c?88;33?>o113:1(<96:6a8j41?28;07d87:18'52?=?j1e=:651398m31=83.:;448c:l23=<6;21b:;4?:%34=?1d3g;<47?;;:k51?6=,8=26:m4n05;>43<3`2?6=4+16;93f=i9>21=;54i9194?"6?0079823>=n0;0;6)?89;5`?k7003;376g71;29 41>2>i0b<97:0;8?l>7290/=:757b9m52>=9h10e:h50;&23<<0k2d:;54>b:9j3`<72-;<579l;o345$05:>2e5<#9>31;n5a16:95`=1<7*>7884g>h6?10:j65f8683>!70132=7c?88;28?l>2290/=:75879m52>=921b4n4?:%34=?>e3g;<47>4;h:b>5<#9>314o5a16:95>=n000;6)?89;:a?k7003807d67:18'52?=0k1e=:653:9l=1<72-;<577<;o3421=65`9083>!7013387c?88;08?j?7290/=:75929m52>=;21d4k4?:%34=??43g;<47:4;n:f>5<#9>315>5a16:91>=h1m0;6)?89;;0?k7003<07b7l:18'52?=1:1e=:657:9l=g<72-;<577<;o34<3f3j6=4+16;9=6=i9>21565`9883>!7013387c?88;c8?j??290/=:75929m52>=j21d5:4?:%34=??43g;<47m4;n;5>5<#9>315>5a16:9`>=h1<0;6)?89;;0?k7003o07b6k:18'52?=1:1e=:65f:9lg4<72-;<57m?;o3421=65`b683>!7013h=7c?88;28?jd2290/=:75b79m52>=921dn>4?:%34=?d13g;<47<4;n`1>5<#9>31n;5a16:97>=hj80;6)?89;`5?k7003>07bl?:18'52?=j?1e=:655:9lec<72-;<57l9;o3421;65`ae83>!7013h=7c?88;:8?jgd290/=:75b79m52>=121dmo4?:%34=?d13g;<47o4;ncb>5<#9>31n;5a16:9f>=hi10;6)?89;`5?k7003i07bo8:18'52?=j?1e=:65d:9le3<72-;<57l9;o346=4+16;9f3=i9>21j65`a583>!7013h=7c?88;33?>if;3:1(<96:c48j41?28;07bo=:18'52?=j?1e=:651398kd7=83.:;44m6:l23=<6;21dm=4?:%34=?d13g;<47?;;:m:b?6=,8=26o84n05;>43<3fhn6=4+16;9f3=i9>21=;54ocf94?"6?00i:6`>79823>=hjj0;6)?89;`5?k7003;376amb;29 41>2k<0b<97:0;8?jdf290/=:75b79m52>=9h10co750;&23<2d:;54>b:9lf=<72-;<57l9;o345$05:>g05<#9>31n;5a16:95`=788a2>h6?10:j65`c783>!7013i>7c?88;28?je3290/=:75c49m52>=921do>4?:%34=?e23g;<47<4;na1>5<#9>31o85a16:97>=zj;?m6=4::183!7?<3;9i6F>oc=3:17dj9:188ma1=831d=?;50;9~f4d229086=4?{%3;0?75i2B8n;5G3`a8 `6=9l1bh94?::kg1?6=3f;997>5;|`2f3<72=0;6=u+196957e<@:h=7E=nc:&f4?7a3`n?6=44ie794?=nl?0;66a>2483>>{e:8i1<7=50;2x 4>3288j7E=m6:J0ef=#m90:i6gk4;29?lb22900c<<::188yg46l3:187>50z&2<1<6:j1C?o84H2c`?!c728l0ei:50;9j`0<722co:7>5;n311?6=3th9:=4?:483>5}#91>1=?k4H2`5?M5fk2.n<7?8;hf7>5<>oc?3:17b?=5;29?xu31<0;65uQ487897022m<01?8l:e58970?2m=01?8=:e6897062m>01?;i:e6897072m>0q~:63;2922}Y;jn0R>li;_6:`>X31k1U?ok4^5;;?[23>2T?5n5Q4558Z10>3W9hn6Pm;;_1`7>X3i>1U8l84^5c6?[2f<2T?m>5Q4`08Z1g63W>j<6P;9g9]0<4X30k1U85o4^5::?85e?3n970=n2;72?85>?3?:70=n1;72?85f83?:70=6f;72?85fi3?:70=n9;72?840=3?970<84;71?840;3?970<82;71?84093?970<78;71?84??3?970<76;71?84?=3?970<74;71?84bn3?9703?970f;71?856l3?970=61;3;7>;41808mk5238391d=:;0;19552383912=:;0;19;52383910=:;0;19952383926=:;0;1:?52383924=:;0;1:=5238391c=:;0;19h5238391a=:;0;19n5238391g=:;0;19>523839<2=:;0;1485rs5;4>5<4sW>2;63j57>53z\7e<=:;891h9523009`1=z{=236=4:8z\7<==:;0318;5238:903=:;0=18;523`3903=:;h:18;5238d903=::0?18;5221g903=::9n18;5221a903=::9h18;5221c903=::9318;5221:903=::9=18;52214903=::<<18;52247903=::<>18;52241903=::<818;52243903=::<:18;5225d903=::=o18;52256903=::=918;52250903=::=;18;52252903=:::l18;5222g903=:::n18;5222a903=:9jn18;521ba903=:9jh18;521bc903=:9j318;521b:903=:9j=18;521b4903=:9j?18;521b6903=::m818;522e3903=::jl18;522bg903=::m:18;522bf903=::ji18;522bc903=::j318;522b`903=::l<18;522d7903=::l>18;522d1903=::l818;522d3903=::l:18;522ed903=::mo18;522ef903=::?<18;52271903=::?k18;5227;903=:;><18;52367903=:;>>18;52361903=:;>818;52363903=:;>:18;5237d903=:;>o18;5236f903=:;>i18;5236`903=:;>k18;5236;903=:;>218;52365903=:;?o18;5237f903=:;0;18o5rs560>5<5sW>??63<11823g=z{=3n6=4;9z\7=`=:;h>18;523`0903=:;h918;523`c903=:;h318;52302903=:;9l18;521`5903=:9h<18;521`7903=:9h>18;521`1903=:9h818;521`3903=:9h:18;5218d903=:9o918;521g0903=:9o;18;521g2903=:9ll18;521dg903=:9ln18;521da903=:9lh18;521d3903=:9l:18;521ed903=:9mo18;521ef903=:9mi18;521e`903=:9mk18;521e;903=:9m218;52220903=:::;18;52222903=::;l18;5223g903=::;n18;5223a903=::;h18;5223c903=:;=218;52355903=:;=<18;52357903=:;=>18;52351903=:;=;18;52352903=:;=818;52346903=:;<818;52341903=:;18;5238390f=z{=996=4={_614>;4??0:;o5rs513>5<5sW>:j63<74823g=z{=8m6=4={_62a>;4?=0:;o5rs50f>5<5sW>:h63<72823g=z{=8o6=4={_62g>;4?;0:;o5rs50`>5<5sW>:n63<70823g=z{=8i6=4={_62e>;4?90:;o5rs50b>5<5sW>:563<6g823g=z{=9i6=4={_61<>;4?l0:;o5rs51b>5<5sW>9;63<7e823g=z{=926=4={_612>;4?j0:;o5rs51;>5<5sW>9963<7c823g=z{=9<6=4={_610>;4?h0:;o5rs515>5<5sW>9?63<78823g=z{=9>6=4={_616>;4?10:;o5rs517>5<5sW>9=63<76823g=z{=986=4={_62<>;4>l0:;o5rs50:>5<5sW>:;63<6e823g=z{=:m6=4={_1ff>;4180356s|41f94?4|V:oj70=61;4b?xu38j0;6?uQ3d;896?62?30q~:?b;296~X4m116?4?5699~w16f2909wS=j7:?0=4<1?2wx8=750;0xZ6c13492=789;|q742<72;qU?h:4=2;2>33;:7>52z\0a6=:;0;1495rs526>5<5sW9n>63<908;7>{t<9>1<793237p};0283>7}Y;l:01>7>:908yv27:3:1>vP7<7=081v9>>:181[5cm2785<470:p056=838pR>jk;<1:5?1a3ty8jk4?:3y]7ae<5:3:6:k4}r1ea?6=:rT8ho5238393d=z{:lh6=4={_1g=>;4180=j6s|3g`94?4|V:n370=61;47?xu4nh0;6?uQ3e5896?621i0q~=i9;296~X4l?16?4?57e9~w6`?2909wS=k5:?0=4<0j2wx?k950;0xZ6b33492=796;|q0b3<72;qU?i=4=2;2>2>52z\0`7=:;0;1;:5rs2d7>5<5sW9o=63<90842>{t;o91<793=>7p};1783>7}Y;o;01>7>:668yv26=3:1>vP7<7=0h1v9?;:181[5bn2785<483:p045=838pR>kj;<1:5?153ty?=?4?:3y]7`b<5:3:6:?4}r625?6=:rT8in52383935=z{=;;6=4={_1f1>;4180=i6s|41:94?4|V:nj70=61;4g?xu4nm0;6?uQ3bd896?62?i0q~=i2;296~X4kl16?4?56c9~w454290jw0=m8;342>;5?80?m63=8587e>;5mk0?m63=fd87e>;5j=0?m63=a387e>;4:m0?m63<1e87e>;4180h56s|38:94?5|5:3268?4=2;;>41e3492;7:7;|q0=<<72;q6?47516`896?e2m>0q~=n3;297~;4i=0>=63;4i:0:;o5rs2c7>5<5s49j87?8b:?0e378:05a?85>j3n>7p}6}:;h81=:l4=2c0>07<5:k=6i;4}r1:e?6=7`9>7d6=9>k01>7i:05b?85>j3;<86s|38g94?7fs49j=7?8b:?1=0<6?h16>i<54e9>6a7=nh54e9>6fc=i>54e9>6fb=nm54e9>6fg=n7516c897ee2=n01?k9:5f897c22=n01?k;:5f897c42=n01?k=:5f897c62=n01?k?:5f897ba2=n01?jj:5f897bc2=n01?89:5f897042=n01?8n:05b?84113;4;d:?107<3l2798<4;d:?105<3l279?k4;d:?17`<3l279?i4;d:?17f<3l27:oi4;d:?2gf<3l27:oo4;d:?2gd<3l27:o44;d:?2g=<3l27:o:4;d:?2g3<3l27:o84;d:?2g1<3l2wx?4m50;3685>n3;;4?<0?h63<7587`>;4?:0?h63<7387`>;4?80?h63<7187`>;4>o0?h63<7d87`>;4?m0?h63<7b87`>;4?k0?h63<7`87`>;4?00?h63<7987`>;4?>0?h63<6d87`>;4>m0?h63<928g0>;4180:4?5rs2c6>5<4s49jm7?8a:?0e<<6?h16?l851668yv5f03:1=hu23`c952d<5:;;69j4=22e>1b<5:>369j4=264>1b<5:>=69j4=266>1b<5:>?69j4=260>1b<5:>:6<9n;<174?2c349?>7:k;<160?2c349>>7?8a:?016<3l278984;d:?013<3l2789:4;d:?01=<3l278944;d:?01d<3l278:n4;d:?02g<3l278:l4;d:?02<<3l278:54;d:?022<3l278:;4;d:?020<3l278:94;d:p7d1=838=w0=n9;34f>;6i>0?h63>a787`>;6i<0?h63>a587`>;6i:0?h63>a387`>;6i80?h63>a187`>;61o0?h63>f287`>;6n;0?h63>f087`>;6n90?h63>eg87`>;6ml0?h63>ee87`>;6mj0?h63>ec87`>;6m80?h63>e187`>;6lo0?h63>dd87`>;6lm0?h63>db87`>;6lk0?h63>d`87`>;6l00?h63>d987`>;5;;0?h63=3087`>;5;90?h63=2g87`>;5:l0?h63=2e87`>;5:j0?h63=2c87`>;5:h0?h6s|28494?4|5;3>68?4=3;4>4133ty9584?:4y>6<3=9>h01?87:e6897062m?01?;i:e7897072m?0q~=>1;297~;4990>=63<0g865>;49;0:;95rs22e>5<4s49;j7?8b:?0567}::>?1=:j4=35e>4133ty95>4?:3y>623=9>>01?78:e48yv41n3:1>v3=7587e>;5?:0:;95rs35:>5<5s48<87?8d:?13`<6?=1v?8j:181840;3>j70<82;340>{t:>21<741c3487}::>81=:j4=35`>4133ty9;;4?:3y>627=9>n01?9m:057?xu50:0;6?u229:90d=::1=1=::4}r0;`?6=:r79454>7e9>6<4=9>>0q~<64;296~;5010:;9522859`0=z{;296=4={<0;3?2f3483:7?84:p6=e=838p1?68:05g?84>93;<86s|29394?4|5;2=69o4=3:6>4133ty94o4?:3y>6=0=9>n01?7?:057?xu5090;6?u229790d=::1>1=::4}r0;e?6=:r79484>7e9>6=`=9>>0q~<79;296~;50=0:;i5229g952252z?1ac<3i279ih4>759~w7`32909w0;5n00:;95rs22g>5<5s48nj7?84:?0572wx>h750;0x97cb2=k01?kk:057?xu5n:0;6?u22dg952b<5;l36<9;;|q1a=<72;q6>hj54`9>6`e=9>>0q~52z?1af<3i279io4>759~w7`62909w0;5n?0:;95rs3d3>5<5s48nn7?8d:?1b0<6?=1v?hk:181857:3>j70=?1;340>{t;9=1<741c349;o7?84:p75c=838p1>>=:057?856:3n<7p}=fb83>7}:;9;18l52312952252z?044<6?m16?=l51668yv4aj3:1>v3<0187e>;5no0:;95rs226>5<5s49;<7?8d:?04d<6?=1v?hn:18184an3>j70{t;9>1<741c349;57?84:p755=838p1?hj:05g?85703;<86s|1dc94?3|58k<68?4=0d0>41e34;j57j:;<3bf?b334;jh7j8;|q2=`<72:q6=l9516`8966d2m>01?h6:e78yv7f03:1>v3>a7865>;6i00:;95rs0;g>5<4s4;j:7?8b:?04g9b83>6}:9h?1=:l4=22a>a2<5;l36i94}r3bg?6=?r7:m94:1:?2ea<6?=16=lh5d49>5g7=l?16=o=5d69>5g1=l>16=o75d69~w4?e2908w0?n4;34f>;48h0o963=f68g1>{t9ho1<707<58km6<9;;|q2=d<72:q6=l=516`8966f2m>01?h8:e58yv7e83:1>v3>a3865>;6j80:;95rs0;:>5<4s4;j>7?8b:?04<:43894d428=?7p}>9983>6}:9h;1=:l4=22:>a2<5;l=6i94}r3a0?6=:r7:m=4:1:?2f2<6?=1v<78:18087f83;;5n<0o96s|1c:94?4|583m68?4=0`:>4133ty:5;4?:2y>5<`=9>h01>>7:e6897`22m=0q~<;d;291~;58l0>=63=57823g=::8:1h8522009`1=::8>1h:5rs326>5<4s48;i7?8b:?1=7k:438977728=?7p}=0583>6}::9n1=:l4=3;1>a2<5;=m6i:4}r025?6=:r79<:180847k3;;5?l0o96s|20194?1|5;:i68?4=337>413348::7j:;<02=l516`897?62m>01?9j:e68yv46=3:1>v3=0`865>;59?0:;95rs322>5<4s48;m7?8b:?1=56:438977?28=?7p}=0183>6}::931=:l4=3;3>a2<5;=o6i:4}r02=?6=:r79<54:1:?15d<6?=1v;5?j0o96s|20`94?4|5;:<68?4=33f>4133ty:jh4?:2y>651=9>h01?6i:e68971d2m>0q~<>f;296~;58?0>=63=218231=z{8lo6=4<{<032?70j2794h4k4:?13g>l50;0x97312<;01?:;:05a?xu5;h0;6?u2247914=::=91=:l4}r07g?6=7c9>646=l=16><<5d49>642=l?1v?=6:181842<3?:70<;2;34f>{t:=h1<7=t=377>41e348:>7j9;<020?b23ty9?54?:3y>605==816>9?516`8yv43i3:1>v3=52823g=::8>1h95rs314>5<5s48>>7;>;<074?70j2wx>9750;4x973528=i70<>6;f7?84603n>70<>a;f5?846m3n>70<=0;f6?xu5;?0;6?u2243914=:::l1=:l4}r077c9>64>=l=16>64c=l=16>?>5d59~w7522909w0<:0;72?844m3;61`==816>>j516`8yv43>3:1?v3=4g823g=::8i1h85220f9`0=z{;986=4={<07a?363488o7?8b:p613=838p1?:j:05a?846l3n=7p}>d683>7}:9o919<521d3952d52z?2b7<2927:i=4>7c9~w4c>290?w0?i2;34f>;6i00o863>ac8g1>;6im0o:6s|1e794?4|58l:68?4=0fe>41e3ty:i54?:2y>5c7=9>h01=63>dd823g=z{8o<6=4={<3e4?70j27:mi4k4:p5a5=838p1e783>3}:9ll1=:l4=0ce>a2<58h:6i;4=0`0>a0<58h<6i;4=0`:>a37>52z?2a`<2927:hn4>7c9~w4c2290>w0?je;34f>;6j80o863>b28g1>;6j>0o863>b88g0>{t9m;1<707<58ni6<9m;|q2a1<72=q6=hj516`894d42m>010q~?k0;296~;6mj0>=63>d`823g=z{8o86=4<{<3fg?70j27:n84k5:?2f3{t:;=1<707<5;9;6<9m;|q163<72;q6>9?5509>67`=9>h0q~<=5;296~;5<90>=63=2d823g=z{;8?6=4={<00b?363489h7?8b:p675=838p1?=j:438974d28=i7p}=2383>7}:::n19<5223`952d52z?17f<29279>l4>7c9~w4e42909w0?j1;72?87dl3;41e3ty:o<4?:3y>5a`==816=nl516`8yv7d83:1>v3>dd865>;6kh0:;o5rs0`e>5<5s4;oh7;>;<3`=?70j2wx=ok50;0x94bd2<;01{t9kk1<707<58i?6<9m;|q2g`<728q6=i6516`8yv4ck3:19v3>ce865>;5m?0:;o521979`1=::>l1h:5238397==z{8l?6=4={<3`g?3634;397?84:p5c3=838p1128=?7p}>f783>7}:9jk19<52195952252z?2g<<2927:454>759~w4`?2909w0?l8;72?87?13;<86s|1g;94?4|58i<68?4=0:b>4133ty:jl4?:3y>5f0==816=5l51668yv7aj3:1>v3>c4865>;60j0:;95rs0d`>5<5s4;h87;>;<3;`?70<2wx?;=50;6x97552<;01>8l:05a?87?m3n?70=61;61?xu5=>0;6?u2223914=:91o1=::4}r06{t:07<583:6<9;;|q11g<72;q6>?j5509>5<4=9>>0q~<:c;296~;5:j0>=63>928231=z{;?o6=4={<01f?3634;287?84:p60c=838p1?43|5;n96964=3f2>1><5;im6964=3af>1><5;n;6964=3ag>1><5;ih6964=3ab>1><5;i26964=3aa>1><5;o=6964=3g6>1><5;o?6964=3g0>1><5;o96964=3g2>1><5;o;6964=3fe>1><5;nn6964=3fg>1><5;<:6<9;;|q1e4<72;q6>i<5509>6gb=9>>0q~p1?j>:05a?84b=3?:70<62;f5?84e;3n?7p}=9d83>7}::jl19<522cc952254z?1gc<6?k16>h=5509>6<7=l?16>lh5d59~w7?c2909w06a6==816>ol51668yv4d>3:18v3=d1823g=::l>19<522839`2=::k;1h95rs3;`>5<5s48hh7;>;<0an=50;6x97ec28=i7083n=707c9>6`6==816>5h5d69>6d?=l=1v?76:18184di3?:70{t:j:1<7:t=3ab>41e348oi7;>;<0;a?b2348j97j;;|q1==<72;q6>n75509>6g2=9>>0q~p1?mm:05a?84cn3?:70<7f;f5?84f?3n?7p}=b383>7}::kn18l522c0952252z?1fa<6:=16>ok51668yv4e83:1?v3=bb87e>;5j;0?m63=b18231=z{;h86=4<{<0ag?75<279n?4>7e9>6g5=9>>0q~;5il0:;95rs3`2>5<4s48in7?=4:?1f5<6?m16>o?51668yv4fk3:1?v3=b`87e>;5il0?m63=ab8231=z{;km6=4<{<0ae?75<279mh4>7e9>6d`=9>>0q~;5ih0:;95rs3cg>5<4s48i57?=4:?1ef<6?m16>lj51668yv4f03:1?v3=b987e>;5ih0?m63=a98231=z{;ki6=4<{<0a7e9>6dd=9>>0q~0?m63=a987e>;5i?0:;95rs3c:>5<4s48i;7?=4:?1e=<6?m16>l751668yv4f<3:1?v3=b787e>;5i?0?m63=a58231=z{;k<6=4<{<0a2?75<279m;4>7e9>6d1=9>>0q~;5i;0:;95rs3c6>5<4s48i97?=4:?1e1<6?m16>l;51668yv4f;3:1?v3=b58261=::h81=:j4=3c0>4133ty9ho4?:4y>6`3=9>h01<69:e6894>22m?01?9i:e4896?62:<0q~5<2s48n?7?8b:?2<=2785<4<4:p6a>=83?p1?k=:05a?87?13n?70?78;f6?840l3n<70=61;10?xu5l>0;68u22d3952d<582j6i:4=0::>a3<5;=o6i84=2;2>6455z?1a5<6?k16=5l5d59>5=g=l<16>:m5d69>7<7=;81v?j::18684cn3;8b8g0>;60k0o963=7b8g2>;41808<6s|2e694?3|5;nn6<9m;<3;`?b334;3o7j:;<04f?b13492=7ij516`894>c2m?01?9m:e7896?62;o0q~<97;296~;5>?0>=63=698231=z{;<=6=47{<052?70j279:84k5:?12f279:54k6:?127279:<4k7:?11c=}::?91=:l4=346>a2<5;a3<5;<96i;4=342>a0<5;?m6i84=343>a053z?12d<29279:44:1:?12f<6?=1v?86:18184113;{t;0<1<7?k{<1787:7;<166?2?349>?7:7;<161?2?349>:7:7;<163?2?349>47:7;<16=?2?349>m7:7;<15g?2?349=n7:7;<15e?2?349=57:7;<15?l:18185303?:70=<5;340>{t;:l1<7:t=26;>41e349>m7;>;<13g?b23498:7j;;|q05g<72;q6?995509>762=9>>0q~=0:;o5234;914=:;9h1h:5233a9`1=z{:;j6=4={<172?363498?7?84:p76b=83>p1>:9:05a?85203?:70=?b;f5?855i3n?7p}<1883>7}:;=?19<52320952254z?000<6?k16?895509>75g=l>16??65d59~w67?2909w0=;4;72?85493;<86s|32`94?2|5:>?6<9m;<162?36349;m7j9;<112?b33ty8=:4?:3y>715==816?>>51668yv54i3:18v3<42823g=:;1h95rs236>5<5s49?=7;>;<11a?70<2wx?>650;6x962628=i70=:3;72?85703n<70==0;f7?xu49=0;6?u2352914=:;;n1=::4}r103?6=7c9>704==816?=65d79>74c=l=1v>?9:181853:3?:70==f;340>{t;:31<7:t=261>41e349>87;>;<13=?b13499>7j;;|q06g<72;q6?>;54`9>77d=9>>0q~=<6;296~;4;<0:>952324952253z?071<3i278>o4;a:?06<<6?=1v>4;a:?06<<3i278>:4>759~w64f2908w0=<3;310>;4:00:;i5233c952253z?077<3i278>:4;a:?060<6?=1v><7:180854:3;9863<26823a=:;;21=::4}r117?6=;r78?<4;a:?060<3i278>>4>759~w6412908w0=<1;310>;4:<0:;i52334952253z?075<3i278>>4;a:?064<6?=1v><;:18085483;9863<22823a=:;;>1=::4}r12b?6=;r78>k4;a:?064<3i278=k4>759~w6452908w0==f;310>;4:80:;i52330952253z?06`<3i278=k4;a:?05a<6?=1v>i4>259>74b=9>n01>?j:057?xu4u2346952d<5:<=68?4=3d5>a053z?017<6?k16?;:5509>6c3=l?1v>:n:180852;3;;5n<0o86s|35a94?5|5:?>6<9m;<153?36348m:7j;;|q00a<72:q6?88516`8960?2<;01?h8:e48yv53m3:1?v3<56823g=:;?319<522g59`1=z{:>m6=4<{<162wx?8>50;1x963>28=i70=9b;72?84a03n?7p}<5083>6}:;07<5;l26i:4}r156?6=7c9>5=`=l=16=5k5d49>7<7=<91v>8>:187851i3;918g0>;60o0o963<9080b>{t;?:1<7:t=24:>41e34;2=7j;;<3:4?b23492=7=j;|q01c<72=q6?;6516`894?52m>01<7>:e7896?62:n0q~=:e;290~;4>>0:;o521819`1=:9081h85238397f=z{:?o6=4;{<152?70j27:594k4:?2=6p1>8::05a?87>=3n?70?64;f6?85>939j7p}<5c83>6}:;?>1=:l4=0;6>a3<5:3:6>74}r1:1?6=9:q6?:85499>723=<116?::5499>725=<116?:<5499>727=<116?:>5499>73`=<116?:k5499>72b=<116?:m5499>72d=<116?:o5499>72?=<116?:65499>721=<116?;k5499>73b=<116>;<51668yv5??3:1>v3<77865>;4180h=6s|39494?4|5:=>68?4=2;2><252z?031<292785<462:p7=2=838p1>9<:43896?620;0q~=73;296~;4?;0>=63<908:4>{t;181<707<5:3:65h4}r1;5?6=:r78;=4:1:?0=450;0x960a2<;01>7>:8f8yv5>83:1>v3<7d865>;41802o6s|39d94?4|5:=o68?4=2;2>g`52z?03f<292785<46b:p7=b=838p1>9m:43896?620k0q~=7c;296~;4?h0>=63<908:=>{t;1h1<707<5:3:6464}r1;e?6=:r78;54:1:?0=4<>?2wx?5750;0x96102<;01>7>:848yv5?03:1>v3<6d865>;4180296s|36d94?4|5:=bj7>52z?0=6249~w6?52909w0=63;340>;4180h46s|38694?4|5;3<6i:4=37e>4423ty::94?:3y>5g1=l?16=o;51378yv71>3:1>v3>b88g2>;6j?0:>85rs04;>5<5s48:i7j9;<02g?75=2wx=;o50;0x97472m<01??k:006?x{t<9l1<7{t<9n1<7{t<9i1<7{t<9h1<7{t<9k1<7{t<931<7{t<9=1<7{t<9<1<7{t<9?1<7{t<9>1<7{t<991<7{t<981<7{t<9;1<7{t<9:1<7{t;ol1<7{t;oo1<7{t;oi1<7{t;oh1<7{t;ok1<7{t;o31<7{t;o21<77)=nb;36g>{t;o=1<7{t;o<1<7{t;o?1<7{t;o>1<7{t;o91<7{t<8<1<7{t<8?1<7{t<8>1<7{t<891<7{t<881<7{t<8;1<7{t<8:1<77)=nb;35<>{t<921<7{t;on1<7{t;o81<7{t<121<7{t<0?1<77)=nb;301>{t<0=1<7{t<0o1<7{t{t<:81<7{t<::1<7{t<;l1<7{t<;o1<7{t<;n1<7{t<;i1<7{t<;h1<7{t<;k1<7{t<:h1<7{t<:k1<7{t<:31<7{t<:21<77)=nb;372>{t<:=1<7{t<:<1<7{t<:?1<7{t<:>1<7{t<:91<7{t<;31<7{t<:n1<7{t<=91<787)=nb;37b>{zf1n?6=4={I1bg>{i0m?1<7c?3:1>vFol;|l;`d<72;qC?lm4}o:gf?6=:rB8mn5rn9f`>5<5sA9jo6sa8ef94?4|@:kh7p`7dd83>7}O;hi0qc6kf;296~N4ij1vb5k?:181M5fk2we4h?50;0xL6gd3td3i?4?:3yK7de52zJ0ef=zf1o?6=4={I1bg>{i0l?1<7b?3:1>vFol;|l;ad<72;qC?lm4}o:ff?6=:rB8mn5rn9g`>5<5sA9jo6sa8df94?4|@:kh7p`7ed83>7}O;hi0qc6jf;296~N4ij1vb5h?:181M5fk2we4k?50;0xL6gd3td3j?4?:3yK7de52zJ0ef=zf1l?6=4={I1bg>{i0o?1<7a?3:1>vFol;|l;bd<72;qC?lm4}o:ef?6=:rB8mn5rn9d`>5<5sA9jo6sa8gf94?4|@:kh7p`7fd83>7}O;hi0qc6if;296~N4ij1vb4>?:181M5fk2we5=?50;0xL6gd3td252zJ0ef=zf0:?6=4={I1bg>{i19?1<78?0;6?uG3`a8yk?7?3:1>vFol;|l:4d<72;qC?lm4}o;3f?6=:rB8mn5rn82`>5<5sA9jo6sa91f94?4|@:kh7p`60d83>7}O;hi0qc7?f;296~N4ij1vb4??:181M5fk2we;;o50;3xL6gd3td51zJ0ef=zf>k26=4>{I1bg>{i?hk1<7?tH2c`?xh0ik0;6ol;|l4ec<728qC?lm4}o5a4?6=9rB8mn5rn6`2>5<6sA9jo6sa7c094?7|@:kh7p`8b283>4}O;hi0qc9m4;295~N4ij1vb:l::182M5fk2we;o850;3xL6gd3td51zJ0ef=zf>h26=4>{I1bg>{i?kk1<7?tH2c`?xh0jk0;6ol;|l4fc<728qC?lm4}o5`4?6=9rB8mn5rn6a2>5<6sA9jo6sa7b094?7|@:kh7p`8c283>4}O;hi0qc9l4;295~N4ij1vb:m::182M5fk2we;n850;3xL6gd3td51zJ0ef=zf>i26=4>{I1bg>{i?jk1<7?tH2c`?xh0kk0;6ol;|l4gc<728qC?lm4}o5g4?6=9rB8mn5rn6f2>5<6sA9jo6sa7e094?7|@:kh7p`8d283>4}O;hi0qc9k4;295~N4ij1vb:j::182M5fk2we;i850;3xL6gd3td51zJ0ef=zf>n26=4>{I1bg>{i?mk1<7?tH2c`?xh0lk0;6ol;|l4`c<728qC?lm4}o5f4?6=9rB8mn5rn6g2>5<6sA9jo6sa7d094?7|@:kh7p`8e283>4}O;hi0qc9j4;295~N4ij1vb:k::182M5fk2we;h850;3xL6gd3td51zJ0ef=zf>o26=4>{I1bg>{i?lk1<7?tH2c`?xh0mk0;6ol;|l4ac<728qC?lm4}o5e4?6=9rB8mn5rn6d2>5<6sA9jo6sa7g094?7|@:kh7p`8f283>4}O;hi0qc9i4;295~N4ij1vb:h::182M5fk2we;k850;3xL6gd3td51zJ0ef=zf>l26=4>{I1bg>{i?ok1<7?tH2c`?xh0nk0;6ol;|l4bc<728qC?lm4}o:34?6=9rB8mn5rn922>5<6sA9jo6sa81094?7|@:kh7p`70283>4}O;hi0qc6?4;295~N4ij1vb5>::182M5fk2we4=850;3xL6gd3td3<:4?:0yK7de51zJ0ef=zf1:26=4>{I1bg>{i09k1<7?tH2c`?xh?8k0;67k3:1=vFol;|l;4c<728qC?lm4}o:24?6=9rB8mn5rn932>5<6sA9jo6sa80094?7|@:kh7p`71283>4}O;hi0qc6>4;295~N4ij1vb5?::182M5fk2we4<850;3xL6gd3td3=:4?:0yK7de51zJ0ef=zf1;26=4>{I1bg>{i08k1<7?tH2c`?xh?9k0;66k3:1=vFol;|l;5c<728qC?lm4}o:14?6=9rB8mn5rn902>5<6sA9jo6sa83094?7|@:kh7p`72283>4}O;hi0qc6=4;295~N4ij1vb5<::182M5fk2we4?850;3xL6gd3td3>:4?:0yK7de51zJ0ef=zf1826=4>{I1bg>{i0;k1<7?tH2c`?xh?:k0;65k3:1=vFol;|l;6c<728qC?lm4}o:04?6=9rB8mn5rn912>5<6sA9jo6sa82094?7|@:kh7p`73283>4}O;hi0qc6<4;295~N4ij1vb5=::182M5fk2we4>850;3xL6gd3td3?:4?:0yK7de51zJ0ef=zf1926=4>{I1bg>{i0:k1<7?tH2c`?xh?;k0;64k3:1=vFol;|l;7c<728qC?lm4}o:74?6=9rB8mn5rn962>5<6sA9jo6sa85094?7|@:kh7p`74283>4}O;hi0qc6;4;295~N4ij1vb5:::182M5fk2we49850;3xL6gd3td38:4?:0yK7de51zJ0ef=zf1>26=4>{I1bg>{i0=k1<7?tH2c`?xh?3k3:1=vFol;|l;0c<728qC?lm4}o:64?6=9rB8mn5rn972>5<6sA9jo6sa84094?7|@:kh7p`75283>4}O;hi0qc6:4;295~N4ij1vb5;::182M5fk2we48850;3xL6gd3td39:4?:0yK7de47>51zJ0ef=zf1?26=4>{I1bg>{i02k3:1=vFol;|l;1c<728qC?lm4}o:54?6=9rB8mn5rn942>5<6sA9jo6sa87094?7|@:kh7p`76283>4}O;hi0qc694;295~N4ij1vb58::182M5fk2we4;850;3xL6gd3td3::4?:0yK7de51zJ0ef=zf1<26=4>{I1bg>{i0?k1<7?tH2c`?xh?>k0;61k3:1=vFol;|l;2c<728qC?lm4}o:44?6=9rB8mn5rn952>5<6sA9jo6sa86094?7|@:kh7p`77283>4}O;hi0qc684;295~N4ij1vb59::182M5fk2we4:850;3xL6gd3td3;:4?:0yK7de51zJ0ef=zf1=26=4>{I1bg>{i0>k1<7?tH2c`?xh??k0;60k3:1=vFol;|l;3c<728qC?lm4}o:;4?6=9rB8mn5rn9:2>5<6sA9jo6sa89094?7|@:kh7p`78283>4}O;hi0qc674;295~N4ij1vb56::182M5fk2we45850;3xL6gd3td34:4?:0yK7de51zJ0ef=zf1226=4>{I1bg>{i01k1<7?tH2c`?xh?0k0;6?k3:1=vFc290:wE=nc:m<=c=83;pD>ol;|l;5<6sA9jo6sa88094?7|@:kh7p`79283>4}O;hi0qc664;295~N4ij1vb57::182M5fk2we44850;3xL6gd3td35:4?:0yK7de51zJ0ef=zf1326=4>{I1bg>{i00k1<7?tH2c`?xh?1k0;6>k3:1=vFol;|l;=c<728qC?lm4}o:b4?6=9rB8mn5rn9c2>5<6sA9jo6sa8`094?7|@:kh7p`7a283>4}O;hi0qc6n4;295~N4ij1vb5o::182M5fk2we4l850;3xL6gd3td3m:4?:0yK7de51zJ0ef=zf1k26=4>{I1bg>{i0hk1<7?tH2c`?xh?ik0;6fk3:1=vFol;|l;ec<728qC?lm4}o:a4?6=9rB8mn5rn9`2>5<6sA9jo6sa8c094?7|@:kh7p`7b283>4}O;hi0qc6m4;295~N4ij1vb5l::182M5fk2we4o850;3xL6gd3td3n:4?:0yK7de51zJ0ef=zf1h26=4>{I1bg>{i0kk1<7?tH2c`?xh?jk0;6ek3:1=vFol;|l;fc<728qC?lm4}o:`4?6=9rB8mn5rn9a2>5<6sA9jo6sa8b094?7|@:kh7p`7c283>4}O;hi0qc6l4;295~N4ij1vb5m::182M5fk2we4n850;3xL6gd3td3o:4?:0yK7de51zJ0ef=zf1i26=4>{I1bg>{i0jk1<7?tH2c`?xh?kk0;6dk3:1=vFol;|l;gc<728qC?lm4}o:g4?6=9rB8mn5rn9f2>5<6sA9jo6sa8e094?7|@:kh7p`7d283>4}O;hi0qpsr@AAxe2e==ml>?i==}ABA5{GHYqvLM \ No newline at end of file +$5cg4g<,[o}e~g`n;"2*413&;$>"9 > %0:?*rjx&Uhk"hffn]{hk~X=88s?;Q=cmi\73rh91$ekb?40493456712:;<=>?01274>6789:;<=>?0123456789:;<=>?0123456789:;<=>?0123456789:;<=>?0123454<80;0=>5>.130?46=AGZ^X7OKDSC?=?699o1:<7GAPTV9twi`Wlg{xtQ{hsgpl9?=878=7<>5IORVP?vugnUna}zv_ujqavnXizyn~y26:1<12>772@D[YY4rne\ahvsqV~c~h}g_ogdeqc;13:5=n5>0;MVPUSS2{nThlzn_bmvjq:>294:>6?9:HLSQQ112922?IR\Y__6IAN<0794;733821CXZ_UU8gkpr;9>0;2<5=2:020>44;:;:7?4FNQWW>AOWI5;1<3?=;38LQQVR\3ND\L2>:1<26>552@D[YY4KIC>05?699:18>7AZTQWW>AIE4:;1<3?=;249MKVR\3nbb1=::1AIWJ591<3:45E765>053?3?7;76659;077331O3M<564:;34<4<1?>05;86139:>LHW]]0JHI\M<983:4b<13CE\XZ5psmd[cskdV~c~h}g<983:72<13CE\XZ5psmd[cskdV~c~h}g_`qpawr;03:5>956:HLSQQ?=G\^[YY4kauc\gjsi|521<3?m;88LQQVR\3}ySio{a^alqkr;03:546OKDSC?4;>GCL[K78364AEFQE93902KOH_O36?:8EABUI5=546OKDSC?<;gGCL[H78364AEFQF93902KOH_L36?:8EABUJ5=5m6OKDS@?E53JO:>6MGEBI\HLEBFZOTXT^J2:AJ0>EKCH>0OAEM3:AOV<=DGDGBXYKK159@KWCXOLDN^LZFOO]JJCI03JXNMYKK1:F1?AO13MCJ0=08;EKB8469?2NBM1?>>69GMD:6:7=0HDO312<4?AOF48>556JFA=36>5803MCJ0<;16:FJE979>2NBM1<16:FJE959>2NBM1:16:FJE939>2NBM1816:FJE919>2NBM1616:FJE9?9>2NBN1>17:FJF9776>1OEO2>1?58@LD;9;4<7IGM<01=3>BNJ5;?2:5KIC>21;169GMG:617<0HDL31?58@LD;:94<7IGM<33=3>BNJ5892:5KIC>17;1908;EKA8739?2NBN1<9>69GMG:5?7=0HDL329<4?AOE4;35:6JFB=0=3>BNJ59;245KIC>05?69?2NBN1=>>79GMG:46?1OEO2;>79GMG:26?1OEO29>79GMG:06?1OEO27>79GMG:>6>1OE]O30?;8@LVF480;2:5KIQC?5;189GMUD;;3:5;6JFPC>0:3=CGH6;2:5KO@>24;169GKD:6<730HBO31483:2=CGH6:9384DNC?5;0384DNC?7;01OCO2>3?58@JD;9=4<7IAM<07=3>BHJ5;=2:5KOC>23;12NDN1?17:FLF9476>1OCO2=1?58@JD;:;4<7IAM<31=3>BHJ58?2:5KOC>11;1;08;EMA8719?2NDN1<7>69GKG:517<0HBL32?58@JD;;9427IAM<2394;119:FLTD:6294<7IA_A=3=3>BHXK6;2:5KOQ@?5;1@fdzo:7J=4GOF1?L653@;97D<=;H1;?LHN\YU;<55FNHVS[57?3@DBX]Q?299JJLRWW9937D@FTQ]30==NF@^[S=;7;HLJPUY7>11BBDZ__15:?LHN\Z^JXH94IOKW[5603@DBXR>>7:KMMQY7:>1BBDZP0258MKOSW9><7D@FT^263>OIA]U;::5FNHV\421?2CEEYQ?A69JJLRX8K=0ECG[_1A4?LHN\V:O;6GAIU]3A2=NF@^T7:KMMQY6:>1BBDZP1258MKOSW8><7D@FT^363>OIA]U:::5FNHV\521?2CEEYQ>A69JJLRX9K=0ECG[_0A4?LHN\V;O;6GAIU]2A2=NF@^T=K94IOKW[7603@DBXR<>7:KMMQY5:>1BBDZP2258MKOSW;><7D@FT^063>OIA]U9::5FNHV\621?2CEEYQ=A69JJLRX:K=0ECG[_3A4?LHN\V8O;6GAIU]1A2=NF@^T>K94IOKW[6603@DBXR=>7:KMMQY4:>1BBDZP3258MKOSW:><7D@FT^163>OIA]U8::5FNHV\72168;HLJPZ5>?2CEEYQ2F^X?QC4:NVP60JR\=UG96C\GNL6?HS_KPi0Ald`rWgqwliik2Gbbb|Yesqjkk4;;O3341=I998?7C??459M55343G;:86@>1968J47>;2D:>95A1327?K759=1E=?<;;O3171=I9;>?7C?=559M57033G;9;95A13:7?K751:1E=>:4N0130>H6;8>0B<==4:L27623468J451<2D:?:=4N060?K72;2D::>5A1618J4>43G;2?6@=029M645H50:1E>4=4N220?K56;2D8>>5A3218J6243G9>?6@<629M725;N08KN7UNEVID@AG\INL\GMCDC?1XCX\LE69PVSGKWH=0__XNL^@7?VUUI=1X__L;;U[SA64<]9%l~k }f.e`|+ekcq%Ftb|Pre]sjqtXojUsc>?01]Qavsk|8997X> gsd-vc)`kq$h`fv Mymq[wbXxg~ySjmPxnp3457XZly~`y?<2:W3+bta&{l$knv!cmi{+H~hzVxoS}`{r^e`[}iu89:9S_k|umv277=R8&myj#|i/fa{*fjlp&GscQ}d^rmpwY`kVrd~=>?3^Pfwpjs9:80Y=!hrg,qb*adp'iggu!Bxnp\vaYwf}xTknQwos2341YUmzgx<==;T2,cw`)zo%lou lljz,I}iuW{nT|cz}_fa\|jt789?T^h}zlu306>S7'nxm"h gbz-gim'Drd~R|k_qlwvZadWqey<=>9_Sgpqir6;;1^<"i}f/pe+be&jf`t"Cwos]q`Zvi|{UloRv`r1233ZTb{|f=><4U1-dvc(un&mht#mcky-N|jtXzmU{by|Pgb]{kw6781UYi~{ct011?P6(o{l%~k!hcy,`hn~(EqeySz|Ppovq[beXpfx;<=>PRdqvhq74:2_;#j|i.sd,cf~)keas#@v`r^uq[uhszVmhSua}0122[Wct}e~:??5Z0.eqb+ta'nis"nbdx.O{kwYpzVzexQhc^zlv567:VXnxb{1208Q5)`zo$yj"ilx/aoo})JpfxT{Qnup\cfYg{:;<>Q]erwop4553\:$kh!rg-dg}(ddbr$Aua}_vp\tkruWniTtb|?016\V`urd};8>6[?/fpe*w`(ojr%oaew/LzlvZquWyd~Ril_ymq4562W[oxyaz>339V4*aun'xm#jmw.bnh|*Kg{U|~R~ats]dgZ~hz9:;:R\jstnw564<]9%l~k }f.e`|+ekcq%Ftb|Pws]sjqtXojUsc>?06]Qavsk|88:7X> gsd-vc)`kq$h`fv re]sjqtXj`d7=3<>;T2,cw`)zo%lou lljz,vaYwf}xTnd`32?02?P6(o{l%~k!hcy,`hn~(zmU{by|Pbhl?7;463\:$kh!rg-dg}(ddbr$~iQnup\flh;<78:7X> gsd-vc)`kq$h`fv re]sjqtXj`d793<>;T2,cw`)zo%lou lljz,vaYwf}xTnd`36?02?P6(o{l%~k!hcy,`hn~(zmU{by|Pbhl?3;463\:$kh!rg-dg}(ddbr$~iQnup\flh;078:7X> gsd-vc)`kq$h`fv re]sjqtXj`d753 gsd-vc)`kq$h`fv re]sjqtXj`dT9?>4U1-dvc(un&mht#mcky-q`Zvi|{UiecQ9219V4*aun'xm#jmw.bnh|*tcWyd~Rlfn^514>S7'nxm"h gbz-gim'{nT|cz}_ckm[=473\:$kh!rg-dg}(ddbr$~iQnup\flhX1;<0Y=!hrg,qb*adp'iggu!}d^rmpwYeagUsc>?0104?P6(o{l%~k!hcy,`hn~(zmU{by|Pbhl\|jt789::>;5Z0.eqb+ta'nis"nbdx.pg[uhszVhbbRv`r123571<]9%l~k }f.e`|+ekcq%yhR~ats]amkYg{:;<1^<"i}f/pe+be&jf`t"|k_qlwvZdnfVrd~=>?2005?P6(o{l%~k!hcy,`hn~(zmU{by|Pbhl\|jt78999;6[?/fpe*w`(ojr%oaew/sf\tkruWkceSua}0120670<]9%l~k }f.e`|+ekcq%yhR~ats]amkYg{:;<9<8;T2,cw`)zo%lou lljz,vaYwf}xTnd`Pxnp34526:?1^<"i}f/pe+be&jf`t"|k_qlwvZdnfVrd~=>?5358Q5)`zo$yj"ilx/aoo})ulVzexQmio]{kw678<;9:6[?/fpe*w`(ojr%oaew/sf\tkruWkceSua}01256f=R8&myj#|i/fa{*fjlp&xoS}`{r^`jjZ~hz9:;:S7'nxm"h gbz-gim'{nT|cz}_ckm[}iu89:==;5Z0.eqb+ta'nis"nbdx.pg[uhszVhbbRv`r123371<]9%l~k }f.e`|+ekcq%yhR~ats]amkYg{:;<:?=0:W3+bta&{l$knv!cmi{+wbXxg~ySjm30?03?P6(o{l%~k!hcy,`hn~(zmU{by|Pgb>2:76<]9%l~k }f.e`|+ekcq%yhR~ats]dg949:91^<"i}f/pe+be&jf`t"|k_qlwvZad4:49<6[?/fpe*w`(ojr%oaew/sf\tkruWni783328Q5)`zo$yj"ilx/aoo})ulVzexQhc=4=65=R8&myj#|i/fa{*fjlp&xoS}`{r^e`828582_;#j|i.sd,cf~)keas#jPpovq[be;078;7X> gsd-vc)`kq$h`fv re]sjqtXoj622>f:W3+bta&{l$knv!cmi{+wbXxg~ySjmP10d8Q5)`zo$yj"ilx/aoo})ulVzexQhc^02b>S7'nxm"h gbz-gim'{nT|cz}_fa\74`<]9%l~k }f.e`|+ekcq%yhR~ats]dgZ26n2_;#j|i.sd,cf~)keas#jPpovq[beX=8l0Y=!hrg,qb*adp'iggu!}d^rmpwY`kV<:j6[?/fpe*w`(ojr%oaew/sf\tkruWniT;f:W3+bta&{l$knv!cmi{+wbXxg~ySjmP9348Q5)`zo$yj"ilx/aoo})ulVzexQhc^cpv`a;878=7X> gsd-vc)`kq$h`fv re]sjqtXojUjkh<0<12>S7'nxm"h gbz-gim'{nT|cz}_fa\evtbo585>;5Z0.eqb+ta'nis"nbdx.pg[uhszVmhSl}}ef>0:70<]9%l~k }f.e`|+ekcq%yhR~ats]dgZgtzlm783<9;T2,cw`)zo%lou lljz,vaYwf}xTknQnssgd8085>2_;#j|i.sd,cf~)keas#jPpovq[beXizxnk181279V4*aun'xm#jmw.bnh|*tcWyd~Ril_`qqab:06;<0Y=!hrg,qb*adp'iggu!}d^rmpwY`kVkx~hi38?05?P6(o{l%~k!hcy,`hn~(zmU{by|Pgb]bwwc`404996[?/fpe*w`(ojr%oaew/sf\tkruWniTm~|jg^211>S7'nxm"h gbz-gim'{nT|cz}_fa\evtboV;996[?/fpe*w`(ojr%oaew/sf\tkruWniTm~|jg^011>S7'nxm"h gbz-gim'{nT|cz}_fa\evtboV9996[?/fpe*w`(ojr%oaew/sf\tkruWniTm~|jg^611>S7'nxm"h gbz-gim'{nT|cz}_fa\evtboV?996[?/fpe*w`(ojr%oaew/sf\tkruWniTm~|jg^411>S7'nxm"h gbz-gim'{nT|cz}_fa\evtboV=996[?/fpe*w`(ojr%oaew/sf\tkruWniTm~|jg^:11>S7'nxm"h gbz-gim'{nT|cz}_fa\evtboV3956[?/fpe*w`(ojr%oaew/sf\tkruWniTm~|jg^f2848512_;#j|i.sd,cf~)keas#jPpovq[beXizxnkRj><3<1=>S7'nxm"h gbz-gim'{nT|cz}_fa\evtboVn:0>0=9:W3+bta&{l$knv!cmi{+wbXxg~ySjmParpfcZb64=4956[?/fpe*w`(ojr%oaew/sf\tkruWniTm~|jg^f2808512_;#j|i.sd,cf~)keas#jPpovq[beXizxnkRj><7<1=>S7'nxm"h gbz-gim'{nT|cz}_fa\evtboVn:0:0=9:W3+bta&{l$knv!cmi{+wbXxg~ySjmParpfcZb6414956[?/fpe*w`(ojr%oaew/sf\tkruWniTm~|jg^f28<8502_;#j|i.sd,cf~)keas#jPpovq[beXizxnkRj>_00;?P6(o{l%~k!hcy,`hn~(zmU{by|Pgb]bwwc`Wm;T>?64U1-dvc(un&mht#mcky-q`Zvi|{UloRo|rde\`4Y4:11^<"i}f/pe+be&jf`t"|k_qlwvZadWhyyijQk1^61<>S7'nxm"h gbz-gim'{nT|cz}_fa\evtboVn:S8<7;T2,cw`)zo%lou lljz,vaYwf}xTknQnssgd[a7X>;20Y=!hrg,qb*adp'iggu!}d^rmpwY`kVkx~hiPd0]46==R8&myj#|i/fa{*fjlp&xoS}`{r^e`[duumnUo=R6=8:W3+bta&{l$knv!cmi{+wbXxg~ySjmParpfcZb6W08>7X> gsd-vc)`kq$h`fv re]sjqtXojUsc>?0106?P6(o{l%~k!hcy,`hn~(zmU{by|Pgb]{kw67888>7X> gsd-vc)`kq$h`fv re]sjqtXojUsc>?0306?P6(o{l%~k!hcy,`hn~(zmU{by|Pgb]{kw678:8>7X> gsd-vc)`kq$h`fv re]sjqtXojUsc>?0506?P6(o{l%~k!hcy,`hn~(zmU{by|Pgb]{kw678<8>7X> gsd-vc)`kq$h`fv re]sjqtXojUsc>?0706?P6(o{l%~k!hcy,`hn~(zmU{by|Pgb]{kw678>8>7X> gsd-vc)`kq$h`fv re]sjqtXojUsc>?0902?P6(o{l%~k!hcy,`hn~({U{by|Pbhl?4;463\:$kh!rg-dg}(ddbr${Qnup\flh;978:7X> gsd-vc)`kq$h`fv ws]sjqtXj`d7>3<>;T2,cw`)zo%lou lljz,swYwf}xTnd`33?02?P6(o{l%~k!hcy,`hn~({U{by|Pbhl?0;463\:$kh!rg-dg}(ddbr${Qnup\flh;=78:7X> gsd-vc)`kq$h`fv ws]sjqtXj`d7:3<>;T2,cw`)zo%lou lljz,swYwf}xTnd`37?02?P6(o{l%~k!hcy,`hn~({U{by|Pbhl?<;473\:$kh!rg-dg}(ddbr${Qnup\flhX8;:0Y=!hrg,qb*adp'iggu!xr^rmpwYeagU:>=5Z0.eqb+ta'nis"nbdx.uq[uhszVhbbR<=0:W3+bta&{l$knv!cmi{+rtXxg~ySoga_203?P6(o{l%~k!hcy,`hn~({U{by|Pbhl\076<]9%l~k }f.e`|+ekcq%|~R~ats]amkY2:91^<"i}f/pe+be&jf`t"y}_qlwvZdnfV<9<6[?/fpe*w`(ojr%oaew/vp\tkruWkceS: gsd-vc)`kq$h`fv ws]sjqtXj`dTtb|?012263=R8&myj#|i/fa{*fjlp&}yS}`{r^`jjZ~hz9:;=?94U1-dvc(un&mht#mcky-tvZvi|{UiecQwos234475>2_;#j|i.sd,cf~)keas#z|Ppovq[goiWqey<=>=269V4*aun'xm#jmw.bnh|*quWyd~Rlfn^zlv567:88=7X> gsd-vc)`kq$h`fv ws]sjqtXj`dTtb|?01113>S7'nxm"h gbz-gim'~xT|cz}_ckm[}iu89:8>?84U1-dvc(un&mht#mcky-tvZvi|{UiecQwos2341403\:$kh!rg-dg}(ddbr${Qnup\flhXpfx;<=:>279V4*aun'xm#jmw.bnh|*quWyd~Rlfn^zlv567=;=0Y=!hrg,qb*adp'iggu!xr^rmpwYeagUsc>?04312>S7'nxm"h gbz-gim'~xT|cz}_ckm[}iu89:=>n5Z0.eqb+ta'nis"nbdx.uq[uhszVhbbRv`r123247X[^:9o6[?/fpe*w`(ojr%oaew/vp\tkruWkceSua}012554YT_88<7X> gsd-vc)`kq$h`fv ws]sjqtXj`dTtb|?014163=R8&myj#|i/fa{*fjlp&}yS}`{r^`jjZ~hz9:;;?94U1-dvc(un&mht#mcky-tvZvi|{UiecQwos23427582_;#j|i.sd,cf~)keas#z|Ppovq[be;878;7X> gsd-vc)`kq$h`fv ws]sjqtXoj6:2?>4U1-dvc(un&mht#mcky-tvZvi|{Ulo1<1219V4*aun'xm#jmw.bnh|*quWyd~Ril<2<14>S7'nxm"h gbz-gim'~xT|cz}_fa?0;473\:$kh!rg-dg}(ddbr${Qnup\cf:26;:0Y=!hrg,qb*adp'iggu!xr^rmpwY`k5<5>=5Z0.eqb+ta'nis"nbdx.uq[uhszVmh0:0=0:W3+bta&{l$knv!cmi{+rtXxg~ySjm38?3e?P6(o{l%~k!hcy,`hn~({U{by|Pgb]35c=R8&myj#|i/fa{*fjlp&}yS}`{r^e`[47a3\:$kh!rg-dg}(ddbr${Qnup\cfY59o1^<"i}f/pe+be&jf`t"y}_qlwvZadW:;m7X> gsd-vc)`kq$h`fv ws]sjqtXojU?=k5Z0.eqb+ta'nis"nbdx.uq[uhszVmhS8?i;T2,cw`)zo%lou lljz,swYwf}xTknQ91g9V4*aun'xm#jmw.bnh|*quWyd~Ril_63e?P6(o{l%~k!hcy,`hn~({U{by|Pgb];63=R8&myj#|i/fa{*fjlp&}yS}`{r^e`[duumn6;2?84U1-dvc(un&mht#mcky-tvZvi|{UloRo|rde?5;413\:$kh!rg-dg}(ddbr${Qnup\cfYf{{ol0?0=6:W3+bta&{l$knv!cmi{+rtXxg~ySjmParpfc959:?1^<"i}f/pe+be&jf`t"y}_qlwvZadWhyyij2;>348Q5)`zo$yj"ilx/aoo})pzVzexQhc^cpv`a;=78=7X> gsd-vc)`kq$h`fv ws]sjqtXojUjkh<7<12>S7'nxm"h gbz-gim'~xT|cz}_fa\evtbo5=5>;5Z0.eqb+ta'nis"nbdx.uq[uhszVmhSl}}ef>;:73<]9%l~k }f.e`|+ekcq%|~R~ats]dgZgtzlmT?;4U1-dvc(un&mht#mcky-tvZvi|{UloRo|rde\773<]9%l~k }f.e`|+ekcq%|~R~ats]dgZgtzlmT8?;4U1-dvc(un&mht#mcky-tvZvi|{UloRo|rde\173<]9%l~k }f.e`|+ekcq%|~R~ats]dgZgtzlmT:?;4U1-dvc(un&mht#mcky-tvZvi|{UloRo|rde\373<]9%l~k }f.e`|+ekcq%|~R~ats]dgZgtzlmT4?74U1-dvc(un&mht#mcky-tvZvi|{UloRo|rde\`4:76;30Y=!hrg,qb*adp'iggu!xr^rmpwY`kVkx~hiPd0>2:7?<]9%l~k }f.e`|+ekcq%|~R~ats]dgZgtzlmTh<2=>3;8Q5)`zo$yj"ilx/aoo})pzVzexQhc^cpv`aXl8682?74U1-dvc(un&mht#mcky-tvZvi|{UloRo|rde\`4:36;30Y=!hrg,qb*adp'iggu!xr^rmpwY`kVkx~hiPd0>6:7?<]9%l~k }f.e`|+ekcq%|~R~ats]dgZgtzlmTh<29>3;8Q5)`zo$yj"ilx/aoo})pzVzexQhc^cpv`aXl86<2?74U1-dvc(un&mht#mcky-tvZvi|{UloRo|rde\`4:?6;20Y=!hrg,qb*adp'iggu!xr^rmpwY`kVkx~hiPd0]36==R8&myj#|i/fa{*fjlp&}yS}`{r^e`[duumnUo=R?=8:W3+bta&{l$knv!cmi{+rtXxg~ySjmParpfcZb6W;837X> gsd-vc)`kq$h`fv ws]sjqtXojUjkh_e3\77><]9%l~k }f.e`|+ekcq%|~R~ats]dgZgtzlmTh85Z0.eqb+ta'nis"nbdx.uq[uhszVmhSua}012360=R8&myj#|i/fa{*fjlp&}yS}`{r^e`[}iu89::>85Z0.eqb+ta'nis"nbdx.uq[uhszVmhSua}012160=R8&myj#|i/fa{*fjlp&}yS}`{r^e`[}iu89:8>85Z0.eqb+ta'nis"nbdx.uq[uhszVmhSua}012760=R8&myj#|i/fa{*fjlp&}yS}`{r^e`[}iu89:>>85Z0.eqb+ta'nis"nbdx.uq[uhszVmhSua}012560=R8&myj#|i/fa{*fjlp&}yS}`{r^e`[}iu89:!re-dv4(un~l#@czx^PBIZTCWLDTJZH[10]277=R8&myj#|i/fn3*wb(o{;%~kyit.Onq}YUIDUYHRKA_GUEP47X:;l0Y=!hrg,qb*ak8'xo#j|>.sdtbq)Je|rT^LCPRDELQQYBF8;8=6[?/fpe*w`(oe:%~i!hr0,qbr`s'Dg~tR`jxu]escrX{}ki!re-dv4(un~l#@czx^lf|qYao~Tyo{e331`>S7'nxm"h gm2-va)`z8$yjzh{/bwqvZ`pn}Uxxlzj<1<1`>S7'nxm"h gm2-va)`z8$yjzh{/bwqvZ`pn}Uxxlzj<0<1g>S7'nxm"h gm2-va)`z8$yjzh{/bwqvZ`pn}Uxxlzj_10`?P6(o{l%~k!hl1,q`*au9'xm{kz ctpq[cqa|VymykP13:8Q5)`zo$yj"ic0/pg+bt6&{l|jy!jmqvz[cqa|Vli>:5Z0.eqb+ta'nf;"j gs3-vcqa|&of|ywPfvdw[l4b3\:$kh!rg-dh5(ul&my=#|iwgv,ahvsqVl|jyQf_np34565n2_;#j|i.sd,ci6)zm%l~< }fvdw+`kw|pUm{kzPi^mq45679;n0Y=!hrg,qb*ak8'xo#j|>.sdtbq)imq~Tjzh{_rvbp`:76;n0Y=!hrg,qb*ak8'xo#j|>.sdtbq)imq~Tjzh{_rvbp`:66;30Y=!hrg,qb*ak8'xo#j|ns/pppv)d8&ij~waeu>3:7?<]9%l~k }f.eo4+tc'nxj#||tr-`4*efz{seiy2>>3;8Q5)`zo$yj"ic0/pg+btf{'xxx~!l0.abvwim}692?74U1-dvc(un&mg<#|k/fpbw+tt|z%h<"mnrs{maq:46;l0Y=!hrg,qb*ak8'xo#j|ns/pppv)d8&mfyu hmZ2^*bk6&d;9j6[?/fpe*w`(oe:%~i!hr`q-vvrt'j:$k`{w.foX5X(`ez$f?h4U1-dvc(un&mg<#|k/fpbw+tt|z%h<"ibuy,di^4Z&ngx"`}=f:W3+bta&{l$ka>!re-dvdu)zz~x#n> glw{*bk\;T$la~ bs3d8Q5)`zo$yj"ic0/pg+btf{'xxx~!l0.enq}(`eR>V"jc|.lq17>S7'nxm"h gm2-va)`zhy%~~z|/b2,r4:76;90Y=!hrg,qb*ak8'xo#j|ns/pppv)d8&|:0<0=3:W3+bta&{l$ka>!re-dvdu)zz~x#n> v0>1:75<]9%l~k }f.eo4+tc'nxj#||tr-`4*p64:49?6[?/fpe*w`(oe:%~i!hr`q-vvrt'j:$z<2;>3`8Q5)`zo$yj"ic0/pg+btf{'xxx~!l0.t2[5Yffm:;<=?=b:W3+bta&{l$ka>!re-dvdu)zz~x#n> v0]2[dhc89:;=?l4U1-dvc(un&mg<#|k/fpbw+tt|z%h<"x>_3]bja6789;9n6[?/fpe*w`(oe:%~i!hr`q-vvrt'j:$zS7'nxm"h gm2-va)`zhy%~~z|/b3,gdtuqgo0<0=9:W3+bta&{l$ka>!re-dvdu)zz~x#n? c`pq}kcs4;4956[?/fpe*w`(oe:%~i!hr`q-vvrt'j;$ol|}yogw8685n2_;#j|i.sd,ci6)zm%l~l}!rrvp+f7(ods"jcT0\,di4(j9;l0Y=!hrg,qb*ak8'xo#j|ns/pppv)d9&mfyu hmZ3^*bkt&dy9j6[?/fpe*w`(oe:%~i!hr`q-vvrt'j;$k`{w.foX6X(`ez$f?h4U1-dvc(un&mg<#|k/fpbw+tt|z%h="ibuy,di^5Z&ngx"`}=f:W3+bta&{l$ka>!re-dvdu)zz~x#n? glw{*bk\<3<17>S7'nxm"h gm2-va)`zhy%~~z|/b3,r4:46;90Y=!hrg,qb*ak8'xo#j|ns/pppv)d9&|:090=b:W3+bta&{l$ka>!re-dvdu)zz~x#n? v0]3[dhc89:;=?l4U1-dvc(un&mg<#|k/fpbw+tt|z%h="x>_0]bja6789;9n6[?/fpe*w`(oe:%~i!hr`q-vvrt'j;$zQnne234575j2_;#j|i.sd,ci6)zm%l~l}!rrvp+f7(~8U?Sl`k0123576<]9%l~k }f.eo4+tc'nxj#||tr-`khv7:91^<"i}f/pe+bj7&{n$ko|.sqww*ehey;956[?/fpe*w`(oe:%~i!hr`q-vvrt'{kfShctx]efZo482_;#j|i.sd,ci6)zm%l~l}!rrvp+wgjWlg{xtQib^k\kw67899:7X> gsd-vc)`d9$yh"i}ar,qwqu(zhgTi`~{y^da[lYhz9:;<<<<;T2,cw`)zo%l`= }d.psjqt(Eje~byQlotlw61=R8&myj#|i/fn3*wb(zyd~"Clotlw[firf};986[?/fpe*w`(oe:%~i!}povq+Heh}g~Tob{at307?P6(o{l%~k!hl1,q`*twf}x$Anaznu]`kphs;;>0Y=!hrg,qb*ak8'xo#~ats-Ngjsi|Vidycz;259V4*aun'xm#jb?.sf,vuhsz&Ghcx`{_bmvjq35<2_;#j|i.sd,ci6)zm%y|cz}/LalqkrXkfex;<;;T2,cw`)zo%l`= }d.psjqt(Eje~byQlotlw372<]9%l~k }f.eo4+tc'{zex!BcnwmpZeh}g~3>95Z0.eqb+ta'nf;"j rqlwv*Kdg|dSnaznu;1=>S7'nxm"h gm2-va)uxg~y#@m`uov\gjsi|Vir0=0=c:W3+bta&{l$ka>!re-qtkru'DidyczPcnwmpZe~494T~y<6;T2,cw`)zo%l`= }d.psjqt(Eje~byQlotlw[f;978h7X> gsd-vc)`d9$yh"|nup,Ifirf}Uhcx`{_b{?5;Yu|;30Y=!hrg,qb*ak8'xo#~ats-Ngjsi|VidyczPcx>1:7e<]9%l~k }f.eo4+tc'{zex!BcnwmpZeh}g~Tot2=>^pw6<=R8&myj#|i/fn3*wb(zyd~"Clotlw[firf}Uhu1=12b9V4*aun'xm#jb?.sf,vuhsz&Ghcx`{_bmvjqYdq595Sz=9:W3+bta&{l$ka>!re-qtkru'DidyczPcnwmpZe~4=49o6[?/fpe*w`(oe:%~i!}povq+Heh}g~Tob{at^az818Xz}827X> gsd-vc)`d9$yh"|nup,Ifirf}Uhcx`{_b{?1;4d3\:$kh!rg-dh5(ul&x{by| MbmvjqYdg|dSnw35?]qp7?<]9%l~k }f.eo4+tc'{zex!BcnwmpZeh}g~Tot29>3a8Q5)`zo$yj"ic0/pg+wvi|{%Fob{at^alqkrXkp6=2R|{289V4*aun'xm#jb?.sf,vuhsz&Ghcx`{_bmvjqYdq5=5>n5Z0.eqb+ta'nf;"j rqlwv*Kdg|dSnaznu]`}919W{~956[?/fpe*w`(oe:%~i!}povq+Heh}g~Tob{at^az8=85k2_;#j|i.sd,ci6)zm%y|cz}/LalqkrXkfexRmv<9<\vq4f3\:$kh!rg-dh5(ul&x{by| MbmvjqYdg|dSua}<1<1e>S7'nxm"h gm2-va)uxg~y#@m`uov\gjsi|Vrd~1?12`9V4*aun'xm#jb?.sf,vuhsz&Ghcx`{_bmvjqYg{692?o4U1-dvc(un&mg<#|k/srmpw)JkfexRm`uov\|jt;;78j7X> gsd-vc)`d9$yh"|nup,Ifirf}Uhcx`{_ymq8185i2_;#j|i.sd,ci6)zm%y|cz}/LalqkrXkfexRv`r=7=6d=R8&myj#|i/fn3*wb(zyd~"Clotlw[firf}Usc29>3c8Q5)`zo$yj"ic0/pg+wvi|{%Fob{at^alqkrXpfx7;3::Zts9o1^<"i}f/pe+bj7&{n$~}`{r.alqkr;87;m7X> gsd-vc)`d9$yh"|nup,gjsi|5;5=k5Z0.eqb+ta'nf;"j rqlwv*eh}g~7>3?i;T2,cw`)zo%l`= }d.psjqt(kfex1=11g9V4*aun'xm#jb?.sf,vuhsz&idycz34?3e?P6(o{l%~k!hl1,q`*twf}x$ob{at=7=5c=R8&myj#|i/fn3*wb(zyd~"m`uov?2;7a3\:$kh!rg-dh5(ul&x{by| cnwmp9199o1^<"i}f/pe+bj7&{n$~}`{r.alqkr;07;m7X> gsd-vc)`d9$yh"|nup,gjsi|535=h5Z0.eqb+ta'nf;"j rqlwv*eh}g~T<e:W3+bta&{l$ka>!re-qtkru'je~byQ<1d9V4*aun'xm#jb?.sf,vuhsz&idyczP40g8Q5)`zo$yj"ic0/pg+wvi|{%hcx`{_43f?P6(o{l%~k!hl1,q`*twf}x$ob{at^42a>S7'nxm"h gm2-va)uxg~y#naznu]45`=R8&myj#|i/fn3*wb(zyd~"m`uov\<4c<]9%l~k }f.eo4+tc'{zex!lotlw[<453\:$kh!rg-dh5(ul&x{by| cnwmpZb64949>6[?/fpe*w`(oe:%~i!}povq+firf}Uo=1?1239V4*aun'xm#jb?.sf,vuhsz&idyczPd0>1:74<]9%l~k }f.eo4+tc'{zex!lotlw[a7;;7897X> gsd-vc)`d9$yh"|nup,gjsi|Vn:090=2:W3+bta&{l$ka>!re-qtkru'je~byQk1=7=67=R8&myj#|i/fn3*wb(zyd~"m`uov\`4:16;80Y=!hrg,qb*ak8'xo#~ats-`kphsWm;7;3<=;T2,cw`)zo%l`= }d.psjqt(kfexRj><9<16>S7'nxm"h gm2-va)uxg~y#naznu]g59?9:81^<"i}f/pe+bj7&{n$~}`{r.alqkrXl8U;><5Z0.eqb+ta'nf;"j rqlwv*eh}g~Th209V4*aun'xm#jb?.sf,vuhsz&idyczPd0]164=R8&myj#|i/fn3*wb(zyd~"m`uov\`4Y4:81^<"i}f/pe+bj7&{n$~}`{r.alqkrXl8U?><5Z0.eqb+ta'nf;"j rqlwv*eh}g~Th<5Z0.eqb+ta'nf;"j rqlwv*eh}g~Th/bcqv|hb|5:5>45Z0.eqb+ta'nf;"z| gvcp*rus{&i:#no}rxlfp979:01^<"i}f/pe+bj7&~x$kzo|.vqww*e6'jky~t`jt=0=6<=R8&myj#|i/fn3*rt(o~kx"z}{s.a2+fguzpdnx1=12g9V4*aun'xm#jb?.vp,crgt&~y"m>/fov|+ajS9W%k`?!m00e?P6(o{l%~k!hl1,tv*apiz$|y} c0-dip~)odQ:Q#ibs/op6c=R8&myj#|i/fn3*rt(o~kx"z}{s.a2+bkrp'mfW?S!glq-iv4a3\:$kh!rg-dh5(pz&m|m~ xsuq,g4)`e|r%k`U<]/enw+kt:o1^<"i}f/pe+bj7&~x$kzo|.vqww*e6'ng~t#ib[5_-chu)ez887X> gsd-vc)`d9$|~"ixar,twqu(k8%}=1>1229V4*aun'xm#jb?.vp,crgt&~y"m>/w3?5;443\:$kh!rg-dh5(pz&m|m~ xsuq,g4)q9585>>5Z0.eqb+ta'nf;"z| gvcp*rus{&i:#{?33?00?P6(o{l%~k!hl1,tv*apiz$|y} c0-u5929:k1^<"i}f/pe+bj7&~x$kzo|.vqww*e6';T?000a?P6(o{l%~k!hl1,tv*apiz$|y} c0-u5Z5Xign;<=>>2c9V4*aun'xm#jb?.vp,crgt&~y"m>/w3\0Zhh|9:;<<<6;T2,cw`)zo%l`= xr.etev(p{}y$o?!laspzj`r;87827X> gsd-vc)`d9$|~"ixar,twqu(k;%hm|vndv?5;4>3\:$kh!rg-dh5(pz&m|m~ xsuq,g7)di{xrbhz32?0:?P6(o{l%~k!hl1,tv*apiz$|y} c3-`ewt~fl~7?32g9V4*aun'xm#jb?.vp,crgt&~y"m=/fov|+ajS8W%k`}!mr0e?P6(o{l%~k!hl1,tv*apiz$|y} c3-dip~)odQ9Q#ibs/op6c=R8&myj#|i/fn3*rt(o~kx"z}{s.a1+bkrp'mfW>S!glq-iv4a3\:$kh!rg-dh5(pz&m|m~ xsuq,g7)`e|r%k`U;]/enw+kt::1^<"i}f/pe+bj7&~x$kzo|.vqww*e5';7<3<<;T2,cw`)zo%l`= xr.etev(p{}y$o?!y1=3=66=R8&myj#|i/fn3*rt(o~kx"z}{s.a1+s7;:7887X> gsd-vc)`d9$|~"ixar,twqu(k;%}=1=1229V4*aun'xm#jb?.vp,crgt&~y"m=/w3?0;4e3\:$kh!rg-dh5(pz&m|m~ xsuq,g7)q9V:Tmcj?01226g=R8&myj#|i/fn3*rt(o~kx"z}{s.a1+s7X9Vkeh=>?000a?P6(o{l%~k!hl1,tv*apiz$|y} c3-u5Z4Xign;<=>>2c9V4*aun'xm#jb?.vp,crgt&~y"m=/w3\7Zgil9:;<<=5Z0.eqb+ta'nf;"z| gvcp*rus{&ida}?=0:W3+bta&{l$ka>!ws-dsdu)z~x#nabp30;?P6(o{l%~k!hl1,tv*apiz$|y} r`o\bpjkWohTe?;4U1-dvc(un&mg<#y}/fubw+qt|z%ym`Qiumn\m7e<]9%l~k }f.eo4+qu'n}j#y|tr-qehYa}efTeRa}01236a=R8&myj#|i/fn3*rt(o~kx"z}{s.pbiZ`rdeUbSb|?01225a=R8&myj#|i/fn3*rt(zhgT{Qjn^k266=R8&myj#|i/fn3*rt(yd~"Clotlw[firf}8?7X> gsd-vc)`d9$|~"ynup,Ifirf}Uhcx`{1368Q5)`zo$yj"ic0/uq+rvi|{%Fob{at^alqkr5:=1^<"i}f/pe+bj7&~x${}`{r.O`kphsWje~by==4:W3+bta&{l$ka>!ws-ttkru'DidyczPcnwmp1433\:$kh!rg-dh5(pz&}{by| MbmvjqYdg|d9?:4U1-dvc(un&mg<#y}/vrmpw)JkfexRm`uov561=R8&myj#|i/fn3*rt(yd~"Clotlw[firf}=986[?/fpe*w`(oe:%{!xpovq+Heh}g~Tob{at90:?P6(o{l%~k!hl1,tv*qwf}x$Anaznu]`kphsWjs7<32:Zts:01^<"i}f/pe+bj7&~x${}`{r.O`kphsWje~byQly=0=6f=R8&myj#|i/fn3*rt(yd~"Clotlw[firf}Uhu1<1_sv1=>S7'nxm"h gm2-sw)pxg~y#@m`uov\gjsi|Vir0>0=c:W3+bta&{l$ka>!ws-ttkru'DidyczPcnwmpZe~4:4T~y<6;T2,cw`)zo%l`= xr.usjqt(Eje~byQlotlw[f;<78h7X> gsd-vc)`d9$|~"ynup,Ifirf}Uhcx`{_b{?0;Yu|;30Y=!hrg,qb*ak8'}y#z~ats-Ngjsi|VidyczPcx>6:7e<]9%l~k }f.eo4+qu'~zex!BcnwmpZeh}g~Tot2:>^pw6<=R8&myj#|i/fn3*rt(yd~"Clotlw[firf}Uhu1812b9V4*aun'xm#jb?.vp,suhsz&Ghcx`{_bmvjqYdq5<5Sz=9:W3+bta&{l$ka>!ws-ttkru'DidyczPcnwmpZe~4>49o6[?/fpe*w`(oe:%{!xpovq+Heh}g~Tob{at^az828Xz}8j7X> gsd-vc)`d9$|~"ynup,Ifirf}Uhcx`{_ymq8585i2_;#j|i.sd,ci6){%||cz}/LalqkrXkfexRv`r=3=6d=R8&myj#|i/fn3*rt(yd~"Clotlw[firf}Usc2=>3c8Q5)`zo$yj"ic0/uq+rvi|{%Fob{at^alqkrXpfx7?35:7g<]9%l~k }f.eo4+qu'~zex!BcnwmpZeh}g~Ttb|37?0b?P6(o{l%~k!hl1,tv*qwf}x$Anaznu]`kphsWqey050=d:W3+bta&{l$ka>!ws-ttkru'DidyczPcnwmpZ~hz525Sz>f:W3+bta&{l$ka>!ws-ttkru'je~by2?>0d8Q5)`zo$yj"ic0/uq+rvi|{%hcx`{<0<2b>S7'nxm"h gm2-sw)pxg~y#naznu>1:4`<]9%l~k }f.eo4+qu'~zex!lotlw8686n2_;#j|i.sd,ci6){%||cz}/bmvjq:368l0Y=!hrg,qb*ak8'}y#z~ats-`kphs4<4:j6[?/fpe*w`(oe:%{!xpovq+firf}6=2f:W3+bta&{l$ka>!ws-ttkru'je~by27>0g8Q5)`zo$yj"ic0/uq+rvi|{%hcx`{_13f?P6(o{l%~k!hl1,tv*qwf}x$ob{at^32a>S7'nxm"h gm2-sw)pxg~y#naznu]15`=R8&myj#|i/fn3*rt(yd~"m`uov\74c<]9%l~k }f.eo4+qu'~zex!lotlw[17b3\:$kh!rg-dh5(pz&}{by| cnwmpZ36m2_;#j|i.sd,ci6){%||cz}/bmvjqY19l1^<"i}f/pe+bj7&~x${}`{r.alqkrX?8o0Y=!hrg,qb*ak8'}y#z~ats-`kphsW1897X> gsd-vc)`d9$|~"ynup,gjsi|Vn:0=0=2:W3+bta&{l$ka>!ws-ttkru'je~byQk1=3=67=R8&myj#|i/fn3*rt(yd~"m`uov\`4:56;80Y=!hrg,qb*ak8'}y#z~ats-`kphsWm;7?3<=;T2,cw`)zo%l`= xr.usjqt(kfexRj><5<16>S7'nxm"h gm2-sw)pxg~y#naznu]g5939:;1^<"i}f/pe+bj7&~x${}`{r.alqkrXl86=2?<4U1-dvc(un&mg<#y}/vrmpw)dg|dSi?37?01?P6(o{l%~k!hl1,tv*qwf}x$ob{at^f28=8592_;#j|i.sd,ci6){%||cz}/bmvjqYc9V:9=6[?/fpe*w`(oe:%{!xpovq+firf}Uo=R?=1:W3+bta&{l$ka>!ws-ttkru'je~byQk1^015>S7'nxm"h gm2-sw)pxg~y#naznu]g5Z5592_;#j|i.sd,ci6){%||cz}/bmvjqYc9V>9=6[?/fpe*w`(oe:%{!xpovq+firf}Uo=R;=1:W3+bta&{l$ka>!ws-ttkru'je~byQk1^415>S7'nxm"h gm2-sw)pxg~y#naznu]g5Z1592_;#j|i.sd,ci6){%||cz}/bmvjqYc9V29>6[?/fpe*w`(oe:%{!xpovq+firf}Uo>1>1239V4*aun'xm#jb?.vp,suhsz&idyczPd3>2:74<]9%l~k }f.eo4+qu'~zex!lotlw[a4;:7897X> gsd-vc)`d9$|~"ynup,gjsi|Vn90>0=2:W3+bta&{l$ka>!ws-ttkru'je~byQk2=6=67=R8&myj#|i/fn3*rt(yd~"m`uov\`7:26;80Y=!hrg,qb*ak8'}y#z~ats-`kphsWm87:3<=;T2,cw`)zo%l`= xr.usjqt(kfexRj=<6<16>S7'nxm"h gm2-sw)pxg~y#naznu]g69>9:81^<"i}f/pe+bj7&~x${}`{r.alqkrXl;U;><5Z0.eqb+ta'nf;"z| wqlwv*eh}g~Th?Q>209V4*aun'xm#jb?.vp,suhsz&idyczPd3]164=R8&myj#|i/fn3*rt(yd~"m`uov\`7Y4:81^<"i}f/pe+bj7&~x${}`{r.alqkrXl;U?><5Z0.eqb+ta'nf;"z| wqlwv*eh}g~Th?Q:209V4*aun'xm#jb?.vp,suhsz&idyczPd3]564=R8&myj#|i/fn3*rt(yd~"m`uov\`7Y0:81^<"i}f/pe+bj7&~x${}`{r.alqkrXl;U3=;5Z0.eqb+ta'dof#iazt^k\440<]9%l~k }f.ofi*bh}}UbS1^<"i}f/pe+hcj'me~xRgP1034?P6(o{l%~k!bel-gkprXaV;9=:5Z0.eqb+ta'dof#iazt^k\56703\:$kh!rg-nah)cg|~TeR?;169V4*aun'xm#`kb/emvpZoX9<;<7X> gsd-vc)jmd%ocxzPi^3552=R8&myj#|i/lgn+air|VcT=:?9;T2,cw`)zo%fi`!kotv\mZ46>2_;#j|i.sd,i`k(lfSdQ<179V4*aun'xm#`kb/emvpZoX<8<0Y=!hrg,qb*kbe&ndyyQf_435?P6(o{l%~k!bel-gkprXaV<::6[?/fpe*w`(elg$hb{{_h]453=R8&myj#|i/lgn+air|VcT4<84U1-dvc(un&gna"j`uu]j[<7>3\:$kh!rg-nah)cg|~Tahc30?3b?P6(o{l%~k!bel-gkprXelg7==0>a:W3+bta&{l$ahc dnww[hcj48;5=l5Z0.eqb+ta'dof#iazt^ofi97568k0Y=!hrg,qb*kbe&ndyyQbel>27;7f3\:$kh!rg-nah)cg|~Tahc315<2e>S7'nxm"h mdo,`jssWdof0<;11`9V4*aun'xm#`kb/emvpZkbe5;=2 gsd-vc)jmd%ocxzPmdo?5;7>3\:$kh!rg-nah)cg|~Tahc32?3:?P6(o{l%~k!bel-gkprXelg7?3?6;T2,cw`)zo%fi`!kotv\i`k;<7;27X> gsd-vc)jmd%ocxzPmdo?1;7>3\:$kh!rg-nah)cg|~Tahc36?3:?P6(o{l%~k!bel-gkprXelg7;3?6;T2,cw`)zo%fi`!kotv\i`k;07;27X> gsd-vc)jmd%ocxzPmdo?=;0b3\:$kh!rg-nah)`jd$ln`i!gcode+h`mji%n`i bmi\i`kXoldn~lz`r.tbhlb)kz~y#oblnms_5[)zhg%~"x=_omjjlr)zhg$h}=9x0:-vdk6j2_;#j|i.sd,i`k(|dzT~lcPre]fj4e<]9%l~k }f.ofi*rjxVxjaR|k_dl256=R8&myj#|i/scn[wbXmg;<7X> gsd-vc)uidUyijazt^gm56=R8&myj#|i/scn[rtXmg;o7X> gsd-vc)u{}hgg"|k_sqw[duumn8;7X> gsd-vc)u{}hgg"|k_sqw[duumnUo=?>4U1-dvc(un&xxxobd/sf\vvrXizxnkRj=1b9V4*aun'xm#}{bmi,vaYu{}Uhc`l>d:W3+bta&{l$~~zmlj-q`Ztt|Vidao?>e:W3+bta&{l$~~zmlj-q`Ztt|Vxnk1>11d9V4*aun'xm#}{bmi,vaYu{}Uyij2>>0g8Q5)`zo$yj"||tcnh+wbXzz~T~hi32?3g?P6(o{l%~k!}su`oo*tcW{ySkh_13g?P6(o{l%~k!}su`oo*tcW{ySkh_03g?P6(o{l%~k!}su`oo*tcW{ySkh_33g?P6(o{l%~k!}su`oo*quW{ySl}}ef03?P6(o{l%~k!}su`oo*quW{ySl}}ef]g576<]9%l~k }f.pppgjl'~xT~~zParpfcZb59j1^<"i}f/pe+wusjea${Q}su]`khd6l2_;#j|i.sd,vvredb%|~R||t^alig76m2_;#j|i.sd,vvredb%|~R||t^pfc9699l1^<"i}f/pe+wusjea${Q}su]qab:668n0Y=!hrg,qb*tt|kf`#z|Prrv\v`aX88n0Y=!hrg,qb*tt|kf`#z|Prrv\v`aX9h1^_H\PAMKBWf=R[LXTZD]FBMG0?SED12\BIZQ[YQG0?RCF;2]NNo5XRHVF[COU[]i0[_G[E^OL@@YFk2]YEYKPMNFF[G7c3QCGECV"XE@#4+7'[]_I,= > @Q@ML3^cjVCoj6Vkh^RqmhPbzzcdb<>4Xeo\Idlhz_oydaa119[`hYJageyZh||inl`?djjgz~Ti`~{yc9bhhit|Vl~`a84b`ahqubbf|hUhcx`{(7+g?agsiVidycz'7(f8`drfWje~by&7)g9geqgXkfex1650?58`gosm{x=7iga(1+5?aoi 8#<7iga(02*3>bnf!;:%:5kio*26,1'8;ekm,42.?2nbb%?:)69gmk.6> =0hd`'16+4?aoi 82";6jfn)3:-3=cag"9%:5kio*14,1<'8;ekm,74.?2nbb%<<)69gmk.5< =0hd`'24+4?aoi ;<";6jfn)04-2=cag"94$94dhl+6'8;ekm,66.?2nbb%=>)69gmk.4: =0hd`'32+4?aoi :>";6jfn)16-3=cag"?%;5kio*6-3=cag"=%;5kio*4-3=cag"3%;5kio*:-3=cag6;2:5kio>24;169gmk:6<7=0hd`314<4?aoi48<5;6jfn=34:2=cag6:4394dhl?5<813mce0<08;ekm8769?2nbb1<>>69gmk:5:7=0hd`322<4?aoi4;>5;6jfn=06:2=cag69:394dhl?62803mce0?617:fjj94>6?1oec2=>69gmk:487=0hd`330<4?aoi4:85;6jfn=10:2=cag688374dhl?70<76>1oec2<5?48`lh;;7<0hd`34?48`lh;=7<0hd`36?48`lh;?7<0hd`38?48`lh;17=0hb{{(1+4?air|!;"46j`uu*24,>bh}}":8$64dnww,43.02ndyy&>6(:8`jss 8=";6j`uu*1-2=cg|~#?$94dnww,1/03me~x%;&7:flqq.1!>1ocxz'7(58`jss 1#<7iazt);*3>bh}}6;255kotv?558?3me~x1?>>99gkpr;9;437iazt=30:==cg|~7=907;emvp972611ocxz3171ocxz31?58`jss4;4<7iazt=1=3>bh}}6?2:5kotv?1;169gkpr;1720iigi2oeg1>cjx}s8:6hffn]dakcui}eyS{:P4-"[mioip)ID^H.Heogqeqiu(8:%=#><_hr05f=aaoeTta`w_431|60X:jf`S>8{o0:0e>`nnfUs`cvP500{73Y5keaT?;z`19.emciXoldn~lz`r^t7[1*IGGO'BB@J3e68bl`hWqfetR;>2y15[7ekcV9=xb?7,gkekZabflxjxb|Pv5]7(~eX`hyTeczPcmi>4)eX`hyT}{=1.`[wbXn{oz1<"l_icp[wbXlh~jSnaznu?3(fYcagU|eizg=24/gZnf{V}ySio{a^alqkr:8%iTjxbc_gnbcvYu{}U}ma3?,b]jiujbeldmyg`n^vzt`;5$jU~hQjmcgg``bXzlm68-a\ivahfV|j`0?#c^pg[acw|a7:4)eX`hyT~~z21-a\`drfWje~byQxievk9<*dWakxSz|Pabi>4)eX}zoTinm20-a\gjkjggUh`bmd=1.`[rtXijaT`by20-a\vaYwf}xT{dj{h<33(fYr{lUm{kzPd`vb[firf}7; nQgar]bhhit|Vof|yw20-a\vaYci}kTob{at^uj`qn:99&hSbxjrgnlsZjh4:'oRy}_qlwvZqnl}b65!mPpsmd[`kw|pUu}k20-a\swYci}kTob{at^uj`qn:1%iT|kco`f\v`at58&hSiazt^pppZpfd4:'oRfns^fbpdYdg|d1="l_qplcZ`rdeUdk|h^lfcdrbWkg18>7,b]tvZbbx}b69<<#c^rqkbYbey~rSyf}erj\j`af|lU}ma3:,b]svjaXmdzuRzgrdqk[dutm{~Tzlb24-a\lduX~hfbh0>#c^rqkbYa}efTxe|jsi]bwvcu|V|j`0;?9-aliuiimg~Tblcj=gkekZ~kfqU>=?v<6^0`hnY4>}e:4!mPv`nj`Zjh4:'oR~}il]emciX|pzn18?=x24/gZvugnUmyabPtxrf95*dWdofcwPtxrf94*z;?1mekaPxml{[075p:nbd_24wk4>Xn`ldSjkaescwkwYqTt~zP159eqij03`dSnbd8:ldggsndm20c{k}fmmte>vugnUna}zv159svjaXmdzuRzgrdqk,5/6<2zycjQjmqvz[qnumzb#=$?;;qplcZcjx}sTxe|jsi*1-42vugnUna}zv_ujqavn/= ;?7}|`g^gntqX|axne&9)068twi`Wlg{xtQ{hsgpl-1.9=1{~biPelrw}Zrozlyc$5'>4:rqkbYbey~rSyf}erj+=,713yxdkRkbpu{\pmtb{a626=0>b:rqkbYbey~rSyf}erj\evubz}";%vugnUna}zv_ujqavnXizyn~y&9)0`8twi`Wlg{xtQ{hsgplZgt{lx$:'>b:rqkbYbey~rSyf}erj\evubz}"3%294:n6~}of]fiur~W}byi~fPndebp`.7!8h0|ah_dosp|Ys`{oxdR`jg`vf,4/6j2zycjQjmqvz[qnumzbTbhintd*1-4dvugnUna}zv_ujqavnXflmjxh&;)0`8twi`Wlg{xtQ{hsgplZhboh~n$8'>b:rqkbYbey~rSyf}erj\j`af|l"=%#:n6~}of]fiur~W}byi~fPndebp`.?!8h0|ah_dosp|Ys`{oxdR`jg`vf,:>58>3yxdkRhzlm30?uthoVl~`aQ{hsgpl-6.9:1{~biPftno[qnumzb#=$?<;qplcZ`rdeUdk|h)0*56=wzfmTjxbc_ujqavn/; ;87}|`g^dvhiYs`{oxd%:&129svjaXn|fgSyf}erj+1,743yxdkRhzlm]wlwct`!<"=>5rne\bpjkW}byi~f'7(30?uthoVl~`aQ{hsgpl->.9<1{~biPftno[qnumzb747>11`9svjaXn|fgSyf}erj\evubz}";%a:rqkbYa}efTxe|jsi]mabgsm!="=l5rne\bpjkW}byi~fPndebp`.?!8i0|ah_gwohZrozlycSckhaug?2xoSnbd119q`Zbf|hUhcx`{(1+24>tcWmkmRm`uov+5,773{nThlzn_bmvjq.5!8:0~iQkauc\gjsi|!9"==5}d^fbpdYdg|d$9'>0:pg[agsiVidycz'5(33?wbXlh~jSnaznu*5-46008vaYci}kTob{at=;94;34ws]geqgXkfex%:&119tvZbf|hUhcx`{(4+24>quWmkmRm`uov+2,773~xThlzn_bmvjq.0!8:0{Qkauc\gjsi|!2"=?5xr^fbpdYdg|d054?>49tvZci>2}yS}{}ABse2e7e4<8qe?ok51:l0fc<33-9io7=m6:P0`<3;l036<==b75:>7e4<81X=?8545594?74:k<<57:182>4}T=90??h47:011f31>2;i88<5yT05e>5<6280::ou\51877`7}r9:;1=6{>3383?x"6?>0:56l;4083>6b=;39owE=ne:X72?4|990:47s+1969017<,:hi69:?;h6:3?6=3`>jn7>5;n671?6=3f>8j7>5;h6b4?6=3`>257>5;n616?6=,8=269=<;o349=7>5$05:>1543g;<47?4;n614?6=,8=269=<;o34:j7>5$05:>1543g;<47=4;n62a?6=,8=269=<;o34:h7>5$05:>1543g;<47;4;n62g?6=,8=269=<;o34:n7>5$05:>1543g;<4794;n61e?6=,8=269=<;o34<3f>957>5$05:>1543g;<4774;n619;7>5$05:>1543g;<47l4;n612?6=,8=269=<;o34997>5$05:>1543g;<47j4;n610?6=,8=269=<;o349?7>5$05:>1543g;<47h4;n62e?6=,8=269=<;o341:9j7`b=83.:;44;119m52>=821b?hm50;&23<<3991e=:651:9j7`d=83.:;44;119m52>=:21b?ho50;&23<<3991e=:653:9j7`?=83.:;44;119m52>=<21b?h650;&23<<3991e=:655:9j7`0=83.:;44;119m52>=>21b?h;50;&23<<3991e=:657:9j7`2=83.:;44;119m52>=021b?h=50;&23<<3991e=:659:9j7`4=83.:;44;119m52>=i21b?h?50;&23<<3991e=:65b:9j7`6=83.:;44;119m52>=k21b?ih50;&23<<3991e=:65d:9j7ac=83.:;44;119m52>=m21b?ij50;&23<<3991e=:65f:9j7ad=83.:;44;119m52>=9910e>jn:18'52?=<8:0b<97:038?l5c13:1(<96:533?k7003;976g!7013>:<6`>79827>=n;m=1<7*>788755=i9>21=954i2f5>5<#9>318<>4n05;>43<3`9o97>5$05:>1773g;<47?9;:k0`1<72-;<57:>0:l23=<6?21b?i=50;&23<<3991e=:651998m6b5290/=:754028j41?28307d=i3;29 41>2=;;7c?88;3b?>o4n;0;6)?89;624>h6?10:n65f3g394?"6?00?==5a16:95f=f:9j7`1=83.:;44;119m52>=:910e>jl:18'52?=<8:0b<97:338?l5c93:1(<96:533?k70038976g!7013>:<6`>79817>=n<1k1<75m3`d94?7=83:pD>oj;%3;0?5fn2e:;;4?::a`6<7280;6=uG3`g8 4>32m90ci<50;9~f13=83k86<=>:04aM5fm2P?:7?9{`81=?b=j38h6?65118287)?81;341>i4k90;66g;9983>>o3=:0;6)?89;660>h6?10;76g;5383>!7013>>86`>7982?>o3=80;6)?89;660>h6?10976g;5183>!7013>>86`>7980?>o3h6?10?76g;4d83>!7013>>86`>7986?>o3h6?10=76g;4b83>!7013>>86`>7984?>o3h6?10376g;4`83>!7013>>86`>798:?>i3>k0;66g;9c83>>i31l0;66g;7d83>!7013>7983?>o3?m0;6)?89;64b>h6?10:76g;7b83>!7013>7981?>o3?k0;6)?89;64b>h6?10876g;7`83>!7013>7987?>o3?00;6)?89;64b>h6?10>76g;7983>!7013>7985?>o3?>0;6)?89;64b>h6?10<76g;7783>!7013>798;?>o31>0;66a;4983>>i3<00;66g>i31=0;6)?89;6:2>h6?10;76a;9283>!7013>2:6`>7982?>i31;0;6)?89;6:2>h6?10976a;9083>!7013>2:6`>7980?>i3190;6)?89;6:2>h6?10?76a;8g83>!7013>2:6`>7986?>i30l0;6)?89;6:2>h6?10=76a;8e83>!7013>2:6`>7984?>i30j0;6)?89;6:2>h6?10376a;8c83>!7013>2:6`>798:?>o3=l0;6)?89;66b>h6?10;76g;5e83>!7013>>j6`>7982?>o3=j0;6)?89;66b>h6?10976g;5c83>!7013>>j6`>7980?>o3=h0;6)?89;66b>h6?10?76g;5883>!7013>>j6`>7986?>o3=10;6)?89;66b>h6?10=76g;5683>!7013>>j6`>7984?>o3=?0;6)?89;66b>h6?10376g;5483>!7013>>j6`>798:?>o3ik0;66a;a883>!7013>jm6`>7983?>i3i10;6)?89;6be>h6?10:76a;a683>!7013>jm6`>7981?>i3i?0;6)?89;6be>h6?10876a;a483>!7013>jm6`>7987?>i3i=0;6)?89;6be>h6?10>76a;a283>!7013>jm6`>7985?>i3i;0;6)?89;6be>h6?10<76a;a083>!7013>jm6`>798;?>i3<<0;66a;3g83>>o3?=0;6)?89;641>h6?10;76g;7283>!7013><96`>7982?>o3?;0;6)?89;641>h6?10976g;7083>!7013><96`>7980?>o3?90;6)?89;641>h6?10?76g;6g83>!7013><96`>7986?>o3>l0;6)?89;641>h6?10=76g;6e83>!7013><96`>7984?>o3>j0;6)?89;641>h6?10376g;a183>>o3>o3ij0;66a;9`83>>i31o0;66a;9e83>>o3100;66a;2383>!7013>8?6`>7983?>i3:80;6)?89;607>h6?10:76a;2183>!7013>8?6`>7981?>i39o0;6)?89;607>h6?10876a;1d83>!7013>8?6`>7987?>i39m0;6)?89;607>h6?10>76a;1b83>!7013>8?6`>7985?>i39k0;6)?89;607>h6?10<76a;2`83>!7013>8?6`>798;?>i3:00;6)?89;607>h6?10276a;2983>!7013>8?6`>798b?>i3:>0;6)?89;607>h6?10i76a;2783>!7013>8?6`>798`?>i3:<0;6)?89;607>h6?10o76a;2583>!7013>8?6`>798f?>i3::0;6)?89;607>h6?10m76a;1`83>!7013>8?6`>79824>=h<831<7*>788776=i9>21=<54i2gg>5<#9>318<>4n05;>5=5<#9>318<>4n05;>7=54i2g:>5<#9>318<>4n05;>1=5<#9>318<>4n05;>3=6=4+16;90465<#9>318<>4n05;>==5<#9>318<>4n05;>d=5<#9>318<>4n05;>f=5<#9>318<>4n05;>`=5<#9>318<>4n05;>46<3`9om7>5$05:>1773g;<47?>;:k0`<<72-;<57:>0:l23=<6:21b?i650;&23<<3991e=:651298m6b0290/=:754028j41?28>07d=k6;29 41>2=;;7c?88;36?>o4l<0;6)?89;624>h6?10::65f3e694?"6?00?==5a16:952=32c8j>4?:%34=?2682d:;54>a:9j7c4=83.:;44;119m52>=9k10e>h>:18'52?=<8:0b<97:0a8?l5a83:1(<96:533?k7003;o76g!7013>:<6`>7982a>=n;lo1<7*>788755=i9>21=k54i2g4>5<#9>318<>4n05;>76<3`9oo7>5$05:>1773g;<47<>;:k0`4<72-;<57:>0:l23=<5:21b?i>50;&23<<3991e=:652298k6e62900e>m=:188m1>?290/=:7549;8j41?2910e968:18'52?=<130b<97:098m1>1290/=:7549;8j41?2;10e96::18'52?=<130b<97:298m1>3290/=:7549;8j41?2=10e96<:18'52?=<130b<97:498m1>5290/=:7549;8j41?2?10e96>:18'52?=<130b<97:698m1>7290/=:7549;8j41?2110c>mk:18'52?=;jo0b<97:198k6ed290/=:753bg8j41?2810c>mm:18'52?=;jo0b<97:398k6ef290/=:753bg8j41?2:10c>m6:18'52?=;jo0b<97:598k6e?290/=:753bg8j41?2<10c>m8:18'52?=;jo0b<97:798k6e1290/=:753bg8j41?2>10c>m::18'52?=;jo0b<97:998m10>290/=:7547c8j41?2910e987:18'52?=290:6=4?{%3;0?b43A9i46Foi;I1a<>N4il1d=:850;9~f6?e29086=4?{%3;0?ed3A9i46Fo3?3:17d;>:188k41e2900qo=n6;297?6=8r.:494lc:J0f==O;ho0D9<4$00e>1?d3-o;6?5f4683>>o293:17b?8b;29?xd41h0;6>4?:1y'5=2=kj1C?o64H2cf?M253-;9j7:6c:&f4?4>i6?k0;66sm3`694?3=83:p(<6;:e28L6d?3A9ji6F;2:&26c<31j1/i=4=;h64>5<>o6?h0;66a>7c83>>{e;h?1<7=50;2x 4>32ji0D>l7;I1ba>N3:2.:>k4;9b9'a5<53`><6=44i4394?=h9>h1<75rb2;:>5<2290;w)?74;f3?M5e02B8mh5G439'57`=<0i0(h>52:k73?6=3`>36=44i4394?=n9>k1<75`16`94?=zj:k86=4;:183!7?<3im7E=m8:J0e`=#m9097d:8:188m07=831b=:o50;9l52d=831vn>o=:187>5<7s-;387mi;I1a<>N4il1/i=4=;h64>5<h1<75rb2c2>5<3290;w)?74;ae?M5e02B8mh5+e181?l202900e8?50;9j52g=831d=:l50;9~f6gd290?6=4?{%3;0?ea3A9i46F<6=44i4394?=n9>k1<75`16`94?=zj:ki6=4;:183!7?<3im7E=m8:J0e`=#m9097d:8:188m07=831b=:o50;9l52d=831vn?78:187>5<7s-;387mi;I1a<>N4il1/i=48;h64>5<h1<75rb231>5<3290;w)?74;ag?M5e02B8mh5+e181?l202900e9j50;9j14<722e:;o4?::a747=83>1<7>t$0:7>fb<@:h37E=ne:&f4?4>o293:17b?8b;29?xd5?>0;694?:1y'5=2=9::0D>l7;I1ba>o3i3:17d;=:188m41c2900c<9;:188yg40>3:187>50z&2<1<6;91C?o64H2cf?l2f2900e8<50;9j52b=831d=::50;9~f712290?6=4?{%3;0?7482B8n55G3`g8m1g=831b9?4?::k23a<722e:;94?::a622=83>1<7>t$0:7>4573A9i46F>7>5;h34`?6=3f;<87>5;|`136<72=0;6=u+1969566<@:h37E=ne:k7e?6=3`?96=44i05g>5<858275=O;k20D>oj;h6b>5<>1<75rb3::>5<3290;w)?74;304>N4j11C?lk4i5c94?=n=;0;66g>7e83>>i6?=0;66sm29:94?2=83:p(<6;:013?M5e02B8mh5f4`83>>o2:3:17d?8d;29?j70<3:17pl=8683>1<729q/=5:51228L6d?3A9ji6g;a;29?l352900e<9k:188k4132900qo<76;290?6=8r.:494>319K7g><@:kn7d:n:188m04=831b=:j50;9l522=831vn?h>:187>5<7s-;387?<0:J0f==O;ho0e9o50;9j17<722c:;i4?::m231<722wi>k>50;694?6|,82?6<=?;I1a<>N4il1b8l4?::k66?6=3`;5;n340?6=3th9ik4?:583>5}#91>1=>>4H2`;?M5fm2c?m7>5;h71>5<5<54;294~"60=0:?=5G3c:8L6gb3`>j6=44i4094?=n9>n1<75`16694?=zj;oo6=4;:183!7?<3;8<6F>o6?m0;66a>7583>>{e;9>1<7:50;2x 4>3289;7E=m8:J0e`=nl7;I1ba>o3i3:17d;=:188m41c2900c<9;:188yg57:3:187>50z&2<1<6;91C?o64H2cf?l2f2900e8<50;9j52b=831d=::50;9~f666290?6=4?{%3;0?7482B8n55G3`g8m1g=831b9?4?::k23a<722e:;94?::a756=83>1<7>t$0:7>4573A9i46F>7>5;h34`?6=3f;<87>5;|`2e2<72=0;6=u+1969ga=O;k20D>oj;%g3>7=n<>0;66g;d;29?l362900c<9m:188yg7f>3:187>50z&2<15;h6g>5<6=4;:183!7?<3io7E=m8:J0e`=#m9097d:8:188m1b=831b9<4?::m23g<722wi=l:50;694?6|,82?6nj4H2`;?M5fm2.n<7<4i5594?=na283>1<729q/=5:5ce9K7g><@:kn7)k?:39j02<722c?h7>5;h72>5<858``>N4j11C?lk4$d296>o3?3:17d:k:188m07=831d=:l50;9~f4g6290?6=4?{%3;0?ec3A9i46F<6=44i5f94?=n=80;66a>7c83>>{e9h:1<7:50;2x 4>32jn0D>l7;I1ba>"b8380e9950;9j0a<722c>=7>5;n34f?6=3th:5k4?:583>5}#91>1oi5G3c:8L6gb3-o;6?5f4683>>o3l3:17d;>:188k41e2900qo52:k73?6=3`>o6=44i4394?=h9>h1<75rb32g>5<3290;w)?74;ag?M5e02B8mh5+e181?l202900e9j50;9j14<722e:;o4?::a65e=83>1<7>t$0:7>fb<@:h37E=ne:&f4?4>o293:17b?8b;29?xd58k0;694?:1y'5=2=km1C?o64H2cf?!c72;1b8:4?::k7`?6=3`?:6=44o05a>5<54;294~"60=0hh6F6g;7;29?l2c2900e8?50;9l52d=831vn?>6:187>5<7s-;387mk;I1a<>N4il1/i=4=;h64>5<>i6?k0;66sm21:94?2=83:p(<6;:bf8L6d?3A9ji6*j0;08m11=831b8i4?::k65?6=3f;5;|`142<72=0;6=u+1969ga=O;k20D>oj;%g3>7=n<>0;66g;d;29?l362900c<9m:188yg47>3:187>50z&2<15;h6g>5<8;50;694?6|,82?6nj4H2`;?M5fm2.n<7<4i5594?=n1<729q/=5:5ce9K7g><@:kn7)k?:39j02<722c?h7>5;h72>5<858``>N4j11C?lk4$d296>o3?3:17d:k:188m07=831d=:l50;9~f735290?6=4?{%3;0?ec3A9i46F<6=44i5f94?=n=80;66a>7c83>>{e:<;1<7:50;2x 4>32jn0D>l7;I1ba>"b8380e9950;9j0a<722c>=7>5;n34f?6=3th99=4?:583>5}#91>1oi5G3c:8L6gb3-o;6?5f4683>>o3l3:17d;>:188k41e2900qo<;f;290?6=8r.:494ld:J0f==O;ho0(h>52:k73?6=3`>o6=44i4394?=h9>h1<75rb36f>5<3290;w)?74;ag?M5e02B8mh5+e181?l202900e9j50;9j14<722e:;o4?::a5c5=83>1<7>t$0:7>fb<@:h37E=ne:&f4?4>o293:17b?8b;29?xd6n;0;694?:1y'5=2=km1C?o64H2cf?!c72;1b8:4?::k7`?6=3`?:6=44o05a>5<54;294~"60=0hh6F6g;7;29?l2c2900e8?50;9l52d=831vn5<7s-;387mk;I1a<>N4il1/i=4=;h64>5<>i6?k0;66sm1dd94?2=83:p(<6;:bf8L6d?3A9ji6*j0;08m11=831b8i4?::k65?6=3f;5;|`2a`<72=0;6=u+1969ga=O;k20D>oj;%g3>7=n<>0;66g;d;29?l362900c<9m:188yg7bl3:187>50z&2<15;h6g>5<1<729q/=5:5ce9K7g><@:kn7E:=;%31b?2>k2.n<7<4i5594?=n1<729q/=5:5ce9K7g><@:kn7E:=;%31b?2>k2.n<7<4i5594?=n1<729q/=5:5ce9K7g><@:kn7E:=;%31b?2>k2.n<7<4i5594?=n1<729q/=5:5ce9K7g><@:kn7E:=;%31b?2>k2.n<7<4i5594?=n1<729q/=5:5ce9K7g><@:kn7E:=;%31b?2>k2.n<7<4i5594?=n1<729q/=5:5ce9K7g><@:kn7E:=;%31b?2>k2.n<7<4i5594?=n1<729q/=5:5ce9K7g><@:kn7E:=;%31b?2>k2.n<7<4i5594?=n1<729q/=5:5ce9K7g><@:kn7E:=;%31b?2>k2.n<7<4i5594?=n1<729q/=5:5ce9K7g><@:kn7E:=;%31b?2>k2.n<7<4i5594?=ne083>1<729q/=5:5ce9K7g><@:kn7E:=;%31b?2>k2.n<7<4i5594?=ne183>1<729q/=5:5ce9K7g><@:kn7E:=;%31b?2>k2.n<7<4i5594?=ndg83>1<729q/=5:5ce9K7g><@:kn7E:=;%31b?2>k2.n<7<4i5594?=ndd83>1<729q/=5:5ce9K7g><@:kn7E:=;%31b?2>k2.n<7<4i5594?=nde83>1<729q/=5:5ce9K7g><@:kn7E:=;%31b?2>k2.n<7<4i5594?=ndb83>1<729q/=5:5ce9K7g><@:kn7E:=;%31b?2>k2.n<7<4i5594?=ndc83>1<729q/=5:5ce9K7g><@:kn7E:=;%31b?2>k2.n<7<4i5594?=nd`83>1<729q/=5:5ce9K7g><@:kn7E:=;%31b?2>k2.n<7<4i5594?=nd883>1<729q/=5:5ce9K7g><@:kn7E:=;%31b?2>k2.n<7<4i5594?=nd983>1<729q/=5:5ce9K7g><@:kn7E:=;%31b?2>k2.n<7<4i5594?=nce83>1<729q/=5:5ce9K7g><@:kn7)k?:39j02<722c?h7>5;h72>5<858``>N4j11C?lk4$d296>o3?3:17d:k:188m07=831d=:l50;9~f4ee290?6=4?{%3;0?ec3A9i46F<6=44i5f94?=n=80;66a>7c83>>{e9jk1<7:50;2x 4>32jn0D>l7;I1ba>"b8380e9950;9j0a<722c>=7>5;n34f?6=3th:o44?:583>5}#91>1oi5G3c:8L6gb3-o;6?5f4683>>o3l3:17d;>:188k41e2900qo?l8;290?6=8r.:494ld:J0f==O;ho0(h>52:k73?6=3`>o6=44i4394?=h9>h1<75rb0a4>5<3290;w)?74;ag?M5e02B8mh5+e181?l202900e9j50;9j14<722e:;o4?::a5f0=83>1<7>t$0:7>fb<@:h37E=ne:&f4?4>o293:17b?8b;29?xd6k<0;694?:1y'5=2=km1C?o64H2cf?!c72;1b8:4?::k7`?6=3`?:6=44o05a>5<54;294~"60=0hh6F6g;7;29?l2c2900e8?50;9l52d=831vn?==:187>5<7s-;387mk;I1a<>N4il1/i=4=;h64>5<>i6?k0;66sm22394?2=83:p(<6;:bf8L6d?3A9ji6*j0;08m11=831b8i4?::k65?6=3f;5;|`175<72=0;6=u+1969ga=O;k20D>oj;%g3>7=n<>0;66g;d;29?l362900c<9m:188yg45n3:187>50z&2<15;h6g>5<?j50;694?6|,82?6nj4H2`;?M5fm2.n<7<4i5594?=n1<729q/=5:5ce9K7g><@:kn7)k?:39j02<722c?h7>5;h72>5<858``>N4j11C?lk4$d296>o3?3:17d:k:188m07=831d=:l50;9~f74f290?6=4?{%3;0?ec3A9i46F<6=44i5f94?=n=80;66a>7c83>>{e:m>1<7;50;2x 4>32jo0D>l7;I1ba>"b8380e9950;9j0=<722c?h7>5;h72>5<858`a>N4j11C?lk4$d296>o3?3:17d:7:188m1b=831b9<4?::m23g<722wi>i?50;794?6|,82?6nk4H2`;?M5fm2.n<7<4i5594?=n<10;66g;d;29?l362900c<9m:188yg4c83:197>50z&2<15;h6;>5<>i6?k0;66sm2e094?3=83:p(<6;:bg8L6d?3A9ji6*j0;08m11=831b854?::k7`?6=3`?:6=44o05a>5<55;294~"60=0hi6F6g;7;29?l2?2900e9j50;9j14<722e:;o4?::a6fc=83?1<7>t$0:7>fc<@:h37E=ne:&f4?4>o3l3:17d;>:188k41e2900qo52:k73?6=3`>36=44i5f94?=n=80;66a>7c83>>{e:jh1<7;50;2x 4>32m:0D>l7;I1ba>"b83=0e9950;9j0=<722c>=7>5;h34e?6=3f;5;|`1ga<72<0;6=u+1969g`=O;k20D>oj;%g3>7=n<>0;66g;8;29?l2c2900e8?50;9l52d=831vn?li:180>5<7s-;387=m7:J0f==O;ho0e9o50;9j572=831d=::50;9~f7db29086=4?{%3;0?5e?2B8n55G3`g8m1g=831b=?:50;9l522=831vn?l;:187>5<7s-;387?<0:J0f==O;ho0e9o50;9j17<722c:;i4?::m231<722wi>oj50;194?6|,82?6>l8;I1a<>N4il1b8l4?::k261<722e:;94?::a6g4=83>1<7>t$0:7>4573A9i46F>7>5;h34`?6=3f;<87>5;|`1ff<72:0;6=u+19697g1<@:h37E=ne:k7e?6=3`;987>5;n340?6=3th9n=4?:583>5}#91>1=>>4H2`;?M5fm2c?m7>5;h71>5<5<53;294~"60=08n:5G3c:8L6gb3`>j6=44i007>5<858275=O;k20D>oj;h6b>5<>1<75rb3`b>5<4290;w)?74;1a3>N4j11C?lk4i5c94?=n9;>1<75`16694?=zj;kh6=4;:183!7?<3;8<6F>o6?m0;66a>7583>>{e:k31<7=50;2x 4>32:h<7E=m8:J0e`=n2583>>i6?=0;66sm2`c94?2=83:p(<6;:013?M5e02B8mh5f4`83>>o2:3:17d?8d;29?j70<3:17pl=b983>6<729q/=5:53c58L6d?3A9ji6g;a;29?l75<3:17b?84;29?xd5i10;694?:1y'5=2=9::0D>l7;I1ba>o3i3:17d;=:188m41c2900c<9;:188yg4e?3:1?7>50z&2<1<4j>1C?o64H2cf?l2f2900e<<;:188k4132900qo319K7g><@:kn7d:n:188m04=831b=:j50;9l522=831vn?l9:180>5<7s-;387=m7:J0f==O;ho0e9o50;9j572=831d=::50;9~f7g3290?6=4?{%3;0?7482B8n55G3`g8m1g=831b9?4?::k23a<722e:;94?::a6`>=83?1<7>t$0:7>fc<@:h37E=ne:&f4?4>o3l3:17d;>:188k41e2900qo52:k73?6=3`>36=44i5f94?=n=80;66a>7c83>>{e:l<1<7;50;2x 4>32jo0D>l7;I1ba>"b8380e9950;9j0=<722c?h7>5;h72>5<858`a>N4j11C?lk4$d296>o3?3:17d:7:188m1b=831b9<4?::m23g<722wi>h:50;794?6|,82?6nk4H2`;?M5fm2.n<7<4i5594?=n<10;66g;d;29?l362900c<9m:188yg4b;3:197>50z&2<15;h6;>5<>i6?k0;66sm2d094?3=83:p(<6;:bg8L6d?3A9ji6*j0;08m11=831b854?::k7`?6=3`?:6=44o05a>5<55;294~"60=0hi6F6g;7;29?l2?2900e9j50;9j14<722e:;o4?::a6`6=83?1<7>t$0:7>fc<@:h37E=ne:&f4?4>o3l3:17d;>:188k41e2900qo52:k73?6=3`>36=44i5f94?=n=80;66a>7c83>>{e:?31<7:50;2x 4>32jl0D>l7;I1ba>"b83=0e9950;9j14<722c:;l4?::m23g<722wi>;o50;694?6|,82?6nh4H2`;?M5fm2.n<794i5594?=n=80;66g>7`83>>i6?k0;66sm27:94?2=83:p(<6;:bf8L6d?3A9ji6*j0;08m11=831b8i4?::k65?6=3f;5;|`122<72=0;6=u+1969ga=O;k20D>oj;%g3>7=n<>0;66g;d;29?l362900c<9m:188yg53i3:197>50z&2<15;h6;>5<>i6?k0;66sm35;94?3=83:p(<6;:bg8L6d?3A9ji6*j0;08m11=831b854?::k7`?6=3`?:6=44o05a>5<55;294~"60=0hi6F6g;7;29?l2?2900e9j50;9j14<722e:;o4?::a711=83?1<7>t$0:7>fc<@:h37E=ne:&f4?4>o3l3:17d;>:188k41e2900qo=;6;291?6=8r.:494le:J0f==O;ho0(h>52:k73?6=3`>36=44i5f94?=n=80;66a>7c83>>{e;=?1<7;50;2x 4>32jo0D>l7;I1ba>"b8380e9950;9j0=<722c?h7>5;h72>5<858g4>N4j11C?lk4$d293>o3?3:17d:7:188m07=831b=:o50;9l52d=831vn>:=:186>5<7s-;387mj;I1a<>N4il1/i=4=;h64>5<>o293:17b?8b;29?xd4<=0;684?:1y'5=2=kl1C?o64H2cf?!c72;1b8:4?::k7o6=44i4394?=h9>h1<75rb214>5<4290;w)?74;1a3>N4j11C?lk4i5c94?=n9;>1<75`16694?=zj:9=6=4<:183!7?<39i;6F>1<75rb20g>5<3290;w)?74;304>N4j11C?lk4i5c94?=n=;0;66g>7e83>>i6?=0;66sm32794?5=83:p(<6;:2`4?M5e02B8mh5f4`83>>o6:=0;66a>7583>>{e;;h1<7:50;2x 4>3289;7E=m8:J0e`=n4?:1y'5=2=;k=0D>l7;I1ba>o3i3:17d?=4;29?j70<3:17pl<2883>1<729q/=5:51228L6d?3A9ji6g;a;29?l352900e<9k:188k4132900qo=<3;297?6=8r.:494<@:kn7d:n:188m4432900c<9;:188yg55?3:187>50z&2<1<6;91C?o64H2cf?l2f2900e8<50;9j52b=831d=::50;9~f65529086=4?{%3;0?5e?2B8n55G3`g8m1g=831b=?:50;9l522=831vn><::187>5<7s-;387?<0:J0f==O;ho0e9o50;9j17<722c:;i4?::m231<722wi?>?50;194?6|,82?6>l8;I1a<>N4il1b8l4?::k261<722e:;94?::a775=83>1<7>t$0:7>4573A9i46F>7>5;h34`?6=3f;<87>5;|`075<72:0;6=u+19697g1<@:h37E=ne:k7e?6=3`;987>5;n340?6=3th8><4?:583>5}#91>1=>>4H2`;?M5fm2c?m7>5;h71>5<5<53;294~"60=08n:5G3c:8L6gb3`>j6=44i007>5<858275=O;k20D>oj;h6b>5<>1<75rb275>5<2290;w)?74;af?M5e02B8mh5+e181?l202900e9650;9j0a<722c>=7>5;n34f?6=3th8994?:483>5}#91>1h=5G3c:8L6gb3-o;6:5f4683>>o303:17d;>:188m41f2900c<9m:188yg52=3:197>50z&2<15;h6;>5<>i6?k0;66sm34594?3=83:p(<6;:bg8L6d?3A9ji6*j0;08m11=831b854?::k7`?6=3`?:6=44o05a>5<47>55;294~"60=0hi6F6g;7;29?l2?2900e9j50;9j14<722e:;o4?::a70?=83?1<7>t$0:7>fc<@:h37E=ne:&f4?4>o3l3:17d;>:188k41e2900qo=:a;291?6=8r.:494le:J0f==O;ho0(h>52:k73?6=3`>36=44i5f94?=n=80;66a>7c83>>{e;32jo0D>l7;I1ba>"b8380e9950;9j0=<722c?h7>5;h72>5<858`a>N4j11C?lk4$d296>o3?3:17d:7:188m1b=831b9<4?::m23g<722wi?;k50;794?6|,82?6nk4H2`;?M5fm2.n<7<4i5594?=n<10;66g;d;29?l362900c<9m:188yg51l3:197>50z&2<15;h6;>5<>i6?k0;66sm37a94?3=83:p(<6;:bg8L6d?3A9ji6*j0;08m11=831b854?::k7`?6=3`?:6=44o05a>5<55;294~"60=0hi6F6g;7;29?l2?2900e9j50;9j14<722e:;o4?::a73g=83?1<7>t$0:7>fc<@:h37E=ne:&f4?4>o3l3:17d;>:188k41e2900qo=99;291?6=8r.:494le:J0f==O;ho0(h>52:k73?6=3`>36=44i5f94?=n=80;66a>7c83>>{e;?21<7;50;2x 4>32jo0D>l7;I1ba>"b8380e9950;9j0=<722c?h7>5;h72>5<858`a>N4j11C?lk4$d296>o3?3:17d:7:188m1b=831b9<4?::m23g<722wi?;850;794?6|,82?6nk4H2`;?M5fm2.n<7<4i5594?=n<10;66g;d;29?l362900c<9m:188yg5003:197>50z&2<15;h6;>5<>i6?k0;66sm36594?3=83:p(<6;:bg8L6d?3A9ji6*j0;08m11=831b854?::k7`?6=3`?:6=44o05a>5<55;294~"60=0hi6F6g;7;29?l2?2900e9j50;9j14<722e:;o4?::a723=83?1<7>t$0:7>fc<@:h37E=ne:&f4?4>o3l3:17d;>:188k41e2900qo=84;291?6=8r.:494le:J0f==O;ho0(h>52:k73?6=3`>36=44i5f94?=n=80;66a>7c83>>{e;>91<7;50;2x 4>32jo0D>l7;I1ba>"b8380e9950;9j0=<722c?h7>5;h72>5<858`a>N4j11C?lk4$d296>o3?3:17d:7:188m1b=831b9<4?::m23g<722wi?:?50;794?6|,82?6nk4H2`;?M5fm2.n<7<4i5594?=n<10;66g;d;29?l362900c<9m:188yg5?83:197>50z&2<15;h6;>5<>i6?k0;66sm36d94?3=83:p(<6;:bg8L6d?3A9ji6*j0;08m11=831b854?::k7`?6=3`?:6=44o05a>5<55;294~"60=0hi6F6g;7;29?l2?2900e9j50;9j14<722e:;o4?::a72b=83?1<7>t$0:7>fc<@:h37E=ne:&f4?4>o3l3:17d;>:188k41e2900qo=8c;291?6=8r.:494le:J0f==O;ho0(h>52:k73?6=3`>36=44i5f94?=n=80;66a>7c83>>{e;>h1<7;50;2x 4>32jo0D>l7;I1ba>"b8380e9950;9j0=<722c?h7>5;h72>5<858`a>N4j11C?lk4$d296>o3?3:17d:7:188m1b=831b9<4?::m23g<722wi?:750;794?6|,82?6nk4H2`;?M5fm2.n<7<4i5594?=n<10;66g;d;29?l362900c<9m:188yg5083:197>50z&2<15;h6;>5<>i6?k0;66sm37d94?3=83:p(<6;:bg8L6d?3A9ji6*j0;08m11=831b854?::k7`?6=3`?:6=44o05a>5<53;294~"60=0:>45G3c:8L6gb3-o;67583>>{e;0n1<7=50;2x 4>328827E=m8:J0e`=#m90:m6gk4;29?lb22900c<9;:188yg4683:1?7>50z&2<1<6:01C?o64H2cf?!c728o0ei:50;9j`0<722e:;94?::a5d?=8391<7>t$0:7>44>3A9i46F5;hf6>5<85826<=O;k20D>oj;%g3>4c1<75fd483>>i6?=0;66sm18694?5=83:p(<6;:00:?M5e02B8mh5+e182a>oc<3:17dj::188k4132900qo?63;297?6=8r.:494>289K7g><@:kn7)k?:0g8ma2=831bh84?::m231<722wi=4<50;194?6|,82?6<<6;I1a<>N4il1/i=4>e:kg0?6=3`n>6=44o057>5<53;294~"60=0:>45G3c:8L6gb3-o;67583>>{e90:1<7=50;2x 4>328827E=m8:J0e`=#m90:i6gk4;29?lb22900c<9;:188yg7?n3:1?7>50z&2<1<6:01C?o64H2cf?!c728o0ei:50;9j`0<722e:;94?::a5=c=8391<7>t$0:7>44>3A9i46F5;hf6>5<85826<=O;k20D>oj;%g3>4c1<75fd483>>i6?=0;66sm19a94?5=83:p(<6;:00:?M5e02B8mh5+e182a>oc<3:17dj::188k4132900qo?7b;297?6=8r.:494>289K7g><@:kn7)k?:0g8ma2=831bh84?::m231<722wi=5o50;194?6|,82?6<<6;I1a<>N4il1/i=4>e:kg0?6=3`n>6=44o057>5<53;294~"60=0:>45G3c:8L6gb3-o;67583>>{e9121<7=50;2x 4>328827E=m8:J0e`=#m90:i6gk4;29?lb22900c<9;:188yg7??3:1?7>50z&2<1<6:01C?o64H2cf?!c728o0ei:50;9j`0<722e:;94?::a5=0=8391<7>t$0:7>44>3A9i46F5;hf6>5<85826<=O;k20D>oj;%g3>4c1<75fd483>>i6?=0;66sm27194?2=83:p(<6;:00a?M5e02B8mh5+e1870>oc<3:17dj::188ma0=831d=::50;9~f775290?6=4?{%3;0?75j2B8n55G3`g8 `6=:<1bh94?::kg1?6=3`n=6=44o057>5<54;294~"60=0:>o5G3c:8L6gb3-o;6?;4ie694?=nl<0;66gk6;29?j70<3:17pl=6583>0<729q/=5:513f8L6d?3A9ji6*j0;3g?lb32900ei;50;9j`3<722co;7>5;n340?6=3th9=94?:483>5}#91>1=?j4H2`;?M5fm2.n<75<>oc?3:17b?84;29?xd6im0;684?:1y'5=2=9;n0D>l7;I1ba>"b838;7dj;:188ma3=831bh;4?::kg3?6=3f;<87>5;|`12f<72<0;6=u+196957b<@:h37E=ne:&f4?453`n?6=44ie794?=nl?0;66gk7;29?j70<3:17pl<1483>6<729q/=5:513;8L6d?3A9ji6*j0;32?lb32900ei;50;9l522=831vn?8=:187>5<7s-;387?=b:J0f==O;ho0(h>5429j`1<722co97>5;hf5>5<85826<=O;k20D>oj;%g3>4c1<75fd483>>i6?=0;66sm1`d94?5=83:p(<6;:00:?M5e02B8mh5+e182a>oc<3:17dj::188k4132900qo<>8;290?6=8r.:494>2c9K7g><@:kn7)k?:378ma2=831bh84?::kg2?6=3f;<87>5;|`2f4<72=0;6=u+196957d<@:h37E=ne:&f4?423`n?6=44ie794?=nl?0;66a>7583>>{e:8k1<7;50;2x 4>3288o7E=m8:J0e`=#m909<6gk4;29?lb22900ei850;9j`2<722e:;94?::a5g5=83?1<7>t$0:7>44c3A9i46F5;hf6>5<>i6?=0;66sm38794?5=83:p(<6;:00:?M5e02B8mh5+e18`3>oc<3:17dj::188k4132900qo=?e;297?6=8r.:494>289K7g><@:kn7)k?:318ma2=831bh84?::m231<722wi>kl50;194?6|,82?6<<6;I1a<>N4il1/i=4=3:kg0?6=3`n>6=44o057>5<55;294~"60=0:>i5G3c:8L6gb3-o;6??4ie694?=nl<0;66gk6;29?lb02900c<9;:188yg4?93:197>50z&2<1<6:m1C?o64H2cf?!c72;;0ei:50;9j`0<722co:7>5;hf4>5<85826a=O;k20D>oj;%g3>771<75fd483>>oc>3:17dj8:188k4132900qo2e9K7g><@:kn7)k?:368ma2=831bh84?::kg2?6=3`n<6=44o057>5<55;294~"60=0:>i5G3c:8L6gb3-o;6??4ie694?=nl<0;66gk6;29?lb02900c<9;:188yg4?83:197>50z&2<1<6:m1C?o64H2cf?!c72;;0ei:50;9j`0<722co:7>5;hf4>5<85826a=O;k20D>oj;%g3>771<75fd483>>oc>3:17dj8:188k4132900qo2e9K7g><@:kn7)k?:368ma2=831bh84?::kg2?6=3`n<6=44o057>5<7>55;294~"60=0:>i5G3c:8L6gb3-o;6??4ie694?=nl<0;66gk6;29?lb02900c<9;:188yg40n3:197>50z&2<1<6:m1C?o64H2cf?!c72;;0ei:50;9j`0<722co:7>5;hf4>5<85826a=O;k20D>oj;%g3>771<75fd483>>oc>3:17dj8:188k4132900qo2e9K7g><@:kn7)k?:368ma2=831bh84?::kg2?6=3`n<6=44o057>5<55;294~"60=0:>i5G3c:8L6gb3-o;6??4ie694?=nl<0;66gk6;29?lb02900c<9;:188yg40m3:197>50z&2<1<6:m1C?o64H2cf?!c72;;0ei:50;9j`0<722co:7>5;hf4>5<85826g=O;k20D>oj;%g3>fd1<75fd483>>oc>3:17b?84;29?xd5190;694?:1y'5=2=9;h0D>l7;I1ba>"b83<0ei:50;9j`0<722co:7>5;n340?6=3th9;i4?:583>5}#91>1=?l4H2`;?M5fm2.n<7?=;hf7>5<>i6?=0;66sm30694?3=83:p(<6;:00g?M5e02B8mh5+e18`e>oc<3:17dj::188ma0=831bh:4?::m231<722wi?=o50;794?6|,82?6<N4il1/i=4=1:kg0?6=3`n>6=44ie494?=nl>0;66a>7583>>{e:o=1<7;50;2x 4>3288o7E=m8:J0e`=#m90986gk4;29?lb22900ei850;9j`2<722e:;94?::a6g3=8381<7>t$0:7>44?3A9i46F5;n340?6=3th9n>4?:383>5}#91>1=?64H2`;?M5fm2.n<7?>;hf7>5<85826==O;k20D>oj;%g3>471<75`16694?=zj;km6=4=:183!7?<3;946F>i6?=0;66sm2`f94?4=83:p(<6;:00;?M5e02B8mh5+e1825>oc<3:17b?84;29?xd5ik0;6?4?:1y'5=2=9;20D>l7;I1ba>"b83;:7dj;:188k4132900qo299K7g><@:kn7)k?:038ma2=831d=::50;9~f7g029096=4?{%3;0?7502B8n55G3`g8 `6=981bh94?::m231<722wi>l;50;094?6|,82?6<<7;I1a<>N4il1/i=4>1:kg0?6=3f;<87>5;|`06`<72;0;6=u+196957><@:h37E=ne:&f4?763`n?6=44o057>5<52;294~"60=0:>55G3c:8L6gb3-o;6>1<75rb20b>5<5290;w)?74;31<>N4j11C?lk4$d2954=nl=0;66a>7583>>{e;;21<7<50;2x 4>328837E=m8:J0e`=#m90:=6gk4;29?j70<3:17pl<2783>7<729q/=5:513:8L6d?3A9ji6*j0;32?lb32900c<9;:188yg55<3:1>7>50z&2<1<6:11C?o64H2cf?!c728;0ei:50;9l522=831vn><=:181>5<7s-;387?=8:J0f==O;ho0(h>5109j`1<722e:;94?::a776=8381<7>t$0:7>44?3A9i46F5;n340?6=3th9o=4?:383>5}#91>1=?64H2`;?M5fm2.n<7?>;hf7>5<85826==O;k20D>oj;%g3>471<75`16694?=zj8h<6=4::183!7?<3;9h6F=5fd583>>oc=3:17dj9:188ma1=831d=::50;9~f4d>290>6=4?{%3;0?75l2B8n55G3`g8 `6=:?1bh94?::kg1?6=3`n=6=44ie594?=h9>>1<75rb33f>5<2290;w)?74;31`>N4j11C?lk4$d2965=nl=0;66gk5;29?lb12900ei950;9l522=831vn?5<7s-;387?=d:J0f==O;ho0(h>5279j`1<722co97>5;hf5>5<5fd583>>oc=3:17dj9:188ma1=831d=::50;9~f6?42903;7>50z&2<1<6?j1C?o64H2cf?_212hq26?95e;35>42=9k0m6<;51682g?{#98l196*>2186?!b?2<1/h44:;%fb>0=#lk0>7)jl:49'`a<23-;3<7=4$0:2>1=#m80>7)k=:49'a6<23-o?685+e486?!c12<1/i:4:;%g;>0=#m00>7)kn:49'ag<23-oh685+ee86?!cb2<1/ik4:;%d3>0=#n80>7)h=:49'b6<23-l?685+f486?!`12<1/j:4:;%d;>0=#n00>7)hn:49'bg<23-lh685+fe86?!`b2<1/jk4:;%334?3<,8::685+11091>"68:0>7)??4;78 4622<1/==855:&242<23-;;47;4$02:>0=#99k196*>0c86?!77k3?0(<>k:49'55c==2.:"69:0>7)?>4;78 4722<1/=<855:&252<23-;:47;4$03:>0=#98k196*>1c86?!76k3?0(7:4$2`7>6d43-nm685f4c83>>o3k3:17dm7:188mf?=831b=5<50;9j5=5=831b?o?50;9j7g4=831b?:4?:%34=?513g;<47>4;h16>5<#9>31?;5a16:95>=n;=0;6)?89;15?k7003807d=<:18'52?=;?1e=:653:9j77<72-;<57=9;o3421965f3183>!70139=7c?88;48?l4a290/=:75379m52>=?21b>h4?:%34=?513g;<4764;h0g>5<#9>31?;5a16:9=>=n<80;6)?89;63?k7003:07d=i:18'52?=<91e=:651:9j7`<72-;<57:?;o3421?65f3b83>!7013>;7c?88;68?l5e290/=:75419m52>==21b?l4?:%34=?273g;<4784;h1:>5<#9>318=5a16:93>=n;10;6)?89;63?k7003207d;n:18'52?==01e=:650:9j1=<72-;<57;6;o3421>65f5783>!7013?27c?88;18?l32290/=:75589m52>=<21b994?:%34=?3>3g;<47;4;h40>5<#9>31945a16:92>=n>;0;6)?89;7:?k7003=07d8>:18'52?==01e=:658:9j25<72-;<57;6;o3421m65f5d83>!7013?27c?88;`8?l3c290/=:75589m52>=k21b9n4?:%34=?3>3g;<47j4;h7a>5<#9>31945a16:9a>=n=:0;6)?89;7:?k7003l07d9k:18'52?=?j1e=:650:9j3g<72-;<579l;o3421>65f7983>!7013=h7c?88;18?l10290/=:757b9m52>=<21b;;4?:%34=?1d3g;<47;4;h56>5<#9>31;n5a16:92>=n?=0;6)?89;5`?k7003=07d9<:18'52?=?j1e=:658:9j37<72-;<579l;o3421m65f7183>!7013=h7c?88;`8?l0b290/=:757b9m52>=k21b:i4?:%34=?1d3g;<47j4;h4`>5<#9>31;n5a16:9a>=n>k0;6)?89;5`?k7003l07d8n:18'52?=?j1e=:651198m3?=83.:;448c:l23=<6921b:54?:%34=?1d3g;<47?=;:k53?6=,8=26:m4n05;>45<3`<=6=4+16;93f=i9>21=954i7794?"6?0079821>=n0=0;6)?89;5`?k7003;=76g73;29 41>2>i0b<97:058?l>5290/=:757b9m52>=9110e5?50;&23<<0k2d:;54>9:9j<5<72-;<579l;o345$05:>2e5<#9>31;n5a16:95f=k1<7*>7884g>h6?10:h65f6g83>!7013=h7c?88;3f?>o1<3:1(<96:6a8j41?28l07d68:18'52?=0?1e=:650:9j<0<72-;<5769;o3421<65f8`83>!70132i7c?88;38?l>>290/=:758c9m52>=:21b454?:%34=?>e3g;<47=4;n;7>5<#9>315>5a16:94>=h1;0;6)?89;;0?k7003;07b7>:18'52?=1:1e=:652:9l=5<72-;<577<;o3421865`8d83>!7013387c?88;78?j?c290/=:75929m52>=>21d5n4?:%34=??43g;<4794;n;a>5<#9>315>5a16:9<>=h1h0;6)?89;;0?k7003307b76:18'52?=1:1e=:65a:9l==<72-;<577<;o3421o65`9783>!7013387c?88;f8?j?2290/=:75929m52>=m21d4i4?:%34=??43g;<47h4;na2>5<#9>31o=5a16:94>=hjo0;6)?89;a3?k7003;07bl8:18'52?=j?1e=:650:9lf0<72-;<57l9;o3421>65`b383>!7013h=7c?88;18?jd6290/=:75b79m52>=<21dn=4?:%34=?d13g;<47;4;nce>5<#9>31n;5a16:92>=hil0;6)?89;`5?k7003=07bok:18'52?=j?1e=:658:9lef<72-;<57l9;o3421m65`a`83>!7013h=7c?88;`8?jg?290/=:75b79m52>=k21dm:4?:%34=?d13g;<47j4;nc5>5<#9>31n;5a16:9a>=hi<0;6)?89;`5?k7003l07bo;:18'52?=j?1e=:651198kd5=83.:;44m6:l23=<6921dm?4?:%34=?d13g;<47?=;:mb5?6=,8=26o84n05;>45<3fk;6=4+16;9f3=i9>21=954o8d94?"6?00i:6`>79821>=hjl0;6)?89;`5?k7003;=76amd;29 41>2k<0b<97:058?jdd290/=:75b79m52>=9110col50;&23<2d:;54>9:9lfd<72-;<57l9;o345$05:>g05<#9>31n;5a16:95f=1<7*>788a2>h6?10:h65`a883>!7013h=7c?88;3f?>i>m3:1(<96:c48j41?28l07bm9:18'52?=k<1e=:650:9lg1<72-;<57m:;o3421>65`c383>!7013i>7c?88;18?xd5=o0;684?:1y'5=2=9;o0D>l7;I1ba>"b83;87dj;:188ma3=831bh;4?::kg3?6=3f;997>5;|`2f0<72:0;6=u+196957g<@:h37E=ne:&f4?7b3`n?6=44ie794?=h9;?1<75rb0`5>5<3290;w)?74;31g>N4j11C?lk4$d295c=nl=0;66gk5;29?lb12900c<<::188yg46k3:1?7>50z&2<1<6:h1C?o64H2cf?!c728o0ei:50;9j`0<722e:>84?::a64b=83>1<7>t$0:7>44d3A9i46F5;hf6>5<5fd583>>oc=3:17dj9:188ma1=831d=?;50;9~w1?02903wS:67:?126ml;_1`f>X4kh1U?n74^2a;?[5d?2T8o;5Q3b78Z1g>3W>j46P;a69]0d07S:n4:\7e6=Y;_6:0>X31:1U84<4^5;2?[2>82T?4k5Q49g8Z1>c3W>3o6P;8c9>7g?=l;16?l:5509>77d4==816?l?5509>7de==816?ll5509>621==;16>:85539>623==;16>::5539>625==;16>5o5539>6=?==;16>565539>6=1==;16>585539>6c7==;16>k>5539>6``==;16>hk5539>6`b==;16?=:5539>755==;16?=<5539>757==;16?=>5539>6g2==;16>o<5539>6g6==;16>lk5539>6de==;16>lo5539>6d>==;16>l85539>6d2==;16??j5539>77d==;16??75539>771==;16??;5539>775==;16???5539>74`==;16?4=5191896?42:h:70=63;7b?85>;3?370=63;74?85>;3?=70=63;76?85>;3??70=63;40?85>;3<970=63;42?85>;3<;70=63;7e?85>;3?n70=63;7g?85>;3?h70=63;7a?85>;3?870=63;:4?85>;32>7p};9883>6}Y<0301>o;:05b?85>13;{t4;f7?xu30h0;686t^5:b?85>j3><70=6a;64?85>13><70=n3;64?85f:3><70=n1;64?84>?3><70<70<70<70<703><70<:5;64?842<3><70<:3;64?842:3><70<:1;64?84283><70<;f;64?843m3><70<;4;64?843;3><70<;2;64?84393><70<;0;64?844n3><70<<70<<70?lc;64?87dj3><70?la;64?87d13><70?l8;64?87d?3><70?l6;64?87d=3><70?l4;64?84c<3><70<70<70<70<70<703><70<70<70<70<70<9a;64?84103><70<97;64?85003><70=87;64?850>3><70=85;64?850<3><70=83;64?850:3><70=81;64?85?83><70=8f;64?850m3><70=8d;64?850k3><70=8b;64?850i3><70=89;64?85083><70=9f;64?85>;3>i7p};4483>7}Y<=?01>?=:05a?xu3i90;697t^5c3?85f>3><70=n4;64?85f=3><70=nc;64?85fj3><70=>2;64?85693><70?n7;64?87f>3><70?n5;64?87f<3><70?n3;64?87f:3><70?n1;64?87f83><70?6f;64?87a;3><70?i2;64?87a93><70?i0;64?87bn3><70?je;64?87bl3><70?jc;64?87bj3><70?j1;64?87b83><70?kf;64?87cm3><70?kd;64?87ck3><70?kb;64?87ci3><70?k9;64?87c03><70<<2;64?84493><70<<0;64?845n3><70<=e;64?845l3><70<=c;64?845j3><70<=a;64?853i3><70=;9;64?85303><70=;7;64?853>3><70=;5;64?853;3><70=;2;64?853<3><70=:6;64?852<3><70=:5;64?852?3><70=:8;64?85213><70=:a;64?852j3><70=:c;64?851m3><70=9d;64?851k3><70=9b;64?851i3><70=99;64?85103><70=97;64?851>3><70=63;6`?xu3;=0;6?uQ4308961?28=i7p};3383>7}Y<;;01>98:05a?xu3;80;6?uQ4328961128=i7p};3183>7}Y<8l01>9::05a?xu3:o0;6?uQ40g8961328=i7p};2d83>7}Y<8n01>9<:05a?xu3:m0;6?uQ40a8961528=i7p};2b83>7}Y<8h01>9>:05a?xu3;m0;6?uQ43c896>728=i7p};3b83>7}Y<;301>9i:05a?xu3;k0;6?uQ43:8961b28=i7p};3`83>7}Y<;=01>9k:05a?xu3;00;6?uQ4348961d28=i7p};3983>7}Y<;?01>9m:05a?xu3;>0;6?uQ4368961f28=i7p};3783>7}Y<;901>96:05a?xu3;<0;6?uQ40c8961728=i7p};2c83>7}Y<8301>8i:05a?xu3980;6?uQ3df896?42130q~:?f;296~X4mj16?4=56`9~w16b2909wS=jb:?0=6<112wx8=j50;0xZ6cf3492?787;|q74f<72;qU?h74=2;0>31;n7>52z\0a==:;091:;5rs52:>5<5sW9n:63<92851>{t<921<7;32?7p};0683>7}Y;l>01>7<:918yv27>3:1>vP7<5=011v9>::181[5b:2785>472:p052=838pR>k>;<1:7?>63ty?<>4?:3y]7`6<5:3865>4}r636?6=:rT8hk5238193c=z{=::6=4={_1ga>;41:02d52z\0`3=:;091;45rs2d;>5<5sW9o963<9284<>{t;o=1<7;3=<7p}7}Y;m901>7<:648yv5a=3:1>vP7<5=?<1v9?7:181[5a;2785>484:p041=838pR>h=;<1:7?>f3ty?=;4?:3y]7c7<5:386:=4}r621?6=:rT8j=52381937=z{=;?6=4={_1fb>;41:0<=6s|40194?4|V:on70=63;53?xu39;0;6?uQ3d5896?42?o0q~:?a;296~X4lj16?4=56e9~w6`a2909wS=k1:?0=6<1k2wx?k:50;0xZ6b73492?78m;|q276<72hq6?oo5164897142=k01?69:5c897cc2=k01>>?:5c897d12=k01?o;:5c8964a2=k01>?i:5c896?42j30q~=6a;297~;41k0>=63<9`823g=:;031855rs2;a>5<5s492n7?8b:?0=ao;:5:896g228=i7p}7}:;h<1=:l4=2c;>a253z?0=d<29278544>7c9>7o;:18085f<3;;4i10o96s|38a94?2|5:k86<9n;<1b6?70i278m<4>7`9>7>0q~=n0;295d}:;h91=:l4=3;4>41f348o87:k;<0g7?2c348o=7:k;<0g4?2c348o>7:k;<0`b?2c348hi7:k;<0`g?2c348hn7?8a:?1ga<3l279i54;d:?1a2<3l279i;4;d:?1a0<3l279i94;d:?1a6<3l279i?4;d:?1a4<3l279i=4;d:?1`c<3l279:44>7`9>63g=9>k01?87:5f897002=n0q~=6f;2963}:;h81=:l4=32f>1b<5;:o69j4=32`>1b<5;:i69j4=32b>1b<5;:269j4=32;>1b<5;:<69j4=325>1b<5;?=69j4=376>1b<5;??69j4=370>1b<5;?969j4=372>1b<5;?;69j4=36e>1b<5;>n69j4=367>1b<5;>869j4=361>1b<5;>:69j4=363>1b<5;9m69j4=31f>1b<5;9o69j4=31`>1b<58io69j4=0a`>1b<58ii69j4=0ab>1b<58i269j4=0a;>1b<58i<69j4=0a5>1b<58i>69j4=0a7>1b514y>7d7=9>h01>97:5f896102=n01>99:5f896122=n01>9;:5f896142=n01>9=:5f896162=n01>6?:5f8961a2=n01>9j:5f8961c2=n01>9l:5f8961e2=n01>9n:5f8961>2=n01>9?:5f8960a2=n01>7::e6896?428297p}6}:;hi1=:o4=2ca>41f349j47?84:p7dg=83;nw0=nc;34f>;49;0?h63<1087`>;4;4<10?h63<4687`>;4;4<:0:;l5235090a=:;=>18i5234490a=:;<>1=:o4=276>1b<5:?<69j4=27;>1b<5:?269j4=27b>1b<5:?i69j4=27`>1b<5:1b<5:1b<5:1b<5:<369j4=244>1b<5:<=69j4}r1b=?6=:?q6?ll516`894g02=n01:5f894`72=n012=n01:5f897572=n01?0>=63=988231=z{;3<6=4:{<0:3?70j279:94k4:?124?>:438967328=?7p}<1083>6}:;8;1=:l4=236>a3<5:;?6i;4}r046?6=:r79;:4;a:?133<6?=1v?9l:181840?3;6=4={<043?70<279544k6:p627=838p1?99:5c8971228=?7p}=7c83>7}::><1=:j4=3:3>4133ty9;=4?:3y>623=::51668yv40i3:1>v3=74823a=::>l1=::4}r05b?6=:r79;94;a:?136<6?=1v?96:181840<3;759~w7>22909w0<7a;6b?84?13;<86s|29d94?4|5;2j6<9k;<0:0?70<2wx>4850;0x97>f28=?70<69;f6?xu50=0;6?u229;90d=::121=::4}r0;a?6=:r79444>7e9>6<5=9>>0q~<73;296~;5010?m63=868231=z{;2o6=4={<0;759~w7>52909w0<77;6b?84?>3;<86s|29a94?4|5;2<6<9k;<0:5?70<2wx>5l50;0x97>128=o70<60;340>{t:li1<71g<5;l;6<9;;|q1b3<72;q6>k?516f897`e28=?7p}<0g83>7}::o;1=::4=237>a052z?1b5<3i279ik4>759~w7`22909w0;5nh0:;95rs3gb>5<5s48nj7:n;<0fa?70<2wx>k:50;0x97ca28=o70{t:l31<71g<5;oo6<9;;|q1b6<72;q6>hk516f897`?28=?7p}=f383>7}::ln1=:j4=3d4>4133ty9jk4?:3y>752=v3<05823a=:;9o1=::4}r124?6=:r78<94>759>742=l>1v?hj:181857;3>j70=?2;340>{t;921<741c349;h7?84:p6cb=838p1>>=:5c8966628=?7p}<0683>7}:;981=:j4=22`>4133ty9jn4?:3y>757=51668yv57>3:1>v3<00823a=:;9h1=::4}r131?6=:r78<=4>7e9>75g=9>>0q~?ja;291~;6i>0>=63>f2823g=:9h31h8521``9`1=:9hn1h:5rs0;f>5<4s4;j;7?8b:?04`=838p128=?7p}>9e83>6}:9h<1=:l4=22g>a3<5;lj6i;4}r3be?6=:r7:m84:1:?2eg<6?=1v<7l:18087f=3;;5nh0o;6s|1`a94?1|58k?68?4=0cg>41334;jj7j:;<3a5?b134;i?7j8;<3a3?b034;i57j8;|q2=g<72:q6=l:516`8966d2m?01?h6:e78yv7fm3:1>v3>a2865>;6io0:;95rs0;b>5<4s4;j?7?8b:?04f9883>6}:9h81=:l4=22a>a3<5;l36i;4}r3a6?6=:r7:m<4:1:?2f6<6?=1v<77:18087f93;;5n10o;6s|1c694?4|58k;68?4=0`4>4133ty:5:4?:2y>5d6=9>h01>>n:e7897`02m?0q~?m8;296~;61o0>=63>b88231=z{83=6=4<{<3:b?70j2789j50;7x976b2<;01?;9:05a?84683n>70<>2;f7?846<3n<7p}=0483>6}::9o1=:l4=3;7>a3<5;2:6i;4}r03b?6=:r79;:180847l3;;5080o86s|20394?4|5;:h68?4=331>4133ty9<>4?:2y>65e=9>h01?7<:e7897>72m?0q~<>3;293~;58k0>=63=158231=::8<1h85220:9`3=::8k1h:5220g9`2=::;:1h:5rs321>5<4s48;n7?8b:?1=6n:438977128=?7p}=0083>6}::9k1=:l4=3;1>a3<5;=m6i;4}r023?6=:r79<44:1:?15=<6?=1v?>?:18084713;;5?o0o86s|20;94?4|5;:368?4=33b>4133ty:jk4?:2y>65>=9>h01?7>:e78971b2m?0q~<>b;296~;58>0>=63=1d8231=z{8ln6=4<{<033?70j2795<4k4:?13`u2214952d<5;3;6i:4=35g>a252z?113<29279894>7c9~w75f2909w0<:5;72?843;3;6<9m;<024?b3348:>7j:;<020?b13ty9?44?:3y>602==816>9<516`8yv43j3:1?v3=55823g=::881h;522069`0=z{;936=4={<067?36348?=7?8b:p61g=838p1?;<:05a?846<3n?7p}=3683>7}::<819<52252952d56z?117<6?k16><85d59>64>=l<16>64c=l<16>?>5d49~w7512909w0<:1;72?844n3;8>5509>66c=9>h0q~<;7;290~;5=90:;o5220c9`1=::8i1h95220f9`1=z{;9?6=4={<07b?363488h7?8b:p610=839p1?:i:05a?846k3n>70<>d;f6?xu5;:0;6?u225g914=:::i1=:l4}r071?6=:r798h4>7c9>64b=l?1v{t9m<1<707<58o;6<9m;|q2a<<72=q6=k<516`894g>2m>01=63>dg823g=z{8o36=4<{<3e5?70j27:mo4k6:?2ea0;6?u21g2952d<58ko6i:4}r3g7?6=:r7:ik4:1:?2`a<6?k1vag8g0>;6j80o963>b28g2>;6j>0o963>b88g1>{t9m81<707<58nh6<9m;|q2a0<720101v3>ee865>;6lk0:;o5rs0g7>5<3s4;nh7?8b:?2f650;0x94cd2<;01u21da952d<58h>6i;4=0`5>a352z?2ag<2927:h44>7c9~w4c52909w0?jb;34f>;6j?0o:6s|23;94?4|5;>?68?4=311>41e3ty9>54?:3y>615==816>>?516`8yv45?3:1>v3=43865>;5;90:;o5rs305>5<5s48?=7;>;<01b?70j2wx>?;50;0x97272<;01?{t:;;1<707<5;8j6<9m;|q2g6<72;q6=h?5509>5fb=9>h0q~?l2;296~;6m90>=63>cb823g=z{8i:6=4={<3gb?3634;hn7?8b:p5f6=838p1bg83>7}:9mn19<521b;952d52z?2`f<2927:o54>7c9~w4dc2909w0?kb;72?87d?3;41e3ty:no4?:3y>5a?==816=n;516`8yv7ei3:1>v3>d9865>;6k=0:;o5rs0af>5<6s4;o47?8b:p6ac=83?p1{t9o=1<707<58236<9;;|q2b=<72;q6=n65509>5=?=9>>0q~?i9;296~;6k>0>=63>8`8231=z{8lj6=4={<3`2?3634;3n7?84:p5cd=838p1d28=?7p}>fb83>7}:9j>19<5219f952254z?177<29278:h4>7c9>5=c=l=16?4=5409~w7302909w0<<1;72?87?m3;<86s|24:94?4|5;9;68?4=0:e>4133ty9944?:3y>67`==816=4>51668yv42i3:1>v3=2d865>;6180:;95rs37a>5<5s489h7;>;<3:6?70<2wx>8m50;0x974d2<;01<7<:057?xu5=m0;6?u223`914=:90>1=::4}r06a?6=:r79>l4:1:?2=0<6?=1v?8?:1821~;5l=0?463=d287<>;5l80?463=d187<>;5l;0?463=cg87<>;5kl0?463=cb87<>;5kk0?463=ce87<>;5m10?463=e687<>;5m?0?463=e487<>;5m=0?463=e287<>;5m;0?463=e087<>;5m90?463=dg87<>;5>80:;95rs3c0>5<5s48o87;>;<0ab?70<2wx>no50;6x97b328=i70<3n<704>7c9>6`1==816>4:5d79>6g3=l=1v?o?:18184c93?:70{t:j=1<7:t=3f2>41e348n97;>;<0:7?b1348i=7j;;|q1=c<72;q6>i>5509>6gd=9>>0q~=83>p1?j=:05a?84b>3?:70<63;f4?84e;3n?7p}=9d83>7}::jl19<522cc952254z?1gc<6?k16>h=5509>6<4=l?16>lj5d59~w7?c2909w06fe==816>o951668yv4d:3:18v3=cb823g=::l:19<522829`0=::h=1h95rs3;b>5<5s48hn7;>;<0a2?70<2wx>n?50;6x97ee28=i7083n=707c9>6`7==816>4?5d79>6d?=l=1v?l;:18184en3>j70{t:j:1<7443348h<7?84:p6g4=839p1?lj:5c897d32=k01?l=:057?xu5j<0;6>u22cg9572<5;h?6<9k;<0a1?70<2wx>o>50;1x97dc2=k01?l=:5c897d728=?7p}=b283>6}::kn1=?:4=3`1>41c348i?7?84:p6dc=839p1?ll:5c897d72=k01?oj:057?xu5j80;6>u22ca9572<5;h;6<9k;<0a5?70<2wx>lm50;1x97de2=k01?oj:5c897gd28=?7p}=ag83>6}::kh1=?:4=3cf>41c348jj7?84:p6dg=839p1?ln:5c897gd2=k01?on:057?xu5im0;6>u22cc9572<5;kh6<9k;<0b`?70<2wx>l650;1x97d>2=k01?on:5c897g?28=?7p}=ac83>6}::k31=?:4=3cb>41c348jn7?84:p6d0=839p1?l7:5c897g?2=k01?o9:057?xu5i00;6>u22c:9572<5;k36<9k;<0b=?70<2wx>l:50;1x97d02=k01?o9:5c897g328=?7p}=a683>6}::k=1=?:4=3c5>41c348j;7?84:p6d3=839p1?l9:007?84f<3;im50;7x97c128=i70?77;f7?87?>3n>70<70;f4?85>;39?7p}=dc83>0}::l?1=:l4=0:;>a2<582<6i;4=3:3>a0<5:386>=4}r0ge?6==r79i94>7c9>5=?=l=16=565d49>62`=l>16?4=5339~w7b>290>w0;60h0o863>888g1>;5?o0o:63<92805>{t:m21<7;t=3g1>41e34;3n7j;;<3;e?b23486`7=9>h01<6l:e6894>e2m?01?9j:e4896?42;l0q~h5rs3f6>5<3s48oj7?8b:?2;l50;1x970>2<;01?8n:438970d28=?7p}=6883>7}::?31=:l4=34`>a252z?12=<29279:94>759~w7012903w0<98;34f>;5>:0o863=658g1>;5>j0o:63=638g2>;5>80o:63=5g8g2>;5>90o:6s|27f94?4|5;<<68?4=340>4133ty9:84?:9y>631=9>h01?8<:e4897032m=01?8l:e7897052m?01?8>:e58973a2m=01?8?:e58yv5>03:1=iu235c90==:;=31855235:90==:;==1855235490==:;=?1855235190==:;=81855235690==:;<<1855234690==:;6d53ty8=h4?:3y>71g==816?>951668yv5393:18v3<4`823g=:;5<5s49?57;>;<102?70<2wx?9>50;6x962>28=i70=:b;72?857l3n<70==e;f7?xu49j0;6?u235:914=:;:?1=::4}r10b?6=7c9>70g==816?=j5d79>77e=l=1v>?m:181853?3?:70=<4;340>{t;:o1<7:t=264>41e349>57;>;<13g?b03499m7j;;|q05d<72;q6?985509>765=9>>0q~=7?84:p76e=83>p1>:::05a?852?3?:70=?b;f4?855>3n?7p}<1683>7}:;=919<52322952254z?006<6?k16?8;5509>75g=l>16??<5d59~w6712909w0=;2;72?855n3;<86s|32;94?2|5:>96<9m;<160?36349;m7j9;<114?b33ty8=54?:3y>712==816?>?51668yv54j3:18v3<45823g=:;<<19<5231`9`3=:;;>1h95rs20g>5<5s498;7:n;<11`?70<2wx?>650;0x9650288?70=<8;340>{t;;h1<7=t=215>1g<5:8o69o4=20a>4133ty8>h4?:2y>760=9;>01>69o4=20a>1g<5:826<9;;|q06f<72:q6?>;51368964e28=o70==c;340>{t;;=1<7=t=217>1g<5:8269o4=204>4133ty8>l4?:2y>762=9;>01><6:05g?855i3;<86s|33794?5|5:9869o4=204>1g<5:8>6<9;;|q06=<72:q6?>=51368964028=o70==8;340>{t;;91<7=t=211>1g<5:8>69o4=200>4133ty8>;4?:2y>764=9;>01><::05g?855>3;<86s|33394?5|5:9:69o4=200>1g<5:8:6<9;;|q061<72:q6?>?51368964428=o70==4;340>{t;8l1<7=t=213>1g<5:8:69o4=23e>4133ty8>?4?:2y>766=9;>01><>:05g?855:3;<86s|33294?5|5:8m6<<;;<12b?70l278>=4>759~w62c2908w0=:6;34f>;4>10>=63=f98g2>{t;=h1<7=t=277>41e349=:7;>;<0e3?b13ty88n4?:2y>703=9>h01>88:43897`02m>0q~=;e;297~;4=>0:;o5237;914=::o21h95rs26e>5<4s49>47?8b:?02d<29279j44k6:p706=839p1>;6:05a?851j3?:70u234c952d<5:a0>7>53z?01g<6?k16?;j5509>6cg=l=1v>;<:180852k3;;5nk0o86s|37694?2|5:4?:5y>73e=9>h01<7?:e6894>a2m?01>7<:2g8yv51:3:18v3<6c823g=:90;1h9521829`0=:;091?i5rs242>5<3s49=m7?8b:?2=750;6x960>28=i70?63;f7?87>:3n>70=63;1a?xu4=o0;69u237:952d<583?6i:4=0;0>a3<5:386>o4}r16a?6=7c9>5<3=l=16=4:5d49>7<5=;01v>;k:180851>3;948g1>;41:0846s|38594?74s49<47:7;<143?2?349<:7:7;<141?2?349<87:7;<147?2?349<>7:7;<145?2?3493<7:7;<14b?2?3497?84:p7=?=838p1>97:43896?42j;0q~=78;296~;4?>0>=63<928:0>{t;1=1<707<5:3864<4}r1;2?6=:r78;84:1:?0=6<>92wx?5;50;0x96132<;01>7<:828yv5?<3:1>v3<72865>;41:03j6s|39194?4|5:=968?4=2;0>=c7>52z?034<292785>46d:p7<4=838p1>6?:43896?420i0q~=61;296~;4?o0>=63<928ab>{t;0:1<707<5:3864l4}r1;b?6=:r78;i4:1:?0=6<>i2wx?5k50;0x961d2<;01>7<:8;8yv5?l3:1>v3<7c865>;41:0246s|39a94?4|5:=j68?4=2;0><152z?03<<292785>466:p7=g=838p1>9?:43896?420?0q~=71;296~;4>o0>=63<928;`>{t:a3<5;<;6<<:;|q0=1<72;q6?4;5166896?42j20q~=66;296~;5100o863=5g8260=z{87p}>6983>7}::8o1h;5220a957352z?165279=i4>249~yv2693:1>vP00<4mm1/?lj517a8yv27n3:1>vP00<4mj1/?lj517f8yv27m3:1>vP00<4mk1/?lj517g8yv27l3:1>vP00<4mh1/?lj517d8yv27k3:1>vP00<4m01/?lj51268yv27j3:1>vP00<4m11/?lj512;8yv2713:1>vP00<4m?1/?lj512a8yv2703:1>vP00<4m<1/?lj51558yv27?3:1>vP00<4m=1/?lj51428yv27>3:1>vP00<4m:1/?lj51438yv27=3:1>vP00<4m;1/?lj51408yv27<3:1>vP00<4m81/?lj51418yv27;3:1>vP00<4m91/?lj51468yv27:3:1>vP00<4lo1/?lj51478yv2793:1>vP00<4ll1/?lj51448yv2783:1>vP00<4lm1/?lj51458yv5am3:1>vP00<4lk1/?lj514:8yv5al3:1>vP00<4lh1/?lj514;8yv5ak3:1>vP00<4l01/?lj514c8yv5aj3:1>vP00<4l11/?lj514`8yv5ai3:1>vP00<4l>1/?lj514a8yv5a13:1>vP00<4l?1/?lj514f8yv5a03:1>vP00<4l<1/?lj514g8yv5a?3:1>vP00<4l=1/?lj514d8yv5a>3:1>vP00<4l:1/?lj51728yv5a=3:1>vP00<4l;1/?lj51738yv2603:1>vP00<4n:1/?lj51708yv26?3:1>vP00<4n;1/?lj51718yv26>3:1>vP00<4n81/?lj51768yv26=3:1>vP00<4n91/?lj51778yv26<3:1>vP00<4mo1/?lj51748yv26;3:1>vP00<4ml1/?lj51758yv26:3:1>vP00<4m>1/?lj517:8yv27i3:1>vP00<4lj1/?lj517;8yv5an3:1>vP00<4l81/?lj517c8yv5a<3:1>vP00<4l91/?lj517`8yv2?i3:1>vP;8`9>00<30h1/?lj51628yv2>?3:1>vP;969>00<31>1/?lj51278yv2>13:1>vP;989>00<3101/?lj51248yv2f83:1>vP;a19>00<3i91/?lj51258yv2fj3:1>vP;ac9>00<3ik1/?lj512:8yv24<3:1>vP;239>00<3:;1/?lj512c8yv24:3:1>vP;209>00<3:81/?lj512`8yv2493:1>vP;219>00<3:91/?lj512f8yv2483:1>vP;1g9>00<39o1/?lj512g8yv25n3:1>vP;1d9>00<39l1/?lj512d8yv25m3:1>vP;1e9>00<39m1/?lj51528yv25l3:1>vP;1b9>00<39j1/?lj51538yv25k3:1>vP;1c9>00<39k1/?lj51508yv24l3:1>vP;2`9>00<3:h1/?lj51518yv24k3:1>vP;289>00<3:01/?lj51568yv24j3:1>vP;299>00<3:11/?lj51578yv24i3:1>vP;269>00<3:>1/?lj51548yv2413:1>vP;279>00<3:?1/?lj515:8yv2403:1>vP;249>00<3:<1/?lj515;8yv24?3:1>vP;259>00<3:=1/?lj515c8yv24>3:1>vP;229>00<3::1/?lj515`8yv24=3:1>vP;1`9>00<39h1/?lj515a8yv25j3:1>vP;189>00<3901/?lj515f8yv24n3:1>vP;3g9>00<3;o1/?lj515g8yv23=3:1>vP;449>00<3<<1/?lj515d8yxh?l=0;6?uG3`g8yk>c=3:1>vFoj;|l;`=<72;qC?lk4}o:g=?6=:rB8mh5rn9fb>5<5sA9ji6sa8e`94?4|@:kn7p`7db83>7}O;ho0qc6kd;296~N4il1vb5jj:181M5fm2we4ih50;0xL6gb3td3i=4?:3yK7dc52zJ0e`=zf1o96=4={I1ba>{i0l91<7b=3:1>vFoj;|l;a=<72;qC?lk4}o:f=?6=:rB8mh5rn9gb>5<5sA9ji6sa8d`94?4|@:kn7p`7eb83>7}O;ho0qc6jd;296~N4il1vb5kj:181M5fm2we4hh50;0xL6gb3td3j=4?:3yK7dc52zJ0e`=zf1l96=4={I1ba>{i0o91<7a=3:1>vFoj;|l;b=<72;qC?lk4}o:e=?6=:rB8mh5rn9db>5<5sA9ji6sa8g`94?4|@:kn7p`7fb83>7}O;ho0qc6id;296~N4il1vb5hj:181M5fm2we4kh50;0xL6gb3td2<=4?:3yK7dc52zJ0e`=zf0:96=4={I1ba>{i1991<78=0;6?uG3`g8yk?7=3:1>vFoj;|l:4=<72;qC?lk4}o;3=?6=:rB8mh5rn82b>5<5sA9ji6sa91`94?4|@:kn7p`60b83>7}O;ho0qc7?d;296~N4il1vb4>j:181M5fm2we5=h50;0xL6gb3td2==4?:3yK7dc51zJ0e`=zf>k<6=4>{I1ba>{i?h21<7?tH2cf?xh0i00;6oj;|l4ea<728qC?lk4}o5ba?6=9rB8mh5rn6ce>5<6sA9ji6sa7c294?7|@:kn7p`8b083>4}O;ho0qc9m2;295~N4il1vb:l<:182M5fm2we;o:50;3xL6gb3td51zJ0e`=zf>h<6=4>{I1ba>{i?k21<7?tH2cf?xh0j00;6oj;|l4fa<728qC?lk4}o5aa?6=9rB8mh5rn6`e>5<6sA9ji6sa7b294?7|@:kn7p`8c083>4}O;ho0qc9l2;295~N4il1vb:m<:182M5fm2we;n:50;3xL6gb3td51zJ0e`=zf>i<6=4>{I1ba>{i?j21<7?tH2cf?xh0k00;6oj;|l4ga<728qC?lk4}o5`a?6=9rB8mh5rn6ae>5<6sA9ji6sa7e294?7|@:kn7p`8d083>4}O;ho0qc9k2;295~N4il1vb:j<:182M5fm2we;i:50;3xL6gb3td51zJ0e`=zf>n<6=4>{I1ba>{i?m21<7?tH2cf?xh0l00;6oj;|l4`a<728qC?lk4}o5ga?6=9rB8mh5rn6fe>5<6sA9ji6sa7d294?7|@:kn7p`8e083>4}O;ho0qc9j2;295~N4il1vb:k<:182M5fm2we;h:50;3xL6gb3td51zJ0e`=zf>o<6=4>{I1ba>{i?l21<7?tH2cf?xh0m00;6oj;|l4aa<728qC?lk4}o5fa?6=9rB8mh5rn6ge>5<6sA9ji6sa7g294?7|@:kn7p`8f083>4}O;ho0qc9i2;295~N4il1vb:h<:182M5fm2we;k:50;3xL6gb3td51zJ0e`=zf>l<6=4>{I1ba>{i?o21<7?tH2cf?xh0n00;6oj;|l4ba<728qC?lk4}o5ea?6=9rB8mh5rn6de>5<6sA9ji6sa81294?7|@:kn7p`70083>4}O;ho0qc6?2;295~N4il1vb5><:182M5fm2we4=:50;3xL6gb3td3<84?:0yK7dc51zJ0e`=zf1:<6=4>{I1ba>{i0921<7?tH2cf?xh?800;67i3:1=vFoj;|l;4a<728qC?lk4}o:3a?6=9rB8mh5rn92e>5<6sA9ji6sa80294?7|@:kn7p`71083>4}O;ho0qc6>2;295~N4il1vb5?<:182M5fm2we4<:50;3xL6gb3td3=84?:0yK7dc51zJ0e`=zf1;<6=4>{I1ba>{i0821<7?tH2cf?xh?900;66i3:1=vFoj;|l;5a<728qC?lk4}o:2a?6=9rB8mh5rn93e>5<6sA9ji6sa83294?7|@:kn7p`72083>4}O;ho0qc6=2;295~N4il1vb5<<:182M5fm2we4?:50;3xL6gb3td3>84?:0yK7dc51zJ0e`=zf18<6=4>{I1ba>{i0;21<7?tH2cf?xh?:00;65i3:1=vFoj;|l;6a<728qC?lk4}o:1a?6=9rB8mh5rn90e>5<6sA9ji6sa82294?7|@:kn7p`73083>4}O;ho0qc6<2;295~N4il1vb5=<:182M5fm2we4>:50;3xL6gb3td3?84?:0yK7dc51zJ0e`=zf19<6=4>{I1ba>{i0:21<7?tH2cf?xh?;00;64i3:1=vFoj;|l;7a<728qC?lk4}o:0a?6=9rB8mh5rn91e>5<6sA9ji6sa85294?7|@:kn7p`74083>4}O;ho0qc6;2;295~N4il1vb5:<:182M5fm2we49:50;3xL6gb3td3884?:0yK7dc51zJ0e`=zf1><6=4>{I1ba>{i0=21<7?tH2cf?xh?<00;63i3:1=vFoj;|l;0a<728qC?lk4}o:7a?6=9rB8mh5rn96e>5<6sA9ji6sa84294?7|@:kn7p`75083>4}O;ho0qc6:2;295~N4il1vb5;<:182M5fm2we48:50;3xL6gb3td3984?:0yK7dc:7>51zJ0e`=zf1?<6=4>{I1ba>{i0<21<7?tH2cf?xh?=00;62i3:1=vFoj;|l;1a<728qC?lk4}o:6a?6=9rB8mh5rn97e>5<6sA9ji6sa87294?7|@:kn7p`76083>4}O;ho0qc692;295~N4il1vb58<:182M5fm2we4;:50;3xL6gb3td3:84?:0yK7dc51zJ0e`=zf1<<6=4>{I1ba>{i0?21<7?tH2cf?xh?>00;61i3:1=vFoj;|l;2a<728qC?lk4}o:5a?6=9rB8mh5rn94e>5<6sA9ji6sa86294?7|@:kn7p`77083>4}O;ho0qc682;295~N4il1vb59<:182M5fm2we4::50;3xL6gb3td3;84?:0yK7dc51zJ0e`=zf1=<6=4>{I1ba>{i0>21<7?tH2cf?xh??00;60i3:1=vFoj;|l;3a<728qC?lk4}o:4a?6=9rB8mh5rn95e>5<6sA9ji6sa89294?7|@:kn7p`78083>4}O;ho0qc672;295~N4il1vb56<:182M5fm2we45:50;3xL6gb3td3484?:0yK7dc51zJ0e`=zf12<6=4>{I1ba>{i0121<7?tH2cf?xh?000;6?i3:1=vFe290:wE=ne:m<=e=83;pD>oj;|l;5<6sA9ji6sa88294?7|@:kn7p`79083>4}O;ho0qc662;295~N4il1vb57<:182M5fm2we44:50;3xL6gb3td3584?:0yK7dc51zJ0e`=zf13<6=4>{I1ba>{i0021<7?tH2cf?xh?100;6>i3:1=vFoj;|l;=a<728qC?lk4}o::a?6=9rB8mh5rn9;e>5<6sA9ji6sa8`294?7|@:kn7p`7a083>4}O;ho0qc6n2;295~N4il1vb5o<:182M5fm2we4l:50;3xL6gb3td3m84?:0yK7dc51zJ0e`=zf1k<6=4>{I1ba>{i0h21<7?tH2cf?xh?i00;6fi3:1=vFoj;|l;ea<728qC?lk4}o:ba?6=9rB8mh5rn9ce>5<6sA9ji6sa8c294?7|@:kn7p`7b083>4}O;ho0qc6m2;295~N4il1vb5l<:182M5fm2we4o:50;3xL6gb3td3n84?:0yK7dc51zJ0e`=zf1h<6=4>{I1ba>{i0k21<7?tH2cf?xh?j00;6ei3:1=vFoj;|l;fa<728qC?lk4}o:aa?6=9rB8mh5rn9`e>5<6sA9ji6sa8b294?7|@:kn7p`7c083>4}O;ho0qc6l2;295~N4il1vb5m<:182M5fm2we4n:50;3xL6gb3td3o84?:0yK7dc51zJ0e`=zf1i<6=4>{I1ba>{i0j21<7?tH2cf?xh?k00;6di3:1=vFoj;|l;ga<728qC?lk4}o:`a?6=9rB8mh5rn9ae>5<6sA9ji6sa8e294?7|@:kn7p`7d083>4}O;ho0qc6k2;295~N4il1vb5j<:182M5fm2wvqpNOCzc4g?b7l==jn5sO@Cy3yEFWstJK diff --git a/usrp2/extramfifo/ext_fifo.v b/usrp2/extramfifo/ext_fifo.v index a506d71e2..c7e8f6cfb 100644 --- a/usrp2/extramfifo/ext_fifo.v +++ b/usrp2/extramfifo/ext_fifo.v @@ -57,10 +57,18 @@ module ext_fifo .dout(write_data), // Bus [17 : 0] .full(full1), .empty(empty1)); - assign dst_rdy_o = ~full1; + + assign dst_rdy_o = ~full1; + +/* -----\/----- EXCLUDED -----\/----- + assign space_avail = ~full2; + assign data_avail = ~empty1; + assign read_data = write_data; + -----/\----- EXCLUDED -----/\----- */ + // External FIFO running at ext clock rate and 18 bit width. - nobl_fifo #(.WIDTH(EXT_WIDTH),.DEPTH(DEPTH)) + nobl_fifo #(.WIDTH(EXT_WIDTH),.DEPTH(DEPTH),.FDEPTH(DEPTH)) nobl_fifo_i1 ( .clk(ext_clk), @@ -94,7 +102,8 @@ module ext_fifo .rd_en(dst_rdy_i), .dout(dataout), // Bus [35 : 0] .full(full2), - .almost_full(almost_full2), + .almost_full(), + .prog_full(almost_full2), .empty(empty2)); assign src_rdy_o = ~empty2; diff --git a/usrp2/extramfifo/ext_fifo_tb.v b/usrp2/extramfifo/ext_fifo_tb.v index 38df4a285..a93d524d5 100644 --- a/usrp2/extramfifo/ext_fifo_tb.v +++ b/usrp2/extramfifo/ext_fifo_tb.v @@ -51,6 +51,44 @@ module ext_fifo_tb(); always #4 ext_clk <= ~ext_clk; + initial + begin + rst <= 1; + repeat (5) @(negedge int_clk); + rst <= 0; + @(negedge int_clk); + while (datain < 10000) + begin + @(negedge int_clk); + datain <= datain + dst_rdy_o; + src_rdy_i <= dst_rdy_o; + end + end // initial begin + + + initial + begin + repeat (20) @(negedge int_clk); + + // Fall through fifo, first output already valid + if (dataout !== ref_dataout) + $display("Error: Expected %x, got %x",ref_dataout, dataout); + + while (ref_dataout < 10000) + begin + @(negedge int_clk); + ref_dataout <= ref_dataout + src_rdy_o ; + dst_rdy_i <= src_rdy_o; + if ((dataout !== ref_dataout) && src_rdy_o) + $display("Error: Expected %x, got %x",ref_dataout, dataout); + @(negedge int_clk); + dst_rdy_i <= 0; + repeat(6) @(negedge int_clk); + end + end + + +/* -----\/----- EXCLUDED -----\/----- initial begin @@ -112,6 +150,7 @@ module ext_fifo_tb(); end // initial begin + -----/\----- EXCLUDED -----/\----- */ /////////////////////////////////////////////////////////////////////////////////// // Simulation control // /////////////////////////////////////////////////////////////////////////////////// diff --git a/usrp2/extramfifo/nobl_fifo.v b/usrp2/extramfifo/nobl_fifo.v index 7ddb517c7..03e3f5223 100644 --- a/usrp2/extramfifo/nobl_fifo.v +++ b/usrp2/extramfifo/nobl_fifo.v @@ -5,7 +5,7 @@ // "full" and "empty" flags. module nobl_fifo - #(parameter WIDTH=18,DEPTH=19) + #(parameter WIDTH=18,DEPTH=19,FDEPTH=10) ( input clk, input rst, @@ -27,9 +27,9 @@ module nobl_fifo input upstream_full // (Connect to almost full flag upstream) ); - reg [DEPTH-1:0] capacity; - reg [DEPTH-1:0] wr_pointer; - reg [DEPTH-1:0] rd_pointer; + reg [FDEPTH-1:0] capacity; + reg [FDEPTH-1:0] wr_pointer; + reg [FDEPTH-1:0] rd_pointer; wire [DEPTH-1:0] address; reg supress; reg data_avail_int; // Data available with high latency from ext FIFO flag @@ -51,7 +51,7 @@ module nobl_fifo always @(posedge clk) if (rst) begin - capacity <= 1 << (DEPTH-1); + capacity <= 1 << (FDEPTH-1); wr_pointer <= 0; rd_pointer <= 0; space_avail <= 0; @@ -60,9 +60,11 @@ module nobl_fifo end else begin - space_avail <= ~((capacity == 0) || (read&&write) || (capacity == 1 && write) ); + // No space available if: + // Capacity is already zero; Capacity is 1 and write is asserted (lookahead); both read and write are asserted (collision) + space_avail <= ~((capacity == 0) || (read&&write) || ((capacity == 1) && write) ); // Capacity has 1 cycle delay so look ahead here for corner case of read of last item in FIFO. - data_avail_int <= ~((capacity == (1 << (DEPTH-1))) || (read&&write) || (capacity == ((1 << (DEPTH-1))-1) && read) ); + data_avail_int <= ~((capacity == (1 << (FDEPTH-1))) || (read&&write) || ((capacity == ((1 << (FDEPTH-1))-1)) && read) ); supress <= read && write; wr_pointer <= wr_pointer + write; rd_pointer <= rd_pointer + ((~write && read) || supress); -- cgit v1.2.3 From 04e5b7128d4e40766ca5dbf3a9abc294464de721 Mon Sep 17 00:00:00 2001 From: Ian Buckley Date: Thu, 12 Aug 2010 12:28:13 -0700 Subject: Bringing all coregen files checked in into sync --- usrp2/coregen/fifo_generator_ug175.pdf | Bin 1069823 -> 2895895 bytes usrp2/coregen/fifo_xlnx_512x36_2clk_18to36.veo | 12 +-- .../coregen/fifo_xlnx_512x36_2clk_18to36_flist.txt | 6 +- .../fifo_xlnx_512x36_2clk_18to36_readme.txt | 22 +++-- .../coregen/fifo_xlnx_512x36_2clk_18to36_xmdf.tcl | 8 +- usrp2/coregen/fifo_xlnx_512x36_2clk_36to18.veo | 12 +-- ...k_36to18_fifo_generator_v4_3_xst_1.ngc_xst.xrpt | 101 --------------------- .../coregen/fifo_xlnx_512x36_2clk_36to18_flist.txt | 6 +- .../fifo_xlnx_512x36_2clk_36to18_readme.txt | 22 +++-- .../coregen/fifo_xlnx_512x36_2clk_36to18_xmdf.tcl | 8 +- 10 files changed, 60 insertions(+), 137 deletions(-) delete mode 100644 usrp2/coregen/fifo_xlnx_512x36_2clk_36to18_fifo_generator_v4_3_xst_1.ngc_xst.xrpt diff --git a/usrp2/coregen/fifo_generator_ug175.pdf b/usrp2/coregen/fifo_generator_ug175.pdf index 2c3e3c200..5fba6029c 100644 Binary files a/usrp2/coregen/fifo_generator_ug175.pdf and b/usrp2/coregen/fifo_generator_ug175.pdf differ diff --git a/usrp2/coregen/fifo_xlnx_512x36_2clk_18to36.veo b/usrp2/coregen/fifo_xlnx_512x36_2clk_18to36.veo index cd949ccaa..c962fddfa 100644 --- a/usrp2/coregen/fifo_xlnx_512x36_2clk_18to36.veo +++ b/usrp2/coregen/fifo_xlnx_512x36_2clk_18to36.veo @@ -23,7 +23,7 @@ * appliances, devices, or systems. Use in such applications are * * expressly prohibited. * * * -* (c) Copyright 1995-2007 Xilinx, Inc. * +* (c) Copyright 1995-2009 Xilinx, Inc. * * All rights reserved. * *******************************************************************************/ // The following must be inserted into your Verilog file for this @@ -32,16 +32,16 @@ //----------- Begin Cut here for INSTANTIATION Template ---// INST_TAG fifo_xlnx_512x36_2clk_18to36 YourInstanceName ( - .din(din), // Bus [17 : 0] - .rd_clk(rd_clk), - .rd_en(rd_en), .rst(rst), .wr_clk(wr_clk), + .rd_clk(rd_clk), + .din(din), // Bus [17 : 0] .wr_en(wr_en), - .almost_full(almost_full), + .rd_en(rd_en), .dout(dout), // Bus [35 : 0] + .full(full), .empty(empty), - .full(full)); + .prog_full(prog_full)); // INST_TAG_END ------ End INSTANTIATION Template --------- diff --git a/usrp2/coregen/fifo_xlnx_512x36_2clk_18to36_flist.txt b/usrp2/coregen/fifo_xlnx_512x36_2clk_18to36_flist.txt index 18ba3e664..2f8d522f6 100644 --- a/usrp2/coregen/fifo_xlnx_512x36_2clk_18to36_flist.txt +++ b/usrp2/coregen/fifo_xlnx_512x36_2clk_18to36_flist.txt @@ -1,8 +1,12 @@ # Output products list for +_xmsgs/pn_parser.xmsgs +fifo_generator_ug175.pdf +fifo_xlnx_512x36_2clk_18to36.gise fifo_xlnx_512x36_2clk_18to36.ngc fifo_xlnx_512x36_2clk_18to36.v fifo_xlnx_512x36_2clk_18to36.veo fifo_xlnx_512x36_2clk_18to36.xco -fifo_xlnx_512x36_2clk_18to36_fifo_generator_v4_3_xst_1.ngc_xst.xrpt +fifo_xlnx_512x36_2clk_18to36.xise fifo_xlnx_512x36_2clk_18to36_flist.txt +fifo_xlnx_512x36_2clk_18to36_readme.txt fifo_xlnx_512x36_2clk_18to36_xmdf.tcl diff --git a/usrp2/coregen/fifo_xlnx_512x36_2clk_18to36_readme.txt b/usrp2/coregen/fifo_xlnx_512x36_2clk_18to36_readme.txt index e0d45849d..03829e876 100644 --- a/usrp2/coregen/fifo_xlnx_512x36_2clk_18to36_readme.txt +++ b/usrp2/coregen/fifo_xlnx_512x36_2clk_18to36_readme.txt @@ -1,5 +1,12 @@ The following files were generated for 'fifo_xlnx_512x36_2clk_18to36' in directory -/home/matt/fpgapriv/usrp2/coregen/: +/home/ianb/ettus/sram_fifo/fpgapriv/usrp2/coregen/ + +fifo_generator_ug175.pdf: + Please see the core data sheet. + +fifo_xlnx_512x36_2clk_18to36.gise: + ISE Project Navigator support file. This is a generated file and should + not be edited directly. fifo_xlnx_512x36_2clk_18to36.ngc: Binary Xilinx implementation netlist file containing the information @@ -18,12 +25,9 @@ fifo_xlnx_512x36_2clk_18to36.xco: CORE Generator input file containing the parameters used to regenerate a core. -fifo_xlnx_512x36_2clk_18to36_fifo_generator_v4_3_xst_1.ngc_xst.xrpt: - Please see the core data sheet. - -fifo_xlnx_512x36_2clk_18to36_flist.txt: - Text file listing all of the output files produced when a customized - core was generated in the CORE Generator. +fifo_xlnx_512x36_2clk_18to36.xise: + ISE Project Navigator support file. This is a generated file and should + not be edited directly. fifo_xlnx_512x36_2clk_18to36_readme.txt: Text file indicating the files generated and how they are used. @@ -33,6 +37,10 @@ fifo_xlnx_512x36_2clk_18to36_xmdf.tcl: how the files output by CORE Generator for the core can be integrated into your ISE project. +fifo_xlnx_512x36_2clk_18to36_flist.txt: + Text file listing all of the output files produced when a customized + core was generated in the CORE Generator. + Please see the Xilinx CORE Generator online help for further details on generated files and how to use them. diff --git a/usrp2/coregen/fifo_xlnx_512x36_2clk_18to36_xmdf.tcl b/usrp2/coregen/fifo_xlnx_512x36_2clk_18to36_xmdf.tcl index f20d53f64..9b9b1f37a 100644 --- a/usrp2/coregen/fifo_xlnx_512x36_2clk_18to36_xmdf.tcl +++ b/usrp2/coregen/fifo_xlnx_512x36_2clk_18to36_xmdf.tcl @@ -36,6 +36,10 @@ utilities_xmdf::xmdfSetData $instance FileSet $fcount type logical_library utilities_xmdf::xmdfSetData $instance FileSet $fcount logical_library unisim incr fcount +utilities_xmdf::xmdfSetData $instance FileSet $fcount relative_path fifo_generator_ug175.pdf +utilities_xmdf::xmdfSetData $instance FileSet $fcount type AnyView +incr fcount + utilities_xmdf::xmdfSetData $instance FileSet $fcount relative_path fifo_xlnx_512x36_2clk_18to36.ngc utilities_xmdf::xmdfSetData $instance FileSet $fcount type ngc incr fcount @@ -52,10 +56,6 @@ utilities_xmdf::xmdfSetData $instance FileSet $fcount relative_path fifo_xlnx_51 utilities_xmdf::xmdfSetData $instance FileSet $fcount type coregen_ip incr fcount -utilities_xmdf::xmdfSetData $instance FileSet $fcount relative_path fifo_xlnx_512x36_2clk_18to36_fifo_generator_v4_3_xst_1.ngc_xst.xrpt -utilities_xmdf::xmdfSetData $instance FileSet $fcount type AnyView -incr fcount - utilities_xmdf::xmdfSetData $instance FileSet $fcount relative_path fifo_xlnx_512x36_2clk_18to36_xmdf.tcl utilities_xmdf::xmdfSetData $instance FileSet $fcount type AnyView incr fcount diff --git a/usrp2/coregen/fifo_xlnx_512x36_2clk_36to18.veo b/usrp2/coregen/fifo_xlnx_512x36_2clk_36to18.veo index 5c2da4b97..e93be1591 100644 --- a/usrp2/coregen/fifo_xlnx_512x36_2clk_36to18.veo +++ b/usrp2/coregen/fifo_xlnx_512x36_2clk_36to18.veo @@ -23,7 +23,7 @@ * appliances, devices, or systems. Use in such applications are * * expressly prohibited. * * * -* (c) Copyright 1995-2007 Xilinx, Inc. * +* (c) Copyright 1995-2009 Xilinx, Inc. * * All rights reserved. * *******************************************************************************/ // The following must be inserted into your Verilog file for this @@ -32,15 +32,15 @@ //----------- Begin Cut here for INSTANTIATION Template ---// INST_TAG fifo_xlnx_512x36_2clk_36to18 YourInstanceName ( - .din(din), // Bus [35 : 0] - .rd_clk(rd_clk), - .rd_en(rd_en), .rst(rst), .wr_clk(wr_clk), + .rd_clk(rd_clk), + .din(din), // Bus [35 : 0] .wr_en(wr_en), + .rd_en(rd_en), .dout(dout), // Bus [17 : 0] - .empty(empty), - .full(full)); + .full(full), + .empty(empty)); // INST_TAG_END ------ End INSTANTIATION Template --------- diff --git a/usrp2/coregen/fifo_xlnx_512x36_2clk_36to18_fifo_generator_v4_3_xst_1.ngc_xst.xrpt b/usrp2/coregen/fifo_xlnx_512x36_2clk_36to18_fifo_generator_v4_3_xst_1.ngc_xst.xrpt deleted file mode 100644 index 3abf04253..000000000 --- a/usrp2/coregen/fifo_xlnx_512x36_2clk_36to18_fifo_generator_v4_3_xst_1.ngc_xst.xrpt +++ /dev/null @@ -1,101 +0,0 @@ - - - - - - -

- - - - - - - - - - - - - - -
-
- - - - - - - - - - - -
-
- - - -
-
-
-
-
-
-
-
- - - - -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - -
-
-
- - - - - - - -
-
-
-
-
- - - -
- - - diff --git a/usrp2/coregen/fifo_xlnx_512x36_2clk_36to18_flist.txt b/usrp2/coregen/fifo_xlnx_512x36_2clk_36to18_flist.txt index aadac46c0..54c85b15e 100644 --- a/usrp2/coregen/fifo_xlnx_512x36_2clk_36to18_flist.txt +++ b/usrp2/coregen/fifo_xlnx_512x36_2clk_36to18_flist.txt @@ -1,8 +1,12 @@ # Output products list for +_xmsgs/pn_parser.xmsgs +fifo_generator_ug175.pdf +fifo_xlnx_512x36_2clk_36to18.gise fifo_xlnx_512x36_2clk_36to18.ngc fifo_xlnx_512x36_2clk_36to18.v fifo_xlnx_512x36_2clk_36to18.veo fifo_xlnx_512x36_2clk_36to18.xco -fifo_xlnx_512x36_2clk_36to18_fifo_generator_v4_3_xst_1.ngc_xst.xrpt +fifo_xlnx_512x36_2clk_36to18.xise fifo_xlnx_512x36_2clk_36to18_flist.txt +fifo_xlnx_512x36_2clk_36to18_readme.txt fifo_xlnx_512x36_2clk_36to18_xmdf.tcl diff --git a/usrp2/coregen/fifo_xlnx_512x36_2clk_36to18_readme.txt b/usrp2/coregen/fifo_xlnx_512x36_2clk_36to18_readme.txt index 568c757ec..3efc586bf 100644 --- a/usrp2/coregen/fifo_xlnx_512x36_2clk_36to18_readme.txt +++ b/usrp2/coregen/fifo_xlnx_512x36_2clk_36to18_readme.txt @@ -1,5 +1,12 @@ The following files were generated for 'fifo_xlnx_512x36_2clk_36to18' in directory -/home/matt/fpgapriv/usrp2/coregen/: +/home/ianb/ettus/sram_fifo/fpgapriv/usrp2/coregen/ + +fifo_generator_ug175.pdf: + Please see the core data sheet. + +fifo_xlnx_512x36_2clk_36to18.gise: + ISE Project Navigator support file. This is a generated file and should + not be edited directly. fifo_xlnx_512x36_2clk_36to18.ngc: Binary Xilinx implementation netlist file containing the information @@ -18,12 +25,9 @@ fifo_xlnx_512x36_2clk_36to18.xco: CORE Generator input file containing the parameters used to regenerate a core. -fifo_xlnx_512x36_2clk_36to18_fifo_generator_v4_3_xst_1.ngc_xst.xrpt: - Please see the core data sheet. - -fifo_xlnx_512x36_2clk_36to18_flist.txt: - Text file listing all of the output files produced when a customized - core was generated in the CORE Generator. +fifo_xlnx_512x36_2clk_36to18.xise: + ISE Project Navigator support file. This is a generated file and should + not be edited directly. fifo_xlnx_512x36_2clk_36to18_readme.txt: Text file indicating the files generated and how they are used. @@ -33,6 +37,10 @@ fifo_xlnx_512x36_2clk_36to18_xmdf.tcl: how the files output by CORE Generator for the core can be integrated into your ISE project. +fifo_xlnx_512x36_2clk_36to18_flist.txt: + Text file listing all of the output files produced when a customized + core was generated in the CORE Generator. + Please see the Xilinx CORE Generator online help for further details on generated files and how to use them. diff --git a/usrp2/coregen/fifo_xlnx_512x36_2clk_36to18_xmdf.tcl b/usrp2/coregen/fifo_xlnx_512x36_2clk_36to18_xmdf.tcl index 09248b321..5161c1826 100644 --- a/usrp2/coregen/fifo_xlnx_512x36_2clk_36to18_xmdf.tcl +++ b/usrp2/coregen/fifo_xlnx_512x36_2clk_36to18_xmdf.tcl @@ -36,6 +36,10 @@ utilities_xmdf::xmdfSetData $instance FileSet $fcount type logical_library utilities_xmdf::xmdfSetData $instance FileSet $fcount logical_library unisim incr fcount +utilities_xmdf::xmdfSetData $instance FileSet $fcount relative_path fifo_generator_ug175.pdf +utilities_xmdf::xmdfSetData $instance FileSet $fcount type AnyView +incr fcount + utilities_xmdf::xmdfSetData $instance FileSet $fcount relative_path fifo_xlnx_512x36_2clk_36to18.ngc utilities_xmdf::xmdfSetData $instance FileSet $fcount type ngc incr fcount @@ -52,10 +56,6 @@ utilities_xmdf::xmdfSetData $instance FileSet $fcount relative_path fifo_xlnx_51 utilities_xmdf::xmdfSetData $instance FileSet $fcount type coregen_ip incr fcount -utilities_xmdf::xmdfSetData $instance FileSet $fcount relative_path fifo_xlnx_512x36_2clk_36to18_fifo_generator_v4_3_xst_1.ngc_xst.xrpt -utilities_xmdf::xmdfSetData $instance FileSet $fcount type AnyView -incr fcount - utilities_xmdf::xmdfSetData $instance FileSet $fcount relative_path fifo_xlnx_512x36_2clk_36to18_xmdf.tcl utilities_xmdf::xmdfSetData $instance FileSet $fcount type AnyView incr fcount -- cgit v1.2.3 From 7977684b907f0e6e963929fe7c43afca3f9c93f8 Mon Sep 17 00:00:00 2001 From: Ian Buckley Date: Thu, 12 Aug 2010 12:57:02 -0700 Subject: Adding in files that probably didn;t exist in the ISE10.1 version of coregen --- usrp2/coregen/fifo_xlnx_512x36_2clk_18to36.gise | 30 ++ usrp2/coregen/fifo_xlnx_512x36_2clk_18to36.ncf | 0 usrp2/coregen/fifo_xlnx_512x36_2clk_18to36.xise | 374 ++++++++++++++++++++++++ usrp2/coregen/fifo_xlnx_512x36_2clk_36to18.gise | 30 ++ usrp2/coregen/fifo_xlnx_512x36_2clk_36to18.xise | 374 ++++++++++++++++++++++++ 5 files changed, 808 insertions(+) create mode 100644 usrp2/coregen/fifo_xlnx_512x36_2clk_18to36.gise create mode 100644 usrp2/coregen/fifo_xlnx_512x36_2clk_18to36.ncf create mode 100644 usrp2/coregen/fifo_xlnx_512x36_2clk_18to36.xise create mode 100644 usrp2/coregen/fifo_xlnx_512x36_2clk_36to18.gise create mode 100644 usrp2/coregen/fifo_xlnx_512x36_2clk_36to18.xise diff --git a/usrp2/coregen/fifo_xlnx_512x36_2clk_18to36.gise b/usrp2/coregen/fifo_xlnx_512x36_2clk_18to36.gise new file mode 100644 index 000000000..c18cf3bf0 --- /dev/null +++ b/usrp2/coregen/fifo_xlnx_512x36_2clk_18to36.gise @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + 11.1 + + + + + + + + + + diff --git a/usrp2/coregen/fifo_xlnx_512x36_2clk_18to36.ncf b/usrp2/coregen/fifo_xlnx_512x36_2clk_18to36.ncf new file mode 100644 index 000000000..e69de29bb diff --git a/usrp2/coregen/fifo_xlnx_512x36_2clk_18to36.xise b/usrp2/coregen/fifo_xlnx_512x36_2clk_18to36.xise new file mode 100644 index 000000000..05048a43b --- /dev/null +++ b/usrp2/coregen/fifo_xlnx_512x36_2clk_18to36.xise @@ -0,0 +1,374 @@ + + + +
+ + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
diff --git a/usrp2/coregen/fifo_xlnx_512x36_2clk_36to18.gise b/usrp2/coregen/fifo_xlnx_512x36_2clk_36to18.gise new file mode 100644 index 000000000..d0c862319 --- /dev/null +++ b/usrp2/coregen/fifo_xlnx_512x36_2clk_36to18.gise @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + 11.1 + + + + + + + + + + diff --git a/usrp2/coregen/fifo_xlnx_512x36_2clk_36to18.xise b/usrp2/coregen/fifo_xlnx_512x36_2clk_36to18.xise new file mode 100644 index 000000000..d9013a131 --- /dev/null +++ b/usrp2/coregen/fifo_xlnx_512x36_2clk_36to18.xise @@ -0,0 +1,374 @@ + + + +
+ + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
-- cgit v1.2.3 From 65b671865ebf8a9541379e794ba624f038524f52 Mon Sep 17 00:00:00 2001 From: Ian Buckley Date: Thu, 12 Aug 2010 13:05:55 -0700 Subject: Edited FIFO instance to delete port that was not regenerated after reconfiguration --- usrp2/extramfifo/ext_fifo.v | 1 - 1 file changed, 1 deletion(-) diff --git a/usrp2/extramfifo/ext_fifo.v b/usrp2/extramfifo/ext_fifo.v index c7e8f6cfb..398e5ef81 100644 --- a/usrp2/extramfifo/ext_fifo.v +++ b/usrp2/extramfifo/ext_fifo.v @@ -102,7 +102,6 @@ module ext_fifo .rd_en(dst_rdy_i), .dout(dataout), // Bus [35 : 0] .full(full2), - .almost_full(), .prog_full(almost_full2), .empty(empty2)); assign src_rdy_o = ~empty2; -- cgit v1.2.3 From e5cae33e3c5e9ae1821e06af8bf57bc0444605de Mon Sep 17 00:00:00 2001 From: Ian Buckley Date: Thu, 12 Aug 2010 14:35:06 -0700 Subject: Regenerated FIFO's for extfifo. There are problems with certain configurations it seems. It is important that the fifo_xlnx_512x36_2clk_18to36 is generated with the "almost_full" pin even though it is not used in the application. if this pin is omitted the FPGA image doesn't work correctly --- usrp2/coregen/fifo_xlnx_512x36_2clk_18to36.ncf | 0 usrp2/coregen/fifo_xlnx_512x36_2clk_18to36.ngc | 2 +- usrp2/coregen/fifo_xlnx_512x36_2clk_18to36.veo | 1 + usrp2/coregen/fifo_xlnx_512x36_2clk_18to36.xco | 2 +- usrp2/coregen/fifo_xlnx_512x36_2clk_18to36.xise | 310 +-------------------- ...12x36_2clk_18to36_fifo_generator_v4_3_xst_1.lso | 3 - ...k_18to36_fifo_generator_v4_3_xst_1.ngc_xst.xrpt | 102 ------- usrp2/coregen/fifo_xlnx_512x36_2clk_36to18.ngc | 4 +- usrp2/coregen/fifo_xlnx_512x36_2clk_36to18.xco | 4 +- usrp2/coregen/fifo_xlnx_512x36_2clk_36to18.xise | 310 +-------------------- ...12x36_2clk_36to18_fifo_generator_v4_3_xst_1.lso | 3 - 11 files changed, 15 insertions(+), 726 deletions(-) delete mode 100644 usrp2/coregen/fifo_xlnx_512x36_2clk_18to36.ncf delete mode 100644 usrp2/coregen/fifo_xlnx_512x36_2clk_18to36_fifo_generator_v4_3_xst_1.lso delete mode 100644 usrp2/coregen/fifo_xlnx_512x36_2clk_18to36_fifo_generator_v4_3_xst_1.ngc_xst.xrpt delete mode 100644 usrp2/coregen/fifo_xlnx_512x36_2clk_36to18_fifo_generator_v4_3_xst_1.lso diff --git a/usrp2/coregen/fifo_xlnx_512x36_2clk_18to36.ncf b/usrp2/coregen/fifo_xlnx_512x36_2clk_18to36.ncf deleted file mode 100644 index e69de29bb..000000000 diff --git a/usrp2/coregen/fifo_xlnx_512x36_2clk_18to36.ngc b/usrp2/coregen/fifo_xlnx_512x36_2clk_18to36.ngc index 657b1aa98..b583362cd 100644 --- a/usrp2/coregen/fifo_xlnx_512x36_2clk_18to36.ngc +++ b/usrp2/coregen/fifo_xlnx_512x36_2clk_18to36.ngc @@ -1,3 +1,3 @@ XILINX-XDB 0.1 STUB 0.1 ASCII XILINX-XDM V1.6e -$45540<,[o}e~g`n;"2*726&;$:,)<6;.vnt*Ydo&lbjbQwloz\144;?U9oaeP19vl73(iof;0<85?0123=>6789:;<=>;0:23456789:;<=>?0123456789:;<=>?0123456789:;<=>?0123456789:;<=>?01084<7<9:1:"=?<;029MKVR\3KOH_O39;2=5`=683CE\XZ5psmd[cskdV~c~h}g<883:73<990BB][[:qplcZ`rdeUdk|h^cpw`ts400;2?;4118JJUSS2yxdkRhzlm]wlwct`Vdnklzj<883:4?<990DYY^ZT;fbpdYdg|d044?>0a855113922?OIX\^1HDO31483:45<9?0DYY^ZT;FLE972294:>6?7:HLSQQ11:07?754;8;0>7GAPTV9@LVF480;2<<42;MVPUSS2ME[M1?50?31?64=AGZ^X7JFB=12>586;2996B[[PTV9@JD;;80;2<:4378LQQVR\3ndyy2<5;2=`>5t:9:;jj::6,72?12<<9LM=<5;:HLSQQ11397>JSSX\^1HB^M<283:4=1:2<286869768<567<22N4L?4959:45?530;>585=231EC^ZT;rqkbYbey~rSyf}erj\evubz}636=0=5:;9MKVR\3zycjQjmqvz[qnumzbTbhintd>;>586j231CXZ_UU8q`Zbf|hUhcx`{<983:7=F:11JHI\N<1<;?DBCZH6:255NDEPB878?3HNO^L2<>99B@ATF4=437LJKR@>6:==FLMXJ0;07;@FGVD:0611JHI\N<9611JHI\M<1<;?DBCZK6:255NDEPA878?3HNO^O2<>99B@ATE4=437LJKRC>6:==FLMXI0;07;@FGVG:06h1JHI\M<983:==FLMXI050<;@NO=>GTQGIT^HI<;CW1<>DR[VCEJB?4C39@A44EKCK90OA\6;BMNILRSMM;?7NA]E^EFJ@TF\@EESD@IO69@V@GSMM;0H?5KC39GM3=CAH6;2:5KI@>24;169GMD:6<730HDO31483:2=CAH6:9384DHC?5;0384DHC?7;01OEO2>3?58@LD;9=4<7IGM<07=3>BNJ5;=2:5KIC>23;12NBN1?17:FJF9476>1OEO2=1?58@LD;:;4<7IGM<31=3>BNJ58?2:5KIC>11;1;08;EKA8719?2NBN1<7>69GMG:517<0HDL32?58@LD;;9427IGM<2394;119:FJTD:6294<7IG_A=3=3>BNXK6;2:5KIQ@?5;1BHI5;:2:5KO@>26;108;EMB842912NDM1?::1<4?AIF48?5:6J@A=3=2>BHI585:6J@A=1=2>BHI5>5:6J@A=7=2>BHI5<5:6J@A=5=2>BHI525:6J@A=;=3>BHIVXNK;5KOC>3:2=CGK6:<394DN@?54803MEI0<<17:FLF9746>1OCO2>4?58@JD;9<4<7IAM<04=3>BHJ5;<2:5KOC>2<;117:FLF9466>1OCO2=2?58@JD;::4<7IAM<36=3>BHJ58>2:5KOC>12;1:08;EMA87>9?2NDN1<6>79GKG:56>1OCO2<0?;8@JD;;80;2:5KOC>05;019:FLTD:6294<7IA_A=3=3>BHXK6;2:5KOQ@?5;16H75:DBHVC53ON87KJL4:DGG@56G>2:K16>O402CEEY^P01:8MKOSXV::46GAIUR\47><8:KMMQVX8=20ECG[P^26<>OIA]ZT<;64IOKWTZ6012CEEY][AUG4?LHN\V:;;6GAIU]352=NF@^T;7:KMMQY7=>1BBDZP0758MKOSW9=<7D@FT^2;3>OIA]U;5:5FNHV\4D11BBDZP1758MKOSW8=<7D@FT^3;3>OIA]U:5:5FNHV\5D1D69JJLRX9L=0ECG[_0D4?LHN\V8;;6GAIU]152=NF@^T>?94IOKW[7503@DBXR<;7:KMMQY5=>1BBDZP2758MKOSW;=<7D@FT^0;3>OIA]U95:5FNHV\6D11BBDZP3758MKOSW:=<7D@FT^1;3>OIA]U85:5FNHV\7D1L8;HLJPZ5D?2CEEYQ6B@6:NLEACC?2FDKDMNL59OQQ733E__>95CUU17?ISS0168J466<2D:H68=>0B<>:4:L24320968J46>;2D:=95A1027?K769=1E=<<;;O3271=I98>?7C?>559M54033G;:;95A10:7?K761:1E=?:4N0030>H6:8>0B<<=4:L26622468J441<2D:>::4N00;7>H6;=1E=>?<;O377>H6=:1E=;:4N0477>H6?:1E=5=4N0;1?K443G8;?6@=129M675H51;1E?>5A3108J0480B4=4N830?K?5;2D2?>5A9518J<343G3=?6@6729M==56^Q2h1YILJPFHPPPf=UMHNT[DJ[H^C`?WCFLV]BHYFPB09P56=TADUHCABFSHMM[FNBKB<0_B[]CD58WWPFDVK<7^\YAM]A0>UTZH>0_^\M4:VZT@553\:$kh!rg-dg}(ddbr$Aua}_sf\tkruWniTtb|?012\V`urd};8>6[?/fpe*w`(ojr%oaew/LzlvZtcWyd~Ril_ymq4566W[oxyaz>339V4*aun'xm#jmw.bnh|*Kg{UyhR~ats]dgZ~hz9:;>R\jstnw564<]9%l~k }f.e`|+ekcq%Ftb|Pre]sjqtXojUsc>?02]Qavsk|8997X> gsd-vc)`kq$h`fv Mymq[wbXxg~ySjmPxnp3452XZly~`y?<2:W3+bta&{l$knv!cmi{+H~hzVxoS}`{r^e`[}iu89:>S_k|umv277=R8&myj#|i/fa{*fjlp&GscQ}d^rmpwY`kVrd~=>?6^Pfwpjs9:80Y=!hrg,qb*adp'iggu!Bxnp\vaYwf}xTknQwos2342YUmzgx<==;T2,cw`)zo%lou lljz,I}iuW~xT|cz}_fa\|jt789:T^h}zlu306>S7'nxm"h gbz-gim'Drd~Ry}_qlwvZadWqey<=>>_Sgpqir6;;1^<"i}f/pe+be&jf`t"Cwos]tvZvi|{UloRv`r1236ZTb{|f=><4U1-dvc(un&mht#mcky-N|jtX{U{by|Pgb]{kw678:UYi~{ct011?P6(o{l%~k!hcy,`hn~(EqeySz|Ppovq[beXpfx;<=:PRdqvhq74:2_;#j|i.sd,cf~)keas#@v`r^uq[uhszVmhSua}0126[Wct}e~:??5Z0.eqb+ta'nis"nbdx.O{kwYpzVzexQhc^zlv567>VXnxb{1208Q5)`zo$yj"ilx/aoo})JpfxT{Qnup\cfYg{:;<:Q]erwop4553\:$kh!rg-dg}(ddbr$Aua}_vp\tkruWniTtb|?01:\V`urd};9=6[?/fpe*w`(ojr%oaew/sf\tkruWkce0=0=1:W3+bta&{l$knv!cmi{+wbXxg~ySoga<0<15>S7'nxm"h gbz-gim'{nT|cz}_ckm878592_;#j|i.sd,cf~)keas#jPpovq[goi4:49=6[?/fpe*w`(ojr%oaew/sf\tkruWkce090=1:W3+bta&{l$knv!cmi{+wbXxg~ySoga<4<15>S7'nxm"h gbz-gim'{nT|cz}_ckm838592_;#j|i.sd,cf~)keas#jPpovq[goi4>49=6[?/fpe*w`(ojr%oaew/sf\tkruWkce050=0:W3+bta&{l$knv!cmi{+wbXxg~ySoga_103?P6(o{l%~k!hcy,`hn~(zmU{by|Pbhl\576<]9%l~k }f.e`|+ekcq%yhR~ats]amkY5:91^<"i}f/pe+be&jf`t"|k_qlwvZdnfV99<6[?/fpe*w`(ojr%oaew/sf\tkruWkceS9 gsd-vc)`kq$h`fv re]sjqtXj`dTtb|?01213>S7'nxm"h gbz-gim'{nT|cz}_ckm[}iu89:;=?84U1-dvc(un&mht#mcky-q`Zvi|{UiecQwos2344403\:$kh!rg-dg}(ddbr$~iQnup\flhXpfx;<=?>279V4*aun'xm#jmw.bnh|*tcWyd~Rlfn^zlv567:;=0Y=!hrg,qb*adp'iggu!}d^rmpwYeagUsc>?03312>S7'nxm"h gbz-gim'{nT|cz}_ckm[}iu89:8>:5Z0.eqb+ta'nis"nbdx.pg[uhszVhbbRv`r12377413\:$kh!rg-dg}(ddbr$~iQnup\flhXpfx;<=:=7:W3+bta&{l$knv!cmi{+wbXxg~ySoga_ymq45639;<0Y=!hrg,qb*adp'iggu!}d^rmpwYeagUsc>?0404?P6(o{l%~k!hcy,`hn~(zmU{by|Pbhl\|jt789?:>;5Z0.eqb+ta'nis"nbdx.pg[uhszVhbbRv`r12327><]9%l~k }f.e`|+ekcq%yhR~ats]amkYg{:;<;?>269V4*aun'xm#jmw.bnh|*tcWyd~Rlfn^zlv567>;8i7X> gsd-vc)`kq$h`fv re]sjqtXj`dTtb|?014\fab7:?1^<"i}f/pe+be&jf`t"|k_qlwvZdnfVrd~=>?7358Q5)`zo$yj"ilx/aoo})ulVzexQmio]{kw678>;9<6[?/fpe*w`(ojr%oaew/sf\tkruWni7<3>328Q5)`zo$yj"ilx/aoo})ulVzexQhc=0=65=R8&myj#|i/fa{*fjlp&xoS}`{r^e`868582_;#j|i.sd,cf~)keas#jPpovq[be;<78;7X> gsd-vc)`kq$h`fv re]sjqtXoj6>2?>4U1-dvc(un&mht#mcky-q`Zvi|{Ulo181219V4*aun'xm#jmw.bnh|*tcWyd~Ril<6<14>S7'nxm"h gbz-gim'{nT|cz}_fa?<;7a3\:$kh!rg-dg}(ddbr$~iQnup\cfY79o1^<"i}f/pe+be&jf`t"|k_qlwvZadW8;m7X> gsd-vc)`kq$h`fv re]sjqtXojU9=k5Z0.eqb+ta'nis"nbdx.pg[uhszVmhS>?i;T2,cw`)zo%lou lljz,vaYwf}xTknQ;1g9V4*aun'xm#jmw.bnh|*tcWyd~Ril_43e?P6(o{l%~k!hcy,`hn~(zmU{by|Pgb]55c=R8&myj#|i/fa{*fjlp&xoS}`{r^e`[27a3\:$kh!rg-dg}(ddbr$~iQnup\cfY?:?1^<"i}f/pe+be&jf`t"|k_qlwvZadWhyyij2?>348Q5)`zo$yj"ilx/aoo})ulVzexQhc^cpv`a;978=7X> gsd-vc)`kq$h`fv re]sjqtXojUjkh<3<12>S7'nxm"h gbz-gim'{nT|cz}_fa\evtbo595>;5Z0.eqb+ta'nis"nbdx.pg[uhszVmhSl}}ef>7:70<]9%l~k }f.e`|+ekcq%yhR~ats]dgZgtzlm793<9;T2,cw`)zo%lou lljz,vaYwf}xTknQnssgd8385>2_;#j|i.sd,cf~)keas#jPpovq[beXizxnk191279V4*aun'xm#jmw.bnh|*tcWyd~Ril_`qqab:?6;?0Y=!hrg,qb*adp'iggu!}d^rmpwY`kVkx~hiP0378Q5)`zo$yj"ilx/aoo})ulVzexQhc^cpv`aX9;?0Y=!hrg,qb*adp'iggu!}d^rmpwY`kVkx~hiP2378Q5)`zo$yj"ilx/aoo})ulVzexQhc^cpv`aX;;?0Y=!hrg,qb*adp'iggu!}d^rmpwY`kVkx~hiP4378Q5)`zo$yj"ilx/aoo})ulVzexQhc^cpv`aX=;?0Y=!hrg,qb*adp'iggu!}d^rmpwY`kVkx~hiP6378Q5)`zo$yj"ilx/aoo})ulVzexQhc^cpv`aX?;?0Y=!hrg,qb*adp'iggu!}d^rmpwY`kVkx~hiP83;8Q5)`zo$yj"ilx/aoo})ulVzexQhc^cpv`aXl86;2?74U1-dvc(un&mht#mcky-q`Zvi|{UloRo|rde\`4:66;30Y=!hrg,qb*adp'iggu!}d^rmpwY`kVkx~hiPd0>1:7?<]9%l~k }f.e`|+ekcq%yhR~ats]dgZgtzlmTh<2<>3;8Q5)`zo$yj"ilx/aoo})ulVzexQhc^cpv`aXl86?2?74U1-dvc(un&mht#mcky-q`Zvi|{UloRo|rde\`4:26;30Y=!hrg,qb*adp'iggu!}d^rmpwY`kVkx~hiPd0>5:7?<]9%l~k }f.e`|+ekcq%yhR~ats]dgZgtzlmTh<28>3;8Q5)`zo$yj"ilx/aoo})ulVzexQhc^cpv`aXl8632?64U1-dvc(un&mht#mcky-q`Zvi|{UloRo|rde\`4Y7:11^<"i}f/pe+be&jf`t"|k_qlwvZadWhyyijQk1^31<>S7'nxm"h gbz-gim'{nT|cz}_fa\evtboVn:S?<7;T2,cw`)zo%lou lljz,vaYwf}xTknQnssgd[a7X;;20Y=!hrg,qb*adp'iggu!}d^rmpwY`kVkx~hiPd0]76==R8&myj#|i/fa{*fjlp&xoS}`{r^e`[duumnUo=R;=8:W3+bta&{l$knv!cmi{+wbXxg~ySjmParpfcZb6W?837X> gsd-vc)`kq$h`fv re]sjqtXojUjkh_e3\37><]9%l~k }f.e`|+ekcq%yhR~ats]dgZgtzlmTh>249V4*aun'xm#jmw.bnh|*tcWyd~Ril_ymq4565:<1^<"i}f/pe+be&jf`t"|k_qlwvZadWqey<=><249V4*aun'xm#jmw.bnh|*tcWyd~Ril_ymq4563:<1^<"i}f/pe+be&jf`t"|k_qlwvZadWqey<=>:249V4*aun'xm#jmw.bnh|*tcWyd~Ril_ymq4561:<1^<"i}f/pe+be&jf`t"|k_qlwvZadWqey<=>8209V4*aun'xm#jmw.bnh|*quWyd~Rlfn=3=64=R8&myj#|i/fa{*fjlp&}yS}`{r^`jj949:81^<"i}f/pe+be&jf`t"y}_qlwvZdnf595><5Z0.eqb+ta'nis"nbdx.uq[uhszVhbb1:1209V4*aun'xm#jmw.bnh|*quWyd~Rlfn=7=64=R8&myj#|i/fa{*fjlp&}yS}`{r^`jj909:81^<"i}f/pe+be&jf`t"y}_qlwvZdnf5=5><5Z0.eqb+ta'nis"nbdx.uq[uhszVhbb161209V4*aun'xm#jmw.bnh|*quWyd~Rlfn=;=65=R8&myj#|i/fa{*fjlp&}yS}`{r^`jjZ7582_;#j|i.sd,cf~)keas#z|Ppovq[goiW;8;7X> gsd-vc)`kq$h`fv ws]sjqtXj`dT??>4U1-dvc(un&mht#mcky-tvZvi|{UiecQ;219V4*aun'xm#jmw.bnh|*quWyd~Rlfn^714>S7'nxm"h gbz-gim'~xT|cz}_ckm[3473\:$kh!rg-dg}(ddbr${Qnup\flhX?;:0Y=!hrg,qb*adp'iggu!xr^rmpwYeagU3>=5Z0.eqb+ta'nis"nbdx.uq[uhszVhbbR7=6:W3+bta&{l$knv!cmi{+rtXxg~ySoga_ymq4567:>1^<"i}f/pe+be&jf`t"y}_qlwvZdnfVrd~=>?0005?P6(o{l%~k!hcy,`hn~({U{by|Pbhl\|jt789;9;6[?/fpe*w`(ojr%oaew/vp\tkruWkceSua}0122570<]9%l~k }f.e`|+ekcq%|~R~ats]amkYg{:;?3358Q5)`zo$yj"ilx/aoo})pzVzexQmio]{kw678:89:6[?/fpe*w`(ojr%oaew/vp\tkruWkceSua}012762=R8&myj#|i/fa{*fjlp&}yS}`{r^`jjZ~hz9:;8<<9;T2,cw`)zo%lou lljz,swYwf}xTnd`Pxnp34535?2_;#j|i.sd,cf~)keas#z|Ppovq[goiWqey<=>:1348Q5)`zo$yj"ilx/aoo})pzVzexQmio]{kw678?837X> gsd-vc)`kq$h`fv ws]sjqtXj`dTtb|?0142571<]9%l~k }f.e`|+ekcq%|~R~ats]amkYg{:;<;<=b:W3+bta&{l$knv!cmi{+rtXxg~ySoga_ymq4561Wkno219V4*aun'xm#jmw.bnh|*quWyd~Ril<1<14>S7'nxm"h gbz-gim'~xT|cz}_fa?5;473\:$kh!rg-dg}(ddbr${Qnup\cf:56;:0Y=!hrg,qb*adp'iggu!xr^rmpwY`k595>=5Z0.eqb+ta'nis"nbdx.uq[uhszVmh090=0:W3+bta&{l$knv!cmi{+rtXxg~ySjm35?03?P6(o{l%~k!hcy,`hn~({U{by|Pgb>5:76<]9%l~k }f.e`|+ekcq%|~R~ats]dg919:91^<"i}f/pe+be&jf`t"y}_qlwvZad4149<6[?/fpe*w`(ojr%oaew/vp\tkruWni753?i;T2,cw`)zo%lou lljz,swYwf}xTknQ?1g9V4*aun'xm#jmw.bnh|*quWyd~Ril_03e?P6(o{l%~k!hcy,`hn~({U{by|Pgb]15c=R8&myj#|i/fa{*fjlp&}yS}`{r^e`[67a3\:$kh!rg-dg}(ddbr${Qnup\cfY39o1^<"i}f/pe+be&jf`t"y}_qlwvZadW<;m7X> gsd-vc)`kq$h`fv ws]sjqtXojU==k5Z0.eqb+ta'nis"nbdx.uq[uhszVmhS:?i;T2,cw`)zo%lou lljz,swYwf}xTknQ71g9V4*aun'xm#jmw.bnh|*quWyd~Ril_805?P6(o{l%~k!hcy,`hn~({U{by|Pgb]bwwc`4949:6[?/fpe*w`(ojr%oaew/vp\tkruWniTm~|jg=3=63=R8&myj#|i/fa{*fjlp&}yS}`{r^e`[duumn692?84U1-dvc(un&mht#mcky-tvZvi|{UloRo|rde?7;413\:$kh!rg-dg}(ddbr${Qnup\cfYf{{ol090=6:W3+bta&{l$knv!cmi{+rtXxg~ySjmParpfc939:?1^<"i}f/pe+be&jf`t"y}_qlwvZadWhyyij29>348Q5)`zo$yj"ilx/aoo})pzVzexQhc^cpv`a;?78=7X> gsd-vc)`kq$h`fv ws]sjqtXojUjkh<9<12>S7'nxm"h gbz-gim'~xT|cz}_fa\evtbo535>85Z0.eqb+ta'nis"nbdx.uq[uhszVmhSl}}ef]360=R8&myj#|i/fa{*fjlp&}yS}`{r^e`[duumnU:>85Z0.eqb+ta'nis"nbdx.uq[uhszVmhSl}}ef]160=R8&myj#|i/fa{*fjlp&}yS}`{r^e`[duumnU8>85Z0.eqb+ta'nis"nbdx.uq[uhszVmhSl}}ef]760=R8&myj#|i/fa{*fjlp&}yS}`{r^e`[duumnU>>85Z0.eqb+ta'nis"nbdx.uq[uhszVmhSl}}ef]560=R8&myj#|i/fa{*fjlp&}yS}`{r^e`[duumnU<>85Z0.eqb+ta'nis"nbdx.uq[uhszVmhSl}}ef];60=R8&myj#|i/fa{*fjlp&}yS}`{r^e`[duumnU2>45Z0.eqb+ta'nis"nbdx.uq[uhszVmhSl}}ef]g5979:01^<"i}f/pe+be&jf`t"y}_qlwvZadWhyyijQk1=0=6<=R8&myj#|i/fa{*fjlp&}yS}`{r^e`[duumnUo=1=1289V4*aun'xm#jmw.bnh|*quWyd~Ril_`qqabYc95>5>45Z0.eqb+ta'nis"nbdx.uq[uhszVmhSl}}ef]g5939:01^<"i}f/pe+be&jf`t"y}_qlwvZadWhyyijQk1=4=6<=R8&myj#|i/fa{*fjlp&}yS}`{r^e`[duumnUo=191289V4*aun'xm#jmw.bnh|*quWyd~Ril_`qqabYc9525>45Z0.eqb+ta'nis"nbdx.uq[uhszVmhSl}}ef]g59?9:11^<"i}f/pe+be&jf`t"y}_qlwvZadWhyyijQk1^31<>S7'nxm"h gbz-gim'~xT|cz}_fa\evtboVn:S?<7;T2,cw`)zo%lou lljz,swYwf}xTknQnssgd[a7X;;20Y=!hrg,qb*adp'iggu!xr^rmpwY`kVkx~hiPd0]76==R8&myj#|i/fa{*fjlp&}yS}`{r^e`[duumnUo=R;=8:W3+bta&{l$knv!cmi{+rtXxg~ySjmParpfcZb6W?837X> gsd-vc)`kq$h`fv ws]sjqtXojUjkh_e3\37><]9%l~k }f.e`|+ekcq%|~R~ats]dgZgtzlmThS7'nxm"h gbz-gim'~xT|cz}_fa\|jt789;996[?/fpe*w`(ojr%oaew/vp\tkruWniTtb|?01011>S7'nxm"h gbz-gim'~xT|cz}_fa\|jt7899996[?/fpe*w`(ojr%oaew/vp\tkruWniTtb|?01611>S7'nxm"h gbz-gim'~xT|cz}_fa\|jt789?996[?/fpe*w`(ojr%oaew/vp\tkruWniTtb|?01411>S7'nxm"h gbz-gim'~xT|cz}_fa\|jt789=996[?/fpe*w`(ojr%oaew/vp\tkruWniTtb|?01:04>S7'nxm"h gm2-va)`z8$yjzh{/Lov|ZTFEVXOSH@PFVDW644a3\:$kh!rg-dh5(ul&my=#|iwgv,IhsW[KFS_KHOTV\AK76:m1^<"i}f/pe+bj7&{n$k?!rguep*erz{Um{kzPsucwa969:m1^<"i}f/pe+bj7&{n$k?!rguep*erz{Um{kzPsucwa979:j1^<"i}f/pe+bj7&{n$k?!rguep*erz{Um{kzPsucwaZ65k2_;#j|i.sd,ci6)zm%l~< }fvdw+fsuzVl|jyQ|t`vf[4523\:$kh!rg-dh5(ul&my=#|iwgv,gptuWo}mxR}{aug\ip~789;7<3=9;T2,cw`)zo%l`= }d.eq5+tao~$ox|}_guepZusi}oTaxv?013?4;74=2_;#j|i.sd,ci6)zm%l~< }fvdw+fsuzVl|jyQ|t`vf[hs89::0<0<6:W3+bta&{l$ka>!re-dv4(un~l#n{}r^dtbqYt|h~nS`{w01228486:11^<"i}f/pe+bj7&{n$k?!rguep*cjx}sTjzh{_g`13>S7'nxm"h gm2-va)`z8$yjzh{/dosp|Yao~Te?h4U1-dvc(un&mg<#|k/fp2*w`pn}%na}zv_guepZoXe|r;<=><0:W3+bta&{l$ka>!re-dv4(un~l#hctx]escrXaVg~t=>?000:?P6(o{l%~k!hl1,q`*auiz$yy} c1-`ewt~fl~7<3<6;T2,cw`)zo%l`= }d.eqev(u{}y$o=!laspzj`r;97827X> gsd-vc)`d9$yh"i}ar,qwqu(k9%hm|vndv?6;4>3\:$kh!rg-dh5(ul&mym~ }suq,g5)di{xrbhz33?0e?P6(o{l%~k!hl1,q`*auiz$yy} c1-dip~)odQ;Q#ib1/o26c=R8&myj#|i/fn3*wb(o{kx"}{s.a3+bkrp'mfW gsd-vc)`d9$yh"i}ar,qwqu(k9%laxv!glY7Y+aj{'gx>>5Z0.eqb+ta'nf;"j gscp*wus{&i;#{?30?00?P6(o{l%~k!hl1,q`*auiz$yy} c1-u5979::1^<"i}f/pe+bj7&{n$ko|.sqww*e7';7>3<<;T2,cw`)zo%l`= }d.eqev(u{}y$o=!y1=1=66=R8&myj#|i/fn3*wb(o{kx"}{s.a3+s7;<78i7X> gsd-vc)`d9$yh"i}ar,qwqu(k9%}=R>Paof34566:k1^<"i}f/pe+bj7&{n$ko|.sqww*e7';T=Road123444e3\:$kh!rg-dh5(ul&mym~ }suq,g5)q9V8Tmcj?01226g=R8&myj#|i/fn3*wb(o{kx"}{s.a3+s7X;Vkeh=>?000a?P6(o{l%~k!hl1,q`*auiz$yy} c1-u5Z2Xff~;<=>>289V4*aun'xm#jb?.sf,cwgt&{y"m>/bcqv|hb|5:5>45Z0.eqb+ta'nf;"j gscp*wus{&i:#no}rxlfp979:01^<"i}f/pe+bj7&{n$ko|.sqww*e6'jky~t`jt=0=6<=R8&myj#|i/fn3*wb(o{kx"}{s.a2+fguzpdnx1=12g9V4*aun'xm#jb?.sf,cwgt&{y"m>/fov|+ajS9W%k`?!m00e?P6(o{l%~k!hl1,q`*auiz$yy} c0-dip~)odQ:Q#ibs/op6c=R8&myj#|i/fn3*wb(o{kx"}{s.a2+bkrp'mfW?S!glq-iv4a3\:$kh!rg-dh5(ul&mym~ }suq,g4)`e|r%k`U<]/enw+kt:o1^<"i}f/pe+bj7&{n$ko|.sqww*e6'ng~t#ib[5_-chu)ez887X> gsd-vc)`d9$yh"i}ar,qwqu(k8%}=1>1229V4*aun'xm#jb?.sf,cwgt&{y"m>/w3?5;443\:$kh!rg-dh5(ul&mym~ }suq,g4)q9585>>5Z0.eqb+ta'nf;"j gscp*wus{&i:#{?33?00?P6(o{l%~k!hl1,q`*auiz$yy} c0-u5929:k1^<"i}f/pe+bj7&{n$ko|.sqww*e6';T?000a?P6(o{l%~k!hl1,q`*auiz$yy} c0-u5Z5Xign;<=>>2c9V4*aun'xm#jb?.sf,cwgt&{y"m>/w3\0Zhh|9:;<<S7'nxm"h gm2-va)`zhy%~~z|/scn[`kw|pUmnRgPos234575;2_;#j|i.sd,ci6)zm%y|cz}/LalqkrXkfex?:4U1-dvc(un&mg<#|k/srmpw)JkfexRm`uov261=R8&myj#|i/fn3*wb(zyd~"Clotlw[firf}8986[?/fpe*w`(oe:%~i!}povq+Heh}g~Tob{at207?P6(o{l%~k!hl1,q`*twf}x$Anaznu]`kphs<;>0Y=!hrg,qb*ak8'xo#~ats-Ngjsi|Vidycz:259V4*aun'xm#jb?.sf,vuhsz&Ghcx`{_bmvjq05<2_;#j|i.sd,ci6)zm%y|cz}/LalqkrXkfex:<;;T2,cw`)zo%l`= }d.psjqt(Eje~byQlotlw<7?<]9%l~k }f.eo4+tc'{zex!BcnwmpZeh}g~Tot2?>3a8Q5)`zo$yj"ic0/pg+wvi|{%Fob{at^alqkrXkp6;2R|{289V4*aun'xm#jb?.sf,vuhsz&Ghcx`{_bmvjqYdq5;5>n5Z0.eqb+ta'nf;"j rqlwv*Kdg|dSnaznu]`}979W{~956[?/fpe*w`(oe:%~i!}povq+Heh}g~Tob{at^az8785k2_;#j|i.sd,ci6)zm%y|cz}/LalqkrXkfexRmv<3<\vq4>3\:$kh!rg-dh5(ul&x{by| MbmvjqYdg|dSnw33?0`?P6(o{l%~k!hl1,q`*twf}x$Anaznu]`kphsWjs7?3Q}t3;8Q5)`zo$yj"ic0/pg+wvi|{%Fob{at^alqkrXkp6?2?m4U1-dvc(un&mg<#|k/srmpw)JkfexRm`uov\g|:36Vx>45Z0.eqb+ta'nf;"j rqlwv*Kdg|dSnaznu]`}939:j1^<"i}f/pe+bj7&{n$~}`{r.O`kphsWje~byQly=7=[wr512_;#j|i.sd,ci6)zm%y|cz}/LalqkrXkfexRmv<7<1g>S7'nxm"h gm2-va)uxg~y#@m`uov\gjsi|Vir0;0Pru0:?P6(o{l%~k!hl1,q`*twf}x$Anaznu]`kphsWjs7;3 gsd-vc)`d9$yh"|nup,Ifirf}Uhcx`{_ymq8485i2_;#j|i.sd,ci6)zm%y|cz}/LalqkrXkfexRv`r=0=6d=R8&myj#|i/fn3*wb(zyd~"Clotlw[firf}Usc2<>3c8Q5)`zo$yj"ic0/pg+wvi|{%Fob{at^alqkrXpfx7834:7g<]9%l~k }f.eo4+tc'{zex!BcnwmpZeh}g~Ttb|38?0g?P6(o{l%~k!hl1,q`*twf}x$Anaznu]`kphsWqey050Pru3e?P6(o{l%~k!hl1,q`*twf}x$ob{at=2=5c=R8&myj#|i/fn3*wb(zyd~"m`uov?5;7a3\:$kh!rg-dh5(ul&x{by| cnwmp9499o1^<"i}f/pe+bj7&{n$~}`{r.alqkr;;7;m7X> gsd-vc)`d9$yh"|nup,gjsi|5>5=k5Z0.eqb+ta'nf;"j rqlwv*eh}g~793?i;T2,cw`)zo%l`= }d.psjqt(kfex1811g9V4*aun'xm#jb?.sf,vuhsz&idycz37?3e?P6(o{l%~k!hl1,q`*twf}x$ob{at=:=5`=R8&myj#|i/fn3*wb(zyd~"m`uov\44c<]9%l~k }f.eo4+tc'{zex!lotlw[47b3\:$kh!rg-dh5(ul&x{by| cnwmpZ46m2_;#j|i.sd,ci6)zm%y|cz}/bmvjqY49l1^<"i}f/pe+bj7&{n$~}`{r.alqkrX<8o0Y=!hrg,qb*ak8'xo#~ats-`kphsW<;n7X> gsd-vc)`d9$yh"|nup,gjsi|V<:i6[?/fpe*w`(oe:%~i!}povq+firf}U<=h5Z0.eqb+ta'nf;"j rqlwv*eh}g~T4?<4U1-dvc(un&mg<#|k/srmpw)dg|dSi?30?01?P6(o{l%~k!hl1,q`*twf}x$ob{at^f28485:2_;#j|i.sd,ci6)zm%y|cz}/bmvjqYc9585>?5Z0.eqb+ta'nf;"j rqlwv*eh}g~Th<2<>308Q5)`zo$yj"ic0/pg+wvi|{%hcx`{_e3?0;453\:$kh!rg-dh5(ul&x{by| cnwmpZb64<49>6[?/fpe*w`(oe:%~i!}povq+firf}Uo=181239V4*aun'xm#jb?.sf,vuhsz&idyczPd0>4:74<]9%l~k }f.eo4+tc'{zex!lotlw[a7;078:7X> gsd-vc)`d9$yh"|nup,gjsi|Vn:S=<>;T2,cw`)zo%l`= }d.psjqt(kfexRj>_002?P6(o{l%~k!hl1,q`*twf}x$ob{at^f2[7463\:$kh!rg-dh5(ul&x{by| cnwmpZb6W:8:7X> gsd-vc)`d9$yh"|nup,gjsi|Vn:S9<>;T2,cw`)zo%l`= }d.psjqt(kfexRj>_402?P6(o{l%~k!hl1,q`*twf}x$ob{at^f2[3463\:$kh!rg-dh5(ul&x{by| cnwmpZb6W>8:7X> gsd-vc)`d9$yh"|nup,gjsi|Vn:S5<;;T2,cw`)zo%l`= }d.psjqt(kfexR``t12356`<]9%l~k }f.eo4+qu'n}j#if/uqtc)JimnThdhi_qlwvZvflVkoh=>?0^az8584n2_;#j|i.sd,ci6){%l{l}!gqd-swva'DkohRjffg]sjqtXxhnTmij?012\g|:66:l0Y=!hrg,qb*ak8'}y#jyns/esb+quxo%FmijPdhde[uhszVzjhRokd1234Ze~4;48j6[?/fpe*w`(oe:%{!hw`q-cu`){zm#@okd^fjbcYwf}xT|ljPaef3456Xkp682>h4U1-dvc(un&mg<#y}/fubw+awn'}y|k!Baef\`l`aWyd~R~nd^cg`5678Vir090!ws-dsdu)oyl%{~i/Lcg`ZbnnoU{by|Pp`f\eab789:Tot2:>2d8Q5)`zo$yj"ic0/uq+bqf{'m{j#y}pg-NeabXl`lmS}`{r^rb`Zgcl9:;S7'nxm"h gm2-sw)`hy%k}h!wsre+HgclVnbjkQnup\tdbXimn;<=>Pcx>4:6`<]9%l~k }f.eo4+qu'n}j#if/uqtc)JimnThdhi_qlwvZvflVkoh=>?0^az8=84n2_;#j|i.sd,ci6){%l{l}!gqd-swva'DkohRjffg]sjqtXxhnTmij?012\g|:>6=;0Y=!hrg,qb*ak8'}y#jyns/esb+quxo%FmijPdhde[uhszVzjhRokd1234Zjr|5;;29>4U1-dvc(un&mg<#y}/fubw+awn'}y|k!Baef\`l`aWyd~R~nd^cg`5678Vf~x1?1479V4*aun'xm#jb?.vp,crgt&nzm"z|f.Ob`aYcaolT|cz}_qcg[dbc89:;Sa{{<0<\MKPX8=:0Y=!hrg,qb*ak8'}y#jyns/esb+quxo%FmijPdhde[uhszVzjhRokd1234Zjr|5858=5Z0.eqb+ta'nf;"z| gvcp*bva&~x{j"Cnde]gmc`Xxg~yS}ok_`fg4567We0>0;0:W3+bta&{l$ka>!ws-dsdu)oyl%{~i/Lcg`ZbnnoU{by|Pp`f\eab789:T`xz34?63?P6(o{l%~k!hl1,tv*apiz$l|k xrqd,IdbcWmcmjR~ats]seaYflm:;<=Qcuu>6:16<]9%l~k }f.eo4+qu'n}j#if/uqtc)JimnThdhi_qlwvZvflVkoh=>?0^nvp909<91^<"i}f/pe+bj7&~x$kzo|.fre*rtwn&GjhiQkigd\tkruWykoSljk0123[iss4>4?<6[?/fpe*w`(oe:%{!hw`q-cu`){zm#@okd^fjbcYwf}xT|ljPaef3456Xd|~743:?;T2,cw`)zo%l`= xr.etev(`xo$|~}h M`fg[aoanVzexQae]b`a6789Ugyy26>538Q5)`zo$yj"ic0/uq+bqf{'m{j#y}pg-NeabXl`lmS}`{r^rb`Zgcl9:;?0^zlv979<91^<"i}f/pe+bj7&~x$kzo|.fre*rtwn&GjhiQkigd\tkruWykoSljk0123[}iu4;4?<6[?/fpe*w`(oe:%{!hw`q-cu`){zm#@okd^fjbcYwf}xT|ljPaef3456Xpfx7?3:?;T2,cw`)zo%l`= xr.etev(`xo$|~}h M`fg[aoanVzexQae]b`a6789Usc2;>528Q5)`zo$yj"ic0/uq+bqf{'m{j#y}pg-NeabXl`lmS}`{r^rb`Zgcl9:;?_ymq838382_;#j|i.sd,ci6){%l{l}!gqd-swva'DkohRjffg]sjqtXxhnTmij?012\|jt;?7>;7X> gsd-vc)`d9$|~"ixar,dtc(pzyl$Aljk_ekebZvi|{U{miQnde2345Yg{6329>4U1-dvc(un&mg<#y}/fubw+awn'}y|k!Baef\`l`aWyd~R~nd^cg`5678Vrd~171319V4*aun'xm#jb?.vp,crgt&nzm"z|f.fjbcYwf}xT|lj311<1b>S7'nxm"h gm2-sw)`hy%k}h!wsre+aoanVzexQae>2:7`<]9%l~k }f.eo4+qu'n}j#if/uqtc)caolT|cz}_qcg8785n2_;#j|i.sd,ci6){%l{l}!gqd-swva'mcmjR~ats]sea:46;l0Y=!hrg,qb*ak8'}y#jyns/esb+quxo%oekhPpovq[ugc4=49j6[?/fpe*w`(oe:%{!hw`q-cu`){zm#igif^rmpwYwim6>2?h4U1-dvc(un&mg<#y}/fubw+awn'}y|k!kigd\tkruWyko0;0=f:W3+bta&{l$ka>!ws-dsdu)oyl%{~i/ekebZvi|{U{mi28>3d8Q5)`zo$yj"ic0/uq+bqf{'m{j#y}pg-gmc`Xxg~yS}ok<9<1b>S7'nxm"h gm2-sw)`hy%k}h!wsre+aoanVzexQae>::7c<]9%l~k }f.eo4+qu'n}j#if/uqtc)caolT|cz}_qcg[44a3\:$kh!rg-dh5(pz&m|m~ hpg,tvu`(l`lmS}`{r^rb`Z77:l1^<"i}f/pe+bj7&~x$kzo|.fre*rtwn&nbjkQnup\tdbX:;o0Y=!hrg,qb*ak8'}y#jyns/esb+quxo%oekhPpovq[ugcW:8n7X> gsd-vc)`d9$|~"ixar,dtc(pzyl$hdhi_qlwvZvflV>9i6[?/fpe*w`(oe:%{!hw`q-cu`){zm#igif^rmpwYwimU>>h5Z0.eqb+ta'nf;"z| gvcp*bva&~x{j"jffg]sjqtXxhnT:?k4U1-dvc(un&mg<#y}/fubw+awn'}y|k!kigd\tkruWykoS:!ws-dsdu)oyl%{~i/ekebZvi|{U{miQ6399V4*aun'xm#jb?.vp,crgt&nzm"z|f.fjbcYwf}xT|ljPaef3456;9948;6[?/fpe*w`(oe:%{!hw`q-cu`){zm#igif^rmpwYwimUjhi>?01>2:61<]9%l~k }f.eo4+qu'n}j#if/uqtc)caolT|cz}_qcg[dbc89:;0?0<7:W3+bta&{l$ka>!ws-dsdu)oyl%{~i/ekebZvi|{U{miQnde2345:46:=0Y=!hrg,qb*ak8'}y#jyns/esb+quxo%oekhPpovq[ugcWhno<=>?<5<03>S7'nxm"h gm2-sw)`hy%k}h!wsre+aoanVzexQae]b`a67896>2>94U1-dvc(un&mg<#y}/fubw+awn'}y|k!kigd\tkruWykoSljk01238384?2_;#j|i.sd,ci6){%l{l}!gqd-swva'mcmjR~ats]seaYflm:;<=28>258Q5)`zo$yj"ic0/uq+bqf{'m{j#y}pg-gmc`Xxg~yS}ok_`fg45674148;6[?/fpe*w`(oe:%{!hw`q-cu`){zm#igif^rmpwYwimUjhi>?01>::7g<]9%l~k }f.eo4+qu'n}j#if/uqtc)wzfmTjxbc_h11?P6(o{l%~k!hl1,tv*apiz$l|k xrqd,twi`Wog`RgPmtz34554<2_;#j|i.sd,ci6){%l{l}!gqd-swva'yxdkRhzlm]j[hs89:8=8=;;T2,cw`)zo%l`= xr.etev(`xo$|~}h psmd[cskdVcTaxv?0112<6><]9%l~k }f.eo4+qu'n}j#if/uqtc)wzfmTjxbc_h]nq}678:;3S^Y?339V4*aun'xm#jb?.vp,crgt&nzm"z|f.rqkbYa}efTeR``t12357?<]9%l~k }f.eo4+qu'n}j#y|tr-`5*efz{seiy2?>3;8Q5)`zo$yj"ic0/uq+bqf{'}xx~!l1.abvwim}6:2?74U1-dvc(un&mg<#y}/fubw+qt|z%h="mnrs{maq:56;30Y=!hrg,qb*ak8'}y#jyns/uppv)d9&ij~waeu>0:7`<]9%l~k }f.eo4+qu'n}j#y|tr-`5*aj}q$laV>R.fo2*h75n2_;#j|i.sd,ci6){%l{l}!wrvp+f7(ods"jcT1\,div(j{;l0Y=!hrg,qb*ak8'}y#jyns/uppv)d9&mfyu hmZ0^*bkt&dy9j6[?/fpe*w`(oe:%{!hw`q-svrt'j;$k`{w.foX7X(`ez$f?h4U1-dvc(un&mg<#y}/fubw+qt|z%h="ibuy,di^2Z&ngx"`}=3:W3+bta&{l$ka>!ws-dsdu)z~x#n? v0>3:75<]9%l~k }f.eo4+qu'n}j#y|tr-`5*p64849?6[?/fpe*w`(oe:%{!hw`q-svrt'j;$z<2=>318Q5)`zo$yj"ic0/uq+bqf{'}xx~!l1.t28685;2_;#j|i.sd,ci6){%l{l}!wrvp+f7(~86?2?l4U1-dvc(un&mg<#y}/fubw+qt|z%h="x>_1]bja6789;9n6[?/fpe*w`(oe:%{!hw`q-svrt'j;$z_`lg45679;h0Y=!hrg,qb*ak8'}y#jyns/uppv)d9&|:S?Qnne234575j2_;#j|i.sd,ci6){%l{l}!wrvp+f7(~8U8Sl`k012357d<]9%l~k }f.eo4+qu'n}j#y|tr-`5*p6W=Ujbi>?0131=>S7'nxm"h gm2-sw)`hy%{~z|/b0,gdtuqgo0=0=9:W3+bta&{l$ka>!ws-dsdu)z~x#n< c`pq}kcs484956[?/fpe*w`(oe:%{!hw`q-svrt'j8$ol|}yogw878512_;#j|i.sd,ci6){%l{l}!wrvp+f4(khxyuck{<2<1b>S7'nxm"h gm2-sw)`hy%{~z|/b0,chs&ngP

"x><1<17>S7'nxm"h gm2-sw)`hy%{~z|/b0,r4:66;90Y=!hrg,qb*ak8'}y#jyns/uppv)d:&|:0?0=3:W3+bta&{l$ka>!ws-dsdu)z~x#n< v0>0:75<]9%l~k }f.eo4+qu'n}j#y|tr-`6*p64=49n6[?/fpe*w`(oe:%{!hw`q-svrt'j8$z?0131f>S7'nxm"h gm2-sw)`hy%{~z|/b0,r4Y3Whdo<=>?1328Q5)`zo$yj"ic0/uq+bqf{'}xx~!lolr265=R8&myj#|i/fn3*rt(o~kx"z}{s.aliu4582_;#j|i.sd,ci6){%l{l}!wrvp+fijx:8o7X> gsd-vc)`d9$|~"ixar,twqu(ohl%o>!laspzj`r;878o7X> gsd-vc)`d9$|~"ixar,twqu(ohl%o>!laspzj`r;978o7X> gsd-vc)`d9$|~"ixar,twqu(ohl%o>!laspzj`r;:78o7X> gsd-vc)`d9$|~"ixar,twqu(ohl%o>!laspzj`r;;7987X> gsd-vc)`d9$|~"ixar,twqu(ohl%o>!hmtz-ch]7U'mf=#c>329V4*aun'xm#jb?.vp,crgt&~y"inf/a0+bkrp'mfW5Z0.eqb+ta'nf;"z| gvcp*rus{&mjj#m1^<"i}f/pe+bj7&~x$kzo|.vqww*afn'i8#{?30?04?P6(o{l%~k!hl1,tv*apiz$|y} g`d-g6)q95;5>:5Z0.eqb+ta'nf;"z| gvcp*rus{&mjj#m gsd-vc)`d9$|~"ixar,twqu(ohl%o>!y1^2\ekb789::>k5Z0.eqb+ta'nf;"z| gvcp*rus{&mjj#m>2g9V4*aun'xm#jb?.vp,crgt&~y"inf/a0+s7X;Vkeh=>?000e?P6(o{l%~k!hl1,tv*apiz$|y} g`d-g6)q9V>Tmcj?01226f=R8&myj#|i/fn3*rt(o~kx"z}{s.pbiZgkefySk{cl^k00>S7'nxm"h gm2-sw)`hy%{~z|/scn[djjgz~Tjxbc_h]nq}67899>7X> gsd-vc)`d9$|~"ixar,twqu(zhgTmac`su]eqijXaVg~t=>?001a?P6(o{l%~k!hl1,tv*apiz$|y} r`o\eikh{}UmyabPi^llp56798UBB[Q?299V4*aun'xm#jb?.vp,crgt&~y"|nm^dvhiYajVc996[?/fpe*w`(oe:%{!hw`q-svrt'{kfSk{cl^k1`>S7'nxm"h gm2-sw)`hy%{~z|/scn[cskdVcTaxv?0121a>S7'nxm"h gm2-sw)`hy%{~z|/scn[cskdVcTaxv?01225a=R8&myj#|i/fn3*rt(zhgT{Qjn^k25c=R8&myj#|i/fn3*rt(zhgT{Qjn^k2[4443\:$kh!rg-dh5(pz&}{by| MbmvjqYdg|d>95Z0.eqb+ta'nf;"z| wqlwv*Kdg|dSnaznu310>S7'nxm"h gm2-sw)pxg~y#@m`uov\gjsi|;8?7X> gsd-vc)`d9$|~"ynup,Ifirf}Uhcx`{3368Q5)`zo$yj"ic0/uq+rvi|{%Fob{at^alqkr3:=1^<"i}f/pe+bj7&~x${}`{r.O`kphsWje~by;=4:W3+bta&{l$ka>!ws-ttkru'DidyczPcnwmp3433\:$kh!rg-dh5(pz&}{by| MbmvjqYdg|d;?:4U1-dvc(un&mg<#y}/vrmpw)JkfexRm`uov;61=R8&myj#|i/fn3*rt(yd~"Clotlw[firf}3956[?/fpe*w`(oe:%{!xpovq+Heh}g~Tob{at^az8585k2_;#j|i.sd,ci6){%||cz}/LalqkrXkfexRmv<1<\vq4>3\:$kh!rg-dh5(pz&}{by| MbmvjqYdg|dSnw31?0`?P6(o{l%~k!hl1,tv*qwf}x$Anaznu]`kphsWjs7=3Q}t3;8Q5)`zo$yj"ic0/uq+rvi|{%Fob{at^alqkrXkp692?m4U1-dvc(un&mg<#y}/vrmpw)JkfexRm`uov\g|:56Vx>45Z0.eqb+ta'nf;"z| wqlwv*Kdg|dSnaznu]`}959:j1^<"i}f/pe+bj7&~x${}`{r.O`kphsWje~byQly=1=[wr512_;#j|i.sd,ci6){%||cz}/LalqkrXkfexRmv<5<1g>S7'nxm"h gm2-sw)pxg~y#@m`uov\gjsi|Vir090Pru0:?P6(o{l%~k!hl1,tv*qwf}x$Anaznu]`kphsWjs7935:Zts:01^<"i}f/pe+bj7&~x${}`{r.O`kphsWje~byQly=5=6f=R8&myj#|i/fn3*rt(yd~"Clotlw[firf}Uhu191_sv1=>S7'nxm"h gm2-sw)pxg~y#@m`uov\gjsi|Vir050=c:W3+bta&{l$ka>!ws-ttkru'DidyczPcnwmpZe~414T~y1:7g<]9%l~k }f.eo4+qu'~zex!BcnwmpZeh}g~Ttb|33?0b?P6(o{l%~k!hl1,tv*qwf}x$Anaznu]`kphsWqey090=a:W3+bta&{l$ka>!ws-ttkru'DidyczPcnwmpZ~hz5?5>l5Z0.eqb+ta'nf;"z| wqlwv*Kdg|dSnaznu]{kw:16;k0Y=!hrg,qb*ak8'}y#z~ats-Ngjsi|VidyczPxnp?3;4f3\:$kh!rg-dh5(pz&}{by| MbmvjqYdg|dSua}<9<1e>S7'nxm"h gm2-sw)pxg~y#@m`uov\gjsi|Vrd~1712e9V4*aun'xm#jb?.vp,suhsz&Ghcx`{_bmvjqYg{622R|{1g9V4*aun'xm#jb?.vp,suhsz&idycz30?3e?P6(o{l%~k!hl1,tv*qwf}x$ob{at=3=5c=R8&myj#|i/fn3*rt(yd~"m`uov?6;7a3\:$kh!rg-dh5(pz&}{by| cnwmp9599o1^<"i}f/pe+bj7&~x${}`{r.alqkr;<7;m7X> gsd-vc)`d9$|~"ynup,gjsi|5?5=k5Z0.eqb+ta'nf;"z| wqlwv*eh}g~7:3?i;T2,cw`)zo%l`= xr.usjqt(kfex1911g9V4*aun'xm#jb?.vp,suhsz&idycz38?3e?P6(o{l%~k!hl1,tv*qwf}x$ob{at=;=5`=R8&myj#|i/fn3*rt(yd~"m`uov\44c<]9%l~k }f.eo4+qu'~zex!lotlw[47b3\:$kh!rg-dh5(pz&}{by| cnwmpZ46m2_;#j|i.sd,ci6){%||cz}/bmvjqY49l1^<"i}f/pe+bj7&~x${}`{r.alqkrX<8o0Y=!hrg,qb*ak8'}y#z~ats-`kphsW<;n7X> gsd-vc)`d9$|~"ynup,gjsi|V<:i6[?/fpe*w`(oe:%{!xpovq+firf}U<=h5Z0.eqb+ta'nf;"z| wqlwv*eh}g~T4<1<16>S7'nxm"h gm2-sw)pxg~y#naznu]g5979:;1^<"i}f/pe+bj7&~x${}`{r.alqkrXl8692?<4U1-dvc(un&mg<#y}/vrmpw)dg|dSi?33?01?P6(o{l%~k!hl1,tv*qwf}x$ob{at^f28185:2_;#j|i.sd,ci6){%||cz}/bmvjqYc95?5>?5Z0.eqb+ta'nf;"z| wqlwv*eh}g~Th<29>308Q5)`zo$yj"ic0/uq+rvi|{%hcx`{_e3?3;453\:$kh!rg-dh5(pz&}{by| cnwmpZb64149>6[?/fpe*w`(oe:%{!xpovq+firf}Uo=171209V4*aun'xm#jb?.vp,suhsz&idyczPd0]364=R8&myj#|i/fn3*rt(yd~"m`uov\`4Y6:81^<"i}f/pe+bj7&~x${}`{r.alqkrXl8U9><5Z0.eqb+ta'nf;"z| wqlwv*eh}g~Th<5Z0.eqb+ta'nf;"z| wqlwv*eh}g~Th:;1^<"i}f/pe+bj7&~x${}`{r.alqkrXl;6;2?<4U1-dvc(un&mg<#y}/vrmpw)dg|dSi<31?01?P6(o{l%~k!hl1,tv*qwf}x$ob{at^f18785:2_;#j|i.sd,ci6){%||cz}/bmvjqYc:595>?5Z0.eqb+ta'nf;"z| wqlwv*eh}g~Th?2;>308Q5)`zo$yj"ic0/uq+rvi|{%hcx`{_e0?1;453\:$kh!rg-dh5(pz&}{by| cnwmpZb54?49>6[?/fpe*w`(oe:%{!xpovq+firf}Uo>191239V4*aun'xm#jb?.vp,suhsz&idyczPd3>;:74<]9%l~k }f.eo4+qu'~zex!lotlw[a4;178:7X> gsd-vc)`d9$|~"ynup,gjsi|Vn9S=<>;T2,cw`)zo%l`= xr.usjqt(kfexRj=_002?P6(o{l%~k!hl1,tv*qwf}x$ob{at^f1[7463\:$kh!rg-dh5(pz&}{by| cnwmpZb5W:8:7X> gsd-vc)`d9$|~"ynup,gjsi|Vn9S9<>;T2,cw`)zo%l`= xr.usjqt(kfexRj=_402?P6(o{l%~k!hl1,tv*qwf}x$ob{at^f1[3463\:$kh!rg-dh5(pz&}{by| cnwmpZb5W>8:7X> gsd-vc)`d9$|~"ynup,gjsi|Vn9S5<>;T2,cw`)zo%l`= xr.usjqt(kfexRj=_801?P6(o{l%~k!hl1,tv*qwf}x$ob{at^f08585:2_;#j|i.sd,ci6){%||cz}/bmvjqYc;5;5>?5Z0.eqb+ta'nf;"z| wqlwv*eh}g~Th>2=>308Q5)`zo$yj"ic0/uq+rvi|{%hcx`{_e1?7;453\:$kh!rg-dh5(pz&}{by| cnwmpZb44=49>6[?/fpe*w`(oe:%{!xpovq+firf}Uo?1;1239V4*aun'xm#jb?.vp,suhsz&idyczPd2>5:74<]9%l~k }f.eo4+qu'~zex!lotlw[a5;?7897X> gsd-vc)`d9$|~"ynup,gjsi|Vn8050=2:W3+bta&{l$ka>!ws-ttkru'je~byQk3=;=64=R8&myj#|i/fn3*rt(yd~"m`uov\`6Y7:81^<"i}f/pe+bj7&~x${}`{r.alqkrXl:U:><5Z0.eqb+ta'nf;"z| wqlwv*eh}g~Th>Q=209V4*aun'xm#jb?.vp,suhsz&idyczPd2]064=R8&myj#|i/fn3*rt(yd~"m`uov\`6Y3:81^<"i}f/pe+bj7&~x${}`{r.alqkrXl:U>><5Z0.eqb+ta'nf;"z| wqlwv*eh}g~Th>Q9209V4*aun'xm#jb?.vp,suhsz&idyczPd2]464=R8&myj#|i/fn3*rt(yd~"m`uov\`6Y?:81^<"i}f/pe+bj7&~x${}`{r.alqkrXl:U2>95Z0.eqb+ta'nf;"z| wqlwv*eh}g~Tbbz?01323>S7'nxm"h mdo,`jssW`6;2<64U1-dvc(un&gna"j`uu]j8469911^<"i}f/pe+hcj'me~xRg310<2<>S7'nxm"h mdo,`jssW`6:>3?7;T2,cw`)zo%fi`!kotv\m9746820Y=!hrg,qb*kbe&ndyyQf<06=5==R8&myj#|i/lgn+air|Vc7=80>8:W3+bta&{l$ahc dnww[l:6>7;37X> gsd-vc)jmd%ocxzPi=34:4><]9%l~k }f.ofi*bh}}Ub0<61199V4*aun'xm#`kb/emvpZo;904:;6[?/fpe*w`(elg$hb{{_h>2:4><]9%l~k }f.ofi*bh}}Ub0?>1199V4*aun'xm#`kb/emvpZo;:84:46[?/fpe*w`(elg$hb{{_h>16;7?3\:$kh!rg-nah)cg|~Te1<<>0:8Q5)`zo$yj"cjm.flqqYn4;>5=55Z0.eqb+ta'dof#iazt^k?608602_;#j|i.sd,i`k(lfSd2=6?3;?P6(o{l%~k!bel-gkprXa58<2<64U1-dvc(un&gna"j`uu]j87>9911^<"i}f/pe+hcj'me~xRg328<23>S7'nxm"h mdo,`jssW`692<64U1-dvc(un&gna"j`uu]j8669911^<"i}f/pe+hcj'me~xRg330<2<>S7'nxm"h mdo,`jssW`68>3?7;T2,cw`)zo%fi`!kotv\m9546820Y=!hrg,qb*kbe&ndyyQf<26=5==R8&myj#|i/lgn+air|Vc7?80>7:W3+bta&{l$ahc dnww[l:468=0Y=!hrg,qb*kbe&ndyyQf<5<23>S7'nxm"h mdo,`jssW`6>2<94U1-dvc(un&gna"j`uu]j8386?2_;#j|i.sd,i`k(lfSd28>058Q5)`zo$yj"cjm.flqqYn414:;6[?/fpe*w`(elg$hb{{_h>::40<]9%l~k }f.ofi*bh}}UbS=?9;T2,cw`)zo%fi`!kotv\mZ76?2_;#j|i.sd,i`k(lfSdQ>0058Q5)`zo$yj"cjm.flqqYnW8;:;6[?/fpe*w`(elg$hb{{_h]2641<]9%l~k }f.ofi*bh}}UbS<=>7:W3+bta&{l$ahc dnww[lY6<8=0Y=!hrg,qb*kbe&ndyyQf_0723>S7'nxm"h mdo,`jssW`U::<94U1-dvc(un&gna"j`uu]j[416?2_;#j|i.sd,i`k(lfSdQ>8058Q5)`zo$yj"cjm.flqqYnW83::6[?/fpe*w`(elg$hb{{_h]152=R8&myj#|i/lgn+air|VcT>=?8;T2,cw`)zo%fi`!kotv\mZ469>1^<"i}f/pe+hcj'me~xRgP2334?P6(o{l%~k!bel-gkprXaV88=:5Z0.eqb+ta'dof#iazt^k\61703\:$kh!rg-nah)cg|~TeR<:169V4*aun'xm#`kb/emvpZoX:?;<7X> gsd-vc)jmd%ocxzPi^0452=R8&myj#|i/lgn+air|VcT>5?8;T2,cw`)zo%fi`!kotv\mZ4>9?1^<"i}f/pe+hcj'me~xRgP3058Q5)`zo$yj"cjm.flqqYnW:::;6[?/fpe*w`(elg$hb{{_h]0541<]9%l~k }f.ofi*bh}}UbS><>7:W3+bta&{l$ahc dnww[lY4;8=0Y=!hrg,qb*kbe&ndyyQf_2623>S7'nxm"h mdo,`jssW`U89<84U1-dvc(un&gna"j`uu]j[1713\:$kh!rg-nah)cg|~TeR;>6:W3+bta&{l$ahc dnww[lY19?1^<"i}f/pe+hcj'me~xRgP7048Q5)`zo$yj"cjm.flqqYnW1;=7X> gsd-vc)jmd%ocxzPi^;2=>S7'nxm"h mdo,`jssWdof0=0>a:W3+bta&{l$ahc dnww[hcj48:5=l5Z0.eqb+ta'dof#iazt^ofi97668k0Y=!hrg,qb*kbe&ndyyQbel>26;7f3\:$kh!rg-nah)cg|~Tahc312<2e>S7'nxm"h mdo,`jssWdof0<:11`9V4*aun'xm#`kb/emvpZkbe5;>27;j7X> gsd-vc)jmd%ocxzPmdo?5286i2_;#j|i.sd,i`k(lfS`kb<0:=5d=R8&myj#|i/lgn+air|Vgna1?6>0;8Q5)`zo$yj"cjm.flqqYjmd6:2 gsd-vc)jmd%ocxzPmdo?6486i2_;#j|i.sd,i`k(lfS`kb<30=5d=R8&myj#|i/lgn+air|Vgna1<<>0c8Q5)`zo$yj"cjm.flqqYjmd6983?n;T2,cw`)zo%fi`!kotv\i`k;:<4:m6[?/fpe*w`(elg$hb{{_lgn87099h1^<"i}f/pe+hcj'me~xRcjm=04:4g<]9%l~k }f.ofi*bh}}Ufi`2=8?3b?P6(o{l%~k!bel-gkprXelg7>40>9:W3+bta&{l$ahc dnww[hcj4;4:m6[?/fpe*w`(elg$hb{{_lgn86699h1^<"i}f/pe+hcj'me~xRcjm=12:4g<]9%l~k }f.ofi*bh}}Ufi`2<2?3b?P6(o{l%~k!bel-gkprXelg7?>0>a:W3+bta&{l$ahc dnww[hcj4:>5=l5Z0.eqb+ta'dof#iazt^ofi9526830Y=!hrg,qb*kbe&ndyyQbel>0:4?<]9%l~k }f.ofi*bh}}Ufi`2;>0;8Q5)`zo$yj"cjm.flqqYjmd6>2<74U1-dvc(un&gna"j`uu]nah:16830Y=!hrg,qb*kbe&ndyyQbel>4:4?<]9%l~k }f.ofi*bh}}Ufi`27>0;8Q5)`zo$yj"cjm.flqqYjmd622::4U1-dvc(un&gna"imm/eaib(`jdmj"cijcb,aib)edbUfi`Qheogqeqiu'kgei lsup,vdkkgfzP

1d9V4*aun'xm#}{bmi,vaYu{}Uyij2?>0g8Q5)`zo$yj"||tcnh+wbXzz~T~hi31?3f?P6(o{l%~k!}su`oo*tcW{ySkh<3<2`>S7'nxm"h rrvahn)ulVxxxR|jg^22`>S7'nxm"h rrvahn)ulVxxxR|jg^32`>S7'nxm"h rrvahn)ulVxxxR|jg^02`>S7'nxm"h rrvahn)pzVxxxRo|rde14>S7'nxm"h rrvahn)pzVxxxRo|rde\`4473\:$kh!rg-qwqdkc&}yS}{_`qqabYc:8i0Y=!hrg,qb*tt|kf`#z|Prrv\gjke9m1^<"i}f/pe+wusjea${Q}su]`khd69l1^<"i}f/pe+wusjea${Q}su]qab:768o0Y=!hrg,qb*tt|kf`#z|Prrv\v`a;97;o7X> gsd-vc)u{}hgg"y}_sqw[wc`W9;o7X> gsd-vc)u{}hgg"y}_sqw[wc`W8k0Y^K]_@NJEVe<]ZOYS[G\ICNF7>PDK01]EHYPTXRF7>QBI:1\IOm4WSKWAZKHLLUJo6Y]IUG\IJBBWKn0[_G[E^UJ@QNXIm1\^DZJ_VKGPMYE9m1SEAGAX,ZGF%6)9)Y_YO.?.0"BWFON=2RD^NW9;YQWHLD03QY_SJ@K7:ZPPZPDKk1SSNA]E^KMBJ00:ZgiZKfbfx]i}foo33?]bjWDcecXjrrkljf=fddexxRkbpu{a?djjgz~Tjxbc6:`bgnswl2hjof{_lcqo`t43jf`h6jnt`]`kphs 9#o7io{a^alqkr/9 n0hlzn_bmvjq.5!m1omyoPcnwmp-5.l2njxlQlotlw,1/c3mkmRm`uov+1,bbf|hUhcx`{(9+g?agsiVidycz'9(d8`drfWje~by26:1<4?adn|lxy:6jfn)2*2>bnf!;";6jfn)33-2=cag":=$94dhl+57/03mce$<=&7:fjj-73!>1oec&>5(58`lh/9?#<7iga(05*2>bnf!8":6jfn)1*2>bnf!>":6jfn)7*2>bnf!<":6jfn)5*2>bnf!2":6jfn);*2>bnf5:5;6jfn=33:2=cag6:=394dhl?57803mce0<=17:fjj9736>1oec2>5?58`lh;9?427iga<0594;1&7:flqq.6!11ocxz'11+;?air|!;:%55kotv+57/?3me~x%?<)99gkpr/9=#37iazt)36-==cg|~#=;'7;emvp-70!11ocxz'19+;?air|!;2%:5kotv+6,>&8:flqq.59 20hb{{(30*<>bh}}"9?$64dnww,72.02ndyy&=5(:8`jss ;<"46j`uu*13,> =0hb{{(6+4?air|!2";6j`uu*:-2=cg|~7<364dnww846902ndyy2>1?:8`jss488546j`uu>27;>bh}}6:;364dnww84>902ndyy2>9?58`jss48437iazt=03:==cg|~7><07;emvp945611ocxz322<;?air|58?255kotv?608?3me~x1<9>99gkpr;:>437iazt=0;:==cg|~7>408;emvp94902ndyy2<0?:8`jss4:;546j`uu>06;>=18:flqq:4<7k0hb{{<2794;>;17:flqq:46>1ocxz34?58`jss4<4<7iazt=4=3>bh}}6<2:5kotv?<;12y15[7ekcV;3xb=9,gkekZabflxjxb|Pv7]2(KIIM%DDBH:?3:djbjYdgrT9<,b]kevYulVnjxlQlotlw95*dWmceSzgkti?2<)eX`hyT{Qkauc\gjsi|4:'oRhzlm]ehdatW{yS{oc=1.`[lkwdlgnbyo{inl\p|vb5;&hSx}j_doaaabblVxnk0>#c^uq[ctby4;'oR{|e^flqqYu{}7: nQznegqbiipWee|1="l_icp[jpbzofd{0>#c^rqaiiflVfjxh`ly<2/gZbh}}U|eizg=24/gZktofdTzlb21-a\vaYcmy~c18?=,b]fvwiuW`dainzfoo]w}uc:8%iTdl}Puoffvcjh4:'oRfns^coijusWog`0?#c^jbwZtt|4;'oRjnt`]`kphsW~coxe3>0-a\lduX{Ujof3?,b]vw`Ybkj7; nQlololjZekgja65)eXlfS}{_wco95*dWakxSio{a^alqkr:8%iT|ah_gwohZrozlycSckhaug\rdj:99;= nQxr^fftqn:998? nQrne\ahvsqV~c~h}g_ogdeqcX~hf69!mPpsmd[`kw|pUdk|h^cpw`tsWkg19"l_icp[sgkam7; nQrne\bpjkW}byi~fParqfvqYqie7:<<9#cnoskkci|Vdjah3iigm\|ihW<;9t>8P2bnh[4>sg:<'oRxnlhf\hjq:8%iT|gb_gkekZr~xl7:gu?7,b]svjaXn|fgSywe<3/gZkbefxrSywe<3/y60oiblihog{espg?lhmmj~xndzjrs58mkrXkea37cilbtko`==h~lxm`byn;qplcZcjx}s:86~}of]fiur~W}byi~f'0(37?uthoVof|ywPtipfwm.6!8>0|ah_dosp|Ys`{oxd%<&159svjaXmdzuRzgrdqk,6/6<2zycjQjmqvz[qnumzb#8$?;;qplcZcjx}sTxe|jsi*6-42vugnUna}zv_ujqavn/0 ;=7}|`g^gntqX|axne27:1<2f>vugnUna}zv_ujqavnXizyn~y&?)0`8twi`Wlg{xtQ{hsgplZgt{lx$<'>b:rqkbYbey~rSyf}erj\evubz}"9%vugnUna}zv_ujqavnXizyn~y&7)0f8twi`Wlg{xtQ{hsgplZgt{lx054?>0`8twi`Wlg{xtQ{hsgplZhboh~n$='>b:rqkbYbey~rSyf}erj\j`af|l":%vugnUna}zv_ujqavnXflmjxh&8)0`8twi`Wlg{xtQ{hsgplZhboh~n$5'>d:rqkbYbey~rSyf}erj\j`af|l636=06;qplcZ`rde;87}|`g^dvhiYs`{oxd%>&129svjaXn|fgSyf}erj+5,743yxdkRhzlm]wlwct`!8"=>5rne\bpjkW}byi~f'3(30?uthoVl~`aQ{hsgpl-2.9:1{~biPftno[qnumzb#9$?<;qplcZ`rdeUdk|h)4*56=wzfmTjxbc_ujqavn/? ;87}|`g^dvhiYs`{oxd%6&129svjaXn|fgSyf}erj+=,723yxdkRhzlm]wlwct`531<3?n;qplcZ`rdeUdk|h^cpw`ts 9#:m6~}of]eqijX|axneQnsrgqp-7.9h1{~biPftno[qnumzbTm~}jru*1-4ga:rqkbYa}efTxe|jsi]bwvcu|!?"=l5rne\bpjkW}byi~fParqfvq.1!8k0|ah_gwohZrozlycSl}|esv+3,7f3yxdkRhzlm]wlwct`Vkxh|{(9+2e>vugnUmyabPtipfwmYf{zoyx%7&1b9svjaXn|fgSyf}erj\evubz}626=0>a:rqkbYa}efTxe|jsi]mabgsm!:"=l5rne\bpjkW}byi~fPndebp`.6!8k0|ah_gwohZrozlycSckhaug+6,7f3yxdkRhzlm]wlwct`Vdnklzj(2+2e>vugnUmyabPtipfwmYimnki%:&1`9svjaXn|fgSyf}erj\j`af|l">% ;j7}|`g^dvhiYs`{oxdR`jg`vf,2/6i2zycjQiumn\pmtb{aUeijo{e):*5d=wzfmTjxbc_ujqavnXflmjxh&6)0a8twi`Wog`Rzgrdqk[kc`i}o757>16:pg[fjl991yhRjnt`]`kphs 9#:<6|k_ecweZeh}g~#=$??;sf\`drfWje~by&=)028vaYci}kTob{at)1*55=ulVnjxlQlotlw,1/682xoSio{a^alqkr/= ;;7jPd`vb[firf}"=%<>4re]geqgXkfex%9&119q`Zbf|hUhcx`{(9+24>tcWmkmRm`uov?4;753{nThlzn_bmvjq:?294>7jPeo48vaYu{}90~~z8;r`jp`tu<2yyy:4tswf=>sillxm`by:;wcoma0<{Ujof84ws]`hn773~xThlzn_bmvjq.7!8:0{Qkauc\gjsi|!;"==5xr^fbpdYdg|d$?'>0:uq[agsiVidycz'3(33?rtXlh~jSnaznu*7-46<{UomyoPcnwmp-3.991|~Rjnt`]`kphs ?#:<6y}_ecweZeh}g~#;$??;vp\`drfWje~by&7)028swYci}kTob{at);*57=pzVnjxlQlotlw8<<76<1|~Rka6:uq[wusuIJ{oi64@Az2>C<328qX8k4:048;>455j?ih6:69czl7<1<63g>39784$5:1>11d3tY?h7;?5;:9564e>ji1;58l;R31g?3683:1=>o68??:18277d1kj0<4;j4d42;>5<628qX8k4:048;>455j?ih6:69c:tW5=e=83;1=7?l0zQ7b?37=321=><97?=d:T7<6<5s|;8:7?4u014>5=z,82;6<74b42;>5<4n391?kuG4618^13=:r;36=831b9;?50;9l0a?=83.:4?4;fb9m5=7=821d8i650;&2<7<3nj1e=5?51:9l0a1=83.:4?4;fb9m5=7=:21d8i850;&2<7<3nj1e=5?53:9l0a3=83.:4?4;fb9m5=7=<21d8i:50;&2<7<3nj1e=5?55:9l0a4=83.:4?4;fb9m5=7=>21d8i?50;&2<7<3nj1e=5?57:9l0a6=83.:4?4;fb9m5=7=021d8nh50;&2<7<3nj1e=5?59:9l0fc=83.:4?4;fb9m5=7=i21d8nj50;&2<7<3nj1e=5?5b:9l0fe=83.:4?4;fb9m5=7=k21d8nl50;&2<7<3nj1e=5?5d:9l0fg=83.:4?4;fb9m5=7=m21d8n750;&2<7<3nj1e=5?5f:9l0f1=83.:4?4;fb9m5=7=9910c9m9:18'5=4=:038?j2d=3:1(<6=:5d`?k7?93;976a;c583>!7?:3>mo6`>80827>=h8387bf=i91;1=954o5a1>5<#91818km4n0:2>43<3f>h=7>5$0:1>1`d3g;3=7?9;:m7g5<72-;3>7:ic:l2<4<6?21d8oh50;&2<7<3nj1e=5?51998k1db290/=5<54ga8j4>628307b:kf;29 4>52=lh7c?71;3b?>i3ll0;6)?72;6eg>h6080:n65`4ef94?"60;0?jn5a19395f=f:9l0a5=83.:4?4;fb9m5=7=:910c9m7:18'5=4=:338?j2el3:1(<6=:5d`?k7?938976a;bb83>!7?:3>mo6`>80817>=n8387f4=i91;1<65f48d94?"60;0?n<5a19395>=n<0o1<7*>8387f4=i91;1>65f48f94?"60;0?n<5a19397>=n<0i1<7*>8387f4=i91;1865f48`94?"60;0?n<5a19391>=n<0k1<7*>8387f4=i91;1:65f48;94?"60;0?n<5a19393>=n8387f4=i91;1465f4`594?"60;0?n<5a1939=>=n8387f4=i91;1m65f4`794?"60;0?n<5a1939f>=n1<7*>8387f4=i91;1o65f4`194?"60;0?n<5a1939`>=n8387f4=i91;1i65f4`394?"60;0?n<5a1939b>=n<021<7*>8387f4=i91;1==54i5;4>5<#91818o?4n0:2>47<3`?>?7>5;c640?6=93:1>0c<9i:188ygb?290:6=4?{I647>"6180o46ak7;29?xd3<3:1m;4>8582g5}O<>90V9;517y1=?4?2;k1h7o5b;a95=<6938i6h4k:d827g=:10v(<7>:42a?!2?2<:27):j:42b?!70j3;!7?:3?9:6`>8083?>o2:=0;6)?72;712>h6080:76g:2283>!7?:3?9:6`>8081?>o2:;0;6)?72;712>h6080876g:2083>!7?:3?9:6`>8087?>o2:90;6)?72;712>h6080>76g:1g83>!7?:3?9:6`>8085?>o29l0;6)?72;712>h6080<76g:1e83>!7?:3?9:6`>808;?>o28l0;66g:6183>>o2>:0;66a:6783>>o29k0;6)?72;72g>h6080;76g:1`83>!7?:3?:o6`>8082?>o2900;6)?72;72g>h6080976g:1983>!7?:3?:o6`>8080?>o29>0;6)?72;72g>h6080?76g:1783>!7?:3?:o6`>8086?>o29<0;6)?72;72g>h6080=76g:1583>!7?:3?:o6`>8084?>o29:0;6)?72;72g>h6080376g:5g83>>i2980;66g:2g83>!7?:3?8<6`>8083?>o2:l0;6)?72;704>h6080:76g:2e83>!7?:3?8<6`>8081?>o2:j0;6)?72;704>h6080876g:2c83>!7?:3?8<6`>8087?>o2:h0;6)?72;704>h6080>76g:2883>!7?:3?8<6`>8085?>o2:10;6)?72;704>h6080<76g:2683>!7?:3?8<6`>808;?>i30>0;66a;9583>!7?:3>296`>8083?>i31:0;6)?72;6:1>h6080:76a;9383>!7?:3>296`>8081?>i3180;6)?72;6:1>h6080876a;9183>!7?:3>296`>8087?>i30o0;6)?72;6:1>h6080>76a;8d83>!7?:3>296`>8085?>i30m0;6)?72;6:1>h6080<76a;8b83>!7?:3>296`>808;?>i30k0;6)?72;6:1>h6080276a:3083>>o2?=0;66g:3c83>!7?:3?8o6`>8083?>o2;h0;6)?72;70g>h6080:76g:3883>!7?:3?8o6`>8081?>o2;10;6)?72;70g>h6080876g:3683>!7?:3?8o6`>8087?>o2;?0;6)?72;70g>h6080>76g:3483>!7?:3?8o6`>8085?>o2;=0;6)?72;70g>h6080<76g:3283>!7?:3?8o6`>808;?>o2;;0;6)?72;70g>h6080276a:0b83>>i28?0;66g:6983>>o3000;66g:4783>!7?:3??;6`>8083?>o2<<0;6)?72;773>h6080:76g:4583>!7?:3??;6`>8081?>o2<:0;6)?72;773>h6080876g:4383>!7?:3??;6`>8087?>o2<80;6)?72;773>h6080>76g:4183>!7?:3??;6`>8085?>o2;o0;6)?72;773>h6080<76g:3d83>!7?:3??;6`>808;?>o2;m0;6)?72;773>h6080276g:5083>!7?:3?>>6`>8083?>o2=90;6)?72;766>h6080:76g:4g83>!7?:3?>>6`>8081?>o2h6080876g:4e83>!7?:3?>>6`>8087?>o2h6080>76g:4c83>!7?:3?>>6`>8085?>o2h6080<76g:4883>!7?:3?>>6`>808;?>o2<10;6)?72;766>h6080276a;8783>>o28o0;66g;8`83>>o2?<0;66a:6383>>i2>>0;66g:6083>>i3l00;6)?72;6eg>h6080;76a;d983>!7?:3>mo6`>8082?>i3l>0;6)?72;6eg>h6080976a;d783>!7?:3>mo6`>8080?>i3l<0;6)?72;6eg>h6080?76a;d583>!7?:3>mo6`>8086?>i3l;0;6)?72;6eg>h6080=76a;d083>!7?:3>mo6`>8084?>i3l90;6)?72;6eg>h6080376a;cg83>!7?:3>mo6`>808:?>i3kl0;6)?72;6eg>h6080j76a;ce83>!7?:3>mo6`>808a?>i3kj0;6)?72;6eg>h6080h76a;cc83>!7?:3>mo6`>808g?>i3kh0;6)?72;6eg>h6080n76a;c883>!7?:3>mo6`>808e?>i3k>0;6)?72;6eg>h6080:<65`4b494?"60;0?jn5a193954=6=4+19090ce4?:%3;6?2ak2d:4<4>4:9l0f4=83.:4?4;fb9m5=7=9<10c9m>:18'5=4=:048?j2d83:1(<6=:5d`?k7?93;<76a;bg83>!7?:3>mo6`>8082<>=h8387bf=i91;1=454o5fe>5<#91818km4n0:2>4g<3f>oi7>5$0:1>1`d3g;3=7?m;:m7`a<72-;3>7:ic:l2<4<6k21d8im50;&2<7<3nj1e=5?51e98k1be290/=5<54ga8j4>628o07b:ka;29 4>52=lh7c?71;3e?>i3l:0;6)?72;6eg>h60809<65`4b:94?"60;0?jn5a193964=7:m1:l2<4<632c?5h4?:%3;6?2e92d:4<4=;:k7=a<72-;3>7:m1:l2<4<432c?5n4?:%3;6?2e92d:4<4;;:k7=g<72-;3>7:m1:l2<4<232c?5l4?:%3;6?2e92d:4<49;:k7=<<72-;3>7:m1:l2<4<032c?m54?:%3;6?2e92d:4<47;:k7e2<72-;3>7:m1:l2<4<>32c?m;4?:%3;6?2e92d:4<4n;:k7e0<72-;3>7:m1:l2<47:m1:l2<47:m1:l2<40:9j0<1=83.:4?4;b09m5=7=9810e967:188k03d290/=5<554g8j4>62910c8;m:18'5=4==:098k03f290/=5<554g8j4>62;10c8;6:18'5=4==:298k03?290/=5<554g8j4>62=10c8;8:18'5=4==:498k031290/=5<554g8j4>62?10c8;::18'5=4==:698k033290/=5<554g8j4>62110c89=:18'5=4==>90b<6>:198k016290/=5<55618j4>62810c89?:18'5=4==>90b<6>:398k00a290/=5<55618j4>62:10c88j:18'5=4==>90b<6>:598k00c290/=5<55618j4>62<10c88l:18'5=4==>90b<6>:798k00e290/=5<55618j4>62>10c88n:18'5=4==>90b<6>:998k00>290/=5<55618j4>62010c8?=:188m06c2900c979:188m0342900c88::188f11a290:6=4?{%3:5?b?3A>50;394?6|,83:699;;I64a>N3?:1d=:h50;9~f7g5290?6=4?{%3:5?b43A>=6=44i4294?=n9191<75`19694?=zj=<;6=4<:183!7>93n;7E:8e:J736=O<:1/=>:55768 `0=:2c?:7>5;h73>5<908g4>N3?l1C8:=4H518 4532<<7>5;n3;0?6=3th?9k4?:283>5}#90;1h=5G46g8L1143A>87)?<4;750>"b>380e9850;9j15<722e:494?::a03?=83?1<7>t$0;2>a2<@==n7E:83:J77>"6;=0>:95f4783>>o3?3:17d;?:188m4>42900c<6;:188yg21i3:1?7>50z&2=47=n0<729q/=4?5d59K02c<@==87E:<;%300?31<2c?:7>5;h64>5<1<75rb54;>5<3290;w)?61;f0?M20m2B?;>5+e784?l212900e8>50;9j5=5=831d=5:50;9~f100290?6=4?{%3:5?b43A>=6=44i4294?=n9191<75`19694?=zj=<=6=4;:183!7>93n87E:8e:J736=#m?0<7d:9:188m06=831b=5=50;9l5=2=831vn99>:187>5<7s-;2=7j<;I64a>N3?:1/i;48;h65>5<1<75rb553>5<3290;w)?61;f0?M20m2B?;>5+e784?l212900e8>50;9j5=5=831d=5:50;9~f771290?6=4?{%3:5?b63A>=6=44i5a94?=n=90;66a>8583>>{e:8?1<7:50;2x 4?62m;0D99j;I647>"b>380e9850;9j0f<722c><7>5;n3;0?6=3th9=94?:583>5}#90;1h<5G46g8L1143-o=6?5f4783>>o3k3:17d;?:188k4>32900qo<>3;290?6=8r.:5<4k1:J73`=O<>90(h852:k72?6=3`>h6=44i4294?=h91>1<75rb331>5<3290;w)?61;f2?M20m2B?;>5+e781?l212900e9m50;9j15<722e:494?::a647=83>1<7>t$0;2>a7<@==n7E:83:&f2?4>o283:17b?74;29?xd5990;694?:1y'5<7=l81C8:k4H550?!c12;1b8;4?::k7g?6=3`?;6=44o0:7>5<54;294~"6180o=6F;7d9K025<,l<1>6g;6;29?l2d2900e8>50;9l5=2=831vn?>j:187>5<7s-;2=7j>;I64a>N3?:1/i;4=;h65>5<>i60=0;66sm1c694?2=83:p(<7>:e38L11b3A>5;|`2f6<72=0;6=u+1839`4=O<>o0D99<;%g5>7=n50z&2=45;h6`>5<93n:7E:8e:J736=#m?097d:9:188m1e=831b9=4?::m2<1<722wi=o>50;694?6|,83:6i?4H55f?M20;2.n:7<4i5494?=nag83>1<729q/=4?5d09K02c<@==87)k9:39j03<722c?o7>5;h73>5<908g5>N3?l1C8:=4$d496>o3>3:17d:l:188m06=831d=5:50;9~f4gc290?6=4?{%3:5?b63A>=6=44i5a94?=n=90;66a>8583>>{e9hi1<7:50;2x 4?62m;0D99j;I647>"b>380e9850;9j0f<722c><7>5;n3;0?6=3th9:?4?:583>5}#90;1h<5G46g8L1143-o=6?5f4783>>o3k3:17d;?:188k4>32900qo<91;290?6=8r.:5<4k1:J73`=O<>90(h852:k72?6=3`>h6=44i4294?=h91>1<75rb343>5<3290;w)?61;f2?M20m2B?;>5+e781?l212900e9m50;9j15<722e:494?::a60`=83>1<7>t$0;2>a7<@==n7E:83:&f2?4>o283:17b?74;29?xd5=l0;694?:1y'5<7=l81C8:k4H550?!c12;1b8;4?::k7g?6=3`?;6=44o0:7>5<h7>54;294~"6180o=6F;7d9K025<,l<1>6g;6;29?l2d2900e8>50;9l5=2=831vn?;l:187>5<7s-;2=7j>;I64a>N3?:1/i;4=;h65>5<>i60=0;66sm24`94?2=83:p(<7>:e38L11b3A>5;|`11d<72=0;6=u+1839`4=O<>o0D99<;%g5>7=n50z&2=45;h6`>5<93n:7E:8e:J736=#m?097d:9:188m1e=831b9=4?::m2<1<722wi=ko50;694?6|,83:6i?4H55f?M20;2.n:7<4i5494?=nf883>1<729q/=4?5d09K02c<@==87)k9:39j03<722c?o7>5;h73>5<908g5>N3?l1C8:=4$d496>o3>3:17d:l:188m06=831d=5:50;9~f4`0290?6=4?{%3:5?b63A>=6=44i5a94?=n=90;66a>8583>>{e9o<1<7:50;2x 4?62m;0D99j;I647>"b>380e9850;9j0f<722c><7>5;n3;0?6=3th:j84?:583>5}#90;1h<5G46g8L1143-o=6?5f4783>>o3k3:17d;?:188k4>32900qo?i4;290?6=8r.:5<4k1:J73`=O<>90(h852:k72?6=3`>h6=44i4294?=h91>1<75rb373>5<3290;w)?61;f2?M20m2B?;>5G429'562==?>0(h852:k72?6=3`>h6=44i4294?=h91>1<75rb36e>5<3290;w)?61;f2?M20m2B?;>5G429'562==?>0(h852:k72?6=3`>h6=44i4294?=h91>1<75rb36f>5<3290;w)?61;f2?M20m2B?;>5G429'562==?>0(h852:k72?6=3`>h6=44i4294?=h91>1<75rb36g>5<3290;w)?61;f2?M20m2B?;>5G429'562==?>0(h852:k72?6=3`>h6=44i4294?=h91>1<75rb36`>5<3290;w)?61;f2?M20m2B?;>5G429'562==?>0(h852:k72?6=3`>h6=44i4294?=h91>1<75rb36a>5<3290;w)?61;f2?M20m2B?;>5G429'562==?>0(h852:k72?6=3`>h6=44i4294?=h91>1<75rb36b>5<3290;w)?61;f2?M20m2B?;>5G429'562==?>0(h852:k72?6=3`>h6=44i4294?=h91>1<75rb36:>5<3290;w)?61;f2?M20m2B?;>5G429'562==?>0(h852:k72?6=3`>h6=44i4294?=h91>1<75rb36;>5<3290;w)?61;f2?M20m2B?;>5G429'562==?>0(h852:k72?6=3`>h6=44i4294?=h91>1<75rb364>5<3290;w)?61;f2?M20m2B?;>5G429'562==?>0(h852:k72?6=3`>h6=44i4294?=h91>1<75rb0gb>5<3290;w)?61;f2?M20m2B?;>5G429'562==?>0(h852:k72?6=3`>h6=44i4294?=h91>1<75rb0g:>5<3290;w)?61;f2?M20m2B?;>5G429'562==?>0(h852:k72?6=3`>h6=44i4294?=h91>1<75rb0g;>5<3290;w)?61;f2?M20m2B?;>5G429'562==?>0(h852:k72?6=3`>h6=44i4294?=h91>1<75rb0g4>5<3290;w)?61;f2?M20m2B?;>5G429'562==?>0(h852:k72?6=3`>h6=44i4294?=h91>1<75rb0g5>5<3290;w)?61;f2?M20m2B?;>5G429'562==?>0(h852:k72?6=3`>h6=44i4294?=h91>1<75rb0g6>5<3290;w)?61;f2?M20m2B?;>5G429'562==?>0(h852:k72?6=3`>h6=44i4294?=h91>1<75rb0g7>5<3290;w)?61;f2?M20m2B?;>5G429'562==?>0(h852:k72?6=3`>h6=44i4294?=h91>1<75rb0g0>5<3290;w)?61;f2?M20m2B?;>5G429'562==?>0(h852:k72?6=3`>h6=44i4294?=h91>1<75rb0g1>5<3290;w)?61;f2?M20m2B?;>5G429'562==?>0(h852:k72?6=3`>h6=44i4294?=h91>1<75rb0f;>5<3290;w)?61;f2?M20m2B?;>5+e781?l212900e9m50;9j15<722e:494?::a5a1=83>1<7>t$0;2>a7<@==n7E:83:&f2?4>o283:17b?74;29?xd6l?0;694?:1y'5<7=l81C8:k4H550?!c12;1b8;4?::k7g?6=3`?;6=44o0:7>5<54;294~"6180o=6F;7d9K025<,l<1>6g;6;29?l2d2900e8>50;9l5=2=831vn5<7s-;2=7j>;I64a>N3?:1/i;4=;h65>5<>i60=0;66sm1e194?2=83:p(<7>:e38L11b3A>5;|`2`7<72=0;6=u+1839`4=O<>o0D99<;%g5>7=n50z&2=45;h6`>5<93n:7E:8e:J736=#m?097d:9:188m1e=831b9=4?::m2<1<722wi>>m50;694?6|,83:6i?4H55f?M20;2.n:7<4i5494?=n1<729q/=4?5d09K02c<@==87)k9:39j03<722c?o7>5;h73>5<908g5>N3?l1C8:=4$d496>o3>3:17d:l:188m06=831d=5:50;9~f75>290?6=4?{%3:5?b63A>=6=44i5a94?=n=90;66a>8583>>{e::21<7:50;2x 4?62m;0D99j;I647>"b>380e9850;9j0f<722c><7>5;n3;0?6=3th9?:4?:583>5}#90;1h<5G46g8L1143-o=6?5f4783>>o3k3:17d;?:188k4>32900qo<<6;290?6=8r.:5<4k1:J73`=O<>90(h852:k72?6=3`>h6=44i4294?=h91>1<75rb316>5<3290;w)?61;f2?M20m2B?;>5+e781?l212900e9m50;9j15<722e:494?::a662=83>1<7>t$0;2>a7<@==n7E:83:&f2?4>o283:17b?74;29?xd5;:0;694?:1y'5<7=l81C8:k4H550?!c12;1b8;4?::k7g?6=3`?;6=44o0:7>5<55;294~"6180o>6F;7d9K025<,l<1>6g;6;29?l202900e9m50;9j15<722e:494?::a6a>=83?1<7>t$0;2>a4<@==n7E:83:&f2?4>o3k3:17d;?:188k4>32900qo90(h852:k72?6=3`><6=44i5a94?=n=90;66a>8583>>{e:m<1<7;50;2x 4?62m80D99j;I647>"b>380e9850;9j02<722c?o7>5;h73>5<908g6>N3?l1C8:=4$d496>o3>3:17d:8:188m1e=831b9=4?::m2<1<722wi>i:50;794?6|,83:6i<4H55f?M20;2.n:7<4i5494?=n<>0;66g;c;29?l372900c<6;:188yg4c:3:197>50z&2=45;h64>5<>i60=0;66sm2e394?3=83:p(<7>:e68L11b3A>5;n3;0?6=3th9h>4?:483>5}#90;1h?5G46g8L1143-o=6?5f4783>>o3?3:17d:l:188m06=831d=5:50;9~f7e129086=4?{%3:5?20l2B?;h5G4618m1?=831b=?o50;9l52b=831vn?m::180>5<7s-;2=7:8d:J73`=O<>90e9750;9j57g=831d=:j50;9~f7dd290?6=4?{%3:5?74=2B?;h5G4618m1?=831b9?4?::k2t$0;2>11c3A>l4?::m23a<722wi>oo50;694?6|,83:6<=:;I64a>N3?:1b844?::k66?6=3`;3m7>5;n34`?6=3th9o>4?:283>5}#90;18:j4H55f?M20;2c?57>5;h31e?6=3f;5;|`1f=<72=0;6=u+1839563<@==n7E:83:k7=?6=3`?96=44i0:b>5<90873a=O<>o0D99<;h6:>5<5<54;294~"6180:?85G46g8L1143`>26=44i4094?=n91k1<75`16f94?=zj;i:6=4<:183!7>93>n1<75rb3`7>5<3290;w)?61;301>N3?l1C8:=4i5;94?=n=;0;66g>8`83>>i6?m0;66sm2b294?5=83:p(<7>:55g?M20m2B?;>5f4883>>o6:h0;66a>7e83>>{e:k81<7:50;2x 4?6289>7E:8e:J736=n<00;66g:2;29?l7?i3:17b?8d;29?xd5jo0;6>4?:1y'5<7=<>n0D99j;I647>o313:17d?=a;29?j70l3:17pl=b183>1<729q/=4?51278L11b3A>50z&2=4<6;<1C8:k4H550?l2>2900e8<50;9j5=g=831d=:j50;9~f7ce290>6=4?{%3:5?b53A>=6=44i5594?=n0<729q/=4?5d39K02c<@==87)k9:39j03<722c?;7>5;h6`>5<93n97E:8e:J736=#m?097d:9:188m11=831b8n4?::k64?6=3f;387>5;|`1a=<72<0;6=u+1839`7=O<>o0D99<;%g5>7=n50;9l5=2=831vn?k8:186>5<7s-;2=7j=;I64a>N3?:1/i;4=;h65>5<>o283:17b?74;29?xd5m?0;684?:1y'5<7=l;1C8:k4H550?!c12;1b8;4?::k73?6=3`>h6=44i4294?=h91>1<75rb3g6>5<2290;w)?61;f1?M20m2B?;>5+e781?l212900e9950;9j0f<722c><7>5;n3;0?6=3th9i94?:483>5}#90;1h?5G46g8L1143-o=6?5f4783>>o3?3:17d:l:188m06=831d=5:50;9~f7c4290>6=4?{%3:5?b53A>=6=44i5594?=n1<729q/=4?5d29K02c<@==87)k9:69j03<722c><7>5;h3;7?6=3f;387>5;|`132<72=0;6=u+1839`6=O<>o0D99<;%g5>2=n5<54;294~"6180o=6F;7d9K025<,l<1>6g;6;29?l2d2900e8>50;9l5=2=831vn>>=:180>5<7s-;2=7:8d:J73`=O<>90e9750;9j57g=831d=:j50;9~f66e29086=4?{%3:5?20l2B?;h5G4618m1?=831b=?o50;9l52b=831vn?h9:187>5<7s-;2=7?<5:J73`=O<>90e9750;9j17<722c:4l4?::m23a<722wi?=o50;194?6|,83:699k;I64a>N3?:1b844?::k26d<722e:;i4?::a6c3=83>1<7>t$0;2>4523A>>7>5;h3;e?6=3f;5;|`04<<72:0;6=u+183902b<@==n7E:83:k7=?6=3`;9m7>5;n34`?6=3th9j94?:583>5}#90;1=>;4H55f?M20;2c?57>5;h71>5<5<53;294~"6180?;i5G46g8L1143`>26=44i00b>5<908270=O<>o0D99<;h6:>5<n1<75rb224>5<4290;w)?61;64`>N3?l1C8:=4i5;94?=n9;k1<75`16f94?=zj;l96=4;:183!7>93;896F;7d9K025>o60h0;66a>7e83>>{e;9<1<7=50;2x 4?62==o7E:8e:J736=n<00;66g>2`83>>i6?m0;66sm2g394?2=83:p(<7>:016?M20m2B?;>5f4883>>o2:3:17d?7a;29?j70l3:17pl<0483>6<729q/=4?546f8L11b3A>o313:17d;=:188m4>f2900c<9k:188yg57<3:1?7>50z&2=4<3?m1C8:k4H550?l2>2900e<349K02c<@==87d:6:188m04=831b=5o50;9l52b=831vn>><:180>5<7s-;2=7:8d:J73`=O<>90e9750;9j57g=831d=:j50;9~f7cb290?6=4?{%3:5?74=2B?;h5G4618m1?=831b9?4?::k21<7>t$0;2>4523A>>7>5;h3;e?6=3f;5;|`052<72=0;6=u+1839`4=O<>o0D99<;%g5>7=n50z&2=45;h6`>5<93n:7E:8e:J736=#m?097d:9:188m1e=831b9=4?::m2<1<722wi?1<729q/=4?5d09K02c<@==87)k9:39j03<722c?o7>5;h73>5<908g5>N3?l1C8:=4$d496>o3>3:17d:l:188m06=831d=5:50;9~f67f290?6=4?{%3:5?b63A>=6=44i5a94?=n=90;66a>8583>>{e;831<7:50;2x 4?62m;0D99j;I647>"b>380e9850;9j0f<722c><7>5;n3;0?6=3th8=54?:583>5}#90;1h<5G46g8L1143-o=6?5f4783>>o3k3:17d;?:188k4>32900qo=>6;290?6=8r.:5<4k1:J73`=O<>90(h852:k72?6=3`>h6=44i4294?=h91>1<75rb20b>5<2290;w)?61;f1?M20m2B?;>5+e781?l212900e9950;9j0f<722c><7>5;n3;0?6=3th9584?:583>5}#90;1=>;4H55f?M20;2c?57>5;h71>5<5<54;294~"6180:?85G46g8L1143`>26=44i4094?=n91k1<75`16f94?=zj;386=4;:183!7>93;896F;7d9K025>o60h0;66a>7e83>>{e:081<7:50;2x 4?6289>7E:8e:J736=n<00;66g:2;29?l7?i3:17b?8d;29?xd5180;694?:1y'5<7=9:?0D99j;I647>o313:17d;=:188m4>f2900c<9k:188yg4?:3:187>50z&2=4<6;<1C8:k4H550?l2>2900e8<50;9j5=g=831d=:j50;9~f7>6290?6=4?{%3:5?74=2B?;h5G4618m1?=831b9?4?::k21<7>t$0;2>4523A>>7>5;h3;e?6=3f;5;|`13c<72=0;6=u+1839563<@==n7E:83:k7=?6=3`?96=44i0:b>5<908270=O<>o0D99<;h6:>5<n1<75rb2`g>5<2290;w)?61;f1?M20m2B?;>5+e781?l212900e9950;9j0f<722c><7>5;n3;0?6=3th8no4?:483>5}#90;1h?5G46g8L1143-o=6?5f4783>>o3?3:17d:l:188m06=831d=5:50;9~f6dd290>6=4?{%3:5?b33A>=6=44i5594?=n=90;66g>8283>>i60=0;66sm3cg94?3=83:p(<7>:e08L11b3A>5<55;294~"6180o>6F;7d9K025<,l<1>6g;6;29?l202900e9m50;9j15<722e:494?::a7f4=83?1<7>t$0;2>a4<@==n7E:83:&f2?4>o3k3:17d;?:188k4>32900qo=l0;291?6=8r.:5<4k2:J73`=O<>90(h852:k72?6=3`><6=44i5a94?=n=90;66a>8583>>{e;j;1<7;50;2x 4?62m80D99j;I647>"b>380e9850;9j02<722c?o7>5;h73>5<908g6>N3?l1C8:=4$d496>o3>3:17d:8:188m1e=831b9=4?::m2<1<722wi?n:50;794?6|,83:6i<4H55f?M20;2.n:7<4i5494?=n<>0;66g;c;29?l372900c<6;:188yg5c93:197>50z&2=45;h64>5<>i60=0;66sm3bd94?3=83:p(<7>:e68L11b3A>5;n3;0?6=3th8h=4?:483>5}#90;1h?5G46g8L1143-o=6?5f4783>>o3?3:17d:l:188m06=831d=5:50;9~f6b5290>6=4?{%3:5?b53A>=6=44i5594?=n0<729q/=4?5d39K02c<@==87)k9:39j03<722c?;7>5;h6`>5<93n97E:8e:J736=#m?097d:9:188m11=831b8n4?::k64?6=3f;387>5;|`0`1<72<0;6=u+1839`7=O<>o0D99<;%g5>7=n50;9l5=2=831vn>j::186>5<7s-;2=7j=;I64a>N3?:1/i;4=;h65>5<>o283:17b?74;29?xd4l>0;684?:1y'5<7=l;1C8:k4H550?!c12;1b8;4?::k73?6=3`>h6=44i4294?=h91>1<75rb2f;>5<2290;w)?61;f1?M20m2B?;>5+e781?l212900e9950;9j0f<722c><7>5;n3;0?6=3th8mk4?:483>5}#90;1h?5G46g8L1143-o=6?5f4783>>o3?3:17d:l:188m06=831d=5:50;9~f6gb290>6=4?{%3:5?b53A>=6=44i5594?=n0<729q/=4?5d39K02c<@==87)k9:39j03<722c?;7>5;h6`>5<93n97E:8e:J736=#m?097d:9:188m11=831b8n4?::k64?6=3f;387>5;|`0eg<72<0;6=u+1839`7=O<>o0D99<;%g5>7=n50;9l5=2=831vn>ok:186>5<7s-;2=7j=;I64a>N3?:1/i;4=;h65>5<>o283:17b?74;29?xd4i00;684?:1y'5<7=l;1C8:k4H550?!c12;1b8;4?::k73?6=3`>h6=44i4294?=h91>1<75rb2c;>5<2290;w)?61;f7?M20m2B?;>5+e784?l212900e9950;9j15<722c:4>4?::m2<1<722wi?lo50;794?6|,83:6i<4H55f?M20;2.n:7<4i5494?=n<>0;66g;c;29?l372900c<6;:188yg5f?3:197>50z&2=45;h64>5<1<75rb2;a>5<4290;w)?61;64`>N3?l1C8:=4i5;94?=n9;k1<75`16f94?=zj:3j6=4<:183!7>93>n1<75rb2;3>5<3290;w)?61;301>N3?l1C8:=4i5;94?=n=;0;66g>8`83>>i6?m0;66sm38;94?5=83:p(<7>:55g?M20m2B?;>5f4883>>o6:h0;66a>7e83>>{e;1o1<7:50;2x 4?6289>7E:8e:J736=n<00;66g:2;29?l7?i3:17b?8d;29?xd4110;6>4?:1y'5<7=<>n0D99j;I647>o313:17d?=a;29?j70l3:17pl<8b83>1<729q/=4?51278L11b3A>50z&2=4<6;<1C8:k4H550?l2>2900e8<50;9j5=g=831d=:j50;9~f6?129086=4?{%3:5?20l2B?;h5G4618m1?=831b=?o50;9l52b=831vn>67:187>5<7s-;2=7?<5:J73`=O<>90e9750;9j17<722c:4l4?::m23a<722wi?4;50;194?6|,83:699k;I64a>N3?:1b844?::k26d<722e:;i4?::a7=0=83>1<7>t$0;2>4523A>>7>5;h3;e?6=3f;5;|`0=1<72:0;6=u+183902b<@==n7E:83:k7=?6=3`;9m7>5;n34`?6=3th8494?:583>5}#90;1=>;4H55f?M20;2c?57>5;h71>5<5<53;294~"6180?;i5G46g8L1143`>26=44i00b>5<908270=O<>o0D99<;h6:>5<n1<75rb2;1>5<4290;w)?61;64`>N3?l1C8:=4i5;94?=n9;k1<75`16f94?=zj:2;6=4;:183!7>93;896F;7d9K025>o60h0;66a>7e83>>{e;li1<7;50;2x 4?62m80D99j;I647>"b>380e9850;9j02<722c?o7>5;h73>5<908g6>N3?l1C8:=4$d496>o3>3:17d:8:188m1e=831b9=4?::m2<1<722wi?ho50;794?6|,83:6i<4H55f?M20;2.n:7<4i5494?=n<>0;66g;c;29?l372900c<6;:188yg5b13:197>50z&2=45;h64>5<>i60=0;66sm3d:94?3=83:p(<7>:e08L11b3A>5<55;294~"6180o>6F;7d9K025<,l<1>6g;6;29?l202900e9m50;9j15<722e:494?::a7`0=83?1<7>t$0;2>a4<@==n7E:83:&f2?4>o3k3:17d;?:188k4>32900qo=j5;291?6=8r.:5<4k2:J73`=O<>90(h852:k72?6=3`><6=44i5a94?=n=90;66a>8583>>{e;l>1<7;50;2x 4?62m80D99j;I647>"b>380e9850;9j02<722c?o7>5;h73>5<908g6>N3?l1C8:=4$d496>o3>3:17d:8:188m1e=831b9=4?::m2<1<722wi?>:50;694?6|,83:6<=:;I64a>N3?:1b844?::k66?6=3`;3m7>5;n34`?6=3th8?84?:583>5}#90;1=>;4H55f?M20;2c?57>5;h71>5<5<54;294~"6180:?85G46g8L1143`>26=44i4094?=n91k1<75`16f94?=zj:9<6=4;:183!7>93;896F;7d9K025>o60h0;66a>7e83>>{e;:21<7:50;2x 4?6289>7E:8e:J736=n<00;66g:2;29?l7?i3:17b?8d;29?xd4<>0;694?:1y'5<7=9:?0D99j;I647>o313:17d;=:188m4>f2900c<9k:188yg5303:187>50z&2=4<6;<1C8:k4H550?l2>2900e8<50;9j5=g=831d=:j50;9~f62>290?6=4?{%3:5?74=2B?;h5G4618m1?=831b9?4?::k21<7>t$0;2>4523A>>7>5;h3;e?6=3f;5;|`00g<72=0;6=u+1839563<@==n7E:83:k7=?6=3`?96=44i0:b>5<908270=O<>o0D99<;h6:>5<n1<75rb27f>5<3290;w)?61;301>N3?l1C8:=4i5;94?=n=;0;66g>8`83>>i6?m0;66sm34d94?2=83:p(<7>:016?M20m2B?;>5f4883>>o2:3:17d?7a;29?j70l3:17pl<6183>1<729q/=4?51278L11b3A>349K02c<@==87d:6:188m04=831b=5o50;9l52b=831vn>9?:187>5<7s-;2=7j>;I64a>N3?:1/i;4=;h65>5<>i60=0;66sm36394?2=83:p(<7>:e38L11b3A>5;|`02f<72<0;6=u+1839`7=O<>o0D99<;%g5>7=n50;9l5=2=831vn95<7s-;2=7j:;I64a>N3?:1/i;4=;h65>5<>o60<0;66a>8583>>{e<;o1<7;50;2x 4?62m?0D99j;I647>"b>380e9850;9j02<722c><7>5;h3;1?6=3f;387>5;|`76a<72<0;6=u+1839`0=O<>o0D99<;%g5>7=n32900qo:=c;291?6=8r.:5<4k5:J73`=O<>90(h852:k72?6=3`><6=44i4294?=n91?1<75`19694?=zj=8i6=4::183!7>93n>7E:8e:J736=#m?097d:9:188m11=831b9=4?::k2<0<722e:494?::a07g=83?1<7>t$0;2>a3<@==n7E:83:&f2?4>o283:17d?75;29?j7?<3:17pl;2983>0<729q/=4?5d49K02c<@==87)k9:39j03<722c?;7>5;h73>5<6=44o0:7>5<9;7>55;294~"6180o96F;7d9K025<,l<1>6g;6;29?l202900e8>50;9j5=3=831d=5:50;9~f141290>6=4?{%3:5?b23A>=6=44i5594?=n=90;66g>8483>>i60=0;66sm43794?3=83:p(<7>:e78L11b3A>5;n3;0?6=3th?>94?:483>5}#90;1h85G46g8L1143-o=6?5f4783>>o3?3:17d;?:188m4>22900c<6;:188yg25;3:197>50z&2=45;h64>5<1<75rb501>5<2290;w)?61;f6?M20m2B?;>5+e781?l212900e9950;9j15<722c:484?::m2<1<722wi8??50;794?6|,83:6i;4H55f?M20;2.n:7<4i5494?=n<>0;66g:0;29?l7?=3:17b?74;29?xd3:90;684?:1y'5<7=l<1C8:k4H550?!c12;1b8;4?::k73?6=3`?;6=44i0:6>5<908g1>N3?l1C8:=4$d496>o3>3:17d:8:188m06=831b=5;50;9l5=2=831vn9?k:186>5<7s-;2=7j:;I64a>N3?:1/i;4=;h65>5<>o60<0;66a>8583>>{e<8i1<7;50;2x 4?62m?0D99j;I647>"b>380e9850;9j02<722c><7>5;h3;1?6=3f;387>5;|`75g<72<0;6=u+1839`0=O<>o0D99<;%g5>7=n32900qo:>a;291?6=8r.:5<4k5:J73`=O<>90(h852:k72?6=3`><6=44i4294?=n91?1<75`19694?=zj=;26=4::183!7>93n>7E:8e:J736=#m?097d:9:188m11=831b9=4?::k2<0<722e:494?::a04>=83?1<7>t$0;2>a3<@==n7E:83:&f2?4>o283:17d?75;29?j7?<3:17pl;1683>0<729q/=4?5d49K02c<@==87)k9:39j03<722c?;7>5;h73>5<6=44o0:7>5<::7>55;294~"6180o96F;7d9K025<,l<1>6g;6;29?l202900e8>50;9j5=3=831d=5:50;9~f172290>6=4?{%3:5?b23A>=6=44i5594?=n=90;66g>8483>>i60=0;66sm40694?3=83:p(<7>:e78L11b3A>5;n3;0?6=3th??84?:483>5}#90;1h85G46g8L1143-o=6?5f4783>>o3?3:17d;?:188m4>22900c<6;:188yg24<3:197>50z&2=45;h64>5<1<75rb510>5<2290;w)?61;f6?M20m2B?;>5+e781?l212900e9950;9j15<722c:484?::m2<1<722wi8><50;794?6|,83:6i;4H55f?M20;2.n:7<4i5494?=n<>0;66g:0;29?l7?=3:17b?74;29?xd3;80;684?:1y'5<7=l<1C8:k4H550?!c12;1b8;4?::k73?6=3`?;6=44i0:6>5<908g1>N3?l1C8:=4$d496>o3>3:17d:8:188m06=831b=5;50;9l5=2=831vn9<6:186>5<7s-;2=7j:;I64a>N3?:1/i;4=;h65>5<>o60<0;66a>8583>>{e<8o1<7;50;2x 4?62m?0D99j;I647>"b>380e9850;9j02<722c><7>5;h3;1?6=3f;387>5;|`756<72<0;6=u+1839`0=O<>o0D99<;%g5>7=n32900qo:>2;291?6=8r.:5<4k5:J73`=O<>90(h852:k72?6=3`><6=44i4294?=n91?1<75`19694?=zj=93;9j6F;7d9K025<,l<1=l5fd`83>>ocj3:17b?8d;29?xd3>;0;6>4?:1y'5<7=9;l0D99j;I647>"b>3;j7djn:188mad=831d=:j50;9~f77?29086=4?{%3:5?75n2B?;h5G4618 `0=9l1bhl4?::kgf?6=3f;5;|`2f3<72:0;6=u+183957`<@==n7E:83:&f2?7b3`nj6=44ie`94?=h9>n1<75rb0c1>5<4290;w)?61;31b>N3?l1C8:=4$d495`=nlh0;66gkb;29?j70l3:17pl>a083>6<729q/=4?513d8L11b3A>5<7s-;2=7?=f:J73`=O<>90(h851d9j`d<722con7>5;n34`?6=3th:5k4?:283>5}#90;1=?h4H55f?M20;2.n:7?j;hfb>5<93;9j6F;7d9K025<,l<1=h5fd`83>>ocj3:17b?8d;29?xd61m0;6>4?:1y'5<7=9;l0D99j;I647>"b>3;n7djn:188mad=831d=:j50;9~f4?d29086=4?{%3:5?75n2B?;h5G4618 `0=9l1bhl4?::kgf?6=3f;5;|`2=g<72:0;6=u+183957`<@==n7E:83:&f2?7b3`nj6=44ie`94?=h9>n1<75rb0;b>5<4290;w)?61;31b>N3?l1C8:=4$d495`=nlh0;66gkb;29?j70l3:17pl>9883>6<729q/=4?513d8L11b3A>5<7s-;2=7?=f:J73`=O<>90(h851d9j`d<722con7>5;n34`?6=3th:5:4?:283>5}#90;1=?h4H55f?M20;2.n:7?j;hfb>5<93;9j6F;7d9K025<,l<1=h5fd`83>>ocj3:17b?8d;29?xd61<0;6>4?:1y'5<7=9;l0D99j;I647>"b>3;n7djn:188mad=831d=:j50;9~f4?329086=4?{%3:5?75n2B?;h5G4618 `0=9l1bhl4?::kgf?6=3f;5;|`2=6<72:0;6=u+183957`<@==n7E:83:&f2?7b3`nj6=44ie`94?=h9>n1<75rb0;1>5<4290;w)?61;31b>N3?l1C8:=4$d495`=nlh0;66gkb;29?j70l3:17pl=7483>1<729q/=4?51228L11b3A>1<7>t$0;2>4573A>5;hfa>5<93;8<6F;7d9K025<,l<1>85fd`83>>ocj3:17djl:188k41c2900qo<83;291?6=8r.:5<4>309K02c<@==87)k9:0`8mag=831bho4?::kgg?6=3`no6=44o05g>5<55;294~"6180:?<5G46g8L1143-o=6?>4iec94?=nlk0;66gkc;29?lbc2900c<9k:188yg7ei3:197>50z&2=4<6;81C8:k4H550?!c12;:0eio50;9j`g<722coo7>5;hfg>5<908274=O<>o0D99<;%g5>74>ock3:17djk:188k41c2900qo<9d;290?6=8r.:5<4>319K02c<@==87)k9:3a8mag=831bho4?::kgg?6=3f;5;|`15`<72:0;6=u+183957`<@==n7E:83:&f2?7b3`nj6=44ie`94?=h9>n1<75rb0``>5<4290;w)?61;31b>N3?l1C8:=4$d495`=nlh0;66gkb;29?j70l3:17pl=2183>1<729q/=4?51228L11b3A>1<7>t$0;2>4573A>5;hfa>5<93;8=6F;7d9K025<,l<1>=5fd`83>>ocj3:17djl:188mab=831d=:j50;9~f4e7290>6=4?{%3:5?7492B?;h5G4618 `0=:91bhl4?::kgf?6=3`nh6=44ief94?=h9>n1<75rb57`>5<3290;w)?61;304>N3?l1C8:=4$d4914=nlh0;66gkb;29?lbd2900c<9k:188yg41k3:197>50z&2=4<6;81C8:k4H550?!c12890eio50;9j`g<722coo7>5;hfg>5<90826c=O<>o0D99<;%g5>75>i6?m0;66sm29a94?5=83:p(<7>:00e?M20m2B?;>5+e7817>oci3:17djm:188k41c2900qo=9b;291?6=8r.:5<4>309K02c<@==87)k9:368mag=831bho4?::kgg?6=3`no6=44o05g>5<97>55;294~"6180:?<5G46g8L1143-o=6?:4iec94?=nlk0;66gkc;29?lbc2900c<9k:188yg53:3:197>50z&2=4<6;81C8:k4H550?!c12;>0eio50;9j`g<722coo7>5;hfg>5<908274=O<>o0D99<;%g5>72>ock3:17djk:188k41c2900qo=:4;291?6=8r.:5<4>309K02c<@==87)k9:368mag=831bho4?::kgg?6=3`no6=44o05g>5<55;294~"6180:?<5G46g8L1143-o=6?:4iec94?=nlk0;66gkc;29?lbc2900c<9k:188yg4>m3:197>50z&2=4<6;81C8:k4H550?!c12;>0eio50;9j`g<722coo7>5;hfg>5<908274=O<>o0D99<;%g5>72>ock3:17djk:188k41c2900qo=99;291?6=8r.:5<4>309K02c<@==87)k9:368mag=831bho4?::kgg?6=3`no6=44o05g>5<?7>55;294~"6180:?<5G46g8L1143-o=6?:4iec94?=nlk0;66gkc;29?lbc2900c<9k:188yg5383:197>50z&2=4<6;81C8:k4H550?!c12;>0eio50;9j`g<722coo7>5;hfg>5<908274=O<>o0D99<;%g5>72>ock3:17djk:188k41c2900qo<7a;291?6=8r.:5<4>309K02c<@==87)k9:368mag=831bho4?::kgg?6=3`no6=44o05g>5<55;294~"6180:?<5G46g8L1143-o=6?:4iec94?=nlk0;66gkc;29?lbc2900c<9k:188yg52:3:197>50z&2=4<6;81C8:k4H550?!c12;>0eio50;9j`g<722coo7>5;hfg>5<908274=O<>o0D99<;%g5>72>ock3:17djk:188k41c2900qo<6c;291?6=8r.:5<4>309K02c<@==87)k9:368mag=831bho4?::kgg?6=3`no6=44o05g>5<55;294~"6180:?<5G46g8L1143-o=6?:4iec94?=nlk0;66gkc;29?lbc2900c<9k:188yg50;3:187>50z&2=4<6;91C8:k4H550?!c12jo0eio50;9j`g<722coo7>5;n34`?6=3th8:h4?:583>5}#90;1=>>4H55f?M20;2.n:7mj;hfb>5<>i6?m0;66sm2`694?2=83:p(<7>:013?M20m2B?;>5+e78`a>oci3:17djm:188mae=831d=:j50;9~f600290?6=4?{%3:5?7482B?;h5G4618 `0=>2com7>5;hfa>5<93;8<6F;7d9K025<,l<1:6gka;29?lbe2900eim50;9l52b=831vn>=j:187>5<7s-;2=7?<0:J73`=O<>90(h856:kge?6=3`ni6=44iea94?=h9>n1<75rb3;a>5<2290;w)?61;305>N3?l1C8:=4$d4961=nlh0;66gkb;29?lbd2900eij50;9l52b=831vn?67:186>5<7s-;2=7?<1:J73`=O<>90(h85259j`d<722con7>5;hf`>5<6=4<:183!7>93;9j6F;7d9K025<,l<1>>5fd`83>>ocj3:17b?8d;29?xd6k:0;6>4?:1y'5<7=9;l0D99j;I647>"b>3887djn:188mad=831d=:j50;9~f74?290?6=4?{%3:5?7482B?;h5G4618 `0=9o1bhl4?::kgf?6=3`nh6=44o05g>5<54;294~"6180:?=5G46g8L1143-o=66<729q/=4?513d8L11b3A>5<7s-;2=7?=e:J73`=O<>90(h85139j`d<722e:;i4?::a6gd=8381<7>t$0;2>44b3A>5;n34`?6=3th9n44?:383>5}#90;1=?k4H55f?M20;2.n:7?=;hfb>5<90826`=O<>o0D99<;%g5>446=4=:183!7>93;9i6F;7d9K025<,l<1=?5fd`83>>i6?m0;66sm2c194?4=83:p(<7>:00f?M20m2B?;>5+e7826>oci3:17b?8d;29?xd5j80;6?4?:1y'5<7=9;o0D99j;I647>"b>3;97djn:188k41c2900qo2d9K02c<@==87)k9:008mag=831d=:j50;9~f6?629096=4?{%3:5?75m2B?;h5G4618 `0=9;1bhl4?::m23a<722wi?5h50;094?6|,83:6<N3?:1/i;4>2:kge?6=3f;5;|`05<52;294~"6180:>h5G46g8L1143-o=6<<4iec94?=h9>n1<75rb2::>5<5290;w)?61;31a>N3?l1C8:=4$d4957=nlh0;66a>7e83>>{e;1=1<7<50;2x 4?6288n7E:8e:J736=#m?0:>6gka;29?j70l3:17pl<8483>7<729q/=4?513g8L11b3A>7>50z&2=4<6:l1C8:k4H550?!c12880eio50;9l52b=831vn>6>:181>5<7s-;2=7?=e:J73`=O<>90(h85139j`d<722e:;i4?::a6f1=8381<7>t$0;2>44b3A>5;n34`?6=3th85n4?:383>5}#90;1=?k4H55f?M20;2.n:7?=;hfb>5<90826c=O<>o0D99<;%g5>75>i6?m0;66sm2g`94?5=83:p(<7>:00e?M20m2B?;>5+e7817>oci3:17djm:188k41c2900qo2g9K02c<@==87)k9:318mag=831bho4?::m23a<722wi>kj50;194?6|,83:6<N3?:1/i;4=3:kge?6=3`ni6=44o05g>5<53;294~"6180:>k5G46g8L1143-o=6?=4iec94?=nlk0;66a>7e83>>{e:ol1<7=50;2x 4?6288m7E:8e:J736=#m?09?6gka;29?lbe2900c<9k:188yg5783:1?7>50z&2=4<6:o1C8:k4H550?!c12;90eio50;9j`g<722e:;i4?::a757=8391<7>t$0;2>44a3A>5;hfa>5<90826c=O<>o0D99<;%g5>75>i6?m0;66sm33g94?3=83:p(<7>:012?M20m2B?;>5+e78g2>oci3:17djm:188mae=831bhi4?::m23a<722wi??j50;794?6|,83:6<=>;I64a>N3?:1/i;4=1:kge?6=3`ni6=44iea94?=nlm0;66a>7e83>>{e;>?1<7=50;2x 4?6288m7E:8e:J736=#m?0:>6gka;29?lbe2900c<9k:188yg4a13:1>7>50z&2=4<6:01C8:k4H550?lb>2900c<9k:188yg51n3:1>7>50z&2=4<6:01C8:k4H550?lb>2900c<9k:188yg55k3:197>50z&2=4<6;:1C8:k4H550?!c12;;0eio50;9j`g<722coo7>5;hfg>5<3:1908277=O<>o0D99<;%g5>70>ock3:17djk:188k44e2900c<9k:188yg7d:3:1:7>50z&2=4<6;;1C8:k4H550?!c12;<0eio50;9j`g<722coo7>5;hfg>5<5<>m7>58683>5}O<>90(<7>:0:5?_222hq26?95f;35>42=9j0:<7?8:0795a0=#m;0>7)k<:49'a1<23-ii6nh4$d591>"b03?0(h755:&fe?3<,lh196*jc;78 `b==2.ni7;4$dd91>"a83?0(k?55:&e6?3<,o9196*i4;78 c3==2.m:7;4$g591>"a03?0(k755:&ee?3<,oh196*ic;78 cb==2.mi7;4$gd91>"6890>7)??1;78 4652<1/===55:&241<23-;;97;4$025>0=#99=196*>0986?!7713?0(<>n:49'55d==2.:"6990>7)?>1;78 4752<1/=<=55:&251<23-;:97;4$035>0=#98=196*>1986?!7613?0("6:90>7)?=1;78 4452<1/=?=55:&261<23-;997;4$005>0=#9;=1?6*>8c876>"b=3?0(<6k:29'02>=91=0(996:0:4?k?b291eo=4?;o3;f`<,82n695f4`83>>o3j3:17d:86;29?lef2900e5650;&2<75$0:1>608082?>o4<3:1(<6=:248j4>62;10e>=50;&2<7<4>2d:4<4<;:k06?6=,8296>84n0:2>1=83802>h6080>76g<0;29 4>52:<0b<6>:798m7`=83.:4?4<6:l2<4<032c9i7>5$0:1>60808:?>o393:1(<6=:528j4>62910e>h50;&2<7<382d:4<4>;:k0a?6=,82969>4n0:2>7=83874>h6080876g52=:0b<6>:598m6d=83.:4?4;0:l2<4<232c8m7>5$0:1>168084?>o403:1(<6=:528j4>62110e8o50;&2<7<212d:4<4?;:k64=8386=>h6080976g:6;29 4>52<30b<6>:298m03=83.:4?4:9:l2<4<332c>87>5$0:1>0?56`>8085?>o1:3:1(<6=:4;8j4>62>10e;?50;&2<7<212d:4<47;:k54?6=,8296874n0:2><=8386=>h6080j76g:e;29 4>52<30b<6>:c98m0b=83.:4?4:9:l2<4o7>5$0:1>0?56`>808f?>o2;3:1(<6=:4;8j4>62o10e5950;&2<72d:4<4?;:k;1?6=,8296584n0:2>4=838a3>h6080;76am6;29 4>52k=0b<6>:098kg2=83.:4?4m7:l2<4<532ei?7>5$0:1>g154oc094?"60;0i;6`>8087?>ie93:1(<6=:c58j4>62<10co>50;&2<72=838a3>h6080376and;29 4>52k=0b<6>:898kde=83.:4?4m7:l2<45$0:1>g1808`?>if03:1(<6=:c58j4>62m10cl950;&2<7c=838a3>h6080:<65`a583>!7?:3h<7c?71;32?>if;3:1(<6=:c58j4>628807bo=:18'5=4=j>1e=5?51298kd7=83.:4?4m7:l2<4<6<21dm=4?:%3;6?d03g;3=7?:;:mab?6=,8296o94n0:2>40<3fhn6=4+1909f2=i91;1=:54ocf94?"60;0i;6`>8082<>=hjj0;6)?72;`4?k7?93;276amb;29 4>52k=0b<6>:0c8?jdf290/=5<5b69m5=7=9k10co750;&2<7c:9lf0<72-;3>7l8;o3;5?7c32ejm7>5$0:1>g15<#9181n:5a19395c=838`3>h6080;76al6;29 4>52j=0b<6>:098kf3=83.:4?4l7:l2<4<532eh87>5$0:1>f154ib;94?=n91l1<75f46594?=n?m0;6)?72;5`?k7?93:07d9m:18'5=4=?j1e=5?51:9j3<<72-;3>79l;o3;5?4<3`=36=4+19093f=i91;1?65f7683>!7?:3=h7c?71;68?l11290/=5<57b9m5=7==21b;84?:%3;6?1d3g;3=784;h57>5<#9181;n5a19393>=n?:0;6)?72;5`?k7?93207d9=:18'5=4=?j1e=5?59:9j34<72-;3>79l;o3;5?g<3`=;6=4+19093f=i91;1n65f6d83>!7?:3=h7c?71;a8?l0c290/=5<57b9m5=7=l21b:n4?:%3;6?1d3g;3=7k4;h4a>5<#9181;n5a1939b>=n>h0;6)?72;5`?k7?93;;76g99;29 4>52>i0b<6>:038?l0?290/=5<57b9m5=7=9;10e;950;&2<7<0k2d:4<4>3:9j23<72-;3>79l;o3;5?7332c=97>5$0:1>2e5<#9181;n5a193953=8384g>h6080:;65f8383>!7?:3=h7c?71;3;?>o?93:1(<6=:6a8j4>628307d6?:18'5=4=?j1e=5?51`98m2`=83.:4?48c:l2<4<6j21b;h4?:%3;6?1d3g;3=7?l;:k4e?6=,8296:m4n0:2>4b<3`8082b>=n0j0;6)?72;:a?k7?93:07d6n:18'5=4=0k1e=5?51:9j<<<72-;3>76m;o3;5?4<3f3?6=4+1909=6=i91;1<65`9383>!7?:3387c?71;38?j?6290/=5<5929m5=7=:21d5=4?:%3;6??43g;3=7=4;n:e>5<#91815>5a19390>=h0l0;6)?72;;0?k7?93?07b7k:18'5=4=1:1e=5?56:9l=f<72-;3>77<;o3;5?1<3f3i6=4+1909=6=i91;1465`9`83>!7?:3387c?71;;8?j?>290/=5<5929m5=7=i21d554?:%3;6??43g;3=7l4;n;4>5<#91815>5a1939g>=h1?0;6)?72;;0?k7?93n07b7::18'5=4=1:1e=5?5e:9l77<;o3;5?`<3fi86=4+1909g7=i91;1<65`c083>!7?:3i97c?71;38?xu2=o0;6;uQ54d897122mh01?9<:ec8971>2mn01?8k:ea8970d2mk0q~;:d;293`}Y<0<0R888;_751>X30?1U9;<4^432?[31>2T>=?5Q4868Z1?43W>2>6P;909]0<6X2?81U9:>4^44e?[31m2T>:i5Q57a8Z00e3W?=m6P:689]10eX2=<1U98:4=55e>a1<5=<268>4=57f>06<5=<368>4=544>06<5=<=68>4=552>06<5==;68>4=3``>04<5;hj68<4=3`;>04<5;h=68<4=3`7>04<5;h968<4=3`3>04<5;kn68<4=3gg>4>f348297;=;<0:0?353482?7;=;<0:6?353482=7;=;<0;6?353483=7;=;<0;4?35348i7;=;<16b?35349=<7;=;<155?3534>>m767;<66e?7?n27?9l4;769>00g=?m1688o57c9>00g=?01688o5799>00g=?>1688o5779>00g=?<1688o5759>00g=?:1688o5739>00g=?81688o5719>00g=>l1688o56e9>00g=>j1688o56c9>00g=>h1688o5689>00g=>11688o5669>00g=>?1688o5649>00g=0=1688o5829>00g=0;1688o5809>00g=091688o57g9>00g=?l1688o57`9>00g=>o1688o5659>00g=0j1688o58`9>00g=001v>8l:181[2??278:n4>859~w0062908wS;91:?72<<60:1688k51918yv40?3:1>vP:079>621=91>0q~;84;297~X2?=16?::5d`9>723=lh1v8;<:185<~X2=:16>l<5479>036=00c=031=640=<;5479>642=<=5479>644=646==h5479>65c=;<5479>637=;>5479>60`=8k5479>60b=8m5479>60d=8o5479>606=9h5479>61c=9j5479>61e=9l5479>61g=975479>61>=995479>5a>=5a0=5a2=5a4=5a6=i75479>6a>=i95479>6a0=i;5479>6a2=i<5479>6a7=i=5479>6`d=ho5479>6`?=h65479>6`1=h85479>6`3=h:5479>6`5=:85479>621=:?5479>626=07c=07e=07g=071=073=075=077=5479>04`=04e=04g=04>=040=042=;5479>062==5479>064=?5479>066=04c=044=1168;l5479>03?=027=5479>5g2=5g4=5g6=5dc=5de=5cd=5c?=5c1=5c3=5`g=5`>=5`0=5`2=5`4=>m5479>66d=>o5479>66?=>65479>661=>85479>663=>:5479>665=74`=74b=74d=74?=740=7gb=7ge=7g`=7f6=7f5=7a7=7a6=7a5=7a2=7a1=7d`=7g6=7dd=7d?=7dg=7`e=7`g=7`>=7`0=7`2=726=73e=h9:181[2c127?=o4>859~w6`22909wS:k8:?75d<60=1v>h;:181[2c?27?=44>859~w6`42909wS:k6:?75=<60=1v>h=:181[2c=27?=:4>859~w6`62909wS:k4:?753<60=1v>h?:181[2c:27?=84>859~w6ca2909wS:k1:?751<60=1v9?>:181[2c827??84>859~w1772909wS:lf:?771<60=1v9>i:181[2dm27??>4>859~w16b2909wS:ld:?777<60=1v9>k:181[2dk27??<4>859~w16d2909wS:lb:?775<60=1v9>m:181[2di27?>44>859~w1632909wS:l9:?75`<60=1v>h6:181[2d?27?=>4>859~w6cb2909wS:l6:?757<60=1v9>n:181[2d=27?>k4>859~w16>2909wS:l4:?76`<60=1v9>7:181[2d;27?>i4>859~w1602909wS:l2:?76f<60=1v9>9:181[2d927?>o4>859~w1622909wS:l0:?76d<60=1v9><:181[2en27?>54>859~w1652909wS:me:?762<60=1v9>>:181[2cn27?>;4>859~w1672909wS:ke:?760<60=1v>hi:181[2cl27?>94>859~w6`b2909wS:kc:?766<60=1v>hk:181[2cj27?>?4>859~w6`d2909wS:ka:?764<60=1v>hm:181[2c;27?>=4>859~w6`f2909wS:l8:?75c<60=1v>h7:181[2el27?=i4>859~w6`02909wS:mc:?75f<60=1v9l=:181[2f827?9l477:p0g6=838pR97i;<66e?3f3ty?mk4?:3y]0;3=h0>:6s|4`a94?4|V=3i70::a;76?xu3ik0;6?uQ48c8913f2<>0q~:na;296~X3101688o5629~w1de2909wS:n8:?71d<1:2wx8oo50;0xZ1g034>>m76:;|q7f<<72;qU8l84=57b>37i47>52z\7e0=:<5<5sW>j863;5`86b>{t7}YvP;a09>00g==j1v9l<:181[2>027?9l4:b:p0d?=838pR978;<66e?343ty:?44?:by>0=6=9>l01?lj:5;897gb2=301?kj:40897cc2=301?7>:5;8971b2=301>7=:5;896>72=301>=;:5;896202=301>;k:5;8yv4f;3:1>v3=a3864>;5i=0:;i5rs546>5<60r79m?4>829>03>=91>01?j6:5a897b?2=i01?j8:5a897b12=i01?j::5a897b32=i01?j=:5a897b6282870h70h70h70h70h70<86;3;7>;5?>0:4>5226390f=::>:18n5rs3c1>5<3s48j>7?74:?136<7p};6183>7}:ag=m7>53z?72g<2827?:44;7:?72d<60=1v98m:181821j3;3863;6e8ge>{t<06<5=?n6<6;;<656?be3ty?:44?:2y>03?=91>0198n:428910c2mh0q~:91;290~;3>10:4>5247595=5<5=<=6<6<;<656?70l2wx8;:50;05821?3;3863=1787g>;59<0?o63=1587g>;59:0?o63=1387g>;5980?o63=1187g>;58o0?o63=0d87g>;5>;0?o63=6087g>;5>90?o63=5g87g>;5=l0?o63=5e87g>;5=j0?o63=5c87g>;5=h0?o63=5187g>;5;5;5;5<00?o63=4987g>;5<>0?o63>d987g>;6l>0?o63>d787g>;6l<0?o63>d587g>;6l:0?o63>d387g>;6l80?o63>d187g>{tk4>849>07c=91?0194>234>9;7?75:?763<60<168?;519789143282>70:=3;3;1>;3:;0:485243395=3<5=8;6<6:;<62b?7?=27?=i4>849>04e=91?019?m:0:6?826i3;3963;1882<0=:<821=5;4=534>4>234>::7?75:?750<60<168<:519789152282>70:<4;3;1>;3;:0:485242095=3<5=9:6<6:;<604?7?=27?>44>849>04c=91?019?<:0:6?826:3;3963;5b8gf>;3=h0:5=5rs54`>5<4s4><=7?73:?735<60:168;j516f8yv21n3:1?>u246395=2<5:;<69m4=23e>1e<5:;n69m4=23g>1e<5:;h69m4=23a>1e<5:;j69m4=23:>1e<5:;369m4=235>1e<5:ho69m4=2`a>1e<5:hh6<6<;<1aa?2d349ij7:l;<1`6?2d349h<7:l;<1`5?2d349h?7:l;<1`0?2d349o=7:l;<1`b?7?;278h=4;c:?0`7<3k278h>4;c:?0`3<3k278h94;c:?0`0<3k278h:4;c:?0`=<3k278mk4;c:?0e`<3k278n=4;c:?0ef<3k278mo4;c:?0ea<3k278m44;c:?0e=<60:16?lo54b9>7d1=91901>kl:5a896ce2=i01>kn:5a896c>2=i01>k7:5a896c02=i01>k9:5a896c22=i01>k;:5a896c42=i0q~:9e;296d}:<>:1=5:4=0`7>1e<58h869m4=0`1>1e<58h:69m4=0`3>1e<58km69m4=0cf>1e<58ko69m4=0c`>1e<58lh69m4=0da>1e<58lj69m4=0d:>1e<58l369m4=0d4>1e<58l=69m4=0d6>1e<58l?69m4=0gb>1e<58o269m4=0g;>1e<58o<69m4=0g5>1e<58o>69m4=0g7>1e<58o869m4=0g1>1e<5;9h69m4=31a>1e<5;9j69m4=31:>1e<5;9369m4=314>1e<5;9=69m4=316>1e<5;9?69m4=310>1e<5:8j69m4=253>1e<5:=:69m4=24`>1e57>55z?153<28279:?4>859>64>=lk16>64e=lm1v?>k:180846>3;3863=9g8ge>;50j0om6s|20594?4|5;;>68>4=33;>41c3ty9643=91>01?7j:e`897>e2mh0q~<>9;296~;59=0><63=1`823a=z{;:i6=4<{<020?7?<2795h4kd:?1u220195=2<5;3o6il4=3:b>ad52z?157<28279=h4>7e9~w76>2908w0<>2;3;0>;51m0oh63=8`8g`>{t:8l1<706<5;8;6<9k;|q14=<72:q6>v3=11864>;5:;0:;i5rs324>5<4s48:<7?74:?1=fi:428974228=o7p}=0783>6}::9l1=5:4=3;a>ad<5;236il4}r013?6=:r79::180847m3;3863=9c8g`>;5010oh6s|1g194?3|58h?68>4=0d`>4>334;i:7jm;<3a;::ec896252mk01?h8:e`8yv7e=3:1>v3>b2864>;6j?0:;i5rs0cb>5<2s4;i?7?74:?02ga883>0}:9k81=5:4=24b>ag<5:??6io4=262>ag<5::;6il4}r3a=?6=>r7:n<4:0:?2fd<6?m16=om5dc9>5gc=lh16=n>5db9>5f4=lm1v;4==0oo63<408gg>;5no0on6s|1c`94?4|58h;68>4=0``>41c3ty:m:4?:4y>5g6=91>01>86:ec896342mk01>:?:ec897`b2mh0q~?md;296~;6io0><63>bd823a=z{8k=6=4:{<3bb?7?<278:44kc:?016ag<5:9m6io4=3d`>ad52z?2ea<2827:o>4>7e9~w4g3290>w0?nd;3;0>;4>10oo63<538gg>;4;o0oo63=fc8gf>{t9j?1<706<58i=6<9k;|q2e6<72;>:ec8965b2mk01?hn:e`8yv43>3:1>v3=63864>;5=90:495rs366>5<5s48==7;?;<07b?7?<2wx>8650;6x9706282?70<>8;fb?846i3ni70<>c;f`?xu5<=0;6?u2272915=::=o1=5:4}r063?6=;r79:=4>859>64g=lj16>60c==916>9m51968yv42=3:19v3=5d82<1=::8o1hl522329`g=::;81hi522369`f=z{;>:6=4={<06`?37348?n7?74:p602=83>p1?;k:0:7?84583nh70<=2;fb?845<3ni7p}=4183>7}::?7>53z?11f<60=16>?<5dc9>672=lh1v?=i:181842j3?;70<;9;3;0>{t:<81<7=t=37a>4>3348997jn;<0160g==916>9651968yv4293:1>v3=5`82<1=::;21hl5rs0g2>5<5s4;mo7;?;<3fe?7?<2wx=h>50;0x94`e2<:01ad<58hj6im4}r3gb?6=:r7:jl4:0:?2a=<60=1v:18087ai3;3863>b98gg>;6jh0on6s|1eg94?4|58l268>4=0g4>4>33ty:j=4?:3y>5c?=91>01v3>f9864>;6m?0:495rs0ge>5<2s4;m47?74:?2ffed83>1}:9o=1=5:4=0`f>ae<58i;6io4=0a1>ad52z?2b3<2827:i94>859~w4cc2908w0?i6;3;0>;6k90on63>c38ge>{t9mk1<706<58o86<6;;|q2af<72:q6=k;5196894e42mk01v3>f5864>;6m;0:495rs0ga>5<5s4;m87?74:?2g3><50;0x97372<:01?=l:0:7?xu5;80;6?u225d915=:::h1=5:4}r004?6=:r798h4:0:?17d<60=1v?{t:;o1<706<5;936<6;;|q16a<72;q6>9l5519>661=91>0q~<=c;296~;5<63=3782<1=z{;8i6=4={<07=?37348897?74:p67g=838p1?:7:4289753282?7p}=2883>7}::==19=5222195=251z?102<60=1v{t9jo1<706<58n<6<6;;|q2ga<72;q6=h65519>5a0=91>0q~?lc;296~;6m>0><63>d482<1=z{8ii6=4={<3f2?3734;o87?74:p5fg=838p1c883>7}:9l>19=521e095=252z?2a6<2827:h<4>859~w4e02909w0?j2;73?87c83;386s|2d094?3|58n368>4=3ga>4>334;2>7jn;<0;g?be34>>m7:>;|q2ba<72;q6=i95519>5<4=9>n0q~?ie;296~;6l?0><63>92823a=z{8lm6=4={<3g1?3734;287?8d:p656=838p17}:9m919=52184952b7>52z?2`7<2827:5:4>7e9~w7642909w0?k1;73?87>03;4=0;:>41c3ty8i?4?:5y>66e==916?hm5196894?f2mk019;n:258yv41;3:1>v3=3c864>;61h0:;i5rs347>5<5s488m7;?;<3:f?70l2wx>;;50;0x975>2<:01<7l:05g?xu5>?0;6?u222:915=:90n1=:j4}r053?6=:r79?:4:0:?2=`<6?m1v?87:181844>3?;70?6f;34`>{t:?31<706<58k;6<9k;|q12d<72;q6>>:5519>5d7=9>n0q~<9b;296~;5;:0><63>a3823a=z{;oh6=4>5z?1`<<3?279h54;7:?1`2<3?279h;4;7:?1`0<3?279h94;7:?1`7<3?279h<4;7:?1`6<3?279io4;7:?1ad<3?279i44;7:?1a=<3?279i:4;7:?1a3<3?279i84;7:?1a1<3?279i>4;7:?71f7e9>6d2=lk1v?ok:18184c13?;70{t:m:1<7:t=3f:>4>3348nn7;?;<0:b?be348h;7jn;|q1ef<72;q6>i65519>6f3=9>n0q~p1?j8:0:7?84b13?;70<6e;f`?84ej3nj7p}=a`83>7}::m<19=522b1952b54z?1`3<60=16>h65519>6o75d`9~w7g>2909w06<6;;<0f3?373482h7jl;<0a3?bf3ty9m54?:3y>6a2==916>n?516f8yv4dj3:18v3=d582<1=::l<19=5228a9`d=::k?1hl5rs3c5>5<5s48o>7;?;<0ab?70l2wx>n750;6x97b5282?70j3nj70859>6`5==916>4l5db9>6d`=lh1v?o8:18184c;3?;70{t:jk1<7:t=3f0>4>3348n97;?;<0:g?bd348i?7jn;|q1ff<72;q6>n85489>6ge=9>n0q~l522b5952b53z?1g0<31279nn4;9:?1fd<6?m1v?lk:18084d=3;9m63=bb827e9~w7de2908w0;5jh0:4l522c`952b53z?1g6<31279n54;9:?1f3<6?m1v?l6:18084d;3;9m63=b9827e9~w7d02908w0;5j?0:4l522c5952b7>53z?1g4<31279n94;9:?1f7<6?m1v?l::18084d93;9m63=b5827e9~w7d42908w0;5j;0:4l522c1952b53z?1fc<31279n=4;9:?1e`<6?m1v?l>:18084en3;9m63=b1822`9>6dc=91k01?oi:05g?xu5m80;68u22dc95=2<58386io4=0;1>ad<5;2i6io4=57b>6`55z?1a<<60=16=4:5d`9>5<5=lk16>5l5db9>00g=;l1v?ji:18684b03;3863>948ge>;61=0on63=8`8ge>;3=h08h6s|2eg94?3|5;o<6<6;;<3:2?bf34;297jm;<0;e?bd34>>m7=l;|q1`a<72h85196894?02mk01<79:e`897>>2mk019;n:2`8yv4ck3:19v3=e482<1=:9021hl521859`g=::131hn5244c97d=z{;ni6=4:{<0f0?7?<27:544ka:?2==io50;6x97c4282?70?69;fa?84?03nh70::a;1;?xu5?10;6>u2264915=::>=19=5226;952b52z?133<60=16>:75d`9~w7152909w0<81;73?840;3;626==916>:;516f8yv41m3:1:v3=7182<1=::>?1hl522619`g=::>31ho5227f9`g=::?i1hn5rs3d5>5<5s49;>7:6;<0e2?70l2wx>k950;0x9665288j70{t;;:1<741c349:;7;?;|q1b0<72:q6?=l5489>6c0=<016>k;516f8yv5793:1?v3<0c826d=::o<1=5o4=222>41c3ty8>44?:3y>75d=9>n01>?i:428yv5dl3:19v3=f7866>;4l>0:49523d`915=:;=81hi523139`d=z{;l?6=4<{<13e?2>348m97:6;<0e0?70l2wx?=>50;1x966f288j70;4890:;i5rs20;>5<5s49;m7?8d:?05`<282wx?nm50;7x97`22<801>j9:0:7?85bi3?;70=;1;fa?85783nj7p}=f283>6}:;93184522g690<=::o91=:j4}r0eb?6=;r78<44>2`9>6c2=91k01?hi:05g?xu4:>0;6?u231;952b<5:;o68>4}r1`f?6==r79j94:2:?0`0<60=16?h75519>717=lm16>kh5d`9~w7`52908w0=?8;6:?84a;3>270{t:oo1<7=t=22;>44f348m?7?7a:?1b`<6?m1v><9:18185703;{t;jk1<7;t=3d0>04<5:n?6<6;;<1f751=<016>k<5489>6c7=9>n0q~0:>l522g095=g<5;lo6<9k;|q060<72;q6?=9516f8967e2<:0q~=l9;291~;5n;0>>635<4s49;:7:6;<0e5?2>348m<7?8d:p6ce=839p1>>9:00b?84a93;3m63=fb823a=z{:8?6=4={<132?70l278=l4:0:p7f>=83?p1?h>:40896b5282?70=j6;73?854n3ni70u231790<=::o:184522dd952b53z?040<6:h16>k>519c897`e28=o7p}<2283>7}:;9?1=:j4=23:>0655z?1b5<2:278h<4>859>7`3==916?>h5de9>6cd=lh1v?kj:180857<3>2707e9~w6452909w0=?4;34`>;4910><6s|3b494?3|5;om68<4=2f3>4>3349n87;?;<10a?be348mm7jn;|q1aa<72:q6?==5489>6`c=<016>hj516f8yv4a03:1?v3<02826d=::lo1=5o4=3d:>41c3ty8><4?:3y>755=9>n01>?9:428yv50<3:1>lu22df917=:;kn18:523c`902=:;ki18:523cg902=:;kl18:523b0902=:;j:18:523b3902=:;j918:523b6902=:;m;18:523bd902=:;m:18:523e0902=:;m918:523e4902=:;m>18:523e7902=:;m=18:523e:902=:;hl18:523`g902=:;k:18:523`a902=:;hh18:523`f902=:;h318:523`:902=:;hk18:523`5902=:;li18:523d`902=:;lk18:523d;902=:;l218:523d5902=:;l<18:523d7902=:;l>18:523d1902=:;>?1=:j4}r13g?6=:r78=:4>859>77b=lh1v>?::181856n3;3863<2e8gg>{t;8>1<74>33499o7jk;|q056<72;q6?2;296~;49j0:495233a9`g=z{:;:6=4={<12f?7?<278>n4ka:p746=838p1>?n:0:7?855l3ni7p}<0g83>7}:;831=5:4=20f>ag52z?05=<60=16??k5dc9~w66c2909w0=>6;3;0>;4:l0oo6s|33d94?5|5:8j6994=24`>11<5:77b=9>n0q~<60;296~;51<0?563=95823a=z{;3j6=4={<0:1?7?i2795k4>7e9~w7g62909w0<65;34`>;5i=0om6s|29d94?4|5;3?6974=3;0>41c3ty9544?:3y>6<2=91k01?7j:05g?xu50l0;6?u228190<=::081=:j4}r0:4>8`9>6n0q~<7d;296~;51;0?563=90823a=z{;3<6=4={<0:6?7?i2795n4>7e9~w7?12909w0<61;3;e>;51k0:;i5rs35g>5<5s483>7:6;<0;5?70l2wx>5950;0x97>5282j70<7c;34`>{t:h:1<741c348j87jl;|q13f<72;q6>5?5489>6=6=9>n0q~<76;296~;5080:4l5229`952b52z?1<5<31279;k4>7e9~w7>22909w0<70;3;e>;50h0:;i5rs35b>5<5s485:50;0x971a282j70<79;34`>{t:191<74>f348347?8d:p7<`=83>p1>lk:42896g>282?70=98;fg?85?=3nj7p}6}:;kn1=5:4=2f2>06<5:?96ij4}r1:`?6=7=7=lh1v>l>:18085ej3;3863;4=80oo6s|38g94?2|5:hh68>4=2c;>4>3349=;7jm;<1;7?bf3ty8n?4?:2y>7ge=91>01>j?:42896362mh0q~=n0;290~;4jl0><63om:0:7?85113no70=79;fb?xu4j<0;6>u23cd95=2<5:n868>4=270>ab54z?0g7<28278mh4>859>73g=lk16?5h5d`9~w6d?2908w0=l2;3;0>;4l?0><63<558gf>{t;h81<7:t=2a3>06<5:kh6<6;;<15=?be3493n7jn;|q0f3<72:q6?n>5196896b32<:01>;<:e`8yv5f;3:18v3;4im0:495237c9`a=:;1n1hl5rs2`4>5<4s49h=7?74:?0`0<28278994kd:p7d3=83>p1>m<:42896ga282?70=9b;fg?85>93nj7p}6}:;j91=5:4=2f4>06<5:?>6ij4}r1b2?6=7ln:18085d<3;3863;4=<0on6s|3b794?2|5:im6<6;;<1f7?373498i7jl;<0e=?b>3ty8oh4?:5y>7a>=91>01>kl:42896252mh01?h8:ec8yv50m3:1>v3;41h0:;i5rs25g>5<5s49ji7;?;<1:=?70l2wx?:h50;0x96d72<:01>7m:05g?xu4?k0;6?u23`a915=:;0=1=:j4}r14e?6=:r78mo4:0:?0=3<6?m1v>9l:18185fl3?;70=68;34`>{t;>21<706<5:3?6<9k;|q032<72;q6?l65519>7<5=9>n0q~=89;296~;4ih0><63<94823a=z{:==6=4={<1b3?373492>7?8d:p7<6=838p1>7m:5;896?728=o7p}<9b83>7}:;0h1=?o4=2;`>41c3ty84h4?:2y>75489>7=c=9>n0q~=61;297~;41h0:>l5238295=g<5:3:6<9k;|q07=c=<016?5m516f8yv5?n3:1?v3<98826d=:;1o1=5o4=2:e>41c3ty84l4?:2y>7<>=<016?5m5489>7=g=9>n0q~=7d;297~;4110:>l5239a95=g<5:2o6<9k;|q0<=<72:q6?495489>7=g=<016?56516f8yv5?j3:1?v3<96826d=:;1k1=5o4=2:a>41c3ty84;4?:2y>7<0=<016?565489>7=0=9>n0q~=79;297~;41?0:>l5239:95=g<5:226<9k;|q0<1<72:q6?4;5489>7=0=<016?5:516f8yv5??3:1?v3<94826d=:;1<1=5o4=2:4>41c3ty84?4?:2y>7<2=<016?5:5489>7=4=9>n0q~=75;297~;41=0:>l5239695=g<5:2>6<9k;|q0<5<72:q6?4=5489>7=4=<016?5>516f8yv5?;3:1?v3<92826d=:;181=5o4=2:0>41c3ty84<4?:2y>7<4=9;k01>6?:0:b?85?93;7`g=91>01<7l:ec894?e2mh019;n:268yv5cn3:18v35rs2ff>5<3s49n47?74:?2=`m3ni70::a;12?xu4lj0;69u23d495=2<58k;6io4=0;e>ad<5=?j6>>4}r1gf?6=859>5d7=lh16=l>5dc9>00g=:o1v>jn:18785b<3;3863>a38ge>;6i80on63;5`81a>{t;m31<7=t=2g0>4>334;j>7jm;<66e?4c3ty8?44?:3y>762=91k01>=j:05g?xu4;90;6?u2326952b<5:9>6974}r10e?6=:r78?84>8`9>76`=9>n0q~=<1;296~;4;<0:;i5232490<=z{:9i6=4={<102?7?i2788=4>7e9~w6552909w0=<6;34`>;4;>0?56s|32a94?4|5:9<6<6n;<175?70l2wx?>=50;0x965028=o70=<8;6:?xu4;m0;6?u232:95=g<5:>96<9k;|q013<72;q6?>6516f896142mi0q~=;c;296~;4<>0:4l52343952b52z?002<6?m16?965489~w62c2909w0=;8;3;e>;4=;0:;i5rs267>5<5s49?47?8d:?00<<312wx?9k50;0x962>282j70=:3;34`>{t;=?1<741c349?m7:6;|q00c<72;q6?9o519c8963328=o7p}<4783>7}:;=k1=:j4=26a>1?<7>52z?00g<60h16?8;516f8yv52?3:1?v3<4c823a=:;>91hl5237g9`f=z{:<96=4={<16`?7?i278::4>7e9~w63>2909w0=:d;34`>;4=l0?56s|37194?4|5:?n6<6n;<15=0;6?u234d95=g<5:<26<9k;|q01g<72;q6?8h516f896072=30q~=95;296~;4>90:4l5237c952bo7>52z?025<6?m16?;?5489~w6012909w0=91;3;e>;4>k0:;i5rs27;>5<5s49==7?8d:?02`9>:428961428=o7p}<7183>1}:;>:1=5:4=257>ad<5:=>6il4=24e>a?52z?02f<28278:h4>7e9~w13c29099v3;2g873>;3:l0?;63;2e873>;3:j0?;63;2c873>;3:h0?;63;29873>;3:>0?;63;27873>;3:<0?;63;25873>;3::0?;63;23873>;3:80?;63;21873>;39o0?;63;1e873>;39j0?;63;1c873>;39h0?;63;18873>;3910?;63;16873>;39?0?;63;14873>;39=0?;63;34873>;3;=0?;63;32873>;3;;0?;63;30873>;3;90?;63;28873>;39l0?;63;12873>;39;0?;63=6e823a=z{=?96=4={<61b?3734>>m7m7;|q714<72;q68?k5519>00g=j11v9;?:181825l3?;70::a;`5?xu35<5s4>9n7;?;<66e?d43ty?8i4?:3y>07g==91688o5b39~w12e2909w0:=8;73?822i3h:7p};4`83>7}:<;=19=5244c9f5=z{=>26=4={<612?3734>>m7oi;|q70=<72;q68?;5519>00g=k?1v9:8:181825<3?;70::a;cf?xu35<5s4>9>7;?;<66e?gd3ty?894?:3y>077==91688o5ac9~w1242909w0:=0;73?822i3k27p};4383>7}:<8l19=5244c9e==z{=>;6=4={<62`?3734>>m7o8;|q77c<72;q6800g=i?1v9=j:181826j3?;70::a;a6?xu3;m0;6?u240c915=:<5<5s4>:57;?;<66e?g33ty??o4?:3y>04>==91688o5a29~w15f2909w0:>7;73?822i3k97p};3883>7}:<8<19=5244c9e4=z{=936=4={<621?3734>>m7o?;|q772<72;q68<:5519>00g=jo1v9;6:181824=3?;70::a;`f?xu3=10;6?u2426915=:<5<5s4>8?7;?;<66e?dc3ty?9;4?:3y>064==91688o5bb9~w1322909w0:<1;73?822i3hi7p};5583>7}:<::19=5244c9fd=z{=?86=4={<61=?3734>>m7l6;|q70f<72;q6800g=j<1v9:>:181826;3?;70::a;cb?xu3;?0;6?u2400915=:<5<5s4>>o7?8d:?71d8j:e`8961328=o70::a;642>;3=h0h56s|17094?4|5;8>6il4=307>44e3ty::i4?:3y>5f5=lk16=n<513`8yv45>3:1>v3=298gg>;5:=0:;i5rs0a7>5<5s4;h:7jl;<3`6?70l2wx??m50;0x964b2mn01><,==96<9?;|q616<72;qU98=4=569105<,==96<9>;|q7f7<72;qU8l>4=5690d6<,==96<:;;|q7f5<72;qU84h4=5690<`<,==96<:i;|q7ec<72;qU84k4=5690<,==96<8>;|q7fd<72;qU8l94=5690d1<,==96<8<;|q7f<<72;qU8l84=5690d0<,==96<8;;|q7f=<72;qU8l;4=5690d3<,==96<8:;|q7f2<72;qU8l:4=5690d2<,==96<89;|q7f3<72;qU8l=4=5690d5<,==96<88;|q7f0<72;qU8l<4=5690d4<,==96<87;|q7f1<72;qU8l?4=5690d7<,==96<86;|q7f6<72;qU8464=5690<><,==96<8n;|q7e<<72;qU8494=5690<1<,==96<8m;|q631<72;qU9::4=569122<,==96<8l;|q61c<72;qU98h4=56910`<,==96<8j;|q7ba<72;qU8i74=5690a?<,==96<9=;|q7bg<72;qU8i64=5690a><,==96<9<;|q7bd<72;qU8i94=5690a1<,==96<9;;|q7b<<72;qU8i84=5690a0<,==96<9:;|q7b=<72;qU8i;4=5690a3<,==96<99;|q7b2<72;qU8i:4=5690a2<,==96<98;|q7b0<72;qU8i<4=5690a4<,==96<97;|q7b1<72;qU8i?4=5690a7<,==96<96;|q7b6<72;qU8i>4=5690a6<,==96<9n;|q7b7<72;qU8nh4=5690f`<,==96<=n;|q7b4<72;qU8nk4=5690fc<,==96<=m;|q7b5<72;qU8nj4=5690fb<,==96<=l;|q7ac<72;qU8nm4=5690fe<,==96<=k;|q7a`<72;qU8nl4=5690fd<,==96<=j;|q7aa<72;qU8no4=5690fg<,==96<=i;|q7af<72;qU8n74=5690f?<,==96<:?;|q7ad<72;qU8n94=5690f1<,==96<:>;|q7a<<72;qU8n84=5690f0<,==96<:=;|q7a=<72;qU8n;4=5690f3<,==96<:<;|q7a2<72;qU8n:4=5690f2<,==96<::;|q7a3<72;qU8n=4=5690f5<,==96<:9;|q7a0<72;qU8n<4=5690f4<,==96<:8;|q7a1<72;qU8n?4=5690f7<,==96<:7;|q7a6<72;qU8n>4=5690f6<,==96<:6;|q7a7<72;qU8oh4=5690g`<,==96<:n;|q7a4<72;qU8ok4=5690gc<,==96<:m;|q641<72;qU8ih4=5690a`<,==96<:l;|q646<72;qU8ik4=5690ac<,==96<:k;|q647<72;qU8ij4=5690ab<,==96<:j;|q644<72;qU8im4=5690ae<,==96<;?;|q645<72;qU8il4=5690ad<,==96<;>;|q7bc<72;qU8io4=5690ag<,==96<;=;|q7b`<72;qU8i=4=5690a5<,==96<;<;|q7b3<72;qU8n64=5690f><,==96<;;;|q7ag<72;qU8oj4=5690gb<,==96<;:;|q7a5<72;qU8om4=5690ge<,==96<;9;|q64f<72;qU9=m4=56915e<,==96<;8;|q7<2<72;qU8594=5690=1<,==96<;7;|q643<72;qU9=84=569150<,==96<;n;|q674<72;qU9>?4=569167<,==96<;j;|mea?=838pD99<;|lb`d<72;qC8:=4}ocgf?6=:rB?;>5rn`f`>5<5sA>7}O<>90qcokf;296~N3?:1vblk?:181M20;2wemh?50;0xL1143tdji?4?:3yK02552zJ736=zfho?6=4={I647>{iil?1<7vF;729~jdc?2909wE:83:me`?=838pD99<;|lbad<72;qC8:=4}ocff?6=:rB?;>5rn`g`>5<5sA>7}O<>90qcojf;296~N3?:1vblh?:181M20;2wemk?50;0xL1143tdjj?4?:3yK02552zJ736=zfhl?6=4={I647>{iio?1<7vF;729~jd`?2909wE:83:mec?=838pD99<;|lbbd<72;qC8:=4}ocef?6=:rB?;>5rn`d`>5<5sA>7}O<>90qcoif;296~N3?:1vbo>?:181M20;2wen=?50;0xL1143tdi52zJ736=zfk:?6=4={I647>{ij9?1<7vF;729~jg6?2909wE:83:mf5?=838pD99<;|la4d<72;qC8:=4}o`3f?6=:rB?;>5rnc2`>5<5sA>7}O<>90qcl?f;296~N3?:1vbo??:181M20;2wen52zJ736=zfk;?6=4={I647>{ij8?1<7vF;729~j<7f290:wE:83:m=0?=83;pD99<;|l:1d<728qC8:=4}o;6f?6=9rB?;>5rn87`>5<6sA>4}O<>90qc7:f;295~N3?:1vb48?:182M20;2we5;?50;3xL1143td2:?4?:0yK02551zJ736=zf0{I647>{i1??1<7?tH550?xh>>?0;65rn84`>5<6sA>4}O<>90qc79f;295~N3?:1vb49?:182M20;2we5:?50;3xL1143td2;?4?:0yK02551zJ736=zf0=?6=4>{I647>{i1>?1<7?tH550?xh>??0;65rn85`>5<6sA>4}O<>90qc78f;295~N3?:1vb46?:182M20;2we55?50;3xL1143td24?4?:0yK02551zJ736=zf02?6=4>{I647>{i11?1<7?tH550?xh>0?0;6?290:wE:83:m==?=83;pD99<;|l:5rn8:`>5<6sA>4}O<>90qc77f;295~N3?:1vb47?:182M20;2we54?50;3xL1143td25?4?:0yK02551zJ736=zf03?6=4>{I647>{i10?1<7?tH550?xh>1?0;6?3:1=vF;729~j5rn8;`>5<6sA>4}O<>90qc76f;295~N3?:1vb4o?:182M20;2we5l?50;3xL1143td2m?4?:0yK02551zJ736=zf0k?6=4>{I647>{i1h?1<7?tH550?xh>i?0;65rn8c`>5<6sA>4}O<>90qc7nf;295~N3?:1vb4l?:182M20;2we5o?50;3xL1143td2n?4?:0yK02551zJ736=zf0h?6=4>{I647>{i1k?1<7?tH550?xh>j?0;65rn8``>5<6sA>4}O<>90qc7mf;295~N3?:1vb4m?:182M20;2we5n?50;3xL1143td2o?4?:0yK02551zJ736=zf0i?6=4>{I647>{i1j?1<7?tH550?xh>k?0;65rn8a`>5<6sA>4}O<>90qc7lf;295~N3?:1vb4j?:182M20;2we5i?50;3xL1143td2h?4?:0yK02551zJ736=zf0n?6=4>{I647>{i1m?1<7?tH550?xh>l?0;65rn8f`>5<6sA>4}O<>90qc7kf;295~N3?:1vb4k?:182M20;2we5h?50;3xL1143td2i?4?:0yK02551zJ736=zf0o?6=4>{I647>{i1l?1<7?tH550?xh>m?0;65rn8g`>5<6sA>4}O<>90qc7jf;295~N3?:1vb4h?:182M20;2we5k?50;3xL1143td2j?4?:0yK02551zJ736=zf0l?6=4>{I647>{i1o?1<7?tH550?xh>n?0;65rn8d`>5<6sA>4}O<>90qc7if;295~N3?:1vbl>?:182M20;2wem=?50;3xL1143tdj51zJ736=zfh:?6=4>{I647>{ii9?1<7?tH550?xhf8?0;65rn`2`>5<6sA>4}O<>90qco?f;295~N3?:1vbl??:182M20;2wem51zJ736=zfh;?6=4>{I647>{ii8?1<7?tH550?xhf9?0;65rn`3`>5<6sA>4}O<>90qco>f;295~N3?:1vbl?4?:0yK02551zJ736=zfh8?6=4>{I647>{ii;?1<7?tH550?xhf:?0;65rn`0`>5<6sA>4}O<>90qco=f;295~N3?:1vbl=?:182M20;2wem>?50;3xL1143tdj??4?:0yK02551zJ736=zfh9?6=4>{I647>{ii:?1<7?tH550?xhf;?0;65rn`1`>5<6sA>4}O<>90qco51zJ736=zfh>?6=4>{I647>{ii=?1<7?tH550?xhf5rn`6`>5<6sA>4}O<>90qco;f;295~N3?:1vbl;?:182M20;2wem8?50;3xL1143tdj9?4?:0yK025?7>51zJ736=zfh??6=4>{I647>{ii5rn`7`>5<6sA>4}O<>90qco:f;295~N3?:1vbl8?:182M20;2wem;?50;3xL1143tdj:?4?:0yK02551zJ736=zfh{I647>{ii??1<7?tH550?xhf>?0;65rn`4`>5<6sA>4}O<>90qco9f;295~N3?:1vbl9?:182M20;2wem:?50;3xL1143tdj;?4?:0yK02551zJ736=zfh=?6=4>{I647>{ii>?1<7?tH550?xhf??0;65rn`5`>5<6sA>4}O<>90qco8f;295~N3?:1vbl6?:182M20;2wem5?50;3xL1143tdj4?4?:0yK02551zJ736=zfh2?6=4>{I647>{ii1?1<7?tH550?xhf0?0;6?290:wE:83:me=?=83;pD99<;|lb5rn`:`>5<6sA>4}O<>90qco7f;295~N3?:1vbl7?:182M20;2wem4?50;3xL1143tdj5?4?:0yK02551zJ736=zfh3?6=4>{I647>{ii0?1<7?tH550?xhf1?0;6?3:1=vF;729~jd??290:wE:83:me5rn`;`>5<6sA>4}O<>90qco6f;295~N3?:1vblo?:182M20;2weml?50;3xL1143tdjm?4?:0yK02551zJ736=zfhk?6=4>{I647>{iih?1<7?tH550?xhfi?0;65rn`c`>5<6sA>4}O<>90qconf;295~N3?:1vbll?:182M20;2wemo?50;3xL1143tdjn?4?:0yK02551zJ736=zfhh?6=4>{I647>{iik?1<7?tH550?xhfj?0;65rn```>5<6sA>4}O<>90qcomf;295~N3?:1vblm?:182M20;2wemn?50;3xL1143tdjo?4?:0yK02551zJ736=zfhi?6=4>{I647>{iij?1<7?tH550?xhfk?0;65rn`a`>5<6sA>4}O<>90qcolf;295~N3?:1vblj?:182M20;2wemi?50;3xL1143tdjh?4?:0yK02551zJ736=zfhn?6=4>{I647>{iim?1<7?tH550?xhfl?0;66789:;<=>;0:23456789:;<=>?0123456789:;<=>?0123456789:;<=>?0123456789:;<=>?01084<7<9:1:"=?<;029MKVR\3KOH_O39;2=5`=683CE\XZ5psmd[cskdV~c~h}g<883:73<990BB][[:qplcZ`rdeUdk|h^cpw`ts400;2?;4118JJUSS2yxdkRhzlm]wlwct`Vdnklzj<883:4?<990DYY^ZT;fbpdYdg|d044?>0a855113922?OIX\^1HDO31483:45<9?0DYY^ZT;FLE972294:>6?7:HLSQQ11:07?754;8;0>7GAPTV9@LVF480;2<<42;MVPUSS2ME[M1?50?31?64=AGZ^X7JFB=12>586;2996B[[PTV9@JD;;80;2<:4378LQQVR\3ndyy2<5;2=`>5t:9:;jj::6,72?12<<9LM=<5;:HLSQQ11397>JSSX\^1HB^M<283:4=1:2<286869768<567<22N4L?4959:45?530;>585=231EC^ZT;rqkbYbey~rSyf}erj\evubz}636=0=5:;9MKVR\3zycjQjmqvz[qnumzbTbhintd>;>586j231CXZ_UU8q`Zbf|hUhcx`{<983:7=F:11JHI\N<1<;?DBCZH6:255NDEPB878?3HNO^L2<>99B@ATF4=437LJKR@>6:==FLMXJ0;07;@FGVD:0611JHI\N<9611JHI\M<1<;?DBCZK6:255NDEPA878?3HNO^O2<>99B@ATE4=437LJKRC>6:==FLMXI0;07;@FGVG:06h1JHI\M<983:==FLMXI050<;@NO=>GTQGIT^HI<;CW1<>DR[VCEJB?4C39@A44EKCK90OA\6;BMNILRSMM;?7NA]E^EFJ@TF\@EESD@IO69@V@GSMM;0H?5KC39GM3=CAH6;2:5KI@>24;169GMD:6<730HDO31483:2=CAH6:9384DHC?5;0384DHC?7;01OEO2>3?58@LD;9=4<7IGM<07=3>BNJ5;=2:5KIC>23;12NBN1?17:FJF9476>1OEO2=1?58@LD;:;4<7IGM<31=3>BNJ58?2:5KIC>11;1;08;EKA8719?2NBN1<7>69GMG:517<0HDL32?58@LD;;9427IGM<2394;119:FJTD:6294<7IG_A=3=3>BNXK6;2:5KIQ@?5;1BHI5;:2:5KO@>26;108;EMB842912NDM1?::1<4?AIF48?5:6J@A=3=2>BHI585:6J@A=1=2>BHI5>5:6J@A=7=2>BHI5<5:6J@A=5=2>BHI525:6J@A=;=3>BHIVXNK;5KOC>3:2=CGK6:<394DN@?54803MEI0<<17:FLF9746>1OCO2>4?58@JD;9<4<7IAM<04=3>BHJ5;<2:5KOC>2<;117:FLF9466>1OCO2=2?58@JD;::4<7IAM<36=3>BHJ58>2:5KOC>12;1:08;EMA87>9?2NDN1<6>79GKG:56>1OCO2<0?;8@JD;;80;2:5KOC>05;019:FLTD:6294<7IA_A=3=3>BHXK6;2:5KOQ@?5;16H75:DBHVC53ON87KJL4:DGG@56G>2:K16>O402CEEY^P01:8MKOSXV::46GAIUR\47><8:KMMQVX8=20ECG[P^26<>OIA]ZT<;64IOKWTZ6012CEEY][AUG4?LHN\V:;;6GAIU]352=NF@^T;7:KMMQY7=>1BBDZP0758MKOSW9=<7D@FT^2;3>OIA]U;5:5FNHV\4D11BBDZP1758MKOSW8=<7D@FT^3;3>OIA]U:5:5FNHV\5D1D69JJLRX9L=0ECG[_0D4?LHN\V8;;6GAIU]152=NF@^T>?94IOKW[7503@DBXR<;7:KMMQY5=>1BBDZP2758MKOSW;=<7D@FT^0;3>OIA]U95:5FNHV\6D11BBDZP3758MKOSW:=<7D@FT^1;3>OIA]U85:5FNHV\7D1L8;HLJPZ5D?2CEEYQ6B@6:NLEACC?2FDKDMNL59OQQ733E__>95CUU17?ISS0168J466<2D:H68=>0B<>:4:L24320968J46>;2D:=95A1027?K769=1E=<<;;O3271=I98>?7C?>559M54033G;:;95A10:7?K761:1E=?:4N0030>H6:8>0B<<=4:L26622468J441<2D:>::4N00;7>H6;=1E=>?<;O377>H6=:1E=;:4N0477>H6?:1E=5=4N0;1?K443G8;?6@=129M675H51;1E?>5A3108J0480B4=4N830?K?5;2D2?>5A9518J<343G3=?6@6729M==56^Q2h1YILJPFHPPPf=UMHNT[DJ[H^C`?WCFLV]BHYFPB09P56=TADUHCABFSHMM[FNBKB<0_B[]CD58WWPFDVK<7^\YAM]A0>UTZH>0_^\M4:VZT@553\:$kh!rg-dg}(ddbr$Aua}_sf\tkruWniTtb|?012\V`urd};8>6[?/fpe*w`(ojr%oaew/LzlvZtcWyd~Ril_ymq4566W[oxyaz>339V4*aun'xm#jmw.bnh|*Kg{UyhR~ats]dgZ~hz9:;>R\jstnw564<]9%l~k }f.e`|+ekcq%Ftb|Pre]sjqtXojUsc>?02]Qavsk|8997X> gsd-vc)`kq$h`fv Mymq[wbXxg~ySjmPxnp3452XZly~`y?<2:W3+bta&{l$knv!cmi{+H~hzVxoS}`{r^e`[}iu89:>S_k|umv277=R8&myj#|i/fa{*fjlp&GscQ}d^rmpwY`kVrd~=>?6^Pfwpjs9:80Y=!hrg,qb*adp'iggu!Bxnp\vaYwf}xTknQwos2342YUmzgx<==;T2,cw`)zo%lou lljz,I}iuW~xT|cz}_fa\|jt789:T^h}zlu306>S7'nxm"h gbz-gim'Drd~Ry}_qlwvZadWqey<=>>_Sgpqir6;;1^<"i}f/pe+be&jf`t"Cwos]tvZvi|{UloRv`r1236ZTb{|f=><4U1-dvc(un&mht#mcky-N|jtX{U{by|Pgb]{kw678:UYi~{ct011?P6(o{l%~k!hcy,`hn~(EqeySz|Ppovq[beXpfx;<=:PRdqvhq74:2_;#j|i.sd,cf~)keas#@v`r^uq[uhszVmhSua}0126[Wct}e~:??5Z0.eqb+ta'nis"nbdx.O{kwYpzVzexQhc^zlv567>VXnxb{1208Q5)`zo$yj"ilx/aoo})JpfxT{Qnup\cfYg{:;<:Q]erwop4553\:$kh!rg-dg}(ddbr$Aua}_vp\tkruWniTtb|?01:\V`urd};9=6[?/fpe*w`(ojr%oaew/sf\tkruWkce0=0=1:W3+bta&{l$knv!cmi{+wbXxg~ySoga<0<15>S7'nxm"h gbz-gim'{nT|cz}_ckm878592_;#j|i.sd,cf~)keas#jPpovq[goi4:49=6[?/fpe*w`(ojr%oaew/sf\tkruWkce090=1:W3+bta&{l$knv!cmi{+wbXxg~ySoga<4<15>S7'nxm"h gbz-gim'{nT|cz}_ckm838592_;#j|i.sd,cf~)keas#jPpovq[goi4>49=6[?/fpe*w`(ojr%oaew/sf\tkruWkce050=0:W3+bta&{l$knv!cmi{+wbXxg~ySoga_103?P6(o{l%~k!hcy,`hn~(zmU{by|Pbhl\576<]9%l~k }f.e`|+ekcq%yhR~ats]amkY5:91^<"i}f/pe+be&jf`t"|k_qlwvZdnfV99<6[?/fpe*w`(ojr%oaew/sf\tkruWkceS9 gsd-vc)`kq$h`fv re]sjqtXj`dTtb|?01213>S7'nxm"h gbz-gim'{nT|cz}_ckm[}iu89:;=?84U1-dvc(un&mht#mcky-q`Zvi|{UiecQwos2344403\:$kh!rg-dg}(ddbr$~iQnup\flhXpfx;<=?>279V4*aun'xm#jmw.bnh|*tcWyd~Rlfn^zlv567:;=0Y=!hrg,qb*adp'iggu!}d^rmpwYeagUsc>?03312>S7'nxm"h gbz-gim'{nT|cz}_ckm[}iu89:8>:5Z0.eqb+ta'nis"nbdx.pg[uhszVhbbRv`r12377413\:$kh!rg-dg}(ddbr$~iQnup\flhXpfx;<=:=7:W3+bta&{l$knv!cmi{+wbXxg~ySoga_ymq45639;<0Y=!hrg,qb*adp'iggu!}d^rmpwYeagUsc>?0404?P6(o{l%~k!hcy,`hn~(zmU{by|Pbhl\|jt789?:>;5Z0.eqb+ta'nis"nbdx.pg[uhszVhbbRv`r12327><]9%l~k }f.e`|+ekcq%yhR~ats]amkYg{:;<;?>269V4*aun'xm#jmw.bnh|*tcWyd~Rlfn^zlv567>;8i7X> gsd-vc)`kq$h`fv re]sjqtXj`dTtb|?014\fab7:?1^<"i}f/pe+be&jf`t"|k_qlwvZdnfVrd~=>?7358Q5)`zo$yj"ilx/aoo})ulVzexQmio]{kw678>;9<6[?/fpe*w`(ojr%oaew/sf\tkruWni7<3>328Q5)`zo$yj"ilx/aoo})ulVzexQhc=0=65=R8&myj#|i/fa{*fjlp&xoS}`{r^e`868582_;#j|i.sd,cf~)keas#jPpovq[be;<78;7X> gsd-vc)`kq$h`fv re]sjqtXoj6>2?>4U1-dvc(un&mht#mcky-q`Zvi|{Ulo181219V4*aun'xm#jmw.bnh|*tcWyd~Ril<6<14>S7'nxm"h gbz-gim'{nT|cz}_fa?<;7a3\:$kh!rg-dg}(ddbr$~iQnup\cfY79o1^<"i}f/pe+be&jf`t"|k_qlwvZadW8;m7X> gsd-vc)`kq$h`fv re]sjqtXojU9=k5Z0.eqb+ta'nis"nbdx.pg[uhszVmhS>?i;T2,cw`)zo%lou lljz,vaYwf}xTknQ;1g9V4*aun'xm#jmw.bnh|*tcWyd~Ril_43e?P6(o{l%~k!hcy,`hn~(zmU{by|Pgb]55c=R8&myj#|i/fa{*fjlp&xoS}`{r^e`[27a3\:$kh!rg-dg}(ddbr$~iQnup\cfY?:?1^<"i}f/pe+be&jf`t"|k_qlwvZadWhyyij2?>348Q5)`zo$yj"ilx/aoo})ulVzexQhc^cpv`a;978=7X> gsd-vc)`kq$h`fv re]sjqtXojUjkh<3<12>S7'nxm"h gbz-gim'{nT|cz}_fa\evtbo595>;5Z0.eqb+ta'nis"nbdx.pg[uhszVmhSl}}ef>7:70<]9%l~k }f.e`|+ekcq%yhR~ats]dgZgtzlm793<9;T2,cw`)zo%lou lljz,vaYwf}xTknQnssgd8385>2_;#j|i.sd,cf~)keas#jPpovq[beXizxnk191279V4*aun'xm#jmw.bnh|*tcWyd~Ril_`qqab:?6;?0Y=!hrg,qb*adp'iggu!}d^rmpwY`kVkx~hiP0378Q5)`zo$yj"ilx/aoo})ulVzexQhc^cpv`aX9;?0Y=!hrg,qb*adp'iggu!}d^rmpwY`kVkx~hiP2378Q5)`zo$yj"ilx/aoo})ulVzexQhc^cpv`aX;;?0Y=!hrg,qb*adp'iggu!}d^rmpwY`kVkx~hiP4378Q5)`zo$yj"ilx/aoo})ulVzexQhc^cpv`aX=;?0Y=!hrg,qb*adp'iggu!}d^rmpwY`kVkx~hiP6378Q5)`zo$yj"ilx/aoo})ulVzexQhc^cpv`aX?;?0Y=!hrg,qb*adp'iggu!}d^rmpwY`kVkx~hiP83;8Q5)`zo$yj"ilx/aoo})ulVzexQhc^cpv`aXl86;2?74U1-dvc(un&mht#mcky-q`Zvi|{UloRo|rde\`4:66;30Y=!hrg,qb*adp'iggu!}d^rmpwY`kVkx~hiPd0>1:7?<]9%l~k }f.e`|+ekcq%yhR~ats]dgZgtzlmTh<2<>3;8Q5)`zo$yj"ilx/aoo})ulVzexQhc^cpv`aXl86?2?74U1-dvc(un&mht#mcky-q`Zvi|{UloRo|rde\`4:26;30Y=!hrg,qb*adp'iggu!}d^rmpwY`kVkx~hiPd0>5:7?<]9%l~k }f.e`|+ekcq%yhR~ats]dgZgtzlmTh<28>3;8Q5)`zo$yj"ilx/aoo})ulVzexQhc^cpv`aXl8632?64U1-dvc(un&mht#mcky-q`Zvi|{UloRo|rde\`4Y7:11^<"i}f/pe+be&jf`t"|k_qlwvZadWhyyijQk1^31<>S7'nxm"h gbz-gim'{nT|cz}_fa\evtboVn:S?<7;T2,cw`)zo%lou lljz,vaYwf}xTknQnssgd[a7X;;20Y=!hrg,qb*adp'iggu!}d^rmpwY`kVkx~hiPd0]76==R8&myj#|i/fa{*fjlp&xoS}`{r^e`[duumnUo=R;=8:W3+bta&{l$knv!cmi{+wbXxg~ySjmParpfcZb6W?837X> gsd-vc)`kq$h`fv re]sjqtXojUjkh_e3\37><]9%l~k }f.e`|+ekcq%yhR~ats]dgZgtzlmTh>249V4*aun'xm#jmw.bnh|*tcWyd~Ril_ymq4565:<1^<"i}f/pe+be&jf`t"|k_qlwvZadWqey<=><249V4*aun'xm#jmw.bnh|*tcWyd~Ril_ymq4563:<1^<"i}f/pe+be&jf`t"|k_qlwvZadWqey<=>:249V4*aun'xm#jmw.bnh|*tcWyd~Ril_ymq4561:<1^<"i}f/pe+be&jf`t"|k_qlwvZadWqey<=>8209V4*aun'xm#jmw.bnh|*quWyd~Rlfn=3=64=R8&myj#|i/fa{*fjlp&}yS}`{r^`jj949:81^<"i}f/pe+be&jf`t"y}_qlwvZdnf595><5Z0.eqb+ta'nis"nbdx.uq[uhszVhbb1:1209V4*aun'xm#jmw.bnh|*quWyd~Rlfn=7=64=R8&myj#|i/fa{*fjlp&}yS}`{r^`jj909:81^<"i}f/pe+be&jf`t"y}_qlwvZdnf5=5><5Z0.eqb+ta'nis"nbdx.uq[uhszVhbb161209V4*aun'xm#jmw.bnh|*quWyd~Rlfn=;=65=R8&myj#|i/fa{*fjlp&}yS}`{r^`jjZ7582_;#j|i.sd,cf~)keas#z|Ppovq[goiW;8;7X> gsd-vc)`kq$h`fv ws]sjqtXj`dT??>4U1-dvc(un&mht#mcky-tvZvi|{UiecQ;219V4*aun'xm#jmw.bnh|*quWyd~Rlfn^714>S7'nxm"h gbz-gim'~xT|cz}_ckm[3473\:$kh!rg-dg}(ddbr${Qnup\flhX?;:0Y=!hrg,qb*adp'iggu!xr^rmpwYeagU3>=5Z0.eqb+ta'nis"nbdx.uq[uhszVhbbR7=6:W3+bta&{l$knv!cmi{+rtXxg~ySoga_ymq4567:>1^<"i}f/pe+be&jf`t"y}_qlwvZdnfVrd~=>?0005?P6(o{l%~k!hcy,`hn~({U{by|Pbhl\|jt789;9;6[?/fpe*w`(ojr%oaew/vp\tkruWkceSua}0122570<]9%l~k }f.e`|+ekcq%|~R~ats]amkYg{:;?3358Q5)`zo$yj"ilx/aoo})pzVzexQmio]{kw678:89:6[?/fpe*w`(ojr%oaew/vp\tkruWkceSua}012762=R8&myj#|i/fa{*fjlp&}yS}`{r^`jjZ~hz9:;8<<9;T2,cw`)zo%lou lljz,swYwf}xTnd`Pxnp34535?2_;#j|i.sd,cf~)keas#z|Ppovq[goiWqey<=>:1348Q5)`zo$yj"ilx/aoo})pzVzexQmio]{kw678?837X> gsd-vc)`kq$h`fv ws]sjqtXj`dTtb|?0142571<]9%l~k }f.e`|+ekcq%|~R~ats]amkYg{:;<;<=b:W3+bta&{l$knv!cmi{+rtXxg~ySoga_ymq4561Wkno219V4*aun'xm#jmw.bnh|*quWyd~Ril<1<14>S7'nxm"h gbz-gim'~xT|cz}_fa?5;473\:$kh!rg-dg}(ddbr${Qnup\cf:56;:0Y=!hrg,qb*adp'iggu!xr^rmpwY`k595>=5Z0.eqb+ta'nis"nbdx.uq[uhszVmh090=0:W3+bta&{l$knv!cmi{+rtXxg~ySjm35?03?P6(o{l%~k!hcy,`hn~({U{by|Pgb>5:76<]9%l~k }f.e`|+ekcq%|~R~ats]dg919:91^<"i}f/pe+be&jf`t"y}_qlwvZad4149<6[?/fpe*w`(ojr%oaew/vp\tkruWni753?i;T2,cw`)zo%lou lljz,swYwf}xTknQ?1g9V4*aun'xm#jmw.bnh|*quWyd~Ril_03e?P6(o{l%~k!hcy,`hn~({U{by|Pgb]15c=R8&myj#|i/fa{*fjlp&}yS}`{r^e`[67a3\:$kh!rg-dg}(ddbr${Qnup\cfY39o1^<"i}f/pe+be&jf`t"y}_qlwvZadW<;m7X> gsd-vc)`kq$h`fv ws]sjqtXojU==k5Z0.eqb+ta'nis"nbdx.uq[uhszVmhS:?i;T2,cw`)zo%lou lljz,swYwf}xTknQ71g9V4*aun'xm#jmw.bnh|*quWyd~Ril_805?P6(o{l%~k!hcy,`hn~({U{by|Pgb]bwwc`4949:6[?/fpe*w`(ojr%oaew/vp\tkruWniTm~|jg=3=63=R8&myj#|i/fa{*fjlp&}yS}`{r^e`[duumn692?84U1-dvc(un&mht#mcky-tvZvi|{UloRo|rde?7;413\:$kh!rg-dg}(ddbr${Qnup\cfYf{{ol090=6:W3+bta&{l$knv!cmi{+rtXxg~ySjmParpfc939:?1^<"i}f/pe+be&jf`t"y}_qlwvZadWhyyij29>348Q5)`zo$yj"ilx/aoo})pzVzexQhc^cpv`a;?78=7X> gsd-vc)`kq$h`fv ws]sjqtXojUjkh<9<12>S7'nxm"h gbz-gim'~xT|cz}_fa\evtbo535>85Z0.eqb+ta'nis"nbdx.uq[uhszVmhSl}}ef]360=R8&myj#|i/fa{*fjlp&}yS}`{r^e`[duumnU:>85Z0.eqb+ta'nis"nbdx.uq[uhszVmhSl}}ef]160=R8&myj#|i/fa{*fjlp&}yS}`{r^e`[duumnU8>85Z0.eqb+ta'nis"nbdx.uq[uhszVmhSl}}ef]760=R8&myj#|i/fa{*fjlp&}yS}`{r^e`[duumnU>>85Z0.eqb+ta'nis"nbdx.uq[uhszVmhSl}}ef]560=R8&myj#|i/fa{*fjlp&}yS}`{r^e`[duumnU<>85Z0.eqb+ta'nis"nbdx.uq[uhszVmhSl}}ef];60=R8&myj#|i/fa{*fjlp&}yS}`{r^e`[duumnU2>45Z0.eqb+ta'nis"nbdx.uq[uhszVmhSl}}ef]g5979:01^<"i}f/pe+be&jf`t"y}_qlwvZadWhyyijQk1=0=6<=R8&myj#|i/fa{*fjlp&}yS}`{r^e`[duumnUo=1=1289V4*aun'xm#jmw.bnh|*quWyd~Ril_`qqabYc95>5>45Z0.eqb+ta'nis"nbdx.uq[uhszVmhSl}}ef]g5939:01^<"i}f/pe+be&jf`t"y}_qlwvZadWhyyijQk1=4=6<=R8&myj#|i/fa{*fjlp&}yS}`{r^e`[duumnUo=191289V4*aun'xm#jmw.bnh|*quWyd~Ril_`qqabYc9525>45Z0.eqb+ta'nis"nbdx.uq[uhszVmhSl}}ef]g59?9:11^<"i}f/pe+be&jf`t"y}_qlwvZadWhyyijQk1^31<>S7'nxm"h gbz-gim'~xT|cz}_fa\evtboVn:S?<7;T2,cw`)zo%lou lljz,swYwf}xTknQnssgd[a7X;;20Y=!hrg,qb*adp'iggu!xr^rmpwY`kVkx~hiPd0]76==R8&myj#|i/fa{*fjlp&}yS}`{r^e`[duumnUo=R;=8:W3+bta&{l$knv!cmi{+rtXxg~ySjmParpfcZb6W?837X> gsd-vc)`kq$h`fv ws]sjqtXojUjkh_e3\37><]9%l~k }f.e`|+ekcq%|~R~ats]dgZgtzlmThS7'nxm"h gbz-gim'~xT|cz}_fa\|jt789;996[?/fpe*w`(ojr%oaew/vp\tkruWniTtb|?01011>S7'nxm"h gbz-gim'~xT|cz}_fa\|jt7899996[?/fpe*w`(ojr%oaew/vp\tkruWniTtb|?01611>S7'nxm"h gbz-gim'~xT|cz}_fa\|jt789?996[?/fpe*w`(ojr%oaew/vp\tkruWniTtb|?01411>S7'nxm"h gbz-gim'~xT|cz}_fa\|jt789=996[?/fpe*w`(ojr%oaew/vp\tkruWniTtb|?01:04>S7'nxm"h gm2-va)`z8$yjzh{/Lov|ZTFEVXOSH@PFVDW644a3\:$kh!rg-dh5(ul&my=#|iwgv,IhsW[KFS_KHOTV\AK76:m1^<"i}f/pe+bj7&{n$k?!rguep*erz{Um{kzPsucwa969:m1^<"i}f/pe+bj7&{n$k?!rguep*erz{Um{kzPsucwa979:j1^<"i}f/pe+bj7&{n$k?!rguep*erz{Um{kzPsucwaZ65k2_;#j|i.sd,ci6)zm%l~< }fvdw+fsuzVl|jyQ|t`vf[4523\:$kh!rg-dh5(ul&my=#|iwgv,gptuWo}mxR}{aug\ip~789;7<3=9;T2,cw`)zo%l`= }d.eq5+tao~$ox|}_guepZusi}oTaxv?013?4;74=2_;#j|i.sd,ci6)zm%l~< }fvdw+fsuzVl|jyQ|t`vf[hs89::0<0<6:W3+bta&{l$ka>!re-dv4(un~l#n{}r^dtbqYt|h~nS`{w01228486:11^<"i}f/pe+bj7&{n$k?!rguep*cjx}sTjzh{_g`13>S7'nxm"h gm2-va)`z8$yjzh{/dosp|Yao~Te?h4U1-dvc(un&mg<#|k/fp2*w`pn}%na}zv_guepZoXe|r;<=><0:W3+bta&{l$ka>!re-dv4(un~l#hctx]escrXaVg~t=>?000:?P6(o{l%~k!hl1,q`*auiz$yy} c1-`ewt~fl~7<3<6;T2,cw`)zo%l`= }d.eqev(u{}y$o=!laspzj`r;97827X> gsd-vc)`d9$yh"i}ar,qwqu(k9%hm|vndv?6;4>3\:$kh!rg-dh5(ul&mym~ }suq,g5)di{xrbhz33?0e?P6(o{l%~k!hl1,q`*auiz$yy} c1-dip~)odQ;Q#ib1/o26c=R8&myj#|i/fn3*wb(o{kx"}{s.a3+bkrp'mfW gsd-vc)`d9$yh"i}ar,qwqu(k9%laxv!glY7Y+aj{'gx>>5Z0.eqb+ta'nf;"j gscp*wus{&i;#{?30?00?P6(o{l%~k!hl1,q`*auiz$yy} c1-u5979::1^<"i}f/pe+bj7&{n$ko|.sqww*e7';7>3<<;T2,cw`)zo%l`= }d.eqev(u{}y$o=!y1=1=66=R8&myj#|i/fn3*wb(o{kx"}{s.a3+s7;<78i7X> gsd-vc)`d9$yh"i}ar,qwqu(k9%}=R>Paof34566:k1^<"i}f/pe+bj7&{n$ko|.sqww*e7';T=Road123444e3\:$kh!rg-dh5(ul&mym~ }suq,g5)q9V8Tmcj?01226g=R8&myj#|i/fn3*wb(o{kx"}{s.a3+s7X;Vkeh=>?000a?P6(o{l%~k!hl1,q`*auiz$yy} c1-u5Z2Xff~;<=>>289V4*aun'xm#jb?.sf,cwgt&{y"m>/bcqv|hb|5:5>45Z0.eqb+ta'nf;"j gscp*wus{&i:#no}rxlfp979:01^<"i}f/pe+bj7&{n$ko|.sqww*e6'jky~t`jt=0=6<=R8&myj#|i/fn3*wb(o{kx"}{s.a2+fguzpdnx1=12g9V4*aun'xm#jb?.sf,cwgt&{y"m>/fov|+ajS9W%k`?!m00e?P6(o{l%~k!hl1,q`*auiz$yy} c0-dip~)odQ:Q#ibs/op6c=R8&myj#|i/fn3*wb(o{kx"}{s.a2+bkrp'mfW?S!glq-iv4a3\:$kh!rg-dh5(ul&mym~ }suq,g4)`e|r%k`U<]/enw+kt:o1^<"i}f/pe+bj7&{n$ko|.sqww*e6'ng~t#ib[5_-chu)ez887X> gsd-vc)`d9$yh"i}ar,qwqu(k8%}=1>1229V4*aun'xm#jb?.sf,cwgt&{y"m>/w3?5;443\:$kh!rg-dh5(ul&mym~ }suq,g4)q9585>>5Z0.eqb+ta'nf;"j gscp*wus{&i:#{?33?00?P6(o{l%~k!hl1,q`*auiz$yy} c0-u5929:k1^<"i}f/pe+bj7&{n$ko|.sqww*e6';T?000a?P6(o{l%~k!hl1,q`*auiz$yy} c0-u5Z5Xign;<=>>2c9V4*aun'xm#jb?.sf,cwgt&{y"m>/w3\0Zhh|9:;<<S7'nxm"h gm2-va)`zhy%~~z|/scn[`kw|pUmnRgPos234575;2_;#j|i.sd,ci6)zm%y|cz}/LalqkrXkfex?:4U1-dvc(un&mg<#|k/srmpw)JkfexRm`uov261=R8&myj#|i/fn3*wb(zyd~"Clotlw[firf}8986[?/fpe*w`(oe:%~i!}povq+Heh}g~Tob{at207?P6(o{l%~k!hl1,q`*twf}x$Anaznu]`kphs<;>0Y=!hrg,qb*ak8'xo#~ats-Ngjsi|Vidycz:259V4*aun'xm#jb?.sf,vuhsz&Ghcx`{_bmvjq05<2_;#j|i.sd,ci6)zm%y|cz}/LalqkrXkfex:<;;T2,cw`)zo%l`= }d.psjqt(Eje~byQlotlw<7?<]9%l~k }f.eo4+tc'{zex!BcnwmpZeh}g~Tot2?>3a8Q5)`zo$yj"ic0/pg+wvi|{%Fob{at^alqkrXkp6;2R|{289V4*aun'xm#jb?.sf,vuhsz&Ghcx`{_bmvjqYdq5;5>n5Z0.eqb+ta'nf;"j rqlwv*Kdg|dSnaznu]`}979W{~956[?/fpe*w`(oe:%~i!}povq+Heh}g~Tob{at^az8785k2_;#j|i.sd,ci6)zm%y|cz}/LalqkrXkfexRmv<3<\vq4>3\:$kh!rg-dh5(ul&x{by| MbmvjqYdg|dSnw33?0`?P6(o{l%~k!hl1,q`*twf}x$Anaznu]`kphsWjs7?3Q}t3;8Q5)`zo$yj"ic0/pg+wvi|{%Fob{at^alqkrXkp6?2?m4U1-dvc(un&mg<#|k/srmpw)JkfexRm`uov\g|:36Vx>45Z0.eqb+ta'nf;"j rqlwv*Kdg|dSnaznu]`}939:j1^<"i}f/pe+bj7&{n$~}`{r.O`kphsWje~byQly=7=[wr512_;#j|i.sd,ci6)zm%y|cz}/LalqkrXkfexRmv<7<1g>S7'nxm"h gm2-va)uxg~y#@m`uov\gjsi|Vir0;0Pru0:?P6(o{l%~k!hl1,q`*twf}x$Anaznu]`kphsWjs7;3 gsd-vc)`d9$yh"|nup,Ifirf}Uhcx`{_ymq8485i2_;#j|i.sd,ci6)zm%y|cz}/LalqkrXkfexRv`r=0=6d=R8&myj#|i/fn3*wb(zyd~"Clotlw[firf}Usc2<>3c8Q5)`zo$yj"ic0/pg+wvi|{%Fob{at^alqkrXpfx7834:7g<]9%l~k }f.eo4+tc'{zex!BcnwmpZeh}g~Ttb|38?0g?P6(o{l%~k!hl1,q`*twf}x$Anaznu]`kphsWqey050Pru3e?P6(o{l%~k!hl1,q`*twf}x$ob{at=2=5c=R8&myj#|i/fn3*wb(zyd~"m`uov?5;7a3\:$kh!rg-dh5(ul&x{by| cnwmp9499o1^<"i}f/pe+bj7&{n$~}`{r.alqkr;;7;m7X> gsd-vc)`d9$yh"|nup,gjsi|5>5=k5Z0.eqb+ta'nf;"j rqlwv*eh}g~793?i;T2,cw`)zo%l`= }d.psjqt(kfex1811g9V4*aun'xm#jb?.sf,vuhsz&idycz37?3e?P6(o{l%~k!hl1,q`*twf}x$ob{at=:=5`=R8&myj#|i/fn3*wb(zyd~"m`uov\44c<]9%l~k }f.eo4+tc'{zex!lotlw[47b3\:$kh!rg-dh5(ul&x{by| cnwmpZ46m2_;#j|i.sd,ci6)zm%y|cz}/bmvjqY49l1^<"i}f/pe+bj7&{n$~}`{r.alqkrX<8o0Y=!hrg,qb*ak8'xo#~ats-`kphsW<;n7X> gsd-vc)`d9$yh"|nup,gjsi|V<:i6[?/fpe*w`(oe:%~i!}povq+firf}U<=h5Z0.eqb+ta'nf;"j rqlwv*eh}g~T4?<4U1-dvc(un&mg<#|k/srmpw)dg|dSi?30?01?P6(o{l%~k!hl1,q`*twf}x$ob{at^f28485:2_;#j|i.sd,ci6)zm%y|cz}/bmvjqYc9585>?5Z0.eqb+ta'nf;"j rqlwv*eh}g~Th<2<>308Q5)`zo$yj"ic0/pg+wvi|{%hcx`{_e3?0;453\:$kh!rg-dh5(ul&x{by| cnwmpZb64<49>6[?/fpe*w`(oe:%~i!}povq+firf}Uo=181239V4*aun'xm#jb?.sf,vuhsz&idyczPd0>4:74<]9%l~k }f.eo4+tc'{zex!lotlw[a7;078:7X> gsd-vc)`d9$yh"|nup,gjsi|Vn:S=<>;T2,cw`)zo%l`= }d.psjqt(kfexRj>_002?P6(o{l%~k!hl1,q`*twf}x$ob{at^f2[7463\:$kh!rg-dh5(ul&x{by| cnwmpZb6W:8:7X> gsd-vc)`d9$yh"|nup,gjsi|Vn:S9<>;T2,cw`)zo%l`= }d.psjqt(kfexRj>_402?P6(o{l%~k!hl1,q`*twf}x$ob{at^f2[3463\:$kh!rg-dh5(ul&x{by| cnwmpZb6W>8:7X> gsd-vc)`d9$yh"|nup,gjsi|Vn:S5<;;T2,cw`)zo%l`= }d.psjqt(kfexR``t12356`<]9%l~k }f.eo4+qu'n}j#if/uqtc)JimnThdhi_qlwvZvflVkoh=>?0^az8584n2_;#j|i.sd,ci6){%l{l}!gqd-swva'DkohRjffg]sjqtXxhnTmij?012\g|:66:l0Y=!hrg,qb*ak8'}y#jyns/esb+quxo%FmijPdhde[uhszVzjhRokd1234Ze~4;48j6[?/fpe*w`(oe:%{!hw`q-cu`){zm#@okd^fjbcYwf}xT|ljPaef3456Xkp682>h4U1-dvc(un&mg<#y}/fubw+awn'}y|k!Baef\`l`aWyd~R~nd^cg`5678Vir090!ws-dsdu)oyl%{~i/Lcg`ZbnnoU{by|Pp`f\eab789:Tot2:>2d8Q5)`zo$yj"ic0/uq+bqf{'m{j#y}pg-NeabXl`lmS}`{r^rb`Zgcl9:;S7'nxm"h gm2-sw)`hy%k}h!wsre+HgclVnbjkQnup\tdbXimn;<=>Pcx>4:6`<]9%l~k }f.eo4+qu'n}j#if/uqtc)JimnThdhi_qlwvZvflVkoh=>?0^az8=84n2_;#j|i.sd,ci6){%l{l}!gqd-swva'DkohRjffg]sjqtXxhnTmij?012\g|:>6=;0Y=!hrg,qb*ak8'}y#jyns/esb+quxo%FmijPdhde[uhszVzjhRokd1234Zjr|5;;29>4U1-dvc(un&mg<#y}/fubw+awn'}y|k!Baef\`l`aWyd~R~nd^cg`5678Vf~x1?1479V4*aun'xm#jb?.vp,crgt&nzm"z|f.Ob`aYcaolT|cz}_qcg[dbc89:;Sa{{<0<\MKPX8=:0Y=!hrg,qb*ak8'}y#jyns/esb+quxo%FmijPdhde[uhszVzjhRokd1234Zjr|5858=5Z0.eqb+ta'nf;"z| gvcp*bva&~x{j"Cnde]gmc`Xxg~yS}ok_`fg4567We0>0;0:W3+bta&{l$ka>!ws-dsdu)oyl%{~i/Lcg`ZbnnoU{by|Pp`f\eab789:T`xz34?63?P6(o{l%~k!hl1,tv*apiz$l|k xrqd,IdbcWmcmjR~ats]seaYflm:;<=Qcuu>6:16<]9%l~k }f.eo4+qu'n}j#if/uqtc)JimnThdhi_qlwvZvflVkoh=>?0^nvp909<91^<"i}f/pe+bj7&~x$kzo|.fre*rtwn&GjhiQkigd\tkruWykoSljk0123[iss4>4?<6[?/fpe*w`(oe:%{!hw`q-cu`){zm#@okd^fjbcYwf}xT|ljPaef3456Xd|~743:?;T2,cw`)zo%l`= xr.etev(`xo$|~}h M`fg[aoanVzexQae]b`a6789Ugyy26>538Q5)`zo$yj"ic0/uq+bqf{'m{j#y}pg-NeabXl`lmS}`{r^rb`Zgcl9:;?0^zlv979<91^<"i}f/pe+bj7&~x$kzo|.fre*rtwn&GjhiQkigd\tkruWykoSljk0123[}iu4;4?<6[?/fpe*w`(oe:%{!hw`q-cu`){zm#@okd^fjbcYwf}xT|ljPaef3456Xpfx7?3:?;T2,cw`)zo%l`= xr.etev(`xo$|~}h M`fg[aoanVzexQae]b`a6789Usc2;>528Q5)`zo$yj"ic0/uq+bqf{'m{j#y}pg-NeabXl`lmS}`{r^rb`Zgcl9:;?_ymq838382_;#j|i.sd,ci6){%l{l}!gqd-swva'DkohRjffg]sjqtXxhnTmij?012\|jt;?7>;7X> gsd-vc)`d9$|~"ixar,dtc(pzyl$Aljk_ekebZvi|{U{miQnde2345Yg{6329>4U1-dvc(un&mg<#y}/fubw+awn'}y|k!Baef\`l`aWyd~R~nd^cg`5678Vrd~171319V4*aun'xm#jb?.vp,crgt&nzm"z|f.fjbcYwf}xT|lj311<1b>S7'nxm"h gm2-sw)`hy%k}h!wsre+aoanVzexQae>2:7`<]9%l~k }f.eo4+qu'n}j#if/uqtc)caolT|cz}_qcg8785n2_;#j|i.sd,ci6){%l{l}!gqd-swva'mcmjR~ats]sea:46;l0Y=!hrg,qb*ak8'}y#jyns/esb+quxo%oekhPpovq[ugc4=49j6[?/fpe*w`(oe:%{!hw`q-cu`){zm#igif^rmpwYwim6>2?h4U1-dvc(un&mg<#y}/fubw+awn'}y|k!kigd\tkruWyko0;0=f:W3+bta&{l$ka>!ws-dsdu)oyl%{~i/ekebZvi|{U{mi28>3d8Q5)`zo$yj"ic0/uq+bqf{'m{j#y}pg-gmc`Xxg~yS}ok<9<1b>S7'nxm"h gm2-sw)`hy%k}h!wsre+aoanVzexQae>::7c<]9%l~k }f.eo4+qu'n}j#if/uqtc)caolT|cz}_qcg[44a3\:$kh!rg-dh5(pz&m|m~ hpg,tvu`(l`lmS}`{r^rb`Z77:l1^<"i}f/pe+bj7&~x$kzo|.fre*rtwn&nbjkQnup\tdbX:;o0Y=!hrg,qb*ak8'}y#jyns/esb+quxo%oekhPpovq[ugcW:8n7X> gsd-vc)`d9$|~"ixar,dtc(pzyl$hdhi_qlwvZvflV>9i6[?/fpe*w`(oe:%{!hw`q-cu`){zm#igif^rmpwYwimU>>h5Z0.eqb+ta'nf;"z| gvcp*bva&~x{j"jffg]sjqtXxhnT:?k4U1-dvc(un&mg<#y}/fubw+awn'}y|k!kigd\tkruWykoS:!ws-dsdu)oyl%{~i/ekebZvi|{U{miQ6399V4*aun'xm#jb?.vp,crgt&nzm"z|f.fjbcYwf}xT|ljPaef3456;9948;6[?/fpe*w`(oe:%{!hw`q-cu`){zm#igif^rmpwYwimUjhi>?01>2:61<]9%l~k }f.eo4+qu'n}j#if/uqtc)caolT|cz}_qcg[dbc89:;0?0<7:W3+bta&{l$ka>!ws-dsdu)oyl%{~i/ekebZvi|{U{miQnde2345:46:=0Y=!hrg,qb*ak8'}y#jyns/esb+quxo%oekhPpovq[ugcWhno<=>?<5<03>S7'nxm"h gm2-sw)`hy%k}h!wsre+aoanVzexQae]b`a67896>2>94U1-dvc(un&mg<#y}/fubw+awn'}y|k!kigd\tkruWykoSljk01238384?2_;#j|i.sd,ci6){%l{l}!gqd-swva'mcmjR~ats]seaYflm:;<=28>258Q5)`zo$yj"ic0/uq+bqf{'m{j#y}pg-gmc`Xxg~yS}ok_`fg45674148;6[?/fpe*w`(oe:%{!hw`q-cu`){zm#igif^rmpwYwimUjhi>?01>::7g<]9%l~k }f.eo4+qu'n}j#if/uqtc)wzfmTjxbc_h11?P6(o{l%~k!hl1,tv*apiz$l|k xrqd,twi`Wog`RgPmtz34554<2_;#j|i.sd,ci6){%l{l}!gqd-swva'yxdkRhzlm]j[hs89:8=8=;;T2,cw`)zo%l`= xr.etev(`xo$|~}h psmd[cskdVcTaxv?0112<6><]9%l~k }f.eo4+qu'n}j#if/uqtc)wzfmTjxbc_h]nq}678:;3S^Y?339V4*aun'xm#jb?.vp,crgt&nzm"z|f.rqkbYa}efTeR``t12357?<]9%l~k }f.eo4+qu'n}j#y|tr-`5*efz{seiy2?>3;8Q5)`zo$yj"ic0/uq+bqf{'}xx~!l1.abvwim}6:2?74U1-dvc(un&mg<#y}/fubw+qt|z%h="mnrs{maq:56;30Y=!hrg,qb*ak8'}y#jyns/uppv)d9&ij~waeu>0:7`<]9%l~k }f.eo4+qu'n}j#y|tr-`5*aj}q$laV>R.fo2*h75n2_;#j|i.sd,ci6){%l{l}!wrvp+f7(ods"jcT1\,div(j{;l0Y=!hrg,qb*ak8'}y#jyns/uppv)d9&mfyu hmZ0^*bkt&dy9j6[?/fpe*w`(oe:%{!hw`q-svrt'j;$k`{w.foX7X(`ez$f?h4U1-dvc(un&mg<#y}/fubw+qt|z%h="ibuy,di^2Z&ngx"`}=3:W3+bta&{l$ka>!ws-dsdu)z~x#n? v0>3:75<]9%l~k }f.eo4+qu'n}j#y|tr-`5*p64849?6[?/fpe*w`(oe:%{!hw`q-svrt'j;$z<2=>318Q5)`zo$yj"ic0/uq+bqf{'}xx~!l1.t28685;2_;#j|i.sd,ci6){%l{l}!wrvp+f7(~86?2?l4U1-dvc(un&mg<#y}/fubw+qt|z%h="x>_1]bja6789;9n6[?/fpe*w`(oe:%{!hw`q-svrt'j;$z_`lg45679;h0Y=!hrg,qb*ak8'}y#jyns/uppv)d9&|:S?Qnne234575j2_;#j|i.sd,ci6){%l{l}!wrvp+f7(~8U8Sl`k012357d<]9%l~k }f.eo4+qu'n}j#y|tr-`5*p6W=Ujbi>?0131=>S7'nxm"h gm2-sw)`hy%{~z|/b0,gdtuqgo0=0=9:W3+bta&{l$ka>!ws-dsdu)z~x#n< c`pq}kcs484956[?/fpe*w`(oe:%{!hw`q-svrt'j8$ol|}yogw878512_;#j|i.sd,ci6){%l{l}!wrvp+f4(khxyuck{<2<1b>S7'nxm"h gm2-sw)`hy%{~z|/b0,chs&ngP

"x><1<17>S7'nxm"h gm2-sw)`hy%{~z|/b0,r4:66;90Y=!hrg,qb*ak8'}y#jyns/uppv)d:&|:0?0=3:W3+bta&{l$ka>!ws-dsdu)z~x#n< v0>0:75<]9%l~k }f.eo4+qu'n}j#y|tr-`6*p64=49n6[?/fpe*w`(oe:%{!hw`q-svrt'j8$z?0131f>S7'nxm"h gm2-sw)`hy%{~z|/b0,r4Y3Whdo<=>?1328Q5)`zo$yj"ic0/uq+bqf{'}xx~!lolr265=R8&myj#|i/fn3*rt(o~kx"z}{s.aliu4582_;#j|i.sd,ci6){%l{l}!wrvp+fijx:8o7X> gsd-vc)`d9$|~"ixar,twqu(ohl%o>!laspzj`r;878o7X> gsd-vc)`d9$|~"ixar,twqu(ohl%o>!laspzj`r;978o7X> gsd-vc)`d9$|~"ixar,twqu(ohl%o>!laspzj`r;:78o7X> gsd-vc)`d9$|~"ixar,twqu(ohl%o>!laspzj`r;;7987X> gsd-vc)`d9$|~"ixar,twqu(ohl%o>!hmtz-ch]7U'mf=#c>329V4*aun'xm#jb?.vp,crgt&~y"inf/a0+bkrp'mfW5Z0.eqb+ta'nf;"z| gvcp*rus{&mjj#m1^<"i}f/pe+bj7&~x$kzo|.vqww*afn'i8#{?30?04?P6(o{l%~k!hl1,tv*apiz$|y} g`d-g6)q95;5>:5Z0.eqb+ta'nf;"z| gvcp*rus{&mjj#m gsd-vc)`d9$|~"ixar,twqu(ohl%o>!y1^2\ekb789::>k5Z0.eqb+ta'nf;"z| gvcp*rus{&mjj#m>2g9V4*aun'xm#jb?.vp,crgt&~y"inf/a0+s7X;Vkeh=>?000e?P6(o{l%~k!hl1,tv*apiz$|y} g`d-g6)q9V>Tmcj?01226f=R8&myj#|i/fn3*rt(o~kx"z}{s.pbiZgkefySk{cl^k00>S7'nxm"h gm2-sw)`hy%{~z|/scn[djjgz~Tjxbc_h]nq}67899>7X> gsd-vc)`d9$|~"ixar,twqu(zhgTmac`su]eqijXaVg~t=>?001a?P6(o{l%~k!hl1,tv*apiz$|y} r`o\eikh{}UmyabPi^llp56798UBB[Q?299V4*aun'xm#jb?.vp,crgt&~y"|nm^dvhiYajVc996[?/fpe*w`(oe:%{!hw`q-svrt'{kfSk{cl^k1`>S7'nxm"h gm2-sw)`hy%{~z|/scn[cskdVcTaxv?0121a>S7'nxm"h gm2-sw)`hy%{~z|/scn[cskdVcTaxv?01225a=R8&myj#|i/fn3*rt(zhgT{Qjn^k25c=R8&myj#|i/fn3*rt(zhgT{Qjn^k2[4443\:$kh!rg-dh5(pz&}{by| MbmvjqYdg|d>95Z0.eqb+ta'nf;"z| wqlwv*Kdg|dSnaznu310>S7'nxm"h gm2-sw)pxg~y#@m`uov\gjsi|;8?7X> gsd-vc)`d9$|~"ynup,Ifirf}Uhcx`{3368Q5)`zo$yj"ic0/uq+rvi|{%Fob{at^alqkr3:=1^<"i}f/pe+bj7&~x${}`{r.O`kphsWje~by;=4:W3+bta&{l$ka>!ws-ttkru'DidyczPcnwmp3433\:$kh!rg-dh5(pz&}{by| MbmvjqYdg|d;?:4U1-dvc(un&mg<#y}/vrmpw)JkfexRm`uov;61=R8&myj#|i/fn3*rt(yd~"Clotlw[firf}3956[?/fpe*w`(oe:%{!xpovq+Heh}g~Tob{at^az8585k2_;#j|i.sd,ci6){%||cz}/LalqkrXkfexRmv<1<\vq4>3\:$kh!rg-dh5(pz&}{by| MbmvjqYdg|dSnw31?0`?P6(o{l%~k!hl1,tv*qwf}x$Anaznu]`kphsWjs7=3Q}t3;8Q5)`zo$yj"ic0/uq+rvi|{%Fob{at^alqkrXkp692?m4U1-dvc(un&mg<#y}/vrmpw)JkfexRm`uov\g|:56Vx>45Z0.eqb+ta'nf;"z| wqlwv*Kdg|dSnaznu]`}959:j1^<"i}f/pe+bj7&~x${}`{r.O`kphsWje~byQly=1=[wr512_;#j|i.sd,ci6){%||cz}/LalqkrXkfexRmv<5<1g>S7'nxm"h gm2-sw)pxg~y#@m`uov\gjsi|Vir090Pru0:?P6(o{l%~k!hl1,tv*qwf}x$Anaznu]`kphsWjs7935:Zts:01^<"i}f/pe+bj7&~x${}`{r.O`kphsWje~byQly=5=6f=R8&myj#|i/fn3*rt(yd~"Clotlw[firf}Uhu191_sv1=>S7'nxm"h gm2-sw)pxg~y#@m`uov\gjsi|Vir050=c:W3+bta&{l$ka>!ws-ttkru'DidyczPcnwmpZe~414T~y1:7g<]9%l~k }f.eo4+qu'~zex!BcnwmpZeh}g~Ttb|33?0b?P6(o{l%~k!hl1,tv*qwf}x$Anaznu]`kphsWqey090=a:W3+bta&{l$ka>!ws-ttkru'DidyczPcnwmpZ~hz5?5>l5Z0.eqb+ta'nf;"z| wqlwv*Kdg|dSnaznu]{kw:16;k0Y=!hrg,qb*ak8'}y#z~ats-Ngjsi|VidyczPxnp?3;4f3\:$kh!rg-dh5(pz&}{by| MbmvjqYdg|dSua}<9<1e>S7'nxm"h gm2-sw)pxg~y#@m`uov\gjsi|Vrd~1712e9V4*aun'xm#jb?.vp,suhsz&Ghcx`{_bmvjqYg{622R|{1g9V4*aun'xm#jb?.vp,suhsz&idycz30?3e?P6(o{l%~k!hl1,tv*qwf}x$ob{at=3=5c=R8&myj#|i/fn3*rt(yd~"m`uov?6;7a3\:$kh!rg-dh5(pz&}{by| cnwmp9599o1^<"i}f/pe+bj7&~x${}`{r.alqkr;<7;m7X> gsd-vc)`d9$|~"ynup,gjsi|5?5=k5Z0.eqb+ta'nf;"z| wqlwv*eh}g~7:3?i;T2,cw`)zo%l`= xr.usjqt(kfex1911g9V4*aun'xm#jb?.vp,suhsz&idycz38?3e?P6(o{l%~k!hl1,tv*qwf}x$ob{at=;=5`=R8&myj#|i/fn3*rt(yd~"m`uov\44c<]9%l~k }f.eo4+qu'~zex!lotlw[47b3\:$kh!rg-dh5(pz&}{by| cnwmpZ46m2_;#j|i.sd,ci6){%||cz}/bmvjqY49l1^<"i}f/pe+bj7&~x${}`{r.alqkrX<8o0Y=!hrg,qb*ak8'}y#z~ats-`kphsW<;n7X> gsd-vc)`d9$|~"ynup,gjsi|V<:i6[?/fpe*w`(oe:%{!xpovq+firf}U<=h5Z0.eqb+ta'nf;"z| wqlwv*eh}g~T4<1<16>S7'nxm"h gm2-sw)pxg~y#naznu]g5979:;1^<"i}f/pe+bj7&~x${}`{r.alqkrXl8692?<4U1-dvc(un&mg<#y}/vrmpw)dg|dSi?33?01?P6(o{l%~k!hl1,tv*qwf}x$ob{at^f28185:2_;#j|i.sd,ci6){%||cz}/bmvjqYc95?5>?5Z0.eqb+ta'nf;"z| wqlwv*eh}g~Th<29>308Q5)`zo$yj"ic0/uq+rvi|{%hcx`{_e3?3;453\:$kh!rg-dh5(pz&}{by| cnwmpZb64149>6[?/fpe*w`(oe:%{!xpovq+firf}Uo=171209V4*aun'xm#jb?.vp,suhsz&idyczPd0]364=R8&myj#|i/fn3*rt(yd~"m`uov\`4Y6:81^<"i}f/pe+bj7&~x${}`{r.alqkrXl8U9><5Z0.eqb+ta'nf;"z| wqlwv*eh}g~Th<5Z0.eqb+ta'nf;"z| wqlwv*eh}g~Th:;1^<"i}f/pe+bj7&~x${}`{r.alqkrXl;6;2?<4U1-dvc(un&mg<#y}/vrmpw)dg|dSi<31?01?P6(o{l%~k!hl1,tv*qwf}x$ob{at^f18785:2_;#j|i.sd,ci6){%||cz}/bmvjqYc:595>?5Z0.eqb+ta'nf;"z| wqlwv*eh}g~Th?2;>308Q5)`zo$yj"ic0/uq+rvi|{%hcx`{_e0?1;453\:$kh!rg-dh5(pz&}{by| cnwmpZb54?49>6[?/fpe*w`(oe:%{!xpovq+firf}Uo>191239V4*aun'xm#jb?.vp,suhsz&idyczPd3>;:74<]9%l~k }f.eo4+qu'~zex!lotlw[a4;178:7X> gsd-vc)`d9$|~"ynup,gjsi|Vn9S=<>;T2,cw`)zo%l`= xr.usjqt(kfexRj=_002?P6(o{l%~k!hl1,tv*qwf}x$ob{at^f1[7463\:$kh!rg-dh5(pz&}{by| cnwmpZb5W:8:7X> gsd-vc)`d9$|~"ynup,gjsi|Vn9S9<>;T2,cw`)zo%l`= xr.usjqt(kfexRj=_402?P6(o{l%~k!hl1,tv*qwf}x$ob{at^f1[3463\:$kh!rg-dh5(pz&}{by| cnwmpZb5W>8:7X> gsd-vc)`d9$|~"ynup,gjsi|Vn9S5<>;T2,cw`)zo%l`= xr.usjqt(kfexRj=_801?P6(o{l%~k!hl1,tv*qwf}x$ob{at^f08585:2_;#j|i.sd,ci6){%||cz}/bmvjqYc;5;5>?5Z0.eqb+ta'nf;"z| wqlwv*eh}g~Th>2=>308Q5)`zo$yj"ic0/uq+rvi|{%hcx`{_e1?7;453\:$kh!rg-dh5(pz&}{by| cnwmpZb44=49>6[?/fpe*w`(oe:%{!xpovq+firf}Uo?1;1239V4*aun'xm#jb?.vp,suhsz&idyczPd2>5:74<]9%l~k }f.eo4+qu'~zex!lotlw[a5;?7897X> gsd-vc)`d9$|~"ynup,gjsi|Vn8050=2:W3+bta&{l$ka>!ws-ttkru'je~byQk3=;=64=R8&myj#|i/fn3*rt(yd~"m`uov\`6Y7:81^<"i}f/pe+bj7&~x${}`{r.alqkrXl:U:><5Z0.eqb+ta'nf;"z| wqlwv*eh}g~Th>Q=209V4*aun'xm#jb?.vp,suhsz&idyczPd2]064=R8&myj#|i/fn3*rt(yd~"m`uov\`6Y3:81^<"i}f/pe+bj7&~x${}`{r.alqkrXl:U>><5Z0.eqb+ta'nf;"z| wqlwv*eh}g~Th>Q9209V4*aun'xm#jb?.vp,suhsz&idyczPd2]464=R8&myj#|i/fn3*rt(yd~"m`uov\`6Y?:81^<"i}f/pe+bj7&~x${}`{r.alqkrXl:U2>95Z0.eqb+ta'nf;"z| wqlwv*eh}g~Tbbz?01323>S7'nxm"h mdo,`jssW`6;2<64U1-dvc(un&gna"j`uu]j8469911^<"i}f/pe+hcj'me~xRg310<2<>S7'nxm"h mdo,`jssW`6:>3?7;T2,cw`)zo%fi`!kotv\m9746820Y=!hrg,qb*kbe&ndyyQf<06=5==R8&myj#|i/lgn+air|Vc7=80>8:W3+bta&{l$ahc dnww[l:6>7;37X> gsd-vc)jmd%ocxzPi=34:4><]9%l~k }f.ofi*bh}}Ub0<61199V4*aun'xm#`kb/emvpZo;904:;6[?/fpe*w`(elg$hb{{_h>2:4><]9%l~k }f.ofi*bh}}Ub0?>1199V4*aun'xm#`kb/emvpZo;:84:46[?/fpe*w`(elg$hb{{_h>16;7?3\:$kh!rg-nah)cg|~Te1<<>0:8Q5)`zo$yj"cjm.flqqYn4;>5=55Z0.eqb+ta'dof#iazt^k?608602_;#j|i.sd,i`k(lfSd2=6?3;?P6(o{l%~k!bel-gkprXa58<2<64U1-dvc(un&gna"j`uu]j87>9911^<"i}f/pe+hcj'me~xRg328<23>S7'nxm"h mdo,`jssW`692<64U1-dvc(un&gna"j`uu]j8669911^<"i}f/pe+hcj'me~xRg330<2<>S7'nxm"h mdo,`jssW`68>3?7;T2,cw`)zo%fi`!kotv\m9546820Y=!hrg,qb*kbe&ndyyQf<26=5==R8&myj#|i/lgn+air|Vc7?80>7:W3+bta&{l$ahc dnww[l:468=0Y=!hrg,qb*kbe&ndyyQf<5<23>S7'nxm"h mdo,`jssW`6>2<94U1-dvc(un&gna"j`uu]j8386?2_;#j|i.sd,i`k(lfSd28>058Q5)`zo$yj"cjm.flqqYn414:;6[?/fpe*w`(elg$hb{{_h>::40<]9%l~k }f.ofi*bh}}UbS=?9;T2,cw`)zo%fi`!kotv\mZ76?2_;#j|i.sd,i`k(lfSdQ>0058Q5)`zo$yj"cjm.flqqYnW8;:;6[?/fpe*w`(elg$hb{{_h]2641<]9%l~k }f.ofi*bh}}UbS<=>7:W3+bta&{l$ahc dnww[lY6<8=0Y=!hrg,qb*kbe&ndyyQf_0723>S7'nxm"h mdo,`jssW`U::<94U1-dvc(un&gna"j`uu]j[416?2_;#j|i.sd,i`k(lfSdQ>8058Q5)`zo$yj"cjm.flqqYnW83::6[?/fpe*w`(elg$hb{{_h]152=R8&myj#|i/lgn+air|VcT>=?8;T2,cw`)zo%fi`!kotv\mZ469>1^<"i}f/pe+hcj'me~xRgP2334?P6(o{l%~k!bel-gkprXaV88=:5Z0.eqb+ta'dof#iazt^k\61703\:$kh!rg-nah)cg|~TeR<:169V4*aun'xm#`kb/emvpZoX:?;<7X> gsd-vc)jmd%ocxzPi^0452=R8&myj#|i/lgn+air|VcT>5?8;T2,cw`)zo%fi`!kotv\mZ4>9?1^<"i}f/pe+hcj'me~xRgP3058Q5)`zo$yj"cjm.flqqYnW:::;6[?/fpe*w`(elg$hb{{_h]0541<]9%l~k }f.ofi*bh}}UbS><>7:W3+bta&{l$ahc dnww[lY4;8=0Y=!hrg,qb*kbe&ndyyQf_2623>S7'nxm"h mdo,`jssW`U89<84U1-dvc(un&gna"j`uu]j[1713\:$kh!rg-nah)cg|~TeR;>6:W3+bta&{l$ahc dnww[lY19?1^<"i}f/pe+hcj'me~xRgP7048Q5)`zo$yj"cjm.flqqYnW1;=7X> gsd-vc)jmd%ocxzPi^;2=>S7'nxm"h mdo,`jssWdof0=0>a:W3+bta&{l$ahc dnww[hcj48:5=l5Z0.eqb+ta'dof#iazt^ofi97668k0Y=!hrg,qb*kbe&ndyyQbel>26;7f3\:$kh!rg-nah)cg|~Tahc312<2e>S7'nxm"h mdo,`jssWdof0<:11`9V4*aun'xm#`kb/emvpZkbe5;>27;j7X> gsd-vc)jmd%ocxzPmdo?5286i2_;#j|i.sd,i`k(lfS`kb<0:=5d=R8&myj#|i/lgn+air|Vgna1?6>0;8Q5)`zo$yj"cjm.flqqYjmd6:2 gsd-vc)jmd%ocxzPmdo?6486i2_;#j|i.sd,i`k(lfS`kb<30=5d=R8&myj#|i/lgn+air|Vgna1<<>0c8Q5)`zo$yj"cjm.flqqYjmd6983?n;T2,cw`)zo%fi`!kotv\i`k;:<4:m6[?/fpe*w`(elg$hb{{_lgn87099h1^<"i}f/pe+hcj'me~xRcjm=04:4g<]9%l~k }f.ofi*bh}}Ufi`2=8?3b?P6(o{l%~k!bel-gkprXelg7>40>9:W3+bta&{l$ahc dnww[hcj4;4:m6[?/fpe*w`(elg$hb{{_lgn86699h1^<"i}f/pe+hcj'me~xRcjm=12:4g<]9%l~k }f.ofi*bh}}Ufi`2<2?3b?P6(o{l%~k!bel-gkprXelg7?>0>a:W3+bta&{l$ahc dnww[hcj4:>5=l5Z0.eqb+ta'dof#iazt^ofi9526830Y=!hrg,qb*kbe&ndyyQbel>0:4?<]9%l~k }f.ofi*bh}}Ufi`2;>0;8Q5)`zo$yj"cjm.flqqYjmd6>2<74U1-dvc(un&gna"j`uu]nah:16830Y=!hrg,qb*kbe&ndyyQbel>4:4?<]9%l~k }f.ofi*bh}}Ufi`27>0;8Q5)`zo$yj"cjm.flqqYjmd622::4U1-dvc(un&gna"imm/eaib(`jdmj"cijcb,aib)edbUfi`Qheogqeqiu'kgei lsup,vdkkgfzP

1d9V4*aun'xm#}{bmi,vaYu{}Uyij2?>0g8Q5)`zo$yj"||tcnh+wbXzz~T~hi31?3f?P6(o{l%~k!}su`oo*tcW{ySkh<3<2`>S7'nxm"h rrvahn)ulVxxxR|jg^22`>S7'nxm"h rrvahn)ulVxxxR|jg^32`>S7'nxm"h rrvahn)ulVxxxR|jg^02`>S7'nxm"h rrvahn)pzVxxxRo|rde14>S7'nxm"h rrvahn)pzVxxxRo|rde\`4473\:$kh!rg-qwqdkc&}yS}{_`qqabYc:8i0Y=!hrg,qb*tt|kf`#z|Prrv\gjke9m1^<"i}f/pe+wusjea${Q}su]`khd69l1^<"i}f/pe+wusjea${Q}su]qab:768o0Y=!hrg,qb*tt|kf`#z|Prrv\v`a;97;o7X> gsd-vc)u{}hgg"y}_sqw[wc`W9;o7X> gsd-vc)u{}hgg"y}_sqw[wc`W8k0Y^K]_@NJEVe<]ZOYS[G\ICNF7>PDK01]EHYPTXRF7>QBI:1\IOm4WSKWAZKHLLUJo6Y]IUG\IJBBWKn0[_G[E^UJ@QNXIm1\^DZJ_VKGPMYE9m1SEAGAX,ZGF%6)9)Y_YO.?.0"BWFON=2RD^NW9;YQWHLD03QY_SJ@K7:ZPPZPDKk1SSNA]E^KMBJ00:ZgiZKfbfx]i}foo33?]bjWDcecXjrrkljf=fddexxRkbpu{a?djjgz~Tjxbc6:`bgnswl2hjof{_lcqo`t43jf`h6jnt`]`kphs 9#o7io{a^alqkr/9 n0hlzn_bmvjq.5!m1omyoPcnwmp-5.l2njxlQlotlw,1/c3mkmRm`uov+1,bbf|hUhcx`{(9+g?agsiVidycz'9(d8`drfWje~by26:1<4?adn|lxy:6jfn)2*2>bnf!;";6jfn)33-2=cag":=$94dhl+57/03mce$<=&7:fjj-73!>1oec&>5(58`lh/9?#<7iga(05*2>bnf!8":6jfn)1*2>bnf!>":6jfn)7*2>bnf!<":6jfn)5*2>bnf!2":6jfn);*2>bnf5:5;6jfn=33:2=cag6:=394dhl?57803mce0<=17:fjj9736>1oec2>5?58`lh;9?427iga<0594;1&7:flqq.6!11ocxz'11+;?air|!;:%55kotv+57/?3me~x%?<)99gkpr/9=#37iazt)36-==cg|~#=;'7;emvp-70!11ocxz'19+;?air|!;2%:5kotv+6,>&8:flqq.59 20hb{{(30*<>bh}}"9?$64dnww,72.02ndyy&=5(:8`jss ;<"46j`uu*13,> =0hb{{(6+4?air|!2";6j`uu*:-2=cg|~7<364dnww846902ndyy2>1?:8`jss488546j`uu>27;>bh}}6:;364dnww84>902ndyy2>9?58`jss48437iazt=03:==cg|~7><07;emvp945611ocxz322<;?air|58?255kotv?608?3me~x1<9>99gkpr;:>437iazt=0;:==cg|~7>408;emvp94902ndyy2<0?:8`jss4:;546j`uu>06;>=18:flqq:4<7k0hb{{<2794;>;17:flqq:46>1ocxz34?58`jss4<4<7iazt=4=3>bh}}6<2:5kotv?<;12y15[7ekcV;3xb=9,gkekZabflxjxb|Pv7]2(KIIM%DDBH:?3:djbjYdgrT9<,b]kevYulVnjxlQlotlw95*dWmceSzgkti?2<)eX`hyT{Qkauc\gjsi|4:'oRhzlm]ehdatW{yS{oc=1.`[lkwdlgnbyo{inl\p|vb5;&hSx}j_doaaabblVxnk0>#c^uq[ctby4;'oR{|e^flqqYu{}7: nQznegqbiipWee|1="l_icp[jpbzofd{0>#c^rqaiiflVfjxh`ly<2/gZbh}}U|eizg=24/gZktofdTzlb21-a\vaYcmy~c18?=,b]fvwiuW`dainzfoo]w}uc:8%iTdl}Puoffvcjh4:'oRfns^coijusWog`0?#c^jbwZtt|4;'oRjnt`]`kphsW~coxe3>0-a\lduX{Ujof3?,b]vw`Ybkj7; nQlololjZekgja65)eXlfS}{_wco95*dWakxSio{a^alqkr:8%iT|ah_gwohZrozlycSckhaug\rdj:99;= nQxr^fftqn:998? nQrne\ahvsqV~c~h}g_ogdeqcX~hf69!mPpsmd[`kw|pUdk|h^cpw`tsWkg19"l_icp[sgkam7; nQrne\bpjkW}byi~fParqfvqYqie7:<<9#cnoskkci|Vdjah3iigm\|ihW<;9t>8P2bnh[4>sg:<'oRxnlhf\hjq:8%iT|gb_gkekZr~xl7:gu?7,b]svjaXn|fgSywe<3/gZkbefxrSywe<3/y60oiblihog{espg?lhmmj~xndzjrs58mkrXkea37cilbtko`==h~lxm`byn;qplcZcjx}s:86~}of]fiur~W}byi~f'0(37?uthoVof|ywPtipfwm.6!8>0|ah_dosp|Ys`{oxd%<&159svjaXmdzuRzgrdqk,6/6<2zycjQjmqvz[qnumzb#8$?;;qplcZcjx}sTxe|jsi*6-42vugnUna}zv_ujqavn/0 ;=7}|`g^gntqX|axne27:1<2f>vugnUna}zv_ujqavnXizyn~y&?)0`8twi`Wlg{xtQ{hsgplZgt{lx$<'>b:rqkbYbey~rSyf}erj\evubz}"9%vugnUna}zv_ujqavnXizyn~y&7)0f8twi`Wlg{xtQ{hsgplZgt{lx054?>0`8twi`Wlg{xtQ{hsgplZhboh~n$='>b:rqkbYbey~rSyf}erj\j`af|l":%vugnUna}zv_ujqavnXflmjxh&8)0`8twi`Wlg{xtQ{hsgplZhboh~n$5'>d:rqkbYbey~rSyf}erj\j`af|l636=06;qplcZ`rde;87}|`g^dvhiYs`{oxd%>&129svjaXn|fgSyf}erj+5,743yxdkRhzlm]wlwct`!8"=>5rne\bpjkW}byi~f'3(30?uthoVl~`aQ{hsgpl-2.9:1{~biPftno[qnumzb#9$?<;qplcZ`rdeUdk|h)4*56=wzfmTjxbc_ujqavn/? ;87}|`g^dvhiYs`{oxd%6&129svjaXn|fgSyf}erj+=,723yxdkRhzlm]wlwct`531<3?n;qplcZ`rdeUdk|h^cpw`ts 9#:m6~}of]eqijX|axneQnsrgqp-7.9h1{~biPftno[qnumzbTm~}jru*1-4ga:rqkbYa}efTxe|jsi]bwvcu|!?"=l5rne\bpjkW}byi~fParqfvq.1!8k0|ah_gwohZrozlycSl}|esv+3,7f3yxdkRhzlm]wlwct`Vkxh|{(9+2e>vugnUmyabPtipfwmYf{zoyx%7&1b9svjaXn|fgSyf}erj\evubz}626=0>a:rqkbYa}efTxe|jsi]mabgsm!:"=l5rne\bpjkW}byi~fPndebp`.6!8k0|ah_gwohZrozlycSckhaug+6,7f3yxdkRhzlm]wlwct`Vdnklzj(2+2e>vugnUmyabPtipfwmYimnki%:&1`9svjaXn|fgSyf}erj\j`af|l">% ;j7}|`g^dvhiYs`{oxdR`jg`vf,2/6i2zycjQiumn\pmtb{aUeijo{e):*5d=wzfmTjxbc_ujqavnXflmjxh&6)0a8twi`Wog`Rzgrdqk[kc`i}o757>16:pg[fjl991yhRjnt`]`kphs 9#:<6|k_ecweZeh}g~#=$??;sf\`drfWje~by&=)028vaYci}kTob{at)1*55=ulVnjxlQlotlw,1/682xoSio{a^alqkr/= ;;7jPd`vb[firf}"=%<>4re]geqgXkfex%9&119q`Zbf|hUhcx`{(9+24>tcWmkmRm`uov?4;753{nThlzn_bmvjq:?294>7jPeo48vaYu{}90~~z8;r`jp`tu<2yyy:4tswf=>sillxm`by:;wcoma0<{Ujof84ws]`hn773~xThlzn_bmvjq.7!8:0{Qkauc\gjsi|!;"==5xr^fbpdYdg|d$?'>0:uq[agsiVidycz'3(33?rtXlh~jSnaznu*7-46<{UomyoPcnwmp-3.991|~Rjnt`]`kphs ?#:<6y}_ecweZeh}g~#;$??;vp\`drfWje~by&7)028swYci}kTob{at);*57=pzVnjxlQlotlw8<<76<1|~Rka6:uq[wusuIJ{oi64@Az2>C<328qX8k4:048;>455j?ih6>=:48ym0=2=92d?4849;%6;6?20k2wX8i4:048;>455j?ih6>=:489P57e==8:1<7?<2c4`g?54==30_9j550294?74:k:082g5}T<847:011f3ed2:9>845+467957b<^=286?uz12495>s6;>0;7p*>8182=>d2810;6>h53;1eM20;2P?970603`?>j7>5;n6;3?6=3f?8=7>5;h740?6=3f?;o7>5;n732?6=3`?=47>5;h755?6=3f>o57>5$0:1>1`d3g;3=7>4;n6go;7>5$0:1>1`d3g;3=7<4;n6g2?6=,82969hl;o3;5?5<3f>o97>5$0:1>1`d3g;3=7:4;n6g0?6=,82969hl;o3;5?3<3f>o>7>5$0:1>1`d3g;3=784;n6g5?6=,82969hl;o3;5?1<3f>o<7>5$0:1>1`d3g;3=764;n6`b?6=,82969hl;o3;5??<3f>hi7>5$0:1>1`d3g;3=7o4;n6``?6=,82969hl;o3;5?d<3f>ho7>5$0:1>1`d3g;3=7m4;n6`f?6=,82969hl;o3;5?b<3f>hm7>5$0:1>1`d3g;3=7k4;n6`=?6=,82969hl;o3;5?`<3f>h;7>5$0:1>1`d3g;3=7??;:m7g3<72-;3>7:ic:l2<4<6921d8n;50;&2<7<3nj1e=5?51398k1e3290/=5<54ga8j4>628907b:l3;29 4>52=lh7c?71;37?>i3k;0;6)?72;6eg>h6080:965`4b394?"60;0?jn5a193953=9:9l0a`=83.:4?4;fb9m5=7=9h10c9jj:18'5=4=:0`8?j2cl3:1(<6=:5d`?k7?93;h76a;db83>!7?:3>mo6`>8082`>=h8387bf=i91;1=h54o5fb>5<#91818km4n0:2>4`<3f>o?7>5$0:1>1`d3g;3=77:ic:l2<4<5921d8oj50;&2<7<3nj1e=5?52398k1dd290/=5<54ga8j4>62;907d:n0;29 4>52=h:7c?71;28?l2>n3:1(<6=:5`2?k7?93;07d:6e;29 4>52=h:7c?71;08?l2>l3:1(<6=:5`2?k7?93907d:6c;29 4>52=h:7c?71;68?l2>j3:1(<6=:5`2?k7?93?07d:6a;29 4>52=h:7c?71;48?l2>13:1(<6=:5`2?k7?93=07d:n8;29 4>52=h:7c?71;:8?l2f?3:1(<6=:5`2?k7?93307d:n6;29 4>52=h:7c?71;c8?l2f=3:1(<6=:5`2?k7?93h07d:n4;29 4>52=h:7c?71;a8?l2f;3:1(<6=:5`2?k7?93n07d:n2;29 4>52=h:7c?71;g8?l2f93:1(<6=:5`2?k7?93l07d:68;29 4>52=h:7c?71;33?>o31>0;6)?72;6a5>h6080:=65f54194?=e<>>1<7?50;2xL1143-;2=7:84:m23c<722wih54?:083>5}O<>90(<7>:e:8ka1=831vn9:50;c5>4>328i;wE:83:X71?71s;31>54=a;f9e?d=k3;36ao4=9;32>f62910e8<;:18'5=4==;<0b<6>:098m044290/=5<55348j4>62;10e8<=:18'5=4==;<0b<6>:298m046290/=5<55348j4>62=10e8:498m07a290/=5<55348j4>62?10e8?j:18'5=4==;<0b<6>:698m07c290/=5<55348j4>62110e8>j:188m0072900e88<:188k0012900e8?m:18'5=4==8i0b<6>:198m07f290/=5<550a8j4>62810e8?6:18'5=4==8i0b<6>:398m07?290/=5<550a8j4>62:10e8?8:18'5=4==8i0b<6>:598m071290/=5<550a8j4>62<10e8?::18'5=4==8i0b<6>:798m073290/=5<550a8j4>62>10e8?<:18'5=4==8i0b<6>:998m03a2900c8?>:188m04a290/=5<55228j4>62910e8:098m04c290/=5<55228j4>62;10e8:298m04e290/=5<55228j4>62=10e8:498m04>290/=5<55228j4>62?10e8<7:18'5=4==::0b<6>:698m040290/=5<55228j4>62110c968:188k1?3290/=5<54878j4>62910c97<:18'5=4=<0?0b<6>:098k1?5290/=5<54878j4>62;10c97>:18'5=4=<0?0b<6>:298k1?7290/=5<54878j4>62=10c96i:18'5=4=<0?0b<6>:498k1>b290/=5<54878j4>62?10c96k:18'5=4=<0?0b<6>:698k1>d290/=5<54878j4>62110c96m:18'5=4=<0?0b<6>:898k0562900e89;:188m05e290/=5<552a8j4>62910e8=n:18'5=4==:i0b<6>:098m05>290/=5<552a8j4>62;10e8=7:18'5=4==:i0b<6>:298m050290/=5<552a8j4>62=10e8=9:18'5=4==:i0b<6>:498m052290/=5<552a8j4>62?10e8=;:18'5=4==:i0b<6>:698m054290/=5<552a8j4>62110e8==:18'5=4==:i0b<6>:898k06d2900c8>9:188m00?2900e966:188m021290/=5<55558j4>62910e8:::18'5=4====0b<6>:098m023290/=5<55558j4>62;10e8:<:18'5=4====0b<6>:298m025290/=5<55558j4>62=10e8:>:18'5=4====0b<6>:498m027290/=5<55558j4>62?10e8=i:18'5=4====0b<6>:698m05b290/=5<55558j4>62110e8=k:18'5=4====0b<6>:898m036290/=5<55408j4>62910e8;?:18'5=4==<80b<6>:098m02a290/=5<55408j4>62;10e8:j:18'5=4==<80b<6>:298m02c290/=5<55408j4>62=10e8:l:18'5=4==<80b<6>:498m02e290/=5<55408j4>62?10e8:n:18'5=4==<80b<6>:698m02>290/=5<55408j4>62110e8:7:18'5=4==<80b<6>:898k1>12900e8>i:188m1>f2900e89::188k0052900c888:188m0062900c9j6:18'5=4=:198k1b?290/=5<54ga8j4>62810c9j8:18'5=4=:398k1b1290/=5<54ga8j4>62:10c9j::18'5=4=:598k1b3290/=5<54ga8j4>62<10c9j=:18'5=4=:798k1b6290/=5<54ga8j4>62>10c9j?:18'5=4=:998k1ea290/=5<54ga8j4>62010c9mj:18'5=4=:`98k1ec290/=5<54ga8j4>62k10c9ml:18'5=4=:b98k1ee290/=5<54ga8j4>62m10c9mn:18'5=4=:d98k1e>290/=5<54ga8j4>62o10c9m8:18'5=4=:028?j2d>3:1(<6=:5d`?k7?93;:76a;c483>!7?:3>mo6`>80826>=h1<7*>8387bf=i91;1=>54o5a0>5<#91818km4n0:2>42<3f>h>7>5$0:1>1`d3g;3=7?:;:m7g4<72-;3>7:ic:l2<4<6>21d8n>50;&2<7<3nj1e=5?51698k1da290/=5<54ga8j4>628207b:me;29 4>52=lh7c?71;3:?>i3lo0;6)?72;6eg>h6080:m65`4eg94?"60;0?jn5a19395g=e:9l0ag=83.:4?4;fb9m5=7=9o10c9j<:18'5=4=:328?j2d03:1(<6=:5d`?k7?938:76a;be83>!7?:3>mo6`>80816>=h8387bf=i91;1>>54i5c3>5<#91818o?4n0:2>5=5<#91818o?4n0:2>7=54i5;`>5<#91818o?4n0:2>1=5<#91818o?4n0:2>3=5<#91818o?4n0:2>==5<#91818o?4n0:2>d=6=4+19090g75<#91818o?4n0:2>f=5<#91818o?4n0:2>`=5<#91818o?4n0:2>46<3`>2;7>5$0:1>1d63g;3=7?>;:k7<=<722e>9n4?:%3;6?32m2d:4<4?;:m61g<72-;3>7;:e:l2<4<632e>9l4?:%3;6?32m2d:4<4=;:m61<<72-;3>7;:e:l2<4<432e>954?:%3;6?32m2d:4<4;;:m612<72-;3>7;:e:l2<4<232e>9;4?:%3;6?32m2d:4<49;:m610<72-;3>7;:e:l2<4<032e>994?:%3;6?32m2d:4<47;:m637<72-;3>7;83:l2<4<732e>;<4?:%3;6?30;2d:4<4>;:m635<72-;3>7;83:l2<4<532e>:k4?:%3;6?30;2d:4<4<;:m62`<72-;3>7;83:l2<4<332e>:i4?:%3;6?30;2d:4<4:;:m62f<72-;3>7;83:l2<4<132e>:o4?:%3;6?30;2d:4<48;:m62d<72-;3>7;83:l2<4:44?:%3;6?30;2d:4<46;:m657<722c>9>4?::m620<722h?;k4?:083>5}#90;1h55G46g8L1143fn<6=44}c6;4?6=93:1908731=O<>o0D99<;n34b?6=3th9m?4?:583>5}#90;1h>5G46g8L1143-o=6:5f4783>>o283:17d?73;29?j7?<3:17pl;6183>6<729q/=4?5d19K02c<@==87E:<;%300?31<2.n:7<4i5494?=n=90;66a>8583>>{eN3;2.:?94:659'a3<53`>=6=44i4294?=h91>1<75rb57e>5<4290;w)?61;f3?M20m2B?;>5G429'562==?>0(h852:k72?6=3`?;6=44o0:7>5<=57>55;294~"6180o86F;7d9K025<@=90(<=;:447?l212900e9950;9j15<722c:4>4?::m2<1<722wi8;o50;194?6|,83:6i>4H55f?M20;2B??6*>358621=#m?097d:9:188m06=831d=5:50;9~f13b290>6=4?{%3:5?b33A>19;:4i5494?=n<>0;66g:0;29?l7?;3:17b?74;29?xd3>10;694?:1y'5<7=l:1C8:k4H550?!c12>1b8;4?::k64?6=3`;3?7>5;n3;0?6=3th?::4?:583>5}#90;1h>5G46g8L1143-o=6:5f4783>>o283:17d?73;29?j7?<3:17pl;6783>1<729q/=4?5d29K02c<@==87)k9:69j03<722c><7>5;h3;7?6=3f;387>5;|`734<72=0;6=u+1839`6=O<>o0D99<;%g5>2=n1b8;4?::k64?6=3`;3?7>5;n3;0?6=3th9=;4?:583>5}#90;1h<5G46g8L1143-o=6?5f4783>>o3k3:17d;?:188k4>32900qo<>5;290?6=8r.:5<4k1:J73`=O<>90(h852:k72?6=3`>h6=44i4294?=h91>1<75rb337>5<3290;w)?61;f2?M20m2B?;>5+e781?l212900e9m50;9j15<722e:494?::a645=83>1<7>t$0;2>a7<@==n7E:83:&f2?4>o283:17b?74;29?xd59;0;694?:1y'5<7=l81C8:k4H550?!c12;1b8;4?::k7g?6=3`?;6=44o0:7>5<54;294~"6180o=6F;7d9K025<,l<1>6g;6;29?l2d2900e8>50;9l5=2=831vn???:187>5<7s-;2=7j>;I64a>N3?:1/i;4=;h65>5<>i60=0;66sm21d94?2=83:p(<7>:e38L11b3A>5;|`14`<72=0;6=u+1839`4=O<>o0D99<;%g5>7=n50z&2=45;h6`>5<93n:7E:8e:J736=#m?097d:9:188m1e=831b9=4?::m2<1<722wi=o<50;694?6|,83:6i?4H55f?M20;2.n:7<4i5494?=nb083>1<729q/=4?5d09K02c<@==87)k9:39j03<722c?o7>5;h73>5<908g5>N3?l1C8:=4$d496>o3>3:17d:l:188m06=831d=5:50;9~f4ga290?6=4?{%3:5?b63A>=6=44i5a94?=n=90;66a>8583>>{e9ho1<7:50;2x 4?62m;0D99j;I647>"b>380e9850;9j0f<722c><7>5;n3;0?6=3th:mi4?:583>5}#90;1h<5G46g8L1143-o=6?5f4783>>o3k3:17d;?:188k4>32900qo?nc;290?6=8r.:5<4k1:J73`=O<>90(h852:k72?6=3`>h6=44i4294?=h91>1<75rb341>5<3290;w)?61;f2?M20m2B?;>5+e781?l212900e9m50;9j15<722e:494?::a637=83>1<7>t$0;2>a7<@==n7E:83:&f2?4>o283:17b?74;29?xd5>90;694?:1y'5<7=l81C8:k4H550?!c12;1b8;4?::k7g?6=3`?;6=44o0:7>5<j7>54;294~"6180o=6F;7d9K025<,l<1>6g;6;29?l2d2900e8>50;9l5=2=831vn?;j:187>5<7s-;2=7j>;I64a>N3?:1/i;4=;h65>5<>i60=0;66sm24f94?2=83:p(<7>:e38L11b3A>5;|`11f<72=0;6=u+1839`4=O<>o0D99<;%g5>7=n50z&2=45;h6`>5<93n:7E:8e:J736=#m?097d:9:188m1e=831b9=4?::m2<1<722wi=km50;694?6|,83:6i?4H55f?M20;2.n:7<4i5494?=nfc83>1<729q/=4?5d09K02c<@==87)k9:39j03<722c?o7>5;h73>5<908g5>N3?l1C8:=4$d496>o3>3:17d:l:188m06=831d=5:50;9~f4`>290?6=4?{%3:5?b63A>=6=44i5a94?=n=90;66a>8583>>{e9o21<7:50;2x 4?62m;0D99j;I647>"b>380e9850;9j0f<722c><7>5;n3;0?6=3th:j:4?:583>5}#90;1h<5G46g8L1143-o=6?5f4783>>o3k3:17d;?:188k4>32900qo?i6;290?6=8r.:5<4k1:J73`=O<>90(h852:k72?6=3`>h6=44i4294?=h91>1<75rb0d6>5<3290;w)?61;f2?M20m2B?;>5+e781?l212900e9m50;9j15<722e:494?::a5c2=83>1<7>t$0;2>a7<@==n7E:83:&f2?4>o283:17b?74;29?xd5=90;694?:1y'5<7=l81C8:k4H550?M243-;887;94:&f2?4>o283:17b?74;29?xd5>o283:17b?74;29?xd5>o283:17b?74;29?xd5>o283:17b?74;29?xd5>o283:17b?74;29?xd5>o283:17b?74;29?xd5>o283:17b?74;29?xd5<00;694?:1y'5<7=l81C8:k4H550?M243-;887;94:&f2?4>o283:17b?74;29?xd5<10;694?:1y'5<7=l81C8:k4H550?M243-;887;94:&f2?4>o283:17b?74;29?xd5<>0;694?:1y'5<7=l81C8:k4H550?M243-;887;94:&f2?4>o283:17b?74;29?xd6mh0;694?:1y'5<7=l81C8:k4H550?M243-;887;94:&f2?4>o283:17b?74;29?xd6m00;694?:1y'5<7=l81C8:k4H550?M243-;887;94:&f2?4>o283:17b?74;29?xd6m10;694?:1y'5<7=l81C8:k4H550?M243-;887;94:&f2?4>o283:17b?74;29?xd6m>0;694?:1y'5<7=l81C8:k4H550?M243-;887;94:&f2?4>o283:17b?74;29?xd6m?0;694?:1y'5<7=l81C8:k4H550?M243-;887;94:&f2?4>o283:17b?74;29?xd6m<0;694?:1y'5<7=l81C8:k4H550?M243-;887;94:&f2?4>o283:17b?74;29?xd6m=0;694?:1y'5<7=l81C8:k4H550?M243-;887;94:&f2?4>o283:17b?74;29?xd6m:0;694?:1y'5<7=l81C8:k4H550?M243-;887;94:&f2?4>o283:17b?74;29?xd6m;0;694?:1y'5<7=l81C8:k4H550?M243-;887;94:&f2?4>o283:17b?74;29?xd6l10;694?:1y'5<7=l81C8:k4H550?!c12;1b8;4?::k7g?6=3`?;6=44o0:7>5<54;294~"6180o=6F;7d9K025<,l<1>6g;6;29?l2d2900e8>50;9l5=2=831vn5<7s-;2=7j>;I64a>N3?:1/i;4=;h65>5<>i60=0;66sm1e794?2=83:p(<7>:e38L11b3A>5;|`2`1<72=0;6=u+1839`4=O<>o0D99<;%g5>7=n50z&2=45;h6`>5<93n:7E:8e:J736=#m?097d:9:188m1e=831b9=4?::m2<1<722wi=i?50;694?6|,83:6i?4H55f?M20;2.n:7<4i5494?=nd183>1<729q/=4?5d09K02c<@==87)k9:39j03<722c?o7>5;h73>5<908g5>N3?l1C8:=4$d496>o3>3:17d:l:188m06=831d=5:50;9~f75e290?6=4?{%3:5?b63A>=6=44i5a94?=n=90;66a>8583>>{e::k1<7:50;2x 4?62m;0D99j;I647>"b>380e9850;9j0f<722c><7>5;n3;0?6=3th9?44?:583>5}#90;1h<5G46g8L1143-o=6?5f4783>>o3k3:17d;?:188k4>32900qo<<8;290?6=8r.:5<4k1:J73`=O<>90(h852:k72?6=3`>h6=44i4294?=h91>1<75rb314>5<3290;w)?61;f2?M20m2B?;>5+e781?l212900e9m50;9j15<722e:494?::a660=83>1<7>t$0;2>a7<@==n7E:83:&f2?4>o283:17b?74;29?xd5;<0;694?:1y'5<7=l81C8:k4H550?!c12;1b8;4?::k7g?6=3`?;6=44o0:7>5<54;294~"6180o=6F;7d9K025<,l<1>6g;6;29?l2d2900e8>50;9l5=2=831vn?=<:187>5<7s-;2=7j>;I64a>N3?:1/i;4=;h65>5<>i60=0;66sm2e;94?3=83:p(<7>:e08L11b3A>5<55;294~"6180o>6F;7d9K025<,l<1>6g;6;29?l202900e9m50;9j15<722e:494?::a6a1=83?1<7>t$0;2>a4<@==n7E:83:&f2?4>o3k3:17d;?:188k4>32900qo90(h852:k72?6=3`><6=44i5a94?=n=90;66a>8583>>{e:m?1<7;50;2x 4?62m80D99j;I647>"b>380e9850;9j02<722c?o7>5;h73>5<908g6>N3?l1C8:=4$d496>o3>3:17d:8:188m1e=831b9=4?::m2<1<722wi>i<50;794?6|,83:6i<4H55f?M20;2.n:7<4i5494?=n<>0;66g;c;29?l372900c<6;:188yg4c93:197>50z&2=45;h64>5<1<75rb3f0>5<2290;w)?61;f1?M20m2B?;>5+e781?l212900e9950;9j0f<722c><7>5;n3;0?6=3th9o;4?:283>5}#90;18:j4H55f?M20;2c?57>5;h31e?6=3f;5;|`1g0<72:0;6=u+183902b<@==n7E:83:k7=?6=3`;9m7>5;n34`?6=3th9nn4?:583>5}#90;1=>;4H55f?M20;2c?57>5;h71>5<5<53;294~"6180?;i5G46g8L1143`>26=44i00b>5<908270=O<>o0D99<;h6:>5<n1<75rb3a0>5<4290;w)?61;64`>N3?l1C8:=4i5;94?=n9;k1<75`16f94?=zj;h36=4;:183!7>93;896F;7d9K025>o60h0;66a>7e83>>{e:j81<7=50;2x 4?62==o7E:8e:J736=n<00;66g>2`83>>i6?m0;66sm2c494?2=83:p(<7>:016?M20m2B?;>5f4883>>o2:3:17d?7a;29?j70l3:17pl=c083>6<729q/=4?546f8L11b3A>o313:17d;=:188m4>f2900c<9k:188yg4d83:1?7>50z&2=4<3?m1C8:k4H550?l2>2900e<349K02c<@==87d:6:188m04=831b=5o50;9l52b=831vn?li:180>5<7s-;2=7:8d:J73`=O<>90e9750;9j57g=831d=:j50;9~f7d7290?6=4?{%3:5?74=2B?;h5G4618m1?=831b9?4?::k2t$0;2>11c3A>l4?::m23a<722wi>lk50;694?6|,83:6<=:;I64a>N3?:1b844?::k66?6=3`;3m7>5;n34`?6=3th9io4?:483>5}#90;1h?5G46g8L1143-o=6?5f4783>>o3?3:17d:l:188m06=831d=5:50;9~f7cf290>6=4?{%3:5?b53A>=6=44i5594?=n0<729q/=4?5d39K02c<@==87)k9:39j03<722c?;7>5;h6`>5<93n97E:8e:J736=#m?097d:9:188m11=831b8n4?::k64?6=3f;387>5;|`1a2<72<0;6=u+1839`7=O<>o0D99<;%g5>7=n50;9l5=2=831vn?k9:186>5<7s-;2=7j=;I64a>N3?:1/i;4=;h65>5<>o283:17b?74;29?xd5m<0;684?:1y'5<7=l;1C8:k4H550?!c12;1b8;4?::k73?6=3`>h6=44i4294?=h91>1<75rb3g7>5<2290;w)?61;f1?M20m2B?;>5+e781?l212900e9950;9j0f<722c><7>5;n3;0?6=3th9i>4?:483>5}#90;1h?5G46g8L1143-o=6?5f4783>>o3?3:17d:l:188m06=831d=5:50;9~f711290?6=4?{%3:5?b43A>=6=44i4294?=n9191<75`19694?=zj;=<6=4;:183!7>93n87E:8e:J736=#m?0<7d:9:188m06=831b=5=50;9l5=2=831vn?9>:187>5<7s-;2=7j>;I64a>N3?:1/i;4=;h65>5<>i60=0;66sm26294?2=83:p(<7>:e38L11b3A>5;|`047<72:0;6=u+183902b<@==n7E:83:k7=?6=3`;9m7>5;n34`?6=3th85}#90;18:j4H55f?M20;2c?57>5;h31e?6=3f;5;|`1b3<72=0;6=u+1839563<@==n7E:83:k7=?6=3`?96=44i0:b>5<90873a=O<>o0D99<;h6:>5<5<54;294~"6180:?85G46g8L1143`>26=44i4094?=n91k1<75`16f94?=zj::26=4<:183!7>93>n1<75rb3d7>5<3290;w)?61;301>N3?l1C8:=4i5;94?=n=;0;66g>8`83>>i6?m0;66sm31:94?5=83:p(<7>:55g?M20m2B?;>5f4883>>o6:h0;66a>7e83>>{e:o91<7:50;2x 4?6289>7E:8e:J736=n<00;66g:2;29?l7?i3:17b?8d;29?xd48>0;6>4?:1y'5<7=<>n0D99j;I647>o313:17d?=a;29?j70l3:17pl=f383>1<729q/=4?51278L11b3A>50z&2=4<6;<1C8:k4H550?l2>2900e8<50;9j5=g=831d=:j50;9~f66229086=4?{%3:5?20l2B?;h5G4618m1?=831b=?o50;9l52b=831vn?h?:187>5<7s-;2=7?<5:J73`=O<>90e9750;9j17<722c:4l4?::m23a<722wi?=:50;194?6|,83:699k;I64a>N3?:1b844?::k26d<722e:;i4?::a6``=83>1<7>t$0;2>4523A>>7>5;h3;e?6=3f;5;|`046<72:0;6=u+183902b<@==n7E:83:k7=?6=3`;9m7>5;n34`?6=3th9ih4?:583>5}#90;1=>;4H55f?M20;2c?57>5;h71>5<5<54;294~"6180:?85G46g8L1143`>26=44i4094?=n91k1<75`16f94?=zj:;<6=4;:183!7>93n:7E:8e:J736=#m?097d:9:188m1e=831b9=4?::m2<1<722wi?1<729q/=4?5d09K02c<@==87)k9:39j03<722c?o7>5;h73>5<908g5>N3?l1C8:=4$d496>o3>3:17d:l:188m06=831d=5:50;9~f67d290?6=4?{%3:5?b63A>=6=44i5a94?=n=90;66a>8583>>{e;8h1<7:50;2x 4?62m;0D99j;I647>"b>380e9850;9j0f<722c><7>5;n3;0?6=3th8=l4?:583>5}#90;1h<5G46g8L1143-o=6?5f4783>>o3k3:17d;?:188k4>32900qo=>9;290?6=8r.:5<4k1:J73`=O<>90(h852:k72?6=3`>h6=44i4294?=h91>1<75rb23;>5<3290;w)?61;f2?M20m2B?;>5+e781?l212900e9m50;9j15<722e:494?::a740=83>1<7>t$0;2>a7<@==n7E:83:&f2?4>o283:17b?74;29?xd4:h0;684?:1y'5<7=l;1C8:k4H550?!c12;1b8;4?::k73?6=3`>h6=44i4294?=h91>1<75rb3;6>5<3290;w)?61;301>N3?l1C8:=4i5;94?=n=;0;66g>8`83>>i6?m0;66sm28694?2=83:p(<7>:016?M20m2B?;>5f4883>>o2:3:17d?7a;29?j70l3:17pl=9283>1<729q/=4?51278L11b3A>349K02c<@==87d:6:188m04=831b=5o50;9l52b=831vn?7>:187>5<7s-;2=7?<5:J73`=O<>90e9750;9j17<722c:4l4?::m23a<722wi>5<50;694?6|,83:6<=:;I64a>N3?:1b844?::k66?6=3`;3m7>5;n34`?6=3th94<4?:583>5}#90;1=>;4H55f?M20;2c?57>5;h71>5<5<54;294~"6180:?85G46g8L1143`>26=44i4094?=n91k1<75`16f94?=zj;=m6=4;:183!7>93;896F;7d9K025>o60h0;66a>7e83>>{e:>o1<7:50;2x 4?6289>7E:8e:J736=n<00;66g:2;29?l7?i3:17b?8d;29?xd4jm0;684?:1y'5<7=l;1C8:k4H550?!c12;1b8;4?::k73?6=3`>h6=44i4294?=h91>1<75rb2`a>5<2290;w)?61;f1?M20m2B?;>5+e781?l212900e9950;9j0f<722c><7>5;n3;0?6=3th8nn4?:483>5}#90;1h95G46g8L1143-o=6:5f4783>>o3?3:17d;?:188m4>42900c<6;:188yg5em3:197>50z&2=45;h64>5<>i60=0;66sm3cd94?3=83:p(<7>:e08L11b3A>5<7>55;294~"6180o>6F;7d9K025<,l<1>6g;6;29?l202900e9m50;9j15<722e:494?::a7f6=83?1<7>t$0;2>a4<@==n7E:83:&f2?4>o3k3:17d;?:188k4>32900qo=l1;291?6=8r.:5<4k2:J73`=O<>90(h852:k72?6=3`><6=44i5a94?=n=90;66a>8583>>{e;j91<7;50;2x 4?62m80D99j;I647>"b>380e9850;9j02<722c?o7>5;h73>5<908g6>N3?l1C8:=4$d496>o3>3:17d:8:188m1e=831b9=4?::m2<1<722wi?i?50;794?6|,83:6i<4H55f?M20;2.n:7<4i5494?=n<>0;66g;c;29?l372900c<6;:188yg5dn3:197>50z&2=45;h64>5<1<75rb2f3>5<2290;w)?61;f1?M20m2B?;>5+e781?l212900e9950;9j0f<722c><7>5;n3;0?6=3th8h?4?:483>5}#90;1h?5G46g8L1143-o=6?5f4783>>o3?3:17d:l:188m06=831d=5:50;9~f6b4290>6=4?{%3:5?b53A>=6=44i5594?=n0<729q/=4?5d39K02c<@==87)k9:39j03<722c?;7>5;h6`>5<93n97E:8e:J736=#m?097d:9:188m11=831b8n4?::k64?6=3f;387>5;|`0`0<72<0;6=u+1839`7=O<>o0D99<;%g5>7=n50;9l5=2=831vn>j8:186>5<7s-;2=7j=;I64a>N3?:1/i;4=;h65>5<>o283:17b?74;29?xd4l10;684?:1y'5<7=l;1C8:k4H550?!c12;1b8;4?::k73?6=3`>h6=44i4294?=h91>1<75rb2ce>5<2290;w)?61;f1?M20m2B?;>5+e781?l212900e9950;9j0f<722c><7>5;n3;0?6=3th8mh4?:483>5}#90;1h?5G46g8L1143-o=6?5f4783>>o3?3:17d:l:188m06=831d=5:50;9~f6d7290>6=4?{%3:5?b53A>=6=44i5594?=n0<729q/=4?5d39K02c<@==87)k9:39j03<722c?;7>5;h6`>5<93n97E:8e:J736=#m?097d:9:188m11=831b8n4?::k64?6=3f;387>5;|`0ea<72<0;6=u+1839`7=O<>o0D99<;%g5>7=n50;9l5=2=831vn>o6:186>5<7s-;2=7j=;I64a>N3?:1/i;4=;h65>5<>o283:17b?74;29?xd4i10;684?:1y'5<7=l=1C8:k4H550?!c12>1b8;4?::k73?6=3`?;6=44i0:0>5<908g6>N3?l1C8:=4$d496>o3>3:17d:8:188m1e=831b9=4?::m2<1<722wi?l950;794?6|,83:6i:4H55f?M20;2.n:794i5494?=n<>0;66g:0;29?l7?;3:17b?74;29?xd41k0;6>4?:1y'5<7=<>n0D99j;I647>o313:17d?=a;29?j70l3:17pl<9`83>6<729q/=4?546f8L11b3A>o313:17d;=:188m4>f2900c<9k:188yg5>13:1?7>50z&2=4<3?m1C8:k4H550?l2>2900e<349K02c<@==87d:6:188m04=831b=5o50;9l52b=831vn>77:180>5<7s-;2=7:8d:J73`=O<>90e9750;9j57g=831d=:j50;9~f6>d290?6=4?{%3:5?74=2B?;h5G4618m1?=831b9?4?::k2t$0;2>11c3A>l4?::m23a<722wi?5o50;694?6|,83:6<=:;I64a>N3?:1b844?::k66?6=3`;3m7>5;n34`?6=3th85;4?:283>5}#90;18:j4H55f?M20;2c?57>5;h31e?6=3f;5;|`0<=<72=0;6=u+1839563<@==n7E:83:k7=?6=3`?96=44i0:b>5<90873a=O<>o0D99<;h6:>5<5<54;294~"6180:?85G46g8L1143`>26=44i4094?=n91k1<75`16f94?=zj:3?6=4<:183!7>93>n1<75rb2:7>5<3290;w)?61;301>N3?l1C8:=4i5;94?=n=;0;66g>8`83>>i6?m0;66sm38194?5=83:p(<7>:55g?M20m2B?;>5f4883>>o6:h0;66a>7e83>>{e;181<7:50;2x 4?6289>7E:8e:J736=n<00;66g:2;29?l7?i3:17b?8d;29?xd41;0;6>4?:1y'5<7=<>n0D99j;I647>o313:17d?=a;29?j70l3:17pl<8183>1<729q/=4?51278L11b3A>90(h852:k72?6=3`><6=44i5a94?=n=90;66a>8583>>{e;lh1<7;50;2x 4?62m80D99j;I647>"b>380e9850;9j02<722c?o7>5;h73>5<908g6>N3?l1C8:=4$d496>o3>3:17d:8:188m1e=831b9=4?::m2<1<722wi?h750;794?6|,83:6i<4H55f?M20;2.n:7<4i5494?=n<>0;66g;c;29?l372900c<6;:188yg5b03:197>50z&2=45;h64>5<>i60=0;66sm3d594?3=83:p(<7>:e08L11b3A>5<55;294~"6180o>6F;7d9K025<,l<1>6g;6;29?l202900e9m50;9j15<722e:494?::a7`3=83?1<7>t$0;2>a4<@==n7E:83:&f2?4>o3k3:17d;?:188k4>32900qo=j4;291?6=8r.:5<4k2:J73`=O<>90(h852:k72?6=3`><6=44i5a94?=n=90;66a>8583>>{e;l91<7;50;2x 4?62m80D99j;I647>"b>380e9850;9j02<722c?o7>5;h73>5<908270=O<>o0D99<;h6:>5<n1<75rb216>5<3290;w)?61;301>N3?l1C8:=4i5;94?=n=;0;66g>8`83>>i6?m0;66sm32494?2=83:p(<7>:016?M20m2B?;>5f4883>>o2:3:17d?7a;29?j70l3:17pl<3683>1<729q/=4?51278L11b3A>349K02c<@==87d:6:188m04=831b=5o50;9l52b=831vn>:8:187>5<7s-;2=7?<5:J73`=O<>90e9750;9j17<722c:4l4?::m23a<722wi?9650;694?6|,83:6<=:;I64a>N3?:1b844?::k66?6=3`;3m7>5;n34`?6=3th8844?:583>5}#90;1=>;4H55f?M20;2c?57>5;h71>5<5<54;294~"6180:?85G46g8L1143`>26=44i4094?=n91k1<75`16f94?=zj:>i6=4;:183!7>93;896F;7d9K025>o60h0;66a>7e83>>{e;7E:8e:J736=n<00;66g:2;29?l7?i3:17b?8d;29?xd4=l0;694?:1y'5<7=9:?0D99j;I647>o313:17d;=:188m4>f2900c<9k:188yg52n3:187>50z&2=4<6;<1C8:k4H550?l2>2900e8<50;9j5=g=831d=:j50;9~f607290?6=4?{%3:5?74=2B?;h5G4618m1?=831b9?4?::k21<7>t$0;2>4523A>>7>5;h3;e?6=3f;5;|`035<72=0;6=u+1839`4=O<>o0D99<;%g5>7=n50z&2=45;h6`>5<93n97E:8e:J736=#m?097d:9:188m11=831b8n4?::k64?6=3f;387>5;|`76c<72<0;6=u+1839`0=O<>o0D99<;%g5>7=n32900qo:=e;291?6=8r.:5<4k5:J73`=O<>90(h852:k72?6=3`><6=44i4294?=n91?1<75`19694?=zj=8o6=4::183!7>93n>7E:8e:J736=#m?097d:9:188m11=831b9=4?::k2<0<722e:494?::a07e=83?1<7>t$0;2>a3<@==n7E:83:&f2?4>o283:17d?75;29?j7?<3:17pl;2c83>0<729q/=4?5d49K02c<@==87)k9:39j03<722c?;7>5;h73>5<6=44o0:7>5<9m7>55;294~"6180o96F;7d9K025<,l<1>6g;6;29?l202900e8>50;9j5=3=831d=5:50;9~f14?290>6=4?{%3:5?b23A>=6=44i5594?=n=90;66g>8483>>i60=0;66sm43594?3=83:p(<7>:e78L11b3A>5;n3;0?6=3th?>;4?:483>5}#90;1h85G46g8L1143-o=6?5f4783>>o3?3:17d;?:188m4>22900c<6;:188yg25=3:197>50z&2=45;h64>5<1<75rb507>5<2290;w)?61;f6?M20m2B?;>5+e781?l212900e9950;9j15<722c:484?::m2<1<722wi8?=50;794?6|,83:6i;4H55f?M20;2.n:7<4i5494?=n<>0;66g:0;29?l7?=3:17b?74;29?xd3:;0;684?:1y'5<7=l<1C8:k4H550?!c12;1b8;4?::k73?6=3`?;6=44i0:6>5<908g1>N3?l1C8:=4$d496>o3>3:17d:8:188m06=831b=5;50;9l5=2=831vn95<7s-;2=7j:;I64a>N3?:1/i;4=;h65>5<>o60<0;66a>8583>>{e<8l1<7;50;2x 4?62m?0D99j;I647>"b>380e9850;9j02<722c><7>5;h3;1?6=3f;387>5;|`75a<72<0;6=u+1839`0=O<>o0D99<;%g5>7=n32900qo:>c;291?6=8r.:5<4k5:J73`=O<>90(h852:k72?6=3`><6=44i4294?=n91?1<75`19694?=zj=;i6=4::183!7>93n>7E:8e:J736=#m?097d:9:188m11=831b9=4?::k2<0<722e:494?::a04g=83?1<7>t$0;2>a3<@==n7E:83:&f2?4>o283:17d?75;29?j7?<3:17pl;1883>0<729q/=4?5d49K02c<@==87)k9:39j03<722c?;7>5;h73>5<6=44o0:7>5<:47>55;294~"6180o96F;7d9K025<,l<1>6g;6;29?l202900e8>50;9j5=3=831d=5:50;9~f170290>6=4?{%3:5?b23A>=6=44i5594?=n=90;66g>8483>>i60=0;66sm40494?3=83:p(<7>:e78L11b3A>5;n3;0?6=3th?=84?:483>5}#90;1h85G46g8L1143-o=6?5f4783>>o3?3:17d;?:188m4>22900c<6;:188yg26<3:197>50z&2=45;h64>5<1<75rb516>5<2290;w)?61;f6?M20m2B?;>5+e781?l212900e9950;9j15<722c:484?::m2<1<722wi8>:50;794?6|,83:6i;4H55f?M20;2.n:7<4i5494?=n<>0;66g:0;29?l7?=3:17b?74;29?xd3;:0;684?:1y'5<7=l<1C8:k4H550?!c12;1b8;4?::k73?6=3`?;6=44i0:6>5<908g1>N3?l1C8:=4$d496>o3>3:17d:8:188m06=831b=5;50;9l5=2=831vn9=>:186>5<7s-;2=7j:;I64a>N3?:1/i;4=;h65>5<>o60<0;66a>8583>>{e<::1<7;50;2x 4?62m?0D99j;I647>"b>380e9850;9j02<722c><7>5;h3;1?6=3f;387>5;|`76<<72<0;6=u+1839`0=O<>o0D99<;%g5>7=n32900qo:>e;291?6=8r.:5<4k5:J73`=O<>90(h852:k72?6=3`><6=44i4294?=n91?1<75`19694?=zj=;86=4::183!7>93n>7E:8e:J736=#m?097d:9:188m11=831b9=4?::k2<0<722e:494?::a044=83?1<7>t$0;2>a3<@==n7E:83:&f2?4>o283:17d?75;29?j7?<3:17pl;6e83>6<729q/=4?513d8L11b3A>5<7s-;2=7?=f:J73`=O<>90(h851`9j`d<722con7>5;n34`?6=3th9=54?:283>5}#90;1=?h4H55f?M20;2.n:7?j;hfb>5<93;9j6F;7d9K025<,l<1=h5fd`83>>ocj3:17b?8d;29?xd6i;0;6>4?:1y'5<7=9;l0D99j;I647>"b>3;n7djn:188mad=831d=:j50;9~f4g629086=4?{%3:5?75n2B?;h5G4618 `0=9l1bhl4?::kgf?6=3f;5;|`2e5<72:0;6=u+183957`<@==n7E:83:&f2?7b3`nj6=44ie`94?=h9>n1<75rb0;e>5<4290;w)?61;31b>N3?l1C8:=4$d495`=nlh0;66gkb;29?j70l3:17pl>9d83>6<729q/=4?513d8L11b3A>5<7s-;2=7?=f:J73`=O<>90(h851d9j`d<722con7>5;n34`?6=3th:5n4?:283>5}#90;1=?h4H55f?M20;2.n:7?j;hfb>5<93;9j6F;7d9K025<,l<1=h5fd`83>>ocj3:17b?8d;29?xd61h0;6>4?:1y'5<7=9;l0D99j;I647>"b>3;n7djn:188mad=831d=:j50;9~f4?>29086=4?{%3:5?75n2B?;h5G4618 `0=9l1bhl4?::kgf?6=3f;5;|`2==<72:0;6=u+183957`<@==n7E:83:&f2?7b3`nj6=44ie`94?=h9>n1<75rb0;4>5<4290;w)?61;31b>N3?l1C8:=4$d495`=nlh0;66gkb;29?j70l3:17pl>9783>6<729q/=4?513d8L11b3A>5<7s-;2=7?=f:J73`=O<>90(h851d9j`d<722con7>5;n34`?6=3th:594?:283>5}#90;1=?h4H55f?M20;2.n:7?j;hfb>5<93;9j6F;7d9K025<,l<1=h5fd`83>>ocj3:17b?8d;29?xd61;0;6>4?:1y'5<7=9;l0D99j;I647>"b>3;n7djn:188mad=831d=:j50;9~f712290?6=4?{%3:5?7482B?;h5G4618 `0=km1bhl4?::kgf?6=3`nh6=44o05g>5<54;294~"6180:?=5G46g8L1143-o=6?;4iec94?=nlk0;66gkc;29?j70l3:17pl>b983>1<729q/=4?51228L11b3A>t$0;2>4563A>5;hfa>5<>i6?m0;66sm20a94?3=83:p(<7>:012?M20m2B?;>5+e7814>oci3:17djm:188mae=831bhi4?::m23a<722wi=oo50;794?6|,83:6<=>;I64a>N3?:1/i;4=0:kge?6=3`ni6=44iea94?=nlm0;66a>7e83>>{e:>31<7;50;2x 4?6289:7E:8e:J736=#m?09>6gka;29?lbe2900eim50;9j`a<722e:;i4?::a63b=83>1<7>t$0;2>4573A>5;hfa>5<93;9j6F;7d9K025<,l<1=h5fd`83>>ocj3:17b?8d;29?xd6jj0;6>4?:1y'5<7=9;l0D99j;I647>"b>3;n7djn:188mad=831d=:j50;9~f747290?6=4?{%3:5?7482B?;h5G4618 `0=:<1bhl4?::kgf?6=3`nh6=44o05g>5<54;294~"6180:?=5G46g8L1143-o=6?;4iec94?=nlk0;66gkc;29?j70l3:17pl=2383>0<729q/=4?51238L11b3A>5;n34`?6=3th:o=4?:483>5}#90;1=>?4H55f?M20;2.n:75<>ocl3:17b?8d;29?xd3=j0;694?:1y'5<7=9::0D99j;I647>"b>3?:7djn:188mad=831bhn4?::m23a<722wi>;m50;794?6|,83:6<=>;I64a>N3?:1/i;4>3:kge?6=3`ni6=44iea94?=nlm0;66a>7e83>>{e:0l1<7=50;2x 4?6288m7E:8e:J736=#m?09?6gka;29?lbe2900c<9k:188yg4?k3:1?7>50z&2=4<6:o1C8:k4H550?!c12;90eio50;9j`g<722e:;i4?::a73d=83?1<7>t$0;2>4563A>5;hfa>5<>i6?m0;66sm34794?3=83:p(<7>:012?M20m2B?;>5+e7810>oci3:17djm:188mae=831bhi4?::m23a<722wi?9<50;794?6|,83:6<=>;I64a>N3?:1/i;4=4:kge?6=3`ni6=44iea94?=nlm0;66a>7e83>>{e;?k1<7;50;2x 4?6289:7E:8e:J736=#m?0986gka;29?lbe2900eim50;9j`a<722e:;i4?::a702=83?1<7>t$0;2>4563A>5;hfa>5<>i6?m0;66sm35394?3=83:p(<7>:012?M20m2B?;>5+e7810>oci3:17djm:188mae=831bhi4?::m23a<722wi>4k50;794?6|,83:6<=>;I64a>N3?:1/i;4=4:kge?6=3`ni6=44iea94?=nlm0;66a>7e83>>{e:1h1<7;50;2x 4?6289:7E:8e:J736=#m?0986gka;29?lbe2900eim50;9j`a<722e:;i4?::a73?=83?1<7>t$0;2>4563A>5;hfa>5<>i6?m0;66sm34194?3=83:p(<7>:012?M20m2B?;>5+e7810>oci3:17djm:188mae=831bhi4?::m23a<722wi?9>50;794?6|,83:6<=>;I64a>N3?:1/i;4=4:kge?6=3`ni6=44iea94?=nlm0;66a>7e83>>{e:0n1<7;50;2x 4?6289:7E:8e:J736=#m?0986gka;29?lbe2900eim50;9j`a<722e:;i4?::a6=g=83?1<7>t$0;2>4563A>5;hfa>5<>i6?m0;66sm37:94?3=83:p(<7>:012?M20m2B?;>5+e7810>oci3:17djm:188mae=831bhi4?::m23a<722wi?8<50;794?6|,83:6<=>;I64a>N3?:1/i;4=4:kge?6=3`ni6=44iea94?=nlm0;66a>7e83>>{e;:l1<7;50;2x 4?6289:7E:8e:J736=#m?0986gka;29?lbe2900eim50;9j`a<722e:;i4?::a6t$0;2>4563A>5;hfa>5<>i6?m0;66sm29;94?3=83:p(<7>:012?M20m2B?;>5+e7810>oci3:17djm:188mae=831bhi4?::m23a<722wi?:=50;694?6|,83:6<=?;I64a>N3?:1/i;4le:kge?6=3`ni6=44iea94?=h9>n1<75rb24f>5<3290;w)?61;304>N3?l1C8:=4$d49g`=nlh0;66gkb;29?lbd2900c<9k:188yg4f<3:187>50z&2=4<6;91C8:k4H550?!c12jo0eio50;9j`g<722coo7>5;n34`?6=3th8::4?:583>5}#90;1=>>4H55f?M20;2.n:784iec94?=nlk0;66gkc;29?j70l3:17pl<5083>1<729q/=4?51228L11b3A>5;|`07`<72=0;6=u+1839566<@==n7E:83:&f2?0>ock3:17b?8d;29?xd51k0;684?:1y'5<7=9:;0D99j;I647>"b>38?7djn:188mad=831bhn4?::kg`?6=3f;5;|`1<=<72<0;6=u+1839567<@==n7E:83:&f2?433`nj6=44ie`94?=nlj0;66gkd;29?j70l3:17pl=2483>6<729q/=4?513d8L11b3A>5<7s-;2=7?=f:J73`=O<>90(h85229j`d<722con7>5;n34`?6=3th9>54?:583>5}#90;1=>>4H55f?M20;2.n:7?i;hfb>5<>i6?m0;66sm1b494?2=83:p(<7>:013?M20m2B?;>5+e782b>oci3:17djm:188mae=831d=:j50;9~f61329086=4?{%3:5?75n2B?;h5G4618 `0=9;1bhl4?::kgf?6=3f;5;|`1fa<72;0;6=u+183957c<@==n7E:83:&f2?753`nj6=44o05g>5<52;294~"6180:>h5G46g8L1143-o=6<<4iec94?=h9>n1<75rb3`:>5<5290;w)?61;31a>N3?l1C8:=4$d4957=nlh0;66a>7e83>>{e:k=1<7<50;2x 4?6288n7E:8e:J736=#m?0:>6gka;29?j70l3:17pl=b483>7<729q/=4?513g8L11b3A>7>50z&2=4<6:l1C8:k4H550?!c12880eio50;9l52b=831vn?l>:181>5<7s-;2=7?=e:J73`=O<>90(h85139j`d<722e:;i4?::a6d`=8381<7>t$0;2>44b3A>5;n34`?6=3th85<4?:383>5}#90;1=?k4H55f?M20;2.n:7?=;hfb>5<90826`=O<>o0D99<;%g5>4493;9i6F;7d9K025<,l<1=?5fd`83>>i6?m0;66sm39`94?4=83:p(<7>:00f?M20m2B?;>5+e7826>oci3:17b?8d;29?xd4000;6?4?:1y'5<7=9;o0D99j;I647>"b>3;97djn:188k41c2900qo=77;296?6=8r.:5<4>2d9K02c<@==87)k9:008mag=831d=:j50;9~f6>229096=4?{%3:5?75m2B?;h5G4618 `0=9;1bhl4?::m23a<722wi?5=50;094?6|,83:6<N3?:1/i;4>2:kge?6=3f;5;|`0<4<72;0;6=u+183957c<@==n7E:83:&f2?753`nj6=44o05g>5<52;294~"6180:>h5G46g8L1143-o=6<<4iec94?=h9>n1<75rb2;`>5<5290;w)?61;31a>N3?l1C8:=4$d4957=nlh0;66a>7e83>>{e:ok1<7=50;2x 4?6288m7E:8e:J736=#m?09?6gka;29?lbe2900c<9k:188yg4aj3:1?7>50z&2=4<6:o1C8:k4H550?!c12;90eio50;9j`g<722e:;i4?::a6ce=8391<7>t$0;2>44a3A>5;hfa>5<90826c=O<>o0D99<;%g5>75>i6?m0;66sm2gg94?5=83:p(<7>:00e?M20m2B?;>5+e7817>oci3:17djm:188k41c2900qo2g9K02c<@==87)k9:318mag=831bho4?::m23a<722wi?=>50;194?6|,83:6<N3?:1/i;4=3:kge?6=3`ni6=44o05g>5<53;294~"6180:>k5G46g8L1143-o=6?=4iec94?=nlk0;66a>7e83>>{e:o=1<7=50;2x 4?6288m7E:8e:J736=#m?09?6gka;29?lbe2900c<9k:188yg55m3:197>50z&2=4<6;81C8:k4H550?!c12m<0eio50;9j`g<722coo7>5;hfg>5<908274=O<>o0D99<;%g5>77>ock3:17djk:188k41c2900qo=85;297?6=8r.:5<4>2g9K02c<@==87)k9:008mag=831bho4?::m23a<722wi>k750;094?6|,83:6<<6;I64a>N3?:1bh44?::m23a<722wi?;h50;094?6|,83:6<<6;I64a>N3?:1bh44?::m23a<722wi??m50;794?6|,83:6<=<;I64a>N3?:1/i;4=1:kge?6=3`ni6=44iea94?=nlm0;66a>2c83>>{e:;>1<7850;2x 4?628997E:8e:J736=#m?09:6gka;29?lbe2900eim50;9j`a<722e:>o4?::m23a<722wi=n<50;494?6|,83:6<==;I64a>N3?:1/i;4=6:kge?6=3`ni6=44iea94?=nlm0;66a>2c83>>i6?m0;66sm44c94?>0290;wE:83:&2=4<60?1Q884n{8813?`=9?0:87?l:02952<6=3;o6p*>2987?!bb2<1/hk4:;%g3>0=#m80>7)k=:49'a6<23-o?685+cc8`b>"b?3?0(h655:&f=?3<,lk196*jb;78 `e==2.nh7;4$dg91>"bn3?0(k>55:&e5?3<,o8196*i3;78 c2==2.m97;4$g491>"a?3?0(k655:&e=?3<,ok196*ib;78 ce==2.mh7;4$gg91>"an3?0(<>?:49'557==2.:"68?0>7)??7;78 46?2<1/==755:&24d<23-;;n7;4$02`>0=#99n196*>0d86?!77n3?0("69?0>7)?>7;78 47?2<1/=<755:&25d<23-;:n7;4$03`>0=#98n196*>1d86?!76n3?0(<?4:;%317?3<,88?685+13791>"6:?0>7)?=7;18 4>e2=80(h;55:&2<47?77:&73<<60>1e5h4?;oa3>5=i9121=?5a19;961=i<>k1=?5a46`961=#kj0hj6*>8d87?l2f2900e9l50;9j020=831bol4?::k;6=8083?>o4=3:1(<6=:248j4>62810e>:50;&2<7<4>2d:4<4=;:k07?6=,8296>84n0:2>6=83802>h6080?76g<1;29 4>52:<0b<6>:498m66=83.:4?4<6:l2<4<132c9j7>5$0:1>60808;?>o5l3:1(<6=:248j4>62010e9?50;&2<7<382d:4<4?;:k0b?6=,82969>4n0:2>4=83874>h6080976g52=:0b<6>:298m6e=83.:4?4;0:l2<4<332c8n7>5$0:1>168085?>o413:1(<6=:528j4>62>10e>650;&2<7<382d:4<47;:k6e?6=,8296874n0:2>5=8386=>h6080:76g:7;29 4>52<30b<6>:398m00=83.:4?4:9:l2<4<432c>97>5$0:1>0?56`>8086?>o1;3:1(<6=:4;8j4>62?10e;<50;&2<7<212d:4<48;:k55?6=,8296874n0:2>==8386=>h6080276g:f;29 4>52<30b<6>:`98m0c=83.:4?4:9:l2<4h7>5$0:1>0?56`>808g?>o2j3:1(<6=:4;8j4>62l10e8=50;&2<7<212d:4<4i;:k;3?6=,8296584n0:2>5=838;2>h6080:76am8;29 4>52k=0b<6>:198kg0=83.:4?4m7:l2<4<632ei87>5$0:1>g18080?>ie:3:1(<6=:c58j4>62=10co?50;&2<73=838a3>h6080<76ane;29 4>52k=0b<6>:998kdb=83.:4?4m7:l2<4<>32ejo7>5$0:1>g1808a?>if13:1(<6=:c58j4>62j10cl650;&2<7`=838a3>h6080m76an5;29 4>52k=0b<6>:028?jg3290/=5<5b69m5=7=9810cl=50;&2<72:9le7<72-;3>7l8;o3;5?7432ej=7>5$0:1>g15<#9181n:5a193950=838a3>h6080::65`bd83>!7?:3h<7c?71;34?>iel3:1(<6=:c58j4>628207bll:18'5=4=j>1e=5?51898kgd=83.:4?4m7:l2<4<6i21dnl4?:%3;6?d03g;3=7?m;:ma=?6=,8296o94n0:2>4e<3fh>6=4+1909f2=i91;1=i54o`c94?"60;0i;6`>8082a>=h1o0;6)?72;`4?k7?93;m76al8;29 4>52j=0b<6>:198kf0=83.:4?4l7:l2<4<632eh97>5$0:1>f18080?>od13:17d?7f;29?l20?3:17d9k:18'5=4=?j1e=5?50:9j3g<72-;3>79l;o3;5?7<3`=26=4+19093f=i91;1>65f7983>!7?:3=h7c?71;18?l10290/=5<57b9m5=7=<21b;;4?:%3;6?1d3g;3=7;4;h56>5<#9181;n5a19392>=n?=0;6)?72;5`?k7?93=07d9<:18'5=4=?j1e=5?58:9j37<72-;3>79l;o3;5??<3`=:6=4+19093f=i91;1m65f7183>!7?:3=h7c?71;`8?l0b290/=5<57b9m5=7=k21b:i4?:%3;6?1d3g;3=7j4;h4`>5<#9181;n5a1939a>=n>k0;6)?72;5`?k7?93l07d8n:18'5=4=?j1e=5?51198m3?=83.:4?48c:l2<4<6921b:54?:%3;6?1d3g;3=7?=;:k53?6=,8296:m4n0:2>45<3`<=6=4+19093f=i91;1=954i7794?"60;080821>=n0=0;6)?72;5`?k7?93;=76g73;29 4>52>i0b<6>:058?l>5290/=5<57b9m5=7=9110e5?50;&2<7<0k2d:4<4>9:9j<5<72-;3>79l;o3;5?7f32c5$0:1>2e5<#9181;n5a19395f=k1<7*>8384g>h6080:h65f6g83>!7?:3=h7c?71;3f?>o1<3:1(<6=:6a8j4>628l07d6l:18'5=4=0k1e=5?50:9j76m;o3;5?7<3`226=4+190965`9583>!7?:3387c?71;28?j?5290/=5<5929m5=7=921d5<4?:%3;6??43g;3=7<4;n;3>5<#91815>5a19397>=h0o0;6)?72;;0?k7?93>07b6j:18'5=4=1:1e=5?55:9l=a<72-;3>77<;o3;5?0<3f3h6=4+1909=6=i91;1;65`9c83>!7?:3387c?71;:8?j?f290/=5<5929m5=7=121d544?:%3;6??43g;3=7o4;n;;>5<#91815>5a1939f>=h1>0;6)?72;;0?k7?93i07b79:18'5=4=1:1e=5?5d:9l=0<72-;3>77<;o3;5?c<3f2o6=4+1909=6=i91;1j65`c283>!7?:3i97c?71;28?je6290/=5<5c39m5=7=921v8;i:185[32n279;84kb:?136X2981U9;84^431?[2><2T?5>5Q4808Z1?63W>2<6P;8g9]0=c80R89>;_744>X2>o1U9;k4^44g?[31k2T>:o5Q57c8Z00>3W?>o6P:5c9]10g;3?o0o;63;68864>;3=l0><63;69864>;3>>0><63;67864>;3?80><63;71864>;5jj0>>63=b`866>;5j10>>63=b7866>;5j=0>>63=b3866>;5j90>>63=ad866>;5mm0:4l52287917=::0>19?52281917=::0819?52283917=::1819?52293917=::1:19?5226d917=::>o19?52382917=:;1o19?5239a917=:;1k19?5239:917=:;1<19?52396917=:;1819?52392917=:;:>19?52327917=:;:<19?52325917=:;:219?52355917=:;=219?5235;917=:;=k19?5235`917=:;11034>>m79k;<66e?1e34>>m796;<66e?1?34>>m798;<66e?1134>>m79:;<66e?1334>>m79<;<66e?1534>>m79>;<66e?1734>>m78j;<66e?0c34>>m78l;<66e?0e34>>m78n;<66e?0>34>>m787;<66e?0034>>m789;<66e?0234>>m76;;<66e?>434>>m76=;<66e?>634>>m76?;<66e?1a34>>m79j;<66e?1f34>>m78i;<66e?0334>>m76l;<66e?>f34>>m766;|q02f<72;qU8594=24`>4>33ty>:<4?:2y]137<5=<26<6<;<66a?7?;2wx>:950;0xZ061348<;7?74:p122=839pR89;;<140?bf349<97jn;|q616<72?2pR8;<;<0b6?2134>=<7:9;<66b?2134>>i7:9;<65=;7:9;<652?21348::7:9;<021?21348:87:9;<027?21348:>7:9;<025?21348:<7:9;<03b?21348;i7:9;<056?21348==7:9;<054?21348>j7:9;<06a?21348>h7:9;<06g?21348>n7:9;<06e?21348><7:9;<07b?21348?i7:9;<07`?21348?o7:9;<07f?21348?m7:9;<07=?21348?47:9;<073?2134;o47:9;<3g3?2134;o:7:9;<3g1?2134;o87:9;<3g7?2134;o>7:9;<3g5?2134;o<7:9;<0g=?21348o47:9;<0g3?21348o:7:9;<0g1?21348o87:9;<0g6?21348o=7:9;<0g7?21348nn7:9;<0fe?21348n57:9;<0f9i7:9;<61`?2134>9o7:9;<61f?2134>9m7:9;<619;7:9;<612?2134>997:9;<610?2134>9?7:9;<616?2134>9=7:9;<614?2134>:j7:9;<62`?2134>:o7:9;<62f?2134>:m7:9;<62=?2134>:47:9;<623?2134>::7:9;<621?2134>:87:9;<601?2134>887:9;<607?2134>8>7:9;<605?2134>8<7:9;<61=?2134>:i7:9;<627?2134>:>7:9;<66e?2e3ty8;<4?:3y]15e<5:=:6<6;;|q62=<72?8pR887;<65f?2134>=57:9;<65e?2134><=7:9;<644?2134;i87:9;<3a7?2134;i>7:9;<3a5?2134;i<7:9;<3bb?2134;ji7:9;<3b`?2134;jo7:9;<3eg?2134;mn7:9;<3ee?2134;m57:9;<3e7:9;<00g?213488n7:9;<00e?21348857:9;<00l4?:3y]167<5:8j6<6;;|q0b3<72;qU8i74=53a>4>33ty8j84?:3y]0a><5=;j6<6;;|q0b1<72;qU8i94=53:>4>33ty8j>4?:3y]0a0<5=;36<6;;|q0b7<72;qU8i;4=534>4>33ty8j<4?:3y]0a2<5=;=6<6;;|q0b5<72;qU8i<4=536>4>33ty8ik4?:3y]0a7<5=;?6<6;;|q754<72;qU8i>4=516>4>33ty?==4?:3y]0f`<5=9?6<6;;|q74c<72;qU8nk4=510>4>33ty?4>33ty?4>33ty?<94?:3y]0f?<5=;n6<6;;|q0b<<72;qU8n94=530>4>33ty8ih4?:3y]0f0<5=;96<6;;|q74d<72;qU8n;4=50e>4>33ty?<44?:3y]0f2<5=8n6<6;;|q74=<72;qU8n=4=50g>4>33ty?<:4?:3y]0f4<5=8h6<6;;|q743<72;qU8n?4=50a>4>33ty?<84?:3y]0f6<5=8j6<6;;|q746<72;qU8oh4=50;>4>33ty?4>33ty?<=4?:3y]0ac<5=8>6<6;;|q0bc<72;qU8ij4=507>4>33ty8jh4?:3y]0ae<5=886<6;;|q0ba<72;qU8il4=501>4>33ty8jn4?:3y]0ag<5=8:6<6;;|q0bg<72;qU8i=4=503>4>33ty8jl4?:3y]0f><5=;m6<6;;|q0b=<72;qU8oj4=53g>4>33ty8j:4?:3y]0ge<5=;h6<6;;|q7f7<72;qU8l>4=57b>=1i<7>52z\7=c=:<5<5sW>2i63;5`86<>{t7}Y<0i019;n:448yv2fk3:1>vP;9c9>00g==<1v9om:181[2>i27?9l4:4:p0dg=838pR976;<66e?043ty?no4?:3y]0d><5=?j6;<4}r6ae?6=:rT?m:5244c9<0=z{=h26=4={_6b2>;3=h0==6s|4c:94?4|V=k>70::a;43?xu3j>0;6?uQ4`68913f2>m7;l;|q7f6<72;qU8464=57b>0dj57>52z\7=2=:<5rs01:>53<7?8f:?1f`<31279mh4;9:?1a`<2:279ii4;9:?1=4<31279;h4;9:?0=7<312784=4;9:?071<312788:4;9:?01a<312wx>l=50;0x97g52<:01?o;:05g?xu3><0;6<6t=3c1>4>434>=47?74:?1`<<3k279h54;c:?1`2<3k279h;4;c:?1`0<3k279h94;c:?1`7<3k279h<4>829>6a5=hl54b9>6`g=h754b9>6`>=h954b9>6`0=h;54b9>6`2=h=54b9>620=91901?98:0:0?84093>h70<80;6`?xu5i;0;69u22`095=2<5;=86ij4=57`>ag<5;;3>;0om6s|47c94?5|5=4=54:>11<5=<63;5d82<1=:5<4s4>=57?74:?72d<2827?:i4kb:p037=83>p1987:0:0?821?3;3?63;6782<6=::5a897772=i01?>i:5a8976b2=i01?8=:5a897062=i01?8?:5a8973a2=i01?;j:5a8973c2=i01?;l:5a8973e2=i01?;n:5a897372=i01?:i:5a8972b2=i01?:k:5a8972d2=i01?:m:5a8972f2=i01?:6:5a8972?2=i01?:8:5a894b?2=i01:5a894b72=i0q~:93;2962}:4>234>9i7?75:?76a<60<168?m51978914e282>70:=a;3;1>;3:10:485243595=3<5=8=6<6:;<611?7?=27?>94>849>075=91?019<=:0:6?82593;3963;2182<0=:<8l1=5;4=53g>4>234>:o7?75:?75g<60<168282>70:>8;3;1>;39>0:485240495=3<5=;>6<6:;<620?7?=27??84>849>062=91?019=<:0:6?824:3;3963;3082<0=:<::1=5;4=50:>4>234>:i7?75:?756<60<168<<51978913d2mh019;n:0;3?xu3>j0;6>u246395=5<5==;6<6<;<65`?70l2wx8;h50;1082093;3863<1687g>;49o0?o63<1d87g>;49m0?o63<1b87g>;49k0?o63<1`87g>;4900?o63<1987g>;49?0?o63;4jk0?o6318n523e390f=:;jl1=5=4=2f3>1e<5:n969m4=2f0>1e<5:n=69m4=2f7>1e<5:n>69m4=2f4>1e<5:n369m4=2ce>1e<5:kn69m4=2`3>1e<5:kh69m4=2ca>1e<5:ko69m4=2c:>1e<5:k36<6<;<1be?2d349j;7?73:?0af<3k278io4;c:?0ad<3k278i44;c:?0a=<3k278i:4;c:?0a3<3k278i84;c:?0a1<3k278i>4;c:p03c=838jw0:80;3;0>;6j=0?o63>b287g>;6j;0?o63>b087g>;6j90?o63>ag87g>;6il0?o63>ae87g>;6ij0?o63>fb87g>;6nk0?o63>f`87g>;6n00?o63>f987g>;6n>0?o63>f787g>;6n<0?o63>f587g>;6mh0?o63>e887g>;6m10?o63>e687g>;6m?0?o63>e487g>;6m=0?o63>e287g>;6m;0?o63=3b87g>;5;k0?o63=3`87g>;5;00?o63=3987g>;5;>0?o63=3787g>;5;<0?o63=3587g>;5;:0?o63<2`87g>;4?90?o63<7087g>;4>j0?o6s|24;94?3|5;;=68>4=341>4>3348:47jm;<02e?bf348:o7jk;|q14a<72:q6><85196897?a2mk01?6l:ec8yv46?3:1>v3=14864>;5910:;i5rs32`>5<4s48:97?74:?1=`6}::8>1=5:4=3;f>ab<5;2i6ij4}r02f?6=>r79=>4:0:?15f<6?m16>676=lh16>?<5db9>672=lm1v?>n:180846;3;3863=9e8gf>;50h0on6s|20f94?4|5;;968>4=33f>41c3ty9<44?:2y>644=91>01?7k:ef897>f2mn0q~<>f;296~;5980><63=21823a=z{;:36=4<{<025?7?<2795n4kb:?1<<??50;0x97772<:01?<=:05g?xu58>0;6>u220295=2<5;3h6ij4=3::>ab52z?14c<28279>84>7e9~w7612908w0;51k0on63=898gf>{t:;=1<706<5;836<9k;|q140<72:q6>=k5196897?e2mn01?67:ef8yv7a;3:19v3>b5864>;6nj0:49521c49`g=:9k21hl521cc9`a=z{8ki6=4:{<3a0?7?<278:o4ka:?010ae<5:>96im4=222>ad52z?2f7<2827:n54>7e9~w4g>290>w0?m2;3;0>;4>h0om63<558ge>;4<80om63<018gf>{t9k31<78t=0`2>06<58hj6<9k;<3ag?be34;ii7jn;<3`4?bd34;h>7jk;|q2e=<72;;:ea896262mi01?hi:e`8yv7ej3:1>v3>b1864>;6jj0:;i5rs0c4>5<2s4;i<7?74:?02<4ka:?005a783>0}:9hl1=5:4=24:>ae<5:?86im4=263>ae<5;lo6il4}r3ab?6=:r7:mh4:0:?2g5<6?m1v;4=;0om63<3g8ge>;5nj0on6s|1b394?4|58ko68>4=0a0>41c3ty:m94?:4y>5db=91>01>87:ea896352mi01>=i:ea897`e2mh0q~?l5;296~;6ij0><63>c7823a=z{8k86=4:{<3bg?7?<278::4ka:?0149850;0x97052<:01?;?:0:7?xu5<<0;6?u2273915=::=l1=5:4}r06859>64>=lh16>64e=lj1v?:;:18184183?;70<;e;3;0>{t:<=1<7=t=343>4>3348:m7jl;<02g?be3ty98>4?:3y>60`==916>9j51968yv42>3:1>v3=5g82<1=::8i1hl5rs361>5<5s48>i7;?;<07g?7?<2wx>8;50;7x973b282?70<>e;fb?84583ni70<=2;fg?845<3nh7p}=4083>7}::87>54z?11a<60=16>?>5db9>674=lh16>?:5dc9~w7272909w0<:c;73?843i3;386s|24194?5|5;?h6<6;;<016?be348987jn;|q17c<72;q6>8l5519>61?=91>0q~<:2;297~;5=k0:49522379`d=::;21ho5rs31f>5<5s48>m7;?;<078?50;0x973f282?70<=8;fb?xu6m80;6?u21ga915=:9lk1=5:4}r3f4?6=:r7:jo4:0:?2a<<60=1vb78ge>;6j10on63>b`8gg>{t9ml1<706<58o36<6;;|q2b4<72:q6=ko5196894d?2mi01v3>f8864>;6m>0:495rs0d3>5<5s4;m57?74:?2fdad<58i;6ij4=0a1>ae52z?2b2<2827:i84>859~w4cb290?w0?i7;3;0>;6jl0oo63>c18ge>;6k;0on6s|1e`94?4|58l=68>4=0g7>4>33ty:ii4?:2y>5c0=91>01<63>e282<1=z{8oh6=4<{<3e1?7?<27:o>4ka:?2g3:181843n3?;70<{t:::1<706<5;9j6<6;;|q16c<72;q6>9j5519>66?=91>0q~<=e;296~;5<63=3982<1=z{;8o6=4={<07f?373488;7?74:p67e=838p1?:n:4289751282?7p}=2c83>7}::=319=5222795=252z?10=<28279?94>859~w74>2909w0<;7;73?844;3;386s|22f94?7|5;><6<6;;|q2gc<72;q6=ho5519>5a>=91>0q~?le;296~;6m00><63>d682<1=z{8io6=4={<3fcc83>7}:9l<19=521e695=252z?2a0<2827:h>4>859~w4e>2909w0?j4;73?87c:3;386s|1b:94?4|58o868>4=0f2>4>33ty:o:4?:3y>5`4==916=i>51968yv4b:3:19v3>d9864>;5mk0:49521809`d=::1i1ho5244c904=z{8lo6=4={<3g3?3734;2>7?8d:p5cc=838p1fg83>7}:9m?19=52186952b52z?2`1<2827:584>7e9~w7662909w0?k3;73?87>>3;4=0;4>41c3ty9<>4?:3y>5a7==916=46516f8yv47<3:1>v3>d1864>;6100:;i5rs2g1>5<3s488o7;?;<1fg?7?<27:5l4ka:?71d<4?2wx>;=50;0x975e2<:01<7n:05g?xu5>=0;6?u222c915=:90h1=:j4}r051?6=:r79?44:0:?2=f<6?m1v?89:18184403?;70?6d;34`>{t:?=1<706<583n6<9k;|q12=<72;q6>>85519>5<`=9>n0q~<99;296~;5;<0><63>a1823a=z{;43|5;n26994=3f;>11<5;n<6994=3f5>11<5;n>6994=3f7>11<5;n96994=3f2>11<5;n86994=3ga>11<5;oj6994=3g:>11<5;o36994=3g4>11<5;o=6994=3g6>11<5;o?6994=3g0>11<5=?h6im4=34`>41c348j87jm;|q1ea<72;q6>i75519>6f0=9>n0q~p1?j7:0:7?84bi3?;70<6e;fb?84el3nj7p}=ac83>7}::m=19=522b6952b54z?1`2<60=16>h75519>6ol5d`9~w7gf2909w06a3==916>n<516f8yv4dk3:18v3=d482<1=::l=19=5228f9`f=::k=1hl5rs3c;>5<5s48o87;?;<0`5?70l2wx>nl50;6x97b3282?70k3nj70859>6`2==916>4l5d`9>6g7=lh1v?o::18184c93?;70{t:j21<7:t=3f2>4>3348n?7;?;<0:f?bd348jj7jn;|q1e2<72;q6>i=5519>6f6=9>n0q~348io7?8d:p6f1=838p1?m9:00b?84d?3;6974=3``>1?<5;hj6<9k;|q1fa<72:q6>n;513c897dd282j70{t:k21<7=t=3a7>1?<5;hj6974=3`;>41c3ty9no4?:2y>6f2=9;k01?ln:0:b?84ej3;1?<5;h=6<9k;|q1f<<72:q6>n=513c897d?282j70{t:k>1<7=t=3a1>1?<5;h=6974=3`7>41c3ty9n:4?:2y>6f4=9;k01?l9:0:b?84e?3;1?<5;h96<9k;|q1f0<72:q6>n?513c897d3282j70{t:k:1<7=t=3a3>1?<5;h96974=3`3>41c3ty9n>4?:2y>6f6=9;k01?l=:0:b?84e;3;1?<5;kn6<9k;|q1f4<72:q6>oh513c897d7282j70{t:hl1<7=t=3`f>44f348ji7?7a:?1ec<6?m1v?k>:18684bi3;3863>928ge>;61;0on63=8c8ge>;3=h08j6s|2d294?3|5;o26<6;;<3:0?bf34;2?7jm;<0;f?bd34>>m7=j;|q1`c<72h65196894?22mk01<7;:e`897>f2mk019;n:2f8yv4cm3:19v3=e682<1=:90<1hl521879`g=::1k1hn5244c97f=z{;no6=4:{<0f2?7?<27:5:4ka:?2=3im50;7x97c2282?70?68;fb?87>?3ni70<79;f`?822i39j7p}=dc83>0}::l>1=5:4=0;:>ag<58336il4=3:;>ag<5=?j6>74}r0ge?6=4>859>5565db9>00g=;11v?97:180840>3?;70<87;73?84013;627==916>:=516f8yv41n3:1:v3=7082<1=::>?1hn522619`f=::>31hn5227f9`d=::?i1hi5rs357>5<5s48<<7;?;<041?70l2wx>;k50;4x9717282?70<85;fb?840;3ni70<89;fa?841l3ni70<9c;f`?xu5n?0;6?u231090<=::o<1=:j4}r0e3?6=:r782`9>6c1=9>n0q~==0;296~;48;0:;i52305915=z{;l>6=4<{<13f?2>348m:7:6;<0e1?70l2wx?=?50;1x966e288j70;4880:;i5rs20:>5<5s49;n7?8d:?05c<282wx?nj50;7x97`12<801>j8:0:7?85bj3?;70=;2;fg?85793nj7p}=f583>6}:;9k184522g790<=::o>1=:j4}r134?6=;r782`9>6c3=91k01>>?:05g?xu4:10;6?u231c952b<5:;n68>4}r1`g?6==r79j84:2:?0`3<60=16?ho5519>717=lk16?=>5d`9~w7`42908w0=?9;6:?84a<3>270{t:ol1<7=t=22:>44f348m87?7a:?1bc<6?m1v><8:18185713;{t;jh1<7;t=3d7>04<5:n>6<6;;<1f=?37349?=7jk;<0eb?bf3ty9j?4?:2y>75>=<016>k=5489>6c4=9>n0q~l522g195=g<5;ln6<9k;|q063<72;q6?=6516f8967d2<:0q~=la;291~;5n:0>>635<4s49;;7:6;<0e6?2>348m=7?8d:p6cb=839p1>>8:00b?84a:3;3m63=fe823a=z{:8>6=4={<133?70l278=o4:0:p7f?=83?p1?h=:40896b4282?70=j7;73?85383no70u231490<=::o;184522g2952b53z?043<6:h16>k?519c897`d28=o7p}<2583>7}:;9<1=:j4=23b>0655z?1b4<2:278h?4>859>7`0==916?>h5dc9>6ce=lh1v?ki:180857=3>2706<7e9~w6442909w0=?5;34`>;4900><6s|3b594?3|5;l;68<4=2f2>4>3349n97;?;<10b?bc348mn7jn;|q1a`<72:q6?=:5489>6``=<016>hk516f8yv4ai3:1?v3<05826d=::ll1=5o4=3db>41c3ty8>?4?:3y>752=9>n01>?7:428yv5d>3:19v3=eg866>;4l90:49523d6915=:;:o1ho522gc9`d=z{;oo6=4<{<137?2>348ni7:6;<0f`?70l2wx>k650;1x9664288j70;5n00:;i5rs202>5<5s49;?7?8d:?053<282wx?::50;0b84bl3?970=md;64?85ej3><70=mc;64?85em3><70=mf;64?85d:3><70=l0;64?85d93><70=l3;64?85d<3><70=k1;64?85dn3><70=k0;64?85c:3><70=k3;64?85c>3><70=k4;64?85c=3><70=k7;64?85c03><70=nf;64?85fm3><70=m0;64?85fk3><70=nb;64?85fl3><70=n9;64?85f03><70=na;64?85f?3><70=jc;64?85bj3><70=ja;64?85b13><70=j8;64?85b?3><70=j6;64?85b=3><70=j4;64?85b;3><70=85;34`>{t;9i1<74>33499h7jn;|q050<72;q6?4;296~;49l0:495233a9`a=z{:;86=4={<12`?7?<278>n4kc:p744=838p1>?l:0:7?855k3ni7p}<1083>7}:;8h1=5:4=20`>ag52z?05d<60=16??j5dc9~w66a2909w0=>9;3;0>;4:l0om6s|31g94?4|5:;36<6;;<11a?be3ty8740=91>01>;4>j0?;63<6g823a=z{:8i6=4={<11e?373499h7?8d:p6<6=838p1?7::5;897?328=o7p}=9`83>7}::0?1=5o4=3;e>41c3ty9m<4?:3y>6<3=9>n01?o;:ec8yv4?n3:1>v3=9587=>;51:0:;i5rs3;:>5<5s48287?7a:?1=`<6?m1v?6j:18184>;3>270<62;34`>{t:021<74>f3482h7?8d:p6=b=838p1?7=:5;897?628=o7p}=9683>7}::081=5o4=3;`>41c3ty95;4?:3y>6<7=91k01?7m:05g?xu5?m0;6?u229090<=::1;1=:j4}r0;3?6=:r794?4>8`9>6=e=9>n0q~3483<7?8d:p6=0=838p1?6>:0:b?84?j3;41c3ty9484?:3y>6=6=91k01?6n:05g?xu5?h0;6?u226d90<=::>o1=:j4}r0;0?6=:r79;k4>8`9>6=?=9>n0q~<73;296~;5?l0:4l5229:952b54z?0fa<28278m44>859>73>=lm16?5;5d`9~w6d42908w0=md;3;0>;4l80><63<538g`>{t;0n1<7:t=2`a>06<5:k<6<6;;<153?bd3493=7jn;|q0f4<72:q6?ol5196896ea2<:01>;>:ea8yv5>m3:18v3;4i10:49523759`g=:;191hl5rs2`1>5<4s49io7?74:?0`5<282789<4kb:p7d6=83>p1>lj:42896gf282?70=98;fa?85??3nj7p}6}:;ko1=5:4=2f1>06<5:?96il4}r1b5?6=7=?=lh1v>l::18085en3;3863;4=:0oh6s|3`694?2|5:i968>4=2cf>4>3349=m7jm;<1;b?bf3ty8n54?:2y>7f4=91>01>j9:42896332mh0q~=n2;290~;4k90><63ok:0:7?851i3no70=7d;fb?xu4j>0;6>u23b395=2<5:n>68>4=277>ab54z?0g6<28278mk4>859>73d=lm16?4?5d`9~w6d>2908w0=l3;3;0>;4l>0><63<548g`>{t;h<1<7:t=2a7>06<5:h;6<6;;<15f?be3492o7jn;|q0fd<72:q6?n:5196896b?2<:01>;::e`8yv5d=3:18v35<3s49o47?74:?0af<282788?4kb:?1b27n:05g?xu4?m0;6?u23`g915=:;031=:j4}r14b?6=:r78n=4:0:?0=g<6?m1v>9m:18185fk3?;70=67;34`>{t;>k1<706<5:3=6<9k;|q03f<72;q6?lj5519>7<>=9>n0q~=88;296~;4i00><63<95823a=z{:=<6=4={<1bon:42896?228=o7p}<7783>7}:;h=19=52380952b52z?0=g<312785=4>7e9~w6?d2909w0=6b;31e>;41j0:;i5rs2:f>5<4s492m7:6;<1:4?2>3493i7?8d:p7<7=839p1>7n:00b?85>83;3m63<90823a=z{:2h6=4<{<1:=?2>3493i7:6;<1;g?70l2wx?5h50;1x96?>288j70=7e;3;e>;40o0:;i5rs2:b>5<4s49247:6;<1;g?2>3493m7?8d:p7=b=839p1>77:00b?85?k3;3m63<8e823a=z{:236=4<{<1:3?2>3493m7:6;<1;;40k0:;i5rs2:5>5<4s492:7:6;<1;3493:7?8d:p7=?=839p1>79:00b?85?03;3m63<88823a=z{:2?6=4<{<1:1?2>3493:7:6;<1;0?70l2wx?5950;1x96?2288j70=76;3;e>;40>0:;i5rs2:1>5<4s49287:6;<1;0?2>3493>7?8d:p7=3=839p1>7;:00b?85?<3;3m63<84823a=z{:2;6=4<{<1:7?2>3493>7:6;<1;4?70l2wx?5=50;1x96?4288j70=72;3;e>;40:0:;i5rs2:2>5<4s492>7?=a:?0<5<60h16?5?516f8yv5b93:18v35<3s49nm7?74:?2=f282?70?6d;fb?87>k3ni70::a;10?xu4ll0;69u23d:95=2<583n6io4=0;g>ad<5=?j6><4}r1g`?6=859>5<`=lh16=4k5dc9>00g=;81v>jl:18785b>3;3863>a18ge>;61o0on63;5`804>{t;mh1<7:t=2g6>4>334;j=7jn;<3b4?be34>>m7:e`8913f2;o0q~=k9;297~;4m:0:49521`09`g=:<i5rs21:>5<5s49887?7a:?07`<6?m1v>=?:181854<3;{t;:k1<74>f3498j7?8d:p767=838p1>=::05g?854>3>27p}<3c83>7}:;:<1=5o4=263>41c3ty8??4?:3y>760=9>n01>=8:5;8yv54k3:1>v3<36827e9>76>=<01v>=k:18185403;3m63<43823a=z{:?=6=4={<104kc:p71e=838p1>:8:0:b?85293;<6<9k;<173ty88i4?:3y>71>=91k01>;=:05g?xu4<=0;6?u235:952b<5:>26974}r17a?6=:r78844>8`9>705=9>n0q~=;5;296~;4<00:;i5235c90<=z{:>m6=4={<17e?7?i278994>7e9~w6212909w0=;a;34`>;4i6<6n;<161?70l2wx?8950;1x962e28=o70=83;fb?851m3nh7p}<6383>7}:;41c3ty8944?:3y>70b=9>n01>;j:5;8yv51;3:1>v3<5d827e9>70`=<01v>8;:181852n3;3m63<68823a=z{:?i6=4={<16b?70l278:=4;9:p733=838p1>8?:0:b?851i3;3ty8:;4?:3y>737=91k01>8m:05g?xu4=10;6?u2373952b<5:4>7e9~w617290?w0=80;3;0>;4?=0on63<748gf>;4>o0o56s|37f94?4|5:4=24f>41c3ty?9i4?:37x914a2==019:55891472==019?i:558917c2==019?l:558917e2==019?n:558917>2==019?7:55891702==019?9:55891722==019?;:55891522==019=;:55891542==019==:55891562==019=?:558914>2==019?j:55891742==019?=:558970c28=o7p};5383>7}:<;l19=5244c9g==z{=?:6=4={<61a?3734>>m7l7;|q715<72;q68?j5519>00g=j?1v9:i:181825k3?;70::a;`7?xu35rs56g>5<5s4>9m7;?;<66e?d53ty?8o4?:3y>07>==91688o5b09~w12f2909w0:=7;73?822i3h;7p};4883>7}:<;<19=5244c9ec=z{=>36=4={<611?3734>>m7m9;|q702<72;q68?:5519>00g=il1v9:9:181825;3?;70::a;cg?xu3<<0;6?u2430915=:<5<5s4>9=7;?;<66e?ge3ty?8>4?:3y>076==91688o5a89~w1252909w0:>f;73?822i3k37p};4183>7}:<8n19=5244c9e2=z{=9m6=4={<62g?3734>>m7o9;|q77`<72;q6800g=k<1v9=k:181826i3?;70::a;c6?xu3;j0;6?u240;915=:<5<5s4>:47;?;<66e?g43ty??l4?:3y>041==91688o5a39~w15>2909w0:>6;73?822i3k:7p};3983>7}:<8?19=5244c9e5=z{=9<6=4={<620?3734>>m7li;|q71<<72;q68>;5519>00g=jl1v9;7:181824<3?;70::a;a7?xu3=>0;6?u2421915=:<5<5s4>8>7;?;<66e?dd3ty?984?:3y>067==91688o5bc9~w1332909w0:<0;73?822i3hj7p};5283>7}:<;319=5244c9f<=z{=>h6=4={<62a?3734>>m7l:;|q704<72;q68<=5519>00g=ih1v9=9:181826:3?;70::a;;e?xu3=k0;6?u244a952b<5=?j6no4}r1f`?6==r78;>4kb:?02`7e9>00g=<><019;n:b;8yv71:3:1>v3=248gf>;5:=0:>o5rs04g>5<5s4;h?7jm;<3`6?75j2wx>?850;0x974?2mi01?<;:05g?xu6k=0;6?u21b49`f=:9j81=:j4}r11g?6=:r78>h4kd:?06f<6:k1v<=7:181855m3;{z{<<:6=4={_755>;3<3?==6*;73822c=z{<<36=4={_75<>;3<3?=46*;738235=z{;3<3?>?6*;738234=z{=h96=4={_6b4>;3<3>j<6*;738201=z{=h;6=4={_6:b>;3<3>2j6*;73820c=z{=km6=4={_6:a>;3<3>2i6*;73821<=z{=kn6=4={_6:`>;3<3>2h6*;73821g=z{=ko6=4={_6:g>;3<3>2o6*;73821f=z{=kh6=4={_6:f>;3<3>2n6*;73821a=z{=ki6=4={_6:e>;3<3>2m6*;73821c=z{=kj6=4={_6:=>;3<3>256*;738225=z{=hi6=4={_6b<>;3<3>j46*;738224=z{=hj6=4={_6b3>;3<3>j;6*;738226=z{=h26=4={_6b2>;3<3>j:6*;738221=z{=h36=4={_6b1>;3<3>j96*;738220=z{=h<6=4={_6b0>;3<3>j86*;738223=z{=h=6=4={_6b7>;3<3>j?6*;738222=z{=h>6=4={_6b6>;3<3>j>6*;73822==z{=h?6=4={_6b5>;3<3>j=6*;73822<=z{=h86=4={_6:<>;3<3>246*;73822d=z{=k26=4={_6:3>;3<3>2;6*;73822g=z{<=?6=4={_740>;3<3?<86*;73822f=z{;3<3?>j6*;73822`=z{=lo6=4={_6g=>;3<3>o56*;738237=z{=li6=4={_6g<>;3<3>o46*;738236=z{=lj6=4={_6g3>;3<3>o;6*;738231=z{=l26=4={_6g2>;3<3>o:6*;738230=z{=l36=4={_6g1>;3<3>o96*;738233=z{=l<6=4={_6g0>;3<3>o86*;738232=z{=l>6=4={_6g6>;3<3>o>6*;73823==z{=l?6=4={_6g5>;3<3>o=6*;73823<=z{=l86=4={_6g4>;3<3>o<6*;73823d=z{=l96=4={_6`b>;3<3>hj6*;73827d=z{=l:6=4={_6`a>;3<3>hi6*;73827g=z{=l;6=4={_6``>;3<3>hh6*;73827f=z{=om6=4={_6`g>;3<3>ho6*;73827a=z{=on6=4={_6`f>;3<3>hn6*;73827`=z{=oo6=4={_6`e>;3<3>hm6*;73827c=z{=oh6=4={_6`=>;3<3>h56*;738205=z{=oj6=4={_6`3>;3<3>h;6*;738204=z{=o26=4={_6`2>;3<3>h:6*;738207=z{=o36=4={_6`1>;3<3>h96*;738206=z{=o<6=4={_6`0>;3<3>h86*;738200=z{=o=6=4={_6`7>;3<3>h?6*;738203=z{=o>6=4={_6`6>;3<3>h>6*;738202=z{=o?6=4={_6`5>;3<3>h=6*;73820==z{=o86=4={_6`4>;3<3>h<6*;73820<=z{=o96=4={_6ab>;3<3>ij6*;73820d=z{=o:6=4={_6aa>;3<3>ii6*;73820g=z{<:?6=4={_6gb>;3<3>oj6*;73820f=z{<:86=4={_6ga>;3<3>oi6*;73820a=z{<:96=4={_6g`>;3<3>oh6*;73820`=z{<::6=4={_6gg>;3<3>oo6*;738215=z{<:;6=4={_6gf>;3<3>on6*;738214=z{=lm6=4={_6ge>;3<3>om6*;738217=z{=ln6=4={_6g7>;3<3>o?6*;738216=z{=l=6=4={_6`<>;3<3>h46*;738211=z{=oi6=4={_6a`>;3<3>ih6*;738210=z{=o;6=4={_6ag>;3<3>io6*;738213=z{<:h6=4={_73g>;3<3?;o6*;738212=z{=2<6=4={_6;3>;3<3>3;6*;73821==z{<:=6=4={_732>;3<3?;:6*;73821d=z{<9:6=4={_705>;3<3?8=6*;73821`=zugko57>52zJ736=zfhnj6=4={I647>{iimh1<7vF;729~jdbb2909wE:83:mea`=838pD99<;|lba5<72;qC8:=4}ocf5?6=:rB?;>5rn`g1>5<5sA>7}O<>90qcoj5;296~N3?:1vblk9:181M20;2wemh950;0xL1143tdji54?:3yK02552zJ736=zfhoj6=4={I647>{iilh1<7vF;729~jdcb2909wE:83:me``=838pD99<;|lbb5<72;qC8:=4}oce5?6=:rB?;>5rn`d1>5<5sA>7}O<>90qcoi5;296~N3?:1vblh9:181M20;2wemk950;0xL1143tdjj54?:3yK02552zJ736=zfhlj6=4={I647>{iioh1<7vF;729~jd`b2909wE:83:mec`=838pD99<;|la45<72;qC8:=4}o`35?6=:rB?;>5rnc21>5<5sA>7}O<>90qcl?5;296~N3?:1vbo>9:181M20;2wen=950;0xL1143tdi<54?:3yK02552zJ736=zfk:j6=4={I647>{ij9h1<7vF;729~jg6b2909wE:83:mf5`=838pD99<;|la55<72;qC8:=4}o`25?6=:rB?;>5rnc31>5<5sA>7}O<>90qcl>5;296~N3?:1vbo?9:181M20;2wen<950;0xL1143td2=l4?:0yK02557>51zJ736=zf0?j6=4>{I647>{i1=j0;65rn841>5<6sA>4}O<>90qc795;295~N3?:1vb489:182M20;2we5;950;3xL1143td2:54?:0yK02551zJ736=zf0{I647>{i1?h1<7?tH550?xh>>j0;65rn851>5<6sA>4}O<>90qc785;295~N3?:1vb499:182M20;2we5:950;3xL1143td2;54?:0yK02551zJ736=zf0=j6=4>{I647>{i1>h1<7?tH550?xh>?j0;65rn8:1>5<6sA>4}O<>90qc775;295~N3?:1vb469:182M20;2we55950;3xL1143td2454?:0yK02551zJ736=zf02j6=4>{I647>{i11h1<7?tH550?xh>0j0;6b290:wE:83:m==`=83;pD99<;|l:=5<728qC8:=4}o;:5?6=9rB?;>5rn8;1>5<6sA>4}O<>90qc765;295~N3?:1vb479:182M20;2we54950;3xL1143td2554?:0yK02551zJ736=zf03j6=4>{I647>{i10h1<7?tH550?xh>1j0;6l3:1=vF;729~j5rn8c1>5<6sA>4}O<>90qc7n5;295~N3?:1vb4o9:182M20;2we5l950;3xL1143td2m54?:0yK02551zJ736=zf0kj6=4>{I647>{i1hh1<7?tH550?xh>ij0;65rn8`1>5<6sA>4}O<>90qc7m5;295~N3?:1vb4l9:182M20;2we5o950;3xL1143td2n54?:0yK02551zJ736=zf0hj6=4>{I647>{i1kh1<7?tH550?xh>jj0;65rn8a1>5<6sA>4}O<>90qc7l5;295~N3?:1vb4m9:182M20;2we5n950;3xL1143td2o54?:0yK02551zJ736=zf0ij6=4>{I647>{i1jh1<7?tH550?xh>kj0;65rn8f1>5<6sA>4}O<>90qc7k5;295~N3?:1vb4j9:182M20;2we5i950;3xL1143td2h54?:0yK02551zJ736=zf0nj6=4>{I647>{i1mh1<7?tH550?xh>lj0;65rn8g1>5<6sA>4}O<>90qc7j5;295~N3?:1vb4k9:182M20;2we5h950;3xL1143td2i54?:0yK02551zJ736=zf0oj6=4>{I647>{i1lh1<7?tH550?xh>mj0;65rn8d1>5<6sA>4}O<>90qc7i5;295~N3?:1vb4h9:182M20;2we5k950;3xL1143td2j54?:0yK02551zJ736=zf0lj6=4>{I647>{i1oh1<7?tH550?xh>nj0;65rn`21>5<6sA>4}O<>90qco?5;295~N3?:1vbl>9:182M20;2wem=950;3xL1143tdj<54?:0yK02551zJ736=zfh:j6=4>{I647>{ii9h1<7?tH550?xhf8j0;65rn`31>5<6sA>4}O<>90qco>5;295~N3?:1vbl?9:182M20;2wem<950;3xL1143tdj=54?:0yK02551zJ736=zfh;j6=4>{I647>{ii8h1<7?tH550?xhf9j0;65rn`01>5<6sA>4}O<>90qco=5;295~N3?:1vbl<9:182M20;2wem?950;3xL1143tdj>54?:0yK02551zJ736=zfh8j6=4>{I647>{ii;h1<7?tH550?xhf:j0;65rn`11>5<6sA>4}O<>90qco<5;295~N3?:1vbl=9:182M20;2wem>950;3xL1143tdj?54?:0yK02551zJ736=zfh9j6=4>{I647>{ii:h1<7?tH550?xhf;j0;65rn`61>5<6sA>4}O<>90qco;5;295~N3?:1vbl:9:182M20;2wem9950;3xL1143tdj854?:0yK02551zJ736=zfh>j6=4>{I647>{ii=h1<7?tH550?xhf5rn`71>5<6sA>4}O<>90qco:5;295~N3?:1vbl;9:182M20;2wem8950;3xL1143tdj954?:0yK02557>51zJ736=zfh?j6=4>{I647>{ii5rn`41>5<6sA>4}O<>90qco95;295~N3?:1vbl89:182M20;2wem;950;3xL1143tdj:54?:0yK02551zJ736=zfh{I647>{ii?h1<7?tH550?xhf>j0;65rn`51>5<6sA>4}O<>90qco85;295~N3?:1vbl99:182M20;2wem:950;3xL1143tdj;54?:0yK02551zJ736=zfh=j6=4>{I647>{ii>h1<7?tH550?xhf?j0;65rn`:1>5<6sA>4}O<>90qco75;295~N3?:1vbl69:182M20;2wem5950;3xL1143tdj454?:0yK02551zJ736=zfh2j6=4>{I647>{ii1h1<7?tH550?xhf0j0;6b290:wE:83:me=`=83;pD99<;|lb=5<728qC8:=4}oc:5?6=9rB?;>5rn`;1>5<6sA>4}O<>90qco65;295~N3?:1vbl79:182M20;2wem4950;3xL1143tdj554?:0yK02551zJ736=zfh3j6=4>{I647>{ii0h1<7?tH550?xhf1j0;6l3:1=vF;729~jd?b290:wE:83:me<`=83;pD99<;|lbe5<728qC8:=4}ocb5?6=9rB?;>5rn`c1>5<6sA>4}O<>90qcon5;295~N3?:1vblo9:182M20;2weml950;3xL1143tdjm54?:0yK02551zJ736=zfhkj6=4>{I647>{iihh1<7?tH550?xhfij0;65rn``1>5<6sA>4}O<>90qcom5;295~N3?:1vbll9:182M20;2wemo950;3xL1143tdjn54?:0yK02551zJ736=zfhhj6=4>{I647>{iikh1<7?tH550?xhfjj0;65rn`a1>5<6sA>4}O<>90qcol5;295~N3?:1vblm9:182M20;2wemn950;3xL1143tdjo54?:0yK02551zJ736=zfhij6=4>{I647>{iijh1<7?tH550?xhfkj0;65rn`f1>5<6sA>4}O<>90qcok5;295~N3?:1vblj9:182M20;2wemi950;3xL1143tdjh54?:0yK025 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - + + diff --git a/usrp2/coregen/fifo_xlnx_512x36_2clk_18to36_fifo_generator_v4_3_xst_1.lso b/usrp2/coregen/fifo_xlnx_512x36_2clk_18to36_fifo_generator_v4_3_xst_1.lso deleted file mode 100644 index f1a6f7899..000000000 --- a/usrp2/coregen/fifo_xlnx_512x36_2clk_18to36_fifo_generator_v4_3_xst_1.lso +++ /dev/null @@ -1,3 +0,0 @@ -blkmemdp_v6_2 -blk_mem_gen_v2_6 -fifo_generator_v4_3 diff --git a/usrp2/coregen/fifo_xlnx_512x36_2clk_18to36_fifo_generator_v4_3_xst_1.ngc_xst.xrpt b/usrp2/coregen/fifo_xlnx_512x36_2clk_18to36_fifo_generator_v4_3_xst_1.ngc_xst.xrpt deleted file mode 100644 index f718bb394..000000000 --- a/usrp2/coregen/fifo_xlnx_512x36_2clk_18to36_fifo_generator_v4_3_xst_1.ngc_xst.xrpt +++ /dev/null @@ -1,102 +0,0 @@ - - - - - - -

- - - - - - - - - - - - - - - -
-
- - - - - - - - - - - -
-
- - - -
-
-
-
-
-
-
-
- - - - -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - -
-
-
- - - - - - - -
-
-
-
-
- - - -
- - - diff --git a/usrp2/coregen/fifo_xlnx_512x36_2clk_36to18.ngc b/usrp2/coregen/fifo_xlnx_512x36_2clk_36to18.ngc index 0ce18d60a..f8afe5bb5 100644 --- a/usrp2/coregen/fifo_xlnx_512x36_2clk_36to18.ngc +++ b/usrp2/coregen/fifo_xlnx_512x36_2clk_36to18.ngc @@ -1,3 +1,3 @@ XILINX-XDB 0.1 STUB 0.1 ASCII -XILINX-XDM V1.4e -$5cg4g<,[o}e~g`n;"2*413&;$>"9 > %0:?*rjx&Uhk"hffn]{hk~X=88s?;Q=cmi\73rh91$ekb?40493456712:;<=>?01274>6789:;<=>?0123456789:;<=>?0123456789:;<=>?0123456789:;<=>?0123454<80;0=>5>.130?46=AGZ^X7OKDSC?=?699o1:<7GAPTV9twi`Wlg{xtQ{hsgpl9?=878=7<>5IORVP?vugnUna}zv_ujqavnXizyn~y26:1<12>772@D[YY4rne\ahvsqV~c~h}g_ogdeqc;13:5=n5>0;MVPUSS2{nThlzn_bmvjq:>294:>6?9:HLSQQ112922?IR\Y__6IAN<0794;733821CXZ_UU8gkpr;9>0;2<5=2:020>44;:;:7?4FNQWW>AOWI5;1<3?=;38LQQVR\3ND\L2>:1<26>552@D[YY4KIC>05?699:18>7AZTQWW>AIE4:;1<3?=;249MKVR\3nbb1=::1AIWJ591<3:45E765>053?3?7;76659;077331O3M<564:;34<4<1?>05;86139:>LHW]]0JHI\M<983:4b<13CE\XZ5psmd[cskdV~c~h}g<983:72<13CE\XZ5psmd[cskdV~c~h}g_`qpawr;03:5>956:HLSQQ?=G\^[YY4kauc\gjsi|521<3?m;88LQQVR\3}ySio{a^alqkr;03:546OKDSC?4;>GCL[K78364AEFQE93902KOH_O36?:8EABUI5=546OKDSC?<;gGCL[H78364AEFQF93902KOH_L36?:8EABUJ5=5m6OKDS@?E53JO:>6MGEBI\HLEBFZOTXT^J2:AJ0>EKCH>0OAEM3:AOV<=DGDGBXYKK159@KWCXOLDN^LZFOO]JJCI03JXNMYKK1:F1?AO13MCJ0=08;EKB8469?2NBM1?>>69GMD:6:7=0HDO312<4?AOF48>556JFA=36>5803MCJ0<;16:FJE979>2NBM1<16:FJE959>2NBM1:16:FJE939>2NBM1816:FJE919>2NBM1616:FJE9?9>2NBN1>17:FJF9776>1OEO2>1?58@LD;9;4<7IGM<01=3>BNJ5;?2:5KIC>21;169GMG:617<0HDL31?58@LD;:94<7IGM<33=3>BNJ5892:5KIC>17;1908;EKA8739?2NBN1<9>69GMG:5?7=0HDL329<4?AOE4;35:6JFB=0=3>BNJ59;245KIC>05?69?2NBN1=>>79GMG:46?1OEO2;>79GMG:26?1OEO29>79GMG:06?1OEO27>79GMG:>6>1OE]O30?;8@LVF480;2:5KIQC?5;189GMUD;;3:5;6JFPC>0:3=CGH6;2:5KO@>24;169GKD:6<730HBO31483:2=CGH6:9384DNC?5;0384DNC?7;01OCO2>3?58@JD;9=4<7IAM<07=3>BHJ5;=2:5KOC>23;12NDN1?17:FLF9476>1OCO2=1?58@JD;:;4<7IAM<31=3>BHJ58?2:5KOC>11;1;08;EMA8719?2NDN1<7>69GKG:517<0HBL32?58@JD;;9427IAM<2394;119:FLTD:6294<7IA_A=3=3>BHXK6;2:5KOQ@?5;1@fdzo:7J=4GOF1?L653@;97D<=;H1;?LHN\YU;<55FNHVS[57?3@DBX]Q?299JJLRWW9937D@FTQ]30==NF@^[S=;7;HLJPUY7>11BBDZ__15:?LHN\Z^JXH94IOKW[5603@DBXR>>7:KMMQY7:>1BBDZP0258MKOSW9><7D@FT^263>OIA]U;::5FNHV\421?2CEEYQ?A69JJLRX8K=0ECG[_1A4?LHN\V:O;6GAIU]3A2=NF@^T7:KMMQY6:>1BBDZP1258MKOSW8><7D@FT^363>OIA]U:::5FNHV\521?2CEEYQ>A69JJLRX9K=0ECG[_0A4?LHN\V;O;6GAIU]2A2=NF@^T=K94IOKW[7603@DBXR<>7:KMMQY5:>1BBDZP2258MKOSW;><7D@FT^063>OIA]U9::5FNHV\621?2CEEYQ=A69JJLRX:K=0ECG[_3A4?LHN\V8O;6GAIU]1A2=NF@^T>K94IOKW[6603@DBXR=>7:KMMQY4:>1BBDZP3258MKOSW:><7D@FT^163>OIA]U8::5FNHV\72168;HLJPZ5>?2CEEYQ2F^X?QC4:NVP60JR\=UG96C\GNL6?HS_KPi0Ald`rWgqwliik2Gbbb|Yesqjkk4;;O3341=I998?7C??459M55343G;:86@>1968J47>;2D:>95A1327?K759=1E=?<;;O3171=I9;>?7C?=559M57033G;9;95A13:7?K751:1E=>:4N0130>H6;8>0B<==4:L27623468J451<2D:?:=4N060?K72;2D::>5A1618J4>43G;2?6@=029M645H50:1E>4=4N220?K56;2D8>>5A3218J6243G9>?6@<629M725;N08KN7UNEVID@AG\INL\GMCDC?1XCX\LE69PVSGKWH=0__XNL^@7?VUUI=1X__L;;U[SA64<]9%l~k }f.e`|+ekcq%Ftb|Pre]sjqtXojUsc>?01]Qavsk|8997X> gsd-vc)`kq$h`fv Mymq[wbXxg~ySjmPxnp3457XZly~`y?<2:W3+bta&{l$knv!cmi{+H~hzVxoS}`{r^e`[}iu89:9S_k|umv277=R8&myj#|i/fa{*fjlp&GscQ}d^rmpwY`kVrd~=>?3^Pfwpjs9:80Y=!hrg,qb*adp'iggu!Bxnp\vaYwf}xTknQwos2341YUmzgx<==;T2,cw`)zo%lou lljz,I}iuW{nT|cz}_fa\|jt789?T^h}zlu306>S7'nxm"h gbz-gim'Drd~R|k_qlwvZadWqey<=>9_Sgpqir6;;1^<"i}f/pe+be&jf`t"Cwos]q`Zvi|{UloRv`r1233ZTb{|f=><4U1-dvc(un&mht#mcky-N|jtXzmU{by|Pgb]{kw6781UYi~{ct011?P6(o{l%~k!hcy,`hn~(EqeySz|Ppovq[beXpfx;<=>PRdqvhq74:2_;#j|i.sd,cf~)keas#@v`r^uq[uhszVmhSua}0122[Wct}e~:??5Z0.eqb+ta'nis"nbdx.O{kwYpzVzexQhc^zlv567:VXnxb{1208Q5)`zo$yj"ilx/aoo})JpfxT{Qnup\cfYg{:;<>Q]erwop4553\:$kh!rg-dg}(ddbr$Aua}_vp\tkruWniTtb|?016\V`urd};8>6[?/fpe*w`(ojr%oaew/LzlvZquWyd~Ril_ymq4562W[oxyaz>339V4*aun'xm#jmw.bnh|*Kg{U|~R~ats]dgZ~hz9:;:R\jstnw564<]9%l~k }f.e`|+ekcq%Ftb|Pws]sjqtXojUsc>?06]Qavsk|88:7X> gsd-vc)`kq$h`fv re]sjqtXj`d7=3<>;T2,cw`)zo%lou lljz,vaYwf}xTnd`32?02?P6(o{l%~k!hcy,`hn~(zmU{by|Pbhl?7;463\:$kh!rg-dg}(ddbr$~iQnup\flh;<78:7X> gsd-vc)`kq$h`fv re]sjqtXj`d793<>;T2,cw`)zo%lou lljz,vaYwf}xTnd`36?02?P6(o{l%~k!hcy,`hn~(zmU{by|Pbhl?3;463\:$kh!rg-dg}(ddbr$~iQnup\flh;078:7X> gsd-vc)`kq$h`fv re]sjqtXj`d753 gsd-vc)`kq$h`fv re]sjqtXj`dT9?>4U1-dvc(un&mht#mcky-q`Zvi|{UiecQ9219V4*aun'xm#jmw.bnh|*tcWyd~Rlfn^514>S7'nxm"h gbz-gim'{nT|cz}_ckm[=473\:$kh!rg-dg}(ddbr$~iQnup\flhX1;<0Y=!hrg,qb*adp'iggu!}d^rmpwYeagUsc>?0104?P6(o{l%~k!hcy,`hn~(zmU{by|Pbhl\|jt789::>;5Z0.eqb+ta'nis"nbdx.pg[uhszVhbbRv`r123571<]9%l~k }f.e`|+ekcq%yhR~ats]amkYg{:;<1^<"i}f/pe+be&jf`t"|k_qlwvZdnfVrd~=>?2005?P6(o{l%~k!hcy,`hn~(zmU{by|Pbhl\|jt78999;6[?/fpe*w`(ojr%oaew/sf\tkruWkceSua}0120670<]9%l~k }f.e`|+ekcq%yhR~ats]amkYg{:;<9<8;T2,cw`)zo%lou lljz,vaYwf}xTnd`Pxnp34526:?1^<"i}f/pe+be&jf`t"|k_qlwvZdnfVrd~=>?5358Q5)`zo$yj"ilx/aoo})ulVzexQmio]{kw678<;9:6[?/fpe*w`(ojr%oaew/sf\tkruWkceSua}01256f=R8&myj#|i/fa{*fjlp&xoS}`{r^`jjZ~hz9:;:S7'nxm"h gbz-gim'{nT|cz}_ckm[}iu89:==;5Z0.eqb+ta'nis"nbdx.pg[uhszVhbbRv`r123371<]9%l~k }f.e`|+ekcq%yhR~ats]amkYg{:;<:?=0:W3+bta&{l$knv!cmi{+wbXxg~ySjm30?03?P6(o{l%~k!hcy,`hn~(zmU{by|Pgb>2:76<]9%l~k }f.e`|+ekcq%yhR~ats]dg949:91^<"i}f/pe+be&jf`t"|k_qlwvZad4:49<6[?/fpe*w`(ojr%oaew/sf\tkruWni783328Q5)`zo$yj"ilx/aoo})ulVzexQhc=4=65=R8&myj#|i/fa{*fjlp&xoS}`{r^e`828582_;#j|i.sd,cf~)keas#jPpovq[be;078;7X> gsd-vc)`kq$h`fv re]sjqtXoj622>f:W3+bta&{l$knv!cmi{+wbXxg~ySjmP10d8Q5)`zo$yj"ilx/aoo})ulVzexQhc^02b>S7'nxm"h gbz-gim'{nT|cz}_fa\74`<]9%l~k }f.e`|+ekcq%yhR~ats]dgZ26n2_;#j|i.sd,cf~)keas#jPpovq[beX=8l0Y=!hrg,qb*adp'iggu!}d^rmpwY`kV<:j6[?/fpe*w`(ojr%oaew/sf\tkruWniT;f:W3+bta&{l$knv!cmi{+wbXxg~ySjmP9348Q5)`zo$yj"ilx/aoo})ulVzexQhc^cpv`a;878=7X> gsd-vc)`kq$h`fv re]sjqtXojUjkh<0<12>S7'nxm"h gbz-gim'{nT|cz}_fa\evtbo585>;5Z0.eqb+ta'nis"nbdx.pg[uhszVmhSl}}ef>0:70<]9%l~k }f.e`|+ekcq%yhR~ats]dgZgtzlm783<9;T2,cw`)zo%lou lljz,vaYwf}xTknQnssgd8085>2_;#j|i.sd,cf~)keas#jPpovq[beXizxnk181279V4*aun'xm#jmw.bnh|*tcWyd~Ril_`qqab:06;<0Y=!hrg,qb*adp'iggu!}d^rmpwY`kVkx~hi38?05?P6(o{l%~k!hcy,`hn~(zmU{by|Pgb]bwwc`404996[?/fpe*w`(ojr%oaew/sf\tkruWniTm~|jg^211>S7'nxm"h gbz-gim'{nT|cz}_fa\evtboV;996[?/fpe*w`(ojr%oaew/sf\tkruWniTm~|jg^011>S7'nxm"h gbz-gim'{nT|cz}_fa\evtboV9996[?/fpe*w`(ojr%oaew/sf\tkruWniTm~|jg^611>S7'nxm"h gbz-gim'{nT|cz}_fa\evtboV?996[?/fpe*w`(ojr%oaew/sf\tkruWniTm~|jg^411>S7'nxm"h gbz-gim'{nT|cz}_fa\evtboV=996[?/fpe*w`(ojr%oaew/sf\tkruWniTm~|jg^:11>S7'nxm"h gbz-gim'{nT|cz}_fa\evtboV3956[?/fpe*w`(ojr%oaew/sf\tkruWniTm~|jg^f2848512_;#j|i.sd,cf~)keas#jPpovq[beXizxnkRj><3<1=>S7'nxm"h gbz-gim'{nT|cz}_fa\evtboVn:0>0=9:W3+bta&{l$knv!cmi{+wbXxg~ySjmParpfcZb64=4956[?/fpe*w`(ojr%oaew/sf\tkruWniTm~|jg^f2808512_;#j|i.sd,cf~)keas#jPpovq[beXizxnkRj><7<1=>S7'nxm"h gbz-gim'{nT|cz}_fa\evtboVn:0:0=9:W3+bta&{l$knv!cmi{+wbXxg~ySjmParpfcZb6414956[?/fpe*w`(ojr%oaew/sf\tkruWniTm~|jg^f28<8502_;#j|i.sd,cf~)keas#jPpovq[beXizxnkRj>_00;?P6(o{l%~k!hcy,`hn~(zmU{by|Pgb]bwwc`Wm;T>?64U1-dvc(un&mht#mcky-q`Zvi|{UloRo|rde\`4Y4:11^<"i}f/pe+be&jf`t"|k_qlwvZadWhyyijQk1^61<>S7'nxm"h gbz-gim'{nT|cz}_fa\evtboVn:S8<7;T2,cw`)zo%lou lljz,vaYwf}xTknQnssgd[a7X>;20Y=!hrg,qb*adp'iggu!}d^rmpwY`kVkx~hiPd0]46==R8&myj#|i/fa{*fjlp&xoS}`{r^e`[duumnUo=R6=8:W3+bta&{l$knv!cmi{+wbXxg~ySjmParpfcZb6W08>7X> gsd-vc)`kq$h`fv re]sjqtXojUsc>?0106?P6(o{l%~k!hcy,`hn~(zmU{by|Pgb]{kw67888>7X> gsd-vc)`kq$h`fv re]sjqtXojUsc>?0306?P6(o{l%~k!hcy,`hn~(zmU{by|Pgb]{kw678:8>7X> gsd-vc)`kq$h`fv re]sjqtXojUsc>?0506?P6(o{l%~k!hcy,`hn~(zmU{by|Pgb]{kw678<8>7X> gsd-vc)`kq$h`fv re]sjqtXojUsc>?0706?P6(o{l%~k!hcy,`hn~(zmU{by|Pgb]{kw678>8>7X> gsd-vc)`kq$h`fv re]sjqtXojUsc>?0902?P6(o{l%~k!hcy,`hn~({U{by|Pbhl?4;463\:$kh!rg-dg}(ddbr${Qnup\flh;978:7X> gsd-vc)`kq$h`fv ws]sjqtXj`d7>3<>;T2,cw`)zo%lou lljz,swYwf}xTnd`33?02?P6(o{l%~k!hcy,`hn~({U{by|Pbhl?0;463\:$kh!rg-dg}(ddbr${Qnup\flh;=78:7X> gsd-vc)`kq$h`fv ws]sjqtXj`d7:3<>;T2,cw`)zo%lou lljz,swYwf}xTnd`37?02?P6(o{l%~k!hcy,`hn~({U{by|Pbhl?<;473\:$kh!rg-dg}(ddbr${Qnup\flhX8;:0Y=!hrg,qb*adp'iggu!xr^rmpwYeagU:>=5Z0.eqb+ta'nis"nbdx.uq[uhszVhbbR<=0:W3+bta&{l$knv!cmi{+rtXxg~ySoga_203?P6(o{l%~k!hcy,`hn~({U{by|Pbhl\076<]9%l~k }f.e`|+ekcq%|~R~ats]amkY2:91^<"i}f/pe+be&jf`t"y}_qlwvZdnfV<9<6[?/fpe*w`(ojr%oaew/vp\tkruWkceS: gsd-vc)`kq$h`fv ws]sjqtXj`dTtb|?012263=R8&myj#|i/fa{*fjlp&}yS}`{r^`jjZ~hz9:;=?94U1-dvc(un&mht#mcky-tvZvi|{UiecQwos234475>2_;#j|i.sd,cf~)keas#z|Ppovq[goiWqey<=>=269V4*aun'xm#jmw.bnh|*quWyd~Rlfn^zlv567:88=7X> gsd-vc)`kq$h`fv ws]sjqtXj`dTtb|?01113>S7'nxm"h gbz-gim'~xT|cz}_ckm[}iu89:8>?84U1-dvc(un&mht#mcky-tvZvi|{UiecQwos2341403\:$kh!rg-dg}(ddbr${Qnup\flhXpfx;<=:>279V4*aun'xm#jmw.bnh|*quWyd~Rlfn^zlv567=;=0Y=!hrg,qb*adp'iggu!xr^rmpwYeagUsc>?04312>S7'nxm"h gbz-gim'~xT|cz}_ckm[}iu89:=>n5Z0.eqb+ta'nis"nbdx.uq[uhszVhbbRv`r123247X[^:9o6[?/fpe*w`(ojr%oaew/vp\tkruWkceSua}012554YT_88<7X> gsd-vc)`kq$h`fv ws]sjqtXj`dTtb|?014163=R8&myj#|i/fa{*fjlp&}yS}`{r^`jjZ~hz9:;;?94U1-dvc(un&mht#mcky-tvZvi|{UiecQwos23427582_;#j|i.sd,cf~)keas#z|Ppovq[be;878;7X> gsd-vc)`kq$h`fv ws]sjqtXoj6:2?>4U1-dvc(un&mht#mcky-tvZvi|{Ulo1<1219V4*aun'xm#jmw.bnh|*quWyd~Ril<2<14>S7'nxm"h gbz-gim'~xT|cz}_fa?0;473\:$kh!rg-dg}(ddbr${Qnup\cf:26;:0Y=!hrg,qb*adp'iggu!xr^rmpwY`k5<5>=5Z0.eqb+ta'nis"nbdx.uq[uhszVmh0:0=0:W3+bta&{l$knv!cmi{+rtXxg~ySjm38?3e?P6(o{l%~k!hcy,`hn~({U{by|Pgb]35c=R8&myj#|i/fa{*fjlp&}yS}`{r^e`[47a3\:$kh!rg-dg}(ddbr${Qnup\cfY59o1^<"i}f/pe+be&jf`t"y}_qlwvZadW:;m7X> gsd-vc)`kq$h`fv ws]sjqtXojU?=k5Z0.eqb+ta'nis"nbdx.uq[uhszVmhS8?i;T2,cw`)zo%lou lljz,swYwf}xTknQ91g9V4*aun'xm#jmw.bnh|*quWyd~Ril_63e?P6(o{l%~k!hcy,`hn~({U{by|Pgb];63=R8&myj#|i/fa{*fjlp&}yS}`{r^e`[duumn6;2?84U1-dvc(un&mht#mcky-tvZvi|{UloRo|rde?5;413\:$kh!rg-dg}(ddbr${Qnup\cfYf{{ol0?0=6:W3+bta&{l$knv!cmi{+rtXxg~ySjmParpfc959:?1^<"i}f/pe+be&jf`t"y}_qlwvZadWhyyij2;>348Q5)`zo$yj"ilx/aoo})pzVzexQhc^cpv`a;=78=7X> gsd-vc)`kq$h`fv ws]sjqtXojUjkh<7<12>S7'nxm"h gbz-gim'~xT|cz}_fa\evtbo5=5>;5Z0.eqb+ta'nis"nbdx.uq[uhszVmhSl}}ef>;:73<]9%l~k }f.e`|+ekcq%|~R~ats]dgZgtzlmT?;4U1-dvc(un&mht#mcky-tvZvi|{UloRo|rde\773<]9%l~k }f.e`|+ekcq%|~R~ats]dgZgtzlmT8?;4U1-dvc(un&mht#mcky-tvZvi|{UloRo|rde\173<]9%l~k }f.e`|+ekcq%|~R~ats]dgZgtzlmT:?;4U1-dvc(un&mht#mcky-tvZvi|{UloRo|rde\373<]9%l~k }f.e`|+ekcq%|~R~ats]dgZgtzlmT4?74U1-dvc(un&mht#mcky-tvZvi|{UloRo|rde\`4:76;30Y=!hrg,qb*adp'iggu!xr^rmpwY`kVkx~hiPd0>2:7?<]9%l~k }f.e`|+ekcq%|~R~ats]dgZgtzlmTh<2=>3;8Q5)`zo$yj"ilx/aoo})pzVzexQhc^cpv`aXl8682?74U1-dvc(un&mht#mcky-tvZvi|{UloRo|rde\`4:36;30Y=!hrg,qb*adp'iggu!xr^rmpwY`kVkx~hiPd0>6:7?<]9%l~k }f.e`|+ekcq%|~R~ats]dgZgtzlmTh<29>3;8Q5)`zo$yj"ilx/aoo})pzVzexQhc^cpv`aXl86<2?74U1-dvc(un&mht#mcky-tvZvi|{UloRo|rde\`4:?6;20Y=!hrg,qb*adp'iggu!xr^rmpwY`kVkx~hiPd0]36==R8&myj#|i/fa{*fjlp&}yS}`{r^e`[duumnUo=R?=8:W3+bta&{l$knv!cmi{+rtXxg~ySjmParpfcZb6W;837X> gsd-vc)`kq$h`fv ws]sjqtXojUjkh_e3\77><]9%l~k }f.e`|+ekcq%|~R~ats]dgZgtzlmTh85Z0.eqb+ta'nis"nbdx.uq[uhszVmhSua}012360=R8&myj#|i/fa{*fjlp&}yS}`{r^e`[}iu89::>85Z0.eqb+ta'nis"nbdx.uq[uhszVmhSua}012160=R8&myj#|i/fa{*fjlp&}yS}`{r^e`[}iu89:8>85Z0.eqb+ta'nis"nbdx.uq[uhszVmhSua}012760=R8&myj#|i/fa{*fjlp&}yS}`{r^e`[}iu89:>>85Z0.eqb+ta'nis"nbdx.uq[uhszVmhSua}012560=R8&myj#|i/fa{*fjlp&}yS}`{r^e`[}iu89:!re-dv4(un~l#@czx^PBIZTCWLDTJZH[10]277=R8&myj#|i/fn3*wb(o{;%~kyit.Onq}YUIDUYHRKA_GUEP47X:;l0Y=!hrg,qb*ak8'xo#j|>.sdtbq)Je|rT^LCPRDELQQYBF8;8=6[?/fpe*w`(oe:%~i!hr0,qbr`s'Dg~tR`jxu]escrX{}ki!re-dv4(un~l#@czx^lf|qYao~Tyo{e331`>S7'nxm"h gm2-va)`z8$yjzh{/bwqvZ`pn}Uxxlzj<1<1`>S7'nxm"h gm2-va)`z8$yjzh{/bwqvZ`pn}Uxxlzj<0<1g>S7'nxm"h gm2-va)`z8$yjzh{/bwqvZ`pn}Uxxlzj_10`?P6(o{l%~k!hl1,q`*au9'xm{kz ctpq[cqa|VymykP13:8Q5)`zo$yj"ic0/pg+bt6&{l|jy!jmqvz[cqa|Vli>:5Z0.eqb+ta'nf;"j gs3-vcqa|&of|ywPfvdw[l4b3\:$kh!rg-dh5(ul&my=#|iwgv,ahvsqVl|jyQf_np34565n2_;#j|i.sd,ci6)zm%l~< }fvdw+`kw|pUm{kzPi^mq45679;n0Y=!hrg,qb*ak8'xo#j|>.sdtbq)imq~Tjzh{_rvbp`:76;n0Y=!hrg,qb*ak8'xo#j|>.sdtbq)imq~Tjzh{_rvbp`:66;30Y=!hrg,qb*ak8'xo#j|ns/pppv)d8&ij~waeu>3:7?<]9%l~k }f.eo4+tc'nxj#||tr-`4*efz{seiy2>>3;8Q5)`zo$yj"ic0/pg+btf{'xxx~!l0.abvwim}692?74U1-dvc(un&mg<#|k/fpbw+tt|z%h<"mnrs{maq:46;l0Y=!hrg,qb*ak8'xo#j|ns/pppv)d8&mfyu hmZ2^*bk6&d;9j6[?/fpe*w`(oe:%~i!hr`q-vvrt'j:$k`{w.foX5X(`ez$f?h4U1-dvc(un&mg<#|k/fpbw+tt|z%h<"ibuy,di^4Z&ngx"`}=f:W3+bta&{l$ka>!re-dvdu)zz~x#n> glw{*bk\;T$la~ bs3d8Q5)`zo$yj"ic0/pg+btf{'xxx~!l0.enq}(`eR>V"jc|.lq17>S7'nxm"h gm2-va)`zhy%~~z|/b2,r4:76;90Y=!hrg,qb*ak8'xo#j|ns/pppv)d8&|:0<0=3:W3+bta&{l$ka>!re-dvdu)zz~x#n> v0>1:75<]9%l~k }f.eo4+tc'nxj#||tr-`4*p64:49?6[?/fpe*w`(oe:%~i!hr`q-vvrt'j:$z<2;>3`8Q5)`zo$yj"ic0/pg+btf{'xxx~!l0.t2[5Yffm:;<=?=b:W3+bta&{l$ka>!re-dvdu)zz~x#n> v0]2[dhc89:;=?l4U1-dvc(un&mg<#|k/fpbw+tt|z%h<"x>_3]bja6789;9n6[?/fpe*w`(oe:%~i!hr`q-vvrt'j:$zS7'nxm"h gm2-va)`zhy%~~z|/b3,gdtuqgo0<0=9:W3+bta&{l$ka>!re-dvdu)zz~x#n? c`pq}kcs4;4956[?/fpe*w`(oe:%~i!hr`q-vvrt'j;$ol|}yogw8685n2_;#j|i.sd,ci6)zm%l~l}!rrvp+f7(ods"jcT0\,di4(j9;l0Y=!hrg,qb*ak8'xo#j|ns/pppv)d9&mfyu hmZ3^*bkt&dy9j6[?/fpe*w`(oe:%~i!hr`q-vvrt'j;$k`{w.foX6X(`ez$f?h4U1-dvc(un&mg<#|k/fpbw+tt|z%h="ibuy,di^5Z&ngx"`}=f:W3+bta&{l$ka>!re-dvdu)zz~x#n? glw{*bk\<3<17>S7'nxm"h gm2-va)`zhy%~~z|/b3,r4:46;90Y=!hrg,qb*ak8'xo#j|ns/pppv)d9&|:090=b:W3+bta&{l$ka>!re-dvdu)zz~x#n? v0]3[dhc89:;=?l4U1-dvc(un&mg<#|k/fpbw+tt|z%h="x>_0]bja6789;9n6[?/fpe*w`(oe:%~i!hr`q-vvrt'j;$zQnne234575j2_;#j|i.sd,ci6)zm%l~l}!rrvp+f7(~8U?Sl`k0123576<]9%l~k }f.eo4+tc'nxj#||tr-`khv7:91^<"i}f/pe+bj7&{n$ko|.sqww*ehey;956[?/fpe*w`(oe:%~i!hr`q-vvrt'{kfShctx]efZo482_;#j|i.sd,ci6)zm%l~l}!rrvp+wgjWlg{xtQib^k\kw67899:7X> gsd-vc)`d9$yh"i}ar,qwqu(zhgTi`~{y^da[lYhz9:;<<<<;T2,cw`)zo%l`= }d.psjqt(Eje~byQlotlw61=R8&myj#|i/fn3*wb(zyd~"Clotlw[firf};986[?/fpe*w`(oe:%~i!}povq+Heh}g~Tob{at307?P6(o{l%~k!hl1,q`*twf}x$Anaznu]`kphs;;>0Y=!hrg,qb*ak8'xo#~ats-Ngjsi|Vidycz;259V4*aun'xm#jb?.sf,vuhsz&Ghcx`{_bmvjq35<2_;#j|i.sd,ci6)zm%y|cz}/LalqkrXkfex;<;;T2,cw`)zo%l`= }d.psjqt(Eje~byQlotlw372<]9%l~k }f.eo4+tc'{zex!BcnwmpZeh}g~3>95Z0.eqb+ta'nf;"j rqlwv*Kdg|dSnaznu;1=>S7'nxm"h gm2-va)uxg~y#@m`uov\gjsi|Vir0=0=c:W3+bta&{l$ka>!re-qtkru'DidyczPcnwmpZe~494T~y<6;T2,cw`)zo%l`= }d.psjqt(Eje~byQlotlw[f;978h7X> gsd-vc)`d9$yh"|nup,Ifirf}Uhcx`{_b{?5;Yu|;30Y=!hrg,qb*ak8'xo#~ats-Ngjsi|VidyczPcx>1:7e<]9%l~k }f.eo4+tc'{zex!BcnwmpZeh}g~Tot2=>^pw6<=R8&myj#|i/fn3*wb(zyd~"Clotlw[firf}Uhu1=12b9V4*aun'xm#jb?.sf,vuhsz&Ghcx`{_bmvjqYdq595Sz=9:W3+bta&{l$ka>!re-qtkru'DidyczPcnwmpZe~4=49o6[?/fpe*w`(oe:%~i!}povq+Heh}g~Tob{at^az818Xz}827X> gsd-vc)`d9$yh"|nup,Ifirf}Uhcx`{_b{?1;4d3\:$kh!rg-dh5(ul&x{by| MbmvjqYdg|dSnw35?]qp7?<]9%l~k }f.eo4+tc'{zex!BcnwmpZeh}g~Tot29>3a8Q5)`zo$yj"ic0/pg+wvi|{%Fob{at^alqkrXkp6=2R|{289V4*aun'xm#jb?.sf,vuhsz&Ghcx`{_bmvjqYdq5=5>n5Z0.eqb+ta'nf;"j rqlwv*Kdg|dSnaznu]`}919W{~956[?/fpe*w`(oe:%~i!}povq+Heh}g~Tob{at^az8=85k2_;#j|i.sd,ci6)zm%y|cz}/LalqkrXkfexRmv<9<\vq4f3\:$kh!rg-dh5(ul&x{by| MbmvjqYdg|dSua}<1<1e>S7'nxm"h gm2-va)uxg~y#@m`uov\gjsi|Vrd~1?12`9V4*aun'xm#jb?.sf,vuhsz&Ghcx`{_bmvjqYg{692?o4U1-dvc(un&mg<#|k/srmpw)JkfexRm`uov\|jt;;78j7X> gsd-vc)`d9$yh"|nup,Ifirf}Uhcx`{_ymq8185i2_;#j|i.sd,ci6)zm%y|cz}/LalqkrXkfexRv`r=7=6d=R8&myj#|i/fn3*wb(zyd~"Clotlw[firf}Usc29>3c8Q5)`zo$yj"ic0/pg+wvi|{%Fob{at^alqkrXpfx7;3::Zts9o1^<"i}f/pe+bj7&{n$~}`{r.alqkr;87;m7X> gsd-vc)`d9$yh"|nup,gjsi|5;5=k5Z0.eqb+ta'nf;"j rqlwv*eh}g~7>3?i;T2,cw`)zo%l`= }d.psjqt(kfex1=11g9V4*aun'xm#jb?.sf,vuhsz&idycz34?3e?P6(o{l%~k!hl1,q`*twf}x$ob{at=7=5c=R8&myj#|i/fn3*wb(zyd~"m`uov?2;7a3\:$kh!rg-dh5(ul&x{by| cnwmp9199o1^<"i}f/pe+bj7&{n$~}`{r.alqkr;07;m7X> gsd-vc)`d9$yh"|nup,gjsi|535=h5Z0.eqb+ta'nf;"j rqlwv*eh}g~T<e:W3+bta&{l$ka>!re-qtkru'je~byQ<1d9V4*aun'xm#jb?.sf,vuhsz&idyczP40g8Q5)`zo$yj"ic0/pg+wvi|{%hcx`{_43f?P6(o{l%~k!hl1,q`*twf}x$ob{at^42a>S7'nxm"h gm2-va)uxg~y#naznu]45`=R8&myj#|i/fn3*wb(zyd~"m`uov\<4c<]9%l~k }f.eo4+tc'{zex!lotlw[<453\:$kh!rg-dh5(ul&x{by| cnwmpZb64949>6[?/fpe*w`(oe:%~i!}povq+firf}Uo=1?1239V4*aun'xm#jb?.sf,vuhsz&idyczPd0>1:74<]9%l~k }f.eo4+tc'{zex!lotlw[a7;;7897X> gsd-vc)`d9$yh"|nup,gjsi|Vn:090=2:W3+bta&{l$ka>!re-qtkru'je~byQk1=7=67=R8&myj#|i/fn3*wb(zyd~"m`uov\`4:16;80Y=!hrg,qb*ak8'xo#~ats-`kphsWm;7;3<=;T2,cw`)zo%l`= }d.psjqt(kfexRj><9<16>S7'nxm"h gm2-va)uxg~y#naznu]g59?9:81^<"i}f/pe+bj7&{n$~}`{r.alqkrXl8U;><5Z0.eqb+ta'nf;"j rqlwv*eh}g~Th209V4*aun'xm#jb?.sf,vuhsz&idyczPd0]164=R8&myj#|i/fn3*wb(zyd~"m`uov\`4Y4:81^<"i}f/pe+bj7&{n$~}`{r.alqkrXl8U?><5Z0.eqb+ta'nf;"j rqlwv*eh}g~Th<5Z0.eqb+ta'nf;"j rqlwv*eh}g~Th/bcqv|hb|5:5>45Z0.eqb+ta'nf;"z| gvcp*rus{&i:#no}rxlfp979:01^<"i}f/pe+bj7&~x$kzo|.vqww*e6'jky~t`jt=0=6<=R8&myj#|i/fn3*rt(o~kx"z}{s.a2+fguzpdnx1=12g9V4*aun'xm#jb?.vp,crgt&~y"m>/fov|+ajS9W%k`?!m00e?P6(o{l%~k!hl1,tv*apiz$|y} c0-dip~)odQ:Q#ibs/op6c=R8&myj#|i/fn3*rt(o~kx"z}{s.a2+bkrp'mfW?S!glq-iv4a3\:$kh!rg-dh5(pz&m|m~ xsuq,g4)`e|r%k`U<]/enw+kt:o1^<"i}f/pe+bj7&~x$kzo|.vqww*e6'ng~t#ib[5_-chu)ez887X> gsd-vc)`d9$|~"ixar,twqu(k8%}=1>1229V4*aun'xm#jb?.vp,crgt&~y"m>/w3?5;443\:$kh!rg-dh5(pz&m|m~ xsuq,g4)q9585>>5Z0.eqb+ta'nf;"z| gvcp*rus{&i:#{?33?00?P6(o{l%~k!hl1,tv*apiz$|y} c0-u5929:k1^<"i}f/pe+bj7&~x$kzo|.vqww*e6';T?000a?P6(o{l%~k!hl1,tv*apiz$|y} c0-u5Z5Xign;<=>>2c9V4*aun'xm#jb?.vp,crgt&~y"m>/w3\0Zhh|9:;<<<6;T2,cw`)zo%l`= xr.etev(p{}y$o?!laspzj`r;87827X> gsd-vc)`d9$|~"ixar,twqu(k;%hm|vndv?5;4>3\:$kh!rg-dh5(pz&m|m~ xsuq,g7)di{xrbhz32?0:?P6(o{l%~k!hl1,tv*apiz$|y} c3-`ewt~fl~7?32g9V4*aun'xm#jb?.vp,crgt&~y"m=/fov|+ajS8W%k`}!mr0e?P6(o{l%~k!hl1,tv*apiz$|y} c3-dip~)odQ9Q#ibs/op6c=R8&myj#|i/fn3*rt(o~kx"z}{s.a1+bkrp'mfW>S!glq-iv4a3\:$kh!rg-dh5(pz&m|m~ xsuq,g7)`e|r%k`U;]/enw+kt::1^<"i}f/pe+bj7&~x$kzo|.vqww*e5';7<3<<;T2,cw`)zo%l`= xr.etev(p{}y$o?!y1=3=66=R8&myj#|i/fn3*rt(o~kx"z}{s.a1+s7;:7887X> gsd-vc)`d9$|~"ixar,twqu(k;%}=1=1229V4*aun'xm#jb?.vp,crgt&~y"m=/w3?0;4e3\:$kh!rg-dh5(pz&m|m~ xsuq,g7)q9V:Tmcj?01226g=R8&myj#|i/fn3*rt(o~kx"z}{s.a1+s7X9Vkeh=>?000a?P6(o{l%~k!hl1,tv*apiz$|y} c3-u5Z4Xign;<=>>2c9V4*aun'xm#jb?.vp,crgt&~y"m=/w3\7Zgil9:;<<=5Z0.eqb+ta'nf;"z| gvcp*rus{&ida}?=0:W3+bta&{l$ka>!ws-dsdu)z~x#nabp30;?P6(o{l%~k!hl1,tv*apiz$|y} r`o\bpjkWohTe?;4U1-dvc(un&mg<#y}/fubw+qt|z%ym`Qiumn\m7e<]9%l~k }f.eo4+qu'n}j#y|tr-qehYa}efTeRa}01236a=R8&myj#|i/fn3*rt(o~kx"z}{s.pbiZ`rdeUbSb|?01225a=R8&myj#|i/fn3*rt(zhgT{Qjn^k266=R8&myj#|i/fn3*rt(yd~"Clotlw[firf}8?7X> gsd-vc)`d9$|~"ynup,Ifirf}Uhcx`{1368Q5)`zo$yj"ic0/uq+rvi|{%Fob{at^alqkr5:=1^<"i}f/pe+bj7&~x${}`{r.O`kphsWje~by==4:W3+bta&{l$ka>!ws-ttkru'DidyczPcnwmp1433\:$kh!rg-dh5(pz&}{by| MbmvjqYdg|d9?:4U1-dvc(un&mg<#y}/vrmpw)JkfexRm`uov561=R8&myj#|i/fn3*rt(yd~"Clotlw[firf}=986[?/fpe*w`(oe:%{!xpovq+Heh}g~Tob{at90:?P6(o{l%~k!hl1,tv*qwf}x$Anaznu]`kphsWjs7<32:Zts:01^<"i}f/pe+bj7&~x${}`{r.O`kphsWje~byQly=0=6f=R8&myj#|i/fn3*rt(yd~"Clotlw[firf}Uhu1<1_sv1=>S7'nxm"h gm2-sw)pxg~y#@m`uov\gjsi|Vir0>0=c:W3+bta&{l$ka>!ws-ttkru'DidyczPcnwmpZe~4:4T~y<6;T2,cw`)zo%l`= xr.usjqt(Eje~byQlotlw[f;<78h7X> gsd-vc)`d9$|~"ynup,Ifirf}Uhcx`{_b{?0;Yu|;30Y=!hrg,qb*ak8'}y#z~ats-Ngjsi|VidyczPcx>6:7e<]9%l~k }f.eo4+qu'~zex!BcnwmpZeh}g~Tot2:>^pw6<=R8&myj#|i/fn3*rt(yd~"Clotlw[firf}Uhu1812b9V4*aun'xm#jb?.vp,suhsz&Ghcx`{_bmvjqYdq5<5Sz=9:W3+bta&{l$ka>!ws-ttkru'DidyczPcnwmpZe~4>49o6[?/fpe*w`(oe:%{!xpovq+Heh}g~Tob{at^az828Xz}8j7X> gsd-vc)`d9$|~"ynup,Ifirf}Uhcx`{_ymq8585i2_;#j|i.sd,ci6){%||cz}/LalqkrXkfexRv`r=3=6d=R8&myj#|i/fn3*rt(yd~"Clotlw[firf}Usc2=>3c8Q5)`zo$yj"ic0/uq+rvi|{%Fob{at^alqkrXpfx7?35:7g<]9%l~k }f.eo4+qu'~zex!BcnwmpZeh}g~Ttb|37?0b?P6(o{l%~k!hl1,tv*qwf}x$Anaznu]`kphsWqey050=d:W3+bta&{l$ka>!ws-ttkru'DidyczPcnwmpZ~hz525Sz>f:W3+bta&{l$ka>!ws-ttkru'je~by2?>0d8Q5)`zo$yj"ic0/uq+rvi|{%hcx`{<0<2b>S7'nxm"h gm2-sw)pxg~y#naznu>1:4`<]9%l~k }f.eo4+qu'~zex!lotlw8686n2_;#j|i.sd,ci6){%||cz}/bmvjq:368l0Y=!hrg,qb*ak8'}y#z~ats-`kphs4<4:j6[?/fpe*w`(oe:%{!xpovq+firf}6=2f:W3+bta&{l$ka>!ws-ttkru'je~by27>0g8Q5)`zo$yj"ic0/uq+rvi|{%hcx`{_13f?P6(o{l%~k!hl1,tv*qwf}x$ob{at^32a>S7'nxm"h gm2-sw)pxg~y#naznu]15`=R8&myj#|i/fn3*rt(yd~"m`uov\74c<]9%l~k }f.eo4+qu'~zex!lotlw[17b3\:$kh!rg-dh5(pz&}{by| cnwmpZ36m2_;#j|i.sd,ci6){%||cz}/bmvjqY19l1^<"i}f/pe+bj7&~x${}`{r.alqkrX?8o0Y=!hrg,qb*ak8'}y#z~ats-`kphsW1897X> gsd-vc)`d9$|~"ynup,gjsi|Vn:0=0=2:W3+bta&{l$ka>!ws-ttkru'je~byQk1=3=67=R8&myj#|i/fn3*rt(yd~"m`uov\`4:56;80Y=!hrg,qb*ak8'}y#z~ats-`kphsWm;7?3<=;T2,cw`)zo%l`= xr.usjqt(kfexRj><5<16>S7'nxm"h gm2-sw)pxg~y#naznu]g5939:;1^<"i}f/pe+bj7&~x${}`{r.alqkrXl86=2?<4U1-dvc(un&mg<#y}/vrmpw)dg|dSi?37?01?P6(o{l%~k!hl1,tv*qwf}x$ob{at^f28=8592_;#j|i.sd,ci6){%||cz}/bmvjqYc9V:9=6[?/fpe*w`(oe:%{!xpovq+firf}Uo=R?=1:W3+bta&{l$ka>!ws-ttkru'je~byQk1^015>S7'nxm"h gm2-sw)pxg~y#naznu]g5Z5592_;#j|i.sd,ci6){%||cz}/bmvjqYc9V>9=6[?/fpe*w`(oe:%{!xpovq+firf}Uo=R;=1:W3+bta&{l$ka>!ws-ttkru'je~byQk1^415>S7'nxm"h gm2-sw)pxg~y#naznu]g5Z1592_;#j|i.sd,ci6){%||cz}/bmvjqYc9V29>6[?/fpe*w`(oe:%{!xpovq+firf}Uo>1>1239V4*aun'xm#jb?.vp,suhsz&idyczPd3>2:74<]9%l~k }f.eo4+qu'~zex!lotlw[a4;:7897X> gsd-vc)`d9$|~"ynup,gjsi|Vn90>0=2:W3+bta&{l$ka>!ws-ttkru'je~byQk2=6=67=R8&myj#|i/fn3*rt(yd~"m`uov\`7:26;80Y=!hrg,qb*ak8'}y#z~ats-`kphsWm87:3<=;T2,cw`)zo%l`= xr.usjqt(kfexRj=<6<16>S7'nxm"h gm2-sw)pxg~y#naznu]g69>9:81^<"i}f/pe+bj7&~x${}`{r.alqkrXl;U;><5Z0.eqb+ta'nf;"z| wqlwv*eh}g~Th?Q>209V4*aun'xm#jb?.vp,suhsz&idyczPd3]164=R8&myj#|i/fn3*rt(yd~"m`uov\`7Y4:81^<"i}f/pe+bj7&~x${}`{r.alqkrXl;U?><5Z0.eqb+ta'nf;"z| wqlwv*eh}g~Th?Q:209V4*aun'xm#jb?.vp,suhsz&idyczPd3]564=R8&myj#|i/fn3*rt(yd~"m`uov\`7Y0:81^<"i}f/pe+bj7&~x${}`{r.alqkrXl;U3=;5Z0.eqb+ta'dof#iazt^k\440<]9%l~k }f.ofi*bh}}UbS1^<"i}f/pe+hcj'me~xRgP1034?P6(o{l%~k!bel-gkprXaV;9=:5Z0.eqb+ta'dof#iazt^k\56703\:$kh!rg-nah)cg|~TeR?;169V4*aun'xm#`kb/emvpZoX9<;<7X> gsd-vc)jmd%ocxzPi^3552=R8&myj#|i/lgn+air|VcT=:?9;T2,cw`)zo%fi`!kotv\mZ46>2_;#j|i.sd,i`k(lfSdQ<179V4*aun'xm#`kb/emvpZoX<8<0Y=!hrg,qb*kbe&ndyyQf_435?P6(o{l%~k!bel-gkprXaV<::6[?/fpe*w`(elg$hb{{_h]453=R8&myj#|i/lgn+air|VcT4<84U1-dvc(un&gna"j`uu]j[<7>3\:$kh!rg-nah)cg|~Tahc30?3b?P6(o{l%~k!bel-gkprXelg7==0>a:W3+bta&{l$ahc dnww[hcj48;5=l5Z0.eqb+ta'dof#iazt^ofi97568k0Y=!hrg,qb*kbe&ndyyQbel>27;7f3\:$kh!rg-nah)cg|~Tahc315<2e>S7'nxm"h mdo,`jssWdof0<;11`9V4*aun'xm#`kb/emvpZkbe5;=2 gsd-vc)jmd%ocxzPmdo?5;7>3\:$kh!rg-nah)cg|~Tahc32?3:?P6(o{l%~k!bel-gkprXelg7?3?6;T2,cw`)zo%fi`!kotv\i`k;<7;27X> gsd-vc)jmd%ocxzPmdo?1;7>3\:$kh!rg-nah)cg|~Tahc36?3:?P6(o{l%~k!bel-gkprXelg7;3?6;T2,cw`)zo%fi`!kotv\i`k;07;27X> gsd-vc)jmd%ocxzPmdo?=;0b3\:$kh!rg-nah)`jd$ln`i!gcode+h`mji%n`i bmi\i`kXoldn~lz`r.tbhlb)kz~y#oblnms_5[)zhg%~"x=_omjjlr)zhg$h}=9x0:-vdk6j2_;#j|i.sd,i`k(|dzT~lcPre]fj4e<]9%l~k }f.ofi*rjxVxjaR|k_dl256=R8&myj#|i/scn[wbXmg;<7X> gsd-vc)uidUyijazt^gm56=R8&myj#|i/scn[rtXmg;o7X> gsd-vc)u{}hgg"|k_sqw[duumn8;7X> gsd-vc)u{}hgg"|k_sqw[duumnUo=?>4U1-dvc(un&xxxobd/sf\vvrXizxnkRj=1b9V4*aun'xm#}{bmi,vaYu{}Uhc`l>d:W3+bta&{l$~~zmlj-q`Ztt|Vidao?>e:W3+bta&{l$~~zmlj-q`Ztt|Vxnk1>11d9V4*aun'xm#}{bmi,vaYu{}Uyij2>>0g8Q5)`zo$yj"||tcnh+wbXzz~T~hi32?3g?P6(o{l%~k!}su`oo*tcW{ySkh_13g?P6(o{l%~k!}su`oo*tcW{ySkh_03g?P6(o{l%~k!}su`oo*tcW{ySkh_33g?P6(o{l%~k!}su`oo*quW{ySl}}ef03?P6(o{l%~k!}su`oo*quW{ySl}}ef]g576<]9%l~k }f.pppgjl'~xT~~zParpfcZb59j1^<"i}f/pe+wusjea${Q}su]`khd6l2_;#j|i.sd,vvredb%|~R||t^alig76m2_;#j|i.sd,vvredb%|~R||t^pfc9699l1^<"i}f/pe+wusjea${Q}su]qab:668n0Y=!hrg,qb*tt|kf`#z|Prrv\v`aX88n0Y=!hrg,qb*tt|kf`#z|Prrv\v`aX9h1^_H\PAMKBWf=R[LXTZD]FBMG0?SED12\BIZQ[YQG0?RCF;2]NNo5XRHVF[COU[]i0[_G[E^OL@@YFk2]YEYKPMNFF[G7c3QCGECV"XE@#4+7'[]_I,= > @Q@ML3^cjVCoj6Vkh^RqmhPbzzcdb<>4Xeo\Idlhz_oydaa119[`hYJageyZh||inl`?djjgz~Ti`~{yc9bhhit|Vl~`a84b`ahqubbf|hUhcx`{(7+g?agsiVidycz'7(f8`drfWje~by&7)g9geqgXkfex1650?58`gosm{x=7iga(1+5?aoi 8#<7iga(02*3>bnf!;:%:5kio*26,1'8;ekm,42.?2nbb%?:)69gmk.6> =0hd`'16+4?aoi 82";6jfn)3:-3=cag"9%:5kio*14,1<'8;ekm,74.?2nbb%<<)69gmk.5< =0hd`'24+4?aoi ;<";6jfn)04-2=cag"94$94dhl+6'8;ekm,66.?2nbb%=>)69gmk.4: =0hd`'32+4?aoi :>";6jfn)16-3=cag"?%;5kio*6-3=cag"=%;5kio*4-3=cag"3%;5kio*:-3=cag6;2:5kio>24;169gmk:6<7=0hd`314<4?aoi48<5;6jfn=34:2=cag6:4394dhl?5<813mce0<08;ekm8769?2nbb1<>>69gmk:5:7=0hd`322<4?aoi4;>5;6jfn=06:2=cag69:394dhl?62803mce0?617:fjj94>6?1oec2=>69gmk:487=0hd`330<4?aoi4:85;6jfn=10:2=cag688374dhl?70<76>1oec2<5?48`lh;;7<0hd`34?48`lh;=7<0hd`36?48`lh;?7<0hd`38?48`lh;17=0hb{{(1+4?air|!;"46j`uu*24,>bh}}":8$64dnww,43.02ndyy&>6(:8`jss 8=";6j`uu*1-2=cg|~#?$94dnww,1/03me~x%;&7:flqq.1!>1ocxz'7(58`jss 1#<7iazt);*3>bh}}6;255kotv?558?3me~x1?>>99gkpr;9;437iazt=30:==cg|~7=907;emvp972611ocxz3171ocxz31?58`jss4;4<7iazt=1=3>bh}}6?2:5kotv?1;169gkpr;1720iigi2oeg1>cjx}s8:6hffn]dakcui}eyS{:P4-"[mioip)ID^H.Heogqeqiu(8:%=#><_hr05f=aaoeTta`w_431|60X:jf`S>8{o0:0e>`nnfUs`cvP500{73Y5keaT?;z`19.emciXoldn~lz`r^t7[1*IGGO'BB@J3e68bl`hWqfetR;>2y15[7ekcV9=xb?7,gkekZabflxjxb|Pv5]7(~eX`hyTeczPcmi>4)eX`hyT}{=1.`[wbXn{oz1<"l_icp[wbXlh~jSnaznu?3(fYcagU|eizg=24/gZnf{V}ySio{a^alqkr:8%iTjxbc_gnbcvYu{}U}ma3?,b]jiujbeldmyg`n^vzt`;5$jU~hQjmcgg``bXzlm68-a\ivahfV|j`0?#c^pg[acw|a7:4)eX`hyT~~z21-a\`drfWje~byQxievk9<*dWakxSz|Pabi>4)eX}zoTinm20-a\gjkjggUh`bmd=1.`[rtXijaT`by20-a\vaYwf}xT{dj{h<33(fYr{lUm{kzPd`vb[firf}7; nQgar]bhhit|Vof|yw20-a\vaYci}kTob{at^uj`qn:99&hSbxjrgnlsZjh4:'oRy}_qlwvZqnl}b65!mPpsmd[`kw|pUu}k20-a\swYci}kTob{at^uj`qn:1%iT|kco`f\v`at58&hSiazt^pppZpfd4:'oRfns^fbpdYdg|d1="l_qplcZ`rdeUdk|h^lfcdrbWkg18>7,b]tvZbbx}b69<<#c^rqkbYbey~rSyf}erj\j`af|lU}ma3:,b]svjaXmdzuRzgrdqk[dutm{~Tzlb24-a\lduX~hfbh0>#c^rqkbYa}efTxe|jsi]bwvcu|V|j`0;?9-aliuiimg~Tblcj=gkekZ~kfqU>=?v<6^0`hnY4>}e:4!mPv`nj`Zjh4:'oR~}il]emciX|pzn18?=x24/gZvugnUmyabPtxrf95*dWdofcwPtxrf94*z;?1mekaPxml{[075p:nbd_24wk4>Xn`ldSjkaescwkwYqTt~zP159eqij03`dSnbd8:ldggsndm20c{k}fmmte>vugnUna}zv159svjaXmdzuRzgrdqk,5/6<2zycjQjmqvz[qnumzb#=$?;;qplcZcjx}sTxe|jsi*1-42vugnUna}zv_ujqavn/= ;?7}|`g^gntqX|axne&9)068twi`Wlg{xtQ{hsgpl-1.9=1{~biPelrw}Zrozlyc$5'>4:rqkbYbey~rSyf}erj+=,713yxdkRkbpu{\pmtb{a626=0>b:rqkbYbey~rSyf}erj\evubz}";%vugnUna}zv_ujqavnXizyn~y&9)0`8twi`Wlg{xtQ{hsgplZgt{lx$:'>b:rqkbYbey~rSyf}erj\evubz}"3%294:n6~}of]fiur~W}byi~fPndebp`.7!8h0|ah_dosp|Ys`{oxdR`jg`vf,4/6j2zycjQjmqvz[qnumzbTbhintd*1-4dvugnUna}zv_ujqavnXflmjxh&;)0`8twi`Wlg{xtQ{hsgplZhboh~n$8'>b:rqkbYbey~rSyf}erj\j`af|l"=%#:n6~}of]fiur~W}byi~fPndebp`.?!8h0|ah_dosp|Ys`{oxdR`jg`vf,:>58>3yxdkRhzlm30?uthoVl~`aQ{hsgpl-6.9:1{~biPftno[qnumzb#=$?<;qplcZ`rdeUdk|h)0*56=wzfmTjxbc_ujqavn/; ;87}|`g^dvhiYs`{oxd%:&129svjaXn|fgSyf}erj+1,743yxdkRhzlm]wlwct`!<"=>5rne\bpjkW}byi~f'7(30?uthoVl~`aQ{hsgpl->.9<1{~biPftno[qnumzb747>11`9svjaXn|fgSyf}erj\evubz}";%a:rqkbYa}efTxe|jsi]mabgsm!="=l5rne\bpjkW}byi~fPndebp`.?!8i0|ah_gwohZrozlycSckhaug?2xoSnbd119q`Zbf|hUhcx`{(1+24>tcWmkmRm`uov+5,773{nThlzn_bmvjq.5!8:0~iQkauc\gjsi|!9"==5}d^fbpdYdg|d$9'>0:pg[agsiVidycz'5(33?wbXlh~jSnaznu*5-46008vaYci}kTob{at=;94;34ws]geqgXkfex%:&119tvZbf|hUhcx`{(4+24>quWmkmRm`uov+2,773~xThlzn_bmvjq.0!8:0{Qkauc\gjsi|!2"=?5xr^fbpdYdg|d054?>49tvZci>2}yS}{}ABse2e7e4<8qe?ok51:l0fc<33-9io7=m6:P0`<3;l036<==b75:>7e4<81X=?8545594?74:k<<57:182>4}T=90??h47:011f31>2;i88<5yT05e>5<6280::ou\51877`7}r9:;1=6{>3383?x"6?>0:56l;4083>6b=;39owE=ne:X72?4|990:47s+1969017<,:hi69:?;h6:3?6=3`>jn7>5;n671?6=3f>8j7>5;h6b4?6=3`>257>5;n616?6=,8=269=<;o349=7>5$05:>1543g;<47?4;n614?6=,8=269=<;o34:j7>5$05:>1543g;<47=4;n62a?6=,8=269=<;o34:h7>5$05:>1543g;<47;4;n62g?6=,8=269=<;o34:n7>5$05:>1543g;<4794;n61e?6=,8=269=<;o34<3f>957>5$05:>1543g;<4774;n619;7>5$05:>1543g;<47l4;n612?6=,8=269=<;o34997>5$05:>1543g;<47j4;n610?6=,8=269=<;o349?7>5$05:>1543g;<47h4;n62e?6=,8=269=<;o341:9j7`b=83.:;44;119m52>=821b?hm50;&23<<3991e=:651:9j7`d=83.:;44;119m52>=:21b?ho50;&23<<3991e=:653:9j7`?=83.:;44;119m52>=<21b?h650;&23<<3991e=:655:9j7`0=83.:;44;119m52>=>21b?h;50;&23<<3991e=:657:9j7`2=83.:;44;119m52>=021b?h=50;&23<<3991e=:659:9j7`4=83.:;44;119m52>=i21b?h?50;&23<<3991e=:65b:9j7`6=83.:;44;119m52>=k21b?ih50;&23<<3991e=:65d:9j7ac=83.:;44;119m52>=m21b?ij50;&23<<3991e=:65f:9j7ad=83.:;44;119m52>=9910e>jn:18'52?=<8:0b<97:038?l5c13:1(<96:533?k7003;976g!7013>:<6`>79827>=n;m=1<7*>788755=i9>21=954i2f5>5<#9>318<>4n05;>43<3`9o97>5$05:>1773g;<47?9;:k0`1<72-;<57:>0:l23=<6?21b?i=50;&23<<3991e=:651998m6b5290/=:754028j41?28307d=i3;29 41>2=;;7c?88;3b?>o4n;0;6)?89;624>h6?10:n65f3g394?"6?00?==5a16:95f=f:9j7`1=83.:;44;119m52>=:910e>jl:18'52?=<8:0b<97:338?l5c93:1(<96:533?k70038976g!7013>:<6`>79817>=n<1k1<75m3`d94?7=83:pD>oj;%3;0?5fn2e:;;4?::a`6<7280;6=uG3`g8 4>32m90ci<50;9~f13=83k86<=>:04aM5fm2P?:7?9{`81=?b=j38h6?65118287)?81;341>i4k90;66g;9983>>o3=:0;6)?89;660>h6?10;76g;5383>!7013>>86`>7982?>o3=80;6)?89;660>h6?10976g;5183>!7013>>86`>7980?>o3h6?10?76g;4d83>!7013>>86`>7986?>o3h6?10=76g;4b83>!7013>>86`>7984?>o3h6?10376g;4`83>!7013>>86`>798:?>i3>k0;66g;9c83>>i31l0;66g;7d83>!7013>7983?>o3?m0;6)?89;64b>h6?10:76g;7b83>!7013>7981?>o3?k0;6)?89;64b>h6?10876g;7`83>!7013>7987?>o3?00;6)?89;64b>h6?10>76g;7983>!7013>7985?>o3?>0;6)?89;64b>h6?10<76g;7783>!7013>798;?>o31>0;66a;4983>>i3<00;66g>i31=0;6)?89;6:2>h6?10;76a;9283>!7013>2:6`>7982?>i31;0;6)?89;6:2>h6?10976a;9083>!7013>2:6`>7980?>i3190;6)?89;6:2>h6?10?76a;8g83>!7013>2:6`>7986?>i30l0;6)?89;6:2>h6?10=76a;8e83>!7013>2:6`>7984?>i30j0;6)?89;6:2>h6?10376a;8c83>!7013>2:6`>798:?>o3=l0;6)?89;66b>h6?10;76g;5e83>!7013>>j6`>7982?>o3=j0;6)?89;66b>h6?10976g;5c83>!7013>>j6`>7980?>o3=h0;6)?89;66b>h6?10?76g;5883>!7013>>j6`>7986?>o3=10;6)?89;66b>h6?10=76g;5683>!7013>>j6`>7984?>o3=?0;6)?89;66b>h6?10376g;5483>!7013>>j6`>798:?>o3ik0;66a;a883>!7013>jm6`>7983?>i3i10;6)?89;6be>h6?10:76a;a683>!7013>jm6`>7981?>i3i?0;6)?89;6be>h6?10876a;a483>!7013>jm6`>7987?>i3i=0;6)?89;6be>h6?10>76a;a283>!7013>jm6`>7985?>i3i;0;6)?89;6be>h6?10<76a;a083>!7013>jm6`>798;?>i3<<0;66a;3g83>>o3?=0;6)?89;641>h6?10;76g;7283>!7013><96`>7982?>o3?;0;6)?89;641>h6?10976g;7083>!7013><96`>7980?>o3?90;6)?89;641>h6?10?76g;6g83>!7013><96`>7986?>o3>l0;6)?89;641>h6?10=76g;6e83>!7013><96`>7984?>o3>j0;6)?89;641>h6?10376g;a183>>o3>o3ij0;66a;9`83>>i31o0;66a;9e83>>o3100;66a;2383>!7013>8?6`>7983?>i3:80;6)?89;607>h6?10:76a;2183>!7013>8?6`>7981?>i39o0;6)?89;607>h6?10876a;1d83>!7013>8?6`>7987?>i39m0;6)?89;607>h6?10>76a;1b83>!7013>8?6`>7985?>i39k0;6)?89;607>h6?10<76a;2`83>!7013>8?6`>798;?>i3:00;6)?89;607>h6?10276a;2983>!7013>8?6`>798b?>i3:>0;6)?89;607>h6?10i76a;2783>!7013>8?6`>798`?>i3:<0;6)?89;607>h6?10o76a;2583>!7013>8?6`>798f?>i3::0;6)?89;607>h6?10m76a;1`83>!7013>8?6`>79824>=h<831<7*>788776=i9>21=<54i2gg>5<#9>318<>4n05;>5=5<#9>318<>4n05;>7=54i2g:>5<#9>318<>4n05;>1=5<#9>318<>4n05;>3=6=4+16;90465<#9>318<>4n05;>==5<#9>318<>4n05;>d=5<#9>318<>4n05;>f=5<#9>318<>4n05;>`=5<#9>318<>4n05;>46<3`9om7>5$05:>1773g;<47?>;:k0`<<72-;<57:>0:l23=<6:21b?i650;&23<<3991e=:651298m6b0290/=:754028j41?28>07d=k6;29 41>2=;;7c?88;36?>o4l<0;6)?89;624>h6?10::65f3e694?"6?00?==5a16:952=32c8j>4?:%34=?2682d:;54>a:9j7c4=83.:;44;119m52>=9k10e>h>:18'52?=<8:0b<97:0a8?l5a83:1(<96:533?k7003;o76g!7013>:<6`>7982a>=n;lo1<7*>788755=i9>21=k54i2g4>5<#9>318<>4n05;>76<3`9oo7>5$05:>1773g;<47<>;:k0`4<72-;<57:>0:l23=<5:21b?i>50;&23<<3991e=:652298k6e62900e>m=:188m1>?290/=:7549;8j41?2910e968:18'52?=<130b<97:098m1>1290/=:7549;8j41?2;10e96::18'52?=<130b<97:298m1>3290/=:7549;8j41?2=10e96<:18'52?=<130b<97:498m1>5290/=:7549;8j41?2?10e96>:18'52?=<130b<97:698m1>7290/=:7549;8j41?2110c>mk:18'52?=;jo0b<97:198k6ed290/=:753bg8j41?2810c>mm:18'52?=;jo0b<97:398k6ef290/=:753bg8j41?2:10c>m6:18'52?=;jo0b<97:598k6e?290/=:753bg8j41?2<10c>m8:18'52?=;jo0b<97:798k6e1290/=:753bg8j41?2>10c>m::18'52?=;jo0b<97:998m10>290/=:7547c8j41?2910e987:18'52?=290:6=4?{%3;0?b43A9i46Foi;I1a<>N4il1d=:850;9~f6?e29086=4?{%3;0?ed3A9i46Fo3?3:17d;>:188k41e2900qo=n6;297?6=8r.:494lc:J0f==O;ho0D9<4$00e>1?d3-o;6?5f4683>>o293:17b?8b;29?xd41h0;6>4?:1y'5=2=kj1C?o64H2cf?M253-;9j7:6c:&f4?4>i6?k0;66sm3`694?3=83:p(<6;:e28L6d?3A9ji6F;2:&26c<31j1/i=4=;h64>5<>o6?h0;66a>7c83>>{e;h?1<7=50;2x 4>32ji0D>l7;I1ba>N3:2.:>k4;9b9'a5<53`><6=44i4394?=h9>h1<75rb2;:>5<2290;w)?74;f3?M5e02B8mh5G439'57`=<0i0(h>52:k73?6=3`>36=44i4394?=n9>k1<75`16`94?=zj:k86=4;:183!7?<3im7E=m8:J0e`=#m9097d:8:188m07=831b=:o50;9l52d=831vn>o=:187>5<7s-;387mi;I1a<>N4il1/i=4=;h64>5<h1<75rb2c2>5<3290;w)?74;ae?M5e02B8mh5+e181?l202900e8?50;9j52g=831d=:l50;9~f6gd290?6=4?{%3;0?ea3A9i46F<6=44i4394?=n9>k1<75`16`94?=zj:ki6=4;:183!7?<3im7E=m8:J0e`=#m9097d:8:188m07=831b=:o50;9l52d=831vn?78:187>5<7s-;387mi;I1a<>N4il1/i=48;h64>5<h1<75rb231>5<3290;w)?74;ag?M5e02B8mh5+e181?l202900e9j50;9j14<722e:;o4?::a747=83>1<7>t$0:7>fb<@:h37E=ne:&f4?4>o293:17b?8b;29?xd5?>0;694?:1y'5=2=9::0D>l7;I1ba>o3i3:17d;=:188m41c2900c<9;:188yg40>3:187>50z&2<1<6;91C?o64H2cf?l2f2900e8<50;9j52b=831d=::50;9~f712290?6=4?{%3;0?7482B8n55G3`g8m1g=831b9?4?::k23a<722e:;94?::a622=83>1<7>t$0:7>4573A9i46F>7>5;h34`?6=3f;<87>5;|`136<72=0;6=u+1969566<@:h37E=ne:k7e?6=3`?96=44i05g>5<858275=O;k20D>oj;h6b>5<>1<75rb3::>5<3290;w)?74;304>N4j11C?lk4i5c94?=n=;0;66g>7e83>>i6?=0;66sm29:94?2=83:p(<6;:013?M5e02B8mh5f4`83>>o2:3:17d?8d;29?j70<3:17pl=8683>1<729q/=5:51228L6d?3A9ji6g;a;29?l352900e<9k:188k4132900qo<76;290?6=8r.:494>319K7g><@:kn7d:n:188m04=831b=:j50;9l522=831vn?h>:187>5<7s-;387?<0:J0f==O;ho0e9o50;9j17<722c:;i4?::m231<722wi>k>50;694?6|,82?6<=?;I1a<>N4il1b8l4?::k66?6=3`;5;n340?6=3th9ik4?:583>5}#91>1=>>4H2`;?M5fm2c?m7>5;h71>5<5<54;294~"60=0:?=5G3c:8L6gb3`>j6=44i4094?=n9>n1<75`16694?=zj;oo6=4;:183!7?<3;8<6F>o6?m0;66a>7583>>{e;9>1<7:50;2x 4>3289;7E=m8:J0e`=nl7;I1ba>o3i3:17d;=:188m41c2900c<9;:188yg57:3:187>50z&2<1<6;91C?o64H2cf?l2f2900e8<50;9j52b=831d=::50;9~f666290?6=4?{%3;0?7482B8n55G3`g8m1g=831b9?4?::k23a<722e:;94?::a756=83>1<7>t$0:7>4573A9i46F>7>5;h34`?6=3f;<87>5;|`2e2<72=0;6=u+1969ga=O;k20D>oj;%g3>7=n<>0;66g;d;29?l362900c<9m:188yg7f>3:187>50z&2<15;h6g>5<6=4;:183!7?<3io7E=m8:J0e`=#m9097d:8:188m1b=831b9<4?::m23g<722wi=l:50;694?6|,82?6nj4H2`;?M5fm2.n<7<4i5594?=na283>1<729q/=5:5ce9K7g><@:kn7)k?:39j02<722c?h7>5;h72>5<858``>N4j11C?lk4$d296>o3?3:17d:k:188m07=831d=:l50;9~f4g6290?6=4?{%3;0?ec3A9i46F<6=44i5f94?=n=80;66a>7c83>>{e9h:1<7:50;2x 4>32jn0D>l7;I1ba>"b8380e9950;9j0a<722c>=7>5;n34f?6=3th:5k4?:583>5}#91>1oi5G3c:8L6gb3-o;6?5f4683>>o3l3:17d;>:188k41e2900qo52:k73?6=3`>o6=44i4394?=h9>h1<75rb32g>5<3290;w)?74;ag?M5e02B8mh5+e181?l202900e9j50;9j14<722e:;o4?::a65e=83>1<7>t$0:7>fb<@:h37E=ne:&f4?4>o293:17b?8b;29?xd58k0;694?:1y'5=2=km1C?o64H2cf?!c72;1b8:4?::k7`?6=3`?:6=44o05a>5<54;294~"60=0hh6F6g;7;29?l2c2900e8?50;9l52d=831vn?>6:187>5<7s-;387mk;I1a<>N4il1/i=4=;h64>5<>i6?k0;66sm21:94?2=83:p(<6;:bf8L6d?3A9ji6*j0;08m11=831b8i4?::k65?6=3f;5;|`142<72=0;6=u+1969ga=O;k20D>oj;%g3>7=n<>0;66g;d;29?l362900c<9m:188yg47>3:187>50z&2<15;h6g>5<8;50;694?6|,82?6nj4H2`;?M5fm2.n<7<4i5594?=n1<729q/=5:5ce9K7g><@:kn7)k?:39j02<722c?h7>5;h72>5<858``>N4j11C?lk4$d296>o3?3:17d:k:188m07=831d=:l50;9~f735290?6=4?{%3;0?ec3A9i46F<6=44i5f94?=n=80;66a>7c83>>{e:<;1<7:50;2x 4>32jn0D>l7;I1ba>"b8380e9950;9j0a<722c>=7>5;n34f?6=3th99=4?:583>5}#91>1oi5G3c:8L6gb3-o;6?5f4683>>o3l3:17d;>:188k41e2900qo<;f;290?6=8r.:494ld:J0f==O;ho0(h>52:k73?6=3`>o6=44i4394?=h9>h1<75rb36f>5<3290;w)?74;ag?M5e02B8mh5+e181?l202900e9j50;9j14<722e:;o4?::a5c5=83>1<7>t$0:7>fb<@:h37E=ne:&f4?4>o293:17b?8b;29?xd6n;0;694?:1y'5=2=km1C?o64H2cf?!c72;1b8:4?::k7`?6=3`?:6=44o05a>5<54;294~"60=0hh6F6g;7;29?l2c2900e8?50;9l52d=831vn5<7s-;387mk;I1a<>N4il1/i=4=;h64>5<>i6?k0;66sm1dd94?2=83:p(<6;:bf8L6d?3A9ji6*j0;08m11=831b8i4?::k65?6=3f;5;|`2a`<72=0;6=u+1969ga=O;k20D>oj;%g3>7=n<>0;66g;d;29?l362900c<9m:188yg7bl3:187>50z&2<15;h6g>5<1<729q/=5:5ce9K7g><@:kn7E:=;%31b?2>k2.n<7<4i5594?=n1<729q/=5:5ce9K7g><@:kn7E:=;%31b?2>k2.n<7<4i5594?=n1<729q/=5:5ce9K7g><@:kn7E:=;%31b?2>k2.n<7<4i5594?=n1<729q/=5:5ce9K7g><@:kn7E:=;%31b?2>k2.n<7<4i5594?=n1<729q/=5:5ce9K7g><@:kn7E:=;%31b?2>k2.n<7<4i5594?=n1<729q/=5:5ce9K7g><@:kn7E:=;%31b?2>k2.n<7<4i5594?=n1<729q/=5:5ce9K7g><@:kn7E:=;%31b?2>k2.n<7<4i5594?=n1<729q/=5:5ce9K7g><@:kn7E:=;%31b?2>k2.n<7<4i5594?=n1<729q/=5:5ce9K7g><@:kn7E:=;%31b?2>k2.n<7<4i5594?=ne083>1<729q/=5:5ce9K7g><@:kn7E:=;%31b?2>k2.n<7<4i5594?=ne183>1<729q/=5:5ce9K7g><@:kn7E:=;%31b?2>k2.n<7<4i5594?=ndg83>1<729q/=5:5ce9K7g><@:kn7E:=;%31b?2>k2.n<7<4i5594?=ndd83>1<729q/=5:5ce9K7g><@:kn7E:=;%31b?2>k2.n<7<4i5594?=nde83>1<729q/=5:5ce9K7g><@:kn7E:=;%31b?2>k2.n<7<4i5594?=ndb83>1<729q/=5:5ce9K7g><@:kn7E:=;%31b?2>k2.n<7<4i5594?=ndc83>1<729q/=5:5ce9K7g><@:kn7E:=;%31b?2>k2.n<7<4i5594?=nd`83>1<729q/=5:5ce9K7g><@:kn7E:=;%31b?2>k2.n<7<4i5594?=nd883>1<729q/=5:5ce9K7g><@:kn7E:=;%31b?2>k2.n<7<4i5594?=nd983>1<729q/=5:5ce9K7g><@:kn7E:=;%31b?2>k2.n<7<4i5594?=nce83>1<729q/=5:5ce9K7g><@:kn7)k?:39j02<722c?h7>5;h72>5<858``>N4j11C?lk4$d296>o3?3:17d:k:188m07=831d=:l50;9~f4ee290?6=4?{%3;0?ec3A9i46F<6=44i5f94?=n=80;66a>7c83>>{e9jk1<7:50;2x 4>32jn0D>l7;I1ba>"b8380e9950;9j0a<722c>=7>5;n34f?6=3th:o44?:583>5}#91>1oi5G3c:8L6gb3-o;6?5f4683>>o3l3:17d;>:188k41e2900qo?l8;290?6=8r.:494ld:J0f==O;ho0(h>52:k73?6=3`>o6=44i4394?=h9>h1<75rb0a4>5<3290;w)?74;ag?M5e02B8mh5+e181?l202900e9j50;9j14<722e:;o4?::a5f0=83>1<7>t$0:7>fb<@:h37E=ne:&f4?4>o293:17b?8b;29?xd6k<0;694?:1y'5=2=km1C?o64H2cf?!c72;1b8:4?::k7`?6=3`?:6=44o05a>5<54;294~"60=0hh6F6g;7;29?l2c2900e8?50;9l52d=831vn?==:187>5<7s-;387mk;I1a<>N4il1/i=4=;h64>5<>i6?k0;66sm22394?2=83:p(<6;:bf8L6d?3A9ji6*j0;08m11=831b8i4?::k65?6=3f;5;|`175<72=0;6=u+1969ga=O;k20D>oj;%g3>7=n<>0;66g;d;29?l362900c<9m:188yg45n3:187>50z&2<15;h6g>5<?j50;694?6|,82?6nj4H2`;?M5fm2.n<7<4i5594?=n1<729q/=5:5ce9K7g><@:kn7)k?:39j02<722c?h7>5;h72>5<858``>N4j11C?lk4$d296>o3?3:17d:k:188m07=831d=:l50;9~f74f290?6=4?{%3;0?ec3A9i46F<6=44i5f94?=n=80;66a>7c83>>{e:m>1<7;50;2x 4>32jo0D>l7;I1ba>"b8380e9950;9j0=<722c?h7>5;h72>5<858`a>N4j11C?lk4$d296>o3?3:17d:7:188m1b=831b9<4?::m23g<722wi>i?50;794?6|,82?6nk4H2`;?M5fm2.n<7<4i5594?=n<10;66g;d;29?l362900c<9m:188yg4c83:197>50z&2<15;h6;>5<>i6?k0;66sm2e094?3=83:p(<6;:bg8L6d?3A9ji6*j0;08m11=831b854?::k7`?6=3`?:6=44o05a>5<55;294~"60=0hi6F6g;7;29?l2?2900e9j50;9j14<722e:;o4?::a6fc=83?1<7>t$0:7>fc<@:h37E=ne:&f4?4>o3l3:17d;>:188k41e2900qo52:k73?6=3`>36=44i5f94?=n=80;66a>7c83>>{e:jh1<7;50;2x 4>32m:0D>l7;I1ba>"b83=0e9950;9j0=<722c>=7>5;h34e?6=3f;5;|`1ga<72<0;6=u+1969g`=O;k20D>oj;%g3>7=n<>0;66g;8;29?l2c2900e8?50;9l52d=831vn?li:180>5<7s-;387=m7:J0f==O;ho0e9o50;9j572=831d=::50;9~f7db29086=4?{%3;0?5e?2B8n55G3`g8m1g=831b=?:50;9l522=831vn?l;:187>5<7s-;387?<0:J0f==O;ho0e9o50;9j17<722c:;i4?::m231<722wi>oj50;194?6|,82?6>l8;I1a<>N4il1b8l4?::k261<722e:;94?::a6g4=83>1<7>t$0:7>4573A9i46F>7>5;h34`?6=3f;<87>5;|`1ff<72:0;6=u+19697g1<@:h37E=ne:k7e?6=3`;987>5;n340?6=3th9n=4?:583>5}#91>1=>>4H2`;?M5fm2c?m7>5;h71>5<5<53;294~"60=08n:5G3c:8L6gb3`>j6=44i007>5<858275=O;k20D>oj;h6b>5<>1<75rb3`b>5<4290;w)?74;1a3>N4j11C?lk4i5c94?=n9;>1<75`16694?=zj;kh6=4;:183!7?<3;8<6F>o6?m0;66a>7583>>{e:k31<7=50;2x 4>32:h<7E=m8:J0e`=n2583>>i6?=0;66sm2`c94?2=83:p(<6;:013?M5e02B8mh5f4`83>>o2:3:17d?8d;29?j70<3:17pl=b983>6<729q/=5:53c58L6d?3A9ji6g;a;29?l75<3:17b?84;29?xd5i10;694?:1y'5=2=9::0D>l7;I1ba>o3i3:17d;=:188m41c2900c<9;:188yg4e?3:1?7>50z&2<1<4j>1C?o64H2cf?l2f2900e<<;:188k4132900qo319K7g><@:kn7d:n:188m04=831b=:j50;9l522=831vn?l9:180>5<7s-;387=m7:J0f==O;ho0e9o50;9j572=831d=::50;9~f7g3290?6=4?{%3;0?7482B8n55G3`g8m1g=831b9?4?::k23a<722e:;94?::a6`>=83?1<7>t$0:7>fc<@:h37E=ne:&f4?4>o3l3:17d;>:188k41e2900qo52:k73?6=3`>36=44i5f94?=n=80;66a>7c83>>{e:l<1<7;50;2x 4>32jo0D>l7;I1ba>"b8380e9950;9j0=<722c?h7>5;h72>5<858`a>N4j11C?lk4$d296>o3?3:17d:7:188m1b=831b9<4?::m23g<722wi>h:50;794?6|,82?6nk4H2`;?M5fm2.n<7<4i5594?=n<10;66g;d;29?l362900c<9m:188yg4b;3:197>50z&2<15;h6;>5<>i6?k0;66sm2d094?3=83:p(<6;:bg8L6d?3A9ji6*j0;08m11=831b854?::k7`?6=3`?:6=44o05a>5<55;294~"60=0hi6F6g;7;29?l2?2900e9j50;9j14<722e:;o4?::a6`6=83?1<7>t$0:7>fc<@:h37E=ne:&f4?4>o3l3:17d;>:188k41e2900qo52:k73?6=3`>36=44i5f94?=n=80;66a>7c83>>{e:?31<7:50;2x 4>32jl0D>l7;I1ba>"b83=0e9950;9j14<722c:;l4?::m23g<722wi>;o50;694?6|,82?6nh4H2`;?M5fm2.n<794i5594?=n=80;66g>7`83>>i6?k0;66sm27:94?2=83:p(<6;:bf8L6d?3A9ji6*j0;08m11=831b8i4?::k65?6=3f;5;|`122<72=0;6=u+1969ga=O;k20D>oj;%g3>7=n<>0;66g;d;29?l362900c<9m:188yg53i3:197>50z&2<15;h6;>5<>i6?k0;66sm35;94?3=83:p(<6;:bg8L6d?3A9ji6*j0;08m11=831b854?::k7`?6=3`?:6=44o05a>5<55;294~"60=0hi6F6g;7;29?l2?2900e9j50;9j14<722e:;o4?::a711=83?1<7>t$0:7>fc<@:h37E=ne:&f4?4>o3l3:17d;>:188k41e2900qo=;6;291?6=8r.:494le:J0f==O;ho0(h>52:k73?6=3`>36=44i5f94?=n=80;66a>7c83>>{e;=?1<7;50;2x 4>32jo0D>l7;I1ba>"b8380e9950;9j0=<722c?h7>5;h72>5<858g4>N4j11C?lk4$d293>o3?3:17d:7:188m07=831b=:o50;9l52d=831vn>:=:186>5<7s-;387mj;I1a<>N4il1/i=4=;h64>5<>o293:17b?8b;29?xd4<=0;684?:1y'5=2=kl1C?o64H2cf?!c72;1b8:4?::k7o6=44i4394?=h9>h1<75rb214>5<4290;w)?74;1a3>N4j11C?lk4i5c94?=n9;>1<75`16694?=zj:9=6=4<:183!7?<39i;6F>1<75rb20g>5<3290;w)?74;304>N4j11C?lk4i5c94?=n=;0;66g>7e83>>i6?=0;66sm32794?5=83:p(<6;:2`4?M5e02B8mh5f4`83>>o6:=0;66a>7583>>{e;;h1<7:50;2x 4>3289;7E=m8:J0e`=n4?:1y'5=2=;k=0D>l7;I1ba>o3i3:17d?=4;29?j70<3:17pl<2883>1<729q/=5:51228L6d?3A9ji6g;a;29?l352900e<9k:188k4132900qo=<3;297?6=8r.:494<@:kn7d:n:188m4432900c<9;:188yg55?3:187>50z&2<1<6;91C?o64H2cf?l2f2900e8<50;9j52b=831d=::50;9~f65529086=4?{%3;0?5e?2B8n55G3`g8m1g=831b=?:50;9l522=831vn><::187>5<7s-;387?<0:J0f==O;ho0e9o50;9j17<722c:;i4?::m231<722wi?>?50;194?6|,82?6>l8;I1a<>N4il1b8l4?::k261<722e:;94?::a775=83>1<7>t$0:7>4573A9i46F>7>5;h34`?6=3f;<87>5;|`075<72:0;6=u+19697g1<@:h37E=ne:k7e?6=3`;987>5;n340?6=3th8><4?:583>5}#91>1=>>4H2`;?M5fm2c?m7>5;h71>5<5<53;294~"60=08n:5G3c:8L6gb3`>j6=44i007>5<858275=O;k20D>oj;h6b>5<>1<75rb275>5<2290;w)?74;af?M5e02B8mh5+e181?l202900e9650;9j0a<722c>=7>5;n34f?6=3th8994?:483>5}#91>1h=5G3c:8L6gb3-o;6:5f4683>>o303:17d;>:188m41f2900c<9m:188yg52=3:197>50z&2<15;h6;>5<>i6?k0;66sm34594?3=83:p(<6;:bg8L6d?3A9ji6*j0;08m11=831b854?::k7`?6=3`?:6=44o05a>5<47>55;294~"60=0hi6F6g;7;29?l2?2900e9j50;9j14<722e:;o4?::a70?=83?1<7>t$0:7>fc<@:h37E=ne:&f4?4>o3l3:17d;>:188k41e2900qo=:a;291?6=8r.:494le:J0f==O;ho0(h>52:k73?6=3`>36=44i5f94?=n=80;66a>7c83>>{e;32jo0D>l7;I1ba>"b8380e9950;9j0=<722c?h7>5;h72>5<858`a>N4j11C?lk4$d296>o3?3:17d:7:188m1b=831b9<4?::m23g<722wi?;k50;794?6|,82?6nk4H2`;?M5fm2.n<7<4i5594?=n<10;66g;d;29?l362900c<9m:188yg51l3:197>50z&2<15;h6;>5<>i6?k0;66sm37a94?3=83:p(<6;:bg8L6d?3A9ji6*j0;08m11=831b854?::k7`?6=3`?:6=44o05a>5<55;294~"60=0hi6F6g;7;29?l2?2900e9j50;9j14<722e:;o4?::a73g=83?1<7>t$0:7>fc<@:h37E=ne:&f4?4>o3l3:17d;>:188k41e2900qo=99;291?6=8r.:494le:J0f==O;ho0(h>52:k73?6=3`>36=44i5f94?=n=80;66a>7c83>>{e;?21<7;50;2x 4>32jo0D>l7;I1ba>"b8380e9950;9j0=<722c?h7>5;h72>5<858`a>N4j11C?lk4$d296>o3?3:17d:7:188m1b=831b9<4?::m23g<722wi?;850;794?6|,82?6nk4H2`;?M5fm2.n<7<4i5594?=n<10;66g;d;29?l362900c<9m:188yg5003:197>50z&2<15;h6;>5<>i6?k0;66sm36594?3=83:p(<6;:bg8L6d?3A9ji6*j0;08m11=831b854?::k7`?6=3`?:6=44o05a>5<55;294~"60=0hi6F6g;7;29?l2?2900e9j50;9j14<722e:;o4?::a723=83?1<7>t$0:7>fc<@:h37E=ne:&f4?4>o3l3:17d;>:188k41e2900qo=84;291?6=8r.:494le:J0f==O;ho0(h>52:k73?6=3`>36=44i5f94?=n=80;66a>7c83>>{e;>91<7;50;2x 4>32jo0D>l7;I1ba>"b8380e9950;9j0=<722c?h7>5;h72>5<858`a>N4j11C?lk4$d296>o3?3:17d:7:188m1b=831b9<4?::m23g<722wi?:?50;794?6|,82?6nk4H2`;?M5fm2.n<7<4i5594?=n<10;66g;d;29?l362900c<9m:188yg5?83:197>50z&2<15;h6;>5<>i6?k0;66sm36d94?3=83:p(<6;:bg8L6d?3A9ji6*j0;08m11=831b854?::k7`?6=3`?:6=44o05a>5<55;294~"60=0hi6F6g;7;29?l2?2900e9j50;9j14<722e:;o4?::a72b=83?1<7>t$0:7>fc<@:h37E=ne:&f4?4>o3l3:17d;>:188k41e2900qo=8c;291?6=8r.:494le:J0f==O;ho0(h>52:k73?6=3`>36=44i5f94?=n=80;66a>7c83>>{e;>h1<7;50;2x 4>32jo0D>l7;I1ba>"b8380e9950;9j0=<722c?h7>5;h72>5<858`a>N4j11C?lk4$d296>o3?3:17d:7:188m1b=831b9<4?::m23g<722wi?:750;794?6|,82?6nk4H2`;?M5fm2.n<7<4i5594?=n<10;66g;d;29?l362900c<9m:188yg5083:197>50z&2<15;h6;>5<>i6?k0;66sm37d94?3=83:p(<6;:bg8L6d?3A9ji6*j0;08m11=831b854?::k7`?6=3`?:6=44o05a>5<53;294~"60=0:>45G3c:8L6gb3-o;67583>>{e;0n1<7=50;2x 4>328827E=m8:J0e`=#m90:m6gk4;29?lb22900c<9;:188yg4683:1?7>50z&2<1<6:01C?o64H2cf?!c728o0ei:50;9j`0<722e:;94?::a5d?=8391<7>t$0:7>44>3A9i46F5;hf6>5<85826<=O;k20D>oj;%g3>4c1<75fd483>>i6?=0;66sm18694?5=83:p(<6;:00:?M5e02B8mh5+e182a>oc<3:17dj::188k4132900qo?63;297?6=8r.:494>289K7g><@:kn7)k?:0g8ma2=831bh84?::m231<722wi=4<50;194?6|,82?6<<6;I1a<>N4il1/i=4>e:kg0?6=3`n>6=44o057>5<53;294~"60=0:>45G3c:8L6gb3-o;67583>>{e90:1<7=50;2x 4>328827E=m8:J0e`=#m90:i6gk4;29?lb22900c<9;:188yg7?n3:1?7>50z&2<1<6:01C?o64H2cf?!c728o0ei:50;9j`0<722e:;94?::a5=c=8391<7>t$0:7>44>3A9i46F5;hf6>5<85826<=O;k20D>oj;%g3>4c1<75fd483>>i6?=0;66sm19a94?5=83:p(<6;:00:?M5e02B8mh5+e182a>oc<3:17dj::188k4132900qo?7b;297?6=8r.:494>289K7g><@:kn7)k?:0g8ma2=831bh84?::m231<722wi=5o50;194?6|,82?6<<6;I1a<>N4il1/i=4>e:kg0?6=3`n>6=44o057>5<53;294~"60=0:>45G3c:8L6gb3-o;67583>>{e9121<7=50;2x 4>328827E=m8:J0e`=#m90:i6gk4;29?lb22900c<9;:188yg7??3:1?7>50z&2<1<6:01C?o64H2cf?!c728o0ei:50;9j`0<722e:;94?::a5=0=8391<7>t$0:7>44>3A9i46F5;hf6>5<85826<=O;k20D>oj;%g3>4c1<75fd483>>i6?=0;66sm27194?2=83:p(<6;:00a?M5e02B8mh5+e1870>oc<3:17dj::188ma0=831d=::50;9~f775290?6=4?{%3;0?75j2B8n55G3`g8 `6=:<1bh94?::kg1?6=3`n=6=44o057>5<54;294~"60=0:>o5G3c:8L6gb3-o;6?;4ie694?=nl<0;66gk6;29?j70<3:17pl=6583>0<729q/=5:513f8L6d?3A9ji6*j0;3g?lb32900ei;50;9j`3<722co;7>5;n340?6=3th9=94?:483>5}#91>1=?j4H2`;?M5fm2.n<75<>oc?3:17b?84;29?xd6im0;684?:1y'5=2=9;n0D>l7;I1ba>"b838;7dj;:188ma3=831bh;4?::kg3?6=3f;<87>5;|`12f<72<0;6=u+196957b<@:h37E=ne:&f4?453`n?6=44ie794?=nl?0;66gk7;29?j70<3:17pl<1483>6<729q/=5:513;8L6d?3A9ji6*j0;32?lb32900ei;50;9l522=831vn?8=:187>5<7s-;387?=b:J0f==O;ho0(h>5429j`1<722co97>5;hf5>5<85826<=O;k20D>oj;%g3>4c1<75fd483>>i6?=0;66sm1`d94?5=83:p(<6;:00:?M5e02B8mh5+e182a>oc<3:17dj::188k4132900qo<>8;290?6=8r.:494>2c9K7g><@:kn7)k?:378ma2=831bh84?::kg2?6=3f;<87>5;|`2f4<72=0;6=u+196957d<@:h37E=ne:&f4?423`n?6=44ie794?=nl?0;66a>7583>>{e:8k1<7;50;2x 4>3288o7E=m8:J0e`=#m909<6gk4;29?lb22900ei850;9j`2<722e:;94?::a5g5=83?1<7>t$0:7>44c3A9i46F5;hf6>5<>i6?=0;66sm38794?5=83:p(<6;:00:?M5e02B8mh5+e18`3>oc<3:17dj::188k4132900qo=?e;297?6=8r.:494>289K7g><@:kn7)k?:318ma2=831bh84?::m231<722wi>kl50;194?6|,82?6<<6;I1a<>N4il1/i=4=3:kg0?6=3`n>6=44o057>5<55;294~"60=0:>i5G3c:8L6gb3-o;6??4ie694?=nl<0;66gk6;29?lb02900c<9;:188yg4?93:197>50z&2<1<6:m1C?o64H2cf?!c72;;0ei:50;9j`0<722co:7>5;hf4>5<85826a=O;k20D>oj;%g3>771<75fd483>>oc>3:17dj8:188k4132900qo2e9K7g><@:kn7)k?:368ma2=831bh84?::kg2?6=3`n<6=44o057>5<55;294~"60=0:>i5G3c:8L6gb3-o;6??4ie694?=nl<0;66gk6;29?lb02900c<9;:188yg4?83:197>50z&2<1<6:m1C?o64H2cf?!c72;;0ei:50;9j`0<722co:7>5;hf4>5<85826a=O;k20D>oj;%g3>771<75fd483>>oc>3:17dj8:188k4132900qo2e9K7g><@:kn7)k?:368ma2=831bh84?::kg2?6=3`n<6=44o057>5<7>55;294~"60=0:>i5G3c:8L6gb3-o;6??4ie694?=nl<0;66gk6;29?lb02900c<9;:188yg40n3:197>50z&2<1<6:m1C?o64H2cf?!c72;;0ei:50;9j`0<722co:7>5;hf4>5<85826a=O;k20D>oj;%g3>771<75fd483>>oc>3:17dj8:188k4132900qo2e9K7g><@:kn7)k?:368ma2=831bh84?::kg2?6=3`n<6=44o057>5<55;294~"60=0:>i5G3c:8L6gb3-o;6??4ie694?=nl<0;66gk6;29?lb02900c<9;:188yg40m3:197>50z&2<1<6:m1C?o64H2cf?!c72;;0ei:50;9j`0<722co:7>5;hf4>5<85826g=O;k20D>oj;%g3>fd1<75fd483>>oc>3:17b?84;29?xd5190;694?:1y'5=2=9;h0D>l7;I1ba>"b83<0ei:50;9j`0<722co:7>5;n340?6=3th9;i4?:583>5}#91>1=?l4H2`;?M5fm2.n<7?=;hf7>5<>i6?=0;66sm30694?3=83:p(<6;:00g?M5e02B8mh5+e18`e>oc<3:17dj::188ma0=831bh:4?::m231<722wi?=o50;794?6|,82?6<N4il1/i=4=1:kg0?6=3`n>6=44ie494?=nl>0;66a>7583>>{e:o=1<7;50;2x 4>3288o7E=m8:J0e`=#m90986gk4;29?lb22900ei850;9j`2<722e:;94?::a6g3=8381<7>t$0:7>44?3A9i46F5;n340?6=3th9n>4?:383>5}#91>1=?64H2`;?M5fm2.n<7?>;hf7>5<85826==O;k20D>oj;%g3>471<75`16694?=zj;km6=4=:183!7?<3;946F>i6?=0;66sm2`f94?4=83:p(<6;:00;?M5e02B8mh5+e1825>oc<3:17b?84;29?xd5ik0;6?4?:1y'5=2=9;20D>l7;I1ba>"b83;:7dj;:188k4132900qo299K7g><@:kn7)k?:038ma2=831d=::50;9~f7g029096=4?{%3;0?7502B8n55G3`g8 `6=981bh94?::m231<722wi>l;50;094?6|,82?6<<7;I1a<>N4il1/i=4>1:kg0?6=3f;<87>5;|`06`<72;0;6=u+196957><@:h37E=ne:&f4?763`n?6=44o057>5<52;294~"60=0:>55G3c:8L6gb3-o;6>1<75rb20b>5<5290;w)?74;31<>N4j11C?lk4$d2954=nl=0;66a>7583>>{e;;21<7<50;2x 4>328837E=m8:J0e`=#m90:=6gk4;29?j70<3:17pl<2783>7<729q/=5:513:8L6d?3A9ji6*j0;32?lb32900c<9;:188yg55<3:1>7>50z&2<1<6:11C?o64H2cf?!c728;0ei:50;9l522=831vn><=:181>5<7s-;387?=8:J0f==O;ho0(h>5109j`1<722e:;94?::a776=8381<7>t$0:7>44?3A9i46F5;n340?6=3th9o=4?:383>5}#91>1=?64H2`;?M5fm2.n<7?>;hf7>5<85826==O;k20D>oj;%g3>471<75`16694?=zj8h<6=4::183!7?<3;9h6F=5fd583>>oc=3:17dj9:188ma1=831d=::50;9~f4d>290>6=4?{%3;0?75l2B8n55G3`g8 `6=:?1bh94?::kg1?6=3`n=6=44ie594?=h9>>1<75rb33f>5<2290;w)?74;31`>N4j11C?lk4$d2965=nl=0;66gk5;29?lb12900ei950;9l522=831vn?5<7s-;387?=d:J0f==O;ho0(h>5279j`1<722co97>5;hf5>5<5fd583>>oc=3:17dj9:188ma1=831d=::50;9~f6?42903;7>50z&2<1<6?j1C?o64H2cf?_212hq26?95e;35>42=9k0m6<;51682g?{#98l196*>2186?!b?2<1/h44:;%fb>0=#lk0>7)jl:49'`a<23-;3<7=4$0:2>1=#m80>7)k=:49'a6<23-o?685+e486?!c12<1/i:4:;%g;>0=#m00>7)kn:49'ag<23-oh685+ee86?!cb2<1/ik4:;%d3>0=#n80>7)h=:49'b6<23-l?685+f486?!`12<1/j:4:;%d;>0=#n00>7)hn:49'bg<23-lh685+fe86?!`b2<1/jk4:;%334?3<,8::685+11091>"68:0>7)??4;78 4622<1/==855:&242<23-;;47;4$02:>0=#99k196*>0c86?!77k3?0(<>k:49'55c==2.:"69:0>7)?>4;78 4722<1/=<855:&252<23-;:47;4$03:>0=#98k196*>1c86?!76k3?0(7:4$2`7>6d43-nm685f4c83>>o3k3:17dm7:188mf?=831b=5<50;9j5=5=831b?o?50;9j7g4=831b?:4?:%34=?513g;<47>4;h16>5<#9>31?;5a16:95>=n;=0;6)?89;15?k7003807d=<:18'52?=;?1e=:653:9j77<72-;<57=9;o3421965f3183>!70139=7c?88;48?l4a290/=:75379m52>=?21b>h4?:%34=?513g;<4764;h0g>5<#9>31?;5a16:9=>=n<80;6)?89;63?k7003:07d=i:18'52?=<91e=:651:9j7`<72-;<57:?;o3421?65f3b83>!7013>;7c?88;68?l5e290/=:75419m52>==21b?l4?:%34=?273g;<4784;h1:>5<#9>318=5a16:93>=n;10;6)?89;63?k7003207d;n:18'52?==01e=:650:9j1=<72-;<57;6;o3421>65f5783>!7013?27c?88;18?l32290/=:75589m52>=<21b994?:%34=?3>3g;<47;4;h40>5<#9>31945a16:92>=n>;0;6)?89;7:?k7003=07d8>:18'52?==01e=:658:9j25<72-;<57;6;o3421m65f5d83>!7013?27c?88;`8?l3c290/=:75589m52>=k21b9n4?:%34=?3>3g;<47j4;h7a>5<#9>31945a16:9a>=n=:0;6)?89;7:?k7003l07d9k:18'52?=?j1e=:650:9j3g<72-;<579l;o3421>65f7983>!7013=h7c?88;18?l10290/=:757b9m52>=<21b;;4?:%34=?1d3g;<47;4;h56>5<#9>31;n5a16:92>=n?=0;6)?89;5`?k7003=07d9<:18'52?=?j1e=:658:9j37<72-;<579l;o3421m65f7183>!7013=h7c?88;`8?l0b290/=:757b9m52>=k21b:i4?:%34=?1d3g;<47j4;h4`>5<#9>31;n5a16:9a>=n>k0;6)?89;5`?k7003l07d8n:18'52?=?j1e=:651198m3?=83.:;448c:l23=<6921b:54?:%34=?1d3g;<47?=;:k53?6=,8=26:m4n05;>45<3`<=6=4+16;93f=i9>21=954i7794?"6?0079821>=n0=0;6)?89;5`?k7003;=76g73;29 41>2>i0b<97:058?l>5290/=:757b9m52>=9110e5?50;&23<<0k2d:;54>9:9j<5<72-;<579l;o345$05:>2e5<#9>31;n5a16:95f=
k1<7*>7884g>h6?10:h65f6g83>!7013=h7c?88;3f?>o1<3:1(<96:6a8j41?28l07d68:18'52?=0?1e=:650:9j<0<72-;<5769;o3421<65f8`83>!70132i7c?88;38?l>>290/=:758c9m52>=:21b454?:%34=?>e3g;<47=4;n;7>5<#9>315>5a16:94>=h1;0;6)?89;;0?k7003;07b7>:18'52?=1:1e=:652:9l=5<72-;<577<;o3421865`8d83>!7013387c?88;78?j?c290/=:75929m52>=>21d5n4?:%34=??43g;<4794;n;a>5<#9>315>5a16:9<>=h1h0;6)?89;;0?k7003307b76:18'52?=1:1e=:65a:9l==<72-;<577<;o3421o65`9783>!7013387c?88;f8?j?2290/=:75929m52>=m21d4i4?:%34=??43g;<47h4;na2>5<#9>31o=5a16:94>=hjo0;6)?89;a3?k7003;07bl8:18'52?=j?1e=:650:9lf0<72-;<57l9;o3421>65`b383>!7013h=7c?88;18?jd6290/=:75b79m52>=<21dn=4?:%34=?d13g;<47;4;nce>5<#9>31n;5a16:92>=hil0;6)?89;`5?k7003=07bok:18'52?=j?1e=:658:9lef<72-;<57l9;o3421m65`a`83>!7013h=7c?88;`8?jg?290/=:75b79m52>=k21dm:4?:%34=?d13g;<47j4;nc5>5<#9>31n;5a16:9a>=hi<0;6)?89;`5?k7003l07bo;:18'52?=j?1e=:651198kd5=83.:;44m6:l23=<6921dm?4?:%34=?d13g;<47?=;:mb5?6=,8=26o84n05;>45<3fk;6=4+16;9f3=i9>21=954o8d94?"6?00i:6`>79821>=hjl0;6)?89;`5?k7003;=76amd;29 41>2k<0b<97:058?jdd290/=:75b79m52>=9110col50;&23<2d:;54>9:9lfd<72-;<57l9;o345$05:>g05<#9>31n;5a16:95f=1<7*>788a2>h6?10:h65`a883>!7013h=7c?88;3f?>i>m3:1(<96:c48j41?28l07bm9:18'52?=k<1e=:650:9lg1<72-;<57m:;o3421>65`c383>!7013i>7c?88;18?xd5=o0;684?:1y'5=2=9;o0D>l7;I1ba>"b83;87dj;:188ma3=831bh;4?::kg3?6=3f;997>5;|`2f0<72:0;6=u+196957g<@:h37E=ne:&f4?7b3`n?6=44ie794?=h9;?1<75rb0`5>5<3290;w)?74;31g>N4j11C?lk4$d295c=nl=0;66gk5;29?lb12900c<<::188yg46k3:1?7>50z&2<1<6:h1C?o64H2cf?!c728o0ei:50;9j`0<722e:>84?::a64b=83>1<7>t$0:7>44d3A9i46F5;hf6>5<5fd583>>oc=3:17dj9:188ma1=831d=?;50;9~w1?02903wS:67:?126ml;_1`f>X4kh1U?n74^2a;?[5d?2T8o;5Q3b78Z1g>3W>j46P;a69]0d07S:n4:\7e6=Y;_6:0>X31:1U84<4^5;2?[2>82T?4k5Q49g8Z1>c3W>3o6P;8c9>7g?=l;16?l:5509>77d4==816?l?5509>7de==816?ll5509>621==;16>:85539>623==;16>::5539>625==;16>5o5539>6=?==;16>565539>6=1==;16>585539>6c7==;16>k>5539>6``==;16>hk5539>6`b==;16?=:5539>755==;16?=<5539>757==;16?=>5539>6g2==;16>o<5539>6g6==;16>lk5539>6de==;16>lo5539>6d>==;16>l85539>6d2==;16??j5539>77d==;16??75539>771==;16??;5539>775==;16???5539>74`==;16?4=5191896?42:h:70=63;7b?85>;3?370=63;74?85>;3?=70=63;76?85>;3??70=63;40?85>;3<970=63;42?85>;3<;70=63;7e?85>;3?n70=63;7g?85>;3?h70=63;7a?85>;3?870=63;:4?85>;32>7p};9883>6}Y<0301>o;:05b?85>13;{t4;f7?xu30h0;686t^5:b?85>j3><70=6a;64?85>13><70=n3;64?85f:3><70=n1;64?84>?3><70<70<70<70<703><70<:5;64?842<3><70<:3;64?842:3><70<:1;64?84283><70<;f;64?843m3><70<;4;64?843;3><70<;2;64?84393><70<;0;64?844n3><70<<70<<70?lc;64?87dj3><70?la;64?87d13><70?l8;64?87d?3><70?l6;64?87d=3><70?l4;64?84c<3><70<70<70<70<70<703><70<70<70<70<70<9a;64?84103><70<97;64?85003><70=87;64?850>3><70=85;64?850<3><70=83;64?850:3><70=81;64?85?83><70=8f;64?850m3><70=8d;64?850k3><70=8b;64?850i3><70=89;64?85083><70=9f;64?85>;3>i7p};4483>7}Y<=?01>?=:05a?xu3i90;697t^5c3?85f>3><70=n4;64?85f=3><70=nc;64?85fj3><70=>2;64?85693><70?n7;64?87f>3><70?n5;64?87f<3><70?n3;64?87f:3><70?n1;64?87f83><70?6f;64?87a;3><70?i2;64?87a93><70?i0;64?87bn3><70?je;64?87bl3><70?jc;64?87bj3><70?j1;64?87b83><70?kf;64?87cm3><70?kd;64?87ck3><70?kb;64?87ci3><70?k9;64?87c03><70<<2;64?84493><70<<0;64?845n3><70<=e;64?845l3><70<=c;64?845j3><70<=a;64?853i3><70=;9;64?85303><70=;7;64?853>3><70=;5;64?853;3><70=;2;64?853<3><70=:6;64?852<3><70=:5;64?852?3><70=:8;64?85213><70=:a;64?852j3><70=:c;64?851m3><70=9d;64?851k3><70=9b;64?851i3><70=99;64?85103><70=97;64?851>3><70=63;6`?xu3;=0;6?uQ4308961?28=i7p};3383>7}Y<;;01>98:05a?xu3;80;6?uQ4328961128=i7p};3183>7}Y<8l01>9::05a?xu3:o0;6?uQ40g8961328=i7p};2d83>7}Y<8n01>9<:05a?xu3:m0;6?uQ40a8961528=i7p};2b83>7}Y<8h01>9>:05a?xu3;m0;6?uQ43c896>728=i7p};3b83>7}Y<;301>9i:05a?xu3;k0;6?uQ43:8961b28=i7p};3`83>7}Y<;=01>9k:05a?xu3;00;6?uQ4348961d28=i7p};3983>7}Y<;?01>9m:05a?xu3;>0;6?uQ4368961f28=i7p};3783>7}Y<;901>96:05a?xu3;<0;6?uQ40c8961728=i7p};2c83>7}Y<8301>8i:05a?xu3980;6?uQ3df896?42130q~:?f;296~X4mj16?4=56`9~w16b2909wS=jb:?0=6<112wx8=j50;0xZ6cf3492?787;|q74f<72;qU?h74=2;0>31;n7>52z\0a==:;091:;5rs52:>5<5sW9n:63<92851>{t<921<7;32?7p};0683>7}Y;l>01>7<:918yv27>3:1>vP7<5=011v9>::181[5b:2785>472:p052=838pR>k>;<1:7?>63ty?<>4?:3y]7`6<5:3865>4}r636?6=:rT8hk5238193c=z{=::6=4={_1ga>;41:02d52z\0`3=:;091;45rs2d;>5<5sW9o963<9284<>{t;o=1<7;3=<7p}7}Y;m901>7<:648yv5a=3:1>vP7<5=?<1v9?7:181[5a;2785>484:p041=838pR>h=;<1:7?>f3ty?=;4?:3y]7c7<5:386:=4}r621?6=:rT8j=52381937=z{=;?6=4={_1fb>;41:0<=6s|40194?4|V:on70=63;53?xu39;0;6?uQ3d5896?42?o0q~:?a;296~X4lj16?4=56e9~w6`a2909wS=k1:?0=6<1k2wx?k:50;0xZ6b73492?78m;|q276<72hq6?oo5164897142=k01?69:5c897cc2=k01>>?:5c897d12=k01?o;:5c8964a2=k01>?i:5c896?42j30q~=6a;297~;41k0>=63<9`823g=:;031855rs2;a>5<5s492n7?8b:?0=ao;:5:896g228=i7p}7}:;h<1=:l4=2c;>a253z?0=d<29278544>7c9>7o;:18085f<3;;4i10o96s|38a94?2|5:k86<9n;<1b6?70i278m<4>7`9>7>0q~=n0;295d}:;h91=:l4=3;4>41f348o87:k;<0g7?2c348o=7:k;<0g4?2c348o>7:k;<0`b?2c348hi7:k;<0`g?2c348hn7?8a:?1ga<3l279i54;d:?1a2<3l279i;4;d:?1a0<3l279i94;d:?1a6<3l279i?4;d:?1a4<3l279i=4;d:?1`c<3l279:44>7`9>63g=9>k01?87:5f897002=n0q~=6f;2963}:;h81=:l4=32f>1b<5;:o69j4=32`>1b<5;:i69j4=32b>1b<5;:269j4=32;>1b<5;:<69j4=325>1b<5;?=69j4=376>1b<5;??69j4=370>1b<5;?969j4=372>1b<5;?;69j4=36e>1b<5;>n69j4=367>1b<5;>869j4=361>1b<5;>:69j4=363>1b<5;9m69j4=31f>1b<5;9o69j4=31`>1b<58io69j4=0a`>1b<58ii69j4=0ab>1b<58i269j4=0a;>1b<58i<69j4=0a5>1b<58i>69j4=0a7>1b514y>7d7=9>h01>97:5f896102=n01>99:5f896122=n01>9;:5f896142=n01>9=:5f896162=n01>6?:5f8961a2=n01>9j:5f8961c2=n01>9l:5f8961e2=n01>9n:5f8961>2=n01>9?:5f8960a2=n01>7::e6896?428297p}6}:;hi1=:o4=2ca>41f349j47?84:p7dg=83;nw0=nc;34f>;49;0?h63<1087`>;4;4<10?h63<4687`>;4;4<:0:;l5235090a=:;=>18i5234490a=:;<>1=:o4=276>1b<5:?<69j4=27;>1b<5:?269j4=27b>1b<5:?i69j4=27`>1b<5:1b<5:1b<5:1b<5:<369j4=244>1b<5:<=69j4}r1b=?6=:?q6?ll516`894g02=n01:5f894`72=n012=n01:5f897572=n01?0>=63=988231=z{;3<6=4:{<0:3?70j279:94k4:?124?>:438967328=?7p}<1083>6}:;8;1=:l4=236>a3<5:;?6i;4}r046?6=:r79;:4;a:?133<6?=1v?9l:181840?3;6=4={<043?70<279544k6:p627=838p1?99:5c8971228=?7p}=7c83>7}::><1=:j4=3:3>4133ty9;=4?:3y>623=::51668yv40i3:1>v3=74823a=::>l1=::4}r05b?6=:r79;94;a:?136<6?=1v?96:181840<3;759~w7>22909w0<7a;6b?84?13;<86s|29d94?4|5;2j6<9k;<0:0?70<2wx>4850;0x97>f28=?70<69;f6?xu50=0;6?u229;90d=::121=::4}r0;a?6=:r79444>7e9>6<5=9>>0q~<73;296~;5010?m63=868231=z{;2o6=4={<0;759~w7>52909w0<77;6b?84?>3;<86s|29a94?4|5;2<6<9k;<0:5?70<2wx>5l50;0x97>128=o70<60;340>{t:li1<71g<5;l;6<9;;|q1b3<72;q6>k?516f897`e28=?7p}<0g83>7}::o;1=::4=237>a052z?1b5<3i279ik4>759~w7`22909w0;5nh0:;95rs3gb>5<5s48nj7:n;<0fa?70<2wx>k:50;0x97ca28=o70{t:l31<71g<5;oo6<9;;|q1b6<72;q6>hk516f897`?28=?7p}=f383>7}::ln1=:j4=3d4>4133ty9jk4?:3y>752=v3<05823a=:;9o1=::4}r124?6=:r78<94>759>742=l>1v?hj:181857;3>j70=?2;340>{t;921<741c349;h7?84:p6cb=838p1>>=:5c8966628=?7p}<0683>7}:;981=:j4=22`>4133ty9jn4?:3y>757=51668yv57>3:1>v3<00823a=:;9h1=::4}r131?6=:r78<=4>7e9>75g=9>>0q~?ja;291~;6i>0>=63>f2823g=:9h31h8521``9`1=:9hn1h:5rs0;f>5<4s4;j;7?8b:?04`=838p128=?7p}>9e83>6}:9h<1=:l4=22g>a3<5;lj6i;4}r3be?6=:r7:m84:1:?2eg<6?=1v<7l:18087f=3;;5nh0o;6s|1`a94?1|58k?68?4=0cg>41334;jj7j:;<3a5?b134;i?7j8;<3a3?b034;i57j8;|q2=g<72:q6=l:516`8966d2m?01?h6:e78yv7fm3:1>v3>a2865>;6io0:;95rs0;b>5<4s4;j?7?8b:?04f9883>6}:9h81=:l4=22a>a3<5;l36i;4}r3a6?6=:r7:m<4:1:?2f6<6?=1v<77:18087f93;;5n10o;6s|1c694?4|58k;68?4=0`4>4133ty:5:4?:2y>5d6=9>h01>>n:e7897`02m?0q~?m8;296~;61o0>=63>b88231=z{83=6=4<{<3:b?70j2789j50;7x976b2<;01?;9:05a?84683n>70<>2;f7?846<3n<7p}=0483>6}::9o1=:l4=3;7>a3<5;2:6i;4}r03b?6=:r79;:180847l3;;5080o86s|20394?4|5;:h68?4=331>4133ty9<>4?:2y>65e=9>h01?7<:e7897>72m?0q~<>3;293~;58k0>=63=158231=::8<1h85220:9`3=::8k1h:5220g9`2=::;:1h:5rs321>5<4s48;n7?8b:?1=6n:438977128=?7p}=0083>6}::9k1=:l4=3;1>a3<5;=m6i;4}r023?6=:r79<44:1:?15=<6?=1v?>?:18084713;;5?o0o86s|20;94?4|5;:368?4=33b>4133ty:jk4?:2y>65>=9>h01?7>:e78971b2m?0q~<>b;296~;58>0>=63=1d8231=z{8ln6=4<{<033?70j2795<4k4:?13`u2214952d<5;3;6i:4=35g>a252z?113<29279894>7c9~w75f2909w0<:5;72?843;3;6<9m;<024?b3348:>7j:;<020?b13ty9?44?:3y>602==816>9<516`8yv43j3:1?v3=55823g=::881h;522069`0=z{;936=4={<067?36348?=7?8b:p61g=838p1?;<:05a?846<3n?7p}=3683>7}::<819<52252952d56z?117<6?k16><85d59>64>=l<16>64c=l<16>?>5d49~w7512909w0<:1;72?844n3;8>5509>66c=9>h0q~<;7;290~;5=90:;o5220c9`1=::8i1h95220f9`1=z{;9?6=4={<07b?363488h7?8b:p610=839p1?:i:05a?846k3n>70<>d;f6?xu5;:0;6?u225g914=:::i1=:l4}r071?6=:r798h4>7c9>64b=l?1v{t9m<1<707<58o;6<9m;|q2a<<72=q6=k<516`894g>2m>01=63>dg823g=z{8o36=4<{<3e5?70j27:mo4k6:?2ea0;6?u21g2952d<58ko6i:4}r3g7?6=:r7:ik4:1:?2`a<6?k1vag8g0>;6j80o963>b28g2>;6j>0o963>b88g1>{t9m81<707<58nh6<9m;|q2a0<720101v3>ee865>;6lk0:;o5rs0g7>5<3s4;nh7?8b:?2f650;0x94cd2<;01u21da952d<58h>6i;4=0`5>a352z?2ag<2927:h44>7c9~w4c52909w0?jb;34f>;6j?0o:6s|23;94?4|5;>?68?4=311>41e3ty9>54?:3y>615==816>>?516`8yv45?3:1>v3=43865>;5;90:;o5rs305>5<5s48?=7;>;<01b?70j2wx>?;50;0x97272<;01?{t:;;1<707<5;8j6<9m;|q2g6<72;q6=h?5509>5fb=9>h0q~?l2;296~;6m90>=63>cb823g=z{8i:6=4={<3gb?3634;hn7?8b:p5f6=838p1bg83>7}:9mn19<521b;952d52z?2`f<2927:o54>7c9~w4dc2909w0?kb;72?87d?3;41e3ty:no4?:3y>5a?==816=n;516`8yv7ei3:1>v3>d9865>;6k=0:;o5rs0af>5<6s4;o47?8b:p6ac=83?p1{t9o=1<707<58236<9;;|q2b=<72;q6=n65509>5=?=9>>0q~?i9;296~;6k>0>=63>8`8231=z{8lj6=4={<3`2?3634;3n7?84:p5cd=838p1d28=?7p}>fb83>7}:9j>19<5219f952254z?177<29278:h4>7c9>5=c=l=16?4=5409~w7302909w0<<1;72?87?m3;<86s|24:94?4|5;9;68?4=0:e>4133ty9944?:3y>67`==816=4>51668yv42i3:1>v3=2d865>;6180:;95rs37a>5<5s489h7;>;<3:6?70<2wx>8m50;0x974d2<;01<7<:057?xu5=m0;6?u223`914=:90>1=::4}r06a?6=:r79>l4:1:?2=0<6?=1v?8?:1821~;5l=0?463=d287<>;5l80?463=d187<>;5l;0?463=cg87<>;5kl0?463=cb87<>;5kk0?463=ce87<>;5m10?463=e687<>;5m?0?463=e487<>;5m=0?463=e287<>;5m;0?463=e087<>;5m90?463=dg87<>;5>80:;95rs3c0>5<5s48o87;>;<0ab?70<2wx>no50;6x97b328=i70<3n<704>7c9>6`1==816>4:5d79>6g3=l=1v?o?:18184c93?:70{t:j=1<7:t=3f2>41e348n97;>;<0:7?b1348i=7j;;|q1=c<72;q6>i>5509>6gd=9>>0q~=83>p1?j=:05a?84b>3?:70<63;f4?84e;3n?7p}=9d83>7}::jl19<522cc952254z?1gc<6?k16>h=5509>6<4=l?16>lj5d59~w7?c2909w06fe==816>o951668yv4d:3:18v3=cb823g=::l:19<522829`0=::h=1h95rs3;b>5<5s48hn7;>;<0a2?70<2wx>n?50;6x97ee28=i7083n=707c9>6`7==816>4?5d79>6d?=l=1v?l;:18184en3>j70{t:j:1<7443348h<7?84:p6g4=839p1?lj:5c897d32=k01?l=:057?xu5j<0;6>u22cg9572<5;h?6<9k;<0a1?70<2wx>o>50;1x97dc2=k01?l=:5c897d728=?7p}=b283>6}::kn1=?:4=3`1>41c348i?7?84:p6dc=839p1?ll:5c897d72=k01?oj:057?xu5j80;6>u22ca9572<5;h;6<9k;<0a5?70<2wx>lm50;1x97de2=k01?oj:5c897gd28=?7p}=ag83>6}::kh1=?:4=3cf>41c348jj7?84:p6dg=839p1?ln:5c897gd2=k01?on:057?xu5im0;6>u22cc9572<5;kh6<9k;<0b`?70<2wx>l650;1x97d>2=k01?on:5c897g?28=?7p}=ac83>6}::k31=?:4=3cb>41c348jn7?84:p6d0=839p1?l7:5c897g?2=k01?o9:057?xu5i00;6>u22c:9572<5;k36<9k;<0b=?70<2wx>l:50;1x97d02=k01?o9:5c897g328=?7p}=a683>6}::k=1=?:4=3c5>41c348j;7?84:p6d3=839p1?l9:007?84f<3;im50;7x97c128=i70?77;f7?87?>3n>70<70;f4?85>;39?7p}=dc83>0}::l?1=:l4=0:;>a2<582<6i;4=3:3>a0<5:386>=4}r0ge?6==r79i94>7c9>5=?=l=16=565d49>62`=l>16?4=5339~w7b>290>w0;60h0o863>888g1>;5?o0o:63<92805>{t:m21<7;t=3g1>41e34;3n7j;;<3;e?b23486`7=9>h01<6l:e6894>e2m?01?9j:e4896?42;l0q~h5rs3f6>5<3s48oj7?8b:?2;l50;1x970>2<;01?8n:438970d28=?7p}=6883>7}::?31=:l4=34`>a252z?12=<29279:94>759~w7012903w0<98;34f>;5>:0o863=658g1>;5>j0o:63=638g2>;5>80o:63=5g8g2>;5>90o:6s|27f94?4|5;<<68?4=340>4133ty9:84?:9y>631=9>h01?8<:e4897032m=01?8l:e7897052m?01?8>:e58973a2m=01?8?:e58yv5>03:1=iu235c90==:;=31855235:90==:;==1855235490==:;=?1855235190==:;=81855235690==:;<<1855234690==:;6d53ty8=h4?:3y>71g==816?>951668yv5393:18v3<4`823g=:;5<5s49?57;>;<102?70<2wx?9>50;6x962>28=i70=:b;72?857l3n<70==e;f7?xu49j0;6?u235:914=:;:?1=::4}r10b?6=7c9>70g==816?=j5d79>77e=l=1v>?m:181853?3?:70=<4;340>{t;:o1<7:t=264>41e349>57;>;<13g?b03499m7j;;|q05d<72;q6?985509>765=9>>0q~=7?84:p76e=83>p1>:::05a?852?3?:70=?b;f4?855>3n?7p}<1683>7}:;=919<52322952254z?006<6?k16?8;5509>75g=l>16??<5d59~w6712909w0=;2;72?855n3;<86s|32;94?2|5:>96<9m;<160?36349;m7j9;<114?b33ty8=54?:3y>712==816?>?51668yv54j3:18v3<45823g=:;<<19<5231`9`3=:;;>1h95rs20g>5<5s498;7:n;<11`?70<2wx?>650;0x9650288?70=<8;340>{t;;h1<7=t=215>1g<5:8o69o4=20a>4133ty8>h4?:2y>760=9;>01>69o4=20a>1g<5:826<9;;|q06f<72:q6?>;51368964e28=o70==c;340>{t;;=1<7=t=217>1g<5:8269o4=204>4133ty8>l4?:2y>762=9;>01><6:05g?855i3;<86s|33794?5|5:9869o4=204>1g<5:8>6<9;;|q06=<72:q6?>=51368964028=o70==8;340>{t;;91<7=t=211>1g<5:8>69o4=200>4133ty8>;4?:2y>764=9;>01><::05g?855>3;<86s|33394?5|5:9:69o4=200>1g<5:8:6<9;;|q061<72:q6?>?51368964428=o70==4;340>{t;8l1<7=t=213>1g<5:8:69o4=23e>4133ty8>?4?:2y>766=9;>01><>:05g?855:3;<86s|33294?5|5:8m6<<;;<12b?70l278>=4>759~w62c2908w0=:6;34f>;4>10>=63=f98g2>{t;=h1<7=t=277>41e349=:7;>;<0e3?b13ty88n4?:2y>703=9>h01>88:43897`02m>0q~=;e;297~;4=>0:;o5237;914=::o21h95rs26e>5<4s49>47?8b:?02d<29279j44k6:p706=839p1>;6:05a?851j3?:70u234c952d<5:a0>7>53z?01g<6?k16?;j5509>6cg=l=1v>;<:180852k3;;5nk0o86s|37694?2|5:4?:5y>73e=9>h01<7?:e6894>a2m?01>7<:2g8yv51:3:18v3<6c823g=:90;1h9521829`0=:;091?i5rs242>5<3s49=m7?8b:?2=750;6x960>28=i70?63;f7?87>:3n>70=63;1a?xu4=o0;69u237:952d<583?6i:4=0;0>a3<5:386>o4}r16a?6=7c9>5<3=l=16=4:5d49>7<5=;01v>;k:180851>3;948g1>;41:0846s|38594?74s49<47:7;<143?2?349<:7:7;<141?2?349<87:7;<147?2?349<>7:7;<145?2?3493<7:7;<14b?2?3497?84:p7=?=838p1>97:43896?42j;0q~=78;296~;4?>0>=63<928:0>{t;1=1<707<5:3864<4}r1;2?6=:r78;84:1:?0=6<>92wx?5;50;0x96132<;01>7<:828yv5?<3:1>v3<72865>;41:03j6s|39194?4|5:=968?4=2;0>=c7>52z?034<292785>46d:p7<4=838p1>6?:43896?420i0q~=61;296~;4?o0>=63<928ab>{t;0:1<707<5:3864l4}r1;b?6=:r78;i4:1:?0=6<>i2wx?5k50;0x961d2<;01>7<:8;8yv5?l3:1>v3<7c865>;41:0246s|39a94?4|5:=j68?4=2;0><152z?03<<292785>466:p7=g=838p1>9?:43896?420?0q~=71;296~;4>o0>=63<928;`>{t:a3<5;<;6<<:;|q0=1<72;q6?4;5166896?42j20q~=66;296~;5100o863=5g8260=z{87p}>6983>7}::8o1h;5220a957352z?165279=i4>249~yv2693:1>vP00<4mm1/?lj517a8yv27n3:1>vP00<4mj1/?lj517f8yv27m3:1>vP00<4mk1/?lj517g8yv27l3:1>vP00<4mh1/?lj517d8yv27k3:1>vP00<4m01/?lj51268yv27j3:1>vP00<4m11/?lj512;8yv2713:1>vP00<4m?1/?lj512a8yv2703:1>vP00<4m<1/?lj51558yv27?3:1>vP00<4m=1/?lj51428yv27>3:1>vP00<4m:1/?lj51438yv27=3:1>vP00<4m;1/?lj51408yv27<3:1>vP00<4m81/?lj51418yv27;3:1>vP00<4m91/?lj51468yv27:3:1>vP00<4lo1/?lj51478yv2793:1>vP00<4ll1/?lj51448yv2783:1>vP00<4lm1/?lj51458yv5am3:1>vP00<4lk1/?lj514:8yv5al3:1>vP00<4lh1/?lj514;8yv5ak3:1>vP00<4l01/?lj514c8yv5aj3:1>vP00<4l11/?lj514`8yv5ai3:1>vP00<4l>1/?lj514a8yv5a13:1>vP00<4l?1/?lj514f8yv5a03:1>vP00<4l<1/?lj514g8yv5a?3:1>vP00<4l=1/?lj514d8yv5a>3:1>vP00<4l:1/?lj51728yv5a=3:1>vP00<4l;1/?lj51738yv2603:1>vP00<4n:1/?lj51708yv26?3:1>vP00<4n;1/?lj51718yv26>3:1>vP00<4n81/?lj51768yv26=3:1>vP00<4n91/?lj51778yv26<3:1>vP00<4mo1/?lj51748yv26;3:1>vP00<4ml1/?lj51758yv26:3:1>vP00<4m>1/?lj517:8yv27i3:1>vP00<4lj1/?lj517;8yv5an3:1>vP00<4l81/?lj517c8yv5a<3:1>vP00<4l91/?lj517`8yv2?i3:1>vP;8`9>00<30h1/?lj51628yv2>?3:1>vP;969>00<31>1/?lj51278yv2>13:1>vP;989>00<3101/?lj51248yv2f83:1>vP;a19>00<3i91/?lj51258yv2fj3:1>vP;ac9>00<3ik1/?lj512:8yv24<3:1>vP;239>00<3:;1/?lj512c8yv24:3:1>vP;209>00<3:81/?lj512`8yv2493:1>vP;219>00<3:91/?lj512f8yv2483:1>vP;1g9>00<39o1/?lj512g8yv25n3:1>vP;1d9>00<39l1/?lj512d8yv25m3:1>vP;1e9>00<39m1/?lj51528yv25l3:1>vP;1b9>00<39j1/?lj51538yv25k3:1>vP;1c9>00<39k1/?lj51508yv24l3:1>vP;2`9>00<3:h1/?lj51518yv24k3:1>vP;289>00<3:01/?lj51568yv24j3:1>vP;299>00<3:11/?lj51578yv24i3:1>vP;269>00<3:>1/?lj51548yv2413:1>vP;279>00<3:?1/?lj515:8yv2403:1>vP;249>00<3:<1/?lj515;8yv24?3:1>vP;259>00<3:=1/?lj515c8yv24>3:1>vP;229>00<3::1/?lj515`8yv24=3:1>vP;1`9>00<39h1/?lj515a8yv25j3:1>vP;189>00<3901/?lj515f8yv24n3:1>vP;3g9>00<3;o1/?lj515g8yv23=3:1>vP;449>00<3<<1/?lj515d8yxh?l=0;6?uG3`g8yk>c=3:1>vFoj;|l;`=<72;qC?lk4}o:g=?6=:rB8mh5rn9fb>5<5sA9ji6sa8e`94?4|@:kn7p`7db83>7}O;ho0qc6kd;296~N4il1vb5jj:181M5fm2we4ih50;0xL6gb3td3i=4?:3yK7dc52zJ0e`=zf1o96=4={I1ba>{i0l91<7b=3:1>vFoj;|l;a=<72;qC?lk4}o:f=?6=:rB8mh5rn9gb>5<5sA9ji6sa8d`94?4|@:kn7p`7eb83>7}O;ho0qc6jd;296~N4il1vb5kj:181M5fm2we4hh50;0xL6gb3td3j=4?:3yK7dc52zJ0e`=zf1l96=4={I1ba>{i0o91<7a=3:1>vFoj;|l;b=<72;qC?lk4}o:e=?6=:rB8mh5rn9db>5<5sA9ji6sa8g`94?4|@:kn7p`7fb83>7}O;ho0qc6id;296~N4il1vb5hj:181M5fm2we4kh50;0xL6gb3td2<=4?:3yK7dc52zJ0e`=zf0:96=4={I1ba>{i1991<78=0;6?uG3`g8yk?7=3:1>vFoj;|l:4=<72;qC?lk4}o;3=?6=:rB8mh5rn82b>5<5sA9ji6sa91`94?4|@:kn7p`60b83>7}O;ho0qc7?d;296~N4il1vb4>j:181M5fm2we5=h50;0xL6gb3td2==4?:3yK7dc51zJ0e`=zf>k<6=4>{I1ba>{i?h21<7?tH2cf?xh0i00;6oj;|l4ea<728qC?lk4}o5ba?6=9rB8mh5rn6ce>5<6sA9ji6sa7c294?7|@:kn7p`8b083>4}O;ho0qc9m2;295~N4il1vb:l<:182M5fm2we;o:50;3xL6gb3td51zJ0e`=zf>h<6=4>{I1ba>{i?k21<7?tH2cf?xh0j00;6oj;|l4fa<728qC?lk4}o5aa?6=9rB8mh5rn6`e>5<6sA9ji6sa7b294?7|@:kn7p`8c083>4}O;ho0qc9l2;295~N4il1vb:m<:182M5fm2we;n:50;3xL6gb3td51zJ0e`=zf>i<6=4>{I1ba>{i?j21<7?tH2cf?xh0k00;6oj;|l4ga<728qC?lk4}o5`a?6=9rB8mh5rn6ae>5<6sA9ji6sa7e294?7|@:kn7p`8d083>4}O;ho0qc9k2;295~N4il1vb:j<:182M5fm2we;i:50;3xL6gb3td51zJ0e`=zf>n<6=4>{I1ba>{i?m21<7?tH2cf?xh0l00;6oj;|l4`a<728qC?lk4}o5ga?6=9rB8mh5rn6fe>5<6sA9ji6sa7d294?7|@:kn7p`8e083>4}O;ho0qc9j2;295~N4il1vb:k<:182M5fm2we;h:50;3xL6gb3td51zJ0e`=zf>o<6=4>{I1ba>{i?l21<7?tH2cf?xh0m00;6oj;|l4aa<728qC?lk4}o5fa?6=9rB8mh5rn6ge>5<6sA9ji6sa7g294?7|@:kn7p`8f083>4}O;ho0qc9i2;295~N4il1vb:h<:182M5fm2we;k:50;3xL6gb3td51zJ0e`=zf>l<6=4>{I1ba>{i?o21<7?tH2cf?xh0n00;6oj;|l4ba<728qC?lk4}o5ea?6=9rB8mh5rn6de>5<6sA9ji6sa81294?7|@:kn7p`70083>4}O;ho0qc6?2;295~N4il1vb5><:182M5fm2we4=:50;3xL6gb3td3<84?:0yK7dc51zJ0e`=zf1:<6=4>{I1ba>{i0921<7?tH2cf?xh?800;67i3:1=vFoj;|l;4a<728qC?lk4}o:3a?6=9rB8mh5rn92e>5<6sA9ji6sa80294?7|@:kn7p`71083>4}O;ho0qc6>2;295~N4il1vb5?<:182M5fm2we4<:50;3xL6gb3td3=84?:0yK7dc51zJ0e`=zf1;<6=4>{I1ba>{i0821<7?tH2cf?xh?900;66i3:1=vFoj;|l;5a<728qC?lk4}o:2a?6=9rB8mh5rn93e>5<6sA9ji6sa83294?7|@:kn7p`72083>4}O;ho0qc6=2;295~N4il1vb5<<:182M5fm2we4?:50;3xL6gb3td3>84?:0yK7dc51zJ0e`=zf18<6=4>{I1ba>{i0;21<7?tH2cf?xh?:00;65i3:1=vFoj;|l;6a<728qC?lk4}o:1a?6=9rB8mh5rn90e>5<6sA9ji6sa82294?7|@:kn7p`73083>4}O;ho0qc6<2;295~N4il1vb5=<:182M5fm2we4>:50;3xL6gb3td3?84?:0yK7dc51zJ0e`=zf19<6=4>{I1ba>{i0:21<7?tH2cf?xh?;00;64i3:1=vFoj;|l;7a<728qC?lk4}o:0a?6=9rB8mh5rn91e>5<6sA9ji6sa85294?7|@:kn7p`74083>4}O;ho0qc6;2;295~N4il1vb5:<:182M5fm2we49:50;3xL6gb3td3884?:0yK7dc51zJ0e`=zf1><6=4>{I1ba>{i0=21<7?tH2cf?xh?<00;63i3:1=vFoj;|l;0a<728qC?lk4}o:7a?6=9rB8mh5rn96e>5<6sA9ji6sa84294?7|@:kn7p`75083>4}O;ho0qc6:2;295~N4il1vb5;<:182M5fm2we48:50;3xL6gb3td3984?:0yK7dc:7>51zJ0e`=zf1?<6=4>{I1ba>{i0<21<7?tH2cf?xh?=00;62i3:1=vFoj;|l;1a<728qC?lk4}o:6a?6=9rB8mh5rn97e>5<6sA9ji6sa87294?7|@:kn7p`76083>4}O;ho0qc692;295~N4il1vb58<:182M5fm2we4;:50;3xL6gb3td3:84?:0yK7dc51zJ0e`=zf1<<6=4>{I1ba>{i0?21<7?tH2cf?xh?>00;61i3:1=vFoj;|l;2a<728qC?lk4}o:5a?6=9rB8mh5rn94e>5<6sA9ji6sa86294?7|@:kn7p`77083>4}O;ho0qc682;295~N4il1vb59<:182M5fm2we4::50;3xL6gb3td3;84?:0yK7dc51zJ0e`=zf1=<6=4>{I1ba>{i0>21<7?tH2cf?xh??00;60i3:1=vFoj;|l;3a<728qC?lk4}o:4a?6=9rB8mh5rn95e>5<6sA9ji6sa89294?7|@:kn7p`78083>4}O;ho0qc672;295~N4il1vb56<:182M5fm2we45:50;3xL6gb3td3484?:0yK7dc51zJ0e`=zf12<6=4>{I1ba>{i0121<7?tH2cf?xh?000;6?i3:1=vFe290:wE=ne:m<=e=83;pD>oj;|l;5<6sA9ji6sa88294?7|@:kn7p`79083>4}O;ho0qc662;295~N4il1vb57<:182M5fm2we44:50;3xL6gb3td3584?:0yK7dc51zJ0e`=zf13<6=4>{I1ba>{i0021<7?tH2cf?xh?100;6>i3:1=vFoj;|l;=a<728qC?lk4}o::a?6=9rB8mh5rn9;e>5<6sA9ji6sa8`294?7|@:kn7p`7a083>4}O;ho0qc6n2;295~N4il1vb5o<:182M5fm2we4l:50;3xL6gb3td3m84?:0yK7dc51zJ0e`=zf1k<6=4>{I1ba>{i0h21<7?tH2cf?xh?i00;6fi3:1=vFoj;|l;ea<728qC?lk4}o:ba?6=9rB8mh5rn9ce>5<6sA9ji6sa8c294?7|@:kn7p`7b083>4}O;ho0qc6m2;295~N4il1vb5l<:182M5fm2we4o:50;3xL6gb3td3n84?:0yK7dc51zJ0e`=zf1h<6=4>{I1ba>{i0k21<7?tH2cf?xh?j00;6ei3:1=vFoj;|l;fa<728qC?lk4}o:aa?6=9rB8mh5rn9`e>5<6sA9ji6sa8b294?7|@:kn7p`7c083>4}O;ho0qc6l2;295~N4il1vb5m<:182M5fm2we4n:50;3xL6gb3td3o84?:0yK7dc51zJ0e`=zf1i<6=4>{I1ba>{i0j21<7?tH2cf?xh?k00;6di3:1=vFoj;|l;ga<728qC?lk4}o:`a?6=9rB8mh5rn9ae>5<6sA9ji6sa8e294?7|@:kn7p`7d083>4}O;ho0qc6k2;295~N4il1vb5j<:182M5fm2wvqpNOCzc4g?b7l==jn5sO@Cy3yEFWstJK +XILINX-XDM V1.6e +$5a540<,[o}e~g`n;"2*726&;$:,)<6;.vnt*Ydo&lbjbQwloz\144;?U9oaeP37vl5=(iof;0<85?0123=>6789:;<=>;0:23456789:;<=>?0123456789:;<=>?0123456789:;<=>?0123456789:;<=>?013856=6&9;87<>5IORVP?GCL[K757>11g924?OIX\^1|ah_dosp|Ys`{oxd1750?05?46=AGZ^X7~}of]fiur~W}byi~fParqfvq:>2949:6??:HLSQQ712@D[YY4KI@>21?699:1::7AZTQWW>AIF48?1<3?;;0:9KPRW]]0ocxz31683:4=5:28:86<<3232?76==:HLSQQ112906?IR\Y__6IAM<2394;753:<1EC^ZT;fjj952294o7>}=012ec131%<;0895;0GD25>2=AGZ^X7JFPC>0>586:2>1CXZ_UU8GKUD;;3:5=68=;7;7?3?>>=138??;;9G;E4=><23;<4<49768=30>9;126D@_UU8B@ATE410;22@D[YY4rne\bpjkW}byi~fPndebp`:?294:4675OTVSQQG502KOH_O30?:8EABUI5;546OKDSC?6;>GCL[K7:364AEFQE91902KOH_O38?c8EABUI531<364AEFQE9?902KOH_L30?:8EABUJ5;546OKDS@?6;>GCL[H7:364AEFQF919i2KOH_L38;2=<>GCL[H743=4AMN:?DU^FJUYIJ=4BT0;?GSTW@DMC<5L2:AF57=D@LI@SAGLEOQF[Q_WM;1HE95LLJC7?FJLJ:1H@_74CNONMQRBL8>0OB\J_FGMAWGSAFDTECH@7:AQADRBL81O>6JL2:FJ2>BNI5:5;6JFA=33:2=CAH6:=394DHC?57803MCJ0<=17:FJE973601OEL2>5;2=3>BNI5;>2;5KI@>2:3=CAH692;5KI@>0:3=CAH6?2;5KI@>6:3=CAH6=2;5KI@>4:3=CAH632;5KI@>::3=CAK6;2:5KIC>24;169GMG:6<7=0HDL314<4?AOE48<5;6JFB=34:2=CAK6:4394DH@?5<813MCI0<08;EKA8769?2NBN1<>>69GMG:5:7=0HDL322<4?AOE4;>5;6JFB=06:2=CAK69:394DH@?62803MCI0?617:FJF94>6?1OEO2=>69GMG:48730HDL33083:2=CAK68=384DH@?7;02:2=CAYH7>374DHRA86<76>1OE]L33?48@JG;87=0HBO311<4?AIF48;5;6J@A=31:2=CGH6:?394DNC?518>3MEJ0<;50?58@JG;9<4=7IAN<0<5?AIF4;4=7IAN<2<5?AIF4=4=7IAN<4<5?AIF4?4=7IAN<6<5?AIF414=7IAN<8<4?AIFW[OL:6J@B=2=3>BHJ5;;2:5KOC>25;169GKG:6=7=0HBL317<4?AIE48=5;6J@B=3;:2=CGK6:5384DN@?5;1=08;EMA8779?2NDN1<=>69GKG:5;7=0HBL325<4?AIE4;?5;6J@B=05:2=CGK69;394DN@?6=803MEI0?716:FLF949?2NDN1=?>89GKG:493:5;6J@B=12:3=CGK682;5KOC>7:3=CGK6>2;5KOC>5:3=CGK6<2;5KOC>;:3=CGK622:5KOC]QAB12:2=CGYH7>374DNRA86<76>1OC]L33?18AKG43LDIn6KA_DA@[WCFLj1NBRKLC^UQMQC53O8?7K6HK3:DGG1=ALJO87KJ_4:DGT@2O7:2C:>6G=2:K0<>OIA]ZT<=64IOKWTZ6602CEEY^P03:8MKOSXV:846GAIUR\41>:8:KMMQVX8?20ECG[P^24=>OIA]Y_MYK8;HLJPZ67?2CEEYQ?169JJLRX8;=0ECG[_114?LHN\V:?;6GAIU]312=NF@^T<;94IOKW[5103@DBXR>77:KMMQY71>1BBDZP0@58MKOSW9H<7D@FT^2@3>OIA]U;H:5FNHV\4@1169JJLRX9;=0ECG[_014?LHN\V;?;6GAIU]212=NF@^T=;94IOKW[4103@DBXR?77:KMMQY61>1BBDZP1@58MKOSW8H<7D@FT^3@3>OIA]U:H:5FNHV\5@1;94IOKW[7103@DBXR<77:KMMQY51>1BBDZP2@58MKOSW;H<7D@FT^0@3>OIA]U9H:5FNHV\6@11BBDZP3@58MKOSW:H<7D@FT^1@3>OIA]U8H:5FNHV\7@1H9;HLJPZG13@DBXRL=;MK1?II13EEJHHJ8;MMDMFGK<2F^X<:4LTV10>JR\:>0@XZ;6:NVP1YC=2GXKB@:;LW[G\eKnffx]i}foo08J42159M54633G;:=95A1007?K76;=1E=<:;;O3211=I98759M54>33G;:5>5A1368J447<2D:><:4N0010>H6::>0B<<;4:L26022618J4533G;8=>5A1518J4343G;=?6@>729M5=5H59:1E>?=4N310?K43;2D99>5A2718J7143G83?6@=929M755;<;O157>H4?:1E?5=4N2;0?K27;2D?=>5A4318J1543G>??6@;529M035H0:2D2j6@M_CWPTLHXX[E[_:5AEUULVN7W63[o0^LCM17]P5=YT;?k0^HOK_GKQWQeTBIMU\EIZG_C38W45<[@GTOBBCIRKLJZEOMJA=7^AZRBG4?VTQIEUJ;6]]V@N\F1=T[[K?7^]]B59W]UC4:2_;#j|i.sd,cf~)keas#@v`r^pg[uhszVmhSua}0123[Wct}e~:??5Z0.eqb+ta'nis"nbdx.O{kwYulVzexQhc^zlv5679VXnxb{1208Q5)`zo$yj"ilx/aoo})JpfxT~iQnup\cfYg{:;6[?/fpe*w`(ojr%oaew/LzlvZtcWyd~Ril_ymq4563W[oxyaz>339V4*aun'xm#jmw.bnh|*Kg{UyhR~ats]dgZ~hz9:;9R\jstnw564<]9%l~k }f.e`|+ekcq%Ftb|Pre]sjqtXojUsc>?07]Qavsk|8997X> gsd-vc)`kq$h`fv Mymq[wbXxg~ySjmPxnp3451XZly~`y?<2:W3+bta&{l$knv!cmi{+H~hzVxoS}`{r^e`[}iu89:3S_k|umv277=R8&myj#|i/fa{*fjlp&GscQxr^rmpwY`kVrd~=>?0^Pfwpjs9:80Y=!hrg,qb*adp'iggu!Bxnp\swYwf}xTknQwos2344YUmzgx<==;T2,cw`)zo%lou lljz,I}iuW~xT|cz}_fa\|jt7898T^h}zlu306>S7'nxm"h gbz-gim'Drd~Ry}_qlwvZadWqey<=><_Sgpqir6;;1^<"i}f/pe+be&jf`t"Cwos]tvZvi|{UloRv`r1230ZTb{|f=><4U1-dvc(un&mht#mcky-N|jtX{U{by|Pgb]{kw678<5Z0.eqb+ta'nis"nbdx.pg[uhszVhbb1?1209V4*aun'xm#jmw.bnh|*tcWyd~Rlfn=0=64=R8&myj#|i/fa{*fjlp&xoS}`{r^`jj959:81^<"i}f/pe+be&jf`t"|k_qlwvZdnf5>5><5Z0.eqb+ta'nis"nbdx.pg[uhszVhbb1;1209V4*aun'xm#jmw.bnh|*tcWyd~Rlfn=4=64=R8&myj#|i/fa{*fjlp&xoS}`{r^`jj919:81^<"i}f/pe+be&jf`t"|k_qlwvZdnf525><5Z0.eqb+ta'nis"nbdx.pg[uhszVhbb171219V4*aun'xm#jmw.bnh|*tcWyd~Rlfn^314>S7'nxm"h gbz-gim'{nT|cz}_ckm[7473\:$kh!rg-dg}(ddbr$~iQnup\flhX;;:0Y=!hrg,qb*adp'iggu!}d^rmpwYeagU?>=5Z0.eqb+ta'nis"nbdx.pg[uhszVhbbR;=0:W3+bta&{l$knv!cmi{+wbXxg~ySoga_703?P6(o{l%~k!hcy,`hn~(zmU{by|Pbhl\376<]9%l~k }f.e`|+ekcq%yhR~ats]amkY?:91^<"i}f/pe+be&jf`t"|k_qlwvZdnfV39:6[?/fpe*w`(ojr%oaew/sf\tkruWkceSua}012362=R8&myj#|i/fa{*fjlp&xoS}`{r^`jjZ~hz9:;<<<9;T2,cw`)zo%lou lljz,vaYwf}xTnd`Pxnp34575?2_;#j|i.sd,cf~)keas#jPpovq[goiWqey<=>>1348Q5)`zo$yj"ilx/aoo})ulVzexQmio]{kw678;8<7X> gsd-vc)`kq$h`fv re]sjqtXj`dTtb|?010263=R8&myj#|i/fa{*fjlp&xoS}`{r^`jjZ~hz9:;??94U1-dvc(un&mht#mcky-q`Zvi|{UiecQwos234645>2_;#j|i.sd,cf~)keas#jPpovq[goiWqey<=>;269V4*aun'xm#jmw.bnh|*tcWyd~Rlfn^zlv567<88=7X> gsd-vc)`kq$h`fv re]sjqtXj`dTtb|?01713>S7'nxm"h gbz-gim'{nT|cz}_ckm[}iu89:>=?84U1-dvc(un&mht#mcky-q`Zvi|{UiecQwos23434?3\:$kh!rg-dg}(ddbr$~iQnup\flhXpfx;<=8>1358Q5)`zo$yj"ilx/aoo})ulVzexQmio]{kw678?89n6[?/fpe*w`(ojr%oaew/sf\tkruWkceSua}0125[gbc8;<0Y=!hrg,qb*adp'iggu!}d^rmpwYeagUsc>?0604?P6(o{l%~k!hcy,`hn~(zmU{by|Pbhl\|jt789=:>=5Z0.eqb+ta'nis"nbdx.pg[uhszVmh0=0=0:W3+bta&{l$knv!cmi{+wbXxg~ySjm31?03?P6(o{l%~k!hcy,`hn~(zmU{by|Pgb>1:76<]9%l~k }f.e`|+ekcq%yhR~ats]dg959:91^<"i}f/pe+be&jf`t"|k_qlwvZad4=49<6[?/fpe*w`(ojr%oaew/sf\tkruWni793328Q5)`zo$yj"ilx/aoo})ulVzexQhc=5=65=R8&myj#|i/fa{*fjlp&xoS}`{r^e`8=8582_;#j|i.sd,cf~)keas#jPpovq[be;17;m7X> gsd-vc)`kq$h`fv re]sjqtXojU;=k5Z0.eqb+ta'nis"nbdx.pg[uhszVmhS;m7X> gsd-vc)`kq$h`fv re]sjqtXojU3=k5Z0.eqb+ta'nis"nbdx.pg[uhszVmhS4<9;T2,cw`)zo%lou lljz,vaYwf}xTknQnssgd8585>2_;#j|i.sd,cf~)keas#jPpovq[beXizxnk1?1279V4*aun'xm#jmw.bnh|*tcWyd~Ril_`qqab:56;<0Y=!hrg,qb*adp'iggu!}d^rmpwY`kVkx~hi33?05?P6(o{l%~k!hcy,`hn~(zmU{by|Pgb]bwwc`4=49:6[?/fpe*w`(ojr%oaew/sf\tkruWniTm~|jg=7=63=R8&myj#|i/fa{*fjlp&xoS}`{r^e`[duumn6=2?84U1-dvc(un&mht#mcky-q`Zvi|{UloRo|rde?3;413\:$kh!rg-dg}(ddbr$~iQnup\cfYf{{ol050=6:W3+bta&{l$knv!cmi{+wbXxg~ySjmParpfc9?9:<1^<"i}f/pe+be&jf`t"|k_qlwvZadWhyyijQ?249V4*aun'xm#jmw.bnh|*tcWyd~Ril_`qqabY6:<1^<"i}f/pe+be&jf`t"|k_qlwvZadWhyyijQ=249V4*aun'xm#jmw.bnh|*tcWyd~Ril_`qqabY4:<1^<"i}f/pe+be&jf`t"|k_qlwvZadWhyyijQ;249V4*aun'xm#jmw.bnh|*tcWyd~Ril_`qqabY2:<1^<"i}f/pe+be&jf`t"|k_qlwvZadWhyyijQ9249V4*aun'xm#jmw.bnh|*tcWyd~Ril_`qqabY0:<1^<"i}f/pe+be&jf`t"|k_qlwvZadWhyyijQ7249V4*aun'xm#jmw.bnh|*tcWyd~Ril_`qqabY>:01^<"i}f/pe+be&jf`t"|k_qlwvZadWhyyijQk1=3=6<=R8&myj#|i/fa{*fjlp&xoS}`{r^e`[duumnUo=1<1289V4*aun'xm#jmw.bnh|*tcWyd~Ril_`qqabYc9595>45Z0.eqb+ta'nis"nbdx.pg[uhszVmhSl}}ef]g5929:01^<"i}f/pe+be&jf`t"|k_qlwvZadWhyyijQk1=7=6<=R8&myj#|i/fa{*fjlp&xoS}`{r^e`[duumnUo=181289V4*aun'xm#jmw.bnh|*tcWyd~Ril_`qqabYc95=5>45Z0.eqb+ta'nis"nbdx.pg[uhszVmhSl}}ef]g59>9:01^<"i}f/pe+be&jf`t"|k_qlwvZadWhyyijQk1=;=6==R8&myj#|i/fa{*fjlp&xoS}`{r^e`[duumnUo=R?=8:W3+bta&{l$knv!cmi{+wbXxg~ySjmParpfcZb6W;837X> gsd-vc)`kq$h`fv re]sjqtXojUjkh_e3\77><]9%l~k }f.e`|+ekcq%yhR~ats]dgZgtzlmTh55Z0.eqb+ta'nis"nbdx.pg[uhszVmhSl}}ef]g5Z?5=2_;#j|i.sd,cf~)keas#jPpovq[beXpfx;<=>=5:W3+bta&{l$knv!cmi{+wbXxg~ySjmPxnp34575=2_;#j|i.sd,cf~)keas#jPpovq[beXpfx;<=<=5:W3+bta&{l$knv!cmi{+wbXxg~ySjmPxnp34555=2_;#j|i.sd,cf~)keas#jPpovq[beXpfx;<=:=5:W3+bta&{l$knv!cmi{+wbXxg~ySjmPxnp34535=2_;#j|i.sd,cf~)keas#jPpovq[beXpfx;<=8=5:W3+bta&{l$knv!cmi{+wbXxg~ySjmPxnp34515=2_;#j|i.sd,cf~)keas#jPpovq[beXpfx;<=6=1:W3+bta&{l$knv!cmi{+rtXxg~ySoga<1<15>S7'nxm"h gbz-gim'~xT|cz}_ckm848592_;#j|i.sd,cf~)keas#z|Ppovq[goi4;49=6[?/fpe*w`(ojr%oaew/vp\tkruWkce0>0=1:W3+bta&{l$knv!cmi{+rtXxg~ySoga<5<15>S7'nxm"h gbz-gim'~xT|cz}_ckm808592_;#j|i.sd,cf~)keas#z|Ppovq[goi4?49=6[?/fpe*w`(ojr%oaew/vp\tkruWkce0:0=1:W3+bta&{l$knv!cmi{+rtXxg~ySoga<9<14>S7'nxm"h gbz-gim'~xT|cz}_ckm[5473\:$kh!rg-dg}(ddbr${Qnup\flhX9;:0Y=!hrg,qb*adp'iggu!xr^rmpwYeagU9>=5Z0.eqb+ta'nis"nbdx.uq[uhszVhbbR==0:W3+bta&{l$knv!cmi{+rtXxg~ySoga_503?P6(o{l%~k!hcy,`hn~({U{by|Pbhl\176<]9%l~k }f.e`|+ekcq%|~R~ats]amkY1:91^<"i}f/pe+be&jf`t"y}_qlwvZdnfV=9<6[?/fpe*w`(ojr%oaew/vp\tkruWkceS5<9;T2,cw`)zo%lou lljz,swYwf}xTnd`Pxnp34565?2_;#j|i.sd,cf~)keas#z|Ppovq[goiWqey<=>?1348Q5)`zo$yj"ilx/aoo})pzVzexQmio]{kw67888<7X> gsd-vc)`kq$h`fv ws]sjqtXj`dTtb|?013263=R8&myj#|i/fa{*fjlp&}yS}`{r^`jjZ~hz9:;>?94U1-dvc(un&mht#mcky-tvZvi|{UiecQwos234775>2_;#j|i.sd,cf~)keas#z|Ppovq[goiWqey<=><269V4*aun'xm#jmw.bnh|*quWyd~Rlfn^zlv567;;8=7X> gsd-vc)`kq$h`fv ws]sjqtXj`dTtb|?01613>S7'nxm"h gbz-gim'~xT|cz}_ckm[}iu89:?=?84U1-dvc(un&mht#mcky-tvZvi|{UiecQwos2340403\:$kh!rg-dg}(ddbr${Qnup\flhXpfx;<=;>279V4*aun'xm#jmw.bnh|*quWyd~Rlfn^zlv567>;20Y=!hrg,qb*adp'iggu!xr^rmpwYeagUsc>?073262=R8&myj#|i/fa{*fjlp&}yS}`{r^`jjZ~hz9:;:?;5Z0.eqb+ta'nis"nbdx.uq[uhszVhbbRv`r123371<]9%l~k }f.e`|+ekcq%|~R~ats]amkYg{:;<:?=0:W3+bta&{l$knv!cmi{+rtXxg~ySjm30?03?P6(o{l%~k!hcy,`hn~({U{by|Pgb>2:76<]9%l~k }f.e`|+ekcq%|~R~ats]dg949:91^<"i}f/pe+be&jf`t"y}_qlwvZad4:49<6[?/fpe*w`(ojr%oaew/vp\tkruWni783328Q5)`zo$yj"ilx/aoo})pzVzexQhc=4=65=R8&myj#|i/fa{*fjlp&}yS}`{r^e`828582_;#j|i.sd,cf~)keas#z|Ppovq[be;07;m7X> gsd-vc)`kq$h`fv ws]sjqtXojU;=k5Z0.eqb+ta'nis"nbdx.uq[uhszVmhS;m7X> gsd-vc)`kq$h`fv ws]sjqtXojU3>;5Z0.eqb+ta'nis"nbdx.uq[uhszVmhSl}}ef>3:70<]9%l~k }f.e`|+ekcq%|~R~ats]dgZgtzlm7=3<9;T2,cw`)zo%lou lljz,swYwf}xTknQnssgd8785>2_;#j|i.sd,cf~)keas#z|Ppovq[beXizxnk1=1279V4*aun'xm#jmw.bnh|*quWyd~Ril_`qqab:36;<0Y=!hrg,qb*adp'iggu!xr^rmpwY`kVkx~hi35?05?P6(o{l%~k!hcy,`hn~({U{by|Pgb]bwwc`4?49:6[?/fpe*w`(ojr%oaew/vp\tkruWniTm~|jg=5=63=R8&myj#|i/fa{*fjlp&}yS}`{r^e`[duumn632?;4U1-dvc(un&mht#mcky-tvZvi|{UloRo|rde\473<]9%l~k }f.e`|+ekcq%|~R~ats]dgZgtzlmT=?;4U1-dvc(un&mht#mcky-tvZvi|{UloRo|rde\673<]9%l~k }f.e`|+ekcq%|~R~ats]dgZgtzlmT??;4U1-dvc(un&mht#mcky-tvZvi|{UloRo|rde\073<]9%l~k }f.e`|+ekcq%|~R~ats]dgZgtzlmT9?;4U1-dvc(un&mht#mcky-tvZvi|{UloRo|rde\273<]9%l~k }f.e`|+ekcq%|~R~ats]dgZgtzlmT;?;4U1-dvc(un&mht#mcky-tvZvi|{UloRo|rde\<7?<]9%l~k }f.e`|+ekcq%|~R~ats]dgZgtzlmTh<2?>3;8Q5)`zo$yj"ilx/aoo})pzVzexQhc^cpv`aXl86:2?74U1-dvc(un&mht#mcky-tvZvi|{UloRo|rde\`4:56;30Y=!hrg,qb*adp'iggu!xr^rmpwY`kVkx~hiPd0>0:7?<]9%l~k }f.e`|+ekcq%|~R~ats]dgZgtzlmTh<2;>3;8Q5)`zo$yj"ilx/aoo})pzVzexQhc^cpv`aXl86>2?74U1-dvc(un&mht#mcky-tvZvi|{UloRo|rde\`4:16;30Y=!hrg,qb*adp'iggu!xr^rmpwY`kVkx~hiPd0>4:7?<]9%l~k }f.e`|+ekcq%|~R~ats]dgZgtzlmTh<27>3:8Q5)`zo$yj"ilx/aoo})pzVzexQhc^cpv`aXl8U;>55Z0.eqb+ta'nis"nbdx.uq[uhszVmhSl}}ef]g5Z7502_;#j|i.sd,cf~)keas#z|Ppovq[beXizxnkRj>_30;?P6(o{l%~k!hcy,`hn~({U{by|Pgb]bwwc`Wm;T??64U1-dvc(un&mht#mcky-tvZvi|{UloRo|rde\`4Y3:11^<"i}f/pe+be&jf`t"y}_qlwvZadWhyyijQk1^71<>S7'nxm"h gbz-gim'~xT|cz}_fa\evtboVn:S;<7;T2,cw`)zo%lou lljz,swYwf}xTknQnssgd[a7X?;20Y=!hrg,qb*adp'iggu!xr^rmpwY`kVkx~hiPd0];60=R8&myj#|i/fa{*fjlp&}yS}`{r^e`[}iu89:;>85Z0.eqb+ta'nis"nbdx.uq[uhszVmhSua}012260=R8&myj#|i/fa{*fjlp&}yS}`{r^e`[}iu89:9>85Z0.eqb+ta'nis"nbdx.uq[uhszVmhSua}012060=R8&myj#|i/fa{*fjlp&}yS}`{r^e`[}iu89:?>85Z0.eqb+ta'nis"nbdx.uq[uhszVmhSua}012660=R8&myj#|i/fa{*fjlp&}yS}`{r^e`[}iu89:=>85Z0.eqb+ta'nis"nbdx.uq[uhszVmhSua}012475=R8&myj#|i/fn3*wb(o{;%~kyit.Onq}YUIDUYHRKA_GUEP775n2_;#j|i.sd,ci6)zm%l~< }fvdw+HkrpVXJAR\JGNWW[@H69;n0Y=!hrg,qb*ak8'xo#j|>.sdtbq)d}{xTjzh{_rvbp`:76;n0Y=!hrg,qb*ak8'xo#j|>.sdtbq)d}{xTjzh{_rvbp`:66;i0Y=!hrg,qb*ak8'xo#j|>.sdtbq)d}{xTjzh{_rvbp`Y7:j1^<"i}f/pe+bj7&{n$k?!rguep*erz{Um{kzPsucwaZ74=2_;#j|i.sd,ci6)zm%l~< }fvdw+fsuzVl|jyQ|t`vf[hs89::0=0<6:W3+bta&{l$ka>!re-dv4(un~l#n{}r^dtbqYt|h~nS`{w01228586;<1^<"i}f/pe+bj7&{n$k?!rguep*erz{Um{kzPsucwaZkrp9:;=1?1379V4*aun'xm#jb?.sf,cw7)zo}mx"mzrs]escrX{}kiRczx12359799;20Y=!hrg,qb*ak8'xo#j|>.sdtbq)bey~rSkyit^da62=R8&myj#|i/fn3*wb(o{;%~kyit.gntqXn~lSd?319V4*aun'xm#jb?.sf,cw7)zo}mx"kbpu{\br`sW`Ufyu>?0131=>S7'nxm"h gm2-va)`zhy%~~z|/b2,gdtuqgo0=0=9:W3+bta&{l$ka>!re-dvdu)zz~x#n> c`pq}kcs484956[?/fpe*w`(oe:%~i!hr`q-vvrt'j:$ol|}yogw878512_;#j|i.sd,ci6)zm%l~l}!rrvp+f6(khxyuck{<2<1b>S7'nxm"h gm2-va)`zhy%~~z|/b2,chs&ngP

<1<17>S7'nxm"h gm2-va)`zhy%~~z|/b2,r4:66;90Y=!hrg,qb*ak8'xo#j|ns/pppv)d8&|:0?0=3:W3+bta&{l$ka>!re-dvdu)zz~x#n> v0>0:75<]9%l~k }f.eo4+tc'nxj#||tr-`4*p64=49n6[?/fpe*w`(oe:%~i!hr`q-vvrt'j:$z?0131f>S7'nxm"h gm2-va)`zhy%~~z|/b2,r4Y3Whdo<=>?13;8Q5)`zo$yj"ic0/pg+btf{'xxx~!l1.abvwim}6;2?74U1-dvc(un&mg<#|k/fpbw+tt|z%h="mnrs{maq:66;30Y=!hrg,qb*ak8'xo#j|ns/pppv)d9&ij~waeu>1:7?<]9%l~k }f.eo4+tc'nxj#||tr-`5*efz{seiy2<>3d8Q5)`zo$yj"ic0/pg+btf{'xxx~!l1.enq}(`eR:V"jc>.l31b>S7'nxm"h gm2-va)`zhy%~~z|/b3,chs&ngP=P hmr,nw7`<]9%l~k }f.eo4+tc'nxj#||tr-`5*aj}q$laV318Q5)`zo$yj"ic0/pg+btf{'xxx~!l1.t28485;2_;#j|i.sd,ci6)zm%l~l}!rrvp+f7(~8692?=4U1-dvc(un&mg<#|k/fpbw+tt|z%h="x><2<17>S7'nxm"h gm2-va)`zhy%~~z|/b3,r4:36;h0Y=!hrg,qb*ak8'xo#j|ns/pppv)d9&|:S=Qnne234575j2_;#j|i.sd,ci6)zm%l~l}!rrvp+f7(~8U:Sl`k012357d<]9%l~k }f.eo4+tc'nxj#||tr-`5*p6W;Ujbi>?0131f>S7'nxm"h gm2-va)`zhy%~~z|/b3,r4Y4Whdo<=>?13`8Q5)`zo$yj"ic0/pg+btf{'xxx~!l1.t2[1Yffm:;<=?=0:W3+bta&{l$ka>!re-dvdu)zz~x#nabp103?P6(o{l%~k!hl1,q`*auiz$yy} cnos57?<]9%l~k }f.eo4+tc'nxj#||tr-qehYbey~rSklPi228Q5)`zo$yj"ic0/pg+btf{'xxx~!}al]fiur~WohTeRa}012374=R8&myj#|i/fn3*wb(o{kx"}{s.pbiZcjx}sTjoQf_np34566::1^<"i}f/pe+bj7&{n$~}`{r.O`kphsWje~by<;;T2,cw`)zo%l`= }d.psjqt(Eje~byQlotlw572<]9%l~k }f.eo4+tc'{zex!BcnwmpZeh}g~9>95Z0.eqb+ta'nf;"j rqlwv*Kdg|dSnaznu110>S7'nxm"h gm2-va)uxg~y#@m`uov\gjsi|=8?7X> gsd-vc)`d9$yh"|nup,Ifirf}Uhcx`{5368Q5)`zo$yj"ic0/pg+wvi|{%Fob{at^alqkr1:=1^<"i}f/pe+bj7&{n$~}`{r.O`kphsWje~by9=4:W3+bta&{l$ka>!re-qtkru'DidyczPcnwmp=433\:$kh!rg-dh5(ul&x{by| MbmvjqYdg|d5?74U1-dvc(un&mg<#|k/srmpw)JkfexRm`uov\g|:76;i0Y=!hrg,qb*ak8'xo#~ats-Ngjsi|VidyczPcx>3:Zts:01^<"i}f/pe+bj7&{n$~}`{r.O`kphsWje~byQly=3=6f=R8&myj#|i/fn3*wb(zyd~"Clotlw[firf}Uhu1?1_sv1=>S7'nxm"h gm2-va)uxg~y#@m`uov\gjsi|Vir0?0=c:W3+bta&{l$ka>!re-qtkru'DidyczPcnwmpZe~4;4T~y<6;T2,cw`)zo%l`= }d.psjqt(Eje~byQlotlw[f;;78h7X> gsd-vc)`d9$yh"|nup,Ifirf}Uhcx`{_b{?7;Yu|;30Y=!hrg,qb*ak8'xo#~ats-Ngjsi|VidyczPcx>7:7e<]9%l~k }f.eo4+tc'{zex!BcnwmpZeh}g~Tot2;>^pw6<=R8&myj#|i/fn3*wb(zyd~"Clotlw[firf}Uhu1;12b9V4*aun'xm#jb?.sf,vuhsz&Ghcx`{_bmvjqYdq5?5Sz=9:W3+bta&{l$ka>!re-qtkru'DidyczPcnwmpZe~4?49o6[?/fpe*w`(oe:%~i!}povq+Heh}g~Tob{at^az838Xz}827X> gsd-vc)`d9$yh"|nup,Ifirf}Uhcx`{_b{?3;4d3\:$kh!rg-dh5(ul&x{by| MbmvjqYdg|dSnw37?]qp7?<]9%l~k }f.eo4+tc'{zex!BcnwmpZeh}g~Tot27>3a8Q5)`zo$yj"ic0/pg+wvi|{%Fob{at^alqkrXkp632R|{2`9V4*aun'xm#jb?.sf,vuhsz&Ghcx`{_bmvjqYg{6;2?o4U1-dvc(un&mg<#|k/srmpw)JkfexRm`uov\|jt;978j7X> gsd-vc)`d9$yh"|nup,Ifirf}Uhcx`{_ymq8785i2_;#j|i.sd,ci6)zm%y|cz}/LalqkrXkfexRv`r=1=6d=R8&myj#|i/fn3*wb(zyd~"Clotlw[firf}Usc2;>3c8Q5)`zo$yj"ic0/pg+wvi|{%Fob{at^alqkrXpfx793;:7g<]9%l~k }f.eo4+tc'{zex!BcnwmpZeh}g~Ttb|39?0g?P6(o{l%~k!hl1,q`*twf}x$Anaznu]`kphsWqey040Pru3e?P6(o{l%~k!hl1,q`*twf}x$ob{at=2=5c=R8&myj#|i/fn3*wb(zyd~"m`uov?5;7a3\:$kh!rg-dh5(ul&x{by| cnwmp9499o1^<"i}f/pe+bj7&{n$~}`{r.alqkr;;7;m7X> gsd-vc)`d9$yh"|nup,gjsi|5>5=k5Z0.eqb+ta'nf;"j rqlwv*eh}g~793?i;T2,cw`)zo%l`= }d.psjqt(kfex1811g9V4*aun'xm#jb?.sf,vuhsz&idycz37?3e?P6(o{l%~k!hl1,q`*twf}x$ob{at=:=5c=R8&myj#|i/fn3*wb(zyd~"m`uov?=;7b3\:$kh!rg-dh5(ul&x{by| cnwmpZ66m2_;#j|i.sd,ci6)zm%y|cz}/bmvjqY69l1^<"i}f/pe+bj7&{n$~}`{r.alqkrX:8o0Y=!hrg,qb*ak8'xo#~ats-`kphsW:;n7X> gsd-vc)`d9$yh"|nup,gjsi|V>:i6[?/fpe*w`(oe:%~i!}povq+firf}U>=h5Z0.eqb+ta'nf;"j rqlwv*eh}g~T:e:W3+bta&{l$ka>!re-qtkru'je~byQ6239V4*aun'xm#jb?.sf,vuhsz&idyczPd0>3:74<]9%l~k }f.eo4+tc'{zex!lotlw[a7;97897X> gsd-vc)`d9$yh"|nup,gjsi|Vn:0?0=2:W3+bta&{l$ka>!re-qtkru'je~byQk1=1=67=R8&myj#|i/fn3*wb(zyd~"m`uov\`4:36;80Y=!hrg,qb*ak8'xo#~ats-`kphsWm;793<=;T2,cw`)zo%l`= }d.psjqt(kfexRj><7<16>S7'nxm"h gm2-va)uxg~y#naznu]g5919:;1^<"i}f/pe+bj7&{n$~}`{r.alqkrXl8632?<4U1-dvc(un&mg<#|k/srmpw)dg|dSi?39?02?P6(o{l%~k!hl1,q`*twf}x$ob{at^f2[5463\:$kh!rg-dh5(ul&x{by| cnwmpZb6W88:7X> gsd-vc)`d9$yh"|nup,gjsi|Vn:S?<>;T2,cw`)zo%l`= }d.psjqt(kfexRj>_202?P6(o{l%~k!hl1,q`*twf}x$ob{at^f2[1463\:$kh!rg-dh5(ul&x{by| cnwmpZb6W<8:7X> gsd-vc)`d9$yh"|nup,gjsi|Vn:S;<>;T2,cw`)zo%l`= }d.psjqt(kfexRj>_602?P6(o{l%~k!hl1,q`*twf}x$ob{at^f2[=463\:$kh!rg-dh5(ul&x{by| cnwmpZb6W08?7X> gsd-vc)`d9$yh"|nup,gjsi|Vddx=>?13;8Q5)`zo$yj"ic0/uq+bqf{'}xx~!l1.abvwim}6;2?74U1-dvc(un&mg<#y}/fubw+qt|z%h="mnrs{maq:66;30Y=!hrg,qb*ak8'}y#jyns/uppv)d9&ij~waeu>1:7?<]9%l~k }f.eo4+qu'n}j#y|tr-`5*efz{seiy2<>3d8Q5)`zo$yj"ic0/uq+bqf{'}xx~!l1.enq}(`eR:V"jc>.l31b>S7'nxm"h gm2-sw)`hy%{~z|/b3,chs&ngP=P hmr,nw7`<]9%l~k }f.eo4+qu'n}j#y|tr-`5*aj}q$laV318Q5)`zo$yj"ic0/uq+bqf{'}xx~!l1.t28485;2_;#j|i.sd,ci6){%l{l}!wrvp+f7(~8692?=4U1-dvc(un&mg<#y}/fubw+qt|z%h="x><2<17>S7'nxm"h gm2-sw)`hy%{~z|/b3,r4:36;h0Y=!hrg,qb*ak8'}y#jyns/uppv)d9&|:S=Qnne234575j2_;#j|i.sd,ci6){%l{l}!wrvp+f7(~8U:Sl`k012357d<]9%l~k }f.eo4+qu'n}j#y|tr-`5*p6W;Ujbi>?0131f>S7'nxm"h gm2-sw)`hy%{~z|/b3,r4Y4Whdo<=>?13`8Q5)`zo$yj"ic0/uq+bqf{'}xx~!l1.t2[1Yig}:;<=?=9:W3+bta&{l$ka>!ws-dsdu)z~x#n< c`pq}kcs494956[?/fpe*w`(oe:%{!hw`q-svrt'j8$ol|}yogw848512_;#j|i.sd,ci6){%l{l}!wrvp+f4(khxyuck{<3<1=>S7'nxm"h gm2-sw)`hy%{~z|/b0,gdtuqgo0>0=f:W3+bta&{l$ka>!ws-dsdu)z~x#n< glw{*bk\8T$la< b13d8Q5)`zo$yj"ic0/uq+bqf{'}xx~!l2.enq}(`eR;V"jc|.lq1b>S7'nxm"h gm2-sw)`hy%{~z|/b0,chs&ngP>P hmr,nw7`<]9%l~k }f.eo4+qu'n}j#y|tr-`6*aj}q$laV=R.fop*hu5n2_;#j|i.sd,ci6){%l{l}!wrvp+f4(ods"jcT4\,div(j{;90Y=!hrg,qb*ak8'}y#jyns/uppv)d:&|:0=0=3:W3+bta&{l$ka>!ws-dsdu)z~x#n< v0>2:75<]9%l~k }f.eo4+qu'n}j#y|tr-`6*p64;49?6[?/fpe*w`(oe:%{!hw`q-svrt'j8$z<2<>318Q5)`zo$yj"ic0/uq+bqf{'}xx~!l2.t28185j2_;#j|i.sd,ci6){%l{l}!wrvp+f4(~8U;Sl`k012357d<]9%l~k }f.eo4+qu'n}j#y|tr-`6*p6W8Ujbi>?0131f>S7'nxm"h gm2-sw)`hy%{~z|/b0,r4Y5Whdo<=>?13`8Q5)`zo$yj"ic0/uq+bqf{'}xx~!l2.t2[6Yffm:;<=?=b:W3+bta&{l$ka>!ws-dsdu)z~x#n< v0]7[kis89:;=?>4U1-dvc(un&mg<#y}/fubw+qt|z%hc`~>219V4*aun'xm#jb?.vp,crgt&~y"m`mq01<>S7'nxm"h gm2-sw)`hy%{~z|/scn[cskdVliSd<:;T2,cw`)zo%l`= xr.etev(p{}y$~lcPftno[l4c3\:$kh!rg-dh5(pz&m|m~ xsuq,vdkXn|fgSdQbuy23454b3\:$kh!rg-dh5(pz&m|m~ xsuq,vdkXn|fgSdQbuy234576l2_;#j|i.sd,ci6){%ym`Qxr^gm[l75;2_;#j|i.sd,ci6){%||cz}/LalqkrXkfex?:4U1-dvc(un&mg<#y}/vrmpw)JkfexRm`uov261=R8&myj#|i/fn3*rt(yd~"Clotlw[firf}8986[?/fpe*w`(oe:%{!xpovq+Heh}g~Tob{at207?P6(o{l%~k!hl1,tv*qwf}x$Anaznu]`kphs<;>0Y=!hrg,qb*ak8'}y#z~ats-Ngjsi|Vidycz:259V4*aun'xm#jb?.vp,suhsz&Ghcx`{_bmvjq05<2_;#j|i.sd,ci6){%||cz}/LalqkrXkfex:<;;T2,cw`)zo%l`= xr.usjqt(Eje~byQlotlw<7?<]9%l~k }f.eo4+qu'~zex!BcnwmpZeh}g~Tot2?>3a8Q5)`zo$yj"ic0/uq+rvi|{%Fob{at^alqkrXkp6;2R|{289V4*aun'xm#jb?.vp,suhsz&Ghcx`{_bmvjqYdq5;5>n5Z0.eqb+ta'nf;"z| wqlwv*Kdg|dSnaznu]`}979W{~956[?/fpe*w`(oe:%{!xpovq+Heh}g~Tob{at^az8785k2_;#j|i.sd,ci6){%||cz}/LalqkrXkfexRmv<3<\vq4>3\:$kh!rg-dh5(pz&}{by| MbmvjqYdg|dSnw33?0`?P6(o{l%~k!hl1,tv*qwf}x$Anaznu]`kphsWjs7?3Q}t3;8Q5)`zo$yj"ic0/uq+rvi|{%Fob{at^alqkrXkp6?2?m4U1-dvc(un&mg<#y}/vrmpw)JkfexRm`uov\g|:36Vx>45Z0.eqb+ta'nf;"z| wqlwv*Kdg|dSnaznu]`}939:j1^<"i}f/pe+bj7&~x${}`{r.O`kphsWje~byQly=7=[wr512_;#j|i.sd,ci6){%||cz}/LalqkrXkfexRmv<7<1g>S7'nxm"h gm2-sw)pxg~y#@m`uov\gjsi|Vir0;0Pru0:?P6(o{l%~k!hl1,tv*qwf}x$Anaznu]`kphsWjs7;3 gsd-vc)`d9$|~"ynup,Ifirf}Uhcx`{_ymq8485i2_;#j|i.sd,ci6){%||cz}/LalqkrXkfexRv`r=0=6d=R8&myj#|i/fn3*rt(yd~"Clotlw[firf}Usc2<>3c8Q5)`zo$yj"ic0/uq+rvi|{%Fob{at^alqkrXpfx7834:7g<]9%l~k }f.eo4+qu'~zex!BcnwmpZeh}g~Ttb|38?0g?P6(o{l%~k!hl1,tv*qwf}x$Anaznu]`kphsWqey050Pru3e?P6(o{l%~k!hl1,tv*qwf}x$ob{at=2=5c=R8&myj#|i/fn3*rt(yd~"m`uov?5;7a3\:$kh!rg-dh5(pz&}{by| cnwmp9499o1^<"i}f/pe+bj7&~x${}`{r.alqkr;;7;m7X> gsd-vc)`d9$|~"ynup,gjsi|5>5=k5Z0.eqb+ta'nf;"z| wqlwv*eh}g~793?i;T2,cw`)zo%l`= xr.usjqt(kfex1811g9V4*aun'xm#jb?.vp,suhsz&idycz37?3e?P6(o{l%~k!hl1,tv*qwf}x$ob{at=:=5`=R8&myj#|i/fn3*rt(yd~"m`uov\44c<]9%l~k }f.eo4+qu'~zex!lotlw[47b3\:$kh!rg-dh5(pz&}{by| cnwmpZ46m2_;#j|i.sd,ci6){%||cz}/bmvjqY49l1^<"i}f/pe+bj7&~x${}`{r.alqkrX<8o0Y=!hrg,qb*ak8'}y#z~ats-`kphsW<;n7X> gsd-vc)`d9$|~"ynup,gjsi|V<:i6[?/fpe*w`(oe:%{!xpovq+firf}U<=h5Z0.eqb+ta'nf;"z| wqlwv*eh}g~T4?<4U1-dvc(un&mg<#y}/vrmpw)dg|dSi?30?01?P6(o{l%~k!hl1,tv*qwf}x$ob{at^f28485:2_;#j|i.sd,ci6){%||cz}/bmvjqYc9585>?5Z0.eqb+ta'nf;"z| wqlwv*eh}g~Th<2<>308Q5)`zo$yj"ic0/uq+rvi|{%hcx`{_e3?0;453\:$kh!rg-dh5(pz&}{by| cnwmpZb64<49>6[?/fpe*w`(oe:%{!xpovq+firf}Uo=181239V4*aun'xm#jb?.vp,suhsz&idyczPd0>4:74<]9%l~k }f.eo4+qu'~zex!lotlw[a7;078:7X> gsd-vc)`d9$|~"ynup,gjsi|Vn:S=<>;T2,cw`)zo%l`= xr.usjqt(kfexRj>_002?P6(o{l%~k!hl1,tv*qwf}x$ob{at^f2[7463\:$kh!rg-dh5(pz&}{by| cnwmpZb6W:8:7X> gsd-vc)`d9$|~"ynup,gjsi|Vn:S9<>;T2,cw`)zo%l`= xr.usjqt(kfexRj>_402?P6(o{l%~k!hl1,tv*qwf}x$ob{at^f2[3463\:$kh!rg-dh5(pz&}{by| cnwmpZb6W>8:7X> gsd-vc)`d9$|~"ynup,gjsi|Vn:S5<=;T2,cw`)zo%l`= xr.usjqt(kfexRj=<1<16>S7'nxm"h gm2-sw)pxg~y#naznu]g6979:;1^<"i}f/pe+bj7&~x${}`{r.alqkrXl;692?<4U1-dvc(un&mg<#y}/vrmpw)dg|dSi<33?01?P6(o{l%~k!hl1,tv*qwf}x$ob{at^f18185:2_;#j|i.sd,ci6){%||cz}/bmvjqYc:5?5>?5Z0.eqb+ta'nf;"z| wqlwv*eh}g~Th?29>308Q5)`zo$yj"ic0/uq+rvi|{%hcx`{_e0?3;453\:$kh!rg-dh5(pz&}{by| cnwmpZb54149=6[?/fpe*w`(oe:%{!xpovq+firf}Uo>R>=1:W3+bta&{l$ka>!ws-ttkru'je~byQk2^315>S7'nxm"h gm2-sw)pxg~y#naznu]g6Z4592_;#j|i.sd,ci6){%||cz}/bmvjqYc:V99=6[?/fpe*w`(oe:%{!xpovq+firf}Uo>R:=1:W3+bta&{l$ka>!ws-ttkru'je~byQk2^715>S7'nxm"h gm2-sw)pxg~y#naznu]g6Z0592_;#j|i.sd,ci6){%||cz}/bmvjqYc:V=9=6[?/fpe*w`(oe:%{!xpovq+firf}Uo>R6=4:W3+bta&{l$ka>!ws-ttkru'je~byQaou2344703\:$kh!rg-nah)cg|~Te1>1199V4*aun'xm#`kb/emvpZo;994:46[?/fpe*w`(elg$hb{{_h>25;7?3\:$kh!rg-nah)cg|~Te1?=>0:8Q5)`zo$yj"cjm.flqqYn4895=55Z0.eqb+ta'dof#iazt^k?518602_;#j|i.sd,i`k(lfSd2>5?3;?P6(o{l%~k!bel-gkprXa5;=2<64U1-dvc(un&gna"j`uu]j84199>1^<"i}f/pe+hcj'me~xRg31?34?P6(o{l%~k!bel-gkprXa585=:5Z0.eqb+ta'dof#iazt^k?7;703\:$kh!rg-nah)cg|~Te1:1169V4*aun'xm#`kb/emvpZo;=7;<7X> gsd-vc)jmd%ocxzPi=4=52=R8&myj#|i/lgn+air|Vc7;3?8;T2,cw`)zo%fi`!kotv\m9>99>1^<"i}f/pe+hcj'me~xRg39?35?P6(o{l%~k!bel-gkprXaV:::6[?/fpe*w`(elg$hb{{_h]252=R8&myj#|i/lgn+air|VcT==?8;T2,cw`)zo%fi`!kotv\mZ769>1^<"i}f/pe+hcj'me~xRgP1334?P6(o{l%~k!bel-gkprXaV;8=:5Z0.eqb+ta'dof#iazt^k\51703\:$kh!rg-nah)cg|~TeR?:169V4*aun'xm#`kb/emvpZoX9?;<7X> gsd-vc)jmd%ocxzPi^3453=R8&myj#|i/lgn+air|VcT><84U1-dvc(un&gna"j`uu]j[6713\:$kh!rg-nah)cg|~TeR:>6:W3+bta&{l$ahc dnww[lY29?1^<"i}f/pe+hcj'me~xRgP6048Q5)`zo$yj"cjm.flqqYnW>;=7X> gsd-vc)jmd%ocxzPi^:22>S7'nxm"h mdo,`jssW`U2=45Z0.eqb+ta'dof#iazt^ofi9699h1^<"i}f/pe+hcj'me~xRcjm=33:4g<]9%l~k }f.ofi*bh}}Ufi`2>1?3b?P6(o{l%~k!bel-gkprXelg7=?0>a:W3+bta&{l$ahc dnww[hcj4895=l5Z0.eqb+ta'dof#iazt^ofi97368k0Y=!hrg,qb*kbe&ndyyQbel>21;7f3\:$kh!rg-nah)cg|~Tahc317<2e>S7'nxm"h mdo,`jssWdof0<91189V4*aun'xm#`kb/emvpZkbe5;5=45Z0.eqb+ta'dof#iazt^ofi949901^<"i}f/pe+hcj'me~xRcjm=1=5<=R8&myj#|i/lgn+air|Vgna1:1189V4*aun'xm#`kb/emvpZkbe5?5=45Z0.eqb+ta'dof#iazt^ofi909901^<"i}f/pe+hcj'me~xRcjm=5=5<=R8&myj#|i/lgn+air|Vgna161189V4*aun'xm#`kb/emvpZkbe535;95Z0.eqb+ta'dof#jlb.f`nc+aeenk%bjklc/`nc*dkcVgnaRijndpbpjt(~hfbh#m|ts-qehjhgyQ;Q#|nm/p,w6Yig`dbx#|nm.fsvdk)ly9=t<6!r`o2f>S7'nxm"h mdo,phvXzhgT~iQjn0a8Q5)`zo$yj"cjm.vntZtfeVxoSh`>169V4*aun'xm#ob_sgdkprXmg;o7X> gsd-vc)u{}hgg"|k_sqw[duumn8;7X> gsd-vc)u{}hgg"|k_sqw[duumnUo=?>4U1-dvc(un&xxxobd/sf\vvrXizxnkRj=1b9V4*aun'xm#}{bmi,vaYu{}Uhc`l>d:W3+bta&{l$~~zmlj-q`Ztt|Vidao?>e:W3+bta&{l$~~zmlj-q`Ztt|Vxnk1>11d9V4*aun'xm#}{bmi,vaYu{}Uyij2>>0g8Q5)`zo$yj"||tcnh+wbXzz~T~hi32?3g?P6(o{l%~k!}su`oo*tcW{ySkh_13g?P6(o{l%~k!}su`oo*tcW{ySkh_03g?P6(o{l%~k!}su`oo*tcW{ySkh_33g?P6(o{l%~k!}su`oo*quW{ySl}}ef03?P6(o{l%~k!}su`oo*quW{ySl}}ef]g576<]9%l~k }f.pppgjl'~xT~~zParpfcZb59j1^<"i}f/pe+wusjea${Q}su]`khd6l2_;#j|i.sd,vvredb%|~R||t^alig76m2_;#j|i.sd,vvredb%|~R||t^pfc9699l1^<"i}f/pe+wusjea${Q}su]qab:668n0Y=!hrg,qb*tt|kf`#z|Prrv\v`aX88n0Y=!hrg,qb*tt|kf`#z|Prrv\v`aX9h1^_H\PAMKBWf=R[LXTZD]FBMG0?SED12\BIZQ[YQG0?RCF;2]NNn5XRHVF[HICMVKh7Z\FTD]NKACXJm1\^DZJ_VKGPMYFl2]YEYKPWHFWLZD6l2RB@D@W-YFA$5(6(Z^^N->!1!CPGLO23QEYOT84XRVOMG1gkefyShctx`8eikh{}Umyab9;cc`opvc3kkhgx~Pm`phaw5bf|hUhcx`{(6+g?agsiVidycz'8(d8`drfWje~by27:1<4?adn|lxy:6jfn)2*2>bnf!;";6jfn)33-2=cag":=$94dhl+57/03mce$<=&7:fjj-73!>1oec&>5(58`lh/9?#<7iga(05*3>bnf!;3%:5kio*2=,0$94dhl+65/03mce$??&7:fjj-45!>1oec&=3(58`lh/:=#<7iga(37*3>bnf!8=%:5kio*13,15'8;ekm,7?.>2nbb%=&7:fjj-57!>1oec&<1(58`lh/;;#<7iga(21*3>bnf!9?%:5kio*01,01oec2>3?58`lh;9=4<7iga<07=3>bnf5;=2:5kio>23;12nbb1?17:fjj9476>1oec2=1?58`lh;:;4<7iga<31=3>bnf58?2:5kio>11;1;08;ekm8719?2nbb1<7>69gmk:517<0hd`32?58`lh;;94<7iga<23=3>bnf5992:5kio>07;14=7iga<9<5?aoi404<7iazt)2*3>bh}}":%55kotv+55/?3me~x%?>)99gkpr/9;#37iazt)30-==cg|~#=9'7;emvp-72!11ocxz'17+;?air|!;<%:5kotv+6,1'8;emvp-2.?2ndyy&:)69gkpr/> =0hb{{(6+4?air|!2";6j`uu*:-2=cg|~7<364dnww846902ndyy2>1?:8`jss488546j`uu>27;>bh}}6:;7>18:flqq:6?7=0hb{{<0<4?air|585;6j`uu>0:2=cg|~78394dnww80803me~x1817:flqq:06>1ocxz38?58`jss40437hjff3ld`0=bey~r>k5iigm\c`hbzh~d~Rx9_0.#\ljnfq*HC_K/Gdlfvdrhz);9"=?v<6^0`hnY4>}e:4>o4fhdl[}jipV?:>u=9_3aooZ51|f;3 kgio^efj`tf|fxTz;Q>,OMMA)HHFL>;=6hffn]{hk~X=88s?;Q=cmi\73rh91&mekaPgdlfvdrhzV|=S<"tc^jbwZoi|Vigg0>#c^jbwZuu{}7; nQ}d^dqat;6$jUnbllce^pppZu~fj7: nQgar]q`Zbf|hUhcx`{=1.`[aoiW~coxe3<6-a\lduX{UomyoPcnwmp86+kVl~`aQil`ep[wusWkg1="l_hosh`kbf}keb`Ptxrf97*dW|ynShcmeeff`Ztbo4:'oRy}_gpfu87+kVxiRj`uu]qwq;6$jU~bik}fmmt[iip59&hSeo|_ntfvcjh4:'oR~}emmb`Zjf|ldhu0>#c^flqqYpam~c1<6#c^opcjhX~hf6=!mPre]gauro58:98!mPesplvZoiblieb`Ptxrf95*dWakxSx`kesdokr;7$jUcm~QnllmppZ`rde7; nQgar]qwq;6$jUomyoPcnwmpZqnl}b65!mPh`q\swYfkb7; nQzsd]fgf;7$jUhc`c`n^aokfm:8%iT{Qncj]okr;7$jUyhR~ats]tmaro58:'oR{|e^dtbqYci}kTob{at<2/gZnf{Vkgab}{_dosp|;7$jUyhRjnt`]`kphsW~coxe3>0-a\kscunee|Saax=1.`[rtXxg~ySzgkti?:(fYwzfmTi`~{y^vzt`;7$jU|~Rjnt`]`kphsW~coxe36,b]sv`jhimUyij}21-a\`jssW{yS{oc=1.`[mgtWmkmRm`uov>4)eXx{elSk{cl^vkv`uoWgolmykPv`n>15>+kV}ySikti?657*dWyxdkRkbpu{\pmtb{aUeijo{e^tbh83+kVzycjQjmqvz[qnumzbTm~}jru]uei;3$jUcm~Qyamkg95*dWyxdkRhzlm]wlwct`Vkxh|{_wco906>$jef|b`jnu]mehc:n`ldSubax^726}51W;iggR=9tn3;(fYqiecoSaax=1.`[utneVlbjbQ{yqg>144;?&hS}|`g^dvhiYsqyo6vugnUna}zv_ujqavn/: ;?7}|`g^gntqX|axne&<)068twi`Wlg{xtQ{hsgpl-2.9=1{~biPelrw}Zrozlyc$8'>4:rqkbYbey~rSyf}erj+2,733yxdkRkbpu{\pmtb{a"<%<:4psmd[`kw|pUdk|h):*51=wzfmTi`~{y^vkv`uo 0#::6~}of]fiur~W}byi~f39;2=5g=wzfmTi`~{y^vkv`uoWhyxiz'0(3a?uthoVof|ywPtipfwmYf{zoyx%?&1c9svjaXmdzuRzgrdqk[dutm{~#>$?m;qplcZcjx}sTxe|jsi]bwvcu|!9"=o5rne\ahvsqV~c~h}g_`qpawr/< ;i7}|`g^gntqX|axneQnsrgqp-3.9k1{~biPelrw}ZrozlycSl}|esv+2,7e3yxdkRkbpu{\pmtb{aUj~k}t)5*5g=wzfmTi`~{y^vkv`uoWhyxiz'8(3a?uthoVof|ywPtipfwmYf{zoyx%7&1e9svjaXmdzuRzgrdqk[dutm{~757>11c9svjaXmdzuRzgrdqk[kc`i}o#<$?m;qplcZcjx}sTxe|jsi]mabgsm!;"=o5rne\ahvsqV~c~h}g_ogdeqc/: ;i7}|`g^gntqX|axneQaefcwa-5.9k1{~biPelrw}ZrozlycSckhaug+0,7e3yxdkRkbpu{\pmtb{aUeijo{e)7*5g=wzfmTi`~{y^vkv`uoWgolmyk'6(3a?uthoVof|ywPtipfwmYimnki%9&1c9svjaXmdzuRzgrdqk[kc`i}o#4$?m;qplcZcjx}sTxe|jsi]mabgsm!3"=i5rne\ahvsqV~c~h}g_ogdeqc;13:556~}of]eqij6;2zycjQiumn\pmtb{a";%<=4psmd[cskdV~c~h}g(0+27>vugnUmyabPtipfwm.5!890|ah_gwohZrozlyc$>'>3:rqkbYa}efTxe|jsi*7-45a:rqkbYa}efTxe|jsi]bwvcu|!8"=l5rne\bpjkW}byi~fParqfvq.4!8k0|ah_gwohZrozlycSl}|esv+0,7f3yxdkRhzlm]wlwct`Vkxh|{(4+2e>vugnUmyabPtipfwmYf{zoyx%8&1`9svjaXn|fgSyf}erj\evubz}"<%vugnUmyabPtipfwmYimnki%<&1`9svjaXn|fgSyf}erj\j`af|l"8%$??;sf\`drfWje~by&<)028vaYci}kTob{at)6*55=ulVnjxlQlotlw,0/682xoSio{a^alqkr/> ;;7jPd`vb[firf}"<%<>4re]geqgXkfex%6&119q`Zbf|hUhcx`{(8+24>tcWmkmRm`uov?4;753{nThlzn_bmvjq:>294>7jPeo48vaYu{}90~~z8;r`jp`tu<2yyy:4tswf=>sillxm`by:;wcoma0<{Ujof84ws]`hn773~xThlzn_bmvjq.7!8:0{Qkauc\gjsi|!;"==5xr^fbpdYdg|d$?'>0:uq[agsiVidycz'3(33?rtXlh~jSnaznu*7-46<{UomyoPcnwmp-3.991|~Rjnt`]`kphs ?#:<6y}_ecweZeh}g~#;$??;vp\`drfWje~by&7)008swYci}kTob{at=:94;3<{Unb;5xr^pppxFGxh<>7MNw1;D90?7|[=l188;57;306g0dk398:ljtn2f6>4=i;m<1:6*107290:??l9cb8073gb3Z>o698?:18277d1kj08?;oi;e66hn0(>m9:00a?S5c<38py<=<:09v562=82w/=:75199a00>=839o6>47;'5=g=<<20(>j=:574?l2e83:17d:l4;29?j22k3:17b::6;29?l2e13:17d:m2;29?j2413:1(<9m:56b?k70i3:07b:<8;29 41e2=>j7c?8a;38?j24?3:1(<9m:56b?k70i3807b:<6;29 41e2=>j7c?8a;18?j24=3:1(<9m:56b?k70i3>07b:<4;29 41e2=>j7c?8a;78?j24;3:1(<9m:56b?k70i3<07b:<2;29 41e2=>j7c?8a;58?j2393:1(<9m:56b?k70i3207b:;0;29 41e2=>j7c?8a;;8?j24n3:1(<9m:56b?k70i3k07b:j7c?8a;`8?j24l3:1(<9m:56b?k70i3i07b:j7c?8a;f8?j24j3:1(<9m:56b?k70i3o07b:j7c?8a;d8?j2493:1(<9m:56b?k70i3;;76a;3183>!70j3>?m6`>7`825>=n<9>1<7*>7c8762=i9>k1<65f41194?"6?k0?>:5a16c95>=n<981<7*>7c8762=i9>k1>65f41394?"6?k0?>:5a16c97>=n<9:1<7*>7c8762=i9>k1865f3gd94?"6?k0?>:5a16c91>=n;on1<7*>7c8762=i9>k1:65f3ga94?"6?k0?>:5a16c93>=n;oh1<7*>7c8762=i9>k1465f3gc94?"6?k0?>:5a16c9=>=n;o31<7*>7c8762=i9>k1m65f3g:94?"6?k0?>:5a16c9f>=n;o=1<7*>7c8762=i9>k1o65f3g494?"6?k0?>:5a16c9`>=n;o?1<7*>7c8762=i9>k1i65f3g694?"6?k0?>:5a16c9b>=n;o81<7*>7c8762=i9>k1==54i2d2>5<#9>h18?94n05b>47<3`9m<7>5$05a>1403g;1e=:o51598m6cc290/=:l54358j41f28?07d=jc;29 41e2=8<7c?8a;35?>o4mk0;6)?8b;613>h6?h0:;65f3dc94?"6?k0?>:5a16c95==b:9j05>=83.:;o4;269m52g=9j10e9>8:18'52d=<;=0b<9n:0f8?l27>3:1(<9m:504?k70i3;n76g;0483>!70j3>9;6`>7`82b>=n;oo1<7*>7c8762=i9>k1>=54i2d0>5<#9>h18?94n05b>77<3`9n47>5$05a>1403g;tH2a7?!7?i39h96a>7983>>{el10;6<4?:1yK7f2<,82j6i64oe594?=zj=>1<7o::00g>40>sA9h86T;5;35d<>2k09m7<8:3:96<8`871g=#<10?945+4d871d=#9>>1=:94i554>5<#9>h18:64n05b>5=5<#9>h18:64n05b>7=54i550>5<#9>h18:64n05b>1=5<#9>h18:64n05b>3=5<#9>h18:64n05b>==5<5<5<#9>h18;j4n05b>5=5<#9>h18;j4n05b>7=54i54;>5<#9>h18;j4n05b>1=5<#9>h18;j4n05b>3=6=4+16`903b5<#9>h18;j4n05b>==5<5<#9>h185=4n05b>5=5<#9>h185=4n05b>7=54i55f>5<#9>h185=4n05b>1=5<#9>h185=4n05b>3=5<#9>h185=4n05b>==5<5<#9>h1?h;4n05b>4=5<#9>h1?h;4n05b>6=5<#9>h1?h;4n05b>0=5<#9>h1?h;4n05b>2=5<5<#9>h185k4n05b>5=5<#9>h185k4n05b>7=54i5::>5<#9>h185k4n05b>1=5<#9>h185k4n05b>3=5<#9>h185k4n05b>==5<5<5<#9>h18464n05b>4=6=4+16`90<>5<#9>h18464n05b>6=5<#9>h18464n05b>0=5<#9>h18464n05b>2=5<#9>h18l<4n05b>5=5<#9>h18l<4n05b>7=54i5;g>5<#9>h18l<4n05b>1=5<#9>h18l<4n05b>3=5<#9>h18l<4n05b>==5<5<5<5<#9>h189o4n05b>5=5<#9>h189o4n05b>7=54o516>5<#9>h189o4n05b>1=5<#9>h189o4n05b>3=5<#9>h189o4n05b>==;6=4+16`901g5<#9>h189o4n05b>d=5<#9>h189o4n05b>f=5<#9>h189o4n05b>`=5<#9>h189o4n05b>46<3f>8<7>5$05a>12f3g;;:k741<72-;4?:%34f?25?2d:;l4>;:k747<72-;1e=:o51098m6`7290/=:l54358j41f28807d=jf;29 41e2=8<7c?8a;30?>o4ml0;6)?8b;613>h6?h0:865f3df94?"6?k0?>:5a16c950=8:9j7`?=83.:;o4;269m52g=9010e9>n:18'52d=<;=0b<9n:0c8?l2713:1(<9m:504?k70i3;i76g;0983>!70j3>9;6`>7`82g>=n<9=1<7*>7c8762=i9>k1=i54i525>5<#9>h18?94n05b>4c<3`>;97>5$05a>1403g;1e=:o52098m6c?290/=:l54358j41f2;807d=j7;29 41e2=8<7c?8a;00?>o4l00;66a;ae83>!70j3>jj6`>7`83?>i3ij0;6)?8b;6bb>h6?h0:76a;ac83>!70j3>jj6`>7`81?>i3ih0;6)?8b;6bb>h6?h0876a;a883>!70j3>jj6`>7`87?>i3i10;6)?8b;6bb>h6?h0>76a;a683>!70j3>jj6`>7`85?>i3i?0;6)?8b;6bb>h6?h0<76a;a483>!70j3>jj6`>7`8;?>i3i=0;6)?8b;6bb>h6?h0276a;c383>!70j3>h?6`>7`83?>i3k80;6)?8b;6`7>h6?h0:76a;c183>!70j3>h?6`>7`81?>i3jo0;6)?8b;6`7>h6?h0876a;bd83>!70j3>h?6`>7`87?>i3jm0;6)?8b;6`7>h6?h0>76a;bb83>!70j3>h?6`>7`85?>i3jk0;6)?8b;6`7>h6?h0<76a;b`83>!70j3>h?6`>7`8;?>i3>;0;66g;5e83>>i4m?0;66g;a283>>i3j?0;66l4<729q/=5o5d99K7f`<@:i?7bj8:188yg5c93:1=7>50z&21<729q/=5o5d59K7f`<@:i?7)k::79j03<722c><7>5;h34g?6=3f;5;|`052<72=0;6=u+19c9`7=O;jl0D>m;;%g6>7=n3:187>50z&25;h6`>5<?54c78 `3=:2c?:7>5;h73>5<8`8g5>N4ko1C?n:4H518 4562=h>7)k::39j03<722c><7>5;n34`?6=3th8n=4?:283>5}#91k1h<5G3bd8L6e33A>87)?<1;6a1>"b=380e9850;9j15<722e:;i4?::a7gg=83?1<7>t$0:b>a3<@:im7E=l4:J77>"6;80?n85f4783>>o3?3:17d;?:188m41d2900c<9k:188yg5ej3:1?7>50z&27=n0<729q/=5o5d49K7f`<@:i?7E:<;%305?2e=2c?:7>5;h64>5<n1<75rb2`:>5<3290;w)?7a;f7?M5dn2B8o95+e485?l212900e8>50;9j52e=831d=:j50;9~f6d?290?6=4?{%3;e?b33A9hj6F=6=44i4294?=n9>i1<75`16f94?=zj:h<6=4;:183!7?i3n?7E=lf:J0g1=#m<0=7d:9:188m06=831b=:m50;9l52b=831vn>m=:187>5<7s-;3m7j;;I1`b>N4k=1/i849;h65>5<n1<75rb2a2>5<3290;w)?7a;f7?M5dn2B8o95+e485?l212900e8>50;9j52e=831d=:j50;9~f4gc290?6=4?{%3;e?b53A9hj6F=6=44i5a94?=n=90;66a>7e83>>{e9hi1<7:50;2x 4>f2m80D>mi;I1`0>"b=380e9850;9j0f<722c><7>5;n34`?6=3th:mo4?:583>5}#91k1h?5G3bd8L6e33-o>6?5f4783>>o3k3:17d;?:188k41c2900qo?na;290?6=8r.:4l4k2:J0gc=O;j>0(h;52:k72?6=3`>h6=44i4294?=h9>n1<75rb0c:>5<3290;w)?7a;f1?M5dn2B8o95+e481?l212900e9m50;9j15<722e:;i4?::a5d>=83>1<7>t$0:b>a4<@:im7E=l4:&f1?4>o283:17b?8d;29?xd6i>0;694?:1y'5=g=l;1C?nh4H2a7?!c22;1b8;4?::k7g?6=3`?;6=44o05g>5<54;294~"60h0o>6F6g;6;29?l2d2900e8>50;9l52b=831vn5<7s-;3m7j=;I1`b>N4k=1/i84=;h65>5<>i6?m0;66sm20694?2=83:p(<6n:e08L6ea3A9h86*j5;08m10=831b8n4?::k64?6=3f;5;|`156<72=0;6=u+19c9`7=O;jl0D>m;;%g6>7=n50z&25;h6`>5<<>50;694?6|,82j6i<4H2ae?M5d<2.n97<4i5494?=n1<729q/=5o5d39K7f`<@:i?7)k::39j03<722c?o7>5;h73>5<8`8g6>N4ko1C?n:4$d796>o3>3:17d:l:188m06=831d=:j50;9~f76c290?6=4?{%3;e?b53A9hj6F=6=44i5a94?=n=90;66a>7e83>>{e:9i1<7:50;2x 4>f2m80D>mi;I1`0>"b=380e9850;9j0f<722c><7>5;n34`?6=3th99n4?:583>5}#91k1h?5G3bd8L6e33-o>6?5f4783>>o3k3:17d;?:188k41c2900qo<:b;290?6=8r.:4l4k2:J0gc=O;j>0(h;52:k72?6=3`>h6=44i4294?=h9>n1<75rb37b>5<3290;w)?7a;f1?M5dn2B8o95+e481?l212900e9m50;9j15<722e:;i4?::a60?=83>1<7>t$0:b>a4<@:im7E=l4:&f1?4>o283:17b?8d;29?xd5=10;694?:1y'5=g=l;1C?nh4H2a7?!c22;1b8;4?::k7g?6=3`?;6=44o05g>5<;7>54;294~"60h0o>6F6g;6;29?l2d2900e8>50;9l52b=831vn?;9:187>5<7s-;3m7j=;I1`b>N4k=1/i84=;h65>5<>i6?m0;66sm24794?2=83:p(<6n:e08L6ea3A9h86*j5;08m10=831b8n4?::k64?6=3f;5;|`111<72=0;6=u+19c9`7=O;jl0D>m;;%g6>7=n50z&25;h6`>5<f783>1<729q/=5o5d39K7f`<@:i?7)k::39j03<722c?o7>5;h73>5<8`8g6>N4ko1C?n:4$d796>o3>3:17d:l:188m06=831d=:j50;9~f4`3290?6=4?{%3;e?b53A9hj6F=6=44i5a94?=n=90;66a>7e83>>{e9o91<7:50;2x 4>f2m80D>mi;I1`0>"b=380e9850;9j0f<722c><7>5;n34`?6=3th:j?4?:583>5}#91k1h?5G3bd8L6e33-o>6?5f4783>>o3k3:17d;?:188k41c2900qo?i1;290?6=8r.:4l4k2:J0gc=O;j>0(h;52:k72?6=3`>h6=44i4294?=h9>n1<75rb36b>5<3290;w)?7a;f1?M5dn2B8o95G429'567=h6=44i4294?=h9>n1<75rb36:>5<3290;w)?7a;f1?M5dn2B8o95G429'567=h6=44i4294?=h9>n1<75rb36;>5<3290;w)?7a;f1?M5dn2B8o95G429'567=h6=44i4294?=h9>n1<75rb364>5<3290;w)?7a;f1?M5dn2B8o95G429'567=h6=44i4294?=h9>n1<75rb365>5<3290;w)?7a;f1?M5dn2B8o95G429'567=h6=44i4294?=h9>n1<75rb366>5<3290;w)?7a;f1?M5dn2B8o95G429'567=h6=44i4294?=h9>n1<75rb367>5<3290;w)?7a;f1?M5dn2B8o95G429'567=h6=44i4294?=h9>n1<75rb360>5<3290;w)?7a;f1?M5dn2B8o95G429'567=h6=44i4294?=h9>n1<75rb361>5<3290;w)?7a;f1?M5dn2B8o95G429'567=h6=44i4294?=h9>n1<75rb0g4>5<3290;w)?7a;f1?M5dn2B8o95G429'567=h6=44i4294?=h9>n1<75rb0g5>5<3290;w)?7a;f1?M5dn2B8o95G429'567=h6=44i4294?=h9>n1<75rb0g6>5<3290;w)?7a;f1?M5dn2B8o95G429'567=h6=44i4294?=h9>n1<75rb0g7>5<3290;w)?7a;f1?M5dn2B8o95G429'567=h6=44i4294?=h9>n1<75rb0g0>5<3290;w)?7a;f1?M5dn2B8o95G429'567=h6=44i4294?=h9>n1<75rb0g1>5<3290;w)?7a;f1?M5dn2B8o95G429'567=h6=44i4294?=h9>n1<75rb0g2>5<3290;w)?7a;f1?M5dn2B8o95G429'567=h6=44i4294?=h9>n1<75rb0g3>5<3290;w)?7a;f1?M5dn2B8o95G429'567=h6=44i4294?=h9>n1<75rb0fe>5<3290;w)?7a;f1?M5dn2B8o95G429'567=h6=44i4294?=h9>n1<75rb0ff>5<3290;w)?7a;f1?M5dn2B8o95G429'567=h6=44i4294?=h9>n1<75rb0f0>5<3290;w)?7a;f1?M5dn2B8o95+e481?l212900e9m50;9j15<722e:;i4?::a5a4=83>1<7>t$0:b>a4<@:im7E=l4:&f1?4>o283:17b?8d;29?xd6l80;694?:1y'5=g=l;1C?nh4H2a7?!c22;1b8;4?::k7g?6=3`?;6=44o05g>5<54;294~"60h0o>6F6g;6;29?l2d2900e8>50;9l52b=831vn5<7s-;3m7j=;I1`b>N4k=1/i84=;h65>5<>i6?m0;66sm1bg94?2=83:p(<6n:e08L6ea3A9h86*j5;08m10=831b8n4?::k64?6=3f;5;|`2ga<72=0;6=u+19c9`7=O;jl0D>m;;%g6>7=n50z&25;h6`>5<1<729q/=5o5d39K7f`<@:i?7)k::39j03<722c?o7>5;h73>5<8`8g6>N4ko1C?n:4$d796>o3>3:17d:l:188m06=831d=:j50;9~f751290?6=4?{%3;e?b53A9hj6F=6=44i5a94?=n=90;66a>7e83>>{e::?1<7:50;2x 4>f2m80D>mi;I1`0>"b=380e9850;9j0f<722c><7>5;n34`?6=3th9?94?:583>5}#91k1h?5G3bd8L6e33-o>6?5f4783>>o3k3:17d;?:188k41c2900qo<<3;290?6=8r.:4l4k2:J0gc=O;j>0(h;52:k72?6=3`>h6=44i4294?=h9>n1<75rb311>5<3290;w)?7a;f1?M5dn2B8o95+e481?l212900e9m50;9j15<722e:;i4?::a667=83>1<7>t$0:b>a4<@:im7E=l4:&f1?4>o283:17b?8d;29?xd5;90;694?:1y'5=g=l;1C?nh4H2a7?!c22;1b8;4?::k7g?6=3`?;6=44o05g>5<55;294~"60h0o?6F6g;6;29?l202900e9m50;9j15<722e:;i4?::a6a1=83?1<7>t$0:b>a5<@:im7E=l4:&f1?4>o3k3:17d;?:188k41c2900qo0(h;52:k72?6=3`><6=44i5a94?=n=90;66a>7e83>>{e:m>1<7;50;2x 4>f2m90D>mi;I1`0>"b=380e9850;9j02<722c?o7>5;h73>5<8`8g7>N4ko1C?n:4$d796>o3>3:17d:8:188m1e=831b9=4?::m23a<722wi>i=50;794?6|,82j6i=4H2ae?M5d<2.n97<4i5494?=n<>0;66g;c;29?l372900c<9k:188yg4c:3:197>50z&25;h64>5<>i6?m0;66sm2e294?3=83:p(<6n:e18L6ea3A9h86*j5;08m10=831b8:4?::k7g?6=3`?;6=44o05g>5<55;294~"60h0o96F50;9j52e=831d=:j50;9~f7b6290>6=4?{%3;e?b43A9hj6F=6=44i5594?=n6<729q/=5o53bg8L6ea3A9h86g;9;29?l7503:17b?86;29?xd5k;0;6>4?:1y'5=g=;jo0D>mi;I1`0>o313:17d?=8;29?j70>3:17pl=b983>1<729q/=5o51208L6ea3A9h86g;9;29?l352900e<6<:188k4112900qo3:187>50z&22900e8<50;9j5=5=831d=:850;9~f7e729086=4?{%3;e?5dm2B8ok5G3b68m1?=831b=?650;9l520=831vn?l;:187>5<7s-;3m7?<2:J0gc=O;j>0e9750;9j17<722c:4>4?::m233<722wi>oh50;194?6|,82j6>mj;I1`b>N4k=1b844?::k26=<722e:;;4?::a6g4=83>1<7>t$0:b>4553A9hj6F>7>5;h3;7?6=3f;<:7>5;|`1f`<72:0;6=u+19c97fc<@:im7E=l4:k7=?6=3`;947>5;n342?6=3th9n=4?:583>5}#91k1=><4H2ae?M5d<2c?57>5;h71>5<5<53;294~"60h08oh5G3bd8L6e33`>26=44i00;>5<8`8277=O;jl0D>m;;h6:>5<<1<75rb3``>5<4290;w)?7a;1`a>N4ko1C?n:4i5;94?=n9;21<75`16494?=zj;kh6=4;:183!7?i3;8>6F>o60:0;66a>7783>>{e:kh1<7=50;2x 4>f2:in7E=lf:J0g1=n<00;66g>2983>>i6??0;66sm2`c94?2=83:p(<6n:011?M5dn2B8o95f4883>>o2:3:17d?73;29?j70>3:17pl=b`83>6<729q/=5o53bg8L6ea3A9h86g;9;29?l7503:17b?86;29?xd5i10;694?:1y'5=g=9:80D>mi;I1`0>o313:17d;=:188m4>42900c<99:188yg4bk3:197>50z&25;h64>5<>i6?m0;66sm2d`94?3=83:p(<6n:e18L6ea3A9h86*j5;08m10=831b8:4?::k7g?6=3`?;6=44o05g>5<55;294~"60h0o?6F6g;6;29?l202900e9m50;9j15<722e:;i4?::a6`?=83?1<7>t$0:b>a5<@:im7E=l4:&f1?4>o3k3:17d;?:188k41c2900qo0(h;52:k72?6=3`><6=44i5a94?=n=90;66a>7e83>>{e:l=1<7;50;2x 4>f2m90D>mi;I1`0>"b=380e9850;9j02<722c?o7>5;h73>5<8`8g7>N4ko1C?n:4$d796>o3>3:17d:8:188m1e=831b9=4?::m23a<722wi>h;50;794?6|,82j6i=4H2ae?M5d<2.n97<4i5494?=n<>0;66g;c;29?l372900c<9k:188yg4b<3:197>50z&25;h64>5<>i6?m0;66sm2d194?3=83:p(<6n:e18L6ea3A9h86*j5;08m10=831b8:4?::k7g?6=3`?;6=44o05g>5<54;294~"60h0o86F0(h;56:k72?6=3`?;6=44i05`>5<8`8g6>N4ko1C?n:4$d796>o3>3:17d:l:188m06=831d=:j50;9~f70>290?6=4?{%3;e?b53A9hj6F=6=44i5a94?=n=90;66a>7e83>>{e:1o1<7:50;2x 4>f28997E=lf:J0g1=n<00;66g:2;29?l7?;3:17b?86;29?xd50m0;694?:1y'5=g=9:80D>mi;I1`0>o313:17d;=:188m4>42900c<99:188yg4?k3:187>50z&22900e8<50;9j5=5=831d=:850;9~f7>e290?6=4?{%3;e?74:2B8ok5G3b68m1?=831b9?4?::k2<6<722e:;;4?::a6=g=83>1<7>t$0:b>4553A9hj6F>7>5;h3;7?6=3f;<:7>5;|`13g<72=0;6=u+19c9564<@:im7E=l4:k7=?6=3`?96=44i0:0>5<8`8277=O;jl0D>m;;h6:>5<<1<75rb35:>5<3290;w)?7a;306>N4ko1C?n:4i5;94?=n=;0;66g>8283>>i6??0;66sm26:94?2=83:p(<6n:011?M5dn2B8o95f4883>>o2:3:17d?73;29?j70>3:17pl=7683>1<729q/=5o51208L6ea3A9h86g;9;29?l352900e<6<:188k4112900qo=?9;290?6=8r.:4l4>339K7f`<@:i?7d:6:188m04=831b=5=50;9l520=831vn>>7:187>5<7s-;3m7?<2:J0gc=O;j>0e9750;9j17<722c:4>4?::m233<722wi?=950;694?6|,82j6<==;I1`b>N4k=1b844?::k66?6=3`;3?7>5;n342?6=3th8<;4?:583>5}#91k1=><4H2ae?M5d<2c?57>5;h71>5<5<54;294~"60h0:??5G3bd8L6e33`>26=44i4094?=n9191<75`16494?=zj;l=6=4;:183!7?i3;8>6F>o60:0;66a>7783>>{e:o?1<7:50;2x 4>f28997E=lf:J0g1=n<00;66g:2;29?l7?;3:17b?86;29?xd5n=0;694?:1y'5=g=9:80D>mi;I1`0>o313:17d;=:188m4>42900c<99:188yg4a;3:187>50z&22900e8<50;9j5=5=831d=:850;9~f7`5290?6=4?{%3;e?74:2B8ok5G3b68m1?=831b9?4?::k2<6<722e:;;4?::a70d=83?1<7>t$0:b>a5<@:im7E=l4:&f1?4>o3k3:17d;?:188k41c2900qo=:9;291?6=8r.:4l4k5:J0gc=O;j>0(h;56:k72?6=3`><6=44i4294?=n9>i1<75`16f94?=zj:?j6=4::183!7?i3n87E=lf:J0g1=#m<097d:9:188m11=831b8n4?::k64?6=3f;5;|`01f<72<0;6=u+19c9`6=O;jl0D>m;;%g6>7=n50;9l52b=831vn>;k:186>5<7s-;3m7j<;I1`b>N4k=1/i84=;h65>5<>o283:17b?8d;29?xd4=l0;684?:1y'5=g=l:1C?nh4H2a7?!c22;1b8;4?::k73?6=3`>h6=44i4294?=h9>n1<75rb27e>5<2290;w)?7a;f0?M5dn2B8o95+e481?l212900e9950;9j0f<722c><7>5;n34`?6=3th8:=4?:483>5}#91k1h>5G3bd8L6e33-o>6?5f4783>>o3?3:17d:l:188m06=831d=:j50;9~f606290>6=4?{%3;e?b43A9hj6F=6=44i5594?=n0<729q/=5o5d29K7f`<@:i?7)k::39j03<722c?;7>5;h6`>5<n6=4::183!7?i3n87E=lf:J0g1=#m<097d:9:188m11=831b8n4?::k64?6=3f;5;|`00f<72<0;6=u+19c9`6=O;jl0D>m;;%g6>7=n50;9l52b=831vn>:m:186>5<7s-;3m7j<;I1`b>N4k=1/i84=;h65>5<>o283:17b?8d;29?xd4h6=44i4294?=h9>n1<75rb26b>5<2290;w)?7a;f0?M5dn2B8o95+e481?l212900e9950;9j0f<722c><7>5;n34`?6=3th8844?:483>5}#91k1h>5G3bd8L6e33-o>6?5f4783>>o3?3:17d:l:188m06=831d=:j50;9~f620290>6=4?{%3;e?b43A9hj6F=6=44i5594?=n0<729q/=5o5d49K7f`<@:i?7)k::79j03<722c?;7>5;h73>5<5<53;294~"60h08oh5G3bd8L6e33`>26=44i00;>5<8`80g`=O;jl0D>m;;h6:>5<5<7>54;294~"60h0:??5G3bd8L6e33`>26=44i4094?=n9191<75`16494?=zj:9j6=4<:183!7?i39hi6F<1<75rb213>5<3290;w)?7a;306>N4ko1C?n:4i5;94?=n=;0;66g>8283>>i6??0;66sm32;94?5=83:p(<6n:2af?M5dn2B8o95f4883>>o6:10;66a>7783>>{e;;o1<7:50;2x 4>f28997E=lf:J0g1=n<00;66g:2;29?l7?;3:17b?86;29?xd4;10;6>4?:1y'5=g=;jo0D>mi;I1`0>o313:17d?=8;29?j70>3:17pl<2b83>1<729q/=5o51208L6ea3A9h86g;9;29?l352900e<6<:188k4112900qo=<7;297?6=8r.:4l450z&22900e8<50;9j5=5=831d=:850;9~f65129086=4?{%3;e?5dm2B8ok5G3b68m1?=831b=?650;9l520=831vn><7:187>5<7s-;3m7?<2:J0gc=O;j>0e9750;9j17<722c:4>4?::m233<722wi?>;50;194?6|,82j6>mj;I1`b>N4k=1b844?::k26=<722e:;;4?::a770=83>1<7>t$0:b>4553A9hj6F>7>5;h3;7?6=3f;<:7>5;|`071<72:0;6=u+19c97fc<@:im7E=l4:k7=?6=3`;947>5;n342?6=3th8>94?:583>5}#91k1=><4H2ae?M5d<2c?57>5;h71>5<5<55;294~"60h0o?6F6g;6;29?l202900e9m50;9j15<722e:;i4?::a724=83?1<7>t$0:b>a5<@:im7E=l4:&f1?4>o3k3:17d;?:188k41c2900qo=81;291?6=8r.:4l4k3:J0gc=O;j>0(h;52:k72?6=3`><6=44i5a94?=n=90;66a>7e83>>{e;>:1<7;50;2x 4>f2m90D>mi;I1`0>"b=380e9850;9j02<722c?o7>5;h73>5<8`8g7>N4ko1C?n:4$d796>o3>3:17d:8:188m1e=831b9=4?::m23a<722wi?;k50;794?6|,82j6i=4H2ae?M5d<2.n97<4i5494?=n<>0;66g;c;29?l372900c<9k:188yg51l3:197>50z&25;h64>5<>i6?m0;66sm37a94?3=83:p(<6n:e18L6ea3A9h86*j5;08m10=831b8:4?::k7g?6=3`?;6=44o05g>5<55;294~"60h0o?6F6g;6;29?l202900e9m50;9j15<722e:;i4?::a7<6=83?1<7>t$0:b>a0<@:im7E=l4:&f1?4>o283:17d?8e;29?j70l3:17pl<8g83>0<729q/=5o5d79K7f`<@:i?7)k::39j03<722c?;7>5;h73>5<5<55;294~"60h0o:6F6g;6;29?l202900e8>50;9j52c=831d=:j50;9~f6>c290>6=4?{%3;e?b13A9hj6F=6=44i5594?=n=90;66g>7d83>>i6?m0;66sm39a94?3=83:p(<6n:e48L6ea3A9h86*j5;08m10=831b8:4?::k64?6=3`;5;n34`?6=3th84o4?:483>5}#91k1h;5G3bd8L6e33-o>6?5f4783>>o3?3:17d;?:188m41b2900c<9k:188yg5?i3:197>50z&22B8ok5G3b68 `3=:2c?:7>5;h64>5<n1<75rb2::>5<2290;w)?7a;f5?M5dn2B8o95+e481?l212900e9950;9j15<722c:;h4?::m23a<722wi?4650;794?6|,82j6i84H2ae?M5d<2.n97<4i5494?=n<>0;66g:0;29?l70m3:17b?8d;29?xd41>0;684?:1y'5=g=l?1C?nh4H2a7?!c22;1b8;4?::k73?6=3`?;6=44i05f>5<8`8g2>N4ko1C?n:4$d796>o3>3:17d:8:188m06=831b=:k50;9l52b=831vn>7::186>5<7s-;3m7j9;I1`b>N4k=1/i84=;h65>5<>o6?l0;66a>7e83>>{e;0>1<7;50;2x 4>f2m<0D>mi;I1`0>"b=380e9850;9j02<722c><7>5;h34a?6=3f;5;|`0=6<72<0;6=u+19c9`3=O;jl0D>m;;%g6>7=n0(h;52:k72?6=3`><6=44i4294?=n9>o1<75`16f94?=zj:3:6=4::183!7?i3n=7E=lf:J0g1=#m<097d:9:188m11=831b9=4?::k23`<722e:;i4?::a7=>=83?1<7>t$0:b>a0<@:im7E=l4:&f1?4>o283:17d?8e;29?j70l3:17pl<8683>0<729q/=5o5d79K7f`<@:i?7)k::39j03<722c?;7>5;h73>5<5<53;294~"60h0:>i5G3bd8L6e33-o>6<74ie;94?=nlh0;66a>7783>>{e;k91<7=50;2x 4>f288o7E=lf:J0g1=#m<0:56gk9;29?lbf2900c<99:188yg46>3:1?7>50z&2t$0:b>44c3A9hj6F5;hfb>5<8`826a=O;jl0D>m;;%g6>4b>i6??0;66sm18c94?5=83:p(<6n:00g?M5dn2B8o95+e482`>oc13:17djn:188k4112900qo?69;297?6=8r.:4l4>2e9K7f`<@:i?7)k::0f8ma?=831bhl4?::m233<722wi=4650;194?6|,82j6<N4k=1/i84>d:kg=?6=3`nj6=44o055>5<53;294~"60h0:>i5G3bd8L6e33-o>67783>>{e90<1<7=50;2x 4>f288o7E=lf:J0g1=#m<0:h6gk9;29?lbf2900c<99:188yg7>=3:1?7>50z&2t$0:b>44c3A9hj6F5;hfb>5<8`826a=O;jl0D>m;;%g6>4b>i6??0;66sm18094?5=83:p(<6n:00g?M5dn2B8o95+e482`>oc13:17djn:188k4112900qo?61;297?6=8r.:4l4>2e9K7f`<@:i?7)k::0f8ma?=831bhl4?::m233<722wi=4>50;194?6|,82j6<N4k=1/i84>d:kg=?6=3`nj6=44o055>5<53;294~"60h0:>i5G3bd8L6e33-o>67783>>{e91o1<7=50;2x 4>f288o7E=lf:J0g1=#m<0:h6gk9;29?lbf2900c<99:188yg7?l3:1?7>50z&2t$0:b>44c3A9hj6F5;hfb>5<8`826a=O;jl0D>m;;%g6>4b>i6??0;66sm27g94?2=83:p(<6n:00f?M5dn2B8o95+e48``>oc13:17djn:188mad=831d=:850;9~f77?290?6=4?{%3;e?75m2B8ok5G3b68 `3=:=1bh44?::kge?6=3`ni6=44o055>5<54;294~"60h0:>h5G3bd8L6e33-o>6?:4ie;94?=nlh0;66gkb;29?j70>3:17pl=6b83>0<729q/=5o513d8L6ea3A9h86*j5;3b?lb>2900eio50;9j`g<722coo7>5;n342?6=3th9=l4?:483>5}#91k1=?h4H2ae?M5d<2.n97?i;hf:>5<>ock3:17b?86;29?xd6j:0;684?:1y'5=g=9;l0D>mi;I1`0>"b=3;m7dj6:188mag=831bho4?::kgg?6=3f;<:7>5;|`137<72<0;6=u+19c957`<@:im7E=l4:&f1?463`n26=44iec94?=nlk0;66gkc;29?j70>3:17pl<1`83>6<729q/=5o513f8L6ea3A9h86*j5;33?lb>2900eio50;9l520=831vn?89:187>5<7s-;3m7?=e:J0gc=O;j>0(h;52b9j`<<722com7>5;hfa>5<8`826a=O;jl0D>m;;%g6>4b>i6??0;66sm1c794?5=83:p(<6n:00g?M5dn2B8o95+e482`>oc13:17djn:188k4112900qo<>e;290?6=8r.:4l4>2d9K7f`<@:i?7)k::368ma?=831bhl4?::kgf?6=3f;<:7>5;|`2f2<72=0;6=u+19c957c<@:im7E=l4:&f1?433`n26=44iec94?=nlk0;66a>7783>>{e:;:1<7;50;2x 4>f288m7E=lf:J0g1=#m<0:j6gk9;29?lbf2900eil50;9j`f<722e:;;4?::a5g?=83?1<7>t$0:b>44a3A9hj6F5;hfb>5<>i6??0;66sm3`f94?2=83:p(<6n:00f?M5dn2B8o95+e4865>oc13:17djn:188mad=831d=:850;9~f702290>6=4?{%3;e?75n2B8ok5G3b68 `3=9;1bh44?::kge?6=3`ni6=44iea94?=h9><1<75rb230>5<4290;w)?7a;31`>N4ko1C?n:4$d7967=nl00;66gka;29?j70>3:17pl<0183>6<729q/=5o513f8L6ea3A9h86*j5;01?lb>2900eio50;9l520=831vn?77:186>5<7s-;3m7?=f:J0gc=O;j>0(h;5219j`<<722com7>5;hfa>5<6=4::183!7?i3;9j6F>5fd883>>oci3:17djm:188mae=831d=:850;9~f675290>6=4?{%3;e?75n2B8ok5G3b68 `3=::1bh44?::kge?6=3`ni6=44iea94?=h9><1<75rb3de>5<2290;w)?7a;31b>N4ko1C?n:4$d7966=nl00;66gka;29?lbe2900eim50;9l520=831vn?78:186>5<7s-;3m7?=f:J0gc=O;j>0(h;5219j`<<722com7>5;hfa>5<=5fd883>>oci3:17djm:188mae=831d=:850;9~f676290>6=4?{%3;e?75n2B8ok5G3b68 `3=::1bh44?::kge?6=3`ni6=44iea94?=h9><1<75rb3df>5<2290;w)?7a;31b>N4ko1C?n:4$d7966=nl00;66gka;29?lbe2900eim50;9l520=831vn?79:186>5<7s-;3m7?=f:J0gc=O;j>0(h;5219j`<<722com7>5;hfa>5<=5fd883>>oci3:17djm:188mae=831d=:850;9~f677290>6=4?{%3;e?75n2B8ok5G3b68 `3=::1bh44?::kge?6=3`ni6=44iea94?=h9><1<75rb3dg>5<2290;w)?7a;31b>N4ko1C?n:4$d7966=nl00;66gka;29?lbe2900eim50;9l520=831vn?7::186>5<7s-;3m7?=f:J0gc=O;j>0(h;5219j`<<722com7>5;hfa>5<=5fd883>>oci3:17djm:188mae=831d=:850;9~f7?c290?6=4?{%3;e?75m2B8ok5G3b68 `3=ko1bh44?::kge?6=3`ni6=44o055>5<54;294~"60h0:>h5G3bd8L6e33-o>63:17pl=8083>1<729q/=5o513g8L6ea3A9h86*j5;32?lb>2900eio50;9j`g<722e:;;4?::a74?=83?1<7>t$0:b>44a3A9hj6F5;hfb>5<>i6??0;66sm31d94?3=83:p(<6n:00e?M5dn2B8o95+e4817>oc13:17djn:188mad=831bhn4?::m233<722wi>km50;794?6|,82j6<N4k=1/i84=3:kg=?6=3`nj6=44ie`94?=nlj0;66a>7783>>{e:;91<7=50;2x 4>f288o7E=lf:J0g1=#m<09>6gk9;29?lbf2900c<99:188yg7ek3:1?7>50z&21<7>t$0:b>44b3A9hj6F5;hfb>5<>oci3:17djm:188k4112900qo2b9K7f`<@:i?7)k::028ma?=831d=:850;9~f7d029096=4?{%3;e?75k2B8ok5G3b68 `3=991bh44?::m233<722wi>o;50;094?6|,82j6<N4k=1/i84>0:kg=?6=3f;<:7>5;|`1f6<72;0;6=u+19c957e<@:im7E=l4:&f1?773`n26=44o055>5<52;294~"60h0:>n5G3bd8L6e33-o>6<>4ie;94?=h9><1<75rb3ce>5<5290;w)?7a;31g>N4ko1C?n:4$d7955=nl00;66a>7783>>{e:hn1<7<50;2x 4>f288h7E=lf:J0g1=#m<0:<6gk9;29?j70>3:17pl=ac83>7<729q/=5o513a8L6ea3A9h86*j5;33?lb>2900c<99:188yg4f13:1>7>50z&2=<:181>5<7s-;3m7?=c:J0gc=O;j>0(h;5119j`<<722e:;;4?::a767=8381<7>t$0:b>44d3A9hj6F5;n342?6=3th8>k4?:383>5}#91k1=?m4H2ae?M5d<2.n97??;hf:>5<8`826f=O;jl0D>m;;%g6>46>i6??0;66sm33;94?4=83:p(<6n:00`?M5dn2B8o95+e4824>oc13:17b?86;29?xd4:>0;6?4?:1y'5=g=9;i0D>mi;I1`0>"b=3;;7dj6:188k4112900qo==5;296?6=8r.:4l4>2b9K7f`<@:i?7)k::028ma?=831d=:850;9~f7e329096=4?{%3;e?75k2B8ok5G3b68 `3=991bh44?::m233<722wi?>j50;094?6|,82j6<N4k=1/i84>0:kg=?6=3f;<:7>5;|`167<72?0;6=u+19c9566<@:im7E=l4:&f1?423`n26=44iec94?=nlk0;66gkc;29?j7513:17b?86;29?xd6jk0;6;4?:1y'5=g=9::0D>mi;I1`0>"b=38>7dj6:188mag=831bho4?::kgg?6=3f;957>5;n342?6=3th8mo4?:9594?6|@:i?7)?7a;34b>\3=3kp47<9:e821?7428h1i7?9:0695f0=#m80>7)k=:49'a6<23-ii6i>4$d491>"b?3?0(h655:&f=?3<,lk196*jb;78 `e==2.nh7;4$dg91>"bn3?0(k>55:&e5?3<,o8196*i3;78 c2==2.m97;4$g491>"a?3?0(k655:&e=?3<,ok196*ib;78 ce==2.mh7;4$gg91>"an3?0(<>?:49'557==2.:"68?0>7)??7;78 46?2<1/==755:&24d<23-;;n7;4$02`>0=#99n196*>0d86?!77n3?0("69?0>7)?>7;78 47?2<1/=<755:&25d<23-;:n7;4$03`>0=#98n196*>1d86?!76n3?0(<?4:;%317?3<,88?685+13791>"6:?087)?74;61?!c32<1/=5853:&0g<<6091/?no51928j4n0:2>4444=831b=5650;9j<0<72-;k1<65f3483>!70j39=7c?8a;38?l53290/=:l5379m52g=:21b?>4?:%34f?513g;5<#9>h1?;5a16c90>=n;80;6)?8b;15?k70i3?07d=?:18'52d=;?1e=:o56:9j6c<72-;k1465f2e83>!70j39=7c?8a;;8?l26290/=:l5419m52g=821b?k4?:%34f?273g;5<#9>h18=5a16c96>=n;m0;6)?8b;63?k70i3907d=l:18'52d=<91e=:o54:9j7g<72-;k1:65f3883>!70j3>;7c?8a;58?l5?290/=:l5419m52g=021b;i4?:%34f?1d3g;4;h5a>5<#9>h1;n5a16c95>=n?00;6)?8b;5`?k70i3807d97:18'52d=?j1e=:o53:9j32<72-;k1965f7483>!70j3=h7c?8a;48?l13290/=:l57b9m52g=?21b;>4?:%34f?1d3g;5<#9>h1;n5a16c9=>=n?80;6)?8b;5`?k70i3k07d9?:18'52d=?j1e=:o5b:9j2`<72-;k1h65f6b83>!70j3=h7c?8a;g8?l0e290/=:l57b9m52g=n21b:l4?:%34f?1d3g;47<3`<36=4+16`93f=i9>k1=?54i7594?"6?k07`827>=n>?0;6)?8b;5`?k70i3;?76g95;29 41e2>i0b<9n:078?l>3290/=:l57b9m52g=9?10e5=50;&23g<0k2d:;l4>7:9j<7<72-;5$05a>2e5<#9>h1;n5a16c95d=l1<7*>7c84g>h6?h0:n65f7d83>!70j3=h7c?8a;3`?>o0i3:1(<9m:6a8j41f28n07d8i:18'52d=?j1e=:o51d98m32=83.:;o48c:l23d<6n21b4n4?:%34f?>e3g;4;h:b>5<#9>h14o5a16c95>=n000;6)?8b;:a?k70i3807d67:18'52d=0k1e=:o53:9l=1<72-;k1=65`9083>!70j3387c?8a;08?j?7290/=:l5929m52g=;21d4k4?:%34f??43g;5<#9>h15>5a16c91>=h1m0;6)?8b;;0?k70i3<07b7l:18'52d=1:1e=:o57:9l=g<72-;<3f3j6=4+16`9=6=i9>k1565`9883>!70j3387c?8a;c8?j??290/=:l5929m52g=j21d5:4?:%34f??43g;5<#9>h15>5a16c9`>=h1<0;6)?8b;;0?k70i3o07b6k:18'52d=1:1e=:o5f:9lg6<72-;k1=65fc`83>>o6000;66g>o2i3:1(<9m:4;8j41f2910e8650;&23g<212d:;l4>;:k63?6=,8=i6874n05b>7=7c86=>h6?h0876g:5;29 41e2<30b<9n:598m02=83.:;o4:9:l23d<232c=?7>5$05a>0?56`>7`84?>o193:1(<9m:4;8j41f2110e;>50;&23g<212d:;l46;:k6b?6=,8=i6874n05b>d=7c86=>h6?h0i76g:d;29 41e2<30b<9n:b98m0e=83.:;o4:9:l23dn7>5$05a>0?56`>7`8e?>o??3:1(<9m:948j41f2910co650;&23g4=1<7*>7c8a3>h6?h0976am3;29 41e2k=0b<9n:298kg4=83.:;o4m7:l23d<332ei=7>5$05a>g17`85?>ifn3:1(<9m:c58j41f2>10clk50;&23g<=7c8a3>h6?h0j76anb;29 41e2k=0b<9n:c98kd?=83.:;o4m7:l23d5$05a>g17`8f?>if>3:1(<9m:c58j41f2o10cl;50;&23g0:9le1<72-;5$05a>g15<#9>h1n:5a16c956=7c8a3>h6?h0:865`a183>!70j3h<7c?8a;36?>ien3:1(<9m:c58j41f28<07blj:18'52d=j>1e=:o51698kgb=83.:;o4m7:l23d<6021dnn4?:%34f?d03g;4g<3fhj6=4+16`9f2=i9>k1=o54oc;94?"6?k0i;6`>7`82g>=hj<0;6)?8b;`4?k70i3;o76ana;29 41e2k=0b<9n:0g8?j?a290/=:l5b69m52g=9o10cn650;&23g4=7c8`3>h6?h0976al4;29 41e2j=0b<9n:298yv2e83:1:vP;b19>63c=lh16>;m5d89>624=lj16>;85dc9>633=l01v9oj:1853~X4m?1U?i64^5`;?[2e>2T8h:5Q4c18Z1063W>i;6P;639]0=2k?;_1gb>X4ll1U?ij4^2f`?[2d:2T?o<5Q4b28Z1da3W>ii6P;be9]0geX3i01U8l64^5c4?[2f>2T?m85Q4`6896b72m=01>ln:42896ga2<:01>l6:42896d?2<:01>l8:42896e52<:01>m>:42897d?2<801?l9:40897d32<801?l=:40897d72<801?oj:40897gd2<801?on:40897g?2<801?6j:40897>c2<801?6l:40897>e2<801?6n:408971e2<801?9n:408971>2<801?97:40897102<801>>6:408966?2<801>>8:40896612<801>>::40897`12<801?h::40897`32<801?h<:40897`52<801>==:40896572<801><9:40896432<801>om:97896ge282270=nb;1`3>;4ik0>m63;4ik0>;63;4ik0>963;4ik0=?63;4ik0==63;4ik0>j63;4ik0>h63;4ik0>n63;4ik03;6s|4c094?5|V=h970=ma;34g>;4io0:;n5rs353>5<5sW>>:63=71823a=z{=i?6=4<{_6`0>;49h0o563<188g=>{t;51k0?:63;4j90?:63;4j00?:63;4j>0?:63=15872>;59:0?:63=13872>;5980?:63=11872>;58o0?:63=0d872>;58m0?:63=0b872>;5=j0?:63=5c872>;5=h0?:63=58872>;5=10?:63=56872>;5=?0?:63=54872>;5==0?:63=4`872>;5<00?:63=49872>;5<>0?:63=47872>;5<<0?:63=45872>;5<:0?:63=43872>;6l:0?:63>d3872>;6l80?:63>d1872>;6ko0?:63>cd872>;6km0?:63>cb872>;6kk0?:63>c`872>;5l10?:63=d6872>;5l<0?:63=d5872>;5l?0?:63=d2872>;5l;0?:63=d1872>;5ko0?:63=d0872>;5mj0?:63=ec872>;5mh0?:63=e8872>;5m10?:63=e6872>;5m?0?:63=e4872>;5m=0?:63=e2872>;5>o0?:63=71872>;5>h0?:63=68872>;4190?:63<8g872>;40l0?:63<8e872>;40j0?:63<8c872>;40h0?:63<88872>;4110?:63<96872>;41?0?:63<94872>;41=0?:63<92872>;41;0?:63<90872>;4010?:63<86872>;4ik0?m6s|30594?4|V=?h70=>7;34`>{t;49>0?:63<17872>;4jj0?:63;4jk0?:63;4k80?:63>ae872>;6ij0?:63>ac872>;6ih0?:63>a8872>;6i10?:63>a6872>;6i?0?:63>a4872>;6n00?:63>f9872>;6n>0?:63>f7872>;6n<0?:63>f5872>;6n:0?:63>f3872>;6n80?:63>e6872>;6m?0?:63>e4872>;6m=0?:63>e2872>;6m;0?:63>e0872>;6m90?:63>dg872>;6ll0?:63=39872>;5;>0?:63=37872>;5;<0?:63=35872>;5;:0?:63=33872>;5;80?:63=31872>;4=k0?:63<58872>;4=h0?:63<5b872>;4=m0?:63<5d872>;4=o0?:63<61872>;4>80?:63<4g872>;4;4;4;4<>0?:63<49872>;4?:0?:63<73872>;4?80?:63<71872>;4>o0?:63<6d872>;4>m0?:63<6b872>;4>k0?:63{t;>n1<783;{t;>h1<7{t;>31<7{t;>=1<7{t;1<1<703;;70=67;34`>{t;1>1<7>3;{t;181<7<3;{t;1:1<7:3;{t;>o1<7{t<;21<77}Y<9901>om:7c8yv25=3:1>vP;039>7dd=>01v9<;:181[279278mo498:p075=838pR9>?;<1bf?003ty?>?4?:3y]7c`<5:ki6;84}r614?6=:rT8ji523``920=z{=;m6=4={_1eg>;4ik0386s|40g94?4|V:li70=nb;:0?xu39m0;6?uQ3gc896ge2120q~:>c;296~X4n016?ll5839~w17e2909wS=i8:?0eg2`:47>52z\0b0=:;hh1;h5rs534>5<5sW9m863{t<8?1<77}Y;o;01>om:768yv26;3:1>vP7dd=0j1v9?=:181[5bn278mo48d:p047=838pR>kj;<1bf?1e3ty?==4?:3y]7`b<5:ki6:74}r63b?6=:rT8in523``93==z{=:n6=4={_1ff>;4ik0<;6s|41f94?4|V:oj70=nb;55?xu38j0;6?uQ3d;896ge2>?0q~:=f;296~X38h16?ll5759~w14b2909wS:?9:?0eg249n7>52z\743=:;hh1;<5rs50b>5<5sW>;963{t<;31<77}Y;o901>om:7f8yv26>3:1>vP7dd=>j1v9>m:181[5b?278mo49b:p563=833p1>j>:05;?84ei3>270270<87;6:?857=3>270270==4;6:?xu51j0;6?u228`915=::0n1=:84}r1a2?6=9hq6>4l516a896d>28=o70h70h70h70h70;5l80?o63=eb87g>;5mk0?o63=e`87g>;5m00?o63=e987g>;5m>0?o63=e787g>;5m<0?o63=e587g>;5m:0?o63=6g823f=::>:1=:m4=34b>1e<5;<269m4}r0:f?6=7e9>63e=lj16?lj5d89>633=lh1v>li:181<~;49>0?o63<1787g>;4k80:;i521`f90f=:9hi18n521``90f=:9hk18n521`;90f=:9h218n521`590f=:9h<18n521`790f=:9o318n521g:90f=:9o=18n521g490f=:9o?18n521g690f=:9o918n521g090f=:9o;18n521d590f=:9l<18n521d790f=:9l>18n521d190f=:9l818n521d390f=:9l:18n521ed90f=:9mo18n5222:90f=:::=18n5222490f=:::?18n5222690f=:::918n5222090f=:::;18n5222290f=z{:;36=4<{<123?37349::7;?;<12=?70>2wx?<850;1x967128=o70=>a;fb?85613nj7p}6}:;k;19=523c2952b<5:km6994}r1a5?6=:r78n<4>7e9>7g5=l01v>lm:18085ek3?;70=ma;64?85ej3;3ty8mk4?:2y>7g6==916?lh516f896d42mk0q~=ma;297~;4jh0:;i523c`915=:;ko1hl5rs2`1>5<3s49i57?8c:?0f=<6?j16?o9516a896d428==7p}70|5:h36<9k;<020?2d348:?7:l;<026?2d348:=7:l;<024?2d348;j7:l;<03a?2d348;h7:l;<03g?2d348>o7:l;<06f?2d348>m7:l;<06=?2d348>47:l;<063?2d348>:7:l;<061?2d348>87:l;<07e?2d348?57:l;<07;40o0:;h5239g952c<5:2o6<9j;<1;g?70m2784o4>7d9>7=g=9>o01>66:05f?85>03;41b349287?8e:?0=6<6?l16?4<516g896?628=n70=78;34a>;40>0:;h523`f9`d=:;hh1=564}r1a`?6=;r78o?4>7b9>7f7=9>i01>lj:055?xu4k90;641c349>n7:l;<16=?70k2789l4;c:?01f<3k2789i4;c:?01`<3k2789k4;c:?025<3k278:<4;c:?00c<3k2788h4;c:?00f<3k2788o4;c:?00a<3k2788l4;c:?00<<3k2788:4;c:?00=<6?j16?:=54b9>724=726=73c=73e=w0?nd;73?87a13;ag8ge>;6j80o563>b28gg>{t9h>1<7=t=0cg>41c349:?7jn;<134?bf3ty:mh4?:3y>5de==916=lh51648yv7f;3:1?v3>ab823a=:;881h4522gd9`<=z{8h;6=4={<3bf?3734;i=7?86:p5d4=839p1ag<58h<6i74=0`:>ae<58hi6im4}r3b5?6=;r7:ml4>7e9>747=l016>kk5d89~w4d32909w0?n9;73?87e=3;<:6s|1`294?5|58k26<9k;<125?be348mi7jm;|q2f3<72;q6=l65519>5g1=9><0q~?6f;297~;6i10:;i523029`<=::on1h45rs0`;>5<5s4;j;7;?;<3a=?70>2wx=4k50;1x94g028=o70=>0;fa?84al3ni7p}>b`83>7}:9h<19=521ca952053z?2e3<6?m16?=h5d89>6ce=l01v{t90i1<7=t=0c6>41c349;j7jm;<0eg?be3ty99>4?:4y>642==916>8m516f897712mk01??7:e;8977f2mi0q~5<5s48:?7;?;<022?70>2wx>=o50;1x977428=o70<68;f:?84?=3nh7p}=1683>7}::8819=5220:952053z?157<6?m16>495d`9>6=2=lh1v??6:18584693?;70<>a;342>;59j0om63=1d8g=>;5:90oo63=238gg>{t:921<7=t=332>41c3482;7j6;<0;0?b>3ty9=o4?:3y>646==916>i:05g?84>>3n270<73;f:?xu59o0;6?u221g915=::;:1=:84}r031?6=;r79

7e9>6<3=lh16>5<5d`9~w7462909w03483>7j6;|q160<72;q6>=m5519>670=9><0q~5<5s48>o7;?;<07e?70l2wx>9>50;0x973e2<:01?:6:05g?xu5=;0;69u224`952b<5;;=6i74=33;>ag<5;;j6il4}r00b?6=:r799l4:0:?10=<6?m1v?;>:180842i3;;59h0om6s|22g94?4|5;?268>4=364>41c3ty99=4?:3y>60?=9>n01??n:e;8yv44l3:1>v3=59864>;55<2s48>47?8d:?15f?4kb:p66e=838p1?;8:428972228=o7p}=4d83>1}::<=1=:j4=33f>ad<5;8;6io4=301>ag52z?113<28279894>7e9~w72c2908w0<:6;34`>;5:90o563=238g=>{t::k1<706<5;>86<9k;|q10f<72:q6>8;516f897442m301?<9:ec8yv4413:1>v3=55864>;5<;0:;i5rs36a>5<5s48>87?8d:?1632<:017e9>5d`=l016=o?5d`9>5g5=lk1v{t9lo1<7=t=0d4>41c34;i=7jm;<3a7?bf3ty:hl4?:3y>5c0==916=h:516f8yv7bl3:1>v3>f7823a=:9k91h45rs0f:>5<5s4;m97;?;<3f7?70l2wx=hm50;7x94`228=o70?m5;f:?87e?3nj70?m9;fa?87ej3ni7p}>d983>7}:9o>19=521d0952b54z?2b1<6?m16=o95dc9>5g?=lh16=ol5d`9~w4b02909w0?i3;73?87b93;34;in7j6;|q2`3<72;q6=k<5519>5`6=9>n0q~?j9;297~;6n;0:;i521ca9`<=:9kl1hl5rs0f6>5<5s4;m=7;?;<3gb?70l2wx=h650;0x94`628=o70?mf;f:?xu5:o0;6?u225c915=:::21=:j4}r01a?6=:r79844:0:?172<6?m1v?{t:;i1<706<5;9>6<9k;|q16g<72;q6>985519>662=9>n0q~<=a;296~;5<<0><63=32823a=z{;826=4={<070?373488>7?8d:p67>=838p1?:<:428975628=o7p}=2683>7}::=819=52222952b52z?2a2<2827:h>4>7e9~w4e?2909w0?j6;73?87c:3;68>4=0f2>41c3ty:o;4?:3y>5`2==916=i>516f8yv7d=3:1>v3>e2864>;6ko0:;i5rs0a7>5<5s4;n>7;?;<3`a?70l2wx=n=50;0x94c62<:01{t9m>1<7?t=0ff>41c3ty9i?4?:4y>5a5==916>hm516f894>e2m301?6::e;896ge2:=0q~?ia;296~;6l;0><63>8c8233=z{8li6=4={<3g5?3734;3o7?86:p5ce=838p1c28==7p}>fe83>7}:9jl19=5219g952052z?2g`<2827:4k4>779~w4`a2909w0?ld;73?87>83;<:6s|21294?4|58ih68>4=0;2>4113ty9<<4?:3y>5fd==916=4<51648yv47:3:1>v3>c`864>;61:0:;;5rs24b>5<3s48847;?;<147?70l27:594k9:?0eg<392wx>8j50;0x97502<:01<7;:055?xu5=l0;6?u2224915=:90?1=:84}r06b?6=:r79?84:0:?2=3<6??1v?8?:181844<3?;70?67;342>{t:?;1<706<58336<99;|q127<72;q6>><5519>5<0q~<93;296~;5;80><63>9`8233=z{;<70<70<70<70<70<70<70<70<70<70=nd;fa?841=3;<:63=9e8g=>{t:h=1<706<5;i86<99;|q1g`<72=q6>i6516f897cd2<:01?77:ea897e32m30q~0><63=c38233=z{;io6=4;{<0g3?70l279io4:0:?1==1}::m?1=:j4=3g:>06<5;3<6il4=3`6>a?52z?1`1<28279nk4>779~w7ef290?w0;5m10><63=978gg>;5j:0o56s|2`794?4|5;n=68>4=3a2>4113ty9on4?:5y>6a0=9>n01?kn:42897?02mi01?l8:e;8yv4f:3:1>v3=d2864>;5jl0:;;5rs3a:>5<3s48o?7?8d:?1a2<282795;4kb:?1f4l?50;0x97b52<:01?lk:055?xu5k10;69u22e0952b<5;o=68>4=3;6>ae<5;km6i74}r0:b?6=:r79h=4:0:?1fg<6??1v?m9:18784c83;;51=0on63=ac8g=>{t:0o1<706<5;hj6<99;|q1g0<72=q6>nh516f897c42<:01?7;:ec897g>2m30q~<63=bb8233=z{;i<6=4;{<0g5?70l279i84:0:?1=0=838p1?m<:5;897d?28==7p}=c583>7}::j91=?64=3a7>4113ty9n;4?:2y>6f4=<016>o65489>6g0=9><0q~5522c:95=5<5;h26<99;|q1f1<72:q6>n?5489>6g0=<016>o:51648yv4e?3:1?v3=c0826==::k<1=5=4=3`4>4113ty9n?4?:2y>6f6=<016>o:5489>6g4=9><0q~5522c695=5<5;h>6<99;|q1f5<72:q6>oh5489>6g4=<016>o>51648yv4e;3:1?v3=bg826==::k81=5=4=3`0>4113ty9mh4?:2y>6gc=<016>o>5489>6dc=9><0q~5522c295=5<5;h:6<99;|q1ef<72:q6>oj5489>6dc=<016>lm51648yv4fn3:1?v3=be826==::ho1=5=4=3ce>4113ty9ml4?:2y>6ge=<016>lm5489>6dg=9><0q~5522`a95=5<5;ko6<99;|q1e=<72:q6>ol5489>6dg=<016>l651648yv4fj3:1?v3=bc826==::hk1=5=4=3ca>4113ty9m44?:2y>6gg=9;201?o7:0:0?84f13;<:6s|2d394?3|5;oi6<9k;<3;g?b>34;3n7jn;<0;1?be349jn7=:;|q1a5<72ho516f894>c2m301<6l:ec897>32mi01>om:268yv4cn3:19v3=e8823a=:91o1h45219f9`d=::1>1ho523``976=z{;nn6=4:{<0f4kc:?0eg<4:2wx>ij50;7x97c028=o70?60;f:?87?n3nj70<73;fa?85fj39:7p}=db83>0}::l<1=:j4=0;2>a?<583;6io4=3:1>ae<5:ki6>>4}r0gf?6==r79i84>7e9>5<4=l016=4?5d`9>6=4=lk16?ll52g9~w7bf290>w0;61:0o563>938ge>;5080on63{t:m31<7:t=3g0>41c34;2?7jn;<0;5?bf349jn7;h5519>626==916>:<51648yv41n3:1>v3=6g823a=::>81h45rs34a>5<5s48=m7;?;<05g?70>2wx>;650;4x970f28=o70<9e;fa?841k3ni70<82;fa?841>3n270<95;fa?xu5>m0;6?u227;915=::?o1=:84}r053?6=>r79:44>7e9>63c=l016>;m5d`9>624=lh16>;85d`9>633=lj1v?66:18184?m3>270<7d;342>{t:091<74>4348247?86:p6l3nj7p}=8983>7}::1n1845229a95207>52z?14951648yv4??3:1>v3=8b87=>;50k0:;;5rs3;2>5<5s483o7?73:?1=3<6??1v?69:18184?j3>270<7a;342>{t:0:1<74>4348297?86:p6=`=838p1?6n:0:0?84><3;<:6s|26494?4|5;=i6974=35b>4113ty94=4?:3y>62d=91901?6::055?xu5100;6?u226`9520<5;3o6il4}r041?6=:r79;l4;9:?13<<6??1v?9i:181840i3;3?63=858233=z{;=?6=4={<04=?2>348<47?86:p62c=838p1?96:0:0?84?;3;<:6s|26194?4|5;=36974=354>4113ty9;i4?:3y>62>=91901?6=:055?xu5?j0;6?u226595=5<5;2:6<99;|q041<72;q6?=75489>75>=9><0q~=?e;296~;4800:4>52301952052z?04<<6??16?<75db9~w6642909w0=?8;6:?857?3;<:6s|31f94?4|5::36<6<;<126?70>2wx?=<50;0x96602=301>>9:055?xu48j0;6?u231595=5<5:;:6<99;|q044<72;q6?=85489>753=9><0q~=?b;296~;48?0:4>52302952052z?040<60:16?=h51648yv4a93:1>v3=f787=>;5n<0:;;5rs3da>5<5s48m:7?73:?045<6??1v>?;:18184a>3;<:63<188gf>{t:o:1<71?<5;l?6<99;|q1bd<72;q6>k;5191897`a28==7p}=eg83>7}::o>184522g1952052z?1b1<60:16>kk51648yv4bm3:1>v3=f287=>;5n;0:;;5rs3d;>5<5s48m?7?73:?1ba<6??1v?h8:18184a:3;3?63=fb8233=z{:=?6=4>ez?01g<3?278944;7:?01d<3?2789n4;7:?01a<3?2789h4;7:?01c<3?278:=4;7:?024<3?2788k4;7:?00`<3?2788n4;7:?00g<3?2788i4;7:?00d<3?278844;7:?002<3?278854;7:?036<3?278;?4;7:?034<3?278;=4;7:?02c<3?278:h4;7:?02a<3?278:n4;7:?02g<3?278=l4>779>7dd=;j201>om:bc8yv5383:18v3<5c864>;4<00:;i523029`f=:;;31h45rs271>5<4s49>n7?8d:?02a<28279ji4kc:p76c=83>p1>;6:428962028=o70=?f;f`?855=3n27p}<5183>6}:;<31=:j4=24a>06<5;lh6im4}r10b?6=771=l01v>;>:180852i3;;5nj0om6s|35394?2|5:?h68>4=26b>41c349:<7jn;<11f?b>3ty89>4?:2y>70e=9>n01>8j:42897`c2mk0q~=;2;290~;4=m0><63<4c823a=:;8;1hn5233f9`<=z{:??6=4<{<16`?70l278:k4:0:?1b`:l:05g?85693nj70==f;f:?xu4=<0;6>u234g952b<5:=;68>4=3df>ag54z?01c<282788i4>7e9>744=lj16?>?5d89~w6312908w0=:f;34`>;4?80><63=fg8gg>{t;=?1<7:t=243>06<5:>n6<9k;<126?bf3498?7j6;|q012<72:q6?;>516f896152<:01?hi:ec8yv53>3:18v3<60864>;45<4s49==7?8d:?036<28278<=4k9:p775=838p1>:i:428965d28==7p}<2383>7}:;=o19=5232`952052z?00f<28278?44>779~w67a2909w0=;b;73?85403;<:6s|33394?4|5:>o68>4=21b>4113ty8=h4?:3y>71g==916?>951648yv56l3:1>v3<48864>;4;?0:;;5rs23a>5<5s49?;7;?;<100?70>2wx?=::055?xu4;;0;6?u232a90<=:;:81=:84}r10`?6=:r78?n4>299>76b=9><0q~=<0;297~;4;k0?563<3387=>;4;90:;;5rs210>5<4s498n7?=8:?077<60:16?>=51648yv55m3:1?v3<3`87=>;4;90?563<2d8233=z{:9:6=4<{<10e?750278?=4>829>767=9><0q~==c;297~;4;00?563<2d87=>;4:j0:;;5rs20e>5<4s49857?=8:?06`<60:16??h51648yv55i3:1?v3<3987=>;4:j0?563<2`8233=z{:8o6=4<{<10n4>829>77b=9><0q~==8;297~;4;>0?563<2`87=>;4:10:;;5rs20a>5<4s498;7?=8:?06d<60:16??l51648yv55>3:1?v3<3787=>;4:10?563<278233=z{:826=4<{<102?750278>54>829>77?=9><0q~==4;297~;4;<0?563<2787=>;4:=0:;;5rs204>5<4s49897?=8:?063<60:16??951648yv55=3:1?v3<35826==:;;>1=5=4=206>4113ty8:44?:5y>724=9>n01<7::e;894?32mk01>om:2d8yv5103:18v3<70823a=:90<1h4521879`d=:;hh1?h5rs244>5<3s49<<7?8d:?2=2?3nj70=nb;1`?xu4><0;69u237g952b<58326i74=0;;>ag<5:ki6>l4}r150?6=7e9>57dd=;h1v>8<:187851k3;9c8g=>;61h0om63{t;?81<7=t=24a>41c34;2n7jn;<1bf?5?3ty8mh4?:01x96?72==01>6i:55896>b2==01>6k:55896>d2==01>6m:55896>f2==01>66:55896??2==01>78:55896?12==01>7::55896?32==01>7<:55896?52==01>7>:55896>?2==01>68:558970128==7p}7}:;0:19=523``9g6=z{:k;6=4={<1;b?37349jn77;;|q0=c<72;q6?5k5519>7dd=1;1v>7j:18185?l3?;70=nb;;2?xu41m0;6?u239a915=:;hh15=5rs2;`>5<5s493n7;?;<1bf?>a3ty85o4?:3y>7=g==916?ll58d9~w6?f2909w0=79;73?85fj33o7p}7}:;0219=523``9=f=z{:k26=4={<1:3?37349jn7m>;|q0e=<72;q6?485519>7dd=1k1v>o8:18185>=3?;70=nb;;b?xu4i?0;6?u2386915=:;hh1545rs2c6>5<5s492?7;?;<1bf???3ty8m94?:3y>7<4==916?ll5969~w6g42909w0=61;73?85fj33=7p}7}:;1219=523``9=0=z{:326=4={<1;3?37349jn76k;|q0ef<72;q6?lj5164896ge2j30q~?<7;296~;5::0om63=23826<=z{8?86=4={<3ag?bf34;in7?=9:p672=838p1?<9:e`8974528==7p}>be83>7}:9kl1ho521c`952018o<4$2a0>4163ty?n44?:3y]0g?<5=>18o74$2a0>4153ty?m>4?:3y]0d5<5=>18l=4$2a0>4143ty?>54?:3y]052<5=>18=:4$2a0>4503ty?>;4?:3y]055<5=>18==4$2a0>4253ty?>84?:3y]054<5=>18=<4$2a0>42e3ty?>94?:3y]057<5=>18=?4$2a0>42c3ty?>>4?:3y]056<5=>18=>4$2a0>42b3ty?>?4?:3y]7c`<5=>1?kh4$2a0>42a3ty?>=4?:3y]7cb<5=>1?kj4$2a0>4373ty?=k4?:3y]7ce<5=>1?km4$2a0>4363ty?=h4?:3y]7cd<5=>1?kl4$2a0>4353ty?=i4?:3y]7cg<5=>1?ko4$2a0>4333ty?=n4?:3y]7c?<5=>1?k74$2a0>4323ty?=o4?:3y]7c><5=>1?k64$2a0>4313ty?=l4?:3y]7c1<5=>1?k94$2a0>4303ty?=44?:3y]7c0<5=>1?k84$2a0>43?3ty?=54?:3y]7c3<5=>1?k;4$2a0>43>3ty?=:4?:3y]7c2<5=>1?k:4$2a0>43f3ty?=84?:3y]7c4<5=>1?k<4$2a0>43e3ty?=94?:3y]7c7<5=>1?k?4$2a0>43d3ty?=>4?:3y]7c6<5=>1?k>4$2a0>43c3ty?=?4?:3y]7``<5=>1?hh4$2a0>43b3ty?=<4?:3y]7`c<5=>1?hk4$2a0>43a3ty?==4?:3y]7`b<5=>1?hj4$2a0>4073ty?1?hm4$2a0>4063ty?1?hl4$2a0>4053ty?1?ho4$2a0>4043ty?1?h74$2a0>4033ty?>k4?:3y]05g<5=>18=o4$2a0>4023ty?>h4?:3y]05?<5=>18=74$2a0>4013ty?>i4?:3y]05><5=>18=64$2a0>4003ty?>n4?:3y]051<5=>18=94$2a0>40?3ty?>o4?:3y]050<5=>18=84$2a0>40>3ty?>l4?:3y]053<5=>18=;4$2a0>40f3ty?>44?:3y]7cc<5=>1?kk4$2a0>40e3ty?><4?:3y]7c5<5=>1?k=4$2a0>40d3ty?=;4?:3y]7`><5=>1?h64$2a0>40c3ty?1?h94$2a0>40b3ty?o94?:3y]0f2<5=>18n:4$2a0>40a3ty?n=4?:3y]0g6<5=>18o>4$2a0>4173ty?8o4?:3y]06?<5=>18>74$2a0>4513ty?844?:3y]06><5=>18>64$2a0>45?3ty?854?:3y]061<5=>18>94$2a0>45>3ty?8:4?:3y]060<5=>18>84$2a0>45f3ty?8;4?:3y]063<5=>18>;4$2a0>45e3ty?884?:3y]062<5=>18>:4$2a0>45d3ty?894?:3y]065<5=>18>=4$2a0>45c3ty?8>4?:3y]064<5=>18><4$2a0>45b3ty?994?:3y]017<5=>189?4$2a0>45a3ty?9>4?:3y]016<5=>189>4$2a0>4273ty?9?4?:3y]06`<5=>18>h4$2a0>4263ty?9<4?:3y]06c<5=>18>k4$2a0>4243ty?9=4?:3y]06b<5=>18>j4$2a0>4233ty?8k4?:3y]06e<5=>18>m4$2a0>4223ty?8h4?:3y]06d<5=>18>l4$2a0>4213ty?8i4?:3y]06g<5=>18>o4$2a0>4203ty?8n4?:3y]067<5=>18>?4$2a0>42?3ty?8?4?:3y]066<5=>18>>4$2a0>42>3ty?9n4?:3y]00e<5=>188m4$2a0>42f3ty?9;4?:3y]000<5=>18884$2a0>42d3twe4oh50;0xL6e33td3o=4?:3yK7f252zJ0g1=zf1i96=4={I1`0>{i0j91<7d=3:1>vFm;;|l;g=<72;qC?n:4}o:`=?6=:rB8o95rn9ab>5<5sA9h86sa8b`94?4|@:i?7p`7cb83>7}O;j>0qc6ld;296~N4k=1vb5mj:181M5d<2we4nh50;0xL6e33td3h=4?:3yK7f252zJ0g1=zf1n96=4={I1`0>{i0m91<7c=3:1>vFm;;|l;`=<72;qC?n:4}o:g=?6=:rB8o95rn9fb>5<5sA9h86sa8e`94?4|@:i?7p`7db83>7}O;j>0qc6kd;296~N4k=1vb5jj:181M5d<2we4ih50;0xL6e33td3i=4?:3yK7f252zJ0g1=zf1o96=4={I1`0>{i0l91<7b=3:1>vFm;;|l;a=<72;qC?n:4}o:f=?6=:rB8o95rn9gb>5<5sA9h86sa8d`94?4|@:i?7p`7eb83>7}O;j>0qc6jd;296~N4k=1vb5kj:181M5d<2we4hh50;0xL6e33td3j=4?:3yK7f252zJ0g1=zf1l96=4={I1`0>{i0o91<7a=3:1>vFm;;|l;b=<72;qC?n:4}o:e=?6=:rB8o95rn9db>5<5sA9h86sa8g`94?4|@:i?7p`85683>4}O;j>0qc964;295~N4k=1vb:7::182M5d<2we;4850;3xL6e33td<5:4?:0yK7f251zJ0g1=zf>326=4>{I1`0>{i?0k1<7?tH2a7?xh01k0;6k3:1=vFm;;|l4=c<728qC?n:4}o5b4?6=9rB8o95rn6c2>5<6sA9h86sa7`094?7|@:i?7p`8a283>4}O;j>0qc9n4;295~N4k=1vb:o::182M5d<2we;l850;3xL6e33td51zJ0g1=zf>k26=4>{I1`0>{i?hk1<7?tH2a7?xh0ik0;6m;;|l4ec<728qC?n:4}o5a4?6=9rB8o95rn6`2>5<6sA9h86sa7c094?7|@:i?7p`8b283>4}O;j>0qc9m4;295~N4k=1vb:l::182M5d<2we;o850;3xL6e33td51zJ0g1=zf>h26=4>{I1`0>{i?kk1<7?tH2a7?xh0jk0;6m;;|l4fc<728qC?n:4}o5`4?6=9rB8o95rn6a2>5<6sA9h86sa7b094?7|@:i?7p`8c283>4}O;j>0qc9l4;295~N4k=1vb:m::182M5d<2we;n850;3xL6e33td51zJ0g1=zf>i26=4>{I1`0>{i?jk1<7?tH2a7?xh0kk0;6m;;|l4gc<728qC?n:4}o5g4?6=9rB8o95rn6f2>5<6sA9h86sa7e094?7|@:i?7p`8d283>4}O;j>0qc9k4;295~N4k=1vb:j::182M5d<2we;i850;3xL6e33td51zJ0g1=zf>n26=4>{I1`0>{i?mk1<7?tH2a7?xh0lk0;6m;;|l4`c<728qC?n:4}o5f4?6=9rB8o95rn6g2>5<6sA9h86sa7d094?7|@:i?7p`8e283>4}O;j>0qc9j4;295~N4k=1vb:k::182M5d<2we;h850;3xL6e33td51zJ0g1=zf>o26=4>{I1`0>{i?lk1<7?tH2a7?xh0mk0;6m;;|l4ac<728qC?n:4}o5e4?6=9rB8o95rn6d2>5<6sA9h86sa7g094?7|@:i?7p`8f283>4}O;j>0qc9i4;295~N4k=1vb:h::182M5d<2we;k850;3xL6e33td51zJ0g1=zf>l26=4>{I1`0>{i?ok1<7?tH2a7?xh0nk0;6m;;|l4bc<728qC?n:4}o:34?6=9rB8o95rn922>5<6sA9h86sa81094?7|@:i?7p`70283>4}O;j>0qc6?4;295~N4k=1vb5>::182M5d<2we4=850;3xL6e33td3<:4?:0yK7f251zJ0g1=zf1:26=4>{I1`0>{i09k1<7?tH2a7?xh?8k0;67k3:1=vFm;;|l;4c<728qC?n:4}o:24?6=9rB8o95rn932>5<6sA9h86sa80094?7|@:i?7p`71283>4}O;j>0qc6>4;295~N4k=1vb5?::182M5d<2we4<850;3xL6e33td3=:4?:0yK7f251zJ0g1=zf1;26=4>{I1`0>{i08k1<7?tH2a7?xh?9k0;66k3:1=vFm;;|l;5c<728qC?n:4}o:14?6=9rB8o95rn902>5<6sA9h86sa83094?7|@:i?7p`72283>4}O;j>0qc6=4;295~N4k=1vb5<::182M5d<2we4?850;3xL6e33td3>:4?:0yK7f251zJ0g1=zf1826=4>{I1`0>{i0;k1<7?tH2a7?xh?:k0;65k3:1=vFm;;|l;6c<728qC?n:4}o:04?6=9rB8o95rn912>5<6sA9h86sa82094?7|@:i?7p`73283>4}O;j>0qc6<4;295~N4k=1vb5=::182M5d<2we4>850;3xL6e33td3?:4?:0yK7f251zJ0g1=zf1926=4>{I1`0>{i0:k1<7?tH2a7?xh?;k0;64k3:1=vFm;;|l;7c<728qC?n:4}o:74?6=9rB8o95rn962>5<6sA9h86sa85094?7|@:i?7p`74283>4}O;j>0qc6;4;295~N4k=1vb5:::182M5d<2we49850;3xL6e33td38:4?:0yK7f251zJ0g1=zf1>26=4>{I1`0>{i0=k1<7?tH2a7?xh?3k3:1=vFm;;|l;0c<728qC?n:4}o:64?6=9rB8o95rn972>5<6sA9h86sa84094?7|@:i?7p`75283>4}O;j>0qc6:4;295~N4k=1vb5;::182M5d<2we48850;3xL6e33td39:4?:0yK7f247>51zJ0g1=zf1?26=4>{I1`0>{i02k3:1=vFm;;|l;1c<728qC?n:4}o:54?6=9rB8o95rn942>5<6sA9h86sa87094?7|@:i?7p`76283>4}O;j>0qc694;295~N4k=1vb58::182M5d<2we4;850;3xL6e33td3::4?:0yK7f251zJ0g1=zf1<26=4>{I1`0>{i0?k1<7?tH2a7?xh?>k0;61k3:1=vFm;;|l;2c<728qC?n:4}o:44?6=9rB8o95rn952>5<6sA9h86sa86094?7|@:i?7p`77283>4}O;j>0qc684;295~N4k=1vb59::182M5d<2we4:850;3xL6e33td3;:4?:0yK7f251zJ0g1=zf1=26=4>{I1`0>{i0>k1<7?tH2a7?xh??k0;60k3:1=vFm;;|l;3c<728qC?n:4}o:;4?6=9rB8o95rn9:2>5<6sA9h86sa89094?7|@:i?7p`78283>4}O;j>0qc674;295~N4k=1vb56::182M5d<2we45850;3xL6e33td34:4?:0yK7f251zJ0g1=zf1226=4>{I1`0>{i01k1<7?tH2a7?xh?0k0;6?k3:1=vFc290:wE=l4:m<=c=83;pD>m;;|l;5<6sA9h86sa88094?7|@:i?7p`79283>4}O;j>0qc664;295~N4k=1vb57::182M5d<2we44850;3xL6e33td35:4?:0yK7f251zJ0g1=zf1326=4>{I1`0>{i00k1<7?tH2a7?xh?1k0;6>k3:1=vFm;;|l;=c<728qC?n:4}o:b4?6=9rB8o95rn9c2>5<6sA9h86sa8`094?7|@:i?7p`7a283>4}O;j>0qc6n4;295~N4k=1vb5o::182M5d<2we4l850;3xL6e33td3m:4?:0yK7f251zJ0g1=zf1k26=4>{I1`0>{i0hk1<7?tH2a7?xh?ik0;6fk3:1=vFm;;|l;ec<728qC?n:4}o:a4?6=9rB8o95rn9`2>5<6sA9h86sa8c094?7|@:i?7p`7b283>4}O;j>0qc6m4;295~N4k=1vb5l::182M5d<2we4o850;3xL6e33td3n:4?:0yK7f251zJ0g1=zf1h26=4>{I1`0>{i0kk1<7?tH2a7?xh?jk0;6ek3:1=vFm;;|~yEFDsh<>69>i25f;exFGJr:vLM^t}AB diff --git a/usrp2/coregen/fifo_xlnx_512x36_2clk_36to18.xco b/usrp2/coregen/fifo_xlnx_512x36_2clk_36to18.xco index 9f47c073c..cee995891 100644 --- a/usrp2/coregen/fifo_xlnx_512x36_2clk_36to18.xco +++ b/usrp2/coregen/fifo_xlnx_512x36_2clk_36to18.xco @@ -1,7 +1,7 @@ ############################################################## # -# Xilinx Core Generator version K.39 -# Date: Tue Aug 10 23:09:39 2010 +# Xilinx Core Generator version 12.1 +# Date: Thu Aug 12 21:06:13 2010 # ############################################################## # diff --git a/usrp2/coregen/fifo_xlnx_512x36_2clk_36to18.xise b/usrp2/coregen/fifo_xlnx_512x36_2clk_36to18.xise index d9013a131..cfe983130 100644 --- a/usrp2/coregen/fifo_xlnx_512x36_2clk_36to18.xise +++ b/usrp2/coregen/fifo_xlnx_512x36_2clk_36to18.xise @@ -29,331 +29,29 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - + + diff --git a/usrp2/coregen/fifo_xlnx_512x36_2clk_36to18_fifo_generator_v4_3_xst_1.lso b/usrp2/coregen/fifo_xlnx_512x36_2clk_36to18_fifo_generator_v4_3_xst_1.lso deleted file mode 100644 index f1a6f7899..000000000 --- a/usrp2/coregen/fifo_xlnx_512x36_2clk_36to18_fifo_generator_v4_3_xst_1.lso +++ /dev/null @@ -1,3 +0,0 @@ -blkmemdp_v6_2 -blk_mem_gen_v2_6 -fifo_generator_v4_3 -- cgit v1.2.3 From d4b6fa72eb3fec872a41dea136a5845d3c6ff1ec Mon Sep 17 00:00:00 2001 From: Ian Buckley Date: Thu, 19 Aug 2010 12:46:04 -0700 Subject: Regenerated FIFO with lower trigger level for almost full flag to reflect logic removed from nobl_fifo. Improved ext_fifo_tb further, try to simulate more combinations of decomation rates and packet arrival patterns. Strip out the logic in nobl_fifo that made it look like a Xilinx fall-through FIFO...it is now very simple logic but a propriatory interface that exposes the high inetrnal latency of reads. Allow the USED size of the external FIFO to be parameterized from the core level. Currently set at only 256 Corrected a bug in vita_tx_deframer.v that can write to a FIFO when its full causing illegal state. Made further edits that are currently commented becuase simulation indicates they cause problems, however suspect a further bug is in this code. --- usrp2/coregen/fifo_xlnx_512x36_2clk_18to36.ngc | 2 +- usrp2/coregen/fifo_xlnx_512x36_2clk_18to36.v | 4 +- usrp2/coregen/fifo_xlnx_512x36_2clk_18to36.xco | 8 +- usrp2/coregen/fifo_xlnx_512x36_2clk_18to36.xise | 4 +- usrp2/extramfifo/ext_fifo.v | 29 +-- usrp2/extramfifo/ext_fifo_tb.v | 70 +++++++- usrp2/extramfifo/nobl_fifo.v | 229 +++--------------------- usrp2/top/u2_rev3/u2_core_udp.v | 3 +- 8 files changed, 113 insertions(+), 236 deletions(-) diff --git a/usrp2/coregen/fifo_xlnx_512x36_2clk_18to36.ngc b/usrp2/coregen/fifo_xlnx_512x36_2clk_18to36.ngc index b583362cd..608a5f2fb 100644 --- a/usrp2/coregen/fifo_xlnx_512x36_2clk_18to36.ngc +++ b/usrp2/coregen/fifo_xlnx_512x36_2clk_18to36.ngc @@ -1,3 +1,3 @@ XILINX-XDB 0.1 STUB 0.1 ASCII XILINX-XDM V1.6e -$45540<,[o}e~g`n;"2*726&;$:,)<6;.vnt*Ydo&lbjbQwloz\144;?U9oaeP19vl73(iof;0<85?0123=>6789:;<=>;0:23456789:;<=>?0123456789:;<=>?0123456789:;<=>?0123456789:;<=>?01084<7<9:1:"=?<;029MKVR\3KOH_O39;2=5`=683CE\XZ5psmd[cskdV~c~h}g<883:73<990BB][[:qplcZ`rdeUdk|h^cpw`ts400;2?;4118JJUSS2yxdkRhzlm]wlwct`Vdnklzj<883:4?<990DYY^ZT;fbpdYdg|d044?>0a855113922?OIX\^1HDO31483:45<9?0DYY^ZT;FLE972294:>6?7:HLSQQ11:07?754;8;0>7GAPTV9@LVF480;2<<42;MVPUSS2ME[M1?50?31?64=AGZ^X7JFB=12>586;2996B[[PTV9@JD;;80;2<:4378LQQVR\3ndyy2<5;2=`>5t:9:;jj::6,72?12<<9LM=<5;:HLSQQ11397>JSSX\^1HB^M<283:4=1:2<286869768<567<22N4L?4959:45?530;>585=231EC^ZT;rqkbYbey~rSyf}erj\evubz}636=0=5:;9MKVR\3zycjQjmqvz[qnumzbTbhintd>;>586j231CXZ_UU8q`Zbf|hUhcx`{<983:7=F:11JHI\N<1<;?DBCZH6:255NDEPB878?3HNO^L2<>99B@ATF4=437LJKR@>6:==FLMXJ0;07;@FGVD:0611JHI\N<9611JHI\M<1<;?DBCZK6:255NDEPA878?3HNO^O2<>99B@ATE4=437LJKRC>6:==FLMXI0;07;@FGVG:06h1JHI\M<983:==FLMXI050<;@NO=>GTQGIT^HI<;CW1<>DR[VCEJB?4C39@A44EKCK90OA\6;BMNILRSMM;?7NA]E^EFJ@TF\@EESD@IO69@V@GSMM;0H?5KC39GM3=CAH6;2:5KI@>24;169GMD:6<730HDO31483:2=CAH6:9384DHC?5;0384DHC?7;01OEO2>3?58@LD;9=4<7IGM<07=3>BNJ5;=2:5KIC>23;12NBN1?17:FJF9476>1OEO2=1?58@LD;:;4<7IGM<31=3>BNJ58?2:5KIC>11;1;08;EKA8719?2NBN1<7>69GMG:517<0HDL32?58@LD;;9427IGM<2394;119:FJTD:6294<7IG_A=3=3>BNXK6;2:5KIQ@?5;1BHI5;:2:5KO@>26;108;EMB842912NDM1?::1<4?AIF48?5:6J@A=3=2>BHI585:6J@A=1=2>BHI5>5:6J@A=7=2>BHI5<5:6J@A=5=2>BHI525:6J@A=;=3>BHIVXNK;5KOC>3:2=CGK6:<394DN@?54803MEI0<<17:FLF9746>1OCO2>4?58@JD;9<4<7IAM<04=3>BHJ5;<2:5KOC>2<;117:FLF9466>1OCO2=2?58@JD;::4<7IAM<36=3>BHJ58>2:5KOC>12;1:08;EMA87>9?2NDN1<6>79GKG:56>1OCO2<0?;8@JD;;80;2:5KOC>05;019:FLTD:6294<7IA_A=3=3>BHXK6;2:5KOQ@?5;16H75:DBHVC53ON87KJL4:DGG@56G>2:K16>O402CEEY^P01:8MKOSXV::46GAIUR\47><8:KMMQVX8=20ECG[P^26<>OIA]ZT<;64IOKWTZ6012CEEY][AUG4?LHN\V:;;6GAIU]352=NF@^T;7:KMMQY7=>1BBDZP0758MKOSW9=<7D@FT^2;3>OIA]U;5:5FNHV\4D11BBDZP1758MKOSW8=<7D@FT^3;3>OIA]U:5:5FNHV\5D1D69JJLRX9L=0ECG[_0D4?LHN\V8;;6GAIU]152=NF@^T>?94IOKW[7503@DBXR<;7:KMMQY5=>1BBDZP2758MKOSW;=<7D@FT^0;3>OIA]U95:5FNHV\6D11BBDZP3758MKOSW:=<7D@FT^1;3>OIA]U85:5FNHV\7D1L8;HLJPZ5D?2CEEYQ6B@6:NLEACC?2FDKDMNL59OQQ733E__>95CUU17?ISS0168J466<2D:H68=>0B<>:4:L24320968J46>;2D:=95A1027?K769=1E=<<;;O3271=I98>?7C?>559M54033G;:;95A10:7?K761:1E=?:4N0030>H6:8>0B<<=4:L26622468J441<2D:>::4N00;7>H6;=1E=>?<;O377>H6=:1E=;:4N0477>H6?:1E=5=4N0;1?K443G8;?6@=129M675H51;1E?>5A3108J0480B4=4N830?K?5;2D2?>5A9518J<343G3=?6@6729M==56^Q2h1YILJPFHPPPf=UMHNT[DJ[H^C`?WCFLV]BHYFPB09P56=TADUHCABFSHMM[FNBKB<0_B[]CD58WWPFDVK<7^\YAM]A0>UTZH>0_^\M4:VZT@553\:$kh!rg-dg}(ddbr$Aua}_sf\tkruWniTtb|?012\V`urd};8>6[?/fpe*w`(ojr%oaew/LzlvZtcWyd~Ril_ymq4566W[oxyaz>339V4*aun'xm#jmw.bnh|*Kg{UyhR~ats]dgZ~hz9:;>R\jstnw564<]9%l~k }f.e`|+ekcq%Ftb|Pre]sjqtXojUsc>?02]Qavsk|8997X> gsd-vc)`kq$h`fv Mymq[wbXxg~ySjmPxnp3452XZly~`y?<2:W3+bta&{l$knv!cmi{+H~hzVxoS}`{r^e`[}iu89:>S_k|umv277=R8&myj#|i/fa{*fjlp&GscQ}d^rmpwY`kVrd~=>?6^Pfwpjs9:80Y=!hrg,qb*adp'iggu!Bxnp\vaYwf}xTknQwos2342YUmzgx<==;T2,cw`)zo%lou lljz,I}iuW~xT|cz}_fa\|jt789:T^h}zlu306>S7'nxm"h gbz-gim'Drd~Ry}_qlwvZadWqey<=>>_Sgpqir6;;1^<"i}f/pe+be&jf`t"Cwos]tvZvi|{UloRv`r1236ZTb{|f=><4U1-dvc(un&mht#mcky-N|jtX{U{by|Pgb]{kw678:UYi~{ct011?P6(o{l%~k!hcy,`hn~(EqeySz|Ppovq[beXpfx;<=:PRdqvhq74:2_;#j|i.sd,cf~)keas#@v`r^uq[uhszVmhSua}0126[Wct}e~:??5Z0.eqb+ta'nis"nbdx.O{kwYpzVzexQhc^zlv567>VXnxb{1208Q5)`zo$yj"ilx/aoo})JpfxT{Qnup\cfYg{:;<:Q]erwop4553\:$kh!rg-dg}(ddbr$Aua}_vp\tkruWniTtb|?01:\V`urd};9=6[?/fpe*w`(ojr%oaew/sf\tkruWkce0=0=1:W3+bta&{l$knv!cmi{+wbXxg~ySoga<0<15>S7'nxm"h gbz-gim'{nT|cz}_ckm878592_;#j|i.sd,cf~)keas#jPpovq[goi4:49=6[?/fpe*w`(ojr%oaew/sf\tkruWkce090=1:W3+bta&{l$knv!cmi{+wbXxg~ySoga<4<15>S7'nxm"h gbz-gim'{nT|cz}_ckm838592_;#j|i.sd,cf~)keas#jPpovq[goi4>49=6[?/fpe*w`(ojr%oaew/sf\tkruWkce050=0:W3+bta&{l$knv!cmi{+wbXxg~ySoga_103?P6(o{l%~k!hcy,`hn~(zmU{by|Pbhl\576<]9%l~k }f.e`|+ekcq%yhR~ats]amkY5:91^<"i}f/pe+be&jf`t"|k_qlwvZdnfV99<6[?/fpe*w`(ojr%oaew/sf\tkruWkceS9 gsd-vc)`kq$h`fv re]sjqtXj`dTtb|?01213>S7'nxm"h gbz-gim'{nT|cz}_ckm[}iu89:;=?84U1-dvc(un&mht#mcky-q`Zvi|{UiecQwos2344403\:$kh!rg-dg}(ddbr$~iQnup\flhXpfx;<=?>279V4*aun'xm#jmw.bnh|*tcWyd~Rlfn^zlv567:;=0Y=!hrg,qb*adp'iggu!}d^rmpwYeagUsc>?03312>S7'nxm"h gbz-gim'{nT|cz}_ckm[}iu89:8>:5Z0.eqb+ta'nis"nbdx.pg[uhszVhbbRv`r12377413\:$kh!rg-dg}(ddbr$~iQnup\flhXpfx;<=:=7:W3+bta&{l$knv!cmi{+wbXxg~ySoga_ymq45639;<0Y=!hrg,qb*adp'iggu!}d^rmpwYeagUsc>?0404?P6(o{l%~k!hcy,`hn~(zmU{by|Pbhl\|jt789?:>;5Z0.eqb+ta'nis"nbdx.pg[uhszVhbbRv`r12327><]9%l~k }f.e`|+ekcq%yhR~ats]amkYg{:;<;?>269V4*aun'xm#jmw.bnh|*tcWyd~Rlfn^zlv567>;8i7X> gsd-vc)`kq$h`fv re]sjqtXj`dTtb|?014\fab7:?1^<"i}f/pe+be&jf`t"|k_qlwvZdnfVrd~=>?7358Q5)`zo$yj"ilx/aoo})ulVzexQmio]{kw678>;9<6[?/fpe*w`(ojr%oaew/sf\tkruWni7<3>328Q5)`zo$yj"ilx/aoo})ulVzexQhc=0=65=R8&myj#|i/fa{*fjlp&xoS}`{r^e`868582_;#j|i.sd,cf~)keas#jPpovq[be;<78;7X> gsd-vc)`kq$h`fv re]sjqtXoj6>2?>4U1-dvc(un&mht#mcky-q`Zvi|{Ulo181219V4*aun'xm#jmw.bnh|*tcWyd~Ril<6<14>S7'nxm"h gbz-gim'{nT|cz}_fa?<;7a3\:$kh!rg-dg}(ddbr$~iQnup\cfY79o1^<"i}f/pe+be&jf`t"|k_qlwvZadW8;m7X> gsd-vc)`kq$h`fv re]sjqtXojU9=k5Z0.eqb+ta'nis"nbdx.pg[uhszVmhS>?i;T2,cw`)zo%lou lljz,vaYwf}xTknQ;1g9V4*aun'xm#jmw.bnh|*tcWyd~Ril_43e?P6(o{l%~k!hcy,`hn~(zmU{by|Pgb]55c=R8&myj#|i/fa{*fjlp&xoS}`{r^e`[27a3\:$kh!rg-dg}(ddbr$~iQnup\cfY?:?1^<"i}f/pe+be&jf`t"|k_qlwvZadWhyyij2?>348Q5)`zo$yj"ilx/aoo})ulVzexQhc^cpv`a;978=7X> gsd-vc)`kq$h`fv re]sjqtXojUjkh<3<12>S7'nxm"h gbz-gim'{nT|cz}_fa\evtbo595>;5Z0.eqb+ta'nis"nbdx.pg[uhszVmhSl}}ef>7:70<]9%l~k }f.e`|+ekcq%yhR~ats]dgZgtzlm793<9;T2,cw`)zo%lou lljz,vaYwf}xTknQnssgd8385>2_;#j|i.sd,cf~)keas#jPpovq[beXizxnk191279V4*aun'xm#jmw.bnh|*tcWyd~Ril_`qqab:?6;?0Y=!hrg,qb*adp'iggu!}d^rmpwY`kVkx~hiP0378Q5)`zo$yj"ilx/aoo})ulVzexQhc^cpv`aX9;?0Y=!hrg,qb*adp'iggu!}d^rmpwY`kVkx~hiP2378Q5)`zo$yj"ilx/aoo})ulVzexQhc^cpv`aX;;?0Y=!hrg,qb*adp'iggu!}d^rmpwY`kVkx~hiP4378Q5)`zo$yj"ilx/aoo})ulVzexQhc^cpv`aX=;?0Y=!hrg,qb*adp'iggu!}d^rmpwY`kVkx~hiP6378Q5)`zo$yj"ilx/aoo})ulVzexQhc^cpv`aX?;?0Y=!hrg,qb*adp'iggu!}d^rmpwY`kVkx~hiP83;8Q5)`zo$yj"ilx/aoo})ulVzexQhc^cpv`aXl86;2?74U1-dvc(un&mht#mcky-q`Zvi|{UloRo|rde\`4:66;30Y=!hrg,qb*adp'iggu!}d^rmpwY`kVkx~hiPd0>1:7?<]9%l~k }f.e`|+ekcq%yhR~ats]dgZgtzlmTh<2<>3;8Q5)`zo$yj"ilx/aoo})ulVzexQhc^cpv`aXl86?2?74U1-dvc(un&mht#mcky-q`Zvi|{UloRo|rde\`4:26;30Y=!hrg,qb*adp'iggu!}d^rmpwY`kVkx~hiPd0>5:7?<]9%l~k }f.e`|+ekcq%yhR~ats]dgZgtzlmTh<28>3;8Q5)`zo$yj"ilx/aoo})ulVzexQhc^cpv`aXl8632?64U1-dvc(un&mht#mcky-q`Zvi|{UloRo|rde\`4Y7:11^<"i}f/pe+be&jf`t"|k_qlwvZadWhyyijQk1^31<>S7'nxm"h gbz-gim'{nT|cz}_fa\evtboVn:S?<7;T2,cw`)zo%lou lljz,vaYwf}xTknQnssgd[a7X;;20Y=!hrg,qb*adp'iggu!}d^rmpwY`kVkx~hiPd0]76==R8&myj#|i/fa{*fjlp&xoS}`{r^e`[duumnUo=R;=8:W3+bta&{l$knv!cmi{+wbXxg~ySjmParpfcZb6W?837X> gsd-vc)`kq$h`fv re]sjqtXojUjkh_e3\37><]9%l~k }f.e`|+ekcq%yhR~ats]dgZgtzlmTh>249V4*aun'xm#jmw.bnh|*tcWyd~Ril_ymq4565:<1^<"i}f/pe+be&jf`t"|k_qlwvZadWqey<=><249V4*aun'xm#jmw.bnh|*tcWyd~Ril_ymq4563:<1^<"i}f/pe+be&jf`t"|k_qlwvZadWqey<=>:249V4*aun'xm#jmw.bnh|*tcWyd~Ril_ymq4561:<1^<"i}f/pe+be&jf`t"|k_qlwvZadWqey<=>8209V4*aun'xm#jmw.bnh|*quWyd~Rlfn=3=64=R8&myj#|i/fa{*fjlp&}yS}`{r^`jj949:81^<"i}f/pe+be&jf`t"y}_qlwvZdnf595><5Z0.eqb+ta'nis"nbdx.uq[uhszVhbb1:1209V4*aun'xm#jmw.bnh|*quWyd~Rlfn=7=64=R8&myj#|i/fa{*fjlp&}yS}`{r^`jj909:81^<"i}f/pe+be&jf`t"y}_qlwvZdnf5=5><5Z0.eqb+ta'nis"nbdx.uq[uhszVhbb161209V4*aun'xm#jmw.bnh|*quWyd~Rlfn=;=65=R8&myj#|i/fa{*fjlp&}yS}`{r^`jjZ7582_;#j|i.sd,cf~)keas#z|Ppovq[goiW;8;7X> gsd-vc)`kq$h`fv ws]sjqtXj`dT??>4U1-dvc(un&mht#mcky-tvZvi|{UiecQ;219V4*aun'xm#jmw.bnh|*quWyd~Rlfn^714>S7'nxm"h gbz-gim'~xT|cz}_ckm[3473\:$kh!rg-dg}(ddbr${Qnup\flhX?;:0Y=!hrg,qb*adp'iggu!xr^rmpwYeagU3>=5Z0.eqb+ta'nis"nbdx.uq[uhszVhbbR7=6:W3+bta&{l$knv!cmi{+rtXxg~ySoga_ymq4567:>1^<"i}f/pe+be&jf`t"y}_qlwvZdnfVrd~=>?0005?P6(o{l%~k!hcy,`hn~({U{by|Pbhl\|jt789;9;6[?/fpe*w`(ojr%oaew/vp\tkruWkceSua}0122570<]9%l~k }f.e`|+ekcq%|~R~ats]amkYg{:;?3358Q5)`zo$yj"ilx/aoo})pzVzexQmio]{kw678:89:6[?/fpe*w`(ojr%oaew/vp\tkruWkceSua}012762=R8&myj#|i/fa{*fjlp&}yS}`{r^`jjZ~hz9:;8<<9;T2,cw`)zo%lou lljz,swYwf}xTnd`Pxnp34535?2_;#j|i.sd,cf~)keas#z|Ppovq[goiWqey<=>:1348Q5)`zo$yj"ilx/aoo})pzVzexQmio]{kw678?837X> gsd-vc)`kq$h`fv ws]sjqtXj`dTtb|?0142571<]9%l~k }f.e`|+ekcq%|~R~ats]amkYg{:;<;<=b:W3+bta&{l$knv!cmi{+rtXxg~ySoga_ymq4561Wkno219V4*aun'xm#jmw.bnh|*quWyd~Ril<1<14>S7'nxm"h gbz-gim'~xT|cz}_fa?5;473\:$kh!rg-dg}(ddbr${Qnup\cf:56;:0Y=!hrg,qb*adp'iggu!xr^rmpwY`k595>=5Z0.eqb+ta'nis"nbdx.uq[uhszVmh090=0:W3+bta&{l$knv!cmi{+rtXxg~ySjm35?03?P6(o{l%~k!hcy,`hn~({U{by|Pgb>5:76<]9%l~k }f.e`|+ekcq%|~R~ats]dg919:91^<"i}f/pe+be&jf`t"y}_qlwvZad4149<6[?/fpe*w`(ojr%oaew/vp\tkruWni753?i;T2,cw`)zo%lou lljz,swYwf}xTknQ?1g9V4*aun'xm#jmw.bnh|*quWyd~Ril_03e?P6(o{l%~k!hcy,`hn~({U{by|Pgb]15c=R8&myj#|i/fa{*fjlp&}yS}`{r^e`[67a3\:$kh!rg-dg}(ddbr${Qnup\cfY39o1^<"i}f/pe+be&jf`t"y}_qlwvZadW<;m7X> gsd-vc)`kq$h`fv ws]sjqtXojU==k5Z0.eqb+ta'nis"nbdx.uq[uhszVmhS:?i;T2,cw`)zo%lou lljz,swYwf}xTknQ71g9V4*aun'xm#jmw.bnh|*quWyd~Ril_805?P6(o{l%~k!hcy,`hn~({U{by|Pgb]bwwc`4949:6[?/fpe*w`(ojr%oaew/vp\tkruWniTm~|jg=3=63=R8&myj#|i/fa{*fjlp&}yS}`{r^e`[duumn692?84U1-dvc(un&mht#mcky-tvZvi|{UloRo|rde?7;413\:$kh!rg-dg}(ddbr${Qnup\cfYf{{ol090=6:W3+bta&{l$knv!cmi{+rtXxg~ySjmParpfc939:?1^<"i}f/pe+be&jf`t"y}_qlwvZadWhyyij29>348Q5)`zo$yj"ilx/aoo})pzVzexQhc^cpv`a;?78=7X> gsd-vc)`kq$h`fv ws]sjqtXojUjkh<9<12>S7'nxm"h gbz-gim'~xT|cz}_fa\evtbo535>85Z0.eqb+ta'nis"nbdx.uq[uhszVmhSl}}ef]360=R8&myj#|i/fa{*fjlp&}yS}`{r^e`[duumnU:>85Z0.eqb+ta'nis"nbdx.uq[uhszVmhSl}}ef]160=R8&myj#|i/fa{*fjlp&}yS}`{r^e`[duumnU8>85Z0.eqb+ta'nis"nbdx.uq[uhszVmhSl}}ef]760=R8&myj#|i/fa{*fjlp&}yS}`{r^e`[duumnU>>85Z0.eqb+ta'nis"nbdx.uq[uhszVmhSl}}ef]560=R8&myj#|i/fa{*fjlp&}yS}`{r^e`[duumnU<>85Z0.eqb+ta'nis"nbdx.uq[uhszVmhSl}}ef];60=R8&myj#|i/fa{*fjlp&}yS}`{r^e`[duumnU2>45Z0.eqb+ta'nis"nbdx.uq[uhszVmhSl}}ef]g5979:01^<"i}f/pe+be&jf`t"y}_qlwvZadWhyyijQk1=0=6<=R8&myj#|i/fa{*fjlp&}yS}`{r^e`[duumnUo=1=1289V4*aun'xm#jmw.bnh|*quWyd~Ril_`qqabYc95>5>45Z0.eqb+ta'nis"nbdx.uq[uhszVmhSl}}ef]g5939:01^<"i}f/pe+be&jf`t"y}_qlwvZadWhyyijQk1=4=6<=R8&myj#|i/fa{*fjlp&}yS}`{r^e`[duumnUo=191289V4*aun'xm#jmw.bnh|*quWyd~Ril_`qqabYc9525>45Z0.eqb+ta'nis"nbdx.uq[uhszVmhSl}}ef]g59?9:11^<"i}f/pe+be&jf`t"y}_qlwvZadWhyyijQk1^31<>S7'nxm"h gbz-gim'~xT|cz}_fa\evtboVn:S?<7;T2,cw`)zo%lou lljz,swYwf}xTknQnssgd[a7X;;20Y=!hrg,qb*adp'iggu!xr^rmpwY`kVkx~hiPd0]76==R8&myj#|i/fa{*fjlp&}yS}`{r^e`[duumnUo=R;=8:W3+bta&{l$knv!cmi{+rtXxg~ySjmParpfcZb6W?837X> gsd-vc)`kq$h`fv ws]sjqtXojUjkh_e3\37><]9%l~k }f.e`|+ekcq%|~R~ats]dgZgtzlmThS7'nxm"h gbz-gim'~xT|cz}_fa\|jt789;996[?/fpe*w`(ojr%oaew/vp\tkruWniTtb|?01011>S7'nxm"h gbz-gim'~xT|cz}_fa\|jt7899996[?/fpe*w`(ojr%oaew/vp\tkruWniTtb|?01611>S7'nxm"h gbz-gim'~xT|cz}_fa\|jt789?996[?/fpe*w`(ojr%oaew/vp\tkruWniTtb|?01411>S7'nxm"h gbz-gim'~xT|cz}_fa\|jt789=996[?/fpe*w`(ojr%oaew/vp\tkruWniTtb|?01:04>S7'nxm"h gm2-va)`z8$yjzh{/Lov|ZTFEVXOSH@PFVDW644a3\:$kh!rg-dh5(ul&my=#|iwgv,IhsW[KFS_KHOTV\AK76:m1^<"i}f/pe+bj7&{n$k?!rguep*erz{Um{kzPsucwa969:m1^<"i}f/pe+bj7&{n$k?!rguep*erz{Um{kzPsucwa979:j1^<"i}f/pe+bj7&{n$k?!rguep*erz{Um{kzPsucwaZ65k2_;#j|i.sd,ci6)zm%l~< }fvdw+fsuzVl|jyQ|t`vf[4523\:$kh!rg-dh5(ul&my=#|iwgv,gptuWo}mxR}{aug\ip~789;7<3=9;T2,cw`)zo%l`= }d.eq5+tao~$ox|}_guepZusi}oTaxv?013?4;74=2_;#j|i.sd,ci6)zm%l~< }fvdw+fsuzVl|jyQ|t`vf[hs89::0<0<6:W3+bta&{l$ka>!re-dv4(un~l#n{}r^dtbqYt|h~nS`{w01228486:11^<"i}f/pe+bj7&{n$k?!rguep*cjx}sTjzh{_g`13>S7'nxm"h gm2-va)`z8$yjzh{/dosp|Yao~Te?h4U1-dvc(un&mg<#|k/fp2*w`pn}%na}zv_guepZoXe|r;<=><0:W3+bta&{l$ka>!re-dv4(un~l#hctx]escrXaVg~t=>?000:?P6(o{l%~k!hl1,q`*auiz$yy} c1-`ewt~fl~7<3<6;T2,cw`)zo%l`= }d.eqev(u{}y$o=!laspzj`r;97827X> gsd-vc)`d9$yh"i}ar,qwqu(k9%hm|vndv?6;4>3\:$kh!rg-dh5(ul&mym~ }suq,g5)di{xrbhz33?0e?P6(o{l%~k!hl1,q`*auiz$yy} c1-dip~)odQ;Q#ib1/o26c=R8&myj#|i/fn3*wb(o{kx"}{s.a3+bkrp'mfW gsd-vc)`d9$yh"i}ar,qwqu(k9%laxv!glY7Y+aj{'gx>>5Z0.eqb+ta'nf;"j gscp*wus{&i;#{?30?00?P6(o{l%~k!hl1,q`*auiz$yy} c1-u5979::1^<"i}f/pe+bj7&{n$ko|.sqww*e7';7>3<<;T2,cw`)zo%l`= }d.eqev(u{}y$o=!y1=1=66=R8&myj#|i/fn3*wb(o{kx"}{s.a3+s7;<78i7X> gsd-vc)`d9$yh"i}ar,qwqu(k9%}=R>Paof34566:k1^<"i}f/pe+bj7&{n$ko|.sqww*e7';T=Road123444e3\:$kh!rg-dh5(ul&mym~ }suq,g5)q9V8Tmcj?01226g=R8&myj#|i/fn3*wb(o{kx"}{s.a3+s7X;Vkeh=>?000a?P6(o{l%~k!hl1,q`*auiz$yy} c1-u5Z2Xff~;<=>>289V4*aun'xm#jb?.sf,cwgt&{y"m>/bcqv|hb|5:5>45Z0.eqb+ta'nf;"j gscp*wus{&i:#no}rxlfp979:01^<"i}f/pe+bj7&{n$ko|.sqww*e6'jky~t`jt=0=6<=R8&myj#|i/fn3*wb(o{kx"}{s.a2+fguzpdnx1=12g9V4*aun'xm#jb?.sf,cwgt&{y"m>/fov|+ajS9W%k`?!m00e?P6(o{l%~k!hl1,q`*auiz$yy} c0-dip~)odQ:Q#ibs/op6c=R8&myj#|i/fn3*wb(o{kx"}{s.a2+bkrp'mfW?S!glq-iv4a3\:$kh!rg-dh5(ul&mym~ }suq,g4)`e|r%k`U<]/enw+kt:o1^<"i}f/pe+bj7&{n$ko|.sqww*e6'ng~t#ib[5_-chu)ez887X> gsd-vc)`d9$yh"i}ar,qwqu(k8%}=1>1229V4*aun'xm#jb?.sf,cwgt&{y"m>/w3?5;443\:$kh!rg-dh5(ul&mym~ }suq,g4)q9585>>5Z0.eqb+ta'nf;"j gscp*wus{&i:#{?33?00?P6(o{l%~k!hl1,q`*auiz$yy} c0-u5929:k1^<"i}f/pe+bj7&{n$ko|.sqww*e6';T?000a?P6(o{l%~k!hl1,q`*auiz$yy} c0-u5Z5Xign;<=>>2c9V4*aun'xm#jb?.sf,cwgt&{y"m>/w3\0Zhh|9:;<<S7'nxm"h gm2-va)`zhy%~~z|/scn[`kw|pUmnRgPos234575;2_;#j|i.sd,ci6)zm%y|cz}/LalqkrXkfex?:4U1-dvc(un&mg<#|k/srmpw)JkfexRm`uov261=R8&myj#|i/fn3*wb(zyd~"Clotlw[firf}8986[?/fpe*w`(oe:%~i!}povq+Heh}g~Tob{at207?P6(o{l%~k!hl1,q`*twf}x$Anaznu]`kphs<;>0Y=!hrg,qb*ak8'xo#~ats-Ngjsi|Vidycz:259V4*aun'xm#jb?.sf,vuhsz&Ghcx`{_bmvjq05<2_;#j|i.sd,ci6)zm%y|cz}/LalqkrXkfex:<;;T2,cw`)zo%l`= }d.psjqt(Eje~byQlotlw<7?<]9%l~k }f.eo4+tc'{zex!BcnwmpZeh}g~Tot2?>3a8Q5)`zo$yj"ic0/pg+wvi|{%Fob{at^alqkrXkp6;2R|{289V4*aun'xm#jb?.sf,vuhsz&Ghcx`{_bmvjqYdq5;5>n5Z0.eqb+ta'nf;"j rqlwv*Kdg|dSnaznu]`}979W{~956[?/fpe*w`(oe:%~i!}povq+Heh}g~Tob{at^az8785k2_;#j|i.sd,ci6)zm%y|cz}/LalqkrXkfexRmv<3<\vq4>3\:$kh!rg-dh5(ul&x{by| MbmvjqYdg|dSnw33?0`?P6(o{l%~k!hl1,q`*twf}x$Anaznu]`kphsWjs7?3Q}t3;8Q5)`zo$yj"ic0/pg+wvi|{%Fob{at^alqkrXkp6?2?m4U1-dvc(un&mg<#|k/srmpw)JkfexRm`uov\g|:36Vx>45Z0.eqb+ta'nf;"j rqlwv*Kdg|dSnaznu]`}939:j1^<"i}f/pe+bj7&{n$~}`{r.O`kphsWje~byQly=7=[wr512_;#j|i.sd,ci6)zm%y|cz}/LalqkrXkfexRmv<7<1g>S7'nxm"h gm2-va)uxg~y#@m`uov\gjsi|Vir0;0Pru0:?P6(o{l%~k!hl1,q`*twf}x$Anaznu]`kphsWjs7;3 gsd-vc)`d9$yh"|nup,Ifirf}Uhcx`{_ymq8485i2_;#j|i.sd,ci6)zm%y|cz}/LalqkrXkfexRv`r=0=6d=R8&myj#|i/fn3*wb(zyd~"Clotlw[firf}Usc2<>3c8Q5)`zo$yj"ic0/pg+wvi|{%Fob{at^alqkrXpfx7834:7g<]9%l~k }f.eo4+tc'{zex!BcnwmpZeh}g~Ttb|38?0g?P6(o{l%~k!hl1,q`*twf}x$Anaznu]`kphsWqey050Pru3e?P6(o{l%~k!hl1,q`*twf}x$ob{at=2=5c=R8&myj#|i/fn3*wb(zyd~"m`uov?5;7a3\:$kh!rg-dh5(ul&x{by| cnwmp9499o1^<"i}f/pe+bj7&{n$~}`{r.alqkr;;7;m7X> gsd-vc)`d9$yh"|nup,gjsi|5>5=k5Z0.eqb+ta'nf;"j rqlwv*eh}g~793?i;T2,cw`)zo%l`= }d.psjqt(kfex1811g9V4*aun'xm#jb?.sf,vuhsz&idycz37?3e?P6(o{l%~k!hl1,q`*twf}x$ob{at=:=5`=R8&myj#|i/fn3*wb(zyd~"m`uov\44c<]9%l~k }f.eo4+tc'{zex!lotlw[47b3\:$kh!rg-dh5(ul&x{by| cnwmpZ46m2_;#j|i.sd,ci6)zm%y|cz}/bmvjqY49l1^<"i}f/pe+bj7&{n$~}`{r.alqkrX<8o0Y=!hrg,qb*ak8'xo#~ats-`kphsW<;n7X> gsd-vc)`d9$yh"|nup,gjsi|V<:i6[?/fpe*w`(oe:%~i!}povq+firf}U<=h5Z0.eqb+ta'nf;"j rqlwv*eh}g~T4?<4U1-dvc(un&mg<#|k/srmpw)dg|dSi?30?01?P6(o{l%~k!hl1,q`*twf}x$ob{at^f28485:2_;#j|i.sd,ci6)zm%y|cz}/bmvjqYc9585>?5Z0.eqb+ta'nf;"j rqlwv*eh}g~Th<2<>308Q5)`zo$yj"ic0/pg+wvi|{%hcx`{_e3?0;453\:$kh!rg-dh5(ul&x{by| cnwmpZb64<49>6[?/fpe*w`(oe:%~i!}povq+firf}Uo=181239V4*aun'xm#jb?.sf,vuhsz&idyczPd0>4:74<]9%l~k }f.eo4+tc'{zex!lotlw[a7;078:7X> gsd-vc)`d9$yh"|nup,gjsi|Vn:S=<>;T2,cw`)zo%l`= }d.psjqt(kfexRj>_002?P6(o{l%~k!hl1,q`*twf}x$ob{at^f2[7463\:$kh!rg-dh5(ul&x{by| cnwmpZb6W:8:7X> gsd-vc)`d9$yh"|nup,gjsi|Vn:S9<>;T2,cw`)zo%l`= }d.psjqt(kfexRj>_402?P6(o{l%~k!hl1,q`*twf}x$ob{at^f2[3463\:$kh!rg-dh5(ul&x{by| cnwmpZb6W>8:7X> gsd-vc)`d9$yh"|nup,gjsi|Vn:S5<;;T2,cw`)zo%l`= }d.psjqt(kfexR``t12356`<]9%l~k }f.eo4+qu'n}j#if/uqtc)JimnThdhi_qlwvZvflVkoh=>?0^az8584n2_;#j|i.sd,ci6){%l{l}!gqd-swva'DkohRjffg]sjqtXxhnTmij?012\g|:66:l0Y=!hrg,qb*ak8'}y#jyns/esb+quxo%FmijPdhde[uhszVzjhRokd1234Ze~4;48j6[?/fpe*w`(oe:%{!hw`q-cu`){zm#@okd^fjbcYwf}xT|ljPaef3456Xkp682>h4U1-dvc(un&mg<#y}/fubw+awn'}y|k!Baef\`l`aWyd~R~nd^cg`5678Vir090!ws-dsdu)oyl%{~i/Lcg`ZbnnoU{by|Pp`f\eab789:Tot2:>2d8Q5)`zo$yj"ic0/uq+bqf{'m{j#y}pg-NeabXl`lmS}`{r^rb`Zgcl9:;S7'nxm"h gm2-sw)`hy%k}h!wsre+HgclVnbjkQnup\tdbXimn;<=>Pcx>4:6`<]9%l~k }f.eo4+qu'n}j#if/uqtc)JimnThdhi_qlwvZvflVkoh=>?0^az8=84n2_;#j|i.sd,ci6){%l{l}!gqd-swva'DkohRjffg]sjqtXxhnTmij?012\g|:>6=;0Y=!hrg,qb*ak8'}y#jyns/esb+quxo%FmijPdhde[uhszVzjhRokd1234Zjr|5;;29>4U1-dvc(un&mg<#y}/fubw+awn'}y|k!Baef\`l`aWyd~R~nd^cg`5678Vf~x1?1479V4*aun'xm#jb?.vp,crgt&nzm"z|f.Ob`aYcaolT|cz}_qcg[dbc89:;Sa{{<0<\MKPX8=:0Y=!hrg,qb*ak8'}y#jyns/esb+quxo%FmijPdhde[uhszVzjhRokd1234Zjr|5858=5Z0.eqb+ta'nf;"z| gvcp*bva&~x{j"Cnde]gmc`Xxg~yS}ok_`fg4567We0>0;0:W3+bta&{l$ka>!ws-dsdu)oyl%{~i/Lcg`ZbnnoU{by|Pp`f\eab789:T`xz34?63?P6(o{l%~k!hl1,tv*apiz$l|k xrqd,IdbcWmcmjR~ats]seaYflm:;<=Qcuu>6:16<]9%l~k }f.eo4+qu'n}j#if/uqtc)JimnThdhi_qlwvZvflVkoh=>?0^nvp909<91^<"i}f/pe+bj7&~x$kzo|.fre*rtwn&GjhiQkigd\tkruWykoSljk0123[iss4>4?<6[?/fpe*w`(oe:%{!hw`q-cu`){zm#@okd^fjbcYwf}xT|ljPaef3456Xd|~743:?;T2,cw`)zo%l`= xr.etev(`xo$|~}h M`fg[aoanVzexQae]b`a6789Ugyy26>538Q5)`zo$yj"ic0/uq+bqf{'m{j#y}pg-NeabXl`lmS}`{r^rb`Zgcl9:;?0^zlv979<91^<"i}f/pe+bj7&~x$kzo|.fre*rtwn&GjhiQkigd\tkruWykoSljk0123[}iu4;4?<6[?/fpe*w`(oe:%{!hw`q-cu`){zm#@okd^fjbcYwf}xT|ljPaef3456Xpfx7?3:?;T2,cw`)zo%l`= xr.etev(`xo$|~}h M`fg[aoanVzexQae]b`a6789Usc2;>528Q5)`zo$yj"ic0/uq+bqf{'m{j#y}pg-NeabXl`lmS}`{r^rb`Zgcl9:;?_ymq838382_;#j|i.sd,ci6){%l{l}!gqd-swva'DkohRjffg]sjqtXxhnTmij?012\|jt;?7>;7X> gsd-vc)`d9$|~"ixar,dtc(pzyl$Aljk_ekebZvi|{U{miQnde2345Yg{6329>4U1-dvc(un&mg<#y}/fubw+awn'}y|k!Baef\`l`aWyd~R~nd^cg`5678Vrd~171319V4*aun'xm#jb?.vp,crgt&nzm"z|f.fjbcYwf}xT|lj311<1b>S7'nxm"h gm2-sw)`hy%k}h!wsre+aoanVzexQae>2:7`<]9%l~k }f.eo4+qu'n}j#if/uqtc)caolT|cz}_qcg8785n2_;#j|i.sd,ci6){%l{l}!gqd-swva'mcmjR~ats]sea:46;l0Y=!hrg,qb*ak8'}y#jyns/esb+quxo%oekhPpovq[ugc4=49j6[?/fpe*w`(oe:%{!hw`q-cu`){zm#igif^rmpwYwim6>2?h4U1-dvc(un&mg<#y}/fubw+awn'}y|k!kigd\tkruWyko0;0=f:W3+bta&{l$ka>!ws-dsdu)oyl%{~i/ekebZvi|{U{mi28>3d8Q5)`zo$yj"ic0/uq+bqf{'m{j#y}pg-gmc`Xxg~yS}ok<9<1b>S7'nxm"h gm2-sw)`hy%k}h!wsre+aoanVzexQae>::7c<]9%l~k }f.eo4+qu'n}j#if/uqtc)caolT|cz}_qcg[44a3\:$kh!rg-dh5(pz&m|m~ hpg,tvu`(l`lmS}`{r^rb`Z77:l1^<"i}f/pe+bj7&~x$kzo|.fre*rtwn&nbjkQnup\tdbX:;o0Y=!hrg,qb*ak8'}y#jyns/esb+quxo%oekhPpovq[ugcW:8n7X> gsd-vc)`d9$|~"ixar,dtc(pzyl$hdhi_qlwvZvflV>9i6[?/fpe*w`(oe:%{!hw`q-cu`){zm#igif^rmpwYwimU>>h5Z0.eqb+ta'nf;"z| gvcp*bva&~x{j"jffg]sjqtXxhnT:?k4U1-dvc(un&mg<#y}/fubw+awn'}y|k!kigd\tkruWykoS:!ws-dsdu)oyl%{~i/ekebZvi|{U{miQ6399V4*aun'xm#jb?.vp,crgt&nzm"z|f.fjbcYwf}xT|ljPaef3456;9948;6[?/fpe*w`(oe:%{!hw`q-cu`){zm#igif^rmpwYwimUjhi>?01>2:61<]9%l~k }f.eo4+qu'n}j#if/uqtc)caolT|cz}_qcg[dbc89:;0?0<7:W3+bta&{l$ka>!ws-dsdu)oyl%{~i/ekebZvi|{U{miQnde2345:46:=0Y=!hrg,qb*ak8'}y#jyns/esb+quxo%oekhPpovq[ugcWhno<=>?<5<03>S7'nxm"h gm2-sw)`hy%k}h!wsre+aoanVzexQae]b`a67896>2>94U1-dvc(un&mg<#y}/fubw+awn'}y|k!kigd\tkruWykoSljk01238384?2_;#j|i.sd,ci6){%l{l}!gqd-swva'mcmjR~ats]seaYflm:;<=28>258Q5)`zo$yj"ic0/uq+bqf{'m{j#y}pg-gmc`Xxg~yS}ok_`fg45674148;6[?/fpe*w`(oe:%{!hw`q-cu`){zm#igif^rmpwYwimUjhi>?01>::7g<]9%l~k }f.eo4+qu'n}j#if/uqtc)wzfmTjxbc_h11?P6(o{l%~k!hl1,tv*apiz$l|k xrqd,twi`Wog`RgPmtz34554<2_;#j|i.sd,ci6){%l{l}!gqd-swva'yxdkRhzlm]j[hs89:8=8=;;T2,cw`)zo%l`= xr.etev(`xo$|~}h psmd[cskdVcTaxv?0112<6><]9%l~k }f.eo4+qu'n}j#if/uqtc)wzfmTjxbc_h]nq}678:;3S^Y?339V4*aun'xm#jb?.vp,crgt&nzm"z|f.rqkbYa}efTeR``t12357?<]9%l~k }f.eo4+qu'n}j#y|tr-`5*efz{seiy2?>3;8Q5)`zo$yj"ic0/uq+bqf{'}xx~!l1.abvwim}6:2?74U1-dvc(un&mg<#y}/fubw+qt|z%h="mnrs{maq:56;30Y=!hrg,qb*ak8'}y#jyns/uppv)d9&ij~waeu>0:7`<]9%l~k }f.eo4+qu'n}j#y|tr-`5*aj}q$laV>R.fo2*h75n2_;#j|i.sd,ci6){%l{l}!wrvp+f7(ods"jcT1\,div(j{;l0Y=!hrg,qb*ak8'}y#jyns/uppv)d9&mfyu hmZ0^*bkt&dy9j6[?/fpe*w`(oe:%{!hw`q-svrt'j;$k`{w.foX7X(`ez$f?h4U1-dvc(un&mg<#y}/fubw+qt|z%h="ibuy,di^2Z&ngx"`}=3:W3+bta&{l$ka>!ws-dsdu)z~x#n? v0>3:75<]9%l~k }f.eo4+qu'n}j#y|tr-`5*p64849?6[?/fpe*w`(oe:%{!hw`q-svrt'j;$z<2=>318Q5)`zo$yj"ic0/uq+bqf{'}xx~!l1.t28685;2_;#j|i.sd,ci6){%l{l}!wrvp+f7(~86?2?l4U1-dvc(un&mg<#y}/fubw+qt|z%h="x>_1]bja6789;9n6[?/fpe*w`(oe:%{!hw`q-svrt'j;$z_`lg45679;h0Y=!hrg,qb*ak8'}y#jyns/uppv)d9&|:S?Qnne234575j2_;#j|i.sd,ci6){%l{l}!wrvp+f7(~8U8Sl`k012357d<]9%l~k }f.eo4+qu'n}j#y|tr-`5*p6W=Ujbi>?0131=>S7'nxm"h gm2-sw)`hy%{~z|/b0,gdtuqgo0=0=9:W3+bta&{l$ka>!ws-dsdu)z~x#n< c`pq}kcs484956[?/fpe*w`(oe:%{!hw`q-svrt'j8$ol|}yogw878512_;#j|i.sd,ci6){%l{l}!wrvp+f4(khxyuck{<2<1b>S7'nxm"h gm2-sw)`hy%{~z|/b0,chs&ngP

"x><1<17>S7'nxm"h gm2-sw)`hy%{~z|/b0,r4:66;90Y=!hrg,qb*ak8'}y#jyns/uppv)d:&|:0?0=3:W3+bta&{l$ka>!ws-dsdu)z~x#n< v0>0:75<]9%l~k }f.eo4+qu'n}j#y|tr-`6*p64=49n6[?/fpe*w`(oe:%{!hw`q-svrt'j8$z?0131f>S7'nxm"h gm2-sw)`hy%{~z|/b0,r4Y3Whdo<=>?1328Q5)`zo$yj"ic0/uq+bqf{'}xx~!lolr265=R8&myj#|i/fn3*rt(o~kx"z}{s.aliu4582_;#j|i.sd,ci6){%l{l}!wrvp+fijx:8o7X> gsd-vc)`d9$|~"ixar,twqu(ohl%o>!laspzj`r;878o7X> gsd-vc)`d9$|~"ixar,twqu(ohl%o>!laspzj`r;978o7X> gsd-vc)`d9$|~"ixar,twqu(ohl%o>!laspzj`r;:78o7X> gsd-vc)`d9$|~"ixar,twqu(ohl%o>!laspzj`r;;7987X> gsd-vc)`d9$|~"ixar,twqu(ohl%o>!hmtz-ch]7U'mf=#c>329V4*aun'xm#jb?.vp,crgt&~y"inf/a0+bkrp'mfW5Z0.eqb+ta'nf;"z| gvcp*rus{&mjj#m1^<"i}f/pe+bj7&~x$kzo|.vqww*afn'i8#{?30?04?P6(o{l%~k!hl1,tv*apiz$|y} g`d-g6)q95;5>:5Z0.eqb+ta'nf;"z| gvcp*rus{&mjj#m gsd-vc)`d9$|~"ixar,twqu(ohl%o>!y1^2\ekb789::>k5Z0.eqb+ta'nf;"z| gvcp*rus{&mjj#m>2g9V4*aun'xm#jb?.vp,crgt&~y"inf/a0+s7X;Vkeh=>?000e?P6(o{l%~k!hl1,tv*apiz$|y} g`d-g6)q9V>Tmcj?01226f=R8&myj#|i/fn3*rt(o~kx"z}{s.pbiZgkefySk{cl^k00>S7'nxm"h gm2-sw)`hy%{~z|/scn[djjgz~Tjxbc_h]nq}67899>7X> gsd-vc)`d9$|~"ixar,twqu(zhgTmac`su]eqijXaVg~t=>?001a?P6(o{l%~k!hl1,tv*apiz$|y} r`o\eikh{}UmyabPi^llp56798UBB[Q?299V4*aun'xm#jb?.vp,crgt&~y"|nm^dvhiYajVc996[?/fpe*w`(oe:%{!hw`q-svrt'{kfSk{cl^k1`>S7'nxm"h gm2-sw)`hy%{~z|/scn[cskdVcTaxv?0121a>S7'nxm"h gm2-sw)`hy%{~z|/scn[cskdVcTaxv?01225a=R8&myj#|i/fn3*rt(zhgT{Qjn^k25c=R8&myj#|i/fn3*rt(zhgT{Qjn^k2[4443\:$kh!rg-dh5(pz&}{by| MbmvjqYdg|d>95Z0.eqb+ta'nf;"z| wqlwv*Kdg|dSnaznu310>S7'nxm"h gm2-sw)pxg~y#@m`uov\gjsi|;8?7X> gsd-vc)`d9$|~"ynup,Ifirf}Uhcx`{3368Q5)`zo$yj"ic0/uq+rvi|{%Fob{at^alqkr3:=1^<"i}f/pe+bj7&~x${}`{r.O`kphsWje~by;=4:W3+bta&{l$ka>!ws-ttkru'DidyczPcnwmp3433\:$kh!rg-dh5(pz&}{by| MbmvjqYdg|d;?:4U1-dvc(un&mg<#y}/vrmpw)JkfexRm`uov;61=R8&myj#|i/fn3*rt(yd~"Clotlw[firf}3956[?/fpe*w`(oe:%{!xpovq+Heh}g~Tob{at^az8585k2_;#j|i.sd,ci6){%||cz}/LalqkrXkfexRmv<1<\vq4>3\:$kh!rg-dh5(pz&}{by| MbmvjqYdg|dSnw31?0`?P6(o{l%~k!hl1,tv*qwf}x$Anaznu]`kphsWjs7=3Q}t3;8Q5)`zo$yj"ic0/uq+rvi|{%Fob{at^alqkrXkp692?m4U1-dvc(un&mg<#y}/vrmpw)JkfexRm`uov\g|:56Vx>45Z0.eqb+ta'nf;"z| wqlwv*Kdg|dSnaznu]`}959:j1^<"i}f/pe+bj7&~x${}`{r.O`kphsWje~byQly=1=[wr512_;#j|i.sd,ci6){%||cz}/LalqkrXkfexRmv<5<1g>S7'nxm"h gm2-sw)pxg~y#@m`uov\gjsi|Vir090Pru0:?P6(o{l%~k!hl1,tv*qwf}x$Anaznu]`kphsWjs7935:Zts:01^<"i}f/pe+bj7&~x${}`{r.O`kphsWje~byQly=5=6f=R8&myj#|i/fn3*rt(yd~"Clotlw[firf}Uhu191_sv1=>S7'nxm"h gm2-sw)pxg~y#@m`uov\gjsi|Vir050=c:W3+bta&{l$ka>!ws-ttkru'DidyczPcnwmpZe~414T~y1:7g<]9%l~k }f.eo4+qu'~zex!BcnwmpZeh}g~Ttb|33?0b?P6(o{l%~k!hl1,tv*qwf}x$Anaznu]`kphsWqey090=a:W3+bta&{l$ka>!ws-ttkru'DidyczPcnwmpZ~hz5?5>l5Z0.eqb+ta'nf;"z| wqlwv*Kdg|dSnaznu]{kw:16;k0Y=!hrg,qb*ak8'}y#z~ats-Ngjsi|VidyczPxnp?3;4f3\:$kh!rg-dh5(pz&}{by| MbmvjqYdg|dSua}<9<1e>S7'nxm"h gm2-sw)pxg~y#@m`uov\gjsi|Vrd~1712e9V4*aun'xm#jb?.vp,suhsz&Ghcx`{_bmvjqYg{622R|{1g9V4*aun'xm#jb?.vp,suhsz&idycz30?3e?P6(o{l%~k!hl1,tv*qwf}x$ob{at=3=5c=R8&myj#|i/fn3*rt(yd~"m`uov?6;7a3\:$kh!rg-dh5(pz&}{by| cnwmp9599o1^<"i}f/pe+bj7&~x${}`{r.alqkr;<7;m7X> gsd-vc)`d9$|~"ynup,gjsi|5?5=k5Z0.eqb+ta'nf;"z| wqlwv*eh}g~7:3?i;T2,cw`)zo%l`= xr.usjqt(kfex1911g9V4*aun'xm#jb?.vp,suhsz&idycz38?3e?P6(o{l%~k!hl1,tv*qwf}x$ob{at=;=5`=R8&myj#|i/fn3*rt(yd~"m`uov\44c<]9%l~k }f.eo4+qu'~zex!lotlw[47b3\:$kh!rg-dh5(pz&}{by| cnwmpZ46m2_;#j|i.sd,ci6){%||cz}/bmvjqY49l1^<"i}f/pe+bj7&~x${}`{r.alqkrX<8o0Y=!hrg,qb*ak8'}y#z~ats-`kphsW<;n7X> gsd-vc)`d9$|~"ynup,gjsi|V<:i6[?/fpe*w`(oe:%{!xpovq+firf}U<=h5Z0.eqb+ta'nf;"z| wqlwv*eh}g~T4<1<16>S7'nxm"h gm2-sw)pxg~y#naznu]g5979:;1^<"i}f/pe+bj7&~x${}`{r.alqkrXl8692?<4U1-dvc(un&mg<#y}/vrmpw)dg|dSi?33?01?P6(o{l%~k!hl1,tv*qwf}x$ob{at^f28185:2_;#j|i.sd,ci6){%||cz}/bmvjqYc95?5>?5Z0.eqb+ta'nf;"z| wqlwv*eh}g~Th<29>308Q5)`zo$yj"ic0/uq+rvi|{%hcx`{_e3?3;453\:$kh!rg-dh5(pz&}{by| cnwmpZb64149>6[?/fpe*w`(oe:%{!xpovq+firf}Uo=171209V4*aun'xm#jb?.vp,suhsz&idyczPd0]364=R8&myj#|i/fn3*rt(yd~"m`uov\`4Y6:81^<"i}f/pe+bj7&~x${}`{r.alqkrXl8U9><5Z0.eqb+ta'nf;"z| wqlwv*eh}g~Th<5Z0.eqb+ta'nf;"z| wqlwv*eh}g~Th:;1^<"i}f/pe+bj7&~x${}`{r.alqkrXl;6;2?<4U1-dvc(un&mg<#y}/vrmpw)dg|dSi<31?01?P6(o{l%~k!hl1,tv*qwf}x$ob{at^f18785:2_;#j|i.sd,ci6){%||cz}/bmvjqYc:595>?5Z0.eqb+ta'nf;"z| wqlwv*eh}g~Th?2;>308Q5)`zo$yj"ic0/uq+rvi|{%hcx`{_e0?1;453\:$kh!rg-dh5(pz&}{by| cnwmpZb54?49>6[?/fpe*w`(oe:%{!xpovq+firf}Uo>191239V4*aun'xm#jb?.vp,suhsz&idyczPd3>;:74<]9%l~k }f.eo4+qu'~zex!lotlw[a4;178:7X> gsd-vc)`d9$|~"ynup,gjsi|Vn9S=<>;T2,cw`)zo%l`= xr.usjqt(kfexRj=_002?P6(o{l%~k!hl1,tv*qwf}x$ob{at^f1[7463\:$kh!rg-dh5(pz&}{by| cnwmpZb5W:8:7X> gsd-vc)`d9$|~"ynup,gjsi|Vn9S9<>;T2,cw`)zo%l`= xr.usjqt(kfexRj=_402?P6(o{l%~k!hl1,tv*qwf}x$ob{at^f1[3463\:$kh!rg-dh5(pz&}{by| cnwmpZb5W>8:7X> gsd-vc)`d9$|~"ynup,gjsi|Vn9S5<>;T2,cw`)zo%l`= xr.usjqt(kfexRj=_801?P6(o{l%~k!hl1,tv*qwf}x$ob{at^f08585:2_;#j|i.sd,ci6){%||cz}/bmvjqYc;5;5>?5Z0.eqb+ta'nf;"z| wqlwv*eh}g~Th>2=>308Q5)`zo$yj"ic0/uq+rvi|{%hcx`{_e1?7;453\:$kh!rg-dh5(pz&}{by| cnwmpZb44=49>6[?/fpe*w`(oe:%{!xpovq+firf}Uo?1;1239V4*aun'xm#jb?.vp,suhsz&idyczPd2>5:74<]9%l~k }f.eo4+qu'~zex!lotlw[a5;?7897X> gsd-vc)`d9$|~"ynup,gjsi|Vn8050=2:W3+bta&{l$ka>!ws-ttkru'je~byQk3=;=64=R8&myj#|i/fn3*rt(yd~"m`uov\`6Y7:81^<"i}f/pe+bj7&~x${}`{r.alqkrXl:U:><5Z0.eqb+ta'nf;"z| wqlwv*eh}g~Th>Q=209V4*aun'xm#jb?.vp,suhsz&idyczPd2]064=R8&myj#|i/fn3*rt(yd~"m`uov\`6Y3:81^<"i}f/pe+bj7&~x${}`{r.alqkrXl:U>><5Z0.eqb+ta'nf;"z| wqlwv*eh}g~Th>Q9209V4*aun'xm#jb?.vp,suhsz&idyczPd2]464=R8&myj#|i/fn3*rt(yd~"m`uov\`6Y?:81^<"i}f/pe+bj7&~x${}`{r.alqkrXl:U2>95Z0.eqb+ta'nf;"z| wqlwv*eh}g~Tbbz?01323>S7'nxm"h mdo,`jssW`6;2<64U1-dvc(un&gna"j`uu]j8469911^<"i}f/pe+hcj'me~xRg310<2<>S7'nxm"h mdo,`jssW`6:>3?7;T2,cw`)zo%fi`!kotv\m9746820Y=!hrg,qb*kbe&ndyyQf<06=5==R8&myj#|i/lgn+air|Vc7=80>8:W3+bta&{l$ahc dnww[l:6>7;37X> gsd-vc)jmd%ocxzPi=34:4><]9%l~k }f.ofi*bh}}Ub0<61199V4*aun'xm#`kb/emvpZo;904:;6[?/fpe*w`(elg$hb{{_h>2:4><]9%l~k }f.ofi*bh}}Ub0?>1199V4*aun'xm#`kb/emvpZo;:84:46[?/fpe*w`(elg$hb{{_h>16;7?3\:$kh!rg-nah)cg|~Te1<<>0:8Q5)`zo$yj"cjm.flqqYn4;>5=55Z0.eqb+ta'dof#iazt^k?608602_;#j|i.sd,i`k(lfSd2=6?3;?P6(o{l%~k!bel-gkprXa58<2<64U1-dvc(un&gna"j`uu]j87>9911^<"i}f/pe+hcj'me~xRg328<23>S7'nxm"h mdo,`jssW`692<64U1-dvc(un&gna"j`uu]j8669911^<"i}f/pe+hcj'me~xRg330<2<>S7'nxm"h mdo,`jssW`68>3?7;T2,cw`)zo%fi`!kotv\m9546820Y=!hrg,qb*kbe&ndyyQf<26=5==R8&myj#|i/lgn+air|Vc7?80>7:W3+bta&{l$ahc dnww[l:468=0Y=!hrg,qb*kbe&ndyyQf<5<23>S7'nxm"h mdo,`jssW`6>2<94U1-dvc(un&gna"j`uu]j8386?2_;#j|i.sd,i`k(lfSd28>058Q5)`zo$yj"cjm.flqqYn414:;6[?/fpe*w`(elg$hb{{_h>::40<]9%l~k }f.ofi*bh}}UbS=?9;T2,cw`)zo%fi`!kotv\mZ76?2_;#j|i.sd,i`k(lfSdQ>0058Q5)`zo$yj"cjm.flqqYnW8;:;6[?/fpe*w`(elg$hb{{_h]2641<]9%l~k }f.ofi*bh}}UbS<=>7:W3+bta&{l$ahc dnww[lY6<8=0Y=!hrg,qb*kbe&ndyyQf_0723>S7'nxm"h mdo,`jssW`U::<94U1-dvc(un&gna"j`uu]j[416?2_;#j|i.sd,i`k(lfSdQ>8058Q5)`zo$yj"cjm.flqqYnW83::6[?/fpe*w`(elg$hb{{_h]152=R8&myj#|i/lgn+air|VcT>=?8;T2,cw`)zo%fi`!kotv\mZ469>1^<"i}f/pe+hcj'me~xRgP2334?P6(o{l%~k!bel-gkprXaV88=:5Z0.eqb+ta'dof#iazt^k\61703\:$kh!rg-nah)cg|~TeR<:169V4*aun'xm#`kb/emvpZoX:?;<7X> gsd-vc)jmd%ocxzPi^0452=R8&myj#|i/lgn+air|VcT>5?8;T2,cw`)zo%fi`!kotv\mZ4>9?1^<"i}f/pe+hcj'me~xRgP3058Q5)`zo$yj"cjm.flqqYnW:::;6[?/fpe*w`(elg$hb{{_h]0541<]9%l~k }f.ofi*bh}}UbS><>7:W3+bta&{l$ahc dnww[lY4;8=0Y=!hrg,qb*kbe&ndyyQf_2623>S7'nxm"h mdo,`jssW`U89<84U1-dvc(un&gna"j`uu]j[1713\:$kh!rg-nah)cg|~TeR;>6:W3+bta&{l$ahc dnww[lY19?1^<"i}f/pe+hcj'me~xRgP7048Q5)`zo$yj"cjm.flqqYnW1;=7X> gsd-vc)jmd%ocxzPi^;2=>S7'nxm"h mdo,`jssWdof0=0>a:W3+bta&{l$ahc dnww[hcj48:5=l5Z0.eqb+ta'dof#iazt^ofi97668k0Y=!hrg,qb*kbe&ndyyQbel>26;7f3\:$kh!rg-nah)cg|~Tahc312<2e>S7'nxm"h mdo,`jssWdof0<:11`9V4*aun'xm#`kb/emvpZkbe5;>27;j7X> gsd-vc)jmd%ocxzPmdo?5286i2_;#j|i.sd,i`k(lfS`kb<0:=5d=R8&myj#|i/lgn+air|Vgna1?6>0;8Q5)`zo$yj"cjm.flqqYjmd6:2 gsd-vc)jmd%ocxzPmdo?6486i2_;#j|i.sd,i`k(lfS`kb<30=5d=R8&myj#|i/lgn+air|Vgna1<<>0c8Q5)`zo$yj"cjm.flqqYjmd6983?n;T2,cw`)zo%fi`!kotv\i`k;:<4:m6[?/fpe*w`(elg$hb{{_lgn87099h1^<"i}f/pe+hcj'me~xRcjm=04:4g<]9%l~k }f.ofi*bh}}Ufi`2=8?3b?P6(o{l%~k!bel-gkprXelg7>40>9:W3+bta&{l$ahc dnww[hcj4;4:m6[?/fpe*w`(elg$hb{{_lgn86699h1^<"i}f/pe+hcj'me~xRcjm=12:4g<]9%l~k }f.ofi*bh}}Ufi`2<2?3b?P6(o{l%~k!bel-gkprXelg7?>0>a:W3+bta&{l$ahc dnww[hcj4:>5=l5Z0.eqb+ta'dof#iazt^ofi9526830Y=!hrg,qb*kbe&ndyyQbel>0:4?<]9%l~k }f.ofi*bh}}Ufi`2;>0;8Q5)`zo$yj"cjm.flqqYjmd6>2<74U1-dvc(un&gna"j`uu]nah:16830Y=!hrg,qb*kbe&ndyyQbel>4:4?<]9%l~k }f.ofi*bh}}Ufi`27>0;8Q5)`zo$yj"cjm.flqqYjmd622::4U1-dvc(un&gna"imm/eaib(`jdmj"cijcb,aib)edbUfi`Qheogqeqiu'kgei lsup,vdkkgfzP

1d9V4*aun'xm#}{bmi,vaYu{}Uyij2?>0g8Q5)`zo$yj"||tcnh+wbXzz~T~hi31?3f?P6(o{l%~k!}su`oo*tcW{ySkh<3<2`>S7'nxm"h rrvahn)ulVxxxR|jg^22`>S7'nxm"h rrvahn)ulVxxxR|jg^32`>S7'nxm"h rrvahn)ulVxxxR|jg^02`>S7'nxm"h rrvahn)pzVxxxRo|rde14>S7'nxm"h rrvahn)pzVxxxRo|rde\`4473\:$kh!rg-qwqdkc&}yS}{_`qqabYc:8i0Y=!hrg,qb*tt|kf`#z|Prrv\gjke9m1^<"i}f/pe+wusjea${Q}su]`khd69l1^<"i}f/pe+wusjea${Q}su]qab:768o0Y=!hrg,qb*tt|kf`#z|Prrv\v`a;97;o7X> gsd-vc)u{}hgg"y}_sqw[wc`W9;o7X> gsd-vc)u{}hgg"y}_sqw[wc`W8k0Y^K]_@NJEVe<]ZOYS[G\ICNF7>PDK01]EHYPTXRF7>QBI:1\IOm4WSKWAZKHLLUJo6Y]IUG\IJBBWKn0[_G[E^UJ@QNXIm1\^DZJ_VKGPMYE9m1SEAGAX,ZGF%6)9)Y_YO.?.0"BWFON=2RD^NW9;YQWHLD03QY_SJ@K7:ZPPZPDKk1SSNA]E^KMBJ00:ZgiZKfbfx]i}foo33?]bjWDcecXjrrkljf=fddexxRkbpu{a?djjgz~Tjxbc6:`bgnswl2hjof{_lcqo`t43jf`h6jnt`]`kphs 9#o7io{a^alqkr/9 n0hlzn_bmvjq.5!m1omyoPcnwmp-5.l2njxlQlotlw,1/c3mkmRm`uov+1,bbf|hUhcx`{(9+g?agsiVidycz'9(d8`drfWje~by26:1<4?adn|lxy:6jfn)2*2>bnf!;";6jfn)33-2=cag":=$94dhl+57/03mce$<=&7:fjj-73!>1oec&>5(58`lh/9?#<7iga(05*2>bnf!8":6jfn)1*2>bnf!>":6jfn)7*2>bnf!<":6jfn)5*2>bnf!2":6jfn);*2>bnf5:5;6jfn=33:2=cag6:=394dhl?57803mce0<=17:fjj9736>1oec2>5?58`lh;9?427iga<0594;1&7:flqq.6!11ocxz'11+;?air|!;:%55kotv+57/?3me~x%?<)99gkpr/9=#37iazt)36-==cg|~#=;'7;emvp-70!11ocxz'19+;?air|!;2%:5kotv+6,>&8:flqq.59 20hb{{(30*<>bh}}"9?$64dnww,72.02ndyy&=5(:8`jss ;<"46j`uu*13,> =0hb{{(6+4?air|!2";6j`uu*:-2=cg|~7<364dnww846902ndyy2>1?:8`jss488546j`uu>27;>bh}}6:;364dnww84>902ndyy2>9?58`jss48437iazt=03:==cg|~7><07;emvp945611ocxz322<;?air|58?255kotv?608?3me~x1<9>99gkpr;:>437iazt=0;:==cg|~7>408;emvp94902ndyy2<0?:8`jss4:;546j`uu>06;>=18:flqq:4<7k0hb{{<2794;>;17:flqq:46>1ocxz34?58`jss4<4<7iazt=4=3>bh}}6<2:5kotv?<;12y15[7ekcV;3xb=9,gkekZabflxjxb|Pv7]2(KIIM%DDBH:?3:djbjYdgrT9<,b]kevYulVnjxlQlotlw95*dWmceSzgkti?2<)eX`hyT{Qkauc\gjsi|4:'oRhzlm]ehdatW{yS{oc=1.`[lkwdlgnbyo{inl\p|vb5;&hSx}j_doaaabblVxnk0>#c^uq[ctby4;'oR{|e^flqqYu{}7: nQznegqbiipWee|1="l_icp[jpbzofd{0>#c^rqaiiflVfjxh`ly<2/gZbh}}U|eizg=24/gZktofdTzlb21-a\vaYcmy~c18?=,b]fvwiuW`dainzfoo]w}uc:8%iTdl}Puoffvcjh4:'oRfns^coijusWog`0?#c^jbwZtt|4;'oRjnt`]`kphsW~coxe3>0-a\lduX{Ujof3?,b]vw`Ybkj7; nQlololjZekgja65)eXlfS}{_wco95*dWakxSio{a^alqkr:8%iT|ah_gwohZrozlycSckhaug\rdj:99;= nQxr^fftqn:998? nQrne\ahvsqV~c~h}g_ogdeqcX~hf69!mPpsmd[`kw|pUdk|h^cpw`tsWkg19"l_icp[sgkam7; nQrne\bpjkW}byi~fParqfvqYqie7:<<9#cnoskkci|Vdjah3iigm\|ihW<;9t>8P2bnh[4>sg:<'oRxnlhf\hjq:8%iT|gb_gkekZr~xl7:gu?7,b]svjaXn|fgSywe<3/gZkbefxrSywe<3/y60oiblihog{espg?lhmmj~xndzjrs58mkrXkea37cilbtko`==h~lxm`byn;qplcZcjx}s:86~}of]fiur~W}byi~f'0(37?uthoVof|ywPtipfwm.6!8>0|ah_dosp|Ys`{oxd%<&159svjaXmdzuRzgrdqk,6/6<2zycjQjmqvz[qnumzb#8$?;;qplcZcjx}sTxe|jsi*6-42vugnUna}zv_ujqavn/0 ;=7}|`g^gntqX|axne27:1<2f>vugnUna}zv_ujqavnXizyn~y&?)0`8twi`Wlg{xtQ{hsgplZgt{lx$<'>b:rqkbYbey~rSyf}erj\evubz}"9%vugnUna}zv_ujqavnXizyn~y&7)0f8twi`Wlg{xtQ{hsgplZgt{lx054?>0`8twi`Wlg{xtQ{hsgplZhboh~n$='>b:rqkbYbey~rSyf}erj\j`af|l":%vugnUna}zv_ujqavnXflmjxh&8)0`8twi`Wlg{xtQ{hsgplZhboh~n$5'>d:rqkbYbey~rSyf}erj\j`af|l636=06;qplcZ`rde;87}|`g^dvhiYs`{oxd%>&129svjaXn|fgSyf}erj+5,743yxdkRhzlm]wlwct`!8"=>5rne\bpjkW}byi~f'3(30?uthoVl~`aQ{hsgpl-2.9:1{~biPftno[qnumzb#9$?<;qplcZ`rdeUdk|h)4*56=wzfmTjxbc_ujqavn/? ;87}|`g^dvhiYs`{oxd%6&129svjaXn|fgSyf}erj+=,723yxdkRhzlm]wlwct`531<3?n;qplcZ`rdeUdk|h^cpw`ts 9#:m6~}of]eqijX|axneQnsrgqp-7.9h1{~biPftno[qnumzbTm~}jru*1-4ga:rqkbYa}efTxe|jsi]bwvcu|!?"=l5rne\bpjkW}byi~fParqfvq.1!8k0|ah_gwohZrozlycSl}|esv+3,7f3yxdkRhzlm]wlwct`Vkxh|{(9+2e>vugnUmyabPtipfwmYf{zoyx%7&1b9svjaXn|fgSyf}erj\evubz}626=0>a:rqkbYa}efTxe|jsi]mabgsm!:"=l5rne\bpjkW}byi~fPndebp`.6!8k0|ah_gwohZrozlycSckhaug+6,7f3yxdkRhzlm]wlwct`Vdnklzj(2+2e>vugnUmyabPtipfwmYimnki%:&1`9svjaXn|fgSyf}erj\j`af|l">% ;j7}|`g^dvhiYs`{oxdR`jg`vf,2/6i2zycjQiumn\pmtb{aUeijo{e):*5d=wzfmTjxbc_ujqavnXflmjxh&6)0a8twi`Wog`Rzgrdqk[kc`i}o757>16:pg[fjl991yhRjnt`]`kphs 9#:<6|k_ecweZeh}g~#=$??;sf\`drfWje~by&=)028vaYci}kTob{at)1*55=ulVnjxlQlotlw,1/682xoSio{a^alqkr/= ;;7jPd`vb[firf}"=%<>4re]geqgXkfex%9&119q`Zbf|hUhcx`{(9+24>tcWmkmRm`uov?4;753{nThlzn_bmvjq:?294>7jPeo48vaYu{}90~~z8;r`jp`tu<2yyy:4tswf=>sillxm`by:;wcoma0<{Ujof84ws]`hn773~xThlzn_bmvjq.7!8:0{Qkauc\gjsi|!;"==5xr^fbpdYdg|d$?'>0:uq[agsiVidycz'3(33?rtXlh~jSnaznu*7-46<{UomyoPcnwmp-3.991|~Rjnt`]`kphs ?#:<6y}_ecweZeh}g~#;$??;vp\`drfWje~by&7)028swYci}kTob{at);*57=pzVnjxlQlotlw8<<76<1|~Rka6:uq[wusuIJ{oi64@Az2>C<328qX8k4:048;>455j?ih6>=:48ym0=2=92d?4849;%6;6?20k2wX8i4:048;>455j?ih6>=:489P57e==8:1<7?<2c4`g?54==30_9j550294?74:k:082g5}T<847:011f3ed2:9>845+467957b<^=286?uz12495>s6;>0;7p*>8182=>d2810;6>h53;1eM20;2P?970603`?>j7>5;n6;3?6=3f?8=7>5;h740?6=3f?;o7>5;n732?6=3`?=47>5;h755?6=3f>o57>5$0:1>1`d3g;3=7>4;n6go;7>5$0:1>1`d3g;3=7<4;n6g2?6=,82969hl;o3;5?5<3f>o97>5$0:1>1`d3g;3=7:4;n6g0?6=,82969hl;o3;5?3<3f>o>7>5$0:1>1`d3g;3=784;n6g5?6=,82969hl;o3;5?1<3f>o<7>5$0:1>1`d3g;3=764;n6`b?6=,82969hl;o3;5??<3f>hi7>5$0:1>1`d3g;3=7o4;n6``?6=,82969hl;o3;5?d<3f>ho7>5$0:1>1`d3g;3=7m4;n6`f?6=,82969hl;o3;5?b<3f>hm7>5$0:1>1`d3g;3=7k4;n6`=?6=,82969hl;o3;5?`<3f>h;7>5$0:1>1`d3g;3=7??;:m7g3<72-;3>7:ic:l2<4<6921d8n;50;&2<7<3nj1e=5?51398k1e3290/=5<54ga8j4>628907b:l3;29 4>52=lh7c?71;37?>i3k;0;6)?72;6eg>h6080:965`4b394?"60;0?jn5a193953=9:9l0a`=83.:4?4;fb9m5=7=9h10c9jj:18'5=4=:0`8?j2cl3:1(<6=:5d`?k7?93;h76a;db83>!7?:3>mo6`>8082`>=h8387bf=i91;1=h54o5fb>5<#91818km4n0:2>4`<3f>o?7>5$0:1>1`d3g;3=77:ic:l2<4<5921d8oj50;&2<7<3nj1e=5?52398k1dd290/=5<54ga8j4>62;907d:n0;29 4>52=h:7c?71;28?l2>n3:1(<6=:5`2?k7?93;07d:6e;29 4>52=h:7c?71;08?l2>l3:1(<6=:5`2?k7?93907d:6c;29 4>52=h:7c?71;68?l2>j3:1(<6=:5`2?k7?93?07d:6a;29 4>52=h:7c?71;48?l2>13:1(<6=:5`2?k7?93=07d:n8;29 4>52=h:7c?71;:8?l2f?3:1(<6=:5`2?k7?93307d:n6;29 4>52=h:7c?71;c8?l2f=3:1(<6=:5`2?k7?93h07d:n4;29 4>52=h:7c?71;a8?l2f;3:1(<6=:5`2?k7?93n07d:n2;29 4>52=h:7c?71;g8?l2f93:1(<6=:5`2?k7?93l07d:68;29 4>52=h:7c?71;33?>o31>0;6)?72;6a5>h6080:=65f54194?=e<>>1<7?50;2xL1143-;2=7:84:m23c<722wih54?:083>5}O<>90(<7>:e:8ka1=831vn9:50;c5>4>328i;wE:83:X71?71s;31>54=a;f9e?d=k3;36ao4=9;32>f62910e8<;:18'5=4==;<0b<6>:098m044290/=5<55348j4>62;10e8<=:18'5=4==;<0b<6>:298m046290/=5<55348j4>62=10e8:498m07a290/=5<55348j4>62?10e8?j:18'5=4==;<0b<6>:698m07c290/=5<55348j4>62110e8>j:188m0072900e88<:188k0012900e8?m:18'5=4==8i0b<6>:198m07f290/=5<550a8j4>62810e8?6:18'5=4==8i0b<6>:398m07?290/=5<550a8j4>62:10e8?8:18'5=4==8i0b<6>:598m071290/=5<550a8j4>62<10e8?::18'5=4==8i0b<6>:798m073290/=5<550a8j4>62>10e8?<:18'5=4==8i0b<6>:998m03a2900c8?>:188m04a290/=5<55228j4>62910e8:098m04c290/=5<55228j4>62;10e8:298m04e290/=5<55228j4>62=10e8:498m04>290/=5<55228j4>62?10e8<7:18'5=4==::0b<6>:698m040290/=5<55228j4>62110c968:188k1?3290/=5<54878j4>62910c97<:18'5=4=<0?0b<6>:098k1?5290/=5<54878j4>62;10c97>:18'5=4=<0?0b<6>:298k1?7290/=5<54878j4>62=10c96i:18'5=4=<0?0b<6>:498k1>b290/=5<54878j4>62?10c96k:18'5=4=<0?0b<6>:698k1>d290/=5<54878j4>62110c96m:18'5=4=<0?0b<6>:898k0562900e89;:188m05e290/=5<552a8j4>62910e8=n:18'5=4==:i0b<6>:098m05>290/=5<552a8j4>62;10e8=7:18'5=4==:i0b<6>:298m050290/=5<552a8j4>62=10e8=9:18'5=4==:i0b<6>:498m052290/=5<552a8j4>62?10e8=;:18'5=4==:i0b<6>:698m054290/=5<552a8j4>62110e8==:18'5=4==:i0b<6>:898k06d2900c8>9:188m00?2900e966:188m021290/=5<55558j4>62910e8:::18'5=4====0b<6>:098m023290/=5<55558j4>62;10e8:<:18'5=4====0b<6>:298m025290/=5<55558j4>62=10e8:>:18'5=4====0b<6>:498m027290/=5<55558j4>62?10e8=i:18'5=4====0b<6>:698m05b290/=5<55558j4>62110e8=k:18'5=4====0b<6>:898m036290/=5<55408j4>62910e8;?:18'5=4==<80b<6>:098m02a290/=5<55408j4>62;10e8:j:18'5=4==<80b<6>:298m02c290/=5<55408j4>62=10e8:l:18'5=4==<80b<6>:498m02e290/=5<55408j4>62?10e8:n:18'5=4==<80b<6>:698m02>290/=5<55408j4>62110e8:7:18'5=4==<80b<6>:898k1>12900e8>i:188m1>f2900e89::188k0052900c888:188m0062900c9j6:18'5=4=:198k1b?290/=5<54ga8j4>62810c9j8:18'5=4=:398k1b1290/=5<54ga8j4>62:10c9j::18'5=4=:598k1b3290/=5<54ga8j4>62<10c9j=:18'5=4=:798k1b6290/=5<54ga8j4>62>10c9j?:18'5=4=:998k1ea290/=5<54ga8j4>62010c9mj:18'5=4=:`98k1ec290/=5<54ga8j4>62k10c9ml:18'5=4=:b98k1ee290/=5<54ga8j4>62m10c9mn:18'5=4=:d98k1e>290/=5<54ga8j4>62o10c9m8:18'5=4=:028?j2d>3:1(<6=:5d`?k7?93;:76a;c483>!7?:3>mo6`>80826>=h1<7*>8387bf=i91;1=>54o5a0>5<#91818km4n0:2>42<3f>h>7>5$0:1>1`d3g;3=7?:;:m7g4<72-;3>7:ic:l2<4<6>21d8n>50;&2<7<3nj1e=5?51698k1da290/=5<54ga8j4>628207b:me;29 4>52=lh7c?71;3:?>i3lo0;6)?72;6eg>h6080:m65`4eg94?"60;0?jn5a19395g=e:9l0ag=83.:4?4;fb9m5=7=9o10c9j<:18'5=4=:328?j2d03:1(<6=:5d`?k7?938:76a;be83>!7?:3>mo6`>80816>=h8387bf=i91;1>>54i5c3>5<#91818o?4n0:2>5=5<#91818o?4n0:2>7=54i5;`>5<#91818o?4n0:2>1=5<#91818o?4n0:2>3=5<#91818o?4n0:2>==5<#91818o?4n0:2>d=6=4+19090g75<#91818o?4n0:2>f=5<#91818o?4n0:2>`=5<#91818o?4n0:2>46<3`>2;7>5$0:1>1d63g;3=7?>;:k7<=<722e>9n4?:%3;6?32m2d:4<4?;:m61g<72-;3>7;:e:l2<4<632e>9l4?:%3;6?32m2d:4<4=;:m61<<72-;3>7;:e:l2<4<432e>954?:%3;6?32m2d:4<4;;:m612<72-;3>7;:e:l2<4<232e>9;4?:%3;6?32m2d:4<49;:m610<72-;3>7;:e:l2<4<032e>994?:%3;6?32m2d:4<47;:m637<72-;3>7;83:l2<4<732e>;<4?:%3;6?30;2d:4<4>;:m635<72-;3>7;83:l2<4<532e>:k4?:%3;6?30;2d:4<4<;:m62`<72-;3>7;83:l2<4<332e>:i4?:%3;6?30;2d:4<4:;:m62f<72-;3>7;83:l2<4<132e>:o4?:%3;6?30;2d:4<48;:m62d<72-;3>7;83:l2<4:44?:%3;6?30;2d:4<46;:m657<722c>9>4?::m620<722h?;k4?:083>5}#90;1h55G46g8L1143fn<6=44}c6;4?6=93:1908731=O<>o0D99<;n34b?6=3th9m?4?:583>5}#90;1h>5G46g8L1143-o=6:5f4783>>o283:17d?73;29?j7?<3:17pl;6183>6<729q/=4?5d19K02c<@==87E:<;%300?31<2.n:7<4i5494?=n=90;66a>8583>>{eN3;2.:?94:659'a3<53`>=6=44i4294?=h91>1<75rb57e>5<4290;w)?61;f3?M20m2B?;>5G429'562==?>0(h852:k72?6=3`?;6=44o0:7>5<=57>55;294~"6180o86F;7d9K025<@=90(<=;:447?l212900e9950;9j15<722c:4>4?::m2<1<722wi8;o50;194?6|,83:6i>4H55f?M20;2B??6*>358621=#m?097d:9:188m06=831d=5:50;9~f13b290>6=4?{%3:5?b33A>19;:4i5494?=n<>0;66g:0;29?l7?;3:17b?74;29?xd3>10;694?:1y'5<7=l:1C8:k4H550?!c12>1b8;4?::k64?6=3`;3?7>5;n3;0?6=3th?::4?:583>5}#90;1h>5G46g8L1143-o=6:5f4783>>o283:17d?73;29?j7?<3:17pl;6783>1<729q/=4?5d29K02c<@==87)k9:69j03<722c><7>5;h3;7?6=3f;387>5;|`734<72=0;6=u+1839`6=O<>o0D99<;%g5>2=n1b8;4?::k64?6=3`;3?7>5;n3;0?6=3th9=;4?:583>5}#90;1h<5G46g8L1143-o=6?5f4783>>o3k3:17d;?:188k4>32900qo<>5;290?6=8r.:5<4k1:J73`=O<>90(h852:k72?6=3`>h6=44i4294?=h91>1<75rb337>5<3290;w)?61;f2?M20m2B?;>5+e781?l212900e9m50;9j15<722e:494?::a645=83>1<7>t$0;2>a7<@==n7E:83:&f2?4>o283:17b?74;29?xd59;0;694?:1y'5<7=l81C8:k4H550?!c12;1b8;4?::k7g?6=3`?;6=44o0:7>5<54;294~"6180o=6F;7d9K025<,l<1>6g;6;29?l2d2900e8>50;9l5=2=831vn???:187>5<7s-;2=7j>;I64a>N3?:1/i;4=;h65>5<>i60=0;66sm21d94?2=83:p(<7>:e38L11b3A>5;|`14`<72=0;6=u+1839`4=O<>o0D99<;%g5>7=n50z&2=45;h6`>5<93n:7E:8e:J736=#m?097d:9:188m1e=831b9=4?::m2<1<722wi=o<50;694?6|,83:6i?4H55f?M20;2.n:7<4i5494?=nb083>1<729q/=4?5d09K02c<@==87)k9:39j03<722c?o7>5;h73>5<908g5>N3?l1C8:=4$d496>o3>3:17d:l:188m06=831d=5:50;9~f4ga290?6=4?{%3:5?b63A>=6=44i5a94?=n=90;66a>8583>>{e9ho1<7:50;2x 4?62m;0D99j;I647>"b>380e9850;9j0f<722c><7>5;n3;0?6=3th:mi4?:583>5}#90;1h<5G46g8L1143-o=6?5f4783>>o3k3:17d;?:188k4>32900qo?nc;290?6=8r.:5<4k1:J73`=O<>90(h852:k72?6=3`>h6=44i4294?=h91>1<75rb341>5<3290;w)?61;f2?M20m2B?;>5+e781?l212900e9m50;9j15<722e:494?::a637=83>1<7>t$0;2>a7<@==n7E:83:&f2?4>o283:17b?74;29?xd5>90;694?:1y'5<7=l81C8:k4H550?!c12;1b8;4?::k7g?6=3`?;6=44o0:7>5<j7>54;294~"6180o=6F;7d9K025<,l<1>6g;6;29?l2d2900e8>50;9l5=2=831vn?;j:187>5<7s-;2=7j>;I64a>N3?:1/i;4=;h65>5<>i60=0;66sm24f94?2=83:p(<7>:e38L11b3A>5;|`11f<72=0;6=u+1839`4=O<>o0D99<;%g5>7=n50z&2=45;h6`>5<93n:7E:8e:J736=#m?097d:9:188m1e=831b9=4?::m2<1<722wi=km50;694?6|,83:6i?4H55f?M20;2.n:7<4i5494?=nfc83>1<729q/=4?5d09K02c<@==87)k9:39j03<722c?o7>5;h73>5<908g5>N3?l1C8:=4$d496>o3>3:17d:l:188m06=831d=5:50;9~f4`>290?6=4?{%3:5?b63A>=6=44i5a94?=n=90;66a>8583>>{e9o21<7:50;2x 4?62m;0D99j;I647>"b>380e9850;9j0f<722c><7>5;n3;0?6=3th:j:4?:583>5}#90;1h<5G46g8L1143-o=6?5f4783>>o3k3:17d;?:188k4>32900qo?i6;290?6=8r.:5<4k1:J73`=O<>90(h852:k72?6=3`>h6=44i4294?=h91>1<75rb0d6>5<3290;w)?61;f2?M20m2B?;>5+e781?l212900e9m50;9j15<722e:494?::a5c2=83>1<7>t$0;2>a7<@==n7E:83:&f2?4>o283:17b?74;29?xd5=90;694?:1y'5<7=l81C8:k4H550?M243-;887;94:&f2?4>o283:17b?74;29?xd5>o283:17b?74;29?xd5>o283:17b?74;29?xd5>o283:17b?74;29?xd5>o283:17b?74;29?xd5>o283:17b?74;29?xd5>o283:17b?74;29?xd5<00;694?:1y'5<7=l81C8:k4H550?M243-;887;94:&f2?4>o283:17b?74;29?xd5<10;694?:1y'5<7=l81C8:k4H550?M243-;887;94:&f2?4>o283:17b?74;29?xd5<>0;694?:1y'5<7=l81C8:k4H550?M243-;887;94:&f2?4>o283:17b?74;29?xd6mh0;694?:1y'5<7=l81C8:k4H550?M243-;887;94:&f2?4>o283:17b?74;29?xd6m00;694?:1y'5<7=l81C8:k4H550?M243-;887;94:&f2?4>o283:17b?74;29?xd6m10;694?:1y'5<7=l81C8:k4H550?M243-;887;94:&f2?4>o283:17b?74;29?xd6m>0;694?:1y'5<7=l81C8:k4H550?M243-;887;94:&f2?4>o283:17b?74;29?xd6m?0;694?:1y'5<7=l81C8:k4H550?M243-;887;94:&f2?4>o283:17b?74;29?xd6m<0;694?:1y'5<7=l81C8:k4H550?M243-;887;94:&f2?4>o283:17b?74;29?xd6m=0;694?:1y'5<7=l81C8:k4H550?M243-;887;94:&f2?4>o283:17b?74;29?xd6m:0;694?:1y'5<7=l81C8:k4H550?M243-;887;94:&f2?4>o283:17b?74;29?xd6m;0;694?:1y'5<7=l81C8:k4H550?M243-;887;94:&f2?4>o283:17b?74;29?xd6l10;694?:1y'5<7=l81C8:k4H550?!c12;1b8;4?::k7g?6=3`?;6=44o0:7>5<54;294~"6180o=6F;7d9K025<,l<1>6g;6;29?l2d2900e8>50;9l5=2=831vn5<7s-;2=7j>;I64a>N3?:1/i;4=;h65>5<>i60=0;66sm1e794?2=83:p(<7>:e38L11b3A>5;|`2`1<72=0;6=u+1839`4=O<>o0D99<;%g5>7=n50z&2=45;h6`>5<93n:7E:8e:J736=#m?097d:9:188m1e=831b9=4?::m2<1<722wi=i?50;694?6|,83:6i?4H55f?M20;2.n:7<4i5494?=nd183>1<729q/=4?5d09K02c<@==87)k9:39j03<722c?o7>5;h73>5<908g5>N3?l1C8:=4$d496>o3>3:17d:l:188m06=831d=5:50;9~f75e290?6=4?{%3:5?b63A>=6=44i5a94?=n=90;66a>8583>>{e::k1<7:50;2x 4?62m;0D99j;I647>"b>380e9850;9j0f<722c><7>5;n3;0?6=3th9?44?:583>5}#90;1h<5G46g8L1143-o=6?5f4783>>o3k3:17d;?:188k4>32900qo<<8;290?6=8r.:5<4k1:J73`=O<>90(h852:k72?6=3`>h6=44i4294?=h91>1<75rb314>5<3290;w)?61;f2?M20m2B?;>5+e781?l212900e9m50;9j15<722e:494?::a660=83>1<7>t$0;2>a7<@==n7E:83:&f2?4>o283:17b?74;29?xd5;<0;694?:1y'5<7=l81C8:k4H550?!c12;1b8;4?::k7g?6=3`?;6=44o0:7>5<54;294~"6180o=6F;7d9K025<,l<1>6g;6;29?l2d2900e8>50;9l5=2=831vn?=<:187>5<7s-;2=7j>;I64a>N3?:1/i;4=;h65>5<>i60=0;66sm2e;94?3=83:p(<7>:e08L11b3A>5<55;294~"6180o>6F;7d9K025<,l<1>6g;6;29?l202900e9m50;9j15<722e:494?::a6a1=83?1<7>t$0;2>a4<@==n7E:83:&f2?4>o3k3:17d;?:188k4>32900qo90(h852:k72?6=3`><6=44i5a94?=n=90;66a>8583>>{e:m?1<7;50;2x 4?62m80D99j;I647>"b>380e9850;9j02<722c?o7>5;h73>5<908g6>N3?l1C8:=4$d496>o3>3:17d:8:188m1e=831b9=4?::m2<1<722wi>i<50;794?6|,83:6i<4H55f?M20;2.n:7<4i5494?=n<>0;66g;c;29?l372900c<6;:188yg4c93:197>50z&2=45;h64>5<1<75rb3f0>5<2290;w)?61;f1?M20m2B?;>5+e781?l212900e9950;9j0f<722c><7>5;n3;0?6=3th9o;4?:283>5}#90;18:j4H55f?M20;2c?57>5;h31e?6=3f;5;|`1g0<72:0;6=u+183902b<@==n7E:83:k7=?6=3`;9m7>5;n34`?6=3th9nn4?:583>5}#90;1=>;4H55f?M20;2c?57>5;h71>5<5<53;294~"6180?;i5G46g8L1143`>26=44i00b>5<908270=O<>o0D99<;h6:>5<n1<75rb3a0>5<4290;w)?61;64`>N3?l1C8:=4i5;94?=n9;k1<75`16f94?=zj;h36=4;:183!7>93;896F;7d9K025>o60h0;66a>7e83>>{e:j81<7=50;2x 4?62==o7E:8e:J736=n<00;66g>2`83>>i6?m0;66sm2c494?2=83:p(<7>:016?M20m2B?;>5f4883>>o2:3:17d?7a;29?j70l3:17pl=c083>6<729q/=4?546f8L11b3A>o313:17d;=:188m4>f2900c<9k:188yg4d83:1?7>50z&2=4<3?m1C8:k4H550?l2>2900e<349K02c<@==87d:6:188m04=831b=5o50;9l52b=831vn?li:180>5<7s-;2=7:8d:J73`=O<>90e9750;9j57g=831d=:j50;9~f7d7290?6=4?{%3:5?74=2B?;h5G4618m1?=831b9?4?::k2t$0;2>11c3A>l4?::m23a<722wi>lk50;694?6|,83:6<=:;I64a>N3?:1b844?::k66?6=3`;3m7>5;n34`?6=3th9io4?:483>5}#90;1h?5G46g8L1143-o=6?5f4783>>o3?3:17d:l:188m06=831d=5:50;9~f7cf290>6=4?{%3:5?b53A>=6=44i5594?=n0<729q/=4?5d39K02c<@==87)k9:39j03<722c?;7>5;h6`>5<93n97E:8e:J736=#m?097d:9:188m11=831b8n4?::k64?6=3f;387>5;|`1a2<72<0;6=u+1839`7=O<>o0D99<;%g5>7=n50;9l5=2=831vn?k9:186>5<7s-;2=7j=;I64a>N3?:1/i;4=;h65>5<>o283:17b?74;29?xd5m<0;684?:1y'5<7=l;1C8:k4H550?!c12;1b8;4?::k73?6=3`>h6=44i4294?=h91>1<75rb3g7>5<2290;w)?61;f1?M20m2B?;>5+e781?l212900e9950;9j0f<722c><7>5;n3;0?6=3th9i>4?:483>5}#90;1h?5G46g8L1143-o=6?5f4783>>o3?3:17d:l:188m06=831d=5:50;9~f711290?6=4?{%3:5?b43A>=6=44i4294?=n9191<75`19694?=zj;=<6=4;:183!7>93n87E:8e:J736=#m?0<7d:9:188m06=831b=5=50;9l5=2=831vn?9>:187>5<7s-;2=7j>;I64a>N3?:1/i;4=;h65>5<>i60=0;66sm26294?2=83:p(<7>:e38L11b3A>5;|`047<72:0;6=u+183902b<@==n7E:83:k7=?6=3`;9m7>5;n34`?6=3th85}#90;18:j4H55f?M20;2c?57>5;h31e?6=3f;5;|`1b3<72=0;6=u+1839563<@==n7E:83:k7=?6=3`?96=44i0:b>5<90873a=O<>o0D99<;h6:>5<5<54;294~"6180:?85G46g8L1143`>26=44i4094?=n91k1<75`16f94?=zj::26=4<:183!7>93>n1<75rb3d7>5<3290;w)?61;301>N3?l1C8:=4i5;94?=n=;0;66g>8`83>>i6?m0;66sm31:94?5=83:p(<7>:55g?M20m2B?;>5f4883>>o6:h0;66a>7e83>>{e:o91<7:50;2x 4?6289>7E:8e:J736=n<00;66g:2;29?l7?i3:17b?8d;29?xd48>0;6>4?:1y'5<7=<>n0D99j;I647>o313:17d?=a;29?j70l3:17pl=f383>1<729q/=4?51278L11b3A>50z&2=4<6;<1C8:k4H550?l2>2900e8<50;9j5=g=831d=:j50;9~f66229086=4?{%3:5?20l2B?;h5G4618m1?=831b=?o50;9l52b=831vn?h?:187>5<7s-;2=7?<5:J73`=O<>90e9750;9j17<722c:4l4?::m23a<722wi?=:50;194?6|,83:699k;I64a>N3?:1b844?::k26d<722e:;i4?::a6``=83>1<7>t$0;2>4523A>>7>5;h3;e?6=3f;5;|`046<72:0;6=u+183902b<@==n7E:83:k7=?6=3`;9m7>5;n34`?6=3th9ih4?:583>5}#90;1=>;4H55f?M20;2c?57>5;h71>5<5<54;294~"6180:?85G46g8L1143`>26=44i4094?=n91k1<75`16f94?=zj:;<6=4;:183!7>93n:7E:8e:J736=#m?097d:9:188m1e=831b9=4?::m2<1<722wi?1<729q/=4?5d09K02c<@==87)k9:39j03<722c?o7>5;h73>5<908g5>N3?l1C8:=4$d496>o3>3:17d:l:188m06=831d=5:50;9~f67d290?6=4?{%3:5?b63A>=6=44i5a94?=n=90;66a>8583>>{e;8h1<7:50;2x 4?62m;0D99j;I647>"b>380e9850;9j0f<722c><7>5;n3;0?6=3th8=l4?:583>5}#90;1h<5G46g8L1143-o=6?5f4783>>o3k3:17d;?:188k4>32900qo=>9;290?6=8r.:5<4k1:J73`=O<>90(h852:k72?6=3`>h6=44i4294?=h91>1<75rb23;>5<3290;w)?61;f2?M20m2B?;>5+e781?l212900e9m50;9j15<722e:494?::a740=83>1<7>t$0;2>a7<@==n7E:83:&f2?4>o283:17b?74;29?xd4:h0;684?:1y'5<7=l;1C8:k4H550?!c12;1b8;4?::k73?6=3`>h6=44i4294?=h91>1<75rb3;6>5<3290;w)?61;301>N3?l1C8:=4i5;94?=n=;0;66g>8`83>>i6?m0;66sm28694?2=83:p(<7>:016?M20m2B?;>5f4883>>o2:3:17d?7a;29?j70l3:17pl=9283>1<729q/=4?51278L11b3A>349K02c<@==87d:6:188m04=831b=5o50;9l52b=831vn?7>:187>5<7s-;2=7?<5:J73`=O<>90e9750;9j17<722c:4l4?::m23a<722wi>5<50;694?6|,83:6<=:;I64a>N3?:1b844?::k66?6=3`;3m7>5;n34`?6=3th94<4?:583>5}#90;1=>;4H55f?M20;2c?57>5;h71>5<5<54;294~"6180:?85G46g8L1143`>26=44i4094?=n91k1<75`16f94?=zj;=m6=4;:183!7>93;896F;7d9K025>o60h0;66a>7e83>>{e:>o1<7:50;2x 4?6289>7E:8e:J736=n<00;66g:2;29?l7?i3:17b?8d;29?xd4jm0;684?:1y'5<7=l;1C8:k4H550?!c12;1b8;4?::k73?6=3`>h6=44i4294?=h91>1<75rb2`a>5<2290;w)?61;f1?M20m2B?;>5+e781?l212900e9950;9j0f<722c><7>5;n3;0?6=3th8nn4?:483>5}#90;1h95G46g8L1143-o=6:5f4783>>o3?3:17d;?:188m4>42900c<6;:188yg5em3:197>50z&2=45;h64>5<>i60=0;66sm3cd94?3=83:p(<7>:e08L11b3A>5<7>55;294~"6180o>6F;7d9K025<,l<1>6g;6;29?l202900e9m50;9j15<722e:494?::a7f6=83?1<7>t$0;2>a4<@==n7E:83:&f2?4>o3k3:17d;?:188k4>32900qo=l1;291?6=8r.:5<4k2:J73`=O<>90(h852:k72?6=3`><6=44i5a94?=n=90;66a>8583>>{e;j91<7;50;2x 4?62m80D99j;I647>"b>380e9850;9j02<722c?o7>5;h73>5<908g6>N3?l1C8:=4$d496>o3>3:17d:8:188m1e=831b9=4?::m2<1<722wi?i?50;794?6|,83:6i<4H55f?M20;2.n:7<4i5494?=n<>0;66g;c;29?l372900c<6;:188yg5dn3:197>50z&2=45;h64>5<1<75rb2f3>5<2290;w)?61;f1?M20m2B?;>5+e781?l212900e9950;9j0f<722c><7>5;n3;0?6=3th8h?4?:483>5}#90;1h?5G46g8L1143-o=6?5f4783>>o3?3:17d:l:188m06=831d=5:50;9~f6b4290>6=4?{%3:5?b53A>=6=44i5594?=n0<729q/=4?5d39K02c<@==87)k9:39j03<722c?;7>5;h6`>5<93n97E:8e:J736=#m?097d:9:188m11=831b8n4?::k64?6=3f;387>5;|`0`0<72<0;6=u+1839`7=O<>o0D99<;%g5>7=n50;9l5=2=831vn>j8:186>5<7s-;2=7j=;I64a>N3?:1/i;4=;h65>5<>o283:17b?74;29?xd4l10;684?:1y'5<7=l;1C8:k4H550?!c12;1b8;4?::k73?6=3`>h6=44i4294?=h91>1<75rb2ce>5<2290;w)?61;f1?M20m2B?;>5+e781?l212900e9950;9j0f<722c><7>5;n3;0?6=3th8mh4?:483>5}#90;1h?5G46g8L1143-o=6?5f4783>>o3?3:17d:l:188m06=831d=5:50;9~f6d7290>6=4?{%3:5?b53A>=6=44i5594?=n0<729q/=4?5d39K02c<@==87)k9:39j03<722c?;7>5;h6`>5<93n97E:8e:J736=#m?097d:9:188m11=831b8n4?::k64?6=3f;387>5;|`0ea<72<0;6=u+1839`7=O<>o0D99<;%g5>7=n50;9l5=2=831vn>o6:186>5<7s-;2=7j=;I64a>N3?:1/i;4=;h65>5<>o283:17b?74;29?xd4i10;684?:1y'5<7=l=1C8:k4H550?!c12>1b8;4?::k73?6=3`?;6=44i0:0>5<908g6>N3?l1C8:=4$d496>o3>3:17d:8:188m1e=831b9=4?::m2<1<722wi?l950;794?6|,83:6i:4H55f?M20;2.n:794i5494?=n<>0;66g:0;29?l7?;3:17b?74;29?xd41k0;6>4?:1y'5<7=<>n0D99j;I647>o313:17d?=a;29?j70l3:17pl<9`83>6<729q/=4?546f8L11b3A>o313:17d;=:188m4>f2900c<9k:188yg5>13:1?7>50z&2=4<3?m1C8:k4H550?l2>2900e<349K02c<@==87d:6:188m04=831b=5o50;9l52b=831vn>77:180>5<7s-;2=7:8d:J73`=O<>90e9750;9j57g=831d=:j50;9~f6>d290?6=4?{%3:5?74=2B?;h5G4618m1?=831b9?4?::k2t$0;2>11c3A>l4?::m23a<722wi?5o50;694?6|,83:6<=:;I64a>N3?:1b844?::k66?6=3`;3m7>5;n34`?6=3th85;4?:283>5}#90;18:j4H55f?M20;2c?57>5;h31e?6=3f;5;|`0<=<72=0;6=u+1839563<@==n7E:83:k7=?6=3`?96=44i0:b>5<90873a=O<>o0D99<;h6:>5<5<54;294~"6180:?85G46g8L1143`>26=44i4094?=n91k1<75`16f94?=zj:3?6=4<:183!7>93>n1<75rb2:7>5<3290;w)?61;301>N3?l1C8:=4i5;94?=n=;0;66g>8`83>>i6?m0;66sm38194?5=83:p(<7>:55g?M20m2B?;>5f4883>>o6:h0;66a>7e83>>{e;181<7:50;2x 4?6289>7E:8e:J736=n<00;66g:2;29?l7?i3:17b?8d;29?xd41;0;6>4?:1y'5<7=<>n0D99j;I647>o313:17d?=a;29?j70l3:17pl<8183>1<729q/=4?51278L11b3A>90(h852:k72?6=3`><6=44i5a94?=n=90;66a>8583>>{e;lh1<7;50;2x 4?62m80D99j;I647>"b>380e9850;9j02<722c?o7>5;h73>5<908g6>N3?l1C8:=4$d496>o3>3:17d:8:188m1e=831b9=4?::m2<1<722wi?h750;794?6|,83:6i<4H55f?M20;2.n:7<4i5494?=n<>0;66g;c;29?l372900c<6;:188yg5b03:197>50z&2=45;h64>5<>i60=0;66sm3d594?3=83:p(<7>:e08L11b3A>5<55;294~"6180o>6F;7d9K025<,l<1>6g;6;29?l202900e9m50;9j15<722e:494?::a7`3=83?1<7>t$0;2>a4<@==n7E:83:&f2?4>o3k3:17d;?:188k4>32900qo=j4;291?6=8r.:5<4k2:J73`=O<>90(h852:k72?6=3`><6=44i5a94?=n=90;66a>8583>>{e;l91<7;50;2x 4?62m80D99j;I647>"b>380e9850;9j02<722c?o7>5;h73>5<908270=O<>o0D99<;h6:>5<n1<75rb216>5<3290;w)?61;301>N3?l1C8:=4i5;94?=n=;0;66g>8`83>>i6?m0;66sm32494?2=83:p(<7>:016?M20m2B?;>5f4883>>o2:3:17d?7a;29?j70l3:17pl<3683>1<729q/=4?51278L11b3A>349K02c<@==87d:6:188m04=831b=5o50;9l52b=831vn>:8:187>5<7s-;2=7?<5:J73`=O<>90e9750;9j17<722c:4l4?::m23a<722wi?9650;694?6|,83:6<=:;I64a>N3?:1b844?::k66?6=3`;3m7>5;n34`?6=3th8844?:583>5}#90;1=>;4H55f?M20;2c?57>5;h71>5<5<54;294~"6180:?85G46g8L1143`>26=44i4094?=n91k1<75`16f94?=zj:>i6=4;:183!7>93;896F;7d9K025>o60h0;66a>7e83>>{e;7E:8e:J736=n<00;66g:2;29?l7?i3:17b?8d;29?xd4=l0;694?:1y'5<7=9:?0D99j;I647>o313:17d;=:188m4>f2900c<9k:188yg52n3:187>50z&2=4<6;<1C8:k4H550?l2>2900e8<50;9j5=g=831d=:j50;9~f607290?6=4?{%3:5?74=2B?;h5G4618m1?=831b9?4?::k21<7>t$0;2>4523A>>7>5;h3;e?6=3f;5;|`035<72=0;6=u+1839`4=O<>o0D99<;%g5>7=n50z&2=45;h6`>5<93n97E:8e:J736=#m?097d:9:188m11=831b8n4?::k64?6=3f;387>5;|`76c<72<0;6=u+1839`0=O<>o0D99<;%g5>7=n32900qo:=e;291?6=8r.:5<4k5:J73`=O<>90(h852:k72?6=3`><6=44i4294?=n91?1<75`19694?=zj=8o6=4::183!7>93n>7E:8e:J736=#m?097d:9:188m11=831b9=4?::k2<0<722e:494?::a07e=83?1<7>t$0;2>a3<@==n7E:83:&f2?4>o283:17d?75;29?j7?<3:17pl;2c83>0<729q/=4?5d49K02c<@==87)k9:39j03<722c?;7>5;h73>5<6=44o0:7>5<9m7>55;294~"6180o96F;7d9K025<,l<1>6g;6;29?l202900e8>50;9j5=3=831d=5:50;9~f14?290>6=4?{%3:5?b23A>=6=44i5594?=n=90;66g>8483>>i60=0;66sm43594?3=83:p(<7>:e78L11b3A>5;n3;0?6=3th?>;4?:483>5}#90;1h85G46g8L1143-o=6?5f4783>>o3?3:17d;?:188m4>22900c<6;:188yg25=3:197>50z&2=45;h64>5<1<75rb507>5<2290;w)?61;f6?M20m2B?;>5+e781?l212900e9950;9j15<722c:484?::m2<1<722wi8?=50;794?6|,83:6i;4H55f?M20;2.n:7<4i5494?=n<>0;66g:0;29?l7?=3:17b?74;29?xd3:;0;684?:1y'5<7=l<1C8:k4H550?!c12;1b8;4?::k73?6=3`?;6=44i0:6>5<908g1>N3?l1C8:=4$d496>o3>3:17d:8:188m06=831b=5;50;9l5=2=831vn95<7s-;2=7j:;I64a>N3?:1/i;4=;h65>5<>o60<0;66a>8583>>{e<8l1<7;50;2x 4?62m?0D99j;I647>"b>380e9850;9j02<722c><7>5;h3;1?6=3f;387>5;|`75a<72<0;6=u+1839`0=O<>o0D99<;%g5>7=n32900qo:>c;291?6=8r.:5<4k5:J73`=O<>90(h852:k72?6=3`><6=44i4294?=n91?1<75`19694?=zj=;i6=4::183!7>93n>7E:8e:J736=#m?097d:9:188m11=831b9=4?::k2<0<722e:494?::a04g=83?1<7>t$0;2>a3<@==n7E:83:&f2?4>o283:17d?75;29?j7?<3:17pl;1883>0<729q/=4?5d49K02c<@==87)k9:39j03<722c?;7>5;h73>5<6=44o0:7>5<:47>55;294~"6180o96F;7d9K025<,l<1>6g;6;29?l202900e8>50;9j5=3=831d=5:50;9~f170290>6=4?{%3:5?b23A>=6=44i5594?=n=90;66g>8483>>i60=0;66sm40494?3=83:p(<7>:e78L11b3A>5;n3;0?6=3th?=84?:483>5}#90;1h85G46g8L1143-o=6?5f4783>>o3?3:17d;?:188m4>22900c<6;:188yg26<3:197>50z&2=45;h64>5<1<75rb516>5<2290;w)?61;f6?M20m2B?;>5+e781?l212900e9950;9j15<722c:484?::m2<1<722wi8>:50;794?6|,83:6i;4H55f?M20;2.n:7<4i5494?=n<>0;66g:0;29?l7?=3:17b?74;29?xd3;:0;684?:1y'5<7=l<1C8:k4H550?!c12;1b8;4?::k73?6=3`?;6=44i0:6>5<908g1>N3?l1C8:=4$d496>o3>3:17d:8:188m06=831b=5;50;9l5=2=831vn9=>:186>5<7s-;2=7j:;I64a>N3?:1/i;4=;h65>5<>o60<0;66a>8583>>{e<::1<7;50;2x 4?62m?0D99j;I647>"b>380e9850;9j02<722c><7>5;h3;1?6=3f;387>5;|`76<<72<0;6=u+1839`0=O<>o0D99<;%g5>7=n32900qo:>e;291?6=8r.:5<4k5:J73`=O<>90(h852:k72?6=3`><6=44i4294?=n91?1<75`19694?=zj=;86=4::183!7>93n>7E:8e:J736=#m?097d:9:188m11=831b9=4?::k2<0<722e:494?::a044=83?1<7>t$0;2>a3<@==n7E:83:&f2?4>o283:17d?75;29?j7?<3:17pl;6e83>6<729q/=4?513d8L11b3A>5<7s-;2=7?=f:J73`=O<>90(h851`9j`d<722con7>5;n34`?6=3th9=54?:283>5}#90;1=?h4H55f?M20;2.n:7?j;hfb>5<93;9j6F;7d9K025<,l<1=h5fd`83>>ocj3:17b?8d;29?xd6i;0;6>4?:1y'5<7=9;l0D99j;I647>"b>3;n7djn:188mad=831d=:j50;9~f4g629086=4?{%3:5?75n2B?;h5G4618 `0=9l1bhl4?::kgf?6=3f;5;|`2e5<72:0;6=u+183957`<@==n7E:83:&f2?7b3`nj6=44ie`94?=h9>n1<75rb0;e>5<4290;w)?61;31b>N3?l1C8:=4$d495`=nlh0;66gkb;29?j70l3:17pl>9d83>6<729q/=4?513d8L11b3A>5<7s-;2=7?=f:J73`=O<>90(h851d9j`d<722con7>5;n34`?6=3th:5n4?:283>5}#90;1=?h4H55f?M20;2.n:7?j;hfb>5<93;9j6F;7d9K025<,l<1=h5fd`83>>ocj3:17b?8d;29?xd61h0;6>4?:1y'5<7=9;l0D99j;I647>"b>3;n7djn:188mad=831d=:j50;9~f4?>29086=4?{%3:5?75n2B?;h5G4618 `0=9l1bhl4?::kgf?6=3f;5;|`2==<72:0;6=u+183957`<@==n7E:83:&f2?7b3`nj6=44ie`94?=h9>n1<75rb0;4>5<4290;w)?61;31b>N3?l1C8:=4$d495`=nlh0;66gkb;29?j70l3:17pl>9783>6<729q/=4?513d8L11b3A>5<7s-;2=7?=f:J73`=O<>90(h851d9j`d<722con7>5;n34`?6=3th:594?:283>5}#90;1=?h4H55f?M20;2.n:7?j;hfb>5<93;9j6F;7d9K025<,l<1=h5fd`83>>ocj3:17b?8d;29?xd61;0;6>4?:1y'5<7=9;l0D99j;I647>"b>3;n7djn:188mad=831d=:j50;9~f712290?6=4?{%3:5?7482B?;h5G4618 `0=km1bhl4?::kgf?6=3`nh6=44o05g>5<54;294~"6180:?=5G46g8L1143-o=6?;4iec94?=nlk0;66gkc;29?j70l3:17pl>b983>1<729q/=4?51228L11b3A>t$0;2>4563A>5;hfa>5<>i6?m0;66sm20a94?3=83:p(<7>:012?M20m2B?;>5+e7814>oci3:17djm:188mae=831bhi4?::m23a<722wi=oo50;794?6|,83:6<=>;I64a>N3?:1/i;4=0:kge?6=3`ni6=44iea94?=nlm0;66a>7e83>>{e:>31<7;50;2x 4?6289:7E:8e:J736=#m?09>6gka;29?lbe2900eim50;9j`a<722e:;i4?::a63b=83>1<7>t$0;2>4573A>5;hfa>5<93;9j6F;7d9K025<,l<1=h5fd`83>>ocj3:17b?8d;29?xd6jj0;6>4?:1y'5<7=9;l0D99j;I647>"b>3;n7djn:188mad=831d=:j50;9~f747290?6=4?{%3:5?7482B?;h5G4618 `0=:<1bhl4?::kgf?6=3`nh6=44o05g>5<54;294~"6180:?=5G46g8L1143-o=6?;4iec94?=nlk0;66gkc;29?j70l3:17pl=2383>0<729q/=4?51238L11b3A>5;n34`?6=3th:o=4?:483>5}#90;1=>?4H55f?M20;2.n:75<>ocl3:17b?8d;29?xd3=j0;694?:1y'5<7=9::0D99j;I647>"b>3?:7djn:188mad=831bhn4?::m23a<722wi>;m50;794?6|,83:6<=>;I64a>N3?:1/i;4>3:kge?6=3`ni6=44iea94?=nlm0;66a>7e83>>{e:0l1<7=50;2x 4?6288m7E:8e:J736=#m?09?6gka;29?lbe2900c<9k:188yg4?k3:1?7>50z&2=4<6:o1C8:k4H550?!c12;90eio50;9j`g<722e:;i4?::a73d=83?1<7>t$0;2>4563A>5;hfa>5<>i6?m0;66sm34794?3=83:p(<7>:012?M20m2B?;>5+e7810>oci3:17djm:188mae=831bhi4?::m23a<722wi?9<50;794?6|,83:6<=>;I64a>N3?:1/i;4=4:kge?6=3`ni6=44iea94?=nlm0;66a>7e83>>{e;?k1<7;50;2x 4?6289:7E:8e:J736=#m?0986gka;29?lbe2900eim50;9j`a<722e:;i4?::a702=83?1<7>t$0;2>4563A>5;hfa>5<>i6?m0;66sm35394?3=83:p(<7>:012?M20m2B?;>5+e7810>oci3:17djm:188mae=831bhi4?::m23a<722wi>4k50;794?6|,83:6<=>;I64a>N3?:1/i;4=4:kge?6=3`ni6=44iea94?=nlm0;66a>7e83>>{e:1h1<7;50;2x 4?6289:7E:8e:J736=#m?0986gka;29?lbe2900eim50;9j`a<722e:;i4?::a73?=83?1<7>t$0;2>4563A>5;hfa>5<>i6?m0;66sm34194?3=83:p(<7>:012?M20m2B?;>5+e7810>oci3:17djm:188mae=831bhi4?::m23a<722wi?9>50;794?6|,83:6<=>;I64a>N3?:1/i;4=4:kge?6=3`ni6=44iea94?=nlm0;66a>7e83>>{e:0n1<7;50;2x 4?6289:7E:8e:J736=#m?0986gka;29?lbe2900eim50;9j`a<722e:;i4?::a6=g=83?1<7>t$0;2>4563A>5;hfa>5<>i6?m0;66sm37:94?3=83:p(<7>:012?M20m2B?;>5+e7810>oci3:17djm:188mae=831bhi4?::m23a<722wi?8<50;794?6|,83:6<=>;I64a>N3?:1/i;4=4:kge?6=3`ni6=44iea94?=nlm0;66a>7e83>>{e;:l1<7;50;2x 4?6289:7E:8e:J736=#m?0986gka;29?lbe2900eim50;9j`a<722e:;i4?::a6t$0;2>4563A>5;hfa>5<>i6?m0;66sm29;94?3=83:p(<7>:012?M20m2B?;>5+e7810>oci3:17djm:188mae=831bhi4?::m23a<722wi?:=50;694?6|,83:6<=?;I64a>N3?:1/i;4le:kge?6=3`ni6=44iea94?=h9>n1<75rb24f>5<3290;w)?61;304>N3?l1C8:=4$d49g`=nlh0;66gkb;29?lbd2900c<9k:188yg4f<3:187>50z&2=4<6;91C8:k4H550?!c12jo0eio50;9j`g<722coo7>5;n34`?6=3th8::4?:583>5}#90;1=>>4H55f?M20;2.n:784iec94?=nlk0;66gkc;29?j70l3:17pl<5083>1<729q/=4?51228L11b3A>5;|`07`<72=0;6=u+1839566<@==n7E:83:&f2?0>ock3:17b?8d;29?xd51k0;684?:1y'5<7=9:;0D99j;I647>"b>38?7djn:188mad=831bhn4?::kg`?6=3f;5;|`1<=<72<0;6=u+1839567<@==n7E:83:&f2?433`nj6=44ie`94?=nlj0;66gkd;29?j70l3:17pl=2483>6<729q/=4?513d8L11b3A>5<7s-;2=7?=f:J73`=O<>90(h85229j`d<722con7>5;n34`?6=3th9>54?:583>5}#90;1=>>4H55f?M20;2.n:7?i;hfb>5<>i6?m0;66sm1b494?2=83:p(<7>:013?M20m2B?;>5+e782b>oci3:17djm:188mae=831d=:j50;9~f61329086=4?{%3:5?75n2B?;h5G4618 `0=9;1bhl4?::kgf?6=3f;5;|`1fa<72;0;6=u+183957c<@==n7E:83:&f2?753`nj6=44o05g>5<52;294~"6180:>h5G46g8L1143-o=6<<4iec94?=h9>n1<75rb3`:>5<5290;w)?61;31a>N3?l1C8:=4$d4957=nlh0;66a>7e83>>{e:k=1<7<50;2x 4?6288n7E:8e:J736=#m?0:>6gka;29?j70l3:17pl=b483>7<729q/=4?513g8L11b3A>7>50z&2=4<6:l1C8:k4H550?!c12880eio50;9l52b=831vn?l>:181>5<7s-;2=7?=e:J73`=O<>90(h85139j`d<722e:;i4?::a6d`=8381<7>t$0;2>44b3A>5;n34`?6=3th85<4?:383>5}#90;1=?k4H55f?M20;2.n:7?=;hfb>5<90826`=O<>o0D99<;%g5>4493;9i6F;7d9K025<,l<1=?5fd`83>>i6?m0;66sm39`94?4=83:p(<7>:00f?M20m2B?;>5+e7826>oci3:17b?8d;29?xd4000;6?4?:1y'5<7=9;o0D99j;I647>"b>3;97djn:188k41c2900qo=77;296?6=8r.:5<4>2d9K02c<@==87)k9:008mag=831d=:j50;9~f6>229096=4?{%3:5?75m2B?;h5G4618 `0=9;1bhl4?::m23a<722wi?5=50;094?6|,83:6<N3?:1/i;4>2:kge?6=3f;5;|`0<4<72;0;6=u+183957c<@==n7E:83:&f2?753`nj6=44o05g>5<52;294~"6180:>h5G46g8L1143-o=6<<4iec94?=h9>n1<75rb2;`>5<5290;w)?61;31a>N3?l1C8:=4$d4957=nlh0;66a>7e83>>{e:ok1<7=50;2x 4?6288m7E:8e:J736=#m?09?6gka;29?lbe2900c<9k:188yg4aj3:1?7>50z&2=4<6:o1C8:k4H550?!c12;90eio50;9j`g<722e:;i4?::a6ce=8391<7>t$0;2>44a3A>5;hfa>5<90826c=O<>o0D99<;%g5>75>i6?m0;66sm2gg94?5=83:p(<7>:00e?M20m2B?;>5+e7817>oci3:17djm:188k41c2900qo2g9K02c<@==87)k9:318mag=831bho4?::m23a<722wi?=>50;194?6|,83:6<N3?:1/i;4=3:kge?6=3`ni6=44o05g>5<53;294~"6180:>k5G46g8L1143-o=6?=4iec94?=nlk0;66a>7e83>>{e:o=1<7=50;2x 4?6288m7E:8e:J736=#m?09?6gka;29?lbe2900c<9k:188yg55m3:197>50z&2=4<6;81C8:k4H550?!c12m<0eio50;9j`g<722coo7>5;hfg>5<908274=O<>o0D99<;%g5>77>ock3:17djk:188k41c2900qo=85;297?6=8r.:5<4>2g9K02c<@==87)k9:008mag=831bho4?::m23a<722wi>k750;094?6|,83:6<<6;I64a>N3?:1bh44?::m23a<722wi?;h50;094?6|,83:6<<6;I64a>N3?:1bh44?::m23a<722wi??m50;794?6|,83:6<=<;I64a>N3?:1/i;4=1:kge?6=3`ni6=44iea94?=nlm0;66a>2c83>>{e:;>1<7850;2x 4?628997E:8e:J736=#m?09:6gka;29?lbe2900eim50;9j`a<722e:>o4?::m23a<722wi=n<50;494?6|,83:6<==;I64a>N3?:1/i;4=6:kge?6=3`ni6=44iea94?=nlm0;66a>2c83>>i6?m0;66sm44c94?>0290;wE:83:&2=4<60?1Q884n{8813?`=9?0:87?l:02952<6=3;o6p*>2987?!bb2<1/hk4:;%g3>0=#m80>7)k=:49'a6<23-o?685+cc8`b>"b?3?0(h655:&f=?3<,lk196*jb;78 `e==2.nh7;4$dg91>"bn3?0(k>55:&e5?3<,o8196*i3;78 c2==2.m97;4$g491>"a?3?0(k655:&e=?3<,ok196*ib;78 ce==2.mh7;4$gg91>"an3?0(<>?:49'557==2.:"68?0>7)??7;78 46?2<1/==755:&24d<23-;;n7;4$02`>0=#99n196*>0d86?!77n3?0("69?0>7)?>7;78 47?2<1/=<755:&25d<23-;:n7;4$03`>0=#98n196*>1d86?!76n3?0(<?4:;%317?3<,88?685+13791>"6:?0>7)?=7;18 4>e2=80(h;55:&2<47?77:&73<<60>1e5h4?;oa3>5=i9121=?5a19;961=i<>k1=?5a46`961=#kj0hj6*>8d87?l2f2900e9l50;9j020=831bol4?::k;6=8083?>o4=3:1(<6=:248j4>62810e>:50;&2<7<4>2d:4<4=;:k07?6=,8296>84n0:2>6=83802>h6080?76g<1;29 4>52:<0b<6>:498m66=83.:4?4<6:l2<4<132c9j7>5$0:1>60808;?>o5l3:1(<6=:248j4>62010e9?50;&2<7<382d:4<4?;:k0b?6=,82969>4n0:2>4=83874>h6080976g52=:0b<6>:298m6e=83.:4?4;0:l2<4<332c8n7>5$0:1>168085?>o413:1(<6=:528j4>62>10e>650;&2<7<382d:4<47;:k6e?6=,8296874n0:2>5=8386=>h6080:76g:7;29 4>52<30b<6>:398m00=83.:4?4:9:l2<4<432c>97>5$0:1>0?56`>8086?>o1;3:1(<6=:4;8j4>62?10e;<50;&2<7<212d:4<48;:k55?6=,8296874n0:2>==8386=>h6080276g:f;29 4>52<30b<6>:`98m0c=83.:4?4:9:l2<4h7>5$0:1>0?56`>808g?>o2j3:1(<6=:4;8j4>62l10e8=50;&2<7<212d:4<4i;:k;3?6=,8296584n0:2>5=838;2>h6080:76am8;29 4>52k=0b<6>:198kg0=83.:4?4m7:l2<4<632ei87>5$0:1>g18080?>ie:3:1(<6=:c58j4>62=10co?50;&2<73=838a3>h6080<76ane;29 4>52k=0b<6>:998kdb=83.:4?4m7:l2<4<>32ejo7>5$0:1>g1808a?>if13:1(<6=:c58j4>62j10cl650;&2<7`=838a3>h6080m76an5;29 4>52k=0b<6>:028?jg3290/=5<5b69m5=7=9810cl=50;&2<72:9le7<72-;3>7l8;o3;5?7432ej=7>5$0:1>g15<#9181n:5a193950=838a3>h6080::65`bd83>!7?:3h<7c?71;34?>iel3:1(<6=:c58j4>628207bll:18'5=4=j>1e=5?51898kgd=83.:4?4m7:l2<4<6i21dnl4?:%3;6?d03g;3=7?m;:ma=?6=,8296o94n0:2>4e<3fh>6=4+1909f2=i91;1=i54o`c94?"60;0i;6`>8082a>=h1o0;6)?72;`4?k7?93;m76al8;29 4>52j=0b<6>:198kf0=83.:4?4l7:l2<4<632eh97>5$0:1>f18080?>od13:17d?7f;29?l20?3:17d9k:18'5=4=?j1e=5?50:9j3g<72-;3>79l;o3;5?7<3`=26=4+19093f=i91;1>65f7983>!7?:3=h7c?71;18?l10290/=5<57b9m5=7=<21b;;4?:%3;6?1d3g;3=7;4;h56>5<#9181;n5a19392>=n?=0;6)?72;5`?k7?93=07d9<:18'5=4=?j1e=5?58:9j37<72-;3>79l;o3;5??<3`=:6=4+19093f=i91;1m65f7183>!7?:3=h7c?71;`8?l0b290/=5<57b9m5=7=k21b:i4?:%3;6?1d3g;3=7j4;h4`>5<#9181;n5a1939a>=n>k0;6)?72;5`?k7?93l07d8n:18'5=4=?j1e=5?51198m3?=83.:4?48c:l2<4<6921b:54?:%3;6?1d3g;3=7?=;:k53?6=,8296:m4n0:2>45<3`<=6=4+19093f=i91;1=954i7794?"60;080821>=n0=0;6)?72;5`?k7?93;=76g73;29 4>52>i0b<6>:058?l>5290/=5<57b9m5=7=9110e5?50;&2<7<0k2d:4<4>9:9j<5<72-;3>79l;o3;5?7f32c5$0:1>2e5<#9181;n5a19395f=k1<7*>8384g>h6080:h65f6g83>!7?:3=h7c?71;3f?>o1<3:1(<6=:6a8j4>628l07d6l:18'5=4=0k1e=5?50:9j76m;o3;5?7<3`226=4+190965`9583>!7?:3387c?71;28?j?5290/=5<5929m5=7=921d5<4?:%3;6??43g;3=7<4;n;3>5<#91815>5a19397>=h0o0;6)?72;;0?k7?93>07b6j:18'5=4=1:1e=5?55:9l=a<72-;3>77<;o3;5?0<3f3h6=4+1909=6=i91;1;65`9c83>!7?:3387c?71;:8?j?f290/=5<5929m5=7=121d544?:%3;6??43g;3=7o4;n;;>5<#91815>5a1939f>=h1>0;6)?72;;0?k7?93i07b79:18'5=4=1:1e=5?5d:9l=0<72-;3>77<;o3;5?c<3f2o6=4+1909=6=i91;1j65`c283>!7?:3i97c?71;28?je6290/=5<5c39m5=7=921v8;i:185[32n279;84kb:?136X2981U9;84^431?[2><2T?5>5Q4808Z1?63W>2<6P;8g9]0=c80R89>;_744>X2>o1U9;k4^44g?[31k2T>:o5Q57c8Z00>3W?>o6P:5c9]10g;3?o0o;63;68864>;3=l0><63;69864>;3>>0><63;67864>;3?80><63;71864>;5jj0>>63=b`866>;5j10>>63=b7866>;5j=0>>63=b3866>;5j90>>63=ad866>;5mm0:4l52287917=::0>19?52281917=::0819?52283917=::1819?52293917=::1:19?5226d917=::>o19?52382917=:;1o19?5239a917=:;1k19?5239:917=:;1<19?52396917=:;1819?52392917=:;:>19?52327917=:;:<19?52325917=:;:219?52355917=:;=219?5235;917=:;=k19?5235`917=:;11034>>m79k;<66e?1e34>>m796;<66e?1?34>>m798;<66e?1134>>m79:;<66e?1334>>m79<;<66e?1534>>m79>;<66e?1734>>m78j;<66e?0c34>>m78l;<66e?0e34>>m78n;<66e?0>34>>m787;<66e?0034>>m789;<66e?0234>>m76;;<66e?>434>>m76=;<66e?>634>>m76?;<66e?1a34>>m79j;<66e?1f34>>m78i;<66e?0334>>m76l;<66e?>f34>>m766;|q02f<72;qU8594=24`>4>33ty>:<4?:2y]137<5=<26<6<;<66a?7?;2wx>:950;0xZ061348<;7?74:p122=839pR89;;<140?bf349<97jn;|q616<72?2pR8;<;<0b6?2134>=<7:9;<66b?2134>>i7:9;<65=;7:9;<652?21348::7:9;<021?21348:87:9;<027?21348:>7:9;<025?21348:<7:9;<03b?21348;i7:9;<056?21348==7:9;<054?21348>j7:9;<06a?21348>h7:9;<06g?21348>n7:9;<06e?21348><7:9;<07b?21348?i7:9;<07`?21348?o7:9;<07f?21348?m7:9;<07=?21348?47:9;<073?2134;o47:9;<3g3?2134;o:7:9;<3g1?2134;o87:9;<3g7?2134;o>7:9;<3g5?2134;o<7:9;<0g=?21348o47:9;<0g3?21348o:7:9;<0g1?21348o87:9;<0g6?21348o=7:9;<0g7?21348nn7:9;<0fe?21348n57:9;<0f9i7:9;<61`?2134>9o7:9;<61f?2134>9m7:9;<619;7:9;<612?2134>997:9;<610?2134>9?7:9;<616?2134>9=7:9;<614?2134>:j7:9;<62`?2134>:o7:9;<62f?2134>:m7:9;<62=?2134>:47:9;<623?2134>::7:9;<621?2134>:87:9;<601?2134>887:9;<607?2134>8>7:9;<605?2134>8<7:9;<61=?2134>:i7:9;<627?2134>:>7:9;<66e?2e3ty8;<4?:3y]15e<5:=:6<6;;|q62=<72?8pR887;<65f?2134>=57:9;<65e?2134><=7:9;<644?2134;i87:9;<3a7?2134;i>7:9;<3a5?2134;i<7:9;<3bb?2134;ji7:9;<3b`?2134;jo7:9;<3eg?2134;mn7:9;<3ee?2134;m57:9;<3e7:9;<00g?213488n7:9;<00e?21348857:9;<00l4?:3y]167<5:8j6<6;;|q0b3<72;qU8i74=53a>4>33ty8j84?:3y]0a><5=;j6<6;;|q0b1<72;qU8i94=53:>4>33ty8j>4?:3y]0a0<5=;36<6;;|q0b7<72;qU8i;4=534>4>33ty8j<4?:3y]0a2<5=;=6<6;;|q0b5<72;qU8i<4=536>4>33ty8ik4?:3y]0a7<5=;?6<6;;|q754<72;qU8i>4=516>4>33ty?==4?:3y]0f`<5=9?6<6;;|q74c<72;qU8nk4=510>4>33ty?4>33ty?4>33ty?<94?:3y]0f?<5=;n6<6;;|q0b<<72;qU8n94=530>4>33ty8ih4?:3y]0f0<5=;96<6;;|q74d<72;qU8n;4=50e>4>33ty?<44?:3y]0f2<5=8n6<6;;|q74=<72;qU8n=4=50g>4>33ty?<:4?:3y]0f4<5=8h6<6;;|q743<72;qU8n?4=50a>4>33ty?<84?:3y]0f6<5=8j6<6;;|q746<72;qU8oh4=50;>4>33ty?4>33ty?<=4?:3y]0ac<5=8>6<6;;|q0bc<72;qU8ij4=507>4>33ty8jh4?:3y]0ae<5=886<6;;|q0ba<72;qU8il4=501>4>33ty8jn4?:3y]0ag<5=8:6<6;;|q0bg<72;qU8i=4=503>4>33ty8jl4?:3y]0f><5=;m6<6;;|q0b=<72;qU8oj4=53g>4>33ty8j:4?:3y]0ge<5=;h6<6;;|q7f7<72;qU8l>4=57b>=1i<7>52z\7=c=:<5<5sW>2i63;5`86<>{t7}Y<0i019;n:448yv2fk3:1>vP;9c9>00g==<1v9om:181[2>i27?9l4:4:p0dg=838pR976;<66e?043ty?no4?:3y]0d><5=?j6;<4}r6ae?6=:rT?m:5244c9<0=z{=h26=4={_6b2>;3=h0==6s|4c:94?4|V=k>70::a;43?xu3j>0;6?uQ4`68913f2>m7;l;|q7f6<72;qU8464=57b>0dj57>52z\7=2=:<5rs01:>53<7?8f:?1f`<31279mh4;9:?1a`<2:279ii4;9:?1=4<31279;h4;9:?0=7<312784=4;9:?071<312788:4;9:?01a<312wx>l=50;0x97g52<:01?o;:05g?xu3><0;6<6t=3c1>4>434>=47?74:?1`<<3k279h54;c:?1`2<3k279h;4;c:?1`0<3k279h94;c:?1`7<3k279h<4>829>6a5=hl54b9>6`g=h754b9>6`>=h954b9>6`0=h;54b9>6`2=h=54b9>620=91901?98:0:0?84093>h70<80;6`?xu5i;0;69u22`095=2<5;=86ij4=57`>ag<5;;3>;0om6s|47c94?5|5=4=54:>11<5=<63;5d82<1=:5<4s4>=57?74:?72d<2827?:i4kb:p037=83>p1987:0:0?821?3;3?63;6782<6=::5a897772=i01?>i:5a8976b2=i01?8=:5a897062=i01?8?:5a8973a2=i01?;j:5a8973c2=i01?;l:5a8973e2=i01?;n:5a897372=i01?:i:5a8972b2=i01?:k:5a8972d2=i01?:m:5a8972f2=i01?:6:5a8972?2=i01?:8:5a894b?2=i01:5a894b72=i0q~:93;2962}:4>234>9i7?75:?76a<60<168?m51978914e282>70:=a;3;1>;3:10:485243595=3<5=8=6<6:;<611?7?=27?>94>849>075=91?019<=:0:6?82593;3963;2182<0=:<8l1=5;4=53g>4>234>:o7?75:?75g<60<168282>70:>8;3;1>;39>0:485240495=3<5=;>6<6:;<620?7?=27??84>849>062=91?019=<:0:6?824:3;3963;3082<0=:<::1=5;4=50:>4>234>:i7?75:?756<60<168<<51978913d2mh019;n:0;3?xu3>j0;6>u246395=5<5==;6<6<;<65`?70l2wx8;h50;1082093;3863<1687g>;49o0?o63<1d87g>;49m0?o63<1b87g>;49k0?o63<1`87g>;4900?o63<1987g>;49?0?o63;4jk0?o6318n523e390f=:;jl1=5=4=2f3>1e<5:n969m4=2f0>1e<5:n=69m4=2f7>1e<5:n>69m4=2f4>1e<5:n369m4=2ce>1e<5:kn69m4=2`3>1e<5:kh69m4=2ca>1e<5:ko69m4=2c:>1e<5:k36<6<;<1be?2d349j;7?73:?0af<3k278io4;c:?0ad<3k278i44;c:?0a=<3k278i:4;c:?0a3<3k278i84;c:?0a1<3k278i>4;c:p03c=838jw0:80;3;0>;6j=0?o63>b287g>;6j;0?o63>b087g>;6j90?o63>ag87g>;6il0?o63>ae87g>;6ij0?o63>fb87g>;6nk0?o63>f`87g>;6n00?o63>f987g>;6n>0?o63>f787g>;6n<0?o63>f587g>;6mh0?o63>e887g>;6m10?o63>e687g>;6m?0?o63>e487g>;6m=0?o63>e287g>;6m;0?o63=3b87g>;5;k0?o63=3`87g>;5;00?o63=3987g>;5;>0?o63=3787g>;5;<0?o63=3587g>;5;:0?o63<2`87g>;4?90?o63<7087g>;4>j0?o6s|24;94?3|5;;=68>4=341>4>3348:47jm;<02e?bf348:o7jk;|q14a<72:q6><85196897?a2mk01?6l:ec8yv46?3:1>v3=14864>;5910:;i5rs32`>5<4s48:97?74:?1=`6}::8>1=5:4=3;f>ab<5;2i6ij4}r02f?6=>r79=>4:0:?15f<6?m16>676=lh16>?<5db9>672=lm1v?>n:180846;3;3863=9e8gf>;50h0on6s|20f94?4|5;;968>4=33f>41c3ty9<44?:2y>644=91>01?7k:ef897>f2mn0q~<>f;296~;5980><63=21823a=z{;:36=4<{<025?7?<2795n4kb:?1<<??50;0x97772<:01?<=:05g?xu58>0;6>u220295=2<5;3h6ij4=3::>ab52z?14c<28279>84>7e9~w7612908w0;51k0on63=898gf>{t:;=1<706<5;836<9k;|q140<72:q6>=k5196897?e2mn01?67:ef8yv7a;3:19v3>b5864>;6nj0:49521c49`g=:9k21hl521cc9`a=z{8ki6=4:{<3a0?7?<278:o4ka:?010ae<5:>96im4=222>ad52z?2f7<2827:n54>7e9~w4g>290>w0?m2;3;0>;4>h0om63<558ge>;4<80om63<018gf>{t9k31<78t=0`2>06<58hj6<9k;<3ag?be34;ii7jn;<3`4?bd34;h>7jk;|q2e=<72;;:ea896262mi01?hi:e`8yv7ej3:1>v3>b1864>;6jj0:;i5rs0c4>5<2s4;i<7?74:?02<4ka:?005a783>0}:9hl1=5:4=24:>ae<5:?86im4=263>ae<5;lo6il4}r3ab?6=:r7:mh4:0:?2g5<6?m1v;4=;0om63<3g8ge>;5nj0on6s|1b394?4|58ko68>4=0a0>41c3ty:m94?:4y>5db=91>01>87:ea896352mi01>=i:ea897`e2mh0q~?l5;296~;6ij0><63>c7823a=z{8k86=4:{<3bg?7?<278::4ka:?0149850;0x97052<:01?;?:0:7?xu5<<0;6?u2273915=::=l1=5:4}r06859>64>=lh16>64e=lj1v?:;:18184183?;70<;e;3;0>{t:<=1<7=t=343>4>3348:m7jl;<02g?be3ty98>4?:3y>60`==916>9j51968yv42>3:1>v3=5g82<1=::8i1hl5rs361>5<5s48>i7;?;<07g?7?<2wx>8;50;7x973b282?70<>e;fb?84583ni70<=2;fg?845<3nh7p}=4083>7}::87>54z?11a<60=16>?>5db9>674=lh16>?:5dc9~w7272909w0<:c;73?843i3;386s|24194?5|5;?h6<6;;<016?be348987jn;|q17c<72;q6>8l5519>61?=91>0q~<:2;297~;5=k0:49522379`d=::;21ho5rs31f>5<5s48>m7;?;<078?50;0x973f282?70<=8;fb?xu6m80;6?u21ga915=:9lk1=5:4}r3f4?6=:r7:jo4:0:?2a<<60=1vb78ge>;6j10on63>b`8gg>{t9ml1<706<58o36<6;;|q2b4<72:q6=ko5196894d?2mi01v3>f8864>;6m>0:495rs0d3>5<5s4;m57?74:?2fdad<58i;6ij4=0a1>ae52z?2b2<2827:i84>859~w4cb290?w0?i7;3;0>;6jl0oo63>c18ge>;6k;0on6s|1e`94?4|58l=68>4=0g7>4>33ty:ii4?:2y>5c0=91>01<63>e282<1=z{8oh6=4<{<3e1?7?<27:o>4ka:?2g3:181843n3?;70<{t:::1<706<5;9j6<6;;|q16c<72;q6>9j5519>66?=91>0q~<=e;296~;5<63=3982<1=z{;8o6=4={<07f?373488;7?74:p67e=838p1?:n:4289751282?7p}=2c83>7}::=319=5222795=252z?10=<28279?94>859~w74>2909w0<;7;73?844;3;386s|22f94?7|5;><6<6;;|q2gc<72;q6=ho5519>5a>=91>0q~?le;296~;6m00><63>d682<1=z{8io6=4={<3fcc83>7}:9l<19=521e695=252z?2a0<2827:h>4>859~w4e>2909w0?j4;73?87c:3;386s|1b:94?4|58o868>4=0f2>4>33ty:o:4?:3y>5`4==916=i>51968yv4b:3:19v3>d9864>;5mk0:49521809`d=::1i1ho5244c904=z{8lo6=4={<3g3?3734;2>7?8d:p5cc=838p1fg83>7}:9m?19=52186952b52z?2`1<2827:584>7e9~w7662909w0?k3;73?87>>3;4=0;4>41c3ty9<>4?:3y>5a7==916=46516f8yv47<3:1>v3>d1864>;6100:;i5rs2g1>5<3s488o7;?;<1fg?7?<27:5l4ka:?71d<4?2wx>;=50;0x975e2<:01<7n:05g?xu5>=0;6?u222c915=:90h1=:j4}r051?6=:r79?44:0:?2=f<6?m1v?89:18184403?;70?6d;34`>{t:?=1<706<583n6<9k;|q12=<72;q6>>85519>5<`=9>n0q~<99;296~;5;<0><63>a1823a=z{;43|5;n26994=3f;>11<5;n<6994=3f5>11<5;n>6994=3f7>11<5;n96994=3f2>11<5;n86994=3ga>11<5;oj6994=3g:>11<5;o36994=3g4>11<5;o=6994=3g6>11<5;o?6994=3g0>11<5=?h6im4=34`>41c348j87jm;|q1ea<72;q6>i75519>6f0=9>n0q~p1?j7:0:7?84bi3?;70<6e;fb?84el3nj7p}=ac83>7}::m=19=522b6952b54z?1`2<60=16>h75519>6ol5d`9~w7gf2909w06a3==916>n<516f8yv4dk3:18v3=d482<1=::l=19=5228f9`f=::k=1hl5rs3c;>5<5s48o87;?;<0`5?70l2wx>nl50;6x97b3282?70k3nj70859>6`2==916>4l5d`9>6g7=lh1v?o::18184c93?;70{t:j21<7:t=3f2>4>3348n?7;?;<0:f?bd348jj7jn;|q1e2<72;q6>i=5519>6f6=9>n0q~348io7?8d:p6f1=838p1?m9:00b?84d?3;6974=3``>1?<5;hj6<9k;|q1fa<72:q6>n;513c897dd282j70{t:k21<7=t=3a7>1?<5;hj6974=3`;>41c3ty9no4?:2y>6f2=9;k01?ln:0:b?84ej3;1?<5;h=6<9k;|q1f<<72:q6>n=513c897d?282j70{t:k>1<7=t=3a1>1?<5;h=6974=3`7>41c3ty9n:4?:2y>6f4=9;k01?l9:0:b?84e?3;1?<5;h96<9k;|q1f0<72:q6>n?513c897d3282j70{t:k:1<7=t=3a3>1?<5;h96974=3`3>41c3ty9n>4?:2y>6f6=9;k01?l=:0:b?84e;3;1?<5;kn6<9k;|q1f4<72:q6>oh513c897d7282j70{t:hl1<7=t=3`f>44f348ji7?7a:?1ec<6?m1v?k>:18684bi3;3863>928ge>;61;0on63=8c8ge>;3=h08j6s|2d294?3|5;o26<6;;<3:0?bf34;2?7jm;<0;f?bd34>>m7=j;|q1`c<72h65196894?22mk01<7;:e`897>f2mk019;n:2f8yv4cm3:19v3=e682<1=:90<1hl521879`g=::1k1hn5244c97f=z{;no6=4:{<0f2?7?<27:5:4ka:?2=3im50;7x97c2282?70?68;fb?87>?3ni70<79;f`?822i39j7p}=dc83>0}::l>1=5:4=0;:>ag<58336il4=3:;>ag<5=?j6>74}r0ge?6=4>859>5565db9>00g=;11v?97:180840>3?;70<87;73?84013;627==916>:=516f8yv41n3:1:v3=7082<1=::>?1hn522619`f=::>31hn5227f9`d=::?i1hi5rs357>5<5s48<<7;?;<041?70l2wx>;k50;4x9717282?70<85;fb?840;3ni70<89;fa?841l3ni70<9c;f`?xu5n?0;6?u231090<=::o<1=:j4}r0e3?6=:r782`9>6c1=9>n0q~==0;296~;48;0:;i52305915=z{;l>6=4<{<13f?2>348m:7:6;<0e1?70l2wx?=?50;1x966e288j70;4880:;i5rs20:>5<5s49;n7?8d:?05c<282wx?nj50;7x97`12<801>j8:0:7?85bj3?;70=;2;fg?85793nj7p}=f583>6}:;9k184522g790<=::o>1=:j4}r134?6=;r782`9>6c3=91k01>>?:05g?xu4:10;6?u231c952b<5:;n68>4}r1`g?6==r79j84:2:?0`3<60=16?ho5519>717=lk16?=>5d`9~w7`42908w0=?9;6:?84a<3>270{t:ol1<7=t=22:>44f348m87?7a:?1bc<6?m1v><8:18185713;{t;jh1<7;t=3d7>04<5:n>6<6;;<1f=?37349?=7jk;<0eb?bf3ty9j?4?:2y>75>=<016>k=5489>6c4=9>n0q~l522g195=g<5;ln6<9k;|q063<72;q6?=6516f8967d2<:0q~=la;291~;5n:0>>635<4s49;;7:6;<0e6?2>348m=7?8d:p6cb=839p1>>8:00b?84a:3;3m63=fe823a=z{:8>6=4={<133?70l278=o4:0:p7f?=83?p1?h=:40896b4282?70=j7;73?85383no70u231490<=::o;184522g2952b53z?043<6:h16>k?519c897`d28=o7p}<2583>7}:;9<1=:j4=23b>0655z?1b4<2:278h?4>859>7`0==916?>h5dc9>6ce=lh1v?ki:180857=3>2706<7e9~w6442909w0=?5;34`>;4900><6s|3b594?3|5;l;68<4=2f2>4>3349n97;?;<10b?bc348mn7jn;|q1a`<72:q6?=:5489>6``=<016>hk516f8yv4ai3:1?v3<05826d=::ll1=5o4=3db>41c3ty8>?4?:3y>752=9>n01>?7:428yv5d>3:19v3=eg866>;4l90:49523d6915=:;:o1ho522gc9`d=z{;oo6=4<{<137?2>348ni7:6;<0f`?70l2wx>k650;1x9664288j70;5n00:;i5rs202>5<5s49;?7?8d:?053<282wx?::50;0b84bl3?970=md;64?85ej3><70=mc;64?85em3><70=mf;64?85d:3><70=l0;64?85d93><70=l3;64?85d<3><70=k1;64?85dn3><70=k0;64?85c:3><70=k3;64?85c>3><70=k4;64?85c=3><70=k7;64?85c03><70=nf;64?85fm3><70=m0;64?85fk3><70=nb;64?85fl3><70=n9;64?85f03><70=na;64?85f?3><70=jc;64?85bj3><70=ja;64?85b13><70=j8;64?85b?3><70=j6;64?85b=3><70=j4;64?85b;3><70=85;34`>{t;9i1<74>33499h7jn;|q050<72;q6?4;296~;49l0:495233a9`a=z{:;86=4={<12`?7?<278>n4kc:p744=838p1>?l:0:7?855k3ni7p}<1083>7}:;8h1=5:4=20`>ag52z?05d<60=16??j5dc9~w66a2909w0=>9;3;0>;4:l0om6s|31g94?4|5:;36<6;;<11a?be3ty8740=91>01>;4>j0?;63<6g823a=z{:8i6=4={<11e?373499h7?8d:p6<6=838p1?7::5;897?328=o7p}=9`83>7}::0?1=5o4=3;e>41c3ty9m<4?:3y>6<3=9>n01?o;:ec8yv4?n3:1>v3=9587=>;51:0:;i5rs3;:>5<5s48287?7a:?1=`<6?m1v?6j:18184>;3>270<62;34`>{t:021<74>f3482h7?8d:p6=b=838p1?7=:5;897?628=o7p}=9683>7}::081=5o4=3;`>41c3ty95;4?:3y>6<7=91k01?7m:05g?xu5?m0;6?u229090<=::1;1=:j4}r0;3?6=:r794?4>8`9>6=e=9>n0q~3483<7?8d:p6=0=838p1?6>:0:b?84?j3;41c3ty9484?:3y>6=6=91k01?6n:05g?xu5?h0;6?u226d90<=::>o1=:j4}r0;0?6=:r79;k4>8`9>6=?=9>n0q~<73;296~;5?l0:4l5229:952b54z?0fa<28278m44>859>73>=lm16?5;5d`9~w6d42908w0=md;3;0>;4l80><63<538g`>{t;0n1<7:t=2`a>06<5:k<6<6;;<153?bd3493=7jn;|q0f4<72:q6?ol5196896ea2<:01>;>:ea8yv5>m3:18v3;4i10:49523759`g=:;191hl5rs2`1>5<4s49io7?74:?0`5<282789<4kb:p7d6=83>p1>lj:42896gf282?70=98;fa?85??3nj7p}6}:;ko1=5:4=2f1>06<5:?96il4}r1b5?6=7=?=lh1v>l::18085en3;3863;4=:0oh6s|3`694?2|5:i968>4=2cf>4>3349=m7jm;<1;b?bf3ty8n54?:2y>7f4=91>01>j9:42896332mh0q~=n2;290~;4k90><63ok:0:7?851i3no70=7d;fb?xu4j>0;6>u23b395=2<5:n>68>4=277>ab54z?0g6<28278mk4>859>73d=lm16?4?5d`9~w6d>2908w0=l3;3;0>;4l>0><63<548g`>{t;h<1<7:t=2a7>06<5:h;6<6;;<15f?be3492o7jn;|q0fd<72:q6?n:5196896b?2<:01>;::e`8yv5d=3:18v35<3s49o47?74:?0af<282788?4kb:?1b27n:05g?xu4?m0;6?u23`g915=:;031=:j4}r14b?6=:r78n=4:0:?0=g<6?m1v>9m:18185fk3?;70=67;34`>{t;>k1<706<5:3=6<9k;|q03f<72;q6?lj5519>7<>=9>n0q~=88;296~;4i00><63<95823a=z{:=<6=4={<1bon:42896?228=o7p}<7783>7}:;h=19=52380952b52z?0=g<312785=4>7e9~w6?d2909w0=6b;31e>;41j0:;i5rs2:f>5<4s492m7:6;<1:4?2>3493i7?8d:p7<7=839p1>7n:00b?85>83;3m63<90823a=z{:2h6=4<{<1:=?2>3493i7:6;<1;g?70l2wx?5h50;1x96?>288j70=7e;3;e>;40o0:;i5rs2:b>5<4s49247:6;<1;g?2>3493m7?8d:p7=b=839p1>77:00b?85?k3;3m63<8e823a=z{:236=4<{<1:3?2>3493m7:6;<1;;40k0:;i5rs2:5>5<4s492:7:6;<1;3493:7?8d:p7=?=839p1>79:00b?85?03;3m63<88823a=z{:2?6=4<{<1:1?2>3493:7:6;<1;0?70l2wx?5950;1x96?2288j70=76;3;e>;40>0:;i5rs2:1>5<4s49287:6;<1;0?2>3493>7?8d:p7=3=839p1>7;:00b?85?<3;3m63<84823a=z{:2;6=4<{<1:7?2>3493>7:6;<1;4?70l2wx?5=50;1x96?4288j70=72;3;e>;40:0:;i5rs2:2>5<4s492>7?=a:?0<5<60h16?5?516f8yv5b93:18v35<3s49nm7?74:?2=f282?70?6d;fb?87>k3ni70::a;10?xu4ll0;69u23d:95=2<583n6io4=0;g>ad<5=?j6><4}r1g`?6=859>5<`=lh16=4k5dc9>00g=;81v>jl:18785b>3;3863>a18ge>;61o0on63;5`804>{t;mh1<7:t=2g6>4>334;j=7jn;<3b4?be34>>m7:e`8913f2;o0q~=k9;297~;4m:0:49521`09`g=:<i5rs21:>5<5s49887?7a:?07`<6?m1v>=?:181854<3;{t;:k1<74>f3498j7?8d:p767=838p1>=::05g?854>3>27p}<3c83>7}:;:<1=5o4=263>41c3ty8??4?:3y>760=9>n01>=8:5;8yv54k3:1>v3<36827e9>76>=<01v>=k:18185403;3m63<43823a=z{:?=6=4={<104kc:p71e=838p1>:8:0:b?85293;<6<9k;<173ty88i4?:3y>71>=91k01>;=:05g?xu4<=0;6?u235:952b<5:>26974}r17a?6=:r78844>8`9>705=9>n0q~=;5;296~;4<00:;i5235c90<=z{:>m6=4={<17e?7?i278994>7e9~w6212909w0=;a;34`>;4i6<6n;<161?70l2wx?8950;1x962e28=o70=83;fb?851m3nh7p}<6383>7}:;41c3ty8944?:3y>70b=9>n01>;j:5;8yv51;3:1>v3<5d827e9>70`=<01v>8;:181852n3;3m63<68823a=z{:?i6=4={<16b?70l278:=4;9:p733=838p1>8?:0:b?851i3;3ty8:;4?:3y>737=91k01>8m:05g?xu4=10;6?u2373952b<5:4>7e9~w617290?w0=80;3;0>;4?=0on63<748gf>;4>o0o56s|37f94?4|5:4=24f>41c3ty?9i4?:37x914a2==019:55891472==019?i:558917c2==019?l:558917e2==019?n:558917>2==019?7:55891702==019?9:55891722==019?;:55891522==019=;:55891542==019==:55891562==019=?:558914>2==019?j:55891742==019?=:558970c28=o7p};5383>7}:<;l19=5244c9g==z{=?:6=4={<61a?3734>>m7l7;|q715<72;q68?j5519>00g=j?1v9:i:181825k3?;70::a;`7?xu35rs56g>5<5s4>9m7;?;<66e?d53ty?8o4?:3y>07>==91688o5b09~w12f2909w0:=7;73?822i3h;7p};4883>7}:<;<19=5244c9ec=z{=>36=4={<611?3734>>m7m9;|q702<72;q68?:5519>00g=il1v9:9:181825;3?;70::a;cg?xu3<<0;6?u2430915=:<5<5s4>9=7;?;<66e?ge3ty?8>4?:3y>076==91688o5a89~w1252909w0:>f;73?822i3k37p};4183>7}:<8n19=5244c9e2=z{=9m6=4={<62g?3734>>m7o9;|q77`<72;q6800g=k<1v9=k:181826i3?;70::a;c6?xu3;j0;6?u240;915=:<5<5s4>:47;?;<66e?g43ty??l4?:3y>041==91688o5a39~w15>2909w0:>6;73?822i3k:7p};3983>7}:<8?19=5244c9e5=z{=9<6=4={<620?3734>>m7li;|q71<<72;q68>;5519>00g=jl1v9;7:181824<3?;70::a;a7?xu3=>0;6?u2421915=:<5<5s4>8>7;?;<66e?dd3ty?984?:3y>067==91688o5bc9~w1332909w0:<0;73?822i3hj7p};5283>7}:<;319=5244c9f<=z{=>h6=4={<62a?3734>>m7l:;|q704<72;q68<=5519>00g=ih1v9=9:181826:3?;70::a;;e?xu3=k0;6?u244a952b<5=?j6no4}r1f`?6==r78;>4kb:?02`7e9>00g=<><019;n:b;8yv71:3:1>v3=248gf>;5:=0:>o5rs04g>5<5s4;h?7jm;<3`6?75j2wx>?850;0x974?2mi01?<;:05g?xu6k=0;6?u21b49`f=:9j81=:j4}r11g?6=:r78>h4kd:?06f<6:k1v<=7:181855m3;{z{<<:6=4={_755>;3<3?==6*;73822c=z{<<36=4={_75<>;3<3?=46*;738235=z{;3<3?>?6*;738234=z{=h96=4={_6b4>;3<3>j<6*;738201=z{=h;6=4={_6:b>;3<3>2j6*;73820c=z{=km6=4={_6:a>;3<3>2i6*;73821<=z{=kn6=4={_6:`>;3<3>2h6*;73821g=z{=ko6=4={_6:g>;3<3>2o6*;73821f=z{=kh6=4={_6:f>;3<3>2n6*;73821a=z{=ki6=4={_6:e>;3<3>2m6*;73821c=z{=kj6=4={_6:=>;3<3>256*;738225=z{=hi6=4={_6b<>;3<3>j46*;738224=z{=hj6=4={_6b3>;3<3>j;6*;738226=z{=h26=4={_6b2>;3<3>j:6*;738221=z{=h36=4={_6b1>;3<3>j96*;738220=z{=h<6=4={_6b0>;3<3>j86*;738223=z{=h=6=4={_6b7>;3<3>j?6*;738222=z{=h>6=4={_6b6>;3<3>j>6*;73822==z{=h?6=4={_6b5>;3<3>j=6*;73822<=z{=h86=4={_6:<>;3<3>246*;73822d=z{=k26=4={_6:3>;3<3>2;6*;73822g=z{<=?6=4={_740>;3<3?<86*;73822f=z{;3<3?>j6*;73822`=z{=lo6=4={_6g=>;3<3>o56*;738237=z{=li6=4={_6g<>;3<3>o46*;738236=z{=lj6=4={_6g3>;3<3>o;6*;738231=z{=l26=4={_6g2>;3<3>o:6*;738230=z{=l36=4={_6g1>;3<3>o96*;738233=z{=l<6=4={_6g0>;3<3>o86*;738232=z{=l>6=4={_6g6>;3<3>o>6*;73823==z{=l?6=4={_6g5>;3<3>o=6*;73823<=z{=l86=4={_6g4>;3<3>o<6*;73823d=z{=l96=4={_6`b>;3<3>hj6*;73827d=z{=l:6=4={_6`a>;3<3>hi6*;73827g=z{=l;6=4={_6``>;3<3>hh6*;73827f=z{=om6=4={_6`g>;3<3>ho6*;73827a=z{=on6=4={_6`f>;3<3>hn6*;73827`=z{=oo6=4={_6`e>;3<3>hm6*;73827c=z{=oh6=4={_6`=>;3<3>h56*;738205=z{=oj6=4={_6`3>;3<3>h;6*;738204=z{=o26=4={_6`2>;3<3>h:6*;738207=z{=o36=4={_6`1>;3<3>h96*;738206=z{=o<6=4={_6`0>;3<3>h86*;738200=z{=o=6=4={_6`7>;3<3>h?6*;738203=z{=o>6=4={_6`6>;3<3>h>6*;738202=z{=o?6=4={_6`5>;3<3>h=6*;73820==z{=o86=4={_6`4>;3<3>h<6*;73820<=z{=o96=4={_6ab>;3<3>ij6*;73820d=z{=o:6=4={_6aa>;3<3>ii6*;73820g=z{<:?6=4={_6gb>;3<3>oj6*;73820f=z{<:86=4={_6ga>;3<3>oi6*;73820a=z{<:96=4={_6g`>;3<3>oh6*;73820`=z{<::6=4={_6gg>;3<3>oo6*;738215=z{<:;6=4={_6gf>;3<3>on6*;738214=z{=lm6=4={_6ge>;3<3>om6*;738217=z{=ln6=4={_6g7>;3<3>o?6*;738216=z{=l=6=4={_6`<>;3<3>h46*;738211=z{=oi6=4={_6a`>;3<3>ih6*;738210=z{=o;6=4={_6ag>;3<3>io6*;738213=z{<:h6=4={_73g>;3<3?;o6*;738212=z{=2<6=4={_6;3>;3<3>3;6*;73821==z{<:=6=4={_732>;3<3?;:6*;73821d=z{<9:6=4={_705>;3<3?8=6*;73821`=zugko57>52zJ736=zfhnj6=4={I647>{iimh1<7vF;729~jdbb2909wE:83:mea`=838pD99<;|lba5<72;qC8:=4}ocf5?6=:rB?;>5rn`g1>5<5sA>7}O<>90qcoj5;296~N3?:1vblk9:181M20;2wemh950;0xL1143tdji54?:3yK02552zJ736=zfhoj6=4={I647>{iilh1<7vF;729~jdcb2909wE:83:me``=838pD99<;|lbb5<72;qC8:=4}oce5?6=:rB?;>5rn`d1>5<5sA>7}O<>90qcoi5;296~N3?:1vblh9:181M20;2wemk950;0xL1143tdjj54?:3yK02552zJ736=zfhlj6=4={I647>{iioh1<7vF;729~jd`b2909wE:83:mec`=838pD99<;|la45<72;qC8:=4}o`35?6=:rB?;>5rnc21>5<5sA>7}O<>90qcl?5;296~N3?:1vbo>9:181M20;2wen=950;0xL1143tdi<54?:3yK02552zJ736=zfk:j6=4={I647>{ij9h1<7vF;729~jg6b2909wE:83:mf5`=838pD99<;|la55<72;qC8:=4}o`25?6=:rB?;>5rnc31>5<5sA>7}O<>90qcl>5;296~N3?:1vbo?9:181M20;2wen<950;0xL1143td2=l4?:0yK02557>51zJ736=zf0?j6=4>{I647>{i1=j0;65rn841>5<6sA>4}O<>90qc795;295~N3?:1vb489:182M20;2we5;950;3xL1143td2:54?:0yK02551zJ736=zf0{I647>{i1?h1<7?tH550?xh>>j0;65rn851>5<6sA>4}O<>90qc785;295~N3?:1vb499:182M20;2we5:950;3xL1143td2;54?:0yK02551zJ736=zf0=j6=4>{I647>{i1>h1<7?tH550?xh>?j0;65rn8:1>5<6sA>4}O<>90qc775;295~N3?:1vb469:182M20;2we55950;3xL1143td2454?:0yK02551zJ736=zf02j6=4>{I647>{i11h1<7?tH550?xh>0j0;6b290:wE:83:m==`=83;pD99<;|l:=5<728qC8:=4}o;:5?6=9rB?;>5rn8;1>5<6sA>4}O<>90qc765;295~N3?:1vb479:182M20;2we54950;3xL1143td2554?:0yK02551zJ736=zf03j6=4>{I647>{i10h1<7?tH550?xh>1j0;6l3:1=vF;729~j5rn8c1>5<6sA>4}O<>90qc7n5;295~N3?:1vb4o9:182M20;2we5l950;3xL1143td2m54?:0yK02551zJ736=zf0kj6=4>{I647>{i1hh1<7?tH550?xh>ij0;65rn8`1>5<6sA>4}O<>90qc7m5;295~N3?:1vb4l9:182M20;2we5o950;3xL1143td2n54?:0yK02551zJ736=zf0hj6=4>{I647>{i1kh1<7?tH550?xh>jj0;65rn8a1>5<6sA>4}O<>90qc7l5;295~N3?:1vb4m9:182M20;2we5n950;3xL1143td2o54?:0yK02551zJ736=zf0ij6=4>{I647>{i1jh1<7?tH550?xh>kj0;65rn8f1>5<6sA>4}O<>90qc7k5;295~N3?:1vb4j9:182M20;2we5i950;3xL1143td2h54?:0yK02551zJ736=zf0nj6=4>{I647>{i1mh1<7?tH550?xh>lj0;65rn8g1>5<6sA>4}O<>90qc7j5;295~N3?:1vb4k9:182M20;2we5h950;3xL1143td2i54?:0yK02551zJ736=zf0oj6=4>{I647>{i1lh1<7?tH550?xh>mj0;65rn8d1>5<6sA>4}O<>90qc7i5;295~N3?:1vb4h9:182M20;2we5k950;3xL1143td2j54?:0yK02551zJ736=zf0lj6=4>{I647>{i1oh1<7?tH550?xh>nj0;65rn`21>5<6sA>4}O<>90qco?5;295~N3?:1vbl>9:182M20;2wem=950;3xL1143tdj<54?:0yK02551zJ736=zfh:j6=4>{I647>{ii9h1<7?tH550?xhf8j0;65rn`31>5<6sA>4}O<>90qco>5;295~N3?:1vbl?9:182M20;2wem<950;3xL1143tdj=54?:0yK02551zJ736=zfh;j6=4>{I647>{ii8h1<7?tH550?xhf9j0;65rn`01>5<6sA>4}O<>90qco=5;295~N3?:1vbl<9:182M20;2wem?950;3xL1143tdj>54?:0yK02551zJ736=zfh8j6=4>{I647>{ii;h1<7?tH550?xhf:j0;65rn`11>5<6sA>4}O<>90qco<5;295~N3?:1vbl=9:182M20;2wem>950;3xL1143tdj?54?:0yK02551zJ736=zfh9j6=4>{I647>{ii:h1<7?tH550?xhf;j0;65rn`61>5<6sA>4}O<>90qco;5;295~N3?:1vbl:9:182M20;2wem9950;3xL1143tdj854?:0yK02551zJ736=zfh>j6=4>{I647>{ii=h1<7?tH550?xhf5rn`71>5<6sA>4}O<>90qco:5;295~N3?:1vbl;9:182M20;2wem8950;3xL1143tdj954?:0yK02557>51zJ736=zfh?j6=4>{I647>{ii5rn`41>5<6sA>4}O<>90qco95;295~N3?:1vbl89:182M20;2wem;950;3xL1143tdj:54?:0yK02551zJ736=zfh{I647>{ii?h1<7?tH550?xhf>j0;65rn`51>5<6sA>4}O<>90qco85;295~N3?:1vbl99:182M20;2wem:950;3xL1143tdj;54?:0yK02551zJ736=zfh=j6=4>{I647>{ii>h1<7?tH550?xhf?j0;65rn`:1>5<6sA>4}O<>90qco75;295~N3?:1vbl69:182M20;2wem5950;3xL1143tdj454?:0yK02551zJ736=zfh2j6=4>{I647>{ii1h1<7?tH550?xhf0j0;6b290:wE:83:me=`=83;pD99<;|lb=5<728qC8:=4}oc:5?6=9rB?;>5rn`;1>5<6sA>4}O<>90qco65;295~N3?:1vbl79:182M20;2wem4950;3xL1143tdj554?:0yK02551zJ736=zfh3j6=4>{I647>{ii0h1<7?tH550?xhf1j0;6l3:1=vF;729~jd?b290:wE:83:me<`=83;pD99<;|lbe5<728qC8:=4}ocb5?6=9rB?;>5rn`c1>5<6sA>4}O<>90qcon5;295~N3?:1vblo9:182M20;2weml950;3xL1143tdjm54?:0yK02551zJ736=zfhkj6=4>{I647>{iihh1<7?tH550?xhfij0;65rn``1>5<6sA>4}O<>90qcom5;295~N3?:1vbll9:182M20;2wemo950;3xL1143tdjn54?:0yK02551zJ736=zfhhj6=4>{I647>{iikh1<7?tH550?xhfjj0;65rn`a1>5<6sA>4}O<>90qcol5;295~N3?:1vblm9:182M20;2wemn950;3xL1143tdjo54?:0yK02551zJ736=zfhij6=4>{I647>{iijh1<7?tH550?xhfkj0;65rn`f1>5<6sA>4}O<>90qcok5;295~N3?:1vblj9:182M20;2wemi950;3xL1143tdjh54?:0yK025?01274>6789:;<=>?0123456789:;<=>?0123456789:;<=>?0123456789:;<=>?0123454<80;0=>5>.130?46=AGZ^X7OKDSC?=?699l1:<7GAPTV9twi`Wog`Rzgrdqk8<<76;?0==4FNQWW>uthoVl~`aQ{hsgplZgt{lx044?>378553CE\XZ5DHC?50<76890=;4@UURVP?BHI5;>6=0>2:3;>LHW]]0oec2>7;2=5>433;98?0086?IR\Y__6IA_A=394;753:81EC^ZT;FJF956294:?6==:NWWTPR=LFH7?<4?>0687301?69l29x>=>?ff662(363=>08=HI1097>LHW]]0OE]L33;2=57=32F__\XZ5DNRA86<7681=>6864:4:=32<09:;866J8@38=1=>8939748;;845=44<13CE\XZ5AEFQF9>=87;n744FNQWW>uthoVof|ywPtipfwm:?29499675IORVP?vugnUna}zv_ujqavnXizyn~y27:1<11>?=AGZ^X7~}of]fiur~W}byi~fPndebp`:?294:n675OTVSQQ55NDEPB858?3HNO^L2>>99B@ATF4;437LJKR@>0:==FLMXJ0907;@FGVD:2611JHI\N<7<;?DBCZH6<255NDEPB8=8f3HNO^L26:1<;?DBCZH62255NDEPA858?3HNO^O2>>99B@ATE4;437LJKRC>0:==FLMXI0907;@FGVG:2611JHI\M<7<;?DBCZK6<2l5NDEPA8=<7611JHI\M<9<0?DJK12KXUCMPRDE0?GS502H^_RGAFN38G7=DM880OEKLK^NJG@HTMV^R\H<4CH68GIMF<2IGGO=4CMP:?FIJE@^_II?;;BMQAZABFLXJXDAA_HLEK2=DZLK_II?4D39GG7=CA?1OEL2?>69GMD:687=0HDO310<4?AOF4885;6JFA=30:2=CAH6:8374DHC?50<76>1OEL2>5?48@LG;97<0HDO32?48@LG;;7<0HDO34?48@LG;=7<0HDO36?48@LG;?7<0HDO38?48@LG;17<0HDL30?58@LD;994<7IGM<03=3>BNJ5;92:5KIC>27;169GMG:6?7=0HDL319<4?AOE4835:6JFB=3=3>BNJ58;2:5KIC>15;1?08;EKA8759?2NBN1<;>69GMG:5=7=0HDL327<4?AOE4;=5;6JFB=0;:2=CAK695384DH@?6;14=7IGM<9<5?AOE404<7IG_A=2==>BNXH6:6=08;EKSE979?2NB\O2?>69GMUD;97=0HD^M<3<:?AOWJ591<394DHRA86813MEJ0=08;EMB8469?2NDM1?>>69GKD:6:7=0HBO312<4?AIF48>556J@A=36>5803MEJ0<;16:FLE979>2NDM1<16:FLE959>2NDM1:16:FLE939>2NDM1816:FLE919>2NDM1616:FLE9?9?2NDMR\JG79GKG:76>1OCO2>0?58@JD;984<7IAM<00=3>BHJ5;82:5KOC>20;169GKG:607=0HBL318<5?AIE484<7IAM<32=3>BHJ58:2:5KOC>16;1>08;EMA8729?2NDN1<:>69GKG:5>7=0HBL326<4?AIE4;25;6J@B=0::3=CGK692:5KOC>04;?69GKG:497<0HBL33?48@JD;<7<0HBL35?48@JD;>7<0HBL37?48@JD;07<0HBL39?58@JDXZLM<7IA_A=2==>BHXH6:6=08;EMSE979?2ND\O2?>69GKUD;97=0HB^M<3<:?AIWJ591<394DNRA86843LDJ?6KABc9FJZCDKVXNMIm4EO]FGFYPZ@^N>6H=2:D;1>@FDZO97KJ<;GF@0>@CKL90JI^;;GFSA1=AL[O?7KH7009D7>AIL81B>6G?2:K26>O5:2C846GAIUR\45>>8:KMMQVX8;20ECG[P^20<>OIA]ZT<964IOKWTZ6202CEEY^P07:8MKOSXV:<56GAIUQWEQC03@DBXR>?7:KMMQY79>1BBDZP0358MKOSW99<7D@FT^273>OIA]U;9:5FNHV\4311BBDZP1358MKOSW89<7D@FT^373>OIA]U:9:5FNHV\531969JJLRX9H=0ECG[_0@4?LHN\V;H;6GAIU]2@2=NF@^T=H94IOKW[4@03@DBXR1BBDZP2358MKOSW;9<7D@FT^073>OIA]U99:5FNHV\631H94IOKW[7@03@DBXR=?7:KMMQY49>1BBDZP3358MKOSW:9<7D@FT^173>OIA]U89:5FNHV\73198;HLJPZ5??2CEEYQ<969JJLRX;H=0ECG[_2@4?LHN\V9H;6GAIU]0@2=NF@^T?H94IOKW[6@13@DBXRO9;HLJPZD43@D]>6BF2:NL2>JHIMOO;6B@GHABH1=K]];?7A[[259OQQ533E__8;5CUU6\@0=J[NEE96CZXB[`?Hgmg{\n~~g`nb9Nmkiu^lxxeb`<;O226>H6<2D:<=:4N0220>H68;>0B<><4:L241286@>0768J460<2D:<5:4N02:7>H69=1E=<>;;O3251=I988?7C?>359M54233G;:995A1047?K76?=1E=<6;;O32=6=I9;>0B<2268J443<2D:>8:4N0050>H6:>>0B<<73:L271=I9:;87C?;3:L216=I9?>0B<8;3:L236=I9190B<7=;O00?K47;2D9=>5A2318J7543G8??6@=529M635H>;:1E59=4N870?K?1;2D2;>5A9918JIL92Z?7]O]T`9SMKYE]ZCOTo5_IO]AQVHFEL90\_K>;P38V`=UIDH::R]>8^Q02d=UMHNTJD\\Tb9QADBX_@N_DROl;SGB@ZQNL]BTN<5\129PMHYDGEFB_DAA_BJFGN0<[F_YOH94SSTBHZG03ZX]MAQM4:QPVD2<[ZXI86ZVPD11?P6(o{l%~k!hcy,`hn~(EqeySjPpovq[beXpfx;<=>PRdqvhq74:2_;#j|i.sd,cf~)keas#@v`r^pg[uhszVmhSua}0122[Wct}e~:??5Z0.eqb+ta'nis"nbdx.O{kwYulVzexQhc^zlv567:VXnxb{1208Q5)`zo$yj"ilx/aoo})JpfxT~iQnup\cfYg{:;<>Q]erwop4553\:$kh!rg-dg}(ddbr$Aua}_sf\tkruWniTtb|?016\V`urd};8>6[?/fpe*w`(ojr%oaew/LzlvZtcWyd~Ril_ymq4562W[oxyaz>339V4*aun'xm#jmw.bnh|*Kg{UyhR~ats]dgZ~hz9:;:R\jstnw564<]9%l~k }f.e`|+ekcq%Ftb|Pre]sjqtXojUsc>?06]Qavsk|8997X> gsd-vc)`kq$h`fv Mymq[rtXxg~ySjmPxnp3456XZly~`y?<2:W3+bta&{l$knv!cmi{+H~hzV}yS}`{r^e`[}iu89::S_k|umv277=R8&myj#|i/fa{*fjlp&GscQxr^rmpwY`kVrd~=>?2^Pfwpjs9:80Y=!hrg,qb*adp'iggu!Bxnp\swYwf}xTknQwos2346YUmzgx<==;T2,cw`)zo%lou lljz,I}iuW~xT|cz}_fa\|jt789>T^h}zlu306>S7'nxm"h gbz-gim'Drd~Ry}_qlwvZadWqey<=>:_Sgpqir6;;1^<"i}f/pe+be&jf`t"Cwos]tvZvi|{UloRv`r1232ZTb{|f=><4U1-dvc(un&mht#mcky-N|jtX{U{by|Pgb]{kw678>UYi~{ct011?P6(o{l%~k!hcy,`hn~(EqeySz|Ppovq[beXpfx;<=6PRdqvhq7592_;#j|i.sd,cf~)keas#jPpovq[goi4949=6[?/fpe*w`(ojr%oaew/sf\tkruWkce0<0=1:W3+bta&{l$knv!cmi{+wbXxg~ySoga<3<15>S7'nxm"h gbz-gim'{nT|cz}_ckm868592_;#j|i.sd,cf~)keas#jPpovq[goi4=49=6[?/fpe*w`(ojr%oaew/sf\tkruWkce080=1:W3+bta&{l$knv!cmi{+wbXxg~ySoga<7<15>S7'nxm"h gbz-gim'{nT|cz}_ckm828592_;#j|i.sd,cf~)keas#jPpovq[goi4149<6[?/fpe*w`(ojr%oaew/sf\tkruWkceS= gsd-vc)`kq$h`fv re]sjqtXj`dT9?>4U1-dvc(un&mht#mcky-q`Zvi|{UiecQ9219V4*aun'xm#jmw.bnh|*tcWyd~Rlfn^514>S7'nxm"h gbz-gim'{nT|cz}_ckm[=413\:$kh!rg-dg}(ddbr$~iQnup\flhXpfx;<=>=7:W3+bta&{l$knv!cmi{+wbXxg~ySoga_ymq45679;<0Y=!hrg,qb*adp'iggu!}d^rmpwYeagUsc>?0004?P6(o{l%~k!hcy,`hn~(zmU{by|Pbhl\|jt789;:>;5Z0.eqb+ta'nis"nbdx.pg[uhszVhbbRv`r123671<]9%l~k }f.e`|+ekcq%yhR~ats]amkYg{:;1^<"i}f/pe+be&jf`t"|k_qlwvZdnfVrd~=>?3305?P6(o{l%~k!hcy,`hn~(zmU{by|Pbhl\|jt789>9;6[?/fpe*w`(ojr%oaew/sf\tkruWkceSua}0127570<]9%l~k }f.e`|+ekcq%yhR~ats]amkYg{:;<8<8;T2,cw`)zo%lou lljz,vaYwf}xTnd`Pxnp34536:?1^<"i}f/pe+be&jf`t"|k_qlwvZdnfVrd~=>?63:8Q5)`zo$yj"ilx/aoo})ulVzexQmio]{kw678?;:>:5Z0.eqb+ta'nis"nbdx.pg[uhszVhbbRv`r123274e3\:$kh!rg-dg}(ddbr$~iQnup\flhXpfx;<=8Pbef363=R8&myj#|i/fa{*fjlp&xoS}`{r^`jjZ~hz9:;;?94U1-dvc(un&mht#mcky-q`Zvi|{UiecQwos23427582_;#j|i.sd,cf~)keas#jPpovq[be;878;7X> gsd-vc)`kq$h`fv re]sjqtXoj6:2?>4U1-dvc(un&mht#mcky-q`Zvi|{Ulo1<1219V4*aun'xm#jmw.bnh|*tcWyd~Ril<2<14>S7'nxm"h gbz-gim'{nT|cz}_fa?0;473\:$kh!rg-dg}(ddbr$~iQnup\cf:26;:0Y=!hrg,qb*adp'iggu!}d^rmpwY`k5<5>=5Z0.eqb+ta'nis"nbdx.pg[uhszVmh0:0=0:W3+bta&{l$knv!cmi{+wbXxg~ySjm38?3e?P6(o{l%~k!hcy,`hn~(zmU{by|Pgb]35c=R8&myj#|i/fa{*fjlp&xoS}`{r^e`[47a3\:$kh!rg-dg}(ddbr$~iQnup\cfY59o1^<"i}f/pe+be&jf`t"|k_qlwvZadW:;m7X> gsd-vc)`kq$h`fv re]sjqtXojU?=k5Z0.eqb+ta'nis"nbdx.pg[uhszVmhS8?i;T2,cw`)zo%lou lljz,vaYwf}xTknQ91g9V4*aun'xm#jmw.bnh|*tcWyd~Ril_63e?P6(o{l%~k!hcy,`hn~(zmU{by|Pgb];63=R8&myj#|i/fa{*fjlp&xoS}`{r^e`[duumn6;2?84U1-dvc(un&mht#mcky-q`Zvi|{UloRo|rde?5;413\:$kh!rg-dg}(ddbr$~iQnup\cfYf{{ol0?0=6:W3+bta&{l$knv!cmi{+wbXxg~ySjmParpfc959:?1^<"i}f/pe+be&jf`t"|k_qlwvZadWhyyij2;>348Q5)`zo$yj"ilx/aoo})ulVzexQhc^cpv`a;=78=7X> gsd-vc)`kq$h`fv re]sjqtXojUjkh<7<12>S7'nxm"h gbz-gim'{nT|cz}_fa\evtbo5=5>;5Z0.eqb+ta'nis"nbdx.pg[uhszVmhSl}}ef>;:73<]9%l~k }f.e`|+ekcq%yhR~ats]dgZgtzlmT?;4U1-dvc(un&mht#mcky-q`Zvi|{UloRo|rde\773<]9%l~k }f.e`|+ekcq%yhR~ats]dgZgtzlmT8?;4U1-dvc(un&mht#mcky-q`Zvi|{UloRo|rde\173<]9%l~k }f.e`|+ekcq%yhR~ats]dgZgtzlmT:?;4U1-dvc(un&mht#mcky-q`Zvi|{UloRo|rde\373<]9%l~k }f.e`|+ekcq%yhR~ats]dgZgtzlmT4?74U1-dvc(un&mht#mcky-q`Zvi|{UloRo|rde\`4:76;30Y=!hrg,qb*adp'iggu!}d^rmpwY`kVkx~hiPd0>2:7?<]9%l~k }f.e`|+ekcq%yhR~ats]dgZgtzlmTh<2=>3;8Q5)`zo$yj"ilx/aoo})ulVzexQhc^cpv`aXl8682?74U1-dvc(un&mht#mcky-q`Zvi|{UloRo|rde\`4:36;30Y=!hrg,qb*adp'iggu!}d^rmpwY`kVkx~hiPd0>6:7?<]9%l~k }f.e`|+ekcq%yhR~ats]dgZgtzlmTh<29>3;8Q5)`zo$yj"ilx/aoo})ulVzexQhc^cpv`aXl86<2?74U1-dvc(un&mht#mcky-q`Zvi|{UloRo|rde\`4:?6;20Y=!hrg,qb*adp'iggu!}d^rmpwY`kVkx~hiPd0]36==R8&myj#|i/fa{*fjlp&xoS}`{r^e`[duumnUo=R?=8:W3+bta&{l$knv!cmi{+wbXxg~ySjmParpfcZb6W;837X> gsd-vc)`kq$h`fv re]sjqtXojUjkh_e3\77><]9%l~k }f.e`|+ekcq%yhR~ats]dgZgtzlmTh85Z0.eqb+ta'nis"nbdx.pg[uhszVmhSua}012360=R8&myj#|i/fa{*fjlp&xoS}`{r^e`[}iu89::>85Z0.eqb+ta'nis"nbdx.pg[uhszVmhSua}012160=R8&myj#|i/fa{*fjlp&xoS}`{r^e`[}iu89:8>85Z0.eqb+ta'nis"nbdx.pg[uhszVmhSua}012760=R8&myj#|i/fa{*fjlp&xoS}`{r^e`[}iu89:>>85Z0.eqb+ta'nis"nbdx.pg[uhszVmhSua}012560=R8&myj#|i/fa{*fjlp&xoS}`{r^e`[}iu89:<><5Z0.eqb+ta'nis"nbdx.uq[uhszVhbb1?1209V4*aun'xm#jmw.bnh|*quWyd~Rlfn=0=64=R8&myj#|i/fa{*fjlp&}yS}`{r^`jj959:81^<"i}f/pe+be&jf`t"y}_qlwvZdnf5>5><5Z0.eqb+ta'nis"nbdx.uq[uhszVhbb1;1209V4*aun'xm#jmw.bnh|*quWyd~Rlfn=4=64=R8&myj#|i/fa{*fjlp&}yS}`{r^`jj919:81^<"i}f/pe+be&jf`t"y}_qlwvZdnf525><5Z0.eqb+ta'nis"nbdx.uq[uhszVhbb171219V4*aun'xm#jmw.bnh|*quWyd~Rlfn^314>S7'nxm"h gbz-gim'~xT|cz}_ckm[7473\:$kh!rg-dg}(ddbr${Qnup\flhX;;:0Y=!hrg,qb*adp'iggu!xr^rmpwYeagU?>=5Z0.eqb+ta'nis"nbdx.uq[uhszVhbbR;=0:W3+bta&{l$knv!cmi{+rtXxg~ySoga_703?P6(o{l%~k!hcy,`hn~({U{by|Pbhl\376<]9%l~k }f.e`|+ekcq%|~R~ats]amkY?:91^<"i}f/pe+be&jf`t"y}_qlwvZdnfV39:6[?/fpe*w`(ojr%oaew/vp\tkruWkceSua}012362=R8&myj#|i/fa{*fjlp&}yS}`{r^`jjZ~hz9:;<<<9;T2,cw`)zo%lou lljz,swYwf}xTnd`Pxnp34575?2_;#j|i.sd,cf~)keas#z|Ppovq[goiWqey<=>>1348Q5)`zo$yj"ilx/aoo})pzVzexQmio]{kw678;8<7X> gsd-vc)`kq$h`fv ws]sjqtXj`dTtb|?010263=R8&myj#|i/fa{*fjlp&}yS}`{r^`jjZ~hz9:;??94U1-dvc(un&mht#mcky-tvZvi|{UiecQwos234645>2_;#j|i.sd,cf~)keas#z|Ppovq[goiWqey<=>;269V4*aun'xm#jmw.bnh|*quWyd~Rlfn^zlv567<88=7X> gsd-vc)`kq$h`fv ws]sjqtXj`dTtb|?01713>S7'nxm"h gbz-gim'~xT|cz}_ckm[}iu89:>=?84U1-dvc(un&mht#mcky-tvZvi|{UiecQwos23434?3\:$kh!rg-dg}(ddbr${Qnup\flhXpfx;<=8>1358Q5)`zo$yj"ilx/aoo})pzVzexQmio]{kw678?89n6[?/fpe*w`(ojr%oaew/vp\tkruWkceSua}0125[gbc8;<0Y=!hrg,qb*adp'iggu!xr^rmpwYeagUsc>?0604?P6(o{l%~k!hcy,`hn~({U{by|Pbhl\|jt789=:>=5Z0.eqb+ta'nis"nbdx.uq[uhszVmh0=0=0:W3+bta&{l$knv!cmi{+rtXxg~ySjm31?03?P6(o{l%~k!hcy,`hn~({U{by|Pgb>1:76<]9%l~k }f.e`|+ekcq%|~R~ats]dg959:91^<"i}f/pe+be&jf`t"y}_qlwvZad4=49<6[?/fpe*w`(ojr%oaew/vp\tkruWni793328Q5)`zo$yj"ilx/aoo})pzVzexQhc=5=65=R8&myj#|i/fa{*fjlp&}yS}`{r^e`8=8582_;#j|i.sd,cf~)keas#z|Ppovq[be;17;m7X> gsd-vc)`kq$h`fv ws]sjqtXojU;=k5Z0.eqb+ta'nis"nbdx.uq[uhszVmhS;m7X> gsd-vc)`kq$h`fv ws]sjqtXojU3=k5Z0.eqb+ta'nis"nbdx.uq[uhszVmhS4<9;T2,cw`)zo%lou lljz,swYwf}xTknQnssgd8585>2_;#j|i.sd,cf~)keas#z|Ppovq[beXizxnk1?1279V4*aun'xm#jmw.bnh|*quWyd~Ril_`qqab:56;<0Y=!hrg,qb*adp'iggu!xr^rmpwY`kVkx~hi33?05?P6(o{l%~k!hcy,`hn~({U{by|Pgb]bwwc`4=49:6[?/fpe*w`(ojr%oaew/vp\tkruWniTm~|jg=7=63=R8&myj#|i/fa{*fjlp&}yS}`{r^e`[duumn6=2?84U1-dvc(un&mht#mcky-tvZvi|{UloRo|rde?3;413\:$kh!rg-dg}(ddbr${Qnup\cfYf{{ol050=6:W3+bta&{l$knv!cmi{+rtXxg~ySjmParpfc9?9:<1^<"i}f/pe+be&jf`t"y}_qlwvZadWhyyijQ?249V4*aun'xm#jmw.bnh|*quWyd~Ril_`qqabY6:<1^<"i}f/pe+be&jf`t"y}_qlwvZadWhyyijQ=249V4*aun'xm#jmw.bnh|*quWyd~Ril_`qqabY4:<1^<"i}f/pe+be&jf`t"y}_qlwvZadWhyyijQ;249V4*aun'xm#jmw.bnh|*quWyd~Ril_`qqabY2:<1^<"i}f/pe+be&jf`t"y}_qlwvZadWhyyijQ9249V4*aun'xm#jmw.bnh|*quWyd~Ril_`qqabY0:<1^<"i}f/pe+be&jf`t"y}_qlwvZadWhyyijQ7249V4*aun'xm#jmw.bnh|*quWyd~Ril_`qqabY>:01^<"i}f/pe+be&jf`t"y}_qlwvZadWhyyijQk1=3=6<=R8&myj#|i/fa{*fjlp&}yS}`{r^e`[duumnUo=1<1289V4*aun'xm#jmw.bnh|*quWyd~Ril_`qqabYc9595>45Z0.eqb+ta'nis"nbdx.uq[uhszVmhSl}}ef]g5929:01^<"i}f/pe+be&jf`t"y}_qlwvZadWhyyijQk1=7=6<=R8&myj#|i/fa{*fjlp&}yS}`{r^e`[duumnUo=181289V4*aun'xm#jmw.bnh|*quWyd~Ril_`qqabYc95=5>45Z0.eqb+ta'nis"nbdx.uq[uhszVmhSl}}ef]g59>9:01^<"i}f/pe+be&jf`t"y}_qlwvZadWhyyijQk1=;=6==R8&myj#|i/fa{*fjlp&}yS}`{r^e`[duumnUo=R?=8:W3+bta&{l$knv!cmi{+rtXxg~ySjmParpfcZb6W;837X> gsd-vc)`kq$h`fv ws]sjqtXojUjkh_e3\77><]9%l~k }f.e`|+ekcq%|~R~ats]dgZgtzlmTh55Z0.eqb+ta'nis"nbdx.uq[uhszVmhSl}}ef]g5Z?5=2_;#j|i.sd,cf~)keas#z|Ppovq[beXpfx;<=>=5:W3+bta&{l$knv!cmi{+rtXxg~ySjmPxnp34575=2_;#j|i.sd,cf~)keas#z|Ppovq[beXpfx;<=<=5:W3+bta&{l$knv!cmi{+rtXxg~ySjmPxnp34555=2_;#j|i.sd,cf~)keas#z|Ppovq[beXpfx;<=:=5:W3+bta&{l$knv!cmi{+rtXxg~ySjmPxnp34535=2_;#j|i.sd,cf~)keas#z|Ppovq[beXpfx;<=8=5:W3+bta&{l$knv!cmi{+rtXxg~ySjmPxnp34515=2_;#j|i.sd,cf~)keas#z|Ppovq[beXpfx;<=6<0:W3+bta&{l$ka>!re-dv4(un~l#@czx^PBIZTCWLDTJZH[200e?P6(o{l%~k!hl1,q`*au9'xm{kz Mlw{[WGJW[OLCXZPEO326a=R8&myj#|i/fn3*wb(o{;%~kyit.avvwYao~Tyo{e=2=6a=R8&myj#|i/fn3*wb(o{;%~kyit.avvwYao~Tyo{e=3=6f=R8&myj#|i/fn3*wb(o{;%~kyit.avvwYao~Tyo{e^21g>S7'nxm"h gm2-va)`z8$yjzh{/bwqvZ`pn}Uxxlzj_016?P6(o{l%~k!hl1,q`*au9'xm{kz ctpq[cqa|VymykPmtz3457;879=7X> gsd-vc)`d9$yh"i}1/pescr(k|xySkyit^qweqcXe|r;<=?30?301>S7'nxm"h gm2-va)`z8$yjzh{/bwqvZ`pn}Uxxlzj_lw{45664848:6[?/fpe*w`(oe:%~i!hr0,qbr`s'jy~Rhxfu]ppdrbWds<=>><0<26==R8&myj#|i/fn3*wb(o{;%~kyit.gntqXn~lSkl=7:W3+bta&{l$ka>!re-dv4(un~l#hctx]escrXa;l0Y=!hrg,qb*ak8'xo#j|>.sdtbq)bey~rSkyit^k\ip~789:8<6[?/fpe*w`(oe:%~i!hr0,qbr`s'lg{xtQiwgv\mZkrp9:;<<<6;T2,cw`)zo%l`= }d.eqev(u{}y$o=!laspzj`r;87827X> gsd-vc)`d9$yh"i}ar,qwqu(k9%hm|vndv?5;4>3\:$kh!rg-dh5(ul&mym~ }suq,g5)di{xrbhz32?0:?P6(o{l%~k!hl1,q`*auiz$yy} c1-`ewt~fl~7?32g9V4*aun'xm#jb?.sf,cwgt&{y"m?/fov|+ajS8W%k`}!mr0e?P6(o{l%~k!hl1,q`*auiz$yy} c1-dip~)odQ9Q#ibs/op6c=R8&myj#|i/fn3*wb(o{kx"}{s.a3+bkrp'mfW>S!glq-iv4a3\:$kh!rg-dh5(ul&mym~ }suq,g5)`e|r%k`U;]/enw+kt::1^<"i}f/pe+bj7&{n$ko|.sqww*e7';7<3<<;T2,cw`)zo%l`= }d.eqev(u{}y$o=!y1=3=66=R8&myj#|i/fn3*wb(o{kx"}{s.a3+s7;:7887X> gsd-vc)`d9$yh"i}ar,qwqu(k9%}=1=1229V4*aun'xm#jb?.sf,cwgt&{y"m?/w3?0;4e3\:$kh!rg-dh5(ul&mym~ }suq,g5)q9V:Tmcj?01226g=R8&myj#|i/fn3*wb(o{kx"}{s.a3+s7X9Vkeh=>?000a?P6(o{l%~k!hl1,q`*auiz$yy} c1-u5Z4Xign;<=>>2c9V4*aun'xm#jb?.sf,cwgt&{y"m?/w3\7Zgil9:;<<45Z0.eqb+ta'nf;"j gscp*wus{&i:#no}rxlfp969:01^<"i}f/pe+bj7&{n$ko|.sqww*e6'jky~t`jt=3=6<=R8&myj#|i/fn3*wb(o{kx"}{s.a2+fguzpdnx1<1289V4*aun'xm#jb?.sf,cwgt&{y"m>/bcqv|hb|595>k5Z0.eqb+ta'nf;"j gscp*wus{&i:#jczx/en_5[)od;%a</fov|+ajS;W%k`}!mr0e?P6(o{l%~k!hl1,q`*auiz$yy} c0-dip~)odQ8Q#ibs/op6c=R8&myj#|i/fn3*wb(o{kx"}{s.a2+bkrp'mfW9S!glq-iv443\:$kh!rg-dh5(ul&mym~ }suq,g4)q95:5>>5Z0.eqb+ta'nf;"j gscp*wus{&i:#{?31?00?P6(o{l%~k!hl1,q`*auiz$yy} c0-u5949::1^<"i}f/pe+bj7&{n$ko|.sqww*e6';7?3<<;T2,cw`)zo%l`= }d.eqev(u{}y$o?000a?P6(o{l%~k!hl1,q`*auiz$yy} c0-u5Z7Xign;<=>>2c9V4*aun'xm#jb?.sf,cwgt&{y"m>/w3\6Zgil9:;<<o5Z0.eqb+ta'nf;"j gscp*wus{&i:#{?P4^llp567888;7X> gsd-vc)`d9$yh"i}ar,qwqu(kfg{4U1-dvc(un&mg<#|k/fpbw+tt|z%hc`~>289V4*aun'xm#jb?.sf,cwgt&{y"|nm^gntqXnkUb?=5Z0.eqb+ta'nf;"j gscp*wus{&xjaRkbpu{\bgYnWfx;<=><1:W3+bta&{l$ka>!re-dvdu)zz~x#ob_dosp|YajVcTc>?01317>S7'nxm"h gm2-va)uxg~y#@m`uov\gjsi|;>0Y=!hrg,qb*ak8'xo#~ats-Ngjsi|Vidycz>259V4*aun'xm#jb?.sf,vuhsz&Ghcx`{_bmvjq45<2_;#j|i.sd,ci6)zm%y|cz}/LalqkrXkfex><;;T2,cw`)zo%l`= }d.psjqt(Eje~byQlotlw072<]9%l~k }f.eo4+tc'{zex!BcnwmpZeh}g~>>95Z0.eqb+ta'nf;"j rqlwv*Kdg|dSnaznu410>S7'nxm"h gm2-va)uxg~y#@m`uov\gjsi|>8?7X> gsd-vc)`d9$yh"|nup,Ifirf}Uhcx`{83;8Q5)`zo$yj"ic0/pg+wvi|{%Fob{at^alqkrXkp6;2?m4U1-dvc(un&mg<#|k/srmpw)JkfexRm`uov\g|:76Vx>45Z0.eqb+ta'nf;"j rqlwv*Kdg|dSnaznu]`}979:j1^<"i}f/pe+bj7&{n$~}`{r.O`kphsWje~byQly=3=[wr512_;#j|i.sd,ci6)zm%y|cz}/LalqkrXkfexRmv<3<1g>S7'nxm"h gm2-va)uxg~y#@m`uov\gjsi|Vir0?0Pru0:?P6(o{l%~k!hl1,q`*twf}x$Anaznu]`kphsWjs7?37:Zts:01^<"i}f/pe+bj7&{n$~}`{r.O`kphsWje~byQly=7=6f=R8&myj#|i/fn3*wb(zyd~"Clotlw[firf}Uhu1;1_sv1=>S7'nxm"h gm2-va)uxg~y#@m`uov\gjsi|Vir0;0=c:W3+bta&{l$ka>!re-qtkru'DidyczPcnwmpZe~4?4T~y<6;T2,cw`)zo%l`= }d.psjqt(Eje~byQlotlw[f;?78h7X> gsd-vc)`d9$yh"|nup,Ifirf}Uhcx`{_b{?3;Yu|;k0Y=!hrg,qb*ak8'xo#~ats-Ngjsi|VidyczPxnp?4;4f3\:$kh!rg-dh5(ul&x{by| MbmvjqYdg|dSua}<0<1e>S7'nxm"h gm2-va)uxg~y#@m`uov\gjsi|Vrd~1<12`9V4*aun'xm#jb?.sf,vuhsz&Ghcx`{_bmvjqYg{682?o4U1-dvc(un&mg<#|k/srmpw)JkfexRm`uov\|jt;<78j7X> gsd-vc)`d9$yh"|nup,Ifirf}Uhcx`{_ymq8085i2_;#j|i.sd,ci6)zm%y|cz}/LalqkrXkfexRv`r=4=6d=R8&myj#|i/fn3*wb(zyd~"Clotlw[firf}Usc28>3c8Q5)`zo$yj"ic0/pg+wvi|{%Fob{at^alqkrXpfx74311g9V4*aun'xm#jb?.sf,vuhsz&idycz31?3e?P6(o{l%~k!hl1,q`*twf}x$ob{at=0=5c=R8&myj#|i/fn3*wb(zyd~"m`uov?7;7a3\:$kh!rg-dh5(ul&x{by| cnwmp9299o1^<"i}f/pe+bj7&{n$~}`{r.alqkr;=7;m7X> gsd-vc)`d9$yh"|nup,gjsi|5<5=k5Z0.eqb+ta'nf;"j rqlwv*eh}g~7;3?i;T2,cw`)zo%l`= }d.psjqt(kfex1611d9V4*aun'xm#jb?.sf,vuhsz&idyczP00g8Q5)`zo$yj"ic0/pg+wvi|{%hcx`{_03f?P6(o{l%~k!hl1,q`*twf}x$ob{at^02a>S7'nxm"h gm2-va)uxg~y#naznu]05`=R8&myj#|i/fn3*wb(zyd~"m`uov\04c<]9%l~k }f.eo4+tc'{zex!lotlw[07b3\:$kh!rg-dh5(ul&x{by| cnwmpZ06m2_;#j|i.sd,ci6)zm%y|cz}/bmvjqY09l1^<"i}f/pe+bj7&{n$~}`{r.alqkrX0;80Y=!hrg,qb*ak8'xo#~ats-`kphsWm;7<3<=;T2,cw`)zo%l`= }d.psjqt(kfexRj><0<16>S7'nxm"h gm2-va)uxg~y#naznu]g5949:;1^<"i}f/pe+bj7&{n$~}`{r.alqkrXl8682?<4U1-dvc(un&mg<#|k/srmpw)dg|dSi?34?01?P6(o{l%~k!hl1,q`*twf}x$ob{at^f28085:2_;#j|i.sd,ci6)zm%y|cz}/bmvjqYc95<5>?5Z0.eqb+ta'nf;"j rqlwv*eh}g~Th<28>308Q5)`zo$yj"ic0/pg+wvi|{%hcx`{_e3?<;463\:$kh!rg-dh5(ul&x{by| cnwmpZb6W98:7X> gsd-vc)`d9$yh"|nup,gjsi|Vn:S<<>;T2,cw`)zo%l`= }d.psjqt(kfexRj>_302?P6(o{l%~k!hl1,q`*twf}x$ob{at^f2[6463\:$kh!rg-dh5(ul&x{by| cnwmpZb6W=8:7X> gsd-vc)`d9$yh"|nup,gjsi|Vn:S8<>;T2,cw`)zo%l`= }d.psjqt(kfexRj>_702?P6(o{l%~k!hl1,q`*twf}x$ob{at^f2[2463\:$kh!rg-dh5(ul&x{by| cnwmpZb6W18?7X> gsd-vc)`d9$yh"|nup,gjsi|Vddx=>?12d8Q5)`zo$yj"ic0/uq+bqf{'m{j#y}pg-NeabXl`lmS}`{r^rb`Zgcl9:;S7'nxm"h gm2-sw)`hy%k}h!wsre+HgclVnbjkQnup\tdbXimn;<=>Pcx>2:6`<]9%l~k }f.eo4+qu'n}j#if/uqtc)JimnThdhi_qlwvZvflVkoh=>?0^az8784n2_;#j|i.sd,ci6){%l{l}!gqd-swva'DkohRjffg]sjqtXxhnTmij?012\g|:46:l0Y=!hrg,qb*ak8'}y#jyns/esb+quxo%FmijPdhde[uhszVzjhRokd1234Ze~4=48j6[?/fpe*w`(oe:%{!hw`q-cu`){zm#@okd^fjbcYwf}xT|ljPaef3456Xkp6>2>h4U1-dvc(un&mg<#y}/fubw+awn'}y|k!Baef\`l`aWyd~R~nd^cg`5678Vir0;0!ws-dsdu)oyl%{~i/Lcg`ZbnnoU{by|Pp`f\eab789:Tot28>2d8Q5)`zo$yj"ic0/uq+bqf{'m{j#y}pg-NeabXl`lmS}`{r^rb`Zgcl9:;S7'nxm"h gm2-sw)`hy%k}h!wsre+HgclVnbjkQnup\tdbXimn;<=>Pcx>::17<]9%l~k }f.eo4+qu'n}j#if/uqtc)JimnThdhi_qlwvZvflVkoh=>?0^nvp9776=:0Y=!hrg,qb*ak8'}y#jyns/esb+quxo%FmijPdhde[uhszVzjhRokd1234Zjr|5;58;5Z0.eqb+ta'nf;"z| gvcp*bva&~x{j"Cnde]gmc`Xxg~yS}ok_`fg4567We0<0PIOT\416<]9%l~k }f.eo4+qu'n}j#if/uqtc)JimnThdhi_qlwvZvflVkoh=>?0^nvp949<91^<"i}f/pe+bj7&~x$kzo|.fre*rtwn&GjhiQkigd\tkruWykoSljk0123[iss4:4?<6[?/fpe*w`(oe:%{!hw`q-cu`){zm#@okd^fjbcYwf}xT|ljPaef3456Xd|~783:?;T2,cw`)zo%l`= xr.etev(`xo$|~}h M`fg[aoanVzexQae]b`a6789Ugyy2:>528Q5)`zo$yj"ic0/uq+bqf{'m{j#y}pg-NeabXl`lmS}`{r^rb`Zgcl9:;?_mww828382_;#j|i.sd,ci6){%l{l}!gqd-swva'DkohRjffg]sjqtXxhnTmij?012\hpr;07>;7X> gsd-vc)`d9$|~"ixar,dtc(pzyl$Aljk_ekebZvi|{U{miQnde2345Yk}}6229?4U1-dvc(un&mg<#y}/fubw+awn'}y|k!Baef\`l`aWyd~R~nd^cg`5678Vrd~1??>528Q5)`zo$yj"ic0/uq+bqf{'m{j#y}pg-NeabXl`lmS}`{r^rb`Zgcl9:;?_ymq878382_;#j|i.sd,ci6){%l{l}!gqd-swva'DkohRjffg]sjqtXxhnTmij?012\|jt;;7>;7X> gsd-vc)`d9$|~"ixar,dtc(pzyl$Aljk_ekebZvi|{U{miQnde2345Yg{6?29>4U1-dvc(un&mg<#y}/fubw+awn'}y|k!Baef\`l`aWyd~R~nd^cg`5678Vrd~1;1419V4*aun'xm#jb?.vp,crgt&nzm"z|f.Ob`aYcaolT|cz}_qcg[dbc89:;Sua}<7<74>S7'nxm"h gm2-sw)`hy%k}h!wsre+HgclVnbjkQnup\tdbXimn;<=>Pxnp?3;273\:$kh!rg-dh5(pz&m|m~ hpg,tvu`(EhnoSigif^rmpwYwimUjhi>?01]{kw:?6=:0Y=!hrg,qb*ak8'}y#jyns/esb+quxo%FmijPdhde[uhszVzjhRokd1234Z~hz535?=5Z0.eqb+ta'nf;"z| gvcp*bva&~x{j"jffg]sjqtXxhn7==0=f:W3+bta&{l$ka>!ws-dsdu)oyl%{~i/ekebZvi|{U{mi2>>3d8Q5)`zo$yj"ic0/uq+bqf{'m{j#y}pg-gmc`Xxg~yS}ok<3<1b>S7'nxm"h gm2-sw)`hy%k}h!wsre+aoanVzexQae>0:7`<]9%l~k }f.eo4+qu'n}j#if/uqtc)caolT|cz}_qcg8185n2_;#j|i.sd,ci6){%l{l}!gqd-swva'mcmjR~ats]sea:26;l0Y=!hrg,qb*ak8'}y#jyns/esb+quxo%oekhPpovq[ugc4?49j6[?/fpe*w`(oe:%{!hw`q-cu`){zm#igif^rmpwYwim6<2?h4U1-dvc(un&mg<#y}/fubw+awn'}y|k!kigd\tkruWyko050=f:W3+bta&{l$ka>!ws-dsdu)oyl%{~i/ekebZvi|{U{mi26>3g8Q5)`zo$yj"ic0/uq+bqf{'m{j#y}pg-gmc`Xxg~yS}ok_00e?P6(o{l%~k!hl1,tv*apiz$l|k xrqd,`l`aWyd~R~nd^336`=R8&myj#|i/fn3*rt(o~kx"j~i.vpsb*bnnoU{by|Pp`f\67c<]9%l~k }f.eo4+qu'n}j#if/uqtc)caolT|cz}_qcg[64b3\:$kh!rg-dh5(pz&m|m~ hpg,tvu`(l`lmS}`{r^rb`Z25m2_;#j|i.sd,ci6){%l{l}!gqd-swva'mcmjR~ats]seaY2:l1^<"i}f/pe+bj7&~x$kzo|.fre*rtwn&nbjkQnup\tdbX>;o0Y=!hrg,qb*ak8'}y#jyns/esb+quxo%oekhPpovq[ugcW>8n7X> gsd-vc)`d9$|~"ixar,dtc(pzyl$hdhi_qlwvZvflV29i6[?/fpe*w`(oe:%{!hw`q-cu`){zm#igif^rmpwYwimU2?55Z0.eqb+ta'nf;"z| gvcp*bva&~x{j"jffg]sjqtXxhnTmij?012?5584?2_;#j|i.sd,ci6){%l{l}!gqd-swva'mcmjR~ats]seaYflm:;<=2>>258Q5)`zo$yj"ic0/uq+bqf{'m{j#y}pg-gmc`Xxg~yS}ok_`fg45674;48;6[?/fpe*w`(oe:%{!hw`q-cu`){zm#igif^rmpwYwimUjhi>?01>0:61<]9%l~k }f.eo4+qu'n}j#if/uqtc)caolT|cz}_qcg[dbc89:;090<7:W3+bta&{l$ka>!ws-dsdu)oyl%{~i/ekebZvi|{U{miQnde2345:26:=0Y=!hrg,qb*ak8'}y#jyns/esb+quxo%oekhPpovq[ugcWhno<=>?<7<03>S7'nxm"h gm2-sw)`hy%k}h!wsre+aoanVzexQae]b`a67896<2>94U1-dvc(un&mg<#y}/fubw+awn'}y|k!kigd\tkruWykoSljk01238=84?2_;#j|i.sd,ci6){%l{l}!gqd-swva'mcmjR~ats]seaYflm:;<=26>3c8Q5)`zo$yj"ic0/uq+bqf{'m{j#y}pg-svjaXn|fgSd==;T2,cw`)zo%l`= xr.etev(`xo$|~}h psmd[cskdVcTaxv?01100>S7'nxm"h gm2-sw)`hy%k}h!wsre+uthoVl~`aQf_lw{4564989?7X> gsd-vc)`d9$|~"ixar,dtc(pzyl$|ah_gwohZoXe|r;<==>92:8Q5)`zo$yj"ic0/uq+bqf{'m{j#y}pg-svjaXn|fgSdQbuy23467>WZ];??5Z0.eqb+ta'nf;"z| gvcp*bva&~x{j"~}of]eqijXaVddx=>?13;8Q5)`zo$yj"ic0/uq+bqf{'}xx~!l1.abvwim}6;2?74U1-dvc(un&mg<#y}/fubw+qt|z%h="mnrs{maq:66;30Y=!hrg,qb*ak8'}y#jyns/uppv)d9&ij~waeu>1:7?<]9%l~k }f.eo4+qu'n}j#y|tr-`5*efz{seiy2<>3d8Q5)`zo$yj"ic0/uq+bqf{'}xx~!l1.enq}(`eR:V"jc>.l31b>S7'nxm"h gm2-sw)`hy%{~z|/b3,chs&ngP=P hmr,nw7`<]9%l~k }f.eo4+qu'n}j#y|tr-`5*aj}q$laV318Q5)`zo$yj"ic0/uq+bqf{'}xx~!l1.t28485;2_;#j|i.sd,ci6){%l{l}!wrvp+f7(~8692?=4U1-dvc(un&mg<#y}/fubw+qt|z%h="x><2<17>S7'nxm"h gm2-sw)`hy%{~z|/b3,r4:36;h0Y=!hrg,qb*ak8'}y#jyns/uppv)d9&|:S=Qnne234575j2_;#j|i.sd,ci6){%l{l}!wrvp+f7(~8U:Sl`k012357d<]9%l~k }f.eo4+qu'n}j#y|tr-`5*p6W;Ujbi>?0131f>S7'nxm"h gm2-sw)`hy%{~z|/b3,r4Y4Whdo<=>?13`8Q5)`zo$yj"ic0/uq+bqf{'}xx~!l1.t2[1Yffm:;<=?=9:W3+bta&{l$ka>!ws-dsdu)z~x#n< c`pq}kcs494956[?/fpe*w`(oe:%{!hw`q-svrt'j8$ol|}yogw848512_;#j|i.sd,ci6){%l{l}!wrvp+f4(khxyuck{<3<1=>S7'nxm"h gm2-sw)`hy%{~z|/b0,gdtuqgo0>0=f:W3+bta&{l$ka>!ws-dsdu)z~x#n< glw{*bk\8T$la< b13d8Q5)`zo$yj"ic0/uq+bqf{'}xx~!l2.enq}(`eR;V"jc|.lq1b>S7'nxm"h gm2-sw)`hy%{~z|/b0,chs&ngP>P hmr,nw7`<]9%l~k }f.eo4+qu'n}j#y|tr-`6*aj}q$laV=R.fop*hu5n2_;#j|i.sd,ci6){%l{l}!wrvp+f4(ods"jcT4\,div(j{;90Y=!hrg,qb*ak8'}y#jyns/uppv)d:&|:0=0=3:W3+bta&{l$ka>!ws-dsdu)z~x#n< v0>2:75<]9%l~k }f.eo4+qu'n}j#y|tr-`6*p64;49?6[?/fpe*w`(oe:%{!hw`q-svrt'j8$z<2<>318Q5)`zo$yj"ic0/uq+bqf{'}xx~!l2.t28185j2_;#j|i.sd,ci6){%l{l}!wrvp+f4(~8U;Sl`k012357d<]9%l~k }f.eo4+qu'n}j#y|tr-`6*p6W8Ujbi>?0131f>S7'nxm"h gm2-sw)`hy%{~z|/b0,r4Y5Whdo<=>?13`8Q5)`zo$yj"ic0/uq+bqf{'}xx~!l2.t2[6Yffm:;<=?=b:W3+bta&{l$ka>!ws-dsdu)z~x#n< v0]7[dhc89:;=?>4U1-dvc(un&mg<#y}/fubw+qt|z%hc`~>219V4*aun'xm#jb?.vp,crgt&~y"m`mq014>S7'nxm"h gm2-sw)`hy%{~z|/bmnt64c3\:$kh!rg-dh5(pz&m|m~ xsuq,cd`)k:%hm|vndv?4;4c3\:$kh!rg-dh5(pz&m|m~ xsuq,cd`)k:%hm|vndv?5;4c3\:$kh!rg-dh5(pz&m|m~ xsuq,cd`)k:%hm|vndv?6;4c3\:$kh!rg-dh5(pz&m|m~ xsuq,cd`)k:%hm|vndv?7;543\:$kh!rg-dh5(pz&m|m~ xsuq,cd`)k:%laxv!glY3Y+aj9'g:?>5Z0.eqb+ta'nf;"z| gvcp*rus{&mjj#m1^<"i}f/pe+bj7&~x$kzo|.vqww*afn'i8#{?32?04?P6(o{l%~k!hl1,tv*apiz$|y} g`d-g6)q9595>:5Z0.eqb+ta'nf;"z| gvcp*rus{&mjj#mPaof34566:o1^<"i}f/pe+bj7&~x$kzo|.vqww*afn'i8#{?P1^cm`567888m7X> gsd-vc)`d9$|~"ixar,twqu(ohl%o>!y1^0\ekb789::>k5Z0.eqb+ta'nf;"z| gvcp*rus{&mjj#m>2b9V4*aun'xm#jb?.vp,crgt&~y"|nm^coijusWog`Rg<4:W3+bta&{l$ka>!ws-dsdu)z~x#ob_`nnkvrXn|fgSdQbuy2345523\:$kh!rg-dh5(pz&m|m~ xsuq,vdkXiegdyQiumn\mZkrp9:;<<=m;T2,cw`)zo%l`= xr.etev(p{}y$~lcPamolwqYa}efTeR``t12354YNF_U;>55Z0.eqb+ta'nf;"z| gvcp*rus{&xjaRhzlm]efZo5=2_;#j|i.sd,ci6){%l{l}!wrvp+wgjWog`Rg=d:W3+bta&{l$ka>!ws-dsdu)z~x#ob_gwohZoXe|r;<=>=e:W3+bta&{l$ka>!ws-dsdu)z~x#ob_gwohZoXe|r;<=>>1e9V4*aun'xm#jb?.vp,vdkX{UnbRg>1g9V4*aun'xm#jb?.vp,vdkX{UnbRg>_000?P6(o{l%~k!hl1,tv*qwf}x$Anaznu]`kphs:=1^<"i}f/pe+bj7&~x${}`{r.O`kphsWje~by?=4:W3+bta&{l$ka>!ws-ttkru'DidyczPcnwmp7433\:$kh!rg-dh5(pz&}{by| MbmvjqYdg|d??:4U1-dvc(un&mg<#y}/vrmpw)JkfexRm`uov761=R8&myj#|i/fn3*rt(yd~"Clotlw[firf}?986[?/fpe*w`(oe:%{!xpovq+Heh}g~Tob{at707?P6(o{l%~k!hl1,tv*qwf}x$Anaznu]`kphs?;>0Y=!hrg,qb*ak8'}y#z~ats-Ngjsi|Vidycz7259V4*aun'xm#jb?.vp,suhsz&Ghcx`{_bmvjq?512_;#j|i.sd,ci6){%||cz}/LalqkrXkfexRmv<1<1g>S7'nxm"h gm2-sw)pxg~y#@m`uov\gjsi|Vir0=0Pru0:?P6(o{l%~k!hl1,tv*qwf}x$Anaznu]`kphsWjs7=31:Zts:01^<"i}f/pe+bj7&~x${}`{r.O`kphsWje~byQly=1=6f=R8&myj#|i/fn3*rt(yd~"Clotlw[firf}Uhu1=1_sv1=>S7'nxm"h gm2-sw)pxg~y#@m`uov\gjsi|Vir090=c:W3+bta&{l$ka>!ws-ttkru'DidyczPcnwmpZe~4=4T~y<6;T2,cw`)zo%l`= xr.usjqt(Eje~byQlotlw[f;=78h7X> gsd-vc)`d9$|~"ynup,Ifirf}Uhcx`{_b{?1;Yu|;30Y=!hrg,qb*ak8'}y#z~ats-Ngjsi|VidyczPcx>5:7e<]9%l~k }f.eo4+qu'~zex!BcnwmpZeh}g~Tot29>^pw6<=R8&myj#|i/fn3*rt(yd~"Clotlw[firf}Uhu1912b9V4*aun'xm#jb?.vp,suhsz&Ghcx`{_bmvjqYdq5=5Sz=9:W3+bta&{l$ka>!ws-ttkru'DidyczPcnwmpZe~4149o6[?/fpe*w`(oe:%{!xpovq+Heh}g~Tob{at^az8=8Xz}8j7X> gsd-vc)`d9$|~"ynup,Ifirf}Uhcx`{_ymq8585i2_;#j|i.sd,ci6){%||cz}/LalqkrXkfexRv`r=3=6d=R8&myj#|i/fn3*rt(yd~"Clotlw[firf}Usc2=>3c8Q5)`zo$yj"ic0/uq+rvi|{%Fob{at^alqkrXpfx7?35:7g<]9%l~k }f.eo4+qu'~zex!BcnwmpZeh}g~Ttb|37?0b?P6(o{l%~k!hl1,tv*qwf}x$Anaznu]`kphsWqey050=a:W3+bta&{l$ka>!ws-ttkru'DidyczPcnwmpZ~hz535>i5Z0.eqb+ta'nf;"z| wqlwv*Kdg|dSnaznu]{kw:>6Vx=k5Z0.eqb+ta'nf;"z| wqlwv*eh}g~7<3?i;T2,cw`)zo%l`= xr.usjqt(kfex1?11g9V4*aun'xm#jb?.vp,suhsz&idycz32?3e?P6(o{l%~k!hl1,tv*qwf}x$ob{at=1=5c=R8&myj#|i/fn3*rt(yd~"m`uov?0;7a3\:$kh!rg-dh5(pz&}{by| cnwmp9399o1^<"i}f/pe+bj7&~x${}`{r.alqkr;>7;m7X> gsd-vc)`d9$|~"ynup,gjsi|5=5=k5Z0.eqb+ta'nf;"z| wqlwv*eh}g~743?i;T2,cw`)zo%l`= xr.usjqt(kfex1711d9V4*aun'xm#jb?.vp,suhsz&idyczP00g8Q5)`zo$yj"ic0/uq+rvi|{%hcx`{_03f?P6(o{l%~k!hl1,tv*qwf}x$ob{at^02a>S7'nxm"h gm2-sw)pxg~y#naznu]05`=R8&myj#|i/fn3*rt(yd~"m`uov\04c<]9%l~k }f.eo4+qu'~zex!lotlw[07b3\:$kh!rg-dh5(pz&}{by| cnwmpZ06m2_;#j|i.sd,ci6){%||cz}/bmvjqY09l1^<"i}f/pe+bj7&~x${}`{r.alqkrX08o0Y=!hrg,qb*ak8'}y#z~ats-`kphsW0897X> gsd-vc)`d9$|~"ynup,gjsi|Vn:0=0=2:W3+bta&{l$ka>!ws-ttkru'je~byQk1=3=67=R8&myj#|i/fn3*rt(yd~"m`uov\`4:56;80Y=!hrg,qb*ak8'}y#z~ats-`kphsWm;7?3<=;T2,cw`)zo%l`= xr.usjqt(kfexRj><5<16>S7'nxm"h gm2-sw)pxg~y#naznu]g5939:;1^<"i}f/pe+bj7&~x${}`{r.alqkrXl86=2?<4U1-dvc(un&mg<#y}/vrmpw)dg|dSi?37?01?P6(o{l%~k!hl1,tv*qwf}x$ob{at^f28=85:2_;#j|i.sd,ci6){%||cz}/bmvjqYc9535><5Z0.eqb+ta'nf;"z| wqlwv*eh}g~Th<5Z0.eqb+ta'nf;"z| wqlwv*eh}g~Th<5Z0.eqb+ta'nf;"z| wqlwv*eh}g~ThS7'nxm"h gm2-sw)pxg~y#naznu]g6959:;1^<"i}f/pe+bj7&~x${}`{r.alqkrXl;6?2?<4U1-dvc(un&mg<#y}/vrmpw)dg|dSi<35?01?P6(o{l%~k!hl1,tv*qwf}x$ob{at^f18385:2_;#j|i.sd,ci6){%||cz}/bmvjqYc:5=5>?5Z0.eqb+ta'nf;"z| wqlwv*eh}g~Th?27>308Q5)`zo$yj"ic0/uq+rvi|{%hcx`{_e0?=;463\:$kh!rg-dh5(pz&}{by| cnwmpZb5W98:7X> gsd-vc)`d9$|~"ynup,gjsi|Vn9S<<>;T2,cw`)zo%l`= xr.usjqt(kfexRj=_302?P6(o{l%~k!hl1,tv*qwf}x$ob{at^f1[6463\:$kh!rg-dh5(pz&}{by| cnwmpZb5W=8:7X> gsd-vc)`d9$|~"ynup,gjsi|Vn9S8<>;T2,cw`)zo%l`= xr.usjqt(kfexRj=_702?P6(o{l%~k!hl1,tv*qwf}x$ob{at^f1[2463\:$kh!rg-dh5(pz&}{by| cnwmpZb5W18:7X> gsd-vc)`d9$|~"ynup,gjsi|Vn9S4<=;T2,cw`)zo%l`= xr.usjqt(kfexRj<<1<16>S7'nxm"h gm2-sw)pxg~y#naznu]g7979:;1^<"i}f/pe+bj7&~x${}`{r.alqkrXl:692?<4U1-dvc(un&mg<#y}/vrmpw)dg|dSi=33?01?P6(o{l%~k!hl1,tv*qwf}x$ob{at^f08185:2_;#j|i.sd,ci6){%||cz}/bmvjqYc;5?5>?5Z0.eqb+ta'nf;"z| wqlwv*eh}g~Th>29>308Q5)`zo$yj"ic0/uq+rvi|{%hcx`{_e1?3;453\:$kh!rg-dh5(pz&}{by| cnwmpZb44149>6[?/fpe*w`(oe:%{!xpovq+firf}Uo?171209V4*aun'xm#jb?.vp,suhsz&idyczPd2]364=R8&myj#|i/fn3*rt(yd~"m`uov\`6Y6:81^<"i}f/pe+bj7&~x${}`{r.alqkrXl:U9><5Z0.eqb+ta'nf;"z| wqlwv*eh}g~Th>Q<209V4*aun'xm#jb?.vp,suhsz&idyczPd2]764=R8&myj#|i/fn3*rt(yd~"m`uov\`6Y2:81^<"i}f/pe+bj7&~x${}`{r.alqkrXl:U=><5Z0.eqb+ta'nf;"z| wqlwv*eh}g~Th>Q8209V4*aun'xm#jb?.vp,suhsz&idyczPd2];64=R8&myj#|i/fn3*rt(yd~"m`uov\`6Y>:=1^<"i}f/pe+bj7&~x${}`{r.alqkrXff~;<=?>7:W3+bta&{l$ahc dnww[l:76820Y=!hrg,qb*kbe&ndyyQf<02=5==R8&myj#|i/lgn+air|Vc7=<0>8:W3+bta&{l$ahc dnww[l:6:7;37X> gsd-vc)jmd%ocxzPi=30:4><]9%l~k }f.ofi*bh}}Ub0<:1199V4*aun'xm#`kb/emvpZo;9<4:46[?/fpe*w`(elg$hb{{_h>22;7?3\:$kh!rg-nah)cg|~Te1?8>0:8Q5)`zo$yj"cjm.flqqYn4825=55Z0.eqb+ta'dof#iazt^k?5<86?2_;#j|i.sd,i`k(lfSd2>>0:8Q5)`zo$yj"cjm.flqqYn4;:5=55Z0.eqb+ta'dof#iazt^k?648602_;#j|i.sd,i`k(lfSd2=2?3;?P6(o{l%~k!bel-gkprXa5882<64U1-dvc(un&gna"j`uu]j8729911^<"i}f/pe+hcj'me~xRg324<2<>S7'nxm"h mdo,`jssW`69:3?7;T2,cw`)zo%fi`!kotv\m9406820Y=!hrg,qb*kbe&ndyyQf<3:=5==R8&myj#|i/lgn+air|Vc7>40>7:W3+bta&{l$ahc dnww[l:56820Y=!hrg,qb*kbe&ndyyQf<22=5==R8&myj#|i/lgn+air|Vc7?<0>8:W3+bta&{l$ahc dnww[l:4:7;37X> gsd-vc)jmd%ocxzPi=10:4><]9%l~k }f.ofi*bh}}Ub0>:1199V4*aun'xm#`kb/emvpZo;;<4:;6[?/fpe*w`(elg$hb{{_h>0:41<]9%l~k }f.ofi*bh}}Ub090>7:W3+bta&{l$ahc dnww[l:268=0Y=!hrg,qb*kbe&ndyyQf<7<23>S7'nxm"h mdo,`jssW`6<2<94U1-dvc(un&gna"j`uu]j8=86?2_;#j|i.sd,i`k(lfSd26>048Q5)`zo$yj"cjm.flqqYnW9;=7X> gsd-vc)jmd%ocxzPi^323>S7'nxm"h mdo,`jssW`U:<<94U1-dvc(un&gna"j`uu]j[476?2_;#j|i.sd,i`k(lfSdQ>2058Q5)`zo$yj"cjm.flqqYnW89:;6[?/fpe*w`(elg$hb{{_h]2041<]9%l~k }f.ofi*bh}}UbS<;>7:W3+bta&{l$ahc dnww[lY6>8=0Y=!hrg,qb*kbe&ndyyQf_0523>S7'nxm"h mdo,`jssW`U:4<94U1-dvc(un&gna"j`uu]j[4?6>2_;#j|i.sd,i`k(lfSdQ=169V4*aun'xm#`kb/emvpZoX:9;<7X> gsd-vc)jmd%ocxzPi^0252=R8&myj#|i/lgn+air|VcT>??8;T2,cw`)zo%fi`!kotv\mZ449>1^<"i}f/pe+hcj'me~xRgP2534?P6(o{l%~k!bel-gkprXaV8>=:5Z0.eqb+ta'dof#iazt^k\63703\:$kh!rg-nah)cg|~TeR<8169V4*aun'xm#`kb/emvpZoX:1;<7X> gsd-vc)jmd%ocxzPi^0:53=R8&myj#|i/lgn+air|VcT?<94U1-dvc(un&gna"j`uu]j[666?2_;#j|i.sd,i`k(lfSdQ<1058Q5)`zo$yj"cjm.flqqYnW:8:;6[?/fpe*w`(elg$hb{{_h]0741<]9%l~k }f.ofi*bh}}UbS>:>7:W3+bta&{l$ahc dnww[lY4=8<0Y=!hrg,qb*kbe&ndyyQf_535?P6(o{l%~k!bel-gkprXaV?::6[?/fpe*w`(elg$hb{{_h]553=R8&myj#|i/lgn+air|VcT;<84U1-dvc(un&gna"j`uu]j[=713\:$kh!rg-nah)cg|~TeR7>9:W3+bta&{l$ahc dnww[hcj494:m6[?/fpe*w`(elg$hb{{_lgn84699h1^<"i}f/pe+hcj'me~xRcjm=32:4g<]9%l~k }f.ofi*bh}}Ufi`2>2?3b?P6(o{l%~k!bel-gkprXelg7=>0>a:W3+bta&{l$ahc dnww[hcj48>5=l5Z0.eqb+ta'dof#iazt^ofi97268k0Y=!hrg,qb*kbe&ndyyQbel>22;7f3\:$kh!rg-nah)cg|~Tahc316<2e>S7'nxm"h mdo,`jssWdof0<611`9V4*aun'xm#`kb/emvpZkbe5;22<74U1-dvc(un&gna"j`uu]nah:668k0Y=!hrg,qb*kbe&ndyyQbel>14;7f3\:$kh!rg-nah)cg|~Tahc320<2e>S7'nxm"h mdo,`jssWdof0?<11`9V4*aun'xm#`kb/emvpZkbe5882 gsd-vc)jmd%ocxzPmdo?6086i2_;#j|i.sd,i`k(lfS`kb<34=5d=R8&myj#|i/lgn+air|Vgna1<8>0c8Q5)`zo$yj"cjm.flqqYjmd6943?n;T2,cw`)zo%fi`!kotv\i`k;:04:56[?/fpe*w`(elg$hb{{_lgn8786i2_;#j|i.sd,i`k(lfS`kb<22=5d=R8&myj#|i/lgn+air|Vgna1=>>0c8Q5)`zo$yj"cjm.flqqYjmd68>3?n;T2,cw`)zo%fi`!kotv\i`k;;:4:m6[?/fpe*w`(elg$hb{{_lgn86299h1^<"i}f/pe+hcj'me~xRcjm=16:4?<]9%l~k }f.ofi*bh}}Ufi`2<>0;8Q5)`zo$yj"cjm.flqqYjmd6?2<74U1-dvc(un&gna"j`uu]nah:26830Y=!hrg,qb*kbe&ndyyQbel>5:4?<]9%l~k }f.ofi*bh}}Ufi`28>0;8Q5)`zo$yj"cjm.flqqYjmd632<74U1-dvc(un&gna"j`uu]nah:>6>>0Y=!hrg,qb*kbe&mia#immf,dfhaf&gmnon mmf-ahnYjmdUlick}aumq+sgkam$hy| r`ookjv\8T$ym` }/r1\jjoia}$ym`!kpscn*av60q9="ob1c9V4*aun'xm#`kb/uos[wgjW{nTic?l;T2,cw`)zo%fi`!{mq]qehYulVoe=<94U1-dvc(un&xjaR|jgnww[`h6l2_;#j|i.sd,vvredb%yhR||t^cpv`a582_;#j|i.sd,vvredb%yhR||t^cpv`aXl88;7X> gsd-vc)u{}hgg"|k_sqw[duumnUo>d:W3+bta&{l$~~zmlj-q`Ztt|VxnkR>>d:W3+bta&{l$~~zmlj-q`Ztt|VxnkR?>d:W3+bta&{l$~~zmlj-q`Ztt|VxnkR<>d:W3+bta&{l$~~zmlj-tvZtt|Vkx~hi=0:W3+bta&{l$~~zmlj-tvZtt|Vkx~hiPd003?P6(o{l%~k!}su`oo*quW{ySl}}ef]g64e<]9%l~k }f.pppgjl'~xT~~zPcnoa5a=R8&myj#|i/sqwfim({UyyQlol`25`=R8&myj#|i/sqwfim({UyyQ}ef>3:4c<]9%l~k }f.pppgjl'~xT~~zPrde?5;7c3\:$kh!rg-qwqdkc&}yS}{_sgd[57c3\:$kh!rg-qwqdkc&}yS}{_sgd[4g<]ZOYSLBFARa8QVCUW_CXEOBJ3:T@G<=QAL]TXT^J3:UFE6=PMKi0[_G[E^OL@@YFk2]YEYKPMNFF[Gb<_[C_IRYFDUJ\Ea=PZ@^NSZGKTI]A5a=_AECET VKB!2-5%US]K*;"<.NSBKJ1>^HZJS=7U][LH@4?]USWNDO;6V\T^T@Gg=_WJEYIRGAFN48\adXAml0TifPPsknR`ttafd:<6Vkm^ObnjtQm{ybcc??;Yfn[Hoig{\n~~g`nb9bhhit|Vof|ywm;`nnkvrXn|fg:6lncjws`>dfkb{S`o}kdp0?fjll2njxlQlotlw,5/c3mkmRm`uov+5,bbf|hUhcx`{(5+g?agsiVidycz'5(f8`drfWje~by&9)e9geqgXkfex%9&d:fbpdYdg|d$5'k;ecweZeh}g~#5$h4d`vb[firf}626=08;e`jp`tu>2nbb%>&6:fjj-7.?2nbb%??)69gmk.69 =0hd`'13+4?aoi 89";6jfn)37-2=cag":9$94dhl+53/03mce$<9&6:fjj-4.>2nbb%=&6:fjj-2.>2nbb%;&6:fjj-0.>2nbb%9&6:fjj->.>2nbb%7&6:fjj969?2nbb1??>69gmk:697=0hd`313<4?aoi4895;6jfn=37:2=cag6:9394dhl?538>3mce0<950?58`lh;9>4=7iga<0<5?aoi4;4=7iga<2<5?aoi4=4=7iga<4<5?aoi4?4=7iga<6<5?aoi414=7iga<8<4?air|!:";6j`uu*2-==cg|~#=='7;emvp-76!11ocxz'13+;?air|!;8%55kotv+51/?3me~x%?:)99gkpr/9?#37iazt)34-==cg|~#=5'7;emvp-7>!>1ocxz'2(:8`jss ;:"46j`uu*15,>bh}}"99$64dnww,70.02ndyy&=7(:8`jss ;2"46j`uu*1=,1'7;emvp-57!11ocxz'30+;?air|!99%55kotv+76/?3me~x%=;)99gkpr/;<#<7iazt)6*3>bh}}">%:5kotv+2,1.?2ndyy&6)69gkpr;8720hb{{<02=<>bh}}6:=364dnww844902ndyy2>3?:8`jss48>546j`uu>21;>bh}}6:5394dnww848?3me~x199gkpr;:8437iazt=01:==cg|~7>>07;emvp943611ocxz324<;?air|58=255kotv?628?3me~x1<7>99gkpr;:04<7iazt=0=<>bh}}68<364dnww867902ndyy2<2?:8`jss4:9546j`uu>00;g;50?:8`jss4:?5;6j`uu>0:2=cg|~78394dnww80803me~x1817:flqq:06>1ocxz38?58`jss40437hjff3ld`0=bey~r>k5iigm\c`hbzh~d~Rx9_0.#\ljnfq*HC_K/Gdlfvdrhz);9"=?v<6^0`hnY60}e8:>o4fhdl[}jipV?:>u=9_3aooZ7?|f9= kgio^efj`tf|fxTz;Q>,OMMA)HHFL>;?6hffn]{hk~X=88s?;Q=cmi\5=rh;?&mekaPgdlfvdrhzV|=S<"tc^jbwZoi|Vigg0>#c^jbwZuu{}7; nQ}d^dqat;6$jUnbllce^pppZu~fj7: nQgar]q`Zbf|hUhcx`{=1.`[aoiW~coxe3>8-a\lduX{UomyoPcnwmp86+kVl~`aQil`ep[wusWkg1="l_hosh`kbf}keb`Ptxrf97*dW|ynShcmeeff`Ztbo4:'oRy}_gpfu87+kVxiRj`uu]qwq;6$jU~bik}fmmt[iip59&hSeo|_ntfvcjh4:'oR~}emmb`Zjf|ldhu0>#c^flqqYpam~c1>8#c^opcjhX~hf6=!mPre]gauro5<;9 nQjrsmq[lhmmj~bccQ{yqg>4)eX`hyTycjjrgnls86+kVbjRocmnqw[cskd4;'oRfns^ppp87+kVnjxlQlotlw[roc|a7:4)eXx{elSk{cl^vkv`uoWgolmykPv`n>5573$jU|~Rjjpuj>5543$jU{~biPelrw}ZrozlycSckhaug\rdj:=%iT|ah_dosp|Ys`{oxdRo|sdpw[sgk5=&hSeo|_wcoma;7$jU{~biPftno[qnumzbTm~}jru]uei;688?'obcoogmpZhfel7mekaPxml{[075p:nbd_0:wk60+kV|j`djPlnu>4)eXx{cfSkgio^vzt`;6cq;3 nQrne\bpjkW}s{i0?#c^ofijt~W}s{i0?#}248bl`hWqfetR;>2y15[7ekcV;3xb=9_gkekZabflxjxb|Pv7]2[}usW8>0jxbcd:kmn`eslkci|k;hliafrtj`~n~94iov\gim?3gmhnxgcd99lr`tadf}j7}|`g^gntq6<2zycjQjmqvz[qnumzb#<$?;;qplcZcjx}sTxe|jsi*2-42vugnUna}zv_ujqavn/< ;?7}|`g^gntqX|axne&:)068twi`Wlg{xtQ{hsgpl-0.9=1{~biPelrw}Zrozlyc$:'>4:rqkbYbey~rSyf}erj+<,713yxdkRkbpu{\pmtb{a636=0>b:rqkbYbey~rSyf}erj\evubz}";%vugnUna}zv_ujqavnXizyn~y&9)0`8twi`Wlg{xtQ{hsgplZgt{lx$:'>b:rqkbYbey~rSyf}erj\evubz}"3%vugnUna}zv_ujqavnXflmjxh&:)0`8twi`Wlg{xtQ{hsgplZhboh~n$;'>b:rqkbYbey~rSyf}erj\j`af|l"<%5rne\bpjkW}byi~f'1(30?uthoVl~`aQ{hsgpl-4.9:1{~biPftno[qnumzb#?$?<;qplcZ`rdeUdk|h)6*56=wzfmTjxbc_ujqavn/= ;87}|`g^dvhiYs`{oxd%8&129svjaXn|fgSyf}erj+3,743yxdkRhzlm]wlwct`!2"=>5rne\bpjkW}byi~f'9(36?uthoVl~`aQ{hsgpl9?=87;j7}|`g^dvhiYs`{oxdRo|sdpw,5/6i2zycjQiumn\pmtb{aUj~k}t)3*5d=wzfmTjxbc_ujqavnXizyn~y&=)0c8twi`Wog`Rzgrdqk[dutm{~#?$?n;qplcZ`rdeUdk|h^cpw`ts =#:m6~}of]eqijX|axneQnsrgqp-3.9h1{~biPftno[qnumzbTm~}jru*5-4ga:rqkbYa}efTxe|jsi]bwvcu|!3"=n5rne\bpjkW}byi~fParqfvq:>294:m6~}of]eqijX|axneQaefcwa-6.9h1{~biPftno[qnumzbTbhintd*2-4g'>a:rqkbYa}efTxe|jsi]mabgsm!>"=l5rne\bpjkW}byi~fPndebp`.2!8k0|ah_gwohZrozlycSckhaug+2,7f3yxdkRhzlm]wlwct`Vdnklzj(6+2e>vugnUmyabPtipfwmYimnki%6&1`9svjaXn|fgSyf}erj\j`af|l"2%4re]geqgXkfex%=&119q`Zbf|hUhcx`{(5+24>tcWmkmRm`uov+1,773{nThlzn_bmvjq.1!8:0~iQkauc\gjsi|!="==5}d^fbpdYdg|d$5'>0:pg[agsiVidycz30?31?wbXlh~jSnaznu>;>5823{nTic84re]qwq5uu{}837yc/^ad+coagVrgbuQ:13z02Z4ddbU:4ya<6/ldk1=sz|o27x`kesdokr3<~hfbh;5xr^c`o3=pzVigg<>4ws]geqgXkfex%>&119tvZbf|hUhcx`{(0+24>quWmkmRm`uov+6,773~xThlzn_bmvjq.4!8:0{Qkauc\gjsi|!>"==5xr^fbpdYdg|d$8'>0:uq[agsiVidycz'6(33?rtXlh~jSnaznu*4-46<{UomyoPcnwmp->.991|~Rjnt`]`kphs 0#:>6y}_ecweZeh}g~757>15:uq[`h13~xT~~zr@Ar``==GHq?=>7H54;3xW1c==991;7?<2c4g6?4f:k=pb96=:09m0=5=>2.?4=4;7`9~W1e==991;7?<2c4g6?4f:k=0_<5<6;;h=h?4=a3`;?V2d2<:n6=4>33`5`7<5i;h37i;?6;295?7|[=o19==57;306g0c:38j>o94vU3;e?6=93;1=n>tS5g9155=?3;8>o8k2;0b6g1<,==86<{#9>o1=55m51494?5a2:08jvF;709Y01<5s8=1==4r$0:e>0613->;>4?::m64d<722e><94?::k622<722c>9k4?::m7`2<72-;3<7:ia:l23c<732e?h;4?:%3;4?2ai2d:;k4>;:m7`0<72-;3<7:ia:l23c<532e?h94?:%3;4?2ai2d:;k4<;:m7`6<72-;3<7:ia:l23c<332e?h?4?:%3;4?2ai2d:;k4:;:m7`5<72-;3<7:ia:l23c<132e?ok4?:%3;4?2ai2d:;k48;:m7g`<72-;3<7:ia:l23c54gc8j41a28807b:l2;29 4>72=lj7c?8f;30?>i3k80;6)?70;6ee>h6?o0:865`4b294?"6090?jl5a16d950=8:9l0ge=83.:4=4;f`9m52`=9010c9jk:18'5=6=!7?83>mm6`>7g82g>=h8187bd=i9>l1=i54o5f:>5<#91:18ko4n05e>4c<3f>o47>5$0:3>1`f3g;54gc8j41a2;807b:ma;29 4>72=lj7c?8f;00?>o31l0;6)?70;6bb>h6?o0;76g;9e83>!7?83>jj6`>7g82?>o31j0;6)?70;6bb>h6?o0976g;9c83>!7?83>jj6`>7g80?>o31h0;6)?70;6bb>h6?o0?76g;9883>!7?83>jj6`>7g86?>o3110;6)?70;6bb>h6?o0=76g;9683>!7?83>jj6`>7g84?>o3i?0;6)?70;6bb>h6?o0376g;a483>!7?83>jj6`>7g8:?>o3i=0;6)?70;6bb>h6?o0j76g;a283>!7?83>jj6`>7g8a?>o3i;0;6)?70;6bb>h6?o0h76g;a083>!7?83>jj6`>7g8g?>o3i90;6)?70;6bb>h6?o0n76g;9g83>!7?83>jj6`>7g8e?>o31?0;6)?70;6bb>h6?o0:<65f48794?"6090?mk5a16d954=5<6290;wE:81:&2tH552?!7?n3n<7bj9:188yg24290j:7?74;3`4~N3?81Q894>6z0;>71=:00h644n:c823?772;k1h7m5d;34>7g=:10:<7l5a;;96<<5?3w/=5h551;8 11==9=0(9j551:8 41>28=h7d;=3;29 4>72<8?7c?8f;28?l35:3:1(<6?:407?k70n3;07d;=1;29 4>72<8?7c?8f;08?l3583:1(<6?:407?k70n3907d;>f;29 4>72<8?7c?8f;68?l36m3:1(<6?:407?k70n3?07d;>d;29 4>72<8?7c?8f;48?l36k3:1(<6?:407?k70n3=07d;>b;29 4>72<8?7c?8f;:8?l37k3:17d;:e;29?l3193:17b;95;29?l3613:1(<6?:43b?k70n3:07d;>8;29 4>72<;j7c?8f;38?l36?3:1(<6?:43b?k70n3807d;>6;29 4>72<;j7c?8f;18?l36=3:1(<6?:43b?k70n3>07d;>4;29 4>72<;j7c?8f;78?l36;3:1(<6?:43b?k70n3<07d;>2;29 4>72<;j7c?8f;58?l3693:1(<6?:43b?k70n3207d;:d;29?j37n3:17d;=d;29 4>72<8n7c?8f;28?l35k3:1(<6?:40f?k70n3;07d;=b;29 4>72<8n7c?8f;08?l35i3:1(<6?:40f?k70n3907d;=9;29 4>72<8n7c?8f;68?l3503:1(<6?:40f?k70n3?07d;=7;29 4>72<8n7c?8f;48?l35>3:1(<6?:40f?k70n3=07d;=5;29 4>72<8n7c?8f;:8?j2?=3:17b:62;29 4>72=387c?8f;28?j2>93:1(<6?:5;0?k70n3;07b:60;29 4>72=387c?8f;08?j2?n3:1(<6?:5;0?k70n3907b:7e;29 4>72=387c?8f;68?j2?l3:1(<6?:5;0?k70n3?07b:7c;29 4>72=387c?8f;48?j2?j3:1(<6?:5;0?k70n3=07b:7a;29 4>72=387c?8f;:8?j2?13:1(<6?:5;0?k70n3307b;=f;29?l30;3:17d;<9;29 4>72<9j7c?8f;28?l3403:1(<6?:41b?k70n3;07d;<7;29 4>72<9j7c?8f;08?l34>3:1(<6?:41b?k70n3907d;<5;29 4>72<9j7c?8f;68?l34<3:1(<6?:41b?k70n3?07d;<3;29 4>72<9j7c?8f;48?l34:3:1(<6?:41b?k70n3=07d;<1;29 4>72<9j7c?8f;:8?l3483:1(<6?:41b?k70n3307b;?a;29?j37<3:17d;97;29?l2??3:17d;;4;29 4>72<>>7c?8f;28?l33;3:1(<6?:466?k70n3;07d;;2;29 4>72<>>7c?8f;08?l3393:1(<6?:466?k70n3907d;;0;29 4>72<>>7c?8f;68?l34n3:1(<6?:466?k70n3?07d;72<>>7c?8f;48?l34l3:1(<6?:466?k70n3=07d;72<>>7c?8f;:8?l34j3:1(<6?:466?k70n3307d;;f;29 4>72727272723:1(<6?:473?k70n3307b:74;29?l37l3:17d:78;29?l30<3:17b;90;29?j31>3:17d;:f;29?j2c?3:1(<6?:5db?k70n3:07b:k6;29 4>72=lj7c?8f;38?j2c=3:1(<6?:5db?k70n3807b:k4;29 4>72=lj7c?8f;18?j2c;3:1(<6?:5db?k70n3>07b:k2;29 4>72=lj7c?8f;78?j2c83:1(<6?:5db?k70n3<07b:lf;29 4>72=lj7c?8f;58?j2dm3:1(<6?:5db?k70n3207b:ld;29 4>72=lj7c?8f;;8?j2dk3:1(<6?:5db?k70n3k07b:lb;29 4>72=lj7c?8f;`8?j2di3:1(<6?:5db?k70n3i07b:l9;29 4>72=lj7c?8f;f8?j2d03:1(<6?:5db?k70n3o07b:l7;29 4>72=lj7c?8f;d8?j2d=3:1(<6?:5db?k70n3;;76a;c583>!7?83>mm6`>7g825>=h8187bd=i9>l1=?54o5a1>5<#91:18ko4n05e>45<3f>h=7>5$0:3>1`f3g;54gc8j41a28=07b:md;29 4>72=lj7c?8f;3;?>i3jj0;6)?70;6ee>h6?o0:565`4ef94?"6090?jl5a16d95d=d:9l0a?=83.:4=4;f`9m52`=9l10c9j7:18'5=6=!7?83>mm6`>7g815>=h8187bd=i9>l1>?54o5`b>5<#91:18ko4n05e>75<3`>2i7>5$0:3>1ga3g;4;h6:`?6=,82;69oi;o34b?7<3`>2o7>5$0:3>1ga3g;2m7>5$0:3>1ga3g;247>5$0:3>1ga3g;j:7>5$0:3>1ga3g;j87>5$0:3>1ga3g;j>7>5$0:3>1ga3g;j<7>5$0:3>1ga3g;2:7>5$0:3>1ga3g;=83.:4=4:5b9m52`=:21d98950;&2<5<2=j1e=:h53:9l100=83.:4=4:5b9m52`=<21d98;50;&2<5<2=j1e=:h55:9l102=83.:4=4:5b9m52`=>21d98=50;&2<5<2=j1e=:h57:9l104=83.:4=4:5b9m52`=021d9:?50;&2<5<2?;1e=:h50:9l126=83.:4=4:739m52`=921d9;h50;&2<5<2?;1e=:h52:9l13c=83.:4=4:739m52`=;21d9;j50;&2<5<2?;1e=:h54:9l13e=83.:4=4:739m52`==21d9;l50;&2<5<2?;1e=:h56:9l13g=83.:4=4:739m52`=?21d9;750;&2<5<2?;1e=:h58:9l13>=83.:4=4:739m52`=121d9<>50;9j15d=831d84:50;9j107=831d9;:50;9a02b=83;1<7>t$0:e>a1<@==h7E:81:mg2?6=3th?;h4?:083>5}#91l18:<4H55`?M2092e:;i4?::a6d6=83>1<7>t$0:e>a4<@==h7E:81:&f1?0>o6080;66a>8383>>{e<a2jl0D99l;I645>N3:2.:??4:629'a0<63`>>6=44i5d94?=h9181<75rb54:>5<4290;w)?7f;ae?M20k2B?;<5G439'564==?90(h;51:k71?6=3`>m6=44o0:1>5<>h7>53;294~"60o0hj6F;7b9K027<@=80(<==:440?!c2281b884?::k7b?6=3f;3>7>5;|`722<72<0;6=u+19d9`6=O<>i0D99>;I61?!74:3?=?6g;5;29?l212900e9h50;9j5=7=831d=5<50;9~f10?29086=4?{%3;b?ea3A>o3=3:17d:i:188k4>52900qo::c;291?6=8r.:4k4k3:J73f=O<>;0D9<4$011>0043`>>6=44i5494?=n8083>>i60;0;66sm47494?2=83:p(<6i:e08L11d3A><=6*j5;48m13=831b8k4?::k2<4<722e:4?4?::a033=83>1<7>t$0:e>a4<@==h7E:81:&f1?0>o6080;66a>8383>>{e1<7:50;2x 4>a2m80D99l;I645>"b=3<0e9;50;9j0c<722c:4<4?::m2<7<722wi8;h50;694?6|,82m6i<4H55`?M2092.n9784i5794?=n8083>>i60;0;66sm47g94?2=83:p(<6i:e08L11d3A><=6*j5;48m13=831b8k4?::k2<4<722e:4?4?::a642=83>1<7>t$0:e>a6<@==h7E:81:&f1?7>o3n3:17b?72;29?xd59:0;694?:1y'5=`=l91C8:m4H552?!c2281b884?::k7f?6=3`>m6=44o0:1>5<7>54;294~"60o0o<6F;7b9K027<,l?1=6g;5;29?l2e2900e9h50;9l5=4=831vn??>:187>5<7s-;3j7j?;I64g>N3?81/i84>;h66>5<>i60;0;66sm20294?2=83:p(<6i:e28L11d3A><=6*j5;38m13=831b8o4?::k7b?6=3f;3>7>5;|`14c<72=0;6=u+19d9`5=O<>i0D99>;%g6>4=n<<0;66g;b;29?l2a2900c<6=:188yg47m3:187>50z&25;h6a>5<=m50;694?6|,82m6i>4H55`?M2092.n97?4i5794?=nb383>1<729q/=5h5d19K02e<@==:7)k::09j00<722c?n7>5;h6e>5<8g8g4>N3?j1C8:?4$d795>o3=3:17d:m:188m1`=831d=5<50;9~f4d7290?6=4?{%3;b?b73A>>6=44i5`94?=n8383>>{e9hl1<7:50;2x 4>a2m:0D99l;I645>"b=3;0e9;50;9j0g<722c?j7>5;n3;6?6=3th:mh4?:583>5}#91l1h=5G46a8L1163-o>6<5f4483>>o3j3:17d:i:188k4>52900qo?nd;290?6=8r.:4k4k0:J73f=O<>;0(h;51:k71?6=3`>i6=44i5d94?=h9181<75rb0c`>5<3290;w)?7f;f3?M20k2B?;<5+e482?l222900e9l50;9j0c<722e:4?4?::a5dd=83>1<7>t$0:e>a6<@==h7E:81:&f1?7>o3n3:17b?72;29?xd6ih0;694?:1y'5=`=l91C8:m4H552?!c2281b884?::k7f?6=3`>m6=44o0:1>5<54;294~"60o0o<6F;7b9K027<,l?1=6g;5;29?l2e2900e9h50;9l5=4=831vn?;i:187>5<7s-;3j7j?;I64g>N3?81/i84>;h66>5<>i60;0;66sm24g94?2=83:p(<6i:e28L11d3A><=6*j5;38m13=831b8o4?::k7b?6=3f;3>7>5;|`11a<72=0;6=u+19d9`5=O<>i0D99>;%g6>4=n<<0;66g;b;29?l2a2900c<6=:188yg42k3:187>50z&25;h6a>5<8o50;694?6|,82m6i>4H55`?M2092.n97?4i5794?=n1<729q/=5h5d19K02e<@==:7)k::09j00<722c?n7>5;h6e>5<8g8g4>N3?j1C8:?4$d795>o3=3:17d:m:188m1`=831d=5<50;9~f4`f290?6=4?{%3;b?b73A>>6=44i5`94?=n8383>>{e9o31<7:50;2x 4>a2m:0D99l;I645>"b=3;0e9;50;9j0g<722c?j7>5;n3;6?6=3th:j54?:583>5}#91l1h=5G46a8L1163-o>6<5f4483>>o3j3:17d:i:188k4>52900qo?i7;290?6=8r.:4k4k0:J73f=O<>;0(h;51:k71?6=3`>i6=44i5d94?=h9181<75rb0d5>5<3290;w)?7f;f3?M20k2B?;<5+e482?l222900e9l50;9j0c<722e:4?4?::a5c3=83>1<7>t$0:e>a6<@==h7E:81:&f1?7>o3n3:17b?72;29?xd6n=0;694?:1y'5=`=l91C8:m4H552?!c2281b884?::k7f?6=3`>m6=44o0:1>5<54;294~"60o0o<6F;7b9K027<,l?1=6g;5;29?l2e2900e9h50;9l5=4=831vn5<7s-;3j7j?;I64g>N3?81/i84>;h66>5<>i60;0;66sm25g94?2=83:p(<6i:e28L11d3A><=6F;2:&277<2>:1/i84>;h66>5<>i60;0;66sm25f94?2=83:p(<6i:e28L11d3A><=6F;2:&277<2>:1/i84>;h66>5<>i60;0;66sm25a94?2=83:p(<6i:e28L11d3A><=6F;2:&277<2>:1/i84>;h66>5<>i60;0;66sm25`94?2=83:p(<6i:e28L11d3A><=6F;2:&277<2>:1/i84>;h66>5<>i60;0;66sm25c94?2=83:p(<6i:e28L11d3A><=6F;2:&277<2>:1/i84>;h66>5<>i60;0;66sm25;94?2=83:p(<6i:e28L11d3A><=6F;2:&277<2>:1/i84>;h66>5<>i60;0;66sm25:94?2=83:p(<6i:e28L11d3A><=6F;2:&277<2>:1/i84>;h66>5<>i60;0;66sm25594?2=83:p(<6i:e28L11d3A><=6F;2:&277<2>:1/i84>;h66>5<>i60;0;66sm25494?2=83:p(<6i:e28L11d3A><=6F;2:&277<2>:1/i84>;h66>5<>i60;0;66sm25794?2=83:p(<6i:e28L11d3A><=6F;2:&277<2>:1/i84>;h66>5<>i60;0;66sm1d:94?2=83:p(<6i:e28L11d3A><=6F;2:&277<2>:1/i84>;h66>5<>i60;0;66sm1d594?2=83:p(<6i:e28L11d3A><=6F;2:&277<2>:1/i84>;h66>5<>i60;0;66sm1d494?2=83:p(<6i:e28L11d3A><=6F;2:&277<2>:1/i84>;h66>5<>i60;0;66sm1d794?2=83:p(<6i:e28L11d3A><=6F;2:&277<2>:1/i84>;h66>5<>i60;0;66sm1d694?2=83:p(<6i:e28L11d3A><=6F;2:&277<2>:1/i84>;h66>5<>i60;0;66sm1d194?2=83:p(<6i:e28L11d3A><=6F;2:&277<2>:1/i84>;h66>5<>i60;0;66sm1d094?2=83:p(<6i:e28L11d3A><=6F;2:&277<2>:1/i84>;h66>5<>i60;0;66sm1d394?2=83:p(<6i:e28L11d3A><=6F;2:&277<2>:1/i84>;h66>5<>i60;0;66sm1d294?2=83:p(<6i:e28L11d3A><=6F;2:&277<2>:1/i84>;h66>5<>i60;0;66sm1e494?2=83:p(<6i:e28L11d3A><=6*j5;38m13=831b8o4?::k7b?6=3f;3>7>5;|`2`0<72=0;6=u+19d9`5=O<>i0D99>;%g6>4=n<<0;66g;b;29?l2a2900c<6=:188yg7c<3:187>50z&25;h6a>5<4H55`?M2092.n97?4i5794?=nd083>1<729q/=5h5d19K02e<@==:7)k::09j00<722c?n7>5;h6e>5<8g8g4>N3?j1C8:?4$d795>o3=3:17d:m:188m1`=831d=5<50;9~f4ea290?6=4?{%3;b?b73A>>6=44i5`94?=n8383>>{e9jo1<7:50;2x 4>a2m:0D99l;I645>"b=3;0e9;50;9j0g<722c?j7>5;n3;6?6=3th9?l4?:583>5}#91l1h=5G46a8L1163-o>6<5f4483>>o3j3:17d:i:188k4>52900qo<<9;290?6=8r.:4k4k0:J73f=O<>;0(h;51:k71?6=3`>i6=44i5d94?=h9181<75rb31;>5<3290;w)?7f;f3?M20k2B?;<5+e482?l222900e9l50;9j0c<722e:4?4?::a661=83>1<7>t$0:e>a6<@==h7E:81:&f1?7>o3n3:17b?72;29?xd5;?0;694?:1y'5=`=l91C8:m4H552?!c2281b884?::k7f?6=3`>m6=44o0:1>5<54;294~"60o0o<6F;7b9K027<,l?1=6g;5;29?l2e2900e9h50;9l5=4=831vn?=;:187>5<7s-;3j7j?;I64g>N3?81/i84>;h66>5<>i60;0;66sm22194?2=83:p(<6i:e28L11d3A><=6*j5;38m13=831b8o4?::k7b?6=3f;3>7>5;|`177<72=0;6=u+19d9`5=O<>i0D99>;%g6>4=n<<0;66g;b;29?l2a2900c<6=:188yg4493:187>50z&25;h6a>5<7>5;|`1`3<72<0;6=u+19d9`4=O<>i0D99>;%g6>4=n<<0;66g;6;29?l2e2900e9h50;9l5=4=831vn?j::186>5<7s-;3j7j>;I64g>N3?81/i84>;h66>5<>o3n3:17b?72;29?xd5l=0;684?:1y'5=`=l81C8:m4H552?!c2281b884?::k72?6=3`>i6=44i5d94?=h9181<75rb3f0>5<2290;w)?7f;f2?M20k2B?;<5+e482?l222900e9850;9j0g<722c?j7>5;n3;6?6=3th9h?4?:483>5}#91l1h<5G46a8L1163-o>6<5f4483>>o3>3:17d:m:188m1`=831d=5<50;9~f7b7290>6=4?{%3;b?b63A>>6=44i5494?=n0<729q/=5h5d29K02e<@==:7)k::79j00<722c?:7>5;h6e>5<5<55;294~"60o0o=6F;7b9K027<,l?1=6g;5;29?l212900e9l50;9j0c<722e:4?4?::a6f2=8391<7>t$0:e>11e3A>44?::m23g<722wi>n=50;194?6|,82m699m;I64g>N3?81b854?::k26<<722e:;o4?::a6gg=83>1<7>t$0:e>4543A>=7>5;h3;5;|`1g7<72:0;6=u+19d902d<@==h7E:81:k75;n34f?6=3th9n54?:583>5}#91l1=>=4H55`?M2092c?47>5;h72>5<5<53;294~"60o0?;o5G46a8L1163`>36=44i00:>5<8g8276=O<>i0D99>;h6;>5<h1<75rb3a3>5<4290;w)?7f;64f>N3?j1C8:?4i5:94?=n9;31<75`16`94?=zj;h?6=4;:183!7?n3;8?6F;7b9K027>o6010;66a>7c83>>{e:kl1<7=50;2x 4>a2==i7E:8c:J734=n<10;66g>2883>>i6?k0;66sm2c094?2=83:p(<6i:010?M20k2B?;<5f4983>>o293:17d?78;29?j70j3:17pl=bd83>6<729q/=5h546`8L11d3A><=6g;8;29?l7513:17b?8b;29?xd5j90;694?:1y'5=`=9:90D99l;I645>o303:17d;>:188m4>?2900c<9m:188yg4el3:1?7>50z&2329K02e<@==:7d:7:188m07=831b=5650;9l52d=831vn?ll:180>5<7s-;3j7:8b:J73f=O<>;0e9650;9j57?=831d=:l50;9~f7gd290?6=4?{%3;b?74;2B?;n5G4638m1>=831b9<4?::k2<=<722e:;o4?::a6`?=83?1<7>t$0:e>a7<@==h7E:81:&f1?7>o3j3:17d:i:188k4>52900qo;0(h;51:k71?6=3`>=6=44i5`94?=n8383>>{e:l=1<7;50;2x 4>a2m;0D99l;I645>"b=3;0e9;50;9j03<722c?n7>5;h6e>5<8g8g5>N3?j1C8:?4$d795>o3=3:17d:9:188m1d=831b8k4?::m2<7<722wi>h;50;794?6|,82m6i?4H55`?M2092.n97?4i5794?=n50z&25;h65>5<>i60;0;66sm2d194?3=83:p(<6i:e38L11d3A><=6*j5;38m13=831b8;4?::k7f?6=3`>m6=44o0:1>5<7>55;294~"60o0o=6F;7b9K027<,l?1=6g;5;29?l212900e9l50;9j0c<722e:4?4?::a6`7=83?1<7>t$0:e>a7<@==h7E:81:&f1?7>o3j3:17d:i:188k4>52900qo<84;290?6=8r.:4k4k2:J73f=O<>;0(h;56:k71?6=3`>m6=44i0:2>5<8g8g6>N3?j1C8:?4$d792>o3=3:17d:i:188m4>62900c<6=:188yg41n3:187>50z&25;h6a>5<50;194?6|,82m699m;I64g>N3?81b854?::k26<<722e:;o4?::a75?=8391<7>t$0:e>11e3A>44?::m23g<722wi>k:50;694?6|,82m6<=<;I64g>N3?81b854?::k65?6=3`;347>5;n34f?6=3th8<54?:283>5}#91l18:l4H55`?M2092c?47>5;h31=?6=3f;5;|`1b6<72=0;6=u+19d9565<@==h7E:81:k75<8g873g=O<>i0D99>;h6;>5<5<7>54;294~"60o0:?>5G46a8L1163`>36=44i4394?=n9121<75`16`94?=zj::=6=4<:183!7?n3>h1<75rb3d2>5<3290;w)?7f;307>N3?j1C8:?4i5:94?=n=80;66g>8983>>i6?k0;66sm31794?5=83:p(<6i:55a?M20k2B?;<5f4983>>o6:00;66a>7c83>>{e:o:1<7:50;2x 4>a28987E:8c:J734=n<10;66g:1;29?l7?03:17b?8b;29?xd48=0;6>4?:1y'5=`=<>h0D99l;I645>o303:17d?=9;29?j70j3:17pl=eg83>1<729q/=5h51218L11d3A><=6g;8;29?l362900e<67:188k41e2900qo=?3;297?6=8r.:4k4;7c9K02e<@==:7d:7:188m44>2900c<9m:188yg4bm3:187>50z&2=831d=:l50;9~f66529086=4?{%3;b?20j2B?;n5G4638m1>=831b=?750;9l52d=831vn?kk:187>5<7s-;3j7?<3:J73f=O<>;0e9650;9j14<722c:454?::m23g<722wi?=?50;194?6|,82m699m;I64g>N3?81b854?::k26<<722e:;o4?::a6`e=83>1<7>t$0:e>4543A>=7>5;h3;5;|`1ag<72=0;6=u+19d9565<@==h7E:81:k75<8g8g4>N3?j1C8:?4$d795>o3=3:17d:m:188m1`=831d=5<50;9~f67c290?6=4?{%3;b?b73A>>6=44i5`94?=n8383>>{e;8i1<7:50;2x 4>a2m:0D99l;I645>"b=3;0e9;50;9j0g<722c?j7>5;n3;6?6=3th8=o4?:583>5}#91l1h=5G46a8L1163-o>6<5f4483>>o3j3:17d:i:188k4>52900qo=>a;290?6=8r.:4k4k0:J73f=O<>;0(h;51:k71?6=3`>i6=44i5d94?=h9181<75rb23:>5<3290;w)?7f;f3?M20k2B?;<5+e482?l222900e9l50;9j0c<722e:4?4?::a74>=83>1<7>t$0:e>a6<@==h7E:81:&f1?7>o3n3:17b?72;29?xd49>0;694?:1y'5=`=l91C8:m4H552?!c2281b884?::k7f?6=3`>m6=44o0:1>5<54;294~"60o0o<6F;7b9K027<,l?1=6g;5;29?l2e2900e9h50;9l5=4=831vn>?;:187>5<7s-;3j7j?;I64g>N3?81/i84>;h66>5<>i60;0;66sm33:94?3=83:p(<6i:e38L11d3A><=6*j5;38m13=831b8;4?::k7f?6=3`>m6=44o0:1>5<54;294~"60o0:?>5G46a8L1163`>36=44i4394?=n9121<75`16`94?=zj;396=4;:183!7?n3;8?6F;7b9K027>o6010;66a>7c83>>{e:0;1<7:50;2x 4>a28987E:8c:J734=n<10;66g:1;29?l7?03:17b?8b;29?xd5190;694?:1y'5=`=9:90D99l;I645>o303:17d;>:188m4>?2900c<9m:188yg4?n3:187>50z&2=831d=:l50;9~f7>7290?6=4?{%3;b?74;2B?;n5G4638m1>=831b9<4?::k2<=<722e:;o4?::a62`=83>1<7>t$0:e>4543A>=7>5;h3;5;|`13`<72=0;6=u+19d9565<@==h7E:81:k75<8g8276=O<>i0D99>;h6;>5<h1<75rb35`>5<3290;w)?7f;307>N3?j1C8:?4i5:94?=n=80;66g>8983>>i6?k0;66sm3c`94?3=83:p(<6i:e38L11d3A><=6*j5;38m13=831b8;4?::k7f?6=3`>m6=44o0:1>5<55;294~"60o0o=6F;7b9K027<,l?1=6g;5;29?l212900e9l50;9j0c<722e:4?4?::a7gg=83?1<7>t$0:e>a5<@==h7E:81:&f1?0>o3n3:17d?71;29?j7?:3:17pl0<729q/=5h5d09K02e<@==:7)k::09j00<722c?:7>5;h6a>5<7>5;|`0g5<72<0;6=u+19d9`4=O<>i0D99>;%g6>4=n<<0;66g;6;29?l2e2900e9h50;9l5=4=831vn>lj:186>5<7s-;3j7j>;I64g>N3?81/i84>;h66>5<>o3n3:17b?72;29?xd4jo0;684?:1y'5=`=l81C8:m4H552?!c2281b884?::k72?6=3`>i6=44i5d94?=h9181<75rb2a2>5<2290;w)?7f;f2?M20k2B?;<5+e482?l222900e9850;9j0g<722c?j7>5;n3;6?6=3th8o?4?:483>5}#91l1h<5G46a8L1163-o>6<5f4483>>o3>3:17d:m:188m1`=831d=5<50;9~f6ea290>6=4?{%3;b?b63A>>6=44i5494?=n0<729q/=5h5d29K02e<@==:7)k::79j00<722c?:7>5;h6e>5<5<55;294~"60o0o=6F;7b9K027<,l?1=6g;5;29?l212900e9l50;9j0c<722e:4?4?::a7a6=83?1<7>t$0:e>a7<@==h7E:81:&f1?7>o3j3:17d:i:188k4>52900qo=k1;291?6=8r.:4k4k1:J73f=O<>;0(h;51:k71?6=3`>=6=44i5`94?=n8383>>{e;m>1<7;50;2x 4>a2m;0D99l;I645>"b=3;0e9;50;9j03<722c?n7>5;h6e>5<8g8g5>N3?j1C8:?4$d795>o3=3:17d:9:188m1d=831b8k4?::m2<7<722wi?i=50;794?6|,82m6i?4H55`?M2092.n97?4i5794?=n50z&25;h65>5<>i60;0;66sm3e494?3=83:p(<6i:e38L11d3A><=6*j5;38m13=831b8;4?::k7f?6=3`>m6=44o0:1>5<55;294~"60o0o=6F;7b9K027<,l?1=6g;5;29?l212900e9l50;9j0c<722e:4?4?::a7de=83?1<7>t$0:e>a7<@==h7E:81:&f1?7>o3j3:17d:i:188k4>52900qo=ne;291?6=8r.:4k4k1:J73f=O<>;0(h;51:k71?6=3`>=6=44i5`94?=n8383>>{e;hk1<7;50;2x 4>a2m;0D99l;I645>"b=3;0e9;50;9j03<722c?n7>5;h6e>5<8g8g5>N3?j1C8:?4$d795>o3=3:17d:9:188m1d=831b8k4?::m2<7<722wi?ll50;794?6|,82m6i?4H55`?M2092.n97?4i5794?=n50z&25;h65>5<>i60;0;66sm3`494?3=83:p(<6i:e18L11d3A><=6*j5;48m13=831b8;4?::k7b?6=3`;3=7>5;n3;6?6=3th8m54?:483>5}#91l1h<5G46a8L1163-o>6<5f4483>>o3>3:17d:m:188m1`=831d=5<50;9~f6g2290>6=4?{%3;b?b43A>>6=44i5494?=n8083>>i60;0;66sm38;94?5=83:p(<6i:55a?M20k2B?;<5f4983>>o6:00;66a>7c83>>{e;021<7=50;2x 4>a2==i7E:8c:J734=n<10;66g>2883>>i6?k0;66sm39g94?2=83:p(<6i:010?M20k2B?;<5f4983>>o293:17d?78;29?j70j3:17pl<9683>6<729q/=5h546`8L11d3A><=6g;8;29?l7513:17b?8b;29?xd40j0;694?:1y'5=`=9:90D99l;I645>o303:17d;>:188m4>?2900c<9m:188yg5>>3:1?7>50z&2329K02e<@==:7d:7:188m07=831b=5650;9l52d=831vn>7::180>5<7s-;3j7:8b:J73f=O<>;0e9650;9j57?=831d=:l50;9~f6>?290?6=4?{%3;b?74;2B?;n5G4638m1>=831b9<4?::k2<=<722e:;o4?::a7<2=8391<7>t$0:e>11e3A>44?::m23g<722wi?5850;694?6|,82m6<=<;I64g>N3?81b854?::k65?6=3`;347>5;n34f?6=3th85>4?:283>5}#91l18:l4H55`?M2092c?47>5;h31=?6=3f;5;|`0<1<72=0;6=u+19d9565<@==h7E:81:k75<8g873g=O<>i0D99>;h6;>5<5<7>54;294~"60o0:?>5G46a8L1163`>36=44i4394?=n9121<75`16`94?=zj:3:6=4<:183!7?n3>h1<75rb2:3>5<3290;w)?7f;307>N3?j1C8:?4i5:94?=n=80;66g>8983>>i6?k0;66sm38294?5=83:p(<6i:55a?M20k2B?;<5f4983>>o6:00;66a>7c83>>{e;>o1<7:50;2x 4>a28987E:8c:J734=n<10;66g:1;29?l7?03:17b?8b;29?xd4mh0;684?:1y'5=`=l81C8:m4H552?!c2281b884?::k72?6=3`>i6=44i5d94?=h9181<75rb2g:>5<2290;w)?7f;f2?M20k2B?;<5+e482?l222900e9850;9j0g<722c?j7>5;n3;6?6=3th8i54?:483>5}#91l1h<5G46a8L1163-o>6<5f4483>>o3>3:17d:m:188m1`=831d=5<50;9~f6c0290>6=4?{%3;b?b63A>>6=44i5494?=n0<729q/=5h5d09K02e<@==:7)k::09j00<722c?:7>5;h6a>5<6=4::183!7?n3n:7E:8c:J734=#m<0:7d:::188m10=831b8o4?::k7b?6=3f;3>7>5;|`0a1<72<0;6=u+19d9`4=O<>i0D99>;%g6>4=n<<0;66g;6;29?l2e2900e9h50;9l5=4=831vn>k<:186>5<7s-;3j7j>;I64g>N3?81/i84>;h66>5<>o3n3:17b?72;29?xd4m;0;684?:1y'5=`=l81C8:m4H552?!c2281b884?::k72?6=3`>i6=44i5d94?=h9181<75rb2g2>5<2290;w)?7f;f2?M20k2B?;<5+e482?l222900e9850;9j0g<722c?j7>5;n3;6?6=3th8??4?:583>5}#91l1=>=4H55`?M2092c?47>5;h72>5<5<54;294~"60o0:?>5G46a8L1163`>36=44i4394?=n9121<75`16`94?=zj:9?6=4;:183!7?n3;8?6F;7b9K027>o6010;66a>7c83>>{e;:?1<7:50;2x 4>a28987E:8c:J734=n<10;66g:1;29?l7?03:17b?8b;29?xd4;?0;694?:1y'5=`=9:90D99l;I645>o303:17d;>:188m4>?2900c<9m:188yg53=3:187>50z&2=831d=:l50;9~f621290?6=4?{%3;b?74;2B?;n5G4638m1>=831b9<4?::k2<=<722e:;o4?::a711=83>1<7>t$0:e>4543A>=7>5;h3;5;|`00=<72=0;6=u+19d9565<@==h7E:81:k75<8g8276=O<>i0D99>;h6;>5<h1<75rb27a>5<3290;w)?7f;307>N3?j1C8:?4i5:94?=n=80;66g>8983>>i6?k0;66sm34a94?2=83:p(<6i:010?M20k2B?;<5f4983>>o293:17d?78;29?j70j3:17pl<5e83>1<729q/=5h51218L11d3A><=6g;8;29?l362900e<67:188k41e2900qo=:e;290?6=8r.:4k4>329K02e<@==:7d:7:188m07=831b=5650;9l52d=831vn>;i:187>5<7s-;3j7?<3:J73f=O<>;0e9650;9j14<722c:454?::m23g<722wi?;k50;694?6|,82m6i>4H55`?M2092.n97?4i5794?=n1<729q/=5h5d19K02e<@==:7)k::09j00<722c?n7>5;h6e>5<8g8g5>N3?j1C8:?4$d795>o3=3:17d:9:188m1d=831b8k4?::m2<7<722wi8?j50;794?6|,82m6i:4H55`?M2092.n97?4i5794?=nm6=44i0:0>5<8g8g0>N3?j1C8:?4$d795>o3=3:17d:9:188m1`=831b=5=50;9l5=4=831vn95<7s-;3j7j;;I64g>N3?81/i84>;h66>5<>o60:0;66a>8383>>{e<;31<7;50;2x 4>a2m>0D99l;I645>"b=3;0e9;50;9j03<722c?j7>5;h3;7?6=3f;3>7>5;|`76=<72<0;6=u+19d9`1=O<>i0D99>;%g6>4=n<<0;66g;6;29?l2a2900e<6<:188k4>52900qo:=6;291?6=8r.:4k4k4:J73f=O<>;0(h;51:k71?6=3`>=6=44i5d94?=n9191<75`19094?=zj=8>6=4::183!7?n3n?7E:8c:J734=#m<0:7d:::188m10=831b8k4?::k2<6<722e:4?4?::a072=83?1<7>t$0:e>a2<@==h7E:81:&f1?7>o3n3:17d?73;29?j7?:3:17pl;2283>0<729q/=5h5d59K02e<@==:7)k::09j00<722c?:7>5;h6e>5<5<9>7>55;294~"60o0o86F;7b9K027<,l?1=6g;5;29?l212900e9h50;9j5=5=831d=5<50;9~f146290>6=4?{%3;b?b33A>>6=44i5494?=n8283>>i60;0;66sm43294?3=83:p(<6i:e68L11d3A><=6*j5;38m13=831b8;4?::k7b?6=3`;3?7>5;n3;6?6=3th?=k4?:483>5}#91l1h95G46a8L1163-o>6<5f4483>>o3>3:17d:i:188m4>42900c<6=:188yg26m3:197>50z&25;h65>5<5<2290;w)?7f;f7?M20k2B?;<5+e482?l222900e9850;9j0c<722c:4>4?::m2<7<722wi8m6=44i0:0>5<8g8g0>N3?j1C8:?4$d795>o3=3:17d:9:188m1`=831b=5=50;9l5=4=831vn9?7:186>5<7s-;3j7j;;I64g>N3?81/i84>;h66>5<>o60:0;66a>8383>>{e<8=1<7;50;2x 4>a2m>0D99l;I645>"b=3;0e9;50;9j03<722c?j7>5;h3;7?6=3f;3>7>5;|`753<72<0;6=u+19d9`1=O<>i0D99>;%g6>4=n<<0;66g;6;29?l2a2900e<6<:188k4>52900qo:>5;291?6=8r.:4k4k4:J73f=O<>;0(h;51:k71?6=3`>=6=44i5d94?=n9191<75`19094?=zj=;?6=4::183!7?n3n?7E:8c:J734=#m<0:7d:::188m10=831b8k4?::k2<6<722e:4?4?::a045=83?1<7>t$0:e>a2<@==h7E:81:&f1?7>o3n3:17d?73;29?j7?:3:17pl;1383>0<729q/=5h5d59K02e<@==:7)k::09j00<722c?:7>5;h6e>5<5<8?7>55;294~"60o0o86F;7b9K027<,l?1=6g;5;29?l212900e9h50;9j5=5=831d=5<50;9~f155290>6=4?{%3;b?b33A>>6=44i5494?=n8283>>i60;0;66sm42394?3=83:p(<6i:e68L11d3A><=6*j5;38m13=831b8;4?::k7b?6=3`;3?7>5;n3;6?6=3th??=4?:483>5}#91l1h95G46a8L1163-o>6<5f4483>>o3>3:17d:i:188m4>42900c<6=:188yg25n3:197>50z&25;h65>5<5<2290;w)?7f;f7?M20k2B?;<5+e482?l222900e9850;9j0c<722c:4>4?::m2<7<722wi8?950;794?6|,82m6i:4H55`?M2092.n97?4i5794?=nm6=44i0:0>5<8g8g0>N3?j1C8:?4$d795>o3=3:17d:9:188m1`=831b=5=50;9l5=4=831vn9??:186>5<7s-;3j7j;;I64g>N3?81/i84>;h66>5<>o60:0;66a>8383>>{ea288n7E:8c:J734=#m<0:56gk9;29?lbf2900c<9m:188yg2183:1?7>50z&2t$0:e>44b3A>5;hfb>5<8g826`=O<>i0D99>;%g6>4b>i6?k0;66sm1`294?5=83:p(<6i:00f?M20k2B?;<5+e482`>oc13:17djn:188k41e2900qo?6f;297?6=8r.:4k4>2d9K02e<@==:7)k::0f8ma?=831bhl4?::m23g<722wi=4k50;194?6|,82m6<N3?81/i84>d:kg=?6=3`nj6=44o05a>5<53;294~"60o0:>h5G46a8L1163-o>67c83>>{e90i1<7=50;2x 4>a288n7E:8c:J734=#m<0:h6gk9;29?lbf2900c<9m:188yg7>j3:1?7>50z&2t$0:e>44b3A>5;hfb>5<8g826`=O<>i0D99>;%g6>4b>i6?k0;66sm18:94?5=83:p(<6i:00f?M20k2B?;<5+e482`>oc13:17djn:188k41e2900qo?67;297?6=8r.:4k4>2d9K02e<@==:7)k::0f8ma?=831bhl4?::m23g<722wi=4850;194?6|,82m6<N3?81/i84>d:kg=?6=3`nj6=44o05a>5<53;294~"60o0:>h5G46a8L1163-o>67c83>>{e90>1<7=50;2x 4>a288n7E:8c:J734=#m<0:h6gk9;29?lbf2900c<9m:188yg7>;3:1?7>50z&2t$0:e>44b3A>5;hfb>5<8g826`=O<>i0D99>;%g6>4b>i6?k0;66sm18294?5=83:p(<6i:00f?M20k2B?;<5+e482`>oc13:17djn:188k41e2900qo<83;290?6=8r.:4k4>2g9K02e<@==:7)k::ba8ma?=831bhl4?::kgf?6=3f;5;|`15=<72=0;6=u+19d957`<@==h7E:81:&f1?433`n26=44iec94?=nlk0;66a>7c83>>{e9k<1<7:50;2x 4>a288m7E:8c:J734=#m<0986gk9;29?lbf2900eil50;9l52d=831vn?9>:186>5<7s-;3j7?<0:J73f=O<>;0(h;51`9j`<<722com7>5;hfa>5<>oci3:17djm:188mae=831d=:l50;9~f4d?290>6=4?{%3;b?7482B?;n5G4638 `3=9o1bh44?::kge?6=3`ni6=44iea94?=h9>h1<75rb354>5<2290;w)?7f;304>N3?j1C8:?4$d7964=nl00;66gka;29?lbe2900eim50;9l52d=831vn?8m:187>5<7s-;3j7?=f:J73f=O<>;0(h;52c9j`<<722com7>5;hfa>5<8g826`=O<>i0D99>;%g6>4b>i6?k0;66sm1cc94?5=83:p(<6i:00f?M20k2B?;<5+e482`>oc13:17djn:188k41e2900qo<>e;290?6=8r.:4k4>2g9K02e<@==:7)k::368ma?=831bhl4?::kgf?6=3f;5;|`2ff<72=0;6=u+19d957`<@==h7E:81:&f1?433`n26=44iec94?=nlk0;66a>7c83>>{e:;:1<7;50;2x 4>a289;7E:8c:J734=#m<0:j6gk9;29?lbf2900eil50;9j`f<722e:;o4?::a5gc=83?1<7>t$0:e>4573A>5;hfb>5<>i6?k0;66sm33c94?3=83:p(<6i:013?M20k2B?;<5+e4814>oc13:17djn:188mad=831bhn4?::m23g<722wi88o50;694?6|,82m6<N3?81/i84:0:kg=?6=3`nj6=44ie`94?=h9>h1<75rb34b>5<2290;w)?7f;304>N3?j1C8:?4$d7957=nl00;66gka;29?lbe2900eim50;9l52d=831vn?7k:180>5<7s-;3j7?=e:J73f=O<>;0(h;5239j`<<722com7>5;n34f?6=3th94l4?:283>5}#91l1=?k4H55`?M2092.n97<=;hf:>5<>5fd883>>oci3:17djm:188mae=831d=:l50;9~f634290>6=4?{%3;b?7482B?;n5G4638 `3=::1bh44?::kge?6=3`ni6=44iea94?=h9>h1<75rb263>5<2290;w)?7f;304>N3?j1C8:?4$d7966=nl00;66gka;29?lbe2900eim50;9l52d=831vn>87:186>5<7s-;3j7?<0:J73f=O<>;0(h;5229j`<<722com7>5;hfa>5<>5fd883>>oci3:17djm:188mae=831d=:l50;9~f65a290>6=4?{%3;b?7482B?;n5G4638 `3=::1bh44?::kge?6=3`ni6=44iea94?=h9>h1<75rb3;`>5<2290;w)?7f;304>N3?j1C8:?4$d7966=nl00;66gka;29?lbe2900eim50;9l52d=831vn?66:186>5<7s-;3j7?<0:J73f=O<>;0(h;5229j`<<722com7>5;hfa>5<>5fd883>>oci3:17djm:188mae=831d=:l50;9~f636290>6=4?{%3;b?7482B?;n5G4638 `3=::1bh44?::kge?6=3`ni6=44iea94?=h9>h1<75rb21f>5<2290;w)?7f;304>N3?j1C8:?4$d7966=nl00;66gka;29?lbe2900eim50;9l52d=831vn?7m:186>5<7s-;3j7?<0:J73f=O<>;0(h;5229j`<<722com7>5;hfa>5<>5fd883>>oci3:17djm:188mae=831d=:l50;9~f601290>6=4?{%3;b?7482B?;n5G4638 `3=::1bh44?::kge?6=3`ni6=44iea94?=h9>h1<75rb273>5<2290;w)?7f;304>N3?j1C8:?4$d7966=nl00;66gka;29?lbe2900eim50;9l52d=831vn>=k:186>5<7s-;3j7?<0:J73f=O<>;0(h;5229j`<<722com7>5;hfa>5<>5fd883>>oci3:17djm:188mae=831d=:l50;9~f7>0290>6=4?{%3;b?7482B?;n5G4638 `3=::1bh44?::kge?6=3`ni6=44iea94?=h9>h1<75rb252>5<3290;w)?7f;31b>N3?j1C8:?4$d79ga=nl00;66gka;29?lbe2900c<9m:188yg51k3:187>50z&25;n34f?6=3th9m?4?:583>5}#91l1=?h4H55`?M2092.n97mk;hf:>5<>i6?k0;66sm37794?2=83:p(<6i:00e?M20k2B?;<5+e486?lb>2900eio50;9j`g<722e:;o4?::a71`=83>1<7>t$0:e>44a3A>7c83>>{e;:i1<7:50;2x 4>a288m7E:8c:J734=#m<0>7dj6:188mag=831bho4?::m23g<722wi>4750;794?6|,82m6<=?;I64g>N3?81/i84=3:kg=?6=3`nj6=44ie`94?=nlj0;66a>7c83>>{e:1<1<7;50;2x 4>a289;7E:8c:J734=#m<09?6gk9;29?lbf2900eil50;9j`f<722e:;o4?::a675=8391<7>t$0:e>44b3A>5;hfb>5<8g826`=O<>i0D99>;%g6>74>i6?k0;66sm23494?2=83:p(<6i:00e?M20k2B?;<5+e482a>oc13:17djn:188mad=831d=:l50;9~f4e3290?6=4?{%3;b?75n2B?;n5G4638 `3=9l1bh44?::kge?6=3`ni6=44o05a>5<7>53;294~"60o0:>h5G46a8L1163-o>67c83>>{e:kh1<7<50;2x 4>a288o7E:8c:J734=#m<0:=6gk9;29?j70j3:17pl=b883>7<729q/=5h513f8L11d3A><=6*j5;32?lb>2900c<9m:188yg4e?3:1>7>50z&25<7s-;3j7?=d:J73f=O<>;0(h;5109j`<<722e:;o4?::a6g5=8381<7>t$0:e>44c3A>5;n34f?6=3th9n<4?:383>5}#91l1=?j4H55`?M2092.n97?>;hf:>5<8g826a=O<>i0D99>;%g6>47>i6?k0;66sm39d94?4=83:p(<6i:00g?M20k2B?;<5+e4825>oc13:17b?8b;29?xd40m0;6?4?:1y'5=`=9;n0D99l;I645>"b=3;:7dj6:188k41e2900qo=7b;296?6=8r.:4k4>2e9K02e<@==:7)k::038ma?=831d=:l50;9~f6>>29096=4?{%3;b?75l2B?;n5G4638 `3=981bh44?::m23g<722wi?5950;094?6|,82m6<N3?81/i84>1:kg=?6=3f;5;|`0<0<72;0;6=u+19d957b<@==h7E:81:&f1?763`n26=44o05a>5<52;294~"60o0:>i5G46a8L1163-o>6h1<75rb2:2>5<5290;w)?7f;31`>N3?j1C8:?4$d7954=nl00;66a>7c83>>{e;>l1<7<50;2x 4>a288o7E:8c:J734=#m<0:=6gk9;29?j70j3:17pl=c483>7<729q/=5h513f8L11d3A><=6*j5;32?lb>2900c<9m:188yg5>i3:1>7>50z&25<7s-;3j7?=e:J73f=O<>;0(h;5239j`<<722com7>5;n34f?6=3th9j44?:283>5}#91l1=?k4H55`?M2092.n97<=;hf:>5<?5fd883>>oci3:17b?8b;29?xd5nk0;6>4?:1y'5=`=9;o0D99l;I645>"b=3897dj6:188mag=831d=:l50;9~f7`d29086=4?{%3;b?75m2B?;n5G4638 `3=:;1bh44?::kge?6=3f;5;|`1ba<72:0;6=u+19d957c<@==h7E:81:&f1?453`n26=44iec94?=h9>h1<75rb3df>5<4290;w)?7f;31a>N3?j1C8:?4$d7967=nl00;66gka;29?j70j3:17pl=fg83>6<729q/=5h513g8L11d3A><=6*j5;01?lb>2900eio50;9l52d=831vn?h::180>5<7s-;3j7?=e:J73f=O<>;0(h;5239j`<<722com7>5;n34f?6=3th8>n4?:483>5}#91l1=>>4H55`?M2092.n97j:;hf:>5<>ock3:17b?8b;29?xd4:k0;684?:1y'5=`=9::0D99l;I645>"b=38;7dj6:188mag=831bho4?::kgg?6=3f;5;|`036<72:0;6=u+19d957c<@==h7E:81:&f1?763`n26=44iec94?=h9>h1<75rb3d4>5<5290;w)?7f;31<>N3?j1C8:?4ie:94?=h9>h1<75rb24g>5<5290;w)?7f;31<>N3?j1C8:?4ie:94?=h9>h1<75rb301>5<1290;w)?7f;305>N3?j1C8:?4$d7960=nl00;66gka;29?lbe2900eim50;9l57g=831d=:l50;9~f4e7290=6=4?{%3;b?7492B?;n5G4638 `3=:<1bh44?::kge?6=3`ni6=44iea94?=h9;k1<75`16`94?=zj=?36=477;294~N3?81/=5h51968^12=ir21>;4j:07956<6j3l1=;4>4;3`>x"6:>087)jk:59'``<33-nm695+e187?!c62=1/i?4;;%g0>1=#kh0hi6*j6;68 `1=<2.n47:4$d;90>"bi3>0(hl54:&fg?2<,ln186*je;68 ``=<2.m<7:4$g390>"a:3>0(k=54:&e0?2<,o?186*i6;68 c1=<2.m47:4$g;90>"ai3>0(kl54:&eg?2<,on186*ie;68 c`=<2.:<=4;;%335?2<,8:9695+11190>"68=0?7)??5;68 4612=1/==954:&24=<33-;;57:4$02b>1=#99h186*>0b87?!77l3>0(<>j:59'55`=<2.:==4;;%325?2<,8;9695+10190>"69=0?7)?>5;68 4712=1/=<954:&25=<33-;:57:4$03b>1=#98h186*>1b87?!76l3>0(=4;;%315?2<,889695+13190>"6:=0?7)?=5;68 4412;1/=575409'a1<33-;3n7<4$555>4>23-><;7?75:l:`?687826>h60>0986`;79826>h3?00986*lb;af?!7?k390e9750;9j0d<722c?;94?::k`=?6=3`2<6=4+1929l1?65f19g94?=n;?0;6)?70;16?k70n3:07d=;:18'5=6=;<1e=:h51:9j76<72-;3<7=:;o34b?4<3`996=4+192970=i9>l1?65f3083>!7?839>7c?8f;68?l57290/=5>5349m52`==21b>k4?:%3;4?523g;5<#91:1?85a16d93>=n:m0;6)?70;16?k70n3207dl1=65f3e83>!7?839m7c?8f;08?l5d290/=5>53g9m52`=;21b?o4?:%3;4?5a3g;5<#91:1?k5a16d91>=n;00;6)?70;1e?k70n3<07d=7:18'5=6=;o1e=:h57:9j72<72-;3<7=i;o34b?><3`?26=4+19291==i9>l1<65f5683>!7?83?37c?8f;38?l31290/=5>5599m52`=:21b984?:%3;4?3?3g;5<#91:1955a16d90>=n=:0;6)?70;7;?k70n3?07d8=:18'5=6==11e=:h56:9j24<72-;3<7;7;o34b?1<3`<;6=4+19291==i9>l1465f5g83>!7?83?37c?8f;;8?l3b290/=5>5599m52`=i21b9i4?:%3;4?3?3g;5<#91:1955a16d9g>=n=k0;6)?70;7;?k70n3n07d;n:18'5=6==11e=:h5e:9j17<72-;3<7;7;o34b?`<3`2=6=4+1929<0=i9>l1<65f8583>!7?832>7c?8f;38?jd0290/=5>5b79m52`=821dn84?:%3;4?d13g;5<#91:1n;5a16d96>=hj;0;6)?70;`5?k70n3907bl>:18'5=6=j?1e=:h54:9lf5<72-;3<7l9;o34b?3<3fkm6=4+1929f3=i9>l1:65`ad83>!7?83h=7c?8f;58?jgc290/=5>5b79m52`=021dmn4?:%3;4?d13g;5<#91:1n;5a16d9e>=hih0;6)?70;`5?k70n3h07bo7:18'5=6=j?1e=:h5c:9le2<72-;3<7l9;o34b?b<3fk=6=4+1929f3=i9>l1i65`a483>!7?83h=7c?8f;d8?jg3290/=5>5b79m52`=9910cl=50;&2<52d:;k4>1:9le7<72-;3<7l9;o34b?7532ej=7>5$0:3>g05<#91:1n;5a16d951=818a2>h6?o0:965`bd83>!7?83h=7c?8f;35?>iel3:1(<6?:c48j41a28=07bll:18'5=6=j?1e=:h51998kgd=83.:4=4m6:l23c<6121dnl4?:%3;4?d13g;4d<3fh36=4+1929f3=i9>l1=n54oc694?"6090i:6`>7g82`>=hi00;6)?70;`5?k70n3;n76a6e;29 4>72k<0b<9i:0d8?je0290/=5>5c79m52`=821do84?:%3;4?e13g;5<#91:1o;5a16d96>=hk:0;6)?70;a5?k70n3907dm7:188m4>c2900e99::188m2e=83.:4=48b:l23c<732c5$0:3>2d7g81?>o0?3:1(<6?:6`8j41a2:10e:850;&2<5<0j2d:;k4;;:k41?6=,82;6:l4n05e>0=>1<7*>8184f>h6?o0=76g83;29 4>72>h0b<9i:698m24=83.:4=48b:l23c5$0:3>2d7g8b?>o1n3:1(<6?:6`8j41a2k10e;j50;&2<5<0j2d:;k4l;:k5g?6=,82;6:l4n05e>a=8184f>h6?o0n76g9a;29 4>72>h0b<9i:g98m3?=83.:4=48b:l23c<6821b:54?:%3;4?1e3g;;:k53?6=,82;6:l4n05e>44<3`<=6=4+19293g=i9>l1=>54i7794?"60907g820>=n>=0;6)?70;5a?k70n3;>76g73;29 4>72>h0b<9i:048?l>5290/=5>57c9m52`=9>10e5?50;&2<5<0j2d:;k4>8:9j<5<72-;3<79m;o34b?7>32c5$0:3>2d5<#91:1;o5a16d95g=n1<7*>8184f>h6?o0:o65f7883>!7?83=i7c?8f;3g?>o1m3:1(<6?:6`8j41a28o07d8<:18'5=6=?k1e=:h51g98m=d=83.:4=47a:l23c<732c357>5$0:3>=g7g81?>i>;3:1(<6?:808j41a2910c4?50;&2<5<>:2d:;k4>;:m:4?6=,82;64<4n05e>7=818:6>h6?o0876a7e;29 4>72080b<9i:598k=b=83.:4=462:l23c<232e2o7>5$0:3><46`>7g84?>i>i3:1(<6?:808j41a2110c4750;&2<5<>:2d:;k46;:m:d=818:6>h6?o0i76a66;29 4>72080b<9i:b98k<3=83.:4=462:l23c5$0:3><46`>7g8e?>id:3:1(<6?:b38j41a2910cn>50;&2<5;:p10b=833ty>9o4?:6gxZ1?33W?=:6P:659]0=2X3191U85h4^5:f?[2?l2T?4n5Q49`8Z1>f3W>356P:709]126X2>01U9;64^47b?[3212T>955Q5458Z0313W?>96P:559]105m70::c;6e?821>3>m70:95;6e?821<3>m70:9f;6e?821m3>m70;51:0>=63=93865>;5180>=63=91865>;50o0>=63=81865>;5?o0>=63=7d865>;5?m0>=63=7b865>;40l0>=63<8b865>;40h0>=63<89865>;40?0>=63<85865>;40;0>=63<81865>;4?l0>=63<33865>;4;:0>=63<35865>;4;<0>=63<37865>;4<<0>=63<47865>;4<>0>=63<49865>;4<00>=63<5c865>;4=j0>=63<5e865>;4=l0>=63<5g865>;3=103;63;59822e<5=?36:o4=57;>2><5=?36:94=57;>20<5=?36:;4=57;>22<5=?36:=4=57;>24<5=?36:?4=57;>26<5=?36;h4=57;>3b<5=?36;m4=57;>3d<5=?36;o4=57;>3?<5=?36;64=57;>31<5=?36;84=57;>33<5=?36;:4=57;>=5<5=?365<4=57;>=7<5=?365>4=57;>2`<5=?36:k4=57;>2b<5=?36:74=57;>3c<5=?36;=4=57;>=d<5=?36574=57;>=>52z\7<0=:;?k1=5<4}r76b?6=;rT>9k5247595=7<5=?h6<6>;|q130<72;qU9=:4=356>4>53ty>;>4?:2y]125<5:=96i74=250>a?=7>569y]107<5;k;69;4=57f>13<5=?o69;4=57`>13<5=<=69;4=546>13<5=13<5;;869;4=331>13<5;;:69;4=333>13<5;:m69;4=32f>13<5;:o69;4=32`>13<5;<;69;4=37e>13<5;?n69;4=37g>13<5;?h69;4=37a>13<5;?j69;4=37:>13<5;?369;4=36f>13<5;>o69;4=36`>13<5;>i69;4=36b>13<5;>269;4=36;>13<5;><69;4=365>13<5;>>69;4=0f5>13<58n>69;4=0f7>13<58n869;4=0f1>13<58n:69;4=0f3>13<58im69;4=0af>13<5;n<69;4=3f5>13<5;n>69;4=3f7>13<5;n869;4=3f1>13<5;n;69;4=3ae>13<5;n:69;4=3g:>13<5;o369;4=3g4>13<5;o=69;4=3g6>13<5;o?69;4=3g0>13<5;o969;4=3g2>13<5;=?69;4=356>13<5;13<5=8o69;4=50`>13<5=8i69;4=50b>13<5=8269;4=50;>13<5=8=69;4=506>13<5=8?69;4=500>13<5=8969;4=502>13<5=8;69;4=53e>13<5=;n69;4=53g>13<5=;i69;4=53b>13<5=;269;4=53;>13<5=;<69;4=535>13<5=;>69;4=537>13<5=;869;4=531>13<5=9869;4=511>13<5=9:69;4=513>13<5=8m69;4=50f>13<5=8<69;4=53`>13<5=;:69;4=533>13<5=?369o4}r15b?6=:rT>563y]131<5=<269;4=544>13<5=<369;4=54e>13<5=13<58h:69;4=0`3>13<58km69;4=0cf>13<58ko69;4=0c`>13<58ki69;4=0cb>13<58lj69;4=0d:>13<58l369;4=0d4>13<58l=69;4=0d6>13<58l?69;4=0d0>13<58l969;4=0g;>13<58o<69;4=0g5>13<58o>69;4=0g7>13<58o869;4=0g1>13<58o:69;4=0g3>13<5;9j69;4=31:>13<5;9369;4=314>13<5;9=69;4=316>13<5;9?69;4=310>13<5;9969;4=312>13<5:;>69;4=23g>13<5:;h69;4=23a>13<5:;j69;4=23:>13<5:;369;4=234>13<5:;=69;4=237>13<5:8369;4=2`a>13<5:h269;4=2`b>13<5:hh69;4=2`g>13<5:i;69;4=2`f>13<5:hm69;4=2a2>13<5:i969;4=2ae>13<5:io69;4=2af>13<5:n;69;4=2f2>13<5:n?69;4=2f1>13<5:n869;4=2f6>13<5:n=69;4=2cg>13<5:kh69;4=2cf>13<5:kj69;4=2c:>13<5:ki69;4=2c4>13<5:k=69;4=2c;>13<5:k>69;4=2gb>13<5:o269;4=2g;>13<5:o<69;4=2g5>13<5:o>69;4=2g7>13<5:o869;4=2g1>13<5:o:69;4=24f>13<5:13<5=?36974}r11>k5233:95=452z\7`2=:<831=5<4}r1e7?6=:rT?h;5240:95=47>52z\7`0=:<8=1=5<4}r1e5?6=:rT?h95240495=452z\7`6=:<8?1=5<4}r1fb?6=:rT?h?5240695=452z\7`5=:<891=5<4}r1f`?6=:rT?ok5240095=4;j7>52z\7g`=:<:91=5<4}r63a?6=:rT?oi5242095=4;h7>52z\7gf=:<:;1=5<4}r63g?6=:rT?oo5242295=4;n7>52z\7gd=:<;l1=5<4}r63e?6=:rT?o45243g95=4;57>52z\7g==:<;=1=5<4}r636?6=:rT?o:5240a95=452z\7g0=:<8;1=5<4}r1fg?6=:rT?o95240295=4;47>52z\7g6=:<;n1=5<4}r633?6=:rT?o?5243a95=4;:7>52z\7g4=:<;h1=5<4}r631?6=:rT?o=5243c95=4;87>52z\7fc=:<;31=5<4}r637?6=:rT?nh5243:95=4;=7>52z\7fa=:<;<1=5<4}r634?6=:rT?nn5243795=452z\7`a=:<;>1=5<4}r1ea?6=:rT?hn5243195=452z\7`g=:<;81=5<4}r1eg?6=:rT?hl5243395=452z\7`<=:<;:1=5<4}r1ee?6=:rT?h55240d95=452z\7`4=:<8o1=5<4}r1e52z\7fg=:<8h1=5<4}r1e1?6=:rT?nl5240c95=4i<7>52z\7=`=:<<214;5rs5cf>5<5sW>2h63;5986=>{t7}Y<0h019;7:448yv2fj3:1>vP;9`9>00>==<1v9on:181[2>127?954:4:p0d?=838pR977;<66;3=10386s|4c594?4|V=k?70::8;43?xu3j?0;6?uQ4`18913?2>47;l;|q7f7<72;qU84h4=57;>0di=7>52z\7=3=:<<219l5rs5c4>5<5sW>2963;59866>{t9:=1<7mt=55f>41c348io7:7;<0bg?2?348no7;>;<0ff?2?3483j7:7;<04g?2?3492<7:7;<14a?2?3498>7:7;<171?2?349>n7:7;|q1e4<72;q6>l>54g9>6d4=9>h0q~:93;295=}::h:1=5?4=545>4>5348o;7:m;<0g2?2e348o97:m;<0g0?2e348o?7:m;<0g6?2e348o<7:m;<0`b?7?9279h<4;b:?1a<<3j279i54;b:?1a2<3j279i;4;b:?1a0<3j279i94;b:?1a6<3j279i?4;b:?1a4<3j279;94>809>623=91;01?8i:5`8970b2=h0q~>h7?72:?71f<3>2wx88k50;0x913b282970:90;f:?xu3>10;6>u247;90c=:=57>52z?72<<60;168;l5d89~w13d2908w0::d;6e?822k3;3>63;618ge>{t4>534>=47:i;<65f?bf3ty?9k4?:5y>030=91;0198::0:2?821<3;3=63;61823g=z{=<96=4=6z?720<60;16><:54c9>645=<<54c9>647=<>54c9>65`==k54c9>65b==m54c9>636=8h54c9>60c=8j54c9>60e=8l54c9>60g=8754c9>60>=9k54c9>61b=9m54c9>61d=9o54c9>61?=9654c9>611=9854c9>613=5a3=5a5=5a7=54c9>5f`=4>434>9n7?73:?76d<60:168?751918914?282870:=6;3;7>;3:<0:4>5243695=5<5=886<6<;<616?7?;27?><4>829>076=919019?i:0:0?826m3;3?63;1e82<6=:<8h1=5=4=53b>4>434>:57?73:?75=<60:168<9519189171282870:>5;3;7>;39=0:4>5240195=5<5=;96<6<;<607?7?;27???4>829>067=919019=?:0:0?825n3;3?63;2d82<6=:<;=1=5=4=53`>4>434>:=7?73:?755<60:1688o5d`9>00>=91o0q~:9a;297~;3>o0:4<5247g95=7<5=i70=>d;6a?856k3>i70=>b;6a?856i3>i70=>9;6a?85603>i70=>7;6a?856>3>i70=>4;6a?85ej3>i70=m9;6a?85ei3;3=63;4jm0?n63;4jl0?n63;4k80?n63;4ko0?n634>6349nm7:m;<1f=?2e349n47:m;<1f3?2e349n:7:m;<1f1?2e349n87:m;<1f7?2e349n>7:m;<1f5?2e3ty?:n4?:3cx910b282970?m2;6a?87e93>i70?m0;6a?87fn3>i70?ne;6a?87fl3>i70?nc;6a?87fj3>i70?na;6a?87ai3>i70?i9;6a?87a03>i70?i7;6a?87a>3>i70?i5;6a?87a<3>i70?i3;6a?87a:3>i70?j8;6a?87b?3>i70?j6;6a?87b=3>i70?j4;6a?87b;3>i70?j2;6a?87b93>i70?j0;6a?844i3>i70<<9;6a?84403>i70<<7;6a?844>3>i70<<5;6a?844<3>i70<<3;6a?844:3>i70<<1;6a?85503>i70=9e;6a?851n3>i70=9a;6a?xu5=>0;68u220690c=::?:1=5<4=335>ag<5;;36i74=33b>ae53z?151<60;16>4j5d89>6=g=l01v??::181846;3>m70<>6;34f>{t:9k1<7=t=330>4>53482o7jn;<0;=?bf3ty9=:4?:3y>644=<6516`8yv4713:1?v3=1382<7=::0i1hn5229;9`f=z{;;26=49{<025?2a348:m7?8b:?15f?4kc:p65>=839p1??>:0:1?84>j3nj70<78;fb?xu59k0;6?u220290c=::8i1=:l4}r033?6=;r79==4>839>6565db9~w77c2909w0=k54g9>676=9>h0q~5<5s48;h7:i;<017?70j2wx>=:50;1x976c282970<69;fb?84?>3nj7p}=2483>7}::9i18k52234952d53z?14f<60;16>475db9>6=0=lj1v:18687e:3>m70?ia;3;6>;6j=0om63>b78g=>;6j10oo6s|1`;94?3|58h96<6=;<15=?b>349>?7j6;<174?b>348m97jn;|q2f6<72;q6=o?54g9>5g2=9>h0q~?n8;291~;6j80:4?5237;9`g=:;<91ho523529`g=::ol1hl5rs0`6>5<5s4;i<7:i;<3a2?70j2wx=l950;7x94d7282970=98;f:?852:3n270=b683>3}:9hl18k521c:952d<58hj6io4=0``>a?<58hn6il4=0a3>ae55z?2ec<60;16?;65dc9>704=lk16?>h5dc9>6cb=lh1vm70?ma;34f>{t9h?1<7;t=0cf>4>5349=;7j6;<165?b>3498i7j6;<0eg?bf3ty:no4?:3y>5db=ae82<7=:;?=1ho523439`g=:;:o1ho522g`9`d=z{8ho6=4={<3bg?2a34;ii7?8b:p5d5=83?p13n270=:0;f:?854l3n270839>730=lk16?8>5dc9>76b=lk16>k75d`9~w4e42909w0?na;6e?87d<3;349?j7j6;<10g?b>348m47jn;|q101<72;q6>;>54g9>61c=9180q~<;3;296~;5=o0?j63=4e82<7=z{;?=6=4;{<06b?7?:279=;4k9:?15=6}::ad<5;;j6io4}r075?6=:r799i4;f:?10g<60;1v?;;:181842l3;3>63=1`8g=>{t:=:1<71`<5;>j6<6=;|q116<728m51908977d2m301??j:ec897472mi01?<=:e`8yv44n3:1>v3=5c87b>;5<00:4?5rs371>5<3s48>n7?72:?15`=4k9:?167>k50;0x973f2=l01?:7:0:1?xu5=80;6>u224c95=4<5;8;6io4=301>a?52z?11<<3n2798:4>839~w7372908w0<:9;3;6>;5::0o563=278ge>{t::i1<71`<5;>=6<6=;|q10c<72;q6>865190897412m30q~?kf;296~;6nh0?j63>e982<7=z{8nn6=4={<3e=?2a34;n;7?72:p5c6=83>p1de83>7}:9o218k521d495=453z?2b=<60;16=o85dc9>5g>=lh1vm70?j5;3;6>{t9lo1<74>534;i47j6;|q2`g<72;q6=k854g9>5`2=9180q~?jd;291~;6n?0:4?521cc9`<=:9ki1hl521cg9`f=:9j:1ho5rs0fb>5<5s4;m97:i;<3f7?7?:2wx=hm50;6x94`2282970?mc;fa?87em3n270?l0;fb?xu6l00;6?u21g690c=:9l81=5<4}r3ff?6=;r7:j94>839>5gc=lh16=n>5d89~w4b?2909w0?i3;6e?87b93;3>6s|1dc94?5|58l86<6=;<3`5?b>34;h87jn;|q2`2<72;q6=k<54g9>5`6=9180q~?j9;296~;6n;0:4?521b69`<=z{;9;6=4={<07a?2a3488m7?72:p67`=838p1?:k:5d8975>28297p}=2d83>7}::=i18k5222:95=452z?10g<3n279?:4>839~w74d2909w0<;a;6e?844>3;3>6s|23`94?4|5;>269h4=316>4>53ty9>l4?:3y>61>=>:51908yv4513:1>v3=4687b>;5;:0:4?5rs30;>5<5s48?:7:i;<006?7?:2wx>?950;0x97222=l01?=>:0:1?xu5;k0;652z?2a=<3n27:h;4>839~w4ed2909w0?j7;6e?87c=3;3>6s|1b`94?4|58o=69h4=0f7>4>53ty:ol4?:3y>5`3=v3>e587b>;6l;0:4?5rs0a;>5<5s4;n?7:i;<3g5?7?:2wx=n950;0x94c52=l013>m70;6190o563=8`8ge>;3=10?<6s|1g`94?4|58n>69h4=0;3>41e3ty:jn4?:3y>5a2=v3>d287b>;61;0:;o5rs0df>5<5s4;o>7:i;<3:7?70j2wx=kh50;0x94b62=l01<7;:05a?xu5890;6?u21e290c=:90?1=:l4}r035?6=:r7:ok4;f:?2=3<6?k1v?>=:18187dm3>m70?67;34f>{t;l:1<7:t=31b>1`<5:oj6<6=;<3:34>>47=9;|q124<72;q6>>754g9>5<>=9>h0q~<92;296~;5;10?j63>98823g=z{;<86=4={<003?2a34;2m7?8b:p632=838p1?=9:5d894?e28=i7p}=6483>7}:::?18k5218a952d52z?171<3n27:5i4>7c9~w7002909w0<<3;6e?87>m3;41e3ty9:44?:3y>667=516`8yv4bi3:1=8u22e5903=::m<18;522e7903=::m>18;522e1903=::m818;522e2903=::jl18;522e3903=::l318;522d:903=::l=18;522d4903=::l?18;522d6903=::l918;522d0903=::l;18;5244c9`g=::?k1=:l4=3c1>ag52z?1`2<3n279o94>7c9~w7eb290?w0;5m00?j63=9e8ge>;5k<0o56s|2`c94?4|5;n=69h4=3a0>41e3ty9oi4?:5y>6a0=91801?k7:5d897?d2m301?lm:e;8yv4f13:1>v3=d487b>;5k;0:;o5rs3a`>5<3s48o97?72:?1a2<3n2795n4kb:?1f<l650;0x97b32=l01?m>:05a?xu5kk0;69u22e695=4<5;o=69h4=3;a>a?<5;h<6i74}r0b3?6=:r79h>4;f:?1g5<6?k1v?mn:18784c;3;3>63=e487b>;51k0on63=b48g=>{t:h<1<71`<5;hm6<9m;|q1g<<72=q6>i<5190897c32=l01?7n:e;897d42m30q~1}::jl1=5<4=3g2>1`<5;326il4=3cg>a?52z?1`4<3n279nh4>7c9~w7e?290?w0;5m:0?j63=9`8gf>;5j80o56s|2cc94?4|5;i?6964=3`b>41e3ty9o84?:3y>6f2=9;301?m::05a?xu5j10;6>u22b190==::kk185522c:952d53z?1g6<6:016>oo519:897de28=i7p}=b783>6}::j8185522c:90==::k<1=:l4}r0a=?6=;r79o?4>289>6g>=91201?l6:05a?xu5j=0;6>u22b390==::k<185522c6952d53z?1g4<6:016>o8519:897d028=i7p}=b383>6}::j:185522c690==::k81=:l4}r0a1?6=;r79o=4>289>6g2=91201?l::05a?xu5j90;6>u22cd90==::k8185522c2952d53z?1fc<6:016>o<519:897d428=i7p}=ad83>6}::ko185522c290==::ho1=:l4}r0a5?6=;r79nh4>289>6g6=91201?l>:05a?xu5ij0;6>u22cf90==::ho185522`a952d53z?1fa<6:016>lk519:897ga28=i7p}=ae83>6}::ki1=?74=3c`>4>?348jh7?8b:p6a`=83?p1?k7:0:1?87>93n270?60;fb?84?13n270::8;1f?xu5ll0;68u22d595=4<58396i74=0;2>ag<5;226il4=57;>6b55z?1a3<60;16=4=5d89>5<4=lh16>565d89>00>=;j1v?jl:18684b=3;3>63>958g=>;61:0om63=898gf>;3=108n6s|2e`94?3|5;o?6<6=;<3:1?b>34;287jn;<0;3?b>34>>47=n;|q1`d<72h=5190894?12m301<7::ec897>02mh019;7:2;8yv4c13:19v3=e382<7=:90=1h4521849`d=::1<1h45244:97==z{;n36=4;{<0f5?7?:27:5:4ka:?1<363=728gf>;5?80on63=768gf>;5>k0o563=6`8gg>{t:>81<71`<5;=86<9m;|q12f<72?q6>;k5190897142m301?9>:ec897102mk01?8m:ec8970f2mh0q~6=4={<134?751279j84>7c9~w67b2909w0=?0;34f>;49<0?j6s|2g194?5|5::26964=3d7>1><5;l86<9m;|q1bc<72:q6?=7513;897`3282370{t;;=1<741e349:h7:i;|q0gg<72k:5509>7a3=91801>k6:5d896272mi01?hi:e;8yv4a:3:1?v3<0987<>;5n:0?463=f3823g=z{;ln6=4<{<134>899>6cc=9>h0q~==6;296~;4810:;o5230a90c=z{:ij6=4:{<0e7?36349o87?72:?0a=<3n278?k4ka:?1b`k?50;1x96602=201?h=:5:897`628=i7p}=fe83>6}:;9=1=?74=3d1>4>?348mh7?8b:p773=838p1>>8:05a?856j3>m7p}0}::o819<523e195=4<5:o<69h4=21e>ae<5;lo6i74}r0e4?6=;r78<;4;8:?1b4<30279j=4>7c9~w7`d2908w0=?6;31=>;5n80:45522ga952d52z?043<6?k16?w063;4;l0om63=fb8g=>{t:ll1<7=t=226>1><5;l;6964=3ge>41e3ty9jo4?:2y>753=9;301?h?:0:;?84aj3;6<9m;<12=?2a3ty8o:4?:4y>6c6==816?i?5190896c22=l01>=j:ea897`e2m30q~;5ml0:;o5rs3db>5<4s49;87?=9:?1ac<60116>ko516`8yv55:3:1>v3<05823g=:;8218k5rs2a5>5<2s48nj7;>;<1g4?7?:278i94;f:?07a><:5:897cb2=201?kk:05a?xu5n00;6>u2311957?<5;on6<67;<0e=?70j2wx???50;0x966428=i70=>7;6e?xu4k<0;68u22dg914=:;jl1=5<4=2g0>1`<5:9o6im4=3d:>a?53z?047<30279ii4;8:?1af<6?k1v?h7:180857:3;9563=ee82<==::o21=:l4}r114?6=:r787c9>740=m;:18684bl3?:70=le;3;6>;4m;0?j63<3b8ge>;5n10o56s|2d`94?5|5:::6964=3g`>1><5;oi6<9m;|q1b3<72:q6?=?513;897cd282370{t;8l1<741e349:87:i;|q037<72;kp1?km:43896de2=<01>l6:54896df2=<01>ll:54896dc2=<01>m?:54896db2=<01>li:54896e62=<01>m=:54896ea2=<01>mk:54896eb2=<01>j?:54896b62=<01>j;:54896b52=<01>j<:54896b22=<01>j9:54896gc2=<01>ol:54896gb2=<01>on:54896g>2=<01>om:54896g02=<01>o9:54896g?2=<01>o::54896cf2=<01>k6:54896c?2=<01>k8:54896c12=<01>k::54896c32=<01>k<:54896c52=<01>k>:548961428=i7p}<0`83>7}:;8?1=5<4=20b>ae52z?05a<60;16??o5dc9~w6752909w0=>c;3;6>;4:h0om6s|30394?4|5:;i6<6=;<11e?b>3ty8==4?:3y>74g=91801>v3<1882<7=:;;h1h45rs22f>5<5s49:47?72:?06f839>77e=l01v>=70=9a;65?851l3;41e3ty94h4?:3y>6<5=<116>4<516`8yv4>03:1>v3=9282<==::0n1=:l4}r0:b?6=:r795>4>7c9>6d4=l01v?6k:18184>:3>370<61;34f>{t:0=1<74>?3482o7?8b:p6=e=838p1?7>:5:897?728=i7p}=9783>7}::0;1=564=3;a>41e3ty94o4?:3y>6<6=<116>5h516`8yv4>=3:1>v3=9182<==::0k1=:l4}r0:0?6=:r794k4>899>6h0q~<8b;296~;5090?463=7g823g=z{;2>6=4={<0;4?7?02794l4>7c9~w7?b2909w0<70;34f>;5i;0on6s|26c94?4|5;=m6964=35f>41e3ty9494?:3y>62`=91201?66:05a?xu5?00;6?u226g90==::>n1=:l4}r0;7?6=:r79;h4>899>6=>=9>h0q~<88;296~;5?m0?463=7b823g=z{;296=4={<04`?7?02794:4>7c9~w7>62909w0<8c;3;<>;50?0:;o5rs2;g>5<3s49in7:i;<1b3?7?:278:;4kc:?0<61}:;k318k523`795=4<5:<>6il4=25e>a?53z?0f<<60;16?nj54g9>71`=lk1v>7l:18785ei3>m70=n6;3;6>;4><0om63<808g=>{t;k:1<7=t=2`b>4>5349hi7:i;<17b?bf3ty85h4?:5y>7ge=6::e;8yv5e:3:1?v3lk:0:1?85c93>m70=:1;f`?xu4i;0;69u23b290c=:;hi1=5<4=24;>ag<5:2o6i74}r1a2?6=;r78o=4>839>7a2=63<668ge>;4000o56s|3c694?5|5:hn6<6=;<1g6?2a349>=7jn;|q0e4<72=q6?oh54g9>7dd=91801>87:ea896>e2m30q~=m5;297~;4jo0:4?523e190c=:;<81hn5rs2c0>5<3s49h=7:i;<1b`?7?:278:44kc:?01}:;j818k523`g95=4<5:<26io4=2;b>a?53z?0g7<60;16?i854g9>705=lh1v>m<:18785dl3;3>63;4;j0on63=f68g<>{t;ji1<7:t=2f5>4>5349nm7:i;<174?bf348m97j6;|q03f<72;q6?lj54g9>7<>=9>h0q~=8b;296~;4ij0?j63<96823g=z{:=o6=4={<1ba?2a349257?8b:p72?=838p1>on:5d896?228=i7p}<7983>7}:;h318k52386952d52z?0eg<3n2785;4>7c9~w6112909w0=n7;6e?85>:3;41e3ty8;:4?:3y>7d>=v3;4190:;o5rs2:f>5<5s49257:7;<1;a?70j2wx?4o50;0x96?>288270=6a;34f>{t;1i1<7=t=2;;>1><5:2n6964=2:`>41e3ty84k4?:2y>7<>=9;301>6j:0:;?85?n3;1><5:2j6<9m;|q0d282370=7d;34f>{t;121<7=t=2;5>1><5:2j6964=2:;>41e3ty84o4?:2y>7<0=9;301>6n:0:;?85?j3;6964=2:;>1><5:2=6<9m;|q0<<<72:q6?4;513;896>?282370=79;34f>{t;1>1<7=t=2;7>1><5:2=6964=2:7>41e3ty84:4?:2y>7<2=9;301>69:0:;?85??3;1><5:296<9m;|q0<0<72:q6?4=513;896>3282370=75;34f>{t;1:1<7=t=2;1>1><5:296964=2:3>41e3ty84>4?:2y>7<4=9;301>6=:0:;?85?;3;1><5:=n6<9m;|q0<4<72:q6?4?513;896>7282370=71;34f>{t;>l1<7=t=2;3>44>349ji:18785b13;3>63>988g=>;6110om63;59800>{t;mo1<7:t=2g;>4>534;2m7j6;<3:=?bf34>>47=<;|q0`a<72=q6?h95190894?e2m301<7n:ec8913?2:80q~=kc;290~;4m?0:4?5218a9`<=:90h1hl5244:974=z{:ni6=4;{<1f1?7?:27:5i4k9:?2=fp1>k;:0:1?87>m3n270?6d;fb?822038m7p}1}:;l91=5<4=0;e>a?<583n6io4=57;>7c54z?0a7<60;16=l>5d89>5<`=lh1688652e9~w6b02908w0=j1;3;6>;6i90om63;5981g>{t;:=1<74>?3498o7?8b:p77c=838p1>==:05a?854;3>37p}<3983>7}:;:91=564=21g>41e3ty8>k4?:3y>765=9>h01>=;:5:8yv5413:1>v3<3582<==:;:o1=:l4}r104?6=:r78?94>7c9>763=<11v>=n:181854=3;3463<3g823g=z{:9:6=4={<101?70j278?;4;8:p76d=838p1>=9:0:;?85383;713=91201>:i:05a?xu4<80;6?u2357952d<5:>=6964}r17f?6=:r788;4>899>706=9>h0q~=;2;296~;4h6=4={<173?7?02789<4>7c9~w6242909w0=;7;34f>;4<10?46s|35f94?4|5:>36<67;<166?70j2wx?9:50;0x962?28=i70=;9;6;?xu4<5:?86<9m;|q010<72:q6?97516`896162m301>8l:e`8yv5183:1>v3<5c82<==:;??1=:l4}r163?6=:r789o4>7c9>70e=<11v>8>:181852k3;3463<67823g=z{:?36=4={<16g?70j2789i4;8:p734=838p1>;k:0:;?851?3;4?:3y>70c=91201>87:05a?xu4=h0;6?u234g952d<5:?m6964}r150?6=:r789k4>899>73?=9>h0q~=:6;296~;4=o0:;o5237a9`<=z{:=;6=4<{<15a?2a349=j7:i;<145?70j2wx?;k50;6x960b282970=82;fb?850;3nj70=9d;f;?xu4>k0;6?u237c90c=:;?i1=:l4}r66f?6=:07e=07g=07>=073=075=077=5479>04`=04b=04g=04>=040=042=044==5479>064=?5479>066=07c=04e=046=;l516`8yv2283:1>v3;2e87b>;3=10h;6s|45d94?4|5=8h69h4=57;>g1?i7>52z?76g<3n27?954m5:p01b=838p19{t<=h1<71`<5=?36o?4}r67=?6=:r7?>;4;f:?71=v3;2587b>;3=10ji6s|45494?4|5=8869h4=57;>f3?97>52z?767<3n27?954nd:p012=838p19<>:5d8913?2hi0q~:;3;296~;3:90?j63;598bf>{t<=81<71`<5=?36lo4}r675?6=:r7?=h4;f:?71=50;0x917c2=l019;7:`58yv24m3:1>v3;1c87b>;3=10j:6s|42f94?4|5=;j69h4=57;>d38o7>52z?75<<3n27?954l4:p06d=838p19?7:5d8913?2h>0q~:0?j63;598b7>{t<:31<71`<5=?36l<4}r60950;0x91732=l019;7:`28yv24>3:1>v3;1287b>;3=102j6s|42794?4|5=;969h4=57;>gc>;7>52z?776<3n27?954md:p000=838p19==:5d8913?2j90q~::5;296~;3;80?j63;598ag>{t<<>1<71`<5=?36ol4}r667?6=:r7?>k4;f:?71=v3;2687b>;3=10i46s|45c94?4|5=;h69h4=57;>g28j7>52z?754<3n27?954n9:p062=838p19??:5d8913?20o0q~==a;296~;4:h0:;o5233`9`g=z{=?26=4={<66e?70j27?954l9:p7`d=83?p1>9>:ec8960d2mk01>9=:05a?82203><863;598`<>{t9?:1<7ag<5;896<5f6=9;k0q~<=4;296~;5:?0on63=23823g=z{8i96=4={<3`0?be34;h<7?8b:p560=838p1>6s|4`g94?4|V=3o70:<:5;g?!2083;?h6s|4`f94?4|V=3h70:<:5;`?!2083;>;6s|4`a94?4|V=3i70:<:5;a?!2083;>56s|4``94?4|V=3j70:<:5;b?!2083;>m6s|4`c94?4|V=3270:<:5;:?!2083;>n6s|4`;94?4|V=3370:<:5;;?!2083;>h6s|4`:94?4|V=3<70:<:5;4?!2083;>i6s|4c;94?4|V=k=70:<:5c5?!2083;>j6s|4c:94?4|V=k>70:<:5c6?!2083;==6s|4c594?4|V=k?70:<:5c7?!2083;=>6s|4c494?4|V=k870:<:5c0?!2083;=?6s|4c794?4|V=k970:<:5c1?!2083;=86s|4c694?4|V=k:70:<:5c2?!2083;=96s|4c194?4|V=k;70:<:5c3?!2083;=:6s|4c094?4|V=3m70:<:5;e?!2083;=;6s|4c394?4|V=3=70:<:5;5?!2083;=46s|4`594?4|V=3>70:<:5;6?!2083;=56s|56194?4|V<=870:<:450?!2083;=m6s|54f94?4|V70:<:5f6?!2083;<>6s|4g594?4|V=n?70:<:5f7?!2083;70:<:5a6?!2083;8j6s|4d594?4|V=i?70:<:5a7?!2083;?<6s|4d494?4|V=i870:<:5a0?!2083;?=6s|4d794?4|V=i970:<:5a1?!2083;??6s|4d694?4|V=i:70:<:5a2?!2083;?86s|4d194?4|V=i;70:<:5a3?!2083;?96s|4d094?4|V=hm70:<:5`e?!2083;?:6s|4d394?4|V=hn70:<:5`f?!2083;?;6s|4d294?4|V=ho70:<:5`g?!2083;?46s|4ed94?4|V=hh70:<:5``?!2083;?56s|51094?4|V=no70:<:5fg?!2083;?m6s|51394?4|V=nh70:<:5f`?!2083;?n6s|51294?4|V=ni70:<:5fa?!2083;?o6s|4gd94?4|V=nj70:<:5fb?!2083;?i6s|4gg94?4|V=n270:<:5f:?!2083;?j6s|4gf94?4|V=n370:<:5f;?!2083;><6s|4ga94?4|V=n:70:<:5f2?!2083;>=6s|4g694?4|V=i=70:<:5a5?!2083;>>6s|4d;94?4|V=hi70:<:5`a?!2083;>?6s|4eg94?4|V=hj70:<:5`b?!2083;>86s|51c94?4|V<:j70:<:42b?!2083;>96s|49794?4|V=2>70:<:5:6?!2083;>:6s|51694?4|V<:?70:<:427?!2083;>46s|53d94?4|V<8m70:<:40e?!2083;>o6srn`f:>5<5sA><=6saaec94?4|@==:7p`ndc83>7}O<>;0qcokc;296~N3?81vbljk:181M2092wemik50;0xL1163tdjhk4?:3yK02752zJ734=zfho:6=4={I645>{iil81<7vF;709~jdc22909wE:81:me`0=838pD99>;|lba2<72;qC8:?4}ocf5<5sA><=6saadc94?4|@==:7p`nec83>7}O<>;0qcojc;296~N3?81vblkk:181M2092wemhk50;0xL1163tdjik4?:3yK02752zJ734=zfhl:6=4={I645>{iio81<7vF;709~jd`22909wE:81:mec0=838pD99>;|lbb2<72;qC8:?4}oce5<5sA><=6saagc94?4|@==:7p`nfc83>7}O<>;0qcoic;296~N3?81vblhk:181M2092wemkk50;0xL1163tdjjk4?:3yK02752zJ734=zfk::6=4={I645>{ij981<7vF;709~jg622909wE:81:mf50=838pD99>;|la42<72;qC8:?4}o`35<5sA><=6sab1c94?4|@==:7p`m0c83>7}O<>;0qcl?c;296~N3?81vbo>k:181M2092wen=k50;0xL1163tdi52zJ734=zfk;:6=4={I645>{ij881<7vF;709~jg722909wE:81:mf40=838pD99>;|la52<72;qC8:?4}o;2e?6=9rB?;<5rn87:>5<6sA><=6sa94c94?7|@==:7p`65c83>4}O<>;0qc7:c;295~N3?81vb4;k:182M2092we58k50;3xL1163td29k4?:0yK02751zJ734=zf0<:6=4>{I645>{i1?81<7?tH552?xh>>:0;6;|l:22<728qC8:?4}o;55<6sA><=6sa97c94?7|@==:7p`66c83>4}O<>;0qc79c;295~N3?81vb48k:182M2092we5;k50;3xL1163td2:k4?:0yK02751zJ734=zf0=:6=4>{I645>{i1>81<7?tH552?xh>?:0;6;|l:32<728qC8:?4}o;45<6sA><=6sa96c94?7|@==:7p`67c83>4}O<>;0qc78c;295~N3?81vb49k:182M2092we5:k50;3xL1163td2;k4?:0yK02751zJ734=zf02:6=4>{I645>{i1181<7?tH552?xh>0:0;62290:wE:81:m==0=83;pD99>;|l:<2<728qC8:?4}o;;5<6sA><=6sa99c94?7|@==:7p`68c83>4}O<>;0qc77c;295~N3?81vb46k:182M2092we55k50;3xL1163td24k4?:0yK02751zJ734=zf03:6=4>{I645>{i1081<7?tH552?xh>1:0;6<3:1=vF;709~j;|l:=2<728qC8:?4}o;:5<6sA><=6sa98c94?7|@==:7p`69c83>4}O<>;0qc76c;295~N3?81vb47k:182M2092we54k50;3xL1163td25k4?:0yK02751zJ734=zf0k:6=4>{I645>{i1h81<7?tH552?xh>i:0;6;|l:e2<728qC8:?4}o;b5<6sA><=6sa9`c94?7|@==:7p`6ac83>4}O<>;0qc7nc;295~N3?81vb4ok:182M2092we5lk50;3xL1163td2mk4?:0yK02751zJ734=zf0h:6=4>{I645>{i1k81<7?tH552?xh>j:0;6;|l:f2<728qC8:?4}o;a5<6sA><=6sa9cc94?7|@==:7p`6bc83>4}O<>;0qc7mc;295~N3?81vb4lk:182M2092we5ok50;3xL1163td2nk4?:0yK02751zJ734=zf0i:6=4>{I645>{i1j81<7?tH552?xh>k:0;6;|l:g2<728qC8:?4}o;`5<6sA><=6sa9bc94?7|@==:7p`6cc83>4}O<>;0qc7lc;295~N3?81vb4mk:182M2092we5nk50;3xL1163td2ok4?:0yK02751zJ734=zf0n:6=4>{I645>{i1m81<7?tH552?xh>l:0;6;|l:`2<728qC8:?4}o;g5<6sA><=6sa9ec94?7|@==:7p`6dc83>4}O<>;0qc7kc;295~N3?81vb4jk:182M2092we5ik50;3xL1163td2hk4?:0yK02751zJ734=zf0o:6=4>{I645>{i1l81<7?tH552?xh>m:0;6;|l:a2<728qC8:?4}o;f5<6sA><=6sa9dc94?7|@==:7p`6ec83>4}O<>;0qc7jc;295~N3?81vb4kk:182M2092we5hk50;3xL1163td2ik4?:0yK02751zJ734=zf0l:6=4>{I645>{i1o81<7?tH552?xh>n:0;6;|l:b2<728qC8:?4}o;e5<6sA><=6sa9gc94?7|@==:7p`6fc83>4}O<>;0qc7ic;295~N3?81vb4hk:182M2092we5kk50;3xL1163td2jk4?:0yK02751zJ734=zfh::6=4>{I645>{ii981<7?tH552?xhf8:0;6;|lb42<728qC8:?4}oc35<6sA><=6saa1c94?7|@==:7p`n0c83>4}O<>;0qco?c;295~N3?81vbl>k:182M2092wem=k50;3xL1163tdj51zJ734=zfh;:6=4>{I645>{ii881<7?tH552?xhf9:0;6;|lb52<728qC8:?4}oc25<6sA><=6saa0c94?7|@==:7p`n1c83>4}O<>;0qco>c;295~N3?81vbl?k:182M2092wem51zJ734=zfh8:6=4>{I645>{ii;81<7?tH552?xhf::0;6;|lb62<728qC8:?4}oc15<6sA><=6saa3c94?7|@==:7p`n2c83>4}O<>;0qco=c;295~N3?81vblk4?:0yK02751zJ734=zfh9:6=4>{I645>{ii:81<7?tH552?xhf;:0;6;|lb72<728qC8:?4}oc05<6sA><=6saa2c94?7|@==:7p`n3c83>4}O<>;0qcok50;3xL1163tdj?k4?:0yK02751zJ734=zfh>:6=4>{I645>{ii=81<7?tH552?xhf<:0;6;|lb02<728qC8:?4}oc75<6sA><=6saa5c94?7|@==:7p`n4c83>4}O<>;0qco;c;295~N3?81vbl:k:182M2092wem9k50;3xL1163tdj8k4?:0yK027<7>51zJ734=zfh?:6=4>{I645>{ii<81<7?tH552?xhf=:0;6;|lb12<728qC8:?4}oc65<6sA><=6saa4c94?7|@==:7p`n5c83>4}O<>;0qco:c;295~N3?81vbl;k:182M2092wem8k50;3xL1163tdj9k4?:0yK02751zJ734=zfh<:6=4>{I645>{ii?81<7?tH552?xhf>:0;6;|lb22<728qC8:?4}oc55<6sA><=6saa7c94?7|@==:7p`n6c83>4}O<>;0qco9c;295~N3?81vbl8k:182M2092wem;k50;3xL1163tdj:k4?:0yK02751zJ734=zfh=:6=4>{I645>{ii>81<7?tH552?xhf?:0;6;|lb32<728qC8:?4}oc45<6sA><=6saa6c94?7|@==:7p`n7c83>4}O<>;0qco8c;295~N3?81vbl9k:182M2092wem:k50;3xL1163tdj;k4?:0yK02751zJ734=zfh2:6=4>{I645>{ii181<7?tH552?xhf0:0;62290:wE:81:me=0=83;pD99>;|lb<2<728qC8:?4}oc;5<6sA><=6saa9c94?7|@==:7p`n8c83>4}O<>;0qco7c;295~N3?81vbl6k:182M2092wem5k50;3xL1163tdj4k4?:0yK02751zJ734=zfh3:6=4>{I645>{ii081<7?tH552?xhf1:0;6<3:1=vF;709~jd?2290:wE:81:me<0=83;pD99>;|lb=2<728qC8:?4}oc:5<6sA><=6saa8c94?7|@==:7p`n9c83>4}O<>;0qco6c;295~N3?81vbl7k:182M2092wem4k50;3xL1163tdj5k4?:0yK02751zJ734=zfhk:6=4>{I645>{iih81<7?tH552?xhfi:0;6;|lbe2<728qC8:?4}ocb5<6sA><=6saa`c94?7|@==:7p`nac83>4}O<>;0qconc;295~N3?81vblok:182M2092wemlk50;3xL1163tdjmk4?:0yK02751zJ734=zfhh:6=4>{I645>{iik81<7?tH552?xhfj:0;6;|lbf2<728qC8:?4}oca5<6sA><=6saacc94?7|@==:7p`nbc83>4}O<>;0qcomc;295~N3?81vbllk:182M2092wemok50;3xL1163tdjnk4?:0yK02751zJ734=zfhi:6=4>{I645>{iij81<7?tH552?xhfk:0;6;|lbg2<728qC8:?4}oc`5<6sA><=6saabc94?7|@==:7p`ncc83>4}O<>;0qcolc;295~N3?81vblmk:182M2092wemnk50;3xL1163tdjok4?:0yK02751zJ734=zfhn:6=4>{I645>{iim81<7?tH552?xhfl:0;6;|lb`2<728qC8:?4}ocg - - + + diff --git a/usrp2/extramfifo/ext_fifo.v b/usrp2/extramfifo/ext_fifo.v index 398e5ef81..c6a64fc65 100644 --- a/usrp2/extramfifo/ext_fifo.v +++ b/usrp2/extramfifo/ext_fifo.v @@ -15,8 +15,10 @@ // packed into the IO ring. // + //`define NO_EXT_FIFO + module ext_fifo - #(parameter INT_WIDTH=36,EXT_WIDTH=18,DEPTH=19) + #(parameter INT_WIDTH=36,EXT_WIDTH=18,RAM_DEPTH=19,FIFO_DEPTH=19) ( input int_clk, input ext_clk, @@ -24,7 +26,7 @@ module ext_fifo input [EXT_WIDTH-1:0] RAM_D_pi, output [EXT_WIDTH-1:0] RAM_D_po, output RAM_D_poe, - output [DEPTH-1:0] RAM_A, + output [RAM_DEPTH-1:0] RAM_A, output RAM_WEn, output RAM_CENn, output RAM_LDn, @@ -59,16 +61,15 @@ module ext_fifo .empty(empty1)); assign dst_rdy_o = ~full1; - -/* -----\/----- EXCLUDED -----\/----- + +`ifdef NO_EXT_FIFO assign space_avail = ~full2; assign data_avail = ~empty1; assign read_data = write_data; - -----/\----- EXCLUDED -----/\----- */ +`else - // External FIFO running at ext clock rate and 18 bit width. - nobl_fifo #(.WIDTH(EXT_WIDTH),.DEPTH(DEPTH),.FDEPTH(DEPTH)) + nobl_fifo #(.WIDTH(EXT_WIDTH),.RAM_DEPTH(RAM_DEPTH),.FIFO_DEPTH(FIFO_DEPTH)) nobl_fifo_i1 ( .clk(ext_clk), @@ -83,14 +84,14 @@ module ext_fifo .RAM_OEn(RAM_OEn), .RAM_CE1n(RAM_CE1n), .write_data(write_data), - .write_strobe(space_avail & ~empty1 ), + .write_strobe(~empty1 ), .space_avail(space_avail), .read_data(read_data), - .read_strobe(data_avail & ~full2), - .data_avail(data_avail), - .upstream_full(almost_full2) + .read_strobe(~almost_full2), + .data_avail(data_avail) ); - +`endif // !`ifdef NO_EXT_FIFO + // FIFO buffers data read from external FIFO into DSP clk domain and to TX DSP. fifo_xlnx_512x36_2clk_18to36 fifo_xlnx_512x36_2clk_18to36_i1 ( @@ -98,7 +99,7 @@ module ext_fifo .wr_clk(ext_clk), .rd_clk(int_clk), .din(read_data), // Bus [17 : 0] - .wr_en(data_avail & ~full2 ), + .wr_en(data_avail), .rd_en(dst_rdy_i), .dout(dataout), // Bus [35 : 0] .full(full2), @@ -106,5 +107,5 @@ module ext_fifo .empty(empty2)); assign src_rdy_o = ~empty2; - + endmodule // ext_fifo diff --git a/usrp2/extramfifo/ext_fifo_tb.v b/usrp2/extramfifo/ext_fifo_tb.v index a93d524d5..db5f31a9d 100644 --- a/usrp2/extramfifo/ext_fifo_tb.v +++ b/usrp2/extramfifo/ext_fifo_tb.v @@ -1,7 +1,8 @@ `timescale 1ns / 1ps `define INT_WIDTH 36 `define EXT_WIDTH 18 -`define DEPTH 19 +`define RAM_DEPTH 19 +`define FIFO_DEPTH 8 `define DUMP_VCD_FULL module ext_fifo_tb(); @@ -17,7 +18,7 @@ module ext_fifo_tb(); wire [`EXT_WIDTH-1:0] RAM_D_po; wire [`EXT_WIDTH-1:0] RAM_D; wire RAM_D_poe; - wire [`DEPTH-1:0] RAM_A; + wire [`RAM_DEPTH-1:0] RAM_A; wire RAM_WEn; wire RAM_CENn; wire RAM_LDn; @@ -30,6 +31,7 @@ module ext_fifo_tb(); reg [`INT_WIDTH-1:0] ref_dataout; wire src_rdy_o; // not EMPTY reg dst_rdy_i; + integer ether_frame; // Clocks @@ -39,7 +41,6 @@ module ext_fifo_tb(); begin int_clk <= 0; ext_clk <= 0; - datain <= 0; ref_dataout <= 1; src_rdy_i <= 0; dst_rdy_i <= 0; @@ -53,6 +54,9 @@ module ext_fifo_tb(); initial begin + datain <= 0; + ether_frame <= 0; + rst <= 1; repeat (5) @(negedge int_clk); rst <= 0; @@ -62,6 +66,18 @@ module ext_fifo_tb(); @(negedge int_clk); datain <= datain + dst_rdy_o; src_rdy_i <= dst_rdy_o; + // Simulate inter-frame time + if (ether_frame == 1500) + begin + ether_frame <= 0; + repeat(1600) + begin + @(negedge int_clk); + src_rdy_i <= 0; + end + end + else + ether_frame <= ether_frame + dst_rdy_o; end end // initial begin @@ -73,8 +89,20 @@ module ext_fifo_tb(); // Fall through fifo, first output already valid if (dataout !== ref_dataout) $display("Error: Expected %x, got %x",ref_dataout, dataout); - - while (ref_dataout < 10000) + // Decimate by 16 rate + while (ref_dataout < 2000) + begin + @(negedge int_clk); + ref_dataout <= ref_dataout + src_rdy_o ; + dst_rdy_i <= src_rdy_o; + if ((dataout !== ref_dataout) && src_rdy_o) + $display("Error: Expected %x, got %x",ref_dataout, dataout); + @(negedge int_clk); + dst_rdy_i <= 0; + repeat(14) @(negedge int_clk); + end // while (ref_dataout < 10000) + // Decimate by 8 rate + while (ref_dataout < 4000) begin @(negedge int_clk); ref_dataout <= ref_dataout + src_rdy_o ; @@ -84,7 +112,33 @@ module ext_fifo_tb(); @(negedge int_clk); dst_rdy_i <= 0; repeat(6) @(negedge int_clk); - end + end // while (ref_dataout < 10000) + // Decimate by 4 rate + while (ref_dataout < 6000) + begin + @(negedge int_clk); + ref_dataout <= ref_dataout + src_rdy_o ; + dst_rdy_i <= src_rdy_o; + if ((dataout !== ref_dataout) && src_rdy_o) + $display("Error: Expected %x, got %x",ref_dataout, dataout); + @(negedge int_clk); + dst_rdy_i <= 0; + repeat(2) @(negedge int_clk); + end // while (ref_dataout < 10000) + // Max rate + while (ref_dataout < 10000) + begin + @(negedge int_clk); + ref_dataout <= ref_dataout + src_rdy_o ; + dst_rdy_i <= src_rdy_o; + if ((dataout !== ref_dataout) && src_rdy_o) + $display("Error: Expected %x, got %x",ref_dataout, dataout); + + end // while (ref_dataout < 10000) + + @(negedge int_clk); + $finish; + end @@ -228,7 +282,7 @@ module ext_fifo_tb(); endgenerate - wire [`DEPTH-1:0] RAM_A_ext; + wire [`RAM_DEPTH-1:0] RAM_A_ext; wire RAM_WEn_ext,RAM_LDn_ext,RAM_CE1n_ext,RAM_OEn_ext,RAM_CENn_ext; assign #1 RAM_D_pi = RAM_D_pi_ext; @@ -292,7 +346,7 @@ module ext_fifo_tb(); ext_fifo - #(.INT_WIDTH(`INT_WIDTH),.EXT_WIDTH(`EXT_WIDTH),.DEPTH(`DEPTH)) + #(.INT_WIDTH(`INT_WIDTH),.EXT_WIDTH(`EXT_WIDTH),.RAM_DEPTH(`RAM_DEPTH),.FIFO_DEPTH(`FIFO_DEPTH)) ext_fifo_i1 ( .int_clk(int_clk), diff --git a/usrp2/extramfifo/nobl_fifo.v b/usrp2/extramfifo/nobl_fifo.v index 03e3f5223..19f5fb84e 100644 --- a/usrp2/extramfifo/nobl_fifo.v +++ b/usrp2/extramfifo/nobl_fifo.v @@ -1,18 +1,19 @@ // Since this FIFO uses a ZBT/NoBL SRAM for its storage which is a since port // device it can only sustain data throughput at half the RAM clock rate. // Fair arbitration to ensure this occurs is included in this logic and -// requests for transactions that can not be completed are held off by (re)using the -// "full" and "empty" flags. +// requests for transactions that can not be completed are held off. +// This FIFO requires a an external signal driving read_strobe that assures space for at least 6 +// reads since this the theopretical maximum number in flight due to pipeling. module nobl_fifo - #(parameter WIDTH=18,DEPTH=19,FDEPTH=10) + #(parameter WIDTH=18,RAM_DEPTH=19,FIFO_DEPTH=19) ( input clk, input rst, input [WIDTH-1:0] RAM_D_pi, output [WIDTH-1:0] RAM_D_po, output RAM_D_poe, - output [DEPTH-1:0] RAM_A, + output [RAM_DEPTH-1:0] RAM_A, output RAM_WEn, output RAM_CENn, output RAM_LDn, @@ -21,42 +22,32 @@ module nobl_fifo input [WIDTH-1:0] write_data, input write_strobe, output reg space_avail, - output reg [WIDTH-1:0] read_data, - input read_strobe, - output reg data_avail, - input upstream_full // (Connect to almost full flag upstream) + output [WIDTH-1:0] read_data, + input read_strobe, // Triggers a read, result in approximately 6 cycles. + output data_avail // Qulaifys read data available this cycle on read_data. ); - reg [FDEPTH-1:0] capacity; - reg [FDEPTH-1:0] wr_pointer; - reg [FDEPTH-1:0] rd_pointer; - wire [DEPTH-1:0] address; - reg supress; - reg data_avail_int; // Data available with high latency from ext FIFO flag - wire [WIDTH-1:0] data_in; - wire data_in_valid; - reg [WIDTH-1:0] read_data_pending; - reg pending_avail; - wire read_strobe_int; + reg [FIFO_DEPTH-1:0] capacity; + reg [FIFO_DEPTH-1:0] wr_pointer; + reg [FIFO_DEPTH-1:0] rd_pointer; + wire [RAM_DEPTH-1:0] address; + reg data_avail_int; // Internal not empty flag. - - - assign read = read_strobe_int && data_avail_int; - assign write = write_strobe && space_avail; + assign read = read_strobe && data_avail_int; + assign write = write_strobe && space_avail; - // When a read and write collision occur, supress the availability flags next cycle + // When a read and write collision occur, supress the space_avail flag next cycle // and complete write followed by read over 2 cycles. This forces balanced arbitration // and makes for a simple logic design. always @(posedge clk) if (rst) begin - capacity <= 1 << (FDEPTH-1); + capacity <= 1 << (FIFO_DEPTH-1); wr_pointer <= 0; rd_pointer <= 0; space_avail <= 0; data_avail_int <= 0; - supress <= 0; end else begin @@ -64,187 +55,15 @@ module nobl_fifo // Capacity is already zero; Capacity is 1 and write is asserted (lookahead); both read and write are asserted (collision) space_avail <= ~((capacity == 0) || (read&&write) || ((capacity == 1) && write) ); // Capacity has 1 cycle delay so look ahead here for corner case of read of last item in FIFO. - data_avail_int <= ~((capacity == (1 << (FDEPTH-1))) || (read&&write) || ((capacity == ((1 << (FDEPTH-1))-1)) && read) ); - supress <= read && write; + data_avail_int <= ~((capacity == (1 << (FIFO_DEPTH-1))) || ((capacity == ((1 << (FIFO_DEPTH-1))-1)) && read) ); wr_pointer <= wr_pointer + write; - rd_pointer <= rd_pointer + ((~write && read) || supress); - capacity <= capacity - write + ((~write && read) || supress); // REVISIT + rd_pointer <= rd_pointer + (~write && read); + capacity <= capacity - write + (~write && read) ; end // else: !if(rst) assign address = write ? wr_pointer : rd_pointer; - assign enable = write || read || supress; - - // - // Need to have first item in external FIFO moved into local registers for single cycle latency and throughput on read. - // 2 local registers are provided so that a read every other clock cycle can be sustained. - // No fowarding logic is provided to bypass the external FIFO as latency is of no concern. - // - always @(posedge clk) - if (rst) - begin - read_data <= 0; - data_avail <= 0; - read_data_pending <= 0; - pending_avail <= 0; - end - else - begin - case({read_strobe,data_in_valid}) - // No read externally, no new data arriving from external FIFO - 2'b00: begin - case({data_avail,pending_avail}) - // Start Data empty, Pending empty. - // - // End Data full, Pending empty - 2'b00: begin - read_data <= read_data; - data_avail <= data_avail; - read_data_pending <= read_data_pending ; - pending_avail <= pending_avail; - end - // Start Data empty, Pending full. - // Data <= Pending, - // End Data full, Penidng empty. - 2'b01: begin - read_data <= read_data_pending; - data_avail <= 1'b1; - read_data_pending <= read_data_pending ; - pending_avail <= 1'b0; - end - // Start Data full, Pending empty. - // - // End Data full, Pending empty - 2'b10: begin - read_data <= read_data; - data_avail <= data_avail; - read_data_pending <= read_data_pending ; - pending_avail <= pending_avail; - end - // Start Data full, Pending full. - // - // End Data full, Pending full. - 2'b11: begin - read_data <= read_data; - data_avail <= data_avail; - read_data_pending <= read_data_pending ; - pending_avail <= pending_avail; - end - endcase - end - // No read externally, new data arriving from external FIFO - 2'b01: begin - case({data_avail,pending_avail}) - // Start Data empty, Pending empty. - // Data <= FIFO - // End Data full, Pending empty - 2'b00: begin - read_data <= data_in; - data_avail <= 1'b1; - read_data_pending <= read_data_pending ; - pending_avail <= 1'b0; - end - // Start Data empty, Pending full. - // Data <= Pending, Pending <= FIFO - // End Data full, Penidng full. - 2'b01: begin - read_data <= read_data_pending; - data_avail <= 1'b1; - read_data_pending <= data_in ; - pending_avail <= 1'b1; - end - // Start Data full, Pending empty. - // Pending <= FIFO - // End Data full, Pending full - 2'b10: begin - read_data <= read_data; - data_avail <= 1'b1; - read_data_pending <= data_in ; - pending_avail <= 1'b1; - end - // Data full, Pending full. - // *ILLEGAL STATE* - 2'b11: begin - - end - endcase - end - // Read externally, no new data arriving from external FIFO - 2'b10: begin - case({data_avail,pending_avail}) - // Start Data empty, Pending empty. - // *ILLEGAL STATE* - 2'b00: begin - - end - // Start Data empty, Pending full. - // *ILLEGAL STATE* - 2'b01: begin - - end - // Start Data full, Pending empty. - // Out <= Data - // End Data empty, Pending empty. - 2'b10: begin - read_data <= read_data; - data_avail <= 1'b0; - read_data_pending <= read_data_pending ; - pending_avail <= 1'b0; - end - // Start Data full, Pending full. - // Out <= Data, - // End Data full, Pending empty - 2'b11: begin - read_data <= read_data_pending; - data_avail <= 1'b1; - read_data_pending <= read_data_pending ; - pending_avail <= 1'b0; - end - endcase - end - // Read externally, new data arriving from external FIFO - 2'b11: begin - case({data_avail,pending_avail}) - // Start Data empty, Pending empty. - // *ILLEGAL STATE* - 2'b00: begin - - end - // Start Data empty, Pending full. - // *ILLEGAL STATE* - 2'b01: begin - - end - // Start Data full, Pending empty. - // Out <= Data, Data <= FIFO - // End Data full, Pending empty. - 2'b10: begin - read_data <= data_in; - data_avail <= 1'b1; - read_data_pending <= read_data_pending ; - pending_avail <= 1'b0; - end - // Start Data full, Pending full. - // Out <= Data, Data <= Pending, Pending <= FIFO - // End Data full, Pending full - 2'b11: begin - read_data <= read_data_pending; - data_avail <= 1'b1; - read_data_pending <= data_in ; - pending_avail <= 1'b1; - end - endcase - end - endcase - end + assign enable = write || read; - // Start an external FIFO read as soon as a read of the buffer reg is strobed to minimise refill latency. - // If the buffer reg or the pending buffer reg is already empty also pre-emptively start a read. - // However there must be something in the main external FIFO to read for this to occur!. - // Pay special attention to upstream devices signalling full due to the number of potential in-flight reads\ that need - // to be stalled and stored somewhere. - // This means that there can be 3 outstanding reads to the ext FIFO active at any time helping to hide latency. - assign read_strobe_int = (read_strobe && data_avail && ~pending_avail && ~upstream_full) || (~data_avail && ~pending_avail && ~upstream_full); - // // Simple NoBL SRAM interface, 4 cycle read latency. @@ -265,10 +84,12 @@ module nobl_fifo .RAM_CE1n(RAM_CE1n), .address(address), .data_out(write_data), - .data_in(data_in), - .data_in_valid(data_in_valid), + .data_in(read_data), + .data_in_valid(data_avail), .write(write), .enable(enable) ); + + endmodule // nobl_fifo diff --git a/usrp2/top/u2_rev3/u2_core_udp.v b/usrp2/top/u2_rev3/u2_core_udp.v index b0c8e6d52..c2811c833 100644 --- a/usrp2/top/u2_rev3/u2_core_udp.v +++ b/usrp2/top/u2_rev3/u2_core_udp.v @@ -648,11 +648,12 @@ module u2_core wire tx_src_rdy, tx_dst_rdy; wire [31:0] debug_vt; - ext_fifo #(.EXT_WIDTH(18),.INT_WIDTH(36),.DEPTH(19)) + ext_fifo #(.EXT_WIDTH(18),.INT_WIDTH(36),.RAM_DEPTH(19),.FIFO_DEPTH(8)) ext_fifo_i1 ( .int_clk(dsp_clk), .ext_clk(clk_to_mac), +// .ext_clk(wb_clk), .rst(dsp_rst), .RAM_D_pi(RAM_D_pi), .RAM_D_po(RAM_D_po), -- cgit v1.2.3 From 9bfab308d55c2b253f1ec9f0c998ee9920e0468f Mon Sep 17 00:00:00 2001 From: Ian Buckley Date: Thu, 19 Aug 2010 17:28:07 -0700 Subject: Added a bunch of debug signals. --- usrp2/extramfifo/ext_fifo.v | 14 +++++++++++--- usrp2/extramfifo/ext_fifo_tb.cmd | 1 + usrp2/top/u2_rev3/u2_core_udp.v | 9 +++++---- usrp2/vrt/vita_tx_deframer.v | 4 ++-- 4 files changed, 19 insertions(+), 9 deletions(-) diff --git a/usrp2/extramfifo/ext_fifo.v b/usrp2/extramfifo/ext_fifo.v index c6a64fc65..b17fde10b 100644 --- a/usrp2/extramfifo/ext_fifo.v +++ b/usrp2/extramfifo/ext_fifo.v @@ -37,7 +37,8 @@ module ext_fifo output dst_rdy_o, // not FULL output [INT_WIDTH-1:0] dataout, output src_rdy_o, // not EMPTY - input dst_rdy_i // READ + input dst_rdy_i, // READ + output reg [31:0] debug ); wire [EXT_WIDTH-1:0] write_data; @@ -46,7 +47,8 @@ module ext_fifo wire almost_full2, full2, empty2; wire [INT_WIDTH-1:0] data_to_fifo; wire [INT_WIDTH-1:0] data_from_fifo; - + wire [FIFO_DEPTH-1:0] capacity; + // FIFO buffers data from UDP engine into external FIFO clock domain. fifo_xlnx_512x36_2clk_36to18 fifo_xlnx_512x36_2clk_36to18_i1 ( @@ -88,7 +90,8 @@ module ext_fifo .space_avail(space_avail), .read_data(read_data), .read_strobe(~almost_full2), - .data_avail(data_avail) + .data_avail(data_avail), + .capacity(capacity) ); `endif // !`ifdef NO_EXT_FIFO @@ -107,5 +110,10 @@ module ext_fifo .empty(empty2)); assign src_rdy_o = ~empty2; + always @ (posedge int_clk) + debug[31:16] = {12'h0,empty2,full1,dst_rdy_i,src_rdy_i }; + + always @ (posedge ext_clk) + debug[15:0] = {3'h0,empty1,space_avail,data_avail,full2,almost_full2,capacity[7:0] }; endmodule // ext_fifo diff --git a/usrp2/extramfifo/ext_fifo_tb.cmd b/usrp2/extramfifo/ext_fifo_tb.cmd index b0ab830dc..521f88f21 100644 --- a/usrp2/extramfifo/ext_fifo_tb.cmd +++ b/usrp2/extramfifo/ext_fifo_tb.cmd @@ -1,6 +1,7 @@ /opt/Xilinx/12.1/ISE_DS/ISE/verilog/src/glbl.v -y . -y ../coregen/ +-y ../fifo -y ../models -y /home/ianb/usrp-fpga/usrp2/sdr_lib -y /home/ianb/usrp-fpga/usrp2/control_lib diff --git a/usrp2/top/u2_rev3/u2_core_udp.v b/usrp2/top/u2_rev3/u2_core_udp.v index c2811c833..f8ea5330b 100644 --- a/usrp2/top/u2_rev3/u2_core_udp.v +++ b/usrp2/top/u2_rev3/u2_core_udp.v @@ -171,7 +171,7 @@ module u2_core wire [31:0] atr_lines; wire [31:0] debug_rx, debug_mac, debug_mac0, debug_mac1, debug_tx_dsp, debug_txc, - debug_serdes0, debug_serdes1, debug_serdes2, debug_rx_dsp, debug_udp; + debug_serdes0, debug_serdes1, debug_serdes2, debug_rx_dsp, debug_udp, debug_extfifo; wire [15:0] ser_rx_occ, ser_tx_occ, dsp_rx_occ, dsp_tx_occ, eth_rx_occ, eth_tx_occ, eth_rx_occ2; wire ser_rx_full, ser_tx_full, dsp_rx_full, dsp_tx_full, eth_rx_full, eth_tx_full, eth_rx_full2; @@ -669,7 +669,8 @@ module u2_core .dst_rdy_o(rd1_ready_i), // not FULL .dataout(tx_data), .src_rdy_o(tx_src_rdy), // not EMPTY - .dst_rdy_i(tx_dst_rdy) + .dst_rdy_i(tx_dst_rdy), + .debug(debug_extfifo) ); vita_tx_chain #(.BASE_CTRL(SR_TX_CTRL), .BASE_DSP(SR_TX_DSP), @@ -712,8 +713,8 @@ module u2_core // ///////////////////////////////////////////////////////////////////////////////////////// // Debug Pins - assign debug_clk = 2'b00; - assign debug = 32'd0; + assign debug_clk = {dsp_clk, clk_to_mac}; + assign debug = debug_extfifo; assign debug_gpio_0 = 32'd0; assign debug_gpio_1 = 32'd0; diff --git a/usrp2/vrt/vita_tx_deframer.v b/usrp2/vrt/vita_tx_deframer.v index f9cd7d00d..b62507092 100644 --- a/usrp2/vrt/vita_tx_deframer.v +++ b/usrp2/vrt/vita_tx_deframer.v @@ -84,7 +84,7 @@ module vita_tx_deframer seqnum_err <= 0; end else - if((vita_state == VITA_STORE) & fifo_space) + if((vita_state == VITA_STORE) & fifo_space ) //& src_rdy_i) if(eop) if(has_trailer_reg) vita_state <= VITA_TRAILER; @@ -183,7 +183,7 @@ module vita_tx_deframer 3: sample_d <= data_i[31:0]; endcase // case (vector_phase) - wire store = (vita_state == VITA_STORE); + wire store = (vita_state == VITA_STORE) ; //& src_rdy_i; fifo_short #(.WIDTH(FIFOWIDTH)) short_tx_q (.clk(clk), .reset(reset), .clear(clear), .datain(fifo_i), .src_rdy_i(store), .dst_rdy_o(fifo_space), -- cgit v1.2.3 From 9d4fa0e2980766cafa51f3dc6d1b1a2e257ad58d Mon Sep 17 00:00:00 2001 From: Ian Buckley Date: Thu, 19 Aug 2010 17:30:31 -0700 Subject: Added capacity to the module pinout --- usrp2/extramfifo/nobl_fifo.v | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/usrp2/extramfifo/nobl_fifo.v b/usrp2/extramfifo/nobl_fifo.v index 19f5fb84e..cec2a5c4b 100644 --- a/usrp2/extramfifo/nobl_fifo.v +++ b/usrp2/extramfifo/nobl_fifo.v @@ -24,10 +24,11 @@ module nobl_fifo output reg space_avail, output [WIDTH-1:0] read_data, input read_strobe, // Triggers a read, result in approximately 6 cycles. - output data_avail // Qulaifys read data available this cycle on read_data. + output data_avail, // Qulaifys read data available this cycle on read_data. + output reg [FIFO_DEPTH-1:0] capacity ); - reg [FIFO_DEPTH-1:0] capacity; + //reg [FIFO_DEPTH-1:0] capacity; reg [FIFO_DEPTH-1:0] wr_pointer; reg [FIFO_DEPTH-1:0] rd_pointer; wire [RAM_DEPTH-1:0] address; @@ -43,7 +44,7 @@ module nobl_fifo always @(posedge clk) if (rst) begin - capacity <= 1 << (FIFO_DEPTH-1); + capacity <= (1 << FIFO_DEPTH) - 1; wr_pointer <= 0; rd_pointer <= 0; space_avail <= 0; -- cgit v1.2.3 From a782395e91a9d2e22369ca35f74421a91f266060 Mon Sep 17 00:00:00 2001 From: Matt Ettus Date: Thu, 19 Aug 2010 20:25:15 -0700 Subject: capacity logic fix --- usrp2/extramfifo/nobl_fifo.v | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/usrp2/extramfifo/nobl_fifo.v b/usrp2/extramfifo/nobl_fifo.v index cec2a5c4b..62229e6c2 100644 --- a/usrp2/extramfifo/nobl_fifo.v +++ b/usrp2/extramfifo/nobl_fifo.v @@ -56,7 +56,7 @@ module nobl_fifo // Capacity is already zero; Capacity is 1 and write is asserted (lookahead); both read and write are asserted (collision) space_avail <= ~((capacity == 0) || (read&&write) || ((capacity == 1) && write) ); // Capacity has 1 cycle delay so look ahead here for corner case of read of last item in FIFO. - data_avail_int <= ~((capacity == (1 << (FIFO_DEPTH-1))) || ((capacity == ((1 << (FIFO_DEPTH-1))-1)) && read) ); + data_avail_int <= ~((capacity == ((1 << FIFO_DEPTH)-1)) || ((capacity == ((1 << FIFO_DEPTH)-2)) && read) ); wr_pointer <= wr_pointer + write; rd_pointer <= rd_pointer + (~write && read); capacity <= capacity - write + (~write && read) ; -- cgit v1.2.3 From b4d3dba56fd7dd709ec26b89a2e17002e77b202a Mon Sep 17 00:00:00 2001 From: ianb Date: Wed, 25 Aug 2010 16:32:43 -0700 Subject: Corrected extfifo code so that all registers that are on SRAM signals are packed into IOBs Explcit drives and skews added to GPIO pins Corrected minor error in FIFO logic that showed data avail internally incorrectly --- usrp2/extramfifo/ext_fifo.v | 10 +++++-- usrp2/extramfifo/nobl_fifo.v | 4 +-- usrp2/extramfifo/nobl_if.v | 12 +++++--- usrp2/top/u2_rev3/u2_core_udp.v | 15 ++++++---- usrp2/top/u2_rev3/u2_rev3.ucf | 64 ++++++++++++++++++++--------------------- 5 files changed, 59 insertions(+), 46 deletions(-) diff --git a/usrp2/extramfifo/ext_fifo.v b/usrp2/extramfifo/ext_fifo.v index b17fde10b..2af59a75d 100644 --- a/usrp2/extramfifo/ext_fifo.v +++ b/usrp2/extramfifo/ext_fifo.v @@ -38,7 +38,8 @@ module ext_fifo output [INT_WIDTH-1:0] dataout, output src_rdy_o, // not EMPTY input dst_rdy_i, // READ - output reg [31:0] debug + output reg [31:0] debug, + output reg [31:0] debug2 ); wire [EXT_WIDTH-1:0] write_data; @@ -111,9 +112,12 @@ module ext_fifo assign src_rdy_o = ~empty2; always @ (posedge int_clk) - debug[31:16] = {12'h0,empty2,full1,dst_rdy_i,src_rdy_i }; + debug[31:28] <= {empty2,full1,dst_rdy_i,src_rdy_i }; always @ (posedge ext_clk) - debug[15:0] = {3'h0,empty1,space_avail,data_avail,full2,almost_full2,capacity[7:0] }; + debug[27:0] <= {RAM_WEn,RAM_CE1n,RAM_A[3:0],read_data[17:0],empty1,space_avail,data_avail,almost_full2 }; + always@ (posedge ext_clk) +// debug2[31:0] <= {write_data[15:0],read_data[15:0]}; + debug2[31:0] <= 0; endmodule // ext_fifo diff --git a/usrp2/extramfifo/nobl_fifo.v b/usrp2/extramfifo/nobl_fifo.v index 62229e6c2..4c009d980 100644 --- a/usrp2/extramfifo/nobl_fifo.v +++ b/usrp2/extramfifo/nobl_fifo.v @@ -47,7 +47,7 @@ module nobl_fifo capacity <= (1 << FIFO_DEPTH) - 1; wr_pointer <= 0; rd_pointer <= 0; - space_avail <= 0; + space_avail <= 1; data_avail_int <= 0; end else @@ -56,7 +56,7 @@ module nobl_fifo // Capacity is already zero; Capacity is 1 and write is asserted (lookahead); both read and write are asserted (collision) space_avail <= ~((capacity == 0) || (read&&write) || ((capacity == 1) && write) ); // Capacity has 1 cycle delay so look ahead here for corner case of read of last item in FIFO. - data_avail_int <= ~((capacity == ((1 << FIFO_DEPTH)-1)) || ((capacity == ((1 << FIFO_DEPTH)-2)) && read) ); + data_avail_int <= ~((capacity == ((1 << FIFO_DEPTH)-1)) || ((capacity == ((1 << FIFO_DEPTH)-2)) && (~write && read)) ); wr_pointer <= wr_pointer + write; rd_pointer <= rd_pointer + (~write && read); capacity <= capacity - write + (~write && read) ; diff --git a/usrp2/extramfifo/nobl_if.v b/usrp2/extramfifo/nobl_if.v index 24d463b1e..391a841e8 100644 --- a/usrp2/extramfifo/nobl_if.v +++ b/usrp2/extramfifo/nobl_if.v @@ -9,11 +9,11 @@ module nobl_if output [WIDTH-1:0] RAM_D_po, output reg RAM_D_poe, output [DEPTH-1:0] RAM_A, - output RAM_WEn, + output reg RAM_WEn, output RAM_CENn, output RAM_LDn, output RAM_OEn, - output RAM_CE1n, + output reg RAM_CE1n, input [DEPTH-1:0] address, input [WIDTH-1:0] data_out, output reg [WIDTH-1:0] data_in, @@ -54,11 +54,15 @@ module nobl_if else begin enable_pipe1 <= enable; + RAM_CE1n <= ~enable; // Creates IOB flob + if (enable) begin address_pipe1 <= address; write_pipe1 <= write; + RAM_WEn <= ~write; // Creates IOB flob + if (write) data_out_pipe1 <= data_out; @@ -68,8 +72,8 @@ module nobl_if // Pipeline 1 drives address, write_enable, chip_select on NoBL SRAM assign RAM_A = address_pipe1; assign RAM_CENn = 1'b0; - assign RAM_WEn = ~write_pipe1; - assign RAM_CE1n = ~enable_pipe1; + // assign RAM_WEn = ~write_pipe1; +// assign RAM_CE1n = ~enable_pipe1; // // Pipeline stage2 diff --git a/usrp2/top/u2_rev3/u2_core_udp.v b/usrp2/top/u2_rev3/u2_core_udp.v index f8ea5330b..38c840bc1 100644 --- a/usrp2/top/u2_rev3/u2_core_udp.v +++ b/usrp2/top/u2_rev3/u2_core_udp.v @@ -171,7 +171,7 @@ module u2_core wire [31:0] atr_lines; wire [31:0] debug_rx, debug_mac, debug_mac0, debug_mac1, debug_tx_dsp, debug_txc, - debug_serdes0, debug_serdes1, debug_serdes2, debug_rx_dsp, debug_udp, debug_extfifo; + debug_serdes0, debug_serdes1, debug_serdes2, debug_rx_dsp, debug_udp, debug_extfifo, debug_extfifo2; wire [15:0] ser_rx_occ, ser_tx_occ, dsp_rx_occ, dsp_tx_occ, eth_rx_occ, eth_tx_occ, eth_rx_occ2; wire ser_rx_full, ser_tx_full, dsp_rx_full, dsp_tx_full, eth_rx_full, eth_tx_full, eth_rx_full2; @@ -414,7 +414,7 @@ module u2_core .cyc_i(s4_cyc),.stb_i(s4_stb),.adr_i(s4_adr[3:0]),.we_i(s4_we), .dat_i(s4_dat_o),.dat_o(s4_dat_i),.ack_o(s4_ack), .atr(atr_lines),.debug_0(debug_gpio_0),.debug_1(debug_gpio_1), - .gpio( {io_tx,io_rx} ) ); + .gpio(/* {io_tx,io_rx}*/ ) ); // ///////////////////////////////////////////////////////////////////////// // Buffer Pool Status -- Slave #5 @@ -664,13 +664,16 @@ module u2_core .RAM_LDn(RAM_LDn), .RAM_OEn(RAM_OEn), .RAM_CE1n(RAM_CE1n), - .datain({rd1_flags,rd1_dat}), +// .datain({rd1_flags,rd1_dat}), + .datain({rd1_flags[3:2],rd1_dat[31:16],rd1_flags[1:0],rd1_dat[15:0]}), .src_rdy_i(rd1_ready_o), // WRITE .dst_rdy_o(rd1_ready_i), // not FULL - .dataout(tx_data), +// .dataout(tx_data), + .dataout({tx_data[35:34],tx_data[31:16],tx_data[33:32],tx_data[15:0]}), .src_rdy_o(tx_src_rdy), // not EMPTY .dst_rdy_i(tx_dst_rdy), - .debug(debug_extfifo) + .debug(debug_extfifo), + .debug2(debug_extfifo2) ); vita_tx_chain #(.BASE_CTRL(SR_TX_CTRL), .BASE_DSP(SR_TX_DSP), @@ -717,5 +720,7 @@ module u2_core assign debug = debug_extfifo; assign debug_gpio_0 = 32'd0; assign debug_gpio_1 = 32'd0; + assign {io_tx,io_rx} = debug_extfifo2; + endmodule // u2_core diff --git a/usrp2/top/u2_rev3/u2_rev3.ucf b/usrp2/top/u2_rev3/u2_rev3.ucf index 82d879446..bf9569fe4 100644 --- a/usrp2/top/u2_rev3/u2_rev3.ucf +++ b/usrp2/top/u2_rev3/u2_rev3.ucf @@ -264,22 +264,22 @@ NET "sdi_tx_adc" LOC = "J4" ; NET "sen_tx_dac" LOC = "H4" ; NET "sclk_tx_dac" LOC = "J5" ; NET "sdi_tx_dac" LOC = "J6" ; -NET "io_tx[0]" LOC = "K4" ; -NET "io_tx[1]" LOC = "K3" ; -NET "io_tx[2]" LOC = "G1" ; -NET "io_tx[3]" LOC = "G5" ; -NET "io_tx[4]" LOC = "H5" ; -NET "io_tx[5]" LOC = "F3" ; -NET "io_tx[6]" LOC = "F2" ; -NET "io_tx[7]" LOC = "F5" ; -NET "io_tx[8]" LOC = "G6" ; -NET "io_tx[9]" LOC = "E2" ; -NET "io_tx[10]" LOC = "E1" ; -NET "io_tx[11]" LOC = "E3" ; -NET "io_tx[12]" LOC = "F4" ; -NET "io_tx[13]" LOC = "D2" ; -NET "io_tx[14]" LOC = "D4" ; -NET "io_tx[15]" LOC = "E4" ; +NET "io_tx[0]" LOC = "K4" |DRIVE = 12 |SLEW = FAST ; +NET "io_tx[1]" LOC = "K3" |DRIVE = 12 |SLEW = FAST ; +NET "io_tx[2]" LOC = "G1" |DRIVE = 12 |SLEW = FAST ; +NET "io_tx[3]" LOC = "G5" |DRIVE = 12 |SLEW = FAST ; +NET "io_tx[4]" LOC = "H5" |DRIVE = 12 |SLEW = FAST ; +NET "io_tx[5]" LOC = "F3" |DRIVE = 12 |SLEW = FAST ; +NET "io_tx[6]" LOC = "F2" |DRIVE = 12 |SLEW = FAST ; +NET "io_tx[7]" LOC = "F5" |DRIVE = 12 |SLEW = FAST ; +NET "io_tx[8]" LOC = "G6" |DRIVE = 12 |SLEW = FAST ; +NET "io_tx[9]" LOC = "E2" |DRIVE = 12 |SLEW = FAST ; +NET "io_tx[10]" LOC = "E1" |DRIVE = 12 |SLEW = FAST ; +NET "io_tx[11]" LOC = "E3" |DRIVE = 12 |SLEW = FAST ; +NET "io_tx[12]" LOC = "F4" |DRIVE = 12 |SLEW = FAST ; +NET "io_tx[13]" LOC = "D2" |DRIVE = 12 |SLEW = FAST ; +NET "io_tx[14]" LOC = "D4" |DRIVE = 12 |SLEW = FAST ; +NET "io_tx[15]" LOC = "E4" |DRIVE = 12 |SLEW = FAST ; NET "sen_rx_db" LOC = "D22" ; NET "sclk_rx_db" LOC = "F19" ; NET "sdo_rx_db" LOC = "G20" ; @@ -291,22 +291,22 @@ NET "sdi_rx_adc" LOC = "H22" ; NET "sen_rx_dac" LOC = "J18" ; NET "sclk_rx_dac" LOC = "J19" ; NET "sdi_rx_dac" LOC = "J21" ; -NET "io_rx[0]" LOC = "L21" ; -NET "io_rx[1]" LOC = "L20" ; -NET "io_rx[2]" LOC = "L19" ; -NET "io_rx[3]" LOC = "L18" ; -NET "io_rx[4]" LOC = "L17" ; -NET "io_rx[5]" LOC = "K22" ; -NET "io_rx[6]" LOC = "K21" ; -NET "io_rx[7]" LOC = "K20" ; -NET "io_rx[8]" LOC = "G22" ; -NET "io_rx[9]" LOC = "G21" ; -NET "io_rx[10]" LOC = "F21" ; -NET "io_rx[11]" LOC = "F20" ; -NET "io_rx[12]" LOC = "G19" ; -NET "io_rx[13]" LOC = "G18" ; -NET "io_rx[14]" LOC = "G17" ; -NET "io_rx[15]" LOC = "E22" ; +NET "io_rx[0]" LOC = "L21" |DRIVE = 12 |SLEW = FAST ; +NET "io_rx[1]" LOC = "L20" |DRIVE = 12 |SLEW = FAST ; +NET "io_rx[2]" LOC = "L19" |DRIVE = 12 |SLEW = FAST ; +NET "io_rx[3]" LOC = "L18" |DRIVE = 12 |SLEW = FAST ; +NET "io_rx[4]" LOC = "L17" |DRIVE = 12 |SLEW = FAST ; +NET "io_rx[5]" LOC = "K22" |DRIVE = 12 |SLEW = FAST ; +NET "io_rx[6]" LOC = "K21" |DRIVE = 12 |SLEW = FAST ; +NET "io_rx[7]" LOC = "K20" |DRIVE = 12 |SLEW = FAST ; +NET "io_rx[8]" LOC = "G22" |DRIVE = 12 |SLEW = FAST ; +NET "io_rx[9]" LOC = "G21" |DRIVE = 12 |SLEW = FAST ; +NET "io_rx[10]" LOC = "F21" |DRIVE = 12 |SLEW = FAST ; +NET "io_rx[11]" LOC = "F20" |DRIVE = 12 |SLEW = FAST ; +NET "io_rx[12]" LOC = "G19" |DRIVE = 12 |SLEW = FAST ; +NET "io_rx[13]" LOC = "G18" |DRIVE = 12 |SLEW = FAST ; +NET "io_rx[14]" LOC = "G17" |DRIVE = 12 |SLEW = FAST ; +NET "io_rx[15]" LOC = "E22" |DRIVE = 12 |SLEW = FAST ; NET "clk_to_mac" TNM_NET = "clk_to_mac"; TIMESPEC "TS_clk_to_mac" = PERIOD "clk_to_mac" 8 ns HIGH 50 %; -- cgit v1.2.3 From c81569139be394d514994833644ef710be1c886c Mon Sep 17 00:00:00 2001 From: ianb Date: Wed, 25 Aug 2010 18:54:51 -0700 Subject: hangedddddddextrnal fifo size to use full NoBL SRAM --- usrp2/top/u2_rev3/u2_core_udp.v | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/usrp2/top/u2_rev3/u2_core_udp.v b/usrp2/top/u2_rev3/u2_core_udp.v index 38c840bc1..189c4966f 100644 --- a/usrp2/top/u2_rev3/u2_core_udp.v +++ b/usrp2/top/u2_rev3/u2_core_udp.v @@ -648,7 +648,7 @@ module u2_core wire tx_src_rdy, tx_dst_rdy; wire [31:0] debug_vt; - ext_fifo #(.EXT_WIDTH(18),.INT_WIDTH(36),.RAM_DEPTH(19),.FIFO_DEPTH(8)) + ext_fifo #(.EXT_WIDTH(18),.INT_WIDTH(36),.RAM_DEPTH(19),.FIFO_DEPTH(19)) ext_fifo_i1 ( .int_clk(dsp_clk), -- cgit v1.2.3 From 0a272630e605b1ba71c0b7c8de9011c047cc578c Mon Sep 17 00:00:00 2001 From: Ian Buckley Date: Wed, 1 Sep 2010 00:44:39 -0700 Subject: Enhanced test bench to be more like real world application --- usrp2/extramfifo/ext_fifo_tb.sh | 3 ++- usrp2/extramfifo/ext_fifo_tb.v | 18 ++++++++++++------ 2 files changed, 14 insertions(+), 7 deletions(-) diff --git a/usrp2/extramfifo/ext_fifo_tb.sh b/usrp2/extramfifo/ext_fifo_tb.sh index a56574102..dcfede37a 100644 --- a/usrp2/extramfifo/ext_fifo_tb.sh +++ b/usrp2/extramfifo/ext_fifo_tb.sh @@ -1 +1,2 @@ -fuse -prj ext_fifo_tb.prj -t work.glbl -t work.ext_fifo_tb -L unisims_ver -L xilinxcorelib_ver -o ext_fifo_tb +#fuse -prj ext_fifo_tb.prj -t work.glbl -t work.ext_fifo_tb -L unisims_ver -L xilinxcorelib_ver -o ext_fifo_tb +iverilog -c ext_fifo_tb.cmd -o ext_fifo_tb ext_fifo_tb.v diff --git a/usrp2/extramfifo/ext_fifo_tb.v b/usrp2/extramfifo/ext_fifo_tb.v index db5f31a9d..0eda89769 100644 --- a/usrp2/extramfifo/ext_fifo_tb.v +++ b/usrp2/extramfifo/ext_fifo_tb.v @@ -84,11 +84,17 @@ module ext_fifo_tb(); initial begin - repeat (20) @(negedge int_clk); + repeat (5) @(negedge int_clk); + dst_rdy_i <= 1; + + while (src_rdy_o !== 1) + @(negedge int_clk); // Fall through fifo, first output already valid if (dataout !== ref_dataout) - $display("Error: Expected %x, got %x",ref_dataout, dataout); + $display("Error: Expected %x, got %x @%d",ref_dataout, dataout, $time); + ref_dataout <= ref_dataout + src_rdy_o ; + // Decimate by 16 rate while (ref_dataout < 2000) begin @@ -96,7 +102,7 @@ module ext_fifo_tb(); ref_dataout <= ref_dataout + src_rdy_o ; dst_rdy_i <= src_rdy_o; if ((dataout !== ref_dataout) && src_rdy_o) - $display("Error: Expected %x, got %x",ref_dataout, dataout); + $display("Error: Expected %x, got %x @%d",ref_dataout, dataout, $time); @(negedge int_clk); dst_rdy_i <= 0; repeat(14) @(negedge int_clk); @@ -108,7 +114,7 @@ module ext_fifo_tb(); ref_dataout <= ref_dataout + src_rdy_o ; dst_rdy_i <= src_rdy_o; if ((dataout !== ref_dataout) && src_rdy_o) - $display("Error: Expected %x, got %x",ref_dataout, dataout); + $display("Error: Expected %x, got %x @%d",ref_dataout, dataout, $time); @(negedge int_clk); dst_rdy_i <= 0; repeat(6) @(negedge int_clk); @@ -120,7 +126,7 @@ module ext_fifo_tb(); ref_dataout <= ref_dataout + src_rdy_o ; dst_rdy_i <= src_rdy_o; if ((dataout !== ref_dataout) && src_rdy_o) - $display("Error: Expected %x, got %x",ref_dataout, dataout); + $display("Error: Expected %x, got %x @%d",ref_dataout, dataout, $time); @(negedge int_clk); dst_rdy_i <= 0; repeat(2) @(negedge int_clk); @@ -132,7 +138,7 @@ module ext_fifo_tb(); ref_dataout <= ref_dataout + src_rdy_o ; dst_rdy_i <= src_rdy_o; if ((dataout !== ref_dataout) && src_rdy_o) - $display("Error: Expected %x, got %x",ref_dataout, dataout); + $display("Error: Expected %x, got %x @%d",ref_dataout, dataout, $time); end // while (ref_dataout < 10000) -- cgit v1.2.3 From 0a28cb5e7fbe81009e50fe03c4ffc3ce8db5052a Mon Sep 17 00:00:00 2001 From: Ian Buckley Date: Wed, 1 Sep 2010 03:08:11 -0700 Subject: Added to DCM's and some BUFG's to align the internal 125MHz clock edge with its presentation externally at the NoBL SRAM. Since we don't have a board level trace to use to estimate clock propigation delay we just loop through the I/O on the FPGA. This hasn't been verified as working on a USRP2 yet. --- usrp2/top/u2_rev3/u2_core.v | 2 +- usrp2/top/u2_rev3/u2_core_udp.v | 3 +- usrp2/top/u2_rev3/u2_rev3.ucf | 1 + usrp2/top/u2_rev3/u2_rev3.v | 99 ++++++++++++++++++++++++++++++++++++++++- 4 files changed, 100 insertions(+), 5 deletions(-) diff --git a/usrp2/top/u2_rev3/u2_core.v b/usrp2/top/u2_rev3/u2_core.v index 9ba3cc136..a5963f6b1 100755 --- a/usrp2/top/u2_rev3/u2_core.v +++ b/usrp2/top/u2_rev3/u2_core.v @@ -123,7 +123,7 @@ module u2_core output [18:0] RAM_A, output RAM_CE1n, output RAM_CENn, - output RAM_CLK, + // output RAM_CLK, output RAM_WEn, output RAM_OEn, output RAM_LDn, diff --git a/usrp2/top/u2_rev3/u2_core_udp.v b/usrp2/top/u2_rev3/u2_core_udp.v index 189c4966f..b5d0ed72f 100644 --- a/usrp2/top/u2_rev3/u2_core_udp.v +++ b/usrp2/top/u2_rev3/u2_core_udp.v @@ -125,7 +125,7 @@ module u2_core output [18:0] RAM_A, output RAM_CE1n, output RAM_CENn, - output RAM_CLK, + // output RAM_CLK, output RAM_WEn, output RAM_OEn, output RAM_LDn, @@ -705,7 +705,6 @@ module u2_core assign RAM_CLK = clk_to_mac; - // ///////////////////////////////////////////////////////////////////////// // VITA Timing diff --git a/usrp2/top/u2_rev3/u2_rev3.ucf b/usrp2/top/u2_rev3/u2_rev3.ucf index bf9569fe4..175fbec8d 100644 --- a/usrp2/top/u2_rev3/u2_rev3.ucf +++ b/usrp2/top/u2_rev3/u2_rev3.ucf @@ -324,6 +324,7 @@ NET "ser_rx_clk" TNM_NET = "ser_rx_clk"; TIMESPEC "TS_ser_rx_clk" = PERIOD "ser_rx_clk" 10 ns HIGH 50 %; NET "cpld_clk" CLOCK_DEDICATED_ROUTE = FALSE; +NET "GMII_RX_CLK" CLOCK_DEDICATED_ROUTE = FALSE; #NET "adc_a<*>" TNM_NET = ADC_DATA_GRP; #NET "adc_b<*>" TNM_NET = ADC_DATA_GRP; diff --git a/usrp2/top/u2_rev3/u2_rev3.v b/usrp2/top/u2_rev3/u2_rev3.v index 5e32b368a..cef868df9 100644 --- a/usrp2/top/u2_rev3/u2_rev3.v +++ b/usrp2/top/u2_rev3/u2_rev3.v @@ -373,14 +373,109 @@ module u2_rev3 ); end // block: gen_RAM_D_IO endgenerate + + // + // DCM edits start here + // + + + wire RAM_CLK_buf; + wire clk_to_mac_buf; + wire clk125_ext_clk0; + wire clk125_ext_clk180; + wire clk125_ext_clk0_buf; + wire clk125_ext_clk180_buf; + wire clk125_int_buf; + wire clk125_int; + + IBUFG clk_to_mac_buf_i1 (.I(clk_to_mac), + .O(clk_to_mac_buf)); + DCM DCM_INST1 (.CLKFB(RAM_CLK_buf), + .CLKIN(clk_to_mac_buf), + .DSSEN(1'b0), + .PSCLK(1'b0), + .PSEN(1'b0), + .PSINCDEC(1'b0), + .RST(clk125_ext_RST_IN), + .CLK0(clk125_ext_clk0), + .CLK180(clk125_ext_clk180) ); + defparam DCM_INST1.CLK_FEEDBACK = "1X"; + defparam DCM_INST1.CLKDV_DIVIDE = 2.0; + defparam DCM_INST1.CLKFX_DIVIDE = 1; + defparam DCM_INST1.CLKFX_MULTIPLY = 4; + defparam DCM_INST1.CLKIN_DIVIDE_BY_2 = "FALSE"; + defparam DCM_INST1.CLKIN_PERIOD = 8.000; + defparam DCM_INST1.CLKOUT_PHASE_SHIFT = "NONE"; + defparam DCM_INST1.DESKEW_ADJUST = "SYSTEM_SYNCHRONOUS"; + defparam DCM_INST1.DFS_FREQUENCY_MODE = "LOW"; + defparam DCM_INST1.DLL_FREQUENCY_MODE = "LOW"; + defparam DCM_INST1.DUTY_CYCLE_CORRECTION = "TRUE"; + defparam DCM_INST1.FACTORY_JF = 16'h8080; + defparam DCM_INST1.PHASE_SHIFT = 0; + defparam DCM_INST1.STARTUP_WAIT = "FALSE"; + + IBUFG RAM_CLK_buf_i1 (.I(RAM_CLK), + .O(RAM_CLK_buf)); + BUFG clk125_ext_clk0_buf_i1 (.I(clk125_ext_clk0), + .O(clk125_ext_clk0_buf)); + BUFG clk125_ext_clk180_buf_i1 (.I(clk125_ext_clk180), + .O(clk125_ext_clk180_buf)); + + OFDDRRSE RAM_CLK_i1 (.Q(RAM_CLK), + .C0(clk125_ext_clk0_buf), + .C1(clk125_ext_clk180_buf), + .CE(1'b1), + .D0(1'b1), + .D1(1'b0), + .R(1'b0), + .S(1'b0)); + + SRL16 dcm2_rst_i1 (.D(1'b0), + .CLK(clk_to_mac_buf), + .Q(dcm2_rst), + .A0(1'b1), + .A1(1'b1), + .A2(1'b1), + .A3(1'b1)); + // synthesis attribute init of dcm2_rst_i2 is "000F"; + + DCM DCM_INST2 (.CLKFB(clk125_int_buf), + .CLKIN(clk_to_mac_buf), + .DSSEN(1'b0), + .PSCLK(1'b0), + .PSEN(1'b0), + .PSINCDEC(1'b0), + .RST(clk125_int_RST_IN), + .CLK0(clk125_int)); + defparam DCM_INST2.CLK_FEEDBACK = "1X"; + defparam DCM_INST2.CLKDV_DIVIDE = 2.0; + defparam DCM_INST2.CLKFX_DIVIDE = 1; + defparam DCM_INST2.CLKFX_MULTIPLY = 4; + defparam DCM_INST2.CLKIN_DIVIDE_BY_2 = "FALSE"; + defparam DCM_INST2.CLKIN_PERIOD = 8.000; + defparam DCM_INST2.CLKOUT_PHASE_SHIFT = "NONE"; + defparam DCM_INST2.DESKEW_ADJUST = "SYSTEM_SYNCHRONOUS"; + defparam DCM_INST2.DFS_FREQUENCY_MODE = "LOW"; + defparam DCM_INST2.DLL_FREQUENCY_MODE = "LOW"; + defparam DCM_INST2.DUTY_CYCLE_CORRECTION = "TRUE"; + defparam DCM_INST2.FACTORY_JF = 16'h8080; + defparam DCM_INST2.PHASE_SHIFT = 0; + defparam DCM_INST2.STARTUP_WAIT = "FALSE"; + + BUFG clk125_int_buf_i1 (.I(clk125_int), + .O(clk125_int_buf)); + + // + // DCM edits end here + // u2_core #(.RAM_SIZE(32768)) u2_core(.dsp_clk (dsp_clk), .wb_clk (wb_clk), .clock_ready (clock_ready), - .clk_to_mac (clk_to_mac), + .clk_to_mac (clk125_int_buf), .pps_in (pps_in), .leds (leds_int), .debug (debug[31:0]), @@ -463,7 +558,7 @@ module u2_rev3 .RAM_A (RAM_A), .RAM_CE1n (RAM_CE1n), .RAM_CENn (RAM_CENn), - .RAM_CLK (RAM_CLK), + // .RAM_CLK (RAM_CLK), .RAM_WEn (RAM_WEn), .RAM_OEn (RAM_OEn), .RAM_LDn (RAM_LDn), -- cgit v1.2.3 From 60a22a5273b58da49aec5c66f46738be2b7499ba Mon Sep 17 00:00:00 2001 From: Ian Buckley Date: Tue, 14 Sep 2010 11:46:58 -0700 Subject: Enabled phase offset adjustment on DCM_INST1 which drives the external Fast SRAM clock. Set phase shift to -12 after experimentation using logic analyzer to see results. This value gives near optimum 1.5nS setup times on the source sync signals FPGA -> SRAM under lab conditions. --- usrp2/top/u2_rev3/u2_rev3.v | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/usrp2/top/u2_rev3/u2_rev3.v b/usrp2/top/u2_rev3/u2_rev3.v index cef868df9..faf35d12f 100644 --- a/usrp2/top/u2_rev3/u2_rev3.v +++ b/usrp2/top/u2_rev3/u2_rev3.v @@ -397,7 +397,7 @@ module u2_rev3 .PSCLK(1'b0), .PSEN(1'b0), .PSINCDEC(1'b0), - .RST(clk125_ext_RST_IN), + .RST(1'b0), .CLK0(clk125_ext_clk0), .CLK180(clk125_ext_clk180) ); defparam DCM_INST1.CLK_FEEDBACK = "1X"; @@ -406,13 +406,13 @@ module u2_rev3 defparam DCM_INST1.CLKFX_MULTIPLY = 4; defparam DCM_INST1.CLKIN_DIVIDE_BY_2 = "FALSE"; defparam DCM_INST1.CLKIN_PERIOD = 8.000; - defparam DCM_INST1.CLKOUT_PHASE_SHIFT = "NONE"; + defparam DCM_INST1.CLKOUT_PHASE_SHIFT = "FIXED"; defparam DCM_INST1.DESKEW_ADJUST = "SYSTEM_SYNCHRONOUS"; defparam DCM_INST1.DFS_FREQUENCY_MODE = "LOW"; defparam DCM_INST1.DLL_FREQUENCY_MODE = "LOW"; defparam DCM_INST1.DUTY_CYCLE_CORRECTION = "TRUE"; defparam DCM_INST1.FACTORY_JF = 16'h8080; - defparam DCM_INST1.PHASE_SHIFT = 0; + defparam DCM_INST1.PHASE_SHIFT = -12; defparam DCM_INST1.STARTUP_WAIT = "FALSE"; IBUFG RAM_CLK_buf_i1 (.I(RAM_CLK), @@ -431,14 +431,14 @@ module u2_rev3 .R(1'b0), .S(1'b0)); - SRL16 dcm2_rst_i1 (.D(1'b0), - .CLK(clk_to_mac_buf), - .Q(dcm2_rst), - .A0(1'b1), - .A1(1'b1), - .A2(1'b1), - .A3(1'b1)); - // synthesis attribute init of dcm2_rst_i2 is "000F"; +// SRL16 dcm2_rst_i1 (.D(1'b0), +// .CLK(clk_to_mac_buf), +// .Q(dcm2_rst), +// .A0(1'b1), +// .A1(1'b1), +// .A2(1'b1), +// .A3(1'b1)); + // synthesis attribute init of dcm2_rst_i1 is "000F"; DCM DCM_INST2 (.CLKFB(clk125_int_buf), .CLKIN(clk_to_mac_buf), @@ -446,7 +446,7 @@ module u2_rev3 .PSCLK(1'b0), .PSEN(1'b0), .PSINCDEC(1'b0), - .RST(clk125_int_RST_IN), + .RST(1'b0), .CLK0(clk125_int)); defparam DCM_INST2.CLK_FEEDBACK = "1X"; defparam DCM_INST2.CLKDV_DIVIDE = 2.0; -- cgit v1.2.3 From 84b42223ce7d119ef89ffa4030c904c1b8efc243 Mon Sep 17 00:00:00 2001 From: Ian Buckley Date: Thu, 30 Sep 2010 15:54:03 -0700 Subject: Modified phase shift of DCM1 to -64 which is intended to give more timing margin on reads from the SRAM at the expense of Writes to the SRAM. Tested to be at least as stable as a phase shift of 12 and beter looking timing on the logic analyzer. Signals driven by the FPGA are observed changing on the SRAM pins about 4 nS after the rising edge of the RAM clock. --- usrp2/top/u2_rev3/u2_rev3.v | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/usrp2/top/u2_rev3/u2_rev3.v b/usrp2/top/u2_rev3/u2_rev3.v index faf35d12f..4f7f9bf1a 100644 --- a/usrp2/top/u2_rev3/u2_rev3.v +++ b/usrp2/top/u2_rev3/u2_rev3.v @@ -412,7 +412,7 @@ module u2_rev3 defparam DCM_INST1.DLL_FREQUENCY_MODE = "LOW"; defparam DCM_INST1.DUTY_CYCLE_CORRECTION = "TRUE"; defparam DCM_INST1.FACTORY_JF = 16'h8080; - defparam DCM_INST1.PHASE_SHIFT = -12; + defparam DCM_INST1.PHASE_SHIFT = -64; defparam DCM_INST1.STARTUP_WAIT = "FALSE"; IBUFG RAM_CLK_buf_i1 (.I(RAM_CLK), -- cgit v1.2.3 From 2261035e69c033b37d9fe784ef8d1150f39f0e47 Mon Sep 17 00:00:00 2001 From: Matt Ettus Date: Wed, 6 Oct 2010 18:15:17 -0700 Subject: reconnect GPIOs, remove debug pins, meets timing now --- usrp2/top/u2_rev3/u2_core_udp.v | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/usrp2/top/u2_rev3/u2_core_udp.v b/usrp2/top/u2_rev3/u2_core_udp.v index b5d0ed72f..067a75759 100644 --- a/usrp2/top/u2_rev3/u2_core_udp.v +++ b/usrp2/top/u2_rev3/u2_core_udp.v @@ -414,7 +414,7 @@ module u2_core .cyc_i(s4_cyc),.stb_i(s4_stb),.adr_i(s4_adr[3:0]),.we_i(s4_we), .dat_i(s4_dat_o),.dat_o(s4_dat_i),.ack_o(s4_ack), .atr(atr_lines),.debug_0(debug_gpio_0),.debug_1(debug_gpio_1), - .gpio(/* {io_tx,io_rx}*/ ) ); + .gpio({io_tx,io_rx}) ); // ///////////////////////////////////////////////////////////////////////// // Buffer Pool Status -- Slave #5 @@ -715,11 +715,9 @@ module u2_core // ///////////////////////////////////////////////////////////////////////////////////////// // Debug Pins - assign debug_clk = {dsp_clk, clk_to_mac}; - assign debug = debug_extfifo; + assign debug_clk = 2'b00; // {dsp_clk, clk_to_mac}; + assign debug = 32'd0; // debug_extfifo; assign debug_gpio_0 = 32'd0; assign debug_gpio_1 = 32'd0; - assign {io_tx,io_rx} = debug_extfifo2; - endmodule // u2_core -- cgit v1.2.3 From 8507271de44aadc564354a77c8b9259e24f0d246 Mon Sep 17 00:00:00 2001 From: Matt Ettus Date: Thu, 7 Oct 2010 11:10:00 -0700 Subject: revert unneeded changes and incorrect comments --- usrp2/top/u2_rev3/u2_rev3.ucf | 64 +++++++++++++++++++++---------------------- usrp2/vrt/vita_tx_deframer.v | 4 +-- 2 files changed, 34 insertions(+), 34 deletions(-) diff --git a/usrp2/top/u2_rev3/u2_rev3.ucf b/usrp2/top/u2_rev3/u2_rev3.ucf index 175fbec8d..6e0caedd5 100644 --- a/usrp2/top/u2_rev3/u2_rev3.ucf +++ b/usrp2/top/u2_rev3/u2_rev3.ucf @@ -264,22 +264,22 @@ NET "sdi_tx_adc" LOC = "J4" ; NET "sen_tx_dac" LOC = "H4" ; NET "sclk_tx_dac" LOC = "J5" ; NET "sdi_tx_dac" LOC = "J6" ; -NET "io_tx[0]" LOC = "K4" |DRIVE = 12 |SLEW = FAST ; -NET "io_tx[1]" LOC = "K3" |DRIVE = 12 |SLEW = FAST ; -NET "io_tx[2]" LOC = "G1" |DRIVE = 12 |SLEW = FAST ; -NET "io_tx[3]" LOC = "G5" |DRIVE = 12 |SLEW = FAST ; -NET "io_tx[4]" LOC = "H5" |DRIVE = 12 |SLEW = FAST ; -NET "io_tx[5]" LOC = "F3" |DRIVE = 12 |SLEW = FAST ; -NET "io_tx[6]" LOC = "F2" |DRIVE = 12 |SLEW = FAST ; -NET "io_tx[7]" LOC = "F5" |DRIVE = 12 |SLEW = FAST ; -NET "io_tx[8]" LOC = "G6" |DRIVE = 12 |SLEW = FAST ; -NET "io_tx[9]" LOC = "E2" |DRIVE = 12 |SLEW = FAST ; -NET "io_tx[10]" LOC = "E1" |DRIVE = 12 |SLEW = FAST ; -NET "io_tx[11]" LOC = "E3" |DRIVE = 12 |SLEW = FAST ; -NET "io_tx[12]" LOC = "F4" |DRIVE = 12 |SLEW = FAST ; -NET "io_tx[13]" LOC = "D2" |DRIVE = 12 |SLEW = FAST ; -NET "io_tx[14]" LOC = "D4" |DRIVE = 12 |SLEW = FAST ; -NET "io_tx[15]" LOC = "E4" |DRIVE = 12 |SLEW = FAST ; +NET "io_tx[0]" LOC = "K4" ; +NET "io_tx[1]" LOC = "K3" ; +NET "io_tx[2]" LOC = "G1" ; +NET "io_tx[3]" LOC = "G5" ; +NET "io_tx[4]" LOC = "H5" ; +NET "io_tx[5]" LOC = "F3" ; +NET "io_tx[6]" LOC = "F2" ; +NET "io_tx[7]" LOC = "F5" ; +NET "io_tx[8]" LOC = "G6" ; +NET "io_tx[9]" LOC = "E2" ; +NET "io_tx[10]" LOC = "E1" ; +NET "io_tx[11]" LOC = "E3" ; +NET "io_tx[12]" LOC = "F4" ; +NET "io_tx[13]" LOC = "D2" ; +NET "io_tx[14]" LOC = "D4" ; +NET "io_tx[15]" LOC = "E4" ; NET "sen_rx_db" LOC = "D22" ; NET "sclk_rx_db" LOC = "F19" ; NET "sdo_rx_db" LOC = "G20" ; @@ -291,22 +291,22 @@ NET "sdi_rx_adc" LOC = "H22" ; NET "sen_rx_dac" LOC = "J18" ; NET "sclk_rx_dac" LOC = "J19" ; NET "sdi_rx_dac" LOC = "J21" ; -NET "io_rx[0]" LOC = "L21" |DRIVE = 12 |SLEW = FAST ; -NET "io_rx[1]" LOC = "L20" |DRIVE = 12 |SLEW = FAST ; -NET "io_rx[2]" LOC = "L19" |DRIVE = 12 |SLEW = FAST ; -NET "io_rx[3]" LOC = "L18" |DRIVE = 12 |SLEW = FAST ; -NET "io_rx[4]" LOC = "L17" |DRIVE = 12 |SLEW = FAST ; -NET "io_rx[5]" LOC = "K22" |DRIVE = 12 |SLEW = FAST ; -NET "io_rx[6]" LOC = "K21" |DRIVE = 12 |SLEW = FAST ; -NET "io_rx[7]" LOC = "K20" |DRIVE = 12 |SLEW = FAST ; -NET "io_rx[8]" LOC = "G22" |DRIVE = 12 |SLEW = FAST ; -NET "io_rx[9]" LOC = "G21" |DRIVE = 12 |SLEW = FAST ; -NET "io_rx[10]" LOC = "F21" |DRIVE = 12 |SLEW = FAST ; -NET "io_rx[11]" LOC = "F20" |DRIVE = 12 |SLEW = FAST ; -NET "io_rx[12]" LOC = "G19" |DRIVE = 12 |SLEW = FAST ; -NET "io_rx[13]" LOC = "G18" |DRIVE = 12 |SLEW = FAST ; -NET "io_rx[14]" LOC = "G17" |DRIVE = 12 |SLEW = FAST ; -NET "io_rx[15]" LOC = "E22" |DRIVE = 12 |SLEW = FAST ; +NET "io_rx[0]" LOC = "L21" ; +NET "io_rx[1]" LOC = "L20" ; +NET "io_rx[2]" LOC = "L19" ; +NET "io_rx[3]" LOC = "L18" ; +NET "io_rx[4]" LOC = "L17" ; +NET "io_rx[5]" LOC = "K22" ; +NET "io_rx[6]" LOC = "K21" ; +NET "io_rx[7]" LOC = "K20" ; +NET "io_rx[8]" LOC = "G22" ; +NET "io_rx[9]" LOC = "G21" ; +NET "io_rx[10]" LOC = "F21" ; +NET "io_rx[11]" LOC = "F20" ; +NET "io_rx[12]" LOC = "G19" ; +NET "io_rx[13]" LOC = "G18" ; +NET "io_rx[14]" LOC = "G17" ; +NET "io_rx[15]" LOC = "E22" ; NET "clk_to_mac" TNM_NET = "clk_to_mac"; TIMESPEC "TS_clk_to_mac" = PERIOD "clk_to_mac" 8 ns HIGH 50 %; diff --git a/usrp2/vrt/vita_tx_deframer.v b/usrp2/vrt/vita_tx_deframer.v index b62507092..f9cd7d00d 100644 --- a/usrp2/vrt/vita_tx_deframer.v +++ b/usrp2/vrt/vita_tx_deframer.v @@ -84,7 +84,7 @@ module vita_tx_deframer seqnum_err <= 0; end else - if((vita_state == VITA_STORE) & fifo_space ) //& src_rdy_i) + if((vita_state == VITA_STORE) & fifo_space) if(eop) if(has_trailer_reg) vita_state <= VITA_TRAILER; @@ -183,7 +183,7 @@ module vita_tx_deframer 3: sample_d <= data_i[31:0]; endcase // case (vector_phase) - wire store = (vita_state == VITA_STORE) ; //& src_rdy_i; + wire store = (vita_state == VITA_STORE); fifo_short #(.WIDTH(FIFOWIDTH)) short_tx_q (.clk(clk), .reset(reset), .clear(clear), .datain(fifo_i), .src_rdy_i(store), .dst_rdy_o(fifo_space), -- cgit v1.2.3 From 7e75951d263c00e9f84bdf14d6176680cb3de833 Mon Sep 17 00:00:00 2001 From: Ian Buckley Date: Fri, 15 Oct 2010 11:37:23 -0700 Subject: Added external RAM FIFO to u2plus. Added code branch to ext_fifo.v using generate that instantiates different input and out fifo's and touched nobl_fifo code so that it works at 18 and 36bit widths. Added 2nd DCM to top level to generate off chip RAMCLK. Added explicit I/O instances to top level for tristate drivers and changed signals to core as needed. Creted new FIFO's in core gen to replace much larger FIFO's used on u2rev3 --- usrp2/coregen/Makefile.srcs | 2 + usrp2/coregen/coregen.cgp | 6 +- usrp2/coregen/fifo_xlnx_32x36_2clk.gise | 30 + usrp2/coregen/fifo_xlnx_32x36_2clk.ncf | 0 usrp2/coregen/fifo_xlnx_32x36_2clk.ngc | 3 + usrp2/coregen/fifo_xlnx_32x36_2clk.v | 3839 +++++++++++++++++++++++++ usrp2/coregen/fifo_xlnx_32x36_2clk.veo | 47 + usrp2/coregen/fifo_xlnx_32x36_2clk.xco | 84 + usrp2/coregen/fifo_xlnx_32x36_2clk.xise | 72 + usrp2/coregen/fifo_xlnx_32x36_2clk_flist.txt | 12 + usrp2/coregen/fifo_xlnx_32x36_2clk_readme.txt | 46 + usrp2/coregen/fifo_xlnx_32x36_2clk_xmdf.tcl | 68 + usrp2/extramfifo/ext_fifo.v | 115 +- usrp2/extramfifo/ext_fifo_tb.sh | 0 usrp2/extramfifo/ext_fifo_tb.v | 103 +- usrp2/extramfifo/nobl_fifo.v | 41 +- usrp2/top/u2plus/Makefile | 2 + usrp2/top/u2plus/u2plus.ucf | 8 + usrp2/top/u2plus/u2plus.v | 83 +- usrp2/top/u2plus/u2plus_core.v | 37 +- 20 files changed, 4498 insertions(+), 100 deletions(-) create mode 100644 usrp2/coregen/fifo_xlnx_32x36_2clk.gise create mode 100644 usrp2/coregen/fifo_xlnx_32x36_2clk.ncf create mode 100644 usrp2/coregen/fifo_xlnx_32x36_2clk.ngc create mode 100644 usrp2/coregen/fifo_xlnx_32x36_2clk.v create mode 100644 usrp2/coregen/fifo_xlnx_32x36_2clk.veo create mode 100644 usrp2/coregen/fifo_xlnx_32x36_2clk.xco create mode 100644 usrp2/coregen/fifo_xlnx_32x36_2clk.xise create mode 100644 usrp2/coregen/fifo_xlnx_32x36_2clk_flist.txt create mode 100644 usrp2/coregen/fifo_xlnx_32x36_2clk_readme.txt create mode 100644 usrp2/coregen/fifo_xlnx_32x36_2clk_xmdf.tcl mode change 100644 => 100755 usrp2/extramfifo/ext_fifo_tb.sh diff --git a/usrp2/coregen/Makefile.srcs b/usrp2/coregen/Makefile.srcs index a59696d15..f163877a9 100644 --- a/usrp2/coregen/Makefile.srcs +++ b/usrp2/coregen/Makefile.srcs @@ -16,6 +16,8 @@ fifo_xlnx_16x19_2clk.v \ fifo_xlnx_16x19_2clk.xco \ fifo_xlnx_16x40_2clk.v \ fifo_xlnx_16x40_2clk.xco \ +fifo_xlnx_32x36_2clk.v \ +fifo_xlnx_32x36_2clk.xco \ fifo_xlnx_512x36_2clk_36to18.v \ fifo_xlnx_512x36_2clk_36to18.xco \ fifo_xlnx_512x36_2clk_18to36.v \ diff --git a/usrp2/coregen/coregen.cgp b/usrp2/coregen/coregen.cgp index 4c9201aff..dd85a7f50 100644 --- a/usrp2/coregen/coregen.cgp +++ b/usrp2/coregen/coregen.cgp @@ -1,4 +1,4 @@ -# Date: Mon Jul 26 21:55:33 2010 +# Date: Fri Oct 15 07:50:19 2010 SET addpads = false SET asysymbol = false @@ -13,10 +13,10 @@ SET foundationsym = false SET implementationfiletype = Ngc SET package = fg456 SET removerpms = false -SET simulationfiles = Behavioral +SET simulationfiles = Structural SET speedgrade = -5 SET verilogsim = true SET vhdlsim = false SET workingdirectory = /tmp/ -# CRC: 394da717 +# CRC: 983b9b45 diff --git a/usrp2/coregen/fifo_xlnx_32x36_2clk.gise b/usrp2/coregen/fifo_xlnx_32x36_2clk.gise new file mode 100644 index 000000000..70ee54054 --- /dev/null +++ b/usrp2/coregen/fifo_xlnx_32x36_2clk.gise @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + 11.1 + + + + + + + + + + diff --git a/usrp2/coregen/fifo_xlnx_32x36_2clk.ncf b/usrp2/coregen/fifo_xlnx_32x36_2clk.ncf new file mode 100644 index 000000000..e69de29bb diff --git a/usrp2/coregen/fifo_xlnx_32x36_2clk.ngc b/usrp2/coregen/fifo_xlnx_32x36_2clk.ngc new file mode 100644 index 000000000..d1ed419a7 --- /dev/null +++ b/usrp2/coregen/fifo_xlnx_32x36_2clk.ngc @@ -0,0 +1,3 @@ +XILINX-XDB 0.1 STUB 0.1 ASCII +XILINX-XDM V1.6e +$56140<,[o}e~g`n;"2*726&;$9,)<>;.vnt*Ydo&lbjbQwloz\77~4>V8h`f agn3847=7081:?6?!039244=5<288?>?=;249MKVR\3nbb1=::1<20>512F__\XZ5dnww863=87n0?~6D@_UU8svjaXmdzuRzgrdqk81<76;?097GAPTV9twi`Wlg{xtQ{hsgplZgt{lx094?>3781?OIX\^1|ah_dosp|Ys`{oxdR`jg`vf81<768n097GAPTV9twi`Wog`Rzgrdqk81<76;>097GAPTV9twi`Wog`Rzgrdqk[dutm{~787>12596>LHW]]0{~biPftno[qnumzbTbhintd>7>58602?1CXZ_UU8geqgXkfex1:50?3a?011c96>JSSX\^1{Qkauc\gjsi|5>1<3?46595=<053?K?7;ONA394B1=?:=;?75:=159;A=G630805=:491230>?780805;<4A108E44<4A7;8EV_IKVXNK>5MU3:8FPUXAGLD=6M=;BG26>EOMJAT@DMJNRG\P\VB:2IB?6MCR89@KHKN\]OO=95LOSG\C@HBZH^BCCQFNGM4?FTBI]OO=6J=;EK0?AVH=2N[^L>:;ERQE4385KPSC06>C3<2OHM=<4F308BA5O53@:97D?=;H01?L5>3@DBX^ZNTD18MKP53EC97AA9;MMB@@B03EELENOC4:NVP70JR\:UG86BZT548HPR3WE?0A^I@N49NQ]E^k2Gjfb|YesqjkkeH6<2D:<=:4N0220>H68;>0B<><4:L241286@>0768J460<2D:<5:4N02:7>H69=1E=<>;;O3251=I988?7C?>359M54233G;:995A1047?K76?=1E=<6;;O32=6=I9;>0B<<=3:L276=I9=>0B<:>3:L216=I9?90B<9<;O3;7>H61:1E>==4N330?K45;2D9?>5A2518J7343G8=?6@=729M6=5=<;O177>H4=:1E?;=4N250?K5?;2D85>5A4118J1743G>9?6@;329M015>5A9218J<243G3>?6@6629M=25VFZ]k0\D@PBTQJ@]d2YDY_MJ3:QSK1=SQYO8>6[?/fpe*w`(ojr%oaew/LzlvZtcWyd~Ril_ymq4567W[oxyaz>339V4*aun'xm#jmw.bnh|*Kg{UyhR~ats]dgZ~hz9:;=R\jstnw564<]9%l~k }f.e`|+ekcq%Ftb|Pre]sjqtXojUsc>?03]Qavsk|8997X> gsd-vc)`kq$h`fv Mymq[wbXxg~ySjmPxnp3455XZly~`y?<2:W3+bta&{l$knv!cmi{+H~hzV}yS}`{r^e`[}iu89:;S_k|umv277=R8&myj#|i/fa{*fjlp&GscQxr^rmpwY`kVrd~=>?1^Pfwpjs9:80Y=!hrg,qb*adp'iggu!Bxnp\swYwf}xTknQwos2347YUmzgx<==;T2,cw`)zo%lou lljz,I}iuW~xT|cz}_fa\|jt7899T^h}zlu315>S7'nxm"h gbz-gim'{nT|cz}_ckm858592_;#j|i.sd,cf~)keas#jPpovq[goi4849=6[?/fpe*w`(ojr%oaew/sf\tkruWkce0?0=1:W3+bta&{l$knv!cmi{+wbXxg~ySoga<2<15>S7'nxm"h gbz-gim'{nT|cz}_ckm818582_;#j|i.sd,cf~)keas#jPpovq[goiW98;7X> gsd-vc)`kq$h`fv re]sjqtXj`dT=?>4U1-dvc(un&mht#mcky-q`Zvi|{UiecQ=219V4*aun'xm#jmw.bnh|*tcWyd~Rlfn^114>S7'nxm"h gbz-gim'{nT|cz}_ckm[1413\:$kh!rg-dg}(ddbr$~iQnup\flhXpfx;<=>=7:W3+bta&{l$knv!cmi{+wbXxg~ySoga_ymq45679;<0Y=!hrg,qb*adp'iggu!}d^rmpwYeagUsc>?0004?P6(o{l%~k!hcy,`hn~(zmU{by|Pbhl\|jt789;:>;5Z0.eqb+ta'nis"nbdx.pg[uhszVhbbRv`r123671<]9%l~k }f.e`|+ekcq%yhR~ats]amkYg{:;?3^QT476<]9%l~k }f.e`|+ekcq%yhR~ats]dg969:91^<"i}f/pe+be&jf`t"|k_qlwvZad4849<6[?/fpe*w`(ojr%oaew/sf\tkruWni7>3328Q5)`zo$yj"ilx/aoo})ulVzexQhc=6=5c=R8&myj#|i/fa{*fjlp&xoS}`{r^e`[57a3\:$kh!rg-dg}(ddbr$~iQnup\cfY69o1^<"i}f/pe+be&jf`t"|k_qlwvZadW;;m7X> gsd-vc)`kq$h`fv re]sjqtXojU8=k5Z0.eqb+ta'nis"nbdx.pg[uhszVmhS9<9;T2,cw`)zo%lou lljz,vaYwf}xTknQnssgd8585>2_;#j|i.sd,cf~)keas#jPpovq[beXizxnk1?1279V4*aun'xm#jmw.bnh|*tcWyd~Ril_`qqab:56;<0Y=!hrg,qb*adp'iggu!}d^rmpwY`kVkx~hi33?05?P6(o{l%~k!hcy,`hn~(zmU{by|Pgb]bwwc`4=4996[?/fpe*w`(ojr%oaew/sf\tkruWniTm~|jg^211>S7'nxm"h gbz-gim'{nT|cz}_fa\evtboV;996[?/fpe*w`(ojr%oaew/sf\tkruWniTm~|jg^011>S7'nxm"h gbz-gim'{nT|cz}_fa\evtboV9996[?/fpe*w`(ojr%oaew/sf\tkruWniTm~|jg^61=>S7'nxm"h gbz-gim'{nT|cz}_fa\evtboVn:0=0=9:W3+bta&{l$knv!cmi{+wbXxg~ySjmParpfcZb6484956[?/fpe*w`(ojr%oaew/sf\tkruWniTm~|jg^f2878512_;#j|i.sd,cf~)keas#jPpovq[beXizxnkRj><2<1=>S7'nxm"h gbz-gim'{nT|cz}_fa\evtboVn:090=8:W3+bta&{l$knv!cmi{+wbXxg~ySjmParpfcZb6W9837X> gsd-vc)`kq$h`fv re]sjqtXojUjkh_e3\57><]9%l~k }f.e`|+ekcq%yhR~ats]dgZgtzlmTh gsd-vc)`kq$h`fv ws]sjqtXj`d7=3<>;T2,cw`)zo%lou lljz,swYwf}xTnd`32?02?P6(o{l%~k!hcy,`hn~({U{by|Pbhl?7;463\:$kh!rg-dg}(ddbr${Qnup\flh;<78;7X> gsd-vc)`kq$h`fv ws]sjqtXj`dT4U1-dvc(un&mht#mcky-tvZvi|{UiecQ>219V4*aun'xm#jmw.bnh|*quWyd~Rlfn^014>S7'nxm"h gbz-gim'~xT|cz}_ckm[6473\:$kh!rg-dg}(ddbr${Qnup\flhX<;<0Y=!hrg,qb*adp'iggu!xr^rmpwYeagUsc>?0104?P6(o{l%~k!hcy,`hn~({U{by|Pbhl\|jt789::>;5Z0.eqb+ta'nis"nbdx.uq[uhszVhbbRv`r123571<]9%l~k }f.e`|+ekcq%|~R~ats]amkYg{:;<1^<"i}f/pe+be&jf`t"y}_qlwvZdnfVrd~=>?2005?P6(o{l%~k!hcy,`hn~({U{by|Pbhl\|jt78999m6[?/fpe*w`(ojr%oaew/vp\tkruWkceSua}0120[VQ7:91^<"i}f/pe+be&jf`t"y}_qlwvZad4949<6[?/fpe*w`(ojr%oaew/vp\tkruWni7=3328Q5)`zo$yj"ilx/aoo})pzVzexQhc=1=65=R8&myj#|i/fa{*fjlp&}yS}`{r^e`8186n2_;#j|i.sd,cf~)keas#z|Ppovq[beX88l0Y=!hrg,qb*adp'iggu!xr^rmpwY`kV;:j6[?/fpe*w`(ojr%oaew/vp\tkruWniT>f:W3+bta&{l$knv!cmi{+rtXxg~ySjmP4348Q5)`zo$yj"ilx/aoo})pzVzexQhc^cpv`a;878=7X> gsd-vc)`kq$h`fv ws]sjqtXojUjkh<0<12>S7'nxm"h gbz-gim'~xT|cz}_fa\evtbo585>;5Z0.eqb+ta'nis"nbdx.uq[uhszVmhSl}}ef>0:70<]9%l~k }f.e`|+ekcq%|~R~ats]dgZgtzlm783<:;T2,cw`)zo%lou lljz,swYwf}xTknQnssgd[5423\:$kh!rg-dg}(ddbr${Qnup\cfYf{{olS<<:;T2,cw`)zo%lou lljz,swYwf}xTknQnssgd[7423\:$kh!rg-dg}(ddbr${Qnup\cfYf{{olS><:;T2,cw`)zo%lou lljz,swYwf}xTknQnssgd[14>3\:$kh!rg-dg}(ddbr${Qnup\cfYf{{olSi?30?0:?P6(o{l%~k!hcy,`hn~({U{by|Pgb]bwwc`Wm;7=3<6;T2,cw`)zo%lou lljz,swYwf}xTknQnssgd[a7;:7827X> gsd-vc)`kq$h`fv ws]sjqtXojUjkh_e3?7;4>3\:$kh!rg-dg}(ddbr${Qnup\cfYf{{olSi?34?0;?P6(o{l%~k!hcy,`hn~({U{by|Pgb]bwwc`Wm;TS7'nxm"h gbz-gim'~xT|cz}_fa\evtboVn:S><7;T2,cw`)zo%lou lljz,swYwf}xTknQnssgd[a7X<;?0Y=!hrg,qb*adp'iggu!xr^rmpwY`kVrd~=>?0378Q5)`zo$yj"ilx/aoo})pzVzexQhc^zlv5679;?0Y=!hrg,qb*adp'iggu!xr^rmpwY`kVrd~=>?2378Q5)`zo$yj"ilx/aoo})pzVzexQhc^zlv567;::0Y=!hrg,qb*ak8'xo#j|>.sdtbq)Je|rT^LCPRE]FJZ@PN]8:??5Z0.eqb+ta'nf;"j gs3-vcqa|&GfyuQ]AL]Q@ZCIWO]MX??P13d8Q5)`zo$yj"ic0/pg+bt6&{l|jy!Bmtz\VDKXZLMDYYQJN031`>S7'nxm"h gm2-va)`z8$yjzh{/bwqvZ`pn}Uxxlzj<1<1`>S7'nxm"h gm2-va)`z8$yjzh{/bwqvZ`pn}Uxxlzj<0<1g>S7'nxm"h gm2-va)`z8$yjzh{/bwqvZ`pn}Uxxlzj_10`?P6(o{l%~k!hl1,q`*au9'xm{kz ctpq[cqa|VymykP1278Q5)`zo$yj"ic0/pg+bt6&{l|jy!lusp\br`sWz~jxhQbuy2344:76:<0Y=!hrg,qb*ak8'xo#j|>.sdtbq)d}{xTjzh{_rvbp`Yj}q:;<<2?>016?P6(o{l%~k!hl1,q`*au9'xm{kz ctpq[cqa|VymykPmtz3457;979=7X> gsd-vc)`d9$yh"i}1/pescr(k|xySkyit^qweqcXe|r;<=?31?31<>S7'nxm"h gm2-va)`z8$yjzh{/dosp|Yao~Tjo<8;T2,cw`)zo%l`= }d.eq5+tao~$i`~{y^dtbqYn:o1^<"i}f/pe+bj7&{n$k?!rguep*cjx}sTjzh{_h]nq}67899;7X> gsd-vc)`d9$yh"i}1/pescr(mdzuRhxfu]j[hs89:;=?74U1-dvc(un&mg<#|k/fpbw+tt|z%ym`Qjmqvz[cdXa::0Y=!hrg,qb*ak8'xo#j|ns/pppv)uidUna}zv_g`\mZiu89:;?>5Z0.eqb+ta'nf;"j gscp*wus{&xjaRkbpu{\bgYnWfx;<=>>1410?P6(o{l%~k!hl1,q`*auiz$yy} r`o\ahvsqVliSdQ`r1234431;:1^<"i}f/pe+bj7&{n$ko|.sqww*tfeVof|ywPfc]j[jt789::95=<;T2,cw`)zo%l`= }d.eqev(u{}y$~lcPelrw}Z`eW`Ud~=>?00:077=R8&myj#|i/fn3*wb(o{kx"}{s.pbiZcjx}sTjoQf_np34565>:80Y=!hrg,qb*ak8'xo#j|ns/pppv)uidUna}zv_g`\mZiu89:;:?==;T2,cw`)zo%l`= }d.eqev(u{}y$~lcPelrw}Z`eW`Ud~=>?07117>S7'nxm"h gm2-va)uxg~y#@m`uov\gjsi|;>0Y=!hrg,qb*ak8'xo#~ats-Ngjsi|Vidycz>259V4*aun'xm#jb?.sf,vuhsz&Ghcx`{_bmvjq45<2_;#j|i.sd,ci6)zm%y|cz}/LalqkrXkfex><;;T2,cw`)zo%l`= }d.psjqt(Eje~byQlotlw064<]9%l~k }f.eo4+tc'{zex!BcnwmpZeh}g~Ttb|30?32[LHQW98h7X> gsd-vc)`d9$yh"|nup,Ifirf}Uhcx`{_ymq84869;i0Y=!hrg,qb*ak8'xo#~ats-Ngjsi|VidyczPxnp?6;76:m1^<"i}f/pe+bj7&{n$~}`{r.O`kphsWje~byQwos>0:476:j1^<"i}f/pe+bj7&{n$~}`{r.O`kphsWje~byQwos>0:445k2_;#j|i.sd,ci6)zm%y|cz}/LalqkrXkfexRv`r=6=547f3\:$kh!rg-dh5(ul&x{by| N032b>S7'nxm"h gm2-va)uxg~y#naznu>3:4`<]9%l~k }f.eo4+tc'{zex!lotlw8486n2_;#j|i.sd,ci6)zm%y|cz}/bmvjq:568l0Y=!hrg,qb*ak8'xo#~ats-`kphs4:4:j6[?/fpe*w`(oe:%~i!}povq+firf}6?2e:W3+bta&{l$ka>!re-qtkru'je~byQ=1d9V4*aun'xm#jb?.sf,vuhsz&idyczP30g8Q5)`zo$yj"ic0/pg+wvi|{%hcx`{_501?P6(o{l%~k!hl1,q`*twf}x$ob{at^f28585:2_;#j|i.sd,ci6)zm%y|cz}/bmvjqYc95;5>?5Z0.eqb+ta'nf;"j rqlwv*eh}g~Th<2=>308Q5)`zo$yj"ic0/pg+wvi|{%hcx`{_e3?7;453\:$kh!rg-dh5(ul&x{by| cnwmpZb64=49=6[?/fpe*w`(oe:%~i!}povq+firf}Uo=R>=1:W3+bta&{l$ka>!re-qtkru'je~byQk1^315>S7'nxm"h gm2-va)uxg~y#naznu]g5Z4592_;#j|i.sd,ci6)zm%y|cz}/bmvjqYc9V99=6[?/fpe*w`(oe:%~i!}povq+firf}Uo=R:=4:W3+bta&{l$ka>!re-qtkru'je~byQaou23445a3\:$kh!rg-dh5(pz&m|m~ hpg,tvu`(EhnoSigif^rmpwYwimUjhi>?01]`}969;o1^<"i}f/pe+bj7&~x$kzo|.fre*rtwn&GjhiQkigd\tkruWykoSljk0123[f;979m7X> gsd-vc)`d9$|~"ixar,dtc(pzyl$Aljk_ekebZvi|{U{miQnde2345Ydq585?k5Z0.eqb+ta'nf;"z| gvcp*bva&~x{j"Cnde]gmc`Xxg~yS}ok_`fg4567Wjs7?3=i;T2,cw`)zo%l`= xr.etev(`xo$|~}h M`fg[aoanVzexQae]b`a6789Uhu1:1419V4*aun'xm#jb?.vp,crgt&nzm"z|f.Ob`aYcaolT|cz}_qcg[dbc89:;Sa{{<0<74>S7'nxm"h gm2-sw)`hy%k}h!wsre+HgclVnbjkQnup\tdbXimn;<=>Pltv?6;273\:$kh!rg-dh5(pz&m|m~ hpg,tvu`(EhnoSigif^rmpwYwimUjhi>?01]oqq:46=:0Y=!hrg,qb*ak8'}y#jyns/esb+quxo%FmijPdhde[uhszVzjhRokd1234Zjr|5>58=5Z0.eqb+ta'nf;"z| gvcp*bva&~x{j"Cnde]gmc`Xxg~yS}ok_`fg4567We080;0:W3+bta&{l$ka>!ws-dsdu)oyl%{~i/Lcg`ZbnnoU{by|Pp`f\eab789:Ttb|34?63?P6(o{l%~k!hl1,tv*apiz$l|k xrqd,IdbcWmcmjR~ats]seaYflm:;<=Qwos>6:7`<]9%l~k }f.eo4+qu'n}j#if/uqtc)caolT|cz}_qcg8185n2_;#j|i.sd,ci6){%l{l}!gqd-swva'mcmjR~ats]sea:26;o0Y=!hrg,qb*ak8'}y#jyns/esb+quxo%oekhPpovq[ugcW=8n7X> gsd-vc)`d9$|~"ixar,dtc(pzyl$hdhi_qlwvZvflV?8;6[?/fpe*w`(oe:%{!hw`q-cu`){zm#igif^rmpwYwimUjhi>?01>7:61<]9%l~k }f.eo4+qu'n}j#if/uqtc)caolT|cz}_qcg[dbc89:;080=a:W3+bta&{l$ka>!ws-dsdu)oyl%{~i/qplcZ`rdeUb??5Z0.eqb+ta'nf;"z| gvcp*bva&~x{j"~}of]eqijXaVg~t=>?3218Q5)`zo$yj"ic0/uq+bqf{'m{j#y}pg-svjaXn|fgSdQbuy234674:2_;#j|i.sd,ci6){%l{l}!gqd-swva'yxdkRhzlm]j[kis89::>;5Z0.eqb+ta'nf;"z| gvcp*rus{&i9#iazt^k1270<]9%l~k }f.eo4+qu'n}j#y|tr-`6*bh}}Ub:?<9;T2,cw`)zo%l`= xr.etev(p{}y$o?!kotv\m2>582_;#j|i.sd,ci6){%l{l}!wrvp+fijx;8h7X> gsd-vc)`d9$|~"ixar,twqu(zhgTmac`su]eqijXa:>0Y=!hrg,qb*ak8'}y#jyns/uppv)uidUj``a|t^dvhiYnWds<=>?369V4*aun'xm#jb?.vp,crgt&~y"|nm^coijusWog`RgPmtz345668>9=7X> gsd-vc)`d9$|~"ixar,twqu(zhgTmac`su]eqijXaVg~t=>?03402>S7'nxm"h gm2-sw)`hy%{~z|/scn[djjgz~Tjxbc_h]nq}6789<?319V4*aun'xm#jb?.vp,crgt&~y"|nm^dvhiYnWds<=>?1171b>S7'nxm"h gm2-sw)`hy%{~z|/scn[cskdVcTaxv?012137`<]9%l~k }f.eo4+qu'n}j#y|tr-qehYa}efTeRczx1234355n2_;#j|i.sd,ci6){%l{l}!wrvp+wgjWog`RgPmtz3456018n0Y=!hrg,qb*ak8'}y#ob_vp\akYn98l0Y=!hrg,qb*ak8'}y#ob_vp\akYn9V;9?6[?/fpe*w`(oe:%{!xpovq+Heh}g~Tob{at368Q5)`zo$yj"ic0/uq+rvi|{%Fob{at^alqkr6:=1^<"i}f/pe+bj7&~x${}`{r.O`kphsWje~by<=4:W3+bta&{l$ka>!ws-ttkru'DidyczPcnwmp6433\:$kh!rg-dh5(pz&}{by| MbmvjqYdg|d8><4U1-dvc(un&mg<#y}/vrmpw)JkfexRm`uov\|jt;87;:SD@Y_10`?P6(o{l%~k!hl1,tv*qwf}x$Anaznu]`kphsWqey0<0>13a8Q5)`zo$yj"ic0/uq+rvi|{%Fob{at^alqkrXpfx7>3?>2e9V4*aun'xm#jb?.vp,suhsz&Ghcx`{_bmvjqYg{6822b9V4*aun'xm#jb?.vp,suhsz&Ghcx`{_bmvjqYg{682<<=c:W3+bta&{l$ka>!ws-ttkru'DidyczPcnwmpZ~hz5>5=f:W3+bta&{l$ka>!ws-ttkru'je~by2=>0d8Q5)`zo$yj"ic0/uq+rvi|{%hcx`{<2<2b>S7'nxm"h gm2-sw)pxg~y#naznu>7:4c<]9%l~k }f.eo4+qu'~zex!lotlw[57b3\:$kh!rg-dh5(pz&}{by| cnwmpZ76m2_;#j|i.sd,ci6){%||cz}/bmvjqY59l1^<"i}f/pe+bj7&~x${}`{r.alqkrX;8o0Y=!hrg,qb*ak8'}y#z~ats-`kphsW=897X> gsd-vc)`d9$|~"ynup,gjsi|Vn:0=0=2:W3+bta&{l$ka>!ws-ttkru'je~byQk1=3=67=R8&myj#|i/fn3*rt(yd~"m`uov\`4:56;80Y=!hrg,qb*ak8'}y#z~ats-`kphsWm;7?3<=;T2,cw`)zo%l`= xr.usjqt(kfexRj><5<15>S7'nxm"h gm2-sw)pxg~y#naznu]g5Z6592_;#j|i.sd,ci6){%||cz}/bmvjqYc9V;9=6[?/fpe*w`(oe:%{!xpovq+firf}Uo=R<=1:W3+bta&{l$ka>!ws-ttkru'je~byQk1^115>S7'nxm"h gm2-sw)pxg~y#naznu]g5Z25:2_;#j|i.sd,ci6){%||cz}/bmvjqYc:5:5>?5Z0.eqb+ta'nf;"z| wqlwv*eh}g~Th?2>>308Q5)`zo$yj"ic0/uq+rvi|{%hcx`{_e0?6;453\:$kh!rg-dh5(pz&}{by| cnwmpZb54:49>6[?/fpe*w`(oe:%{!xpovq+firf}Uo>1:1209V4*aun'xm#jb?.vp,suhsz&idyczPd3]364=R8&myj#|i/fn3*rt(yd~"m`uov\`7Y6:81^<"i}f/pe+bj7&~x${}`{r.alqkrXl;U9><5Z0.eqb+ta'nf;"z| wqlwv*eh}g~Th?Q<209V4*aun'xm#jb?.vp,suhsz&idyczPd3]767=R8&myj#|i/fn3*rt(yd~"m`uov\`6:76;80Y=!hrg,qb*ak8'}y#z~ats-`kphsWm97=3<=;T2,cw`)zo%l`= xr.usjqt(kfexRj<<3<16>S7'nxm"h gm2-sw)pxg~y#naznu]g7959:;1^<"i}f/pe+bj7&~x${}`{r.alqkrXl:6?2??4U1-dvc(un&mg<#y}/vrmpw)dg|dSi=P0338Q5)`zo$yj"ic0/uq+rvi|{%hcx`{_e1\577<]9%l~k }f.eo4+qu'~zex!lotlw[a5X:;;0Y=!hrg,qb*ak8'}y#z~ats-`kphsWm9T???4U1-dvc(un&mg<#y}/vrmpw)dg|dSi=P4368Q5)`zo$yj"ic0/uq+rvi|{%hcx`{_omw45669>1^<"i}f/pe+hcj'me~xRg30?3;?P6(o{l%~k!bel-gkprXa5;;2<64U1-dvc(un&gna"j`uu]j8479911^<"i}f/pe+hcj'me~xRg313<2<>S7'nxm"h mdo,`jssW`6:?3?7;T2,cw`)zo%fi`!kotv\m9736820Y=!hrg,qb*kbe&ndyyQf<07=5==R8&myj#|i/lgn+air|Vc7=;0>8:W3+bta&{l$ahc dnww[l:6?7;37X> gsd-vc)jmd%ocxzPi=3;:4><]9%l~k }f.ofi*bh}}Ub0<71169V4*aun'xm#`kb/emvpZo;97;37X> gsd-vc)jmd%ocxzPi=03:4><]9%l~k }f.ofi*bh}}Ub0??1199V4*aun'xm#`kb/emvpZo;:;4:46[?/fpe*w`(elg$hb{{_h>17;7?3\:$kh!rg-nah)cg|~Te1<;>0:8Q5)`zo$yj"cjm.flqqYn4;?5=55Z0.eqb+ta'dof#iazt^k?638602_;#j|i.sd,i`k(lfSd2=7?3;?P6(o{l%~k!bel-gkprXa5832<64U1-dvc(un&gna"j`uu]j87?99>1^<"i}f/pe+hcj'me~xRg32?3;?P6(o{l%~k!bel-gkprXa59;2<64U1-dvc(un&gna"j`uu]j8679911^<"i}f/pe+hcj'me~xRg333<2<>S7'nxm"h mdo,`jssW`68?3?7;T2,cw`)zo%fi`!kotv\m9536820Y=!hrg,qb*kbe&ndyyQf<27=52=R8&myj#|i/lgn+air|Vc7?3?8;T2,cw`)zo%fi`!kotv\m9299>1^<"i}f/pe+hcj'me~xRg35?34?P6(o{l%~k!bel-gkprXa5<5=:5Z0.eqb+ta'dof#iazt^k?3;703\:$kh!rg-nah)cg|~Te161169V4*aun'xm#`kb/emvpZo;17;=7X> gsd-vc)jmd%ocxzPi^222>S7'nxm"h mdo,`jssW`U:=:5Z0.eqb+ta'dof#iazt^k\55703\:$kh!rg-nah)cg|~TeR?>169V4*aun'xm#`kb/emvpZoX9;;<7X> gsd-vc)jmd%ocxzPi^3052=R8&myj#|i/lgn+air|VcT=9?8;T2,cw`)zo%fi`!kotv\mZ729>1^<"i}f/pe+hcj'me~xRgP1734?P6(o{l%~k!bel-gkprXaV;<=:5Z0.eqb+ta'dof#iazt^k\5=703\:$kh!rg-nah)cg|~TeR?6179V4*aun'xm#`kb/emvpZoX:8=0Y=!hrg,qb*kbe&ndyyQf_3223>S7'nxm"h mdo,`jssW`U9=<94U1-dvc(un&gna"j`uu]j[746?2_;#j|i.sd,i`k(lfSdQ=3058Q5)`zo$yj"cjm.flqqYnW;>:;6[?/fpe*w`(elg$hb{{_h]1141<]9%l~k }f.ofi*bh}}UbS?8>7:W3+bta&{l$ahc dnww[lY5?8=0Y=!hrg,qb*kbe&ndyyQf_3:23>S7'nxm"h mdo,`jssW`U95<84U1-dvc(un&gna"j`uu]j[6703\:$kh!rg-nah)cg|~TeR=?169V4*aun'xm#`kb/emvpZoX;8;<7X> gsd-vc)jmd%ocxzPi^1152=R8&myj#|i/lgn+air|VcT?>?8;T2,cw`)zo%fi`!kotv\mZ539>1^<"i}f/pe+hcj'me~xRgP3435?P6(o{l%~k!bel-gkprXaV>::6[?/fpe*w`(elg$hb{{_h]653=R8&myj#|i/lgn+air|VcT:<84U1-dvc(un&gna"j`uu]j[2713\:$kh!rg-nah)cg|~TeR6>6:W3+bta&{l$ahc dnww[lY>9j1^<"i}f/pe+hcj'me~xRgPnnv34576m2_;#j|i.sd,i`k(omg%h`!Br`o\VDK69o1^<"i}f/pe+hcj'nnf"ic Mscn[WGJ99;m7X> gsd-vc)jmd%lh` km.OqehYUID;:=k5Z0.eqb+ta'dof#jjb.eo,IwgjW[KF=??i;T2,cw`)zo%fi`!hdl,gi*KuidUYM@?<1g9V4*aun'xm#`kb/ffn*ak(E{kfS_OB153e?P6(o{l%~k!bel-d`h(ce&Gym`Q]AL365c=R8&myj#|i/lgn+bbj&mg$Aob_SCN537a3\:$kh!rg-nah)`ld$oa"C}al]QEH709o1^<"i}f/pe+hcj'nnf"ic Mscn[WGJ91;m7X> gsd-vc)jmd%lh` km.OqehYUID;2=h5Z0.eqb+ta'dof#jjb.eo,IwgjW[KF>>f:W3+bta&{l$ahc geo-`h)JzhgT^LC=10d8Q5)`zo$yj"cjm.egi+bj'DxjaR\NM302b>S7'nxm"h mdo,cak)ld%F~lcPR@O174`<]9%l~k }f.ofi*ace'nf#@|nm^PBI726n2_;#j|i.sd,i`k(omg%h`!Br`o\VDK5=8l0Y=!hrg,qb*kbe&moa#jb/LpbiZTFE;<:j6[?/fpe*w`(elg$kic!dl-NvdkXZHG9;f:W3+bta&{l$ahc geo-`h)JzhgT^LC=90g8Q5)`zo$yj"cjm.egi+bj'DxjaR\NM23e?P6(o{l%~k!bel-d`h(ce&Gym`Q]AL135c=R8&myj#|i/lgn+bbj&mg$Aob_SCN747a3\:$kh!rg-nah)`ld$oa"C}al]QEH559o1^<"i}f/pe+hcj'nnf"ic Mscn[WGJ;:;m7X> gsd-vc)jmd%lh` km.OqehYUID9?=k5Z0.eqb+ta'dof#jjb.eo,IwgjW[KF?8?i;T2,cw`)zo%fi`!hdl,gi*KuidUYM@=91g9V4*aun'xm#`kb/ffn*ak(E{kfS_OB363e?P6(o{l%~k!bel-d`h(ce&Gym`Q]AL1;5c=R8&myj#|i/lgn+bbj&mg$Aob_SCN7<7b3\:$kh!rg-nah)`ld$oa"C}al]QEH26n2_;#j|i.sd,i`k(omg%h`!Br`o\VDK388l0Y=!hrg,qb*kbe&moa#jb/LpbiZTFE=;:j6[?/fpe*w`(elg$kic!dl-NvdkXZHG?>f:W3+bta&{l$ahc geo-`h)JzhgT^LC;40d8Q5)`zo$yj"cjm.egi+bj'DxjaR\NM572b>S7'nxm"h mdo,cak)ld%F~lcPR@O724`<]9%l~k }f.ofi*ace'nf#@|nm^PBI116n2_;#j|i.sd,i`k(omg%h`!Br`o\VDK308l0Y=!hrg,qb*kbe&moa#jb/LpbiZTFE=3:i6[?/fpe*w`(elg$kic!dl-NvdkXZHG>=k5Z0.eqb+ta'dof#jjb.eo,IwgjW[KF9=?i;T2,cw`)zo%fi`!hdl,gi*KuidUYM@;>1g9V4*aun'xm#`kb/ffn*ak(E{kfS_OB533e?P6(o{l%~k!bel-d`h(ce&Gym`Q]AL705c=R8&myj#|i/lgn+bbj&mg$Aob_SCN117a3\:$kh!rg-nah)`ld$oa"C}al]QEH329o1^<"i}f/pe+hcj'nnf"ic Mscn[WGJ=?;m7X> gsd-vc)jmd%lh` km.OqehYUID?<=k5Z0.eqb+ta'dof#jjb.eo,IwgjW[KF95?i;T2,cw`)zo%fi`!hdl,gi*KuidUYM@;61d9V4*aun'xm#`kb/ffn*ak(E{kfS_OB60d8Q5)`zo$yj"cjm.egi+bj'DxjaR\NM722b>S7'nxm"h mdo,cak)ld%F~lcPR@O554`<]9%l~k }f.ofi*ace'nf#@|nm^PBI346n2_;#j|i.sd,i`k(omg%h`!Br`o\VDK1;8l0Y=!hrg,qb*kbe&moa#jb/LpbiZTFE?>:j6[?/fpe*w`(elg$kic!dl-NvdkXZHG=9f:W3+bta&{l$ahc geo-`h)JzhgT^LC970d8Q5)`zo$yj"cjm.egi+bj'DxjaR\NM7:2b>S7'nxm"h mdo,cak)ld%F~lcPR@O5=4c<]9%l~k }f.ofi*ace'nf#@|nm^PBI27a3\:$kh!rg-nah)`ld$oa"C}al]QEH179o1^<"i}f/pe+hcj'nnf"ic Mscn[WGJ?8;m7X> gsd-vc)jmd%lh` km.OqehYUID=9=h5Z0.eqb+ta'dof#jjb.eo,IwgjW[KF4 gsd-vc)jmd%lh` km.L2467>3\:$kh!rg-nah)`ld$oa"@>043:?P6(o{l%~k!bel-d`h(ce&D:<:?6;T2,cw`)zo%fi`!hdl,gi*H680;37X> gsd-vc)jmd%lh` km.L254?<]9%l~k }f.ofi*ace'nf#C?>10;8Q5)`zo$yj"cjm.egi+bj'G;:?<74U1-dvc(un&gna"ikm/fn+K76=830Y=!hrg,qb*kbe&moa#jb/O3234?<]9%l~k }f.ofi*ace'nf#C?>90;8Q5)`zo$yj"cjm.egi+bj'G;9=<74U1-dvc(un&gna"ikm/fn+K75;830Y=!hrg,qb*kbe&moa#jb/O3114?<]9%l~k }f.ofi*ace'nf#C?=70;8Q5)`zo$yj"cjm.egi+bj'G;95<64U1-dvc(un&gna"ikm/fn+K74901^<"i}f/pe+hcj'nnf"ic N0125<=R8&myj#|i/lgn+bbj&mg$B<=<189V4*aun'xm#`kb/ffn*ak(F89>=45Z0.eqb+ta'dof#jjb.eo,J450901^<"i}f/pe+hcj'nnf"ic N01:5<=R8&myj#|i/lgn+bbj&mg$B<:>189V4*aun'xm#`kb/ffn*ak(F8>8=45Z0.eqb+ta'dof#jjb.eo,J422901^<"i}f/pe+hcj'nnf"ic N0645==R8&myj#|i/lgn+bbj&mg$B<;>8:W3+bta&{l$ahc geo-`h)I9>;37X> gsd-vc)jmd%lh` km.L2=4><]9%l~k }f.ofi*ace'nf#C<>199V4*aun'xm#`kb/ffn*ak(F;9:46[?/fpe*w`(elg$kic!dl-M607?3\:$kh!rg-nah)`ld$oa"@=70:8Q5)`zo$yj"cjm.egi+bj'G82=55Z0.eqb+ta'dof#jjb.eo,J67602_;#j|i.sd,i`k(omg%h`!A323;?P6(o{l%~k!bel-d`h(ce&D89<64U1-dvc(un&gna"ikm/fn+K50911^<"i}f/pe+hcj'nnf"ic N2;2<>S7'nxm"h mdo,cak)ld%E88:W3+bta&{l$ahc geo-`h)I<0;<7X> gsd-vc)jmd%lh` km.L65==R8&myj#|i/lgn+bbj&mg$B8?>8:W3+bta&{l$ahc geo-`h)I=:;37X> gsd-vc)jmd%lh` km.L614><]9%l~k }f.ofi*ace'nf#C;8199V4*aun'xm#`kb/ffn*ak(F<3:46[?/fpe*w`(elg$kic!dl-M247?3\:$kh!rg-nah)`ld$oa"@930:8Q5)`zo$yj"cjm.egi+bj'G<>=55Z0.eqb+ta'dof#jjb.eo,J31602_;#j|i.sd,i`k(omg%h`!A6834?P6(o{l%~k!bel-d`h(ce&D<=55Z0.eqb+ta'dof#jjb.eo,J27602_;#j|i.sd,i`k(omg%h`!A723;?P6(o{l%~k!bel-d`h(ce&D<9<64U1-dvc(un&gna"ikm/fn+K10911^<"i}f/pe+hcj'nnf"ic N6;2<>S7'nxm"h mdo,cak)ld%E48:W3+bta&{l$ahc geo-`h)I00;<7X> gsd-vc)jmd%lh` km.L:5==R8&myj#|i/lgn+bbj&mg$B4?>8:W3+bta&{l$ahc geo-`h)I1:;37X> gsd-vc)jmd%lh` km.L:14><]9%l~k }f.ofi*ace'nf#C78199V4*aun'xm#`kb/ffn*ak(F03996[?/fpe*w`(elg$kic!dl-\rdtnfmos<=>?<1<12>S7'nxm"h mdo,cak)ld%Tzl|fneg{456748:5>;5Z0.eqb+ta'dof#jjb.eo,[sguagnnt=>?0=32:70<]9%l~k }f.ofi*ace'nf#Rxnrhlga}67896:>3<9;T2,cw`)zo%fi`!hdl,gi*Yqi{cehhv?012?5685>2_;#j|i.sd,i`k(omg%h`!Pv`pjjac89:;0<:1279V4*aun'xm#`kb/ffn*ak(Wkyecjjx12349726;<0Y=!hrg,qb*kbe&moa#jb/^tbvlhcmq:;<=2>6?05?P6(o{l%~k!bel-d`h(ce&U}mgaddz3456;9>49:6[?/fpe*w`(elg$kic!dl-\rdtnfmos<=>?<0:=63=R8&myj#|i/lgn+bbj&mg$S{o}ioff|56785;22?;4U1-dvc(un&gna"ikm/fn+Zpfz`doiu>?01>2:70<]9%l~k }f.ofi*ace'nf#Rxnrhlga}678969<3<9;T2,cw`)zo%fi`!hdl,gi*Yqi{cehhv?012?6485>2_;#j|i.sd,i`k(omg%h`!Pv`pjjac89:;0?<1279V4*aun'xm#`kb/ffn*ak(Wkyecjjx12349446;<0Y=!hrg,qb*kbe&moa#jb/^tbvlhcmq:;<=2=4?05?P6(o{l%~k!bel-d`h(ce&U}mgaddz3456;:<49:6[?/fpe*w`(elg$kic!dl-\rdtnfmos<=>?<34=63=R8&myj#|i/lgn+bbj&mg$S{o}ioff|567858<2?84U1-dvc(un&gna"ikm/fn+Zpfz`doiu>?01>1<;413\:$kh!rg-nah)`ld$oa"Qyaskm``~789:7>40=5:W3+bta&{l$ahc geo-`h)X~hxbbikw01238785>2_;#j|i.sd,i`k(omg%h`!Pv`pjjac89:;0>>1279V4*aun'xm#`kb/ffn*ak(Wkyecjjx12349566;<0Y=!hrg,qb*kbe&moa#jb/^tbvlhcmq:;<=2<2?05?P6(o{l%~k!bel-d`h(ce&U}mgaddz3456;;:49:6[?/fpe*w`(elg$kic!dl-\rdtnfmos<=>?<26=63=R8&myj#|i/lgn+bbj&mg$S{o}ioff|567859>2?;4U1-dvc(un&gna"ikm/fn+Zpfz`doiu>?01>0:73<]9%l~k }f.ofi*ace'nf#Rxnrhlga}67896?2?;4U1-dvc(un&gna"ikm/fn+Zpfz`doiu>?01>6:73<]9%l~k }f.ofi*ace'nf#Rxnrhlga}67896=2?;4U1-dvc(un&gna"ikm/fn+Zpfz`doiu>?01>4:73<]9%l~k }f.ofi*ace'nf#Rxnrhlga}6789632?;4U1-dvc(un&gna"ikm/fn+Zpfz`doiu>?01>::4c<]9%l~k }f.ofi*ace'nf#iazt^k?4;7a3\:$kh!rg-nah)`ld$oa"j`uu]j84699o1^<"i}f/pe+hcj'nnf"ic dnww[l:697;m7X> gsd-vc)jmd%lh` km.flqqYn4885=k5Z0.eqb+ta'dof#jjb.eo,`jssW`6:?3?i;T2,cw`)zo%fi`!hdl,gi*bh}}Ub0<:11g9V4*aun'xm#`kb/ffn*ak(lfSd2>5?3e?P6(o{l%~k!bel-d`h(ce&ndyyQf<04=5c=R8&myj#|i/lgn+bbj&mg$hb{{_h>23;7a3\:$kh!rg-nah)`ld$oa"j`uu]j84>99o1^<"i}f/pe+hcj'nnf"ic dnww[l:617;n7X> gsd-vc)jmd%lh` km.flqqYn484:j6[?/fpe*w`(elg$kic!dl-gkprXa58;2<0>f:W3+bta&{l$ahc geo-`h)cg|~Te1<=>0d8Q5)`zo$yj"cjm.egi+bj'me~xRg322<2b>S7'nxm"h mdo,cak)ld%ocxzPi=07:4`<]9%l~k }f.ofi*ace'nf#iazt^k?6086n2_;#j|i.sd,i`k(omg%h`!kotv\m94168l0Y=!hrg,qb*kbe&moa#jb/emvpZo;:>4:j6[?/fpe*w`(elg$kic!dl-gkprXa583240>e:W3+bta&{l$ahc geo-`h)cg|~Te1<11g9V4*aun'xm#`kb/ffn*ak(lfSd2<0?3e?P6(o{l%~k!bel-d`h(ce&ndyyQf<23=5c=R8&myj#|i/lgn+bbj&mg$hb{{_h>06;7a3\:$kh!rg-nah)`ld$oa"j`uu]j86599o1^<"i}f/pe+hcj'nnf"ic dnww[l:4<7;m7X> gsd-vc)jmd%lh` km.flqqYn4:?5=h5Z0.eqb+ta'dof#jjb.eo,`jssW`682e:W3+bta&{l$ahc geo-`h)cg|~Te1811d9V4*aun'xm#`kb/ffn*ak(lfSd28>0g8Q5)`zo$yj"cjm.egi+bj'me~xRg38?3f?P6(o{l%~k!bel-d`h(ce&ndyyQf<8<2`>S7'nxm"h mdo,cak)ld%ocxzPi^22`>S7'nxm"h mdo,cak)ld%ocxzPi^32a>S7'nxm"h mdo,cak)ld%ocxzPi^335`=R8&myj#|i/lgn+bbj&mg$hb{{_h]254c<]9%l~k }f.ofi*ace'nf#iazt^k\577b3\:$kh!rg-nah)`ld$oa"j`uu]j[456m2_;#j|i.sd,i`k(omg%h`!kotv\mZ739l1^<"i}f/pe+hcj'nnf"ic dnww[lY6=8o0Y=!hrg,qb*kbe&moa#jb/emvpZoX9?;n7X> gsd-vc)jmd%lh` km.flqqYnW8=:i6[?/fpe*w`(elg$kic!dl-gkprXaV;3=h5Z0.eqb+ta'dof#jjb.eo,`jssW`U:5=?j;T2,cw`)zo%fi`!hdl,gi*bh}}UbS??>e:W3+bta&{l$ahc geo-`h)cg|~TeR<=1d9V4*aun'xm#`kb/ffn*ak(lfSdQ=30g8Q5)`zo$yj"cjm.egi+bj'me~xRgP253f?P6(o{l%~k!bel-d`h(ce&ndyyQf_372a>S7'nxm"h mdo,cak)ld%ocxzPi^055`=R8&myj#|i/lgn+bbj&mg$hb{{_h]134c<]9%l~k }f.ofi*ace'nf#iazt^k\6=7b3\:$kh!rg-nah)`ld$oa"j`uu]j[7?6l2_;#j|i.sd,i`k(omg%h`!kotv\mZ56m2_;#j|i.sd,i`k(omg%h`!kotv\mZ579l1^<"i}f/pe+hcj'nnf"ic dnww[lY498o0Y=!hrg,qb*kbe&moa#jb/emvpZoX;;;n7X> gsd-vc)jmd%lh` km.flqqYnW:9:i6[?/fpe*w`(elg$kic!dl-gkprXaV9?=h5Z0.eqb+ta'dof#jjb.eo,`jssW`U8910312>S7'nxm"h mdo,cak)ld%bb~zPLQO\IP^698;:>85Z0.eqb+ta'dof#jjb.eo,mkusWEZFS@[W133260=R8&myj#|i/lgn+bbj&mg$ec}{_MRN[HS_9:;:>85Z0.eqb+ta'dof#jjb.eo,mkusWEZFS@[W153260=R8&myj#|i/lgn+bbj&mg$ec}{_MRN[HS_9<;:>85Z0.eqb+ta'dof#jjb.eo,mkusWEZFS@[W173260=R8&myj#|i/lgn+bbj&mg$ec}{_MRN[HS_9>;:>85Z0.eqb+ta'dof#jjb.eo,mkusWEZFS@[W193260=R8&myj#|i/lgn+bbj&mg$ec}{_MRN[HS_90;:>85Z0.eqb+ta'dof#jjb.eo,mkusWEZFS@[W213260=R8&myj#|i/lgn+bbj&mg$ec}{_MRN[HS_:8;:>;5Z0.eqb+ta'dof#jjb.eo,mkusWEZFS@[W2032573<]9%l~k }f.ofi*ace'nf#d`|t^NSIZKRP;8:=?;4U1-dvc(un&gna"ikm/fn+lht|VF[ARCZX312573<]9%l~k }f.ofi*ace'nf#d`|t^NSIZKRP;>:=?;4U1-dvc(un&gna"ikm/fn+lht|VF[ARCZX372573<]9%l~k }f.ofi*ace'nf#d`|t^NSIZKRP;<:=?;4U1-dvc(un&gna"ikm/fn+lht|VF[ARCZX352573<]9%l~k }f.ofi*ace'nf#d`|t^NSIZKRP;2:=?;4U1-dvc(un&gna"ikm/fn+lht|VF[ARCZX3;2573<]9%l~k }f.ofi*ace'nf#d`|t^NSIZKRP:::=?;4U1-dvc(un&gna"ikm/fn+lht|VF[ARCZX232570<]9%l~k }f.ofi*ace'nf#d`|t^NSIZKRP:;:=<<:;T2,cw`)zo%fi`!hdl,gi*oi{}UG\@QBUY1154423\:$kh!rg-nah)`ld$oa"gasu]OTHYJ]Q98=<<:;T2,cw`)zo%fi`!hdl,gi*oi{}UG\@QBUY1754423\:$kh!rg-nah)`ld$oa"gasu]OTHYJ]Q9>=<<;;T2,cw`)zo%fi`!hdl,gi*oi{}UG\@QBUY62572<]9%l~k }f.ofi*ace'nf#d`|t^NSIZKRP<;:>95Z0.eqb+ta'dof#jjb.eo,mkusWEZFS@[W60310>S7'nxm"h mdo,cak)ld%bb~zPLQO\IP^0988?7X> gsd-vc)jmd%lh` km.kmwqYKXDUFYU6>1368Q5)`zo$yj"cjm.egi+bj'`dxxRB_M^OV\<769o1^<"i}f/pe+hcj'nnf"ic wskwaZesze8;7X> gsd-vc)jmd%lh` km.uqmqcXk}xg=4U1-dvc(un&xxxobd/sf\vvrXizxnkRj>219V4*aun'xm#}{bmi,vaYu{}Ujkh_e02g>S7'nxm"h rrvahn)ulVxxxRm`mc3g?P6(o{l%~k!}su`oo*tcW{ySnabb03f?P6(o{l%~k!}su`oo*tcW{ySkh<1<2a>S7'nxm"h rrvahn)ulVxxxR|jg=3=5`=R8&myj#|i/sqwfim(zmUyyQ}ef>1:4b<]9%l~k }f.pppgjl'{nT~~zPrde\44b<]9%l~k }f.pppgjl'{nT~~zPrde\54b<]9%l~k }f.pppgjl'{nT~~zPrde\641<]9%l~k }f.pppgjl'{ySi?>7:W3+bta&{l$~~zmlj-qwqYc:8=0Y=!hrg,qb*tt|kf`#}{_e12`>S7'nxm"h rrvahn)pzVxxxRo|rde14>S7'nxm"h rrvahn)pzVxxxRo|rde\`4473\:$kh!rg-qwqdkc&}yS}{_`qqabYc:8i0Y=!hrg,qb*tt|kf`#z|Prrv\gjke9m1^<"i}f/pe+wusjea${Q}su]`khd69l1^<"i}f/pe+wusjea${Q}su]qab:768o0Y=!hrg,qb*tt|kf`#z|Prrv\v`a;97;o7X> gsd-vc)u{}hgg"y}_sqw[wc`W9;o7X> gsd-vc)u{}hgg"y}_sqw[wc`W8k0Y^K]_@NJEVe<]ZOYS[G\ICNF7>PDK01]EHYPTXRF0>QDDB80[H?k;YKOMK^*PMH+<#?/SUWA$5(6(HYHED;4XNP@]3=_[]FBN:5WSU]DJA1^c`VZye`Xjrrklj465lljf8`drfWje~by&?)e9geqgXkfex%?&d:fbpdYdg|d$?'k;ecweZeh}g~#?$j4d`vb[firf}"?%k5kauc\gjsi|5>1<394dckwawt13mce$='9;ekm,4/03mce$<>&7:fjj-76!>1oec&>2(58`lh/9:#<7iga(06*3>bnf!;>%:5kio*22,1.?2nbb%?6)79gmk.5!>1oec&=0(58`lh/:8#<7iga(30*3>bnf!88%:5kio*10,18'8;ekm,70.?2nbb%<8)69gmk.50 =0hd`'28+5?aoi :#<7iga(22*3>bnf!9:%:5kio*06,1'8;ekm,62.?2nbb%=:)79gmk.3!?1oec&:)79gmk.1!?1oec&8)79gmk.?!?1oec&6)79gmk:76>1oec2>0?58`lh;984<7iga<00=3>bnf5;82:5kio>20;169gmk:607=0hd`318<5?aoi484<7iga<32=3>bnf58:2:5kio>16;1>08;ekm8729?2nbb1<:>69gmk:5>7=0hd`326<4?aoi4;25;6jfn=0::3=cag692:5kio>04;169gmk:4<730hd`33483:2=cag689384dhl?7;00(:8`jss 8;"46j`uu*26,>bh}}"::$64dnww,41.02ndyy&>8(:8`jss 83";6j`uu*1-==cg|~#>='7;emvp-46!11ocxz'23+;?air|!88%55kotv+61/?3me~x%<:)99gkpr/:?#37iazt)04-==cg|~#>5'7;emvp-4>!>1ocxz'3(:8`jss ::"46j`uu*05,><&8:flqq.4; 20hb{{(26*<>bh}}"89$94dnww,1/03me~x%;&7:flqq.1!>1ocxz'7(58`jss 1#<7iazt);*3>bh}}6;255kotv?558?3me~x1?>>99gkpr;9;437iazt=30:==cg|~7=907;emvp972611ocxz317<;?air|5;<255kotv?5=8?3me~x1?6>69gkpr;9720hb{{<32=<>bh}}69=364dnww874902ndyy2=3?:8`jss4;>546j`uu>11;>bh}}695394dnww878?3me~x1=?>99gkpr;;8437iazt=11:==cg|~7?>07;emvp9536h1ocxz33483:==cg|~7?808;emvp959?2ndyy2;>69gkpr;=7=0hb{{<7<4?air|5=5;6j`uu>;:2=cg|~75364eeke6kac=2of|yw=f:djbjY`mgoymya}_w4\5)&_aecet-M@RD"Dakcui}ey,<kn;gkekZ~kfqU8>u=9_3aoo)`nnfUlick}aumq[s0X9%qhSeo|_hlw[fjl59&hSeo|_rppp86+kVxoSk|jq<3/gZciikfnS}{_r{mg87+kVbjR|k_ecweZeh}g~64)eX`hyTc{k}fmmt95*dWyxn`bok_mcwake~59&hSiazt^uj`qn:;?&hS`}hoo]uei;6$jUyhRjjpuj>77*dWlxycQfnkg`pliiW}s{i0>#c^jbwZsillxm`by20-a\lduXiegdyQiumn>5)eX`hyT~~z21-a\`drfWje~byQxievk90*dWakxSz|Pabi>4)eX}zoTinm20-a\gjkjggUh`bmd=1.`[rtXijaT`by20-a\vaYwf}xT{dj{h<7/gZstmVl|jyQkauc\gjsi|4:'oRfns^coijusWlg{xt3?,b]q`Zbf|hUhcx`{_vkgpm;2$jUdzh|ilnu\hjq:8%iT{Qnup\slbs`4?'oR~}of]fiur~W}s{i0>#c^uq[agsiVidyczPwhfwl83+kVzyiaand^pfcv;6$jUocxzPrrv\rdj:8%iTdl}Pd`vb[firf}7; nQrne\bpjkW}byi~fPndebp`Yqie79?!mPws]gauro5:8'oR~}of]fiur~W}byi~fPndebp`Yqie7> nQrne\ahvsqV~c~h}g_`qpawrX~hf68!mPh`q\rdjnl4:'oR~}of]eqijX|axneQnsrgqpZpfd48? nabpnlfjqYiido6jdh`_ynm|Z55p:nbd,b]ueiocWee|1="l_qpjiZ`nnfUu}k2500{73*dWyxdkRhzlm]w}uc:9%iTahc`rx]w}uc::%w9i6hffn]{hk~X;;r8:R0|ah_dosp|Ys`{oxd%>&159svjaXmdzuRzgrdqk,4/6<2zycjQjmqvz[qnumzb#>$?;;qplcZcjx}sTxe|jsi*0-42"=;5rne\ahvsqV~c~h}g<583:4dvugnUna}zv_ujqavnXizyn~y&>)0`8twi`Wlg{xtQ{hsgplZgt{lx$?'>b:rqkbYbey~rSyf}erj\evubz}"8%vugnUna}zv_ujqavnXflmjxh&;)0f8twi`Wlg{xtQ{hsgplZhboh~n094?>89svjaXn|fg=>5rne\bpjkW}byi~f'0(30?uthoVl~`aQ{hsgpl-7.9:1{~biPftno[qnumzb#>$?<;qplcZ`rdeUdk|h)1*56=wzfmTjxbc_ujqavn/< ;>7}|`g^dvhiYs`{oxd1:50?3b?uthoVl~`aQ{hsgplZgt{lx$='>a:rqkbYa}efTxe|jsi]bwvcu|!;"=l5rne\bpjkW}byi~fParqfvq.5!8k0|ah_gwohZrozlycSl}|esv+7,7f3yxdkRhzlm]wlwct`Vkxh|{(5+2g>vugnUmyabPtipfwmYf{zoyx1:50?3b?uthoVl~`aQ{hsgplZhboh~n$='>a:rqkbYa}efTxe|jsi]mabgsm!;"=l5rne\bpjkW}byi~fPndebp`.5!8k0|ah_gwohZrozlycSckhaug+7,7f3yxdkRhzlm]wlwct`Vdnklzj(5+2g>vugnUmyabPtipfwmYimnki1:50?48vaYddb;;7jPd`vb[firf}";%<>4re]geqgXkfex%?&119q`Zbf|hUhcx`{(3+24>tcWmkmRm`uov+7,773{nThlzn_bmvjq.3!8:0~iQkauc\gjsi|5:5=?5}d^fbpdYdg|d094?>49q`Zci>2xoS}{3:ppp2=tj`~n~:4ssqw0>ru}l30ycjjrgnls0=qieco:6y}_`ah2>quWjf`==5xr^fbpdYdg|d$='>0:uq[agsiVidycz'1(33?rtXlh~jSnaznu*1-46<{UomyoPcnwmp-5.991|~Rjnt`]`kphs =#:>6y}_ecweZeh}g~787>15:uq[`h13~xT~~zr@Arf5==GHq;1J7:51zQ00?5a=3?1=>;o162?0<,:?86>:k;|Q06?5a=3?1=>684>33`4=2<6:=lo7{Zm9;295?7=913p_>:53g791?74:k=2;7?=4gf8 62f2<:0Z>;;:3yv1<<63|?j6=5r$c09f>d4n10;68?53;72M5302P9o7o3;90;66a<5983>>i39<0;66g;4183>>i4nj0;66a>o3;00;66g;3383>>i4k00;6)l;:2g`?kd42910c>m7:18'f1<4mj1en>4>;:m0g2<72-h?6>kl;o`0>7=!d32:oh7cl<:598k6e3290/n946cd3gh86;54o2a2>5<#j=08in5ab284?>i4k90;6)l;:2g`?kd42110c>li:18'f1<4mj1en>46;:m0f`<72-h?6>kl;o`0>d=!d32:oh7cl<:b98k6de290/n946cd3gh86h54o2`:>5<#j=08in5ab28e?>i4j>0;6)l;:2g`?kd428:07b=m6;29 g2=;li0bo=51098k6d2290/n94kl;o`0>42<3f9i>7>5$c697`e5<#j=08in5ab2822>=h;k:1<7*m4;1fg>he;3;<76a!d32:oh7cl<:0:8?j5fm3:1(o:53da8jg5=9010c>mi:18'f1<4mj1en>4>a:9l7fc=83.i87=jc:la7?7e32e8oi4?:%`7>6cd3gh861?hm4nc195a=i4k:0;6)l;:2g`?kd42;:07b=m8;29 g2=;li0bo=52098k6gc290/n94o<;o`0>5=!d32:k87cl<:398m61c290/n946g43gh86954i25a>5<#j=08m>5ab286?>o4?00;6)l;:2c0?kd42?10e>97:18'f1<4i:1en>48;:k032<72-h?6>o<;o`0>==!d32:k87cl<:`98m613290/n944?:%`7>6g43gh86n54i251>5<#j=08m>5ab28g?>o4?80;6)l;:2c0?kd42l10e>9?:18'f1<4i:1en>4i;:k02`<72-h?6>o<;o`0>46<3`9=h7>5$c697d55<#j=08m>5ab2826>=n;?h1<7*m4;1b7>he;3;876g<6`83>!d32:k87cl<:068?l5113:1(o:53`18jg5=9<10e>87:18'f1<4i:1en>4>6:9j731=83.i87=n3:la7?7032c8:;4?:%`7>6g43gh86<64;h151?6=,k>1?l=4nc195<=o40=0;6)l;:2c0?kd428i07d=73;29 g2=;h90bo=51e98m6>5290/n94o<;o`0>76<3`9=j7>5$c697d5<54i247>5<#j=08m>5ab2816>=n;?91<7*m4;1b7>he;38876g;2983>>d4<00;6<4?:1yK71><,kh1?974oc394?=zj=?1<7?50;2xL62?3-hi69;4o5694?=zj;h1<76i:043>4>>sA9?46T=c;3546=n3;:6<;513827?732h026<8516821?702h0::7??:8820?742881=<4i:|&af?5aj2.9j7=i9:&07?5ai2.jh7l?;h63`?6=,k>18=k4nc194>=n<9i1<7*m4;63a>he;3;07d:?b;29 g2=<9o0bo=52:9j05g=83.i87:?e:la7?5<3`>;57>5$c6905c;46`m3;28?l27>3:1(o:541:8jg5=921b8=;50;&a0?2702di?7<4;h630?6=,k>18=64nc197>=n<991<7*m4;63<>he;3>07d:<0;29?j2793:17d:>3;29 g2=<8>0bo=50:9j044=83.i87:>4:la7?7<3`>:=7>5$c6904265f40294?"e<3>:86`m3;18?l27n3:1(o:54068jg5=<21d?8650;9l736=83.i87=91:la7?6<3f9>j7>5$c69737?<7>5;h62e?6=,k>18=n<831<7*m4;62f>he;3;07d:>8;29 g2=<8h0bo=52:9j041=83.i87:>b:la7?5<3`>::7>5$c6904d9=6`m3;28?l26n3:1(o:54338jg5=921b818??4nc197>=n<8i1<7*m4;615>he;3>07d:=6;29 g2=<;=0bo=50:9j073=83.i87:=7:la7?7<3`>987>5$c6907165f43194?"e<3>9;6`m3;18?l25:3:1(o:54358jg5=<21d?8950;9j7c`=831b?8l50;9j017=831d8>=50;9l06>=831b8><50;9l7f?=83.i87=jc:la7?6<3f9h47>5$c697`e3:1(o:53da8jg5=;21d?n;50;&a0?5bk2di?7:4;n1`0?6=,k>1?hm4nc191>=h;j81<7*m4;1fg>he;3<07b=l1;29 g2=;li0bo=57:9l7f6=83.i87=jc:la7?><3f9ij7>5$c697`e1?hm4nc19`>=h;kk1<7*m4;1fg>he;3o07b=m9;29 g2=;li0bo=5f:9l7g1=83.i87=jc:la7?7732e8n;4?:%`7>6cd3gh861?hm4nc1957=i4j;0;6)l;:2g`?kd428?07b=m1;29 g2=;li0bo=51798k6d7290/n94kl;o`0>4?<3f9hj7>5$c697`e5<#j=08in5ab282f>=h;jn1<7*m4;1fg>he;3;h76a!d32:oh7cl<:0f8?j5dj3:1(o:53da8jg5=9l10c>mn:18'f1<4mj1en>4>f:9l7f5=83.i87=jc:la7?4732e8n54?:%`7>6cd3gh86??4;n1b`?6=,k>1?hm4nc1967=1?l=4nc197>=n;>i1<7*m4;1b7>he;3>07d=8b;29 g2=;h90bo=55:9j72?=83.i87=n3:la7?0<3`9<47>5$c697d53:1(o:53`18jg5=121b?:;50;&a0?5f;2di?7o4;h140?6=,k>1?l=4nc19f>=n;>91<7*m4;1b7>he;3i07d=82;29 g2=;h90bo=5d:9j727=83.i87=n3:la7?c<3`9<<7>5$c697d5o4>m0;6)l;:2c0?kd428;07d=9c;29 g2=;h90bo=51398m60e290/n94o<;o`0>43<3`9=47>5$c697d55<#j=08m>5ab2823>=n;?<1<7*m4;1b7>he;3;376g<6483>!d32:k87cl<:0;8?l5?>3:1(o:53`18jg5=9h10e>6::18'f1<4i:1en>4>b:9j7=2=83.i87=n3:la7?7d32c84>4?:%`7>6g43gh861?l=4nc195`=o4>o0;6)l;:2c0?kd42;;07d=94;29 g2=;h90bo=52398m604290/n949o7>5$c6907`9j6`m3;08?j25i3:1(o:543d8jg5=;21d8?750;&a0?25n2di?7:4;n60a?6=,k>18>h4nc194>=h<:n1<7*m4;60b>he;3;07b:8m7>5$c6906`14<@:>m7E=;8:&7f?2>oe=3:17bl9:188yg55n3:187>50z&af?273A9?j6F<499'0g<53`8o6=44i2394?=n;<0;66am6;29?xd4;m0;694?:1y'fg<3:2B88k5G35:8L7g<,<=18>;4$5`90>o5l3:17d=::188mg3=831dn;4?::a764=8391<7>t$c`97c=O;=l0D>:7;I0b?!302=9>7):m:39j6a<722c897>5;n`5>5<53;294~"ej39m7E=;f:J00==O:h1/9:4;349'0g<53`8o6=44i2794?=hj?0;66sm32a94?2=83:p(ol5439K71`<@:>37E1523->i695f2e83>>o4=3:17dl::188kg0=831vn>=>:180>5<7s-hi6>h4H26e?M5302B9m6*:7;601>"3j380e?j50;9j70<722ei:7>5;|`07`<72<0;6=u+bc877>N45;h`6>5<5<4290;w)lm:2d8L62a3A9?46F=a:&63?24=2.?n7<4i3f94?=n;<0;66am6;29?xd4;90;684?:1y'fg<3;2B88k5G35:8L7g<,<=18>;4i3f94?=n:l0;66g<5;29?ld22900co850;9~f65e290?6=4?{%`a>14<@:>m7E=;8:J1e>"2?3>896*;b;68m7b=831b?84?::ka1?6=3fh=6=44}c10e?6=<3:1;50;9jf0<722ei:7>5;|`07<<72=0;6=u+bc876>N4o5l3:17d=::188mg3=831dn;4?::a76>=83>1<7>t$c`907=O;=l0D>:7;%6a>1=n:m0;66g<5;29?ld22900co850;9~f621290?6=4?{%`a>14<@:>m7E=;8:&7f?2>oe=3:17bl9:188yg53=3:187>50z&af?253A9?j6F<499'0g<33`8o6=44i2794?=nj<0;66am6;29?xddl3:187>50z&af?273A9?j6F<499'0g<53`8o6=44i2394?=n;<0;66am6;29?xddk3:187>50z&af?273A9?j6F<499'0g<53`8o6=44i2394?=n;<0;66am6;29?xddj3:187>50z&af?273A9?j6F<499'0g<53`8o6=44i2394?=n;<0;66am6;29?xddi3:187>50z&af?273A9?j6F<499'0g<53`8o6=44i2394?=n;<0;66am6;29?xdd13:187>50z&af?273A9?j6F<499'0g<53`8o6=44i2394?=n;<0;66am6;29?xd6880;694?:1y'fg<382B88k5G35:8 1d=:2c9h7>5;h12>5<>{e99:1<7:50;2x gd=<91C?9h4H26;?!2e2;1b>i4?::k05?6=3`9>6=44oc494?=zjol1<7:50;2x gd=<91C?9h4H26;?!2e2;1b>i4?::k05?6=3`9>6=44oc494?=zjoo1<7:50;2x gd=<91C?9h4H26;?!2e2;1b>i4?::k05?6=3`9>6=44oc494?=zjon1<7:50;2x gd=<91C?9h4H26;?!2e2;1b>i4?::k05?6=3`9>6=44oc494?=zj88<6=4;:183!de2=:0D>:i;I17<>"3j380e?j50;9j74<722c897>5;n`5>5<54;294~"ej3>;7E=;f:J00==#84?:583>5}#jk0?<6F<4g9K71><,=h1>6g=d;29?l562900e>;50;9lf3<722wi=?:50;694?6|,kh18=5G35d8L62?3->i6?5f2e83>>o493:17d=::188kg0=831vn<<<:187>5<7s-hi69>4H26e?M5302.?n7<4i3f94?=n;80;66g<5;29?jd12900qoh<:187>5<7s-hi69>4H26e?M5302.?n7<4i3f94?=n;80;66g<5;29?jd12900qoh=:187>5<7s-hi69>4H26e?M5302.?n7<4i3f94?=n;80;66g<5;29?jd12900qoh>:187>5<7s-hi69>4H26e?M5302.?n7<4i3f94?=n;80;66g<5;29?jd12900qoh?:187>5<7s-hi69>4H26e?M5302.?n7<4i3f94?=n;80;66g<5;29?jd12900qoki:187>5<7s-hi69>4H26e?M5302.?n7<4i3f94?=n;80;66g<5;29?jd12900qo?>d;290?6=8r.in7:?;I17b>N4<11C>l5+568770=#5}#jk0?<6F<4g9K71><@;k0(8954278 1d=:2c9h7>5;h12>5<>{e98h1<7:50;2x gd=<91C?9h4H26;?M4f3-?<69=:;%6a>7=n:m0;66g<1;29?l522900co850;9~f47f290?6=4?{%`a>16<@:>m7E=;8:J1e>"2?3>896*;b;08m7b=831b?<4?::k01?6=3fh=6=44}c32=?6=<3:15<>ie>3:17plj9;290?6=8r.in7:?;I17b>N4<11C>l5+568770=#54;294~"ej3>;7E=;f:J00==O:h1/9:4;349'0g<53`8o6=44i2394?=n;<0;66am6;29?xdb?3:187>50z&af?273A9?j6F<499K6d=#=>0??85+4c81?l4c2900e>?50;9j70<722ei:7>5;|`f2?6=<3:15<>ie>3:17plj5;290?6=8r.in7:?;I17b>N4<11C>l5+568770=#54;294~"ej3>;7E=;f:J00==#54;294~"ej3>;7E=;f:J00==#54;294~"ej3>;7E=;f:J00==#54;294~"ej3>;7E=;f:J00==#54;294~"ej3>;7E=;f:J00==#4?:583>5}#jk0?<6F<4g9K71><,=h1>6g=d;29?l562900e>;50;9lf3<722wi=<<50;694?6|,kh18=5G35d8L62?3->i6?5f2e83>>o493:17d=::188kg0=831vn:187>5<7s-hi69>4H26e?M5302.?n7<4i3f94?=n;80;66g<5;29?jd12900qo?>0;290?6=8r.in7:?;I17b>N4<11/8o4=;h0g>5<>ie>3:17pl>0g83>1<729q/no4;0:J00c=O;=20(9l52:k1`?6=3`9:6=44i2794?=hj?0;66sm14;94?3=83:p(ol5409K71`<@:>37):m:39j6a<722c9i7>5;h12>5<>{e9<21<7;50;2x gd=<81C?9h4H26;?!2e2;1b>i4?::k1a?6=3`9:6=44i2794?=hj?0;66sm14494?3=83:p(ol5409K71`<@:>37):m:39j6a<722c9i7>5;h12>5<>{e9i4?::k1a?6=3`9>6=44ic794?=hj?0;66sm14594?3=83:p(ol5409K71`<@:>37):m:39j6a<722c9i7>5;h12>5<>{e9?91<7;50;2x gd=<81C?9h4H26;?!2e2;1b>i4?::k1a?6=3`9:6=44i2794?=hj?0;66sm17094?3=83:p(ol5409K71`<@:>37):m:39j6a<722c9i7>5;h12>5<>{e9?;1<7;50;2x gd=<81C?9h4H26;?!2e2;1b>i4?::k1a?6=3`9:6=44i2794?=hj?0;66sm17294?3=83:p(ol5409K71`<@:>37):m:39j6a<722c9i7>5;h12>5<>{e9i4?::k1a?6=3`9:6=44i2794?=hj?0;66sm12594?2=83:p(ol5439K71`<@:>37):m:59j6a<722c897>5;h`6>5<5<3290;w)lm:508L62a3A9?46*;b;68m7b=831b?84?::ka1?6=3fh=6=44}c306?6=<3:1?50;9j70<722ei:7>5;|`274<72=0;6=u+bc874>N4o5l3:17d=>:188m63=831dn;4?::a526=8391<7>t$c`971c<@:>m7E=;8:k04?6=3`>o6=44o`d94?=zj8n7E=;f:J00==n;90;66g;d;29?jga2900qo?99;290?6=8r.in7;7;I17b>N4<11b?=4?::k02?6=3`h36=44o`d94?=zj8<36=4;:183!de2<20D>:i;I17<>o483:17d=9:188mg>=831dmk4?::a531=83>1<7>t$c`91==O;=l0D>:7;h13>5<>ifn3:17pl>6783>1<729q/no4:8:J00c=O;=20e>>50;9j73<722ci47>5;nce>5<54;294~"ej3?37E=;f:J00==n;90;66g<6;29?ld?2900clh50;9~f413290?6=4?{%`a>16<@:>m7E=;8:&7f?4>o4=3:17bl9:188yg70;3:187>50z&af?273A9?j6F<499'0g<53`8o6=44i2394?=n;<0;66am6;29?xd6?>0;684?:1y'fg<3;2B88k5G35:8 1d=<2c9h7>5;h0f>5<>ie>3:17pl>a583>0<729q/no4;1:J00c=O;=20(9l52:k1`?6=3`8n6=44i2394?=n;<0;66am6;29?xd6i:0;684?:1y'fg<392B88k5G35:8 1d=:2c9h7>5;h0f>5<>ie>3:17pl>a083>0<729q/no4;3:J00c=O;=20(9l54:k1`?6=3`8n6=44i2794?=nj<0;66am6;29?xd6i90;684?:1y'fg<3;2B88k5G35:8 1d=<2c9h7>5;h0f>5<>ie>3:17pl>a383>0<729q/no4;1:J00c=O;=20(9l52:k1`?6=3`8n6=44i2394?=n;<0;66am6;29?xd6ij0;684?:1y'fg<392B88k5G35:8 1d=:2c9h7>5;h0f>5<>ie>3:17pl>a`83>0<729q/no4;1:J00c=O;=20(9l52:k1`?6=3`8n6=44i2394?=n;<0;66am6;29?xd6ik0;684?:1y'fg<3;2B88k5G35:8 1d=<2c9h7>5;h0f>5<>ie>3:17pl>ae83>0<729q/no4;1:J00c=O;=20(9l52:k1`?6=3`8n6=44i2394?=n;<0;66am6;29?xd6il0;684?:1y'fg<392B88k5G35:8 1d=:2c9h7>5;h0f>5<>ie>3:17pl>b783>0<729q/no4;1:J00c=O;=20(9l52:k1`?6=3`8n6=44i2394?=n;<0;66am6;29?xd6j=0;684?:1y'fg<3;2B88k5G35:8 1d=<2c9h7>5;h0f>5<>ie>3:17pl>b483>0<729q/no4;1:J00c=O;=20(9l52:k1`?6=3`8n6=44i2394?=n;<0;66am6;29?xd6j>0;684?:1y'fg<392B88k5G35:8 1d=:2c9h7>5;h0f>5<>ie>3:17pl>b983>0<729q/no4;1:J00c=O;=20(9l52:k1`?6=3`8n6=44i2394?=n;<0;66am6;29?xd6k;0;684?:1y'fg<392B88k5G35:8 1d=:2c9h7>5;h0f>5<>ie>3:17pl>c083>0<729q/no4;1:J00c=O;=20(9l52:k1`?6=3`8n6=44i2394?=n;<0;66am6;29?xd6k90;684?:1y'fg<392B88k5G35:8 1d=:2c9h7>5;h0f>5<>ie>3:17pl>bg83>0<729q/no4;1:J00c=O;=20(9l52:k1`?6=3`8n6=44i2394?=n;<0;66am6;29?xd6jl0;684?:1y'fg<392B88k5G35:8 1d=:2c9h7>5;h0f>5<>ie>3:17pl=e483>0<729q/no4;1:J00c=O;=20(9l52:k1`?6=3`8n6=44i2394?=n;<0;66am6;29?xd5m?0;684?:1y'fg<392B88k5G35:8 1d=:2c9h7>5;h0f>5<>ie>3:17pl=f083>0<729q/no4;1:J00c=O;=20(9l52:k1`?6=3`8n6=44i2394?=n;<0;66am6;29?xd5nj0;684?:1y'fg<392B88k5G35:8 1d=:2c9h7>5;h0f>5<>ie>3:17pl<0283>0<729q/no4;1:J00c=O;=20(9l52:k1`?6=3`8n6=44i2394?=n;<0;66am6;29?xd48=0;684?:1y'fg<392B88k5G35:8 1d=:2c9h7>5;h0f>5<>ie>3:17pl<0483>0<729q/no4;1:J00c=O;=20(9l52:k1`?6=3`8n6=44i2394?=n;<0;66am6;29?xd48?0;684?:1y'fg<392B88k5G35:8 1d=:2c9h7>5;h0f>5<>ie>3:17pl<0683>0<729q/no4;1:J00c=O;=20(9l52:k1`?6=3`8n6=44i2394?=n;<0;66am6;29?xd4810;684?:1y'fg<392B88k5G35:8 1d=:2c9h7>5;h0f>5<>ie>3:17pl=e683>0<729q/no4;1:J00c=O;=20(9l52:k1`?6=3`8n6=44i2394?=n;<0;66am6;29?xd5m10;684?:1y'fg<392B88k5G35:8 1d=:2c9h7>5;h0f>5<>ie>3:17pl=e883>0<729q/no4;1:J00c=O;=20(9l52:k1`?6=3`8n6=44i2394?=n;<0;66am6;29?xd5mh0;684?:1y'fg<392B88k5G35:8 1d=:2c9h7>5;h0f>5<>ie>3:17pl=ec83>0<729q/no4;1:J00c=O;=20(9l52:k1`?6=3`8n6=44i2394?=n;<0;66am6;29?xd5mj0;684?:1y'fg<392B88k5G35:8 1d=:2c9h7>5;h0f>5<>ie>3:17pl=ee83>0<729q/no4;1:J00c=O;=20(9l52:k1`?6=3`8n6=44i2394?=n;<0;66am6;29?xd5ml0;684?:1y'fg<392B88k5G35:8 1d=:2c9h7>5;h0f>5<>ie>3:17pl=eg83>0<729q/no4;1:J00c=O;=20(9l52:k1`?6=3`8n6=44i2394?=n;<0;66am6;29?xd5n90;684?:1y'fg<392B88k5G35:8 1d=:2c9h7>5;h0f>5<>ie>3:17pl=f383>0<729q/no4;1:J00c=O;=20(9l52:k1`?6=3`8n6=44i2394?=n;<0;66am6;29?xd5n:0;684?:1y'fg<392B88k5G35:8 1d=:2c9h7>5;h0f>5<>ie>3:17pl=f583>0<729q/no4;1:J00c=O;=20(9l52:k1`?6=3`8n6=44i2394?=n;<0;66am6;29?xd5n<0;684?:1y'fg<392B88k5G35:8 1d=:2c9h7>5;h0f>5<>ie>3:17pl=f783>0<729q/no4;1:J00c=O;=20(9l52:k1`?6=3`8n6=44i2394?=n;<0;66am6;29?xd5n>0;684?:1y'fg<392B88k5G35:8 1d=:2c9h7>5;h0f>5<>ie>3:17pl=f983>0<729q/no4;1:J00c=O;=20(9l52:k1`?6=3`8n6=44i2394?=n;<0;66am6;29?xd5n00;684?:1y'fg<392B88k5G35:8 1d=:2c9h7>5;h0f>5<>ie>3:17pl=f`83>0<729q/no4;1:J00c=O;=20(9l52:k1`?6=3`8n6=44i2394?=n;<0;66am6;29?xd5nk0;684?:1y'fg<392B88k5G35:8 1d=:2c9h7>5;h0f>5<>ie>3:17pl=fe83>0<729q/no4;1:J00c=O;=20(9l52:k1`?6=3`8n6=44i2394?=n;<0;66am6;29?xd5nl0;684?:1y'fg<392B88k5G35:8 1d=:2c9h7>5;h0f>5<>ie>3:17pl=fg83>0<729q/no4;1:J00c=O;=20(9l52:k1`?6=3`8n6=44i2394?=n;<0;66am6;29?xd4890;684?:1y'fg<392B88k5G35:8 1d=:2c9h7>5;h0f>5<>ie>3:17pl<0083>0<729q/no4;1:J00c=O;=20(9l52:k1`?6=3`8n6=44i2394?=n;<0;66am6;29?xd48;0;684?:1y'fg<392B88k5G35:8 1d=:2c9h7>5;h0f>5<>ie>3:17pl=0e83>a<729q/no4m7:J00c=O;=20e?;50;9j63<722c9;7>5;h0;>5<>o413:17d=n:188m6d=831b?9l50;9j71e=831dnl4?::m03?6=3th9=54?:e83>5}#jk0i;6F<4g9K71>>o5?3:17d<7:188m63=831b?54?::k0=?6=3`9j6=44i2`94?=n;=h1<75f35a94?=hjh0;66a<7;29?xd5::0;6i4?:1y'fg;4?::k13?6=3`836=44i2794?=n;10;66g<9;29?l5f2900e>l50;9j71d=831b?9m50;9lfd<722e8;7>5;|`101<72m0;6=u+bc8a3>N4;50;9j7=<722c857>5;h1b>5<>i4?3:17pl=2d83>a<729q/no4m7:J00c=O;=20e?;50;9j63<722c9;7>5;h0;>5<>o413:17d=n:188m6d=831b?9l50;9j71e=831dnl4?::m03?6=3th9?44?:e83>5}#jk0i;6F<4g9K71>>o5?3:17d<7:188m63=831b?54?::k0=?6=3`9j6=44i2`94?=n;=h1<75f35a94?=hjh0;66a<7;29?xd5;4?::k13?6=3`836=44i2794?=n;10;66g<9;29?l5f2900e>l50;9j71d=831b?9m50;9lfd<722e8;7>5;|`116<72m0;6=u+bc8a3>N4;50;9j7=<722c857>5;h1b>5<>i4?3:17pl=5583>a<729q/no4m7:J00c=O;=20e?;50;9j63<722c9;7>5;h0;>5<>o413:17d=n:188m6d=831b?9l50;9j71e=831dnl4?::m03?6=3th95}#jk0i;6F<4g9K71>>o5?3:17d<7:188m63=831b?54?::k0=?6=3`9j6=44i2`94?=n;=h1<75f35a94?=hjh0;66a<7;29?xd5980;6i4?:1y'fg;4?::k13?6=3`836=44i2794?=n;10;66g<9;29?l5f2900e>l50;9j71d=831b?9m50;9lfd<722e8;7>5;|`14c<72m0;6=u+bc8a3>N4;50;9j7=<722c857>5;h1b>5<>i4?3:17pl=1183>a<729q/no4m7:J00c=O;=20e?;50;9j63<722c9;7>5;h0;>5<>o413:17d=n:188m6d=831b?9l50;9j71e=831dnl4?::m03?6=3th9=?4?:e83>5}#jk0i;6F<4g9K71>>o5?3:17d<7:188m63=831b?54?::k0=?6=3`9j6=44i2`94?=n;=h1<75f35a94?=hjh0;66a<7;29?xd59:0;6i4?:1y'fg;4?::k13?6=3`836=44i2794?=n;10;66g<9;29?l5f2900e>l50;9j71d=831b?9m50;9lfd<722e8;7>5;|`151<72m0;6=u+bc8a3>N4;50;9j7=<722c857>5;h1b>5<>i4?3:17pl=1483>a<729q/no4m7:J00c=O;=20e?;50;9j63<722c9;7>5;h0;>5<>o413:17d=n:188m6d=831b?9l50;9j71e=831dnl4?::m03?6=3th9=44?:e83>5}#jk0i;6F<4g9K71>>o5?3:17d<7:188m63=831b?54?::k0=?6=3`9j6=44i2`94?=n;=h1<75f35a94?=hjh0;66a<7;29?xd59?0;6i4?:1y'fg;4?::k13?6=3`836=44i2794?=n;10;66g<9;29?l5f2900e>l50;9j71d=831b?9m50;9lfd<722e8;7>5;|`152<72m0;6=u+bc8a3>N4;50;9j7=<722c857>5;h1b>5<>i4?3:17pl=1`83>a<729q/no4m7:J00c=O;=20e?;50;9j63<722c9;7>5;h0;>5<>o413:17d=n:188m6d=831b?9l50;9j71e=831dnl4?::m03?6=3th9=o4?:e83>5}#jk0i;6F<4g9K71>>o5?3:17d<7:188m63=831b?54?::k0=?6=3`9j6=44i2`94?=n;=h1<75f35a94?=hjh0;66a<7;29?xd59j0;6i4?:1y'fg;4?::k13?6=3`836=44i2794?=n;10;66g<9;29?l5f2900e>l50;9j71d=831b?9m50;9lfd<722e8;7>5;|`15a<72m0;6=u+bc8a3>N4;50;9j7=<722c857>5;h1b>5<>i4?3:17pl=2183>a<729q/no4m7:J00c=O;=20e?;50;9j63<722c9;7>5;h0;>5<>o413:17d=n:188m6d=831b?9l50;9j71e=831dnl4?::m03?6=3th9=h4?:e83>5}#jk0i;6F<4g9K71>>o5?3:17d<7:188m63=831b?54?::k0=?6=3`9j6=44i2`94?=n;=h1<75f35a94?=hjh0;66a<7;29?xd59o0;6i4?:1y'fg;4?::k13?6=3`836=44i2794?=n;10;66g<9;29?l5f2900e>l50;9j71d=831b?9m50;9lfd<722e8;7>5;|`164<72m0;6=u+bc8a3>N4;50;9j7=<722c857>5;h1b>5<>i4?3:17pl=2383>a<729q/no4m7:J00c=O;=20e?;50;9j63<722c9;7>5;h0;>5<>o413:17d=n:188m6d=831b?9l50;9j71e=831dnl4?::m03?6=3th9>94?:e83>5}#jk0i;6F<4g9K71>>o5?3:17d<7:188m63=831b?54?::k0=?6=3`9j6=44i2`94?=n;=h1<75f35a94?=hjh0;66a<7;29?xd5:<0;6i4?:1y'fg;4?::k13?6=3`836=44i2794?=n;10;66g<9;29?l5f2900e>l50;9j71d=831b?9m50;9lfd<722e8;7>5;|`16=<72m0;6=u+bc8a3>N4;50;9j7=<722c857>5;h1b>5<>i4?3:17pl=2783>a<729q/no4m7:J00c=O;=20e?;50;9j63<722c9;7>5;h0;>5<>o413:17d=n:188m6d=831b?9l50;9j71e=831dnl4?::m03?6=3th9>:4?:e83>5}#jk0i;6F<4g9K71>>o5?3:17d<7:188m63=831b?54?::k0=?6=3`9j6=44i2`94?=n;=h1<75f35a94?=hjh0;66a<7;29?xd5:00;6i4?:1y'fg;4?::k13?6=3`836=44i2794?=n;10;66g<9;29?l5f2900e>l50;9j71d=831b?9m50;9lfd<722e8;7>5;|`16d<72m0;6=u+bc8a3>N4;50;9j7=<722c857>5;h1b>5<>i4?3:17pl=2c83>a<729q/no4m7:J00c=O;=20e?;50;9j63<722c9;7>5;h0;>5<>o413:17d=n:188m6d=831b?9l50;9j71e=831dnl4?::m03?6=3th9>n4?:e83>5}#jk0i;6F<4g9K71>>o5?3:17d<7:188m63=831b?54?::k0=?6=3`9j6=44i2`94?=n;=h1<75f35a94?=hjh0;66a<7;29?xd5;90;6i4?:1y'fg;4?::k13?6=3`836=44i2794?=n;10;66g<9;29?l5f2900e>l50;9j71d=831b?9m50;9lfd<722e8;7>5;|`16a<72m0;6=u+bc8a3>N4;50;9j7=<722c857>5;h1b>5<>i4?3:17pl=2g83>a<729q/no4m7:J00c=O;=20e?;50;9j63<722c9;7>5;h0;>5<>o413:17d=n:188m6d=831b?9l50;9j71e=831dnl4?::m03?6=3th9?<4?:e83>5}#jk0i;6F<4g9K71>>o5?3:17d<7:188m63=831b?54?::k0=?6=3`9j6=44i2`94?=n;=h1<75f35a94?=hjh0;66a<7;29?xd5;;0;6i4?:1y'fg;4?::k13?6=3`836=44i2794?=n;10;66g<9;29?l5f2900e>l50;9j71d=831b?9m50;9lfd<722e8;7>5;|`176<72m0;6=u+bc8a3>N4;50;9j7=<722c857>5;h1b>5<>i4?3:17pl=3583>a<729q/no4m7:J00c=O;=20e?;50;9j63<722c9;7>5;h0;>5<>o413:17d=n:188m6d=831b?9l50;9j71e=831dnl4?::m03?6=3th9?:4?:e83>5}#jk0i;6F<4g9K71>>o5?3:17d<7:188m63=831b?54?::k0=?6=3`9j6=44i2`94?=n;=h1<75f35a94?=hjh0;66a<7;29?xd5;<0;6i4?:1y'fg;4?::k13?6=3`836=44i2794?=n;10;66g<9;29?l5f2900e>l50;9j71d=831b?9m50;9lfd<722e8;7>5;|`173<72m0;6=u+bc8a3>N4;50;9j7=<722c857>5;h1b>5<>i4?3:17pl=3c83>a<729q/no4m7:J00c=O;=20e?;50;9j63<722c9;7>5;h0;>5<>o413:17d=n:188m6d=831b?9l50;9j71e=831dnl4?::m03?6=3th9?54?:e83>5}#jk0i;6F<4g9K71>>o5?3:17d<7:188m63=831b?54?::k0=?6=3`9j6=44i2`94?=n;=h1<75f35a94?=hjh0;66a<7;29?xd5;h0;6i4?:1y'fg;4?::k13?6=3`836=44i2794?=n;10;66g<9;29?l5f2900e>l50;9j71d=831b?9m50;9lfd<722e8;7>5;|`17`<72m0;6=u+bc8a3>N4;50;9j7=<722c857>5;h1b>5<>i4?3:17pl=3b83>a<729q/no4m7:J00c=O;=20e?;50;9j63<722c9;7>5;h0;>5<>o413:17d=n:188m6d=831b?9l50;9j71e=831dnl4?::m03?6=3th9?i4?:e83>5}#jk0i;6F<4g9K71>>o5?3:17d<7:188m63=831b?54?::k0=?6=3`9j6=44i2`94?=n;=h1<75f35a94?=hjh0;66a<7;29?xd5;o0;6i4?:1y'fg;4?::k13?6=3`836=44i2794?=n;10;66g<9;29?l5f2900e>l50;9j71d=831b?9m50;9lfd<722e8;7>5;|`105<72m0;6=u+bc8a3>N4;50;9j7=<722c857>5;h1b>5<>i4?3:17pl=4083>a<729q/no4m7:J00c=O;=20e?;50;9j63<722c9;7>5;h0;>5<>o413:17d=n:188m6d=831b?9l50;9j71e=831dnl4?::m03?6=3th98?4?:e83>5}#jk0i;6F<4g9K71>>o5?3:17d<7:188m63=831b?54?::k0=?6=3`9j6=44i2`94?=n;=h1<75f35a94?=hjh0;66a<7;29?xd5;4?::k13?6=3`836=44i2794?=n;10;66g<9;29?l5f2900e>l50;9j71d=831b?9m50;9lfd<722e8;7>5;|`106<72m0;6=u+bc8a3>N4;50;9j7=<722c857>5;h1b>5<>i4?3:17pl=4483>a<729q/no4m7:J00c=O;=20e?;50;9j63<722c9;7>5;h0;>5<>o413:17d=n:188m6d=831b?9l50;9j71e=831dnl4?::m03?6=3th98:4?:e83>5}#jk0i;6F<4g9K71>>o5?3:17d<7:188m63=831b?54?::k0=?6=3`9j6=44i2`94?=n;=h1<75f35a94?=hjh0;66a<7;29?xd5<10;6i4?:1y'fg;4?::k13?6=3`836=44i2794?=n;10;66g<9;29?l5f2900e>l50;9j71d=831b?9m50;9lfd<722e8;7>5;|`10<<72m0;6=u+bc8a3>N4;50;9j7=<722c857>5;h1b>5<>i4?3:17pl=4`83>a<729q/no4m7:J00c=O;=20e?;50;9j63<722c9;7>5;h0;>5<>o413:17d=n:188m6d=831b?9l50;9j71e=831dnl4?::m03?6=3th98i4?:e83>5}#jk0i;6F<4g9K71>>o5?3:17d<7:188m63=831b?54?::k0=?6=3`9j6=44i2`94?=n;=h1<75f35a94?=hjh0;66a<7;29?xd5;4?::k13?6=3`836=44i2794?=n;10;66g<9;29?l5f2900e>l50;9j71d=831b?9m50;9lfd<722e8;7>5;|`10f<72m0;6=u+bc8a3>N4;50;9j7=<722c857>5;h1b>5<>i4?3:17pl=4d83>a<729q/no4m7:J00c=O;=20e?;50;9j63<722c9;7>5;h0;>5<>o413:17d=n:188m6d=831b?9l50;9j71e=831dnl4?::m03?6=3th99=4?:e83>5}#jk0i;6F<4g9K71>>o5?3:17d<7:188m63=831b?54?::k0=?6=3`9j6=44i2`94?=n;=h1<75f35a94?=hjh0;66a<7;29?xd5=80;6i4?:1y'fg;4?::k13?6=3`836=44i2794?=n;10;66g<9;29?l5f2900e>l50;9j71d=831b?9m50;9lfd<722e8;7>5;|`117<72m0;6=u+bc8a3>N4;50;9j7=<722c857>5;h1b>5<>i4?3:17pl=0483>0<729q/no4;1:J00c=O;=20(9l52:k1`?6=3`8n6=44i2394?=n;<0;66am6;29?xd58=0;684?:1y'fg<392B88k5G35:8 1d=:2c9h7>5;h0f>5<>ie>3:17pl=0283>0<729q/no4;1:J00c=O;=20(9l52:k1`?6=3`8n6=44i2394?=n;<0;66am6;29?xd58;0;684?:1y'fg<392B88k5G35:8 1d=:2c9h7>5;h0f>5<>ie>3:17pl=0083>0<729q/no4;1:J00c=O;=20(9l52:k1`?6=3`8n6=44i2394?=n;<0;66am6;29?xd5890;684?:1y'fg<392B88k5G35:8 1d=:2c9h7>5;h0f>5<>ie>3:17pl>fd83>0<729q/no4;1:J00c=O;=20(9l52:k1`?6=3`8n6=44i2394?=n;<0;66am6;29?xd6nm0;684?:1y'fg<392B88k5G35:8 1d=:2c9h7>5;h0f>5<>ie>3:17pl>fb83>0<729q/no4;1:J00c=O;=20(9l52:k1`?6=3`8n6=44i2394?=n;<0;66am6;29?xd6nk0;684?:1y'fg<392B88k5G35:8 1d=:2c9h7>5;h0f>5<>ie>3:17pl>f`83>0<729q/no4;1:J00c=O;=20(9l52:k1`?6=3`8n6=44i2394?=n;<0;66am6;29?xd6n00;684?:1y'fg<392B88k5G35:8 1d=:2c9h7>5;h0f>5<>ie>3:17pl>f983>0<729q/no4;1:J00c=O;=20(9l52:k1`?6=3`8n6=44i2394?=n;<0;66am6;29?xd6n>0;684?:1y'fg<392B88k5G35:8 1d=:2c9h7>5;h0f>5<>ie>3:17pl>f783>0<729q/no4;1:J00c=O;=20(9l52:k1`?6=3`8n6=44i2394?=n;<0;66am6;29?xd6n<0;684?:1y'fg<392B88k5G35:8 1d=:2c9h7>5;h0f>5<>ie>3:17pl>f283>0<729q/no4;1:J00c=O;=20(9l52:k1`?6=3`8n6=44i2394?=n;<0;66am6;29?xd6n;0;684?:1y'fg<392B88k5G35:8 1d=:2c9h7>5;h0f>5<>ie>3:17pl>f083>0<729q/no4;1:J00c=O;=20(9l52:k1`?6=3`8n6=44i2394?=n;<0;66am6;29?xd6n90;684?:1y'fg<392B88k5G35:8 1d=:2c9h7>5;h0f>5<>ie>3:17pl>eg83>0<729q/no4;1:J00c=O;=20(9l52:k1`?6=3`8n6=44i2394?=n;<0;66am6;29?xd6ml0;684?:1y'fg<392B88k5G35:8 1d=:2c9h7>5;h0f>5<>ie>3:17pl>ee83>0<729q/no4;1:J00c=O;=20(9l52:k1`?6=3`8n6=44i2394?=n;<0;66am6;29?xd6mj0;684?:1y'fg<392B88k5G35:8 1d=:2c9h7>5;h0f>5<>ie>3:17pl>ec83>0<729q/no4;1:J00c=O;=20(9l52:k1`?6=3`8n6=44i2394?=n;<0;66am6;29?xd6mh0;684?:1y'fg<392B88k5G35:8 1d=:2c9h7>5;h0f>5<>ie>3:17pl=0c83>0<729q/no4;1:J00c=O;=20(9l52:k1`?6=3`8n6=44i2394?=n;<0;66am6;29?xd58h0;684?:1y'fg<392B88k5G35:8 1d=:2c9h7>5;h0f>5<>ie>3:17pl=0883>0<729q/no4;1:J00c=O;=20(9l52:k1`?6=3`8n6=44i2394?=n;<0;66am6;29?xd5810;684?:1y'fg<392B88k5G35:8 1d=:2c9h7>5;h0f>5<>ie>3:17pl=0683>0<729q/no4;1:J00c=O;=20(9l52:k1`?6=3`8n6=44i2394?=n;<0;66am6;29?xd58?0;684?:1y'fg<392B88k5G35:8 1d=:2c9h7>5;h0f>5<>ie>3:17pl>fg83>0<729q/no4;1:J00c=O;=20(9l52:k1`?6=3`8n6=44i2394?=n;<0;66am6;29?xd6n=0;684?:1y'fg<392B88k5G35:8 1d=:2c9h7>5;h0f>5<>ie>3:17pl>e883>0<729q/no4;1:J00c=O;=20(9l52:k1`?6=3`8n6=44i2394?=n;<0;66am6;29?xd6m10;684?:1y'fg<392B88k5G35:8 1d=:2c9h7>5;h0f>5<>ie>3:17pl>8783>1<729q/no4;2:J00c=O;=20(9l54:k1`?6=3`9>6=44ic794?=hj?0;66sm19594?2=83:p(ol5439K71`<@:>37):m:59j6a<722c897>5;h`6>5<5<2290;w)lm:518L62a3A9?46*;b;68m7b=831b>h4?::k01?6=3`h>6=44oc494?=zj:>96=4<:183!de2<;0D>:i;I17<>"3j3i0e9950;9j0=<722ejj7>5;|`071<72:0;6=u+bc865>N4o3?3:17d:7:188kd`=831vn<><:180>5<7s-hi68?4H26e?M5302.?n7?7;h64>5<>{eko0;6>4?:1y'fg<292B88k5G35:8 1d=911b8:4?::k7o3?3:17d:7:188kd`=831vn<:n:180>5<7s-hi68?4H26e?M5302.?n7?7;h64>5<>{ek:0;6>4?:1y'fg<292B88k5G35:8 1d=911b8:4?::k75<4290;w)lm:438L62a3A9?46*;b;3;?l202900e9650;9lec<722wio<4?:283>5}#jk0>=6F<4g9K71><,=h1=55f4683>>o303:17boi:188yge729086=4?{%`a>07<@:>m7E=;8:&7f?7?3`><6=44i5:94?=hio0;66smbg83>6<729q/no4:1:J00c=O;=20(9l5199j02<722c?47>5;nce>5<:i;I17<>"3j3;37d:8:188m1>=831dmk4?::afa<72:0;6=u+bc865>N40;66g;8;29?jga2900qoll:180>5<7s-hi68?4H26e?M5302.?n7?7;h64>5<>{e9>31<7:50;2x gd==:1C?9h4H26;?!2e2:1b8:4?::k726=44o`d94?=zj89=6=4;:183!de2<90D>:i;I17<>"3j39n7d:8:188m1>=831b844?::mbb?6=3th:<84?:583>5}#jk0>?6F<4g9K71><,=h1>95f4683>>o303:17d:6:188kd`=831vni?50;694?6|,kh19>5G35d8L62?3->i6?:4i5594?=n<10;66g;9;29?jga2900qo?66;290?6=8r.in7;<;I17b>N4<11/8o4>a:k73?6=3`>36=44i5;94?=hio0;66sm15`94?2=83:p(ol5529K71`<@:>37):m:0c8m11=831b854?::k7=?6=3fkm6=44}c300?6==3:15;nce>5<55;294~"ej3?>7E=;f:J00==#5;|`g7?6==3:1o3?3:17d:7:188m1?=831b8l4?::mbb?6=3th:?l4?:483>5}#jk0>96F<4g9K71><,=h1=k5f4683>>o303:17d:6:188m1g=831dmk4?::a5=3=8391<7>t$c`914=O;=l0D>:7;%6a>63>ifn3:17pl>2d83>1<729q/no4:3:J00c=O;=20(9l5269j02<722c?47>5;h6:>5<5<2290;w)lm:478L62a3A9?46*;b;3:?l202900e9650;9j0<<722c?m7>5;nce>5<:i;I17<>"3j3;27d:8:188m1>=831b844?::k7e?6=3fkm6=44}c11g?6=<3:1o3?3:17d:7:188m1?=831dmk4?::a77d=83>1<7>t$c`916=O;=l0D>:7;%6a>6e>o313:17boi:188yg55i3:187>50z&af?343A9?j6F<499'0g<4k2c?;7>5;h6;>5<>{e;;31<7:50;2x gd==:1C?9h4H26;?!2e2:i0e9950;9j0=<722c?57>5;nce>5<54;294~"ej3?87E=;f:J00==#5G35d8L62?3->i6>m4i5594?=n<10;66g;9;29?jga2900qo==6;290?6=8r.in7;<;I17b>N4<11/8o436=44i5;94?=hio0;66sm33794?2=83:p(ol5529K71`<@:>37):m:2a8m11=831b854?::k7=?6=3fkm6=44}c110?6=<3:1o3?3:17d:7:188m1?=831dmk4?::a775=83>1<7>t$c`916=O;=l0D>:7;%6a>6e>o313:17boi:188yg55:3:187>50z&af?343A9?j6F<499'0g<4k2c?;7>5;h6;>5<>{e;;;1<7:50;2x gd==:1C?9h4H26;?!2e2:i0e9950;9j0=<722c?57>5;nce>5<54;294~"ej3?87E=;f:J00==#5G35d8L62?3->i6>m4i5594?=n<10;66g;9;29?jga2900qo=>e;290?6=8r.in7;<;I17b>N4<11/8o436=44i5;94?=hio0;66sm30f94?2=83:p(ol5529K71`<@:>37):m:2a8m11=831b854?::k7=?6=3fkm6=44}c12g?6=<3:1o3?3:17d:7:188m1?=831dmk4?::a74d=83>1<7>t$c`916=O;=l0D>:7;%6a>6e>o313:17boi:188yg56i3:187>50z&af?343A9?j6F<499'0g<4k2c?;7>5;h6;>5<>{e;831<7:50;2x gd==:1C?9h4H26;?!2e2:i0e9950;9j0=<722c?57>5;nce>5<54;294~"ej3?87E=;f:J00==#5G35d8L62?3->i6>m4i5594?=n<10;66g;9;29?jga2900qo=>6;290?6=8r.in7;<;I17b>N4<11/8o436=44i5;94?=hio0;66sm30794?2=83:p(ol5529K71`<@:>37):m:2a8m11=831b854?::k7=?6=3fkm6=44}c120?6=<3:1o3?3:17d:7:188m1?=831dmk4?::a745=83>1<7>t$c`916=O;=l0D>:7;%6a>6e>o313:17boi:188yg56:3:187>50z&af?343A9?j6F<499'0g<4k2c?;7>5;h6;>5<>{e;8;1<7:50;2x gd==:1C?9h4H26;?!2e2:i0e9950;9j0=<722c?57>5;nce>5<54;294~"ej3?87E=;f:J00==#5G35d8L62?3->i6>m4i5594?=n<10;66g;9;29?jga2900qo=?e;290?6=8r.in7;<;I17b>N4<11/8o436=44i5;94?=hio0;66sm31f94?2=83:p(ol5529K71`<@:>37):m:2a8m11=831b854?::k7=?6=3fkm6=44}c13g?6=<3:1o3?3:17d:7:188m1?=831dmk4?::a75d=83>1<7>t$c`916=O;=l0D>:7;%6a>6e>o313:17boi:188yg5713:187>50z&af?343A9?j6F<499'0g<4k2c?;7>5;h6;>5<>{e;9k1<7:50;2x gd==:1C?9h4H26;?!2e2:i0e9950;9j0=<722c?57>5;nce>5<54;294~"ej3?87E=;f:J00==#5G35d8L62?3->i6?74i5594?=n<10;66g;9;29?jga2900qo?=c;291?6=8r.in7;:;I17b>N4<11/8o47;h64>5<>o3i3:17boi:188yg7393:197>50z&af?323A9?j6F<499'0g<6l2c?;7>5;h6;>5<>ifn3:17pl>4383>0<729q/no4:5:J00c=O;=20(9l51d9j02<722c?47>5;h6:>5<>{e9:n1<7;50;2x gd==<1C?9h4H26;?!2e2;90e9950;9j0=<722c?57>5;h6b>5<5<2290;w)lm:478L62a3A9?46*;b;1g?l202900e9650;9j0<<722c?m7>5;nce>5<53;294~"ej3?:7E=;f:J00==#=831dmk4?::a5=4=83?1<7>t$c`910=O;=l0D>:7;%6a>75>o313:17d:n:188kd`=831vn<6<:186>5<7s-hi68;4H26e?M5302.?n7<<;h64>5<>o3i3:17boi:188yg7?93:197>50z&af?323A9?j6F<499'0g<6=44i5:94?=n<00;66g;a;29?jga2900qo?8b;291?6=8r.in7;:;I17b>N4<11/8o4>e:k73?6=3`>36=44i5;94?=n26=44i5c94?=hio0;66sm19`94?3=83:p(ol5549K71`<@:>37):m:318m11=831b854?::k7=?6=3`>j6=44o`d94?=zj8226=4::183!de2:i;I17<>"3j3o0e9950;9j0=<722c?57>5;h6b>5<5<4290;w)lm:438L62a3A9?46*;b;03?l202900e9650;9lec<722wi=;l50;194?6|,kh19<5G35d8L62?3->i6?>4i5594?=n<10;66anf;29?xd6>j0;6>4?:1y'fg<292B88k5G35:8 1d=:91b8:4?::k7o3?3:17d:7:188kd`=831vn<=i:186>5<7s-hi68;4H26e?M5302.?n7<=;h64>5<>o3i3:17boi:188yg70l3:197>50z&af?323A9?j6F<499'0g<5:2c?;7>5;h6;>5<>ifn3:17pl>6d83>6<729q/no4:1:J00c=O;=20(9l5219j02<722c?47>5;nce>5<54;294~"ej3?87E=;f:J00==#=831b844?::mbb?6=3th8>h4?:583>5}#jk0>?6F<4g9K71><,=h1?6g;7;29?l2?2900e9750;9lec<722wi=4650;794?6|,kh1985G35d8L62?3->i66=4?{%`a>03<@:>m7E=;8:&7f?7e3`><6=44i5:94?=n<00;66g;a;29?jga2900qo?=d;291?6=8r.in7;:;I17b>N4<11/8o47;h64>5<>o3i3:17boi:188yg7?m3:1?7>50z&af?363A9?j6F<499'0g<03`><6=44i5:94?=hio0;66sm18694?4=83:p(ol54b9K71`<@:>37d:9:188kd`=831vn<:6:181>5<7s-hi69m4H26e?M5302c?:7>5;nce>5<53;294~"ej3?97E=;f:J00==#t$c`917=O;=l0D>:7;%6a>4>>i3m3:17pl>9683>1<729q/no4:4:J00c=O;=20(9l51b9j02<722c?47>5;h6:>5<5<3290;w)lm:468L62a3A9?46*;b;3`?l202900e9650;9j0<<722e?i7>5;|`27`<72<0;6=u+bc862>N40;66g;8;29?l2>2900e9o50;9l0`<722wi=:m50;794?6|,kh19;5G35d8L62?3->i63290>6=4?{%`a>00<@:>m7E=;8:&7f?453`><6=44i5:94?=n<00;66g;a;29?j2b2900qo?7c;291?6=8r.in7;9;I17b>N4<11/8o4=2:k73?6=3`>36=44i5;94?=n26=44o5g94?=z{=9;6=48{_604>;6;?0?463>35873>;6;h0?m63>2d87=>;6:j0?;63>2e873>{t<;o1<7<>{_156>X3;11U8>84^274?[24;2T?<<5Q4258Z1653W9=<6P<5g9]70cX3;h1U8?j4^50`?[25j2T?>l5Q43;896372=>01>=j:27896572:?01>=m:278965f2:?01>=6:278965?2:?01>:9:27896222:?01<8::c:8yv70n3:1>vP<599>52`=j?1v9==:184[24:278>k4<1:?07a650;0xZ6`134;847l9;|q705<724=0:g>11<5:8o6974=20f>11<582n6994}r617b<5:996?j4=212>7b<5:9;6?j4=21b>7b<5:926?j4=21;>7b<58::6?j4=023>7b<5ol1>i52fd81`>;al38o70?=7;0g?875>38o70?=5;0g?875<38o70?=3;0g?876l38o70?>c;0g?876j38o70?>a;0g?876138o70ji:3f89ac=:m16hi4=d:?gg?4c34ni6?j4=07:>7b<58?36?j4=075>7b<58?>6?j4=074>7b<58<86?j4=041>7b<58<:6?j4=043>7b<58?m6?j4=014>7b<58936?j4=011>7b<589:6?j4=3g6>7b<5;o=6?j4=3d2>7b<5;lh6?j4=220>7b<5::?6?j4=226>7b<5::=6?j4=224>7b<5::36?j4=3g4>7b<5;o36?j4=3g:>7b<5;oj6?j4=3ga>7b<5;oh6?j4=3gg>7b<5;on6?j4=3ge>7b<5;l;6?j4=3d1>7b<5;l86?j4=3d7>7b<5;l>6?j4=3d5>7b<5;l<6?j4=3d;>7b<5;l26?j4=3db>7b<5;li6?j4=3dg>7b<5;ln6?j4=3de>7b<5::;6?j4=222>7b<5::96?j4=326>7b<5;:?6?j4=320>7b<5;:96?j4=322>7b<5;:;6?j4=0df>7b<58lo6?j4=0d`>7b<58li6?j4=0db>7b<58l26?j4=0d;>7b<58l<6?j4=0d5>7b<58l>6?j4=0d0>7b<58l96?j4=0d2>7b<58l;6?j4=0ge>7b<58on6?j4=0gg>7b<58oh6?j4=0ga>7b<58oj6?j4=32a>7b<5;:j6?j4=32:>7b<5;:36?j4=324>7b<5;:=6?j4=0de>7b<58l?6?j4=0g:>7b<58o36?j4}r3;3?6=:rT8jn521959f3=z{=926=470z\77<=:;;l1>i5232f96a=:;=:1>i5232a96a=:;:o1>i5232d96a=:;:h1>i5235496a=:;=?1>i52ce81`>;dk38o70mm:3f89fg=:m16o44=d:?e7?4c34l96?j4=g396a=:n909h63jf;0g?8c>2;n01h652e9>a2<5l27n:77b<58;86?j4=031>7b<58;:6?j4=033>7b<58:m6?j4=057>7b<58=86?j4=054>7b<58k?6?j4=0c0>7b<58k:6?j4=0c3>7b<58k96?j4=0c`>7b<58kj6?j4=0ca>7b<58ko6?j4=0cf>7b<58h=6?j4=0`7>7b<58h>6?j4=0`4>7b<58h36?j4=0a1>7b<58i:6?j4=0a3>7b<58hm6?j4=0`f>7b<5;:o6>:m;<02>4<4c9>612=;=h01?62e348;i7=;b:?154<4=h535`897772:>i70<>2;17f>;59:088o52206971d<5;;>6>:m;<02=?53j279=;4<4c9>641=;=h01??n:26a?846j39?n63=1b800g=::8n1?9l4=303>62e348:i7=;b:?15c<4??535`897452:>i70<=4;17f>;5:<088o5223:971d<5;8=6>:m;<013?53j279>44<4c9>67g=;=h01?62e3488=7=;b:?177<4>=535`897532:>i70<<7;17f>;5;<088o52224971d<5;9i6>:m;<0066c=;=h01?=l:26a?844l39?n63=3g800g=::=:1?9l4=362>62e348?>7=;b:?103<49=535`897222:>i70<;7;17f>;5<1088o5225;971d<5;>j6>:m;<07`?53j2798o4<4c9>61e=;=h01?:j:26a?842839?n63=50800g=::<81?9l4=0:5>7b<582<6?j4=05e>7b52z\750=:9>=1n;5rs0g3>5<5sW9h563=048a2>{t9ml1<7dd83>7}Y;j=01?><:c48yv7cl3:1>vP654=j?1vm;;<034?d13ty:h44?:3y]7f4<58ln6o84}r3g;6nj0i:6s|1e494?4|V:hm70?ib;`5?xu6l<0;6?uQ3cg894`f2k<0q~?k4;296~X4jm16=k75b79~w4b42909wS=mc:?2b=2wx=i<50;0xZ6de34;m;7l9;|q2`4<72;qU?oo4=0d5>g052z\0f<=:9o?1n;5rs0af>5<5sW9i;63>f28a2>{t9jn1<7cb83>7}Y;k?01:c48yv7dj3:1>vP5c6=j?1vl=;<3fa?d13ty:o54?:3y]7g7<58oo6o84}r3`3?6=:rT8n=521da9f3=z{8i=6=4={_1bb>;6mk0i:6s|1b794?4|V:kn70?ja;`5?xu6m>0;6?uQ3bd8976e2k<0q~?j6;296~X4kl16>=o5b79~w4c22909wS=ld:?14<2wx=h:50;0xZ6ed348;47l9;|q2a6<72;qU?nl4=324>g07>52z\0gd=::9<1n;5rs0g2>5<5sW9h?63>fg8a2>{t9mk1<7cg83>7}Y;hn01vP5`>=j?1v>o;:180[5?82799<4<5:?117<4=2wx?l<50;1xZ61a348?i7=:;<064?523ty8m<4?:2y]72c<5;>o6>;4=36`>6353z\03a=::=k1?85225`970=z{:3m6=4<{_14g>;5<108963=48801>{t;0o1<7=t^25a?843>39>70<;7;16?xu41j0;6>uQ36;897242:?01?:::278yv5>j3:1?vP<799>617=;<16>9<5349~w6?f2908wS=87:?17c<4=2798=4<5:p799;<00a?523488h7=:;|q0==<72:qU?:;4=31a>63<5;9h6>;4}r1:3?6=;rT8;95222:970=:::k1?85rs2;5>5<4sW9;5;?0896s|38794?5|V:=970<<4;16?844=39>7p}<9583>6}Y;>;01?==:27897542:?0q~=63;297~X4?916>>>5349>667=;<1v>7>:180[51m279>i4<5:?16c<4=2wx?4>50;1xZ60c3489n7=:;<01g?523ty84k4?:2y]73e<5;826>;4=30b>6353z\02g=::;21?852235970=z{:2o6=4<{_15e>;5:<08963=27801>{t;1i1<7=t^24:?845:39>70<=4;16?xu40k0;6>uQ37:897472:?01?<>:278yv5?i3:1?vP<669>64c=;<16>>2908wS=96:?15f<4=279=i4<5:p7=>=839pR>8:;<02e?52348:n7=:;|q0eg<72:qU?584=33:>63<5;;<6>;4}r1be?6=;rT84852207970=::8<1?85rs2c:>5<4sW93863=12801>;59=0896s|3`:94?5|V:2870<>1;16?846:39>7p}6}Y;1801?>i:27897772:?0q~=n6;297~X40816>8:5349>65c=;<1v>o::180[50i2798k4<5:?116<4=2wx?4j50;1xZ60a348?87=:;<00=?523ty85?4?:2y]732<5;886>;4=30f>6353z\026=::9n1?85220:970=z{g7<58<>6>>4}r30g?6=:r7:?o4<5:?205950;33874j3h>70=39:70?:5;`6?872?39:70?93;12?871:39:70?91;12?871839:70?:f;12?874?3h>70?<8;`6?874:39:70?<1;12?xu6;k0;69u212`9f3=:9:>18l5213a90==:9;n1855rs21g>5<5s499j7=:;<10`?d13ty8>k4?:4y>77`=j?16=:75489>5=3=<116=5?5469>5=?=<>1v>=l:185854l39>70=70?76;`6?87??3h>70?8f;`6?xu4;80;6>u2320970=:;:;1n;5232296`=z{:996=4={<106?d1349887:8;|q07c<72:q6?9>5349>76c=:l16?>h5b79~w6272909w0=;0;`5?853:3><7p}<3c83>7}:;:i1?85232`9f3=z{:9;6=4<{<105?523498<7l9;<100?2?3ty8?h4?:2y>76c=j?16?>h5349>714=<11v>=<:187854i3h>70=<9;`6?85403h>70=<4;ce?xu4;?0;6<;t=21:>g0<58::6>?4=023>67<5ol1?<52fd805>;al39:70?=7;12?875>39:70?=5;12?875<39:70?=3;12?876l39:70?>c;12?876j39:70?>a;12?876139:70ji:2389ac=;816hi4<1:?gg?5634ni6>?4}r101?6=<0q6?>65b79>6`3=;816>h85309>6c7=;816>km5309>755=;816?=:5309>753=;816?=85309>751=;816?=65309>6`1=;816>h65309>6`?=;816>ho5309>6`d=;816>hm5309>6`b=;816>hk5309>6``=;816>k>5309>6c4=;816>k=5309>6c2=;816>k;5309>6c0=;816>k95309>6c>=;816>k75309>6cg=;816>kl5309>6cb=;816>kk5309>6c`=;816?=>5309>757=;816?=<5309>653=;816>=:5309>655=;816>=<5309>657=;816>=>5309>5cc=;816=kj5309>5ce=;816=kl5309>5cg=;816=k75309>5c>=;816=k95309>5c0=;816=k;5309>5c5=;816=k<5309>5c7=;816=k>5309>5``=;816=hk5309>5`b=;816=hm5309>5`d=;816=ho5309>65d=;816>=o5309>65?=;816>=65309>651=;816>=85309>5c`=;816=k:5309>5`?=;816=h65309~w6262908w0=;6;`6?853=3h>70=;2;ce?xu4<=0;6<9t=265>g0<58=?6>?4=050>67<58k?6>?4=0c0>67<58k:6o;4=0c3>g3<58k96>?4=0c`>67<58kj6>?4=0ca>g3<58ko6>?4=0cf>67<58h=6>?4=0`7>g3<58h>6>?4=0`4>67<58h36>?4=0a1>67<58i:6>?4=0a3>67<58hm6>?4=0`f>67514y>713=j?16oi4<1:?`g?5634ii6>?4=bc974=:k008=63i3;12?8`52:;01k?5309>b5<4927nj7=>;67<5l21?<52e6805>;b>39:70k::23894742:;01gc<3027o=7:8;1?<5m>1845rsb:94?3|5jn1n;52190902=:9>h18l5219c902=:9?o1855rsbg94?4|5ji1?852cg8bb>{tk>0;68u2cb8a2>;60;0?563>8c873>;6>m0?463>7b87e>{tl90;6?u2cc801>;c93km7p}l6;291~;dj3h=70?73;64?87?j3>270?9c;6;?870k3>27p}k2;296~;di39>70j<:`d8yve2290>w0mn:c4894>42=301<9m:5;894>f2=301<8m:5:8yvb32909w0m6:2789a2=io1vn:50;7x9f?=j?16=;o5499>52b=<116=5:5469>5=e=<11v<<=:185877939>70?=7;`5?877;3>370??5;64?877?3>270??8;6:?xuak3:1?v3>008a2>;6<80?463>3e87<>{t9981<763<58:86lh4}rda>5<4s4;;<7l9;<376?2?34;8h7:n;|q241<72;q6jk4<5:?240bc27:8?4;7:?27`<302wx==850;0x9cc=;<16==95ag9~wc?=839p1kk5b79>517=<>16=>k5469~w46?2909w0hk:278946?2hl0q~h7:1808`c2k<01<=i:55894242==0q~?>8;296~;6:>08963>1e8a2>{t98=1<763<58;h6o84}r315?6==r7:>;4m6:?246<3?27:<84;8:?242<3i27:<44;7:p540=838p1<<::278947e2k<0q~?=0;290~;6:<0i:63>0487=>;68>0?;63>0887<>{t98?1<763<58;j6o84}r32b?6=;r7:>94m6:?242<3027:<54;7:p542=838p1<<<:278947>2k<0q~?>e;296~;6::0i:63>0987<>{tm=0;6?u2f2801>;b13h=7p}j3;296~;a:39>70k7:c48yvcc290>w0h=:c489f`=<>16h<4;8:?g7?2f34n>6994}rg1>5<5s4l:6>;4=d59f3=z{li1<7:t=g39f3=:l80?563k3;64?8b22=20q~k>:1818`72:?01h85b79~w`d=839p1k>5b79>`6<3027o87:8;|qf4?6=:r7nj7=:;g0g0<5m>1855rs02f>5<5s4;:h7=:;<327?d13ty:54e=;<16=<<5b79~w46d2909w0?>b;16?87693h=7p}>0c83>7}:98k1?8521029f3=z{8:j6=4={<32=?5234;;j7l9;|qge?6=:r7n57=:;g063<5mo1n;5rse:94?4|5l=1?852de8a2>{tl>0;6?u2e7801>;ck3h=7p}k6;296~;b=39>70jm:c48yv72m3:1>5u2dg801>;6>:0i:63mc;64?855k3><70==b;64?855i3><70==9;64?85503><70==7;64?855>3><70==5;64?855<3><70==3;64?855:3><70==1;64?85583><70=>f;64?856m3><70=>d;64?856k3><70=>b;64?856i3><70=>9;64?85603><70=>7;64?856>3><70=>5;64?856<3><70=>3;64?856:3><70=>1;64?85683><70=?f;64?857m3><70=?d;64?857k3><70=?b;64?85713><70=?a;64?87393>27p}i4;296~;cm39>70ll:`d8yv`22909w0jk:2789gb=io1vk850;0x9ae=;<16nh4nf:pb2<72;q6ho4<5:?ab?ga3ty:ni4?:4y>545=;<16=n<5b79>g5<3?278>i4;8:?06`<302wx=?650;0x94752:?01n>5ag9~w44>2909w0?>1;16?8e62hl0q~?=a;296~;69908963l2;ce?xu6:k0;6?u211d970=:k:0jj6s|13a94?4as4;>57:7;77751c=io1v<;;:18787213h=70?93;16?873m3><70?0;6?u214:970=:9=n1mk5rs070>5<2s4;>47l9;<356?5234;?i7:7;<30`?2>34;?h7:8;|q200<72;q6=885349>51g=io1v<;>:184872>3h=70?90;16?873i3>370?;b;6:?873l3>270?;c;6;?874m3>j7p}>4583>7}:9j7=:;<37e?2034;?n7:7;<30b?2?34;?h7:7;<37=?2134;?o7:8;|q203<72;q6=895349>51d=io1v<;=:185872?3h=70?91;16?873j3><70?;d;6b?873k3>270?g0<5;:o6>l4=33;>6d<5;886>l4=367>6d<5;8n6>l4=31:>6d<5;>m6>l4=370>6d<5;??6>l4=32f>6d<5;;:6>l4=32e>6d<5;;;6>l4=331>6d<5;;86>l4=337>6d<5;;>6>l4=33:>6d<5;;=6>l4=334>6d<5;;j6>l4=33a>6d<5;;h6>l4=33g>6d<5;8;6>l4=33f>6d<5;;m6>l4=302>6d<5;896>l4=307>6d<5;8>6>l4=30;>6d<5;8=6>l4=304>6d<5;826>l4=30b>6d<5;8i6>l4=30`>6d<5;9;6>l4=30g>6d<5;8m6>l4=312>6d<5;996>l4=310>6d<5;9?6>l4=314>6d<5;9>6>l4=315>6d<5;9i6>l4=31;>6d<5;9j6>l4=31f>6d<5;9h6>l4=31g>6d<5;9m6>l4=363>6d<5;>:6>l4=361>6d<5;>=6>l4=360>6d<5;>>6>l4=364>6d<5;>36>l4=36:>6d<5;>j6>l4=36g>6d<5;>i6>l4=36`>6d<5;>n6>l4=373>6d<5;?:6>l4=371>6d<5kn18:52bb87<>;6<;0?m6s|14a94?2ds4;==7l9;<03`?5f348:47=n;<017?5f348?87=n;<01a?5f348857=n;<07b?5f348>?7=n;<060?5f348;i7=n;<025?5f348;j7=n;<024?5f348:>7=n;<027?5f348:87=n;<021?5f348:57=n;<022?5f348:;7=n;<02e?5f348:n7=n;<02g?5f348:h7=n;<014?5f348:i7=n;<02b?5f3489=7=n;<016?5f348987=n;<011?5f348947=n;<012?5f3489;7=n;<01=?5f3489m7=n;<01f?5f3489o7=n;<004?5f3489h7=n;<01b?5f3488=7=n;<006?5f3488?7=n;<000?5f3488;7=n;<001?5f3488:7=n;<00f?5f348847=n;<00e?5f3488i7=n;<00g?5f3488h7=n;<00b?5f348?<7=n;<075?5f348?>7=n;<072?5f348??7=n;<071?5f348?;7=n;<07<7=n;<065?5f348>>7=n;<`f>11<5kn1855215090<=z{8?i6=4;cz?225279>4<9:?101<41279>h4<9:?17<<412798k4<9:?116<41279994<9:?14`<41279=<4<9:?14c<41279==4<9:?157<41279=>4<9:?151<41279=84<9:?15<<41279=;4<9:?152<41279=l4<9:?15g<41279=n4<9:?15a<41279>=4<9:?15`<41279=k4<9:?164<41279>?4<9:?161<41279>84<9:?16=<41279>;4<9:?162<41279>44<9:?16d<41279>o4<9:?16f<41279?=4<9:?16a<41279>k4<9:?174<41279??4<9:?176<41279?94<9:?172<41279?84<9:?173<41279?o4<9:?17=<41279?l4<9:?17`<41279?n4<9:?17a<41279?k4<9:?105<412798<4<9:?107<412798;4<9:?106<41279884<9:?102<41279854<9:?10<<412798l4<9:?10a<412798o4<9:?10f<412798h4<9:?115<412799<4<9:?117<4127ij7:8;<`f>1><58>:69o4}r36e?6=65b=;116><65399>675=;116>9:5399>67c=;116>>75399>61`=;116>8=5399>602=;116>=k5399>647=;116>=h5399>646=;116><<5399>645=;116><:5399>643=;116><75399>640=;116><95399>64g=;116>64e=;116>676=;116>64`=;116>??5399>674=;116>?:5399>673=;116>?65399>670=;116>?95399>67?=;116>?o5399>67d=;116>?m5399>666=;116>?j5399>67`=;116>>?5399>664=;116>>=5399>662=;116>>95399>663=;116>>85399>66d=;116>>65399>66g=;116>>k5399>66e=;116>>j5399>66`=;116>9>5399>617=;116>9<5399>610=;116>9=5399>613=;116>995399>61>=;116>975399>61g=;116>9j5399>61d=;116>9m5399>61c=;116>8>5399>607=;116>8<5399>fc<3027:8>4;8:p56?=839p1<=8:278945?2:?01<=n:`d8yv74?3:1>v3>368a2>;6;h0?;6s|12194?4|58996>;4=017>d`57z?27727:?;4;9:?271<3127:?l4;9:?26`<3?27:>n4;9:?26a<312wx=>;50;0x94562:?01<=9:`d8yv75n3:1;v3>308a2>;6;?0?;63>3587<>;6;h0?463>2d87<>;6:j0?m63>2e87e>{t9?31<766<58<26lh4}r35a?6=:r7:;=4;d:?22`6g804>;6>008<63>698bb>{t9?n1<7=t=04e>1b<58<26o64=04g>d`52z?22c4<5:p5g4=83?p1<86:24894d02k<01:27894>e2=201<8k:558yv71?3:1>v3>69804>;6>>0jj6s|1c394?3|58<36>84=0`5>g0<58i;6>;4=0:a>1g<5866802>;6j<0i:63>bg801>;60h0?m63>6c873>{t9?h1<7g><58d2==0q~?9a;296~;6>?0i463>6`8bb>{t91n1<7?8{<351?5134;j877522=j?16=:75499~w4162909w0?83;`5?87013><7p}>7`83>6}:9>=1>h5216d96`=:91?1mk5rs05;>5<5s4;<;7=:;<34=?ga3ty:5>4?:3y>5d2=;<16=475ag9~w4?a290?w0?n4;`5?87fm39>70?69;64?87?:3>37p}>9383>7}:9h91?85218:9ec=z{83n6=4:{<3b7?d134;jh7=:;<3:=?2?34;3>7:n;<3:5d7=;<16=4;5ag9~w4?d29070?65;64?87>>3>270?73;6b?87>03>270?67;6;?xu60o0;6?u21`2970=:90>1mk5rs0;a>55d4=;<16=485ag9~w4?c290=w0?n2;`5?87fk39>70?66;64?87?;3>370?68;6b?87>?3>27p}>a683>6}:9hi1n;521c4970=:9>i18:5rs0c6>5<4s4;jm7l9;<3a0?5234;5g3=;<16=:l5469~w4g?2908w0?nd;`5?87e?39>70?8c;6;?xu6i00;6>u21`g9f3=:9k21?85216`90==z{8h86=4;{<3a7=:;<3;e?2?34;=i7:8;|q2ff<72=hp1:c48976c2;201??7:3:897442;201?:;:3:8974b2;201?=6:3:8972a2;201?;<:3:897332;201?>j:3:897762;201?>i:3:897772;201??=:3:897742;201??;:3:897722;201??6:3:897712;201??8:3:8977f2;201??m:3:8977d2;201??k:3:897472;201??j:3:8977a2;201?<>:3:897452;201?<;:3:897422;201?<7:3:897412;201?<8:3:8974>2;201?:3:897552;201?=<:3:897532;201?=8:3:897522;201?=9:3:8975e2;201?=7:3:8975f2;201?=j:3:8975d2;201?=k:3:8975a2;201?:?:3:897262;201?:=:3:897212;201?:<:3:897222;201?:8:3:8972?2;201?:6:3:8972f2;201?:k:3:8972e2;201?:l:3:8972b2;201?;?:3:897362;201?;=:3:89f7=<>16o=4;8:p5gd=83>iw0?l0;`5?847l38<70<>8;04?845;38<70<;4;04?845m38<70<<9;04?843n38<70<:3;04?842<38<702;04?846;38<70<>4;04?846=38<70<>9;04?846>38<70<>7;04?846i38<70<>b;04?846k38<70<>d;04?845838<70<>e;04?846n38<70<=1;04?845:38<70<=4;04?845=38<70<=8;04?845>38<70<=7;04?845138<70<=a;04?845j38<70<=c;04?844838<70<=d;04?845n38<70<<1;04?844:38<70<<3;04?844<38<70<<7;04?844=38<70<<6;04?844j38<70<<8;04?844i38<70<38<70<;3;04?843=38<70<;7;04?843038<70<;9;04?843i38<70<;d;04?843j38<70<;c;04?843m38<70<:0;04?842938<70<:2;04?8e52==01n?5499~w4df290?nv3>bg8a2>;58m09:63=19812>;5::09:63=45812>;5:l09:63=38812>;5;5==09:63=0d812>;59809:63=0g812>;59909:63=13812>;59:09:63=15812>;59<09:63=18812>;59?09:63=16812>;59h09:63=1c812>;59j09:63=1e812>;5:909:63=1d812>;59o09:63=20812>;5:;09:63=25812>;5:<09:63=29812>;5:?09:63=26812>;5:009:63=2`812>;5:k09:63=2b812>;5;909:63=2e812>;5:o09:63=30812>;5;;09:63=32812>;5;=09:63=36812>;5;<09:63=37812>;5;k09:63=39812>;5;h09:63=3d812>;5;j09:63=3e812>;5;o09:63=41812>;5<809:63=43812>;5;5<<09:63=46812>;5<109:63=48812>;5;5;5;5=809:63=53812>;d;3><70m=:5:8yv7e13:18lu21cg9f3=::9n1>85220:960=::;91>852256960=::;o1>85222;960=::=l1>852241960=::<>1>85221g960=::8;1>85221d960=::8:1>852200960=::891>852206960=::8?1>85220;960=::8<1>852205960=::8k1>85220`960=::8i1>85220f960=::;:1>85220g960=::8l1>852233960=::;81>852236960=::;?1>85223:960=::;<1>852235960=::;31>85223c960=::;h1>85223a960=::::1>85223f960=::;l1>852223960=:::81>852221960=:::>1>852225960=:::?1>852224960=:::h1>85222:960=:::k1>85222g960=:::i1>85222f960=:::l1>852252960=::=;1>852250960=::=<1>852251960=::=?1>852255960=::=21>85225;960=::=k1>85225f960=::=h1>85225a960=::=o1>852242960=::<;1>852240960=:k:0?46s|28f94?4|5;o>6>;4=22b>d`52z?1a027:i54<5:p6d>=838p1?k9:278966e2hl0q~e8801>{t:k91<763<5:;=6lh4}r0g3?6=:r79j<4m6:?2b1<4=2wx>oo50;0x97`d2:?01><>:`d8yv4cm3:1>v3=fb8a2>;6no0896s|2c`94?4|5::86>;4=204>d`52z?046279<;4<5:p6ge=838p1>>;:278964?2hl0q~{t:kn1<763<5:826lh4}r0f5?6=:r78<84m6:?14=<4=2wx>ok50;0x96612:?01>v3<078a2>;5800896s|2cd94?4|5::<6>;4=20a>d`52z?042279>7:278964d2hl0q~{t:0o1<763<5::26lh4}r0`6?6=:r79i:4m6:?2ad<4=2wx>4h50;0x97c?2:?01>>l:`d8yv4d;3:1>v3=e98a2>;6mk0896s|2`294?4|5;o26>;4=22g>d`52z?1a<27:in4<5:p6d7=838p1?kn:278966b2hl0q~ee801>{t:h81<763<5::m6lh4}r0`2?6=:r79io4m6:?2a`<4=2wx>l=50;0x97cd2:?01>??:`d8yv4d?3:1>v3=eb8a2>;6mo0896s|2`694?4|5;oo6>;4=232>d`52z?1aa27:j=4<5:p6d3=838p1?kj:27896752hl0q~f0801>{t:h<1<763<5:;86lh4}r0`e?6=:r79ik4m6:?2b7<4=2wx>l950;0x97`72:?01>?;:`d8yv4dj3:1>v3=f18a2>;6n:0896s|2`;94?4|5;l96>;4=236>d`52z?1b727:j84<5:p6dg=838p1?h<:27896702hl0q~f7801>{t:hh1<763<5:;36lh4}r0`b?6=:r79j94m6:?2b2<4=2wx>lm50;0x97`22:?01>?6:`d8yv4c83:1>v3=f48a2>;6n10896s|2`f94?4|5;l=6>;4=23b>d`52z?1b327:j44<5:p6dc=838p1?h8:278967e2hl0q~0i:63>f`801>{t:hl1<763<5:;h6lh4}r0g7?6=:r79j54m6:?2bg<4=2wx>o>50;0x97`>2:?01>?k:`d8yv4c<3:1>v3=f88a2>;6nj0896s|2c394?4|5;lj6>;4=23f>d`52z?1bd27:ji4<5:p6g4=838p1?hm:278967a2hl0q~fd801>{t:k>1<763<5:8;6lh4}r0go;50;0x97`b2:?01><=:`d8yv4c13:1>v3=fd8a2>;5880896s|2c494?4|5;lm6>;4=200>d`52z?1bc279>?:27896432hl0q~{t:k21<763<5:8>6lh4}r0gg?6=:r78<<4m6:?141<4=2wx>o750;0x96652:?01><9:`d8yv4cl3:1>v3<038a2>;58<0896s|33f94?42s48;h7=;c:?166<4>7535a8972a2:>h70<:4;17g>;598088n5221d971e<5;;86>:l;<021?53k279=:4<4b9>64g=;=i01??l:26`?845839?o63=1d800f=::;81?9m4=306>62d3489;7=;c:?16<<4?l535a897572:>h70<=d;17g>;5;;088n52226971e<5;9=6>:l;<00f?53k279?54<4b9>66b=;=i01?=i:26`?843939?o63=47800f=::=91?9m4=36;>62d348?m7=;c:?10f<49k535a897362:>h70==d;ce?xu5080;6?u221f972=:;9k1855rs20f>5<5=r79=54<4b9>612=;=i01?62d348:87=;c:?15<<4<8535a8977e2:>h70<>d;17g>;59o088n52233971e<5;8?6>:l;<01;4<4b9>67g=;=i01?62d348897=;c:?17d<4>k535a8975d2:>h70<;0;17g>;5<;088n52257971e<5;><6>:l;<07=?53k2798i4<4b9>61d=;=i01?;?:26`?842:39?o63<2d8bb>{t:1i1<761<5::j6974}r0:3?6=:r79>>4<7:?04g<302wx>;h50;0x97232:=01>?9:5;8yv42i3:1>v3=2d803>;48k0?56s|27794?4|5;926>94=235>1>52z?10c<4?278><4;8:p627=838p1?;<:25896462=30q~<82;296~;5==08;63<2687<>{t:>91<761<5:8<6974}r042?6=:r79=<4<7:?06<<302wx>::50;0x976a2:=01><7:5:8yv40=3:1>v3=11803>;4:10?56s|26594?4|5;;96>94=20:>1?52z?156<4?278>l4;8:p62?=838p1??;:258964f2=30q~<8a;296~;59<08;63<2c87<>{t:>n1<761<5:8h6974}r04f?6=:r79=;4<7:?06g<312wx>:m50;0x97702:=01>v3=1`803>;4800?46s|26d94?4|5;;i6>94=22:>1?52z?15f<4?278{t:191<761<5::o6964}r0;0?6=:r79=k4<7:?04a<312wx>5850;0x97462:=01>>j:5;8yv4??3:1>v3=23803>;48o0?46s|29:94?4|5;8?6>94=22e>1?52z?160<4?278==4;8:p6=b=838p1?<7:25896762=30q~<7a;296~;5:?08;63<1187=>{t:1h1<761<5:;:6964}r0;a?6=:r79>44<7:?057<302wx>5h50;0x974f2:=01>?=:5;8yv4>83:1>v3=2c803>;49:0?46s|28394?4|5;8h6>94=230>1?52z?175<4?278=84;8:p6<4=838p1?{t:0?1<761<5:;>6974}r0:2?6=:r79??4<7:?052<302wx>4650;0x97542:=01>?8:5;8yv4>13:1>v3=35803>;4910?46s|28a94?4|5;9<6>94=23:>1?52z?170<4?278=54;9:p62=20q~<:7;296~;5;k08;63<1c87<>{t:61<5:;j6964}r062?6=:r79?l4<7:?05d<312wx>8l50;0x975b2:=01>?l:5;8yv4203:1>v3=3b803>;49k0?56s|24;94?4|5;9o6>94=23`>1>o7>52z?17c<4?278=i4;8:p60b=838p1?:?:258967c2=30q~<:e;296~;5<808;63<1d87<>{t:61<5:;n6974}r056?6=:r798;4<7:?065<302wx>;>50;0x97242:=01>?i:5:8yv4193:1>v3=44803>;49o0?56s|27194?4|5;><6>94=203>1?52z?10=<4?278>?4;8:p630=838p1?:6:25896452=30q~<97;296~;5{t:?k1<761<5:8?6974}r05;750;0x972d2:=01><;:5:8yv41j3:1>v3=4d803>;4:<0?46s|27a94?4|5;?;6>94=206>1?52z?114<4?278>;4;8:p63c=838p1?;=:25896412=30q~h5221696`=::991>h5221096`=::9;1>h5221296`=:9oo1>h521gf96`=:9oi1>h521g`96`=:9ok1>h521g;96`=:9o21>h521g596`=:9o<1>h521g796`=:9o91>h521g096`=:9o;1>h521g296`=:9ll1>h521dg96`=:9ln1>h521da96`=:9lh1>h521dc96`=::9h1>h5221c96`=::931>h5221:96`=::9=1>h5221496`=:9ol1>h521g696`=:9l31>h521d:96`=:9;o1mk5rs0:;>5<4s4;3:7=:;<3;3?5234;357oi;|q2<3<72?q6=585b79>5=3=<>16=5j5499>77b=<>16??k5489>5=c=<11v<6?:181870n39>70?71;ce?xu0<3:1>v3>0987e>;6800?i6s|7683>7}:l=0?m63k5;6f?xu61h0;6?u218;90<=:90=18h5rs06e>5<5s4;?i7:6;<37g?2b3ty::94?:3y>57e=io16=>h54`9~w4262909w0?;1;ce?87383>37p}>4383>7}:9=81mk5215190<=z{89o6=4={<30`?ga34;?<7:8;|q27c<72;q6=9>5489>56`=io1v<:<:18187383>j70?;3;6f?xu6k:0;6?u219f9ec=:9131855rs0:1>5<5s4;3>7oi;<3;5?2?3ty:4>4?:3y>5=5=io16=5:5489~w41b2908w0?71;6:?87?13>j70?8d;ce?xu60=0;6?u219390d=:91>18h5rs05a>5<5s4;5=g=io16=5m54`9~w4>e2909w0?7b;ce?87?k3>27p}>8b83>7}:9131845219a90`=z{89n6=4={<30b?2>34;8i7:j;|q23f<72;q6=:j5489>52e=o4;339'711=111v9=6:181[241279n7:<9:&002<>12wx8?650;0xZ14?348i69<7;%173?g53ty8m94?:3y]7=6<5;h1?5>4$264>307>52z\03c=::k08;k5+355934=z{:k:6=4={_14a>;5j39{t;h:1<7i0(>:8:648yv5>m3:1>vP<7c9>6g<4?k1/?995769~w6?d2909wS=89:?1f?5012.88:488:p797;<0a>61?3-9?;796;|q0=d<72;qU?:94=3`9721<,:><6:o4}r1:=?6=:rT8;;522c8033=#;==1;o5rs2;;>5<5sW9<963=b;141>"4<>07}Y;>901?l53618 6202>o0q~=65;296~X4?;16>o4<739'711=?o1v>7;:181[509279n7=81:&0029?;%173?>63ty85<4?:3y]73c<5;h1?;k4$264>=452z\02a=::k08:i5+3559<6=z{:2m6=4={_15g>;5j39=o6*<468;0>{t;1o1<7:8:948yv5?k3:1>vP<689>6g<4>01/?995869~w6>e2909wS=98:?1f?5102.88:478:p7=g=838pR>88;<0a>6003-9?;766;|q0<<<72;qU?;84=3`9730<,:><65o4}r1;5<5sW93:63=b;1;2>"4<>03o6s|3`c94?4|V:2>707}Y;1>01?l53968 62021o0q~=n8;296~X40:16>o4<829'711=0o1v>o8:181[5?:279n7=72:&002<>82wx?l850;0xZ6>6348i6>6>;%173??63ty8m84?:3y]72g<5;h1?:o4$264><452z\02c=::k08:k5+3559=6=z{:396=4={_150>;5j39=86*<468:0>{t;1=1<7:8:848yv2483:1>vP;319>6g<3;91/?995969~w6cc2909wS=l9:?1f?5d12.88:46a:p7`d=838pR>m7;<0a>6e?3-9?;77m;|q0ad<72;qU?n94=3`97f1<,:><64m4}r1f=?6=:rT8o;522c80g3=#;==15i5rs2g;>5<5sW9h963=b;1`1>"4<>02i6s|3d594?4|V:i?707}Y;j801?l53b08 6202h:0q~=j4;296~X4k816>o4k<:181[5d8279n7=l0:&002li;%173?g33ty8i<4?:3y]7gc<5;h1?ok4$264>d352z\0fa=::k08ni5+3559e3=z{:nm6=4={_1ag>;5j39io6*<468b3>{t;mo1<7:8:`;8yv5ck3:1>vP6g<4j01/?995a`9~w6bf2909wS=m7:?1f?5e?2.88:4nb:p7a?=838pR>l9;<0a>6d13-9?;7ol;|q0`=<72;qU?o;4=3`97g3<,:><68m4}r1g3?6=:rT8n9522c80f1=#;==19i5rs2f5>5<5sW9i?63=b;1a7>"4<>0>i6s|3e794?4|V:h9707}Y;k;01?l53c38 6202?:0q~=k3;296~X4j916>o481v>j=:181[5fn279n7=nf:&002<1:2wx?i?50;0xZ6gb348i6>oj;%173?043ty8j94?:3y]7f`<5;h1?nh4$264>3252z\0g`=::k08oh5+355920=z{:l96=4={_1``>;5j39hh6*<46853>{t;o;1<7:8:7;8yv5bn3:1>vP6g<4kh1/?9956`9~w6cb2909wS=l3:?1f?5d;2.88:49b:p7`0=838pR>l7;<0a>6d?3-9?;78l;|q0`g<72;qU?lj4=3`97db<,:><6;j4}r1g4?6=:rT8mn522c80ef=#;==1:h5rs2d`>5<5sW9mo63=b;1eg>"4<>0=j6s|34:94?4|V:?3707}Y;o<01?l53g48 6202>80q~:>5;296~X39<16>o4;149'711=?<1vqcm50;0xL62?3tdh8<4?:3yK71>7>52zJ00==zfj>86=4={I17<>{ik=>1<73:1>vF<499~jf202909wE=;8:mg1>=838pD>:7;|l`0<<72;qC?964}oa7e?6=:rB8855rnb6a>5<5sA9?46sac5a94?4|@:>37p`l4e83>7}O;=20qcm;e;296~N4<11vbn:i:181M5302weo8>50;0xL62?3tdh9<4?:3yK71>>7>52zJ00==zfj?86=4={I17<>{ik<>1<73:1>vF<499~jf302909wE=;8:mg0>=838pD>:7;|l`1<<72;qC?964}oa6e?6=:rB8855rnb7a>5<5sA9?46sac4a94?4|@:>37p`l5e83>7}O;=20qcm:e;296~N4<11vbn;i:181M5302weo;>50;0xL62?3tdh:<4?:3yK71>7>52zJ00==zfj<86=4={I17<>{ik?>1<7<0;6?uG35:8yke1>3:1>vF<499~jf002909wE=;8:mg3>=838pD>:7;|l`2<<72;qC?964}oa5e?6=:rB8855rnb4a>5<5sA9?46sac7a94?4|@:>37p`l6e83>7}O;=20qcm9e;296~N4<11vbn8i:181M5302weo:>50;0xL62?3tdh;<4?:3yK71>7>52zJ00==zfj=86=4={I17<>{ik>>1<73:1>vF<499~jf102909wE=;8:mg2>=838pD>:7;|l`3<<72;qC?964}oa4e?6=:rB8855rnb5a>5<5sA9?46sac6a94?4|@:>37p`l7e83>7}O;=20qcm8e;296~N4<11vbn9i:181M5302weo5>50;0xL62?3tdh4<4?:3yK71>7>52zJ00==zfj286=4={I17<>{ik1>1<73:1>vF<499~jf>02909wE=;8:mg=>=838pD>:7;|l`<<<72;qC?964}oa;e?6=:rB8855rnb:a>5<5sA9?46sac9a94?4|@:>37p`l8e83>7}O;=20qcm7e;296~N4<11vbll9:182M5302wen=950;3xL62?3tdi<54?:0yK71>51zJ00==zfk:j6=4>{I17<>{ij9h1<7?tH26;?xhe8j0;6:7;|la55<728qC?964}o`25?6=9rB8855rnc31>5<6sA9?46sab0194?7|@:>37p`m1583>4}O;=20qcl>5;295~N4<11vbo?9:182M5302wen<950;3xL62?3tdi=54?:0yK71>51zJ00==zfk;j6=4>{I17<>{ij8h1<7?tH26;?xhe9j0;6:7;|la65<728qC?964}o`15?6=9rB8855rnc01>5<6sA9?46sab3194?7|@:>37p`m2583>4}O;=20qcl=5;295~N4<11vbo<9:182M5302wen?950;3xL62?3tdi>54?:0yK71>51zJ00==zfk8j6=4>{I17<>{ij;h1<7?tH26;?xhe:j0;6:7;|la75<728qC?964}o`05?6=9rB8855rnc11>5<6sA9?46sab2194?7|@:>37p`m3583>4}O;=20qcl<5;295~N4<11vbo=9:182M5302wen>950;3xL62?3tdi?54?:0yK71>51zJ00==zfk9j6=4>{I17<>{ij:h1<7?tH26;?xhe;j0;6:7;|la05<728qC?964}o`75?6=9rB8855rnc61>5<6sA9?46sab5194?7|@:>37p`m4583>4}O;=20qcl;5;295~N4<11vbo:9:182M5302wen9950;3xL62?3tdi854?:0yK71>51zJ00==zfk>j6=4>{I17<>{ij=h1<7?tH26;?xhe:7;|la15<728qC?964}o`65?6=9rB8855rnc71>5<6sA9?46sab4194?7|@:>37p`m5583>4}O;=20qcl:5;295~N4<11vbo;9:182M5302wen8950;3xL62?3tdi954?:0yK71>57>51zJ00==zfk?j6=4>{I17<>{ij:7;|la25<728qC?964}o`55?6=9rB8855rnc41>5<6sA9?46sab7194?7|@:>37p`m6583>4}O;=20qcl95;295~N4<11vbo89:182M5302wen;950;3xL62?3tdi:54?:0yK71>51zJ00==zfk{I17<>{ij?h1<7?tH26;?xhe>j0;6:7;|la35<728qC?964}o`45?6=9rB8855rnc51>5<6sA9?46sab6194?7|@:>37p`m7583>4}O;=20qcl85;295~N4<11vbo99:182M5302wen:950;3xL62?3tdi;54?:0yK71>51zJ00==zfk=j6=4>{I17<>{ij>h1<7?tH26;?xhe?j0;6:7;|la<5<728qC?964}o`;5?6=9rB8855rnc:1>5<6sA9?46sab9194?7|@:>37p`m8583>4}O;=20qcl75;295~N4<11vbo69:182M5302wen5950;3xL62?3tdi454?:0yK71>51zJ00==zfk2j6=4>{I17<>{ij1h1<7?tH26;?xhe0j0;6b290:wE=;8:mf=`=83;pD>:7;|la=5<728qC?964}o`:5?6=9rB8855rnc;1>5<6sA9?46sab8194?7|@:>37p`m9583>4}O;=20qcl65;295~N4<11vbo79:182M5302wen4950;3xL62?3tdi554?:0yK71>51zJ00==zfk3j6=4>{I17<>{ij0h1<7?tH26;?xhe1j0;6l3:1=vF<499~jg?b290:wE=;8:mf<`=83;pD>:7;|lae5<728qC?964}o`b5?6=9rB8855rncc1>5<6sA9?46sab`194?7|@:>37p`ma583>4}O;=20qcln5;295~N4<11vboo9:182M5302wenl950;3xL62?3tdim54?:0yK71>51zJ00==zfkkj6=4>{I17<>{ijhh1<7?tH26;?xheij0;6:7;|laf5<728qC?964}o`a5?6=9rB8855rnc`1>5<6sA9?46sabc194?7|@:>37p`mb583>4}O;=20qclm5;295~N4<11vbol9:182M5302weno950;3xL62?3tdin54?:0yK71>51zJ00==zfkhj6=4>{I17<>{ijkh1<7?tH26;?xhejj0;6:7;|lag5<728qC?964}o``5?6=9rB8855rnca1>5<6sA9?46sabb194?7|@:>37p`mc583>4}O;=20qcll5;295~N4<11vbom9:182M5302wenn950;3xL62?3tdio54?:0yK71>51zJ00==zfkij6=4>{I17<>{ijjh1<7?tH26;?xhekj0;6:7;|la`5<728qC?964}o`g5?6=9rB8855rncf1>5<6sA9?46sabe194?7|@:>37p`md583>4}O;=20qclk5;295~N4<11vboj9:182M5302weni950;3xL62?3tdih54?:0yK71>51zJ00==zfknj6=4>{I17<>{ijmh1<7?tH26;?xhelj0;6:7;|laa5<728qC?964}o`f5?6=9rB8855rncg1>5<6sA9?46sabd194?7|@:>37p`me583>4}O;=20qclj5;295~N4<11vbok9:182M5302wenh950;3xL62?3tdii54?:0yK71>51zJ00==zfkoj6=4>{I17<>{ijlh1<7?tH26;?xhemj0;6:7;|lab5<728qC?964}o`e5?6=9rB8855rncd1>5<6sA9?46sabg194?7|@:>37p`mf583>4}O;=20qcli5;295~N4<11vboh9:182M5302wenk950;3xL62?3tdij54?:0yK71>51zJ00==zfklj6=4>{I17<>{ijoh1<7?tH26;?xhenj0;6:7;|l`45<728qC?964}oa35?6=9rB8855rnb21>5<6sA9?46sac1194?7|@:>37p`l0583>4}O;=20qcm?5;295~N4<11vbn>9:182M5302weo=950;3xL62?3tdh<54?:0yK71>51zJ00==zfj:j6=4>{I17<>{ik9h1<7?tH26;?xhd8j0;6:7;|l`55<728qC?964}oa25?6=9rB8855rnb31>5<6sA9?46sac0194?7|@:>37p`l1583>4}O;=20qcm>5;295~N4<11vbn?9:182M5302weo<950;3xL62?3tdh=54?:0yK71>51zJ00==zfj;j6=4>{I17<>{ik8h1<7?tH26;?xhd9j0;6:7;|l`65<728qC?964}oa15?6=9rB8855rnb01>5<6sA9?46sac3194?7|@:>37p`l2583>4}O;=20qcm=5;295~N4<11vbn<9:182M5302weo?950;3xL62?3tdh>54?:0yK71>51zJ00==zfj8j6=4>{I17<>{ik;h1<7?tH26;?xhd:j0;6:7;|l`75<728qC?964}oa05?6=9rB8855rnb11>5<6sA9?46sac2194?7|@:>37p`l3583>4}O;=20qcm<5;295~N4<11vbn=9:182M5302weo>950;3xL62?3tdh?54?:0yK71>51zJ00==zfj9j6=4>{I17<>{ik:h1<7?tH26;?xhd;j0;6111 ( + .I0(\BU2/U0/grf.rf/gl0.rd/rpntr/count [0]), + .I1(\BU2/U0/grf.rf/gl0.rd/rpntr/count [1]), + .I2(\BU2/U0/grf.rf/gl0.rd/rpntr/count [2]), + .LO(\BU2/U0/grf.rf/gl0.rd/rpntr/N11 ) + ); + LUT3_L #( + .INIT ( 8'h7F )) + \BU2/U0/grf.rf/gl0.wr/wpntr/Mcount_count_xor<3>111 ( + .I0(\BU2/U0/grf.rf/gl0.wr/wpntr/count [0]), + .I1(\BU2/U0/grf.rf/gl0.wr/wpntr/count [1]), + .I2(\BU2/U0/grf.rf/gl0.wr/wpntr/count [2]), + .LO(\BU2/U0/grf.rf/gl0.wr/wpntr/N11 ) + ); + LUT2_L #( + .INIT ( 4'h6 )) + \BU2/U0/grf.rf/gcx.clkx/rd_pntr_bin_xor0003_SW0 ( + .I0(\BU2/U0/grf.rf/gcx.clkx/rd_pntr_gc_asreg_d1 [3]), + .I1(\BU2/U0/grf.rf/gcx.clkx/rd_pntr_gc_asreg_d1 [2]), + .LO(\BU2/N16 ) + ); + LUT2_L #( + .INIT ( 4'h6 )) + \BU2/U0/grf.rf/gcx.clkx/wr_pntr_bin_xor0003_SW0 ( + .I0(\BU2/U0/grf.rf/gcx.clkx/wr_pntr_gc_asreg_d1 [3]), + .I1(\BU2/U0/grf.rf/gcx.clkx/wr_pntr_gc_asreg_d1 [2]), + .LO(\BU2/N14 ) + ); + INV \BU2/U0/grf.rf/gl0.rd/rpntr/Mcount_count_xor<0>11_INV_0 ( + .I(\BU2/U0/grf.rf/gl0.rd/rpntr/count [0]), + .O(\BU2/U0/grf.rf/gl0.rd/rpntr/Mcount_count ) + ); + INV \BU2/U0/grf.rf/gl0.wr/wpntr/Mcount_count_xor<0>11_INV_0 ( + .I(\BU2/U0/grf.rf/gl0.wr/wpntr/count [0]), + .O(\BU2/U0/grf.rf/gl0.wr/wpntr/Mcount_count ) + ); + LUT2 #( + .INIT ( 4'h2 )) + \BU2/U0/grf.rf/gl0.wr/ram_wr_en_i1_1 ( + .I0(wr_en), + .I1(\BU2/U0/grf.rf/gl0.wr/gwas.wsts/ram_full_fb_i_370 ), + .O(\BU2/U0/grf.rf/gl0.wr/ram_wr_en_i1_197 ) + ); + LUT4 #( + .INIT ( 16'h2333 )) + \BU2/U0/grf.rf/gl0.rd/gr1.rfwft/Mmux_RAM_RD_EN_FWFT21_1 ( + .I0(rd_en), + .I1(\BU2/U0/grf.rf/gl0.rd/gras.rsts/ram_empty_fb_i_85 ), + .I2(\BU2/U0/grf.rf/gl0.rd/gr1.rfwft/curr_fwft_state [1]), + .I3(\BU2/U0/grf.rf/gl0.rd/gr1.rfwft/curr_fwft_state [0]), + .O(\BU2/U0/grf.rf/gl0.rd/gr1.rfwft/Mmux_RAM_RD_EN_FWFT21_160 ) + ); + LUT4 #( + .INIT ( 16'h6AAA )) + \BU2/U0/grf.rf/gl0.rd/rpntr/Mcount_count_xor<3>12 ( + .I0(\BU2/U0/grf.rf/gl0.rd/rpntr/count [3]), + .I1(\BU2/U0/grf.rf/gl0.rd/rpntr/count [0]), + .I2(\BU2/U0/grf.rf/gl0.rd/rpntr/count [1]), + .I3(\BU2/U0/grf.rf/gl0.rd/rpntr/count [2]), + .O(\BU2/U0/grf.rf/gl0.rd/rpntr/Mcount_count3 ) + ); + LUT4 #( + .INIT ( 16'h6AAA )) + \BU2/U0/grf.rf/gl0.wr/wpntr/Mcount_count_xor<3>12 ( + .I0(\BU2/U0/grf.rf/gl0.wr/wpntr/count [3]), + .I1(\BU2/U0/grf.rf/gl0.wr/wpntr/count [0]), + .I2(\BU2/U0/grf.rf/gl0.wr/wpntr/count [1]), + .I3(\BU2/U0/grf.rf/gl0.wr/wpntr/count [2]), + .O(\BU2/U0/grf.rf/gl0.wr/wpntr/Mcount_count3 ) + ); + LUT3 #( + .INIT ( 8'h08 )) + \BU2/U0/grf.rf/mem/gdm.dm/write_ctrl1 ( + .I0(wr_en), + .I1(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [4]), + .I2(\BU2/U0/grf.rf/gl0.wr/gwas.wsts/ram_full_fb_i_370 ), + .O(\BU2/U0/grf.rf/mem/gdm.dm/write_ctrl1_296 ) + ); + LUT3 #( + .INIT ( 8'h10 )) + \BU2/U0/grf.rf/mem/gdm.dm/write_ctrl ( + .I0(\BU2/U0/grf.rf/gl0.wr/gwas.wsts/ram_full_fb_i_370 ), + .I1(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [4]), + .I2(wr_en), + .O(\BU2/U0/grf.rf/mem/gdm.dm/write_ctrl_294 ) + ); + LUT2 #( + .INIT ( 4'h9 )) + \BU2/U0/grf.rf/gl0.wr/gwas.gpf.wrpf/Madd_diff_pntr_pad_add0000_lut<5> ( + .I0(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d2 [4]), + .I1(\BU2/U0/grf.rf/gcx.clkx/rd_pntr_bin [4]), + .O(\BU2/U0/grf.rf/gl0.wr/gwas.gpf.wrpf/Madd_diff_pntr_pad_add0000_lut [5]) + ); + LUT4 #( + .INIT ( 16'h9000 )) + \BU2/U0/grf.rf/gl0.wr/gwas.wsts/c2/dout_i78 ( + .I0(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d1 [0]), + .I1(\BU2/U0/grf.rf/gcx.clkx/rd_pntr_bin [0]), + .I2(\BU2/U0/grf.rf/gl0.wr/gwas.wsts/c2/dout_i62_392 ), + .I3(\BU2/U0/grf.rf/gl0.wr/gwas.wsts/c2/dout_i26_387 ), + .O(\BU2/U0/grf.rf/gl0.wr/gwas.wsts/comp2 ) + ); + LUT4 #( + .INIT ( 16'h9000 )) + \BU2/U0/grf.rf/gl0.rd/gras.rsts/ram_empty_fb_i_or0000158 ( + .I0(\BU2/U0/grf.rf/gcx.clkx/wr_pntr_bin [0]), + .I1(\BU2/U0/grf.rf/gl0.rd/rpntr/count [0]), + .I2(\BU2/U0/grf.rf/gl0.rd/gras.rsts/ram_empty_fb_i_or0000156_391 ), + .I3(\BU2/U0/grf.rf/gl0.rd/rpntr/count_not0001 ), + .O(\BU2/U0/grf.rf/gl0.rd/gras.rsts/ram_empty_fb_i_or0000158_380 ) + ); + LUT2 #( + .INIT ( 4'h9 )) + \BU2/U0/grf.rf/gl0.wr/gwas.gpf.wrpf/Madd_diff_pntr_pad_add0000_lut<4> ( + .I0(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d2 [3]), + .I1(\BU2/U0/grf.rf/gcx.clkx/rd_pntr_bin [3]), + .O(\BU2/U0/grf.rf/gl0.wr/gwas.gpf.wrpf/Madd_diff_pntr_pad_add0000_lut [4]) + ); + LUT2 #( + .INIT ( 4'h9 )) + \BU2/U0/grf.rf/gl0.wr/gwas.gpf.wrpf/Madd_diff_pntr_pad_add0000_lut<3> ( + .I0(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d2 [2]), + .I1(\BU2/U0/grf.rf/gcx.clkx/rd_pntr_bin [2]), + .O(\BU2/U0/grf.rf/gl0.wr/gwas.gpf.wrpf/Madd_diff_pntr_pad_add0000_lut [3]) + ); + LUT2 #( + .INIT ( 4'h9 )) + \BU2/U0/grf.rf/gl0.wr/gwas.gpf.wrpf/Madd_diff_pntr_pad_add0000_lut<2> ( + .I0(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d2 [1]), + .I1(\BU2/U0/grf.rf/gcx.clkx/rd_pntr_bin [1]), + .O(\BU2/U0/grf.rf/gl0.wr/gwas.gpf.wrpf/Madd_diff_pntr_pad_add0000_lut [2]) + ); + LUT2 #( + .INIT ( 4'h9 )) + \BU2/U0/grf.rf/gl0.wr/gwas.gpf.wrpf/Madd_diff_pntr_pad_add0000_lut<1> ( + .I0(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d2 [0]), + .I1(\BU2/U0/grf.rf/gcx.clkx/rd_pntr_bin [0]), + .O(\BU2/U0/grf.rf/gl0.wr/gwas.gpf.wrpf/Madd_diff_pntr_pad_add0000_lut [1]) + ); + LUT4 #( + .INIT ( 16'h5450 )) + \BU2/U0/grf.rf/gl0.wr/gwas.wsts/ram_full_i_mux0000105 ( + .I0(\BU2/U0/grf.rf/rstblk/RST_FULL_GEN_87 ), + .I1(\BU2/U0/grf.rf/gl0.wr/wpntr/count_not0001 ), + .I2(\BU2/U0/grf.rf/gl0.wr/gwas.wsts/ram_full_i_mux000079_390 ), + .I3(\BU2/U0/grf.rf/gl0.wr/gwas.wsts/comp2 ), + .O(\BU2/U0/grf.rf/gl0.wr/gwas.wsts/ram_full_i_mux0000 ) + ); + LUT4 #( + .INIT ( 16'h9009 )) + \BU2/U0/grf.rf/gl0.wr/gwas.wsts/ram_full_i_mux000063 ( + .I0(\BU2/U0/grf.rf/gcx.clkx/rd_pntr_bin [3]), + .I1(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d2 [3]), + .I2(\BU2/U0/grf.rf/gcx.clkx/rd_pntr_bin [2]), + .I3(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d2 [2]), + .O(\BU2/U0/grf.rf/gl0.wr/gwas.wsts/ram_full_i_mux000063_389 ) + ); + LUT4 #( + .INIT ( 16'h9009 )) + \BU2/U0/grf.rf/gl0.wr/gwas.wsts/ram_full_i_mux000027 ( + .I0(\BU2/U0/grf.rf/gcx.clkx/rd_pntr_bin [4]), + .I1(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d2 [4]), + .I2(\BU2/U0/grf.rf/gcx.clkx/rd_pntr_bin [1]), + .I3(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d2 [1]), + .O(\BU2/U0/grf.rf/gl0.wr/gwas.wsts/ram_full_i_mux000027_388 ) + ); + LUT4 #( + .INIT ( 16'h8421 )) + \BU2/U0/grf.rf/gl0.wr/gwas.wsts/c2/dout_i26 ( + .I0(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d1 [1]), + .I1(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d1 [4]), + .I2(\BU2/U0/grf.rf/gcx.clkx/rd_pntr_bin [1]), + .I3(\BU2/U0/grf.rf/gcx.clkx/rd_pntr_bin [4]), + .O(\BU2/U0/grf.rf/gl0.wr/gwas.wsts/c2/dout_i26_387 ) + ); + LUT4 #( + .INIT ( 16'h5450 )) + \BU2/U0/grf.rf/gl0.wr/gwas.wsts/ram_almost_full_i_mux0000107 ( + .I0(\BU2/U0/grf.rf/rstblk/RST_FULL_GEN_87 ), + .I1(\BU2/U0/grf.rf/gl0.wr/gwas.wsts/ram_almost_full_i_mux000026_383 ), + .I2(\BU2/U0/grf.rf/gl0.wr/gwas.wsts/comp2 ), + .I3(\BU2/U0/grf.rf/gl0.wr/gwas.wsts/ram_almost_full_i_mux000069_386 ), + .O(\BU2/U0/grf.rf/gl0.wr/gwas.wsts/ram_almost_full_i_mux0000 ) + ); + LUT4 #( + .INIT ( 16'h9009 )) + \BU2/U0/grf.rf/gl0.wr/gwas.wsts/ram_almost_full_i_mux000067 ( + .I0(\BU2/U0/grf.rf/gcx.clkx/rd_pntr_bin [2]), + .I1(\BU2/U0/grf.rf/gl0.wr/wpntr/count [2]), + .I2(\BU2/U0/grf.rf/gcx.clkx/rd_pntr_bin [1]), + .I3(\BU2/U0/grf.rf/gl0.wr/wpntr/count [1]), + .O(\BU2/U0/grf.rf/gl0.wr/gwas.wsts/ram_almost_full_i_mux000067_384 ) + ); + LUT4 #( + .INIT ( 16'h9009 )) + \BU2/U0/grf.rf/gl0.wr/gwas.wsts/ram_almost_full_i_mux000026 ( + .I0(\BU2/U0/grf.rf/gcx.clkx/rd_pntr_bin [4]), + .I1(\BU2/U0/grf.rf/gl0.wr/wpntr/count [4]), + .I2(\BU2/U0/grf.rf/gcx.clkx/rd_pntr_bin [3]), + .I3(\BU2/U0/grf.rf/gl0.wr/wpntr/count [3]), + .O(\BU2/U0/grf.rf/gl0.wr/gwas.wsts/ram_almost_full_i_mux000026_383 ) + ); + LUT2 #( + .INIT ( 4'h2 )) + \BU2/U0/grf.rf/gl0.wr/ram_wr_en_i1 ( + .I0(wr_en), + .I1(\BU2/U0/grf.rf/gl0.wr/gwas.wsts/ram_full_fb_i_370 ), + .O(\BU2/U0/grf.rf/gl0.wr/wpntr/count_not0001 ) + ); + LUT4 #( + .INIT ( 16'hECA0 )) + \BU2/U0/grf.rf/gl0.rd/gras.rsts/ram_empty_fb_i_or0000183 ( + .I0(\BU2/U0/grf.rf/gl0.rd/gras.rsts/ram_empty_fb_i_or0000115_379 ), + .I1(\BU2/U0/grf.rf/gl0.rd/gras.rsts/ram_empty_fb_i_or000026_377 ), + .I2(\BU2/U0/grf.rf/gl0.rd/gras.rsts/ram_empty_fb_i_or0000158_380 ), + .I3(\BU2/U0/grf.rf/gl0.rd/gras.rsts/ram_empty_fb_i_or000063_381 ), + .O(\BU2/U0/grf.rf/gl0.rd/gras.rsts/ram_empty_fb_i_or0000 ) + ); + LUT4 #( + .INIT ( 16'h9009 )) + \BU2/U0/grf.rf/gl0.rd/gras.rsts/ram_empty_fb_i_or0000115 ( + .I0(\BU2/U0/grf.rf/gl0.rd/rpntr/count [4]), + .I1(\BU2/U0/grf.rf/gcx.clkx/wr_pntr_bin [4]), + .I2(\BU2/U0/grf.rf/gl0.rd/rpntr/count [3]), + .I3(\BU2/U0/grf.rf/gcx.clkx/wr_pntr_bin [3]), + .O(\BU2/U0/grf.rf/gl0.rd/gras.rsts/ram_empty_fb_i_or0000115_379 ) + ); + LUT4 #( + .INIT ( 16'h8421 )) + \BU2/U0/grf.rf/gl0.rd/gras.rsts/ram_empty_fb_i_or000062 ( + .I0(\BU2/U0/grf.rf/gcx.clkx/wr_pntr_bin [2]), + .I1(\BU2/U0/grf.rf/gcx.clkx/wr_pntr_bin [3]), + .I2(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [2]), + .I3(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [3]), + .O(\BU2/U0/grf.rf/gl0.rd/gras.rsts/ram_empty_fb_i_or000062_378 ) + ); + LUT4 #( + .INIT ( 16'h8241 )) + \BU2/U0/grf.rf/gl0.rd/gras.rsts/ram_empty_fb_i_or000026 ( + .I0(\BU2/U0/grf.rf/gcx.clkx/wr_pntr_bin [1]), + .I1(\BU2/U0/grf.rf/gcx.clkx/wr_pntr_bin [4]), + .I2(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [4]), + .I3(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [1]), + .O(\BU2/U0/grf.rf/gl0.rd/gras.rsts/ram_empty_fb_i_or000026_377 ) + ); + LUT4 #( + .INIT ( 16'h2333 )) + \BU2/U0/grf.rf/gl0.rd/gr1.rfwft/Mmux_RAM_RD_EN_FWFT21 ( + .I0(rd_en), + .I1(\BU2/U0/grf.rf/gl0.rd/gras.rsts/ram_empty_fb_i_85 ), + .I2(\BU2/U0/grf.rf/gl0.rd/gr1.rfwft/curr_fwft_state [1]), + .I3(\BU2/U0/grf.rf/gl0.rd/gr1.rfwft/curr_fwft_state [0]), + .O(\BU2/U0/grf.rf/gl0.rd/rpntr/count_not0001 ) + ); + LUT3 #( + .INIT ( 8'hA6 )) + \BU2/U0/grf.rf/gl0.rd/rpntr/Mcount_count_xor<4>11 ( + .I0(\BU2/U0/grf.rf/gl0.rd/rpntr/count [4]), + .I1(\BU2/U0/grf.rf/gl0.rd/rpntr/count [3]), + .I2(\BU2/U0/grf.rf/gl0.rd/rpntr/N11 ), + .O(\BU2/U0/grf.rf/gl0.rd/rpntr/Mcount_count4 ) + ); + LUT3 #( + .INIT ( 8'hA6 )) + \BU2/U0/grf.rf/gl0.wr/wpntr/Mcount_count_xor<4>11 ( + .I0(\BU2/U0/grf.rf/gl0.wr/wpntr/count [4]), + .I1(\BU2/U0/grf.rf/gl0.wr/wpntr/count [3]), + .I2(\BU2/U0/grf.rf/gl0.wr/wpntr/N11 ), + .O(\BU2/U0/grf.rf/gl0.wr/wpntr/Mcount_count4 ) + ); + LUT3 #( + .INIT ( 8'hE4 )) + \BU2/U0/grf.rf/mem/gdm.dm/inst_LPM_MUX11 ( + .I0(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [4]), + .I1(\BU2/U0/grf.rf/mem/gdm.dm/N5 ), + .I2(\BU2/U0/grf.rf/mem/gdm.dm/N7 ), + .O(\BU2/U0/grf.rf/mem/gdm.dm/_varindex0000 [0]) + ); + LUT3 #( + .INIT ( 8'hE4 )) + \BU2/U0/grf.rf/mem/gdm.dm/inst_LPM_MUX1011 ( + .I0(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [4]), + .I1(\BU2/U0/grf.rf/mem/gdm.dm/N45 ), + .I2(\BU2/U0/grf.rf/mem/gdm.dm/N47 ), + .O(\BU2/U0/grf.rf/mem/gdm.dm/_varindex0000 [10]) + ); + LUT3 #( + .INIT ( 8'hE4 )) + \BU2/U0/grf.rf/mem/gdm.dm/inst_LPM_MUX1111 ( + .I0(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [4]), + .I1(\BU2/U0/grf.rf/mem/gdm.dm/N9 ), + .I2(\BU2/U0/grf.rf/mem/gdm.dm/N11 ), + .O(\BU2/U0/grf.rf/mem/gdm.dm/_varindex0000 [1]) + ); + LUT3 #( + .INIT ( 8'hE4 )) + \BU2/U0/grf.rf/mem/gdm.dm/inst_LPM_MUX11111 ( + .I0(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [4]), + .I1(\BU2/U0/grf.rf/mem/gdm.dm/N49 ), + .I2(\BU2/U0/grf.rf/mem/gdm.dm/N51 ), + .O(\BU2/U0/grf.rf/mem/gdm.dm/_varindex0000 [11]) + ); + LUT3 #( + .INIT ( 8'hE4 )) + \BU2/U0/grf.rf/mem/gdm.dm/inst_LPM_MUX1211 ( + .I0(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [4]), + .I1(\BU2/U0/grf.rf/mem/gdm.dm/N53 ), + .I2(\BU2/U0/grf.rf/mem/gdm.dm/N55 ), + .O(\BU2/U0/grf.rf/mem/gdm.dm/_varindex0000 [12]) + ); + LUT3 #( + .INIT ( 8'hE4 )) + \BU2/U0/grf.rf/mem/gdm.dm/inst_LPM_MUX1311 ( + .I0(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [4]), + .I1(\BU2/U0/grf.rf/mem/gdm.dm/N57 ), + .I2(\BU2/U0/grf.rf/mem/gdm.dm/N59 ), + .O(\BU2/U0/grf.rf/mem/gdm.dm/_varindex0000 [13]) + ); + LUT3 #( + .INIT ( 8'hE4 )) + \BU2/U0/grf.rf/mem/gdm.dm/inst_LPM_MUX1411 ( + .I0(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [4]), + .I1(\BU2/U0/grf.rf/mem/gdm.dm/N61 ), + .I2(\BU2/U0/grf.rf/mem/gdm.dm/N63 ), + .O(\BU2/U0/grf.rf/mem/gdm.dm/_varindex0000 [14]) + ); + LUT3 #( + .INIT ( 8'hE4 )) + \BU2/U0/grf.rf/mem/gdm.dm/inst_LPM_MUX1511 ( + .I0(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [4]), + .I1(\BU2/U0/grf.rf/mem/gdm.dm/N65 ), + .I2(\BU2/U0/grf.rf/mem/gdm.dm/N67 ), + .O(\BU2/U0/grf.rf/mem/gdm.dm/_varindex0000 [15]) + ); + LUT3 #( + .INIT ( 8'hE4 )) + \BU2/U0/grf.rf/mem/gdm.dm/inst_LPM_MUX1611 ( + .I0(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [4]), + .I1(\BU2/U0/grf.rf/mem/gdm.dm/N69 ), + .I2(\BU2/U0/grf.rf/mem/gdm.dm/N71 ), + .O(\BU2/U0/grf.rf/mem/gdm.dm/_varindex0000 [16]) + ); + LUT3 #( + .INIT ( 8'hE4 )) + \BU2/U0/grf.rf/mem/gdm.dm/inst_LPM_MUX1711 ( + .I0(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [4]), + .I1(\BU2/U0/grf.rf/mem/gdm.dm/N73 ), + .I2(\BU2/U0/grf.rf/mem/gdm.dm/N75 ), + .O(\BU2/U0/grf.rf/mem/gdm.dm/_varindex0000 [17]) + ); + LUT3 #( + .INIT ( 8'hE4 )) + \BU2/U0/grf.rf/mem/gdm.dm/inst_LPM_MUX1811 ( + .I0(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [4]), + .I1(\BU2/U0/grf.rf/mem/gdm.dm/N77 ), + .I2(\BU2/U0/grf.rf/mem/gdm.dm/N79 ), + .O(\BU2/U0/grf.rf/mem/gdm.dm/_varindex0000 [18]) + ); + LUT3 #( + .INIT ( 8'hE4 )) + \BU2/U0/grf.rf/mem/gdm.dm/inst_LPM_MUX1911 ( + .I0(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [4]), + .I1(\BU2/U0/grf.rf/mem/gdm.dm/N81 ), + .I2(\BU2/U0/grf.rf/mem/gdm.dm/N83 ), + .O(\BU2/U0/grf.rf/mem/gdm.dm/_varindex0000 [19]) + ); + LUT3 #( + .INIT ( 8'hE4 )) + \BU2/U0/grf.rf/mem/gdm.dm/inst_LPM_MUX2011 ( + .I0(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [4]), + .I1(\BU2/U0/grf.rf/mem/gdm.dm/N85 ), + .I2(\BU2/U0/grf.rf/mem/gdm.dm/N87 ), + .O(\BU2/U0/grf.rf/mem/gdm.dm/_varindex0000 [20]) + ); + LUT3 #( + .INIT ( 8'hE4 )) + \BU2/U0/grf.rf/mem/gdm.dm/inst_LPM_MUX2111 ( + .I0(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [4]), + .I1(\BU2/U0/grf.rf/mem/gdm.dm/N13 ), + .I2(\BU2/U0/grf.rf/mem/gdm.dm/N15 ), + .O(\BU2/U0/grf.rf/mem/gdm.dm/_varindex0000 [2]) + ); + LUT3 #( + .INIT ( 8'hE4 )) + \BU2/U0/grf.rf/mem/gdm.dm/inst_LPM_MUX21111 ( + .I0(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [4]), + .I1(\BU2/U0/grf.rf/mem/gdm.dm/N89 ), + .I2(\BU2/U0/grf.rf/mem/gdm.dm/N91 ), + .O(\BU2/U0/grf.rf/mem/gdm.dm/_varindex0000 [21]) + ); + LUT3 #( + .INIT ( 8'hE4 )) + \BU2/U0/grf.rf/mem/gdm.dm/inst_LPM_MUX2211 ( + .I0(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [4]), + .I1(\BU2/U0/grf.rf/mem/gdm.dm/N93 ), + .I2(\BU2/U0/grf.rf/mem/gdm.dm/N95 ), + .O(\BU2/U0/grf.rf/mem/gdm.dm/_varindex0000 [22]) + ); + LUT3 #( + .INIT ( 8'hE4 )) + \BU2/U0/grf.rf/mem/gdm.dm/inst_LPM_MUX2311 ( + .I0(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [4]), + .I1(\BU2/U0/grf.rf/mem/gdm.dm/N97 ), + .I2(\BU2/U0/grf.rf/mem/gdm.dm/N99 ), + .O(\BU2/U0/grf.rf/mem/gdm.dm/_varindex0000 [23]) + ); + LUT3 #( + .INIT ( 8'hE4 )) + \BU2/U0/grf.rf/mem/gdm.dm/inst_LPM_MUX2411 ( + .I0(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [4]), + .I1(\BU2/U0/grf.rf/mem/gdm.dm/N101 ), + .I2(\BU2/U0/grf.rf/mem/gdm.dm/N103 ), + .O(\BU2/U0/grf.rf/mem/gdm.dm/_varindex0000 [24]) + ); + LUT3 #( + .INIT ( 8'hE4 )) + \BU2/U0/grf.rf/mem/gdm.dm/inst_LPM_MUX2511 ( + .I0(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [4]), + .I1(\BU2/U0/grf.rf/mem/gdm.dm/N105 ), + .I2(\BU2/U0/grf.rf/mem/gdm.dm/N107 ), + .O(\BU2/U0/grf.rf/mem/gdm.dm/_varindex0000 [25]) + ); + LUT3 #( + .INIT ( 8'hE4 )) + \BU2/U0/grf.rf/mem/gdm.dm/inst_LPM_MUX2611 ( + .I0(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [4]), + .I1(\BU2/U0/grf.rf/mem/gdm.dm/N109 ), + .I2(\BU2/U0/grf.rf/mem/gdm.dm/N111 ), + .O(\BU2/U0/grf.rf/mem/gdm.dm/_varindex0000 [26]) + ); + LUT3 #( + .INIT ( 8'hE4 )) + \BU2/U0/grf.rf/mem/gdm.dm/inst_LPM_MUX2711 ( + .I0(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [4]), + .I1(\BU2/U0/grf.rf/mem/gdm.dm/N113 ), + .I2(\BU2/U0/grf.rf/mem/gdm.dm/N115 ), + .O(\BU2/U0/grf.rf/mem/gdm.dm/_varindex0000 [27]) + ); + LUT3 #( + .INIT ( 8'hE4 )) + \BU2/U0/grf.rf/mem/gdm.dm/inst_LPM_MUX2811 ( + .I0(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [4]), + .I1(\BU2/U0/grf.rf/mem/gdm.dm/N117 ), + .I2(\BU2/U0/grf.rf/mem/gdm.dm/N119 ), + .O(\BU2/U0/grf.rf/mem/gdm.dm/_varindex0000 [28]) + ); + LUT3 #( + .INIT ( 8'hE4 )) + \BU2/U0/grf.rf/mem/gdm.dm/inst_LPM_MUX2911 ( + .I0(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [4]), + .I1(\BU2/U0/grf.rf/mem/gdm.dm/N121 ), + .I2(\BU2/U0/grf.rf/mem/gdm.dm/N123 ), + .O(\BU2/U0/grf.rf/mem/gdm.dm/_varindex0000 [29]) + ); + LUT3 #( + .INIT ( 8'hE4 )) + \BU2/U0/grf.rf/mem/gdm.dm/inst_LPM_MUX3011 ( + .I0(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [4]), + .I1(\BU2/U0/grf.rf/mem/gdm.dm/N125 ), + .I2(\BU2/U0/grf.rf/mem/gdm.dm/N127 ), + .O(\BU2/U0/grf.rf/mem/gdm.dm/_varindex0000 [30]) + ); + LUT3 #( + .INIT ( 8'hE4 )) + \BU2/U0/grf.rf/mem/gdm.dm/inst_LPM_MUX3111 ( + .I0(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [4]), + .I1(\BU2/U0/grf.rf/mem/gdm.dm/N17 ), + .I2(\BU2/U0/grf.rf/mem/gdm.dm/N19 ), + .O(\BU2/U0/grf.rf/mem/gdm.dm/_varindex0000 [3]) + ); + LUT3 #( + .INIT ( 8'hE4 )) + \BU2/U0/grf.rf/mem/gdm.dm/inst_LPM_MUX31111 ( + .I0(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [4]), + .I1(\BU2/U0/grf.rf/mem/gdm.dm/N129 ), + .I2(\BU2/U0/grf.rf/mem/gdm.dm/N131 ), + .O(\BU2/U0/grf.rf/mem/gdm.dm/_varindex0000 [31]) + ); + LUT3 #( + .INIT ( 8'hE4 )) + \BU2/U0/grf.rf/mem/gdm.dm/inst_LPM_MUX3211 ( + .I0(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [4]), + .I1(\BU2/U0/grf.rf/mem/gdm.dm/N133 ), + .I2(\BU2/U0/grf.rf/mem/gdm.dm/N135 ), + .O(\BU2/U0/grf.rf/mem/gdm.dm/_varindex0000 [32]) + ); + LUT3 #( + .INIT ( 8'hE4 )) + \BU2/U0/grf.rf/mem/gdm.dm/inst_LPM_MUX3311 ( + .I0(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [4]), + .I1(\BU2/U0/grf.rf/mem/gdm.dm/N137 ), + .I2(\BU2/U0/grf.rf/mem/gdm.dm/N139 ), + .O(\BU2/U0/grf.rf/mem/gdm.dm/_varindex0000 [33]) + ); + LUT3 #( + .INIT ( 8'hE4 )) + \BU2/U0/grf.rf/mem/gdm.dm/inst_LPM_MUX3411 ( + .I0(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [4]), + .I1(\BU2/U0/grf.rf/mem/gdm.dm/N141 ), + .I2(\BU2/U0/grf.rf/mem/gdm.dm/N143 ), + .O(\BU2/U0/grf.rf/mem/gdm.dm/_varindex0000 [34]) + ); + LUT3 #( + .INIT ( 8'hE4 )) + \BU2/U0/grf.rf/mem/gdm.dm/inst_LPM_MUX3511 ( + .I0(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [4]), + .I1(\BU2/U0/grf.rf/mem/gdm.dm/N145 ), + .I2(\BU2/U0/grf.rf/mem/gdm.dm/N147 ), + .O(\BU2/U0/grf.rf/mem/gdm.dm/_varindex0000 [35]) + ); + LUT3 #( + .INIT ( 8'hE4 )) + \BU2/U0/grf.rf/mem/gdm.dm/inst_LPM_MUX411 ( + .I0(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [4]), + .I1(\BU2/U0/grf.rf/mem/gdm.dm/N21 ), + .I2(\BU2/U0/grf.rf/mem/gdm.dm/N23 ), + .O(\BU2/U0/grf.rf/mem/gdm.dm/_varindex0000 [4]) + ); + LUT3 #( + .INIT ( 8'hE4 )) + \BU2/U0/grf.rf/mem/gdm.dm/inst_LPM_MUX511 ( + .I0(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [4]), + .I1(\BU2/U0/grf.rf/mem/gdm.dm/N25 ), + .I2(\BU2/U0/grf.rf/mem/gdm.dm/N27 ), + .O(\BU2/U0/grf.rf/mem/gdm.dm/_varindex0000 [5]) + ); + LUT3 #( + .INIT ( 8'hE4 )) + \BU2/U0/grf.rf/mem/gdm.dm/inst_LPM_MUX611 ( + .I0(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [4]), + .I1(\BU2/U0/grf.rf/mem/gdm.dm/N29 ), + .I2(\BU2/U0/grf.rf/mem/gdm.dm/N31 ), + .O(\BU2/U0/grf.rf/mem/gdm.dm/_varindex0000 [6]) + ); + LUT3 #( + .INIT ( 8'hE4 )) + \BU2/U0/grf.rf/mem/gdm.dm/inst_LPM_MUX711 ( + .I0(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [4]), + .I1(\BU2/U0/grf.rf/mem/gdm.dm/N33 ), + .I2(\BU2/U0/grf.rf/mem/gdm.dm/N35 ), + .O(\BU2/U0/grf.rf/mem/gdm.dm/_varindex0000 [7]) + ); + LUT3 #( + .INIT ( 8'hE4 )) + \BU2/U0/grf.rf/mem/gdm.dm/inst_LPM_MUX811 ( + .I0(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [4]), + .I1(\BU2/U0/grf.rf/mem/gdm.dm/N37 ), + .I2(\BU2/U0/grf.rf/mem/gdm.dm/N39 ), + .O(\BU2/U0/grf.rf/mem/gdm.dm/_varindex0000 [8]) + ); + LUT3 #( + .INIT ( 8'hE4 )) + \BU2/U0/grf.rf/mem/gdm.dm/inst_LPM_MUX911 ( + .I0(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [4]), + .I1(\BU2/U0/grf.rf/mem/gdm.dm/N41 ), + .I2(\BU2/U0/grf.rf/mem/gdm.dm/N43 ), + .O(\BU2/U0/grf.rf/mem/gdm.dm/_varindex0000 [9]) + ); + LUT4 #( + .INIT ( 16'h6996 )) + \BU2/U0/grf.rf/gcx.clkx/rd_pntr_bin_xor0003 ( + .I0(\BU2/U0/grf.rf/gcx.clkx/rd_pntr_gc_asreg_d1 [1]), + .I1(\BU2/U0/grf.rf/gcx.clkx/rd_pntr_gc_asreg_d1 [0]), + .I2(\BU2/U0/grf.rf/gcx.clkx/rd_pntr_gc_asreg_d1 [4]), + .I3(\BU2/N16 ), + .O(\BU2/U0/grf.rf/gcx.clkx/rd_pntr_bin_xor0003_110 ) + ); + LUT4 #( + .INIT ( 16'h6996 )) + \BU2/U0/grf.rf/gcx.clkx/wr_pntr_bin_xor0003 ( + .I0(\BU2/U0/grf.rf/gcx.clkx/wr_pntr_gc_asreg_d1 [1]), + .I1(\BU2/U0/grf.rf/gcx.clkx/wr_pntr_gc_asreg_d1 [0]), + .I2(\BU2/U0/grf.rf/gcx.clkx/wr_pntr_gc_asreg_d1 [4]), + .I3(\BU2/N14 ), + .O(\BU2/U0/grf.rf/gcx.clkx/wr_pntr_bin_xor0003_120 ) + ); + LUT3 #( + .INIT ( 8'hA2 )) + \BU2/U0/grf.rf/gl0.rd/gr1.rfwft/Mmux_RAM_REGOUT_EN11 ( + .I0(\BU2/U0/grf.rf/gl0.rd/gr1.rfwft/curr_fwft_state [1]), + .I1(\BU2/U0/grf.rf/gl0.rd/gr1.rfwft/curr_fwft_state [0]), + .I2(rd_en), + .O(\BU2/U0/grf.rf/mem/dout_i_not0001 ) + ); + LUT2 #( + .INIT ( 4'hD )) + \BU2/U0/grf.rf/gl0.wr/gwas.wsts/ram_almost_full_i_not00011 ( + .I0(\BU2/U0/grf.rf/gl0.wr/gwas.wsts/ram_full_fb_i_370 ), + .I1(\BU2/U0/grf.rf/rstblk/RST_FULL_GEN_87 ), + .O(\BU2/U0/grf.rf/gl0.wr/gwas.gpf.wrpf/prog_full_i_not0001 ) + ); + LUT4 #( + .INIT ( 16'h8E8A )) + \BU2/U0/grf.rf/gl0.rd/gr1.rfwft/empty_fwft_i_mux00001 ( + .I0(\BU2/U0/grf.rf/gl0.rd/gr1.rfwft/empty_fwft_fb_176 ), + .I1(\BU2/U0/grf.rf/gl0.rd/gr1.rfwft/curr_fwft_state [0]), + .I2(\BU2/U0/grf.rf/gl0.rd/gr1.rfwft/curr_fwft_state [1]), + .I3(rd_en), + .O(\BU2/U0/grf.rf/gl0.rd/gr1.rfwft/empty_fwft_i_mux0000 ) + ); + LUT4 #( + .INIT ( 16'h6996 )) + \BU2/U0/grf.rf/gcx.clkx/rd_pntr_bin_xor00021 ( + .I0(\BU2/U0/grf.rf/gcx.clkx/rd_pntr_gc_asreg_d1 [2]), + .I1(\BU2/U0/grf.rf/gcx.clkx/rd_pntr_gc_asreg_d1 [1]), + .I2(\BU2/U0/grf.rf/gcx.clkx/rd_pntr_gc_asreg_d1 [4]), + .I3(\BU2/U0/grf.rf/gcx.clkx/rd_pntr_gc_asreg_d1 [3]), + .O(\BU2/U0/grf.rf/gcx.clkx/rd_pntr_bin_xor0002 ) + ); + LUT4 #( + .INIT ( 16'h6996 )) + \BU2/U0/grf.rf/gcx.clkx/wr_pntr_bin_xor00021 ( + .I0(\BU2/U0/grf.rf/gcx.clkx/wr_pntr_gc_asreg_d1 [2]), + .I1(\BU2/U0/grf.rf/gcx.clkx/wr_pntr_gc_asreg_d1 [1]), + .I2(\BU2/U0/grf.rf/gcx.clkx/wr_pntr_gc_asreg_d1 [4]), + .I3(\BU2/U0/grf.rf/gcx.clkx/wr_pntr_gc_asreg_d1 [3]), + .O(\BU2/U0/grf.rf/gcx.clkx/wr_pntr_bin_xor0002 ) + ); + LUT4 #( + .INIT ( 16'h40FF )) + \BU2/U0/grf.rf/gl0.rd/gr1.rfwft/curr_fwft_state_mux0001<0>1 ( + .I0(rd_en), + .I1(\BU2/U0/grf.rf/gl0.rd/gr1.rfwft/curr_fwft_state [0]), + .I2(\BU2/U0/grf.rf/gl0.rd/gr1.rfwft/curr_fwft_state [1]), + .I3(\BU2/U0/grf.rf/gl0.rd/gras.rsts/ram_empty_fb_i_85 ), + .O(\BU2/U0/grf.rf/gl0.rd/gr1.rfwft/curr_fwft_state_mux0001 [0]) + ); + LUT3 #( + .INIT ( 8'h6A )) + \BU2/U0/grf.rf/gl0.rd/rpntr/Mcount_count_xor<2>11 ( + .I0(\BU2/U0/grf.rf/gl0.rd/rpntr/count [2]), + .I1(\BU2/U0/grf.rf/gl0.rd/rpntr/count [0]), + .I2(\BU2/U0/grf.rf/gl0.rd/rpntr/count [1]), + .O(\BU2/U0/grf.rf/gl0.rd/rpntr/Mcount_count2 ) + ); + LUT3 #( + .INIT ( 8'h6A )) + \BU2/U0/grf.rf/gl0.wr/wpntr/Mcount_count_xor<2>11 ( + .I0(\BU2/U0/grf.rf/gl0.wr/wpntr/count [2]), + .I1(\BU2/U0/grf.rf/gl0.wr/wpntr/count [0]), + .I2(\BU2/U0/grf.rf/gl0.wr/wpntr/count [1]), + .O(\BU2/U0/grf.rf/gl0.wr/wpntr/Mcount_count2 ) + ); + LUT3 #( + .INIT ( 8'h96 )) + \BU2/U0/grf.rf/gcx.clkx/rd_pntr_bin_xor00011 ( + .I0(\BU2/U0/grf.rf/gcx.clkx/rd_pntr_gc_asreg_d1 [4]), + .I1(\BU2/U0/grf.rf/gcx.clkx/rd_pntr_gc_asreg_d1 [3]), + .I2(\BU2/U0/grf.rf/gcx.clkx/rd_pntr_gc_asreg_d1 [2]), + .O(\BU2/U0/grf.rf/gcx.clkx/rd_pntr_bin_xor0001 ) + ); + LUT3 #( + .INIT ( 8'h96 )) + \BU2/U0/grf.rf/gcx.clkx/wr_pntr_bin_xor00011 ( + .I0(\BU2/U0/grf.rf/gcx.clkx/wr_pntr_gc_asreg_d1 [4]), + .I1(\BU2/U0/grf.rf/gcx.clkx/wr_pntr_gc_asreg_d1 [3]), + .I2(\BU2/U0/grf.rf/gcx.clkx/wr_pntr_gc_asreg_d1 [2]), + .O(\BU2/U0/grf.rf/gcx.clkx/wr_pntr_bin_xor0001 ) + ); + LUT3 #( + .INIT ( 8'hF2 )) + \BU2/U0/grf.rf/gl0.rd/gr1.rfwft/curr_fwft_state_mux0001<1>1 ( + .I0(\BU2/U0/grf.rf/gl0.rd/gr1.rfwft/curr_fwft_state [0]), + .I1(rd_en), + .I2(\BU2/U0/grf.rf/gl0.rd/gr1.rfwft/curr_fwft_state [1]), + .O(\BU2/U0/grf.rf/gl0.rd/gr1.rfwft/curr_fwft_state_mux0001 [1]) + ); + LUT3 #( + .INIT ( 8'h08 )) + \BU2/U0/grf.rf/gl0.wr/gwas.gpf.wrpf/prog_full_i_mux00031 ( + .I0(\BU2/U0/grf.rf/gl0.wr/gwas.gpf.wrpf/diff_pntr_pad [4]), + .I1(\BU2/U0/grf.rf/gl0.wr/gwas.gpf.wrpf/diff_pntr_pad [5]), + .I2(\BU2/U0/grf.rf/rstblk/RST_FULL_GEN_87 ), + .O(\BU2/U0/grf.rf/gl0.wr/gwas.gpf.wrpf/prog_full_i_mux0003 ) + ); + LUT2 #( + .INIT ( 4'h6 )) + \BU2/U0/grf.rf/gcx.clkx/Mxor_rd_pntr_gc_xor0000_Result1 ( + .I0(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [4]), + .I1(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [3]), + .O(\BU2/U0/grf.rf/gcx.clkx/rd_pntr_gc_xor0000 ) + ); + LUT2 #( + .INIT ( 4'h6 )) + \BU2/U0/grf.rf/gcx.clkx/Mxor_rd_pntr_gc_xor0001_Result1 ( + .I0(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [3]), + .I1(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [2]), + .O(\BU2/U0/grf.rf/gcx.clkx/rd_pntr_gc_xor0001 ) + ); + LUT2 #( + .INIT ( 4'h6 )) + \BU2/U0/grf.rf/gcx.clkx/Mxor_rd_pntr_gc_xor0002_Result1 ( + .I0(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [2]), + .I1(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [1]), + .O(\BU2/U0/grf.rf/gcx.clkx/rd_pntr_gc_xor0002 ) + ); + LUT2 #( + .INIT ( 4'h6 )) + \BU2/U0/grf.rf/gcx.clkx/Mxor_rd_pntr_gc_xor0003_Result1 ( + .I0(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [1]), + .I1(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [0]), + .O(\BU2/U0/grf.rf/gcx.clkx/rd_pntr_gc_xor0003 ) + ); + LUT2 #( + .INIT ( 4'h6 )) + \BU2/U0/grf.rf/gcx.clkx/Mxor_wr_pntr_gc_xor0000_Result1 ( + .I0(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [4]), + .I1(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [3]), + .O(\BU2/U0/grf.rf/gcx.clkx/wr_pntr_gc_xor0000 ) + ); + LUT2 #( + .INIT ( 4'h6 )) + \BU2/U0/grf.rf/gcx.clkx/Mxor_wr_pntr_gc_xor0001_Result1 ( + .I0(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [3]), + .I1(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [2]), + .O(\BU2/U0/grf.rf/gcx.clkx/wr_pntr_gc_xor0001 ) + ); + LUT2 #( + .INIT ( 4'h6 )) + \BU2/U0/grf.rf/gcx.clkx/Mxor_wr_pntr_gc_xor0002_Result1 ( + .I0(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [2]), + .I1(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [1]), + .O(\BU2/U0/grf.rf/gcx.clkx/wr_pntr_gc_xor0002 ) + ); + LUT2 #( + .INIT ( 4'h6 )) + \BU2/U0/grf.rf/gcx.clkx/Mxor_wr_pntr_gc_xor0003_Result1 ( + .I0(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [1]), + .I1(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [0]), + .O(\BU2/U0/grf.rf/gcx.clkx/wr_pntr_gc_xor0003 ) + ); + LUT2 #( + .INIT ( 4'h6 )) + \BU2/U0/grf.rf/gl0.rd/rpntr/Mcount_count_xor<1>11 ( + .I0(\BU2/U0/grf.rf/gl0.rd/rpntr/count [0]), + .I1(\BU2/U0/grf.rf/gl0.rd/rpntr/count [1]), + .O(\BU2/U0/grf.rf/gl0.rd/rpntr/Mcount_count1 ) + ); + LUT2 #( + .INIT ( 4'h6 )) + \BU2/U0/grf.rf/gl0.wr/wpntr/Mcount_count_xor<1>11 ( + .I0(\BU2/U0/grf.rf/gl0.wr/wpntr/count [1]), + .I1(\BU2/U0/grf.rf/gl0.wr/wpntr/count [0]), + .O(\BU2/U0/grf.rf/gl0.wr/wpntr/Mcount_count1 ) + ); + LUT2 #( + .INIT ( 4'h6 )) + \BU2/U0/grf.rf/gcx.clkx/rd_pntr_bin_xor00001 ( + .I0(\BU2/U0/grf.rf/gcx.clkx/rd_pntr_gc_asreg_d1 [3]), + .I1(\BU2/U0/grf.rf/gcx.clkx/rd_pntr_gc_asreg_d1 [4]), + .O(\BU2/U0/grf.rf/gcx.clkx/rd_pntr_bin_xor0000 ) + ); + LUT2 #( + .INIT ( 4'h6 )) + \BU2/U0/grf.rf/gcx.clkx/wr_pntr_bin_xor00001 ( + .I0(\BU2/U0/grf.rf/gcx.clkx/wr_pntr_gc_asreg_d1 [3]), + .I1(\BU2/U0/grf.rf/gcx.clkx/wr_pntr_gc_asreg_d1 [4]), + .O(\BU2/U0/grf.rf/gcx.clkx/wr_pntr_bin_xor0000 ) + ); + LUT2 #( + .INIT ( 4'h4 )) + \BU2/U0/grf.rf/rstblk/rd_rst_comb1 ( + .I0(\BU2/U0/grf.rf/rstblk/rd_rst_asreg_d2_90 ), + .I1(\BU2/U0/grf.rf/rstblk/rd_rst_asreg_94 ), + .O(\BU2/U0/grf.rf/rstblk/rd_rst_comb ) + ); + LUT2 #( + .INIT ( 4'h4 )) + \BU2/U0/grf.rf/rstblk/wr_rst_comb1 ( + .I0(\BU2/U0/grf.rf/rstblk/wr_rst_asreg_d2_92 ), + .I1(\BU2/U0/grf.rf/rstblk/wr_rst_asreg_95 ), + .O(\BU2/U0/grf.rf/rstblk/wr_rst_comb ) + ); + FDPE #( + .INIT ( 1'b1 )) + \BU2/U0/grf.rf/gl0.wr/gwas.wsts/ram_almost_full_i ( + .C(wr_clk), + .CE(\BU2/U0/grf.rf/gl0.wr/gwas.gpf.wrpf/prog_full_i_not0001 ), + .D(\BU2/U0/grf.rf/gl0.wr/gwas.wsts/ram_almost_full_i_mux0000 ), + .PRE(\BU2/U0/grf.rf/rstblk/rst_d2_88 ), + .Q(almost_full) + ); + FDP #( + .INIT ( 1'b1 )) + \BU2/U0/grf.rf/gl0.wr/gwas.wsts/ram_full_i ( + .C(wr_clk), + .D(\BU2/U0/grf.rf/gl0.wr/gwas.wsts/ram_full_i_mux0000 ), + .PRE(\BU2/U0/grf.rf/rstblk/rst_d2_88 ), + .Q(full) + ); + FDP #( + .INIT ( 1'b1 )) + \BU2/U0/grf.rf/gl0.wr/gwas.wsts/ram_full_fb_i ( + .C(wr_clk), + .D(\BU2/U0/grf.rf/gl0.wr/gwas.wsts/ram_full_i_mux0000 ), + .PRE(\BU2/U0/grf.rf/rstblk/rst_d2_88 ), + .Q(\BU2/U0/grf.rf/gl0.wr/gwas.wsts/ram_full_fb_i_370 ) + ); + FDCE #( + .INIT ( 1'b0 )) + \BU2/U0/grf.rf/mem/dout_i_0 ( + .C(rd_clk), + .CE(\BU2/U0/grf.rf/mem/dout_i_not0001 ), + .CLR(\BU2/U0/grf.rf/rstblk/rd_rst_reg [0]), + .D(\BU2/U0/grf.rf/mem/gdm.dm/dout_i [0]), + .Q(dout_3[0]) + ); + FDCE #( + .INIT ( 1'b0 )) + \BU2/U0/grf.rf/mem/dout_i_1 ( + .C(rd_clk), + .CE(\BU2/U0/grf.rf/mem/dout_i_not0001 ), + .CLR(\BU2/U0/grf.rf/rstblk/rd_rst_reg [0]), + .D(\BU2/U0/grf.rf/mem/gdm.dm/dout_i [1]), + .Q(dout_3[1]) + ); + FDCE #( + .INIT ( 1'b0 )) + \BU2/U0/grf.rf/mem/dout_i_2 ( + .C(rd_clk), + .CE(\BU2/U0/grf.rf/mem/dout_i_not0001 ), + .CLR(\BU2/U0/grf.rf/rstblk/rd_rst_reg [0]), + .D(\BU2/U0/grf.rf/mem/gdm.dm/dout_i [2]), + .Q(dout_3[2]) + ); + FDCE #( + .INIT ( 1'b0 )) + \BU2/U0/grf.rf/mem/dout_i_3 ( + .C(rd_clk), + .CE(\BU2/U0/grf.rf/mem/dout_i_not0001 ), + .CLR(\BU2/U0/grf.rf/rstblk/rd_rst_reg [0]), + .D(\BU2/U0/grf.rf/mem/gdm.dm/dout_i [3]), + .Q(dout_3[3]) + ); + FDCE #( + .INIT ( 1'b0 )) + \BU2/U0/grf.rf/mem/dout_i_4 ( + .C(rd_clk), + .CE(\BU2/U0/grf.rf/mem/dout_i_not0001 ), + .CLR(\BU2/U0/grf.rf/rstblk/rd_rst_reg [0]), + .D(\BU2/U0/grf.rf/mem/gdm.dm/dout_i [4]), + .Q(dout_3[4]) + ); + FDCE #( + .INIT ( 1'b0 )) + \BU2/U0/grf.rf/mem/dout_i_5 ( + .C(rd_clk), + .CE(\BU2/U0/grf.rf/mem/dout_i_not0001 ), + .CLR(\BU2/U0/grf.rf/rstblk/rd_rst_reg [0]), + .D(\BU2/U0/grf.rf/mem/gdm.dm/dout_i [5]), + .Q(dout_3[5]) + ); + FDCE #( + .INIT ( 1'b0 )) + \BU2/U0/grf.rf/mem/dout_i_6 ( + .C(rd_clk), + .CE(\BU2/U0/grf.rf/mem/dout_i_not0001 ), + .CLR(\BU2/U0/grf.rf/rstblk/rd_rst_reg [0]), + .D(\BU2/U0/grf.rf/mem/gdm.dm/dout_i [6]), + .Q(dout_3[6]) + ); + FDCE #( + .INIT ( 1'b0 )) + \BU2/U0/grf.rf/mem/dout_i_7 ( + .C(rd_clk), + .CE(\BU2/U0/grf.rf/mem/dout_i_not0001 ), + .CLR(\BU2/U0/grf.rf/rstblk/rd_rst_reg [0]), + .D(\BU2/U0/grf.rf/mem/gdm.dm/dout_i [7]), + .Q(dout_3[7]) + ); + FDCE #( + .INIT ( 1'b0 )) + \BU2/U0/grf.rf/mem/dout_i_8 ( + .C(rd_clk), + .CE(\BU2/U0/grf.rf/mem/dout_i_not0001 ), + .CLR(\BU2/U0/grf.rf/rstblk/rd_rst_reg [0]), + .D(\BU2/U0/grf.rf/mem/gdm.dm/dout_i [8]), + .Q(dout_3[8]) + ); + FDCE #( + .INIT ( 1'b0 )) + \BU2/U0/grf.rf/mem/dout_i_9 ( + .C(rd_clk), + .CE(\BU2/U0/grf.rf/mem/dout_i_not0001 ), + .CLR(\BU2/U0/grf.rf/rstblk/rd_rst_reg [0]), + .D(\BU2/U0/grf.rf/mem/gdm.dm/dout_i [9]), + .Q(dout_3[9]) + ); + FDCE #( + .INIT ( 1'b0 )) + \BU2/U0/grf.rf/mem/dout_i_10 ( + .C(rd_clk), + .CE(\BU2/U0/grf.rf/mem/dout_i_not0001 ), + .CLR(\BU2/U0/grf.rf/rstblk/rd_rst_reg [0]), + .D(\BU2/U0/grf.rf/mem/gdm.dm/dout_i [10]), + .Q(dout_3[10]) + ); + FDCE #( + .INIT ( 1'b0 )) + \BU2/U0/grf.rf/mem/dout_i_11 ( + .C(rd_clk), + .CE(\BU2/U0/grf.rf/mem/dout_i_not0001 ), + .CLR(\BU2/U0/grf.rf/rstblk/rd_rst_reg [0]), + .D(\BU2/U0/grf.rf/mem/gdm.dm/dout_i [11]), + .Q(dout_3[11]) + ); + FDCE #( + .INIT ( 1'b0 )) + \BU2/U0/grf.rf/mem/dout_i_12 ( + .C(rd_clk), + .CE(\BU2/U0/grf.rf/mem/dout_i_not0001 ), + .CLR(\BU2/U0/grf.rf/rstblk/rd_rst_reg [0]), + .D(\BU2/U0/grf.rf/mem/gdm.dm/dout_i [12]), + .Q(dout_3[12]) + ); + FDCE #( + .INIT ( 1'b0 )) + \BU2/U0/grf.rf/mem/dout_i_13 ( + .C(rd_clk), + .CE(\BU2/U0/grf.rf/mem/dout_i_not0001 ), + .CLR(\BU2/U0/grf.rf/rstblk/rd_rst_reg [0]), + .D(\BU2/U0/grf.rf/mem/gdm.dm/dout_i [13]), + .Q(dout_3[13]) + ); + FDCE #( + .INIT ( 1'b0 )) + \BU2/U0/grf.rf/mem/dout_i_14 ( + .C(rd_clk), + .CE(\BU2/U0/grf.rf/mem/dout_i_not0001 ), + .CLR(\BU2/U0/grf.rf/rstblk/rd_rst_reg [0]), + .D(\BU2/U0/grf.rf/mem/gdm.dm/dout_i [14]), + .Q(dout_3[14]) + ); + FDCE #( + .INIT ( 1'b0 )) + \BU2/U0/grf.rf/mem/dout_i_15 ( + .C(rd_clk), + .CE(\BU2/U0/grf.rf/mem/dout_i_not0001 ), + .CLR(\BU2/U0/grf.rf/rstblk/rd_rst_reg [0]), + .D(\BU2/U0/grf.rf/mem/gdm.dm/dout_i [15]), + .Q(dout_3[15]) + ); + FDCE #( + .INIT ( 1'b0 )) + \BU2/U0/grf.rf/mem/dout_i_16 ( + .C(rd_clk), + .CE(\BU2/U0/grf.rf/mem/dout_i_not0001 ), + .CLR(\BU2/U0/grf.rf/rstblk/rd_rst_reg [0]), + .D(\BU2/U0/grf.rf/mem/gdm.dm/dout_i [16]), + .Q(dout_3[16]) + ); + FDCE #( + .INIT ( 1'b0 )) + \BU2/U0/grf.rf/mem/dout_i_17 ( + .C(rd_clk), + .CE(\BU2/U0/grf.rf/mem/dout_i_not0001 ), + .CLR(\BU2/U0/grf.rf/rstblk/rd_rst_reg [0]), + .D(\BU2/U0/grf.rf/mem/gdm.dm/dout_i [17]), + .Q(dout_3[17]) + ); + FDCE #( + .INIT ( 1'b0 )) + \BU2/U0/grf.rf/mem/dout_i_18 ( + .C(rd_clk), + .CE(\BU2/U0/grf.rf/mem/dout_i_not0001 ), + .CLR(\BU2/U0/grf.rf/rstblk/rd_rst_reg [0]), + .D(\BU2/U0/grf.rf/mem/gdm.dm/dout_i [18]), + .Q(dout_3[18]) + ); + FDCE #( + .INIT ( 1'b0 )) + \BU2/U0/grf.rf/mem/dout_i_19 ( + .C(rd_clk), + .CE(\BU2/U0/grf.rf/mem/dout_i_not0001 ), + .CLR(\BU2/U0/grf.rf/rstblk/rd_rst_reg [0]), + .D(\BU2/U0/grf.rf/mem/gdm.dm/dout_i [19]), + .Q(dout_3[19]) + ); + FDCE #( + .INIT ( 1'b0 )) + \BU2/U0/grf.rf/mem/dout_i_20 ( + .C(rd_clk), + .CE(\BU2/U0/grf.rf/mem/dout_i_not0001 ), + .CLR(\BU2/U0/grf.rf/rstblk/rd_rst_reg [0]), + .D(\BU2/U0/grf.rf/mem/gdm.dm/dout_i [20]), + .Q(dout_3[20]) + ); + FDCE #( + .INIT ( 1'b0 )) + \BU2/U0/grf.rf/mem/dout_i_21 ( + .C(rd_clk), + .CE(\BU2/U0/grf.rf/mem/dout_i_not0001 ), + .CLR(\BU2/U0/grf.rf/rstblk/rd_rst_reg [0]), + .D(\BU2/U0/grf.rf/mem/gdm.dm/dout_i [21]), + .Q(dout_3[21]) + ); + FDCE #( + .INIT ( 1'b0 )) + \BU2/U0/grf.rf/mem/dout_i_22 ( + .C(rd_clk), + .CE(\BU2/U0/grf.rf/mem/dout_i_not0001 ), + .CLR(\BU2/U0/grf.rf/rstblk/rd_rst_reg [0]), + .D(\BU2/U0/grf.rf/mem/gdm.dm/dout_i [22]), + .Q(dout_3[22]) + ); + FDCE #( + .INIT ( 1'b0 )) + \BU2/U0/grf.rf/mem/dout_i_23 ( + .C(rd_clk), + .CE(\BU2/U0/grf.rf/mem/dout_i_not0001 ), + .CLR(\BU2/U0/grf.rf/rstblk/rd_rst_reg [0]), + .D(\BU2/U0/grf.rf/mem/gdm.dm/dout_i [23]), + .Q(dout_3[23]) + ); + FDCE #( + .INIT ( 1'b0 )) + \BU2/U0/grf.rf/mem/dout_i_24 ( + .C(rd_clk), + .CE(\BU2/U0/grf.rf/mem/dout_i_not0001 ), + .CLR(\BU2/U0/grf.rf/rstblk/rd_rst_reg [0]), + .D(\BU2/U0/grf.rf/mem/gdm.dm/dout_i [24]), + .Q(dout_3[24]) + ); + FDCE #( + .INIT ( 1'b0 )) + \BU2/U0/grf.rf/mem/dout_i_25 ( + .C(rd_clk), + .CE(\BU2/U0/grf.rf/mem/dout_i_not0001 ), + .CLR(\BU2/U0/grf.rf/rstblk/rd_rst_reg [0]), + .D(\BU2/U0/grf.rf/mem/gdm.dm/dout_i [25]), + .Q(dout_3[25]) + ); + FDCE #( + .INIT ( 1'b0 )) + \BU2/U0/grf.rf/mem/dout_i_26 ( + .C(rd_clk), + .CE(\BU2/U0/grf.rf/mem/dout_i_not0001 ), + .CLR(\BU2/U0/grf.rf/rstblk/rd_rst_reg [0]), + .D(\BU2/U0/grf.rf/mem/gdm.dm/dout_i [26]), + .Q(dout_3[26]) + ); + FDCE #( + .INIT ( 1'b0 )) + \BU2/U0/grf.rf/mem/dout_i_27 ( + .C(rd_clk), + .CE(\BU2/U0/grf.rf/mem/dout_i_not0001 ), + .CLR(\BU2/U0/grf.rf/rstblk/rd_rst_reg [0]), + .D(\BU2/U0/grf.rf/mem/gdm.dm/dout_i [27]), + .Q(dout_3[27]) + ); + FDCE #( + .INIT ( 1'b0 )) + \BU2/U0/grf.rf/mem/dout_i_28 ( + .C(rd_clk), + .CE(\BU2/U0/grf.rf/mem/dout_i_not0001 ), + .CLR(\BU2/U0/grf.rf/rstblk/rd_rst_reg [0]), + .D(\BU2/U0/grf.rf/mem/gdm.dm/dout_i [28]), + .Q(dout_3[28]) + ); + FDCE #( + .INIT ( 1'b0 )) + \BU2/U0/grf.rf/mem/dout_i_29 ( + .C(rd_clk), + .CE(\BU2/U0/grf.rf/mem/dout_i_not0001 ), + .CLR(\BU2/U0/grf.rf/rstblk/rd_rst_reg [0]), + .D(\BU2/U0/grf.rf/mem/gdm.dm/dout_i [29]), + .Q(dout_3[29]) + ); + FDCE #( + .INIT ( 1'b0 )) + \BU2/U0/grf.rf/mem/dout_i_30 ( + .C(rd_clk), + .CE(\BU2/U0/grf.rf/mem/dout_i_not0001 ), + .CLR(\BU2/U0/grf.rf/rstblk/rd_rst_reg [0]), + .D(\BU2/U0/grf.rf/mem/gdm.dm/dout_i [30]), + .Q(dout_3[30]) + ); + FDCE #( + .INIT ( 1'b0 )) + \BU2/U0/grf.rf/mem/dout_i_31 ( + .C(rd_clk), + .CE(\BU2/U0/grf.rf/mem/dout_i_not0001 ), + .CLR(\BU2/U0/grf.rf/rstblk/rd_rst_reg [0]), + .D(\BU2/U0/grf.rf/mem/gdm.dm/dout_i [31]), + .Q(dout_3[31]) + ); + FDCE #( + .INIT ( 1'b0 )) + \BU2/U0/grf.rf/mem/dout_i_32 ( + .C(rd_clk), + .CE(\BU2/U0/grf.rf/mem/dout_i_not0001 ), + .CLR(\BU2/U0/grf.rf/rstblk/rd_rst_reg [0]), + .D(\BU2/U0/grf.rf/mem/gdm.dm/dout_i [32]), + .Q(dout_3[32]) + ); + FDCE #( + .INIT ( 1'b0 )) + \BU2/U0/grf.rf/mem/dout_i_33 ( + .C(rd_clk), + .CE(\BU2/U0/grf.rf/mem/dout_i_not0001 ), + .CLR(\BU2/U0/grf.rf/rstblk/rd_rst_reg [0]), + .D(\BU2/U0/grf.rf/mem/gdm.dm/dout_i [33]), + .Q(dout_3[33]) + ); + FDCE #( + .INIT ( 1'b0 )) + \BU2/U0/grf.rf/mem/dout_i_34 ( + .C(rd_clk), + .CE(\BU2/U0/grf.rf/mem/dout_i_not0001 ), + .CLR(\BU2/U0/grf.rf/rstblk/rd_rst_reg [0]), + .D(\BU2/U0/grf.rf/mem/gdm.dm/dout_i [34]), + .Q(dout_3[34]) + ); + FDCE #( + .INIT ( 1'b0 )) + \BU2/U0/grf.rf/mem/dout_i_35 ( + .C(rd_clk), + .CE(\BU2/U0/grf.rf/mem/dout_i_not0001 ), + .CLR(\BU2/U0/grf.rf/rstblk/rd_rst_reg [0]), + .D(\BU2/U0/grf.rf/mem/gdm.dm/dout_i [35]), + .Q(dout_3[35]) + ); + RAM16X1D \BU2/U0/grf.rf/mem/gdm.dm/Mram_RAM72 ( + .A0(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [0]), + .A1(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [1]), + .A2(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [2]), + .A3(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [3]), + .D(din_2[35]), + .DPRA0(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [0]), + .DPRA1(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [1]), + .DPRA2(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [2]), + .DPRA3(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [3]), + .WCLK(wr_clk), + .WE(\BU2/U0/grf.rf/mem/gdm.dm/write_ctrl1_296 ), + .SPO(\NLW_BU2/U0/grf.rf/mem/gdm.dm/Mram_RAM72_SPO_UNCONNECTED ), + .DPO(\BU2/U0/grf.rf/mem/gdm.dm/N147 ) + ); + RAM16X1D \BU2/U0/grf.rf/mem/gdm.dm/Mram_RAM71 ( + .A0(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [0]), + .A1(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [1]), + .A2(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [2]), + .A3(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [3]), + .D(din_2[35]), + .DPRA0(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [0]), + .DPRA1(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [1]), + .DPRA2(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [2]), + .DPRA3(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [3]), + .WCLK(wr_clk), + .WE(\BU2/U0/grf.rf/mem/gdm.dm/write_ctrl_294 ), + .SPO(\NLW_BU2/U0/grf.rf/mem/gdm.dm/Mram_RAM71_SPO_UNCONNECTED ), + .DPO(\BU2/U0/grf.rf/mem/gdm.dm/N145 ) + ); + RAM16X1D \BU2/U0/grf.rf/mem/gdm.dm/Mram_RAM70 ( + .A0(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [0]), + .A1(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [1]), + .A2(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [2]), + .A3(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [3]), + .D(din_2[34]), + .DPRA0(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [0]), + .DPRA1(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [1]), + .DPRA2(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [2]), + .DPRA3(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [3]), + .WCLK(wr_clk), + .WE(\BU2/U0/grf.rf/mem/gdm.dm/write_ctrl1_296 ), + .SPO(\NLW_BU2/U0/grf.rf/mem/gdm.dm/Mram_RAM70_SPO_UNCONNECTED ), + .DPO(\BU2/U0/grf.rf/mem/gdm.dm/N143 ) + ); + RAM16X1D \BU2/U0/grf.rf/mem/gdm.dm/Mram_RAM69 ( + .A0(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [0]), + .A1(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [1]), + .A2(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [2]), + .A3(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [3]), + .D(din_2[34]), + .DPRA0(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [0]), + .DPRA1(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [1]), + .DPRA2(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [2]), + .DPRA3(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [3]), + .WCLK(wr_clk), + .WE(\BU2/U0/grf.rf/mem/gdm.dm/write_ctrl_294 ), + .SPO(\NLW_BU2/U0/grf.rf/mem/gdm.dm/Mram_RAM69_SPO_UNCONNECTED ), + .DPO(\BU2/U0/grf.rf/mem/gdm.dm/N141 ) + ); + RAM16X1D \BU2/U0/grf.rf/mem/gdm.dm/Mram_RAM67 ( + .A0(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [0]), + .A1(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [1]), + .A2(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [2]), + .A3(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [3]), + .D(din_2[33]), + .DPRA0(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [0]), + .DPRA1(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [1]), + .DPRA2(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [2]), + .DPRA3(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [3]), + .WCLK(wr_clk), + .WE(\BU2/U0/grf.rf/mem/gdm.dm/write_ctrl_294 ), + .SPO(\NLW_BU2/U0/grf.rf/mem/gdm.dm/Mram_RAM67_SPO_UNCONNECTED ), + .DPO(\BU2/U0/grf.rf/mem/gdm.dm/N137 ) + ); + RAM16X1D \BU2/U0/grf.rf/mem/gdm.dm/Mram_RAM66 ( + .A0(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [0]), + .A1(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [1]), + .A2(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [2]), + .A3(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [3]), + .D(din_2[32]), + .DPRA0(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [0]), + .DPRA1(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [1]), + .DPRA2(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [2]), + .DPRA3(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [3]), + .WCLK(wr_clk), + .WE(\BU2/U0/grf.rf/mem/gdm.dm/write_ctrl1_296 ), + .SPO(\NLW_BU2/U0/grf.rf/mem/gdm.dm/Mram_RAM66_SPO_UNCONNECTED ), + .DPO(\BU2/U0/grf.rf/mem/gdm.dm/N135 ) + ); + RAM16X1D \BU2/U0/grf.rf/mem/gdm.dm/Mram_RAM68 ( + .A0(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [0]), + .A1(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [1]), + .A2(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [2]), + .A3(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [3]), + .D(din_2[33]), + .DPRA0(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [0]), + .DPRA1(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [1]), + .DPRA2(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [2]), + .DPRA3(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [3]), + .WCLK(wr_clk), + .WE(\BU2/U0/grf.rf/mem/gdm.dm/write_ctrl1_296 ), + .SPO(\NLW_BU2/U0/grf.rf/mem/gdm.dm/Mram_RAM68_SPO_UNCONNECTED ), + .DPO(\BU2/U0/grf.rf/mem/gdm.dm/N139 ) + ); + RAM16X1D \BU2/U0/grf.rf/mem/gdm.dm/Mram_RAM65 ( + .A0(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [0]), + .A1(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [1]), + .A2(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [2]), + .A3(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [3]), + .D(din_2[32]), + .DPRA0(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [0]), + .DPRA1(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [1]), + .DPRA2(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [2]), + .DPRA3(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [3]), + .WCLK(wr_clk), + .WE(\BU2/U0/grf.rf/mem/gdm.dm/write_ctrl_294 ), + .SPO(\NLW_BU2/U0/grf.rf/mem/gdm.dm/Mram_RAM65_SPO_UNCONNECTED ), + .DPO(\BU2/U0/grf.rf/mem/gdm.dm/N133 ) + ); + RAM16X1D \BU2/U0/grf.rf/mem/gdm.dm/Mram_RAM64 ( + .A0(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [0]), + .A1(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [1]), + .A2(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [2]), + .A3(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [3]), + .D(din_2[31]), + .DPRA0(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [0]), + .DPRA1(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [1]), + .DPRA2(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [2]), + .DPRA3(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [3]), + .WCLK(wr_clk), + .WE(\BU2/U0/grf.rf/mem/gdm.dm/write_ctrl1_296 ), + .SPO(\NLW_BU2/U0/grf.rf/mem/gdm.dm/Mram_RAM64_SPO_UNCONNECTED ), + .DPO(\BU2/U0/grf.rf/mem/gdm.dm/N131 ) + ); + RAM16X1D \BU2/U0/grf.rf/mem/gdm.dm/Mram_RAM63 ( + .A0(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [0]), + .A1(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [1]), + .A2(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [2]), + .A3(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [3]), + .D(din_2[31]), + .DPRA0(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [0]), + .DPRA1(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [1]), + .DPRA2(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [2]), + .DPRA3(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [3]), + .WCLK(wr_clk), + .WE(\BU2/U0/grf.rf/mem/gdm.dm/write_ctrl_294 ), + .SPO(\NLW_BU2/U0/grf.rf/mem/gdm.dm/Mram_RAM63_SPO_UNCONNECTED ), + .DPO(\BU2/U0/grf.rf/mem/gdm.dm/N129 ) + ); + RAM16X1D \BU2/U0/grf.rf/mem/gdm.dm/Mram_RAM62 ( + .A0(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [0]), + .A1(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [1]), + .A2(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [2]), + .A3(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [3]), + .D(din_2[30]), + .DPRA0(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [0]), + .DPRA1(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [1]), + .DPRA2(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [2]), + .DPRA3(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [3]), + .WCLK(wr_clk), + .WE(\BU2/U0/grf.rf/mem/gdm.dm/write_ctrl1_296 ), + .SPO(\NLW_BU2/U0/grf.rf/mem/gdm.dm/Mram_RAM62_SPO_UNCONNECTED ), + .DPO(\BU2/U0/grf.rf/mem/gdm.dm/N127 ) + ); + RAM16X1D \BU2/U0/grf.rf/mem/gdm.dm/Mram_RAM60 ( + .A0(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [0]), + .A1(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [1]), + .A2(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [2]), + .A3(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [3]), + .D(din_2[29]), + .DPRA0(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [0]), + .DPRA1(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [1]), + .DPRA2(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [2]), + .DPRA3(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [3]), + .WCLK(wr_clk), + .WE(\BU2/U0/grf.rf/mem/gdm.dm/write_ctrl1_296 ), + .SPO(\NLW_BU2/U0/grf.rf/mem/gdm.dm/Mram_RAM60_SPO_UNCONNECTED ), + .DPO(\BU2/U0/grf.rf/mem/gdm.dm/N123 ) + ); + RAM16X1D \BU2/U0/grf.rf/mem/gdm.dm/Mram_RAM59 ( + .A0(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [0]), + .A1(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [1]), + .A2(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [2]), + .A3(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [3]), + .D(din_2[29]), + .DPRA0(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [0]), + .DPRA1(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [1]), + .DPRA2(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [2]), + .DPRA3(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [3]), + .WCLK(wr_clk), + .WE(\BU2/U0/grf.rf/mem/gdm.dm/write_ctrl_294 ), + .SPO(\NLW_BU2/U0/grf.rf/mem/gdm.dm/Mram_RAM59_SPO_UNCONNECTED ), + .DPO(\BU2/U0/grf.rf/mem/gdm.dm/N121 ) + ); + RAM16X1D \BU2/U0/grf.rf/mem/gdm.dm/Mram_RAM61 ( + .A0(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [0]), + .A1(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [1]), + .A2(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [2]), + .A3(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [3]), + .D(din_2[30]), + .DPRA0(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [0]), + .DPRA1(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [1]), + .DPRA2(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [2]), + .DPRA3(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [3]), + .WCLK(wr_clk), + .WE(\BU2/U0/grf.rf/mem/gdm.dm/write_ctrl_294 ), + .SPO(\NLW_BU2/U0/grf.rf/mem/gdm.dm/Mram_RAM61_SPO_UNCONNECTED ), + .DPO(\BU2/U0/grf.rf/mem/gdm.dm/N125 ) + ); + RAM16X1D \BU2/U0/grf.rf/mem/gdm.dm/Mram_RAM58 ( + .A0(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [0]), + .A1(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [1]), + .A2(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [2]), + .A3(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [3]), + .D(din_2[28]), + .DPRA0(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [0]), + .DPRA1(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [1]), + .DPRA2(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [2]), + .DPRA3(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [3]), + .WCLK(wr_clk), + .WE(\BU2/U0/grf.rf/mem/gdm.dm/write_ctrl1_296 ), + .SPO(\NLW_BU2/U0/grf.rf/mem/gdm.dm/Mram_RAM58_SPO_UNCONNECTED ), + .DPO(\BU2/U0/grf.rf/mem/gdm.dm/N119 ) + ); + RAM16X1D \BU2/U0/grf.rf/mem/gdm.dm/Mram_RAM57 ( + .A0(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [0]), + .A1(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [1]), + .A2(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [2]), + .A3(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [3]), + .D(din_2[28]), + .DPRA0(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [0]), + .DPRA1(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [1]), + .DPRA2(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [2]), + .DPRA3(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [3]), + .WCLK(wr_clk), + .WE(\BU2/U0/grf.rf/mem/gdm.dm/write_ctrl_294 ), + .SPO(\NLW_BU2/U0/grf.rf/mem/gdm.dm/Mram_RAM57_SPO_UNCONNECTED ), + .DPO(\BU2/U0/grf.rf/mem/gdm.dm/N117 ) + ); + RAM16X1D \BU2/U0/grf.rf/mem/gdm.dm/Mram_RAM56 ( + .A0(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [0]), + .A1(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [1]), + .A2(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [2]), + .A3(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [3]), + .D(din_2[27]), + .DPRA0(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [0]), + .DPRA1(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [1]), + .DPRA2(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [2]), + .DPRA3(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [3]), + .WCLK(wr_clk), + .WE(\BU2/U0/grf.rf/mem/gdm.dm/write_ctrl1_296 ), + .SPO(\NLW_BU2/U0/grf.rf/mem/gdm.dm/Mram_RAM56_SPO_UNCONNECTED ), + .DPO(\BU2/U0/grf.rf/mem/gdm.dm/N115 ) + ); + RAM16X1D \BU2/U0/grf.rf/mem/gdm.dm/Mram_RAM55 ( + .A0(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [0]), + .A1(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [1]), + .A2(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [2]), + .A3(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [3]), + .D(din_2[27]), + .DPRA0(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [0]), + .DPRA1(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [1]), + .DPRA2(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [2]), + .DPRA3(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [3]), + .WCLK(wr_clk), + .WE(\BU2/U0/grf.rf/mem/gdm.dm/write_ctrl_294 ), + .SPO(\NLW_BU2/U0/grf.rf/mem/gdm.dm/Mram_RAM55_SPO_UNCONNECTED ), + .DPO(\BU2/U0/grf.rf/mem/gdm.dm/N113 ) + ); + RAM16X1D \BU2/U0/grf.rf/mem/gdm.dm/Mram_RAM53 ( + .A0(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [0]), + .A1(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [1]), + .A2(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [2]), + .A3(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [3]), + .D(din_2[26]), + .DPRA0(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [0]), + .DPRA1(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [1]), + .DPRA2(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [2]), + .DPRA3(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [3]), + .WCLK(wr_clk), + .WE(\BU2/U0/grf.rf/mem/gdm.dm/write_ctrl_294 ), + .SPO(\NLW_BU2/U0/grf.rf/mem/gdm.dm/Mram_RAM53_SPO_UNCONNECTED ), + .DPO(\BU2/U0/grf.rf/mem/gdm.dm/N109 ) + ); + RAM16X1D \BU2/U0/grf.rf/mem/gdm.dm/Mram_RAM52 ( + .A0(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [0]), + .A1(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [1]), + .A2(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [2]), + .A3(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [3]), + .D(din_2[25]), + .DPRA0(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [0]), + .DPRA1(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [1]), + .DPRA2(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [2]), + .DPRA3(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [3]), + .WCLK(wr_clk), + .WE(\BU2/U0/grf.rf/mem/gdm.dm/write_ctrl1_296 ), + .SPO(\NLW_BU2/U0/grf.rf/mem/gdm.dm/Mram_RAM52_SPO_UNCONNECTED ), + .DPO(\BU2/U0/grf.rf/mem/gdm.dm/N107 ) + ); + RAM16X1D \BU2/U0/grf.rf/mem/gdm.dm/Mram_RAM54 ( + .A0(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [0]), + .A1(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [1]), + .A2(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [2]), + .A3(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [3]), + .D(din_2[26]), + .DPRA0(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [0]), + .DPRA1(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [1]), + .DPRA2(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [2]), + .DPRA3(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [3]), + .WCLK(wr_clk), + .WE(\BU2/U0/grf.rf/mem/gdm.dm/write_ctrl1_296 ), + .SPO(\NLW_BU2/U0/grf.rf/mem/gdm.dm/Mram_RAM54_SPO_UNCONNECTED ), + .DPO(\BU2/U0/grf.rf/mem/gdm.dm/N111 ) + ); + RAM16X1D \BU2/U0/grf.rf/mem/gdm.dm/Mram_RAM50 ( + .A0(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [0]), + .A1(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [1]), + .A2(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [2]), + .A3(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [3]), + .D(din_2[24]), + .DPRA0(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [0]), + .DPRA1(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [1]), + .DPRA2(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [2]), + .DPRA3(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [3]), + .WCLK(wr_clk), + .WE(\BU2/U0/grf.rf/mem/gdm.dm/write_ctrl1_296 ), + .SPO(\NLW_BU2/U0/grf.rf/mem/gdm.dm/Mram_RAM50_SPO_UNCONNECTED ), + .DPO(\BU2/U0/grf.rf/mem/gdm.dm/N103 ) + ); + RAM16X1D \BU2/U0/grf.rf/mem/gdm.dm/Mram_RAM49 ( + .A0(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [0]), + .A1(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [1]), + .A2(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [2]), + .A3(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [3]), + .D(din_2[24]), + .DPRA0(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [0]), + .DPRA1(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [1]), + .DPRA2(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [2]), + .DPRA3(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [3]), + .WCLK(wr_clk), + .WE(\BU2/U0/grf.rf/mem/gdm.dm/write_ctrl_294 ), + .SPO(\NLW_BU2/U0/grf.rf/mem/gdm.dm/Mram_RAM49_SPO_UNCONNECTED ), + .DPO(\BU2/U0/grf.rf/mem/gdm.dm/N101 ) + ); + RAM16X1D \BU2/U0/grf.rf/mem/gdm.dm/Mram_RAM51 ( + .A0(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [0]), + .A1(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [1]), + .A2(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [2]), + .A3(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [3]), + .D(din_2[25]), + .DPRA0(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [0]), + .DPRA1(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [1]), + .DPRA2(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [2]), + .DPRA3(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [3]), + .WCLK(wr_clk), + .WE(\BU2/U0/grf.rf/mem/gdm.dm/write_ctrl_294 ), + .SPO(\NLW_BU2/U0/grf.rf/mem/gdm.dm/Mram_RAM51_SPO_UNCONNECTED ), + .DPO(\BU2/U0/grf.rf/mem/gdm.dm/N105 ) + ); + RAM16X1D \BU2/U0/grf.rf/mem/gdm.dm/Mram_RAM47 ( + .A0(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [0]), + .A1(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [1]), + .A2(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [2]), + .A3(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [3]), + .D(din_2[23]), + .DPRA0(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [0]), + .DPRA1(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [1]), + .DPRA2(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [2]), + .DPRA3(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [3]), + .WCLK(wr_clk), + .WE(\BU2/U0/grf.rf/mem/gdm.dm/write_ctrl_294 ), + .SPO(\NLW_BU2/U0/grf.rf/mem/gdm.dm/Mram_RAM47_SPO_UNCONNECTED ), + .DPO(\BU2/U0/grf.rf/mem/gdm.dm/N97 ) + ); + RAM16X1D \BU2/U0/grf.rf/mem/gdm.dm/Mram_RAM46 ( + .A0(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [0]), + .A1(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [1]), + .A2(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [2]), + .A3(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [3]), + .D(din_2[22]), + .DPRA0(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [0]), + .DPRA1(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [1]), + .DPRA2(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [2]), + .DPRA3(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [3]), + .WCLK(wr_clk), + .WE(\BU2/U0/grf.rf/mem/gdm.dm/write_ctrl1_296 ), + .SPO(\NLW_BU2/U0/grf.rf/mem/gdm.dm/Mram_RAM46_SPO_UNCONNECTED ), + .DPO(\BU2/U0/grf.rf/mem/gdm.dm/N95 ) + ); + RAM16X1D \BU2/U0/grf.rf/mem/gdm.dm/Mram_RAM48 ( + .A0(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [0]), + .A1(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [1]), + .A2(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [2]), + .A3(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [3]), + .D(din_2[23]), + .DPRA0(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [0]), + .DPRA1(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [1]), + .DPRA2(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [2]), + .DPRA3(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [3]), + .WCLK(wr_clk), + .WE(\BU2/U0/grf.rf/mem/gdm.dm/write_ctrl1_296 ), + .SPO(\NLW_BU2/U0/grf.rf/mem/gdm.dm/Mram_RAM48_SPO_UNCONNECTED ), + .DPO(\BU2/U0/grf.rf/mem/gdm.dm/N99 ) + ); + RAM16X1D \BU2/U0/grf.rf/mem/gdm.dm/Mram_RAM45 ( + .A0(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [0]), + .A1(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [1]), + .A2(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [2]), + .A3(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [3]), + .D(din_2[22]), + .DPRA0(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [0]), + .DPRA1(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [1]), + .DPRA2(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [2]), + .DPRA3(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [3]), + .WCLK(wr_clk), + .WE(\BU2/U0/grf.rf/mem/gdm.dm/write_ctrl_294 ), + .SPO(\NLW_BU2/U0/grf.rf/mem/gdm.dm/Mram_RAM45_SPO_UNCONNECTED ), + .DPO(\BU2/U0/grf.rf/mem/gdm.dm/N93 ) + ); + RAM16X1D \BU2/U0/grf.rf/mem/gdm.dm/Mram_RAM44 ( + .A0(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [0]), + .A1(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [1]), + .A2(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [2]), + .A3(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [3]), + .D(din_2[21]), + .DPRA0(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [0]), + .DPRA1(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [1]), + .DPRA2(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [2]), + .DPRA3(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [3]), + .WCLK(wr_clk), + .WE(\BU2/U0/grf.rf/mem/gdm.dm/write_ctrl1_296 ), + .SPO(\NLW_BU2/U0/grf.rf/mem/gdm.dm/Mram_RAM44_SPO_UNCONNECTED ), + .DPO(\BU2/U0/grf.rf/mem/gdm.dm/N91 ) + ); + RAM16X1D \BU2/U0/grf.rf/mem/gdm.dm/Mram_RAM43 ( + .A0(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [0]), + .A1(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [1]), + .A2(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [2]), + .A3(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [3]), + .D(din_2[21]), + .DPRA0(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [0]), + .DPRA1(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [1]), + .DPRA2(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [2]), + .DPRA3(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [3]), + .WCLK(wr_clk), + .WE(\BU2/U0/grf.rf/mem/gdm.dm/write_ctrl_294 ), + .SPO(\NLW_BU2/U0/grf.rf/mem/gdm.dm/Mram_RAM43_SPO_UNCONNECTED ), + .DPO(\BU2/U0/grf.rf/mem/gdm.dm/N89 ) + ); + RAM16X1D \BU2/U0/grf.rf/mem/gdm.dm/Mram_RAM42 ( + .A0(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [0]), + .A1(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [1]), + .A2(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [2]), + .A3(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [3]), + .D(din_2[20]), + .DPRA0(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [0]), + .DPRA1(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [1]), + .DPRA2(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [2]), + .DPRA3(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [3]), + .WCLK(wr_clk), + .WE(\BU2/U0/grf.rf/mem/gdm.dm/write_ctrl1_296 ), + .SPO(\NLW_BU2/U0/grf.rf/mem/gdm.dm/Mram_RAM42_SPO_UNCONNECTED ), + .DPO(\BU2/U0/grf.rf/mem/gdm.dm/N87 ) + ); + RAM16X1D \BU2/U0/grf.rf/mem/gdm.dm/Mram_RAM40 ( + .A0(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [0]), + .A1(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [1]), + .A2(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [2]), + .A3(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [3]), + .D(din_2[19]), + .DPRA0(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [0]), + .DPRA1(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [1]), + .DPRA2(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [2]), + .DPRA3(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [3]), + .WCLK(wr_clk), + .WE(\BU2/U0/grf.rf/mem/gdm.dm/write_ctrl1_296 ), + .SPO(\NLW_BU2/U0/grf.rf/mem/gdm.dm/Mram_RAM40_SPO_UNCONNECTED ), + .DPO(\BU2/U0/grf.rf/mem/gdm.dm/N83 ) + ); + RAM16X1D \BU2/U0/grf.rf/mem/gdm.dm/Mram_RAM39 ( + .A0(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [0]), + .A1(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [1]), + .A2(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [2]), + .A3(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [3]), + .D(din_2[19]), + .DPRA0(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [0]), + .DPRA1(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [1]), + .DPRA2(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [2]), + .DPRA3(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [3]), + .WCLK(wr_clk), + .WE(\BU2/U0/grf.rf/mem/gdm.dm/write_ctrl_294 ), + .SPO(\NLW_BU2/U0/grf.rf/mem/gdm.dm/Mram_RAM39_SPO_UNCONNECTED ), + .DPO(\BU2/U0/grf.rf/mem/gdm.dm/N81 ) + ); + RAM16X1D \BU2/U0/grf.rf/mem/gdm.dm/Mram_RAM41 ( + .A0(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [0]), + .A1(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [1]), + .A2(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [2]), + .A3(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [3]), + .D(din_2[20]), + .DPRA0(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [0]), + .DPRA1(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [1]), + .DPRA2(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [2]), + .DPRA3(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [3]), + .WCLK(wr_clk), + .WE(\BU2/U0/grf.rf/mem/gdm.dm/write_ctrl_294 ), + .SPO(\NLW_BU2/U0/grf.rf/mem/gdm.dm/Mram_RAM41_SPO_UNCONNECTED ), + .DPO(\BU2/U0/grf.rf/mem/gdm.dm/N85 ) + ); + RAM16X1D \BU2/U0/grf.rf/mem/gdm.dm/Mram_RAM38 ( + .A0(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [0]), + .A1(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [1]), + .A2(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [2]), + .A3(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [3]), + .D(din_2[18]), + .DPRA0(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [0]), + .DPRA1(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [1]), + .DPRA2(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [2]), + .DPRA3(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [3]), + .WCLK(wr_clk), + .WE(\BU2/U0/grf.rf/mem/gdm.dm/write_ctrl1_296 ), + .SPO(\NLW_BU2/U0/grf.rf/mem/gdm.dm/Mram_RAM38_SPO_UNCONNECTED ), + .DPO(\BU2/U0/grf.rf/mem/gdm.dm/N79 ) + ); + RAM16X1D \BU2/U0/grf.rf/mem/gdm.dm/Mram_RAM37 ( + .A0(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [0]), + .A1(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [1]), + .A2(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [2]), + .A3(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [3]), + .D(din_2[18]), + .DPRA0(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [0]), + .DPRA1(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [1]), + .DPRA2(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [2]), + .DPRA3(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [3]), + .WCLK(wr_clk), + .WE(\BU2/U0/grf.rf/mem/gdm.dm/write_ctrl_294 ), + .SPO(\NLW_BU2/U0/grf.rf/mem/gdm.dm/Mram_RAM37_SPO_UNCONNECTED ), + .DPO(\BU2/U0/grf.rf/mem/gdm.dm/N77 ) + ); + RAM16X1D \BU2/U0/grf.rf/mem/gdm.dm/Mram_RAM36 ( + .A0(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [0]), + .A1(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [1]), + .A2(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [2]), + .A3(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [3]), + .D(din_2[17]), + .DPRA0(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [0]), + .DPRA1(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [1]), + .DPRA2(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [2]), + .DPRA3(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [3]), + .WCLK(wr_clk), + .WE(\BU2/U0/grf.rf/mem/gdm.dm/write_ctrl1_296 ), + .SPO(\NLW_BU2/U0/grf.rf/mem/gdm.dm/Mram_RAM36_SPO_UNCONNECTED ), + .DPO(\BU2/U0/grf.rf/mem/gdm.dm/N75 ) + ); + RAM16X1D \BU2/U0/grf.rf/mem/gdm.dm/Mram_RAM35 ( + .A0(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [0]), + .A1(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [1]), + .A2(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [2]), + .A3(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [3]), + .D(din_2[17]), + .DPRA0(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [0]), + .DPRA1(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [1]), + .DPRA2(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [2]), + .DPRA3(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [3]), + .WCLK(wr_clk), + .WE(\BU2/U0/grf.rf/mem/gdm.dm/write_ctrl_294 ), + .SPO(\NLW_BU2/U0/grf.rf/mem/gdm.dm/Mram_RAM35_SPO_UNCONNECTED ), + .DPO(\BU2/U0/grf.rf/mem/gdm.dm/N73 ) + ); + RAM16X1D \BU2/U0/grf.rf/mem/gdm.dm/Mram_RAM33 ( + .A0(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [0]), + .A1(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [1]), + .A2(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [2]), + .A3(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [3]), + .D(din_2[16]), + .DPRA0(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [0]), + .DPRA1(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [1]), + .DPRA2(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [2]), + .DPRA3(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [3]), + .WCLK(wr_clk), + .WE(\BU2/U0/grf.rf/mem/gdm.dm/write_ctrl_294 ), + .SPO(\NLW_BU2/U0/grf.rf/mem/gdm.dm/Mram_RAM33_SPO_UNCONNECTED ), + .DPO(\BU2/U0/grf.rf/mem/gdm.dm/N69 ) + ); + RAM16X1D \BU2/U0/grf.rf/mem/gdm.dm/Mram_RAM32 ( + .A0(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [0]), + .A1(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [1]), + .A2(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [2]), + .A3(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [3]), + .D(din_2[15]), + .DPRA0(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [0]), + .DPRA1(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [1]), + .DPRA2(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [2]), + .DPRA3(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [3]), + .WCLK(wr_clk), + .WE(\BU2/U0/grf.rf/mem/gdm.dm/write_ctrl1_296 ), + .SPO(\NLW_BU2/U0/grf.rf/mem/gdm.dm/Mram_RAM32_SPO_UNCONNECTED ), + .DPO(\BU2/U0/grf.rf/mem/gdm.dm/N67 ) + ); + RAM16X1D \BU2/U0/grf.rf/mem/gdm.dm/Mram_RAM34 ( + .A0(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [0]), + .A1(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [1]), + .A2(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [2]), + .A3(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [3]), + .D(din_2[16]), + .DPRA0(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [0]), + .DPRA1(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [1]), + .DPRA2(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [2]), + .DPRA3(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [3]), + .WCLK(wr_clk), + .WE(\BU2/U0/grf.rf/mem/gdm.dm/write_ctrl1_296 ), + .SPO(\NLW_BU2/U0/grf.rf/mem/gdm.dm/Mram_RAM34_SPO_UNCONNECTED ), + .DPO(\BU2/U0/grf.rf/mem/gdm.dm/N71 ) + ); + RAM16X1D \BU2/U0/grf.rf/mem/gdm.dm/Mram_RAM31 ( + .A0(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [0]), + .A1(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [1]), + .A2(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [2]), + .A3(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [3]), + .D(din_2[15]), + .DPRA0(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [0]), + .DPRA1(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [1]), + .DPRA2(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [2]), + .DPRA3(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [3]), + .WCLK(wr_clk), + .WE(\BU2/U0/grf.rf/mem/gdm.dm/write_ctrl_294 ), + .SPO(\NLW_BU2/U0/grf.rf/mem/gdm.dm/Mram_RAM31_SPO_UNCONNECTED ), + .DPO(\BU2/U0/grf.rf/mem/gdm.dm/N65 ) + ); + RAM16X1D \BU2/U0/grf.rf/mem/gdm.dm/Mram_RAM30 ( + .A0(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [0]), + .A1(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [1]), + .A2(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [2]), + .A3(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [3]), + .D(din_2[14]), + .DPRA0(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [0]), + .DPRA1(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [1]), + .DPRA2(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [2]), + .DPRA3(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [3]), + .WCLK(wr_clk), + .WE(\BU2/U0/grf.rf/mem/gdm.dm/write_ctrl1_296 ), + .SPO(\NLW_BU2/U0/grf.rf/mem/gdm.dm/Mram_RAM30_SPO_UNCONNECTED ), + .DPO(\BU2/U0/grf.rf/mem/gdm.dm/N63 ) + ); + RAM16X1D \BU2/U0/grf.rf/mem/gdm.dm/Mram_RAM29 ( + .A0(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [0]), + .A1(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [1]), + .A2(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [2]), + .A3(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [3]), + .D(din_2[14]), + .DPRA0(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [0]), + .DPRA1(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [1]), + .DPRA2(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [2]), + .DPRA3(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [3]), + .WCLK(wr_clk), + .WE(\BU2/U0/grf.rf/mem/gdm.dm/write_ctrl_294 ), + .SPO(\NLW_BU2/U0/grf.rf/mem/gdm.dm/Mram_RAM29_SPO_UNCONNECTED ), + .DPO(\BU2/U0/grf.rf/mem/gdm.dm/N61 ) + ); + RAM16X1D \BU2/U0/grf.rf/mem/gdm.dm/Mram_RAM28 ( + .A0(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [0]), + .A1(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [1]), + .A2(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [2]), + .A3(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [3]), + .D(din_2[13]), + .DPRA0(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [0]), + .DPRA1(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [1]), + .DPRA2(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [2]), + .DPRA3(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [3]), + .WCLK(wr_clk), + .WE(\BU2/U0/grf.rf/mem/gdm.dm/write_ctrl1_296 ), + .SPO(\NLW_BU2/U0/grf.rf/mem/gdm.dm/Mram_RAM28_SPO_UNCONNECTED ), + .DPO(\BU2/U0/grf.rf/mem/gdm.dm/N59 ) + ); + RAM16X1D \BU2/U0/grf.rf/mem/gdm.dm/Mram_RAM26 ( + .A0(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [0]), + .A1(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [1]), + .A2(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [2]), + .A3(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [3]), + .D(din_2[12]), + .DPRA0(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [0]), + .DPRA1(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [1]), + .DPRA2(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [2]), + .DPRA3(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [3]), + .WCLK(wr_clk), + .WE(\BU2/U0/grf.rf/mem/gdm.dm/write_ctrl1_296 ), + .SPO(\NLW_BU2/U0/grf.rf/mem/gdm.dm/Mram_RAM26_SPO_UNCONNECTED ), + .DPO(\BU2/U0/grf.rf/mem/gdm.dm/N55 ) + ); + RAM16X1D \BU2/U0/grf.rf/mem/gdm.dm/Mram_RAM25 ( + .A0(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [0]), + .A1(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [1]), + .A2(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [2]), + .A3(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [3]), + .D(din_2[12]), + .DPRA0(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [0]), + .DPRA1(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [1]), + .DPRA2(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [2]), + .DPRA3(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [3]), + .WCLK(wr_clk), + .WE(\BU2/U0/grf.rf/mem/gdm.dm/write_ctrl_294 ), + .SPO(\NLW_BU2/U0/grf.rf/mem/gdm.dm/Mram_RAM25_SPO_UNCONNECTED ), + .DPO(\BU2/U0/grf.rf/mem/gdm.dm/N53 ) + ); + RAM16X1D \BU2/U0/grf.rf/mem/gdm.dm/Mram_RAM27 ( + .A0(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [0]), + .A1(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [1]), + .A2(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [2]), + .A3(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [3]), + .D(din_2[13]), + .DPRA0(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [0]), + .DPRA1(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [1]), + .DPRA2(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [2]), + .DPRA3(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [3]), + .WCLK(wr_clk), + .WE(\BU2/U0/grf.rf/mem/gdm.dm/write_ctrl_294 ), + .SPO(\NLW_BU2/U0/grf.rf/mem/gdm.dm/Mram_RAM27_SPO_UNCONNECTED ), + .DPO(\BU2/U0/grf.rf/mem/gdm.dm/N57 ) + ); + RAM16X1D \BU2/U0/grf.rf/mem/gdm.dm/Mram_RAM24 ( + .A0(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [0]), + .A1(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [1]), + .A2(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [2]), + .A3(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [3]), + .D(din_2[11]), + .DPRA0(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [0]), + .DPRA1(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [1]), + .DPRA2(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [2]), + .DPRA3(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [3]), + .WCLK(wr_clk), + .WE(\BU2/U0/grf.rf/mem/gdm.dm/write_ctrl1_296 ), + .SPO(\NLW_BU2/U0/grf.rf/mem/gdm.dm/Mram_RAM24_SPO_UNCONNECTED ), + .DPO(\BU2/U0/grf.rf/mem/gdm.dm/N51 ) + ); + RAM16X1D \BU2/U0/grf.rf/mem/gdm.dm/Mram_RAM23 ( + .A0(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [0]), + .A1(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [1]), + .A2(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [2]), + .A3(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [3]), + .D(din_2[11]), + .DPRA0(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [0]), + .DPRA1(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [1]), + .DPRA2(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [2]), + .DPRA3(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [3]), + .WCLK(wr_clk), + .WE(\BU2/U0/grf.rf/mem/gdm.dm/write_ctrl_294 ), + .SPO(\NLW_BU2/U0/grf.rf/mem/gdm.dm/Mram_RAM23_SPO_UNCONNECTED ), + .DPO(\BU2/U0/grf.rf/mem/gdm.dm/N49 ) + ); + RAM16X1D \BU2/U0/grf.rf/mem/gdm.dm/Mram_RAM22 ( + .A0(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [0]), + .A1(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [1]), + .A2(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [2]), + .A3(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [3]), + .D(din_2[10]), + .DPRA0(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [0]), + .DPRA1(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [1]), + .DPRA2(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [2]), + .DPRA3(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [3]), + .WCLK(wr_clk), + .WE(\BU2/U0/grf.rf/mem/gdm.dm/write_ctrl1_296 ), + .SPO(\NLW_BU2/U0/grf.rf/mem/gdm.dm/Mram_RAM22_SPO_UNCONNECTED ), + .DPO(\BU2/U0/grf.rf/mem/gdm.dm/N47 ) + ); + RAM16X1D \BU2/U0/grf.rf/mem/gdm.dm/Mram_RAM21 ( + .A0(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [0]), + .A1(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [1]), + .A2(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [2]), + .A3(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [3]), + .D(din_2[10]), + .DPRA0(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [0]), + .DPRA1(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [1]), + .DPRA2(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [2]), + .DPRA3(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [3]), + .WCLK(wr_clk), + .WE(\BU2/U0/grf.rf/mem/gdm.dm/write_ctrl_294 ), + .SPO(\NLW_BU2/U0/grf.rf/mem/gdm.dm/Mram_RAM21_SPO_UNCONNECTED ), + .DPO(\BU2/U0/grf.rf/mem/gdm.dm/N45 ) + ); + RAM16X1D \BU2/U0/grf.rf/mem/gdm.dm/Mram_RAM19 ( + .A0(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [0]), + .A1(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [1]), + .A2(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [2]), + .A3(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [3]), + .D(din_2[9]), + .DPRA0(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [0]), + .DPRA1(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [1]), + .DPRA2(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [2]), + .DPRA3(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [3]), + .WCLK(wr_clk), + .WE(\BU2/U0/grf.rf/mem/gdm.dm/write_ctrl_294 ), + .SPO(\NLW_BU2/U0/grf.rf/mem/gdm.dm/Mram_RAM19_SPO_UNCONNECTED ), + .DPO(\BU2/U0/grf.rf/mem/gdm.dm/N41 ) + ); + RAM16X1D \BU2/U0/grf.rf/mem/gdm.dm/Mram_RAM18 ( + .A0(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [0]), + .A1(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [1]), + .A2(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [2]), + .A3(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [3]), + .D(din_2[8]), + .DPRA0(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [0]), + .DPRA1(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [1]), + .DPRA2(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [2]), + .DPRA3(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [3]), + .WCLK(wr_clk), + .WE(\BU2/U0/grf.rf/mem/gdm.dm/write_ctrl1_296 ), + .SPO(\NLW_BU2/U0/grf.rf/mem/gdm.dm/Mram_RAM18_SPO_UNCONNECTED ), + .DPO(\BU2/U0/grf.rf/mem/gdm.dm/N39 ) + ); + RAM16X1D \BU2/U0/grf.rf/mem/gdm.dm/Mram_RAM20 ( + .A0(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [0]), + .A1(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [1]), + .A2(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [2]), + .A3(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [3]), + .D(din_2[9]), + .DPRA0(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [0]), + .DPRA1(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [1]), + .DPRA2(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [2]), + .DPRA3(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [3]), + .WCLK(wr_clk), + .WE(\BU2/U0/grf.rf/mem/gdm.dm/write_ctrl1_296 ), + .SPO(\NLW_BU2/U0/grf.rf/mem/gdm.dm/Mram_RAM20_SPO_UNCONNECTED ), + .DPO(\BU2/U0/grf.rf/mem/gdm.dm/N43 ) + ); + RAM16X1D \BU2/U0/grf.rf/mem/gdm.dm/Mram_RAM17 ( + .A0(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [0]), + .A1(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [1]), + .A2(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [2]), + .A3(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [3]), + .D(din_2[8]), + .DPRA0(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [0]), + .DPRA1(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [1]), + .DPRA2(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [2]), + .DPRA3(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [3]), + .WCLK(wr_clk), + .WE(\BU2/U0/grf.rf/mem/gdm.dm/write_ctrl_294 ), + .SPO(\NLW_BU2/U0/grf.rf/mem/gdm.dm/Mram_RAM17_SPO_UNCONNECTED ), + .DPO(\BU2/U0/grf.rf/mem/gdm.dm/N37 ) + ); + RAM16X1D \BU2/U0/grf.rf/mem/gdm.dm/Mram_RAM16 ( + .A0(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [0]), + .A1(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [1]), + .A2(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [2]), + .A3(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [3]), + .D(din_2[7]), + .DPRA0(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [0]), + .DPRA1(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [1]), + .DPRA2(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [2]), + .DPRA3(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [3]), + .WCLK(wr_clk), + .WE(\BU2/U0/grf.rf/mem/gdm.dm/write_ctrl1_296 ), + .SPO(\NLW_BU2/U0/grf.rf/mem/gdm.dm/Mram_RAM16_SPO_UNCONNECTED ), + .DPO(\BU2/U0/grf.rf/mem/gdm.dm/N35 ) + ); + RAM16X1D \BU2/U0/grf.rf/mem/gdm.dm/Mram_RAM15 ( + .A0(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [0]), + .A1(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [1]), + .A2(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [2]), + .A3(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [3]), + .D(din_2[7]), + .DPRA0(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [0]), + .DPRA1(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [1]), + .DPRA2(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [2]), + .DPRA3(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [3]), + .WCLK(wr_clk), + .WE(\BU2/U0/grf.rf/mem/gdm.dm/write_ctrl_294 ), + .SPO(\NLW_BU2/U0/grf.rf/mem/gdm.dm/Mram_RAM15_SPO_UNCONNECTED ), + .DPO(\BU2/U0/grf.rf/mem/gdm.dm/N33 ) + ); + RAM16X1D \BU2/U0/grf.rf/mem/gdm.dm/Mram_RAM14 ( + .A0(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [0]), + .A1(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [1]), + .A2(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [2]), + .A3(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [3]), + .D(din_2[6]), + .DPRA0(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [0]), + .DPRA1(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [1]), + .DPRA2(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [2]), + .DPRA3(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [3]), + .WCLK(wr_clk), + .WE(\BU2/U0/grf.rf/mem/gdm.dm/write_ctrl1_296 ), + .SPO(\NLW_BU2/U0/grf.rf/mem/gdm.dm/Mram_RAM14_SPO_UNCONNECTED ), + .DPO(\BU2/U0/grf.rf/mem/gdm.dm/N31 ) + ); + RAM16X1D \BU2/U0/grf.rf/mem/gdm.dm/Mram_RAM12 ( + .A0(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [0]), + .A1(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [1]), + .A2(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [2]), + .A3(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [3]), + .D(din_2[5]), + .DPRA0(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [0]), + .DPRA1(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [1]), + .DPRA2(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [2]), + .DPRA3(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [3]), + .WCLK(wr_clk), + .WE(\BU2/U0/grf.rf/mem/gdm.dm/write_ctrl1_296 ), + .SPO(\NLW_BU2/U0/grf.rf/mem/gdm.dm/Mram_RAM12_SPO_UNCONNECTED ), + .DPO(\BU2/U0/grf.rf/mem/gdm.dm/N27 ) + ); + RAM16X1D \BU2/U0/grf.rf/mem/gdm.dm/Mram_RAM11 ( + .A0(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [0]), + .A1(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [1]), + .A2(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [2]), + .A3(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [3]), + .D(din_2[5]), + .DPRA0(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [0]), + .DPRA1(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [1]), + .DPRA2(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [2]), + .DPRA3(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [3]), + .WCLK(wr_clk), + .WE(\BU2/U0/grf.rf/mem/gdm.dm/write_ctrl_294 ), + .SPO(\NLW_BU2/U0/grf.rf/mem/gdm.dm/Mram_RAM11_SPO_UNCONNECTED ), + .DPO(\BU2/U0/grf.rf/mem/gdm.dm/N25 ) + ); + RAM16X1D \BU2/U0/grf.rf/mem/gdm.dm/Mram_RAM13 ( + .A0(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [0]), + .A1(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [1]), + .A2(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [2]), + .A3(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [3]), + .D(din_2[6]), + .DPRA0(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [0]), + .DPRA1(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [1]), + .DPRA2(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [2]), + .DPRA3(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [3]), + .WCLK(wr_clk), + .WE(\BU2/U0/grf.rf/mem/gdm.dm/write_ctrl_294 ), + .SPO(\NLW_BU2/U0/grf.rf/mem/gdm.dm/Mram_RAM13_SPO_UNCONNECTED ), + .DPO(\BU2/U0/grf.rf/mem/gdm.dm/N29 ) + ); + RAM16X1D \BU2/U0/grf.rf/mem/gdm.dm/Mram_RAM10 ( + .A0(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [0]), + .A1(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [1]), + .A2(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [2]), + .A3(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [3]), + .D(din_2[4]), + .DPRA0(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [0]), + .DPRA1(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [1]), + .DPRA2(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [2]), + .DPRA3(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [3]), + .WCLK(wr_clk), + .WE(\BU2/U0/grf.rf/mem/gdm.dm/write_ctrl1_296 ), + .SPO(\NLW_BU2/U0/grf.rf/mem/gdm.dm/Mram_RAM10_SPO_UNCONNECTED ), + .DPO(\BU2/U0/grf.rf/mem/gdm.dm/N23 ) + ); + RAM16X1D \BU2/U0/grf.rf/mem/gdm.dm/Mram_RAM9 ( + .A0(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [0]), + .A1(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [1]), + .A2(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [2]), + .A3(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [3]), + .D(din_2[4]), + .DPRA0(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [0]), + .DPRA1(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [1]), + .DPRA2(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [2]), + .DPRA3(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [3]), + .WCLK(wr_clk), + .WE(\BU2/U0/grf.rf/mem/gdm.dm/write_ctrl_294 ), + .SPO(\NLW_BU2/U0/grf.rf/mem/gdm.dm/Mram_RAM9_SPO_UNCONNECTED ), + .DPO(\BU2/U0/grf.rf/mem/gdm.dm/N21 ) + ); + RAM16X1D \BU2/U0/grf.rf/mem/gdm.dm/Mram_RAM8 ( + .A0(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [0]), + .A1(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [1]), + .A2(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [2]), + .A3(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [3]), + .D(din_2[3]), + .DPRA0(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [0]), + .DPRA1(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [1]), + .DPRA2(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [2]), + .DPRA3(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [3]), + .WCLK(wr_clk), + .WE(\BU2/U0/grf.rf/mem/gdm.dm/write_ctrl1_296 ), + .SPO(\NLW_BU2/U0/grf.rf/mem/gdm.dm/Mram_RAM8_SPO_UNCONNECTED ), + .DPO(\BU2/U0/grf.rf/mem/gdm.dm/N19 ) + ); + RAM16X1D \BU2/U0/grf.rf/mem/gdm.dm/Mram_RAM7 ( + .A0(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [0]), + .A1(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [1]), + .A2(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [2]), + .A3(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [3]), + .D(din_2[3]), + .DPRA0(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [0]), + .DPRA1(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [1]), + .DPRA2(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [2]), + .DPRA3(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [3]), + .WCLK(wr_clk), + .WE(\BU2/U0/grf.rf/mem/gdm.dm/write_ctrl_294 ), + .SPO(\NLW_BU2/U0/grf.rf/mem/gdm.dm/Mram_RAM7_SPO_UNCONNECTED ), + .DPO(\BU2/U0/grf.rf/mem/gdm.dm/N17 ) + ); + RAM16X1D \BU2/U0/grf.rf/mem/gdm.dm/Mram_RAM5 ( + .A0(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [0]), + .A1(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [1]), + .A2(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [2]), + .A3(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [3]), + .D(din_2[2]), + .DPRA0(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [0]), + .DPRA1(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [1]), + .DPRA2(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [2]), + .DPRA3(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [3]), + .WCLK(wr_clk), + .WE(\BU2/U0/grf.rf/mem/gdm.dm/write_ctrl_294 ), + .SPO(\NLW_BU2/U0/grf.rf/mem/gdm.dm/Mram_RAM5_SPO_UNCONNECTED ), + .DPO(\BU2/U0/grf.rf/mem/gdm.dm/N13 ) + ); + RAM16X1D \BU2/U0/grf.rf/mem/gdm.dm/Mram_RAM4 ( + .A0(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [0]), + .A1(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [1]), + .A2(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [2]), + .A3(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [3]), + .D(din_2[1]), + .DPRA0(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [0]), + .DPRA1(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [1]), + .DPRA2(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [2]), + .DPRA3(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [3]), + .WCLK(wr_clk), + .WE(\BU2/U0/grf.rf/mem/gdm.dm/write_ctrl1_296 ), + .SPO(\NLW_BU2/U0/grf.rf/mem/gdm.dm/Mram_RAM4_SPO_UNCONNECTED ), + .DPO(\BU2/U0/grf.rf/mem/gdm.dm/N11 ) + ); + RAM16X1D \BU2/U0/grf.rf/mem/gdm.dm/Mram_RAM6 ( + .A0(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [0]), + .A1(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [1]), + .A2(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [2]), + .A3(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [3]), + .D(din_2[2]), + .DPRA0(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [0]), + .DPRA1(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [1]), + .DPRA2(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [2]), + .DPRA3(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [3]), + .WCLK(wr_clk), + .WE(\BU2/U0/grf.rf/mem/gdm.dm/write_ctrl1_296 ), + .SPO(\NLW_BU2/U0/grf.rf/mem/gdm.dm/Mram_RAM6_SPO_UNCONNECTED ), + .DPO(\BU2/U0/grf.rf/mem/gdm.dm/N15 ) + ); + RAM16X1D \BU2/U0/grf.rf/mem/gdm.dm/Mram_RAM3 ( + .A0(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [0]), + .A1(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [1]), + .A2(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [2]), + .A3(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [3]), + .D(din_2[1]), + .DPRA0(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [0]), + .DPRA1(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [1]), + .DPRA2(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [2]), + .DPRA3(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [3]), + .WCLK(wr_clk), + .WE(\BU2/U0/grf.rf/mem/gdm.dm/write_ctrl_294 ), + .SPO(\NLW_BU2/U0/grf.rf/mem/gdm.dm/Mram_RAM3_SPO_UNCONNECTED ), + .DPO(\BU2/U0/grf.rf/mem/gdm.dm/N9 ) + ); + RAM16X1D \BU2/U0/grf.rf/mem/gdm.dm/Mram_RAM2 ( + .A0(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [0]), + .A1(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [1]), + .A2(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [2]), + .A3(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [3]), + .D(din_2[0]), + .DPRA0(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [0]), + .DPRA1(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [1]), + .DPRA2(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [2]), + .DPRA3(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [3]), + .WCLK(wr_clk), + .WE(\BU2/U0/grf.rf/mem/gdm.dm/write_ctrl1_296 ), + .SPO(\NLW_BU2/U0/grf.rf/mem/gdm.dm/Mram_RAM2_SPO_UNCONNECTED ), + .DPO(\BU2/U0/grf.rf/mem/gdm.dm/N7 ) + ); + RAM16X1D \BU2/U0/grf.rf/mem/gdm.dm/Mram_RAM1 ( + .A0(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [0]), + .A1(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [1]), + .A2(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [2]), + .A3(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [3]), + .D(din_2[0]), + .DPRA0(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [0]), + .DPRA1(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [1]), + .DPRA2(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [2]), + .DPRA3(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [3]), + .WCLK(wr_clk), + .WE(\BU2/U0/grf.rf/mem/gdm.dm/write_ctrl_294 ), + .SPO(\NLW_BU2/U0/grf.rf/mem/gdm.dm/Mram_RAM1_SPO_UNCONNECTED ), + .DPO(\BU2/U0/grf.rf/mem/gdm.dm/N5 ) + ); + FDCE #( + .INIT ( 1'b0 )) + \BU2/U0/grf.rf/mem/gdm.dm/dout_i_35 ( + .C(rd_clk), + .CE(\BU2/U0/grf.rf/gl0.rd/gr1.rfwft/Mmux_RAM_RD_EN_FWFT21_160 ), + .CLR(\BU2/U0/grf.rf/rstblk/rd_rst_reg [0]), + .D(\BU2/U0/grf.rf/mem/gdm.dm/_varindex0000 [35]), + .Q(\BU2/U0/grf.rf/mem/gdm.dm/dout_i [35]) + ); + FDCE #( + .INIT ( 1'b0 )) + \BU2/U0/grf.rf/mem/gdm.dm/dout_i_34 ( + .C(rd_clk), + .CE(\BU2/U0/grf.rf/gl0.rd/gr1.rfwft/Mmux_RAM_RD_EN_FWFT21_160 ), + .CLR(\BU2/U0/grf.rf/rstblk/rd_rst_reg [0]), + .D(\BU2/U0/grf.rf/mem/gdm.dm/_varindex0000 [34]), + .Q(\BU2/U0/grf.rf/mem/gdm.dm/dout_i [34]) + ); + FDCE #( + .INIT ( 1'b0 )) + \BU2/U0/grf.rf/mem/gdm.dm/dout_i_33 ( + .C(rd_clk), + .CE(\BU2/U0/grf.rf/gl0.rd/gr1.rfwft/Mmux_RAM_RD_EN_FWFT21_160 ), + .CLR(\BU2/U0/grf.rf/rstblk/rd_rst_reg [0]), + .D(\BU2/U0/grf.rf/mem/gdm.dm/_varindex0000 [33]), + .Q(\BU2/U0/grf.rf/mem/gdm.dm/dout_i [33]) + ); + FDCE #( + .INIT ( 1'b0 )) + \BU2/U0/grf.rf/mem/gdm.dm/dout_i_32 ( + .C(rd_clk), + .CE(\BU2/U0/grf.rf/gl0.rd/gr1.rfwft/Mmux_RAM_RD_EN_FWFT21_160 ), + .CLR(\BU2/U0/grf.rf/rstblk/rd_rst_reg [0]), + .D(\BU2/U0/grf.rf/mem/gdm.dm/_varindex0000 [32]), + .Q(\BU2/U0/grf.rf/mem/gdm.dm/dout_i [32]) + ); + FDCE #( + .INIT ( 1'b0 )) + \BU2/U0/grf.rf/mem/gdm.dm/dout_i_31 ( + .C(rd_clk), + .CE(\BU2/U0/grf.rf/gl0.rd/gr1.rfwft/Mmux_RAM_RD_EN_FWFT21_160 ), + .CLR(\BU2/U0/grf.rf/rstblk/rd_rst_reg [0]), + .D(\BU2/U0/grf.rf/mem/gdm.dm/_varindex0000 [31]), + .Q(\BU2/U0/grf.rf/mem/gdm.dm/dout_i [31]) + ); + FDCE #( + .INIT ( 1'b0 )) + \BU2/U0/grf.rf/mem/gdm.dm/dout_i_30 ( + .C(rd_clk), + .CE(\BU2/U0/grf.rf/gl0.rd/gr1.rfwft/Mmux_RAM_RD_EN_FWFT21_160 ), + .CLR(\BU2/U0/grf.rf/rstblk/rd_rst_reg [0]), + .D(\BU2/U0/grf.rf/mem/gdm.dm/_varindex0000 [30]), + .Q(\BU2/U0/grf.rf/mem/gdm.dm/dout_i [30]) + ); + FDCE #( + .INIT ( 1'b0 )) + \BU2/U0/grf.rf/mem/gdm.dm/dout_i_29 ( + .C(rd_clk), + .CE(\BU2/U0/grf.rf/gl0.rd/gr1.rfwft/Mmux_RAM_RD_EN_FWFT21_160 ), + .CLR(\BU2/U0/grf.rf/rstblk/rd_rst_reg [0]), + .D(\BU2/U0/grf.rf/mem/gdm.dm/_varindex0000 [29]), + .Q(\BU2/U0/grf.rf/mem/gdm.dm/dout_i [29]) + ); + FDCE #( + .INIT ( 1'b0 )) + \BU2/U0/grf.rf/mem/gdm.dm/dout_i_28 ( + .C(rd_clk), + .CE(\BU2/U0/grf.rf/gl0.rd/gr1.rfwft/Mmux_RAM_RD_EN_FWFT21_160 ), + .CLR(\BU2/U0/grf.rf/rstblk/rd_rst_reg [0]), + .D(\BU2/U0/grf.rf/mem/gdm.dm/_varindex0000 [28]), + .Q(\BU2/U0/grf.rf/mem/gdm.dm/dout_i [28]) + ); + FDCE #( + .INIT ( 1'b0 )) + \BU2/U0/grf.rf/mem/gdm.dm/dout_i_27 ( + .C(rd_clk), + .CE(\BU2/U0/grf.rf/gl0.rd/gr1.rfwft/Mmux_RAM_RD_EN_FWFT21_160 ), + .CLR(\BU2/U0/grf.rf/rstblk/rd_rst_reg [0]), + .D(\BU2/U0/grf.rf/mem/gdm.dm/_varindex0000 [27]), + .Q(\BU2/U0/grf.rf/mem/gdm.dm/dout_i [27]) + ); + FDCE #( + .INIT ( 1'b0 )) + \BU2/U0/grf.rf/mem/gdm.dm/dout_i_26 ( + .C(rd_clk), + .CE(\BU2/U0/grf.rf/gl0.rd/gr1.rfwft/Mmux_RAM_RD_EN_FWFT21_160 ), + .CLR(\BU2/U0/grf.rf/rstblk/rd_rst_reg [0]), + .D(\BU2/U0/grf.rf/mem/gdm.dm/_varindex0000 [26]), + .Q(\BU2/U0/grf.rf/mem/gdm.dm/dout_i [26]) + ); + FDCE #( + .INIT ( 1'b0 )) + \BU2/U0/grf.rf/mem/gdm.dm/dout_i_25 ( + .C(rd_clk), + .CE(\BU2/U0/grf.rf/gl0.rd/gr1.rfwft/Mmux_RAM_RD_EN_FWFT21_160 ), + .CLR(\BU2/U0/grf.rf/rstblk/rd_rst_reg [0]), + .D(\BU2/U0/grf.rf/mem/gdm.dm/_varindex0000 [25]), + .Q(\BU2/U0/grf.rf/mem/gdm.dm/dout_i [25]) + ); + FDCE #( + .INIT ( 1'b0 )) + \BU2/U0/grf.rf/mem/gdm.dm/dout_i_24 ( + .C(rd_clk), + .CE(\BU2/U0/grf.rf/gl0.rd/gr1.rfwft/Mmux_RAM_RD_EN_FWFT21_160 ), + .CLR(\BU2/U0/grf.rf/rstblk/rd_rst_reg [0]), + .D(\BU2/U0/grf.rf/mem/gdm.dm/_varindex0000 [24]), + .Q(\BU2/U0/grf.rf/mem/gdm.dm/dout_i [24]) + ); + FDCE #( + .INIT ( 1'b0 )) + \BU2/U0/grf.rf/mem/gdm.dm/dout_i_23 ( + .C(rd_clk), + .CE(\BU2/U0/grf.rf/gl0.rd/gr1.rfwft/Mmux_RAM_RD_EN_FWFT21_160 ), + .CLR(\BU2/U0/grf.rf/rstblk/rd_rst_reg [0]), + .D(\BU2/U0/grf.rf/mem/gdm.dm/_varindex0000 [23]), + .Q(\BU2/U0/grf.rf/mem/gdm.dm/dout_i [23]) + ); + FDCE #( + .INIT ( 1'b0 )) + \BU2/U0/grf.rf/mem/gdm.dm/dout_i_22 ( + .C(rd_clk), + .CE(\BU2/U0/grf.rf/gl0.rd/gr1.rfwft/Mmux_RAM_RD_EN_FWFT21_160 ), + .CLR(\BU2/U0/grf.rf/rstblk/rd_rst_reg [0]), + .D(\BU2/U0/grf.rf/mem/gdm.dm/_varindex0000 [22]), + .Q(\BU2/U0/grf.rf/mem/gdm.dm/dout_i [22]) + ); + FDCE #( + .INIT ( 1'b0 )) + \BU2/U0/grf.rf/mem/gdm.dm/dout_i_21 ( + .C(rd_clk), + .CE(\BU2/U0/grf.rf/gl0.rd/gr1.rfwft/Mmux_RAM_RD_EN_FWFT21_160 ), + .CLR(\BU2/U0/grf.rf/rstblk/rd_rst_reg [0]), + .D(\BU2/U0/grf.rf/mem/gdm.dm/_varindex0000 [21]), + .Q(\BU2/U0/grf.rf/mem/gdm.dm/dout_i [21]) + ); + FDCE #( + .INIT ( 1'b0 )) + \BU2/U0/grf.rf/mem/gdm.dm/dout_i_20 ( + .C(rd_clk), + .CE(\BU2/U0/grf.rf/gl0.rd/gr1.rfwft/Mmux_RAM_RD_EN_FWFT21_160 ), + .CLR(\BU2/U0/grf.rf/rstblk/rd_rst_reg [0]), + .D(\BU2/U0/grf.rf/mem/gdm.dm/_varindex0000 [20]), + .Q(\BU2/U0/grf.rf/mem/gdm.dm/dout_i [20]) + ); + FDCE #( + .INIT ( 1'b0 )) + \BU2/U0/grf.rf/mem/gdm.dm/dout_i_19 ( + .C(rd_clk), + .CE(\BU2/U0/grf.rf/gl0.rd/gr1.rfwft/Mmux_RAM_RD_EN_FWFT21_160 ), + .CLR(\BU2/U0/grf.rf/rstblk/rd_rst_reg [0]), + .D(\BU2/U0/grf.rf/mem/gdm.dm/_varindex0000 [19]), + .Q(\BU2/U0/grf.rf/mem/gdm.dm/dout_i [19]) + ); + FDCE #( + .INIT ( 1'b0 )) + \BU2/U0/grf.rf/mem/gdm.dm/dout_i_18 ( + .C(rd_clk), + .CE(\BU2/U0/grf.rf/gl0.rd/gr1.rfwft/Mmux_RAM_RD_EN_FWFT21_160 ), + .CLR(\BU2/U0/grf.rf/rstblk/rd_rst_reg [0]), + .D(\BU2/U0/grf.rf/mem/gdm.dm/_varindex0000 [18]), + .Q(\BU2/U0/grf.rf/mem/gdm.dm/dout_i [18]) + ); + FDCE #( + .INIT ( 1'b0 )) + \BU2/U0/grf.rf/mem/gdm.dm/dout_i_17 ( + .C(rd_clk), + .CE(\BU2/U0/grf.rf/gl0.rd/gr1.rfwft/Mmux_RAM_RD_EN_FWFT21_160 ), + .CLR(\BU2/U0/grf.rf/rstblk/rd_rst_reg [0]), + .D(\BU2/U0/grf.rf/mem/gdm.dm/_varindex0000 [17]), + .Q(\BU2/U0/grf.rf/mem/gdm.dm/dout_i [17]) + ); + FDCE #( + .INIT ( 1'b0 )) + \BU2/U0/grf.rf/mem/gdm.dm/dout_i_16 ( + .C(rd_clk), + .CE(\BU2/U0/grf.rf/gl0.rd/gr1.rfwft/Mmux_RAM_RD_EN_FWFT21_160 ), + .CLR(\BU2/U0/grf.rf/rstblk/rd_rst_reg [0]), + .D(\BU2/U0/grf.rf/mem/gdm.dm/_varindex0000 [16]), + .Q(\BU2/U0/grf.rf/mem/gdm.dm/dout_i [16]) + ); + FDCE #( + .INIT ( 1'b0 )) + \BU2/U0/grf.rf/mem/gdm.dm/dout_i_15 ( + .C(rd_clk), + .CE(\BU2/U0/grf.rf/gl0.rd/gr1.rfwft/Mmux_RAM_RD_EN_FWFT21_160 ), + .CLR(\BU2/U0/grf.rf/rstblk/rd_rst_reg [0]), + .D(\BU2/U0/grf.rf/mem/gdm.dm/_varindex0000 [15]), + .Q(\BU2/U0/grf.rf/mem/gdm.dm/dout_i [15]) + ); + FDCE #( + .INIT ( 1'b0 )) + \BU2/U0/grf.rf/mem/gdm.dm/dout_i_14 ( + .C(rd_clk), + .CE(\BU2/U0/grf.rf/gl0.rd/gr1.rfwft/Mmux_RAM_RD_EN_FWFT21_160 ), + .CLR(\BU2/U0/grf.rf/rstblk/rd_rst_reg [0]), + .D(\BU2/U0/grf.rf/mem/gdm.dm/_varindex0000 [14]), + .Q(\BU2/U0/grf.rf/mem/gdm.dm/dout_i [14]) + ); + FDCE #( + .INIT ( 1'b0 )) + \BU2/U0/grf.rf/mem/gdm.dm/dout_i_13 ( + .C(rd_clk), + .CE(\BU2/U0/grf.rf/gl0.rd/gr1.rfwft/Mmux_RAM_RD_EN_FWFT21_160 ), + .CLR(\BU2/U0/grf.rf/rstblk/rd_rst_reg [0]), + .D(\BU2/U0/grf.rf/mem/gdm.dm/_varindex0000 [13]), + .Q(\BU2/U0/grf.rf/mem/gdm.dm/dout_i [13]) + ); + FDCE #( + .INIT ( 1'b0 )) + \BU2/U0/grf.rf/mem/gdm.dm/dout_i_12 ( + .C(rd_clk), + .CE(\BU2/U0/grf.rf/gl0.rd/gr1.rfwft/Mmux_RAM_RD_EN_FWFT21_160 ), + .CLR(\BU2/U0/grf.rf/rstblk/rd_rst_reg [0]), + .D(\BU2/U0/grf.rf/mem/gdm.dm/_varindex0000 [12]), + .Q(\BU2/U0/grf.rf/mem/gdm.dm/dout_i [12]) + ); + FDCE #( + .INIT ( 1'b0 )) + \BU2/U0/grf.rf/mem/gdm.dm/dout_i_11 ( + .C(rd_clk), + .CE(\BU2/U0/grf.rf/gl0.rd/gr1.rfwft/Mmux_RAM_RD_EN_FWFT21_160 ), + .CLR(\BU2/U0/grf.rf/rstblk/rd_rst_reg [0]), + .D(\BU2/U0/grf.rf/mem/gdm.dm/_varindex0000 [11]), + .Q(\BU2/U0/grf.rf/mem/gdm.dm/dout_i [11]) + ); + FDCE #( + .INIT ( 1'b0 )) + \BU2/U0/grf.rf/mem/gdm.dm/dout_i_10 ( + .C(rd_clk), + .CE(\BU2/U0/grf.rf/gl0.rd/gr1.rfwft/Mmux_RAM_RD_EN_FWFT21_160 ), + .CLR(\BU2/U0/grf.rf/rstblk/rd_rst_reg [0]), + .D(\BU2/U0/grf.rf/mem/gdm.dm/_varindex0000 [10]), + .Q(\BU2/U0/grf.rf/mem/gdm.dm/dout_i [10]) + ); + FDCE #( + .INIT ( 1'b0 )) + \BU2/U0/grf.rf/mem/gdm.dm/dout_i_9 ( + .C(rd_clk), + .CE(\BU2/U0/grf.rf/gl0.rd/gr1.rfwft/Mmux_RAM_RD_EN_FWFT21_160 ), + .CLR(\BU2/U0/grf.rf/rstblk/rd_rst_reg [0]), + .D(\BU2/U0/grf.rf/mem/gdm.dm/_varindex0000 [9]), + .Q(\BU2/U0/grf.rf/mem/gdm.dm/dout_i [9]) + ); + FDCE #( + .INIT ( 1'b0 )) + \BU2/U0/grf.rf/mem/gdm.dm/dout_i_8 ( + .C(rd_clk), + .CE(\BU2/U0/grf.rf/gl0.rd/gr1.rfwft/Mmux_RAM_RD_EN_FWFT21_160 ), + .CLR(\BU2/U0/grf.rf/rstblk/rd_rst_reg [0]), + .D(\BU2/U0/grf.rf/mem/gdm.dm/_varindex0000 [8]), + .Q(\BU2/U0/grf.rf/mem/gdm.dm/dout_i [8]) + ); + FDCE #( + .INIT ( 1'b0 )) + \BU2/U0/grf.rf/mem/gdm.dm/dout_i_7 ( + .C(rd_clk), + .CE(\BU2/U0/grf.rf/gl0.rd/gr1.rfwft/Mmux_RAM_RD_EN_FWFT21_160 ), + .CLR(\BU2/U0/grf.rf/rstblk/rd_rst_reg [0]), + .D(\BU2/U0/grf.rf/mem/gdm.dm/_varindex0000 [7]), + .Q(\BU2/U0/grf.rf/mem/gdm.dm/dout_i [7]) + ); + FDCE #( + .INIT ( 1'b0 )) + \BU2/U0/grf.rf/mem/gdm.dm/dout_i_6 ( + .C(rd_clk), + .CE(\BU2/U0/grf.rf/gl0.rd/gr1.rfwft/Mmux_RAM_RD_EN_FWFT21_160 ), + .CLR(\BU2/U0/grf.rf/rstblk/rd_rst_reg [0]), + .D(\BU2/U0/grf.rf/mem/gdm.dm/_varindex0000 [6]), + .Q(\BU2/U0/grf.rf/mem/gdm.dm/dout_i [6]) + ); + FDCE #( + .INIT ( 1'b0 )) + \BU2/U0/grf.rf/mem/gdm.dm/dout_i_5 ( + .C(rd_clk), + .CE(\BU2/U0/grf.rf/gl0.rd/gr1.rfwft/Mmux_RAM_RD_EN_FWFT21_160 ), + .CLR(\BU2/U0/grf.rf/rstblk/rd_rst_reg [0]), + .D(\BU2/U0/grf.rf/mem/gdm.dm/_varindex0000 [5]), + .Q(\BU2/U0/grf.rf/mem/gdm.dm/dout_i [5]) + ); + FDCE #( + .INIT ( 1'b0 )) + \BU2/U0/grf.rf/mem/gdm.dm/dout_i_4 ( + .C(rd_clk), + .CE(\BU2/U0/grf.rf/gl0.rd/gr1.rfwft/Mmux_RAM_RD_EN_FWFT21_160 ), + .CLR(\BU2/U0/grf.rf/rstblk/rd_rst_reg [0]), + .D(\BU2/U0/grf.rf/mem/gdm.dm/_varindex0000 [4]), + .Q(\BU2/U0/grf.rf/mem/gdm.dm/dout_i [4]) + ); + FDCE #( + .INIT ( 1'b0 )) + \BU2/U0/grf.rf/mem/gdm.dm/dout_i_3 ( + .C(rd_clk), + .CE(\BU2/U0/grf.rf/gl0.rd/gr1.rfwft/Mmux_RAM_RD_EN_FWFT21_160 ), + .CLR(\BU2/U0/grf.rf/rstblk/rd_rst_reg [0]), + .D(\BU2/U0/grf.rf/mem/gdm.dm/_varindex0000 [3]), + .Q(\BU2/U0/grf.rf/mem/gdm.dm/dout_i [3]) + ); + FDCE #( + .INIT ( 1'b0 )) + \BU2/U0/grf.rf/mem/gdm.dm/dout_i_2 ( + .C(rd_clk), + .CE(\BU2/U0/grf.rf/gl0.rd/gr1.rfwft/Mmux_RAM_RD_EN_FWFT21_160 ), + .CLR(\BU2/U0/grf.rf/rstblk/rd_rst_reg [0]), + .D(\BU2/U0/grf.rf/mem/gdm.dm/_varindex0000 [2]), + .Q(\BU2/U0/grf.rf/mem/gdm.dm/dout_i [2]) + ); + FDCE #( + .INIT ( 1'b0 )) + \BU2/U0/grf.rf/mem/gdm.dm/dout_i_1 ( + .C(rd_clk), + .CE(\BU2/U0/grf.rf/gl0.rd/gr1.rfwft/Mmux_RAM_RD_EN_FWFT21_160 ), + .CLR(\BU2/U0/grf.rf/rstblk/rd_rst_reg [0]), + .D(\BU2/U0/grf.rf/mem/gdm.dm/_varindex0000 [1]), + .Q(\BU2/U0/grf.rf/mem/gdm.dm/dout_i [1]) + ); + FDCE #( + .INIT ( 1'b0 )) + \BU2/U0/grf.rf/mem/gdm.dm/dout_i_0 ( + .C(rd_clk), + .CE(\BU2/U0/grf.rf/gl0.rd/gr1.rfwft/Mmux_RAM_RD_EN_FWFT21_160 ), + .CLR(\BU2/U0/grf.rf/rstblk/rd_rst_reg [0]), + .D(\BU2/U0/grf.rf/mem/gdm.dm/_varindex0000 [0]), + .Q(\BU2/U0/grf.rf/mem/gdm.dm/dout_i [0]) + ); + FDCE #( + .INIT ( 1'b0 )) + \BU2/U0/grf.rf/gl0.wr/wpntr/count_d3_0 ( + .C(wr_clk), + .CE(\BU2/U0/grf.rf/gl0.wr/ram_wr_en_i1_197 ), + .CLR(\BU2/U0/grf.rf/rstblk/wr_rst_reg [1]), + .D(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d2 [0]), + .Q(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [0]) + ); + FDCE #( + .INIT ( 1'b0 )) + \BU2/U0/grf.rf/gl0.wr/wpntr/count_d3_1 ( + .C(wr_clk), + .CE(\BU2/U0/grf.rf/gl0.wr/ram_wr_en_i1_197 ), + .CLR(\BU2/U0/grf.rf/rstblk/wr_rst_reg [1]), + .D(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d2 [1]), + .Q(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [1]) + ); + FDCE #( + .INIT ( 1'b0 )) + \BU2/U0/grf.rf/gl0.wr/wpntr/count_d3_2 ( + .C(wr_clk), + .CE(\BU2/U0/grf.rf/gl0.wr/ram_wr_en_i1_197 ), + .CLR(\BU2/U0/grf.rf/rstblk/wr_rst_reg [1]), + .D(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d2 [2]), + .Q(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [2]) + ); + FDCE #( + .INIT ( 1'b0 )) + \BU2/U0/grf.rf/gl0.wr/wpntr/count_d3_3 ( + .C(wr_clk), + .CE(\BU2/U0/grf.rf/gl0.wr/ram_wr_en_i1_197 ), + .CLR(\BU2/U0/grf.rf/rstblk/wr_rst_reg [1]), + .D(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d2 [3]), + .Q(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [3]) + ); + FDCE #( + .INIT ( 1'b0 )) + \BU2/U0/grf.rf/gl0.wr/wpntr/count_d3_4 ( + .C(wr_clk), + .CE(\BU2/U0/grf.rf/gl0.wr/ram_wr_en_i1_197 ), + .CLR(\BU2/U0/grf.rf/rstblk/wr_rst_reg [1]), + .D(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d2 [4]), + .Q(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [4]) + ); + FDCE #( + .INIT ( 1'b0 )) + \BU2/U0/grf.rf/gl0.wr/wpntr/count_d2_4 ( + .C(wr_clk), + .CE(\BU2/U0/grf.rf/gl0.wr/ram_wr_en_i1_197 ), + .CLR(\BU2/U0/grf.rf/rstblk/wr_rst_reg [1]), + .D(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d1 [4]), + .Q(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d2 [4]) + ); + FDCE #( + .INIT ( 1'b0 )) + \BU2/U0/grf.rf/gl0.wr/wpntr/count_d2_3 ( + .C(wr_clk), + .CE(\BU2/U0/grf.rf/gl0.wr/ram_wr_en_i1_197 ), + .CLR(\BU2/U0/grf.rf/rstblk/wr_rst_reg [1]), + .D(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d1 [3]), + .Q(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d2 [3]) + ); + FDCE #( + .INIT ( 1'b0 )) + \BU2/U0/grf.rf/gl0.wr/wpntr/count_d2_1 ( + .C(wr_clk), + .CE(\BU2/U0/grf.rf/gl0.wr/ram_wr_en_i1_197 ), + .CLR(\BU2/U0/grf.rf/rstblk/wr_rst_reg [1]), + .D(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d1 [1]), + .Q(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d2 [1]) + ); + FDPE #( + .INIT ( 1'b1 )) + \BU2/U0/grf.rf/gl0.wr/wpntr/count_d2_0 ( + .C(wr_clk), + .CE(\BU2/U0/grf.rf/gl0.wr/ram_wr_en_i1_197 ), + .D(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d1 [0]), + .PRE(\BU2/U0/grf.rf/rstblk/wr_rst_reg [1]), + .Q(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d2 [0]) + ); + FDCE #( + .INIT ( 1'b0 )) + \BU2/U0/grf.rf/gl0.wr/wpntr/count_d2_2 ( + .C(wr_clk), + .CE(\BU2/U0/grf.rf/gl0.wr/ram_wr_en_i1_197 ), + .CLR(\BU2/U0/grf.rf/rstblk/wr_rst_reg [1]), + .D(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d1 [2]), + .Q(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d2 [2]) + ); + FDCE #( + .INIT ( 1'b0 )) + \BU2/U0/grf.rf/gl0.wr/wpntr/count_d1_4 ( + .C(wr_clk), + .CE(\BU2/U0/grf.rf/gl0.wr/ram_wr_en_i1_197 ), + .CLR(\BU2/U0/grf.rf/rstblk/wr_rst_reg [1]), + .D(\BU2/U0/grf.rf/gl0.wr/wpntr/count [4]), + .Q(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d1 [4]) + ); + FDCE #( + .INIT ( 1'b0 )) + \BU2/U0/grf.rf/gl0.wr/wpntr/count_d1_3 ( + .C(wr_clk), + .CE(\BU2/U0/grf.rf/gl0.wr/ram_wr_en_i1_197 ), + .CLR(\BU2/U0/grf.rf/rstblk/wr_rst_reg [1]), + .D(\BU2/U0/grf.rf/gl0.wr/wpntr/count [3]), + .Q(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d1 [3]) + ); + FDPE #( + .INIT ( 1'b1 )) + \BU2/U0/grf.rf/gl0.wr/wpntr/count_d1_1 ( + .C(wr_clk), + .CE(\BU2/U0/grf.rf/gl0.wr/ram_wr_en_i1_197 ), + .D(\BU2/U0/grf.rf/gl0.wr/wpntr/count [1]), + .PRE(\BU2/U0/grf.rf/rstblk/wr_rst_reg [1]), + .Q(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d1 [1]) + ); + FDCE #( + .INIT ( 1'b0 )) + \BU2/U0/grf.rf/gl0.wr/wpntr/count_d1_0 ( + .C(wr_clk), + .CE(\BU2/U0/grf.rf/gl0.wr/ram_wr_en_i1_197 ), + .CLR(\BU2/U0/grf.rf/rstblk/wr_rst_reg [1]), + .D(\BU2/U0/grf.rf/gl0.wr/wpntr/count [0]), + .Q(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d1 [0]) + ); + FDCE #( + .INIT ( 1'b0 )) + \BU2/U0/grf.rf/gl0.wr/wpntr/count_d1_2 ( + .C(wr_clk), + .CE(\BU2/U0/grf.rf/gl0.wr/ram_wr_en_i1_197 ), + .CLR(\BU2/U0/grf.rf/rstblk/wr_rst_reg [1]), + .D(\BU2/U0/grf.rf/gl0.wr/wpntr/count [2]), + .Q(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d1 [2]) + ); + FDCE #( + .INIT ( 1'b0 )) + \BU2/U0/grf.rf/gl0.wr/wpntr/count_2 ( + .C(wr_clk), + .CE(\BU2/U0/grf.rf/gl0.wr/ram_wr_en_i1_197 ), + .CLR(\BU2/U0/grf.rf/rstblk/wr_rst_reg [1]), + .D(\BU2/U0/grf.rf/gl0.wr/wpntr/Mcount_count2 ), + .Q(\BU2/U0/grf.rf/gl0.wr/wpntr/count [2]) + ); + FDPE #( + .INIT ( 1'b1 )) + \BU2/U0/grf.rf/gl0.wr/wpntr/count_0 ( + .C(wr_clk), + .CE(\BU2/U0/grf.rf/gl0.wr/ram_wr_en_i1_197 ), + .D(\BU2/U0/grf.rf/gl0.wr/wpntr/Mcount_count ), + .PRE(\BU2/U0/grf.rf/rstblk/wr_rst_reg [1]), + .Q(\BU2/U0/grf.rf/gl0.wr/wpntr/count [0]) + ); + FDPE #( + .INIT ( 1'b1 )) + \BU2/U0/grf.rf/gl0.wr/wpntr/count_1 ( + .C(wr_clk), + .CE(\BU2/U0/grf.rf/gl0.wr/ram_wr_en_i1_197 ), + .D(\BU2/U0/grf.rf/gl0.wr/wpntr/Mcount_count1 ), + .PRE(\BU2/U0/grf.rf/rstblk/wr_rst_reg [1]), + .Q(\BU2/U0/grf.rf/gl0.wr/wpntr/count [1]) + ); + FDCE #( + .INIT ( 1'b0 )) + \BU2/U0/grf.rf/gl0.wr/wpntr/count_3 ( + .C(wr_clk), + .CE(\BU2/U0/grf.rf/gl0.wr/ram_wr_en_i1_197 ), + .CLR(\BU2/U0/grf.rf/rstblk/wr_rst_reg [1]), + .D(\BU2/U0/grf.rf/gl0.wr/wpntr/Mcount_count3 ), + .Q(\BU2/U0/grf.rf/gl0.wr/wpntr/count [3]) + ); + FDCE #( + .INIT ( 1'b0 )) + \BU2/U0/grf.rf/gl0.wr/wpntr/count_4 ( + .C(wr_clk), + .CE(\BU2/U0/grf.rf/gl0.wr/ram_wr_en_i1_197 ), + .CLR(\BU2/U0/grf.rf/rstblk/wr_rst_reg [1]), + .D(\BU2/U0/grf.rf/gl0.wr/wpntr/Mcount_count4 ), + .Q(\BU2/U0/grf.rf/gl0.wr/wpntr/count [4]) + ); + FDPE #( + .INIT ( 1'b1 )) + \BU2/U0/grf.rf/gl0.wr/gwas.gpf.wrpf/prog_full_i ( + .C(wr_clk), + .CE(\BU2/U0/grf.rf/gl0.wr/gwas.gpf.wrpf/prog_full_i_not0001 ), + .D(\BU2/U0/grf.rf/gl0.wr/gwas.gpf.wrpf/prog_full_i_mux0003 ), + .PRE(\BU2/U0/grf.rf/rstblk/rst_d2_88 ), + .Q(prog_full) + ); + FDC #( + .INIT ( 1'b0 )) + \BU2/U0/grf.rf/gl0.wr/gwas.gpf.wrpf/diff_pntr_pad_4 ( + .C(wr_clk), + .CLR(\BU2/U0/grf.rf/rstblk/wr_rst_reg [1]), + .D(\BU2/U0/grf.rf/gl0.wr/gwas.gpf.wrpf/diff_pntr_pad_add0000 [4]), + .Q(\BU2/U0/grf.rf/gl0.wr/gwas.gpf.wrpf/diff_pntr_pad [4]) + ); + FDC #( + .INIT ( 1'b0 )) + \BU2/U0/grf.rf/gl0.wr/gwas.gpf.wrpf/diff_pntr_pad_5 ( + .C(wr_clk), + .CLR(\BU2/U0/grf.rf/rstblk/wr_rst_reg [1]), + .D(\BU2/U0/grf.rf/gl0.wr/gwas.gpf.wrpf/diff_pntr_pad_add0000 [5]), + .Q(\BU2/U0/grf.rf/gl0.wr/gwas.gpf.wrpf/diff_pntr_pad [5]) + ); + MUXCY \BU2/U0/grf.rf/gl0.wr/gwas.gpf.wrpf/Madd_diff_pntr_pad_add0000_cy<0> ( + .CI(\BU2/N1 ), + .DI(\BU2/U0/grf.rf/gl0.wr/ram_wr_en_i1_197 ), + .S(\BU2/rd_data_count [0]), + .O(\BU2/U0/grf.rf/gl0.wr/gwas.gpf.wrpf/Madd_diff_pntr_pad_add0000_cy [0]) + ); + MUXCY \BU2/U0/grf.rf/gl0.wr/gwas.gpf.wrpf/Madd_diff_pntr_pad_add0000_cy<1> ( + .CI(\BU2/U0/grf.rf/gl0.wr/gwas.gpf.wrpf/Madd_diff_pntr_pad_add0000_cy [0]), + .DI(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d2 [0]), + .S(\BU2/U0/grf.rf/gl0.wr/gwas.gpf.wrpf/Madd_diff_pntr_pad_add0000_lut [1]), + .O(\BU2/U0/grf.rf/gl0.wr/gwas.gpf.wrpf/Madd_diff_pntr_pad_add0000_cy [1]) + ); + MUXCY \BU2/U0/grf.rf/gl0.wr/gwas.gpf.wrpf/Madd_diff_pntr_pad_add0000_cy<2> ( + .CI(\BU2/U0/grf.rf/gl0.wr/gwas.gpf.wrpf/Madd_diff_pntr_pad_add0000_cy [1]), + .DI(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d2 [1]), + .S(\BU2/U0/grf.rf/gl0.wr/gwas.gpf.wrpf/Madd_diff_pntr_pad_add0000_lut [2]), + .O(\BU2/U0/grf.rf/gl0.wr/gwas.gpf.wrpf/Madd_diff_pntr_pad_add0000_cy [2]) + ); + MUXCY \BU2/U0/grf.rf/gl0.wr/gwas.gpf.wrpf/Madd_diff_pntr_pad_add0000_cy<3> ( + .CI(\BU2/U0/grf.rf/gl0.wr/gwas.gpf.wrpf/Madd_diff_pntr_pad_add0000_cy [2]), + .DI(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d2 [2]), + .S(\BU2/U0/grf.rf/gl0.wr/gwas.gpf.wrpf/Madd_diff_pntr_pad_add0000_lut [3]), + .O(\BU2/U0/grf.rf/gl0.wr/gwas.gpf.wrpf/Madd_diff_pntr_pad_add0000_cy [3]) + ); + MUXCY \BU2/U0/grf.rf/gl0.wr/gwas.gpf.wrpf/Madd_diff_pntr_pad_add0000_cy<4> ( + .CI(\BU2/U0/grf.rf/gl0.wr/gwas.gpf.wrpf/Madd_diff_pntr_pad_add0000_cy [3]), + .DI(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d2 [3]), + .S(\BU2/U0/grf.rf/gl0.wr/gwas.gpf.wrpf/Madd_diff_pntr_pad_add0000_lut [4]), + .O(\BU2/U0/grf.rf/gl0.wr/gwas.gpf.wrpf/Madd_diff_pntr_pad_add0000_cy [4]) + ); + XORCY \BU2/U0/grf.rf/gl0.wr/gwas.gpf.wrpf/Madd_diff_pntr_pad_add0000_xor<4> ( + .CI(\BU2/U0/grf.rf/gl0.wr/gwas.gpf.wrpf/Madd_diff_pntr_pad_add0000_cy [3]), + .LI(\BU2/U0/grf.rf/gl0.wr/gwas.gpf.wrpf/Madd_diff_pntr_pad_add0000_lut [4]), + .O(\BU2/U0/grf.rf/gl0.wr/gwas.gpf.wrpf/diff_pntr_pad_add0000 [4]) + ); + XORCY \BU2/U0/grf.rf/gl0.wr/gwas.gpf.wrpf/Madd_diff_pntr_pad_add0000_xor<5> ( + .CI(\BU2/U0/grf.rf/gl0.wr/gwas.gpf.wrpf/Madd_diff_pntr_pad_add0000_cy [4]), + .LI(\BU2/U0/grf.rf/gl0.wr/gwas.gpf.wrpf/Madd_diff_pntr_pad_add0000_lut [5]), + .O(\BU2/U0/grf.rf/gl0.wr/gwas.gpf.wrpf/diff_pntr_pad_add0000 [5]) + ); + FDC #( + .INIT ( 1'b0 )) + \BU2/U0/grf.rf/gl0.rd/gr1.rfwft/curr_fwft_state_0 ( + .C(rd_clk), + .CLR(\BU2/U0/grf.rf/rstblk/rd_rst_reg [2]), + .D(\BU2/U0/grf.rf/gl0.rd/gr1.rfwft/curr_fwft_state_mux0001 [1]), + .Q(\BU2/U0/grf.rf/gl0.rd/gr1.rfwft/curr_fwft_state [0]) + ); + FDC #( + .INIT ( 1'b0 )) + \BU2/U0/grf.rf/gl0.rd/gr1.rfwft/curr_fwft_state_1 ( + .C(rd_clk), + .CLR(\BU2/U0/grf.rf/rstblk/rd_rst_reg [2]), + .D(\BU2/U0/grf.rf/gl0.rd/gr1.rfwft/curr_fwft_state_mux0001 [0]), + .Q(\BU2/U0/grf.rf/gl0.rd/gr1.rfwft/curr_fwft_state [1]) + ); + FDP #( + .INIT ( 1'b1 )) + \BU2/U0/grf.rf/gl0.rd/gr1.rfwft/empty_fwft_i ( + .C(rd_clk), + .D(\BU2/U0/grf.rf/gl0.rd/gr1.rfwft/empty_fwft_i_mux0000 ), + .PRE(\BU2/U0/grf.rf/rstblk/rd_rst_reg [2]), + .Q(empty) + ); + FDP #( + .INIT ( 1'b1 )) + \BU2/U0/grf.rf/gl0.rd/gr1.rfwft/empty_fwft_fb ( + .C(rd_clk), + .D(\BU2/U0/grf.rf/gl0.rd/gr1.rfwft/empty_fwft_i_mux0000 ), + .PRE(\BU2/U0/grf.rf/rstblk/rd_rst_reg [2]), + .Q(\BU2/U0/grf.rf/gl0.rd/gr1.rfwft/empty_fwft_fb_176 ) + ); + FDCE #( + .INIT ( 1'b0 )) + \BU2/U0/grf.rf/gl0.rd/rpntr/count_d1_0 ( + .C(rd_clk), + .CE(\BU2/U0/grf.rf/gl0.rd/gr1.rfwft/Mmux_RAM_RD_EN_FWFT21_160 ), + .CLR(\BU2/U0/grf.rf/rstblk/rd_rst_reg [2]), + .D(\BU2/U0/grf.rf/gl0.rd/rpntr/count [0]), + .Q(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [0]) + ); + FDCE #( + .INIT ( 1'b0 )) + \BU2/U0/grf.rf/gl0.rd/rpntr/count_d1_1 ( + .C(rd_clk), + .CE(\BU2/U0/grf.rf/gl0.rd/gr1.rfwft/Mmux_RAM_RD_EN_FWFT21_160 ), + .CLR(\BU2/U0/grf.rf/rstblk/rd_rst_reg [2]), + .D(\BU2/U0/grf.rf/gl0.rd/rpntr/count [1]), + .Q(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [1]) + ); + FDCE #( + .INIT ( 1'b0 )) + \BU2/U0/grf.rf/gl0.rd/rpntr/count_d1_2 ( + .C(rd_clk), + .CE(\BU2/U0/grf.rf/gl0.rd/gr1.rfwft/Mmux_RAM_RD_EN_FWFT21_160 ), + .CLR(\BU2/U0/grf.rf/rstblk/rd_rst_reg [2]), + .D(\BU2/U0/grf.rf/gl0.rd/rpntr/count [2]), + .Q(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [2]) + ); + FDCE #( + .INIT ( 1'b0 )) + \BU2/U0/grf.rf/gl0.rd/rpntr/count_d1_3 ( + .C(rd_clk), + .CE(\BU2/U0/grf.rf/gl0.rd/gr1.rfwft/Mmux_RAM_RD_EN_FWFT21_160 ), + .CLR(\BU2/U0/grf.rf/rstblk/rd_rst_reg [2]), + .D(\BU2/U0/grf.rf/gl0.rd/rpntr/count [3]), + .Q(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [3]) + ); + FDCE #( + .INIT ( 1'b0 )) + \BU2/U0/grf.rf/gl0.rd/rpntr/count_d1_4 ( + .C(rd_clk), + .CE(\BU2/U0/grf.rf/gl0.rd/gr1.rfwft/Mmux_RAM_RD_EN_FWFT21_160 ), + .CLR(\BU2/U0/grf.rf/rstblk/rd_rst_reg [2]), + .D(\BU2/U0/grf.rf/gl0.rd/rpntr/count [4]), + .Q(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [4]) + ); + FDCE #( + .INIT ( 1'b0 )) + \BU2/U0/grf.rf/gl0.rd/rpntr/count_2 ( + .C(rd_clk), + .CE(\BU2/U0/grf.rf/gl0.rd/gr1.rfwft/Mmux_RAM_RD_EN_FWFT21_160 ), + .CLR(\BU2/U0/grf.rf/rstblk/rd_rst_reg [2]), + .D(\BU2/U0/grf.rf/gl0.rd/rpntr/Mcount_count2 ), + .Q(\BU2/U0/grf.rf/gl0.rd/rpntr/count [2]) + ); + FDPE #( + .INIT ( 1'b1 )) + \BU2/U0/grf.rf/gl0.rd/rpntr/count_0 ( + .C(rd_clk), + .CE(\BU2/U0/grf.rf/gl0.rd/gr1.rfwft/Mmux_RAM_RD_EN_FWFT21_160 ), + .D(\BU2/U0/grf.rf/gl0.rd/rpntr/Mcount_count ), + .PRE(\BU2/U0/grf.rf/rstblk/rd_rst_reg [2]), + .Q(\BU2/U0/grf.rf/gl0.rd/rpntr/count [0]) + ); + FDCE #( + .INIT ( 1'b0 )) + \BU2/U0/grf.rf/gl0.rd/rpntr/count_1 ( + .C(rd_clk), + .CE(\BU2/U0/grf.rf/gl0.rd/gr1.rfwft/Mmux_RAM_RD_EN_FWFT21_160 ), + .CLR(\BU2/U0/grf.rf/rstblk/rd_rst_reg [2]), + .D(\BU2/U0/grf.rf/gl0.rd/rpntr/Mcount_count1 ), + .Q(\BU2/U0/grf.rf/gl0.rd/rpntr/count [1]) + ); + FDCE #( + .INIT ( 1'b0 )) + \BU2/U0/grf.rf/gl0.rd/rpntr/count_3 ( + .C(rd_clk), + .CE(\BU2/U0/grf.rf/gl0.rd/gr1.rfwft/Mmux_RAM_RD_EN_FWFT21_160 ), + .CLR(\BU2/U0/grf.rf/rstblk/rd_rst_reg [2]), + .D(\BU2/U0/grf.rf/gl0.rd/rpntr/Mcount_count3 ), + .Q(\BU2/U0/grf.rf/gl0.rd/rpntr/count [3]) + ); + FDCE #( + .INIT ( 1'b0 )) + \BU2/U0/grf.rf/gl0.rd/rpntr/count_4 ( + .C(rd_clk), + .CE(\BU2/U0/grf.rf/gl0.rd/gr1.rfwft/Mmux_RAM_RD_EN_FWFT21_160 ), + .CLR(\BU2/U0/grf.rf/rstblk/rd_rst_reg [2]), + .D(\BU2/U0/grf.rf/gl0.rd/rpntr/Mcount_count4 ), + .Q(\BU2/U0/grf.rf/gl0.rd/rpntr/count [4]) + ); + FDC #( + .INIT ( 1'b0 )) + \BU2/U0/grf.rf/gcx.clkx/wr_pntr_gc_0 ( + .C(wr_clk), + .CLR(\BU2/U0/grf.rf/rstblk/wr_rst_reg [0]), + .D(\BU2/U0/grf.rf/gcx.clkx/wr_pntr_gc_xor0003 ), + .Q(\BU2/U0/grf.rf/gcx.clkx/wr_pntr_gc [0]) + ); + FDC #( + .INIT ( 1'b0 )) + \BU2/U0/grf.rf/gcx.clkx/wr_pntr_gc_1 ( + .C(wr_clk), + .CLR(\BU2/U0/grf.rf/rstblk/wr_rst_reg [0]), + .D(\BU2/U0/grf.rf/gcx.clkx/wr_pntr_gc_xor0002 ), + .Q(\BU2/U0/grf.rf/gcx.clkx/wr_pntr_gc [1]) + ); + FDC #( + .INIT ( 1'b0 )) + \BU2/U0/grf.rf/gcx.clkx/wr_pntr_gc_2 ( + .C(wr_clk), + .CLR(\BU2/U0/grf.rf/rstblk/wr_rst_reg [0]), + .D(\BU2/U0/grf.rf/gcx.clkx/wr_pntr_gc_xor0001 ), + .Q(\BU2/U0/grf.rf/gcx.clkx/wr_pntr_gc [2]) + ); + FDC #( + .INIT ( 1'b0 )) + \BU2/U0/grf.rf/gcx.clkx/wr_pntr_gc_3 ( + .C(wr_clk), + .CLR(\BU2/U0/grf.rf/rstblk/wr_rst_reg [0]), + .D(\BU2/U0/grf.rf/gcx.clkx/wr_pntr_gc_xor0000 ), + .Q(\BU2/U0/grf.rf/gcx.clkx/wr_pntr_gc [3]) + ); + FDC #( + .INIT ( 1'b0 )) + \BU2/U0/grf.rf/gcx.clkx/wr_pntr_gc_4 ( + .C(wr_clk), + .CLR(\BU2/U0/grf.rf/rstblk/wr_rst_reg [0]), + .D(\BU2/U0/grf.rf/gl0.wr/wpntr/count_d3 [4]), + .Q(\BU2/U0/grf.rf/gcx.clkx/wr_pntr_gc [4]) + ); + FDC #( + .INIT ( 1'b0 )) + \BU2/U0/grf.rf/gcx.clkx/rd_pntr_gc_0 ( + .C(rd_clk), + .CLR(\BU2/U0/grf.rf/rstblk/rd_rst_reg [1]), + .D(\BU2/U0/grf.rf/gcx.clkx/rd_pntr_gc_xor0003 ), + .Q(\BU2/U0/grf.rf/gcx.clkx/rd_pntr_gc [0]) + ); + FDC #( + .INIT ( 1'b0 )) + \BU2/U0/grf.rf/gcx.clkx/rd_pntr_gc_1 ( + .C(rd_clk), + .CLR(\BU2/U0/grf.rf/rstblk/rd_rst_reg [1]), + .D(\BU2/U0/grf.rf/gcx.clkx/rd_pntr_gc_xor0002 ), + .Q(\BU2/U0/grf.rf/gcx.clkx/rd_pntr_gc [1]) + ); + FDC #( + .INIT ( 1'b0 )) + \BU2/U0/grf.rf/gcx.clkx/rd_pntr_gc_2 ( + .C(rd_clk), + .CLR(\BU2/U0/grf.rf/rstblk/rd_rst_reg [1]), + .D(\BU2/U0/grf.rf/gcx.clkx/rd_pntr_gc_xor0001 ), + .Q(\BU2/U0/grf.rf/gcx.clkx/rd_pntr_gc [2]) + ); + FDC #( + .INIT ( 1'b0 )) + \BU2/U0/grf.rf/gcx.clkx/rd_pntr_gc_3 ( + .C(rd_clk), + .CLR(\BU2/U0/grf.rf/rstblk/rd_rst_reg [1]), + .D(\BU2/U0/grf.rf/gcx.clkx/rd_pntr_gc_xor0000 ), + .Q(\BU2/U0/grf.rf/gcx.clkx/rd_pntr_gc [3]) + ); + FDC #( + .INIT ( 1'b0 )) + \BU2/U0/grf.rf/gcx.clkx/rd_pntr_gc_4 ( + .C(rd_clk), + .CLR(\BU2/U0/grf.rf/rstblk/rd_rst_reg [1]), + .D(\BU2/U0/grf.rf/gl0.rd/rpntr/count_d1 [4]), + .Q(\BU2/U0/grf.rf/gcx.clkx/rd_pntr_gc [4]) + ); + FDC #( + .INIT ( 1'b0 )) + \BU2/U0/grf.rf/gcx.clkx/rd_pntr_gc_asreg_0 ( + .C(wr_clk), + .CLR(\BU2/U0/grf.rf/rstblk/wr_rst_reg [0]), + .D(\BU2/U0/grf.rf/gcx.clkx/rd_pntr_gc [0]), + .Q(\BU2/U0/grf.rf/gcx.clkx/rd_pntr_gc_asreg [0]) + ); + FDC #( + .INIT ( 1'b0 )) + \BU2/U0/grf.rf/gcx.clkx/rd_pntr_gc_asreg_1 ( + .C(wr_clk), + .CLR(\BU2/U0/grf.rf/rstblk/wr_rst_reg [0]), + .D(\BU2/U0/grf.rf/gcx.clkx/rd_pntr_gc [1]), + .Q(\BU2/U0/grf.rf/gcx.clkx/rd_pntr_gc_asreg [1]) + ); + FDC #( + .INIT ( 1'b0 )) + \BU2/U0/grf.rf/gcx.clkx/rd_pntr_gc_asreg_2 ( + .C(wr_clk), + .CLR(\BU2/U0/grf.rf/rstblk/wr_rst_reg [0]), + .D(\BU2/U0/grf.rf/gcx.clkx/rd_pntr_gc [2]), + .Q(\BU2/U0/grf.rf/gcx.clkx/rd_pntr_gc_asreg [2]) + ); + FDC #( + .INIT ( 1'b0 )) + \BU2/U0/grf.rf/gcx.clkx/rd_pntr_gc_asreg_3 ( + .C(wr_clk), + .CLR(\BU2/U0/grf.rf/rstblk/wr_rst_reg [0]), + .D(\BU2/U0/grf.rf/gcx.clkx/rd_pntr_gc [3]), + .Q(\BU2/U0/grf.rf/gcx.clkx/rd_pntr_gc_asreg [3]) + ); + FDC #( + .INIT ( 1'b0 )) + \BU2/U0/grf.rf/gcx.clkx/rd_pntr_gc_asreg_4 ( + .C(wr_clk), + .CLR(\BU2/U0/grf.rf/rstblk/wr_rst_reg [0]), + .D(\BU2/U0/grf.rf/gcx.clkx/rd_pntr_gc [4]), + .Q(\BU2/U0/grf.rf/gcx.clkx/rd_pntr_gc_asreg [4]) + ); + FDC #( + .INIT ( 1'b0 )) + \BU2/U0/grf.rf/gcx.clkx/wr_pntr_gc_asreg_0 ( + .C(rd_clk), + .CLR(\BU2/U0/grf.rf/rstblk/rd_rst_reg [1]), + .D(\BU2/U0/grf.rf/gcx.clkx/wr_pntr_gc [0]), + .Q(\BU2/U0/grf.rf/gcx.clkx/wr_pntr_gc_asreg [0]) + ); + FDC #( + .INIT ( 1'b0 )) + \BU2/U0/grf.rf/gcx.clkx/wr_pntr_gc_asreg_1 ( + .C(rd_clk), + .CLR(\BU2/U0/grf.rf/rstblk/rd_rst_reg [1]), + .D(\BU2/U0/grf.rf/gcx.clkx/wr_pntr_gc [1]), + .Q(\BU2/U0/grf.rf/gcx.clkx/wr_pntr_gc_asreg [1]) + ); + FDC #( + .INIT ( 1'b0 )) + \BU2/U0/grf.rf/gcx.clkx/wr_pntr_gc_asreg_2 ( + .C(rd_clk), + .CLR(\BU2/U0/grf.rf/rstblk/rd_rst_reg [1]), + .D(\BU2/U0/grf.rf/gcx.clkx/wr_pntr_gc [2]), + .Q(\BU2/U0/grf.rf/gcx.clkx/wr_pntr_gc_asreg [2]) + ); + FDC #( + .INIT ( 1'b0 )) + \BU2/U0/grf.rf/gcx.clkx/wr_pntr_gc_asreg_3 ( + .C(rd_clk), + .CLR(\BU2/U0/grf.rf/rstblk/rd_rst_reg [1]), + .D(\BU2/U0/grf.rf/gcx.clkx/wr_pntr_gc [3]), + .Q(\BU2/U0/grf.rf/gcx.clkx/wr_pntr_gc_asreg [3]) + ); + FDC #( + .INIT ( 1'b0 )) + \BU2/U0/grf.rf/gcx.clkx/wr_pntr_gc_asreg_4 ( + .C(rd_clk), + .CLR(\BU2/U0/grf.rf/rstblk/rd_rst_reg [1]), + .D(\BU2/U0/grf.rf/gcx.clkx/wr_pntr_gc [4]), + .Q(\BU2/U0/grf.rf/gcx.clkx/wr_pntr_gc_asreg [4]) + ); + FDC #( + .INIT ( 1'b0 )) + \BU2/U0/grf.rf/gcx.clkx/rd_pntr_gc_asreg_d1_0 ( + .C(wr_clk), + .CLR(\BU2/U0/grf.rf/rstblk/wr_rst_reg [0]), + .D(\BU2/U0/grf.rf/gcx.clkx/rd_pntr_gc_asreg [0]), + .Q(\BU2/U0/grf.rf/gcx.clkx/rd_pntr_gc_asreg_d1 [0]) + ); + FDC #( + .INIT ( 1'b0 )) + \BU2/U0/grf.rf/gcx.clkx/rd_pntr_gc_asreg_d1_1 ( + .C(wr_clk), + .CLR(\BU2/U0/grf.rf/rstblk/wr_rst_reg [0]), + .D(\BU2/U0/grf.rf/gcx.clkx/rd_pntr_gc_asreg [1]), + .Q(\BU2/U0/grf.rf/gcx.clkx/rd_pntr_gc_asreg_d1 [1]) + ); + FDC #( + .INIT ( 1'b0 )) + \BU2/U0/grf.rf/gcx.clkx/rd_pntr_gc_asreg_d1_2 ( + .C(wr_clk), + .CLR(\BU2/U0/grf.rf/rstblk/wr_rst_reg [0]), + .D(\BU2/U0/grf.rf/gcx.clkx/rd_pntr_gc_asreg [2]), + .Q(\BU2/U0/grf.rf/gcx.clkx/rd_pntr_gc_asreg_d1 [2]) + ); + FDC #( + .INIT ( 1'b0 )) + \BU2/U0/grf.rf/gcx.clkx/rd_pntr_gc_asreg_d1_3 ( + .C(wr_clk), + .CLR(\BU2/U0/grf.rf/rstblk/wr_rst_reg [0]), + .D(\BU2/U0/grf.rf/gcx.clkx/rd_pntr_gc_asreg [3]), + .Q(\BU2/U0/grf.rf/gcx.clkx/rd_pntr_gc_asreg_d1 [3]) + ); + FDC #( + .INIT ( 1'b0 )) + \BU2/U0/grf.rf/gcx.clkx/rd_pntr_gc_asreg_d1_4 ( + .C(wr_clk), + .CLR(\BU2/U0/grf.rf/rstblk/wr_rst_reg [0]), + .D(\BU2/U0/grf.rf/gcx.clkx/rd_pntr_gc_asreg [4]), + .Q(\BU2/U0/grf.rf/gcx.clkx/rd_pntr_gc_asreg_d1 [4]) + ); + FDC #( + .INIT ( 1'b0 )) + \BU2/U0/grf.rf/gcx.clkx/wr_pntr_gc_asreg_d1_0 ( + .C(rd_clk), + .CLR(\BU2/U0/grf.rf/rstblk/rd_rst_reg [1]), + .D(\BU2/U0/grf.rf/gcx.clkx/wr_pntr_gc_asreg [0]), + .Q(\BU2/U0/grf.rf/gcx.clkx/wr_pntr_gc_asreg_d1 [0]) + ); + FDC #( + .INIT ( 1'b0 )) + \BU2/U0/grf.rf/gcx.clkx/wr_pntr_gc_asreg_d1_1 ( + .C(rd_clk), + .CLR(\BU2/U0/grf.rf/rstblk/rd_rst_reg [1]), + .D(\BU2/U0/grf.rf/gcx.clkx/wr_pntr_gc_asreg [1]), + .Q(\BU2/U0/grf.rf/gcx.clkx/wr_pntr_gc_asreg_d1 [1]) + ); + FDC #( + .INIT ( 1'b0 )) + \BU2/U0/grf.rf/gcx.clkx/wr_pntr_gc_asreg_d1_2 ( + .C(rd_clk), + .CLR(\BU2/U0/grf.rf/rstblk/rd_rst_reg [1]), + .D(\BU2/U0/grf.rf/gcx.clkx/wr_pntr_gc_asreg [2]), + .Q(\BU2/U0/grf.rf/gcx.clkx/wr_pntr_gc_asreg_d1 [2]) + ); + FDC #( + .INIT ( 1'b0 )) + \BU2/U0/grf.rf/gcx.clkx/wr_pntr_gc_asreg_d1_3 ( + .C(rd_clk), + .CLR(\BU2/U0/grf.rf/rstblk/rd_rst_reg [1]), + .D(\BU2/U0/grf.rf/gcx.clkx/wr_pntr_gc_asreg [3]), + .Q(\BU2/U0/grf.rf/gcx.clkx/wr_pntr_gc_asreg_d1 [3]) + ); + FDC #( + .INIT ( 1'b0 )) + \BU2/U0/grf.rf/gcx.clkx/wr_pntr_gc_asreg_d1_4 ( + .C(rd_clk), + .CLR(\BU2/U0/grf.rf/rstblk/rd_rst_reg [1]), + .D(\BU2/U0/grf.rf/gcx.clkx/wr_pntr_gc_asreg [4]), + .Q(\BU2/U0/grf.rf/gcx.clkx/wr_pntr_gc_asreg_d1 [4]) + ); + FDC #( + .INIT ( 1'b0 )) + \BU2/U0/grf.rf/gcx.clkx/wr_pntr_bin_0 ( + .C(rd_clk), + .CLR(\BU2/U0/grf.rf/rstblk/rd_rst_reg [1]), + .D(\BU2/U0/grf.rf/gcx.clkx/wr_pntr_bin_xor0003_120 ), + .Q(\BU2/U0/grf.rf/gcx.clkx/wr_pntr_bin [0]) + ); + FDC #( + .INIT ( 1'b0 )) + \BU2/U0/grf.rf/gcx.clkx/wr_pntr_bin_1 ( + .C(rd_clk), + .CLR(\BU2/U0/grf.rf/rstblk/rd_rst_reg [1]), + .D(\BU2/U0/grf.rf/gcx.clkx/wr_pntr_bin_xor0002 ), + .Q(\BU2/U0/grf.rf/gcx.clkx/wr_pntr_bin [1]) + ); + FDC #( + .INIT ( 1'b0 )) + \BU2/U0/grf.rf/gcx.clkx/wr_pntr_bin_2 ( + .C(rd_clk), + .CLR(\BU2/U0/grf.rf/rstblk/rd_rst_reg [1]), + .D(\BU2/U0/grf.rf/gcx.clkx/wr_pntr_bin_xor0001 ), + .Q(\BU2/U0/grf.rf/gcx.clkx/wr_pntr_bin [2]) + ); + FDC #( + .INIT ( 1'b0 )) + \BU2/U0/grf.rf/gcx.clkx/wr_pntr_bin_3 ( + .C(rd_clk), + .CLR(\BU2/U0/grf.rf/rstblk/rd_rst_reg [1]), + .D(\BU2/U0/grf.rf/gcx.clkx/wr_pntr_bin_xor0000 ), + .Q(\BU2/U0/grf.rf/gcx.clkx/wr_pntr_bin [3]) + ); + FDC #( + .INIT ( 1'b0 )) + \BU2/U0/grf.rf/gcx.clkx/wr_pntr_bin_4 ( + .C(rd_clk), + .CLR(\BU2/U0/grf.rf/rstblk/rd_rst_reg [1]), + .D(\BU2/U0/grf.rf/gcx.clkx/wr_pntr_gc_asreg_d1 [4]), + .Q(\BU2/U0/grf.rf/gcx.clkx/wr_pntr_bin [4]) + ); + FDC #( + .INIT ( 1'b0 )) + \BU2/U0/grf.rf/gcx.clkx/rd_pntr_bin_0 ( + .C(wr_clk), + .CLR(\BU2/U0/grf.rf/rstblk/wr_rst_reg [0]), + .D(\BU2/U0/grf.rf/gcx.clkx/rd_pntr_bin_xor0003_110 ), + .Q(\BU2/U0/grf.rf/gcx.clkx/rd_pntr_bin [0]) + ); + FDC #( + .INIT ( 1'b0 )) + \BU2/U0/grf.rf/gcx.clkx/rd_pntr_bin_1 ( + .C(wr_clk), + .CLR(\BU2/U0/grf.rf/rstblk/wr_rst_reg [0]), + .D(\BU2/U0/grf.rf/gcx.clkx/rd_pntr_bin_xor0002 ), + .Q(\BU2/U0/grf.rf/gcx.clkx/rd_pntr_bin [1]) + ); + FDC #( + .INIT ( 1'b0 )) + \BU2/U0/grf.rf/gcx.clkx/rd_pntr_bin_2 ( + .C(wr_clk), + .CLR(\BU2/U0/grf.rf/rstblk/wr_rst_reg [0]), + .D(\BU2/U0/grf.rf/gcx.clkx/rd_pntr_bin_xor0001 ), + .Q(\BU2/U0/grf.rf/gcx.clkx/rd_pntr_bin [2]) + ); + FDC #( + .INIT ( 1'b0 )) + \BU2/U0/grf.rf/gcx.clkx/rd_pntr_bin_3 ( + .C(wr_clk), + .CLR(\BU2/U0/grf.rf/rstblk/wr_rst_reg [0]), + .D(\BU2/U0/grf.rf/gcx.clkx/rd_pntr_bin_xor0000 ), + .Q(\BU2/U0/grf.rf/gcx.clkx/rd_pntr_bin [3]) + ); + FDC #( + .INIT ( 1'b0 )) + \BU2/U0/grf.rf/gcx.clkx/rd_pntr_bin_4 ( + .C(wr_clk), + .CLR(\BU2/U0/grf.rf/rstblk/wr_rst_reg [0]), + .D(\BU2/U0/grf.rf/gcx.clkx/rd_pntr_gc_asreg_d1 [4]), + .Q(\BU2/U0/grf.rf/gcx.clkx/rd_pntr_bin [4]) + ); + FDP #( + .INIT ( 1'b1 )) + \BU2/U0/grf.rf/rstblk/wr_rst_reg_0 ( + .C(wr_clk), + .D(\BU2/rd_data_count [0]), + .PRE(\BU2/U0/grf.rf/rstblk/wr_rst_comb ), + .Q(\BU2/U0/grf.rf/rstblk/wr_rst_reg [0]) + ); + FDP #( + .INIT ( 1'b1 )) + \BU2/U0/grf.rf/rstblk/wr_rst_reg_1 ( + .C(wr_clk), + .D(\BU2/rd_data_count [0]), + .PRE(\BU2/U0/grf.rf/rstblk/wr_rst_comb ), + .Q(\BU2/U0/grf.rf/rstblk/wr_rst_reg [1]) + ); + FDP #( + .INIT ( 1'b1 )) + \BU2/U0/grf.rf/rstblk/rd_rst_reg_0 ( + .C(rd_clk), + .D(\BU2/rd_data_count [0]), + .PRE(\BU2/U0/grf.rf/rstblk/rd_rst_comb ), + .Q(\BU2/U0/grf.rf/rstblk/rd_rst_reg [0]) + ); + FDP #( + .INIT ( 1'b1 )) + \BU2/U0/grf.rf/rstblk/rd_rst_reg_1 ( + .C(rd_clk), + .D(\BU2/rd_data_count [0]), + .PRE(\BU2/U0/grf.rf/rstblk/rd_rst_comb ), + .Q(\BU2/U0/grf.rf/rstblk/rd_rst_reg [1]) + ); + FDP #( + .INIT ( 1'b1 )) + \BU2/U0/grf.rf/rstblk/rd_rst_reg_2 ( + .C(rd_clk), + .D(\BU2/rd_data_count [0]), + .PRE(\BU2/U0/grf.rf/rstblk/rd_rst_comb ), + .Q(\BU2/U0/grf.rf/rstblk/rd_rst_reg [2]) + ); + FDP #( + .INIT ( 1'b1 )) + \BU2/U0/grf.rf/rstblk/rst_d1 ( + .C(wr_clk), + .D(\BU2/rd_data_count [0]), + .PRE(rst), + .Q(\BU2/U0/grf.rf/rstblk/rst_d1_93 ) + ); + FDPE \BU2/U0/grf.rf/rstblk/rd_rst_asreg ( + .C(rd_clk), + .CE(\BU2/U0/grf.rf/rstblk/rd_rst_asreg_d1_89 ), + .D(\BU2/rd_data_count [0]), + .PRE(rst), + .Q(\BU2/U0/grf.rf/rstblk/rd_rst_asreg_94 ) + ); + FD #( + .INIT ( 1'b0 )) + \BU2/U0/grf.rf/rstblk/wr_rst_asreg_d1 ( + .C(wr_clk), + .D(\BU2/U0/grf.rf/rstblk/wr_rst_asreg_95 ), + .Q(\BU2/U0/grf.rf/rstblk/wr_rst_asreg_d1_91 ) + ); + FDPE \BU2/U0/grf.rf/rstblk/wr_rst_asreg ( + .C(wr_clk), + .CE(\BU2/U0/grf.rf/rstblk/wr_rst_asreg_d1_91 ), + .D(\BU2/rd_data_count [0]), + .PRE(rst), + .Q(\BU2/U0/grf.rf/rstblk/wr_rst_asreg_95 ) + ); + FD #( + .INIT ( 1'b0 )) + \BU2/U0/grf.rf/rstblk/rd_rst_asreg_d1 ( + .C(rd_clk), + .D(\BU2/U0/grf.rf/rstblk/rd_rst_asreg_94 ), + .Q(\BU2/U0/grf.rf/rstblk/rd_rst_asreg_d1_89 ) + ); + FDP #( + .INIT ( 1'b1 )) + \BU2/U0/grf.rf/rstblk/rst_d2 ( + .C(wr_clk), + .D(\BU2/U0/grf.rf/rstblk/rst_d1_93 ), + .PRE(rst), + .Q(\BU2/U0/grf.rf/rstblk/rst_d2_88 ) + ); + FD #( + .INIT ( 1'b0 )) + \BU2/U0/grf.rf/rstblk/wr_rst_asreg_d2 ( + .C(wr_clk), + .D(\BU2/U0/grf.rf/rstblk/wr_rst_asreg_d1_91 ), + .Q(\BU2/U0/grf.rf/rstblk/wr_rst_asreg_d2_92 ) + ); + FD #( + .INIT ( 1'b0 )) + \BU2/U0/grf.rf/rstblk/rd_rst_asreg_d2 ( + .C(rd_clk), + .D(\BU2/U0/grf.rf/rstblk/rd_rst_asreg_d1_89 ), + .Q(\BU2/U0/grf.rf/rstblk/rd_rst_asreg_d2_90 ) + ); + FDP #( + .INIT ( 1'b1 )) + \BU2/U0/grf.rf/rstblk/rst_d3 ( + .C(wr_clk), + .D(\BU2/U0/grf.rf/rstblk/rst_d2_88 ), + .PRE(rst), + .Q(\BU2/U0/grf.rf/rstblk/rst_d3_86 ) + ); + FDC #( + .INIT ( 1'b0 )) + \BU2/U0/grf.rf/rstblk/RST_FULL_GEN ( + .C(wr_clk), + .CLR(rst), + .D(\BU2/U0/grf.rf/rstblk/rst_d3_86 ), + .Q(\BU2/U0/grf.rf/rstblk/RST_FULL_GEN_87 ) + ); + FDP #( + .INIT ( 1'b1 )) + \BU2/U0/grf.rf/gl0.rd/gras.rsts/ram_empty_fb_i ( + .C(rd_clk), + .D(\BU2/U0/grf.rf/gl0.rd/gras.rsts/ram_empty_fb_i_or0000 ), + .PRE(\BU2/U0/grf.rf/rstblk/rd_rst_reg [2]), + .Q(\BU2/U0/grf.rf/gl0.rd/gras.rsts/ram_empty_fb_i_85 ) + ); + VCC \BU2/XST_VCC ( + .P(\BU2/N1 ) + ); + GND \BU2/XST_GND ( + .G(\BU2/rd_data_count [0]) + ); + +// synthesis translate_on + +endmodule + +// synthesis translate_off + +`ifndef GLBL +`define GLBL + +`timescale 1 ps / 1 ps + +module glbl (); + + parameter ROC_WIDTH = 100000; + parameter TOC_WIDTH = 0; + + wire GSR; + wire GTS; + wire GWE; + wire PRLD; + tri1 p_up_tmp; + tri (weak1, strong0) PLL_LOCKG = p_up_tmp; + + reg GSR_int; + reg GTS_int; + reg PRLD_int; + +//-------- JTAG Globals -------------- + wire JTAG_TDO_GLBL; + wire JTAG_TCK_GLBL; + wire JTAG_TDI_GLBL; + wire JTAG_TMS_GLBL; + wire JTAG_TRST_GLBL; + + reg JTAG_CAPTURE_GLBL; + reg JTAG_RESET_GLBL; + reg JTAG_SHIFT_GLBL; + reg JTAG_UPDATE_GLBL; + reg JTAG_RUNTEST_GLBL; + + reg JTAG_SEL1_GLBL = 0; + reg JTAG_SEL2_GLBL = 0 ; + reg JTAG_SEL3_GLBL = 0; + reg JTAG_SEL4_GLBL = 0; + + reg JTAG_USER_TDO1_GLBL = 1'bz; + reg JTAG_USER_TDO2_GLBL = 1'bz; + reg JTAG_USER_TDO3_GLBL = 1'bz; + reg JTAG_USER_TDO4_GLBL = 1'bz; + + assign (weak1, weak0) GSR = GSR_int; + assign (weak1, weak0) GTS = GTS_int; + assign (weak1, weak0) PRLD = PRLD_int; + + initial begin + GSR_int = 1'b1; + PRLD_int = 1'b1; + #(ROC_WIDTH) + GSR_int = 1'b0; + PRLD_int = 1'b0; + end + + initial begin + GTS_int = 1'b1; + #(TOC_WIDTH) + GTS_int = 1'b0; + end + +endmodule + +`endif + +// synthesis translate_on diff --git a/usrp2/coregen/fifo_xlnx_32x36_2clk.veo b/usrp2/coregen/fifo_xlnx_32x36_2clk.veo new file mode 100644 index 000000000..eb98a2b70 --- /dev/null +++ b/usrp2/coregen/fifo_xlnx_32x36_2clk.veo @@ -0,0 +1,47 @@ +/******************************************************************************* +* This file is owned and controlled by Xilinx and must be used * +* solely for design, simulation, implementation and creation of * +* design files limited to Xilinx devices or technologies. Use * +* with non-Xilinx devices or technologies is expressly prohibited * +* and immediately terminates your license. * +* * +* XILINX IS PROVIDING THIS DESIGN, CODE, OR INFORMATION "AS IS" * +* SOLELY FOR USE IN DEVELOPING PROGRAMS AND SOLUTIONS FOR * +* XILINX DEVICES. BY PROVIDING THIS DESIGN, CODE, OR INFORMATION * +* AS ONE POSSIBLE IMPLEMENTATION OF THIS FEATURE, APPLICATION * +* OR STANDARD, XILINX IS MAKING NO REPRESENTATION THAT THIS * +* IMPLEMENTATION IS FREE FROM ANY CLAIMS OF INFRINGEMENT, * +* AND YOU ARE RESPONSIBLE FOR OBTAINING ANY RIGHTS YOU MAY REQUIRE * +* FOR YOUR IMPLEMENTATION. XILINX EXPRESSLY DISCLAIMS ANY * +* WARRANTY WHATSOEVER WITH RESPECT TO THE ADEQUACY OF THE * +* IMPLEMENTATION, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OR * +* REPRESENTATIONS THAT THIS IMPLEMENTATION IS FREE FROM CLAIMS OF * +* INFRINGEMENT, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS * +* FOR A PARTICULAR PURPOSE. * +* * +* Xilinx products are not intended for use in life support * +* appliances, devices, or systems. Use in such applications are * +* expressly prohibited. * +* * +* (c) Copyright 1995-2009 Xilinx, Inc. * +* All rights reserved. * +*******************************************************************************/ +// The following must be inserted into your Verilog file for this +// core to be instantiated. Change the instance name and port connections +// (in parentheses) to your own signal names. + +//----------- Begin Cut here for INSTANTIATION Template ---// INST_TAG +fifo_xlnx_32x36_2clk YourInstanceName ( + .rst(rst), + .wr_clk(wr_clk), + .rd_clk(rd_clk), + .din(din), // Bus [35 : 0] + .wr_en(wr_en), + .rd_en(rd_en), + .dout(dout), // Bus [35 : 0] + .full(full), + .almost_full(almost_full), + .empty(empty), + .prog_full(prog_full)); + +// INST_TAG_END ------ End INSTANTIATION Template --------- diff --git a/usrp2/coregen/fifo_xlnx_32x36_2clk.xco b/usrp2/coregen/fifo_xlnx_32x36_2clk.xco new file mode 100644 index 000000000..1cf4c8ba5 --- /dev/null +++ b/usrp2/coregen/fifo_xlnx_32x36_2clk.xco @@ -0,0 +1,84 @@ +############################################################## +# +# Xilinx Core Generator version 12.2 +# Date: Fri Oct 15 07:50:15 2010 +# +############################################################## +# +# This file contains the customisation parameters for a +# Xilinx CORE Generator IP GUI. It is strongly recommended +# that you do not manually alter this file as it may cause +# unexpected and unsupported behavior. +# +############################################################## +# +# BEGIN Project Options +SET addpads = false +SET asysymbol = false +SET busformat = BusFormatAngleBracketNotRipped +SET createndf = false +SET designentry = Verilog +SET device = xc3s2000 +SET devicefamily = spartan3 +SET flowvendor = Other +SET formalverification = false +SET foundationsym = false +SET implementationfiletype = Ngc +SET package = fg456 +SET removerpms = false +SET simulationfiles = Structural +SET speedgrade = -5 +SET verilogsim = true +SET vhdlsim = false +# END Project Options +# BEGIN Select +SELECT Fifo_Generator family Xilinx,_Inc. 6.1 +# END Select +# BEGIN Parameters +CSET almost_empty_flag=false +CSET almost_full_flag=true +CSET component_name=fifo_xlnx_32x36_2clk +CSET data_count=false +CSET data_count_width=5 +CSET disable_timing_violations=false +CSET dout_reset_value=0 +CSET empty_threshold_assert_value=4 +CSET empty_threshold_negate_value=5 +CSET enable_ecc=false +CSET enable_int_clk=false +CSET enable_reset_synchronization=true +CSET fifo_implementation=Independent_Clocks_Distributed_RAM +CSET full_flags_reset_value=1 +CSET full_threshold_assert_value=24 +CSET full_threshold_negate_value=23 +CSET inject_dbit_error=false +CSET inject_sbit_error=false +CSET input_data_width=36 +CSET input_depth=32 +CSET output_data_width=36 +CSET output_depth=32 +CSET overflow_flag=false +CSET overflow_sense=Active_High +CSET performance_options=First_Word_Fall_Through +CSET programmable_empty_type=No_Programmable_Empty_Threshold +CSET programmable_full_type=Single_Programmable_Full_Threshold_Constant +CSET read_clock_frequency=1 +CSET read_data_count=false +CSET read_data_count_width=5 +CSET reset_pin=true +CSET reset_type=Asynchronous_Reset +CSET underflow_flag=false +CSET underflow_sense=Active_High +CSET use_dout_reset=true +CSET use_embedded_registers=false +CSET use_extra_logic=false +CSET valid_flag=false +CSET valid_sense=Active_High +CSET write_acknowledge_flag=false +CSET write_acknowledge_sense=Active_High +CSET write_clock_frequency=1 +CSET write_data_count=false +CSET write_data_count_width=5 +# END Parameters +GENERATE +# CRC: 8e84ee7f diff --git a/usrp2/coregen/fifo_xlnx_32x36_2clk.xise b/usrp2/coregen/fifo_xlnx_32x36_2clk.xise new file mode 100644 index 000000000..0c3544a33 --- /dev/null +++ b/usrp2/coregen/fifo_xlnx_32x36_2clk.xise @@ -0,0 +1,72 @@ + + + +

+ + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/usrp2/coregen/fifo_xlnx_32x36_2clk_flist.txt b/usrp2/coregen/fifo_xlnx_32x36_2clk_flist.txt new file mode 100644 index 000000000..b8c69a9f7 --- /dev/null +++ b/usrp2/coregen/fifo_xlnx_32x36_2clk_flist.txt @@ -0,0 +1,12 @@ +# Output products list for +_xmsgs/pn_parser.xmsgs +fifo_generator_ug175.pdf +fifo_xlnx_32x36_2clk.gise +fifo_xlnx_32x36_2clk.ngc +fifo_xlnx_32x36_2clk.v +fifo_xlnx_32x36_2clk.veo +fifo_xlnx_32x36_2clk.xco +fifo_xlnx_32x36_2clk.xise +fifo_xlnx_32x36_2clk_flist.txt +fifo_xlnx_32x36_2clk_readme.txt +fifo_xlnx_32x36_2clk_xmdf.tcl diff --git a/usrp2/coregen/fifo_xlnx_32x36_2clk_readme.txt b/usrp2/coregen/fifo_xlnx_32x36_2clk_readme.txt new file mode 100644 index 000000000..8ab5679fd --- /dev/null +++ b/usrp2/coregen/fifo_xlnx_32x36_2clk_readme.txt @@ -0,0 +1,46 @@ +The following files were generated for 'fifo_xlnx_32x36_2clk' in directory +/home/ianb/ettus/sram_fifo/fpgapriv/usrp2/coregen/ + +fifo_generator_ug175.pdf: + Please see the core data sheet. + +fifo_xlnx_32x36_2clk.gise: + ISE Project Navigator support file. This is a generated file and should + not be edited directly. + +fifo_xlnx_32x36_2clk.ngc: + Binary Xilinx implementation netlist file containing the information + required to implement the module in a Xilinx (R) FPGA. + +fifo_xlnx_32x36_2clk.v: + Unisim Verilog file containing the information required to simulate + the module. + +fifo_xlnx_32x36_2clk.veo: + VEO template file containing code that can be used as a model for + instantiating a CORE Generator module in a Verilog design. + +fifo_xlnx_32x36_2clk.xco: + CORE Generator input file containing the parameters used to + regenerate a core. + +fifo_xlnx_32x36_2clk.xise: + ISE Project Navigator support file. This is a generated file and should + not be edited directly. + +fifo_xlnx_32x36_2clk_readme.txt: + Text file indicating the files generated and how they are used. + +fifo_xlnx_32x36_2clk_xmdf.tcl: + ISE Project Navigator interface file. ISE uses this file to determine + how the files output by CORE Generator for the core can be integrated + into your ISE project. + +fifo_xlnx_32x36_2clk_flist.txt: + Text file listing all of the output files produced when a customized + core was generated in the CORE Generator. + + +Please see the Xilinx CORE Generator online help for further details on +generated files and how to use them. + diff --git a/usrp2/coregen/fifo_xlnx_32x36_2clk_xmdf.tcl b/usrp2/coregen/fifo_xlnx_32x36_2clk_xmdf.tcl new file mode 100644 index 000000000..ec9426357 --- /dev/null +++ b/usrp2/coregen/fifo_xlnx_32x36_2clk_xmdf.tcl @@ -0,0 +1,68 @@ +# The package naming convention is _xmdf +package provide fifo_xlnx_32x36_2clk_xmdf 1.0 + +# This includes some utilities that support common XMDF operations +package require utilities_xmdf + +# Define a namespace for this package. The name of the name space +# is _xmdf +namespace eval ::fifo_xlnx_32x36_2clk_xmdf { +# Use this to define any statics +} + +# Function called by client to rebuild the params and port arrays +# Optional when the use context does not require the param or ports +# arrays to be available. +proc ::fifo_xlnx_32x36_2clk_xmdf::xmdfInit { instance } { +# Variable containg name of library into which module is compiled +# Recommendation: +# Required +utilities_xmdf::xmdfSetData $instance Module Attributes Name fifo_xlnx_32x36_2clk +} +# ::fifo_xlnx_32x36_2clk_xmdf::xmdfInit + +# Function called by client to fill in all the xmdf* data variables +# based on the current settings of the parameters +proc ::fifo_xlnx_32x36_2clk_xmdf::xmdfApplyParams { instance } { + +set fcount 0 +# Array containing libraries that are assumed to exist +# Examples include unisim and xilinxcorelib +# Optional +# In this example, we assume that the unisim library will +# be magically +# available to the simulation and synthesis tool +utilities_xmdf::xmdfSetData $instance FileSet $fcount type logical_library +utilities_xmdf::xmdfSetData $instance FileSet $fcount logical_library unisim +incr fcount + +utilities_xmdf::xmdfSetData $instance FileSet $fcount relative_path fifo_generator_ug175.pdf +utilities_xmdf::xmdfSetData $instance FileSet $fcount type AnyView +incr fcount + +utilities_xmdf::xmdfSetData $instance FileSet $fcount relative_path fifo_xlnx_32x36_2clk.ngc +utilities_xmdf::xmdfSetData $instance FileSet $fcount type ngc +incr fcount + +utilities_xmdf::xmdfSetData $instance FileSet $fcount relative_path fifo_xlnx_32x36_2clk.v +utilities_xmdf::xmdfSetData $instance FileSet $fcount type verilog +incr fcount + +utilities_xmdf::xmdfSetData $instance FileSet $fcount relative_path fifo_xlnx_32x36_2clk.veo +utilities_xmdf::xmdfSetData $instance FileSet $fcount type verilog_template +incr fcount + +utilities_xmdf::xmdfSetData $instance FileSet $fcount relative_path fifo_xlnx_32x36_2clk.xco +utilities_xmdf::xmdfSetData $instance FileSet $fcount type coregen_ip +incr fcount + +utilities_xmdf::xmdfSetData $instance FileSet $fcount relative_path fifo_xlnx_32x36_2clk_xmdf.tcl +utilities_xmdf::xmdfSetData $instance FileSet $fcount type AnyView +incr fcount + +utilities_xmdf::xmdfSetData $instance FileSet $fcount associated_module fifo_xlnx_32x36_2clk +incr fcount + +} + +# ::gen_comp_name_xmdf::xmdfApplyParams diff --git a/usrp2/extramfifo/ext_fifo.v b/usrp2/extramfifo/ext_fifo.v index 2af59a75d..2a8d57448 100644 --- a/usrp2/extramfifo/ext_fifo.v +++ b/usrp2/extramfifo/ext_fifo.v @@ -18,7 +18,7 @@ //`define NO_EXT_FIFO module ext_fifo - #(parameter INT_WIDTH=36,EXT_WIDTH=18,RAM_DEPTH=19,FIFO_DEPTH=19) + #(parameter INT_WIDTH=36,EXT_WIDTH=18,RAM_DEPTH=19,FIFO_DEPTH=19) ( input int_clk, input ext_clk, @@ -44,34 +44,29 @@ module ext_fifo wire [EXT_WIDTH-1:0] write_data; wire [EXT_WIDTH-1:0] read_data; - wire full1, empty1; - wire almost_full2, full2, empty2; + wire full1, empty1; + wire almost_full2, full2, empty2; wire [INT_WIDTH-1:0] data_to_fifo; wire [INT_WIDTH-1:0] data_from_fifo; wire [FIFO_DEPTH-1:0] capacity; - + wire space_avail; + wire data_avail; + + // These next 2 lines here purely because ICARUS is crap at handling generate statements. + // Empirically this has been determined to make simulations work. + wire read_input_fifo = space_avail & ~empty1; + wire write_output_fifo = data_avail; - // FIFO buffers data from UDP engine into external FIFO clock domain. - fifo_xlnx_512x36_2clk_36to18 fifo_xlnx_512x36_2clk_36to18_i1 ( - .rst(rst), - .wr_clk(int_clk), - .rd_clk(ext_clk), - .din(datain), // Bus [35 : 0] - .wr_en(src_rdy_i), - .rd_en(space_avail&~empty1), - .dout(write_data), // Bus [17 : 0] - .full(full1), - .empty(empty1)); - - assign dst_rdy_o = ~full1; + assign src_rdy_o = ~empty2; + assign dst_rdy_o = ~full1; `ifdef NO_EXT_FIFO - assign space_avail = ~full2; - assign data_avail = ~empty1; - assign read_data = write_data; + assign space_avail = ~full2; + assign data_avail = ~empty1; + assign read_data = write_data; `else - // External FIFO running at ext clock rate and 18 bit width. + // External FIFO running at ext clock rate and 18 or 36 bit width. nobl_fifo #(.WIDTH(EXT_WIDTH),.RAM_DEPTH(RAM_DEPTH),.FIFO_DEPTH(FIFO_DEPTH)) nobl_fifo_i1 ( @@ -95,22 +90,67 @@ module ext_fifo .capacity(capacity) ); `endif // !`ifdef NO_EXT_FIFO + - - // FIFO buffers data read from external FIFO into DSP clk domain and to TX DSP. - fifo_xlnx_512x36_2clk_18to36 fifo_xlnx_512x36_2clk_18to36_i1 ( - .rst(rst), - .wr_clk(ext_clk), - .rd_clk(int_clk), - .din(read_data), // Bus [17 : 0] - .wr_en(data_avail), - .rd_en(dst_rdy_i), - .dout(dataout), // Bus [35 : 0] - .full(full2), - .prog_full(almost_full2), - .empty(empty2)); - assign src_rdy_o = ~empty2; + generate + if (EXT_WIDTH == 18 && INT_WIDTH == 36) begin: fifo_g1 + // FIFO buffers data from UDP engine into external FIFO clock domain. + fifo_xlnx_512x36_2clk_36to18 fifo_xlnx_512x36_2clk_36to18_i1 ( + .rst(rst), + .wr_clk(int_clk), + .rd_clk(ext_clk), + .din(datain), // Bus [35 : 0] + .wr_en(src_rdy_i), + .rd_en(read_input_fifo), + .dout(write_data), // Bus [17 : 0] + .full(full1), + .empty(empty1)); + + // FIFO buffers data read from external FIFO into DSP clk domain and to TX DSP. + fifo_xlnx_512x36_2clk_18to36 fifo_xlnx_512x36_2clk_18to36_i1 ( + .rst(rst), + .wr_clk(ext_clk), + .rd_clk(int_clk), + .din(read_data), // Bus [17 : 0] + .wr_en(write_output_fifo), + .rd_en(dst_rdy_i), + .dout(dataout), // Bus [35 : 0] + .full(full2), + .prog_full(almost_full2), + .empty(empty2)); + end // block: fifo_g1 + else if (EXT_WIDTH == 36 && INT_WIDTH == 36) begin: fifo_g1 + // FIFO buffers data from UDP engine into external FIFO clock domain. + fifo_xlnx_32x36_2clk fifo_xlnx_32x36_2clk_i1 ( + .rst(rst), + .wr_clk(int_clk), + .rd_clk(ext_clk), + .din(datain), // Bus [35 : 0] + .wr_en(src_rdy_i), + .rd_en(read_input_fifo), + .dout(write_data), // Bus [35 : 0] + .full(full1), + .empty(empty1)); + + // FIFO buffers data read from external FIFO into DSP clk domain and to TX DSP. + fifo_xlnx_32x36_2clk fifo_xlnx_32x36_2clk_i2 ( + .rst(rst), + .wr_clk(ext_clk), + .rd_clk(int_clk), + .din(read_data), // Bus [35 : 0] + .wr_en(write_output_fifo), + .rd_en(dst_rdy_i), + .dout(dataout), // Bus [35 : 0] + .full(full2), + .empty(empty2), + .prog_full(almost_full2)); + + end + endgenerate + + + always @ (posedge int_clk) debug[31:28] <= {empty2,full1,dst_rdy_i,src_rdy_i }; @@ -118,6 +158,7 @@ module ext_fifo debug[27:0] <= {RAM_WEn,RAM_CE1n,RAM_A[3:0],read_data[17:0],empty1,space_avail,data_avail,almost_full2 }; always@ (posedge ext_clk) -// debug2[31:0] <= {write_data[15:0],read_data[15:0]}; - debug2[31:0] <= 0; + // debug2[31:0] <= {write_data[15:0],read_data[15:0]}; + debug2[31:0] <= 0; + endmodule // ext_fifo diff --git a/usrp2/extramfifo/ext_fifo_tb.sh b/usrp2/extramfifo/ext_fifo_tb.sh old mode 100644 new mode 100755 diff --git a/usrp2/extramfifo/ext_fifo_tb.v b/usrp2/extramfifo/ext_fifo_tb.v index 0eda89769..5f4e28719 100644 --- a/usrp2/extramfifo/ext_fifo_tb.v +++ b/usrp2/extramfifo/ext_fifo_tb.v @@ -1,18 +1,31 @@ `timescale 1ns / 1ps -`define INT_WIDTH 36 -`define EXT_WIDTH 18 -`define RAM_DEPTH 19 -`define FIFO_DEPTH 8 -`define DUMP_VCD_FULL - -module ext_fifo_tb(); +//`define USRP2 +`define USRP2PLUS +`ifdef USRP2 + `define INT_WIDTH 36 + `define EXT_WIDTH 18 + `define RAM_DEPTH 19 + `define FIFO_DEPTH 8 + `define DUMP_VCD_FULL + `define INT_CLK_PERIOD 5 + `define EXT_CLK_PERIOD 4 +`elsif USRP2PLUS + `define INT_WIDTH 36 + `define EXT_WIDTH 36 + `define RAM_DEPTH 18 + `define FIFO_DEPTH 8 + `define DUMP_VCD_FULL + `define INT_CLK_PERIOD 5 + `define EXT_CLK_PERIOD 5 +`endif // `ifdef USRP2 + +module ext_fifo_tb(); + reg int_clk; reg ext_clk; reg rst; - - wire [`EXT_WIDTH-1:0] RAM_D_pi; wire [`EXT_WIDTH-1:0] RAM_D_po; @@ -33,7 +46,6 @@ module ext_fifo_tb(); reg dst_rdy_i; integer ether_frame; - // Clocks // Int clock is 100MHz // Ext clock is 125MHz @@ -47,10 +59,10 @@ module ext_fifo_tb(); end always - #5 int_clk <= ~int_clk; + #(`INT_CLK_PERIOD/2) int_clk <= ~int_clk; always - #4 ext_clk <= ~ext_clk; + #(`EXT_CLK_PERIOD/2) ext_clk <= ~ext_clk; initial begin @@ -270,7 +282,7 @@ module ext_fifo_tb(); // generate - for (i=0;i<18;i=i+1) + for (i=0;i<`EXT_WIDTH;i=i+1) begin : gen_RAM_D_IO IOBUF #( @@ -309,28 +321,53 @@ module ext_fifo_tb(); assign #2 RAM_A_ext = RAM_A; - - idt71v65603s150 idt71v65603s150_i1 - ( - .A(RAM_A_ext[17:0]), - .adv_ld_(RAM_LDn_ext), // advance (high) / load (low) - .bw1_(1'b0), - .bw2_(1'b0), - .bw3_(1'b1), - .bw4_(1'b1), // byte write enables (low) - .ce1_(RAM_CE1n_ext), - .ce2(1'b1), - .ce2_(1'b0), // chip enables - .cen_(RAM_CENn_ext), // clock enable (low) - .clk(ext_clk), // clock - .IO({RAM_D[16:9],RAM_D[7:0]}), - .IOP({RAM_D[17],RAM_D[8]}), // data bus - .lbo_(1'b0), // linear burst order (low) - .oe_(RAM_OEn_ext), // output enable (low) - .r_w_(RAM_WEn_ext) - ); // read (high) / write (low) + generate + if (`EXT_WIDTH==18) begin: ram_tb_g1 + idt71v65603s150 idt71v65603s150_i1 + ( + .A(RAM_A_ext[17:0]), + .adv_ld_(RAM_LDn_ext), // advance (high) / load (low) + .bw1_(1'b0), + .bw2_(1'b0), + .bw3_(1'b1), + .bw4_(1'b1), // byte write enables (low) + .ce1_(RAM_CE1n_ext), + .ce2(1'b1), + .ce2_(1'b0), // chip enables + .cen_(RAM_CENn_ext), // clock enable (low) + .clk(ext_clk), // clock + .IO({RAM_D[16:9],RAM_D[7:0]}), + .IOP({RAM_D[17],RAM_D[8]}), // data bus + .lbo_(1'b0), // linear burst order (low) + .oe_(RAM_OEn_ext), // output enable (low) + .r_w_(RAM_WEn_ext) + ); // read (high) / write (low) + end // block: ram_tb_g1 + else if (`EXT_WIDTH==36) begin: ram_tb_g1 + idt71v65603s150 idt71v65603s150_i1 + ( + .A(RAM_A_ext[17:0]), + .adv_ld_(RAM_LDn_ext), // advance (high) / load (low) + .bw1_(1'b0), + .bw2_(1'b0), + .bw3_(1'b0), + .bw4_(1'b0), // byte write enables (low) + .ce1_(RAM_CE1n_ext), + .ce2(1'b1), + .ce2_(1'b0), // chip enables + .cen_(RAM_CENn_ext), // clock enable (low) + .clk(ext_clk), // clock + .IO(RAM_D[31:0]), + .IOP(RAM_D[35:32]), // data bus + .lbo_(1'b0), // linear burst order (low) + .oe_(RAM_OEn_ext), // output enable (low) + .r_w_(RAM_WEn_ext) + ); // read (high) / write (low) + end // block: ram_tb_g1 + endgenerate + /* -----\/----- EXCLUDED -----\/----- diff --git a/usrp2/extramfifo/nobl_fifo.v b/usrp2/extramfifo/nobl_fifo.v index 4c009d980..0b63768fc 100644 --- a/usrp2/extramfifo/nobl_fifo.v +++ b/usrp2/extramfifo/nobl_fifo.v @@ -70,26 +70,27 @@ module nobl_fifo // Simple NoBL SRAM interface, 4 cycle read latency. // Read/Write arbitration via temprary application of empty/full flags. // - nobl_if nobl_if_i1 - ( - .clk(clk), - .rst(rst), - .RAM_D_pi(RAM_D_pi), - .RAM_D_po(RAM_D_po), - .RAM_D_poe(RAM_D_poe), - .RAM_A(RAM_A), - .RAM_WEn(RAM_WEn), - .RAM_CENn(RAM_CENn), - .RAM_LDn(RAM_LDn), - .RAM_OEn(RAM_OEn), - .RAM_CE1n(RAM_CE1n), - .address(address), - .data_out(write_data), - .data_in(read_data), - .data_in_valid(data_avail), - .write(write), - .enable(enable) - ); + nobl_if #(.WIDTH(WIDTH),.DEPTH(RAM_DEPTH)) + nobl_if_i1 + ( + .clk(clk), + .rst(rst), + .RAM_D_pi(RAM_D_pi), + .RAM_D_po(RAM_D_po), + .RAM_D_poe(RAM_D_poe), + .RAM_A(RAM_A), + .RAM_WEn(RAM_WEn), + .RAM_CENn(RAM_CENn), + .RAM_LDn(RAM_LDn), + .RAM_OEn(RAM_OEn), + .RAM_CE1n(RAM_CE1n), + .address(address), + .data_out(write_data), + .data_in(read_data), + .data_in_valid(data_avail), + .write(write), + .enable(enable) + ); diff --git a/usrp2/top/u2plus/Makefile b/usrp2/top/u2plus/Makefile index 23eb8908e..c38bd3ec1 100644 --- a/usrp2/top/u2plus/Makefile +++ b/usrp2/top/u2plus/Makefile @@ -24,6 +24,8 @@ include ../../vrt/Makefile.srcs include ../../udp/Makefile.srcs include ../../coregen/Makefile.srcs include ../../extram/Makefile.srcs +include ../../extramfifo/Makefile.srcs + ################################################## # Project Properties diff --git a/usrp2/top/u2plus/u2plus.ucf b/usrp2/top/u2plus/u2plus.ucf index aee9e57bf..3717b3d91 100755 --- a/usrp2/top/u2plus/u2plus.ucf +++ b/usrp2/top/u2plus/u2plus.ucf @@ -414,3 +414,11 @@ NET "ser_rx_clk" TNM_NET = "ser_rx_clk"; TIMESPEC "TS_ser_rx_clk" = PERIOD "ser_rx_clk" 10 ns HIGH 50 %; TIMESPEC "TS_clk_div_to_dsp_clk" = FROM "clk_div" TO "dcm_out" 10 ns; + +NET "CLK_FPGA_P" CLOCK_DEDICATED_ROUTE = FALSE; +PIN "DCM_INST/DCM_SP.CLKIN" CLOCK_DEDICATED_ROUTE = FALSE; + +NET "RAM_CLK" CLOCK_DEDICATED_ROUTE = FALSE; +PIN "DCM_INST1/DCM_SP.CLKFB" CLOCK_DEDICATED_ROUTE = FALSE; + + diff --git a/usrp2/top/u2plus/u2plus.v b/usrp2/top/u2plus/u2plus.v index 90dbe9d55..55b5bd8f4 100644 --- a/usrp2/top/u2plus/u2plus.v +++ b/usrp2/top/u2plus/u2plus.v @@ -216,7 +216,49 @@ module u2plus BUFG dspclk_BUFG (.I(dcm_out), .O(dsp_clk)); BUFG wbclk_BUFG (.I(clk_div), .O(wb_clk)); - + + wire RAM_CLK_buf; + wire clk100_ext; + wire clk100_ext_buf; + + DCM DCM_INST1 (.CLKFB(RAM_CLK_buf), + .CLKIN(clk_fpga), + .DSSEN(1'b0), + .PSCLK(1'b0), + .PSEN(1'b0), + .PSINCDEC(1'b0), + .RST(1'b0), + .CLK0(clk100_ext) ); + defparam DCM_INST1.CLK_FEEDBACK = "1X"; + defparam DCM_INST1.CLKDV_DIVIDE = 2.0; + defparam DCM_INST1.CLKFX_DIVIDE = 1; + defparam DCM_INST1.CLKFX_MULTIPLY = 4; + defparam DCM_INST1.CLKIN_DIVIDE_BY_2 = "FALSE"; + defparam DCM_INST1.CLKIN_PERIOD = 10.000; + defparam DCM_INST1.CLKOUT_PHASE_SHIFT = "FIXED"; + defparam DCM_INST1.DESKEW_ADJUST = "SYSTEM_SYNCHRONOUS"; + defparam DCM_INST1.DFS_FREQUENCY_MODE = "LOW"; + defparam DCM_INST1.DLL_FREQUENCY_MODE = "LOW"; + defparam DCM_INST1.DUTY_CYCLE_CORRECTION = "TRUE"; + defparam DCM_INST1.FACTORY_JF = 16'h8080; + defparam DCM_INST1.PHASE_SHIFT = -64; + defparam DCM_INST1.STARTUP_WAIT = "FALSE"; + + IBUFG RAM_CLK_buf_i1 (.I(RAM_CLK), + .O(RAM_CLK_buf)); + + BUFG clk100_ext_buf_i1 (.I(clk100_ext), + .O(clk100_ext_buf)); + + OFDDRRSE RAM_CLK_i1 (.Q(RAM_CLK), + .C0(clk100_ext_buf), + .C1(~clk100_ext_buf), + .CE(1'b1), + .D0(1'b1), + .D1(1'b0), + .R(1'b0), + .S(1'b0)); + // I2C -- Don't use external transistors for open drain, the FPGA implements this IOBUF scl_pin(.O(scl_pad_i), .IO(SCL), .I(scl_pad_o), .T(scl_pad_oen_o)); IOBUF sda_pin(.O(sda_pad_i), .IO(SDA), .I(sda_pad_o), .T(sda_pad_oen_o)); @@ -299,6 +341,36 @@ module u2plus .S(0) // Synchronous preset input ); */ + + + // + // Instantiate IO for Bidirectional bus to SRAM + // + wire [35:0] RAM_D_pi; + wire [35:0] RAM_D_po; + wire RAM_D_poe; + + genvar i; + + generate + for (i=0;i<36;i=i+1) + begin : gen_RAM_D_IO + + IOBUF #( + .DRIVE(12), + .IOSTANDARD("LVCMOS25"), + .SLEW("FAST") + ) + RAM_D_i ( + .O(RAM_D_pi[i]), + .I(RAM_D_po[i]), + .IO(RAM_D[i]), + .T(RAM_D_poe) + ); + end // block: gen_RAM_D_IO + endgenerate + + wire [15:0] dac_a_int, dac_b_int; // DAC A and B are swapped in schematic to facilitate clean layout @@ -377,11 +449,12 @@ module u2plus .sen_rx_dac (SEN_RX_DAC), .io_tx (io_tx[15:0]), .io_rx (io_rx[15:0]), - .RAM_D (RAM_D), + .RAM_D_po (RAM_D_po), + .RAM_D_pi (RAM_D_pi), + .RAM_D_poe (RAM_D_poe), .RAM_A (RAM_A), .RAM_CE1n (RAM_CE1n), .RAM_CENn (RAM_CENn), - .RAM_CLK (RAM_CLK), .RAM_WEn (RAM_WEn), .RAM_OEn (RAM_OEn), .RAM_LDn (RAM_LDn), @@ -398,6 +471,8 @@ module u2plus ); assign RAM_ZZ = 1; - assign RAM_BWn = 4'b1111; + // Byte Writes are qualified by the global write enable + // Always do 36bit operations to extram. + assign RAM_BWn = 4'b0000; endmodule // u2plus diff --git a/usrp2/top/u2plus/u2plus_core.v b/usrp2/top/u2plus/u2plus_core.v index 4378436a6..9b177390a 100644 --- a/usrp2/top/u2plus/u2plus_core.v +++ b/usrp2/top/u2plus/u2plus_core.v @@ -110,11 +110,12 @@ module u2plus_core inout [15:0] io_rx, // External RAM - inout [35:0] RAM_D, + input [35:0] RAM_D_pi, + output [35:0] RAM_D_po, + output RAM_D_poe, output [20:0] RAM_A, output RAM_CE1n, output RAM_CENn, - output RAM_CLK, output RAM_WEn, output RAM_OEn, output RAM_LDn, @@ -606,11 +607,41 @@ module u2plus_core wire tx_src_rdy, tx_dst_rdy; wire [31:0] debug_vt; +/* -----\/----- EXCLUDED -----\/----- fifo_cascade #(.WIDTH(36), .SIZE(DSP_TX_FIFOSIZE)) tx_fifo_cascade (.clk(dsp_clk), .reset(dsp_rst), .clear(0), .datain({rd1_flags,rd1_dat}), .src_rdy_i(rd1_ready_o), .dst_rdy_o(rd1_ready_i), .dataout(tx_data), .src_rdy_o(tx_src_rdy), .dst_rdy_i(tx_dst_rdy) ); - + -----/\----- EXCLUDED -----/\----- */ + // External and internal clock run at 100MHz for USRP2+ because ext RAM is 36bits wide + // and provides ample bandwidth. + assign RAM_A[20:18] = 3'b0; + + ext_fifo #(.EXT_WIDTH(36),.INT_WIDTH(36),.RAM_DEPTH(18),.FIFO_DEPTH(18)) + ext_fifo_i1 + ( + .int_clk(dsp_clk), + .ext_clk(dsp_clk), + .rst(dsp_rst), + .RAM_D_pi(RAM_D_pi), + .RAM_D_po(RAM_D_po), + .RAM_D_poe(RAM_D_poe), + .RAM_A(RAM_A[17:0]), + .RAM_WEn(RAM_WEn), + .RAM_CENn(RAM_CENn), + .RAM_LDn(RAM_LDn), + .RAM_OEn(RAM_OEn), + .RAM_CE1n(RAM_CE1n), + .datain({rd1_flags[3:2],rd1_dat[31:16],rd1_flags[1:0],rd1_dat[15:0]}), + .src_rdy_i(rd1_ready_o), // WRITE + .dst_rdy_o(rd1_ready_i), // not FULL + .dataout({tx_data[35:34],tx_data[31:16],tx_data[33:32],tx_data[15:0]}), + .src_rdy_o(tx_src_rdy), // not EMPTY + .dst_rdy_i(tx_dst_rdy), + .debug(debug_extfifo), + .debug2(debug_extfifo2) + ); + vita_tx_chain #(.BASE_CTRL(SR_TX_CTRL), .BASE_DSP(SR_TX_DSP), .REPORT_ERROR(1), .PROT_ENG_FLAGS(1)) vita_tx_chain -- cgit v1.2.3 From aa9643f60e91d00cd7990acde44efad17c2509ed Mon Sep 17 00:00:00 2001 From: Ian Buckley Date: Wed, 20 Oct 2010 15:45:44 -0700 Subject: Placed 2nd DCM into `ifdef DCM_FOR_RAMCLK which is dissabled by default Derived RAMCLK from 270degree offset of principle core DCM giving theoretical 2.5nS timing advance on RAM_CLK relative to RAM_* signals. --- usrp2/top/u2plus/u2plus.ucf | 8 ++++---- usrp2/top/u2plus/u2plus.v | 22 +++++++++++++++++++--- 2 files changed, 23 insertions(+), 7 deletions(-) diff --git a/usrp2/top/u2plus/u2plus.ucf b/usrp2/top/u2plus/u2plus.ucf index 3717b3d91..54dfd2a33 100755 --- a/usrp2/top/u2plus/u2plus.ucf +++ b/usrp2/top/u2plus/u2plus.ucf @@ -415,10 +415,10 @@ TIMESPEC "TS_ser_rx_clk" = PERIOD "ser_rx_clk" 10 ns HIGH 50 %; TIMESPEC "TS_clk_div_to_dsp_clk" = FROM "clk_div" TO "dcm_out" 10 ns; -NET "CLK_FPGA_P" CLOCK_DEDICATED_ROUTE = FALSE; -PIN "DCM_INST/DCM_SP.CLKIN" CLOCK_DEDICATED_ROUTE = FALSE; +#NET "CLK_FPGA_P" CLOCK_DEDICATED_ROUTE = FALSE; +#PIN "DCM_INST/DCM_SP.CLKIN" CLOCK_DEDICATED_ROUTE = FALSE; -NET "RAM_CLK" CLOCK_DEDICATED_ROUTE = FALSE; -PIN "DCM_INST1/DCM_SP.CLKFB" CLOCK_DEDICATED_ROUTE = FALSE; +#NET "RAM_CLK" CLOCK_DEDICATED_ROUTE = FALSE; +#PIN "DCM_INST1/DCM_SP.CLKFB" CLOCK_DEDICATED_ROUTE = FALSE; diff --git a/usrp2/top/u2plus/u2plus.v b/usrp2/top/u2plus/u2plus.v index 55b5bd8f4..5396ae6cd 100644 --- a/usrp2/top/u2plus/u2plus.v +++ b/usrp2/top/u2plus/u2plus.v @@ -1,4 +1,5 @@ `timescale 1ns / 1ps +//`define DCM_FOR_RAMCLK ////////////////////////////////////////////////////////////////////////////////// module u2plus @@ -195,7 +196,7 @@ module u2plus .CLK2X180(), .CLK90(), .CLK180(), - .CLK270(), + .CLK270(clk270_100), .LOCKED(LOCKED_OUT), .PSDONE(), .STATUS()); @@ -216,7 +217,8 @@ module u2plus BUFG dspclk_BUFG (.I(dcm_out), .O(dsp_clk)); BUFG wbclk_BUFG (.I(clk_div), .O(wb_clk)); - + +`ifdef DCM_FOR_RAMCLK wire RAM_CLK_buf; wire clk100_ext; wire clk100_ext_buf; @@ -258,7 +260,21 @@ module u2plus .D1(1'b0), .R(1'b0), .S(1'b0)); - + +`else // !`ifdef DCM_FOR_RAMCLK + // assign RAM_CLK = dcm_out; + BUFG clk270_100_buf_i1 (.I(clk270_100), + .O(clk270_100_buf)); + OFDDRRSE RAM_CLK_i1 (.Q(RAM_CLK), + .C0(clk270_100_buf), + .C1(~clk270_100_buf), + .CE(1'b1), + .D0(1'b1), + .D1(1'b0), + .R(1'b0), + .S(1'b0)); +`endif + // I2C -- Don't use external transistors for open drain, the FPGA implements this IOBUF scl_pin(.O(scl_pad_i), .IO(SCL), .I(scl_pad_o), .T(scl_pad_oen_o)); IOBUF sda_pin(.O(sda_pad_i), .IO(SDA), .I(sda_pad_o), .T(sda_pad_oen_o)); -- cgit v1.2.3 From ddb380141841b56fa0720915db7f91f5a28f936c Mon Sep 17 00:00:00 2001 From: Ian Buckley Date: Thu, 21 Oct 2010 10:55:07 -0700 Subject: Defaulted all SRAM pins to LVCMOS25 8mA FAST --- usrp2/top/u2plus/u2plus.ucf | 134 ++++++++++++++++++++++---------------------- 1 file changed, 67 insertions(+), 67 deletions(-) diff --git a/usrp2/top/u2plus/u2plus.ucf b/usrp2/top/u2plus/u2plus.ucf index 54dfd2a33..25267a67e 100755 --- a/usrp2/top/u2plus/u2plus.ucf +++ b/usrp2/top/u2plus/u2plus.ucf @@ -307,73 +307,73 @@ NET "ser_rkmsb" LOC = "AD25" ; NET "ser_rklsb" LOC = "Y20" ; ## SRAM -NET "RAM_D<35>" LOC = "K16" ; -NET "RAM_D<34>" LOC = "D20" ; -NET "RAM_D<33>" LOC = "C20" ; -NET "RAM_D<32>" LOC = "E21" ; -NET "RAM_D<31>" LOC = "D21" ; -NET "RAM_D<30>" LOC = "C21" ; -NET "RAM_D<29>" LOC = "B21" ; -NET "RAM_D<28>" LOC = "H17" ; -NET "RAM_D<27>" LOC = "G17" ; -NET "RAM_D<26>" LOC = "B23" ; -NET "RAM_D<25>" LOC = "A22" ; -NET "RAM_D<24>" LOC = "D23" ; -NET "RAM_D<23>" LOC = "C23" ; -NET "RAM_D<22>" LOC = "D22" ; -NET "RAM_D<21>" LOC = "C22" ; -NET "RAM_D<20>" LOC = "F19" ; -NET "RAM_D<19>" LOC = "G20" ; -NET "RAM_D<18>" LOC = "F20" ; -NET "RAM_D<17>" LOC = "F7" ; -NET "RAM_D<16>" LOC = "E7" ; -NET "RAM_D<15>" LOC = "G9" ; -NET "RAM_D<14>" LOC = "H9" ; -NET "RAM_D<13>" LOC = "G10" ; -NET "RAM_D<12>" LOC = "H10" ; -NET "RAM_D<11>" LOC = "A4" ; -NET "RAM_D<10>" LOC = "B4" ; -NET "RAM_D<9>" LOC = "C5" ; -NET "RAM_D<8>" LOC = "D6" ; -NET "RAM_D<7>" LOC = "J11" ; -NET "RAM_D<6>" LOC = "K11" ; -NET "RAM_D<5>" LOC = "B7" ; -NET "RAM_D<4>" LOC = "C7" ; -NET "RAM_D<3>" LOC = "B6" ; -NET "RAM_D<2>" LOC = "C6" ; -NET "RAM_D<1>" LOC = "C8" ; -NET "RAM_D<0>" LOC = "D8" ; -NET "RAM_A<0>" LOC = "C11" ; -NET "RAM_A<1>" LOC = "E12" ; -NET "RAM_A<2>" LOC = "F12" ; -NET "RAM_A<3>" LOC = "D13" ; -NET "RAM_A<4>" LOC = "C12" ; -NET "RAM_A<5>" LOC = "A12" ; -NET "RAM_A<6>" LOC = "B12" ; -NET "RAM_A<7>" LOC = "E14" ; -NET "RAM_A<8>" LOC = "F14" ; -NET "RAM_A<9>" LOC = "B15" ; -NET "RAM_A<10>" LOC = "A15" ; -NET "RAM_A<11>" LOC = "D16" ; -NET "RAM_A<12>" LOC = "C15" ; -NET "RAM_A<13>" LOC = "D17" ; -NET "RAM_A<14>" LOC = "C16" ; -NET "RAM_A<15>" LOC = "F15" ; -NET "RAM_A<16>" LOC = "C17" ; -NET "RAM_A<17>" LOC = "B17" ; -NET "RAM_A<18>" LOC = "B18" ; -NET "RAM_A<19>" LOC = "A18" ; -NET "RAM_A<20>" LOC = "D18" ; -NET "RAM_BWn<3>" LOC = "D9" ; -NET "RAM_BWn<2>" LOC = "A9" ; -NET "RAM_BWn<1>" LOC = "B9" ; -NET "RAM_BWn<0>" LOC = "G12" ; -NET "RAM_ZZ" LOC = "J12" ; -NET "RAM_LDn" LOC = "H12" ; -NET "RAM_OEn" LOC = "C10" ; -NET "RAM_WEn" LOC = "D10" ; -NET "RAM_CENn" LOC = "B10" ; -NET "RAM_CLK" LOC = "A10" ; +NET "RAM_D<35>" LOC = "K16" |IOSTANDARD = LVCMOS25 |DRIVE = 8 |SLEW = FAST ; +NET "RAM_D<34>" LOC = "D20" |IOSTANDARD = LVCMOS25 |DRIVE = 8 |SLEW = FAST ; +NET "RAM_D<33>" LOC = "C20" |IOSTANDARD = LVCMOS25 |DRIVE = 8 |SLEW = FAST ; +NET "RAM_D<32>" LOC = "E21" |IOSTANDARD = LVCMOS25 |DRIVE = 8 |SLEW = FAST ; +NET "RAM_D<31>" LOC = "D21" |IOSTANDARD = LVCMOS25 |DRIVE = 8 |SLEW = FAST ; +NET "RAM_D<30>" LOC = "C21" |IOSTANDARD = LVCMOS25 |DRIVE = 8 |SLEW = FAST ; +NET "RAM_D<29>" LOC = "B21" |IOSTANDARD = LVCMOS25 |DRIVE = 8 |SLEW = FAST ; +NET "RAM_D<28>" LOC = "H17" |IOSTANDARD = LVCMOS25 |DRIVE = 8 |SLEW = FAST ; +NET "RAM_D<27>" LOC = "G17" |IOSTANDARD = LVCMOS25 |DRIVE = 8 |SLEW = FAST ; +NET "RAM_D<26>" LOC = "B23" |IOSTANDARD = LVCMOS25 |DRIVE = 8 |SLEW = FAST ; +NET "RAM_D<25>" LOC = "A22" |IOSTANDARD = LVCMOS25 |DRIVE = 8 |SLEW = FAST ; +NET "RAM_D<24>" LOC = "D23" |IOSTANDARD = LVCMOS25 |DRIVE = 8 |SLEW = FAST ; +NET "RAM_D<23>" LOC = "C23" |IOSTANDARD = LVCMOS25 |DRIVE = 8 |SLEW = FAST ; +NET "RAM_D<22>" LOC = "D22" |IOSTANDARD = LVCMOS25 |DRIVE = 8 |SLEW = FAST ; +NET "RAM_D<21>" LOC = "C22" |IOSTANDARD = LVCMOS25 |DRIVE = 8 |SLEW = FAST ; +NET "RAM_D<20>" LOC = "F19" |IOSTANDARD = LVCMOS25 |DRIVE = 8 |SLEW = FAST ; +NET "RAM_D<19>" LOC = "G20" |IOSTANDARD = LVCMOS25 |DRIVE = 8 |SLEW = FAST ; +NET "RAM_D<18>" LOC = "F20" |IOSTANDARD = LVCMOS25 |DRIVE = 8 |SLEW = FAST ; +NET "RAM_D<17>" LOC = "F7" |IOSTANDARD = LVCMOS25 |DRIVE = 8 |SLEW = FAST ; +NET "RAM_D<16>" LOC = "E7" |IOSTANDARD = LVCMOS25 |DRIVE = 8 |SLEW = FAST ; +NET "RAM_D<15>" LOC = "G9" |IOSTANDARD = LVCMOS25 |DRIVE = 8 |SLEW = FAST ; +NET "RAM_D<14>" LOC = "H9" |IOSTANDARD = LVCMOS25 |DRIVE = 8 |SLEW = FAST ; +NET "RAM_D<13>" LOC = "G10" |IOSTANDARD = LVCMOS25 |DRIVE = 8 |SLEW = FAST ; +NET "RAM_D<12>" LOC = "H10" |IOSTANDARD = LVCMOS25 |DRIVE = 8 |SLEW = FAST ; +NET "RAM_D<11>" LOC = "A4" |IOSTANDARD = LVCMOS25 |DRIVE = 8 |SLEW = FAST ; +NET "RAM_D<10>" LOC = "B4" |IOSTANDARD = LVCMOS25 |DRIVE = 8 |SLEW = FAST ; +NET "RAM_D<9>" LOC = "C5" |IOSTANDARD = LVCMOS25 |DRIVE = 8 |SLEW = FAST ; +NET "RAM_D<8>" LOC = "D6" |IOSTANDARD = LVCMOS25 |DRIVE = 8 |SLEW = FAST ; +NET "RAM_D<7>" LOC = "J11" |IOSTANDARD = LVCMOS25 |DRIVE = 8 |SLEW = FAST ; +NET "RAM_D<6>" LOC = "K11" |IOSTANDARD = LVCMOS25 |DRIVE = 8 |SLEW = FAST ; +NET "RAM_D<5>" LOC = "B7" |IOSTANDARD = LVCMOS25 |DRIVE = 8 |SLEW = FAST ; +NET "RAM_D<4>" LOC = "C7" |IOSTANDARD = LVCMOS25 |DRIVE = 8 |SLEW = FAST ; +NET "RAM_D<3>" LOC = "B6" |IOSTANDARD = LVCMOS25 |DRIVE = 8 |SLEW = FAST ; +NET "RAM_D<2>" LOC = "C6" |IOSTANDARD = LVCMOS25 |DRIVE = 8 |SLEW = FAST ; +NET "RAM_D<1>" LOC = "C8" |IOSTANDARD = LVCMOS25 |DRIVE = 8 |SLEW = FAST ; +NET "RAM_D<0>" LOC = "D8" |IOSTANDARD = LVCMOS25 |DRIVE = 8 |SLEW = FAST ; +NET "RAM_A<0>" LOC = "C11" |IOSTANDARD = LVCMOS25 |DRIVE = 8 |SLEW = FAST ; +NET "RAM_A<1>" LOC = "E12" |IOSTANDARD = LVCMOS25 |DRIVE = 8 |SLEW = FAST ; +NET "RAM_A<2>" LOC = "F12" |IOSTANDARD = LVCMOS25 |DRIVE = 8 |SLEW = FAST ; +NET "RAM_A<3>" LOC = "D13" |IOSTANDARD = LVCMOS25 |DRIVE = 8 |SLEW = FAST ; +NET "RAM_A<4>" LOC = "C12" |IOSTANDARD = LVCMOS25 |DRIVE = 8 |SLEW = FAST ; +NET "RAM_A<5>" LOC = "A12" |IOSTANDARD = LVCMOS25 |DRIVE = 8 |SLEW = FAST ; +NET "RAM_A<6>" LOC = "B12" |IOSTANDARD = LVCMOS25 |DRIVE = 8 |SLEW = FAST ; +NET "RAM_A<7>" LOC = "E14" |IOSTANDARD = LVCMOS25 |DRIVE = 8 |SLEW = FAST ; +NET "RAM_A<8>" LOC = "F14" |IOSTANDARD = LVCMOS25 |DRIVE = 8 |SLEW = FAST ; +NET "RAM_A<9>" LOC = "B15" |IOSTANDARD = LVCMOS25 |DRIVE = 8 |SLEW = FAST ; +NET "RAM_A<10>" LOC = "A15" |IOSTANDARD = LVCMOS25 |DRIVE = 8 |SLEW = FAST ; +NET "RAM_A<11>" LOC = "D16" |IOSTANDARD = LVCMOS25 |DRIVE = 8 |SLEW = FAST ; +NET "RAM_A<12>" LOC = "C15" |IOSTANDARD = LVCMOS25 |DRIVE = 8 |SLEW = FAST ; +NET "RAM_A<13>" LOC = "D17" |IOSTANDARD = LVCMOS25 |DRIVE = 8 |SLEW = FAST ; +NET "RAM_A<14>" LOC = "C16" |IOSTANDARD = LVCMOS25 |DRIVE = 8 |SLEW = FAST ; +NET "RAM_A<15>" LOC = "F15" |IOSTANDARD = LVCMOS25 |DRIVE = 8 |SLEW = FAST ; +NET "RAM_A<16>" LOC = "C17" |IOSTANDARD = LVCMOS25 |DRIVE = 8 |SLEW = FAST ; +NET "RAM_A<17>" LOC = "B17" |IOSTANDARD = LVCMOS25 |DRIVE = 8 |SLEW = FAST ; +NET "RAM_A<18>" LOC = "B18" |IOSTANDARD = LVCMOS25 |DRIVE = 8 |SLEW = FAST ; +NET "RAM_A<19>" LOC = "A18" |IOSTANDARD = LVCMOS25 |DRIVE = 8 |SLEW = FAST ; +NET "RAM_A<20>" LOC = "D18" |IOSTANDARD = LVCMOS25 |DRIVE = 8 |SLEW = FAST ; +NET "RAM_BWn<3>" LOC = "D9" |IOSTANDARD = LVCMOS25 |DRIVE = 8 |SLEW = FAST ; +NET "RAM_BWn<2>" LOC = "A9" |IOSTANDARD = LVCMOS25 |DRIVE = 8 |SLEW = FAST ; +NET "RAM_BWn<1>" LOC = "B9" |IOSTANDARD = LVCMOS25 |DRIVE = 8 |SLEW = FAST ; +NET "RAM_BWn<0>" LOC = "G12" |IOSTANDARD = LVCMOS25 |DRIVE = 8 |SLEW = FAST ; +NET "RAM_ZZ" LOC = "J12" |IOSTANDARD = LVCMOS25 |DRIVE = 8 |SLEW = FAST ; +NET "RAM_LDn" LOC = "H12" |IOSTANDARD = LVCMOS25 |DRIVE = 8 |SLEW = FAST ; +NET "RAM_OEn" LOC = "C10" |IOSTANDARD = LVCMOS25 |DRIVE = 8 |SLEW = FAST ; +NET "RAM_WEn" LOC = "D10" |IOSTANDARD = LVCMOS25 |DRIVE = 8 |SLEW = FAST ; +NET "RAM_CENn" LOC = "B10" |IOSTANDARD = LVCMOS25 |DRIVE = 8 |SLEW = FAST ; +NET "RAM_CLK" LOC = "A10" |IOSTANDARD = LVCMOS25 |DRIVE = 8 |SLEW = FAST ; ## SPI Flash NET "flash_miso" LOC = "AF24" ; -- cgit v1.2.3 From 4e5f4e137e70728116536ac19f1bf946fa890b7d Mon Sep 17 00:00:00 2001 From: Ian Buckley Date: Wed, 10 Nov 2010 09:45:12 -0800 Subject: 1) u2p has added a new signal from the SRAM to the pinout, RAM_ZZ which allows the SRAM to be placed in a sleep mode. This pin was erroniously pulled high at the top level rendering the SRAM unusable. 2) Added declaration for extramfifo debug bus which had got deleted at some point in the past 3) Created a debug bundle of signals from extsramfifo to help diagnose problem 1) 4) u2p Rev1 PCB ommits control of any of the SRAM chip selects. Made a code change so that control logic does not rely on the presence of this pin and ensuring that the SRAM is always placed in READ mode in any idle cycles. --- usrp2/extramfifo/ext_fifo.v | 12 ++++++------ usrp2/extramfifo/nobl_if.v | 9 ++++++--- usrp2/top/u2plus/u2plus.v | 3 ++- usrp2/top/u2plus/u2plus_core.v | 4 +++- 4 files changed, 17 insertions(+), 11 deletions(-) diff --git a/usrp2/extramfifo/ext_fifo.v b/usrp2/extramfifo/ext_fifo.v index 2a8d57448..44229f846 100644 --- a/usrp2/extramfifo/ext_fifo.v +++ b/usrp2/extramfifo/ext_fifo.v @@ -46,8 +46,6 @@ module ext_fifo wire [EXT_WIDTH-1:0] read_data; wire full1, empty1; wire almost_full2, full2, empty2; - wire [INT_WIDTH-1:0] data_to_fifo; - wire [INT_WIDTH-1:0] data_from_fifo; wire [FIFO_DEPTH-1:0] capacity; wire space_avail; wire data_avail; @@ -151,12 +149,14 @@ module ext_fifo - always @ (posedge int_clk) - debug[31:28] <= {empty2,full1,dst_rdy_i,src_rdy_i }; +// always @ (posedge int_clk) +// debug[31:28] <= {empty2,full1,dst_rdy_i,src_rdy_i }; always @ (posedge ext_clk) - debug[27:0] <= {RAM_WEn,RAM_CE1n,RAM_A[3:0],read_data[17:0],empty1,space_avail,data_avail,almost_full2 }; - + // debug[27:0] <= {RAM_WEn,RAM_CE1n,RAM_A[3:0],read_data[17:0],empty1,space_avail,data_avail,almost_full2 }; + debug[31:0] <= {7'h0,src_rdy_i,read_input_fifo,write_output_fifo,dst_rdy_i,full2,almost_full2,empty2,full1,empty1,write_data[7:0],read_data[7:0]}; + + always@ (posedge ext_clk) // debug2[31:0] <= {write_data[15:0],read_data[15:0]}; debug2[31:0] <= 0; diff --git a/usrp2/extramfifo/nobl_if.v b/usrp2/extramfifo/nobl_if.v index 391a841e8..7ff7eaa03 100644 --- a/usrp2/extramfifo/nobl_if.v +++ b/usrp2/extramfifo/nobl_if.v @@ -50,18 +50,21 @@ module nobl_if address_pipe1 <= 0; write_pipe1 <= 0; data_out_pipe1 <= 0; + RAM_WEn <= 1; + RAM_CE1n <= 1; + end else begin enable_pipe1 <= enable; - RAM_CE1n <= ~enable; // Creates IOB flob - + RAM_CE1n <= ~enable; // Creates IOB flop + RAM_WEn <= ~write; // Creates IOB flop if (enable) begin address_pipe1 <= address; write_pipe1 <= write; - RAM_WEn <= ~write; // Creates IOB flob +// RAM_WEn <= ~write; // Creates IOB flop if (write) diff --git a/usrp2/top/u2plus/u2plus.v b/usrp2/top/u2plus/u2plus.v index 5396ae6cd..d4a681731 100644 --- a/usrp2/top/u2plus/u2plus.v +++ b/usrp2/top/u2plus/u2plus.v @@ -486,7 +486,8 @@ module u2plus .spiflash_mosi (flash_mosi) ); - assign RAM_ZZ = 1; + // Drive low so that RAM does not sleep. + assign RAM_ZZ = 0; // Byte Writes are qualified by the global write enable // Always do 36bit operations to extram. assign RAM_BWn = 4'b0000; diff --git a/usrp2/top/u2plus/u2plus_core.v b/usrp2/top/u2plus/u2plus_core.v index 9b177390a..081ffe4c6 100644 --- a/usrp2/top/u2plus/u2plus_core.v +++ b/usrp2/top/u2plus/u2plus_core.v @@ -164,7 +164,9 @@ module u2plus_core wire [31:0] atr_lines; wire [31:0] debug_rx, debug_mac, debug_mac0, debug_mac1, debug_tx_dsp, debug_txc, - debug_serdes0, debug_serdes1, debug_serdes2, debug_rx_dsp, debug_udp; + debug_serdes0, debug_serdes1, debug_serdes2, debug_rx_dsp, debug_udp, + debug_extfifo; + wire [15:0] ser_rx_occ, ser_tx_occ, dsp_rx_occ, dsp_tx_occ, eth_rx_occ, eth_tx_occ, eth_rx_occ2; wire ser_rx_full, ser_tx_full, dsp_rx_full, dsp_tx_full, eth_rx_full, eth_tx_full, eth_rx_full2; -- cgit v1.2.3 From 51d68f095f2341e93232683bd6e3660285478196 Mon Sep 17 00:00:00 2001 From: Ian Buckley Date: Thu, 11 Nov 2010 10:06:36 -0800 Subject: 1) Created new FIFO IP in Coregen. 512x36 dual clcok FIFO with programable full watermark 2) Put larger FIFO on output of u2plus extramfifo that is compatable with u2_rev3 EMI fixes. --- usrp2/coregen/Makefile.srcs | 2 + usrp2/coregen/fifo_xlnx_512x36_2clk_prog_full.gise | 30 ++++ usrp2/coregen/fifo_xlnx_512x36_2clk_prog_full.ngc | 3 + usrp2/coregen/fifo_xlnx_512x36_2clk_prog_full.v | 173 +++++++++++++++++++++ usrp2/coregen/fifo_xlnx_512x36_2clk_prog_full.veo | 53 +++++++ usrp2/coregen/fifo_xlnx_512x36_2clk_prog_full.xco | 84 ++++++++++ usrp2/coregen/fifo_xlnx_512x36_2clk_prog_full.xise | 72 +++++++++ .../fifo_xlnx_512x36_2clk_prog_full_flist.txt | 12 ++ .../fifo_xlnx_512x36_2clk_prog_full_readme.txt | 47 ++++++ .../fifo_xlnx_512x36_2clk_prog_full_xmdf.tcl | 68 ++++++++ usrp2/extramfifo/ext_fifo.v | 22 +-- 11 files changed, 555 insertions(+), 11 deletions(-) create mode 100644 usrp2/coregen/fifo_xlnx_512x36_2clk_prog_full.gise create mode 100644 usrp2/coregen/fifo_xlnx_512x36_2clk_prog_full.ngc create mode 100644 usrp2/coregen/fifo_xlnx_512x36_2clk_prog_full.v create mode 100644 usrp2/coregen/fifo_xlnx_512x36_2clk_prog_full.veo create mode 100644 usrp2/coregen/fifo_xlnx_512x36_2clk_prog_full.xco create mode 100644 usrp2/coregen/fifo_xlnx_512x36_2clk_prog_full.xise create mode 100644 usrp2/coregen/fifo_xlnx_512x36_2clk_prog_full_flist.txt create mode 100644 usrp2/coregen/fifo_xlnx_512x36_2clk_prog_full_readme.txt create mode 100644 usrp2/coregen/fifo_xlnx_512x36_2clk_prog_full_xmdf.tcl diff --git a/usrp2/coregen/Makefile.srcs b/usrp2/coregen/Makefile.srcs index f163877a9..a3a5d826d 100644 --- a/usrp2/coregen/Makefile.srcs +++ b/usrp2/coregen/Makefile.srcs @@ -22,4 +22,6 @@ fifo_xlnx_512x36_2clk_36to18.v \ fifo_xlnx_512x36_2clk_36to18.xco \ fifo_xlnx_512x36_2clk_18to36.v \ fifo_xlnx_512x36_2clk_18to36.xco \ +fifo_xlnx_512x36_2clk_prog_full.v \ +fifo_xlnx_512x36_2clk_prog_full.xco \ )) diff --git a/usrp2/coregen/fifo_xlnx_512x36_2clk_prog_full.gise b/usrp2/coregen/fifo_xlnx_512x36_2clk_prog_full.gise new file mode 100644 index 000000000..9abec8c3e --- /dev/null +++ b/usrp2/coregen/fifo_xlnx_512x36_2clk_prog_full.gise @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + 11.1 + + + + + + + + + + diff --git a/usrp2/coregen/fifo_xlnx_512x36_2clk_prog_full.ngc b/usrp2/coregen/fifo_xlnx_512x36_2clk_prog_full.ngc new file mode 100644 index 000000000..9cb73d5ce --- /dev/null +++ b/usrp2/coregen/fifo_xlnx_512x36_2clk_prog_full.ngc @@ -0,0 +1,3 @@ +XILINX-XDB 0.1 STUB 0.1 ASCII +XILINX-XDM V1.6e +$4cb40<,[o}e~g`n;"2*726&;$9,)?40893456789:;8=5?0123456789:;<=>?0123456789:;<=>?0123456789:;<=>?0123456789:;<=>;;1A3<4=6;2;%<<5=4:0076753:81EC^ZT;FJE956294:>6==:HLSQQ112906?IR\Y__6IAN<2394;743:81CXZ_UU8GKG:493:5=?5<6;KMTPR=l`d7?84?>0687301?69l29x>=>?ff662(363=>08=HI1097>LHW]]0OE]O33;2=54=32@D[YY4KIQ@?7?699;1?6B[[PTV9@JVF4:0;2<<44;MVPUSS2ME[N1=50?68102792<97;7;;7;:24=?<22;<=:48D:B5>?330:;5?56659:23?6:231EC^ZT;CG@WG;03:5=?56:HLSQQ0g8=?OIX\^1|ah_dosp|Ys`{oxd1650?06?<=878>744FNQWW>uthoVof|ywPtipfwmYimnki1650?3g?<057GAPTV9twi`Wog`Rzgrdqk[kc`i}o747>1199:>JSSX\^1hlzn_bmvjq:?294:n675OTVSQQrtXlh~jSnaznu>;>5853H837LJKR@>3:==FLMXJ0<07;@FGVD:5611JHI\N<2<;?DBCZH6?255NDEPB808?3HNO^L29>99B@ATF4>4j7LJKR@>;>58?3HNO^L27>99B@ATE49437LJKRC>2:==FLMXI0?07;@FGVG:4611JHI\M<5<;?DBCZK6>255NDEPA838?3HNO^O28>`9B@ATE410;255NDEPA8=843HFG56O\YOA\V@A63K90NX<7;CWP[LHAG81H>6MJ139@L@ELWECHIC]J_U[SA7=DA=1H@FO;;BNHF6=DD[30OBCBIUVF@426JF6:FJE969?2NBM1??>69GMD:697=0HDO313<4?AOF4895;6JFA=37:2=CAH6:9394DHC?53803MCJ0<917:FJE97?6>1OEL2>9?48@LG;97=0HDO321<4?AOF4;;5;6JFA=01:2=CAH69?394DHC?61803MCJ0?;17:FJE9416>1OEL2=7?58@LG;:14<7IGN<3;=2>BNI585;6JFA=13:<=CAH68=7>17:FJE9566?1OEL2<>79GMD:36?1OEL2:>79GMD:16?1OEL28>79GMD:?6?1OEL26>79GMG:76>1OEO2>0?58@LD;984<7IGM<00=3>BNJ5;82:5KIC>20;169GMG:607=0HDL318<5?AOE484<7IGM<32=3>BNJ58:2:5KIC>16;1>08;EKA8729?2NBN1<:>69GMG:5>7=0HDL326<4?AOE4;25;6JFB=0::3=CAK692:5KIC>04;?69GMG:497<0HDL33?48@LD;<7<0HDL35?48@LD;>7<0HDL37?48@LD;07<0HDL39?58@LVF494<7IG_A=3=3>BNXH69245KIQC?7?69?2NB\L2<>69GMUD;87=0HD^M<0<4?AOWJ58556JFPC>0>5803MC[N1=16:FLE969?2NDM1??>69GKD:697=0HBO313<4?AIF4895;6J@A=37:2=CGH6:9394DNC?53803MEJ0<917:FLE97?6>1OCL2>9?48@JG;97=0HBO321<4?AIF4;;5;6J@A=01:2=CGH69?394DNC?61803MEJ0?;17:FLE9416>1OCL2=7?58@JG;:14<7IAN<3;=2>BHI585;6J@A=13:<=CGH68=7>17:FLE9566?1OCL2<>79GKD:36?1OCL2:>79GKD:16?1OCL28>79GKD:?6?1OCL26>69GKDYUMN<0HBL30?58@JD;994<7IAM<03=3>BHJ5;92:5KOC>27;169GKG:6?7=0HBL319<4?AIE4835:6J@B=3=3>BHJ58;2:5KOC>15;1?08;EMA8759?2NDN1<;>69GKG:5=7=0HBL327<4?AIE4;=5;6J@B=0;:2=CGK695384DN@?6;14=7IAM<9<5?AIE404<7IAM_SGD3>BHXH6;2:5KOQC?5;12:2=CGYH7>374DNRA86<76>1OC]L33?18AKG43LDIn6KA_DA@[WCFLj1NBRKLC^UQMQC53O897K6:;GCOW@40JI^J4:DGV@764IOKWTZ6702CEEY^P00:8MKOSXV:946GAIUR\46>;8:KMMQVX8<20ECG[P^25<>OIA]ZT<:74IOKWWQGSM>1BBDZP0158MKOSW9;<7D@FT^213>OIA]U;?:5FNHV\411J7:KMMQY7N>1BBDZP1158MKOSW8;<7D@FT^313>OIA]U:?:5FNHV\511769JJLRX91=0ECG[_0;4?LHN\V;J;6GAIU]2F2=NF@^T=N94IOKW[4B03@DBXR?J7:KMMQY6N>1BBDZP2158MKOSW;;<7D@FT^013>OIA]U9?:5FNHV\611N94IOKW[7B03@DBXR1BBDZP3158MKOSW:;<7D@FT^113>OIA]U8?:5FNHV\711;8;HLJPZ51?2CEEYQ<769JJLRX;1=0ECG[_2;4?LHN\V9J;6GAIU]0F2=NF@^T?N94IOKW[6B03@DBXR=J7:KMMQY4N?1BBDZPA79JJLRXJ;1GE?5CO79OKDBBL>1GCJGLAM68HPR6<2F^X?:4LTV00>JR\=<0@XZ;_E48HPR3WE?0A^I@N49NQ]E^k2Gjfb|YesqjkkeH7:2D:86@>0768J460<2D:<5:4N02:7>H69=1E=<>;;O3251=I988?7C?>359M54233G;:995A1047?K76?=1E=<6;;O32=6=I9;>0B<2268J443<2D:>8:4N0050>H6:>>0B<<74:L26<595A1217?K74<=1E=>;;;O3021=I9:=?7C?<859M56?43G;?86@>4168J426<2D:8?:4N0600>H6H6?=1E=:9<;O3;7>H61:1E>==4N330?K45;2D9?>5A2518J7343G8=?6@=729M6=5=<;O177>H4=:1E?;=4N250?K5?;2D85>5A4118J1743G>9?6@;329M0150\L\[a:RJJZDR[@NSn6^FN^@VWKGJM:1[^H?4Q09Qa>TFEK;=S^=9_R15e>TBIMUME_][c:PFEAYPAM^CSLm4RDCG[ROC\AUI=6]>3:QJIZEHDECXEB@PCIG@O3=TG\XHI:5\RWCO[D1<[[\J@RL;;RQQE1=T[[H?7YW_E208Q5)`zo$yj"ilx/aoo})JpfxT~iQnup\cfYg{:;<=Q]erwop4553\:$kh!rg-dg}(ddbr$Aua}_sf\tkruWniTtb|?013\V`urd};8>6[?/fpe*w`(ojr%oaew/LzlvZtcWyd~Ril_ymq4565W[oxyaz>339V4*aun'xm#jmw.bnh|*Kg{UyhR~ats]dgZ~hz9:;?R\jstnw564<]9%l~k }f.e`|+ekcq%Ftb|Pre]sjqtXojUsc>?05]Qavsk|8997X> gsd-vc)`kq$h`fv Mymq[wbXxg~ySjmPxnp3453XZly~`y?<2:W3+bta&{l$knv!cmi{+H~hzVxoS}`{r^e`[}iu89:=S_k|umv277=R8&myj#|i/fa{*fjlp&GscQ}d^rmpwY`kVrd~=>?7^Pfwpjs9:80Y=!hrg,qb*adp'iggu!Bxnp\swYwf}xTknQwos2345YUmzgx<==;T2,cw`)zo%lou lljz,I}iuW~xT|cz}_fa\|jt789;T^h}zlu306>S7'nxm"h gbz-gim'Drd~Ry}_qlwvZadWqey<=>=_Sgpqir6;;1^<"i}f/pe+be&jf`t"Cwos]tvZvi|{UloRv`r1237ZTb{|f=><4U1-dvc(un&mht#mcky-N|jtX{U{by|Pgb]{kw678=UYi~{ct011?P6(o{l%~k!hcy,`hn~(EqeySz|Ppovq[beXpfx;<=;PRdqvhq74:2_;#j|i.sd,cf~)keas#@v`r^uq[uhszVmhSua}0125[Wct}e~:??5Z0.eqb+ta'nis"nbdx.O{kwYpzVzexQhc^zlv567?VXnxb{1338Q5)`zo$yj"ilx/aoo})ulVzexQmio>3:77<]9%l~k }f.e`|+ekcq%yhR~ats]amk:66;;0Y=!hrg,qb*adp'iggu!}d^rmpwYeag692??4U1-dvc(un&mht#mcky-q`Zvi|{Uiec2<>338Q5)`zo$yj"ilx/aoo})ulVzexQmio>7:77<]9%l~k }f.e`|+ekcq%yhR~ats]amk:26;;0Y=!hrg,qb*adp'iggu!}d^rmpwYeag6=2??4U1-dvc(un&mht#mcky-q`Zvi|{Uiec28>338Q5)`zo$yj"ilx/aoo})ulVzexQmio>;:76<]9%l~k }f.e`|+ekcq%yhR~ats]amkY7:91^<"i}f/pe+be&jf`t"|k_qlwvZdnfV;9<6[?/fpe*w`(ojr%oaew/sf\tkruWkceS? gsd-vc)`kq$h`fv re]sjqtXj`dT;?>4U1-dvc(un&mht#mcky-q`Zvi|{UiecQ7279V4*aun'xm#jmw.bnh|*tcWyd~Rlfn^zlv5678;=0Y=!hrg,qb*adp'iggu!}d^rmpwYeagUsc>?01312>S7'nxm"h gbz-gim'{nT|cz}_ckm[}iu89::>:5Z0.eqb+ta'nis"nbdx.pg[uhszVhbbRv`r12354413\:$kh!rg-dg}(ddbr$~iQnup\flhXpfx;<=<=7:W3+bta&{l$knv!cmi{+wbXxg~ySoga_ymq45659;<0Y=!hrg,qb*adp'iggu!}d^rmpwYeagUsc>?0204?P6(o{l%~k!hcy,`hn~(zmU{by|Pbhl\|jt78999>;5Z0.eqb+ta'nis"nbdx.pg[uhszVhbbRv`r123071<]9%l~k }f.e`|+ekcq%yhR~ats]amkYg{:;<9?=6:W3+bta&{l$knv!cmi{+wbXxg~ySoga_ymq4562:>1^<"i}f/pe+be&jf`t"|k_qlwvZdnfVrd~=>?5005?P6(o{l%~k!hcy,`hn~(zmU{by|Pbhl\|jt789<946[?/fpe*w`(ojr%oaew/sf\tkruWkceSua}012554403\:$kh!rg-dg}(ddbr$~iQnup\flhXpfx;<=8=2c9V4*aun'xm#jmw.bnh|*tcWyd~Rlfn^zlv567>Vhoh=<9;T2,cw`)zo%lou lljz,vaYwf}xTnd`Pxnp34515?2_;#j|i.sd,cf~)keas#jPpovq[goiWqey<=>81328Q5)`zo$yj"ilx/aoo})ulVzexQhc=2=65=R8&myj#|i/fa{*fjlp&xoS}`{r^e`848582_;#j|i.sd,cf~)keas#jPpovq[be;:78;7X> gsd-vc)`kq$h`fv re]sjqtXoj682?>4U1-dvc(un&mht#mcky-q`Zvi|{Ulo1:1219V4*aun'xm#jmw.bnh|*tcWyd~Ril<4<14>S7'nxm"h gbz-gim'{nT|cz}_fa?2;473\:$kh!rg-dg}(ddbr$~iQnup\cf:06;:0Y=!hrg,qb*adp'iggu!}d^rmpwY`k525=k5Z0.eqb+ta'nis"nbdx.pg[uhszVmhS=?i;T2,cw`)zo%lou lljz,vaYwf}xTknQ>1g9V4*aun'xm#jmw.bnh|*tcWyd~Ril_33e?P6(o{l%~k!hcy,`hn~(zmU{by|Pgb]05c=R8&myj#|i/fa{*fjlp&xoS}`{r^e`[17a3\:$kh!rg-dg}(ddbr$~iQnup\cfY29o1^<"i}f/pe+be&jf`t"|k_qlwvZadW?;m7X> gsd-vc)`kq$h`fv re]sjqtXojU<=k5Z0.eqb+ta'nis"nbdx.pg[uhszVmhS5<9;T2,cw`)zo%lou lljz,vaYwf}xTknQnssgd8585>2_;#j|i.sd,cf~)keas#jPpovq[beXizxnk1?1279V4*aun'xm#jmw.bnh|*tcWyd~Ril_`qqab:56;<0Y=!hrg,qb*adp'iggu!}d^rmpwY`kVkx~hi33?05?P6(o{l%~k!hcy,`hn~(zmU{by|Pgb]bwwc`4=49:6[?/fpe*w`(ojr%oaew/sf\tkruWniTm~|jg=7=63=R8&myj#|i/fa{*fjlp&xoS}`{r^e`[duumn6=2?84U1-dvc(un&mht#mcky-q`Zvi|{UloRo|rde?3;413\:$kh!rg-dg}(ddbr$~iQnup\cfYf{{ol050=5:W3+bta&{l$knv!cmi{+wbXxg~ySjmParpfcZ65=2_;#j|i.sd,cf~)keas#jPpovq[beXizxnkR?=5:W3+bta&{l$knv!cmi{+wbXxg~ySjmParpfcZ45=2_;#j|i.sd,cf~)keas#jPpovq[beXizxnkR==5:W3+bta&{l$knv!cmi{+wbXxg~ySjmParpfcZ25=2_;#j|i.sd,cf~)keas#jPpovq[beXizxnkR;=5:W3+bta&{l$knv!cmi{+wbXxg~ySjmParpfcZ05=2_;#j|i.sd,cf~)keas#jPpovq[beXizxnkR9=5:W3+bta&{l$knv!cmi{+wbXxg~ySjmParpfcZ>512_;#j|i.sd,cf~)keas#jPpovq[beXizxnkRj><1<1=>S7'nxm"h gbz-gim'{nT|cz}_fa\evtboVn:0<0=9:W3+bta&{l$knv!cmi{+wbXxg~ySjmParpfcZb64;4956[?/fpe*w`(ojr%oaew/sf\tkruWniTm~|jg^f2868512_;#j|i.sd,cf~)keas#jPpovq[beXizxnkRj><5<1=>S7'nxm"h gbz-gim'{nT|cz}_fa\evtboVn:080=9:W3+bta&{l$knv!cmi{+wbXxg~ySjmParpfcZb64?4956[?/fpe*w`(ojr%oaew/sf\tkruWniTm~|jg^f2828512_;#j|i.sd,cf~)keas#jPpovq[beXizxnkRj><9<1<>S7'nxm"h gbz-gim'{nT|cz}_fa\evtboVn:S=<7;T2,cw`)zo%lou lljz,vaYwf}xTknQnssgd[a7X9;20Y=!hrg,qb*adp'iggu!}d^rmpwY`kVkx~hiPd0]16==R8&myj#|i/fa{*fjlp&xoS}`{r^e`[duumnUo=R==8:W3+bta&{l$knv!cmi{+wbXxg~ySjmParpfcZb6W=837X> gsd-vc)`kq$h`fv re]sjqtXojUjkh_e3\17><]9%l~k }f.e`|+ekcq%yhR~ats]dgZgtzlmTh gsd-vc)`kq$h`fv ws]sjqtXj`d7=3<>;T2,cw`)zo%lou lljz,swYwf}xTnd`32?02?P6(o{l%~k!hcy,`hn~({U{by|Pbhl?7;463\:$kh!rg-dg}(ddbr${Qnup\flh;<78:7X> gsd-vc)`kq$h`fv ws]sjqtXj`d793<>;T2,cw`)zo%lou lljz,swYwf}xTnd`36?02?P6(o{l%~k!hcy,`hn~({U{by|Pbhl?3;463\:$kh!rg-dg}(ddbr${Qnup\flh;078;7X> gsd-vc)`kq$h`fv ws]sjqtXj`dT4U1-dvc(un&mht#mcky-tvZvi|{UiecQ>219V4*aun'xm#jmw.bnh|*quWyd~Rlfn^014>S7'nxm"h gbz-gim'~xT|cz}_ckm[6473\:$kh!rg-dg}(ddbr${Qnup\flhX<;:0Y=!hrg,qb*adp'iggu!xr^rmpwYeagU>>=5Z0.eqb+ta'nis"nbdx.uq[uhszVhbbR8=0:W3+bta&{l$knv!cmi{+rtXxg~ySoga_603?P6(o{l%~k!hcy,`hn~({U{by|Pbhl\<70<]9%l~k }f.e`|+ekcq%|~R~ats]amkYg{:;<=<8;T2,cw`)zo%lou lljz,swYwf}xTnd`Pxnp34566:?1^<"i}f/pe+be&jf`t"y}_qlwvZdnfVrd~=>?1358Q5)`zo$yj"ilx/aoo})pzVzexQmio]{kw6788;9:6[?/fpe*w`(ojr%oaew/vp\tkruWkceSua}012162=R8&myj#|i/fa{*fjlp&}yS}`{r^`jjZ~hz9:;><<9;T2,cw`)zo%lou lljz,swYwf}xTnd`Pxnp34555?2_;#j|i.sd,cf~)keas#z|Ppovq[goiWqey<=><2348Q5)`zo$yj"ilx/aoo})pzVzexQmio]{kw678=8<7X> gsd-vc)`kq$h`fv ws]sjqtXj`dTtb|?016263=R8&myj#|i/fa{*fjlp&}yS}`{r^`jjZ~hz9:;9?94U1-dvc(un&mht#mcky-tvZvi|{UiecQwos234075>2_;#j|i.sd,cf~)keas#z|Ppovq[goiWqey<=>9299V4*aun'xm#jmw.bnh|*quWyd~Rlfn^zlv567>8;9;6[?/fpe*w`(ojr%oaew/vp\tkruWkceSua}012567d<]9%l~k }f.e`|+ekcq%|~R~ats]amkYg{:;<;Qmde212>S7'nxm"h gbz-gim'~xT|cz}_ckm[}iu89:<>:5Z0.eqb+ta'nis"nbdx.uq[uhszVhbbRv`r12334473\:$kh!rg-dg}(ddbr${Qnup\cf:76;:0Y=!hrg,qb*adp'iggu!xr^rmpwY`k5;5>=5Z0.eqb+ta'nis"nbdx.uq[uhszVmh0?0=0:W3+bta&{l$knv!cmi{+rtXxg~ySjm33?03?P6(o{l%~k!hcy,`hn~({U{by|Pgb>7:76<]9%l~k }f.e`|+ekcq%|~R~ats]dg939:91^<"i}f/pe+be&jf`t"y}_qlwvZad4?49<6[?/fpe*w`(ojr%oaew/vp\tkruWni7;30d8Q5)`zo$yj"ilx/aoo})pzVzexQhc^22b>S7'nxm"h gbz-gim'~xT|cz}_fa\54`<]9%l~k }f.e`|+ekcq%|~R~ats]dgZ46n2_;#j|i.sd,cf~)keas#z|Ppovq[beX;8l0Y=!hrg,qb*adp'iggu!xr^rmpwY`kV>:j6[?/fpe*w`(ojr%oaew/vp\tkruWniT9f:W3+bta&{l$knv!cmi{+rtXxg~ySjmP70d8Q5)`zo$yj"ilx/aoo})pzVzexQhc^:12>S7'nxm"h gbz-gim'~xT|cz}_fa\evtbo5:5>;5Z0.eqb+ta'nis"nbdx.uq[uhszVmhSl}}ef>2:70<]9%l~k }f.e`|+ekcq%|~R~ats]dgZgtzlm7>3<9;T2,cw`)zo%lou lljz,swYwf}xTknQnssgd8685>2_;#j|i.sd,cf~)keas#z|Ppovq[beXizxnk1:1279V4*aun'xm#jmw.bnh|*quWyd~Ril_`qqab:26;<0Y=!hrg,qb*adp'iggu!xr^rmpwY`kVkx~hi36?05?P6(o{l%~k!hcy,`hn~({U{by|Pgb]bwwc`4>49:6[?/fpe*w`(ojr%oaew/vp\tkruWniTm~|jg=:=60=R8&myj#|i/fa{*fjlp&}yS}`{r^e`[duumnU;>85Z0.eqb+ta'nis"nbdx.uq[uhszVmhSl}}ef]260=R8&myj#|i/fa{*fjlp&}yS}`{r^e`[duumnU9>85Z0.eqb+ta'nis"nbdx.uq[uhszVmhSl}}ef]060=R8&myj#|i/fa{*fjlp&}yS}`{r^e`[duumnU?>85Z0.eqb+ta'nis"nbdx.uq[uhszVmhSl}}ef]660=R8&myj#|i/fa{*fjlp&}yS}`{r^e`[duumnU=>85Z0.eqb+ta'nis"nbdx.uq[uhszVmhSl}}ef]460=R8&myj#|i/fa{*fjlp&}yS}`{r^e`[duumnU3>45Z0.eqb+ta'nis"nbdx.uq[uhszVmhSl}}ef]g5969:01^<"i}f/pe+be&jf`t"y}_qlwvZadWhyyijQk1=3=6<=R8&myj#|i/fa{*fjlp&}yS}`{r^e`[duumnUo=1<1289V4*aun'xm#jmw.bnh|*quWyd~Ril_`qqabYc9595>45Z0.eqb+ta'nis"nbdx.uq[uhszVmhSl}}ef]g5929:01^<"i}f/pe+be&jf`t"y}_qlwvZadWhyyijQk1=7=6<=R8&myj#|i/fa{*fjlp&}yS}`{r^e`[duumnUo=181289V4*aun'xm#jmw.bnh|*quWyd~Ril_`qqabYc95=5>45Z0.eqb+ta'nis"nbdx.uq[uhszVmhSl}}ef]g59>9:11^<"i}f/pe+be&jf`t"y}_qlwvZadWhyyijQk1^21<>S7'nxm"h gbz-gim'~xT|cz}_fa\evtboVn:S<<7;T2,cw`)zo%lou lljz,swYwf}xTknQnssgd[a7X:;20Y=!hrg,qb*adp'iggu!xr^rmpwY`kVkx~hiPd0]06==R8&myj#|i/fa{*fjlp&}yS}`{r^e`[duumnUo=R:=8:W3+bta&{l$knv!cmi{+rtXxg~ySjmParpfcZb6W<837X> gsd-vc)`kq$h`fv ws]sjqtXojUjkh_e3\27><]9%l~k }f.e`|+ekcq%|~R~ats]dgZgtzlmThS7'nxm"h gbz-gim'~xT|cz}_fa\|jt789;996[?/fpe*w`(ojr%oaew/vp\tkruWniTtb|?01011>S7'nxm"h gbz-gim'~xT|cz}_fa\|jt7899996[?/fpe*w`(ojr%oaew/vp\tkruWniTtb|?01611>S7'nxm"h gbz-gim'~xT|cz}_fa\|jt789?996[?/fpe*w`(ojr%oaew/vp\tkruWniTtb|?01411>S7'nxm"h gbz-gim'~xT|cz}_fa\|jt789=8<6[?/fpe*w`(oe:%~i!hr0,qbr`s'Dg~tR\NM^PG[@HXN^L_><2e9V4*aun'xm#jb?.sf,cw7)zo}mx"mzrs]escrX{}ki1>12e9V4*aun'xm#jb?.sf,cw7)zo}mx"mzrs]escrX{}ki1?12b9V4*aun'xm#jb?.sf,cw7)zo}mx"mzrs]escrX{}kiR>=c:W3+bta&{l$ka>!re-dv4(un~l#n{}r^dtbqYt|h~nS<=:;T2,cw`)zo%l`= }d.eq5+tao~$ox|}_guepZusi}oTaxv?013?4;513\:$kh!rg-dh5(ul&my=#|iwgv,gptuWo}mxR}{aug\ip~789;7<3?<5:W3+bta&{l$ka>!re-dv4(un~l#n{}r^dtbqYt|h~nS`{w01228484>2_;#j|i.sd,ci6)zm%l~< }fvdw+fsuzVl|jyQ|t`vf[hs89::0<0>299V4*aun'xm#jb?.sf,cw7)zo}mx"kbpu{\br`sWoh9;6[?/fpe*w`(oe:%~i!hr0,qbr`s'lg{xtQiwgv\m7`<]9%l~k }f.eo4+tc'nx:"hxfu-fiur~Wo}mxRgPmtz3456482_;#j|i.sd,ci6)zm%l~< }fvdw+`kw|pUm{kzPi^ov|56788827X> gsd-vc)`d9$yh"i}ar,qwqu(k9%hm|vndv?4;4>3\:$kh!rg-dh5(ul&mym~ }suq,g5)di{xrbhz31?0:?P6(o{l%~k!hl1,q`*auiz$yy} c1-`ewt~fl~7>3<6;T2,cw`)zo%l`= }d.eqev(u{}y$o=!laspzj`r;;78m7X> gsd-vc)`d9$yh"i}ar,qwqu(k9%laxv!glY3Y+aj9'g:>k5Z0.eqb+ta'nf;"j gscp*wus{&i;#jczx/en_4[)ody%a~ gsd-vc)`d9$yh"i}ar,qwqu(k9%}=1?1229V4*aun'xm#jb?.sf,cwgt&{y"m?/w3?6;443\:$kh!rg-dh5(ul&mym~ }suq,g5)q9595>>5Z0.eqb+ta'nf;"j gscp*wus{&i;#{?34?0a?P6(o{l%~k!hl1,q`*auiz$yy} c1-u5Z6Xign;<=>>2c9V4*aun'xm#jb?.sf,cwgt&{y"m?/w3\5Zgil9:;<<o5Z0.eqb+ta'nf;"j gscp*wus{&i;#{?P3^cm`567888i7X> gsd-vc)`d9$yh"i}ar,qwqu(k9%}=R:Pnnv34566:01^<"i}f/pe+bj7&{n$ko|.sqww*e6'jky~t`jt=2=6<=R8&myj#|i/fn3*wb(o{kx"}{s.a2+fguzpdnx1?1289V4*aun'xm#jb?.sf,cwgt&{y"m>/bcqv|hb|585>45Z0.eqb+ta'nf;"j gscp*wus{&i:#no}rxlfp959:o1^<"i}f/pe+bj7&{n$ko|.sqww*e6'ng~t#ib[1_-ch7)e88m7X> gsd-vc)`d9$yh"i}ar,qwqu(k8%laxv!glY2Y+aj{'gx>k5Z0.eqb+ta'nf;"j gscp*wus{&i:#jczx/en_7[)ody%a~/fov|+ajS=W%k`}!mr00?P6(o{l%~k!hl1,q`*auiz$yy} c0-u5969::1^<"i}f/pe+bj7&{n$ko|.sqww*e6';7=3<<;T2,cw`)zo%l`= }d.eqev(u{}y$o gsd-vc)`d9$yh"i}ar,qwqu(k8%}=1:12c9V4*aun'xm#jb?.sf,cwgt&{y"m>/w3\4Zgil9:;<<o5Z0.eqb+ta'nf;"j gscp*wus{&i:#{?P2^cm`567888i7X> gsd-vc)`d9$yh"i}ar,qwqu(k8%}=R=Paof34566:k1^<"i}f/pe+bj7&{n$ko|.sqww*e6';T8R``t12344473\:$kh!rg-dh5(ul&mym~ }suq,gjkw8;:0Y=!hrg,qb*ak8'xo#j|ns/pppv)dgdz:>45Z0.eqb+ta'nf;"j gscp*wus{&xjaRkbpu{\bgYn;91^<"i}f/pe+bj7&{n$ko|.sqww*tfeVof|ywPfc]j[jt789:8=6[?/fpe*w`(oe:%~i!hr`q-vvrt'{kfShctx]efZoXg{:;<=?=3:W3+bta&{l$ka>!re-qtkru'DidyczPcnwmp72<]9%l~k }f.eo4+tc'{zex!BcnwmpZeh}g~:>95Z0.eqb+ta'nf;"j rqlwv*Kdg|dSnaznu010>S7'nxm"h gm2-va)uxg~y#@m`uov\gjsi|:8?7X> gsd-vc)`d9$yh"|nup,Ifirf}Uhcx`{4368Q5)`zo$yj"ic0/pg+wvi|{%Fob{at^alqkr2:=1^<"i}f/pe+bj7&{n$~}`{r.O`kphsWje~by8=4:W3+bta&{l$ka>!re-qtkru'DidyczPcnwmp2433\:$kh!rg-dh5(ul&x{by| MbmvjqYdg|d4?74U1-dvc(un&mg<#|k/srmpw)JkfexRm`uov\g|:76;i0Y=!hrg,qb*ak8'xo#~ats-Ngjsi|VidyczPcx>3:Zts:01^<"i}f/pe+bj7&{n$~}`{r.O`kphsWje~byQly=3=6f=R8&myj#|i/fn3*wb(zyd~"Clotlw[firf}Uhu1?1_sv1=>S7'nxm"h gm2-va)uxg~y#@m`uov\gjsi|Vir0?0=c:W3+bta&{l$ka>!re-qtkru'DidyczPcnwmpZe~4;4T~y<6;T2,cw`)zo%l`= }d.psjqt(Eje~byQlotlw[f;;78h7X> gsd-vc)`d9$yh"|nup,Ifirf}Uhcx`{_b{?7;Yu|;30Y=!hrg,qb*ak8'xo#~ats-Ngjsi|VidyczPcx>7:7e<]9%l~k }f.eo4+tc'{zex!BcnwmpZeh}g~Tot2;>^pw6<=R8&myj#|i/fn3*wb(zyd~"Clotlw[firf}Uhu1;12b9V4*aun'xm#jb?.sf,vuhsz&Ghcx`{_bmvjqYdq5?5Sz=9:W3+bta&{l$ka>!re-qtkru'DidyczPcnwmpZe~4?49o6[?/fpe*w`(oe:%~i!}povq+Heh}g~Tob{at^az838Xz}827X> gsd-vc)`d9$yh"|nup,Ifirf}Uhcx`{_b{?3;4d3\:$kh!rg-dh5(ul&x{by| MbmvjqYdg|dSnw37?]qp7g<]9%l~k }f.eo4+tc'{zex!BcnwmpZeh}g~Ttb|30?0b?P6(o{l%~k!hl1,q`*twf}x$Anaznu]`kphsWqey0<0=a:W3+bta&{l$ka>!re-qtkru'DidyczPcnwmpZ~hz585>l5Z0.eqb+ta'nf;"j rqlwv*Kdg|dSnaznu]{kw:46;k0Y=!hrg,qb*ak8'xo#~ats-Ngjsi|VidyczPxnp?0;4f3\:$kh!rg-dh5(ul&x{by| MbmvjqYdg|dSua}<4<1e>S7'nxm"h gm2-va)uxg~y#@m`uov\gjsi|Vrd~1812`9V4*aun'xm#jb?.sf,vuhsz&Ghcx`{_bmvjqYg{6<2?o4U1-dvc(un&mg<#|k/srmpw)JkfexRm`uov\|jt;078o7X> gsd-vc)`d9$yh"|nup,Ifirf}Uhcx`{_ymq8=8Xz};m7X> gsd-vc)`d9$yh"|nup,gjsi|5:5=k5Z0.eqb+ta'nf;"j rqlwv*eh}g~7=3?i;T2,cw`)zo%l`= }d.psjqt(kfex1<11g9V4*aun'xm#jb?.sf,vuhsz&idycz33?3e?P6(o{l%~k!hl1,q`*twf}x$ob{at=6=5c=R8&myj#|i/fn3*wb(zyd~"m`uov?1;7a3\:$kh!rg-dh5(ul&x{by| cnwmp9099o1^<"i}f/pe+bj7&{n$~}`{r.alqkr;?7;m7X> gsd-vc)`d9$yh"|nup,gjsi|525=h5Z0.eqb+ta'nf;"j rqlwv*eh}g~T<e:W3+bta&{l$ka>!re-qtkru'je~byQ<1d9V4*aun'xm#jb?.sf,vuhsz&idyczP40g8Q5)`zo$yj"ic0/pg+wvi|{%hcx`{_43f?P6(o{l%~k!hl1,q`*twf}x$ob{at^42a>S7'nxm"h gm2-va)uxg~y#naznu]45`=R8&myj#|i/fn3*wb(zyd~"m`uov\<74<]9%l~k }f.eo4+tc'{zex!lotlw[a7;87897X> gsd-vc)`d9$yh"|nup,gjsi|Vn:0<0=2:W3+bta&{l$ka>!re-qtkru'je~byQk1=0=67=R8&myj#|i/fn3*wb(zyd~"m`uov\`4:46;80Y=!hrg,qb*ak8'xo#~ats-`kphsWm;783<=;T2,cw`)zo%l`= }d.psjqt(kfexRj><4<16>S7'nxm"h gm2-va)uxg~y#naznu]g5909:;1^<"i}f/pe+bj7&{n$~}`{r.alqkrXl86<2?<4U1-dvc(un&mg<#|k/srmpw)dg|dSi?38?02?P6(o{l%~k!hl1,q`*twf}x$ob{at^f2[5463\:$kh!rg-dh5(ul&x{by| cnwmpZb6W88:7X> gsd-vc)`d9$yh"|nup,gjsi|Vn:S?<>;T2,cw`)zo%l`= }d.psjqt(kfexRj>_202?P6(o{l%~k!hl1,q`*twf}x$ob{at^f2[1463\:$kh!rg-dh5(ul&x{by| cnwmpZb6W<8:7X> gsd-vc)`d9$yh"|nup,gjsi|Vn:S;<>;T2,cw`)zo%l`= }d.psjqt(kfexRj>_602?P6(o{l%~k!hl1,q`*twf}x$ob{at^f2[=433\:$kh!rg-dh5(ul&x{by| cnwmpZhh|9:;=>h4U1-dvc(un&mg<#y}/fubw+awn'}y|k!Baef\`l`aWyd~R~nd^cg`5678Vir0=0!ws-dsdu)oyl%{~i/Lcg`ZbnnoU{by|Pp`f\eab789:Tot2>>2d8Q5)`zo$yj"ic0/uq+bqf{'m{j#y}pg-NeabXl`lmS}`{r^rb`Zgcl9:;S7'nxm"h gm2-sw)`hy%k}h!wsre+HgclVnbjkQnup\tdbXimn;<=>Pcx>0:6`<]9%l~k }f.eo4+qu'n}j#if/uqtc)JimnThdhi_qlwvZvflVkoh=>?0^az8184n2_;#j|i.sd,ci6){%l{l}!gqd-swva'DkohRjffg]sjqtXxhnTmij?012\g|:26:l0Y=!hrg,qb*ak8'}y#jyns/esb+quxo%FmijPdhde[uhszVzjhRokd1234Ze~4?48j6[?/fpe*w`(oe:%{!hw`q-cu`){zm#@okd^fjbcYwf}xT|ljPaef3456Xkp6<2>h4U1-dvc(un&mg<#y}/fubw+awn'}y|k!Baef\`l`aWyd~R~nd^cg`5678Vir050;0:W3+bta&{l$ka>!ws-dsdu)oyl%{~i/Lcg`ZbnnoU{by|Pp`f\eab789:T`xz31?63?P6(o{l%~k!hl1,tv*apiz$l|k xrqd,IdbcWmcmjR~ats]seaYflm:;<=Qcuu>1:16<]9%l~k }f.eo4+qu'n}j#if/uqtc)JimnThdhi_qlwvZvflVkoh=>?0^nvp959<91^<"i}f/pe+bj7&~x$kzo|.fre*rtwn&GjhiQkigd\tkruWykoSljk0123[iss4=4?<6[?/fpe*w`(oe:%{!hw`q-cu`){zm#@okd^fjbcYwf}xT|ljPaef3456Xd|~793:?;T2,cw`)zo%l`= xr.etev(`xo$|~}h M`fg[aoanVzexQae]b`a6789Ugyy29>528Q5)`zo$yj"ic0/uq+bqf{'m{j#y}pg-NeabXl`lmS}`{r^rb`Zgcl9:;?_mww8=8382_;#j|i.sd,ci6){%l{l}!gqd-swva'DkohRjffg]sjqtXxhnTmij?012\hpr;17>;7X> gsd-vc)`d9$|~"ixar,dtc(pzyl$Aljk_ekebZvi|{U{miQnde2345Yg{6829>4U1-dvc(un&mg<#y}/fubw+awn'}y|k!Baef\`l`aWyd~R~nd^cg`5678Vrd~1:1419V4*aun'xm#jb?.vp,crgt&nzm"z|f.Ob`aYcaolT|cz}_qcg[dbc89:;Sua}<4<74>S7'nxm"h gm2-sw)`hy%k}h!wsre+HgclVnbjkQnup\tdbXimn;<=>Pxnp?2;273\:$kh!rg-dh5(pz&m|m~ hpg,tvu`(EhnoSigif^rmpwYwimUjhi>?01]{kw:06=:0Y=!hrg,qb*ak8'}y#jyns/esb+quxo%FmijPdhde[uhszVzjhRokd1234Z~hz5258=5Z0.eqb+ta'nf;"z| gvcp*bva&~x{j"Cnde]gmc`Xxg~yS}ok_`fg4567Wqey040=f:W3+bta&{l$ka>!ws-dsdu)oyl%{~i/ekebZvi|{U{mi2<>3d8Q5)`zo$yj"ic0/uq+bqf{'m{j#y}pg-gmc`Xxg~yS}ok<5<1b>S7'nxm"h gm2-sw)`hy%k}h!wsre+aoanVzexQae>6:7`<]9%l~k }f.eo4+qu'n}j#if/uqtc)caolT|cz}_qcg8385n2_;#j|i.sd,ci6){%l{l}!gqd-swva'mcmjR~ats]sea:06;l0Y=!hrg,qb*ak8'}y#jyns/esb+quxo%oekhPpovq[ugc4149j6[?/fpe*w`(oe:%{!hw`q-cu`){zm#igif^rmpwYwim622?k4U1-dvc(un&mg<#y}/fubw+awn'}y|k!kigd\tkruWykoS>!ws-dsdu)oyl%{~i/ekebZvi|{U{miQ:2d9V4*aun'xm#jb?.vp,crgt&nzm"z|f.fjbcYwf}xT|ljP63g8Q5)`zo$yj"ic0/uq+bqf{'m{j#y}pg-gmc`Xxg~yS}ok_60f?P6(o{l%~k!hl1,tv*apiz$l|k xrqd,`l`aWyd~R~nd^:1a>S7'nxm"h gm2-sw)`hy%k}h!wsre+aoanVzexQae]:72=R8&myj#|i/fn3*rt(o~kx"j~i.vpsb*bnnoU{by|Pp`f\eab789:7?3=8;T2,cw`)zo%l`= xr.etev(`xo$|~}h dhde[uhszVzjhRokd1234929;>1^<"i}f/pe+bj7&~x$kzo|.fre*rtwn&nbjkQnup\tdbXimn;<=>35?14?P6(o{l%~k!hl1,tv*apiz$l|k xrqd,`l`aWyd~R~nd^cg`56785<5?:5Z0.eqb+ta'nf;"z| gvcp*bva&~x{j"jffg]sjqtXxhnTmij?012?3;503\:$kh!rg-dh5(pz&m|m~ hpg,tvu`(l`lmS}`{r^rb`Zgcl9:;<161369V4*aun'xm#jb?.vp,crgt&nzm"z|f.fjbcYwf}xT|ljPaef3456;178j7X> gsd-vc)`d9$|~"ixar,dtc(pzyl$|ah_gwohZo4:2_;#j|i.sd,ci6){%l{l}!gqd-swva'yxdkRhzlm]j[hs89:8?95Z0.eqb+ta'nf;"z| gvcp*bva&~x{j"~}of]eqijXaVg~t=>?30000>S7'nxm"h gm2-sw)`hy%k}h!wsre+uthoVl~`aQf_lw{45649:987X> gsd-vc)`d9$|~"ixar,dtc(pzyl$|ah_gwohZoXe|r;<==8339V4*aun'xm#jb?.vp,crgt&nzm"z|f.rqkbYa}efTeR``t12357?<]9%l~k }f.eo4+qu'n}j#y|tr-`5*efz{seiy2?>3;8Q5)`zo$yj"ic0/uq+bqf{'}xx~!l1.abvwim}6:2?74U1-dvc(un&mg<#y}/fubw+qt|z%h="mnrs{maq:56;30Y=!hrg,qb*ak8'}y#jyns/uppv)d9&ij~waeu>0:7`<]9%l~k }f.eo4+qu'n}j#y|tr-`5*aj}q$laV>R.fo2*h75n2_;#j|i.sd,ci6){%l{l}!wrvp+f7(ods"jcT1\,div(j{;l0Y=!hrg,qb*ak8'}y#jyns/uppv)d9&mfyu hmZ0^*bkt&dy9j6[?/fpe*w`(oe:%{!hw`q-svrt'j;$k`{w.foX7X(`ez$f?h4U1-dvc(un&mg<#y}/fubw+qt|z%h="ibuy,di^2Z&ngx"`}=3:W3+bta&{l$ka>!ws-dsdu)z~x#n? v0>3:75<]9%l~k }f.eo4+qu'n}j#y|tr-`5*p64849?6[?/fpe*w`(oe:%{!hw`q-svrt'j;$z<2=>318Q5)`zo$yj"ic0/uq+bqf{'}xx~!l1.t28685;2_;#j|i.sd,ci6){%l{l}!wrvp+f7(~86?2?l4U1-dvc(un&mg<#y}/fubw+qt|z%h="x>_1]bja6789;9n6[?/fpe*w`(oe:%{!hw`q-svrt'j;$z_`lg45679;h0Y=!hrg,qb*ak8'}y#jyns/uppv)d9&|:S?Qnne234575j2_;#j|i.sd,ci6){%l{l}!wrvp+f7(~8U8Sl`k012357d<]9%l~k }f.eo4+qu'n}j#y|tr-`5*p6W=Uecy>?0131=>S7'nxm"h gm2-sw)`hy%{~z|/b0,gdtuqgo0=0=9:W3+bta&{l$ka>!ws-dsdu)z~x#n< c`pq}kcs484956[?/fpe*w`(oe:%{!hw`q-svrt'j8$ol|}yogw878512_;#j|i.sd,ci6){%l{l}!wrvp+f4(khxyuck{<2<1b>S7'nxm"h gm2-sw)`hy%{~z|/b0,chs&ngP

"x><1<17>S7'nxm"h gm2-sw)`hy%{~z|/b0,r4:66;90Y=!hrg,qb*ak8'}y#jyns/uppv)d:&|:0?0=3:W3+bta&{l$ka>!ws-dsdu)z~x#n< v0>0:75<]9%l~k }f.eo4+qu'n}j#y|tr-`6*p64=49n6[?/fpe*w`(oe:%{!hw`q-svrt'j8$z?0131f>S7'nxm"h gm2-sw)`hy%{~z|/b0,r4Y3Wge<=>?1328Q5)`zo$yj"ic0/uq+bqf{'}xx~!lolr265=R8&myj#|i/fn3*rt(o~kx"z}{s.aliu4582_;#j|i.sd,ci6){%l{l}!wrvp+fijx:8o7X> gsd-vc)`d9$|~"ixar,twqu(ohl%o>!laspzj`r;878o7X> gsd-vc)`d9$|~"ixar,twqu(ohl%o>!laspzj`r;978o7X> gsd-vc)`d9$|~"ixar,twqu(ohl%o>!laspzj`r;:78o7X> gsd-vc)`d9$|~"ixar,twqu(ohl%o>!laspzj`r;;7987X> gsd-vc)`d9$|~"ixar,twqu(ohl%o>!hmtz-ch]7U'mf=#c>329V4*aun'xm#jb?.vp,crgt&~y"inf/a0+bkrp'mfW5Z0.eqb+ta'nf;"z| gvcp*rus{&mjj#m1^<"i}f/pe+bj7&~x$kzo|.vqww*afn'i8#{?30?04?P6(o{l%~k!hl1,tv*apiz$|y} g`d-g6)q95;5>:5Z0.eqb+ta'nf;"z| gvcp*rus{&mjj#m gsd-vc)`d9$|~"ixar,twqu(ohl%o>!y1^2\ekb789::>k5Z0.eqb+ta'nf;"z| gvcp*rus{&mjj#m>2g9V4*aun'xm#jb?.vp,crgt&~y"inf/a0+s7X;Vkeh=>?000e?P6(o{l%~k!hl1,tv*apiz$|y} g`d-g6)q9V>Tbbz?01226f=R8&myj#|i/fn3*rt(o~kx"z}{s.pbiZgkefySk{cl^k00>S7'nxm"h gm2-sw)`hy%{~z|/scn[djjgz~Tjxbc_h]nq}67899>7X> gsd-vc)`d9$|~"ixar,twqu(zhgTmac`su]eqijXaVg~t=>?0016?P6(o{l%~k!hl1,tv*apiz$|y} r`o\eikh{}UmyabPi^llp56798837X> gsd-vc)`d9$|~"ixar,twqu(zhgTjxbc_g`\m73<]9%l~k }f.eo4+qu'n}j#y|tr-qehYa}efTe?j4U1-dvc(un&mg<#y}/fubw+qt|z%ym`Qiumn\mZkrp9:;229V4*aun'xm#jb?.vp,suhsz&Ghcx`{_bmvjq433\:$kh!rg-dh5(pz&}{by| MbmvjqYdg|d=?:4U1-dvc(un&mg<#y}/vrmpw)JkfexRm`uov161=R8&myj#|i/fn3*rt(yd~"Clotlw[firf}9986[?/fpe*w`(oe:%{!xpovq+Heh}g~Tob{at507?P6(o{l%~k!hl1,tv*qwf}x$Anaznu]`kphs=;>0Y=!hrg,qb*ak8'}y#z~ats-Ngjsi|Vidycz9259V4*aun'xm#jb?.vp,suhsz&Ghcx`{_bmvjq15<2_;#j|i.sd,ci6){%||cz}/LalqkrXkfex5<6;T2,cw`)zo%l`= xr.usjqt(Eje~byQlotlw[f;878h7X> gsd-vc)`d9$|~"ynup,Ifirf}Uhcx`{_b{?4;Yu|;30Y=!hrg,qb*ak8'}y#z~ats-Ngjsi|VidyczPcx>2:7e<]9%l~k }f.eo4+qu'~zex!BcnwmpZeh}g~Tot2>>^pw6<=R8&myj#|i/fn3*rt(yd~"Clotlw[firf}Uhu1<12b9V4*aun'xm#jb?.vp,suhsz&Ghcx`{_bmvjqYdq585Sz=9:W3+bta&{l$ka>!ws-ttkru'DidyczPcnwmpZe~4:49o6[?/fpe*w`(oe:%{!xpovq+Heh}g~Tob{at^az868Xz}827X> gsd-vc)`d9$|~"ynup,Ifirf}Uhcx`{_b{?0;4d3\:$kh!rg-dh5(pz&}{by| MbmvjqYdg|dSnw34?]qp7?<]9%l~k }f.eo4+qu'~zex!BcnwmpZeh}g~Tot2:>3a8Q5)`zo$yj"ic0/uq+rvi|{%Fob{at^alqkrXkp6>2R|{289V4*aun'xm#jb?.vp,suhsz&Ghcx`{_bmvjqYdq5<5>n5Z0.eqb+ta'nf;"z| wqlwv*Kdg|dSnaznu]`}909W{~956[?/fpe*w`(oe:%{!xpovq+Heh}g~Tob{at^az8285k2_;#j|i.sd,ci6){%||cz}/LalqkrXkfexRmv<6<\vq4f3\:$kh!rg-dh5(pz&}{by| MbmvjqYdg|dSua}<1<1e>S7'nxm"h gm2-sw)pxg~y#@m`uov\gjsi|Vrd~1?12`9V4*aun'xm#jb?.vp,suhsz&Ghcx`{_bmvjqYg{692?o4U1-dvc(un&mg<#y}/vrmpw)JkfexRm`uov\|jt;;78j7X> gsd-vc)`d9$|~"ynup,Ifirf}Uhcx`{_ymq8185i2_;#j|i.sd,ci6){%||cz}/LalqkrXkfexRv`r=7=6d=R8&myj#|i/fn3*rt(yd~"Clotlw[firf}Usc29>3c8Q5)`zo$yj"ic0/uq+rvi|{%Fob{at^alqkrXpfx7;39W{~:j6[?/fpe*w`(oe:%{!xpovq+firf}6;2f:W3+bta&{l$ka>!ws-ttkru'je~by2=>0d8Q5)`zo$yj"ic0/uq+rvi|{%hcx`{<2<2b>S7'nxm"h gm2-sw)pxg~y#naznu>7:4`<]9%l~k }f.eo4+qu'~zex!lotlw8086n2_;#j|i.sd,ci6){%||cz}/bmvjq:168l0Y=!hrg,qb*ak8'}y#z~ats-`kphs4>4:j6[?/fpe*w`(oe:%{!xpovq+firf}632e:W3+bta&{l$ka>!ws-ttkru'je~byQ=1d9V4*aun'xm#jb?.vp,suhsz&idyczP30g8Q5)`zo$yj"ic0/uq+rvi|{%hcx`{_53f?P6(o{l%~k!hl1,tv*qwf}x$ob{at^72a>S7'nxm"h gm2-sw)pxg~y#naznu]55`=R8&myj#|i/fn3*rt(yd~"m`uov\34c<]9%l~k }f.eo4+qu'~zex!lotlw[=453\:$kh!rg-dh5(pz&}{by| cnwmpZb64949>6[?/fpe*w`(oe:%{!xpovq+firf}Uo=1?1239V4*aun'xm#jb?.vp,suhsz&idyczPd0>1:74<]9%l~k }f.eo4+qu'~zex!lotlw[a7;;7897X> gsd-vc)`d9$|~"ynup,gjsi|Vn:090=2:W3+bta&{l$ka>!ws-ttkru'je~byQk1=7=67=R8&myj#|i/fn3*rt(yd~"m`uov\`4:16;80Y=!hrg,qb*ak8'}y#z~ats-`kphsWm;7;3<=;T2,cw`)zo%l`= xr.usjqt(kfexRj><9<15>S7'nxm"h gm2-sw)pxg~y#naznu]g5Z6592_;#j|i.sd,ci6){%||cz}/bmvjqYc9V;9=6[?/fpe*w`(oe:%{!xpovq+firf}Uo=R<=1:W3+bta&{l$ka>!ws-ttkru'je~byQk1^115>S7'nxm"h gm2-sw)pxg~y#naznu]g5Z2592_;#j|i.sd,ci6){%||cz}/bmvjqYc9V?9=6[?/fpe*w`(oe:%{!xpovq+firf}Uo=R8=1:W3+bta&{l$ka>!ws-ttkru'je~byQk1^515>S7'nxm"h gm2-sw)pxg~y#naznu]g5Z>5:2_;#j|i.sd,ci6){%||cz}/bmvjqYc:5:5>?5Z0.eqb+ta'nf;"z| wqlwv*eh}g~Th?2>>308Q5)`zo$yj"ic0/uq+rvi|{%hcx`{_e0?6;453\:$kh!rg-dh5(pz&}{by| cnwmpZb54:49>6[?/fpe*w`(oe:%{!xpovq+firf}Uo>1:1239V4*aun'xm#jb?.vp,suhsz&idyczPd3>6:74<]9%l~k }f.eo4+qu'~zex!lotlw[a4;>7897X> gsd-vc)`d9$|~"ynup,gjsi|Vn90:0=2:W3+bta&{l$ka>!ws-ttkru'je~byQk2=:=64=R8&myj#|i/fn3*rt(yd~"m`uov\`7Y7:81^<"i}f/pe+bj7&~x${}`{r.alqkrXl;U:><5Z0.eqb+ta'nf;"z| wqlwv*eh}g~Th?Q=209V4*aun'xm#jb?.vp,suhsz&idyczPd3]064=R8&myj#|i/fn3*rt(yd~"m`uov\`7Y3:81^<"i}f/pe+bj7&~x${}`{r.alqkrXl;U>><5Z0.eqb+ta'nf;"z| wqlwv*eh}g~Th?Q9209V4*aun'xm#jb?.vp,suhsz&idyczPd3]464=R8&myj#|i/fn3*rt(yd~"m`uov\`7Y?:;1^<"i}f/pe+bj7&~x${}`{r.alqkrXl:6;2?<4U1-dvc(un&mg<#y}/vrmpw)dg|dSi=31?01?P6(o{l%~k!hl1,tv*qwf}x$ob{at^f08785:2_;#j|i.sd,ci6){%||cz}/bmvjqYc;595>?5Z0.eqb+ta'nf;"z| wqlwv*eh}g~Th>2;>308Q5)`zo$yj"ic0/uq+rvi|{%hcx`{_e1?1;453\:$kh!rg-dh5(pz&}{by| cnwmpZb44?49>6[?/fpe*w`(oe:%{!xpovq+firf}Uo?191239V4*aun'xm#jb?.vp,suhsz&idyczPd2>;:77<]9%l~k }f.eo4+qu'~zex!lotlw[a5X8;;0Y=!hrg,qb*ak8'}y#z~ats-`kphsWm9T=??4U1-dvc(un&mg<#y}/vrmpw)dg|dSi=P2338Q5)`zo$yj"ic0/uq+rvi|{%hcx`{_e1\777<]9%l~k }f.eo4+qu'~zex!lotlw[a5X<;;0Y=!hrg,qb*ak8'}y#z~ats-`kphsWm9T9??4U1-dvc(un&mg<#y}/vrmpw)dg|dSi=P6338Q5)`zo$yj"ic0/uq+rvi|{%hcx`{_e1\377<]9%l~k }f.eo4+qu'~zex!lotlw[a5X0;>0Y=!hrg,qb*ak8'}y#z~ats-`kphsWge<=>>169V4*aun'xm#`kb/emvpZo;87;37X> gsd-vc)jmd%ocxzPi=33:4><]9%l~k }f.ofi*bh}}Ub027;7?3\:$kh!rg-nah)cg|~Te1?;>0:8Q5)`zo$yj"cjm.flqqYn48?5=55Z0.eqb+ta'dof#iazt^k?538602_;#j|i.sd,i`k(lfSd2>7?3;?P6(o{l%~k!bel-gkprXa5;32<64U1-dvc(un&gna"j`uu]j84?99>1^<"i}f/pe+hcj'me~xRg31?3;?P6(o{l%~k!bel-gkprXa58;2<64U1-dvc(un&gna"j`uu]j8779911^<"i}f/pe+hcj'me~xRg323<2<>S7'nxm"h mdo,`jssW`69?3?7;T2,cw`)zo%fi`!kotv\m9436820Y=!hrg,qb*kbe&ndyyQf<37=5==R8&myj#|i/lgn+air|Vc7>;0>8:W3+bta&{l$ahc dnww[l:5?7;37X> gsd-vc)jmd%ocxzPi=0;:4><]9%l~k }f.ofi*bh}}Ub0?71169V4*aun'xm#`kb/emvpZo;:7;37X> gsd-vc)jmd%ocxzPi=13:4><]9%l~k }f.ofi*bh}}Ub0>?1199V4*aun'xm#`kb/emvpZo;;;4:46[?/fpe*w`(elg$hb{{_h>07;7?3\:$kh!rg-nah)cg|~Te1=;>0:8Q5)`zo$yj"cjm.flqqYn4:?5=:5Z0.eqb+ta'dof#iazt^k?7;703\:$kh!rg-nah)cg|~Te1:1169V4*aun'xm#`kb/emvpZo;=7;<7X> gsd-vc)jmd%ocxzPi=4=52=R8&myj#|i/lgn+air|Vc7;3?8;T2,cw`)zo%fi`!kotv\m9>99>1^<"i}f/pe+hcj'me~xRg39?35?P6(o{l%~k!bel-gkprXaV:::6[?/fpe*w`(elg$hb{{_h]252=R8&myj#|i/lgn+air|VcT==?8;T2,cw`)zo%fi`!kotv\mZ769>1^<"i}f/pe+hcj'me~xRgP1334?P6(o{l%~k!bel-gkprXaV;8=:5Z0.eqb+ta'dof#iazt^k\51703\:$kh!rg-nah)cg|~TeR?:169V4*aun'xm#`kb/emvpZoX9?;<7X> gsd-vc)jmd%ocxzPi^3452=R8&myj#|i/lgn+air|VcT=5?8;T2,cw`)zo%fi`!kotv\mZ7>9?1^<"i}f/pe+hcj'me~xRgP2058Q5)`zo$yj"cjm.flqqYnW;::;6[?/fpe*w`(elg$hb{{_h]1541<]9%l~k }f.ofi*bh}}UbS?<>7:W3+bta&{l$ahc dnww[lY5;8=0Y=!hrg,qb*kbe&ndyyQf_3623>S7'nxm"h mdo,`jssW`U99<94U1-dvc(un&gna"j`uu]j[706?2_;#j|i.sd,i`k(lfSdQ=7058Q5)`zo$yj"cjm.flqqYnW;2:;6[?/fpe*w`(elg$hb{{_h]1=40<]9%l~k }f.ofi*bh}}UbS>?8;T2,cw`)zo%fi`!kotv\mZ579>1^<"i}f/pe+hcj'me~xRgP3034?P6(o{l%~k!bel-gkprXaV99=:5Z0.eqb+ta'dof#iazt^k\76703\:$kh!rg-nah)cg|~TeR=;169V4*aun'xm#`kb/emvpZoX;<;=7X> gsd-vc)jmd%ocxzPi^622>S7'nxm"h mdo,`jssW`U>=;5Z0.eqb+ta'dof#iazt^k\240<]9%l~k }f.ofi*bh}}UbS:?9;T2,cw`)zo%fi`!kotv\mZ>6>2_;#j|i.sd,i`k(lfSdQ6189V4*aun'xm#`kb/emvpZkbe5:5=l5Z0.eqb+ta'dof#iazt^ofi97768k0Y=!hrg,qb*kbe&ndyyQbel>25;7f3\:$kh!rg-nah)cg|~Tahc313<2e>S7'nxm"h mdo,`jssWdof0<=11`9V4*aun'xm#`kb/emvpZkbe5;?2 gsd-vc)jmd%ocxzPmdo?5386i2_;#j|i.sd,i`k(lfS`kb<05=5d=R8&myj#|i/lgn+air|Vgna1?7>0c8Q5)`zo$yj"cjm.flqqYjmd6:53?6;T2,cw`)zo%fi`!kotv\i`k;97;j7X> gsd-vc)jmd%ocxzPmdo?6586i2_;#j|i.sd,i`k(lfS`kb<33=5d=R8&myj#|i/lgn+air|Vgna1<=>0c8Q5)`zo$yj"cjm.flqqYjmd69?3?n;T2,cw`)zo%fi`!kotv\i`k;:=4:m6[?/fpe*w`(elg$hb{{_lgn87399h1^<"i}f/pe+hcj'me~xRcjm=05:4g<]9%l~k }f.ofi*bh}}Ufi`2=7?3b?P6(o{l%~k!bel-gkprXelg7>50>a:W3+bta&{l$ahc dnww[hcj4;35=45Z0.eqb+ta'dof#iazt^ofi9499h1^<"i}f/pe+hcj'me~xRcjm=13:4g<]9%l~k }f.ofi*bh}}Ufi`2<1?3b?P6(o{l%~k!bel-gkprXelg7??0>a:W3+bta&{l$ahc dnww[hcj4:95=l5Z0.eqb+ta'dof#iazt^ofi95368k0Y=!hrg,qb*kbe&ndyyQbel>01;7>3\:$kh!rg-nah)cg|~Tahc33?3:?P6(o{l%~k!bel-gkprXelg783?6;T2,cw`)zo%fi`!kotv\i`k;=7;27X> gsd-vc)jmd%ocxzPmdo?2;7>3\:$kh!rg-nah)cg|~Tahc37?3:?P6(o{l%~k!bel-gkprXelg743?6;T2,cw`)zo%fi`!kotv\i`k;17=?7X> gsd-vc)jmd%ln` hble-cgk`i'dlinm!ble,fimXelgTkh`jr`vlv*pfd`n%o~z}/scnhjiwS9W%~lc!r.q0[kinf`~%~lc dqpbi+bw;?r8:#|nm0`8Q5)`zo$yj"cjm.vntZtfeVxoSh`>c:W3+bta&{l$ahc tlr\vdkXzmUnbe:W3+bta&{l$~~zmlj-q`Ztt|Vxnk1<11e9V4*aun'xm#}{bmi,vaYu{}UyijQ?1e9V4*aun'xm#}{bmi,vaYu{}UyijQ>1e9V4*aun'xm#}{bmi,vaYu{}UyijQ=169V4*aun'xm#}{bmi,vvrXl8;<7X> gsd-vc)u{}hgg"||t^f152=R8&myj#|i/sqwfim(zz~Th>?k;T2,cw`)zo%yylck.uq[wusWhyyijS7'nxm"h rrvahn)pzVxxxRm`mc32a>S7'nxm"h rrvahn)pzVxxxR|jg=2=5`=R8&myj#|i/sqwfim({UyyQ}ef>2:4b<]9%l~k }f.pppgjl'~xT~~zPrde\44b<]9%l~k }f.pppgjl'~xT~~zPrde\5d=R[LXTMAGNSb9VW@TX^@YBNAK<;WA@=>PNM^U_U]K<;VGB7>QBJj1\^DZJ_LMGAZGd3^XBXHQBOEG\Fa=PZ@^NSZGKTI]B`>QUA]OT[DJ[H^@2`>^ND@DS!UJM 1,2$VRRJ):%=-O\CHK6?]IUKP<0T^ZCIC58\VRXOGN<7U][_WA@f>^XKFXNSD@IO79[`gYNlo1SheQ_rhoUawungg;;7Ujb_LcikwPbzzcdb<>4Xeo\Ilhhz_oydaac:coijusWlg{xtl4amolwqYa}ef=7oolktrg?ggdc|zTal|des18gimc3mkmRm`uov+4,bbf|hUhcx`{(2+g?agsiVidycz'4(f8`drfWje~by&:)e9geqgXkfex%8&d:fbpdYdg|d$:'k;ecweZeh}g~#4$h4d`vb[firf}636=08;e`jp`tu>2nbb%>&6:fjj-7.?2nbb%??)69gmk.69 =0hd`'13+4?aoi 89";6jfn)37-2=cag":9$94dhl+53/03mce$<9&7:fjj-7?!>1oec&>9(48`lh/: =0hd`'21+4?aoi ;;";6jfn)01-2=cag"9?$94dhl+61/03mce$?;&7:fjj-41!>1oec&=7(58`lh/:1#<7iga(3;*2>bnf!9";6jfn)13-2=cag"8=$94dhl+77/03mce$>=&7:fjj-53!>1oec&<5(48`lh/< <0hd`'5(48`lh/> <0hd`'7(48`lh/0 <0hd`'9(48`lh;87=0hd`311<4?aoi48;5;6jfn=31:2=cag6:?394dhl?51803mce0<;17:fjj9716>1oec2>7?58`lh;914<7iga<0;=2>bnf5;5;6jfn=03:2=cag69=394dhl?67803mce0?=17:fjj9436>1oec2=5?58`lh;:?4<7iga<35=3>bnf5832:5kio>1=;0394dhl?75803mce0>?17:fjj9556>1oec2<3?58`lh;;=427iga<2794;1&7:flqq.6!11ocxz'11+;?air|!;:%55kotv+57/?3me~x%?<)99gkpr/9=#37iazt)36-==cg|~#=;'7;emvp-70!11ocxz'19+;?air|!;2%:5kotv+6,>&8:flqq.59 20hb{{(30*<>bh}}"9?$64dnww,72.02ndyy&=5(:8`jss ;<"46j`uu*13,> =0hb{{(6+4?air|!2";6j`uu*:-2=cg|~7<364dnww846902ndyy2>1?:8`jss488546j`uu>27;>bh}}6:;364dnww84>902ndyy2>9?58`jss48437iazt=03:==cg|~7><07;emvp945611ocxz322<;?air|58?255kotv?608?3me~x1<9>99gkpr;:>437iazt=0;:==cg|~7>408;emvp94902ndyy2<0?:8`jss4:;546j`uu>06;>=18:flqq:4<7k0hb{{<2794;>;17:flqq:46>1ocxz34?58`jss4<4<7iazt=4=3>bh}}6<2:5kotv?<;1V;'wnQgar]jjqYddb7; nQgar]pvvr:8%iT~iQirds>5)eXmgki`hQ}su]p}ke:9%iTdl}Pre]geqgXkfex0>#c^fjjZqnl}b6?;"l_icp[rtXlh~jSnaznu?3(fYa}efTjaohs^pppZpfd4;'oRgbpmgnakrf|`eeSywe<0/gZstmVofnhjkee]qab;7$jU|~Rh}ep?2(fYr{lUocxzPrrv>5)eX}gnn~kb`w^nls86+kVbjRayesdokr;7$jU{~hb`ae]oeqcikp7; nQkotv\slbs`49= nQbsfmm[sgk58&hSjPddrwl836:%iTi|`r^kmn`esafdTxt~j=1.`[mgtW|doihcov?3(fYoizUj``a|t^dvhi;6$jUcm~Q}su?2(fYci}kTob{at^uj`qn:1%iTdl}Pws]bgn;7$jU~hQjcb?3(fYdgdgdbRmcobi>4)eX{UjofQcov?3(fYulVzexQxievk9<*dW|ynSkyit^fbpdYdg|d1="l_icp[djjgz~Ti`~{y<2/gZtcWmkmRm`uov\slbs`43'oRayesdokrYkg~7; nQxr^rmpwYpam~c14"l_qplcZcjx}sTxt~j=1.`[rtXlh~jSnaznu]tmaro50&hS}|jlncg[wc`{4;'oRj`uu]qwqYqie7; nQgar]geqgXkfex0>#c^rqkbYa}efTxe|jsi]mabgsmV|j`0:69-a\swYcmy~c18?=,b]svjaXmdzuRzgrdqk[kc`i}oTzlb25-a\twi`Wlg{xtQ{hsgplZgt{lxS{oc=5.`[mgtWkgei3?,b]svjaXn|fgSyf}erj\evubz}U}ma3:01.`khvhfldScobe#c^rqmhYaaoeTxt~j=431|60+kVzycjQiumn\p|vb58&hS`kbos{\p|vb58&v?45iigm\|ihW<;9t>8P2bnh[uthoVl~`aQiigm\c`hbzh~d~Rx9_0]{wqY6<2l~`aj4iohfgqbea}oy~i5fnkg`pvdn|lxy;6gat^aoo==iojh~eaj7;ntfvcjhh1{~biPelrw}42vugnUna}zv_ujqavn/: ;?7}|`g^gntqX|axne&<)068twi`Wlg{xtQ{hsgpl-2.9=1{~biPelrw}Zrozlyc$8'>4:rqkbYbey~rSyf}erj+2,733yxdkRkbpu{\pmtb{a"<%<:4psmd[`kw|pUdk|h):*53=wzfmTi`~{y^vkv`uo410;2vugnUna}zv_ujqavnXizyn~y&:)0`8twi`Wlg{xtQ{hsgplZgt{lx$;'>b:rqkbYbey~rSyf}erj\evubz}"<%vugnUna}zv_ujqavnXflmjxh&;)0`8twi`Wlg{xtQ{hsgplZhboh~n$8'>b:rqkbYbey~rSyf}erj\j`af|l"=%#:n6~}of]fiur~W}byi~fPndebp`.?!8n0|ah_dosp|Ys`{oxdR`jg`vf8=<7601{~biPftno56=wzfmTjxbc_ujqavn/8 ;87}|`g^dvhiYs`{oxd%?&129svjaXn|fgSyf}erj+6,743yxdkRhzlm]wlwct`!9"=>5rne\bpjkW}byi~f'4(30?uthoVl~`aQ{hsgpl-3.9:1{~biPftno[qnumzb#:$?<;qplcZ`rdeUdk|h)5*56=wzfmTjxbc_ujqavn/0 ;>7}|`g^dvhiYs`{oxd1650?3b?uthoVl~`aQ{hsgplZgt{lx$='>a:rqkbYa}efTxe|jsi]bwvcu|!;"=l5rne\bpjkW}byi~fParqfvq.5!8k0|ah_gwohZrozlycSl}|esv+7,7f3yxdkRhzlm]wlwct`Vkxh|{(5+2e>vugnUmyabPtipfwmYf{zoyx%;&1`9svjaXn|fgSyf}erj\evubz}"=%vugnUmyabPtipfwmYimnki%?&1`9svjaXn|fgSyf}erj\j`af|l"9%=87<0~iQllj33?wbXlh~jSnaznu*3-464re]geqgXkfex1>1139q`Zbf|hUhcx`{<983:0=ulVoe:6|k_sqw7>tt|>1xndzjrs68wwus:k1a}!Pcf-emciXpedsS8?=x24\6fjlWyxdkRhzlm,mcj2<|{n56{addpehjq23kgei84ws]bgn0<{Uh`f??;vp\`drfWje~by&?)028swYci}kTob{at)3*55=pzVnjxlQlotlw,7/682}ySio{a^alqkr/; ;;7z|Pd`vb[firf}"?%<>4ws]geqgXkfex%;&119tvZbf|hUhcx`{(7+24>quWmkmRm`uov+3,773~xThlzn_bmvjq.?!880{Qkauc\gjsi|521<3;4ws]fj3=pzVxxxpNOpbd2?EF=021J7:51zQ7b?34k3<1=>mrd?554>;o6:=?0<,=3=697?;|Q7`?34k3<1=>m2Y:8i4:4683>455j>l<6?o=9d9P0a<2<>0;6<==b6d4>7g51o1o9>h50;395~U3n3?8o785120a3c1=:h82i6x[1cf94?7=93;h8v];f;70g?0=9:8i;k952`0:a>"3000:8h5Y48596~s6=>0:7x?:8;28y!7e93l0n8=i:1865?5==8qC8594Z5796~c=l3w/=n<552d8 1?22<9n7d;63;29?j2>j3:17b;98;29?l3f03:17b;;3;29?j34l3:17d;6d;29?l3>=3:17b;>0;29 4d42<987c?m2;28?j37n3:1(3:1(i3nm0;6)?m3;707>h6j;0:=65`4ga94?"6j:0>?>5a1c0957=5:9l0c>=83.:n>4:329m5g4=9?10c9h8:18'5g5==:90b3:1(!7e;3?8?6`>b382=>=h=8<1<7*>b28676=i9k81=l54o436>5<#9k919>=4n0`1>4d<3f?:87>5$0`0>0543g;i>7?l;:m656<72-;i?7;<3:l2f7<6l21d9<<50;&2f6<2;:1e=o<51d98k076290/=o=55218j4d528l07b;?a;29 4d42<987c?m2;03?>i3no0;6)?m3;707>h6j;09=65`4g694?"6j:0>?>5a1c0967=h:7>5$0`0>1cf3g;i>7?4;h6`1?6=,8h869kn;o3a6?4<3`>h87>5$0`0>1cf3g;i>7=4;h6`7?6=,8h869kn;o3a6?2<3`>h>7>5$0`0>1cf3g;i>7;4;h6`4?6=,8h869kn;o3a6?0<3`>ij7>5$0`0>1cf3g;i>794;h6aa?6=,8h869kn;o3a6?><3`>ih7>5$0`0>1cf3g;i>774;h6ag?6=,8h869kn;o3a6?g<3`>in7>5$0`0>1cf3g;i>7l4;h6ae?6=,8h869kn;o3a6?e<3`>i57>5$0`0>1cf3g;i>7j4;h6ai;7>5$0`0>1cf3g;i>7h4;h6a1?6=,8h869kn;o3a6?7732c?n94?:%3a7?2bi2d:n?4>1:9j0g5=83.:n>4;e`9m5g4=9;10e9l=:18'5g5=!7e;3>nm6`>b3821>=nb287ad=i9k81=;54i5cf>5<#9k918ho4n0`1>41<3`>jh7>5$0`0>1cf3g;i>7?7;:k7ef<72-;i?7:ja:l2f7<6121b8nj50;&2f6<3mh1e=o<51`98m1ed290/=o=54dc8j4d528h07d:lb;29 4d42=oj7c?m2;3`?>o3kh0;6)?m3;6fe>h6j;0:h65f4b;94?"6j:0?il5a1c095`=4;e`9m5g4=:;10e9on:18'5g5=5<6290;wE:77:&2g75;|`70?6=j:0:;;4>c5yK0=173=:009:7<8:3:9a?b=:h09n7<6:3`9a?4f2;>1h7<7:35963<5=3886p*>c38607=#<10>8=5+4d8604=#9hi1=lh4i47`>5<#9k9198j4n0`1>5=5<#9k9198j4n0`1>7=54i47;>5<#9k9198j4n0`1>1=5<#9k9198j4n0`1>3=6=4+1c1910b5<#9k9198j4n0`1>==>6=44i4;7>5<5<5<#9k9198=4n0`1>4=5<#9k9198=4n0`1>6=n6=4+1c191055<#9k9198=4n0`1>0=h6=4+1c191055<#9k9198=4n0`1>2=j6=4+1c191055<36=44i445>5<#9k919;94n0`1>5=6=4+1c191315<#9k919;94n0`1>7=54i441>5<#9k919;94n0`1>1=5<#9k919;94n0`1>3=5<#9k919;94n0`1>==5<#9k918l64n0`1>5=5<#9k918l64n0`1>7=54o5c0>5<#9k918l64n0`1>1=5<#9k918l64n0`1>3=5<#9k918l64n0`1>==5<5<#9k919:<4n0`1>4=5<#9k919:<4n0`1>6=5<#9k919:<4n0`1>0=5<#9k919:<4n0`1>2=5<5<5<#9k919:m4n0`1>5=5<#9k919:m4n0`1>7=54i454>5<#9k919:m4n0`1>1=5<#9k919:m4n0`1>3=5<#9k919:m4n0`1>==6=4+1c191=05<#9k919584n0`1>4=5<#9k919584n0`1>6=5<#9k919584n0`1>0=5<#9k919584n0`1>2=5<=6=44i5;f>5<5<5<5<#9k919>=4n0`1>4=5<#9k919>=4n0`1>6=5<#9k919>=4n0`1>0=5<#9k919>=4n0`1>2=5<#9k919>=4n0`1><=6=4+1c191655<#9k919>=4n0`1>g=5<#9k919>=4n0`1>a=5<#9k919>=4n0`1>c=4;n6e`?6=,8h868=<;o3a6?7632e?jn4?:%3a7?34;2d:n?4>2:9l0cd=83.:n>4:329m5g4=9:10c9hn:18'5g5==:90b76a;f983>!7e;3?8?6`>b3822>=hb28676=i9k81=:54o5d5>5<#9k919>=4n0`1>4><3f>m97>5$0`0>0543g;i>7?6;:m653<72-;i?7;<3:l2f7<6i21d9<;50;&2f6<2;:1e=o<51c98k073290/=o=55218j4d528i07b;>3;29 4d42<987c?m2;3g?>i29;0;6)?m3;707>h6j;0:i65`50394?"6j:0>?>5a1c095c=4;n6eb?6=,8h868=<;o3a6?4632e?j94?:%3a7?34;2d:n?4=2:9l0c5=83.:n>4:329m5g4=::10e9m8:18'5g5=10e9lj:18'5g5=290/=o=54dc8j4d52m10e9l7:18'5g5=!7e;3>nm6`>b3826>=nb287ad=i9k81=>54i5`2>5<#9k918ho4n0`1>42<3`>i<7>5$0`0>1cf3g;i>7?:;:k7ec<72-;i?7:ja:l2f7<6>21b8lk50;&2f6<3mh1e=o<51698m1gc290/=o=54dc8j4d528207d:nc;29 4d42=oj7c?m2;3:?>o3km0;6)?m3;6fe>h6j;0:m65f4ba94?"6j:0?il5a1c095g=e:9j0f>=83.:n>4;e`9m5g4=9o10e9m>:18'5g5=3:1(!7e;3>nm6`>b3816>=nb287ad=i9k81>>54i5;`>5<5<#9k9194<4n0`1>4=5<#9k9194<4n0`1>6=5<#9k9194<4n0`1>0=5<#9k9194<4n0`1>2=5<#9k919l94n0`1>5=6=4+1c191d15<#9k919l94n0`1>7=54o4c1>5<#9k919l94n0`1>1=5<#9k919l94n0`1>3=5<#9k919l94n0`1>==26=44i467>5<5<5<6290;w)?l2;da?M2>:2B?4:5`f`83>>{e<0>1<7?50;2x 4e52=237E:62:J7<2=h9k:1<75rb3ag>5<3290;w)?l2;d4?M2>:2B?4:5+11:91>o3>3:17d;?:188m4d32900c50z&2g75<54;294~"6k;0m;6F;939K0=1<@=80(<;::4;:?!7703?0e9850;9j15<722c:n94?::m2f0<722wi8:?50;194?6|,8i96k:4H5;1?M2??2B?>6*>5486=<=#9921=6g;6;29?l372900c50z&2g76876;%33>i6j<0;66sm46`94?2=83:p(3;6F;2:&210<2101/==655:k72?6=3`?;6=44i0`7>5<6=44}c644?6=;3:1c38e0>N31;1C8594H508 4322<327)??8;38m10=831b9=4?::m2f0<722wi8:j50;794?6|,8i96k64H5;1?M2??2B?>6*>5486=<=n0?>3-;;47?4i5494?=n=90;66a>b483>>{eN3:2.:984:989j03<722c?;7>5;h73>5<5<54;294~"6k;0m;6F;939K0=1<@=80(<;::4;:?!7703?0e9850;9j15<722c:n94?::m2f0<722wi8:750;694?6|,8i96k94H5;1?M2??2.:<54:;h65>5<5<3290;w)?l2;d4?M2>:2B?4:5+11:91>o3>3:17d;?:188m4d32900c50z&2g75;n3a1?6=3th?484?:583>5}#9j81j:5G4808L1>03-;;47;4i5494?=n=90;66g>b583>>i6j<0;66sm49694?2=83:p(3;6*>0986?l212900e8>50;9j5g2=831d=o;50;9~f4c3290?6=4?{%3`6?`23A>2>6F;869'55>=92c?:7>5;h6`>5<7E:62:J7<2=#9921=6g;6;29?l2d2900e8>50;9l5g3=831vn5<7s-;h>7h:;I6:6>N30>1/==651:k72?6=3`>h6=44i4294?=h9k?1<75rb0g2>5<3290;w)?l2;d6?M2>:2B?4:5+11:95>o3>3:17d:l:188m06=831d=o;50;9~f4c7290?6=4?{%3`6?`23A>2>6F;869'55>=92c?:7>5;h6`>5<7E:62:J7<2=#9921=6g;6;29?l2d2900e8>50;9l5g3=831vn5<7s-;h>7h:;I6:6>N30>1/==651:k72?6=3`>h6=44i4294?=h9k?1<75rb0fg>5<3290;w)?l2;d6?M2>:2B?4:5+11:95>o3>3:17d:l:188m06=831d=o;50;9~f4bd290?6=4?{%3`6?`23A>2>6F;869'55>=92c?:7>5;h6`>5<=6=4;:183!7d:3l>7E:62:J7<2=#9921=6g;6;29?l2d2900e8>50;9l5g3=831vn?:::187>5<7s-;h>7h:;I6:6>N30>1/==651:k72?6=3`>h6=44i4294?=h9k?1<75rb367>5<3290;w)?l2;d6?M2>:2B?4:5+11:95>o3>3:17d:l:188m06=831d=o;50;9~f724290?6=4?{%3`6?`23A>2>6F;869'55>=92c?:7>5;h6`>5<96=4;:183!7d:3l>7E:62:J7<2=#9921=6g;6;29?l2d2900e8>50;9l5g3=831vn?:>:187>5<7s-;h>7h:;I6:6>N30>1/==651:k72?6=3`>h6=44i4294?=h9k?1<75rb363>5<3290;w)?l2;d6?M2>:2B?4:5+11:95>o3>3:17d:l:188m06=831d=o;50;9~f75a290?6=4?{%3`6?`23A>2>6F;869'55>=92c?:7>5;h6`>5<7E:62:J7<2=#9921=6g;6;29?l2d2900e8>50;9l5g3=831vn?6j:187>5<7s-;h>7h:;I6:6>N30>1/==651:k72?6=3`>h6=44i4294?=h9k?1<75rb3:g>5<3290;w)?l2;d6?M2>:2B?4:5+11:95>o3>3:17d:l:188m06=831d=o;50;9~f7>d290?6=4?{%3`6?`23A>2>6F;869'55>=92c?:7>5;h6`>5<7E:62:J7<2=#9921=6g;6;29?l2d2900e8>50;9l5g3=831vn?6n:187>5<7s-;h>7h:;I6:6>N30>1/==651:k72?6=3`>h6=44i4294?=h9k?1<75rb3::>5<3290;w)?l2;d6?M2>:2B?4:5+11:95>o3>3:17d:l:188m06=831d=o;50;9~f7>?290?6=4?{%3`6?`23A>2>6F;869'55>=92c?:7>5;h6`>5<7E:62:J7<2=#9921=6g;6;29?l2d2900e8>50;9l5g3=831vn?69:187>5<7s-;h>7h:;I6:6>N30>1/==651:k72?6=3`>h6=44i4294?=h9k?1<75rb30`>5<3290;w)?l2;d6?M2>:2B?4:5+11:95>o3>3:17d:l:188m06=831d=o;50;9~f74e290?6=4?{%3`6?`23A>2>6F;869'55>=92c?:7>5;h6`>5<7E:62:J7<2=#9921=6g;6;29?l2d2900e8>50;9l5g3=831vn?<6:187>5<7s-;h>7h:;I6:6>N30>1/==651:k72?6=3`>h6=44i4294?=h9k?1<75rb30;>5<3290;w)?l2;d6?M2>:2B?4:5+11:95>o3>3:17d:l:188m06=831d=o;50;9~f740290?6=4?{%3`6?`23A>2>6F;869'55>=92c?:7>5;h6`>5<7E:62:J7<2=#9921=6g;6;29?l2d2900e8>50;9l5g3=831vn?<::187>5<7s-;h>7h:;I6:6>N30>1/==651:k72?6=3`>h6=44i4294?=h9k?1<75rb307>5<3290;w)?l2;d6?M2>:2B?4:5+11:95>o3>3:17d:l:188m06=831d=o;50;9~f71d290?6=4?{%3`6?`23A>2>6F;869K07=#94=n50z&2g76876;%33>o283:17b?m5;29?xd5?h0;694?:1y'5f4=n<1C84<4H5:4?M253-;>97;69:&24=<63`>=6=44i5a94?=n=90;66a>b483>>{e:>31<7:50;2x 4e52o?0D97=;I6;3>N3:2.:984:989'55>=92c?:7>5;h6`>5<7E:62:J7<2=O<;1/=8;558;8 46?281b8;4?::k7g?6=3`?;6=44o0`6>5<54;294~"6k;0m96F;939K0=1<@=80(<;::4;:?!7703;0e9850;9j0f<722c><7>5;n3a1?6=3th9;;4?:583>5}#9j81j85G4808L1>03A>97)?:5;7:=>"6810:7d:9:188m1e=831b9=4?::m2f0<722wi>:;50;694?6|,8i96k;4H5;1?M2??2B?>6*>5486=<=#9921=6g;6;29?l2d2900e8>50;9l5g3=831vn?9;:187>5<7s-;h>7h:;I6:6>N30>1C8?5+14791>o3k3:17d;?:188k4d22900qo<>a;290?6=8r.:o?4i5:J7=7=O<1=0D9<4$076>0?>3-;;47?4i5494?=n1<729q/=n<5f49K0<4<@=2<7E:=;%361?3>12.:<54>;h65>5<>i6j<0;66sm20:94?2=83:p(3;6F;2:&210<2101/==651:k72?6=3`>h6=44i4294?=h9k?1<75rb334>5<3290;w)?l2;d6?M2>:2B?4:5G439'503==030(<>7:09j03<722c?o7>5;h73>5<6=44}c022?6=<3:1c38e1>N31;1C8594H508 4322<327)??8;38m10=831b8n4?::k64?6=3f;i97>5;|`150<72=0;6=u+1b09b0=O<080D968;I61?!72=3?256*>0982?l212900e9m50;9j15<722e:n84?::a642=83>1<7>t$0a1>c3<@=397E:77:J76>"6=<0>545+11:95>o3>3:17d:l:188m06=831d=o;50;9~f774290?6=4?{%3`6?`23A>2>6F;869K07=#94=n50z&2g76876;%33>o283:17b?m5;29?xd5810;694?:1y'5f4=n<1C84<4H5:4?!7703;0e9850;9j0f<722c><7>5;n3a1?6=3th9<:4?:583>5}#9j81j85G4808L1>03-;;47?4i5494?=n1<729q/=n<5f49K0<4<@=2<7)??8;38m10=831b8n4?::k64?6=3f;i97>5;|`140<72=0;6=u+1b09b0=O<080D968;%33>o283:17b?m5;29?xd58=0;694?:1y'5f4=n<1C84<4H5:4?!7703;0e9850;9j0f<722c><7>5;n3a1?6=3th9<>4?:583>5}#9j81j85G4808L1>03-;;47?4i5494?=n1<729q/=n<5f49K0<4<@=2<7)??8;38m10=831b8n4?::k64?6=3f;i97>5;|`144<72=0;6=u+1b09b0=O<080D968;%33>o283:17b?m5;29?xd5890;694?:1y'5f4=n<1C84<4H5:4?!7703;0e9850;9j0f<722c><7>5;n3a1?6=3th9:l4?:583>5}#9j81j85G4808L1>03-;;47?4i5494?=n1<729q/=n<5f49K0<4<@=2<7)??8;38m10=831b8n4?::k64?6=3f;i97>5;|`12=<72=0;6=u+1b09b0=O<080D968;%33>o283:17b?m5;29?xd5>>0;694?:1y'5f4=n<1C84<4H5:4?!7703;0e9850;9j0f<722c><7>5;n3a1?6=3th9:;4?:583>5}#9j81j85G4808L1>03-;;47?4i5494?=n1<729q/=n<5f49K0<4<@=2<7)??8;38m10=831b8n4?::k64?6=3f;i97>5;|`121<72=0;6=u+1b09b0=O<080D968;%33>o283:17b?m5;29?xd5>:0;694?:1y'5f4=n<1C84<4H5:4?!7703;0e9850;9j0f<722c><7>5;n3a1?6=3th9:?4?:583>5}#9j81j85G4808L1>03-;;47?4i5494?=n0<729q/=n<5f79K0<4<@=2<7)??8;38m10=831b8:4?::k7g?6=3`?;6=44o0`6>5<55;294~"6k;0m:6F;939K0=1<,8:36<5f4783>>o3?3:17d:l:188m06=831d=o;50;9~f665290>6=4?{%3`6?`13A>2>6F;869'55>=92c?:7>5;h64>5<>i6j<0;66sm31394?3=83:p(3;6*>0982?l212900e9950;9j0f<722c><7>5;n3a1?6=3th8<=4?:483>5}#9j81j;5G4808L1>03-;;47?4i5494?=n<>0;66g;c;29?l372900c50z&2g72B?5?5G4958 46?281b8;4?::k73?6=3`>h6=44i4294?=h9k?1<75rb3dg>5<2290;w)?l2;d5?M2>:2B?4:5+11:95>o3>3:17d:8:188m1e=831b9=4?::m2f0<722wi>km50;794?6|,8i96k64H5;1?M2??2.:<54:;h65>5<>o6j=0;66a>b483>>{e:oo1<7;50;2x 4e52o<0D97=;I6;3>"6810:7d:9:188m11=831b8n4?::k64?6=3f;i97>5;|`1b4<72:0;6=u+1b090<7<@=397E:77:k7=?6=3`;?n7>5;n3ba?6=3th9j=4?:283>5}#9j8184?4H5;1?M2??2c?57>5;h37f?6=3f;ji7>5;|`1a2<72=0;6=u+1b09500<@=397E:77:k7=?6=3`?96=44i0`a>5<c387=4=O<080D968;h6:>5<i6=44o0cf>5<54;294~"6k;0:9;5G4808L1>03`>26=44i4094?=n9kh1<75`1`g94?=zj;on6=4<:183!7d:3>2=6F;939K0=15<3290;w)?l2;362>N31;1C8594i5;94?=n=;0;66g>bc83>>i6il0;66sm2df94?5=83:p(:2B?4:5f4883>>o6ad83>>{e:l;1<7:50;2x 4e528?=7E:62:J7<2=n<00;66g:2;29?l7ej3:17b?ne;29?xd5mj0;6>4?:1y'5f4=<0;0D97=;I6;3>o313:17d?;b;29?j7fm3:17pl=dg83>1<729q/=n<51448L1?53A>3;6g;9;29?l352900e50z&2g7<6=?1C84<4H5:4?l2>2900e8<50;9j5gd=831d=lk50;9~f7cf29086=4?{%3`6?2>92B?5?5G4958m1?=831b=9l50;9l5dc=831vn?jm:187>5<7s-;h>7?:6:J7=7=O<1=0e9750;9j17<722c:no4?::m2e`<722wi>h750;194?6|,8i9697>;I6:6>N30>1b844?::k20g<722e:mh4?::a6a?=83>1<7>t$0a1>4313A>2>6F;869j0<<722c>>7>5;h3af?6=3f;ji7>5;|`053<72<0;6=u+1b09b3=O<080D968;%33>o3k3:17d;?:188k4d22900qo=>5;291?6=8r.:o?4i6:J7=7=O<1=0(<>7:09j03<722c?;7>5;h6`>5<t$0a1>c0<@=397E:77:&24=<63`>=6=44i5594?=n0<729q/=n<5f79K0<4<@=2<7)??8;38m10=831b8:4?::k7g?6=3`?;6=44o0`6>5<55;294~"6k;0m:6F;939K0=1<,8:36<5f4783>>o3?3:17d:l:188m06=831d=o;50;9~f677290>6=4?{%3`6?`13A>2>6F;869'55>=92c?:7>5;h64>5<>i6j<0;66sm31d94?3=83:p(3;6*>0982?l212900e9950;9j0f<722c><7>5;n3a1?6=3th85}#9j81j;5G4808L1>03-;;47?4i5494?=n<>0;66g;c;29?l372900c50z&2g75;n3a1?6=3th9m?4?:583>5}#9j81j:5G4808L1>03-;;47;4i5494?=n=90;66g>b583>>i6j<0;66sm28a94?2=83:p(3;6*>0982?l212900e9m50;9j15<722e:n84?::a61<7>t$0a1>c3<@=397E:77:&24=<63`>=6=44i5a94?=n=90;66a>b483>>{e;::1<7=50;2x 4e52=3:7E:62:J7<2=n<00;66g>4c83>>i6il0;66sm33d94?5=83:p(:2B?4:5f4883>>o6ad83>>{e;;:1<7:50;2x 4e528?=7E:62:J7<2=n<00;66g:2;29?l7ej3:17b?ne;29?xd4:l0;6>4?:1y'5f4=<0;0D97=;I6;3>o313:17d?;b;29?j7fm3:17pl<1g83>1<729q/=n<51448L1?53A>3;6g;9;29?l352900e50z&2g7<6=?1C84<4H5:4?l2>2900e8<50;9j5gd=831d=lk50;9~f64d29086=4?{%3`6?2>92B?5?5G4958m1?=831b=9l50;9l5dc=831vn>?k:187>5<7s-;h>7?:6:J7=7=O<1=0e9750;9j17<722c:no4?::m2e`<722wi??l50;194?6|,8i9697>;I6:6>N30>1b844?::k20g<722e:mh4?::a74e=83>1<7>t$0a1>4313A>2>6F;869j0<<722c>>7>5;h3af?6=3f;ji7>5;|`06d<72:0;6=u+1b090<7<@=397E:77:k7=?6=3`;?n7>5;n3ba?6=3th8=o4?:583>5}#9j81=884H5;1?M2??2c?57>5;h71>5<5<54;294~"6k;0:9;5G4808L1>03`>26=44i4094?=n9kh1<75`1`g94?=zj:;26=4;:183!7d:3;>:6F;939K0=1>o6jk0;66a>ad83>>{e;821<7:50;2x 4e528?=7E:62:J7<2=n<00;66g:2;29?l7ej3:17b?ne;29?xd4;l0;694?:1y'5f4=n<1C84<4H5:4?!7703;0e9850;9j0f<722c><7>5;n3a1?6=3th8?i4?:583>5}#9j81j85G4808L1>03-;;47?4i5494?=n1<729q/=n<5f49K0<4<@=2<7)??8;38m10=831b8n4?::k64?6=3f;i97>5;|`07g<72=0;6=u+1b09b0=O<080D968;%33>o283:17b?m5;29?xd4;h0;694?:1y'5f4=n<1C84<4H5:4?!7703;0e9850;9j0f<722c><7>5;n3a1?6=3th8?44?:583>5}#9j81j85G4808L1>03-;;47?4i5494?=n1<729q/=n<5f49K0<4<@=2<7)??8;38m10=831b8n4?::k64?6=3f;i97>5;|`003<72<0;6=u+1b09b==O<080D968;%33>o283:17d?m4;29?j7e=3:17pl=c183>1<729q/=n<51448L1?53A>3;6g;9;29?l352900e579K0<4<@=2<7d:6:188m04=831b=ol50;9l5dc=831vn?lj:187>5<7s-;h>7?:6:J7=7=O<1=0e9750;9j17<722c:no4?::m2e`<722wi>oj50;694?6|,8i96<;9;I6:6>N30>1b844?::k66?6=3`;in7>5;n3ba?6=3th9nn4?:583>5}#9j81=884H5;1?M2??2c?57>5;h71>5<5<54;294~"6k;0:9;5G4808L1>03`>26=44i4094?=n9kh1<75`1`g94?=zj;kh6=4;:183!7d:3;>:6F;939K0=1>o6jk0;66a>ad83>>{e:hh1<7:50;2x 4e528?=7E:62:J7<2=n<00;66g:2;29?l7ej3:17b?ne;29?xd5ih0;694?:1y'5f4=9<<0D97=;I6;3>o313:17d;=:188m4de2900c50z&2g7<6=?1C84<4H5:4?l2>2900e8<50;9j5gd=831d=lk50;9~f6b5290>6=4?{%3`6?`13A>2>6F;869'55>=92c?:7>5;h64>5<>i6j<0;66sm3e294?3=83:p(3;6*>0982?l212900e9950;9j0f<722c><7>5;n3a1?6=3th8h<4?:483>5}#9j81j55G4808L1>03-;;47;4i5494?=n<>0;66g:0;29?l7e<3:17b?m5;29?xd4l:0;684?:1y'5f4=n?1C84<4H5:4?!7703;0e9850;9j02<722c?o7>5;h73>5<6=44}c1g0?6==3:1c38e2>N31;1C8594$02;>4=n50;9l5g3=831vn>j::186>5<7s-;h>7h9;I6:6>N30>1/==651:k72?6=3`><6=44i5a94?=n=90;66a>b483>>{e;m<1<7;50;2x 4e52o<0D97=;I6;3>"6810:7d:9:188m11=831b8n4?::k64?6=3f;i97>5;|`0`2<72<0;6=u+1b09b3=O<080D968;%33>o3k3:17d;?:188k4d22900qo=k8;291?6=8r.:o?4i6:J7=7=O<1=0(<>7:09j03<722c?;7>5;h6`>5<t$0a1>c><@=397E:77:&24=<23`>=6=44i5594?=n=90;66g>b583>>i6j<0;66sm3d194?3=83:p(3;6*>0982?l212900e9950;9j0f<722c><7>5;n3a1?6=3th8i84?:483>5}#9j81j;5G4808L1>03-;;47?4i5494?=n<>0;66g;c;29?l372900c3:197>50z&2g72B?5?5G4958 46?281b8;4?::k73?6=3`>h6=44i4294?=h9k?1<75rb2g4>5<2290;w)?l2;d5?M2>:2B?4:5+11:95>o3>3:17d:8:188m1e=831b9=4?::m2f0<722wi?h650;794?6|,8i96k84H5;1?M2??2.:<54>;h65>5<>o283:17b?m5;29?xd4m00;684?:1y'5f4=n?1C84<4H5:4?!7703;0e9850;9j02<722c?o7>5;h73>5<6=44}c1fe?6==3:1c38e2>N31;1C8594$02;>4=n50;9l5g3=831vn>m9:186>5<7s-;h>7h9;I6:6>N30>1/==651:k72?6=3`><6=44i5a94?=n=90;66a>b483>>{e;j?1<7;50;2x 4e52o<0D97=;I6;3>"6810:7d:9:188m11=831b8n4?::k64?6=3f;i97>5;|`0g6<72<0;6=u+1b09b3=O<080D968;%33>o3k3:17d;?:188k4d22900qo=l2;291?6=8r.:o?4i6:J7=7=O<1=0(<>7:09j03<722c?;7>5;h6`>5<t$0a1>c0<@=397E:77:&24=<63`>=6=44i5594?=n0<729q/=n<5f99K0<4<@=2<7)??8;78m10=831b8:4?::k64?6=3`;i87>5;n3a1?6=3th8o<4?:483>5}#9j81j;5G4808L1>03-;;47?4i5494?=n<>0;66g;c;29?l372900c50z&2g75<6=44}c1a7?6=;3:1c387=4=O<080D968;h6:>5<i6=44o0cf>5<7>53;294~"6k;0?5<5G4808L1>03`>26=44i06a>5<c38213=O<080D968;h6:>5<5<4290;w)?l2;6:5>N31;1C8594i5;94?=n9=h1<75`1`g94?=zj:k<6=4;:183!7d:3;>:6F;939K0=1>o6jk0;66a>ad83>>{e;k:1<7=50;2x 4e52=3:7E:62:J7<2=n<00;66g>4c83>>i6il0;66sm3`794?2=83:p(:2B?4:5f4883>>o2:3:17d?mb;29?j7fm3:17pl6<729q/=n<54838L1?53A>3;6g;9;29?l73j3:17b?ne;29?xd4i:0;694?:1y'5f4=9<<0D97=;I6;3>o313:17d;=:188m4de2900c50z&2g7<3181C84<4H5:4?l2>2900e<:m:188k4gb2900qo=n1;290?6=8r.:o?4>579K0<4<@=2<7d:6:188m04=831b=ol50;9l5dc=831vn>ok:180>5<7s-;h>7:61:J7=7=O<1=0e9750;9j51d=831d=lk50;9~f6?a290?6=4?{%3`6?72>2B?5?5G4958m1?=831b9?4?::k2fg<722e:mh4?::a7de=8391<7>t$0a1>1?63A>2>6F;869j0<<722c:8o4?::m2e`<722wi?4j50;694?6|,8i96<;9;I6:6>N30>1b844?::k66?6=3`;in7>5;n3ba?6=3th8mo4?:283>5}#9j8184?4H5;1?M2??2c?57>5;h37f?6=3f;ji7>5;|`0=g<72=0;6=u+1b09500<@=397E:77:k7=?6=3`?96=44i0`a>5<c38e2>N31;1C8594$02;>4=n50;9l5g3=831vn>hm:186>5<7s-;h>7h9;I6:6>N30>1/==651:k72?6=3`><6=44i5a94?=n=90;66a>b483>>{e;ok1<7;50;2x 4e52o<0D97=;I6;3>"6810:7d:9:188m11=831b8n4?::k64?6=3f;i97>5;|`0b<<72<0;6=u+1b09b3=O<080D968;%33>o3k3:17d;?:188k4d22900qo=i8;291?6=8r.:o?4i6:J7=7=O<1=0(<>7:09j03<722c?;7>5;h6`>5<t$0a1>c0<@=397E:77:&24=<63`>=6=44i5594?=n0<729q/=n<5f79K0<4<@=2<7)??8;38m10=831b8:4?::k7g?6=3`?;6=44o0`6>5<55;294~"6k;0m:6F;939K0=1<,8:36<5f4783>>o3?3:17d:l:188m06=831d=o;50;9~f637290?6=4?{%3`6?72>2B?5?5G4958m1?=831b9?4?::k2fg<722e:mh4?::a707=83>1<7>t$0a1>4313A>2>6F;869j0<<722c>>7>5;h3af?6=3f;ji7>5;|`017<72=0;6=u+1b09500<@=397E:77:k7=?6=3`?96=44i0`a>5<c38213=O<080D968;h6:>5<5<3290;w)?l2;362>N31;1C8594i5;94?=n=;0;66g>bc83>>i6il0;66sm37194?2=83:p(:2B?4:5f4883>>o2:3:17d?mb;29?j7fm3:17pl<6583>1<729q/=n<51448L1?53A>3;6g;9;29?l352900e579K0<4<@=2<7d:6:188m04=831b=ol50;9l5dc=831vn>89:187>5<7s-;h>7?:6:J7=7=O<1=0e9750;9j17<722c:no4?::m2e`<722wi?;950;694?6|,8i96<;9;I6:6>N30>1b844?::k66?6=3`;in7>5;n3ba?6=3th8;44?:583>5}#9j81=884H5;1?M2??2c?57>5;h71>5<5<54;294~"6k;0:9;5G4808L1>03`>26=44i4094?=n9kh1<75`1`g94?=zj:=i6=4;:183!7d:3;>:6F;939K0=1>o6jk0;66a>ad83>>{e;>i1<7:50;2x 4e528?=7E:62:J7<2=n<00;66g:2;29?l7ej3:17b?ne;29?xd4?m0;694?:1y'5f4=9<<0D97=;I6;3>o313:17d;=:188m4de2900c50z&2g75;n3a1?6=3th84i4?:583>5}#9j81j:5G4808L1>03-;;47;4i5494?=n=90;66g>b583>>i6j<0;66sm39:94?3=83:p(3;6*>0986?l212900e9950;9j15<722c:n94?::m2f0<722wi8>h50;794?6|,8i96k74H5;1?M2??2.:<54>;h65>5<>o6j?0;66a>b483>>{e<:o1<7;50;2x 4e52o30D97=;I6;3>"6810:7d:9:188m11=831b9=4?::k2f3<722e:n84?::a06b=83?1<7>t$0a1>c?<@=397E:77:&24=<63`>=6=44i5594?=n=90;66g>b783>>i6j<0;66sm42a94?3=83:p(3;6*>0982?l212900e9950;9j15<722c:n;4?::m2f0<722wi8>l50;794?6|,8i96k74H5;1?M2??2.:<54>;h65>5<>o6j?0;66a>b483>>{e<:k1<7;50;2x 4e52o30D97=;I6;3>"6810:7d:9:188m11=831b9=4?::k2f3<722e:n84?::a06>=83?1<7>t$0a1>c?<@=397E:77:&24=<63`>=6=44i5594?=n=90;66g>b783>>i6j<0;66sm42594?3=83:p(3;6*>0982?l212900e9950;9j15<722c:n;4?::m2f0<722wi8>850;794?6|,8i96k74H5;1?M2??2.:<54>;h65>5<>o6j?0;66a>b483>>{e<:?1<7;50;2x 4e52o30D97=;I6;3>"6810:7d:9:188m11=831b9=4?::k2f3<722e:n84?::a062=83?1<7>t$0a1>c?<@=397E:77:&24=<63`>=6=44i5594?=n=90;66g>b783>>i6j<0;66sm42194?3=83:p(3;6*>0982?l212900e9950;9j15<722c:n;4?::m2f0<722wi8><50;794?6|,8i96k74H5;1?M2??2.:<54>;h65>5<>o6j?0;66a>b483>>{e<:;1<7;50;2x 4e52o30D97=;I6;3>"6810:7d:9:188m11=831b9=4?::k2f3<722e:n84?::a066=83?1<7>t$0a1>c?<@=397E:77:&24=<63`>=6=44i5594?=n=90;66g>b783>>i6j<0;66sm43d94?3=83:p(3;6*>0982?l212900e9950;9j15<722c:n;4?::m2f0<722wi8?j50;794?6|,8i96k74H5;1?M2??2.:<54>;h65>5<>o6j?0;66a>b483>>{e<;i1<7;50;2x 4e52o30D97=;I6;3>"6810:7d:9:188m11=831b9=4?::k2f3<722e:n84?::a07d=83?1<7>t$0a1>c?<@=397E:77:&24=<63`>=6=44i5594?=n=90;66g>b783>>i6j<0;66sm43c94?3=83:p(3;6*>0982?l212900e9950;9j15<722c:n;4?::m2f0<722wi8?750;794?6|,8i96k74H5;1?M2??2.:<54>;h65>5<>o6j?0;66a>b483>>{e<;21<7;50;2x 4e52o30D97=;I6;3>"6810:7d:9:188m11=831b9=4?::k2f3<722e:n84?::a071=83?1<7>t$0a1>c?<@=397E:77:&24=<63`>=6=44i5594?=n=90;66g>b783>>i6j<0;66sm43494?3=83:p(3;6*>0982?l212900e9950;9j15<722c:n;4?::m2f0<722wi8?;50;794?6|,8i96k74H5;1?M2??2.:<54>;h65>5<>o6j?0;66a>b483>>{e<;>1<7;50;2x 4e52o30D97=;I6;3>"6810:7d:9:188m11=831b9=4?::k2f3<722e:n84?::a013=83?1<7>t$0a1>c?<@=397E:77:&24=<63`>=6=44i5594?=n=90;66g>b783>>i6j<0;66sm45694?3=83:p(3;6*>0982?l212900e9950;9j15<722c:n;4?::m2f0<722wi89=50;794?6|,8i96k74H5;1?M2??2.:<54>;h65>5<>o6j?0;66a>b483>>{e<=81<7;50;2x 4e52o30D97=;I6;3>"6810:7d:9:188m11=831b9=4?::k2f3<722e:n84?::a017=83?1<7>t$0a1>c?<@=397E:77:&24=<63`>=6=44i5594?=n=90;66g>b783>>i6j<0;66sm45294?3=83:p(3;6*>0982?l212900e9950;9j15<722c:n;4?::m2f0<722wi8>750;794?6|,8i96k74H5;1?M2??2.:<54>;h65>5<>o6j?0;66a>b483>>{e<;o1<7;50;2x 4e52o30D97=;I6;3>"6810:7d:9:188m11=831b9=4?::k2f3<722e:n84?::a075=83?1<7>t$0a1>c?<@=397E:77:&24=<63`>=6=44i5594?=n=90;66g>b783>>i6j<0;66sm43094?3=83:p(3;6*>0982?l212900e9950;9j15<722c:n;4?::m2f0<722wi85?50;194?6|,8i96<;?;I6:6>N30>1/==65119jbf<722cmh7>5;n3ba?6=3th?;>4?:283>5}#9j81=8>4H5;1?M2??2.:<54>0:keg?6=3`lo6=44o0cf>5<53;294~"6k;0:9=5G4808L1>03-;;47?8;hd`>5<<6F;939K0=1<,8:36<94iga94?=nnm0;66a>ad83>>{e9m81<7=50;2x 4e528?;7E:62:J7<2=#9921=:5ffb83>>oal3:17b?ne;29?xd6l80;6>4?:1y'5f4=9<:0D97=;I6;3>"6810:;6gic;29?l`c2900c50z&2g7<6=91C84<4H5:4?!7703;<7dhl:188mcb=831d=lk50;9~f4ea29086=4?{%3`6?7282B?5?5G4958 46?28=0ekm50;9jba<722e:mh4?::a5fc=8391<7>t$0a1>4373A>2>6F;869'55>=9>1bjn4?::ke`?6=3f;ji7>5;|`2ga<72:0;6=u+1b09506<@=397E:77:&24=<6?2cmo7>5;hdg>5<c38215=O<080D968;%335<4290;w)?l2;364>N31;1C8594$02;>41>i6il0;66sm1bc94?5=83:p(:2B?4:5+11:952=nnj0;66gid;29?j7fm3:17pl>c883>6<729q/=n<51428L1?53A>3;6*>09823>oak3:17dhk:188k4gb2900qo?l8;297?6=8r.:o?4>519K0<4<@=2<7)??8;34?l`d2900ekj50;9l5dc=831vn5<7s-;h>7?:0:J7=7=O<1=0(<>7:058mce=831bji4?::m2e`<722wi=n850;194?6|,8i96<;?;I6:6>N30>1/==65169jbf<722cmh7>5;n3ba?6=3th:o84?:283>5}#9j81=8>4H5;1?M2??2.:<54>7:keg?6=3`lo6=44o0cf>5<53;294~"6k;0:9=5G4808L1>03-;;47?8;hd`>5<<6F;939K0=1<,8:36<94iga94?=nnm0;66a>ad83>>{e:h:1<7:50;2x 4e528?:7E:62:J7<2=#9921j<5ffb83>>oal3:17dhj:188k4gb2900qo<;a;290?6=8r.:o?4>509K0<4<@=2<7)??8;3e?l`d2900ekj50;9jb`<722e:mh4?::a5`>=83>1<7>t$0a1>4363A>2>6F;869'55>=9o1bjn4?::ke`?6=3`ln6=44o0cf>5<55;294~"6k;0:9?5G4808L1>03-;;47?>;hd`>5<>oan3:17b?ne;29?xd5"6810:56gic;29?l`c2900ekk50;9jbc<722e:mh4?::a5`g=83?1<7>t$0a1>4353A>2>6F;869'55>=901bjn4?::ke`?6=3`ln6=44igd94?=h9ho1<75rb3c7>5<2290;w)?l2;366>N31;1C8594$02;>4e>oam3:17dhi:188k4gb2900qo=7b;297?6=8r.:o?4>519K0<4<@=2<7)??8;60?l`d2900ekj50;9l5dc=831vn?77:187>5<7s-;h>7?:1:J7=7=O<1=0(<>7:3a8mce=831bji4?::kea?6=3f;ji7>5;|`00=<72<0;6=u+1b09504<@=397E:77:&24=<6j2cmo7>5;hdg>5<>i6il0;66sm35;94?5=83:p(:2B?4:5+11:95d=nnj0;66gid;29?j7fm3:17pl=4d83>6<729q/=n<51428L1?53A>3;6*>09823>oak3:17dhk:188k4gb2900qo?jc;297?6=8r.:o?4>519K0<4<@=2<7)??8;34?l`d2900ekj50;9l5dc=831vn?;?:187>5<7s-;h>7?:1:J7=7=O<1=0(<>7:0d8mce=831bji4?::kea?6=3f;ji7>5;|`2a`<72=0;6=u+1b09507<@=397E:77:&24=<6n2cmo7>5;hdg>5<>6F;939K0=1<,8:36<74iga94?=nnm0;66gie;29?l`a2900c50z&2g7<6=;1C84<4H5:4?!7703;27dhl:188mcb=831bjh4?::keb?6=3f;ji7>5;|`72f<72=0;6=u+1b09507<@=397E:77:&24=<292cmo7>5;hdg>5<>6F;939K0=1<,8:3655ffb83>>oal3:17dhj:188mc`=831d=lk50;9~f6>029086=4?{%3`6?7282B?5?5G4958 46?28n0ekm50;9jba<722e:mh4?::a727=8391<7>t$0a1>4373A>2>6F;869'55>=9m1bjn4?::ke`?6=3f;ji7>5;|`01`<72:0;6=u+1b09506<@=397E:77:&24=<6l2cmo7>5;hdg>5<c38215=O<080D968;%335<4290;w)?l2;364>N31;1C8594$02;>4b>i6il0;66sm39494?3=83:p(:2B?4:5+11:95`=nnj0;66gid;29?l`b2900ekh50;9l5dc=831vn>9?:186>5<7s-;h>7?:2:J7=7=O<1=0(<>7:0g8mce=831bji4?::kea?6=3`lm6=44o0cf>5<h7>55;294~"6k;0:9?5G4808L1>03-;;47?j;hd`>5<>oan3:17b?ne;29?xd5k00;684?:1y'5f4=9<80D97=;I6;3>"6810:i6gic;29?l`c2900ekk50;9jbc<722e:mh4?::a6g0=83?1<7>t$0a1>4353A>2>6F;869'55>=9l1bjn4?::ke`?6=3`ln6=44igd94?=h9ho1<75rb2:6>5<2290;w)?l2;366>N31;1C8594$02;>4c>oam3:17dhi:188k4gb2900qo=9f;291?6=8r.:o?4>539K0<4<@=2<7)??8;3f?l`d2900ekj50;9jb`<722cmj7>5;n3ba?6=3th89n4?:483>5}#9j81=8<4H5;1?M2??2.:<54>e:keg?6=3`lo6=44igg94?=nno0;66a>ad83>>{e:j21<7;50;2x 4e528?97E:62:J7<2=#9921=h5ffb83>>oal3:17dhj:188mc`=831d=lk50;9~f7d2290>6=4?{%3`6?72:2B?5?5G4958 46?28o0ekm50;9jba<722cmi7>5;hde>5<c38217=O<080D968;%330<729q/=n<51408L1?53A>3;6*>0982a>oak3:17dhk:188mcc=831bjk4?::m2e`<722wi?8l50;794?6|,8i96<;=;I6:6>N30>1/==651d9jbf<722cmh7>5;hdf>5<>6F;939K0=1<,8:3650z&2g7<6=;1C84<4H5:4?!7703;n7dhl:188mcb=831bjh4?::keb?6=3f;ji7>5;|`1gc<72=0;6=u+1b09507<@=397E:77:&24=5;hdg>5<>6F;939K0=1<,8:36<84iga94?=nnm0;66gie;29?l`a2900c50z&2g7<6=;1C84<4H5:4?!7703;=7dhl:188mcb=831bjh4?::keb?6=3f;ji7>5;|`0<6<72<0;6=u+1b09504<@=397E:77:&24=<6m2cmo7>5;hdg>5<>i6il0;66sm37f94?3=83:p(:2B?4:5+11:95`=nnj0;66gid;29?l`b2900ekh50;9l5dc=831vn>;n:186>5<7s-;h>7?:2:J7=7=O<1=0(<>7:0g8mce=831bji4?::kea?6=3`lm6=44o0cf>5<55;294~"6k;0:9?5G4808L1>03-;;47?j;hd`>5<>oan3:17b?ne;29?xd5j:0;684?:1y'5f4=9<80D97=;I6;3>"6810:i6gic;29?l`c2900ekk50;9jbc<722e:mh4?::a603=8391<7>t$0a1>4373A>2>6F;869'55>=9m1bjn4?::ke`?6=3f;ji7>5;|`2b6<72:0;6=u+1b09506<@=397E:77:&24=<6l2cmo7>5;hdg>5<c38214=O<080D968;%33ad83>>{e9o<1<7:50;2x 4e528?:7E:62:J7<2=#9921=55ffb83>>oal3:17dhj:188k4gb2900qo=60;297?6=8r.:o?4>519K0<4<@=2<7)??8;58mce=831bji4?::m2e`<722wi>h650;094?6|,8i96<:i;I6:6>N30>1/==657:keg?6=3f;ji7>5;|`1a3<72;0;6=u+1b0951`<@=397E:77:&24=<03`lh6=44o0cf>5<52;294~"6k;0:8k5G4808L1>03-;;4794iga94?=h9ho1<75rb3g1>5<5290;w)?l2;37b>N31;1C8594$02;>2=nnj0;66a>ad83>>{e:l:1<7<50;2x 4e528>m7E:62:J7<2=#9921;6gic;29?j7fm3:17pl=dd83>7<729q/=n<515d8L1?53A>3;6*>0984?l`d2900c7>50z&2g7<65<7s-;h>7?;f:J7=7=O<1=0(<>7:69jbf<722e:mh4?::a7dg=8381<7>t$0a1>42a3A>2>6F;869'55>=?2cmo7>5;n3ba?6=3th8m54?:383>5}#9j81=9h4H5;1?M2??2.:<548;hd`>5<c3820c=O<080D968;%33>i6il0;66sm3`094?4=83:p(:2B?4:5+11:93>oak3:17b?ne;29?xd4i90;6?4?:1y'5f4=9=l0D97=;I6;3>"6810<7dhl:188k4gb2900qo=6e;296?6=8r.:o?4>4g9K0<4<@=2<7)??8;58mce=831d=lk50;9~f6?d29096=4?{%3`6?73n2B?5?5G4958 46?2>1bjn4?::m2e`<722wi>k<50;094?6|,8i96<:i;I6:6>N30>1/==657:keg?6=3f;ji7>5;|`0f1<72;0;6=u+1b0951`<@=397E:77:&24=<03`lh6=44o0cf>5<53;294~"6k;0:9=5G4808L1>03-;;47?k;hd`>5<<6F;939K0=1<,8:36ad83>>{e;;91<7=50;2x 4e528?;7E:62:J7<2=#9921=i5ffb83>>oal3:17b?ne;29?xd4:=0;6>4?:1y'5f4=9<:0D97=;I6;3>"6810:h6gic;29?l`c2900c50z&2g7<6=91C84<4H5:4?!7703;o7dhl:188mcb=831d=lk50;9~f64129086=4?{%3`6?7282B?5?5G4958 46?28n0ekm50;9jba<722e:mh4?::a771=8391<7>t$0a1>4373A>2>6F;869'55>=9m1bjn4?::ke`?6=3f;ji7>5;|`06=<72:0;6=u+1b09506<@=397E:77:&24=<6l2cmo7>5;hdg>5<c38215=O<080D968;%335<4290;w)?l2;364>N31;1C8594$02;>2=nnj0;66gid;29?j7fm3:17pl<4`83>0<729q/=n<51468L1?53A>3;6*>0987?l`d2900ekj50;9jb`<722cmj7>5;n37g?6=3th9994?:783>5}#9j81=8=4H5;1?M2??2.:<54=0:keg?6=3`lo6=44igg94?=nno0;66a>4b83>>i6il0;66sm1g094?0=83:p(:2B?4:5+11:965=nnj0;66gid;29?l`b2900ekh50;9l51e=831d=lk50;9~f10f290jm7>50zJ7<2=#9j81=o94Z579e~462;8157o513827?d=k3;?6<;5}%37e?4<,8:;6>5+11397>"68;087)??3;18 4632:1/==;53:&243<43-om6k=4$02:>6=#99k1?6*>0c80?!77k390(<>k:29'55c=;2.:5+10097>"69:087)?>4;18 4722:1/=<853:&252<43-;:47=4$03:>6=#98k1?6*>1c80?!76k390(5+13097>"6::087)?=4;18 4422:1/=?853:&262<43-;947=4$00:>6=#9;k1?6*>2c80?!75k390(<k4<;%304?5<,89:6>5+12097>"6;:087)?<4;18 4522:1/=>853:&272<43-;847=4$01:>6=#9:k1?6*>3c80?!74k390(<=k:29'56c=;2.:?k4<;%374?5<,8>:6>5+15097>"6<:087)?;4;18 4222:1/=9853:&202<43-;?47=4$06:>7=#9ki18<5+11597>"6jl097):7c;3a<>"30m0:n55ac183?kc5291e=o75259m5gg=:=1e85k5259m0=`=:=1/j=4i3:&2fc<53`>j6=44i5`94?=n<1k1<75fed83>>o>i3:1(:188m60=83.:n>4<5:l2f7<732c887>5$0`0>63b381?>o4:3:1(?50;&2f6<4=2d:n?4;;:k04?6=,8h86>;4n0`1>0=b2801>h6j;0=76g=e;29 4d42:?0b4<5:l2f75$0`0>6`b382?>o4l3:1(m50;&2f6<4n2d:n?4<;:k0f?6=,8h86>h4n0`1>1=b280b>h6j;0>76g<9;29 4d42:l0b=83.:n>45$0`0>6`b383?>o1i3:1(6=b285f>h6j;0?76g95;29 4d42?h0b49b:l2f7<132c=?7>5$0`0>3db38;?>o193:1(50;&2f6<1j2d:n?4n;:k6b?6=,8h86;l4n0`1>g=b285f>h6j;0h76g:c;29 4d42?h0b49b:l2f7m7>5$0`0>3db3824>=n=10;6)?m3;4a?k7e:3;:76g:7;29 4d42?h0b4:9j11<72-;i?78m;o3a6?7232c5$0`0>3d5<#9k91:o5a1c0952=;1<7*>b285f>h6j;0:465f7183>!7e;3o1n3:1(k1e=o<51c98m3b=83.:n>49b:l2f7<6k21b:44?:%3a7?0e3g;i>7?k;:k6a?6=,8h86;l4n0`1>4c<3`?86=4+1c192g=i9k81=k54i8;94?"6j:0246`>b383?>o>?3:1(02d:n?4=;:k:1?6=,8h86464n0`1>6=b28g=>h6j;0;76ak8;29 4d42m30b4k9:l2f7<532eo97>5$0`0>a?54oe694?"6j:0o56`>b387?>ic;3:1(2=b28g=>h6j;0376alf;29 4d42m30b4k9:l2f75$0`0>a?b38`?>idi3:1(c=b28g=>h6j;0:<65`c783>!7e;3n27c?m2;32?>id=3:1(4k9:l2f7<6<21do?4?:%3a7?b>3g;i>7?:;:mf5?6=,8h86i74n0`1>40<3fo;6=4+1c19`<=i9k81=:54oed94?"6j:0o56`>b382<>=hll0;6)?m3;f:?k7e:3;276akd;29 4d42m30bc:9l`2<72-;i?7j6;o3a6?7c32eho7>5$0`0>a?5<#9k91h45a1c095c=b28ff>h6j;0;76aja;29 4d42lh0b4jb:l2f7<532en47>5$0`0>`d54idf94?=n9j:1<75f49`94?=n0m0;6)?m3;:`?k7e:3:07d6m:18'5g5=0j1e=o<51:9j<<<72-;i?76l;o3a6?4<3`236=4+1c19!7e;32h7c?m2;68?l>1290/=o=58b9m5g4==21b484?:%3a7?>d3g;i>784;h:7>5<#9k914n5a1c093>=n0:0;6)?m3;:`?k7e:3207d6=:18'5g5=0j1e=o<59:9j<4<72-;i?76l;o3a6?g<3`2;6=4+1c19!7e;32h7c?m2;a8?l1c290/=o=58b9m5g4=l21b;n4?:%3a7?>d3g;i>7k4;h5a>5<#9k914n5a1c09b>=n?h0;6)?m3;:`?k7e:3;;76g89;29 4d421i0b3:9j33<72-;i?76l;o3a6?7332c<97>5$0`0>=e5<#9k914n5a1c0953=b28;g>h6j;0:;65f9383>!7e;32h7c?m2;3;?>o>93:1(47c:l2f7<6j21b4h4?:%3a7?>d3g;i>7?l;:k;e?6=,8h865m4n0`1>4b<3`=m6=4+1c19b382b>=n1l0;6)?m3;;g?k7e:3:07d7l:18'5g5=1m1e=o<51:9j=g<72-;i?77k;o3a6?4<3fh36=4+1c19f2=i9k81<65`b783>!7e;3h<7c?m2;38?jd3290/=o=5b69m5g4=:21dn>4?:%3a7?d03g;i>7=4;n`1>5<#9k91n:5a1c090>=hj80;6)?m3;`4?k7e:3?07bl?:18'5g5=j>1e=o<56:9lec<72-;i?7l8;o3a6?1<3fkn6=4+1c19f2=i9k81465`ae83>!7e;3h<7c?m2;;8?jgd290/=o=5b69m5g4=i21dmo4?:%3a7?d03g;i>7l4;nc:>5<#9k91n:5a1c09g>=hi10;6)?m3;`4?k7e:3n07bo8:18'5g5=j>1e=o<5e:9le3<72-;i?7l8;o3a6?`<3fk>6=4+1c19f2=i9k81==54o`694?"6j:0i;6`>b3825>=hi:0;6)?m3;`4?k7e:3;976an2;29 4d42k=0b50;&2f65:9lfc<72-;i?7l8;o3a6?7132eii7>5$0`0>g15<#9k91n:5a1c095==b28a3>h6j;0:565`bc83>!7e;3h<7c?m2;3b?>iei3:1(1e=o<51b98kg3=83.:n>4m7:l2f7<6l21dml4?:%3a7?d03g;i>7?j;:m:b?6=,8h86o94n0`1>4`<3fo<6=4+1c19a3=i9k81<65`e483>!7e;3o=7c?m2;38?jc3290/=o=5e79m5g4=:21di>4?:%3a7?c13g;i>7=4;|q6=6<72?qU94=4=3c3>cb<5;3n6km4=3c7>c`<5;336kk4=3;4>ce57by]0d?X2<01U8l94^5c5?[2f=2T?m95Q4`18Z1g53W>j=6P;a19]0<`X2i91U94h4^4;f?[3>82T>4k5Q59g8Z0>c3W?3o6P:8c9]1=g4:2:?1a4<2:279hk4:2:?1`a<2:279ho4:2:?1`<<2:278=54>bc9>6f6==;16>oh5539>6gc==;16>oj5539>6ge==;16>lj5539>6de==;16>ll5539>6dg==;16>l75539>7d?==;16?l95539>7d3==;16?l=5539>7d7==;16?4h5539>7706==;16?8?5539>704==;16?8=5539>702==;16?;=5539>732==;16?;;5539>730==;16?;95539>72?==;16?:o5539>72d==;16?:m5539>72b==;168;o59`9>03g=9j:0198n:5:a?821i32o70:9a;:a?821i32270:9a;:;?821i32<70:9a;:5?821i32>70:9a;:7?821i32870:9a;:1?821i32:70:9a;:3?821i3=n70:9a;5g?821i3=h70:9a;5a?821i3=j70:9a;5:?821i3=370:9a;54?821i3==70:9a;56?821i33?70:9a;;0?821i33970:9a;;2?821i33;70:9a;:e?821i32n70:9a;:b?821i3=m70:9a;57?821i33n70:9a;;`?821i33i7p}<8983>7}Y<0h01>67:0`6?xu21<0;6:uQ5878910b2=i0199l:0`7?820j3;i863;7e82f1=:4d33ty9m?4?:3y]16b<5;k96ce<5:3:6km4}r7;3?6=>>qU9594=3ag>10<5==:6984=553>10<5=10<5==36984=554>10<5;>=6984=366>10<5;>?6984=360>10<5;>96984=362>10<5;>;6984=31e>10<5;9n6984=3:f>10<5;2o6984=3:`>10<5;2i6984=3:b>10<5;226984=3:;>10<5;2<6984=3:5>10<5;=h6984=35a>10<5;=j6984=35:>10<5;=36984=354>10<5;==6984=356>10<5;=?6984=32;>10<5;:<6984=325>10<5;:>6984=327>10<5;:86984=321>10<5;::6984=323>10<5::?6984=220>10<5::96984=222>10<5::;6984=3de>10<5;lo6984=3d`>10<5;ln6984=235>10<5:;>6984=237>10<5:;86984=231>10<5:;:6984=233>10<5::m6984=22f>10<5;k:6984=3c1>10<5;3h6984=3;a>10<5=9m6984=51f>10<5=9o6984=51`>10<5=9i6984=51b>10<5=936984=514>10<5=9=6984=516>10<5=9?6984=510>10<5=996984=512>10<5=9;6984=50e>10<5=8o6984=50`>10<5=8i6984=50b>10<5=826984=50;>10<5=8<6984=505>10<5=8>6984=507>10<5=>>6984=567>10<5=>86984=561>10<5=>:6984=563>10<5=926984=50f>10<5=886984=501>10<5=8>5239f95g355dy]110<5==m6984=55a>10<5==o6984=55f>10<5==j6984=5:6>10<5=2?6984=0g7>10<58o86984=0g1>10<58o:6984=0g3>10<58nm6984=0ff>10<58no6984=0f`>10<5;8h6984=30a>10<5;8j6984=30:>10<5;836984=304>10<5;8=6984=306>10<5;8?6984=33b>10<5;;26984=33;>10<5;;<6984=335>10<5;;>6984=337>10<5;;86984=331>10<5;10<5;<36984=344>10<5;<=6984=346>10<5;10<5;<96984=21f>10<5:9o6984=21`>10<5:9i6984=21b>10<5:926984=21;>10<5:>=6984=2f1>10<5:n;6984=2f2>10<5:n86984=2f7>10<5:n>6984=2f5>10<5:n<6984=2f;>10<5:o?6984=2g1>10<5:o86984=2g6>10<5:o=6984=2g4>10<5:o36984=2g:>10<5:oj6984=2a5>10<5:i>6984=2a0>10<5:i96984=2a7>10<5:i;6984=2`e>10<5:i:6984=2`f>10<5:lh6984=2da>10<5:lj6984=2d:>10<5:l36984=2d4>10<5:l=6984=2d6>10<5:l?6984=2:`>10<5:2o6984=2:;>10<5=:55235495g3:m7>52z\655=:<:l1=o;4}r62=?6=:rT>:47>52z\64`=:<:n1=o;4}r623?6=:rT>::7>52z\64f=:<:h1=o;4}r621?6=:rT>:?7>52z\64<=:<:21=o;4}r626?6=:rT><55242595g3:=7>52z\642=:<:<1=o;4}r624?6=:rT><;5242795g3;j7>52z\640=:<:>1=o;4}r63a?6=:rT><95242195g3;h7>52z\646=:<:81=o;4}r63g?6=:rT>;n7>52z\644=:<::1=o;4}r63e?6=:rT><=5243d95g3;47>52z\7b`=:<;n1=o;4}r633?6=:rT?ji5243a95g3;:7>52z\7bf=:<;h1=o;4}r631?6=:rT?jo5243c95g3;87>52z\7bd=:<;31=o;4}r637?6=:rT?j45243:95g3;>7>52z\7b==:<;=1=o;4}r635?6=:rT?j:5243495g3;<7>52z\7b3=:<;?1=o;4}r1eb?6=:rT?j85243695g39=7>52z\653=:<=?1=o;4}r614?6=:rT>=85245695g3:j7>52z\651=:<=91=o;4}r62a?6=:rT>=>5245095g3:h7>52z\657=:<=;1=o;4}r62g?6=:rT>=<5245295g3:n7>52z\64d=:<:31=o;4}r620?6=:rT?jk5243g95g3;57>52z\7b1=:<;91=o;4}r1ea?6=:rT?j>5243095g3nn7>52z\7g2=:5<5sW>h:63;6`85g>{t7}Y0198n:7:8yv2b>3:1>vP;c29>03g=>>1v9k::181[2d:27?:l496:p0`5=838pR9m?;<65e?023ty?i?4?:3y]0g`<5=;3>h02;6s|4ed94?4|V=hh70:9a;41?xu3ll0;6?uQ4c`8910f2?;0q~:kd;296~X3jh168;o5619~w1bd2909wS:m9:?72d<2n2wx8il50;0xZ1d?34>=m7;k;|q7`d<72;qU8o94=54b>0eo47>52z\7f0=:5<5sW>i863;6`86e>{t7}YvP;b09>03g==11v9j<:181[2e827?:l4:7:p0a4=838pR9oi;<65e?313ty?h<4?:3y]0dc<5=;3>h034>=m78i;|q7aa<72;qU8n64=54b>3cno7>52z\7g4=:5<5sW>i:63;6`85=>{t7}Y;3?00:n85231690f=:;9918n5231090f=:;9;18n5231290f=::ol18n522gf90f=::oi1=o:4=3df>1e<5:;=69m4=236>1e<5:;?69m4=230>1e<5:;969m4=232>1e<5:;;69m4=22e>1e<5::n69m4=3c2>4d3348j>7?m4:?1=f<3k2795o4;c:p6fb=83>p1?mk:0`6?84>m3lm70:9c;d`?84>?3lo7p};7b83>7}:=i7>55z?72`<6j<16?5l5fb9>7=`=nj16?5o5fb9>71g=nl1v99m:185820k3?;70:8b;3a1>;450;1x91162<:0199?:0`6?821n3><7p};7083>7}:<>;1=o;4=550>ce53z?73c<2827?;i4;7:?73`<6j<1v99i:181820n3;i963;808eg>{t<>k1<706<5==j65519>03`=9k?0199<:gf8yv20l3:1?v3;7e82f0=:<>o19=524939ba=z{==96=4;{<64=?7e<27?;54>b59>021=9k>0199<:0cf?xu3?<0;6?;t=55;>4d2348?:7:l;<071?2d348?87:l;<077?2d348?>7:l;<075?2d348?<7:l;<00b?2d3488i7:l;<0;a?2d3483h7:l;<0;g?2d3483n7:l;<0;e?2d348357:l;<0;70:;3;l0:n;5242f95g0<5=9h627??l4>b79>06>=9k<019=8:0`5?824>3;i:63;3482f3=:<:>1=o84=510>4d134>8>7?m6:?774<6j?168>>51c48914a28h=70:=d;3a2>;3:j0:n;5243`95g0<5=8j627?>54>b79>071=9k<019<9:0`5?825=3;i:63;2582f3=:<=?1=o84=567>4d134>??7?m6:?707<6j?1689?51c48912728h=70:<9;3a2>;3:l0:n;5243195g0<5=896=m7?l1:p0=6=839p196::0`7?82?<3;i863;8082e`=z{=286=4=cz?7<0<6j<16?>k54b9>76b=m54b9>76d=o54b9>76?=654b9>7a4=54b9>7a7=9k>01>j<:5a896b32=i01>j::5a896b12=i01>j8:5a896b?2=i01>k;:5a896c528h?70=j3;6`?85b=3>h70=j6;6`?85b?3>h70=j8;6`?85b13>h70=ja;6`?85d>3>h70=l5;6`?85d;3>h70=l2;6`?85d<3>h70=l0;6`?85en3;i863;4jl0:n9523ga90f=:;oh18n523gc90f=:;o318n523g:90f=:;o=18n523g490f=:;o?18n523g690f=z{=296=4=5z?7<1<6j<16=h:54b9>5`5=5`7=54b9>5a`=5ab=67e=?l54b9>67g=?754b9>67>=?954b9>670=?;54b9>672=64?=<654b9>641=<854b9>643=<:54b9>645=<<54b9>63g=;754b9>63>=;954b9>630=;;54b9>632=;=54b9>634=;6m?0mh63>e98eg>;6mh0mj6s|1e`94?3|58o?65`0=9ho0q~?ka;291~;6m:0:n8523949bf=:;>:1jn5234f9bf=:;;21ji5rs0g4>5<5s4;n>7;?;<3f70=76;df?85083ln70=:d;df?855?3lo7p}>e883>3}:9l;19=521dc95dc<58oh6kj4=0gf>ce<58l;6kk4=0d1>c`55z?2a4<6j<16?5;5fb9>73`=nj16?8m5fb9>770=nm1v{t9m=1<7;t=0g3>4d2349397hj;<15b?`b349>o7hj;<111?`c3ty:ii4?:3y>5a`==916=hk51`g8yv7c>3:19v3>dg82f0=:;1>1jn5237g9bf=:;b49>7=5=nj16?;j5fb9>70g=nj16??<5fe9~w4`22909w0?kc;73?87a>3;ji6s|1e194?3|58nh6985519>6=c=9k?01?:7:gf8972f2oi01?:l:gd8yv44l3:1?v3=4782f0=::jk1jn522c59bf=z{;><6=4={<071?37348?47?ne:p66e=839p1?:::0`6?84d13lo70b49>6f?=no16>o85fg9~w72e290=w0<;3;73?843k3;ji63=4d8e`>;5=90mo63=538ea>;5==0mj6s|22c94?5|5;>869<5519>61c=9ho0q~<<9;297~;5<;0:n8522b:9bc=::k?1jk5rs36e>5<5s48?=7;?;<064?7fm2wx>>650;1x972628h>707}::=:19=5224095dc53z?105<6j<16>n95fg9>6g2=no1v?;<:181844n3?;70<:5;3ba>{t::<1<7=t=31e>4d2348h:7hk;<0a7?`c3ty99:4?:3y>66c==916>8651`g8yv44=3:1?v3=3d82f0=::j<1jk522c19bc=z{;=86=4={<0;a?373487p}=8583>1}::1n1=o;4=36;>ce<5;>j6kj4=36`>cc52z?1b49~w7>42908w0<7c;3a1>;5{t:>:1<706<5;=265l51c78972d2oi0q~<9f;296~;50h0><63=7982f0=z{;2:6=4:{<0;e?7e=2798h4ic:?115;k50;0x97>>2<:01?98:0`6?xu5090;69u229;95g3<5;?;6kk4=371>ce<5;??6kj4}r05`?6=:r79454:0:?133<6j<1v?9i:18084?03;i963=538e`>;5==0mo6s|27a94?4|5;2<68>4=356>4d23ty9;h4?:2y>6=1=9k?01?;::ga8973?2on0q~<9b;296~;50?0><63=7582f0=z{;=o6=4={<0;2?7e=279954ic:p647=838p1?7p}=1183>7}::;h19=5220;95g37>54z?16g<6j<16=h85fb9>5`>=nm16=ho5fd9~w76a2909w0<=a;73?84603;i96s|23394?5|5;8j6?75519>641=9k?0q~<=0;296~;5:00:n8521dc9bf=z{;:o6=4={<01:4>b49>5`c=nl16=k>5fb9>5c4=nm1v?>m:181845>3?;70<>4;3a1>{t:8n1<7=t=305>4d234;m<7hk;<3e6?`d3ty9673==916><=51c78yv46k3:1?v3=2482f0=:9o91jn521g49ba=z{;:26=4={<010?37348:>7?m5:p64d=838p1?<;:0`6?87a>3lh7p}=6083>7}::>i19=5227c95g352z?13g<28279:44>b49~w73a2909w0<8a;73?84103;i96s|24g94?4|5;=268>4=344>4d23ty99i4?:3y>62>==916>;851c78yv42k3:1>v3=76864>;5><0:n85rs37a>5<5s48<:7;?;<050?7e=2wx>8o50;0x97122<:01?8<:0`6?xu5=00;6?u2266915=::?81=o;4}r3eb?6=:r79=l4:0:?14=<6j<1v{t9on1<706<5;:=6<95519>653=9k?0q~?ib;296~;59?0><63=0582f0=z{8lj6=4={<021?37348;?7?m5:p5c?=838p1??;:428976528h>7p}>f983>7}::8919=5221395g352z?157<28279<=4>b49~w66c290>w03;i963>c28eg>;5j>0mh63;6`874>{t:;n1<706<58i86=85519>5f2=9ho0q~<=f;296~;58<0><63>c482e`=z{;9;6=4={<030?3734;h:7?ne:p667=838p1?><:42894e028kn7p}=3383>7}::9819=521b:95dc52z?144<2827:o44>ad9~w7532909w04=2d`>4d234;hn7hl;<65e?513ty94k4?:3y>63?==916=nl51`g8yv4>83:1>v3=69864>;6kj0:mh5rs3;2>5<5s48=;7;?;<3``?7fm2wx>4<50;0x97012<:01{t:0<1<706<58n96>;:55896642==01>>=:55896662==01>>?:55897`a2==01?hk:55897`d2==01?hj:55896712==01>?::55896732==01>?<:55896752==01>?>:55896772==01>>i:558966b2==0198l:gg897?028kn70b49>740==916>no5fe9>6c4=nj1v?j8:181857;3?;70{t:ok1<7:t=220>4d2349:97;?;<0`=?`d348n47hl;|q1`3<72;q6?=<5519>6``=9ho0q~6=4={<135?37348ni7?ne:p6c>=83>p1>>>:0`6?856;3?;707}:;9:19=522df95dc54z?045<6j<16?<<5519>6f>=nl16>h<5fb9~w7b42909w06cb==916>ho51`g8yv4a<3:18v3=fe82f0=:;9l19=522b49bf=::mi1jn5rs3f3>5<5s48mo7;?;<0f=?7fm2wx>k=50;6x97`d28h>70=?e;73?84d>3ln70b49>746==916>n95fd9>6ac=nj1v?k8:18184a93>270{t:o81<742e348m>7?ne:p6`3=839p1?h?:5;897c02=301?k::0cf?xu5m10;6>u22g2951d<5;o<6h=50;1x97ca2=301?k::5;897c428kn7p}=e783>6}::ll1=9l4=3g6>4de348n:7?ne:p6`7=839p1?kj:5;897c42=301?k>:0cf?xu5m=0;6>u22dg951d<5;o86ih50;1x97cc2=301?k>:5;897ba28kn7p}=e383>6}::ln1=9l4=3g2>4de348n>7?ne:p6ab=839p1?kl:5;897ba2=301?jk:0cf?xu5m90;6>u22da951d<5;nm6il50;1x97ce2=301?jk:5;897be28kn7p}=dd83>6}::lh1=9l4=3fg>4de348oi7?ne:p6a?=839p1?kn:5;897be2=301?j6:0cf?xu5lj0;6>u22dc951d<5;ni6io50;1x97c>28>i70;5lh0:mh5rs22`>5<2s49:97?m5:?2g14id:?1f3?;:0`6?87d=3lh70?l4;dg?84e>3ln70:9a;1g?xu48h0;68u230195g3<58i=6km4=0a6>cb<5;h>6km4=54b>6e55z?057<6j<16=n95fb9>5f0=nm16>o;5fd9>03g=;k1v>>7:18685693;i963>c98eg>;6k>0mh63=b58eg>;3>h08m6s|31594?3|5:;;6=m7=6;|q043<725<4s48j=7;?;<0b6?37348j87?ne:p6d7=838p1?o>:0`6?84f<3lh7p}=9e83>7}::0i19=5228g95dc56z?1=f<6j<16>l>5fd9>6l:5fd9>6<>=nj16>495fg9~w7?a2909w0<6b;73?84f83;ji6s|28;94?0|5;3i6=4?:3y>766=<016??>51`g8yv5513:1>v3<31820g=:;;31=lk4}r171?6=:r78?=4>ad9>76c==91v>?i:180855n3>270==0;6:?856n3;ji6s|33:94?5|5:8m6<:m;<114?7ej278>54>ad9~w6232909w0==f;3ba>;4;m0><6s|3d294?3|5:8;68<4=2g:>4d2349mn7;?;<16`?`c349947hl;|q05`<72:q6??k5489>74`=<016?4gb3ty88>4?:3y>77c=9ho01>=l:428yv5cn3:19v3<1g866>;4m10:n8523gc915=:;349:i7:6;<12`?7fm2wx??850;1x964c28>i70=>e;3af>;4:?0:mh5rs261>5<5s499h7?ne:?07g<282wx?ik50;7x967b2<801>k8:0`6?85a13?;70=:c;dg?855>3lh7p}<1b83>6}:;;i1845230f90<=:;8i1=lk4}r111?6=;r78>n4>4c9>74b=9kh01><::0cf?xu4<80;6?u233a95dc<5:9j68>4}r1g`?6==r78=i4:2:?0a3<6j<16?k65519>70e=no16??;5fb9~w67e2908w0==b;6:?856k3>270=>b;3ba>{t;;>1<7=t=20a>42e349:o7?mb:?061<6il1v>:?:181855j3;ji63<38864>{t;mi1<7;t=23`>04<5:o>6n7hk;<110?`d3ty8=l4?:2y>77g=<016?74g=9ho0q~==3;297~;4:h0:8o5230`95gd<5:886>635<5s49:m7:6;<12=?7fm2wx?io50;7x967f2<801>k<:0`6?85a=3?;70=:a;dg?855:3lh7p}<2383>7}:;8k1=ol4=201>4gb3ty8=54?:3y>74?=<016?<651`g8yv5c13:19v3<18866>;4m;0:n8523g6915=:;<4>ad9~w6?72909:v3<19866>;4l;0?;63;4l80?;63;4l=0?;63;4l?0?;63;4l10?;63;4m;0?;63;4m<0?;63;4m>0?;63;4m00?;63;4k?0?;63;4k:0?;63;4k=0?;63;4jo0?;63;4jl0?;63;4nk0?;63;4n00?;63;4n>0?;63;4n<0?;63;4180:mh5rs214>5<5s498i7?m5:?00d850;0x965c28h>70=;8;de?xu4;<0;6?u232a95g3<5:>36kk4}r100?6=:r78?o4>b49>71>=nj1v>=<:181854i3;i963<498e`>{t;:81<74d2349?m7hl;|q074<72;q6?>651c78962f2ol0q~=;b;297~;4;40k0:mh5rs264>5<5s49?:7;?;<17=?7fm2wx>ol50;0x97e72=301?li:0cf?xu5k<0;6?u22b295gd<5;ij6n>51`g897ea2oi0q~ad9~w7d>2909w0o650;0x97dc2=301?ll:0cf?xu5k;0;6?u22cf95gd<5;i<6om51c`897e128kn7p}=a983>7}::hn184522`a95dc7>52z?1ea<6jk16>o951`g8yv4dj3:1>v3=ae82e`=::jl1jh5rs3c4>5<5s48jo7:6;<0bf?7fm2wx>o?50;0x97gd28hi70{t:h<1<71?<5;kj6ll51c`897d228kn7p}=a483>7}::hk184522`;95dc52z?1ed<6jk16>o:51`g8yv4fm3:1>v3=a882fg=::k91=lk4}r1a3?6=7d6=nj1v>m6:18085c:3;i963;4>l0mj6s|3c794?2|5:n;68>4=2`f>4d23493?7hi;<1:g?`d3ty8o:4?:2y>7a6=9k?01>k=:428960c2ol0q~=m6;290~;4l80><634:0:?02am>:0`6?85?<3lo70=n2;d`?xu4kh0;6>u23e195g3<5:o>68>4=24f>cb54z?0`1<28278o?4>b49>7=3=no16?l:5fb9~w6ee2908w0=k4;3a1>;4m?0><63<6g8eb>{t;kk1<7:t=2f6>06<5:i868i:gf8yv5ej3:18v3;4k=0:n8523949bc=:;h21jn5rs2ag>5<4s49o:7?m5:?0a=<28278;=4if:p7ge=83>p1>j8:42896e228h>70=76;dg?85fi3lh7p}6}:;m=1=o;4=2g:>06<5:=;6kj4}r1a`?6=7g2=nj1v>mi:18085c03;i963;4?80mo6s|3d394?2|5:oj6i7hl;<11=?`d3ty85l4?:3y>7f0==916?o=51`g8yv5>13:1>v3;4j;0:mh5rs2;4>5<5s49h?7;?;<1a4?7fm2wx?4850;0x96e52<:01>oi:0cf?xu4110;6?u23b6915=:;k;1=lk4}r1:0?6=:r78o=4:0:?0ea<6il1v>7<:18185en3?;70=nc;3ba>{t;0?1<706<5:kn67dd=9ho0q~=n9;296~;4j:0?563ad9~w6g02908w0=m2;6:?85f13>270=n7;3ba>{t;hk1<7=t=2`1>42e349j57?mb:?0ed<6il1v>o::18085e93>270=n7;6:?85f=3;ji6s|3`:94?5|5:h:6<:m;<1b3?7ej278m54>ad9~w6g42908w0=m0;6:?85f=3>270=n3;3ba>{t;h<1<7=t=2`3>42e349j97?mb:?0e3<6il1v>o>:18085fn3>270=n3;6:?85f93;ji6s|3`694?5|5:km6<:m;<1b7?7ej278m94>ad9~w6?a2908w0=ne;6:?85f93>270=6f;3ba>{t;h81<7=t=2cf>42e349j=7?mb:?0e7<6il1v>7k:18085fl3>270=6f;6:?85>l3;ji6s|3`294?5|5:ko6<:m;<1:b?7ej278m=4>ad9~w6?e2908w0=nc;6:?85>l3>270=6b;3ba>{t;0o1<7=t=2c`>42e3492h7?mb:?0=`<6il1v>7l:18085fj3;?n63<9c82fg=:;0i1=lk4}r1e6?6=b49>5fe=nj16=nl5fe9>03g=;=1v>h>:18785ai3;i963>ce8eg>;6kj0mh63;6`807>{t;o:1<7:t=2d:>4d234;hi7hl;<3``?`c34>=m7==;|q0ac<72=q6?k651c7894ea2oi010:n8521e29bf=:9jl1ji5247c975=z{:oo6=4;{<1e2?7e=27:h<4ic:?2`5p1>h::0`6?87c:3lh70?k1;dg?821i38n7p}6}:;o>1=o;4=0f1>cb<5=bc9>70g=9ho0q~=;c;296~;4=90:mh5234390<=z{:?=6=4={<165?7ej2789o4>ad9~w62c2909w0=:1;3ba>;4=;0?56s|34594?4|5:?967>52z?011<6il16?5h5fg9~w60?2909w0=93;3af>;4>m0:mh5rs27e>5<5s49=?7?ne:?021<312wx?;750;0x960328hi70=9e;3ba>{t;?:1<74gb349=97:6;|q02d<72;q6?;;51c`8960a28kn7p}<6083>7}:;??1=lk4=245>1?52z?023<6jk16?:>51`g8yv51:3:1>v3<6782e`=:;?=1845rs24`>5<5s49=;7?mb:?034<6il1v>9<:180851?3;ji63<8g8e`>;40h0mj6s|36g94?4|5:=2628kn70=8a;6:?xu4?o0;6?u236c95gd<5:2?652z?03g<6il16?:m5489~w6>62909w0=8c;3af>;40?0:mh5rs25;>5<5s49{t;>>1<74gb3493m7hk;|q0<`<72:q6?5m5519>7=b==916?5h51`g8yv5?k3:18v3<8b82f0=:;1h1ji523829ba=:;0;1ji5rs2::>5<5s49347;?;<1;e?7fm2wx8;j50;06824n3><70:<70:<70:<70:<7;64?824>3><70:<5;64?824<3><70:<3;64?824:3><70:<1;64?82483><70:=f;64?825l3><70:=c;64?825j3><70:=a;64?82513><70:=8;64?825?3><70:=6;64?825=3><70:=4;64?823=3><70:;4;64?823;3><70:;2;64?82393><70:;0;64?82413><70:=e;64?825;3><70:=2;64?84>03;ji6s|47094?4|5=9m68>4=54b>`e==7>52z?77`<2827?:l4ka:p036=838p19=k:428910f2m20q~::f;296~;3;j0><63;6`8g2>{t<06<5=v3;36864>;3>h0o>6s|44;94?4|5=9=68>4=54b>a7>47>52z?770<2827?:l4ja:p001=838p19=;:428910f2m:0q~::6;296~;3;:0><63;6`8`b>{t<06<5=v3;2g864>;3>h0hm6s|44294?4|5=8o68>4=54b>f??j7>52z?76f<2827?:l4l8:p01c=838p19<63;6`8`3>{t<=i1<706<5=54:0:?72dv3;27864>;3>h0h?6s|45:94?4|5=8>68>4=54b>f4?;7>52z?761<2827?:l4j1:p03?=838p19:::428910f2l:0q~:98;296~;3<=0><63;6`8f<>{t06<5=v3;41864>;3>h0oo6s|47194?4|5=9268>4=54b>ad>o7>52z?76`<2827?:l4k7:p007=838p19<<:428910f2ji0q~:;6;296~;3:;0><63;6`8`5>{t;=21<74gb349?57hk;|q00d<72;q6?975fb9>71g=9=i0q~:9b;296~;3>j0:mh5247c9a`=z{:lo6=4:{<1;b?`b3493m7hj;<1:4?7fm27?:l4;8`9>03g=mm1v<;6:181842=3lo70<:4;37g>{t9cb<58l96<:l;|q113<72;q6>865fd9>602=9ho0q~?i4;296~;6n?0mi63>f382e`=zuz?297>52z\6=0=:<=0>585+49495d?52z\6=a=:<=0>5i5+49495dg52z\6<2=:<=0>4:5+49495ddnn7>52z\7g2=:<=0?o:5+494950`n57>52z\7g3=:<=0?o;5+494953gn47>52z\7g0=:<=0?o85+4949523n;7>52z\7g1=:<=0?o95+49495=6n:7>52z\7g6=:<=0?o>5+49495=0n97>52z\7g7=:<=0?o?5+49495=1n?7>52z\7g5=:<=0?o=5+49495=>n>7>52z\7fc=:<=0?nk5+49495=gn=7>52z\7f`=:<=0?nh5+49495=dn<7>52z\7fa=:<=0?ni5+49495=eoj7>52z\7ff=:<=0?nn5+49495=boi7>52z\7fg=:<=0?no5+49495=coh7>52z\7fd=:<=0?nl5+49495=`oo7>52z\7f<=:<=0?n45+49495<6on7>52z\7f==:<=0?n55+49495<7om7>52z\7f2=:<=0?n:5+49495<4o47>52z\7f0=:<=0?n85+49495<5o;7>52z\7f1=:<=0?n95+49495<2o:7>52z\7f6=:<=0?n>5+49495<3o97>52z\7f7=:<=0?n?5+49495<0o87>52z\7f4=:<=0?n<5+49495<1o?7>52z\7f5=:<=0?n=5+49495<>o>7>52z\7ec=:<=0?mk5+49495o=7>52z\7e`=:<=0?mh5+49495o<7>52z\7ea=:<=0?mi5+49495hj7>52z\7ef=:<=0?mn5+49495m>7>52z\7ga=:<=0?oi5+49495m=7>52z\7gf=:<=0?on5+49495m<7>52z\7gg=:<=0?oo5+49495<`nj7>52z\7gd=:<=0?ol5+49495d6ni7>52z\7g<=:<=0?o45+49495d7nh7>52z\7g==:<=0?o55+49495d4no7>52z\7g4=:<=0?o<5+49495d5n87>52z\7f3=:<=0?n;5+49495d2o57>52z\7eg=:<=0?mo5+49495d3hi7>52z\7ed=:<=0?ml5+49495d052z\6e==:<=0>m55+49495d152z\6=6=:<=0>5>5+49495d>52z\655=:<=0>==5+494950d7>52z\64c=:<=0>52z\64`=:<=0>52z\64a=:<=0>52z\64f=:<=0>52z\64g=:<=0>52z\64<=:<=0><45+494953452z\64==:<=0><55+494953552z\642=:<=0><:5+494953252z\643=:<=0><;5+494953352z\640=:<=0><85+494953052z\641=:<=0><95+494953152z\646=:<=0><>5+494953>52z\647=:<=0>52z\644=:<=0><<5+494953d52z\645=:<=0><=5+494953e52z\7b`=:<=0?jh5+494953b52z\7ba=:<=0?ji5+494953c52z\7bf=:<=0?jn5+494953`52z\7bg=:<=0?jo5+494952652z\7bd=:<=0?jl5+494952752z\7b<=:<=0?j45+494952452z\7b==:<=0?j55+494952552z\7b2=:<=0?j:5+494952252z\7b3=:<=0?j;5+494952052z\7b0=:<=0?j85+494952152z\653=:<=0>=;5+494952>52z\650=:<=0>=85+494952?52z\651=:<=0>=95+494952g52z\656=:<=0>=>5+494952d52z\657=:<=0>=?5+494952e52z\654=:<=0>=<5+494952b52z\64d=:<=0>52z\7bc=:<=0?jk5+494952`7>52z\7b1=:<=0?j95+49495=752z\7b6=:<=0?j>5+49495=452z\606=:<=0>8>5+49495=52n7>52z\7=g=:<=0?5o5+49495=252z\67a=:<=0>?i5+49495=352z\62==:<=0>:55+49495=?52zJ7<2=zfhnn6=4={I6;3>{iiml1<7vF;869~jdc52909wE:77:me`5=838pD968;|lba1<72;qC8594}ocf1?6=:rB?4:5rn`g5>5<5sA>3;6saad594?4|@=2<7p`ne983>7}O<1=0qcoj9;296~N30>1vblkn:181M2??2wemhl50;0xL1>03tdjin4?:3yK0=152zJ7<2=zfhon6=4={I6;3>{iill1<7vF;869~jd`52909wE:77:mec5=838pD968;|lbb1<72;qC8594}oce1?6=:rB?4:5rn`d5>5<5sA>3;6saag594?4|@=2<7p`nf983>7}O<1=0qcoi9;296~N30>1vblhn:181M2??2wemkl50;0xL1>03tdjjn4?:3yK0=152zJ7<2=zfhln6=4={I6;3>{iiol1<7vF;869~jg652909wE:77:mf55=838pD968;|la41<72;qC8594}o`31?6=:rB?4:5rnc25>5<5sA>3;6sab1594?4|@=2<7p`m0983>7}O<1=0qcl?9;296~N30>1vbo>n:181M2??2wen=l50;0xL1>03tdi52zJ7<2=zfk:n6=4={I6;3>{ij9l1<7vF;869~jg752909wE:77:mf45=838pD968;|la51<72;qC8594}o`21?6=:rB?4:5rnc35>5<5sA>3;6sab0594?4|@=2<7p`m1983>7}O<1=0qcl>9;296~N30>1vbo?n:181M2??2wen03tdi=n4?:3yK0=152zJ7<2=zfk;n6=4={I6;3>{ij8l1<7vF;869~jg452909wE:77:mf75=838pD968;|la61<72;qC8594}o`11?6=:rB?4:5rnc05>5<5sA>3;6sab3594?4|@=2<7p`m2983>7}O<1=0qcl=9;296~N30>1vbo03tdi>n4?:3yK0=151zJ7<2=zf0{I6;3>{i1?h1<7?tH5:4?xh>>j0;65<6sA>3;6sa96194?7|@=2<7p`67583>4}O<1=0qc785;295~N30>1vb499:182M2??2we5:950;3xL1>03td2;54?:0yK0=151zJ7<2=zf0=j6=4>{I6;3>{i1>h1<7?tH5:4?xh>?j0;65<6sA>3;6sa99194?7|@=2<7p`68583>4}O<1=0qc775;295~N30>1vb469:182M2??2we55950;3xL1>03td2454?:0yK0=151zJ7<2=zf02j6=4>{I6;3>{i11h1<7?tH5:4?xh>0j0;6b290:wE:77:m==`=83;pD968;|l:=5<728qC8594}o;:5?6=9rB?4:5rn8;1>5<6sA>3;6sa98194?7|@=2<7p`69583>4}O<1=0qc765;295~N30>1vb479:182M2??2we54950;3xL1>03td2554?:0yK0=151zJ7<2=zf03j6=4>{I6;3>{i10h1<7?tH5:4?xh>1j0;6l3:1=vF;869~j5<6sA>3;6sa9`194?7|@=2<7p`6a583>4}O<1=0qc7n5;295~N30>1vb4o9:182M2??2we5l950;3xL1>03td2m54?:0yK0=151zJ7<2=zf0kj6=4>{I6;3>{i1hh1<7?tH5:4?xh>ij0;65<6sA>3;6sa9c194?7|@=2<7p`6b583>4}O<1=0qc7m5;295~N30>1vb4l9:182M2??2we5o950;3xL1>03td2n54?:0yK0=151zJ7<2=zf0hj6=4>{I6;3>{i1kh1<7?tH5:4?xh>jj0;65<6sA>3;6sa9b194?7|@=2<7p`6c583>4}O<1=0qc7l5;295~N30>1vb4m9:182M2??2we5n950;3xL1>03td2o54?:0yK0=151zJ7<2=zf0ij6=4>{I6;3>{i1jh1<7?tH5:4?xh>kj0;65<6sA>3;6sa9e194?7|@=2<7p`6d583>4}O<1=0qc7k5;295~N30>1vb4j9:182M2??2we5i950;3xL1>03td2h54?:0yK0=151zJ7<2=zf0nj6=4>{I6;3>{i1mh1<7?tH5:4?xh>lj0;65<6sA>3;6sa9d194?7|@=2<7p`6e583>4}O<1=0qc7j5;295~N30>1vb4k9:182M2??2we5h950;3xL1>03td2i54?:0yK0=151zJ7<2=zf0oj6=4>{I6;3>{i1lh1<7?tH5:4?xh>mj0;65<6sA>3;6sa9g194?7|@=2<7p`6f583>4}O<1=0qc7i5;295~N30>1vb4h9:182M2??2we5k950;3xL1>03td2j54?:0yK0=151zJ7<2=zf0lj6=4>{I6;3>{i1oh1<7?tH5:4?xh>nj0;65<6sA>3;6saa1194?7|@=2<7p`n0583>4}O<1=0qco?5;295~N30>1vbl>9:182M2??2wem=950;3xL1>03tdj<54?:0yK0=151zJ7<2=zfh:j6=4>{I6;3>{ii9h1<7?tH5:4?xhf8j0;65<6sA>3;6saa0194?7|@=2<7p`n1583>4}O<1=0qco>5;295~N30>1vbl?9:182M2??2wem<950;3xL1>03tdj=54?:0yK0=151zJ7<2=zfh;j6=4>{I6;3>{ii8h1<7?tH5:4?xhf9j0;65<6sA>3;6saa3194?7|@=2<7p`n2583>4}O<1=0qco=5;295~N30>1vbl<9:182M2??2wem?950;3xL1>03tdj>54?:0yK0=151zJ7<2=zfh8j6=4>{I6;3>{ii;h1<7?tH5:4?xhf:j0;65<6sA>3;6saa2194?7|@=2<7p`n3583>4}O<1=0qco<5;295~N30>1vbl=9:182M2??2wem>950;3xL1>03tdj?54?:0yK0=151zJ7<2=zfh9j6=4>{I6;3>{ii:h1<7?tH5:4?xhf;j0;65<6sA>3;6saa5194?7|@=2<7p`n4583>4}O<1=0qco;5;295~N30>1vbl:9:182M2??2wem9950;3xL1>03tdj854?:0yK0=151zJ7<2=zfh>j6=4>{I6;3>{ii=h1<7?tH5:4?xhf5<6sA>3;6saa4194?7|@=2<7p`n5583>4}O<1=0qco:5;295~N30>1vbl;9:182M2??2wem8950;3xL1>03tdj954?:0yK0=157>51zJ7<2=zfh?j6=4>{I6;3>{ii5<6sA>3;6saa7194?7|@=2<7p`n6583>4}O<1=0qco95;295~N30>1vbl89:182M2??2wem;950;3xL1>03tdj:54?:0yK0=151zJ7<2=zfh{I6;3>{ii?h1<7?tH5:4?xhf>j0;65<6sA>3;6saa6194?7|@=2<7p`n7583>4}O<1=0qco85;295~N30>1vbl99:182M2??2wem:950;3xL1>03tdj;54?:0yK0=151zJ7<2=zfh=j6=4>{I6;3>{ii>h1<7?tH5:4?xhf?j0;65<6sA>3;6saa9194?7|@=2<7p`n8583>4}O<1=0qco75;295~N30>1vbl69:182M2??2wem5950;3xL1>03tdj454?:0yK0=151zJ7<2=zfh2j6=4>{I6;3>{ii1h1<7?tH5:4?xhf0j0;6b290:wE:77:me=`=83;pD968;|lb=5<728qC8594}oc:5?6=9rB?4:5rn`;1>5<6sA>3;6saa8194?7|@=2<7p`n9583>4}O<1=0qco65;295~N30>1vbl79:182M2??2wem4950;3xL1>03tdj554?:0yK0=151zJ7<2=zfh3j6=4>{I6;3>{ii0h1<7?tH5:4?xhf1j0;6l3:1=vF;869~jd?b290:wE:77:me<`=83;pD968;|lbe5<728qC8594}ocb5?6=9rB?4:5rn`c1>5<6sA>3;6saa`194?7|@=2<7p`na583>4}O<1=0qcon5;295~N30>1vblo9:182M2??2weml950;3xL1>03tdjm54?:0yK0=151zJ7<2=zfhkj6=4>{I6;3>{iihh1<7?tH5:4?xhfij0;65<6sA>3;6saac194?7|@=2<7p`nb583>4}O<1=0qcom5;295~N30>1vbll9:182M2??2wemo950;3xL1>03tdjn54?:0yK0=151zJ7<2=zfhhj6=4>{I6;3>{iikh1<7?tH5:4?xhfjj0;65<6sA>3;6saab194?7|@=2<7p`nc583>4}O<1=0qcol5;295~N30>1vblm9:182M2??2wemn950;3xL1>03tdjo54?:0yK0=151zJ7<2=zfhij6=4>{I6;3>{iijh1<7?tH5:4?xhfkj0;65<6sA>3;6saae194?7|@=2<7p`nd583>4}O<1=0qcok5;295~N30>1vblj9:182M2??2wemi950;3xL1>03tdjh54?:0yK0=151zJ7<2=zfhnj6=4>{I6;3>{iimh1<7?tH5:4?x{zuIJHwnh>:85;ac640tJKNv>r@ARxyEF \ No newline at end of file diff --git a/usrp2/coregen/fifo_xlnx_512x36_2clk_prog_full.v b/usrp2/coregen/fifo_xlnx_512x36_2clk_prog_full.v new file mode 100644 index 000000000..6ec1e3f88 --- /dev/null +++ b/usrp2/coregen/fifo_xlnx_512x36_2clk_prog_full.v @@ -0,0 +1,173 @@ +/******************************************************************************* +* This file is owned and controlled by Xilinx and must be used * +* solely for design, simulation, implementation and creation of * +* design files limited to Xilinx devices or technologies. Use * +* with non-Xilinx devices or technologies is expressly prohibited * +* and immediately terminates your license. * +* * +* XILINX IS PROVIDING THIS DESIGN, CODE, OR INFORMATION "AS IS" * +* SOLELY FOR USE IN DEVELOPING PROGRAMS AND SOLUTIONS FOR * +* XILINX DEVICES. BY PROVIDING THIS DESIGN, CODE, OR INFORMATION * +* AS ONE POSSIBLE IMPLEMENTATION OF THIS FEATURE, APPLICATION * +* OR STANDARD, XILINX IS MAKING NO REPRESENTATION THAT THIS * +* IMPLEMENTATION IS FREE FROM ANY CLAIMS OF INFRINGEMENT, * +* AND YOU ARE RESPONSIBLE FOR OBTAINING ANY RIGHTS YOU MAY REQUIRE * +* FOR YOUR IMPLEMENTATION. XILINX EXPRESSLY DISCLAIMS ANY * +* WARRANTY WHATSOEVER WITH RESPECT TO THE ADEQUACY OF THE * +* IMPLEMENTATION, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OR * +* REPRESENTATIONS THAT THIS IMPLEMENTATION IS FREE FROM CLAIMS OF * +* INFRINGEMENT, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS * +* FOR A PARTICULAR PURPOSE. * +* * +* Xilinx products are not intended for use in life support * +* appliances, devices, or systems. Use in such applications are * +* expressly prohibited. * +* * +* (c) Copyright 1995-2009 Xilinx, Inc. * +* All rights reserved. * +*******************************************************************************/ +// The synthesis directives "translate_off/translate_on" specified below are +// supported by Xilinx, Mentor Graphics and Synplicity synthesis +// tools. Ensure they are correct for your synthesis tool(s). + +// You must compile the wrapper file fifo_xlnx_512x36_2clk_prog_full.v when simulating +// the core, fifo_xlnx_512x36_2clk_prog_full. When compiling the wrapper file, be sure to +// reference the XilinxCoreLib Verilog simulation library. For detailed +// instructions, please refer to the "CORE Generator Help". + +`timescale 1ns/1ps + +module fifo_xlnx_512x36_2clk_prog_full( + rst, + wr_clk, + rd_clk, + din, + wr_en, + rd_en, + dout, + full, + almost_full, + empty, + prog_full); + + +input rst; +input wr_clk; +input rd_clk; +input [35 : 0] din; +input wr_en; +input rd_en; +output [35 : 0] dout; +output full; +output almost_full; +output empty; +output prog_full; + +// synthesis translate_off + + FIFO_GENERATOR_V6_1 #( + .C_COMMON_CLOCK(0), + .C_COUNT_TYPE(0), + .C_DATA_COUNT_WIDTH(9), + .C_DEFAULT_VALUE("BlankString"), + .C_DIN_WIDTH(36), + .C_DOUT_RST_VAL("0"), + .C_DOUT_WIDTH(36), + .C_ENABLE_RLOCS(0), + .C_ENABLE_RST_SYNC(1), + .C_ERROR_INJECTION_TYPE(0), + .C_FAMILY("spartan3"), + .C_FULL_FLAGS_RST_VAL(1), + .C_HAS_ALMOST_EMPTY(0), + .C_HAS_ALMOST_FULL(1), + .C_HAS_BACKUP(0), + .C_HAS_DATA_COUNT(0), + .C_HAS_INT_CLK(0), + .C_HAS_MEMINIT_FILE(0), + .C_HAS_OVERFLOW(0), + .C_HAS_RD_DATA_COUNT(0), + .C_HAS_RD_RST(0), + .C_HAS_RST(1), + .C_HAS_SRST(0), + .C_HAS_UNDERFLOW(0), + .C_HAS_VALID(0), + .C_HAS_WR_ACK(0), + .C_HAS_WR_DATA_COUNT(0), + .C_HAS_WR_RST(0), + .C_IMPLEMENTATION_TYPE(2), + .C_INIT_WR_PNTR_VAL(0), + .C_MEMORY_TYPE(1), + .C_MIF_FILE_NAME("BlankString"), + .C_MSGON_VAL(1), + .C_OPTIMIZATION_MODE(0), + .C_OVERFLOW_LOW(0), + .C_PRELOAD_LATENCY(0), + .C_PRELOAD_REGS(1), + .C_PRIM_FIFO_TYPE("512x36"), + .C_PROG_EMPTY_THRESH_ASSERT_VAL(4), + .C_PROG_EMPTY_THRESH_NEGATE_VAL(5), + .C_PROG_EMPTY_TYPE(0), + .C_PROG_FULL_THRESH_ASSERT_VAL(500), + .C_PROG_FULL_THRESH_NEGATE_VAL(499), + .C_PROG_FULL_TYPE(1), + .C_RD_DATA_COUNT_WIDTH(9), + .C_RD_DEPTH(512), + .C_RD_FREQ(1), + .C_RD_PNTR_WIDTH(9), + .C_UNDERFLOW_LOW(0), + .C_USE_DOUT_RST(1), + .C_USE_ECC(0), + .C_USE_EMBEDDED_REG(0), + .C_USE_FIFO16_FLAGS(0), + .C_USE_FWFT_DATA_COUNT(0), + .C_VALID_LOW(0), + .C_WR_ACK_LOW(0), + .C_WR_DATA_COUNT_WIDTH(9), + .C_WR_DEPTH(512), + .C_WR_FREQ(1), + .C_WR_PNTR_WIDTH(9), + .C_WR_RESPONSE_LATENCY(1)) + inst ( + .RST(rst), + .WR_CLK(wr_clk), + .RD_CLK(rd_clk), + .DIN(din), + .WR_EN(wr_en), + .RD_EN(rd_en), + .DOUT(dout), + .FULL(full), + .ALMOST_FULL(almost_full), + .EMPTY(empty), + .PROG_FULL(prog_full), + .BACKUP(), + .BACKUP_MARKER(), + .CLK(), + .SRST(), + .WR_RST(), + .RD_RST(), + .PROG_EMPTY_THRESH(), + .PROG_EMPTY_THRESH_ASSERT(), + .PROG_EMPTY_THRESH_NEGATE(), + .PROG_FULL_THRESH(), + .PROG_FULL_THRESH_ASSERT(), + .PROG_FULL_THRESH_NEGATE(), + .INT_CLK(), + .INJECTDBITERR(), + .INJECTSBITERR(), + .WR_ACK(), + .OVERFLOW(), + .ALMOST_EMPTY(), + .VALID(), + .UNDERFLOW(), + .DATA_COUNT(), + .RD_DATA_COUNT(), + .WR_DATA_COUNT(), + .PROG_EMPTY(), + .SBITERR(), + .DBITERR()); + + +// synthesis translate_on + +endmodule + diff --git a/usrp2/coregen/fifo_xlnx_512x36_2clk_prog_full.veo b/usrp2/coregen/fifo_xlnx_512x36_2clk_prog_full.veo new file mode 100644 index 000000000..64e6769d6 --- /dev/null +++ b/usrp2/coregen/fifo_xlnx_512x36_2clk_prog_full.veo @@ -0,0 +1,53 @@ +/******************************************************************************* +* This file is owned and controlled by Xilinx and must be used * +* solely for design, simulation, implementation and creation of * +* design files limited to Xilinx devices or technologies. Use * +* with non-Xilinx devices or technologies is expressly prohibited * +* and immediately terminates your license. * +* * +* XILINX IS PROVIDING THIS DESIGN, CODE, OR INFORMATION "AS IS" * +* SOLELY FOR USE IN DEVELOPING PROGRAMS AND SOLUTIONS FOR * +* XILINX DEVICES. BY PROVIDING THIS DESIGN, CODE, OR INFORMATION * +* AS ONE POSSIBLE IMPLEMENTATION OF THIS FEATURE, APPLICATION * +* OR STANDARD, XILINX IS MAKING NO REPRESENTATION THAT THIS * +* IMPLEMENTATION IS FREE FROM ANY CLAIMS OF INFRINGEMENT, * +* AND YOU ARE RESPONSIBLE FOR OBTAINING ANY RIGHTS YOU MAY REQUIRE * +* FOR YOUR IMPLEMENTATION. XILINX EXPRESSLY DISCLAIMS ANY * +* WARRANTY WHATSOEVER WITH RESPECT TO THE ADEQUACY OF THE * +* IMPLEMENTATION, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OR * +* REPRESENTATIONS THAT THIS IMPLEMENTATION IS FREE FROM CLAIMS OF * +* INFRINGEMENT, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS * +* FOR A PARTICULAR PURPOSE. * +* * +* Xilinx products are not intended for use in life support * +* appliances, devices, or systems. Use in such applications are * +* expressly prohibited. * +* * +* (c) Copyright 1995-2009 Xilinx, Inc. * +* All rights reserved. * +*******************************************************************************/ +// The following must be inserted into your Verilog file for this +// core to be instantiated. Change the instance name and port connections +// (in parentheses) to your own signal names. + +//----------- Begin Cut here for INSTANTIATION Template ---// INST_TAG +fifo_xlnx_512x36_2clk_prog_full YourInstanceName ( + .rst(rst), + .wr_clk(wr_clk), + .rd_clk(rd_clk), + .din(din), // Bus [35 : 0] + .wr_en(wr_en), + .rd_en(rd_en), + .dout(dout), // Bus [35 : 0] + .full(full), + .almost_full(almost_full), + .empty(empty), + .prog_full(prog_full)); + +// INST_TAG_END ------ End INSTANTIATION Template --------- + +// You must compile the wrapper file fifo_xlnx_512x36_2clk_prog_full.v when simulating +// the core, fifo_xlnx_512x36_2clk_prog_full. When compiling the wrapper file, be sure to +// reference the XilinxCoreLib Verilog simulation library. For detailed +// instructions, please refer to the "CORE Generator Help". + diff --git a/usrp2/coregen/fifo_xlnx_512x36_2clk_prog_full.xco b/usrp2/coregen/fifo_xlnx_512x36_2clk_prog_full.xco new file mode 100644 index 000000000..f99c3c6fb --- /dev/null +++ b/usrp2/coregen/fifo_xlnx_512x36_2clk_prog_full.xco @@ -0,0 +1,84 @@ +############################################################## +# +# Xilinx Core Generator version 12.2 +# Date: Thu Nov 11 17:27:10 2010 +# +############################################################## +# +# This file contains the customisation parameters for a +# Xilinx CORE Generator IP GUI. It is strongly recommended +# that you do not manually alter this file as it may cause +# unexpected and unsupported behavior. +# +############################################################## +# +# BEGIN Project Options +SET addpads = false +SET asysymbol = false +SET busformat = BusFormatAngleBracketNotRipped +SET createndf = false +SET designentry = Verilog +SET device = xc3s2000 +SET devicefamily = spartan3 +SET flowvendor = Other +SET formalverification = false +SET foundationsym = false +SET implementationfiletype = Ngc +SET package = fg456 +SET removerpms = false +SET simulationfiles = Behavioral +SET speedgrade = -5 +SET verilogsim = true +SET vhdlsim = false +# END Project Options +# BEGIN Select +SELECT Fifo_Generator family Xilinx,_Inc. 6.1 +# END Select +# BEGIN Parameters +CSET almost_empty_flag=false +CSET almost_full_flag=true +CSET component_name=fifo_xlnx_512x36_2clk_prog_full +CSET data_count=false +CSET data_count_width=9 +CSET disable_timing_violations=false +CSET dout_reset_value=0 +CSET empty_threshold_assert_value=4 +CSET empty_threshold_negate_value=5 +CSET enable_ecc=false +CSET enable_int_clk=false +CSET enable_reset_synchronization=true +CSET fifo_implementation=Independent_Clocks_Block_RAM +CSET full_flags_reset_value=1 +CSET full_threshold_assert_value=500 +CSET full_threshold_negate_value=499 +CSET inject_dbit_error=false +CSET inject_sbit_error=false +CSET input_data_width=36 +CSET input_depth=512 +CSET output_data_width=36 +CSET output_depth=512 +CSET overflow_flag=false +CSET overflow_sense=Active_High +CSET performance_options=First_Word_Fall_Through +CSET programmable_empty_type=No_Programmable_Empty_Threshold +CSET programmable_full_type=Single_Programmable_Full_Threshold_Constant +CSET read_clock_frequency=1 +CSET read_data_count=false +CSET read_data_count_width=9 +CSET reset_pin=true +CSET reset_type=Asynchronous_Reset +CSET underflow_flag=false +CSET underflow_sense=Active_High +CSET use_dout_reset=true +CSET use_embedded_registers=false +CSET use_extra_logic=false +CSET valid_flag=false +CSET valid_sense=Active_High +CSET write_acknowledge_flag=false +CSET write_acknowledge_sense=Active_High +CSET write_clock_frequency=1 +CSET write_data_count=false +CSET write_data_count_width=9 +# END Parameters +GENERATE +# CRC: 6b9f6232 diff --git a/usrp2/coregen/fifo_xlnx_512x36_2clk_prog_full.xise b/usrp2/coregen/fifo_xlnx_512x36_2clk_prog_full.xise new file mode 100644 index 000000000..8bf460ac7 --- /dev/null +++ b/usrp2/coregen/fifo_xlnx_512x36_2clk_prog_full.xise @@ -0,0 +1,72 @@ + + + +

+ + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/usrp2/coregen/fifo_xlnx_512x36_2clk_prog_full_flist.txt b/usrp2/coregen/fifo_xlnx_512x36_2clk_prog_full_flist.txt new file mode 100644 index 000000000..2eb837a3f --- /dev/null +++ b/usrp2/coregen/fifo_xlnx_512x36_2clk_prog_full_flist.txt @@ -0,0 +1,12 @@ +# Output products list for +_xmsgs/pn_parser.xmsgs +fifo_generator_ug175.pdf +fifo_xlnx_512x36_2clk_prog_full.gise +fifo_xlnx_512x36_2clk_prog_full.ngc +fifo_xlnx_512x36_2clk_prog_full.v +fifo_xlnx_512x36_2clk_prog_full.veo +fifo_xlnx_512x36_2clk_prog_full.xco +fifo_xlnx_512x36_2clk_prog_full.xise +fifo_xlnx_512x36_2clk_prog_full_flist.txt +fifo_xlnx_512x36_2clk_prog_full_readme.txt +fifo_xlnx_512x36_2clk_prog_full_xmdf.tcl diff --git a/usrp2/coregen/fifo_xlnx_512x36_2clk_prog_full_readme.txt b/usrp2/coregen/fifo_xlnx_512x36_2clk_prog_full_readme.txt new file mode 100644 index 000000000..33d50a91d --- /dev/null +++ b/usrp2/coregen/fifo_xlnx_512x36_2clk_prog_full_readme.txt @@ -0,0 +1,47 @@ +The following files were generated for 'fifo_xlnx_512x36_2clk_prog_full' in directory +/home/ianb/ettus/sram_fifo/fpgapriv/usrp2/coregen/ + +fifo_generator_ug175.pdf: + Please see the core data sheet. + +fifo_xlnx_512x36_2clk_prog_full.gise: + ISE Project Navigator support file. This is a generated file and should + not be edited directly. + +fifo_xlnx_512x36_2clk_prog_full.ngc: + Binary Xilinx implementation netlist file containing the information + required to implement the module in a Xilinx (R) FPGA. + +fifo_xlnx_512x36_2clk_prog_full.v: + Verilog wrapper file provided to support functional simulation. + This file contains simulation model customization data that is + passed to a parameterized simulation model for the core. + +fifo_xlnx_512x36_2clk_prog_full.veo: + VEO template file containing code that can be used as a model for + instantiating a CORE Generator module in a Verilog design. + +fifo_xlnx_512x36_2clk_prog_full.xco: + CORE Generator input file containing the parameters used to + regenerate a core. + +fifo_xlnx_512x36_2clk_prog_full.xise: + ISE Project Navigator support file. This is a generated file and should + not be edited directly. + +fifo_xlnx_512x36_2clk_prog_full_readme.txt: + Text file indicating the files generated and how they are used. + +fifo_xlnx_512x36_2clk_prog_full_xmdf.tcl: + ISE Project Navigator interface file. ISE uses this file to determine + how the files output by CORE Generator for the core can be integrated + into your ISE project. + +fifo_xlnx_512x36_2clk_prog_full_flist.txt: + Text file listing all of the output files produced when a customized + core was generated in the CORE Generator. + + +Please see the Xilinx CORE Generator online help for further details on +generated files and how to use them. + diff --git a/usrp2/coregen/fifo_xlnx_512x36_2clk_prog_full_xmdf.tcl b/usrp2/coregen/fifo_xlnx_512x36_2clk_prog_full_xmdf.tcl new file mode 100644 index 000000000..e1aecccff --- /dev/null +++ b/usrp2/coregen/fifo_xlnx_512x36_2clk_prog_full_xmdf.tcl @@ -0,0 +1,68 @@ +# The package naming convention is _xmdf +package provide fifo_xlnx_512x36_2clk_prog_full_xmdf 1.0 + +# This includes some utilities that support common XMDF operations +package require utilities_xmdf + +# Define a namespace for this package. The name of the name space +# is _xmdf +namespace eval ::fifo_xlnx_512x36_2clk_prog_full_xmdf { +# Use this to define any statics +} + +# Function called by client to rebuild the params and port arrays +# Optional when the use context does not require the param or ports +# arrays to be available. +proc ::fifo_xlnx_512x36_2clk_prog_full_xmdf::xmdfInit { instance } { +# Variable containg name of library into which module is compiled +# Recommendation: +# Required +utilities_xmdf::xmdfSetData $instance Module Attributes Name fifo_xlnx_512x36_2clk_prog_full +} +# ::fifo_xlnx_512x36_2clk_prog_full_xmdf::xmdfInit + +# Function called by client to fill in all the xmdf* data variables +# based on the current settings of the parameters +proc ::fifo_xlnx_512x36_2clk_prog_full_xmdf::xmdfApplyParams { instance } { + +set fcount 0 +# Array containing libraries that are assumed to exist +# Examples include unisim and xilinxcorelib +# Optional +# In this example, we assume that the unisim library will +# be magically +# available to the simulation and synthesis tool +utilities_xmdf::xmdfSetData $instance FileSet $fcount type logical_library +utilities_xmdf::xmdfSetData $instance FileSet $fcount logical_library unisim +incr fcount + +utilities_xmdf::xmdfSetData $instance FileSet $fcount relative_path fifo_generator_ug175.pdf +utilities_xmdf::xmdfSetData $instance FileSet $fcount type AnyView +incr fcount + +utilities_xmdf::xmdfSetData $instance FileSet $fcount relative_path fifo_xlnx_512x36_2clk_prog_full.ngc +utilities_xmdf::xmdfSetData $instance FileSet $fcount type ngc +incr fcount + +utilities_xmdf::xmdfSetData $instance FileSet $fcount relative_path fifo_xlnx_512x36_2clk_prog_full.v +utilities_xmdf::xmdfSetData $instance FileSet $fcount type verilog +incr fcount + +utilities_xmdf::xmdfSetData $instance FileSet $fcount relative_path fifo_xlnx_512x36_2clk_prog_full.veo +utilities_xmdf::xmdfSetData $instance FileSet $fcount type verilog_template +incr fcount + +utilities_xmdf::xmdfSetData $instance FileSet $fcount relative_path fifo_xlnx_512x36_2clk_prog_full.xco +utilities_xmdf::xmdfSetData $instance FileSet $fcount type coregen_ip +incr fcount + +utilities_xmdf::xmdfSetData $instance FileSet $fcount relative_path fifo_xlnx_512x36_2clk_prog_full_xmdf.tcl +utilities_xmdf::xmdfSetData $instance FileSet $fcount type AnyView +incr fcount + +utilities_xmdf::xmdfSetData $instance FileSet $fcount associated_module fifo_xlnx_512x36_2clk_prog_full +incr fcount + +} + +# ::gen_comp_name_xmdf::xmdfApplyParams diff --git a/usrp2/extramfifo/ext_fifo.v b/usrp2/extramfifo/ext_fifo.v index 44229f846..daf7140bc 100644 --- a/usrp2/extramfifo/ext_fifo.v +++ b/usrp2/extramfifo/ext_fifo.v @@ -132,17 +132,17 @@ module ext_fifo .empty(empty1)); // FIFO buffers data read from external FIFO into DSP clk domain and to TX DSP. - fifo_xlnx_32x36_2clk fifo_xlnx_32x36_2clk_i2 ( - .rst(rst), - .wr_clk(ext_clk), - .rd_clk(int_clk), - .din(read_data), // Bus [35 : 0] - .wr_en(write_output_fifo), - .rd_en(dst_rdy_i), - .dout(dataout), // Bus [35 : 0] - .full(full2), - .empty(empty2), - .prog_full(almost_full2)); + fifo_xlnx_512x36_2clk_prog_full fifo_xlnx_32x36_2clk_prog_full_i1 ( + .rst(rst), + .wr_clk(ext_clk), + .rd_clk(int_clk), + .din(read_data), // Bus [35 : 0] + .wr_en(write_output_fifo), + .rd_en(dst_rdy_i), + .dout(dataout), // Bus [35 : 0] + .full(full2), + .empty(empty2), + .prog_full(almost_full2)); end endgenerate -- cgit v1.2.3 From 08ace12b12136e002bf283b6ca7af20bdccaab57 Mon Sep 17 00:00:00 2001 From: Ian Buckley Date: Thu, 11 Nov 2010 10:12:43 -0800 Subject: Removed 'ifdef for second DCM that was a deign idea for external SRAM on u2plus. Hardcoded -90 degree clcok from first DCM as final solution --- usrp2/top/u2plus/u2plus.v | 53 ++++------------------------------------------- 1 file changed, 4 insertions(+), 49 deletions(-) diff --git a/usrp2/top/u2plus/u2plus.v b/usrp2/top/u2plus/u2plus.v index d4a681731..270655a8d 100644 --- a/usrp2/top/u2plus/u2plus.v +++ b/usrp2/top/u2plus/u2plus.v @@ -217,55 +217,11 @@ module u2plus BUFG dspclk_BUFG (.I(dcm_out), .O(dsp_clk)); BUFG wbclk_BUFG (.I(clk_div), .O(wb_clk)); - -`ifdef DCM_FOR_RAMCLK - wire RAM_CLK_buf; - wire clk100_ext; - wire clk100_ext_buf; - - DCM DCM_INST1 (.CLKFB(RAM_CLK_buf), - .CLKIN(clk_fpga), - .DSSEN(1'b0), - .PSCLK(1'b0), - .PSEN(1'b0), - .PSINCDEC(1'b0), - .RST(1'b0), - .CLK0(clk100_ext) ); - defparam DCM_INST1.CLK_FEEDBACK = "1X"; - defparam DCM_INST1.CLKDV_DIVIDE = 2.0; - defparam DCM_INST1.CLKFX_DIVIDE = 1; - defparam DCM_INST1.CLKFX_MULTIPLY = 4; - defparam DCM_INST1.CLKIN_DIVIDE_BY_2 = "FALSE"; - defparam DCM_INST1.CLKIN_PERIOD = 10.000; - defparam DCM_INST1.CLKOUT_PHASE_SHIFT = "FIXED"; - defparam DCM_INST1.DESKEW_ADJUST = "SYSTEM_SYNCHRONOUS"; - defparam DCM_INST1.DFS_FREQUENCY_MODE = "LOW"; - defparam DCM_INST1.DLL_FREQUENCY_MODE = "LOW"; - defparam DCM_INST1.DUTY_CYCLE_CORRECTION = "TRUE"; - defparam DCM_INST1.FACTORY_JF = 16'h8080; - defparam DCM_INST1.PHASE_SHIFT = -64; - defparam DCM_INST1.STARTUP_WAIT = "FALSE"; - - IBUFG RAM_CLK_buf_i1 (.I(RAM_CLK), - .O(RAM_CLK_buf)); - - BUFG clk100_ext_buf_i1 (.I(clk100_ext), - .O(clk100_ext_buf)); - + + // Create clock for external SRAM thats -90degree phase to DSPCLK (i.e) 2nS earlier at 100MHz. + BUFG clk270_100_buf_i1 (.I(clk270_100), + .O(clk270_100_buf)); OFDDRRSE RAM_CLK_i1 (.Q(RAM_CLK), - .C0(clk100_ext_buf), - .C1(~clk100_ext_buf), - .CE(1'b1), - .D0(1'b1), - .D1(1'b0), - .R(1'b0), - .S(1'b0)); - -`else // !`ifdef DCM_FOR_RAMCLK - // assign RAM_CLK = dcm_out; - BUFG clk270_100_buf_i1 (.I(clk270_100), - .O(clk270_100_buf)); - OFDDRRSE RAM_CLK_i1 (.Q(RAM_CLK), .C0(clk270_100_buf), .C1(~clk270_100_buf), .CE(1'b1), @@ -273,7 +229,6 @@ module u2plus .D1(1'b0), .R(1'b0), .S(1'b0)); -`endif // I2C -- Don't use external transistors for open drain, the FPGA implements this IOBUF scl_pin(.O(scl_pad_i), .IO(SCL), .I(scl_pad_o), .T(scl_pad_oen_o)); -- cgit v1.2.3 From 6ead587793fc9ddeb3daff8725fe8c95bf6abfe7 Mon Sep 17 00:00:00 2001 From: Matt Ettus Date: Thu, 11 Nov 2010 13:32:08 -0800 Subject: these got dropped during the rebase --- usrp2/coregen/fifo_xlnx_512x36_2clk_18to36.ngc | 2 +- usrp2/coregen/fifo_xlnx_512x36_2clk_36to18.ngc | 2 +- usrp2/coregen/fifo_xlnx_512x36_2clk_36to18.v | 56 ++++++++++++++------------ usrp2/coregen/fifo_xlnx_512x36_2clk_36to18.xco | 8 ++-- 4 files changed, 37 insertions(+), 31 deletions(-) diff --git a/usrp2/coregen/fifo_xlnx_512x36_2clk_18to36.ngc b/usrp2/coregen/fifo_xlnx_512x36_2clk_18to36.ngc index 608a5f2fb..d9277b0c3 100644 --- a/usrp2/coregen/fifo_xlnx_512x36_2clk_18to36.ngc +++ b/usrp2/coregen/fifo_xlnx_512x36_2clk_18to36.ngc @@ -1,3 +1,3 @@ XILINX-XDB 0.1 STUB 0.1 ASCII XILINX-XDM V1.6e -$45640<,[o}e~g`n;"2*726&;$:,)?40493456712:;<=>?01274>6789:;<=>?0123456789:;<=>?0123456789:;<=>?0123456789:;<=>?0123454<80;0=>5>.130?46=AGZ^X7OKDSC?=?699l1:<7GAPTV9twi`Wog`Rzgrdqk8<<76;?0==4FNQWW>uthoVl~`aQ{hsgplZgt{lx044?>378553CE\XZ5DHC?50<76890=;4@UURVP?BHI5;>6=0>2:3;>LHW]]0oec2>7;2=5>433;98?0086?IR\Y__6IA_A=394;753:81EC^ZT;FJF956294:?6==:NWWTPR=LFH7?<4?>0687301?69l29x>=>?ff662(363=>08=HI1097>LHW]]0OE]L33;2=57=32F__\XZ5DNRA86<7681=>6864:4:=32<09:;866J8@38=1=>8939748;;845=44<13CE\XZ5AEFQF9>=87;n744FNQWW>uthoVof|ywPtipfwm:?29499675IORVP?vugnUna}zv_ujqavnXizyn~y27:1<11>?=AGZ^X7~}of]fiur~W}byi~fPndebp`:?294:n675OTVSQQ55NDEPB858?3HNO^L2>>99B@ATF4;437LJKR@>0:==FLMXJ0907;@FGVD:2611JHI\N<7<;?DBCZH6<255NDEPB8=8f3HNO^L26:1<;?DBCZH62255NDEPA858?3HNO^O2>>99B@ATE4;437LJKRC>0:==FLMXI0907;@FGVG:2611JHI\M<7<;?DBCZK6<2l5NDEPA8=<7611JHI\M<9<0?DJK12KXUCMPRDE0?GS502H^_RGAFN38G7=DM880OEKLK^NJG@HTMV^R\H<4CH68GIMF<2IGGO=4CMP:?FIJE@^_II?;;BMQAZABFLXJXDAA_HLEK2=DZLK_II?4D39GG7=CA?1OEL2?>69GMD:687=0HDO310<4?AOF4885;6JFA=30:2=CAH6:8374DHC?50<76>1OEL2>5?48@LG;97<0HDO32?48@LG;;7<0HDO34?48@LG;=7<0HDO36?48@LG;?7<0HDO38?48@LG;17<0HDL30?58@LD;994<7IGM<03=3>BNJ5;92:5KIC>27;169GMG:6?7=0HDL319<4?AOE4835:6JFB=3=3>BNJ58;2:5KIC>15;1?08;EKA8759?2NBN1<;>69GMG:5=7=0HDL327<4?AOE4;=5;6JFB=0;:2=CAK695384DH@?6;14=7IGM<9<5?AOE404<7IG_A=2==>BNXH6:6=08;EKSE979?2NB\O2?>69GMUD;97=0HD^M<3<:?AOWJ591<394DHRA86813MEJ0=08;EMB8469?2NDM1?>>69GKD:6:7=0HBO312<4?AIF48>556J@A=36>5803MEJ0<;16:FLE979>2NDM1<16:FLE959>2NDM1:16:FLE939>2NDM1816:FLE919>2NDM1616:FLE9?9?2NDMR\JG79GKG:76>1OCO2>0?58@JD;984<7IAM<00=3>BHJ5;82:5KOC>20;169GKG:607=0HBL318<5?AIE484<7IAM<32=3>BHJ58:2:5KOC>16;1>08;EMA8729?2NDN1<:>69GKG:5>7=0HBL326<4?AIE4;25;6J@B=0::3=CGK692:5KOC>04;?69GKG:497<0HBL33?48@JD;<7<0HBL35?48@JD;>7<0HBL37?48@JD;07<0HBL39?58@JDXZLM<7IA_A=2==>BHXH6:6=08;EMSE979?2ND\O2?>69GKUD;97=0HB^M<3<:?AIWJ591<394DNRA86843LDJ?6KABc9FJZCDKVXNMIm4EO]FGFYPZ@^N>6H=2:D;1>@FDZO97KJ<;GF@0>@CKL90JI^;;GFSA1=AL[O?7KH7009D7>AIL81B>6G?2:K26>O5:2C846GAIUR\45>>8:KMMQVX8;20ECG[P^20<>OIA]ZT<964IOKWTZ6202CEEY^P07:8MKOSXV:<56GAIUQWEQC03@DBXR>?7:KMMQY79>1BBDZP0358MKOSW99<7D@FT^273>OIA]U;9:5FNHV\4311BBDZP1358MKOSW89<7D@FT^373>OIA]U:9:5FNHV\531969JJLRX9H=0ECG[_0@4?LHN\V;H;6GAIU]2@2=NF@^T=H94IOKW[4@03@DBXR1BBDZP2358MKOSW;9<7D@FT^073>OIA]U99:5FNHV\631H94IOKW[7@03@DBXR=?7:KMMQY49>1BBDZP3358MKOSW:9<7D@FT^173>OIA]U89:5FNHV\73198;HLJPZ5??2CEEYQ<969JJLRX;H=0ECG[_2@4?LHN\V9H;6GAIU]0@2=NF@^T?H94IOKW[6@13@DBXRO9;HLJPZD43@D]>6BF2:NL2>JHIMOO;6B@GHABH1=K]];?7A[[259OQQ533E__8;5CUU6\@0=J[NEE96CZXB[`?Hgmg{\n~~g`nb9Nmkiu^lxxeb`<;O226>H6<2D:<=:4N0220>H68;>0B<><4:L241286@>0768J460<2D:<5:4N02:7>H69=1E=<>;;O3251=I988?7C?>359M54233G;:995A1047?K76?=1E=<6;;O32=6=I9;>0B<2268J443<2D:>8:4N0050>H6:>>0B<<73:L271=I9:;87C?;3:L216=I9?>0B<8;3:L236=I9190B<7=;O00?K47;2D9=>5A2318J7543G8??6@=529M635H>;:1E59=4N870?K?1;2D2;>5A9918JIL92Z?7]O]T`9SMKYE]ZCOTo5_IO]AQVHFEL90\_K>;P38V`=UIDH::R]>8^Q02d=UMHNTJD\\Tb9QADBX_@N_DROl;SGB@ZQNL]BTN<5\129PMHYDGEFB_DAA_BJFGN0<[F_YOH94SSTBHZG03ZX]MAQM4:QPVD2<[ZXI86ZVPD11?P6(o{l%~k!hcy,`hn~(EqeySjPpovq[beXpfx;<=>PRdqvhq74:2_;#j|i.sd,cf~)keas#@v`r^pg[uhszVmhSua}0122[Wct}e~:??5Z0.eqb+ta'nis"nbdx.O{kwYulVzexQhc^zlv567:VXnxb{1208Q5)`zo$yj"ilx/aoo})JpfxT~iQnup\cfYg{:;<>Q]erwop4553\:$kh!rg-dg}(ddbr$Aua}_sf\tkruWniTtb|?016\V`urd};8>6[?/fpe*w`(ojr%oaew/LzlvZtcWyd~Ril_ymq4562W[oxyaz>339V4*aun'xm#jmw.bnh|*Kg{UyhR~ats]dgZ~hz9:;:R\jstnw564<]9%l~k }f.e`|+ekcq%Ftb|Pre]sjqtXojUsc>?06]Qavsk|8997X> gsd-vc)`kq$h`fv Mymq[rtXxg~ySjmPxnp3456XZly~`y?<2:W3+bta&{l$knv!cmi{+H~hzV}yS}`{r^e`[}iu89::S_k|umv277=R8&myj#|i/fa{*fjlp&GscQxr^rmpwY`kVrd~=>?2^Pfwpjs9:80Y=!hrg,qb*adp'iggu!Bxnp\swYwf}xTknQwos2346YUmzgx<==;T2,cw`)zo%lou lljz,I}iuW~xT|cz}_fa\|jt789>T^h}zlu306>S7'nxm"h gbz-gim'Drd~Ry}_qlwvZadWqey<=>:_Sgpqir6;;1^<"i}f/pe+be&jf`t"Cwos]tvZvi|{UloRv`r1232ZTb{|f=><4U1-dvc(un&mht#mcky-N|jtX{U{by|Pgb]{kw678>UYi~{ct011?P6(o{l%~k!hcy,`hn~(EqeySz|Ppovq[beXpfx;<=6PRdqvhq7592_;#j|i.sd,cf~)keas#jPpovq[goi4949=6[?/fpe*w`(ojr%oaew/sf\tkruWkce0<0=1:W3+bta&{l$knv!cmi{+wbXxg~ySoga<3<15>S7'nxm"h gbz-gim'{nT|cz}_ckm868592_;#j|i.sd,cf~)keas#jPpovq[goi4=49=6[?/fpe*w`(ojr%oaew/sf\tkruWkce080=1:W3+bta&{l$knv!cmi{+wbXxg~ySoga<7<15>S7'nxm"h gbz-gim'{nT|cz}_ckm828592_;#j|i.sd,cf~)keas#jPpovq[goi4149<6[?/fpe*w`(ojr%oaew/sf\tkruWkceS= gsd-vc)`kq$h`fv re]sjqtXj`dT9?>4U1-dvc(un&mht#mcky-q`Zvi|{UiecQ9219V4*aun'xm#jmw.bnh|*tcWyd~Rlfn^514>S7'nxm"h gbz-gim'{nT|cz}_ckm[=413\:$kh!rg-dg}(ddbr$~iQnup\flhXpfx;<=>=7:W3+bta&{l$knv!cmi{+wbXxg~ySoga_ymq45679;<0Y=!hrg,qb*adp'iggu!}d^rmpwYeagUsc>?0004?P6(o{l%~k!hcy,`hn~(zmU{by|Pbhl\|jt789;:>;5Z0.eqb+ta'nis"nbdx.pg[uhszVhbbRv`r123671<]9%l~k }f.e`|+ekcq%yhR~ats]amkYg{:;1^<"i}f/pe+be&jf`t"|k_qlwvZdnfVrd~=>?3305?P6(o{l%~k!hcy,`hn~(zmU{by|Pbhl\|jt789>9;6[?/fpe*w`(ojr%oaew/sf\tkruWkceSua}0127570<]9%l~k }f.e`|+ekcq%yhR~ats]amkYg{:;<8<8;T2,cw`)zo%lou lljz,vaYwf}xTnd`Pxnp34536:?1^<"i}f/pe+be&jf`t"|k_qlwvZdnfVrd~=>?63:8Q5)`zo$yj"ilx/aoo})ulVzexQmio]{kw678?;:>:5Z0.eqb+ta'nis"nbdx.pg[uhszVhbbRv`r123274e3\:$kh!rg-dg}(ddbr$~iQnup\flhXpfx;<=8Pbef363=R8&myj#|i/fa{*fjlp&xoS}`{r^`jjZ~hz9:;;?94U1-dvc(un&mht#mcky-q`Zvi|{UiecQwos23427582_;#j|i.sd,cf~)keas#jPpovq[be;878;7X> gsd-vc)`kq$h`fv re]sjqtXoj6:2?>4U1-dvc(un&mht#mcky-q`Zvi|{Ulo1<1219V4*aun'xm#jmw.bnh|*tcWyd~Ril<2<14>S7'nxm"h gbz-gim'{nT|cz}_fa?0;473\:$kh!rg-dg}(ddbr$~iQnup\cf:26;:0Y=!hrg,qb*adp'iggu!}d^rmpwY`k5<5>=5Z0.eqb+ta'nis"nbdx.pg[uhszVmh0:0=0:W3+bta&{l$knv!cmi{+wbXxg~ySjm38?3e?P6(o{l%~k!hcy,`hn~(zmU{by|Pgb]35c=R8&myj#|i/fa{*fjlp&xoS}`{r^e`[47a3\:$kh!rg-dg}(ddbr$~iQnup\cfY59o1^<"i}f/pe+be&jf`t"|k_qlwvZadW:;m7X> gsd-vc)`kq$h`fv re]sjqtXojU?=k5Z0.eqb+ta'nis"nbdx.pg[uhszVmhS8?i;T2,cw`)zo%lou lljz,vaYwf}xTknQ91g9V4*aun'xm#jmw.bnh|*tcWyd~Ril_63e?P6(o{l%~k!hcy,`hn~(zmU{by|Pgb];63=R8&myj#|i/fa{*fjlp&xoS}`{r^e`[duumn6;2?84U1-dvc(un&mht#mcky-q`Zvi|{UloRo|rde?5;413\:$kh!rg-dg}(ddbr$~iQnup\cfYf{{ol0?0=6:W3+bta&{l$knv!cmi{+wbXxg~ySjmParpfc959:?1^<"i}f/pe+be&jf`t"|k_qlwvZadWhyyij2;>348Q5)`zo$yj"ilx/aoo})ulVzexQhc^cpv`a;=78=7X> gsd-vc)`kq$h`fv re]sjqtXojUjkh<7<12>S7'nxm"h gbz-gim'{nT|cz}_fa\evtbo5=5>;5Z0.eqb+ta'nis"nbdx.pg[uhszVmhSl}}ef>;:73<]9%l~k }f.e`|+ekcq%yhR~ats]dgZgtzlmT?;4U1-dvc(un&mht#mcky-q`Zvi|{UloRo|rde\773<]9%l~k }f.e`|+ekcq%yhR~ats]dgZgtzlmT8?;4U1-dvc(un&mht#mcky-q`Zvi|{UloRo|rde\173<]9%l~k }f.e`|+ekcq%yhR~ats]dgZgtzlmT:?;4U1-dvc(un&mht#mcky-q`Zvi|{UloRo|rde\373<]9%l~k }f.e`|+ekcq%yhR~ats]dgZgtzlmT4?74U1-dvc(un&mht#mcky-q`Zvi|{UloRo|rde\`4:76;30Y=!hrg,qb*adp'iggu!}d^rmpwY`kVkx~hiPd0>2:7?<]9%l~k }f.e`|+ekcq%yhR~ats]dgZgtzlmTh<2=>3;8Q5)`zo$yj"ilx/aoo})ulVzexQhc^cpv`aXl8682?74U1-dvc(un&mht#mcky-q`Zvi|{UloRo|rde\`4:36;30Y=!hrg,qb*adp'iggu!}d^rmpwY`kVkx~hiPd0>6:7?<]9%l~k }f.e`|+ekcq%yhR~ats]dgZgtzlmTh<29>3;8Q5)`zo$yj"ilx/aoo})ulVzexQhc^cpv`aXl86<2?74U1-dvc(un&mht#mcky-q`Zvi|{UloRo|rde\`4:?6;20Y=!hrg,qb*adp'iggu!}d^rmpwY`kVkx~hiPd0]36==R8&myj#|i/fa{*fjlp&xoS}`{r^e`[duumnUo=R?=8:W3+bta&{l$knv!cmi{+wbXxg~ySjmParpfcZb6W;837X> gsd-vc)`kq$h`fv re]sjqtXojUjkh_e3\77><]9%l~k }f.e`|+ekcq%yhR~ats]dgZgtzlmTh85Z0.eqb+ta'nis"nbdx.pg[uhszVmhSua}012360=R8&myj#|i/fa{*fjlp&xoS}`{r^e`[}iu89::>85Z0.eqb+ta'nis"nbdx.pg[uhszVmhSua}012160=R8&myj#|i/fa{*fjlp&xoS}`{r^e`[}iu89:8>85Z0.eqb+ta'nis"nbdx.pg[uhszVmhSua}012760=R8&myj#|i/fa{*fjlp&xoS}`{r^e`[}iu89:>>85Z0.eqb+ta'nis"nbdx.pg[uhszVmhSua}012560=R8&myj#|i/fa{*fjlp&xoS}`{r^e`[}iu89:<><5Z0.eqb+ta'nis"nbdx.uq[uhszVhbb1?1209V4*aun'xm#jmw.bnh|*quWyd~Rlfn=0=64=R8&myj#|i/fa{*fjlp&}yS}`{r^`jj959:81^<"i}f/pe+be&jf`t"y}_qlwvZdnf5>5><5Z0.eqb+ta'nis"nbdx.uq[uhszVhbb1;1209V4*aun'xm#jmw.bnh|*quWyd~Rlfn=4=64=R8&myj#|i/fa{*fjlp&}yS}`{r^`jj919:81^<"i}f/pe+be&jf`t"y}_qlwvZdnf525><5Z0.eqb+ta'nis"nbdx.uq[uhszVhbb171219V4*aun'xm#jmw.bnh|*quWyd~Rlfn^314>S7'nxm"h gbz-gim'~xT|cz}_ckm[7473\:$kh!rg-dg}(ddbr${Qnup\flhX;;:0Y=!hrg,qb*adp'iggu!xr^rmpwYeagU?>=5Z0.eqb+ta'nis"nbdx.uq[uhszVhbbR;=0:W3+bta&{l$knv!cmi{+rtXxg~ySoga_703?P6(o{l%~k!hcy,`hn~({U{by|Pbhl\376<]9%l~k }f.e`|+ekcq%|~R~ats]amkY?:91^<"i}f/pe+be&jf`t"y}_qlwvZdnfV39:6[?/fpe*w`(ojr%oaew/vp\tkruWkceSua}012362=R8&myj#|i/fa{*fjlp&}yS}`{r^`jjZ~hz9:;<<<9;T2,cw`)zo%lou lljz,swYwf}xTnd`Pxnp34575?2_;#j|i.sd,cf~)keas#z|Ppovq[goiWqey<=>>1348Q5)`zo$yj"ilx/aoo})pzVzexQmio]{kw678;8<7X> gsd-vc)`kq$h`fv ws]sjqtXj`dTtb|?010263=R8&myj#|i/fa{*fjlp&}yS}`{r^`jjZ~hz9:;??94U1-dvc(un&mht#mcky-tvZvi|{UiecQwos234645>2_;#j|i.sd,cf~)keas#z|Ppovq[goiWqey<=>;269V4*aun'xm#jmw.bnh|*quWyd~Rlfn^zlv567<88=7X> gsd-vc)`kq$h`fv ws]sjqtXj`dTtb|?01713>S7'nxm"h gbz-gim'~xT|cz}_ckm[}iu89:>=?84U1-dvc(un&mht#mcky-tvZvi|{UiecQwos23434?3\:$kh!rg-dg}(ddbr${Qnup\flhXpfx;<=8>1358Q5)`zo$yj"ilx/aoo})pzVzexQmio]{kw678?89n6[?/fpe*w`(ojr%oaew/vp\tkruWkceSua}0125[gbc8;<0Y=!hrg,qb*adp'iggu!xr^rmpwYeagUsc>?0604?P6(o{l%~k!hcy,`hn~({U{by|Pbhl\|jt789=:>=5Z0.eqb+ta'nis"nbdx.uq[uhszVmh0=0=0:W3+bta&{l$knv!cmi{+rtXxg~ySjm31?03?P6(o{l%~k!hcy,`hn~({U{by|Pgb>1:76<]9%l~k }f.e`|+ekcq%|~R~ats]dg959:91^<"i}f/pe+be&jf`t"y}_qlwvZad4=49<6[?/fpe*w`(ojr%oaew/vp\tkruWni793328Q5)`zo$yj"ilx/aoo})pzVzexQhc=5=65=R8&myj#|i/fa{*fjlp&}yS}`{r^e`8=8582_;#j|i.sd,cf~)keas#z|Ppovq[be;17;m7X> gsd-vc)`kq$h`fv ws]sjqtXojU;=k5Z0.eqb+ta'nis"nbdx.uq[uhszVmhS;m7X> gsd-vc)`kq$h`fv ws]sjqtXojU3=k5Z0.eqb+ta'nis"nbdx.uq[uhszVmhS4<9;T2,cw`)zo%lou lljz,swYwf}xTknQnssgd8585>2_;#j|i.sd,cf~)keas#z|Ppovq[beXizxnk1?1279V4*aun'xm#jmw.bnh|*quWyd~Ril_`qqab:56;<0Y=!hrg,qb*adp'iggu!xr^rmpwY`kVkx~hi33?05?P6(o{l%~k!hcy,`hn~({U{by|Pgb]bwwc`4=49:6[?/fpe*w`(ojr%oaew/vp\tkruWniTm~|jg=7=63=R8&myj#|i/fa{*fjlp&}yS}`{r^e`[duumn6=2?84U1-dvc(un&mht#mcky-tvZvi|{UloRo|rde?3;413\:$kh!rg-dg}(ddbr${Qnup\cfYf{{ol050=6:W3+bta&{l$knv!cmi{+rtXxg~ySjmParpfc9?9:<1^<"i}f/pe+be&jf`t"y}_qlwvZadWhyyijQ?249V4*aun'xm#jmw.bnh|*quWyd~Ril_`qqabY6:<1^<"i}f/pe+be&jf`t"y}_qlwvZadWhyyijQ=249V4*aun'xm#jmw.bnh|*quWyd~Ril_`qqabY4:<1^<"i}f/pe+be&jf`t"y}_qlwvZadWhyyijQ;249V4*aun'xm#jmw.bnh|*quWyd~Ril_`qqabY2:<1^<"i}f/pe+be&jf`t"y}_qlwvZadWhyyijQ9249V4*aun'xm#jmw.bnh|*quWyd~Ril_`qqabY0:<1^<"i}f/pe+be&jf`t"y}_qlwvZadWhyyijQ7249V4*aun'xm#jmw.bnh|*quWyd~Ril_`qqabY>:01^<"i}f/pe+be&jf`t"y}_qlwvZadWhyyijQk1=3=6<=R8&myj#|i/fa{*fjlp&}yS}`{r^e`[duumnUo=1<1289V4*aun'xm#jmw.bnh|*quWyd~Ril_`qqabYc9595>45Z0.eqb+ta'nis"nbdx.uq[uhszVmhSl}}ef]g5929:01^<"i}f/pe+be&jf`t"y}_qlwvZadWhyyijQk1=7=6<=R8&myj#|i/fa{*fjlp&}yS}`{r^e`[duumnUo=181289V4*aun'xm#jmw.bnh|*quWyd~Ril_`qqabYc95=5>45Z0.eqb+ta'nis"nbdx.uq[uhszVmhSl}}ef]g59>9:01^<"i}f/pe+be&jf`t"y}_qlwvZadWhyyijQk1=;=6==R8&myj#|i/fa{*fjlp&}yS}`{r^e`[duumnUo=R?=8:W3+bta&{l$knv!cmi{+rtXxg~ySjmParpfcZb6W;837X> gsd-vc)`kq$h`fv ws]sjqtXojUjkh_e3\77><]9%l~k }f.e`|+ekcq%|~R~ats]dgZgtzlmTh55Z0.eqb+ta'nis"nbdx.uq[uhszVmhSl}}ef]g5Z?5=2_;#j|i.sd,cf~)keas#z|Ppovq[beXpfx;<=>=5:W3+bta&{l$knv!cmi{+rtXxg~ySjmPxnp34575=2_;#j|i.sd,cf~)keas#z|Ppovq[beXpfx;<=<=5:W3+bta&{l$knv!cmi{+rtXxg~ySjmPxnp34555=2_;#j|i.sd,cf~)keas#z|Ppovq[beXpfx;<=:=5:W3+bta&{l$knv!cmi{+rtXxg~ySjmPxnp34535=2_;#j|i.sd,cf~)keas#z|Ppovq[beXpfx;<=8=5:W3+bta&{l$knv!cmi{+rtXxg~ySjmPxnp34515=2_;#j|i.sd,cf~)keas#z|Ppovq[beXpfx;<=6<0:W3+bta&{l$ka>!re-dv4(un~l#@czx^PBIZTCWLDTJZH[200e?P6(o{l%~k!hl1,q`*au9'xm{kz Mlw{[WGJW[OLCXZPEO326a=R8&myj#|i/fn3*wb(o{;%~kyit.avvwYao~Tyo{e=2=6a=R8&myj#|i/fn3*wb(o{;%~kyit.avvwYao~Tyo{e=3=6f=R8&myj#|i/fn3*wb(o{;%~kyit.avvwYao~Tyo{e^21g>S7'nxm"h gm2-va)`z8$yjzh{/bwqvZ`pn}Uxxlzj_016?P6(o{l%~k!hl1,q`*au9'xm{kz ctpq[cqa|VymykPmtz3457;879=7X> gsd-vc)`d9$yh"i}1/pescr(k|xySkyit^qweqcXe|r;<=?30?301>S7'nxm"h gm2-va)`z8$yjzh{/bwqvZ`pn}Uxxlzj_lw{45664848:6[?/fpe*w`(oe:%~i!hr0,qbr`s'jy~Rhxfu]ppdrbWds<=>><0<26==R8&myj#|i/fn3*wb(o{;%~kyit.gntqXn~lSkl=7:W3+bta&{l$ka>!re-dv4(un~l#hctx]escrXa;l0Y=!hrg,qb*ak8'xo#j|>.sdtbq)bey~rSkyit^k\ip~789:8<6[?/fpe*w`(oe:%~i!hr0,qbr`s'lg{xtQiwgv\mZkrp9:;<<<6;T2,cw`)zo%l`= }d.eqev(u{}y$o=!laspzj`r;87827X> gsd-vc)`d9$yh"i}ar,qwqu(k9%hm|vndv?5;4>3\:$kh!rg-dh5(ul&mym~ }suq,g5)di{xrbhz32?0:?P6(o{l%~k!hl1,q`*auiz$yy} c1-`ewt~fl~7?32g9V4*aun'xm#jb?.sf,cwgt&{y"m?/fov|+ajS8W%k`}!mr0e?P6(o{l%~k!hl1,q`*auiz$yy} c1-dip~)odQ9Q#ibs/op6c=R8&myj#|i/fn3*wb(o{kx"}{s.a3+bkrp'mfW>S!glq-iv4a3\:$kh!rg-dh5(ul&mym~ }suq,g5)`e|r%k`U;]/enw+kt::1^<"i}f/pe+bj7&{n$ko|.sqww*e7';7<3<<;T2,cw`)zo%l`= }d.eqev(u{}y$o=!y1=3=66=R8&myj#|i/fn3*wb(o{kx"}{s.a3+s7;:7887X> gsd-vc)`d9$yh"i}ar,qwqu(k9%}=1=1229V4*aun'xm#jb?.sf,cwgt&{y"m?/w3?0;4e3\:$kh!rg-dh5(ul&mym~ }suq,g5)q9V:Tmcj?01226g=R8&myj#|i/fn3*wb(o{kx"}{s.a3+s7X9Vkeh=>?000a?P6(o{l%~k!hl1,q`*auiz$yy} c1-u5Z4Xign;<=>>2c9V4*aun'xm#jb?.sf,cwgt&{y"m?/w3\7Zgil9:;<<45Z0.eqb+ta'nf;"j gscp*wus{&i:#no}rxlfp969:01^<"i}f/pe+bj7&{n$ko|.sqww*e6'jky~t`jt=3=6<=R8&myj#|i/fn3*wb(o{kx"}{s.a2+fguzpdnx1<1289V4*aun'xm#jb?.sf,cwgt&{y"m>/bcqv|hb|595>k5Z0.eqb+ta'nf;"j gscp*wus{&i:#jczx/en_5[)od;%a</fov|+ajS;W%k`}!mr0e?P6(o{l%~k!hl1,q`*auiz$yy} c0-dip~)odQ8Q#ibs/op6c=R8&myj#|i/fn3*wb(o{kx"}{s.a2+bkrp'mfW9S!glq-iv443\:$kh!rg-dh5(ul&mym~ }suq,g4)q95:5>>5Z0.eqb+ta'nf;"j gscp*wus{&i:#{?31?00?P6(o{l%~k!hl1,q`*auiz$yy} c0-u5949::1^<"i}f/pe+bj7&{n$ko|.sqww*e6';7?3<<;T2,cw`)zo%l`= }d.eqev(u{}y$o?000a?P6(o{l%~k!hl1,q`*auiz$yy} c0-u5Z7Xign;<=>>2c9V4*aun'xm#jb?.sf,cwgt&{y"m>/w3\6Zgil9:;<<o5Z0.eqb+ta'nf;"j gscp*wus{&i:#{?P4^llp567888;7X> gsd-vc)`d9$yh"i}ar,qwqu(kfg{4U1-dvc(un&mg<#|k/fpbw+tt|z%hc`~>289V4*aun'xm#jb?.sf,cwgt&{y"|nm^gntqXnkUb?=5Z0.eqb+ta'nf;"j gscp*wus{&xjaRkbpu{\bgYnWfx;<=><1:W3+bta&{l$ka>!re-dvdu)zz~x#ob_dosp|YajVcTc>?01317>S7'nxm"h gm2-va)uxg~y#@m`uov\gjsi|;>0Y=!hrg,qb*ak8'xo#~ats-Ngjsi|Vidycz>259V4*aun'xm#jb?.sf,vuhsz&Ghcx`{_bmvjq45<2_;#j|i.sd,ci6)zm%y|cz}/LalqkrXkfex><;;T2,cw`)zo%l`= }d.psjqt(Eje~byQlotlw072<]9%l~k }f.eo4+tc'{zex!BcnwmpZeh}g~>>95Z0.eqb+ta'nf;"j rqlwv*Kdg|dSnaznu410>S7'nxm"h gm2-va)uxg~y#@m`uov\gjsi|>8?7X> gsd-vc)`d9$yh"|nup,Ifirf}Uhcx`{83;8Q5)`zo$yj"ic0/pg+wvi|{%Fob{at^alqkrXkp6;2?m4U1-dvc(un&mg<#|k/srmpw)JkfexRm`uov\g|:76Vx>45Z0.eqb+ta'nf;"j rqlwv*Kdg|dSnaznu]`}979:j1^<"i}f/pe+bj7&{n$~}`{r.O`kphsWje~byQly=3=[wr512_;#j|i.sd,ci6)zm%y|cz}/LalqkrXkfexRmv<3<1g>S7'nxm"h gm2-va)uxg~y#@m`uov\gjsi|Vir0?0Pru0:?P6(o{l%~k!hl1,q`*twf}x$Anaznu]`kphsWjs7?37:Zts:01^<"i}f/pe+bj7&{n$~}`{r.O`kphsWje~byQly=7=6f=R8&myj#|i/fn3*wb(zyd~"Clotlw[firf}Uhu1;1_sv1=>S7'nxm"h gm2-va)uxg~y#@m`uov\gjsi|Vir0;0=c:W3+bta&{l$ka>!re-qtkru'DidyczPcnwmpZe~4?4T~y<6;T2,cw`)zo%l`= }d.psjqt(Eje~byQlotlw[f;?78h7X> gsd-vc)`d9$yh"|nup,Ifirf}Uhcx`{_b{?3;Yu|;k0Y=!hrg,qb*ak8'xo#~ats-Ngjsi|VidyczPxnp?4;4f3\:$kh!rg-dh5(ul&x{by| MbmvjqYdg|dSua}<0<1e>S7'nxm"h gm2-va)uxg~y#@m`uov\gjsi|Vrd~1<12`9V4*aun'xm#jb?.sf,vuhsz&Ghcx`{_bmvjqYg{682?o4U1-dvc(un&mg<#|k/srmpw)JkfexRm`uov\|jt;<78j7X> gsd-vc)`d9$yh"|nup,Ifirf}Uhcx`{_ymq8085i2_;#j|i.sd,ci6)zm%y|cz}/LalqkrXkfexRv`r=4=6d=R8&myj#|i/fn3*wb(zyd~"Clotlw[firf}Usc28>3c8Q5)`zo$yj"ic0/pg+wvi|{%Fob{at^alqkrXpfx74311g9V4*aun'xm#jb?.sf,vuhsz&idycz31?3e?P6(o{l%~k!hl1,q`*twf}x$ob{at=0=5c=R8&myj#|i/fn3*wb(zyd~"m`uov?7;7a3\:$kh!rg-dh5(ul&x{by| cnwmp9299o1^<"i}f/pe+bj7&{n$~}`{r.alqkr;=7;m7X> gsd-vc)`d9$yh"|nup,gjsi|5<5=k5Z0.eqb+ta'nf;"j rqlwv*eh}g~7;3?i;T2,cw`)zo%l`= }d.psjqt(kfex1611d9V4*aun'xm#jb?.sf,vuhsz&idyczP00g8Q5)`zo$yj"ic0/pg+wvi|{%hcx`{_03f?P6(o{l%~k!hl1,q`*twf}x$ob{at^02a>S7'nxm"h gm2-va)uxg~y#naznu]05`=R8&myj#|i/fn3*wb(zyd~"m`uov\04c<]9%l~k }f.eo4+tc'{zex!lotlw[07b3\:$kh!rg-dh5(ul&x{by| cnwmpZ06m2_;#j|i.sd,ci6)zm%y|cz}/bmvjqY09l1^<"i}f/pe+bj7&{n$~}`{r.alqkrX0;80Y=!hrg,qb*ak8'xo#~ats-`kphsWm;7<3<=;T2,cw`)zo%l`= }d.psjqt(kfexRj><0<16>S7'nxm"h gm2-va)uxg~y#naznu]g5949:;1^<"i}f/pe+bj7&{n$~}`{r.alqkrXl8682?<4U1-dvc(un&mg<#|k/srmpw)dg|dSi?34?01?P6(o{l%~k!hl1,q`*twf}x$ob{at^f28085:2_;#j|i.sd,ci6)zm%y|cz}/bmvjqYc95<5>?5Z0.eqb+ta'nf;"j rqlwv*eh}g~Th<28>308Q5)`zo$yj"ic0/pg+wvi|{%hcx`{_e3?<;463\:$kh!rg-dh5(ul&x{by| cnwmpZb6W98:7X> gsd-vc)`d9$yh"|nup,gjsi|Vn:S<<>;T2,cw`)zo%l`= }d.psjqt(kfexRj>_302?P6(o{l%~k!hl1,q`*twf}x$ob{at^f2[6463\:$kh!rg-dh5(ul&x{by| cnwmpZb6W=8:7X> gsd-vc)`d9$yh"|nup,gjsi|Vn:S8<>;T2,cw`)zo%l`= }d.psjqt(kfexRj>_702?P6(o{l%~k!hl1,q`*twf}x$ob{at^f2[2463\:$kh!rg-dh5(ul&x{by| cnwmpZb6W18?7X> gsd-vc)`d9$yh"|nup,gjsi|Vddx=>?12d8Q5)`zo$yj"ic0/uq+bqf{'m{j#y}pg-NeabXl`lmS}`{r^rb`Zgcl9:;S7'nxm"h gm2-sw)`hy%k}h!wsre+HgclVnbjkQnup\tdbXimn;<=>Pcx>2:6`<]9%l~k }f.eo4+qu'n}j#if/uqtc)JimnThdhi_qlwvZvflVkoh=>?0^az8784n2_;#j|i.sd,ci6){%l{l}!gqd-swva'DkohRjffg]sjqtXxhnTmij?012\g|:46:l0Y=!hrg,qb*ak8'}y#jyns/esb+quxo%FmijPdhde[uhszVzjhRokd1234Ze~4=48j6[?/fpe*w`(oe:%{!hw`q-cu`){zm#@okd^fjbcYwf}xT|ljPaef3456Xkp6>2>h4U1-dvc(un&mg<#y}/fubw+awn'}y|k!Baef\`l`aWyd~R~nd^cg`5678Vir0;0!ws-dsdu)oyl%{~i/Lcg`ZbnnoU{by|Pp`f\eab789:Tot28>2d8Q5)`zo$yj"ic0/uq+bqf{'m{j#y}pg-NeabXl`lmS}`{r^rb`Zgcl9:;S7'nxm"h gm2-sw)`hy%k}h!wsre+HgclVnbjkQnup\tdbXimn;<=>Pcx>::17<]9%l~k }f.eo4+qu'n}j#if/uqtc)JimnThdhi_qlwvZvflVkoh=>?0^nvp9776=:0Y=!hrg,qb*ak8'}y#jyns/esb+quxo%FmijPdhde[uhszVzjhRokd1234Zjr|5;58;5Z0.eqb+ta'nf;"z| gvcp*bva&~x{j"Cnde]gmc`Xxg~yS}ok_`fg4567We0<0PIOT\416<]9%l~k }f.eo4+qu'n}j#if/uqtc)JimnThdhi_qlwvZvflVkoh=>?0^nvp949<91^<"i}f/pe+bj7&~x$kzo|.fre*rtwn&GjhiQkigd\tkruWykoSljk0123[iss4:4?<6[?/fpe*w`(oe:%{!hw`q-cu`){zm#@okd^fjbcYwf}xT|ljPaef3456Xd|~783:?;T2,cw`)zo%l`= xr.etev(`xo$|~}h M`fg[aoanVzexQae]b`a6789Ugyy2:>528Q5)`zo$yj"ic0/uq+bqf{'m{j#y}pg-NeabXl`lmS}`{r^rb`Zgcl9:;?_mww828382_;#j|i.sd,ci6){%l{l}!gqd-swva'DkohRjffg]sjqtXxhnTmij?012\hpr;07>;7X> gsd-vc)`d9$|~"ixar,dtc(pzyl$Aljk_ekebZvi|{U{miQnde2345Yk}}6229?4U1-dvc(un&mg<#y}/fubw+awn'}y|k!Baef\`l`aWyd~R~nd^cg`5678Vrd~1??>528Q5)`zo$yj"ic0/uq+bqf{'m{j#y}pg-NeabXl`lmS}`{r^rb`Zgcl9:;?_ymq878382_;#j|i.sd,ci6){%l{l}!gqd-swva'DkohRjffg]sjqtXxhnTmij?012\|jt;;7>;7X> gsd-vc)`d9$|~"ixar,dtc(pzyl$Aljk_ekebZvi|{U{miQnde2345Yg{6?29>4U1-dvc(un&mg<#y}/fubw+awn'}y|k!Baef\`l`aWyd~R~nd^cg`5678Vrd~1;1419V4*aun'xm#jb?.vp,crgt&nzm"z|f.Ob`aYcaolT|cz}_qcg[dbc89:;Sua}<7<74>S7'nxm"h gm2-sw)`hy%k}h!wsre+HgclVnbjkQnup\tdbXimn;<=>Pxnp?3;273\:$kh!rg-dh5(pz&m|m~ hpg,tvu`(EhnoSigif^rmpwYwimUjhi>?01]{kw:?6=:0Y=!hrg,qb*ak8'}y#jyns/esb+quxo%FmijPdhde[uhszVzjhRokd1234Z~hz535?=5Z0.eqb+ta'nf;"z| gvcp*bva&~x{j"jffg]sjqtXxhn7==0=f:W3+bta&{l$ka>!ws-dsdu)oyl%{~i/ekebZvi|{U{mi2>>3d8Q5)`zo$yj"ic0/uq+bqf{'m{j#y}pg-gmc`Xxg~yS}ok<3<1b>S7'nxm"h gm2-sw)`hy%k}h!wsre+aoanVzexQae>0:7`<]9%l~k }f.eo4+qu'n}j#if/uqtc)caolT|cz}_qcg8185n2_;#j|i.sd,ci6){%l{l}!gqd-swva'mcmjR~ats]sea:26;l0Y=!hrg,qb*ak8'}y#jyns/esb+quxo%oekhPpovq[ugc4?49j6[?/fpe*w`(oe:%{!hw`q-cu`){zm#igif^rmpwYwim6<2?h4U1-dvc(un&mg<#y}/fubw+awn'}y|k!kigd\tkruWyko050=f:W3+bta&{l$ka>!ws-dsdu)oyl%{~i/ekebZvi|{U{mi26>3g8Q5)`zo$yj"ic0/uq+bqf{'m{j#y}pg-gmc`Xxg~yS}ok_00e?P6(o{l%~k!hl1,tv*apiz$l|k xrqd,`l`aWyd~R~nd^336`=R8&myj#|i/fn3*rt(o~kx"j~i.vpsb*bnnoU{by|Pp`f\67c<]9%l~k }f.eo4+qu'n}j#if/uqtc)caolT|cz}_qcg[64b3\:$kh!rg-dh5(pz&m|m~ hpg,tvu`(l`lmS}`{r^rb`Z25m2_;#j|i.sd,ci6){%l{l}!gqd-swva'mcmjR~ats]seaY2:l1^<"i}f/pe+bj7&~x$kzo|.fre*rtwn&nbjkQnup\tdbX>;o0Y=!hrg,qb*ak8'}y#jyns/esb+quxo%oekhPpovq[ugcW>8n7X> gsd-vc)`d9$|~"ixar,dtc(pzyl$hdhi_qlwvZvflV29i6[?/fpe*w`(oe:%{!hw`q-cu`){zm#igif^rmpwYwimU2?55Z0.eqb+ta'nf;"z| gvcp*bva&~x{j"jffg]sjqtXxhnTmij?012?5584?2_;#j|i.sd,ci6){%l{l}!gqd-swva'mcmjR~ats]seaYflm:;<=2>>258Q5)`zo$yj"ic0/uq+bqf{'m{j#y}pg-gmc`Xxg~yS}ok_`fg45674;48;6[?/fpe*w`(oe:%{!hw`q-cu`){zm#igif^rmpwYwimUjhi>?01>0:61<]9%l~k }f.eo4+qu'n}j#if/uqtc)caolT|cz}_qcg[dbc89:;090<7:W3+bta&{l$ka>!ws-dsdu)oyl%{~i/ekebZvi|{U{miQnde2345:26:=0Y=!hrg,qb*ak8'}y#jyns/esb+quxo%oekhPpovq[ugcWhno<=>?<7<03>S7'nxm"h gm2-sw)`hy%k}h!wsre+aoanVzexQae]b`a67896<2>94U1-dvc(un&mg<#y}/fubw+awn'}y|k!kigd\tkruWykoSljk01238=84?2_;#j|i.sd,ci6){%l{l}!gqd-swva'mcmjR~ats]seaYflm:;<=26>3c8Q5)`zo$yj"ic0/uq+bqf{'m{j#y}pg-svjaXn|fgSd==;T2,cw`)zo%l`= xr.etev(`xo$|~}h psmd[cskdVcTaxv?01100>S7'nxm"h gm2-sw)`hy%k}h!wsre+uthoVl~`aQf_lw{4564989?7X> gsd-vc)`d9$|~"ixar,dtc(pzyl$|ah_gwohZoXe|r;<==>92:8Q5)`zo$yj"ic0/uq+bqf{'m{j#y}pg-svjaXn|fgSdQbuy23467>WZ];??5Z0.eqb+ta'nf;"z| gvcp*bva&~x{j"~}of]eqijXaVddx=>?13;8Q5)`zo$yj"ic0/uq+bqf{'}xx~!l1.abvwim}6;2?74U1-dvc(un&mg<#y}/fubw+qt|z%h="mnrs{maq:66;30Y=!hrg,qb*ak8'}y#jyns/uppv)d9&ij~waeu>1:7?<]9%l~k }f.eo4+qu'n}j#y|tr-`5*efz{seiy2<>3d8Q5)`zo$yj"ic0/uq+bqf{'}xx~!l1.enq}(`eR:V"jc>.l31b>S7'nxm"h gm2-sw)`hy%{~z|/b3,chs&ngP=P hmr,nw7`<]9%l~k }f.eo4+qu'n}j#y|tr-`5*aj}q$laV318Q5)`zo$yj"ic0/uq+bqf{'}xx~!l1.t28485;2_;#j|i.sd,ci6){%l{l}!wrvp+f7(~8692?=4U1-dvc(un&mg<#y}/fubw+qt|z%h="x><2<17>S7'nxm"h gm2-sw)`hy%{~z|/b3,r4:36;h0Y=!hrg,qb*ak8'}y#jyns/uppv)d9&|:S=Qnne234575j2_;#j|i.sd,ci6){%l{l}!wrvp+f7(~8U:Sl`k012357d<]9%l~k }f.eo4+qu'n}j#y|tr-`5*p6W;Ujbi>?0131f>S7'nxm"h gm2-sw)`hy%{~z|/b3,r4Y4Whdo<=>?13`8Q5)`zo$yj"ic0/uq+bqf{'}xx~!l1.t2[1Yffm:;<=?=9:W3+bta&{l$ka>!ws-dsdu)z~x#n< c`pq}kcs494956[?/fpe*w`(oe:%{!hw`q-svrt'j8$ol|}yogw848512_;#j|i.sd,ci6){%l{l}!wrvp+f4(khxyuck{<3<1=>S7'nxm"h gm2-sw)`hy%{~z|/b0,gdtuqgo0>0=f:W3+bta&{l$ka>!ws-dsdu)z~x#n< glw{*bk\8T$la< b13d8Q5)`zo$yj"ic0/uq+bqf{'}xx~!l2.enq}(`eR;V"jc|.lq1b>S7'nxm"h gm2-sw)`hy%{~z|/b0,chs&ngP>P hmr,nw7`<]9%l~k }f.eo4+qu'n}j#y|tr-`6*aj}q$laV=R.fop*hu5n2_;#j|i.sd,ci6){%l{l}!wrvp+f4(ods"jcT4\,div(j{;90Y=!hrg,qb*ak8'}y#jyns/uppv)d:&|:0=0=3:W3+bta&{l$ka>!ws-dsdu)z~x#n< v0>2:75<]9%l~k }f.eo4+qu'n}j#y|tr-`6*p64;49?6[?/fpe*w`(oe:%{!hw`q-svrt'j8$z<2<>318Q5)`zo$yj"ic0/uq+bqf{'}xx~!l2.t28185j2_;#j|i.sd,ci6){%l{l}!wrvp+f4(~8U;Sl`k012357d<]9%l~k }f.eo4+qu'n}j#y|tr-`6*p6W8Ujbi>?0131f>S7'nxm"h gm2-sw)`hy%{~z|/b0,r4Y5Whdo<=>?13`8Q5)`zo$yj"ic0/uq+bqf{'}xx~!l2.t2[6Yffm:;<=?=b:W3+bta&{l$ka>!ws-dsdu)z~x#n< v0]7[dhc89:;=?>4U1-dvc(un&mg<#y}/fubw+qt|z%hc`~>219V4*aun'xm#jb?.vp,crgt&~y"m`mq014>S7'nxm"h gm2-sw)`hy%{~z|/bmnt64c3\:$kh!rg-dh5(pz&m|m~ xsuq,cd`)k:%hm|vndv?4;4c3\:$kh!rg-dh5(pz&m|m~ xsuq,cd`)k:%hm|vndv?5;4c3\:$kh!rg-dh5(pz&m|m~ xsuq,cd`)k:%hm|vndv?6;4c3\:$kh!rg-dh5(pz&m|m~ xsuq,cd`)k:%hm|vndv?7;543\:$kh!rg-dh5(pz&m|m~ xsuq,cd`)k:%laxv!glY3Y+aj9'g:?>5Z0.eqb+ta'nf;"z| gvcp*rus{&mjj#m1^<"i}f/pe+bj7&~x$kzo|.vqww*afn'i8#{?32?04?P6(o{l%~k!hl1,tv*apiz$|y} g`d-g6)q9595>:5Z0.eqb+ta'nf;"z| gvcp*rus{&mjj#mPaof34566:o1^<"i}f/pe+bj7&~x$kzo|.vqww*afn'i8#{?P1^cm`567888m7X> gsd-vc)`d9$|~"ixar,twqu(ohl%o>!y1^0\ekb789::>k5Z0.eqb+ta'nf;"z| gvcp*rus{&mjj#m>2b9V4*aun'xm#jb?.vp,crgt&~y"|nm^coijusWog`Rg<4:W3+bta&{l$ka>!ws-dsdu)z~x#ob_`nnkvrXn|fgSdQbuy2345523\:$kh!rg-dh5(pz&m|m~ xsuq,vdkXiegdyQiumn\mZkrp9:;<<=m;T2,cw`)zo%l`= xr.etev(p{}y$~lcPamolwqYa}efTeR``t12354YNF_U;>55Z0.eqb+ta'nf;"z| gvcp*rus{&xjaRhzlm]efZo5=2_;#j|i.sd,ci6){%l{l}!wrvp+wgjWog`Rg=d:W3+bta&{l$ka>!ws-dsdu)z~x#ob_gwohZoXe|r;<=>=e:W3+bta&{l$ka>!ws-dsdu)z~x#ob_gwohZoXe|r;<=>>1e9V4*aun'xm#jb?.vp,vdkX{UnbRg>1g9V4*aun'xm#jb?.vp,vdkX{UnbRg>_000?P6(o{l%~k!hl1,tv*qwf}x$Anaznu]`kphs:=1^<"i}f/pe+bj7&~x${}`{r.O`kphsWje~by?=4:W3+bta&{l$ka>!ws-ttkru'DidyczPcnwmp7433\:$kh!rg-dh5(pz&}{by| MbmvjqYdg|d??:4U1-dvc(un&mg<#y}/vrmpw)JkfexRm`uov761=R8&myj#|i/fn3*rt(yd~"Clotlw[firf}?986[?/fpe*w`(oe:%{!xpovq+Heh}g~Tob{at707?P6(o{l%~k!hl1,tv*qwf}x$Anaznu]`kphs?;>0Y=!hrg,qb*ak8'}y#z~ats-Ngjsi|Vidycz7259V4*aun'xm#jb?.vp,suhsz&Ghcx`{_bmvjq?512_;#j|i.sd,ci6){%||cz}/LalqkrXkfexRmv<1<1g>S7'nxm"h gm2-sw)pxg~y#@m`uov\gjsi|Vir0=0Pru0:?P6(o{l%~k!hl1,tv*qwf}x$Anaznu]`kphsWjs7=31:Zts:01^<"i}f/pe+bj7&~x${}`{r.O`kphsWje~byQly=1=6f=R8&myj#|i/fn3*rt(yd~"Clotlw[firf}Uhu1=1_sv1=>S7'nxm"h gm2-sw)pxg~y#@m`uov\gjsi|Vir090=c:W3+bta&{l$ka>!ws-ttkru'DidyczPcnwmpZe~4=4T~y<6;T2,cw`)zo%l`= xr.usjqt(Eje~byQlotlw[f;=78h7X> gsd-vc)`d9$|~"ynup,Ifirf}Uhcx`{_b{?1;Yu|;30Y=!hrg,qb*ak8'}y#z~ats-Ngjsi|VidyczPcx>5:7e<]9%l~k }f.eo4+qu'~zex!BcnwmpZeh}g~Tot29>^pw6<=R8&myj#|i/fn3*rt(yd~"Clotlw[firf}Uhu1912b9V4*aun'xm#jb?.vp,suhsz&Ghcx`{_bmvjqYdq5=5Sz=9:W3+bta&{l$ka>!ws-ttkru'DidyczPcnwmpZe~4149o6[?/fpe*w`(oe:%{!xpovq+Heh}g~Tob{at^az8=8Xz}8j7X> gsd-vc)`d9$|~"ynup,Ifirf}Uhcx`{_ymq8585i2_;#j|i.sd,ci6){%||cz}/LalqkrXkfexRv`r=3=6d=R8&myj#|i/fn3*rt(yd~"Clotlw[firf}Usc2=>3c8Q5)`zo$yj"ic0/uq+rvi|{%Fob{at^alqkrXpfx7?35:7g<]9%l~k }f.eo4+qu'~zex!BcnwmpZeh}g~Ttb|37?0b?P6(o{l%~k!hl1,tv*qwf}x$Anaznu]`kphsWqey050=a:W3+bta&{l$ka>!ws-ttkru'DidyczPcnwmpZ~hz535>i5Z0.eqb+ta'nf;"z| wqlwv*Kdg|dSnaznu]{kw:>6Vx=k5Z0.eqb+ta'nf;"z| wqlwv*eh}g~7<3?i;T2,cw`)zo%l`= xr.usjqt(kfex1?11g9V4*aun'xm#jb?.vp,suhsz&idycz32?3e?P6(o{l%~k!hl1,tv*qwf}x$ob{at=1=5c=R8&myj#|i/fn3*rt(yd~"m`uov?0;7a3\:$kh!rg-dh5(pz&}{by| cnwmp9399o1^<"i}f/pe+bj7&~x${}`{r.alqkr;>7;m7X> gsd-vc)`d9$|~"ynup,gjsi|5=5=k5Z0.eqb+ta'nf;"z| wqlwv*eh}g~743?i;T2,cw`)zo%l`= xr.usjqt(kfex1711d9V4*aun'xm#jb?.vp,suhsz&idyczP00g8Q5)`zo$yj"ic0/uq+rvi|{%hcx`{_03f?P6(o{l%~k!hl1,tv*qwf}x$ob{at^02a>S7'nxm"h gm2-sw)pxg~y#naznu]05`=R8&myj#|i/fn3*rt(yd~"m`uov\04c<]9%l~k }f.eo4+qu'~zex!lotlw[07b3\:$kh!rg-dh5(pz&}{by| cnwmpZ06m2_;#j|i.sd,ci6){%||cz}/bmvjqY09l1^<"i}f/pe+bj7&~x${}`{r.alqkrX08o0Y=!hrg,qb*ak8'}y#z~ats-`kphsW0897X> gsd-vc)`d9$|~"ynup,gjsi|Vn:0=0=2:W3+bta&{l$ka>!ws-ttkru'je~byQk1=3=67=R8&myj#|i/fn3*rt(yd~"m`uov\`4:56;80Y=!hrg,qb*ak8'}y#z~ats-`kphsWm;7?3<=;T2,cw`)zo%l`= xr.usjqt(kfexRj><5<16>S7'nxm"h gm2-sw)pxg~y#naznu]g5939:;1^<"i}f/pe+bj7&~x${}`{r.alqkrXl86=2?<4U1-dvc(un&mg<#y}/vrmpw)dg|dSi?37?01?P6(o{l%~k!hl1,tv*qwf}x$ob{at^f28=85:2_;#j|i.sd,ci6){%||cz}/bmvjqYc9535><5Z0.eqb+ta'nf;"z| wqlwv*eh}g~Th<5Z0.eqb+ta'nf;"z| wqlwv*eh}g~Th<5Z0.eqb+ta'nf;"z| wqlwv*eh}g~ThS7'nxm"h gm2-sw)pxg~y#naznu]g6959:;1^<"i}f/pe+bj7&~x${}`{r.alqkrXl;6?2?<4U1-dvc(un&mg<#y}/vrmpw)dg|dSi<35?01?P6(o{l%~k!hl1,tv*qwf}x$ob{at^f18385:2_;#j|i.sd,ci6){%||cz}/bmvjqYc:5=5>?5Z0.eqb+ta'nf;"z| wqlwv*eh}g~Th?27>308Q5)`zo$yj"ic0/uq+rvi|{%hcx`{_e0?=;463\:$kh!rg-dh5(pz&}{by| cnwmpZb5W98:7X> gsd-vc)`d9$|~"ynup,gjsi|Vn9S<<>;T2,cw`)zo%l`= xr.usjqt(kfexRj=_302?P6(o{l%~k!hl1,tv*qwf}x$ob{at^f1[6463\:$kh!rg-dh5(pz&}{by| cnwmpZb5W=8:7X> gsd-vc)`d9$|~"ynup,gjsi|Vn9S8<>;T2,cw`)zo%l`= xr.usjqt(kfexRj=_702?P6(o{l%~k!hl1,tv*qwf}x$ob{at^f1[2463\:$kh!rg-dh5(pz&}{by| cnwmpZb5W18:7X> gsd-vc)`d9$|~"ynup,gjsi|Vn9S4<=;T2,cw`)zo%l`= xr.usjqt(kfexRj<<1<16>S7'nxm"h gm2-sw)pxg~y#naznu]g7979:;1^<"i}f/pe+bj7&~x${}`{r.alqkrXl:692?<4U1-dvc(un&mg<#y}/vrmpw)dg|dSi=33?01?P6(o{l%~k!hl1,tv*qwf}x$ob{at^f08185:2_;#j|i.sd,ci6){%||cz}/bmvjqYc;5?5>?5Z0.eqb+ta'nf;"z| wqlwv*eh}g~Th>29>308Q5)`zo$yj"ic0/uq+rvi|{%hcx`{_e1?3;453\:$kh!rg-dh5(pz&}{by| cnwmpZb44149>6[?/fpe*w`(oe:%{!xpovq+firf}Uo?171209V4*aun'xm#jb?.vp,suhsz&idyczPd2]364=R8&myj#|i/fn3*rt(yd~"m`uov\`6Y6:81^<"i}f/pe+bj7&~x${}`{r.alqkrXl:U9><5Z0.eqb+ta'nf;"z| wqlwv*eh}g~Th>Q<209V4*aun'xm#jb?.vp,suhsz&idyczPd2]764=R8&myj#|i/fn3*rt(yd~"m`uov\`6Y2:81^<"i}f/pe+bj7&~x${}`{r.alqkrXl:U=><5Z0.eqb+ta'nf;"z| wqlwv*eh}g~Th>Q8209V4*aun'xm#jb?.vp,suhsz&idyczPd2];64=R8&myj#|i/fn3*rt(yd~"m`uov\`6Y>:=1^<"i}f/pe+bj7&~x${}`{r.alqkrXff~;<=?>7:W3+bta&{l$ahc dnww[l:76820Y=!hrg,qb*kbe&ndyyQf<02=5==R8&myj#|i/lgn+air|Vc7=<0>8:W3+bta&{l$ahc dnww[l:6:7;37X> gsd-vc)jmd%ocxzPi=30:4><]9%l~k }f.ofi*bh}}Ub0<:1199V4*aun'xm#`kb/emvpZo;9<4:46[?/fpe*w`(elg$hb{{_h>22;7?3\:$kh!rg-nah)cg|~Te1?8>0:8Q5)`zo$yj"cjm.flqqYn4825=55Z0.eqb+ta'dof#iazt^k?5<86?2_;#j|i.sd,i`k(lfSd2>>0:8Q5)`zo$yj"cjm.flqqYn4;:5=55Z0.eqb+ta'dof#iazt^k?648602_;#j|i.sd,i`k(lfSd2=2?3;?P6(o{l%~k!bel-gkprXa5882<64U1-dvc(un&gna"j`uu]j8729911^<"i}f/pe+hcj'me~xRg324<2<>S7'nxm"h mdo,`jssW`69:3?7;T2,cw`)zo%fi`!kotv\m9406820Y=!hrg,qb*kbe&ndyyQf<3:=5==R8&myj#|i/lgn+air|Vc7>40>7:W3+bta&{l$ahc dnww[l:56820Y=!hrg,qb*kbe&ndyyQf<22=5==R8&myj#|i/lgn+air|Vc7?<0>8:W3+bta&{l$ahc dnww[l:4:7;37X> gsd-vc)jmd%ocxzPi=10:4><]9%l~k }f.ofi*bh}}Ub0>:1199V4*aun'xm#`kb/emvpZo;;<4:;6[?/fpe*w`(elg$hb{{_h>0:41<]9%l~k }f.ofi*bh}}Ub090>7:W3+bta&{l$ahc dnww[l:268=0Y=!hrg,qb*kbe&ndyyQf<7<23>S7'nxm"h mdo,`jssW`6<2<94U1-dvc(un&gna"j`uu]j8=86?2_;#j|i.sd,i`k(lfSd26>048Q5)`zo$yj"cjm.flqqYnW9;=7X> gsd-vc)jmd%ocxzPi^323>S7'nxm"h mdo,`jssW`U:<<94U1-dvc(un&gna"j`uu]j[476?2_;#j|i.sd,i`k(lfSdQ>2058Q5)`zo$yj"cjm.flqqYnW89:;6[?/fpe*w`(elg$hb{{_h]2041<]9%l~k }f.ofi*bh}}UbS<;>7:W3+bta&{l$ahc dnww[lY6>8=0Y=!hrg,qb*kbe&ndyyQf_0523>S7'nxm"h mdo,`jssW`U:4<94U1-dvc(un&gna"j`uu]j[4?6>2_;#j|i.sd,i`k(lfSdQ=169V4*aun'xm#`kb/emvpZoX:9;<7X> gsd-vc)jmd%ocxzPi^0252=R8&myj#|i/lgn+air|VcT>??8;T2,cw`)zo%fi`!kotv\mZ449>1^<"i}f/pe+hcj'me~xRgP2534?P6(o{l%~k!bel-gkprXaV8>=:5Z0.eqb+ta'dof#iazt^k\63703\:$kh!rg-nah)cg|~TeR<8169V4*aun'xm#`kb/emvpZoX:1;<7X> gsd-vc)jmd%ocxzPi^0:53=R8&myj#|i/lgn+air|VcT?<94U1-dvc(un&gna"j`uu]j[666?2_;#j|i.sd,i`k(lfSdQ<1058Q5)`zo$yj"cjm.flqqYnW:8:;6[?/fpe*w`(elg$hb{{_h]0741<]9%l~k }f.ofi*bh}}UbS>:>7:W3+bta&{l$ahc dnww[lY4=8<0Y=!hrg,qb*kbe&ndyyQf_535?P6(o{l%~k!bel-gkprXaV?::6[?/fpe*w`(elg$hb{{_h]553=R8&myj#|i/lgn+air|VcT;<84U1-dvc(un&gna"j`uu]j[=713\:$kh!rg-nah)cg|~TeR7>9:W3+bta&{l$ahc dnww[hcj494:m6[?/fpe*w`(elg$hb{{_lgn84699h1^<"i}f/pe+hcj'me~xRcjm=32:4g<]9%l~k }f.ofi*bh}}Ufi`2>2?3b?P6(o{l%~k!bel-gkprXelg7=>0>a:W3+bta&{l$ahc dnww[hcj48>5=l5Z0.eqb+ta'dof#iazt^ofi97268k0Y=!hrg,qb*kbe&ndyyQbel>22;7f3\:$kh!rg-nah)cg|~Tahc316<2e>S7'nxm"h mdo,`jssWdof0<611`9V4*aun'xm#`kb/emvpZkbe5;22<74U1-dvc(un&gna"j`uu]nah:668k0Y=!hrg,qb*kbe&ndyyQbel>14;7f3\:$kh!rg-nah)cg|~Tahc320<2e>S7'nxm"h mdo,`jssWdof0?<11`9V4*aun'xm#`kb/emvpZkbe5882 gsd-vc)jmd%ocxzPmdo?6086i2_;#j|i.sd,i`k(lfS`kb<34=5d=R8&myj#|i/lgn+air|Vgna1<8>0c8Q5)`zo$yj"cjm.flqqYjmd6943?n;T2,cw`)zo%fi`!kotv\i`k;:04:56[?/fpe*w`(elg$hb{{_lgn8786i2_;#j|i.sd,i`k(lfS`kb<22=5d=R8&myj#|i/lgn+air|Vgna1=>>0c8Q5)`zo$yj"cjm.flqqYjmd68>3?n;T2,cw`)zo%fi`!kotv\i`k;;:4:m6[?/fpe*w`(elg$hb{{_lgn86299h1^<"i}f/pe+hcj'me~xRcjm=16:4?<]9%l~k }f.ofi*bh}}Ufi`2<>0;8Q5)`zo$yj"cjm.flqqYjmd6?2<74U1-dvc(un&gna"j`uu]nah:26830Y=!hrg,qb*kbe&ndyyQbel>5:4?<]9%l~k }f.ofi*bh}}Ufi`28>0;8Q5)`zo$yj"cjm.flqqYjmd632<74U1-dvc(un&gna"j`uu]nah:>6>>0Y=!hrg,qb*kbe&mia#immf,dfhaf&gmnon mmf-ahnYjmdUlick}aumq+sgkam$hy| r`ookjv\8T$ym` }/r1\jjoia}$ym`!kpscn*av60q9="ob1c9V4*aun'xm#`kb/uos[wgjW{nTic?l;T2,cw`)zo%fi`!{mq]qehYulVoe=<94U1-dvc(un&xjaR|jgnww[`h6l2_;#j|i.sd,vvredb%yhR||t^cpv`a582_;#j|i.sd,vvredb%yhR||t^cpv`aXl88;7X> gsd-vc)u{}hgg"|k_sqw[duumnUo>d:W3+bta&{l$~~zmlj-q`Ztt|VxnkR>>d:W3+bta&{l$~~zmlj-q`Ztt|VxnkR?>d:W3+bta&{l$~~zmlj-q`Ztt|VxnkR<>d:W3+bta&{l$~~zmlj-tvZtt|Vkx~hi=0:W3+bta&{l$~~zmlj-tvZtt|Vkx~hiPd003?P6(o{l%~k!}su`oo*quW{ySl}}ef]g64e<]9%l~k }f.pppgjl'~xT~~zPcnoa5a=R8&myj#|i/sqwfim({UyyQlol`25`=R8&myj#|i/sqwfim({UyyQ}ef>3:4c<]9%l~k }f.pppgjl'~xT~~zPrde?5;7c3\:$kh!rg-qwqdkc&}yS}{_sgd[57c3\:$kh!rg-qwqdkc&}yS}{_sgd[4g<]ZOYSLBFARa8QVCUW_CXEOBJ3:T@G<=QAL]TXT^J3:UFE6=PMKi0[_G[E^OL@@YFk2]YEYKPMNFF[Gb<_[C_IRYFDUJ\Ea=PZ@^NSZGKTI]A5a=_AECET VKB!2-5%US]K*;"<.NSBKJ1>^HZJS=7U][LH@4?]USWNDO;6V\T^T@Gg=_WJEYIRGAFN48\adXAml0TifPPsknR`ttafd:<6Vkm^ObnjtQm{ybcc??;Yfn[Hoig{\n~~g`nb9bhhit|Vof|ywm;`nnkvrXn|fg:6lncjws`>dfkb{S`o}kdp0?fjll2njxlQlotlw,5/c3mkmRm`uov+5,bbf|hUhcx`{(5+g?agsiVidycz'5(f8`drfWje~by&9)e9geqgXkfex%9&d:fbpdYdg|d$5'k;ecweZeh}g~#5$h4d`vb[firf}626=08;e`jp`tu>2nbb%>&6:fjj-7.?2nbb%??)69gmk.69 =0hd`'13+4?aoi 89";6jfn)37-2=cag":9$94dhl+53/03mce$<9&6:fjj-4.>2nbb%=&6:fjj-2.>2nbb%;&6:fjj-0.>2nbb%9&6:fjj->.>2nbb%7&6:fjj969?2nbb1??>69gmk:697=0hd`313<4?aoi4895;6jfn=37:2=cag6:9394dhl?538>3mce0<950?58`lh;9>4=7iga<0<5?aoi4;4=7iga<2<5?aoi4=4=7iga<4<5?aoi4?4=7iga<6<5?aoi414=7iga<8<4?air|!:";6j`uu*2-==cg|~#=='7;emvp-76!11ocxz'13+;?air|!;8%55kotv+51/?3me~x%?:)99gkpr/9?#37iazt)34-==cg|~#=5'7;emvp-7>!>1ocxz'2(:8`jss ;:"46j`uu*15,>bh}}"99$64dnww,70.02ndyy&=7(:8`jss ;2"46j`uu*1=,1'7;emvp-57!11ocxz'30+;?air|!99%55kotv+76/?3me~x%=;)99gkpr/;<#<7iazt)6*3>bh}}">%:5kotv+2,1.?2ndyy&6)69gkpr;8720hb{{<02=<>bh}}6:=364dnww844902ndyy2>3?:8`jss48>546j`uu>21;>bh}}6:5394dnww848?3me~x199gkpr;:8437iazt=01:==cg|~7>>07;emvp943611ocxz324<;?air|58=255kotv?628?3me~x1<7>99gkpr;:04<7iazt=0=<>bh}}68<364dnww867902ndyy2<2?:8`jss4:9546j`uu>00;g;50?:8`jss4:?5;6j`uu>0:2=cg|~78394dnww80803me~x1817:flqq:06>1ocxz38?58`jss40437hjff3ld`0=bey~r>k5iigm\c`hbzh~d~Rx9_0.#\ljnfq*HC_K/Gdlfvdrhz);9"=?v<6^0`hnY60}e8:>o4fhdl[}jipV?:>u=9_3aooZ7?|f9= kgio^efj`tf|fxTz;Q>,OMMA)HHFL>;?6hffn]{hk~X=88s?;Q=cmi\5=rh;?&mekaPgdlfvdrhzV|=S<"tc^jbwZoi|Vigg0>#c^jbwZuu{}7; nQ}d^dqat;6$jUnbllce^pppZu~fj7: nQgar]q`Zbf|hUhcx`{=1.`[aoiW~coxe3>8-a\lduX{UomyoPcnwmp86+kVl~`aQil`ep[wusWkg1="l_hosh`kbf}keb`Ptxrf97*dW|ynShcmeeff`Ztbo4:'oRy}_gpfu87+kVxiRj`uu]qwq;6$jU~bik}fmmt[iip59&hSeo|_ntfvcjh4:'oR~}emmb`Zjf|ldhu0>#c^flqqYpam~c1>8#c^opcjhX~hf6=!mPre]gauro5<;9 nQjrsmq[lhmmj~bccQ{yqg>4)eX`hyTycjjrgnls86+kVbjRocmnqw[cskd4;'oRfns^ppp87+kVnjxlQlotlw[roc|a7:4)eXx{elSk{cl^vkv`uoWgolmykPv`n>5573$jU|~Rjjpuj>5543$jU{~biPelrw}ZrozlycSckhaug\rdj:=%iT|ah_dosp|Ys`{oxdRo|sdpw[sgk5=&hSeo|_wcoma;7$jU{~biPftno[qnumzbTm~}jru]uei;688?'obcoogmpZhfel7mekaPxml{[075p:nbd_0:wk60+kV|j`djPlnu>4)eXx{cfSkgio^vzt`;6cq;3 nQrne\bpjkW}s{i0?#c^ofijt~W}s{i0?#}248bl`hWqfetR;>2y15[7ekcV;3xb=9_gkekZabflxjxb|Pv7]2[}usW8>0jxbcd:kmn`eslkci|k;hliafrtj`~n~94iov\gim?3gmhnxgcd99lr`tadf}j7}|`g^gntq6<2zycjQjmqvz[qnumzb#<$?;;qplcZcjx}sTxe|jsi*2-42vugnUna}zv_ujqavn/< ;?7}|`g^gntqX|axne&:)068twi`Wlg{xtQ{hsgpl-0.9=1{~biPelrw}Zrozlyc$:'>4:rqkbYbey~rSyf}erj+<,713yxdkRkbpu{\pmtb{a636=0>b:rqkbYbey~rSyf}erj\evubz}";%vugnUna}zv_ujqavnXizyn~y&9)0`8twi`Wlg{xtQ{hsgplZgt{lx$:'>b:rqkbYbey~rSyf}erj\evubz}"3%vugnUna}zv_ujqavnXflmjxh&:)0`8twi`Wlg{xtQ{hsgplZhboh~n$;'>b:rqkbYbey~rSyf}erj\j`af|l"<%5rne\bpjkW}byi~f'1(30?uthoVl~`aQ{hsgpl-4.9:1{~biPftno[qnumzb#?$?<;qplcZ`rdeUdk|h)6*56=wzfmTjxbc_ujqavn/= ;87}|`g^dvhiYs`{oxd%8&129svjaXn|fgSyf}erj+3,743yxdkRhzlm]wlwct`!2"=>5rne\bpjkW}byi~f'9(36?uthoVl~`aQ{hsgpl9?=87;j7}|`g^dvhiYs`{oxdRo|sdpw,5/6i2zycjQiumn\pmtb{aUj~k}t)3*5d=wzfmTjxbc_ujqavnXizyn~y&=)0c8twi`Wog`Rzgrdqk[dutm{~#?$?n;qplcZ`rdeUdk|h^cpw`ts =#:m6~}of]eqijX|axneQnsrgqp-3.9h1{~biPftno[qnumzbTm~}jru*5-4ga:rqkbYa}efTxe|jsi]bwvcu|!3"=n5rne\bpjkW}byi~fParqfvq:>294:m6~}of]eqijX|axneQaefcwa-6.9h1{~biPftno[qnumzbTbhintd*2-4g'>a:rqkbYa}efTxe|jsi]mabgsm!>"=l5rne\bpjkW}byi~fPndebp`.2!8k0|ah_gwohZrozlycSckhaug+2,7f3yxdkRhzlm]wlwct`Vdnklzj(6+2e>vugnUmyabPtipfwmYimnki%6&1`9svjaXn|fgSyf}erj\j`af|l"2%4re]geqgXkfex%=&119q`Zbf|hUhcx`{(5+24>tcWmkmRm`uov+1,773{nThlzn_bmvjq.1!8:0~iQkauc\gjsi|!="==5}d^fbpdYdg|d$5'>0:pg[agsiVidycz30?31?wbXlh~jSnaznu>;>5823{nTic84re]qwq5uu{}837yc/^ad+coagVrgbuQ:13z02Z4ddbU:4ya<6/ldk1=sz|o27x`kesdokr3<~hfbh;5xr^c`o3=pzVigg<>4ws]geqgXkfex%>&119tvZbf|hUhcx`{(0+24>quWmkmRm`uov+6,773~xThlzn_bmvjq.4!8:0{Qkauc\gjsi|!>"==5xr^fbpdYdg|d$8'>0:uq[agsiVidycz'6(33?rtXlh~jSnaznu*4-46<{UomyoPcnwmp->.991|~Rjnt`]`kphs 0#:>6y}_ecweZeh}g~757>15:uq[`h13~xT~~zr@Ar``==GHq?=>7H54;3xW1c==991;7?<2c4g6?4f:k=pb96=:09m0=5=>2.?4=4;7`9~W1e==991;7?<2c4g6?4f:k=0_<5<6;;h=h?4=a3`;?V2d2<:n6=4>33`5`7<5i;h37i;?6;295?7|[=o19==57;306g0c:38j>o94vU3;e?6=93;1=n>tS5g9155=?3;8>o8k2;0b6g1<,==86<{#9>o1=55m51494?5a2:08jvF;709Y01<5s8=1==4r$0:e>0613->;>4?::m64d<722e><94?::k622<722c>9k4?::m7`2<72-;3<7:ia:l23c<732e?h;4?:%3;4?2ai2d:;k4>;:m7`0<72-;3<7:ia:l23c<532e?h94?:%3;4?2ai2d:;k4<;:m7`6<72-;3<7:ia:l23c<332e?h?4?:%3;4?2ai2d:;k4:;:m7`5<72-;3<7:ia:l23c<132e?ok4?:%3;4?2ai2d:;k48;:m7g`<72-;3<7:ia:l23c54gc8j41a28807b:l2;29 4>72=lj7c?8f;30?>i3k80;6)?70;6ee>h6?o0:865`4b294?"6090?jl5a16d950=8:9l0ge=83.:4=4;f`9m52`=9010c9jk:18'5=6=!7?83>mm6`>7g82g>=h8187bd=i9>l1=i54o5f:>5<#91:18ko4n05e>4c<3f>o47>5$0:3>1`f3g;54gc8j41a2;807b:ma;29 4>72=lj7c?8f;00?>o31l0;6)?70;6bb>h6?o0;76g;9e83>!7?83>jj6`>7g82?>o31j0;6)?70;6bb>h6?o0976g;9c83>!7?83>jj6`>7g80?>o31h0;6)?70;6bb>h6?o0?76g;9883>!7?83>jj6`>7g86?>o3110;6)?70;6bb>h6?o0=76g;9683>!7?83>jj6`>7g84?>o3i?0;6)?70;6bb>h6?o0376g;a483>!7?83>jj6`>7g8:?>o3i=0;6)?70;6bb>h6?o0j76g;a283>!7?83>jj6`>7g8a?>o3i;0;6)?70;6bb>h6?o0h76g;a083>!7?83>jj6`>7g8g?>o3i90;6)?70;6bb>h6?o0n76g;9g83>!7?83>jj6`>7g8e?>o31?0;6)?70;6bb>h6?o0:<65f48794?"6090?mk5a16d954=5<6290;wE:81:&2tH552?!7?n3n<7bj9:188yg24290j:7?74;3`4~N3?81Q894>6z0;>71=:00h644n:c823?772;k1h7m5d;34>7g=:10:<7l5a;;96<<5?3w/=5h551;8 11==9=0(9j551:8 41>28=h7d;=3;29 4>72<8?7c?8f;28?l35:3:1(<6?:407?k70n3;07d;=1;29 4>72<8?7c?8f;08?l3583:1(<6?:407?k70n3907d;>f;29 4>72<8?7c?8f;68?l36m3:1(<6?:407?k70n3?07d;>d;29 4>72<8?7c?8f;48?l36k3:1(<6?:407?k70n3=07d;>b;29 4>72<8?7c?8f;:8?l37k3:17d;:e;29?l3193:17b;95;29?l3613:1(<6?:43b?k70n3:07d;>8;29 4>72<;j7c?8f;38?l36?3:1(<6?:43b?k70n3807d;>6;29 4>72<;j7c?8f;18?l36=3:1(<6?:43b?k70n3>07d;>4;29 4>72<;j7c?8f;78?l36;3:1(<6?:43b?k70n3<07d;>2;29 4>72<;j7c?8f;58?l3693:1(<6?:43b?k70n3207d;:d;29?j37n3:17d;=d;29 4>72<8n7c?8f;28?l35k3:1(<6?:40f?k70n3;07d;=b;29 4>72<8n7c?8f;08?l35i3:1(<6?:40f?k70n3907d;=9;29 4>72<8n7c?8f;68?l3503:1(<6?:40f?k70n3?07d;=7;29 4>72<8n7c?8f;48?l35>3:1(<6?:40f?k70n3=07d;=5;29 4>72<8n7c?8f;:8?j2?=3:17b:62;29 4>72=387c?8f;28?j2>93:1(<6?:5;0?k70n3;07b:60;29 4>72=387c?8f;08?j2?n3:1(<6?:5;0?k70n3907b:7e;29 4>72=387c?8f;68?j2?l3:1(<6?:5;0?k70n3?07b:7c;29 4>72=387c?8f;48?j2?j3:1(<6?:5;0?k70n3=07b:7a;29 4>72=387c?8f;:8?j2?13:1(<6?:5;0?k70n3307b;=f;29?l30;3:17d;<9;29 4>72<9j7c?8f;28?l3403:1(<6?:41b?k70n3;07d;<7;29 4>72<9j7c?8f;08?l34>3:1(<6?:41b?k70n3907d;<5;29 4>72<9j7c?8f;68?l34<3:1(<6?:41b?k70n3?07d;<3;29 4>72<9j7c?8f;48?l34:3:1(<6?:41b?k70n3=07d;<1;29 4>72<9j7c?8f;:8?l3483:1(<6?:41b?k70n3307b;?a;29?j37<3:17d;97;29?l2??3:17d;;4;29 4>72<>>7c?8f;28?l33;3:1(<6?:466?k70n3;07d;;2;29 4>72<>>7c?8f;08?l3393:1(<6?:466?k70n3907d;;0;29 4>72<>>7c?8f;68?l34n3:1(<6?:466?k70n3?07d;72<>>7c?8f;48?l34l3:1(<6?:466?k70n3=07d;72<>>7c?8f;:8?l34j3:1(<6?:466?k70n3307d;;f;29 4>72727272723:1(<6?:473?k70n3307b:74;29?l37l3:17d:78;29?l30<3:17b;90;29?j31>3:17d;:f;29?j2c?3:1(<6?:5db?k70n3:07b:k6;29 4>72=lj7c?8f;38?j2c=3:1(<6?:5db?k70n3807b:k4;29 4>72=lj7c?8f;18?j2c;3:1(<6?:5db?k70n3>07b:k2;29 4>72=lj7c?8f;78?j2c83:1(<6?:5db?k70n3<07b:lf;29 4>72=lj7c?8f;58?j2dm3:1(<6?:5db?k70n3207b:ld;29 4>72=lj7c?8f;;8?j2dk3:1(<6?:5db?k70n3k07b:lb;29 4>72=lj7c?8f;`8?j2di3:1(<6?:5db?k70n3i07b:l9;29 4>72=lj7c?8f;f8?j2d03:1(<6?:5db?k70n3o07b:l7;29 4>72=lj7c?8f;d8?j2d=3:1(<6?:5db?k70n3;;76a;c583>!7?83>mm6`>7g825>=h8187bd=i9>l1=?54o5a1>5<#91:18ko4n05e>45<3f>h=7>5$0:3>1`f3g;54gc8j41a28=07b:md;29 4>72=lj7c?8f;3;?>i3jj0;6)?70;6ee>h6?o0:565`4ef94?"6090?jl5a16d95d=d:9l0a?=83.:4=4;f`9m52`=9l10c9j7:18'5=6=!7?83>mm6`>7g815>=h8187bd=i9>l1>?54o5`b>5<#91:18ko4n05e>75<3`>2i7>5$0:3>1ga3g;4;h6:`?6=,82;69oi;o34b?7<3`>2o7>5$0:3>1ga3g;2m7>5$0:3>1ga3g;247>5$0:3>1ga3g;j:7>5$0:3>1ga3g;j87>5$0:3>1ga3g;j>7>5$0:3>1ga3g;j<7>5$0:3>1ga3g;2:7>5$0:3>1ga3g;=83.:4=4:5b9m52`=:21d98950;&2<5<2=j1e=:h53:9l100=83.:4=4:5b9m52`=<21d98;50;&2<5<2=j1e=:h55:9l102=83.:4=4:5b9m52`=>21d98=50;&2<5<2=j1e=:h57:9l104=83.:4=4:5b9m52`=021d9:?50;&2<5<2?;1e=:h50:9l126=83.:4=4:739m52`=921d9;h50;&2<5<2?;1e=:h52:9l13c=83.:4=4:739m52`=;21d9;j50;&2<5<2?;1e=:h54:9l13e=83.:4=4:739m52`==21d9;l50;&2<5<2?;1e=:h56:9l13g=83.:4=4:739m52`=?21d9;750;&2<5<2?;1e=:h58:9l13>=83.:4=4:739m52`=121d9<>50;9j15d=831d84:50;9j107=831d9;:50;9a02b=83;1<7>t$0:e>a1<@==h7E:81:mg2?6=3th?;h4?:083>5}#91l18:<4H55`?M2092e:;i4?::a6d6=83>1<7>t$0:e>a4<@==h7E:81:&f1?0>o6080;66a>8383>>{e<a2jl0D99l;I645>N3:2.:??4:629'a0<63`>>6=44i5d94?=h9181<75rb54:>5<4290;w)?7f;ae?M20k2B?;<5G439'564==?90(h;51:k71?6=3`>m6=44o0:1>5<>h7>53;294~"60o0hj6F;7b9K027<@=80(<==:440?!c2281b884?::k7b?6=3f;3>7>5;|`722<72<0;6=u+19d9`6=O<>i0D99>;I61?!74:3?=?6g;5;29?l212900e9h50;9j5=7=831d=5<50;9~f10?29086=4?{%3;b?ea3A>o3=3:17d:i:188k4>52900qo::c;291?6=8r.:4k4k3:J73f=O<>;0D9<4$011>0043`>>6=44i5494?=n8083>>i60;0;66sm47494?2=83:p(<6i:e08L11d3A><=6*j5;48m13=831b8k4?::k2<4<722e:4?4?::a033=83>1<7>t$0:e>a4<@==h7E:81:&f1?0>o6080;66a>8383>>{e1<7:50;2x 4>a2m80D99l;I645>"b=3<0e9;50;9j0c<722c:4<4?::m2<7<722wi8;h50;694?6|,82m6i<4H55`?M2092.n9784i5794?=n8083>>i60;0;66sm47g94?2=83:p(<6i:e08L11d3A><=6*j5;48m13=831b8k4?::k2<4<722e:4?4?::a642=83>1<7>t$0:e>a6<@==h7E:81:&f1?7>o3n3:17b?72;29?xd59:0;694?:1y'5=`=l91C8:m4H552?!c2281b884?::k7f?6=3`>m6=44o0:1>5<7>54;294~"60o0o<6F;7b9K027<,l?1=6g;5;29?l2e2900e9h50;9l5=4=831vn??>:187>5<7s-;3j7j?;I64g>N3?81/i84>;h66>5<>i60;0;66sm20294?2=83:p(<6i:e28L11d3A><=6*j5;38m13=831b8o4?::k7b?6=3f;3>7>5;|`14c<72=0;6=u+19d9`5=O<>i0D99>;%g6>4=n<<0;66g;b;29?l2a2900c<6=:188yg47m3:187>50z&25;h6a>5<=m50;694?6|,82m6i>4H55`?M2092.n97?4i5794?=nb383>1<729q/=5h5d19K02e<@==:7)k::09j00<722c?n7>5;h6e>5<8g8g4>N3?j1C8:?4$d795>o3=3:17d:m:188m1`=831d=5<50;9~f4d7290?6=4?{%3;b?b73A>>6=44i5`94?=n8383>>{e9hl1<7:50;2x 4>a2m:0D99l;I645>"b=3;0e9;50;9j0g<722c?j7>5;n3;6?6=3th:mh4?:583>5}#91l1h=5G46a8L1163-o>6<5f4483>>o3j3:17d:i:188k4>52900qo?nd;290?6=8r.:4k4k0:J73f=O<>;0(h;51:k71?6=3`>i6=44i5d94?=h9181<75rb0c`>5<3290;w)?7f;f3?M20k2B?;<5+e482?l222900e9l50;9j0c<722e:4?4?::a5dd=83>1<7>t$0:e>a6<@==h7E:81:&f1?7>o3n3:17b?72;29?xd6ih0;694?:1y'5=`=l91C8:m4H552?!c2281b884?::k7f?6=3`>m6=44o0:1>5<54;294~"60o0o<6F;7b9K027<,l?1=6g;5;29?l2e2900e9h50;9l5=4=831vn?;i:187>5<7s-;3j7j?;I64g>N3?81/i84>;h66>5<>i60;0;66sm24g94?2=83:p(<6i:e28L11d3A><=6*j5;38m13=831b8o4?::k7b?6=3f;3>7>5;|`11a<72=0;6=u+19d9`5=O<>i0D99>;%g6>4=n<<0;66g;b;29?l2a2900c<6=:188yg42k3:187>50z&25;h6a>5<8o50;694?6|,82m6i>4H55`?M2092.n97?4i5794?=n1<729q/=5h5d19K02e<@==:7)k::09j00<722c?n7>5;h6e>5<8g8g4>N3?j1C8:?4$d795>o3=3:17d:m:188m1`=831d=5<50;9~f4`f290?6=4?{%3;b?b73A>>6=44i5`94?=n8383>>{e9o31<7:50;2x 4>a2m:0D99l;I645>"b=3;0e9;50;9j0g<722c?j7>5;n3;6?6=3th:j54?:583>5}#91l1h=5G46a8L1163-o>6<5f4483>>o3j3:17d:i:188k4>52900qo?i7;290?6=8r.:4k4k0:J73f=O<>;0(h;51:k71?6=3`>i6=44i5d94?=h9181<75rb0d5>5<3290;w)?7f;f3?M20k2B?;<5+e482?l222900e9l50;9j0c<722e:4?4?::a5c3=83>1<7>t$0:e>a6<@==h7E:81:&f1?7>o3n3:17b?72;29?xd6n=0;694?:1y'5=`=l91C8:m4H552?!c2281b884?::k7f?6=3`>m6=44o0:1>5<54;294~"60o0o<6F;7b9K027<,l?1=6g;5;29?l2e2900e9h50;9l5=4=831vn5<7s-;3j7j?;I64g>N3?81/i84>;h66>5<>i60;0;66sm25g94?2=83:p(<6i:e28L11d3A><=6F;2:&277<2>:1/i84>;h66>5<>i60;0;66sm25f94?2=83:p(<6i:e28L11d3A><=6F;2:&277<2>:1/i84>;h66>5<>i60;0;66sm25a94?2=83:p(<6i:e28L11d3A><=6F;2:&277<2>:1/i84>;h66>5<>i60;0;66sm25`94?2=83:p(<6i:e28L11d3A><=6F;2:&277<2>:1/i84>;h66>5<>i60;0;66sm25c94?2=83:p(<6i:e28L11d3A><=6F;2:&277<2>:1/i84>;h66>5<>i60;0;66sm25;94?2=83:p(<6i:e28L11d3A><=6F;2:&277<2>:1/i84>;h66>5<>i60;0;66sm25:94?2=83:p(<6i:e28L11d3A><=6F;2:&277<2>:1/i84>;h66>5<>i60;0;66sm25594?2=83:p(<6i:e28L11d3A><=6F;2:&277<2>:1/i84>;h66>5<>i60;0;66sm25494?2=83:p(<6i:e28L11d3A><=6F;2:&277<2>:1/i84>;h66>5<>i60;0;66sm25794?2=83:p(<6i:e28L11d3A><=6F;2:&277<2>:1/i84>;h66>5<>i60;0;66sm1d:94?2=83:p(<6i:e28L11d3A><=6F;2:&277<2>:1/i84>;h66>5<>i60;0;66sm1d594?2=83:p(<6i:e28L11d3A><=6F;2:&277<2>:1/i84>;h66>5<>i60;0;66sm1d494?2=83:p(<6i:e28L11d3A><=6F;2:&277<2>:1/i84>;h66>5<>i60;0;66sm1d794?2=83:p(<6i:e28L11d3A><=6F;2:&277<2>:1/i84>;h66>5<>i60;0;66sm1d694?2=83:p(<6i:e28L11d3A><=6F;2:&277<2>:1/i84>;h66>5<>i60;0;66sm1d194?2=83:p(<6i:e28L11d3A><=6F;2:&277<2>:1/i84>;h66>5<>i60;0;66sm1d094?2=83:p(<6i:e28L11d3A><=6F;2:&277<2>:1/i84>;h66>5<>i60;0;66sm1d394?2=83:p(<6i:e28L11d3A><=6F;2:&277<2>:1/i84>;h66>5<>i60;0;66sm1d294?2=83:p(<6i:e28L11d3A><=6F;2:&277<2>:1/i84>;h66>5<>i60;0;66sm1e494?2=83:p(<6i:e28L11d3A><=6*j5;38m13=831b8o4?::k7b?6=3f;3>7>5;|`2`0<72=0;6=u+19d9`5=O<>i0D99>;%g6>4=n<<0;66g;b;29?l2a2900c<6=:188yg7c<3:187>50z&25;h6a>5<4H55`?M2092.n97?4i5794?=nd083>1<729q/=5h5d19K02e<@==:7)k::09j00<722c?n7>5;h6e>5<8g8g4>N3?j1C8:?4$d795>o3=3:17d:m:188m1`=831d=5<50;9~f4ea290?6=4?{%3;b?b73A>>6=44i5`94?=n8383>>{e9jo1<7:50;2x 4>a2m:0D99l;I645>"b=3;0e9;50;9j0g<722c?j7>5;n3;6?6=3th9?l4?:583>5}#91l1h=5G46a8L1163-o>6<5f4483>>o3j3:17d:i:188k4>52900qo<<9;290?6=8r.:4k4k0:J73f=O<>;0(h;51:k71?6=3`>i6=44i5d94?=h9181<75rb31;>5<3290;w)?7f;f3?M20k2B?;<5+e482?l222900e9l50;9j0c<722e:4?4?::a661=83>1<7>t$0:e>a6<@==h7E:81:&f1?7>o3n3:17b?72;29?xd5;?0;694?:1y'5=`=l91C8:m4H552?!c2281b884?::k7f?6=3`>m6=44o0:1>5<54;294~"60o0o<6F;7b9K027<,l?1=6g;5;29?l2e2900e9h50;9l5=4=831vn?=;:187>5<7s-;3j7j?;I64g>N3?81/i84>;h66>5<>i60;0;66sm22194?2=83:p(<6i:e28L11d3A><=6*j5;38m13=831b8o4?::k7b?6=3f;3>7>5;|`177<72=0;6=u+19d9`5=O<>i0D99>;%g6>4=n<<0;66g;b;29?l2a2900c<6=:188yg4493:187>50z&25;h6a>5<7>5;|`1`3<72<0;6=u+19d9`4=O<>i0D99>;%g6>4=n<<0;66g;6;29?l2e2900e9h50;9l5=4=831vn?j::186>5<7s-;3j7j>;I64g>N3?81/i84>;h66>5<>o3n3:17b?72;29?xd5l=0;684?:1y'5=`=l81C8:m4H552?!c2281b884?::k72?6=3`>i6=44i5d94?=h9181<75rb3f0>5<2290;w)?7f;f2?M20k2B?;<5+e482?l222900e9850;9j0g<722c?j7>5;n3;6?6=3th9h?4?:483>5}#91l1h<5G46a8L1163-o>6<5f4483>>o3>3:17d:m:188m1`=831d=5<50;9~f7b7290>6=4?{%3;b?b63A>>6=44i5494?=n0<729q/=5h5d29K02e<@==:7)k::79j00<722c?:7>5;h6e>5<5<55;294~"60o0o=6F;7b9K027<,l?1=6g;5;29?l212900e9l50;9j0c<722e:4?4?::a6f2=8391<7>t$0:e>11e3A>44?::m23g<722wi>n=50;194?6|,82m699m;I64g>N3?81b854?::k26<<722e:;o4?::a6gg=83>1<7>t$0:e>4543A>=7>5;h3;5;|`1g7<72:0;6=u+19d902d<@==h7E:81:k75;n34f?6=3th9n54?:583>5}#91l1=>=4H55`?M2092c?47>5;h72>5<5<53;294~"60o0?;o5G46a8L1163`>36=44i00:>5<8g8276=O<>i0D99>;h6;>5<h1<75rb3a3>5<4290;w)?7f;64f>N3?j1C8:?4i5:94?=n9;31<75`16`94?=zj;h?6=4;:183!7?n3;8?6F;7b9K027>o6010;66a>7c83>>{e:kl1<7=50;2x 4>a2==i7E:8c:J734=n<10;66g>2883>>i6?k0;66sm2c094?2=83:p(<6i:010?M20k2B?;<5f4983>>o293:17d?78;29?j70j3:17pl=bd83>6<729q/=5h546`8L11d3A><=6g;8;29?l7513:17b?8b;29?xd5j90;694?:1y'5=`=9:90D99l;I645>o303:17d;>:188m4>?2900c<9m:188yg4el3:1?7>50z&2329K02e<@==:7d:7:188m07=831b=5650;9l52d=831vn?ll:180>5<7s-;3j7:8b:J73f=O<>;0e9650;9j57?=831d=:l50;9~f7gd290?6=4?{%3;b?74;2B?;n5G4638m1>=831b9<4?::k2<=<722e:;o4?::a6`?=83?1<7>t$0:e>a7<@==h7E:81:&f1?7>o3j3:17d:i:188k4>52900qo;0(h;51:k71?6=3`>=6=44i5`94?=n8383>>{e:l=1<7;50;2x 4>a2m;0D99l;I645>"b=3;0e9;50;9j03<722c?n7>5;h6e>5<8g8g5>N3?j1C8:?4$d795>o3=3:17d:9:188m1d=831b8k4?::m2<7<722wi>h;50;794?6|,82m6i?4H55`?M2092.n97?4i5794?=n50z&25;h65>5<>i60;0;66sm2d194?3=83:p(<6i:e38L11d3A><=6*j5;38m13=831b8;4?::k7f?6=3`>m6=44o0:1>5<7>55;294~"60o0o=6F;7b9K027<,l?1=6g;5;29?l212900e9l50;9j0c<722e:4?4?::a6`7=83?1<7>t$0:e>a7<@==h7E:81:&f1?7>o3j3:17d:i:188k4>52900qo<84;290?6=8r.:4k4k2:J73f=O<>;0(h;56:k71?6=3`>m6=44i0:2>5<8g8g6>N3?j1C8:?4$d792>o3=3:17d:i:188m4>62900c<6=:188yg41n3:187>50z&25;h6a>5<50;194?6|,82m699m;I64g>N3?81b854?::k26<<722e:;o4?::a75?=8391<7>t$0:e>11e3A>44?::m23g<722wi>k:50;694?6|,82m6<=<;I64g>N3?81b854?::k65?6=3`;347>5;n34f?6=3th8<54?:283>5}#91l18:l4H55`?M2092c?47>5;h31=?6=3f;5;|`1b6<72=0;6=u+19d9565<@==h7E:81:k75<8g873g=O<>i0D99>;h6;>5<5<7>54;294~"60o0:?>5G46a8L1163`>36=44i4394?=n9121<75`16`94?=zj::=6=4<:183!7?n3>h1<75rb3d2>5<3290;w)?7f;307>N3?j1C8:?4i5:94?=n=80;66g>8983>>i6?k0;66sm31794?5=83:p(<6i:55a?M20k2B?;<5f4983>>o6:00;66a>7c83>>{e:o:1<7:50;2x 4>a28987E:8c:J734=n<10;66g:1;29?l7?03:17b?8b;29?xd48=0;6>4?:1y'5=`=<>h0D99l;I645>o303:17d?=9;29?j70j3:17pl=eg83>1<729q/=5h51218L11d3A><=6g;8;29?l362900e<67:188k41e2900qo=?3;297?6=8r.:4k4;7c9K02e<@==:7d:7:188m44>2900c<9m:188yg4bm3:187>50z&2=831d=:l50;9~f66529086=4?{%3;b?20j2B?;n5G4638m1>=831b=?750;9l52d=831vn?kk:187>5<7s-;3j7?<3:J73f=O<>;0e9650;9j14<722c:454?::m23g<722wi?=?50;194?6|,82m699m;I64g>N3?81b854?::k26<<722e:;o4?::a6`e=83>1<7>t$0:e>4543A>=7>5;h3;5;|`1ag<72=0;6=u+19d9565<@==h7E:81:k75<8g8g4>N3?j1C8:?4$d795>o3=3:17d:m:188m1`=831d=5<50;9~f67c290?6=4?{%3;b?b73A>>6=44i5`94?=n8383>>{e;8i1<7:50;2x 4>a2m:0D99l;I645>"b=3;0e9;50;9j0g<722c?j7>5;n3;6?6=3th8=o4?:583>5}#91l1h=5G46a8L1163-o>6<5f4483>>o3j3:17d:i:188k4>52900qo=>a;290?6=8r.:4k4k0:J73f=O<>;0(h;51:k71?6=3`>i6=44i5d94?=h9181<75rb23:>5<3290;w)?7f;f3?M20k2B?;<5+e482?l222900e9l50;9j0c<722e:4?4?::a74>=83>1<7>t$0:e>a6<@==h7E:81:&f1?7>o3n3:17b?72;29?xd49>0;694?:1y'5=`=l91C8:m4H552?!c2281b884?::k7f?6=3`>m6=44o0:1>5<54;294~"60o0o<6F;7b9K027<,l?1=6g;5;29?l2e2900e9h50;9l5=4=831vn>?;:187>5<7s-;3j7j?;I64g>N3?81/i84>;h66>5<>i60;0;66sm33:94?3=83:p(<6i:e38L11d3A><=6*j5;38m13=831b8;4?::k7f?6=3`>m6=44o0:1>5<54;294~"60o0:?>5G46a8L1163`>36=44i4394?=n9121<75`16`94?=zj;396=4;:183!7?n3;8?6F;7b9K027>o6010;66a>7c83>>{e:0;1<7:50;2x 4>a28987E:8c:J734=n<10;66g:1;29?l7?03:17b?8b;29?xd5190;694?:1y'5=`=9:90D99l;I645>o303:17d;>:188m4>?2900c<9m:188yg4?n3:187>50z&2=831d=:l50;9~f7>7290?6=4?{%3;b?74;2B?;n5G4638m1>=831b9<4?::k2<=<722e:;o4?::a62`=83>1<7>t$0:e>4543A>=7>5;h3;5;|`13`<72=0;6=u+19d9565<@==h7E:81:k75<8g8276=O<>i0D99>;h6;>5<h1<75rb35`>5<3290;w)?7f;307>N3?j1C8:?4i5:94?=n=80;66g>8983>>i6?k0;66sm3c`94?3=83:p(<6i:e38L11d3A><=6*j5;38m13=831b8;4?::k7f?6=3`>m6=44o0:1>5<55;294~"60o0o=6F;7b9K027<,l?1=6g;5;29?l212900e9l50;9j0c<722e:4?4?::a7gg=83?1<7>t$0:e>a5<@==h7E:81:&f1?0>o3n3:17d?71;29?j7?:3:17pl0<729q/=5h5d09K02e<@==:7)k::09j00<722c?:7>5;h6a>5<7>5;|`0g5<72<0;6=u+19d9`4=O<>i0D99>;%g6>4=n<<0;66g;6;29?l2e2900e9h50;9l5=4=831vn>lj:186>5<7s-;3j7j>;I64g>N3?81/i84>;h66>5<>o3n3:17b?72;29?xd4jo0;684?:1y'5=`=l81C8:m4H552?!c2281b884?::k72?6=3`>i6=44i5d94?=h9181<75rb2a2>5<2290;w)?7f;f2?M20k2B?;<5+e482?l222900e9850;9j0g<722c?j7>5;n3;6?6=3th8o?4?:483>5}#91l1h<5G46a8L1163-o>6<5f4483>>o3>3:17d:m:188m1`=831d=5<50;9~f6ea290>6=4?{%3;b?b63A>>6=44i5494?=n0<729q/=5h5d29K02e<@==:7)k::79j00<722c?:7>5;h6e>5<5<55;294~"60o0o=6F;7b9K027<,l?1=6g;5;29?l212900e9l50;9j0c<722e:4?4?::a7a6=83?1<7>t$0:e>a7<@==h7E:81:&f1?7>o3j3:17d:i:188k4>52900qo=k1;291?6=8r.:4k4k1:J73f=O<>;0(h;51:k71?6=3`>=6=44i5`94?=n8383>>{e;m>1<7;50;2x 4>a2m;0D99l;I645>"b=3;0e9;50;9j03<722c?n7>5;h6e>5<8g8g5>N3?j1C8:?4$d795>o3=3:17d:9:188m1d=831b8k4?::m2<7<722wi?i=50;794?6|,82m6i?4H55`?M2092.n97?4i5794?=n50z&25;h65>5<>i60;0;66sm3e494?3=83:p(<6i:e38L11d3A><=6*j5;38m13=831b8;4?::k7f?6=3`>m6=44o0:1>5<55;294~"60o0o=6F;7b9K027<,l?1=6g;5;29?l212900e9l50;9j0c<722e:4?4?::a7de=83?1<7>t$0:e>a7<@==h7E:81:&f1?7>o3j3:17d:i:188k4>52900qo=ne;291?6=8r.:4k4k1:J73f=O<>;0(h;51:k71?6=3`>=6=44i5`94?=n8383>>{e;hk1<7;50;2x 4>a2m;0D99l;I645>"b=3;0e9;50;9j03<722c?n7>5;h6e>5<8g8g5>N3?j1C8:?4$d795>o3=3:17d:9:188m1d=831b8k4?::m2<7<722wi?ll50;794?6|,82m6i?4H55`?M2092.n97?4i5794?=n50z&25;h65>5<>i60;0;66sm3`494?3=83:p(<6i:e18L11d3A><=6*j5;48m13=831b8;4?::k7b?6=3`;3=7>5;n3;6?6=3th8m54?:483>5}#91l1h<5G46a8L1163-o>6<5f4483>>o3>3:17d:m:188m1`=831d=5<50;9~f6g2290>6=4?{%3;b?b43A>>6=44i5494?=n8083>>i60;0;66sm38;94?5=83:p(<6i:55a?M20k2B?;<5f4983>>o6:00;66a>7c83>>{e;021<7=50;2x 4>a2==i7E:8c:J734=n<10;66g>2883>>i6?k0;66sm39g94?2=83:p(<6i:010?M20k2B?;<5f4983>>o293:17d?78;29?j70j3:17pl<9683>6<729q/=5h546`8L11d3A><=6g;8;29?l7513:17b?8b;29?xd40j0;694?:1y'5=`=9:90D99l;I645>o303:17d;>:188m4>?2900c<9m:188yg5>>3:1?7>50z&2329K02e<@==:7d:7:188m07=831b=5650;9l52d=831vn>7::180>5<7s-;3j7:8b:J73f=O<>;0e9650;9j57?=831d=:l50;9~f6>?290?6=4?{%3;b?74;2B?;n5G4638m1>=831b9<4?::k2<=<722e:;o4?::a7<2=8391<7>t$0:e>11e3A>44?::m23g<722wi?5850;694?6|,82m6<=<;I64g>N3?81b854?::k65?6=3`;347>5;n34f?6=3th85>4?:283>5}#91l18:l4H55`?M2092c?47>5;h31=?6=3f;5;|`0<1<72=0;6=u+19d9565<@==h7E:81:k75<8g873g=O<>i0D99>;h6;>5<5<7>54;294~"60o0:?>5G46a8L1163`>36=44i4394?=n9121<75`16`94?=zj:3:6=4<:183!7?n3>h1<75rb2:3>5<3290;w)?7f;307>N3?j1C8:?4i5:94?=n=80;66g>8983>>i6?k0;66sm38294?5=83:p(<6i:55a?M20k2B?;<5f4983>>o6:00;66a>7c83>>{e;>o1<7:50;2x 4>a28987E:8c:J734=n<10;66g:1;29?l7?03:17b?8b;29?xd4mh0;684?:1y'5=`=l81C8:m4H552?!c2281b884?::k72?6=3`>i6=44i5d94?=h9181<75rb2g:>5<2290;w)?7f;f2?M20k2B?;<5+e482?l222900e9850;9j0g<722c?j7>5;n3;6?6=3th8i54?:483>5}#91l1h<5G46a8L1163-o>6<5f4483>>o3>3:17d:m:188m1`=831d=5<50;9~f6c0290>6=4?{%3;b?b63A>>6=44i5494?=n0<729q/=5h5d09K02e<@==:7)k::09j00<722c?:7>5;h6a>5<6=4::183!7?n3n:7E:8c:J734=#m<0:7d:::188m10=831b8o4?::k7b?6=3f;3>7>5;|`0a1<72<0;6=u+19d9`4=O<>i0D99>;%g6>4=n<<0;66g;6;29?l2e2900e9h50;9l5=4=831vn>k<:186>5<7s-;3j7j>;I64g>N3?81/i84>;h66>5<>o3n3:17b?72;29?xd4m;0;684?:1y'5=`=l81C8:m4H552?!c2281b884?::k72?6=3`>i6=44i5d94?=h9181<75rb2g2>5<2290;w)?7f;f2?M20k2B?;<5+e482?l222900e9850;9j0g<722c?j7>5;n3;6?6=3th8??4?:583>5}#91l1=>=4H55`?M2092c?47>5;h72>5<5<54;294~"60o0:?>5G46a8L1163`>36=44i4394?=n9121<75`16`94?=zj:9?6=4;:183!7?n3;8?6F;7b9K027>o6010;66a>7c83>>{e;:?1<7:50;2x 4>a28987E:8c:J734=n<10;66g:1;29?l7?03:17b?8b;29?xd4;?0;694?:1y'5=`=9:90D99l;I645>o303:17d;>:188m4>?2900c<9m:188yg53=3:187>50z&2=831d=:l50;9~f621290?6=4?{%3;b?74;2B?;n5G4638m1>=831b9<4?::k2<=<722e:;o4?::a711=83>1<7>t$0:e>4543A>=7>5;h3;5;|`00=<72=0;6=u+19d9565<@==h7E:81:k75<8g8276=O<>i0D99>;h6;>5<h1<75rb27a>5<3290;w)?7f;307>N3?j1C8:?4i5:94?=n=80;66g>8983>>i6?k0;66sm34a94?2=83:p(<6i:010?M20k2B?;<5f4983>>o293:17d?78;29?j70j3:17pl<5e83>1<729q/=5h51218L11d3A><=6g;8;29?l362900e<67:188k41e2900qo=:e;290?6=8r.:4k4>329K02e<@==:7d:7:188m07=831b=5650;9l52d=831vn>;i:187>5<7s-;3j7?<3:J73f=O<>;0e9650;9j14<722c:454?::m23g<722wi?;k50;694?6|,82m6i>4H55`?M2092.n97?4i5794?=n1<729q/=5h5d19K02e<@==:7)k::09j00<722c?n7>5;h6e>5<8g8g5>N3?j1C8:?4$d795>o3=3:17d:9:188m1d=831b8k4?::m2<7<722wi8?j50;794?6|,82m6i:4H55`?M2092.n97?4i5794?=nm6=44i0:0>5<8g8g0>N3?j1C8:?4$d795>o3=3:17d:9:188m1`=831b=5=50;9l5=4=831vn95<7s-;3j7j;;I64g>N3?81/i84>;h66>5<>o60:0;66a>8383>>{e<;31<7;50;2x 4>a2m>0D99l;I645>"b=3;0e9;50;9j03<722c?j7>5;h3;7?6=3f;3>7>5;|`76=<72<0;6=u+19d9`1=O<>i0D99>;%g6>4=n<<0;66g;6;29?l2a2900e<6<:188k4>52900qo:=6;291?6=8r.:4k4k4:J73f=O<>;0(h;51:k71?6=3`>=6=44i5d94?=n9191<75`19094?=zj=8>6=4::183!7?n3n?7E:8c:J734=#m<0:7d:::188m10=831b8k4?::k2<6<722e:4?4?::a072=83?1<7>t$0:e>a2<@==h7E:81:&f1?7>o3n3:17d?73;29?j7?:3:17pl;2283>0<729q/=5h5d59K02e<@==:7)k::09j00<722c?:7>5;h6e>5<5<9>7>55;294~"60o0o86F;7b9K027<,l?1=6g;5;29?l212900e9h50;9j5=5=831d=5<50;9~f146290>6=4?{%3;b?b33A>>6=44i5494?=n8283>>i60;0;66sm43294?3=83:p(<6i:e68L11d3A><=6*j5;38m13=831b8;4?::k7b?6=3`;3?7>5;n3;6?6=3th?=k4?:483>5}#91l1h95G46a8L1163-o>6<5f4483>>o3>3:17d:i:188m4>42900c<6=:188yg26m3:197>50z&25;h65>5<5<2290;w)?7f;f7?M20k2B?;<5+e482?l222900e9850;9j0c<722c:4>4?::m2<7<722wi8m6=44i0:0>5<8g8g0>N3?j1C8:?4$d795>o3=3:17d:9:188m1`=831b=5=50;9l5=4=831vn9?7:186>5<7s-;3j7j;;I64g>N3?81/i84>;h66>5<>o60:0;66a>8383>>{e<8=1<7;50;2x 4>a2m>0D99l;I645>"b=3;0e9;50;9j03<722c?j7>5;h3;7?6=3f;3>7>5;|`753<72<0;6=u+19d9`1=O<>i0D99>;%g6>4=n<<0;66g;6;29?l2a2900e<6<:188k4>52900qo:>5;291?6=8r.:4k4k4:J73f=O<>;0(h;51:k71?6=3`>=6=44i5d94?=n9191<75`19094?=zj=;?6=4::183!7?n3n?7E:8c:J734=#m<0:7d:::188m10=831b8k4?::k2<6<722e:4?4?::a045=83?1<7>t$0:e>a2<@==h7E:81:&f1?7>o3n3:17d?73;29?j7?:3:17pl;1383>0<729q/=5h5d59K02e<@==:7)k::09j00<722c?:7>5;h6e>5<5<8?7>55;294~"60o0o86F;7b9K027<,l?1=6g;5;29?l212900e9h50;9j5=5=831d=5<50;9~f155290>6=4?{%3;b?b33A>>6=44i5494?=n8283>>i60;0;66sm42394?3=83:p(<6i:e68L11d3A><=6*j5;38m13=831b8;4?::k7b?6=3`;3?7>5;n3;6?6=3th??=4?:483>5}#91l1h95G46a8L1163-o>6<5f4483>>o3>3:17d:i:188m4>42900c<6=:188yg25n3:197>50z&25;h65>5<5<2290;w)?7f;f7?M20k2B?;<5+e482?l222900e9850;9j0c<722c:4>4?::m2<7<722wi8?950;794?6|,82m6i:4H55`?M2092.n97?4i5794?=nm6=44i0:0>5<8g8g0>N3?j1C8:?4$d795>o3=3:17d:9:188m1`=831b=5=50;9l5=4=831vn9??:186>5<7s-;3j7j;;I64g>N3?81/i84>;h66>5<>o60:0;66a>8383>>{ea288n7E:8c:J734=#m<0:56gk9;29?lbf2900c<9m:188yg2183:1?7>50z&2t$0:e>44b3A>5;hfb>5<8g826`=O<>i0D99>;%g6>4b>i6?k0;66sm1`294?5=83:p(<6i:00f?M20k2B?;<5+e482`>oc13:17djn:188k41e2900qo?6f;297?6=8r.:4k4>2d9K02e<@==:7)k::0f8ma?=831bhl4?::m23g<722wi=4k50;194?6|,82m6<N3?81/i84>d:kg=?6=3`nj6=44o05a>5<53;294~"60o0:>h5G46a8L1163-o>67c83>>{e90i1<7=50;2x 4>a288n7E:8c:J734=#m<0:h6gk9;29?lbf2900c<9m:188yg7>j3:1?7>50z&2t$0:e>44b3A>5;hfb>5<8g826`=O<>i0D99>;%g6>4b>i6?k0;66sm18:94?5=83:p(<6i:00f?M20k2B?;<5+e482`>oc13:17djn:188k41e2900qo?67;297?6=8r.:4k4>2d9K02e<@==:7)k::0f8ma?=831bhl4?::m23g<722wi=4850;194?6|,82m6<N3?81/i84>d:kg=?6=3`nj6=44o05a>5<53;294~"60o0:>h5G46a8L1163-o>67c83>>{e90>1<7=50;2x 4>a288n7E:8c:J734=#m<0:h6gk9;29?lbf2900c<9m:188yg7>;3:1?7>50z&2t$0:e>44b3A>5;hfb>5<8g826`=O<>i0D99>;%g6>4b>i6?k0;66sm18294?5=83:p(<6i:00f?M20k2B?;<5+e482`>oc13:17djn:188k41e2900qo<83;290?6=8r.:4k4>2g9K02e<@==:7)k::ba8ma?=831bhl4?::kgf?6=3f;5;|`15=<72=0;6=u+19d957`<@==h7E:81:&f1?433`n26=44iec94?=nlk0;66a>7c83>>{e9k<1<7:50;2x 4>a288m7E:8c:J734=#m<0986gk9;29?lbf2900eil50;9l52d=831vn?9>:186>5<7s-;3j7?<0:J73f=O<>;0(h;51`9j`<<722com7>5;hfa>5<>oci3:17djm:188mae=831d=:l50;9~f4d?290>6=4?{%3;b?7482B?;n5G4638 `3=9o1bh44?::kge?6=3`ni6=44iea94?=h9>h1<75rb354>5<2290;w)?7f;304>N3?j1C8:?4$d7964=nl00;66gka;29?lbe2900eim50;9l52d=831vn?8m:187>5<7s-;3j7?=f:J73f=O<>;0(h;52c9j`<<722com7>5;hfa>5<8g826`=O<>i0D99>;%g6>4b>i6?k0;66sm1cc94?5=83:p(<6i:00f?M20k2B?;<5+e482`>oc13:17djn:188k41e2900qo<>e;290?6=8r.:4k4>2g9K02e<@==:7)k::368ma?=831bhl4?::kgf?6=3f;5;|`2ff<72=0;6=u+19d957`<@==h7E:81:&f1?433`n26=44iec94?=nlk0;66a>7c83>>{e:;:1<7;50;2x 4>a289;7E:8c:J734=#m<0:j6gk9;29?lbf2900eil50;9j`f<722e:;o4?::a5gc=83?1<7>t$0:e>4573A>5;hfb>5<>i6?k0;66sm33c94?3=83:p(<6i:013?M20k2B?;<5+e4814>oc13:17djn:188mad=831bhn4?::m23g<722wi88o50;694?6|,82m6<N3?81/i84:0:kg=?6=3`nj6=44ie`94?=h9>h1<75rb34b>5<2290;w)?7f;304>N3?j1C8:?4$d7957=nl00;66gka;29?lbe2900eim50;9l52d=831vn?7k:180>5<7s-;3j7?=e:J73f=O<>;0(h;5239j`<<722com7>5;n34f?6=3th94l4?:283>5}#91l1=?k4H55`?M2092.n97<=;hf:>5<>5fd883>>oci3:17djm:188mae=831d=:l50;9~f634290>6=4?{%3;b?7482B?;n5G4638 `3=::1bh44?::kge?6=3`ni6=44iea94?=h9>h1<75rb263>5<2290;w)?7f;304>N3?j1C8:?4$d7966=nl00;66gka;29?lbe2900eim50;9l52d=831vn>87:186>5<7s-;3j7?<0:J73f=O<>;0(h;5229j`<<722com7>5;hfa>5<>5fd883>>oci3:17djm:188mae=831d=:l50;9~f65a290>6=4?{%3;b?7482B?;n5G4638 `3=::1bh44?::kge?6=3`ni6=44iea94?=h9>h1<75rb3;`>5<2290;w)?7f;304>N3?j1C8:?4$d7966=nl00;66gka;29?lbe2900eim50;9l52d=831vn?66:186>5<7s-;3j7?<0:J73f=O<>;0(h;5229j`<<722com7>5;hfa>5<>5fd883>>oci3:17djm:188mae=831d=:l50;9~f636290>6=4?{%3;b?7482B?;n5G4638 `3=::1bh44?::kge?6=3`ni6=44iea94?=h9>h1<75rb21f>5<2290;w)?7f;304>N3?j1C8:?4$d7966=nl00;66gka;29?lbe2900eim50;9l52d=831vn?7m:186>5<7s-;3j7?<0:J73f=O<>;0(h;5229j`<<722com7>5;hfa>5<>5fd883>>oci3:17djm:188mae=831d=:l50;9~f601290>6=4?{%3;b?7482B?;n5G4638 `3=::1bh44?::kge?6=3`ni6=44iea94?=h9>h1<75rb273>5<2290;w)?7f;304>N3?j1C8:?4$d7966=nl00;66gka;29?lbe2900eim50;9l52d=831vn>=k:186>5<7s-;3j7?<0:J73f=O<>;0(h;5229j`<<722com7>5;hfa>5<>5fd883>>oci3:17djm:188mae=831d=:l50;9~f7>0290>6=4?{%3;b?7482B?;n5G4638 `3=::1bh44?::kge?6=3`ni6=44iea94?=h9>h1<75rb252>5<3290;w)?7f;31b>N3?j1C8:?4$d79ga=nl00;66gka;29?lbe2900c<9m:188yg51k3:187>50z&25;n34f?6=3th9m?4?:583>5}#91l1=?h4H55`?M2092.n97mk;hf:>5<>i6?k0;66sm37794?2=83:p(<6i:00e?M20k2B?;<5+e486?lb>2900eio50;9j`g<722e:;o4?::a71`=83>1<7>t$0:e>44a3A>7c83>>{e;:i1<7:50;2x 4>a288m7E:8c:J734=#m<0>7dj6:188mag=831bho4?::m23g<722wi>4750;794?6|,82m6<=?;I64g>N3?81/i84=3:kg=?6=3`nj6=44ie`94?=nlj0;66a>7c83>>{e:1<1<7;50;2x 4>a289;7E:8c:J734=#m<09?6gk9;29?lbf2900eil50;9j`f<722e:;o4?::a675=8391<7>t$0:e>44b3A>5;hfb>5<8g826`=O<>i0D99>;%g6>74>i6?k0;66sm23494?2=83:p(<6i:00e?M20k2B?;<5+e482a>oc13:17djn:188mad=831d=:l50;9~f4e3290?6=4?{%3;b?75n2B?;n5G4638 `3=9l1bh44?::kge?6=3`ni6=44o05a>5<7>53;294~"60o0:>h5G46a8L1163-o>67c83>>{e:kh1<7<50;2x 4>a288o7E:8c:J734=#m<0:=6gk9;29?j70j3:17pl=b883>7<729q/=5h513f8L11d3A><=6*j5;32?lb>2900c<9m:188yg4e?3:1>7>50z&25<7s-;3j7?=d:J73f=O<>;0(h;5109j`<<722e:;o4?::a6g5=8381<7>t$0:e>44c3A>5;n34f?6=3th9n<4?:383>5}#91l1=?j4H55`?M2092.n97?>;hf:>5<8g826a=O<>i0D99>;%g6>47>i6?k0;66sm39d94?4=83:p(<6i:00g?M20k2B?;<5+e4825>oc13:17b?8b;29?xd40m0;6?4?:1y'5=`=9;n0D99l;I645>"b=3;:7dj6:188k41e2900qo=7b;296?6=8r.:4k4>2e9K02e<@==:7)k::038ma?=831d=:l50;9~f6>>29096=4?{%3;b?75l2B?;n5G4638 `3=981bh44?::m23g<722wi?5950;094?6|,82m6<N3?81/i84>1:kg=?6=3f;5;|`0<0<72;0;6=u+19d957b<@==h7E:81:&f1?763`n26=44o05a>5<52;294~"60o0:>i5G46a8L1163-o>6h1<75rb2:2>5<5290;w)?7f;31`>N3?j1C8:?4$d7954=nl00;66a>7c83>>{e;>l1<7<50;2x 4>a288o7E:8c:J734=#m<0:=6gk9;29?j70j3:17pl=c483>7<729q/=5h513f8L11d3A><=6*j5;32?lb>2900c<9m:188yg5>i3:1>7>50z&25<7s-;3j7?=e:J73f=O<>;0(h;5239j`<<722com7>5;n34f?6=3th9j44?:283>5}#91l1=?k4H55`?M2092.n97<=;hf:>5<?5fd883>>oci3:17b?8b;29?xd5nk0;6>4?:1y'5=`=9;o0D99l;I645>"b=3897dj6:188mag=831d=:l50;9~f7`d29086=4?{%3;b?75m2B?;n5G4638 `3=:;1bh44?::kge?6=3f;5;|`1ba<72:0;6=u+19d957c<@==h7E:81:&f1?453`n26=44iec94?=h9>h1<75rb3df>5<4290;w)?7f;31a>N3?j1C8:?4$d7967=nl00;66gka;29?j70j3:17pl=fg83>6<729q/=5h513g8L11d3A><=6*j5;01?lb>2900eio50;9l52d=831vn?h::180>5<7s-;3j7?=e:J73f=O<>;0(h;5239j`<<722com7>5;n34f?6=3th8>n4?:483>5}#91l1=>>4H55`?M2092.n97j:;hf:>5<>ock3:17b?8b;29?xd4:k0;684?:1y'5=`=9::0D99l;I645>"b=38;7dj6:188mag=831bho4?::kgg?6=3f;5;|`036<72:0;6=u+19d957c<@==h7E:81:&f1?763`n26=44iec94?=h9>h1<75rb3d4>5<5290;w)?7f;31<>N3?j1C8:?4ie:94?=h9>h1<75rb24g>5<5290;w)?7f;31<>N3?j1C8:?4ie:94?=h9>h1<75rb301>5<1290;w)?7f;305>N3?j1C8:?4$d7960=nl00;66gka;29?lbe2900eim50;9l57g=831d=:l50;9~f4e7290=6=4?{%3;b?7492B?;n5G4638 `3=:<1bh44?::kge?6=3`ni6=44iea94?=h9;k1<75`16`94?=zj=?36=477;294~N3?81/=5h51968^12=ir21>;4j:07956<6j3l1=;4>4;3`>x"6:>087)jk:59'``<33-nm695+e187?!c62=1/i?4;;%g0>1=#kh0hi6*j6;68 `1=<2.n47:4$d;90>"bi3>0(hl54:&fg?2<,ln186*je;68 ``=<2.m<7:4$g390>"a:3>0(k=54:&e0?2<,o?186*i6;68 c1=<2.m47:4$g;90>"ai3>0(kl54:&eg?2<,on186*ie;68 c`=<2.:<=4;;%335?2<,8:9695+11190>"68=0?7)??5;68 4612=1/==954:&24=<33-;;57:4$02b>1=#99h186*>0b87?!77l3>0(<>j:59'55`=<2.:==4;;%325?2<,8;9695+10190>"69=0?7)?>5;68 4712=1/=<954:&25=<33-;:57:4$03b>1=#98h186*>1b87?!76l3>0(=4;;%315?2<,889695+13190>"6:=0?7)?=5;68 4412;1/=575409'a1<33-;3n7<4$555>4>23-><;7?75:l:`?687826>h60>0986`;79826>h3?00986*lb;af?!7?k390e9750;9j0d<722c?;94?::k`=?6=3`2<6=4+1929l1?65f19g94?=n;?0;6)?70;16?k70n3:07d=;:18'5=6=;<1e=:h51:9j76<72-;3<7=:;o34b?4<3`996=4+192970=i9>l1?65f3083>!7?839>7c?8f;68?l57290/=5>5349m52`==21b>k4?:%3;4?523g;5<#91:1?85a16d93>=n:m0;6)?70;16?k70n3207dl1=65f3e83>!7?839m7c?8f;08?l5d290/=5>53g9m52`=;21b?o4?:%3;4?5a3g;5<#91:1?k5a16d91>=n;00;6)?70;1e?k70n3<07d=7:18'5=6=;o1e=:h57:9j72<72-;3<7=i;o34b?><3`?26=4+19291==i9>l1<65f5683>!7?83?37c?8f;38?l31290/=5>5599m52`=:21b984?:%3;4?3?3g;5<#91:1955a16d90>=n=:0;6)?70;7;?k70n3?07d8=:18'5=6==11e=:h56:9j24<72-;3<7;7;o34b?1<3`<;6=4+19291==i9>l1465f5g83>!7?83?37c?8f;;8?l3b290/=5>5599m52`=i21b9i4?:%3;4?3?3g;5<#91:1955a16d9g>=n=k0;6)?70;7;?k70n3n07d;n:18'5=6==11e=:h5e:9j17<72-;3<7;7;o34b?`<3`2=6=4+1929<0=i9>l1<65f8583>!7?832>7c?8f;38?jd0290/=5>5b79m52`=821dn84?:%3;4?d13g;5<#91:1n;5a16d96>=hj;0;6)?70;`5?k70n3907bl>:18'5=6=j?1e=:h54:9lf5<72-;3<7l9;o34b?3<3fkm6=4+1929f3=i9>l1:65`ad83>!7?83h=7c?8f;58?jgc290/=5>5b79m52`=021dmn4?:%3;4?d13g;5<#91:1n;5a16d9e>=hih0;6)?70;`5?k70n3h07bo7:18'5=6=j?1e=:h5c:9le2<72-;3<7l9;o34b?b<3fk=6=4+1929f3=i9>l1i65`a483>!7?83h=7c?8f;d8?jg3290/=5>5b79m52`=9910cl=50;&2<52d:;k4>1:9le7<72-;3<7l9;o34b?7532ej=7>5$0:3>g05<#91:1n;5a16d951=818a2>h6?o0:965`bd83>!7?83h=7c?8f;35?>iel3:1(<6?:c48j41a28=07bll:18'5=6=j?1e=:h51998kgd=83.:4=4m6:l23c<6121dnl4?:%3;4?d13g;4d<3fh36=4+1929f3=i9>l1=n54oc694?"6090i:6`>7g82`>=hi00;6)?70;`5?k70n3;n76a6e;29 4>72k<0b<9i:0d8?je0290/=5>5c79m52`=821do84?:%3;4?e13g;5<#91:1o;5a16d96>=hk:0;6)?70;a5?k70n3907dm7:188m4>c2900e99::188m2e=83.:4=48b:l23c<732c5$0:3>2d7g81?>o0?3:1(<6?:6`8j41a2:10e:850;&2<5<0j2d:;k4;;:k41?6=,82;6:l4n05e>0=>1<7*>8184f>h6?o0=76g83;29 4>72>h0b<9i:698m24=83.:4=48b:l23c5$0:3>2d7g8b?>o1n3:1(<6?:6`8j41a2k10e;j50;&2<5<0j2d:;k4l;:k5g?6=,82;6:l4n05e>a=8184f>h6?o0n76g9a;29 4>72>h0b<9i:g98m3?=83.:4=48b:l23c<6821b:54?:%3;4?1e3g;;:k53?6=,82;6:l4n05e>44<3`<=6=4+19293g=i9>l1=>54i7794?"60907g820>=n>=0;6)?70;5a?k70n3;>76g73;29 4>72>h0b<9i:048?l>5290/=5>57c9m52`=9>10e5?50;&2<5<0j2d:;k4>8:9j<5<72-;3<79m;o34b?7>32c5$0:3>2d5<#91:1;o5a16d95g=n1<7*>8184f>h6?o0:o65f7883>!7?83=i7c?8f;3g?>o1m3:1(<6?:6`8j41a28o07d8<:18'5=6=?k1e=:h51g98m=d=83.:4=47a:l23c<732c357>5$0:3>=g7g81?>i>;3:1(<6?:808j41a2910c4?50;&2<5<>:2d:;k4>;:m:4?6=,82;64<4n05e>7=818:6>h6?o0876a7e;29 4>72080b<9i:598k=b=83.:4=462:l23c<232e2o7>5$0:3><46`>7g84?>i>i3:1(<6?:808j41a2110c4750;&2<5<>:2d:;k46;:m:d=818:6>h6?o0i76a66;29 4>72080b<9i:b98k<3=83.:4=462:l23c5$0:3><46`>7g8e?>id:3:1(<6?:b38j41a2910cn>50;&2<5;:p10b=833ty>9o4?:6gxZ1?33W?=:6P:659]0=2X3191U85h4^5:f?[2?l2T?4n5Q49`8Z1>f3W>356P:709]126X2>01U9;64^47b?[3212T>955Q5458Z0313W?>96P:559]105m70::c;6e?821>3>m70:95;6e?821<3>m70:9f;6e?821m3>m70;51:0>=63=93865>;5180>=63=91865>;50o0>=63=81865>;5?o0>=63=7d865>;5?m0>=63=7b865>;40l0>=63<8b865>;40h0>=63<89865>;40?0>=63<85865>;40;0>=63<81865>;4?l0>=63<33865>;4;:0>=63<35865>;4;<0>=63<37865>;4<<0>=63<47865>;4<>0>=63<49865>;4<00>=63<5c865>;4=j0>=63<5e865>;4=l0>=63<5g865>;3=103;63;59822e<5=?36:o4=57;>2><5=?36:94=57;>20<5=?36:;4=57;>22<5=?36:=4=57;>24<5=?36:?4=57;>26<5=?36;h4=57;>3b<5=?36;m4=57;>3d<5=?36;o4=57;>3?<5=?36;64=57;>31<5=?36;84=57;>33<5=?36;:4=57;>=5<5=?365<4=57;>=7<5=?365>4=57;>2`<5=?36:k4=57;>2b<5=?36:74=57;>3c<5=?36;=4=57;>=d<5=?36574=57;>=>52z\7<0=:;?k1=5<4}r76b?6=;rT>9k5247595=7<5=?h6<6>;|q130<72;qU9=:4=356>4>53ty>;>4?:2y]125<5:=96i74=250>a?=7>569y]107<5;k;69;4=57f>13<5=?o69;4=57`>13<5=<=69;4=546>13<5=13<5;;869;4=331>13<5;;:69;4=333>13<5;:m69;4=32f>13<5;:o69;4=32`>13<5;<;69;4=37e>13<5;?n69;4=37g>13<5;?h69;4=37a>13<5;?j69;4=37:>13<5;?369;4=36f>13<5;>o69;4=36`>13<5;>i69;4=36b>13<5;>269;4=36;>13<5;><69;4=365>13<5;>>69;4=0f5>13<58n>69;4=0f7>13<58n869;4=0f1>13<58n:69;4=0f3>13<58im69;4=0af>13<5;n<69;4=3f5>13<5;n>69;4=3f7>13<5;n869;4=3f1>13<5;n;69;4=3ae>13<5;n:69;4=3g:>13<5;o369;4=3g4>13<5;o=69;4=3g6>13<5;o?69;4=3g0>13<5;o969;4=3g2>13<5;=?69;4=356>13<5;13<5=8o69;4=50`>13<5=8i69;4=50b>13<5=8269;4=50;>13<5=8=69;4=506>13<5=8?69;4=500>13<5=8969;4=502>13<5=8;69;4=53e>13<5=;n69;4=53g>13<5=;i69;4=53b>13<5=;269;4=53;>13<5=;<69;4=535>13<5=;>69;4=537>13<5=;869;4=531>13<5=9869;4=511>13<5=9:69;4=513>13<5=8m69;4=50f>13<5=8<69;4=53`>13<5=;:69;4=533>13<5=?369o4}r15b?6=:rT>563y]131<5=<269;4=544>13<5=<369;4=54e>13<5=13<58h:69;4=0`3>13<58km69;4=0cf>13<58ko69;4=0c`>13<58ki69;4=0cb>13<58lj69;4=0d:>13<58l369;4=0d4>13<58l=69;4=0d6>13<58l?69;4=0d0>13<58l969;4=0g;>13<58o<69;4=0g5>13<58o>69;4=0g7>13<58o869;4=0g1>13<58o:69;4=0g3>13<5;9j69;4=31:>13<5;9369;4=314>13<5;9=69;4=316>13<5;9?69;4=310>13<5;9969;4=312>13<5:;>69;4=23g>13<5:;h69;4=23a>13<5:;j69;4=23:>13<5:;369;4=234>13<5:;=69;4=237>13<5:8369;4=2`a>13<5:h269;4=2`b>13<5:hh69;4=2`g>13<5:i;69;4=2`f>13<5:hm69;4=2a2>13<5:i969;4=2ae>13<5:io69;4=2af>13<5:n;69;4=2f2>13<5:n?69;4=2f1>13<5:n869;4=2f6>13<5:n=69;4=2cg>13<5:kh69;4=2cf>13<5:kj69;4=2c:>13<5:ki69;4=2c4>13<5:k=69;4=2c;>13<5:k>69;4=2gb>13<5:o269;4=2g;>13<5:o<69;4=2g5>13<5:o>69;4=2g7>13<5:o869;4=2g1>13<5:o:69;4=24f>13<5:13<5=?36974}r11>k5233:95=452z\7`2=:<831=5<4}r1e7?6=:rT?h;5240:95=47>52z\7`0=:<8=1=5<4}r1e5?6=:rT?h95240495=452z\7`6=:<8?1=5<4}r1fb?6=:rT?h?5240695=452z\7`5=:<891=5<4}r1f`?6=:rT?ok5240095=4;j7>52z\7g`=:<:91=5<4}r63a?6=:rT?oi5242095=4;h7>52z\7gf=:<:;1=5<4}r63g?6=:rT?oo5242295=4;n7>52z\7gd=:<;l1=5<4}r63e?6=:rT?o45243g95=4;57>52z\7g==:<;=1=5<4}r636?6=:rT?o:5240a95=452z\7g0=:<8;1=5<4}r1fg?6=:rT?o95240295=4;47>52z\7g6=:<;n1=5<4}r633?6=:rT?o?5243a95=4;:7>52z\7g4=:<;h1=5<4}r631?6=:rT?o=5243c95=4;87>52z\7fc=:<;31=5<4}r637?6=:rT?nh5243:95=4;=7>52z\7fa=:<;<1=5<4}r634?6=:rT?nn5243795=452z\7`a=:<;>1=5<4}r1ea?6=:rT?hn5243195=452z\7`g=:<;81=5<4}r1eg?6=:rT?hl5243395=452z\7`<=:<;:1=5<4}r1ee?6=:rT?h55240d95=452z\7`4=:<8o1=5<4}r1e52z\7fg=:<8h1=5<4}r1e1?6=:rT?nl5240c95=4i<7>52z\7=`=:<<214;5rs5cf>5<5sW>2h63;5986=>{t7}Y<0h019;7:448yv2fj3:1>vP;9`9>00>==<1v9on:181[2>127?954:4:p0d?=838pR977;<66;3=10386s|4c594?4|V=k?70::8;43?xu3j?0;6?uQ4`18913?2>47;l;|q7f7<72;qU84h4=57;>0di=7>52z\7=3=:<<219l5rs5c4>5<5sW>2963;59866>{t9:=1<7mt=55f>41c348io7:7;<0bg?2?348no7;>;<0ff?2?3483j7:7;<04g?2?3492<7:7;<14a?2?3498>7:7;<171?2?349>n7:7;|q1e4<72;q6>l>54g9>6d4=9>h0q~:93;295=}::h:1=5?4=545>4>5348o;7:m;<0g2?2e348o97:m;<0g0?2e348o?7:m;<0g6?2e348o<7:m;<0`b?7?9279h<4;b:?1a<<3j279i54;b:?1a2<3j279i;4;b:?1a0<3j279i94;b:?1a6<3j279i?4;b:?1a4<3j279;94>809>623=91;01?8i:5`8970b2=h0q~>h7?72:?71f<3>2wx88k50;0x913b282970:90;f:?xu3>10;6>u247;90c=:=57>52z?72<<60;168;l5d89~w13d2908w0::d;6e?822k3;3>63;618ge>{t4>534>=47:i;<65f?bf3ty?9k4?:5y>030=91;0198::0:2?821<3;3=63;61823g=z{=<96=4=6z?720<60;16><:54c9>645=<<54c9>647=<>54c9>65`==k54c9>65b==m54c9>636=8h54c9>60c=8j54c9>60e=8l54c9>60g=8754c9>60>=9k54c9>61b=9m54c9>61d=9o54c9>61?=9654c9>611=9854c9>613=5a3=5a5=5a7=54c9>5f`=4>434>9n7?73:?76d<60:168?751918914?282870:=6;3;7>;3:<0:4>5243695=5<5=886<6<;<616?7?;27?><4>829>076=919019?i:0:0?826m3;3?63;1e82<6=:<8h1=5=4=53b>4>434>:57?73:?75=<60:168<9519189171282870:>5;3;7>;39=0:4>5240195=5<5=;96<6<;<607?7?;27???4>829>067=919019=?:0:0?825n3;3?63;2d82<6=:<;=1=5=4=53`>4>434>:=7?73:?755<60:1688o5d`9>00>=91o0q~:9a;297~;3>o0:4<5247g95=7<5=i70=>d;6a?856k3>i70=>b;6a?856i3>i70=>9;6a?85603>i70=>7;6a?856>3>i70=>4;6a?85ej3>i70=m9;6a?85ei3;3=63;4jm0?n63;4jl0?n63;4k80?n63;4ko0?n634>6349nm7:m;<1f=?2e349n47:m;<1f3?2e349n:7:m;<1f1?2e349n87:m;<1f7?2e349n>7:m;<1f5?2e3ty?:n4?:3cx910b282970?m2;6a?87e93>i70?m0;6a?87fn3>i70?ne;6a?87fl3>i70?nc;6a?87fj3>i70?na;6a?87ai3>i70?i9;6a?87a03>i70?i7;6a?87a>3>i70?i5;6a?87a<3>i70?i3;6a?87a:3>i70?j8;6a?87b?3>i70?j6;6a?87b=3>i70?j4;6a?87b;3>i70?j2;6a?87b93>i70?j0;6a?844i3>i70<<9;6a?84403>i70<<7;6a?844>3>i70<<5;6a?844<3>i70<<3;6a?844:3>i70<<1;6a?85503>i70=9e;6a?851n3>i70=9a;6a?xu5=>0;68u220690c=::?:1=5<4=335>ag<5;;36i74=33b>ae53z?151<60;16>4j5d89>6=g=l01v??::181846;3>m70<>6;34f>{t:9k1<7=t=330>4>53482o7jn;<0;=?bf3ty9=:4?:3y>644=<6516`8yv4713:1?v3=1382<7=::0i1hn5229;9`f=z{;;26=49{<025?2a348:m7?8b:?15f?4kc:p65>=839p1??>:0:1?84>j3nj70<78;fb?xu59k0;6?u220290c=::8i1=:l4}r033?6=;r79==4>839>6565db9~w77c2909w0=k54g9>676=9>h0q~5<5s48;h7:i;<017?70j2wx>=:50;1x976c282970<69;fb?84?>3nj7p}=2483>7}::9i18k52234952d53z?14f<60;16>475db9>6=0=lj1v:18687e:3>m70?ia;3;6>;6j=0om63>b78g=>;6j10oo6s|1`;94?3|58h96<6=;<15=?b>349>?7j6;<174?b>348m97jn;|q2f6<72;q6=o?54g9>5g2=9>h0q~?n8;291~;6j80:4?5237;9`g=:;<91ho523529`g=::ol1hl5rs0`6>5<5s4;i<7:i;<3a2?70j2wx=l950;7x94d7282970=98;f:?852:3n270=b683>3}:9hl18k521c:952d<58hj6io4=0``>a?<58hn6il4=0a3>ae55z?2ec<60;16?;65dc9>704=lk16?>h5dc9>6cb=lh1vm70?ma;34f>{t9h?1<7;t=0cf>4>5349=;7j6;<165?b>3498i7j6;<0eg?bf3ty:no4?:3y>5db=ae82<7=:;?=1ho523439`g=:;:o1ho522g`9`d=z{8ho6=4={<3bg?2a34;ii7?8b:p5d5=83?p13n270=:0;f:?854l3n270839>730=lk16?8>5dc9>76b=lk16>k75d`9~w4e42909w0?na;6e?87d<3;349?j7j6;<10g?b>348m47jn;|q101<72;q6>;>54g9>61c=9180q~<;3;296~;5=o0?j63=4e82<7=z{;?=6=4;{<06b?7?:279=;4k9:?15=6}::ad<5;;j6io4}r075?6=:r799i4;f:?10g<60;1v?;;:181842l3;3>63=1`8g=>{t:=:1<71`<5;>j6<6=;|q116<728m51908977d2m301??j:ec897472mi01?<=:e`8yv44n3:1>v3=5c87b>;5<00:4?5rs371>5<3s48>n7?72:?15`=4k9:?167>k50;0x973f2=l01?:7:0:1?xu5=80;6>u224c95=4<5;8;6io4=301>a?52z?11<<3n2798:4>839~w7372908w0<:9;3;6>;5::0o563=278ge>{t::i1<71`<5;>=6<6=;|q10c<72;q6>865190897412m30q~?kf;296~;6nh0?j63>e982<7=z{8nn6=4={<3e=?2a34;n;7?72:p5c6=83>p1de83>7}:9o218k521d495=453z?2b=<60;16=o85dc9>5g>=lh1vm70?j5;3;6>{t9lo1<74>534;i47j6;|q2`g<72;q6=k854g9>5`2=9180q~?jd;291~;6n?0:4?521cc9`<=:9ki1hl521cg9`f=:9j:1ho5rs0fb>5<5s4;m97:i;<3f7?7?:2wx=hm50;6x94`2282970?mc;fa?87em3n270?l0;fb?xu6l00;6?u21g690c=:9l81=5<4}r3ff?6=;r7:j94>839>5gc=lh16=n>5d89~w4b?2909w0?i3;6e?87b93;3>6s|1dc94?5|58l86<6=;<3`5?b>34;h87jn;|q2`2<72;q6=k<54g9>5`6=9180q~?j9;296~;6n;0:4?521b69`<=z{;9;6=4={<07a?2a3488m7?72:p67`=838p1?:k:5d8975>28297p}=2d83>7}::=i18k5222:95=452z?10g<3n279?:4>839~w74d2909w0<;a;6e?844>3;3>6s|23`94?4|5;>269h4=316>4>53ty9>l4?:3y>61>=>:51908yv4513:1>v3=4687b>;5;:0:4?5rs30;>5<5s48?:7:i;<006?7?:2wx>?950;0x97222=l01?=>:0:1?xu5;k0;652z?2a=<3n27:h;4>839~w4ed2909w0?j7;6e?87c=3;3>6s|1b`94?4|58o=69h4=0f7>4>53ty:ol4?:3y>5`3=v3>e587b>;6l;0:4?5rs0a;>5<5s4;n?7:i;<3g5?7?:2wx=n950;0x94c52=l013>m70;6190o563=8`8ge>;3=10?<6s|1g`94?4|58n>69h4=0;3>41e3ty:jn4?:3y>5a2=v3>d287b>;61;0:;o5rs0df>5<5s4;o>7:i;<3:7?70j2wx=kh50;0x94b62=l01<7;:05a?xu5890;6?u21e290c=:90?1=:l4}r035?6=:r7:ok4;f:?2=3<6?k1v?>=:18187dm3>m70?67;34f>{t;l:1<7:t=31b>1`<5:oj6<6=;<3:34>>47=9;|q124<72;q6>>754g9>5<>=9>h0q~<92;296~;5;10?j63>98823g=z{;<86=4={<003?2a34;2m7?8b:p632=838p1?=9:5d894?e28=i7p}=6483>7}:::?18k5218a952d52z?171<3n27:5i4>7c9~w7002909w0<<3;6e?87>m3;41e3ty9:44?:3y>667=516`8yv4bi3:1=8u22e5903=::m<18;522e7903=::m>18;522e1903=::m818;522e2903=::jl18;522e3903=::l318;522d:903=::l=18;522d4903=::l?18;522d6903=::l918;522d0903=::l;18;5244c9`g=::?k1=:l4=3c1>ag52z?1`2<3n279o94>7c9~w7eb290?w0;5m00?j63=9e8ge>;5k<0o56s|2`c94?4|5;n=69h4=3a0>41e3ty9oi4?:5y>6a0=91801?k7:5d897?d2m301?lm:e;8yv4f13:1>v3=d487b>;5k;0:;o5rs3a`>5<3s48o97?72:?1a2<3n2795n4kb:?1f<l650;0x97b32=l01?m>:05a?xu5kk0;69u22e695=4<5;o=69h4=3;a>a?<5;h<6i74}r0b3?6=:r79h>4;f:?1g5<6?k1v?mn:18784c;3;3>63=e487b>;51k0on63=b48g=>{t:h<1<71`<5;hm6<9m;|q1g<<72=q6>i<5190897c32=l01?7n:e;897d42m30q~1}::jl1=5<4=3g2>1`<5;326il4=3cg>a?52z?1`4<3n279nh4>7c9~w7e?290?w0;5m:0?j63=9`8gf>;5j80o56s|2cc94?4|5;i?6964=3`b>41e3ty9o84?:3y>6f2=9;301?m::05a?xu5j10;6>u22b190==::kk185522c:952d53z?1g6<6:016>oo519:897de28=i7p}=b783>6}::j8185522c:90==::k<1=:l4}r0a=?6=;r79o?4>289>6g>=91201?l6:05a?xu5j=0;6>u22b390==::k<185522c6952d53z?1g4<6:016>o8519:897d028=i7p}=b383>6}::j:185522c690==::k81=:l4}r0a1?6=;r79o=4>289>6g2=91201?l::05a?xu5j90;6>u22cd90==::k8185522c2952d53z?1fc<6:016>o<519:897d428=i7p}=ad83>6}::ko185522c290==::ho1=:l4}r0a5?6=;r79nh4>289>6g6=91201?l>:05a?xu5ij0;6>u22cf90==::ho185522`a952d53z?1fa<6:016>lk519:897ga28=i7p}=ae83>6}::ki1=?74=3c`>4>?348jh7?8b:p6a`=83?p1?k7:0:1?87>93n270?60;fb?84?13n270::8;1f?xu5ll0;68u22d595=4<58396i74=0;2>ag<5;226il4=57;>6b55z?1a3<60;16=4=5d89>5<4=lh16>565d89>00>=;j1v?jl:18684b=3;3>63>958g=>;61:0om63=898gf>;3=108n6s|2e`94?3|5;o?6<6=;<3:1?b>34;287jn;<0;3?b>34>>47=n;|q1`d<72h=5190894?12m301<7::ec897>02mh019;7:2;8yv4c13:19v3=e382<7=:90=1h4521849`d=::1<1h45244:97==z{;n36=4;{<0f5?7?:27:5:4ka:?1<363=728gf>;5?80on63=768gf>;5>k0o563=6`8gg>{t:>81<71`<5;=86<9m;|q12f<72?q6>;k5190897142m301?9>:ec897102mk01?8m:ec8970f2mh0q~6=4={<134?751279j84>7c9~w67b2909w0=?0;34f>;49<0?j6s|2g194?5|5::26964=3d7>1><5;l86<9m;|q1bc<72:q6?=7513;897`3282370{t;;=1<741e349:h7:i;|q0gg<72k:5509>7a3=91801>k6:5d896272mi01?hi:e;8yv4a:3:1?v3<0987<>;5n:0?463=f3823g=z{;ln6=4<{<134>899>6cc=9>h0q~==6;296~;4810:;o5230a90c=z{:ij6=4:{<0e7?36349o87?72:?0a=<3n278?k4ka:?1b`k?50;1x96602=201?h=:5:897`628=i7p}=fe83>6}:;9=1=?74=3d1>4>?348mh7?8b:p773=838p1>>8:05a?856j3>m7p}0}::o819<523e195=4<5:o<69h4=21e>ae<5;lo6i74}r0e4?6=;r78<;4;8:?1b4<30279j=4>7c9~w7`d2908w0=?6;31=>;5n80:45522ga952d52z?043<6?k16?w063;4;l0om63=fb8g=>{t:ll1<7=t=226>1><5;l;6964=3ge>41e3ty9jo4?:2y>753=9;301?h?:0:;?84aj3;6<9m;<12=?2a3ty8o:4?:4y>6c6==816?i?5190896c22=l01>=j:ea897`e2m30q~;5ml0:;o5rs3db>5<4s49;87?=9:?1ac<60116>ko516`8yv55:3:1>v3<05823g=:;8218k5rs2a5>5<2s48nj7;>;<1g4?7?:278i94;f:?07a><:5:897cb2=201?kk:05a?xu5n00;6>u2311957?<5;on6<67;<0e=?70j2wx???50;0x966428=i70=>7;6e?xu4k<0;68u22dg914=:;jl1=5<4=2g0>1`<5:9o6im4=3d:>a?53z?047<30279ii4;8:?1af<6?k1v?h7:180857:3;9563=ee82<==::o21=:l4}r114?6=:r787c9>740=m;:18684bl3?:70=le;3;6>;4m;0?j63<3b8ge>;5n10o56s|2d`94?5|5:::6964=3g`>1><5;oi6<9m;|q1b3<72:q6?=?513;897cd282370{t;8l1<741e349:87:i;|q037<72;kp1?km:43896de2=<01>l6:54896df2=<01>ll:54896dc2=<01>m?:54896db2=<01>li:54896e62=<01>m=:54896ea2=<01>mk:54896eb2=<01>j?:54896b62=<01>j;:54896b52=<01>j<:54896b22=<01>j9:54896gc2=<01>ol:54896gb2=<01>on:54896g>2=<01>om:54896g02=<01>o9:54896g?2=<01>o::54896cf2=<01>k6:54896c?2=<01>k8:54896c12=<01>k::54896c32=<01>k<:54896c52=<01>k>:548961428=i7p}<0`83>7}:;8?1=5<4=20b>ae52z?05a<60;16??o5dc9~w6752909w0=>c;3;6>;4:h0om6s|30394?4|5:;i6<6=;<11e?b>3ty8==4?:3y>74g=91801>v3<1882<7=:;;h1h45rs22f>5<5s49:47?72:?06f839>77e=l01v>=70=9a;65?851l3;41e3ty94h4?:3y>6<5=<116>4<516`8yv4>03:1>v3=9282<==::0n1=:l4}r0:b?6=:r795>4>7c9>6d4=l01v?6k:18184>:3>370<61;34f>{t:0=1<74>?3482o7?8b:p6=e=838p1?7>:5:897?728=i7p}=9783>7}::0;1=564=3;a>41e3ty94o4?:3y>6<6=<116>5h516`8yv4>=3:1>v3=9182<==::0k1=:l4}r0:0?6=:r794k4>899>6h0q~<8b;296~;5090?463=7g823g=z{;2>6=4={<0;4?7?02794l4>7c9~w7?b2909w0<70;34f>;5i;0on6s|26c94?4|5;=m6964=35f>41e3ty9494?:3y>62`=91201?66:05a?xu5?00;6?u226g90==::>n1=:l4}r0;7?6=:r79;h4>899>6=>=9>h0q~<88;296~;5?m0?463=7b823g=z{;296=4={<04`?7?02794:4>7c9~w7>62909w0<8c;3;<>;50?0:;o5rs2;g>5<3s49in7:i;<1b3?7?:278:;4kc:?0<61}:;k318k523`795=4<5:<>6il4=25e>a?53z?0f<<60;16?nj54g9>71`=lk1v>7l:18785ei3>m70=n6;3;6>;4><0om63<808g=>{t;k:1<7=t=2`b>4>5349hi7:i;<17b?bf3ty85h4?:5y>7ge=6::e;8yv5e:3:1?v3lk:0:1?85c93>m70=:1;f`?xu4i;0;69u23b290c=:;hi1=5<4=24;>ag<5:2o6i74}r1a2?6=;r78o=4>839>7a2=63<668ge>;4000o56s|3c694?5|5:hn6<6=;<1g6?2a349>=7jn;|q0e4<72=q6?oh54g9>7dd=91801>87:ea896>e2m30q~=m5;297~;4jo0:4?523e190c=:;<81hn5rs2c0>5<3s49h=7:i;<1b`?7?:278:44kc:?01}:;j818k523`g95=4<5:<26io4=2;b>a?53z?0g7<60;16?i854g9>705=lh1v>m<:18785dl3;3>63;4;j0on63=f68g<>{t;ji1<7:t=2f5>4>5349nm7:i;<174?bf348m97j6;|q03f<72;q6?lj54g9>7<>=9>h0q~=8b;296~;4ij0?j63<96823g=z{:=o6=4={<1ba?2a349257?8b:p72?=838p1>on:5d896?228=i7p}<7983>7}:;h318k52386952d52z?0eg<3n2785;4>7c9~w6112909w0=n7;6e?85>:3;41e3ty8;:4?:3y>7d>=v3;4190:;o5rs2:f>5<5s49257:7;<1;a?70j2wx?4o50;0x96?>288270=6a;34f>{t;1i1<7=t=2;;>1><5:2n6964=2:`>41e3ty84k4?:2y>7<>=9;301>6j:0:;?85?n3;1><5:2j6<9m;|q0d282370=7d;34f>{t;121<7=t=2;5>1><5:2j6964=2:;>41e3ty84o4?:2y>7<0=9;301>6n:0:;?85?j3;6964=2:;>1><5:2=6<9m;|q0<<<72:q6?4;513;896>?282370=79;34f>{t;1>1<7=t=2;7>1><5:2=6964=2:7>41e3ty84:4?:2y>7<2=9;301>69:0:;?85??3;1><5:296<9m;|q0<0<72:q6?4=513;896>3282370=75;34f>{t;1:1<7=t=2;1>1><5:296964=2:3>41e3ty84>4?:2y>7<4=9;301>6=:0:;?85?;3;1><5:=n6<9m;|q0<4<72:q6?4?513;896>7282370=71;34f>{t;>l1<7=t=2;3>44>349ji:18785b13;3>63>988g=>;6110om63;59800>{t;mo1<7:t=2g;>4>534;2m7j6;<3:=?bf34>>47=<;|q0`a<72=q6?h95190894?e2m301<7n:ec8913?2:80q~=kc;290~;4m?0:4?5218a9`<=:90h1hl5244:974=z{:ni6=4;{<1f1?7?:27:5i4k9:?2=fp1>k;:0:1?87>m3n270?6d;fb?822038m7p}1}:;l91=5<4=0;e>a?<583n6io4=57;>7c54z?0a7<60;16=l>5d89>5<`=lh1688652e9~w6b02908w0=j1;3;6>;6i90om63;5981g>{t;:=1<74>?3498o7?8b:p77c=838p1>==:05a?854;3>37p}<3983>7}:;:91=564=21g>41e3ty8>k4?:3y>765=9>h01>=;:5:8yv5413:1>v3<3582<==:;:o1=:l4}r104?6=:r78?94>7c9>763=<11v>=n:181854=3;3463<3g823g=z{:9:6=4={<101?70j278?;4;8:p76d=838p1>=9:0:;?85383;713=91201>:i:05a?xu4<80;6?u2357952d<5:>=6964}r17f?6=:r788;4>899>706=9>h0q~=;2;296~;4h6=4={<173?7?02789<4>7c9~w6242909w0=;7;34f>;4<10?46s|35f94?4|5:>36<67;<166?70j2wx?9:50;0x962?28=i70=;9;6;?xu4<5:?86<9m;|q010<72:q6?97516`896162m301>8l:e`8yv5183:1>v3<5c82<==:;??1=:l4}r163?6=:r789o4>7c9>70e=<11v>8>:181852k3;3463<67823g=z{:?36=4={<16g?70j2789i4;8:p734=838p1>;k:0:;?851?3;4?:3y>70c=91201>87:05a?xu4=h0;6?u234g952d<5:?m6964}r150?6=:r789k4>899>73?=9>h0q~=:6;296~;4=o0:;o5237a9`<=z{:=;6=4<{<15a?2a349=j7:i;<145?70j2wx?;k50;6x960b282970=82;fb?850;3nj70=9d;f;?xu4>k0;6?u237c90c=:;?i1=:l4}r66f?6=:07e=07g=07>=073=075=077=5479>04`=04b=04g=04>=040=042=044==5479>064=?5479>066=07c=04e=046=;l516`8yv2283:1>v3;2e87b>;3=10h;6s|45d94?4|5=8h69h4=57;>g1?i7>52z?76g<3n27?954m5:p01b=838p19{t<=h1<71`<5=?36o?4}r67=?6=:r7?>;4;f:?71=v3;2587b>;3=10ji6s|45494?4|5=8869h4=57;>f3?97>52z?767<3n27?954nd:p012=838p19<>:5d8913?2hi0q~:;3;296~;3:90?j63;598bf>{t<=81<71`<5=?36lo4}r675?6=:r7?=h4;f:?71=50;0x917c2=l019;7:`58yv24m3:1>v3;1c87b>;3=10j:6s|42f94?4|5=;j69h4=57;>d38o7>52z?75<<3n27?954l4:p06d=838p19?7:5d8913?2h>0q~:0?j63;598b7>{t<:31<71`<5=?36l<4}r60950;0x91732=l019;7:`28yv24>3:1>v3;1287b>;3=102j6s|42794?4|5=;969h4=57;>gc>;7>52z?776<3n27?954md:p000=838p19==:5d8913?2j90q~::5;296~;3;80?j63;598ag>{t<<>1<71`<5=?36ol4}r667?6=:r7?>k4;f:?71=v3;2687b>;3=10i46s|45c94?4|5=;h69h4=57;>g28j7>52z?754<3n27?954n9:p062=838p19??:5d8913?20o0q~==a;296~;4:h0:;o5233`9`g=z{=?26=4={<66e?70j27?954l9:p7`d=83?p1>9>:ec8960d2mk01>9=:05a?82203><863;598`<>{t9?:1<7ag<5;896<5f6=9;k0q~<=4;296~;5:?0on63=23823g=z{8i96=4={<3`0?be34;h<7?8b:p560=838p1>6s|4`g94?4|V=3o70:<:5;g?!2083;?h6s|4`f94?4|V=3h70:<:5;`?!2083;>;6s|4`a94?4|V=3i70:<:5;a?!2083;>56s|4``94?4|V=3j70:<:5;b?!2083;>m6s|4`c94?4|V=3270:<:5;:?!2083;>n6s|4`;94?4|V=3370:<:5;;?!2083;>h6s|4`:94?4|V=3<70:<:5;4?!2083;>i6s|4c;94?4|V=k=70:<:5c5?!2083;>j6s|4c:94?4|V=k>70:<:5c6?!2083;==6s|4c594?4|V=k?70:<:5c7?!2083;=>6s|4c494?4|V=k870:<:5c0?!2083;=?6s|4c794?4|V=k970:<:5c1?!2083;=86s|4c694?4|V=k:70:<:5c2?!2083;=96s|4c194?4|V=k;70:<:5c3?!2083;=:6s|4c094?4|V=3m70:<:5;e?!2083;=;6s|4c394?4|V=3=70:<:5;5?!2083;=46s|4`594?4|V=3>70:<:5;6?!2083;=56s|56194?4|V<=870:<:450?!2083;=m6s|54f94?4|V70:<:5f6?!2083;<>6s|4g594?4|V=n?70:<:5f7?!2083;70:<:5a6?!2083;8j6s|4d594?4|V=i?70:<:5a7?!2083;?<6s|4d494?4|V=i870:<:5a0?!2083;?=6s|4d794?4|V=i970:<:5a1?!2083;??6s|4d694?4|V=i:70:<:5a2?!2083;?86s|4d194?4|V=i;70:<:5a3?!2083;?96s|4d094?4|V=hm70:<:5`e?!2083;?:6s|4d394?4|V=hn70:<:5`f?!2083;?;6s|4d294?4|V=ho70:<:5`g?!2083;?46s|4ed94?4|V=hh70:<:5``?!2083;?56s|51094?4|V=no70:<:5fg?!2083;?m6s|51394?4|V=nh70:<:5f`?!2083;?n6s|51294?4|V=ni70:<:5fa?!2083;?o6s|4gd94?4|V=nj70:<:5fb?!2083;?i6s|4gg94?4|V=n270:<:5f:?!2083;?j6s|4gf94?4|V=n370:<:5f;?!2083;><6s|4ga94?4|V=n:70:<:5f2?!2083;>=6s|4g694?4|V=i=70:<:5a5?!2083;>>6s|4d;94?4|V=hi70:<:5`a?!2083;>?6s|4eg94?4|V=hj70:<:5`b?!2083;>86s|51c94?4|V<:j70:<:42b?!2083;>96s|49794?4|V=2>70:<:5:6?!2083;>:6s|51694?4|V<:?70:<:427?!2083;>46s|53d94?4|V<8m70:<:40e?!2083;>o6srn`f:>5<5sA><=6saaec94?4|@==:7p`ndc83>7}O<>;0qcokc;296~N3?81vbljk:181M2092wemik50;0xL1163tdjhk4?:3yK02752zJ734=zfho:6=4={I645>{iil81<7vF;709~jdc22909wE:81:me`0=838pD99>;|lba2<72;qC8:?4}ocf5<5sA><=6saadc94?4|@==:7p`nec83>7}O<>;0qcojc;296~N3?81vblkk:181M2092wemhk50;0xL1163tdjik4?:3yK02752zJ734=zfhl:6=4={I645>{iio81<7vF;709~jd`22909wE:81:mec0=838pD99>;|lbb2<72;qC8:?4}oce5<5sA><=6saagc94?4|@==:7p`nfc83>7}O<>;0qcoic;296~N3?81vblhk:181M2092wemkk50;0xL1163tdjjk4?:3yK02752zJ734=zfk::6=4={I645>{ij981<7vF;709~jg622909wE:81:mf50=838pD99>;|la42<72;qC8:?4}o`35<5sA><=6sab1c94?4|@==:7p`m0c83>7}O<>;0qcl?c;296~N3?81vbo>k:181M2092wen=k50;0xL1163tdi52zJ734=zfk;:6=4={I645>{ij881<7vF;709~jg722909wE:81:mf40=838pD99>;|la52<72;qC8:?4}o;2e?6=9rB?;<5rn87:>5<6sA><=6sa94c94?7|@==:7p`65c83>4}O<>;0qc7:c;295~N3?81vb4;k:182M2092we58k50;3xL1163td29k4?:0yK02751zJ734=zf0<:6=4>{I645>{i1?81<7?tH552?xh>>:0;6;|l:22<728qC8:?4}o;55<6sA><=6sa97c94?7|@==:7p`66c83>4}O<>;0qc79c;295~N3?81vb48k:182M2092we5;k50;3xL1163td2:k4?:0yK02751zJ734=zf0=:6=4>{I645>{i1>81<7?tH552?xh>?:0;6;|l:32<728qC8:?4}o;45<6sA><=6sa96c94?7|@==:7p`67c83>4}O<>;0qc78c;295~N3?81vb49k:182M2092we5:k50;3xL1163td2;k4?:0yK02751zJ734=zf02:6=4>{I645>{i1181<7?tH552?xh>0:0;62290:wE:81:m==0=83;pD99>;|l:<2<728qC8:?4}o;;5<6sA><=6sa99c94?7|@==:7p`68c83>4}O<>;0qc77c;295~N3?81vb46k:182M2092we55k50;3xL1163td24k4?:0yK02751zJ734=zf03:6=4>{I645>{i1081<7?tH552?xh>1:0;6<3:1=vF;709~j;|l:=2<728qC8:?4}o;:5<6sA><=6sa98c94?7|@==:7p`69c83>4}O<>;0qc76c;295~N3?81vb47k:182M2092we54k50;3xL1163td25k4?:0yK02751zJ734=zf0k:6=4>{I645>{i1h81<7?tH552?xh>i:0;6;|l:e2<728qC8:?4}o;b5<6sA><=6sa9`c94?7|@==:7p`6ac83>4}O<>;0qc7nc;295~N3?81vb4ok:182M2092we5lk50;3xL1163td2mk4?:0yK02751zJ734=zf0h:6=4>{I645>{i1k81<7?tH552?xh>j:0;6;|l:f2<728qC8:?4}o;a5<6sA><=6sa9cc94?7|@==:7p`6bc83>4}O<>;0qc7mc;295~N3?81vb4lk:182M2092we5ok50;3xL1163td2nk4?:0yK02751zJ734=zf0i:6=4>{I645>{i1j81<7?tH552?xh>k:0;6;|l:g2<728qC8:?4}o;`5<6sA><=6sa9bc94?7|@==:7p`6cc83>4}O<>;0qc7lc;295~N3?81vb4mk:182M2092we5nk50;3xL1163td2ok4?:0yK02751zJ734=zf0n:6=4>{I645>{i1m81<7?tH552?xh>l:0;6;|l:`2<728qC8:?4}o;g5<6sA><=6sa9ec94?7|@==:7p`6dc83>4}O<>;0qc7kc;295~N3?81vb4jk:182M2092we5ik50;3xL1163td2hk4?:0yK02751zJ734=zf0o:6=4>{I645>{i1l81<7?tH552?xh>m:0;6;|l:a2<728qC8:?4}o;f5<6sA><=6sa9dc94?7|@==:7p`6ec83>4}O<>;0qc7jc;295~N3?81vb4kk:182M2092we5hk50;3xL1163td2ik4?:0yK02751zJ734=zf0l:6=4>{I645>{i1o81<7?tH552?xh>n:0;6;|l:b2<728qC8:?4}o;e5<6sA><=6sa9gc94?7|@==:7p`6fc83>4}O<>;0qc7ic;295~N3?81vb4hk:182M2092we5kk50;3xL1163td2jk4?:0yK02751zJ734=zfh::6=4>{I645>{ii981<7?tH552?xhf8:0;6;|lb42<728qC8:?4}oc35<6sA><=6saa1c94?7|@==:7p`n0c83>4}O<>;0qco?c;295~N3?81vbl>k:182M2092wem=k50;3xL1163tdj51zJ734=zfh;:6=4>{I645>{ii881<7?tH552?xhf9:0;6;|lb52<728qC8:?4}oc25<6sA><=6saa0c94?7|@==:7p`n1c83>4}O<>;0qco>c;295~N3?81vbl?k:182M2092wem51zJ734=zfh8:6=4>{I645>{ii;81<7?tH552?xhf::0;6;|lb62<728qC8:?4}oc15<6sA><=6saa3c94?7|@==:7p`n2c83>4}O<>;0qco=c;295~N3?81vblk4?:0yK02751zJ734=zfh9:6=4>{I645>{ii:81<7?tH552?xhf;:0;6;|lb72<728qC8:?4}oc05<6sA><=6saa2c94?7|@==:7p`n3c83>4}O<>;0qcok50;3xL1163tdj?k4?:0yK02751zJ734=zfh>:6=4>{I645>{ii=81<7?tH552?xhf<:0;6;|lb02<728qC8:?4}oc75<6sA><=6saa5c94?7|@==:7p`n4c83>4}O<>;0qco;c;295~N3?81vbl:k:182M2092wem9k50;3xL1163tdj8k4?:0yK027<7>51zJ734=zfh?:6=4>{I645>{ii<81<7?tH552?xhf=:0;6;|lb12<728qC8:?4}oc65<6sA><=6saa4c94?7|@==:7p`n5c83>4}O<>;0qco:c;295~N3?81vbl;k:182M2092wem8k50;3xL1163tdj9k4?:0yK02751zJ734=zfh<:6=4>{I645>{ii?81<7?tH552?xhf>:0;6;|lb22<728qC8:?4}oc55<6sA><=6saa7c94?7|@==:7p`n6c83>4}O<>;0qco9c;295~N3?81vbl8k:182M2092wem;k50;3xL1163tdj:k4?:0yK02751zJ734=zfh=:6=4>{I645>{ii>81<7?tH552?xhf?:0;6;|lb32<728qC8:?4}oc45<6sA><=6saa6c94?7|@==:7p`n7c83>4}O<>;0qco8c;295~N3?81vbl9k:182M2092wem:k50;3xL1163tdj;k4?:0yK02751zJ734=zfh2:6=4>{I645>{ii181<7?tH552?xhf0:0;62290:wE:81:me=0=83;pD99>;|lb<2<728qC8:?4}oc;5<6sA><=6saa9c94?7|@==:7p`n8c83>4}O<>;0qco7c;295~N3?81vbl6k:182M2092wem5k50;3xL1163tdj4k4?:0yK02751zJ734=zfh3:6=4>{I645>{ii081<7?tH552?xhf1:0;6<3:1=vF;709~jd?2290:wE:81:me<0=83;pD99>;|lb=2<728qC8:?4}oc:5<6sA><=6saa8c94?7|@==:7p`n9c83>4}O<>;0qco6c;295~N3?81vbl7k:182M2092wem4k50;3xL1163tdj5k4?:0yK02751zJ734=zfhk:6=4>{I645>{iih81<7?tH552?xhfi:0;6;|lbe2<728qC8:?4}ocb5<6sA><=6saa`c94?7|@==:7p`nac83>4}O<>;0qconc;295~N3?81vblok:182M2092wemlk50;3xL1163tdjmk4?:0yK02751zJ734=zfhh:6=4>{I645>{iik81<7?tH552?xhfj:0;6;|lbf2<728qC8:?4}oca5<6sA><=6saacc94?7|@==:7p`nbc83>4}O<>;0qcomc;295~N3?81vbllk:182M2092wemok50;3xL1163tdjnk4?:0yK02751zJ734=zfhi:6=4>{I645>{iij81<7?tH552?xhfk:0;6;|lbg2<728qC8:?4}oc`5<6sA><=6saabc94?7|@==:7p`ncc83>4}O<>;0qcolc;295~N3?81vblmk:182M2092wemnk50;3xL1163tdjok4?:0yK02751zJ734=zfhn:6=4>{I645>{iim81<7?tH552?xhfl:0;6;|lb`2<728qC8:?4}ocg?01274>6789:;<=>?0123456789:;<=>?0123456789:;<=>?0123456789:;<=>?0123454<80;0=>5>.130?46=AGZ^X7OKDSC?=?699l1:<7GAPTV9twi`Wog`Rzgrdqk8<<76;?0==4FNQWW>uthoVl~`aQ{hsgplZgt{lx044?>378553CE\XZ5DHC?50<76890=;4@UURVP?BHI5;>6=0>2:3;>LHW]]0oec2>7;2=5>433;98?0086?IR\Y__6IA_A=394;753:81EC^ZT;FJF956294:?6==:NWWTPR=LFH7?<4?>0687301?69l29x>=>?ff662(363=>08=HI1097>LHW]]0OE]L33;2=57=32F__\XZ5DNRA86<7681=>6864:4:=32<09:;866J8@38=1=>8939748;;845=44<13CE\XZ5AEFQF9>=87;n744FNQWW>uthoVof|ywPtipfwm:?29499675IORVP?vugnUna}zv_ujqavnXizyn~y27:1<11>?=AGZ^X7~}of]fiur~W}byi~fPndebp`:?294:n675OTVSQQ55NDEPB858?3HNO^L2>>99B@ATF4;437LJKR@>0:==FLMXJ0907;@FGVD:2611JHI\N<7<;?DBCZH6<255NDEPB8=8f3HNO^L26:1<;?DBCZH62255NDEPA858?3HNO^O2>>99B@ATE4;437LJKRC>0:==FLMXI0907;@FGVG:2611JHI\M<7<;?DBCZK6<2l5NDEPA8=<7611JHI\M<9<0?DJK12KXUCMPRDE0?GS502H^_RGAFN38G7=DM880OEKLK^NJG@HTMV^R\H<4CH68GIMF<2IGGO=4CMP:?FIJE@^_II?;;BMQAZABFLXJXDAA_HLEK2=DZLK_II?4D39GG7=CA?1OEL2?>69GMD:687=0HDO310<4?AOF4885;6JFA=30:2=CAH6:8374DHC?50<76>1OEL2>5?48@LG;97<0HDO32?48@LG;;7<0HDO34?48@LG;=7<0HDO36?48@LG;?7<0HDO38?48@LG;17<0HDL30?58@LD;994<7IGM<03=3>BNJ5;92:5KIC>27;169GMG:6?7=0HDL319<4?AOE4835:6JFB=3=3>BNJ58;2:5KIC>15;1?08;EKA8759?2NBN1<;>69GMG:5=7=0HDL327<4?AOE4;=5;6JFB=0;:2=CAK695384DH@?6;14=7IGM<9<5?AOE404<7IG_A=2==>BNXH6:6=08;EKSE979?2NB\O2?>69GMUD;97=0HD^M<3<:?AOWJ591<394DHRA86813MEJ0=08;EMB8469?2NDM1?>>69GKD:6:7=0HBO312<4?AIF48>556J@A=36>5803MEJ0<;16:FLE979>2NDM1<16:FLE959>2NDM1:16:FLE939>2NDM1816:FLE919>2NDM1616:FLE9?9?2NDMR\JG79GKG:76>1OCO2>0?58@JD;984<7IAM<00=3>BHJ5;82:5KOC>20;169GKG:607=0HBL318<5?AIE484<7IAM<32=3>BHJ58:2:5KOC>16;1>08;EMA8729?2NDN1<:>69GKG:5>7=0HBL326<4?AIE4;25;6J@B=0::3=CGK692:5KOC>04;?69GKG:497<0HBL33?48@JD;<7<0HBL35?48@JD;>7<0HBL37?48@JD;07<0HBL39?58@JDXZLM<7IA_A=2==>BHXH6:6=08;EMSE979?2ND\O2?>69GKUD;97=0HB^M<3<:?AIWJ591<394DNRA86843LDJ?6KABc9FJZCDKVXNMIm4EO]FGFYPZ@^N>6H=2:D;1>@FDZO97KJ<;GF@0>@CKL90JI^;;GFSA1=AL[O?7KH7009D7>AIL81B>6G?2:K26>O5:2C846GAIUR\45>>8:KMMQVX8;20ECG[P^20<>OIA]ZT<964IOKWTZ6202CEEY^P07:8MKOSXV:<56GAIUQWEQC03@DBXR>?7:KMMQY79>1BBDZP0358MKOSW99<7D@FT^273>OIA]U;9:5FNHV\4311BBDZP1358MKOSW89<7D@FT^373>OIA]U:9:5FNHV\531969JJLRX9H=0ECG[_0@4?LHN\V;H;6GAIU]2@2=NF@^T=H94IOKW[4@03@DBXR1BBDZP2358MKOSW;9<7D@FT^073>OIA]U99:5FNHV\631H94IOKW[7@03@DBXR=?7:KMMQY49>1BBDZP3358MKOSW:9<7D@FT^173>OIA]U89:5FNHV\73198;HLJPZ5??2CEEYQ<969JJLRX;H=0ECG[_2@4?LHN\V9H;6GAIU]0@2=NF@^T?H94IOKW[6@13@DBXRO9;HLJPZD43@D]>6BF2:NL2>JHIMOO;6B@GHABH1=K]];?7A[[259OQQ533E__8;5CUU6\@0=J[NEE96CZXB[`?Hgmg{\n~~g`nb9Nmkiu^lxxeb`<;O226>H6<2D:<=:4N0220>H68;>0B<><4:L241286@>0768J460<2D:<5:4N02:7>H69=1E=<>;;O3251=I988?7C?>359M54233G;:995A1047?K76?=1E=<6;;O32=6=I9;>0B<2268J443<2D:>8:4N0050>H6:>>0B<<73:L271=I9:;87C?;3:L216=I9?>0B<8;3:L236=I9190B<7=;O00?K47;2D9=>5A2318J7543G8??6@=529M635H>;:1E59=4N870?K?1;2D2;>5A9918JIL92Z?7]O]T`9SMKYE]ZCOTo5_IO]AQVHFEL90\_K>;P38V`=UIDH::R]>8^Q02d=UMHNTJD\\Tb9QADBX_@N_DROl;SGB@ZQNL]BTN<5\129PMHYDGEFB_DAA_BJFGN0<[F_YOH94SSTBHZG03ZX]MAQM4:QPVD2<[ZXI86ZVPD11?P6(o{l%~k!hcy,`hn~(EqeySjPpovq[beXpfx;<=>PRdqvhq74:2_;#j|i.sd,cf~)keas#@v`r^pg[uhszVmhSua}0122[Wct}e~:??5Z0.eqb+ta'nis"nbdx.O{kwYulVzexQhc^zlv567:VXnxb{1208Q5)`zo$yj"ilx/aoo})JpfxT~iQnup\cfYg{:;<>Q]erwop4553\:$kh!rg-dg}(ddbr$Aua}_sf\tkruWniTtb|?016\V`urd};8>6[?/fpe*w`(ojr%oaew/LzlvZtcWyd~Ril_ymq4562W[oxyaz>339V4*aun'xm#jmw.bnh|*Kg{UyhR~ats]dgZ~hz9:;:R\jstnw564<]9%l~k }f.e`|+ekcq%Ftb|Pre]sjqtXojUsc>?06]Qavsk|8997X> gsd-vc)`kq$h`fv Mymq[rtXxg~ySjmPxnp3456XZly~`y?<2:W3+bta&{l$knv!cmi{+H~hzV}yS}`{r^e`[}iu89::S_k|umv277=R8&myj#|i/fa{*fjlp&GscQxr^rmpwY`kVrd~=>?2^Pfwpjs9:80Y=!hrg,qb*adp'iggu!Bxnp\swYwf}xTknQwos2346YUmzgx<==;T2,cw`)zo%lou lljz,I}iuW~xT|cz}_fa\|jt789>T^h}zlu306>S7'nxm"h gbz-gim'Drd~Ry}_qlwvZadWqey<=>:_Sgpqir6;;1^<"i}f/pe+be&jf`t"Cwos]tvZvi|{UloRv`r1232ZTb{|f=><4U1-dvc(un&mht#mcky-N|jtX{U{by|Pgb]{kw678>UYi~{ct011?P6(o{l%~k!hcy,`hn~(EqeySz|Ppovq[beXpfx;<=6PRdqvhq7592_;#j|i.sd,cf~)keas#jPpovq[goi4949=6[?/fpe*w`(ojr%oaew/sf\tkruWkce0<0=1:W3+bta&{l$knv!cmi{+wbXxg~ySoga<3<15>S7'nxm"h gbz-gim'{nT|cz}_ckm868592_;#j|i.sd,cf~)keas#jPpovq[goi4=49=6[?/fpe*w`(ojr%oaew/sf\tkruWkce080=1:W3+bta&{l$knv!cmi{+wbXxg~ySoga<7<15>S7'nxm"h gbz-gim'{nT|cz}_ckm828592_;#j|i.sd,cf~)keas#jPpovq[goi4149<6[?/fpe*w`(ojr%oaew/sf\tkruWkceS= gsd-vc)`kq$h`fv re]sjqtXj`dT9?>4U1-dvc(un&mht#mcky-q`Zvi|{UiecQ9219V4*aun'xm#jmw.bnh|*tcWyd~Rlfn^514>S7'nxm"h gbz-gim'{nT|cz}_ckm[=413\:$kh!rg-dg}(ddbr$~iQnup\flhXpfx;<=>=7:W3+bta&{l$knv!cmi{+wbXxg~ySoga_ymq45679;<0Y=!hrg,qb*adp'iggu!}d^rmpwYeagUsc>?0004?P6(o{l%~k!hcy,`hn~(zmU{by|Pbhl\|jt789;:>;5Z0.eqb+ta'nis"nbdx.pg[uhszVhbbRv`r123671<]9%l~k }f.e`|+ekcq%yhR~ats]amkYg{:;1^<"i}f/pe+be&jf`t"|k_qlwvZdnfVrd~=>?3305?P6(o{l%~k!hcy,`hn~(zmU{by|Pbhl\|jt789>9;6[?/fpe*w`(ojr%oaew/sf\tkruWkceSua}0127570<]9%l~k }f.e`|+ekcq%yhR~ats]amkYg{:;<8<8;T2,cw`)zo%lou lljz,vaYwf}xTnd`Pxnp34536:?1^<"i}f/pe+be&jf`t"|k_qlwvZdnfVrd~=>?63:8Q5)`zo$yj"ilx/aoo})ulVzexQmio]{kw678?;:>:5Z0.eqb+ta'nis"nbdx.pg[uhszVhbbRv`r123274e3\:$kh!rg-dg}(ddbr$~iQnup\flhXpfx;<=8Pbef363=R8&myj#|i/fa{*fjlp&xoS}`{r^`jjZ~hz9:;;?94U1-dvc(un&mht#mcky-q`Zvi|{UiecQwos23427582_;#j|i.sd,cf~)keas#jPpovq[be;878;7X> gsd-vc)`kq$h`fv re]sjqtXoj6:2?>4U1-dvc(un&mht#mcky-q`Zvi|{Ulo1<1219V4*aun'xm#jmw.bnh|*tcWyd~Ril<2<14>S7'nxm"h gbz-gim'{nT|cz}_fa?0;473\:$kh!rg-dg}(ddbr$~iQnup\cf:26;:0Y=!hrg,qb*adp'iggu!}d^rmpwY`k5<5>=5Z0.eqb+ta'nis"nbdx.pg[uhszVmh0:0=0:W3+bta&{l$knv!cmi{+wbXxg~ySjm38?3e?P6(o{l%~k!hcy,`hn~(zmU{by|Pgb]35c=R8&myj#|i/fa{*fjlp&xoS}`{r^e`[47a3\:$kh!rg-dg}(ddbr$~iQnup\cfY59o1^<"i}f/pe+be&jf`t"|k_qlwvZadW:;m7X> gsd-vc)`kq$h`fv re]sjqtXojU?=k5Z0.eqb+ta'nis"nbdx.pg[uhszVmhS8?i;T2,cw`)zo%lou lljz,vaYwf}xTknQ91g9V4*aun'xm#jmw.bnh|*tcWyd~Ril_63e?P6(o{l%~k!hcy,`hn~(zmU{by|Pgb];63=R8&myj#|i/fa{*fjlp&xoS}`{r^e`[duumn6;2?84U1-dvc(un&mht#mcky-q`Zvi|{UloRo|rde?5;413\:$kh!rg-dg}(ddbr$~iQnup\cfYf{{ol0?0=6:W3+bta&{l$knv!cmi{+wbXxg~ySjmParpfc959:?1^<"i}f/pe+be&jf`t"|k_qlwvZadWhyyij2;>348Q5)`zo$yj"ilx/aoo})ulVzexQhc^cpv`a;=78=7X> gsd-vc)`kq$h`fv re]sjqtXojUjkh<7<12>S7'nxm"h gbz-gim'{nT|cz}_fa\evtbo5=5>;5Z0.eqb+ta'nis"nbdx.pg[uhszVmhSl}}ef>;:73<]9%l~k }f.e`|+ekcq%yhR~ats]dgZgtzlmT?;4U1-dvc(un&mht#mcky-q`Zvi|{UloRo|rde\773<]9%l~k }f.e`|+ekcq%yhR~ats]dgZgtzlmT8?;4U1-dvc(un&mht#mcky-q`Zvi|{UloRo|rde\173<]9%l~k }f.e`|+ekcq%yhR~ats]dgZgtzlmT:?;4U1-dvc(un&mht#mcky-q`Zvi|{UloRo|rde\373<]9%l~k }f.e`|+ekcq%yhR~ats]dgZgtzlmT4?74U1-dvc(un&mht#mcky-q`Zvi|{UloRo|rde\`4:76;30Y=!hrg,qb*adp'iggu!}d^rmpwY`kVkx~hiPd0>2:7?<]9%l~k }f.e`|+ekcq%yhR~ats]dgZgtzlmTh<2=>3;8Q5)`zo$yj"ilx/aoo})ulVzexQhc^cpv`aXl8682?74U1-dvc(un&mht#mcky-q`Zvi|{UloRo|rde\`4:36;30Y=!hrg,qb*adp'iggu!}d^rmpwY`kVkx~hiPd0>6:7?<]9%l~k }f.e`|+ekcq%yhR~ats]dgZgtzlmTh<29>3;8Q5)`zo$yj"ilx/aoo})ulVzexQhc^cpv`aXl86<2?74U1-dvc(un&mht#mcky-q`Zvi|{UloRo|rde\`4:?6;20Y=!hrg,qb*adp'iggu!}d^rmpwY`kVkx~hiPd0]36==R8&myj#|i/fa{*fjlp&xoS}`{r^e`[duumnUo=R?=8:W3+bta&{l$knv!cmi{+wbXxg~ySjmParpfcZb6W;837X> gsd-vc)`kq$h`fv re]sjqtXojUjkh_e3\77><]9%l~k }f.e`|+ekcq%yhR~ats]dgZgtzlmTh85Z0.eqb+ta'nis"nbdx.pg[uhszVmhSua}012360=R8&myj#|i/fa{*fjlp&xoS}`{r^e`[}iu89::>85Z0.eqb+ta'nis"nbdx.pg[uhszVmhSua}012160=R8&myj#|i/fa{*fjlp&xoS}`{r^e`[}iu89:8>85Z0.eqb+ta'nis"nbdx.pg[uhszVmhSua}012760=R8&myj#|i/fa{*fjlp&xoS}`{r^e`[}iu89:>>85Z0.eqb+ta'nis"nbdx.pg[uhszVmhSua}012560=R8&myj#|i/fa{*fjlp&xoS}`{r^e`[}iu89:<><5Z0.eqb+ta'nis"nbdx.uq[uhszVhbb1?1209V4*aun'xm#jmw.bnh|*quWyd~Rlfn=0=64=R8&myj#|i/fa{*fjlp&}yS}`{r^`jj959:81^<"i}f/pe+be&jf`t"y}_qlwvZdnf5>5><5Z0.eqb+ta'nis"nbdx.uq[uhszVhbb1;1209V4*aun'xm#jmw.bnh|*quWyd~Rlfn=4=64=R8&myj#|i/fa{*fjlp&}yS}`{r^`jj919:81^<"i}f/pe+be&jf`t"y}_qlwvZdnf525><5Z0.eqb+ta'nis"nbdx.uq[uhszVhbb171219V4*aun'xm#jmw.bnh|*quWyd~Rlfn^314>S7'nxm"h gbz-gim'~xT|cz}_ckm[7473\:$kh!rg-dg}(ddbr${Qnup\flhX;;:0Y=!hrg,qb*adp'iggu!xr^rmpwYeagU?>=5Z0.eqb+ta'nis"nbdx.uq[uhszVhbbR;=0:W3+bta&{l$knv!cmi{+rtXxg~ySoga_703?P6(o{l%~k!hcy,`hn~({U{by|Pbhl\376<]9%l~k }f.e`|+ekcq%|~R~ats]amkY?:91^<"i}f/pe+be&jf`t"y}_qlwvZdnfV39:6[?/fpe*w`(ojr%oaew/vp\tkruWkceSua}012362=R8&myj#|i/fa{*fjlp&}yS}`{r^`jjZ~hz9:;<<<9;T2,cw`)zo%lou lljz,swYwf}xTnd`Pxnp34575?2_;#j|i.sd,cf~)keas#z|Ppovq[goiWqey<=>>1348Q5)`zo$yj"ilx/aoo})pzVzexQmio]{kw678;8<7X> gsd-vc)`kq$h`fv ws]sjqtXj`dTtb|?010263=R8&myj#|i/fa{*fjlp&}yS}`{r^`jjZ~hz9:;??94U1-dvc(un&mht#mcky-tvZvi|{UiecQwos234645>2_;#j|i.sd,cf~)keas#z|Ppovq[goiWqey<=>;269V4*aun'xm#jmw.bnh|*quWyd~Rlfn^zlv567<88=7X> gsd-vc)`kq$h`fv ws]sjqtXj`dTtb|?01713>S7'nxm"h gbz-gim'~xT|cz}_ckm[}iu89:>=?84U1-dvc(un&mht#mcky-tvZvi|{UiecQwos23434?3\:$kh!rg-dg}(ddbr${Qnup\flhXpfx;<=8>1358Q5)`zo$yj"ilx/aoo})pzVzexQmio]{kw678?89n6[?/fpe*w`(ojr%oaew/vp\tkruWkceSua}0125[gbc8;<0Y=!hrg,qb*adp'iggu!xr^rmpwYeagUsc>?0604?P6(o{l%~k!hcy,`hn~({U{by|Pbhl\|jt789=:>=5Z0.eqb+ta'nis"nbdx.uq[uhszVmh0=0=0:W3+bta&{l$knv!cmi{+rtXxg~ySjm31?03?P6(o{l%~k!hcy,`hn~({U{by|Pgb>1:76<]9%l~k }f.e`|+ekcq%|~R~ats]dg959:91^<"i}f/pe+be&jf`t"y}_qlwvZad4=49<6[?/fpe*w`(ojr%oaew/vp\tkruWni793328Q5)`zo$yj"ilx/aoo})pzVzexQhc=5=65=R8&myj#|i/fa{*fjlp&}yS}`{r^e`8=8582_;#j|i.sd,cf~)keas#z|Ppovq[be;17;m7X> gsd-vc)`kq$h`fv ws]sjqtXojU;=k5Z0.eqb+ta'nis"nbdx.uq[uhszVmhS;m7X> gsd-vc)`kq$h`fv ws]sjqtXojU3=k5Z0.eqb+ta'nis"nbdx.uq[uhszVmhS4<9;T2,cw`)zo%lou lljz,swYwf}xTknQnssgd8585>2_;#j|i.sd,cf~)keas#z|Ppovq[beXizxnk1?1279V4*aun'xm#jmw.bnh|*quWyd~Ril_`qqab:56;<0Y=!hrg,qb*adp'iggu!xr^rmpwY`kVkx~hi33?05?P6(o{l%~k!hcy,`hn~({U{by|Pgb]bwwc`4=49:6[?/fpe*w`(ojr%oaew/vp\tkruWniTm~|jg=7=63=R8&myj#|i/fa{*fjlp&}yS}`{r^e`[duumn6=2?84U1-dvc(un&mht#mcky-tvZvi|{UloRo|rde?3;413\:$kh!rg-dg}(ddbr${Qnup\cfYf{{ol050=6:W3+bta&{l$knv!cmi{+rtXxg~ySjmParpfc9?9:<1^<"i}f/pe+be&jf`t"y}_qlwvZadWhyyijQ?249V4*aun'xm#jmw.bnh|*quWyd~Ril_`qqabY6:<1^<"i}f/pe+be&jf`t"y}_qlwvZadWhyyijQ=249V4*aun'xm#jmw.bnh|*quWyd~Ril_`qqabY4:<1^<"i}f/pe+be&jf`t"y}_qlwvZadWhyyijQ;249V4*aun'xm#jmw.bnh|*quWyd~Ril_`qqabY2:<1^<"i}f/pe+be&jf`t"y}_qlwvZadWhyyijQ9249V4*aun'xm#jmw.bnh|*quWyd~Ril_`qqabY0:<1^<"i}f/pe+be&jf`t"y}_qlwvZadWhyyijQ7249V4*aun'xm#jmw.bnh|*quWyd~Ril_`qqabY>:01^<"i}f/pe+be&jf`t"y}_qlwvZadWhyyijQk1=3=6<=R8&myj#|i/fa{*fjlp&}yS}`{r^e`[duumnUo=1<1289V4*aun'xm#jmw.bnh|*quWyd~Ril_`qqabYc9595>45Z0.eqb+ta'nis"nbdx.uq[uhszVmhSl}}ef]g5929:01^<"i}f/pe+be&jf`t"y}_qlwvZadWhyyijQk1=7=6<=R8&myj#|i/fa{*fjlp&}yS}`{r^e`[duumnUo=181289V4*aun'xm#jmw.bnh|*quWyd~Ril_`qqabYc95=5>45Z0.eqb+ta'nis"nbdx.uq[uhszVmhSl}}ef]g59>9:01^<"i}f/pe+be&jf`t"y}_qlwvZadWhyyijQk1=;=6==R8&myj#|i/fa{*fjlp&}yS}`{r^e`[duumnUo=R?=8:W3+bta&{l$knv!cmi{+rtXxg~ySjmParpfcZb6W;837X> gsd-vc)`kq$h`fv ws]sjqtXojUjkh_e3\77><]9%l~k }f.e`|+ekcq%|~R~ats]dgZgtzlmTh55Z0.eqb+ta'nis"nbdx.uq[uhszVmhSl}}ef]g5Z?5=2_;#j|i.sd,cf~)keas#z|Ppovq[beXpfx;<=>=5:W3+bta&{l$knv!cmi{+rtXxg~ySjmPxnp34575=2_;#j|i.sd,cf~)keas#z|Ppovq[beXpfx;<=<=5:W3+bta&{l$knv!cmi{+rtXxg~ySjmPxnp34555=2_;#j|i.sd,cf~)keas#z|Ppovq[beXpfx;<=:=5:W3+bta&{l$knv!cmi{+rtXxg~ySjmPxnp34535=2_;#j|i.sd,cf~)keas#z|Ppovq[beXpfx;<=8=5:W3+bta&{l$knv!cmi{+rtXxg~ySjmPxnp34515=2_;#j|i.sd,cf~)keas#z|Ppovq[beXpfx;<=6<0:W3+bta&{l$ka>!re-dv4(un~l#@czx^PBIZTCWLDTJZH[200e?P6(o{l%~k!hl1,q`*au9'xm{kz Mlw{[WGJW[OLCXZPEO326a=R8&myj#|i/fn3*wb(o{;%~kyit.avvwYao~Tyo{e=2=6a=R8&myj#|i/fn3*wb(o{;%~kyit.avvwYao~Tyo{e=3=6f=R8&myj#|i/fn3*wb(o{;%~kyit.avvwYao~Tyo{e^21g>S7'nxm"h gm2-va)`z8$yjzh{/bwqvZ`pn}Uxxlzj_016?P6(o{l%~k!hl1,q`*au9'xm{kz ctpq[cqa|VymykPmtz3457;879=7X> gsd-vc)`d9$yh"i}1/pescr(k|xySkyit^qweqcXe|r;<=?30?301>S7'nxm"h gm2-va)`z8$yjzh{/bwqvZ`pn}Uxxlzj_lw{45664848:6[?/fpe*w`(oe:%~i!hr0,qbr`s'jy~Rhxfu]ppdrbWds<=>><0<26==R8&myj#|i/fn3*wb(o{;%~kyit.gntqXn~lSkl=7:W3+bta&{l$ka>!re-dv4(un~l#hctx]escrXa;l0Y=!hrg,qb*ak8'xo#j|>.sdtbq)bey~rSkyit^k\ip~789:8<6[?/fpe*w`(oe:%~i!hr0,qbr`s'lg{xtQiwgv\mZkrp9:;<<<6;T2,cw`)zo%l`= }d.eqev(u{}y$o=!laspzj`r;87827X> gsd-vc)`d9$yh"i}ar,qwqu(k9%hm|vndv?5;4>3\:$kh!rg-dh5(ul&mym~ }suq,g5)di{xrbhz32?0:?P6(o{l%~k!hl1,q`*auiz$yy} c1-`ewt~fl~7?32g9V4*aun'xm#jb?.sf,cwgt&{y"m?/fov|+ajS8W%k`}!mr0e?P6(o{l%~k!hl1,q`*auiz$yy} c1-dip~)odQ9Q#ibs/op6c=R8&myj#|i/fn3*wb(o{kx"}{s.a3+bkrp'mfW>S!glq-iv4a3\:$kh!rg-dh5(ul&mym~ }suq,g5)`e|r%k`U;]/enw+kt::1^<"i}f/pe+bj7&{n$ko|.sqww*e7';7<3<<;T2,cw`)zo%l`= }d.eqev(u{}y$o=!y1=3=66=R8&myj#|i/fn3*wb(o{kx"}{s.a3+s7;:7887X> gsd-vc)`d9$yh"i}ar,qwqu(k9%}=1=1229V4*aun'xm#jb?.sf,cwgt&{y"m?/w3?0;4e3\:$kh!rg-dh5(ul&mym~ }suq,g5)q9V:Tmcj?01226g=R8&myj#|i/fn3*wb(o{kx"}{s.a3+s7X9Vkeh=>?000a?P6(o{l%~k!hl1,q`*auiz$yy} c1-u5Z4Xign;<=>>2c9V4*aun'xm#jb?.sf,cwgt&{y"m?/w3\7Zgil9:;<<45Z0.eqb+ta'nf;"j gscp*wus{&i:#no}rxlfp969:01^<"i}f/pe+bj7&{n$ko|.sqww*e6'jky~t`jt=3=6<=R8&myj#|i/fn3*wb(o{kx"}{s.a2+fguzpdnx1<1289V4*aun'xm#jb?.sf,cwgt&{y"m>/bcqv|hb|595>k5Z0.eqb+ta'nf;"j gscp*wus{&i:#jczx/en_5[)od;%a</fov|+ajS;W%k`}!mr0e?P6(o{l%~k!hl1,q`*auiz$yy} c0-dip~)odQ8Q#ibs/op6c=R8&myj#|i/fn3*wb(o{kx"}{s.a2+bkrp'mfW9S!glq-iv443\:$kh!rg-dh5(ul&mym~ }suq,g4)q95:5>>5Z0.eqb+ta'nf;"j gscp*wus{&i:#{?31?00?P6(o{l%~k!hl1,q`*auiz$yy} c0-u5949::1^<"i}f/pe+bj7&{n$ko|.sqww*e6';7?3<<;T2,cw`)zo%l`= }d.eqev(u{}y$o?000a?P6(o{l%~k!hl1,q`*auiz$yy} c0-u5Z7Xign;<=>>2c9V4*aun'xm#jb?.sf,cwgt&{y"m>/w3\6Zgil9:;<<o5Z0.eqb+ta'nf;"j gscp*wus{&i:#{?P4^llp567888;7X> gsd-vc)`d9$yh"i}ar,qwqu(kfg{4U1-dvc(un&mg<#|k/fpbw+tt|z%hc`~>289V4*aun'xm#jb?.sf,cwgt&{y"|nm^gntqXnkUb?=5Z0.eqb+ta'nf;"j gscp*wus{&xjaRkbpu{\bgYnWfx;<=><1:W3+bta&{l$ka>!re-dvdu)zz~x#ob_dosp|YajVcTc>?01317>S7'nxm"h gm2-va)uxg~y#@m`uov\gjsi|;>0Y=!hrg,qb*ak8'xo#~ats-Ngjsi|Vidycz>259V4*aun'xm#jb?.sf,vuhsz&Ghcx`{_bmvjq45<2_;#j|i.sd,ci6)zm%y|cz}/LalqkrXkfex><;;T2,cw`)zo%l`= }d.psjqt(Eje~byQlotlw072<]9%l~k }f.eo4+tc'{zex!BcnwmpZeh}g~>>95Z0.eqb+ta'nf;"j rqlwv*Kdg|dSnaznu410>S7'nxm"h gm2-va)uxg~y#@m`uov\gjsi|>8?7X> gsd-vc)`d9$yh"|nup,Ifirf}Uhcx`{83;8Q5)`zo$yj"ic0/pg+wvi|{%Fob{at^alqkrXkp6;2?m4U1-dvc(un&mg<#|k/srmpw)JkfexRm`uov\g|:76Vx>45Z0.eqb+ta'nf;"j rqlwv*Kdg|dSnaznu]`}979:j1^<"i}f/pe+bj7&{n$~}`{r.O`kphsWje~byQly=3=[wr512_;#j|i.sd,ci6)zm%y|cz}/LalqkrXkfexRmv<3<1g>S7'nxm"h gm2-va)uxg~y#@m`uov\gjsi|Vir0?0Pru0:?P6(o{l%~k!hl1,q`*twf}x$Anaznu]`kphsWjs7?37:Zts:01^<"i}f/pe+bj7&{n$~}`{r.O`kphsWje~byQly=7=6f=R8&myj#|i/fn3*wb(zyd~"Clotlw[firf}Uhu1;1_sv1=>S7'nxm"h gm2-va)uxg~y#@m`uov\gjsi|Vir0;0=c:W3+bta&{l$ka>!re-qtkru'DidyczPcnwmpZe~4?4T~y<6;T2,cw`)zo%l`= }d.psjqt(Eje~byQlotlw[f;?78h7X> gsd-vc)`d9$yh"|nup,Ifirf}Uhcx`{_b{?3;Yu|;k0Y=!hrg,qb*ak8'xo#~ats-Ngjsi|VidyczPxnp?4;4f3\:$kh!rg-dh5(ul&x{by| MbmvjqYdg|dSua}<0<1e>S7'nxm"h gm2-va)uxg~y#@m`uov\gjsi|Vrd~1<12`9V4*aun'xm#jb?.sf,vuhsz&Ghcx`{_bmvjqYg{682?o4U1-dvc(un&mg<#|k/srmpw)JkfexRm`uov\|jt;<78j7X> gsd-vc)`d9$yh"|nup,Ifirf}Uhcx`{_ymq8085i2_;#j|i.sd,ci6)zm%y|cz}/LalqkrXkfexRv`r=4=6d=R8&myj#|i/fn3*wb(zyd~"Clotlw[firf}Usc28>3c8Q5)`zo$yj"ic0/pg+wvi|{%Fob{at^alqkrXpfx74311g9V4*aun'xm#jb?.sf,vuhsz&idycz31?3e?P6(o{l%~k!hl1,q`*twf}x$ob{at=0=5c=R8&myj#|i/fn3*wb(zyd~"m`uov?7;7a3\:$kh!rg-dh5(ul&x{by| cnwmp9299o1^<"i}f/pe+bj7&{n$~}`{r.alqkr;=7;m7X> gsd-vc)`d9$yh"|nup,gjsi|5<5=k5Z0.eqb+ta'nf;"j rqlwv*eh}g~7;3?i;T2,cw`)zo%l`= }d.psjqt(kfex1611d9V4*aun'xm#jb?.sf,vuhsz&idyczP00g8Q5)`zo$yj"ic0/pg+wvi|{%hcx`{_03f?P6(o{l%~k!hl1,q`*twf}x$ob{at^02a>S7'nxm"h gm2-va)uxg~y#naznu]05`=R8&myj#|i/fn3*wb(zyd~"m`uov\04c<]9%l~k }f.eo4+tc'{zex!lotlw[07b3\:$kh!rg-dh5(ul&x{by| cnwmpZ06m2_;#j|i.sd,ci6)zm%y|cz}/bmvjqY09l1^<"i}f/pe+bj7&{n$~}`{r.alqkrX0;80Y=!hrg,qb*ak8'xo#~ats-`kphsWm;7<3<=;T2,cw`)zo%l`= }d.psjqt(kfexRj><0<16>S7'nxm"h gm2-va)uxg~y#naznu]g5949:;1^<"i}f/pe+bj7&{n$~}`{r.alqkrXl8682?<4U1-dvc(un&mg<#|k/srmpw)dg|dSi?34?01?P6(o{l%~k!hl1,q`*twf}x$ob{at^f28085:2_;#j|i.sd,ci6)zm%y|cz}/bmvjqYc95<5>?5Z0.eqb+ta'nf;"j rqlwv*eh}g~Th<28>308Q5)`zo$yj"ic0/pg+wvi|{%hcx`{_e3?<;463\:$kh!rg-dh5(ul&x{by| cnwmpZb6W98:7X> gsd-vc)`d9$yh"|nup,gjsi|Vn:S<<>;T2,cw`)zo%l`= }d.psjqt(kfexRj>_302?P6(o{l%~k!hl1,q`*twf}x$ob{at^f2[6463\:$kh!rg-dh5(ul&x{by| cnwmpZb6W=8:7X> gsd-vc)`d9$yh"|nup,gjsi|Vn:S8<>;T2,cw`)zo%l`= }d.psjqt(kfexRj>_702?P6(o{l%~k!hl1,q`*twf}x$ob{at^f2[2463\:$kh!rg-dh5(ul&x{by| cnwmpZb6W18?7X> gsd-vc)`d9$yh"|nup,gjsi|Vddx=>?12d8Q5)`zo$yj"ic0/uq+bqf{'m{j#y}pg-NeabXl`lmS}`{r^rb`Zgcl9:;S7'nxm"h gm2-sw)`hy%k}h!wsre+HgclVnbjkQnup\tdbXimn;<=>Pcx>2:6`<]9%l~k }f.eo4+qu'n}j#if/uqtc)JimnThdhi_qlwvZvflVkoh=>?0^az8784n2_;#j|i.sd,ci6){%l{l}!gqd-swva'DkohRjffg]sjqtXxhnTmij?012\g|:46:l0Y=!hrg,qb*ak8'}y#jyns/esb+quxo%FmijPdhde[uhszVzjhRokd1234Ze~4=48j6[?/fpe*w`(oe:%{!hw`q-cu`){zm#@okd^fjbcYwf}xT|ljPaef3456Xkp6>2>h4U1-dvc(un&mg<#y}/fubw+awn'}y|k!Baef\`l`aWyd~R~nd^cg`5678Vir0;0!ws-dsdu)oyl%{~i/Lcg`ZbnnoU{by|Pp`f\eab789:Tot28>2d8Q5)`zo$yj"ic0/uq+bqf{'m{j#y}pg-NeabXl`lmS}`{r^rb`Zgcl9:;S7'nxm"h gm2-sw)`hy%k}h!wsre+HgclVnbjkQnup\tdbXimn;<=>Pcx>::17<]9%l~k }f.eo4+qu'n}j#if/uqtc)JimnThdhi_qlwvZvflVkoh=>?0^nvp9776=:0Y=!hrg,qb*ak8'}y#jyns/esb+quxo%FmijPdhde[uhszVzjhRokd1234Zjr|5;58;5Z0.eqb+ta'nf;"z| gvcp*bva&~x{j"Cnde]gmc`Xxg~yS}ok_`fg4567We0<0PIOT\416<]9%l~k }f.eo4+qu'n}j#if/uqtc)JimnThdhi_qlwvZvflVkoh=>?0^nvp949<91^<"i}f/pe+bj7&~x$kzo|.fre*rtwn&GjhiQkigd\tkruWykoSljk0123[iss4:4?<6[?/fpe*w`(oe:%{!hw`q-cu`){zm#@okd^fjbcYwf}xT|ljPaef3456Xd|~783:?;T2,cw`)zo%l`= xr.etev(`xo$|~}h M`fg[aoanVzexQae]b`a6789Ugyy2:>528Q5)`zo$yj"ic0/uq+bqf{'m{j#y}pg-NeabXl`lmS}`{r^rb`Zgcl9:;?_mww828382_;#j|i.sd,ci6){%l{l}!gqd-swva'DkohRjffg]sjqtXxhnTmij?012\hpr;07>;7X> gsd-vc)`d9$|~"ixar,dtc(pzyl$Aljk_ekebZvi|{U{miQnde2345Yk}}6229?4U1-dvc(un&mg<#y}/fubw+awn'}y|k!Baef\`l`aWyd~R~nd^cg`5678Vrd~1??>528Q5)`zo$yj"ic0/uq+bqf{'m{j#y}pg-NeabXl`lmS}`{r^rb`Zgcl9:;?_ymq878382_;#j|i.sd,ci6){%l{l}!gqd-swva'DkohRjffg]sjqtXxhnTmij?012\|jt;;7>;7X> gsd-vc)`d9$|~"ixar,dtc(pzyl$Aljk_ekebZvi|{U{miQnde2345Yg{6?29>4U1-dvc(un&mg<#y}/fubw+awn'}y|k!Baef\`l`aWyd~R~nd^cg`5678Vrd~1;1419V4*aun'xm#jb?.vp,crgt&nzm"z|f.Ob`aYcaolT|cz}_qcg[dbc89:;Sua}<7<74>S7'nxm"h gm2-sw)`hy%k}h!wsre+HgclVnbjkQnup\tdbXimn;<=>Pxnp?3;273\:$kh!rg-dh5(pz&m|m~ hpg,tvu`(EhnoSigif^rmpwYwimUjhi>?01]{kw:?6=:0Y=!hrg,qb*ak8'}y#jyns/esb+quxo%FmijPdhde[uhszVzjhRokd1234Z~hz535?=5Z0.eqb+ta'nf;"z| gvcp*bva&~x{j"jffg]sjqtXxhn7==0=f:W3+bta&{l$ka>!ws-dsdu)oyl%{~i/ekebZvi|{U{mi2>>3d8Q5)`zo$yj"ic0/uq+bqf{'m{j#y}pg-gmc`Xxg~yS}ok<3<1b>S7'nxm"h gm2-sw)`hy%k}h!wsre+aoanVzexQae>0:7`<]9%l~k }f.eo4+qu'n}j#if/uqtc)caolT|cz}_qcg8185n2_;#j|i.sd,ci6){%l{l}!gqd-swva'mcmjR~ats]sea:26;l0Y=!hrg,qb*ak8'}y#jyns/esb+quxo%oekhPpovq[ugc4?49j6[?/fpe*w`(oe:%{!hw`q-cu`){zm#igif^rmpwYwim6<2?h4U1-dvc(un&mg<#y}/fubw+awn'}y|k!kigd\tkruWyko050=f:W3+bta&{l$ka>!ws-dsdu)oyl%{~i/ekebZvi|{U{mi26>3g8Q5)`zo$yj"ic0/uq+bqf{'m{j#y}pg-gmc`Xxg~yS}ok_00e?P6(o{l%~k!hl1,tv*apiz$l|k xrqd,`l`aWyd~R~nd^336`=R8&myj#|i/fn3*rt(o~kx"j~i.vpsb*bnnoU{by|Pp`f\67c<]9%l~k }f.eo4+qu'n}j#if/uqtc)caolT|cz}_qcg[64b3\:$kh!rg-dh5(pz&m|m~ hpg,tvu`(l`lmS}`{r^rb`Z25m2_;#j|i.sd,ci6){%l{l}!gqd-swva'mcmjR~ats]seaY2:l1^<"i}f/pe+bj7&~x$kzo|.fre*rtwn&nbjkQnup\tdbX>;o0Y=!hrg,qb*ak8'}y#jyns/esb+quxo%oekhPpovq[ugcW>8n7X> gsd-vc)`d9$|~"ixar,dtc(pzyl$hdhi_qlwvZvflV29i6[?/fpe*w`(oe:%{!hw`q-cu`){zm#igif^rmpwYwimU2?55Z0.eqb+ta'nf;"z| gvcp*bva&~x{j"jffg]sjqtXxhnTmij?012?5584?2_;#j|i.sd,ci6){%l{l}!gqd-swva'mcmjR~ats]seaYflm:;<=2>>258Q5)`zo$yj"ic0/uq+bqf{'m{j#y}pg-gmc`Xxg~yS}ok_`fg45674;48;6[?/fpe*w`(oe:%{!hw`q-cu`){zm#igif^rmpwYwimUjhi>?01>0:61<]9%l~k }f.eo4+qu'n}j#if/uqtc)caolT|cz}_qcg[dbc89:;090<7:W3+bta&{l$ka>!ws-dsdu)oyl%{~i/ekebZvi|{U{miQnde2345:26:=0Y=!hrg,qb*ak8'}y#jyns/esb+quxo%oekhPpovq[ugcWhno<=>?<7<03>S7'nxm"h gm2-sw)`hy%k}h!wsre+aoanVzexQae]b`a67896<2>94U1-dvc(un&mg<#y}/fubw+awn'}y|k!kigd\tkruWykoSljk01238=84?2_;#j|i.sd,ci6){%l{l}!gqd-swva'mcmjR~ats]seaYflm:;<=26>3c8Q5)`zo$yj"ic0/uq+bqf{'m{j#y}pg-svjaXn|fgSd==;T2,cw`)zo%l`= xr.etev(`xo$|~}h psmd[cskdVcTaxv?01100>S7'nxm"h gm2-sw)`hy%k}h!wsre+uthoVl~`aQf_lw{4564989?7X> gsd-vc)`d9$|~"ixar,dtc(pzyl$|ah_gwohZoXe|r;<==>92:8Q5)`zo$yj"ic0/uq+bqf{'m{j#y}pg-svjaXn|fgSdQbuy23467>WZ];??5Z0.eqb+ta'nf;"z| gvcp*bva&~x{j"~}of]eqijXaVddx=>?13;8Q5)`zo$yj"ic0/uq+bqf{'}xx~!l1.abvwim}6;2?74U1-dvc(un&mg<#y}/fubw+qt|z%h="mnrs{maq:66;30Y=!hrg,qb*ak8'}y#jyns/uppv)d9&ij~waeu>1:7?<]9%l~k }f.eo4+qu'n}j#y|tr-`5*efz{seiy2<>3d8Q5)`zo$yj"ic0/uq+bqf{'}xx~!l1.enq}(`eR:V"jc>.l31b>S7'nxm"h gm2-sw)`hy%{~z|/b3,chs&ngP=P hmr,nw7`<]9%l~k }f.eo4+qu'n}j#y|tr-`5*aj}q$laV318Q5)`zo$yj"ic0/uq+bqf{'}xx~!l1.t28485;2_;#j|i.sd,ci6){%l{l}!wrvp+f7(~8692?=4U1-dvc(un&mg<#y}/fubw+qt|z%h="x><2<17>S7'nxm"h gm2-sw)`hy%{~z|/b3,r4:36;h0Y=!hrg,qb*ak8'}y#jyns/uppv)d9&|:S=Qnne234575j2_;#j|i.sd,ci6){%l{l}!wrvp+f7(~8U:Sl`k012357d<]9%l~k }f.eo4+qu'n}j#y|tr-`5*p6W;Ujbi>?0131f>S7'nxm"h gm2-sw)`hy%{~z|/b3,r4Y4Whdo<=>?13`8Q5)`zo$yj"ic0/uq+bqf{'}xx~!l1.t2[1Yffm:;<=?=9:W3+bta&{l$ka>!ws-dsdu)z~x#n< c`pq}kcs494956[?/fpe*w`(oe:%{!hw`q-svrt'j8$ol|}yogw848512_;#j|i.sd,ci6){%l{l}!wrvp+f4(khxyuck{<3<1=>S7'nxm"h gm2-sw)`hy%{~z|/b0,gdtuqgo0>0=f:W3+bta&{l$ka>!ws-dsdu)z~x#n< glw{*bk\8T$la< b13d8Q5)`zo$yj"ic0/uq+bqf{'}xx~!l2.enq}(`eR;V"jc|.lq1b>S7'nxm"h gm2-sw)`hy%{~z|/b0,chs&ngP>P hmr,nw7`<]9%l~k }f.eo4+qu'n}j#y|tr-`6*aj}q$laV=R.fop*hu5n2_;#j|i.sd,ci6){%l{l}!wrvp+f4(ods"jcT4\,div(j{;90Y=!hrg,qb*ak8'}y#jyns/uppv)d:&|:0=0=3:W3+bta&{l$ka>!ws-dsdu)z~x#n< v0>2:75<]9%l~k }f.eo4+qu'n}j#y|tr-`6*p64;49?6[?/fpe*w`(oe:%{!hw`q-svrt'j8$z<2<>318Q5)`zo$yj"ic0/uq+bqf{'}xx~!l2.t28185j2_;#j|i.sd,ci6){%l{l}!wrvp+f4(~8U;Sl`k012357d<]9%l~k }f.eo4+qu'n}j#y|tr-`6*p6W8Ujbi>?0131f>S7'nxm"h gm2-sw)`hy%{~z|/b0,r4Y5Whdo<=>?13`8Q5)`zo$yj"ic0/uq+bqf{'}xx~!l2.t2[6Yffm:;<=?=b:W3+bta&{l$ka>!ws-dsdu)z~x#n< v0]7[dhc89:;=?>4U1-dvc(un&mg<#y}/fubw+qt|z%hc`~>219V4*aun'xm#jb?.vp,crgt&~y"m`mq014>S7'nxm"h gm2-sw)`hy%{~z|/bmnt64c3\:$kh!rg-dh5(pz&m|m~ xsuq,cd`)k:%hm|vndv?4;4c3\:$kh!rg-dh5(pz&m|m~ xsuq,cd`)k:%hm|vndv?5;4c3\:$kh!rg-dh5(pz&m|m~ xsuq,cd`)k:%hm|vndv?6;4c3\:$kh!rg-dh5(pz&m|m~ xsuq,cd`)k:%hm|vndv?7;543\:$kh!rg-dh5(pz&m|m~ xsuq,cd`)k:%laxv!glY3Y+aj9'g:?>5Z0.eqb+ta'nf;"z| gvcp*rus{&mjj#m1^<"i}f/pe+bj7&~x$kzo|.vqww*afn'i8#{?32?04?P6(o{l%~k!hl1,tv*apiz$|y} g`d-g6)q9595>:5Z0.eqb+ta'nf;"z| gvcp*rus{&mjj#mPaof34566:o1^<"i}f/pe+bj7&~x$kzo|.vqww*afn'i8#{?P1^cm`567888m7X> gsd-vc)`d9$|~"ixar,twqu(ohl%o>!y1^0\ekb789::>k5Z0.eqb+ta'nf;"z| gvcp*rus{&mjj#m>2b9V4*aun'xm#jb?.vp,crgt&~y"|nm^coijusWog`Rg<4:W3+bta&{l$ka>!ws-dsdu)z~x#ob_`nnkvrXn|fgSdQbuy2345523\:$kh!rg-dh5(pz&m|m~ xsuq,vdkXiegdyQiumn\mZkrp9:;<<=m;T2,cw`)zo%l`= xr.etev(p{}y$~lcPamolwqYa}efTeR``t12354YNF_U;>55Z0.eqb+ta'nf;"z| gvcp*rus{&xjaRhzlm]efZo5=2_;#j|i.sd,ci6){%l{l}!wrvp+wgjWog`Rg=d:W3+bta&{l$ka>!ws-dsdu)z~x#ob_gwohZoXe|r;<=>=e:W3+bta&{l$ka>!ws-dsdu)z~x#ob_gwohZoXe|r;<=>>1e9V4*aun'xm#jb?.vp,vdkX{UnbRg>1g9V4*aun'xm#jb?.vp,vdkX{UnbRg>_000?P6(o{l%~k!hl1,tv*qwf}x$Anaznu]`kphs:=1^<"i}f/pe+bj7&~x${}`{r.O`kphsWje~by?=4:W3+bta&{l$ka>!ws-ttkru'DidyczPcnwmp7433\:$kh!rg-dh5(pz&}{by| MbmvjqYdg|d??:4U1-dvc(un&mg<#y}/vrmpw)JkfexRm`uov761=R8&myj#|i/fn3*rt(yd~"Clotlw[firf}?986[?/fpe*w`(oe:%{!xpovq+Heh}g~Tob{at707?P6(o{l%~k!hl1,tv*qwf}x$Anaznu]`kphs?;>0Y=!hrg,qb*ak8'}y#z~ats-Ngjsi|Vidycz7259V4*aun'xm#jb?.vp,suhsz&Ghcx`{_bmvjq?512_;#j|i.sd,ci6){%||cz}/LalqkrXkfexRmv<1<1g>S7'nxm"h gm2-sw)pxg~y#@m`uov\gjsi|Vir0=0Pru0:?P6(o{l%~k!hl1,tv*qwf}x$Anaznu]`kphsWjs7=31:Zts:01^<"i}f/pe+bj7&~x${}`{r.O`kphsWje~byQly=1=6f=R8&myj#|i/fn3*rt(yd~"Clotlw[firf}Uhu1=1_sv1=>S7'nxm"h gm2-sw)pxg~y#@m`uov\gjsi|Vir090=c:W3+bta&{l$ka>!ws-ttkru'DidyczPcnwmpZe~4=4T~y<6;T2,cw`)zo%l`= xr.usjqt(Eje~byQlotlw[f;=78h7X> gsd-vc)`d9$|~"ynup,Ifirf}Uhcx`{_b{?1;Yu|;30Y=!hrg,qb*ak8'}y#z~ats-Ngjsi|VidyczPcx>5:7e<]9%l~k }f.eo4+qu'~zex!BcnwmpZeh}g~Tot29>^pw6<=R8&myj#|i/fn3*rt(yd~"Clotlw[firf}Uhu1912b9V4*aun'xm#jb?.vp,suhsz&Ghcx`{_bmvjqYdq5=5Sz=9:W3+bta&{l$ka>!ws-ttkru'DidyczPcnwmpZe~4149o6[?/fpe*w`(oe:%{!xpovq+Heh}g~Tob{at^az8=8Xz}8j7X> gsd-vc)`d9$|~"ynup,Ifirf}Uhcx`{_ymq8585i2_;#j|i.sd,ci6){%||cz}/LalqkrXkfexRv`r=3=6d=R8&myj#|i/fn3*rt(yd~"Clotlw[firf}Usc2=>3c8Q5)`zo$yj"ic0/uq+rvi|{%Fob{at^alqkrXpfx7?35:7g<]9%l~k }f.eo4+qu'~zex!BcnwmpZeh}g~Ttb|37?0b?P6(o{l%~k!hl1,tv*qwf}x$Anaznu]`kphsWqey050=a:W3+bta&{l$ka>!ws-ttkru'DidyczPcnwmpZ~hz535>i5Z0.eqb+ta'nf;"z| wqlwv*Kdg|dSnaznu]{kw:>6Vx=k5Z0.eqb+ta'nf;"z| wqlwv*eh}g~7<3?i;T2,cw`)zo%l`= xr.usjqt(kfex1?11g9V4*aun'xm#jb?.vp,suhsz&idycz32?3e?P6(o{l%~k!hl1,tv*qwf}x$ob{at=1=5c=R8&myj#|i/fn3*rt(yd~"m`uov?0;7a3\:$kh!rg-dh5(pz&}{by| cnwmp9399o1^<"i}f/pe+bj7&~x${}`{r.alqkr;>7;m7X> gsd-vc)`d9$|~"ynup,gjsi|5=5=k5Z0.eqb+ta'nf;"z| wqlwv*eh}g~743?i;T2,cw`)zo%l`= xr.usjqt(kfex1711d9V4*aun'xm#jb?.vp,suhsz&idyczP00g8Q5)`zo$yj"ic0/uq+rvi|{%hcx`{_03f?P6(o{l%~k!hl1,tv*qwf}x$ob{at^02a>S7'nxm"h gm2-sw)pxg~y#naznu]05`=R8&myj#|i/fn3*rt(yd~"m`uov\04c<]9%l~k }f.eo4+qu'~zex!lotlw[07b3\:$kh!rg-dh5(pz&}{by| cnwmpZ06m2_;#j|i.sd,ci6){%||cz}/bmvjqY09l1^<"i}f/pe+bj7&~x${}`{r.alqkrX08o0Y=!hrg,qb*ak8'}y#z~ats-`kphsW0897X> gsd-vc)`d9$|~"ynup,gjsi|Vn:0=0=2:W3+bta&{l$ka>!ws-ttkru'je~byQk1=3=67=R8&myj#|i/fn3*rt(yd~"m`uov\`4:56;80Y=!hrg,qb*ak8'}y#z~ats-`kphsWm;7?3<=;T2,cw`)zo%l`= xr.usjqt(kfexRj><5<16>S7'nxm"h gm2-sw)pxg~y#naznu]g5939:;1^<"i}f/pe+bj7&~x${}`{r.alqkrXl86=2?<4U1-dvc(un&mg<#y}/vrmpw)dg|dSi?37?01?P6(o{l%~k!hl1,tv*qwf}x$ob{at^f28=85:2_;#j|i.sd,ci6){%||cz}/bmvjqYc9535><5Z0.eqb+ta'nf;"z| wqlwv*eh}g~Th<5Z0.eqb+ta'nf;"z| wqlwv*eh}g~Th<5Z0.eqb+ta'nf;"z| wqlwv*eh}g~ThS7'nxm"h gm2-sw)pxg~y#naznu]g6959:;1^<"i}f/pe+bj7&~x${}`{r.alqkrXl;6?2?<4U1-dvc(un&mg<#y}/vrmpw)dg|dSi<35?01?P6(o{l%~k!hl1,tv*qwf}x$ob{at^f18385:2_;#j|i.sd,ci6){%||cz}/bmvjqYc:5=5>?5Z0.eqb+ta'nf;"z| wqlwv*eh}g~Th?27>308Q5)`zo$yj"ic0/uq+rvi|{%hcx`{_e0?=;463\:$kh!rg-dh5(pz&}{by| cnwmpZb5W98:7X> gsd-vc)`d9$|~"ynup,gjsi|Vn9S<<>;T2,cw`)zo%l`= xr.usjqt(kfexRj=_302?P6(o{l%~k!hl1,tv*qwf}x$ob{at^f1[6463\:$kh!rg-dh5(pz&}{by| cnwmpZb5W=8:7X> gsd-vc)`d9$|~"ynup,gjsi|Vn9S8<>;T2,cw`)zo%l`= xr.usjqt(kfexRj=_702?P6(o{l%~k!hl1,tv*qwf}x$ob{at^f1[2463\:$kh!rg-dh5(pz&}{by| cnwmpZb5W18:7X> gsd-vc)`d9$|~"ynup,gjsi|Vn9S4<=;T2,cw`)zo%l`= xr.usjqt(kfexRj<<1<16>S7'nxm"h gm2-sw)pxg~y#naznu]g7979:;1^<"i}f/pe+bj7&~x${}`{r.alqkrXl:692?<4U1-dvc(un&mg<#y}/vrmpw)dg|dSi=33?01?P6(o{l%~k!hl1,tv*qwf}x$ob{at^f08185:2_;#j|i.sd,ci6){%||cz}/bmvjqYc;5?5>?5Z0.eqb+ta'nf;"z| wqlwv*eh}g~Th>29>308Q5)`zo$yj"ic0/uq+rvi|{%hcx`{_e1?3;453\:$kh!rg-dh5(pz&}{by| cnwmpZb44149>6[?/fpe*w`(oe:%{!xpovq+firf}Uo?171209V4*aun'xm#jb?.vp,suhsz&idyczPd2]364=R8&myj#|i/fn3*rt(yd~"m`uov\`6Y6:81^<"i}f/pe+bj7&~x${}`{r.alqkrXl:U9><5Z0.eqb+ta'nf;"z| wqlwv*eh}g~Th>Q<209V4*aun'xm#jb?.vp,suhsz&idyczPd2]764=R8&myj#|i/fn3*rt(yd~"m`uov\`6Y2:81^<"i}f/pe+bj7&~x${}`{r.alqkrXl:U=><5Z0.eqb+ta'nf;"z| wqlwv*eh}g~Th>Q8209V4*aun'xm#jb?.vp,suhsz&idyczPd2];64=R8&myj#|i/fn3*rt(yd~"m`uov\`6Y>:=1^<"i}f/pe+bj7&~x${}`{r.alqkrXff~;<=?>7:W3+bta&{l$ahc dnww[l:76820Y=!hrg,qb*kbe&ndyyQf<02=5==R8&myj#|i/lgn+air|Vc7=<0>8:W3+bta&{l$ahc dnww[l:6:7;37X> gsd-vc)jmd%ocxzPi=30:4><]9%l~k }f.ofi*bh}}Ub0<:1199V4*aun'xm#`kb/emvpZo;9<4:46[?/fpe*w`(elg$hb{{_h>22;7?3\:$kh!rg-nah)cg|~Te1?8>0:8Q5)`zo$yj"cjm.flqqYn4825=55Z0.eqb+ta'dof#iazt^k?5<86?2_;#j|i.sd,i`k(lfSd2>>0:8Q5)`zo$yj"cjm.flqqYn4;:5=55Z0.eqb+ta'dof#iazt^k?648602_;#j|i.sd,i`k(lfSd2=2?3;?P6(o{l%~k!bel-gkprXa5882<64U1-dvc(un&gna"j`uu]j8729911^<"i}f/pe+hcj'me~xRg324<2<>S7'nxm"h mdo,`jssW`69:3?7;T2,cw`)zo%fi`!kotv\m9406820Y=!hrg,qb*kbe&ndyyQf<3:=5==R8&myj#|i/lgn+air|Vc7>40>7:W3+bta&{l$ahc dnww[l:56820Y=!hrg,qb*kbe&ndyyQf<22=5==R8&myj#|i/lgn+air|Vc7?<0>8:W3+bta&{l$ahc dnww[l:4:7;37X> gsd-vc)jmd%ocxzPi=10:4><]9%l~k }f.ofi*bh}}Ub0>:1199V4*aun'xm#`kb/emvpZo;;<4:;6[?/fpe*w`(elg$hb{{_h>0:41<]9%l~k }f.ofi*bh}}Ub090>7:W3+bta&{l$ahc dnww[l:268=0Y=!hrg,qb*kbe&ndyyQf<7<23>S7'nxm"h mdo,`jssW`6<2<94U1-dvc(un&gna"j`uu]j8=86?2_;#j|i.sd,i`k(lfSd26>048Q5)`zo$yj"cjm.flqqYnW9;=7X> gsd-vc)jmd%ocxzPi^323>S7'nxm"h mdo,`jssW`U:<<94U1-dvc(un&gna"j`uu]j[476?2_;#j|i.sd,i`k(lfSdQ>2058Q5)`zo$yj"cjm.flqqYnW89:;6[?/fpe*w`(elg$hb{{_h]2041<]9%l~k }f.ofi*bh}}UbS<;>7:W3+bta&{l$ahc dnww[lY6>8=0Y=!hrg,qb*kbe&ndyyQf_0523>S7'nxm"h mdo,`jssW`U:4<94U1-dvc(un&gna"j`uu]j[4?6>2_;#j|i.sd,i`k(lfSdQ=169V4*aun'xm#`kb/emvpZoX:9;<7X> gsd-vc)jmd%ocxzPi^0252=R8&myj#|i/lgn+air|VcT>??8;T2,cw`)zo%fi`!kotv\mZ449>1^<"i}f/pe+hcj'me~xRgP2534?P6(o{l%~k!bel-gkprXaV8>=:5Z0.eqb+ta'dof#iazt^k\63703\:$kh!rg-nah)cg|~TeR<8169V4*aun'xm#`kb/emvpZoX:1;<7X> gsd-vc)jmd%ocxzPi^0:53=R8&myj#|i/lgn+air|VcT?<94U1-dvc(un&gna"j`uu]j[666?2_;#j|i.sd,i`k(lfSdQ<1058Q5)`zo$yj"cjm.flqqYnW:8:;6[?/fpe*w`(elg$hb{{_h]0741<]9%l~k }f.ofi*bh}}UbS>:>7:W3+bta&{l$ahc dnww[lY4=8<0Y=!hrg,qb*kbe&ndyyQf_535?P6(o{l%~k!bel-gkprXaV?::6[?/fpe*w`(elg$hb{{_h]553=R8&myj#|i/lgn+air|VcT;<84U1-dvc(un&gna"j`uu]j[=713\:$kh!rg-nah)cg|~TeR7>9:W3+bta&{l$ahc dnww[hcj494:m6[?/fpe*w`(elg$hb{{_lgn84699h1^<"i}f/pe+hcj'me~xRcjm=32:4g<]9%l~k }f.ofi*bh}}Ufi`2>2?3b?P6(o{l%~k!bel-gkprXelg7=>0>a:W3+bta&{l$ahc dnww[hcj48>5=l5Z0.eqb+ta'dof#iazt^ofi97268k0Y=!hrg,qb*kbe&ndyyQbel>22;7f3\:$kh!rg-nah)cg|~Tahc316<2e>S7'nxm"h mdo,`jssWdof0<611`9V4*aun'xm#`kb/emvpZkbe5;22<74U1-dvc(un&gna"j`uu]nah:668k0Y=!hrg,qb*kbe&ndyyQbel>14;7f3\:$kh!rg-nah)cg|~Tahc320<2e>S7'nxm"h mdo,`jssWdof0?<11`9V4*aun'xm#`kb/emvpZkbe5882 gsd-vc)jmd%ocxzPmdo?6086i2_;#j|i.sd,i`k(lfS`kb<34=5d=R8&myj#|i/lgn+air|Vgna1<8>0c8Q5)`zo$yj"cjm.flqqYjmd6943?n;T2,cw`)zo%fi`!kotv\i`k;:04:56[?/fpe*w`(elg$hb{{_lgn8786i2_;#j|i.sd,i`k(lfS`kb<22=5d=R8&myj#|i/lgn+air|Vgna1=>>0c8Q5)`zo$yj"cjm.flqqYjmd68>3?n;T2,cw`)zo%fi`!kotv\i`k;;:4:m6[?/fpe*w`(elg$hb{{_lgn86299h1^<"i}f/pe+hcj'me~xRcjm=16:4?<]9%l~k }f.ofi*bh}}Ufi`2<>0;8Q5)`zo$yj"cjm.flqqYjmd6?2<74U1-dvc(un&gna"j`uu]nah:26830Y=!hrg,qb*kbe&ndyyQbel>5:4?<]9%l~k }f.ofi*bh}}Ufi`28>0;8Q5)`zo$yj"cjm.flqqYjmd632<74U1-dvc(un&gna"j`uu]nah:>6>>0Y=!hrg,qb*kbe&mia#immf,dfhaf&gmnon mmf-ahnYjmdUlick}aumq+sgkam$hy| r`ookjv\8T$ym` }/r1\jjoia}$ym`!kpscn*av60q9="ob1c9V4*aun'xm#`kb/uos[wgjW{nTic?l;T2,cw`)zo%fi`!{mq]qehYulVoe=<94U1-dvc(un&xjaR|jgnww[`h6l2_;#j|i.sd,vvredb%yhR||t^cpv`a582_;#j|i.sd,vvredb%yhR||t^cpv`aXl88;7X> gsd-vc)u{}hgg"|k_sqw[duumnUo>d:W3+bta&{l$~~zmlj-q`Ztt|VxnkR>>d:W3+bta&{l$~~zmlj-q`Ztt|VxnkR?>d:W3+bta&{l$~~zmlj-q`Ztt|VxnkR<>d:W3+bta&{l$~~zmlj-tvZtt|Vkx~hi=0:W3+bta&{l$~~zmlj-tvZtt|Vkx~hiPd003?P6(o{l%~k!}su`oo*quW{ySl}}ef]g64e<]9%l~k }f.pppgjl'~xT~~zPcnoa5a=R8&myj#|i/sqwfim({UyyQlol`25`=R8&myj#|i/sqwfim({UyyQ}ef>3:4c<]9%l~k }f.pppgjl'~xT~~zPrde?5;7c3\:$kh!rg-qwqdkc&}yS}{_sgd[57c3\:$kh!rg-qwqdkc&}yS}{_sgd[4g<]ZOYSLBFARa8QVCUW_CXEOBJ3:T@G<=QAL]TXT^J3:UFE6=PMKi0[_G[E^OL@@YFk2]YEYKPMNFF[Gb<_[C_IRYFDUJ\Ea=PZ@^NSZGKTI]A5a=_AECET VKB!2-5%US]K*;"<.NSBKJ1>^HZJS=7U][LH@4?]USWNDO;6V\T^T@Gg=_WJEYIRGAFN48\adXAml0TifPPsknR`ttafd:<6Vkm^ObnjtQm{ybcc??;Yfn[Hoig{\n~~g`nb9bhhit|Vof|ywm;`nnkvrXn|fg:6lncjws`>dfkb{S`o}kdp0?fjll2njxlQlotlw,5/c3mkmRm`uov+5,bbf|hUhcx`{(5+g?agsiVidycz'5(f8`drfWje~by&9)e9geqgXkfex%9&d:fbpdYdg|d$5'k;ecweZeh}g~#5$h4d`vb[firf}626=08;e`jp`tu>2nbb%>&6:fjj-7.?2nbb%??)69gmk.69 =0hd`'13+4?aoi 89";6jfn)37-2=cag":9$94dhl+53/03mce$<9&6:fjj-4.>2nbb%=&6:fjj-2.>2nbb%;&6:fjj-0.>2nbb%9&6:fjj->.>2nbb%7&6:fjj969?2nbb1??>69gmk:697=0hd`313<4?aoi4895;6jfn=37:2=cag6:9394dhl?538>3mce0<950?58`lh;9>4=7iga<0<5?aoi4;4=7iga<2<5?aoi4=4=7iga<4<5?aoi4?4=7iga<6<5?aoi414=7iga<8<4?air|!:";6j`uu*2-==cg|~#=='7;emvp-76!11ocxz'13+;?air|!;8%55kotv+51/?3me~x%?:)99gkpr/9?#37iazt)34-==cg|~#=5'7;emvp-7>!>1ocxz'2(:8`jss ;:"46j`uu*15,>bh}}"99$64dnww,70.02ndyy&=7(:8`jss ;2"46j`uu*1=,1'7;emvp-57!11ocxz'30+;?air|!99%55kotv+76/?3me~x%=;)99gkpr/;<#<7iazt)6*3>bh}}">%:5kotv+2,1.?2ndyy&6)69gkpr;8720hb{{<02=<>bh}}6:=364dnww844902ndyy2>3?:8`jss48>546j`uu>21;>bh}}6:5394dnww848?3me~x199gkpr;:8437iazt=01:==cg|~7>>07;emvp943611ocxz324<;?air|58=255kotv?628?3me~x1<7>99gkpr;:04<7iazt=0=<>bh}}68<364dnww867902ndyy2<2?:8`jss4:9546j`uu>00;g;50?:8`jss4:?5;6j`uu>0:2=cg|~78394dnww80803me~x1817:flqq:06>1ocxz38?58`jss40437hjff3ld`0=bey~r>k5iigm\c`hbzh~d~Rx9_0.#\ljnfq*HC_K/Gdlfvdrhz);9"=?v<6^0`hnY60}e8:>o4fhdl[}jipV?:>u=9_3aooZ7?|f9= kgio^efj`tf|fxTz;Q>,OMMA)HHFL>;?6hffn]{hk~X=88s?;Q=cmi\5=rh;?&mekaPgdlfvdrhzV|=S<"tc^jbwZoi|Vigg0>#c^jbwZuu{}7; nQ}d^dqat;6$jUnbllce^pppZu~fj7: nQgar]q`Zbf|hUhcx`{=1.`[aoiW~coxe3>8-a\lduX{UomyoPcnwmp86+kVl~`aQil`ep[wusWkg1="l_hosh`kbf}keb`Ptxrf97*dW|ynShcmeeff`Ztbo4:'oRy}_gpfu87+kVxiRj`uu]qwq;6$jU~bik}fmmt[iip59&hSeo|_ntfvcjh4:'oR~}emmb`Zjf|ldhu0>#c^flqqYpam~c1>8#c^opcjhX~hf6=!mPre]gauro5<;9 nQjrsmq[lhmmj~bccQ{yqg>4)eX`hyTycjjrgnls86+kVbjRocmnqw[cskd4;'oRfns^ppp87+kVnjxlQlotlw[roc|a7:4)eXx{elSk{cl^vkv`uoWgolmykPv`n>5573$jU|~Rjjpuj>5543$jU{~biPelrw}ZrozlycSckhaug\rdj:=%iT|ah_dosp|Ys`{oxdRo|sdpw[sgk5=&hSeo|_wcoma;7$jU{~biPftno[qnumzbTm~}jru]uei;688?'obcoogmpZhfel7mekaPxml{[075p:nbd_0:wk60+kV|j`djPlnu>4)eXx{cfSkgio^vzt`;6cq;3 nQrne\bpjkW}s{i0?#c^ofijt~W}s{i0?#}248bl`hWqfetR;>2y15[7ekcV;3xb=9_gkekZabflxjxb|Pv7]2[}usW8>0jxbcd:kmn`eslkci|k;hliafrtj`~n~94iov\gim?3gmhnxgcd99lr`tadf}j7}|`g^gntq6<2zycjQjmqvz[qnumzb#<$?;;qplcZcjx}sTxe|jsi*2-42vugnUna}zv_ujqavn/< ;?7}|`g^gntqX|axne&:)068twi`Wlg{xtQ{hsgpl-0.9=1{~biPelrw}Zrozlyc$:'>4:rqkbYbey~rSyf}erj+<,713yxdkRkbpu{\pmtb{a636=0>b:rqkbYbey~rSyf}erj\evubz}";%vugnUna}zv_ujqavnXizyn~y&9)0`8twi`Wlg{xtQ{hsgplZgt{lx$:'>b:rqkbYbey~rSyf}erj\evubz}"3%vugnUna}zv_ujqavnXflmjxh&:)0`8twi`Wlg{xtQ{hsgplZhboh~n$;'>b:rqkbYbey~rSyf}erj\j`af|l"<%5rne\bpjkW}byi~f'1(30?uthoVl~`aQ{hsgpl-4.9:1{~biPftno[qnumzb#?$?<;qplcZ`rdeUdk|h)6*56=wzfmTjxbc_ujqavn/= ;87}|`g^dvhiYs`{oxd%8&129svjaXn|fgSyf}erj+3,743yxdkRhzlm]wlwct`!2"=>5rne\bpjkW}byi~f'9(36?uthoVl~`aQ{hsgpl9?=87;j7}|`g^dvhiYs`{oxdRo|sdpw,5/6i2zycjQiumn\pmtb{aUj~k}t)3*5d=wzfmTjxbc_ujqavnXizyn~y&=)0c8twi`Wog`Rzgrdqk[dutm{~#?$?n;qplcZ`rdeUdk|h^cpw`ts =#:m6~}of]eqijX|axneQnsrgqp-3.9h1{~biPftno[qnumzbTm~}jru*5-4ga:rqkbYa}efTxe|jsi]bwvcu|!3"=n5rne\bpjkW}byi~fParqfvq:>294:m6~}of]eqijX|axneQaefcwa-6.9h1{~biPftno[qnumzbTbhintd*2-4g'>a:rqkbYa}efTxe|jsi]mabgsm!>"=l5rne\bpjkW}byi~fPndebp`.2!8k0|ah_gwohZrozlycSckhaug+2,7f3yxdkRhzlm]wlwct`Vdnklzj(6+2e>vugnUmyabPtipfwmYimnki%6&1`9svjaXn|fgSyf}erj\j`af|l"2%4re]geqgXkfex%=&119q`Zbf|hUhcx`{(5+24>tcWmkmRm`uov+1,773{nThlzn_bmvjq.1!8:0~iQkauc\gjsi|!="==5}d^fbpdYdg|d$5'>0:pg[agsiVidycz30?31?wbXlh~jSnaznu>;>5823{nTic84re]qwq5uu{}837yc/^ad+coagVrgbuQ:13z02Z4ddbU:4ya<6/ldk1=sz|o27x`kesdokr3<~hfbh;5xr^c`o3=pzVigg<>4ws]geqgXkfex%>&119tvZbf|hUhcx`{(0+24>quWmkmRm`uov+6,773~xThlzn_bmvjq.4!8:0{Qkauc\gjsi|!>"==5xr^fbpdYdg|d$8'>0:uq[agsiVidycz'6(33?rtXlh~jSnaznu*4-46<{UomyoPcnwmp->.991|~Rjnt`]`kphs 0#:>6y}_ecweZeh}g~757>15:uq[`h13~xT~~zr@Ar``==GHq?=>7H54;3xW1c==991;7?<2c4g6?4f:k=pb96=:09m0=5=>2.?4=4;7`9~W1e==991;7?<2c4g6?4f:k=0_<5<6;;h=h?4=a3`;?V2d2<:n6=4>33`5`7<5i;h37i;?6;295?7|[=o19==57;306g0c:38j>o94vU3;e?6=93;1=n>tS5g9155=?3;8>o8k2;0b6g1<,==86<{#9>o1=55m51494?5a2:08jvF;709Y01<5s8=1==4r$0:e>0613->;>4?::m64d<722e><94?::k622<722c>9k4?::m7`2<72-;3<7:ia:l23c<732e?h;4?:%3;4?2ai2d:;k4>;:m7`0<72-;3<7:ia:l23c<532e?h94?:%3;4?2ai2d:;k4<;:m7`6<72-;3<7:ia:l23c<332e?h?4?:%3;4?2ai2d:;k4:;:m7`5<72-;3<7:ia:l23c<132e?ok4?:%3;4?2ai2d:;k48;:m7g`<72-;3<7:ia:l23c54gc8j41a28807b:l2;29 4>72=lj7c?8f;30?>i3k80;6)?70;6ee>h6?o0:865`4b294?"6090?jl5a16d950=8:9l0ge=83.:4=4;f`9m52`=9010c9jk:18'5=6=!7?83>mm6`>7g82g>=h8187bd=i9>l1=i54o5f:>5<#91:18ko4n05e>4c<3f>o47>5$0:3>1`f3g;54gc8j41a2;807b:ma;29 4>72=lj7c?8f;00?>o31l0;6)?70;6bb>h6?o0;76g;9e83>!7?83>jj6`>7g82?>o31j0;6)?70;6bb>h6?o0976g;9c83>!7?83>jj6`>7g80?>o31h0;6)?70;6bb>h6?o0?76g;9883>!7?83>jj6`>7g86?>o3110;6)?70;6bb>h6?o0=76g;9683>!7?83>jj6`>7g84?>o3i?0;6)?70;6bb>h6?o0376g;a483>!7?83>jj6`>7g8:?>o3i=0;6)?70;6bb>h6?o0j76g;a283>!7?83>jj6`>7g8a?>o3i;0;6)?70;6bb>h6?o0h76g;a083>!7?83>jj6`>7g8g?>o3i90;6)?70;6bb>h6?o0n76g;9g83>!7?83>jj6`>7g8e?>o31?0;6)?70;6bb>h6?o0:<65f48794?"6090?mk5a16d954=5<6290;wE:81:&2tH552?!7?n3n<7bj9:188yg24290j:7?74;3`4~N3?81Q894>6z0;>71=:00h644n:c823?772;k1h7m5d;34>7g=:10:<7l5a;;96<<5?3w/=5h551;8 11==9=0(9j551:8 41>28=h7d;=3;29 4>72<8?7c?8f;28?l35:3:1(<6?:407?k70n3;07d;=1;29 4>72<8?7c?8f;08?l3583:1(<6?:407?k70n3907d;>f;29 4>72<8?7c?8f;68?l36m3:1(<6?:407?k70n3?07d;>d;29 4>72<8?7c?8f;48?l36k3:1(<6?:407?k70n3=07d;>b;29 4>72<8?7c?8f;:8?l37k3:17d;:e;29?l3193:17b;95;29?l3613:1(<6?:43b?k70n3:07d;>8;29 4>72<;j7c?8f;38?l36?3:1(<6?:43b?k70n3807d;>6;29 4>72<;j7c?8f;18?l36=3:1(<6?:43b?k70n3>07d;>4;29 4>72<;j7c?8f;78?l36;3:1(<6?:43b?k70n3<07d;>2;29 4>72<;j7c?8f;58?l3693:1(<6?:43b?k70n3207d;:d;29?j37n3:17d;=d;29 4>72<8n7c?8f;28?l35k3:1(<6?:40f?k70n3;07d;=b;29 4>72<8n7c?8f;08?l35i3:1(<6?:40f?k70n3907d;=9;29 4>72<8n7c?8f;68?l3503:1(<6?:40f?k70n3?07d;=7;29 4>72<8n7c?8f;48?l35>3:1(<6?:40f?k70n3=07d;=5;29 4>72<8n7c?8f;:8?j2?=3:17b:62;29 4>72=387c?8f;28?j2>93:1(<6?:5;0?k70n3;07b:60;29 4>72=387c?8f;08?j2?n3:1(<6?:5;0?k70n3907b:7e;29 4>72=387c?8f;68?j2?l3:1(<6?:5;0?k70n3?07b:7c;29 4>72=387c?8f;48?j2?j3:1(<6?:5;0?k70n3=07b:7a;29 4>72=387c?8f;:8?j2?13:1(<6?:5;0?k70n3307b;=f;29?l30;3:17d;<9;29 4>72<9j7c?8f;28?l3403:1(<6?:41b?k70n3;07d;<7;29 4>72<9j7c?8f;08?l34>3:1(<6?:41b?k70n3907d;<5;29 4>72<9j7c?8f;68?l34<3:1(<6?:41b?k70n3?07d;<3;29 4>72<9j7c?8f;48?l34:3:1(<6?:41b?k70n3=07d;<1;29 4>72<9j7c?8f;:8?l3483:1(<6?:41b?k70n3307b;?a;29?j37<3:17d;97;29?l2??3:17d;;4;29 4>72<>>7c?8f;28?l33;3:1(<6?:466?k70n3;07d;;2;29 4>72<>>7c?8f;08?l3393:1(<6?:466?k70n3907d;;0;29 4>72<>>7c?8f;68?l34n3:1(<6?:466?k70n3?07d;72<>>7c?8f;48?l34l3:1(<6?:466?k70n3=07d;72<>>7c?8f;:8?l34j3:1(<6?:466?k70n3307d;;f;29 4>72727272723:1(<6?:473?k70n3307b:74;29?l37l3:17d:78;29?l30<3:17b;90;29?j31>3:17d;:f;29?j2c?3:1(<6?:5db?k70n3:07b:k6;29 4>72=lj7c?8f;38?j2c=3:1(<6?:5db?k70n3807b:k4;29 4>72=lj7c?8f;18?j2c;3:1(<6?:5db?k70n3>07b:k2;29 4>72=lj7c?8f;78?j2c83:1(<6?:5db?k70n3<07b:lf;29 4>72=lj7c?8f;58?j2dm3:1(<6?:5db?k70n3207b:ld;29 4>72=lj7c?8f;;8?j2dk3:1(<6?:5db?k70n3k07b:lb;29 4>72=lj7c?8f;`8?j2di3:1(<6?:5db?k70n3i07b:l9;29 4>72=lj7c?8f;f8?j2d03:1(<6?:5db?k70n3o07b:l7;29 4>72=lj7c?8f;d8?j2d=3:1(<6?:5db?k70n3;;76a;c583>!7?83>mm6`>7g825>=h8187bd=i9>l1=?54o5a1>5<#91:18ko4n05e>45<3f>h=7>5$0:3>1`f3g;54gc8j41a28=07b:md;29 4>72=lj7c?8f;3;?>i3jj0;6)?70;6ee>h6?o0:565`4ef94?"6090?jl5a16d95d=d:9l0a?=83.:4=4;f`9m52`=9l10c9j7:18'5=6=!7?83>mm6`>7g815>=h8187bd=i9>l1>?54o5`b>5<#91:18ko4n05e>75<3`>2i7>5$0:3>1ga3g;4;h6:`?6=,82;69oi;o34b?7<3`>2o7>5$0:3>1ga3g;2m7>5$0:3>1ga3g;247>5$0:3>1ga3g;j:7>5$0:3>1ga3g;j87>5$0:3>1ga3g;j>7>5$0:3>1ga3g;j<7>5$0:3>1ga3g;2:7>5$0:3>1ga3g;=83.:4=4:5b9m52`=:21d98950;&2<5<2=j1e=:h53:9l100=83.:4=4:5b9m52`=<21d98;50;&2<5<2=j1e=:h55:9l102=83.:4=4:5b9m52`=>21d98=50;&2<5<2=j1e=:h57:9l104=83.:4=4:5b9m52`=021d9:?50;&2<5<2?;1e=:h50:9l126=83.:4=4:739m52`=921d9;h50;&2<5<2?;1e=:h52:9l13c=83.:4=4:739m52`=;21d9;j50;&2<5<2?;1e=:h54:9l13e=83.:4=4:739m52`==21d9;l50;&2<5<2?;1e=:h56:9l13g=83.:4=4:739m52`=?21d9;750;&2<5<2?;1e=:h58:9l13>=83.:4=4:739m52`=121d9<>50;9j15d=831d84:50;9j107=831d9;:50;9a02b=83;1<7>t$0:e>a1<@==h7E:81:mg2?6=3th?;h4?:083>5}#91l18:<4H55`?M2092e:;i4?::a6d6=83>1<7>t$0:e>a4<@==h7E:81:&f1?0>o6080;66a>8383>>{e<a2jl0D99l;I645>N3:2.:??4:629'a0<63`>>6=44i5d94?=h9181<75rb54:>5<4290;w)?7f;ae?M20k2B?;<5G439'564==?90(h;51:k71?6=3`>m6=44o0:1>5<>h7>53;294~"60o0hj6F;7b9K027<@=80(<==:440?!c2281b884?::k7b?6=3f;3>7>5;|`722<72<0;6=u+19d9`6=O<>i0D99>;I61?!74:3?=?6g;5;29?l212900e9h50;9j5=7=831d=5<50;9~f10?29086=4?{%3;b?ea3A>o3=3:17d:i:188k4>52900qo::c;291?6=8r.:4k4k3:J73f=O<>;0D9<4$011>0043`>>6=44i5494?=n8083>>i60;0;66sm47494?2=83:p(<6i:e08L11d3A><=6*j5;48m13=831b8k4?::k2<4<722e:4?4?::a033=83>1<7>t$0:e>a4<@==h7E:81:&f1?0>o6080;66a>8383>>{e1<7:50;2x 4>a2m80D99l;I645>"b=3<0e9;50;9j0c<722c:4<4?::m2<7<722wi8;h50;694?6|,82m6i<4H55`?M2092.n9784i5794?=n8083>>i60;0;66sm47g94?2=83:p(<6i:e08L11d3A><=6*j5;48m13=831b8k4?::k2<4<722e:4?4?::a642=83>1<7>t$0:e>a6<@==h7E:81:&f1?7>o3n3:17b?72;29?xd59:0;694?:1y'5=`=l91C8:m4H552?!c2281b884?::k7f?6=3`>m6=44o0:1>5<7>54;294~"60o0o<6F;7b9K027<,l?1=6g;5;29?l2e2900e9h50;9l5=4=831vn??>:187>5<7s-;3j7j?;I64g>N3?81/i84>;h66>5<>i60;0;66sm20294?2=83:p(<6i:e28L11d3A><=6*j5;38m13=831b8o4?::k7b?6=3f;3>7>5;|`14c<72=0;6=u+19d9`5=O<>i0D99>;%g6>4=n<<0;66g;b;29?l2a2900c<6=:188yg47m3:187>50z&25;h6a>5<=m50;694?6|,82m6i>4H55`?M2092.n97?4i5794?=nb383>1<729q/=5h5d19K02e<@==:7)k::09j00<722c?n7>5;h6e>5<8g8g4>N3?j1C8:?4$d795>o3=3:17d:m:188m1`=831d=5<50;9~f4d7290?6=4?{%3;b?b73A>>6=44i5`94?=n8383>>{e9hl1<7:50;2x 4>a2m:0D99l;I645>"b=3;0e9;50;9j0g<722c?j7>5;n3;6?6=3th:mh4?:583>5}#91l1h=5G46a8L1163-o>6<5f4483>>o3j3:17d:i:188k4>52900qo?nd;290?6=8r.:4k4k0:J73f=O<>;0(h;51:k71?6=3`>i6=44i5d94?=h9181<75rb0c`>5<3290;w)?7f;f3?M20k2B?;<5+e482?l222900e9l50;9j0c<722e:4?4?::a5dd=83>1<7>t$0:e>a6<@==h7E:81:&f1?7>o3n3:17b?72;29?xd6ih0;694?:1y'5=`=l91C8:m4H552?!c2281b884?::k7f?6=3`>m6=44o0:1>5<54;294~"60o0o<6F;7b9K027<,l?1=6g;5;29?l2e2900e9h50;9l5=4=831vn?;i:187>5<7s-;3j7j?;I64g>N3?81/i84>;h66>5<>i60;0;66sm24g94?2=83:p(<6i:e28L11d3A><=6*j5;38m13=831b8o4?::k7b?6=3f;3>7>5;|`11a<72=0;6=u+19d9`5=O<>i0D99>;%g6>4=n<<0;66g;b;29?l2a2900c<6=:188yg42k3:187>50z&25;h6a>5<8o50;694?6|,82m6i>4H55`?M2092.n97?4i5794?=n1<729q/=5h5d19K02e<@==:7)k::09j00<722c?n7>5;h6e>5<8g8g4>N3?j1C8:?4$d795>o3=3:17d:m:188m1`=831d=5<50;9~f4`f290?6=4?{%3;b?b73A>>6=44i5`94?=n8383>>{e9o31<7:50;2x 4>a2m:0D99l;I645>"b=3;0e9;50;9j0g<722c?j7>5;n3;6?6=3th:j54?:583>5}#91l1h=5G46a8L1163-o>6<5f4483>>o3j3:17d:i:188k4>52900qo?i7;290?6=8r.:4k4k0:J73f=O<>;0(h;51:k71?6=3`>i6=44i5d94?=h9181<75rb0d5>5<3290;w)?7f;f3?M20k2B?;<5+e482?l222900e9l50;9j0c<722e:4?4?::a5c3=83>1<7>t$0:e>a6<@==h7E:81:&f1?7>o3n3:17b?72;29?xd6n=0;694?:1y'5=`=l91C8:m4H552?!c2281b884?::k7f?6=3`>m6=44o0:1>5<54;294~"60o0o<6F;7b9K027<,l?1=6g;5;29?l2e2900e9h50;9l5=4=831vn5<7s-;3j7j?;I64g>N3?81/i84>;h66>5<>i60;0;66sm25g94?2=83:p(<6i:e28L11d3A><=6F;2:&277<2>:1/i84>;h66>5<>i60;0;66sm25f94?2=83:p(<6i:e28L11d3A><=6F;2:&277<2>:1/i84>;h66>5<>i60;0;66sm25a94?2=83:p(<6i:e28L11d3A><=6F;2:&277<2>:1/i84>;h66>5<>i60;0;66sm25`94?2=83:p(<6i:e28L11d3A><=6F;2:&277<2>:1/i84>;h66>5<>i60;0;66sm25c94?2=83:p(<6i:e28L11d3A><=6F;2:&277<2>:1/i84>;h66>5<>i60;0;66sm25;94?2=83:p(<6i:e28L11d3A><=6F;2:&277<2>:1/i84>;h66>5<>i60;0;66sm25:94?2=83:p(<6i:e28L11d3A><=6F;2:&277<2>:1/i84>;h66>5<>i60;0;66sm25594?2=83:p(<6i:e28L11d3A><=6F;2:&277<2>:1/i84>;h66>5<>i60;0;66sm25494?2=83:p(<6i:e28L11d3A><=6F;2:&277<2>:1/i84>;h66>5<>i60;0;66sm25794?2=83:p(<6i:e28L11d3A><=6F;2:&277<2>:1/i84>;h66>5<>i60;0;66sm1d:94?2=83:p(<6i:e28L11d3A><=6F;2:&277<2>:1/i84>;h66>5<>i60;0;66sm1d594?2=83:p(<6i:e28L11d3A><=6F;2:&277<2>:1/i84>;h66>5<>i60;0;66sm1d494?2=83:p(<6i:e28L11d3A><=6F;2:&277<2>:1/i84>;h66>5<>i60;0;66sm1d794?2=83:p(<6i:e28L11d3A><=6F;2:&277<2>:1/i84>;h66>5<>i60;0;66sm1d694?2=83:p(<6i:e28L11d3A><=6F;2:&277<2>:1/i84>;h66>5<>i60;0;66sm1d194?2=83:p(<6i:e28L11d3A><=6F;2:&277<2>:1/i84>;h66>5<>i60;0;66sm1d094?2=83:p(<6i:e28L11d3A><=6F;2:&277<2>:1/i84>;h66>5<>i60;0;66sm1d394?2=83:p(<6i:e28L11d3A><=6F;2:&277<2>:1/i84>;h66>5<>i60;0;66sm1d294?2=83:p(<6i:e28L11d3A><=6F;2:&277<2>:1/i84>;h66>5<>i60;0;66sm1e494?2=83:p(<6i:e28L11d3A><=6*j5;38m13=831b8o4?::k7b?6=3f;3>7>5;|`2`0<72=0;6=u+19d9`5=O<>i0D99>;%g6>4=n<<0;66g;b;29?l2a2900c<6=:188yg7c<3:187>50z&25;h6a>5<4H55`?M2092.n97?4i5794?=nd083>1<729q/=5h5d19K02e<@==:7)k::09j00<722c?n7>5;h6e>5<8g8g4>N3?j1C8:?4$d795>o3=3:17d:m:188m1`=831d=5<50;9~f4ea290?6=4?{%3;b?b73A>>6=44i5`94?=n8383>>{e9jo1<7:50;2x 4>a2m:0D99l;I645>"b=3;0e9;50;9j0g<722c?j7>5;n3;6?6=3th9?l4?:583>5}#91l1h=5G46a8L1163-o>6<5f4483>>o3j3:17d:i:188k4>52900qo<<9;290?6=8r.:4k4k0:J73f=O<>;0(h;51:k71?6=3`>i6=44i5d94?=h9181<75rb31;>5<3290;w)?7f;f3?M20k2B?;<5+e482?l222900e9l50;9j0c<722e:4?4?::a661=83>1<7>t$0:e>a6<@==h7E:81:&f1?7>o3n3:17b?72;29?xd5;?0;694?:1y'5=`=l91C8:m4H552?!c2281b884?::k7f?6=3`>m6=44o0:1>5<54;294~"60o0o<6F;7b9K027<,l?1=6g;5;29?l2e2900e9h50;9l5=4=831vn?=;:187>5<7s-;3j7j?;I64g>N3?81/i84>;h66>5<>i60;0;66sm22194?2=83:p(<6i:e28L11d3A><=6*j5;38m13=831b8o4?::k7b?6=3f;3>7>5;|`177<72=0;6=u+19d9`5=O<>i0D99>;%g6>4=n<<0;66g;b;29?l2a2900c<6=:188yg4493:187>50z&25;h6a>5<7>5;|`1`3<72<0;6=u+19d9`4=O<>i0D99>;%g6>4=n<<0;66g;6;29?l2e2900e9h50;9l5=4=831vn?j::186>5<7s-;3j7j>;I64g>N3?81/i84>;h66>5<>o3n3:17b?72;29?xd5l=0;684?:1y'5=`=l81C8:m4H552?!c2281b884?::k72?6=3`>i6=44i5d94?=h9181<75rb3f0>5<2290;w)?7f;f2?M20k2B?;<5+e482?l222900e9850;9j0g<722c?j7>5;n3;6?6=3th9h?4?:483>5}#91l1h<5G46a8L1163-o>6<5f4483>>o3>3:17d:m:188m1`=831d=5<50;9~f7b7290>6=4?{%3;b?b63A>>6=44i5494?=n0<729q/=5h5d29K02e<@==:7)k::79j00<722c?:7>5;h6e>5<5<55;294~"60o0o=6F;7b9K027<,l?1=6g;5;29?l212900e9l50;9j0c<722e:4?4?::a6f2=8391<7>t$0:e>11e3A>44?::m23g<722wi>n=50;194?6|,82m699m;I64g>N3?81b854?::k26<<722e:;o4?::a6gg=83>1<7>t$0:e>4543A>=7>5;h3;5;|`1g7<72:0;6=u+19d902d<@==h7E:81:k75;n34f?6=3th9n54?:583>5}#91l1=>=4H55`?M2092c?47>5;h72>5<5<53;294~"60o0?;o5G46a8L1163`>36=44i00:>5<8g8276=O<>i0D99>;h6;>5<h1<75rb3a3>5<4290;w)?7f;64f>N3?j1C8:?4i5:94?=n9;31<75`16`94?=zj;h?6=4;:183!7?n3;8?6F;7b9K027>o6010;66a>7c83>>{e:kl1<7=50;2x 4>a2==i7E:8c:J734=n<10;66g>2883>>i6?k0;66sm2c094?2=83:p(<6i:010?M20k2B?;<5f4983>>o293:17d?78;29?j70j3:17pl=bd83>6<729q/=5h546`8L11d3A><=6g;8;29?l7513:17b?8b;29?xd5j90;694?:1y'5=`=9:90D99l;I645>o303:17d;>:188m4>?2900c<9m:188yg4el3:1?7>50z&2329K02e<@==:7d:7:188m07=831b=5650;9l52d=831vn?ll:180>5<7s-;3j7:8b:J73f=O<>;0e9650;9j57?=831d=:l50;9~f7gd290?6=4?{%3;b?74;2B?;n5G4638m1>=831b9<4?::k2<=<722e:;o4?::a6`?=83?1<7>t$0:e>a7<@==h7E:81:&f1?7>o3j3:17d:i:188k4>52900qo;0(h;51:k71?6=3`>=6=44i5`94?=n8383>>{e:l=1<7;50;2x 4>a2m;0D99l;I645>"b=3;0e9;50;9j03<722c?n7>5;h6e>5<8g8g5>N3?j1C8:?4$d795>o3=3:17d:9:188m1d=831b8k4?::m2<7<722wi>h;50;794?6|,82m6i?4H55`?M2092.n97?4i5794?=n50z&25;h65>5<>i60;0;66sm2d194?3=83:p(<6i:e38L11d3A><=6*j5;38m13=831b8;4?::k7f?6=3`>m6=44o0:1>5<7>55;294~"60o0o=6F;7b9K027<,l?1=6g;5;29?l212900e9l50;9j0c<722e:4?4?::a6`7=83?1<7>t$0:e>a7<@==h7E:81:&f1?7>o3j3:17d:i:188k4>52900qo<84;290?6=8r.:4k4k2:J73f=O<>;0(h;56:k71?6=3`>m6=44i0:2>5<8g8g6>N3?j1C8:?4$d792>o3=3:17d:i:188m4>62900c<6=:188yg41n3:187>50z&25;h6a>5<50;194?6|,82m699m;I64g>N3?81b854?::k26<<722e:;o4?::a75?=8391<7>t$0:e>11e3A>44?::m23g<722wi>k:50;694?6|,82m6<=<;I64g>N3?81b854?::k65?6=3`;347>5;n34f?6=3th8<54?:283>5}#91l18:l4H55`?M2092c?47>5;h31=?6=3f;5;|`1b6<72=0;6=u+19d9565<@==h7E:81:k75<8g873g=O<>i0D99>;h6;>5<5<7>54;294~"60o0:?>5G46a8L1163`>36=44i4394?=n9121<75`16`94?=zj::=6=4<:183!7?n3>h1<75rb3d2>5<3290;w)?7f;307>N3?j1C8:?4i5:94?=n=80;66g>8983>>i6?k0;66sm31794?5=83:p(<6i:55a?M20k2B?;<5f4983>>o6:00;66a>7c83>>{e:o:1<7:50;2x 4>a28987E:8c:J734=n<10;66g:1;29?l7?03:17b?8b;29?xd48=0;6>4?:1y'5=`=<>h0D99l;I645>o303:17d?=9;29?j70j3:17pl=eg83>1<729q/=5h51218L11d3A><=6g;8;29?l362900e<67:188k41e2900qo=?3;297?6=8r.:4k4;7c9K02e<@==:7d:7:188m44>2900c<9m:188yg4bm3:187>50z&2=831d=:l50;9~f66529086=4?{%3;b?20j2B?;n5G4638m1>=831b=?750;9l52d=831vn?kk:187>5<7s-;3j7?<3:J73f=O<>;0e9650;9j14<722c:454?::m23g<722wi?=?50;194?6|,82m699m;I64g>N3?81b854?::k26<<722e:;o4?::a6`e=83>1<7>t$0:e>4543A>=7>5;h3;5;|`1ag<72=0;6=u+19d9565<@==h7E:81:k75<8g8g4>N3?j1C8:?4$d795>o3=3:17d:m:188m1`=831d=5<50;9~f67c290?6=4?{%3;b?b73A>>6=44i5`94?=n8383>>{e;8i1<7:50;2x 4>a2m:0D99l;I645>"b=3;0e9;50;9j0g<722c?j7>5;n3;6?6=3th8=o4?:583>5}#91l1h=5G46a8L1163-o>6<5f4483>>o3j3:17d:i:188k4>52900qo=>a;290?6=8r.:4k4k0:J73f=O<>;0(h;51:k71?6=3`>i6=44i5d94?=h9181<75rb23:>5<3290;w)?7f;f3?M20k2B?;<5+e482?l222900e9l50;9j0c<722e:4?4?::a74>=83>1<7>t$0:e>a6<@==h7E:81:&f1?7>o3n3:17b?72;29?xd49>0;694?:1y'5=`=l91C8:m4H552?!c2281b884?::k7f?6=3`>m6=44o0:1>5<54;294~"60o0o<6F;7b9K027<,l?1=6g;5;29?l2e2900e9h50;9l5=4=831vn>?;:187>5<7s-;3j7j?;I64g>N3?81/i84>;h66>5<>i60;0;66sm33:94?3=83:p(<6i:e38L11d3A><=6*j5;38m13=831b8;4?::k7f?6=3`>m6=44o0:1>5<54;294~"60o0:?>5G46a8L1163`>36=44i4394?=n9121<75`16`94?=zj;396=4;:183!7?n3;8?6F;7b9K027>o6010;66a>7c83>>{e:0;1<7:50;2x 4>a28987E:8c:J734=n<10;66g:1;29?l7?03:17b?8b;29?xd5190;694?:1y'5=`=9:90D99l;I645>o303:17d;>:188m4>?2900c<9m:188yg4?n3:187>50z&2=831d=:l50;9~f7>7290?6=4?{%3;b?74;2B?;n5G4638m1>=831b9<4?::k2<=<722e:;o4?::a62`=83>1<7>t$0:e>4543A>=7>5;h3;5;|`13`<72=0;6=u+19d9565<@==h7E:81:k75<8g8276=O<>i0D99>;h6;>5<h1<75rb35`>5<3290;w)?7f;307>N3?j1C8:?4i5:94?=n=80;66g>8983>>i6?k0;66sm3c`94?3=83:p(<6i:e38L11d3A><=6*j5;38m13=831b8;4?::k7f?6=3`>m6=44o0:1>5<55;294~"60o0o=6F;7b9K027<,l?1=6g;5;29?l212900e9l50;9j0c<722e:4?4?::a7gg=83?1<7>t$0:e>a5<@==h7E:81:&f1?0>o3n3:17d?71;29?j7?:3:17pl0<729q/=5h5d09K02e<@==:7)k::09j00<722c?:7>5;h6a>5<7>5;|`0g5<72<0;6=u+19d9`4=O<>i0D99>;%g6>4=n<<0;66g;6;29?l2e2900e9h50;9l5=4=831vn>lj:186>5<7s-;3j7j>;I64g>N3?81/i84>;h66>5<>o3n3:17b?72;29?xd4jo0;684?:1y'5=`=l81C8:m4H552?!c2281b884?::k72?6=3`>i6=44i5d94?=h9181<75rb2a2>5<2290;w)?7f;f2?M20k2B?;<5+e482?l222900e9850;9j0g<722c?j7>5;n3;6?6=3th8o?4?:483>5}#91l1h<5G46a8L1163-o>6<5f4483>>o3>3:17d:m:188m1`=831d=5<50;9~f6ea290>6=4?{%3;b?b63A>>6=44i5494?=n0<729q/=5h5d29K02e<@==:7)k::79j00<722c?:7>5;h6e>5<5<55;294~"60o0o=6F;7b9K027<,l?1=6g;5;29?l212900e9l50;9j0c<722e:4?4?::a7a6=83?1<7>t$0:e>a7<@==h7E:81:&f1?7>o3j3:17d:i:188k4>52900qo=k1;291?6=8r.:4k4k1:J73f=O<>;0(h;51:k71?6=3`>=6=44i5`94?=n8383>>{e;m>1<7;50;2x 4>a2m;0D99l;I645>"b=3;0e9;50;9j03<722c?n7>5;h6e>5<8g8g5>N3?j1C8:?4$d795>o3=3:17d:9:188m1d=831b8k4?::m2<7<722wi?i=50;794?6|,82m6i?4H55`?M2092.n97?4i5794?=n50z&25;h65>5<>i60;0;66sm3e494?3=83:p(<6i:e38L11d3A><=6*j5;38m13=831b8;4?::k7f?6=3`>m6=44o0:1>5<55;294~"60o0o=6F;7b9K027<,l?1=6g;5;29?l212900e9l50;9j0c<722e:4?4?::a7de=83?1<7>t$0:e>a7<@==h7E:81:&f1?7>o3j3:17d:i:188k4>52900qo=ne;291?6=8r.:4k4k1:J73f=O<>;0(h;51:k71?6=3`>=6=44i5`94?=n8383>>{e;hk1<7;50;2x 4>a2m;0D99l;I645>"b=3;0e9;50;9j03<722c?n7>5;h6e>5<8g8g5>N3?j1C8:?4$d795>o3=3:17d:9:188m1d=831b8k4?::m2<7<722wi?ll50;794?6|,82m6i?4H55`?M2092.n97?4i5794?=n50z&25;h65>5<>i60;0;66sm3`494?3=83:p(<6i:e18L11d3A><=6*j5;48m13=831b8;4?::k7b?6=3`;3=7>5;n3;6?6=3th8m54?:483>5}#91l1h<5G46a8L1163-o>6<5f4483>>o3>3:17d:m:188m1`=831d=5<50;9~f6g2290>6=4?{%3;b?b43A>>6=44i5494?=n8083>>i60;0;66sm38;94?5=83:p(<6i:55a?M20k2B?;<5f4983>>o6:00;66a>7c83>>{e;021<7=50;2x 4>a2==i7E:8c:J734=n<10;66g>2883>>i6?k0;66sm39g94?2=83:p(<6i:010?M20k2B?;<5f4983>>o293:17d?78;29?j70j3:17pl<9683>6<729q/=5h546`8L11d3A><=6g;8;29?l7513:17b?8b;29?xd40j0;694?:1y'5=`=9:90D99l;I645>o303:17d;>:188m4>?2900c<9m:188yg5>>3:1?7>50z&2329K02e<@==:7d:7:188m07=831b=5650;9l52d=831vn>7::180>5<7s-;3j7:8b:J73f=O<>;0e9650;9j57?=831d=:l50;9~f6>?290?6=4?{%3;b?74;2B?;n5G4638m1>=831b9<4?::k2<=<722e:;o4?::a7<2=8391<7>t$0:e>11e3A>44?::m23g<722wi?5850;694?6|,82m6<=<;I64g>N3?81b854?::k65?6=3`;347>5;n34f?6=3th85>4?:283>5}#91l18:l4H55`?M2092c?47>5;h31=?6=3f;5;|`0<1<72=0;6=u+19d9565<@==h7E:81:k75<8g873g=O<>i0D99>;h6;>5<5<7>54;294~"60o0:?>5G46a8L1163`>36=44i4394?=n9121<75`16`94?=zj:3:6=4<:183!7?n3>h1<75rb2:3>5<3290;w)?7f;307>N3?j1C8:?4i5:94?=n=80;66g>8983>>i6?k0;66sm38294?5=83:p(<6i:55a?M20k2B?;<5f4983>>o6:00;66a>7c83>>{e;>o1<7:50;2x 4>a28987E:8c:J734=n<10;66g:1;29?l7?03:17b?8b;29?xd4mh0;684?:1y'5=`=l81C8:m4H552?!c2281b884?::k72?6=3`>i6=44i5d94?=h9181<75rb2g:>5<2290;w)?7f;f2?M20k2B?;<5+e482?l222900e9850;9j0g<722c?j7>5;n3;6?6=3th8i54?:483>5}#91l1h<5G46a8L1163-o>6<5f4483>>o3>3:17d:m:188m1`=831d=5<50;9~f6c0290>6=4?{%3;b?b63A>>6=44i5494?=n0<729q/=5h5d09K02e<@==:7)k::09j00<722c?:7>5;h6a>5<6=4::183!7?n3n:7E:8c:J734=#m<0:7d:::188m10=831b8o4?::k7b?6=3f;3>7>5;|`0a1<72<0;6=u+19d9`4=O<>i0D99>;%g6>4=n<<0;66g;6;29?l2e2900e9h50;9l5=4=831vn>k<:186>5<7s-;3j7j>;I64g>N3?81/i84>;h66>5<>o3n3:17b?72;29?xd4m;0;684?:1y'5=`=l81C8:m4H552?!c2281b884?::k72?6=3`>i6=44i5d94?=h9181<75rb2g2>5<2290;w)?7f;f2?M20k2B?;<5+e482?l222900e9850;9j0g<722c?j7>5;n3;6?6=3th8??4?:583>5}#91l1=>=4H55`?M2092c?47>5;h72>5<5<54;294~"60o0:?>5G46a8L1163`>36=44i4394?=n9121<75`16`94?=zj:9?6=4;:183!7?n3;8?6F;7b9K027>o6010;66a>7c83>>{e;:?1<7:50;2x 4>a28987E:8c:J734=n<10;66g:1;29?l7?03:17b?8b;29?xd4;?0;694?:1y'5=`=9:90D99l;I645>o303:17d;>:188m4>?2900c<9m:188yg53=3:187>50z&2=831d=:l50;9~f621290?6=4?{%3;b?74;2B?;n5G4638m1>=831b9<4?::k2<=<722e:;o4?::a711=83>1<7>t$0:e>4543A>=7>5;h3;5;|`00=<72=0;6=u+19d9565<@==h7E:81:k75<8g8276=O<>i0D99>;h6;>5<h1<75rb27a>5<3290;w)?7f;307>N3?j1C8:?4i5:94?=n=80;66g>8983>>i6?k0;66sm34a94?2=83:p(<6i:010?M20k2B?;<5f4983>>o293:17d?78;29?j70j3:17pl<5e83>1<729q/=5h51218L11d3A><=6g;8;29?l362900e<67:188k41e2900qo=:e;290?6=8r.:4k4>329K02e<@==:7d:7:188m07=831b=5650;9l52d=831vn>;i:187>5<7s-;3j7?<3:J73f=O<>;0e9650;9j14<722c:454?::m23g<722wi?;k50;694?6|,82m6i>4H55`?M2092.n97?4i5794?=n1<729q/=5h5d19K02e<@==:7)k::09j00<722c?n7>5;h6e>5<8g8g5>N3?j1C8:?4$d795>o3=3:17d:9:188m1d=831b8k4?::m2<7<722wi8?j50;794?6|,82m6i:4H55`?M2092.n97?4i5794?=nm6=44i0:0>5<8g8g0>N3?j1C8:?4$d795>o3=3:17d:9:188m1`=831b=5=50;9l5=4=831vn95<7s-;3j7j;;I64g>N3?81/i84>;h66>5<>o60:0;66a>8383>>{e<;31<7;50;2x 4>a2m>0D99l;I645>"b=3;0e9;50;9j03<722c?j7>5;h3;7?6=3f;3>7>5;|`76=<72<0;6=u+19d9`1=O<>i0D99>;%g6>4=n<<0;66g;6;29?l2a2900e<6<:188k4>52900qo:=6;291?6=8r.:4k4k4:J73f=O<>;0(h;51:k71?6=3`>=6=44i5d94?=n9191<75`19094?=zj=8>6=4::183!7?n3n?7E:8c:J734=#m<0:7d:::188m10=831b8k4?::k2<6<722e:4?4?::a072=83?1<7>t$0:e>a2<@==h7E:81:&f1?7>o3n3:17d?73;29?j7?:3:17pl;2283>0<729q/=5h5d59K02e<@==:7)k::09j00<722c?:7>5;h6e>5<5<9>7>55;294~"60o0o86F;7b9K027<,l?1=6g;5;29?l212900e9h50;9j5=5=831d=5<50;9~f146290>6=4?{%3;b?b33A>>6=44i5494?=n8283>>i60;0;66sm43294?3=83:p(<6i:e68L11d3A><=6*j5;38m13=831b8;4?::k7b?6=3`;3?7>5;n3;6?6=3th?=k4?:483>5}#91l1h95G46a8L1163-o>6<5f4483>>o3>3:17d:i:188m4>42900c<6=:188yg26m3:197>50z&25;h65>5<5<2290;w)?7f;f7?M20k2B?;<5+e482?l222900e9850;9j0c<722c:4>4?::m2<7<722wi8m6=44i0:0>5<8g8g0>N3?j1C8:?4$d795>o3=3:17d:9:188m1`=831b=5=50;9l5=4=831vn9?7:186>5<7s-;3j7j;;I64g>N3?81/i84>;h66>5<>o60:0;66a>8383>>{e<8=1<7;50;2x 4>a2m>0D99l;I645>"b=3;0e9;50;9j03<722c?j7>5;h3;7?6=3f;3>7>5;|`753<72<0;6=u+19d9`1=O<>i0D99>;%g6>4=n<<0;66g;6;29?l2a2900e<6<:188k4>52900qo:>5;291?6=8r.:4k4k4:J73f=O<>;0(h;51:k71?6=3`>=6=44i5d94?=n9191<75`19094?=zj=;?6=4::183!7?n3n?7E:8c:J734=#m<0:7d:::188m10=831b8k4?::k2<6<722e:4?4?::a045=83?1<7>t$0:e>a2<@==h7E:81:&f1?7>o3n3:17d?73;29?j7?:3:17pl;1383>0<729q/=5h5d59K02e<@==:7)k::09j00<722c?:7>5;h6e>5<5<8?7>55;294~"60o0o86F;7b9K027<,l?1=6g;5;29?l212900e9h50;9j5=5=831d=5<50;9~f155290>6=4?{%3;b?b33A>>6=44i5494?=n8283>>i60;0;66sm42394?3=83:p(<6i:e68L11d3A><=6*j5;38m13=831b8;4?::k7b?6=3`;3?7>5;n3;6?6=3th??=4?:483>5}#91l1h95G46a8L1163-o>6<5f4483>>o3>3:17d:i:188m4>42900c<6=:188yg25n3:197>50z&25;h65>5<5<2290;w)?7f;f7?M20k2B?;<5+e482?l222900e9850;9j0c<722c:4>4?::m2<7<722wi8?950;794?6|,82m6i:4H55`?M2092.n97?4i5794?=nm6=44i0:0>5<8g8g0>N3?j1C8:?4$d795>o3=3:17d:9:188m1`=831b=5=50;9l5=4=831vn9??:186>5<7s-;3j7j;;I64g>N3?81/i84>;h66>5<>o60:0;66a>8383>>{ea288n7E:8c:J734=#m<0:56gk9;29?lbf2900c<9m:188yg2183:1?7>50z&2t$0:e>44b3A>5;hfb>5<8g826`=O<>i0D99>;%g6>4b>i6?k0;66sm1`294?5=83:p(<6i:00f?M20k2B?;<5+e482`>oc13:17djn:188k41e2900qo?6f;297?6=8r.:4k4>2d9K02e<@==:7)k::0f8ma?=831bhl4?::m23g<722wi=4k50;194?6|,82m6<N3?81/i84>d:kg=?6=3`nj6=44o05a>5<53;294~"60o0:>h5G46a8L1163-o>67c83>>{e90i1<7=50;2x 4>a288n7E:8c:J734=#m<0:h6gk9;29?lbf2900c<9m:188yg7>j3:1?7>50z&2t$0:e>44b3A>5;hfb>5<8g826`=O<>i0D99>;%g6>4b>i6?k0;66sm18:94?5=83:p(<6i:00f?M20k2B?;<5+e482`>oc13:17djn:188k41e2900qo?67;297?6=8r.:4k4>2d9K02e<@==:7)k::0f8ma?=831bhl4?::m23g<722wi=4850;194?6|,82m6<N3?81/i84>d:kg=?6=3`nj6=44o05a>5<53;294~"60o0:>h5G46a8L1163-o>67c83>>{e90>1<7=50;2x 4>a288n7E:8c:J734=#m<0:h6gk9;29?lbf2900c<9m:188yg7>;3:1?7>50z&2t$0:e>44b3A>5;hfb>5<8g826`=O<>i0D99>;%g6>4b>i6?k0;66sm18294?5=83:p(<6i:00f?M20k2B?;<5+e482`>oc13:17djn:188k41e2900qo<83;290?6=8r.:4k4>2g9K02e<@==:7)k::ba8ma?=831bhl4?::kgf?6=3f;5;|`15=<72=0;6=u+19d957`<@==h7E:81:&f1?433`n26=44iec94?=nlk0;66a>7c83>>{e9k<1<7:50;2x 4>a288m7E:8c:J734=#m<0986gk9;29?lbf2900eil50;9l52d=831vn?9>:186>5<7s-;3j7?<0:J73f=O<>;0(h;51`9j`<<722com7>5;hfa>5<>oci3:17djm:188mae=831d=:l50;9~f4d?290>6=4?{%3;b?7482B?;n5G4638 `3=9o1bh44?::kge?6=3`ni6=44iea94?=h9>h1<75rb354>5<2290;w)?7f;304>N3?j1C8:?4$d7964=nl00;66gka;29?lbe2900eim50;9l52d=831vn?8m:187>5<7s-;3j7?=f:J73f=O<>;0(h;52c9j`<<722com7>5;hfa>5<8g826`=O<>i0D99>;%g6>4b>i6?k0;66sm1cc94?5=83:p(<6i:00f?M20k2B?;<5+e482`>oc13:17djn:188k41e2900qo<>e;290?6=8r.:4k4>2g9K02e<@==:7)k::368ma?=831bhl4?::kgf?6=3f;5;|`2ff<72=0;6=u+19d957`<@==h7E:81:&f1?433`n26=44iec94?=nlk0;66a>7c83>>{e:;:1<7;50;2x 4>a289;7E:8c:J734=#m<0:j6gk9;29?lbf2900eil50;9j`f<722e:;o4?::a5gc=83?1<7>t$0:e>4573A>5;hfb>5<>i6?k0;66sm33c94?3=83:p(<6i:013?M20k2B?;<5+e4814>oc13:17djn:188mad=831bhn4?::m23g<722wi88o50;694?6|,82m6<N3?81/i84:0:kg=?6=3`nj6=44ie`94?=h9>h1<75rb34b>5<2290;w)?7f;304>N3?j1C8:?4$d7957=nl00;66gka;29?lbe2900eim50;9l52d=831vn?7k:180>5<7s-;3j7?=e:J73f=O<>;0(h;5239j`<<722com7>5;n34f?6=3th94l4?:283>5}#91l1=?k4H55`?M2092.n97<=;hf:>5<>5fd883>>oci3:17djm:188mae=831d=:l50;9~f634290>6=4?{%3;b?7482B?;n5G4638 `3=::1bh44?::kge?6=3`ni6=44iea94?=h9>h1<75rb263>5<2290;w)?7f;304>N3?j1C8:?4$d7966=nl00;66gka;29?lbe2900eim50;9l52d=831vn>87:186>5<7s-;3j7?<0:J73f=O<>;0(h;5229j`<<722com7>5;hfa>5<>5fd883>>oci3:17djm:188mae=831d=:l50;9~f65a290>6=4?{%3;b?7482B?;n5G4638 `3=::1bh44?::kge?6=3`ni6=44iea94?=h9>h1<75rb3;`>5<2290;w)?7f;304>N3?j1C8:?4$d7966=nl00;66gka;29?lbe2900eim50;9l52d=831vn?66:186>5<7s-;3j7?<0:J73f=O<>;0(h;5229j`<<722com7>5;hfa>5<>5fd883>>oci3:17djm:188mae=831d=:l50;9~f636290>6=4?{%3;b?7482B?;n5G4638 `3=::1bh44?::kge?6=3`ni6=44iea94?=h9>h1<75rb21f>5<2290;w)?7f;304>N3?j1C8:?4$d7966=nl00;66gka;29?lbe2900eim50;9l52d=831vn?7m:186>5<7s-;3j7?<0:J73f=O<>;0(h;5229j`<<722com7>5;hfa>5<>5fd883>>oci3:17djm:188mae=831d=:l50;9~f601290>6=4?{%3;b?7482B?;n5G4638 `3=::1bh44?::kge?6=3`ni6=44iea94?=h9>h1<75rb273>5<2290;w)?7f;304>N3?j1C8:?4$d7966=nl00;66gka;29?lbe2900eim50;9l52d=831vn>=k:186>5<7s-;3j7?<0:J73f=O<>;0(h;5229j`<<722com7>5;hfa>5<>5fd883>>oci3:17djm:188mae=831d=:l50;9~f7>0290>6=4?{%3;b?7482B?;n5G4638 `3=::1bh44?::kge?6=3`ni6=44iea94?=h9>h1<75rb252>5<3290;w)?7f;31b>N3?j1C8:?4$d79ga=nl00;66gka;29?lbe2900c<9m:188yg51k3:187>50z&25;n34f?6=3th9m?4?:583>5}#91l1=?h4H55`?M2092.n97mk;hf:>5<>i6?k0;66sm37794?2=83:p(<6i:00e?M20k2B?;<5+e486?lb>2900eio50;9j`g<722e:;o4?::a71`=83>1<7>t$0:e>44a3A>7c83>>{e;:i1<7:50;2x 4>a288m7E:8c:J734=#m<0>7dj6:188mag=831bho4?::m23g<722wi>4750;794?6|,82m6<=?;I64g>N3?81/i84=3:kg=?6=3`nj6=44ie`94?=nlj0;66a>7c83>>{e:1<1<7;50;2x 4>a289;7E:8c:J734=#m<09?6gk9;29?lbf2900eil50;9j`f<722e:;o4?::a675=8391<7>t$0:e>44b3A>5;hfb>5<8g826`=O<>i0D99>;%g6>74>i6?k0;66sm23494?2=83:p(<6i:00e?M20k2B?;<5+e482a>oc13:17djn:188mad=831d=:l50;9~f4e3290?6=4?{%3;b?75n2B?;n5G4638 `3=9l1bh44?::kge?6=3`ni6=44o05a>5<7>53;294~"60o0:>h5G46a8L1163-o>67c83>>{e:kh1<7<50;2x 4>a288o7E:8c:J734=#m<0:=6gk9;29?j70j3:17pl=b883>7<729q/=5h513f8L11d3A><=6*j5;32?lb>2900c<9m:188yg4e?3:1>7>50z&25<7s-;3j7?=d:J73f=O<>;0(h;5109j`<<722e:;o4?::a6g5=8381<7>t$0:e>44c3A>5;n34f?6=3th9n<4?:383>5}#91l1=?j4H55`?M2092.n97?>;hf:>5<8g826a=O<>i0D99>;%g6>47>i6?k0;66sm39d94?4=83:p(<6i:00g?M20k2B?;<5+e4825>oc13:17b?8b;29?xd40m0;6?4?:1y'5=`=9;n0D99l;I645>"b=3;:7dj6:188k41e2900qo=7b;296?6=8r.:4k4>2e9K02e<@==:7)k::038ma?=831d=:l50;9~f6>>29096=4?{%3;b?75l2B?;n5G4638 `3=981bh44?::m23g<722wi?5950;094?6|,82m6<N3?81/i84>1:kg=?6=3f;5;|`0<0<72;0;6=u+19d957b<@==h7E:81:&f1?763`n26=44o05a>5<52;294~"60o0:>i5G46a8L1163-o>6h1<75rb2:2>5<5290;w)?7f;31`>N3?j1C8:?4$d7954=nl00;66a>7c83>>{e;>l1<7<50;2x 4>a288o7E:8c:J734=#m<0:=6gk9;29?j70j3:17pl=c483>7<729q/=5h513f8L11d3A><=6*j5;32?lb>2900c<9m:188yg5>i3:1>7>50z&25<7s-;3j7?=e:J73f=O<>;0(h;5239j`<<722com7>5;n34f?6=3th9j44?:283>5}#91l1=?k4H55`?M2092.n97<=;hf:>5<?5fd883>>oci3:17b?8b;29?xd5nk0;6>4?:1y'5=`=9;o0D99l;I645>"b=3897dj6:188mag=831d=:l50;9~f7`d29086=4?{%3;b?75m2B?;n5G4638 `3=:;1bh44?::kge?6=3f;5;|`1ba<72:0;6=u+19d957c<@==h7E:81:&f1?453`n26=44iec94?=h9>h1<75rb3df>5<4290;w)?7f;31a>N3?j1C8:?4$d7967=nl00;66gka;29?j70j3:17pl=fg83>6<729q/=5h513g8L11d3A><=6*j5;01?lb>2900eio50;9l52d=831vn?h::180>5<7s-;3j7?=e:J73f=O<>;0(h;5239j`<<722com7>5;n34f?6=3th8>n4?:483>5}#91l1=>>4H55`?M2092.n97j:;hf:>5<>ock3:17b?8b;29?xd4:k0;684?:1y'5=`=9::0D99l;I645>"b=38;7dj6:188mag=831bho4?::kgg?6=3f;5;|`036<72:0;6=u+19d957c<@==h7E:81:&f1?763`n26=44iec94?=h9>h1<75rb3d4>5<5290;w)?7f;31<>N3?j1C8:?4ie:94?=h9>h1<75rb24g>5<5290;w)?7f;31<>N3?j1C8:?4ie:94?=h9>h1<75rb301>5<1290;w)?7f;305>N3?j1C8:?4$d7960=nl00;66gka;29?lbe2900eim50;9l57g=831d=:l50;9~f4e7290=6=4?{%3;b?7492B?;n5G4638 `3=:<1bh44?::kge?6=3`ni6=44iea94?=h9;k1<75`16`94?=zj=?36=477;294~N3?81/=5h51968^12=ir21>;4j:07956<6j3l1=;4>4;3`>x"6:>087)jk:59'``<33-nm695+e187?!c62=1/i?4;;%g0>1=#kh0hi6*j6;68 `1=<2.n47:4$d;90>"bi3>0(hl54:&fg?2<,ln186*je;68 ``=<2.m<7:4$g390>"a:3>0(k=54:&e0?2<,o?186*i6;68 c1=<2.m47:4$g;90>"ai3>0(kl54:&eg?2<,on186*ie;68 c`=<2.:<=4;;%335?2<,8:9695+11190>"68=0?7)??5;68 4612=1/==954:&24=<33-;;57:4$02b>1=#99h186*>0b87?!77l3>0(<>j:59'55`=<2.:==4;;%325?2<,8;9695+10190>"69=0?7)?>5;68 4712=1/=<954:&25=<33-;:57:4$03b>1=#98h186*>1b87?!76l3>0(=4;;%315?2<,889695+13190>"6:=0?7)?=5;68 4412;1/=575409'a1<33-;3n7<4$555>4>23-><;7?75:l:`?687826>h60>0986`;79826>h3?00986*lb;af?!7?k390e9750;9j0d<722c?;94?::k`=?6=3`2<6=4+1929l1?65f19g94?=n;?0;6)?70;16?k70n3:07d=;:18'5=6=;<1e=:h51:9j76<72-;3<7=:;o34b?4<3`996=4+192970=i9>l1?65f3083>!7?839>7c?8f;68?l57290/=5>5349m52`==21b>k4?:%3;4?523g;5<#91:1?85a16d93>=n:m0;6)?70;16?k70n3207dl1=65f3e83>!7?839m7c?8f;08?l5d290/=5>53g9m52`=;21b?o4?:%3;4?5a3g;5<#91:1?k5a16d91>=n;00;6)?70;1e?k70n3<07d=7:18'5=6=;o1e=:h57:9j72<72-;3<7=i;o34b?><3`?26=4+19291==i9>l1<65f5683>!7?83?37c?8f;38?l31290/=5>5599m52`=:21b984?:%3;4?3?3g;5<#91:1955a16d90>=n=:0;6)?70;7;?k70n3?07d8=:18'5=6==11e=:h56:9j24<72-;3<7;7;o34b?1<3`<;6=4+19291==i9>l1465f5g83>!7?83?37c?8f;;8?l3b290/=5>5599m52`=i21b9i4?:%3;4?3?3g;5<#91:1955a16d9g>=n=k0;6)?70;7;?k70n3n07d;n:18'5=6==11e=:h5e:9j17<72-;3<7;7;o34b?`<3`2=6=4+1929<0=i9>l1<65f8583>!7?832>7c?8f;38?jd0290/=5>5b79m52`=821dn84?:%3;4?d13g;5<#91:1n;5a16d96>=hj;0;6)?70;`5?k70n3907bl>:18'5=6=j?1e=:h54:9lf5<72-;3<7l9;o34b?3<3fkm6=4+1929f3=i9>l1:65`ad83>!7?83h=7c?8f;58?jgc290/=5>5b79m52`=021dmn4?:%3;4?d13g;5<#91:1n;5a16d9e>=hih0;6)?70;`5?k70n3h07bo7:18'5=6=j?1e=:h5c:9le2<72-;3<7l9;o34b?b<3fk=6=4+1929f3=i9>l1i65`a483>!7?83h=7c?8f;d8?jg3290/=5>5b79m52`=9910cl=50;&2<52d:;k4>1:9le7<72-;3<7l9;o34b?7532ej=7>5$0:3>g05<#91:1n;5a16d951=818a2>h6?o0:965`bd83>!7?83h=7c?8f;35?>iel3:1(<6?:c48j41a28=07bll:18'5=6=j?1e=:h51998kgd=83.:4=4m6:l23c<6121dnl4?:%3;4?d13g;4d<3fh36=4+1929f3=i9>l1=n54oc694?"6090i:6`>7g82`>=hi00;6)?70;`5?k70n3;n76a6e;29 4>72k<0b<9i:0d8?je0290/=5>5c79m52`=821do84?:%3;4?e13g;5<#91:1o;5a16d96>=hk:0;6)?70;a5?k70n3907dm7:188m4>c2900e99::188m2e=83.:4=48b:l23c<732c5$0:3>2d7g81?>o0?3:1(<6?:6`8j41a2:10e:850;&2<5<0j2d:;k4;;:k41?6=,82;6:l4n05e>0=>1<7*>8184f>h6?o0=76g83;29 4>72>h0b<9i:698m24=83.:4=48b:l23c5$0:3>2d7g8b?>o1n3:1(<6?:6`8j41a2k10e;j50;&2<5<0j2d:;k4l;:k5g?6=,82;6:l4n05e>a=8184f>h6?o0n76g9a;29 4>72>h0b<9i:g98m3?=83.:4=48b:l23c<6821b:54?:%3;4?1e3g;;:k53?6=,82;6:l4n05e>44<3`<=6=4+19293g=i9>l1=>54i7794?"60907g820>=n>=0;6)?70;5a?k70n3;>76g73;29 4>72>h0b<9i:048?l>5290/=5>57c9m52`=9>10e5?50;&2<5<0j2d:;k4>8:9j<5<72-;3<79m;o34b?7>32c5$0:3>2d5<#91:1;o5a16d95g=n1<7*>8184f>h6?o0:o65f7883>!7?83=i7c?8f;3g?>o1m3:1(<6?:6`8j41a28o07d8<:18'5=6=?k1e=:h51g98m=d=83.:4=47a:l23c<732c357>5$0:3>=g7g81?>i>;3:1(<6?:808j41a2910c4?50;&2<5<>:2d:;k4>;:m:4?6=,82;64<4n05e>7=818:6>h6?o0876a7e;29 4>72080b<9i:598k=b=83.:4=462:l23c<232e2o7>5$0:3><46`>7g84?>i>i3:1(<6?:808j41a2110c4750;&2<5<>:2d:;k46;:m:d=818:6>h6?o0i76a66;29 4>72080b<9i:b98k<3=83.:4=462:l23c5$0:3><46`>7g8e?>id:3:1(<6?:b38j41a2910cn>50;&2<5;:p10b=833ty>9o4?:6gxZ1?33W?=:6P:659]0=2X3191U85h4^5:f?[2?l2T?4n5Q49`8Z1>f3W>356P:709]126X2>01U9;64^47b?[3212T>955Q5458Z0313W?>96P:559]105m70::c;6e?821>3>m70:95;6e?821<3>m70:9f;6e?821m3>m70;51:0>=63=93865>;5180>=63=91865>;50o0>=63=81865>;5?o0>=63=7d865>;5?m0>=63=7b865>;40l0>=63<8b865>;40h0>=63<89865>;40?0>=63<85865>;40;0>=63<81865>;4?l0>=63<33865>;4;:0>=63<35865>;4;<0>=63<37865>;4<<0>=63<47865>;4<>0>=63<49865>;4<00>=63<5c865>;4=j0>=63<5e865>;4=l0>=63<5g865>;3=103;63;59822e<5=?36:o4=57;>2><5=?36:94=57;>20<5=?36:;4=57;>22<5=?36:=4=57;>24<5=?36:?4=57;>26<5=?36;h4=57;>3b<5=?36;m4=57;>3d<5=?36;o4=57;>3?<5=?36;64=57;>31<5=?36;84=57;>33<5=?36;:4=57;>=5<5=?365<4=57;>=7<5=?365>4=57;>2`<5=?36:k4=57;>2b<5=?36:74=57;>3c<5=?36;=4=57;>=d<5=?36574=57;>=>52z\7<0=:;?k1=5<4}r76b?6=;rT>9k5247595=7<5=?h6<6>;|q130<72;qU9=:4=356>4>53ty>;>4?:2y]125<5:=96i74=250>a?=7>569y]107<5;k;69;4=57f>13<5=?o69;4=57`>13<5=<=69;4=546>13<5=13<5;;869;4=331>13<5;;:69;4=333>13<5;:m69;4=32f>13<5;:o69;4=32`>13<5;<;69;4=37e>13<5;?n69;4=37g>13<5;?h69;4=37a>13<5;?j69;4=37:>13<5;?369;4=36f>13<5;>o69;4=36`>13<5;>i69;4=36b>13<5;>269;4=36;>13<5;><69;4=365>13<5;>>69;4=0f5>13<58n>69;4=0f7>13<58n869;4=0f1>13<58n:69;4=0f3>13<58im69;4=0af>13<5;n<69;4=3f5>13<5;n>69;4=3f7>13<5;n869;4=3f1>13<5;n;69;4=3ae>13<5;n:69;4=3g:>13<5;o369;4=3g4>13<5;o=69;4=3g6>13<5;o?69;4=3g0>13<5;o969;4=3g2>13<5;=?69;4=356>13<5;13<5=8o69;4=50`>13<5=8i69;4=50b>13<5=8269;4=50;>13<5=8=69;4=506>13<5=8?69;4=500>13<5=8969;4=502>13<5=8;69;4=53e>13<5=;n69;4=53g>13<5=;i69;4=53b>13<5=;269;4=53;>13<5=;<69;4=535>13<5=;>69;4=537>13<5=;869;4=531>13<5=9869;4=511>13<5=9:69;4=513>13<5=8m69;4=50f>13<5=8<69;4=53`>13<5=;:69;4=533>13<5=?369o4}r15b?6=:rT>563y]131<5=<269;4=544>13<5=<369;4=54e>13<5=13<58h:69;4=0`3>13<58km69;4=0cf>13<58ko69;4=0c`>13<58ki69;4=0cb>13<58lj69;4=0d:>13<58l369;4=0d4>13<58l=69;4=0d6>13<58l?69;4=0d0>13<58l969;4=0g;>13<58o<69;4=0g5>13<58o>69;4=0g7>13<58o869;4=0g1>13<58o:69;4=0g3>13<5;9j69;4=31:>13<5;9369;4=314>13<5;9=69;4=316>13<5;9?69;4=310>13<5;9969;4=312>13<5:;>69;4=23g>13<5:;h69;4=23a>13<5:;j69;4=23:>13<5:;369;4=234>13<5:;=69;4=237>13<5:8369;4=2`a>13<5:h269;4=2`b>13<5:hh69;4=2`g>13<5:i;69;4=2`f>13<5:hm69;4=2a2>13<5:i969;4=2ae>13<5:io69;4=2af>13<5:n;69;4=2f2>13<5:n?69;4=2f1>13<5:n869;4=2f6>13<5:n=69;4=2cg>13<5:kh69;4=2cf>13<5:kj69;4=2c:>13<5:ki69;4=2c4>13<5:k=69;4=2c;>13<5:k>69;4=2gb>13<5:o269;4=2g;>13<5:o<69;4=2g5>13<5:o>69;4=2g7>13<5:o869;4=2g1>13<5:o:69;4=24f>13<5:13<5=?36974}r11>k5233:95=452z\7`2=:<831=5<4}r1e7?6=:rT?h;5240:95=47>52z\7`0=:<8=1=5<4}r1e5?6=:rT?h95240495=452z\7`6=:<8?1=5<4}r1fb?6=:rT?h?5240695=452z\7`5=:<891=5<4}r1f`?6=:rT?ok5240095=4;j7>52z\7g`=:<:91=5<4}r63a?6=:rT?oi5242095=4;h7>52z\7gf=:<:;1=5<4}r63g?6=:rT?oo5242295=4;n7>52z\7gd=:<;l1=5<4}r63e?6=:rT?o45243g95=4;57>52z\7g==:<;=1=5<4}r636?6=:rT?o:5240a95=452z\7g0=:<8;1=5<4}r1fg?6=:rT?o95240295=4;47>52z\7g6=:<;n1=5<4}r633?6=:rT?o?5243a95=4;:7>52z\7g4=:<;h1=5<4}r631?6=:rT?o=5243c95=4;87>52z\7fc=:<;31=5<4}r637?6=:rT?nh5243:95=4;=7>52z\7fa=:<;<1=5<4}r634?6=:rT?nn5243795=452z\7`a=:<;>1=5<4}r1ea?6=:rT?hn5243195=452z\7`g=:<;81=5<4}r1eg?6=:rT?hl5243395=452z\7`<=:<;:1=5<4}r1ee?6=:rT?h55240d95=452z\7`4=:<8o1=5<4}r1e52z\7fg=:<8h1=5<4}r1e1?6=:rT?nl5240c95=4i<7>52z\7=`=:<<214;5rs5cf>5<5sW>2h63;5986=>{t7}Y<0h019;7:448yv2fj3:1>vP;9`9>00>==<1v9on:181[2>127?954:4:p0d?=838pR977;<66;3=10386s|4c594?4|V=k?70::8;43?xu3j?0;6?uQ4`18913?2>47;l;|q7f7<72;qU84h4=57;>0di=7>52z\7=3=:<<219l5rs5c4>5<5sW>2963;59866>{t9:=1<7mt=55f>41c348io7:7;<0bg?2?348no7;>;<0ff?2?3483j7:7;<04g?2?3492<7:7;<14a?2?3498>7:7;<171?2?349>n7:7;|q1e4<72;q6>l>54g9>6d4=9>h0q~:93;295=}::h:1=5?4=545>4>5348o;7:m;<0g2?2e348o97:m;<0g0?2e348o?7:m;<0g6?2e348o<7:m;<0`b?7?9279h<4;b:?1a<<3j279i54;b:?1a2<3j279i;4;b:?1a0<3j279i94;b:?1a6<3j279i?4;b:?1a4<3j279;94>809>623=91;01?8i:5`8970b2=h0q~>h7?72:?71f<3>2wx88k50;0x913b282970:90;f:?xu3>10;6>u247;90c=:=57>52z?72<<60;168;l5d89~w13d2908w0::d;6e?822k3;3>63;618ge>{t4>534>=47:i;<65f?bf3ty?9k4?:5y>030=91;0198::0:2?821<3;3=63;61823g=z{=<96=4=6z?720<60;16><:54c9>645=<<54c9>647=<>54c9>65`==k54c9>65b==m54c9>636=8h54c9>60c=8j54c9>60e=8l54c9>60g=8754c9>60>=9k54c9>61b=9m54c9>61d=9o54c9>61?=9654c9>611=9854c9>613=5a3=5a5=5a7=54c9>5f`=4>434>9n7?73:?76d<60:168?751918914?282870:=6;3;7>;3:<0:4>5243695=5<5=886<6<;<616?7?;27?><4>829>076=919019?i:0:0?826m3;3?63;1e82<6=:<8h1=5=4=53b>4>434>:57?73:?75=<60:168<9519189171282870:>5;3;7>;39=0:4>5240195=5<5=;96<6<;<607?7?;27???4>829>067=919019=?:0:0?825n3;3?63;2d82<6=:<;=1=5=4=53`>4>434>:=7?73:?755<60:1688o5d`9>00>=91o0q~:9a;297~;3>o0:4<5247g95=7<5=i70=>d;6a?856k3>i70=>b;6a?856i3>i70=>9;6a?85603>i70=>7;6a?856>3>i70=>4;6a?85ej3>i70=m9;6a?85ei3;3=63;4jm0?n63;4jl0?n63;4k80?n63;4ko0?n634>6349nm7:m;<1f=?2e349n47:m;<1f3?2e349n:7:m;<1f1?2e349n87:m;<1f7?2e349n>7:m;<1f5?2e3ty?:n4?:3cx910b282970?m2;6a?87e93>i70?m0;6a?87fn3>i70?ne;6a?87fl3>i70?nc;6a?87fj3>i70?na;6a?87ai3>i70?i9;6a?87a03>i70?i7;6a?87a>3>i70?i5;6a?87a<3>i70?i3;6a?87a:3>i70?j8;6a?87b?3>i70?j6;6a?87b=3>i70?j4;6a?87b;3>i70?j2;6a?87b93>i70?j0;6a?844i3>i70<<9;6a?84403>i70<<7;6a?844>3>i70<<5;6a?844<3>i70<<3;6a?844:3>i70<<1;6a?85503>i70=9e;6a?851n3>i70=9a;6a?xu5=>0;68u220690c=::?:1=5<4=335>ag<5;;36i74=33b>ae53z?151<60;16>4j5d89>6=g=l01v??::181846;3>m70<>6;34f>{t:9k1<7=t=330>4>53482o7jn;<0;=?bf3ty9=:4?:3y>644=<6516`8yv4713:1?v3=1382<7=::0i1hn5229;9`f=z{;;26=49{<025?2a348:m7?8b:?15f?4kc:p65>=839p1??>:0:1?84>j3nj70<78;fb?xu59k0;6?u220290c=::8i1=:l4}r033?6=;r79==4>839>6565db9~w77c2909w0=k54g9>676=9>h0q~5<5s48;h7:i;<017?70j2wx>=:50;1x976c282970<69;fb?84?>3nj7p}=2483>7}::9i18k52234952d53z?14f<60;16>475db9>6=0=lj1v:18687e:3>m70?ia;3;6>;6j=0om63>b78g=>;6j10oo6s|1`;94?3|58h96<6=;<15=?b>349>?7j6;<174?b>348m97jn;|q2f6<72;q6=o?54g9>5g2=9>h0q~?n8;291~;6j80:4?5237;9`g=:;<91ho523529`g=::ol1hl5rs0`6>5<5s4;i<7:i;<3a2?70j2wx=l950;7x94d7282970=98;f:?852:3n270=b683>3}:9hl18k521c:952d<58hj6io4=0``>a?<58hn6il4=0a3>ae55z?2ec<60;16?;65dc9>704=lk16?>h5dc9>6cb=lh1vm70?ma;34f>{t9h?1<7;t=0cf>4>5349=;7j6;<165?b>3498i7j6;<0eg?bf3ty:no4?:3y>5db=ae82<7=:;?=1ho523439`g=:;:o1ho522g`9`d=z{8ho6=4={<3bg?2a34;ii7?8b:p5d5=83?p13n270=:0;f:?854l3n270839>730=lk16?8>5dc9>76b=lk16>k75d`9~w4e42909w0?na;6e?87d<3;349?j7j6;<10g?b>348m47jn;|q101<72;q6>;>54g9>61c=9180q~<;3;296~;5=o0?j63=4e82<7=z{;?=6=4;{<06b?7?:279=;4k9:?15=6}::ad<5;;j6io4}r075?6=:r799i4;f:?10g<60;1v?;;:181842l3;3>63=1`8g=>{t:=:1<71`<5;>j6<6=;|q116<728m51908977d2m301??j:ec897472mi01?<=:e`8yv44n3:1>v3=5c87b>;5<00:4?5rs371>5<3s48>n7?72:?15`=4k9:?167>k50;0x973f2=l01?:7:0:1?xu5=80;6>u224c95=4<5;8;6io4=301>a?52z?11<<3n2798:4>839~w7372908w0<:9;3;6>;5::0o563=278ge>{t::i1<71`<5;>=6<6=;|q10c<72;q6>865190897412m30q~?kf;296~;6nh0?j63>e982<7=z{8nn6=4={<3e=?2a34;n;7?72:p5c6=83>p1de83>7}:9o218k521d495=453z?2b=<60;16=o85dc9>5g>=lh1vm70?j5;3;6>{t9lo1<74>534;i47j6;|q2`g<72;q6=k854g9>5`2=9180q~?jd;291~;6n?0:4?521cc9`<=:9ki1hl521cg9`f=:9j:1ho5rs0fb>5<5s4;m97:i;<3f7?7?:2wx=hm50;6x94`2282970?mc;fa?87em3n270?l0;fb?xu6l00;6?u21g690c=:9l81=5<4}r3ff?6=;r7:j94>839>5gc=lh16=n>5d89~w4b?2909w0?i3;6e?87b93;3>6s|1dc94?5|58l86<6=;<3`5?b>34;h87jn;|q2`2<72;q6=k<54g9>5`6=9180q~?j9;296~;6n;0:4?521b69`<=z{;9;6=4={<07a?2a3488m7?72:p67`=838p1?:k:5d8975>28297p}=2d83>7}::=i18k5222:95=452z?10g<3n279?:4>839~w74d2909w0<;a;6e?844>3;3>6s|23`94?4|5;>269h4=316>4>53ty9>l4?:3y>61>=>:51908yv4513:1>v3=4687b>;5;:0:4?5rs30;>5<5s48?:7:i;<006?7?:2wx>?950;0x97222=l01?=>:0:1?xu5;k0;652z?2a=<3n27:h;4>839~w4ed2909w0?j7;6e?87c=3;3>6s|1b`94?4|58o=69h4=0f7>4>53ty:ol4?:3y>5`3=v3>e587b>;6l;0:4?5rs0a;>5<5s4;n?7:i;<3g5?7?:2wx=n950;0x94c52=l013>m70;6190o563=8`8ge>;3=10?<6s|1g`94?4|58n>69h4=0;3>41e3ty:jn4?:3y>5a2=v3>d287b>;61;0:;o5rs0df>5<5s4;o>7:i;<3:7?70j2wx=kh50;0x94b62=l01<7;:05a?xu5890;6?u21e290c=:90?1=:l4}r035?6=:r7:ok4;f:?2=3<6?k1v?>=:18187dm3>m70?67;34f>{t;l:1<7:t=31b>1`<5:oj6<6=;<3:34>>47=9;|q124<72;q6>>754g9>5<>=9>h0q~<92;296~;5;10?j63>98823g=z{;<86=4={<003?2a34;2m7?8b:p632=838p1?=9:5d894?e28=i7p}=6483>7}:::?18k5218a952d52z?171<3n27:5i4>7c9~w7002909w0<<3;6e?87>m3;41e3ty9:44?:3y>667=516`8yv4bi3:1=8u22e5903=::m<18;522e7903=::m>18;522e1903=::m818;522e2903=::jl18;522e3903=::l318;522d:903=::l=18;522d4903=::l?18;522d6903=::l918;522d0903=::l;18;5244c9`g=::?k1=:l4=3c1>ag52z?1`2<3n279o94>7c9~w7eb290?w0;5m00?j63=9e8ge>;5k<0o56s|2`c94?4|5;n=69h4=3a0>41e3ty9oi4?:5y>6a0=91801?k7:5d897?d2m301?lm:e;8yv4f13:1>v3=d487b>;5k;0:;o5rs3a`>5<3s48o97?72:?1a2<3n2795n4kb:?1f<l650;0x97b32=l01?m>:05a?xu5kk0;69u22e695=4<5;o=69h4=3;a>a?<5;h<6i74}r0b3?6=:r79h>4;f:?1g5<6?k1v?mn:18784c;3;3>63=e487b>;51k0on63=b48g=>{t:h<1<71`<5;hm6<9m;|q1g<<72=q6>i<5190897c32=l01?7n:e;897d42m30q~1}::jl1=5<4=3g2>1`<5;326il4=3cg>a?52z?1`4<3n279nh4>7c9~w7e?290?w0;5m:0?j63=9`8gf>;5j80o56s|2cc94?4|5;i?6964=3`b>41e3ty9o84?:3y>6f2=9;301?m::05a?xu5j10;6>u22b190==::kk185522c:952d53z?1g6<6:016>oo519:897de28=i7p}=b783>6}::j8185522c:90==::k<1=:l4}r0a=?6=;r79o?4>289>6g>=91201?l6:05a?xu5j=0;6>u22b390==::k<185522c6952d53z?1g4<6:016>o8519:897d028=i7p}=b383>6}::j:185522c690==::k81=:l4}r0a1?6=;r79o=4>289>6g2=91201?l::05a?xu5j90;6>u22cd90==::k8185522c2952d53z?1fc<6:016>o<519:897d428=i7p}=ad83>6}::ko185522c290==::ho1=:l4}r0a5?6=;r79nh4>289>6g6=91201?l>:05a?xu5ij0;6>u22cf90==::ho185522`a952d53z?1fa<6:016>lk519:897ga28=i7p}=ae83>6}::ki1=?74=3c`>4>?348jh7?8b:p6a`=83?p1?k7:0:1?87>93n270?60;fb?84?13n270::8;1f?xu5ll0;68u22d595=4<58396i74=0;2>ag<5;226il4=57;>6b55z?1a3<60;16=4=5d89>5<4=lh16>565d89>00>=;j1v?jl:18684b=3;3>63>958g=>;61:0om63=898gf>;3=108n6s|2e`94?3|5;o?6<6=;<3:1?b>34;287jn;<0;3?b>34>>47=n;|q1`d<72h=5190894?12m301<7::ec897>02mh019;7:2;8yv4c13:19v3=e382<7=:90=1h4521849`d=::1<1h45244:97==z{;n36=4;{<0f5?7?:27:5:4ka:?1<363=728gf>;5?80on63=768gf>;5>k0o563=6`8gg>{t:>81<71`<5;=86<9m;|q12f<72?q6>;k5190897142m301?9>:ec897102mk01?8m:ec8970f2mh0q~6=4={<134?751279j84>7c9~w67b2909w0=?0;34f>;49<0?j6s|2g194?5|5::26964=3d7>1><5;l86<9m;|q1bc<72:q6?=7513;897`3282370{t;;=1<741e349:h7:i;|q0gg<72k:5509>7a3=91801>k6:5d896272mi01?hi:e;8yv4a:3:1?v3<0987<>;5n:0?463=f3823g=z{;ln6=4<{<134>899>6cc=9>h0q~==6;296~;4810:;o5230a90c=z{:ij6=4:{<0e7?36349o87?72:?0a=<3n278?k4ka:?1b`k?50;1x96602=201?h=:5:897`628=i7p}=fe83>6}:;9=1=?74=3d1>4>?348mh7?8b:p773=838p1>>8:05a?856j3>m7p}0}::o819<523e195=4<5:o<69h4=21e>ae<5;lo6i74}r0e4?6=;r78<;4;8:?1b4<30279j=4>7c9~w7`d2908w0=?6;31=>;5n80:45522ga952d52z?043<6?k16?w063;4;l0om63=fb8g=>{t:ll1<7=t=226>1><5;l;6964=3ge>41e3ty9jo4?:2y>753=9;301?h?:0:;?84aj3;6<9m;<12=?2a3ty8o:4?:4y>6c6==816?i?5190896c22=l01>=j:ea897`e2m30q~;5ml0:;o5rs3db>5<4s49;87?=9:?1ac<60116>ko516`8yv55:3:1>v3<05823g=:;8218k5rs2a5>5<2s48nj7;>;<1g4?7?:278i94;f:?07a><:5:897cb2=201?kk:05a?xu5n00;6>u2311957?<5;on6<67;<0e=?70j2wx???50;0x966428=i70=>7;6e?xu4k<0;68u22dg914=:;jl1=5<4=2g0>1`<5:9o6im4=3d:>a?53z?047<30279ii4;8:?1af<6?k1v?h7:180857:3;9563=ee82<==::o21=:l4}r114?6=:r787c9>740=m;:18684bl3?:70=le;3;6>;4m;0?j63<3b8ge>;5n10o56s|2d`94?5|5:::6964=3g`>1><5;oi6<9m;|q1b3<72:q6?=?513;897cd282370{t;8l1<741e349:87:i;|q037<72;kp1?km:43896de2=<01>l6:54896df2=<01>ll:54896dc2=<01>m?:54896db2=<01>li:54896e62=<01>m=:54896ea2=<01>mk:54896eb2=<01>j?:54896b62=<01>j;:54896b52=<01>j<:54896b22=<01>j9:54896gc2=<01>ol:54896gb2=<01>on:54896g>2=<01>om:54896g02=<01>o9:54896g?2=<01>o::54896cf2=<01>k6:54896c?2=<01>k8:54896c12=<01>k::54896c32=<01>k<:54896c52=<01>k>:548961428=i7p}<0`83>7}:;8?1=5<4=20b>ae52z?05a<60;16??o5dc9~w6752909w0=>c;3;6>;4:h0om6s|30394?4|5:;i6<6=;<11e?b>3ty8==4?:3y>74g=91801>v3<1882<7=:;;h1h45rs22f>5<5s49:47?72:?06f839>77e=l01v>=70=9a;65?851l3;41e3ty94h4?:3y>6<5=<116>4<516`8yv4>03:1>v3=9282<==::0n1=:l4}r0:b?6=:r795>4>7c9>6d4=l01v?6k:18184>:3>370<61;34f>{t:0=1<74>?3482o7?8b:p6=e=838p1?7>:5:897?728=i7p}=9783>7}::0;1=564=3;a>41e3ty94o4?:3y>6<6=<116>5h516`8yv4>=3:1>v3=9182<==::0k1=:l4}r0:0?6=:r794k4>899>6h0q~<8b;296~;5090?463=7g823g=z{;2>6=4={<0;4?7?02794l4>7c9~w7?b2909w0<70;34f>;5i;0on6s|26c94?4|5;=m6964=35f>41e3ty9494?:3y>62`=91201?66:05a?xu5?00;6?u226g90==::>n1=:l4}r0;7?6=:r79;h4>899>6=>=9>h0q~<88;296~;5?m0?463=7b823g=z{;296=4={<04`?7?02794:4>7c9~w7>62909w0<8c;3;<>;50?0:;o5rs2;g>5<3s49in7:i;<1b3?7?:278:;4kc:?0<61}:;k318k523`795=4<5:<>6il4=25e>a?53z?0f<<60;16?nj54g9>71`=lk1v>7l:18785ei3>m70=n6;3;6>;4><0om63<808g=>{t;k:1<7=t=2`b>4>5349hi7:i;<17b?bf3ty85h4?:5y>7ge=6::e;8yv5e:3:1?v3lk:0:1?85c93>m70=:1;f`?xu4i;0;69u23b290c=:;hi1=5<4=24;>ag<5:2o6i74}r1a2?6=;r78o=4>839>7a2=63<668ge>;4000o56s|3c694?5|5:hn6<6=;<1g6?2a349>=7jn;|q0e4<72=q6?oh54g9>7dd=91801>87:ea896>e2m30q~=m5;297~;4jo0:4?523e190c=:;<81hn5rs2c0>5<3s49h=7:i;<1b`?7?:278:44kc:?01}:;j818k523`g95=4<5:<26io4=2;b>a?53z?0g7<60;16?i854g9>705=lh1v>m<:18785dl3;3>63;4;j0on63=f68g<>{t;ji1<7:t=2f5>4>5349nm7:i;<174?bf348m97j6;|q03f<72;q6?lj54g9>7<>=9>h0q~=8b;296~;4ij0?j63<96823g=z{:=o6=4={<1ba?2a349257?8b:p72?=838p1>on:5d896?228=i7p}<7983>7}:;h318k52386952d52z?0eg<3n2785;4>7c9~w6112909w0=n7;6e?85>:3;41e3ty8;:4?:3y>7d>=v3;4190:;o5rs2:f>5<5s49257:7;<1;a?70j2wx?4o50;0x96?>288270=6a;34f>{t;1i1<7=t=2;;>1><5:2n6964=2:`>41e3ty84k4?:2y>7<>=9;301>6j:0:;?85?n3;1><5:2j6<9m;|q0d282370=7d;34f>{t;121<7=t=2;5>1><5:2j6964=2:;>41e3ty84o4?:2y>7<0=9;301>6n:0:;?85?j3;6964=2:;>1><5:2=6<9m;|q0<<<72:q6?4;513;896>?282370=79;34f>{t;1>1<7=t=2;7>1><5:2=6964=2:7>41e3ty84:4?:2y>7<2=9;301>69:0:;?85??3;1><5:296<9m;|q0<0<72:q6?4=513;896>3282370=75;34f>{t;1:1<7=t=2;1>1><5:296964=2:3>41e3ty84>4?:2y>7<4=9;301>6=:0:;?85?;3;1><5:=n6<9m;|q0<4<72:q6?4?513;896>7282370=71;34f>{t;>l1<7=t=2;3>44>349ji:18785b13;3>63>988g=>;6110om63;59800>{t;mo1<7:t=2g;>4>534;2m7j6;<3:=?bf34>>47=<;|q0`a<72=q6?h95190894?e2m301<7n:ec8913?2:80q~=kc;290~;4m?0:4?5218a9`<=:90h1hl5244:974=z{:ni6=4;{<1f1?7?:27:5i4k9:?2=fp1>k;:0:1?87>m3n270?6d;fb?822038m7p}1}:;l91=5<4=0;e>a?<583n6io4=57;>7c54z?0a7<60;16=l>5d89>5<`=lh1688652e9~w6b02908w0=j1;3;6>;6i90om63;5981g>{t;:=1<74>?3498o7?8b:p77c=838p1>==:05a?854;3>37p}<3983>7}:;:91=564=21g>41e3ty8>k4?:3y>765=9>h01>=;:5:8yv5413:1>v3<3582<==:;:o1=:l4}r104?6=:r78?94>7c9>763=<11v>=n:181854=3;3463<3g823g=z{:9:6=4={<101?70j278?;4;8:p76d=838p1>=9:0:;?85383;713=91201>:i:05a?xu4<80;6?u2357952d<5:>=6964}r17f?6=:r788;4>899>706=9>h0q~=;2;296~;4h6=4={<173?7?02789<4>7c9~w6242909w0=;7;34f>;4<10?46s|35f94?4|5:>36<67;<166?70j2wx?9:50;0x962?28=i70=;9;6;?xu4<5:?86<9m;|q010<72:q6?97516`896162m301>8l:e`8yv5183:1>v3<5c82<==:;??1=:l4}r163?6=:r789o4>7c9>70e=<11v>8>:181852k3;3463<67823g=z{:?36=4={<16g?70j2789i4;8:p734=838p1>;k:0:;?851?3;4?:3y>70c=91201>87:05a?xu4=h0;6?u234g952d<5:?m6964}r150?6=:r789k4>899>73?=9>h0q~=:6;296~;4=o0:;o5237a9`<=z{:=;6=4<{<15a?2a349=j7:i;<145?70j2wx?;k50;6x960b282970=82;fb?850;3nj70=9d;f;?xu4>k0;6?u237c90c=:;?i1=:l4}r66f?6=:07e=07g=07>=073=075=077=5479>04`=04b=04g=04>=040=042=044==5479>064=?5479>066=07c=04e=046=;l516`8yv2283:1>v3;2e87b>;3=10h;6s|45d94?4|5=8h69h4=57;>g1?i7>52z?76g<3n27?954m5:p01b=838p19{t<=h1<71`<5=?36o?4}r67=?6=:r7?>;4;f:?71=v3;2587b>;3=10ji6s|45494?4|5=8869h4=57;>f3?97>52z?767<3n27?954nd:p012=838p19<>:5d8913?2hi0q~:;3;296~;3:90?j63;598bf>{t<=81<71`<5=?36lo4}r675?6=:r7?=h4;f:?71=50;0x917c2=l019;7:`58yv24m3:1>v3;1c87b>;3=10j:6s|42f94?4|5=;j69h4=57;>d38o7>52z?75<<3n27?954l4:p06d=838p19?7:5d8913?2h>0q~:0?j63;598b7>{t<:31<71`<5=?36l<4}r60950;0x91732=l019;7:`28yv24>3:1>v3;1287b>;3=102j6s|42794?4|5=;969h4=57;>gc>;7>52z?776<3n27?954md:p000=838p19==:5d8913?2j90q~::5;296~;3;80?j63;598ag>{t<<>1<71`<5=?36ol4}r667?6=:r7?>k4;f:?71=v3;2687b>;3=10i46s|45c94?4|5=;h69h4=57;>g28j7>52z?754<3n27?954n9:p062=838p19??:5d8913?20o0q~==a;296~;4:h0:;o5233`9`g=z{=?26=4={<66e?70j27?954l9:p7`d=83?p1>9>:ec8960d2mk01>9=:05a?82203><863;598`<>{t9?:1<7ag<5;896<5f6=9;k0q~<=4;296~;5:?0on63=23823g=z{8i96=4={<3`0?be34;h<7?8b:p560=838p1>6s|4`g94?4|V=3o70:<:5;g?!2083;?h6s|4`f94?4|V=3h70:<:5;`?!2083;>;6s|4`a94?4|V=3i70:<:5;a?!2083;>56s|4``94?4|V=3j70:<:5;b?!2083;>m6s|4`c94?4|V=3270:<:5;:?!2083;>n6s|4`;94?4|V=3370:<:5;;?!2083;>h6s|4`:94?4|V=3<70:<:5;4?!2083;>i6s|4c;94?4|V=k=70:<:5c5?!2083;>j6s|4c:94?4|V=k>70:<:5c6?!2083;==6s|4c594?4|V=k?70:<:5c7?!2083;=>6s|4c494?4|V=k870:<:5c0?!2083;=?6s|4c794?4|V=k970:<:5c1?!2083;=86s|4c694?4|V=k:70:<:5c2?!2083;=96s|4c194?4|V=k;70:<:5c3?!2083;=:6s|4c094?4|V=3m70:<:5;e?!2083;=;6s|4c394?4|V=3=70:<:5;5?!2083;=46s|4`594?4|V=3>70:<:5;6?!2083;=56s|56194?4|V<=870:<:450?!2083;=m6s|54f94?4|V70:<:5f6?!2083;<>6s|4g594?4|V=n?70:<:5f7?!2083;70:<:5a6?!2083;8j6s|4d594?4|V=i?70:<:5a7?!2083;?<6s|4d494?4|V=i870:<:5a0?!2083;?=6s|4d794?4|V=i970:<:5a1?!2083;??6s|4d694?4|V=i:70:<:5a2?!2083;?86s|4d194?4|V=i;70:<:5a3?!2083;?96s|4d094?4|V=hm70:<:5`e?!2083;?:6s|4d394?4|V=hn70:<:5`f?!2083;?;6s|4d294?4|V=ho70:<:5`g?!2083;?46s|4ed94?4|V=hh70:<:5``?!2083;?56s|51094?4|V=no70:<:5fg?!2083;?m6s|51394?4|V=nh70:<:5f`?!2083;?n6s|51294?4|V=ni70:<:5fa?!2083;?o6s|4gd94?4|V=nj70:<:5fb?!2083;?i6s|4gg94?4|V=n270:<:5f:?!2083;?j6s|4gf94?4|V=n370:<:5f;?!2083;><6s|4ga94?4|V=n:70:<:5f2?!2083;>=6s|4g694?4|V=i=70:<:5a5?!2083;>>6s|4d;94?4|V=hi70:<:5`a?!2083;>?6s|4eg94?4|V=hj70:<:5`b?!2083;>86s|51c94?4|V<:j70:<:42b?!2083;>96s|49794?4|V=2>70:<:5:6?!2083;>:6s|51694?4|V<:?70:<:427?!2083;>46s|53d94?4|V<8m70:<:40e?!2083;>o6srn`f:>5<5sA><=6saaec94?4|@==:7p`ndc83>7}O<>;0qcokc;296~N3?81vbljk:181M2092wemik50;0xL1163tdjhk4?:3yK02752zJ734=zfho:6=4={I645>{iil81<7vF;709~jdc22909wE:81:me`0=838pD99>;|lba2<72;qC8:?4}ocf5<5sA><=6saadc94?4|@==:7p`nec83>7}O<>;0qcojc;296~N3?81vblkk:181M2092wemhk50;0xL1163tdjik4?:3yK02752zJ734=zfhl:6=4={I645>{iio81<7vF;709~jd`22909wE:81:mec0=838pD99>;|lbb2<72;qC8:?4}oce5<5sA><=6saagc94?4|@==:7p`nfc83>7}O<>;0qcoic;296~N3?81vblhk:181M2092wemkk50;0xL1163tdjjk4?:3yK02752zJ734=zfk::6=4={I645>{ij981<7vF;709~jg622909wE:81:mf50=838pD99>;|la42<72;qC8:?4}o`35<5sA><=6sab1c94?4|@==:7p`m0c83>7}O<>;0qcl?c;296~N3?81vbo>k:181M2092wen=k50;0xL1163tdi52zJ734=zfk;:6=4={I645>{ij881<7vF;709~jg722909wE:81:mf40=838pD99>;|la52<72;qC8:?4}o;2e?6=9rB?;<5rn87:>5<6sA><=6sa94c94?7|@==:7p`65c83>4}O<>;0qc7:c;295~N3?81vb4;k:182M2092we58k50;3xL1163td29k4?:0yK02751zJ734=zf0<:6=4>{I645>{i1?81<7?tH552?xh>>:0;6;|l:22<728qC8:?4}o;55<6sA><=6sa97c94?7|@==:7p`66c83>4}O<>;0qc79c;295~N3?81vb48k:182M2092we5;k50;3xL1163td2:k4?:0yK02751zJ734=zf0=:6=4>{I645>{i1>81<7?tH552?xh>?:0;6;|l:32<728qC8:?4}o;45<6sA><=6sa96c94?7|@==:7p`67c83>4}O<>;0qc78c;295~N3?81vb49k:182M2092we5:k50;3xL1163td2;k4?:0yK02751zJ734=zf02:6=4>{I645>{i1181<7?tH552?xh>0:0;62290:wE:81:m==0=83;pD99>;|l:<2<728qC8:?4}o;;5<6sA><=6sa99c94?7|@==:7p`68c83>4}O<>;0qc77c;295~N3?81vb46k:182M2092we55k50;3xL1163td24k4?:0yK02751zJ734=zf03:6=4>{I645>{i1081<7?tH552?xh>1:0;6<3:1=vF;709~j;|l:=2<728qC8:?4}o;:5<6sA><=6sa98c94?7|@==:7p`69c83>4}O<>;0qc76c;295~N3?81vb47k:182M2092we54k50;3xL1163td25k4?:0yK02751zJ734=zf0k:6=4>{I645>{i1h81<7?tH552?xh>i:0;6;|l:e2<728qC8:?4}o;b5<6sA><=6sa9`c94?7|@==:7p`6ac83>4}O<>;0qc7nc;295~N3?81vb4ok:182M2092we5lk50;3xL1163td2mk4?:0yK02751zJ734=zf0h:6=4>{I645>{i1k81<7?tH552?xh>j:0;6;|l:f2<728qC8:?4}o;a5<6sA><=6sa9cc94?7|@==:7p`6bc83>4}O<>;0qc7mc;295~N3?81vb4lk:182M2092we5ok50;3xL1163td2nk4?:0yK02751zJ734=zf0i:6=4>{I645>{i1j81<7?tH552?xh>k:0;6;|l:g2<728qC8:?4}o;`5<6sA><=6sa9bc94?7|@==:7p`6cc83>4}O<>;0qc7lc;295~N3?81vb4mk:182M2092we5nk50;3xL1163td2ok4?:0yK02751zJ734=zf0n:6=4>{I645>{i1m81<7?tH552?xh>l:0;6;|l:`2<728qC8:?4}o;g5<6sA><=6sa9ec94?7|@==:7p`6dc83>4}O<>;0qc7kc;295~N3?81vb4jk:182M2092we5ik50;3xL1163td2hk4?:0yK02751zJ734=zf0o:6=4>{I645>{i1l81<7?tH552?xh>m:0;6;|l:a2<728qC8:?4}o;f5<6sA><=6sa9dc94?7|@==:7p`6ec83>4}O<>;0qc7jc;295~N3?81vb4kk:182M2092we5hk50;3xL1163td2ik4?:0yK02751zJ734=zf0l:6=4>{I645>{i1o81<7?tH552?xh>n:0;6;|l:b2<728qC8:?4}o;e5<6sA><=6sa9gc94?7|@==:7p`6fc83>4}O<>;0qc7ic;295~N3?81vb4hk:182M2092we5kk50;3xL1163td2jk4?:0yK02751zJ734=zfh::6=4>{I645>{ii981<7?tH552?xhf8:0;6;|lb42<728qC8:?4}oc35<6sA><=6saa1c94?7|@==:7p`n0c83>4}O<>;0qco?c;295~N3?81vbl>k:182M2092wem=k50;3xL1163tdj51zJ734=zfh;:6=4>{I645>{ii881<7?tH552?xhf9:0;6;|lb52<728qC8:?4}oc25<6sA><=6saa0c94?7|@==:7p`n1c83>4}O<>;0qco>c;295~N3?81vbl?k:182M2092wem51zJ734=zfh8:6=4>{I645>{ii;81<7?tH552?xhf::0;6;|lb62<728qC8:?4}oc15<6sA><=6saa3c94?7|@==:7p`n2c83>4}O<>;0qco=c;295~N3?81vblk4?:0yK02751zJ734=zfh9:6=4>{I645>{ii:81<7?tH552?xhf;:0;6;|lb72<728qC8:?4}oc05<6sA><=6saa2c94?7|@==:7p`n3c83>4}O<>;0qcok50;3xL1163tdj?k4?:0yK02751zJ734=zfh>:6=4>{I645>{ii=81<7?tH552?xhf<:0;6;|lb02<728qC8:?4}oc75<6sA><=6saa5c94?7|@==:7p`n4c83>4}O<>;0qco;c;295~N3?81vbl:k:182M2092wem9k50;3xL1163tdj8k4?:0yK027<7>51zJ734=zfh?:6=4>{I645>{ii<81<7?tH552?xhf=:0;6;|lb12<728qC8:?4}oc65<6sA><=6saa4c94?7|@==:7p`n5c83>4}O<>;0qco:c;295~N3?81vbl;k:182M2092wem8k50;3xL1163tdj9k4?:0yK02751zJ734=zfh<:6=4>{I645>{ii?81<7?tH552?xhf>:0;6;|lb22<728qC8:?4}oc55<6sA><=6saa7c94?7|@==:7p`n6c83>4}O<>;0qco9c;295~N3?81vbl8k:182M2092wem;k50;3xL1163tdj:k4?:0yK02751zJ734=zfh=:6=4>{I645>{ii>81<7?tH552?xhf?:0;6;|lb32<728qC8:?4}oc45<6sA><=6saa6c94?7|@==:7p`n7c83>4}O<>;0qco8c;295~N3?81vbl9k:182M2092wem:k50;3xL1163tdj;k4?:0yK02751zJ734=zfh2:6=4>{I645>{ii181<7?tH552?xhf0:0;62290:wE:81:me=0=83;pD99>;|lb<2<728qC8:?4}oc;5<6sA><=6saa9c94?7|@==:7p`n8c83>4}O<>;0qco7c;295~N3?81vbl6k:182M2092wem5k50;3xL1163tdj4k4?:0yK02751zJ734=zfh3:6=4>{I645>{ii081<7?tH552?xhf1:0;6<3:1=vF;709~jd?2290:wE:81:me<0=83;pD99>;|lb=2<728qC8:?4}oc:5<6sA><=6saa8c94?7|@==:7p`n9c83>4}O<>;0qco6c;295~N3?81vbl7k:182M2092wem4k50;3xL1163tdj5k4?:0yK02751zJ734=zfhk:6=4>{I645>{iih81<7?tH552?xhfi:0;6;|lbe2<728qC8:?4}ocb5<6sA><=6saa`c94?7|@==:7p`nac83>4}O<>;0qconc;295~N3?81vblok:182M2092wemlk50;3xL1163tdjmk4?:0yK02751zJ734=zfhh:6=4>{I645>{iik81<7?tH552?xhfj:0;6;|lbf2<728qC8:?4}oca5<6sA><=6saacc94?7|@==:7p`nbc83>4}O<>;0qcomc;295~N3?81vbllk:182M2092wemok50;3xL1163tdjnk4?:0yK02751zJ734=zfhi:6=4>{I645>{iij81<7?tH552?xhfk:0;6;|lbg2<728qC8:?4}oc`5<6sA><=6saabc94?7|@==:7p`ncc83>4}O<>;0qcolc;295~N3?81vblmk:182M2092wemnk50;3xL1163tdjok4?:0yK02751zJ734=zfhn:6=4>{I645>{iim81<7?tH552?xhfl:0;6;|lb`2<728qC8:?4}ocg6789:;<=>;0:23456789:;<=>?0123456789:;<=>?0123456789:;<=>?0123456789:;<=>?013856=6&9;87<>5IORVP?GCL[K757>11g924?OIX\^1|ah_dosp|Ys`{oxd1750?05?46=AGZ^X7~}of]fiur~W}byi~fParqfvq:>2949:6??:HLSQQ712@D[YY4KI@>21?699:1::7AZTQWW>AIF48?1<3?;;0:9KPRW]]0ocxz31683:4=5:28:86<<3232?76==:HLSQQ112906?IR\Y__6IAM<2394;753:<1EC^ZT;fjj952294o7>}=012ec131%<;0895;0GD25>2=AGZ^X7JFPC>0>586:2>1CXZ_UU8GKUD;;3:5=68=;7;7?3?>>=138??;;9G;E4=><23;<4<49768=30>9;126D@_UU8B@ATE410;22@D[YY4rne\bpjkW}byi~fPndebp`:?294:4675OTVSQQG502KOH_O30?:8EABUI5;546OKDSC?6;>GCL[K7:364AEFQE91902KOH_O38?c8EABUI531<364AEFQE9?902KOH_L30?:8EABUJ5;546OKDS@?6;>GCL[H7:364AEFQF919i2KOH_L38;2=<>GCL[H743=4AMN:?DU^FJUYIJ=4BT0;?GSTW@DMC<5L2:AF57=D@LI@SAGLEOQF[Q_WM;1HE95LLJC7?FJLJ:1H@_74CNONMQRBL8>0OB\J_FGMAWGSAFDTECH@7:AQADRBL81O>6JL2:FJ2>BNI5:5;6JFA=33:2=CAH6:=394DHC?57803MCJ0<=17:FJE973601OEL2>5;2=3>BNI5;>2;5KI@>2:3=CAH692;5KI@>0:3=CAH6?2;5KI@>6:3=CAH6=2;5KI@>4:3=CAH632;5KI@>::3=CAK6;2:5KIC>24;169GMG:6<7=0HDL314<4?AOE48<5;6JFB=34:2=CAK6:4394DH@?5<813MCI0<08;EKA8769?2NBN1<>>69GMG:5:7=0HDL322<4?AOE4;>5;6JFB=06:2=CAK69:394DH@?62803MCI0?617:FJF94>6?1OEO2=>69GMG:48730HDL33083:2=CAK68=384DH@?7;02:2=CAYH7>374DHRA86<76>1OE]L33?48@JG;87=0HBO311<4?AIF48;5;6J@A=31:2=CGH6:?394DNC?518>3MEJ0<;50?58@JG;9<4=7IAN<0<5?AIF4;4=7IAN<2<5?AIF4=4=7IAN<4<5?AIF4?4=7IAN<6<5?AIF414=7IAN<8<4?AIFW[OL:6J@B=2=3>BHJ5;;2:5KOC>25;169GKG:6=7=0HBL317<4?AIE48=5;6J@B=3;:2=CGK6:5384DN@?5;1=08;EMA8779?2NDN1<=>69GKG:5;7=0HBL325<4?AIE4;?5;6J@B=05:2=CGK69;394DN@?6=803MEI0?716:FLF949?2NDN1=?>89GKG:493:5;6J@B=12:3=CGK682;5KOC>7:3=CGK6>2;5KOC>5:3=CGK6<2;5KOC>;:3=CGK622:5KOC]QAB12:2=CGYH7>374DNRA86<76>1OC]L33?18AKG43LDIn6KA_DA@[WCFLj1NBRKLC^UQMQC53O8?7K6HK3:DGG1=ALJO87KJ_4:DGT@2O7:2C:>6G=2:K0<>OIA]ZT<=64IOKWTZ6602CEEY^P03:8MKOSXV:846GAIUR\41>:8:KMMQVX8?20ECG[P^24=>OIA]Y_MYK8;HLJPZ67?2CEEYQ?169JJLRX8;=0ECG[_114?LHN\V:?;6GAIU]312=NF@^T<;94IOKW[5103@DBXR>77:KMMQY71>1BBDZP0@58MKOSW9H<7D@FT^2@3>OIA]U;H:5FNHV\4@1169JJLRX9;=0ECG[_014?LHN\V;?;6GAIU]212=NF@^T=;94IOKW[4103@DBXR?77:KMMQY61>1BBDZP1@58MKOSW8H<7D@FT^3@3>OIA]U:H:5FNHV\5@1;94IOKW[7103@DBXR<77:KMMQY51>1BBDZP2@58MKOSW;H<7D@FT^0@3>OIA]U9H:5FNHV\6@11BBDZP3@58MKOSW:H<7D@FT^1@3>OIA]U8H:5FNHV\7@1H9;HLJPZG13@DBXRL=;MK1?II13EEJHHJ8;MMDMFGK<2F^X<:4LTV10>JR\:>0@XZ;6:NVP1YC=2GXKB@:;LW[G\eKnffx]i}foo08J42159M54633G;:=95A1007?K76;=1E=<:;;O3211=I98759M54>33G;:5>5A1368J447<2D:><:4N0010>H6::>0B<<;4:L26022618J4533G;8=>5A1518J4343G;=?6@>729M5=5H59:1E>?=4N310?K43;2D99>5A2718J7143G83?6@=929M755;<;O157>H4?:1E?5=4N2;0?K27;2D?=>5A4318J1543G>??6@;529M035H0:2D2j6@M_CWPTLHXX[E[_:5AEUULVN7W63[o0^LCM17]P5=YT;?k0^HOK_GKQWQeTBIMU\EIZG_C38W45<[@GTOBBCIRKLJZEOMJA=7^AZRBG4?VTQIEUJ;6]]V@N\F1=T[[K?7^]]B59W]UC4:2_;#j|i.sd,cf~)keas#@v`r^pg[uhszVmhSua}0123[Wct}e~:??5Z0.eqb+ta'nis"nbdx.O{kwYulVzexQhc^zlv5679VXnxb{1208Q5)`zo$yj"ilx/aoo})JpfxT~iQnup\cfYg{:;6[?/fpe*w`(ojr%oaew/LzlvZtcWyd~Ril_ymq4563W[oxyaz>339V4*aun'xm#jmw.bnh|*Kg{UyhR~ats]dgZ~hz9:;9R\jstnw564<]9%l~k }f.e`|+ekcq%Ftb|Pre]sjqtXojUsc>?07]Qavsk|8997X> gsd-vc)`kq$h`fv Mymq[wbXxg~ySjmPxnp3451XZly~`y?<2:W3+bta&{l$knv!cmi{+H~hzVxoS}`{r^e`[}iu89:3S_k|umv277=R8&myj#|i/fa{*fjlp&GscQxr^rmpwY`kVrd~=>?0^Pfwpjs9:80Y=!hrg,qb*adp'iggu!Bxnp\swYwf}xTknQwos2344YUmzgx<==;T2,cw`)zo%lou lljz,I}iuW~xT|cz}_fa\|jt7898T^h}zlu306>S7'nxm"h gbz-gim'Drd~Ry}_qlwvZadWqey<=><_Sgpqir6;;1^<"i}f/pe+be&jf`t"Cwos]tvZvi|{UloRv`r1230ZTb{|f=><4U1-dvc(un&mht#mcky-N|jtX{U{by|Pgb]{kw678<5Z0.eqb+ta'nis"nbdx.pg[uhszVhbb1?1209V4*aun'xm#jmw.bnh|*tcWyd~Rlfn=0=64=R8&myj#|i/fa{*fjlp&xoS}`{r^`jj959:81^<"i}f/pe+be&jf`t"|k_qlwvZdnf5>5><5Z0.eqb+ta'nis"nbdx.pg[uhszVhbb1;1209V4*aun'xm#jmw.bnh|*tcWyd~Rlfn=4=64=R8&myj#|i/fa{*fjlp&xoS}`{r^`jj919:81^<"i}f/pe+be&jf`t"|k_qlwvZdnf525><5Z0.eqb+ta'nis"nbdx.pg[uhszVhbb171219V4*aun'xm#jmw.bnh|*tcWyd~Rlfn^314>S7'nxm"h gbz-gim'{nT|cz}_ckm[7473\:$kh!rg-dg}(ddbr$~iQnup\flhX;;:0Y=!hrg,qb*adp'iggu!}d^rmpwYeagU?>=5Z0.eqb+ta'nis"nbdx.pg[uhszVhbbR;=0:W3+bta&{l$knv!cmi{+wbXxg~ySoga_703?P6(o{l%~k!hcy,`hn~(zmU{by|Pbhl\376<]9%l~k }f.e`|+ekcq%yhR~ats]amkY?:91^<"i}f/pe+be&jf`t"|k_qlwvZdnfV39:6[?/fpe*w`(ojr%oaew/sf\tkruWkceSua}012362=R8&myj#|i/fa{*fjlp&xoS}`{r^`jjZ~hz9:;<<<9;T2,cw`)zo%lou lljz,vaYwf}xTnd`Pxnp34575?2_;#j|i.sd,cf~)keas#jPpovq[goiWqey<=>>1348Q5)`zo$yj"ilx/aoo})ulVzexQmio]{kw678;8<7X> gsd-vc)`kq$h`fv re]sjqtXj`dTtb|?010263=R8&myj#|i/fa{*fjlp&xoS}`{r^`jjZ~hz9:;??94U1-dvc(un&mht#mcky-q`Zvi|{UiecQwos234645>2_;#j|i.sd,cf~)keas#jPpovq[goiWqey<=>;269V4*aun'xm#jmw.bnh|*tcWyd~Rlfn^zlv567<88=7X> gsd-vc)`kq$h`fv re]sjqtXj`dTtb|?01713>S7'nxm"h gbz-gim'{nT|cz}_ckm[}iu89:>=?84U1-dvc(un&mht#mcky-q`Zvi|{UiecQwos23434?3\:$kh!rg-dg}(ddbr$~iQnup\flhXpfx;<=8>1358Q5)`zo$yj"ilx/aoo})ulVzexQmio]{kw678?89n6[?/fpe*w`(ojr%oaew/sf\tkruWkceSua}0125[gbc8;<0Y=!hrg,qb*adp'iggu!}d^rmpwYeagUsc>?0604?P6(o{l%~k!hcy,`hn~(zmU{by|Pbhl\|jt789=:>=5Z0.eqb+ta'nis"nbdx.pg[uhszVmh0=0=0:W3+bta&{l$knv!cmi{+wbXxg~ySjm31?03?P6(o{l%~k!hcy,`hn~(zmU{by|Pgb>1:76<]9%l~k }f.e`|+ekcq%yhR~ats]dg959:91^<"i}f/pe+be&jf`t"|k_qlwvZad4=49<6[?/fpe*w`(ojr%oaew/sf\tkruWni793328Q5)`zo$yj"ilx/aoo})ulVzexQhc=5=65=R8&myj#|i/fa{*fjlp&xoS}`{r^e`8=8582_;#j|i.sd,cf~)keas#jPpovq[be;17;m7X> gsd-vc)`kq$h`fv re]sjqtXojU;=k5Z0.eqb+ta'nis"nbdx.pg[uhszVmhS;m7X> gsd-vc)`kq$h`fv re]sjqtXojU3=k5Z0.eqb+ta'nis"nbdx.pg[uhszVmhS4<9;T2,cw`)zo%lou lljz,vaYwf}xTknQnssgd8585>2_;#j|i.sd,cf~)keas#jPpovq[beXizxnk1?1279V4*aun'xm#jmw.bnh|*tcWyd~Ril_`qqab:56;<0Y=!hrg,qb*adp'iggu!}d^rmpwY`kVkx~hi33?05?P6(o{l%~k!hcy,`hn~(zmU{by|Pgb]bwwc`4=49:6[?/fpe*w`(ojr%oaew/sf\tkruWniTm~|jg=7=63=R8&myj#|i/fa{*fjlp&xoS}`{r^e`[duumn6=2?84U1-dvc(un&mht#mcky-q`Zvi|{UloRo|rde?3;413\:$kh!rg-dg}(ddbr$~iQnup\cfYf{{ol050=6:W3+bta&{l$knv!cmi{+wbXxg~ySjmParpfc9?9:<1^<"i}f/pe+be&jf`t"|k_qlwvZadWhyyijQ?249V4*aun'xm#jmw.bnh|*tcWyd~Ril_`qqabY6:<1^<"i}f/pe+be&jf`t"|k_qlwvZadWhyyijQ=249V4*aun'xm#jmw.bnh|*tcWyd~Ril_`qqabY4:<1^<"i}f/pe+be&jf`t"|k_qlwvZadWhyyijQ;249V4*aun'xm#jmw.bnh|*tcWyd~Ril_`qqabY2:<1^<"i}f/pe+be&jf`t"|k_qlwvZadWhyyijQ9249V4*aun'xm#jmw.bnh|*tcWyd~Ril_`qqabY0:<1^<"i}f/pe+be&jf`t"|k_qlwvZadWhyyijQ7249V4*aun'xm#jmw.bnh|*tcWyd~Ril_`qqabY>:01^<"i}f/pe+be&jf`t"|k_qlwvZadWhyyijQk1=3=6<=R8&myj#|i/fa{*fjlp&xoS}`{r^e`[duumnUo=1<1289V4*aun'xm#jmw.bnh|*tcWyd~Ril_`qqabYc9595>45Z0.eqb+ta'nis"nbdx.pg[uhszVmhSl}}ef]g5929:01^<"i}f/pe+be&jf`t"|k_qlwvZadWhyyijQk1=7=6<=R8&myj#|i/fa{*fjlp&xoS}`{r^e`[duumnUo=181289V4*aun'xm#jmw.bnh|*tcWyd~Ril_`qqabYc95=5>45Z0.eqb+ta'nis"nbdx.pg[uhszVmhSl}}ef]g59>9:01^<"i}f/pe+be&jf`t"|k_qlwvZadWhyyijQk1=;=6==R8&myj#|i/fa{*fjlp&xoS}`{r^e`[duumnUo=R?=8:W3+bta&{l$knv!cmi{+wbXxg~ySjmParpfcZb6W;837X> gsd-vc)`kq$h`fv re]sjqtXojUjkh_e3\77><]9%l~k }f.e`|+ekcq%yhR~ats]dgZgtzlmTh55Z0.eqb+ta'nis"nbdx.pg[uhszVmhSl}}ef]g5Z?5=2_;#j|i.sd,cf~)keas#jPpovq[beXpfx;<=>=5:W3+bta&{l$knv!cmi{+wbXxg~ySjmPxnp34575=2_;#j|i.sd,cf~)keas#jPpovq[beXpfx;<=<=5:W3+bta&{l$knv!cmi{+wbXxg~ySjmPxnp34555=2_;#j|i.sd,cf~)keas#jPpovq[beXpfx;<=:=5:W3+bta&{l$knv!cmi{+wbXxg~ySjmPxnp34535=2_;#j|i.sd,cf~)keas#jPpovq[beXpfx;<=8=5:W3+bta&{l$knv!cmi{+wbXxg~ySjmPxnp34515=2_;#j|i.sd,cf~)keas#jPpovq[beXpfx;<=6=1:W3+bta&{l$knv!cmi{+rtXxg~ySoga<1<15>S7'nxm"h gbz-gim'~xT|cz}_ckm848592_;#j|i.sd,cf~)keas#z|Ppovq[goi4;49=6[?/fpe*w`(ojr%oaew/vp\tkruWkce0>0=1:W3+bta&{l$knv!cmi{+rtXxg~ySoga<5<15>S7'nxm"h gbz-gim'~xT|cz}_ckm808592_;#j|i.sd,cf~)keas#z|Ppovq[goi4?49=6[?/fpe*w`(ojr%oaew/vp\tkruWkce0:0=1:W3+bta&{l$knv!cmi{+rtXxg~ySoga<9<14>S7'nxm"h gbz-gim'~xT|cz}_ckm[5473\:$kh!rg-dg}(ddbr${Qnup\flhX9;:0Y=!hrg,qb*adp'iggu!xr^rmpwYeagU9>=5Z0.eqb+ta'nis"nbdx.uq[uhszVhbbR==0:W3+bta&{l$knv!cmi{+rtXxg~ySoga_503?P6(o{l%~k!hcy,`hn~({U{by|Pbhl\176<]9%l~k }f.e`|+ekcq%|~R~ats]amkY1:91^<"i}f/pe+be&jf`t"y}_qlwvZdnfV=9<6[?/fpe*w`(ojr%oaew/vp\tkruWkceS5<9;T2,cw`)zo%lou lljz,swYwf}xTnd`Pxnp34565?2_;#j|i.sd,cf~)keas#z|Ppovq[goiWqey<=>?1348Q5)`zo$yj"ilx/aoo})pzVzexQmio]{kw67888<7X> gsd-vc)`kq$h`fv ws]sjqtXj`dTtb|?013263=R8&myj#|i/fa{*fjlp&}yS}`{r^`jjZ~hz9:;>?94U1-dvc(un&mht#mcky-tvZvi|{UiecQwos234775>2_;#j|i.sd,cf~)keas#z|Ppovq[goiWqey<=><269V4*aun'xm#jmw.bnh|*quWyd~Rlfn^zlv567;;8=7X> gsd-vc)`kq$h`fv ws]sjqtXj`dTtb|?01613>S7'nxm"h gbz-gim'~xT|cz}_ckm[}iu89:?=?84U1-dvc(un&mht#mcky-tvZvi|{UiecQwos2340403\:$kh!rg-dg}(ddbr${Qnup\flhXpfx;<=;>279V4*aun'xm#jmw.bnh|*quWyd~Rlfn^zlv567>;20Y=!hrg,qb*adp'iggu!xr^rmpwYeagUsc>?073262=R8&myj#|i/fa{*fjlp&}yS}`{r^`jjZ~hz9:;:?;5Z0.eqb+ta'nis"nbdx.uq[uhszVhbbRv`r123371<]9%l~k }f.e`|+ekcq%|~R~ats]amkYg{:;<:?=0:W3+bta&{l$knv!cmi{+rtXxg~ySjm30?03?P6(o{l%~k!hcy,`hn~({U{by|Pgb>2:76<]9%l~k }f.e`|+ekcq%|~R~ats]dg949:91^<"i}f/pe+be&jf`t"y}_qlwvZad4:49<6[?/fpe*w`(ojr%oaew/vp\tkruWni783328Q5)`zo$yj"ilx/aoo})pzVzexQhc=4=65=R8&myj#|i/fa{*fjlp&}yS}`{r^e`828582_;#j|i.sd,cf~)keas#z|Ppovq[be;07;m7X> gsd-vc)`kq$h`fv ws]sjqtXojU;=k5Z0.eqb+ta'nis"nbdx.uq[uhszVmhS;m7X> gsd-vc)`kq$h`fv ws]sjqtXojU3>;5Z0.eqb+ta'nis"nbdx.uq[uhszVmhSl}}ef>3:70<]9%l~k }f.e`|+ekcq%|~R~ats]dgZgtzlm7=3<9;T2,cw`)zo%lou lljz,swYwf}xTknQnssgd8785>2_;#j|i.sd,cf~)keas#z|Ppovq[beXizxnk1=1279V4*aun'xm#jmw.bnh|*quWyd~Ril_`qqab:36;<0Y=!hrg,qb*adp'iggu!xr^rmpwY`kVkx~hi35?05?P6(o{l%~k!hcy,`hn~({U{by|Pgb]bwwc`4?49:6[?/fpe*w`(ojr%oaew/vp\tkruWniTm~|jg=5=63=R8&myj#|i/fa{*fjlp&}yS}`{r^e`[duumn632?;4U1-dvc(un&mht#mcky-tvZvi|{UloRo|rde\473<]9%l~k }f.e`|+ekcq%|~R~ats]dgZgtzlmT=?;4U1-dvc(un&mht#mcky-tvZvi|{UloRo|rde\673<]9%l~k }f.e`|+ekcq%|~R~ats]dgZgtzlmT??;4U1-dvc(un&mht#mcky-tvZvi|{UloRo|rde\073<]9%l~k }f.e`|+ekcq%|~R~ats]dgZgtzlmT9?;4U1-dvc(un&mht#mcky-tvZvi|{UloRo|rde\273<]9%l~k }f.e`|+ekcq%|~R~ats]dgZgtzlmT;?;4U1-dvc(un&mht#mcky-tvZvi|{UloRo|rde\<7?<]9%l~k }f.e`|+ekcq%|~R~ats]dgZgtzlmTh<2?>3;8Q5)`zo$yj"ilx/aoo})pzVzexQhc^cpv`aXl86:2?74U1-dvc(un&mht#mcky-tvZvi|{UloRo|rde\`4:56;30Y=!hrg,qb*adp'iggu!xr^rmpwY`kVkx~hiPd0>0:7?<]9%l~k }f.e`|+ekcq%|~R~ats]dgZgtzlmTh<2;>3;8Q5)`zo$yj"ilx/aoo})pzVzexQhc^cpv`aXl86>2?74U1-dvc(un&mht#mcky-tvZvi|{UloRo|rde\`4:16;30Y=!hrg,qb*adp'iggu!xr^rmpwY`kVkx~hiPd0>4:7?<]9%l~k }f.e`|+ekcq%|~R~ats]dgZgtzlmTh<27>3:8Q5)`zo$yj"ilx/aoo})pzVzexQhc^cpv`aXl8U;>55Z0.eqb+ta'nis"nbdx.uq[uhszVmhSl}}ef]g5Z7502_;#j|i.sd,cf~)keas#z|Ppovq[beXizxnkRj>_30;?P6(o{l%~k!hcy,`hn~({U{by|Pgb]bwwc`Wm;T??64U1-dvc(un&mht#mcky-tvZvi|{UloRo|rde\`4Y3:11^<"i}f/pe+be&jf`t"y}_qlwvZadWhyyijQk1^71<>S7'nxm"h gbz-gim'~xT|cz}_fa\evtboVn:S;<7;T2,cw`)zo%lou lljz,swYwf}xTknQnssgd[a7X?;20Y=!hrg,qb*adp'iggu!xr^rmpwY`kVkx~hiPd0];60=R8&myj#|i/fa{*fjlp&}yS}`{r^e`[}iu89:;>85Z0.eqb+ta'nis"nbdx.uq[uhszVmhSua}012260=R8&myj#|i/fa{*fjlp&}yS}`{r^e`[}iu89:9>85Z0.eqb+ta'nis"nbdx.uq[uhszVmhSua}012060=R8&myj#|i/fa{*fjlp&}yS}`{r^e`[}iu89:?>85Z0.eqb+ta'nis"nbdx.uq[uhszVmhSua}012660=R8&myj#|i/fa{*fjlp&}yS}`{r^e`[}iu89:=>85Z0.eqb+ta'nis"nbdx.uq[uhszVmhSua}012475=R8&myj#|i/fn3*wb(o{;%~kyit.Onq}YUIDUYHRKA_GUEP775n2_;#j|i.sd,ci6)zm%l~< }fvdw+HkrpVXJAR\JGNWW[@H69;n0Y=!hrg,qb*ak8'xo#j|>.sdtbq)d}{xTjzh{_rvbp`:76;n0Y=!hrg,qb*ak8'xo#j|>.sdtbq)d}{xTjzh{_rvbp`:66;i0Y=!hrg,qb*ak8'xo#j|>.sdtbq)d}{xTjzh{_rvbp`Y7:j1^<"i}f/pe+bj7&{n$k?!rguep*erz{Um{kzPsucwaZ74=2_;#j|i.sd,ci6)zm%l~< }fvdw+fsuzVl|jyQ|t`vf[hs89::0=0<6:W3+bta&{l$ka>!re-dv4(un~l#n{}r^dtbqYt|h~nS`{w01228586;<1^<"i}f/pe+bj7&{n$k?!rguep*erz{Um{kzPsucwaZkrp9:;=1?1379V4*aun'xm#jb?.sf,cw7)zo}mx"mzrs]escrX{}kiRczx12359799;20Y=!hrg,qb*ak8'xo#j|>.sdtbq)bey~rSkyit^da62=R8&myj#|i/fn3*wb(o{;%~kyit.gntqXn~lSd?319V4*aun'xm#jb?.sf,cw7)zo}mx"kbpu{\br`sW`Ufyu>?0131=>S7'nxm"h gm2-va)`zhy%~~z|/b2,gdtuqgo0=0=9:W3+bta&{l$ka>!re-dvdu)zz~x#n> c`pq}kcs484956[?/fpe*w`(oe:%~i!hr`q-vvrt'j:$ol|}yogw878512_;#j|i.sd,ci6)zm%l~l}!rrvp+f6(khxyuck{<2<1b>S7'nxm"h gm2-va)`zhy%~~z|/b2,chs&ngP

<1<17>S7'nxm"h gm2-va)`zhy%~~z|/b2,r4:66;90Y=!hrg,qb*ak8'xo#j|ns/pppv)d8&|:0?0=3:W3+bta&{l$ka>!re-dvdu)zz~x#n> v0>0:75<]9%l~k }f.eo4+tc'nxj#||tr-`4*p64=49n6[?/fpe*w`(oe:%~i!hr`q-vvrt'j:$z?0131f>S7'nxm"h gm2-va)`zhy%~~z|/b2,r4Y3Whdo<=>?13;8Q5)`zo$yj"ic0/pg+btf{'xxx~!l1.abvwim}6;2?74U1-dvc(un&mg<#|k/fpbw+tt|z%h="mnrs{maq:66;30Y=!hrg,qb*ak8'xo#j|ns/pppv)d9&ij~waeu>1:7?<]9%l~k }f.eo4+tc'nxj#||tr-`5*efz{seiy2<>3d8Q5)`zo$yj"ic0/pg+btf{'xxx~!l1.enq}(`eR:V"jc>.l31b>S7'nxm"h gm2-va)`zhy%~~z|/b3,chs&ngP=P hmr,nw7`<]9%l~k }f.eo4+tc'nxj#||tr-`5*aj}q$laV318Q5)`zo$yj"ic0/pg+btf{'xxx~!l1.t28485;2_;#j|i.sd,ci6)zm%l~l}!rrvp+f7(~8692?=4U1-dvc(un&mg<#|k/fpbw+tt|z%h="x><2<17>S7'nxm"h gm2-va)`zhy%~~z|/b3,r4:36;h0Y=!hrg,qb*ak8'xo#j|ns/pppv)d9&|:S=Qnne234575j2_;#j|i.sd,ci6)zm%l~l}!rrvp+f7(~8U:Sl`k012357d<]9%l~k }f.eo4+tc'nxj#||tr-`5*p6W;Ujbi>?0131f>S7'nxm"h gm2-va)`zhy%~~z|/b3,r4Y4Whdo<=>?13`8Q5)`zo$yj"ic0/pg+btf{'xxx~!l1.t2[1Yffm:;<=?=0:W3+bta&{l$ka>!re-dvdu)zz~x#nabp103?P6(o{l%~k!hl1,q`*auiz$yy} cnos57?<]9%l~k }f.eo4+tc'nxj#||tr-qehYbey~rSklPi228Q5)`zo$yj"ic0/pg+btf{'xxx~!}al]fiur~WohTeRa}012374=R8&myj#|i/fn3*wb(o{kx"}{s.pbiZcjx}sTjoQf_np34566::1^<"i}f/pe+bj7&{n$~}`{r.O`kphsWje~by<;;T2,cw`)zo%l`= }d.psjqt(Eje~byQlotlw572<]9%l~k }f.eo4+tc'{zex!BcnwmpZeh}g~9>95Z0.eqb+ta'nf;"j rqlwv*Kdg|dSnaznu110>S7'nxm"h gm2-va)uxg~y#@m`uov\gjsi|=8?7X> gsd-vc)`d9$yh"|nup,Ifirf}Uhcx`{5368Q5)`zo$yj"ic0/pg+wvi|{%Fob{at^alqkr1:=1^<"i}f/pe+bj7&{n$~}`{r.O`kphsWje~by9=4:W3+bta&{l$ka>!re-qtkru'DidyczPcnwmp=433\:$kh!rg-dh5(ul&x{by| MbmvjqYdg|d5?74U1-dvc(un&mg<#|k/srmpw)JkfexRm`uov\g|:76;i0Y=!hrg,qb*ak8'xo#~ats-Ngjsi|VidyczPcx>3:Zts:01^<"i}f/pe+bj7&{n$~}`{r.O`kphsWje~byQly=3=6f=R8&myj#|i/fn3*wb(zyd~"Clotlw[firf}Uhu1?1_sv1=>S7'nxm"h gm2-va)uxg~y#@m`uov\gjsi|Vir0?0=c:W3+bta&{l$ka>!re-qtkru'DidyczPcnwmpZe~4;4T~y<6;T2,cw`)zo%l`= }d.psjqt(Eje~byQlotlw[f;;78h7X> gsd-vc)`d9$yh"|nup,Ifirf}Uhcx`{_b{?7;Yu|;30Y=!hrg,qb*ak8'xo#~ats-Ngjsi|VidyczPcx>7:7e<]9%l~k }f.eo4+tc'{zex!BcnwmpZeh}g~Tot2;>^pw6<=R8&myj#|i/fn3*wb(zyd~"Clotlw[firf}Uhu1;12b9V4*aun'xm#jb?.sf,vuhsz&Ghcx`{_bmvjqYdq5?5Sz=9:W3+bta&{l$ka>!re-qtkru'DidyczPcnwmpZe~4?49o6[?/fpe*w`(oe:%~i!}povq+Heh}g~Tob{at^az838Xz}827X> gsd-vc)`d9$yh"|nup,Ifirf}Uhcx`{_b{?3;4d3\:$kh!rg-dh5(ul&x{by| MbmvjqYdg|dSnw37?]qp7?<]9%l~k }f.eo4+tc'{zex!BcnwmpZeh}g~Tot27>3a8Q5)`zo$yj"ic0/pg+wvi|{%Fob{at^alqkrXkp632R|{2`9V4*aun'xm#jb?.sf,vuhsz&Ghcx`{_bmvjqYg{6;2?o4U1-dvc(un&mg<#|k/srmpw)JkfexRm`uov\|jt;978j7X> gsd-vc)`d9$yh"|nup,Ifirf}Uhcx`{_ymq8785i2_;#j|i.sd,ci6)zm%y|cz}/LalqkrXkfexRv`r=1=6d=R8&myj#|i/fn3*wb(zyd~"Clotlw[firf}Usc2;>3c8Q5)`zo$yj"ic0/pg+wvi|{%Fob{at^alqkrXpfx793;:7g<]9%l~k }f.eo4+tc'{zex!BcnwmpZeh}g~Ttb|39?0g?P6(o{l%~k!hl1,q`*twf}x$Anaznu]`kphsWqey040Pru3e?P6(o{l%~k!hl1,q`*twf}x$ob{at=2=5c=R8&myj#|i/fn3*wb(zyd~"m`uov?5;7a3\:$kh!rg-dh5(ul&x{by| cnwmp9499o1^<"i}f/pe+bj7&{n$~}`{r.alqkr;;7;m7X> gsd-vc)`d9$yh"|nup,gjsi|5>5=k5Z0.eqb+ta'nf;"j rqlwv*eh}g~793?i;T2,cw`)zo%l`= }d.psjqt(kfex1811g9V4*aun'xm#jb?.sf,vuhsz&idycz37?3e?P6(o{l%~k!hl1,q`*twf}x$ob{at=:=5c=R8&myj#|i/fn3*wb(zyd~"m`uov?=;7b3\:$kh!rg-dh5(ul&x{by| cnwmpZ66m2_;#j|i.sd,ci6)zm%y|cz}/bmvjqY69l1^<"i}f/pe+bj7&{n$~}`{r.alqkrX:8o0Y=!hrg,qb*ak8'xo#~ats-`kphsW:;n7X> gsd-vc)`d9$yh"|nup,gjsi|V>:i6[?/fpe*w`(oe:%~i!}povq+firf}U>=h5Z0.eqb+ta'nf;"j rqlwv*eh}g~T:e:W3+bta&{l$ka>!re-qtkru'je~byQ6239V4*aun'xm#jb?.sf,vuhsz&idyczPd0>3:74<]9%l~k }f.eo4+tc'{zex!lotlw[a7;97897X> gsd-vc)`d9$yh"|nup,gjsi|Vn:0?0=2:W3+bta&{l$ka>!re-qtkru'je~byQk1=1=67=R8&myj#|i/fn3*wb(zyd~"m`uov\`4:36;80Y=!hrg,qb*ak8'xo#~ats-`kphsWm;793<=;T2,cw`)zo%l`= }d.psjqt(kfexRj><7<16>S7'nxm"h gm2-va)uxg~y#naznu]g5919:;1^<"i}f/pe+bj7&{n$~}`{r.alqkrXl8632?<4U1-dvc(un&mg<#|k/srmpw)dg|dSi?39?02?P6(o{l%~k!hl1,q`*twf}x$ob{at^f2[5463\:$kh!rg-dh5(ul&x{by| cnwmpZb6W88:7X> gsd-vc)`d9$yh"|nup,gjsi|Vn:S?<>;T2,cw`)zo%l`= }d.psjqt(kfexRj>_202?P6(o{l%~k!hl1,q`*twf}x$ob{at^f2[1463\:$kh!rg-dh5(ul&x{by| cnwmpZb6W<8:7X> gsd-vc)`d9$yh"|nup,gjsi|Vn:S;<>;T2,cw`)zo%l`= }d.psjqt(kfexRj>_602?P6(o{l%~k!hl1,q`*twf}x$ob{at^f2[=463\:$kh!rg-dh5(ul&x{by| cnwmpZb6W08?7X> gsd-vc)`d9$yh"|nup,gjsi|Vddx=>?13;8Q5)`zo$yj"ic0/uq+bqf{'}xx~!l1.abvwim}6;2?74U1-dvc(un&mg<#y}/fubw+qt|z%h="mnrs{maq:66;30Y=!hrg,qb*ak8'}y#jyns/uppv)d9&ij~waeu>1:7?<]9%l~k }f.eo4+qu'n}j#y|tr-`5*efz{seiy2<>3d8Q5)`zo$yj"ic0/uq+bqf{'}xx~!l1.enq}(`eR:V"jc>.l31b>S7'nxm"h gm2-sw)`hy%{~z|/b3,chs&ngP=P hmr,nw7`<]9%l~k }f.eo4+qu'n}j#y|tr-`5*aj}q$laV318Q5)`zo$yj"ic0/uq+bqf{'}xx~!l1.t28485;2_;#j|i.sd,ci6){%l{l}!wrvp+f7(~8692?=4U1-dvc(un&mg<#y}/fubw+qt|z%h="x><2<17>S7'nxm"h gm2-sw)`hy%{~z|/b3,r4:36;h0Y=!hrg,qb*ak8'}y#jyns/uppv)d9&|:S=Qnne234575j2_;#j|i.sd,ci6){%l{l}!wrvp+f7(~8U:Sl`k012357d<]9%l~k }f.eo4+qu'n}j#y|tr-`5*p6W;Ujbi>?0131f>S7'nxm"h gm2-sw)`hy%{~z|/b3,r4Y4Whdo<=>?13`8Q5)`zo$yj"ic0/uq+bqf{'}xx~!l1.t2[1Yig}:;<=?=9:W3+bta&{l$ka>!ws-dsdu)z~x#n< c`pq}kcs494956[?/fpe*w`(oe:%{!hw`q-svrt'j8$ol|}yogw848512_;#j|i.sd,ci6){%l{l}!wrvp+f4(khxyuck{<3<1=>S7'nxm"h gm2-sw)`hy%{~z|/b0,gdtuqgo0>0=f:W3+bta&{l$ka>!ws-dsdu)z~x#n< glw{*bk\8T$la< b13d8Q5)`zo$yj"ic0/uq+bqf{'}xx~!l2.enq}(`eR;V"jc|.lq1b>S7'nxm"h gm2-sw)`hy%{~z|/b0,chs&ngP>P hmr,nw7`<]9%l~k }f.eo4+qu'n}j#y|tr-`6*aj}q$laV=R.fop*hu5n2_;#j|i.sd,ci6){%l{l}!wrvp+f4(ods"jcT4\,div(j{;90Y=!hrg,qb*ak8'}y#jyns/uppv)d:&|:0=0=3:W3+bta&{l$ka>!ws-dsdu)z~x#n< v0>2:75<]9%l~k }f.eo4+qu'n}j#y|tr-`6*p64;49?6[?/fpe*w`(oe:%{!hw`q-svrt'j8$z<2<>318Q5)`zo$yj"ic0/uq+bqf{'}xx~!l2.t28185j2_;#j|i.sd,ci6){%l{l}!wrvp+f4(~8U;Sl`k012357d<]9%l~k }f.eo4+qu'n}j#y|tr-`6*p6W8Ujbi>?0131f>S7'nxm"h gm2-sw)`hy%{~z|/b0,r4Y5Whdo<=>?13`8Q5)`zo$yj"ic0/uq+bqf{'}xx~!l2.t2[6Yffm:;<=?=b:W3+bta&{l$ka>!ws-dsdu)z~x#n< v0]7[kis89:;=?>4U1-dvc(un&mg<#y}/fubw+qt|z%hc`~>219V4*aun'xm#jb?.vp,crgt&~y"m`mq01<>S7'nxm"h gm2-sw)`hy%{~z|/scn[cskdVliSd<:;T2,cw`)zo%l`= xr.etev(p{}y$~lcPftno[l4c3\:$kh!rg-dh5(pz&m|m~ xsuq,vdkXn|fgSdQbuy23454b3\:$kh!rg-dh5(pz&m|m~ xsuq,vdkXn|fgSdQbuy234576l2_;#j|i.sd,ci6){%ym`Qxr^gm[l75;2_;#j|i.sd,ci6){%||cz}/LalqkrXkfex?:4U1-dvc(un&mg<#y}/vrmpw)JkfexRm`uov261=R8&myj#|i/fn3*rt(yd~"Clotlw[firf}8986[?/fpe*w`(oe:%{!xpovq+Heh}g~Tob{at207?P6(o{l%~k!hl1,tv*qwf}x$Anaznu]`kphs<;>0Y=!hrg,qb*ak8'}y#z~ats-Ngjsi|Vidycz:259V4*aun'xm#jb?.vp,suhsz&Ghcx`{_bmvjq05<2_;#j|i.sd,ci6){%||cz}/LalqkrXkfex:<;;T2,cw`)zo%l`= xr.usjqt(Eje~byQlotlw<7?<]9%l~k }f.eo4+qu'~zex!BcnwmpZeh}g~Tot2?>3a8Q5)`zo$yj"ic0/uq+rvi|{%Fob{at^alqkrXkp6;2R|{289V4*aun'xm#jb?.vp,suhsz&Ghcx`{_bmvjqYdq5;5>n5Z0.eqb+ta'nf;"z| wqlwv*Kdg|dSnaznu]`}979W{~956[?/fpe*w`(oe:%{!xpovq+Heh}g~Tob{at^az8785k2_;#j|i.sd,ci6){%||cz}/LalqkrXkfexRmv<3<\vq4>3\:$kh!rg-dh5(pz&}{by| MbmvjqYdg|dSnw33?0`?P6(o{l%~k!hl1,tv*qwf}x$Anaznu]`kphsWjs7?3Q}t3;8Q5)`zo$yj"ic0/uq+rvi|{%Fob{at^alqkrXkp6?2?m4U1-dvc(un&mg<#y}/vrmpw)JkfexRm`uov\g|:36Vx>45Z0.eqb+ta'nf;"z| wqlwv*Kdg|dSnaznu]`}939:j1^<"i}f/pe+bj7&~x${}`{r.O`kphsWje~byQly=7=[wr512_;#j|i.sd,ci6){%||cz}/LalqkrXkfexRmv<7<1g>S7'nxm"h gm2-sw)pxg~y#@m`uov\gjsi|Vir0;0Pru0:?P6(o{l%~k!hl1,tv*qwf}x$Anaznu]`kphsWjs7;3 gsd-vc)`d9$|~"ynup,Ifirf}Uhcx`{_ymq8485i2_;#j|i.sd,ci6){%||cz}/LalqkrXkfexRv`r=0=6d=R8&myj#|i/fn3*rt(yd~"Clotlw[firf}Usc2<>3c8Q5)`zo$yj"ic0/uq+rvi|{%Fob{at^alqkrXpfx7834:7g<]9%l~k }f.eo4+qu'~zex!BcnwmpZeh}g~Ttb|38?0g?P6(o{l%~k!hl1,tv*qwf}x$Anaznu]`kphsWqey050Pru3e?P6(o{l%~k!hl1,tv*qwf}x$ob{at=2=5c=R8&myj#|i/fn3*rt(yd~"m`uov?5;7a3\:$kh!rg-dh5(pz&}{by| cnwmp9499o1^<"i}f/pe+bj7&~x${}`{r.alqkr;;7;m7X> gsd-vc)`d9$|~"ynup,gjsi|5>5=k5Z0.eqb+ta'nf;"z| wqlwv*eh}g~793?i;T2,cw`)zo%l`= xr.usjqt(kfex1811g9V4*aun'xm#jb?.vp,suhsz&idycz37?3e?P6(o{l%~k!hl1,tv*qwf}x$ob{at=:=5`=R8&myj#|i/fn3*rt(yd~"m`uov\44c<]9%l~k }f.eo4+qu'~zex!lotlw[47b3\:$kh!rg-dh5(pz&}{by| cnwmpZ46m2_;#j|i.sd,ci6){%||cz}/bmvjqY49l1^<"i}f/pe+bj7&~x${}`{r.alqkrX<8o0Y=!hrg,qb*ak8'}y#z~ats-`kphsW<;n7X> gsd-vc)`d9$|~"ynup,gjsi|V<:i6[?/fpe*w`(oe:%{!xpovq+firf}U<=h5Z0.eqb+ta'nf;"z| wqlwv*eh}g~T4?<4U1-dvc(un&mg<#y}/vrmpw)dg|dSi?30?01?P6(o{l%~k!hl1,tv*qwf}x$ob{at^f28485:2_;#j|i.sd,ci6){%||cz}/bmvjqYc9585>?5Z0.eqb+ta'nf;"z| wqlwv*eh}g~Th<2<>308Q5)`zo$yj"ic0/uq+rvi|{%hcx`{_e3?0;453\:$kh!rg-dh5(pz&}{by| cnwmpZb64<49>6[?/fpe*w`(oe:%{!xpovq+firf}Uo=181239V4*aun'xm#jb?.vp,suhsz&idyczPd0>4:74<]9%l~k }f.eo4+qu'~zex!lotlw[a7;078:7X> gsd-vc)`d9$|~"ynup,gjsi|Vn:S=<>;T2,cw`)zo%l`= xr.usjqt(kfexRj>_002?P6(o{l%~k!hl1,tv*qwf}x$ob{at^f2[7463\:$kh!rg-dh5(pz&}{by| cnwmpZb6W:8:7X> gsd-vc)`d9$|~"ynup,gjsi|Vn:S9<>;T2,cw`)zo%l`= xr.usjqt(kfexRj>_402?P6(o{l%~k!hl1,tv*qwf}x$ob{at^f2[3463\:$kh!rg-dh5(pz&}{by| cnwmpZb6W>8:7X> gsd-vc)`d9$|~"ynup,gjsi|Vn:S5<=;T2,cw`)zo%l`= xr.usjqt(kfexRj=<1<16>S7'nxm"h gm2-sw)pxg~y#naznu]g6979:;1^<"i}f/pe+bj7&~x${}`{r.alqkrXl;692?<4U1-dvc(un&mg<#y}/vrmpw)dg|dSi<33?01?P6(o{l%~k!hl1,tv*qwf}x$ob{at^f18185:2_;#j|i.sd,ci6){%||cz}/bmvjqYc:5?5>?5Z0.eqb+ta'nf;"z| wqlwv*eh}g~Th?29>308Q5)`zo$yj"ic0/uq+rvi|{%hcx`{_e0?3;453\:$kh!rg-dh5(pz&}{by| cnwmpZb54149=6[?/fpe*w`(oe:%{!xpovq+firf}Uo>R>=1:W3+bta&{l$ka>!ws-ttkru'je~byQk2^315>S7'nxm"h gm2-sw)pxg~y#naznu]g6Z4592_;#j|i.sd,ci6){%||cz}/bmvjqYc:V99=6[?/fpe*w`(oe:%{!xpovq+firf}Uo>R:=1:W3+bta&{l$ka>!ws-ttkru'je~byQk2^715>S7'nxm"h gm2-sw)pxg~y#naznu]g6Z0592_;#j|i.sd,ci6){%||cz}/bmvjqYc:V=9=6[?/fpe*w`(oe:%{!xpovq+firf}Uo>R6=4:W3+bta&{l$ka>!ws-ttkru'je~byQaou2344703\:$kh!rg-nah)cg|~Te1>1199V4*aun'xm#`kb/emvpZo;994:46[?/fpe*w`(elg$hb{{_h>25;7?3\:$kh!rg-nah)cg|~Te1?=>0:8Q5)`zo$yj"cjm.flqqYn4895=55Z0.eqb+ta'dof#iazt^k?518602_;#j|i.sd,i`k(lfSd2>5?3;?P6(o{l%~k!bel-gkprXa5;=2<64U1-dvc(un&gna"j`uu]j84199>1^<"i}f/pe+hcj'me~xRg31?34?P6(o{l%~k!bel-gkprXa585=:5Z0.eqb+ta'dof#iazt^k?7;703\:$kh!rg-nah)cg|~Te1:1169V4*aun'xm#`kb/emvpZo;=7;<7X> gsd-vc)jmd%ocxzPi=4=52=R8&myj#|i/lgn+air|Vc7;3?8;T2,cw`)zo%fi`!kotv\m9>99>1^<"i}f/pe+hcj'me~xRg39?35?P6(o{l%~k!bel-gkprXaV:::6[?/fpe*w`(elg$hb{{_h]252=R8&myj#|i/lgn+air|VcT==?8;T2,cw`)zo%fi`!kotv\mZ769>1^<"i}f/pe+hcj'me~xRgP1334?P6(o{l%~k!bel-gkprXaV;8=:5Z0.eqb+ta'dof#iazt^k\51703\:$kh!rg-nah)cg|~TeR?:169V4*aun'xm#`kb/emvpZoX9?;<7X> gsd-vc)jmd%ocxzPi^3453=R8&myj#|i/lgn+air|VcT><84U1-dvc(un&gna"j`uu]j[6713\:$kh!rg-nah)cg|~TeR:>6:W3+bta&{l$ahc dnww[lY29?1^<"i}f/pe+hcj'me~xRgP6048Q5)`zo$yj"cjm.flqqYnW>;=7X> gsd-vc)jmd%ocxzPi^:22>S7'nxm"h mdo,`jssW`U2=45Z0.eqb+ta'dof#iazt^ofi9699h1^<"i}f/pe+hcj'me~xRcjm=33:4g<]9%l~k }f.ofi*bh}}Ufi`2>1?3b?P6(o{l%~k!bel-gkprXelg7=?0>a:W3+bta&{l$ahc dnww[hcj4895=l5Z0.eqb+ta'dof#iazt^ofi97368k0Y=!hrg,qb*kbe&ndyyQbel>21;7f3\:$kh!rg-nah)cg|~Tahc317<2e>S7'nxm"h mdo,`jssWdof0<91189V4*aun'xm#`kb/emvpZkbe5;5=45Z0.eqb+ta'dof#iazt^ofi949901^<"i}f/pe+hcj'me~xRcjm=1=5<=R8&myj#|i/lgn+air|Vgna1:1189V4*aun'xm#`kb/emvpZkbe5?5=45Z0.eqb+ta'dof#iazt^ofi909901^<"i}f/pe+hcj'me~xRcjm=5=5<=R8&myj#|i/lgn+air|Vgna161189V4*aun'xm#`kb/emvpZkbe535;95Z0.eqb+ta'dof#jlb.f`nc+aeenk%bjklc/`nc*dkcVgnaRijndpbpjt(~hfbh#m|ts-qehjhgyQ;Q#|nm/p,w6Yig`dbx#|nm.fsvdk)ly9=t<6!r`o2f>S7'nxm"h mdo,phvXzhgT~iQjn0a8Q5)`zo$yj"cjm.vntZtfeVxoSh`>169V4*aun'xm#ob_sgdkprXmg;o7X> gsd-vc)u{}hgg"|k_sqw[duumn8;7X> gsd-vc)u{}hgg"|k_sqw[duumnUo=?>4U1-dvc(un&xxxobd/sf\vvrXizxnkRj=1b9V4*aun'xm#}{bmi,vaYu{}Uhc`l>d:W3+bta&{l$~~zmlj-q`Ztt|Vidao?>e:W3+bta&{l$~~zmlj-q`Ztt|Vxnk1>11d9V4*aun'xm#}{bmi,vaYu{}Uyij2>>0g8Q5)`zo$yj"||tcnh+wbXzz~T~hi32?3g?P6(o{l%~k!}su`oo*tcW{ySkh_13g?P6(o{l%~k!}su`oo*tcW{ySkh_03g?P6(o{l%~k!}su`oo*tcW{ySkh_33g?P6(o{l%~k!}su`oo*quW{ySl}}ef03?P6(o{l%~k!}su`oo*quW{ySl}}ef]g576<]9%l~k }f.pppgjl'~xT~~zParpfcZb59j1^<"i}f/pe+wusjea${Q}su]`khd6l2_;#j|i.sd,vvredb%|~R||t^alig76m2_;#j|i.sd,vvredb%|~R||t^pfc9699l1^<"i}f/pe+wusjea${Q}su]qab:668n0Y=!hrg,qb*tt|kf`#z|Prrv\v`aX88n0Y=!hrg,qb*tt|kf`#z|Prrv\v`aX9h1^_H\PAMKBWf=R[LXTZD]FBMG0?SED12\BIZQ[YQG0?RCF;2]NNn5XRHVF[HICMVKh7Z\FTD]NKACXJm1\^DZJ_VKGPMYFl2]YEYKPWHFWLZD6l2RB@D@W-YFA$5(6(Z^^N->!1!CPGLO23QEYOT84XRVOMG1gkefyShctx`8eikh{}Umyab9;cc`opvc3kkhgx~Pm`phaw5bf|hUhcx`{(6+g?agsiVidycz'8(d8`drfWje~by27:1<4?adn|lxy:6jfn)2*2>bnf!;";6jfn)33-2=cag":=$94dhl+57/03mce$<=&7:fjj-73!>1oec&>5(58`lh/9?#<7iga(05*3>bnf!;3%:5kio*2=,0$94dhl+65/03mce$??&7:fjj-45!>1oec&=3(58`lh/:=#<7iga(37*3>bnf!8=%:5kio*13,15'8;ekm,7?.>2nbb%=&7:fjj-57!>1oec&<1(58`lh/;;#<7iga(21*3>bnf!9?%:5kio*01,01oec2>3?58`lh;9=4<7iga<07=3>bnf5;=2:5kio>23;12nbb1?17:fjj9476>1oec2=1?58`lh;:;4<7iga<31=3>bnf58?2:5kio>11;1;08;ekm8719?2nbb1<7>69gmk:517<0hd`32?58`lh;;94<7iga<23=3>bnf5992:5kio>07;14=7iga<9<5?aoi404<7iazt)2*3>bh}}":%55kotv+55/?3me~x%?>)99gkpr/9;#37iazt)30-==cg|~#=9'7;emvp-72!11ocxz'17+;?air|!;<%:5kotv+6,1'8;emvp-2.?2ndyy&:)69gkpr/> =0hb{{(6+4?air|!2";6j`uu*:-2=cg|~7<364dnww846902ndyy2>1?:8`jss488546j`uu>27;>bh}}6:;7>18:flqq:6?7=0hb{{<0<4?air|585;6j`uu>0:2=cg|~78394dnww80803me~x1817:flqq:06>1ocxz38?58`jss40437hjff3ld`0=bey~r>k5iigm\c`hbzh~d~Rx9_0.#\ljnfq*HC_K/Gdlfvdrhz);9"=?v<6^0`hnY4>}e:4>o4fhdl[}jipV?:>u=9_3aooZ51|f;3 kgio^efj`tf|fxTz;Q>,OMMA)HHFL>;=6hffn]{hk~X=88s?;Q=cmi\73rh91&mekaPgdlfvdrhzV|=S<"tc^jbwZoi|Vigg0>#c^jbwZuu{}7; nQ}d^dqat;6$jUnbllce^pppZu~fj7: nQgar]q`Zbf|hUhcx`{=1.`[aoiW~coxe3<6-a\lduX{UomyoPcnwmp86+kVl~`aQil`ep[wusWkg1="l_hosh`kbf}keb`Ptxrf97*dW|ynShcmeeff`Ztbo4:'oRy}_gpfu87+kVxiRj`uu]qwq;6$jU~bik}fmmt[iip59&hSeo|_ntfvcjh4:'oR~}emmb`Zjf|ldhu0>#c^flqqYpam~c1<6#c^opcjhX~hf6=!mPre]gauro58:98!mPesplvZoiblieb`Ptxrf95*dWakxSx`kesdokr;7$jUcm~QnllmppZ`rde7; nQgar]qwq;6$jUomyoPcnwmpZqnl}b65!mPh`q\swYfkb7; nQzsd]fgf;7$jUhc`c`n^aokfm:8%iT{Qncj]okr;7$jUyhR~ats]tmaro58:'oR{|e^dtbqYci}kTob{at<2/gZnf{Vkgab}{_dosp|;7$jUyhRjnt`]`kphsW~coxe3>0-a\kscunee|Saax=1.`[rtXxg~ySzgkti?:(fYwzfmTi`~{y^vzt`;7$jU|~Rjnt`]`kphsW~coxe36,b]sv`jhimUyij}21-a\`jssW{yS{oc=1.`[mgtWmkmRm`uov>4)eXx{elSk{cl^vkv`uoWgolmykPv`n>15>+kV}ySikti?657*dWyxdkRkbpu{\pmtb{aUeijo{e^tbh83+kVzycjQjmqvz[qnumzbTm~}jru]uei;3$jUcm~Qyamkg95*dWyxdkRhzlm]wlwct`Vkxh|{_wco906>$jef|b`jnu]mehc:n`ldSubax^726}51W;iggR=9tn3;(fYqiecoSaax=1.`[utneVlbjbQ{yqg>144;?&hS}|`g^dvhiYsqyo6vugnUna}zv_ujqavn/: ;?7}|`g^gntqX|axne&<)068twi`Wlg{xtQ{hsgpl-2.9=1{~biPelrw}Zrozlyc$8'>4:rqkbYbey~rSyf}erj+2,733yxdkRkbpu{\pmtb{a"<%<:4psmd[`kw|pUdk|h):*51=wzfmTi`~{y^vkv`uo 0#::6~}of]fiur~W}byi~f39;2=5g=wzfmTi`~{y^vkv`uoWhyxiz'0(3a?uthoVof|ywPtipfwmYf{zoyx%?&1c9svjaXmdzuRzgrdqk[dutm{~#>$?m;qplcZcjx}sTxe|jsi]bwvcu|!9"=o5rne\ahvsqV~c~h}g_`qpawr/< ;i7}|`g^gntqX|axneQnsrgqp-3.9k1{~biPelrw}ZrozlycSl}|esv+2,7e3yxdkRkbpu{\pmtb{aUj~k}t)5*5g=wzfmTi`~{y^vkv`uoWhyxiz'8(3a?uthoVof|ywPtipfwmYf{zoyx%7&1e9svjaXmdzuRzgrdqk[dutm{~757>11c9svjaXmdzuRzgrdqk[kc`i}o#<$?m;qplcZcjx}sTxe|jsi]mabgsm!;"=o5rne\ahvsqV~c~h}g_ogdeqc/: ;i7}|`g^gntqX|axneQaefcwa-5.9k1{~biPelrw}ZrozlycSckhaug+0,7e3yxdkRkbpu{\pmtb{aUeijo{e)7*5g=wzfmTi`~{y^vkv`uoWgolmyk'6(3a?uthoVof|ywPtipfwmYimnki%9&1c9svjaXmdzuRzgrdqk[kc`i}o#4$?m;qplcZcjx}sTxe|jsi]mabgsm!3"=i5rne\ahvsqV~c~h}g_ogdeqc;13:556~}of]eqij6;2zycjQiumn\pmtb{a";%<=4psmd[cskdV~c~h}g(0+27>vugnUmyabPtipfwm.5!890|ah_gwohZrozlyc$>'>3:rqkbYa}efTxe|jsi*7-45a:rqkbYa}efTxe|jsi]bwvcu|!8"=l5rne\bpjkW}byi~fParqfvq.4!8k0|ah_gwohZrozlycSl}|esv+0,7f3yxdkRhzlm]wlwct`Vkxh|{(4+2e>vugnUmyabPtipfwmYf{zoyx%8&1`9svjaXn|fgSyf}erj\evubz}"<%vugnUmyabPtipfwmYimnki%<&1`9svjaXn|fgSyf}erj\j`af|l"8%$??;sf\`drfWje~by&<)028vaYci}kTob{at)6*55=ulVnjxlQlotlw,0/682xoSio{a^alqkr/> ;;7jPd`vb[firf}"<%<>4re]geqgXkfex%6&119q`Zbf|hUhcx`{(8+24>tcWmkmRm`uov?4;753{nThlzn_bmvjq:>294>7jPeo48vaYu{}90~~z8;r`jp`tu<2yyy:4tswf=>sillxm`by:;wcoma0<{Ujof84ws]`hn773~xThlzn_bmvjq.7!8:0{Qkauc\gjsi|!;"==5xr^fbpdYdg|d$?'>0:uq[agsiVidycz'3(33?rtXlh~jSnaznu*7-46<{UomyoPcnwmp-3.991|~Rjnt`]`kphs ?#:<6y}_ecweZeh}g~#;$??;vp\`drfWje~by&7)008swYci}kTob{at=:94;3<{Unb;5xr^pppxFGxh<>7MNw1;D90?7|[=l188;57;306g0dk398:ljtn2f6>4=i;m<1:6*107290:??l9cb8073gb3Z>o698?:18277d1kj08?;oi;e66hn0(>m9:00a?S5c<38py<=<:09v562=82w/=:75199a00>=839o6>47;'5=g=<<20(>j=:574?l2e83:17d:l4;29?j22k3:17b::6;29?l2e13:17d:m2;29?j2413:1(<9m:56b?k70i3:07b:<8;29 41e2=>j7c?8a;38?j24?3:1(<9m:56b?k70i3807b:<6;29 41e2=>j7c?8a;18?j24=3:1(<9m:56b?k70i3>07b:<4;29 41e2=>j7c?8a;78?j24;3:1(<9m:56b?k70i3<07b:<2;29 41e2=>j7c?8a;58?j2393:1(<9m:56b?k70i3207b:;0;29 41e2=>j7c?8a;;8?j24n3:1(<9m:56b?k70i3k07b:j7c?8a;`8?j24l3:1(<9m:56b?k70i3i07b:j7c?8a;f8?j24j3:1(<9m:56b?k70i3o07b:j7c?8a;d8?j2493:1(<9m:56b?k70i3;;76a;3183>!70j3>?m6`>7`825>=n<9>1<7*>7c8762=i9>k1<65f41194?"6?k0?>:5a16c95>=n<981<7*>7c8762=i9>k1>65f41394?"6?k0?>:5a16c97>=n<9:1<7*>7c8762=i9>k1865f3gd94?"6?k0?>:5a16c91>=n;on1<7*>7c8762=i9>k1:65f3ga94?"6?k0?>:5a16c93>=n;oh1<7*>7c8762=i9>k1465f3gc94?"6?k0?>:5a16c9=>=n;o31<7*>7c8762=i9>k1m65f3g:94?"6?k0?>:5a16c9f>=n;o=1<7*>7c8762=i9>k1o65f3g494?"6?k0?>:5a16c9`>=n;o?1<7*>7c8762=i9>k1i65f3g694?"6?k0?>:5a16c9b>=n;o81<7*>7c8762=i9>k1==54i2d2>5<#9>h18?94n05b>47<3`9m<7>5$05a>1403g;1e=:o51598m6cc290/=:l54358j41f28?07d=jc;29 41e2=8<7c?8a;35?>o4mk0;6)?8b;613>h6?h0:;65f3dc94?"6?k0?>:5a16c95==b:9j05>=83.:;o4;269m52g=9j10e9>8:18'52d=<;=0b<9n:0f8?l27>3:1(<9m:504?k70i3;n76g;0483>!70j3>9;6`>7`82b>=n;oo1<7*>7c8762=i9>k1>=54i2d0>5<#9>h18?94n05b>77<3`9n47>5$05a>1403g;tH2a7?!7?i39h96a>7983>>{el10;6<4?:1yK7f2<,82j6i64oe594?=zj=>1<7o::00g>40>sA9h86T;5;35d<>2k09m7<8:3:96<8`871g=#<10?945+4d871d=#9>>1=:94i554>5<#9>h18:64n05b>5=5<#9>h18:64n05b>7=54i550>5<#9>h18:64n05b>1=5<#9>h18:64n05b>3=5<#9>h18:64n05b>==5<5<5<#9>h18;j4n05b>5=5<#9>h18;j4n05b>7=54i54;>5<#9>h18;j4n05b>1=5<#9>h18;j4n05b>3=6=4+16`903b5<#9>h18;j4n05b>==5<5<#9>h185=4n05b>5=5<#9>h185=4n05b>7=54i55f>5<#9>h185=4n05b>1=5<#9>h185=4n05b>3=5<#9>h185=4n05b>==5<5<#9>h1?h;4n05b>4=5<#9>h1?h;4n05b>6=5<#9>h1?h;4n05b>0=5<#9>h1?h;4n05b>2=5<5<#9>h185k4n05b>5=5<#9>h185k4n05b>7=54i5::>5<#9>h185k4n05b>1=5<#9>h185k4n05b>3=5<#9>h185k4n05b>==5<5<5<#9>h18464n05b>4=6=4+16`90<>5<#9>h18464n05b>6=5<#9>h18464n05b>0=5<#9>h18464n05b>2=5<#9>h18l<4n05b>5=5<#9>h18l<4n05b>7=54i5;g>5<#9>h18l<4n05b>1=5<#9>h18l<4n05b>3=5<#9>h18l<4n05b>==5<5<5<5<#9>h189o4n05b>5=5<#9>h189o4n05b>7=54o516>5<#9>h189o4n05b>1=5<#9>h189o4n05b>3=5<#9>h189o4n05b>==;6=4+16`901g5<#9>h189o4n05b>d=5<#9>h189o4n05b>f=5<#9>h189o4n05b>`=5<#9>h189o4n05b>46<3f>8<7>5$05a>12f3g;;:k741<72-;4?:%34f?25?2d:;l4>;:k747<72-;1e=:o51098m6`7290/=:l54358j41f28807d=jf;29 41e2=8<7c?8a;30?>o4ml0;6)?8b;613>h6?h0:865f3df94?"6?k0?>:5a16c950=8:9j7`?=83.:;o4;269m52g=9010e9>n:18'52d=<;=0b<9n:0c8?l2713:1(<9m:504?k70i3;i76g;0983>!70j3>9;6`>7`82g>=n<9=1<7*>7c8762=i9>k1=i54i525>5<#9>h18?94n05b>4c<3`>;97>5$05a>1403g;1e=:o52098m6c?290/=:l54358j41f2;807d=j7;29 41e2=8<7c?8a;00?>o4l00;66a;ae83>!70j3>jj6`>7`83?>i3ij0;6)?8b;6bb>h6?h0:76a;ac83>!70j3>jj6`>7`81?>i3ih0;6)?8b;6bb>h6?h0876a;a883>!70j3>jj6`>7`87?>i3i10;6)?8b;6bb>h6?h0>76a;a683>!70j3>jj6`>7`85?>i3i?0;6)?8b;6bb>h6?h0<76a;a483>!70j3>jj6`>7`8;?>i3i=0;6)?8b;6bb>h6?h0276a;c383>!70j3>h?6`>7`83?>i3k80;6)?8b;6`7>h6?h0:76a;c183>!70j3>h?6`>7`81?>i3jo0;6)?8b;6`7>h6?h0876a;bd83>!70j3>h?6`>7`87?>i3jm0;6)?8b;6`7>h6?h0>76a;bb83>!70j3>h?6`>7`85?>i3jk0;6)?8b;6`7>h6?h0<76a;b`83>!70j3>h?6`>7`8;?>i3>;0;66g;5e83>>i4m?0;66g;a283>>i3j?0;66l4<729q/=5o5d99K7f`<@:i?7bj8:188yg5c93:1=7>50z&21<729q/=5o5d59K7f`<@:i?7)k::79j03<722c><7>5;h34g?6=3f;5;|`052<72=0;6=u+19c9`7=O;jl0D>m;;%g6>7=n3:187>50z&25;h6`>5<?54c78 `3=:2c?:7>5;h73>5<8`8g5>N4ko1C?n:4H518 4562=h>7)k::39j03<722c><7>5;n34`?6=3th8n=4?:283>5}#91k1h<5G3bd8L6e33A>87)?<1;6a1>"b=380e9850;9j15<722e:;i4?::a7gg=83?1<7>t$0:b>a3<@:im7E=l4:J77>"6;80?n85f4783>>o3?3:17d;?:188m41d2900c<9k:188yg5ej3:1?7>50z&27=n0<729q/=5o5d49K7f`<@:i?7E:<;%305?2e=2c?:7>5;h64>5<n1<75rb2`:>5<3290;w)?7a;f7?M5dn2B8o95+e485?l212900e8>50;9j52e=831d=:j50;9~f6d?290?6=4?{%3;e?b33A9hj6F=6=44i4294?=n9>i1<75`16f94?=zj:h<6=4;:183!7?i3n?7E=lf:J0g1=#m<0=7d:9:188m06=831b=:m50;9l52b=831vn>m=:187>5<7s-;3m7j;;I1`b>N4k=1/i849;h65>5<n1<75rb2a2>5<3290;w)?7a;f7?M5dn2B8o95+e485?l212900e8>50;9j52e=831d=:j50;9~f4gc290?6=4?{%3;e?b53A9hj6F=6=44i5a94?=n=90;66a>7e83>>{e9hi1<7:50;2x 4>f2m80D>mi;I1`0>"b=380e9850;9j0f<722c><7>5;n34`?6=3th:mo4?:583>5}#91k1h?5G3bd8L6e33-o>6?5f4783>>o3k3:17d;?:188k41c2900qo?na;290?6=8r.:4l4k2:J0gc=O;j>0(h;52:k72?6=3`>h6=44i4294?=h9>n1<75rb0c:>5<3290;w)?7a;f1?M5dn2B8o95+e481?l212900e9m50;9j15<722e:;i4?::a5d>=83>1<7>t$0:b>a4<@:im7E=l4:&f1?4>o283:17b?8d;29?xd6i>0;694?:1y'5=g=l;1C?nh4H2a7?!c22;1b8;4?::k7g?6=3`?;6=44o05g>5<54;294~"60h0o>6F6g;6;29?l2d2900e8>50;9l52b=831vn5<7s-;3m7j=;I1`b>N4k=1/i84=;h65>5<>i6?m0;66sm20694?2=83:p(<6n:e08L6ea3A9h86*j5;08m10=831b8n4?::k64?6=3f;5;|`156<72=0;6=u+19c9`7=O;jl0D>m;;%g6>7=n50z&25;h6`>5<<>50;694?6|,82j6i<4H2ae?M5d<2.n97<4i5494?=n1<729q/=5o5d39K7f`<@:i?7)k::39j03<722c?o7>5;h73>5<8`8g6>N4ko1C?n:4$d796>o3>3:17d:l:188m06=831d=:j50;9~f76c290?6=4?{%3;e?b53A9hj6F=6=44i5a94?=n=90;66a>7e83>>{e:9i1<7:50;2x 4>f2m80D>mi;I1`0>"b=380e9850;9j0f<722c><7>5;n34`?6=3th99n4?:583>5}#91k1h?5G3bd8L6e33-o>6?5f4783>>o3k3:17d;?:188k41c2900qo<:b;290?6=8r.:4l4k2:J0gc=O;j>0(h;52:k72?6=3`>h6=44i4294?=h9>n1<75rb37b>5<3290;w)?7a;f1?M5dn2B8o95+e481?l212900e9m50;9j15<722e:;i4?::a60?=83>1<7>t$0:b>a4<@:im7E=l4:&f1?4>o283:17b?8d;29?xd5=10;694?:1y'5=g=l;1C?nh4H2a7?!c22;1b8;4?::k7g?6=3`?;6=44o05g>5<;7>54;294~"60h0o>6F6g;6;29?l2d2900e8>50;9l52b=831vn?;9:187>5<7s-;3m7j=;I1`b>N4k=1/i84=;h65>5<>i6?m0;66sm24794?2=83:p(<6n:e08L6ea3A9h86*j5;08m10=831b8n4?::k64?6=3f;5;|`111<72=0;6=u+19c9`7=O;jl0D>m;;%g6>7=n50z&25;h6`>5<f783>1<729q/=5o5d39K7f`<@:i?7)k::39j03<722c?o7>5;h73>5<8`8g6>N4ko1C?n:4$d796>o3>3:17d:l:188m06=831d=:j50;9~f4`3290?6=4?{%3;e?b53A9hj6F=6=44i5a94?=n=90;66a>7e83>>{e9o91<7:50;2x 4>f2m80D>mi;I1`0>"b=380e9850;9j0f<722c><7>5;n34`?6=3th:j?4?:583>5}#91k1h?5G3bd8L6e33-o>6?5f4783>>o3k3:17d;?:188k41c2900qo?i1;290?6=8r.:4l4k2:J0gc=O;j>0(h;52:k72?6=3`>h6=44i4294?=h9>n1<75rb36b>5<3290;w)?7a;f1?M5dn2B8o95G429'567=h6=44i4294?=h9>n1<75rb36:>5<3290;w)?7a;f1?M5dn2B8o95G429'567=h6=44i4294?=h9>n1<75rb36;>5<3290;w)?7a;f1?M5dn2B8o95G429'567=h6=44i4294?=h9>n1<75rb364>5<3290;w)?7a;f1?M5dn2B8o95G429'567=h6=44i4294?=h9>n1<75rb365>5<3290;w)?7a;f1?M5dn2B8o95G429'567=h6=44i4294?=h9>n1<75rb366>5<3290;w)?7a;f1?M5dn2B8o95G429'567=h6=44i4294?=h9>n1<75rb367>5<3290;w)?7a;f1?M5dn2B8o95G429'567=h6=44i4294?=h9>n1<75rb360>5<3290;w)?7a;f1?M5dn2B8o95G429'567=h6=44i4294?=h9>n1<75rb361>5<3290;w)?7a;f1?M5dn2B8o95G429'567=h6=44i4294?=h9>n1<75rb0g4>5<3290;w)?7a;f1?M5dn2B8o95G429'567=h6=44i4294?=h9>n1<75rb0g5>5<3290;w)?7a;f1?M5dn2B8o95G429'567=h6=44i4294?=h9>n1<75rb0g6>5<3290;w)?7a;f1?M5dn2B8o95G429'567=h6=44i4294?=h9>n1<75rb0g7>5<3290;w)?7a;f1?M5dn2B8o95G429'567=h6=44i4294?=h9>n1<75rb0g0>5<3290;w)?7a;f1?M5dn2B8o95G429'567=h6=44i4294?=h9>n1<75rb0g1>5<3290;w)?7a;f1?M5dn2B8o95G429'567=h6=44i4294?=h9>n1<75rb0g2>5<3290;w)?7a;f1?M5dn2B8o95G429'567=h6=44i4294?=h9>n1<75rb0g3>5<3290;w)?7a;f1?M5dn2B8o95G429'567=h6=44i4294?=h9>n1<75rb0fe>5<3290;w)?7a;f1?M5dn2B8o95G429'567=h6=44i4294?=h9>n1<75rb0ff>5<3290;w)?7a;f1?M5dn2B8o95G429'567=h6=44i4294?=h9>n1<75rb0f0>5<3290;w)?7a;f1?M5dn2B8o95+e481?l212900e9m50;9j15<722e:;i4?::a5a4=83>1<7>t$0:b>a4<@:im7E=l4:&f1?4>o283:17b?8d;29?xd6l80;694?:1y'5=g=l;1C?nh4H2a7?!c22;1b8;4?::k7g?6=3`?;6=44o05g>5<54;294~"60h0o>6F6g;6;29?l2d2900e8>50;9l52b=831vn5<7s-;3m7j=;I1`b>N4k=1/i84=;h65>5<>i6?m0;66sm1bg94?2=83:p(<6n:e08L6ea3A9h86*j5;08m10=831b8n4?::k64?6=3f;5;|`2ga<72=0;6=u+19c9`7=O;jl0D>m;;%g6>7=n50z&25;h6`>5<1<729q/=5o5d39K7f`<@:i?7)k::39j03<722c?o7>5;h73>5<8`8g6>N4ko1C?n:4$d796>o3>3:17d:l:188m06=831d=:j50;9~f751290?6=4?{%3;e?b53A9hj6F=6=44i5a94?=n=90;66a>7e83>>{e::?1<7:50;2x 4>f2m80D>mi;I1`0>"b=380e9850;9j0f<722c><7>5;n34`?6=3th9?94?:583>5}#91k1h?5G3bd8L6e33-o>6?5f4783>>o3k3:17d;?:188k41c2900qo<<3;290?6=8r.:4l4k2:J0gc=O;j>0(h;52:k72?6=3`>h6=44i4294?=h9>n1<75rb311>5<3290;w)?7a;f1?M5dn2B8o95+e481?l212900e9m50;9j15<722e:;i4?::a667=83>1<7>t$0:b>a4<@:im7E=l4:&f1?4>o283:17b?8d;29?xd5;90;694?:1y'5=g=l;1C?nh4H2a7?!c22;1b8;4?::k7g?6=3`?;6=44o05g>5<55;294~"60h0o?6F6g;6;29?l202900e9m50;9j15<722e:;i4?::a6a1=83?1<7>t$0:b>a5<@:im7E=l4:&f1?4>o3k3:17d;?:188k41c2900qo0(h;52:k72?6=3`><6=44i5a94?=n=90;66a>7e83>>{e:m>1<7;50;2x 4>f2m90D>mi;I1`0>"b=380e9850;9j02<722c?o7>5;h73>5<8`8g7>N4ko1C?n:4$d796>o3>3:17d:8:188m1e=831b9=4?::m23a<722wi>i=50;794?6|,82j6i=4H2ae?M5d<2.n97<4i5494?=n<>0;66g;c;29?l372900c<9k:188yg4c:3:197>50z&25;h64>5<>i6?m0;66sm2e294?3=83:p(<6n:e18L6ea3A9h86*j5;08m10=831b8:4?::k7g?6=3`?;6=44o05g>5<55;294~"60h0o96F50;9j52e=831d=:j50;9~f7b6290>6=4?{%3;e?b43A9hj6F=6=44i5594?=n6<729q/=5o53bg8L6ea3A9h86g;9;29?l7503:17b?86;29?xd5k;0;6>4?:1y'5=g=;jo0D>mi;I1`0>o313:17d?=8;29?j70>3:17pl=b983>1<729q/=5o51208L6ea3A9h86g;9;29?l352900e<6<:188k4112900qo3:187>50z&22900e8<50;9j5=5=831d=:850;9~f7e729086=4?{%3;e?5dm2B8ok5G3b68m1?=831b=?650;9l520=831vn?l;:187>5<7s-;3m7?<2:J0gc=O;j>0e9750;9j17<722c:4>4?::m233<722wi>oh50;194?6|,82j6>mj;I1`b>N4k=1b844?::k26=<722e:;;4?::a6g4=83>1<7>t$0:b>4553A9hj6F>7>5;h3;7?6=3f;<:7>5;|`1f`<72:0;6=u+19c97fc<@:im7E=l4:k7=?6=3`;947>5;n342?6=3th9n=4?:583>5}#91k1=><4H2ae?M5d<2c?57>5;h71>5<5<53;294~"60h08oh5G3bd8L6e33`>26=44i00;>5<8`8277=O;jl0D>m;;h6:>5<<1<75rb3``>5<4290;w)?7a;1`a>N4ko1C?n:4i5;94?=n9;21<75`16494?=zj;kh6=4;:183!7?i3;8>6F>o60:0;66a>7783>>{e:kh1<7=50;2x 4>f2:in7E=lf:J0g1=n<00;66g>2983>>i6??0;66sm2`c94?2=83:p(<6n:011?M5dn2B8o95f4883>>o2:3:17d?73;29?j70>3:17pl=b`83>6<729q/=5o53bg8L6ea3A9h86g;9;29?l7503:17b?86;29?xd5i10;694?:1y'5=g=9:80D>mi;I1`0>o313:17d;=:188m4>42900c<99:188yg4bk3:197>50z&25;h64>5<>i6?m0;66sm2d`94?3=83:p(<6n:e18L6ea3A9h86*j5;08m10=831b8:4?::k7g?6=3`?;6=44o05g>5<55;294~"60h0o?6F6g;6;29?l202900e9m50;9j15<722e:;i4?::a6`?=83?1<7>t$0:b>a5<@:im7E=l4:&f1?4>o3k3:17d;?:188k41c2900qo0(h;52:k72?6=3`><6=44i5a94?=n=90;66a>7e83>>{e:l=1<7;50;2x 4>f2m90D>mi;I1`0>"b=380e9850;9j02<722c?o7>5;h73>5<8`8g7>N4ko1C?n:4$d796>o3>3:17d:8:188m1e=831b9=4?::m23a<722wi>h;50;794?6|,82j6i=4H2ae?M5d<2.n97<4i5494?=n<>0;66g;c;29?l372900c<9k:188yg4b<3:197>50z&25;h64>5<>i6?m0;66sm2d194?3=83:p(<6n:e18L6ea3A9h86*j5;08m10=831b8:4?::k7g?6=3`?;6=44o05g>5<54;294~"60h0o86F0(h;56:k72?6=3`?;6=44i05`>5<8`8g6>N4ko1C?n:4$d796>o3>3:17d:l:188m06=831d=:j50;9~f70>290?6=4?{%3;e?b53A9hj6F=6=44i5a94?=n=90;66a>7e83>>{e:1o1<7:50;2x 4>f28997E=lf:J0g1=n<00;66g:2;29?l7?;3:17b?86;29?xd50m0;694?:1y'5=g=9:80D>mi;I1`0>o313:17d;=:188m4>42900c<99:188yg4?k3:187>50z&22900e8<50;9j5=5=831d=:850;9~f7>e290?6=4?{%3;e?74:2B8ok5G3b68m1?=831b9?4?::k2<6<722e:;;4?::a6=g=83>1<7>t$0:b>4553A9hj6F>7>5;h3;7?6=3f;<:7>5;|`13g<72=0;6=u+19c9564<@:im7E=l4:k7=?6=3`?96=44i0:0>5<8`8277=O;jl0D>m;;h6:>5<<1<75rb35:>5<3290;w)?7a;306>N4ko1C?n:4i5;94?=n=;0;66g>8283>>i6??0;66sm26:94?2=83:p(<6n:011?M5dn2B8o95f4883>>o2:3:17d?73;29?j70>3:17pl=7683>1<729q/=5o51208L6ea3A9h86g;9;29?l352900e<6<:188k4112900qo=?9;290?6=8r.:4l4>339K7f`<@:i?7d:6:188m04=831b=5=50;9l520=831vn>>7:187>5<7s-;3m7?<2:J0gc=O;j>0e9750;9j17<722c:4>4?::m233<722wi?=950;694?6|,82j6<==;I1`b>N4k=1b844?::k66?6=3`;3?7>5;n342?6=3th8<;4?:583>5}#91k1=><4H2ae?M5d<2c?57>5;h71>5<5<54;294~"60h0:??5G3bd8L6e33`>26=44i4094?=n9191<75`16494?=zj;l=6=4;:183!7?i3;8>6F>o60:0;66a>7783>>{e:o?1<7:50;2x 4>f28997E=lf:J0g1=n<00;66g:2;29?l7?;3:17b?86;29?xd5n=0;694?:1y'5=g=9:80D>mi;I1`0>o313:17d;=:188m4>42900c<99:188yg4a;3:187>50z&22900e8<50;9j5=5=831d=:850;9~f7`5290?6=4?{%3;e?74:2B8ok5G3b68m1?=831b9?4?::k2<6<722e:;;4?::a70d=83?1<7>t$0:b>a5<@:im7E=l4:&f1?4>o3k3:17d;?:188k41c2900qo=:9;291?6=8r.:4l4k5:J0gc=O;j>0(h;56:k72?6=3`><6=44i4294?=n9>i1<75`16f94?=zj:?j6=4::183!7?i3n87E=lf:J0g1=#m<097d:9:188m11=831b8n4?::k64?6=3f;5;|`01f<72<0;6=u+19c9`6=O;jl0D>m;;%g6>7=n50;9l52b=831vn>;k:186>5<7s-;3m7j<;I1`b>N4k=1/i84=;h65>5<>o283:17b?8d;29?xd4=l0;684?:1y'5=g=l:1C?nh4H2a7?!c22;1b8;4?::k73?6=3`>h6=44i4294?=h9>n1<75rb27e>5<2290;w)?7a;f0?M5dn2B8o95+e481?l212900e9950;9j0f<722c><7>5;n34`?6=3th8:=4?:483>5}#91k1h>5G3bd8L6e33-o>6?5f4783>>o3?3:17d:l:188m06=831d=:j50;9~f606290>6=4?{%3;e?b43A9hj6F=6=44i5594?=n0<729q/=5o5d29K7f`<@:i?7)k::39j03<722c?;7>5;h6`>5<n6=4::183!7?i3n87E=lf:J0g1=#m<097d:9:188m11=831b8n4?::k64?6=3f;5;|`00f<72<0;6=u+19c9`6=O;jl0D>m;;%g6>7=n50;9l52b=831vn>:m:186>5<7s-;3m7j<;I1`b>N4k=1/i84=;h65>5<>o283:17b?8d;29?xd4h6=44i4294?=h9>n1<75rb26b>5<2290;w)?7a;f0?M5dn2B8o95+e481?l212900e9950;9j0f<722c><7>5;n34`?6=3th8844?:483>5}#91k1h>5G3bd8L6e33-o>6?5f4783>>o3?3:17d:l:188m06=831d=:j50;9~f620290>6=4?{%3;e?b43A9hj6F=6=44i5594?=n0<729q/=5o5d49K7f`<@:i?7)k::79j03<722c?;7>5;h73>5<5<53;294~"60h08oh5G3bd8L6e33`>26=44i00;>5<8`80g`=O;jl0D>m;;h6:>5<5<7>54;294~"60h0:??5G3bd8L6e33`>26=44i4094?=n9191<75`16494?=zj:9j6=4<:183!7?i39hi6F<1<75rb213>5<3290;w)?7a;306>N4ko1C?n:4i5;94?=n=;0;66g>8283>>i6??0;66sm32;94?5=83:p(<6n:2af?M5dn2B8o95f4883>>o6:10;66a>7783>>{e;;o1<7:50;2x 4>f28997E=lf:J0g1=n<00;66g:2;29?l7?;3:17b?86;29?xd4;10;6>4?:1y'5=g=;jo0D>mi;I1`0>o313:17d?=8;29?j70>3:17pl<2b83>1<729q/=5o51208L6ea3A9h86g;9;29?l352900e<6<:188k4112900qo=<7;297?6=8r.:4l450z&22900e8<50;9j5=5=831d=:850;9~f65129086=4?{%3;e?5dm2B8ok5G3b68m1?=831b=?650;9l520=831vn><7:187>5<7s-;3m7?<2:J0gc=O;j>0e9750;9j17<722c:4>4?::m233<722wi?>;50;194?6|,82j6>mj;I1`b>N4k=1b844?::k26=<722e:;;4?::a770=83>1<7>t$0:b>4553A9hj6F>7>5;h3;7?6=3f;<:7>5;|`071<72:0;6=u+19c97fc<@:im7E=l4:k7=?6=3`;947>5;n342?6=3th8>94?:583>5}#91k1=><4H2ae?M5d<2c?57>5;h71>5<5<55;294~"60h0o?6F6g;6;29?l202900e9m50;9j15<722e:;i4?::a724=83?1<7>t$0:b>a5<@:im7E=l4:&f1?4>o3k3:17d;?:188k41c2900qo=81;291?6=8r.:4l4k3:J0gc=O;j>0(h;52:k72?6=3`><6=44i5a94?=n=90;66a>7e83>>{e;>:1<7;50;2x 4>f2m90D>mi;I1`0>"b=380e9850;9j02<722c?o7>5;h73>5<8`8g7>N4ko1C?n:4$d796>o3>3:17d:8:188m1e=831b9=4?::m23a<722wi?;k50;794?6|,82j6i=4H2ae?M5d<2.n97<4i5494?=n<>0;66g;c;29?l372900c<9k:188yg51l3:197>50z&25;h64>5<>i6?m0;66sm37a94?3=83:p(<6n:e18L6ea3A9h86*j5;08m10=831b8:4?::k7g?6=3`?;6=44o05g>5<55;294~"60h0o?6F6g;6;29?l202900e9m50;9j15<722e:;i4?::a7<6=83?1<7>t$0:b>a0<@:im7E=l4:&f1?4>o283:17d?8e;29?j70l3:17pl<8g83>0<729q/=5o5d79K7f`<@:i?7)k::39j03<722c?;7>5;h73>5<5<55;294~"60h0o:6F6g;6;29?l202900e8>50;9j52c=831d=:j50;9~f6>c290>6=4?{%3;e?b13A9hj6F=6=44i5594?=n=90;66g>7d83>>i6?m0;66sm39a94?3=83:p(<6n:e48L6ea3A9h86*j5;08m10=831b8:4?::k64?6=3`;5;n34`?6=3th84o4?:483>5}#91k1h;5G3bd8L6e33-o>6?5f4783>>o3?3:17d;?:188m41b2900c<9k:188yg5?i3:197>50z&22B8ok5G3b68 `3=:2c?:7>5;h64>5<n1<75rb2::>5<2290;w)?7a;f5?M5dn2B8o95+e481?l212900e9950;9j15<722c:;h4?::m23a<722wi?4650;794?6|,82j6i84H2ae?M5d<2.n97<4i5494?=n<>0;66g:0;29?l70m3:17b?8d;29?xd41>0;684?:1y'5=g=l?1C?nh4H2a7?!c22;1b8;4?::k73?6=3`?;6=44i05f>5<8`8g2>N4ko1C?n:4$d796>o3>3:17d:8:188m06=831b=:k50;9l52b=831vn>7::186>5<7s-;3m7j9;I1`b>N4k=1/i84=;h65>5<>o6?l0;66a>7e83>>{e;0>1<7;50;2x 4>f2m<0D>mi;I1`0>"b=380e9850;9j02<722c><7>5;h34a?6=3f;5;|`0=6<72<0;6=u+19c9`3=O;jl0D>m;;%g6>7=n0(h;52:k72?6=3`><6=44i4294?=n9>o1<75`16f94?=zj:3:6=4::183!7?i3n=7E=lf:J0g1=#m<097d:9:188m11=831b9=4?::k23`<722e:;i4?::a7=>=83?1<7>t$0:b>a0<@:im7E=l4:&f1?4>o283:17d?8e;29?j70l3:17pl<8683>0<729q/=5o5d79K7f`<@:i?7)k::39j03<722c?;7>5;h73>5<5<53;294~"60h0:>i5G3bd8L6e33-o>6<74ie;94?=nlh0;66a>7783>>{e;k91<7=50;2x 4>f288o7E=lf:J0g1=#m<0:56gk9;29?lbf2900c<99:188yg46>3:1?7>50z&2t$0:b>44c3A9hj6F5;hfb>5<8`826a=O;jl0D>m;;%g6>4b>i6??0;66sm18c94?5=83:p(<6n:00g?M5dn2B8o95+e482`>oc13:17djn:188k4112900qo?69;297?6=8r.:4l4>2e9K7f`<@:i?7)k::0f8ma?=831bhl4?::m233<722wi=4650;194?6|,82j6<N4k=1/i84>d:kg=?6=3`nj6=44o055>5<53;294~"60h0:>i5G3bd8L6e33-o>67783>>{e90<1<7=50;2x 4>f288o7E=lf:J0g1=#m<0:h6gk9;29?lbf2900c<99:188yg7>=3:1?7>50z&2t$0:b>44c3A9hj6F5;hfb>5<8`826a=O;jl0D>m;;%g6>4b>i6??0;66sm18094?5=83:p(<6n:00g?M5dn2B8o95+e482`>oc13:17djn:188k4112900qo?61;297?6=8r.:4l4>2e9K7f`<@:i?7)k::0f8ma?=831bhl4?::m233<722wi=4>50;194?6|,82j6<N4k=1/i84>d:kg=?6=3`nj6=44o055>5<53;294~"60h0:>i5G3bd8L6e33-o>67783>>{e91o1<7=50;2x 4>f288o7E=lf:J0g1=#m<0:h6gk9;29?lbf2900c<99:188yg7?l3:1?7>50z&2t$0:b>44c3A9hj6F5;hfb>5<8`826a=O;jl0D>m;;%g6>4b>i6??0;66sm27g94?2=83:p(<6n:00f?M5dn2B8o95+e48``>oc13:17djn:188mad=831d=:850;9~f77?290?6=4?{%3;e?75m2B8ok5G3b68 `3=:=1bh44?::kge?6=3`ni6=44o055>5<54;294~"60h0:>h5G3bd8L6e33-o>6?:4ie;94?=nlh0;66gkb;29?j70>3:17pl=6b83>0<729q/=5o513d8L6ea3A9h86*j5;3b?lb>2900eio50;9j`g<722coo7>5;n342?6=3th9=l4?:483>5}#91k1=?h4H2ae?M5d<2.n97?i;hf:>5<>ock3:17b?86;29?xd6j:0;684?:1y'5=g=9;l0D>mi;I1`0>"b=3;m7dj6:188mag=831bho4?::kgg?6=3f;<:7>5;|`137<72<0;6=u+19c957`<@:im7E=l4:&f1?463`n26=44iec94?=nlk0;66gkc;29?j70>3:17pl<1`83>6<729q/=5o513f8L6ea3A9h86*j5;33?lb>2900eio50;9l520=831vn?89:187>5<7s-;3m7?=e:J0gc=O;j>0(h;52b9j`<<722com7>5;hfa>5<8`826a=O;jl0D>m;;%g6>4b>i6??0;66sm1c794?5=83:p(<6n:00g?M5dn2B8o95+e482`>oc13:17djn:188k4112900qo<>e;290?6=8r.:4l4>2d9K7f`<@:i?7)k::368ma?=831bhl4?::kgf?6=3f;<:7>5;|`2f2<72=0;6=u+19c957c<@:im7E=l4:&f1?433`n26=44iec94?=nlk0;66a>7783>>{e:;:1<7;50;2x 4>f288m7E=lf:J0g1=#m<0:j6gk9;29?lbf2900eil50;9j`f<722e:;;4?::a5g?=83?1<7>t$0:b>44a3A9hj6F5;hfb>5<>i6??0;66sm3`f94?2=83:p(<6n:00f?M5dn2B8o95+e4865>oc13:17djn:188mad=831d=:850;9~f702290>6=4?{%3;e?75n2B8ok5G3b68 `3=9;1bh44?::kge?6=3`ni6=44iea94?=h9><1<75rb230>5<4290;w)?7a;31`>N4ko1C?n:4$d7967=nl00;66gka;29?j70>3:17pl<0183>6<729q/=5o513f8L6ea3A9h86*j5;01?lb>2900eio50;9l520=831vn?77:186>5<7s-;3m7?=f:J0gc=O;j>0(h;5219j`<<722com7>5;hfa>5<6=4::183!7?i3;9j6F>5fd883>>oci3:17djm:188mae=831d=:850;9~f675290>6=4?{%3;e?75n2B8ok5G3b68 `3=::1bh44?::kge?6=3`ni6=44iea94?=h9><1<75rb3de>5<2290;w)?7a;31b>N4ko1C?n:4$d7966=nl00;66gka;29?lbe2900eim50;9l520=831vn?78:186>5<7s-;3m7?=f:J0gc=O;j>0(h;5219j`<<722com7>5;hfa>5<=5fd883>>oci3:17djm:188mae=831d=:850;9~f676290>6=4?{%3;e?75n2B8ok5G3b68 `3=::1bh44?::kge?6=3`ni6=44iea94?=h9><1<75rb3df>5<2290;w)?7a;31b>N4ko1C?n:4$d7966=nl00;66gka;29?lbe2900eim50;9l520=831vn?79:186>5<7s-;3m7?=f:J0gc=O;j>0(h;5219j`<<722com7>5;hfa>5<=5fd883>>oci3:17djm:188mae=831d=:850;9~f677290>6=4?{%3;e?75n2B8ok5G3b68 `3=::1bh44?::kge?6=3`ni6=44iea94?=h9><1<75rb3dg>5<2290;w)?7a;31b>N4ko1C?n:4$d7966=nl00;66gka;29?lbe2900eim50;9l520=831vn?7::186>5<7s-;3m7?=f:J0gc=O;j>0(h;5219j`<<722com7>5;hfa>5<=5fd883>>oci3:17djm:188mae=831d=:850;9~f7?c290?6=4?{%3;e?75m2B8ok5G3b68 `3=ko1bh44?::kge?6=3`ni6=44o055>5<54;294~"60h0:>h5G3bd8L6e33-o>63:17pl=8083>1<729q/=5o513g8L6ea3A9h86*j5;32?lb>2900eio50;9j`g<722e:;;4?::a74?=83?1<7>t$0:b>44a3A9hj6F5;hfb>5<>i6??0;66sm31d94?3=83:p(<6n:00e?M5dn2B8o95+e4817>oc13:17djn:188mad=831bhn4?::m233<722wi>km50;794?6|,82j6<N4k=1/i84=3:kg=?6=3`nj6=44ie`94?=nlj0;66a>7783>>{e:;91<7=50;2x 4>f288o7E=lf:J0g1=#m<09>6gk9;29?lbf2900c<99:188yg7ek3:1?7>50z&21<7>t$0:b>44b3A9hj6F5;hfb>5<>oci3:17djm:188k4112900qo2b9K7f`<@:i?7)k::028ma?=831d=:850;9~f7d029096=4?{%3;e?75k2B8ok5G3b68 `3=991bh44?::m233<722wi>o;50;094?6|,82j6<N4k=1/i84>0:kg=?6=3f;<:7>5;|`1f6<72;0;6=u+19c957e<@:im7E=l4:&f1?773`n26=44o055>5<52;294~"60h0:>n5G3bd8L6e33-o>6<>4ie;94?=h9><1<75rb3ce>5<5290;w)?7a;31g>N4ko1C?n:4$d7955=nl00;66a>7783>>{e:hn1<7<50;2x 4>f288h7E=lf:J0g1=#m<0:<6gk9;29?j70>3:17pl=ac83>7<729q/=5o513a8L6ea3A9h86*j5;33?lb>2900c<99:188yg4f13:1>7>50z&2=<:181>5<7s-;3m7?=c:J0gc=O;j>0(h;5119j`<<722e:;;4?::a767=8381<7>t$0:b>44d3A9hj6F5;n342?6=3th8>k4?:383>5}#91k1=?m4H2ae?M5d<2.n97??;hf:>5<8`826f=O;jl0D>m;;%g6>46>i6??0;66sm33;94?4=83:p(<6n:00`?M5dn2B8o95+e4824>oc13:17b?86;29?xd4:>0;6?4?:1y'5=g=9;i0D>mi;I1`0>"b=3;;7dj6:188k4112900qo==5;296?6=8r.:4l4>2b9K7f`<@:i?7)k::028ma?=831d=:850;9~f7e329096=4?{%3;e?75k2B8ok5G3b68 `3=991bh44?::m233<722wi?>j50;094?6|,82j6<N4k=1/i84>0:kg=?6=3f;<:7>5;|`167<72?0;6=u+19c9566<@:im7E=l4:&f1?423`n26=44iec94?=nlk0;66gkc;29?j7513:17b?86;29?xd6jk0;6;4?:1y'5=g=9::0D>mi;I1`0>"b=38>7dj6:188mag=831bho4?::kgg?6=3f;957>5;n342?6=3th8mo4?:9594?6|@:i?7)?7a;34b>\3=3kp47<9:e821?7428h1i7?9:0695f0=#m80>7)k=:49'a6<23-ii6i>4$d491>"b?3?0(h655:&f=?3<,lk196*jb;78 `e==2.nh7;4$dg91>"bn3?0(k>55:&e5?3<,o8196*i3;78 c2==2.m97;4$g491>"a?3?0(k655:&e=?3<,ok196*ib;78 ce==2.mh7;4$gg91>"an3?0(<>?:49'557==2.:"68?0>7)??7;78 46?2<1/==755:&24d<23-;;n7;4$02`>0=#99n196*>0d86?!77n3?0("69?0>7)?>7;78 47?2<1/=<755:&25d<23-;:n7;4$03`>0=#98n196*>1d86?!76n3?0(<?4:;%317?3<,88?685+13791>"6:?087)?74;61?!c32<1/=5853:&0g<<6091/?no51928j4n0:2>4444=831b=5650;9j<0<72-;k1<65f3483>!70j39=7c?8a;38?l53290/=:l5379m52g=:21b?>4?:%34f?513g;5<#9>h1?;5a16c90>=n;80;6)?8b;15?k70i3?07d=?:18'52d=;?1e=:o56:9j6c<72-;k1465f2e83>!70j39=7c?8a;;8?l26290/=:l5419m52g=821b?k4?:%34f?273g;5<#9>h18=5a16c96>=n;m0;6)?8b;63?k70i3907d=l:18'52d=<91e=:o54:9j7g<72-;k1:65f3883>!70j3>;7c?8a;58?l5?290/=:l5419m52g=021b;i4?:%34f?1d3g;4;h5a>5<#9>h1;n5a16c95>=n?00;6)?8b;5`?k70i3807d97:18'52d=?j1e=:o53:9j32<72-;k1965f7483>!70j3=h7c?8a;48?l13290/=:l57b9m52g=?21b;>4?:%34f?1d3g;5<#9>h1;n5a16c9=>=n?80;6)?8b;5`?k70i3k07d9?:18'52d=?j1e=:o5b:9j2`<72-;k1h65f6b83>!70j3=h7c?8a;g8?l0e290/=:l57b9m52g=n21b:l4?:%34f?1d3g;47<3`<36=4+16`93f=i9>k1=?54i7594?"6?k07`827>=n>?0;6)?8b;5`?k70i3;?76g95;29 41e2>i0b<9n:078?l>3290/=:l57b9m52g=9?10e5=50;&23g<0k2d:;l4>7:9j<7<72-;5$05a>2e5<#9>h1;n5a16c95d=l1<7*>7c84g>h6?h0:n65f7d83>!70j3=h7c?8a;3`?>o0i3:1(<9m:6a8j41f28n07d8i:18'52d=?j1e=:o51d98m32=83.:;o48c:l23d<6n21b4n4?:%34f?>e3g;4;h:b>5<#9>h14o5a16c95>=n000;6)?8b;:a?k70i3807d67:18'52d=0k1e=:o53:9l=1<72-;k1=65`9083>!70j3387c?8a;08?j?7290/=:l5929m52g=;21d4k4?:%34f??43g;5<#9>h15>5a16c91>=h1m0;6)?8b;;0?k70i3<07b7l:18'52d=1:1e=:o57:9l=g<72-;<3f3j6=4+16`9=6=i9>k1565`9883>!70j3387c?8a;c8?j??290/=:l5929m52g=j21d5:4?:%34f??43g;5<#9>h15>5a16c9`>=h1<0;6)?8b;;0?k70i3o07b6k:18'52d=1:1e=:o5f:9lg6<72-;k1=65fc`83>>o6000;66g>o2i3:1(<9m:4;8j41f2910e8650;&23g<212d:;l4>;:k63?6=,8=i6874n05b>7=7c86=>h6?h0876g:5;29 41e2<30b<9n:598m02=83.:;o4:9:l23d<232c=?7>5$05a>0?56`>7`84?>o193:1(<9m:4;8j41f2110e;>50;&23g<212d:;l46;:k6b?6=,8=i6874n05b>d=7c86=>h6?h0i76g:d;29 41e2<30b<9n:b98m0e=83.:;o4:9:l23dn7>5$05a>0?56`>7`8e?>o??3:1(<9m:948j41f2910co650;&23g4=1<7*>7c8a3>h6?h0976am3;29 41e2k=0b<9n:298kg4=83.:;o4m7:l23d<332ei=7>5$05a>g17`85?>ifn3:1(<9m:c58j41f2>10clk50;&23g<=7c8a3>h6?h0j76anb;29 41e2k=0b<9n:c98kd?=83.:;o4m7:l23d5$05a>g17`8f?>if>3:1(<9m:c58j41f2o10cl;50;&23g0:9le1<72-;5$05a>g15<#9>h1n:5a16c956=7c8a3>h6?h0:865`a183>!70j3h<7c?8a;36?>ien3:1(<9m:c58j41f28<07blj:18'52d=j>1e=:o51698kgb=83.:;o4m7:l23d<6021dnn4?:%34f?d03g;4g<3fhj6=4+16`9f2=i9>k1=o54oc;94?"6?k0i;6`>7`82g>=hj<0;6)?8b;`4?k70i3;o76ana;29 41e2k=0b<9n:0g8?j?a290/=:l5b69m52g=9o10cn650;&23g4=7c8`3>h6?h0976al4;29 41e2j=0b<9n:298yv2e83:1:vP;b19>63c=lh16>;m5d89>624=lj16>;85dc9>633=l01v9oj:1853~X4m?1U?i64^5`;?[2e>2T8h:5Q4c18Z1063W>i;6P;639]0=2k?;_1gb>X4ll1U?ij4^2f`?[2d:2T?o<5Q4b28Z1da3W>ii6P;be9]0geX3i01U8l64^5c4?[2f>2T?m85Q4`6896b72m=01>ln:42896ga2<:01>l6:42896d?2<:01>l8:42896e52<:01>m>:42897d?2<801?l9:40897d32<801?l=:40897d72<801?oj:40897gd2<801?on:40897g?2<801?6j:40897>c2<801?6l:40897>e2<801?6n:408971e2<801?9n:408971>2<801?97:40897102<801>>6:408966?2<801>>8:40896612<801>>::40897`12<801?h::40897`32<801?h<:40897`52<801>==:40896572<801><9:40896432<801>om:97896ge282270=nb;1`3>;4ik0>m63;4ik0>;63;4ik0>963;4ik0=?63;4ik0==63;4ik0>j63;4ik0>h63;4ik0>n63;4ik03;6s|4c094?5|V=h970=ma;34g>;4io0:;n5rs353>5<5sW>>:63=71823a=z{=i?6=4<{_6`0>;49h0o563<188g=>{t;51k0?:63;4j90?:63;4j00?:63;4j>0?:63=15872>;59:0?:63=13872>;5980?:63=11872>;58o0?:63=0d872>;58m0?:63=0b872>;5=j0?:63=5c872>;5=h0?:63=58872>;5=10?:63=56872>;5=?0?:63=54872>;5==0?:63=4`872>;5<00?:63=49872>;5<>0?:63=47872>;5<<0?:63=45872>;5<:0?:63=43872>;6l:0?:63>d3872>;6l80?:63>d1872>;6ko0?:63>cd872>;6km0?:63>cb872>;6kk0?:63>c`872>;5l10?:63=d6872>;5l<0?:63=d5872>;5l?0?:63=d2872>;5l;0?:63=d1872>;5ko0?:63=d0872>;5mj0?:63=ec872>;5mh0?:63=e8872>;5m10?:63=e6872>;5m?0?:63=e4872>;5m=0?:63=e2872>;5>o0?:63=71872>;5>h0?:63=68872>;4190?:63<8g872>;40l0?:63<8e872>;40j0?:63<8c872>;40h0?:63<88872>;4110?:63<96872>;41?0?:63<94872>;41=0?:63<92872>;41;0?:63<90872>;4010?:63<86872>;4ik0?m6s|30594?4|V=?h70=>7;34`>{t;49>0?:63<17872>;4jj0?:63;4jk0?:63;4k80?:63>ae872>;6ij0?:63>ac872>;6ih0?:63>a8872>;6i10?:63>a6872>;6i?0?:63>a4872>;6n00?:63>f9872>;6n>0?:63>f7872>;6n<0?:63>f5872>;6n:0?:63>f3872>;6n80?:63>e6872>;6m?0?:63>e4872>;6m=0?:63>e2872>;6m;0?:63>e0872>;6m90?:63>dg872>;6ll0?:63=39872>;5;>0?:63=37872>;5;<0?:63=35872>;5;:0?:63=33872>;5;80?:63=31872>;4=k0?:63<58872>;4=h0?:63<5b872>;4=m0?:63<5d872>;4=o0?:63<61872>;4>80?:63<4g872>;4;4;4;4<>0?:63<49872>;4?:0?:63<73872>;4?80?:63<71872>;4>o0?:63<6d872>;4>m0?:63<6b872>;4>k0?:63{t;>n1<783;{t;>h1<7{t;>31<7{t;>=1<7{t;1<1<703;;70=67;34`>{t;1>1<7>3;{t;181<7<3;{t;1:1<7:3;{t;>o1<7{t<;21<77}Y<9901>om:7c8yv25=3:1>vP;039>7dd=>01v9<;:181[279278mo498:p075=838pR9>?;<1bf?003ty?>?4?:3y]7c`<5:ki6;84}r614?6=:rT8ji523``920=z{=;m6=4={_1eg>;4ik0386s|40g94?4|V:li70=nb;:0?xu39m0;6?uQ3gc896ge2120q~:>c;296~X4n016?ll5839~w17e2909wS=i8:?0eg2`:47>52z\0b0=:;hh1;h5rs534>5<5sW9m863{t<8?1<77}Y;o;01>om:768yv26;3:1>vP7dd=0j1v9?=:181[5bn278mo48d:p047=838pR>kj;<1bf?1e3ty?==4?:3y]7`b<5:ki6:74}r63b?6=:rT8in523``93==z{=:n6=4={_1ff>;4ik0<;6s|41f94?4|V:oj70=nb;55?xu38j0;6?uQ3d;896ge2>?0q~:=f;296~X38h16?ll5759~w14b2909wS:?9:?0eg249n7>52z\743=:;hh1;<5rs50b>5<5sW>;963{t<;31<77}Y;o901>om:7f8yv26>3:1>vP7dd=>j1v9>m:181[5b?278mo49b:p563=833p1>j>:05;?84ei3>270270<87;6:?857=3>270270==4;6:?xu51j0;6?u228`915=::0n1=:84}r1a2?6=9hq6>4l516a896d>28=o70h70h70h70h70;5l80?o63=eb87g>;5mk0?o63=e`87g>;5m00?o63=e987g>;5m>0?o63=e787g>;5m<0?o63=e587g>;5m:0?o63=6g823f=::>:1=:m4=34b>1e<5;<269m4}r0:f?6=7e9>63e=lj16?lj5d89>633=lh1v>li:181<~;49>0?o63<1787g>;4k80:;i521`f90f=:9hi18n521``90f=:9hk18n521`;90f=:9h218n521`590f=:9h<18n521`790f=:9o318n521g:90f=:9o=18n521g490f=:9o?18n521g690f=:9o918n521g090f=:9o;18n521d590f=:9l<18n521d790f=:9l>18n521d190f=:9l818n521d390f=:9l:18n521ed90f=:9mo18n5222:90f=:::=18n5222490f=:::?18n5222690f=:::918n5222090f=:::;18n5222290f=z{:;36=4<{<123?37349::7;?;<12=?70>2wx?<850;1x967128=o70=>a;fb?85613nj7p}6}:;k;19=523c2952b<5:km6994}r1a5?6=:r78n<4>7e9>7g5=l01v>lm:18085ek3?;70=ma;64?85ej3;3ty8mk4?:2y>7g6==916?lh516f896d42mk0q~=ma;297~;4jh0:;i523c`915=:;ko1hl5rs2`1>5<3s49i57?8c:?0f=<6?j16?o9516a896d428==7p}70|5:h36<9k;<020?2d348:?7:l;<026?2d348:=7:l;<024?2d348;j7:l;<03a?2d348;h7:l;<03g?2d348>o7:l;<06f?2d348>m7:l;<06=?2d348>47:l;<063?2d348>:7:l;<061?2d348>87:l;<07e?2d348?57:l;<07;40o0:;h5239g952c<5:2o6<9j;<1;g?70m2784o4>7d9>7=g=9>o01>66:05f?85>03;41b349287?8e:?0=6<6?l16?4<516g896?628=n70=78;34a>;40>0:;h523`f9`d=:;hh1=564}r1a`?6=;r78o?4>7b9>7f7=9>i01>lj:055?xu4k90;641c349>n7:l;<16=?70k2789l4;c:?01f<3k2789i4;c:?01`<3k2789k4;c:?025<3k278:<4;c:?00c<3k2788h4;c:?00f<3k2788o4;c:?00a<3k2788l4;c:?00<<3k2788:4;c:?00=<6?j16?:=54b9>724=726=73c=73e=w0?nd;73?87a13;ag8ge>;6j80o563>b28gg>{t9h>1<7=t=0cg>41c349:?7jn;<134?bf3ty:mh4?:3y>5de==916=lh51648yv7f;3:1?v3>ab823a=:;881h4522gd9`<=z{8h;6=4={<3bf?3734;i=7?86:p5d4=839p1ag<58h<6i74=0`:>ae<58hi6im4}r3b5?6=;r7:ml4>7e9>747=l016>kk5d89~w4d32909w0?n9;73?87e=3;<:6s|1`294?5|58k26<9k;<125?be348mi7jm;|q2f3<72;q6=l65519>5g1=9><0q~?6f;297~;6i10:;i523029`<=::on1h45rs0`;>5<5s4;j;7;?;<3a=?70>2wx=4k50;1x94g028=o70=>0;fa?84al3ni7p}>b`83>7}:9h<19=521ca952053z?2e3<6?m16?=h5d89>6ce=l01v{t90i1<7=t=0c6>41c349;j7jm;<0eg?be3ty99>4?:4y>642==916>8m516f897712mk01??7:e;8977f2mi0q~5<5s48:?7;?;<022?70>2wx>=o50;1x977428=o70<68;f:?84?=3nh7p}=1683>7}::8819=5220:952053z?157<6?m16>495d`9>6=2=lh1v??6:18584693?;70<>a;342>;59j0om63=1d8g=>;5:90oo63=238gg>{t:921<7=t=332>41c3482;7j6;<0;0?b>3ty9=o4?:3y>646==916>i:05g?84>>3n270<73;f:?xu59o0;6?u221g915=::;:1=:84}r031?6=;r79

7e9>6<3=lh16>5<5d`9~w7462909w03483>7j6;|q160<72;q6>=m5519>670=9><0q~5<5s48>o7;?;<07e?70l2wx>9>50;0x973e2<:01?:6:05g?xu5=;0;69u224`952b<5;;=6i74=33;>ag<5;;j6il4}r00b?6=:r799l4:0:?10=<6?m1v?;>:180842i3;;59h0om6s|22g94?4|5;?268>4=364>41c3ty99=4?:3y>60?=9>n01??n:e;8yv44l3:1>v3=59864>;55<2s48>47?8d:?15f?4kb:p66e=838p1?;8:428972228=o7p}=4d83>1}::<=1=:j4=33f>ad<5;8;6io4=301>ag52z?113<28279894>7e9~w72c2908w0<:6;34`>;5:90o563=238g=>{t::k1<706<5;>86<9k;|q10f<72:q6>8;516f897442m301?<9:ec8yv4413:1>v3=55864>;5<;0:;i5rs36a>5<5s48>87?8d:?1632<:017e9>5d`=l016=o?5d`9>5g5=lk1v{t9lo1<7=t=0d4>41c34;i=7jm;<3a7?bf3ty:hl4?:3y>5c0==916=h:516f8yv7bl3:1>v3>f7823a=:9k91h45rs0f:>5<5s4;m97;?;<3f7?70l2wx=hm50;7x94`228=o70?m5;f:?87e?3nj70?m9;fa?87ej3ni7p}>d983>7}:9o>19=521d0952b54z?2b1<6?m16=o95dc9>5g?=lh16=ol5d`9~w4b02909w0?i3;73?87b93;34;in7j6;|q2`3<72;q6=k<5519>5`6=9>n0q~?j9;297~;6n;0:;i521ca9`<=:9kl1hl5rs0f6>5<5s4;m=7;?;<3gb?70l2wx=h650;0x94`628=o70?mf;f:?xu5:o0;6?u225c915=:::21=:j4}r01a?6=:r79844:0:?172<6?m1v?{t:;i1<706<5;9>6<9k;|q16g<72;q6>985519>662=9>n0q~<=a;296~;5<<0><63=32823a=z{;826=4={<070?373488>7?8d:p67>=838p1?:<:428975628=o7p}=2683>7}::=819=52222952b52z?2a2<2827:h>4>7e9~w4e?2909w0?j6;73?87c:3;68>4=0f2>41c3ty:o;4?:3y>5`2==916=i>516f8yv7d=3:1>v3>e2864>;6ko0:;i5rs0a7>5<5s4;n>7;?;<3`a?70l2wx=n=50;0x94c62<:01{t9m>1<7?t=0ff>41c3ty9i?4?:4y>5a5==916>hm516f894>e2m301?6::e;896ge2:=0q~?ia;296~;6l;0><63>8c8233=z{8li6=4={<3g5?3734;3o7?86:p5ce=838p1c28==7p}>fe83>7}:9jl19=5219g952052z?2g`<2827:4k4>779~w4`a2909w0?ld;73?87>83;<:6s|21294?4|58ih68>4=0;2>4113ty9<<4?:3y>5fd==916=4<51648yv47:3:1>v3>c`864>;61:0:;;5rs24b>5<3s48847;?;<147?70l27:594k9:?0eg<392wx>8j50;0x97502<:01<7;:055?xu5=l0;6?u2224915=:90?1=:84}r06b?6=:r79?84:0:?2=3<6??1v?8?:181844<3?;70?67;342>{t:?;1<706<58336<99;|q127<72;q6>><5519>5<0q~<93;296~;5;80><63>9`8233=z{;<70<70<70<70<70<70<70<70<70<70=nd;fa?841=3;<:63=9e8g=>{t:h=1<706<5;i86<99;|q1g`<72=q6>i6516f897cd2<:01?77:ea897e32m30q~0><63=c38233=z{;io6=4;{<0g3?70l279io4:0:?1==1}::m?1=:j4=3g:>06<5;3<6il4=3`6>a?52z?1`1<28279nk4>779~w7ef290?w0;5m10><63=978gg>;5j:0o56s|2`794?4|5;n=68>4=3a2>4113ty9on4?:5y>6a0=9>n01?kn:42897?02mi01?l8:e;8yv4f:3:1>v3=d2864>;5jl0:;;5rs3a:>5<3s48o?7?8d:?1a2<282795;4kb:?1f4l?50;0x97b52<:01?lk:055?xu5k10;69u22e0952b<5;o=68>4=3;6>ae<5;km6i74}r0:b?6=:r79h=4:0:?1fg<6??1v?m9:18784c83;;51=0on63=ac8g=>{t:0o1<706<5;hj6<99;|q1g0<72=q6>nh516f897c42<:01?7;:ec897g>2m30q~<63=bb8233=z{;i<6=4;{<0g5?70l279i84:0:?1=0=838p1?m<:5;897d?28==7p}=c583>7}::j91=?64=3a7>4113ty9n;4?:2y>6f4=<016>o65489>6g0=9><0q~5522c:95=5<5;h26<99;|q1f1<72:q6>n?5489>6g0=<016>o:51648yv4e?3:1?v3=c0826==::k<1=5=4=3`4>4113ty9n?4?:2y>6f6=<016>o:5489>6g4=9><0q~5522c695=5<5;h>6<99;|q1f5<72:q6>oh5489>6g4=<016>o>51648yv4e;3:1?v3=bg826==::k81=5=4=3`0>4113ty9mh4?:2y>6gc=<016>o>5489>6dc=9><0q~5522c295=5<5;h:6<99;|q1ef<72:q6>oj5489>6dc=<016>lm51648yv4fn3:1?v3=be826==::ho1=5=4=3ce>4113ty9ml4?:2y>6ge=<016>lm5489>6dg=9><0q~5522`a95=5<5;ko6<99;|q1e=<72:q6>ol5489>6dg=<016>l651648yv4fj3:1?v3=bc826==::hk1=5=4=3ca>4113ty9m44?:2y>6gg=9;201?o7:0:0?84f13;<:6s|2d394?3|5;oi6<9k;<3;g?b>34;3n7jn;<0;1?be349jn7=:;|q1a5<72ho516f894>c2m301<6l:ec897>32mi01>om:268yv4cn3:19v3=e8823a=:91o1h45219f9`d=::1>1ho523``976=z{;nn6=4:{<0f4kc:?0eg<4:2wx>ij50;7x97c028=o70?60;f:?87?n3nj70<73;fa?85fj39:7p}=db83>0}::l<1=:j4=0;2>a?<583;6io4=3:1>ae<5:ki6>>4}r0gf?6==r79i84>7e9>5<4=l016=4?5d`9>6=4=lk16?ll52g9~w7bf290>w0;61:0o563>938ge>;5080on63{t:m31<7:t=3g0>41c34;2?7jn;<0;5?bf349jn7;h5519>626==916>:<51648yv41n3:1>v3=6g823a=::>81h45rs34a>5<5s48=m7;?;<05g?70>2wx>;650;4x970f28=o70<9e;fa?841k3ni70<82;fa?841>3n270<95;fa?xu5>m0;6?u227;915=::?o1=:84}r053?6=>r79:44>7e9>63c=l016>;m5d`9>624=lh16>;85d`9>633=lj1v?66:18184?m3>270<7d;342>{t:091<74>4348247?86:p6l3nj7p}=8983>7}::1n1845229a95207>52z?14951648yv4??3:1>v3=8b87=>;50k0:;;5rs3;2>5<5s483o7?73:?1=3<6??1v?69:18184?j3>270<7a;342>{t:0:1<74>4348297?86:p6=`=838p1?6n:0:0?84><3;<:6s|26494?4|5;=i6974=35b>4113ty94=4?:3y>62d=91901?6::055?xu5100;6?u226`9520<5;3o6il4}r041?6=:r79;l4;9:?13<<6??1v?9i:181840i3;3?63=858233=z{;=?6=4={<04=?2>348<47?86:p62c=838p1?96:0:0?84?;3;<:6s|26194?4|5;=36974=354>4113ty9;i4?:3y>62>=91901?6=:055?xu5?j0;6?u226595=5<5;2:6<99;|q041<72;q6?=75489>75>=9><0q~=?e;296~;4800:4>52301952052z?04<<6??16?<75db9~w6642909w0=?8;6:?857?3;<:6s|31f94?4|5::36<6<;<126?70>2wx?=<50;0x96602=301>>9:055?xu48j0;6?u231595=5<5:;:6<99;|q044<72;q6?=85489>753=9><0q~=?b;296~;48?0:4>52302952052z?040<60:16?=h51648yv4a93:1>v3=f787=>;5n<0:;;5rs3da>5<5s48m:7?73:?045<6??1v>?;:18184a>3;<:63<188gf>{t:o:1<71?<5;l?6<99;|q1bd<72;q6>k;5191897`a28==7p}=eg83>7}::o>184522g1952052z?1b1<60:16>kk51648yv4bm3:1>v3=f287=>;5n;0:;;5rs3d;>5<5s48m?7?73:?1ba<6??1v?h8:18184a:3;3?63=fb8233=z{:=?6=4>ez?01g<3?278944;7:?01d<3?2789n4;7:?01a<3?2789h4;7:?01c<3?278:=4;7:?024<3?2788k4;7:?00`<3?2788n4;7:?00g<3?2788i4;7:?00d<3?278844;7:?002<3?278854;7:?036<3?278;?4;7:?034<3?278;=4;7:?02c<3?278:h4;7:?02a<3?278:n4;7:?02g<3?278=l4>779>7dd=;j201>om:bc8yv5383:18v3<5c864>;4<00:;i523029`f=:;;31h45rs271>5<4s49>n7?8d:?02a<28279ji4kc:p76c=83>p1>;6:428962028=o70=?f;f`?855=3n27p}<5183>6}:;<31=:j4=24a>06<5;lh6im4}r10b?6=771=l01v>;>:180852i3;;5nj0om6s|35394?2|5:?h68>4=26b>41c349:<7jn;<11f?b>3ty89>4?:2y>70e=9>n01>8j:42897`c2mk0q~=;2;290~;4=m0><63<4c823a=:;8;1hn5233f9`<=z{:??6=4<{<16`?70l278:k4:0:?1b`:l:05g?85693nj70==f;f:?xu4=<0;6>u234g952b<5:=;68>4=3df>ag54z?01c<282788i4>7e9>744=lj16?>?5d89~w6312908w0=:f;34`>;4?80><63=fg8gg>{t;=?1<7:t=243>06<5:>n6<9k;<126?bf3498?7j6;|q012<72:q6?;>516f896152<:01?hi:ec8yv53>3:18v3<60864>;45<4s49==7?8d:?036<28278<=4k9:p775=838p1>:i:428965d28==7p}<2383>7}:;=o19=5232`952052z?00f<28278?44>779~w67a2909w0=;b;73?85403;<:6s|33394?4|5:>o68>4=21b>4113ty8=h4?:3y>71g==916?>951648yv56l3:1>v3<48864>;4;?0:;;5rs23a>5<5s49?;7;?;<100?70>2wx?=::055?xu4;;0;6?u232a90<=:;:81=:84}r10`?6=:r78?n4>299>76b=9><0q~=<0;297~;4;k0?563<3387=>;4;90:;;5rs210>5<4s498n7?=8:?077<60:16?>=51648yv55m3:1?v3<3`87=>;4;90?563<2d8233=z{:9:6=4<{<10e?750278?=4>829>767=9><0q~==c;297~;4;00?563<2d87=>;4:j0:;;5rs20e>5<4s49857?=8:?06`<60:16??h51648yv55i3:1?v3<3987=>;4:j0?563<2`8233=z{:8o6=4<{<10n4>829>77b=9><0q~==8;297~;4;>0?563<2`87=>;4:10:;;5rs20a>5<4s498;7?=8:?06d<60:16??l51648yv55>3:1?v3<3787=>;4:10?563<278233=z{:826=4<{<102?750278>54>829>77?=9><0q~==4;297~;4;<0?563<2787=>;4:=0:;;5rs204>5<4s49897?=8:?063<60:16??951648yv55=3:1?v3<35826==:;;>1=5=4=206>4113ty8:44?:5y>724=9>n01<7::e;894?32mk01>om:2d8yv5103:18v3<70823a=:90<1h4521879`d=:;hh1?h5rs244>5<3s49<<7?8d:?2=2?3nj70=nb;1`?xu4><0;69u237g952b<58326i74=0;;>ag<5:ki6>l4}r150?6=7e9>57dd=;h1v>8<:187851k3;9c8g=>;61h0om63{t;?81<7=t=24a>41c34;2n7jn;<1bf?5?3ty8mh4?:01x96?72==01>6i:55896>b2==01>6k:55896>d2==01>6m:55896>f2==01>66:55896??2==01>78:55896?12==01>7::55896?32==01>7<:55896?52==01>7>:55896>?2==01>68:558970128==7p}7}:;0:19=523``9g6=z{:k;6=4={<1;b?37349jn77;;|q0=c<72;q6?5k5519>7dd=1;1v>7j:18185?l3?;70=nb;;2?xu41m0;6?u239a915=:;hh15=5rs2;`>5<5s493n7;?;<1bf?>a3ty85o4?:3y>7=g==916?ll58d9~w6?f2909w0=79;73?85fj33o7p}7}:;0219=523``9=f=z{:k26=4={<1:3?37349jn7m>;|q0e=<72;q6?485519>7dd=1k1v>o8:18185>=3?;70=nb;;b?xu4i?0;6?u2386915=:;hh1545rs2c6>5<5s492?7;?;<1bf???3ty8m94?:3y>7<4==916?ll5969~w6g42909w0=61;73?85fj33=7p}7}:;1219=523``9=0=z{:326=4={<1;3?37349jn76k;|q0ef<72;q6?lj5164896ge2j30q~?<7;296~;5::0om63=23826<=z{8?86=4={<3ag?bf34;in7?=9:p672=838p1?<9:e`8974528==7p}>be83>7}:9kl1ho521c`952018o<4$2a0>4163ty?n44?:3y]0g?<5=>18o74$2a0>4153ty?m>4?:3y]0d5<5=>18l=4$2a0>4143ty?>54?:3y]052<5=>18=:4$2a0>4503ty?>;4?:3y]055<5=>18==4$2a0>4253ty?>84?:3y]054<5=>18=<4$2a0>42e3ty?>94?:3y]057<5=>18=?4$2a0>42c3ty?>>4?:3y]056<5=>18=>4$2a0>42b3ty?>?4?:3y]7c`<5=>1?kh4$2a0>42a3ty?>=4?:3y]7cb<5=>1?kj4$2a0>4373ty?=k4?:3y]7ce<5=>1?km4$2a0>4363ty?=h4?:3y]7cd<5=>1?kl4$2a0>4353ty?=i4?:3y]7cg<5=>1?ko4$2a0>4333ty?=n4?:3y]7c?<5=>1?k74$2a0>4323ty?=o4?:3y]7c><5=>1?k64$2a0>4313ty?=l4?:3y]7c1<5=>1?k94$2a0>4303ty?=44?:3y]7c0<5=>1?k84$2a0>43?3ty?=54?:3y]7c3<5=>1?k;4$2a0>43>3ty?=:4?:3y]7c2<5=>1?k:4$2a0>43f3ty?=84?:3y]7c4<5=>1?k<4$2a0>43e3ty?=94?:3y]7c7<5=>1?k?4$2a0>43d3ty?=>4?:3y]7c6<5=>1?k>4$2a0>43c3ty?=?4?:3y]7``<5=>1?hh4$2a0>43b3ty?=<4?:3y]7`c<5=>1?hk4$2a0>43a3ty?==4?:3y]7`b<5=>1?hj4$2a0>4073ty?1?hm4$2a0>4063ty?1?hl4$2a0>4053ty?1?ho4$2a0>4043ty?1?h74$2a0>4033ty?>k4?:3y]05g<5=>18=o4$2a0>4023ty?>h4?:3y]05?<5=>18=74$2a0>4013ty?>i4?:3y]05><5=>18=64$2a0>4003ty?>n4?:3y]051<5=>18=94$2a0>40?3ty?>o4?:3y]050<5=>18=84$2a0>40>3ty?>l4?:3y]053<5=>18=;4$2a0>40f3ty?>44?:3y]7cc<5=>1?kk4$2a0>40e3ty?><4?:3y]7c5<5=>1?k=4$2a0>40d3ty?=;4?:3y]7`><5=>1?h64$2a0>40c3ty?1?h94$2a0>40b3ty?o94?:3y]0f2<5=>18n:4$2a0>40a3ty?n=4?:3y]0g6<5=>18o>4$2a0>4173ty?8o4?:3y]06?<5=>18>74$2a0>4513ty?844?:3y]06><5=>18>64$2a0>45?3ty?854?:3y]061<5=>18>94$2a0>45>3ty?8:4?:3y]060<5=>18>84$2a0>45f3ty?8;4?:3y]063<5=>18>;4$2a0>45e3ty?884?:3y]062<5=>18>:4$2a0>45d3ty?894?:3y]065<5=>18>=4$2a0>45c3ty?8>4?:3y]064<5=>18><4$2a0>45b3ty?994?:3y]017<5=>189?4$2a0>45a3ty?9>4?:3y]016<5=>189>4$2a0>4273ty?9?4?:3y]06`<5=>18>h4$2a0>4263ty?9<4?:3y]06c<5=>18>k4$2a0>4243ty?9=4?:3y]06b<5=>18>j4$2a0>4233ty?8k4?:3y]06e<5=>18>m4$2a0>4223ty?8h4?:3y]06d<5=>18>l4$2a0>4213ty?8i4?:3y]06g<5=>18>o4$2a0>4203ty?8n4?:3y]067<5=>18>?4$2a0>42?3ty?8?4?:3y]066<5=>18>>4$2a0>42>3ty?9n4?:3y]00e<5=>188m4$2a0>42f3ty?9;4?:3y]000<5=>18884$2a0>42d3twe4oh50;0xL6e33td3o=4?:3yK7f252zJ0g1=zf1i96=4={I1`0>{i0j91<7d=3:1>vFm;;|l;g=<72;qC?n:4}o:`=?6=:rB8o95rn9ab>5<5sA9h86sa8b`94?4|@:i?7p`7cb83>7}O;j>0qc6ld;296~N4k=1vb5mj:181M5d<2we4nh50;0xL6e33td3h=4?:3yK7f252zJ0g1=zf1n96=4={I1`0>{i0m91<7c=3:1>vFm;;|l;`=<72;qC?n:4}o:g=?6=:rB8o95rn9fb>5<5sA9h86sa8e`94?4|@:i?7p`7db83>7}O;j>0qc6kd;296~N4k=1vb5jj:181M5d<2we4ih50;0xL6e33td3i=4?:3yK7f252zJ0g1=zf1o96=4={I1`0>{i0l91<7b=3:1>vFm;;|l;a=<72;qC?n:4}o:f=?6=:rB8o95rn9gb>5<5sA9h86sa8d`94?4|@:i?7p`7eb83>7}O;j>0qc6jd;296~N4k=1vb5kj:181M5d<2we4hh50;0xL6e33td3j=4?:3yK7f252zJ0g1=zf1l96=4={I1`0>{i0o91<7a=3:1>vFm;;|l;b=<72;qC?n:4}o:e=?6=:rB8o95rn9db>5<5sA9h86sa8g`94?4|@:i?7p`85683>4}O;j>0qc964;295~N4k=1vb:7::182M5d<2we;4850;3xL6e33td<5:4?:0yK7f251zJ0g1=zf>326=4>{I1`0>{i?0k1<7?tH2a7?xh01k0;6k3:1=vFm;;|l4=c<728qC?n:4}o5b4?6=9rB8o95rn6c2>5<6sA9h86sa7`094?7|@:i?7p`8a283>4}O;j>0qc9n4;295~N4k=1vb:o::182M5d<2we;l850;3xL6e33td51zJ0g1=zf>k26=4>{I1`0>{i?hk1<7?tH2a7?xh0ik0;6m;;|l4ec<728qC?n:4}o5a4?6=9rB8o95rn6`2>5<6sA9h86sa7c094?7|@:i?7p`8b283>4}O;j>0qc9m4;295~N4k=1vb:l::182M5d<2we;o850;3xL6e33td51zJ0g1=zf>h26=4>{I1`0>{i?kk1<7?tH2a7?xh0jk0;6m;;|l4fc<728qC?n:4}o5`4?6=9rB8o95rn6a2>5<6sA9h86sa7b094?7|@:i?7p`8c283>4}O;j>0qc9l4;295~N4k=1vb:m::182M5d<2we;n850;3xL6e33td51zJ0g1=zf>i26=4>{I1`0>{i?jk1<7?tH2a7?xh0kk0;6m;;|l4gc<728qC?n:4}o5g4?6=9rB8o95rn6f2>5<6sA9h86sa7e094?7|@:i?7p`8d283>4}O;j>0qc9k4;295~N4k=1vb:j::182M5d<2we;i850;3xL6e33td51zJ0g1=zf>n26=4>{I1`0>{i?mk1<7?tH2a7?xh0lk0;6m;;|l4`c<728qC?n:4}o5f4?6=9rB8o95rn6g2>5<6sA9h86sa7d094?7|@:i?7p`8e283>4}O;j>0qc9j4;295~N4k=1vb:k::182M5d<2we;h850;3xL6e33td51zJ0g1=zf>o26=4>{I1`0>{i?lk1<7?tH2a7?xh0mk0;6m;;|l4ac<728qC?n:4}o5e4?6=9rB8o95rn6d2>5<6sA9h86sa7g094?7|@:i?7p`8f283>4}O;j>0qc9i4;295~N4k=1vb:h::182M5d<2we;k850;3xL6e33td51zJ0g1=zf>l26=4>{I1`0>{i?ok1<7?tH2a7?xh0nk0;6m;;|l4bc<728qC?n:4}o:34?6=9rB8o95rn922>5<6sA9h86sa81094?7|@:i?7p`70283>4}O;j>0qc6?4;295~N4k=1vb5>::182M5d<2we4=850;3xL6e33td3<:4?:0yK7f251zJ0g1=zf1:26=4>{I1`0>{i09k1<7?tH2a7?xh?8k0;67k3:1=vFm;;|l;4c<728qC?n:4}o:24?6=9rB8o95rn932>5<6sA9h86sa80094?7|@:i?7p`71283>4}O;j>0qc6>4;295~N4k=1vb5?::182M5d<2we4<850;3xL6e33td3=:4?:0yK7f251zJ0g1=zf1;26=4>{I1`0>{i08k1<7?tH2a7?xh?9k0;66k3:1=vFm;;|l;5c<728qC?n:4}o:14?6=9rB8o95rn902>5<6sA9h86sa83094?7|@:i?7p`72283>4}O;j>0qc6=4;295~N4k=1vb5<::182M5d<2we4?850;3xL6e33td3>:4?:0yK7f251zJ0g1=zf1826=4>{I1`0>{i0;k1<7?tH2a7?xh?:k0;65k3:1=vFm;;|l;6c<728qC?n:4}o:04?6=9rB8o95rn912>5<6sA9h86sa82094?7|@:i?7p`73283>4}O;j>0qc6<4;295~N4k=1vb5=::182M5d<2we4>850;3xL6e33td3?:4?:0yK7f251zJ0g1=zf1926=4>{I1`0>{i0:k1<7?tH2a7?xh?;k0;64k3:1=vFm;;|l;7c<728qC?n:4}o:74?6=9rB8o95rn962>5<6sA9h86sa85094?7|@:i?7p`74283>4}O;j>0qc6;4;295~N4k=1vb5:::182M5d<2we49850;3xL6e33td38:4?:0yK7f251zJ0g1=zf1>26=4>{I1`0>{i0=k1<7?tH2a7?xh?3k3:1=vFm;;|l;0c<728qC?n:4}o:64?6=9rB8o95rn972>5<6sA9h86sa84094?7|@:i?7p`75283>4}O;j>0qc6:4;295~N4k=1vb5;::182M5d<2we48850;3xL6e33td39:4?:0yK7f247>51zJ0g1=zf1?26=4>{I1`0>{i02k3:1=vFm;;|l;1c<728qC?n:4}o:54?6=9rB8o95rn942>5<6sA9h86sa87094?7|@:i?7p`76283>4}O;j>0qc694;295~N4k=1vb58::182M5d<2we4;850;3xL6e33td3::4?:0yK7f251zJ0g1=zf1<26=4>{I1`0>{i0?k1<7?tH2a7?xh?>k0;61k3:1=vFm;;|l;2c<728qC?n:4}o:44?6=9rB8o95rn952>5<6sA9h86sa86094?7|@:i?7p`77283>4}O;j>0qc684;295~N4k=1vb59::182M5d<2we4:850;3xL6e33td3;:4?:0yK7f251zJ0g1=zf1=26=4>{I1`0>{i0>k1<7?tH2a7?xh??k0;60k3:1=vFm;;|l;3c<728qC?n:4}o:;4?6=9rB8o95rn9:2>5<6sA9h86sa89094?7|@:i?7p`78283>4}O;j>0qc674;295~N4k=1vb56::182M5d<2we45850;3xL6e33td34:4?:0yK7f251zJ0g1=zf1226=4>{I1`0>{i01k1<7?tH2a7?xh?0k0;6?k3:1=vFc290:wE=l4:m<=c=83;pD>m;;|l;5<6sA9h86sa88094?7|@:i?7p`79283>4}O;j>0qc664;295~N4k=1vb57::182M5d<2we44850;3xL6e33td35:4?:0yK7f251zJ0g1=zf1326=4>{I1`0>{i00k1<7?tH2a7?xh?1k0;6>k3:1=vFm;;|l;=c<728qC?n:4}o:b4?6=9rB8o95rn9c2>5<6sA9h86sa8`094?7|@:i?7p`7a283>4}O;j>0qc6n4;295~N4k=1vb5o::182M5d<2we4l850;3xL6e33td3m:4?:0yK7f251zJ0g1=zf1k26=4>{I1`0>{i0hk1<7?tH2a7?xh?ik0;6fk3:1=vFm;;|l;ec<728qC?n:4}o:a4?6=9rB8o95rn9`2>5<6sA9h86sa8c094?7|@:i?7p`7b283>4}O;j>0qc6m4;295~N4k=1vb5l::182M5d<2we4o850;3xL6e33td3n:4?:0yK7f251zJ0g1=zf1h26=4>{I1`0>{i0kk1<7?tH2a7?xh?jk0;6ek3:1=vFm;;|~yEFDsh<>69>i25f;exFGJr:vLM^t}AB +$5a540<,[o}e~g`n;"2*726&;$:,)<6;.vnt*Ydo&lbjbQwloz\144;?U9oaeP37vl5=(iof;0<85?0123=>6789:;<=>;0:23456789:;<=>?0123456789:;<=>?0123456789:;<=>?0123456789:;<=>?013856=6&9;87<>5IORVP?GCL[K757>11g924?OIX\^1|ah_dosp|Ys`{oxd1750?05?46=AGZ^X7~}of]fiur~W}byi~fParqfvq:>2949:6??:HLSQQ712@D[YY4KI@>21?699:1::7AZTQWW>AIF48?1<3?;;0:9KPRW]]0ocxz31683:4=5:28:86<<3232?76==:HLSQQ112906?IR\Y__6IAM<2394;753:<1EC^ZT;fjj952294o7>}=012ec131%<;0895;0GD25>2=AGZ^X7JFPC>0>586:2>1CXZ_UU8GKUD;;3:5=68=;7;7?3?>>=138??;;9G;E4=><23;<4<49768=30>9;126D@_UU8B@ATE410;22@D[YY4rne\bpjkW}byi~fPndebp`:?294:4675OTVSQQG502KOH_O30?:8EABUI5;546OKDSC?6;>GCL[K7:364AEFQE91902KOH_O38?c8EABUI531<364AEFQE9?902KOH_L30?:8EABUJ5;546OKDS@?6;>GCL[H7:364AEFQF919i2KOH_L38;2=<>GCL[H743=4AMN:?DU^FJUYIJ=4BT0;?GSTW@DMC<5L2:AF57=D@LI@SAGLEOQF[Q_WM;1HE95LLJC7?FJLJ:1H@_74CNONMQRBL8>0OB\J_FGMAWGSAFDTECH@7:AQADRBL81O>6JL2:FJ2>BNI5:5;6JFA=33:2=CAH6:=394DHC?57803MCJ0<=17:FJE973601OEL2>5;2=3>BNI5;>2;5KI@>2:3=CAH692;5KI@>0:3=CAH6?2;5KI@>6:3=CAH6=2;5KI@>4:3=CAH632;5KI@>::3=CAK6;2:5KIC>24;169GMG:6<7=0HDL314<4?AOE48<5;6JFB=34:2=CAK6:4394DH@?5<813MCI0<08;EKA8769?2NBN1<>>69GMG:5:7=0HDL322<4?AOE4;>5;6JFB=06:2=CAK69:394DH@?62803MCI0?617:FJF94>6?1OEO2=>69GMG:48730HDL33083:2=CAK68=384DH@?7;02:2=CAYH7>374DHRA86<76>1OE]L33?48@JG;87=0HBO311<4?AIF48;5;6J@A=31:2=CGH6:?394DNC?518>3MEJ0<;50?58@JG;9<4=7IAN<0<5?AIF4;4=7IAN<2<5?AIF4=4=7IAN<4<5?AIF4?4=7IAN<6<5?AIF414=7IAN<8<4?AIFW[OL:6J@B=2=3>BHJ5;;2:5KOC>25;169GKG:6=7=0HBL317<4?AIE48=5;6J@B=3;:2=CGK6:5384DN@?5;1=08;EMA8779?2NDN1<=>69GKG:5;7=0HBL325<4?AIE4;?5;6J@B=05:2=CGK69;394DN@?6=803MEI0?716:FLF949?2NDN1=?>89GKG:493:5;6J@B=12:3=CGK682;5KOC>7:3=CGK6>2;5KOC>5:3=CGK6<2;5KOC>;:3=CGK622:5KOC]QAB12:2=CGYH7>374DNRA86<76>1OC]L33?18AKG43LDIn6KA_DA@[WCFLj1NBRKLC^UQMQC53O8?7K6HK3:DGG1=ALJO87KJ_4:DGT@2O7:2C:>6G=2:K0<>OIA]ZT<=64IOKWTZ6602CEEY^P03:8MKOSXV:846GAIUR\41>:8:KMMQVX8?20ECG[P^24=>OIA]Y_MYK8;HLJPZ67?2CEEYQ?169JJLRX8;=0ECG[_114?LHN\V:?;6GAIU]312=NF@^T<;94IOKW[5103@DBXR>77:KMMQY71>1BBDZP0@58MKOSW9H<7D@FT^2@3>OIA]U;H:5FNHV\4@1169JJLRX9;=0ECG[_014?LHN\V;?;6GAIU]212=NF@^T=;94IOKW[4103@DBXR?77:KMMQY61>1BBDZP1@58MKOSW8H<7D@FT^3@3>OIA]U:H:5FNHV\5@1;94IOKW[7103@DBXR<77:KMMQY51>1BBDZP2@58MKOSW;H<7D@FT^0@3>OIA]U9H:5FNHV\6@11BBDZP3@58MKOSW:H<7D@FT^1@3>OIA]U8H:5FNHV\7@1H9;HLJPZG13@DBXRL=;MK1?II13EEJHHJ8;MMDMFGK<2F^X<:4LTV10>JR\:>0@XZ;6:NVP1YC=2GXKB@:;LW[G\eKnffx]i}foo08J42159M54633G;:=95A1007?K76;=1E=<:;;O3211=I98759M54>33G;:5>5A1368J447<2D:><:4N0010>H6::>0B<<;4:L26022618J4533G;8=>5A1518J4343G;=?6@>729M5=5H59:1E>?=4N310?K43;2D99>5A2718J7143G83?6@=929M755;<;O157>H4?:1E?5=4N2;0?K27;2D?=>5A4318J1543G>??6@;529M035H0:2D2j6@M_CWPTLHXX[E[_:5AEUULVN7W63[o0^LCM17]P5=YT;?k0^HOK_GKQWQeTBIMU\EIZG_C38W45<[@GTOBBCIRKLJZEOMJA=7^AZRBG4?VTQIEUJ;6]]V@N\F1=T[[K?7^]]B59W]UC4:2_;#j|i.sd,cf~)keas#@v`r^pg[uhszVmhSua}0123[Wct}e~:??5Z0.eqb+ta'nis"nbdx.O{kwYulVzexQhc^zlv5679VXnxb{1208Q5)`zo$yj"ilx/aoo})JpfxT~iQnup\cfYg{:;6[?/fpe*w`(ojr%oaew/LzlvZtcWyd~Ril_ymq4563W[oxyaz>339V4*aun'xm#jmw.bnh|*Kg{UyhR~ats]dgZ~hz9:;9R\jstnw564<]9%l~k }f.e`|+ekcq%Ftb|Pre]sjqtXojUsc>?07]Qavsk|8997X> gsd-vc)`kq$h`fv Mymq[wbXxg~ySjmPxnp3451XZly~`y?<2:W3+bta&{l$knv!cmi{+H~hzVxoS}`{r^e`[}iu89:3S_k|umv277=R8&myj#|i/fa{*fjlp&GscQxr^rmpwY`kVrd~=>?0^Pfwpjs9:80Y=!hrg,qb*adp'iggu!Bxnp\swYwf}xTknQwos2344YUmzgx<==;T2,cw`)zo%lou lljz,I}iuW~xT|cz}_fa\|jt7898T^h}zlu306>S7'nxm"h gbz-gim'Drd~Ry}_qlwvZadWqey<=><_Sgpqir6;;1^<"i}f/pe+be&jf`t"Cwos]tvZvi|{UloRv`r1230ZTb{|f=><4U1-dvc(un&mht#mcky-N|jtX{U{by|Pgb]{kw678<5Z0.eqb+ta'nis"nbdx.pg[uhszVhbb1?1209V4*aun'xm#jmw.bnh|*tcWyd~Rlfn=0=64=R8&myj#|i/fa{*fjlp&xoS}`{r^`jj959:81^<"i}f/pe+be&jf`t"|k_qlwvZdnf5>5><5Z0.eqb+ta'nis"nbdx.pg[uhszVhbb1;1209V4*aun'xm#jmw.bnh|*tcWyd~Rlfn=4=64=R8&myj#|i/fa{*fjlp&xoS}`{r^`jj919:81^<"i}f/pe+be&jf`t"|k_qlwvZdnf525><5Z0.eqb+ta'nis"nbdx.pg[uhszVhbb171219V4*aun'xm#jmw.bnh|*tcWyd~Rlfn^314>S7'nxm"h gbz-gim'{nT|cz}_ckm[7473\:$kh!rg-dg}(ddbr$~iQnup\flhX;;:0Y=!hrg,qb*adp'iggu!}d^rmpwYeagU?>=5Z0.eqb+ta'nis"nbdx.pg[uhszVhbbR;=0:W3+bta&{l$knv!cmi{+wbXxg~ySoga_703?P6(o{l%~k!hcy,`hn~(zmU{by|Pbhl\376<]9%l~k }f.e`|+ekcq%yhR~ats]amkY?:91^<"i}f/pe+be&jf`t"|k_qlwvZdnfV39:6[?/fpe*w`(ojr%oaew/sf\tkruWkceSua}012362=R8&myj#|i/fa{*fjlp&xoS}`{r^`jjZ~hz9:;<<<9;T2,cw`)zo%lou lljz,vaYwf}xTnd`Pxnp34575?2_;#j|i.sd,cf~)keas#jPpovq[goiWqey<=>>1348Q5)`zo$yj"ilx/aoo})ulVzexQmio]{kw678;8<7X> gsd-vc)`kq$h`fv re]sjqtXj`dTtb|?010263=R8&myj#|i/fa{*fjlp&xoS}`{r^`jjZ~hz9:;??94U1-dvc(un&mht#mcky-q`Zvi|{UiecQwos234645>2_;#j|i.sd,cf~)keas#jPpovq[goiWqey<=>;269V4*aun'xm#jmw.bnh|*tcWyd~Rlfn^zlv567<88=7X> gsd-vc)`kq$h`fv re]sjqtXj`dTtb|?01713>S7'nxm"h gbz-gim'{nT|cz}_ckm[}iu89:>=?84U1-dvc(un&mht#mcky-q`Zvi|{UiecQwos23434?3\:$kh!rg-dg}(ddbr$~iQnup\flhXpfx;<=8>1358Q5)`zo$yj"ilx/aoo})ulVzexQmio]{kw678?89n6[?/fpe*w`(ojr%oaew/sf\tkruWkceSua}0125[gbc8;<0Y=!hrg,qb*adp'iggu!}d^rmpwYeagUsc>?0604?P6(o{l%~k!hcy,`hn~(zmU{by|Pbhl\|jt789=:>=5Z0.eqb+ta'nis"nbdx.pg[uhszVmh0=0=0:W3+bta&{l$knv!cmi{+wbXxg~ySjm31?03?P6(o{l%~k!hcy,`hn~(zmU{by|Pgb>1:76<]9%l~k }f.e`|+ekcq%yhR~ats]dg959:91^<"i}f/pe+be&jf`t"|k_qlwvZad4=49<6[?/fpe*w`(ojr%oaew/sf\tkruWni793328Q5)`zo$yj"ilx/aoo})ulVzexQhc=5=65=R8&myj#|i/fa{*fjlp&xoS}`{r^e`8=8582_;#j|i.sd,cf~)keas#jPpovq[be;17;m7X> gsd-vc)`kq$h`fv re]sjqtXojU;=k5Z0.eqb+ta'nis"nbdx.pg[uhszVmhS;m7X> gsd-vc)`kq$h`fv re]sjqtXojU3=k5Z0.eqb+ta'nis"nbdx.pg[uhszVmhS4<9;T2,cw`)zo%lou lljz,vaYwf}xTknQnssgd8585>2_;#j|i.sd,cf~)keas#jPpovq[beXizxnk1?1279V4*aun'xm#jmw.bnh|*tcWyd~Ril_`qqab:56;<0Y=!hrg,qb*adp'iggu!}d^rmpwY`kVkx~hi33?05?P6(o{l%~k!hcy,`hn~(zmU{by|Pgb]bwwc`4=49:6[?/fpe*w`(ojr%oaew/sf\tkruWniTm~|jg=7=63=R8&myj#|i/fa{*fjlp&xoS}`{r^e`[duumn6=2?84U1-dvc(un&mht#mcky-q`Zvi|{UloRo|rde?3;413\:$kh!rg-dg}(ddbr$~iQnup\cfYf{{ol050=6:W3+bta&{l$knv!cmi{+wbXxg~ySjmParpfc9?9:<1^<"i}f/pe+be&jf`t"|k_qlwvZadWhyyijQ?249V4*aun'xm#jmw.bnh|*tcWyd~Ril_`qqabY6:<1^<"i}f/pe+be&jf`t"|k_qlwvZadWhyyijQ=249V4*aun'xm#jmw.bnh|*tcWyd~Ril_`qqabY4:<1^<"i}f/pe+be&jf`t"|k_qlwvZadWhyyijQ;249V4*aun'xm#jmw.bnh|*tcWyd~Ril_`qqabY2:<1^<"i}f/pe+be&jf`t"|k_qlwvZadWhyyijQ9249V4*aun'xm#jmw.bnh|*tcWyd~Ril_`qqabY0:<1^<"i}f/pe+be&jf`t"|k_qlwvZadWhyyijQ7249V4*aun'xm#jmw.bnh|*tcWyd~Ril_`qqabY>:01^<"i}f/pe+be&jf`t"|k_qlwvZadWhyyijQk1=3=6<=R8&myj#|i/fa{*fjlp&xoS}`{r^e`[duumnUo=1<1289V4*aun'xm#jmw.bnh|*tcWyd~Ril_`qqabYc9595>45Z0.eqb+ta'nis"nbdx.pg[uhszVmhSl}}ef]g5929:01^<"i}f/pe+be&jf`t"|k_qlwvZadWhyyijQk1=7=6<=R8&myj#|i/fa{*fjlp&xoS}`{r^e`[duumnUo=181289V4*aun'xm#jmw.bnh|*tcWyd~Ril_`qqabYc95=5>45Z0.eqb+ta'nis"nbdx.pg[uhszVmhSl}}ef]g59>9:01^<"i}f/pe+be&jf`t"|k_qlwvZadWhyyijQk1=;=6==R8&myj#|i/fa{*fjlp&xoS}`{r^e`[duumnUo=R?=8:W3+bta&{l$knv!cmi{+wbXxg~ySjmParpfcZb6W;837X> gsd-vc)`kq$h`fv re]sjqtXojUjkh_e3\77><]9%l~k }f.e`|+ekcq%yhR~ats]dgZgtzlmTh55Z0.eqb+ta'nis"nbdx.pg[uhszVmhSl}}ef]g5Z?5=2_;#j|i.sd,cf~)keas#jPpovq[beXpfx;<=>=5:W3+bta&{l$knv!cmi{+wbXxg~ySjmPxnp34575=2_;#j|i.sd,cf~)keas#jPpovq[beXpfx;<=<=5:W3+bta&{l$knv!cmi{+wbXxg~ySjmPxnp34555=2_;#j|i.sd,cf~)keas#jPpovq[beXpfx;<=:=5:W3+bta&{l$knv!cmi{+wbXxg~ySjmPxnp34535=2_;#j|i.sd,cf~)keas#jPpovq[beXpfx;<=8=5:W3+bta&{l$knv!cmi{+wbXxg~ySjmPxnp34515=2_;#j|i.sd,cf~)keas#jPpovq[beXpfx;<=6=1:W3+bta&{l$knv!cmi{+rtXxg~ySoga<1<15>S7'nxm"h gbz-gim'~xT|cz}_ckm848592_;#j|i.sd,cf~)keas#z|Ppovq[goi4;49=6[?/fpe*w`(ojr%oaew/vp\tkruWkce0>0=1:W3+bta&{l$knv!cmi{+rtXxg~ySoga<5<15>S7'nxm"h gbz-gim'~xT|cz}_ckm808592_;#j|i.sd,cf~)keas#z|Ppovq[goi4?49=6[?/fpe*w`(ojr%oaew/vp\tkruWkce0:0=1:W3+bta&{l$knv!cmi{+rtXxg~ySoga<9<14>S7'nxm"h gbz-gim'~xT|cz}_ckm[5473\:$kh!rg-dg}(ddbr${Qnup\flhX9;:0Y=!hrg,qb*adp'iggu!xr^rmpwYeagU9>=5Z0.eqb+ta'nis"nbdx.uq[uhszVhbbR==0:W3+bta&{l$knv!cmi{+rtXxg~ySoga_503?P6(o{l%~k!hcy,`hn~({U{by|Pbhl\176<]9%l~k }f.e`|+ekcq%|~R~ats]amkY1:91^<"i}f/pe+be&jf`t"y}_qlwvZdnfV=9<6[?/fpe*w`(ojr%oaew/vp\tkruWkceS5<9;T2,cw`)zo%lou lljz,swYwf}xTnd`Pxnp34565?2_;#j|i.sd,cf~)keas#z|Ppovq[goiWqey<=>?1348Q5)`zo$yj"ilx/aoo})pzVzexQmio]{kw67888<7X> gsd-vc)`kq$h`fv ws]sjqtXj`dTtb|?013263=R8&myj#|i/fa{*fjlp&}yS}`{r^`jjZ~hz9:;>?94U1-dvc(un&mht#mcky-tvZvi|{UiecQwos234775>2_;#j|i.sd,cf~)keas#z|Ppovq[goiWqey<=><269V4*aun'xm#jmw.bnh|*quWyd~Rlfn^zlv567;;8=7X> gsd-vc)`kq$h`fv ws]sjqtXj`dTtb|?01613>S7'nxm"h gbz-gim'~xT|cz}_ckm[}iu89:?=?84U1-dvc(un&mht#mcky-tvZvi|{UiecQwos2340403\:$kh!rg-dg}(ddbr${Qnup\flhXpfx;<=;>279V4*aun'xm#jmw.bnh|*quWyd~Rlfn^zlv567>;20Y=!hrg,qb*adp'iggu!xr^rmpwYeagUsc>?073262=R8&myj#|i/fa{*fjlp&}yS}`{r^`jjZ~hz9:;:?;5Z0.eqb+ta'nis"nbdx.uq[uhszVhbbRv`r123371<]9%l~k }f.e`|+ekcq%|~R~ats]amkYg{:;<:?=0:W3+bta&{l$knv!cmi{+rtXxg~ySjm30?03?P6(o{l%~k!hcy,`hn~({U{by|Pgb>2:76<]9%l~k }f.e`|+ekcq%|~R~ats]dg949:91^<"i}f/pe+be&jf`t"y}_qlwvZad4:49<6[?/fpe*w`(ojr%oaew/vp\tkruWni783328Q5)`zo$yj"ilx/aoo})pzVzexQhc=4=65=R8&myj#|i/fa{*fjlp&}yS}`{r^e`828582_;#j|i.sd,cf~)keas#z|Ppovq[be;07;m7X> gsd-vc)`kq$h`fv ws]sjqtXojU;=k5Z0.eqb+ta'nis"nbdx.uq[uhszVmhS;m7X> gsd-vc)`kq$h`fv ws]sjqtXojU3>;5Z0.eqb+ta'nis"nbdx.uq[uhszVmhSl}}ef>3:70<]9%l~k }f.e`|+ekcq%|~R~ats]dgZgtzlm7=3<9;T2,cw`)zo%lou lljz,swYwf}xTknQnssgd8785>2_;#j|i.sd,cf~)keas#z|Ppovq[beXizxnk1=1279V4*aun'xm#jmw.bnh|*quWyd~Ril_`qqab:36;<0Y=!hrg,qb*adp'iggu!xr^rmpwY`kVkx~hi35?05?P6(o{l%~k!hcy,`hn~({U{by|Pgb]bwwc`4?49:6[?/fpe*w`(ojr%oaew/vp\tkruWniTm~|jg=5=63=R8&myj#|i/fa{*fjlp&}yS}`{r^e`[duumn632?;4U1-dvc(un&mht#mcky-tvZvi|{UloRo|rde\473<]9%l~k }f.e`|+ekcq%|~R~ats]dgZgtzlmT=?;4U1-dvc(un&mht#mcky-tvZvi|{UloRo|rde\673<]9%l~k }f.e`|+ekcq%|~R~ats]dgZgtzlmT??;4U1-dvc(un&mht#mcky-tvZvi|{UloRo|rde\073<]9%l~k }f.e`|+ekcq%|~R~ats]dgZgtzlmT9?;4U1-dvc(un&mht#mcky-tvZvi|{UloRo|rde\273<]9%l~k }f.e`|+ekcq%|~R~ats]dgZgtzlmT;?;4U1-dvc(un&mht#mcky-tvZvi|{UloRo|rde\<7?<]9%l~k }f.e`|+ekcq%|~R~ats]dgZgtzlmTh<2?>3;8Q5)`zo$yj"ilx/aoo})pzVzexQhc^cpv`aXl86:2?74U1-dvc(un&mht#mcky-tvZvi|{UloRo|rde\`4:56;30Y=!hrg,qb*adp'iggu!xr^rmpwY`kVkx~hiPd0>0:7?<]9%l~k }f.e`|+ekcq%|~R~ats]dgZgtzlmTh<2;>3;8Q5)`zo$yj"ilx/aoo})pzVzexQhc^cpv`aXl86>2?74U1-dvc(un&mht#mcky-tvZvi|{UloRo|rde\`4:16;30Y=!hrg,qb*adp'iggu!xr^rmpwY`kVkx~hiPd0>4:7?<]9%l~k }f.e`|+ekcq%|~R~ats]dgZgtzlmTh<27>3:8Q5)`zo$yj"ilx/aoo})pzVzexQhc^cpv`aXl8U;>55Z0.eqb+ta'nis"nbdx.uq[uhszVmhSl}}ef]g5Z7502_;#j|i.sd,cf~)keas#z|Ppovq[beXizxnkRj>_30;?P6(o{l%~k!hcy,`hn~({U{by|Pgb]bwwc`Wm;T??64U1-dvc(un&mht#mcky-tvZvi|{UloRo|rde\`4Y3:11^<"i}f/pe+be&jf`t"y}_qlwvZadWhyyijQk1^71<>S7'nxm"h gbz-gim'~xT|cz}_fa\evtboVn:S;<7;T2,cw`)zo%lou lljz,swYwf}xTknQnssgd[a7X?;20Y=!hrg,qb*adp'iggu!xr^rmpwY`kVkx~hiPd0];60=R8&myj#|i/fa{*fjlp&}yS}`{r^e`[}iu89:;>85Z0.eqb+ta'nis"nbdx.uq[uhszVmhSua}012260=R8&myj#|i/fa{*fjlp&}yS}`{r^e`[}iu89:9>85Z0.eqb+ta'nis"nbdx.uq[uhszVmhSua}012060=R8&myj#|i/fa{*fjlp&}yS}`{r^e`[}iu89:?>85Z0.eqb+ta'nis"nbdx.uq[uhszVmhSua}012660=R8&myj#|i/fa{*fjlp&}yS}`{r^e`[}iu89:=>85Z0.eqb+ta'nis"nbdx.uq[uhszVmhSua}012475=R8&myj#|i/fn3*wb(o{;%~kyit.Onq}YUIDUYHRKA_GUEP775n2_;#j|i.sd,ci6)zm%l~< }fvdw+HkrpVXJAR\JGNWW[@H69;n0Y=!hrg,qb*ak8'xo#j|>.sdtbq)d}{xTjzh{_rvbp`:76;n0Y=!hrg,qb*ak8'xo#j|>.sdtbq)d}{xTjzh{_rvbp`:66;i0Y=!hrg,qb*ak8'xo#j|>.sdtbq)d}{xTjzh{_rvbp`Y7:j1^<"i}f/pe+bj7&{n$k?!rguep*erz{Um{kzPsucwaZ74=2_;#j|i.sd,ci6)zm%l~< }fvdw+fsuzVl|jyQ|t`vf[hs89::0=0<6:W3+bta&{l$ka>!re-dv4(un~l#n{}r^dtbqYt|h~nS`{w01228586;<1^<"i}f/pe+bj7&{n$k?!rguep*erz{Um{kzPsucwaZkrp9:;=1?1379V4*aun'xm#jb?.sf,cw7)zo}mx"mzrs]escrX{}kiRczx12359799;20Y=!hrg,qb*ak8'xo#j|>.sdtbq)bey~rSkyit^da62=R8&myj#|i/fn3*wb(o{;%~kyit.gntqXn~lSd?319V4*aun'xm#jb?.sf,cw7)zo}mx"kbpu{\br`sW`Ufyu>?0131=>S7'nxm"h gm2-va)`zhy%~~z|/b2,gdtuqgo0=0=9:W3+bta&{l$ka>!re-dvdu)zz~x#n> c`pq}kcs484956[?/fpe*w`(oe:%~i!hr`q-vvrt'j:$ol|}yogw878512_;#j|i.sd,ci6)zm%l~l}!rrvp+f6(khxyuck{<2<1b>S7'nxm"h gm2-va)`zhy%~~z|/b2,chs&ngP

<1<17>S7'nxm"h gm2-va)`zhy%~~z|/b2,r4:66;90Y=!hrg,qb*ak8'xo#j|ns/pppv)d8&|:0?0=3:W3+bta&{l$ka>!re-dvdu)zz~x#n> v0>0:75<]9%l~k }f.eo4+tc'nxj#||tr-`4*p64=49n6[?/fpe*w`(oe:%~i!hr`q-vvrt'j:$z?0131f>S7'nxm"h gm2-va)`zhy%~~z|/b2,r4Y3Whdo<=>?13;8Q5)`zo$yj"ic0/pg+btf{'xxx~!l1.abvwim}6;2?74U1-dvc(un&mg<#|k/fpbw+tt|z%h="mnrs{maq:66;30Y=!hrg,qb*ak8'xo#j|ns/pppv)d9&ij~waeu>1:7?<]9%l~k }f.eo4+tc'nxj#||tr-`5*efz{seiy2<>3d8Q5)`zo$yj"ic0/pg+btf{'xxx~!l1.enq}(`eR:V"jc>.l31b>S7'nxm"h gm2-va)`zhy%~~z|/b3,chs&ngP=P hmr,nw7`<]9%l~k }f.eo4+tc'nxj#||tr-`5*aj}q$laV318Q5)`zo$yj"ic0/pg+btf{'xxx~!l1.t28485;2_;#j|i.sd,ci6)zm%l~l}!rrvp+f7(~8692?=4U1-dvc(un&mg<#|k/fpbw+tt|z%h="x><2<17>S7'nxm"h gm2-va)`zhy%~~z|/b3,r4:36;h0Y=!hrg,qb*ak8'xo#j|ns/pppv)d9&|:S=Qnne234575j2_;#j|i.sd,ci6)zm%l~l}!rrvp+f7(~8U:Sl`k012357d<]9%l~k }f.eo4+tc'nxj#||tr-`5*p6W;Ujbi>?0131f>S7'nxm"h gm2-va)`zhy%~~z|/b3,r4Y4Whdo<=>?13`8Q5)`zo$yj"ic0/pg+btf{'xxx~!l1.t2[1Yffm:;<=?=0:W3+bta&{l$ka>!re-dvdu)zz~x#nabp103?P6(o{l%~k!hl1,q`*auiz$yy} cnos57?<]9%l~k }f.eo4+tc'nxj#||tr-qehYbey~rSklPi228Q5)`zo$yj"ic0/pg+btf{'xxx~!}al]fiur~WohTeRa}012374=R8&myj#|i/fn3*wb(o{kx"}{s.pbiZcjx}sTjoQf_np34566::1^<"i}f/pe+bj7&{n$~}`{r.O`kphsWje~by<;;T2,cw`)zo%l`= }d.psjqt(Eje~byQlotlw572<]9%l~k }f.eo4+tc'{zex!BcnwmpZeh}g~9>95Z0.eqb+ta'nf;"j rqlwv*Kdg|dSnaznu110>S7'nxm"h gm2-va)uxg~y#@m`uov\gjsi|=8?7X> gsd-vc)`d9$yh"|nup,Ifirf}Uhcx`{5368Q5)`zo$yj"ic0/pg+wvi|{%Fob{at^alqkr1:=1^<"i}f/pe+bj7&{n$~}`{r.O`kphsWje~by9=4:W3+bta&{l$ka>!re-qtkru'DidyczPcnwmp=433\:$kh!rg-dh5(ul&x{by| MbmvjqYdg|d5?74U1-dvc(un&mg<#|k/srmpw)JkfexRm`uov\g|:76;i0Y=!hrg,qb*ak8'xo#~ats-Ngjsi|VidyczPcx>3:Zts:01^<"i}f/pe+bj7&{n$~}`{r.O`kphsWje~byQly=3=6f=R8&myj#|i/fn3*wb(zyd~"Clotlw[firf}Uhu1?1_sv1=>S7'nxm"h gm2-va)uxg~y#@m`uov\gjsi|Vir0?0=c:W3+bta&{l$ka>!re-qtkru'DidyczPcnwmpZe~4;4T~y<6;T2,cw`)zo%l`= }d.psjqt(Eje~byQlotlw[f;;78h7X> gsd-vc)`d9$yh"|nup,Ifirf}Uhcx`{_b{?7;Yu|;30Y=!hrg,qb*ak8'xo#~ats-Ngjsi|VidyczPcx>7:7e<]9%l~k }f.eo4+tc'{zex!BcnwmpZeh}g~Tot2;>^pw6<=R8&myj#|i/fn3*wb(zyd~"Clotlw[firf}Uhu1;12b9V4*aun'xm#jb?.sf,vuhsz&Ghcx`{_bmvjqYdq5?5Sz=9:W3+bta&{l$ka>!re-qtkru'DidyczPcnwmpZe~4?49o6[?/fpe*w`(oe:%~i!}povq+Heh}g~Tob{at^az838Xz}827X> gsd-vc)`d9$yh"|nup,Ifirf}Uhcx`{_b{?3;4d3\:$kh!rg-dh5(ul&x{by| MbmvjqYdg|dSnw37?]qp7?<]9%l~k }f.eo4+tc'{zex!BcnwmpZeh}g~Tot27>3a8Q5)`zo$yj"ic0/pg+wvi|{%Fob{at^alqkrXkp632R|{2`9V4*aun'xm#jb?.sf,vuhsz&Ghcx`{_bmvjqYg{6;2?o4U1-dvc(un&mg<#|k/srmpw)JkfexRm`uov\|jt;978j7X> gsd-vc)`d9$yh"|nup,Ifirf}Uhcx`{_ymq8785i2_;#j|i.sd,ci6)zm%y|cz}/LalqkrXkfexRv`r=1=6d=R8&myj#|i/fn3*wb(zyd~"Clotlw[firf}Usc2;>3c8Q5)`zo$yj"ic0/pg+wvi|{%Fob{at^alqkrXpfx793;:7g<]9%l~k }f.eo4+tc'{zex!BcnwmpZeh}g~Ttb|39?0g?P6(o{l%~k!hl1,q`*twf}x$Anaznu]`kphsWqey040Pru3e?P6(o{l%~k!hl1,q`*twf}x$ob{at=2=5c=R8&myj#|i/fn3*wb(zyd~"m`uov?5;7a3\:$kh!rg-dh5(ul&x{by| cnwmp9499o1^<"i}f/pe+bj7&{n$~}`{r.alqkr;;7;m7X> gsd-vc)`d9$yh"|nup,gjsi|5>5=k5Z0.eqb+ta'nf;"j rqlwv*eh}g~793?i;T2,cw`)zo%l`= }d.psjqt(kfex1811g9V4*aun'xm#jb?.sf,vuhsz&idycz37?3e?P6(o{l%~k!hl1,q`*twf}x$ob{at=:=5c=R8&myj#|i/fn3*wb(zyd~"m`uov?=;7b3\:$kh!rg-dh5(ul&x{by| cnwmpZ66m2_;#j|i.sd,ci6)zm%y|cz}/bmvjqY69l1^<"i}f/pe+bj7&{n$~}`{r.alqkrX:8o0Y=!hrg,qb*ak8'xo#~ats-`kphsW:;n7X> gsd-vc)`d9$yh"|nup,gjsi|V>:i6[?/fpe*w`(oe:%~i!}povq+firf}U>=h5Z0.eqb+ta'nf;"j rqlwv*eh}g~T:e:W3+bta&{l$ka>!re-qtkru'je~byQ6239V4*aun'xm#jb?.sf,vuhsz&idyczPd0>3:74<]9%l~k }f.eo4+tc'{zex!lotlw[a7;97897X> gsd-vc)`d9$yh"|nup,gjsi|Vn:0?0=2:W3+bta&{l$ka>!re-qtkru'je~byQk1=1=67=R8&myj#|i/fn3*wb(zyd~"m`uov\`4:36;80Y=!hrg,qb*ak8'xo#~ats-`kphsWm;793<=;T2,cw`)zo%l`= }d.psjqt(kfexRj><7<16>S7'nxm"h gm2-va)uxg~y#naznu]g5919:;1^<"i}f/pe+bj7&{n$~}`{r.alqkrXl8632?<4U1-dvc(un&mg<#|k/srmpw)dg|dSi?39?02?P6(o{l%~k!hl1,q`*twf}x$ob{at^f2[5463\:$kh!rg-dh5(ul&x{by| cnwmpZb6W88:7X> gsd-vc)`d9$yh"|nup,gjsi|Vn:S?<>;T2,cw`)zo%l`= }d.psjqt(kfexRj>_202?P6(o{l%~k!hl1,q`*twf}x$ob{at^f2[1463\:$kh!rg-dh5(ul&x{by| cnwmpZb6W<8:7X> gsd-vc)`d9$yh"|nup,gjsi|Vn:S;<>;T2,cw`)zo%l`= }d.psjqt(kfexRj>_602?P6(o{l%~k!hl1,q`*twf}x$ob{at^f2[=463\:$kh!rg-dh5(ul&x{by| cnwmpZb6W08?7X> gsd-vc)`d9$yh"|nup,gjsi|Vddx=>?13;8Q5)`zo$yj"ic0/uq+bqf{'}xx~!l1.abvwim}6;2?74U1-dvc(un&mg<#y}/fubw+qt|z%h="mnrs{maq:66;30Y=!hrg,qb*ak8'}y#jyns/uppv)d9&ij~waeu>1:7?<]9%l~k }f.eo4+qu'n}j#y|tr-`5*efz{seiy2<>3d8Q5)`zo$yj"ic0/uq+bqf{'}xx~!l1.enq}(`eR:V"jc>.l31b>S7'nxm"h gm2-sw)`hy%{~z|/b3,chs&ngP=P hmr,nw7`<]9%l~k }f.eo4+qu'n}j#y|tr-`5*aj}q$laV318Q5)`zo$yj"ic0/uq+bqf{'}xx~!l1.t28485;2_;#j|i.sd,ci6){%l{l}!wrvp+f7(~8692?=4U1-dvc(un&mg<#y}/fubw+qt|z%h="x><2<17>S7'nxm"h gm2-sw)`hy%{~z|/b3,r4:36;h0Y=!hrg,qb*ak8'}y#jyns/uppv)d9&|:S=Qnne234575j2_;#j|i.sd,ci6){%l{l}!wrvp+f7(~8U:Sl`k012357d<]9%l~k }f.eo4+qu'n}j#y|tr-`5*p6W;Ujbi>?0131f>S7'nxm"h gm2-sw)`hy%{~z|/b3,r4Y4Whdo<=>?13`8Q5)`zo$yj"ic0/uq+bqf{'}xx~!l1.t2[1Yig}:;<=?=9:W3+bta&{l$ka>!ws-dsdu)z~x#n< c`pq}kcs494956[?/fpe*w`(oe:%{!hw`q-svrt'j8$ol|}yogw848512_;#j|i.sd,ci6){%l{l}!wrvp+f4(khxyuck{<3<1=>S7'nxm"h gm2-sw)`hy%{~z|/b0,gdtuqgo0>0=f:W3+bta&{l$ka>!ws-dsdu)z~x#n< glw{*bk\8T$la< b13d8Q5)`zo$yj"ic0/uq+bqf{'}xx~!l2.enq}(`eR;V"jc|.lq1b>S7'nxm"h gm2-sw)`hy%{~z|/b0,chs&ngP>P hmr,nw7`<]9%l~k }f.eo4+qu'n}j#y|tr-`6*aj}q$laV=R.fop*hu5n2_;#j|i.sd,ci6){%l{l}!wrvp+f4(ods"jcT4\,div(j{;90Y=!hrg,qb*ak8'}y#jyns/uppv)d:&|:0=0=3:W3+bta&{l$ka>!ws-dsdu)z~x#n< v0>2:75<]9%l~k }f.eo4+qu'n}j#y|tr-`6*p64;49?6[?/fpe*w`(oe:%{!hw`q-svrt'j8$z<2<>318Q5)`zo$yj"ic0/uq+bqf{'}xx~!l2.t28185j2_;#j|i.sd,ci6){%l{l}!wrvp+f4(~8U;Sl`k012357d<]9%l~k }f.eo4+qu'n}j#y|tr-`6*p6W8Ujbi>?0131f>S7'nxm"h gm2-sw)`hy%{~z|/b0,r4Y5Whdo<=>?13`8Q5)`zo$yj"ic0/uq+bqf{'}xx~!l2.t2[6Yffm:;<=?=b:W3+bta&{l$ka>!ws-dsdu)z~x#n< v0]7[kis89:;=?>4U1-dvc(un&mg<#y}/fubw+qt|z%hc`~>219V4*aun'xm#jb?.vp,crgt&~y"m`mq01<>S7'nxm"h gm2-sw)`hy%{~z|/scn[cskdVliSd<:;T2,cw`)zo%l`= xr.etev(p{}y$~lcPftno[l4c3\:$kh!rg-dh5(pz&m|m~ xsuq,vdkXn|fgSdQbuy23454b3\:$kh!rg-dh5(pz&m|m~ xsuq,vdkXn|fgSdQbuy234576l2_;#j|i.sd,ci6){%ym`Qxr^gm[l75;2_;#j|i.sd,ci6){%||cz}/LalqkrXkfex?:4U1-dvc(un&mg<#y}/vrmpw)JkfexRm`uov261=R8&myj#|i/fn3*rt(yd~"Clotlw[firf}8986[?/fpe*w`(oe:%{!xpovq+Heh}g~Tob{at207?P6(o{l%~k!hl1,tv*qwf}x$Anaznu]`kphs<;>0Y=!hrg,qb*ak8'}y#z~ats-Ngjsi|Vidycz:259V4*aun'xm#jb?.vp,suhsz&Ghcx`{_bmvjq05<2_;#j|i.sd,ci6){%||cz}/LalqkrXkfex:<;;T2,cw`)zo%l`= xr.usjqt(Eje~byQlotlw<7?<]9%l~k }f.eo4+qu'~zex!BcnwmpZeh}g~Tot2?>3a8Q5)`zo$yj"ic0/uq+rvi|{%Fob{at^alqkrXkp6;2R|{289V4*aun'xm#jb?.vp,suhsz&Ghcx`{_bmvjqYdq5;5>n5Z0.eqb+ta'nf;"z| wqlwv*Kdg|dSnaznu]`}979W{~956[?/fpe*w`(oe:%{!xpovq+Heh}g~Tob{at^az8785k2_;#j|i.sd,ci6){%||cz}/LalqkrXkfexRmv<3<\vq4>3\:$kh!rg-dh5(pz&}{by| MbmvjqYdg|dSnw33?0`?P6(o{l%~k!hl1,tv*qwf}x$Anaznu]`kphsWjs7?3Q}t3;8Q5)`zo$yj"ic0/uq+rvi|{%Fob{at^alqkrXkp6?2?m4U1-dvc(un&mg<#y}/vrmpw)JkfexRm`uov\g|:36Vx>45Z0.eqb+ta'nf;"z| wqlwv*Kdg|dSnaznu]`}939:j1^<"i}f/pe+bj7&~x${}`{r.O`kphsWje~byQly=7=[wr512_;#j|i.sd,ci6){%||cz}/LalqkrXkfexRmv<7<1g>S7'nxm"h gm2-sw)pxg~y#@m`uov\gjsi|Vir0;0Pru0:?P6(o{l%~k!hl1,tv*qwf}x$Anaznu]`kphsWjs7;3 gsd-vc)`d9$|~"ynup,Ifirf}Uhcx`{_ymq8485i2_;#j|i.sd,ci6){%||cz}/LalqkrXkfexRv`r=0=6d=R8&myj#|i/fn3*rt(yd~"Clotlw[firf}Usc2<>3c8Q5)`zo$yj"ic0/uq+rvi|{%Fob{at^alqkrXpfx7834:7g<]9%l~k }f.eo4+qu'~zex!BcnwmpZeh}g~Ttb|38?0g?P6(o{l%~k!hl1,tv*qwf}x$Anaznu]`kphsWqey050Pru3e?P6(o{l%~k!hl1,tv*qwf}x$ob{at=2=5c=R8&myj#|i/fn3*rt(yd~"m`uov?5;7a3\:$kh!rg-dh5(pz&}{by| cnwmp9499o1^<"i}f/pe+bj7&~x${}`{r.alqkr;;7;m7X> gsd-vc)`d9$|~"ynup,gjsi|5>5=k5Z0.eqb+ta'nf;"z| wqlwv*eh}g~793?i;T2,cw`)zo%l`= xr.usjqt(kfex1811g9V4*aun'xm#jb?.vp,suhsz&idycz37?3e?P6(o{l%~k!hl1,tv*qwf}x$ob{at=:=5`=R8&myj#|i/fn3*rt(yd~"m`uov\44c<]9%l~k }f.eo4+qu'~zex!lotlw[47b3\:$kh!rg-dh5(pz&}{by| cnwmpZ46m2_;#j|i.sd,ci6){%||cz}/bmvjqY49l1^<"i}f/pe+bj7&~x${}`{r.alqkrX<8o0Y=!hrg,qb*ak8'}y#z~ats-`kphsW<;n7X> gsd-vc)`d9$|~"ynup,gjsi|V<:i6[?/fpe*w`(oe:%{!xpovq+firf}U<=h5Z0.eqb+ta'nf;"z| wqlwv*eh}g~T4?<4U1-dvc(un&mg<#y}/vrmpw)dg|dSi?30?01?P6(o{l%~k!hl1,tv*qwf}x$ob{at^f28485:2_;#j|i.sd,ci6){%||cz}/bmvjqYc9585>?5Z0.eqb+ta'nf;"z| wqlwv*eh}g~Th<2<>308Q5)`zo$yj"ic0/uq+rvi|{%hcx`{_e3?0;453\:$kh!rg-dh5(pz&}{by| cnwmpZb64<49>6[?/fpe*w`(oe:%{!xpovq+firf}Uo=181239V4*aun'xm#jb?.vp,suhsz&idyczPd0>4:74<]9%l~k }f.eo4+qu'~zex!lotlw[a7;078:7X> gsd-vc)`d9$|~"ynup,gjsi|Vn:S=<>;T2,cw`)zo%l`= xr.usjqt(kfexRj>_002?P6(o{l%~k!hl1,tv*qwf}x$ob{at^f2[7463\:$kh!rg-dh5(pz&}{by| cnwmpZb6W:8:7X> gsd-vc)`d9$|~"ynup,gjsi|Vn:S9<>;T2,cw`)zo%l`= xr.usjqt(kfexRj>_402?P6(o{l%~k!hl1,tv*qwf}x$ob{at^f2[3463\:$kh!rg-dh5(pz&}{by| cnwmpZb6W>8:7X> gsd-vc)`d9$|~"ynup,gjsi|Vn:S5<=;T2,cw`)zo%l`= xr.usjqt(kfexRj=<1<16>S7'nxm"h gm2-sw)pxg~y#naznu]g6979:;1^<"i}f/pe+bj7&~x${}`{r.alqkrXl;692?<4U1-dvc(un&mg<#y}/vrmpw)dg|dSi<33?01?P6(o{l%~k!hl1,tv*qwf}x$ob{at^f18185:2_;#j|i.sd,ci6){%||cz}/bmvjqYc:5?5>?5Z0.eqb+ta'nf;"z| wqlwv*eh}g~Th?29>308Q5)`zo$yj"ic0/uq+rvi|{%hcx`{_e0?3;453\:$kh!rg-dh5(pz&}{by| cnwmpZb54149=6[?/fpe*w`(oe:%{!xpovq+firf}Uo>R>=1:W3+bta&{l$ka>!ws-ttkru'je~byQk2^315>S7'nxm"h gm2-sw)pxg~y#naznu]g6Z4592_;#j|i.sd,ci6){%||cz}/bmvjqYc:V99=6[?/fpe*w`(oe:%{!xpovq+firf}Uo>R:=1:W3+bta&{l$ka>!ws-ttkru'je~byQk2^715>S7'nxm"h gm2-sw)pxg~y#naznu]g6Z0592_;#j|i.sd,ci6){%||cz}/bmvjqYc:V=9=6[?/fpe*w`(oe:%{!xpovq+firf}Uo>R6=4:W3+bta&{l$ka>!ws-ttkru'je~byQaou2344703\:$kh!rg-nah)cg|~Te1>1199V4*aun'xm#`kb/emvpZo;994:46[?/fpe*w`(elg$hb{{_h>25;7?3\:$kh!rg-nah)cg|~Te1?=>0:8Q5)`zo$yj"cjm.flqqYn4895=55Z0.eqb+ta'dof#iazt^k?518602_;#j|i.sd,i`k(lfSd2>5?3;?P6(o{l%~k!bel-gkprXa5;=2<64U1-dvc(un&gna"j`uu]j84199>1^<"i}f/pe+hcj'me~xRg31?34?P6(o{l%~k!bel-gkprXa585=:5Z0.eqb+ta'dof#iazt^k?7;703\:$kh!rg-nah)cg|~Te1:1169V4*aun'xm#`kb/emvpZo;=7;<7X> gsd-vc)jmd%ocxzPi=4=52=R8&myj#|i/lgn+air|Vc7;3?8;T2,cw`)zo%fi`!kotv\m9>99>1^<"i}f/pe+hcj'me~xRg39?35?P6(o{l%~k!bel-gkprXaV:::6[?/fpe*w`(elg$hb{{_h]252=R8&myj#|i/lgn+air|VcT==?8;T2,cw`)zo%fi`!kotv\mZ769>1^<"i}f/pe+hcj'me~xRgP1334?P6(o{l%~k!bel-gkprXaV;8=:5Z0.eqb+ta'dof#iazt^k\51703\:$kh!rg-nah)cg|~TeR?:169V4*aun'xm#`kb/emvpZoX9?;<7X> gsd-vc)jmd%ocxzPi^3453=R8&myj#|i/lgn+air|VcT><84U1-dvc(un&gna"j`uu]j[6713\:$kh!rg-nah)cg|~TeR:>6:W3+bta&{l$ahc dnww[lY29?1^<"i}f/pe+hcj'me~xRgP6048Q5)`zo$yj"cjm.flqqYnW>;=7X> gsd-vc)jmd%ocxzPi^:22>S7'nxm"h mdo,`jssW`U2=45Z0.eqb+ta'dof#iazt^ofi9699h1^<"i}f/pe+hcj'me~xRcjm=33:4g<]9%l~k }f.ofi*bh}}Ufi`2>1?3b?P6(o{l%~k!bel-gkprXelg7=?0>a:W3+bta&{l$ahc dnww[hcj4895=l5Z0.eqb+ta'dof#iazt^ofi97368k0Y=!hrg,qb*kbe&ndyyQbel>21;7f3\:$kh!rg-nah)cg|~Tahc317<2e>S7'nxm"h mdo,`jssWdof0<91189V4*aun'xm#`kb/emvpZkbe5;5=45Z0.eqb+ta'dof#iazt^ofi949901^<"i}f/pe+hcj'me~xRcjm=1=5<=R8&myj#|i/lgn+air|Vgna1:1189V4*aun'xm#`kb/emvpZkbe5?5=45Z0.eqb+ta'dof#iazt^ofi909901^<"i}f/pe+hcj'me~xRcjm=5=5<=R8&myj#|i/lgn+air|Vgna161189V4*aun'xm#`kb/emvpZkbe535;95Z0.eqb+ta'dof#jlb.f`nc+aeenk%bjklc/`nc*dkcVgnaRijndpbpjt(~hfbh#m|ts-qehjhgyQ;Q#|nm/p,w6Yig`dbx#|nm.fsvdk)ly9=t<6!r`o2f>S7'nxm"h mdo,phvXzhgT~iQjn0a8Q5)`zo$yj"cjm.vntZtfeVxoSh`>169V4*aun'xm#ob_sgdkprXmg;o7X> gsd-vc)u{}hgg"|k_sqw[duumn8;7X> gsd-vc)u{}hgg"|k_sqw[duumnUo=?>4U1-dvc(un&xxxobd/sf\vvrXizxnkRj=1b9V4*aun'xm#}{bmi,vaYu{}Uhc`l>d:W3+bta&{l$~~zmlj-q`Ztt|Vidao?>e:W3+bta&{l$~~zmlj-q`Ztt|Vxnk1>11d9V4*aun'xm#}{bmi,vaYu{}Uyij2>>0g8Q5)`zo$yj"||tcnh+wbXzz~T~hi32?3g?P6(o{l%~k!}su`oo*tcW{ySkh_13g?P6(o{l%~k!}su`oo*tcW{ySkh_03g?P6(o{l%~k!}su`oo*tcW{ySkh_33g?P6(o{l%~k!}su`oo*quW{ySl}}ef03?P6(o{l%~k!}su`oo*quW{ySl}}ef]g576<]9%l~k }f.pppgjl'~xT~~zParpfcZb59j1^<"i}f/pe+wusjea${Q}su]`khd6l2_;#j|i.sd,vvredb%|~R||t^alig76m2_;#j|i.sd,vvredb%|~R||t^pfc9699l1^<"i}f/pe+wusjea${Q}su]qab:668n0Y=!hrg,qb*tt|kf`#z|Prrv\v`aX88n0Y=!hrg,qb*tt|kf`#z|Prrv\v`aX9h1^_H\PAMKBWf=R[LXTZD]FBMG0?SED12\BIZQ[YQG0?RCF;2]NNn5XRHVF[HICMVKh7Z\FTD]NKACXJm1\^DZJ_VKGPMYFl2]YEYKPWHFWLZD6l2RB@D@W-YFA$5(6(Z^^N->!1!CPGLO23QEYOT84XRVOMG1gkefyShctx`8eikh{}Umyab9;cc`opvc3kkhgx~Pm`phaw5bf|hUhcx`{(6+g?agsiVidycz'8(d8`drfWje~by27:1<4?adn|lxy:6jfn)2*2>bnf!;";6jfn)33-2=cag":=$94dhl+57/03mce$<=&7:fjj-73!>1oec&>5(58`lh/9?#<7iga(05*3>bnf!;3%:5kio*2=,0$94dhl+65/03mce$??&7:fjj-45!>1oec&=3(58`lh/:=#<7iga(37*3>bnf!8=%:5kio*13,15'8;ekm,7?.>2nbb%=&7:fjj-57!>1oec&<1(58`lh/;;#<7iga(21*3>bnf!9?%:5kio*01,01oec2>3?58`lh;9=4<7iga<07=3>bnf5;=2:5kio>23;12nbb1?17:fjj9476>1oec2=1?58`lh;:;4<7iga<31=3>bnf58?2:5kio>11;1;08;ekm8719?2nbb1<7>69gmk:517<0hd`32?58`lh;;94<7iga<23=3>bnf5992:5kio>07;14=7iga<9<5?aoi404<7iazt)2*3>bh}}":%55kotv+55/?3me~x%?>)99gkpr/9;#37iazt)30-==cg|~#=9'7;emvp-72!11ocxz'17+;?air|!;<%:5kotv+6,1'8;emvp-2.?2ndyy&:)69gkpr/> =0hb{{(6+4?air|!2";6j`uu*:-2=cg|~7<364dnww846902ndyy2>1?:8`jss488546j`uu>27;>bh}}6:;7>18:flqq:6?7=0hb{{<0<4?air|585;6j`uu>0:2=cg|~78394dnww80803me~x1817:flqq:06>1ocxz38?58`jss40437hjff3ld`0=bey~r>k5iigm\c`hbzh~d~Rx9_0.#\ljnfq*HC_K/Gdlfvdrhz);9"=?v<6^0`hnY4>}e:4>o4fhdl[}jipV?:>u=9_3aooZ51|f;3 kgio^efj`tf|fxTz;Q>,OMMA)HHFL>;=6hffn]{hk~X=88s?;Q=cmi\73rh91&mekaPgdlfvdrhzV|=S<"tc^jbwZoi|Vigg0>#c^jbwZuu{}7; nQ}d^dqat;6$jUnbllce^pppZu~fj7: nQgar]q`Zbf|hUhcx`{=1.`[aoiW~coxe3<6-a\lduX{UomyoPcnwmp86+kVl~`aQil`ep[wusWkg1="l_hosh`kbf}keb`Ptxrf97*dW|ynShcmeeff`Ztbo4:'oRy}_gpfu87+kVxiRj`uu]qwq;6$jU~bik}fmmt[iip59&hSeo|_ntfvcjh4:'oR~}emmb`Zjf|ldhu0>#c^flqqYpam~c1<6#c^opcjhX~hf6=!mPre]gauro58:98!mPesplvZoiblieb`Ptxrf95*dWakxSx`kesdokr;7$jUcm~QnllmppZ`rde7; nQgar]qwq;6$jUomyoPcnwmpZqnl}b65!mPh`q\swYfkb7; nQzsd]fgf;7$jUhc`c`n^aokfm:8%iT{Qncj]okr;7$jUyhR~ats]tmaro58:'oR{|e^dtbqYci}kTob{at<2/gZnf{Vkgab}{_dosp|;7$jUyhRjnt`]`kphsW~coxe3>0-a\kscunee|Saax=1.`[rtXxg~ySzgkti?:(fYwzfmTi`~{y^vzt`;7$jU|~Rjnt`]`kphsW~coxe36,b]sv`jhimUyij}21-a\`jssW{yS{oc=1.`[mgtWmkmRm`uov>4)eXx{elSk{cl^vkv`uoWgolmykPv`n>15>+kV}ySikti?657*dWyxdkRkbpu{\pmtb{aUeijo{e^tbh83+kVzycjQjmqvz[qnumzbTm~}jru]uei;3$jUcm~Qyamkg95*dWyxdkRhzlm]wlwct`Vkxh|{_wco906>$jef|b`jnu]mehc:n`ldSubax^726}51W;iggR=9tn3;(fYqiecoSaax=1.`[utneVlbjbQ{yqg>144;?&hS}|`g^dvhiYsqyo6vugnUna}zv_ujqavn/: ;?7}|`g^gntqX|axne&<)068twi`Wlg{xtQ{hsgpl-2.9=1{~biPelrw}Zrozlyc$8'>4:rqkbYbey~rSyf}erj+2,733yxdkRkbpu{\pmtb{a"<%<:4psmd[`kw|pUdk|h):*51=wzfmTi`~{y^vkv`uo 0#::6~}of]fiur~W}byi~f39;2=5g=wzfmTi`~{y^vkv`uoWhyxiz'0(3a?uthoVof|ywPtipfwmYf{zoyx%?&1c9svjaXmdzuRzgrdqk[dutm{~#>$?m;qplcZcjx}sTxe|jsi]bwvcu|!9"=o5rne\ahvsqV~c~h}g_`qpawr/< ;i7}|`g^gntqX|axneQnsrgqp-3.9k1{~biPelrw}ZrozlycSl}|esv+2,7e3yxdkRkbpu{\pmtb{aUj~k}t)5*5g=wzfmTi`~{y^vkv`uoWhyxiz'8(3a?uthoVof|ywPtipfwmYf{zoyx%7&1e9svjaXmdzuRzgrdqk[dutm{~757>11c9svjaXmdzuRzgrdqk[kc`i}o#<$?m;qplcZcjx}sTxe|jsi]mabgsm!;"=o5rne\ahvsqV~c~h}g_ogdeqc/: ;i7}|`g^gntqX|axneQaefcwa-5.9k1{~biPelrw}ZrozlycSckhaug+0,7e3yxdkRkbpu{\pmtb{aUeijo{e)7*5g=wzfmTi`~{y^vkv`uoWgolmyk'6(3a?uthoVof|ywPtipfwmYimnki%9&1c9svjaXmdzuRzgrdqk[kc`i}o#4$?m;qplcZcjx}sTxe|jsi]mabgsm!3"=i5rne\ahvsqV~c~h}g_ogdeqc;13:556~}of]eqij6;2zycjQiumn\pmtb{a";%<=4psmd[cskdV~c~h}g(0+27>vugnUmyabPtipfwm.5!890|ah_gwohZrozlyc$>'>3:rqkbYa}efTxe|jsi*7-45a:rqkbYa}efTxe|jsi]bwvcu|!8"=l5rne\bpjkW}byi~fParqfvq.4!8k0|ah_gwohZrozlycSl}|esv+0,7f3yxdkRhzlm]wlwct`Vkxh|{(4+2e>vugnUmyabPtipfwmYf{zoyx%8&1`9svjaXn|fgSyf}erj\evubz}"<%vugnUmyabPtipfwmYimnki%<&1`9svjaXn|fgSyf}erj\j`af|l"8%$??;sf\`drfWje~by&<)028vaYci}kTob{at)6*55=ulVnjxlQlotlw,0/682xoSio{a^alqkr/> ;;7jPd`vb[firf}"<%<>4re]geqgXkfex%6&119q`Zbf|hUhcx`{(8+24>tcWmkmRm`uov?4;753{nThlzn_bmvjq:>294>7jPeo48vaYu{}90~~z8;r`jp`tu<2yyy:4tswf=>sillxm`by:;wcoma0<{Ujof84ws]`hn773~xThlzn_bmvjq.7!8:0{Qkauc\gjsi|!;"==5xr^fbpdYdg|d$?'>0:uq[agsiVidycz'3(33?rtXlh~jSnaznu*7-46<{UomyoPcnwmp-3.991|~Rjnt`]`kphs ?#:<6y}_ecweZeh}g~#;$??;vp\`drfWje~by&7)008swYci}kTob{at=:94;3<{Unb;5xr^pppxFGxh<>7MNw1;D90?7|[=l188;57;306g0dk398:ljtn2f6>4=i;m<1:6*107290:??l9cb8073gb3Z>o698?:18277d1kj08?;oi;e66hn0(>m9:00a?S5c<38py<=<:09v562=82w/=:75199a00>=839o6>47;'5=g=<<20(>j=:574?l2e83:17d:l4;29?j22k3:17b::6;29?l2e13:17d:m2;29?j2413:1(<9m:56b?k70i3:07b:<8;29 41e2=>j7c?8a;38?j24?3:1(<9m:56b?k70i3807b:<6;29 41e2=>j7c?8a;18?j24=3:1(<9m:56b?k70i3>07b:<4;29 41e2=>j7c?8a;78?j24;3:1(<9m:56b?k70i3<07b:<2;29 41e2=>j7c?8a;58?j2393:1(<9m:56b?k70i3207b:;0;29 41e2=>j7c?8a;;8?j24n3:1(<9m:56b?k70i3k07b:j7c?8a;`8?j24l3:1(<9m:56b?k70i3i07b:j7c?8a;f8?j24j3:1(<9m:56b?k70i3o07b:j7c?8a;d8?j2493:1(<9m:56b?k70i3;;76a;3183>!70j3>?m6`>7`825>=n<9>1<7*>7c8762=i9>k1<65f41194?"6?k0?>:5a16c95>=n<981<7*>7c8762=i9>k1>65f41394?"6?k0?>:5a16c97>=n<9:1<7*>7c8762=i9>k1865f3gd94?"6?k0?>:5a16c91>=n;on1<7*>7c8762=i9>k1:65f3ga94?"6?k0?>:5a16c93>=n;oh1<7*>7c8762=i9>k1465f3gc94?"6?k0?>:5a16c9=>=n;o31<7*>7c8762=i9>k1m65f3g:94?"6?k0?>:5a16c9f>=n;o=1<7*>7c8762=i9>k1o65f3g494?"6?k0?>:5a16c9`>=n;o?1<7*>7c8762=i9>k1i65f3g694?"6?k0?>:5a16c9b>=n;o81<7*>7c8762=i9>k1==54i2d2>5<#9>h18?94n05b>47<3`9m<7>5$05a>1403g;1e=:o51598m6cc290/=:l54358j41f28?07d=jc;29 41e2=8<7c?8a;35?>o4mk0;6)?8b;613>h6?h0:;65f3dc94?"6?k0?>:5a16c95==b:9j05>=83.:;o4;269m52g=9j10e9>8:18'52d=<;=0b<9n:0f8?l27>3:1(<9m:504?k70i3;n76g;0483>!70j3>9;6`>7`82b>=n;oo1<7*>7c8762=i9>k1>=54i2d0>5<#9>h18?94n05b>77<3`9n47>5$05a>1403g;tH2a7?!7?i39h96a>7983>>{el10;6<4?:1yK7f2<,82j6i64oe594?=zj=>1<7o::00g>40>sA9h86T;5;35d<>2k09m7<8:3:96<8`871g=#<10?945+4d871d=#9>>1=:94i554>5<#9>h18:64n05b>5=5<#9>h18:64n05b>7=54i550>5<#9>h18:64n05b>1=5<#9>h18:64n05b>3=5<#9>h18:64n05b>==5<5<5<#9>h18;j4n05b>5=5<#9>h18;j4n05b>7=54i54;>5<#9>h18;j4n05b>1=5<#9>h18;j4n05b>3=6=4+16`903b5<#9>h18;j4n05b>==5<5<#9>h185=4n05b>5=5<#9>h185=4n05b>7=54i55f>5<#9>h185=4n05b>1=5<#9>h185=4n05b>3=5<#9>h185=4n05b>==5<5<#9>h1?h;4n05b>4=5<#9>h1?h;4n05b>6=5<#9>h1?h;4n05b>0=5<#9>h1?h;4n05b>2=5<5<#9>h185k4n05b>5=5<#9>h185k4n05b>7=54i5::>5<#9>h185k4n05b>1=5<#9>h185k4n05b>3=5<#9>h185k4n05b>==5<5<5<#9>h18464n05b>4=6=4+16`90<>5<#9>h18464n05b>6=5<#9>h18464n05b>0=5<#9>h18464n05b>2=5<#9>h18l<4n05b>5=5<#9>h18l<4n05b>7=54i5;g>5<#9>h18l<4n05b>1=5<#9>h18l<4n05b>3=5<#9>h18l<4n05b>==5<5<5<5<#9>h189o4n05b>5=5<#9>h189o4n05b>7=54o516>5<#9>h189o4n05b>1=5<#9>h189o4n05b>3=5<#9>h189o4n05b>==;6=4+16`901g5<#9>h189o4n05b>d=5<#9>h189o4n05b>f=5<#9>h189o4n05b>`=5<#9>h189o4n05b>46<3f>8<7>5$05a>12f3g;;:k741<72-;4?:%34f?25?2d:;l4>;:k747<72-;1e=:o51098m6`7290/=:l54358j41f28807d=jf;29 41e2=8<7c?8a;30?>o4ml0;6)?8b;613>h6?h0:865f3df94?"6?k0?>:5a16c950=8:9j7`?=83.:;o4;269m52g=9010e9>n:18'52d=<;=0b<9n:0c8?l2713:1(<9m:504?k70i3;i76g;0983>!70j3>9;6`>7`82g>=n<9=1<7*>7c8762=i9>k1=i54i525>5<#9>h18?94n05b>4c<3`>;97>5$05a>1403g;1e=:o52098m6c?290/=:l54358j41f2;807d=j7;29 41e2=8<7c?8a;00?>o4l00;66a;ae83>!70j3>jj6`>7`83?>i3ij0;6)?8b;6bb>h6?h0:76a;ac83>!70j3>jj6`>7`81?>i3ih0;6)?8b;6bb>h6?h0876a;a883>!70j3>jj6`>7`87?>i3i10;6)?8b;6bb>h6?h0>76a;a683>!70j3>jj6`>7`85?>i3i?0;6)?8b;6bb>h6?h0<76a;a483>!70j3>jj6`>7`8;?>i3i=0;6)?8b;6bb>h6?h0276a;c383>!70j3>h?6`>7`83?>i3k80;6)?8b;6`7>h6?h0:76a;c183>!70j3>h?6`>7`81?>i3jo0;6)?8b;6`7>h6?h0876a;bd83>!70j3>h?6`>7`87?>i3jm0;6)?8b;6`7>h6?h0>76a;bb83>!70j3>h?6`>7`85?>i3jk0;6)?8b;6`7>h6?h0<76a;b`83>!70j3>h?6`>7`8;?>i3>;0;66g;5e83>>i4m?0;66g;a283>>i3j?0;66l4<729q/=5o5d99K7f`<@:i?7bj8:188yg5c93:1=7>50z&21<729q/=5o5d59K7f`<@:i?7)k::79j03<722c><7>5;h34g?6=3f;5;|`052<72=0;6=u+19c9`7=O;jl0D>m;;%g6>7=n3:187>50z&25;h6`>5<?54c78 `3=:2c?:7>5;h73>5<8`8g5>N4ko1C?n:4H518 4562=h>7)k::39j03<722c><7>5;n34`?6=3th8n=4?:283>5}#91k1h<5G3bd8L6e33A>87)?<1;6a1>"b=380e9850;9j15<722e:;i4?::a7gg=83?1<7>t$0:b>a3<@:im7E=l4:J77>"6;80?n85f4783>>o3?3:17d;?:188m41d2900c<9k:188yg5ej3:1?7>50z&27=n0<729q/=5o5d49K7f`<@:i?7E:<;%305?2e=2c?:7>5;h64>5<n1<75rb2`:>5<3290;w)?7a;f7?M5dn2B8o95+e485?l212900e8>50;9j52e=831d=:j50;9~f6d?290?6=4?{%3;e?b33A9hj6F=6=44i4294?=n9>i1<75`16f94?=zj:h<6=4;:183!7?i3n?7E=lf:J0g1=#m<0=7d:9:188m06=831b=:m50;9l52b=831vn>m=:187>5<7s-;3m7j;;I1`b>N4k=1/i849;h65>5<n1<75rb2a2>5<3290;w)?7a;f7?M5dn2B8o95+e485?l212900e8>50;9j52e=831d=:j50;9~f4gc290?6=4?{%3;e?b53A9hj6F=6=44i5a94?=n=90;66a>7e83>>{e9hi1<7:50;2x 4>f2m80D>mi;I1`0>"b=380e9850;9j0f<722c><7>5;n34`?6=3th:mo4?:583>5}#91k1h?5G3bd8L6e33-o>6?5f4783>>o3k3:17d;?:188k41c2900qo?na;290?6=8r.:4l4k2:J0gc=O;j>0(h;52:k72?6=3`>h6=44i4294?=h9>n1<75rb0c:>5<3290;w)?7a;f1?M5dn2B8o95+e481?l212900e9m50;9j15<722e:;i4?::a5d>=83>1<7>t$0:b>a4<@:im7E=l4:&f1?4>o283:17b?8d;29?xd6i>0;694?:1y'5=g=l;1C?nh4H2a7?!c22;1b8;4?::k7g?6=3`?;6=44o05g>5<54;294~"60h0o>6F6g;6;29?l2d2900e8>50;9l52b=831vn5<7s-;3m7j=;I1`b>N4k=1/i84=;h65>5<>i6?m0;66sm20694?2=83:p(<6n:e08L6ea3A9h86*j5;08m10=831b8n4?::k64?6=3f;5;|`156<72=0;6=u+19c9`7=O;jl0D>m;;%g6>7=n50z&25;h6`>5<<>50;694?6|,82j6i<4H2ae?M5d<2.n97<4i5494?=n1<729q/=5o5d39K7f`<@:i?7)k::39j03<722c?o7>5;h73>5<8`8g6>N4ko1C?n:4$d796>o3>3:17d:l:188m06=831d=:j50;9~f76c290?6=4?{%3;e?b53A9hj6F=6=44i5a94?=n=90;66a>7e83>>{e:9i1<7:50;2x 4>f2m80D>mi;I1`0>"b=380e9850;9j0f<722c><7>5;n34`?6=3th99n4?:583>5}#91k1h?5G3bd8L6e33-o>6?5f4783>>o3k3:17d;?:188k41c2900qo<:b;290?6=8r.:4l4k2:J0gc=O;j>0(h;52:k72?6=3`>h6=44i4294?=h9>n1<75rb37b>5<3290;w)?7a;f1?M5dn2B8o95+e481?l212900e9m50;9j15<722e:;i4?::a60?=83>1<7>t$0:b>a4<@:im7E=l4:&f1?4>o283:17b?8d;29?xd5=10;694?:1y'5=g=l;1C?nh4H2a7?!c22;1b8;4?::k7g?6=3`?;6=44o05g>5<;7>54;294~"60h0o>6F6g;6;29?l2d2900e8>50;9l52b=831vn?;9:187>5<7s-;3m7j=;I1`b>N4k=1/i84=;h65>5<>i6?m0;66sm24794?2=83:p(<6n:e08L6ea3A9h86*j5;08m10=831b8n4?::k64?6=3f;5;|`111<72=0;6=u+19c9`7=O;jl0D>m;;%g6>7=n50z&25;h6`>5<f783>1<729q/=5o5d39K7f`<@:i?7)k::39j03<722c?o7>5;h73>5<8`8g6>N4ko1C?n:4$d796>o3>3:17d:l:188m06=831d=:j50;9~f4`3290?6=4?{%3;e?b53A9hj6F=6=44i5a94?=n=90;66a>7e83>>{e9o91<7:50;2x 4>f2m80D>mi;I1`0>"b=380e9850;9j0f<722c><7>5;n34`?6=3th:j?4?:583>5}#91k1h?5G3bd8L6e33-o>6?5f4783>>o3k3:17d;?:188k41c2900qo?i1;290?6=8r.:4l4k2:J0gc=O;j>0(h;52:k72?6=3`>h6=44i4294?=h9>n1<75rb36b>5<3290;w)?7a;f1?M5dn2B8o95G429'567=h6=44i4294?=h9>n1<75rb36:>5<3290;w)?7a;f1?M5dn2B8o95G429'567=h6=44i4294?=h9>n1<75rb36;>5<3290;w)?7a;f1?M5dn2B8o95G429'567=h6=44i4294?=h9>n1<75rb364>5<3290;w)?7a;f1?M5dn2B8o95G429'567=h6=44i4294?=h9>n1<75rb365>5<3290;w)?7a;f1?M5dn2B8o95G429'567=h6=44i4294?=h9>n1<75rb366>5<3290;w)?7a;f1?M5dn2B8o95G429'567=h6=44i4294?=h9>n1<75rb367>5<3290;w)?7a;f1?M5dn2B8o95G429'567=h6=44i4294?=h9>n1<75rb360>5<3290;w)?7a;f1?M5dn2B8o95G429'567=h6=44i4294?=h9>n1<75rb361>5<3290;w)?7a;f1?M5dn2B8o95G429'567=h6=44i4294?=h9>n1<75rb0g4>5<3290;w)?7a;f1?M5dn2B8o95G429'567=h6=44i4294?=h9>n1<75rb0g5>5<3290;w)?7a;f1?M5dn2B8o95G429'567=h6=44i4294?=h9>n1<75rb0g6>5<3290;w)?7a;f1?M5dn2B8o95G429'567=h6=44i4294?=h9>n1<75rb0g7>5<3290;w)?7a;f1?M5dn2B8o95G429'567=h6=44i4294?=h9>n1<75rb0g0>5<3290;w)?7a;f1?M5dn2B8o95G429'567=h6=44i4294?=h9>n1<75rb0g1>5<3290;w)?7a;f1?M5dn2B8o95G429'567=h6=44i4294?=h9>n1<75rb0g2>5<3290;w)?7a;f1?M5dn2B8o95G429'567=h6=44i4294?=h9>n1<75rb0g3>5<3290;w)?7a;f1?M5dn2B8o95G429'567=h6=44i4294?=h9>n1<75rb0fe>5<3290;w)?7a;f1?M5dn2B8o95G429'567=h6=44i4294?=h9>n1<75rb0ff>5<3290;w)?7a;f1?M5dn2B8o95G429'567=h6=44i4294?=h9>n1<75rb0f0>5<3290;w)?7a;f1?M5dn2B8o95+e481?l212900e9m50;9j15<722e:;i4?::a5a4=83>1<7>t$0:b>a4<@:im7E=l4:&f1?4>o283:17b?8d;29?xd6l80;694?:1y'5=g=l;1C?nh4H2a7?!c22;1b8;4?::k7g?6=3`?;6=44o05g>5<54;294~"60h0o>6F6g;6;29?l2d2900e8>50;9l52b=831vn5<7s-;3m7j=;I1`b>N4k=1/i84=;h65>5<>i6?m0;66sm1bg94?2=83:p(<6n:e08L6ea3A9h86*j5;08m10=831b8n4?::k64?6=3f;5;|`2ga<72=0;6=u+19c9`7=O;jl0D>m;;%g6>7=n50z&25;h6`>5<1<729q/=5o5d39K7f`<@:i?7)k::39j03<722c?o7>5;h73>5<8`8g6>N4ko1C?n:4$d796>o3>3:17d:l:188m06=831d=:j50;9~f751290?6=4?{%3;e?b53A9hj6F=6=44i5a94?=n=90;66a>7e83>>{e::?1<7:50;2x 4>f2m80D>mi;I1`0>"b=380e9850;9j0f<722c><7>5;n34`?6=3th9?94?:583>5}#91k1h?5G3bd8L6e33-o>6?5f4783>>o3k3:17d;?:188k41c2900qo<<3;290?6=8r.:4l4k2:J0gc=O;j>0(h;52:k72?6=3`>h6=44i4294?=h9>n1<75rb311>5<3290;w)?7a;f1?M5dn2B8o95+e481?l212900e9m50;9j15<722e:;i4?::a667=83>1<7>t$0:b>a4<@:im7E=l4:&f1?4>o283:17b?8d;29?xd5;90;694?:1y'5=g=l;1C?nh4H2a7?!c22;1b8;4?::k7g?6=3`?;6=44o05g>5<55;294~"60h0o?6F6g;6;29?l202900e9m50;9j15<722e:;i4?::a6a1=83?1<7>t$0:b>a5<@:im7E=l4:&f1?4>o3k3:17d;?:188k41c2900qo0(h;52:k72?6=3`><6=44i5a94?=n=90;66a>7e83>>{e:m>1<7;50;2x 4>f2m90D>mi;I1`0>"b=380e9850;9j02<722c?o7>5;h73>5<8`8g7>N4ko1C?n:4$d796>o3>3:17d:8:188m1e=831b9=4?::m23a<722wi>i=50;794?6|,82j6i=4H2ae?M5d<2.n97<4i5494?=n<>0;66g;c;29?l372900c<9k:188yg4c:3:197>50z&25;h64>5<>i6?m0;66sm2e294?3=83:p(<6n:e18L6ea3A9h86*j5;08m10=831b8:4?::k7g?6=3`?;6=44o05g>5<55;294~"60h0o96F50;9j52e=831d=:j50;9~f7b6290>6=4?{%3;e?b43A9hj6F=6=44i5594?=n6<729q/=5o53bg8L6ea3A9h86g;9;29?l7503:17b?86;29?xd5k;0;6>4?:1y'5=g=;jo0D>mi;I1`0>o313:17d?=8;29?j70>3:17pl=b983>1<729q/=5o51208L6ea3A9h86g;9;29?l352900e<6<:188k4112900qo3:187>50z&22900e8<50;9j5=5=831d=:850;9~f7e729086=4?{%3;e?5dm2B8ok5G3b68m1?=831b=?650;9l520=831vn?l;:187>5<7s-;3m7?<2:J0gc=O;j>0e9750;9j17<722c:4>4?::m233<722wi>oh50;194?6|,82j6>mj;I1`b>N4k=1b844?::k26=<722e:;;4?::a6g4=83>1<7>t$0:b>4553A9hj6F>7>5;h3;7?6=3f;<:7>5;|`1f`<72:0;6=u+19c97fc<@:im7E=l4:k7=?6=3`;947>5;n342?6=3th9n=4?:583>5}#91k1=><4H2ae?M5d<2c?57>5;h71>5<5<53;294~"60h08oh5G3bd8L6e33`>26=44i00;>5<8`8277=O;jl0D>m;;h6:>5<<1<75rb3``>5<4290;w)?7a;1`a>N4ko1C?n:4i5;94?=n9;21<75`16494?=zj;kh6=4;:183!7?i3;8>6F>o60:0;66a>7783>>{e:kh1<7=50;2x 4>f2:in7E=lf:J0g1=n<00;66g>2983>>i6??0;66sm2`c94?2=83:p(<6n:011?M5dn2B8o95f4883>>o2:3:17d?73;29?j70>3:17pl=b`83>6<729q/=5o53bg8L6ea3A9h86g;9;29?l7503:17b?86;29?xd5i10;694?:1y'5=g=9:80D>mi;I1`0>o313:17d;=:188m4>42900c<99:188yg4bk3:197>50z&25;h64>5<>i6?m0;66sm2d`94?3=83:p(<6n:e18L6ea3A9h86*j5;08m10=831b8:4?::k7g?6=3`?;6=44o05g>5<55;294~"60h0o?6F6g;6;29?l202900e9m50;9j15<722e:;i4?::a6`?=83?1<7>t$0:b>a5<@:im7E=l4:&f1?4>o3k3:17d;?:188k41c2900qo0(h;52:k72?6=3`><6=44i5a94?=n=90;66a>7e83>>{e:l=1<7;50;2x 4>f2m90D>mi;I1`0>"b=380e9850;9j02<722c?o7>5;h73>5<8`8g7>N4ko1C?n:4$d796>o3>3:17d:8:188m1e=831b9=4?::m23a<722wi>h;50;794?6|,82j6i=4H2ae?M5d<2.n97<4i5494?=n<>0;66g;c;29?l372900c<9k:188yg4b<3:197>50z&25;h64>5<>i6?m0;66sm2d194?3=83:p(<6n:e18L6ea3A9h86*j5;08m10=831b8:4?::k7g?6=3`?;6=44o05g>5<54;294~"60h0o86F0(h;56:k72?6=3`?;6=44i05`>5<8`8g6>N4ko1C?n:4$d796>o3>3:17d:l:188m06=831d=:j50;9~f70>290?6=4?{%3;e?b53A9hj6F=6=44i5a94?=n=90;66a>7e83>>{e:1o1<7:50;2x 4>f28997E=lf:J0g1=n<00;66g:2;29?l7?;3:17b?86;29?xd50m0;694?:1y'5=g=9:80D>mi;I1`0>o313:17d;=:188m4>42900c<99:188yg4?k3:187>50z&22900e8<50;9j5=5=831d=:850;9~f7>e290?6=4?{%3;e?74:2B8ok5G3b68m1?=831b9?4?::k2<6<722e:;;4?::a6=g=83>1<7>t$0:b>4553A9hj6F>7>5;h3;7?6=3f;<:7>5;|`13g<72=0;6=u+19c9564<@:im7E=l4:k7=?6=3`?96=44i0:0>5<8`8277=O;jl0D>m;;h6:>5<<1<75rb35:>5<3290;w)?7a;306>N4ko1C?n:4i5;94?=n=;0;66g>8283>>i6??0;66sm26:94?2=83:p(<6n:011?M5dn2B8o95f4883>>o2:3:17d?73;29?j70>3:17pl=7683>1<729q/=5o51208L6ea3A9h86g;9;29?l352900e<6<:188k4112900qo=?9;290?6=8r.:4l4>339K7f`<@:i?7d:6:188m04=831b=5=50;9l520=831vn>>7:187>5<7s-;3m7?<2:J0gc=O;j>0e9750;9j17<722c:4>4?::m233<722wi?=950;694?6|,82j6<==;I1`b>N4k=1b844?::k66?6=3`;3?7>5;n342?6=3th8<;4?:583>5}#91k1=><4H2ae?M5d<2c?57>5;h71>5<5<54;294~"60h0:??5G3bd8L6e33`>26=44i4094?=n9191<75`16494?=zj;l=6=4;:183!7?i3;8>6F>o60:0;66a>7783>>{e:o?1<7:50;2x 4>f28997E=lf:J0g1=n<00;66g:2;29?l7?;3:17b?86;29?xd5n=0;694?:1y'5=g=9:80D>mi;I1`0>o313:17d;=:188m4>42900c<99:188yg4a;3:187>50z&22900e8<50;9j5=5=831d=:850;9~f7`5290?6=4?{%3;e?74:2B8ok5G3b68m1?=831b9?4?::k2<6<722e:;;4?::a70d=83?1<7>t$0:b>a5<@:im7E=l4:&f1?4>o3k3:17d;?:188k41c2900qo=:9;291?6=8r.:4l4k5:J0gc=O;j>0(h;56:k72?6=3`><6=44i4294?=n9>i1<75`16f94?=zj:?j6=4::183!7?i3n87E=lf:J0g1=#m<097d:9:188m11=831b8n4?::k64?6=3f;5;|`01f<72<0;6=u+19c9`6=O;jl0D>m;;%g6>7=n50;9l52b=831vn>;k:186>5<7s-;3m7j<;I1`b>N4k=1/i84=;h65>5<>o283:17b?8d;29?xd4=l0;684?:1y'5=g=l:1C?nh4H2a7?!c22;1b8;4?::k73?6=3`>h6=44i4294?=h9>n1<75rb27e>5<2290;w)?7a;f0?M5dn2B8o95+e481?l212900e9950;9j0f<722c><7>5;n34`?6=3th8:=4?:483>5}#91k1h>5G3bd8L6e33-o>6?5f4783>>o3?3:17d:l:188m06=831d=:j50;9~f606290>6=4?{%3;e?b43A9hj6F=6=44i5594?=n0<729q/=5o5d29K7f`<@:i?7)k::39j03<722c?;7>5;h6`>5<n6=4::183!7?i3n87E=lf:J0g1=#m<097d:9:188m11=831b8n4?::k64?6=3f;5;|`00f<72<0;6=u+19c9`6=O;jl0D>m;;%g6>7=n50;9l52b=831vn>:m:186>5<7s-;3m7j<;I1`b>N4k=1/i84=;h65>5<>o283:17b?8d;29?xd4h6=44i4294?=h9>n1<75rb26b>5<2290;w)?7a;f0?M5dn2B8o95+e481?l212900e9950;9j0f<722c><7>5;n34`?6=3th8844?:483>5}#91k1h>5G3bd8L6e33-o>6?5f4783>>o3?3:17d:l:188m06=831d=:j50;9~f620290>6=4?{%3;e?b43A9hj6F=6=44i5594?=n0<729q/=5o5d49K7f`<@:i?7)k::79j03<722c?;7>5;h73>5<5<53;294~"60h08oh5G3bd8L6e33`>26=44i00;>5<8`80g`=O;jl0D>m;;h6:>5<5<7>54;294~"60h0:??5G3bd8L6e33`>26=44i4094?=n9191<75`16494?=zj:9j6=4<:183!7?i39hi6F<1<75rb213>5<3290;w)?7a;306>N4ko1C?n:4i5;94?=n=;0;66g>8283>>i6??0;66sm32;94?5=83:p(<6n:2af?M5dn2B8o95f4883>>o6:10;66a>7783>>{e;;o1<7:50;2x 4>f28997E=lf:J0g1=n<00;66g:2;29?l7?;3:17b?86;29?xd4;10;6>4?:1y'5=g=;jo0D>mi;I1`0>o313:17d?=8;29?j70>3:17pl<2b83>1<729q/=5o51208L6ea3A9h86g;9;29?l352900e<6<:188k4112900qo=<7;297?6=8r.:4l450z&22900e8<50;9j5=5=831d=:850;9~f65129086=4?{%3;e?5dm2B8ok5G3b68m1?=831b=?650;9l520=831vn><7:187>5<7s-;3m7?<2:J0gc=O;j>0e9750;9j17<722c:4>4?::m233<722wi?>;50;194?6|,82j6>mj;I1`b>N4k=1b844?::k26=<722e:;;4?::a770=83>1<7>t$0:b>4553A9hj6F>7>5;h3;7?6=3f;<:7>5;|`071<72:0;6=u+19c97fc<@:im7E=l4:k7=?6=3`;947>5;n342?6=3th8>94?:583>5}#91k1=><4H2ae?M5d<2c?57>5;h71>5<5<55;294~"60h0o?6F6g;6;29?l202900e9m50;9j15<722e:;i4?::a724=83?1<7>t$0:b>a5<@:im7E=l4:&f1?4>o3k3:17d;?:188k41c2900qo=81;291?6=8r.:4l4k3:J0gc=O;j>0(h;52:k72?6=3`><6=44i5a94?=n=90;66a>7e83>>{e;>:1<7;50;2x 4>f2m90D>mi;I1`0>"b=380e9850;9j02<722c?o7>5;h73>5<8`8g7>N4ko1C?n:4$d796>o3>3:17d:8:188m1e=831b9=4?::m23a<722wi?;k50;794?6|,82j6i=4H2ae?M5d<2.n97<4i5494?=n<>0;66g;c;29?l372900c<9k:188yg51l3:197>50z&25;h64>5<>i6?m0;66sm37a94?3=83:p(<6n:e18L6ea3A9h86*j5;08m10=831b8:4?::k7g?6=3`?;6=44o05g>5<55;294~"60h0o?6F6g;6;29?l202900e9m50;9j15<722e:;i4?::a7<6=83?1<7>t$0:b>a0<@:im7E=l4:&f1?4>o283:17d?8e;29?j70l3:17pl<8g83>0<729q/=5o5d79K7f`<@:i?7)k::39j03<722c?;7>5;h73>5<5<55;294~"60h0o:6F6g;6;29?l202900e8>50;9j52c=831d=:j50;9~f6>c290>6=4?{%3;e?b13A9hj6F=6=44i5594?=n=90;66g>7d83>>i6?m0;66sm39a94?3=83:p(<6n:e48L6ea3A9h86*j5;08m10=831b8:4?::k64?6=3`;5;n34`?6=3th84o4?:483>5}#91k1h;5G3bd8L6e33-o>6?5f4783>>o3?3:17d;?:188m41b2900c<9k:188yg5?i3:197>50z&22B8ok5G3b68 `3=:2c?:7>5;h64>5<n1<75rb2::>5<2290;w)?7a;f5?M5dn2B8o95+e481?l212900e9950;9j15<722c:;h4?::m23a<722wi?4650;794?6|,82j6i84H2ae?M5d<2.n97<4i5494?=n<>0;66g:0;29?l70m3:17b?8d;29?xd41>0;684?:1y'5=g=l?1C?nh4H2a7?!c22;1b8;4?::k73?6=3`?;6=44i05f>5<8`8g2>N4ko1C?n:4$d796>o3>3:17d:8:188m06=831b=:k50;9l52b=831vn>7::186>5<7s-;3m7j9;I1`b>N4k=1/i84=;h65>5<>o6?l0;66a>7e83>>{e;0>1<7;50;2x 4>f2m<0D>mi;I1`0>"b=380e9850;9j02<722c><7>5;h34a?6=3f;5;|`0=6<72<0;6=u+19c9`3=O;jl0D>m;;%g6>7=n0(h;52:k72?6=3`><6=44i4294?=n9>o1<75`16f94?=zj:3:6=4::183!7?i3n=7E=lf:J0g1=#m<097d:9:188m11=831b9=4?::k23`<722e:;i4?::a7=>=83?1<7>t$0:b>a0<@:im7E=l4:&f1?4>o283:17d?8e;29?j70l3:17pl<8683>0<729q/=5o5d79K7f`<@:i?7)k::39j03<722c?;7>5;h73>5<5<53;294~"60h0:>i5G3bd8L6e33-o>6<74ie;94?=nlh0;66a>7783>>{e;k91<7=50;2x 4>f288o7E=lf:J0g1=#m<0:56gk9;29?lbf2900c<99:188yg46>3:1?7>50z&2t$0:b>44c3A9hj6F5;hfb>5<8`826a=O;jl0D>m;;%g6>4b>i6??0;66sm18c94?5=83:p(<6n:00g?M5dn2B8o95+e482`>oc13:17djn:188k4112900qo?69;297?6=8r.:4l4>2e9K7f`<@:i?7)k::0f8ma?=831bhl4?::m233<722wi=4650;194?6|,82j6<N4k=1/i84>d:kg=?6=3`nj6=44o055>5<53;294~"60h0:>i5G3bd8L6e33-o>67783>>{e90<1<7=50;2x 4>f288o7E=lf:J0g1=#m<0:h6gk9;29?lbf2900c<99:188yg7>=3:1?7>50z&2t$0:b>44c3A9hj6F5;hfb>5<8`826a=O;jl0D>m;;%g6>4b>i6??0;66sm18094?5=83:p(<6n:00g?M5dn2B8o95+e482`>oc13:17djn:188k4112900qo?61;297?6=8r.:4l4>2e9K7f`<@:i?7)k::0f8ma?=831bhl4?::m233<722wi=4>50;194?6|,82j6<N4k=1/i84>d:kg=?6=3`nj6=44o055>5<53;294~"60h0:>i5G3bd8L6e33-o>67783>>{e91o1<7=50;2x 4>f288o7E=lf:J0g1=#m<0:h6gk9;29?lbf2900c<99:188yg7?l3:1?7>50z&2t$0:b>44c3A9hj6F5;hfb>5<8`826a=O;jl0D>m;;%g6>4b>i6??0;66sm27g94?2=83:p(<6n:00f?M5dn2B8o95+e48``>oc13:17djn:188mad=831d=:850;9~f77?290?6=4?{%3;e?75m2B8ok5G3b68 `3=:=1bh44?::kge?6=3`ni6=44o055>5<54;294~"60h0:>h5G3bd8L6e33-o>6?:4ie;94?=nlh0;66gkb;29?j70>3:17pl=6b83>0<729q/=5o513d8L6ea3A9h86*j5;3b?lb>2900eio50;9j`g<722coo7>5;n342?6=3th9=l4?:483>5}#91k1=?h4H2ae?M5d<2.n97?i;hf:>5<>ock3:17b?86;29?xd6j:0;684?:1y'5=g=9;l0D>mi;I1`0>"b=3;m7dj6:188mag=831bho4?::kgg?6=3f;<:7>5;|`137<72<0;6=u+19c957`<@:im7E=l4:&f1?463`n26=44iec94?=nlk0;66gkc;29?j70>3:17pl<1`83>6<729q/=5o513f8L6ea3A9h86*j5;33?lb>2900eio50;9l520=831vn?89:187>5<7s-;3m7?=e:J0gc=O;j>0(h;52b9j`<<722com7>5;hfa>5<8`826a=O;jl0D>m;;%g6>4b>i6??0;66sm1c794?5=83:p(<6n:00g?M5dn2B8o95+e482`>oc13:17djn:188k4112900qo<>e;290?6=8r.:4l4>2d9K7f`<@:i?7)k::368ma?=831bhl4?::kgf?6=3f;<:7>5;|`2f2<72=0;6=u+19c957c<@:im7E=l4:&f1?433`n26=44iec94?=nlk0;66a>7783>>{e:;:1<7;50;2x 4>f288m7E=lf:J0g1=#m<0:j6gk9;29?lbf2900eil50;9j`f<722e:;;4?::a5g?=83?1<7>t$0:b>44a3A9hj6F5;hfb>5<>i6??0;66sm3`f94?2=83:p(<6n:00f?M5dn2B8o95+e4865>oc13:17djn:188mad=831d=:850;9~f702290>6=4?{%3;e?75n2B8ok5G3b68 `3=9;1bh44?::kge?6=3`ni6=44iea94?=h9><1<75rb230>5<4290;w)?7a;31`>N4ko1C?n:4$d7967=nl00;66gka;29?j70>3:17pl<0183>6<729q/=5o513f8L6ea3A9h86*j5;01?lb>2900eio50;9l520=831vn?77:186>5<7s-;3m7?=f:J0gc=O;j>0(h;5219j`<<722com7>5;hfa>5<6=4::183!7?i3;9j6F>5fd883>>oci3:17djm:188mae=831d=:850;9~f675290>6=4?{%3;e?75n2B8ok5G3b68 `3=::1bh44?::kge?6=3`ni6=44iea94?=h9><1<75rb3de>5<2290;w)?7a;31b>N4ko1C?n:4$d7966=nl00;66gka;29?lbe2900eim50;9l520=831vn?78:186>5<7s-;3m7?=f:J0gc=O;j>0(h;5219j`<<722com7>5;hfa>5<=5fd883>>oci3:17djm:188mae=831d=:850;9~f676290>6=4?{%3;e?75n2B8ok5G3b68 `3=::1bh44?::kge?6=3`ni6=44iea94?=h9><1<75rb3df>5<2290;w)?7a;31b>N4ko1C?n:4$d7966=nl00;66gka;29?lbe2900eim50;9l520=831vn?79:186>5<7s-;3m7?=f:J0gc=O;j>0(h;5219j`<<722com7>5;hfa>5<=5fd883>>oci3:17djm:188mae=831d=:850;9~f677290>6=4?{%3;e?75n2B8ok5G3b68 `3=::1bh44?::kge?6=3`ni6=44iea94?=h9><1<75rb3dg>5<2290;w)?7a;31b>N4ko1C?n:4$d7966=nl00;66gka;29?lbe2900eim50;9l520=831vn?7::186>5<7s-;3m7?=f:J0gc=O;j>0(h;5219j`<<722com7>5;hfa>5<=5fd883>>oci3:17djm:188mae=831d=:850;9~f7?c290?6=4?{%3;e?75m2B8ok5G3b68 `3=ko1bh44?::kge?6=3`ni6=44o055>5<54;294~"60h0:>h5G3bd8L6e33-o>63:17pl=8083>1<729q/=5o513g8L6ea3A9h86*j5;32?lb>2900eio50;9j`g<722e:;;4?::a74?=83?1<7>t$0:b>44a3A9hj6F5;hfb>5<>i6??0;66sm31d94?3=83:p(<6n:00e?M5dn2B8o95+e4817>oc13:17djn:188mad=831bhn4?::m233<722wi>km50;794?6|,82j6<N4k=1/i84=3:kg=?6=3`nj6=44ie`94?=nlj0;66a>7783>>{e:;91<7=50;2x 4>f288o7E=lf:J0g1=#m<09>6gk9;29?lbf2900c<99:188yg7ek3:1?7>50z&21<7>t$0:b>44b3A9hj6F5;hfb>5<>oci3:17djm:188k4112900qo2b9K7f`<@:i?7)k::028ma?=831d=:850;9~f7d029096=4?{%3;e?75k2B8ok5G3b68 `3=991bh44?::m233<722wi>o;50;094?6|,82j6<N4k=1/i84>0:kg=?6=3f;<:7>5;|`1f6<72;0;6=u+19c957e<@:im7E=l4:&f1?773`n26=44o055>5<52;294~"60h0:>n5G3bd8L6e33-o>6<>4ie;94?=h9><1<75rb3ce>5<5290;w)?7a;31g>N4ko1C?n:4$d7955=nl00;66a>7783>>{e:hn1<7<50;2x 4>f288h7E=lf:J0g1=#m<0:<6gk9;29?j70>3:17pl=ac83>7<729q/=5o513a8L6ea3A9h86*j5;33?lb>2900c<99:188yg4f13:1>7>50z&2=<:181>5<7s-;3m7?=c:J0gc=O;j>0(h;5119j`<<722e:;;4?::a767=8381<7>t$0:b>44d3A9hj6F5;n342?6=3th8>k4?:383>5}#91k1=?m4H2ae?M5d<2.n97??;hf:>5<8`826f=O;jl0D>m;;%g6>46>i6??0;66sm33;94?4=83:p(<6n:00`?M5dn2B8o95+e4824>oc13:17b?86;29?xd4:>0;6?4?:1y'5=g=9;i0D>mi;I1`0>"b=3;;7dj6:188k4112900qo==5;296?6=8r.:4l4>2b9K7f`<@:i?7)k::028ma?=831d=:850;9~f7e329096=4?{%3;e?75k2B8ok5G3b68 `3=991bh44?::m233<722wi?>j50;094?6|,82j6<N4k=1/i84>0:kg=?6=3f;<:7>5;|`167<72?0;6=u+19c9566<@:im7E=l4:&f1?423`n26=44iec94?=nlk0;66gkc;29?j7513:17b?86;29?xd6jk0;6;4?:1y'5=g=9::0D>mi;I1`0>"b=38>7dj6:188mag=831bho4?::kgg?6=3f;957>5;n342?6=3th8mo4?:9594?6|@:i?7)?7a;34b>\3=3kp47<9:e821?7428h1i7?9:0695f0=#m80>7)k=:49'a6<23-ii6i>4$d491>"b?3?0(h655:&f=?3<,lk196*jb;78 `e==2.nh7;4$dg91>"bn3?0(k>55:&e5?3<,o8196*i3;78 c2==2.m97;4$g491>"a?3?0(k655:&e=?3<,ok196*ib;78 ce==2.mh7;4$gg91>"an3?0(<>?:49'557==2.:"68?0>7)??7;78 46?2<1/==755:&24d<23-;;n7;4$02`>0=#99n196*>0d86?!77n3?0("69?0>7)?>7;78 47?2<1/=<755:&25d<23-;:n7;4$03`>0=#98n196*>1d86?!76n3?0(<?4:;%317?3<,88?685+13791>"6:?087)?74;61?!c32<1/=5853:&0g<<6091/?no51928j4n0:2>4444=831b=5650;9j<0<72-;k1<65f3483>!70j39=7c?8a;38?l53290/=:l5379m52g=:21b?>4?:%34f?513g;5<#9>h1?;5a16c90>=n;80;6)?8b;15?k70i3?07d=?:18'52d=;?1e=:o56:9j6c<72-;k1465f2e83>!70j39=7c?8a;;8?l26290/=:l5419m52g=821b?k4?:%34f?273g;5<#9>h18=5a16c96>=n;m0;6)?8b;63?k70i3907d=l:18'52d=<91e=:o54:9j7g<72-;k1:65f3883>!70j3>;7c?8a;58?l5?290/=:l5419m52g=021b;i4?:%34f?1d3g;4;h5a>5<#9>h1;n5a16c95>=n?00;6)?8b;5`?k70i3807d97:18'52d=?j1e=:o53:9j32<72-;k1965f7483>!70j3=h7c?8a;48?l13290/=:l57b9m52g=?21b;>4?:%34f?1d3g;5<#9>h1;n5a16c9=>=n?80;6)?8b;5`?k70i3k07d9?:18'52d=?j1e=:o5b:9j2`<72-;k1h65f6b83>!70j3=h7c?8a;g8?l0e290/=:l57b9m52g=n21b:l4?:%34f?1d3g;47<3`<36=4+16`93f=i9>k1=?54i7594?"6?k07`827>=n>?0;6)?8b;5`?k70i3;?76g95;29 41e2>i0b<9n:078?l>3290/=:l57b9m52g=9?10e5=50;&23g<0k2d:;l4>7:9j<7<72-;5$05a>2e5<#9>h1;n5a16c95d=l1<7*>7c84g>h6?h0:n65f7d83>!70j3=h7c?8a;3`?>o0i3:1(<9m:6a8j41f28n07d8i:18'52d=?j1e=:o51d98m32=83.:;o48c:l23d<6n21b4n4?:%34f?>e3g;4;h:b>5<#9>h14o5a16c95>=n000;6)?8b;:a?k70i3807d67:18'52d=0k1e=:o53:9l=1<72-;k1=65`9083>!70j3387c?8a;08?j?7290/=:l5929m52g=;21d4k4?:%34f??43g;5<#9>h15>5a16c91>=h1m0;6)?8b;;0?k70i3<07b7l:18'52d=1:1e=:o57:9l=g<72-;<3f3j6=4+16`9=6=i9>k1565`9883>!70j3387c?8a;c8?j??290/=:l5929m52g=j21d5:4?:%34f??43g;5<#9>h15>5a16c9`>=h1<0;6)?8b;;0?k70i3o07b6k:18'52d=1:1e=:o5f:9lg6<72-;k1=65fc`83>>o6000;66g>o2i3:1(<9m:4;8j41f2910e8650;&23g<212d:;l4>;:k63?6=,8=i6874n05b>7=7c86=>h6?h0876g:5;29 41e2<30b<9n:598m02=83.:;o4:9:l23d<232c=?7>5$05a>0?56`>7`84?>o193:1(<9m:4;8j41f2110e;>50;&23g<212d:;l46;:k6b?6=,8=i6874n05b>d=7c86=>h6?h0i76g:d;29 41e2<30b<9n:b98m0e=83.:;o4:9:l23dn7>5$05a>0?56`>7`8e?>o??3:1(<9m:948j41f2910co650;&23g4=1<7*>7c8a3>h6?h0976am3;29 41e2k=0b<9n:298kg4=83.:;o4m7:l23d<332ei=7>5$05a>g17`85?>ifn3:1(<9m:c58j41f2>10clk50;&23g<=7c8a3>h6?h0j76anb;29 41e2k=0b<9n:c98kd?=83.:;o4m7:l23d5$05a>g17`8f?>if>3:1(<9m:c58j41f2o10cl;50;&23g0:9le1<72-;5$05a>g15<#9>h1n:5a16c956=7c8a3>h6?h0:865`a183>!70j3h<7c?8a;36?>ien3:1(<9m:c58j41f28<07blj:18'52d=j>1e=:o51698kgb=83.:;o4m7:l23d<6021dnn4?:%34f?d03g;4g<3fhj6=4+16`9f2=i9>k1=o54oc;94?"6?k0i;6`>7`82g>=hj<0;6)?8b;`4?k70i3;o76ana;29 41e2k=0b<9n:0g8?j?a290/=:l5b69m52g=9o10cn650;&23g4=7c8`3>h6?h0976al4;29 41e2j=0b<9n:298yv2e83:1:vP;b19>63c=lh16>;m5d89>624=lj16>;85dc9>633=l01v9oj:1853~X4m?1U?i64^5`;?[2e>2T8h:5Q4c18Z1063W>i;6P;639]0=2k?;_1gb>X4ll1U?ij4^2f`?[2d:2T?o<5Q4b28Z1da3W>ii6P;be9]0geX3i01U8l64^5c4?[2f>2T?m85Q4`6896b72m=01>ln:42896ga2<:01>l6:42896d?2<:01>l8:42896e52<:01>m>:42897d?2<801?l9:40897d32<801?l=:40897d72<801?oj:40897gd2<801?on:40897g?2<801?6j:40897>c2<801?6l:40897>e2<801?6n:408971e2<801?9n:408971>2<801?97:40897102<801>>6:408966?2<801>>8:40896612<801>>::40897`12<801?h::40897`32<801?h<:40897`52<801>==:40896572<801><9:40896432<801>om:97896ge282270=nb;1`3>;4ik0>m63;4ik0>;63;4ik0>963;4ik0=?63;4ik0==63;4ik0>j63;4ik0>h63;4ik0>n63;4ik03;6s|4c094?5|V=h970=ma;34g>;4io0:;n5rs353>5<5sW>>:63=71823a=z{=i?6=4<{_6`0>;49h0o563<188g=>{t;51k0?:63;4j90?:63;4j00?:63;4j>0?:63=15872>;59:0?:63=13872>;5980?:63=11872>;58o0?:63=0d872>;58m0?:63=0b872>;5=j0?:63=5c872>;5=h0?:63=58872>;5=10?:63=56872>;5=?0?:63=54872>;5==0?:63=4`872>;5<00?:63=49872>;5<>0?:63=47872>;5<<0?:63=45872>;5<:0?:63=43872>;6l:0?:63>d3872>;6l80?:63>d1872>;6ko0?:63>cd872>;6km0?:63>cb872>;6kk0?:63>c`872>;5l10?:63=d6872>;5l<0?:63=d5872>;5l?0?:63=d2872>;5l;0?:63=d1872>;5ko0?:63=d0872>;5mj0?:63=ec872>;5mh0?:63=e8872>;5m10?:63=e6872>;5m?0?:63=e4872>;5m=0?:63=e2872>;5>o0?:63=71872>;5>h0?:63=68872>;4190?:63<8g872>;40l0?:63<8e872>;40j0?:63<8c872>;40h0?:63<88872>;4110?:63<96872>;41?0?:63<94872>;41=0?:63<92872>;41;0?:63<90872>;4010?:63<86872>;4ik0?m6s|30594?4|V=?h70=>7;34`>{t;49>0?:63<17872>;4jj0?:63;4jk0?:63;4k80?:63>ae872>;6ij0?:63>ac872>;6ih0?:63>a8872>;6i10?:63>a6872>;6i?0?:63>a4872>;6n00?:63>f9872>;6n>0?:63>f7872>;6n<0?:63>f5872>;6n:0?:63>f3872>;6n80?:63>e6872>;6m?0?:63>e4872>;6m=0?:63>e2872>;6m;0?:63>e0872>;6m90?:63>dg872>;6ll0?:63=39872>;5;>0?:63=37872>;5;<0?:63=35872>;5;:0?:63=33872>;5;80?:63=31872>;4=k0?:63<58872>;4=h0?:63<5b872>;4=m0?:63<5d872>;4=o0?:63<61872>;4>80?:63<4g872>;4;4;4;4<>0?:63<49872>;4?:0?:63<73872>;4?80?:63<71872>;4>o0?:63<6d872>;4>m0?:63<6b872>;4>k0?:63{t;>n1<783;{t;>h1<7{t;>31<7{t;>=1<7{t;1<1<703;;70=67;34`>{t;1>1<7>3;{t;181<7<3;{t;1:1<7:3;{t;>o1<7{t<;21<77}Y<9901>om:7c8yv25=3:1>vP;039>7dd=>01v9<;:181[279278mo498:p075=838pR9>?;<1bf?003ty?>?4?:3y]7c`<5:ki6;84}r614?6=:rT8ji523``920=z{=;m6=4={_1eg>;4ik0386s|40g94?4|V:li70=nb;:0?xu39m0;6?uQ3gc896ge2120q~:>c;296~X4n016?ll5839~w17e2909wS=i8:?0eg2`:47>52z\0b0=:;hh1;h5rs534>5<5sW9m863{t<8?1<77}Y;o;01>om:768yv26;3:1>vP7dd=0j1v9?=:181[5bn278mo48d:p047=838pR>kj;<1bf?1e3ty?==4?:3y]7`b<5:ki6:74}r63b?6=:rT8in523``93==z{=:n6=4={_1ff>;4ik0<;6s|41f94?4|V:oj70=nb;55?xu38j0;6?uQ3d;896ge2>?0q~:=f;296~X38h16?ll5759~w14b2909wS:?9:?0eg249n7>52z\743=:;hh1;<5rs50b>5<5sW>;963{t<;31<77}Y;o901>om:7f8yv26>3:1>vP7dd=>j1v9>m:181[5b?278mo49b:p563=833p1>j>:05;?84ei3>270270<87;6:?857=3>270270==4;6:?xu51j0;6?u228`915=::0n1=:84}r1a2?6=9hq6>4l516a896d>28=o70h70h70h70h70;5l80?o63=eb87g>;5mk0?o63=e`87g>;5m00?o63=e987g>;5m>0?o63=e787g>;5m<0?o63=e587g>;5m:0?o63=6g823f=::>:1=:m4=34b>1e<5;<269m4}r0:f?6=7e9>63e=lj16?lj5d89>633=lh1v>li:181<~;49>0?o63<1787g>;4k80:;i521`f90f=:9hi18n521``90f=:9hk18n521`;90f=:9h218n521`590f=:9h<18n521`790f=:9o318n521g:90f=:9o=18n521g490f=:9o?18n521g690f=:9o918n521g090f=:9o;18n521d590f=:9l<18n521d790f=:9l>18n521d190f=:9l818n521d390f=:9l:18n521ed90f=:9mo18n5222:90f=:::=18n5222490f=:::?18n5222690f=:::918n5222090f=:::;18n5222290f=z{:;36=4<{<123?37349::7;?;<12=?70>2wx?<850;1x967128=o70=>a;fb?85613nj7p}6}:;k;19=523c2952b<5:km6994}r1a5?6=:r78n<4>7e9>7g5=l01v>lm:18085ek3?;70=ma;64?85ej3;3ty8mk4?:2y>7g6==916?lh516f896d42mk0q~=ma;297~;4jh0:;i523c`915=:;ko1hl5rs2`1>5<3s49i57?8c:?0f=<6?j16?o9516a896d428==7p}70|5:h36<9k;<020?2d348:?7:l;<026?2d348:=7:l;<024?2d348;j7:l;<03a?2d348;h7:l;<03g?2d348>o7:l;<06f?2d348>m7:l;<06=?2d348>47:l;<063?2d348>:7:l;<061?2d348>87:l;<07e?2d348?57:l;<07;40o0:;h5239g952c<5:2o6<9j;<1;g?70m2784o4>7d9>7=g=9>o01>66:05f?85>03;41b349287?8e:?0=6<6?l16?4<516g896?628=n70=78;34a>;40>0:;h523`f9`d=:;hh1=564}r1a`?6=;r78o?4>7b9>7f7=9>i01>lj:055?xu4k90;641c349>n7:l;<16=?70k2789l4;c:?01f<3k2789i4;c:?01`<3k2789k4;c:?025<3k278:<4;c:?00c<3k2788h4;c:?00f<3k2788o4;c:?00a<3k2788l4;c:?00<<3k2788:4;c:?00=<6?j16?:=54b9>724=726=73c=73e=w0?nd;73?87a13;ag8ge>;6j80o563>b28gg>{t9h>1<7=t=0cg>41c349:?7jn;<134?bf3ty:mh4?:3y>5de==916=lh51648yv7f;3:1?v3>ab823a=:;881h4522gd9`<=z{8h;6=4={<3bf?3734;i=7?86:p5d4=839p1ag<58h<6i74=0`:>ae<58hi6im4}r3b5?6=;r7:ml4>7e9>747=l016>kk5d89~w4d32909w0?n9;73?87e=3;<:6s|1`294?5|58k26<9k;<125?be348mi7jm;|q2f3<72;q6=l65519>5g1=9><0q~?6f;297~;6i10:;i523029`<=::on1h45rs0`;>5<5s4;j;7;?;<3a=?70>2wx=4k50;1x94g028=o70=>0;fa?84al3ni7p}>b`83>7}:9h<19=521ca952053z?2e3<6?m16?=h5d89>6ce=l01v{t90i1<7=t=0c6>41c349;j7jm;<0eg?be3ty99>4?:4y>642==916>8m516f897712mk01??7:e;8977f2mi0q~5<5s48:?7;?;<022?70>2wx>=o50;1x977428=o70<68;f:?84?=3nh7p}=1683>7}::8819=5220:952053z?157<6?m16>495d`9>6=2=lh1v??6:18584693?;70<>a;342>;59j0om63=1d8g=>;5:90oo63=238gg>{t:921<7=t=332>41c3482;7j6;<0;0?b>3ty9=o4?:3y>646==916>i:05g?84>>3n270<73;f:?xu59o0;6?u221g915=::;:1=:84}r031?6=;r79

7e9>6<3=lh16>5<5d`9~w7462909w03483>7j6;|q160<72;q6>=m5519>670=9><0q~5<5s48>o7;?;<07e?70l2wx>9>50;0x973e2<:01?:6:05g?xu5=;0;69u224`952b<5;;=6i74=33;>ag<5;;j6il4}r00b?6=:r799l4:0:?10=<6?m1v?;>:180842i3;;59h0om6s|22g94?4|5;?268>4=364>41c3ty99=4?:3y>60?=9>n01??n:e;8yv44l3:1>v3=59864>;55<2s48>47?8d:?15f?4kb:p66e=838p1?;8:428972228=o7p}=4d83>1}::<=1=:j4=33f>ad<5;8;6io4=301>ag52z?113<28279894>7e9~w72c2908w0<:6;34`>;5:90o563=238g=>{t::k1<706<5;>86<9k;|q10f<72:q6>8;516f897442m301?<9:ec8yv4413:1>v3=55864>;5<;0:;i5rs36a>5<5s48>87?8d:?1632<:017e9>5d`=l016=o?5d`9>5g5=lk1v{t9lo1<7=t=0d4>41c34;i=7jm;<3a7?bf3ty:hl4?:3y>5c0==916=h:516f8yv7bl3:1>v3>f7823a=:9k91h45rs0f:>5<5s4;m97;?;<3f7?70l2wx=hm50;7x94`228=o70?m5;f:?87e?3nj70?m9;fa?87ej3ni7p}>d983>7}:9o>19=521d0952b54z?2b1<6?m16=o95dc9>5g?=lh16=ol5d`9~w4b02909w0?i3;73?87b93;34;in7j6;|q2`3<72;q6=k<5519>5`6=9>n0q~?j9;297~;6n;0:;i521ca9`<=:9kl1hl5rs0f6>5<5s4;m=7;?;<3gb?70l2wx=h650;0x94`628=o70?mf;f:?xu5:o0;6?u225c915=:::21=:j4}r01a?6=:r79844:0:?172<6?m1v?{t:;i1<706<5;9>6<9k;|q16g<72;q6>985519>662=9>n0q~<=a;296~;5<<0><63=32823a=z{;826=4={<070?373488>7?8d:p67>=838p1?:<:428975628=o7p}=2683>7}::=819=52222952b52z?2a2<2827:h>4>7e9~w4e?2909w0?j6;73?87c:3;68>4=0f2>41c3ty:o;4?:3y>5`2==916=i>516f8yv7d=3:1>v3>e2864>;6ko0:;i5rs0a7>5<5s4;n>7;?;<3`a?70l2wx=n=50;0x94c62<:01{t9m>1<7?t=0ff>41c3ty9i?4?:4y>5a5==916>hm516f894>e2m301?6::e;896ge2:=0q~?ia;296~;6l;0><63>8c8233=z{8li6=4={<3g5?3734;3o7?86:p5ce=838p1c28==7p}>fe83>7}:9jl19=5219g952052z?2g`<2827:4k4>779~w4`a2909w0?ld;73?87>83;<:6s|21294?4|58ih68>4=0;2>4113ty9<<4?:3y>5fd==916=4<51648yv47:3:1>v3>c`864>;61:0:;;5rs24b>5<3s48847;?;<147?70l27:594k9:?0eg<392wx>8j50;0x97502<:01<7;:055?xu5=l0;6?u2224915=:90?1=:84}r06b?6=:r79?84:0:?2=3<6??1v?8?:181844<3?;70?67;342>{t:?;1<706<58336<99;|q127<72;q6>><5519>5<0q~<93;296~;5;80><63>9`8233=z{;<70<70<70<70<70<70<70<70<70<70=nd;fa?841=3;<:63=9e8g=>{t:h=1<706<5;i86<99;|q1g`<72=q6>i6516f897cd2<:01?77:ea897e32m30q~0><63=c38233=z{;io6=4;{<0g3?70l279io4:0:?1==1}::m?1=:j4=3g:>06<5;3<6il4=3`6>a?52z?1`1<28279nk4>779~w7ef290?w0;5m10><63=978gg>;5j:0o56s|2`794?4|5;n=68>4=3a2>4113ty9on4?:5y>6a0=9>n01?kn:42897?02mi01?l8:e;8yv4f:3:1>v3=d2864>;5jl0:;;5rs3a:>5<3s48o?7?8d:?1a2<282795;4kb:?1f4l?50;0x97b52<:01?lk:055?xu5k10;69u22e0952b<5;o=68>4=3;6>ae<5;km6i74}r0:b?6=:r79h=4:0:?1fg<6??1v?m9:18784c83;;51=0on63=ac8g=>{t:0o1<706<5;hj6<99;|q1g0<72=q6>nh516f897c42<:01?7;:ec897g>2m30q~<63=bb8233=z{;i<6=4;{<0g5?70l279i84:0:?1=0=838p1?m<:5;897d?28==7p}=c583>7}::j91=?64=3a7>4113ty9n;4?:2y>6f4=<016>o65489>6g0=9><0q~5522c:95=5<5;h26<99;|q1f1<72:q6>n?5489>6g0=<016>o:51648yv4e?3:1?v3=c0826==::k<1=5=4=3`4>4113ty9n?4?:2y>6f6=<016>o:5489>6g4=9><0q~5522c695=5<5;h>6<99;|q1f5<72:q6>oh5489>6g4=<016>o>51648yv4e;3:1?v3=bg826==::k81=5=4=3`0>4113ty9mh4?:2y>6gc=<016>o>5489>6dc=9><0q~5522c295=5<5;h:6<99;|q1ef<72:q6>oj5489>6dc=<016>lm51648yv4fn3:1?v3=be826==::ho1=5=4=3ce>4113ty9ml4?:2y>6ge=<016>lm5489>6dg=9><0q~5522`a95=5<5;ko6<99;|q1e=<72:q6>ol5489>6dg=<016>l651648yv4fj3:1?v3=bc826==::hk1=5=4=3ca>4113ty9m44?:2y>6gg=9;201?o7:0:0?84f13;<:6s|2d394?3|5;oi6<9k;<3;g?b>34;3n7jn;<0;1?be349jn7=:;|q1a5<72ho516f894>c2m301<6l:ec897>32mi01>om:268yv4cn3:19v3=e8823a=:91o1h45219f9`d=::1>1ho523``976=z{;nn6=4:{<0f4kc:?0eg<4:2wx>ij50;7x97c028=o70?60;f:?87?n3nj70<73;fa?85fj39:7p}=db83>0}::l<1=:j4=0;2>a?<583;6io4=3:1>ae<5:ki6>>4}r0gf?6==r79i84>7e9>5<4=l016=4?5d`9>6=4=lk16?ll52g9~w7bf290>w0;61:0o563>938ge>;5080on63{t:m31<7:t=3g0>41c34;2?7jn;<0;5?bf349jn7;h5519>626==916>:<51648yv41n3:1>v3=6g823a=::>81h45rs34a>5<5s48=m7;?;<05g?70>2wx>;650;4x970f28=o70<9e;fa?841k3ni70<82;fa?841>3n270<95;fa?xu5>m0;6?u227;915=::?o1=:84}r053?6=>r79:44>7e9>63c=l016>;m5d`9>624=lh16>;85d`9>633=lj1v?66:18184?m3>270<7d;342>{t:091<74>4348247?86:p6l3nj7p}=8983>7}::1n1845229a95207>52z?14951648yv4??3:1>v3=8b87=>;50k0:;;5rs3;2>5<5s483o7?73:?1=3<6??1v?69:18184?j3>270<7a;342>{t:0:1<74>4348297?86:p6=`=838p1?6n:0:0?84><3;<:6s|26494?4|5;=i6974=35b>4113ty94=4?:3y>62d=91901?6::055?xu5100;6?u226`9520<5;3o6il4}r041?6=:r79;l4;9:?13<<6??1v?9i:181840i3;3?63=858233=z{;=?6=4={<04=?2>348<47?86:p62c=838p1?96:0:0?84?;3;<:6s|26194?4|5;=36974=354>4113ty9;i4?:3y>62>=91901?6=:055?xu5?j0;6?u226595=5<5;2:6<99;|q041<72;q6?=75489>75>=9><0q~=?e;296~;4800:4>52301952052z?04<<6??16?<75db9~w6642909w0=?8;6:?857?3;<:6s|31f94?4|5::36<6<;<126?70>2wx?=<50;0x96602=301>>9:055?xu48j0;6?u231595=5<5:;:6<99;|q044<72;q6?=85489>753=9><0q~=?b;296~;48?0:4>52302952052z?040<60:16?=h51648yv4a93:1>v3=f787=>;5n<0:;;5rs3da>5<5s48m:7?73:?045<6??1v>?;:18184a>3;<:63<188gf>{t:o:1<71?<5;l?6<99;|q1bd<72;q6>k;5191897`a28==7p}=eg83>7}::o>184522g1952052z?1b1<60:16>kk51648yv4bm3:1>v3=f287=>;5n;0:;;5rs3d;>5<5s48m?7?73:?1ba<6??1v?h8:18184a:3;3?63=fb8233=z{:=?6=4>ez?01g<3?278944;7:?01d<3?2789n4;7:?01a<3?2789h4;7:?01c<3?278:=4;7:?024<3?2788k4;7:?00`<3?2788n4;7:?00g<3?2788i4;7:?00d<3?278844;7:?002<3?278854;7:?036<3?278;?4;7:?034<3?278;=4;7:?02c<3?278:h4;7:?02a<3?278:n4;7:?02g<3?278=l4>779>7dd=;j201>om:bc8yv5383:18v3<5c864>;4<00:;i523029`f=:;;31h45rs271>5<4s49>n7?8d:?02a<28279ji4kc:p76c=83>p1>;6:428962028=o70=?f;f`?855=3n27p}<5183>6}:;<31=:j4=24a>06<5;lh6im4}r10b?6=771=l01v>;>:180852i3;;5nj0om6s|35394?2|5:?h68>4=26b>41c349:<7jn;<11f?b>3ty89>4?:2y>70e=9>n01>8j:42897`c2mk0q~=;2;290~;4=m0><63<4c823a=:;8;1hn5233f9`<=z{:??6=4<{<16`?70l278:k4:0:?1b`:l:05g?85693nj70==f;f:?xu4=<0;6>u234g952b<5:=;68>4=3df>ag54z?01c<282788i4>7e9>744=lj16?>?5d89~w6312908w0=:f;34`>;4?80><63=fg8gg>{t;=?1<7:t=243>06<5:>n6<9k;<126?bf3498?7j6;|q012<72:q6?;>516f896152<:01?hi:ec8yv53>3:18v3<60864>;45<4s49==7?8d:?036<28278<=4k9:p775=838p1>:i:428965d28==7p}<2383>7}:;=o19=5232`952052z?00f<28278?44>779~w67a2909w0=;b;73?85403;<:6s|33394?4|5:>o68>4=21b>4113ty8=h4?:3y>71g==916?>951648yv56l3:1>v3<48864>;4;?0:;;5rs23a>5<5s49?;7;?;<100?70>2wx?=::055?xu4;;0;6?u232a90<=:;:81=:84}r10`?6=:r78?n4>299>76b=9><0q~=<0;297~;4;k0?563<3387=>;4;90:;;5rs210>5<4s498n7?=8:?077<60:16?>=51648yv55m3:1?v3<3`87=>;4;90?563<2d8233=z{:9:6=4<{<10e?750278?=4>829>767=9><0q~==c;297~;4;00?563<2d87=>;4:j0:;;5rs20e>5<4s49857?=8:?06`<60:16??h51648yv55i3:1?v3<3987=>;4:j0?563<2`8233=z{:8o6=4<{<10n4>829>77b=9><0q~==8;297~;4;>0?563<2`87=>;4:10:;;5rs20a>5<4s498;7?=8:?06d<60:16??l51648yv55>3:1?v3<3787=>;4:10?563<278233=z{:826=4<{<102?750278>54>829>77?=9><0q~==4;297~;4;<0?563<2787=>;4:=0:;;5rs204>5<4s49897?=8:?063<60:16??951648yv55=3:1?v3<35826==:;;>1=5=4=206>4113ty8:44?:5y>724=9>n01<7::e;894?32mk01>om:2d8yv5103:18v3<70823a=:90<1h4521879`d=:;hh1?h5rs244>5<3s49<<7?8d:?2=2?3nj70=nb;1`?xu4><0;69u237g952b<58326i74=0;;>ag<5:ki6>l4}r150?6=7e9>57dd=;h1v>8<:187851k3;9c8g=>;61h0om63{t;?81<7=t=24a>41c34;2n7jn;<1bf?5?3ty8mh4?:01x96?72==01>6i:55896>b2==01>6k:55896>d2==01>6m:55896>f2==01>66:55896??2==01>78:55896?12==01>7::55896?32==01>7<:55896?52==01>7>:55896>?2==01>68:558970128==7p}7}:;0:19=523``9g6=z{:k;6=4={<1;b?37349jn77;;|q0=c<72;q6?5k5519>7dd=1;1v>7j:18185?l3?;70=nb;;2?xu41m0;6?u239a915=:;hh15=5rs2;`>5<5s493n7;?;<1bf?>a3ty85o4?:3y>7=g==916?ll58d9~w6?f2909w0=79;73?85fj33o7p}7}:;0219=523``9=f=z{:k26=4={<1:3?37349jn7m>;|q0e=<72;q6?485519>7dd=1k1v>o8:18185>=3?;70=nb;;b?xu4i?0;6?u2386915=:;hh1545rs2c6>5<5s492?7;?;<1bf???3ty8m94?:3y>7<4==916?ll5969~w6g42909w0=61;73?85fj33=7p}7}:;1219=523``9=0=z{:326=4={<1;3?37349jn76k;|q0ef<72;q6?lj5164896ge2j30q~?<7;296~;5::0om63=23826<=z{8?86=4={<3ag?bf34;in7?=9:p672=838p1?<9:e`8974528==7p}>be83>7}:9kl1ho521c`952018o<4$2a0>4163ty?n44?:3y]0g?<5=>18o74$2a0>4153ty?m>4?:3y]0d5<5=>18l=4$2a0>4143ty?>54?:3y]052<5=>18=:4$2a0>4503ty?>;4?:3y]055<5=>18==4$2a0>4253ty?>84?:3y]054<5=>18=<4$2a0>42e3ty?>94?:3y]057<5=>18=?4$2a0>42c3ty?>>4?:3y]056<5=>18=>4$2a0>42b3ty?>?4?:3y]7c`<5=>1?kh4$2a0>42a3ty?>=4?:3y]7cb<5=>1?kj4$2a0>4373ty?=k4?:3y]7ce<5=>1?km4$2a0>4363ty?=h4?:3y]7cd<5=>1?kl4$2a0>4353ty?=i4?:3y]7cg<5=>1?ko4$2a0>4333ty?=n4?:3y]7c?<5=>1?k74$2a0>4323ty?=o4?:3y]7c><5=>1?k64$2a0>4313ty?=l4?:3y]7c1<5=>1?k94$2a0>4303ty?=44?:3y]7c0<5=>1?k84$2a0>43?3ty?=54?:3y]7c3<5=>1?k;4$2a0>43>3ty?=:4?:3y]7c2<5=>1?k:4$2a0>43f3ty?=84?:3y]7c4<5=>1?k<4$2a0>43e3ty?=94?:3y]7c7<5=>1?k?4$2a0>43d3ty?=>4?:3y]7c6<5=>1?k>4$2a0>43c3ty?=?4?:3y]7``<5=>1?hh4$2a0>43b3ty?=<4?:3y]7`c<5=>1?hk4$2a0>43a3ty?==4?:3y]7`b<5=>1?hj4$2a0>4073ty?1?hm4$2a0>4063ty?1?hl4$2a0>4053ty?1?ho4$2a0>4043ty?1?h74$2a0>4033ty?>k4?:3y]05g<5=>18=o4$2a0>4023ty?>h4?:3y]05?<5=>18=74$2a0>4013ty?>i4?:3y]05><5=>18=64$2a0>4003ty?>n4?:3y]051<5=>18=94$2a0>40?3ty?>o4?:3y]050<5=>18=84$2a0>40>3ty?>l4?:3y]053<5=>18=;4$2a0>40f3ty?>44?:3y]7cc<5=>1?kk4$2a0>40e3ty?><4?:3y]7c5<5=>1?k=4$2a0>40d3ty?=;4?:3y]7`><5=>1?h64$2a0>40c3ty?1?h94$2a0>40b3ty?o94?:3y]0f2<5=>18n:4$2a0>40a3ty?n=4?:3y]0g6<5=>18o>4$2a0>4173ty?8o4?:3y]06?<5=>18>74$2a0>4513ty?844?:3y]06><5=>18>64$2a0>45?3ty?854?:3y]061<5=>18>94$2a0>45>3ty?8:4?:3y]060<5=>18>84$2a0>45f3ty?8;4?:3y]063<5=>18>;4$2a0>45e3ty?884?:3y]062<5=>18>:4$2a0>45d3ty?894?:3y]065<5=>18>=4$2a0>45c3ty?8>4?:3y]064<5=>18><4$2a0>45b3ty?994?:3y]017<5=>189?4$2a0>45a3ty?9>4?:3y]016<5=>189>4$2a0>4273ty?9?4?:3y]06`<5=>18>h4$2a0>4263ty?9<4?:3y]06c<5=>18>k4$2a0>4243ty?9=4?:3y]06b<5=>18>j4$2a0>4233ty?8k4?:3y]06e<5=>18>m4$2a0>4223ty?8h4?:3y]06d<5=>18>l4$2a0>4213ty?8i4?:3y]06g<5=>18>o4$2a0>4203ty?8n4?:3y]067<5=>18>?4$2a0>42?3ty?8?4?:3y]066<5=>18>>4$2a0>42>3ty?9n4?:3y]00e<5=>188m4$2a0>42f3ty?9;4?:3y]000<5=>18884$2a0>42d3twe4oh50;0xL6e33td3o=4?:3yK7f252zJ0g1=zf1i96=4={I1`0>{i0j91<7d=3:1>vFm;;|l;g=<72;qC?n:4}o:`=?6=:rB8o95rn9ab>5<5sA9h86sa8b`94?4|@:i?7p`7cb83>7}O;j>0qc6ld;296~N4k=1vb5mj:181M5d<2we4nh50;0xL6e33td3h=4?:3yK7f252zJ0g1=zf1n96=4={I1`0>{i0m91<7c=3:1>vFm;;|l;`=<72;qC?n:4}o:g=?6=:rB8o95rn9fb>5<5sA9h86sa8e`94?4|@:i?7p`7db83>7}O;j>0qc6kd;296~N4k=1vb5jj:181M5d<2we4ih50;0xL6e33td3i=4?:3yK7f252zJ0g1=zf1o96=4={I1`0>{i0l91<7b=3:1>vFm;;|l;a=<72;qC?n:4}o:f=?6=:rB8o95rn9gb>5<5sA9h86sa8d`94?4|@:i?7p`7eb83>7}O;j>0qc6jd;296~N4k=1vb5kj:181M5d<2we4hh50;0xL6e33td3j=4?:3yK7f252zJ0g1=zf1l96=4={I1`0>{i0o91<7a=3:1>vFm;;|l;b=<72;qC?n:4}o:e=?6=:rB8o95rn9db>5<5sA9h86sa8g`94?4|@:i?7p`85683>4}O;j>0qc964;295~N4k=1vb:7::182M5d<2we;4850;3xL6e33td<5:4?:0yK7f251zJ0g1=zf>326=4>{I1`0>{i?0k1<7?tH2a7?xh01k0;6k3:1=vFm;;|l4=c<728qC?n:4}o5b4?6=9rB8o95rn6c2>5<6sA9h86sa7`094?7|@:i?7p`8a283>4}O;j>0qc9n4;295~N4k=1vb:o::182M5d<2we;l850;3xL6e33td51zJ0g1=zf>k26=4>{I1`0>{i?hk1<7?tH2a7?xh0ik0;6m;;|l4ec<728qC?n:4}o5a4?6=9rB8o95rn6`2>5<6sA9h86sa7c094?7|@:i?7p`8b283>4}O;j>0qc9m4;295~N4k=1vb:l::182M5d<2we;o850;3xL6e33td51zJ0g1=zf>h26=4>{I1`0>{i?kk1<7?tH2a7?xh0jk0;6m;;|l4fc<728qC?n:4}o5`4?6=9rB8o95rn6a2>5<6sA9h86sa7b094?7|@:i?7p`8c283>4}O;j>0qc9l4;295~N4k=1vb:m::182M5d<2we;n850;3xL6e33td51zJ0g1=zf>i26=4>{I1`0>{i?jk1<7?tH2a7?xh0kk0;6m;;|l4gc<728qC?n:4}o5g4?6=9rB8o95rn6f2>5<6sA9h86sa7e094?7|@:i?7p`8d283>4}O;j>0qc9k4;295~N4k=1vb:j::182M5d<2we;i850;3xL6e33td51zJ0g1=zf>n26=4>{I1`0>{i?mk1<7?tH2a7?xh0lk0;6m;;|l4`c<728qC?n:4}o5f4?6=9rB8o95rn6g2>5<6sA9h86sa7d094?7|@:i?7p`8e283>4}O;j>0qc9j4;295~N4k=1vb:k::182M5d<2we;h850;3xL6e33td51zJ0g1=zf>o26=4>{I1`0>{i?lk1<7?tH2a7?xh0mk0;6m;;|l4ac<728qC?n:4}o5e4?6=9rB8o95rn6d2>5<6sA9h86sa7g094?7|@:i?7p`8f283>4}O;j>0qc9i4;295~N4k=1vb:h::182M5d<2we;k850;3xL6e33td51zJ0g1=zf>l26=4>{I1`0>{i?ok1<7?tH2a7?xh0nk0;6m;;|l4bc<728qC?n:4}o:34?6=9rB8o95rn922>5<6sA9h86sa81094?7|@:i?7p`70283>4}O;j>0qc6?4;295~N4k=1vb5>::182M5d<2we4=850;3xL6e33td3<:4?:0yK7f251zJ0g1=zf1:26=4>{I1`0>{i09k1<7?tH2a7?xh?8k0;67k3:1=vFm;;|l;4c<728qC?n:4}o:24?6=9rB8o95rn932>5<6sA9h86sa80094?7|@:i?7p`71283>4}O;j>0qc6>4;295~N4k=1vb5?::182M5d<2we4<850;3xL6e33td3=:4?:0yK7f251zJ0g1=zf1;26=4>{I1`0>{i08k1<7?tH2a7?xh?9k0;66k3:1=vFm;;|l;5c<728qC?n:4}o:14?6=9rB8o95rn902>5<6sA9h86sa83094?7|@:i?7p`72283>4}O;j>0qc6=4;295~N4k=1vb5<::182M5d<2we4?850;3xL6e33td3>:4?:0yK7f251zJ0g1=zf1826=4>{I1`0>{i0;k1<7?tH2a7?xh?:k0;65k3:1=vFm;;|l;6c<728qC?n:4}o:04?6=9rB8o95rn912>5<6sA9h86sa82094?7|@:i?7p`73283>4}O;j>0qc6<4;295~N4k=1vb5=::182M5d<2we4>850;3xL6e33td3?:4?:0yK7f251zJ0g1=zf1926=4>{I1`0>{i0:k1<7?tH2a7?xh?;k0;64k3:1=vFm;;|l;7c<728qC?n:4}o:74?6=9rB8o95rn962>5<6sA9h86sa85094?7|@:i?7p`74283>4}O;j>0qc6;4;295~N4k=1vb5:::182M5d<2we49850;3xL6e33td38:4?:0yK7f251zJ0g1=zf1>26=4>{I1`0>{i0=k1<7?tH2a7?xh?3k3:1=vFm;;|l;0c<728qC?n:4}o:64?6=9rB8o95rn972>5<6sA9h86sa84094?7|@:i?7p`75283>4}O;j>0qc6:4;295~N4k=1vb5;::182M5d<2we48850;3xL6e33td39:4?:0yK7f247>51zJ0g1=zf1?26=4>{I1`0>{i02k3:1=vFm;;|l;1c<728qC?n:4}o:54?6=9rB8o95rn942>5<6sA9h86sa87094?7|@:i?7p`76283>4}O;j>0qc694;295~N4k=1vb58::182M5d<2we4;850;3xL6e33td3::4?:0yK7f251zJ0g1=zf1<26=4>{I1`0>{i0?k1<7?tH2a7?xh?>k0;61k3:1=vFm;;|l;2c<728qC?n:4}o:44?6=9rB8o95rn952>5<6sA9h86sa86094?7|@:i?7p`77283>4}O;j>0qc684;295~N4k=1vb59::182M5d<2we4:850;3xL6e33td3;:4?:0yK7f251zJ0g1=zf1=26=4>{I1`0>{i0>k1<7?tH2a7?xh??k0;60k3:1=vFm;;|l;3c<728qC?n:4}o:;4?6=9rB8o95rn9:2>5<6sA9h86sa89094?7|@:i?7p`78283>4}O;j>0qc674;295~N4k=1vb56::182M5d<2we45850;3xL6e33td34:4?:0yK7f251zJ0g1=zf1226=4>{I1`0>{i01k1<7?tH2a7?xh?0k0;6?k3:1=vFc290:wE=l4:m<=c=83;pD>m;;|l;5<6sA9h86sa88094?7|@:i?7p`79283>4}O;j>0qc664;295~N4k=1vb57::182M5d<2we44850;3xL6e33td35:4?:0yK7f251zJ0g1=zf1326=4>{I1`0>{i00k1<7?tH2a7?xh?1k0;6>k3:1=vFm;;|l;=c<728qC?n:4}o:b4?6=9rB8o95rn9c2>5<6sA9h86sa8`094?7|@:i?7p`7a283>4}O;j>0qc6n4;295~N4k=1vb5o::182M5d<2we4l850;3xL6e33td3m:4?:0yK7f251zJ0g1=zf1k26=4>{I1`0>{i0hk1<7?tH2a7?xh?ik0;6fk3:1=vFm;;|l;ec<728qC?n:4}o:a4?6=9rB8o95rn9`2>5<6sA9h86sa8c094?7|@:i?7p`7b283>4}O;j>0qc6m4;295~N4k=1vb5l::182M5d<2we4o850;3xL6e33td3n:4?:0yK7f251zJ0g1=zf1h26=4>{I1`0>{i0kk1<7?tH2a7?xh?jk0;6ek3:1=vFm;;|~yEFDsh<>69>i25f;exFGJr:vLM^t}AB \ No newline at end of file diff --git a/usrp2/coregen/fifo_xlnx_512x36_2clk_36to18.v b/usrp2/coregen/fifo_xlnx_512x36_2clk_36to18.v index 6f849b24c..b3d994ae8 100644 --- a/usrp2/coregen/fifo_xlnx_512x36_2clk_36to18.v +++ b/usrp2/coregen/fifo_xlnx_512x36_2clk_36to18.v @@ -23,7 +23,7 @@ * appliances, devices, or systems. Use in such applications are * * expressly prohibited. * * * -* (c) Copyright 1995-2007 Xilinx, Inc. * +* (c) Copyright 1995-2009 Xilinx, Inc. * * All rights reserved. * *******************************************************************************/ // The synthesis directives "translate_off/translate_on" specified below are @@ -38,30 +38,30 @@ `timescale 1ns/1ps module fifo_xlnx_512x36_2clk_36to18( - din, - rd_clk, - rd_en, rst, wr_clk, + rd_clk, + din, wr_en, + rd_en, dout, - empty, - full); + full, + empty); -input [35 : 0] din; -input rd_clk; -input rd_en; input rst; input wr_clk; +input rd_clk; +input [35 : 0] din; input wr_en; +input rd_en; output [17 : 0] dout; -output empty; output full; +output empty; // synthesis translate_off - FIFO_GENERATOR_V4_3 #( + FIFO_GENERATOR_V6_1 #( .C_COMMON_CLOCK(0), .C_COUNT_TYPE(0), .C_DATA_COUNT_WIDTH(9), @@ -70,6 +70,8 @@ output full; .C_DOUT_RST_VAL("0"), .C_DOUT_WIDTH(18), .C_ENABLE_RLOCS(0), + .C_ENABLE_RST_SYNC(1), + .C_ERROR_INJECTION_TYPE(0), .C_FAMILY("spartan3"), .C_FULL_FLAGS_RST_VAL(0), .C_HAS_ALMOST_EMPTY(0), @@ -122,39 +124,41 @@ output full; .C_WR_PNTR_WIDTH(9), .C_WR_RESPONSE_LATENCY(1)) inst ( - .DIN(din), - .RD_CLK(rd_clk), - .RD_EN(rd_en), .RST(rst), .WR_CLK(wr_clk), + .RD_CLK(rd_clk), + .DIN(din), .WR_EN(wr_en), + .RD_EN(rd_en), .DOUT(dout), - .EMPTY(empty), .FULL(full), - .CLK(), - .INT_CLK(), + .EMPTY(empty), .BACKUP(), .BACKUP_MARKER(), + .CLK(), + .SRST(), + .WR_RST(), + .RD_RST(), .PROG_EMPTY_THRESH(), .PROG_EMPTY_THRESH_ASSERT(), .PROG_EMPTY_THRESH_NEGATE(), .PROG_FULL_THRESH(), .PROG_FULL_THRESH_ASSERT(), .PROG_FULL_THRESH_NEGATE(), - .RD_RST(), - .SRST(), - .WR_RST(), - .ALMOST_EMPTY(), + .INT_CLK(), + .INJECTDBITERR(), + .INJECTSBITERR(), .ALMOST_FULL(), - .DATA_COUNT(), + .WR_ACK(), .OVERFLOW(), - .PROG_EMPTY(), - .PROG_FULL(), + .ALMOST_EMPTY(), .VALID(), - .RD_DATA_COUNT(), .UNDERFLOW(), - .WR_ACK(), + .DATA_COUNT(), + .RD_DATA_COUNT(), .WR_DATA_COUNT(), + .PROG_FULL(), + .PROG_EMPTY(), .SBITERR(), .DBITERR()); diff --git a/usrp2/coregen/fifo_xlnx_512x36_2clk_36to18.xco b/usrp2/coregen/fifo_xlnx_512x36_2clk_36to18.xco index cee995891..d3115e7d5 100644 --- a/usrp2/coregen/fifo_xlnx_512x36_2clk_36to18.xco +++ b/usrp2/coregen/fifo_xlnx_512x36_2clk_36to18.xco @@ -32,7 +32,7 @@ SET verilogsim = true SET vhdlsim = false # END Project Options # BEGIN Select -SELECT Fifo_Generator family Xilinx,_Inc. 4.3 +SELECT Fifo_Generator family Xilinx,_Inc. 6.1 # END Select # BEGIN Parameters CSET almost_empty_flag=false @@ -46,10 +46,13 @@ CSET empty_threshold_assert_value=4 CSET empty_threshold_negate_value=5 CSET enable_ecc=false CSET enable_int_clk=false +CSET enable_reset_synchronization=true CSET fifo_implementation=Independent_Clocks_Block_RAM CSET full_flags_reset_value=0 CSET full_threshold_assert_value=509 CSET full_threshold_negate_value=508 +CSET inject_dbit_error=false +CSET inject_sbit_error=false CSET input_data_width=36 CSET input_depth=512 CSET output_data_width=18 @@ -78,5 +81,4 @@ CSET write_data_count=false CSET write_data_count_width=9 # END Parameters GENERATE -# CRC: b2f58113 - +# CRC: a4e70980 -- cgit v1.2.3 From 4139894fe6d0031897422c46b59746fe6bf0074f Mon Sep 17 00:00:00 2001 From: Matt Ettus Date: Fri, 8 Oct 2010 14:01:33 -0700 Subject: checkpoint in flow control packet generation --- usrp2/vrt/gen_context_pkt.v | 37 +++++++++++++++++------- usrp2/vrt/trigger_context_pkt.v | 52 ++++++++++++++++++++++++++++++++++ usrp2/vrt/vita_tx_chain.v | 28 +++++++++++++------ usrp2/vrt/vita_tx_control.v | 10 +++++-- usrp2/vrt/vita_tx_deframer.v | 62 +++++++++++++++++++++++++++-------------- 5 files changed, 147 insertions(+), 42 deletions(-) create mode 100644 usrp2/vrt/trigger_context_pkt.v diff --git a/usrp2/vrt/gen_context_pkt.v b/usrp2/vrt/gen_context_pkt.v index 780a027ba..f840ec6e1 100644 --- a/usrp2/vrt/gen_context_pkt.v +++ b/usrp2/vrt/gen_context_pkt.v @@ -3,10 +3,12 @@ module gen_context_pkt #(parameter PROT_ENG_FLAGS=1) (input clk, input reset, input clear, - input trigger, output sent, + input trigger, input error, output sent, input [31:0] streamid, input [63:0] vita_time, input [31:0] message, + input [15:0] seqnum0, + input [15:0] seqnum1, output [35:0] data_o, output src_rdy_o, input dst_rdy_i); localparam CTXT_IDLE = 0; @@ -17,17 +19,30 @@ module gen_context_pkt localparam CTXT_TICS = 5; localparam CTXT_TICS2 = 6; localparam CTXT_MESSAGE = 7; - localparam CTXT_DONE = 8; + localparam CTXT_FLOWCTRL = 8; + localparam CTXT_DONE = 9; reg [33:0] data_int; wire src_rdy_int, dst_rdy_int; - wire [3:0] seqno = 0; + reg [3:0] seqno; reg [3:0] ctxt_state; reg [63:0] err_time; + + always @(posedge clk) + if(reset | clear) + stored_message <= 0; + else + if(error) + stored_message <= message; + else if(state == CTXT_FLOWCTRL) + stored_message <= 0; always @(posedge clk) if(reset | clear) - ctxt_state <= CTXT_IDLE; + begin + ctxt_state <= CTXT_IDLE; + seqno <= 0; + end else case(ctxt_state) CTXT_IDLE : @@ -41,9 +56,10 @@ module gen_context_pkt end CTXT_DONE : - if(~trigger) - ctxt_state <= CTXT_IDLE; - + begin + ctxt_state <= CTXT_IDLE; + seqno <= seqno + 4'd1; + end default : if(dst_rdy_int) ctxt_state <= ctxt_state + 1; @@ -53,13 +69,14 @@ module gen_context_pkt always @* case(ctxt_state) - CTXT_PROT_ENG : data_int <= { 2'b01, 16'd1, 16'd24 }; - CTXT_HEADER : data_int <= { 1'b0, (PROT_ENG_FLAGS ? 1'b0 : 1'b1), 12'b010100001101, seqno, 16'd6 }; + CTXT_PROT_ENG : data_int <= { 2'b01, 16'd1, 16'd28 }; + CTXT_HEADER : data_int <= { 1'b0, (PROT_ENG_FLAGS ? 1'b0 : 1'b1), 12'b010100001101, seqno, 16'd7 }; CTXT_STREAMID : data_int <= { 2'b00, streamid }; CTXT_SECS : data_int <= { 2'b00, err_time[63:32] }; CTXT_TICS : data_int <= { 2'b00, 32'd0 }; CTXT_TICS2 : data_int <= { 2'b00, err_time[31:0] }; - CTXT_MESSAGE : data_int <= { 2'b10, message }; + CTXT_MESSAGE : data_int <= { 2'b00, message }; + CTXT_FLOWCTRL : data_int <= { 2'b10, {seqnum1,seqnum0} }; default : data_int <= {2'b00, 32'b00}; endcase // case (ctxt_state) diff --git a/usrp2/vrt/trigger_context_pkt.v b/usrp2/vrt/trigger_context_pkt.v new file mode 100644 index 000000000..51790dfae --- /dev/null +++ b/usrp2/vrt/trigger_context_pkt.v @@ -0,0 +1,52 @@ + + +module trigger_context_pkt + #(parameter BASE=0) + (input clk, input reset, input clear, + input set_stb, input [7:0] set_addr, input [31:0] set_data, + input packet_consumed, output reg trigger); + + wire [23:0] cycles; + wire [15:0] packets; + wire [6:0] dummy1; + wire [14:0] dummy2; + wire enable_timed, enable_consumed; + reg [30:0] cycle_count, packet_count; + + + setting_reg #(.my_addr(BASE_CTRL+X), .at_reset(0)) sr_settings + (.clk(clk),.rst(reset),.strobe(set_stb),.addr(set_addr), + .in(set_data),.out({enable_cycle,dummy1,cycles}),.changed()); + + setting_reg #(.my_addr(BASE_CTRL+X), .at_reset(0)) sr_settings + (.clk(clk),.rst(reset),.strobe(set_stb),.addr(set_addr), + .in(set_data),.out({enable_consumed,dummy2,packets}),.changed()); + + always @(posedge clk) + if(reset | clear) + cycle_count <= 0; + else + if(trigger) + cycle_count <= 0; + else if(enable_cycle) + cycle_count <= cycle_count + 1; + + always @(posedge clk) + if(reset | clear) + packet_count <= 0; + else + if(trigger) + packet_count <= 0; + else if(packet_consumed & enable_consumed) + packet_count <= packet_count + 1; + + always @(posedge clk) + if(reset | clear) + trigger <= 0; + else + if((cycle_count > cycles)|(packet_count > packets)) + trigger <= 1; + else + trigger <= 0; + +endmodule // trigger_context_pkt diff --git a/usrp2/vrt/vita_tx_chain.v b/usrp2/vrt/vita_tx_chain.v index 662cdca62..12e94b1a8 100644 --- a/usrp2/vrt/vita_tx_chain.v +++ b/usrp2/vrt/vita_tx_chain.v @@ -24,9 +24,10 @@ module vita_tx_chain wire trigger, sent; wire [31:0] debug_vtc, debug_vtd, debug_tx_dsp; - wire error; + wire error, packet_consumed; wire [31:0] error_code; wire clear_seqnum; + wire [15:0] current_seqnum; assign underrun = error; assign message = error_code; @@ -40,6 +41,7 @@ module vita_tx_chain .set_stb(set_stb),.set_addr(set_addr),.set_data(set_data), .data_i(tx_data_i), .src_rdy_i(tx_src_rdy_i), .dst_rdy_o(tx_dst_rdy_o), .sample_fifo_o(tx1_data), .sample_fifo_src_rdy_o(tx1_src_rdy), .sample_fifo_dst_rdy_i(tx1_dst_rdy), + .current_seqnum(current_seqnum), .debug(debug_vtd) ); vita_tx_control #(.BASE(BASE_CTRL), .WIDTH(32*MAXCHAN)) vita_tx_control @@ -47,7 +49,7 @@ module vita_tx_chain .set_stb(set_stb),.set_addr(set_addr),.set_data(set_data), .vita_time(vita_time),.error(error),.error_code(error_code), .sample_fifo_i(tx1_data), .sample_fifo_src_rdy_i(tx1_src_rdy), .sample_fifo_dst_rdy_o(tx1_dst_rdy), - .sample(sample_tx), .run(run), .strobe(strobe_tx), + .sample(sample_tx), .run(run), .strobe(strobe_tx), .packet_consumed(packet_consumed), .debug(debug_vtc) ); dsp_core_tx #(.BASE(BASE_DSP)) dsp_core_tx @@ -59,13 +61,21 @@ module vita_tx_chain generate if(REPORT_ERROR==1) - gen_context_pkt #(.PROT_ENG_FLAGS(PROT_ENG_FLAGS)) gen_tx_err_pkt - (.clk(clk), .reset(reset), .clear(clear_vita), - .trigger(error), .sent(), - .streamid(streamid), .vita_time(vita_time), .message(message), - .data_o(err_data_o), .src_rdy_o(err_src_rdy_o), .dst_rdy_i(err_dst_rdy_i)); + begin + gen_context_pkt #(.PROT_ENG_FLAGS(PROT_ENG_FLAGS)) gen_tx_err_pkt + (.clk(clk), .reset(reset), .clear(clear_vita), + .trigger(trigger),.error(error), .sent(), + .streamid(streamid), .vita_time(vita_time), .message(message), + .seqnum0(current_seqnum), .seqnum1(16'd0), + .data_o(err_data_o), .src_rdy_o(err_src_rdy_o), .dst_rdy_i(err_dst_rdy_i)); + trigger_context_pkt #(.BASE(BASE_CTRL)) trigger_context_pkt + (.clk(clk), .reset(reset), .clear(clear_vita), + .set_stb(set_stb),.set_addr(set_addr),.set_data(set_data), + .packet_consumed(packet_consumed), .trigger(trigger)); + end endgenerate - - assign debug = debug_vtc | debug_vtd; + + //assign debug = debug_vtc | debug_vtd; + assign debug = { debug_vtd[15:0], current_seqnum }; endmodule // vita_tx_chain diff --git a/usrp2/vrt/vita_tx_control.v b/usrp2/vrt/vita_tx_control.v index d0516bec8..61cd9edb5 100644 --- a/usrp2/vrt/vita_tx_control.v +++ b/usrp2/vrt/vita_tx_control.v @@ -8,7 +8,8 @@ module vita_tx_control input [63:0] vita_time, output error, output reg [31:0] error_code, - + output reg packet_consumed, + // From vita_tx_deframer input [5+64+16+WIDTH-1:0] sample_fifo_i, input sample_fifo_src_rdy_i, @@ -154,9 +155,14 @@ module vita_tx_control assign sample_fifo_dst_rdy_o = (ibs_state == IBS_ERROR) | (strobe & (ibs_state == IBS_RUN)); // FIXME also cleanout assign run = (ibs_state == IBS_RUN) | (ibs_state == IBS_CONT_BURST); - //assign error = (ibs_state == IBS_ERROR_DONE); assign error = send_error; + always @(posedge clk) + if(reset) + packet_consumed <= 0; + else + packet_consumed <= eop & sample_fifo_src_rdy_i & sample_fifo_dst_rdy_o; + assign debug = { { now,early,late,too_early,eop,eob,sob,send_at }, { sample_fifo_src_rdy_i, sample_fifo_dst_rdy_o, strobe, run, error, ibs_state[2:0] }, { 8'b0 }, diff --git a/usrp2/vrt/vita_tx_deframer.v b/usrp2/vrt/vita_tx_deframer.v index f9cd7d00d..f7902e645 100644 --- a/usrp2/vrt/vita_tx_deframer.v +++ b/usrp2/vrt/vita_tx_deframer.v @@ -13,6 +13,8 @@ module vita_tx_deframer output [5+64+16+(32*MAXCHAN)-1:0] sample_fifo_o, output sample_fifo_src_rdy_o, input sample_fifo_dst_rdy_i, + + output [15:0] current_seqnum, // FIFO Levels output [15:0] fifo_occupied, @@ -45,23 +47,29 @@ module vita_tx_deframer reg [1:0] vector_phase; wire line_done; - reg seqnum_err; - reg [3:0] seqnum_reg; - wire [3:0] seqnum = data_i[19:16]; - wire [3:0] next_seqnum = seqnum_reg + 4'd1; + wire [15:0] seqnum = data_i[15:0]; + reg [15:0] seqnum_reg; + wire [15:0] next_seqnum = seqnum_reg + 16'd1; + wire [3:0] vita_seqnum = data_i[19:16]; + reg [3:0] vita_seqnum_reg; + wire [3:0] next_vita_seqnum = vita_seqnum_reg[3:0] + 4'd1; + reg seqnum_err; + + assign curren_seqnum = seqnum_reg; // Output FIFO for packetized data - localparam VITA_HEADER = 0; - localparam VITA_STREAMID = 1; - localparam VITA_CLASSID = 2; - localparam VITA_CLASSID2 = 3; - localparam VITA_SECS = 4; - localparam VITA_TICS = 5; - localparam VITA_TICS2 = 6; - localparam VITA_PAYLOAD = 7; - localparam VITA_STORE = 8; - localparam VITA_TRAILER = 9; - + localparam VITA_TRANS_HEADER = 0; + localparam VITA_HEADER = 1; + localparam VITA_STREAMID = 2; + localparam VITA_CLASSID = 3; + localparam VITA_CLASSID2 = 4; + localparam VITA_SECS = 5; + localparam VITA_TICS = 6; + localparam VITA_TICS2 = 7; + localparam VITA_PAYLOAD = 8; + localparam VITA_STORE = 9; + localparam VITA_TRAILER = 10; + wire [15:0] hdr_len = 2 + has_streamid_reg + has_classid_reg + has_classid_reg + has_secs_reg + has_tics_reg + has_tics_reg + has_trailer_reg; @@ -70,15 +78,22 @@ module vita_tx_deframer always @(posedge clk) if(reset | clear_seqnum) - seqnum_reg <= 4'hF; + begin + seqnum_reg <= 16'hFFFF; + vita_seqnum_reg <= 4'hF; + end else - if((vita_state==VITA_HEADER) & src_rdy_i) - seqnum_reg <= seqnum; + begin + if((vita_state==VITA_TRANS_HEADER) & src_rdy_i) + seqnum_reg <= seqnum; + if((vita_state==VITA_HEADER) & src_rdy_i) + vita_seqnum_reg <= vita_seqnum; + end // else: !if(reset | clear_seqnum) always @(posedge clk) if(reset | clear) begin - vita_state <= VITA_HEADER; + vita_state <= VITA_TRANS_HEADER; {has_streamid_reg, has_classid_reg, has_secs_reg, has_tics_reg, has_trailer_reg, is_sob_reg, is_eob_reg} <= 0; seqnum_err <= 0; @@ -97,6 +112,11 @@ module vita_tx_deframer end else if(src_rdy_i) case(vita_state) + VITA_TRANS_HEADER : + begin + seqnum_err <= ~(seqnum == next_seqnum); + vita_state <= VITA_HEADER; + end VITA_HEADER : begin {has_streamid_reg, has_classid_reg, has_secs_reg, has_tics_reg, has_trailer_reg, is_sob_reg, is_eob_reg} @@ -113,7 +133,7 @@ module vita_tx_deframer vita_state <= VITA_TICS; else vita_state <= VITA_PAYLOAD; - seqnum_err <= ~(seqnum == next_seqnum); + seqnum_err <= seqnum_err | ~(vita_seqnum == next_vita_seqnum); end // case: VITA_HEADER VITA_STREAMID : if(has_classid_reg) @@ -191,7 +211,7 @@ module vita_tx_deframer // sob, eob, has_secs (send_at) ignored on all lines except first assign fifo_i = {sample_d,sample_c,sample_b,sample_a,seqnum_err,has_secs_reg,is_sob_reg,is_eob_reg,eop, - 12'd0,seqnum_reg,send_time}; + 12'd0,seqnum_reg[3:0],send_time}; assign dst_rdy_o = ~(vita_state == VITA_PAYLOAD) & ~((vita_state==VITA_STORE)& ~fifo_space) ; -- cgit v1.2.3 From f622553254eab637f3ec7ac2a9c4d6e3345d9a9c Mon Sep 17 00:00:00 2001 From: Matt Ettus Date: Fri, 8 Oct 2010 14:07:26 -0700 Subject: declarations --- usrp2/vrt/gen_context_pkt.v | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/usrp2/vrt/gen_context_pkt.v b/usrp2/vrt/gen_context_pkt.v index f840ec6e1..0ea2797ec 100644 --- a/usrp2/vrt/gen_context_pkt.v +++ b/usrp2/vrt/gen_context_pkt.v @@ -27,14 +27,15 @@ module gen_context_pkt reg [3:0] seqno; reg [3:0] ctxt_state; reg [63:0] err_time; - + reg [31:0] stored_message; + always @(posedge clk) if(reset | clear) stored_message <= 0; else if(error) stored_message <= message; - else if(state == CTXT_FLOWCTRL) + else if(ctxt_state == CTXT_FLOWCTRL) stored_message <= 0; always @(posedge clk) -- cgit v1.2.3 From d50a17c0df782231caa18ac66c9f0240f0936560 Mon Sep 17 00:00:00 2001 From: Matt Ettus Date: Fri, 8 Oct 2010 14:33:06 -0700 Subject: assign setting reg addresses --- usrp2/vrt/trigger_context_pkt.v | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/usrp2/vrt/trigger_context_pkt.v b/usrp2/vrt/trigger_context_pkt.v index 51790dfae..226ec45f2 100644 --- a/usrp2/vrt/trigger_context_pkt.v +++ b/usrp2/vrt/trigger_context_pkt.v @@ -14,11 +14,11 @@ module trigger_context_pkt reg [30:0] cycle_count, packet_count; - setting_reg #(.my_addr(BASE_CTRL+X), .at_reset(0)) sr_settings + setting_reg #(.my_addr(BASE+4), .at_reset(0)) sr_cycles (.clk(clk),.rst(reset),.strobe(set_stb),.addr(set_addr), .in(set_data),.out({enable_cycle,dummy1,cycles}),.changed()); - setting_reg #(.my_addr(BASE_CTRL+X), .at_reset(0)) sr_settings + setting_reg #(.my_addr(BASE+5), .at_reset(0)) sr_packets (.clk(clk),.rst(reset),.strobe(set_stb),.addr(set_addr), .in(set_data),.out({enable_consumed,dummy2,packets}),.changed()); -- cgit v1.2.3 From c868b37abecb9676a7efcc5072e4c0938e442905 Mon Sep 17 00:00:00 2001 From: Matt Ettus Date: Fri, 8 Oct 2010 15:17:49 -0700 Subject: add trigger to makefile --- usrp2/vrt/Makefile.srcs | 1 + 1 file changed, 1 insertion(+) diff --git a/usrp2/vrt/Makefile.srcs b/usrp2/vrt/Makefile.srcs index dc4bd8c96..aa1356d82 100644 --- a/usrp2/vrt/Makefile.srcs +++ b/usrp2/vrt/Makefile.srcs @@ -12,4 +12,5 @@ vita_tx_control.v \ vita_tx_deframer.v \ vita_tx_chain.v \ gen_context_pkt.v \ +trigger_context_pkt.v \ )) -- cgit v1.2.3 From 336afd8b8bb6a655b6297f86cffc05d8e46d1a4a Mon Sep 17 00:00:00 2001 From: Matt Ettus Date: Fri, 8 Oct 2010 16:01:42 -0700 Subject: add a fifo to the end of the mux to help in timing. --- usrp2/fifo/fifo36_mux.v | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/usrp2/fifo/fifo36_mux.v b/usrp2/fifo/fifo36_mux.v index 92bf13ff9..c6fd40f27 100644 --- a/usrp2/fifo/fifo36_mux.v +++ b/usrp2/fifo/fifo36_mux.v @@ -20,6 +20,9 @@ module fifo36_mux wire eof0 = data0_i[33]; wire eof1 = data1_i[33]; + wire [35:0] data_int; + wire src_rdy_int, dst_rdy_int; + always @(posedge clk) if(reset | clear) state <= MUX_IDLE0; @@ -32,7 +35,7 @@ module fifo36_mux state <= MUX_DATA1; MUX_DATA0 : - if(src0_rdy_i & dst_rdy_i & eof0) + if(src0_rdy_i & dst_rdy_int & eof0) state <= prio ? MUX_IDLE0 : MUX_IDLE1; MUX_IDLE1 : @@ -42,16 +45,20 @@ module fifo36_mux state <= MUX_DATA0; MUX_DATA1 : - if(src1_rdy_i & dst_rdy_i & eof1) + if(src1_rdy_i & dst_rdy_int & eof1) state <= MUX_IDLE0; default : state <= MUX_IDLE0; endcase // case (state) - assign dst0_rdy_o = (state==MUX_DATA0) ? dst_rdy_i : 0; - assign dst1_rdy_o = (state==MUX_DATA1) ? dst_rdy_i : 0; - assign src_rdy_o = (state==MUX_DATA0) ? src0_rdy_i : (state==MUX_DATA1) ? src1_rdy_i : 0; - assign data_o = (state==MUX_DATA0) ? data0_i : data1_i; + assign dst0_rdy_o = (state==MUX_DATA0) ? dst_rdy_int : 0; + assign dst1_rdy_o = (state==MUX_DATA1) ? dst_rdy_int : 0; + assign src_rdy_int = (state==MUX_DATA0) ? src0_rdy_i : (state==MUX_DATA1) ? src1_rdy_i : 0; + assign data_int = (state==MUX_DATA0) ? data0_i : data1_i; + fifo_short #(.WIDTH(36)) mux_fifo + (.clk(clk), .reset(reset), .clear(clear), + .datain(data_int), .src_rdy_i(src_rdy_int), .dst_rdy_o(dst_rdy_int), + .dataout(data_o), .src_rdy_o(src_rdy_o), .dst_rdy_i(dst_rdy_i)); endmodule // fifo36_demux -- cgit v1.2.3 From c7accc5a2e04c6bb2f620896ef4ba52b8ec56e72 Mon Sep 17 00:00:00 2001 From: Matt Ettus Date: Fri, 8 Oct 2010 18:01:10 -0700 Subject: go to the correct state --- usrp2/vrt/vita_tx_deframer.v | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/usrp2/vrt/vita_tx_deframer.v b/usrp2/vrt/vita_tx_deframer.v index f7902e645..e12747cd5 100644 --- a/usrp2/vrt/vita_tx_deframer.v +++ b/usrp2/vrt/vita_tx_deframer.v @@ -104,7 +104,7 @@ module vita_tx_deframer if(has_trailer_reg) vita_state <= VITA_TRAILER; else - vita_state <= VITA_HEADER; + vita_state <= VITA_TRANS_HEADER; else begin vita_state <= VITA_PAYLOAD; @@ -171,11 +171,11 @@ module vita_tx_deframer else vector_phase <= vector_phase + 1; VITA_TRAILER : - vita_state <= VITA_HEADER; + vita_state <= VITA_TRANS_HEADER; VITA_STORE : ; default : - vita_state <= VITA_HEADER; + vita_state <= VITA_TRANS_HEADER; endcase // case (vita_state) assign line_done = (vector_phase == numchan); -- cgit v1.2.3 From cdcc710b11376bad327cebe89de6004056a18e1a Mon Sep 17 00:00:00 2001 From: Matt Ettus Date: Sun, 10 Oct 2010 23:38:56 -0700 Subject: separated flow control and error reporting on tx path. should work with and without flow control --- usrp2/top/u2_rev3/u2_core_udp.v | 3 ++- usrp2/vrt/gen_context_pkt.v | 4 ++-- usrp2/vrt/vita_tx_chain.v | 50 +++++++++++++++++++++++++++-------------- usrp2/vrt/vita_tx_deframer.v | 11 ++++----- 4 files changed, 43 insertions(+), 25 deletions(-) diff --git a/usrp2/top/u2_rev3/u2_core_udp.v b/usrp2/top/u2_rev3/u2_core_udp.v index 067a75759..a2a5d045e 100644 --- a/usrp2/top/u2_rev3/u2_core_udp.v +++ b/usrp2/top/u2_rev3/u2_core_udp.v @@ -677,7 +677,8 @@ module u2_core ); vita_tx_chain #(.BASE_CTRL(SR_TX_CTRL), .BASE_DSP(SR_TX_DSP), - .REPORT_ERROR(1), .PROT_ENG_FLAGS(1)) + .REPORT_ERROR(1), .DO_FLOW_CONTROL(1), + .PROT_ENG_FLAGS(1), .USE_TRANS_HEADER(1)) vita_tx_chain (.clk(dsp_clk), .reset(dsp_rst), .set_stb(set_stb_dsp),.set_addr(set_addr_dsp),.set_data(set_data_dsp), diff --git a/usrp2/vrt/gen_context_pkt.v b/usrp2/vrt/gen_context_pkt.v index 0ea2797ec..31c2a53e1 100644 --- a/usrp2/vrt/gen_context_pkt.v +++ b/usrp2/vrt/gen_context_pkt.v @@ -3,7 +3,7 @@ module gen_context_pkt #(parameter PROT_ENG_FLAGS=1) (input clk, input reset, input clear, - input trigger, input error, output sent, + input trigger, output sent, input [31:0] streamid, input [63:0] vita_time, input [31:0] message, @@ -33,7 +33,7 @@ module gen_context_pkt if(reset | clear) stored_message <= 0; else - if(error) + if(trigger) stored_message <= message; else if(ctxt_state == CTXT_FLOWCTRL) stored_message <= 0; diff --git a/usrp2/vrt/vita_tx_chain.v b/usrp2/vrt/vita_tx_chain.v index 12e94b1a8..09da377f8 100644 --- a/usrp2/vrt/vita_tx_chain.v +++ b/usrp2/vrt/vita_tx_chain.v @@ -3,7 +3,9 @@ module vita_tx_chain #(parameter BASE_CTRL=0, parameter BASE_DSP=0, parameter REPORT_ERROR=0, - parameter PROT_ENG_FLAGS=0) + parameter DO_FLOW_CONTROL=0, + parameter PROT_ENG_FLAGS=0, + parameter USE_TRANS_HEADER=0) (input clk, input reset, input set_stb, input [7:0] set_addr, input [31:0] set_data, input [63:0] vita_time, @@ -36,7 +38,10 @@ module vita_tx_chain (.clk(clk),.rst(reset),.strobe(set_stb),.addr(set_addr), .in(set_data),.out(streamid),.changed(clear_seqnum)); - vita_tx_deframer #(.BASE(BASE_CTRL), .MAXCHAN(MAXCHAN)) vita_tx_deframer + vita_tx_deframer #(.BASE(BASE_CTRL), + .MAXCHAN(MAXCHAN), + .USE_TRANS_HEADER(USE_TRANS_HEADER)) + vita_tx_deframer (.clk(clk), .reset(reset), .clear(clear_vita), .clear_seqnum(clear_seqnum), .set_stb(set_stb),.set_addr(set_addr),.set_data(set_data), .data_i(tx_data_i), .src_rdy_i(tx_src_rdy_i), .dst_rdy_o(tx_dst_rdy_o), @@ -59,23 +64,34 @@ module vita_tx_chain .dac_a(dac_a),.dac_b(dac_b), .debug(debug_tx_dsp) ); - generate - if(REPORT_ERROR==1) - begin - gen_context_pkt #(.PROT_ENG_FLAGS(PROT_ENG_FLAGS)) gen_tx_err_pkt - (.clk(clk), .reset(reset), .clear(clear_vita), - .trigger(trigger),.error(error), .sent(), - .streamid(streamid), .vita_time(vita_time), .message(message), - .seqnum0(current_seqnum), .seqnum1(16'd0), - .data_o(err_data_o), .src_rdy_o(err_src_rdy_o), .dst_rdy_i(err_dst_rdy_i)); - trigger_context_pkt #(.BASE(BASE_CTRL)) trigger_context_pkt - (.clk(clk), .reset(reset), .clear(clear_vita), - .set_stb(set_stb),.set_addr(set_addr),.set_data(set_data), - .packet_consumed(packet_consumed), .trigger(trigger)); - end - endgenerate + wire [35:0] flow_data, err_data_int; + wire flow_src_rdy, flow_dst_rdy, err_src_rdy_int, err_dst_rdy_int; + + gen_context_pkt #(.PROT_ENG_FLAGS(PROT_ENG_FLAGS)) gen_flow_pkt + (.clk(clk), .reset(reset), .clear(clear_vita), + .trigger(trigger & (DO_FLOW_CONTROL==1)), .sent(), + .streamid(streamid), .vita_time(vita_time), .message(32'd0), + .seqnum0(current_seqnum), .seqnum1(16'd0), + .data_o(flow_data), .src_rdy_o(flow_src_rdy), .dst_rdy_i(flow_dst_rdy)); + trigger_context_pkt #(.BASE(BASE_CTRL)) trigger_context_pkt + (.clk(clk), .reset(reset), .clear(clear_vita), + .set_stb(set_stb),.set_addr(set_addr),.set_data(set_data), + .packet_consumed(packet_consumed), .trigger(trigger)); + + gen_context_pkt #(.PROT_ENG_FLAGS(PROT_ENG_FLAGS)) gen_tx_err_pkt + (.clk(clk), .reset(reset), .clear(clear_vita), + .trigger(error & (REPORT_ERROR==1)), .sent(), + .streamid(streamid), .vita_time(vita_time), .message(message), + .seqnum0(current_seqnum), .seqnum1(16'd0), + .data_o(err_data_int), .src_rdy_o(err_src_rdy_int), .dst_rdy_i(err_dst_rdy_int)); //assign debug = debug_vtc | debug_vtd; assign debug = { debug_vtd[15:0], current_seqnum }; + fifo36_mux #(.prio(1)) mux_err_and_flow // Priority to err messages + (.clk(clk), .reset(reset), .clear(clear_vita), + .data0_i(err_data_int), .src0_rdy_i(err_src_rdy_int), .dst0_rdy_o(err_dst_rdy_int), + .data1_i(flow_data), .src1_rdy_i(flow_src_rdy), .dst1_rdy_o(flow_dst_rdy), + .data_o(err_data_o), .src_rdy_o(err_src_rdy_o), .dst_rdy_i(err_dst_rdy_i)); + endmodule // vita_tx_chain diff --git a/usrp2/vrt/vita_tx_deframer.v b/usrp2/vrt/vita_tx_deframer.v index e12747cd5..c55f43373 100644 --- a/usrp2/vrt/vita_tx_deframer.v +++ b/usrp2/vrt/vita_tx_deframer.v @@ -1,7 +1,8 @@ module vita_tx_deframer #(parameter BASE=0, - parameter MAXCHAN=1) + parameter MAXCHAN=1, + parameter USE_TRANS_HEADER=0) (input clk, input reset, input clear, input clear_seqnum, input set_stb, input [7:0] set_addr, input [31:0] set_data, @@ -93,7 +94,7 @@ module vita_tx_deframer always @(posedge clk) if(reset | clear) begin - vita_state <= VITA_TRANS_HEADER; + vita_state <= (USE_TRANS_HEADER==1) ? VITA_TRANS_HEADER : VITA_HEADER; {has_streamid_reg, has_classid_reg, has_secs_reg, has_tics_reg, has_trailer_reg, is_sob_reg, is_eob_reg} <= 0; seqnum_err <= 0; @@ -104,7 +105,7 @@ module vita_tx_deframer if(has_trailer_reg) vita_state <= VITA_TRAILER; else - vita_state <= VITA_TRANS_HEADER; + vita_state <= (USE_TRANS_HEADER==1) ? VITA_TRANS_HEADER : VITA_HEADER; else begin vita_state <= VITA_PAYLOAD; @@ -171,11 +172,11 @@ module vita_tx_deframer else vector_phase <= vector_phase + 1; VITA_TRAILER : - vita_state <= VITA_TRANS_HEADER; + vita_state <= (USE_TRANS_HEADER==1) ? VITA_TRANS_HEADER : VITA_HEADER; VITA_STORE : ; default : - vita_state <= VITA_TRANS_HEADER; + vita_state <= (USE_TRANS_HEADER==1) ? VITA_TRANS_HEADER : VITA_HEADER; endcase // case (vita_state) assign line_done = (vector_phase == numchan); -- cgit v1.2.3 From 709174b5eebcee5130302426be921a4e457165a4 Mon Sep 17 00:00:00 2001 From: Matt Ettus Date: Mon, 11 Oct 2010 13:57:17 -0700 Subject: typo which isn't caught by xilinx --- usrp2/vrt/vita_tx_deframer.v | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/usrp2/vrt/vita_tx_deframer.v b/usrp2/vrt/vita_tx_deframer.v index c55f43373..d8575b745 100644 --- a/usrp2/vrt/vita_tx_deframer.v +++ b/usrp2/vrt/vita_tx_deframer.v @@ -56,7 +56,7 @@ module vita_tx_deframer wire [3:0] next_vita_seqnum = vita_seqnum_reg[3:0] + 4'd1; reg seqnum_err; - assign curren_seqnum = seqnum_reg; + assign current_seqnum = seqnum_reg; // Output FIFO for packetized data localparam VITA_TRANS_HEADER = 0; -- cgit v1.2.3 From f39dc8ef3113edaf96000c61f1d481f53bb23bda Mon Sep 17 00:00:00 2001 From: Matt Ettus Date: Mon, 11 Oct 2010 15:53:24 -0700 Subject: send message on eob to ack the end of transmission --- usrp2/vrt/vita_tx_control.v | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/usrp2/vrt/vita_tx_control.v b/usrp2/vrt/vita_tx_control.v index 61cd9edb5..ed470418b 100644 --- a/usrp2/vrt/vita_tx_control.v +++ b/usrp2/vrt/vita_tx_control.v @@ -49,6 +49,7 @@ module vita_tx_control localparam IBS_ERROR_DONE = 4; localparam IBS_ERROR_WAIT = 5; + wire [31:0] CODE_EOB_ACK = {seqnum,16'd1}; wire [31:0] CODE_UNDERRUN = {seqnum,16'd2}; wire [31:0] CODE_SEQ_ERROR = {seqnum,16'd4}; wire [31:0] CODE_TIME_ERROR = {seqnum,16'd8}; @@ -107,7 +108,11 @@ module vita_tx_control end else if(eop) if(eob) - ibs_state <= IBS_IDLE; + begin + ibs_state <= IBS_ERROR; // Not really an error + error_code <= CODE_EOB_ACK; + send_error <= 1; + end else ibs_state <= IBS_CONT_BURST; -- cgit v1.2.3 From 5c3073e9a8fcf17e2fc0897c1a0380c96216e346 Mon Sep 17 00:00:00 2001 From: Matt Ettus Date: Mon, 11 Oct 2010 16:39:31 -0700 Subject: switch to 32 bit sequence numbers. Will wrap in ~15 hours at max rate --- usrp2/vrt/gen_context_pkt.v | 18 ++++++++++-------- usrp2/vrt/vita_tx_chain.v | 2 +- usrp2/vrt/vita_tx_deframer.v | 10 +++++----- 3 files changed, 16 insertions(+), 14 deletions(-) diff --git a/usrp2/vrt/gen_context_pkt.v b/usrp2/vrt/gen_context_pkt.v index 31c2a53e1..0eb035f3e 100644 --- a/usrp2/vrt/gen_context_pkt.v +++ b/usrp2/vrt/gen_context_pkt.v @@ -7,8 +7,8 @@ module gen_context_pkt input [31:0] streamid, input [63:0] vita_time, input [31:0] message, - input [15:0] seqnum0, - input [15:0] seqnum1, + input [31:0] seqnum0, + input [31:0] seqnum1, output [35:0] data_o, output src_rdy_o, input dst_rdy_i); localparam CTXT_IDLE = 0; @@ -19,8 +19,9 @@ module gen_context_pkt localparam CTXT_TICS = 5; localparam CTXT_TICS2 = 6; localparam CTXT_MESSAGE = 7; - localparam CTXT_FLOWCTRL = 8; - localparam CTXT_DONE = 9; + localparam CTXT_FLOWCTRL0 = 8; + localparam CTXT_FLOWCTRL1 = 9; + localparam CTXT_DONE = 10; reg [33:0] data_int; wire src_rdy_int, dst_rdy_int; @@ -35,7 +36,7 @@ module gen_context_pkt else if(trigger) stored_message <= message; - else if(ctxt_state == CTXT_FLOWCTRL) + else if(ctxt_state == CTXT_FLOWCTRL1) stored_message <= 0; always @(posedge clk) @@ -70,14 +71,15 @@ module gen_context_pkt always @* case(ctxt_state) - CTXT_PROT_ENG : data_int <= { 2'b01, 16'd1, 16'd28 }; - CTXT_HEADER : data_int <= { 1'b0, (PROT_ENG_FLAGS ? 1'b0 : 1'b1), 12'b010100001101, seqno, 16'd7 }; + CTXT_PROT_ENG : data_int <= { 2'b01, 16'd1, 16'd32 }; + CTXT_HEADER : data_int <= { 1'b0, (PROT_ENG_FLAGS ? 1'b0 : 1'b1), 12'b010100001101, seqno, 16'd8 }; CTXT_STREAMID : data_int <= { 2'b00, streamid }; CTXT_SECS : data_int <= { 2'b00, err_time[63:32] }; CTXT_TICS : data_int <= { 2'b00, 32'd0 }; CTXT_TICS2 : data_int <= { 2'b00, err_time[31:0] }; CTXT_MESSAGE : data_int <= { 2'b00, message }; - CTXT_FLOWCTRL : data_int <= { 2'b10, {seqnum1,seqnum0} }; + CTXT_FLOWCTRL0 : data_int <= { 2'b00, seqnum0 }; + CTXT_FLOWCTRL1 : data_int <= { 2'b10, seqnum1 }; default : data_int <= {2'b00, 32'b00}; endcase // case (ctxt_state) diff --git a/usrp2/vrt/vita_tx_chain.v b/usrp2/vrt/vita_tx_chain.v index 09da377f8..eee19bebf 100644 --- a/usrp2/vrt/vita_tx_chain.v +++ b/usrp2/vrt/vita_tx_chain.v @@ -29,7 +29,7 @@ module vita_tx_chain wire error, packet_consumed; wire [31:0] error_code; wire clear_seqnum; - wire [15:0] current_seqnum; + wire [31:0] current_seqnum; assign underrun = error; assign message = error_code; diff --git a/usrp2/vrt/vita_tx_deframer.v b/usrp2/vrt/vita_tx_deframer.v index d8575b745..40867cc55 100644 --- a/usrp2/vrt/vita_tx_deframer.v +++ b/usrp2/vrt/vita_tx_deframer.v @@ -15,7 +15,7 @@ module vita_tx_deframer output sample_fifo_src_rdy_o, input sample_fifo_dst_rdy_i, - output [15:0] current_seqnum, + output [31:0] current_seqnum, // FIFO Levels output [15:0] fifo_occupied, @@ -48,9 +48,9 @@ module vita_tx_deframer reg [1:0] vector_phase; wire line_done; - wire [15:0] seqnum = data_i[15:0]; - reg [15:0] seqnum_reg; - wire [15:0] next_seqnum = seqnum_reg + 16'd1; + wire [31:0] seqnum = data_i; + reg [31:0] seqnum_reg; + wire [31:0] next_seqnum = seqnum_reg + 32'd1; wire [3:0] vita_seqnum = data_i[19:16]; reg [3:0] vita_seqnum_reg; wire [3:0] next_vita_seqnum = vita_seqnum_reg[3:0] + 4'd1; @@ -80,7 +80,7 @@ module vita_tx_deframer always @(posedge clk) if(reset | clear_seqnum) begin - seqnum_reg <= 16'hFFFF; + seqnum_reg <= 32'hFFFF_FFFF; vita_seqnum_reg <= 4'hF; end else -- cgit v1.2.3 From 7e973c0b3a3c37df81064ae34641882313f89a6f Mon Sep 17 00:00:00 2001 From: Matt Ettus Date: Mon, 11 Oct 2010 16:40:25 -0700 Subject: increase compatibility number for flow control --- usrp2/top/u2_rev3/u2_core_udp.v | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/usrp2/top/u2_rev3/u2_core_udp.v b/usrp2/top/u2_rev3/u2_core_udp.v index a2a5d045e..1e4030f0c 100644 --- a/usrp2/top/u2_rev3/u2_core_udp.v +++ b/usrp2/top/u2_rev3/u2_core_udp.v @@ -427,7 +427,7 @@ module u2_core cycle_count <= cycle_count + 1; //compatibility number -> increment when the fpga has been sufficiently altered - localparam compat_num = 32'd2; + localparam compat_num = 32'd3; wb_readback_mux buff_pool_status (.wb_clk_i(wb_clk), .wb_rst_i(wb_rst), .wb_stb_i(s5_stb), -- cgit v1.2.3 From 9e54a36664edb9c5641959c65f51c81e43e098c2 Mon Sep 17 00:00:00 2001 From: Matt Ettus Date: Mon, 11 Oct 2010 16:41:41 -0700 Subject: cleanup for 32 bit seqnum --- usrp2/vrt/vita_tx_chain.v | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/usrp2/vrt/vita_tx_chain.v b/usrp2/vrt/vita_tx_chain.v index eee19bebf..6cfbdf763 100644 --- a/usrp2/vrt/vita_tx_chain.v +++ b/usrp2/vrt/vita_tx_chain.v @@ -71,7 +71,7 @@ module vita_tx_chain (.clk(clk), .reset(reset), .clear(clear_vita), .trigger(trigger & (DO_FLOW_CONTROL==1)), .sent(), .streamid(streamid), .vita_time(vita_time), .message(32'd0), - .seqnum0(current_seqnum), .seqnum1(16'd0), + .seqnum0(current_seqnum), .seqnum1(32'd0), .data_o(flow_data), .src_rdy_o(flow_src_rdy), .dst_rdy_i(flow_dst_rdy)); trigger_context_pkt #(.BASE(BASE_CTRL)) trigger_context_pkt (.clk(clk), .reset(reset), .clear(clear_vita), @@ -82,11 +82,10 @@ module vita_tx_chain (.clk(clk), .reset(reset), .clear(clear_vita), .trigger(error & (REPORT_ERROR==1)), .sent(), .streamid(streamid), .vita_time(vita_time), .message(message), - .seqnum0(current_seqnum), .seqnum1(16'd0), + .seqnum0(current_seqnum), .seqnum1(32'd0), .data_o(err_data_int), .src_rdy_o(err_src_rdy_int), .dst_rdy_i(err_dst_rdy_int)); - //assign debug = debug_vtc | debug_vtd; - assign debug = { debug_vtd[15:0], current_seqnum }; + assign debug = debug_vtc | debug_vtd; fifo36_mux #(.prio(1)) mux_err_and_flow // Priority to err messages (.clk(clk), .reset(reset), .clear(clear_vita), -- cgit v1.2.3 From 1304ca07e855843f98e6efda71fde402a3c43d49 Mon Sep 17 00:00:00 2001 From: Matt Ettus Date: Tue, 12 Oct 2010 13:16:35 -0700 Subject: proper triggering for interrupts generated on the dsp_clk --- usrp2/top/u2_rev3/u2_core_udp.v | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/usrp2/top/u2_rev3/u2_core_udp.v b/usrp2/top/u2_rev3/u2_core_udp.v index 1e4030f0c..ea4dd314f 100644 --- a/usrp2/top/u2_rev3/u2_core_udp.v +++ b/usrp2/top/u2_rev3/u2_core_udp.v @@ -541,10 +541,17 @@ module u2_core // ///////////////////////////////////////////////////////////////////////// // Interrupt Controller, Slave #8 + // Pass interrupts on dsp_clk to wb_clk. These need edge triggering in the pic + wire underrun_wb, overrun_wb, pps_wb; + + oneshot_2clk underrun_1s (.clk_in(dsp_clk), .in(underrun), .clk_out(wb_clk), .out(underrun_wb)); + oneshot_2clk overrun_1s (.clk_in(dsp_clk), .in(overrun), .clk_out(wb_clk), .out(overrun_wb)); + oneshot_2clk pps_1s (.clk_in(dsp_clk), .in(pps_int), .clk_out(wb_clk), .out(pps_wb)); + assign irq= {{8'b0}, {8'b0}, {3'b0, periodic_int, clk_status, serdes_link_up, uart_tx_int, uart_rx_int}, - {pps_int,overrun,underrun,PHY_INTn,i2c_int,spi_int,onetime_int,buffer_int}}; + {pps_wb,overrun_wb,underrun_wb,PHY_INTn,i2c_int,spi_int,onetime_int,buffer_int}}; pic pic(.clk_i(wb_clk),.rst_i(wb_rst),.cyc_i(s8_cyc),.stb_i(s8_stb),.adr_i(s8_adr[4:2]), .we_i(s8_we),.dat_i(s8_dat_o),.dat_o(s8_dat_i),.ack_o(s8_ack),.int_o(proc_int), -- cgit v1.2.3 From 4bac44e009329f6019bb2aec0e181293e049b781 Mon Sep 17 00:00:00 2001 From: Matt Ettus Date: Tue, 12 Oct 2010 23:02:30 -0700 Subject: don't flag an error on eob ack --- usrp2/vrt/vita_tx_chain.v | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/usrp2/vrt/vita_tx_chain.v b/usrp2/vrt/vita_tx_chain.v index 6cfbdf763..00da4c6e1 100644 --- a/usrp2/vrt/vita_tx_chain.v +++ b/usrp2/vrt/vita_tx_chain.v @@ -31,7 +31,7 @@ module vita_tx_chain wire clear_seqnum; wire [31:0] current_seqnum; - assign underrun = error; + assign underrun = error & ~(error_code == 1); assign message = error_code; setting_reg #(.my_addr(BASE_CTRL+2), .at_reset(0)) sr_streamid -- cgit v1.2.3 From 10427284e0e270a5b5bdc735da09d8fde9040537 Mon Sep 17 00:00:00 2001 From: Matt Ettus Date: Tue, 12 Oct 2010 23:05:47 -0700 Subject: don't clear out following packets on an eob ack --- usrp2/vrt/vita_tx_control.v | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/usrp2/vrt/vita_tx_control.v b/usrp2/vrt/vita_tx_control.v index ed470418b..936762212 100644 --- a/usrp2/vrt/vita_tx_control.v +++ b/usrp2/vrt/vita_tx_control.v @@ -109,7 +109,7 @@ module vita_tx_control else if(eop) if(eob) begin - ibs_state <= IBS_ERROR; // Not really an error + ibs_state <= IBS_ERROR_DONE; // Not really an error error_code <= CODE_EOB_ACK; send_error <= 1; end -- cgit v1.2.3 From 7fd21927c3c5d8d95eed7ff66ed1a060c9affad2 Mon Sep 17 00:00:00 2001 From: Matt Ettus Date: Tue, 12 Oct 2010 23:21:39 -0700 Subject: now handles frames larger than the vita packet (i.e. with padding) --- usrp2/vrt/vita_tx_deframer.v | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/usrp2/vrt/vita_tx_deframer.v b/usrp2/vrt/vita_tx_deframer.v index 40867cc55..7fb8e3893 100644 --- a/usrp2/vrt/vita_tx_deframer.v +++ b/usrp2/vrt/vita_tx_deframer.v @@ -70,11 +70,13 @@ module vita_tx_deframer localparam VITA_PAYLOAD = 8; localparam VITA_STORE = 9; localparam VITA_TRAILER = 10; + localparam VITA_DUMP = 11; wire [15:0] hdr_len = 2 + has_streamid_reg + has_classid_reg + has_classid_reg + has_secs_reg + has_tics_reg + has_tics_reg + has_trailer_reg; - wire eop = eof | (pkt_len==hdr_len); // FIXME would ignoring eof allow larger VITA packets? + wire vita_eof = (pkt_len==hdr_len); + wire eop = eof | vita_eof; // FIXME would ignoring eof allow larger VITA packets? wire fifo_space; always @(posedge clk) @@ -101,12 +103,14 @@ module vita_tx_deframer end else if((vita_state == VITA_STORE) & fifo_space) - if(eop) - if(has_trailer_reg) + if(vita_eof) + if(eof) + vita_state <= (USE_TRANS_HEADER==1) ? VITA_TRANS_HEADER : VITA_HEADER; + else if(has_trailer_reg) vita_state <= VITA_TRAILER; else - vita_state <= (USE_TRANS_HEADER==1) ? VITA_TRANS_HEADER : VITA_HEADER; - else + vita_state <= VITA_DUMP; + else begin vita_state <= VITA_PAYLOAD; pkt_len <= pkt_len - 1; @@ -172,7 +176,13 @@ module vita_tx_deframer else vector_phase <= vector_phase + 1; VITA_TRAILER : - vita_state <= (USE_TRANS_HEADER==1) ? VITA_TRANS_HEADER : VITA_HEADER; + if(eof) + vita_state <= (USE_TRANS_HEADER==1) ? VITA_TRANS_HEADER : VITA_HEADER; + else + vita_state <= VITA_DUMP; + VITA_DUMP : + if(eof) + vita_state <= (USE_TRANS_HEADER==1) ? VITA_TRANS_HEADER : VITA_HEADER; VITA_STORE : ; default : -- cgit v1.2.3 From 12c8995014a625aab9a7614d9b146876fbf81268 Mon Sep 17 00:00:00 2001 From: Matt Ettus Date: Thu, 11 Nov 2010 18:44:43 -0800 Subject: fifo randomizer for emi --- usrp2/extramfifo/Makefile.srcs | 1 + usrp2/extramfifo/ext_fifo.v | 11 ++++-- usrp2/extramfifo/ext_fifo_tb.sav | 30 ++++++++++++++++ usrp2/extramfifo/ext_fifo_tb.v | 4 +-- usrp2/extramfifo/refill_randomizer.v | 66 ++++++++++++++++++++++++++++++++++++ 5 files changed, 108 insertions(+), 4 deletions(-) create mode 100644 usrp2/extramfifo/ext_fifo_tb.sav create mode 100644 usrp2/extramfifo/refill_randomizer.v diff --git a/usrp2/extramfifo/Makefile.srcs b/usrp2/extramfifo/Makefile.srcs index 7cd49f4f6..b255ef916 100644 --- a/usrp2/extramfifo/Makefile.srcs +++ b/usrp2/extramfifo/Makefile.srcs @@ -13,4 +13,5 @@ icon.v \ icon.xco \ ila.v \ ila.xco \ +refill_randomizer.v \ )) diff --git a/usrp2/extramfifo/ext_fifo.v b/usrp2/extramfifo/ext_fifo.v index daf7140bc..80f82fc63 100644 --- a/usrp2/extramfifo/ext_fifo.v +++ b/usrp2/extramfifo/ext_fifo.v @@ -45,7 +45,7 @@ module ext_fifo wire [EXT_WIDTH-1:0] write_data; wire [EXT_WIDTH-1:0] read_data; wire full1, empty1; - wire almost_full2, full2, empty2; + wire almost_full2, almost_full2_spread, full2, empty2; wire [FIFO_DEPTH-1:0] capacity; wire space_avail; wire data_avail; @@ -83,7 +83,7 @@ module ext_fifo .write_strobe(~empty1 ), .space_avail(space_avail), .read_data(read_data), - .read_strobe(~almost_full2), + .read_strobe(~almost_full2_spread), .data_avail(data_avail), .capacity(capacity) ); @@ -148,6 +148,13 @@ module ext_fifo endgenerate + refill_randomizer #(.BITS(7)) + refill_randomizer_i1 ( + .clk(ext_clk), + .rst(rst), + .full_in(almost_full2), + .full_out(almost_full2_spread) + ); // always @ (posedge int_clk) // debug[31:28] <= {empty2,full1,dst_rdy_i,src_rdy_i }; diff --git a/usrp2/extramfifo/ext_fifo_tb.sav b/usrp2/extramfifo/ext_fifo_tb.sav new file mode 100644 index 000000000..a54b40fc5 --- /dev/null +++ b/usrp2/extramfifo/ext_fifo_tb.sav @@ -0,0 +1,30 @@ +[timestart] 0 +[size] 1523 832 +[pos] -1 -1 +*-15.000000 66300 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 +[treeopen] ext_fifo_tb. +[treeopen] ext_fifo_tb.ext_fifo_i1. +[treeopen] ext_fifo_tb.ext_fifo_i1.nobl_fifo_i1. +@28 +ext_fifo_tb.ext_fifo_i1.src_rdy_i +ext_fifo_tb.ext_fifo_i1.dst_rdy_o +@22 +ext_fifo_tb.ext_fifo_i1.datain[35:0] +@28 +ext_fifo_tb.ext_fifo_i1.src_rdy_o +ext_fifo_tb.ext_fifo_i1.dst_rdy_i +@22 +ext_fifo_tb.ext_fifo_i1.dataout[35:0] +ext_fifo_tb.ext_fifo_i1.RAM_A[17:0] +@28 +ext_fifo_tb.ext_fifo_i1.RAM_WEn +ext_fifo_tb.ext_fifo_i1.RAM_CE1n +@22 +ext_fifo_tb.ext_fifo_i1.RAM_D_pi[35:0] +ext_fifo_tb.ext_fifo_i1.RAM_D_po[35:0] +ext_fifo_tb.ext_fifo_i1.write_data[35:0] +@28 +ext_fifo_tb.ext_fifo_i1.full1 +ext_fifo_tb.ext_fifo_i1.empty1 +@29 +ext_fifo_tb.ext_fifo_i1.space_avail diff --git a/usrp2/extramfifo/ext_fifo_tb.v b/usrp2/extramfifo/ext_fifo_tb.v index 5f4e28719..395ad2884 100644 --- a/usrp2/extramfifo/ext_fifo_tb.v +++ b/usrp2/extramfifo/ext_fifo_tb.v @@ -1,6 +1,6 @@ `timescale 1ns / 1ps -//`define USRP2 -`define USRP2PLUS +`define USRP2 +//`define USRP2PLUS `ifdef USRP2 `define INT_WIDTH 36 diff --git a/usrp2/extramfifo/refill_randomizer.v b/usrp2/extramfifo/refill_randomizer.v new file mode 100644 index 000000000..0b30f4049 --- /dev/null +++ b/usrp2/extramfifo/refill_randomizer.v @@ -0,0 +1,66 @@ +// +// EMI mitigation. +// Process FULL flag from FIFO so that de-assertion +// (FIFO now not FULL) is delayed by a pseudo random +// value, but assertion is passed straight through. +// + + +module refill_randomizer + #(parameter BITS=7) + ( + input clk, + input rst, + input full_in, + output full_out + ); + + wire feedback; + reg full_last; + wire full_deasserts; + reg [6:0] shift_reg; + reg [6:0] count; + reg delayed_fall; + + + always @(posedge clk) + full_last <= full_in; + + assign full_deasserts = full_last & ~full_in; + + // 7 bit LFSR + always @(posedge clk) + if (rst) + shift_reg <= 7'b1; + else + if (full_deasserts) + shift_reg <= {shift_reg[5:0],feedback}; + + assign feedback = ^(shift_reg & 7'h41); + + always @(posedge clk) + if (rst) + begin + count <= 1; + delayed_fall <= 1; + end + else if (full_deasserts) + begin + count <= shift_reg; + delayed_fall <= 1; + end + else if (count == 1) + begin + count <= 1; + delayed_fall <= 0; + end + else + begin + count <= count - 1; + delayed_fall <= 1; + end + + // Full_out goes instantly high if full_in does. However its fall is delayed. + assign full_out = (full_in == 1) || (full_last == 1) || delayed_fall; + +endmodule \ No newline at end of file -- cgit v1.2.3 From 78abd7d98a5dc42aeafa89ed29a3ab8a1f9475f4 Mon Sep 17 00:00:00 2001 From: Matt Ettus Date: Thu, 11 Nov 2010 18:50:49 -0800 Subject: gray code address for emi --- usrp2/extramfifo/nobl_if.v | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/usrp2/extramfifo/nobl_if.v b/usrp2/extramfifo/nobl_if.v index 7ff7eaa03..b5ebe9c6b 100644 --- a/usrp2/extramfifo/nobl_if.v +++ b/usrp2/extramfifo/nobl_if.v @@ -39,6 +39,12 @@ module nobl_if assign RAM_LDn = 0; // ZBT/NoBL RAM actually manages its own output enables very well. assign RAM_OEn = 0; + + // gray code the address to reduce EMI + wire [DEPTH-1:0] address_gray; + + bin2gray #(.WIDTH(DEPTH)) bin2gray (.bin(address),.gray(address_gray)); + // // Pipeline stage 1 @@ -62,7 +68,7 @@ module nobl_if if (enable) begin - address_pipe1 <= address; + address_pipe1 <= address_gray; write_pipe1 <= write; // RAM_WEn <= ~write; // Creates IOB flop -- cgit v1.2.3 From 823f04cf0046fb61109bd10b8fd41942a7359a06 Mon Sep 17 00:00:00 2001 From: Matt Ettus Date: Sat, 6 Nov 2010 12:18:21 -0700 Subject: added ability to truly clear out the entire rx chain. also removed old style fifo in rx. --- usrp2/top/u2_rev3/u2_core_udp.v | 12 +++++++++--- usrp2/vrt/vita_rx_control.v | 31 +++++++++++++++---------------- usrp2/vrt/vita_rx_framer.v | 13 +++---------- 3 files changed, 27 insertions(+), 29 deletions(-) diff --git a/usrp2/top/u2_rev3/u2_core_udp.v b/usrp2/top/u2_rev3/u2_core_udp.v index ea4dd314f..ec973df8d 100644 --- a/usrp2/top/u2_rev3/u2_core_udp.v +++ b/usrp2/top/u2_rev3/u2_core_udp.v @@ -624,9 +624,15 @@ module u2_core .debug(debug_rx_dsp) ); wire [31:0] vrc_debug; + wire clear_rx; + setting_reg #(.my_addr(SR_RX_CTRL+3)) sr_clear + (.clk(dsp_clk),.rst(dsp_rst), + .strobe(set_stb_dsp),.addr(set_addr_dsp),.in(set_data_dsp), + .out(),.changed(clear_rx)); + vita_rx_control #(.BASE(SR_RX_CTRL), .WIDTH(32)) vita_rx_control - (.clk(dsp_clk), .reset(dsp_rst), .clear(0), + (.clk(dsp_clk), .reset(dsp_rst), .clear(clear_rx), .set_stb(set_stb_dsp),.set_addr(set_addr_dsp),.set_data(set_data_dsp), .vita_time(vita_time), .overrun(overrun), .sample(sample_rx), .run(run_rx), .strobe(strobe_rx), @@ -636,7 +642,7 @@ module u2_core wire [3:0] vita_state; vita_rx_framer #(.BASE(SR_RX_CTRL), .MAXCHAN(1)) vita_rx_framer - (.clk(dsp_clk), .reset(dsp_rst), .clear(0), + (.clk(dsp_clk), .reset(dsp_rst), .clear(clear_rx), .set_stb(set_stb_dsp),.set_addr(set_addr_dsp),.set_data(set_data_dsp), .sample_fifo_i(rx_data), .sample_fifo_dst_rdy_o(rx_dst_rdy), .sample_fifo_src_rdy_i(rx_src_rdy), .data_o(rx1_data), .dst_rdy_i(rx1_dst_rdy), .src_rdy_o(rx1_src_rdy), @@ -644,7 +650,7 @@ module u2_core .debug_rx(vita_state) ); fifo_cascade #(.WIDTH(36), .SIZE(DSP_RX_FIFOSIZE)) rx_fifo_cascade - (.clk(dsp_clk), .reset(dsp_rst), .clear(0), + (.clk(dsp_clk), .reset(dsp_rst), .clear(clear_rx), .datain(rx1_data), .src_rdy_i(rx1_src_rdy), .dst_rdy_o(rx1_dst_rdy), .dataout({wr1_flags,wr1_dat}), .src_rdy_o(wr1_ready_i), .dst_rdy_i(wr1_ready_o)); diff --git a/usrp2/vrt/vita_rx_control.v b/usrp2/vrt/vita_rx_control.v index 93673d292..ba63181f1 100644 --- a/usrp2/vrt/vita_rx_control.v +++ b/usrp2/vrt/vita_rx_control.v @@ -25,16 +25,14 @@ module vita_rx_control wire [63:0] new_time; wire [31:0] new_command; - wire sc_pre1, clear_int, clear_reg; + wire sc_pre1; - assign clear_int = clear | clear_reg; - wire [63:0] rcvtime_pre; reg [63:0] rcvtime; wire [28:0] numlines_pre; wire send_imm_pre, chain_pre, reload_pre; reg send_imm, chain, reload; - wire full_ctrl, read_ctrl, empty_ctrl, write_ctrl; + wire read_ctrl, empty_ctrl, write_ctrl; reg sc_pre2; wire [33:0] fifo_line; reg [28:0] lines_left, lines_total; @@ -54,21 +52,22 @@ module vita_rx_control (.clk(clk),.rst(reset),.strobe(set_stb),.addr(set_addr), .in(set_data),.out(new_time[31:0]),.changed(sc_pre1)); - setting_reg #(.my_addr(BASE+3)) sr_clear - (.clk(clk),.rst(reset),.strobe(set_stb),.addr(set_addr), - .in(set_data),.out(),.changed(clear_reg)); - // FIFO to store commands sent from the settings bus always @(posedge clk) - sc_pre2 <= sc_pre1; + if(reset | clear) + sc_pre2 <= 0; + else + sc_pre2 <= sc_pre1; + assign write_ctrl = sc_pre1 & ~sc_pre2; wire [4:0] command_queue_len; - shortfifo #(.WIDTH(96)) commandfifo - (.clk(clk),.rst(reset),.clear(clear_int), - .datain({new_command,new_time}), .write(write_ctrl&~full_ctrl), .full(full_ctrl), + + fifo_short #(.WIDTH(96)) commandfifo + (.clk(clk),.reset(reset),.clear(clear), + .datain({new_command,new_time}), .src_rdy_i(write_ctrl), .dst_rdy_o(), .dataout({send_imm_pre,chain_pre,reload_pre,numlines_pre,rcvtime_pre}), - .read(read_ctrl), .empty(empty_ctrl), + .src_rdy_o(empty_ctrl), .dst_rdy_i(read_ctrl), .occupied(command_queue_len), .space() ); reg [33:0] pkt_fifo_line; @@ -92,7 +91,7 @@ module vita_rx_control (ibs_state==IBS_BROKENCHAIN) | (ibs_state==IBS_LATECMD)); fifo_short #(.WIDTH(4+64+WIDTH)) rx_sample_fifo - (.clk(clk),.reset(reset),.clear(clear_int), + (.clk(clk),.reset(reset),.clear(clear), .datain({flags,vita_time,sample}), .src_rdy_i(attempt_sample_write), .dst_rdy_o(sample_fifo_in_rdy), .dataout(sample_fifo_o), .src_rdy_o(sample_fifo_src_rdy_o), .dst_rdy_i(sample_fifo_dst_rdy_i), @@ -107,7 +106,7 @@ module vita_rx_control wire full = ~sample_fifo_in_rdy; always @(posedge clk) - if(reset | clear_int) + if(reset | clear) begin ibs_state <= IBS_IDLE; lines_left <= 0; @@ -185,7 +184,7 @@ module vita_rx_control assign debug_rx = { { ibs_state[2:0], command_queue_len }, { 8'd0 }, - { go_now, too_late, run, strobe, read_ctrl, write_ctrl, full_ctrl, empty_ctrl }, + { go_now, too_late, run, strobe, read_ctrl, write_ctrl, 1'b0, empty_ctrl }, { 2'b0, overrun, chain_pre, sample_fifo_in_rdy, attempt_sample_write, sample_fifo_src_rdy_o,sample_fifo_dst_rdy_i} }; endmodule // rx_control diff --git a/usrp2/vrt/vita_rx_framer.v b/usrp2/vrt/vita_rx_framer.v index 235817941..1065ce637 100644 --- a/usrp2/vrt/vita_rx_framer.v +++ b/usrp2/vrt/vita_rx_framer.v @@ -57,13 +57,6 @@ module vita_rx_framer wire [15:0] vita_pkt_len = samples_per_packet + 6; //wire [3:0] flags = {signal_overrun,signal_brokenchain,signal_latecmd,signal_cmd_done}; - wire clear_reg; - wire clear_int = clear | clear_reg; - - setting_reg #(.my_addr(BASE+3)) sr_clear - (.clk(clk),.rst(reset),.strobe(set_stb),.addr(set_addr), - .in(set_data),.out(),.changed(clear_reg)); - setting_reg #(.my_addr(BASE+4)) sr_header (.clk(clk),.rst(reset),.strobe(set_stb),.addr(set_addr), .in(set_data),.out(vita_header),.changed()); @@ -102,7 +95,7 @@ module vita_rx_framer localparam VITA_ERR_TRAILER = 15; // Extension context packets have no trailer always @(posedge clk) - if(reset | clear_pkt_count) + if(reset | clear | clear_pkt_count) pkt_count <= 0; else if((vita_state == VITA_TRAILER) & pkt_fifo_rdy) pkt_count <= pkt_count + 1; @@ -135,7 +128,7 @@ module vita_rx_framer endcase // case (vita_state) always @(posedge clk) - if(reset) + if(reset | clear) begin vita_state <= VITA_IDLE; sample_ctr <= 0; @@ -203,7 +196,7 @@ module vita_rx_framer // Short FIFO to buffer between us and the FIFOs outside fifo_short #(.WIDTH(34)) rx_pkt_fifo - (.clk(clk), .reset(reset), .clear(clear_int), + (.clk(clk), .reset(reset), .clear(clear), .datain(pkt_fifo_line), .src_rdy_i(req_write_pkt_fifo), .dst_rdy_o(pkt_fifo_rdy), .dataout(data_o[33:0]), .src_rdy_o(src_rdy_o), .dst_rdy_i(dst_rdy_i), .space(),.occupied(fifo_occupied[4:0]) ); -- cgit v1.2.3 From 587dfe7db4b4749ffedb5e7e3a0a36a83dd90c6a Mon Sep 17 00:00:00 2001 From: Matt Ettus Date: Sun, 7 Nov 2010 11:51:28 -0800 Subject: clear out the vita tx chain and the tx fifo. need to check the fifo reset to make sure it is in the correct clock domain. --- usrp2/top/u2_rev3/u2_core_udp.v | 23 ++++++++++++----------- usrp2/vrt/gen_context_pkt.v | 7 ++++--- usrp2/vrt/vita_tx_chain.v | 8 ++++++-- usrp2/vrt/vita_tx_control.v | 9 ++------- usrp2/vrt/vita_tx_deframer.v | 2 +- 5 files changed, 25 insertions(+), 24 deletions(-) diff --git a/usrp2/top/u2_rev3/u2_core_udp.v b/usrp2/top/u2_rev3/u2_core_udp.v index ec973df8d..3c31d33a9 100644 --- a/usrp2/top/u2_rev3/u2_core_udp.v +++ b/usrp2/top/u2_rev3/u2_core_udp.v @@ -162,6 +162,7 @@ module u2_core wire ram_loader_done; wire ram_loader_rst, wb_rst, dsp_rst; + assign dsp_rst = wb_rst; wire [31:0] status, status_b0, status_b1, status_b2, status_b3, status_b4, status_b5, status_b6, status_b7; wire bus_error, spi_int, i2c_int, pps_int, onetime_int, periodic_int, buffer_int; @@ -660,14 +661,17 @@ module u2_core wire [35:0] tx_data; wire tx_src_rdy, tx_dst_rdy; wire [31:0] debug_vt; + wire clear_tx; + setting_reg #(.my_addr(SR_TX_CTRL+1)) sr_clear_tx + (.clk(clk),.rst(rst),.strobe(set_stb),.addr(set_addr), + .in(set_data),.out(),.changed(clear_tx)); + ext_fifo #(.EXT_WIDTH(18),.INT_WIDTH(36),.RAM_DEPTH(19),.FIFO_DEPTH(19)) ext_fifo_i1 - ( - .int_clk(dsp_clk), + (.int_clk(dsp_clk), .ext_clk(clk_to_mac), -// .ext_clk(wb_clk), - .rst(dsp_rst), + .rst(dsp_rst | clear_tx), .RAM_D_pi(RAM_D_pi), .RAM_D_po(RAM_D_po), .RAM_D_poe(RAM_D_poe), @@ -679,15 +683,14 @@ module u2_core .RAM_CE1n(RAM_CE1n), // .datain({rd1_flags,rd1_dat}), .datain({rd1_flags[3:2],rd1_dat[31:16],rd1_flags[1:0],rd1_dat[15:0]}), - .src_rdy_i(rd1_ready_o), // WRITE - .dst_rdy_o(rd1_ready_i), // not FULL + .src_rdy_i(rd1_ready_o), + .dst_rdy_o(rd1_ready_i), // .dataout(tx_data), .dataout({tx_data[35:34],tx_data[31:16],tx_data[33:32],tx_data[15:0]}), - .src_rdy_o(tx_src_rdy), // not EMPTY + .src_rdy_o(tx_src_rdy), .dst_rdy_i(tx_dst_rdy), .debug(debug_extfifo), - .debug2(debug_extfifo2) - ); + .debug2(debug_extfifo2) ); vita_tx_chain #(.BASE_CTRL(SR_TX_CTRL), .BASE_DSP(SR_TX_DSP), .REPORT_ERROR(1), .DO_FLOW_CONTROL(1), @@ -702,8 +705,6 @@ module u2_core .underrun(underrun), .run(run_tx), .debug(debug_vt)); - assign dsp_rst = wb_rst; - // /////////////////////////////////////////////////////////////////////////////////// // SERDES diff --git a/usrp2/vrt/gen_context_pkt.v b/usrp2/vrt/gen_context_pkt.v index 0eb035f3e..efc170743 100644 --- a/usrp2/vrt/gen_context_pkt.v +++ b/usrp2/vrt/gen_context_pkt.v @@ -38,9 +38,10 @@ module gen_context_pkt stored_message <= message; else if(ctxt_state == CTXT_FLOWCTRL1) stored_message <= 0; - + + // Don't want to clear most of this to avoid getting stuck with a half packet in the pipe always @(posedge clk) - if(reset | clear) + if(reset) begin ctxt_state <= CTXT_IDLE; seqno <= 0; @@ -84,7 +85,7 @@ module gen_context_pkt endcase // case (ctxt_state) fifo_short #(.WIDTH(34)) ctxt_fifo - (.clk(clk), .reset(reset), .clear(clear), + (.clk(clk), .reset(reset), .clear(0), .datain(data_int), .src_rdy_i(src_rdy_int), .dst_rdy_o(dst_rdy_int), .dataout(data_o[33:0]), .src_rdy_o(src_rdy_o), .dst_rdy_i(dst_rdy_i)); assign data_o[35:34] = 2'b00; diff --git a/usrp2/vrt/vita_tx_chain.v b/usrp2/vrt/vita_tx_chain.v index 00da4c6e1..21e826f1c 100644 --- a/usrp2/vrt/vita_tx_chain.v +++ b/usrp2/vrt/vita_tx_chain.v @@ -33,7 +33,11 @@ module vita_tx_chain assign underrun = error & ~(error_code == 1); assign message = error_code; - + + setting_reg #(.my_addr(BASE_CTRL+1)) sr + (.clk(clk),.rst(rst),.strobe(set_stb),.addr(set_addr), + .in(set_data),.out(),.changed(clear_vita)); + setting_reg #(.my_addr(BASE_CTRL+2), .at_reset(0)) sr_streamid (.clk(clk),.rst(reset),.strobe(set_stb),.addr(set_addr), .in(set_data),.out(streamid),.changed(clear_seqnum)); @@ -88,7 +92,7 @@ module vita_tx_chain assign debug = debug_vtc | debug_vtd; fifo36_mux #(.prio(1)) mux_err_and_flow // Priority to err messages - (.clk(clk), .reset(reset), .clear(clear_vita), + (.clk(clk), .reset(reset), .clear(0), // Don't clear this or it could get clogged .data0_i(err_data_int), .src0_rdy_i(err_src_rdy_int), .dst0_rdy_o(err_dst_rdy_int), .data1_i(flow_data), .src1_rdy_i(flow_src_rdy), .dst1_rdy_o(flow_dst_rdy), .data_o(err_data_o), .src_rdy_o(err_src_rdy_o), .dst_rdy_i(err_dst_rdy_i)); diff --git a/usrp2/vrt/vita_tx_control.v b/usrp2/vrt/vita_tx_control.v index 936762212..eb41c54c0 100644 --- a/usrp2/vrt/vita_tx_control.v +++ b/usrp2/vrt/vita_tx_control.v @@ -58,11 +58,6 @@ module vita_tx_control reg [2:0] ibs_state; - wire clear_state; - setting_reg #(.my_addr(BASE+1)) sr - (.clk(clk),.rst(rst),.strobe(set_stb),.addr(set_addr), - .in(set_data),.out(),.changed(clear_state)); - wire [31:0] error_policy; setting_reg #(.my_addr(BASE+3)) sr_error_policy (.clk(clk),.rst(rst),.strobe(set_stb),.addr(set_addr), @@ -74,7 +69,7 @@ module vita_tx_control reg send_error; always @(posedge clk) - if(reset | clear_state) + if(reset | clear) begin ibs_state <= IBS_IDLE; send_error <= 0; @@ -163,7 +158,7 @@ module vita_tx_control assign error = send_error; always @(posedge clk) - if(reset) + if(reset | clear) packet_consumed <= 0; else packet_consumed <= eop & sample_fifo_src_rdy_i & sample_fifo_dst_rdy_o; diff --git a/usrp2/vrt/vita_tx_deframer.v b/usrp2/vrt/vita_tx_deframer.v index 7fb8e3893..7697be367 100644 --- a/usrp2/vrt/vita_tx_deframer.v +++ b/usrp2/vrt/vita_tx_deframer.v @@ -80,7 +80,7 @@ module vita_tx_deframer wire fifo_space; always @(posedge clk) - if(reset | clear_seqnum) + if(reset | clear | clear_seqnum) begin seqnum_reg <= 32'hFFFF_FFFF; vita_seqnum_reg <= 4'hF; -- cgit v1.2.3 From ae0d02442ab892e9800b127d6ba1eed70716bb99 Mon Sep 17 00:00:00 2001 From: Matt Ettus Date: Sun, 7 Nov 2010 14:08:53 -0800 Subject: handle zero-length packets properly --- usrp2/vrt/vita_rx_control.v | 39 ++++++++++++++++---------- usrp2/vrt/vita_rx_framer.v | 25 +++++++++-------- usrp2/vrt/vita_rx_tb.v | 67 ++++++++++++++++++++++++++------------------- 3 files changed, 76 insertions(+), 55 deletions(-) diff --git a/usrp2/vrt/vita_rx_control.v b/usrp2/vrt/vita_rx_control.v index ba63181f1..0769f3a24 100644 --- a/usrp2/vrt/vita_rx_control.v +++ b/usrp2/vrt/vita_rx_control.v @@ -9,7 +9,7 @@ module vita_rx_control output overrun, // To vita_rx_framer - output [4+64+WIDTH-1:0] sample_fifo_o, + output [5+64+WIDTH-1:0] sample_fifo_o, output sample_fifo_src_rdy_o, input sample_fifo_dst_rdy_i, @@ -32,7 +32,7 @@ module vita_rx_control wire [28:0] numlines_pre; wire send_imm_pre, chain_pre, reload_pre; reg send_imm, chain, reload; - wire read_ctrl, empty_ctrl, write_ctrl; + wire read_ctrl, not_empty_ctrl, write_ctrl; reg sc_pre2; wire [33:0] fifo_line; reg [28:0] lines_left, lines_total; @@ -62,12 +62,12 @@ module vita_rx_control assign write_ctrl = sc_pre1 & ~sc_pre2; wire [4:0] command_queue_len; - + fifo_short #(.WIDTH(96)) commandfifo (.clk(clk),.reset(reset),.clear(clear), .datain({new_command,new_time}), .src_rdy_i(write_ctrl), .dst_rdy_o(), .dataout({send_imm_pre,chain_pre,reload_pre,numlines_pre,rcvtime_pre}), - .src_rdy_o(empty_ctrl), .dst_rdy_i(read_ctrl), + .src_rdy_o(not_empty_ctrl), .dst_rdy_i(read_ctrl), .occupied(command_queue_len), .space() ); reg [33:0] pkt_fifo_line; @@ -78,19 +78,22 @@ module vita_rx_control localparam IBS_OVERRUN = 4; localparam IBS_BROKENCHAIN = 5; localparam IBS_LATECMD = 6; - - wire signal_cmd_done = (lines_left == 1) & (~chain | (~empty_ctrl & (numlines_pre==0))); + localparam IBS_ZEROLEN = 7; + + wire signal_cmd_done = (lines_left == 1) & (~chain | (not_empty_ctrl & (numlines_pre==0))); wire signal_overrun = (ibs_state == IBS_OVERRUN); wire signal_brokenchain = (ibs_state == IBS_BROKENCHAIN); wire signal_latecmd = (ibs_state == IBS_LATECMD); + wire signal_zerolen = (ibs_state == IBS_ZEROLEN); // Buffer of samples for while we're writing the packet headers - wire [3:0] flags = {signal_overrun,signal_brokenchain,signal_latecmd,signal_cmd_done}; + wire [4:0] flags = {signal_zerolen,signal_overrun,signal_brokenchain,signal_latecmd,signal_cmd_done}; wire attempt_sample_write = ((run & strobe) | (ibs_state==IBS_OVERRUN) | - (ibs_state==IBS_BROKENCHAIN) | (ibs_state==IBS_LATECMD)); + (ibs_state==IBS_BROKENCHAIN) | (ibs_state==IBS_LATECMD) | + (ibs_state==IBS_ZEROLEN)); - fifo_short #(.WIDTH(4+64+WIDTH)) rx_sample_fifo + fifo_short #(.WIDTH(5+64+WIDTH)) rx_sample_fifo (.clk(clk),.reset(reset),.clear(clear), .datain({flags,vita_time,sample}), .src_rdy_i(attempt_sample_write), .dst_rdy_o(sample_fifo_in_rdy), .dataout(sample_fifo_o), @@ -119,12 +122,15 @@ module vita_rx_control else case(ibs_state) IBS_IDLE : - if(~empty_ctrl) + if(not_empty_ctrl) begin lines_left <= numlines_pre; lines_total <= numlines_pre; rcvtime <= rcvtime_pre; - ibs_state <= IBS_WAITING; + if(numlines_pre == 0) + ibs_state <= IBS_ZEROLEN; + else + ibs_state <= IBS_WAITING; send_imm <= send_imm_pre; chain <= chain_pre; reload <= reload_pre; @@ -144,12 +150,12 @@ module vita_rx_control if(lines_left == 1) if(~chain) ibs_state <= IBS_IDLE; - else if(empty_ctrl & reload) + else if(~not_empty_ctrl & reload) begin ibs_state <= IBS_RUNNING; lines_left <= lines_total; end - else if(empty_ctrl) + else if(~not_empty_ctrl) ibs_state <= IBS_BROKENCHAIN; else begin @@ -174,17 +180,20 @@ module vita_rx_control IBS_BROKENCHAIN : if(sample_fifo_in_rdy) ibs_state <= IBS_IDLE; + IBS_ZEROLEN : + if(sample_fifo_in_rdy) + ibs_state <= IBS_IDLE; endcase // case(ibs_state) assign overrun = (ibs_state == IBS_OVERRUN); assign run = (ibs_state == IBS_RUNNING); assign read_ctrl = ( (ibs_state == IBS_IDLE) | ((ibs_state == IBS_RUNNING) & strobe & ~full & (lines_left==1) & chain) ) - & ~empty_ctrl; + & not_empty_ctrl; assign debug_rx = { { ibs_state[2:0], command_queue_len }, { 8'd0 }, - { go_now, too_late, run, strobe, read_ctrl, write_ctrl, 1'b0, empty_ctrl }, + { go_now, too_late, run, strobe, read_ctrl, write_ctrl, 1'b0, ~not_empty_ctrl }, { 2'b0, overrun, chain_pre, sample_fifo_in_rdy, attempt_sample_write, sample_fifo_src_rdy_o,sample_fifo_dst_rdy_i} }; endmodule // rx_control diff --git a/usrp2/vrt/vita_rx_framer.v b/usrp2/vrt/vita_rx_framer.v index 1065ce637..bce8fe334 100644 --- a/usrp2/vrt/vita_rx_framer.v +++ b/usrp2/vrt/vita_rx_framer.v @@ -11,7 +11,7 @@ module vita_rx_framer output src_rdy_o, // From vita_rx_control - input [4+64+(32*MAXCHAN)-1:0] sample_fifo_i, + input [5+64+(32*MAXCHAN)-1:0] sample_fifo_i, input sample_fifo_src_rdy_i, output sample_fifo_dst_rdy_o, @@ -23,11 +23,11 @@ module vita_rx_framer output [31:0] debug_rx ); - localparam SAMP_WIDTH = 4+64+(32*MAXCHAN); + localparam SAMP_WIDTH = 5+64+(32*MAXCHAN); reg [3:0] sample_phase; wire [3:0] numchan; - wire [3:0] flags_fifo_o = sample_fifo_i[SAMP_WIDTH-1:SAMP_WIDTH-4]; - wire [63:0] vita_time_fifo_o = sample_fifo_i[SAMP_WIDTH-5:SAMP_WIDTH-68]; + wire [4:0] flags_fifo_o = sample_fifo_i[SAMP_WIDTH-1:SAMP_WIDTH-5]; + wire [63:0] vita_time_fifo_o = sample_fifo_i[SAMP_WIDTH-6:SAMP_WIDTH-69]; reg [31:0] data_fifo_o; @@ -55,7 +55,7 @@ module vita_rx_framer reg [3:0] pkt_count; wire [15:0] vita_pkt_len = samples_per_packet + 6; - //wire [3:0] flags = {signal_overrun,signal_brokenchain,signal_latecmd,signal_cmd_done}; + //wire [4:0] flags = {signal_zerolen,signal_overrun,signal_brokenchain,signal_latecmd,signal_cmd_done}; setting_reg #(.my_addr(BASE+4)) sr_header (.clk(clk),.rst(reset),.strobe(set_stb),.addr(set_addr), @@ -69,11 +69,11 @@ module vita_rx_framer (.clk(clk),.rst(reset),.strobe(set_stb),.addr(set_addr), .in(set_data),.out(vita_trailer),.changed()); - setting_reg #(.my_addr(BASE+7)) sr_samples_per_pkt + setting_reg #(.my_addr(BASE+7),.width(16)) sr_samples_per_pkt (.clk(clk),.rst(reset),.strobe(set_stb),.addr(set_addr), .in(set_data),.out(samples_per_packet),.changed()); - setting_reg #(.my_addr(BASE+8), .at_reset(1)) sr_numchan + setting_reg #(.my_addr(BASE+8),.width(4), .at_reset(1)) sr_numchan (.clk(clk),.rst(reset),.strobe(set_stb),.addr(set_addr), .in(set_data),.out(numchan),.changed()); @@ -107,7 +107,8 @@ module vita_rx_framer always @* case(vita_state) // Data packets are IF Data packets with or w/o streamid, no classid, with trailer - VITA_HEADER : pkt_fifo_line <= {2'b01,3'b000,vita_header[28],2'b01,vita_header[25:20],pkt_count,vita_pkt_len}; + VITA_HEADER : pkt_fifo_line <= {2'b01,3'b000,vita_header[28],2'b01,vita_header[25:24], + vita_header[23:20],pkt_count[3:0],vita_pkt_len[15:0]}; VITA_STREAMID : pkt_fifo_line <= {2'b00,vita_streamid}; VITA_SECS : pkt_fifo_line <= {2'b00,vita_time_fifo_o[63:32]}; VITA_TICS : pkt_fifo_line <= {2'b00,32'd0}; @@ -121,7 +122,7 @@ module vita_rx_framer VITA_ERR_SECS : pkt_fifo_line <= {2'b00,vita_time_fifo_o[63:32]}; VITA_ERR_TICS : pkt_fifo_line <= {2'b00,32'd0}; VITA_ERR_TICS2 : pkt_fifo_line <= {2'b00,vita_time_fifo_o[31:0]}; - VITA_ERR_PAYLOAD : pkt_fifo_line <= {2'b10,28'd0,flags_fifo_o}; + VITA_ERR_PAYLOAD : pkt_fifo_line <= {2'b10,27'd0,flags_fifo_o}; //VITA_ERR_TRAILER : pkt_fifo_line <= {2'b11,vita_trailer}; default : pkt_fifo_line <= 34'h0_FFFF_FFFF; @@ -140,7 +141,7 @@ module vita_rx_framer sample_ctr <= 1; sample_phase <= 0; if(sample_fifo_src_rdy_i) - if(|flags_fifo_o[3:1]) + if(|flags_fifo_o[4:1]) vita_state <= VITA_ERR_HEADER; else vita_state <= VITA_HEADER; @@ -185,7 +186,7 @@ module vita_rx_framer req_write_pkt_fifo <= 1; VITA_PAYLOAD : // Write if sample ready and no error flags - req_write_pkt_fifo <= (sample_fifo_src_rdy_i & ~|flags_fifo_o[3:1]); + req_write_pkt_fifo <= (sample_fifo_src_rdy_i & ~|flags_fifo_o[4:1]); VITA_ERR_HEADER, VITA_ERR_STREAMID, VITA_ERR_SECS, VITA_ERR_TICS, VITA_ERR_TICS2, VITA_ERR_PAYLOAD : req_write_pkt_fifo <= 1; default : @@ -205,7 +206,7 @@ module vita_rx_framer assign sample_fifo_dst_rdy_o = pkt_fifo_rdy & ( ((vita_state==VITA_PAYLOAD) & (sample_phase == (numchan-4'd1)) & - ~|flags_fifo_o[3:1]) | + ~|flags_fifo_o[4:1]) | (vita_state==VITA_ERR_PAYLOAD)); assign debug_rx = vita_state; diff --git a/usrp2/vrt/vita_rx_tb.v b/usrp2/vrt/vita_rx_tb.v index 3e01e2ee2..023934f39 100644 --- a/usrp2/vrt/vita_rx_tb.v +++ b/usrp2/vrt/vita_rx_tb.v @@ -37,7 +37,7 @@ module vita_rx_tb; wire sample_dst_rdy, sample_src_rdy; //wire [99:0] sample_data_o; - wire [64+4+(MAXCHAN*32)-1:0] sample_data_o; + wire [64+5+(MAXCHAN*32)-1:0] sample_data_o; vita_rx_control #(.BASE(0), .WIDTH(32*MAXCHAN)) vita_rx_control (.clk(clk), .reset(reset), .clear(0), @@ -92,58 +92,68 @@ module vita_rx_tb; begin @(negedge reset); @(posedge clk); - write_setting(4,32'hDEADBEEF); // VITA header + write_setting(4,32'h15F00000); // VITA header write_setting(5,32'hF00D1234); // VITA streamid - write_setting(6,32'hF0000000); // VITA trailer + write_setting(6,32'hE0000000); // VITA trailer write_setting(7,8); // Samples per VITA packet - write_setting(8,NUMCHAN); // Samples per VITA packet - queue_rx_cmd(1,0,8,32'h0,32'h0); // send imm, single packet - queue_rx_cmd(1,0,16,32'h0,32'h0); // send imm, 2 packets worth - queue_rx_cmd(1,0,7,32'h0,32'h0); // send imm, 1 short packet worth - queue_rx_cmd(1,0,9,32'h0,32'h0); // send imm, just longer than 1 packet + write_setting(8,NUMCHAN); // Vector length + + queue_rx_cmd(1,1,0,10,32'h0,32'h0); // send imm, single packet + #10000; + + queue_rx_cmd(1,0,0,0,32'h0,32'h0); // send imm, single packet + //queue_rx_cmd(1,1,0,0,32'h0,32'h0); // send imm, single packet + + //queue_rx_cmd(1,0,0,0,32'h0,32'h0); // send imm, single packet + + /* + queue_rx_cmd(1,0,0,8,32'h0,32'h0); // send imm, single packet + queue_rx_cmd(1,0,0,16,32'h0,32'h0); // send imm, 2 packets worth + queue_rx_cmd(1,0,0,7,32'h0,32'h0); // send imm, 1 short packet worth + queue_rx_cmd(1,0,0,9,32'h0,32'h0); // send imm, just longer than 1 packet - queue_rx_cmd(1,1,16,32'h0,32'h0); // chained - queue_rx_cmd(0,0,8,32'h0,32'h0); // 2nd in chain + queue_rx_cmd(1,1,0,16,32'h0,32'h0); // chained + queue_rx_cmd(0,0,0,8,32'h0,32'h0); // 2nd in chain - queue_rx_cmd(1,1,17,32'h0,32'h0); // chained, odd length - queue_rx_cmd(0,0,9,32'h0,32'h0); // 2nd in chain, also odd length + queue_rx_cmd(1,1,0,17,32'h0,32'h0); // chained, odd length + queue_rx_cmd(0,0,0,9,32'h0,32'h0); // 2nd in chain, also odd length - queue_rx_cmd(0,0,8,32'h0,32'h340); // send at, on time - queue_rx_cmd(0,0,8,32'h0,32'h100); // send at, but late + queue_rx_cmd(0,0,0,8,32'h0,32'h340); // send at, on time + queue_rx_cmd(0,0,0,8,32'h0,32'h100); // send at, but late #100000; $display("\nChained, break chain\n"); - queue_rx_cmd(1,1,8,32'h0,32'h0); // chained, but break chain + queue_rx_cmd(1,1,0,8,32'h0,32'h0); // chained, but break chain #100000; $display("\nSingle packet\n"); - queue_rx_cmd(1,0,8,32'h0,32'h0); // send imm, single packet + queue_rx_cmd(1,0,0,8,32'h0,32'h0); // send imm, single packet #100000; $display("\nEnd chain with zero samples, shouldn't error\n"); - queue_rx_cmd(1,1,8,32'h0,32'h0); // chained - queue_rx_cmd(0,0,0,32'h0,32'h0); // end chain with zero samples, should keep us out of error + queue_rx_cmd(1,1,0,8,32'h0,32'h0); // chained + queue_rx_cmd(0,0,0,0,32'h0,32'h0); // end chain with zero samples, should keep us out of error #100000; $display("\nEnd chain with zero samples on odd-length, shouldn't error\n"); - queue_rx_cmd(1,1,14,32'h0,32'h0); // chained - queue_rx_cmd(0,0,0,32'h0,32'h0); // end chain with zero samples, should keep us out of error + queue_rx_cmd(1,1,0,14,32'h0,32'h0); // chained + queue_rx_cmd(0,0,0,0,32'h0,32'h0); // end chain with zero samples, should keep us out of error #100000; $display("Should have gotten 14 samples and EOF by now\n"); - queue_rx_cmd(1,1,9,32'h0,32'h0); // chained, but break chain, odd length + queue_rx_cmd(1,1,0,9,32'h0,32'h0); // chained, but break chain, odd length #100000; dst_rdy <= 0; // stop pulling out of fifo so we can get an overrun - queue_rx_cmd(1,0,100,32'h0,32'h0); // long enough to fill the fifos - queue_rx_cmd(1,0,5,32'h0,32'h0); // this command waits until the previous error packet is sent + queue_rx_cmd(1,0,0,100,32'h0,32'h0); // long enough to fill the fifos + queue_rx_cmd(1,0,0,5,32'h0,32'h0); // this command waits until the previous error packet is sent #100000; dst_rdy <= 1; // restart the reads so we can see what we got #100000; dst_rdy <= 0; // stop pulling out of fifo so we can get an overrun - queue_rx_cmd(1,1,100,32'h0,32'h0); // long enough to fill the fifos - //queue_rx_cmd(1,0,5,32'h0,32'h0); // this command waits until the previous error packet is sent + queue_rx_cmd(1,1,0,100,32'h0,32'h0); // long enough to fill the fifos + //queue_rx_cmd(1,0,0,5,32'h0,32'h0); // this command waits until the previous error packet is sent #100000; @(posedge clk); dst_rdy <= 1; - + */ #100000 $finish; end @@ -164,11 +174,12 @@ module vita_rx_tb; task queue_rx_cmd; input send_imm; input chain; - input [29:0] lines; + input reload; + input [28:0] lines; input [31:0] secs; input [31:0] tics; begin - write_setting(0,{send_imm,chain,lines}); + write_setting(0,{send_imm,chain,reload,lines}); write_setting(1,secs); write_setting(2,tics); end -- cgit v1.2.3 From a78ace9e161a0fc30a6cc6de38b9eea45230a4b6 Mon Sep 17 00:00:00 2001 From: Matt Ettus Date: Sun, 7 Nov 2010 14:32:01 -0800 Subject: compiles with new file locations --- usrp2/vrt/vita_tx.build | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/usrp2/vrt/vita_tx.build b/usrp2/vrt/vita_tx.build index 902929c08..e7106aa10 100755 --- a/usrp2/vrt/vita_tx.build +++ b/usrp2/vrt/vita_tx.build @@ -1 +1 @@ -iverilog -Wimplict -Wportbind -y ../sdr_lib -y ../models -y . -y ../control_lib/ -y ../control_lib/newfifo -y ../coregen -y /opt/Xilinx/10.1/ISE/verilog/src/XilinxCoreLib -y /opt/Xilinx/10.1/ISE/verilog/src/unisims/ -y ../timing -o vita_tx_tb vita_tx_tb.v +iverilog -Wimplict -Wportbind -y ../sdr_lib -y ../models -y . -y ../control_lib/ -y ../fifo -y ../coregen -y /opt/Xilinx/10.1/ISE/verilog/src/XilinxCoreLib -y /opt/Xilinx/10.1/ISE/verilog/src/unisims/ -y ../timing -o vita_tx_tb vita_tx_tb.v -- cgit v1.2.3 From 048dd370496dd128f7d12ac5c40426490c5d6233 Mon Sep 17 00:00:00 2001 From: Matt Ettus Date: Sun, 7 Nov 2010 14:32:35 -0800 Subject: reset properly --- usrp2/vrt/vita_tx_control.v | 1 + 1 file changed, 1 insertion(+) diff --git a/usrp2/vrt/vita_tx_control.v b/usrp2/vrt/vita_tx_control.v index eb41c54c0..967847d36 100644 --- a/usrp2/vrt/vita_tx_control.v +++ b/usrp2/vrt/vita_tx_control.v @@ -73,6 +73,7 @@ module vita_tx_control begin ibs_state <= IBS_IDLE; send_error <= 0; + error_code <= 0; end else case(ibs_state) -- cgit v1.2.3 From ee48c9abebf25d42301d19767e876405a3b533bb Mon Sep 17 00:00:00 2001 From: Matt Ettus Date: Thu, 11 Nov 2010 19:21:36 -0800 Subject: Add flow control and other small vrt fixes to u2p, minor cleanups --- usrp2/top/u2_rev3/u2_core_udp.v | 5 +-- usrp2/top/u2plus/u2plus_core.v | 67 +++++++++++++++++++++++------------------ 2 files changed, 38 insertions(+), 34 deletions(-) diff --git a/usrp2/top/u2_rev3/u2_core_udp.v b/usrp2/top/u2_rev3/u2_core_udp.v index 3c31d33a9..9e62ee1cc 100644 --- a/usrp2/top/u2_rev3/u2_core_udp.v +++ b/usrp2/top/u2_rev3/u2_core_udp.v @@ -125,7 +125,6 @@ module u2_core output [18:0] RAM_A, output RAM_CE1n, output RAM_CENn, - // output RAM_CLK, output RAM_WEn, output RAM_OEn, output RAM_LDn, @@ -662,7 +661,7 @@ module u2_core wire tx_src_rdy, tx_dst_rdy; wire [31:0] debug_vt; wire clear_tx; - + setting_reg #(.my_addr(SR_TX_CTRL+1)) sr_clear_tx (.clk(clk),.rst(rst),.strobe(set_stb),.addr(set_addr), .in(set_data),.out(),.changed(clear_tx)); @@ -681,11 +680,9 @@ module u2_core .RAM_LDn(RAM_LDn), .RAM_OEn(RAM_OEn), .RAM_CE1n(RAM_CE1n), -// .datain({rd1_flags,rd1_dat}), .datain({rd1_flags[3:2],rd1_dat[31:16],rd1_flags[1:0],rd1_dat[15:0]}), .src_rdy_i(rd1_ready_o), .dst_rdy_o(rd1_ready_i), -// .dataout(tx_data), .dataout({tx_data[35:34],tx_data[31:16],tx_data[33:32],tx_data[15:0]}), .src_rdy_o(tx_src_rdy), .dst_rdy_i(tx_dst_rdy), diff --git a/usrp2/top/u2plus/u2plus_core.v b/usrp2/top/u2plus/u2plus_core.v index 081ffe4c6..8426826e2 100644 --- a/usrp2/top/u2plus/u2plus_core.v +++ b/usrp2/top/u2plus/u2plus_core.v @@ -164,9 +164,7 @@ module u2plus_core wire [31:0] atr_lines; wire [31:0] debug_rx, debug_mac, debug_mac0, debug_mac1, debug_tx_dsp, debug_txc, - debug_serdes0, debug_serdes1, debug_serdes2, debug_rx_dsp, debug_udp, - debug_extfifo; - + debug_serdes0, debug_serdes1, debug_serdes2, debug_rx_dsp, debug_udp; wire [15:0] ser_rx_occ, ser_tx_occ, dsp_rx_occ, dsp_tx_occ, eth_rx_occ, eth_tx_occ, eth_rx_occ2; wire ser_rx_full, ser_tx_full, dsp_rx_full, dsp_tx_full, eth_rx_full, eth_tx_full, eth_rx_full2; @@ -367,7 +365,7 @@ module u2plus_core .cyc_i(s4_cyc),.stb_i(s4_stb),.adr_i(s4_adr[3:0]),.we_i(s4_we), .dat_i(s4_dat_o),.dat_o(s4_dat_i),.ack_o(s4_ack), .atr(atr_lines),.debug_0(debug_gpio_0),.debug_1(debug_gpio_1), - .gpio( {io_tx,io_rx} ) ); + .gpio({io_tx,io_rx}) ); // ///////////////////////////////////////////////////////////////////////// // Buffer Pool Status -- Slave #5 @@ -380,7 +378,7 @@ module u2plus_core cycle_count <= cycle_count + 1; //compatibility number -> increment when the fpga has been sufficiently altered - localparam compat_num = 32'd2; + localparam compat_num = 32'd3; wb_readback_mux buff_pool_status (.wb_clk_i(wb_clk), .wb_rst_i(wb_rst), .wb_stb_i(s5_stb), @@ -494,10 +492,17 @@ module u2plus_core // ///////////////////////////////////////////////////////////////////////// // Interrupt Controller, Slave #8 + // Pass interrupts on dsp_clk to wb_clk. These need edge triggering in the pic + wire underrun_wb, overrun_wb, pps_wb; + + oneshot_2clk underrun_1s (.clk_in(dsp_clk), .in(underrun), .clk_out(wb_clk), .out(underrun_wb)); + oneshot_2clk overrun_1s (.clk_in(dsp_clk), .in(overrun), .clk_out(wb_clk), .out(overrun_wb)); + oneshot_2clk pps_1s (.clk_in(dsp_clk), .in(pps_int), .clk_out(wb_clk), .out(pps_wb)); + assign irq= {{8'b0}, {uart_tx_int[3:0], uart_rx_int[3:0]}, {2'b0, button, periodic_int, clk_status, serdes_link_up, 2'b00}, - {pps_int,overrun,underrun,PHY_INTn,i2c_int,spi_int,onetime_int,buffer_int}}; + {pps_wb,overrun_wb,underrun_wb,PHY_INTn,i2c_int,spi_int,onetime_int,buffer_int}}; pic pic(.clk_i(wb_clk),.rst_i(wb_rst),.cyc_i(s8_cyc),.stb_i(s8_stb),.adr_i(s8_adr[4:2]), .we_i(s8_we),.dat_i(s8_dat_o),.dat_o(s8_dat_i),.ack_o(s8_ack),.int_o(proc_int), @@ -578,9 +583,15 @@ module u2plus_core .debug(debug_rx_dsp) ); wire [31:0] vrc_debug; + wire clear_rx; + setting_reg #(.my_addr(SR_RX_CTRL+3)) sr_clear + (.clk(dsp_clk),.rst(dsp_rst), + .strobe(set_stb_dsp),.addr(set_addr_dsp),.in(set_data_dsp), + .out(),.changed(clear_rx)); + vita_rx_control #(.BASE(SR_RX_CTRL), .WIDTH(32)) vita_rx_control - (.clk(dsp_clk), .reset(dsp_rst), .clear(0), + (.clk(dsp_clk), .reset(dsp_rst), .clear(clear_rx), .set_stb(set_stb_dsp),.set_addr(set_addr_dsp),.set_data(set_data_dsp), .vita_time(vita_time), .overrun(overrun), .sample(sample_rx), .run(run_rx), .strobe(strobe_rx), @@ -590,7 +601,7 @@ module u2plus_core wire [3:0] vita_state; vita_rx_framer #(.BASE(SR_RX_CTRL), .MAXCHAN(1)) vita_rx_framer - (.clk(dsp_clk), .reset(dsp_rst), .clear(0), + (.clk(dsp_clk), .reset(dsp_rst), .clear(clear_rx), .set_stb(set_stb_dsp),.set_addr(set_addr_dsp),.set_data(set_data_dsp), .sample_fifo_i(rx_data), .sample_fifo_dst_rdy_o(rx_dst_rdy), .sample_fifo_src_rdy_i(rx_src_rdy), .data_o(rx1_data), .dst_rdy_i(rx1_dst_rdy), .src_rdy_o(rx1_src_rdy), @@ -598,7 +609,7 @@ module u2plus_core .debug_rx(vita_state) ); fifo_cascade #(.WIDTH(36), .SIZE(DSP_RX_FIFOSIZE)) rx_fifo_cascade - (.clk(dsp_clk), .reset(dsp_rst), .clear(0), + (.clk(dsp_clk), .reset(dsp_rst), .clear(clear_rx), .datain(rx1_data), .src_rdy_i(rx1_src_rdy), .dst_rdy_o(rx1_dst_rdy), .dataout({wr1_flags,wr1_dat}), .src_rdy_o(wr1_ready_i), .dst_rdy_i(wr1_ready_o)); @@ -608,23 +619,19 @@ module u2plus_core wire [35:0] tx_data; wire tx_src_rdy, tx_dst_rdy; wire [31:0] debug_vt; - -/* -----\/----- EXCLUDED -----\/----- - fifo_cascade #(.WIDTH(36), .SIZE(DSP_TX_FIFOSIZE)) tx_fifo_cascade - (.clk(dsp_clk), .reset(dsp_rst), .clear(0), - .datain({rd1_flags,rd1_dat}), .src_rdy_i(rd1_ready_o), .dst_rdy_o(rd1_ready_i), - .dataout(tx_data), .src_rdy_o(tx_src_rdy), .dst_rdy_i(tx_dst_rdy) ); - -----/\----- EXCLUDED -----/\----- */ - // External and internal clock run at 100MHz for USRP2+ because ext RAM is 36bits wide - // and provides ample bandwidth. + wire clear_tx; + + setting_reg #(.my_addr(SR_TX_CTRL+1)) sr_clear_tx + (.clk(clk),.rst(rst),.strobe(set_stb),.addr(set_addr), + .in(set_data),.out(),.changed(clear_tx)); + assign RAM_A[20:18] = 3'b0; ext_fifo #(.EXT_WIDTH(36),.INT_WIDTH(36),.RAM_DEPTH(18),.FIFO_DEPTH(18)) ext_fifo_i1 - ( - .int_clk(dsp_clk), + (.int_clk(dsp_clk), .ext_clk(dsp_clk), - .rst(dsp_rst), + .rst(dsp_rst | clear_tx), .RAM_D_pi(RAM_D_pi), .RAM_D_po(RAM_D_po), .RAM_D_poe(RAM_D_poe), @@ -635,17 +642,17 @@ module u2plus_core .RAM_OEn(RAM_OEn), .RAM_CE1n(RAM_CE1n), .datain({rd1_flags[3:2],rd1_dat[31:16],rd1_flags[1:0],rd1_dat[15:0]}), - .src_rdy_i(rd1_ready_o), // WRITE - .dst_rdy_o(rd1_ready_i), // not FULL + .src_rdy_i(rd1_ready_o), + .dst_rdy_o(rd1_ready_i), .dataout({tx_data[35:34],tx_data[31:16],tx_data[33:32],tx_data[15:0]}), - .src_rdy_o(tx_src_rdy), // not EMPTY + .src_rdy_o(tx_src_rdy), .dst_rdy_i(tx_dst_rdy), .debug(debug_extfifo), - .debug2(debug_extfifo2) - ); - + .debug2(debug_extfifo2) ); + vita_tx_chain #(.BASE_CTRL(SR_TX_CTRL), .BASE_DSP(SR_TX_DSP), - .REPORT_ERROR(1), .PROT_ENG_FLAGS(1)) + .REPORT_ERROR(1), .DO_FLOW_CONTROL(1), + .PROT_ENG_FLAGS(1), .USE_TRANS_HEADER(1)) vita_tx_chain (.clk(dsp_clk), .reset(dsp_rst), .set_stb(set_stb_dsp),.set_addr(set_addr_dsp),.set_data(set_data_dsp), @@ -681,8 +688,8 @@ module u2plus_core // ///////////////////////////////////////////////////////////////////////////////////////// // Debug Pins - assign debug_clk = 2'b00; - assign debug = 32'd0; + assign debug_clk = 2'b00; // {dsp_clk, clk_to_mac}; + assign debug = 32'd0; // debug_extfifo; assign debug_gpio_0 = 32'd0; assign debug_gpio_1 = 32'd0; -- cgit v1.2.3 From 00297596c28df8d5ffd454f95f71b290dcbe07ef Mon Sep 17 00:00:00 2001 From: Matt Ettus Date: Sat, 13 Nov 2010 18:18:51 -0800 Subject: we're still on version 12.1 --- usrp2/coregen/fifo_xlnx_32x36_2clk.xise | 2 +- usrp2/coregen/fifo_xlnx_512x36_2clk_prog_full.xise | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/usrp2/coregen/fifo_xlnx_32x36_2clk.xise b/usrp2/coregen/fifo_xlnx_32x36_2clk.xise index 0c3544a33..b9eb7bd1a 100644 --- a/usrp2/coregen/fifo_xlnx_32x36_2clk.xise +++ b/usrp2/coregen/fifo_xlnx_32x36_2clk.xise @@ -12,7 +12,7 @@ - + diff --git a/usrp2/coregen/fifo_xlnx_512x36_2clk_prog_full.xise b/usrp2/coregen/fifo_xlnx_512x36_2clk_prog_full.xise index 8bf460ac7..91dbf5819 100644 --- a/usrp2/coregen/fifo_xlnx_512x36_2clk_prog_full.xise +++ b/usrp2/coregen/fifo_xlnx_512x36_2clk_prog_full.xise @@ -12,7 +12,7 @@ - + -- cgit v1.2.3 From f04a49aabfce58fa57e5dcc727b7a13143fb92a4 Mon Sep 17 00:00:00 2001 From: Matt Ettus Date: Sat, 13 Nov 2010 18:19:37 -0800 Subject: simplify time comparison to speed up logic and meet fpga timing --- usrp2/timing/time_compare.v | 26 +++++++++++++++++++++++++- usrp2/vrt/vita_tx_control.v | 5 ++--- 2 files changed, 27 insertions(+), 4 deletions(-) diff --git a/usrp2/timing/time_compare.v b/usrp2/timing/time_compare.v index a21c9f8e0..cb2b6d860 100644 --- a/usrp2/timing/time_compare.v +++ b/usrp2/timing/time_compare.v @@ -14,10 +14,34 @@ module time_compare wire tick_match = (time_now[31:0] == trigger_time[31:0]); wire tick_late = (time_now[31:0] > trigger_time[31:0]); - +/* assign now = sec_match & tick_match; assign late = sec_late | (sec_match & tick_late); assign early = ~now & ~late; +*/ + + /* + assign now = (time_now == trigger_time); + assign late = (time_now > trigger_time); + assign early = (time_now < trigger_time); + */ + + // Compare fewer bits instead of 64 to speed up logic + // Unused bits are not significant + // Top bit of seconds would put us in year 2038, long after + // the warranty has run out :) + // Top 5 bits of ticks are always zero for clocks less than 134MHz + // "late" can drop bottom few bits of ticks, and just delay signaling + // of late. + // "now" cannot drop those bits, it needs to be exact. + + wire [57:0] short_now = {time_now[62:32],time_now[26:0]}; + wire [57:0] short_trig = {trigger_time[62:32],trigger_time[26:0]}; + + assign now = (short_now == short_trig); + assign late = (short_now[57:5] > short_trig[57:5]); + assign early = (short_now < short_trig); + assign too_early = (trigger_time[63:32] > (time_now[63:32] + 4)); // Don't wait too long endmodule // time_compare diff --git a/usrp2/vrt/vita_tx_control.v b/usrp2/vrt/vita_tx_control.v index 967847d36..ddcb6a2d2 100644 --- a/usrp2/vrt/vita_tx_control.v +++ b/usrp2/vrt/vita_tx_control.v @@ -38,9 +38,8 @@ module vita_tx_control // FIXME ignore too_early for now for timing reasons assign too_early = 0; time_compare - time_compare (.time_now(vita_time), .trigger_time(send_time), .now(now), .early(early), - .late(late), .too_early()); -// .late(late), .too_early(too_early)); + time_compare (.time_now(vita_time), .trigger_time(send_time), + .now(now), .early(early), .late(late), .too_early()); localparam IBS_IDLE = 0; localparam IBS_RUN = 1; // FIXME do we need this? -- cgit v1.2.3 From 7383ff07f482f8dcf37f2c1464f6a29d1b0bdf0b Mon Sep 17 00:00:00 2001 From: Matt Ettus Date: Thu, 18 Nov 2010 18:39:24 -0800 Subject: fix problem with consecutive timed packets on tx --- usrp2/vrt/vita_tx_deframer.v | 2 -- 1 file changed, 2 deletions(-) diff --git a/usrp2/vrt/vita_tx_deframer.v b/usrp2/vrt/vita_tx_deframer.v index 7697be367..eb39feaec 100644 --- a/usrp2/vrt/vita_tx_deframer.v +++ b/usrp2/vrt/vita_tx_deframer.v @@ -201,8 +201,6 @@ module vita_tx_deframer send_time[63:32] <= data_i[31:0]; VITA_TICS2 : send_time[31:0] <= data_i[31:0]; - VITA_STORE, VITA_HEADER : - send_time[63:0] <= 64'd0; endcase // case (vita_state) always @(posedge clk) -- cgit v1.2.3 From e7fbdbce6809698e10a9d6e18326ab572a280811 Mon Sep 17 00:00:00 2001 From: Matt Ettus Date: Thu, 18 Nov 2010 19:13:42 -0800 Subject: get rid of extraneous U messages when we actually had an ACK --- usrp2/vrt/vita_tx_chain.v | 6 +++--- usrp2/vrt/vita_tx_control.v | 11 +++++++---- 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/usrp2/vrt/vita_tx_chain.v b/usrp2/vrt/vita_tx_chain.v index 21e826f1c..264b6e98a 100644 --- a/usrp2/vrt/vita_tx_chain.v +++ b/usrp2/vrt/vita_tx_chain.v @@ -31,7 +31,7 @@ module vita_tx_chain wire clear_seqnum; wire [31:0] current_seqnum; - assign underrun = error & ~(error_code == 1); + assign underrun = error; assign message = error_code; setting_reg #(.my_addr(BASE_CTRL+1)) sr @@ -56,7 +56,7 @@ module vita_tx_chain vita_tx_control #(.BASE(BASE_CTRL), .WIDTH(32*MAXCHAN)) vita_tx_control (.clk(clk), .reset(reset), .clear(clear_vita), .set_stb(set_stb),.set_addr(set_addr),.set_data(set_data), - .vita_time(vita_time),.error(error),.error_code(error_code), + .vita_time(vita_time), .error(error), .ack(ack), .error_code(error_code), .sample_fifo_i(tx1_data), .sample_fifo_src_rdy_i(tx1_src_rdy), .sample_fifo_dst_rdy_o(tx1_dst_rdy), .sample(sample_tx), .run(run), .strobe(strobe_tx), .packet_consumed(packet_consumed), .debug(debug_vtc) ); @@ -84,7 +84,7 @@ module vita_tx_chain gen_context_pkt #(.PROT_ENG_FLAGS(PROT_ENG_FLAGS)) gen_tx_err_pkt (.clk(clk), .reset(reset), .clear(clear_vita), - .trigger(error & (REPORT_ERROR==1)), .sent(), + .trigger((error|ack) & (REPORT_ERROR==1)), .sent(), .streamid(streamid), .vita_time(vita_time), .message(message), .seqnum0(current_seqnum), .seqnum1(32'd0), .data_o(err_data_int), .src_rdy_o(err_src_rdy_int), .dst_rdy_i(err_dst_rdy_int)); diff --git a/usrp2/vrt/vita_tx_control.v b/usrp2/vrt/vita_tx_control.v index ddcb6a2d2..20ad6b995 100644 --- a/usrp2/vrt/vita_tx_control.v +++ b/usrp2/vrt/vita_tx_control.v @@ -6,7 +6,7 @@ module vita_tx_control input set_stb, input [7:0] set_addr, input [31:0] set_data, input [63:0] vita_time, - output error, + output error, output ack, output reg [31:0] error_code, output reg packet_consumed, @@ -65,13 +65,14 @@ module vita_tx_control wire policy_wait = error_policy[0]; wire policy_next_packet = error_policy[1]; wire policy_next_burst = error_policy[2]; - reg send_error; + reg send_error, send_ack; always @(posedge clk) if(reset | clear) begin ibs_state <= IBS_IDLE; send_error <= 0; + send_ack <= 0; error_code <= 0; end else @@ -106,7 +107,7 @@ module vita_tx_control begin ibs_state <= IBS_ERROR_DONE; // Not really an error error_code <= CODE_EOB_ACK; - send_error <= 1; + send_ack <= 1; end else ibs_state <= IBS_CONT_BURST; @@ -146,6 +147,7 @@ module vita_tx_control IBS_ERROR_DONE : begin send_error <= 0; + send_ack <= 0; ibs_state <= IBS_IDLE; end @@ -156,6 +158,7 @@ module vita_tx_control assign sample_fifo_dst_rdy_o = (ibs_state == IBS_ERROR) | (strobe & (ibs_state == IBS_RUN)); // FIXME also cleanout assign run = (ibs_state == IBS_RUN) | (ibs_state == IBS_CONT_BURST); assign error = send_error; + assign ack = send_ack; always @(posedge clk) if(reset | clear) @@ -163,7 +166,7 @@ module vita_tx_control else packet_consumed <= eop & sample_fifo_src_rdy_i & sample_fifo_dst_rdy_o; - assign debug = { { now,early,late,too_early,eop,eob,sob,send_at }, + assign debug = { { now,early,late,ack,eop,eob,sob,send_at }, { sample_fifo_src_rdy_i, sample_fifo_dst_rdy_o, strobe, run, error, ibs_state[2:0] }, { 8'b0 }, { 8'b0 } }; -- cgit v1.2.3 From 18076097477a5d6f26ab69a23c4d27062490aeb0 Mon Sep 17 00:00:00 2001 From: Matt Ettus Date: Fri, 19 Nov 2010 11:53:58 -0800 Subject: modernize the testbench --- usrp2/vrt/vita_tx_tb.v | 48 ++++++++++++++++++++++++++++++------------------ 1 file changed, 30 insertions(+), 18 deletions(-) diff --git a/usrp2/vrt/vita_tx_tb.v b/usrp2/vrt/vita_tx_tb.v index 0223d6850..a118ffd4e 100644 --- a/usrp2/vrt/vita_tx_tb.v +++ b/usrp2/vrt/vita_tx_tb.v @@ -33,7 +33,7 @@ module vita_tx_tb; wire [31:0] set_data_dsp; wire sample_dst_rdy, sample_src_rdy; - wire [64+4+(MAXCHAN*32)-1:0] sample_data_o, sample_data_tx; + wire [5+64+16+(MAXCHAN*32)-1:0] sample_data_o, sample_data_tx; time_64bit #(.TICKS_PER_SEC(100000000), .BASE(0)) time_64bit (.clk(clk), .rst(reset), @@ -49,8 +49,8 @@ module vita_tx_tb; .datain(data_o), .src_rdy_i(src_rdy), .dst_rdy_o(dst_rdy), .dataout(data_tx), .src_rdy_o(src_rdy_tx), .dst_rdy_i(dst_rdy_tx)); - vita_tx_deframer #(.BASE(16), .MAXCHAN(MAXCHAN)) vita_tx_deframer - (.clk(clk), .reset(reset), .clear(0), + vita_tx_deframer #(.BASE(16), .MAXCHAN(MAXCHAN), .USE_TRANS_HEADER(0)) vita_tx_deframer + (.clk(clk), .reset(reset), .clear(0), .clear_seqnum(0), .set_stb(set_stb), .set_addr(set_addr), .set_data(set_data), .data_i(data_tx), .dst_rdy_o(dst_rdy_tx), .src_rdy_i(src_rdy_tx), .sample_fifo_o(sample_data_tx), @@ -60,7 +60,7 @@ module vita_tx_tb; vita_tx_control #(.BASE(16), .WIDTH(MAXCHAN*32)) vita_tx_control (.clk(clk), .reset(reset), .clear(0), .set_stb(set_stb), .set_addr(set_addr), .set_data(set_data), - .vita_time(vita_time), .underrun(underrun), + .vita_time(vita_time), .error(underrun), .error_code(), .sample_fifo_i(sample_data_tx), .sample_fifo_dst_rdy_o(sample_dst_rdy_tx), .sample_fifo_src_rdy_i(sample_src_rdy_tx), .sample(sample_tx), .run(run_tx), .strobe(strobe_tx)); @@ -92,35 +92,47 @@ module vita_tx_tb; write_setting(7,8); // Samples per VITA packet write_setting(8,NUMCHAN); // Samples per VITA packet #10000; - queue_vita_packets(32'h300, 106, 32'hF00D_1234, 32'h55AA_AA55); - //queue_vita_packets(32'h300, 6, 32'hF00D_1234, 32'h0); - queue_vita_packets(32'h600, 9, 32'h9876_ABCD, 32'h0); - + queue_vita_packets(0, 32'h300, 5, 32'h0000_1000, 32'h0, 4'h0, 1, 0, 1); + queue_vita_packets(0, 32'h0, 5, 32'h0000_2000, 32'h0, 4'h1, 0, 0, 0); + queue_vita_packets(0, 32'h0, 5, 32'h0000_3000, 32'h0, 4'h2, 0, 0, 0); + + queue_vita_packets(0, 32'h400, 3, 32'h0000_4000, 32'h0, 4'h3, 1, 0, 1); + queue_vita_packets(0, 32'h0, 3, 32'h0000_5000, 32'h0, 4'h4, 0, 0, 0); + queue_vita_packets(0, 32'h0, 3, 32'h0000_6000, 32'h0, 4'h5, 0, 1, 0); + #300000 $finish; end task queue_vita_packets; + input [31:0] send_secs; input [31:0] sendtime; input [15:0] samples; input [15:0] word; input [31:0] trailer; + input [3:0] seqnum; + input sob; + input eob; + input sendat; reg [15:0] i; begin + src_rdy <= 0; @(posedge clk); src_rdy <= 1; - data_o <= {4'b0001,4'h1,1'b0,|trailer,2'h3,8'hF0,(16'd5+samples+|trailer)}; // header - @(posedge clk); - data_o <= {4'b0000,32'h0}; // streamid - @(posedge clk); - data_o <= {4'b0000,32'h0}; // SECS - @(posedge clk); - data_o <= {4'b0000,32'h0}; // TICS + data_o <= {4'b0001,4'h0,1'b0,|trailer,sob,eob,{2{sendat}},1'b0,sendat,seqnum,(16'd1+samples+|trailer+sendat+sendat+sendat)}; // header @(posedge clk); - data_o <= {4'b0000,sendtime}; // TICS - @(posedge clk); - + //data_o <= {4'b0000,32'h0}; // streamid + //@(posedge clk); + if(sendat) + begin + data_o <= {4'b0000,send_secs}; // SECS + @(posedge clk); + data_o <= {4'b0000,32'h0}; // TICS + @(posedge clk); + data_o <= {4'b0000,sendtime}; // TICS + @(posedge clk); + end for(i=0;i Date: Sat, 20 Nov 2010 13:03:23 -0800 Subject: shouldn't be executable --- usrp2/top/u2_rev3/u2_core.v | 0 1 file changed, 0 insertions(+), 0 deletions(-) mode change 100755 => 100644 usrp2/top/u2_rev3/u2_core.v diff --git a/usrp2/top/u2_rev3/u2_core.v b/usrp2/top/u2_rev3/u2_core.v old mode 100755 new mode 100644 -- cgit v1.2.3 From 503a69dd734be4502078b32d8aca027b0c56368f Mon Sep 17 00:00:00 2001 From: Matt Ettus Date: Sun, 21 Nov 2010 19:04:59 -0800 Subject: no need for second sequence number anymore. Each dsp tx chain generates its own flow control packets now. --- usrp2/vrt/gen_context_pkt.v | 15 ++++++--------- usrp2/vrt/vita_tx_chain.v | 4 ++-- 2 files changed, 8 insertions(+), 11 deletions(-) diff --git a/usrp2/vrt/gen_context_pkt.v b/usrp2/vrt/gen_context_pkt.v index efc170743..bf83aeae5 100644 --- a/usrp2/vrt/gen_context_pkt.v +++ b/usrp2/vrt/gen_context_pkt.v @@ -7,8 +7,7 @@ module gen_context_pkt input [31:0] streamid, input [63:0] vita_time, input [31:0] message, - input [31:0] seqnum0, - input [31:0] seqnum1, + input [31:0] seqnum, output [35:0] data_o, output src_rdy_o, input dst_rdy_i); localparam CTXT_IDLE = 0; @@ -19,9 +18,8 @@ module gen_context_pkt localparam CTXT_TICS = 5; localparam CTXT_TICS2 = 6; localparam CTXT_MESSAGE = 7; - localparam CTXT_FLOWCTRL0 = 8; - localparam CTXT_FLOWCTRL1 = 9; - localparam CTXT_DONE = 10; + localparam CTXT_FLOWCTRL = 8; + localparam CTXT_DONE = 9; reg [33:0] data_int; wire src_rdy_int, dst_rdy_int; @@ -36,7 +34,7 @@ module gen_context_pkt else if(trigger) stored_message <= message; - else if(ctxt_state == CTXT_FLOWCTRL1) + else if(ctxt_state == CTXT_DONE) stored_message <= 0; // Don't want to clear most of this to avoid getting stuck with a half packet in the pipe @@ -73,14 +71,13 @@ module gen_context_pkt always @* case(ctxt_state) CTXT_PROT_ENG : data_int <= { 2'b01, 16'd1, 16'd32 }; - CTXT_HEADER : data_int <= { 1'b0, (PROT_ENG_FLAGS ? 1'b0 : 1'b1), 12'b010100001101, seqno, 16'd8 }; + CTXT_HEADER : data_int <= { 1'b0, (PROT_ENG_FLAGS ? 1'b0 : 1'b1), 12'b010100001101, seqno, 16'd7 }; CTXT_STREAMID : data_int <= { 2'b00, streamid }; CTXT_SECS : data_int <= { 2'b00, err_time[63:32] }; CTXT_TICS : data_int <= { 2'b00, 32'd0 }; CTXT_TICS2 : data_int <= { 2'b00, err_time[31:0] }; CTXT_MESSAGE : data_int <= { 2'b00, message }; - CTXT_FLOWCTRL0 : data_int <= { 2'b00, seqnum0 }; - CTXT_FLOWCTRL1 : data_int <= { 2'b10, seqnum1 }; + CTXT_FLOWCTRL : data_int <= { 2'b10, seqnum }; default : data_int <= {2'b00, 32'b00}; endcase // case (ctxt_state) diff --git a/usrp2/vrt/vita_tx_chain.v b/usrp2/vrt/vita_tx_chain.v index 264b6e98a..2ec78189b 100644 --- a/usrp2/vrt/vita_tx_chain.v +++ b/usrp2/vrt/vita_tx_chain.v @@ -75,7 +75,7 @@ module vita_tx_chain (.clk(clk), .reset(reset), .clear(clear_vita), .trigger(trigger & (DO_FLOW_CONTROL==1)), .sent(), .streamid(streamid), .vita_time(vita_time), .message(32'd0), - .seqnum0(current_seqnum), .seqnum1(32'd0), + .seqnum(current_seqnum), .data_o(flow_data), .src_rdy_o(flow_src_rdy), .dst_rdy_i(flow_dst_rdy)); trigger_context_pkt #(.BASE(BASE_CTRL)) trigger_context_pkt (.clk(clk), .reset(reset), .clear(clear_vita), @@ -86,7 +86,7 @@ module vita_tx_chain (.clk(clk), .reset(reset), .clear(clear_vita), .trigger((error|ack) & (REPORT_ERROR==1)), .sent(), .streamid(streamid), .vita_time(vita_time), .message(message), - .seqnum0(current_seqnum), .seqnum1(32'd0), + .seqnum(current_seqnum), .data_o(err_data_int), .src_rdy_o(err_src_rdy_int), .dst_rdy_i(err_dst_rdy_int)); assign debug = debug_vtc | debug_vtd; -- cgit v1.2.3