URL
https://opencores.org/ocsvn/openrisc/openrisc/trunk
Subversion Repositories openrisc
Compare Revisions
- This comparison shows the changes necessary to convert path
/openrisc/trunk/orpsocv2/boards
- from Rev 412 to Rev 415
- ↔ Reverse comparison
Rev 412 → Rev 415
/tools.inc
File deleted
/actel/ordb1a3pe1500/syn/synplify/bin/Makefile
174,13 → 174,12
# |
|
BOOTROM_FILE=bootrom.v |
SW_DIR=$(BOARD_DIR)/sw |
BOOTROM_SW_DIR=$(SW_DIR)/bootrom |
BOOTROM_SRC=$(shell ls $(BOOTROM_SW_DIR)/* | grep -v $(BOOTROM_FILE)) |
BOOTROM_VERILOG=$(BOOTROM_SW_DIR)/$(BOOTROM_FILE) |
BOARD_SW_DIR=$(BOARD_DIR)/sw |
BOARD_BOOTROM_SW_DIR=$(BOARD_SW_DIR)/bootrom |
BOOTROM_VERILOG=$(BOARD_BOOTROM_SW_DIR)/$(BOOTROM_FILE) |
bootrom: $(BOOTROM_VERILOG) |
$(BOOTROM_VERILOG): $(BOOTROM_SRC) |
$(MAKE) -C $(BOOTROM_SW_DIR) $(BOOTROM_FILE) |
$(BOOTROM_VERILOG): |
$(MAKE) -C $(BOARD_BOOTROM_SW_DIR) $(BOOTROM_FILE) |
|
SYNDIR_BOOTROM_VERILOG=$(SYN_WORK_DIR)/$(BOOTROM_FILE) |
$(SYNDIR_BOOTROM_VERILOG): $(BOOTROM_VERILOG) |
/xilinx/ml501/par/ml501_xst.ucf
File deleted
/xilinx/ml501/par/Makefile
File deleted
/xilinx/ml501/bench/verilog/include/eth_stim.v
451,6 → 451,137
|
|
|
|
`ifdef XILINX_DDR2 |
// Gets word from correct bank |
task get_32bitword_from_xilinx_ddr2; |
input [31:0] addr; |
output [31:0] insn; |
reg [16*8-1:0] ddr2_array_line0,ddr2_array_line1,ddr2_array_line2, |
ddr2_array_line3; |
integer word_in_line_num; |
begin |
// Get our 4 128-bit chunks (8 half-words in each!! Confused yet?), |
// 16 words total |
gen_cs[0].gen[0].u_mem0.memory_read(addr[28:27],addr[26:13], |
{addr[12:6],3'd0}, |
ddr2_array_line0); |
gen_cs[0].gen[1].u_mem0.memory_read(addr[28:27],addr[26:13], |
{addr[12:6],3'd0}, |
ddr2_array_line1); |
gen_cs[0].gen[2].u_mem0.memory_read(addr[28:27],addr[26:13], |
{addr[12:6],3'd0}, |
ddr2_array_line2); |
gen_cs[0].gen[3].u_mem0.memory_read(addr[28:27],addr[26:13], |
{addr[12:6],3'd0}, |
ddr2_array_line3); |
case (addr[5:2]) |
4'h0: |
begin |
insn[15:0] = ddr2_array_line0[15:0]; |
insn[31:16] = ddr2_array_line1[15:0]; |
end |
4'h1: |
begin |
insn[15:0] = ddr2_array_line2[15:0]; |
insn[31:16] = ddr2_array_line3[15:0]; |
end |
4'h2: |
begin |
insn[15:0] = ddr2_array_line0[31:16]; |
insn[31:16] = ddr2_array_line1[31:16]; |
end |
4'h3: |
begin |
insn[15:0] = ddr2_array_line2[31:16]; |
insn[31:16] = ddr2_array_line3[31:16]; |
end |
4'h4: |
begin |
insn[15:0] = ddr2_array_line0[47:32]; |
insn[31:16] = ddr2_array_line1[47:32]; |
end |
4'h5: |
begin |
insn[15:0] = ddr2_array_line2[47:32]; |
insn[31:16] = ddr2_array_line3[47:32]; |
end |
4'h6: |
begin |
insn[15:0] = ddr2_array_line0[63:48]; |
insn[31:16] = ddr2_array_line1[63:48]; |
end |
4'h7: |
begin |
insn[15:0] = ddr2_array_line2[63:48]; |
insn[31:16] = ddr2_array_line3[63:48]; |
end |
4'h8: |
begin |
insn[15:0] = ddr2_array_line0[79:64]; |
insn[31:16] = ddr2_array_line1[79:64]; |
end |
4'h9: |
begin |
insn[15:0] = ddr2_array_line2[79:64]; |
insn[31:16] = ddr2_array_line3[79:64]; |
end |
4'ha: |
begin |
insn[15:0] = ddr2_array_line0[95:80]; |
insn[31:16] = ddr2_array_line1[95:80]; |
end |
4'hb: |
begin |
insn[15:0] = ddr2_array_line2[95:80]; |
insn[31:16] = ddr2_array_line3[95:80]; |
end |
4'hc: |
begin |
insn[15:0] = ddr2_array_line0[111:96]; |
insn[31:16] = ddr2_array_line1[111:96]; |
end |
4'hd: |
begin |
insn[15:0] = ddr2_array_line2[111:96]; |
insn[31:16] = ddr2_array_line3[111:96]; |
end |
4'he: |
begin |
insn[15:0] = ddr2_array_line0[127:112]; |
insn[31:16] = ddr2_array_line1[127:112]; |
end |
4'hf: |
begin |
insn[15:0] = ddr2_array_line2[127:112]; |
insn[31:16] = ddr2_array_line3[127:112]; |
end |
endcase // case (addr[5:2]) |
end |
endtask |
|
task get_byte_from_xilinx_ddr2; |
input [31:0] addr; |
output [7:0] data_byte; |
reg [31:0] word; |
begin |
get_32bitword_from_xilinx_ddr2(addr, word); |
case (addr[1:0]) |
2'b00: |
data_byte = word[31:24]; |
2'b01: |
data_byte = word[23:16]; |
2'b10: |
data_byte = word[15:8]; |
2'b11: |
data_byte = word[7:0]; |
endcase // case (addr[1:0]) |
end |
endtask // get_byte_from_xilinx_ddr2 |
|
`endif |
|
|
// |
// Check packet TX'd by MAC was good |
// |
496,13 → 627,29
|
// Variable we'll use for index in the PHY's TX buffer |
buffer = 0; // Start of TX data |
`ifdef VERSATILE_SDRAM |
|
for (i=0;i<tx_len_bd;i=i+1) |
begin |
//$display("Checking address in tx bd 0x%0h",txpnt_sdram); |
sdram_byte = 8'hx; |
|
sdram0.get_byte(txpnt_sdram,sdram_byte); |
`ifdef VERSATILE_SDRAM |
sdram0.get_byte(txpnt_sdram,sdram_byte); |
`endif |
`ifdef XILINX_DDR2 |
get_byte_from_xilinx_ddr2(txpnt_sdram, sdram_byte); |
`endif |
if (sdram_byte === 8'hx) |
begin |
$display(" * Error: sdram_byte was %x", sdram_byte); |
|
$display(" * eth_stim needs to be able to access the main memory to check packet rx/tx"); |
$display(" * RAM pointer for BD is 0x%h, bank offset we'll use is 0x%h", |
tx_bd_addr, txpnt_wb); |
$finish; |
end |
|
|
phy_byte = eth_phy0.tx_mem[buffer]; |
// Debugging output |
//$display("txpnt_sdram = 0x%h, sdram_byte = 0x%h, buffer = 0x%h, phy_byte = 0x%h", txpnt_sdram, sdram_byte, buffer, phy_byte); |
519,12 → 666,6
|
end // for (i=0;i<tx_len_bd;i=i+1) |
|
`else |
$display("SET ME UP TO LOOK IN ANOTHER MEMORY!"); |
$display("RAM pointer for BD is 0x%h, bank offset we'll use is 0x%h", |
tx_bd_addr, txpnt_wb); |
$finish; |
`endif // !`ifdef VERSATILE_SDRAM |
if (failure) |
begin |
#100 |
1002,14 → 1143,8
|
rxpnt_wb = {14'd0,rx_bd_addr[17:0]}; |
rxpnt_sdram = rx_bd_addr[24:0]; |
|
`ifdef VERSATILE_SDRAM |
// We'll look inside the SDRAM array |
// Hard coded for the SDRAM buffer area to be from the halfway mark in |
// memory (so starting in Bank2) |
// We'll be passed the offset from the beginning of the buffer area |
// in rxpnt_wb. This value will be in bytes. |
|
|
|
//$display("RAM pointer for BD is 0x%h, SDRAM addr is 0x%h", rx_bd_addr, rxpnt_sdram); |
|
|
1016,7 → 1151,22
for (i=0;i<len;i=i+1) |
begin |
|
sdram0.get_byte(rxpnt_sdram,sdram_byte); |
sdram_byte = 8'hx; |
`ifdef VERSATILE_SDRAM |
sdram0.get_byte(rxpnt_sdram,sdram_byte); |
`endif |
`ifdef XILINX_DDR2 |
get_byte_from_xilinx_ddr2(rxpnt_sdram, sdram_byte); |
`endif |
if (sdram_byte === 8'hx) |
begin |
$display(" * Error:"); |
|
$display(" * eth_stim needs to be able to access the main memory to check packet rx/tx"); |
$display("RAM pointer for BD is 0x%h, bank offset we'll use is 0x%h", |
rx_bd_addr, rxpnt_wb); |
$finish; |
end |
|
phy_byte = eth_rx_sent_circbuf[eth_rx_sent_circbuf_read_ptr];//phy_rx_mem[buffer]; //eth_phy0.rx_mem[buffer]; |
|
1034,16 → 1184,7
rxpnt_sdram = rxpnt_sdram+1; |
|
end // for (i=0;i<len;i=i+2) |
`else |
|
$display("SET ME UP TO LOOK IN ANOTHER MEMORY!"); |
$display("RAM pointer for BD is 0x%h, bank offset we'll use is 0x%h", |
rx_bd_addr, rxpnt_wb); |
$finish; |
|
|
`endif // !`ifdef VERSATILE_SDRAM |
|
if (failure) |
begin |
#100 |
/xilinx/ml501/bench/verilog/include/ddr2_model_preload.v
53,4 → 53,4
|
end // for (ram_ptr = 0 ; ram_ptr < ... |
$display("(%t) * DDR2 RAM %1d preloaded",$time, i); |
end // initial begin |
|
/xilinx/ml501/bench/verilog/orpsoc_testbench.v
73,14 → 73,14
tri1 i2c_scl, i2c_sda; |
|
`ifdef JTAG_DEBUG |
wire tdo_pad_o; |
wire tck_pad_i; |
wire tms_pad_i; |
wire tdi_pad_i; |
wire tdo_pad_o; |
wire tck_pad_i; |
wire tms_pad_i; |
wire tdi_pad_i; |
`endif |
`ifdef UART0 |
wire uart0_stx_pad_o; |
wire uart0_srx_pad_i; |
wire uart0_stx_pad_o; |
wire uart0_srx_pad_i; |
`endif |
`ifdef GPIO0 |
wire [gpio0_io_width-1:0] gpio0_io; |
151,16 → 151,16
wire [ODT_WIDTH-1:0] ddr2_odt_fpga; |
`endif |
`ifdef XILINX_SSRAM |
wire sram_clk; |
wire sram_clk_fb; |
wire sram_adv_ld_n; |
wire [3:0] sram_bw; |
wire sram_cen; |
wire [21:1] sram_flash_addr; |
wire [31:0] sram_flash_data; |
wire sram_flash_oe_n; |
wire sram_flash_we_n; |
wire sram_mode; |
wire sram_clk; |
wire sram_clk_fb; |
wire sram_adv_ld_n; |
wire [3:0] sram_bw; |
wire sram_cen; |
wire [21:1] sram_flash_addr; |
wire [31:0] sram_flash_data; |
wire sram_flash_oe_n; |
wire sram_flash_we_n; |
wire sram_mode; |
`endif |
|
orpsoc_top dut |
206,9 → 206,12
.uart0_srx_expheader_pad_i (uart0_srx_pad_i), |
`endif |
`ifdef SPI0 |
.spi0_sck_o (spi0_sck_o), |
/* |
via STARTUP_VIRTEX5 |
.spi0_sck_o (spi0_sck_o), |
.spi0_miso_i (spi0_miso_i), |
*/ |
.spi0_mosi_o (spi0_mosi_o), |
.spi0_miso_i (spi0_miso_i), |
.spi0_ss_o (spi0_ss_o), |
`endif |
`ifdef I2C0 |
252,11 → 255,11
`ifndef SIM_QUIET |
`define CPU_ic_top or1200_ic_top |
`define CPU_dc_top or1200_dc_top |
wire ic_en = orpsoc_testbench.dut.or1200_top0.or1200_ic_top.ic_en; |
wire ic_en = orpsoc_testbench.dut.or1200_top0.or1200_ic_top.ic_en; |
always @(posedge ic_en) |
$display("Or1200 IC enabled at %t", $time); |
|
wire dc_en = orpsoc_testbench.dut.or1200_top0.or1200_dc_top.dc_en; |
wire dc_en = orpsoc_testbench.dut.or1200_top0.or1200_dc_top.dc_en; |
always @(posedge dc_en) |
$display("Or1200 DC enabled at %t", $time); |
`endif |
281,8 → 284,15
`endif // `ifdef JTAG_DEBUG |
|
`ifdef SPI0 |
// STARTUP_VIRTEX5 module routes these out on the board. |
// So for now just connect directly to the internals here. |
assign spi0_sck_o = dut.spi0_sck_o; |
assign dut.spi0_miso_i = spi0_miso_i; |
|
// SPI flash memory - M25P16 compatible SPI protocol |
AT26DFxxx spi0_flash |
AT26DFxxx |
#(.MEMSIZE(2048*1024)) // 2MB flash on ML501 |
spi0_flash |
(// Outputs |
.SO (spi0_miso_i), |
// Inputs |
291,6 → 301,8
.SI (spi0_mosi_o), |
.WPB (1'b1) |
); |
|
|
`endif // `ifdef SPI0 |
|
`ifdef ETH0 |
331,11 → 343,11
`endif // `ifdef ETH0 |
|
`ifdef XILINX_SSRAM |
wire [18:0] sram_a; |
wire [3:0] dqp; |
wire [18:0] sram_a; |
wire [3:0] dqp; |
|
assign sram_a[18:0] = sram_flash_addr[19:1]; |
wire sram_ce1b, sram_ce2, sram_ce3b; |
wire sram_ce1b, sram_ce2, sram_ce3b; |
assign sram_ce1b = 1'b0; |
assign sram_ce2 = 1'b1; |
assign sram_ce3b = 1'b0; |
446,28 → 458,30
|
`ifdef PRELOAD_RAM |
`include "ddr2_model_preload.v" |
`endif |
ddr2_model u_mem0 |
( |
.ck (ddr2_ck_sdram[CLK_WIDTH*i/DQS_WIDTH]), |
.ck_n (ddr2_ck_n_sdram[CLK_WIDTH*i/DQS_WIDTH]), |
.cke (ddr2_cke_sdram[j]), |
.cs_n (ddr2_cs_n_sdram[CS_WIDTH*i/DQS_WIDTH]), |
.ras_n (ddr2_ras_n_sdram), |
.cas_n (ddr2_cas_n_sdram), |
.we_n (ddr2_we_n_sdram), |
.dm_rdqs (ddr2_dm_sdram[(2*(i+1))-1 : i*2]), |
.ba (ddr2_ba_sdram), |
.addr (ddr2_a_sdram), |
.dq (ddr2_dq_sdram[(16*(i+1))-1 : i*16]), |
.dqs (ddr2_dqs_sdram[(2*(i+1))-1 : i*2]), |
.dqs_n (ddr2_dqs_n_sdram[(2*(i+1))-1 : i*2]), |
.rdqs_n (), |
.odt (ddr2_odt_sdram[ODT_WIDTH*i/DQS_WIDTH]) |
); |
end |
end |
endgenerate |
`endif |
end |
|
ddr2_model u_mem0 |
( |
.ck (ddr2_ck_sdram[CLK_WIDTH*i/DQS_WIDTH]), |
.ck_n (ddr2_ck_n_sdram[CLK_WIDTH*i/DQS_WIDTH]), |
.cke (ddr2_cke_sdram[j]), |
.cs_n (ddr2_cs_n_sdram[CS_WIDTH*i/DQS_WIDTH]), |
.ras_n (ddr2_ras_n_sdram), |
.cas_n (ddr2_cas_n_sdram), |
.we_n (ddr2_we_n_sdram), |
.dm_rdqs (ddr2_dm_sdram[(2*(i+1))-1 : i*2]), |
.ba (ddr2_ba_sdram), |
.addr (ddr2_a_sdram), |
.dq (ddr2_dq_sdram[(16*(i+1))-1 : i*16]), |
.dqs (ddr2_dqs_sdram[(2*(i+1))-1 : i*2]), |
.dqs_n (ddr2_dqs_n_sdram[(2*(i+1))-1 : i*2]), |
.rdqs_n (), |
.odt (ddr2_odt_sdram[ODT_WIDTH*i/DQS_WIDTH]) |
); |
end |
end |
endgenerate |
|
`endif |
|
495,9 → 509,9
`define VCD_SUFFIX ".vcd" |
`endif |
|
`ifndef SIM_QUIET |
`ifndef SIM_QUIET |
$display("* VCD in %s\n", {"../out/",`TEST_NAME_STRING,`VCD_SUFFIX}); |
`endif |
`endif |
$dumpfile({"../out/",`TEST_NAME_STRING,`VCD_SUFFIX}); |
`ifndef VCD_DEPTH |
`define VCD_DEPTH 0 |
523,9 → 537,9
`ifdef END_TIME |
initial begin |
#(`END_TIME); |
`ifndef SIM_QUIET |
`ifndef SIM_QUIET |
$display("* Finish simulation due to END_TIME being set at %t", $time); |
`endif |
`endif |
$finish; |
end |
`endif |
/xilinx/ml501/rtl/verilog/include/or1200_defines.v
1725,8 → 1725,8
// used to determine where vectors are located. // |
/////////////////////////////////////////////////////////////////////////////// |
// Boot from 0xf0000100 |
//`define OR1200_BOOT_PCREG_DEFAULT 30'h3c00003f |
//`define OR1200_BOOT_ADR 32'hf0000100 |
`define OR1200_BOOT_PCREG_DEFAULT 30'h3c00003f |
`define OR1200_BOOT_ADR 32'hf0000100 |
// Boot from 0x100 |
`define OR1200_BOOT_PCREG_DEFAULT 30'h0000003f |
`define OR1200_BOOT_ADR 32'h00000100 |
// `define OR1200_BOOT_PCREG_DEFAULT 30'h0000003f |
// `define OR1200_BOOT_ADR 32'h00000100 |
/xilinx/ml501/rtl/verilog/include/orpsoc-defines.v
72,7 → 72,9
//`define ARBITER_IBUS_REGISTERING |
`define ARBITER_IBUS_WATCHDOG |
// Watchdog timeout: 2^(ARBITER_IBUS_WATCHDOG_TIMER_WIDTH+1) cycles |
`define ARBITER_IBUS_WATCHDOG_TIMER_WIDTH 12 |
// This has to be kind of long, as DDR2 initialisation can take a little while |
// and after reset, and if this is too short we'll always get bus error. |
`define ARBITER_IBUS_WATCHDOG_TIMER_WIDTH 20 |
|
// Data bus arbiter |
|
79,7 → 81,7
//`define ARBITER_DBUS_REGISTERING |
`define ARBITER_DBUS_WATCHDOG |
// Watchdog timeout: 2^(ARBITER_DBUS_WATCHDOG_TIMER_WIDTH+1) cycles |
`define ARBITER_DBUS_WATCHDOG_TIMER_WIDTH 12 |
`define ARBITER_DBUS_WATCHDOG_TIMER_WIDTH 20 |
|
// Byte bus (peripheral bus) arbiter |
// Don't really need the watchdog here - the databus will pick it up |
/xilinx/ml501/rtl/verilog/orpsoc_top/orpsoc_top.v
55,7 → 55,7
uart0_srx_expheader_pad_i, uart0_stx_expheader_pad_o, |
`endif |
`ifdef SPI0 |
spi0_sck_o, spi0_mosi_o, spi0_miso_i, spi0_ss_o, |
spi0_mosi_o, spi0_ss_o,/* spi0_sck_o, spi0_miso_i,via STARTUP_VIRTEX5*/ |
`endif |
`ifdef I2C0 |
i2c0_sda_io, i2c0_scl_io, |
133,10 → 133,12
output uart0_stx_expheader_pad_o; |
`endif |
`ifdef SPI0 |
output spi0_sck_o; |
output spi0_mosi_o; |
output [spi0_ss_width-1:0] spi0_ss_o; |
output [spi0_ss_width-1:0] spi0_ss_o; |
/* via STARTUP_VIRTEX5 |
output spi0_sck_o; |
input spi0_miso_i; |
*/ |
`endif |
`ifdef I2C0 |
inout i2c0_sda_io, i2c0_scl_io; |
1227,7 → 1229,7
assign wbs_d_uart0_rty_o = 0; |
|
// Two UART lines coming to single one (ensure they go high when unconnected) |
assign uart_srx = uart0_srx_pad_i & uart0_srx_expheader_pad_i; |
assign uart0_srx = uart0_srx_pad_i & uart0_srx_expheader_pad_i; |
assign uart0_stx_pad_o = uart0_stx; |
assign uart0_stx_expheader_pad_o = uart0_stx; |
|
1315,6 → 1317,23
); |
|
defparam spi0.slave_select_width = spi0_ss_width; |
|
// SPI clock and MISO lines must go through STARTUP_VIRTEX5 block. |
STARTUP_VIRTEX5 startup_virtex5 |
( |
.CFGCLK(), |
.CFGMCLK(), |
.DINSPI(spi0_miso_i), |
.EOS(), |
.TCKSPI(), |
.CLK(), |
.GSR(1'b0), |
.GTS(1'b0), |
.USRCCLKO(spi0_sck_o), |
.USRCCLKTS(1'b0), |
.USRDONEO(), |
.USRDONETS() |
); |
|
//////////////////////////////////////////////////////////////////////// |
`else // !`ifdef SPI0 |
/xilinx/ml501/backend/par/run/Makefile
0,0 → 1,2
include ../bin/Makefile |
|
/xilinx/ml501/backend/par/bin/ml501.ucf
0,0 → 1,962
###################################################################### |
# |
# UCF file for ML501 PAR |
# |
###################################################################### |
|
#------------------------------------------------------------------------------ |
# ZBT SSRAM controller multi-cycle path constraints (ssram_controller) |
#------------------------------------------------------------------------------ |
|
# Define the two clock domains as timespecs |
#NET dcm0_clkdv TNM_NET="wb_clk"; |
#TIMESPEC "TS_wb_clk" = PERIOD "wb_clk" 20 ns HIGH 10; |
#NET dcm0_clk0 TNM_NET = "ssram_clk200"; |
#TIMESPEC "TS_ssram_clk200" = PERIOD "ssram_clk200" "TS_wb_clk" / 4; |
|
# Now define their relationship - logic should be configured so that there's |
# 1 WB cycle at all times before anything is sampled across domains |
#TIMESPEC "TS_wb_clk_ssram_clk200" = from "wb_clk" TO "ssram_clk200" 15 ns; |
#TIMESPEC "TS_ssram_clk200_wb_clk" = from "ssram_clk200" TO "wb_clk" 15 ns; |
|
#------------------------------------------------------------------------------ |
# Pins used |
#------------------------------------------------------------------------------ |
|
# 100MHz fixed freq clock. |
#NET sys_clk_in LOC = AD8; |
#NET sys_clk_in IOSTANDARD = LVCMOS33; |
#NET "sys_clk_in" TNM_NET = "sys_clk_in"; |
#TIMESPEC "TS_sys_clk_in" = PERIOD "sys_clk_in" 10 ns HIGH 50.00%; |
|
NET sys_clk_in_p LOC = E16; |
NET sys_clk_in_n LOC = E17; |
NET sys_clk_in_p IOSTANDARD = LVDS_25; |
NET sys_clk_in_n IOSTANDARD = LVDS_25; |
INST *sys_clk_in_ibufds DIFF_TERM=TRUE; |
|
NET "clkgen0/sys_clk_in_200" TNM_NET = "sys_clk_in_200"; |
TIMESPEC "TSSYSCLK200" = PERIOD "sys_clk_in_200" 5 ns HIGH 50 %; |
|
|
NET rst_n_pad_i LOC = T23 | IOSTANDARD = LVDCI_33; |
NET rst_n_pad_i PULLUP; |
NET rst_n_pad_i TIG; |
|
|
#------------------------------------------------------------------------------ |
# User Reset pins (hook up so user can reset system from processor) |
#------------------------------------------------------------------------------ |
|
#NET usr_rst_out LOC = P20 | IOSTANDARD = LVCMOS25; # HDR2_62 |
#NET usr_rst_out PULLUP; |
#NET usr_rst_out TIG; |
#NET usr_rst_in LOC = P21 | IOSTANDARD = LVCMOS25; # HDR2_64 |
#NET usr_rst_in PULLUP; |
#NET usr_rst_in TIG; |
|
#------------------------------------------------------------------------------ |
# All pins for ML501 |
#------------------------------------------------------------------------------ |
|
#NET "sys_clk_s" TNM_NET = "sys_clk"; |
#TIMESPEC "TSSYSCLK" = PERIOD "sys_clk" 10 ns HIGH 50 %; |
#NET "sys_clk_in_200" TNM_NET = "sys_clk_in_200"; |
#TIMESPEC "TSSYSCLK200" = PERIOD "sys_clk_in_200" 5 ns HIGH 50 %; |
|
#NET sys_clk_in_p LOC = E16; |
#NET sys_clk_in_n LOC = E17; |
#NET sys_clk_in_p IOSTANDARD = LVDS_25; |
#NET sys_clk_in_n IOSTANDARD = LVDS_25; |
#INST *sys_clk_in_ibufds DIFF_TERM=TRUE; |
|
#NET sys_rst_pin LOC = T23 | IOSTANDARD = LVCMOS33 | PULLUP; |
|
#NET Interrupt TIG; |
|
# Reset timing ignore - treat as async paths |
#NET sys_rst_s TIG; |
#NET opb_v20_0_OPB_Rst TIG; |
#NET lmb_v10_1_OPB_Rst TIG; |
#NET lmb_v10_0_OPB_Rst TIG; |
#NET opb_v20_0_Debug_SYS_Rst TIG; |
#NET plb_v34_0_PLB_Rst TIG; |
#NET dcm_locked TIG; |
|
#------------------------------------------------------------------------------ |
# OpenCores JTAG Debug signals and User UART on EXP Header pins |
#------------------------------------------------------------------------------ |
|
NET uart0_srx_expheader_pad_i LOC = F25; # HDR2_2 |
NET uart0_srx_expheader_pad_i TIG; |
NET uart0_srx_expheader_pad_i PULLUP; |
NET uart0_srx_expheader_pad_i IOSTANDARD = LVCMOS25; |
|
NET uart0_stx_expheader_pad_o LOC = F24; # HDR2_4 |
NET uart0_stx_expheader_pad_o TIG; |
NET uart0_stx_expheader_pad_o PULLUP; |
NET uart0_stx_expheader_pad_o IOSTANDARD = LVCMOS25; |
|
NET tdo_pad_o LOC = E26; # HDR2_6 |
NET tdi_pad_i LOC = E25; # HDR2_8 |
NET tms_pad_i LOC = G22; # HDR2_10 |
NET tck_pad_i LOC = G21; # HDR2_12 |
|
NET tdo_pad_o TIG; NET tdo_pad_o PULLUP; NET tdo_pad_o IOSTANDARD = LVCMOS25; |
NET tdi_pad_i TIG; NET tdi_pad_i PULLUP; NET tdi_pad_i IOSTANDARD = LVCMOS25; |
NET tms_pad_i TIG; NET tms_pad_i PULLUP; NET tms_pad_i IOSTANDARD = LVCMOS25; |
NET tck_pad_i TIG; NET tck_pad_i PULLUP; NET tck_pad_i IOSTANDARD = LVCMOS25; |
# Overide the following mapping error: |
# ERROR:Place:645 - A clock IOB clock component is not placed at an optimal clock |
# IOB site. |
NET "tck_pad_i" CLOCK_DEDICATED_ROUTE = FALSE; |
|
#//////////////////////////////////////////////////////////////////////////// |
#// Buttons, LEDs, Piezo, and DIP Switches |
#//////////////////////////////////////////////////////////////////////////// |
|
# GPLED |
NET gpio0_io<0> LOC = E11; #GPLED7 (Rightmost - LSB) |
NET gpio0_io<1> LOC = E10; #GPLED6 |
NET gpio0_io<2> LOC = E15; #GPLED5 |
NET gpio0_io<3> LOC = D15; #GPLED4 |
NET gpio0_io<4> LOC = F12; #GPLED3 |
NET gpio0_io<5> LOC = E12; #GPLED2 |
NET gpio0_io<6> LOC = D14; #GPLED1 |
NET gpio0_io<7> LOC = E13; #GPLED0 (Leftmost - MSB) |
|
NET gpio0_io<0> IOSTANDARD = LVCMOS25; |
NET gpio0_io<1> IOSTANDARD = LVCMOS25; |
NET gpio0_io<2> IOSTANDARD = LVCMOS25; |
NET gpio0_io<3> IOSTANDARD = LVCMOS25; |
NET gpio0_io<4> IOSTANDARD = LVCMOS25; |
NET gpio0_io<5> IOSTANDARD = LVCMOS25; |
NET gpio0_io<6> IOSTANDARD = LVCMOS25; |
NET gpio0_io<7> IOSTANDARD = LVCMOS25; |
|
# North-East-South-West-Center LEDs |
NET gpio0_io<8> LOC = T22; # C LED |
NET gpio0_io<9> LOC = AA18; # W LED |
NET gpio0_io<10> LOC = AA8; # S LED |
NET gpio0_io<11> LOC = Y18; # E LED |
NET gpio0_io<12> LOC = Y8; # N LED |
NET gpio0_io<8> IOSTANDARD = LVCMOS33; |
NET gpio0_io<9> IOSTANDARD = LVCMOS33; |
NET gpio0_io<10> IOSTANDARD = LVCMOS33; |
NET gpio0_io<11> IOSTANDARD = LVCMOS33; |
NET gpio0_io<12> IOSTANDARD = LVCMOS33; |
|
# North-East-South-West-Center Buttons |
NET gpio0_io<13> LOC = B21; # C Button |
NET gpio0_io<14> LOC = C21; # W Button |
NET gpio0_io<15> LOC = B22; # S Button |
NET gpio0_io<16> LOC = A23; # E Button |
NET gpio0_io<17> LOC = A22; # N Button |
NET gpio0_io<13> IOSTANDARD = LVCMOS33; |
NET gpio0_io<14> IOSTANDARD = LVCMOS33; |
NET gpio0_io<15> IOSTANDARD = LVCMOS33; |
NET gpio0_io<16> IOSTANDARD = LVCMOS33; |
NET gpio0_io<17> IOSTANDARD = LVCMOS33; |
|
# Dip Switches 1-8 |
NET gpio0_io<18> LOC = T7; # DIP SW 8 |
NET gpio0_io<19> LOC = U7; # DIP SW 7 |
NET gpio0_io<20> LOC = U5; # DIP SW 6 |
NET gpio0_io<21> LOC = U6; # DIP SW 5 |
NET gpio0_io<22> LOC = T5; # DIP SW 4 |
NET gpio0_io<23> LOC = T4; # DIP SW 3 |
#NET gpio0_io<24> LOC = V3; # DIP SW 2 |
#NET gpio0_io<25> LOC = U4; # DIP SW 1 |
NET gpio0_io<18> IOSTANDARD = LVCMOS18; |
NET gpio0_io<19> IOSTANDARD = LVCMOS18; |
NET gpio0_io<20> IOSTANDARD = LVCMOS18; |
NET gpio0_io<21> IOSTANDARD = LVCMOS18; |
NET gpio0_io<22> IOSTANDARD = LVCMOS18; |
NET gpio0_io<23> IOSTANDARD = LVCMOS18; |
#NET gpio0_io<24> IOSTANDARD = LVCMOS18; |
#NET gpio0_io<25> IOSTANDARD = LVCMOS18; |
|
#SMA Connectors |
#NET gpio0_io<22> LOC = F10; # SMA_IN_N |
#NET gpio0_io<23> LOC = F9; # SMA_IN_P |
#NET gpio0_io<24> LOC = F19; # SMA_OUT_N |
#NET gpio0_io<25> LOC = E18; # SMA_OUT_P |
#NET gpio0_io<26> LOC = AD8; # USERCLK |
#NET gpio0_io<22> IOSTANDARD = LVCMOS25; |
#NET gpio0_io<23> IOSTANDARD = LVCMOS25; |
#NET gpio0_io<24> IOSTANDARD = LVCMOS25; |
#NET gpio0_io<25> IOSTANDARD = LVCMOS25; |
#NET gpio0_io<26> IOSTANDARD = LVCMOS33; |
|
NET "gpio0_io<*>" PULLDOWN; |
NET "gpio0_io<*>" TIG; |
NET "gpio0_io<*>" SLEW = SLOW; |
NET "gpio0_io<*>" DRIVE = 2; |
|
#NET "gpio0_io<22>" SLEW = FAST; |
#NET "gpio0_io<22>" DRIVE = 12; |
#NET "gpio0_io<23>" SLEW = FAST; |
#NET "gpio0_io<23>" DRIVE = 12; |
#NET "gpio0_io<24>" SLEW = FAST; |
#NET "gpio0_io<24>" DRIVE = 12; |
#NET "gpio0_io<25>" SLEW = FAST; |
#NET "gpio0_io<25>" DRIVE = 12; |
|
## #NET "gpio2_d_out<*>" TIG; |
## #NET "gpio2_t_out<*>" TIG; |
## NET "gpio2_in<*>" TIG; |
|
## NET "piezo" LOC = V1; |
## NET "piezo" IOSTANDARD = LVCMOS18; |
## NET "piezo" TIG; |
|
## #------------------------------------------------------------------------------ |
## # IO Pad Location Constraints / Properties for PS/2 Ports |
## #------------------------------------------------------------------------------ |
|
## #Keyboard |
## NET ps2_keyb_clk LOC = J1; |
## NET ps2_keyb_clk SLEW = SLOW; |
## NET ps2_keyb_clk DRIVE = 2; |
## NET ps2_keyb_clk IOSTANDARD = LVCMOS18; |
## NET ps2_keyb_clk TIG; |
## NET ps2_keyb_data LOC = H2; |
## NET ps2_keyb_data SLEW = SLOW; |
## NET ps2_keyb_data DRIVE = 2; |
## NET ps2_keyb_data IOSTANDARD = LVCMOS18; |
## NET ps2_keyb_data TIG; |
|
## #Mouse |
## NET ps2_mouse_clk LOC = L2; |
## NET ps2_mouse_clk SLEW = SLOW; |
## NET ps2_mouse_clk DRIVE = 2; |
## NET ps2_mouse_clk IOSTANDARD = LVCMOS18; |
## NET ps2_mouse_clk TIG; |
## NET ps2_mouse_data LOC = K1; |
## NET ps2_mouse_data SLEW = SLOW; |
## NET ps2_mouse_data DRIVE = 2; |
## NET ps2_mouse_data IOSTANDARD = LVCMOS18; |
## NET ps2_mouse_data TIG; |
|
## #------------------------------------------------------------------------------ |
## # IO Pad Location Constraints / Properties for IIC Controller |
## #------------------------------------------------------------------------------ |
|
# General I2C bus |
|
NET i2c0_scl_io LOC = R20; |
NET i2c0_sda_io LOC = T20; |
NET i2c0_scl_io SLEW = SLOW; |
NET i2c0_scl_io DRIVE = 6; |
NET i2c0_scl_io TIG; |
NET i2c0_scl_io IOSTANDARD = LVCMOS33; |
NET i2c0_sda_io SLEW = SLOW; |
NET i2c0_sda_io DRIVE = 6; |
NET i2c0_sda_io TIG; |
NET i2c0_sda_io IOSTANDARD = LVCMOS33; |
|
# DDR2 I2C bus |
|
NET i2c1_scl_io LOC = Y7; |
NET i2c1_sda_io LOC = AA7; |
NET i2c1_scl_io SLEW = SLOW; |
NET i2c1_scl_io DRIVE = 6; |
NET i2c1_scl_io TIG; |
NET i2c1_scl_io IOSTANDARD = LVCMOS18; |
NET i2c1_sda_io SLEW = SLOW; |
NET i2c1_sda_io DRIVE = 6; |
NET i2c1_sda_io TIG; |
NET i2c1_sda_io IOSTANDARD = LVCMOS18; |
|
## #------------------------------------------------------------------------------ |
## # IO Pad Locations Constraints for SPI memory |
## #------------------------------------------------------------------------------ |
|
NET spi0_mosi_o LOC = AA9 | IOSTANDARD = LVCMOS33 | DRIVE = 6 | SLEW = FAST | TIG; |
NET spi0_ss_o<0> LOC = AC14 | IOSTANDARD = LVCMOS33 | DRIVE = 6 | SLEW = FAST | TIG; |
# These go through the STARTUP_VIRTEX5 block - don't worry about assigning them |
# here. |
#NET spi0_miso_i LOC = K11 | IOSTANDARD = LVCMOS33 | DRIVE = 6 | SLEW = FAST | TIG; |
|
#NET spi0_sck_o LOC = J10 | IOSTANDARD = LVCMOS33 | DRIVE = 6 | SLEW = FAST | TIG; |
|
## #------------------------------------------------------------------------------ |
## # IO Pad Location Constraints / Properties for System ACE MPU / USB |
## #------------------------------------------------------------------------------ |
|
## NET sysace_clk_in LOC = AB12; |
## NET sysace_clk_in IOSTANDARD = LVCMOS33; |
## NET sysace_clk_in TNM_NET = "sysace_clk_in"; |
## # Leave 1 ns margin |
## TIMESPEC "TSSYSACE" = PERIOD "sysace_clk_in" 29 ns; |
|
## NET sace_usb_a<0> LOC = N6; |
## NET sace_usb_a<1> LOC = E5; |
## NET sace_usb_a<2> LOC = F5; |
## NET sace_usb_a<3> LOC = F4; |
## NET sace_usb_a<4> LOC = J5; |
## NET sace_usb_a<5> LOC = E7; |
## NET sace_usb_a<6> LOC = G7; |
## NET sace_usb_a<*> IOSTANDARD = LVCMOS33; |
## NET sace_usb_a<*> SLEW = FAST; |
## NET sace_usb_a<*> DRIVE = 8; |
## NET sace_mpce LOC = F7; |
## NET sace_mpce IOSTANDARD = LVCMOS33; |
## NET sace_mpce SLEW = FAST; |
## NET sace_mpce DRIVE = 8; |
## NET sace_usb_d<0> LOC = M6; |
## NET sace_usb_d<1> LOC = K5; |
## NET sace_usb_d<2> LOC = L3; |
## NET sace_usb_d<3> LOC = L4; |
## NET sace_usb_d<4> LOC = L7; |
## NET sace_usb_d<5> LOC = L5; |
## NET sace_usb_d<6> LOC = H6; |
## NET sace_usb_d<7> LOC = G5; |
## NET sace_usb_d<8> LOC = M7; |
## NET sace_usb_d<9> LOC = H7; |
## NET sace_usb_d<10> LOC = J6; |
## NET sace_usb_d<11> LOC = G4; |
## NET sace_usb_d<12> LOC = K7; |
## NET sace_usb_d<13> LOC = J4; |
## NET sace_usb_d<14> LOC = H4; |
## NET sace_usb_d<15> LOC = K6; |
## NET sace_usb_d<*> IOSTANDARD = LVCMOS33; |
## NET sace_usb_d<*> SLEW = FAST; |
## NET sace_usb_d<*> DRIVE = 8; |
## NET sace_usb_d<*> PULLDOWN; |
## NET sace_usb_oen LOC = E6; |
## NET sace_usb_oen IOSTANDARD = LVCMOS33; |
## NET sace_usb_oen SLEW = FAST; |
## NET sace_usb_oen DRIVE = 8; |
## NET sace_usb_wen LOC = M5; |
## NET sace_usb_wen IOSTANDARD = LVCMOS33; |
## NET sace_usb_wen SLEW = FAST; |
## NET sace_usb_wen DRIVE = 8; |
## NET sysace_mpirq LOC = G6; |
## NET sysace_mpirq IOSTANDARD = LVCMOS33; |
## NET sysace_mpirq TIG; |
## NET sysace_mpirq PULLDOWN; |
|
## NET usb_csn LOC = N3; |
## NET usb_csn IOSTANDARD = LVCMOS33; |
## NET usb_csn SLEW = FAST; |
## NET usb_csn DRIVE = 8; |
## NET usb_hpi_reset_n LOC = P3; |
## NET usb_hpi_reset_n IOSTANDARD = LVCMOS33; |
## NET usb_hpi_reset_n TIG; |
## NET usb_hpi_int LOC = M4; |
## NET usb_hpi_int IOSTANDARD = LVCMOS33; |
## NET usb_hpi_int TIG; |
## NET usb_hpi_int PULLDOWN; |
|
## //////////////////////////////////////////////////////////////////////////// |
## // Misc Board Signals |
## //////////////////////////////////////////////////////////////////////////// |
|
## NET plb_error LOC = N4; # Bus Error 1 |
## NET plb_error IOSTANDARD = LVCMOS33; |
## NET plb_error TIG; |
## NET opb_error LOC = P5; # Bus Error 2 |
## NET opb_error IOSTANDARD = LVCMOS33; |
## NET opb_error TIG; |
|
## #------------------------------------------------------------------------------ |
## # IO Pad Location Constraints / Properties for Expansion Header GPIO |
## #------------------------------------------------------------------------------ |
|
## NET gpio_exp_hdr1<31> LOC = AB26; # HDR1_64 |
## NET gpio_exp_hdr1<30> LOC = AC26; # HDR1_62 |
## NET gpio_exp_hdr1<29> LOC = AA25; # HDR1_60 |
## NET gpio_exp_hdr1<28> LOC = P26; # HDR1_58 |
## NET gpio_exp_hdr1<27> LOC = Y26; # HDR1_56 |
## NET gpio_exp_hdr1<26> LOC = Y25; # HDR1_54 |
## NET gpio_exp_hdr1<25> LOC = W26; # HDR1_52 |
## NET gpio_exp_hdr1<24> LOC = W25; # HDR1_50 |
## NET gpio_exp_hdr1<23> LOC = U25; # HDR1_48 |
## NET gpio_exp_hdr1<22> LOC = U24; # HDR1_46 |
## NET gpio_exp_hdr1<21> LOC = T25; # HDR1_44 |
## NET gpio_exp_hdr1<20> LOC = T24; # HDR1_42 |
## NET gpio_exp_hdr1<19> LOC = P24; # HDR1_40 |
## NET gpio_exp_hdr1<18> LOC = P25; # HDR1_38 |
## NET gpio_exp_hdr1<17> LOC = N26; # HDR1_36 |
## NET gpio_exp_hdr1<16> LOC = AB25; # HDR1_34 |
## NET gpio_exp_hdr1<15> LOC = M24; # HDR1_32 |
## NET gpio_exp_hdr1<14> LOC = N24; # HDR1_30 |
## NET gpio_exp_hdr1<13> LOC = M25; # HDR1_28 |
## NET gpio_exp_hdr1<12> LOC = M26; # HDR1_26 |
## NET gpio_exp_hdr1<11> LOC = K25; # HDR1_24 |
## NET gpio_exp_hdr1<10> LOC = K26; # HDR1_22 |
## NET gpio_exp_hdr1<9> LOC = L24; # HDR1_20 |
## NET gpio_exp_hdr1<8> LOC = L25; # HDR1_18 |
## NET gpio_exp_hdr1<7> LOC = M21; # HDR1_16 |
## NET gpio_exp_hdr1<6> LOC = K21; # HDR1_14 |
## NET gpio_exp_hdr1<5> LOC = K20; # HDR1_12 |
## NET gpio_exp_hdr1<4> LOC = M22; # HDR1_10 |
## NET gpio_exp_hdr1<3> LOC = H23; # HDR1_8 |
## NET gpio_exp_hdr1<2> LOC = J21; # HDR1_6 |
## NET gpio_exp_hdr1<1> LOC = J23; # HDR1_4 |
## NET gpio_exp_hdr1<0> LOC = J20; # HDR1_2 |
#NET gpio_exp_hdr1<*> TIG; |
#NET gpio_exp_hdr1<*> PULLDOWN; |
#NET gpio_exp_hdr1<*> IOSTANDARD = LVCMOS25; |
|
## NET gpio_exp_hdr2<31> LOC = P21; # HDR2_64 |
## NET gpio_exp_hdr2<30> LOC = P20; # HDR2_62 |
## NET gpio_exp_hdr2<29> LOC = H24; # HDR2_60 |
## NET gpio_exp_hdr2<28> LOC = J24; # HDR2_58 |
## NET gpio_exp_hdr2<27> LOC = M20; # HDR2_56 |
## NET gpio_exp_hdr2<26> LOC = M19; # HDR2_54 |
## NET gpio_exp_hdr2<25> LOC = G24; # HDR2_52 |
## NET gpio_exp_hdr2<24> LOC = G25; # HDR2_50 |
## NET gpio_exp_hdr2<23> LOC = P23; # HDR2_48 |
## NET gpio_exp_hdr2<22> LOC = N23; # HDR2_46 |
## NET gpio_exp_hdr2<21> LOC = L20; # HDR2_44 |
## NET gpio_exp_hdr2<20> LOC = L19; # HDR2_42 |
## NET gpio_exp_hdr2<19> LOC = G26; # HDR2_40 |
## NET gpio_exp_hdr2<18> LOC = H26; # HDR2_38 |
## NET gpio_exp_hdr2<17> LOC = K23; # HDR2_36 |
## NET gpio_exp_hdr2<16> LOC = K22; # HDR2_34 |
## NET gpio_exp_hdr2<15> LOC = V26; # HDR2_32 |
## NET gpio_exp_hdr2<14> LOC = U26; # HDR2_30 |
## NET gpio_exp_hdr2<13> LOC = N22; # HDR2_28 |
## NET gpio_exp_hdr2<12> LOC = N21; # HDR2_26 |
## NET gpio_exp_hdr2<11> LOC = R22; # HDR2_24 |
## NET gpio_exp_hdr2<10> LOC = R23; # HDR2_22 |
## NET gpio_exp_hdr2<9> LOC = J25; # HDR2_20 |
## NET gpio_exp_hdr2<8> LOC = J26; # HDR2_18 |
## NET gpio_exp_hdr2<7> LOC = P19; # HDR2_16 |
## NET gpio_exp_hdr2<6> LOC = N19; # HDR2_14 |
## NET gpio_exp_hdr2<5> LOC = G21; # HDR2_12 |
## NET gpio_exp_hdr2<4> LOC = G22; # HDR2_10 |
## NET gpio_exp_hdr2<3> LOC = E25; # HDR2_8 |
## NET gpio_exp_hdr2<2> LOC = E26; # HDR2_6 |
## NET gpio_exp_hdr2<1> LOC = F24; # HDR2_4 |
## NET gpio_exp_hdr2<0> LOC = F25; # HDR2_2 |
## NET gpio_exp_hdr2<*> TIG; |
## NET gpio_exp_hdr2<*> PULLDOWN; |
## NET gpio_exp_hdr2<*> IOSTANDARD = LVCMOS25; |
|
## #------------------------------------------------------------------------------ |
## # IO Pad Location Constraints / Properties for Character LCD GPIO |
## #------------------------------------------------------------------------------ |
|
## NET gpio_char_lcd<6> LOC = P6; # LCD_E |
## NET gpio_char_lcd<5> LOC = R7; # LCD_RS |
## NET gpio_char_lcd<4> LOC = R5; # LCD_RW |
## NET gpio_char_lcd<3> LOC = P4; # LCD_DB7 |
## NET gpio_char_lcd<2> LOC = R3; # LCD_DB6 |
## NET gpio_char_lcd<1> LOC = T3; # LCD_DB5 |
## NET gpio_char_lcd<0> LOC = R6; # LCD_DB4 |
## NET gpio_char_lcd<*> IOSTANDARD = LVCMOS33; |
## NET gpio_char_lcd<*> TIG; |
## NET gpio_char_lcd<*> PULLDOWN; |
|
## #------------------------------------------------------------------------------ |
## # IO Pad Location Constraints / Properties for DDR Controllers |
## #------------------------------------------------------------------------------ |
|
######################################################################## |
# Controller 0 |
# Memory Device: DDR2_SDRAM->SODIMMs->MT4HTF3264HY-53E # |
# Data Width: 64 # |
# Data Mask: 1 # |
######################################################################## |
|
|
NET ddr2_a<0> LOC = Y5; # DDR_A0 |
NET ddr2_a<1> LOC = Y6; # DDR_A1 |
NET ddr2_a<2> LOC = W6; # DDR_A2 |
NET ddr2_a<3> LOC = W5; # DDR_A3 |
NET ddr2_a<4> LOC = V7; # DDR_A4 |
NET ddr2_a<5> LOC = V6; # DDR_A5 |
NET ddr2_a<6> LOC = Y3; # DDR_A6 |
NET ddr2_a<7> LOC = W3; # DDR_A7 |
NET ddr2_a<8> LOC = W4; # DDR_A8 |
NET ddr2_a<9> LOC = V4; # DDR_A9 |
NET ddr2_a<10> LOC = AD3; # DDR_A10 |
NET ddr2_a<11> LOC = AD4; # DDR_A11 |
NET ddr2_a<12> LOC = AC3; # DDR_A12 |
NET ddr2_ba<0> LOC = AB5; # DDR_BA0 |
NET ddr2_ba<1> LOC = AB6; # DDR_BA1 |
NET ddr2_cas_n LOC = AE3; # DDR_CAS_N |
NET ddr2_cke<0> LOC = AA3; # DDR_CKE |
NET ddr2_cke<1> LOC = AB4; # DDR_CKE |
NET ddr2_cs_n<0> LOC = AF3; # DDR_CS_N |
NET ddr2_cs_n<1> LOC = AD6; # DDR_CS_N |
NET ddr2_ras_n LOC = AC6; # DDR_RAS_N |
NET ddr2_we_n LOC = AB7; # DDR_WE_N |
NET ddr2_ck<0> LOC = E2; # DDR_CK0_P |
NET ddr2_ck_n<0> LOC = E1; # DDR_CK0_N |
NET ddr2_ck<1> LOC = P1; # DDR_CK1_P |
NET ddr2_ck_n<1> LOC = R1; # DDR_CK1_N |
NET ddr2_odt<0> LOC =AE6; # DDR_ODT0 |
NET ddr2_odt<1> LOC =AE5; # DDR_ODT1 |
|
NET ddr2_dm<0> LOC = B9; # DDR_DM0 |
NET ddr2_dm<1> LOC = A8; # DDR_DM1 |
NET ddr2_dm<2> LOC = C4; # DDR_DM2 |
NET ddr2_dm<3> LOC = F2; # DDR_DM3 |
NET ddr2_dm<4> LOC = AB1; # DDR_DM4 |
NET ddr2_dm<5> LOC = AF24; # DDR_DM5 |
NET ddr2_dm<6> LOC = AF22; # DDR_DM6 |
NET ddr2_dm<7> LOC = AF8; # DDR_DM7 |
|
NET ddr2_dqs<0> LOC = B7; # DDR_DQS0 |
NET ddr2_dqs_n<0> LOC = A7; # DDR_DQSN0 |
NET ddr2_dqs<1> LOC = D5; # DDR_DQS1 |
NET ddr2_dqs_n<1> LOC = D6; # DDR_DQSN1 |
NET ddr2_dqs<2> LOC = C6; # DDR_DQS2 |
NET ddr2_dqs_n<2> LOC = C7; # DDR_DQSN2 |
NET ddr2_dqs<3> LOC = M1; # DDR_DQS3 |
NET ddr2_dqs_n<3> LOC = N1; # DDR_DQSN3 |
NET ddr2_dqs<4> LOC = T2; # DDR_DQS4 |
NET ddr2_dqs_n<4> LOC = R2; # DDR_DQSN4 |
NET ddr2_dqs<5> LOC = AF18; # DDR_DQS5 |
NET ddr2_dqs_n<5> LOC = AE18; # DDR_DQSN5 |
NET ddr2_dqs<6> LOC = AF19; # DDR_DQS6 |
NET ddr2_dqs_n<6> LOC = AF20; # DDR_DQSN6 |
NET ddr2_dqs<7> LOC = AF17; # DDR_DQS7 |
NET ddr2_dqs_n<7> LOC = AE17; # DDR_DQSN7 |
|
NET ddr2_dq<0> LOC = C11; # DDR_D0 |
NET ddr2_dq<1> LOC = C13; # DDR_D1 |
NET ddr2_dq<2> LOC = A12; # DDR_D2 |
NET ddr2_dq<3> LOC = C9; # DDR_D3 |
NET ddr2_dq<4> LOC = D10; # DDR_D4 |
NET ddr2_dq<5> LOC = C12; # DDR_D5 |
NET ddr2_dq<6> LOC = B12; # DDR_D6 |
NET ddr2_dq<7> LOC = A13; # DDR_D7 |
NET ddr2_dq<8> LOC = A10; # DDR_D8 |
NET ddr2_dq<9> LOC = A9; # DDR_D9 |
NET ddr2_dq<10> LOC = B5; # DDR_D10 |
NET ddr2_dq<11> LOC = D3; # DDR_D11 |
NET ddr2_dq<12> LOC = B10; # DDR_D12 |
NET ddr2_dq<13> LOC = B11; # DDR_D13 |
NET ddr2_dq<14> LOC = B6; # DDR_D14 |
NET ddr2_dq<15> LOC = B4; # DDR_D15 |
NET ddr2_dq<16> LOC = C2; # DDR_D16 |
NET ddr2_dq<17> LOC = A2; # DDR_D17 |
NET ddr2_dq<18> LOC = D1; # DDR_D18 |
NET ddr2_dq<19> LOC = B1; # DDR_D19 |
NET ddr2_dq<20> LOC = C3; # DDR_D20 |
NET ddr2_dq<21> LOC = A3; # DDR_D21 |
NET ddr2_dq<22> LOC = C1; # DDR_D22 |
NET ddr2_dq<23> LOC = B2; # DDR_D23 |
NET ddr2_dq<24> LOC = F3; # DDR_D24 |
NET ddr2_dq<25> LOC = G1; # DDR_D25 |
NET ddr2_dq<26> LOC = G2; # DDR_D26 |
NET ddr2_dq<27> LOC = H3; # DDR_D27 |
NET ddr2_dq<28> LOC = E3; # DDR_D28 |
NET ddr2_dq<29> LOC = H1; # DDR_D29 |
NET ddr2_dq<30> LOC = K3; # DDR_D30 |
NET ddr2_dq<31> LOC = J3; # DDR_D31 |
|
NET ddr2_dq<32> LOC = Y1; # DDR_D32 |
NET ddr2_dq<33> LOC = Y2; # DDR_D33 |
NET ddr2_dq<34> LOC = AC1; # DDR_D34 |
NET ddr2_dq<35> LOC = AD1; # DDR_D35 |
NET ddr2_dq<36> LOC = AA2; # DDR_D36 |
NET ddr2_dq<37> LOC = AB2; # DDR_D37 |
NET ddr2_dq<38> LOC = AC2; # DDR_D38 |
NET ddr2_dq<39> LOC = AE1; # DDR_D39 |
NET ddr2_dq<40> LOC = AD23; # DDR_D40 |
NET ddr2_dq<41> LOC = AD26; # DDR_D41 |
NET ddr2_dq<42> LOC = AF25; # DDR_D42 |
NET ddr2_dq<43> LOC = AD25; # DDR_D43 |
NET ddr2_dq<44> LOC = AD24; # DDR_D44 |
NET ddr2_dq<45> LOC = AE26; # DDR_D45 |
NET ddr2_dq<46> LOC = AE25; # DDR_D46 |
NET ddr2_dq<47> LOC = AF23; # DDR_D47 |
NET ddr2_dq<48> LOC = AD20; # DDR_D48 |
NET ddr2_dq<49> LOC = AE20; # DDR_D49 |
NET ddr2_dq<50> LOC = AF14; # DDR_D50 |
NET ddr2_dq<51> LOC = AF12; # DDR_D51 |
NET ddr2_dq<52> LOC = AD21; # DDR_D52 |
NET ddr2_dq<53> LOC = AE21; # DDR_D53 |
NET ddr2_dq<54> LOC = AF13; # DDR_D54 |
NET ddr2_dq<55> LOC = AE12; # DDR_D55 |
NET ddr2_dq<56> LOC = AE11; # DDR_D56 |
NET ddr2_dq<57> LOC = AE10; # DDR_D57 |
NET ddr2_dq<58> LOC = AF7; # DDR_D58 |
NET ddr2_dq<59> LOC = AE7; # DDR_D59 |
NET ddr2_dq<60> LOC = AF10; # DDR_D60 |
NET ddr2_dq<61> LOC = AF9; # DDR_D61 |
NET ddr2_dq<62> LOC = AE8; # DDR_D62 |
NET ddr2_dq<63> LOC = AD9; # DDR_D63 |
|
NET ddr2_a<*> IOSTANDARD = SSTL18_II; |
NET ddr2_ba<*> IOSTANDARD = SSTL18_II; |
NET ddr2_cke<*> IOSTANDARD = SSTL18_II; |
NET ddr2_cas_n IOSTANDARD = SSTL18_II; |
NET ddr2_cs_n<*> IOSTANDARD = SSTL18_II; |
NET ddr2_ras_n IOSTANDARD = SSTL18_II; |
NET ddr2_we_n IOSTANDARD = SSTL18_II; |
NET ddr2_odt<*> IOSTANDARD = SSTL18_II; |
|
NET ddr2_dm<*> IOSTANDARD = SSTL18_II_DCI; |
NET ddr2_dq<*> IOSTANDARD = SSTL18_II_DCI; |
|
NET ddr2_ck<*> IOSTANDARD = DIFF_SSTL18_II; |
NET ddr2_ck_n<*> IOSTANDARD = DIFF_SSTL18_II; |
NET ddr2_dqs<*> IOSTANDARD = DIFF_SSTL18_II_DCI; |
NET ddr2_dqs_n<*> IOSTANDARD = DIFF_SSTL18_II_DCI; |
|
## NET "ddr2_cal_clk" TNM_NET = "ddr2_cal_clk"; |
## NET "ddr2_dev_clk_*" TNM_NET = "ddr2_dev_clk"; |
## TIMESPEC "TSCAL_DEV" = FROM "ddr2_cal_clk" TO "ddr2_dev_clk" TIG; |
## TIMESPEC "TSDEV_CAL" = FROM "ddr2_dev_clk" TO "ddr2_cal_clk" TIG; |
############################################################################### |
# Define multicycle paths - these paths may take longer because additional |
# time allowed for logic to settle in calibration/initialization FSM |
############################################################################### |
|
# MIG 2.1: Eliminate Timegroup definitions for CLK0, and CLK90. Instead trace |
# multicycle paths from originating flip-flop to ANY destination |
# flip-flop (or in some cases, it can also be a BRAM) |
# MUX Select for either rising/falling CLK0 for 2nd stage read capture |
INST "*/u_phy_calib/gen_rd_data_sel*.u_ff_rd_data_sel" TNM = "TNM_RD_DATA_SEL"; |
TIMESPEC "TS_MC_RD_DATA_SEL" = FROM "TNM_RD_DATA_SEL" TO FFS |
"TS_SYS_CLK" * 4; |
# MUX select for read data - optional delay on data to account for byte skews |
INST "*/u_usr_rd/gen_rden_sel_mux*.u_ff_rden_sel_mux" TNM = "TNM_RDEN_SEL_MUX"; |
TIMESPEC "TS_MC_RDEN_SEL_MUX" = FROM "TNM_RDEN_SEL_MUX" TO FFS |
"TS_SYS_CLK" * 4; |
# Calibration/Initialization complete status flag (for PHY logic only) - can |
# be used to drive both flip-flops and BRAMs |
INST "*/u_phy_init/u_ff_phy_init_data_sel" TNM = "TNM_PHY_INIT_DATA_SEL"; |
TIMESPEC "TS_MC_PHY_INIT_DATA_SEL_0" = FROM "TNM_PHY_INIT_DATA_SEL" TO FFS |
"TS_SYS_CLK" * 4; |
TIMESPEC "TS_MC_PHY_INIT_DATA_SEL_90" = FROM "TNM_PHY_INIT_DATA_SEL" TO RAMS |
"TS_SYS_CLK" * 4; |
# Select (address) bits for SRL32 shift registers used in stage3/stage4 |
# calibration |
INST "*/u_phy_calib/gen_gate_dly*.u_ff_gate_dly" TNM = "TNM_GATE_DLY"; |
TIMESPEC "TS_MC_GATE_DLY" = FROM "TNM_GATE_DLY" TO FFS "TS_SYS_CLK" * 4; |
|
INST "*/u_phy_calib/gen_rden_dly*.u_ff_rden_dly" TNM = "TNM_RDEN_DLY"; |
TIMESPEC "TS_MC_RDEN_DLY" = FROM "TNM_RDEN_DLY" TO FFS "TS_SYS_CLK" * 4; |
|
INST "*/u_phy_calib/gen_cal_rden_dly*.u_ff_cal_rden_dly" |
TNM = "TNM_CAL_RDEN_DLY"; |
TIMESPEC "TS_MC_CAL_RDEN_DLY" = FROM "TNM_CAL_RDEN_DLY" TO FFS |
"TS_SYS_CLK" * 4; |
|
|
############################################################################### |
# DQS Read Post amble Glitch Squelch circuit related constraints |
############################################################################### |
|
############################################################################### |
# LOC placement of DQS-squelch related IDDR and IDELAY elements |
# Each circuit can be located at any of the following locations: |
# 1. Unused "N"-side of DQS differential pair I/O |
# 2. DM data mask (output only, input side is free for use) |
# 3. Any output-only site |
############################################################################### |
|
#INST "*/gen_dqs[0].u_iob_dqs/u_iddr_dq_ce" LOC = "ILOGIC_X0Y182"; |
#INST "*/gen_dqs[0].u_iob_dqs/u_iodelay_dq_ce" LOC = "IODELAY_X0Y182"; |
#INST "*/gen_dqs[1].u_iob_dqs/u_iddr_dq_ce" LOC = "ILOGIC_X0Y180"; |
#INST "*/gen_dqs[1].u_iob_dqs/u_iodelay_dq_ce" LOC = "IODELAY_X0Y180"; |
#INST "*/gen_dqs[2].u_iob_dqs/u_iddr_dq_ce" LOC = "ILOGIC_X0Y178"; |
#INST "*/gen_dqs[2].u_iob_dqs/u_iodelay_dq_ce" LOC = "IODELAY_X0Y178"; |
#INST "*/gen_dqs[3].u_iob_dqs/u_iddr_dq_ce" LOC = "ILOGIC_X0Y142"; |
#INST "*/gen_dqs[3].u_iob_dqs/u_iodelay_dq_ce" LOC = "IODELAY_X0Y142"; |
#INST "*/gen_dqs[4].u_iob_dqs/u_iddr_dq_ce" LOC = "ILOGIC_X0Y140"; |
#INST "*/gen_dqs[4].u_iob_dqs/u_iodelay_dq_ce" LOC = "IODELAY_X0Y140"; |
#INST "*/gen_dqs[5].u_iob_dqs/u_iddr_dq_ce" LOC = "ILOGIC_X0Y138"; |
#INST "*/gen_dqs[5].u_iob_dqs/u_iodelay_dq_ce" LOC = "IODELAY_X0Y138"; |
#INST "*/gen_dqs[6].u_iob_dqs/u_iddr_dq_ce" LOC = "ILOGIC_X0Y102"; |
#INST "*/gen_dqs[6].u_iob_dqs/u_iodelay_dq_ce" LOC = "IODELAY_X0Y102"; |
#INST "*/gen_dqs[7].u_iob_dqs/u_iddr_dq_ce" LOC = "ILOGIC_X0Y100"; |
#INST "*/gen_dqs[7].u_iob_dqs/u_iodelay_dq_ce" LOC = "IODELAY_X0Y100"; |
|
############################################################################### |
# LOC and timing constraints for flop driving DQS CE enable signal |
# from fabric logic. Even though the absolute delay on this path is |
# calibrated out (when synchronizing this output to DQS), the delay |
# should still be kept as low as possible to reduce post-calibration |
# voltage/temp variations - these are roughly proportional to the |
# absolute delay of the path |
############################################################################### |
INST "*/u_phy_calib/gen_gate[0].u_en_dqs_ff" LOC = SLICE_X0Y91; |
INST "*/u_phy_calib/gen_gate[1].u_en_dqs_ff" LOC = SLICE_X0Y90; |
INST "*/u_phy_calib/gen_gate[2].u_en_dqs_ff" LOC = SLICE_X0Y89; |
INST "*/u_phy_calib/gen_gate[3].u_en_dqs_ff" LOC = SLICE_X0Y71; |
INST "*/u_phy_calib/gen_gate[4].u_en_dqs_ff" LOC = SLICE_X0Y70; |
INST "*/u_phy_calib/gen_gate[5].u_en_dqs_ff" LOC = SLICE_X0Y69; |
INST "*/u_phy_calib/gen_gate[6].u_en_dqs_ff" LOC = SLICE_X0Y51; |
INST "*/u_phy_calib/gen_gate[7].u_en_dqs_ff" LOC = SLICE_X0Y50; |
|
# Control for DQS gate - from fabric flop. Prevent "runaway" delay - |
# two parts to this path: (1) from fabric flop to IDELAY, (2) from |
# IDELAY to asynchronous reset of IDDR that drives the DQ CE's |
# This can be relaxed by the user for lower frequencies: |
# 300MHz = 850ps, 267MHz = 900ps. At 200MHz = 950ps. |
# In general PAR should be able to route this |
# within 900ps over all speed grades. |
#NET "*/u_phy_io/en_dqs*" MAXDELAY = 900 ps; |
# JB: Every single one failed with < 2ns slack!! Try upping this... |
NET "*/u_phy_io/en_dqs*" MAXDELAY = 3000 ps; |
NET "*/u_phy_io/gen_dqs*.u_iob_dqs/en_dqs_sync" MAXDELAY = 850 ps; |
|
############################################################################### |
# Define multicycle paths - these paths may take longer because additional |
# time allowed for logic to settle in calibration/initialization FSM |
############################################################################### |
## DDR2 clock domain nets |
NET "*/xilinx_ddr2_if0/ddr2_read_done" TNM_NET = "DDR2_READ_DONE_GRP"; |
NET "*/xilinx_ddr2_if0/ddr2_write_done" TNM_NET = "DDR2_WRITE_DONE_GRP"; |
NET "*/xilinx_ddr2_if0/do_writeback_ddr2_shifter*" TNM_NET = "DDR2_WRITEBACK_SHIFTER"; |
|
TIMEGRP "DDR2_MC_REGS" = "DDR2_READ_DONE_GRP" "DDR2_WRITE_DONE_GRP" "DDR2_WRITEBACK_SHIFTER"; |
## System bus (wishbone) domain nets |
NET "*/xilinx_ddr2_if0/do_writeback*" TNM_NET = "WB_DO_WRITEBACK"; |
NET "*/xilinx_ddr2_if0/do_readfrom*" TNM_NET = "WB_DO_READFROM"; |
|
TIMEGRP "WB_MC_REGS" = "WB_DO_WRITEBACK" "WB_DO_READFROM"; |
|
# Path constraints - if bus clock is 50Mhz they have 20ns |
TIMESPEC TS_ddr2_controller_mc_paths = FROM "WB_MC_REGS" to "DDR2_MC_REGS" 20ns; |
TIMESPEC TS_ddr2_controller_mc_paths2 = FROM "DDR2_MC_REGS" to "WB_MC_REGS" 20ns; |
|
############################################################################### |
# "Half-cycle" path constraint from IDDR to CE pin for all DQ IDDR's |
# for DQS Read Post amble Glitch Squelch circuit |
############################################################################### |
|
# Max delay from output of IDDR to CE input of DQ IDDRs = tRPST + some slack |
# where slack account for rise-time of DQS on board. For now assume slack = |
# 0.400ns (based on initial SPICE simulations, assumes use of ODT), so |
# time = 0.4*Tcyc + 0.40ns = 1.6ns @333MHz |
INST "*/gen_dqs[*].u_iob_dqs/u_iddr_dq_ce" TNM = "TNM_DQ_CE_IDDR"; |
INST "*/gen_dq[*].u_iob_dq/gen_stg2_*.u_iddr_dq" TNM = "TNM_DQS_FLOPS"; |
#TIMESPEC "TS_DQ_CE" = FROM "TNM_DQ_CE_IDDR" TO "TNM_DQS_FLOPS" 2.4 ns; |
# JB: Was very closely failing on some paths, so up it by 100ps, but note it as an issue! |
TIMESPEC "TS_DQ_CE" = FROM "TNM_DQ_CE_IDDR" TO "TNM_DQS_FLOPS" 2.5 ns; |
|
|
## #------------------------------------------------------------------------------ |
## # IO Pad Location Constraints / Properties for UART |
## #------------------------------------------------------------------------------ |
|
#NET uart_RX LOC = AC7; |
#NET uart_RX IOSTANDARD = LVCMOS33; |
#NET uart_RX TIG; |
#NET uart_TX LOC = AD14; |
#NET uart_TX IOSTANDARD = LVCMOS33; |
#NET uart_TX TIG; |
|
NET uart0_srx_pad_i LOC = AC7; |
NET uart0_srx_pad_i IOSTANDARD = LVCMOS33; |
NET uart0_srx_pad_i TIG; |
NET uart0_stx_pad_o LOC = AD14; |
NET uart0_stx_pad_o IOSTANDARD = LVCMOS33; |
NET uart0_stx_pad_o TIG; |
|
## #------------------------------------------------------------------------------ |
## # IO Pad Location Constraints / Properties for SRAM |
## #------------------------------------------------------------------------------ |
|
#NET sram_clk LOC = U22; |
#NET sram_clk_fb LOC = AD15; |
#NET sram_clk_fb IOSTANDARD = LVCMOS33; |
#NET sram_clk IOSTANDARD = LVDCI_33; |
|
#NET sram_clk_fb FEEDBACK = 1500ps NET sram_clk; |
|
##NET sram_flash_addr<23> LOC = Y10; |
##NET sram_flash_addr<22> LOC = Y11; |
#NET sram_flash_addr<21> LOC = AA17; |
#NET sram_flash_addr<20> LOC = AB17; |
#NET sram_flash_addr<19> LOC = G14; |
#NET sram_flash_addr<18> LOC = F13; |
#NET sram_flash_addr<17> LOC = H14; |
#NET sram_flash_addr<16> LOC = H13; |
#NET sram_flash_addr<15> LOC = F15; |
#NET sram_flash_addr<14> LOC = G15; |
#NET sram_flash_addr<13> LOC = G12; |
#NET sram_flash_addr<12> LOC = H12; |
#NET sram_flash_addr<11> LOC = G16; |
#NET sram_flash_addr<10> LOC = H16; |
#NET sram_flash_addr<9> LOC = H11; |
#NET sram_flash_addr<8> LOC = G11; |
#NET sram_flash_addr<7> LOC = H17; |
#NET sram_flash_addr<6> LOC = G17; |
#NET sram_flash_addr<5> LOC = G10; |
#NET sram_flash_addr<4> LOC = G9; |
#NET sram_flash_addr<3> LOC = G19; |
#NET sram_flash_addr<2> LOC = H18; |
#NET sram_flash_addr<1> LOC = H9; |
##NET sram_flash_addr<0> LOC = H8; |
#NET sram_flash_addr<*> IOSTANDARD = LVCMOS33; |
#NET sram_flash_addr<*> SLEW = FAST; |
#NET sram_flash_addr<*> DRIVE = 8; |
|
#NET sram_flash_data<31> LOC = AD18 | IOSTANDARD = LVCMOS33 | DRIVE = 12 | SLEW = FAST; |
#NET sram_flash_data<30> LOC = AC18 | IOSTANDARD = LVCMOS33 | DRIVE = 12 | SLEW = FAST; |
#NET sram_flash_data<29> LOC = AB10 | IOSTANDARD = LVCMOS33 | DRIVE = 12 | SLEW = FAST; |
#NET sram_flash_data<28> LOC = AB9 | IOSTANDARD = LVCMOS33 | DRIVE = 12 | SLEW = FAST; |
#NET sram_flash_data<27> LOC = AC17 | IOSTANDARD = LVCMOS33 | DRIVE = 12 | SLEW = FAST; |
#NET sram_flash_data<26> LOC = AC16 | IOSTANDARD = LVCMOS33 | DRIVE = 12 | SLEW = FAST; |
#NET sram_flash_data<25> LOC = AC8 | IOSTANDARD = LVCMOS33 | DRIVE = 12 | SLEW = FAST; |
#NET sram_flash_data<24> LOC = AC9 | IOSTANDARD = LVCMOS33 | DRIVE = 12 | SLEW = FAST; |
#NET sram_flash_data<23> LOC = Y12 | IOSTANDARD = LVCMOS33 | DRIVE = 12 | SLEW = FAST; |
#NET sram_flash_data<22> LOC = Y13 | IOSTANDARD = LVCMOS33 | DRIVE = 12 | SLEW = FAST; |
#NET sram_flash_data<21> LOC = AA15 | IOSTANDARD = LVCMOS33 | DRIVE = 12 | SLEW = FAST; |
#NET sram_flash_data<20> LOC = AB14 | IOSTANDARD = LVCMOS33 | DRIVE = 12 | SLEW = FAST; |
#NET sram_flash_data<19> LOC = AA12 | IOSTANDARD = LVCMOS33 | DRIVE = 12 | SLEW = FAST; |
#NET sram_flash_data<18> LOC = AB11 | IOSTANDARD = LVCMOS33 | DRIVE = 12 | SLEW = FAST; |
#NET sram_flash_data<17> LOC = AA13 | IOSTANDARD = LVCMOS33 | DRIVE = 12 | SLEW = FAST; |
#NET sram_flash_data<16> LOC = AA14 | IOSTANDARD = LVCMOS33 | DRIVE = 12 | SLEW = FAST; |
|
#NET sram_flash_data<15> LOC = AC24 | IOSTANDARD = LVDCI_33; |
#NET sram_flash_data<14> LOC = AB22 | IOSTANDARD = LVDCI_33; |
#NET sram_flash_data<13> LOC = AA22 | IOSTANDARD = LVDCI_33; |
#NET sram_flash_data<12> LOC = AC21 | IOSTANDARD = LVDCI_33; |
#NET sram_flash_data<11> LOC = AB21 | IOSTANDARD = LVDCI_33; |
#NET sram_flash_data<10> LOC = W21 | IOSTANDARD = LVDCI_33; |
#NET sram_flash_data<9> LOC = W20 | IOSTANDARD = LVDCI_33; |
#NET sram_flash_data<8> LOC = U19 | IOSTANDARD = LVDCI_33; |
#NET sram_flash_data<7> LOC = U20 | IOSTANDARD = LVDCI_33; |
#NET sram_flash_data<6> LOC = V19 | IOSTANDARD = LVDCI_33; |
#NET sram_flash_data<5> LOC = W19 | IOSTANDARD = LVDCI_33; |
#NET sram_flash_data<4> LOC = Y21 | IOSTANDARD = LVDCI_33; |
#NET sram_flash_data<3> LOC = Y20 | IOSTANDARD = LVDCI_33; |
#NET sram_flash_data<2> LOC = AD19 | IOSTANDARD = LVDCI_33; |
#NET sram_flash_data<1> LOC = AC19 | IOSTANDARD = LVDCI_33; |
#NET sram_flash_data<0> LOC = AB20 | IOSTANDARD = LVDCI_33; |
|
#NET sram_flash_data<*> PULLDOWN; |
|
#NET sram_cen LOC = AB24 | IOSTANDARD = LVDCI_33; |
#NET sram_flash_oe_n LOC = AC22 | IOSTANDARD = LVDCI_33; |
##NET flash_oe_n LOC = AA9 | IOSTANDARD = LVCMOS33 | DRIVE = 12 | SLEW = FAST; |
#NET sram_flash_we_n LOC = AB15 | IOSTANDARD = LVCMOS33 | DRIVE = 12 | SLEW = FAST; |
#NET sram_bw<3> LOC = W24 | IOSTANDARD = LVDCI_33; |
#NET sram_bw<2> LOC = W23 | IOSTANDARD = LVDCI_33; |
#NET sram_bw<1> LOC = V24 | IOSTANDARD = LVDCI_33; |
#NET sram_bw<0> LOC = V23 | IOSTANDARD = LVDCI_33; |
##NET flash_cen LOC = AA10 | IOSTANDARD = LVCMOS33 | DRIVE = 12 | SLEW = FAST; |
#NET sram_adv_ld_n LOC = U21 | IOSTANDARD = LVDCI_33; |
#NET sram_mode LOC = AC23 | IOSTANDARD = LVDCI_33; |
# NET flash_audio_reset_n LOC = AD10 | IOSTANDARD = LVCMOS33; |
|
#------------------------------------------------------------------------------ |
# IO Pad Location Constraints / Properties for TFT VGA LCD Controller |
#------------------------------------------------------------------------------ |
|
#NET dvi_iic_scl LOC = D21; |
#NET dvi_iic_sda LOC = D20; |
#NET dvi_iic_scl SLEW = SLOW; |
#NET dvi_iic_scl DRIVE = 6; |
#NET dvi_iic_scl TIG; |
#NET dvi_iic_scl IOSTANDARD = LVCMOS33; |
#NET dvi_iic_sda SLEW = SLOW; |
#NET dvi_iic_sda DRIVE = 6; |
#NET dvi_iic_sda TIG; |
#NET dvi_iic_sda IOSTANDARD = LVCMOS33; |
|
#NET tft_lcd_data<0> LOC = A17; |
#NET tft_lcd_data<1> LOC = B17; |
#NET tft_lcd_data<2> LOC = C17; |
#NET tft_lcd_data<3> LOC = D18; |
#NET tft_lcd_data<4> LOC = C16; |
#NET tft_lcd_data<5> LOC = D16; |
#NET tft_lcd_data<6> LOC = B16; |
#NET tft_lcd_data<7> LOC = B15; |
#NET tft_lcd_data<8> LOC = A15; |
#NET tft_lcd_data<9> LOC = A14; |
#NET tft_lcd_data<10> LOC = B14; |
#NET tft_lcd_data<11> LOC = C14; |
#NET tft_lcd_data<*> IOSTANDARD = LVDCI_33; |
|
#NET tft_lcd_clk_p LOC = A20; |
#NET tft_lcd_clk_p IOSTANDARD = LVCMOS33 | DRIVE = 24 | SLEW = FAST; |
#NET tft_lcd_clk_n LOC = B20; |
#NET tft_lcd_clk_n IOSTANDARD = LVCMOS33 | DRIVE = 24 | SLEW = FAST; |
|
#NET tft_lcd_hsync LOC = C19; |
#NET tft_lcd_hsync IOSTANDARD = LVDCI_33; |
#NET tft_lcd_vsync LOC = D19; |
#NET tft_lcd_vsync IOSTANDARD = LVDCI_33; |
#NET tft_lcd_de LOC = C18; |
#NET tft_lcd_de IOSTANDARD = LVDCI_33; |
#NET tft_lcd_reset_b LOC = A18; |
#NET tft_lcd_reset_b IOSTANDARD = LVCMOS33; |
|
## NET "tft_clk" TNM_NET = "tft_clk"; |
## TIMESPEC "TSPLB_TFT" = FROM "sys_clk" TO "tft_clk" TIG; |
## TIMESPEC "TSTFT_PLB" = FROM "tft_clk" TO "sys_clk" TIG; |
|
## #------------------------------------------------------------------------------ |
## # IO Pad Location Constraints / Properties for Ethernet |
## #------------------------------------------------------------------------------ |
|
NET eth0_col LOC = G20 | IOSTANDARD = LVCMOS25; |
NET eth0_crs LOC = H22 | IOSTANDARD = LVCMOS25; |
NET eth0_dv LOC = J19 | IOSTANDARD = LVCMOS25; |
NET eth0_rx_clk LOC = F14 | IOSTANDARD = LVCMOS25; |
NET eth0_rx_data<3> LOC = E22 | IOSTANDARD = LVCMOS25; |
NET eth0_rx_data<2> LOC = E20 | IOSTANDARD = LVCMOS25; |
NET eth0_rx_data<1> LOC = E21 | IOSTANDARD = LVCMOS25; |
NET eth0_rx_data<0> LOC = F20 | IOSTANDARD = LVCMOS25; |
|
NET eth0_rx_er LOC = H19 | IOSTANDARD = LVCMOS25; |
NET eth0_tx_clk LOC = D13 | IOSTANDARD = LVCMOS25; |
#NET eth0_mii_int_n LOC = F17 | IOSTANDARD = LVCMOS25; |
NET eth0_rst_n_o LOC = F8 | IOSTANDARD = LVCMOS25 | PULLUP; # PHY_RESET pin on phy |
NET eth0_tx_data<3> LOC = B25 | IOSTANDARD = LVDCI_33; |
NET eth0_tx_data<2> LOC = C24 | IOSTANDARD = LVDCI_33; |
NET eth0_tx_data<1> LOC = D24 | IOSTANDARD = LVDCI_33; |
NET eth0_tx_data<0> LOC = C23 | IOSTANDARD = LVDCI_33; |
NET eth0_tx_en LOC = B24 | IOSTANDARD = LVDCI_33; |
NET eth0_tx_er LOC = A24 | IOSTANDARD = LVDCI_33; |
|
## PHY Serial Management Interface pins |
NET eth0_mdc_pad_o LOC = F18 | IOSTANDARD = LVCMOS25; |
NET eth0_md_pad_io LOC = E8 | IOSTANDARD = LVCMOS25; |
|
## NET phy_mii_int_n PULLUP; |
|
## NET phy_mii_int_n TIG; |
NET eth0_rst_n_o TIG; |
|
## # Timing Constraints (these are recommended in documentation and |
## # are unaltered except for the TIG) |
#NET "eth0_rx_clk" TNM_NET = "RXCLK_GRP"; |
NET "eth0_rx_clk_BUFGP" TNM_NET = "RXCLK_GRP"; |
#NET "eth0_tx_clk" TNM_NET = "TXCLK_GRP"; |
NET "eth0_tx_clk_BUFGP" TNM_NET = "TXCLK_GRP"; |
TIMESPEC "TSTXOUT" = FROM "TXCLK_GRP" TO "PADS" 10 ns; |
TIMESPEC "TSRXIN" = FROM "PADS" TO "RXCLK_GRP" 6 ns; |
|
NET "eth0_rx_data<3>" IOBDELAY=NONE; |
NET "eth0_rx_data<2>" IOBDELAY=NONE; |
NET "eth0_rx_data<1>" IOBDELAY=NONE; |
NET "eth0_rx_data<0>" IOBDELAY=NONE; |
NET "eth0_dv" IOBDELAY=NONE; |
NET "eth0_rx_er" IOBDELAY=NONE; |
NET "eth0_crs" IOBDELAY=NONE; |
NET "eth0_col" IOBDELAY=NONE; |
|
## # Timing ignores (to specify unconstrained paths) |
#FIXME? NET "*clkgen0/wb_clk_o" TNM_NET = "sys_clk"; # Wishbone clock |
TIMESPEC "TS_PHYTX_OPB" = FROM "TXCLK_GRP" TO "sys_clk" TIG; |
TIMESPEC "TS_OPB_PHYTX" = FROM "sys_clk" TO "TXCLK_GRP" TIG; |
TIMESPEC "TS_PHYRX_OPB" = FROM "RXCLK_GRP" TO "sys_clk" TIG; |
TIMESPEC "TS_OPB_PHYRX" = FROM "sys_clk" TO "RXCLK_GRP" TIG; |
|
## #------------------------------------------------------------------------------ |
## # IO Pad Location Constraints / Properties for AC97 Sound Controller |
## #------------------------------------------------------------------------------ |
|
## NET ac97_bit_clk LOC = AC13; |
## NET ac97_bit_clk IOSTANDARD = LVCMOS33; |
## NET ac97_bit_clk PERIOD = 80; |
## NET ac97_sdata_in LOC = AC12; |
## NET ac97_sdata_in IOSTANDARD = LVCMOS33; |
## NET ac97_sdata_out LOC = AC11; |
## NET ac97_sdata_out IOSTANDARD = LVCMOS33; |
## NET ac97_sync LOC = AD11; |
## NET ac97_sync IOSTANDARD = LVCMOS33; |
/xilinx/ml501/backend/par/bin/Makefile
0,0 → 1,195
###################################################################### |
#### #### |
#### ORPSoC Xilinx backend Makefile #### |
#### #### |
#### Author(s): #### |
#### - Julius Baxter, julius@opencores.org #### |
#### #### |
#### #### |
###################################################################### |
#### #### |
#### Copyright (C) 2009,2010 Authors and OPENCORES.ORG #### |
#### #### |
#### 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 #### |
#### #### |
###################################################################### |
|
# Name of the directory we're currently in |
CUR_DIR=$(shell pwd) |
|
# The root path of the board build |
BOARD_DIR ?=$(CUR_DIR)/../../.. |
PROJECT_ROOT=$(BOARD_DIR)/../../.. |
|
SYN_DIR=$(BOARD_DIR)/syn/xst |
SYN_RUN_DIR=$(SYN_DIR)/run |
|
BOARD_BACKEND_DIR=$(BOARD_DIR)/backend/bin |
|
DESIGN_NAME=orpsoc |
BOARD_NAME=ml501 |
|
# Set V=1 when calling make to enable verbose output |
# mainly for debugging purposes. |
ifeq ($(V), 1) |
Q= |
else |
Q ?=@ |
endif |
|
BOARD_RTL_DIR=$(BOARD_DIR)/rtl |
BOARD_RTL_VERILOG_DIR=$(BOARD_RTL_DIR)/verilog |
# Only 1 include path for board builds - their own! |
BOARD_RTL_VERILOG_INCLUDE_DIR=$(BOARD_RTL_VERILOG_DIR)/include |
BOARD_DESIGN_VERILOG_DEFINES=$(BOARD_RTL_VERILOG_INCLUDE_DIR)/$(DESIGN_NAME)-defines.v |
|
DEFINES_FILE_CUTOFF=$(shell grep -n "end of included module defines" $(BOARD_DESIGN_VERILOG_DEFINES) | cut -d ':' -f 1) |
DESIGN_DEFINES=$(shell cat $(BOARD_DESIGN_VERILOG_DEFINES) | sed s://.*::g | sed s:\`:\#:g | sed 's:^[ ]*::' | awk '{print};/^\#define/{printf "_%s=%s\n",$$2,$$2}' | grep -v PERIOD | cpp -P | sed s:^_::g | sed s:=$$::g ) |
|
# Rule to look at what defines are being extracted from main file |
print-defines: |
@echo; echo "\t### Design defines ###"; echo |
@echo "\tParsing "$(BOARD_DESIGN_VERILOG_DEFINES)" and exporting:" |
@echo $(DESIGN_DEFINES) |
|
|
# Backend tool path |
# Check that the XILINX_PATH variable is set |
ifeq ($(XILINX_PATH),) |
$(error XILINX_PATH environment variable not set. Set it and rerun) |
endif |
XILINX_SETTINGS_SCRIPT=$(XILINX_PATH)/settings32.sh |
XILINX_SETTINGS_SCRIPT_EXISTS=$(shell if [ -e $(XILINX_SETTINGS_SCRIPT) ]; then echo 1; else echo 0; fi) |
ifeq ($(XILINX_SETTINGS_SCRIPT_EXISTS),0) |
$(error XILINX_PATH variable not set correctly. Cannot find $$XILINX_PATH/settings32.sh) |
endif |
|
|
# |
# Options for Xilinx PAR tools |
# |
FPGA_PART=xc5vlx50-ff676-1 |
XILINX_FLAGS=-intstyle silent |
XILINX_MAP_FLAGS=-logic_opt off |
XILINX_AREA_TARGET = speed |
TIMING_REPORT_OPTIONS = -u 1000 -e 1000 |
SPI_FLASH_SIZE_KBYTES ?=2048 |
SPI_BOOTLOADER_SW_OFFSET_HEX ?=1c0000 |
|
print-config: |
$(Q)echo; echo "\t### Backend make configuration ###"; echo |
$(Q)echo "\tFPGA_PART="$(FPGA_PART) |
$(Q)echo "\tXILINX_FLAGS="$(XILINX_FLAGS) |
$(Q)echo "\tXILINX_MAP_FLAGS="$(XILINX_MAP_FLAGS) |
$(Q)echo "\tXILINX_AREA_TARGET="$(XILINX_AREA_TARGET) |
$(Q)echo "\tTIMING_REPORT_OPTIONS="$(TIMING_REPORT_OPTIONS) |
$(Q)echo "\tSPI_FLASH_SIZE_KBYTES="$(SPI_FLASH_SIZE_KBYTES) |
$(Q)echo "\tSPI_BOOTLOADER_SW_OFFSET_HEX="$(SPI_BOOTLOADER_SW_OFFSET_HEX) |
|
|
|
NGC_FILE=$(SYN_RUN_DIR)/$(DESIGN_NAME).ngc |
NGD_FILE=$(DESIGN_NAME).ngd |
UCF_FILE=../bin/$(BOARD_NAME).ucf |
MAPPED_NCD=$(DESIGN_NAME)_mapped.ncd |
PARRED_NCD=$(DESIGN_NAME).ncd |
PCF_FILE=$(DESIGN_NAME).pcf |
BIT_FILE=$(DESIGN_NAME).bit |
BIT_FILE_FOR_SPI=$(DESIGN_NAME)_spiboot.bit |
BATCH_FILE=$(DESIGN_NAME).batch |
MCS_FILE=$(DESIGN_NAME).mcs |
|
$(NGC_FILE): |
$(Q)$(MAKE) -C $(SYN_RUN_DIR) $(DESIGN_NAME).ngc |
|
$(NGD_FILE): $(UCF_FILE) $(NGC_FILE) |
@echo; echo "\t#### Running NGDBuild ####"; |
$(Q)( . $(XILINX_SETTINGS_SCRIPT) && \ |
ngdbuild -p $(FPGA_PART) -sd $(BOARD_BACKEND_DIR) -uc $(UCF_FILE) \ |
$(NGC_FILE) $@ ) |
|
#This target uses Xilinx tools to perform Mapping |
$(MAPPED_NCD): $(NGD_FILE) |
@echo; echo "\t#### Mapping ####"; |
$(Q)( . $(XILINX_SETTINGS_SCRIPT) && \ |
export XIL_MAP_NO_DSP_AUTOREG=1 && \ |
export XIL_MAP_ALLOW_ANY_DLL_INPUT=1 && \ |
map -p $(FPGA_PART) -detail -pr b -cm ${XILINX_AREA_TARGET} \ |
-timing -ol high -w $(XILINX_FLAGS) -o $@ -xe n $(NGD_FILE) $(PCF_FILE)) |
|
#This target uses Xilinx tools to Place & Route the design |
$(PARRED_NCD): $(MAPPED_NCD) |
@echo; echo "\t#### PAR'ing ####"; |
$(Q)( . $(XILINX_SETTINGS_SCRIPT) && \ |
par -w -pl high -rl high $(XILINX_FLAGS) $< $@ $(PCD_FILE) ) |
|
#This target uses Xilinx tools to generate a bitstream for download |
$(BIT_FILE): $(PARRED_NCD) |
@echo; echo "\t#### Generating .bit file ####"; |
$(Q)( . $(XILINX_SETTINGS_SCRIPT) && \ |
bitgen -w $(XILINX_FLAGS) -g StartUpClk:JtagClk $< $@ ) |
|
$(BIT_FILE_FOR_SPI): $(PARRED_NCD) |
@echo; echo "\t#### Generating .bit file for SPI load ####"; |
$(Q)( . $(XILINX_SETTINGS_SCRIPT) && \ |
bitgen -w $(XILINX_FLAGS) -g StartUpClk:CClk $< $@ ) |
ifeq ($(BOOTLOADER_BIN),) |
$(MCS_FILE): $(BIT_FILE_FOR_SPI) |
@echo; echo "\t#### Generating .mcs file for SPI load ####"; |
$(Q)( . $(XILINX_SETTINGS_SCRIPT) && \ |
promgen -spi -p mcs -o $@ -s $(SPI_FLASH_SIZE_KBYTES) -u 0 $< ) |
else |
$(MCS_FILE): $(BIT_FILE_FOR_SPI) |
@echo; echo "\t#### Generating .mcs file for SPI load ####"; |
$(Q)( . $(XILINX_SETTINGS_SCRIPT) && \ |
promgen -spi -p mcs -o $@ -s $(SPI_FLASH_SIZE_KBYTES) -u 0 $< \ |
-data_file up $(SPI_BOOTLOADER_SW_OFFSET_HEX) $(BOOTLOADER_BIN) \ |
) |
endif |
|
#this target downloads the bitstream to the target fpga |
download: $(BIT_FILE) $(BATCH_FILE) |
$(Q)( . ${XILINX_PATH}/settings32.sh && \ |
impact -batch $(BATCH_FILE) ) |
|
#This target uses netgen to make a simulation netlist |
netlist: $(PARRED_NCD) |
@echo; echo "\t#### Generating netlist ####"; |
$(Q)(. $(XILINX_SETTINGS_SCRIPT) && \ |
netgen -ofmt verilog -sim -dir netlist -pcf $(PCF_FILE) $<) |
|
#This one uses TRCE to make a timing report |
timingreport: $(PARRED_NCD) |
@echo; echo "\t#### Generating timing report ####"; |
$(Q)(. $(XILINX_SETTINGS_SCRIPT) && \ |
trce $(TIMING_REPORT_OPTIONS) $< ) |
|
|
clean: |
$(Q)rm -rf *.* |
|
clean-syn: |
$(Q)$(MAKE) -C $(SYN_RUN_DIR) clean-all |
|
clean-all: clean-syn clean |
|
.PRECIOUS : $(PARRED_NCD) $(MAPPED_NCD) $(NGC_FILE) $(NGD_FILE) $(BIT_FILE) $(BIT_FILE_FOR_SPI) |
/xilinx/ml501/backend/bin/xilinx_ddr2_if_cache.ngc
0,0 → 1,3
XILINX-XDB 0.1 STUB 0.1 ASCII |
XILINX-XDM V1.5e |
$74444<,[o}e~g`n;"2*776(-30<=>?0123416<89:;<=>?0123456789:;<=>?0123456789:;<=>?0123456789:;<=>?01234567;2;%<<=4118JJUSS2hno~o26:1<2<>772F__\XZ5recg`wcdk531<3?:;00;>LHW]]0oecl313594;7038836B[[PTV9`jssj5;9;7>115926?OIX\^1mij}a=32>586=2;>6D@_UU8B@ATF]5;?6=0>5:36>LHW]]0JHI\MU=37>586=2;=6D@_UU8B@ATFD5;>6=0>5:35>LHW]]0JHI\ML=36>586:2;=6D@_UU8tag:6=3:5=?5<2;KMTPR=L@K7?<4?>00877<NFY__6IGM<2394;743:81EC^ZT;fjjd:493:5=>5<2;MVPUSS2MEJ0>?50?30?64=G\^[YY4KOC>05?699<18>7AZTQWW>air|h68=7>11097>LHW]]0OE]O33;2=54=32@D[YY4KIQ@?7?69981?6D@_UU8TADJ;;3:5=<5;:HLSQQ<PMH_7?7>11197>LHW]]0|il2<:1<26>2=G\^[YY4KOQC?7?699;1?6B[[PTV9@JVE4:0;2i5:vmz64c`1??':=<57:HLSQQ<PMKF7;7>1109;>LHW]]0\IO[37;2==>GCL[KG0=0n;@FGVDJ;994j7LJKR@N?548f3HNO^LB313<b?DBCZHF7=>0n;@FGVDJ;9=4h7LJKR@N?50<76h1JHI\NL=36:<=FLMXJ@1?19:CG@WGK4;427LJKR@N?7;?<IMNYMA2;>89B@ATFD5?556OKDSCO838>3HNO^LB37?;8EABUIE63245NDEPBH9?912KOH_OZ<1<b?DBCZH_7==0n;@FGVDS;984j7LJKR@W?578f3HNO^L[312<`?DBCZH_7=94?>`9B@ATF]5;?245NDEPBQ97912KOH_OZ<3<:?DBCZH_7?374AEFQEP:3601JHI\NU=7==>GCL[K^0;06;@FGVDS;?730MIJ]AT>;:<=FLMXJY1719:CG@WDK494j7LJKRCN?558f3HNO^OB310<b?DBCZKF7=?0n;@FGVGJ;9:4j7LJKRCN?518d3HNO^OB31483:d=FLMXI@1?:>89B@ATED5;556OKDS@O878>3HNO^OB33?;8EABUJE6?245NDEPAH93912KOH_LC<7<:?DBCZKF7;374AEFQFI:?601JHI\ML=;==>GCL[H^0=0n;@FGVGS;994j7LJKRCW?548f3HNO^O[313<b?DBCZK_7=>0l;@FGVGS;9=0;2l5NDEPAQ973601JHI\MU=3==>GCL[H^0?06;@FGVGS;;730MIJ]BT>7:<=FLMXIY1;19:CG@WDR4?427LJKRCW?3;?<IMNYNX27>89B@ATE]535?6OCL29AQ7><J\YTECH@d:ABWFGCM@DGMYOk;BCPGDBBAGFJXOj4C@Q@EACNF[OLMi5LARAB@@OIZLMIi6MNSBCGAJSSDH^Ji6MNSBCGAJSSDH^Ii6MNSBCGAJSSZLMJi6MNSBCGAJSSZLMI=?5LHDAH[IODMGYNSYW_E49@HNGK=2IGGL[:;BNHFI3<KEAIY45LOLOJPQCC9=1HC_KPGDLFVDRNGGUBBKA8;BPFEQCC>2NBM1>17:FJE9776>1OEL2>1?58@LG;9;4<7IGN<01=3>BNI5;?2:5KI@>21;1<L@K7=;08;EKB8419?2NBM1?7>69GMD:617<0HDO31?58@LG;:94<7IGN<33=3>BNI5892:5KI@>17;1<L@K7>908;EKB8739?2NBM1<9>69GMD:5?7=0HDO329<4?AOF4;35:6JFA=0=3>BNI59;245KI@>05?69?2NBM1=>>79GMD:46?1OEL2;>79GMD:26?1OEL29>79GMD:06?1OEL27>79GMD:>6?1OEO2?>69GMG:687=0HDL310<4?AOE4885;6JFB=30:2=CAK6:8394DH@?50803MCI0<817:FJF9706>1OEO2>8?58@LD;904=7IGM<0<4?AOE4;:5;6JFB=02:2=CAK69>394DH@?66803MCI0?:17:FJF9426>1OEO2=6?58@LD;:>4<7IGM<3:=3>BNJ5822;5KIC>1:2=CAK68<374DH@?74<76>1OEO2<1?48@LD;;7<0HDL34?48@LD;=7<0HDL36?48@LD;?7<0HDL38?48@LD;17=0HD^N<1<4?AOWI5;5;6JFP@>1:<=CAYK7?7>17:FJTD:46>1OE]L30?58@LVE484<7IG_B=0==>BNXK686=08;EKSF959>2NDM1>17:FLE9776>1OCL2>1?58@JG;9;4<7IAN<01=3>BHI5;?2:5KO@>21;1<LFK7=;08;EMB8419?2NDM1?7>69GKD:617<0HBO31?58@JG;:94<7IAN<33=3>BHI5892:5KO@>17;1<LFK7>908;EMB8739?2NDM1<9>69GKD:5?7=0HBO329<4?AIF4;35:6J@A=0=3>BHI59;245KO@>05?69?2NDM1=>>79GKD:46?1OCL2;>79GKD:26?1OCL29>79GKD:06?1OCL27>79GKD:>6>1OCLQ]EF48@JD;87=0HBL311<4?AIE48;5;6J@B=31:2=CGK6:?394DN@?51803MEI0<;17:FLF9716>1OCO2>7?58@JD;914<7IAM<0;=2>BHJ5;5;6J@B=03:2=CGK69=394DN@?67803MEI0?=17:FLF9436>1OCO2=5?58@JD;:?4<7IAM<35=3>BHJ5832:5KOC>1=;0<LFH7>394DN@?758>3MEI0>?50?58@JD;;84=7IAM<2<5?AIE4=4=7IAM<4<5?AIE4?4=7IAM<6<5?AIE414=7IAM<8<4?AIEW[OL;6J@P@>3:2=CGYK7=394DNRB878>3ME[M1=50?58@JVF4:4<7IA_B=2=3>BHXK6:2:5KOQ@?6;?<LFZI0>4?>69GKUD;;7>0ICOC4:GMEP2<MGHG86KABT78BDJTM81L?6IAD99JJLRWW9:37D@FTQ]35==NF@^[S=<7;HLJPUY7;11BBDZ__16;?LHN\YU;955FNHVS[50?3@DBX]Q?799JJLRWW9237D@FTQ]3===NF@^[S=O7;HLJPUY7J11BBDZ__1A;?LHN\YU;H55FNHVS[5C?3@DBX]Q?F69JJLRX89=0ECG[_134?LHN\V:9;6GAIU]372=NF@^T<994IOKW[5303@DBXR>97:KMMQY7?>1BBDZP0958MKOSW93<7D@FT^2B3>OIA]U;N:5FNHV\4F1<AGC_S=J8;HLJPZ6B?2CEEYQ?F69JJLRX99=0ECG[_034?LHN\V;9;6GAIU]272=NF@^T=994IOKW[4303@DBXR?97:KMMQY6?>1BBDZP1958MKOSW83<7D@FT^3B3>OIA]U:N:5FNHV\5F1<AGC_S<J8;HLJPZ7B?2CEEYQ>F69JJLRX:9=0ECG[_334?LHN\V89;6GAIU]172=NF@^T>994IOKW[7303@DBXR<97:KMMQY5?>1BBDZP2958MKOSW;3<7D@FT^0B3>OIA]U9N:5FNHV\6F1<AGC_S?J8;HLJPZ4B?2CEEYQ=F69JJLRX;9=0ECG[_234?LHN\V99;6GAIU]072=NF@^T?994IOKW[6303@DBXR=97:KMMQY4?>1BBDZP3958MKOSW:3<7D@FT^1B3>OIA]U8N:5FNHV\7F1<AGC_S>J8;HLJPZ5B?2CEEYQ<F69JJLRX<9=0ECG[_534?LHN\V>9;6GAIU]772=NF@^T8994IOKW[1303@DBXR:97:KMMQY3?>1BBDZP4958MKOSW=3<7D@FT^6B3>OIA]U?N:5FNHV\0F1<AGC_S9J8;HLJPZ2B?2CEEYQ;F69JJLRX=9=0ECG[_434?LHN\V?9;6GAIU]672=NF@^T9994IOKW[0303@DBXR;97:KMMQY2?>1BBDZP5958MKOSW<3<7D@FT^7B3>OIA]U>N:5FNHV\1F1<AGC_S8J8;HLJPZ3B?2CEEYQ:F69JJLRX>9=0ECG[_734?LHN\V<9;6GAIU]572=NF@^T:994IOKW[3303@DBXR897:KMMQY1?>1BBDZP6958MKOSW?3<7D@FT^4B3>OIA]U=N:5FNHV\2F1<AGC_S;J8;HLJPZ0B?2CEEYQ9F69JJLRX?9=0ECG[_634?LHN\V=9;6GAIU]472=NF@^T;994IOKW[2303@DBXR997:KMMQY0?>1BBDZP7958MKOSW>3<7D@FT^5B3>OIA]U<N:5FNHV\3F1<AGC_S:J8;HLJPZ1B?2CEEYQ8F79JJLRXI?1BBDZPB89JJLRXN@FN:6B@AEGG3>JHO@IJ@n5BakmqR`ttafdh7@gaosTfvvohf:1E==:4N0230>H688>0B<>=4:L2462<F8:?86@>0468J461<2D:<::4N02;0>H68090B<?;;O3241=I98;?7C?>259M54533G;:895A1077?K76>=1E=<9;;O32<1=I98387C?=4:L2652<F88:86@>2368J444<2D:>9:4N0060>H6:?>0B<<84:L26=2<F882?6@>359M56633G;8=95A1207?K74;=1E=>:;;O3011=I9:<?7C?<759M56>33G;85>5A1568J427<2D:8<:4N0610>H6<:>0B<:;4:L2002<F8>=86@>4668J42?<2D:84=4N077?K728=1E=8?;;O3661=I9<9?7C?:459M50333G;>:95A1457?K720=1E=87<;O350>H6>9>0B<8>4:L2272<F8<886@>6568J402<2D::;:4N0440>H6>1>0B<863:L231=I9>:?7C?8159M52433G;<?95A1667?K70==1E=:8;;O3431=I9>2?7C?8929M5=2<F82;86@>8068J4>5<2D:4>:4N0:70>H60<>0B<694:L2<22<F82386@>8818J4?33G;2<95A1837?K7>:=1E=4=;;O3:01=I90??7C?6659M5<133G;2495A18;1?K443G8;86@=0168J766<2D9<?:4N3200>H58=>0B?>:4:L1432<F;:<86@=0968J76>;2D9=95A2027?K469=1E><<;;O0271=I:8>?7C<>559M64033G8:;95A20:7?K461:1E>?:4N3030>H5:8>0B?<=4:L1662<F;8?86@=2468J741<2D9>::4N30;0>H5:090B?=;;O0041=I::;?7C<<259M66533G88895A2277?K44>=1E>>9;;O00<1=I::387C<;4:L1052<F;>:86@=4368J724<2D989:4N3660>H5<?>0B?:84:L10=2<F;>2?6@=559M60633G8>=95A2407?K42;=1E>8:;;O0611=I:<<?7C<:759M60>33G8>5>5A2768J707<2D9:<:4N3410>H5>:>0B?8;4:L1202<F;<=86@=6668J70?<2D9:4=4N357?K408=1E>:?;;O0461=I:>9?7C<8459M62333G8<:95A2657?K400=1E>:7<;O0;0>H509>0B?6>4:L1<72<F;2886@=8568J7>2<2D94;:4N3:40>H501>0B?663:L1=1=I:0:?7C<6159M6<433G82?95A2867?K4>==1E>48;;O0:31=I:02?7C<6929M752<F::;86@<0068J665<2D8<>:4N2270>H48<>0B>>94:L0422<F::386@<0818J6733G9:<95A3037?K56:=1E?<=;;O1201=I;8??7C=>659M74133G9:495A30;0?K55<2D8>=:4N2020>H4:;>0B><<4:L0612<F:8>86@<2768J640<2D8>5:4N20:7>H4;=1E?>>;;O1051=I;:8?7C=<359M76233G98995A3247?K54?=1E?>6;;O10=6=I;=>0B>:?4:L0042<F:>986@<4268J623<2D888:4N2650>H4<>>0B>:74:L00<5<F:??7C=:059M70733G9>>95A3417?K52<=1E?8;;;O1621=I;<=?7C=:859M70?43G9=86@<6168J606<2D8:?:4N2400>H4>=>0B>8:4:L0232<F:<<86@<6968J60>;2D8;95A3627?K509:1E?5=4N2;1?K243G>;?6@;129M075<F=987C:;3:L716=I<?90B99<;O6;7>H31:1E9==4N430?K35;2D>?>5A5518J0343G?=?6@:729M1=5<F<397C8<;O437>H19:1E:?=4N710?K03;2D=9>5A6718J3143G<3?6@9939M36=I?990B:?<;O517>H0;:1E;9=4N670?K11;2D<;>5A7918J2?53G287C6?3:L;56=I0;90B5=<;O:77>H?=:1E4;=4N9:1?K?43G3;?6@6129M=75<F0987C7;3:L:16=I1?90B49<;O;;7>H>1o1ENRLZSQKM[UTHXZ=0BHZXOSI7?KIIM;1DG<5_4:RBVQg<X@DTNX]FDY`8TLHXJ\YEM@Kn;SCNF60XMQZm7_OB_DZWAKUNGGUJj6\NM^G[P@HTAFDTNn5]E@F\SLBS@VKh7_KND^UJ@QNXJ>1YIJMJAM58V@ADMH_<7_KHCD@O3>TBOJOIY55]EFAOODJ?3[OLOAENU99QABEKCKF37_KHCMIAQ1=TIOO37^OYEECWE45<[@GTOBBCIRKLJZEOMJA37^GB_LMGA3=TG\XHI:5\RWCO[D1<[[\J@RL:;RQQEI3<[ZXJY85\SS@O1>UTZK_?7YW_E4:8Q5)edbUfi`Qheogqeqiu'kgei lsup,vdkkgfzP<P }al,q+s3Xffceey }al-WVPCXLY$XECICE^RQMH51&]N[955Z0.`ooZkbeVmnbh|ntnp,rdjnl'ixx!}alnlku]6U'xja#| v4]mklhn|'xja"Z]UD]GT+UNFNFNS]\FM24-PAV202_;#obd_lgn[bcim{kc!yamkg*fusz&xjaaa`pZ0^*wgj&{%}9R``iokw*wgj']X^IRJ_.RKMCICXX[CF?; [DQ7;?P6(jeaTahcPgdlfvdrhz&|j`dj!crvq+wgjdfe{W>S!r`o-v*p2Wgebbdz!r`o,PWSBWMZ%_D@HLD]SVLK4>'^O\l5ZSDP\EIOF[j1^_H\PVHQJFIC43_IH56XFEV]W]UC03^OJ@1>17:UFEI:66>1\ILB32?;8S@GK4:0;2:5XE@N?7;1<_LK^0=08;VGBQ979?2]NMX2=>89TADS;;3:5;6YJAT>0:2=PMKF7<394WD@O84803^OI@1<17:UFFI:46>1\IOB34?58S@DK4<4<7ZKML=4==>QBJE6<6=08;VGAH919?2]NNX2?>69TAGS;97=0[HLZ<3<4?RCE]595;6YJBT>7:2=PMK_79394WD@V838>3^OIY1950?58S@DR4>4i7Z\FTD]EMWUSk2]YEYKPMNFF[De<_[C_IRC@DD]A`>QUA]OT[DJ[H^Cg?RTN\LU\EIZG_C3g?]OKAGR&TIL/0/3#WQSE(9$:,L]LIH48\VRKAK=0T^ZPGOFa?]YDG[OTECH@6:ZgfZOcn2RodR^}ilTfvvohf8:0TicPM`hlvScu{`ee==5Wdl]Nmkiu^lxxeb`7;`fgvd.7!11jhi|n(0+:?dbczh":<$74aefqe-76!11jhi|n(3+;?dbczh"8%55ndepb,1/?3hno~l&:)99b`atf ?#37ljkr`*4-==flmxj$5'7;`fgvd.>!11jhi|n<1<:?dbczh6:<3l4aefqe97629427ljkr`>25;><imnym1?18:cg`wg;:720mij}a=1=<>gcl{k78364aefqe93902koho36?:8eabui5=546okdsc?<;><imnym1718:cg`wd/8 20mij}b)3*<>gcl{h#>$64aefqf-5.02kohl'4(:8eabuj!?"46okds`+2,><imnyn%9&8:cg`wd/0 20mij}b);*<>gcl{h7<364aefqf97902kohl32?:8eabuj59546okds`?0;><imnyn1;18:cg`wd;>720mij}b=5=<>gcl{h743o4aefqf9?=8720mij}b=;=6f=edbUfi`Qheo]u7Z7+(Qcgecv/CNPF$Bcim{kc.>1/37?fjli=1h`fl8;e`jp`tu?2nbbl&?)69gmkg/9 20hd`n(02*<>bnfh":=$64dhlb,44.02nbbl&>3(:8`lhf 8>"46jfn`*21,><l`dj$<8&8:fjjd.6? 20hd`n(0:*<>bnfh":5$94dhlb,7/?3mcem%<?)99gmkg/:8#37igaa)01-==cagk#>>'7;ekme-43!11oeco'24+;?aoii!8=%55kioc+62/?3mcem%<7)99gmkg/:0#<7igaa)1*<>bnfh"8<$64dhlb,67.?2nbbl&;)69gmkg/= =0hd`n(7+4?aoii!=";6jfn`*;-2=cagk#5$94dhlb858?3mcem1??>99gmkg;98437igaa=31:==cagk7=>07;ekme973611oeco314<;?aoii5;=255kioc?528?3mcem1?7>99gmkg;904<7igaa=3=<>bnfh69<364dhlb877902nbbl2=2?:8`lhf4;9546jfn`>10;><l`dj0?;18:fjjd:5>720hd`n<35=<>bnfh694364dhlb87?9?2nbbl2=>99gmkg;;94j7igaa=12>58?3mcem1=>>69gmkg;;7=0hd`n<5<4?aoii5?5;6jfn`>5:2=cagk7;394dhlb8=803mcem1717:fjjg.7!>1oecl'1(:8`lhe 8:"56jfnc*245/>3mcen%??1(;8`lhe 8:9%45kio`+555.12nbbo&>05+:?aoij!;;9$74dhla,461!01oecl'115*=>bnfk":<5'6;ekmf-771 20hd`m(03*=>bnfk":=='6;ekmf-769 30hd`m(031-<=cagh#=<=&9:fjjg.69=#27igab)321,?<l`di$<?9)89gmkd/98="56jfnc*25=/>3mcen%?>9(:8`lhe 88"56jfnc*265/>3mcen%?=1(;8`lhe 889%45kio`+575.12nbbo&>25+:?aoij!;99$74dhla,441!01oecl'135*<>bnfk":?$64dhla,42.02nbbo&>5(:8`lhe 8<"46jfnc*23,><l`di$<6&8:fjjg.61 =0hd`m(3+;?aoij!8;%55kio`+64/?3mcen%<=)99gmkd/::#37igab)07-==cagh#>8'7;ekmf-41!11oecl'26+;?aoij!83%55kio`+6</03mcen%=&8:fjjg.48 20hd`m(23*<>bnfk"8>$64dhla,65.02nbbo&<4(:8`lhe :?"46jfnc*02,><l`di$>9&8:fjjg.40 20hd`m(2;*3>bnfk"?%55kio`+05/?3mcen%:>)99gmkd/<;#37igab)60-==cagh#89'7;ekmf-22!11oecl'47+;?aoij!><%55kio`+0=/?3mcen%:6)69gmkd/= 20hd`m(42*<>bnfk">=$64dhla,04.02nbbo&:3(:8`lhe <>"46jfnc*61,><l`di$88&8:fjjg.2? 20hd`m(4:*<>bnfk">5$94dhla,3/?3mcen%8?)99gmkd/>8#37igab)41-==cagh#:>'7;ekmf-03!11oecl'64+;?aoij!<=%55kio`+22/?3mcen%87)99gmkd/>0#<7igab)5*<>bnfk"<<$64dhla,27.02nbbo&82(:8`lhe >9"46jfnc*40,><l`di$:;&8:fjjg.0> 20hd`m(65*<>bnfk"<4$64dhla,2?.?2nbbo&7)99gmkd/09#37igab):2-==cagh#4?'7;ekmf->4!11oecl'85+;?aoij!2>%55kio`+<3/?3mcen%68)99gmkd/01#37igab)::-2=cagh#5$64dhla,<6.02nbbo&61(:8`lhe 08"46jfnc*:7,><l`di$4:&8:fjjg.>= 20hd`m(84*<>bnfk"2;$64dhla,<>.02nbbo&69(58`lhe49427igab=334;?<l`di0<>>>89gmkd;998556jfnc>2468>3mcen1??4?;8`lhe48:>245kio`?550912nbbo2>06<:?aoij5;;4374dhla846>611oecl311<:?aoij5;:<374dhla8476601oecl3100==>bnfk6:=>06;ekmf976<730hd`m<036:<=cagh7=<819:fjjg:69>427igab=32<;?<l`di0<?6>99gmkd;98427igab=314;?<l`di0<<>>89gmkd;9;8556jfnc>2668>3mcen1?=4?;8`lhe488>245kio`?5709j2nbbo2>2683:<=cagh7=?918:fjjg:6:720hd`m<01=<>bnfk6:8364dhla843902nbbo2>6?:8`lhe48=546jfnc>2<;><l`di0<717:fjjg:6611oecl321<;?aoij58:255kio`?678?3mcen1<<>99gmkd;:=437igab=06:==cagh7>;07;ekmf940611oecl329<;?aoij5822:5kio`?6;><l`di0>>18:fjjg:49720hd`m<20=<>bnfk68?364dhla862902nbbo2<5?:8`lhe4:<546jfnc>03;><l`di0>618:fjjg:417=0hd`m<2<;?aoij5>;255kio`?048?3mcen1:=>99gmkd;<:437igab=67:==cagh78807;ekmf921611oecl346<;?aoij5>3255kio`?0<803mcen1:18:fjjg:28720hd`m<43=<>bnfk6>>364dhla805902nbbo2:4?:8`lhe4<?546jfnc>62;><l`di08918:fjjg:20720hd`m<4;=3>bnfk6>255kio`?258?3mcen18>>99gmkd;>;437igab=40:==cagh7:907;ekmf902611oecl367<;?aoij5<<255kio`?2=8?3mcen186>69gmkd;>720hd`m<62=<>bnfk6<=364dhla824902nbbo283?:8`lhe4>>546jfnc>41;><l`di0:818:fjjg:0?720hd`m<6:=<>bnfk6<5394dhla828?3mcen16?>99gmkd;08437igab=:1:==cagh74>07;ekmf9>3611oecl384<;?aoij52=255kio`?<28?3mcen167>99gmkd;004<7igab=:=<>bnfk62<364dhla8<7902nbbo262?:8`lhe409546jfnc>:0;><l`di04;18:fjjg:>>720hd`m<85=<>bnfk624364dhla8<?9?2nbbo26>99gkprf 9#37iazt`*2-<=cg|~j$<>&9:flqqg/98#27iazt`*26,?<lfm%?<)89gkprf 8>"56j`uuc+50/>3me~xl&>6(;8`jssi!;<%45kotvb,4>.12ndyyo'18+;?air|h"9%45kotvb,76.12ndyyo'20+:?air|h"9>$74dnwwe-44!01ocxzn(36*=>bh}}k#>8'6;emvpd.5> 30hb{{a)04-<=cg|~j$?6&9:flqqg/:0#37iazt`*0-<=cg|~j$>>&9:flqqg/;8#37iazt`*7-==cg|~j$8'7;emvpd.1!11ocxzn(6+;?air|h"3%55kotvb,</?3me~xl2?>89gkprf48:556j`uuc?548>3me~xl2>2?;8`jssi5;8245kotvb842912ndyyo314<:?air|h6::374dnwwe970601ocxzn<0:==>bh}}k7=407;emvpd:6601ocxzn<32==>bh}}k7><06;emvpd:5:730hb{{a=00:<=cg|~j0?:19:flqqg;:<427iazt`>12;?<lfm1<8>89gkprf4;2556j`uuc?6<8?3me~xl2=>89gkprf4::5n6j`uuc?74<7601ocxzn<23=<>bh}}k7?364dnwwe92902ndyyo35?:8`jssi5<546j`uuc?3;><lfm1618:flqqg;1720hb{{b)2*<>bh}}h#=$74dnwwf-77!h1ocxzm(023-d=cg|~i$<>>)`9gkpre 8:9%l5kotva,464!h1ocxzm(027-d=cg|~i$<>:)`9gkpre 8:=%l5kotva,460!h1ocxzm(02;-d=cg|~i$<>6)89gkpre 8;"m6j`uu`+546.i2ndyyl'103*e>bh}}h#=<<&a:flqqd/989"m6j`uu`+542.i2ndyyl'107*e>bh}}h#=<8&a:flqqd/98="m6j`uu`+54>.i2ndyyl'10;*=>bh}}h#=?'n;emvpg.6:9#j7iaztc*264/f3me~xo&>23+b?air|k":>>'n;emvpg.6:=#j7iaztc*260/f3me~xo&>27+b?air|k":>:'6;emvpg.6; 30hb{{b)37-<=cg|~i$<;&9:flqqd/9?#27iaztc*23,?<lfn%?7)89gkpre 83"46j`uu`+6,?<lfn%<?)89gkpre ;;"56j`uu`+67/>3me~xo&=3(;8`jssj!8?%45kotva,73.12ndyyl'27+:?air|k"9;$74dnwwf-4?!01ocxzm(3;*<>bh}}h#?$74dnwwf-57!01ocxzm(23*=>bh}}h#??'6;emvpg.4; 30hb{{b)17-<=cg|~i$>;&9:flqqd/;?#27iaztc*03,?<lfn%=7)89gkpre :3"46j`uu`+0,?<lfn%:?)89gkpre =;"56j`uu`+07/>3me~xo&;3(;8`jssj!>?%45kotva,13.12ndyyl'47+:?air|k"?;$74dnwwf-2?!01ocxzm(5;*<>bh}}h#9$74dnwwf-37!01ocxzm(43*=>bh}}h#9?'6;emvpg.2; 30hb{{b)77-<=cg|~i$8;&9:flqqd/=?#27iaztc*63,?<lfn%;7)89gkpre <3"46j`uu`+2,?<lfn%8?)89gkpre ?;"56j`uu`+27/>3me~xo&93(;8`jssj!<?%45kotva,33.12ndyyl'67+:?air|k"=;$74dnwwf-0?!01ocxzm(7;*<>bh}}h#;$74dnwwf-17!01ocxzm(63*=>bh}}h#;?'6;emvpg.0; 30hb{{b)57-<=cg|~i$:;&9:flqqd/??#27iaztc*43,?<lfn%97)89gkpre >3"46j`uu`+<,?<lfn%6?)89gkpre 1;"56j`uu`+<7/>3me~xo&73(;8`jssj!2?%45kotva,=3.12ndyyl'87+:?air|k"3;$74dnwwf->?!01ocxzm(9;*<>bh}}h#5$74dnwwf-?7!01ocxzm(83*=>bh}}h#5?'6;emvpg.>; 30hb{{b);7-<=cg|~i$4;&9:flqqd/1?#27iaztc*:3,?<lfn%77)89gkpre 03"46j`uu`?4;g<lfn1??0?c8`jssj5;;=3o4dnwwf977:7k0hb{{b=337;g<lfn1??4?c8`jssj5;;93o4dnwwf977>7k0hb{{b=333;g<lfn1??8?c8`jssj5;;5374dnwwf9776h1ocxzm<033:d=cg|~i0<?>>`9gkpre48;92l5kotva84746h1ocxzm<037:d=cg|~i0<?:>`9gkpre48;=2l5kotva84706h1ocxzm<03;:d=cg|~i0<?6>89gkpre48;5m6j`uu`?5769i2ndyyl3133=e>bh}}h7=?<1a:flqqd;9;95m6j`uu`?5729i2ndyyl3137=e>bh}}h7=?81c:flqqd;9;=1<3o4dnwwf975?730hb{{b=31:<=cg|~i0<=19:flqqd;9=427iaztc>21;?<lfn1?9>89gkpre48=556j`uu`?5=8>3me~xo2>9?:8`jssj5;556j`uu`?658>3me~xo2=1?;8`jssj589245kotva875912ndyyl325<:?air|k699374dnwwf941601ocxzm<35==>bh}}h7>506;emvpg:51720hb{{b=0==>bh}}h7?=06;emvpg:49730hb{{b=11:<=cg|~i0>=19:flqqd;;=427iaztc>01;?<lfn1=9>89gkpre4:=556j`uu`?7=8>3me~xo2<9?:8`jssj59556j`uu`?058>3me~xo2;1?;8`jssj5>9245kotva815912ndyyl345<:?air|k6?9374dnwwf921601ocxzm<55==>bh}}h78506;emvpg:31720hb{{b=6==>bh}}h79=06;emvpg:29730hb{{b=71:<=cg|~i08=19:flqqd;==427iaztc>61;?<lfn1;9>89gkpre4<=556j`uu`?1=8>3me~xo2:9?:8`jssj5?556j`uu`?258>3me~xo291?;8`jssj5<9245kotva835912ndyyl365<:?air|k6=9374dnwwf901601ocxzm<75==>bh}}h7:506;emvpg:11720hb{{b=4==>bh}}h7;=06;emvpg:09730hb{{b=51:<=cg|~i0:=19:flqqd;?=427iaztc>41;?<lfn199>89gkpre4>=556j`uu`?3=8>3me~xo289?:8`jssj5=556j`uu`?<58>3me~xo271?;8`jssj529245kotva8=5912ndyyl385<:?air|k639374dnwwf9>1601ocxzm<95==>bh}}h74506;emvpg:?1720hb{{b=:==>bh}}h75=06;emvpg:>9730hb{{b=;1:<=cg|~i04=19:flqqd;1=427iaztc>:1;?<lfn179>89gkpre40=556j`uu`?==8>3me~xo269?:8`jssj53546kkig0mca5<mgk87h`md:kmn`eslkci|k;hliafrtj`~n~?9;ln644Ycl{8T{oQff^abgmc492gg9=?Pdep1[rdXaoUhmnfj,cnh[hcjWnoeS{=P1-LLJ@*IGGO8h>5bl422[abu:V}iSdhPc`aka)dkcVgnaRijn^t0[4*|kVbjR|jgbga95*dWakxSkhcdc>4)eXelgTxt~j=3.`[wuszhgTn0>#c^pppwgjWh7; nQ}su]w}uc:[PDH nQgar]jjocd|lxy1="l_qpjiZr~xl7: nQfnhva[sgk59&hSknd^uj`qnXj4;94!mPrdcg[roc|aUj1><#c^fjwddkmV}j~cQmhw]`kij:8%iTecg{_gkoaZhfel7ecRm`e^djh`Ykghnnh!mPwskwaZkhllUi1Z\FTD]EMWUS$jU|~dzj_lmgaZg:_[C_IRHFRRV/gZkrpVzb|hbfnd]ppdab{4:'oRfns^ofiZir|ySkhs^`>4)eXdfkoSd`ft^djh`;7$jUcm~Qbel]lqqvr|Vxnk~Qn=1.`[rtn|lUoi}zg_c?2472+kV}yeykPddrwlZg:<93= nQgar]qwqd:8%iTdl}Prrvb95*dW`dbxlQyam?3(fYoizUfyuQ`uurvpZtbozUi1="l_icp[hsWf|xzPrdep[d;7$jUjhi|n_vkgpm;6:%iTmij}b^uj`qn:99&hSikiatnw[agsi4:'oR{|e^g`g86+kVkgkb|ftio>5)eXl`yjnakPw`pm[gnqW{kekh3?,b]tvlrbW~coxeQm=00;(fYpz`~nSzgkti]b964+kVxnmiQkeqvk[g;68;>'oRlvtd]pmc:0%iT~hok_egspmYf5=:2:!mPsho\gjjkazcdbRmgebi>EIJ+kVida`aa_bnh95*dW~ojSzgkti?7(fYoizUnbo3>,b]kevYbfh7: nQxec]tmaro58<'obcoogmpZhfel7f`8>>_efq6ZqeW`lTolmge-a\qvcXjp~nSzkm=0.`[pubWksiRyja<3/gZtt|Vzyeb|ftx]a9FC+kVxxxR~}inpjp|Yf5JO'oR{|e^ffbdsk|Vnjxl3?,|0g?hj288Uoh<Pwc]jbZefkaoTnaePmdo\c`hX~:U:Su}{_0:8jbee}`foo6|kaefqafe/8 i0~iokdsg`g-7.k2xomij}eba+6,e<zmkohklc)1*g>tcimnyinm'4(a8vagcl{oho%;&c:pgeabumji#:$m4recg`wcdk!="o6|kaefqafe/0 i0~iokdsg`g-?.k2xomij}eba?4;c<zmkohklc=;94;0<zlmhil84rde`ag2<zz~j86||tc58wgosm{x9>6zbp.]`c*kk=9;Thi|=_v`\mcYdijbn"ci`6:ufe-6.>2}nm%?&6:ufe-4.>2}nm%=&6:ufe969>2}nm1?16:ufe94902}nm1=50?48s`g;;7<0{hl'0(48s`d/9 =0{hl'11+4?rce 8;";6yjb)31-2=pmk":?$94wd`+51/03~oi$<;&6:uff-4.>2}nn%=&6:uff-2.>2}nn%;&6:uff-0.>2}nn%9&6:uff->.>2}nn%7&6:uff969?2}nn1??>69tag:697=0{hl313<4?rce4895;6yjb=37:<=pmk6:97>17:uff9726?1|io2>>79tag:56?1|io2<>79tag:36?1|io2:>79tag:16?1|io28>79tag:?6?1|io26>|BCtg3?3IJs:>m5F;695~U0:3<9=7=5120a02b=90;iiv`<6882?k51i3?0(>88:240?xU083<9=7=5120a02b=90;ii6]>a6856d<72899n99k:0;2g4=T?90=>l4?:011f11c283:o?5k63494?7=9rY<>78=1;19564e<>n1=4?me:tW764=83;1=7?9fzQ46?059391=><m46f95<7em2.88<4>a99U73>=:r:m44>;t3be?6<u-9:i7?m;c412?6=9?o1?7?9ezJ07c=]>;03w<65d;:90?742>0:<785}%10=?05>2.8:;4<989j274=831b:?=50;9j216=83.8>=49459m74`=821b:>h50;&065<1<=1e?<h51:9j26c=83.8>=49459m74`=:21b:>j50;&065<1<=1e?<h53:9j21b=83.8>=495b9m74`=821b:9m50;&065<1=j1e?<h51:9j21d=83.8>=495b9m74`=:21b:9o50;&065<1=j1e?<h53:9j21?=83.8>=495b9m74`=<21b:9650;&065<1=j1e?<h55:9j203=83.8>=495b9m74`=>21b:8:50;&065<1=j1e?<h57:9j205=83.8>=495b9m74`=021b:8<50;&065<1=j1e?<h59:9j207=83.8>=495b9m74`=i21b:8>50;&065<1=j1e?<h5b:9j21`=83.8>=495b9m74`=k21b:9k50;&065<1=j1e?<h5d:9j211=83.8>=495b9m74`=m21b:9850;&065<1=j1e?<h5f:9j73c=83.8>=4<789m74`=821b?;j50;&065<4?01e?<h51:9j720=83.8>=4<789m74`=:21b?:;50;&065<4?01e?<h53:9j722=83.8>=4<789m74`=<21b?:=50;&065<4?01e?<h55:9j724=83.8>=4<789m74`=>21b?:?50;&065<4?01e?<h57:9j726=83.8>=4<789m74`=021b?;h50;&065<4?01e?<h59:9j73e=83.8>=4<789m74`=i21b?;l50;&065<4?01e?<h5b:9j7=b=83.8>=4<969m74`=821b?5m50;&065<41>1e?<h51:9j7=d=83.8>=4<969m74`=:21b?5o50;&065<41>1e?<h53:9j7=?=83.8>=4<969m74`=<21b?5650;&065<41>1e?<h55:9j7=1=83.8>=4<969m74`=>21b?5850;&065<41>1e?<h57:9j7=3=83.8>=4<969m74`=021b?5:50;&065<41>1e?<h59:9l0c>=83.8>=4:169m74`=821d8k950;&065<29>1e?<h51:9l0c3=83.8>=4:169m74`=:21d8k:50;&065<29>1e?<h53:9l0c5=83.8>=4:169m74`=<21d8k<50;&065<29>1e?<h55:9l0c7=83.8>=4:169m74`=>21d8k>50;&065<29>1e?<h57:9l0``=83.8>=4:169m74`=021d8hk50;&065<29>1e?<h59:9l0`b=83.8>=4:169m74`=i21d8hm50;&065<29>1e?<h5b:9l0`g=83.8>=4:169m74`=k21d8h750;&065<29>1e?<h5d:9l0`>=83.8>=4:169m74`=m21d8h950;&065<29>1e?<h5f:9l0`0=83.8>=4:169m74`=9910c9k::18'776==8=0b>?i:038?j2b<3:1(><?:434?k56n3;976a;e283>!5583?:;6`<1g827>=h<l81<7*<218652=i;8l1=954o5g2>5<#;;:19<94n23e>43<3f>mi7>5$203>0703g9:j7?9;:m7ba<72-99<7;>7:l05c<6?21d8km50;&065<29>1e?<h51998k1`e290/??>55058j67a28307b:ia;29 6472<;<7c=>f;3b?>i3n00;6)==0;723>h49o0:n65`4g494?"4:90>=:5a30d95f=<g=oi6=4+3329141<f:;m6<j4;n6f4?6=,:8;68?8;o12b?7b32e?hk4?:%114?36?2d8=k4>f:9l116=83.8>=4:bd9m74`=821d9>h50;&065<2jl1e?<h51:9l16c=83.8>=4:bd9m74`=:21d9>j50;&065<2jl1e?<h53:9l16e=83.8>=4:bd9m74`=<21d9>l50;&065<2jl1e?<h55:9l16g=83.8>=4:bd9m74`=>21d9>750;&065<2jl1e?<h57:9l161=83.8>=4:bd9m74`=021d9>850;&065<2jl1e?<h59:9l163=83.8>=4:bd9m74`=i21d9>:50;&065<2jl1e?<h5b:9l165=83.8>=4:bd9m74`=k21d9><50;&065<2jl1e?<h5d:9l167=83.8>=4:bd9m74`=m21d9>>50;&065<2jl1e?<h5f:9l17`=83.8>=4:bd9m74`=9910c8<j:18'776==ko0b>?i:038?j35k3:1(><?:4`f?k56n3;976a:2c83>!5583?ii6`<1g827>=h=;k1<7*<2186f`=i;8l1=954o40:>5<#;;:19ok4n23e>43<3f?947>5$203>0db3g9:j7?9;:m662<72-99<7;me:l05c<6?21d9?850;&065<2jl1e?<h51998k042290/??>55cg8j67a28307b;=4;29 6472<hn7c=>f;3b?>i2::0;6)==0;7aa>h49o0:n65`58d94?"4:90>nh5a30d95f=<g<3n6=4+33291gc<f:;m6<j4;n7:`?6=,:8;68lj;o12b?7b32e>5n4?:%114?3em2d8=k4>f:9l1<d=83.8>=4:bd9m74`=:910c87n:18'776==ko0b>?i:338?j3>13:1(><?:4`f?k56n38976a:9983>!5583?ii6`<1g817>=h=0=1<7*<2186f`=i;8l1>954o4;5>5<#;;:19ok4n23e>73<3f?287>5$203>0db3g9:j7<9;:m6=6<72-99<7;me:l05c<5?21d94<50;&065<2jl1e?<h52998k0?6290/??>55cg8j67a2;307b;60;29 6472<hn7c=>f;0b?>i20o0;6)==0;7aa>h49o09n65`59g94?"4:90>nh5a30d96f=<g<2o6=4+33291gc<f:;m6?j4;n7;g?6=,:8;68lj;o12b?4b32e>4o4?:%114?3em2d8=k4=f:9l1=?=83.8>=4:bd9m74`=;910c867:18'776==ko0b>?i:238?j3??3:1(><?:4`f?k56n39976a:8783>!5583?ii6`<1g807>=h=1?1<7*<2186f`=i;8l1?954o4:7>5<#;;:19ok4n23e>63<3f?3?7>5$203>0db3g9:j7=9;:m6<7<72-99<7;me:l05c<4?21d95?50;&065<2jl1e?<h53998k0>7290/??>55cg8j67a2:307b;8e;29 6472<hn7c=>f;1b?>i2?m0;6)==0;7aa>h49o08n65`56a94?"4:90>nh5a30d97f=<g<=i6=4+33291gc<f:;m6>j4;n74e?6=,:8;68lj;o12b?5b32e>;44?:%114?3em2d8=k4<f:9l12>=83.8>=4:bd9m74`=<910c898:18'776==ko0b>?i:538?j30>3:1(><?:4`f?k56n3>976a:7483>!5583?ii6`<1g877>=h=>91<7*<2186f`=i;8l18954o451>5<#;;:19ok4n23e>13<3f?<=7>5$203>0db3g9:j7:9;:m635<72-99<7;me:l05c<3?21d9;h50;&065<2jl1e?<h54998k00b290/??>55cg8j67a2=307b;9d;29 6472<hn7c=>f;6b?>i2>j0;6)==0;7aa>h49o0?n65`57`94?"4:90>nh5a30d90f=<g<<j6=4+33291gc<f:;m69j4;n75<?6=,:8;68lj;o12b?2b32e>::4?:%114?3em2d8=k4;f:9l130=83.8>=4:bd9m74`==910c88::18'776==ko0b>?i:438?j31<3:1(><?:4`f?k56n3?976a:6283>!5583?ii6`<1g867>=h=?81<7*<2186f`=i;8l19954o442>5<#;;:19ok4n23e>03<3f?=<7>5$203>0db3g9:j7;9;:m61c<72-99<7;me:l05c<2?21d98j50;&065<2jl1e?<h55998k03d290/??>55cg8j67a2<307b;:b;29 6472<hn7c=>f;7b?>i2=h0;6)==0;7aa>h49o0>n65`54;94?"4:90>nh5a30d91f=<g<?36=4+33291gc<f:;m68j4;n763?6=,:8;68lj;o12b?3b32e>9;4?:%114?3em2d8=k4:f:9l103=83.8>=4:bd9m74`=>910c8;;:18'776==ko0b>?i:738?j32:3:1(><?:4`f?k56n3<976a:5083>!5583?ii6`<1g857>=h=<:1<7*<2186f`=i;8l1:954o46e>5<#;;:19ok4n23e>33<3f??i7>5$203>0db3g9:j789;:m60a<72-99<7;me:l05c<1?21d99m50;&065<2jl1e?<h56998k02e290/??>55cg8j67a2?307b;;a;29 6472<hn7c=>f;4b?>i2<00;6)==0;7aa>h49o0=n65`55594?"4:90>nh5a30d92f=<g<>=6=4+33291gc<f:;m6;j4;n771?6=,:8;68lj;o12b?0b32e>894?:%114?3em2d8=k49f:9l115=83.8>=4:bd9m74`=?910c8:=:18'776==ko0b>?i:638?j3393:1(><?:4`f?k56n3=976a:3983>!5583?ii6`<1g847>=h=;n1<7*<2186f`=i;8l1;954o401>5<#;;:19ok4n23e>23<3f?297>5$203>0db3g9:j799;:m6<d<72-99<7;me:l05c<0?21d9:h50;&065<2jl1e?<h57998k013290/??>55cg8j67a2>307b;99;29 6472<hn7c=>f;5b?>i2=l0;6)==0;7aa>h49o0<n65`54194?"4:90>nh5a30d93f=<g<>36=4+33291gc<f:;m6:j4;n715?6=,:8;68lj;o12b?1b32e>>=4?:%114?3em2d8=k48f:9j7<g=831b?4l50;9j7g0=83.8>=4<d49m74`=821b?o;50;&065<4l<1e?<h51:9j7g5=83.8>=4<d49m74`=:21b?o<50;&065<4l<1e?<h53:9j7g7=83.8>=4<d49m74`=<21b?o>50;&065<4l<1e?<h55:9j7d`=83.8>=4<d49m74`=>21b?lk50;&065<4l<1e?<h57:9j7db=83.8>=4<d49m74`=021b?lm50;&065<4l<1e?<h59:9j7dd=83.8>=4<d49m74`=i21b?lo50;&065<4l<1e?<h5b:9j7d>=83.8>=4<d49m74`=k21b?l950;&065<4l<1e?<h5d:9j7d0=83.8>=4<d49m74`=m21b?l;50;&065<4l<1e?<h5f:9j7d2=83.8>=4<d49m74`=9910e>o<:18'776=;m?0b>?i:038?l5f:3:1(><?:2f6?k56n3;976g<a083>!55839o96`<1g827>=n;h:1<7*<2180`0=i;8l1=954i2;e>5<#;;:1?i;4n23e>43<3`9io7>5$203>6b23g9:j7?9;:k0fg<72-99<7=k5:l05c<6?21b?oo50;&065<4l<1e?<h51998m6d>290/??>53e78j67a28307d=m8;29 6472:n>7c=>f;3b?>o4j>0;6)==0;1g1>h49o0:n65f3c694?"4:908h85a30d95f=<a:k26=4+33297a3<f:;m6<j4;h1:a?6=,:8;6>j:;o12b?7b32c85i4?:%114?5c=2d8=k4>f:9j7cc=83.8>=4;7b9m74`=821b?kj50;&065<3?j1e?<h51:9j7ce=83.8>=4;7b9m74`=:21b?kl50;&065<3?j1e?<h53:9j7cg=83.8>=4;7b9m74`=<21b?k750;&065<3?j1e?<h55:9j7c>=83.8>=4;7b9m74`=>21b?k950;&065<3?j1e?<h57:9j7c3=83.8>=4;7b9m74`=021b?k:50;&065<3?j1e?<h59:9j7c5=83.8>=4;7b9m74`=i21b?k<50;&065<3?j1e?<h5b:9j7c7=83.8>=4;7b9m74`=k21b?k>50;&065<3?j1e?<h5d:9j7``=83.8>=4;7b9m74`=m21b?hk50;&065<3?j1e?<h5f:9j7`b=83.8>=4;7b9m74`=9910e>kl:18'776=<>i0b>?i:038?l5bi3:1(><?:55`?k56n3;976g<e883>!5583><o6`<1g827>=n;l21<7*<21873f=i;8l1=954i2g4>5<#;;:18:m4n23e>43<3`9n:7>5$203>11d3g9:j7?9;:k0a0<72-99<7:8c:l05c<6?21b?h:50;&065<3?j1e?<h51998m6c4290/??>546a8j67a28307d=j2;29 6472==h7c=>f;3b?>o4m80;6)==0;64g>h49o0:n65f44f94?"4:90?;n5a30d95f=<a=?h6=4+332902e<f:;m6<j4;h66f?6=,:8;699l;o12b?7b32c?9l4?:%114?20k2d8=k4>f:9j00?=83.8>=4;7b9m74`=:910e9;7:18'776=<>i0b>?i:338?l22?3:1(><?:55`?k56n38976g;5783>!5583><o6`<1g817>=n<<?1<7*<21873f=i;8l1>954i577>5<#;;:18:m4n23e>73<3`>>>7>5$203>11d3g9:j7<9;:k714<72-99<7:8c:l05c<5?21b88>50;&065<3?j1e?<h52998m12a290/??>546a8j67a2;307d:;e;29 6472==h7c=>f;0b?>o3<m0;6)==0;64g>h49o09n65f45a94?"4:90?;n5a30d96f=<a=>i6=4+332902e<f:;m6?j4;h67e?6=,:8;699l;o12b?4b32c?844?:%114?20k2d8=k4=f:9j011=83.8>=4;7b9m74`=;910e9:9:18'776=<>i0b>?i:238?l23=3:1(><?:55`?k56n39976g;4583>!5583><o6`<1g807>=n<=91<7*<21873f=i;8l1?954i561>5<#;;:18:m4n23e>63<3`>?=7>5$203>11d3g9:j7=9;:k705<72-99<7:8c:l05c<4?21b8>h50;&065<3?j1e?<h53998m15b290/??>546a8j67a2:307d:<c;29 6472==h7c=>f;1b?>o3;k0;6)==0;64g>h49o08n65f42c94?"4:90?;n5a30d97f=<a=926=4+332902e<f:;m6>j4;h60<?6=,:8;699l;o12b?5b32c??:4?:%114?20k2d8=k4<f:9j060=83.8>=4;7b9m74`=<910e9=::18'776=<>i0b>?i:538?l24<3:1(><?:55`?k56n3>976g;3283>!5583><o6`<1g877>=n<:;1<7*<21873f=i;8l18954i513>5<#;;:18:m4n23e>13<3`>9j7>5$203>11d3g9:j7:9;:k76`<72-99<7:8c:l05c<3?21b8?j50;&065<3?j1e?<h54998m14d290/??>546a8j67a2=307d:=b;29 6472==h7c=>f;6b?>o3:h0;6)==0;64g>h49o0?n65f43;94?"4:90?;n5a30d90f=<a=836=4+332902e<f:;m69j4;h612?6=,:8;699l;o12b?2b32c?>84?:%114?20k2d8=k4;f:9j072=83.8>=4;7b9m74`==910e9<<:18'776=<>i0b>?i:438?l25:3:1(><?:55`?k56n3?976g;2083>!5583><o6`<1g867>=n<;:1<7*<21873f=i;8l19954i53e>5<#;;:18:m4n23e>03<3`>:i7>5$203>11d3g9:j7;9;:k75a<72-99<7:8c:l05c<2?21b8<l50;&065<3?j1e?<h55998m17f290/??>546a8j67a2<307d:>9;29 6472==h7c=>f;7b?>o3910;6)==0;64g>h49o0>n65f40594?"4:90?;n5a30d91f=<a=;=6=4+332902e<f:;m68j4;h621?6=,:8;699l;o12b?3b32c?=94?:%114?20k2d8=k4:f:9j045=83.8>=4;7b9m74`=>910e9?=:18'776=<>i0b>?i:738?l2683:1(><?:55`?k56n3<976g;0g83>!5583><o6`<1g857>=n<9o1<7*<21873f=i;8l1:954i52g>5<#;;:18:m4n23e>33<3`>;o7>5$203>11d3g9:j789;:k74g<72-99<7:8c:l05c<1?21b8=o50;&065<3?j1e?<h56998m16>290/??>546a8j67a2?307d:?8;29 6472==h7c=>f;4b?>o38>0;6)==0;64g>h49o0=n65f41794?"4:90?;n5a30d92f=<a=:?6=4+332902e<f:;m6;j4;h637?6=,:8;699l;o12b?0b32c?<?4?:%114?20k2d8=k49f:9j057=83.8>=4;7b9m74`=?910e9>?:18'776=<>i0b>?i:638?l5an3:1(><?:55`?k56n3=976g<f783>!5583><o6`<1g847>=n;lh1<7*<21873f=i;8l1;954i2g3>5<#;;:18:m4n23e>23<3`>>?7>5$203>11d3g9:j799;:k70=<72-99<7:8c:l05c<0?21b8>j50;&065<3?j1e?<h57998m155290/??>546a8j67a2>307d:=7;29 6472==h7c=>f;5b?>o39j0;6)==0;64g>h49o0<n65f40394?"4:90?;n5a30d93f=<a=:=6=4+332902e<f:;m6:j4;h1gb?6=,:8;699l;o12b?1b32c8hh4?:%114?20k2d8=k48f:9a716=83;1<7>tH21e?!54139?<6a<1e83>>{e9891<7?50;2xL65a3-9857?>3:m257<722wi:<4?:0:3>0<6>oqC?>h4Z70957}603n147:51284>0<683<197?<:682<?b=03>1==49:|&07<<1:01/:o49269'34<1:11/?<7530a8m3452900e;<<:188m3432900e;=8:188m35?2900e;:?:18'776=>=>0b>?i:198m35a290/??>56568j67a2810e;=j:18'776=>=>0b>?i:398m35c290/??>56568j67a2:10e;:k:18'776=><i0b>?i:198m32d290/??>564a8j67a2810e;:m:18'776=><i0b>?i:398m32f290/??>564a8j67a2:10e;:6:18'776=><i0b>?i:598m32?290/??>564a8j67a2<10e;;::18'776=><i0b>?i:798m333290/??>564a8j67a2>10e;;<:18'776=><i0b>?i:998m335290/??>564a8j67a2010e;;>:18'776=><i0b>?i:`98m337290/??>564a8j67a2k10e;:i:18'776=><i0b>?i:b98m32b290/??>564a8j67a2m10e;:8:18'776=><i0b>?i:d98m321290/??>564a8j67a2o10e>8j:18'776=;>30b>?i:198m60c290/??>536;8j67a2810e>99:18'776=;>30b>?i:398m612290/??>536;8j67a2:10e>9;:18'776=;>30b>?i:598m614290/??>536;8j67a2<10e>9=:18'776=;>30b>?i:798m616290/??>536;8j67a2>10e>9?:18'776=;>30b>?i:998m60a290/??>536;8j67a2010e>8l:18'776=;>30b>?i:`98m60e290/??>536;8j67a2k10e>6k:18'776=;0=0b>?i:198m6>d290/??>53858j67a2810e>6m:18'776=;0=0b>?i:398m6>f290/??>53858j67a2:10e>66:18'776=;0=0b>?i:598m6>?290/??>53858j67a2<10e>68:18'776=;0=0b>?i:798m6>1290/??>53858j67a2>10e>6::18'776=;0=0b>?i:998m6>3290/??>53858j67a2010e;=6:188m35f2900c;=m:188k1`?290/??>55058j67a2910c9h8:18'776==8=0b>?i:098k1`2290/??>55058j67a2;10c9h;:18'776==8=0b>?i:298k1`4290/??>55058j67a2=10c9h=:18'776==8=0b>?i:498k1`6290/??>55058j67a2?10c9h?:18'776==8=0b>?i:698k1ca290/??>55058j67a2110c9kj:18'776==8=0b>?i:898k1cc290/??>55058j67a2h10c9kl:18'776==8=0b>?i:c98k1cf290/??>55058j67a2j10c9k6:18'776==8=0b>?i:e98k1c?290/??>55058j67a2l10c9k8:18'776==8=0b>?i:g98k1c1290/??>55058j67a28:07b:j5;29 6472<;<7c=>f;32?>i3m=0;6)==0;723>h49o0:>65`4d194?"4:90>=:5a30d956=<g=o96=4+3329141<f:;m6<:4;n6f5?6=,:8;68?8;o12b?7232e?jh4?:%114?36?2d8=k4>6:9l0cb=83.8>=4:169m74`=9>10c9hl:18'776==8=0b>?i:0:8?j2aj3:1(><?:434?k56n3;276a;f`83>!5583?:;6`<1g82e>=h<o31<7*<218652=i;8l1=o54o5d5>5<#;;:19<94n23e>4e<3f>nn7>5$203>0703g9:j7?k;:m7a5<72-99<7;>7:l05c<6m21d8ih50;&065<29>1e?<h51g98k027290/??>55cg8j67a2910c8=i:18'776==ko0b>?i:098k05b290/??>55cg8j67a2;10c8=k:18'776==ko0b>?i:298k05d290/??>55cg8j67a2=10c8=m:18'776==ko0b>?i:498k05f290/??>55cg8j67a2?10c8=6:18'776==ko0b>?i:698k050290/??>55cg8j67a2110c8=9:18'776==ko0b>?i:898k052290/??>55cg8j67a2h10c8=;:18'776==ko0b>?i:c98k054290/??>55cg8j67a2j10c8==:18'776==ko0b>?i:e98k056290/??>55cg8j67a2l10c8=?:18'776==ko0b>?i:g98k04a290/??>55cg8j67a28:07b;=e;29 6472<hn7c=>f;32?>i2:j0;6)==0;7aa>h49o0:>65`53`94?"4:90>nh5a30d956=<g<8j6=4+33291gc<f:;m6<:4;n71=?6=,:8;68lj;o12b?7232e>>54?:%114?3em2d8=k4>6:9l171=83.8>=4:bd9m74`=9>10c8<9:18'776==ko0b>?i:0:8?j35=3:1(><?:4`f?k56n3;276a:2583>!5583?ii6`<1g82e>=h=;91<7*<2186f`=i;8l1=o54o4;e>5<#;;:19ok4n23e>4e<3f?2i7>5$203>0db3g9:j7?k;:m6=a<72-99<7;me:l05c<6m21d94m50;&065<2jl1e?<h51g98k0?e290/??>55cg8j67a2;:07b;6a;29 6472<hn7c=>f;02?>i2100;6)==0;7aa>h49o09>65`58:94?"4:90>nh5a30d966=<g<3<6=4+33291gc<f:;m6?:4;n7:2?6=,:8;68lj;o12b?4232e>594?:%114?3em2d8=k4=6:9l1<5=83.8>=4:bd9m74`=:>10c87=:18'776==ko0b>?i:3:8?j3>93:1(><?:4`f?k56n38276a:9183>!5583?ii6`<1g81e>=h=1l1<7*<2186f`=i;8l1>o54o4:f>5<#;;:19ok4n23e>7e<3f?3h7>5$203>0db3g9:j7<k;:m6<f<72-99<7;me:l05c<5m21d95l50;&065<2jl1e?<h52g98k0>>290/??>55cg8j67a2::07b;78;29 6472<hn7c=>f;12?>i20>0;6)==0;7aa>h49o08>65`59494?"4:90>nh5a30d976=<g<2>6=4+33291gc<f:;m6>:4;n7;0?6=,:8;68lj;o12b?5232e>4>4?:%114?3em2d8=k4<6:9l1=4=83.8>=4:bd9m74`=;>10c86>:18'776==ko0b>?i:2:8?j3?83:1(><?:4`f?k56n39276a:7d83>!5583?ii6`<1g80e>=h=>n1<7*<2186f`=i;8l1?o54o45`>5<#;;:19ok4n23e>6e<3f?<n7>5$203>0db3g9:j7=k;:m63d<72-99<7;me:l05c<4m21d9:750;&065<2jl1e?<h53g98k01?290/??>55cg8j67a2=:07b;87;29 6472<hn7c=>f;62?>i2??0;6)==0;7aa>h49o0?>65`56794?"4:90>nh5a30d906=<g<=86=4+33291gc<f:;m69:4;n746?6=,:8;68lj;o12b?2232e>;<4?:%114?3em2d8=k4;6:9l126=83.8>=4:bd9m74`=<>10c88i:18'776==ko0b>?i:5:8?j31m3:1(><?:4`f?k56n3>276a:6e83>!5583?ii6`<1g87e>=h=?i1<7*<2186f`=i;8l18o54o44a>5<#;;:19ok4n23e>1e<3f?=m7>5$203>0db3g9:j7:k;:m62=<72-99<7;me:l05c<3m21d9;950;&065<2jl1e?<h54g98k001290/??>55cg8j67a2<:07b;95;29 6472<hn7c=>f;72?>i2>=0;6)==0;7aa>h49o0>>65`57194?"4:90>nh5a30d916=<g<<96=4+33291gc<f:;m68:4;n755?6=,:8;68lj;o12b?3232e>:=4?:%114?3em2d8=k4:6:9l10`=83.8>=4:bd9m74`==>10c8;k:18'776==ko0b>?i:4:8?j32k3:1(><?:4`f?k56n3?276a:5c83>!5583?ii6`<1g86e>=h=<k1<7*<2186f`=i;8l19o54o47:>5<#;;:19ok4n23e>0e<3f?>47>5$203>0db3g9:j7;k;:m612<72-99<7;me:l05c<2m21d98850;&065<2jl1e?<h55g98k032290/??>55cg8j67a2?:07b;:4;29 6472<hn7c=>f;42?>i2=;0;6)==0;7aa>h49o0=>65`54394?"4:90>nh5a30d926=<g<?;6=4+33291gc<f:;m6;:4;n77b?6=,:8;68lj;o12b?0232e>8h4?:%114?3em2d8=k496:9l11b=83.8>=4:bd9m74`=>>10c8:l:18'776==ko0b>?i:7:8?j33j3:1(><?:4`f?k56n3<276a:4`83>!5583?ii6`<1g85e>=h==31<7*<2186f`=i;8l1:o54o464>5<#;;:19ok4n23e>3e<3f??:7>5$203>0db3g9:j78k;:m600<72-99<7;me:l05c<1m21d99:50;&065<2jl1e?<h56g98k024290/??>55cg8j67a2>:07b;;2;29 6472<hn7c=>f;52?>i2<80;6)==0;7aa>h49o0<>65`52:94?"4:90>nh5a30d936=<g<8o6=4+33291gc<f:;m6::4;n716?6=,:8;68lj;o12b?1232e>584?:%114?3em2d8=k486:9l1=g=83.8>=4:bd9m74`=?>10c89i:18'776==ko0b>?i:6:8?j30<3:1(><?:4`f?k56n3=276a:6883>!5583?ii6`<1g84e>=h=<o1<7*<2186f`=i;8l1;o54o470>5<#;;:19ok4n23e>2e<3f??47>5$203>0db3g9:j79k;:m664<72-99<7;me:l05c<0m21d9?>50;&065<2jl1e?<h57g98m6?f2900e>7m:188k353290/??>56248j67a2910c;=<:18'776=>:<0b>?i:098k355290/??>56248j67a2;10c;=>:18'776=>:<0b>?i:298k357290/??>56248j67a2=10c;<i:18'776=>:<0b>?i:498k34b290/??>56248j67a2?10c;<k:18'776=>:<0b>?i:698k34d290/??>56248j67a2110c;<m:18'776=>:<0b>?i:898m6d1290/??>53e78j67a2910e>l::18'776=;m?0b>?i:098m6d4290/??>53e78j67a2;10e>l=:18'776=;m?0b>?i:298m6d6290/??>53e78j67a2=10e>l?:18'776=;m?0b>?i:498m6ga290/??>53e78j67a2?10e>oj:18'776=;m?0b>?i:698m6gc290/??>53e78j67a2110e>ol:18'776=;m?0b>?i:898m6ge290/??>53e78j67a2h10e>on:18'776=;m?0b>?i:c98m6g?290/??>53e78j67a2j10e>o8:18'776=;m?0b>?i:e98m6g1290/??>53e78j67a2l10e>o::18'776=;m?0b>?i:g98m6g3290/??>53e78j67a28:07d=n3;29 6472:n>7c=>f;32?>o4i;0;6)==0;1g1>h49o0:>65f3`394?"4:908h85a30d956=<a:k;6=4+33297a3<f:;m6<:4;h1:b?6=,:8;6>j:;o12b?7232c8nn4?:%114?5c=2d8=k4>6:9j7gd=83.8>=4<d49m74`=9>10e>ln:18'776=;m?0b>?i:0:8?l5e13:1(><?:2f6?k56n3;276g<b983>!55839o96`<1g82e>=n;k=1<7*<2180`0=i;8l1=o54i2`7>5<#;;:1?i;4n23e>4e<3`9j57>5$203>6b23g9:j7?k;:k0=`<72-99<7=k5:l05c<6m21b?4j50;&065<4l<1e?<h51g98m6`b290/??>546a8j67a2910e>hk:18'776=<>i0b>?i:098m6`d290/??>546a8j67a2;10e>hm:18'776=<>i0b>?i:298m6`f290/??>546a8j67a2=10e>h6:18'776=<>i0b>?i:498m6`?290/??>546a8j67a2?10e>h8:18'776=<>i0b>?i:698m6`2290/??>546a8j67a2110e>h;:18'776=<>i0b>?i:898m6`4290/??>546a8j67a2h10e>h=:18'776=<>i0b>?i:c98m6`6290/??>546a8j67a2j10e>h?:18'776=<>i0b>?i:e98m6ca290/??>546a8j67a2l10e>kj:18'776=<>i0b>?i:g98m6cc290/??>546a8j67a28:07d=jc;29 6472==h7c=>f;32?>o4mh0;6)==0;64g>h49o0:>65f3d;94?"4:90?;n5a30d956=<a:o36=4+332902e<f:;m6<:4;h1f3?6=,:8;699l;o12b?7232c8i;4?:%114?20k2d8=k4>6:9j7`3=83.8>=4;7b9m74`=9>10e>k;:18'776=<>i0b>?i:0:8?l5b;3:1(><?:55`?k56n3;276g<e383>!5583><o6`<1g82e>=n;l;1<7*<21873f=i;8l1=o54i57g>5<#;;:18:m4n23e>4e<3`>>o7>5$203>11d3g9:j7?k;:k71g<72-99<7:8c:l05c<6m21b88o50;&065<3?j1e?<h51g98m13>290/??>546a8j67a2;:07d::8;29 6472==h7c=>f;02?>o3=>0;6)==0;64g>h49o09>65f44494?"4:90?;n5a30d966=<a=?>6=4+332902e<f:;m6?:4;h660?6=,:8;699l;o12b?4232c?9?4?:%114?20k2d8=k4=6:9j007=83.8>=4;7b9m74`=:>10e9;?:18'776=<>i0b>?i:3:8?l23n3:1(><?:55`?k56n38276g;4d83>!5583><o6`<1g81e>=n<=n1<7*<21873f=i;8l1>o54i56`>5<#;;:18:m4n23e>7e<3`>?n7>5$203>11d3g9:j7<k;:k70d<72-99<7:8c:l05c<5m21b89750;&065<3?j1e?<h52g98m120290/??>546a8j67a2::07d:;6;29 6472==h7c=>f;12?>o3<<0;6)==0;64g>h49o08>65f45694?"4:90?;n5a30d976=<a=>86=4+332902e<f:;m6>:4;h676?6=,:8;699l;o12b?5232c?8<4?:%114?20k2d8=k4<6:9j016=83.8>=4;7b9m74`=;>10e9=i:18'776=<>i0b>?i:2:8?l24m3:1(><?:55`?k56n39276g;3b83>!5583><o6`<1g80e>=n<:h1<7*<21873f=i;8l1?o54i51b>5<#;;:18:m4n23e>6e<3`>857>5$203>11d3g9:j7=k;:k77=<72-99<7:8c:l05c<4m21b8>950;&065<3?j1e?<h53g98m151290/??>546a8j67a2=:07d:<5;29 6472==h7c=>f;62?>o3;=0;6)==0;64g>h49o0?>65f42194?"4:90?;n5a30d906=<a=9:6=4+332902e<f:;m69:4;h604?6=,:8;699l;o12b?2232c?>k4?:%114?20k2d8=k4;6:9j07c=83.8>=4;7b9m74`=<>10e9<k:18'776=<>i0b>?i:5:8?l25k3:1(><?:55`?k56n3>276g;2c83>!5583><o6`<1g87e>=n<;k1<7*<21873f=i;8l18o54i50:>5<#;;:18:m4n23e>1e<3`>947>5$203>11d3g9:j7:k;:k763<72-99<7:8c:l05c<3m21b8?;50;&065<3?j1e?<h54g98m143290/??>546a8j67a2<:07d:=3;29 6472==h7c=>f;72?>o3:;0;6)==0;64g>h49o0>>65f43394?"4:90?;n5a30d916=<a=8;6=4+332902e<f:;m68:4;h62b?6=,:8;699l;o12b?3232c?=h4?:%114?20k2d8=k4:6:9j04b=83.8>=4;7b9m74`==>10e9?m:18'776=<>i0b>?i:4:8?l26i3:1(><?:55`?k56n3?276g;1883>!5583><o6`<1g86e>=n<821<7*<21873f=i;8l19o54i534>5<#;;:18:m4n23e>0e<3`>::7>5$203>11d3g9:j7;k;:k750<72-99<7:8c:l05c<2m21b8<:50;&065<3?j1e?<h55g98m174290/??>546a8j67a2?:07d:>2;29 6472==h7c=>f;42?>o3990;6)==0;64g>h49o0=>65f41d94?"4:90?;n5a30d926=<a=:n6=4+332902e<f:;m6;:4;h63`?6=,:8;699l;o12b?0232c?<n4?:%114?20k2d8=k496:9j05d=83.8>=4;7b9m74`=>>10e9>n:18'776=<>i0b>?i:7:8?l2713:1(><?:55`?k56n3<276g;0983>!5583><o6`<1g85e>=n<9=1<7*<21873f=i;8l1:o54i526>5<#;;:18:m4n23e>3e<3`>;87>5$203>11d3g9:j78k;:k746<72-99<7:8c:l05c<1m21b8=<50;&065<3?j1e?<h56g98m166290/??>546a8j67a2>:07d:?0;29 6472==h7c=>f;52?>o4no0;6)==0;64g>h49o0<>65f3g494?"4:90?;n5a30d936=<a:oi6=4+332902e<f:;m6::4;h1f4?6=,:8;699l;o12b?1232c?9>4?:%114?20k2d8=k486:9j01>=83.8>=4;7b9m74`=?>10e9=k:18'776=<>i0b>?i:6:8?l24:3:1(><?:55`?k56n3=276g;2683>!5583><o6`<1g84e>=n<8i1<7*<21873f=i;8l1;o54i532>5<#;;:18:m4n23e>2e<3`>;:7>5$203>11d3g9:j79k;:k0`c<72-99<7:8c:l05c<0m21b?ik50;&065<3?j1e?<h57g98m3422900c>7l:188f602290:6=4?{%10=?76;2B8:95G32d8k4752900qo=<d;29554=83:p(>=6:202?M51<2B8?k5U63824~c=9=0m6<;5b;;9g?g=9>0::7?k:0a954<613;96<o5}og3>5=i9981<6*>a381?!7f;380(<?;:39'543=:2.:=;4=;%323?4<,8;36?5+10;96>"69h097)?>b;08 47d2;1/=<j52:&25`<53-;:j7<4$003>7=#9;;1>6*<3282?!54<3;0(<<;:39'573=:2.:>;4=;%313?4<,8836?5+13;96>"6:h097)?=b;08 44d2;1/=?j52:&26`<53-;9j7<4$013>7=#9:;1>6*>3381?!74;380(<=;:39'563=:2.:?;4=;%303?4<,8936?5+12;96>"6;h097)?<b;08 45d2;1/=>j52:&27`<53-;8j7<4$063>7=#9=;1>6*>4381?!73;380(<:;:39'513=:2.:8;4=;%373?4<,8>36?5+15;96>"6<h097)?;b;08 42d2;1/=9j52:&20`<53-;?j7<4$073>7=#9<;1>6*>5381?!72;380(<;;:39'503=:2.:9;4=;%363?4<,8?36?5+14;96>"6=h097)?:b;08 43d2;1/=8j52:&21`<53-;>j7<4$043>7=#9?;1>6*>6381?!71;380(<8;:39'533=:2.::;4=;%353?4<,8<36?5+17;96>"6>h097)?9b;08 40d2;1/=;j52:&22`<53-;=j7<4$053>7=#9>;1>6*>7381?!70;380(<9;:39'523=:2.:;;4=;%343?4<,8=36?5+16;96>"6?h097)?8b;08 41d2;1/=:j52:&23`<53-;<j7<4$0:3>7=#91;1>6*>8381?!7?;380(<6;:39'5=3=:2.:4;4=;%3;3?4<,8236?5+19;96>"60h097)?7b;08 4>d2;1/=5j52:&2<`<53-;3j7<4$0;3>7=#90;1>6*>9381?!7>;380(<7;:39'5<3=:2.:5;4=;%3:3?4<,8336?5+18;96>"61h097)?6b;08 4?d2;1/=4j52:&2=`<53-;2j7<4$0c3>7=#9h;1>6*<2g8254=#9;81>6*>a7805g=#;;81?<l4$200>67e3g998774n206>72<,:9;6;>4$212>64b3-;j87?4$0c6>4=#;<l1?8k4$243>63b3g9==774n241>72<,8886?5f11g94?=n99n1<75f10294?=n99l1<75f32494?=n;:?1<75f32:94?=n;:=1<75f6e83>>o1k3:17d8i:188m3c=831b??l50;9j77g=831b??j50;9j77e=831b??950;9j770=831b??750;9j77>=831b:>4?::k50?6=3`<>6=44i7494?=h>>0;66a98;29?j0>2900c;o50;9j<f<72-99<76m;o12b?6<3`2j6=4+3329<g=i;8l1=65f8983>!55832i7c=>f;08?l>0290/??>58c9m74`=;21b4;4?:%114?>e3g9:j7:4;h:6>5<#;;:14o5a30d91>=n0=0;6)==0;:a?k56n3<07d6<:18'776=0k1e?<h57:9j<7<72-99<76m;o12b?><3`2:6=4+3329<g=i;8l1565f8183>!55832i7c=>f;c8?l1a290/??>58c9m74`=j21b;i4?:%114?>e3g9:j7m4;h5`>5<#;;:14o5a30d9`>=n?k0;6)==0;:a?k56n3o07d9n:18'776=0k1e?<h5f:9j3<<72-99<76m;o12b?7732c<47>5$203>=d<f:;m6<?4;h54>5<#;;:14o5a30d957=<a><1<7*<218;f>h49o0:?65f7483>!55832i7c=>f;37?>o0<3:1(><?:9`8j67a28?07d7<:18'776=0k1e?<h51798m<4=83.8>=47b:l05c<6?21b5<4?:%114?>e3g9:j7?7;:k:4?6=,:8;65l4n23e>4?<3`2m6=4+3329<g=i;8l1=l54i9g94?"4:903n6`<1g82f>=n0m0;6)==0;:a?k56n3;h76g79;29 64721h0b>?i:0f8?l1b290/??>58c9m74`=9l10e:=50;&065<?j2d8=k4>f:9jf<<72-99<7l7;o12b?6<3`h<6=4+3329f==i;8l1=65fb783>!5583h37c=>f;08?ld2290/??>5b99m74`=;21bmi4?:%114?gd3g9:j7>4;hca>5<#;;:1mn5a30d95>=ni00;6)==0;c`?k56n3807do7:18'776=ij1e?<h53:9je2<72-99<7ol;o12b?2<3`k=6=4+3329ef=i;8l1965fa483>!5583kh7c=>f;48?lg3290/??>5ab9m74`=?21bm>4?:%114?gd3g9:j764;hc1>5<#;;:1mn5a30d9=>=ni80;6)==0;c`?k56n3k07do?:18'776=ij1e?<h5b:9j=`<72-99<7ol;o12b?e<3`3o6=4+3329ef=i;8l1h65f9b83>!5583kh7c=>f;g8?l?e290/??>5ab9m74`=n21b5l4?:%114?gd3g9:j7??;:k:=?6=,:8;6lm4n23e>47<3`336=4+3329ef=i;8l1=?54i8594?"4:90jo6`<1g827>=n1?0;6)==0;c`?k56n3;?76g65;29 6472hi0b>?i:078?ld3290/??>5ab9m74`=9?10eo=50;&065<fk2d8=k4>7:9jf7<72-99<7ol;o12b?7?32ci=7>5$203>de<f:;m6<74;h`3>5<#;;:1mn5a30d95d=<ahl1<7*<218bg>h49o0:n65fad83>!5583kh7c=>f;3`?>ofi3:1(><?:`a8j67a28n07d7i:18'776=ij1e?<h51d98m<2=83.8>=4nc:l05c<6n21bnh4?:%114?dc3g9:j7>4;h``>5<#;;:1ni5a30d95>=njk0;6)==0;`g?k56n3807dln:18'776=jm1e?<h53:9j60<72-99<7<;;o12b?6<3`886=4+332961=i;8l1=65f2383>!55838?7c=>f;08?l46290/??>5259m74`=;21b>=4?:%114?433g9:j7:4;h3e>5<#;;:1>95a30d91>=n:l0;6)==0;07?k56n3<07d<k:18'776=:=1e?<h57:9j6f<72-99<7<;;o12b?><3`8i6=4+332961=i;8l1565f2`83>!55838?7c=>f;c8?l4>290/??>5259m74`=j21b>54?:%114?433g9:j7m4;h04>5<#;;:1>95a30d9`>=n:?0;6)==0;07?k56n3o07d?j:18'776=:=1e?<h5f:9j70<72-99<7=;;o12b?6<3`986=4+332971=i;8l1=65f3383>!55839?7c=>f;08?l56290/??>5359m74`=;21b?=4?:%114?533g9:j7:4;h1f>5<#;;:1?95a30d91>=n;m0;6)==0;17?k56n3<07d=l:18'776=;=1e?<h57:9j7g<72-99<7=;;o12b?><3`9j6=4+332971=i;8l1565f3883>!55839?7c=>f;c8?l5?290/??>5359m74`=j21b?:4?:%114?533g9:j7m4;h15>5<#;;:1?95a30d9`>=n:o0;6)==0;17?k56n3o07d:9:18'776=<<1e?<h50:9j01<72-99<7::;o12b?7<3`>86=4+332900=i;8l1>65f4383>!5583>>7c=>f;18?l26290/??>5449m74`=<21b8=4?:%114?223g9:j7;4;h6e>5<#;;:1885a30d92>=n<l0;6)==0;66?k56n3=07d:k:18'776=<<1e?<h58:9j0f<72-99<7::;o12b??<3`>i6=4+332900=i;8l1m65f4`83>!5583>>7c=>f;`8?l2>290/??>5449m74`=k21b854?:%114?223g9:j7j4;h64>5<#;;:1885a30d9a>=n;o0;6)==0;66?k56n3l07d;9:18'776==<1e?<h50:9j11<72-99<7;:;o12b?7<3`?86=4+332910=i;8l1>65f5383>!5583?>7c=>f;18?l36290/??>5549m74`=<21b9k4?:%114?323g9:j7;4;h7f>5<#;;:1985a30d92>=n=m0;6)==0;76?k56n3=07d;l:18'776==<1e?<h58:9j1g<72-99<7;:;o12b??<3`?j6=4+332910=i;8l1m65f5883>!5583?>7c=>f;`8?l3?290/??>5549m74`=k21b9:4?:%114?323g9:j7j4;h73>5<#;;:1985a30d9a>=n;=h1<7*<21800d=i;8l1<65f35;94?"4:9088l5a30d95>=n;=21<7*<21800d=i;8l1>65f35594?"4:9088l5a30d97>=n;=<1<7*<218000=i;8l1<65f35694?"4:908885a30d95>=n;=91<7*<218000=i;8l1>65f35094?"4:908885a30d97>=n;<n1<7*<21801f=i;8l1<65f34`94?"4:9089n5a30d95>=n;<k1<7*<21801f=i;8l1>65f34;94?"4:9089n5a30d97>=n;<21<7*<21801f=i;8l1865f34594?"4:9089n5a30d91>=n;<<1<7*<21801f=i;8l1:65f34794?"4:9089n5a30d93>=n;<>1<7*<218016=i;8l1<65f34094?"4:9089>5a30d95>=n;<;1<7*<218016=i;8l1>65f34294?"4:9089>5a30d97>=n;=l1<7*<218016=i;8l1865f35g94?"4:9089>5a30d91>=n;=n1<7*<218016=i;8l1:65f35a94?"4:9089>5a30d93>=hl10;6)==0;f4?k56n3:07bj9:18'776=l>1e?<h51:9l`1<72-99<7j8;o12b?4<3fn86=4+3329`2=i;8l1?65`d383>!5583n<7c=>f;68?jb6290/??>5d69m74`==21dh=4?:%114?b03g9:j784;nae>5<#;;:1h:5a30d93>=hkl0;6)==0;f4?k56n3207bmk:18'776=l>1e?<h59:9lgf<72-99<7j8;o12b?g<3fii6=4+3329`2=i;8l1n65`c883>!5583n<7c=>f;a8?je?290/??>5d69m74`=l21do:4?:%114?b03g9:j7k4;na5>5<#;;:1h:5a30d9b>=hk<0;6)==0;f4?k56n3;;76al4;29 6472m=0b>?i:038?je4290/??>5d69m74`=9;10cn<50;&065<c?2d8=k4>3:9lg4<72-99<7j8;o12b?7332eh<7>5$203>a1<f:;m6<;4;nfe>5<#;;:1h:5a30d953=<gmo1<7*<218g3>h49o0:;65`de83>!5583n<7c=>f;3;?>ick3:1(><?:e58j67a28307bjm:18'776=l>1e?<h51`98kag=83.8>=4k7:l05c<6j21dh44?:%114?b03g9:j7?l;:mg1?6=,:8;6i94n23e>4b<3fij6=4+3329`2=i;8l1=h54ocd94?"4:90o;6`<1g82b>=h99=1<7*<218243=i;8l1<65`11794?"4:90:<;5a30d95>=h99>1<7*<218243=i;8l1>65`11194?"4:90:<;5a30d97>=hnh0;6)==0;d:?k56n3:07bh7:18'776=n01e?<h51:9lb3<72-99<7h6;o12b?4<3fl>6=4+3329b<=i;8l1?65`f583>!5583l27c=>f;68?j`4290/??>5f89m74`==21dj?4?:%114?`>3g9:j784;nd2>5<#;;:1j45a30d93>=hn90;6)==0;d:?k56n3207bki:18'776=n01e?<h59:9la`<72-99<7h6;o12b?g<3foo6=4+3329b<=i;8l1n65`ec83>!5583l27c=>f;a8?jcf290/??>5f89m74`=l21di44?:%114?`>3g9:j7k4;ng;>5<#;;:1j45a30d9b>=hm>0;6)==0;d:?k56n3;;76aj6;29 6472o30b>?i:038?jc2290/??>5f89m74`=9;10ch:50;&065<a12d8=k4>3:9la6<72-99<7h6;o12b?7332en>7>5$203>c?<f:;m6<;4;n335?6=,:8;6k74n23e>40<3f;;<7>5$203>c?<f:;m6<94;nde>5<#;;:1j45a30d95==<goo1<7*<218e=>h49o0:565`fe83>!5583l27c=>f;3b?>iak3:1(><?:g;8j67a28h07bhm:18'776=n01e?<h51b98kc1=83.8>=4i9:l05c<6l21din4?:%114?`>3g9:j7?j;:mf5?6=,:8;6k74n23e>4`<3f;;o7>5$203>46e3g9:j7>4;n33e?6=,:8;6<>m;o12b?7<3f;;57>5$203>46e3g9:j7<4;n33<?6=,:8;6<>m;o12b?5<3th8?n4?:021>5<7s-9857==1:J021=O;:l0V;<511yf>42=n3;>6o46:b8b>41=9?0:h7?l:0395<<6:3;j6p`j0;28j465291/=l<52:&2e6<53-;:87<4$036>7=#98<1>6*>1681?!760380(<?6:39'54g=:2.:=o4=;%32g?4<,8;o6?5+10g96>"69o097)?=0;08 4462;1/?>=51:&071<63-;987<4$006>7=#9;<1>6*>2681?!750380(<<6:39'57g=:2.:>o4=;%31g?4<,88o6?5+13g96>"6:o097)?<0;08 4562;1/=><52:&276<53-;887<4$016>7=#9:<1>6*>3681?!740380(<=6:39'56g=:2.:?o4=;%30g?4<,89o6?5+12g96>"6;o097)?;0;08 4262;1/=9<52:&206<53-;?87<4$066>7=#9=<1>6*>4681?!730380(<:6:39'51g=:2.:8o4=;%37g?4<,8>o6?5+15g96>"6<o097)?:0;08 4362;1/=8<52:&216<53-;>87<4$076>7=#9<<1>6*>5681?!720380(<;6:39'50g=:2.:9o4=;%36g?4<,8?o6?5+14g96>"6=o097)?90;08 4062;1/=;<52:&226<53-;=87<4$046>7=#9?<1>6*>6681?!710380(<86:39'53g=:2.::o4=;%35g?4<,8<o6?5+17g96>"6>o097)?80;08 4162;1/=:<52:&236<53-;<87<4$056>7=#9><1>6*>7681?!700380(<96:39'52g=:2.:;o4=;%34g?4<,8=o6?5+16g96>"6?o097)?70;08 4>62;1/=5<52:&2<6<53-;387<4$0:6>7=#91<1>6*>8681?!7?0380(<66:39'5=g=:2.:4o4=;%3;g?4<,82o6?5+19g96>"60o097)?60;08 4?62;1/=4<52:&2=6<53-;287<4$0;6>7=#90<1>6*>9681?!7>0380(<76:39'5<g=:2.:5o4=;%3:g?4<,83o6?5+18g96>"61o097)?n0;08 4g62;1/??h51038 4452;1/=l8530`8 6452:;i7)==3;12f>h4:=027c==5;07?!5483<;7)=<1;11a>"6i=0:7)?n5;38 63a2:?n7)=90;16a>h4>8027c=92;07?!75;380e<>j:188m46c2900e<??:188m46a2900e>=9:188m6522900e>=7:188m6502900e;j50;9j2f<722c=j7>5;h4f>5<<a:8i6=44i20b>5<<a:8o6=44i20`>5<<a:8<6=44i205>5<<a:826=44i20;>5<<a?91<75f6583>>o1=3:17d89:188k31=831d:54?::m5=?6=3f<j6=44i9a94?"4:903n6`<1g83?>o?i3:1(><?:9`8j67a2810e5650;&065<?j2d8=k4=;:k;3?6=,:8;65l4n23e>6=<a1<1<7*<218;f>h49o0?76g75;29 64721h0b>?i:498m=2=83.8>=47b:l05c<132c3?7>5$203>=d<f:;m6:54i9094?"4:903n6`<1g8;?>o?93:1(><?:9`8j67a2010e5>50;&065<?j2d8=k4n;:k4b?6=,:8;65l4n23e>g=<a>n1<7*<218;f>h49o0h76g8c;29 64721h0b>?i:e98m2d=83.8>=47b:l05c<b32c<m7>5$203>=d<f:;m6k54i6;94?"4:903n6`<1g824>=n?10;6)==0;:a?k56n3;:76g87;29 64721h0b>?i:008?l11290/??>58c9m74`=9:10e:;50;&065<?j2d8=k4>4:9j31<72-99<76m;o12b?7232c2?7>5$203>=d<f:;m6<84;h;1>5<#;;:14o5a30d952=<a0;1<7*<218;f>h49o0:465f9183>!55832i7c=>f;3:?>o?n3:1(><?:9`8j67a28k07d6j:18'776=0k1e?<h51c98m=b=83.8>=47b:l05c<6k21b444?:%114?>e3g9:j7?k;:k4a?6=,:8;65l4n23e>4c<3`=86=4+3329<g=i;8l1=k54ic;94?"4:90i46`<1g83?>oe?3:1(><?:c:8j67a2810eo850;&065<e02d8=k4=;:ka1?6=,:8;6o64n23e>6=<ahn1<7*<218bg>h49o0;76gnb;29 6472hi0b>?i:098md?=83.8>=4nc:l05c<532cj47>5$203>de<f:;m6>54i`594?"4:90jo6`<1g87?>of>3:1(><?:`a8j67a2<10el;50;&065<fk2d8=k49;:kb0?6=,:8;6lm4n23e>2=<ah91<7*<218bg>h49o0376gn2;29 6472hi0b>?i:898md7=83.8>=4nc:l05c<f32cj<7>5$203>de<f:;m6o54i8g94?"4:90jo6`<1g8`?>o>l3:1(><?:`a8j67a2m10e4m50;&065<fk2d8=k4j;:k:f?6=,:8;6lm4n23e>c=<a0k1<7*<218bg>h49o0:<65f9883>!5583kh7c=>f;32?>o>03:1(><?:`a8j67a28807d78:18'776=ij1e?<h51298m<0=83.8>=4nc:l05c<6<21b584?:%114?gd3g9:j7?:;:ka0?6=,:8;6lm4n23e>40<3`h86=4+3329ef=i;8l1=:54ic094?"4:90jo6`<1g82<>=nj80;6)==0;c`?k56n3;276gm0;29 6472hi0b>?i:0c8?lga290/??>5ab9m74`=9k10elk50;&065<fk2d8=k4>c:9jed<72-99<7ol;o12b?7c32c2j7>5$203>de<f:;m6<k4;h;7>5<#;;:1mn5a30d95c=<ako1<7*<218a`>h49o0;76gmc;29 6472kn0b>?i:098mgd=83.8>=4md:l05c<532cim7>5$203>gb<f:;m6>54i3794?"4:90986`<1g83?>o5;3:1(><?:368j67a2810e?<50;&065<5<2d8=k4=;:k15?6=,:8;6?:4n23e>6=<a;:1<7*<21810>h49o0?76g>f;29 6472;>0b>?i:498m7c=83.8>=4=4:l05c<132c9h7>5$203>72<f:;m6:54i3a94?"4:90986`<1g8;?>o5j3:1(><?:368j67a2010e?o50;&065<5<2d8=k4n;:k1=?6=,:8;6?:4n23e>g=<a;21<7*<21810>h49o0h76g=7;29 6472;>0b>?i:e98m70=83.8>=4=4:l05c<b32c:i7>5$203>72<f:;m6k54i2794?"4:90886`<1g83?>o4;3:1(><?:268j67a2810e><50;&065<4<2d8=k4=;:k05?6=,:8;6>:4n23e>6=<a::1<7*<21800>h49o0?76g<e;29 6472:>0b>?i:498m6b=83.8>=4<4:l05c<132c8o7>5$203>62<f:;m6:54i2`94?"4:90886`<1g8;?>o4i3:1(><?:268j67a2010e>750;&065<4<2d8=k4n;:k0<?6=,:8;6>:4n23e>g=<a:=1<7*<21800>h49o0h76g<6;29 6472:>0b>?i:e98m7`=83.8>=4<4:l05c<b32c?:7>5$203>13<f:;m6=54i5694?"4:90?96`<1g82?>o3;3:1(><?:578j67a2;10e9<50;&065<3=2d8=k4<;:k75?6=,:8;69;4n23e>1=<a=:1<7*<21871>h49o0>76g;f;29 6472=?0b>?i:798m1c=83.8>=4;5:l05c<032c?h7>5$203>13<f:;m6554i5a94?"4:90?96`<1g8:?>o3j3:1(><?:578j67a2h10e9o50;&065<3=2d8=k4m;:k7=?6=,:8;69;4n23e>f=<a=21<7*<21871>h49o0o76g;7;29 6472=?0b>?i:d98m6`=83.8>=4;5:l05c<a32c>:7>5$203>03<f:;m6=54i4694?"4:90>96`<1g82?>o2;3:1(><?:478j67a2;10e8<50;&065<2=2d8=k4<;:k65?6=,:8;68;4n23e>1=<a<l1<7*<21861>h49o0>76g:e;29 6472<?0b>?i:798m0b=83.8>=4:5:l05c<032c>o7>5$203>03<f:;m6554i4`94?"4:90>96`<1g8:?>o2i3:1(><?:478j67a2h10e8750;&065<2=2d8=k4m;:k6<?6=,:8;68;4n23e>f=<a<=1<7*<21861>h49o0o76g:0;29 6472<?0b>?i:d98m62e290/??>535c8j67a2910e>:6:18'776=;=k0b>?i:098m62?290/??>535c8j67a2;10e>:8:18'776=;=k0b>?i:298m621290/??>53578j67a2910e>:;:18'776=;=?0b>?i:098m624290/??>53578j67a2;10e>:=:18'776=;=?0b>?i:298m63c290/??>534a8j67a2910e>;m:18'776=;<i0b>?i:098m63f290/??>534a8j67a2;10e>;6:18'776=;<i0b>?i:298m63?290/??>534a8j67a2=10e>;8:18'776=;<i0b>?i:498m631290/??>534a8j67a2?10e>;::18'776=;<i0b>?i:698m633290/??>53418j67a2910e>;=:18'776=;<90b>?i:098m636290/??>53418j67a2;10e>;?:18'776=;<90b>?i:298m62a290/??>53418j67a2=10e>:j:18'776=;<90b>?i:498m62c290/??>53418j67a2?10e>:l:18'776=;<90b>?i:698ka>=83.8>=4k7:l05c<732eo:7>5$203>a1<f:;m6<54oe694?"4:90o;6`<1g81?>ic;3:1(><?:e58j67a2:10ci<50;&065<c?2d8=k4;;:mg5?6=,:8;6i94n23e>0=<gm:1<7*<218g3>h49o0=76alf;29 6472m=0b>?i:698kfc=83.8>=4k7:l05c<?32ehh7>5$203>a1<f:;m6454oba94?"4:90o;6`<1g8b?>idj3:1(><?:e58j67a2k10cn750;&065<c?2d8=k4l;:m`<?6=,:8;6i94n23e>a=<gj=1<7*<218g3>h49o0n76al6;29 6472m=0b>?i:g98kf3=83.8>=4k7:l05c<6821do94?:%114?b03g9:j7?>;:m`7?6=,:8;6i94n23e>44<3fi96=4+3329`2=i;8l1=>54ob394?"4:90o;6`<1g820>=hk90;6)==0;f4?k56n3;>76akf;29 6472m=0b>?i:048?jbb290/??>5d69m74`=9>10cij50;&065<c?2d8=k4>8:9l`f<72-99<7j8;o12b?7>32eon7>5$203>a1<f:;m6<o4;nfb>5<#;;:1h:5a30d95g=<gm31<7*<218g3>h49o0:o65`d483>!5583n<7c=>f;3g?>idi3:1(><?:e58j67a28o07bli:18'776=l>1e?<h51g98k460290/??>51148j67a2910c<>::18'776=99<0b>?i:098k463290/??>51148j67a2;10c<><:18'776=99<0b>?i:298kcg=83.8>=4i9:l05c<732em47>5$203>c?<f:;m6<54og494?"4:90m56`<1g81?>ia=3:1(><?:g;8j67a2:10ck:50;&065<a12d8=k4;;:me7?6=,:8;6k74n23e>0=<go81<7*<218e=>h49o0=76ai1;29 6472o30b>?i:698kc6=83.8>=4i9:l05c<?32enj7>5$203>c?<f:;m6454odg94?"4:90m56`<1g8b?>ibl3:1(><?:g;8j67a2k10chl50;&065<a12d8=k4l;:mfe?6=,:8;6k74n23e>a=<gl31<7*<218e=>h49o0n76aj8;29 6472o30b>?i:g98k`1=83.8>=4i9:l05c<6821di;4?:%114?`>3g9:j7?>;:mf1?6=,:8;6k74n23e>44<3fo?6=4+3329b<=i;8l1=>54od194?"4:90m56`<1g820>=hm;0;6)==0;d:?k56n3;>76a>0083>!5583l27c=>f;35?>i6890;6)==0;d:?k56n3;<76aif;29 6472o30b>?i:0:8?j`b290/??>5f89m74`=9010ckj50;&065<a12d8=k4>a:9lbf<72-99<7h6;o12b?7e32emn7>5$203>c?<f:;m6<m4;nd4>5<#;;:1j45a30d95a=<gli1<7*<218e=>h49o0:i65`e083>!5583l27c=>f;3e?>i68j0;6)==0;33f>h49o0;76a>0`83>!5583;;n6`<1g82?>i6800;6)==0;33f>h49o0976a>0983>!5583;;n6`<1g80?>{e;:h1<7??2;294~"4;008><5G3768L65a3S<96<>te;37>c<6=3h157m5a;34>40=9m0:o7?>:0;957<6i3wei=4?;o336?6<,8k96?5+1`196>"69=097)?>5;08 4712;1/=<952:&25=<53-;:57<4$03b>7=#98h1>6*>1b81?!76l380(<?j:39'54`=:2.:>=4=;%315?4<,:986<5+32695>"6:=097)?=5;08 4412;1/=?952:&26=<53-;957<4$00b>7=#9;h1>6*>2b81?!75l380(<<j:39'57`=:2.:?=4=;%305?4<,8996?5+12196>"6;=097)?<5;08 4512;1/=>952:&27=<53-;857<4$01b>7=#9:h1>6*>3b81?!74l380(<=j:39'56`=:2.:8=4=;%375?4<,8>96?5+15196>"6<=097)?;5;08 4212;1/=9952:&20=<53-;?57<4$06b>7=#9=h1>6*>4b81?!73l380(<:j:39'51`=:2.:9=4=;%365?4<,8?96?5+14196>"6==097)?:5;08 4312;1/=8952:&21=<53-;>57<4$07b>7=#9<h1>6*>5b81?!72l380(<;j:39'50`=:2.::=4=;%355?4<,8<96?5+17196>"6>=097)?95;08 4012;1/=;952:&22=<53-;=57<4$04b>7=#9?h1>6*>6b81?!71l380(<8j:39'53`=:2.:;=4=;%345?4<,8=96?5+16196>"6?=097)?85;08 4112;1/=:952:&23=<53-;<57<4$05b>7=#9>h1>6*>7b81?!70l380(<9j:39'52`=:2.:4=4=;%3;5?4<,8296?5+19196>"60=097)?75;08 4>12;1/=5952:&2<=<53-;357<4$0:b>7=#91h1>6*>8b81?!7?l380(<6j:39'5=`=:2.:5=4=;%3:5?4<,8396?5+18196>"61=097)?65;08 4?12;1/=4952:&2==<53-;257<4$0;b>7=#90h1>6*>9b81?!7>l380(<7j:39'5<`=:2.:m=4=;%3b5?4<,:8m6<?>;%316?4<,8k=6>?m;%116?56j2.8>>4<1c9m772=12d8>84=4:&075<182.8?<4<2d9'5d2=92.:m84>;%16b?52m2.8:=4<5d9m737=12d8:?4=4:&266<53`;;i7>5;h33`?6=3`;:<7>5;h33b?6=3`98:7>5;h101?6=3`9847>5;h103?6=3`<o6=44i7a94?=n>o0;66g9e;29?l55j3:17d==a;29?l55l3:17d==c;29?l55?3:17d==6;29?l5513:17d==8;29?l042900e;:50;9j20<722c=:7>5;n44>5<<g?21<75`6883>>i1i3:17d6l:18'776=0k1e?<h50:9j<d<72-99<76m;o12b?7<3`236=4+3329<g=i;8l1>65f8683>!55832i7c=>f;18?l>1290/??>58c9m74`=<21b484?:%114?>e3g9:j7;4;h:7>5<#;;:14o5a30d92>=n0:0;6)==0;:a?k56n3=07d6=:18'776=0k1e?<h58:9j<4<72-99<76m;o12b??<3`2;6=4+3329<g=i;8l1m65f7g83>!55832i7c=>f;`8?l1c290/??>58c9m74`=k21b;n4?:%114?>e3g9:j7j4;h5a>5<#;;:14o5a30d9a>=n?h0;6)==0;:a?k56n3l07d96:18'776=0k1e?<h51198m2>=83.8>=47b:l05c<6921b;:4?:%114?>e3g9:j7?=;:k42?6=,:8;65l4n23e>45<3`=>6=4+3329<g=i;8l1=954i6694?"4:903n6`<1g821>=n1:0;6)==0;:a?k56n3;=76g62;29 64721h0b>?i:058?l?6290/??>58c9m74`=9110e4>50;&065<?j2d8=k4>9:9j<c<72-99<76m;o12b?7f32c3i7>5$203>=d<f:;m6<l4;h:g>5<#;;:14o5a30d95f=<a131<7*<218;f>h49o0:h65f7d83>!55832i7c=>f;3f?>o0;3:1(><?:9`8j67a28l07dl6:18'776=j11e?<h50:9jf2<72-99<7l7;o12b?7<3`h=6=4+3329f==i;8l1>65fb483>!5583h37c=>f;18?lgc290/??>5ab9m74`=821bmo4?:%114?gd3g9:j7?4;hc:>5<#;;:1mn5a30d96>=ni10;6)==0;c`?k56n3907do8:18'776=ij1e?<h54:9je3<72-99<7ol;o12b?3<3`k>6=4+3329ef=i;8l1:65fa583>!5583kh7c=>f;58?lg4290/??>5ab9m74`=021bm?4?:%114?gd3g9:j774;hc2>5<#;;:1mn5a30d9e>=ni90;6)==0;c`?k56n3h07d7j:18'776=ij1e?<h5c:9j=a<72-99<7ol;o12b?b<3`3h6=4+3329ef=i;8l1i65f9c83>!5583kh7c=>f;d8?l?f290/??>5ab9m74`=9910e4750;&065<fk2d8=k4>1:9j==<72-99<7ol;o12b?7532c2;7>5$203>de<f:;m6<=4;h;5>5<#;;:1mn5a30d951=<a0?1<7*<218bg>h49o0:965fb583>!5583kh7c=>f;35?>oe;3:1(><?:`a8j67a28=07dl=:18'776=ij1e?<h51998mg7=83.8>=4nc:l05c<6121bn=4?:%114?gd3g9:j7?n;:kbb?6=,:8;6lm4n23e>4d<3`kn6=4+3329ef=i;8l1=n54i`c94?"4:90jo6`<1g82`>=n1o0;6)==0;c`?k56n3;n76g64;29 6472hi0b>?i:0d8?ldb290/??>5be9m74`=821bnn4?:%114?dc3g9:j7?4;h`a>5<#;;:1ni5a30d96>=njh0;6)==0;`g?k56n3907d<::18'776=:=1e?<h50:9j66<72-99<7<;;o12b?7<3`896=4+332961=i;8l1>65f2083>!55838?7c=>f;18?l47290/??>5259m74`=<21b=k4?:%114?433g9:j7;4;h0f>5<#;;:1>95a30d92>=n:m0;6)==0;07?k56n3=07d<l:18'776=:=1e?<h58:9j6g<72-99<7<;;o12b??<3`8j6=4+332961=i;8l1m65f2883>!55838?7c=>f;`8?l4?290/??>5259m74`=k21b>:4?:%114?433g9:j7j4;h05>5<#;;:1>95a30d9a>=n9l0;6)==0;07?k56n3l07d=::18'776=;=1e?<h50:9j76<72-99<7=;;o12b?7<3`996=4+332971=i;8l1>65f3083>!55839?7c=>f;18?l57290/??>5359m74`=<21b?h4?:%114?533g9:j7;4;h1g>5<#;;:1?95a30d92>=n;j0;6)==0;17?k56n3=07d=m:18'776=;=1e?<h58:9j7d<72-99<7=;;o12b??<3`926=4+332971=i;8l1m65f3983>!55839?7c=>f;`8?l50290/??>5359m74`=k21b?;4?:%114?533g9:j7j4;h0e>5<#;;:1?95a30d9a>=n<?0;6)==0;66?k56n3:07d:;:18'776=<<1e?<h51:9j06<72-99<7::;o12b?4<3`>96=4+332900=i;8l1?65f4083>!5583>>7c=>f;68?l27290/??>5449m74`==21b8k4?:%114?223g9:j784;h6f>5<#;;:1885a30d93>=n<m0;6)==0;66?k56n3207d:l:18'776=<<1e?<h59:9j0g<72-99<7::;o12b?g<3`>j6=4+332900=i;8l1n65f4883>!5583>>7c=>f;a8?l2?290/??>5449m74`=l21b8:4?:%114?223g9:j7k4;h1e>5<#;;:1885a30d9b>=n=?0;6)==0;76?k56n3:07d;;:18'776==<1e?<h51:9j16<72-99<7;:;o12b?4<3`?96=4+332910=i;8l1?65f5083>!5583?>7c=>f;68?l3a290/??>5549m74`==21b9h4?:%114?323g9:j784;h7g>5<#;;:1985a30d93>=n=j0;6)==0;76?k56n3207d;m:18'776==<1e?<h59:9j1d<72-99<7;:;o12b?g<3`?26=4+332910=i;8l1n65f5983>!5583?>7c=>f;a8?l30290/??>5549m74`=l21b9=4?:%114?323g9:j7k4;h17f?6=,:8;6>:n;o12b?6<3`9?57>5$203>62f3g9:j7?4;h17<?6=,:8;6>:n;o12b?4<3`9?;7>5$203>62f3g9:j7=4;h172?6=,:8;6>::;o12b?6<3`9?87>5$203>6223g9:j7?4;h177?6=,:8;6>::;o12b?4<3`9?>7>5$203>6223g9:j7=4;h16`?6=,:8;6>;l;o12b?6<3`9>n7>5$203>63d3g9:j7?4;h16e?6=,:8;6>;l;o12b?4<3`9>57>5$203>63d3g9:j7=4;h16<?6=,:8;6>;l;o12b?2<3`9>;7>5$203>63d3g9:j7;4;h162?6=,:8;6>;l;o12b?0<3`9>97>5$203>63d3g9:j794;h160?6=,:8;6>;<;o12b?6<3`9>>7>5$203>6343g9:j7?4;h165?6=,:8;6>;<;o12b?4<3`9><7>5$203>6343g9:j7=4;h17b?6=,:8;6>;<;o12b?2<3`9?i7>5$203>6343g9:j7;4;h17`?6=,:8;6>;<;o12b?0<3`9?o7>5$203>6343g9:j794;nf;>5<#;;:1h:5a30d94>=hl?0;6)==0;f4?k56n3;07bj;:18'776=l>1e?<h52:9l`6<72-99<7j8;o12b?5<3fn96=4+3329`2=i;8l1865`d083>!5583n<7c=>f;78?jb7290/??>5d69m74`=>21dok4?:%114?b03g9:j794;naf>5<#;;:1h:5a30d9<>=hkm0;6)==0;f4?k56n3307bml:18'776=l>1e?<h5a:9lgg<72-99<7j8;o12b?d<3fi26=4+3329`2=i;8l1o65`c983>!5583n<7c=>f;f8?je0290/??>5d69m74`=m21do;4?:%114?b03g9:j7h4;na6>5<#;;:1h:5a30d955=<gj>1<7*<218g3>h49o0:=65`c283>!5583n<7c=>f;31?>id:3:1(><?:e58j67a28907bm>:18'776=l>1e?<h51598kf6=83.8>=4k7:l05c<6=21dhk4?:%114?b03g9:j7?9;:mga?6=,:8;6i94n23e>41<3fno6=4+3329`2=i;8l1=554oea94?"4:90o;6`<1g82=>=hlk0;6)==0;f4?k56n3;j76aka;29 6472m=0b>?i:0`8?jb>290/??>5d69m74`=9j10ci;50;&065<c?2d8=k4>d:9lgd<72-99<7j8;o12b?7b32eij7>5$203>a1<f:;m6<h4;n333?6=,:8;6<>9;o12b?6<3f;;97>5$203>4613g9:j7?4;n330?6=,:8;6<>9;o12b?4<3f;;?7>5$203>4613g9:j7=4;ndb>5<#;;:1j45a30d94>=hn10;6)==0;d:?k56n3;07bh9:18'776=n01e?<h52:9lb0<72-99<7h6;o12b?5<3fl?6=4+3329b<=i;8l1865`f283>!5583l27c=>f;78?j`5290/??>5f89m74`=>21dj<4?:%114?`>3g9:j794;nd3>5<#;;:1j45a30d9<>=hmo0;6)==0;d:?k56n3307bkj:18'776=n01e?<h5a:9laa<72-99<7h6;o12b?d<3foi6=4+3329b<=i;8l1o65`e`83>!5583l27c=>f;f8?jc>290/??>5f89m74`=m21di54?:%114?`>3g9:j7h4;ng4>5<#;;:1j45a30d955=<gl<1<7*<218e=>h49o0:=65`e483>!5583l27c=>f;31?>ib<3:1(><?:g;8j67a28907bk<:18'776=n01e?<h51598k`4=83.8>=4i9:l05c<6=21d==?50;&065<a12d8=k4>6:9l556=83.8>=4i9:l05c<6?21djk4?:%114?`>3g9:j7?7;:mea?6=,:8;6k74n23e>4?<3flo6=4+3329b<=i;8l1=l54oga94?"4:90m56`<1g82f>=hnk0;6)==0;d:?k56n3;h76ai7;29 6472o30b>?i:0f8?jcd290/??>5f89m74`=9l10ch?50;&065<a12d8=k4>f:9l55e=83.8>=4>0c9m74`=821d==o50;&065<68k1e?<h51:9l55?=83.8>=4>0c9m74`=:21d==650;&065<68k1e?<h53:9~f65f290:<?4?:1y'76?=;;;0D>8;;I10b>\1:3;;wh4>4;d950<e200h6l4>7;35>4b=9j0:=7?6:0095d<zfl:1<6`>0383?!7f:380(<o<:39'542=:2.:=84=;%322?4<,8;<6?5+10:96>"690097)?>a;08 47e2;1/=<m52:&25a<53-;:i7<4$03e>7=#9;:1>6*>2081?!54;3;0(>=;:09'572=:2.:>84=;%312?4<,88<6?5+13:96>"6:0097)?=a;08 44e2;1/=?m52:&26a<53-;9i7<4$00e>7=#9::1>6*>3081?!74:380(<=<:39'562=:2.:?84=;%302?4<,89<6?5+12:96>"6;0097)?<a;08 45e2;1/=>m52:&27a<53-;8i7<4$01e>7=#9=:1>6*>4081?!73:380(<:<:39'512=:2.:884=;%372?4<,8><6?5+15:96>"6<0097)?;a;08 42e2;1/=9m52:&20a<53-;?i7<4$06e>7=#9<:1>6*>5081?!72:380(<;<:39'502=:2.:984=;%362?4<,8?<6?5+14:96>"6=0097)?:a;08 43e2;1/=8m52:&21a<53-;>i7<4$07e>7=#9?:1>6*>6081?!71:380(<8<:39'532=:2.::84=;%352?4<,8<<6?5+17:96>"6>0097)?9a;08 40e2;1/=;m52:&22a<53-;=i7<4$04e>7=#9>:1>6*>7081?!70:380(<9<:39'522=:2.:;84=;%342?4<,8=<6?5+16:96>"6?0097)?8a;08 41e2;1/=:m52:&23a<53-;<i7<4$05e>7=#91:1>6*>8081?!7?:380(<6<:39'5=2=:2.:484=;%3;2?4<,82<6?5+19:96>"600097)?7a;08 4>e2;1/=5m52:&2<a<53-;3i7<4$0:e>7=#90:1>6*>9081?!7>:380(<7<:39'5<2=:2.:584=;%3:2?4<,83<6?5+18:96>"610097)?6a;08 4?e2;1/=4m52:&2=a<53-;2i7<4$0;e>7=#9h:1>6*>a081?!55n3;:=6*>2381?!7f>39:n6*<23805g=#;;91?<l4n207><=i;;?1>95+322925=#;:;1??k4$0c7>4=#9h?1=6*<5g801`=#;?:1?8k4n242><=i;?81>95+13196>o68l0;66g>0e83>>o6990;66g>0g83>>o4;?0;66g<3483>>o4;10;66g<3683>>o1l3:17d8l:188m3`=831b:h4?::k06g<722c8>l4?::k06a<722c8>n4?::k062<722c8>;4?::k06<<722c8>54?::k57?6=3`<?6=44i7794?=n>?0;66a97;29?j0?2900c;750;9l2d<722c3o7>5$203>=d<f:;m6=54i9c94?"4:903n6`<1g82?>o?03:1(><?:9`8j67a2;10e5950;&065<?j2d8=k4<;:k;2?6=,:8;65l4n23e>1=<a1?1<7*<218;f>h49o0>76g74;29 64721h0b>?i:798m=5=83.8>=47b:l05c<032c3>7>5$203>=d<f:;m6554i9394?"4:903n6`<1g8:?>o?83:1(><?:9`8j67a2h10e:h50;&065<?j2d8=k4m;:k4`?6=,:8;65l4n23e>f=<a>i1<7*<218;f>h49o0o76g8b;29 64721h0b>?i:d98m2g=83.8>=47b:l05c<a32c<57>5$203>=d<f:;m6<>4;h5;>5<#;;:14o5a30d954=<a>=1<7*<218;f>h49o0:>65f7783>!55832i7c=>f;30?>o0=3:1(><?:9`8j67a28>07d9;:18'776=0k1e?<h51498m<5=83.8>=47b:l05c<6>21b5?4?:%114?>e3g9:j7?8;:k:5?6=,:8;65l4n23e>4><3`3;6=4+3329<g=i;8l1=454i9d94?"4:903n6`<1g82e>=n0l0;6)==0;:a?k56n3;i76g7d;29 64721h0b>?i:0a8?l>>290/??>58c9m74`=9m10e:k50;&065<?j2d8=k4>e:9j36<72-99<76m;o12b?7a32ci57>5$203>g><f:;m6=54ic594?"4:90i46`<1g82?>oe>3:1(><?:c:8j67a2;10eo;50;&065<e02d8=k4<;:kb`?6=,:8;6lm4n23e>5=<ahh1<7*<218bg>h49o0:76gn9;29 6472hi0b>?i:398md>=83.8>=4nc:l05c<432cj;7>5$203>de<f:;m6954i`494?"4:90jo6`<1g86?>of=3:1(><?:`a8j67a2?10el:50;&065<fk2d8=k48;:kb7?6=,:8;6lm4n23e>==<ah81<7*<218bg>h49o0276gn1;29 6472hi0b>?i:`98md6=83.8>=4nc:l05c<e32c2i7>5$203>de<f:;m6n54i8f94?"4:90jo6`<1g8g?>o>k3:1(><?:`a8j67a2l10e4l50;&065<fk2d8=k4i;:k:e?6=,:8;6lm4n23e>46<3`326=4+3329ef=i;8l1=<54i8:94?"4:90jo6`<1g826>=n1>0;6)==0;c`?k56n3;876g66;29 6472hi0b>?i:068?l?2290/??>5ab9m74`=9<10eo:50;&065<fk2d8=k4>6:9jf6<72-99<7ol;o12b?7032ci>7>5$203>de<f:;m6<64;h`2>5<#;;:1mn5a30d95<=<ak:1<7*<218bg>h49o0:m65fag83>!5583kh7c=>f;3a?>ofm3:1(><?:`a8j67a28i07don:18'776=ij1e?<h51e98m<`=83.8>=4nc:l05c<6m21b594?:%114?gd3g9:j7?i;:kaa?6=,:8;6oj4n23e>5=<aki1<7*<218a`>h49o0:76gmb;29 6472kn0b>?i:398mgg=83.8>=4md:l05c<432c997>5$203>72<f:;m6=54i3194?"4:90986`<1g82?>o5:3:1(><?:368j67a2;10e??50;&065<5<2d8=k4<;:k14?6=,:8;6?:4n23e>1=<a8l1<7*<21810>h49o0>76g=e;29 6472;>0b>?i:798m7b=83.8>=4=4:l05c<032c9o7>5$203>72<f:;m6554i3`94?"4:90986`<1g8:?>o5i3:1(><?:368j67a2h10e?750;&065<5<2d8=k4m;:k1<?6=,:8;6?:4n23e>f=<a;=1<7*<21810>h49o0o76g=6;29 6472;>0b>?i:d98m4c=83.8>=4=4:l05c<a32c897>5$203>62<f:;m6=54i2194?"4:90886`<1g82?>o4:3:1(><?:268j67a2;10e>?50;&065<4<2d8=k4<;:k04?6=,:8;6>:4n23e>1=<a:o1<7*<21800>h49o0>76g<d;29 6472:>0b>?i:798m6e=83.8>=4<4:l05c<032c8n7>5$203>62<f:;m6554i2c94?"4:90886`<1g8:?>o413:1(><?:268j67a2h10e>650;&065<4<2d8=k4m;:k03?6=,:8;6>:4n23e>f=<a:<1<7*<21800>h49o0o76g=f;29 6472:>0b>?i:d98m10=83.8>=4;5:l05c<732c?87>5$203>13<f:;m6<54i5194?"4:90?96`<1g81?>o3:3:1(><?:578j67a2:10e9?50;&065<3=2d8=k4;;:k74?6=,:8;69;4n23e>0=<a=l1<7*<21871>h49o0=76g;e;29 6472=?0b>?i:698m1b=83.8>=4;5:l05c<?32c?o7>5$203>13<f:;m6454i5`94?"4:90?96`<1g8b?>o3i3:1(><?:578j67a2k10e9750;&065<3=2d8=k4l;:k7<?6=,:8;69;4n23e>a=<a==1<7*<21871>h49o0n76g<f;29 6472=?0b>?i:g98m00=83.8>=4:5:l05c<732c>87>5$203>03<f:;m6<54i4194?"4:90>96`<1g81?>o2:3:1(><?:478j67a2:10e8?50;&065<2=2d8=k4;;:k6b?6=,:8;68;4n23e>0=<a<o1<7*<21861>h49o0=76g:d;29 6472<?0b>?i:698m0e=83.8>=4:5:l05c<?32c>n7>5$203>03<f:;m6454i4c94?"4:90>96`<1g8b?>o213:1(><?:478j67a2k10e8650;&065<2=2d8=k4l;:k63?6=,:8;68;4n23e>a=<a<:1<7*<21861>h49o0n76g<4c83>!55839?m6`<1g83?>o4<00;6)==0;17e>h49o0:76g<4983>!55839?m6`<1g81?>o4<>0;6)==0;17e>h49o0876g<4783>!55839?96`<1g83?>o4<=0;6)==0;171>h49o0:76g<4283>!55839?96`<1g81?>o4<;0;6)==0;171>h49o0876g<5e83>!55839>o6`<1g83?>o4=k0;6)==0;16g>h49o0:76g<5`83>!55839>o6`<1g81?>o4=00;6)==0;16g>h49o0876g<5983>!55839>o6`<1g87?>o4=>0;6)==0;16g>h49o0>76g<5783>!55839>o6`<1g85?>o4=<0;6)==0;16g>h49o0<76g<5583>!55839>?6`<1g83?>o4=;0;6)==0;167>h49o0:76g<5083>!55839>?6`<1g81?>o4=90;6)==0;167>h49o0876g<4g83>!55839>?6`<1g87?>o4<l0;6)==0;167>h49o0>76g<4e83>!55839>?6`<1g85?>o4<j0;6)==0;167>h49o0<76ak8;29 6472m=0b>?i:198ka0=83.8>=4k7:l05c<632eo87>5$203>a1<f:;m6?54oe194?"4:90o;6`<1g80?>ic:3:1(><?:e58j67a2=10ci?50;&065<c?2d8=k4:;:mg4?6=,:8;6i94n23e>3=<gjl1<7*<218g3>h49o0<76ale;29 6472m=0b>?i:998kfb=83.8>=4k7:l05c<>32eho7>5$203>a1<f:;m6l54ob`94?"4:90o;6`<1g8a?>id13:1(><?:e58j67a2j10cn650;&065<c?2d8=k4k;:m`3?6=,:8;6i94n23e>`=<gj<1<7*<218g3>h49o0m76al5;29 6472m=0b>?i:028?je3290/??>5d69m74`=9810cn=50;&065<c?2d8=k4>2:9lg7<72-99<7j8;o12b?7432eh=7>5$203>a1<f:;m6<:4;na3>5<#;;:1h:5a30d950=<gml1<7*<218g3>h49o0::65`dd83>!5583n<7c=>f;34?>icl3:1(><?:e58j67a28207bjl:18'776=l>1e?<h51898kad=83.8>=4k7:l05c<6i21dhl4?:%114?b03g9:j7?m;:mg=?6=,:8;6i94n23e>4e<3fn>6=4+3329`2=i;8l1=i54obc94?"4:90o;6`<1g82a>=hjo0;6)==0;f4?k56n3;m76a>0683>!5583;;:6`<1g83?>i68<0;6)==0;332>h49o0:76a>0583>!5583;;:6`<1g81?>i68:0;6)==0;332>h49o0876aia;29 6472o30b>?i:198kc>=83.8>=4i9:l05c<632em:7>5$203>c?<f:;m6?54og794?"4:90m56`<1g80?>ia<3:1(><?:g;8j67a2=10ck=50;&065<a12d8=k4:;:me6?6=,:8;6k74n23e>3=<go;1<7*<218e=>h49o0<76ai0;29 6472o30b>?i:998k``=83.8>=4i9:l05c<>32eni7>5$203>c?<f:;m6l54odf94?"4:90m56`<1g8a?>ibj3:1(><?:g;8j67a2j10cho50;&065<a12d8=k4k;:mf=?6=,:8;6k74n23e>`=<gl21<7*<218e=>h49o0m76aj7;29 6472o30b>?i:028?jc1290/??>5f89m74`=9810ch;50;&065<a12d8=k4>2:9la1<72-99<7h6;o12b?7432en?7>5$203>c?<f:;m6<:4;ng1>5<#;;:1j45a30d950=<g8::6=4+3329b<=i;8l1=;54o023>5<#;;:1j45a30d952=<gol1<7*<218e=>h49o0:465`fd83>!5583l27c=>f;3:?>ial3:1(><?:g;8j67a28k07bhl:18'776=n01e?<h51c98kcd=83.8>=4i9:l05c<6k21dj:4?:%114?`>3g9:j7?k;:mfg?6=,:8;6k74n23e>4c<3fo:6=4+3329b<=i;8l1=k54o02`>5<#;;:1==l4n23e>5=<g8:j6=4+332955d<f:;m6<54o02:>5<#;;:1==l4n23e>7=<g8:36=4+332955d<f:;m6>54}r401?6=9;?pR>7l;_40f>X1;=1U:>=4^711?[0492T=?=5Q63d8Z34b3W<9h6P92b9]27d<5:<>6<?=;<10`?54>278?i4<349>76b=;:201>=k:214?854l399;63<3e8063=:;:n1??74=21g>64?3498h78<;<10`?033498h78:;<10`?013498h76l;<10`?>f3498h767;<10`?>03498h769;<10`?>23498h76;;<10`?>43498h76=;<10`?>63498h76?;<10`?1a3498h79k;<10`?1d3498h79m;<10`?1f3498h796;<10`?1?3498h798;<10`?113498h79:;<10`?133498h77<;<10`??53498h7l6;<10`?d03498h7l9;<10`?d23498h7lj;<10`?dd3498h7lm;<10`?df3498h7<:;<10`?403498h7<9;<10`?7b3498h7=8;<10`?513498h7<i;<10`?213498h7:n;<10`?2>3498h7:7;<10`?203498h7=i;<10`?3f3498h7;6;<10`?3?3498h7;8;<10`?373498h7=:d:?07a<4=k16?>j534c8965c2:?270=<d;160>;4;m089?5232f9707<5:9o6>;?;<10g?54>278?n4<349>76e=;:201>=l:214?854k399;63<3b8063=:;:i1??74=21`>64?3498o78<;<10g?033498o78:;<10g?013498o76l;<10g?>f3498o767;<10g?>03498o769;<10g?>23498o76;;<10g?>43498o76=;<10g?>63498o76?;<10g?1a3498o79k;<10g?1d3498o79m;<10g?1f3498o796;<10g?1?3498o798;<10g?113498o79:;<10g?133498o77<;<10g??53498o7l6;<10g?d03498o7l9;<10g?d23498o7lj;<10g?dd3498o7lm;<10g?df3498o7<:;<10g?403498o7<9;<10g?7b3498o7=8;<10g?513498o7<i;<10g?213498o7:n;<10g?2>3498o7:7;<10g?203498o7=i;<10g?3f3498o7;6;<10g?3?3498o7;8;<10g?373498o7=:d:?07f<4=k16?>m534c8965d2:?270=<c;160>;4;j089?5232a9707<5:9h6>;?;<10f?54>278?o4<349>76d=;:201>=m:214?854j399;63<3c8063=:;:h1??74=21a>64?3498n78<;<10f?033498n78:;<10f?013498n76l;<10f?>f3498n767;<10f?>03498n769;<10f?>23498n76;;<10f?>43498n76=;<10f?>63498n76?;<10f?1a3498n79k;<10f?1d3498n79m;<10f?1f3498n796;<10f?1?3498n798;<10f?113498n79:;<10f?133498n77<;<10f??53498n7l6;<10f?d03498n7l9;<10f?d23498n7lj;<10f?dd3498n7lm;<10f?df3498n7<:;<10f?403498n7<9;<10f?7b3498n7=8;<10f?513498n7<i;<10f?213498n7:n;<10f?2>3498n7:7;<10f?203498n7=i;<10f?3f3498n7;6;<10f?3?3498n7;8;<10f?373498n7=:d:?07g<4=k16?>l534c8965e2:?270=<b;160>;4;k089?5232`9707<5:9i6>;?;<10e?54>278?l4<349>76g=;:201>=n:214?854i399;63<3`8063=:;:k1??74=21b>64?3498m78<;<10e?033498m78:;<10e?013498m76l;<10e?>f3498m767;<10e?>03498m769;<10e?>23498m76;;<10e?>43498m76=;<10e?>63498m76?;<10e?1a3498m79k;<10e?1d3498m79m;<10e?1f3498m796;<10e?1?3498m798;<10e?113498m79:;<10e?133498m77<;<10e??53498m7l6;<10e?d03498m7l9;<10e?d23498m7lj;<10e?dd3498m7lm;<10e?df3498m7<:;<10e?403498m7<9;<10e?7b3498m7=8;<10e?513498m7<i;<10e?213498m7:n;<10e?2>3498m7:7;<10e?203498m7=i;<10e?3f3498m7;6;<10e?3?3498m7;8;<10e?373498m7=:d:?07d<4=k16?>o534c8965f2:?270=<a;160>;4;h089?5232c9707<5:9j6>;?;|q567<720qU:?<4=21g>46b3498h7??d:?07f<68l16?>m511f8965e28:n70=<b;33`>;4;h0:<h5232c955b<uz<9?7>59z\566=:;:n1=<>4=21g>46a3498o7?>0:?07f<68o16?>l51028965e28:m70=<a;324>;4;h0:<k5rs2;b>5<69rT85l5232f92a=:;:n1:n5232f977d<5:9o6><n;<10g?0c3498o78l;<10g?55j278?n4<2`9>76d=>m16?>l56b9>76d=;;h01>=m:20b?854i3<o70=<a;4`?854i399n63<3`806d=z{:3i6=4>1z\0=g=:;:n1:k5232f92`=:;:n1??j4=21g>64d3498o78i;<10g?0b3498o7==d:?07f<4:j16?>l56g9>76d=>l16?>l533f8965e2:8h70=<a;4e?854i3<n70=<a;11`>;4;h08>n5rs43;>5<5sW>m463<3e8g`>{t=8<1<7<t^5d4?854l3nh7p}:1583>7}Y<o?01>=k:e`8yv36;3:1>vP;f59>76b=lh1v8?=:181[2a;278?i4k9:p147=838pR9h=;<10`?b23ty>==4?:3y]0c7<5:9o6no4}r73b?6=:rT?j=5232f9fc=z{<:n6=4={_6fb>;4;j0oh6s|51f94?4|V=on70=<c;f`?xu28j0;6?uQ4df8965d2mh0q~;?b;296~X3mj16?>m5d`9~w06>2909wS:ja:?07f<c12wx9=650;0xZ1c>3498o7j:;|q642<72;qU8h64=21`>fg<uz?;:7>52z\7a2=:;:i1nk5rs426>5<5sW>n:63<3c8g`>{t=9>1<7<t^5g6?854j3nh7p}:0283>7}Y<l>01>=m:e`8yv37:3:1>vP;e29>76d=lh1v8>>:181[2b:278?o4k9:p156=838pR9k>;<10f?b23ty>=k4?:3y]0cc<5:9i6no4}r72a?6=:rT?ji5232`9fc=z{<;o6=4={_6eg>;4;h0oh6s|50a94?4|V=li70=<a;f`?xu29k0;6?uQ4gc8965f2mh0q~;>a;296~X3n016?>o5d`9~w07>2909wS:i6:?07d<c12wx9<;50;0xZ1ce3498m7j:;|q64d<72;qU8h>4=21b>fg<uz>mj7>52z\7`c=:;:k1nk5rs4`e>5<5sW??<63<3e8ee>{t=kn1<7<t^41e?854l3l37p}:bb83>7}Y=:o01>=k:g48yv3ej3:1>vP:3e9>76b=n<1v8ln:181[34k278?i4i4:p1g?=838pR8=m;<10`?`43ty>n54?:3y]16g<5:9o6k<4}r7a3?6=:rT>?45232f9b4=z{<h>6=4={_703>;4;j0mm6s|5c694?4|V<9=70=<c;d;?xu2j:0;6?uQ5278965d2o<0q~;m2;296~X2;=16?>m5f49~w0d62909wS;<3:?07f<a<2wx9o>50;0xZ0553498o7h<;|q6ec<72;qU9>?4=21`>c4<uz?ji7>52z\675=:;:i1j<5rs4cg>5<5sW?9j63<3c8ee>{t=hi1<7<t^40f?854j3l37p}:a`83>7}Y=;i01>=m:g48yv3f13:1>vP:2c9>76d=n<1v8o7:181[35i278?o4i4:p1d1=838pR8<6;<10f?`43ty>m;4?:3y]17><5:9i6k<4}r7b1?6=:rT>>:5232`9b4=z{<k?6=4={_712>;4;h0mm6s|5`194?4|V<8>70=<a;d;?xu2i;0;6?uQ5368965f2o<0q~;n1;296~X2::16?>o5f49~w37a2909wS;6f:?07d<a<2wx:<k50;0xZ0?b3498m7h<;|q55a<72;qU94j4=21b>c4<uz<:o7>52z\6=f=:;:k1j<5rs73a>5<5sW?2n63<3e8e4>{t>8k1<7<t^4;b?854l3om7p}91883>7}Y=0301>=k:dg8yv0603:1>vP:999>76b=mm1v;?8:181[3>?278?i4jb:p240=838pR879;<10`?cf3ty==94?:3y]1<2<5:9o6h74}r427?6=:rT>5>5232f9a==z{?;96=4={_7:6>;4;j0m<6s|60394?4|V<3:70=<c;ge?xu1990;6?uQ5828965d2lo0q~8?f;296~X20o16?>m5ee9~w36b2909wS;7e:?07f<bj2wx:=j50;0xZ0>c3498o7kn;|q54f<72;qU95m4=21`>`?<uz<;n7>52z\6<g=:;:i1i55rs72:>5<5sW?3563<3c8e4>{t>921<7<t^4:;?854j3om7p}90683>7}Y=1=01>=m:dg8yv07>3:1>vP:879>76d=mm1v;>::181[3?=278?o4jb:p252=838pR86;;<10f?cf3ty=<>4?:3y]1=5<5:9i6h74}r436?6=:rT>4?5232`9a==z{?::6=4={_7;5>;4;h0m<6s|61294?4|V<2;70=<a;ge?xu2nl0;6?uQ56g8965f2lo0q~;id;296~X2?m16?>o5ee9~w0`d2909wS;8c:?07d<bj2wx9kl50;0xZ01e3498m7kn;|q6bd<72;qU9:o4=21b>`?<uz?m57>52z\63<=:;:k1i55rs4d;>5<5sW?<463<3e8f3>{t=o=1<7<t^454?854l3o=7p}:f783>7}Y=><01>=k:d78yv3a=3:1>vP:749>76b=m=1v8h<:181[30;278?i4j3:p1c4=838pR89=;<10`?c53ty>j<4?:3y]127<5:9o6<>>;|q6b5<72;qU9:>4=21g>4673ty>ik4?:3y]13`<5:9h6h94}r7fa?6=:rT>:h5232a9a3=z{<oo6=4={_75`>;4;j0n96s|5da94?4|V<<h70=<c;g7?xu2mk0;6?uQ57`8965d2l90q~;ja;296~X2>h16?>m5e39~w0c?2909wS;98:?07f<6881v8k8:181[31?278?n4>019~w0c12909wS;96:?07g<b?2wx9h;50;0xZ0023498n7k9;|q6a1<72;qU9;:4=21a>`3<uz?n?7>52z\626=:;:h1i95rs4g1>5<5sW?=>63<3c8f7>{t=l;1<7<t^442?854j3o97p}:e183>7}Y=?:01>=m:022?xu2lo0;6?uQ54d8965e28:;7p}:de83>7}Y=<n01>=n:d58yv3ck3:1>vP:5b9>76g=m?1v8jm:181[32j278?l4j5:p1ag=838pR8;n;<10e?c33ty>h44?:3y]10?<5:9j6h=4}r7g<?6=:rT>955232c9a7=z{<n<6=4={_763>;4;h0:<<5rs4f5>5<5sW?>:63<3`8245=z{<n>6=4={_761>;4;m0mj6s|5e694?4|V<??70=<d;df?xu2l;0;6?uQ5408965c2on0q~;k1;296~X2=816?>j5fb9~w0b72909wS;:0:?07a<aj2wx9nh50;0xZ02a3498h7h8;|q6g`<72;qU99k4=21g>`e<uz?hh7>52z\60a=:;:n1i<5rs4a`>5<5sW??o63<3b8eb>{t=jh1<7<t^46a?854k3ln7p}:c`83>7}Y==k01>=l:gf8yv3d13:1>vP:489>76e=nj1v8m8:181[33?278?n4ib:p1f0=838pR8:9;<10g?`03ty>o84?:3y]113<5:9h6hm4}r7`0?6=:rT>895232a9a4=z{<i86=4={_777>;4;k0mj6s|5b094?4|V<>970=<b;df?xu2k80;6?uQ5538965e2on0q~;l0;296~X2;116?>l5fb9~w0d12909wS;=d:?07g<aj2wx9ll50;0xZ0453498n7h8;|q565<72;qU94;4=21a>`e<uz<:97>52z\6<d=:;:h1i<5rs72b>5<5sW?<j63<3`8eb>{t=ol1<7<t^457?854i3ln7p}:f583>7}Y=?301>=n:gf8yv3b13:1>vP:5d9>76g=nj1v8jj:181[32;278?l4ib:p1a5=838pR8:7;<10e?`03ty>o54?:3y]177<5:9j6hm4}r7b4?6=:rT>>=5232c9a4=z{?>>6=46{_474>;4;m088o5232f971?<5:9o6>:7;<10`?53?278?i4<479>76b=;=>01>=k:260?854l39?>6s|65194??|V?9m70=<c;17f>;4;j08845232a971><5:9h6>:8;<10g?53>278?n4<459>76e=;=901>=l:261?xu1<;0;64uQ62g8965e2:>i70=<b;17=>;4;k08855232`9711<5:9i6>:9;<10f?53<278?o4<429>76d=;=80q~8;1;29=~X1;m16?>o535`8965f2:>270=<a;17<>;4;h088:5232c9710<5:9j6>:;;<10e?53;278?l4<439~w33c2908wS8;d:?07a<4=116?>j535d8yv02j3:1?vP94b9>76e=;<201>=l:26e?xu1=h0;6>uQ65`8965e2:?370=<b;17b>{t><31<7=t^76b?854i39>463<3`800c=z{??36=4<{_47=>;4;m089:5232f971c<uz<>;7>53z\50==:;:i1?894=21`>62b3ty=:;4?:2y]203<5:9i6>;8;<10f?53m2wx:;;50;1xZ3333498m7=:7:?07d<4<l1v;8;:180[02;278?i4<579>76b=;=n0q~893;297~X1=;16?>m53448965d2:>o7p}96383>6}Y><;01>=m:275?854j39?h6s|67394?5|V??;70=<a;162>;4;h088i5rs743>5<4sW<?j63<3e8010=:;:n1?9m4}r46b?6=;rT=8h5232a9703<5:9h6>:l;|q51`<72:qU:994=21a>6323498n7=;c:p200=839pR;:9;<10e?52=278?l4<4b9~w61f2902wS=9e:?07a<5;278?i4<5:?07f<5;278?n4<5:?07g<5;278?o4<5:?07d<5;278?l4<5:p72>=833pR>8k;<10`?453498h7=<;<10g?453498o7=<;<10f?453498n7=<;<10e?453498m7=<;|q0<6<720qU?:84=21g>77<5:9o6><4=21`>77<5:9h6><4=21a>77<5:9i6><4=21b>77<5:9j6><4}r1;6?6=1rT8;85232f965=:;:n1?<5232a965=:;:i1?<5232`965=:;:h1?<5232c965=:;:k1?<5rs2:2>5<>sW9<863<3e82b>;4;m08<63<3b82b>;4;j08<63<3c82b>;4;k08<63<3`82b>;4;h08<6s|39294??|V:=870=<d;0f?854l39n70=<c;0f?854k39n70=<b;0f?854j39n70=<a;0f?854i39n7p}<7g83><}Y;>801>=k:3f8965c2:n01>=l:3f8965d2:n01>=m:3f8965e2:n01>=n:3f8965f2:n0q~=8e;29=~X4?816?>j52b9>76b=;j16?>m52b9>76e=;j16?>l52b9>76d=;j16?>o52b9>76g=;j1v>9k:18:[508278?i4=b:?07a<4j278?n4=b:?07f<4j278?o4=b:?07g<4j278?l4=b:?07d<4j2wx?:m50;;xZ60a3498h7<n;<10`?5f3498o7<n;<10g?5f3498n7<n;<10f?5f3498m7<n;<10e?5f3ty8;o4?:8y]73e<5:9o6?74=21g>6?<5:9h6?74=21`>6?<5:9i6?74=21a>6?<5:9j6?74=21b>6?<uz9<;7>59z\02g=:;:n1>55232f97==:;:i1>55232a97==:;:h1>55232`97==:;:k1>55232c97==z{:336=46{_1;`>;4;m0?863<3e862>;4;j0?863<3b862>;4;k0?863<3c862>;4;h0?863<3`862>{t;0<1<77t^2:`?854l3>870=<d;77?854k3>870=<c;77?854j3>870=<b;77?854i3>870=<a;77?xu41<0;64uQ39`8965c2=801>=k:418965d2=801>=l:418965e2=801>=m:418965f2=801>=n:418yv5><3:15vP<8`9>76b=<816?>j5539>76e=<816?>m5539>76d=<816?>l5539>76g=<816?>o5539~w6?42902wS=79:?07a<38278?i4:1:?07f<38278?n4:1:?07g<38278?o4:1:?07d<38278?l4:1:p7<4=833pR>67;<10`?2a3498h7;i;<10g?2a3498o7;i;<10f?2a3498n7;i;<10e?2a3498m7;i;|q0=4<720qU?594=21g>1c<5:9o68k4=21`>1c<5:9h68k4=21a>1c<5:9i68k4=21b>1c<5:9j68k4}r1:4?6=1rT84;5232f90a=:;:n19i5232a90a=:;:i19i5232`90a=:;:h19i5232c90a=:;:k19i5rs2:e>5<>sW93963<3e87g>;4;m0>o63<3b87g>;4;j0>o63<3c87g>;4;k0>o63<3`87g>;4;h0>o6s|39g94??|V:2?70=<d;6a?854l3?i70=<c;6a?854k3?i70=<b;6a?854j3?i70=<a;6a?854i3?i7p}<d783>7}Y;k<01>=k:838yv5c<3:1>vP<b49>76b=191v>j=:181[5e;278?i47f:p7a7=838pR>l=;<10`?>b3ty8h=4?:3y]7g7<5:9o65j4}r1`b?6=:rT8n=5232f9<<=z{:in6=4={_1bb>;4;m0<i6s|3bf94?4|V:kn70=<d;50?xu4kj0;6?uQ3`f8965d20;0q~=lb;296~X4ij16?>m5919~w6ef2909wS=nb:?07f<?n2wx?n750;0xZ6gf3498o76j;|q0g2<72;qU?l64=21`>=b<uz9h:7>52z\0e2=:;:i1445rs2a6>5<5sW9j:63<3b84a>{t;j>1<7<t^2c6?854k3=87p}<c283>7}Y;h>01>=m:838yv5d:3:1>vP<a29>76d=191v>m>:181[5f:278?o47f:p7f6=838pR>o>;<10f?>b3ty8nk4?:3y]7d6<5:9i65j4}r1aa?6=:rT85k5232`9<<=z{:no6=4={_1ag>;4;k0<i6s|3ea94?4|V:hi70=<b;50?xu4lk0;6?uQ3cc8965f20;0q~=ka;296~X4j016?>o5919~w6b>2909wS=m8:?07d<?n2wx?i650;0xZ6d03498m76j;|q0`2<72;qU?o:4=21b>=b<uz9o?7>52z\0e<=:;:k1445rs2a;>5<5sW92i63<3`84a>{t;kn1<7<t^2;g?854i3=87p};7e83>7}Y;oo01>=k:`f8yv20j3:1>vP<fe9>76b=ik1v99n:181[5ak278?i4n9:p02?=838pR>hm;<10`?g?3ty?;54?:3y]7cg<5:9o6l94}r643?6=:rT8j45232f9e3=z{===6=4={_1e<>;4;m0j96s|46794?4|V:l<70=<d;c7?xu3?:0;6?uQ3g78965d2hn0q~:82;296~X4n=16?>m5ac9~w1162909wS=i3:?07f<f12wx8:>50;0xZ6`53498o7o7;|q72c<72;qU?k?4=21`>d1<uz>=i7>52z\0b5=:;:i1m;5rs54g>5<5sW9nj63<3b8b1>{t<?i1<7<t^2gf?854k3k?7p};6c83>7}Y;ln01>=m:`f8yv21i3:1>vP<eb9>76d=ik1v987:181[5bi278?o4n9:p031=838pR>k6;<10f?g?3ty?:;4?:3y]7`><5:9i6l94}r651?6=:rT8i:5232`9e3=z{=<?6=4={_1f2>;4;k0j96s|47194?4|V:o>70=<b;c7?xu3>;0;6?uQ3d68965f2hn0q~:91;296~X4m:16?>o5ac9~w1072909wS=j2:?07d<f12wx88h50;0xZ6c63498m7o7;|q7`a<72;qU88j4=21b>d1<uz>oo7>52z\71f=:;:k1m;5rs5fa>5<5sW>>n63<3`8b1>{t<mk1<7<t^57b?854i3k?7p};d883>7}Y<<301>=k:`18yv2c03:1>vP;599>76b=i;1v9j8:181[22?278?i4n1:p0a0=838pR9;9;<10`?g73ty?h84?:3y]003<5:9o64k4}r6g0?6=:rT?995232f9=a=z{=n96=4={_666>;4;m02o6s|4e394?4|V=?:70=<d;;a?xu3l90;6?uQ4428965d2h90q~:lf;296~X3<o16?>m5a39~w1eb2909wS:;e:?07f<f92wx8nj50;0xZ12c3498o7o?;|q7gf<72;qU89m4=21`><c<uz>hn7>52z\70g=:;:i15i5rs5ab>5<5sW>?m63<3b8:g>{t<j31<7<t^56:?854k33i7p};c683>7}Y<==01>=m:`18yv2d>3:1>vP;479>76d=i;1v9m::181[23=278?o4n1:p0f2=838pR9:;;<10f?g73ty?o>4?:3y]015<5:9i64k4}r6`6?6=:rT?8?5232`9=a=z{=i:6=4={_675>;4;k02o6s|4b294?4|V=>;70=<b;;a?xu3jo0;6?uQ42d8965f2h90q~:me;296~X3;l16?>o5a39~w1dd2909wS:<c:?07d<f92wx8ol50;0xZ15e3498m7o?;|q7fd<72;qU8>o4=21b><c<uz>i57>52z\77<=:;:k15i5rs5`;>5<5sW>8463<3`8:g>{t<k=1<7<t^514?854i33i7p};b783>7}Y<:<01>=k:8c8yv2e=3:1>vP;349>76b=101v9l;:181[24<278?i468:p0g5=838pR9=<;<10`??03ty?n<4?:3y]067<5:9o6484}r6a4?6=:rT??=5232f9=0=z{=km6=4={_61b>;4;m0i86s|4`g94?4|V=8n70=<d;`0?xu3im0;6?uQ43f8965d20k0q~:nc;296~X3:j16?>m5989~w1ge2909wS:=b:?07f<>02wx8lo50;0xZ14f3498o778;|q7e<<72;qU8?74=21`><0<uz>j47>52z\76==:;:i1585rs5c5>5<5sW>9:63<3b8a0>{t<h?1<7<t^506?854k3h87p};a583>7}Y<;>01>=m:8c8yv2f;3:1>vP;229>76d=101v9o=:181[25:278?o468:p0d7=838pR9<>;<10f??03ty?m=4?:3y]076<5:9i6484}r6:b?6=:rT?=k5232`9=0=z{=3n6=4={_62a>;4;k0i86s|48f94?4|V=;o70=<b;`0?xu31k0;6?uQ40`8965f20k0q~:6a;296~X39h16?>o5989~w1?>2909wS:>9:?07d<>02wx84650;0xZ17?3498m778;|q7=2<72;qU8<94=21b><0<uz>2:7>52z\753=:;:k1585rs5;6>5<5sW>:963<3`8a0>{t<0>1<7<t^537?854i3h87p};9283>7}Y<8901>=k:c08yv2>:3:1>vP;139>76b=j81v97?:181[268278?i4m0:p0=`=838pR9>i;<10`?ga3ty?4h4?:3y]05c<5:9o6lk4}r6;`?6=:rT?<i5232f9ed=z{=2h6=4={_63g>;4;m02j6s|49`94?4|V=:i70=<d;;7?xu30h0;6?uQ41c8965d2k80q~:79;296~X38016?>m5b09~w1>?2909wS:?8:?07f<e82wx85950;0xZ1603498o7oi;|q7<0<72;qU8=;4=21`>dc<uz>387>52z\741=:;:i1ml5rs5:0>5<5sW>;?63<3b8:b>{t<181<7<t^521?854k33?7p};8083>7}Y<9;01>=m:c08yv2?83:1>vP;019>76d=j81v99i:181[5an278?o4m0:p02c=838pR>h9;<10f?ga3ty?;94?:3y]7`d<5:9i6lk4}r65=?6=:rT8i=5232`9ed=z{=nn6=4={_667>;4;k02j6s|4e194?4|V=>370=<b;;7?xu3k10;6?uQ42f8965f2k80q~:md;296~X3;;16?>o5b09~w1d52909wS:=7:?07d<e82wx8l950;0xZ17d3498m7oi;|q7=f<72;qU8<?4=21b>dc<uz>2=7>52z\743=:;:k1ml5rs5:5>5<5sW9oj63<3`8:b>{t<<o1<7<t^2ff?854i33?7ps|38c94?4|V:3j708>:2;b?!54m38:56s|63094?4|V?89708>:701?!54m38om6s|65794?4|V?>;708>:763?!54m38nj6s|65194?4|V?9m708>:71e?!54m38mm6s|65094?4|V?9n708>:71f?!54m39;96s|65394?4|V?9o708>:71g?!54m39;i6s|36c94?4|V:<n708>:24f?!54m3;jn6s|36:94?4|V:<o708>:24g?!54m3;i:6s|39194?4|V:==708>:255?!54m3;h=6s|39094?4|V:=>708>:256?!54m3;ho6s|39394?4|V:=?708>:257?!54m3;o;6s|39294?4|V:=8708>:250?!54m3;n>6s|36d94?4|V:=9708>:251?!54m3;nh6s|36g94?4|V:=:708>:252?!54m3;m46s|36f94?4|V:=;708>:253?!54m38;?6s|36a94?4|V:<m708>:24e?!54m38;i6s|36`94?4|V:<h708>:24`?!54m38:m6s|36594?4|V:<i708>:24a?!54m38996s|3e494?4|V:h=708>:2`5?!54m388<6s|3e694?4|V:h>708>:2`6?!54m388n6s|3e094?4|V:h8708>:2`0?!54m38?:6s|3e394?4|V:h9708>:2`1?!54m38>=6s|3e294?4|V:h:708>:2`2?!54m38>o6s|3bd94?4|V:h;708>:2`3?!54m38=;6s|3bg94?4|V:km708>:2ce?!54m38<>6s|3bf94?4|V:kn708>:2cf?!54m38<h6s|3ba94?4|V:ko708>:2cg?!54m38346s|3b`94?4|V:kh708>:2c`?!54m382?6s|3bc94?4|V:ki708>:2ca?!54m382i6s|3b;94?4|V:kj708>:2cb?!54m38j56s|3b594?4|V:k3708>:2c;?!54m38i86s|3b494?4|V:k<708>:2c4?!54m38ij6s|3b794?4|V:k=708>:2c5?!54m38hm6s|3b694?4|V:k>708>:2c6?!54m38o96s|3b194?4|V:k?708>:2c7?!54m38o46s|3b094?4|V:k8708>:2c0?!54m38o56s|3b394?4|V:k9708>:2c1?!54m38on6s|3b294?4|V:k:708>:2c2?!54m38oo6s|3cd94?4|V:k;708>:2c3?!54m38oh6s|3cg94?4|V:3m708>:2;e?!54m38oi6s|3ef94?4|V:hh708>:2``?!54m38oj6s|3ea94?4|V:hi708>:2`a?!54m38n<6s|3e`94?4|V:hj708>:2`b?!54m38n=6s|3ec94?4|V:h2708>:2`:?!54m38n>6s|3e;94?4|V:h3708>:2`;?!54m38n?6s|3e:94?4|V:h<708>:2`4?!54m38n86s|3e594?4|V:h?708>:2`7?!54m38n96s|3e194?4|V:k2708>:2c:?!54m38n:6s|3b:94?4|V:3n708>:2;f?!54m38n;6s|3cf94?4|V:3o708>:2;g?!54m38n46s|50:94?4|V=l3708>:5d;?!54m38n56s|50494?4|V=l<708>:5d4?!54m38nm6s|50694?4|V=l>708>:5d6?!54m38nn6s|50194?4|V=l?708>:5d7?!54m38no6s|50094?4|V=l8708>:5d0?!54m38nh6s|50394?4|V=l9708>:5d1?!54m38ni6s|50294?4|V=l:708>:5d2?!54m38m<6s|51d94?4|V=l;708>:5d3?!54m38m=6s|51g94?4|V=om708>:5ge?!54m38m>6s|51f94?4|V=on708>:5gf?!54m38m?6s|51a94?4|V=oo708>:5gg?!54m38m86s|51`94?4|V=oh708>:5g`?!54m38m96s|51;94?4|V=oj708>:5gb?!54m38m:6s|51:94?4|V=o2708>:5g:?!54m38m;6s|51594?4|V=o3708>:5g;?!54m38m46s|51494?4|V=o<708>:5g4?!54m38m56s|51794?4|V=o=708>:5g5?!54m38mn6s|51694?4|V=o>708>:5g6?!54m38mo6s|51194?4|V=o?708>:5g7?!54m38mh6s|51094?4|V=o8708>:5g0?!54m38mi6s|51394?4|V=o9708>:5g1?!54m38mj6s|51294?4|V=o:708>:5g2?!54m39;<6s|50d94?4|V=ln708>:5df?!54m39;=6s|50g94?4|V=lo708>:5dg?!54m39;>6s|50f94?4|V=lh708>:5d`?!54m39;?6s|50a94?4|V=li708>:5da?!54m39;86s|50`94?4|V=lj708>:5db?!54m39;:6s|50c94?4|V=l2708>:5d:?!54m39;;6s|50;94?4|V=l=708>:5d5?!54m39;46s|50794?4|V=oi708>:5ga?!54m39;56s|51c94?4|V=o;708>:5g3?!54m39;m6s|4gd94?4|V=nm708>:5fe?!54m39;n6s|38`94?4|V:3i708>:2;a?!54m39;o6s|63194?4|V?88708>:700?!54m39;h6s|64f94?4|V?>o708>:76g?!54m39;j6s|64`94?4|V?>h708>:76`?!54m39:<6s|64c94?4|V?>i708>:76a?!54m39:=6s|64;94?4|V?>j708>:76b?!54m39:>6s|64:94?4|V?>2708>:76:?!54m39:?6s|64594?4|V?>3708>:76;?!54m39:86s|67494?4|V??>708>:776?!54m39:96s|67794?4|V???708>:777?!54m39::6s|67694?4|V??8708>:770?!54m39:;6s|67194?4|V??9708>:771?!54m39:46s|67094?4|V??:708>:772?!54m3;jo6s|67394?4|V??;708>:773?!54m3;jh6s|67294?4|V?>m708>:76e?!54m3;ji6s|64d94?4|V?>n708>:76f?!54m3;jj6s|64g94?4|V?><708>:764?!54m3;i<6s|64494?4|V?>=708>:765?!54m3;i=6s|38:94?4|V:2o708>:2:g?!54m3;i>6s|38494?4|V:2h708>:2:`?!54m3;i?6s|38794?4|V:2i708>:2:a?!54m3;i86s|38694?4|V:2j708>:2:b?!54m3;i96s|38194?4|V:22708>:2::?!54m3;i;6s|38094?4|V:23708>:2:;?!54m3;i46s|38394?4|V:2<708>:2:4?!54m3;i56s|38294?4|V:2=708>:2:5?!54m3;im6s|39d94?4|V:2>708>:2:6?!54m3;in6s|39g94?4|V:2?708>:2:7?!54m3;io6s|46f94?4|V:ln708>:2df?!54m3;ih6s|46`94?4|V:lo708>:2dg?!54m3;ii6s|46c94?4|V:lh708>:2d`?!54m3;ij6s|46;94?4|V:li708>:2da?!54m3;h<6s|46:94?4|V:lj708>:2db?!54m3;h>6s|46594?4|V:l2708>:2d:?!54m3;h?6s|46494?4|V:l3708>:2d;?!54m3;h86s|46794?4|V:l<708>:2d4?!54m3;h96s|46194?4|V:l>708>:2d6?!54m3;h:6s|46094?4|V:l?708>:2d7?!54m3;h;6s|46394?4|V:l8708>:2d0?!54m3;h46s|46294?4|V:l9708>:2d1?!54m3;h56s|47d94?4|V:l:708>:2d2?!54m3;hm6s|47g94?4|V:l;708>:2d3?!54m3;hn6s|47f94?4|V:om708>:2ge?!54m3;hh6s|47a94?4|V:on708>:2gf?!54m3;hi6s|47`94?4|V:oo708>:2gg?!54m3;hj6s|47c94?4|V:oh708>:2g`?!54m3;o<6s|47:94?4|V:oj708>:2gb?!54m3;o=6s|47594?4|V:o2708>:2g:?!54m3;o>6s|47494?4|V:o3708>:2g;?!54m3;o?6s|47794?4|V:o<708>:2g4?!54m3;o86s|47694?4|V:o=708>:2g5?!54m3;o96s|47194?4|V:o>708>:2g6?!54m3;o:6s|47094?4|V:o?708>:2g7?!54m3;o46s|47394?4|V:o8708>:2g0?!54m3;o56s|47294?4|V:o9708>:2g1?!54m3;om6s|44d94?4|V:o:708>:2g2?!54m3;on6s|4ef94?4|V=?o708>:57g?!54m3;oo6s|4ea94?4|V=?h708>:57`?!54m3;oh6s|4e`94?4|V=?i708>:57a?!54m3;oi6s|4ec94?4|V=?j708>:57b?!54m3;oj6s|4e;94?4|V=?2708>:57:?!54m3;n<6s|4e:94?4|V=?3708>:57;?!54m3;n=6s|4e594?4|V=?<708>:574?!54m3;n?6s|4e494?4|V=?=708>:575?!54m3;n86s|4e794?4|V=?>708>:576?!54m3;n96s|4e694?4|V=??708>:577?!54m3;n:6s|4e094?4|V=?9708>:571?!54m3;n;6s|4e394?4|V=?:708>:572?!54m3;n46s|4e294?4|V=?;708>:573?!54m3;n56s|4bd94?4|V=>m708>:56e?!54m3;nm6s|4bg94?4|V=>n708>:56f?!54m3;nn6s|4bf94?4|V=>o708>:56g?!54m3;no6s|4ba94?4|V=>h708>:56`?!54m3;ni6s|4b`94?4|V=>i708>:56a?!54m3;nj6s|4bc94?4|V=>j708>:56b?!54m3;m<6s|4b;94?4|V=>2708>:56:?!54m3;m=6s|4b594?4|V=><708>:564?!54m3;m>6s|4b494?4|V=>=708>:565?!54m3;m?6s|4b794?4|V=>>708>:566?!54m3;m86s|4b694?4|V=>?708>:567?!54m3;m96s|4b194?4|V=>8708>:560?!54m3;m:6s|4b094?4|V=>9708>:561?!54m3;m;6s|4b394?4|V=>:708>:562?!54m3;m56s|4b294?4|V=>;708>:563?!54m3;mm6s|4cd94?4|V=9m708>:51e?!54m3;mn6s|4cg94?4|V=9n708>:51f?!54m3;mo6s|4ca94?4|V=9h708>:51`?!54m3;mh6s|4c`94?4|V=9i708>:51a?!54m3;mi6s|4cc94?4|V=9j708>:51b?!54m3;mj6s|4c;94?4|V=92708>:51:?!54m38;<6s|4c:94?4|V=93708>:51;?!54m38;=6s|4c594?4|V=9<708>:514?!54m38;>6s|4c494?4|V=9=708>:515?!54m38;86s|4c794?4|V=9>708>:516?!54m38;96s|4c694?4|V=9?708>:517?!54m38;:6s|4c194?4|V=98708>:510?!54m38;;6s|4c394?4|V=9:708>:512?!54m38;46s|4c294?4|V=9;708>:513?!54m38;56s|4`d94?4|V=8m708>:50e?!54m38;m6s|4`g94?4|V=8n708>:50f?!54m38;n6s|4`f94?4|V=8o708>:50g?!54m38;o6s|4`a94?4|V=8h708>:50`?!54m38;h6s|4``94?4|V=8i708>:50a?!54m38;j6s|4`c94?4|V=8j708>:50b?!54m38:<6s|4`;94?4|V=82708>:50:?!54m38:=6s|4`:94?4|V=83708>:50;?!54m38:>6s|4`494?4|V=8=708>:505?!54m38:?6s|4`794?4|V=8>708>:506?!54m38:86s|4`694?4|V=8?708>:507?!54m38:96s|4`194?4|V=88708>:500?!54m38::6s|4`094?4|V=89708>:501?!54m38:;6s|4`394?4|V=8:708>:502?!54m38:46s|4`294?4|V=8;708>:503?!54m38:n6s|48d94?4|V=;m708>:53e?!54m38:o6s|48g94?4|V=;n708>:53f?!54m38:h6s|48f94?4|V=;o708>:53g?!54m38:i6s|48`94?4|V=;i708>:53a?!54m38:j6s|48c94?4|V=;j708>:53b?!54m389<6s|48;94?4|V=;2708>:53:?!54m389=6s|48:94?4|V=;3708>:53;?!54m389>6s|48594?4|V=;<708>:534?!54m389?6s|48494?4|V=;=708>:535?!54m38986s|48794?4|V=;>708>:536?!54m389:6s|48694?4|V=;?708>:537?!54m389;6s|48194?4|V=;8708>:530?!54m38946s|48094?4|V=;9708>:531?!54m38956s|48294?4|V=;;708>:533?!54m389m6s|49d94?4|V=:m708>:52e?!54m389n6s|49g94?4|V=:n708>:52f?!54m389o6s|49f94?4|V=:o708>:52g?!54m389h6s|49a94?4|V=:h708>:52`?!54m389i6s|49`94?4|V=:i708>:52a?!54m389j6s|49c94?4|V=:j708>:52b?!54m388=6s|49;94?4|V=:2708>:52:?!54m388>6s|49:94?4|V=:3708>:52;?!54m388?6s|49594?4|V=:<708>:524?!54m38886s|49794?4|V=:>708>:526?!54m38896s|49694?4|V=:?708>:527?!54m388:6s|49194?4|V=:8708>:520?!54m388;6s|49094?4|V=:9708>:521?!54m38846s|49394?4|V=::708>:522?!54m38856s|49294?4|V=:;708>:523?!54m388m6s|46d94?4|V:lm708>:2de?!54m388o6s|46g94?4|V:l=708>:2d5?!54m388h6s|46694?4|V:oi708>:2ga?!54m388i6s|47;94?4|V:o;708>:2g3?!54m388j6s|4eg94?4|V=?8708>:570?!54m38?<6s|4e194?4|V=>3708>:56;?!54m38?=6s|4b:94?4|V=9o708>:51g?!54m38?>6s|4cf94?4|V=99708>:511?!54m38??6s|4c094?4|V=8<708>:504?!54m38?86s|4`594?4|V=;h708>:53`?!54m38?96s|48a94?4|V=;:708>:532?!54m38?;6s|48394?4|V=:=708>:525?!54m38?46s|49494?4|V:nm708>:2fe?!54m38?56s|44g94?4|V:nn708>:2ff?!54m38?m6s|5cd94?4|V<>;708>:463?!54m38?n6s|5cf94?4|V<9m708>:41e?!54m38?o6s|5ca94?4|V<9n708>:41f?!54m38?h6s|5c`94?4|V<9o708>:41g?!54m38?i6s|5cc94?4|V<9h708>:41`?!54m38?j6s|5c;94?4|V<9i708>:41a?!54m38><6s|5c:94?4|V<9j708>:41b?!54m38>>6s|5c594?4|V<92708>:41:?!54m38>?6s|5c794?4|V<9<708>:414?!54m38>86s|5c694?4|V<9=708>:415?!54m38>96s|5c194?4|V<9>708>:416?!54m38>:6s|5c094?4|V<9?708>:417?!54m38>;6s|5c394?4|V<98708>:410?!54m38>46s|5c294?4|V<99708>:411?!54m38>56s|5`d94?4|V<9:708>:412?!54m38>m6s|5`g94?4|V<9;708>:413?!54m38>n6s|5`f94?4|V<8m708>:40e?!54m38>h6s|5`a94?4|V<8n708>:40f?!54m38>i6s|5`c94?4|V<8h708>:40`?!54m38>j6s|5`;94?4|V<8i708>:40a?!54m38=<6s|5`:94?4|V<8j708>:40b?!54m38==6s|5`594?4|V<82708>:40:?!54m38=>6s|5`494?4|V<83708>:40;?!54m38=?6s|5`794?4|V<8<708>:404?!54m38=86s|5`694?4|V<8=708>:405?!54m38=96s|5`194?4|V<8>708>:406?!54m38=:6s|5`094?4|V<8?708>:407?!54m38=46s|5`394?4|V<88708>:400?!54m38=56s|60d94?4|V<3m708>:4;e?!54m38=m6s|60g94?4|V<3n708>:4;f?!54m38=n6s|60f94?4|V<3o708>:4;g?!54m38=o6s|60a94?4|V<3h708>:4;`?!54m38=h6s|60`94?4|V<3i708>:4;a?!54m38=i6s|60c94?4|V<3j708>:4;b?!54m38=j6s|60;94?4|V<32708>:4;:?!54m38<<6s|60:94?4|V<33708>:4;;?!54m38<=6s|60594?4|V<3<708>:4;4?!54m38<?6s|60494?4|V<3=708>:4;5?!54m38<86s|60694?4|V<3?708>:4;7?!54m38<96s|60194?4|V<38708>:4;0?!54m38<:6s|60094?4|V<39708>:4;1?!54m38<;6s|60394?4|V<3:708>:4;2?!54m38<46s|60294?4|V<3;708>:4;3?!54m38<56s|61d94?4|V<2m708>:4:e?!54m38<m6s|61g94?4|V<2n708>:4:f?!54m38<n6s|61f94?4|V<2o708>:4:g?!54m38<o6s|61a94?4|V<2h708>:4:`?!54m38<i6s|61`94?4|V<2i708>:4:a?!54m38<j6s|61;94?4|V<22708>:4::?!54m383<6s|61:94?4|V<23708>:4:;?!54m383=6s|61594?4|V<2<708>:4:4?!54m383>6s|61494?4|V<2=708>:4:5?!54m383?6s|61794?4|V<2>708>:4:6?!54m38386s|61694?4|V<2?708>:4:7?!54m38396s|61194?4|V<28708>:4:0?!54m383:6s|61094?4|V<29708>:4:1?!54m383;6s|61394?4|V<2:708>:4:2?!54m38356s|61294?4|V<2;708>:4:3?!54m383m6s|5gg94?4|V<=n708>:45f?!54m383n6s|5gf94?4|V<=o708>:45g?!54m383o6s|5ga94?4|V<=h708>:45`?!54m383h6s|5g`94?4|V<=i708>:45a?!54m383i6s|5gc94?4|V<=j708>:45b?!54m383j6s|5g;94?4|V<=2708>:45:?!54m382<6s|5g:94?4|V<=3708>:45;?!54m382=6s|5g594?4|V<=<708>:454?!54m382>6s|5g494?4|V<==708>:455?!54m38286s|5g794?4|V<=>708>:456?!54m38296s|5g194?4|V<=8708>:450?!54m382:6s|5g094?4|V<=9708>:451?!54m382;6s|5g394?4|V<=:708>:452?!54m38246s|5g294?4|V<=;708>:453?!54m38256s|5dd94?4|V<<m708>:44e?!54m382m6s|5dg94?4|V<<n708>:44f?!54m382n6s|5df94?4|V<<o708>:44g?!54m382o6s|5da94?4|V<<h708>:44`?!54m382h6s|5d`94?4|V<<i708>:44a?!54m382j6s|5dc94?4|V<<j708>:44b?!54m38j<6s|5d:94?4|V<<3708>:44;?!54m38j=6s|5d594?4|V<<<708>:444?!54m38j>6s|5d494?4|V<<=708>:445?!54m38j?6s|5d794?4|V<<>708>:446?!54m38j86s|5d694?4|V<<?708>:447?!54m38j96s|5d194?4|V<<8708>:440?!54m38j:6s|5d094?4|V<<9708>:441?!54m38j;6s|5d394?4|V<<:708>:442?!54m38j46s|5d294?4|V<<;708>:443?!54m38jm6s|5ed94?4|V<?m708>:47e?!54m38jn6s|5ef94?4|V<?o708>:47g?!54m38jo6s|5ea94?4|V<?h708>:47`?!54m38jh6s|5e`94?4|V<?i708>:47a?!54m38ji6s|5ec94?4|V<?j708>:47b?!54m38jj6s|5e;94?4|V<?2708>:47:?!54m38i<6s|5e:94?4|V<?3708>:47;?!54m38i=6s|5e594?4|V<?<708>:474?!54m38i>6s|5e494?4|V<?=708>:475?!54m38i?6s|5e794?4|V<?>708>:476?!54m38i96s|5e694?4|V<??708>:477?!54m38i:6s|5e094?4|V<?9708>:471?!54m38i;6s|5e394?4|V<?:708>:472?!54m38i46s|5e294?4|V<?;708>:473?!54m38i56s|5bd94?4|V<>m708>:46e?!54m38im6s|5bg94?4|V<>n708>:46f?!54m38in6s|5bf94?4|V<>o708>:46g?!54m38io6s|5ba94?4|V<>h708>:46`?!54m38ih6s|5b`94?4|V<>i708>:46a?!54m38ii6s|5bc94?4|V<>j708>:46b?!54m38h<6s|5b;94?4|V<>2708>:46:?!54m38h=6s|5b594?4|V<><708>:464?!54m38h>6s|5b494?4|V<>=708>:465?!54m38h?6s|5b794?4|V<>>708>:466?!54m38h86s|5b694?4|V<>?708>:467?!54m38h96s|5b194?4|V<>8708>:460?!54m38h:6s|5b094?4|V<>9708>:461?!54m38h;6s|5b394?4|V<>:708>:462?!54m38h46s|5b294?4|V<93708>:41;?!54m38h56s|5c494?4|V<8o708>:40g?!54m38hn6s|5``94?4|V<89708>:401?!54m38ho6s|63294?4|V<3>708>:4;6?!54m38hh6s|60794?4|V<2j708>:4:b?!54m38hi6s|61c94?4|V<=m708>:45e?!54m38hj6s|5gd94?4|V<=?708>:457?!54m38o<6s|5g694?4|V<<2708>:44:?!54m38o=6s|5d;94?4|V<?n708>:47f?!54m38o>6s|5eg94?4|V<?8708>:470?!54m38o?6s|5e194?4|V<>3708>:46;?!54m38o86s|5b:94?4|V<8:708>:402?!54m38o:6s|5`294?4|V<8;708>:403?!54m38o;6srn95a>5<5sA98j6sa86a94?4|@:9m7p`77e83>7}O;:l0qc68e;296~N4;o1vb59i:181M54n2we45>50;0xL65a3td34<4?:3yK76`<ug23>7>52zJ07c=zf1286=4={I10b>{i01>1<7<tH21e?xh?0<0;6?uG32d8yk>?>3:1>vF<3g9~j=>02909wE=<f:m<=>=838pD>=i;|l;<<<72;qC?>h4}o:;e?6=:rB8?k5rn9:a>5<5sA98j6sa89a94?4|@:9m7p`78e83>7}O;:l0qc67e;296~N4;o1vb56i:181M54n2we44>50;0xL65a3td35<4?:3yK76`<ug22>7>52zJ07c=zf1386=4={I10b>{i00>1<7<tH21e?xh?1<0;6?uG32d8yk>>>3:1>vF<3g9~j=?02909wE=<f:m<<>=838pD>=i;|l;=<<72;qC?>h4}o::e?6=:rB8?k5rn9;a>5<5sA98j6sa88a94?4|@:9m7p`79e83>7}O;:l0qc66e;296~N4;o1vb57i:181M54n2we4l>50;0xL65a3td3m<4?:3yK76`<ug2j>7>52zJ07c=zf1k86=4={I10b>{i0h>1<7<tH21e?xh?i<0;6?uG32d8yk>f>3:1>vF<3g9~j=g02909wE=<f:m<d>=838pD>=i;|l;e<<72;qC?>h4}o:be?6=:rB8?k5rn9ca>5<5sA98j6sa8`a94?4|@:9m7p`7ae83>7}O;:l0qc6ne;296~N4;o1vb5oi:181M54n2we4o>50;0xL65a3td3n<4?:3yK76`<ug2i>7>52zJ07c=zf1h86=4={I10b>{i0k>1<7<tH21e?xh?j<0;6?uG32d8yk>e>3:1>vF<3g9~j=d02909wE=<f:m<g>=838pD>=i;|l;f<<72;qC?>h4}o:ae?6=:rB8?k5rn9`a>5<5sA98j6sa8ca94?4|@:9m7p`7be83>7}O;:l0qc6me;296~N4;o1vb5li:181M54n2we4n>50;0xL65a3td3o<4?:3yK76`<ug2h>7>52zJ07c=zf1i86=4={I10b>{i0j>1<7<tH21e?xh?k<0;6?uG32d8yk>d>3:1>vF<3g9~j=e02909wE=<f:m<f>=838pD>=i;|l;g<<72;qC?>h4}o:`e?6=:rB8?k5rn9aa>5<5sA98j6sa8ba94?4|@:9m7p`7ce83>7}O;:l0qc6le;296~N4;o1vb5mi:181M54n2we4i>50;0xL65a3td3h<4?:3yK76`<ug2o>7>52zJ07c=zf1n86=4={I10b>{i0m>1<7<tH21e?xh?l<0;6?uG32d8yk>c>3:1>vF<3g9~j=b02909wE=<f:m<a>=838pD>=i;|l;`<<72;qC?>h4}o:ge?6=:rB8?k5rn9fa>5<5sA98j6sa8ea94?4|@:9m7p`7de83>7}O;:l0qc6ke;296~N4;o1vb5ji:181M54n2we4h>50;0xL65a3td3i<4?:3yK76`<ug2n>7>52zJ07c=zf1o86=4={I10b>{i0l>1<7<tH21e?xh?m<0;6?uG32d8yk>b>3:1>vF<3g9~j=c02909wE=<f:m<`>=838pD>=i;|l;a<<72;qC?>h4}o:fe?6=:rB8?k5rn9ga>5<5sA98j6sa8da94?4|@:9m7p`7ee83>7}O;:l0qc6je;296~N4;o1vb5ki:181M54n2we4k>50;0xL65a3td3j<4?:3yK76`<ug2m>7>52zJ07c=zf1l86=4={I10b>{i0o>1<7<tH21e?xh?n<0;6?uG32d8yk>a>3:1>vF<3g9~j=`02909wE=<f:m<c>=838pD>=i;|l;b<<72;qC?>h4}o:ee?6=:rB8?k5rn9da>5<5sA98j6sa8ga94?4|@:9m7p`7fe83>7}O;:l0qc6ie;296~N4;o1vb5hi:181M54n2we5=>50;0xL65a3td2<<4?:3yK76`<ug3;>7>52zJ07c=zf0:86=4={I10b>{i19>1<7<tH21e?xh>8<0;6?uG32d8yk?7>3:1>vF<3g9~j<602909wE=<f:m=5>=838pD>=i;|l:4<<72;qC?>h4}o;3e?6=:rB8?k5rn82a>5<5sA98j6sa91a94?4|@:9m7p`60e83>7}O;:l0qc7?e;296~N4;o1vb4>i:181M54n2we5<>50;0xL65a3td2=<4?:3yK76`<ug3:>7>52zJ07c=zf0;86=4={I10b>{i18>1<7<tH21e?xh>9<0;6?uG32d8yk?6>3:1>vF<3g9~j<702909wE=<f:m=4>=838pD>=i;|l:5<<72;qC?>h4}o;2e?6=:rB8?k5rn83a>5<5sA98j6sa90a94?4|@:9m7p`61e83>7}O;:l0qc7>e;296~N4;o1vb4?i:181M54n2we5?>50;0xL65a3td2><4?:3yK76`<ug39>7>52zJ07c=zf0886=4={I10b>{i1;>1<7<tH21e?xh>:<0;6?uG32d8yk?5>3:1>vF<3g9~j<402909wE=<f:m=7>=838pD>=i;|l:6<<72;qC?>h4}o;1e?6=:rB8?k5rn80a>5<5sA98j6sa93a94?4|@:9m7p`62e83>7}O;:l0qc7=e;296~N4;o1vb4<i:181M54n2we5>>50;0xL65a3td2?<4?:3yK76`<ug38>7>52zJ07c=zf0986=4={I10b>{i1:>1<7<tH21e?xh>;<0;6?uG32d8yk?4>3:1>vF<3g9~j<502909wE=<f:m=6>=838pD>=i;|l:7<<72;qC?>h4}o;0e?6=:rB8?k5rn81a>5<5sA98j6sa92a94?4|@:9m7p`63e83>7}O;:l0qc7<e;296~N4;o1vb4=i:181M54n2we59>50;0xL65a3td28<4?:3yK76`<ug3?>7>52zJ07c=zf0>86=4={I10b>{i1=>1<7<tH21e?xh><<0;6?uG32d8yk?3>3:1>vF<3g9~j<202909wE=<f:m=1>=838pD>=i;|l:0<<72;qC?>h4}o;7e?6=:rB8?k5rn86a>5<5sA98j6sa95a94?4|@:9m7p`64e83>7}O;:l0qc7;e;296~N4;o1vb4:i:181M54n2we58>50;0xL65a3td29<4?:3yK76`<ug3>>7>52zJ07c=zf0?86=4={I10b>{i1<>1<7<tH21e?xh>=<0;6?uG32d8yk?2>3:1>vF<3g9~j<302909wE=<f:m=0>=838pD>=i;|l:1<<72;qC?>h4}o;6e?6=:rB8?k5rn87a>5<5sA98j6sa94a94?4|@:9m7p`65e83>7}O;:l0qc7:e;296~N4;o1vb4;i:181M54n2we5;>50;0xL65a3td2:<4?:3yK76`<ug3=>7>52zJ07c=zf0<86=4={I10b>{i1?>1<7<tH21e?xh>><0;6?uG32d8yk?1>3:1>vF<3g9~j<002909wE=<f:m=3>=838pD>=i;|l:2<<72;qC?>h4}o;5e?6=:rB8?k5rn84a>5<5sA98j6sa97a94?4|@:9m7p`66e83>7}O;:l0qc79e;296~N4;o1vb48i:181M54n2we5:>50;0xL65a3td2;<4?:3yK76`<ug3<>7>52zJ07c=zf0=86=4={I10b>{i1>>1<7<tH21e?xh>?<0;6?uG32d8yk?0>3:1>vF<3g9~j<102909wE=<f:m=2>=838pD>=i;|l:3<<72;qC?>h4}o;4e?6=:rB8?k5rn85a>5<5sA98j6sa96a94?4|@:9m7p`67e83>7}O;:l0qc78e;296~N4;o1vb49i:181M54n2we55>50;0xL65a3td24<4?:3yK76`<ug33>7>52zJ07c=zf0286=4={I10b>{i11>1<7<tH21e?xh>0<0;6?uG32d8yk??>3:1>vF<3g9~j<>02909wE=<f:m==>=838pD>=i;|l:<<<72;qC?>h4}o;;e?6=:rB8?k5rn8:a>5<5sA98j6sa99a94?4|@:9m7p`68e83>7}O;:l0qc77e;296~N4;o1vb46i:181M54n2we54>50;0xL65a3td25<4?:3yK76`<ug32>7>52zJ07c=zf0386=4={I10b>{i10>1<7<tH21e?xh>1<0;6?uG32d8yk?>>3:1>vF<3g9~j<?02909wE=<f:m=<>=838pD>=i;|l:=<<72;qC?>h4}o;:e?6=:rB8?k5rn8;a>5<5sA98j6sa98a94?4|@:9m7p`69e83>7}O;:l0qc76e;296~N4;o1vb47i:181M54n2we5l>50;0xL65a3td2m<4?:3yK76`<ug3j>7>52zJ07c=zf0k86=4={I10b>{i1h>1<7<tH21e?xh>i<0;6?uG32d8yk?f>3:1>vF<3g9~j<g02909wE=<f:m=d>=838pD>=i;|l:e<<72;qC?>h4}o;be?6=:rB8?k5rn8ca>5<5sA98j6sa9`a94?4|@:9m7p`6ae83>7}O;:l0qc7ne;296~N4;o1vb4oi:181M54n2we5o>50;0xL65a3td2n<4?:3yK76`<ug3i>7>52zJ07c=zf0h86=4={I10b>{i1k>1<7<tH21e?xh>j<0;6?uG32d8yk?e>3:1>vF<3g9~j<d02909wE=<f:m=g>=838pD>=i;|l:f<<72;qC?>h4}o;ae?6=:rB8?k5rn8`a>5<5sA98j6sa9ca94?4|@:9m7p`6be83>7}O;:l0qc7me;296~N4;o1vb4li:181M54n2we5n>50;0xL65a3td2o<4?:3yK76`<ug3h>7>52zJ07c=zf0i86=4={I10b>{i1j>1<7<tH21e?xh>k<0;6?uG32d8yk?d>3:1>vF<3g9~j<e02909wE=<f:m=f>=838pD>=i;|l:g<<72;qC?>h4}o;`e?6=:rB8?k5rn8aa>5<5sA98j6sa9ba94?4|@:9m7p`6ce83>7}O;:l0qc7le;296~N4;o1vb4mi:181M54n2we5i>50;0xL65a3td2h<4?:3yK76`<ug3o>7>52zJ07c=zf0n86=4={I10b>{i1m>1<7<tH21e?xh>l<0;6?uG32d8yk?c>3:1>vF<3g9~j<b02909wE=<f:m=a>=838pD>=i;|l:`<<72;qC?>h4}o;ge?6=:rB8?k5rn8fa>5<5sA98j6sa9ea94?4|@:9m7p`6de83>7}O;:l0qc7ke;296~N4;o1vb4ji:181M54n2we5h>50;0xL65a3td2i<4?:3yK76`<ug3n>7>52zJ07c=zf0o86=4={I10b>{i1l>1<7<tH21e?xh>m<0;6?uG32d8yk?b>3:1>vF<3g9~j<c02909wE=<f:m=`>=838pD>=i;|l44f<728qC?>h4}|~DEE|j<21j9kj51f6yEFEs9wKL]ur@A |
/xilinx/ml501/sim/bin/Makefile
144,15 → 144,15
|
# BootROM code, which generates a verilog array select values |
BOOTROM_FILE=bootrom.v |
BOOTROM_SW_DIR=$(BOARD_SW_DIR)/bootrom |
BOOTROM_SRC=$(shell ls $(BOOTROM_SW_DIR)/* | grep -v $(BOOTROM_FILE)) |
BOOTROM_VERILOG=$(BOOTROM_SW_DIR)/$(BOOTROM_FILE) |
BOARD_BOOTROM_SW_DIR=$(BOARD_SW_DIR)/bootrom |
BOOTROM_SRC=$(shell ls $(BOARD_BOOTROM_SW_DIR)/* | grep -v $(BOOTROM_FILE)) |
BOOTROM_VERILOG=$(BOARD_BOOTROM_SW_DIR)/$(BOOTROM_FILE) |
|
bootrom: $(BOOTROM_VERILOG) |
|
$(BOOTROM_VERILOG): $(BOOTROM_SRC) |
$(Q)echo; echo "\t### Generating bootup ROM ###"; echo |
$(Q)$(MAKE) -C $(BOOTROM_SW_DIR) $(BOOTROM_FILE) |
$(Q)$(MAKE) -C $(BOARD_BOOTROM_SW_DIR) $(BOOTROM_FILE) |
|
# Suffix of file to check after each test for the string |
TEST_OUT_FILE_SUFFIX=-general.log |
161,6 → 161,7
# Dynamically generated verilog file defining configuration for various things |
# Rule actually generating this is found in definesgen.inc file. |
TEST_DEFINES_VLG=test-defines.v |
.PHONY: $(TEST_DEFINES_VLG) |
# Set V=1 when calling make to enable verbose output |
# mainly for debugging purposes. |
ifeq ($(V), 1) |
355,7 → 356,7
# DUT compile script |
modelsim_dut.scr: rtl $(RTL_VERILOG_SRC) $(RTL_VERILOG_INCLUDES) $(BOOTROM_VERILOG) |
$(Q)echo "+incdir+"$(BOARD_RTL_VERILOG_INCLUDE_DIR) > $@; |
$(Q)echo "+incdir+"$(BOOTROM_SW_DIR) >> $@; |
$(Q)echo "+incdir+"$(BOARD_BOOTROM_SW_DIR) >> $@; |
$(Q)echo "+incdir+"$(BOARD_BENCH_VERILOG_INCLUDE_DIR) >> $@; |
$(Q)echo "+libext+.v" >> $@; |
$(Q)for module in $(BOARD_RTL_VERILOG_MODULES); do if [ -d $(BOARD_RTL_VERILOG_DIR)/$$module ]; then echo "-y " $(BOARD_RTL_VERILOG_DIR)/$$module >> $@; fi; done |
473,6 → 474,9
SIM_SW_IMAGE ?=flash.in |
endif |
|
# Amount to pad the image we'll load into the SPI flash |
HEX_IMAGE_PADDING ?=0x1c0000 |
|
.PHONY : sw |
sw: $(SIM_SW_IMAGE) |
|
488,7 → 492,8
.PHONY: $(SW_TEST_DIR)/$(TEST).flashin |
$(SW_TEST_DIR)/$(TEST).flashin: |
$(Q) echo; echo "\t### Compiling software ###"; echo; |
$(Q)$(MAKE) -C $(SW_TEST_DIR) $(TEST).flashin |
$(Q)$(MAKE) -C $(SW_TEST_DIR) $(TEST).flashin \ |
HEX_IMAGE_PADDING=$(HEX_IMAGE_PADDING) |
|
.PHONY: $(SW_TEST_DIR)/$(TEST).vmem |
$(SW_TEST_DIR)/$(TEST).vmem: |
514,7 → 519,7
# No VPI support for now. $(Q) if [ -e $(VPI_SRC_C_DIR) ]; then $(MAKE) -C $(VPI_SRC_C_DIR) clean; fi |
|
clean-bootrom: |
$(MAKE) -C $(BOOTROM_SW_DIR) clean |
$(MAKE) -C $(BOARD_BOOTROM_SW_DIR) clean |
|
clean-out: |
$(Q)rm -rf $(RTL_SIM_RESULTS_DIR)/*.* |
/xilinx/ml501/sw/board/include/board.h
16,11 → 16,18
// file, which is compiled and converted into Verilog for inclusion at |
// synthesis time. See bootloader/bootloader.S for details on each option. |
|
//#define BOOTROM_SPI_FLASH |
#define BOOTROM_GOTO_RESET |
#define BOOTROM_SPI_FLASH |
//#define BOOTROM_GOTO_RESET |
//#define BOOTROM_LOOP_AT_ZERO |
//#define BOOTROM_LOOP_IN_ROM |
|
// Address bootloader should start from in FLASH |
#define BOOTROM_ADDR_BYTE2 0x1c |
#define BOOTROM_ADDR_BYTE1 0x00 |
#define BOOTROM_ADDR_BYTE0 0x00 |
// Causes SPI bootloader to loop if SPI didn't give correct size of image |
#define SPI_RETRY_IF_INSANE_SIZEWORD |
|
// |
// Defines for each core (memory map base, OR1200 interrupt line number, etc.) |
// |
/xilinx/ml501/syn/timescale.v
File deleted
/xilinx/ml501/syn/ml501_ddr2_wb_if_cache.ngc
File deleted
\ No newline at end of file
/xilinx/ml501/syn/ml501.xcf
File deleted
/xilinx/ml501/syn/Makefile
File deleted
\ No newline at end of file
/xilinx/ml501/syn/ml501_xst.tpl
File deleted
/xilinx/ml501/syn/xst/run/Makefile
0,0 → 1,2
include ../bin/Makefile |
|
/xilinx/ml501/syn/xst/bin/Makefile
0,0 → 1,301
###################################################################### |
#### #### |
#### ORPSoC Xilinx Synthesis Makefile #### |
#### #### |
#### Author(s): #### |
#### - Julius Baxter, julius@opencores.org #### |
#### #### |
#### #### |
###################################################################### |
#### #### |
#### Copyright (C) 2009,2010 Authors and OPENCORES.ORG #### |
#### #### |
#### 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 #### |
#### #### |
###################################################################### |
|
# Name of the directory we're currently in |
CUR_DIR=$(shell pwd) |
|
# The root path of the board build |
BOARD_DIR ?=$(CUR_DIR)/../../.. |
PROJECT_ROOT=$(BOARD_DIR)/../../.. |
|
DESIGN_NAME=orpsoc |
|
SYN_DIR=$(BOARD_DIR)/syn/xst |
SYN_RUN_DIR=$(SYN_DIR)/run |
|
# Paths to other important parts of this test suite |
COMMON_RTL_DIR = $(PROJECT_ROOT)/rtl |
COMMON_RTL_VERILOG_DIR = $(COMMON_RTL_DIR)/verilog |
#COMMON_RTL_VHDL_DIR = $(COMMON_RTL_DIR)/vhdl |
|
BOARD_RTL_DIR=$(BOARD_DIR)/rtl |
BOARD_RTL_VERILOG_DIR=$(BOARD_RTL_DIR)/verilog |
# Only 1 include path for board builds - their own! |
BOARD_RTL_VERILOG_INCLUDE_DIR=$(BOARD_RTL_VERILOG_DIR)/include |
BOARD_DESIGN_VERILOG_DEFINES=$(BOARD_RTL_VERILOG_INCLUDE_DIR)/$(DESIGN_NAME)-defines.v |
#BOARD_RTL_VHDL_DIR = $(BOARD_RTL_DIR)/vhdl |
|
BACKEND_DIR=$(BOARD_DIR)/backend |
BACKEND_BIN_DIR=$(BACKEND_DIR)/bin |
|
# Set V=1 when calling make to enable verbose output |
# mainly for debugging purposes. |
ifeq ($(V), 1) |
Q= |
else |
Q ?=@ |
endif |
|
|
DEFINES_FILE_CUTOFF=$(shell grep -n "end of included module defines" $(BOARD_DESIGN_VERILOG_DEFINES) | cut -d ':' -f 1) |
DESIGN_DEFINES=$(shell cat $(BOARD_DESIGN_VERILOG_DEFINES) | sed s://.*::g | sed s:\`:\#:g | sed 's:^[ ]*::' | awk '{print};/^\#define/{printf "_%s=%s\n",$$2,$$2}' | grep -v PERIOD | cpp -P | sed s:^_::g | sed s:=$$::g ) |
# Rule to look at what defines are being extracted from main file |
print-defines: |
@echo; echo "\t### Design defines ###"; echo |
@echo "\tParsing "$(BOARD_DESIGN_VERILOG_DEFINES)" and exporting:" |
@echo $(DESIGN_DEFINES) |
|
|
# Backend tool path |
# Check that the XILINX_PATH variable is set |
ifeq ($(XILINX_PATH),) |
$(error XILINX_PATH environment variable not set. Set it and rerun) |
endif |
XILINX_SETTINGS_SCRIPT=$(XILINX_PATH)/settings32.sh |
XILINX_SETTINGS_SCRIPT_EXISTS=$(shell if [ -e $(XILINX_SETTINGS_SCRIPT) ]; then echo 1; else echo 0; fi) |
ifeq ($(XILINX_SETTINGS_SCRIPT_EXISTS),0) |
$(error XILINX_PATH variable not set correctly. Cannot find $$XILINX_PATH/settings32.sh) |
endif |
|
# |
# Verilog DUT source variables |
# |
# First we get a list of modules in the RTL path of the board's path. |
# Next we check which modules not in the board's RTL path are in the root RTL |
# path (modules which can be commonly instantiated, but over which board |
# build-specific versions take precedence.) |
|
# Paths under board/***/rtl/verilog we wish to exclude when getting modules |
BOARD_VERILOG_MODULES_EXCLUDE= include |
BOARD_VERILOG_MODULES_DIR_LIST=$(shell ls $(BOARD_RTL_VERILOG_DIR)) |
# Apply exclude to list of modules |
BOARD_RTL_VERILOG_MODULES=$(filter-out $(BOARD_VERILOG_MODULES_EXCLUDE),$(BOARD_VERILOG_MODULES_DIR_LIST)) |
|
# Rule for debugging this script |
print-board-modules: |
$(Q)echo echo; echo "\t### Board verilog modules ###"; echo; |
$(Q)echo $(BOARD_RTL_VERILOG_MODULES) |
|
# Now get list of modules that we don't have a version of in the board path |
# List others that cause clahes (ie. source listed, due to utterly pathetic XST |
# not supporting ability to specify search paths, and requiring includes but |
# not used in this board build, hence its includes are not there and result |
# in error.) |
COMMON_VERILOG_MODULES_EXCLUDE= include usbhostslave |
COMMON_VERILOG_MODULES_EXCLUDE += $(BOARD_RTL_VERILOG_MODULES) |
|
COMMON_RTL_VERILOG_MODULES_DIR_LIST=$(shell ls $(COMMON_RTL_VERILOG_DIR)) |
COMMON_RTL_VERILOG_MODULES=$(filter-out $(COMMON_VERILOG_MODULES_EXCLUDE), $(COMMON_RTL_VERILOG_MODULES_DIR_LIST)) |
|
# Rule for debugging this script |
print-common-modules-exclude: |
$(Q)echo echo; echo "\t### Common verilog modules being excluded due to board versions ###"; echo; |
$(Q)echo "$(COMMON_VERILOG_MODULES_EXCLUDE)" |
|
print-common-modules: |
$(Q)echo echo; echo "\t### Verilog modules from common RTL dir ###"; echo |
$(Q)echo $(COMMON_RTL_VERILOG_MODULES) |
|
# List of verilog source files (only .v files!) |
# Board RTL modules first |
VERILOG_SRC_PATHS=$(addprefix $(BOARD_RTL_VERILOG_DIR)/,$(BOARD_RTL_VERILOG_MODULES)) |
VERILOG_SRC_PATHS +=$(addprefix $(COMMON_RTL_VERILOG_DIR)/,$(COMMON_RTL_VERILOG_MODULES)) |
RTL_VERILOG_SRC=$(shell for modulepath in $(VERILOG_SRC_PATHS); do \ |
if [ -d $$modulepath ]; then \ |
ls $$modulepath/*.v; \ |
fi; done) |
|
# List of verilog includes from board RTL path - only for rule sensitivity |
RTL_VERILOG_INCLUDES=$(shell ls $(BOARD_RTL_VERILOG_INCLUDE_DIR)/*.*) |
|
# |
# VHDL DUT source variables |
# |
# VHDL modules |
#RTL_VHDL_MODULES=$(shell ls $(RTL_VHDL_DIR)) |
# VHDL sources |
#RTL_VHDL_SRC=$(shell for module in $(RTL_VHDL_MODULES); do if [ -d $(RTL_VHDL_DIR)/$$module ]; then ls $(RTL_VHDL_DIR)/$$module/*.vhd; fi; done) |
|
|
# |
# Dynamically created files included by different parts of the defines |
# |
|
BOARD_SW_DIR=$(BOARD_DIR)/sw |
|
# BootROM code, which generates a verilog array select values |
BOOTROM_FILE=bootrom.v |
BOARD_BOOTROM_SW_DIR=$(BOARD_SW_DIR)/bootrom |
BOOTROM_VERILOG=$(BOARD_BOOTROM_SW_DIR)/$(BOOTROM_FILE) |
# Export BOARD_PATH for the software makefiles |
BOARD_PATH=$(BOARD_DIR) |
export BOARD_PATH |
bootrom: $(BOOTROM_VERILOG) |
$(BOOTROM_VERILOG): |
$(MAKE) -C $(BOARD_BOOTROM_SW_DIR) $(BOOTROM_FILE) |
|
TIMESCALE_FILE=timescale.v |
SYNDIR_TIMESCALE_FILE=$(SYN_RUN_DIR)/$(TIMESCALE_FILE) |
$(SYNDIR_TIMESCALE_FILE): |
$(Q)echo "" > $@ |
|
SYN_VERILOG_DEFINES=synthesis-defines.v |
SYNDIR_SYN_VERILOG_DEFINES=$(SYN_RUN_DIR)/$(SYN_VERILOG_DEFINES) |
$(SYNDIR_SYN_VERILOG_DEFINES): |
$(Q)echo "\`define SYNTHESIS" > $@ |
$(Q)echo "\`define XILINX" >> $@ |
$(Q)echo "" >> $@ |
|
GENERATED_DEFINES = $(BOOTROM_VERILOG) |
GENERATED_DEFINES += $(SYNDIR_TIMESCALE_FILE) |
GENERATED_DEFINES += $(SYNDIR_SYN_VERILOG_DEFINES) |
|
|
FPGA_PART ?=xc5vlx50-ff676-1 |
OPT_MODE ?=Speed |
OPT_LEVEL ?=2 |
|
|
XILINX_FLAGS ?=-intstyle silent |
XILINX_XST_FLAGS ?= -power NO -glob_opt AllClockNets -write_timing_constraints NO -cross_clock_analysis NO -slice_utilization_ratio 100 -bram_utilization_ratio 100 -dsp_utilization_ratio 100 -safe_implementation No -fsm_style lut -ram_extract Yes -ram_style Auto -rom_extract Yes -rom_style Auto -auto_bram_packing NO -mux_extract YES -mux_style Auto -decoder_extract YES -priority_extract YES -shreg_extract YES -shift_extract YES -xor_collapse YES -resource_sharing YES -async_to_sync NO -use_dsp48 auto -iobuf YES -max_fanout 100000 -bufg 32 -register_duplication YES -equivalent_register_removal YES -register_balancing No -slice_packing YES -optimize_primitives NO -use_clock_enable Auto -use_sync_set Auto -use_sync_reset Auto -iob Auto -slice_utilization_ratio_maxmargin 5 |
|
XCF_FILE=$(DESIGN_NAME).xcf |
XST_FILE=$(DESIGN_NAME).xst |
PRJ_FILE=$(DESIGN_NAME).prj |
NGC_FILE=$(DESIGN_NAME).ngc |
NETLIST_FILE=$(DESIGN_NAME).v |
|
XST_PRJ_FILE_SRC_DECLARE=verilog work |
|
print-config: |
$(Q)echo; echo "\t### Synthesis make configuration ###"; echo |
$(Q)echo "\tFPGA_PART="$(FPGA_PART) |
$(Q)echo "\tOPT_MODE="$(OPT_MODE) |
$(Q)echo "\tOTP_LEVEL="$(OPT_LEVEL) |
$(Q)echo "\tXILINX_XST_FLAGS="$(XILINX_XST_FLAGS) |
$(Q)echo |
|
all: $(NGC_FILE) |
|
# Generate the .xst file |
# See this page for information on options: |
# http://www.xilinx.com/itp/xilinx4/data/docs/xst/command_line5.html |
$(XST_FILE): |
$(Q)echo; echo "\t#### Generating XST file ####"; echo |
$(Q)echo "# XST Script for ORPSoC Synthesis" > $@ |
$(Q)echo "# This file is autogenerated - any changes will be overwritten" >> $@ |
$(Q)echo "# See the Makefile in syn/xst/bin to make changes" >> $@ |
$(Q)echo "run" >> $@ |
$(Q)echo "-ifn "$(PRJ_FILE) >> $@ |
$(Q)echo "-ifmt mixed" >> $@ |
$(Q)echo "-top "$(DESIGN_NAME)"_top" >> $@ |
$(Q)echo "-ofmt NGC" >> $@ |
$(Q)echo "-ofn "$(NGC_FILE) >> $@ |
$(Q)echo "-p "$(FPGA_PART) >> $@ |
$(Q)echo "-opt_level "$(OPT_LEVEL) >> $@ |
$(Q)echo "-opt_mode "$(OPT_MODE) >> $@ |
$(Q)echo "-uc "$(XCF_FILE) >> $@ |
# $(Q)echo "elaborate " >> $@ |
# $(Q)echo -n "-vlgpath \"" >> $@ |
# option missing from XST - wtf?! $(Q)for vlogpath in $(VERILOG_SRC_PATHS); do \ |
echo -n $$vlogpath" "; done >> $@ |
# $(Q)echo "\"" >> $@ |
$(Q)echo "-vlgincdir { "$(BOARD_RTL_VERILOG_INCLUDE_DIR)" "$(BOARD_BOOTROM_SW_DIR) " }" >> $@ |
$(Q)echo >> $@ |
|
# Generate Xilinx project (.prj) file |
$(PRJ_FILE): $(RTL_VERILOG_SRC) |
$(Q)echo; echo "\t#### Generating Xilinx PRJ file ####"; |
# $(Q)echo "# Autogenerated XST .prj file" > $@ |
# $(Q)echo "# Any changes will be written over." >> $@ |
$(Q)for file in $(RTL_VERILOG_SRC); do \ |
echo $(XST_PRJ_FILE_SRC_DECLARE) $$file >> $@ ; \ |
done |
$(Q)echo >> $@ |
$(Q)echo |
|
# Constraints file |
$(XCF_FILE): |
$(Q)echo; echo "\t#### Generating Xilinx PRJ file ####"; echo |
$(Q)echo "# Autogenerated XST .prj file" > $@ |
$(Q)echo "#" >> $@ |
$(Q)echo "# Not much here, XST is smart enough to determine clocks through DCMs" >> $@ |
$(Q)echo "#" >> $@ |
$(Q)echo "# TODO: Potentially use the other XTAL for DDR RAM clocking" >> $@ |
$(Q)echo "#" >> $@ |
$(Q)echo "# 200MHz diff. XTAL used as main system clock" >> $@ |
$(Q)echo "NET \"sys_clk_in_p\" TNM_NET = \"sys_clk_in_p_grp\";" >> $@ |
$(Q)echo "NET \"sys_clk_in_n\" TNM_NET = \"sys_clk_in_n_grp\";" >> $@ |
$(Q)echo "TIMESPEC \"TS_sys_clk_in_p_grp\" = PERIOD \"sys_clk_in_p_grp\" 5 ns HIGH 50 %;" >> $@ |
$(Q)echo "TIMESPEC \"TS_sys_clk_in_n_grp\" = PERIOD \"sys_clk_in_n_grp\" 5 ns LOW 50 %;" >> $@ |
$(Q)echo "# 100 MHz user clock" >> $@ |
$(Q)echo "#NET \"sys_clk_in\" TNM_NET = \"sys_clk_in_grp\";" >> $@ |
$(Q)echo "#TIMESPEC \"TS_sys_clk_in\" = PERIOD \"sys_clk_in_grp\" 10 ns HIGH 50%;" >> $@ |
$(Q)echo "# Ignore the reset logic" >> $@ |
$(Q)echo "NET rst_n_pad_i* TIG;" >> $@ |
$(Q)echo "# SSRAM multicylce constraints:" >> $@ |
$(Q)echo "# Define the two clock domains as timespecs" >> $@ |
$(Q)echo "#NET dcm0_clkdv TNM_NET=\"wb_clk\";" >> $@ |
$(Q)echo "#TIMESPEC \"TS_wb_clk\" = PERIOD \"wb_clk\" 20 ns HIGH 10;" >> $@ |
$(Q)echo "#NET dcm0_clk0 TNM_NET = \"ssram_clk200\";" >> $@ |
$(Q)echo "#TIMESPEC \"TS_ssram_clk200\" = PERIOD \"ssram_clk200\" \"TS_wb_clk\" / 4;" >> $@ |
$(Q)echo "# Now define their relationship - logic should be configured so that there's" >> $@ |
$(Q)echo "# 1 WB cycle at all times before anything is sampled across domains" >> $@ |
$(Q)echo "#TIMESPEC \"TS_wb_clk_ssram_clk200\" = from \"wb_clk\" TO \"ssram_clk200\" 15 ns;" >> $@ |
$(Q)echo "#TIMESPEC \"TS_ssram_clk200_wb_clk\" = from \"ssram_clk200\" TO \"wb_clk\" 20 ns;" >> $@ |
|
# XST command |
$(NGC_FILE): $(PRJ_FILE) $(XST_FILE) $(XCF_FILE) $(GENERATED_DEFINES) |
$(Q)echo; echo "\t#### Running XST ####"; echo; |
$(Q)(. $(XILINX_SETTINGS_SCRIPT) ; xst -ifn $(XST_FILE) $(XILINX_FLAGS) $(XST_FLAGS) ) |
$(Q)echo |
|
# Netlist generation command |
$(NETLIST_FILE): $(NGC_FILE) |
$(Q)echo; echo "\t#### Generating verilog netlist ####"; echo; |
$(Q)(. $(XILINX_SETTINGS_SCRIPT) ; \ |
netgen -sim -aka -dir . -ofmt verilog $< -w $@ ) |
|
|
clean: |
$(Q)rm -rf *.* xst |
|
clean-sw: |
$(MAKE) -C $(PROJECT_ROOT)/sw/lib clean-all |
|
clean-all: clean-sw clean |
|
|
.PRECIOUS : $(NGC_FILE) $(XST_FILE) $(XCF_FILE) |
/README
1,15 → 1,8
ORPSoCv2 board builds |
ORPSoC board builds |
|
This directory contains scripts and support RTL for synthesizing ORPSoC to run on various vendors' FPGAs and boards. |
This directory contains a path for each technology vendor the board builds |
target. |
|
The directory hierarchy should first be organised by target FPGA vendor, and then by board model. Various configurations for each board may exist, and it's up to the maintainer of the board support to decide how that is handled (either several different make targets, or user modifiable scripts/constraints.) |
Under each of those vendor paths are the specific board paths. |
|
The boards/tools.inc file: |
|
This file contains various paths to vendor-specific FPGA development tools. It can be included in any Makefile used to synthesize the design, and is designed to provide a single place where users can set their own paths to tools, rather than having several hard-set paths throughout the scripts. |
|
Add path variables to this file if it's likely a user will need to supply their own due to differing installation locations of tools. |
|
Board build documentation |
|
Please include a readme in each board's path, containing a rundown on the different configurations possible and the commands necessary to start synthesis. |
See the main documentation in ORPSoC's root path doc/ for more information. |