OpenCores
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/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/ml501_ddr2_wb_if_cache.ngc File deleted \ No newline at end of file
/xilinx/ml501/syn/Makefile File deleted \ No newline at end of file
/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.

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.