From: hadeshyp Date: Wed, 26 Mar 2008 16:25:11 +0000 (+0000) Subject: added resync to med_tlk X-Git-Tag: oldGBE~580 X-Git-Url: https://jspc29.x-matter.uni-frankfurt.de/git/?a=commitdiff_plain;h=6b1409849ffe673b3de4dec4beab4b573ca5c8af;p=trbnet.git added resync to med_tlk --- diff --git a/trb_net16_api_base.vhd b/trb_net16_api_base.vhd index 3e70ffa..abf7201 100644 --- a/trb_net16_api_base.vhd +++ b/trb_net16_api_base.vhd @@ -665,7 +665,7 @@ begin when sa_WRONG_ADDR => fifo_to_apl_read <= not fifo_to_apl_empty; throw_away <= '1'; - if reg_APL_TYP_OUT = TYPE_TRM and reg_APL_PACKET_NUM_OUT = "11" then + if saved_fifo_to_apl_packet_type = TYPE_TRM and fifo_to_apl_PACKET_NUM_OUT = "11" then next_state_to_apl <= sa_INACTIVE; slave_end <= '1'; end if; diff --git a/trb_net16_endpoint_0_trg_1_api.vhd b/trb_net16_endpoint_0_trg_1_api.vhd index 51cee83..45cb877 100644 --- a/trb_net16_endpoint_0_trg_1_api.vhd +++ b/trb_net16_endpoint_0_trg_1_api.vhd @@ -46,7 +46,8 @@ entity trb_net16_endpoint_0_trg_1_api is MED_PACKET_NUM_IN: in std_logic_vector (c_NUM_WIDTH-1 downto 0); MED_READ_OUT: out std_logic; -- buffer reads a word from media MED_ERROR_IN: in std_logic_vector (2 downto 0); -- Status bits - + MED_STAT_OP : in std_logic_vector (15 downto 0); + MED_CTRL_OP : out std_logic_vector (15 downto 0); -- APL Transmitter port APL_DATA_IN: in std_logic_vector (c_DATA_WIDTH-1 downto 0); -- Data word "application to network" @@ -145,9 +146,7 @@ component trb_net16_iobuf is INT_INIT_DATA_IN: in std_logic_vector (c_DATA_WIDTH-1 downto 0); -- Data word INT_INIT_PACKET_NUM_IN: in std_logic_vector (c_NUM_WIDTH-1 downto 0); INT_INIT_READ_OUT: out std_logic; - - INT_REPLY_HEADER_IN: in std_logic; -- Concentrator kindly asks to resend the last - -- header (only for the reply path) + INT_REPLY_DATAREADY_OUT: out std_logic; INT_REPLY_DATA_OUT: out std_logic_vector (c_DATA_WIDTH-1 downto 0); -- Data word INT_REPLY_PACKET_NUM_OUT:out std_logic_vector (c_NUM_WIDTH-1 downto 0); @@ -363,6 +362,9 @@ signal buf_api_stat_fifo_to_apl, buf_api_stat_fifo_to_int : std_logic_vector (31 begin + MED_CTRL_OP(15) <= MED_STAT_OP(15); + MED_CTRL_OP(14 downto 0) <= (others => '0'); + --Connections for data channel genmuxcon : for i in 0 to 2**(c_MUX_WIDTH-1)-1 generate gendat: if i = DAT_CHANNEL generate @@ -600,8 +602,7 @@ IOBUF: trb_net16_iobuf INT_INIT_DATA_IN => apl_to_buf_INIT_DATA, INT_INIT_PACKET_NUM_IN => apl_to_buf_INIT_PACKET_NUM, INT_INIT_READ_OUT => apl_to_buf_INIT_READ, - - INT_REPLY_HEADER_IN => '0', + INT_REPLY_DATAREADY_OUT => buf_to_apl_REPLY_DATAREADY, INT_REPLY_DATA_OUT => buf_to_apl_REPLY_DATA, INT_REPLY_PACKET_NUM_OUT=> buf_to_apl_REPLY_PACKET_NUM, diff --git a/trb_net16_hub_base.vhd b/trb_net16_hub_base.vhd index 6d8a98f..2235e0a 100644 --- a/trb_net16_hub_base.vhd +++ b/trb_net16_hub_base.vhd @@ -48,6 +48,8 @@ entity trb_net16_hub_base is MED_PACKET_NUM_IN : in std_logic_vector (MII_NUMBER*c_NUM_WIDTH-1 downto 0); MED_READ_OUT : out std_logic_vector (MII_NUMBER-1 downto 0); -- buffer reads a word from media MED_ERROR_IN : in std_logic_vector (MII_NUMBER*3-1 downto 0); + MED_STAT_OP : in std_logic_vector (MII_NUMBER*16-1 downto 0); + MED_CTRL_OP : out std_logic_vector (MII_NUMBER*16-1 downto 0); --API: interfaces APL_DATA_IN : in std_logic_vector (VAL(API_NUMBER*c_DATA_WIDTH) downto 0); APL_PACKET_NUM_IN : in std_logic_vector (VAL(API_NUMBER*c_NUM_WIDTH) downto 0); @@ -166,7 +168,10 @@ architecture trb_net16_hub_base_arch of trb_net16_hub_base is signal IOBUF_IBUF_BUFFER : std_logic_vector ((MII_NUMBER*2**(c_MUX_WIDTH-1) + API_NUMBER + TRG_NUMBER)*32-1 downto 0); signal IOBUF_CTRL_GEN : std_logic_vector ((MII_NUMBER*2**(c_MUX_WIDTH-1) + API_NUMBER + TRG_NUMBER)*32-1 downto 0); signal IOBUF_CTRL_IBUF_BUFFER : std_logic_vector ((MII_NUMBER*2**(c_MUX_WIDTH-1) + API_NUMBER + TRG_NUMBER)*32-1 downto 0); - + signal resync : std_logic_vector(MII_NUMBER-1 downto 0); + signal combined_resync : std_logic; + signal reg_resync : std_logic; + signal resync_counter : std_logic_vector(7 downto 0); component trb_net16_hub_logic is generic ( @@ -280,7 +285,6 @@ end component; INT_INIT_DATA_IN: in std_logic_vector (c_DATA_WIDTH-1 downto 0); -- Data word INT_INIT_PACKET_NUM_IN: in std_logic_vector (c_NUM_WIDTH-1 downto 0); INT_INIT_READ_OUT: out std_logic; - INT_REPLY_HEADER_IN: in std_logic; INT_REPLY_DATAREADY_OUT: out std_logic; INT_REPLY_DATA_OUT: out std_logic_vector (c_DATA_WIDTH-1 downto 0); -- Data word INT_REPLY_PACKET_NUM_OUT:out std_logic_vector (c_NUM_WIDTH-1 downto 0); @@ -467,12 +471,35 @@ end component; MED_REPLY_READ_OUT: out std_logic ); end component; - + begin ---set unused signals - +--generate media resync + gen_resync : for i in 0 to MII_NUMBER-1 generate + resync(i) <= MED_STAT_OP(i*16+15); + MED_CTRL_OP(15+i*16) <= reg_resync; + end generate; + combined_resync <= or_all(resync); + + process(CLK) + begin + if rising_edge(CLK) then + if RESET = '1' then + resync_counter <= (others => '0'); + reg_resync <= '0'; + else + if combined_resync = '1' then + reg_resync <= '1'; + elsif resync_counter = x"FE" then + reg_resync <= '0'; + end if; + if reg_resync = '1' then + resync_counter <= resync_counter + 1; + end if; + end if; + end if; + end process; --generate multiplexers @@ -558,8 +585,7 @@ begin INT_INIT_DATA_IN => hub_to_buf_INIT_DATA((i+1)*c_DATA_WIDTH-1 downto i*c_DATA_WIDTH), INT_INIT_PACKET_NUM_IN => hub_to_buf_INIT_PACKET_NUM((i+1)*c_NUM_WIDTH-1 downto i*c_NUM_WIDTH), INT_INIT_READ_OUT => hub_to_buf_INIT_READ(i), - - INT_REPLY_HEADER_IN => buf_to_hub_REPLY_SEND_HEADER(i), + INT_REPLY_DATAREADY_OUT => buf_to_hub_REPLY_DATAREADY(i), INT_REPLY_DATA_OUT => buf_to_hub_REPLY_DATA((i+1)*c_DATA_WIDTH-1 downto i*c_DATA_WIDTH), INT_REPLY_PACKET_NUM_OUT=> buf_to_hub_REPLY_PACKET_NUM((i+1)*c_NUM_WIDTH-1 downto i*c_NUM_WIDTH), diff --git a/trb_net16_hub_logic.vhd b/trb_net16_hub_logic.vhd index bc4093e..6dbf20f 100644 --- a/trb_net16_hub_logic.vhd +++ b/trb_net16_hub_logic.vhd @@ -84,7 +84,22 @@ architecture trb_net16_hub_logic_arch of trb_net16_hub_logic is CTRL: in STD_LOGIC_VECTOR (31 downto 0) ); end component; - + + component trb_net_ram is + generic( + depth : integer := 4; + width : integer := 16 + ); + port( + CLK : in std_logic; + wr : in std_logic; + ain : in std_logic_vector(depth-1 downto 0); + din : in std_logic_vector(width-1 downto 0); + aout : in std_logic_vector(depth-1 downto 0); + dout : out std_logic_vector(width-1 downto 0) + ); + end component; + --signals init_pool signal INIT_POOL_DATAREADY : std_logic; signal INIT_POOL_READ : std_logic; @@ -107,6 +122,13 @@ architecture trb_net16_hub_logic_arch of trb_net16_hub_logic is signal REPLY_combined_trm_F1, REPLY_combined_trm_F2 : std_logic_vector(c_DATA_WIDTH-1 downto 0); signal REPLY_MUX_real_reading : std_logic; signal real_activepoints : std_logic_vector(POINT_NUMBER-1 downto 0); + + signal REPLY_reading_hdr : std_logic_vector(POINT_NUMBER-1 downto 0); + signal next_REPLY_reading_hdr : std_logic_vector(POINT_NUMBER-1 downto 0); + signal current_REPLY_reading_hdr : std_logic_vector(POINT_NUMBER-1 downto 0); + signal last_header_addr : std_logic_vector(1 downto 0); + signal last_header_data : std_logic_vector(POINT_NUMBER*c_DATA_WIDTH-1 downto 0); + signal reading_last_hdr : std_logic_vector(POINT_NUMBER-1 downto 0); --general signals signal locked, next_locked : std_logic; @@ -346,6 +368,50 @@ STAT_ERRORBITS <= REPLY_combined_trm_F1 & REPLY_combined_trm_F2; end if; end process; +--REPLY reading and saving HDR +---------------------------------- + gen_reading_hdr : for i in 0 to POINT_NUMBER-1 generate + process(REPLY_reading_hdr, REPLY_PACKET_NUM_IN, REPLY_DATA_IN) + begin + next_REPLY_reading_hdr(i) <= REPLY_reading_hdr(i); + if REPLY_PACKET_NUM_IN((i+1)*c_NUM_WIDTH-1 downto i*c_NUM_WIDTH) = "11" then + next_REPLY_reading_hdr(i) <= '0'; + elsif REPLY_DATA_IN(i*c_DATA_WIDTH+2 downto i*c_DATA_WIDTH) = TYPE_HDR + and REPLY_PACKET_NUM_IN((i+1)*c_NUM_WIDTH-1 downto i*c_NUM_WIDTH) = "00" then + next_REPLY_reading_hdr(i) <= '1'; + end if; + end process; + end generate; + + process(CLK) + begin + if rising_edge(CLK) then + if RESET = '1' then + REPLY_reading_hdr <= (others => '0'); + else + REPLY_reading_hdr <= next_REPLY_reading_hdr; + end if; + end if; + end process; + current_REPLY_reading_hdr <= next_REPLY_reading_hdr or REPLY_reading_hdr; + + gen_saving_hdr : for i in 0 to POINT_NUMBER-1 generate + last_HDR_RAM : trb_net_ram + generic map( + depth => 2, + width => 16 + ) + port map( + CLK => CLK, + wr => REPLY_reading_hdr(i), + ain => REPLY_PACKET_NUM_IN((i+1)*c_NUM_WIDTH-1 downto i*c_NUM_WIDTH), + din => REPLY_DATA_IN((i+1)*c_DATA_WIDTH-1 downto i*c_DATA_WIDTH), + aout => last_header_addr(1 downto 0), + dout => last_header_data((i+1)*c_DATA_WIDTH-1 downto i*c_DATA_WIDTH) + ); + end generate; + last_header_addr <= packet_counter; + --REPLY reading and merging TRM @@ -491,6 +557,11 @@ STAT_ERRORBITS <= REPLY_combined_trm_F1 & REPLY_combined_trm_F2; -- we have to care to read multiples of four packets from every point -- release is currently done after first packet of TRM + -- when switching from one point to another some data was already read from, we have + -- to set reading_last_hdr instead of reading_from_point + +reading_last_hdr <= (others => '0'); + gen_reply_point_lock : process(reply_point_lock, reading_from_point, comb_REPLY_muxed_PACKET_NUM, REPLY_MUX_reading, REPLY_DATAREADY_IN, comb_REPLY_muxed_DATA) begin @@ -532,7 +603,8 @@ STAT_ERRORBITS <= REPLY_combined_trm_F1 & REPLY_combined_trm_F2; begin tmp_data := '0'; gen_data_mux : for j in 0 to POINT_NUMBER-1 loop - tmp_data := tmp_data or (REPLY_DATA_IN(j*c_DATA_WIDTH+i) and REPLY_MUX_reading(j)); + tmp_data := tmp_data or (REPLY_DATA_IN(j*c_DATA_WIDTH+i) and REPLY_MUX_reading(j)) + or (last_header_data(j*c_DATA_WIDTH+i) and reading_last_hdr(j)); end loop; comb_REPLY_muxed_DATA(i) <= tmp_data; end process; diff --git a/trb_net16_ibuf.vhd b/trb_net16_ibuf.vhd index 493eee5..9a6db0f 100644 --- a/trb_net16_ibuf.vhd +++ b/trb_net16_ibuf.vhd @@ -38,7 +38,6 @@ entity trb_net16_ibuf is INT_REPLY_PACKET_NUM_OUT: out std_logic_vector(c_NUM_WIDTH-1 downto 0); INT_REPLY_DATAREADY_OUT : out std_logic; INT_REPLY_READ_IN : in std_logic; - INT_REPLY_HEADER_IN : in std_logic; INT_ERROR_OUT : out std_logic_vector (2 downto 0); -- Status and control port STAT_BUFFER : out std_logic_vector (31 downto 0) @@ -93,26 +92,8 @@ architecture trb_net16_ibuf_arch of trb_net16_ibuf is ); end component; - component trb_net_ram is - generic( - depth : integer := 4; - width : integer := 16 - ); - port( - CLK : in std_logic; - wr : in std_logic; - ain : in std_logic_vector(depth-1 downto 0); - din : in std_logic_vector(width-1 downto 0); - aout : in std_logic_vector(depth-1 downto 0); - dout : out std_logic_vector(width-1 downto 0) - ); - end component; + - signal last_header_addr : std_logic_vector(1 downto 0); - signal reg_last_header_addr : std_logic_vector(1 downto 0); - signal last_header_data : std_logic_vector(15 downto 0); - signal reg_INT_REPLY_HEADER_IN, next_reg_INT_REPLY_HEADER_IN : std_logic; - signal sending_last_header, next_sending_last_header : std_logic; signal fifo_data_in : std_logic_vector(c_DATA_WIDTH-1 downto 0); signal fifo_data_out : std_logic_vector(c_DATA_WIDTH-1 downto 0); signal fifo_packet_num_in : std_logic_vector(c_NUM_WIDTH-1 downto 0); @@ -297,7 +278,7 @@ begin SYN_PACKET_NUM_OUT => INT_REPLY_PACKET_NUM_OUT, SYN_READ_IN => INT_REPLY_READ_IN ); - + process(CLK) begin if rising_edge(CLK) then @@ -320,9 +301,7 @@ begin process(fifo_data_out, fifo_packet_num_out, sbuf_init_free, fifo_empty, sbuf_reply_free, last_fifo_read, current_fifo_packet_type, - fifo_read_before, INT_INIT_READ_IN, INT_REPLY_READ_IN, - sending_last_header, last_header_addr, reg_INT_REPLY_HEADER_IN, - INT_REPLY_HEADER_IN, last_header_data, reg_last_header_addr) + fifo_read_before, INT_INIT_READ_IN, INT_REPLY_READ_IN) begin tmp_INT_DATA_OUT <= fifo_data_out; tmp_INT_PACKET_NUM_OUT <= fifo_packet_num_out; @@ -331,36 +310,17 @@ begin got_eob_init_out <= '0'; got_eob_reply_out <= '0'; throw_away <= '0'; - next_sending_last_header <= sending_last_header; - next_reg_INT_REPLY_HEADER_IN <= reg_INT_REPLY_HEADER_IN or INT_REPLY_HEADER_IN; + fifo_read <= not fifo_empty and not (fifo_read_before and not ((INT_INIT_READ_IN and not current_fifo_packet_type(3)) or (INT_REPLY_READ_IN and current_fifo_packet_type(3)) or throw_away)); - if reg_INT_REPLY_HEADER_IN = '1' and fifo_packet_num_out = "11" then - next_reg_INT_REPLY_HEADER_IN <= '0'; - fifo_read <= '0'; - next_sending_last_header <= '1'; - end if; - - if (fifo_read_before = '1' and (current_fifo_packet_type(2 downto 0) /= TYPE_EOB)) then tmp_INT_INIT_DATAREADY_OUT <= sbuf_init_free and not current_fifo_packet_type(3); tmp_INT_REPLY_DATAREADY_OUT <= sbuf_reply_free and current_fifo_packet_type(3); end if; - if sending_last_header = '1' then - tmp_INT_REPLY_DATAREADY_OUT <= '1'; - tmp_INT_DATA_OUT <= last_header_data; - tmp_INT_PACKET_NUM_OUT <= reg_last_header_addr; - if tmp_INT_REPLY_DATAREADY_OUT = '1' and sbuf_REPLY_free = '1' then - if last_header_addr = "11" then - next_sending_last_header <= '0'; - end if; - end if; - end if; - if last_fifo_read = '1' then if current_fifo_packet_type(2 downto 0) = TYPE_EOB then throw_away <= '1'; @@ -385,35 +345,7 @@ begin end if; end if; end process; - - process(CLK) - begin - if rising_edge(CLK) then - if RESET = '1' then - last_header_addr <= "00"; - elsif sending_last_header = '1' and sbuf_REPLY_free = '1' then - last_header_addr <= last_header_addr + 1; - end if; - end if; - end process; - - process(CLK) - begin - if rising_edge(CLK) then - if RESET = '1' then - reg_INT_REPLY_HEADER_IN <= '0'; - reg_last_header_addr <= "00"; --- last_header_addr <= "00"; - sending_last_header <= '0'; - else - reg_INT_REPLY_HEADER_IN <= next_reg_INT_REPLY_HEADER_IN; - reg_last_header_addr <= last_header_addr; --- last_header_addr <= next_last_header_addr; - sending_last_header <= next_sending_last_header; - end if; - end if; - end process; - + process(CLK) begin if rising_edge(CLK) then @@ -430,7 +362,6 @@ begin end if; end process; - gen_ack1 : if USE_ACKNOWLEDGE = 1 generate reg_locked: process(CLK) begin @@ -446,22 +377,7 @@ begin end process; end generate; ---saving last HDR - last_HDR_RAM : trb_net_ram - generic map( - depth => 2, - width => 16 - ) - port map( - CLK => CLK, - wr => reading_header, - ain => fifo_packet_num_out, - din => fifo_data_out, - aout => last_header_addr, - dout => last_header_data - ); - reading_header <= '1' when (current_fifo_packet_type = TYPE_HDR and fifo_empty = '0') else '0'; diff --git a/trb_net16_iobuf.vhd b/trb_net16_iobuf.vhd index 8147820..1cdfa88 100644 --- a/trb_net16_iobuf.vhd +++ b/trb_net16_iobuf.vhd @@ -58,8 +58,6 @@ entity trb_net16_iobuf is INT_INIT_PACKET_NUM_IN: in std_logic_vector (c_NUM_WIDTH-1 downto 0); INT_INIT_READ_OUT: out std_logic; - INT_REPLY_HEADER_IN: in std_logic; -- Concentrator kindly asks to resend the last - -- header (only for the reply path) INT_REPLY_DATAREADY_OUT: out std_logic; INT_REPLY_DATA_OUT: out std_logic_vector (c_DATA_WIDTH-1 downto 0); INT_REPLY_PACKET_NUM_OUT:out std_logic_vector (c_NUM_WIDTH-1 downto 0); @@ -153,7 +151,6 @@ architecture trb_net16_iobuf_arch of trb_net16_iobuf is INT_REPLY_PACKET_NUM_OUT: out std_logic_vector(c_NUM_WIDTH-1 downto 0); INT_REPLY_DATAREADY_OUT : out std_logic; INT_REPLY_READ_IN : in std_logic; - INT_REPLY_HEADER_IN : in std_logic; INT_ERROR_OUT : out std_logic_vector (2 downto 0); -- Status and control port STAT_BUFFER : out std_logic_vector (31 downto 0) @@ -227,7 +224,6 @@ begin INT_REPLY_DATA_OUT => INT_REPLY_DATA_OUT, INT_REPLY_PACKET_NUM_OUT => INT_REPLY_PACKET_NUM_OUT, INT_REPLY_READ_IN => INT_REPLY_READ_IN, - INT_REPLY_HEADER_IN => INT_REPLY_HEADER_IN, INT_ERROR_OUT => IBUF_error, STAT_BUFFER(31 downto 0) => IBUF_stat_buffer ); diff --git a/trb_net16_med_tlk.vhd b/trb_net16_med_tlk.vhd index fc79df1..22ad1ad 100644 --- a/trb_net16_med_tlk.vhd +++ b/trb_net16_med_tlk.vhd @@ -35,7 +35,9 @@ entity trb_net16_med_tlk is MED_DATA_OUT : out std_logic_vector (15 downto 0); MED_PACKET_NUM_OUT : out std_logic_vector (1 downto 0); MED_ERROR_OUT : out std_logic_vector (2 downto 0); - STAT : out std_logic_vector (63 downto 0) + STAT : out std_logic_vector (63 downto 0); + STAT_OP : out std_logic_vector (15 downto 0); + CTRL_OP : in std_logic_vector (15 downto 0) --connect STAT(0) to LED ); end trb_net16_med_tlk; @@ -57,9 +59,7 @@ architecture trb_net16_med_tlk_arch of trb_net16_med_tlk is full_out: OUT std_logic; empty_out: OUT std_logic; fifostatus_out: OUT std_logic_vector(3 downto 0); --counter for 1/16th of fifo - valid_read_out: OUT std_logic; - almost_empty_out:OUT std_logic; - underflow_out: OUT std_logic + valid_read_out: OUT std_logic ); end component trb_net_fifo_16bit_bram_dualport; @@ -112,6 +112,9 @@ architecture trb_net16_med_tlk_arch of trb_net16_med_tlk is signal state_bits : std_logic_vector(2 downto 0); signal counter_reset : std_logic; + signal resync_counter : std_logic_vector(1 downto 0); + signal buf_STAT_OP : std_logic_vector(15 downto 0); + signal send_resync : std_logic; begin TLK_ENABLE <= not RESET; @@ -142,9 +145,7 @@ begin full_out => fifo_full_a, empty_out => fifo_empty_a, fifostatus_out => fifo_status_a, - almost_empty_out=> fifo_almost_empty_a, - valid_read_out => fifo_valid_read_a, - underflow_out => fifo_underflow_a + valid_read_out => fifo_valid_read_a ); fifo_wr_en_a <= ((reg_RX_DV and not reg_RX_ER) ) and rx_allow; @@ -155,23 +156,19 @@ begin -- fifo_rd_en_a <= not fifo_almost_empty_a and rx_allow; - buf_MED_DATAREADY_OUT <= fifo_valid_read_a and fifo_dout_a(16) and not fifo_underflow_a and rx_allow; + buf_MED_DATAREADY_OUT <= fifo_valid_read_a and fifo_dout_a(16) and rx_allow; MED_ERROR_OUT <= buf_MED_ERROR_OUT; + buf_STAT_OP(2 downto 0) <= buf_MED_ERROR_OUT; + STAT_OP <= buf_STAT_OP; fifo_reset <= internal_reset; - fifo_din_a <= fifo_almost_empty_a & (reg_RX_DV and not reg_RX_ER) & reg_RXD; + fifo_din_a <= '0' & (reg_RX_DV and not reg_RX_ER) & reg_RXD; process(CLK) begin if rising_edge(CLK) then - if internal_reset = '1' then - MED_PACKET_NUM_OUT <= "00"; - MED_DATAREADY_OUT <= '0'; - MED_DATA_OUT <= (others => '0'); - else - MED_PACKET_NUM_OUT <= buf_MED_PACKET_NUM_OUT; - MED_DATAREADY_OUT <= buf_MED_DATAREADY_OUT; - MED_DATA_OUT <= fifo_dout_a(15 downto 0); - end if; + MED_PACKET_NUM_OUT <= buf_MED_PACKET_NUM_OUT; + MED_DATAREADY_OUT <= buf_MED_DATAREADY_OUT; + MED_DATA_OUT <= fifo_dout_a(15 downto 0); end if; end process; @@ -187,8 +184,6 @@ begin STAT(9) <= fifo_full_m; -- STAT(10)<= last_fifo_rd_en_m; -- STAT(11)<= last_fifo_rd_en_a; - STAT(12)<= fifo_almost_empty_m; - STAT(13)<= fifo_almost_empty_a; STAT(14) <= reg_RX_DV; STAT(15) <= reg_RX_ER; STAT(31 downto 16) <= reg_RXD; @@ -201,8 +196,6 @@ begin STAT(50 downto 49) <= fifo_dout_m(17 downto 16); STAT(54 downto 51) <= fifo_din_a(3 downto 0); STAT(56 downto 55) <= fifo_din_a(17 downto 16); - STAT(57) <= fifo_underflow_a; - STAT(58) <= fifo_underflow_m; STAT(59) <= TLK_CLK_neg; STAT(60) <= fifo_wr_en_m; --STAT(63 downto 57) <= (others => '0'); @@ -211,15 +204,9 @@ begin process(TLK_RX_CLK) begin if rising_edge(TLK_RX_CLK) then - if internal_reset = '1' then - reg_RXD <= (others => '0'); - reg_RX_DV <= '0'; - reg_RX_ER <= '0'; - else - reg_RXD <= TLK_RXD; - reg_RX_DV <= TLK_RX_DV; - reg_RX_ER <= TLK_RX_ER; - end if; + reg_RXD <= TLK_RXD; + reg_RX_DV <= TLK_RX_DV; + reg_RX_ER <= TLK_RX_ER; end if; end process; @@ -234,9 +221,26 @@ begin end if; end process; ---common network packet number reset - reset_packet_num <= '0'; - +--Detect resync +--------------- + process(CLK) + begin + if rising_edge(CLK) then + buf_STAT_OP(15) <= '0'; + reset_packet_num <= '0'; + if fifo_valid_read_a = '1' then + if fifo_dout_a(7 downto 0) = x"7F" then + resync_counter <= resync_counter + 1; + else + resync_counter <= "00"; + end if; + end if; + if resync_counter = "11" then + buf_STAT_OP(15) <= '1'; + reset_packet_num <= '1'; + end if; + end if; + end process; ------------- --Sender @@ -280,11 +284,9 @@ U1_BUFG: BUFG port map (I => CLK_FB_Out, O => FB_CLK); write_data_in => fifo_din_m, read_data_out => fifo_dout_m, valid_read_out => fifo_valid_read_m, - almost_empty_out=> fifo_almost_empty_m, full_out => fifo_full_m, empty_out => fifo_empty_m, - fifostatus_out => fifo_status_m, - underflow_out => fifo_underflow_m + fifostatus_out => fifo_status_m ); TLK_TX_ER <= '0'; @@ -294,13 +296,8 @@ U1_BUFG: BUFG port map (I => CLK_FB_Out, O => FB_CLK); process(CLK) begin if rising_edge(CLK) then - if internal_reset = '1' then - fifo_wr_en_m <= '0'; - fifo_din_m <= (others => '0'); - else - fifo_wr_en_m <= (MED_DATAREADY_IN and buf_MED_READ_OUT);-- or fifo_almost_empty_m; - fifo_din_m <= fifo_almost_empty_m & (MED_DATAREADY_IN and buf_MED_READ_OUT) & MED_DATA_IN; - end if; + fifo_wr_en_m <= (MED_DATAREADY_IN and buf_MED_READ_OUT);-- or fifo_almost_empty_m; + fifo_din_m <= '0' & (MED_DATAREADY_IN and buf_MED_READ_OUT) & MED_DATA_IN; end if; end process; @@ -309,16 +306,22 @@ U1_BUFG: BUFG port map (I => CLK_FB_Out, O => FB_CLK); process(TLK_CLK_neg) begin if rising_edge(TLK_CLK_neg) then - if internal_reset = '1' then - reg_TX_EN <= '0'; - reg_TXD <= (others => '0'); - else + if send_resync = '0' then reg_TXD <= fifo_dout_m(15 downto 0); - reg_TX_EN <= fifo_valid_read_m and fifo_dout_m(16) and not fifo_underflow_m; --last_fifo_rd_en_m; + else + reg_TXD <= x"007F"; end if; + reg_TX_EN <= (fifo_valid_read_m and fifo_dout_m(16)) or send_resync; --last_fifo_rd_en_m; end if; end process; +-- process(TLK_CLK_neg) +-- begin +-- if rising_edge(TLK_CLK_neg) then +-- +-- end if; +-- end process; + ------------- --Medium states ------------- @@ -339,7 +342,7 @@ U1_BUFG: BUFG port map (I => CLK_FB_Out, O => FB_CLK); next_MED_ERROR_OUT <= ERROR_NC; next_internal_reset <= '1'; counter_reset <= '0'; - if counter(16) = '1' then --16 + if counter(16) = '1' then counter_reset <= '1'; next_state <= WAIT_FOR_RX_LOCK; next_internal_reset <= '0'; @@ -352,7 +355,7 @@ U1_BUFG: BUFG port map (I => CLK_FB_Out, O => FB_CLK); end if; when WAIT_FOR_TX_ALLOW => next_MED_ERROR_OUT <= ERROR_WAIT; - if counter(27) = '1' then --20 + if counter(27) = '1' then next_tx_allow <= '1'; next_state <= WORKING; end if; @@ -383,20 +386,15 @@ U1_BUFG: BUFG port map (I => CLK_FB_Out, O => FB_CLK); states_reg : process(CLK) begin if rising_edge(CLK) then - if internal_reset = '1' then - tx_allow <= '0'; - rx_allow <= '0'; - else - tx_allow <= next_tx_allow; - rx_allow <= next_rx_allow; - end if; + tx_allow <= next_tx_allow; + rx_allow <= next_rx_allow; end if; end process; states_reg_counter : process(CLK) begin if rising_edge(CLK) then - if RESET = '1' or counter_reset = '1' then + if counter_reset = '1' then counter <= (others => '0'); else counter <= next_counter; diff --git a/xilinx/trb_net_fifo_16bit_bram_dualport_arch.vhd b/xilinx/trb_net_fifo_16bit_bram_dualport_arch.vhd index 7a6ae8a..90cdcd3 100644 --- a/xilinx/trb_net_fifo_16bit_bram_dualport_arch.vhd +++ b/xilinx/trb_net_fifo_16bit_bram_dualport_arch.vhd @@ -54,9 +54,7 @@ entity trb_net_fifo_16bit_bram_dualport is full_out: OUT std_logic; empty_out: OUT std_logic; fifostatus_out: OUT std_logic_vector(3 downto 0); --counter for 1/16th of fifo - valid_read_out: OUT std_logic; - almost_empty_out:OUT std_logic; - underflow_out : OUT std_logic + valid_read_out: OUT std_logic ); end entity trb_net_fifo_16bit_bram_dualport; @@ -145,9 +143,7 @@ architecture trb_net_fifo_16bit_bram_dualport_arch of trb_net_fifo_16bit_bram_du dout: OUT std_logic_VECTOR(17 downto 0); empty: OUT std_logic; full: OUT std_logic; - prog_empty: OUT std_logic; - valid: OUT std_logic; - underflow: OUT std_logic); + valid: OUT std_logic); end component; -- read_clock_in: IN std_logic; -- write_clock_in: IN std_logic; @@ -171,9 +167,7 @@ FIFO_DP_BRAM : xilinx_fifo_dualport_18x1k dout => read_data_out, empty => empty_out, full => full_out, - prog_empty => almost_empty_out, - valid => valid_read_out, - underflow => underflow_out + valid => valid_read_out ); -- read_enable <= read_enable_in; diff --git a/xilinx/virtex4/xilinx_fifo_dualport_18x1k.ngc b/xilinx/virtex4/xilinx_fifo_dualport_18x1k.ngc deleted file mode 100644 index e38660e..0000000 --- a/xilinx/virtex4/xilinx_fifo_dualport_18x1k.ngc +++ /dev/null @@ -1,3 +0,0 @@ -XILINX-XDB 0.1 STUB 0.1 ASCII -XILINX-XDM V1.4e -$20:41<,[o}e~g`n;"2*447&;:%>-*>;1684546;2:;995?0900?56F92;87< ?1g924?OIX\^1|ah_dosp|Ys`{oxd1750?05?46=AGZ^X7~}of]fiur~W}byi~fParqfvq:>2949:6??:HLSQQ0a85511b924?IR\Y__6z|Pd`vb[firf}626=0>7:31>JSSX\^1^IM@UOV?54<768=0=?4@UURVP?QUKF_EX1?>:1<26>7?2@D[YY4kio>23?699=1:47AZTQWW>air|5;<6=0>1:11>LHW]]0OE1=>:1<26>552F__\XZ5DN>05?6992>:<6:5IORVP?BNX591<3?>;58LQQVR\3ND\1=50?d80sj<9lm=<:7-037?0368=1>99>>;7682;868=567<23;<4<49708E546MJ3:AOV<=DGDGBXYKK7:AQADRBL81Om6JNT@]TMARO=2NB0=09;EK?55813MC7=<09;EK?57813MC7=>09;EK?51813MC7=809;EK?53813MC7=:09;EK?5=813MC7=40:;EK?5;015;0384DH>17;011;013;01=;37:0=CA5?596JF<7<6?AO;?7?0HD27>49GM9?9>2NB\1>16:FJT979>2NB\1<18:FJT95=87<0HD^33?78@J:76?1OC1??>79GK9766?1OC1?=>79GK9746?1OC1?;>79GK9726?1OC1?9>79GK9706?1OC1?7>79GK97>6<1OC1?16:FL8769>2ND0??16:FL8749>2ND0?=16:FL8729>2ND0?;16:FL8709>2ND0?916:FL87>9>2ND0?715:FL87813ME7?=07;EM?74<76?1OC1=>>49GK959=2ND090:;EM?1;3BH414>7IA39?48@JV;87<0HB^31?48@JV;:720HB^33;2=2>BHX595?6J_O49GTWG7=2N[^L?:;ERQE736H94:D;<=3@fdzo:7J=4GOF2?L41168J476<2D:=?:4N0300>H69=>0B1968J47>;2D:>95A1327?K759=1E=?<;;O3171=I9;??7C?=729M562429M505<;O027>H5::1E>>:4N2010>H4:=>0B><94:L0624?6@7729M<<4i;O@\FPUWAGU[^B^\7:LFPRIUC81D>6AD1:R7?UGU\h1[ECQMURKG\g=WAGUIY^@NMD18TWC63X20^LC>6Y3G1>TCKEAj7_JLOTLW858e3[NHCX@[<02=`>TCKF_EX1?>:1TCKF_EX1:1a:PGGJSI\5?5m6\KCNWMP909i2XOOB[AT=5=e>TCKF_EX161a:PGGJSI\53586\KEO78VACUZ:1Y_Y84SNWQG@5<[YE?7Y\ZE59W]UC4j2_;#jlfv5,eccoag8Vzjxnf fcnh+bciW~m~#gasu]tcqt(iegdykbpu{r72=R8&mie{:!ffdjbj71Wykoe!ibmi,c`hXn~y"d`|t^udpw)kilg{xt=9;T2,cgoq<'lljdh`17]seqeo'ohgg"ijn^udpw(nfz~T{jz}/mgntq4=2_;#jlfv5,eccoag8>689V4*aea>%jjhffn35[ugska%mnae gdl\sbru&`dxxRyhts-oqqYaaoe$kh!rg-dg}(ddbr$Aua}_sf\tkruWkceSua}0123[Wct}e~::45Z0.eams2)nnlbjb?9_qcwgm)ajea$kh`Pwfvq*lht|V}lx!cuu]emci(o{l%~k!hcy,`hn~(EqeySjPpovq[goiWqey<=>>_Sgpqir6>01^<"imiw6-bb`nnf;=S}o{ci-efim(oldT{jz}.hlppZq`|{%gyyQiigm,cw`)zo%lou lljz,I}iuW{nT|cz}_ckm[}iu89:9S_k|umv22==R8&mie{:!ffdjbj71Wykoe!ibmi,c`hXn~y"d`|t^udpw)k}}Umeka gsd-vc)`kq$h`fv Mymq[wbXxg~ySjmPxnp3456XZly~`y?98:W3+bdn~=$mkkgio04\tdrd`&li`f!heo]tcqt)agySzi{r.nvpZ`nnf%l~k }f.e`|+ekcq%Ftb|Pre]sjqtXojUsc>?00]Qavsk|8<37X> gcku0+``n`ld=;Qauak+cdkc&mnbRyhts,jjvrXn~y#a{{_gkek*aun'xm#jmw.bnh|*Kg{UyhR~ats]dgZ~hz9:;>R\jstnw53?<]9%lndx;.geemci6>Vzjxnf fcnh+bciW~m~#gasu]tcqt(d|~Tjdh`/fpe*w`(ojr%oaew/LzlvZquWyd~Rlfn^zlv5678VXnxb{17;8Q5)`j`|?"kiiigm22Zvf|jb$jobd/fgm[rasz'ceyQxgup,hprXn`ld#j|i.sd,cf~)keas#@v`r^uq[uhszVhbbRv`r1235ZTb{|f=;74U1-dflp3&ommeka>6^rbpfn(nkf`#jka_vewv+oi{}U|ky| ltv\bl`h'nxm"h gbz-gim'Drd~Ry}_qlwvZdnfVrd~=>?2^Pfwpjs9?20Y=!hbht7*caaaoe::R~ntbj,bgjl'noeSzi{r/kmwqYpo}x$`xzPfhdl+bta&{l$knv!cmi{+H~hzV}yS}`{r^e`[}iu89:;S_k|umv22==R8&mie{:!ffdjbj71Wykoe!ibmi,c`hXn~y"d`|t^udpw)k}}Umeka gsd-vc)`kq$h`fv Mymq[rtXxg~ySjmPxnp3457XZly~`y?98:W3+bdn~=$mkkgio04\tdrd`&li`f!heo]tcqt)agySzi{r.nvpZ`nnf%l~k }f.e`|+ekcq%Ftb|Pws]sjqtXojUsc>?03]Qavsk|8?<7X> gcku0+``n`ld=;Qauak+cdkc&mnbRyhts,jjvrXn~y#a{{_gkek*aun'xm#jmw.bnh|*tcWyd~Rlfn=2=12=R8&mie{:!ffdjbj71Wykoe!ibmi,c`hXn~y"d`|t^udpw)k}}Umeka gsd-vc)`kq$h`fv re]sjqtXj`d7=3;8;T2,cgoq<'lljdh`17]seqeo'ohgg"ijn^udpw(nfz~T{jz}/mww[coag&myj#|i/fa{*fjlp&xoS}`{r^`jj949=>1^<"imiw6-bb`nnf;=S}o{ci-efim(oldT{jz}.hlppZq`|{%gyyQiigm,cw`)zo%lou lljz,vaYwf}xTnd`33?75?P6(okc}8#hhfhdl53Ywi}ic#klck.efjZq`|{$bb~zPwfvq+issWocmc"i}f/pe+be&jf`t"|k_qlwvZdnfV:>:6[?/f`jr1(aoocmc<8Pp`v`l*`edb%licQxgup-mkusW~m~"bzt^djbj)`zo$yj"ilx/aoo})ulVzexQmio]213=R8&mie{:!ffdjbj71Wykoe!ibmi,c`hXn~y"d`|t^udpw)k}}Umeka gsd-vc)`kq$h`fv re]sjqtXj`dT>884U1-dflp3&ommeka>6^rbpfn(nkf`#jka_vewv+oi{}U|ky| ltv\bl`h'nxm"h gbz-gim'{nT|cz}_ckm[63d3\:$kogy4/ddbl`h9?U{mymg/g`oo*abfV}lx fnrv\sbru'eSkgio.eqb+ta'nis"nbdx.pg[uhszVhbbRv`r12340e<]9%lndx;.geemci6>Vzjxnf fcnh+bciW~m~#gasu]tcqt(d|~Tjdh`/fpe*w`(ojr%oaew/sf\tkruWkceSua}01221f=R8&mie{:!ffdjbj71Wykoe!ibmi,c`hXn~y"d`|t^udpw)k}}Umeka gsd-vc)`kq$h`fv re]sjqtXj`dTtb|?01062>S7'nhbz9 iggkek40Xxh~hd"hmlj-dakYpo}x%ec}{_vewv*jr|Vlbjb!hrg,qb*adp'iggu!}d^rmpwY`k5:59;5Z0.eams2)nnlbjb?9_qcwgm)ajea$kh`Pwfvq*lht|V}lx!cuu]emci(o{l%~k!hcy,`hn~(zmU{by|Pgb>2:00<]9%lndx;.geemci6>Vzjxnf fcnh+bciW~m~#gasu]tcqt(d|~Tjdh`/fpe*w`(ojr%oaew/sf\tkruWni7>3;9;T2,cgoq<'lljdh`17]seqeo'ohgg"ijn^udpw(nfz~T{jz}/mww[coag&myj#|i/fa{*fjlp&xoS}`{r^e`8682=2_;#jlfv5,eccoag8:5:W3+bdn~=$mkkgio04\tdrd`&li`f!heo]tcqt)agySzi{r.nvpZ`nnf%l~k }f.e`|+ekcq%yhR~ats]dgZ72=2_;#jlfv5,eccoag82:0e<]9%lndx;.geemci6>Vzjxnf fcnh+bciW~m~#gasu]tcqt(d|~Tjdh`/fpe*w`(ojr%oaew/sf\tkruWniTm~|jg=0=1f=R8&mie{:!ffdjbj71Wykoe!ibmi,c`hXn~y"d`|t^udpw)k}}Umeka gsd-vc)`kq$h`fv re]sjqtXojUjkh<2<6f>S7'nhbz9 iggkek40Xxh~hd"hmlj-dakYpo}x%ec}{_vewv*jr|Vlbjb!hrg,qb*adp'iggu!}d^rmpwY`kVkx~hiP04`8Q5)`j`|?"kiiigm22Zvf|jb$jobd/fgm[rasz'ceyQxgup,hprXn`ld#j|i.sd,cf~)keas#jPpovq[beXizxnkR?:b:W3+bdn~=$mkkgio04\tdrd`&li`f!heo]tcqt)agySzi{r.nvpZ`nnf%l~k }f.e`|+ekcq%yhR~ats]dgZgtzlmT>8l4U1-dflp3&ommeka>6^rbpfn(nkf`#jka_vewv+oi{}U|ky| ltv\bl`h'nxm"h gbz-gim'{nT|cz}_fa\evtboV9>j6[?/f`jr1(aoocmc<8Pp`v`l*`edb%licQxgup-mkusW~m~"bzt^djbj)`zo$yj"ilx/aoo})ulVzexQhc^cpv`aXl86;28h4U1-dflp3&ommeka>6^rbpfn(nkf`#jka_vewv+oi{}U|ky| ltv\bl`h'nxm"h gbz-gim'{nT|cz}_fa\evtboVn:0<0:f:W3+bdn~=$mkkgio04\tdrd`&li`f!heo]tcqt)agySzi{r.nvpZ`nnf%l~k }f.e`|+ekcq%yhR~ats]dgZgtzlmTh<2=>4d8Q5)`j`|?"kiiigm22Zvf|jb$jobd/fgm[rasz'ceyQxgup,hprXn`ld#j|i.sd,cf~)keas#jPpovq[beXizxnkRj><2<6a>S7'nhbz9 iggkek40Xxh~hd"hmlj-dakYpo}x%ec}{_vewv*jr|Vlbjb!hrg,qb*adp'iggu!}d^rmpwY`kVkx~hiPd0]31`=R8&mie{:!ffdjbj71Wykoe!ibmi,c`hXn~y"d`|t^udpw)k}}Umeka gsd-vc)`kq$h`fv re]sjqtXojUjkh_e3\50c<]9%lndx;.geemci6>Vzjxnf fcnh+bciW~m~#gasu]tcqt(d|~Tjdh`/fpe*w`(ojr%oaew/sf\tkruWniTm~|jg^f2[73b3\:$kogy4/ddbl`h9?U{mymg/g`oo*abfV}lx fnrv\sbru'eSkgio.eqb+ta'nis"nbdx.pg[uhszVmhSl}}ef]g5Z52j2_;#jlfv5,eccoag8Vzjxnf fcnh+bciW~m~#gasu]tcqt(d|~Tjdh`/fpe*w`(ojr%oaew/sf\tkruWniTtb|?0136f>S7'nhbz9 iggkek40Xxh~hd"hmlj-dakYpo}x%ec}{_vewv*jr|Vlbjb!hrg,qb*adp'iggu!}d^rmpwY`kVrd~=>?2458Q5)`j`|?"kiiigm22Zvf|jb$jobd/fgm[rasz'ceyQxgup,hprXn`ld#j|i.sd,cf~)keas#z|Ppovq[goi494>;6[?/f`jr1(aoocmc<8Pp`v`l*`edb%licQxgup-mkusW~m~"bzt^djbj)`zo$yj"ilx/aoo})pzVzexQmio>2:01<]9%lndx;.geemci6>Vzjxnf fcnh+bciW~m~#gasu]tcqt(d|~Tjdh`/fpe*w`(ojr%oaew/vp\tkruWkce0?0:7:W3+bdn~=$mkkgio04\tdrd`&li`f!heo]tcqt)agySzi{r.nvpZ`nnf%l~k }f.e`|+ekcq%|~R~ats]amk:46<<0Y=!hbht7*caaaoe::R~ntbj,bgjl'noeSzi{r/kmwqYpo}x$`xzPfhdl+bta&{l$knv!cmi{+rtXxg~ySoga_175?P6(okc}8#hhfhdl53Ywi}ic#klck.efjZq`|{$bb~zPwfvq+issWocmc"i}f/pe+be&jf`t"y}_qlwvZdnfV;>:6[?/f`jr1(aoocmc<8Pp`v`l*`edb%licQxgup-mkusW~m~"bzt^djbj)`zo$yj"ilx/aoo})pzVzexQmio]113=R8&mie{:!ffdjbj71Wykoe!ibmi,c`hXn~y"d`|t^udpw)k}}Umeka gsd-vc)`kq$h`fv ws]sjqtXj`dT?8m4U1-dflp3&ommeka>6^rbpfn(nkf`#jka_vewv+oi{}U|ky| ltv\bl`h'nxm"h gbz-gim'~xT|cz}_ckm[}iu89:;9n5Z0.eams2)nnlbjb?9_qcwgm)ajea$kh`Pwfvq*lht|V}lx!cuu]emci(o{l%~k!hcy,`hn~({U{by|Pbhl\|jt789;>o6[?/f`jr1(aoocmc<8Pp`v`l*`edb%licQxgup-mkusW~m~"bzt^djbj)`zo$yj"ilx/aoo})pzVzexQmio]{kw678;?=7X> gcku0+``n`ld=;Qauak+cdkc&mnbRyhts,jjvrXn~y#a{{_gkek*aun'xm#jmw.bnh|*quWyd~Ril<1<62>S7'nhbz9 iggkek40Xxh~hd"hmlj-dakYpo}x%ec}{_vewv*jr|Vlbjb!hrg,qb*adp'iggu!xr^rmpwY`k5;59;5Z0.eams2)nnlbjb?9_qcwgm)ajea$kh`Pwfvq*lht|V}lx!cuu]emci(o{l%~k!hcy,`hn~({U{by|Pgb>1:00<]9%lndx;.geemci6>Vzjxnf fcnh+bciW~m~#gasu]tcqt(d|~Tjdh`/fpe*w`(ojr%oaew/vp\tkruWni7?3;:;T2,cgoq<'lljdh`17]seqeo'ohgg"ijn^udpw(nfz~T{jz}/mww[coag&myj#|i/fa{*fjlp&}yS}`{r^e`[5323\:$kogy4/ddbl`h9?U{mymg/g`oo*abfV}lx fnrv\sbru'eSkgio.eqb+ta'nis"nbdx.uq[uhszVmhS<;:;T2,cgoq<'lljdh`17]seqeo'ohgg"ijn^udpw(nfz~T{jz}/mww[coag&myj#|i/fa{*fjlp&}yS}`{r^e`[7323\:$kogy4/ddbl`h9?U{mymg/g`oo*abfV}lx fnrv\sbru'eSkgio.eqb+ta'nis"nbdx.uq[uhszVmhS>;l;T2,cgoq<'lljdh`17]seqeo'ohgg"ijn^udpw(nfz~T{jz}/mww[coag&myj#|i/fa{*fjlp&}yS}`{r^e`[duumn6;28m4U1-dflp3&ommeka>6^rbpfn(nkf`#jka_vewv+oi{}U|ky| ltv\bl`h'nxm"h gbz-gim'~xT|cz}_fa\evtbo5;59n5Z0.eams2)nnlbjb?9_qcwgm)ajea$kh`Pwfvq*lht|V}lx!cuu]emci(o{l%~k!hcy,`hn~({U{by|Pgb]bwwc`4;4>o6[?/f`jr1(aoocmc<8Pp`v`l*`edb%licQxgup-mkusW~m~"bzt^djbj)`zo$yj"ilx/aoo})pzVzexQhc^cpv`a;;7?i7X> gcku0+``n`ld=;Qauak+cdkc&mnbRyhts,jjvrXn~y#a{{_gkek*aun'xm#jmw.bnh|*quWyd~Ril_`qqabY7=k1^<"imiw6-bb`nnf;=S}o{ci-efim(oldT{jz}.hlppZq`|{%gyyQiigm,cw`)zo%lou lljz,swYwf}xTknQnssgd[43e3\:$kogy4/ddbl`h9?U{mymg/g`oo*abfV}lx fnrv\sbru'eSkgio.eqb+ta'nis"nbdx.uq[uhszVmhSl}}ef]11g=R8&mie{:!ffdjbj71Wykoe!ibmi,c`hXn~y"d`|t^udpw)k}}Umeka gsd-vc)`kq$h`fv ws]sjqtXojUjkh_27e?P6(okc}8#hhfhdl53Ywi}ic#klck.efjZq`|{$bb~zPwfvq+issWocmc"i}f/pe+be&jf`t"y}_qlwvZadWhyyijQk1=2=1c=R8&mie{:!ffdjbj71Wykoe!ibmi,c`hXn~y"d`|t^udpw)k}}Umeka gsd-vc)`kq$h`fv ws]sjqtXojUjkh_e3?5;3a3\:$kogy4/ddbl`h9?U{mymg/g`oo*abfV}lx fnrv\sbru'eSkgio.eqb+ta'nis"nbdx.uq[uhszVmhSl}}ef]g5949=o1^<"imiw6-bb`nnf;=S}o{ci-efim(oldT{jz}.hlppZq`|{%gyyQiigm,cw`)zo%lou lljz,swYwf}xTknQnssgd[a7;;7?n7X> gcku0+``n`ld=;Qauak+cdkc&mnbRyhts,jjvrXn~y#a{{_gkek*aun'xm#jmw.bnh|*quWyd~Ril_`qqabYc9V:>i6[?/f`jr1(aoocmc<8Pp`v`l*`edb%licQxgup-mkusW~m~"bzt^djbj)`zo$yj"ilx/aoo})pzVzexQhc^cpv`aXl8U:9h5Z0.eams2)nnlbjb?9_qcwgm)ajea$kh`Pwfvq*lht|V}lx!cuu]emci(o{l%~k!hcy,`hn~({U{by|Pgb]bwwc`Wm;T>8k4U1-dflp3&ommeka>6^rbpfn(nkf`#jka_vewv+oi{}U|ky| ltv\bl`h'nxm"h gbz-gim'~xT|cz}_fa\evtboVn:S>;m;T2,cgoq<'lljdh`17]seqeo'ohgg"ijn^udpw(nfz~T{jz}/mww[coag&myj#|i/fa{*fjlp&}yS}`{r^e`[}iu89:;9o5Z0.eams2)nnlbjb?9_qcwgm)ajea$kh`Pwfvq*lht|V}lx!cuu]emci(o{l%~k!hcy,`hn~({U{by|Pgb]{kw6788?i7X> gcku0+``n`ld=;Qauak+cdkc&mnbRyhts,jjvrXn~y#a{{_gkek*aun'xm#jmw.bnh|*quWyd~Ril_ymq4565=o1^<"imiw6-bb`nnf;=S}o{ci-efim(oldT{jz}.hlppZq`|{%gyyQiigm,cw`)zo%l`= }d.eqev(u{}y$~lcPelrw}Z`eW`<=7X> gcku0+``n`ld=;Qauak+cdkc&mnbRyhts,jjvrXn~y#a{{_gkek*aun'xm#jb?.sf,cwgt&{y"|nm^gntqXnkUbSb|?0125=>S7'nhbz9 iggkek40Xxh~hd"hmlj-dakYpo}x%ec}{_vewv*jr|Vlbjb!hrg,qb*ak8'xo#j|ns/pppv)uidUna}zv_g`\mZiu89:;=<69d:W3+bdn~=$mkkgio04\tdrd`&li`f!heo]tcqt)agySzi{r.nvpZ`nnf%l~k }f.eo4+tc'nxj#||tr-qehYbey~rSklPi^mq4567982T_Z>99:W3+bdn~=$mkkgio04\tdrd`&li`f!heo]tcqt)agySzi{r.nvpZ`nnf%l~k }f.eo4+tc'nxj#||tr-qehYbey~rSklPi^mq45679=;=46[?/f`jr1(aoocmc<8Pp`v`l*`edb%licQxgup-mkusW~m~"bzt^djbj)`zo$yj"ic0/pg+btf{'xxx~!}al]fiur~WohTeRa}0123630?3\:$kogy4/ddbl`h9?U{mymg/g`oo*abfV}lx fnrv\sbru'eSkgio.eqb+ta'nf;"j gscp*wus{&xjaRkbpu{\bgYnWfx;<=>:37:8Q5)`j`|?"kiiigm22Zvf|jb$jobd/fgm[rasz'ceyQxgup,hprXn`ld#j|i.sd,ci6)zm%l~l}!rrvp+wgjWlg{xtQib^k\kw678938:n5Z0.eams2)nnlbjb?9_qcwgm)ajea$kh`Pwfvq*lht|V}lx!cuu]emci(o{l%~k!hl1,q`*auiz$yy} r`o\ahvsqVliSdQ`r1234Zkfx8:=o6[?/f`jr1(aoocmc<8Pp`v`l*`edb%licQxgup-mkusW~m~"bzt^djbj)`zo$yj"ic0/pg+btf{'xxx~!}al]fiur~WohTeRa}0123[hgw:8 gcku0+``n`ld=;Qauak+cdkc&mnbRyhts,jjvrXn~y#a{{_gkek*aun'xm#jb?.sf,cwgt&{y"|nm^gntqXnkUbSb|?012\idv4;?i0Y=!hbht7*caaaoe::R~ntbj,bgjl'noeSzi{r/kmwqYpo}x$`xzPfhdl+bta&{l$ka>!re-dvdu)zz~x#ob_dosp|YajVcTc>?01]neu22=j1^<"imiw6-bb`nnf;=S}o{ci-efim(oldT{jz}.hlppZq`|{%gyyQiigm,cw`)zo%l`= }d.eqev(u{}y$~lcPelrw}Zo212_;#jlfv5,eccoag8S7'nhbz9 iggkek40Xxh~hd"hmlj-dakYpo}x%ec}{_vewv*jr|Vlbjb!hrg,qb*ak8'xo#j|gf/pkb*SILLXM@BYPaof34561:2_;#jlfv5,eccoag85Z0.eams2)nnlbjb?9_qcwgm)ajea$kh`Pwfvq*lht|V}lx!cuu]emci(o{l%~k!hl1,q`*tfeVxoSh`Pi07:?P6(okc}8#hhfhdl53Ywi}ic#klck.efjZq`|{$bb~zPwfvq+issWocmc"i}f/pe+bj7&{n$~}`{r.O`kphsWje~by;n;T2,cgoq<'lljdh`17]seqeo'ohgg"ijn^udpw(nfz~T{jz}/mww[coag&myj#|i/fn3*wb(zyd~"Clotlw[firf}9>m6[?/f`jr1(aoocmc<8Pp`v`l*`edb%licQxgup-mkusW~m~"bzt^djbj)`zo$yj"ic0/pg+wvi|{%Fob{at^alqkr1=h1^<"imiw6-bb`nnf;=S}o{ci-efim(oldT{jz}.hlppZq`|{%gyyQiigm,cw`)zo%l`= }d.psjqt(Eje~byQlotlw=3><]9%lndx;.geemci6>Vzjxnf fcnh+bciW~m~#gasu]tcqt(d|~Tjdh`/fpe*w`(oe:%~i!}povq+Heh}g~Tob{at^zlv96998UBB[Q?639V4*aea>%jjhffn35[ugska%mnae gdl\sbru&`dxxRyhts-oqqYaaoe$kh!rg-dh5(ul&x{by| MbmvjqYdg|dSua}<0<2534<]9%lndx;.geemci6>Vzjxnf fcnh+bciW~m~#gasu]tcqt(d|~Tjdh`/fpe*w`(oe:%~i!}povq+Heh}g~Tob{at^zlv94998<97X> gcku0+``n`ld=;Qauak+cdkc&mnbRyhts,jjvrXn~y#a{{_gkek*aun'xm#jb?.sf,vuhsz&Ghcx`{_bmvjqYg{6820:4:W3+bdn~=$mkkgio04\tdrd`&li`f!heo]tcqt)agySzi{r.nvpZ`nnf%l~k }f.eo4+tc'{zex!lotlw[5333\:$kogy4/ddbl`h9?U{mymg/g`oo*abfV}lx fnrv\sbru'eSkgio.eqb+ta'nf;"j rqlwv*eh}g~T=8:4U1-dflp3&ommeka>6^rbpfn(nkf`#jka_vewv+oi{}U|ky| ltv\bl`h'nxm"h gm2-va)uxg~y#naznu]111=R8&mie{:!ffdjbj71Wykoe!ibmi,c`hXn~y"d`|t^udpw)k}}Umeka gsd-vc)`d9$yh"|nup,gjsi|V9>46[?/f`jr1(aoocmc<8Pp`v`l*`edb%licQxgup-mkusW~m~"bzt^djbj)`zo$yj"ic0/pg+wvi|{%hcx`{_e3?4;3?3\:$kogy4/ddbl`h9?U{mymg/g`oo*abfV}lx fnrv\sbru'eSkgio.eqb+ta'nf;"j rqlwv*eh}g~Th<2>>4:8Q5)`j`|?"kiiigm22Zvf|jb$jobd/fgm[rasz'ceyQxgup,hprXn`ld#j|i.sd,ci6)zm%y|cz}/bmvjqYc9585955Z0.eams2)nnlbjb?9_qcwgm)ajea$kh`Pwfvq*lht|V}lx!cuu]emci(o{l%~k!hl1,q`*twf}x$ob{at^f28682?2_;#jlfv5,eccoag8;6[?/f`jr1(aoocmc<8Pp`v`l*`edb%licQxgup-mkusW~m~"bzt^djbj)`zo$yj"ic0/pg+wvi|{%hcx`{_e3\601<]9%lndx;.geemci6>Vzjxnf fcnh+bciW~m~#gasu]tcqt(d|~Tjdh`/fpe*w`(oe:%~i!}povq+firf}Uo=R=:a:W3+bdn~=$mkkgio04\tdrd`&li`f!heo]tcqt)agySzi{r.nvpZ`nnf%l~k }f.eo4+tc'{zex!lotlw[kis89::9n5Z0.eams2)nnlbjb?9_qcwgm)ajea$kh`Pwfvq*lht|V}lx!cuu]emci(o{l%~k!hl1,tv*apiz$|y} c3-gkprXa8=>o6[?/f`jr1(aoocmc<8Pp`v`l*`edb%licQxgup-mkusW~m~"bzt^djbj)`zo$yj"ic0/uq+bqf{'}xx~!l2.flqqYn=:?h7X> gcku0+``n`ld=;Qauak+cdkc&mnbRyhts,jjvrXn~y#a{{_gkek*aun'xm#jb?.vp,crgt&~y"m=/emvpZo2=?:0Y=!hbht7*caaaoe::R~ntbj,bgjl'noeSzi{r/kmwqYpo}x$`xzPfhdl+bta&{l$ka>!ws-dsdu)z~x#n< dnww[lYjiy8:9k5Z0.eams2)nnlbjb?9_qcwgm)ajea$kh`Pwfvq*lht|V}lx!cuu]emci(o{l%~k!hl1,tv*apiz$|y} c3-gkprXaVgj|4;9;T2,cgoq<'lljdh`17]seqeo'ohgg"ijn^udpw(nfz~T{jz}/mww[coag&myj#|i/fn3*rt(o~kx"z}{s.aliu41:2_;#jlfv5,eccoag8!ws-dsdu)z~x#ob_`nnkvrXn|fgSdQbuy234541>j1^<"imiw6-bb`nnf;=S}o{ci-efim(oldT{jz}.hlppZq`|{%gyyQiigm,cw`)zo%l`= xr.etev(p{}y$~lcPamolwqYa}efTeRczx123407082_;#jlfv5,eccoag8 gcku0+``n`ld=;Qauak+cdkc&mnbRyhts,jjvrXn~y#a{{_gkek*aun'xm#jb?.vp,crgt&~y"|nm^coijusWog`RgPmtz3456?0>:0Y=!hbht7*caaaoe::R~ntbj,bgjl'noeSzi{r/kmwqYpo}x$`xzPfhdl+bta&{l$ka>!ws-dsdu)z~x#ob_`nnkvrXn|fgSdQbuy2345Yjiy;;;=5Z0.eams2)nnlbjb?9_qcwgm)ajea$kh`Pwfvq*lht|V}lx!cuu]emci(o{l%~k!hl1,tv*apiz$|y} r`o\eikh{}UmyabPi^ov|5678Vgj|?<9a:W3+bdn~=$mkkgio04\tdrd`&li`f!heo]tcqt)agySzi{r.nvpZ`nnf%l~k }f.eo4+qu'n}j#y|tr-qehYfddexxRhzlm]j[kis89:::o5Z0.eams2)nnlbjb?9_qcwgm)ajea$kh`Pwfvq*lht|V}lx!cuu]emci(o{l%~k!hl1,tv*apiz$|y} r`o\eikh{}UmyabPi^llp56798?n7X> gcku0+``n`ld=;Qauak+cdkc&mnbRyhts,jjvrXn~y#a{{_gkek*aun'xm#jb?.vp,crgt&~y"|nm^dvhiYajVc=>6[?/f`jr1(aoocmc<8Pp`v`l*`edb%licQxgup-mkusW~m~"bzt^djbj)`zo$yj"ic0/uq+bqf{'}xx~!}al]eqijXaVey<=>?659V4*aea>%jjhffn35[ugska%mnae gdl\sbru&`dxxRyhts-oqqYaaoe$kh!rg-dh5(pz&m|m~ xsuq,vdkXn|fgSdQ`r1234711<2_;#jlfv5,eccoag8<]9%lndx;.geemci6>Vzjxnf fcnh+bciW~m~#gasu]tcqt(d|~Tjdh`/fpe*w`(oe:%{!hw`q-svrt'{kfSk{cl^k\kw6789Ufm}?>699V4*aea>%jjhffn35[ugska%mnae gdl\sbru&`dxxRyhts-oqqYaaoe$kh!rg-dh5(pz&m|m~ xsuq,vdkXn|fgSdQ`r1234Zkfx;8>m6[?/f`jr1(aoocmc<8Pp`v`l*`edb%licQxgup-mkusW~m~"bzt^djbj)`zo$yj"ic0/uq+bqf{'}xx~!xr^pppZb6=:1^<"imiw6-bb`nnf;=S}o{ci-efim(oldT{jz}.hlppZq`|{%gyyQiigm,cw`)zo%l`= xr.pbiZquWldTe<;:;T2,cgoq<'lljdh`17]seqeo'ohgg"ijn^udpw(nfz~T{jz}/mww[coag&myj#|i/fn3*rt(zhgT{Qjn^k2[4323\:$kogy4/ddbl`h9?U{mymg/g`oo*abfV}lx fnrv\sbru'eSkgio.eqb+ta'nf;"z| r`o\swYbfVc:S?;:;T2,cgoq<'lljdh`17]seqeo'ohgg"ijn^udpw(nfz~T{jz}/mww[coag&myj#|i/fn3*rt(zhgT{Qjn^k2[6323\:$kogy4/ddbl`h9?U{mymg/g`oo*abfV}lx fnrv\sbru'eSkgio.eqb+ta'nf;"z| r`o\swYbfVc:S9;6;T2,cgoq<'lljdh`17]seqeo'ohgg"ijn^udpw(nfz~T{jz}/mww[coag&myj#|i/fn3*rt(yd~"Clotlw[firf}?j7X> gcku0+``n`ld=;Qauak+cdkc&mnbRyhts,jjvrXn~y#a{{_gkek*aun'xm#jb?.vp,suhsz&Ghcx`{_bmvjq52i2_;#jlfv5,eccoag81708Q5)`j`|?"kiiigm22Zvf|jb$jobd/fgm[rasz'ceyQxgup,hprXn`ld#j|i.sd,ci6){%||cz}/LalqkrXkfexRv`r=0=54053\:$kogy4/ddbl`h9?U{mymg/g`oo*abfV}lx fnrv\sbru'eSkgio.eqb+ta'nf;"z| wqlwv*Kdg|dSnaznu]{kw:468;>96[?/f`jr1(aoocmc<8Pp`v`l*`edb%licQxgup-mkusW~m~"bzt^djbj)`zo$yj"ic0/uq+rvi|{%hcx`{<1<61>S7'nhbz9 iggkek40Xxh~hd"hmlj-dakYpo}x%ec}{_vewv*jr|Vlbjb!hrg,qb*ak8'}y#z~ats-`kphs484>96[?/f`jr1(aoocmc<8Pp`v`l*`edb%licQxgup-mkusW~m~"bzt^djbj)`zo$yj"ic0/uq+rvi|{%hcx`{<3<61>S7'nhbz9 iggkek40Xxh~hd"hmlj-dakYpo}x%ec}{_vewv*jr|Vlbjb!hrg,qb*ak8'}y#z~ats-`kphs4:4>86[?/f`jr1(aoocmc<8Pp`v`l*`edb%licQxgup-mkusW~m~"bzt^djbj)`zo$yj"ic0/uq+rvi|{%hcx`{_177?P6(okc}8#hhfhdl53Ywi}ic#klck.efjZq`|{$bb~zPwfvq+issWocmc"i}f/pe+bj7&~x${}`{r.alqkrX9<>0Y=!hbht7*caaaoe::R~ntbj,bgjl'noeSzi{r/kmwqYpo}x$`xzPfhdl+bta&{l$ka>!ws-ttkru'je~byQ=559V4*aea>%jjhffn35[ugska%mnae gdl\sbru&`dxxRyhts-oqqYaaoe$kh!rg-dh5(pz&}{by| cnwmpZ5202_;#jlfv5,eccoag86^rbpfn(nkf`#jka_vewv+oi{}U|ky| ltv\bl`h'nxm"h gm2-sw)pxg~y#naznu]g5949=11^<"imiw6-bb`nnf;=S}o{ci-efim(oldT{jz}.hlppZq`|{%gyyQiigm,cw`)zo%l`= xr.usjqt(kfexRj><2<63>S7'nhbz9 iggkek40Xxh~hd"hmlj-dakYpo}x%ec}{_vewv*jr|Vlbjb!hrg,qb*ak8'}y#z~ats-`kphsWm;T<894U1-dflp3&ommeka>6^rbpfn(nkf`#jka_vewv+oi{}U|ky| ltv\bl`h'nxm"h gm2-sw)pxg~y#naznu]g5Z72?2_;#jlfv5,eccoag846[?/f`jr1(aoocmc<8Pp`v`l*`edb%licQxgup-mkusW~m~"bzt^djbj)`zo$yj"ic0/uq+rvi|{%hcx`{_e0?4;3?3\:$kogy4/ddbl`h9?U{mymg/g`oo*abfV}lx fnrv\sbru'eSkgio.eqb+ta'nf;"z| wqlwv*eh}g~Th?2>>4:8Q5)`j`|?"kiiigm22Zvf|jb$jobd/fgm[rasz'ceyQxgup,hprXn`ld#j|i.sd,ci6){%||cz}/bmvjqYc:585955Z0.eams2)nnlbjb?9_qcwgm)ajea$kh`Pwfvq*lht|V}lx!cuu]emci(o{l%~k!hl1,tv*qwf}x$ob{at^f18682?2_;#jlfv5,eccoag8;6[?/f`jr1(aoocmc<8Pp`v`l*`edb%licQxgup-mkusW~m~"bzt^djbj)`zo$yj"ic0/uq+rvi|{%hcx`{_e0\601<]9%lndx;.geemci6>Vzjxnf fcnh+bciW~m~#gasu]tcqt(d|~Tjdh`/fpe*w`(oe:%{!xpovq+firf}Uo>R=:8:W3+bdn~=$mkkgio04\tdrd`&li`f!heo]tcqt)agySzi{r.nvpZ`nnf%l~k }f.eo4+qu'~zex!lotlw[a5;87?37X> gcku0+``n`ld=;Qauak+cdkc&mnbRyhts,jjvrXn~y#a{{_gkek*aun'xm#jb?.vp,suhsz&idyczPd2>2:0><]9%lndx;.geemci6>Vzjxnf fcnh+bciW~m~#gasu]tcqt(d|~Tjdh`/fpe*w`(oe:%{!xpovq+firf}Uo?1<1599V4*aea>%jjhffn35[ugska%mnae gdl\sbru&`dxxRyhts-oqqYaaoe$kh!rg-dh5(pz&}{by| cnwmpZb44:4>;6[?/f`jr1(aoocmc<8Pp`v`l*`edb%licQxgup-mkusW~m~"bzt^djbj)`zo$yj"ic0/uq+rvi|{%hcx`{_e1\401<]9%lndx;.geemci6>Vzjxnf fcnh+bciW~m~#gasu]tcqt(d|~Tjdh`/fpe*w`(oe:%{!xpovq+firf}Uo?R?:7:W3+bdn~=$mkkgio04\tdrd`&li`f!heo]tcqt)agySzi{r.nvpZ`nnf%l~k }f.eo4+qu'~zex!lotlw[a5X:<=0Y=!hbht7*caaaoe::R~ntbj,bgjl'noeSzi{r/kmwqYpo}x$`xzPfhdl+bta&{l$ka>!ws-ttkru'je~byQk3^16f>S7'nhbz9 iggkek40Xxh~hd"hmlj-dakYpo}x%ec}{_vewv*jr|Vlbjb!hrg,qb*kbe&moa#jb/^tbvlhcmq:;<=2?>4a8Q5)`j`|?"kiiigm22Zvf|jb$jobd/fgm[rasz'ceyQxgup,hprXn`ld#j|i.sd,i`k(omg%h`!Pv`pjjac89:;0<>15b9V4*aea>%jjhffn35[ugska%mnae gdl\sbru&`dxxRyhts-oqqYaaoe$kh!rg-nah)`ld$oa"Qyaskm``~789:7=<0:c:W3+bdn~=$mkkgio04\tdrd`&li`f!heo]tcqt)agySzi{r.nvpZ`nnf%l~k }f.ofi*ace'nf#Rxnrhlga}67896:>3;l;T2,cgoq<'lljdh`17]seqeo'ohgg"ijn^udpw(nfz~T{jz}/mww[coag&myj#|i/lgn+bbj&mg$S{o}ioff|56785;828m4U1-dflp3&ommeka>6^rbpfn(nkf`#jka_vewv+oi{}U|ky| ltv\bl`h'nxm"h mdo,cak)ld%Tzl|fneg{456748>59n5Z0.eams2)nnlbjb?9_qcwgm)ajea$kh`Pwfvq*lht|V}lx!cuu]emci(o{l%~k!bel-d`h(ce&U}mgaddz3456;9<4>o6[?/f`jr1(aoocmc<8Pp`v`l*`edb%licQxgup-mkusW~m~"bzt^djbj)`zo$yj"cjm.egi+bj'V|j~d`key2345:6>7?h7X> gcku0+``n`ld=;Qauak+cdkc&mnbRyhts,jjvrXn~y#a{{_gkek*aun'xm#`kb/ffn*ak(Wkyecjjx12349706?01>1:0d<]9%lndx;.geemci6>Vzjxnf fcnh+bciW~m~#gasu]tcqt(d|~Tjdh`/fpe*w`(elg$kic!dl-\rdtnfmos<=>?<2<6f>S7'nhbz9 iggkek40Xxh~hd"hmlj-dakYpo}x%ec}{_vewv*jr|Vlbjb!hrg,qb*kbe&moa#jb/^tbvlhcmq:;<=2;>4`8Q5)`j`|?"kiiigm22Zvf|jb$jobd/fgm[rasz'ceyQxgup,hprXn`ld#j|i.sd,i`k(omg%h`!Pv`pjjac89:;080:b:W3+bdn~=$mkkgio04\tdrd`&li`f!heo]tcqt)agySzi{r.nvpZ`nnf%l~k }f.ofi*ace'nf#Rxnrhlga}67896=28l4U1-dflp3&ommeka>6^rbpfn(nkf`#jka_vewv+oi{}U|ky| ltv\bl`h'nxm"h mdo,cak)ld%Tzl|fneg{45674>4>n6[?/f`jr1(aoocmc<8Pp`v`l*`edb%licQxgup-mkusW~m~"bzt^djbj)`zo$yj"cjm.egi+bj'V|j~d`key2345:?66^rbpfn(nkf`#jka_vewv+oi{}U|ky| ltv\bl`h'nxm"h mdo,cak)ld%ocxzPi^360>S7'nhbz9 iggkek40Xxh~hd"hmlj-dakYpo}x%ec}{_vewv*jr|Vlbjb!hrg,qb*kbe&moa#jb/emvpZoX99??7X> gcku0+``n`ld=;Qauak+cdkc&mnbRyhts,jjvrXn~y#a{{_gkek*aun'xm#`kb/ffn*ak(lfSdQ>1468Q5)`j`|?"kiiigm22Zvf|jb$jobd/fgm[rasz'ceyQxgup,hprXn`ld#j|i.sd,i`k(omg%h`!kotv\mZ75==1^<"imiw6-bb`nnf;=S}o{ci-efim(oldT{jz}.hlppZq`|{%gyyQiigm,cw`)zo%fi`!hdl,gi*bh}}UbS<=:4:W3+bdn~=$mkkgio04\tdrd`&li`f!heo]tcqt)agySzi{r.nvpZ`nnf%l~k }f.ofi*ace'nf#iazt^k\51333\:$kogy4/ddbl`h9?U{mymg/g`oo*abfV}lx fnrv\sbru'eSkgio.eqb+ta'dof#jjb.eo,`jssW`U:98:4U1-dflp3&ommeka>6^rbpfn(nkf`#jka_vewv+oi{}U|ky| ltv\bl`h'nxm"h mdo,cak)ld%ocxzPi^3511=R8&mie{:!ffdjbj71Wykoe!ibmi,c`hXn~y"d`|t^udpw)k}}Umeka gsd-vc)jmd%lh` km.flqqYnW8=>?6[?/f`jr1(aoocmc<8Pp`v`l*`edb%licQxgup-mkusW~m~"bzt^djbj)`zo$yj"cjm.egi+bj'me~xRgP2418Q5)`j`|?"kiiigm22Zvf|jb$jobd/fgm[rasz'ceyQxgup,hprXn`ld#j|i.sd,i`k(omg%h`!kotv\mZ52;2_;#jlfv5,eccoag86^rbpfn(nkf`#jka_vewv+oi{}U|ky| ltv\bl`h'nxm"h mdo,cak)ld%ocxzPi^767>S7'nhbz9 iggkek40Xxh~hd"hmlj-dakYpo}x%ec}{_vewv*jr|Vlbjb!hrg,qb*kbe&moa#jb/emvpZoX><90Y=!hbht7*caaaoe::R~ntbj,bgjl'noeSzi{r/kmwqYpo}x$`xzPfhdl+bta&{l$ahc geo-`h)cg|~TeR9:3:W3+bdn~=$mkkgio04\tdrd`&li`f!heo]tcqt)agySzi{r.nvpZ`nnf%l~k }f.ofi*ace'nf#iazt^k\<05<]9%lndx;.geemci6>Vzjxnf fcnh+bciW~m~#gasu]tcqt(d|~Tjdh`/fpe*w`(elg$kic!dl-gkprXaV3>46[?/f`jr1(aoocmc<8Pp`v`l*`edb%licQxgup-mkusW~m~"bzt^djbj)`zo$yj"cjm.egi+bj'`dxxRC}al]nah3>3\:$kogy4/ddbl`h9?U{mymg/g`oo*abfV}lx fnrv\sbru'eSkgio.eqb+ta'dof#jjb.eo,mkusWDxjaRcjm07b?P6(okc}8#hhfhdl53Ywi}ic#klck.efjZq`|{$bb~zPwfvq+issWocmc"i}f/pe+hcj'nnf"ic ioqw[HtfeVgna<>:a:W3+bdn~=$mkkgio04\tdrd`&li`f!heo]tcqt)agySzi{r.nvpZ`nnf%l~k }f.ofi*ace'nf#d`|t^OqehYjmd;:9l5Z0.eams2)nnlbjb?9_qcwgm)ajea$kh`Pwfvq*lht|V}lx!cuu]emci(o{l%~k!bel-d`h(ce&ceyQBr`o\i`k6:S7'nhbz9 iggkek40Xxh~hd"hmlj-dakYpo}x%ec}{_vewv*jr|Vlbjb!hrg,qb*kbe&moa#jb/hlppZKuidUfi`?:5`9V4*aea>%jjhffn35[ugska%mnae gdl\sbru&`dxxRyhts-oqqYaaoe$kh!rg-nah)`ld$oa"gasu]NvdkXelg::8o4U1-dflp3&ommeka>6^rbpfn(nkf`#jka_vewv+oi{}U|ky| ltv\bl`h'nxm"h mdo,cak)ld%bb~zPMscn[hcj9>?27X> gcku0+``n`ld=;Qauak+cdkc&mnbRyhts,jjvrXn~y#a{{_gkek*aun'xm#`kb/ffn*ak(agyS@|nm^ofi73>3\:$kogy4/ddbl`h9?U{mymg/g`oo*abfV}lx fnrv\sbru'eSkgio.eqb+ta'dof#jjb.eo,mkusWDxjaRcjm27:?P6(okc}8#hhfhdl53Ywi}ic#klck.efjZq`|{$bb~zPwfvq+issWocmc"i}f/pe+hcj'nnf"ic ioqw[HtfeVgna9;6;T2,cgoq<'lljdh`17]seqeo'ohgg"ijn^udpw(nfz~T{jz}/mww[coag&myj#|i/lgn+bbj&mg$ec}{_LpbiZkbe gcku0+``n`ld=;Qauak+cdkc&mnbRyhts,jjvrXn~y#a{{_gkek*aun'xm#`kb/ffn*ak(agyS@|nm^ofi33>3\:$kogy4/ddbl`h9?U{mymg/g`oo*abfV}lx fnrv\sbru'eSkgio.eqb+ta'dof#jjb.eo,mkusWDxjaRcjm67:?P6(okc}8#hhfhdl53Ywi}ic#klck.efjZq`|{$bb~zPwfvq+issWocmc"i}f/pe+hcj'nnf"ic ioqw[HtfeVgna5;6;T2,cgoq<'lljdh`17]seqeo'ohgg"ijn^udpw(nfz~T{jz}/mww[coag&myj#|i/lgn+bbj&mg$ec}{_LpbiZkbe0>27X> gcku0+``n`ld=;Qauak+cdkc&mnbRyhts,jjvrXn~y#a{{_gkek*aun'xm#ob_vp\ak343\:$kogy4/ddbl`h9?U{mymg/g`oo*abfV}lx fnrv\sbru'eSkgio.eqb+ta'{ynae re]qwqYf{{ol9;5Z0.eams2)nnlbjb?9_qcwgm)ajea$kh`Pwfvq*lht|V}lx!cuu]emci(o{l%~k!}su`oo*tcW{ySl}}ef]g500<]9%lndx;.geemci6>Vzjxnf fcnh+bciW~m~#gasu]tcqt(d|~Tjdh`/fpe*w`(zz~i`f!}d^pppZgtzlmTh?;=;T2,cgoq<'lljdh`17]seqeo'ohgg"ijn^udpw(nfz~T{jz}/mww[coag&myj#|i/sqwfim(zmUyyQlol`67>S7'nhbz9 iggkek40Xxh~hd"hmlj-dakYpo}x%ec}{_vewv*jr|Vlbjb!hrg,qb*tt|kf`#jPrrv\gjke9<>0Y=!hbht7*caaaoe::R~ntbj,bgjl'noeSzi{r/kmwqYpo}x$`xzPfhdl+bta&{l$~~zmlj-q`Ztt|Vxnk1?1559V4*aea>%jjhffn35[ugska%mnae gdl\sbru&`dxxRyhts-oqqYaaoe$kh!rg-qwqdkc&xoS}{_sgd8782;2_;#jlfv5,eccoag86^rbpfn(nkf`#jka_vewv+oi{}U|ky| ltv\bl`h'nxm"h rrvahn)ulVxxxR|jg^067>S7'nhbz9 iggkek40Xxh~hd"hmlj-dakYpo}x%ec}{_vewv*jr|Vlbjb!hrg,qb*tt|kf`#z|Prrv\evtbo<<0Y=!hbht7*caaaoe::R~ntbj,bgjl'noeSzi{r/kmwqYpo}x$`xzPfhdl+bta&{l$~~zmlj-tvZtt|Vkx~hiPd075?P6(okc}8#hhfhdl53Ywi}ic#klck.efjZq`|{$bb~zPwfvq+issWocmc"i}f/pe+wusjea${Q}su]bwwc`Wm8>>6[?/f`jr1(aoocmc<8Pp`v`l*`edb%licQxgup-mkusW~m~"bzt^djbj)`zo$yj"||tcnh+rtXzz~Tobcm529V4*aea>%jjhffn35[ugska%mnae gdl\sbru&`dxxRyhts-oqqYaaoe$kh!rg-qwqdkc&}yS}{_bmnf4333\:$kogy4/ddbl`h9?U{mymg/g`oo*abfV}lx fnrv\sbru'eSkgio.eqb+ta'{ynae ws]qwqYumn6;28:4U1-dflp3&ommeka>6^rbpfn(nkf`#jka_vewv+oi{}U|ky| ltv\bl`h'nxm"h rrvahn)pzVxxxR|jg=3=16=R8&mie{:!ffdjbj71Wykoe!ibmi,c`hXn~y"d`|t^udpw)k}}Umeka gsd-vc)u{}hgg"y}_sqw[wc`W9?87X> gcku0+``n`ld=;Qauak+cdkc&mnbRyhts,jjvrXn~y#a{{_gkek*aun'xm#}{bmi,swYu{}UyijQ>349V4*aea>%jjhffn35[ugska%mnae gdl\sbru&`dxxRyhts-oswci;m1^<"imiw6-bb`nnf;=S}o{ci-efim(oldT{jz}.hlppZq`|{%g{ka_`lg4567;l1^<"imiw6-bb`nnf;=S}o{ci-efim(oldT{jz}.hlppZq`|{%g{ka_`lg45679:?0Y=!hbht7*caaaoe::R~ntbj,bgjl'noeSzi{r/kmwqYpo}x$`uhjr2f8Q5)`j`|?"kiiigm22Zvf|jb$jobd/fgm[rasz'ceyQxgup,h}`bzVkeh=>?02g8Q5)`j`|?"kiiigm22Zvf|jb$jobd/fgm[rasz'ceyQxgup,h}`bzVkeh=>?0060?P6(okc}8#hhfhdl53Ywi}ic#klck.efjZq`|{$bb~zPwfvq+vcsWfz"kgio04\mkus;k1^<"imiw6-bb`nnf;=S}o{ci-efim(oldT{jz}.hlppZq`|{%a}bkotv?4;5d3\:$kogy4/ddbl`h9?U{mymg/g`oo*abfV}lx fnrv\sbru'}g{`iazt=33:6e<]9%lndx;.geemci6>Vzjxnf fcnh+bciW~m~#gasu]tcqt(|dzghb{{<03=7f=R8&mie{:!ffdjbj71Wykoe!ibmi,c`hXn~y"d`|t^udpw)seyfocxz313<0g>S7'nhbz9 iggkek40Xxh~hd"hmlj-dakYpo}x%ec}{_vewv*rjxendyy2>3?1`?P6(okc}8#hhfhdl53Ywi}ic#klck.efjZq`|{$bb~zPwfvq+qkwdme~x1?;>2a8Q5)`j`|?"kiiigm22Zvf|jb$jobd/fgm[rasz'ceyQxgup,phvklf0<;13c9V4*aea>%jjhffn35[ugska%mnae gdl\sbru&`dxxRyhts-wiujcg|~7=3=m;T2,cgoq<'lljdh`17]seqeo'ohgg"ijn^udpw(nfz~T{jz}/uoshair|585?o5Z0.eams2)nnlbjb?9_qcwgm)ajea$kh`Pwfvq*lht|V}lx!{mqngkpr;;79i7X> gcku0+``n`ld=;Qauak+cdkc&mnbRyhts,jjvrXn~y#yclemvp929;k1^<"imiw6-bb`nnf;=S}o{ci-efim(oldT{jz}.hlppZq`|{%a}bkotv?1;5e3\:$kogy4/ddbl`h9?U{mymg/g`oo*abfV}lx fnrv\sbru'}g{`iazt=4=7g=R8&mie{:!ffdjbj71Wykoe!ibmi,c`hXn~y"d`|t^udpw)seyfocxz37?1a?P6(okc}8#hhfhdl53Ywi}ic#klck.efjZq`|{$bb~zPwfvq+qkwdme~x1613c9V4*aea>%jjhffn35[ugska%mnae gdl\sbru&`dxxRyhts-wiujcg|~753=l;T2,cgoq<'lljdh`17]seqeo'ohgg"ijn^udpw(nfz~T{jz}/uoshair|y6;2>m4U1-dflp3&ommeka>6^rbpfn(nkf`#jka_vewv+oi{}U|ky| tlro`jssx5;5?55Z0.eams2)nnlbjb?9_qcwgm)ajea$kh`Pwfvq*lht|V}lx!xrbnhfdt4n2_;#jlfv5,eccoag8S7'nhbz9 iggkek40Xxh~hd"gabmi,vaYu{}Uyij<8;T2,cgoq<'lljdh`17]seqeo'`di`f!xr^pppZ`e:11^<"imiw6-bb`nnf;=S}o{ci-jjgjl'~xT~~zPrde13>S7'nhbz9 iggkek40Xxh~hd"acbmi,rdjnlVmnb?h4U1-dflp3&ommeka>6^rbpfn(gehgg"xnlhf\c`hXign;<=><0:W3+bdn~=$mkkgio04\tdrd`&egnae v`nj`ZabfVkeh=>?00c8QVCUWHFBM^m4URGQ[SOTAKFN?6XLC89UM@QX\PZN86YLLJ08S@3<_[IGGl5XRBMVJQ:76k1\^NAZNU>24;b<_[IDYCZ31083:g=PZJE^BY2>1?c8SWEH]G^7=3o4WSALQKR;:7k0[_M@UOV?7;g<_[IDYCZ34?c8SWEH]G^793o4WSALQKR;>7k0[_M@UOV?3;g<_[IDYCZ38?c8SWEH]G^753:4WSGM1>QUM[X:h6VFLHL[)]BE(9$:,^ZZB!2-5%GTK@C=7U][LH@4?]USWNDO;6V\T^T@Gg=_WJEYIRGAFN33?]YDG[OTECH@_MKPP3=_lkUBhk5Wdi]SvlkQm{ybcc??;Yfn[Hgmg{\n~~g`n028\akXE`dd~[k}shmmg>gkefyShctx`8eikh{}Umyab9;cc`opvc3kkhgx~Pm`phaw5bf|hUhcx`{(6+g?agsiVidycz'8(f8`drfWje~by&6)g9geqgXkfex1750?58`gosm{x=7iga(1+5?aoi 8#<7iga(02*3>bnf!;:%:5kio*26,1'8;ekm,42.?2nbb%?:)69gmk.6> =0hd`'16+5?aoi ;#=7iga(2+5?aoi =#=7iga(4+5?aoi ?#=7iga(6+5?aoi 1#=7iga(8+5?aoi494<7iga<02=3>bnf5;:2:5kio>26;108;ekm8429?2nbb1?:>69gmk:6>730hd`31683:2=cag6:;384dhl?5;0384dhl?7;00(:8`jss 8;"46j`uu*26,>bh}}"::$64dnww,41.?2ndyy&=)69gkpr/; =0hb{{(5+4?air|!?";6j`uu*5-2=cg|~#;$94dnww,=/03me~x%7&7:flqq:7611ocxz311<;?air|5;:255kotv?578?3me~x1?<>99gkpr;9=437iazt=36:==cg|~7=;0n;emvp97029437iazt=34:2=cg|~7=394dnww87803me~x1=17:flqq:36>1ocxz35?58`jss4?4<7iazt=5=3>bh}}632:5kotv?=;>cik5:gntq502lbjbQheogqeqiuW>T>!.Losgdak&>&;$;8dQfp368bpjk?2cexRmck99mcfdraen37bxjrgnlsd=wzfmTi`~{y068twi`Wlg{xtQ{hsgpl-6.9=1{~biPelrw}Zrozlyc$<'>4:rqkbYbey~rSyf}erj+6,733yxdkRkbpu{\pmtb{a"8%<:4psmd[`kw|pUdk|h)6*51=wzfmTi`~{y^vkv`uo <#:86~}of]fiur~W}byi~f'6(37?uthoVof|ywPtipfwm.0!8>0|ah_dosp|Ys`{oxd%6&159svjaXmdzuRzgrdqk,2zycjQjmqvz[qnumzb757>11c9svjaXmdzuRzgrdqk[dutm{~#<$?m;qplcZcjx}sTxe|jsi]bwvcu|!;"=o5rne\ahvsqV~c~h}g_`qpawr/: ;i7}|`g^gntqX|axneQnsrgqp-5.9k1{~biPelrw}ZrozlycSl}|esv+0,7e3yxdkRkbpu{\pmtb{aUj~k}t)7*5g=wzfmTi`~{y^vkv`uoWhyxiz'6(3a?uthoVof|ywPtipfwmYf{zoyx%9&1c9svjaXmdzuRzgrdqk[dutm{~#4$?m;qplcZcjx}sTxe|jsi]bwvcu|!3"=i5rne\ahvsqV~c~h}g_`qpawr;13:5=o5rne\ahvsqV~c~h}g_ogdeqc/8 ;i7}|`g^gntqX|axneQaefcwa-7.9k1{~biPelrw}ZrozlycSckhaug+6,7e3yxdkRkbpu{\pmtb{aUeijo{e)1*5g=wzfmTi`~{y^vkv`uoWgolmyk'4(3a?uthoVof|ywPtipfwmYimnki%;&1c9svjaXmdzuRzgrdqk[kc`i}o#:$?m;qplcZcjx}sTxe|jsi]mabgsm!="=o5rne\ahvsqV~c~h}g_ogdeqc/0 ;i7}|`g^gntqX|axneQaefcwa-?.9m1{~biPelrw}ZrozlycSckhaug?=?6912zycjQiumn27>vugnUmyabPtipfwm.7!890|ah_gwohZrozlyc$<'>3:rqkbYa}efTxe|jsi*1-45vugnUmyabPtipfwm.?!890|ah_gwohZrozlyc$4'>5:rqkbYa}efTxe|jsi>:>586i2zycjQiumn\pmtb{aUj~k}t)2*5d=wzfmTjxbc_ujqavnXizyn~y&>)0c8twi`Wog`Rzgrdqk[dutm{~#>$?n;qplcZ`rdeUdk|h^cpw`ts :#:m6~}of]eqijX|axneQnsrgqp-2.9h1{~biPftno[qnumzbTm~}jru*6-4ga:rqkbYa}efTxe|jsi]bwvcu|!2"=l5rne\bpjkW}byi~fParqfvq.>!8i0|ah_gwohZrozlycSl}|esv?=?699h1{~biPftno[qnumzbTbhintd*3-4ga:rqkbYa}efTxe|jsi]mabgsm!9"=l5rne\bpjkW}byi~fPndebp`.3!8k0|ah_gwohZrozlycSckhaug+1,7f3yxdkRhzlm]wlwct`Vdnklzj(7+2e>vugnUmyabPtipfwmYimnki%9&1`9svjaXn|fgSyf}erj\j`af|l"3%4re]geqgXkfex%:&119q`Zbf|hUhcx`{(4+24>tcWmkmRm`uov+2,773{nThlzn_bmvjq.0!8:0~iQkauc\gjsi|!2"==5}d^fbpdYdg|d$4'>0:pg[agsiVidycz30?31?wbXlh~jSnaznu>:>5823{nTic84re]qwq5uu{}8=7yc/^ad+}okagrTjdh`_ewbhuiu|V;3t$??;vp\`drfWje~by&<)028swYci}kTob{at)6*55=pzVnjxlQlotlw,0/682}ySio{a^alqkr/> ;;7z|Pd`vb[firf}"<%<>4ws]geqgXkfex%6&119tvZbf|hUhcx`{(8+26>quWmkmRm`uov?=?69=2}ySh`9;vp\vvr6i2rb`d`w_gkekZbriezd~yQ>8y3h71=aecetRhffn]gqdjwg{~T=5v>k^djbjY`mgoymya}_w6\6Z~t|V;vLM~8219CD}56=3L187?tS2;96g>=?3;8>;891;3;`0c|f;?i6<5a24a90>"5=0099>5rS2:96g>=?3;8>;891;3;`0c<[h31>oj50;30630193;3h8h4S2:96gb=83;8>;891;3;`37:0yP7<<5j10<6<==6742>4>c=l1/>8952cc8rQ7783:1=7?5d9yP7<<5j10<6<==6742>4>c=l1/>9>5a`9U60g=:ri<7?4uc394>{#m00:m6l<2683>7c=;38nwE<oo5}n123?6=3`9:<7>5;n0ab?6=3`9997>5;n0af?6=3f8i57>5;h12=?6=3f9::7>5;h126?6=3f82o7>5$d`96dbi3:1(hl52`f8j`g=:21d>4750;&ff?4fl2dnm7=4;n0:lj4ndc90>=h:0=1<7*jb;0b`>hbi3?07b<66;29 `d=:hn0bho56:9l6<3=83.nn75$d`96dbl?50;&ff?4fl2dnm7l4;n0b4?6=,lh1>lj4ndc9g>=h:0l1<7*jb;0b`>hbi3n07b<6e;29 `d=:hn0bho5e:9l65$d`96db5<#mk09mi5ae`825>=n:>=1<7*jb;0;<>hbi3:07d<86;29 `d=:120bho51:9j623=83.nn7<78:lfe?4<3`8<87>5$d`96=>:?50;&ff?4?02dnm784;h044?6=,lh1>564ndc93>=n:>l1<7*jb;0;<>hbi3207d<8e;29 `d=:120bho59:9j62b=83.nn7<78:lfe?g<3`85$d`96=>:750;&ff?4?02dnm7k4;h04564ndc9b>=n:?l1<7*jb;0;<>hbi3;;76g=6d83>!ce2;237ckn:038?l57;3:17o<5<>>3kh6i6tH31f?_53281=>4k:d8b>`<683;?6k46:019`?e=j3k147s+111977><,h=15i5+24596gg<,l>1i:5`24f94?=n;8;1<75f2b;94?"bj38hm6`ja;28?l4d03:1(hl52bc8j`g=921b>n950;&ff?4di2dnm7<4;h0`2?6=,lh1>no4ndc97>=n:j?1<7*jb;0`e>hbi3>07d7>5$d`96fgh?50;9j742=831d?<950;9j6c0=83.nn75$d`96c1k<50;&ff?4a?2dnm7:4;h0e5?6=,lh1>k94ndc91>=n:o:1<7*jb;0e3>hbi3<07d<3`8nh7>5$d`96c1=h;931<7*jb;13b>hbi3>07b=?8;29 `d=;9l0bho55:9l751=83.nn7=?f:lfe?0<3f9;:7>5$d`975`i:50;&ff?4c=2dnm7>4;h0g7?6=,lh1>i;4ndc95>=n:m81<7*jb;0g1>hbi3807d5$d`96a3nm50;&ff?4c=2dnm764;h0`f?6=,lh1>i;4ndc9=>=n;;?1<75`33194?"bj39986`ja;28?j55:3:1(hl53368j`g=921d???50;&ff?55<2dnm7<4;n114?6=,lh1??:4ndc97>=h;8l1<7*jb;110>hbi3>07b=>e;29 `d=;;>0bho55:9l74b=83.nn7==4:lfe?0<3f9:o7>5$d`9772ol50;9l6g?=831b?<750;9j6`d=83.nn75$d`96`eh950;&ff?4bk2dnm7:4;h0f2?6=,lh1>hm4ndc91>=n:l?1<7*jb;0fg>hbi3<07d<3`8n>7>5$d`96`ehbi3:07b<6b;29 `d=:hn0bho51:9l65$d`96db?3:1(hl52`f8j`g==21d>4850;&ff?4fl2dnm784;n0:1?6=,lh1>lj4ndc93>=h:h>1<7*jb;0b`>hbi3207b5$d`96dbn3:1(hl52`f8j`g=l21d>4k50;&ff?4fl2dnm7k4;n0:`?6=,lh1>lj4ndc9b>=h:0>1<7*jb;0b`>hbi3;;76a=9283>!ce2;ko7ckn:038?l40?3:1(hl529:8j`g=821b>:850;&ff?4?02dnm7?4;h041?6=,lh1>564ndc96>=n:>>1<7*jb;0;<>hbi3907d<83;29 `d=:120bho54:9j624=83.nn7<78:lfe?3<3`8<=7>5$d`96=>:k50;&ff?4?02dnm774;h04`?6=,lh1>564ndc9e>=n:>i1<7*jb;0;<>hbi3h07d<8b;29 `d=:120bho5c:9j62g=83.nn7<78:lfe?b<3`8<57>5$d`96=>1:9l60c=831b>8h50;9j757=83.nn7=?2:lfe?6<3`9;<7>5$d`97546`ja;08?l4am3:1(hl53108j`g=;21b>kj50;&ff?57:2dnm7:4;h0eg?6=,lh1?=<4ndc91>=n:oh1<7*jb;136>hbi3<07d<3`8m47>5$d`9754;750;&ff?41k2dnm7<4;n05;m4ndc97>=h:?=1<7*jb;05g>hbi3>07b<96;29 `d=:?i0bho55:9l633=83.nn7<9c:lfe?0<3f8=87>5$d`963e;j50;9j6a`=83.nn75$d`96`6il50;&ff?4b82dnm7:4;h0ge?6=,lh1>h>4ndc91>=n:m31<7*jb;0f4>hbi3<07d<3`8o:7>5$d`96`6i>m3:17pl=3783>1<729q/===5999K602<@;9n7E=>;%c6>4=n;<0;66g290>6=4?{%337??>3A8>86F=3d9K74=#i<0:7d=::188m60=831b?l4?::kfg?6=3foo6=44}c00028:<>N5==1C>>k4H238 d3=92c897>5;h1b>5<>{e::=1<7;50;2x 4642030D?;;;I00a>N492.j97?4i2794?=n;?0;66g86F=3d9'e0<63`9>6=44i2594?=n;h0;66ajd;29?xd6810;694?:1y'555=1<1C>8:4H31f?l522900e>950;9j7d<722enh7>5;|`15g<72=0;6=u+1119=0=O:<>0D?=j;h16>5<>ibl3:17pl=1d83>1<729q/===5949K602<@;9n7d=::188m61=831b?l4?::mf`?6=3th:<84?:583>5}#9991555G2468L75b3A9:7)o::79j70<722c8m7>5;hg`>5<5<3290;w)??3;;;?M42<2B9?h5+a485?l522900e>o50;9jaf<722enh7>5;|`14g<72:0;6=u+1119=1=O:<>0D?=j;I12?!g2281b?84?::k0e?6=3foo6=44}c020?6=;3:1028:0>N5==1C>>k4H238 d3=92c897>5;h1b>5<5<4290;w)??3;;7?M42<2B9?h5G309'e0<63`9>6=44i2c94?=hmm0;66sm20094?3=83:p(<><:8;8L7333A88i6F<1:&b1?7>o4i3:17dkl:188k`b=831vn??<:180>5<7s-;;?77;;I060>N5;l1C?<5+a482?l522900e>o50;9laa<722wi>=750;794?6|,8:86474H377?M44m2B8=6*n5;38m63=831b?;4?::k0e?6=3`oh6=44odf94?=zj;;:6=4;:183!77;3337E<:4:J17`=#i<0:7d=::188m6g=831bin4?::mf`?6=3th9==4?:583>5}#9991555G2468L75b3-k>6<5f3483>>o4i3:17dkl:188k`b=831vn??n:187>5<7s-;;?777;I060>N5;l1/m84>;h16>5<>ibl3:17pl=1883>1<729q/===5999K602<@;9n7)o::09j70<722c8m7>5;hg`>5<5<3290;w)??3;;;?M42<2B9?h5+a485?l522900e>o50;9jaf<722enh7>5;|`22c<72=0;6=u+1119===O:<>0D?=j;%c6>3=n;<0;66g86F=3d9'e0<63`9>6=44i2c94?=hmm0;66sm19:94?3=83:p(<><:848L7333A88i6*n5;38m63=831b?;4?::k03?6=3`9j6=44odf94?=zj8226=4::183!77;33=7E<:4:J17`=#i<0:7d=::188m60=831b?:4?::k0e?6=3foo6=44}c3;e?6==3:1028:2>N5==1C>>k4$`795>o4=3:17d=9:188m61=831b?l4?::mf`?6=3th:4o4?:483>5}#99915;5G2468L75b3-k>6<5f3483>>o4>3:17d=8:188m6g=831dii4?::a5d2=83>1<7>t$020><><@;??7E<>obk3:17bkk:188yg7>;3:197>50z&246<>12B9995G22g8 d3=92c897>5;h15>5<>ibl3:17pl>9e83>1<729q/===5999K602<@;9n7)o::09j70<722c8m7>5;hg`>5<5<2290;w)??3;;:?M42<2B9?h5+a485?l522900e>850;9j7d<722cno7>5;ngg>5<55;294~"68:02:6F=559K66c<,h?1=6g<5;29?l512900e>950;9j7d<722enh7>5;|`2<7<72<0;6=u+1119=3=O:<>0D?=j;%c6>4=n;<0;66g<6;29?l502900e>o50;9laa<722wi=5=50;794?6|,8:86484H377?M44m2.j97?4i2794?=n;?0;66g<7;29?l5f2900chj50;9~f746290=n7>50z&246<>i2B9995G22g8^62=>r;>6<651782=?762881q)=?:49m7g<6:2.3h7??2:&:f??43-2m64=4$829=6=#:o087dki:188mcb=831bjk4?::k106<722c99<4?::m1`?6=3f8n6=44o9g94?=h1j0;66aie;29?j42:3:17d;::18'ag<2<2dnm7>4;h70>5<#mk0>86`ja;38?l36290/io4:4:lfe?4<3`?;6=4+ec860>hbi3907d:i:18'ag<2<2dnm7:4;h6f>5<#mk0>86`ja;78?l2c290/io4:4:lfe?0<3`>h6=4+ec860>hbi3=07d:m:18'ag<2<2dnm764;h6b>5<#mk0>86`ja;;8?l2>290/io4:4:lfe?g<3`>36=4+ec860>hbi3h07d:9:18'ag<2<2dnm7m4;h66>5<#mk0>86`ja;f8?l23290/io4:4:lfe?c<3`>86=4+ec860>hbi3l07d:=:18'ag<2<2dnm7??;:k75?6=,lh1995ae`825>=n<90;6)km:468j`g=9;10e>h50;&ff?333goj6<=4;h1f>5<#mk0>86`ja;37?>o4l3:1(hl5559mad<6=21b9n4?:%ga>0257>5$d`911=imh0:565f5983>!ce2<>0bho51`98m01=83.nn7;;;ogb>4d<3`?=6=4+ec860>hbi3;h76g:2;29 `d===1eil4>d:9j02<72-oi68:4ndc95`=:18'ag<182dnm7>4;h7e>5<#mk0=<6`ja;38?l3b290/io490:lfe?4<3`?o6=4+ec854>hbi3907b9m:18'ag<0i2dnm7>4;n5:>5<#mk0hbi3907b9::18'ag<0i2dnm7:4;n57>5<#mk0hbi3=07b9>:18'ag<0i2dnm764;n53>5<#mk0hbi3h07b8l:18'ag<0i2dnm7m4;n4a>5<#mk0hbi3l07b87:18'ag<0i2dnm7??;:m53?6=,lh1;l5ae`825>=h>?0;6)km:6c8j`g=9;10c;;50;&ff?1f3goj6<=4;n47>5<#mk0i1;3:1(hl57`9mad<6=21d4?4?:%ga>2g7290/io48a:lfe?7?32e5$d`93d=imh0:565`7d83>!ce2>k0bho51`98k2b=83.nn79n;ogb>4d<3f=h6=4+ec84e>hbi3;h76a88;29 `d=?h1eil4>d:9l2a<72-oi6:o4ndc95`=2dnm7>4;n:6>5<#mk03:6`ja;38?j>3290/io476:lfe?4<3f286=4+ec8;2>hbi3907bh<:18'ag4;nd2>5<#mk0m>6`ja;38?j`d290/io4i2:lfe?4<3fli6=4+ec8e6>hbi3907bhn:18'ag5<#mk0m>6`ja;78?j`?290/io4i2:lfe?0<3fl<6=4+ec8e6>hbi3=07bh9:18'ag5<#mk0m>6`ja;;8?j`3290/io4i2:lfe?g<3fl;6=4+ec8e6>hbi3h07b<;7;29 `d=:=<0bho50:9l613=83.nn7<;6:lfe?7<3f8><7>5$d`961065`25d94?"bj38?:6`ja;18?j43m3:1(hl52548j`g=<21d>9j50;&ff?43>2dnm7;4;n07g?6=,lh1>984ndc92>=h:=h1<7*jb;072>hbi3=07b<;a;29 `d=:=<0bho58:9l61?=83.nn7<;6:lfe??<3f8?47>5$d`96108:4H31f?!g2281b?84?::k03?6=3`9j6=44odf94?=zj8;o6=4;:183!77;33>7E<:4:J17`=#i<0:7d=::188m61=831b?l4?::mf`?6=3th:=n4?:583>5}#9991585G2468L75b3-k>6<5f3483>>o4?3:17d=n:188k`b=831vn5<7s-;;?77:;I060>N5;l1/m84>;h16>5<>ibl3:17pl>4583>1<729q/===5949K602<@;9n7)o::09j70<722c8;7>5;h1b>5<5<3290;w)??3;;6?M42<2B9?h5+a482?l522900e>950;9j7d<722enh7>5;|`207<72=0;6=u+1119=0=O:<>0D?=j;%c6>4=n;<0;66g<7;29?l5f2900chj50;9~f426290?6=4?{%337??23A8>86F=3d9'e0<63`9>6=44i2594?=n;h0;66ajd;29?xd6=o0;694?:1y'555=1<1C>8:4H31f?!g2281b?84?::k03?6=3`9j6=44odf94?=zj8?n6=4;:183!77;33>7E<:4:J17`=#i<0:7d=::188m61=831b?l4?::mf`?6=3th:9i4?:583>5}#9991585G2468L75b3-k>6<5f3483>>o4?3:17d=n:188k`b=831vn<;l:187>5<7s-;;?77:;I060>N5;l1/m84>;h16>5<>ibl3:17pl>3883>1<729q/===5949K602<@;9n7)o::09j70<722c8;7>5;h1b>5<5<3290;w)??3;;6?M42<2B9?h5+a482?l522900e>950;9j7d<722enh7>5;|`272<72=0;6=u+1119=0=O:<>0D?=j;%c6>4=n;<0;66g<7;29?l5f2900chj50;9~f451290?6=4?{%337??23A8>86F=3d9'e0<63`9>6=44i2594?=n;h0;66ajd;29?xd6=>0;694?:1y'555=1<1C>8:4H31f?M563-k>6<5f3483>>o4?3:17d=n:188k`b=831vn<;9:187>5<7s-;;?77:;I060>N5;l1C?<5+a482?l522900e>950;9j7d<722enh7>5;|`210<72=0;6=u+1119=0=O:<>0D?=j;I12?!g2281b?84?::k03?6=3`9j6=44odf94?=zj8??6=4;:183!77;33>7E<:4:J17`=O;81/m84>;h16>5<>ibl3:17pl>3083>1<729q/===5949K602<@;9n7E=>;%c6>4=n;<0;66g<7;29?l5f2900chj50;9~f457290?6=4?{%337??23A8>86F=3d9K74=#i<0:7d=::188m61=831b?l4?::mf`?6=3th:>k4?:583>5}#9991585G2468L75b3A9:7)o::09j70<722c8;7>5;h1b>5<5<3290;w)??3;;6?M42<2B9?h5G309'e0<63`9>6=44i2594?=n;h0;66ajd;29?xd6:00;694?:1y'555=1<1C>8:4H31f?!g2281b?84?::k03?6=3`9j6=44odf94?=zj8836=4;:183!77;33>7E<:4:J17`=#i<0:7d=::188m61=831b?l4?::mf`?6=3th:>:4?:583>5}#9991585G2468L75b3-k>6<5f3483>>o4?3:17d=n:188k`b=831vn<<9:187>5<7s-;;?77:;I060>N5;l1/m84>;h16>5<>ibl3:17pl>4g83>1<729q/===5949K602<@;9n7)o::09j70<722c8;7>5;h1b>5<5<3290;w)??3;;6?M42<2B9?h5+a482?l522900e>950;9j7d<722enh7>5;|`20a<72=0;6=u+1119=0=O:<>0D?=j;%c6>4=n;<0;66g<7;29?l5f2900chj50;9~f42d290?6=4?{%337??23A8>86F=3d9'e0<63`9>6=44i2594?=n;h0;66ajd;29?xd6no0;6i4?:1y'555=ml1C>8:4H31f?l4?2900e?750;9j6d<722c9n7>5;h1b>5<>o?j3:17d6l:188m7262900e?:=:188k4662900c5650;9~f4`b290o6=4?{%337?cb3A8>86F=3d9j6=<722c957>5;h0b>5<>o?13:17d6n:188m=d=831b4n4?::k104<722c98?4?::m244<722e347>5;|`2ba<72m0;6=u+1119a`=O:<>0D?=j;h0;>5<>o5j3:17d=n:188m=?=831b4l4?::k;f?6=3`2h6=44i362>5<96=44o022>5<5>o513:17d>o5<;0;66a>0083>>i?03:17pl>fc83>a<729q/===5ed9K602<@;9n7d<7:188m7?=831b>l4?::k1f?6=3`9j6=44i9;94?=n0h0;66g7b;29?l>d2900e?:>:188m7252900c<>>:188k=>=831vn5<7s-;;?7kj;I060>N5;l1b>54?::k1=?6=3`8j6=44i3`94?=n;h0;66g79;29?l>f2900e5l50;9j5}#9991ih5G2468L75b3`836=44i3;94?=n:h0;66g=b;29?l5f2900e5750;9j5;h:`>5<:6=44i361>5<5;h:b>5<>o5<80;66g=4383>>i6880;66a78;29?xd6n00;6i4?:1y'555=ml1C>8:4H31f?l4?2900e?750;9j6d<722c9n7>5;h1b>5<>o?j3:17d6l:188m7262900e?:=:188k4662900c5650;9~f761290o6=4?{%337?cb3A8>86F=3d9j6=<722c957>5;h0b>5<>o?13:17d6n:188m=d=831b4n4?::k104<722c98?4?::m244<722e347>5;|`140<72m0;6=u+1119a`=O:<>0D?=j;h0;>5<>o5j3:17d=n:188m=?=831b4l4?::k;f?6=3`2h6=44i362>5<96=44o022>5<5>o513:17d>o5<;0;66a>0083>>i?03:17pl=0283>a<729q/===5ed9K602<@;9n7d<7:188m7?=831b>l4?::k1f?6=3`9j6=44i9;94?=n0h0;66g7b;29?l>d2900e?:>:188m7252900c<>>:188k=>=831vn?>=:18g>5<7s-;;?7kj;I060>N5;l1b>54?::k1=?6=3`8j6=44i3`94?=n;h0;66g79;29?l>f2900e5l50;9j5}#9991ih5G2468L75b3`836=44i3;94?=n:h0;66g=b;29?l5f2900e5750;9j5;h:`>5<:6=44i361>5<5;h:b>5<>o5<80;66g=4383>>i6880;66a78;29?xd6n?0;6i4?:1y'555=ml1C>8:4H31f?l4?2900e?750;9j6d<722c9n7>5;h1b>5<>o?j3:17d6l:188m7262900e?:=:188k4662900c5650;9~f767290o6=4?{%337?cb3A8>86F=3d9j6=<722c957>5;h0b>5<>o?13:17d6n:188m=d=831b4n4?::k104<722c98?4?::m244<722e347>5;|`2aa<72=0;6=u+1119=2=O:<>0D?=j;%c6>4=n;<0;66g<6;29?l5f2900chj50;9~f4cd290?6=4?{%337??03A8>86F=3d9'e0<63`9>6=44i2494?=n;h0;66ajd;29?xd6mk0;694?:1y'555=1>1C>8:4H31f?!g2281b?84?::k02?6=3`9j6=44odf94?=zj8oj6=4;:183!77;33<7E<:4:J17`=#i<0:7d=::188m60=831b?l4?::mf`?6=3th:i44?:583>5}#99915:5G2468L75b3-k>6<5f3483>>o4>3:17d=n:188k`b=831vn5<7s-;;?778;I060>N5;l1/m84>;h16>5<>ibl3:17pl>e683>1<729q/===5969K602<@;9n7)o::09j70<722c8:7>5;h1b>5<5<3290;w)??3;;4?M42<2B9?h5+a482?l522900e>850;9j7d<722enh7>5;|`2b0<72=0;6=u+1119=2=O:<>0D?=j;%c6>4=n;<0;66g<6;29?l5f2900chj50;9~f4`3290?6=4?{%337??03A8>86F=3d9'e0<63`9>6=44i2494?=n;h0;66ajd;29?xd6n:0;694?:1y'555=1>1C>8:4H31f?!g2281b?84?::k02?6=3`9j6=44odf94?=zj8l96=4;:183!77;33<7E<:4:J17`=#i<0:7d=::188m60=831b?l4?::mf`?6=3th:j<4?:583>5}#99915:5G2468L75b3-k>6<5f3483>>o4>3:17d=n:188k`b=831vn5<7s-;;?778;I060>N5;l1/m84>;h16>5<>ibl3:17pl>eg83>1<729q/===5969K602<@;9n7)o::09j70<722c8:7>5;h1b>5<5<3290;w)??3;;4?M42<2B9?h5+a482?l522900e>850;9j7d<722enh7>5;|`2a0<72=0;6=u+1119=2=O:<>0D?=j;%c6>4=n;<0;66g<6;29?l5f2900chj50;9~f4c3290?6=4?{%337??03A8>86F=3d9'e0<63`9>6=44i2494?=n;h0;66ajd;29?xd6j00;684?:1y'555=1?1C>8:4H31f?!g2281b?84?::k02?6=3`9<6=44i2c94?=hmm0;66sm1c:94?3=83:p(<><:848L7333A88i6*n5;38m63=831b?;4?::k03?6=3`9j6=44odf94?=zj8h<6=4::183!77;3327E<:4:J17`=#i<0=7d=::188m60=831b?l4?::kfg?6=3foo6=44}c3a2?6==3:1028:=>N5==1C>>k4$`792>o4=3:17d=9:188m6g=831bin4?::mf`?6=3th:nh4?:483>5}#99915;5G2468L75b3-k>6<5f3483>>o4>3:17d=8:188m6g=831dii4?::a5g`=83?1<7>t$020>>o4i3:17dkl:188k`b=831vn5<7s-;;?779;I060>N5;l1/m84>;h16>5<>o4i3:17bkk:188yg7d93:197>50z&246<>>2B9995G22g8 d3=92c897>5;h15>5<>ibl3:17pl>c783>0<729q/===5989K602<@;9n7)o::79j70<722c8:7>5;h1b>5<>{e9j=1<7;50;2x 46420<0D?;;;I00a>"f=3;0e>;50;9j73<722c8;7>5;h1b>5<5<2290;w)??3;;5?M42<2B9?h5+a482?l522900e>850;9j72<722c8m7>5;ngg>5<55;294~"68:02:6F=559K66c<,h?1=6g<5;29?l512900e>950;9j7d<722enh7>5;|`2`4<72<0;6=u+1119=3=O:<>0D?=j;%c6>4=n;<0;66g<6;29?l502900e>o50;9laa<722wi=i>50;794?6|,8:86484H377?M44m2.j97?4i2794?=n;?0;66g<7;29?l5f2900chj50;9~f4ea290>6=4?{%337??13A8>86F=3d9'e0<63`9>6=44i2494?=n;>0;66g466:J111=O::o0(l;51:k01?6=3`9=6=44i2594?=n;h0;66ajd;29?xd59?0;6>4?:1y'555=ik1C>8:4H31f?!g228=0el?50;9je7<722en:7>5;|`14a<72:0;6=u+1119eg=O:<>0D?=j;%c6>41>ib>3:17pl=3b83>6<729q/===5ac9K602<@;9n7)o::058md7=831bm?4?::mf2?6=3th:;?4?:283>5}#9991mo5G2468L75b3-k>6?<4i`394?=ni;0;66aj6;29?xd6io0;6>4?:1y'555=ik1C>8:4H31f?!g228n0el?50;9je7<722en:7>5;|`23<<72:0;6=u+1119eg=O:<>0D?=j;%c6>4b>ib>3:17pl>1783>6<729q/===5ac9K602<@;9n7)o::0f8md7=831bm?4?::mf2?6=3th:=84?:283>5}#9991mo5G2468L75b3-k>64?:1y'555=ik1C>8:4H31f?!g228n0el?50;9je7<722en:7>5;|`255<72:0;6=u+1119eg=O:<>0D?=j;%c6>4b>ib>3:17pl>0g83>6<729q/===5ac9K602<@;9n7)o::0f8md7=831bm?4?::mf2?6=3th:5}#9991mo5G2468L75b3-k>68:4H31f?!g228l0el?50;9je7<722cj?7>5;ng5>5<54;294~"68:0jo6F=559K66c<,h?1=k5fa083>>of:3:17do<:188k`0=831vn:186>5<7s-;;?7ok;I060>N5;l1/m84=0:kb5?6=3`k96=44i`194?=ni=0;66aj6;29?xd6?k0;684?:1y'555=im1C>8:4H31f?!g22;:0el?50;9je7<722cj?7>5;hc7>5<5<4290;w)??3;ca?M42<2B9?h5+a4806>of93:17do=:188k`0=831vn<>n:180>5<7s-;;?7om;I060>N5;l1/m849;hc2>5<>{e:;:1<7;50;2x 4642hn0D?;;;I00a>"f=38h7do>:188md4=831bm>4?::kb0?6=3fo=6=44}c02`?6==3:1028b`>N5==1C>>k4$`795g=ni80;66gn2;29?lg42900el:50;9la3<722wi=4h50;794?6|,8:86lj4H377?M44m2.j97<9;hc2>5<>of<3:17bk9:188yg7f83:197>50z&246<:`f8L7333A88i6*n5;;1?lg62900el<50;9je6<722cj87>5;ng5>5<55;294~"68:0jh6F=559K66c<,h?1>>5fa083>>of:3:17do<:188md2=831di;4?::a53?=83?1<7>t$020>db<@;??7E<4nd:J111=O::o0(l;5279je4<722cj>7>5;hc0>5<1<75`e783>>{e9?=1<7;50;2x 4642hn0D?;;;I00a>"f=3397do>:188md4=831bm>4?::kb0?6=3fo=6=44}c347?6=;3:1028bf>N5==1C>>k4$`7952=ni80;66gn2;29?jc12900qo?>1;297?6=8r.:<>4nb:J111=O::o0(l;51e9je4<722cj>7>5;ng5>5<53;294~"68:0jn6F=559K66c<,h?1=i5fa083>>of:3:17bk9:188yg7?l3:1?7>50z&246028b`>N5==1C>>k4$`7963=ni80;66gn2;29?lg42900el:50;9la3<722wi=4;50;794?6|,8:86lj4H377?M44m2.j97<9;hc2>5<>of<3:17bk9:188yg7>03:197>50z&246<:``8L7333A88i6*n5;34?lg62900el<50;9la3<722wi=<<50;694?6|,8:86lm4H377?M44m2.j97<8;hc2>5<>ib>3:17pl>0b83>1<729q/===5ab9K602<@;9n7)o::358md7=831bm?4?::kb7?6=3fo=6=44}c352?6=<3:1028bg>N5==1C>>k4$`7964=ni80;66gn2;29?lg42900ch850;9~f4?0290?6=4?{%337?gd3A8>86F=3d9'e0<>92cj=7>5;hc1>5<>{e9891<7;50;2x 4642hn0D?;;;I00a>"f=3;n7do>:188md4=831bm>4?::kb0?6=3fo=6=44}c33`?6==3:1028b`>N5==1C>>k4$`795`=ni80;66gn2;29?lg42900el:50;9la3<722wi=l850;194?6|,8:86ll4H377?M44m2.j97?8;hc2>5<>{e9h=1<7=50;2x 4642hh0D?;;;I00a>"f=3;<7do>:188md4=831di;4?::a5d>=8391<7>t$020>dd<@;??7E<<:``8L7333A88i6*n5;34?lg62900el<50;9la3<722wi>>;50;094?6|,8:86l84H377?M44m2cj<7>5;ng5>5<52;294~"68:0j:6F=559K66c>{e9>21<7<50;2x 4642h<0D?;;;I00a>of83:17bk9:188yg42>3:1=7>50z&246<5;o1C>8:4H31f?jc?2900qo?7f;292?6=8r.:<>4ne:J111=O::o0(l;5249je4<722cj>7>5;hc0>5<1<75`a983>>ib>3:17pl>6483>0<729q/===5ag9K602<@;9n7)o::39je4<722cj>7>5;hc0>5<1<75`a983>>{e90<1<7;50;2x 4642hl0D?;;;I00a>"f=3>0el?50;9je7<722cj?7>5;hc7>5<5<2sW9:<63=3b8b6>;6?;0j>63>728b6>;6>?0j=6s|31g94?26sW8=h6P=5d9]74>3:\1f`=Y:l;0R?8m;_05e>X5>01U>;64^344?[41>2T9:85Q2768Z7043W8=>6P<229]774?k;_12g>X49k1U?3W9;46P<069]7507S=?4:?110<>m279?44<4:3:?164<29279><4:0:?164<3n279><4;e:?164<3l279><4;c:?164<3j279><4;a:?164<31279><4;8:?164<3>279><4;5:?164<3<279><4;3:?164<19279><4:f:p744=83?pR>?=;<002?cd348857kl;<00o74=04e>`b<5;9h6l?4=051>d752z\060=::;;1>8?4}r122?6=:rT8=;521629aa=z{::86=4<8z\046=:::<1?852225970=:::k1?852117970=:99>1?85221`970=::9k1?85221;970=::8;1?852202970=:9?91?85217d970=:9>:1?85219:970=:9131?85219c970=:91h1?852192970=:91;1?852190970=:9191?852156970=:9=91?852150970=:9=;1?85214d970=:91?85213;970=:9;21?852135970=:9;<1?8521df970=:9li1?8521d`970=:9lk1?8521d;970=:9l21?8521d5970=:9l<1?8521g7970=:9o>1?8521g1970=:9o81?8521g3970=:9o:1?8521dd970=:9lo1?8521d7970=:9l>1?85rs234>5<5sW9:;63=3`8f`>{t:kh1<77}Y:kl01<>;:df8yv5613:19vP<189>66?=;<16>>65349>677=:=901?=::`28yv4fm3:1>vP=9b9>5`b=mm1v?ol:181[4>j27:in4jd:p6dd=838pR?7n;<3ff?cc3ty9ml4?:3y]6;6m10nh6s|2`594?4|V;3=70?j7;gg?xu5i?0;6?uQ287894c12ln0q~o;50;0xZ7g534;m?7kk;|q1f1<72;qU>l?4=0d1>`b52z\1e5=:9o;1ii5rs3`1>5<5sW82j63>f18f`>{t:k;1<77}Y:0n01vP=959>5`3=mm1v?o::181[4>;27:i94jd:p6=?=838pR?98;<015?3b3ty94:4?:3y]620<5;8:68j4}r0;2?6=:rT9;852233907=z{;2>6=4={_040>;5:80?=6s|29694?4|V;=870<=1;63?xu50:0;6?uQ260897462:l0q~<72;296~X5?816>??53d9~w7>62909wS<80:?164<4l2wx>4<50;0xZ71a3489=7;l;|q1=4<72;qU>:k4=302>0d52z\13a=::;;19l5rs3:e>5<5sW8{t:1o1<77}Y:>k01?<>:458yv4?k3:1>vP=789>677==?1v?6m:181[400279><4:2:p6=g=838pR?8i;<015?203ty94=4?:3y]63c<5;8:6>m4}r003?6=;r79?;4{t::31<7ot=31:>`b<5;936>o4=02;>61<5;;i6>94=33f>61<58:>6hm4=027>`e<5;;96hm4=32:>`e<5;8:6kh4}r00f?6=:r79?l42wx>>:50;1e877039>70<>b;16?846m39>70<>4;16?846:39>70<>3;16?846i39>70<>9;16?87f<39>70?63;16?87>l39>70<=1;ge?876m39>70?>d;16?876k39>70?>b;16?874139>70?<8;16?874?39>70?<6;16?874939>70?<0;16?875n39>70?=e;16?873n39>70?;e;16?873l39>70?;c;16?87an38?=63>fd8104=:9on1>9?4=0d`>72634;mn7<;1:?2bd<5<816=k65253897602;>:70?i9;075>;58?098<522179617<5;:?6?:>;<037?439279657=:=;0138?=63=018104=:9k31?8521c:970=:9k=1?8521c4970=:9ko1?8521cd970=:9j:1?8521b3970=:9j<1?8521b5970=:9j21?8521b;970=:9m;1?8521e2970=:9jl1?8521bg970=:::?1i;5rs02:>5<5s4;;47=n;<33e?c13ty:<54?:5y>55>=mm16>??5fe9>676=i:16>b;1b?846l3o=7p}=1c83>2}::8h1ii521`79e7=:9h<1m?521`59e7=:9h21m?521`;9e7=:90<1m<5rs33e>5<5s48:i7=n;<014?c13ty9=h4?:2y>64c=mm16>?>5a59>64b=i=1v<>9:181877=39j70<=1;0g?xu68<0;6?u21179aa=:99>1?l5rs32b>5<4s48;n7=n;<03e?cc348;57=9;|q14g<72;q6>=l5ee9>65b=i81v??<:180846<39j70<>2;15?846;3oo7p}=1583>7}::8>1ii522049e4=z{;:26=4<{<03e?5f348;57kk;<03`?g53ty9=?4?:2y>644=mm16><=53`9>640=i;1v?>l:18084693oh70<>0;g`?847l3o=7p}=0g83>g}::8;1ii521719af=:9?l1in5219:972=:9131?:5219c972=:91h1?:521929af=:91;1?:52190972=:9191?:5rs32f>5<69r79==4jd:?201<4?27:8>4<7:?207<4?27:8<4<7:?21c<4?27:9h4<7:?21a<4?27:9n4<7:?212<4?27:9;4<7:?210<4?27:994<7:?26<<4?27:>54<7:?262<4?27:>;4<7:p643=839p1??n:da8977>2li01??9:d48yv4603:1=9u220c9aa=:9h>1in521819af=:90n1in521c;972=:9k21?:521c59af=:9k<1in521cg972=:9kl1in521b2972=:9j;1?:521b49af=:9j=1?:521b:972=:9j31?:521e3972=:9m:1?:521bd972=:9jo1?:5rs334>5<69r79=44jd:?25`<4?27:=i4<7:?25f<4?27:=o4<7:?27<<4?27:?54<7:?272<4?27:?;4<7:?274<4?27:?=4<7:?26c<4?27:>h4<7:?20c<4?27:8h4<7:?20a<4?27:8n4<7:p532=839p1<8<:2c8940a2:k01<88:d48yv71;3:1?v3>628f`>;6?:0j=63>648b6>{t9>;1<76g<58=96h84}r3;g?6=9kq6=565379>5=?=;?16=5o5379>5=d=;?16=5>5379>5=7=;?16=5<5379>5=5=;?16=hj5379>5`e=;?16=hl5379>5`g=;?16=h75379>5`>=;?16=h95379>5`0=;?16=k;5379>5c2=;?16=k=5379>5c4=;?16=k?5379>5c6=;?16=hh5379>5`c=;?16=h;5379>5`2=;?16=:=5e79~w41d290`b<58lm6574=0df>=?<58lo6574=0d`>=?<58li6574=0db>=?<58l36574=324>=?<58l26574=325>=?<5;:>6574=327>=?<5;:86574=321>=?<5;::6574=0d4>=?<58l=6574=323>=?<58;;6l<4=04;>d556z?2<<<4i27:4<4jd:?23<32j707d83>0}:91k1?l521909aa=:9>k1m<5216`9e1=:9?k1m>5rs0:5>5<6>r7:4l4jd:?2bce2:k01<6<:df8941e2h;01<8::`38yv7??3:1=;u219`9aa=:9;31?l521gd914n5221195<4s4;j87kk;<3:g?g634;247o>;|q2=g<72;q6=4=5379>5;39j70?68;g5?xu61:0;69u21819aa=:99k1m?522329e4=::8n1m<5rs0;f>5<5s4;2h7=n;<3b5?c13ty:5i4?:9y>55d3=i816=495a29>5d0=i816=l95a09>5d>=i816=l75a09~w4132909w0?70;1b?87003o=7p}>7483>7}:91;1?l5216;9a3=z{8==6=4={<3;6?5f34;52d=m?1v<>8:187845932n70??a;c2?84583k970<>d;c1?xu5:10;6?u223392==:9on1?l5rs304>5<5s489=788;<3eg?5f3ty9>;4?:3y>677=>?16=kl53`9~w7422909w0<=1;46?87ai39j7p}=2583>7}::;;1:9521g;97d=z{;886=4={<015?0434;m47=n;|q174<72;q6>??5839>651=;h1v?=?:181845932:705<5s489=79i;<030?5f3ty9>i4?:3y>677=?l16>==53`9~w74d2909w0<=1;5g?847:39j7p}=2c83>7}::;;1;n5221397d=z{;8j6=4={<015?1?348;<7=n;|q16<<72;q6>??56e9>5c1=;h1v?<=:18184593<970?i6;1b?xu5;:0;6?u22339<1=:9ol1?l5rs311>5<5s489=76<;<3ea?5f3ty:?84?:4y>54c=;h16=>75ee9>55d=i;16==m5a39>55b=i;1v5<3s4;:h7kk;<3b4?g334;3i7o;;<3:1?g33ty:>=4?:3y>54e=;h16==m5e79~w47?290?w0?>c;gg?87>n3k970?65;c1?87?n3k97p}>2083>7}:98h1?l5211f9a3=z{8;<6=4;{<32f?cc34;2j7o;;<3;`?g534;2;7o>;|q21g<7250`=mm16=544=i;16=<=5a39~w4272908w0?;4;gg?87113k970?95;c0?xu6<<0;6?u215197d=:98;1i;5rs01e>5<4s4;??7kk;<35=?g634;=m7o;;|q203<72;q6=9<53`9>544=m?1v<=j:180873:3oo70?98;c1?871>3k97p}>4683>7}:9=;1?l521019a3=z{89o6=4<{<375?cc34;=47o>;<35e?g53ty:9>4?:3y>50`=;h16=895ee9~w4352909w0?:e;1b?872>3oo7p}>5`83>1}:997kk;|q21<<72:q6=8j5ee9>544=i:16=<=5a29~w4372909w0?:c;1b?872<3oo7p}>5983>7}:9653`9>566=mm1v<=;:18787403oo70??b;c2?877k3k:70??d;c2?xu6:k0;6?u212597d=:9;l1ii5rs010>5<4s4;8;7kk;<33g?g434;;h7o<;|q26d<72;q6=>853`9>57c=mm1v<==:181874>3oo70??d;c7?xu65<5s4;>:7=n;<37a?cc3ty:844?:3y>503=;h16=9j5ee9~w42?2909w0?:4;1b?873k3oo7p}>2483>7}:9:;1?l5213;9aa=z{88?6=4={<304?5f34;947kk;|q266<72;q6=?h53`9>571=mm1v<<=:181875m39j70?=6;gg?xu6;h0;6?u213:97d=:99o1i;5rs01a>5<5s4;9;7=n;<33b?c13ty:?n4?:3y>570=;h16=<>5e79~w4ec290:9v3>4g80e>;6no09n63>fd81f>;6nm09n63>fb81f>;6nk09n63>f`81f>;6n109n63=0681f>;6n009n63=0781f>;58<09n63=0581f>;58:09n63=0381f>;58809n63>f681f>;6n?09n63=0181f>;6l80nh63>158b5>{t9?:1<76g<58;?6h84}r355?6=:r7:8i42wx=;<50;0x942d2:k015521gf96==:9oi1>5521g`96==:9ok1>5521g:96==::9=1>5521g;96==::9<1>55221796==::9>1>55221196==::981>55221396==:9o=1>5521g496==::9:1>5521bg9aa=:98<1m?5rs0aa>5<6=r7:jk4=9:?2b`<5127:ji4=9:?2bf<5127:jo4=9:?2bd<5127:j54=9:?142<5127:j44=9:?143<51279<84=9:?141<51279<>4=9:?147<51279<<4=9:?2b2<5127:j;4=9:?145<5127:ok4jd:?253w0?if;0b?87am38j70?id;0b?87ak38j70?ib;0b?87ai38j70?i8;0b?847?38j70?i9;0b?847>38j704;c1?xu6i?0;68u21gd9614<58ln6?:=;<3e`?43:27:jn4=439>5d1=m?1v5<5s4;mh767;<3ff?5f3ty:h:4?:3y>5ce=0116=ho53`9~w4g?290:8v3>fc8107=:9ok1>9<4=0d;>72534;i57=9;<3a5`?=;h1v5<4s48;;7<;2:?2b<<5<;16=l65e79~w4c42909w0d583>7}:9o3145521d597d=z{8k>6=4n{<032?43:279<84=439>652=:=801?><:361?847:38?>63=008107=:9o=1>9<4=0d5>725348;<7<;2:?2e32wx=h<50;0x976121201v3=048;<>;6n:08m6s|1d294?4|5;:?6564=0d1>6g52z?146=:9:894`72:k0q~?kd;296~;58803463>eg80e>{t9mh1<7=><58o>6>o4}r3g6?6=:r7:j;478:?2a1<4i2wx=im50;0x976721201v3>b880e>;6j80n:6s|1c794?2|58h26hj4=0a2>6g<58h:6l?4=0;5>d452z?2f=<4i27:n=4j6:p5g2=83?p101<7::`18yv7fj3:1>v3>b680e>;6io0n:6s|1c194?0|58h<6hj4=0`e>6g<58km6l?4=0`3>d4<58h:6l=4=0;6>d752z?2f3<4i27:mh4j6:p5g4=83=p1:`0894?02h801bd8f`>;6k?08m63>8e8b5>{t9kh1<7=t=0`e>`b<58i<6>o4=0:e>d753z?2g5b2h;0q~?l2;297~;6k?0nh63>cd80e>;61o0j?6s|1b194?5|58i<6hj4=0ae>6g<583m6l?4}r3`0?6=;r7:o54jd:?2`5<4i27:m=4n3:p5f3=839p1v3>9g8f2>;6i80j>6s|1`194?4|58k;6h84=0c2>d752z?2e45=`=i11v<8m:18187103o=70?97;c2?xu6>j0;6?u217;9a3=:9?=1m?5rs04g>5<5s4;=m7k9;<353?g43ty::h4?:3y>531=i=16=;;5a99~w4?62909w0?7d;g5?87?n3k87p}>9183>7}:91o1i;5219d9e1=z{8326=4={<3:1?c134;247o=;|q2=d<72;q6=465a29>5<0=i11v<7=:18187>03k?70?7f;g5?xuc?3:1>v3>678f2>;6><0j86s|d983>7}:90=1i;521849e1=z{m31<7?t=375>`>:94$31g>ad52z\133=:;:09;;5+22f9`f=z{;2=6=4={_041>;4;38<96*=3e8g`>{t:1?1<790(?=k:c08yv4?;3:1>vP=739>76<5?;1/>>j5b89~w7>52909wS<81:?07?4092.9?i4l4:p6=7=838pR?9?;<10>7173-88h7mm;|q1=7<72;qU>:h4=21962`<,;9o6nj4}r0:5?6=:rT9;h5232813`=#::n1oh5rs3;3>5<5sW8"5;m0hj6s|29d94?4|V;=h70=<:35`?!44l3n;7p}=8d83>7}Y:>h01>=526`8 75c2m;0q~<7d;296~X5?h16?>4=7`9'66b=l;1v?6l:181[401278?7<89:&17a5l50;0xZ71?34986?97;%00`?b33ty94l4?:3y]63`<5:91>;h4$31g>a352z\12`=:;:09:h5+22f9`3=z{::86=4={_137>;4;39;?6*=3e8ga>{t;8:1<7vP<189>76<4901/>>j5e09~w6422909wS==5:?07?55=2.9?i4j3:p6dc=838pR?7l;<10>7?d3-88h7l<;|q1ef<72;qU>4l4=21965<5sW82563<3;0:=>"5;m0i:6s|2`;94?4|V;3370=<:3;;?!44l3h<7p}=a983>7}Y:0=01>=52858 75c2k20q~4=979'66b=jh1v?o9:181[4>=278?7<65:&17ao950;0xZ7g334986?o;;%00`?dd3ty9n;4?:3y]6d5<5:91>l=4$31g>gb52z\1e7=:;:09m?5+22f9f`=z{;h?6=4={_0b5>;4;38j=6*=3e8ab>{t:k91<7vP=9d9>76<51l1/>>j5c39~w7d72909wS<6d:?07?4>l2.9?i4l3:p6d`=838pR?7;;<10>7?33-88h7m:;|q1e0<72;qU>4=4=2196<5<,;9o6n84}r0a=?6=:rT9n4523281f<=#::n1o:5rs3`a>5<5sW8in63<3;0af>"5;m0h46s|2cd94?4|V;hm70=<:3`e?!44l3i27p}<1683>7}Y;8=01>=53058 75c2jk0q~=>6;296~X49?16?>4<179'66b=kj1vqc8>a;296~N5;l1vb;?m:181M44m2we:52zJ17`=zf?;m6=4={I00a>{i>;:1<7vF=3d9~j3442909wE<>k4}o412?6=:rB9?h5rn704>5<5sA88i6sa63:94?4|@;9n7p`92883>7}O::o0qc8=a;296~N5;l1vb;i4?:3yK66c52zJ17`=zf?8m6=4={I00a>{i>::1<7vF=3d9~j3542909wE<>k4}o402?6=:rB9?h5rn714>5<5sA88i6sa62:94?4|@;9n7p`93883>7}O::o0qc8m50;0xL75b3td=?i4?:3yK66c52zJ17`=zf?9m6=4={I00a>{i>=:1<7vF=3d9~j3242909wE<>k4}o472?6=:rB9?h5rn764>5<5sA88i6sa55194?7|@;9n7p`:7083>4}O::o0qc;82;295~N5;l1vb89<:182M44m2we9::50;3xL75b3td>;84?:0yK66c51zJ17`=zf<=<6=4>{I00a>{i=>21<7?tH31f?xh2?00;6>k4}o74a?6=9rB9?h5rn45e>5<6sA88i6sa59294?7|@;9n7p`:8083>4}O::o0qc;72;295~N5;l1vb86<:182M44m2we95:50;3xL75b3td>484?:0yK66c51zJ17`=zf<2<6=4>{I00a>{i=121<7?tH31f?xh2000;6e290:wE<>k4}o7;a?6=9rB9?h5rn4:e>5<6sA88i6sa58294?7|@;9n7p`:9083>4}O::o0qc;62;295~N5;l1vb87<:182M44m2we94:50;3xL75b3td>584?:0yK66c51zJ17`=zf<3<6=4>{I00a>{i=021<7?tH31f?xh2100;6i3:1=vF=3d9~j0?e290:wE<>k4}o7:a?6=9rB9?h5rn4;e>5<6sA88i6sa5`294?7|@;9n7p`:a083>4}O::o0qc;n2;295~N5;l1vb8o<:182M44m2we9l:50;3xL75b3td>m84?:0yK66c51zJ17`=zf{I00a>{i=h21<7?tH31f?xh2i00;6>k4}o7ba?6=9rB9?h5rn4ce>5<6sA88i6sa5c294?7|@;9n7p`:b083>4}O::o0qc;m2;295~N5;l1vb8l<:182M44m2we9o:50;3xL75b3td>n84?:0yK66c51zJ17`=zf{I00a>{i=k21<7?tH31f?xh2j00;6>k4}o7aa?6=9rB9?h5rn4`e>5<6sA88i6sa5b294?7|@;9n7p`:c083>4}O::o0qc;l2;295~N5;l1vb8m<:182M44m2we9n:50;3xL75b3td>o84?:0yK66c51zJ17`=zf{I00a>{i=j21<7?tH31f?xh2k00;6>k4}o7`a?6=9rB9?h5rn4ae>5<6sA88i6sa5e294?7|@;9n7p`:d083>4}O::o0qc;k2;295~N5;l1vb8j<:182M44m2we9i:50;3xL75b3td>h84?:0yK66c51zJ17`=zf{I00a>{i=m21<7?tH31f?xh2l00;6>k4}o7ga?6=9rB9?h5rn4fe>5<6sA88i6sa5d294?7|@;9n7p`:e083>4}O::o0qc;j2;295~N5;l1vb8k<:182M44m2we9h:50;3xL75b3td>i84?:0yK66c51zJ17`=zf{I00a>{i=l21<7?tH31f?xh2m00;6>k4}o7fa?6=9rB9?h5rn4ge>5<6sA88i6sa5g294?7|@;9n7p`:f083>4}O::o0qc;i2;295~N5;l1vb8h<:182M44m2we9k:50;3xL75b3td>j84?:0yK66c51zJ17`=zf{I00a>{i=o21<7?tH31f?xh2n00;6>k4}o7ea?6=9rB9?h5rn4de>5<6sA88i6sa61294?7|@;9n7p`90083>4}O::o0qc8?2;295~N5;l1vb;><:182M44m2we:=:50;3xL75b3td=<84?:0yK66c51zJ17`=zf?:<6=4>{I00a>{i>921<7?tH31f?xh1800;6>k4}o43a?6=9rB9?h5rn72e>5<6sA88i6sa60294?7|@;9n7p`91083>4}O::o0qc8>2;295~N5;l1vb;?<:182M44m2we:<:50;3xL75b3td==84?:0yK66c51zJ17`=zf?;<6=4>{I00a>{i>821<7?tH31f?xh1900;65cc;511c6uIJIw=sO@Qy~DE \ No newline at end of file diff --git a/xilinx/virtex4/xilinx_fifo_dualport_18x1k.xco b/xilinx/virtex4/xilinx_fifo_dualport_18x1k.xco index 4954c11..f20d1df 100644 --- a/xilinx/virtex4/xilinx_fifo_dualport_18x1k.xco +++ b/xilinx/virtex4/xilinx_fifo_dualport_18x1k.xco @@ -56,14 +56,14 @@ CSET output_depth=1024 CSET overflow_flag=false CSET overflow_sense=Active_High CSET performance_options=Standard_FIFO -CSET programmable_empty_type=Single_Programmable_Empty_Threshold_Constant +CSET programmable_empty_type=No_Programmable_Empty_Threshold CSET programmable_full_type=No_Programmable_Full_Threshold CSET read_clock_frequency=100 CSET read_data_count=false CSET read_data_count_width=10 CSET reset_pin=true CSET reset_type=Asynchronous_Reset -CSET underflow_flag=true +CSET underflow_flag=false CSET underflow_sense=Active_High CSET use_dout_reset=false CSET use_embedded_registers=false