From ca2814fb532d1eba7afda51c045b5cd6b25629a8 Mon Sep 17 00:00:00 2001 From: antoniovillena Date: Sun, 2 Oct 2016 21:18:17 +0200 Subject: [PATCH] =?UTF-8?q?A=C3=B1ado=20core=20Kyp?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- cores/AcornAtom/working/make.bat | 8 +- cores/AcornElectron/working/make.bat | 6 +- cores/Apple2/build/make.bat | 8 +- cores/Atari2600/zxuno/make.bat | 8 +- cores/BBCMicro/working/make.bat | 8 +- cores/JupiterAce/make.bat | 6 +- cores/KypSpectrum/ay8910.vhd | 336 ++++++++++ cores/KypSpectrum/clock.vhd | 84 +-- cores/KypSpectrum/dac.v | 34 + cores/KypSpectrum/dac.vhd | 27 +- cores/KypSpectrum/div.vhd | 67 ++ cores/KypSpectrum/ipcore_dir/drom.ngc | 3 + cores/KypSpectrum/ipcore_dir/drom.vhd | 140 ++++ cores/KypSpectrum/ipcore_dir/rom.ngc | 2 +- cores/KypSpectrum/ipcore_dir/rom.vhd | 2 +- cores/KypSpectrum/ipcore_dir/vram.ngc | 3 + cores/KypSpectrum/ipcore_dir/vram.vhd | 152 +++++ cores/KypSpectrum/keyboard.vhd | 121 ++-- cores/KypSpectrum/keyboard.zxuno.vhd | 356 ---------- cores/KypSpectrum/make.bat | 9 - cores/KypSpectrum/mixer.vhd | 53 +- cores/KypSpectrum/multiboot.v | 307 +++++++++ cores/KypSpectrum/papilio_zxuno_Pa.ucf | 63 -- cores/KypSpectrum/ps2.vhd | 27 +- cores/KypSpectrum/ram.vhd | 27 + cores/KypSpectrum/sd.vhd | 57 ++ cores/KypSpectrum/spi.v | 111 ++++ cores/KypSpectrum/ula.vhd | 191 ++++-- cores/KypSpectrum/vga.vhd | 94 --- cores/KypSpectrum/video.vhd | 26 - cores/KypSpectrum/work/make.bat | 9 + cores/KypSpectrum/work/zxkyp.prj | 20 + cores/KypSpectrum/{zxpp.ut => work/zxkyp.ut} | 1 - .../KypSpectrum/{zxpp.xst => work/zxkyp.xst} | 8 +- cores/KypSpectrum/ym2149.vhd | 623 ------------------ cores/KypSpectrum/zxkyp.vhd | 264 ++++++++ cores/KypSpectrum/zxkyp_zxuno_v4.ucf | 93 +++ cores/KypSpectrum/zxpp.prj | 18 - cores/KypSpectrum/zxpp.vhd | 240 ------- cores/MasterSystem/make.bat | 8 +- cores/NES/xilinx/make.bat | 8 +- cores/Oric/build/make.bat | 6 +- cores/SamCoupe/make.bat | 8 +- cores/Spectrum/make.bat | 8 +- cores/VIC20/ise/make.bat | 6 +- cores/generar.bat | 1 + cores/test/barras_de_color/make.bat | 6 +- .../test_pal_interlaced_progressive/make.bat | 6 +- cores/test/test_pal_ntsc/make.bat | 6 +- cores/test/test_sram_y_video/make.bat | 8 +- 50 files changed, 1992 insertions(+), 1691 deletions(-) create mode 100644 cores/KypSpectrum/ay8910.vhd create mode 100644 cores/KypSpectrum/dac.v create mode 100644 cores/KypSpectrum/div.vhd create mode 100644 cores/KypSpectrum/ipcore_dir/drom.ngc create mode 100644 cores/KypSpectrum/ipcore_dir/drom.vhd create mode 100644 cores/KypSpectrum/ipcore_dir/vram.ngc create mode 100644 cores/KypSpectrum/ipcore_dir/vram.vhd delete mode 100644 cores/KypSpectrum/keyboard.zxuno.vhd delete mode 100644 cores/KypSpectrum/make.bat create mode 100644 cores/KypSpectrum/multiboot.v delete mode 100644 cores/KypSpectrum/papilio_zxuno_Pa.ucf create mode 100644 cores/KypSpectrum/ram.vhd create mode 100644 cores/KypSpectrum/sd.vhd create mode 100644 cores/KypSpectrum/spi.v delete mode 100644 cores/KypSpectrum/vga.vhd delete mode 100644 cores/KypSpectrum/video.vhd create mode 100644 cores/KypSpectrum/work/make.bat create mode 100644 cores/KypSpectrum/work/zxkyp.prj rename cores/KypSpectrum/{zxpp.ut => work/zxkyp.ut} (97%) rename cores/KypSpectrum/{zxpp.xst => work/zxkyp.xst} (94%) delete mode 100644 cores/KypSpectrum/ym2149.vhd create mode 100644 cores/KypSpectrum/zxkyp.vhd create mode 100644 cores/KypSpectrum/zxkyp_zxuno_v4.ucf delete mode 100644 cores/KypSpectrum/zxpp.prj delete mode 100644 cores/KypSpectrum/zxpp.vhd diff --git a/cores/AcornAtom/working/make.bat b/cores/AcornAtom/working/make.bat index 5a5c5de..ed9a218 100644 --- a/cores/AcornAtom/working/make.bat +++ b/cores/AcornAtom/working/make.bat @@ -3,7 +3,7 @@ SET speed=3 SET ruta_ucf=..\src\Atomic SET ruta_bat=..\..\ call %ruta_bat%genxst.bat -rem call %ruta_bat%generar.bat v2 -rem call %ruta_bat%generar.bat v3 -call %ruta_bat%generar.bat v4 -rem call %ruta_bat%generar.bat Ap +rem call %ruta_bat%generar.bat v2 ZZ2 +rem call %ruta_bat%generar.bat v3 ZZ3 +call %ruta_bat%generar.bat v4 ZX1 +rem call %ruta_bat%generar.bat Ap ZZA diff --git a/cores/AcornElectron/working/make.bat b/cores/AcornElectron/working/make.bat index 775de3b..27b2d0b 100644 --- a/cores/AcornElectron/working/make.bat +++ b/cores/AcornElectron/working/make.bat @@ -3,6 +3,6 @@ SET speed=2 SET ruta_ucf=..\src\AcornElectron SET ruta_bat=..\..\ call %ruta_bat%genxst.bat -rem call %ruta_bat%generar.bat v2_v3 -call %ruta_bat%generar.bat v4 -rem call %ruta_bat%generar.bat Ap +rem call %ruta_bat%generar.bat v2_v3 ZZ3 +call %ruta_bat%generar.bat v4 ZX1 +rem call %ruta_bat%generar.bat Ap ZZA diff --git a/cores/Apple2/build/make.bat b/cores/Apple2/build/make.bat index c84aec7..0d35f3f 100644 --- a/cores/Apple2/build/make.bat +++ b/cores/Apple2/build/make.bat @@ -3,7 +3,7 @@ SET speed=2 SET ruta_ucf=..\source\apple2 SET ruta_bat=..\..\ call %ruta_bat%genxst.bat -rem call %ruta_bat%generar.bat v2 -rem call %ruta_bat%generar.bat v3 -call %ruta_bat%generar.bat v4 -rem call %ruta_bat%generar.bat Ap +rem call %ruta_bat%generar.bat v2 ZZ2 +rem call %ruta_bat%generar.bat v3 ZZ3 +call %ruta_bat%generar.bat v4 ZX1 +rem call %ruta_bat%generar.bat Ap ZZA diff --git a/cores/Atari2600/zxuno/make.bat b/cores/Atari2600/zxuno/make.bat index e0e8fe1..ef54768 100644 --- a/cores/Atari2600/zxuno/make.bat +++ b/cores/Atari2600/zxuno/make.bat @@ -3,7 +3,7 @@ SET speed=2 SET ruta_ucf=a2601 SET ruta_bat=..\..\ call %ruta_bat%genxst.bat -rem call %ruta_bat%generar.bat v2 -rem call %ruta_bat%generar.bat v3 -call %ruta_bat%generar.bat v4 -rem call %ruta_bat%generar.bat Ap +rem call %ruta_bat%generar.bat v2 ZZ2 +rem call %ruta_bat%generar.bat v3 ZZ3 +call %ruta_bat%generar.bat v4 ZX1 +rem call %ruta_bat%generar.bat Ap ZZA diff --git a/cores/BBCMicro/working/make.bat b/cores/BBCMicro/working/make.bat index 289ba64..c6f104b 100644 --- a/cores/BBCMicro/working/make.bat +++ b/cores/BBCMicro/working/make.bat @@ -3,7 +3,7 @@ SET speed=2 SET ruta_ucf=..\src\bbc_micro SET ruta_bat=..\..\ call %ruta_bat%genxst.bat -rem call %ruta_bat%generar.bat v2 -rem call %ruta_bat%generar.bat v3 -call %ruta_bat%generar.bat v4 -rem call %ruta_bat%generar.bat Ap +rem call %ruta_bat%generar.bat v2 ZZ2 +rem call %ruta_bat%generar.bat v3 ZZ3 +call %ruta_bat%generar.bat v4 ZX1 +rem call %ruta_bat%generar.bat Ap ZZA diff --git a/cores/JupiterAce/make.bat b/cores/JupiterAce/make.bat index 280de59..75180d6 100644 --- a/cores/JupiterAce/make.bat +++ b/cores/JupiterAce/make.bat @@ -3,6 +3,6 @@ SET speed=2 SET ruta_ucf=jupiter_ace SET ruta_bat=..\ call %ruta_bat%genxst.bat -rem call %ruta_bat%generar.bat v2_v3 -call %ruta_bat%generar.bat v4 -rem call %ruta_bat%generar.bat Ap +rem call %ruta_bat%generar.bat v2_v3 ZZ3 +call %ruta_bat%generar.bat v4 ZX1 +rem call %ruta_bat%generar.bat Ap ZZA diff --git a/cores/KypSpectrum/ay8910.vhd b/cores/KypSpectrum/ay8910.vhd new file mode 100644 index 0000000..f028152 --- /dev/null +++ b/cores/KypSpectrum/ay8910.vhd @@ -0,0 +1,336 @@ +-- ##################################################################################### +-- +-- #### #### ##### +-- ## ## ## ## +-- ## ## ##### ## ## ##### ## ###### ##### ##### ##### ## ## +-- ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## +-- ## ## ## ## ## ## ## ## ##### ## ## ## ## ## ## ## ## +-- ## ## ## ## ## ## ###### ## ###### ###### ## ## ###### +-- ## ## ## ## ## ## ## ## ## ## ## ## ## +-- ## ## ## ## ## ### ## ## ## ## ## ## ## ## ## ## ## ## ## +-- #### ######## ##### # ##### ##### ## ##### ##### ##### ##### +-- +-- ##################################################################################### + +library IEEE; +use IEEE.std_logic_1164.all; +use IEEE.numeric_std.all; + +entity ay8910 is + port( ----------------------------------------- + CLK : in std_logic; -- System Clock + CLC : in std_logic; -- PSG Clock + RESET : in std_logic; -- Chip Reset (set all Registers to '0', active low) + BDIR : in std_logic; -- Bus Direction (0 - read , 1 - write) + CS : in std_logic; -- Chip Select (active low) + BC : in std_logic; -- Bus control + DI : in std_logic_vector(7 downto 0); -- Data In + DO : out std_logic_vector(7 downto 0); -- Data Out + OUT_A : out std_logic_vector(7 downto 0); -- PSG Output channel A + OUT_B : out std_logic_vector(7 downto 0); -- PSG Output channel B + OUT_C : out std_logic_vector(7 downto 0) -- PSG Output channel C + ); ----------------------------------------- +end ay8910; + +architecture rtl of ay8910 is + + signal ClockDiv : unsigned (3 downto 0); -- Divide CLC + +----------------------- AY Registers ---------------------- + signal Period_A : std_logic_vector (11 downto 0); -- Channel A Tone Period (R1:R0) + signal Period_B : std_logic_vector (11 downto 0); -- Channel B Tone Period (R3:R2) + signal Period_C : std_logic_vector (11 downto 0); -- Channel C Tone Period (R5:R4) + signal Period_N : std_logic_vector (4 downto 0); -- Noise Period (R6) + signal Enable : std_logic_vector (7 downto 0); -- Enable (R7) + signal Volume_A : std_logic_vector (4 downto 0); -- Channel A Amplitude (R10) + signal Volume_B : std_logic_vector (4 downto 0); -- Channel B Amplitude (R11) + signal Volume_C : std_logic_vector (4 downto 0); -- Channel C Amplitude (R12) + signal Period_E : std_logic_vector (15 downto 0); -- Envelope Period (R14:R13) + signal Shape : std_logic_vector (3 downto 0); -- Envelope Shape/Cycle (R15) + signal Port_A : std_logic_vector (7 downto 0); -- I/O Port A Data Store (R16) + signal Port_B : std_logic_vector (7 downto 0); -- I/O Port B Data Store (R17) +----------------------------------------------------------- + signal Address : std_logic_vector (3 downto 0); -- Selected Register + + alias Continue : std_logic is Shape(3); ------------- Envelope Control + alias Attack : std_logic is Shape(2); -- + alias Alternate : std_logic is Shape(1); -- + alias Hold : std_logic is Shape(0); ------------- + + signal Reset_Req : std_logic; ------------------------- Envelope Reset Required + signal Reset_Ack : std_logic; ------------------------- Envelope Reset Acknoledge + signal Volume_E : std_logic_vector (3 downto 0); -- Envelope Volume + + signal Freq_A : std_logic; -- Tone Generator A Output + signal Freq_B : std_logic; -- Tone Generator B Output + signal Freq_C : std_logic; -- Tone Generator C Output + signal Freq_N : std_logic; -- Noise Generator Output + + function VolumeTable (value : std_logic_vector(3 downto 0)) return std_logic_vector is + variable result : std_logic_vector (7 downto 0); + begin + case value is ----------------------------------- Volume Table + when "1111" => result := "11111111"; + when "1110" => result := "10110100"; + when "1101" => result := "01111111"; + when "1100" => result := "01011010"; + when "1011" => result := "00111111"; + when "1010" => result := "00101101"; + when "1001" => result := "00011111"; + when "1000" => result := "00010110"; + when "0111" => result := "00001111"; + when "0110" => result := "00001011"; + when "0101" => result := "00000111"; + when "0100" => result := "00000101"; + when "0011" => result := "00000011"; + when "0010" => result := "00000010"; + when "0001" => result := "00000001"; + when "0000" => result := "00000000"; + when others => null;--------------------------- + end case; + return result; + end VolumeTable; + +begin + +------------------------- Write to AY --------------------- +process (RESET , CLK) +begin + if RESET = '0' then + Address <= "0000"; + Period_A <= "000000000000"; + Period_B <= "000000000000"; + Period_C <= "000000000000"; + Period_N <= "00000"; + Enable <= "00000000"; + Volume_A <= "00000"; + Volume_B <= "00000"; + Volume_C <= "00000"; + Period_E <= "0000000000000000"; + Shape <= "0000"; + Port_A <= "00000000"; + Port_B <= "00000000"; + Reset_Req <= '0'; + elsif rising_edge(CLK) then + if CS = '0' and BDIR = '1' then + if BC = '1' then + Address <= DI (3 downto 0); ----------------- Latch Address + else + case Address is ------------------------------- Latch Registers + when "0000" => Period_A (7 downto 0) <= DI; + when "0001" => Period_A (11 downto 8) <= DI (3 downto 0); + when "0010" => Period_B (7 downto 0) <= DI; + when "0011" => Period_B (11 downto 8) <= DI (3 downto 0); + when "0100" => Period_C (7 downto 0) <= DI; + when "0101" => Period_C (11 downto 8) <= DI (3 downto 0); + when "0110" => Period_N <= DI (4 downto 0); + when "0111" => Enable <= DI; + when "1000" => Volume_A <= DI (4 downto 0); + when "1001" => Volume_B <= DI (4 downto 0); + when "1010" => Volume_C <= DI (4 downto 0); + when "1011" => Period_E (7 downto 0) <= DI; + when "1100" => Period_E (15 downto 8) <= DI; + when "1101" => Shape <= DI (3 downto 0); + Reset_Req <= not Reset_Ack; -- Reset Envelope Generator + when "1110" => Port_A <= DI; + when "1111" => Port_B <= DI; + when others => null; + end case; + end if; + end if; + end if; +end process; + +------------------------- Read from AY -------------------- + +DO <= Period_A (7 downto 0) when Address = "0000" and CS = '0' and BDIR = '0' and BC = '1' else + "0000" & Period_A (11 downto 8) when Address = "0001" and CS = '0' and BDIR = '0' and BC = '1' else + Period_B (7 downto 0) when Address = "0010" and CS = '0' and BDIR = '0' and BC = '1' else + "0000" & Period_B (11 downto 8) when Address = "0011" and CS = '0' and BDIR = '0' and BC = '1' else + Period_C (7 downto 0) when Address = "0100" and CS = '0' and BDIR = '0' and BC = '1' else + "0000" & Period_C (11 downto 8) when Address = "0101" and CS = '0' and BDIR = '0' and BC = '1' else + "000" & Period_N when Address = "0110" and CS = '0' and BDIR = '0' and BC = '1' else + Enable when Address = "0111" and CS = '0' and BDIR = '0' and BC = '1' else + "000" & Volume_A when Address = "1000" and CS = '0' and BDIR = '0' and BC = '1' else + "000" & Volume_B when Address = "1001" and CS = '0' and BDIR = '0' and BC = '1' else + "000" & Volume_C when Address = "1010" and CS = '0' and BDIR = '0' and BC = '1' else + Period_E (7 downto 0) when Address = "1011" and CS = '0' and BDIR = '0' and BC = '1' else + Period_E (15 downto 8) when Address = "1100" and CS = '0' and BDIR = '0' and BC = '1' else + "0000" & Shape when Address = "1101" and CS = '0' and BDIR = '0' and BC = '1' else +-- Port_A when Address = "1110" and CS = '0' and BDIR = '0' and BC = '1' else +-- Port_B when Address = "1111" and CS = '0' and BDIR = '0' and BC = '1' else + "11111111"; + +-------------------------- Divide CLC --------------------- + +process (RESET , CLK) +begin + if RESET = '0' then + ClockDiv <= "0000"; + elsif rising_edge(CLK) then + if CLC = '1' then + ClockDiv <= ClockDiv - 1; + end if; + end if; +end process; + +------------------------ Tone Generator ------------------- + +process (RESET , CLK) + variable Counter_A : unsigned (11 downto 0); + variable Counter_B : unsigned (11 downto 0); + variable Counter_C : unsigned (11 downto 0); +begin + if RESET = '0' then + Counter_A := "000000000000"; + Counter_B := "000000000000"; + Counter_C := "000000000000"; + Freq_A <= '0'; + Freq_B <= '0'; + Freq_C <= '0'; + elsif rising_edge(CLK) then + if ClockDiv(2 downto 0) = "000" and CLC = '1' then + + -- Channel A Counter + if (Counter_A /= X"000") then + Counter_A := Counter_A - 1; + elsif (Period_A /= X"000") then + Counter_A := unsigned(Period_A) - 1; + end if; + if (Counter_A = X"000") then + Freq_A <= not Freq_A; + end if; + + -- Channel B Counter + if (Counter_B /= X"000") then + Counter_B := Counter_B - 1; + elsif (Period_B /= X"000") then + Counter_B := unsigned(Period_B) - 1; + end if; + if (Counter_B = X"000") then + Freq_B <= not Freq_B; + end if; + + -- Channel C Counter + if (Counter_C /= X"000") then + Counter_C := Counter_C - 1; + elsif (Period_C /= X"000") then + Counter_C := unsigned(Period_C) - 1; + end if; + if (Counter_C = X"000") then + Freq_C <= not Freq_C; + end if; + + end if; + end if; +end process; + +----------------------- Noise Generator ------------------- + +process (RESET , CLK) + variable NoiseShift : unsigned (16 downto 0); + variable Counter_N : unsigned (4 downto 0); +begin + if RESET = '0' then + Counter_N := "00000"; + NoiseShift := "00000000000000001"; + elsif rising_edge(CLK) then + if ClockDiv(2 downto 0) = "000" and CLC = '1' then + if (Counter_N /= "00000") then + Counter_N := Counter_N - 1; + elsif (Period_N /= "00000") then + Counter_N := unsigned(Period_N) - 1; + end if; + + if Counter_N = "00000" then + NoiseShift := (NoiseShift(0) xor NoiseShift(2)) & NoiseShift(16 downto 1); + end if; + + Freq_N <= NoiseShift(0); + + end if; + end if; +end process; + +---------------------- Envelope Generator ----------------- + +process (RESET , CLK) + variable EnvCounter : unsigned(15 downto 0); + variable EnvWave : unsigned(4 downto 0); +begin + if RESET = '0' then + EnvCounter := "0000000000000000"; + EnvWave := "11111"; + Volume_E <= "0000"; + Reset_Ack <= '0'; + elsif rising_edge(CLK) then + if ClockDiv = "0000" and CLC = '1' then + ------------ Envelope Period Counter ----------- + if (EnvCounter /= X"0000" and Reset_Req = Reset_Ack) then + EnvCounter := EnvCounter - 1; + elsif (Period_E /= X"0000") then + EnvCounter := unsigned(Period_E) - 1; + end if; + + ------------ Envelope Phase Counter ------------ + if (Reset_Req /= Reset_Ack) then + EnvWave := (others => '1'); + elsif (EnvCounter = X"0000" and (EnvWave(4) = '1' or (Hold = '0' and Continue = '1'))) then + EnvWave := EnvWave - 1; + end if; + + ---------- Envelope Amplitude Counter ---------- + for I in 3 downto 0 loop + if (EnvWave(4) = '0' and Continue = '0') then + Volume_E(I) <= '0'; + elsif (EnvWave(4) = '1' or (Alternate xor Hold) = '0') then + Volume_E(I) <= EnvWave(I) xor Attack; + else + Volume_E(I) <= EnvWave(I) xor Attack xor '1'; + end if; + end loop; + + Reset_Ack <= Reset_Req; + + end if; + end if; +end process; + +--------------------------- Mixer ------------------------- + +process (RESET , CLK) +begin + if RESET = '0' then + OUT_A <= "00000000"; + OUT_B <= "00000000"; + OUT_C <= "00000000"; + elsif rising_edge(CLK) then + if CLC = '1' then + if (((Enable(0) or Freq_A) and (Enable(3) or Freq_N)) = '0') then + OUT_A <= "00000000"; + elsif (Volume_A(4) = '0') then + OUT_A <= VolumeTable(Volume_A(3 downto 0)); + else + OUT_A <= VolumeTable(Volume_E); + end if; + + if (((Enable(1) or Freq_B) and (Enable(4) or Freq_N)) = '0') then + OUT_B <= "00000000"; + elsif (Volume_B(4) = '0') then + OUT_B <= VolumeTable(Volume_B(3 downto 0)); + else + OUT_B <= VolumeTable(Volume_E); + end if; + + if (((Enable(2) or Freq_C) and (Enable(5) or Freq_N)) = '0') then + OUT_C <= "00000000"; + elsif (Volume_C(4) = '0') then + OUT_C <= VolumeTable(Volume_C(3 downto 0)); + else + OUT_C <= VolumeTable(Volume_E); + end if; + end if; + end if; +end process; + +end rtl; diff --git a/cores/KypSpectrum/clock.vhd b/cores/KypSpectrum/clock.vhd index 3d879da..a5e193d 100644 --- a/cores/KypSpectrum/clock.vhd +++ b/cores/KypSpectrum/clock.vhd @@ -7,92 +7,56 @@ library unisim; entity clock is port ( - clock32 : in std_logic; - clockCPU : out std_logic; - clockVGA : out std_logic; - clockPS2 : out std_logic; - clockDAC : out std_logic; - clockAY : out std_logic + clock50 : in std_logic; + clock14 : out std_logic; -- 14.000 MHz + clock70 : out std_logic; -- 7.000 MHz + clock35 : out std_logic -- 3.500 Mhz ); end; architecture behavioral of clock is - signal ci32 : std_logic; - signal c1fb : std_logic; - signal c2fb : std_logic; - signal co25 : std_logic; - signal co14 : std_logic; + signal cfb : std_logic; + signal c50 : std_logic; + signal c14 : std_logic; signal count : std_logic_vector(1 downto 0); begin - Uibufg : ibufg port map(i => clock32, o => ci32); - IbufgVGA : bufg port map(i => co25, o => clockVGA); - IbufgPS2 : bufg port map(i => ci32, o => clockPS2); - IbufgDAC : bufg port map(i => co14, o => clockDAC); - IbufgCPU : bufg port map(i => count(1), o => clockCPU); - IbufgAY : bufg port map(i => count(1), o => clockAY); + Uibufg : ibufg port map(i => clock50, o => c50); + Uclock14 : bufg port map(i => c14, o => clock14); + Uclock70 : bufg port map(i => count(0), o => clock70); + Uclock35 : bufg port map(i => count(1), o => clock35); - Uclock1 : pll_base -- clkout0 = 25.143 MHz + uclock : pll_base generic map ( bandwidth => "optimized", clk_feedback => "clkfbout", - compensation => "system_synchronous", + compensation => "internal", + clkin_period => 20.000, + ref_jitter => 0.010, divclk_divide => 1, - clkfbout_mult => 22, + clkfbout_mult => 14, clkfbout_phase => 0.000, - clkout0_divide => 28, + clkout0_divide => 50, clkout0_phase => 0.000, - clkout0_duty_cycle => 0.500, - clkin_period => 31.250, - ref_jitter => 0.010 + clkout0_duty_cycle => 0.500 ) port map ( rst => '0', - clkin => ci32, - clkfbin => c1fb, - clkout0 => co25, + clkfbin => cfb, + clkfbout => cfb, + clkin => c50, + clkout0 => c14, clkout1 => open, clkout2 => open, clkout3 => open, clkout4 => open, clkout5 => open, - locked => open, - clkfbout => c1fb + locked => open ); - Uclock2 : pll_base -- clkout0 = 14 MHz - generic map - ( - bandwidth => "optimized", - clk_feedback => "clkfbout", - compensation => "system_synchronous", - divclk_divide => 1, - clkfbout_mult => 28, - clkfbout_phase => 0.000, - clkout0_divide => 64, - clkout0_phase => 0.000, - clkout0_duty_cycle => 0.500, - clkin_period => 31.250, - ref_jitter => 0.010 - ) - port map - ( - rst => '0', - clkin => ci32, - clkfbin => c2fb, - clkout0 => co14, - clkout1 => open, - clkout2 => open, - clkout3 => open, - clkout4 => open, - clkout5 => open, - locked => open, - clkfbout => c2fb - ); - - count <= count+1 when rising_edge(co14); + count <= count+1 when falling_edge(c14); end; diff --git a/cores/KypSpectrum/dac.v b/cores/KypSpectrum/dac.v new file mode 100644 index 0000000..3c4f5dc --- /dev/null +++ b/cores/KypSpectrum/dac.v @@ -0,0 +1,34 @@ +`define MSBI 9 // Most significant Bit of DAC input + +// this is a delta-sigma digital to analog converter + +module dac (o, i, clock, reset); + + output o; // this is the average output that feeds low pass filter + input [`MSBI:0] i; // dac input (excess 2**msbi) + input clock; + input reset; + + reg o; // for optimum performance, ensure that this ff is in IOB + reg [`MSBI+2:0] DeltaAdder; // Output of Delta adder + reg [`MSBI+2:0] SigmaAdder; // Output of Sigma adder + reg [`MSBI+2:0] SigmaLatch = 1'b1 << (`MSBI+1); // Latches output of Sigma adder + reg [`MSBI+2:0] DeltaB; // B input of Delta adder + + always @(SigmaLatch) DeltaB = {SigmaLatch[`MSBI+2], SigmaLatch[`MSBI+2]} << (`MSBI+1); + always @(i or DeltaB) DeltaAdder = i + DeltaB; + always @(DeltaAdder or SigmaLatch) SigmaAdder = DeltaAdder + SigmaLatch; + always @(posedge clock or posedge reset) + begin + if(reset) + begin + SigmaLatch <= #1 1'b1 << (`MSBI+1); + o <= #1 1'b0; + end + else + begin + SigmaLatch <= #1 SigmaAdder; + o <= #1 SigmaLatch[`MSBI+2]; + end + end +endmodule diff --git a/cores/KypSpectrum/dac.vhd b/cores/KypSpectrum/dac.vhd index 0fa16de..96ceb83 100644 --- a/cores/KypSpectrum/dac.vhd +++ b/cores/KypSpectrum/dac.vhd @@ -23,7 +23,7 @@ entity dac is generic ( - msbi : integer := 9 + msbi : integer := 7 ); port ( @@ -42,12 +42,25 @@ architecture rtl of dac is begin process(clock, reset) begin - if reset = '0' then - s <= to_unsigned(2**(msbi+1), s'length); - o <= '0'; - elsif rising_edge(clock) then - s <= s+unsigned(s(msbi+2)&s(msbi+2)&i); - o <= s(msbi+2); + -- if reset = '0' then + -- s <= to_unsigned(2**(msbi+1), s'length); + -- o <= '0'; + -- elsif rising_edge(clock) then + -- s <= s+unsigned(s(msbi+2)&s(msbi+2)&i); + -- o <= s(msbi+2); + -- end if; + + if rising_edge(clock) + then + if reset = '0' + then + s <= to_unsigned(2**(msbi+1), s'length); + o <= '0'; + else + s <= s+unsigned(s(msbi+2)&s(msbi+2)&i); + o <= s(msbi+2); + end if; end if; + end process seq; end; diff --git a/cores/KypSpectrum/div.vhd b/cores/KypSpectrum/div.vhd new file mode 100644 index 0000000..d21e672 --- /dev/null +++ b/cores/KypSpectrum/div.vhd @@ -0,0 +1,67 @@ +library ieee; + use ieee.std_logic_1164.all; + +entity div is + port + ( + clock : in std_logic; + reset : in std_logic; + mreq : in std_logic; + iorq : in std_logic; + m1 : in std_logic; + rd : in std_logic; + wr : in std_logic; + di : in std_logic_vector( 7 downto 0); + a : in std_logic_vector(15 downto 0); + -- + automap : out std_logic; + conmem : out std_logic; + mapram : out std_logic; + page : out std_logic_vector( 3 downto 0) + ); +end; + +architecture behavioral of div is + + signal m1on : std_logic := '0'; + +begin + + process(clock) + begin + if rising_edge(clock) + then + if reset = '0' + then + m1on <= '0'; + automap <= '0'; + conmem <= '0'; + mapram <= '0'; + page <= (others => '0'); + else + if iorq = '0' and wr = '0' and a(7 downto 0) = x"E3" + then + conmem <= di(7); + mapram <= di(6);-- or mapram; + page <= di(3 downto 0); + end if; + + if mreq = '0' and m1 = '0' + then + if a = x"0000" or a = x"0008" or a = x"0038" or a = x"0066" or a = x"04C6" or a = x"0562" + then + m1on <= '1'; -- activate automapper after this cycle + elsif a(15 downto 3) = x"1ff"&'1' + then + m1on <= '0'; -- deactivate automapper after this cycle + elsif a(15 downto 8) = x"3D" + then + automap <= '1'; + m1on <= '1'; -- activate automapper immediately + end if; + end if; + if m1 = '1' then automap <= m1on; end if; + end if; + end if; + end process; +end; diff --git a/cores/KypSpectrum/ipcore_dir/drom.ngc b/cores/KypSpectrum/ipcore_dir/drom.ngc new file mode 100644 index 0000000..198ed1a --- /dev/null +++ b/cores/KypSpectrum/ipcore_dir/drom.ngc @@ -0,0 +1,3 @@ +XILINX-XDB 0.1 STUB 0.1 ASCII +XILINX-XDM V1.6e +$3c744<,[o}e~g`n;"2*73>(-80!<74012345678=:0<=>?0123456789:;<=>?0123456789:;<=>?0123456789:;<=>?0123456789:;8=5?0123456789:98H>?0BD1GDGEJO298;4B221=67K8:9I=L;0:23456789:;<=;<136244EF;OLJI9L;146G7D7B9=:>89JJFEDA377E=9>??0830F=2??;?;<>9I17:;5F3AM1L;4=<;C9:;EDGF91H8<=?;90A7316<89:;<=>?0123B4D789>8<5>?1E03756AN;>HIN>:02A3GFEA;:9;99=?2B2FF12C<91;<<>LC2:04FE5MJ2H>5>J0147G=>?1L>H456ND5D;A1BDM?N?J=?7F24EFF6A0OL?<6>?4B33@<@7<8=N49;755@605D2;JL3H9;?30000<>5;=:=3N4H:?;124BC2DK==:=LKL0CAEEGDEK;ONJ=LMBCGEHIB6A7G2?C8MINH>HL452845>E0;H3M5>?A@C;4176<8>>=<:;150FA@EE8;KNIHONED2105=78KIM9:=NB3@6=0>AKLI8OI>NB@CBA66?IO>:O==:05670F44?M;:48:;D3F53=@382:;O=>L0117G56481>;H>9<356E0F66N9:98>;K343E6@@A:O:;N=M<922A5FBD81>;7=>LCBA;GFEDKJIH4=:LCBA@GF>38J:;ONMLCB:70153K9IHON>LCE75B=57M>;O?9>401D2G=4B8K2H<:??0013466799:M<=>?012@456489H;O:>419355>4K=8M<=?L896@7A55:=>H89M;4B35=1>3<182>K?L016E6C5A?MHNJ=:?05274>66L;I3<>:?8113G2EDN198=><;22D0G2>A;L<;N9>;063@46ED8M;N?I>J3BA6752739;M?>HIDGA2G23688K:O:==CB12BC@ALMNH;H>I112G@A@4LJ=:H?01I34:?I83F:E7>4;;;IJL9;DBDEACE4LJLH8=5?33154=6?N:9=<=>JF20@054A;O98L1123@6EA8L?>?>=<3112GF@AK:L;;=9LFB63?5540JOM89:K3253B5B69:>;=N9LCBA21F16K1:N>K=LBC104C>78;N;;?JIDEA4716<8:N3?H>?DD@76@67M0K3<4K?8D:1717DL92=JH=9F9D:6C5BJO9?J>K;6GC7G5E7<91;?K=L01F@3610:J:?>NML75205A67K:I<>NM<7BA375@6K:II;?HKE321444788??<6>;5B66G1>700?>9=M654767FC0;0L9893BE6@0?>?M4>:?;16A55@?1OOHI>6J3C5AA2DB0M9?H>O87E54AC@0;J=3;>M8FD15GD6A=?88HKH9052841E?;:9N4=L79B2B1@2>8=HJ?46621234517:M:3K2O>L7K10:305=7=19?H>:>7B::@661KO9?OOMK463;7A?28HL>;>;;153;25E0K1II?;>C23@36E79J:H?>>72BD0B5E4NJL;<N=L3B2E47E48:>;7=6I0D1:A<64>=LJ8I7;3C53F651?;>2JHK=26G@@11191N2H4=K031@A2@>KL9?J9>408;617B6;=;2?948>J4193=G170>>M5O?=7@1E35EFN?<;6E;9:MO;I>77BA34627J9:;:L6L2B27GC@D0M=;<841204<7A1=:0LH8=5?E123B=E0K9L;?=;5J1:H8=>;3B24FC31M<L14447477LM00F5=3CA89N9::MH9E2A;B=6A><2HJ5>LF4@0GF57KK:98>HJ7EDGB16<8O9H5>>MF22EG61788I8J4M=7BG3@C6789;NHK=LF210F@@?JJ2HJ:MI4323<6>4<91;J;::CE0B6D5>;M:OJ:>MDC4E765EM>885>=I6C2F2I9C1@=5360:N249=:0G4G4615MLKJII:;54:75517;<294<:=07106DC5>?:H44:?;0235CE3?:NHJ5:?B92@4C1299;J<>9IFEDG@CEAN:;MI>=8BGD@0FE789:;<=>?052855D48K:;<=>5:0HIJNKN7E2F4F?E;08I>9LI9230@1>4K0KN5HL9B87;GFC1M9;?7<=5IORVP?gcl{k7=?4?>5285137L:>O?9::14665A12L:>?9=>90527E=@7008=:N7=59337=>DML83=?:>835751=6<3CE\XZ5AEFQE974294:86?;:HLSQQ?H=K?496745@7<1NH8<40C3B62D<:HJJ<:L773A516<912;>5>;19:;47G08;8;9I=87BA@5F>58H=036@<=C4<91:N=?I0BD44F>AMKL;OK>?012166548;::<<?<6?L1B22BCEAKKIIJK>I010@454D8J8MLH;2<=NHL72D@BGD7C5285A0E8?N=?:H>7922@26AJK>O5L>;D6;EE561N>:IO=MLC0;7011BIO=ML7B57G227?927H73B233F65K::2=N>8C3F@@F6382;MO=JI35203F6E8OIJ06AA451A?OL;<02D315678JLNO=>?FBD@B54D:K>;7?>=D6@E1A26NO?O423CBEDGFIHKJML<697CBEDGF0M39O98ML245H641917@61LO9HON?84723<56C?H=N93;L6;CE@74>438;>;5;?;B1;0F43BMO;I:9L?67@3216D;=NM<=?>047B46E?MO88N>6=EDA@B0273;??H8:?57;56FC5:JKO4KO?AD6:425?1<=<5C07511CN:79146:B0G21;=2:<;;9G763133=03DBF606JOIN55O;0:0A0D02I:?LIA7;@A25D1HN0211GC50I:?N?L=N30D3E557KOH8;L=:E1G;416<:J:2?5>7FG34@2@10K>C?1LJ;8M7B8AF7=E4<919HNJ>FGA032@CLH:<8=><09D@45@A0>;M?NMNAC@BF<@4JL=3HOK891A4@C1?M:I?<6:=??124AE03ENOOI?O6?D2331=C7;:>H?>:?;22:<=5701:8<830FG2568HN3?=O<724B6F459J9395287453=M;8?NJ70E;3GA76N;9:89JJFG;70ACAK>32J8J;0424=<629O8?589L933G05=491:8I9>?7GD@3CC7>1323@F7799;;O=>8C12455E3829:OO9>>8G;;B666NJ=N<<9M7163456AKO:?IK>=11A;4=0B8>>;7><6D6G76<0C>;3=J5:=C04204338O<9?;:I9676BGD77;E06;0420;M;><<<4338JJUSS2MCJ0>?50?31?64=AGZ^X7JFB=12>586;2996B[[PTV9@JG;;80;2<=4338LQQVR\3NDN1=>:1<74>5488?:8=9>024B>=K2<=?7F7G3FG15NO9=:9=>7AC1454273:9H;>>801AEG254;J:8ONM?3E24GCEE9J2;45>>CC3@G4EE9J2;O:MI1BA@4677<=:0?:HJB4G07F16?;>;=HLI254F70C7???<=:;;LE1164=B498=5<82D0G5D?8:9HJ>><7G1EG4>3N0I3<=>?3BD03=E7?=N?<9L;0663716ALJI9O4M;0:1@36E09J=:O:MID2D3BF678:??H9=K262445@D;J::O=>7F0G0B4@7?JH;OOHM1G63?6E0==9I?=>8FB1@@023?8;=?EB67GDE78::NO=;;C100G2EA8988;31:7B5@AN9IHJK:KCBAEB2B3=?O>=IFG5@<26A<918HN=6B5C7BDC0>=<<>497FE1770D6N1IMO>HLE65F7F5BJO;<;=H723G16745:;8?<6=ICED1BF65LJLMI3GDEB076;9L9J?8KB8@5@G509J:;8OKIB52805E6:=9;5<>I4G@G7213;L98?>=<3213116A;:9;9=7I02A0=557;:;N<=>?B12A05=38MH>:;=;9C7E6C3A=9?;;H5>;16D:4A11:<3HNLL=0E;1AAE382>::9MH3=89N5L7:3835EGC>:O>;79?;0533266><;2<=:7ID07A0G4FJ?H>NOJ=B1C06=5F9J>:JL;;C6440D1E=0>=59>440A364E7?123;=>LBB23452688:H;I9:C63E4FEDK9I<;41970042=:>JO?8N99CB=AG1:8N24I895B7@E6G5M=?9M?>N8C;;?<0>:<8?836574>229=9;85<>F921555D;:IH<>>L33F04564K;N8=N9ID522<2C?N>I8<59NC1234A>01OHM<9JMD8:E4G7?88;087GAPTV9@LVF4:0;24?>0280?OIX\^1[HO33;2=55=32@D[YY4XEC>0>586:2>1CXZ_UU8GKUG;;3:5=?5;:NWWTPR=LFZI0>4?>5280G3EJ:L?5<7791:605C5::<9?KL:4273415E<9:M<9>I43DABC@CKOL9?:MJFG@A05=3L<9<;<=95156E0B31L<2:8>85@7G0N;99:08C4B>M9?O<1B:0D>H>;79KL02A:76508==;???:5576156789:;<=:?0136116799:;4516;E0>AMH==?4KN14322426>==2H<>>74261F021?>3?H?=734@53B1:8;==4:I41964FE2KJ:3>9JI2G:4AG254527A2G7>M3?N:>70C:F4400K19;:I:;C6074>36:=NO5?9;DDDE@7320=JNHHNJLF9;:B1?C;>N?=:8KF9C:<3273<;?:<685E57@657KO??9=6N3C:05DBFM<29?87;A316B754NM:>8?7;DB628E51@35B?;M=;H=A;:9?IJL01:AG7DFK0IION6?8G157D>?N:NNII6;0:702@G1N9?N<>:I58573=@>L9N:N;J6F1;4@G>799:;H>:6BE5G3A@?;J9;?N=<3B63?05>:0>:=5799B::A433L0?=I89M0DA3B@?E=;889H;?BB;4F2DB0L3<=9?6B4@4F16<==9N8NK70E0F0CE78?:8:>6L81F3G5B?LM<;O9ONLJ9B@B5755<91>9=<6A67:03?E>0:25I;>077@1066NM=:?;476=5?C;:?:89;;E5A@GFEDKO9I>KHIEB6G60732H5886E;G06319:>2;I8?75281016<<832::4<:94F606E5KHH29L>73C@45017<0?:5:7=460205=2?0?8??;LD074742198=J=FG5245679J2N;KLI73F1<@410;K;>LM39CBA7B?0;;;I=<<812BED3BLHOMOO><332F;786I473@=20>;:?:;I9:CE66731ENOL8:<:>285B3225>0?2H9885611122?J?<949>45807=<02<<==O>=;?;<:8057304021=?;I8>:89:;<43C1=K9?HKIC9:74>3F=;<249O>2E::60GD1MI24?=;AE6B66>>M>;;N4=85D6641?7<883==6:0930F=273=<047E<6@CK=:09N999DD:ACG40L93I8JI5ED:71B4K0E:2@5B20:2N;5H701D1B7B21LK88=5:FC:7AMN8K4@5A3132=K?=5O;=80C67DCBM=>NJ88K6E4:6@B6J3;1N>ON6604:75377:J9?J>=I8863?353M=?JM47IC@0142E?;0H=5O8I8C@F4D0?ML9?HN:?0GD;116<>=92?9:=22:GG17A<9?2OK<>3G2@G0@18J<8?K9732A7B1?49K:?497=1727<17A<91=84<K9?<68952@G==D59>:2HH6N370436@0;O=8J?L=0E@E772DM>8N8=J?29C5625?11?988:?;756E74F=<:44;>16;A26CCKL9O54O89D511<16<|xm:89#=41944224N9=HO9M8E5A606ECNJIM=99;:5B1E3AB4K=:MOOML1B274>16>899NHN67E86;4351C90;FD273>9MH=>?0ED:G<7C0LCEA6B2@6N=8I>O;?9B7@BG?>>=:0;87:50D4=G0>0M889=J;406F2C?29K93>I:647;55G3?:1NM:::<51751G36=MN>8=5863016D45:;89>LL<10325475=:?;0:5;440C?O<9?KKJ6GD:B2B>IOI2J:JI7BG;FA?1002M:;=JC@CBBDD>01;;>?=D7CE1D03M=K?I;6J19C;@@B2<<>679456F720MO:>;K866E265772?M;H;8??52746ACBMOO:M:K87GCE3G52<91=K992@B650KOLH;:;KB610G6B>>8<::>9IC610BCCALK:?;6DG0<5>NO?9J8J:12F5@CB31:3MJ84NOHJ<=L:CCAA06@3822:?N>L383F@CD3:O?M>?=IC13E7F67?9=M?=>83B50G27D?8IMI>;75<=09414@6?LL:N1573@62C;=:?=9>4822E7D@3IKINOHMI93C5@1?30M::N?;I82;02CC2108N>:9?N?IAC:1FC1A=OI:M>7ME240G6>2N<=>98=:D0374>>1?<:9?KL<322G<9=3549K5E67F4@0J>HC5;G50E?9M?:59;>20A1=A2731IH;96354174B:=:045:;45:70123<=:3<=:;45672@47>;:349:;C1:70167L89;;7F2G5G5B7L?:85;H991F54CEA08?N>?K?B301637?I?9HO;=;0:::=??:998>57;731@3I?>N=L:6876B00429=N;8>?;1930?=L8J;7;212341578M:;O=;?CG443G7788:I:97MH368H<=9;:?;9A0FF@CKONOJIL<6E;EA=6DNKO08J9H?11D3GC5DI300005=?KJ:;>=>L026@42GFI1O3OHK>A@1B32??I8895N:78B03<46B99K;B?;75HLB0A2103D8J9<==J?0C234C678:LHJ=H?F@;07F4F490461=CF1MNJ;8?N144@3132;8=68462=A>>M<3O=<9:419:6<@0L;3O=<:;657;BA11J0;2HI8:726G04G6N<298K:<39;BG5>?>MI=O58<61574>?48O>M=N>?66A14643;L>N8H:J4G;74F709>8<>:=:42@F5565?:>:8==<9GDG0027309345671E7@F7E>=M229O<:4374703ANJ3N9<<:3E@6=@@6M=HO9HL?54363GD0K=:05>HN7CC7ACDB8>92NKH:93A21=E6<:?:;=K6E106B7CFL<3=;=>?12A750>3K9>M8=56453247C1=18:FA<>?N8;9<8>?F2F1771>:=ON>>J7D2165A>1;?==8K:;0:;711>39=2:9<>:B0A7==51:8984=LM73;3F4E0;8?;4=JNA72B6A631M;?8<=J6363?<36M=?><>>>?15G@45648:L;?=ML0G2375378>:?J=??262@G16<1K>I4?<>3D5A<=BAK;<:KMNH8L0B2:<=C4<912JN:;4BG7GA5D<=89?4=?FGDF0C>54<;C8GB4<5?0J8?8:?JC2513AE490:?<6O?240E7G00I;N99OO:332B4D6F802NI>9JDDDF@@BEN18O;>>=98AF455?;JH5<1;MML7K08FEB0>CNK:IIK>9B528E2229J;::9?9F7:70C07KJ;89<>:826:4=369HL9?H=N29::1523<=2;=::298:8CC5:A@74?L<2>N;=485G1011?<3=?I8M297406311;==8:J:5BDG3CD382KJ8KO=6G47A1EFJ1O;>NL:02GEB30B=LJ>;7LOM42054=@4:M<;=K94AC2A4F5B;1K?N;KJE3G12@6?MM;:>=MJD0314F>A<9O;IH27?6912KOH_O312<;?DBCZH6:255NDEPB878?3HNO^L2<>99B@ATF4=437LJKR@>6:==FLMXJ0;07;@FGVD:0611JHI\N<9<;?DBCZH62255NDEPA858>3HNO^O2>0?;8EABUJ5;:245NDEPA8449j2KOH_L31283:<=FLMXI0<=18:CG@WD;9720MIJ]B=0=<>GCL[H7?364AEFQF92902KOH_L35?:8EABUJ5<546OKDS@?3;>9=6ID86:1@C319HK:EE63?G6?0L88H<>=CD11<@@4?;NJN5K?2@D1A2C0>L>;5KH96G;A52597;577@==1AK<;<=N6JF@74<3?F=<>N:N791@46=03F=<>=9;7N60F;53?F<91I:;=?8833666>;=N;>L8EG5GG2E4N0IHJ:>I812;?HJ2B1A4G@?19IH?>6=912FF6>5N18IN>6=3528F<@CM>9HN5HL21FEA326K=?HM>;J30G10A?B0=0H24O=K10;@E64DM1NH49OK1B600F>382HH;56940G3B3441D3@B<1FK8>;7OMM1B5;GCE48:8HJ=9M1BAE45@4K:9;??M:HJ=>?CB23B56D8J9;<9>4BD1G7A6E;1L3O>9NFBG06A5D<8988:<8?1E5EA5>78:H3M>698:@VWZOINF>;7N>>C15@74E4;9:<>?CG2G7@E7KKL3J=H4C16E7A37:J9N?HK63BD36F673B50A6ED?::;=KE5D0A@43N::=>9=91923472BE7>OI?==?<=?:5423103D<=><?547210338=:0O<:J4E47E=3?;0;H=:H8C4@B31EA8M=8;OJ;DBG@EF0D:>3:IHKJ17CG==5>:>?=8=5L1DF::<50AE=7@3M:I:HN>JDBD7=6B?:ONM:8KLF0F0A450I=:;<>=;0:A14613M<;3;L><988<4@1;56G0J>HO5HH=50557@55;H=J4I9M8E36=16?LB5673C@6NJI;8NKLC1A3G56AK>><8:9L012@<5>D;H;C63@3F16K>;MJNH?3D1@77@5NO:;?=O;I5HMA2C2=@E7L1O3H?6NEE0BA235?>3J8:>F75:1=2C=0>8IK9<44G632C3;O235<;755F312@ALH9OK57@F@00E>HIJJH8JA310=0BAKMIJHLO=0B6617G2?8I>O9?7BD;;36?F=8>;7N9>CBA447EDKJI<=N9>CB0FA@E7;O::O=;LCBA@GFEC<=9:O:M<30A45F1><=9??9>4C61E7F17K>:;JKJIBEAGB6@6K>L;O=HL3B3@5F66N9:9O=>=C13E6F1D09:I<=>?419@N;N=7M3G174>E?K0;J?NHL49113F@D8199O9ML096A4<4D:=?J<5L7F1A365>E;=I;?NMMFB;AGF273J2HOLJ7B64:3@67?ON38LL6DGG024C5L;L;OI>91552@22C?<>8;8J=623;E7DA<=:0O4=MD10FGG50MOI:<<<;C3A365E78JH:>=?K00245556LOOHOHM?D22F65B78O;M8=5LA@G0<653J0:;?>6L912;223C;M3MJNLJ971176D>1H3EA8O:JMK=JF0G3B564K>2=??8178GIM>8=1H@FO:;BNHE4181;8GJKJA]^NH<:4CNPF[BCIM[K_EB@PIODL3>EUMH^NH9>4D12F3G>?N0NM5>L>BG@0FD67JJNN9>6?DE00<7@4J;8MM=><92F7;419G6624I;O<;:;>C9;F152>=<989::>0E1GB0B>==?O::JJ6EC7@223=98??8=LF8F74>B3::L=9?;8BC67=0329=8298:>36F6=1?B=;?>9<:=9477561C1=3>I8<:542GBF273M>3N4=?85FF770B1::3=56911015455:8::?=?<052741120J8O9I>>312;=666>=:0H5O7BDC3BF47>OK?JOHJBG;11G4?L>O?H4M=9C;E1=2A11:OH=H6D75E4A4A0J:88=5K8C2;<6E7MLONI9=?0B2EA6>D0J2H<;OL4B6@0@6DN:9IJOL:=H>4=:804;7=DF8MLHOHH=2G63?A?1N:N9;IH<02A71CBD8J==?8M:71A0B6@5=J=3OKOL7GF4BA@>LO=;;K8J836EAf=CI]KT[DJ[H^C`?AGSIV]BHYFPB528@F44;0IM9L;=3GF5G@CCJ;HKKB66561E1=:IHNL:I0E2@3@1FNO?MJ9?;CDAF05=CK>L?321EGCEEJ:9M<=>M40AA3C109JL<=KHLCGD@76@382NNJO=LF2:F5F@6NO28;7IH?21A45AB49<98JKHMC65EBC43K:=:O:MLCGDEFF10NOL98N=>C65@GF@AN9L4DG620425918<89;604@GE474L18M>?664C:A=GD4KL89?L<7<9?H<9>L6:FJE969?2NBM1??>69GMD:697=0HDO313<4?AOF4895;6JFA=37:2=CAH6:9394DHC?53803MCJ0<917:FJE97?6>1OEL2>9?48@LG;97=0HDO321<4?AOF4;;5;6JFA=01:2=CAH69?394DHC?61803MCJ0?;17:FJE9416>1OEL2=7?58@LG;:14<7IGN<3;=2>BNI585;6JFA=13:<=CAH68=7>17:FJE9566?1OEL2<>79GMD:36?1OEL2:>79GMD:16?1OEL28>79GMD:?6?1OEL26>79GMG:76>1OEO2>0?58@LD;984<7IGM<00=3>BNJ5;82:5KIC>20;169GMG:607=0HDL318<5?AOE484<7IGM<32=3>BNJ58:2:5KIC>16;1>08;EKA8729?2NBN1<:>69GMG:5>7=0HDL326<4?AOE4;25;6JFB=0::3=CAK692:5KIC>04;?69GMG:497<0HDL33?48@LD;<7<0HDL35?48@LD;>7<0HDL37?48@LD;07<0HDL39?58@LVF494<7IG_A=3=3>BNXH69245KIQC?7?69?2NB\L2<>69GMUD;87=0HD^M<0<4?AOWJ58556JFPC>0>5803MC[N1=16:FLE969?2NDM1??>69GKD:697=0HBO313<4?AIF4895;6J@A=37:2=CGH6:9394DNC?53803MEJ0<917:FLE97?6>1OCL2>9?48@JG;97=0HBO321<4?AIF4;;5;6J@A=01:2=CGH69?394DNC?61803MEJ0?;17:FLE9416>1OCL2=7?58@JG;:14<7IAN<3;=2>BHI585;6J@A=13:<=CGH68=7>17:FLE9566?1OCL2<>79GKD:36?1OCL2:>79GKD:16?1OCL28>79GKD:?6?1OCL26>69GKDYUMN<0HBL30?58@JD;994<7IAM<03=3>BHJ5;92:5KOC>27;169GKG:6?7=0HBL319<4?AIE4835:6J@B=3=3>BHJ58;2:5KOC>15;1?08;EMA8759?2NDN1<;>69GKG:5=7=0HBL327<4?AIE4;=5;6J@B=0;:2=CGK695384DN@?6;14=7IAM<9<5?AIE404<7IAM_SGD3>BHXH6;2:5KOQC?5;12:2=CGYH7>374DNRA86<76>1OC]L33?63?@6>I988K55FF10?3=M2>;:;:50234360=13N<>8O;F60:@D2CMH=9;N<98?:485E1JME9FABC@B>KL2::=K9CGB=KOI8?H9BB23BCBE:MOI:K8J0CF:B374L;LHJN=K3D1757>>L08=5=:?;D5754G38;;88KO8586A16G5IJ>INI:;2BAGB@5CJH>3<>>M4C6A2747I9:9>=MNA528A2@>8MN=85J>10GB20461?=?HL;933A@G640::88?<8:9GA03706:09<4IM;A6D405=B08ONOKH>25:524>>8J3O??;N977EB372=?=:5I<8B8DB25BBNL9O5;7J48266A7382O298K9976:34?21:?N:48;963:1<52=>;13741063MMINI8;:4G6410541=>;7HOM85721036L>?O;9::14765A12L>>?55=;752F372591HI4KLI07400G3F<:OHJ9>4E@GFB1C4IK:?J5>8492@=@?B1LH9J?HIDC42G<5C;L;<9N>J956EAC4A00?8989615DEBF2?9M?>;:7890;74>CD89LM=N:?0227<627?8N:<::?70A45FE7:<;;<>>K0B1;05E??9IHNN>?01A2AF273LI:8<:?1562BC1>?0=M:K6LB5D:1<6111K:<9:KFG@@3@7>=<2<4IOLE6:GG1G2L=:0IK>>23@10476:8LIIKLLE@CBEDG2J0:;<>J<1230564FLHHNJ4:77DDAACGFLH888=5JF9@EGG0DJL9M>;9827D16FDD8JIHO>M?CBAE4F16NK?H<=>L731EF5E0LOI;O:9<;DLB7>CIJk1NBR\\TSCN[Dd@78:L8<N>?3BD33GB789IM<=>?FB1@BC66KJI8<>HJCB3@G5273O::<==LFB21G7DD8JLHNN?:050G766DN8L:<9>=0C025427JM<>>J3E630C@DKJL98=5I021G56E6;9I8?KH>3G23A272;J:>88;5??JDG@:G6C41:=OO;HJ9L<:4M<8711G26AK>>:5:J88663?C42M9K>H;O=<;8?:51CG@504;>?;=;;IE6A21161<0;?<4;L3G3;=0E7?8N>9?6=2CAB4?J::H?=M:CBA@BAE0I1I;=KLMBC@AFG1DK9N8M;8KC63@3C1CL;9?<6H;00350@@4K8?H?58J:466@5D260?>=<:;>D44@200C1JI;;IIMH3?5OJF70@E@44;1I9IH7MB44B76DAJ>HM=;M;97A74D7382L3<4=88C:1G3420OL;>9L>302E4FE6KO;N;ILIEGFBBFDD0123MO7I8G1G355701>;7K6?B4134FD59;I;=L>?5E:G15>E4F91FBD@7LOK;JOH7F81G<6CAIO:OJL>IBD7@6DC6::;89N9M5G;AB34ELK?5:DBHVC382LIJHHI2C@EEAC?:8:=IKKME1;:0ACDJ0=:59?L62D0G;7KM?98:B60278<<3HKM?401000229==>O9>MC3D3FA4A=<4FBA3GFD5K9II<>==:I3GD1BC64K9L8?NM;419E@127@C=1<>8=7KE32504GE=H;:M5:;5@321436=HMA33BF2273ONO;H?7656426B38M28L01:0A66C89;8?>6J2114GC@>JIF4:F=<0FM=:0JH:7A92@GAD5;J89O?8725A3470A:0LINO=?0EC;2>89C035=60<>??888:76762345<<8=:O?758A;GC578=8:O<>;0:DE474DKKIMM:IM4>K?6114;<=>?0B63?C@7KK:O4>HLB4:0GG1EN9:;;=7L262:455A9J=:O:M81B52B4E09J=H;>?0123456789:;<=>?0123456789:;<=>?0123456789:;<=>?01234567<91MJ5ML6123456789:;<=>?0123456789:;<=>?0123456789:;<=>?0123456789:?<6HIA@:;456789:;<=>?0123456789:;<=>?0123456789:;<=>?0123456789:;<=:?;GDEBF5789:;<=>?0123456789:;<=>?0123456789:;<=>?0123456789:;<=>?009D7>AIL11BBDZ__12;?LHN\YU;=55FNHVS[54?3@DBX]Q?399JJLRWW9>37D@FTQ]31==NF@^[S=87;HLJPUY7?>1BBDZP0158MKOSW9;<7D@FT^213>OIA]U;?:5FNHV\411J7:KMMQY7N>1BBDZP1158MKOSW8;<7D@FT^313>OIA]U:?:5FNHV\511769JJLRX91=0ECG[_0;4?LHN\V;J;6GAIU]2F2=NF@^T=N94IOKW[4B03@DBXR?J7:KMMQY6N>1BBDZP2158MKOSW;;<7D@FT^013>OIA]U9?:5FNHV\611N94IOKW[7B03@DBXR1BBDZP3158MKOSW:;<7D@FT^113>OIA]U8?:5FNHV\711;8;HLJPZ51?2CEEYQ<769JJLRX;1=0ECG[_2;4?LHN\V9J;6GAIU]0F2=NF@^T?N94IOKW[6B03@DBXR=J7:KMMQY4N?1BBDZPA79JJLRXJ01BBDZPFHNF2>JHIMOO:6B@CJGG3>JHO@IJ@n5BakmqR`ttafdh7@gaosTfvvohf;1E=:5AEUULVN2??12]O0>VFZ]k0\D@PBTQJ@]dUU^HFTM:5\RWCO[G0<[]K_Y^:4SXL@0>R^XL=87X> xrv\fimXelgTkh`jr`vlv*aii}c}ioch.ocwmscXjeaTahcPgdl,rdjnl'ixx!}alnlku]7U'xja#| s7]jjlr)zhg$_] \ILROAZVUAD;3"ob729V4*~t|VhggRcjm^efj`tf|fx$kco{iwgaib(ii}c}iRlck^ofiZabf&|j`dj!crvq+wgjdfe{W5Z0.zppZdkcVgnaRijndpbpjt(ogke{kmmf,meqoqmVhggRcjm^efj*pfd`n%o~z}/scnhjiwS:W%~lc!r.q5[lhn|'xja"]_.RKNTICXX[CF=5 }ala8QVCUW_CXEOBJ9:TJARYSQYO=7ZKN<1<5?RCF484=7ZKN<3<;?RCF4:0;2;5XE@>0:3=PMK6;2;5XEC>2:3=PMK69255XEC>0>5813^OI0>0m;VPJP@YAA[Y_o6Y]IUG\IJBBWHi0[_G[E^OL@@YE9m1SEAGAX,ZGF%6)9)Y_YO.?.0"BWFON>2RXXAGM7:ZPPZAILk1SSNA]E^KMBJ00:ZgiZKfbfx]i}foo33?]bjWDcecXjrrklj6=_{}90Uh}7;`fgvd:7601jhi|n<02==>gcl{k7=<0m;`fgvd:6:3:556okdsc?578?3hno~l2>>99b`atf4;437ljkr`>0:==flmxj0907;`fgvd:2611jhi|n<7<;?dbczh6<255ndepb8=8?3hno~l26>0:8fimXelgTkh`PgdlfvleXkz~y=55mlj]nahY`mgU{~dcPwhfwlZ7602hggRcjm^efjZvuadU|eizg_33;?gjlWdofSjka_qpjiZqnl}bT?<64bmi\i`kXoldT|gb_vkgpmY3:;1i`fQbel]dakYwz`gT{opdp\w3Ynf`~T=?<4bmi\i`kXoldT|gb_vpbtucuWz4bmi\i`kXoldTz:Q<2b9ahnYjmdUlicQy7^1/$]okagr+OB\J Fgmawgsg{*:8#9>4:`ooZkbeVmnbRx8_2]{wq743kf`S`kb_hlsqqYedfi`=95mlj]nahYh}}z~xRlcobi7?fjli11ocxzn<1<;?air|h6:255kotvb878?3me~xl2<>99gkprf4=437iazt`>6:==cg|~j0;0n;emvpd:029437iazt`>4:1=czfg?i;5krno/fimXelgTkh`Pv6]0(~eXimnymRyfduj>56*dWhno~oQxievk945+kVkgkb|ftio>5)eXiqcTeiQxievk91*dWhrbS~bnvd]w}uc:8%iTmugPtxrf94*dWksiR}fzd?:(fYdgdgdbRmck<2/gZbbnhgxRjnt`?EB)eXl`yjnakPw`pm[gnqWjeg`0>#c^fjwddkmV}j~cQmhw]qekab59&hShbnbnpbpliiWmcy1IQ rhabvai(X{erinz`s.dscd)}pbs{#wvdyq20s*owkfxnSig}/uos+Ze`'%iTicomld]06gosWhno~h}|=1.`[cgjaes6}o}t`l5(fYoizUjtdQfd<2/gZnf{Voem0?#c^jbwZcij4:'oRfns^kmn`esm{x64)eX`hyT~hile`?3(fYoizUyijmjb<2/gZnf{Vxxxl3?,b]kevYu{}h6454i8k96?;:02ym625=92d9;949;%045?41l2wX==h52679614=9:9j=l<52473`>U5;009m?4?:010e4g52;?>==5\11d96d4=83;8?l?n2;06147:0yP547=:>?1>9<5121b5d4=:1;041?43:3;8?l?n2;0615e<,;?m6?=m;W046?4|};9h6<5z22f94>{#:=914:5m28g94?702<0:4vF=5d9'60?=:0o0Vh?52z0f>:750;&100<5?h1e>9:51:9j62>=83.9884=7`9m612=:21b>5:50;&100<5?h1e>9:53:9j6=5=83.9884=7`9m612=<21b>5<50;&100<5?h1e>9:55:9j6=7=83.9884=7`9m612=>21b>5>50;&100<5?h1e>9:57:9j62`=83.9884=7`9m612=021b>:k50;&100<5?h1e>9:59:9j62b=83.9884=7`9m612=i21b>:m50;&100<5?h1e>9:5b:9j621=83.9884=7`9m612=k21b>4:50;9j6d7=831d>4j50;&100<51j1e>9:50:9l64o50;&100<51j1e>9:52:9l64650;&100<51j1e>9:54:9l6<1=83.9884=9b9m612==21d>4850;&100<51j1e>9:56:9l6<3=83.9884=9b9m612=?21i>;h50;394?6|,;?26N5=l1d=hm50;9~f73f290io7>50z&11<<5<>1C>;k4H37f?_c62jq8<7=>:73920<1:3<=6;=54e87g?2b2?>18o4r$362>7g43g;:m7<4n03a>7=i91o1<6`>b183?!7dk3;oh6*>ce82`a=#9lo1?6*>eg80?!7a8390(:29'5c4=;2.:j>4<;%3e0?5<,8l>6>5+1g495a4<,8l<64o4$0d;>=4<,8l26:j4$0db>a><,8li68o4$0d`>`g<,8lo63-;mj797;%034?b13-8;=7jk;%036?76<2.9<>4j7:&141d59'650=901/>=95849'65>=0j1/>=751ca8 76f21:0(?>m:9d8 76d2k90(?>k:0a4?!47m3?h7)"59903i6*=108a5>"59;02?6*=1286a>"59=0=h6*=148;2>"59?08i6*=1682`2=#:821=n<4$33:>3><,;;j64j4$33a>4e63-8:o7?mb:&15a=4>129'677=1>1/>?<5739'675=?h1/>?:5a69'673=??1/>?857c9'671=

?65a79'67?=;o1/>?o5759'67d=1;1/>?m5469'67b=;;1/>?k5829'67`=9l80(?=?:7`8 75628n87)<<2;3e?!44;3;oi6*=3586?!44=3;n46*=3781?!44?380(?=7:363?!43k38>46*=4e8e=>"5"5=;09995+24796>"5=?097)<9b;05e>"5>j09:l5f25:94?=n9981<75f1b`94?=n:=h1<75f11594?=n:=31<75f25c94?=n9jk1<75f17594?"5<<0::;5a25694>=n9??1<7*=448223=i:=>1=65f17694?"5<<0::;5a25696>=n9?91<7*=448223=i:=>1?65f27694?"5<<09:>5a25694>=n:?81<7*=448126=i:=>1=65f27394?"5<<09:>5a25696>=n:?:1<7*=448126=i:=>1?65`19494?"5<<0:485a25694>=h91>1<7*=4482<0=i:=>1=65`19094?"5<<0:485a25696>=h91;1<7*=4482<0=i:=>1?65`19294?"5<<0:485a25690>=h9>l1<7*=4482<0=i:=>1965`16g94?"5<<0:485a25692>=h9>n1<7*=4482<0=i:=>1;65`16a94?"5<<0:485a2569<>=h9>h1<7*=4482<0=i:=>1565`16c94?"5<<0:485a2569e>=h9>31<7*=4482<0=i:=>1n65`16594?"5<<0:485a2569g>=h9><1<7*=4482<0=i:=>1h65`16794?"5<<0:485a2569a>=h9>>1<7*=4482<0=i:=>1j65`16194?"5<<0:485a256955=?6>6<6:;o070?7532e:;=4?:%071?7?=2d9894>3:9l53`=83.9884>849m612=9=10c<8j:18'613=91?0b?:;:078?j7?l3:1(?:::0:6?k43<3;=76a>8b83>!43=3;396`=45823>=h91h1<7*=4482<0=i:=>1=554o0:b>5<#:=?1=5;4n367>4?<3f;357>5$366>4>23g8?87?n;:m2<=<72-8?97?75:l101<6j21d=5950;&100<60<1e>9:51b98k4>4290/>9;51978j72328n07b?88;29 722282>7c<;4;3f?>i6>m0;6)<;5;3;1>h5<=0:j65fbb83>!43=3hi7c<;4;28?ldf290/>9;5bc9m612=921bn44?:%071?de3g8?87<4;h`;>5<#:=?1no5a25697>=nk<0;6)<;5;`a?k43<3>07dm;:18'613=jk1e>9:55:9jg6<72-8?97lm;o070?0<3`i96=4+2579fg=i:=>1;65fc083>!43=3hi7c<;4;:8?le7290/>9;5bc9m612=121bnk4?:%071?de3g8?87o4;h`f>5<#:=?1no5a2569f>=njm0;6)<;5;`a?k43<3i07dl8:18'613=jk1e>9:5d:9jgg<72-8?97mn;o070?6<3`i26=4+2579gd=i:=>1=65fc983>!43=3ij7c<;4;08?le0290/>9;5c`9m612=;21bh94?:%071?ef3g8?87:4;hf0>5<#:=?1ol5a25691>=nl;0;6)<;5;ab?k43<3<07dj>:18'613=kh1e>9:57:9j`5<72-8?97mn;o070?><3`im6=4+2579gd=i:=>1565fcd83>!43=3ij7c<;4;c8?lec290/>9;5c`9m612=j21bon4?:%071?ef3g8?87m4;ha5>5<#:=?1ol5a2569`>=n91<65f14;94?"5<<0:9l5a25695>=n9<=1<7*=44821d=i:=>1>65f14494?"5<<0:9l5a25697>=n91865f14694?"5<<0:9l5a25691>=n9<91<7*=44821d=i:=>1:65f14094?"5<<0:9l5a25693>=n9<;1<7*=44821d=i:=>1465f14294?"5<<0:9l5a2569=>=n9=l1<7*=44821d=i:=>1m65f15g94?"5<<0:9l5a2569f>=n9=i1<7*=44821d=i:=>1o65f15`94?"5<<0:9l5a2569`>=n9=k1<7*=44821d=i:=>1i65f15;94?"5<<0:9l5a2569b>=n9=21<7*=44821d=i:=>1==54i064>5<#:=?1=8o4n367>47<3`;?:7>5$366>43f3g8?87?=;:k200<72-8?97?:a:l101<6;21b=9:50;&100<6=h1e>9:51598m424290/>9;514c8j72328?07d?92;29 72228?j7c<;4;35?>o6>80;6)<;5;36e>h5<=0:;65f17294?"5<<0:9l5a25695==?6<74;h36a?6=,;>>6<;n;o070?7f32c:9i4?:%071?72i2d9894>b:9j50e=83.9884>5`9m612=9j10e<;7:18'613=94383>!43=3;>m6`=4582b>=h9k?1<7*=4482f1=i:=>1<65`1c194?"5<<0:n95a25695>=h9k81<7*=4482f1=i:=>1>65`1c394?"5<<0:n95a25697>=n9?i1<7*=44822g=i:=>1<65f17c94?"5<<0::o5a25695>=n9?31<7*=44822g=i:=>1>65f17:94?"5<<0::o5a25697>=h9kk1<7*=4482f<=i:=>1<65`1c:94?"5<<0:n45a25695>=h9k=1<7*=4482f<=i:=>1>65`1c494?"5<<0:n45a25697>=h9h21<7*=4482e2=i:=>1<65`1`494?"5<<0:m:5a25695>=h9h>1<7*=4482e2=i:=>1>65`1`194?"5<<0:m:5a25697>=h9h81<7*=4482e2=i:=>1865`1`394?"5<<0:m:5a25691>=h9h:1<7*=4482e2=i:=>1:65`18d94?"5<<0:m:5a25693>=h90o1<7*=4482e2=i:=>1465`18f94?"5<<0:m:5a2569=>=h90i1<7*=4482e2=i:=>1m65`18`94?"5<<0:m:5a2569f>=h9031<7*=4482e2=i:=>1o65`18:94?"5<<0:m:5a2569`>=h90=1<7*=4482e2=i:=>1i65`18494?"5<<0:m:5a2569b>=h90?1<7*=4482e2=i:=>1==54o0;7>5<#:=?1=l94n367>47<3f;2?7>5$366>4g03g8?87?=;:m2=7<72-8?97?n7:l101<6;21d=4?50;&100<6i>1e>9:51598k4?7290/>9;51`58j72328?07b?nf;29 72228k<7c<;4;35?>i6il0;6)<;5;3b3>h5<=0:;65`1`f94?"5<<0:m:5a25695==?6<74;n3bf?6=,;>>6b:9l5d?=83.9884>a69m612=9j10ci3:1(?:::0c4?k43<3;n76a>8g83>!43=3;j;6`=4582b>=n:?31<7*=44812==i:=>1<65f27594?"5<<09:55a25695>=n:?<1<7*=44812==i:=>1>65f27794?"5<<09:55a25697>=n9:k1<7*=44827<=i:=>1<65f12:94?"5<<0:?45a25695>=n9:<1<7*=44827<=i:=>1>65f12794?"5<<0:?45a25697>=n9:>1<7*=44827<=i:=>1865f12194?"5<<0:?45a25691>=n9:81<7*=44827<=i:=>1:65f12394?"5<<0:?45a25693>=n9::1<7*=44827<=i:=>1465f13d94?"5<<0:?45a2569=>=n9;o1<7*=44827<=i:=>1m65f13f94?"5<<0:?45a2569f>=n9;h1<7*=44827<=i:=>1o65f13c94?"5<<0:?45a2569`>=n9;31<7*=44827<=i:=>1i65f13:94?"5<<0:?45a2569b>=n9;=1<7*=44827<=i:=>1==54i005>5<#:=?1=>74n367>47<3`;997>5$366>45>3g8?87?=;:k261<72-8?97?<9:l101<6;21b=?=50;&100<6;01e>9:51598m445290/>9;512;8j72328?07d?;1;29 72228927c<;4;35?>o6<90;6)<;5;30=>h5<=0:;65f12d94?"5<<0:?45a25695==?6<74;h30`?6=,;>>6<=6;o070?7f32c:?n4?:%071?7412d9894>b:9j56d=83.9884>389m612=9j10e<=8:18'613=9:30b?:;:0f8?l75k3:1(?:::01:?k43<3;n76g>2083>!43=3;856`=4582b>=zj;?i6=4mc;294~"5=0098:5G27g8L73b3So:6nu<0;12>37=><0=>789:7190a<3k3>n6;:54c8~ 7262;k87c?>a;08j47e2;1e=5k50:l2f5<73-;ho7?kd:&2ga<6lm1/=hk53:&2ac<43-;m<7=4$0d2>6=#9o81?6*>f280?!7a<390(1/=k959g9'5c>=:>1/=k75f69'5cg=>o1/=kl5619'5ce=?81/=kj51d18 4`b2?i0(>:0g6?!47:3>97)38o7)"58108n6*=08862>"58h0:nh5+21`9===#:9i1i55+21f960=#:9o1=n:4$32e>`6<,;;;6hm4$332>25<,;;96474$330>74<,;;?6?>510;8 74628;=7)<=2;60?!45;3lj7)<=4;f`?!45=3nn7)<=6;72?!45?3kn7)<=8;3gf>"5:00:=h5+23c97d=#:;h1=im4$30`>==#:;n1=95+23g9ea=#:;l1m6*=318257=#::;1n=5+2209ac=#::91=>5+22692>"5;<0:il5+22496>"5;>097)<<8;074>"58:4$376>7=#:<<1>6*=6c812d=#:?i1>;o4i36;>5<5<i6=44i024>5<26=44i36b>5<5<#:=?1=;84n367>5=6=4+2579530?6<54i047>5<#:=?1=;84n367>7=?6>54i347>5<#:=?1>;=4n367>5=?6<54i342>5<#:=?1>;=4n367>7=?6>54o0:5>5<#:=?1=5;4n367>5=?6<54o0:1>5<#:=?1=5;4n367>7=?6>54o0:3>5<#:=?1=5;4n367>1=?6854o05f>5<#:=?1=5;4n367>3=?6:54o05`>5<#:=?1=5;4n367>==?6454o05b>5<#:=?1=5;4n367>d=?6o54o054>5<#:=?1=5;4n367>f=?6i54o056>5<#:=?1=5;4n367>`=?6k54o050>5<#:=?1=5;4n367>46<3f;<>7>5$366>4>23g8?87?>;:m234<72-8?97?75:l101<6:21d=:>50;&100<60<1e>9:51298k40a290/>9;51978j72328>07b?9e;29 722282>7c<;4;36?>i60m0;6)<;5;3;1>h5<=0::65`19a94?"5<<0:485a256952=?6<64;n3;e?6=,;>>6<6:;o070?7>32e:444?:%071?7?=2d9894>a:9l5=>=83.9884>849m612=9k10c<68:18'613=91?0b?:;:0a8?j7?;3:1(?:::0:6?k43<3;o76a>7983>!43=3;396`=4582a>=h9?n1<7*=4482<0=i:=>1=k54ica94?"5<<0in6`=4583?>oei3:1(?:::c`8j7232810eo750;&100>6ol4n367>6=h5<=0?76gl4;29 7222kh0b?:;:498mf5=83.9884mb:l101<132ch>7>5$366>gd?6:54ib394?"5<<0in6`=458;?>od83:1(?:::c`8j7232010eoh50;&100>6ol4n367>g=h5<=0h76gm7;29 7222kh0b?:;:e98mfd=83.9884la:l101<732ch57>5$366>fg?6<54ib:94?"5<<0hm6`=4581?>od?3:1(?:::bc8j7232:10ei:50;&100>6no4n367>0=h5<=0=76gk1;29 7222jk0b?:;:698ma6=83.9884la:l1015$366>fg?6454ibg94?"5<<0hm6`=458b?>odl3:1(?:::bc8j7232k10enm50;&100>6no4n367>a=?6=54i07:>5<#:=?1=8o4n367>4=?6?54i075>5<#:=?1=8o4n367>6=6=4+257950g?6954i077>5<#:=?1=8o4n367>0=?6;54i071>5<#:=?1=8o4n367>2=?6554i073>5<#:=?1=8o4n367><=m6=4+257950g?6l54i06f>5<#:=?1=8o4n367>g=h6=4+257950g?6n54i06a>5<#:=?1=8o4n367>a=j6=4+257950g?6h54i06:>5<#:=?1=8o4n367>c=36=4+257950g?6<>4;h373?6=,;>>6<;n;o070?7632c:8;4?:%071?72i2d9894>2:9j513=83.9884>5`9m612=9:10e<:;:18'613=976g>6383>!43=3;>m6`=45822>=n9?;1<7*=44821d=i:=>1=:54i043>5<#:=?1=8o4n367>4><3`;>j7>5$366>43f3g8?87?6;:k21`<72-8?97?:a:l101<6i21b=8j50;&100<6=h1e>9:51c98m43d290/>9;514c8j72328i07d?:8;29 72228?j7c<;4;3g?>o6h5<=0:i65f15094?"5<<0:9l5a25695c=6=4+25795g2?6=54o0`0>5<#:=?1=o:4n367>4=?6?54o0`2>5<#:=?1=o:4n367>6=?6=54i04b>5<#:=?1=;l4n367>4=?6?54i04;>5<#:=?1=;l4n367>6=?6=54o0`;>5<#:=?1=o74n367>4=?6?54o0`5>5<#:=?1=o74n367>6=?6=54o0c5>5<#:=?1=l94n367>4=?6?54o0c0>5<#:=?1=l94n367>6=?6954o0c2>5<#:=?1=l94n367>0=?6;54o0;e>5<#:=?1=l94n367>2=?6554o0;g>5<#:=?1=l94n367><=?6l54o0;a>5<#:=?1=l94n367>g=?6n54o0;;>5<#:=?1=l94n367>a=?6h54o0;5>5<#:=?1=l94n367>c=6=4+25795d1?6<>4;n3:0?6=,;>>64?:%071?7f?2d9894>2:9l5<4=83.9884>a69m612=9:10c<7>:18'613=9h=0b?:;:068?j7>83:1(?:::0c4?k43<3;>76a>ag83>!43=3;j;6`=45822>=h9ho1<7*=4482e2=i:=>1=:54o0cg>5<#:=?1=l94n367>4><3f;jo7>5$366>4g03g8?87?6;:m2eg<72-8?97?n7:l101<6i21d=lo50;&100<6i>1e>9:51c98k4g>290/>9;51`58j72328i07b?n5;29 72228k<7c<;4;3g?>i61h0;6)<;5;3b3>h5<=0:i65`19d94?"5<<0:m:5a25695c=?6=54i344>5<#:=?1>;64n367>4=?6?54i346>5<#:=?1>;64n367>6=?6=54i01;>5<#:=?1=>74n367>4=?6?54i016>5<#:=?1=>74n367>6=?6954i010>5<#:=?1=>74n367>0=?6;54i012>5<#:=?1=>74n367>2=?6554i00e>5<#:=?1=>74n367><=?6l54i00g>5<#:=?1=>74n367>g=?6n54i00b>5<#:=?1=>74n367>a=?6h54i00;>5<#:=?1=>74n367>c=?6<>4;h312?6=,;>>6<=6;o070?7632c:>84?:%071?7412d9894>2:9j572=83.9884>389m612=9:10e<<<:18'613=9:30b?:;:068?l75:3:1(?:::01:?k43<3;>76g>4083>!43=3;856`=45822>=n9=:1<7*=44827<=i:=>1=:54i01e>5<#:=?1=>74n367>4><3`;8i7>5$366>45>3g8?87?6;:k27a<72-8?97?<9:l101<6i21b=>m50;&100<6;01e>9:51c98m45e290/>9;512;8j72328i07d?<7;29 72228927c<;4;3g?>o6:j0;6)<;5;30=>h5<=0:i65f13394?"5<<0:?45a25695c=o7>5bb83>5}#:<31>994H34f?M42m2Pn=7mt31805?062??1:?496;40>1b=1`81?k76j380b<6j:19m5g6=82.:on4>de9'5fb=9mn0(5+1g197>"6n=087)?i5;18 4`12hk0(0("6nl0j<6*>fg82f>"5890946*=008250=#:9818<5+2119f>"58=0?:6*=04844>"58?08h6*=06824>"58102n6*=088g3>"58h0m46*=0c82fc=#:9i1n95+21f93<=#:9o1>n5+21d95gb<,;;;67?>7:&156c99'643==11/><85419'641=>>1/><651b18 77>2h>0(??n:003?!46j3;oj6*=1b8a6>"59m0h7)<>e;::?!46n3m7)<=8;c`?!45138m7)<=a;;5?!45j3<27)<=c;`5?!45l3l?7)<=e;fa?!45n3h>7)<<0;;8 7562h20(?==:0g8 7542hh0(?=;:59'663=9l30(?=9:39'661=:2.9?54=419'61e=:<20(?:k:g;8 72b2o30(?;>:e78 7352;??7)<:5;08 7312;1/>;l527c8 70d2;7c<;4;28?j7?<3:1(?:::0:6?k43<3;07b?72;29 722282>7c<;4;08?j7?93:1(?:::0:6?k43<3907b?70;29 722282>7c<;4;68?j70n3:1(?:::0:6?k43<3?07b?8e;29 722282>7c<;4;48?j70l3:1(?:::0:6?k43<3=07b?8c;29 722282>7c<;4;:8?j70j3:1(?:::0:6?k43<3307b?8a;29 722282>7c<;4;c8?j7013:1(?:::0:6?k43<3h07b?87;29 722282>7c<;4;a8?j70>3:1(?:::0:6?k43<3n07b?85;29 722282>7c<;4;g8?j70<3:1(?:::0:6?k43<3l07b?83;29 722282>7c<;4;33?>i6?;0;6)<;5;3;1>h5<=0:=65`16394?"5<<0:485a256957=?6<=4;n35b?6=,;>>6<6:;o070?7332e::h4?:%071?7?=2d9894>5:9l5=b=83.9884>849m612=9?10c<6l:18'613=91?0b?:;:058?j7?j3:1(?:::0:6?k43<3;376a>8`83>!43=3;396`=4582=>=h9131<7*=4482<0=i:=>1=l54o0:;>5<#:=?1=5;4n367>4d<3f;3;7>5$366>4>23g8?87?l;:m2<6<72-8?97?75:l101<6l21d=:650;&100<60<1e>9:51d98k40c290/>9;51978j72328l07dll:18'613=jk1e>9:50:9jfd<72-8?97lm;o070?7<3`h26=4+2579fg=i:=>1>65fb983>!43=3hi7c<;4;18?le2290/>9;5bc9m612=<21bo94?:%071?de3g8?87;4;ha0>5<#:=?1no5a25692>=nk;0;6)<;5;`a?k43<3=07dm>:18'613=jk1e>9:58:9jg5<72-8?97lm;o070??<3`hm6=4+2579fg=i:=>1m65fbd83>!43=3hi7c<;4;`8?ldc290/>9;5bc9m612=k21bn:4?:%071?de3g8?87j4;haa>5<#:=?1ol5a25694>=nk00;6)<;5;ab?k43<3;07dm7:18'613=kh1e>9:52:9jg2<72-8?97mn;o070?5<3`n?6=4+2579gd=i:=>1865fd283>!43=3ij7c<;4;78?lb5290/>9;5c`9m612=>21bh<4?:%071?ef3g8?8794;hf3>5<#:=?1ol5a2569<>=nko0;6)<;5;ab?k43<3307dmj:18'613=kh1e>9:5a:9jga<72-8?97mn;o070?d<3`ih6=4+2579gd=i:=>1o65fc783>!43=3ij7c<;4;f8?l72j3:1(?:::07b?k43<3:07d?:9;29 72228?j7c<;4;38?l72?3:1(?:::07b?k43<3807d?:6;29 72228?j7c<;4;18?l72=3:1(?:::07b?k43<3>07d?:4;29 72228?j7c<;4;78?l72;3:1(?:::07b?k43<3<07d?:2;29 72228?j7c<;4;58?l7293:1(?:::07b?k43<3207d?:0;29 72228?j7c<;4;;8?l73n3:1(?:::07b?k43<3k07d?;e;29 72228?j7c<;4;`8?l73k3:1(?:::07b?k43<3i07d?;b;29 72228?j7c<;4;f8?l73i3:1(?:::07b?k43<3o07d?;9;29 72228?j7c<;4;d8?l7303:1(?:::07b?k43<3;;76g>4683>!43=3;>m6`=45825>=n9=<1<7*=44821d=i:=>1=?54i066>5<#:=?1=8o4n367>45<3`;?87>5$366>43f3g8?87?;;:k206<72-8?97?:a:l101<6=21b=;<50;&100<6=h1e>9:51798m406290/>9;514c8j72328=07d?90;29 72228?j7c<;4;3;?>o6=o0;6)<;5;36e>h5<=0:565f14g94?"5<<0:9l5a25695d=?6>6<;n;o070?7d32c:954?:%071?72i2d9894>d:9j51b=83.9884>5`9m612=9l10e<:=:18'613=907b?n1;29 72228k<7c<;4;78?j7f83:1(?:::0c4?k43<3<07b?6f;29 72228k<7c<;4;58?j7>m3:1(?:::0c4?k43<3207b?6d;29 72228k<7c<;4;;8?j7>k3:1(?:::0c4?k43<3k07b?6b;29 72228k<7c<;4;`8?j7>13:1(?:::0c4?k43<3i07b?68;29 72228k<7c<;4;f8?j7>?3:1(?:::0c4?k43<3o07b?66;29 72228k<7c<;4;d8?j7>=3:1(?:::0c4?k43<3;;76a>9583>!43=3;j;6`=45825>=h9091<7*=4482e2=i:=>1=?54o0;1>5<#:=?1=l94n367>45<3f;2=7>5$366>4g03g8?87?;;:m2=5<72-8?97?n7:l101<6=21d=lh50;&100<6i>1e>9:51798k4gb290/>9;51`58j72328=07b?nd;29 72228k<7c<;4;3;?>i6ij0;6)<;5;3b3>h5<=0:565`1``94?"5<<0:m:5a25695d=?6>6d:9l5a69m612=9l10c<6i:18'613=9h=0b?:;:0d8?l4113:1(?:::34;?k43<3:07d<97;29 7222;<37c<;4;38?l41>3:1(?:::34;?k43<3807d<95;29 7222;<37c<;4;18?l74i3:1(?:::01:?k43<3:07d?<8;29 72228927c<;4;38?l74>3:1(?:::01:?k43<3807d?<5;29 72228927c<;4;18?l74<3:1(?:::01:?k43<3>07d?<3;29 72228927c<;4;78?l74:3:1(?:::01:?k43<3<07d?<1;29 72228927c<;4;58?l7483:1(?:::01:?k43<3207d?=f;29 72228927c<;4;;8?l75m3:1(?:::01:?k43<3k07d?=d;29 72228927c<;4;`8?l75j3:1(?:::01:?k43<3i07d?=a;29 72228927c<;4;f8?l7513:1(?:::01:?k43<3o07d?=8;29 72228927c<;4;d8?l75?3:1(?:::01:?k43<3;;76g>2783>!43=3;856`=45825>=n9;?1<7*=44827<=i:=>1=?54i007>5<#:=?1=>74n367>45<3`;9?7>5$366>45>3g8?87?;;:k267<72-8?97?<9:l101<6=21b=9?50;&100<6;01e>9:51798m427290/>9;512;8j72328=07d?o6;l0;6)<;5;30=>h5<=0:565f12f94?"5<<0:?45a25695d=?6>6<=6;o070?7d32c:?:4?:%071?7412d9894>d:9j57e=83.9884>389m612=9l10e<<>:18'613=9:30b?:;:0d8?xd5=m0;6om50;2x 73>2;><7E<9e:J11`=]m80hw>>530855?022?81:;493;6g>1e=4n0`3>5=#9ji1=ij4$0ag>4bc3-;ni7=4$0ge>6=#9o:1?6*>f080?!7a:390(d99'5cc=m<1/=kh5539'656==<1/>=?5359'654=98l0(?><:d48 7632<=0(?>::368 7612;h0(?>8:4;8 76?2l1/>=752`9'65g=9l;0(?>m:828 76d2880(?>k:338 76b28;0(?>i:9:8 77728o;7)<>1;c1?!46:3oi7)<>3;3`2>"59=0m>6*=1486`>"59?0j96*=16801>"5910nh6*=18817>"59h0m?6*=1c82`3=#:8i1;h5+20f950=#:8o1?45+20d916=#:;:1585+2339`>"5:;0846*=228f6>"5:=0oj6*=24860>"5:?0:h6*=268f7>"5:102=6*=28802>"5:h0:i:5+23`9`d=#:;i1=n74$30g>c3<,;8n6:;4$30e>4><,;9;61e9'665=9?1/>>:57:&170<6mk1/>>852:&172<53-8847<;0:&10f<5=11/>9j5f89'61c=n01/>8?5d49'604=:<>0(?;::39'600=:2.9:o4=6`9'63e=:?k0e?:7:188m4652900e8:188m72>2900e?:n:188m4ef2900e<88:18'613=9?<0b?:;:198m402290/>9;51748j7232810e<8;:18'613=9?<0b?:;:398m404290/>9;51748j7232:10e?8;:18'613=:?90b?:;:198m705290/>9;52718j7232810e?8>:18'613=:?90b?:;:398m707290/>9;52718j7232:10c<69:18'613=91?0b?:;:198k4>3290/>9;51978j7232810c<6=:18'613=91?0b?:;:398k4>6290/>9;51978j7232:10c<6?:18'613=91?0b?:;:598k41a290/>9;51978j7232<10c<9j:18'613=91?0b?:;:798k41c290/>9;51978j7232>10c<9l:18'613=91?0b?:;:998k41e290/>9;51978j7232010c<9n:18'613=91?0b?:;:`98k41>290/>9;51978j7232k10c<98:18'613=91?0b?:;:b98k411290/>9;51978j7232m10c<9::18'613=91?0b?:;:d98k413290/>9;51978j7232o10c<9<:18'613=91?0b?:;:028?j70:3:1(?:::0:6?k43<3;:76a>7083>!43=3;396`=45826>=h9>:1<7*=4482<0=i:=>1=>54o04e>5<#:=?1=5;4n367>42<3f;=i7>5$366>4>23g8?87?:;:m221d=5m50;&100<60<1e>9:51698k4>e290/>9;51978j72328207b?7a;29 722282>7c<;4;3:?>i6000;6)<;5;3;1>h5<=0:m65`19:94?"5<<0:485a25695g=?6>6<6:;o070?7c32e:;54?:%071?7?=2d9894>e:9l53b=83.9884>849m612=9o10eom50;&100>6ol4n367>4=h5<=0976gm8;29 7222kh0b?:;:298mf3=83.9884mb:l101<332ch87>5$366>gd?6854ib194?"5<<0in6`=4585?>od:3:1(?:::c`8j7232>10en?50;&100>6ol4n367><=h5<=0j76gme;29 7222kh0b?:;:c98mgb=83.9884mb:l1015$366>gd?6i54ib`94?"5<<0hm6`=4583?>od13:1(?:::bc8j7232810en650;&100>6no4n367>6=1<7*=448`e>h5<=0?76gk3;29 7222jk0b?:;:498ma4=83.9884la:l101<132co=7>5$366>fg?6:54ie294?"5<<0hm6`=458;?>odn3:1(?:::bc8j7232010enk50;&100>6no4n367>g=h5<=0h76gl6;29 7222jk0b?:;:e98m43e290/>9;514c8j7232910e<;6:18'613=99;514c8j7232;10e<;9:18'613=99;514c8j7232=10e<;;:18'613=99;514c8j7232?10e<;=:18'613=99;514c8j7232110e<;?:18'613=99;514c8j7232h10e<:j:18'613=99;514c8j7232j10e<:m:18'613=99;514c8j7232l10e<:6:18'613=99;514c8j72328:07d?;7;29 72228?j7c<;4;32?>o6h5<=0:>65f15794?"5<<0:9l5a256956=?6=4+257950g?6<:4;h377?6=,;>>6<;n;o070?7232c::?4?:%071?72i2d9894>6:9j537=83.9884>5`9m612=9>10e<8?:18'613=95d83>!43=3;>m6`=4582e>=n91=o54i07`>5<#:=?1=8o4n367>4e<3`;>47>5$366>43f3g8?87?k;:k20a<72-8?97?:a:l101<6m21b=9<50;&100<6=h1e>9:51g98k4d2290/>9;51c68j7232910c0b?:;:098k4d5290/>9;51c68j7232;10c:18'613=9k>0b?:;:298m40d290/>9;517`8j7232910e<8n:18'613=9?h0b?:;:098m40>290/>9;517`8j7232;10e<87:18'613=9?h0b?:;:298k4df290/>9;51c;8j7232910c9;51c;8j7232;10c9;51`58j7232910c9;51`58j7232;10c9;51`58j7232=10c:18'613=9h=0b?:;:498k4g7290/>9;51`58j7232?10c<7i:18'613=9h=0b?:;:698k4?b290/>9;51`58j7232110c<7k:18'613=9h=0b?:;:898k4?d290/>9;51`58j7232h10c<7m:18'613=9h=0b?:;:c98k4?>290/>9;51`58j7232j10c<77:18'613=9h=0b?:;:e98k4?0290/>9;51`58j7232l10c<79:18'613=9h=0b?:;:g98k4?2290/>9;51`58j72328:07b?64;29 72228k<7c<;4;32?>i61:0;6)<;5;3b3>h5<=0:>65`18094?"5<<0:m:5a256956=?6<:4;n3:4?6=,;>>66:9l5dc=83.9884>a69m612=9>10cac83>!43=3;j;6`=4582e>=h9hk1<7*=4482e2=i:=>1=o54o0c:>5<#:=?1=l94n367>4e<3f;j97>5$366>4g03g8?87?k;:m2=d<72-8?97?n7:l101<6m21d=5h50;&100<6i>1e>9:51g98m70>290/>9;527:8j7232910e?88:18'613=:?20b?:;:098m701290/>9;527:8j7232;10e?8::18'613=:?20b?:;:298m45f290/>9;512;8j7232910e<=7:18'613=9:30b?:;:098m451290/>9;512;8j7232;10e<=::18'613=9:30b?:;:298m453290/>9;512;8j7232=10e<=<:18'613=9:30b?:;:498m455290/>9;512;8j7232?10e<=>:18'613=9:30b?:;:698m457290/>9;512;8j7232110e<9;512;8j7232h10e<9;512;8j7232j10e<290/>9;512;8j7232l10e<<7:18'613=9:30b?:;:g98m440290/>9;512;8j72328:07d?=6;29 72228927c<;4;32?>o6:<0;6)<;5;30=>h5<=0:>65f13694?"5<<0:?45a256956=?6<:4;h316?6=,;>>6<=6;o070?7232c:8<4?:%071?7412d9894>6:9j516=83.9884>389m612=9>10e<=i:18'613=9:30b?:;:0:8?l74m3:1(?:::01:?k43<3;276g>3e83>!43=3;856`=4582e>=n9:i1<7*=44827<=i:=>1=o54i01a>5<#:=?1=>74n367>4e<3`;8;7>5$366>45>3g8?87?k;:k26f<72-8?97?<9:l101<6m21b=??50;&100<6;01e>9:51g98yv44m3:1=4;t=34e>4cd348>m7l8;<06e?ee348>m7m6;<06e?e?348>m7m8;<06e?b3348>m7j<;<06e?b5348>m7j>;<06e?b7348>m7mi;<06e?eb348>m7mk;<06e?ed348>m7m9;<06e?74i2799l4>399>60g=9:<01?;n:016?842i3;8863=5`8276=::<4=37b>456348>m7?<0:?11d<6:o16>8o513g8973f288o70<:a;31f>;5=h0:>l5224c957?<5;?j6<<7;<06e?75?2799l4>279>60g=9;?01?;n:007?842i3;9?63=5`8267=::427348>m7?8o512f8973f289h70<:a;30f>;5=h0:?:5224c957e<5;?j6<<>;<06e?72j2799l4>589>60g=9<=01?;n:075?842i3;>963=5`8211=::435348>m7?:1:?11d<6=916>8o515d8973f28>n70<:a;37g>;5=h0:8o5224c951g<5;?j6<:6;<06e?7302799l4>469>60g=9=<01?;n:066?842i3;?863=5`8206=::406348>m7?90:?11d<6=o16>8o514g8973f28?o70<:a;36g>;5=h0:955224c951b<5;?j6<:=;<06e?71?2799l4>649>60g=9?>01?;n:040?842i3;=o63=5`822d=::40?348>m7<94:?11d<5>;16>8o52738973f2;<;70<:a;05=>;5=h09::5224c9630<5;?j6?8:;<06e?77?2799l4>cc9>60g=:=201?;n:36:?842i38?m63=5`810g=::5224`9`7=::2799o4>349>60d=9:>01?;m:010?842j3;8>63=5c8274=::>4=37a>44a348>n7?=e:?11g<6:m16>8l513`8973e288j70<:b;31=>;5=k0:>55224`9571<5;?i6<<9;<06f?75=2799o4>259>60d=9;901?;m:001?842j3;?=63=5c8205=::h4=37a>45b348>n7?8l512`8973e289<70<:b;31g>;5=k0:><5224`950d<5;?i6<;6;<06f?72?2799o4>579>60d=9?63=5c8217=::437348>n7?;f:?11g<68l515a8973e28>i70<:b;37e>;5=k0:845224`951><5;?i6<:8;<06f?73>2799o4>449>60d=9=>01?;m:060?842j3;=>63=5c8224=::4=37a>43a348>n7?:e:?11g<6=m16>8l514a8973e28?370<:b;37`>;5=k0:8?5224`9531<5;?i6<8:;<06f?71<2799o4>629>60d=9?i01?;m:04b?842j3;=563=5c822==::

;:4=37a>705348>n7<91:?11g<5>916>8l527;8973e2;<<70<:b;052>;5=k09:85224`9551<5;?i660d=:=k01?;m:36a?842k3h<70<:c;aa?842k3i270<:c;a;?842k3i<70<:c;f7?842k3n870<:c;f1?842k3n:70<:c;f3?842k3im70<:c;af?842k3io70<:c;a`?842k3i=70<:c;30e>;5=j0:?55224a9560<5;?h6<=:;<06g?74<2799n4>329>60e=9:801?;l:012?842k3;8<63=5b826c=::44c348>o7?=b:?11f<6:h16>8m513;8973d288370<:c;313>;5=j0:>;5224a9573<5;?h6<<;;<06g?75;2799n4>239>60e=9=;01?;l:063?842k3;8j63=5b827`=::j4=37`>45d348>o7?16>8m513a8973d288:70<:c;36f>;5=j0:945224a9501<5;?h6<;9;<06g?72=2799n4>559>60e=9<901?;l:071?842k3;>=63=5b8215=::42b348>o7?;c:?11f<68m515c8973d28>270<:c;37<>;5=j0:8:5224a9510<5;?h6<::;<06g?73<2799n4>429>60e=9?801?;l:042?842k3;=<63=5b821c=::43c348>o7?:c:?11f<6=116>8m515f8973d28>970<:c;353>;5=j0::85224a9532<5;?h6<8<;<06g?71k2799n4>6`9>60e=9?301?;l:04;?842k38=863=5b8127=::;?4=37`>707348>o7<99:?11f<5>>16>8m52748973d2;<>70<:c;333>;5=j0:oo5224a961><5;?h6?:6;<06g?43i2799n4=4c9>60b=j>16>8j5cc9>60b=k016>8j5c99>60b=k>16>8j5d59>60b=l:16>8j5d39>60b=l816>8j5d19>60b=ko16>8j5cd9>60b=km16>8j5cb9>60b=k?16>8j512c8973c289370<:d;302>;5=m0:?85224f9562<5;?o6<=<;<06`?74:2799i4>309>60b=9::01?;k:00e?842l3;9i63=5e826a=::44f348>h7?=9:?11a<6:116>8j51358973c288=70<:d;311>;5=m0:>95224f9575<5;?o6<<=;<06`?7392799i4>419>60b=9:l01?;k:01f?842l3;8h63=5e827f=::l4=37g>450348>h7?=c:?11a<6:816>8j514`8973c28?270<:d;363>;5=m0:9;5224f9503<5;?o6<;;;<06`?72;2799i4>539>60b=9<;01?;k:073?842l3;?j63=5e820`=::42e348>h7?;a:?11a<6<016>8j515:8973c28><70<:d;372>;5=m0:885224f9512<5;?o6<:<;<06`?71:2799i4>609>60b=9?:01?;k:07e?842l3;>i63=5e821a=::43?348>h7?;d:?11a<6<;16>8j51758973c28<>70<:d;350>;5=m0::>5224f953e<5;?o6<8n;<06`?7112799i4>699>60b=:?>01?;k:341?842l38==63=5e8125=::;74=37g>700348>h7<96:?11a<5><16>8j51158973c28ii70<:d;07<>;5=m09845224f961g<5;?o6?:m;|q1=0<72;qU>4;4=37b>40c3ty95;4?:3y]6<0<5;?j6<97;|q1=2<72;qU>494=37a>40c3ty9554?:3y]6<><5;?i6<97;|q1=<<72;qU>474=37`>40c3ty95l4?:3y]64l4=37g>40c3ty95i4?:3y]6l?4=37b>4ef348>n7?la:?11f<6kh16>8j51bc8yv4><3:19vP=959>60g=99801?;m:021?842k3;;>63=5e8247=z{;=<6=4:{_043>;5=h0ih63=5c8a`>;5=j0ih63=5e8a`>{t:>i1<7;t^35`?842i3hn70<:b;`f?842k3hn70<:d;`f?xu5?m0;68uQ26f8973f2kl01?;m:cd8973d2kl01?;k:cd8yv40m3:19vP=7d9>60g=k916>8l5c19>60e=k916>8j5c19~w71a290>wS<8f:?11dn7m=;<06g?e5348>h7m=;|q1<4<725?4=37b>f5<5;?i6n=4=37`>f5<5;?o6n=4}r0;6?6==rT94?5224c9g1=::5<2sW83?63=5`8`1>;5=k0h963=5b8`1>;5=m0h96s|29694?3|V;2?70<:a;`;?842j3h370<:c;`;?842l3h37p}=7983>0}Y:>201?;n:c;8973e2k301?;l:c;8973c2k30q~<89;291~X5?016>8o5b`9>60d=jh16>8m5b`9>60b=jh1v?9m:186[40j2799l4mc:?11g?7:182M42m2we?<750;3xL73b3td8=l4?:0yK60c51zJ11`=zf:;h6=4>{I06a>{i;8n1<7?tH37f?xh49l0;68k4}o117?6=9rB99h5rn207>5<6sA8>i6sa33794?7|@;?n7p`<2783>4}O:<7:182M42m2we??750;3xL73b3td8>l4?:0yK60c51zJ11`=zf:8h6=4>{I06a>{i;;n1<7?tH37f?xh4:l0;6 13, + c_addrb_width => 13, + c_algorithm => 1, + c_axi_id_width => 4, + c_axi_slave_type => 0, + c_axi_type => 1, + c_byte_size => 9, + c_common_clk => 0, + c_default_data => "FF", + c_disable_warn_bhv_coll => 0, + c_disable_warn_bhv_range => 0, + c_enable_32bit_address => 0, + c_family => "spartan6", + c_has_axi_id => 0, + c_has_ena => 1, + c_has_enb => 0, + c_has_injecterr => 0, + c_has_mem_output_regs_a => 0, + c_has_mem_output_regs_b => 0, + c_has_mux_output_regs_a => 0, + c_has_mux_output_regs_b => 0, + c_has_regcea => 0, + c_has_regceb => 0, + c_has_rsta => 0, + c_has_rstb => 0, + c_has_softecc_input_regs_a => 0, + c_has_softecc_output_regs_b => 0, + c_init_file => "BlankString", + c_init_file_name => "drom.mif", + c_inita_val => "0", + c_initb_val => "0", + c_interface_type => 0, + c_load_init_file => 1, + c_mem_type => 3, + c_mux_pipeline_stages => 0, + c_prim_type => 1, + c_read_depth_a => 8192, + c_read_depth_b => 8192, + c_read_width_a => 8, + c_read_width_b => 8, + c_rst_priority_a => "CE", + c_rst_priority_b => "CE", + c_rst_type => "SYNC", + c_rstram_a => 0, + c_rstram_b => 0, + c_sim_collision_check => "ALL", + c_use_bram_block => 0, + c_use_byte_wea => 0, + c_use_byte_web => 0, + c_use_default_data => 1, + c_use_ecc => 0, + c_use_softecc => 0, + c_wea_width => 1, + c_web_width => 1, + c_write_depth_a => 8192, + c_write_depth_b => 8192, + c_write_mode_a => "WRITE_FIRST", + c_write_mode_b => "WRITE_FIRST", + c_write_width_a => 8, + c_write_width_b => 8, + c_xdevicefamily => "spartan6" + ); +-- synthesis translate_on +BEGIN +-- synthesis translate_off +U0 : wrapped_drom + PORT MAP ( + clka => clka, + ena => ena, + addra => addra, + douta => douta + ); +-- synthesis translate_on + +END drom_a; diff --git a/cores/KypSpectrum/ipcore_dir/rom.ngc b/cores/KypSpectrum/ipcore_dir/rom.ngc index 7c94df9..e507123 100644 --- a/cores/KypSpectrum/ipcore_dir/rom.ngc +++ b/cores/KypSpectrum/ipcore_dir/rom.ngc @@ -1,3 +1,3 @@ XILINX-XDB 0.1 STUB 0.1 ASCII XILINX-XDM V1.6e -$2;244<,[o}e~g`n;"2*73>(-80!<74012345678=:0<=>?0123456789:;<=>?0123456789:;<=>?0123456789:;<=>?0123456789:;8=5?0123456789:;<=>?01:7456789:;<=>?0123456789:;<=><0723456689:;;H>;0:2345678;235;:=59362665=9>M9K890B260ACCKH8;ON99C863?56789:;45>?AB32@031:?>99K2G4EB16<89:;==>?41214577898;<=>7012BA@1709:345>L87326735;=?I?;M?05:;76D4<91;<=??23G@5566=L8=?:68F6G6<4CA0:L;:?<6;0E;@544389I?<6>?05632GB18H:9?LL?62F7A0?1>LK?=LO696D6E1?ENJH;:89N9611@7>BJ18:;H:?;12045G?L883JL;>71014B53>M>2257898;>97?052;556?1;>:>9>70837456789:9D;88;;O8L333705=781;9J9>7CB46445491?99>?M056;4546L089JJ>;7=>LC724=<75

>=M?81735746?883=5>704:35=E40H8923;=3D41LN999>401F:<=14?KHI89M;1502447?K?=8N=M>BED42F2>1;8=J:6IF53B4D@0ION8?=6N41934CBA;K3I4IK:B64F=2@?L:8MC1KHI:5KN3836B345=O38>NONFEC74>6689:?:;>95606<667:92=<<>701260F6A:MO3?:?NC1234D?78:O;>96;0B5@4=2739;394;959232<>2988GF=G55;L9>OH9<89F47F0B?H?;H=JJ661:G25FK=:0<H6M0626G=3??M>M;I=9C940<<1EL:;;>LO962@;5=0123<56709:?<=>;0121452789:?<=>=01236567:9:;4=?;0:21454?892;<=;=4@210D2F:1>99?:;6363457789;;==:=01231141=J=N<;>?0163?54589:;<=>?012345>78=:;<9>=3@F7=3?>?KHMJ598B9:5A@@6>OIM>?7IA1;2F16<8;834L6?4731E7G7I8:9M9?7CCFEFD32<=3299?961D;5721<9;:<<>>271207>><91;>9:=802501>2:=K=>9O;A3676043:<89<;>>09224024K9:;89O>04610562M9:?<6>=7053G0BEKJ8I:LJ82C:F0FED1=NJM<=6D9@B21C4;1>8?::=6D5E622DK12J?::?;10@57D6::=3?88KE3A66526KH=J??>L50G3@2EF1O?O9:;874F63CB0=MNMHK9:F52847C?89;J9=JKDCC00=1EJ?KN4=>819J41F50=?382:8MI>?24D3@06>N?9988?I7CF03600KO:IH4L89973E2B?8H>;7==L10071@C49L93I;JJF33;6D3374100::940523456789:;?01030367:=:;<=>?4193056509:;<=>?01234061:>>98=>?01274>6381:;>=<;00274=>5<92;<=5MM?==8K;0131A@048J9I>NJM2B30E22739>9><8J0335G=3E00;9>8>M7074@0?2=HNH<;MM697AFC609K>345:>080741758=>?8?>61103<14398:?>=:>09:10473<?>48?=33:034>6:31F4EC?2<8;>98J=62@;GD>1I1LMLN5KMMD2F@6D2>>>L?5?MKD4C;BCDC11?6L0263?503::M?BG;:54D??9H244M:92134=?FI=I3<;;NB0@25455:89NI=HK822;516<8?KIO8574AAA30K?NMIO>9NMJ<;=017FG2E6>JH?<6>9E4CG2F>?:12954>N41F1=6@BL9LB305GAG7;::O;O?79C170125MJ9>I>:?;14E2375L>=;<5>681C74A4>;OOH<;7I17AA6403KH:8?N;<9G4:F610<8KNJNK>DC0G05=7?K=3H>6?00DF22C2>JIN?47KE24G3ABEL?32H8MIC4@5@2G6<;;HI=8IE52GF3C382:

>795341679J>>5><9202@G@67K?KM;=9M85674F56;K;;N5M;D01A6F0B8?>;7=6=C9;2G20F<1>><48<05C3@=37:92;O?:8N:=N<6C@:04F54?=32>9>409;;4547>1:9846727;2E3E7<1295?=>0C6056EB0>LMOI;<28C50G170JKH48=<4193=675LHIN:?>957GBB72C=>I;4KHM15F1<<06;MI8>=6<811A<1BD>=;>JI;JDB274>6>;L;:::==57@053?D9;83846?E80B4626<8O;;5<:06:34C>689:;5N:?3B24<32739K;=KJL7GG1GG@7;1K==IKN5GAF6F77K1L89KLI81A31DDAN=H=5>;=86@260C?L=:0J=<5>?1123553389>9<=4:08?I4<;28A3=4B6>>2;:N??053BB64CLL;8M;86982712B711IH>KK;0:2AF524<=:;49<=335A56?4K=985;O630@;G=E??;86222=7>99:O98;826E46B4>=N35@00D7C<91;I:6:23@B6=75K8>>8L;?2DF2E0?DJM==M==;744E1202LO=>98H:7456B2@2?OL?<6>IF93EBC1ANKLMHKHIBGDEA4@A892=J>?;1@CA256208:J<8O>587B<<5A1M2>55:?;023A5G0:8;88?JI03;6<521003NIOK9E5;26:97181EB6B0NOKIM5>?0528557DK9:98L8L33231FEE;83;45:=203541B?J:8===?>19@60G7?0JH?H8>=F4D305=68;H?<=K7016@05GC>L>==9:9622;EGE09??JM89?61C0E251I823MOL<01034D7382;;8>6>35G05F4?89:?<=L>8501GD07NJ>9O4M?3G252601MJHIN=??B12A452?8>>;7833064DF<;9M;JO?9>E91F4364<8KN9K6?>93?9>4103E<66A11?:=5:>001440>?I9L8898A;B@@FILLN;;7K419267>C18I89?7>5507456789KJ<=67F71216G?IM2:N4::C95;=C66K1<>85J>2BG74>75L>?;8E:25775M0K884MM20;30<27389;I=?84E6EF12E:J:O;L7?7621E22?L9HJ9=H7F@7772GDL:H88>M<511:B12C9=:0=>??B12B0?4B460@620;:?<=>>1115116699;945C7130A<>H?>O9>8863G:672C?9L2M8M<75@7@4EFJ1NM9?9>4:37>LHW]]0JHI\N<0194;7338>1EC^ZT;CG@WD;9:0;2<:4158JJUSS2hno~l2>3;2=05=6:;K>N<:6C4;;E346N1:H>9J=140:574?0=>N;K=8=6977D545@319LJM87M49:@3;7<8=0E3B25G>88:29I?=A1;47G?2M;:3?5>?121356>>=89==488855G07?790;;M9>417;;4=678;:;<9>>01234565N133:H=8646G@C@?0L8;4;><83F@4=?C4MLB263<30C98?70I82?=>;7327715B3J;EB274A1AI9H>=NJ;812;542738=J>9J=C715AA43?1H>MH?L98F74206J8O85@624>489>9<9<97723676F8?;J<=:792G2@36>99MH;;0:3;<391;3O<=79E72FAGD==3:4<7?2435116<90H?O?MJ674317E7>8398;M;B3071AC7:K>;<4>?0521457B99?:8<>705035@?5<91:5O7;67G5@2D2:>?=94<;256A65E2LH89N;>K20@5466C10<;:47J1003=3?>>9>?<6?N2876724C=8:JO?89A4671421M;=;<=>=0B114CGB99>55274D77:9:OO;:?;0C61D37K:938O;;9C47G6>61;::8=J;01:341658K;:5I:735A2450389:;<;>?15285D?3I;>38<:LE113476A:9=IJ=:?A14B7A@>1:NNM>6=3500B162:0>J9?>>444605=6IH;H>96K281255EE1<;?88?>7E;A2DG289L=9=87B9A@15>EL9::49H7513A446382;I5NK=D@1574?1LJ8;<=9IF4760CE1;883:IM817@30=5?98402M?>;704AEGF@FJ>8>H;77FC2;41B7@B505KH6:4@7:FACBMH:M954;FFG5191;:=57:CC@BGFDDL<;9N8H?4192GN0ON9:;J2@0A=4B2><3MO<=>CD174>7C:OIJ4IMM42A6700EIL<84867C221<3>DM8;==NOLAEDFB20>>O2H?LO72DA22C2738N<;9>>A1A3GF@2LLON9;?I7G5F2=EEM>8N85K:71@302E0?;IIMNM<36704=6B;=:0=H?JDC@@340C<=N95<?8=5>EDC0265BNLK39;J?5CC:2=E6J:I879:G@<3C9?H3J4?;DEFEG6CB=J<259;;0:03645>099O?=>?B3G365?CJ0;;=<8?99;B1<71;1;;<9<7CEG4@7G0;92O630675<65:8:8HKH86654216<:9I<:I8<63;21431I><<=>=>CD4635760?8N94:J47C5@1;O9H;:?D645<3?4<919=;8K73F@172??9I?>?LMFGF7<5>F?9;=N=67DD1345D?=:2;<>=9C9G:=3>D90K?<6<>74A4F=?D<1IHO4?9D54E=672LONNOOK;3D7E46B0L;=M5:K?9D6445GF>0>>9?:?;33B05??:J:?:I<=C022032?<:>>OLH8BB:13;HLM752864B>LJ>=:?7MB255A<1A:J=IJ5MLMHHJ569B3@A@@17:O=:N>6NEB4:05=5:<;J:=9=512;EDG7=??2=N:?01@A0=E7JJ82N5><4@200567:>H38:86B403@<73828?O4<>BC1077BD>?N2O<9?6C4@1<649;3=?4O;7?;?8141476F8;>2<4>?08066527:=3:<56?6@114C61BG67>LIHO9>427DBB@5EM::OJLH8B8G4E0@AM==2;>?;D@C2G4351JNIJKK6D86FF47F1O<3H9JI41913716K;2?>=K;7C:GAF13?:2MO>KKF8DA@16BK93MO:L;D2C2023EM=98;=;IB4D74>40;9K9:>JMCBCBE=>09;8?>O=ME5;BE054003;>?7M38321=E0:?HH;HL;EBA066273;=2>47<8C:F55348;?;4:9N48;;@5BA89:?48<>24A14FG?L=8<556>E5314=D6<=:0>4=N122@=56AJH>NM:>K2CC11G53;J?I?;;=8=701621<2181:2>I7LB83:606689K8;IJN383:E425?O<=<48;0:0B5<7B89?84KM7A4230551I0?2MNL8A540@75B<83NM=8M7563435?==?>M:?=5163?7E7=LL>8L=L0G5E1C66?L:8J86?0254GF@1M=38O5:J8G75017?;8:3;>9?A1:7<16<:MK=9N<;73@;61@680HH94:L252265?D88K;I87731236F14J:3=O;>>5C:6E404<919I9=96567<@@A902<>;:7DCC@A@BE??O9:9=6BBAFB7BAJO<=887;B16EFDC0:H2?<6?0@:72467=9:N49KN1920F=D7?K32I>>>>5::?;3GA4G530J:I:?=<761:F4DD?:;2>>7=580@<1C4?K=JO<:>CGG51@C0>M28OO>735286C5>0;I6AE6B777>>1:<:96N25;6EA@>0ON9N<;J616A17@6:OHIO5?>C87005=480;2<=8?4134=653<;9>597>FCCA26@40=H;5H8?5@13E503829:>96924;1G5EC8O:;0101;7>?:51041402=O<;<:>J6C0@15071:<2:6099;O9>4304757E319:M:98N37404706LH:2?=;?65E6B34GF=?29N?7M13906?OIX\^1HDO33083:44<;;0BB][[:EKA867=87;87><5OTVSQQ112906?IR\Y__6IAM<2394;273:8NI9MLCDA@21@0M?899KM69DA50F5E>MN9EBFG556>M=:0?967492555G>9H2>=H6;FG2;3=5A08KNM8?N;K8A6:55D63I>;9MLH=9DDA@6?4?;=M=K=IC3CA5@0DN<=:889;0:17EGCE1MLJM96:3833G44:8093@E1738;O3I;;;79503C14JK<95LOJ2D63?63601=>;LM:A50GAG379OO;==;7636:EF7BI?:O<5H;275G6=24??9HJN7>91A3116<;<8HH8=92A@1FEA9JK:?47;EE0:@62F<918958>A12B2475I8>3=LH>A42B2563I9?95<8=7304BC6?:;3I4:=79D2;54?F:1K?<6=:987F7DBA1L:I:8?62C2G7GB8>NM98;?0610?8:O;6931;6E25A?KO<89K9HIN48JEG3505=4>L:>85J95GD:573F???MKLI=5:7L15GA6=B3829;8L:H4K67@:E72>>08KINK6K7C4A302>K:>;7>99E432641B89H=>9O;6CC1A1ED99H<>4M<27D455@54394AE52BN0=J?K6:50FB@87N02G@BC3FJ1;I=N=>DGFBA46689??8K6L4190=GEBN?HM8I<<520:1222=O;H4=?>540752?C=0I?O9;<4ED46<0>18;?:NK=44274>5FJ8L2<=9M8@5E6<51L8<9?9H6BG;A2GGEL=2MOH9;055@5@140J?I?==J807AE2273:KH45:M1D4:5576;?23665C4701>HOO7LD320G426<98J9LJ=92A0FDDF1=:0?LK925A:0<551;=2>9J=0107GA040H::O58=010074?1>;N3:817560DD;8=52:5LNC96204E>8H3H>6B@10@BEJ=N9::K>1656B@BC>H8MIO=;0:1A=D@79==IHO9831@7A47C1M;:O9;<7689C@@AD6?K>O4<672D63?6D>LMLN8K6?0123456789:;<=>?0123456789:;<=>?0123456789:;<=>?01234567<918O?;>313EF7EF<?::31:;<07498;2=<;L640A61?4:<888=I:=:3G;03=06<3I?9:?;2A423C1;MH=85?LB2;AG=E1019:O:<;6212<3ED9KKN5I8?8@7GAC6AN;;2O?6L15287A5DN8HN4N6;DE@34531=12;M:99E4A3A456>?O?5K:810;B0FG6;8;HJ49M977F05=4LH;85=>2OH47KAG@44AC6I83M?KL8DC1A<@@5>:9;<:894B@2=:<;??557361038J>;7>JKBG6;A6?A9HO2JN>N7BC@6G229<23>598D96G043D?H:;H4?J86D63@?2J?:NJ9>43G3AB221NKLMO>;641974G0D91:;<;6?092260E0==::MHM;4D:@44G?L=:O=9?=B37B4<@0>9:I26D067F3E3>;>J>O>?374GJ8LBG;@F=273=8;<=>?0503456789:;<=>?01234=6789:;<=>?0123456789:;<=>?01204563<=:08?>?432345239J>??N>L3B230=6791LH?59L7B23456789=N=5>?39134567:9>38=5;2170=G20>L9;9O6=01G73A@FIL2O9I?K0607@FE4NM=9O9H7DD77274F9MN:NL9;0:675D6DK9<3M=6=3G:52=G78?8:N:96DD16B@E78=:><986F26;23GBM><=;9=K8B63?134NMI9><7L237F077E;;:;48O7FCDG4F259:?I=;:;8ED@670B80H88>6N752@716<H5?<;2127A5GB0<;3I=>>D007E20509;;=<;K22A04105NJ:;M=?;A002763?<91?:5=715457CD>993=5I?K623B=04E;1;I;K8<5@10BA5?L3:ML78B662=<3F;K924>IM=08F54@?2LKI;5;J6A1345D75L:?LBMJ88=5JMF2A7347??8H8NN>;05G@0042:H>39?=;A74005=3?K8JJK;M86CB63GANMN8=:JJDBDA@C@B9H:HMI=M59:43AB5N?>388LK5C077AGBL;H9857M301B70E28;?9MKJ?FG@42CCA;=88?8HIF011BA?5NO>;797>5B:7@3E57=9937GD>FHN?=2@7E4463;:;;;9>448;G3GB?>?;2IH;:75AG62E?8M92J:?J641E@F@6J:<=;>9=32AAF<>C9L=I?>>I4197=C57<;743C26G429?:O:I761D4@6IOH?O;:;01776427I:>9K85A25>2=AGZ^X7JFP@>0>58692>1EC^ZT;FJTG:4294:<6:5IORVP?QBI591<3??;58JJUSS2^OI0>4?>0080?IR\Y__6IA_A=194;753=0DYY^ZT;FLTG:4294?<6:N3D73LJJ;K;<25;0667>09:;==:?;5@455E>LJ3?4K>9002GB57C01:H89:;BD:;1161:M;;HI7:M;C5280G15K923;KN?9:>9363B6E79>:N<=?K6BG41C63?M5O6000A=GB>?8?8MO><8DD55=1382>I559N79CF5G@?89:>IK=80B247<509L:O?H;LF0G02214;;9<;79M<82:504C><9<9?LJI29A@E42EKJ:<==:L100AGF?7;;I?4H7=54;7GG>?>H<;89>44B1@01;9=>JL902:=F73?=>2<<8=0167G=65LH>:84894197GD40::?9;?>MCE;34D0C?0HMH4J?587FG5B7<=KIO5ML29G:E@?3>L9O>=>?A5G74>2B1:LO?N?=39DEECDC?ONM9;9IA9DFB543N:9JJI=NACA5F462MH2;>:4?8<2=ON;I=M4CA62F4>I=:08HJ;AD0A5337L;;NMKK?1D53=JI??:82G276>2N1<>8=5;EG;B@=10:>I?5NHJ7B7GA<25J>8JO:H9D85GA4>>:9=<;KJKED;FF476:;K?I<6;0:716=4?:1:;<=;=4@310D2F?L>J9?9J4@332577>9=H?5>?3B21116?NL8?<=>?0163?040KJN?=4;=5@F1=DD0L:=9O=L:6@C3E502N1HOO4>:35473=621LI3>5>>9325<16<=;3<588:805251BB=>5:;A45E3<3?0>9MO9L=54A;E@331KNO=L68407G157?<91>?:B==92?O?J30G42761:<=<:49K56G;0324<9>9=>>882243>70=:3<=<67B126=43<;99:I>?8E3E6636I13MJI9L1528107>902H487?01230575IOL?JO>90224G<4EJ>99>==MFEDFBC@ANONMJK68FBDE05=2=K?>9N<=79334567I;>3<9J8D8:FF<>18;=8?5?7A003=1@7J??:9=<=CC63454382?=>;78876B4@E17E:;8?O56K8575G4BEN;:OO?>N676:322DJ8;I:47<3365A<141J3249>457;:2<431?9>5O6J66C4A22C1H:MO8>;C965135?KO=?M46641962C?ALOO7D:02G?0?1:?<=M803517CG?M>I30:MJ19D2<2G6LL>OMLLJA85:26C4I>K2:O6M7B@@4<3EMK=HI98=75F:EC273<=<998609;E41E1::O:5>?8B5:5B334K8I9>NO943AG2=3D99ON8:KKD74@=:09:971D;23=>7<=8:?H>6121:<=0A;:=O<;?=C@472FB30OI>4HK87DFG3@EBK=<=8=5:873:52?61:>?M9875BA3=<6?>;K:=><;780F337E>M>:O=HLC1:08:=L<;0:7:7<@D<>I2?>K>B1CFB44FK1>?99MN46@34D0EMJ??:=<;5563?0?1KM2I8O;98@6GB@@4LKL344:1552EN1N=N8J70C@0=16<=0HHIKHMB7:B2C@2:0H8N=J62853446EJK5OJ8F9FF=CDA:>K=9IK:257AAGE0LHK;M:>KB6074G6C9:<::4J87E47=D5>MK>?<6;6F95;BF@2>13MOKKI35@E@04AI;>9>L;9A2A256271O=3=>>?7G:G2G3A09LN5I:?;4CGBD@1?;<849965@5513D0=:N9?;7M9D@61<3EIH=9>=?=DG:GGCDA97BE6A@F>?;1L2H?9M540105=2JN=39N=K?676F56GB;4D;32D6382?IJH;LE942E76A?8O3<><617C4KJ??:8?7473667C3M8>255JK55@@4@27J?>;78K>396@=6?58H;=O4L997046AC0I;3?4OK7AGG;56779=45D0A5D5B9?2=5H?K36@@A<61J18M8=?LBE653370LK9?H4K?C92A1@0B99:=?HM;4196B?665A14560NO?<99HL623B=2B3N0924;M<0BD106?3>;?=95JJ9@574>3ANL=;38:5G177;09>>>8M6D4F54D><9OM8;O7FB25A3>0:H<2>4J:0EAGF2273?:>5H=<2B125046M??9>4>>840G0=2E<;9J556>6B;A63G70J39?;6J9G:31043==:0:=;K52C6G<32L?:49>FE3;3125I?:MN=:;56:63GCDK:;98=59095E49=I5C61GDBC1=?>MILK33:@564618;;HH?;0:43E74>J02>8I=K<00@B@3G>>1:9N89>9352@03C=L38JHK:327FB16<>:<91=?4=?3@G6720A>?>H;<<:620@5<238JOHH89;0B54<1?C1:=?;?L=0374=<03N?:?<68I8MFC0A<23><:92>4MJC35F7CB0?=;95?O;A4CE4717;JL?I>:?;71EG<5BL08HM9JL60@3535>;82248M78G222=6B;9=H8?=>1B2261178K83NK7M452820@1:>K:9H??56CGA@1E1L8<=?<91A4A=@09<2==5?;E16G05=1>;LM9IH6CC333GD5;H92IK9M94G4724589>?4ILKC0:E=F6CM9OM?:7MF5;7<50382<=94?N34CG@70E>K=N?>MN57G:E1121LLJ;H87F8:BA2EB1<:<;8;L75A7754?>H>;7;8LB710F650>MI=>8JN8@2;13E31992>O989D3AE16?0LNI8L8LDC;A@10CKJ:I>9>46666=C7F0J998=HJ4D4B6=10230AB6:;8:>?674195<4G78HL3H58;D9@A2A4F80;=O5O6B373E20E0H3<;K6=E9DGBGC10O2N0F085KJD9476C449=:0:OOK13DGBG35?LL?J59I4@00AF74KKI;>;C0110522J0LH8=59C72349H2=NJ;0:4@EC@5>;8I4I;>8G40G3648=8?=56ID27434>>?9N99L=?CE2474C2;;NI>>>?2E63?3ECML=?:5871E4@74C310;HM>9<6D;BGG12;8OH:I6MBBF7161608::IL<:D6;1316<>L>8:H8;4BD5G=B?>O;98IO=6BG:F30B:O>=NO:96D0@A50?>?;I8O>:F10E3A67<91=IH:7A0AB21570?:OI;?<141550EFN=I3H<7>016@A>N?<68I6EDEB7?DJ>:MJI<:A4;GBC@BL>H8J:K7B5AF2C@A;LL2OHM9B@G63DDANOINI;j46rn{=qw`9=>&>9>471234567;9:3>=>;A05;45>50O:2L30:@A447888:;?<76234=744<8K9M<<741945404=0>HIN;762D3B001:=?LA@G74>16IH9>MK68D@G6=CGEJM=OILH7705E6G15N=83J8K<7D7G2@749<=I54MMD3F47G?D?=:0;8L84G@:EC1D9H>2>4;=F6GFED6B?JL2JOKKD1DA02CBNMIH?:=;B935B632K0;88=5862A41CG6LK;;;O695D7A:63GE32?EM9:;598;0:557AB0IHLNII=I4@F7AD1318KOI;H>4D4GFDBC8O:2?9:F163?20?892;?012127201:;;<5?>F51AG672I?:;8=;=6630=7D3?OOI;K;KC82F216>;=<:K6C2;67>EKJ<2?KL>2BG@GFB54;>99566EF@D18:I=?:>426567D1<91<;;L;2@7EA=6EJO6M5BF@09=8E662<6C6:=:;OO:?;6:07=57K>H9O:OIB9C;@764K:;9?=8KA1G46326NOH2?I96B4G@41@39K:M85283=>?>>8OO476B6272D06M?:3==O8426715C4L:9N?>>I333B5=C?I88;H9K8;?>:7C7:GC?>8H<;>=L774A32@1D=:HOJ4O61G:E40>382=IN<8KDC;5F2>3=:=:O>>M54FA=3E?N?OI8O::3361BC0F?I?>;7:LMD6D4=C@B8HH3JN=<74:G5F76<1BD5=C@ALO<9IIJ=37D@2D64=1LJ>9>47B556@46LK8?40EA@35DD:93?<5>?4194GD?0>OO?45J>07;G2=1F>O;O:5O80G14GDGF;?=J;9MMB61G7D0ANK>I=H6K4C574>1DJKII>NL<85@G4A?5MM;;9I>916:62@>7<=;:>9L<1EG6D89;=<:HJE74;<<273>N8:=J?H:;;M803;G6E49K;2:N<91EC;1D3B9=:0;I6L4B7:7<0189NH0>?;=97?010AEA5?888N>=8=0E762D448K;<8=58D9AGG5749J>?8:77F163@F669?O9O9=<6C2223771H;>H9L9:O;=M65A026BDM>;J4;?L151;6@408OI;>597C663?2BF=O>J49;7A8665672J?2:MIO6AC2G26460MLI;:J<341@77>4?L3>8;>;B8F:<16KO:N=NJ;3CC4ECE09?3;BE@:@A6AKJ=NOH??6200<160<91?LL?2866GDD6N8=H=9<=8923<51489>?<69JE3;5A=??>L=;>::8;8B@;0ACE?M=2?:H675D37=B?;18<8K:?;6DA5@05>>?M;N=I5LM<>621:2@5E6M<=::IH?9BDFAF65:M2;<8<6E0C;05=0NJ2>?HICE@3A5?EL;23>56M06:A0DB5:9H=JL7<4BD55=1382=MJ?7L982@=@01:>9HO:6?403:6A6481;HO;K<:59305D1?J1>;75>?0123456789:;<=>?0123456789:;<=>?0123456789:;<=>?0123456789:;<9>48123456789:;?0123456589:;<=>?0123456789:;<=>?0123456789:;<=>?419;456789:?>9K;26G00543:8298>:8C0A74>>78=:;>=9J4@2;5=47<9>;J8?:=4@31132731:;895<=:9<9>?25C26146:=8;8=:;01:741470=8;M9O;2507E443:=:04=>7016307218=8?8=N4@07072F9;?J8=5701:765278=8;89<O8O:KOM;0::33@1B99:;9?9?19030527?L>J=?;=13614=6?<9:38=:=09614D2F<;>98L?=5@63?=77:92;<9<;46A706E7K:I??4GA2<6>00>2?<9>8A12442E7:=28177003A8KKII?==D3CB456?9=88O=LLCD3F214D<913=H>723:0<7B2<98=:<8B;BE23018=M58M843::<4G5>==?<66>F2353=73>1=HNI873D77@122=0B2164G3<1N;O4:?;907=423IK?9OHJ64323E547:H239<>?85F:7=G48H9?9<I2528<6019;9JM5>6AC13F11>?>?<=N;K711:3D?4K>88==8K0@0@60209=9>5IM8C8G205=?<>8?M?:>234GF1>71J3J=<>?DD4B26??=L<925C3=147<0;<24C@G<0>J;OJI<>N155;@=01NH<=DB4G4C>7??>;75;=86:5424>K>=I:N87C@GB7554I?O38I8825;A1<2D<9=I?4M98C6@5F?0NMOMO9>4873E:=7;6E;1@4E7K>L;8;O=44@6<1?DJ>?:JK?:B85EGA37JJ=I48<;419;234D1>HH>H6K3GDGF70C::O3;OHK96G570G1=?:HJI7>1M1KNO=M>=:I5D@E@D06:OKAB4345?588=9==7>1@43<4BDK=3<5?:;136;50>?<=:045?<30GG3DE3MON84IHNCE@A660019:;9:?6ADC1BDCDKO:O=?8N31C13005K?;I8=5780@04=770=?N:I?7630FG?31;;2D2A8?>?:=?=27234D4A8;:H8==;0::;7=5?>=3N=9:=A2C2B26DI0:28L;ND5C66A31K<=K9?=>61463?=>2;>K3=>?3HNL>?A@;B067>=?K8OH886@;G3G37L1>M?KHIFGA7ED@0<9135L:K42:5361>IK23CI=H8M4>93@2A776A>?;L7E@D:GGD>K>N95?6?5626E<55>1?I:L=>1030345>8K8?N0@C0A24?0O>I<586F@7F355C9HO:;N>JC355F7GAJ>>L8FEGF3G?DK>9>JNMJ92G0EF7FIHK=5=?2C4337E1;M>;75M9AB;61D>F>8>;8??:72G756EA=H2;ML?;37F;F1E49H8JN?8K2@42G@>4<;>3N9>48BC0G@?A:=HNJL7J2C@:@=?E<;9H??9L8D264473<9;J:?HKCE0311C6>?I;<=;I419;G@DDJ82>K0HO8H;NE467@@G0M0:O=58M9G101C55::2<;LOK55374>>DN8>J>56JAD1AB@67NK8ON9;?81F7E06D=18=?L=M38:G@07FJ0II98:JC@C4F72731NH:L>9917311E?K:8@;51<6>JH>>:=>?443006529=:04HJ97G44ED01J9<<8NJ=41624C06;>:;N5JIE6D;<61A01LM88<8JK;:417F056EIMLN9OHIFGDE456789:;<:?=>N6E@342?5NOH:>KKI252034@>N83;JO>?7C63?<43K8:NJLH<;9?9:L60CGA3@6=HH=;K=<5@71145AK1?JJLKJE963416<1=9?ONO<4BA:E4EE9OKJON;917:334CFK8;8J8<95E7E2D22I933H;>;A90315>D<9128;9KA7A7<5C1L83HIHO7443@ACG?0ON<=M4:HN821EFA73?L3?<67:54CEFGB4ILHMOLLIBCGG3D3D=OO2NI>J6@;2G3C0>8:;8?865DGA4=B?01;I=I:?;87G66G7M83:IOM=126A<65C=:N8;H:=B1735=4?1H;;?=>N19:F743DM02=8=H:4528=0BB?9=<;5L>7B003<>3?H88MH8M8C@35C51N:L?8L6>63752A?AJ8?OI:ML82D405=>>=?;N::J94C;25@A;L>88N8:F0136C;20C6DM1=;O<==3264E1C3823=:>D>>93>8?718;41AD?9=<;::=?1D2@4710J?>;74863D1FBC>AJO;MOHKIBBD4GC?EI?I8;;:?DED4BCC191=I=4OLF1::@1E7;1L=:9>497;5<107KH9845O?3DAA00@5K=H<>374FG624=?;IOK6<345E<=44>>;85>L=79A74>?0;OOO>H7MEE@B022E?9H:>?4464<725<=>;8=:?06G741>70H>;<8:;82:4A020K=:0549>6C:@FDC>=:N;::?=66477A6105;8987773B4=37>93?=;>;0:;B6<46MM:B71@<L?IA1064531;;K;ON>70523@7>7<912OIMNDBD:4@1EL12:>8LLE625FC0C8=KJNKM>C122535CK?OMJ:HK33137557;9:?<67KD871F7?78:N<;;9MA4:2E3>EK=;H>O?9AE4FF01A9M:?4NJ;E5475<6C:8;C>A;:OMO>8>A528=@4CJJHM:?:68@55==>4L>8:4576257@@4>FM=3M<<:9505767CB<>?O9?>?28GG05=>N9;9<<>783;165D5;9L?88;?820@5545=::HO<=L4B13@=42?A0;75703823MI?J>F3570642;M?38==:76A;44GB::9<=K>?282B52C6K=K?;7L>LC56@G<2B:?>2>979FF<53C11OH49>4A1F;A60F0=N>O;?=8431<=22:8?M4K6720A04=C4>183?I6J2C61==?D8=K3N8?<419B5473>?I284=N2@5@E747<8:98<:LC6;;FC6BMJ8258O;8066<5DC8>?3986:EE;74>G6JJO8?LJ=D9@F05G3MLJ5D36=C@CLLH9JOKLAD@;3GDDK=8741621AG0N5I<>3BCF7753J::3I<7909CB7=4281>?8=5N2D7B21D5<8>;?85;;4@63?D37<92??49:;8467E16?;2J:57KA0CF3=D1J=>HI9H;A5GB1D45<91J9I=>B94B47>?L;3HI?KNAGD;2D0F1O9;<=>723;0A3DE==L;:;77EBAA5?:O?<6O706A0E4768;;:MKMN2@376C6EI083=88K1501152408>8H>=6E5G142?A:02?5>:?;@:AGAE5>?<>9<6:CB6645>E;0OMH6>8;?J4=J1D5B6D40K>8H;>:6F528EKL9JINH8BD04G56789:J4LLN94065G571H<;N4JKC0;FG6C418>>4NLM52AB05=FI9KJM?28=8H7C0A5B@E3NLNIHK<=CC030=4382KJ4LON33C1G6>79;HMIO:6235;GA40><;MH4?MDD666@CA8<9N;7LONC5:36G1390:MN=>8C1A365060?KMO4A@CG2G0FN:<:58JN625@2@@F;L9=I5HJ96DB47CD:?OI8;?68@F;@DB?K8;9:=OI419BF3GF;1?<4OJ:5BG@=DG50929O?6:B9A365768=284LJ:03C@536D9:I<<;GC=>?:NI:=9C6E24560=8<9;>LE2;G0<4>19::?KJ=133;5503M;LMJ=>6FC;:3G>19:CG@WG;99427LJKR@>25;?c9B@ATF4891<374AEFQE974611JHI\N<0<;?DBCZH69255NDEPB868?3HNO^L2;>99B@ATF4<437LJKR@>5:==FLMXJ0:07;@FGVD:?611JHI\N<8<;?DBCZK6;245NDEPA846912KOH_L310<:?DBCZK6:>3l4AEFQF97429427LJKRC>27;>GCL[H78364AEFQF93902KOH_L36?:8EABUJ5=546OKDS@?<;>II;LN8B01E5>30999>8O?847BFGDD=;2I=IJ>23@661G?L:9H=?>614174>GBK=28;N986NDE21B0273HL<>K89DB452G5>I?N=:KJ659GG=GE1L>?3H8KL25FEAGG1<1=:H;L76E14@C7CN=:0MKK:9D;2FC76<0228=O?956:=3B3?LO3H:K>=9MM10:74@630;2384M9201:65269?9H<=6?8E446753:;L;<58M:DG4E4@?F1OLMNH?9D2DEF@>5K8O;<8?I1D254A3382H84K;;EC;3=4GB;:8;>=?JE2;6EA0419894?O?30AF7@>0KJ3;>4;;A@721A3C>K>;7O:M14GA<<22><;A1H=9N9>4B4F7=@G>L>:8:L::A@;F<26E0L2;=;9=0B5@7465IL399?8=4803<13?<0>9H?>6419A251B>;>?54=?0D6GB3B>=JH=>K8=FC56055B<9:NJOMD1=>>39IMK63C@4305K1I;<8JKE66:0F?DI89JMH==35@A4@C6J>:3M?=N2G6;EF273K<62535G260=2:=:87325:G=25:8:9H=>>BC62BG>5<1:=;>>>E0236F04>=:0N:;:D0AAB5BDN?LO8=LJEB35ADD3I?N::5=6C8:@F@?CJK>9JN86FC53=C>B?0328=5MA50;5622;OL?IIL90B4AB=BE>L8=;OM:6B@5=GDDM?9=ONMM3C0A0G77;JI?:I;;0:@B24779:;:<<67555:=0D681HI>IOJ77D7E6G7L02388H625:A@CG3=L;;OL:?3@63?GEDN83NIK<69672G<7>K0I:?N8IB8GG347FK=NJ;I7;7BA4=@?E>:88IK8LE705716F>0K?O5>>001:0=D1<91III<J>=:4>867876@20EN9IH<=6723576AG3=K23?57>92FBB5?3:=??<6LIF17EFA0FL1IJ:?M9CCG77GBENM32I4KM6EF461B5;08H89:LHL34@F@G0291>;8;8;01F7F6E7N1=?<6M?BDF6BGB4?0L2<9O;1CCEF3DB8K>E>J;=M?:?;B30A2E1<9L8:9;?9331E@?DK8>95;K<0EGB7530J:?H:9?863AG45B38MKIO?9;7528G42C=:45@101E5J>IM;C4;0=F2D:MNIH==<=2D31FDDD1K3?8:A@;;4D478;295L>:290B6DG382I:59K<58:025GAJ99:M<860G6560DE>;28:>L;C82B056B;H:?HLO80EC3GF50??>;7N?IFG@00=119>HN>9HK78735AC7=O;J?9?M88G@<7@C=>:9949ID94526?D8MO;49>4C30;E7628==;5?;J28C01A>C8?8?>:?=CE06G<439133>=:K84C455?3?J2;>=?<419@66G?L8=;OHJ680::5731I;I:H4L<1B2E41658;;;?4>?E7551<11813ON5JJ17G74>E5;K3O=>>LA5;;5=?6;M9J>N?IBG52G0D7K>=??>8I911@221C1><:44J68BC262273J>H<56M1@;A61DBJ9;<4N:K6B3;G6E2N>8I<:O=8140211DK==9==<9D9A454>1<=:0O8K;=79FB445>>M:3<=M?054740E7>O>=:IJ>8B6G@202=JN?8=5L54;611?FK?><4:688G7@A42D>?>HJ4KM0BFBBCDFJLL:I5=<59145G?BL0N<=33A:20E>:J;35=44??3363?F02;H:>==O>B12@73GD01:>4NOL134F51C611NMN=9J80A0AF7299HI<5H7F972G16;?;5K<554;256E88K2?=6=C71G@514IL>:4<6;456:G5>C0M?=N=JLC9:2607D<91H;9:ID12F5D1A1L3MNKK;765E@06FJM;:J=K:7GD7<5>?8;83>?>?89:B65GF01:?<6M8C45E4=268?LI?O6M1D64035D8923H05D17F7?8;89M=ON23C16=>5I;:9M=:?;B5F5G459LK:O:L4G1:65661H9>MH5:6975FGAF4C;9ONIIO88G7E6D7CML<=0:H?9JO;>40F51476M?I3HL>NDC4@AF078J374A65BDKM>;7NOJ31@:B@0FI;3MJK8I73FB36BAM=LLLMN9>4CC1F14>><1;;8=:=F96E5=27<9;;=5:?6954@=67I9:;<=H:1306=267=MK?8>9D0@0@27:18:5N=7C321G<5?9K:68A1A1B3L?:I::>LE2574>EE??LJN<96E842=GE0M>O2O4HK813@B=1CJH;NM979E90:@1C1:1<:I8?87753=2310=>M5OJ73@6G5@0JH2;J01FBAF5789;28L;=B92@2505>;:2>I6;A033617789:;<<:?01334547892;8=5LC9244761J18?9LM=41214235MKI9NHH<89>I><8BA;36529H8:N?=638C:5<>88A;016C<9IO8=:92563?FB5M8KM=9M<04666<1F18HNH>OJADDE>K?M8KM70CA5F4G5=<3?5?K618:F07=DM=:0OH<>FGG3@7450<8==?M8A95FKK253402440=KM8=5LE5@5116>L?L;;4J808C62F5?LJ9IOHH?757:E171MK>N4K=K72A@342A<:98MKK;0:AF24>BMMIMN>7<72:23=E3??I8:NL91G52751A>1:8J;98567426BE:M2H?N=3=:;LL10@0<160?35I;I275BB@6?>J2MII;KE53GB@@A8;=OJIHI7GDABG@C<91HJ<==HI8KBG1BNMO;;J1EF4FC5EM:8I84M<9600626D>9>I=5:K1863B4D5I9>?94LJB1:;230><:HI?5?=;BJFGNYKAJOE_HQ[YQG7?FJL8?1H@F?7079@HN408<1H@FEKCM\h7NBDDW]GMSOCM<1H@FHW8:AOOC^60930OBCBIUVF@42L8L1CG4254>:<2<;:KI235B1D2;=522:=K;:4:61657A304N=2?<6J>94F40=?78J82HK9I3931<5G>?:2HHN=MF4@AB<50L:K?H47LE3C@GA?0KLL9O::?;E0E<252>==8=86<9DD5B3>4K?><;>HL72650A3AM:??5>8K51:17D3CILHNNILLC528@3D>?J2=HK9K9CGGBG?>M:HK9=8E414L<;HN891076AF?B09L3OHK958D2=FE2==H9O;9L32GGGAG1;KKO597E8:459?AD;@6G@40J>;7I9K76GE1@4D>M=9>=LJ65@0G3C>MO89MKJICB:340E5NOLMM>OM9@F2EA@D8HLN;9>4D851234D8M9:I>:J62@05F@D>LH?N>;N68@53A>2<13N:?KN98::=D?3N?2;O931@B5=628?9>HH9KCC30FL:HI;K?8EA72656I:?9J:?9E2A`?AGSIV]BHYFPAb9GEQGX_@N_DRL;0:FA03>71M;>H<6:F9:3=74>J8?;H=;L81:2522DI?;;3;<8M90563?AEE<;O3I:9=13C6<=258<;J<:6?0633=D6C0;:::;L780276367:1>?<>?;316;616?14:31G74IJ:95=>?1DD;6374?L>NN588C90;@<10?OLM8:L991134=BC<91OH;K931A21716M=2HM5>>99:511@E=9;O9>7<380FA202K8OH58M>E5F;2C7?I03>8E5AF2D049>L:?;EFAF2D58>OMM<9?99G333>309;IH9;924C02GD1:;8;9=8J163;=4?1L2M<:LID23G15018K;NNC7246G@F?038548NB6FG6C5BM=:;55:;CB;G2F@>M<28MHM;8@71B7?13MCJ0=08;EKB8469?2NBM1?>>69GMD:6:7=0HDO312<4?AOF48>5;6JFA=36:2=CAH6::394DHC?52803MCJ0<617:FJE97>6?1OEL2>>69GMD:587=0HDO320<4?AOF4;85;6JFA=00:2=CAH698394DHC?60803MCJ0?817:FJE9406>1OEL2=8?58@LG;:04=7IGN<3<4?AOF4::556JFA=12>5803MCJ0>?16:FJE959>2NBM1:16:FJE939>2NBM1816:FJE919>2NBM1616:FJE9?9>2NBN1>17:FJF9776>1OEO2>1?58@LD;9;4<7IGM<01=3>BNJ5;?2:5KIC>21;169GMG:617<0HDL31?58@LD;:94<7IGM<33=3>BNJ5892:5KIC>17;1908;EKA8739?2NBN1<9>69GMG:5?7=0HDL329<4?AOE4;35:6JFB=0=3>BNJ59;245KIC>05?69?2NBN1=>>79GMG:46?1OEO2;>79GMG:26?1OEO29>79GMG:06?1OEO27>79GMG:>6>1OE]O30?58@LVF484<7IG_A=0==>BNXH686=08;EKSE959?2NB\O2?>69GMUD;97=0HD^M<3<:?AOWJ591<394DHRA86813MEJ0=08;EMB8469?2NDM1?>>69GKD:6:7=0HBO312<4?AIF48>5;6J@A=36:2=CGH6::394DNC?52803MEJ0<617:FLE97>6?1OCL2>>69GKD:587=0HBO320<4?AIF4;85;6J@A=00:2=CGH698394DNC?60803MEJ0?817:FLE9406>1OCL2=8?58@JG;:04=7IAN<3<4?AIF4::556J@A=12>5803MEJ0>?16:FLE959>2NDM1:16:FLE939>2NDM1816:FLE919>2NDM1616:FLE9?9?2NDMR\JG79GKG:76>1OCO2>0?58@JD;984<7IAM<00=3>BHJ5;82:5KOC>20;169GKG:607=0HBL318<5?AIE484<7IAM<32=3>BHJ58:2:5KOC>16;1>08;EMA8729?2NDN1<:>69GKG:5>7=0HBL326<4?AIE4;25;6J@B=0::3=CGK692:5KOC>04;?69GKG:497<0HBL33?48@JD;<7<0HBL35?48@JD;>7<0HBL37?48@JD;07<0HBL39?58@JDXZLM<7IA_A=2=3>BHXH6:2:5KOQC?6;?4?>69GKUG;;7=0HB^M<1<4?AIWJ5;5;6J@PC>1:<=CGYH7?7>17:FLTG:46=:0I=7;8934G1?1M0NN4HO>F9:E271E?=<;==8990A@0041LJHHOKN8=5J11D;F=E68999?:HI96@117C5KK>M>:LN083EFA678;N:M;?;0:G26330:><>>N6I0B616GG?K;2J6M9:?<>JKD9:77G4C0LH2>4J?D963?@4>?A9=::8L6B@G25139OI:;58;3@:66A2F:H:=>:M989F:40D?0;?98H?61D5:14CF<91N?>MM56:GAG@FNHOOJI;<0EG;BD7>1;:<>K=>B035212E91I<>K7I45322F1>IML?<6K7IB515G0DE?08=H:HIF11FB2>0NO?=?N=IEG5;3<7>I193?I:?;D72@162KHL<KC@A;642E:H>90B7:7765K1H::9M7D528A34>JML2?I9I5C7AEC?5NKKI8:9J9C121AD2I:;;OKOLC663I<>?N?O?M>940B@465<8;;<<9;FD2701C1?9=O4=O?99F;1=3382O<:?D0=;O:9L836275C@101;8N<:6A53674G7I?;9JO?;AD0F1G2>L=>;7H7?C9G0B8==3MI6M39:E=1>>9J3=;>O:0CA0611?M928<::956G;A5CF=:HNI9>4E8;5=115I1;I4>?>306717>A0:;JM;M<233F561D9L3H::>J27:3><9;84?6K419FE1E>9;?=4=>89;;4535JOCE10<88?;L943@454>0O8=M56;C2CFB5BEN<92H=:J875FF3@E1<=N4<9L222GB@273LI9M=6>56105F0DK9O8<56;256:53G7LL8=H9J=25774<7519>;8L:62135<=1B:=:0IHM79174=@?2L2?>?>4LLJ7BC02@@1?H=;J;O774:A@D62:M?I8=5JF22057G0;:9>K8K73F;@4?C=?NO;;9;0:GE7425J039;OKNF8;AGCD7>?9:5K;MDG0FBCD69?2=:=9N72@F=FD?=JL=IN;=D163?@@C=03>:>:?51F7GCCD9?4>>;092G=AB7I;O2596:92:0416;N:K?LC9D4BF2A9L>3;88M0EAG<@B1L9I87H@N3:GMFg=BFVXXX_OB_@`8AKYU[]XJARL;0:D34557IONI;K<=E7:@FDG3L0HN;;=9:=2@0B0133JHIJ9L6KC863?C6F80I?;K<OME7353@3AL:J>8;K00;2G3>2<91M=L6LCGA3G2G6=KN2I:M=545@F56EN;?38H?9A@F27A1BLK?99L6:ACD:4F66;?N?<6H=5D35G=1D=M:8<5KJC40@44729=HIO<=NF@336=?588A6:07DC3;=<24?=85528B16E09:MNL?:9C4GFG4>><<9OO8=21GEF@?>L;=<:LK:545E402382L=?;7:73A0FG>FI8338L6K13D433C5:=OHIHL=1G;4BFB1K9IM=:O?45G@6GDA8<>;7K895876F1C5K?9OMN>?79466A779;:2<=<68G5FA6>7808?8?OID523F@E3;J:;?9>4F62;54C6?M2H;>H>D8@FB2@0M18NJLK9C3F1@G46:?:;8I6>C@44@DED;=>M:9;7419E3A5D>JI3O:6;1@@7=FE2;1O3M:@0N;8O>KK>51;A@C>7M?NO;O9>74@45F02;8I8M58ME8D2@2G1ION>JKL8A25B25273O=M;KJKFGGGBC0AN>LMIHHIEGGEG1C29LI;456749G2B763>:>D=<>>;><;E80G7AGB18N<>4OL77@AEA2D>LOHM::KAC7FA28O;;:97I2012=46>:9284:8;1003F6059;>3<>H;0:DB0C?618?H:LM6D9744F4>:O;;496>88;32440JJHN<;HIE80GECD3IHLI>9>K8978BDJTM=:0JOL6EC6340?7L>L2?4HI5@53E7??9>NH>NM=9C44=G4C?8>=NI<>D55FB50A?M?N8=5IBGDFBC64NOO;JKHMF@DF4C@?8>2:;?KHMFGDEFC@AJOL;JKM;0:DG1FD7?KE6:3=C7>??N;HI=914A2@71C:ML>5;LIE663?CBCNOLMJKHIFGDEBC1ANKLMJOHKC1C5@GC1N1IMJOL8FD5B75>M?C103BCCB8?<>95;60D:;6A3E<91MJ9JJBG@GAG50>ML=4I;JEE@6AG2C=HH>N>7844F42FB?IMI>5NL<0B:BE65B9KK6E:@BG@60>;IH46JE6472725>?>NN?K<39@G45??;1<8;<:?;GD4@FEBN=::5;M739351=B?0=:;8>L>18@;2D21:===:86>0D01466788>:=9L=B2250D>3J==?>I:74071BG0698;89ID5D;AA35=>N;I4L701512G03>J2J4H;?13D42A@382LMHKHI6GDEFA@ALOLM9:HI7G5EF2@EJMLIHKHKBGD4O>;7KHKFGDG30@6<<8?;K>4FGDEBC@ANOLMJKHIFGD4FC@ANOLMJKHIFGDEBC@ANOLMJKHICG;EBC@AMOLMJ5?I419EBC@ANOLMJKHIFGDEBC@ANOLMJKHIFGDEBC@D:<::5N<;41;441?D:K8OO5J63B674>@ANOLMJKHIFGDEBC@ANOLMJKHIFGDEBC@ANOI?9==;43A7B<7480884HMM240337273OLMJKHIFGDEBC@ANOLMJKHIFGDEBC@ANOLMJI>>0E02=0??:188>?8KEE2B@CEE0=:0JKHIFGDEBC@ANOLMJKHIFGDEBC@ANOLMJKHID9;7@7?E1M9JONLN3G04@;0:DEBC@ANOLMJKHIFGDEBC@ANOLMJKHIFGDEBCC?0=:H?=8@CB716=032002>A9?:M8?H6A142B@23<91MJKHIFGDEBC@ANOLMJKHIFGDEBC@ANOLMJKHIFGDEBC@ANOLMJKHIFGDEBC@ANOL:7J=4GOF;?LHN\YU;<55FNHVS[57?3@DBX]Q?299JJLRWW9937D@FTQ]30==NF@^[S=;7;HLJPUY7>11BBDZ__154?LHN\V:;;6GAIU]352=NF@^T;7:KMMQY7=>1BBDZP0758MKOSW9=<7D@FT^2;3>OIA]U;5:5FNHV\4D11BBDZP1758MKOSW8=<7D@FT^3;3>OIA]U:5:5FNHV\5D1D69JJLRX9L=0ECG[_0D4?LHN\V8;;6GAIU]152=NF@^T>?94IOKW[7503@DBXR<;7:KMMQY5=>1BBDZP2758MKOSW;=<7D@FT^0;3>OIA]U95:5FNHV\6D11BBDZP3758MKOSW:=<7D@FT^1;3>OIA]U85:5FNHV\7D1L8;HLJPZ5D?2CEEYQVNFVH^_DJWb:RJJZDR[GKFI;5_SEMMAd=UIDH::OYJR79QABEBI?1YIJMJB59QWQG33[Y_N:5]SUVZT@cUWI[^JB;94SSTBHZG03ZX]MAQM6:QWEQST<2YRBN:4TXRF36=R8&rxxRlck^ofiZabflxjxb| gocwmsceen$emygye^`ooZkbeVmnb"xnlhf-gvru'{kf`ba[1_-vdk)z&y=Sd`ft/pbi*UW&ZCF\AKPPSKN5=(uid=87X> xrv\fimXelgTkh`jr`vlv*aii}c}ioch.ocwmscXjeaTahcPgdl,rdjnl'ixx!}alnlku]6U'xja#| s7]jjlr)zhg$_] \ILROAZVUAD;3"ob729V4*~t|VhggRcjm^efj`tf|fx$kco{iwgaib(ii}c}iRlck^ofiZabf&|j`dj!crvq+wgjdfe{W?S!r`o-v*u1W`dbx#|nm.QS*VOJXEOT\_GB19,qeh143\:$t~zPbmi\i`kXoldn~lz`r.emeqoqmkgl"co{iwg\fimXelgTkh` v`nj`+et|{%ym`b`oqY0Y+tfe'x$;Qfnhv-vdk([Y$XE@^CE^RQMH7?&{kf;>5Z0.zppZdkcVgnaRijndpbpjt(ogke{kmmf,meqoqmVhggRcjm^efj*pfd`n%o~z}/scnhjiwS=W%~lc!r.q5[lhn|'xja"]_.RKNTICXX[CF=5 }al50?P6(pz~TnaePmdo\c`hbzh~d~"iaaukuagk`&gke{kPbmi\i`kXold$zlbfd/appw)uidfdc}U:]/pbi+t({?Ubbdz!r`o,WU(TADZGIR^]IL3;*wgj?:1^<"v|t^`ooZkbeVmnbh|ntnp,ckgsaoiaj aaukuaZdkcVgnaRijn.tbhlb)kz~y#oblnms_3[)zhg%~"}9_hljp+tfe&Y["^GBPMG\TWOJ91$ym`9<;T2,|vrXjeaTahcPgdlfvdrhz&memygyecod*kgsaoTnaePmdo\c`h(~hfbh#m|ts-qehjhgyQSTM[U]E^GMLD;8RLCPW]S[I;5XE@>3:3=PMH6:2;5XE@>1:==PMH686=09;VGB86813^OI0=09;VGA84813^OI0?07;VGA86<76?1\IO2<>c9TVLRBWOCY_Ym4WSKWAZKHLLUJo6Y]IUG\IJBBWK;o7UGCIOZ.\AD'8';+_Y[M 1,2$DUDA@<0T^ZCIC58\VRXOGNi7UQLOSG\MK@H>2RonRGkf:ZglZVuad\n~~g`n028\akXEh`d~[k}shmm55=_ldUFeca}Vdppmjh43Qy?6Wjs99b`atf49427ljkr`>24;?>89b`atf4885n6okdsc?56<7601jhi|n<01=<>gcl{k7=364aefqe94902koho33?:8eabui5>546okdsc?1;>gcl{k75384bhlgaf7?3kf`S`kb_fgm[bcim{chSn}{rg9ahnYjmdUlicQbuy3;?gjlWdofSjka_qpjiZqnl}bT=<64bmi\i`kXoldT|gb_vkgpmY5911i`fQbel]dakYwz`gT{dj{h^12<>dkcVgnaRijn^rqmhYpam~cS9?7;cnh[hcjWnoeS}|fm^uj`qnX=820naePmdo\c`hXx{cfSzgkti]55==edbUfi`Qheo]svlkX`ndR9>8:`ooZkbeVmnbR~}il]tmaroW1897obd_lgn[bciWyxbaRy}aqrfvZu1W`dbxR?=2:`ooZkbeVmnbR~}il]tvdvwm{Ux:Rgaiu]167=edbUfi`Qheo]svlkX{k{|h|Ps7]jjlrX;;80naePmdo\c`hXx{cfSz|npqgq[v0XagcS9<=;cnh[hcjWnoeS}|fm^uqeuvbzVy=Sd`ft^716>dkcVgnaRijn^rqmhYpzhz{iQ|6^kmmqY1:;1i`fQbel]dakYwz`gT{opdp\w3Ynf`~T;?<4bmi\i`kXoldT|gb_vpbtucuWzdkcVgnaRijn^t4[64d3kf`S`kb_fgm[s1X;%*Seagax!ALV@&@mgoymya} 06-3425mlj]nahYnfySob`cj37?gjlWdofSb{{ptv\fiidc=1h`fo7;emvpd:7611ocxzn<0<;?air|h69255kotvb868?3me~xl2;>99gkprf4<437iazt`>5:d=cg|~j0:4?>99gkprf4>487h`n8:ldggsndm80bb=4rno7a5=ugd&i`fQbel]dakYq?V9'wnQndepb[roc|a7:8!mPaefqfZqnl}b6=9"l_`ndkwos`d7: nQnxh]j`Zqnl}b68!mPayk\wigqmV~r|h3?,b]b|lYsqyo6=!mPbxvf[vo}m43'oRm`mlmm[fjl59&hSikiatnw[agsi4LM nQkircah`Ypi{dTnexPcnno95*dWmcxmobj_vcqjZdo~Vxjbjk20-a\aigeg{keb`Pdhp>@Z)uajkyhb!_rn{fgqit'ozlm"twpq27+lvdg{oThd| tlr,[fa($jUnbllce^11flrXimnyi~}20-a\bdkndp7x|l|{ao4/gZnf{VkseRgk=1.`[mgtWldj1<"l_icp[`he59&hSeo|_hliafrbz{7; nQgar]nahYh}}z~xR|jgr]b95*dWakxS`kb_nwwtprXzlmxSo3?,b]kevYj}qUdyy~zt^pfcvYf59&hSeo|_lw{[jssx|~T~hi|_c?3(fYoizUyijmja<2/gZnf{Vxnknkm=1.`[mgtW{ym0>#c^jbwZtt|k7; nQgar]pkcrbkjUbb}{{_sgdwZg:8%iTdl}PsndwafeXg|~{yyQ}efq\f86+kVceeyQiimg>FigicZ~yeci#c^kmmqYaaeoTblcj=smn*hoa$jUbbdzn_wco95*dW`dbxoQyam?3(fYnf}oyjlmj_u{sa86+kVfdmiQfnhv\bljb58&hS`kb_u{sa85+kVg~tR~fpdnjj`Yt|hmn0>#c^rqmhYsqyo6=!mPrdcg[acw|aUj1<8<85.`[wcflVnn|yfPb<357=2+kVxnmiQxievk[d;?$jUyiljPwhfwlZd:0%iT~~zPpsklvlr~Wh7HI!mPrrv\twohz`~rSo3LE-a\vvrX|pzn1^WAC-a\vvruidUj1="l_sqwvdkXj4:'oR}fm^alhiotafdToeklk"t}|BCt35a3IJs?5k5F;695~U6l0089:4<2182761fm?08=i8i{o161?7kn:7=>d`:8W6702:2h6=4>325ba3<49mkh7^?k7;1;g?6=9:9b40l0;6<4>{R3g=?52?399<7?<36cf2?56l>o0zY=<1;295?7=90qX=i753459776=9:9"4<808=45Y34696~s49h0:7x=>b;28y!5593l=7o=7e;295=<>283pD>:?;%103?5?m2P:5o4={559564=u-9>>7=8d:&2g6<4191/=i6539d8 64b281/??j534:8m63b290/??=534f8j6452910e>;l:18'775=;<=:098m63e290/??=534f8j6452;10e>;n:18'775=;<=:298m600290/??=534f8j6452=10e>89:18'775=;<=:498m602290/??=534f8j6452?10e>8;:18'775=;<=:698m604290/??=534f8j6452110e>8=:18'775=;<=:898m606290/??=534f8j6452h10e>8?:18'775=;<=:c98m63a290/??=534f8j6452j10e>;6:18'775=;<=:e98m6>62900e>6m:188k6>f290/??=539;8j6452910c>67:18'775=;130b><=:098k6>0290/??=539;8j6452;10c>69:18'775=;130b><=:298k6>2290/??=539;8j6452=10c>6;:18'775=;130b><=:498k6>4290/??=539;8j6452?10c>6=:18'775=;130b><=:698f636290:6=4?{%103?4dj2B89=5G3528k7ef2900qo=953378L6373A9?<6T>9c8`13=;o06f?65+2bg97>"5ko087)i<53:&1`6<43-8o87?3c9'6a1=il1/>i6513f8 7b>28?j7)"5lk0:>95+2ea9fg=#:mn18o5+2eg913=#:ml1?:5+2d29576<,;o:68>4$3g1>25<,;o86>l4$3g7>63<,;o>6>m4$3g5>05<,;o<6:5+2d:951=#:l31=o94$3gb>6b<,;oi6<2.9ii4=d:&1a`k=51158 7`32lk0(?h::3`a?!4a>3=27)"5n10i;6*=f8850>"5nh0:m45+2g`91<=#:oi1=h5+2gf955e<,;ln6o74$3de>==#;9:1=l:4$222>4e53-9;>7?77:&046<6:h1/?=:51018 6622m80(>>9:49'751=9hn0(>>7:bg8 66>2oi0(>>n:3;8 66e28i0(>>l:3a5?!57l38h56*<0d81g<=#;9l1>n74$233>7e>3-9:=7=4$231>4703-9:?77:;%120?4<,:;>6?5+304974c<,:8j6>=9;%11f?7ej2.8>n4>bc9'77`=91h0(>=?:211?!54;380(>=;:39'71b=;=i0(>:j:26`?l55>3:17d?la;29?l4>n3:17d==9;29?l7dn3:17d==7;29?l5503:17d<6e;29?l44<3:1(><<:310?k55:3:07d<<2;29 6442;987c==2;38?l4493:1(><<:310?k55:3807d<<0;29 6442;987c==2;18?l53>3:1(><<:266?k55:3:07d=;4;29 6442:>>7c==2;38?l53;3:1(><<:266?k55:3807d=;2;29 6442:>>7c==2;18?j42;3:1(><<:371?k55:3:07b<:1;29 6442;?97c==2;38?j43n3:1(><<:371?k55:3807b<;e;29 6442;?97c==2;18?j43l3:1(><<:371?k55:3>07b<;c;29 6442;?97c==2;78?j43j3:1(><<:371?k55:3<07b<;a;29 6442;?97c==2;58?j4313:1(><<:371?k55:3207b<;8;29 6442;?97c==2;;8?j43?3:1(><<:371?k55:3k07b<;6;29 6442;?97c==2;`8?j43<3:1(><<:371?k55:3i07b<;3;29 6442;?97c==2;f8?j43:3:1(><<:371?k55:3o07b<;1;29 6442;?97c==2;d8?j4383:1(><<:371?k55:3;;76a=3g83>!55;38>>6`<23825>=h::o1<7*<228117=i;;81=?54o31g>5<#;;91>8<4n201>45<3f88o7>5$200>7353g99>7?;;:m17g<72-99?7<:2:l067<6=21d>8o50;&066<5=;1e??<51798k73>290/??=52408j64528=07b<:8;29 6442;?97c==2;3;?>i5=>0;6)==3;066>h4:;0:565`24494?"4::099?5a33095d=6=4+3319604?4>d:9l613=83.8>>4=539m774=9l10c?=n:18'775=:<80b><=:0d8?l71m3:1(><<:04g?k55:3:07d?9c;29 64428<<:04g?k55:3807d?9a;29 64428<<:04g?k55:3>07d?86;29 64428<<:04g?k55:3<07d?84;29 64428<<:04g?k55:3207d?82;29 64428<<:04g?k55:3k07d?80;29 64428<<:04g?k55:3i07d?99;29 64428<<:05`?k55:3:07d?8b;29 64428=h7c==2;38?l70i3:1(><<:05`?k55:3807d?89;29 64428=h7c==2;18?l7?>3:1(><<:05`?k55:3>07d?75;29 64428=h7c==2;78?l7?<3:1(><<:05`?k55:3<07d?73;29 64428=h7c==2;58?l7?:3:1(><<:05`?k55:3207d?71;29 64428=h7c==2;;8?l7?83:1(><<:05`?k55:3k07d?8f;29 64428=h7c==2;`8?l70m3:1(><<:05`?k55:3i07d?88;29 64428=h7c==2;f8?l4503:1(><<:304?k55:3:07d<=6;29 6442;8<7c==2;38?l45<3:1(><<:304?k55:3807d<=3;29 6442;8<7c==2;18?l45:3:1(><<:304?k55:3>07d<=1;29 6442;8<7c==2;78?l4583:1(><<:304?k55:3<07d<>f;29 6442;8<7c==2;58?l46m3:1(><<:304?k55:3207d<>d;29 6442;8<7c==2;;8?l46k3:1(><<:304?k55:3k07d<>b;29 6442;8<7c==2;`8?l4613:1(><<:304?k55:3i07d<>8;29 6442;8<7c==2;f8?l46?3:1(><<:304?k55:3o07d<>6;29 6442;8<7c==2;d8?l46=3:1(><<:304?k55:3;;76g=1583>!55;389;6`<23825>=n:891<7*<228162=i;;81=?54i331>5<#;;91>?94n201>45<3`8:=7>5$200>7403g99>7?;;:k155<72-99?7<=7:l067<6=21b>?h50;&066<5:>1e??<51798m74b290/??=52358j64528=07d<=d;29 6442;8<7c==2;3;?>o5:j0;6)==3;013>h4:;0:565f23`94?"4::09>:5a33095d=84?:%117?45?2d8>?4>d:9j64g=83.8>>4=269m774=9l10e?>i:18'775=:;=0b><=:0d8?j4?:3:1(><<:3:2?k55:3:07b<70;29 6442;2:7c==2;38?j40n3:1(><<:3:2?k55:3807b<8e;29 6442;2:7c==2;18?l4413:1(><<:31;?k55:3:07d<<7;29 6442;937c==2;38?l44>3:1(><<:31;?k55:3807d<<5;29 6442;937c==2;18?j4??3:1(><<:3:5?k55:3:07b<75;29 6442;2=7c==2;38?j4?<3:1(><<:3:5?k55:3807b<73;29 6442;2=7c==2;18?j40=3:1(><<:357?k55:3:07b<83;29 6442;=?7c==2;38?j4093:1(><<:357?k55:3807b<80;29 6442;=?7c==2;18?j41n3:1(><<:357?k55:3>07b<9e;29 6442;=?7c==2;78?j41l3:1(><<:357?k55:3<07b<9c;29 6442;=?7c==2;58?j41j3:1(><<:357?k55:3207b<9a;29 6442;=?7c==2;;8?j4113:1(><<:357?k55:3k07b<98;29 6442;=?7c==2;`8?j41>3:1(><<:357?k55:3i07b<95;29 6442;=?7c==2;f8?j41<3:1(><<:357?k55:3o07b<93;29 6442;=?7c==2;d8?j41:3:1(><<:357?k55:3;;76a=6083>!55;38<86`<23825>=h:?:1<7*<228131=i;;81=?54o37e>5<#;;91>::4n201>45<3f8>i7>5$200>7133g99>7?;;:m11a<72-99?7<84:l067<6=21d>:m50;&066<5?=1e??<51798k71e290/??=52668j64528=07b<8a;29 6442;=?7c==2;3;?>i5?00;6)==3;040>h4:;0:565`26:94?"4::09;95a33095d=?4>d:9l631=83.8>>4=759m774=9l10c?;l:18'775=:>>0b><=:0d8?l53j3:1(><<:26b?k55:3:07d=;9;29 6442:>j7c==2;38?l5303:1(><<:26b?k55:3807d=;7;29 6442:>j7c==2;18?l47?3:1(><<:325?k55:3:07d<<:325?k55:3807d<<:325?k55:3>07d<<:325?k55:3<07d?ie;29 6442;:=7c==2;58?l7al3:1(><<:325?k55:3207d?ic;29 6442;:=7c==2;;8?l7aj3:1(><<:325?k55:3k07d?ia;29 6442;:=7c==2;`8?l7a03:1(><<:325?k55:3i07d?i7;29 6442;:=7c==2;f8?l7a>3:1(><<:325?k55:3o07d?i5;29 6442;:=7c==2;d8?l7a<3:1(><<:325?k55:3;;76g>f283>!55;38;:6`<23825>=n9o81<7*<228143=i;;81=?54i0d2>5<#;;91>=84n201>45<3`;m<7>5$200>7613g99>7?;;:k2ac<72-99?7=k50;&066<58?1e??<51798m76c290/??=52148j64528=07do58k0;6)==3;032>h4:;0:565f21c94?"4::09<;5a33095d=9;o116?7d32c9<94?:%117?47>2d8>?4>d:9j5c?=83.8>>4=079m774=9l10e<=:0d8?xd4;l0;6om50;2x 6502:8>7E=:0:J005=]90h1ov:::549ecl1n?48c;'74`=;1n0b5+2bd97>"5l9087)i=53:&1`1<5j>1/>i;52b28 7b1283:7)"5l10im6*=d882=7=#:mk1=9:4$3fa>7d<,;nh6?m4$3fg>4223-8oi7??9:&1`c<>12.9i=4>109'6`7==81/>h<511c8 7c42"5m00:o=5+2dc95<3<,;oi6<k=5999'6c2=>01/>k;52cc8 7`12l<0(?h8:8d8 7`?28h?7)"5nh0:m>5+2g`9`f=#:oi1=lk4$3dg>46a3-8mi7ok;%0eb?71>2.8<=4>a49'757=9kl0(>>=:658 6642;2o7)=?4;326>"48<0o96*<0785?!57?3;jo6*<098`b>"4800n46*<0`81e>"48k0:=6*<0b81g0=#;9n1>n74$22f>7e>3-9;j7?<:`38 6732;1/?<;52:&053<49l1/??o53248 64e28hi7)==c;3af>"4:o0:4o5+3229764<,:986?5+32696>"45<5<5<5<5<#;;91>>=4n201>4=5<#;;91>>=4n201>6==6=4+33197135<#;;91?9;4n201>4=86=4+33197135<#;;91?9;4n201>6=5<#;;91>8<4n201>4=m6=4+33196045<#;;91>8<4n201>6=o6=4+33196045<#;;91>8<4n201>0=i6=4+33196045<#;;91>8<4n201>2=26=4+33196045<#;;91>8<4n201><=<6=4+33196045<#;;91>8<4n201>g=?6=4+33196045<#;;91>8<4n201>a=96=4+33196045<#;;91>8<4n201>c=;6=4+33196044;n00b?6=,:886?;=;o116?7632e9?h4?:%117?42:2d8>?4>2:9l66b=83.8>>4=539m774=9:10c?=l:18'775=:<80b><=:068?j44j3:1(><<:371?k55:3;>76a=5`83>!55;38>>6`<23822>=h:<31<7*<228117=i;;81=:54o37;>5<#;;91>8<4n201>4><3f8>;7>5$200>7353g99>7?6;:m113<72-99?7<:2:l067<6i21d>8;50;&066<5=;1e??<51c98k733290/??=52408j64528i07b<:0;29 6442;?97c==2;3g?>i5<<0;6)==3;066>h4:;0:i65`22c94?"4::099?5a33095c=5<#;;91=;j4n201>4=5<#;;91=;j4n201>6=5<#;;91=;j4n201>0=6=4+331953b5<#;;91=;j4n201>2=5<#;;91=;j4n201><=5<#;;91=;j4n201>g=5<#;;91=;j4n201>a=5<#;;91=:m4n201>4=5<#;;91=:m4n201>6=5<#;;91=:m4n201>0=5<#;;91=:m4n201>2=5<#;;91=:m4n201><=5<#;;91=:m4n201>g=5<#;;91=:m4n201>a=5<#;;91>?94n201>4=5<#;;91>?94n201>6=5<#;;91>?94n201>0=5<#;;91>?94n201>2=5<#;;91>?94n201><=5<#;;91>?94n201>g=5<#;;91>?94n201>a=5<#;;91>?94n201>c=6=4+33196714;h020?6=,:886?<8;o116?7632c9=>4?:%117?45?2d8>?4>2:9j644=83.8>>4=269m774=9:10e??>:18'775=:;=0b><=:068?l4683:1(><<:304?k55:3;>76g=2g83>!55;389;6`<23822>=n:;o1<7*<228162=i;;81=:54i30g>5<#;;91>?94n201>4><3`89o7>5$200>7403g99>7?6;:k16g<72-99?7<=7:l067<6i21b>?o50;&066<5:>1e??<51c98m74>290/??=52358j64528i07d<=5;29 6442;8<7c==2;3g?>o59h0;6)==3;013>h4:;0:i65f21d94?"4::09>:5a33095c=5<#;;91>5?4n201>4=5<#;;91>5?4n201>6=5<#;;91>>64n201>4=5<#;;91>>64n201>6=5<#;;91>584n201>4=5<#;;91>584n201>6=6=4+33196225<#;;91>::4n201>4=5<#;;91>::4n201>6=5<#;;91>::4n201>0=5<#;;91>::4n201>2=5<#;;91>::4n201><=5<#;;91>::4n201>g=5<#;;91>::4n201>a=5<#;;91>::4n201>c=4;n055?6=,:886?9;;o116?7632e9:=4?:%117?40<2d8>?4>2:9l60`=83.8>>4=759m774=9:10c?;j:18'775=:>>0b><=:068?j42l3:1(><<:357?k55:3;>76a=7b83>!55;38<86`<23822>=h:>h1<7*<228131=i;;81=:54o35b>5<#;;91>::4n201>4><3f8<57>5$200>7133g99>7?6;:m13=<72-99?7<84:l067<6i21d>:950;&066<5?=1e??<51c98k711290/??=52668j64528i07b<82;29 6442;=?7c==2;3g?>i5>>0;6)==3;040>h4:;0:i65`24a94?"4::09;95a33095c=i6=4+331971g5<#;;91?9o4n201>4=36=4+331971g5<#;;91?9o4n201>6=5<#;;91>=84n201>4=5<#;;91>=84n201>6=5<#;;91>=84n201>0=5<#;;91>=84n201>2=5<#;;91>=84n201><=5<#;;91>=84n201>g=5<#;;91>=84n201>a=5<#;;91>=84n201>c=4;h3e7?6=,:886?>9;o116?7632c:j?4?:%117?47>2d8>?4>2:9j5c7=83.8>>4=079m774=9:10e<=:068?l7bn3:1(><<:325?k55:3;>76g=0d83>!55;38;:6`<23822>=n:9n1<7*<228143=i;;81=:54i32`>5<#;;91>=84n201>4><3`8;n7>5$200>7613g99>7?6;:k14d<72-99?7=750;&066<58?1e??<51c98m76?290/??=52148j64528i07do6n00;6)==3;032>h4:;0:i65f1dg94?"4::09<;5a33095c=5bb83>5}#;:=1??;4H273?M5382P:5o4l{579035b58a5?1b2>n1;k4m2;5`>x"49o084i5a1d695>h6m<0:7c<:b;28j71c291/>l>52c18 7g62;h87)nk53:&1gc<43-8o<7=4$3f2>6=#:m81?6*=d280?!4c<3;=7)m7)"5l10:m:5+2e;95=g<,;nj6?<4$3fa>4?73-8oo7ik519a8 7ba2lh0(?k?:3`;?!4b93k0(?k=:228 7c428h0(?k;:`a8 7c22h=0(?k9:808 7c02:30(?k7:3`6?!4b13i<7)"5mk0>96*=eb80a>"5mm0:n;5+2dg92d=#:ll18i5+2g29`==#:o;1>l84$3d1>0`<,;l86?66;%0e0?7b>2.9j84me:&1b3<6;l1/>k95c49'6c>=9;1/>k7518;8 7`f2m1/>kl51708 7`d21:0(?hk:0ff?!4am3;946*=fg81e<=#;9:1o=5+313950><,::96?67;%137?513-9;87?>7:g38 66>28no7)=?a;f0?!57j3n<7)=?c;0`0>"48m09o45+31g96f?<,::m6?m6;%124?4d12.8=<4>5:&057<69h1/?<=515;8 6732;1/?<;52:&053<49l1/??o53248 64e28hi7)==c;3af>"4:o0:4o5+3229764<,:986?5+32696>"45<5<5<5<5<#;;91>>=4n201>4=5<#;;91>>=4n201>6==6=4+33197135<#;;91?9;4n201>4=86=4+33197135<#;;91?9;4n201>6=5<#;;91>8<4n201>4=m6=4+33196045<#;;91>8<4n201>6=o6=4+33196045<#;;91>8<4n201>0=i6=4+33196045<#;;91>8<4n201>2=26=4+33196045<#;;91>8<4n201><=<6=4+33196045<#;;91>8<4n201>g=?6=4+33196045<#;;91>8<4n201>a=96=4+33196045<#;;91>8<4n201>c=;6=4+33196044;n00b?6=,:886?;=;o116?7632e9?h4?:%117?42:2d8>?4>2:9l66b=83.8>>4=539m774=9:10c?=l:18'775=:<80b><=:068?j44j3:1(><<:371?k55:3;>76a=5`83>!55;38>>6`<23822>=h:<31<7*<228117=i;;81=:54o37;>5<#;;91>8<4n201>4><3f8>;7>5$200>7353g99>7?6;:m113<72-99?7<:2:l067<6i21d>8;50;&066<5=;1e??<51c98k733290/??=52408j64528i07b<:0;29 6442;?97c==2;3g?>i5<<0;6)==3;066>h4:;0:i65`22c94?"4::099?5a33095c=5<#;;91=;j4n201>4=5<#;;91=;j4n201>6=5<#;;91=;j4n201>0=6=4+331953b5<#;;91=;j4n201>2=5<#;;91=;j4n201><=5<#;;91=;j4n201>g=5<#;;91=;j4n201>a=5<#;;91=:m4n201>4=5<#;;91=:m4n201>6=5<#;;91=:m4n201>0=5<#;;91=:m4n201>2=5<#;;91=:m4n201><=5<#;;91=:m4n201>g=5<#;;91=:m4n201>a=5<#;;91>?94n201>4=5<#;;91>?94n201>6=5<#;;91>?94n201>0=5<#;;91>?94n201>2=5<#;;91>?94n201><=5<#;;91>?94n201>g=5<#;;91>?94n201>a=5<#;;91>?94n201>c=6=4+33196714;h020?6=,:886?<8;o116?7632c9=>4?:%117?45?2d8>?4>2:9j644=83.8>>4=269m774=9:10e??>:18'775=:;=0b><=:068?l4683:1(><<:304?k55:3;>76g=2g83>!55;389;6`<23822>=n:;o1<7*<228162=i;;81=:54i30g>5<#;;91>?94n201>4><3`89o7>5$200>7403g99>7?6;:k16g<72-99?7<=7:l067<6i21b>?o50;&066<5:>1e??<51c98m74>290/??=52358j64528i07d<=5;29 6442;8<7c==2;3g?>o59h0;6)==3;013>h4:;0:i65f21d94?"4::09>:5a33095c=5<#;;91>5?4n201>4=5<#;;91>5?4n201>6=5<#;;91>>64n201>4=5<#;;91>>64n201>6=5<#;;91>584n201>4=5<#;;91>584n201>6=6=4+33196225<#;;91>::4n201>4=5<#;;91>::4n201>6=5<#;;91>::4n201>0=5<#;;91>::4n201>2=5<#;;91>::4n201><=5<#;;91>::4n201>g=5<#;;91>::4n201>a=5<#;;91>::4n201>c=4;n055?6=,:886?9;;o116?7632e9:=4?:%117?40<2d8>?4>2:9l60`=83.8>>4=759m774=9:10c?;j:18'775=:>>0b><=:068?j42l3:1(><<:357?k55:3;>76a=7b83>!55;38<86`<23822>=h:>h1<7*<228131=i;;81=:54o35b>5<#;;91>::4n201>4><3f8<57>5$200>7133g99>7?6;:m13=<72-99?7<84:l067<6i21d>:950;&066<5?=1e??<51c98k711290/??=52668j64528i07b<82;29 6442;=?7c==2;3g?>i5>>0;6)==3;040>h4:;0:i65`24a94?"4::09;95a33095c=i6=4+331971g5<#;;91?9o4n201>4=36=4+331971g5<#;;91?9o4n201>6=5<#;;91>=84n201>4=5<#;;91>=84n201>6=5<#;;91>=84n201>0=5<#;;91>=84n201>2=5<#;;91>=84n201><=5<#;;91>=84n201>g=5<#;;91>=84n201>a=5<#;;91>=84n201>c=4;h3e7?6=,:886?>9;o116?7632c:j?4?:%117?47>2d8>?4>2:9j5c7=83.8>>4=079m774=9:10e<=:068?l7bn3:1(><<:325?k55:3;>76g=0d83>!55;38;:6`<23822>=n:9n1<7*<228143=i;;81=:54i32`>5<#;;91>=84n201>4><3`8;n7>5$200>7613g99>7?6;:k14d<72-99?7=750;&066<58?1e??<51c98m76?290/??=52148j64528i07do6n00;6)==3;032>h4:;0:i65f1dg94?"4::09<;5a33095c=5bb83>5}#;:=1??;4H273?M5382P:5o4l{579035b58a5?1b2>n1;k4m2;5`>x"49o084i5a1d695>h6m<0:7c<:b;28j71c291/>l>52c18 7g62;h87)nk53:&1gc<43-8o<7=4$3f2>6=#:m81?6*=d280?!4c<39m7)"5l?0:8;5+2e592==#:m21=4k4$3f:>4403-8om7<63:&1`g<3m2.9hn4n8:&1`a329'6`7=9=;0(?k=:0g4?!4b;3;i<6*=e582e4=#:l?1=8>4$3g5><5<,;o<6hl5599'6`e=9:;0(?kk:6`8 7cb2;l0(?ki:7f8 7`72;k?7)"5n=0i:6*=f48g=>"5n?02i6*=f68e3>"5n108=6*=f88267=#:ok1=;94$3da>16<,;lh6<:m;%0e`?c<,;ln6484$3de>26<,::;6<94$222>ac<,::965:4$220>7>e3-9;87?<9:&040<68<1/?=852ca8 6602:20(>>7:3`2?!5713i87)=?a;c7?!57j3n;7)=?c;0`7>"48m09o45+31g96f?<,::m6?m6;%124?4d12.8=<4>8:&057<69m1/?<=514a8 6732;1/?<;52:&053<49l1/??o53248 64e28hi7)==c;3af>"4:o0:4o5+3229764<,:986?5+32696>"45<5<5<5<5<#;;91>>=4n201>4=5<#;;91>>=4n201>6==6=4+33197135<#;;91?9;4n201>4=86=4+33197135<#;;91?9;4n201>6=5<#;;91>8<4n201>4=m6=4+33196045<#;;91>8<4n201>6=o6=4+33196045<#;;91>8<4n201>0=i6=4+33196045<#;;91>8<4n201>2=26=4+33196045<#;;91>8<4n201><=<6=4+33196045<#;;91>8<4n201>g=?6=4+33196045<#;;91>8<4n201>a=96=4+33196045<#;;91>8<4n201>c=;6=4+33196044;n00b?6=,:886?;=;o116?7632e9?h4?:%117?42:2d8>?4>2:9l66b=83.8>>4=539m774=9:10c?=l:18'775=:<80b><=:068?j44j3:1(><<:371?k55:3;>76a=5`83>!55;38>>6`<23822>=h:<31<7*<228117=i;;81=:54o37;>5<#;;91>8<4n201>4><3f8>;7>5$200>7353g99>7?6;:m113<72-99?7<:2:l067<6i21d>8;50;&066<5=;1e??<51c98k733290/??=52408j64528i07b<:0;29 6442;?97c==2;3g?>i5<<0;6)==3;066>h4:;0:i65`22c94?"4::099?5a33095c=5<#;;91=;j4n201>4=5<#;;91=;j4n201>6=5<#;;91=;j4n201>0=6=4+331953b5<#;;91=;j4n201>2=5<#;;91=;j4n201><=5<#;;91=;j4n201>g=5<#;;91=;j4n201>a=5<#;;91=:m4n201>4=5<#;;91=:m4n201>6=5<#;;91=:m4n201>0=5<#;;91=:m4n201>2=5<#;;91=:m4n201><=5<#;;91=:m4n201>g=5<#;;91=:m4n201>a=5<#;;91>?94n201>4=5<#;;91>?94n201>6=5<#;;91>?94n201>0=5<#;;91>?94n201>2=5<#;;91>?94n201><=5<#;;91>?94n201>g=5<#;;91>?94n201>a=5<#;;91>?94n201>c=6=4+33196714;h020?6=,:886?<8;o116?7632c9=>4?:%117?45?2d8>?4>2:9j644=83.8>>4=269m774=9:10e??>:18'775=:;=0b><=:068?l4683:1(><<:304?k55:3;>76g=2g83>!55;389;6`<23822>=n:;o1<7*<228162=i;;81=:54i30g>5<#;;91>?94n201>4><3`89o7>5$200>7403g99>7?6;:k16g<72-99?7<=7:l067<6i21b>?o50;&066<5:>1e??<51c98m74>290/??=52358j64528i07d<=5;29 6442;8<7c==2;3g?>o59h0;6)==3;013>h4:;0:i65f21d94?"4::09>:5a33095c=5<#;;91>5?4n201>4=5<#;;91>5?4n201>6=5<#;;91>>64n201>4=5<#;;91>>64n201>6=5<#;;91>584n201>4=5<#;;91>584n201>6=6=4+33196225<#;;91>::4n201>4=5<#;;91>::4n201>6=5<#;;91>::4n201>0=5<#;;91>::4n201>2=5<#;;91>::4n201><=5<#;;91>::4n201>g=5<#;;91>::4n201>a=5<#;;91>::4n201>c=4;n055?6=,:886?9;;o116?7632e9:=4?:%117?40<2d8>?4>2:9l60`=83.8>>4=759m774=9:10c?;j:18'775=:>>0b><=:068?j42l3:1(><<:357?k55:3;>76a=7b83>!55;38<86`<23822>=h:>h1<7*<228131=i;;81=:54o35b>5<#;;91>::4n201>4><3f8<57>5$200>7133g99>7?6;:m13=<72-99?7<84:l067<6i21d>:950;&066<5?=1e??<51c98k711290/??=52668j64528i07b<82;29 6442;=?7c==2;3g?>i5>>0;6)==3;040>h4:;0:i65`24a94?"4::09;95a33095c=i6=4+331971g5<#;;91?9o4n201>4=36=4+331971g5<#;;91?9o4n201>6=5<#;;91>=84n201>4=5<#;;91>=84n201>6=5<#;;91>=84n201>0=5<#;;91>=84n201>2=5<#;;91>=84n201><=5<#;;91>=84n201>g=5<#;;91>=84n201>a=5<#;;91>=84n201>c=4;h3e7?6=,:886?>9;o116?7632c:j?4?:%117?47>2d8>?4>2:9j5c7=83.8>>4=079m774=9:10e<=:068?l7bn3:1(><<:325?k55:3;>76g=0d83>!55;38;:6`<23822>=n:9n1<7*<228143=i;;81=:54i32`>5<#;;91>=84n201>4><3`8;n7>5$200>7613g99>7?6;:k14d<72-99?7=750;&066<58?1e??<51c98m76?290/??=52148j64528i07do6n00;6)==3;032>h4:;0:i65f1dg94?"4::09<;5a33095c=5bb83>5}#;:=1??;4H273?M5382P:5o4l{579035b58a5?1b2>n1;k4m2;5`>x"49o084i5a1d695>h6m<0:7c<:b;28j71c291/>l>52c18 7g62;h87)nk53:&1gc<43-8o<7=4$3f2>6=#:m81?6*=d280?!4c<3;i46*=d48`?!4c>3;3h6*=d682e7=#:m21m45+2e;91a=#:mk1>o74$3fa>71<,;nh6;%0g`?7b02.9hh4:c:&1`c<6k81/>h>52`18 7c62180(?k=:042?!4b;38i:6*=e58f1>"5m<0:il5+2d49`1=#:l=1:;5+2d:95g?<,;o26<:j;%0fe?253-8nn7?<4:&1af<5il1/>hj511:8 7cb2li0(?ki:0;b?!4a83;356*=f081f1=#:o81=5h4$3d0>4613-8m878m;%0e1?7212.9j;495:&1b23`9'6c?=99>0(?hn:015?!4aj3k97)"5nm094h5+2gg96<0<,;lm64m4$223>44>3-9;=7k=;%136?423-9;?7?mc:&0412g9'750=9?>0(>>8:0c3?!57038jo6*<088245=#;9k1n55+31`954`<,::h6?m7;%13`?4d12.8??:3a:?!5693i:7)=>2;32=>"49:0:9i5+30696>"49<097)=>6;12a>"4:h08?;5+33`95gd<,:8h6=831b>4k50;9j662=83.8>>4=329m774=821b>><50;&066<5;:1e??<51:9j667=83.8>>4=329m774=:21b>>>50;&066<5;:1e??<53:9j710=83.8>>4<449m774=821b?9:50;&066<4<<1e??<51:9j715=83.8>>4<449m774=:21b?9<50;&066<4<<1e??<53:9l605=83.8>>4=539m774=821d>8?50;&066<5=;1e??<51:9l61`=83.8>>4=539m774=:21d>9k50;&066<5=;1e??<53:9l61b=83.8>>4=539m774=<21d>9m50;&066<5=;1e??<55:9l61d=83.8>>4=539m774=>21d>9o50;&066<5=;1e??<57:9l61?=83.8>>4=539m774=021d>9650;&066<5=;1e??<59:9l611=83.8>>4=539m774=i21d>9850;&066<5=;1e??<5b:9l612=83.8>>4=539m774=k21d>9=50;&066<5=;1e??<5d:9l614=83.8>>4=539m774=m21d>9?50;&066<5=;1e??<5f:9l616=83.8>>4=539m774=9910c?=i:18'775=:<80b><=:038?j44m3:1(><<:371?k55:3;976a=3e83>!55;38>>6`<23827>=h::i1<7*<228117=i;;81=954o31a>5<#;;91>8<4n201>43<3f8>m7>5$200>7353g99>7?9;:m11<<72-99?7<:2:l067<6?21d>8650;&066<5=;1e??<51998k730290/??=52408j64528307b<:6;29 6442;?97c==2;3b?>i5=<0;6)==3;066>h4:;0:n65`24694?"4::099?5a33095f=?4>f:9j53c=83.8>>4>6e9m774=821b=;m50;&066<6>m1e??<51:9j53d=83.8>>4>6e9m774=:21b=;o50;&066<6>m1e??<53:9j521=83.8>>4>6e9m774=<21b=:850;&066<6>m1e??<55:9j523=83.8>>4>6e9m774=>21b=::50;&066<6>m1e??<57:9j525=83.8>>4>6e9m774=021b=:<50;&066<6>m1e??<59:9j527=83.8>>4>6e9m774=i21b=:>50;&066<6>m1e??<5b:9j53`=83.8>>4>6e9m774=k21b=;750;&066<6>m1e??<5d:9j52b=83.8>>4>7b9m774=821b=:l50;&066<6?j1e??<51:9j52g=83.8>>4>7b9m774=:21b=:750;&066<6?j1e??<53:9j5=0=83.8>>4>7b9m774=<21b=5;50;&066<6?j1e??<55:9j5=2=83.8>>4>7b9m774=>21b=5=50;&066<6?j1e??<57:9j5=4=83.8>>4>7b9m774=021b=5?50;&066<6?j1e??<59:9j5=6=83.8>>4>7b9m774=i21b=:h50;&066<6?j1e??<5b:9j52c=83.8>>4>7b9m774=k21b=:650;&066<6?j1e??<5d:9j67>=83.8>>4=269m774=821b>?850;&066<5:>1e??<51:9j672=83.8>>4=269m774=:21b>?=50;&066<5:>1e??<53:9j674=83.8>>4=269m774=<21b>??50;&066<5:>1e??<55:9j676=83.8>>4=269m774=>21b>1e??<57:9j64c=83.8>>4=269m774=021b>1e??<59:9j64e=83.8>>4=269m774=i21b>1e??<5b:9j64?=83.8>>4=269m774=k21b><650;&066<5:>1e??<5d:9j641=83.8>>4=269m774=m21b><850;&066<5:>1e??<5f:9j643=83.8>>4=269m774=9910e??;:18'775=:;=0b><=:038?l46;3:1(><<:304?k55:3;976g=1383>!55;389;6`<23827>=n:8;1<7*<228162=i;;81=954i333>5<#;;91>?94n201>43<3`89j7>5$200>7403g99>7?9;:k16`<72-99?7<=7:l067<6?21b>?j50;&066<5:>1e??<51998m74d290/??=52358j64528307d<=b;29 6442;8<7c==2;3b?>o5:h0;6)==3;013>h4:;0:n65f23;94?"4::09>:5a33095f=6=4+3319671?4>f:9l6=4=83.8>>4=809m774=821d>5>50;&066<5081e??<51:9l62`=83.8>>4=809m774=:21d>:k50;&066<5081e??<53:9j66?=83.8>>4=399m774=821b>>950;&066<5;11e??<51:9j660=83.8>>4=399m774=:21b>>;50;&066<5;11e??<53:9l6=1=83.8>>4=879m774=821d>5;50;&066<50?1e??<51:9l6=2=83.8>>4=879m774=:21d>5=50;&066<50?1e??<53:9l623=83.8>>4=759m774=821d>:=50;&066<5?=1e??<51:9l627=83.8>>4=759m774=:21d>:>50;&066<5?=1e??<53:9l63`=83.8>>4=759m774=<21d>;k50;&066<5?=1e??<55:9l63b=83.8>>4=759m774=>21d>;m50;&066<5?=1e??<57:9l63d=83.8>>4=759m774=021d>;o50;&066<5?=1e??<59:9l63?=83.8>>4=759m774=i21d>;650;&066<5?=1e??<5b:9l630=83.8>>4=759m774=k21d>;;50;&066<5?=1e??<5d:9l632=83.8>>4=759m774=m21d>;=50;&066<5?=1e??<5f:9l634=83.8>>4=759m774=9910c?8>:18'775=:>>0b><=:038?j4183:1(><<:357?k55:3;976a=5g83>!55;38<86`<23827>=h:5<#;;91>::4n201>43<3f85$200>7133g99>7?9;:m13g<72-99?7<84:l067<6?21d>:o50;&066<5?=1e??<51998k71>290/??=52668j64528307b<88;29 6442;=?7c==2;3b?>i5?>0;6)==3;040>h4:;0:n65`26494?"4::09;95a33095f=?4>f:9j71d=83.8>>4<4`9m774=821b?9750;&066<4=83.8>>4<4`9m774=:21b?9950;&066<4>4=079m774=821b>=;50;&066<58?1e??<51:9j655=83.8>>4=079m774=:21b>=<50;&066<58?1e??<53:9j657=83.8>>4=079m774=<21b>=>50;&066<58?1e??<55:9j5c`=83.8>>4=079m774=>21b=kk50;&066<58?1e??<57:9j5cb=83.8>>4=079m774=021b=km50;&066<58?1e??<59:9j5cd=83.8>>4=079m774=i21b=ko50;&066<58?1e??<5b:9j5c>=83.8>>4=079m774=k21b=k950;&066<58?1e??<5d:9j5c0=83.8>>4=079m774=m21b=k;50;&066<58?1e??<5f:9j5c2=83.8>>4=079m774=9910e<=:038?l7a:3:1(><<:325?k55:3;976g>f083>!55;38;:6`<23827>=n9o:1<7*<228143=i;;81=954i0ge>5<#;;91>=84n201>43<3`8;i7>5$200>7613g99>7?9;:k14a<72-99?7=m50;&066<58?1e??<51998m76e290/??=52148j64528307do5800;6)==3;032>h4:;0:n65f21:94?"4::09<;5a33095f=9;o116?7b32c:ih4?:%117?47>2d8>?4>f:9~f65f290io7>50z&072<4:<1C?8>4H263?_7>j3ip884;6;ce>g5=j90i87l>:6g93a<0n3h96:m5}%12b?5?l2d:i94>;o3f1?7"5i909n>5+2`396g5<,;ih6>5+2bf97>"5kl087)i?53:&1`7<43-8o?7=4$3f7>4363-8o97h6;%0g2?4fi2.9h:4=8g9'6a>=0:1/>i752c28 7bf28o;7)"5lj0=o6*=de84<>"5ll0hn6*=dg8;1>"5m909m?5+2d395ae<,;o96?o:;%0f7?>c3-8n87??d:&1a0<1n2.9i;464:&1a2<61=1/>h65d79'6`?=191/>ho5359'6`d=9=i0(?kl:013?!4bl3<87)1e<,;l>65g9'6cg=9l80(?hm:037?!4ak3;??6*=fe824g=#:oo1;l5+2gd9533<,::;6?7>;%135?7402.8d:&0462.8<54jd:&04<<60l1/?=o5749'75d=9<=0(>>l:3a2?!57l38h56*<0d81g<=#;9l1>n74$233>7e>3-9:=7=<;%126?76j2.8=>4>1d9'742=:2.8=84=;%122?56m2.8>l4<379'77d=9kh0(>6*<3581?!53l39?o6*<4d800f=n;;<1<75f1bc94?=n:0l1<75f33;94?=n9jl1<75f33594?=n;;21<75f28g94?=n::>1<7*<228176=i;;81<65f22094?"4::09?>5a33095>=n::;1<7*<228176=i;;81>65f22294?"4::09?>5a33097>=n;=<1<7*<228000=i;;81<65f35694?"4::08885a33095>=n;=91<7*<228000=i;;81>65f35094?"4::08885a33097>=h:<91<7*<228117=i;;81<65`24394?"4::099?5a33095>=h:=l1<7*<228117=i;;81>65`25g94?"4::099?5a33097>=h:=n1<7*<228117=i;;81865`25a94?"4::099?5a33091>=h:=h1<7*<228117=i;;81:65`25c94?"4::099?5a33093>=h:=31<7*<228117=i;;81465`25:94?"4::099?5a3309=>=h:==1<7*<228117=i;;81m65`25494?"4::099?5a3309f>=h:=>1<7*<228117=i;;81o65`25194?"4::099?5a3309`>=h:=81<7*<228117=i;;81i65`25394?"4::099?5a3309b>=h:=:1<7*<228117=i;;81==54o31e>5<#;;91>8<4n201>47<3f88i7>5$200>7353g99>7?=;:m17a<72-99?7<:2:l067<6;21d>>m50;&066<5=;1e??<51598k75e290/??=52408j64528?07b<:a;29 6442;?97c==2;35?>i5=00;6)==3;066>h4:;0:;65`24:94?"4::099?5a33095==?4>b:9l602=83.8>>4=539m774=9j10c?;?:18'775=:<80b><=:0f8?j43=3:1(><<:371?k55:3;n76a=3`83>!55;38>>6`<2382b>=n9?o1<7*<22822a=i;;81<65f17a94?"4::0::i5a33095>=n9?h1<7*<22822a=i;;81>65f17c94?"4::0::i5a33097>=n9>=1<7*<22822a=i;;81865f16494?"4::0::i5a33091>=n9>?1<7*<22822a=i;;81:65f16694?"4::0::i5a33093>=n9>91<7*<22822a=i;;81465f16094?"4::0::i5a3309=>=n9>;1<7*<22822a=i;;81m65f16294?"4::0::i5a3309f>=n9?l1<7*<22822a=i;;81o65f17;94?"4::0::i5a3309`>=n9>n1<7*<22823f=i;;81<65f16`94?"4::0:;n5a33095>=n9>k1<7*<22823f=i;;81>65f16;94?"4::0:;n5a33097>=n91<1<7*<22823f=i;;81865f19794?"4::0:;n5a33091>=n91>1<7*<22823f=i;;81:65f19194?"4::0:;n5a33093>=n9181<7*<22823f=i;;81465f19394?"4::0:;n5a3309=>=n91:1<7*<22823f=i;;81m65f16d94?"4::0:;n5a3309f>=n9>o1<7*<22823f=i;;81o65f16:94?"4::0:;n5a3309`>=n:;21<7*<228162=i;;81<65f23494?"4::09>:5a33095>=n:;>1<7*<228162=i;;81>65f23194?"4::09>:5a33097>=n:;81<7*<228162=i;;81865f23394?"4::09>:5a33091>=n:;:1<7*<228162=i;;81:65f20d94?"4::09>:5a33093>=n:8o1<7*<228162=i;;81465f20f94?"4::09>:5a3309=>=n:8i1<7*<228162=i;;81m65f20`94?"4::09>:5a3309f>=n:831<7*<228162=i;;81o65f20:94?"4::09>:5a3309`>=n:8=1<7*<228162=i;;81i65f20494?"4::09>:5a3309b>=n:8?1<7*<228162=i;;81==54i337>5<#;;91>?94n201>47<3`8:?7>5$200>7403g99>7?=;:k157<72-99?7<=7:l067<6;21b>1e??<51598m777290/??=52358j64528?07d<=f;29 6442;8<7c==2;35?>o5:l0;6)==3;013>h4:;0:;65f23f94?"4::09>:5a33095==l4?:%117?45?2d8>?4>b:9j67?=83.8>>4=269m774=9j10e?<::18'775=:;=0b><=:0f8?l46i3:1(><<:304?k55:3;n76g=0g83>!55;389;6`<2382b>=h:181<7*<2281<4=i;;81<65`29294?"4::094<5a33095>=h:>l1<7*<2281<4=i;;81>65`26g94?"4::094<5a33097>=n::31<7*<22817==i;;81<65f22594?"4::09?55a33095>=n::<1<7*<22817==i;;81>65f22794?"4::09?55a33097>=h:1=1<7*<2281<3=i;;81<65`29794?"4::094;5a33095>=h:1>1<7*<2281<3=i;;81>65`29194?"4::094;5a33097>=h:>?1<7*<228131=i;;81<65`26194?"4::09;95a33095>=h:>;1<7*<228131=i;;81>65`26294?"4::09;95a33097>=h:?l1<7*<228131=i;;81865`27g94?"4::09;95a33091>=h:?n1<7*<228131=i;;81:65`27a94?"4::09;95a33093>=h:?h1<7*<228131=i;;81465`27c94?"4::09;95a3309=>=h:?31<7*<228131=i;;81m65`27:94?"4::09;95a3309f>=h:?<1<7*<228131=i;;81o65`27794?"4::09;95a3309`>=h:?>1<7*<228131=i;;81i65`27194?"4::09;95a3309b>=h:?81<7*<228131=i;;81==54o342>5<#;;91>::4n201>47<3f8=<7>5$200>7133g99>7?=;:m11c<72-99?7<84:l067<6;21d>8k50;&066<5?=1e??<51598k73c290/??=52668j64528?07b<8c;29 6442;=?7c==2;35?>i5?k0;6)==3;040>h4:;0:;65`26c94?"4::09;95a33095==?4>b:9l620=83.8>>4=759m774=9j10c?9=:18'775=:>>0b><=:0f8?j41?3:1(><<:357?k55:3;n76a=5b83>!55;38<86`<2382b>=n;=h1<7*<22800d=i;;81<65f35;94?"4::088l5a33095>=n;=21<7*<22800d=i;;81>65f35594?"4::088l5a33097>=n:9=1<7*<228143=i;;81<65f21794?"4::09<;5a33095>=n:991<7*<228143=i;;81>65f21094?"4::09<;5a33097>=n:9;1<7*<228143=i;;81865f21294?"4::09<;5a33091>=n9ol1<7*<228143=i;;81:65f1gg94?"4::09<;5a33093>=n9on1<7*<228143=i;;81465f1ga94?"4::09<;5a3309=>=n9oh1<7*<228143=i;;81m65f1gc94?"4::09<;5a3309f>=n9o21<7*<228143=i;;81o65f1g594?"4::09<;5a3309`>=n9o<1<7*<228143=i;;81i65f1g794?"4::09<;5a3309b>=n9o>1<7*<228143=i;;81==54i0d0>5<#;;91>=84n201>47<3`;m>7>5$200>7613g99>7?=;:k2b4<72-99?750;&066<58?1e??<51598m4ca290/??=52148j64528?07do58m0;6)==3;032>h4:;0:;65f21a94?"4::09<;5a33095==9;o116?7f32c9<44?:%117?47>2d8>?4>b:9j65>=83.8>>4=079m774=9j10e?>;:18'775=:9<0b><=:0f8?l7a13:1(><<:325?k55:3;n76g>ed83>!55;38;:6`<2382b>=zj:926=4mc;294~"4;>08>85G3428L6273S;2n7mt44872?ga2k91n=4m4;`2>2c=?m0e582?k7b=3;0b?;m:19m62b=82.9m=4=b29'6d7=:k90(?ml:29'6fb=;2.9oh4<;%0`b?5<,;n;6>5+2e397>"5l;087)"5l?0m>6*=d687=>"5l10:io5+2e;96g4<,;nj6om4$3fa>42c3-8oo7<7;%0g`??63-8oi7?=3:&1`c539'6`7=:0>0(?k=:077?!4b;3<97)"5m<09:6*=e78fa>"5m>0m46*=e9866>"5m00=i6*=e`8ge>"5mk03o6*=eb81=g=#:ln1=lh4$3gf>a7<,;om6?76;%0e4?4?k2.9j<47a:&1b7<5m2.9j>478:&1b1k7518f8 7`f2j30(?hm:ef8 7`d2ol0(?hk:0;`?!4am3;=<6*=fg8250=#;9:1o?5+313904=#;981=>5+311937=#;9>1?l5+317912=#;9<1=;=4$224>c=#;921i=5+31;9g3=#;9k1=884$22a>4463-9;o70;0`=>"49809<6*<13825==#;891m=5+30696>"49<097)=>6;12a>"4:h08?;5+33`95gd<,:8h6=831b>4k50;9j662=83.8>>4=329m774=821b>><50;&066<5;:1e??<51:9j667=83.8>>4=329m774=:21b>>>50;&066<5;:1e??<53:9j710=83.8>>4<449m774=821b?9:50;&066<4<<1e??<51:9j715=83.8>>4<449m774=:21b?9<50;&066<4<<1e??<53:9l605=83.8>>4=539m774=821d>8?50;&066<5=;1e??<51:9l61`=83.8>>4=539m774=:21d>9k50;&066<5=;1e??<53:9l61b=83.8>>4=539m774=<21d>9m50;&066<5=;1e??<55:9l61d=83.8>>4=539m774=>21d>9o50;&066<5=;1e??<57:9l61?=83.8>>4=539m774=021d>9650;&066<5=;1e??<59:9l611=83.8>>4=539m774=i21d>9850;&066<5=;1e??<5b:9l612=83.8>>4=539m774=k21d>9=50;&066<5=;1e??<5d:9l614=83.8>>4=539m774=m21d>9?50;&066<5=;1e??<5f:9l616=83.8>>4=539m774=9910c?=i:18'775=:<80b><=:038?j44m3:1(><<:371?k55:3;976a=3e83>!55;38>>6`<23827>=h::i1<7*<228117=i;;81=954o31a>5<#;;91>8<4n201>43<3f8>m7>5$200>7353g99>7?9;:m11<<72-99?7<:2:l067<6?21d>8650;&066<5=;1e??<51998k730290/??=52408j64528307b<:6;29 6442;?97c==2;3b?>i5=<0;6)==3;066>h4:;0:n65`24694?"4::099?5a33095f=?4>f:9j53c=83.8>>4>6e9m774=821b=;m50;&066<6>m1e??<51:9j53d=83.8>>4>6e9m774=:21b=;o50;&066<6>m1e??<53:9j521=83.8>>4>6e9m774=<21b=:850;&066<6>m1e??<55:9j523=83.8>>4>6e9m774=>21b=::50;&066<6>m1e??<57:9j525=83.8>>4>6e9m774=021b=:<50;&066<6>m1e??<59:9j527=83.8>>4>6e9m774=i21b=:>50;&066<6>m1e??<5b:9j53`=83.8>>4>6e9m774=k21b=;750;&066<6>m1e??<5d:9j52b=83.8>>4>7b9m774=821b=:l50;&066<6?j1e??<51:9j52g=83.8>>4>7b9m774=:21b=:750;&066<6?j1e??<53:9j5=0=83.8>>4>7b9m774=<21b=5;50;&066<6?j1e??<55:9j5=2=83.8>>4>7b9m774=>21b=5=50;&066<6?j1e??<57:9j5=4=83.8>>4>7b9m774=021b=5?50;&066<6?j1e??<59:9j5=6=83.8>>4>7b9m774=i21b=:h50;&066<6?j1e??<5b:9j52c=83.8>>4>7b9m774=k21b=:650;&066<6?j1e??<5d:9j67>=83.8>>4=269m774=821b>?850;&066<5:>1e??<51:9j672=83.8>>4=269m774=:21b>?=50;&066<5:>1e??<53:9j674=83.8>>4=269m774=<21b>??50;&066<5:>1e??<55:9j676=83.8>>4=269m774=>21b>1e??<57:9j64c=83.8>>4=269m774=021b>1e??<59:9j64e=83.8>>4=269m774=i21b>1e??<5b:9j64?=83.8>>4=269m774=k21b><650;&066<5:>1e??<5d:9j641=83.8>>4=269m774=m21b><850;&066<5:>1e??<5f:9j643=83.8>>4=269m774=9910e??;:18'775=:;=0b><=:038?l46;3:1(><<:304?k55:3;976g=1383>!55;389;6`<23827>=n:8;1<7*<228162=i;;81=954i333>5<#;;91>?94n201>43<3`89j7>5$200>7403g99>7?9;:k16`<72-99?7<=7:l067<6?21b>?j50;&066<5:>1e??<51998m74d290/??=52358j64528307d<=b;29 6442;8<7c==2;3b?>o5:h0;6)==3;013>h4:;0:n65f23;94?"4::09>:5a33095f=6=4+3319671?4>f:9l6=4=83.8>>4=809m774=821d>5>50;&066<5081e??<51:9l62`=83.8>>4=809m774=:21d>:k50;&066<5081e??<53:9j66?=83.8>>4=399m774=821b>>950;&066<5;11e??<51:9j660=83.8>>4=399m774=:21b>>;50;&066<5;11e??<53:9l6=1=83.8>>4=879m774=821d>5;50;&066<50?1e??<51:9l6=2=83.8>>4=879m774=:21d>5=50;&066<50?1e??<53:9l623=83.8>>4=759m774=821d>:=50;&066<5?=1e??<51:9l627=83.8>>4=759m774=:21d>:>50;&066<5?=1e??<53:9l63`=83.8>>4=759m774=<21d>;k50;&066<5?=1e??<55:9l63b=83.8>>4=759m774=>21d>;m50;&066<5?=1e??<57:9l63d=83.8>>4=759m774=021d>;o50;&066<5?=1e??<59:9l63?=83.8>>4=759m774=i21d>;650;&066<5?=1e??<5b:9l630=83.8>>4=759m774=k21d>;;50;&066<5?=1e??<5d:9l632=83.8>>4=759m774=m21d>;=50;&066<5?=1e??<5f:9l634=83.8>>4=759m774=9910c?8>:18'775=:>>0b><=:038?j4183:1(><<:357?k55:3;976a=5g83>!55;38<86`<23827>=h:5<#;;91>::4n201>43<3f85$200>7133g99>7?9;:m13g<72-99?7<84:l067<6?21d>:o50;&066<5?=1e??<51998k71>290/??=52668j64528307b<88;29 6442;=?7c==2;3b?>i5?>0;6)==3;040>h4:;0:n65`26494?"4::09;95a33095f=?4>f:9j71d=83.8>>4<4`9m774=821b?9750;&066<4=83.8>>4<4`9m774=:21b?9950;&066<4>4=079m774=821b>=;50;&066<58?1e??<51:9j655=83.8>>4=079m774=:21b>=<50;&066<58?1e??<53:9j657=83.8>>4=079m774=<21b>=>50;&066<58?1e??<55:9j5c`=83.8>>4=079m774=>21b=kk50;&066<58?1e??<57:9j5cb=83.8>>4=079m774=021b=km50;&066<58?1e??<59:9j5cd=83.8>>4=079m774=i21b=ko50;&066<58?1e??<5b:9j5c>=83.8>>4=079m774=k21b=k950;&066<58?1e??<5d:9j5c0=83.8>>4=079m774=m21b=k;50;&066<58?1e??<5f:9j5c2=83.8>>4=079m774=9910e<=:038?l7a:3:1(><<:325?k55:3;976g>f083>!55;38;:6`<23827>=n9o:1<7*<228143=i;;81=954i0ge>5<#;;91>=84n201>43<3`8;i7>5$200>7613g99>7?9;:k14a<72-99?7=m50;&066<58?1e??<51998m76e290/??=52148j64528307do5800;6)==3;032>h4:;0:n65f21:94?"4::09<;5a33095f=9;o116?7b32c:ih4?:%117?47>2d8>?4>f:9~f65?290io7>50z&072<4:<1C?8>4H263?_7>j3ip884;6;ce>g5=j90i87l>:6g93a<0n3h96:m5}%12b?5?l2d:i94>;o3f1?7"5i909n>5+2`396g5<,;ih6>5+2bf97>"5kl087)i?53:&1`7<43-8o?7=4$3f7>dd<,;n>6n:4$3f5>4c>3-8o;7:i;%0g02.9h44kb:&1`d<61?1/>il51ec8 7bd2l;0(?jk:006?!4cm3;;>6*=dg86e>"5m90:8:5+2d39561<,;o96<78;%0f7?`c3-8n876m;%0f1?74n2.9i;4>4`9'6`1=:h=0(?k7:07f?!4b13;im6*=e`8ef>"5mk0:>h5+2da9a<=#:ln1on5+2dg977=#:ll1hk5+2g295gb<,;l:6?:4$3d1>4cc3-8m?78?;%0e0?73:2.9j84=999'6c0=mo1/>k951348 7`?28h>7)4m4$220>7?73-9;877k;%131?c43-9;:7899'75d=9li0(>>l:3a4?!57l38h56*<0d81g<=#;9l1>n74$233>7e>3-9:=7=4$231>4713-9:?77:;%120?4<,:;>6?5+304974c<,:8j6>=9;%11f?7ej2.8>n4>bc9'77`=91h0(>=?:211?!54;380(>=;:39'71b=;=i0(>:j:26`?l55>3:17d?la;29?l4>n3:17d==9;29?l7dn3:17d==7;29?l5503:17d<6e;29?l44<3:1(><<:310?k55:3:07d<<2;29 6442;987c==2;38?l4493:1(><<:310?k55:3807d<<0;29 6442;987c==2;18?l53>3:1(><<:266?k55:3:07d=;4;29 6442:>>7c==2;38?l53;3:1(><<:266?k55:3807d=;2;29 6442:>>7c==2;18?j42;3:1(><<:371?k55:3:07b<:1;29 6442;?97c==2;38?j43n3:1(><<:371?k55:3807b<;e;29 6442;?97c==2;18?j43l3:1(><<:371?k55:3>07b<;c;29 6442;?97c==2;78?j43j3:1(><<:371?k55:3<07b<;a;29 6442;?97c==2;58?j4313:1(><<:371?k55:3207b<;8;29 6442;?97c==2;;8?j43?3:1(><<:371?k55:3k07b<;6;29 6442;?97c==2;`8?j43<3:1(><<:371?k55:3i07b<;3;29 6442;?97c==2;f8?j43:3:1(><<:371?k55:3o07b<;1;29 6442;?97c==2;d8?j4383:1(><<:371?k55:3;;76a=3g83>!55;38>>6`<23825>=h::o1<7*<228117=i;;81=?54o31g>5<#;;91>8<4n201>45<3f88o7>5$200>7353g99>7?;;:m17g<72-99?7<:2:l067<6=21d>8o50;&066<5=;1e??<51798k73>290/??=52408j64528=07b<:8;29 6442;?97c==2;3;?>i5=>0;6)==3;066>h4:;0:565`24494?"4::099?5a33095d=6=4+3319604?4>d:9l613=83.8>>4=539m774=9l10c?=n:18'775=:<80b><=:0d8?l71m3:1(><<:04g?k55:3:07d?9c;29 64428<<:04g?k55:3807d?9a;29 64428<<:04g?k55:3>07d?86;29 64428<<:04g?k55:3<07d?84;29 64428<<:04g?k55:3207d?82;29 64428<<:04g?k55:3k07d?80;29 64428<<:04g?k55:3i07d?99;29 64428<<:05`?k55:3:07d?8b;29 64428=h7c==2;38?l70i3:1(><<:05`?k55:3807d?89;29 64428=h7c==2;18?l7?>3:1(><<:05`?k55:3>07d?75;29 64428=h7c==2;78?l7?<3:1(><<:05`?k55:3<07d?73;29 64428=h7c==2;58?l7?:3:1(><<:05`?k55:3207d?71;29 64428=h7c==2;;8?l7?83:1(><<:05`?k55:3k07d?8f;29 64428=h7c==2;`8?l70m3:1(><<:05`?k55:3i07d?88;29 64428=h7c==2;f8?l4503:1(><<:304?k55:3:07d<=6;29 6442;8<7c==2;38?l45<3:1(><<:304?k55:3807d<=3;29 6442;8<7c==2;18?l45:3:1(><<:304?k55:3>07d<=1;29 6442;8<7c==2;78?l4583:1(><<:304?k55:3<07d<>f;29 6442;8<7c==2;58?l46m3:1(><<:304?k55:3207d<>d;29 6442;8<7c==2;;8?l46k3:1(><<:304?k55:3k07d<>b;29 6442;8<7c==2;`8?l4613:1(><<:304?k55:3i07d<>8;29 6442;8<7c==2;f8?l46?3:1(><<:304?k55:3o07d<>6;29 6442;8<7c==2;d8?l46=3:1(><<:304?k55:3;;76g=1583>!55;389;6`<23825>=n:891<7*<228162=i;;81=?54i331>5<#;;91>?94n201>45<3`8:=7>5$200>7403g99>7?;;:k155<72-99?7<=7:l067<6=21b>?h50;&066<5:>1e??<51798m74b290/??=52358j64528=07d<=d;29 6442;8<7c==2;3;?>o5:j0;6)==3;013>h4:;0:565f23`94?"4::09>:5a33095d=84?:%117?45?2d8>?4>d:9j64g=83.8>>4=269m774=9l10e?>i:18'775=:;=0b><=:0d8?j4?:3:1(><<:3:2?k55:3:07b<70;29 6442;2:7c==2;38?j40n3:1(><<:3:2?k55:3807b<8e;29 6442;2:7c==2;18?l4413:1(><<:31;?k55:3:07d<<7;29 6442;937c==2;38?l44>3:1(><<:31;?k55:3807d<<5;29 6442;937c==2;18?j4??3:1(><<:3:5?k55:3:07b<75;29 6442;2=7c==2;38?j4?<3:1(><<:3:5?k55:3807b<73;29 6442;2=7c==2;18?j40=3:1(><<:357?k55:3:07b<83;29 6442;=?7c==2;38?j4093:1(><<:357?k55:3807b<80;29 6442;=?7c==2;18?j41n3:1(><<:357?k55:3>07b<9e;29 6442;=?7c==2;78?j41l3:1(><<:357?k55:3<07b<9c;29 6442;=?7c==2;58?j41j3:1(><<:357?k55:3207b<9a;29 6442;=?7c==2;;8?j4113:1(><<:357?k55:3k07b<98;29 6442;=?7c==2;`8?j41>3:1(><<:357?k55:3i07b<95;29 6442;=?7c==2;f8?j41<3:1(><<:357?k55:3o07b<93;29 6442;=?7c==2;d8?j41:3:1(><<:357?k55:3;;76a=6083>!55;38<86`<23825>=h:?:1<7*<228131=i;;81=?54o37e>5<#;;91>::4n201>45<3f8>i7>5$200>7133g99>7?;;:m11a<72-99?7<84:l067<6=21d>:m50;&066<5?=1e??<51798k71e290/??=52668j64528=07b<8a;29 6442;=?7c==2;3;?>i5?00;6)==3;040>h4:;0:565`26:94?"4::09;95a33095d=?4>d:9l631=83.8>>4=759m774=9l10c?;l:18'775=:>>0b><=:0d8?l53j3:1(><<:26b?k55:3:07d=;9;29 6442:>j7c==2;38?l5303:1(><<:26b?k55:3807d=;7;29 6442:>j7c==2;18?l47?3:1(><<:325?k55:3:07d<<:325?k55:3807d<<:325?k55:3>07d<<:325?k55:3<07d?ie;29 6442;:=7c==2;58?l7al3:1(><<:325?k55:3207d?ic;29 6442;:=7c==2;;8?l7aj3:1(><<:325?k55:3k07d?ia;29 6442;:=7c==2;`8?l7a03:1(><<:325?k55:3i07d?i7;29 6442;:=7c==2;f8?l7a>3:1(><<:325?k55:3o07d?i5;29 6442;:=7c==2;d8?l7a<3:1(><<:325?k55:3;;76g>f283>!55;38;:6`<23825>=n9o81<7*<228143=i;;81=?54i0d2>5<#;;91>=84n201>45<3`;m<7>5$200>7613g99>7?;;:k2ac<72-99?7=k50;&066<58?1e??<51798m76c290/??=52148j64528=07do58k0;6)==3;032>h4:;0:565f21c94?"4::09<;5a33095d=9;o116?7d32c9<94?:%117?47>2d8>?4>d:9j5c?=83.8>>4=079m774=9l10e<=:0d8?xu49j0;6><>{<165?4di278?54>7e9>76>=9>h01>=7:05b?85403;<563<3982<3=:;:21=5;4=21;>4>3349847?73:?07=<60;16?>651938965?282;70=<8;34b>;4;10:;h5232:952><5:936?>8;<1076>=:9801>=7:322?854038;<63<3982bc=:;:21=kk4=21;>4`c349847?ic:?07=<6nk16?>651gc8965?28l370=<8;3e3>;4;10:j;5232:95c3<5:936f39>76>=9o;01>=7:0d3?85403;nj63<39814`=:;:21>=j4=21;>76d3498476521;8965?2;:370=<8;030>;4;10:j45232:95`c<5:936?<7;<10278?54=259>76>=:;901>=7:301?8540389=63<398165=:;:21>77b349847<>d:?07=<59j16?>6520`8965?2;;270=<8;02<>;4;109=:5232:9640<5:936??:;<1076>=:8801>=7:332?854038:<63<39816c=:;:21>?k4=21;>74c349847<=c:?07=<5:k16?>6523c8965?2;8270=<8;011>;4;109=l5232:965`<5:936?=;;<1076>=:::01>=7:31:?8540388;63<398173=:;:21>>;4=21;>621349847=;4:?07=<4<:16?>653508965?2:>i70=<8;17=>;4;108855232:9711<5:936n278?54<279>76>=;;=01>=7:20;?8540399563<38823a=:;:31=:l4=21:>41f349857?89:?07<<60?16?>751978965>282?70=<9;3;7>;4;00:4?5232;95=7<5:926<6?;<10=?70n278?44>7d9>76?=9>201>=6:324?854138;963<388146=:;:31>=<4=21:>766349857751gg8965>28lo70=<9;3eg>;4;00:jo5232;95cg<5:926f79>76?=9o?01>=6:0d7?85413;m?63<3882b7=:;:31=k?4=21:>4`7349857?jf:?07<<58l16?>7521f8965>2;:h70=<9;03f>;4;0097;<10=?47<278?44>f89>76?=9lo01>=6:30;?8541389:63<388161=:;:31>?=4=21:>745349857<=1:?07<<5:916?>7520d8965>2;;n70=<9;02`>;4;009=n5232;964d<5:926??6;<10=?460278?44=169>76?=:8<01>=6:336?854138:863<388156=:;:31><<4=21:>776349857<>0:?07<<5:o16?>7523g8965>2;8o70=<9;01g>;4;009>o5232;967g<5:926?<6;<10=?45=278?44=1`9>76?=:9l01>=6:317?8541388>63<388174=:;:31>>>4=21:>75>349857<<7:?07<<5;?16?>752278965>2:>=70=<9;170>;4;0088>5232;9714<5:926>:m;<10=?531278?44<499>76?=;==01>=6:0ae?8541382j63<388063=:;:31??94=21:>64?349857==9:?07d<6?m16?>o516`8965f28=j70=;4;h0:4;5232c95=3<5:9j6<6;;<10e?7?;278?l4>839>76g=91;01>=n:0:3?854i3;7603498m7o52108965f2;::70=;4;h0:jk5232c95cc<5:9j6fc9>76g=9ok01>=n:0d;?854i3;m;63<3`82b3=:;:k1=k;4=21b>4`33498m7?i3:?07d<6n;16?>o51g38965f28l;70=;4;h09l;<10e?47j278?l4=0`9>76g=:9301>=n:32;?854i38;863<3`82b<=:;:k1=hk4=21b>74?3498m7<=6:?07d<5:=16?>o52318965f2;8970=;4;h09>=5232c964`<5:9j6??j;<10e?46l278?l4=1b9>76g=:8h01>=n:33:?854i38:463<3`8152=:;:k1><84=21b>7723498m7<>4:?07d<59:16?>o52008965f2;;:70=;4;h09>k5232c967c<5:9j6?76g=:;k01>=n:30:?854i389963<3`815d=:;:k1>=h4=21b>7533498m7<<2:?07d<5;816?>o52228965f2;9270=;4;h09?;5232c9663<5:9j6>:9;<10e?53<278?l4<429>76g=;=801>=n:26a?854i39?563<3`800==:;:k1?994=21b>4ea3498m7<6f:?07d<4:?16?>o53358965f2:8370=;4;k0:;i5232`952d<5:9i6<9n;<10f?701278?o4>879>76d=91?01>=m:0:7?854j3;3?63<3c82<7=:;:h1=5?4=21a>4>73498n7?8f:?07g<6?l16?>l516:8965e2;:<70=;4;k09<>5232`9654<5:9i6?>>;<10f?478278?o4>fg9>76d=9oo01>=m:0dg?854j3;mo63<3c82bg=:;:h1=ko4=21a>4`?3498n7?i7:?07g<6n?16?>l51g78965e28l?70=;4;k0:j?5232`95c7<5:9i676d=:9n01>=m:32`?854j38;n63<3c814d=:;:h1>=74=21a>76?3498n7l51dg8965e2;8370=;4;k09>95232`9675<5:9i6?<=;<10f?459278?o4=219>76d=:8l01>=m:33f?854j38:h63<3c815f=:;:h1>77>3498n7<>8:?07g<59>16?>l52048965e2;;>70=;4;k09=>5232`9644<5:9i6??>;<10f?468278?o4=2g9>76d=:;o01>=m:30g?854j389o63<3c816g=:;:h1>?o4=21a>74>3498n7<=5:?07g<59h16?>l521d8965e2;9?70=;4;k09?<5232`9666<5:9i6?=6;<10f?44?278?o4=379>76d=::?01>=m:265?854j39?863<3c8006=:;:h1?9<4=21a>62e3498n7=;9:?07g<4<116?>l53558965e28im70=;4;k08>;5232`9771<5:9i6><7;<10f?551278?n4>7e9>76e=9>h01>=l:05b?854k3;<563<3b82<3=:;:i1=5;4=21`>4>33498o7?73:?07f<60;16?>m51938965d282;70=;4;j0:;h5232a952><5:9h6?>8;<10g?47=278?n4=029>76e=:9801>=l:322?854k38;<63<3b82bc=:;:i1=kk4=21`>4`c3498o7?ic:?07f<6nk16?>m51gc8965d28l370=;4;j0:j;5232a95c3<5:9h6f39>76e=9o;01>=l:0d3?854k3;nj63<3b814`=:;:i1>=j4=21`>76d3498o7m521;8965d2;:370=;4;j0:j45232a95`c<5:9h6?<7;<10g?45>278?n4=259>76e=:;901>=l:301?854k389=63<3b8165=:;:i1>77b3498o7<>d:?07f<59j16?>m520`8965d2;;270=;4;j09=:5232a9640<5:9h6??:;<10g?46<278?n4=129>76e=:8801>=l:332?854k38:<63<3b816c=:;:i1>?k4=21`>74c3498o7<=c:?07f<5:k16?>m523c8965d2;8270=;4;j09=l5232a965`<5:9h6?=;;<10g?44:278?n4=309>76e=:::01>=l:31:?854k388;63<3b8173=:;:i1>>;4=21`>6213498o7=;4:?07f<4<:16?>m53508965d2:>i70=;4;j08855232a9711<5:9h6n278?n4<279>76e=;;=01>=l:20;?854k399563<3e823a=:;:n1=:l4=21g>41f3498h7?89:?07a<60?16?>j51978965c282?70=;4;m0:4?5232f95=7<5:9o6<6?;<10`?70n278?i4>7d9>76b=9>201>=k:324?854l38;963<3e8146=:;:n1>=<4=21g>7663498h7j51gg8965c28lo70=;4;m0:jo5232f95cg<5:9o6f79>76b=9o?01>=k:0d7?854l3;m?63<3e82b7=:;:n1=k?4=21g>4`73498h7?jf:?07a<58l16?>j521f8965c2;:h70=;4;m097;<10`?47<278?i4>f89>76b=9lo01>=k:30;?854l389:63<3e8161=:;:n1>?=4=21g>7453498h7<=1:?07a<5:916?>j520d8965c2;;n70=;4;m09=n5232f964d<5:9o6??6;<10`?460278?i4=169>76b=:8<01>=k:336?854l38:863<3e8156=:;:n1><<4=21g>7763498h7<>0:?07a<5:o16?>j523g8965c2;8o70=;4;m09>o5232f967g<5:9o6?<6;<10`?45=278?i4=1`9>76b=:9l01>=k:317?854l388>63<3e8174=:;:n1>>>4=21g>75>3498h7<<7:?07a<5;?16?>j52278965c2:>=70=;4;m088>5232f9714<5:9o6>:m;<10`?531278?i4<499>76b=;==01>=k:0ae?854l382j63<3e8063=:;:n1??94=21g>64?3498h7==9:?07`<6?m16?>k516`8965b28=j70=;4;l0:4;5232g95=3<5:9n6<6;;<10a?7?;278?h4>839>76c=91;01>=j:0:3?854m3;7603498i7k52108965b2;::70=;4;l0:jk5232g95cc<5:9n6fc9>76c=9ok01>=j:0d;?854m3;m;63<3d82b3=:;:o1=k;4=21f>4`33498i7?i3:?07`<6n;16?>k51g38965b28l;70=;4;l09l;<10a?47j278?h4=0`9>76c=:9301>=j:32;?854m38;863<3d82b<=:;:o1=hk4=21f>74?3498i7<=6:?07`<5:=16?>k52318965b2;8970=;4;l09>=5232g964`<5:9n6??j;<10a?46l278?h4=1b9>76c=:8h01>=j:33:?854m38:463<3d8152=:;:o1><84=21f>7723498i7<>4:?07`<59:16?>k52008965b2;;:70=;4;l09>k5232g967c<5:9n6?76c=:;k01>=j:30:?854m389963<3d815d=:;:o1>=h4=21f>7533498i7<<2:?07`<5;816?>k52228965b2;9270=;4;l09?;5232g9663<5:9n6>:9;<10a?53<278?h4<429>76c=;=801>=j:26a?854m39?563<3d800==:;:o1?994=21f>4ea3498i7<6f:?07`<4:?16?>k53358965b2:8370=;4;o0:;i5232d952d<5:9m6<9n;<10b?701278?k4>879>76`=91?01>=i:0:7?854n3;3?63<3g82<7=:;:l1=5?4=21e>4>73498j7?8f:?07c<6?l16?>h516:8965a2;:<70=;4;o09<>5232d9654<5:9m6?>>;<10b?478278?k4>fg9>76`=9oo01>=i:0dg?854n3;mo63<3g82bg=:;:l1=ko4=21e>4`?3498j7?i7:?07c<6n?16?>h51g78965a28l?70=;4;o0:j?5232d95c7<5:9m676`=:9n01>=i:32`?854n38;n63<3g814d=:;:l1>=74=21e>76?3498j7h51dg8965a2;8370=;4;o09>95232d9675<5:9m6?<=;<10b?459278?k4=219>76`=:8l01>=i:33f?854n38:h63<3g815f=:;:l1>77>3498j7<>8:?07c<59>16?>h52048965a2;;>70=;4;o09=>5232d9644<5:9m6??>;<10b?468278?k4=2g9>76`=:;o01>=i:30g?854n389o63<3g816g=:;:l1>?o4=21e>74>3498j7<=5:?07c<59h16?>h521d8965a2;9?70=;4;o09?<5232d9666<5:9m6?=6;<10b?44?278?k4=379>76`=::?01>=i:265?854n39?863<3g8006=:;:l1?9<4=21e>62e3498j7=;9:?07c<4<116?>h53558965a28im70=;4;o08>;5232d9771<5:9m6><7;<10b?5512wx?5<50;0xZ6>5349847<6<;<10=?44i2wx?5:50;0xZ6>33498m7<6:;<10f?44i2wx?5850;0xZ6>13498o7<68;<10`?44i2wx?5650;0xZ6>?3498i7<6n;<10b?44i2wx?5l50;;xZ6>e349847<6e:?07<<51l16?>o528g8965e2;3n70=;4;m095h5232g964ef349857?la:?07d<6kh16?>l51bc8965d28ij70=;4;l0:ol5232d95fg57>59z\01<=:;:21=;74=21:>40>3498m7?99:?07g<6>016?>m517;8965c28<270=;4;o0::45rs27e>5<>sW9>j63<39822c=:;:31=;h4=21b>40a3498n7?9f:?07f<6>o16?>j517d8965b28{t;?:1<77t^243?85403;<<63<388235=:;:k1=:>4=21a>4173498o7?80:?07a<6?916?>k51628965a28=;7p}<6083><}Y;?;01>=7:052?85413;<=63<3`8234=:;:h1=:?4=21`>4163498h7?81:?07`<6?816?>h51638yv51:3:15vP<639>76>=9>801>=6:051?854i3;<>63<3c8237=:;:i1=:<4=21g>4153498i7?82:?07c<6?;1v>8<:18:[51;278?54>729>76?=9>901>=n:050?854j3;4143498j7?83:p732=833pR>8;;<10759>76g=9>>01>=m:057?854k3;<863<3e8231=:;:o1=::4=21e>4133ty8:84?:8y]733<5:936<9:;<10=?70=278?l4>749>76d=9>?01>=l:056?854l3;<963<3d8230=:;:l1=:;4}r152?6=1rT8:;5232:9520<5:926<99;<10e?70>278?o4>779>76e=9><01>=k:055?854m3;<:63<3g8233=z{:<<6=46{_153>;4;10:;:5232;9521<5:9j6<98;<10f?70?278?n4>769>76b=9>=01>=j:054?854n3;<;6s|34c94??|V:?j70=<8;35e>;4;00::l5232c953g<5:9i6<8n;<10g?71i278?i4>6`9>76c=9?k01>=i:04b?xu4=k0;64uQ34`8965?28;4;h0::o5232`953d<5:9h6<8m;<10`?71j278?h4>6c9>76`=9?h0q~=:c;29=~X4=j16?>6517a8965>28;4;k0::n5232a953e<5:9o6<8l;<10a?71k278?k4>6b9~w63b2902wS=:e:?07=<6>l16?>7517g8965f28;4;j0::h5232f953c<5:9n6<8j;<10b?71m2wvb;>k:182M5382we:=k50;3xL6273td=51zJ005=zf?;:6=4>{I174>{i>881<7?tH263?xh19:0;6:?;|l552<728qC?9>4}o425<6sA9?<6sa60c94?7|@:>;7p`91c83>4}O;=:0qc8>c;295~N4<91vb;?k:182M5382we:51zJ005=zf?8:6=4>{I174>{i>;81<7?tH263?xh1::0;6(-80!<74012345678=:0<=>?0123456789:;<=>?0123456789:;<=>?0123456789:;<=>?0123456789:;8=5?0123456789:;<=>?01:7456789:;<=>?0123456789:;<=><0723456689:;;H>;0:2345678;235;:=59362665=9>M9K890B260ACCKH8;ON99C863?56789:;45>?AB32@031:?>99K2G4EB16<89:;==>?41214577898;<=>7012BA@1709:345>L87326735;=?I?;M?05:;76D4<91;<=??23G@5566=L8=?:68F6G6<4CA0:L;:?<6;0E;@544389I?<6>?05632GB18H:9?LL?62F7A0?1>LK?=LO696D6E1?ENJH;:89N9611@7>BJ18:;H:?;12045G?L883JL;>71014B53>M>2257898;>97?052;556?1;>:>9>70837456789:9D;88;;O8L333705=781;9J9>7CB46445491?99>?M056;4546L089JJ>;7=>LC724=<75

>=M?81735746?883=5>704:35=E40H8923;=3D41LN999>401F:<=14?KHI89M;1502447?K?=8N=M>BED42F2>1;8=J:6IF53B4D@0ION8?=6N41934CBA;K3I4IK:B64F=2@?L:8MC1KHI:5KN3836B345=O38>NONFEC74>6689:?:;>95606<667:92=<<>701260F6A:MO3?:?NC1234D?78:O;>96;0B5@4=2739;394;959232<>2988GF=G55;L9>OH9<89F47F0B?H?;H=JJ661:G25FK=:0<H6M0626G=3??M>M;I=9C940<<1EL:;;>LO962@;5=0123<56709:?<=>;0121452789:?<=>=01236567:9:;4=?;0:21454?892;<=;=4@210D2F:1>99?:;6363457789;;==:=01231141=J=N<;>?0163?54589:;<=>?012345>78=:;<9>=3@F7=3?>?KHMJ598B9:5A@@6>OIM>?7IA1;2F16<8;834L6?4731E7G7I8:9M9?7CCFEFD32<=3299?961D;5721<9;:<<>>271207>><91;>9:=802501>2:=K=>9O;A3676043:<89<;>>09224024K9:;89O>04610562M9:?<6>=7053G0BEKJ8I:LJ82C:F0FED1=NJM<=6D9@B21C4;1>8?::=6D5E622DK12J?::?;10@57D6::=3?88KE3A66526KH=J??>L50G3@2EF1O?O9:;874F63CB0=MNMHK9:F52847C?89;J9=JKDCC00=1EJ?KN4=>819J41F50=?382:8MI>?24D3@06>N?9988?I7CF03600KO:IH4L89973E2B?8H>;7==L10071@C49L93I;JJF33;6D3374100::940523456789:;?01030367:=:;<=>?4193056509:;<=>?01234061:>>98=>?01274>6381:;>=<;00274=>5<92;<=5MM?==8K;0131A@048J9I>NJM2B30E22739>9><8J0335G=3E00;9>8>M7074@0?2=HNH<;MM697AFC609K>345:>080741758=>?8?>61103<14398:?>=:>09:10473<?>48?=33:034>6:31F4EC?2<8;>98J=62@;GD>1I1LMLN5KMMD2F@6D2>>>L?5?MKD4C;BCDC11?6L0263?503::M?BG;:54D??9H244M:92134=?FI=I3<;;NB0@25455:89NI=HK822;516<8?KIO8574AAA30K?NMIO>9NMJ<;=017FG2E6>JH?<6>9E4CG2F>?:12954>N41F1=6@BL9LB305GAG7;::O;O?79C170125MJ9>I>:?;14E2375L>=;<5>681C74A4>;OOH<;7I17AA6403KH:8?N;<9G4:F610<8KNJNK>DC0G05=7?K=3H>6?00DF22C2>JIN?47KE24G3ABEL?32H8MIC4@5@2G6<;;HI=8IE52GF3C382:

>795341679J>>5><9202@G@67K?KM;=9M85674F56;K;;N5M;D01A6F0B8?>;7=6=C9;2G20F<1>><48<05C3@=37:92;O?:8N:=N<6C@:04F54?=32>9>409;;4547>1:9846727;2E3E7<1295?=>0C6056EB0>LMOI;<28C50G170JKH48=<4193=675LHIN:?>957GBB72C=>I;4KHM15F1<<06;MI8>=6<811A<1BD>=;>JI;JDB274>6>;L;:::==57@053?D9;83846?E80B4626<8O;;5<:06:34C>689:;5N:?3B24<32739K;=KJL7GG1GG@7;1K==IKN5GAF6F77K1L89KLI81A31DDAN=H=5>;=86@260C?L=:0J=<5>?1123553389>9<=4:08?I4<;28A3=4B6>>2;:N??053BB64CLL;8M;86982712B711IH>KK;0:2AF524<=:;49<=335A56?4K=985;O630@;G=E??;86222=7>99:O98;826E46B4>=N35@00D7C<91;I:6:23@B6=75K8>>8L;?2DF2E0?DJM==M==;744E1202LO=>98H:7456B2@2?OL?<6>IF93EBC1ANKLMHKHIBGDEA4@A892=J>?;1@CA256208:J<8O>587B<<5A1M2>55:?;023A5G0:8;88?JI03;6<521003NIOK9E5;26:97181EB6B0NOKIM5>?0528557DK9:98L8L33231FEE;83;45:=203541B?J:8===?>19@60G7?0JH?H8>=F4D305=68;H?<=K7016@05GC>L>==9:9622;EGE09??JM89?61C0E251I823MOL<01034D7382;;8>6>35G05F4?89:?<=L>8501GD07NJ>9O4M?3G252601MJHIN=??B12A452?8>>;7833064DF<;9M;JO?9>E91F4364<8KN9K6?>93?9>4103E<66A11?:=5:>001440>?I9L8898A;B@@FILLN;;7K419267>C18I89?7>5507456789KJ<=67F71216G?IM2:N4::C95;=C66K1<>85J>2BG74>75L>?;8E:25775M0K884MM20;30<27389;I=?84E6EF12E:J:O;L7?7621E22?L9HJ9=H7F@7772GDL:H88>M<511:B12C9=:0=>??B12B0?4B460@620;:?<=>>1115116699;945C7130A<>H?>O9>8863G:672C?9L2M8M<75@7@4EFJ1NM9?9>4:37>LHW]]0JHI\N<0194;7338>1EC^ZT;CG@WD;9:0;2<:4158JJUSS2hno~l2>3;2=05=6:;K>N<:6C4;;E346N1:H>9J=140:574?0=>N;K=8=6977D545@319LJM87M49:@3;7<8=0E3B25G>88:29I?=A1;47G?2M;:3?5>?121356>>=89==488855G07?790;;M9>417;;4=678;:;<9>>01234565N133:H=8646G@C@?0L8;4;><83F@4=?C4MLB263<30C98?70I82?=>;7327715B3J;EB274A1AI9H>=NJ;812;542738=J>9J=C715AA43?1H>MH?L98F74206J8O85@624>489>9<9<97723676F8?;J<=:792G2@36>99MH;;0:3;<391;3O<=79E72FAGD==3:4<7?2435116<90H?O?MJ674317E7>8398;M;B3071AC7:K>;<4>?0521457B99?:8<>705035@?5<91:5O7;67G5@2D2:>?=94<;256A65E2LH89N;>K20@5466C10<;:47J1003=3?>>9>?<6?N2876724C=8:JO?89A4671421M;=;<=>=0B114CGB99>55274D77:9:OO;:?;0C61D37K:938O;;9C47G6>61;::8=J;01:341658K;:5I:735A2450389:;<;>?15285D?3I;>38<:LE113476A:9=IJ=:?A14B7A@>1:NNM>6=3500B162:0>J9?>>444605=6IH;H>96K281255EE1<;?88?>7E;A2DG289L=9=87B9A@15>EL9::49H7513A446382;I5NK=D@1574?1LJ8;<=9IF4760CE1;883:IM817@30=5?98402M?>;704AEGF@FJ>8>H;77FC2;41B7@B505KH6:4@7:FACBMH:M954;FFG5191;:=57:CC@BGFDDL<;9N8H?4192GN0ON9:;J2@0A=4B2><3MO<=>CD174>7C:OIJ4IMM42A6700EIL<84867C221<3>DM8;==NOLAEDFB20>>O2H?LO72DA22C2738N<;9>>A1A3GF@2LLON9;?I7G5F2=EEM>8N85K:71@302E0?;IIMNM<36704=6B;=:0=H?JDC@@340C<=N95<?8=5>EDC0265BNLK39;J?5CC:2=E6J:I879:G@<3C9?H3J4?;DEFEG6CB=J<259;;0:03645>099O?=>?B3G365?CJ0;;=<8?99;B1<71;1;;<9<7CEG4@7G0;92O630675<65:8:8HKH86654216<:9I<:I8<63;21431I><<=>=>CD4635760?8N94:J47C5@1;O9H;:?D645<3?4<919=;8K73F@172??9I?>?LMFGF7<5>F?9;=N=67DD1345D?=:2;<>=9C9G:=3>D90K?<6<>74A4F=?D<1IHO4?9D54E=672LONNOOK;3D7E46B0L;=M5:K?9D6445GF>0>>9?:?;33B05??:J:?:I<=C022032?<:>>OLH8BB:13;HLM752864B>LJ>=:?7MB255A<1A:J=IJ5MLMHHJ569B3@A@@17:O=:N>6NEB4:05=5:<;J:=9=512;EDG7=??2=N:?01@A0=E7JJ82N5><4@200567:>H38:86B403@<73828?O4<>BC1077BD>?N2O<9?6C4@1<649;3=?4O;7?;?8141476F8;>2<4>?08066527:=3:<56?6@114C61BG67>LIHO9>427DBB@5EM::OJLH8B8G4E0@AM==2;>?;D@C2G4351JNIJKK6D86FF47F1O<3H9JI41913716K;2?>=K;7C:GAF13?:2MO>KKF8DA@16BK93MO:L;D2C2023EM=98;=;IB4D74>40;9K9:>JMCBCBE=>09;8?>O=ME5;BE054003;>?7M38321=E0:?HH;HL;EBA066273;=2>47<8C:F55348;?;4:9N48;;@5BA89:?48<>24A14FG?L=8<556>E5314=D6<=:0>4=N122@=56AJH>NM:>K2CC11G53;J?I?;;=8=701621<2181:2>I7LB83:606689K8;IJN383:E425?O<=<48;0:0B5<7B89?84KM7A4230551I0?2MNL8A540@75B<83NM=8M7563435?==?>M:?=5163?7E7=LL>8L=L0G5E1C66?L:8J86?0254GF@1M=38O5:J8G75017?;8:3;>9?A1:7<16<:MK=9N<;73@;61@680HH94:L252265?D88K;I87731236F14J:3=O;>>5C:6E404<919I9=96567<@@A902<>;:7DCC@A@BE??O9:9=6BBAFB7BAJO<=887;B16EFDC0:H2?<6?0@:72467=9:N49KN1920F=D7?K32I>>>>5::?;3GA4G530J:I:?=<761:F4DD?:;2>>7=580@<1C4?K=JO<:>CGG51@C0>M28OO>735286C5>0;I6AE6B777>>1:<:96N25;6EA@>0ON9N<;J616A17@6:OHIO5?>C87005=480;2<=8?4134=653<;9>597>FCCA26@40=H;5H8?5@13E503829:>96924;1G5EC8O:;0101;7>?:51041402=O<;<:>J6C0@15071:<2:6099;O9>4304757E319:M:98N37404706LH:2?=;?65E6B34GF=?29N?7M13906?OIX\^1HDO33083:44<;;0BB][[:EKA867=87;87><5OTVSQQ112906?IR\Y__6IAM<2394;273:8NI9MLCDA@21@0M?899KM69DA50F5E>MN9EBFG556>M=:0?967492555G>9H2>=H6;FG2;3=5A08KNM8?N;K8A6:55D63I>;9MLH=9DDA@6?4?;=M=K=IC3CA5@0DN<=:889;0:17EGCE1MLJM96:3833G44:8093@E1738;O3I;;;79503C14JK<95LOJ2D63?63601=>;LM:A50GAG379OO;==;7636:EF7BI?:O<5H;275G6=24??9HJN7>91A3116<;<8HH8=92A@1FEA9JK:?47;EE0:@62F<918958>A12B2475I8>3=LH>A42B2563I9?95<8=7304BC6?:;3I4:=79D2;54?F:1K?<6=:987F7DBA1L:I:8?62C2G7GB8>NM98;?0610?8:O;6931;6E25A?KO<89K9HIN48JEG3505=4>L:>85J95GD:573F???MKLI=5:7L15GA6=B3829;8L:H4K67@:E72>>08KINK6K7C4A302>K:>;7>99E432641B89H=>9O;6CC1A1ED99H<>4M<27D455@54394AE52BN0=J?K6:50FB@87N02G@BC3FJ1;I=N=>DGFBA46689??8K6L4190=GEBN?HM8I<<520:1222=O;H4=?>540752?C=0I?O9;<4ED46<0>18;?:NK=44274>5FJ8L2<=9M8@5E6<51L8<9?9H6BG;A2GGEL=2MOH9;055@5@140J?I?==J807AE2273:KH45:M1D4:5576;?23665C4701>HOO7LD320G426<98J9LJ=92A0FDDF1=:0?LK925A:0<551;=2>9J=0107GA040H::O58=010074?1>;N3:817560DD;8=52:5LNC96204E>8H3H>6B@10@BEJ=N9::K>1656B@BC>H8MIO=;0:1A=D@79==IHO9831@7A47C1M;:O9;<7689C@@AD6?K>O4<672D63?6D>LMLN8K6?0123456789:;<=>?0123456789:;<=>?0123456789:;<=>?01234567<918O?;>313EF7EF<?::31:;<07498;2=<;L640A61?4:<888=I:=:3G;03=06<3I?9:?;2A423C1;MH=85?LB2;AG=E1019:O:<;6212<3ED9KKN5I8?8@7GAC6AN;;2O?6L15287A5DN8HN4N6;DE@34531=12;M:99E4A3A456>?O?5K:810;B0FG6;8;HJ49M977F05=4LH;85=>2OH47KAG@44AC6I83M?KL8DC1A<@@5>:9;<:894B@2=:<;??557361038J>;7>JKBG6;A6?A9HO2JN>N7BC@6G229<23>598D96G043D?H:;H4?J86D63@?2J?:NJ9>43G3AB221NKLMO>;641974G0D91:;<;6?092260E0==::MHM;4D:@44G?L=:O=9?=B37B4<@0>9:I26D067F3E3>;>J>O>?374GJ8LBG;@F=273=8;<=>?0503456789:;<=>?01234=6789:;<=>?0123456789:;<=>?01204563<=:08?>?432345239J>??N>L3B230=6791LH?59L7B23456789=N=5>?39134567:9>38=5;2170=G20>L9;9O6=01G73A@FIL2O9I?K0607@FE4NM=9O9H7DD77274F9MN:NL9;0:675D6DK9<3M=6=3G:52=G78?8:N:96DD16B@E78=:><986F26;23GBM><=;9=K8B63?134NMI9><7L237F077E;;:;48O7FCDG4F259:?I=;:;8ED@670B80H88>6N752@716<H5?<;2127A5GB0<;3I=>>D007E20509;;=<;K22A04105NJ:;M=?;A002763?<91?:5=715457CD>993=5I?K623B=04E;1;I;K8<5@10BA5?L3:ML78B662=<3F;K924>IM=08F54@?2LKI;5;J6A1345D75L:?LBMJ88=5JMF2A7347??8H8NN>;05G@0042:H>39?=;A74005=3?K8JJK;M86CB63GANMN8=:JJDBDA@C@B9H:HMI=M59:43AB5N?>388LK5C077AGBL;H9857M301B70E28;?9MKJ?FG@42CCA;=88?8HIF011BA?5NO>;797>5B:7@3E57=9937GD>FHN?=2@7E4463;:;;;9>448;G3GB?>?;2IH;:75AG62E?8M92J:?J641E@F@6J:<=;>9=32AAF<>C9L=I?>>I4197=C57<;743C26G429?:O:I761D4@6IOH?O;:;01776427I:>9K85A25>2=AGZ^X7JFP@>0>58692>1EC^ZT;FJTG:4294:<6:5IORVP?QBI591<3??;58JJUSS2^OI0>4?>0080?IR\Y__6IA_A=194;753=0DYY^ZT;FLTG:4294?<6:N3D73LJJ;K;<25;0667>09:;==:?;5@455E>LJ3?4K>9002GB57C01:H89:;BD:;1161:M;;HI7:M;C5280G15K923;KN?9:>9363B6E79>:N<=?K6BG41C63?M5O6000A=GB>?8?8MO><8DD55=1382>I559N79CF5G@?89:>IK=80B247<509L:O?H;LF0G02214;;9<;79M<82:504C><9<9?LJI29A@E42EKJ:<==:L100AGF?7;;I?4H7=54;7GG>?>H<;89>44B1@01;9=>JL902:=F73?=>2<<8=0167G=65LH>:84894197GD40::?9;?>MCE;34D0C?0HMH4J?587FG5B7<=KIO5ML29G:E@?3>L9O>=>?A5G74>2B1:LO?N?=39DEECDC?ONM9;9IA9DFB543N:9JJI=NACA5F462MH2;>:4?8<2=ON;I=M4CA62F4>I=:08HJ;AD0A5337L;;NMKK?1D53=JI??:82G276>2N1<>8=5;EG;B@=10:>I?5NHJ7B7GA<25J>8JO:H9D85GA4>>:9=<;KJKED;FF476:;K?I<6;0:716=4?:1:;<=;=4@310D2F?L>J9?9J4@332577>9=H?5>?3B21116?NL8?<=>?0163?040KJN?=4;=5@F1=DD0L:=9O=L:6@C3E502N1HOO4>:35473=621LI3>5>>9325<16<=;3<588:805251BB=>5:;A45E3<3?0>9MO9L=54A;E@331KNO=L68407G157?<91>?:B==92?O?J30G42761:<=<:49K56G;0324<9>9=>>882243>70=:3<=<67B126=43<;99:I>?8E3E6636I13MJI9L1528107>902H487?01230575IOL?JO>90224G<4EJ>99>==MFEDFBC@ANONMJK68FBDE05=2=K?>9N<=79334567I;>3<9J8D8:FF<>18;=8?5?7A003=1@7J??:9=<=CC63454382?=>;78876B4@E17E:;8?O56K8575G4BEN;:OO?>N676:322DJ8;I:47<3365A<141J3249>457;:2<431?9>5O6J66C4A22C1H:MO8>;C965135?KO=?M46641962C?ALOO7D:02G?0?1:?<=M803517CG?M>I30:MJ19D2<2G6LL>OMLLJA85:26C4I>K2:O6M7B@@4<3EMK=HI98=75F:EC273<=<998609;E41E1::O:5>?8B5:5B334K8I9>NO943AG2=3D99ON8:KKD74@=:09:971D;23=>7<=8:?H>6121:<=0A;:=O<;?=C@472FB30OI>4HK87DFG3@EBK=<=8=5:873:52?61:>?M9875BA3=<6?>;K:=><;780F337E>M>:O=HLC1:08:=L<;0:7:7<@D<>I2?>K>B1CFB44FK1>?99MN46@34D0EMJ??:=<;5563?0?1KM2I8O;98@6GB@@4LKL344:1552EN1N=N8J70C@0=16<=0HHIKHMB7:B2C@2:0H8N=J62853446EJK5OJ8F9FF=CDA:>K=9IK:257AAGE0LHK;M:>KB6074G6C9:<::4J87E47=D5>MK>?<6;6F95;BF@2>13MOKKI35@E@04AI;>9>L;9A2A256271O=3=>>?7G:G2G3A09LN5I:?;4CGBD@1?;<849965@5513D0=:N9?;7M9D@61<3EIH=9>=?=DG:GGCDA97BE6A@F>?;1L2H?9M540105=2JN=39N=K?676F56GB;4D;32D6382?IJH;LE942E76A?8O3<><617C4KJ??:8?7473667C3M8>255JK55@@4@27J?>;78K>396@=6?58H;=O4L997046AC0I;3?4OK7AGG;56779=45D0A5D5B9?2=5H?K36@@A<61J18M8=?LBE653370LK9?H4K?C92A1@0B99:=?HM;4196B?665A14560NO?<99HL623B=2B3N0924;M<0BD106?3>;?=95JJ9@574>3ANL=;38:5G177;09>>>8M6D4F54D><9OM8;O7FB25A3>0:H<2>4J:0EAGF2273?:>5H=<2B125046M??9>4>>840G0=2E<;9J556>6B;A63G70J39?;6J9G:31043==:0:=;K52C6G<32L?:49>FE3;3125I?:MN=:;56:63GCDK:;98=59095E49=I5C61GDBC1=?>MILK33:@564618;;HH?;0:43E74>J02>8I=K<00@B@3G>>1:9N89>9352@03C=L38JHK:327FB16<>:<91=?4=?3@G6720A>?>H;<<:620@5<238JOHH89;0B54<1?C1:=?;?L=0374=<03N?:?<68I8MFC0A<23><:92>4MJC35F7CB0?=;95?O;A4CE4717;JL?I>:?;71EG<5BL08HM9JL60@3535>;82248M78G222=6B;9=H8?=>1B2261178K83NK7M452820@1:>K:9H??56CGA@1E1L8<=?<91A4A=@09<2==5?;E16G05=1>;LM9IH6CC333GD5;H92IK9M94G4724589>?4ILKC0:E=F6CM9OM?:7MF5;7<50382<=94?N34CG@70E>K=N?>MN57G:E1121LLJ;H87F8:BA2EB1<:<;8;L75A7754?>H>;7;8LB710F650>MI=>8JN8@2;13E31992>O989D3AE16?0LNI8L8LDC;A@10CKJ:I>9>46666=C7F0J998=HJ4D4B6=10230AB6:;8:>?674195<4G78HL3H58;D9@A2A4F80;=O5O6B373E20E0H3<;K6=E9DGBGC10O2N0F085KJD9476C449=:0:OOK13DGBG35?LL?J59I4@00AF74KKI;>;C0110522J0LH8=59C72349H2=NJ;0:4@EC@5>;8I4I;>8G40G3648=8?=56ID27434>>?9N99L=?CE2474C2;;NI>>>?2E63?3ECML=?:5871E4@74C310;HM>9<6D;BGG12;8OH:I6MBBF7161608::IL<:D6;1316<>L>8:H8;4BD5G=B?>O;98IO=6BG:F30B:O>=NO:96D0@A50?>?;I8O>:F10E3A67<91=IH:7A0AB21570?:OI;?<141550EFN=I3H<7>016@A>N?<68I6EDEB7?DJ>:MJI<:A4;GBC@BL>H8J:K7B5AF2C@A;LL2OHM9B@G63DDANOINI;j46rn{=qw`9=>&>9>471234567;9:3>=>;A05;45>50O:2L30:@A447888:;?<76234=744<8K9M<<741945404=0>HIN;762D3B001:=?LA@G74>16IH9>MK68D@G6=CGEJM=OILH7705E6G15N=83J8K<7D7G2@749<=I54MMD3F47G?D?=:0;8L84G@:EC1D9H>2>4;=F6GFED6B?JL2JOKKD1DA02CBNMIH?:=;B935B632K0;88=5862A41CG6LK;;;O695D7A:63GE32?EM9:;598;0:557AB0IHLNII=I4@F7AD1318KOI;H>4D4GFDBC8O:2?9:F163?20?892;?012127201:;;<5?>F51AG672I?:;8=;=6630=7D3?OOI;K;KC82F216>;=<:K6C2;67>EKJ<2?KL>2BG@GFB54;>99566EF@D18:I=?:>426567D1<91<;;L;2@7EA=6EJO6M5BF@09=8E662<6C6:=:;OO:?;6:07=57K>H9O:OIB9C;@764K:;9?=8KA1G46326NOH2?I96B4G@41@39K:M85283=>?>>8OO476B6272D06M?:3==O8426715C4L:9N?>>I333B5=C?I88;H9K8;?>:7C7:GC?>8H<;>=L774A32@1D=:HOJ4O61G:E40>382=IN<8KDC;5F2>3=:=:O>>M54FA=3E?N?OI8O::3361BC0F?I?>;7:LMD6D4=C@B8HH3JN=<74:G5F76<1BD5=C@ALO<9IIJ=37D@2D64=1LJ>9>47B556@46LK8?40EA@35DD:93?<5>?4194GD?0>OO?45J>07;G2=1F>O;O:5O80G14GDGF;?=J;9MMB61G7D0ANK>I=H6K4C574>1DJKII>NL<85@G4A?5MM;;9I>916:62@>7<=;:>9L<1EG6D89;=<:HJE74;<<273>N8:=J?H:;;M803;G6E49K;2:N<91EC;1D3B9=:0;I6L4B7:7<0189NH0>?;=97?010AEA5?888N>=8=0E762D448K;<8=58D9AGG5749J>?8:77F163@F669?O9O9=<6C2223771H;>H9L9:O;=M65A026BDM>;J4;?L151;6@408OI;>597C663?2BF=O>J49;7A8665672J?2:MIO6AC2G26460MLI;:J<341@77>4?L3>8;>;B8F:<16KO:N=NJ;3CC4ECE09?3;BE@:@A6AKJ=NOH??6200<160<91?LL?2866GDD6N8=H=9<=8923<51489>?<69JE3;5A=??>L=;>::8;8B@;0ACE?M=2?:H675D37=B?;18<8K:?;6DA5@05>>?M;N=I5LM<>621:2@5E6M<=::IH?9BDFAF65:M2;<8<6E0C;05=0NJ2>?HICE@3A5?EL;23>56M06:A0DB5:9H=JL7<4BD55=1382=MJ?7L982@=@01:>9HO:6?403:6A6481;HO;K<:59305D1?J1>;75>?0123456789:;<=>?0123456789:;<=>?0123456789:;<=>?0123456789:;<9>48123456789:;?0123456589:;<=>?0123456789:;<=>?0123456789:;<=>?419;456789:?>9K;26G00543:8298>:8C0A74>>78=:;>=9J4@2;5=47<9>;J8?:=4@31132731:;895<=:9<9>?25C26146:=8;8=:;01:741470=8;M9O;2507E443:=:04=>7016307218=8?8=N4@07072F9;?J8=5701:765278=8;89<O8O:KOM;0::33@1B99:;9?9?19030527?L>J=?;=13614=6?<9:38=:=09614D2F<;>98L?=5@63?=77:92;<9<;46A706E7K:I??4GA2<6>00>2?<9>8A12442E7:=28177003A8KKII?==D3CB456?9=88O=LLCD3F214D<913=H>723:0<7B2<98=:<8B;BE23018=M58M843::<4G5>==?<66>F2353=73>1=HNI873D77@122=0B2164G3<1N;O4:?;907=423IK?9OHJ64323E547:H239<>?85F:7=G48H9?9<I2528<6019;9JM5>6AC13F11>?>?<=N;K711:3D?4K>88==8K0@0@60209=9>5IM8C8G205=?<>8?M?:>234GF1>71J3J=<>?DD4B26??=L<925C3=147<0;<24C@G<0>J;OJI<>N155;@=01NH<=DB4G4C>7??>;75;=86:5424>K>=I:N87C@GB7554I?O38I8825;A1<2D<9=I?4M98C6@5F?0NMOMO9>4873E:=7;6E;1@4E7K>L;8;O=44@6<1?DJ>?:JK?:B85EGA37JJ=I48<;419;234D1>HH>H6K3GDGF70C::O3;OHK96G570G1=?:HJI7>1M1KNO=M>=:I5D@E@D06:OKAB4345?588=9==7>1@43<4BDK=3<5?:;136;50>?<=:045?<30GG3DE3MON84IHNCE@A660019:;9:?6ADC1BDCDKO:O=?8N31C13005K?;I8=5780@04=770=?N:I?7630FG?31;;2D2A8?>?:=?=27234D4A8;:H8==;0::;7=5?>=3N=9:=A2C2B26DI0:28L;ND5C66A31K<=K9?=>61463?=>2;>K3=>?3HNL>?A@;B067>=?K8OH886@;G3G37L1>M?KHIFGA7ED@0<9135L:K42:5361>IK23CI=H8M4>93@2A776A>?;L7E@D:GGD>K>N95?6?5626E<55>1?I:L=>1030345>8K8?N0@C0A24?0O>I<586F@7F355C9HO:;N>JC355F7GAJ>>L8FEGF3G?DK>9>JNMJ92G0EF7FIHK=5=?2C4337E1;M>;75M9AB;61D>F>8>;8??:72G756EA=H2;ML?;37F;F1E49H8JN?8K2@42G@>4<;>3N9>48BC0G@?A:=HNJL7J2C@:@=?E<;9H??9L8D264473<9;J:?HKCE0311C6>?I;<=;I419;G@DDJ82>K0HO8H;NE467@@G0M0:O=58M9G101C55::2<;LOK55374>>DN8>J>56JAD1AB@67NK8ON9;?81F7E06D=18=?L=M38:G@07FJ0II98:JC@C4F72731NH:L>9917311E?K:8@;51<6>JH>>:=>?443006529=:04HJ97G44ED01J9<<8NJ=41624C06;>:;N5JIE6D;<61A01LM88<8JK;:417F056EIMLN9OHIFGDE456789:;<:?=>N6E@342?5NOH:>KKI252034@>N83;JO>?7C63?<43K8:NJLH<;9?9:L60CGA3@6=HH=;K=<5@71145AK1?JJLKJE963416<1=9?ONO<4BA:E4EE9OKJON;917:334CFK8;8J8<95E7E2D22I933H;>;A90315>D<9128;9KA7A7<5C1L83HIHO7443@ACG?0ON<=M4:HN821EFA73?L3?<67:54CEFGB4ILHMOLLIBCGG3D3D=OO2NI>J6@;2G3C0>8:;8?865DGA4=B?01;I=I:?;87G66G7M83:IOM=126A<65C=:N8;H:=B1735=4?1H;;?=>N19:F743DM02=8=H:4528=0BB?9=<;5L>7B003<>3?H88MH8M8C@35C51N:L?8L6>63752A?AJ8?OI:ML82D405=>>=?;N::J94C;25@A;L>88N8:F0136C;20C6DM1=;O<==3264E1C3823=:>D>>93>8?718;41AD?9=<;::=?1D2@4710J?>;74863D1FBC>AJO;MOHKIBBD4GC?EI?I8;;:?DED4BCC191=I=4OLF1::@1E7;1L=:9>497;5<107KH9845O?3DAA00@5K=H<>374FG624=?;IOK6<345E<=44>>;85>L=79A74>?0;OOO>H7MEE@B022E?9H:>?4464<725<=>;8=:?06G741>70H>;<8:;82:4A020K=:0549>6C:@FDC>=:N;::?=66477A6105;8987773B4=37>93?=;>;0:;B6<46MM:B71@<L?IA1064531;;K;ON>70523@7>7<912OIMNDBD:4@1EL12:>8LLE625FC0C8=KJNKM>C122535CK?OMJ:HK33137557;9:?<67KD871F7?78:N<;;9MA4:2E3>EK=;H>O?9AE4FF01A9M:?4NJ;E5475<6C:8;C>A;:OMO>8>A528=@4CJJHM:?:68@55==>4L>8:4576257@@4>FM=3M<<:9505767CB<>?O9?>?28GG05=>N9;9<<>783;165D5;9L?88;?820@5545=::HO<=L4B13@=42?A0;75703823MI?J>F3570642;M?38==:76A;44GB::9<=K>?282B52C6K=K?;7L>LC56@G<2B:?>2>979FF<53C11OH49>4A1F;A60F0=N>O;?=8431<=22:8?M4K6720A04=C4>183?I6J2C61==?D8=K3N8?<419B5473>?I284=N2@5@E747<8:98<:LC6;;FC6BMJ8258O;8066<5DC8>?3986:EE;74>G6JJO8?LJ=D9@F05G3MLJ5D36=C@CLLH9JOKLAD@;3GDDK=8741621AG0N5I<>3BCF7753J::3I<7909CB7=4281>?8=5N2D7B21D5<8>;?85;;4@63?D37<92??49:;8467E16?;2J:57KA0CF3=D1J=>HI9H;A5GB1D45<91J9I=>B94B47>?L;3HI?KNAGD;2D0F1O9;<=>723;0A3DE==L;:;77EBAA5?:O?<6O706A0E4768;;:MKMN2@376C6EI083=88K1501152408>8H>=6E5G142?A:02?5>:?;@:AGAE5>?<>9<6:CB6645>E;0OMH6>8;?J4=J1D5B6D40K>8H;>:6F528EKL9JINH8BD04G56789:J4LLN94065G571H<;N4JKC0;FG6C418>>4NLM52AB05=FI9KJM?28=8H7C0A5B@E3NLNIHK<=CC030=4382KJ4LON33C1G6>79;HMIO:6235;GA40><;MH4?MDD666@CA8<9N;7LONC5:36G1390:MN=>8C1A365060?KMO4A@CG2G0FN:<:58JN625@2@@F;L9=I5HJ96DB47CD:?OI8;?68@F;@DB?K8;9:=OI419BF3GF;1?<4OJ:5BG@=DG50929O?6:B9A365768=284LJ:03C@536D9:I<<;GC=>?:NI:=9C6E24560=8<9;>LE2;G0<4>19::?KJ=133;5503M;LMJ=>6FC;:3G>19:CG@WG;99427LJKR@>25;?c9B@ATF4891<374AEFQE974611JHI\N<0<;?DBCZH69255NDEPB868?3HNO^L2;>99B@ATF4<437LJKR@>5:==FLMXJ0:07;@FGVD:?611JHI\N<8<;?DBCZK6;245NDEPA846912KOH_L310<:?DBCZK6:>3l4AEFQF97429427LJKRC>27;>GCL[H78364AEFQF93902KOH_L36?:8EABUJ5=546OKDS@?<;>II;LN8B01E5>30999>8O?847BFGDD=;2I=IJ>23@661G?L:9H=?>614174>GBK=28;N986NDE21B0273HL<>K89DB452G5>I?N=:KJ659GG=GE1L>?3H8KL25FEAGG1<1=:H;L76E14@C7CN=:0MKK:9D;2FC76<0228=O?956:=3B3?LO3H:K>=9MM10:74@630;2384M9201:65269?9H<=6?8E446753:;L;<58M:DG4E4@?F1OLMNH?9D2DEF@>5K8O;<8?I1D254A3382H84K;;EC;3=4GB;:8;>=?JE2;6EA0419894?O?30AF7@>0KJ3;>4;;A@721A3C>K>;7O:M14GA<<22><;A1H=9N9>4B4F7=@G>L>:8:L::A@;F<26E0L2;=;9=0B5@7465IL399?8=4803<13?<0>9H?>6419A251B>;>?54=?0D6GB3B>=JH=>K8=FC56055B<9:NJOMD1=>>39IMK63C@4305K1I;<8JKE66:0F?DI89JMH==35@A4@C6J>:3M?=N2G6;EF273K<62535G260=2:=:87325:G=25:8:9H=>>BC62BG>5<1:=;>>>E0236F04>=:0N:;:D0AAB5BDN?LO8=LJEB35ADD3I?N::5=6C8:@F@?CJK>9JN86FC53=C>B?0328=5MA50;5622;OL?IIL90B4AB=BE>L8=;OM:6B@5=GDDM?9=ONMM3C0A0G77;JI?:I;;0:@B24779:;:<<67555:=0D681HI>IOJ77D7E6G7L02388H625:A@CG3=L;;OL:?3@63?GEDN83NIK<69672G<7>K0I:?N8IB8GG347FK=NJ;I7;7BA4=@?E>:88IK8LE705716F>0K?O5>>001:0=D1<91III<J>=:4>867876@20EN9IH<=6723576AG3=K23?57>92FBB5?3:=??<6LIF17EFA0FL1IJ:?M9CCG77GBENM32I4KM6EF461B5;08H89:LHL34@F@G0291>;8;8;01F7F6E7N1=?<6M?BDF6BGB4?0L2<9O;1CCEF3DB8K>E>J;=M?:?;B30A2E1<9L8:9;?9331E@?DK8>95;K<0EGB7530J:?H:9?863AG45B38MKIO?9;7528G42C=:45@101E5J>IM;C4;0=F2D:MNIH==<=2D31FDDD1K3?8:A@;;4D478;295L>:290B6DG382I:59K<58:025GAJ99:M<860G6560DE>;28:>L;C82B056B;H:?HLO80EC3GF50??>;7N?IFG@00=119>HN>9HK78735AC7=O;J?9?M88G@<7@C=>:9949ID94526?D8MO;49>4C30;E7628==;5?;J28C01A>C8?8?>:?=CE06G<439133>=:K84C455?3?J2;>=?<419@66G?L8=;OHJ680::5731I;I:H4L<1B2E41658;;;?4>?E7551<11813ON5JJ17G74>E5;K3O=>>LA5;;5=?6;M9J>N?IBG52G0D7K>=??>8I911@221C1><:44J68BC262273J>H<56M1@;A61DBJ9;<4N:K6B3;G6E2N>8I<:O=8140211DK==9==<9D9A454>1<=:0O8K;=79FB445>>M:3<=M?054740E7>O>=:IJ>8B6G@202=JN?8=5L54;611?FK?><4:688G7@A42D>?>HJ4KM0BFBBCDFJLL:I5=<59145G?BL0N<=33A:20E>:J;35=44??3363?F02;H:>==O>B12@73GD01:>4NOL134F51C611NMN=9J80A0AF7299HI<5H7F972G16;?;5K<554;256E88K2?=6=C71G@514IL>:4<6;456:G5>C0M?=N=JLC9:2607D<91H;9:ID12F5D1A1L3MNKK;765E@06FJM;:J=K:7GD7<5>?8;83>?>?89:B65GF01:?<6M8C45E4=268?LI?O6M1D64035D8923H05D17F7?8;89M=ON23C16=>5I;:9M=:?;B5F5G459LK:O:L4G1:65661H9>MH5:6975FGAF4C;9ONIIO88G7E6D7CML<=0:H?9JO;>40F51476M?I3HL>NDC4@AF078J374A65BDKM>;7NOJ31@:B@0FI;3MJK8I73FB36BAM=LLLMN9>4CC1F14>><1;;8=:=F96E5=27<9;;=5:?6954@=67I9:;<=H:1306=267=MK?8>9D0@0@27:18:5N=7C321G<5?9K:68A1A1B3L?:I::>LE2574>EE??LJN<96E842=GE0M>O2O4HK813@B=1CJH;NM979E90:@1C1:1<:I8?87753=2310=>M5OJ73@6G5@0JH2;J01FBAF5789;28L;=B92@2505>;:2>I6;A033617789:;<<:?01334547892;8=5LC9244761J18?9LM=41214235MKI9NHH<89>I><8BA;36529H8:N?=638C:5<>88A;016C<9IO8=:92563?FB5M8KM=9M<04666<1F18HNH>OJADDE>K?M8KM70CA5F4G5=<3?5?K618:F07=DM=:0OH<>FGG3@7450<8==?M8A95FKK253402440=KM8=5LE5@5116>L?L;;4J808C62F5?LJ9IOHH?757:E171MK>N4K=K72A@342A<:98MKK;0:AF24>BMMIMN>7<72:23=E3??I8:NL91G52751A>1:8J;98567426BE:M2H?N=3=:;LL10@0<160?35I;I275BB@6?>J2MII;KE53GB@@A8;=OJIHI7GDABG@C<91HJ<==HI8KBG1BNMO;;J1EF4FC5EM:8I84M<9600626D>9>I=5:K1863B4D5I9>?94LJB1:;230><:HI?5?=;BJFGNYKAJOE_HQ[YQG7?FJL8?1H@F?7079@HN408<1H@FEKCM\h7NBDDW]GMSOCM<1H@FHW8:AOOC^60930OBCBIUVF@42L8L1CG4254>:<2<;:KI235B1D2;=522:=K;:4:61657A304N=2?<6J>94F40=?78J82HK9I3931<5G>?:2HHN=MF4@AB<50L:K?H47LE3C@GA?0KLL9O::?;E0E<252>==8=86<9DD5B3>4K?><;>HL72650A3AM:??5>8K51:17D3CILHNNILLC528@3D>?J2=HK9K9CGGBG?>M:HK9=8E414L<;HN891076AF?B09L3OHK958D2=FE2==H9O;9L32GGGAG1;KKO597E8:459?AD;@6G@40J>;7I9K76GE1@4D>M=9>=LJ65@0G3C>MO89MKJICB:340E5NOLMM>OM9@F2EA@D8HLN;9>4D851234D8M9:I>:J62@05F@D>LH?N>;N68@53A>2<13N:?KN98::=D?3N?2;O931@B5=628?9>HH9KCC30FL:HI;K?8EA72656I:?9J:?9E2A`?AGSIV]BHYFPAb9GEQGX_@N_DRL;0:FA03>71M;>H<6:F9:3=74>J8?;H=;L81:2522DI?;;3;<8M90563?AEE<;O3I:9=13C6<=258<;J<:6?0633=D6C0;:::;L780276367:1>?<>?;316;616?14:31G74IJ:95=>?1DD;6374?L>NN588C90;@<10?OLM8:L991134=BC<91OH;K931A21716M=2HM5>>99:511@E=9;O9>7<380FA202K8OH58M>E5F;2C7?I03>8E5AF2D049>L:?;EFAF2D58>OMM<9?99G333>309;IH9;924C02GD1:;8;9=8J163;=4?1L2M<:LID23G15018K;NNC7246G@F?038548NB6FG6C5BM=:;55:;CB;G2F@>M<28MHM;8@71B7?13MCJ0=08;EKB8469?2NBM1?>>69GMD:6:7=0HDO312<4?AOF48>5;6JFA=36:2=CAH6::394DHC?52803MCJ0<617:FJE97>6?1OEL2>>69GMD:587=0HDO320<4?AOF4;85;6JFA=00:2=CAH698394DHC?60803MCJ0?817:FJE9406>1OEL2=8?58@LG;:04=7IGN<3<4?AOF4::556JFA=12>5803MCJ0>?16:FJE959>2NBM1:16:FJE939>2NBM1816:FJE919>2NBM1616:FJE9?9>2NBN1>17:FJF9776>1OEO2>1?58@LD;9;4<7IGM<01=3>BNJ5;?2:5KIC>21;169GMG:617<0HDL31?58@LD;:94<7IGM<33=3>BNJ5892:5KIC>17;1908;EKA8739?2NBN1<9>69GMG:5?7=0HDL329<4?AOE4;35:6JFB=0=3>BNJ59;245KIC>05?69?2NBN1=>>79GMG:46?1OEO2;>79GMG:26?1OEO29>79GMG:06?1OEO27>79GMG:>6>1OE]O30?58@LVF484<7IG_A=0==>BNXH686=08;EKSE959?2NB\O2?>69GMUD;97=0HD^M<3<:?AOWJ591<394DHRA86813MEJ0=08;EMB8469?2NDM1?>>69GKD:6:7=0HBO312<4?AIF48>5;6J@A=36:2=CGH6::394DNC?52803MEJ0<617:FLE97>6?1OCL2>>69GKD:587=0HBO320<4?AIF4;85;6J@A=00:2=CGH698394DNC?60803MEJ0?817:FLE9406>1OCL2=8?58@JG;:04=7IAN<3<4?AIF4::556J@A=12>5803MEJ0>?16:FLE959>2NDM1:16:FLE939>2NDM1816:FLE919>2NDM1616:FLE9?9?2NDMR\JG79GKG:76>1OCO2>0?58@JD;984<7IAM<00=3>BHJ5;82:5KOC>20;169GKG:607=0HBL318<5?AIE484<7IAM<32=3>BHJ58:2:5KOC>16;1>08;EMA8729?2NDN1<:>69GKG:5>7=0HBL326<4?AIE4;25;6J@B=0::3=CGK692:5KOC>04;?69GKG:497<0HBL33?48@JD;<7<0HBL35?48@JD;>7<0HBL37?48@JD;07<0HBL39?58@JDXZLM<7IA_A=2=3>BHXH6:2:5KOQC?6;?4?>69GKUG;;7=0HB^M<1<4?AIWJ5;5;6J@PC>1:<=CGYH7?7>17:FLTG:46=:0I=7;8934G1?1M0NN4HO>F9:E271E?=<;==8990A@0041LJHHOKN8=5J11D;F=E68999?:HI96@117C5KK>M>:LN083EFA678;N:M;?;0:G26330:><>>N6I0B616GG?K;2J6M9:?<>JKD9:77G4C0LH2>4J?D963?@4>?A9=::8L6B@G25139OI:;58;3@:66A2F:H:=>:M989F:40D?0;?98H?61D5:14CF<91N?>MM56:GAG@FNHOOJI;<0EG;BD7>1;:<>K=>B035212E91I<>K7I45322F1>IML?<6K7IB515G0DE?08=H:HIF11FB2>0NO?=?N=IEG5;3<7>I193?I:?;D72@162KHL<KC@A;642E:H>90B7:7765K1H::9M7D528A34>JML2?I9I5C7AEC?5NKKI8:9J9C121AD2I:;;OKOLC663I<>?N?O?M>940B@465<8;;<<9;FD2701C1?9=O4=O?99F;1=3382O<:?D0=;O:9L836275C@101;8N<:6A53674G7I?;9JO?;AD0F1G2>L=>;7H7?C9G0B8==3MI6M39:E=1>>9J3=;>O:0CA0611?M928<::956G;A5CF=:HNI9>4E8;5=115I1;I4>?>306717>A0:;JM;M<233F561D9L3H::>J27:3><9;84?6K419FE1E>9;?=4=>89;;4535JOCE10<88?;L943@454>0O8=M56;C2CFB5BEN<92H=:J875FF3@E1<=N4<9L222GB@273LI9M=6>56105F0DK9O8<56;256:53G7LL8=H9J=25774<7519>;8L:62135<=1B:=:0IHM79174=@?2L2?>?>4LLJ7BC02@@1?H=;J;O774:A@D62:M?I8=5JF22057G0;:9>K8K73F;@4?C=?NO;;9;0:GE7425J039;OKNF8;AGCD7>?9:5K;MDG0FBCD69?2=:=9N72@F=FD?=JL=IN;=D163?@@C=03>:>:?51F7GCCD9?4>>;092G=AB7I;O2596:92:0416;N:K?LC9D4BF2A9L>3;88M0EAG<@B1L9I87H@N3:GMFg=BFVXXX_OB_@`8AKYU[]XJARL;0:D34557IONI;K<=E7:@FDG3L0HN;;=9:=2@0B0133JHIJ9L6KC863?C6F80I?;K<OME7353@3AL:J>8;K00;2G3>2<91M=L6LCGA3G2G6=KN2I:M=545@F56EN;?38H?9A@F27A1BLK?99L6:ACD:4F66;?N?<6H=5D35G=1D=M:8<5KJC40@44729=HIO<=NF@336=?588A6:07DC3;=<24?=85528B16E09:MNL?:9C4GFG4>><<9OO8=21GEF@?>L;=<:LK:545E402382L=?;7:73A0FG>FI8338L6K13D433C5:=OHIHL=1G;4BFB1K9IM=:O?45G@6GDA8<>;7K895876F1C5K?9OMN>?79466A779;:2<=<68G5FA6>7808?8?OID523F@E3;J:;?9>4F62;54C6?M2H;>H>D8@FB2@0M18NJLK9C3F1@G46:?:;8I6>C@44@DED;=>M:9;7419E3A5D>JI3O:6;1@@7=FE2;1O3M:@0N;8O>KK>51;A@C>7M?NO;O9>74@45F02;8I8M58ME8D2@2G1ION>JKL8A25B25273O=M;KJKFGGGBC0AN>LMIHHIEGGEG1C29LI;456749G2B763>:>D=<>>;><;E80G7AGB18N<>4OL77@AEA2D>LOHM::KAC7FA28O;;:97I2012=46>:9284:8;1003F6059;>3<>H;0:DB0C?618?H:LM6D9744F4>:O;;496>88;32440JJHN<;HIE80GECD3IHLI>9>K8978BDJTM=:0JOL6EC6340?7L>L2?4HI5@53E7??9>NH>NM=9C44=G4C?8>=NI<>D55FB50A?M?N8=5IBGDFBC64NOO;JKHMF@DF4C@?8>2:;?KHMFGDEFC@AJOL;JKM;0:DG1FD7?KE6:3=C7>??N;HI=914A2@71C:ML>5;LIE663?CBCNOLMJKHIFGDEBC1ANKLMJOHKC1C5@GC1N1IMJOL8FD5B75>M?C103BCCB8?<>95;60D:;6A3E<91MJ9JJBG@GAG50>ML=4I;JEE@6AG2C=HH>N>7844F42FB?IMI>5NL<0B:BE65B9KK6E:@BG@60>;IH46JE6472725>?>NN?K<39@G45??;1<8;<:?;GD4@FEBN=::5;M739351=B?0=:;8>L>18@;2D21:===:86>0D01466788>:=9L=B2250D>3J==?>I:74071BG0698;89ID5D;AA35=>N;I4L701512G03>J2J4H;?13D42A@382LMHKHI6GDEFA@ALOLM9:HI7G5EF2@EJMLIHKHKBGD4O>;7KHKFGDG30@6<<8?;K>4FGDEBC@ANOLMJKHIFGD4FC@ANOLMJKHIFGDEBC@ANOLMJKHICG;EBC@AMOLMJ5?I419EBC@ANOLMJKHIFGDEBC@ANOLMJKHIFGDEBC@D:<::5N<;41;441?D:K8OO5J63B674>@ANOLMJKHIFGDEBC@ANOLMJKHIFGDEBC@ANOI?9==;43A7B<7480884HMM240337273OLMJKHIFGDEBC@ANOLMJKHIFGDEBC@ANOLMJI>>0E02=0??:188>?8KEE2B@CEE0=:0JKHIFGDEBC@ANOLMJKHIFGDEBC@ANOLMJKHID9;7@7?E1M9JONLN3G04@;0:DEBC@ANOLMJKHIFGDEBC@ANOLMJKHIFGDEBCC?0=:H?=8@CB716=032002>A9?:M8?H6A142B@23<91MJKHIFGDEBC@ANOLMJKHIFGDEBC@ANOLMJKHIFGDEBC@ANOLMJKHIFGDEBC@ANOL:7J=4GOF;?LHN\YU;<55FNHVS[57?3@DBX]Q?299JJLRWW9937D@FTQ]30==NF@^[S=;7;HLJPUY7>11BBDZ__154?LHN\V:;;6GAIU]352=NF@^T;7:KMMQY7=>1BBDZP0758MKOSW9=<7D@FT^2;3>OIA]U;5:5FNHV\4D11BBDZP1758MKOSW8=<7D@FT^3;3>OIA]U:5:5FNHV\5D1D69JJLRX9L=0ECG[_0D4?LHN\V8;;6GAIU]152=NF@^T>?94IOKW[7503@DBXR<;7:KMMQY5=>1BBDZP2758MKOSW;=<7D@FT^0;3>OIA]U95:5FNHV\6D11BBDZP3758MKOSW:=<7D@FT^1;3>OIA]U85:5FNHV\7D1L8;HLJPZ5D?2CEEYQVNFVH^_DJWb:RJJZDR[GKFI;5_SEMMAd=UIDH::OYJR79QABEBI?1YIJMJB59QWQG33[Y_N:5]SUVZT@cUWI[^JB;94SSTBHZG03ZX]MAQM6:QWEQST<2YRBN:4TXRF36=R8&rxxRlck^ofiZabflxjxb| gocwmsceen$emygye^`ooZkbeVmnb"xnlhf-gvru'{kf`ba[1_-vdk)z&y=Sd`ft/pbi*UW&ZCF\AKPPSKN5=(uid=87X> xrv\fimXelgTkh`jr`vlv*aii}c}ioch.ocwmscXjeaTahcPgdl,rdjnl'ixx!}alnlku]6U'xja#| s7]jjlr)zhg$_] \ILROAZVUAD;3"ob729V4*~t|VhggRcjm^efj`tf|fx$kco{iwgaib(ii}c}iRlck^ofiZabf&|j`dj!crvq+wgjdfe{W?S!r`o-v*u1W`dbx#|nm.QS*VOJXEOT\_GB19,qeh143\:$t~zPbmi\i`kXoldn~lz`r.emeqoqmkgl"co{iwg\fimXelgTkh` v`nj`+et|{%ym`b`oqY0Y+tfe'x$;Qfnhv-vdk([Y$XE@^CE^RQMH7?&{kf;>5Z0.zppZdkcVgnaRijndpbpjt(ogke{kmmf,meqoqmVhggRcjm^efj*pfd`n%o~z}/scnhjiwS=W%~lc!r.q5[lhn|'xja"]_.RKNTICXX[CF=5 }al50?P6(pz~TnaePmdo\c`hbzh~d~"iaaukuagk`&gke{kPbmi\i`kXold$zlbfd/appw)uidfdc}U:]/pbi+t({?Ubbdz!r`o,WU(TADZGIR^]IL3;*wgj?:1^<"v|t^`ooZkbeVmnbh|ntnp,ckgsaoiaj aaukuaZdkcVgnaRijn.tbhlb)kz~y#oblnms_3[)zhg%~"}9_hljp+tfe&Y["^GBPMG\TWOJ91$ym`9<;T2,|vrXjeaTahcPgdlfvdrhz&memygyecod*kgsaoTnaePmdo\c`h(~hfbh#m|ts-qehjhgyQSTM[U]E^GMLD;8RLCPW]S[I;5XE@>3:3=PMH6:2;5XE@>1:==PMH686=09;VGB86813^OI0=09;VGA84813^OI0?07;VGA86<76?1\IO2<>c9TVLRBWOCY_Ym4WSKWAZKHLLUJo6Y]IUG\IJBBWK;o7UGCIOZ.\AD'8';+_Y[M 1,2$DUDA@<0T^ZCIC58\VRXOGNi7UQLOSG\MK@H>2RonRGkf:ZglZVuad\n~~g`n028\akXEh`d~[k}shmm55=_ldUFeca}Vdppmjh43Qy?6Wjs99b`atf49427ljkr`>24;?>89b`atf4885n6okdsc?56<7601jhi|n<01=<>gcl{k7=364aefqe94902koho33?:8eabui5>546okdsc?1;>gcl{k75384bhlgaf7?3kf`S`kb_fgm[bcim{chSn}{rg9ahnYjmdUlicQbuy3;?gjlWdofSjka_qpjiZqnl}bT=<64bmi\i`kXoldT|gb_vkgpmY5911i`fQbel]dakYwz`gT{dj{h^12<>dkcVgnaRijn^rqmhYpam~cS9?7;cnh[hcjWnoeS}|fm^uj`qnX=820naePmdo\c`hXx{cfSzgkti]55==edbUfi`Qheo]svlkX`ndR9>8:`ooZkbeVmnbR~}il]tmaroW1897obd_lgn[bciWyxbaRy}aqrfvZu1W`dbxR?=2:`ooZkbeVmnbR~}il]tvdvwm{Ux:Rgaiu]167=edbUfi`Qheo]svlkX{k{|h|Ps7]jjlrX;;80naePmdo\c`hXx{cfSz|npqgq[v0XagcS9<=;cnh[hcjWnoeS}|fm^uqeuvbzVy=Sd`ft^716>dkcVgnaRijn^rqmhYpzhz{iQ|6^kmmqY1:;1i`fQbel]dakYwz`gT{opdp\w3Ynf`~T;?<4bmi\i`kXoldT|gb_vpbtucuWzdkcVgnaRijn^t4[64d3kf`S`kb_fgm[s1X;%*Seagax!ALV@&@mgoymya} 06-3425mlj]nahYnfySob`cj37?gjlWdofSb{{ptv\fiidc=1h`fo7;emvpd:7611ocxzn<0<;?air|h69255kotvb868?3me~xl2;>99gkprf4<437iazt`>5:d=cg|~j0:4?>99gkprf4>487h`n8:ldggsndm80bb=4rno7a==ugd&i`fQbel]dakYq?V9'wnQndepb[roc|a7:8!mPaefqfZqnl}b6=9"l_`ndkwos`d7: nQnxh]j`Zqnl}b68!mPayk\wigqmV~r|h3?,b]b|lYsqyo6=!mPbxvf[vo}m43'oRm`mlmm[fjl59&hSikiatnw[agsi4LM nQkircah`Ypi{dTnexPcnno95*dWmcxmobj_vcqjZdo~Vxjbjk20-a\aigeg{keb`Pdhp>@Z)uajkyhb!_rn{fgqit'ozlm"twkxr,~}m~x99|#d~losg\`lt(|dz$Sni ,b]fjddkmV99ndzPaefqavu:8%iTjlcflx?ptdtsig<'oRfns^c{mZoc59&hSeo|_dlb94*dWakxSh`m=1.`[mgtW`dainzjrs?3(fYoizUfi`Q`uurvpZtbozUj1="l_icp[hcjWf|xzPrdep[g;7$jUcm~Qbuy]lqqvr|Vxnk~Qn=1.`[mgtWdsSb{{ptv\v`atWk7; nQgar]qabebi4:'oRfns^pfcfce59&hSeo|_sqwe86+kVbjR||tc?3(fYoizUxckzjcb]jjussW{olRo20-a\lduX{flinmPotvsqqYumnyTn0>#c^kmmqYaaeo6NaoakRvqmka+kVceeyQiimg\jdkb5{ef"`gi,b]jjlrfWkg1="l_hljpgYqie7; nQfnugqbdebW}s{i0>#c^nleaYnf`~Tjdbj=0.`[hcjW}s{i0=#c^ov|ZvnxlfbbhQ|t`efw86+kVzye`Q{yqg>5)eXzlkoSikti]b94040=&hSknd^fftqnXj4;=?5:#c^pfeaYpam~cSl37,b]qadbX`ndRl28-a\vvrXx{cd~dzv_`?@A)eXzz~T|g`rhvz[g;DM%iT~~zPtxrf9V_IK%iT~~z}al]b95*dW{y~lcPb<2/gZuneVid`ag|inl\gmcdc4KG@!mPurg\fwgjWkfdof3?,b]vw`Yeq}oT{ho20-a\qvcXjp~nSzkm=1.`[pubWmommxb{_ecwe87+kVxiRklc<2/gZstmVydjyklc<2/gZqbiV}bhyf21-a\s`dX`nd0?#c^uqmqcXllzdRo2171;0)eX{ciRjjpuj\f871;1>'oRy}iug\ijbbWh7\^DZJ_GKQWQ*dW~xbxhQboeg\f8QUA]OTJD\\T-a\swosmV}bhyfPa<:/gZqua}oT{dj{h^`><)eXpmo}enkialko}8uwi{~jb;s>7:pli)dkcVgnaRijn^t4[6*|utJK|;=i;AB{7=c=N3>1=v]>d88012<4:90:?>o>9781e=1csg9>97?4n275>3=#;<91?9h4}R3g3?52?399<7?<3`3:2?4f01n0_>?8:2:`>5<6;:k:5;4=a9;3?V7c?393o7>5121b5<0=:h22=6j<8d83>4<6sZ;o57=:7;114?74;h;2:75121b5<0=:h23o6*<40805<=Q;<>1>v{<1`82?p56j3:0q)==1;d5?g5?m3:1=546:0;xL6273-98;7=7e:X2=g<5s==1=><5}%166?50l2.:o>4<919'5a>=;1l0(>;j:18'775=;<=:198m63d290/??=534f8j6452810e>;m:18'775=;<=:398m63f290/??=534f8j6452:10e>88:18'775=;<=:598m601290/??=534f8j6452<10e>8::18'775=;<=:798m603290/??=534f8j6452>10e>8<:18'775=;<=:998m605290/??=534f8j6452010e>8>:18'775=;<=:`98m607290/??=534f8j6452k10e>;i:18'775=;<=:b98m63>290/??=534f8j6452m10e>6>:188m6>e2900c>6n:18'775=;130b><=:198k6>?290/??=539;8j6452810c>68:18'775=;130b><=:398k6>1290/??=539;8j6452:10c>6::18'775=;130b><=:598k6>3290/??=539;8j6452<10c>6<:18'775=;130b><=:798k6>5290/??=539;8j6452>10n>;>:182>5<7s-98;7;?;I174>\61k0hw9;5478bb?d42k:1n94m1;5f>2b=?o0i>79l:|&05c<40m1e=h:51:l2a0<63g8>n7>4n35g>5=#:h:1>o=4$3c2>7d43-8ho7=4$3ag>6=#:jo1?6*=cg80?!4c8390(?j>:29'6a4=;2.9h>4<;%0g0?74k2.9h84=3:&1`3<6;k1/>i95ad9'6a>=9;n0(?j6:07b?!4ci3;2?6*=dc8261=#:mi1no5+2ef90g=#:mo19;5+2ed972=#:l:1=?>4$3g2>06<,;o96:=4$3g0>6d<,;o?6>;4$3g6>6e<,;o=68=4$3g4>2=#:l21=95+2d;95g1<,;oj6>j4$3ga>44d3-8no7?n6:&1aa<5l2.9ih4m;%0fb?7e;2.9j=4i3:&1b4<192.9j?4>ac9'6c5=99=0(?h;:dc8 7`22;hi7)"5n00=86*=f`82e<=#:oh1945+2ga95`=#:on1==m4$3df>g?<,;lm655+31295d2<,:::64>2`9'752=9890(>>::e08 6612<1/?=951`f8 66?2jo0(>>6:ga8 66f2;30(>>m:0a8 66d2;i=7)=?d;0`=>"48l09o45+31d96f?<,:;;6?m6;%125?5<,:;967=#;8<1?6513-99n7?mb:&06f<6jk1/??h519`8 6572:997)=<3;08 6532;1/?9j535a8 62b2:>h7d==6;29?l7di3:17d<6f;29?l5513:17d?lf;29?l55?3:17d==8;29?l4>m3:17d<<4;29 6442;987c==2;28?l44:3:1(><<:310?k55:3;07d<<1;29 6442;987c==2;08?l4483:1(><<:310?k55:3907d=;6;29 6442:>>7c==2;28?l53<3:1(><<:266?k55:3;07d=;3;29 6442:>>7c==2;08?l53:3:1(><<:266?k55:3907b<:3;29 6442;?97c==2;28?j4293:1(><<:371?k55:3;07b<;f;29 6442;?97c==2;08?j43m3:1(><<:371?k55:3907b<;d;29 6442;?97c==2;68?j43k3:1(><<:371?k55:3?07b<;b;29 6442;?97c==2;48?j43i3:1(><<:371?k55:3=07b<;9;29 6442;?97c==2;:8?j4303:1(><<:371?k55:3307b<;7;29 6442;?97c==2;c8?j43>3:1(><<:371?k55:3h07b<;4;29 6442;?97c==2;a8?j43;3:1(><<:371?k55:3n07b<;2;29 6442;?97c==2;g8?j4393:1(><<:371?k55:3l07b<;0;29 6442;?97c==2;33?>i5;o0;6)==3;066>h4:;0:=65`22g94?"4::099?5a330957=?4>5:9l60g=83.8>>4=539m774=9?10c?;6:18'775=:<80b><=:058?j4203:1(><<:371?k55:3;376a=5683>!55;38>>6`<2382=>=h:<<1<7*<228117=i;;81=l54o376>5<#;;91>8<4n201>4d<3f8>87>5$200>7353g99>7?l;:m115<72-99?7<:2:l067<6l21d>9;50;&066<5=;1e??<51d98k75f290/??=52408j64528l07d?9e;29 64428<<:04g?k55:3;07d?9b;29 64428<<:04g?k55:3907d?87;29 644283:1(><<:04g?k55:3?07d?85;29 64428<<:04g?k55:3=07d?83;29 64428<<:04g?k55:3307d?81;29 64428<<:04g?k55:3h07d?9f;29 64428<<:04g?k55:3n07d?8d;29 64428=h7c==2;28?l70j3:1(><<:05`?k55:3;07d?8a;29 64428=h7c==2;08?l7013:1(><<:05`?k55:3907d?76;29 64428=h7c==2;68?l7?=3:1(><<:05`?k55:3?07d?74;29 64428=h7c==2;48?l7?;3:1(><<:05`?k55:3=07d?72;29 64428=h7c==2;:8?l7?93:1(><<:05`?k55:3307d?70;29 64428=h7c==2;c8?l70n3:1(><<:05`?k55:3h07d?8e;29 64428=h7c==2;a8?l7003:1(><<:05`?k55:3n07d<=8;29 6442;8<7c==2;28?l45>3:1(><<:304?k55:3;07d<=4;29 6442;8<7c==2;08?l45;3:1(><<:304?k55:3907d<=2;29 6442;8<7c==2;68?l4593:1(><<:304?k55:3?07d<=0;29 6442;8<7c==2;48?l46n3:1(><<:304?k55:3=07d<>e;29 6442;8<7c==2;:8?l46l3:1(><<:304?k55:3307d<>c;29 6442;8<7c==2;c8?l46j3:1(><<:304?k55:3h07d<>9;29 6442;8<7c==2;a8?l4603:1(><<:304?k55:3n07d<>7;29 6442;8<7c==2;g8?l46>3:1(><<:304?k55:3l07d<>5;29 6442;8<7c==2;33?>o59=0;6)==3;013>h4:;0:=65f20194?"4::09>:5a330957=?4>5:9j67`=83.8>>4=269m774=9?10e?<=:058?l45l3:1(><<:304?k55:3;376g=2b83>!55;389;6`<2382=>=n:;h1<7*<228162=i;;81=l54i30b>5<#;;91>?94n201>4d<3`8957>5$200>7403g99>7?l;:k160<72-99?7<=7:l067<6l21b>1e??<51d98m76a290/??=52358j64528l07b<72;29 6442;2:7c==2;28?j4?83:1(><<:3:2?k55:3;07b<8f;29 6442;2:7c==2;08?j40m3:1(><<:3:2?k55:3907d<<9;29 6442;937c==2;28?l44?3:1(><<:31;?k55:3;07d<<6;29 6442;937c==2;08?l44=3:1(><<:31;?k55:3907b<77;29 6442;2=7c==2;28?j4?=3:1(><<:3:5?k55:3;07b<74;29 6442;2=7c==2;08?j4?;3:1(><<:3:5?k55:3907b<85;29 6442;=?7c==2;28?j40;3:1(><<:357?k55:3;07b<81;29 6442;=?7c==2;08?j4083:1(><<:357?k55:3907b<9f;29 6442;=?7c==2;68?j41m3:1(><<:357?k55:3?07b<9d;29 6442;=?7c==2;48?j41k3:1(><<:357?k55:3=07b<9b;29 6442;=?7c==2;:8?j41i3:1(><<:357?k55:3307b<99;29 6442;=?7c==2;c8?j4103:1(><<:357?k55:3h07b<96;29 6442;=?7c==2;a8?j41=3:1(><<:357?k55:3n07b<94;29 6442;=?7c==2;g8?j41;3:1(><<:357?k55:3l07b<92;29 6442;=?7c==2;33?>i5>80;6)==3;040>h4:;0:=65`27294?"4::09;95a330957=?4>5:9l62e=83.8>>4=759m774=9?10c?9m:18'775=:>>0b><=:058?j40i3:1(><<:357?k55:3;376a=7883>!55;38<86`<2382=>=h:>21<7*<228131=i;;81=l54o354>5<#;;91>::4n201>4d<3f8<:7>5$200>7133g99>7?l;:m137<72-99?7<84:l067<6l21d>;950;&066<5?=1e??<51d98k73d290/??=52668j64528l07d=;b;29 6442:>j7c==2;28?l5313:1(><<:26b?k55:3;07d=;8;29 6442:>j7c==2;08?l53?3:1(><<:26b?k55:3907d<<:325?k55:3;07d<<:325?k55:3907d<<:325?k55:3?07d?if;29 6442;:=7c==2;48?l7am3:1(><<:325?k55:3=07d?id;29 6442;:=7c==2;:8?l7ak3:1(><<:325?k55:3307d?ib;29 6442;:=7c==2;c8?l7ai3:1(><<:325?k55:3h07d?i8;29 6442;:=7c==2;a8?l7a?3:1(><<:325?k55:3n07d?i6;29 6442;:=7c==2;g8?l7a=3:1(><<:325?k55:3l07d?i4;29 6442;:=7c==2;33?>o6n:0;6)==3;032>h4:;0:=65f1g094?"4::09<;5a330957=9;o116?7332c:ik4?:%117?47>2d8>?4>5:9j65c=83.8>>4=079m774=9?10e?>k:18'775=:9<0b><=:058?l47k3:1(><<:325?k55:3;376g=0c83>!55;38;:6`<2382=>=n:9k1<7*<228143=i;;81=l54i32:>5<#;;91>=84n201>4d<3`8;47>5$200>7613g99>7?l;:k141<72-99?7ge=83:p(>=8:206?M5282B88=5U18`9g~222=<1mk4m3;`3>g2=j804$3c3>7d43-8j=76=#:jl1?6*=d180?!4c9390(?j=:29'6a5=;2.9h94=b69'6a3=:j:0(?j9:0;2?!4c?3;i=6*=d98ae>"5l00:5?5+2ec9512<,;ni6?l4$3f`>7e<,;no6<::;%0ga?7712.9hk469:&1a5<6981/>h?5509'6`4=99k0(?k<:4`8 7c32><0(?k::4g8 7c12<>0(?k8:3ce?!4b038ii6*=e882g5=#:lk1=4;4$3ga>44e3-8no7?me:&1aai2.9j?4=9e9'6c5=111/>k:5689'6c3=:kk0(?h9:d48 7`020l0(?h7:0`7?!4a1383m6*=f`82e6=#:oh1hn5+2ga95dc<,;lo6<>i;%0ea?gc3-8mj7?96:&045<6i<1/?=?51cd8 6652>=0(>><:3:g?!57<3;:>6*<048g1>"48?0=7)=?7;3bg>"4810hj6*<088f<>"48h09m6*<0c825>"48j09o85+31f96f?<,::n6?m6;%13b?4d12.8==4=c89'747=9o1/?<<510a8 6742h;0(>?;:39'743=:2.8=;4<1d9'77g=;:<0(><4$210>7=#;:>1>6*<4e800f=#;=o1?9m4i205>5<5<5<5<5<#;;91>>=4n201>5=5<#;;91>>=4n201>7=54i265>5<#;;91?9;4n201>5=?6=4+33197135<#;;91?9;4n201>7=96=4+331971354o370>5<#;;91>8<4n201>5=5<#;;91>8<4n201>7=n6=4+331960454o36g>5<#;;91>8<4n201>1=h6=4+33196045<#;;91>8<4n201>3=j6=4+33196045<#;;91>8<4n201>==36=4+33196045<#;;91>8<4n201>d==6=4+33196045<#;;91>8<4n201>f=86=4+33196045<#;;91>8<4n201>`=:6=4+33196045<#;;91>8<4n201>46<3f88j7>5$200>7353g99>7?>;:m17`<72-99?7<:2:l067<6:21d>>j50;&066<5=;1e??<51298k75d290/??=52408j64528>07b<i5=h0;6)==3;066>h4:;0::65`24;94?"4::099?5a330952=32e99;4?:%117?42:2d8>?4>a:9l603=83.8>>4=539m774=9k10c?;;:18'775=:<80b><=:0a8?j4283:1(><<:371?k55:3;o76a=4483>!55;38>>6`<2382a>=h::k1<7*<228117=i;;81=k54i04f>5<#;;91=;j4n201>5=5<#;;91=;j4n201>7=54i054>5<#;;91=;j4n201>1=5<#;;91=;j4n201>3=5<#;;91=;j4n201>==5<#;;91=;j4n201>d=5<#;;91=;j4n201>f=5<#;;91=:m4n201>5=5<#;;91=:m4n201>7=54i0:5>5<#;;91=:m4n201>1=6=4+331952e5<#;;91=:m4n201>3=5<#;;91=:m4n201>==5<#;;91=:m4n201>d=5<#;;91=:m4n201>f=5<#;;91>?94n201>5=5<#;;91>?94n201>7=54i301>5<#;;91>?94n201>1=5<#;;91>?94n201>3=5<#;;91>?94n201>==5<#;;91>?94n201>d=5<#;;91>?94n201>f=5<#;;91>?94n201>`=5<#;;91>?94n201>46<3`8:87>5$200>7403g99>7?>;:k156<72-99?7<=7:l067<6:21b><<50;&066<5:>1e??<51298m776290/??=52358j64528>07d<>0;29 6442;8<7c==2;36?>o5:o0;6)==3;013>h4:;0::65f23g94?"4::09>:5a330952=32c9>o4?:%117?45?2d8>?4>a:9j67g=83.8>>4=269m774=9k10e?<6:18'775=:;=0b><=:0a8?l45=3:1(><<:304?k55:3;o76g=1`83>!55;389;6`<2382a>=n:9l1<7*<228162=i;;81=k54o3:1>5<#;;91>5?4n201>5=5<#;;91>5?4n201>7=54i31:>5<#;;91>>64n201>5=5<#;;91>>64n201>7=6=4+331966>54o3:4>5<#;;91>584n201>5=6=4+33196=05<#;;91>584n201>7=54o356>5<#;;91>::4n201>5=5<#;;91>::4n201>7=54o34e>5<#;;91>::4n201>1=5<#;;91>::4n201>3=5<#;;91>::4n201>==5<#;;91>::4n201>d=5<#;;91>::4n201>f=6=4+33196225<#;;91>::4n201>`=5<#;;91>::4n201>46<3f8==7>5$200>7133g99>7?>;:m125<72-99?7<84:l067<6:21d>8h50;&066<5?=1e??<51298k73b290/??=52668j64528>07b<:d;29 6442;=?7c==2;36?>i5?j0;6)==3;040>h4:;0::65`26`94?"4::09;95a330952=32e9;54?:%117?40<2d8>?4>a:9l621=83.8>>4=759m774=9k10c?99:18'775=:>>0b><=:0a8?j40:3:1(><<:357?k55:3;o76a=6683>!55;38<86`<2382a>=h:5<#;;91?9o4n201>5=26=4+331971g5<#;;91?9o4n201>7=<6=4+331971g54i324>5<#;;91>=84n201>5=6=4+33196505<#;;91>=84n201>7=54i322>5<#;;91>=84n201>1=5<#;;91>=84n201>3=5<#;;91>=84n201>==5<#;;91>=84n201>d=5<#;;91>=84n201>f=5<#;;91>=84n201>`=6=4+33196505<#;;91>=84n201>46<3`;m?7>5$200>7613g99>7?>;:k2b7<72-99?707d?jf;29 6442;:=7c==2;36?>o58l0;6)==3;032>h4:;0::65f21f94?"4::09<;5a330952=9;o116?7>32c92d8>?4>a:9j65?=83.8>>4=079m774=9k10e?>7:18'775=:9<0b><=:0a8?l47<3:1(><<:325?k55:3;o76g>f883>!55;38;:6`<2382a>=n9lo1<7*<228143=i;;81=k54}c10`?6=jj0;6=u+3259773<@:?;7E=;0:X2=gg6=j=0i=79j:6f93c1=6`>e482?k42j3:0b?9k:19'6d6=:k90(?o>:3`0?!4dk390(?mk:29'6fc=;2.9ok4<;%0g4?5<,;n:6>5+2e097>"5l:087)0(?j9:06e?!4c?382>6*=d982e2=#:m31=5o4$3fb>74<,;ni6<7?;%0gg?4fj2.9hi4>dc9'6ac=91i0(?ji:d`8 7c72;h37)7)"5mj08i6*=ee82f3=#:lo1:l5+2dd90a=#:o:1h55+2g396d0<,;l968h4$3d0>7>>3-8m87?j6:&1b03d9'6c1=k<1/>k65139'6c?=9030(?hn:e9'6cd=9?80(?hl:928 7`c28nn7)"5no09m45+3129g5=#;9;1=864$221>7>?3-9;?7=9;%130?74l2.8<84=949'750=:kl0(>>8:0c8 66?2o;0(>>6:0fg?!57i3n87)=?b;f4?!57k38h86*<0e81g<=#;9o1>n74$22e>7e>3-9:<71`9'745=9=30(>?;:39'743=:2.8=;4<1d9'77g=;:<0(><4$210>7=#;:>1>6*<4e800f=#;=o1?9m4i205>5<5<5<5<5<#;;91>>=4n201>5=5<#;;91>>=4n201>7=54i265>5<#;;91?9;4n201>5=?6=4+33197135<#;;91?9;4n201>7=96=4+331971354o370>5<#;;91>8<4n201>5=5<#;;91>8<4n201>7=n6=4+331960454o36g>5<#;;91>8<4n201>1=h6=4+33196045<#;;91>8<4n201>3=j6=4+33196045<#;;91>8<4n201>==36=4+33196045<#;;91>8<4n201>d==6=4+33196045<#;;91>8<4n201>f=86=4+33196045<#;;91>8<4n201>`=:6=4+33196045<#;;91>8<4n201>46<3f88j7>5$200>7353g99>7?>;:m17`<72-99?7<:2:l067<6:21d>>j50;&066<5=;1e??<51298k75d290/??=52408j64528>07b<i5=h0;6)==3;066>h4:;0::65`24;94?"4::099?5a330952=32e99;4?:%117?42:2d8>?4>a:9l603=83.8>>4=539m774=9k10c?;;:18'775=:<80b><=:0a8?j4283:1(><<:371?k55:3;o76a=4483>!55;38>>6`<2382a>=h::k1<7*<228117=i;;81=k54i04f>5<#;;91=;j4n201>5=5<#;;91=;j4n201>7=54i054>5<#;;91=;j4n201>1=5<#;;91=;j4n201>3=5<#;;91=;j4n201>==5<#;;91=;j4n201>d=5<#;;91=;j4n201>f=5<#;;91=:m4n201>5=5<#;;91=:m4n201>7=54i0:5>5<#;;91=:m4n201>1=6=4+331952e5<#;;91=:m4n201>3=5<#;;91=:m4n201>==5<#;;91=:m4n201>d=5<#;;91=:m4n201>f=5<#;;91>?94n201>5=5<#;;91>?94n201>7=54i301>5<#;;91>?94n201>1=5<#;;91>?94n201>3=5<#;;91>?94n201>==5<#;;91>?94n201>d=5<#;;91>?94n201>f=5<#;;91>?94n201>`=5<#;;91>?94n201>46<3`8:87>5$200>7403g99>7?>;:k156<72-99?7<=7:l067<6:21b><<50;&066<5:>1e??<51298m776290/??=52358j64528>07d<>0;29 6442;8<7c==2;36?>o5:o0;6)==3;013>h4:;0::65f23g94?"4::09>:5a330952=32c9>o4?:%117?45?2d8>?4>a:9j67g=83.8>>4=269m774=9k10e?<6:18'775=:;=0b><=:0a8?l45=3:1(><<:304?k55:3;o76g=1`83>!55;389;6`<2382a>=n:9l1<7*<228162=i;;81=k54o3:1>5<#;;91>5?4n201>5=5<#;;91>5?4n201>7=54i31:>5<#;;91>>64n201>5=5<#;;91>>64n201>7=6=4+331966>54o3:4>5<#;;91>584n201>5=6=4+33196=05<#;;91>584n201>7=54o356>5<#;;91>::4n201>5=5<#;;91>::4n201>7=54o34e>5<#;;91>::4n201>1=5<#;;91>::4n201>3=5<#;;91>::4n201>==5<#;;91>::4n201>d=5<#;;91>::4n201>f=6=4+33196225<#;;91>::4n201>`=5<#;;91>::4n201>46<3f8==7>5$200>7133g99>7?>;:m125<72-99?7<84:l067<6:21d>8h50;&066<5?=1e??<51298k73b290/??=52668j64528>07b<:d;29 6442;=?7c==2;36?>i5?j0;6)==3;040>h4:;0::65`26`94?"4::09;95a330952=32e9;54?:%117?40<2d8>?4>a:9l621=83.8>>4=759m774=9k10c?99:18'775=:>>0b><=:0a8?j40:3:1(><<:357?k55:3;o76a=6683>!55;38<86`<2382a>=h:5<#;;91?9o4n201>5=26=4+331971g5<#;;91?9o4n201>7=<6=4+331971g54i324>5<#;;91>=84n201>5=6=4+33196505<#;;91>=84n201>7=54i322>5<#;;91>=84n201>1=5<#;;91>=84n201>3=5<#;;91>=84n201>==5<#;;91>=84n201>d=5<#;;91>=84n201>f=5<#;;91>=84n201>`=6=4+33196505<#;;91>=84n201>46<3`;m?7>5$200>7613g99>7?>;:k2b7<72-99?707d?jf;29 6442;:=7c==2;36?>o58l0;6)==3;032>h4:;0::65f21f94?"4::09<;5a330952=9;o116?7>32c92d8>?4>a:9j65?=83.8>>4=079m774=9k10e?>7:18'775=:9<0b><=:0a8?l47<3:1(><<:325?k55:3;o76g>f883>!55;38;:6`<2382a>=n9lo1<7*<228143=i;;81=k54}c10g?6=jj0;6=u+3259773<@:?;7E=;0:X2=gg6=j=0i=79j:6f93c1=6`>e482?k42j3:0b?9k:19'6d6=:k90(?o>:3`0?!4dk390(?mk:29'6fc=;2.9ok4<;%0g4?5<,;n:6>5+2e097>"5l:087);2.9ho4;e:&1`fh?51538 7c528o<7)"5m=0:m<5+2d79506<,;o=64=4$3g4>4gf3-8n47:<;%0f=?72j2.9il4>549'6`d==11/>hm51238 7cc2>h0(?kj:3d8 7ca2?n0(?h?:3c7?!4a933i7)"5n:03:6*=f58a2>"5n<0o56*=f78:a>"5n>0m;6*=f9805>"5n00:>?5+2gc9531<,;li69>4$3d`>42e3-8mh7k4$3df><0<,;lm6:>4$223>41<,:::6ik4$221>=2<,::86?6m;%130?7412.8<84>049'750=:ki0(>>8:2:8 66?2;h:7)=?9;a0?!57i3k?7)=?b;f3?!57k38h?6*<0e81g<=#;9o1>n74$22e>7e>3-9:<71e9'745=9?;:39'743=:2.8=;4<1d9'77g=;:<0(><4$210>7=#;:>1>6*<4e800f=#;=o1?9m4i205>5<5<5<5<5<#;;91>>=4n201>5=5<#;;91>>=4n201>7=54i265>5<#;;91?9;4n201>5=?6=4+33197135<#;;91?9;4n201>7=96=4+331971354o370>5<#;;91>8<4n201>5=5<#;;91>8<4n201>7=n6=4+331960454o36g>5<#;;91>8<4n201>1=h6=4+33196045<#;;91>8<4n201>3=j6=4+33196045<#;;91>8<4n201>==36=4+33196045<#;;91>8<4n201>d==6=4+33196045<#;;91>8<4n201>f=86=4+33196045<#;;91>8<4n201>`=:6=4+33196045<#;;91>8<4n201>46<3f88j7>5$200>7353g99>7?>;:m17`<72-99?7<:2:l067<6:21d>>j50;&066<5=;1e??<51298k75d290/??=52408j64528>07b<i5=h0;6)==3;066>h4:;0::65`24;94?"4::099?5a330952=32e99;4?:%117?42:2d8>?4>a:9l603=83.8>>4=539m774=9k10c?;;:18'775=:<80b><=:0a8?j4283:1(><<:371?k55:3;o76a=4483>!55;38>>6`<2382a>=h::k1<7*<228117=i;;81=k54i04f>5<#;;91=;j4n201>5=5<#;;91=;j4n201>7=54i054>5<#;;91=;j4n201>1=5<#;;91=;j4n201>3=5<#;;91=;j4n201>==5<#;;91=;j4n201>d=5<#;;91=;j4n201>f=5<#;;91=:m4n201>5=5<#;;91=:m4n201>7=54i0:5>5<#;;91=:m4n201>1=6=4+331952e5<#;;91=:m4n201>3=5<#;;91=:m4n201>==5<#;;91=:m4n201>d=5<#;;91=:m4n201>f=5<#;;91>?94n201>5=5<#;;91>?94n201>7=54i301>5<#;;91>?94n201>1=5<#;;91>?94n201>3=5<#;;91>?94n201>==5<#;;91>?94n201>d=5<#;;91>?94n201>f=5<#;;91>?94n201>`=5<#;;91>?94n201>46<3`8:87>5$200>7403g99>7?>;:k156<72-99?7<=7:l067<6:21b><<50;&066<5:>1e??<51298m776290/??=52358j64528>07d<>0;29 6442;8<7c==2;36?>o5:o0;6)==3;013>h4:;0::65f23g94?"4::09>:5a330952=32c9>o4?:%117?45?2d8>?4>a:9j67g=83.8>>4=269m774=9k10e?<6:18'775=:;=0b><=:0a8?l45=3:1(><<:304?k55:3;o76g=1`83>!55;389;6`<2382a>=n:9l1<7*<228162=i;;81=k54o3:1>5<#;;91>5?4n201>5=5<#;;91>5?4n201>7=54i31:>5<#;;91>>64n201>5=5<#;;91>>64n201>7=6=4+331966>54o3:4>5<#;;91>584n201>5=6=4+33196=05<#;;91>584n201>7=54o356>5<#;;91>::4n201>5=5<#;;91>::4n201>7=54o34e>5<#;;91>::4n201>1=5<#;;91>::4n201>3=5<#;;91>::4n201>==5<#;;91>::4n201>d=5<#;;91>::4n201>f=6=4+33196225<#;;91>::4n201>`=5<#;;91>::4n201>46<3f8==7>5$200>7133g99>7?>;:m125<72-99?7<84:l067<6:21d>8h50;&066<5?=1e??<51298k73b290/??=52668j64528>07b<:d;29 6442;=?7c==2;36?>i5?j0;6)==3;040>h4:;0::65`26`94?"4::09;95a330952=32e9;54?:%117?40<2d8>?4>a:9l621=83.8>>4=759m774=9k10c?99:18'775=:>>0b><=:0a8?j40:3:1(><<:357?k55:3;o76a=6683>!55;38<86`<2382a>=h:5<#;;91?9o4n201>5=26=4+331971g5<#;;91?9o4n201>7=<6=4+331971g54i324>5<#;;91>=84n201>5=6=4+33196505<#;;91>=84n201>7=54i322>5<#;;91>=84n201>1=5<#;;91>=84n201>3=5<#;;91>=84n201>==5<#;;91>=84n201>d=5<#;;91>=84n201>f=5<#;;91>=84n201>`=6=4+33196505<#;;91>=84n201>46<3`;m?7>5$200>7613g99>7?>;:k2b7<72-99?707d?jf;29 6442;:=7c==2;36?>o58l0;6)==3;032>h4:;0::65f21f94?"4::09<;5a330952=9;o116?7>32c92d8>?4>a:9j65?=83.8>>4=079m774=9k10e?>7:18'775=:9<0b><=:0a8?l47<3:1(><<:325?k55:3;o76g>f883>!55;38;:6`<2382a>=n9lo1<7*<228143=i;;81=k54}c10f?6=jj0;6=u+3259773<@:?;7E=;0:X2=gg6=j=0i=79j:6f93c1=6`>e482?k42j3:0b?9k:19'6d6=:k90(?o>:3`0?!4dk390(?mk:29'6fc=;2.9ok4<;%0g4?5<,;n:6>5+2e097>"5l:087)"5l<0h7)"5l>0:m?5+2e:9e<=#:m319i5+2ec96g?<,;ni6?94$3f`>4c63-8oh7?j8:&1``<2k2.9hk4>c09'6`6=:h90(?k>:908 7c528<:7)"5m=0n96*=e482ad=#:l<1h95+2d5923=#:l21=o74$3g:>42b3-8nm7:=;%0ff?74<2.9in4=ad9'6`b=9920(?kj:da8 7ca283j7)"5n809n95+2g095=`<,;l86<>9;%0e0?0e3-8m97?:9:&1b3<1=2.9j:4ie:&1b=<6;h1/>k751168 7`f289=7)484$3de>7<:;%137?7ek2.8<9477:&040<6:o1/?=851768 66028k;7)=?8;0bg>"4800:<=5+31c9f==#;9h1=7e?3-9;h71;a2?!56:3;:56*<12821a=#;8>1>6*<1481?!56>39:i6*<2`8073=#;;h1=ol4$20`>4de3-99j7?7b:&075<4;;1/?>=52:&071<53-9?h7=;c:&00`<44h50;9j77?=831b=nh50;9j771=831b??650;9j6>:50;&066<5;:1e??<50:9j664=83.8>>4=329m774=921b>>?50;&066<5;:1e??<52:9j666=83.8>>4=329m774=;21b?9850;&066<4<<1e??<50:9j712=83.8>>4<449m774=921b?9=50;&066<4<<1e??<52:9j714=83.8>>4<449m774=;21d>8=50;&066<5=;1e??<50:9l607=83.8>>4=539m774=921d>9h50;&066<5=;1e??<52:9l61c=83.8>>4=539m774=;21d>9j50;&066<5=;1e??<54:9l61e=83.8>>4=539m774==21d>9l50;&066<5=;1e??<56:9l61g=83.8>>4=539m774=?21d>9750;&066<5=;1e??<58:9l61>=83.8>>4=539m774=121d>9950;&066<5=;1e??<5a:9l610=83.8>>4=539m774=j21d>9:50;&066<5=;1e??<5c:9l615=83.8>>4=539m774=l21d>9<50;&066<5=;1e??<5e:9l617=83.8>>4=539m774=n21d>9>50;&066<5=;1e??<51198k75a290/??=52408j64528;07b<i5;m0;6)==3;066>h4:;0:?65`22a94?"4::099?5a330951=?4>7:9l60>=83.8>>4=539m774=9110c?;8:18'775=:<80b><=:0;8?j42>3:1(><<:371?k55:3;j76a=5483>!55;38>>6`<2382f>=h:<>1<7*<228117=i;;81=n54o373>5<#;;91>8<4n201>4b<3f8?97>5$200>7353g99>7?j;:m17d<72-99?7<:2:l067<6n21b=;k50;&066<6>m1e??<50:9j53e=83.8>>4>6e9m774=921b=;l50;&066<6>m1e??<52:9j53g=83.8>>4>6e9m774=;21b=:950;&066<6>m1e??<54:9j520=83.8>>4>6e9m774==21b=:;50;&066<6>m1e??<56:9j522=83.8>>4>6e9m774=?21b=:=50;&066<6>m1e??<58:9j524=83.8>>4>6e9m774=121b=:?50;&066<6>m1e??<5a:9j526=83.8>>4>6e9m774=j21b=;h50;&066<6>m1e??<5c:9j53?=83.8>>4>6e9m774=l21b=:j50;&066<6?j1e??<50:9j52d=83.8>>4>7b9m774=921b=:o50;&066<6?j1e??<52:9j52?=83.8>>4>7b9m774=;21b=5850;&066<6?j1e??<54:9j5=3=83.8>>4>7b9m774==21b=5:50;&066<6?j1e??<56:9j5=5=83.8>>4>7b9m774=?21b=5<50;&066<6?j1e??<58:9j5=7=83.8>>4>7b9m774=121b=5>50;&066<6?j1e??<5a:9j52`=83.8>>4>7b9m774=j21b=:k50;&066<6?j1e??<5c:9j52>=83.8>>4>7b9m774=l21b>?650;&066<5:>1e??<50:9j670=83.8>>4=269m774=921b>?:50;&066<5:>1e??<52:9j675=83.8>>4=269m774=;21b>?<50;&066<5:>1e??<54:9j677=83.8>>4=269m774==21b>?>50;&066<5:>1e??<56:9j64`=83.8>>4=269m774=?21b>1e??<58:9j64b=83.8>>4=269m774=121b>1e??<5a:9j64d=83.8>>4=269m774=j21b><750;&066<5:>1e??<5c:9j64>=83.8>>4=269m774=l21b><950;&066<5:>1e??<5e:9j640=83.8>>4=269m774=n21b><;50;&066<5:>1e??<51198m773290/??=52358j64528;07d<>3;29 6442;8<7c==2;31?>o59;0;6)==3;013>h4:;0:?65f20394?"4::09>:5a330951=h4?:%117?45?2d8>?4>7:9j67b=83.8>>4=269m774=9110e?<=:0;8?l45j3:1(><<:304?k55:3;j76g=2`83>!55;389;6`<2382f>=n:;31<7*<228162=i;;81=n54i306>5<#;;91>?94n201>4b<3`8:m7>5$200>7403g99>7?j;:k14c<72-99?7<=7:l067<6n21d>5<50;&066<5081e??<50:9l6=6=83.8>>4=809m774=921d>:h50;&066<5081e??<52:9l62c=83.8>>4=809m774=;21b>>750;&066<5;11e??<50:9j661=83.8>>4=399m774=921b>>850;&066<5;11e??<52:9j663=83.8>>4=399m774=;21d>5950;&066<50?1e??<50:9l6=3=83.8>>4=879m774=921d>5:50;&066<50?1e??<52:9l6=5=83.8>>4=879m774=;21d>:;50;&066<5?=1e??<50:9l625=83.8>>4=759m774=921d>:?50;&066<5?=1e??<52:9l626=83.8>>4=759m774=;21d>;h50;&066<5?=1e??<54:9l63c=83.8>>4=759m774==21d>;j50;&066<5?=1e??<56:9l63e=83.8>>4=759m774=?21d>;l50;&066<5?=1e??<58:9l63g=83.8>>4=759m774=121d>;750;&066<5?=1e??<5a:9l63>=83.8>>4=759m774=j21d>;850;&066<5?=1e??<5c:9l633=83.8>>4=759m774=l21d>;:50;&066<5?=1e??<5e:9l635=83.8>>4=759m774=n21d>;<50;&066<5?=1e??<51198k706290/??=52668j64528;07b<90;29 6442;=?7c==2;31?>i5=o0;6)==3;040>h4:;0:?65`24g94?"4::09;95a330951=?4>7:9l62g=83.8>>4=759m774=9110c?96:18'775=:>>0b><=:0;8?j4003:1(><<:357?k55:3;j76a=7683>!55;38<86`<2382f>=h:><1<7*<228131=i;;81=n54o351>5<#;;91>::4n201>4b<3f8=;7>5$200>7133g99>7?j;:m11f<72-99?7<84:l067<6n21b?9l50;&066<4>4<4`9m774=921b?9650;&066<4>4<4`9m774=;21b>=950;&066<58?1e??<50:9j653=83.8>>4=079m774=921b>==50;&066<58?1e??<52:9j654=83.8>>4=079m774=;21b>=?50;&066<58?1e??<54:9j656=83.8>>4=079m774==21b=kh50;&066<58?1e??<56:9j5cc=83.8>>4=079m774=?21b=kj50;&066<58?1e??<58:9j5ce=83.8>>4=079m774=121b=kl50;&066<58?1e??<5a:9j5cg=83.8>>4=079m774=j21b=k650;&066<58?1e??<5c:9j5c1=83.8>>4=079m774=l21b=k850;&066<58?1e??<5e:9j5c3=83.8>>4=079m774=n21b=k:50;&066<58?1e??<51198m4`4290/??=52148j64528;07d?i2;29 6442;:=7c==2;31?>o6n80;6)==3;032>h4:;0:?65f1g294?"4::09<;5a330951=9;o116?7132c92d8>?4>7:9j65e=83.8>>4=079m774=9110e?>m:18'775=:9<0b><=:0;8?l47i3:1(><<:325?k55:3;j76g=0883>!55;38;:6`<2382f>=n:921<7*<228143=i;;81=n54i327>5<#;;91>=84n201>4b<3`;m57>5$200>7613g99>7?j;:k2a`<72-99?7=n:18ag?6=8r.8?:4<249K706<@:>;7W?6b;ax00<3>3km6o=5b18a0?d62>o1;i48f;`1>2e=u-9:j7=7d:l2a1<63g;n97?4n37a>5=i:>n1<6*=a181f6=#:h;1>o=4$3a`>6=#:jn1?6*=cd80?!4dn390(?j?:29'6a7=;2.9h?4<;%0g7?5<,;n?6<;>;%0g1?`>3-8o:7i65829'6a?=:k:0(?jn:0g3?!4cj3;?46*=db85g>"5lm0<46*=dd8`f>"5lo0396*=e181e7=#:l;1=im4$3g1>7g23-8n?76k;%0f0?77l2.9i849f:&1a3<><2.9i:4>959'6`>=l?1/>h75919'6`g=;=1/>hl515a8 7cd289;7)?7)"5n;09mi5+2g19557<,;l?69m4$3d6>4ba3-8m:7??;%0e3?g43-8m47?j3:&1b<<6=o1/>ko51d08 7`e28;?7)"5nm0:7?63-9;=7?<8:&047<6l2.8<>4i0:&041<092.8<84n5:&0438d9'75g=?<1/?=l51458 66d2;i:7)=?d;0`=>"48l09o45+31d96f?<,:;;6?m6;%125?543-9:>7?>b:&056<69l1/?<:52:&050<53-9::7=>e:&06d<4;?1/??l51c`8 64d28hi7)==f;3;f>"4;908??5+32196>"4;=097)=;d;17g>"45a33094>=n::81<7*<228176=i;;81=65f22394?"4::09?>5a33096>=n:::1<7*<228176=i;;81?65f35494?"4::08885a33094>=n;=>1<7*<228000=i;;81=65f35194?"4::08885a33096>=n;=81<7*<228000=i;;81?65`24194?"4::099?5a33094>=h:<;1<7*<228117=i;;81=65`25d94?"4::099?5a33096>=h:=o1<7*<228117=i;;81?65`25f94?"4::099?5a33090>=h:=i1<7*<228117=i;;81965`25`94?"4::099?5a33092>=h:=k1<7*<228117=i;;81;65`25;94?"4::099?5a3309<>=h:=21<7*<228117=i;;81565`25594?"4::099?5a3309e>=h:=<1<7*<228117=i;;81n65`25694?"4::099?5a3309g>=h:=91<7*<228117=i;;81h65`25094?"4::099?5a3309a>=h:=;1<7*<228117=i;;81j65`25294?"4::099?5a330955=?4>3:9l66e=83.8>>4=539m774=9=10c?=m:18'775=:<80b><=:078?j42i3:1(><<:371?k55:3;=76a=5883>!55;38>>6`<23823>=h:<21<7*<228117=i;;81=554o374>5<#;;91>8<4n201>4?<3f8>:7>5$200>7353g99>7?n;:m110<72-99?7<:2:l067<6j21d>8:50;&066<5=;1e??<51b98k737290/??=52408j64528n07b<;5;29 6442;?97c==2;3f?>i5;h0;6)==3;066>h4:;0:j65f17g94?"4::0::i5a33094>=n9?i1<7*<22822a=i;;81=65f17`94?"4::0::i5a33096>=n9?k1<7*<22822a=i;;81?65f16594?"4::0::i5a33090>=n9><1<7*<22822a=i;;81965f16794?"4::0::i5a33092>=n9>>1<7*<22822a=i;;81;65f16194?"4::0::i5a3309<>=n9>81<7*<22822a=i;;81565f16394?"4::0::i5a3309e>=n9>:1<7*<22822a=i;;81n65f17d94?"4::0::i5a3309g>=n9?31<7*<22822a=i;;81h65f16f94?"4::0:;n5a33094>=n9>h1<7*<22823f=i;;81=65f16c94?"4::0:;n5a33096>=n9>31<7*<22823f=i;;81?65f19494?"4::0:;n5a33090>=n91?1<7*<22823f=i;;81965f19694?"4::0:;n5a33092>=n9191<7*<22823f=i;;81;65f19094?"4::0:;n5a3309<>=n91;1<7*<22823f=i;;81565f19294?"4::0:;n5a3309e>=n9>l1<7*<22823f=i;;81n65f16g94?"4::0:;n5a3309g>=n9>21<7*<22823f=i;;81h65f23:94?"4::09>:5a33094>=n:;<1<7*<228162=i;;81=65f23694?"4::09>:5a33096>=n:;91<7*<228162=i;;81?65f23094?"4::09>:5a33090>=n:;;1<7*<228162=i;;81965f23294?"4::09>:5a33092>=n:8l1<7*<228162=i;;81;65f20g94?"4::09>:5a3309<>=n:8n1<7*<228162=i;;81565f20a94?"4::09>:5a3309e>=n:8h1<7*<228162=i;;81n65f20;94?"4::09>:5a3309g>=n:821<7*<228162=i;;81h65f20594?"4::09>:5a3309a>=n:8<1<7*<228162=i;;81j65f20794?"4::09>:5a330955=?4>3:9j647=83.8>>4=269m774=9=10e???:18'775=:;=0b><=:078?l45n3:1(><<:304?k55:3;=76g=2d83>!55;389;6`<23823>=n:;n1<7*<228162=i;;81=554i30`>5<#;;91>?94n201>4?<3`89n7>5$200>7403g99>7?n;:k16d<72-99?7<=7:l067<6j21b>?750;&066<5:>1e??<51b98m742290/??=52358j64528n07d<>a;29 6442;8<7c==2;3f?>o58o0;6)==3;013>h4:;0:j65`29094?"4::094<5a33094>=h:1:1<7*<2281<4=i;;81=65`26d94?"4::094<5a33096>=h:>o1<7*<2281<4=i;;81?65f22;94?"4::09?55a33094>=n::=1<7*<22817==i;;81=65f22494?"4::09?55a33096>=n::?1<7*<22817==i;;81?65`29594?"4::094;5a33094>=h:1?1<7*<2281<3=i;;81=65`29694?"4::094;5a33096>=h:191<7*<2281<3=i;;81?65`26794?"4::09;95a33094>=h:>91<7*<228131=i;;81=65`26394?"4::09;95a33096>=h:>:1<7*<228131=i;;81?65`27d94?"4::09;95a33090>=h:?o1<7*<228131=i;;81965`27f94?"4::09;95a33092>=h:?i1<7*<228131=i;;81;65`27`94?"4::09;95a3309<>=h:?k1<7*<228131=i;;81565`27;94?"4::09;95a3309e>=h:?21<7*<228131=i;;81n65`27494?"4::09;95a3309g>=h:??1<7*<228131=i;;81h65`27694?"4::09;95a3309a>=h:?91<7*<228131=i;;81j65`27094?"4::09;95a330955=?4>3:9l60c=83.8>>4=759m774=9=10c?;k:18'775=:>>0b><=:078?j40k3:1(><<:357?k55:3;=76a=7c83>!55;38<86`<23823>=h:>k1<7*<228131=i;;81=554o35:>5<#;;91>::4n201>4?<3f8<47>5$200>7133g99>7?n;:m132<72-99?7<84:l067<6j21d>:850;&066<5?=1e??<51b98k715290/??=52668j64528n07b<97;29 6442;=?7c==2;3f?>i5=j0;6)==3;040>h4:;0:j65f35`94?"4::088l5a33094>=n;=31<7*<22800d=i;;81=65f35:94?"4::088l5a33096>=n;==1<7*<22800d=i;;81?65f21594?"4::09<;5a33094>=n:9?1<7*<228143=i;;81=65f21194?"4::09<;5a33096>=n:981<7*<228143=i;;81?65f21394?"4::09<;5a33090>=n:9:1<7*<228143=i;;81965f1gd94?"4::09<;5a33092>=n9oo1<7*<228143=i;;81;65f1gf94?"4::09<;5a3309<>=n9oi1<7*<228143=i;;81565f1g`94?"4::09<;5a3309e>=n9ok1<7*<228143=i;;81n65f1g:94?"4::09<;5a3309g>=n9o=1<7*<228143=i;;81h65f1g494?"4::09<;5a3309a>=n9o?1<7*<228143=i;;81j65f1g694?"4::09<;5a330955=9;o116?7532c:j<4?:%117?47>2d8>?4>3:9j5c6=83.8>>4=079m774=9=10e<=:078?l47m3:1(><<:325?k55:3;=76g=0e83>!55;38;:6`<23823>=n:9i1<7*<228143=i;;81=554i32a>5<#;;91>=84n201>4?<3`8;m7>5$200>7613g99>7?n;:k14<<72-99?7=650;&066<58?1e??<51b98m763290/??=52148j64528n07d?i9;29 6442;:=7c==2;3f?>o6ml0;6)==3;032>h4:;0:j65rb21:>5:?;[3:f?e|<<0?:7oi:c19f5i1q)=>f;1;`>h6m=0:7c?j5;38j73e291e>:j50:&1e5<5j:1/>l?52c18 7ed2:1/>nj53:&1g`<43-8hj7=4$3f3>6=#:m;1?6*=d380?!4c;390(?j;:04;?!4c=3;896*=d78e6>"5l>0?56*=d982ag=#:m31>o<4$3fb>ge<,;ni6<:k;%0gg?4?3-8oh77>;%0ga?75;2.9hk47e:&1a5<6=;1/>h?52868 7c528??7)"5m?0ni6*=e68e<>"5m10>>6*=e885a>"5mh0om6*=ec8;g>"5mj095o5+2df95d`<,;on6i?4$3ge>7?>3-8m<7<7c:&1b4529'6c?=90n0(?hn:b;8 7`e2mn0(?hl:gd8 7`c283h7)"5no0:=85+3129g7=#;9;18<5+310956=#;991;?5+31697d=#;9?19:5+3149535<,::<6k5+31:9a5=#;931o;5+31c9500<,::i6<<>;%13g?4d:2.8>i:3a:?!56838h56*<10814>"49;0:=55+3019e5=#;8>1>6*<1481?!56>39:i6*<2`8073=#;;h1=ol4$20`>4de3-99j7?7b:&075<4;;1/?>=52:&071<53-9?h7=;c:&00`<44h50;9j77?=831b=nh50;9j771=831b??650;9j6>:50;&066<5;:1e??<50:9j664=83.8>>4=329m774=921b>>?50;&066<5;:1e??<52:9j666=83.8>>4=329m774=;21b?9850;&066<4<<1e??<50:9j712=83.8>>4<449m774=921b?9=50;&066<4<<1e??<52:9j714=83.8>>4<449m774=;21d>8=50;&066<5=;1e??<50:9l607=83.8>>4=539m774=921d>9h50;&066<5=;1e??<52:9l61c=83.8>>4=539m774=;21d>9j50;&066<5=;1e??<54:9l61e=83.8>>4=539m774==21d>9l50;&066<5=;1e??<56:9l61g=83.8>>4=539m774=?21d>9750;&066<5=;1e??<58:9l61>=83.8>>4=539m774=121d>9950;&066<5=;1e??<5a:9l610=83.8>>4=539m774=j21d>9:50;&066<5=;1e??<5c:9l615=83.8>>4=539m774=l21d>9<50;&066<5=;1e??<5e:9l617=83.8>>4=539m774=n21d>9>50;&066<5=;1e??<51198k75a290/??=52408j64528;07b<i5;m0;6)==3;066>h4:;0:?65`22a94?"4::099?5a330951=?4>7:9l60>=83.8>>4=539m774=9110c?;8:18'775=:<80b><=:0;8?j42>3:1(><<:371?k55:3;j76a=5483>!55;38>>6`<2382f>=h:<>1<7*<228117=i;;81=n54o373>5<#;;91>8<4n201>4b<3f8?97>5$200>7353g99>7?j;:m17d<72-99?7<:2:l067<6n21b=;k50;&066<6>m1e??<50:9j53e=83.8>>4>6e9m774=921b=;l50;&066<6>m1e??<52:9j53g=83.8>>4>6e9m774=;21b=:950;&066<6>m1e??<54:9j520=83.8>>4>6e9m774==21b=:;50;&066<6>m1e??<56:9j522=83.8>>4>6e9m774=?21b=:=50;&066<6>m1e??<58:9j524=83.8>>4>6e9m774=121b=:?50;&066<6>m1e??<5a:9j526=83.8>>4>6e9m774=j21b=;h50;&066<6>m1e??<5c:9j53?=83.8>>4>6e9m774=l21b=:j50;&066<6?j1e??<50:9j52d=83.8>>4>7b9m774=921b=:o50;&066<6?j1e??<52:9j52?=83.8>>4>7b9m774=;21b=5850;&066<6?j1e??<54:9j5=3=83.8>>4>7b9m774==21b=5:50;&066<6?j1e??<56:9j5=5=83.8>>4>7b9m774=?21b=5<50;&066<6?j1e??<58:9j5=7=83.8>>4>7b9m774=121b=5>50;&066<6?j1e??<5a:9j52`=83.8>>4>7b9m774=j21b=:k50;&066<6?j1e??<5c:9j52>=83.8>>4>7b9m774=l21b>?650;&066<5:>1e??<50:9j670=83.8>>4=269m774=921b>?:50;&066<5:>1e??<52:9j675=83.8>>4=269m774=;21b>?<50;&066<5:>1e??<54:9j677=83.8>>4=269m774==21b>?>50;&066<5:>1e??<56:9j64`=83.8>>4=269m774=?21b>1e??<58:9j64b=83.8>>4=269m774=121b>1e??<5a:9j64d=83.8>>4=269m774=j21b><750;&066<5:>1e??<5c:9j64>=83.8>>4=269m774=l21b><950;&066<5:>1e??<5e:9j640=83.8>>4=269m774=n21b><;50;&066<5:>1e??<51198m773290/??=52358j64528;07d<>3;29 6442;8<7c==2;31?>o59;0;6)==3;013>h4:;0:?65f20394?"4::09>:5a330951=h4?:%117?45?2d8>?4>7:9j67b=83.8>>4=269m774=9110e?<=:0;8?l45j3:1(><<:304?k55:3;j76g=2`83>!55;389;6`<2382f>=n:;31<7*<228162=i;;81=n54i306>5<#;;91>?94n201>4b<3`8:m7>5$200>7403g99>7?j;:k14c<72-99?7<=7:l067<6n21d>5<50;&066<5081e??<50:9l6=6=83.8>>4=809m774=921d>:h50;&066<5081e??<52:9l62c=83.8>>4=809m774=;21b>>750;&066<5;11e??<50:9j661=83.8>>4=399m774=921b>>850;&066<5;11e??<52:9j663=83.8>>4=399m774=;21d>5950;&066<50?1e??<50:9l6=3=83.8>>4=879m774=921d>5:50;&066<50?1e??<52:9l6=5=83.8>>4=879m774=;21d>:;50;&066<5?=1e??<50:9l625=83.8>>4=759m774=921d>:?50;&066<5?=1e??<52:9l626=83.8>>4=759m774=;21d>;h50;&066<5?=1e??<54:9l63c=83.8>>4=759m774==21d>;j50;&066<5?=1e??<56:9l63e=83.8>>4=759m774=?21d>;l50;&066<5?=1e??<58:9l63g=83.8>>4=759m774=121d>;750;&066<5?=1e??<5a:9l63>=83.8>>4=759m774=j21d>;850;&066<5?=1e??<5c:9l633=83.8>>4=759m774=l21d>;:50;&066<5?=1e??<5e:9l635=83.8>>4=759m774=n21d>;<50;&066<5?=1e??<51198k706290/??=52668j64528;07b<90;29 6442;=?7c==2;31?>i5=o0;6)==3;040>h4:;0:?65`24g94?"4::09;95a330951=?4>7:9l62g=83.8>>4=759m774=9110c?96:18'775=:>>0b><=:0;8?j4003:1(><<:357?k55:3;j76a=7683>!55;38<86`<2382f>=h:><1<7*<228131=i;;81=n54o351>5<#;;91>::4n201>4b<3f8=;7>5$200>7133g99>7?j;:m11f<72-99?7<84:l067<6n21b?9l50;&066<4>4<4`9m774=921b?9650;&066<4>4<4`9m774=;21b>=950;&066<58?1e??<50:9j653=83.8>>4=079m774=921b>==50;&066<58?1e??<52:9j654=83.8>>4=079m774=;21b>=?50;&066<58?1e??<54:9j656=83.8>>4=079m774==21b=kh50;&066<58?1e??<56:9j5cc=83.8>>4=079m774=?21b=kj50;&066<58?1e??<58:9j5ce=83.8>>4=079m774=121b=kl50;&066<58?1e??<5a:9j5cg=83.8>>4=079m774=j21b=k650;&066<58?1e??<5c:9j5c1=83.8>>4=079m774=l21b=k850;&066<58?1e??<5e:9j5c3=83.8>>4=079m774=n21b=k:50;&066<58?1e??<51198m4`4290/??=52148j64528;07d?i2;29 6442;:=7c==2;31?>o6n80;6)==3;032>h4:;0:?65f1g294?"4::09<;5a330951=9;o116?7132c92d8>?4>7:9j65e=83.8>>4=079m774=9110e?>m:18'775=:9<0b><=:0;8?l47i3:1(><<:325?k55:3;j76g=0883>!55;38;:6`<2382f>=n:921<7*<228143=i;;81=n54i327>5<#;;91>=84n201>4b<3`;m57>5$200>7613g99>7?j;:k2a`<72-99?7=7:18ag?6=8r.8?:4<249K706<@:>;7W?6b;ax00<3>3km6o=5b18a0?d62>o1;i48f;`1>2e=u-9:j7=7d:l2a1<63g;n97?4n37a>5=i:>n1<6*=a181f6=#:h;1>o=4$3a`>6=#:jn1?6*=cd80?!4dn390(?j?:29'6a7=;2.9h?4<;%0g7?5<,;n?6ll4$3f6>f2<,;n=6979'6ad=9mk0(?jl:d38 7bc288>7)"5lo0>m6*=e18202=#:l;1=>94$3g1>4?03-8n?7hk;%0f0?>e3-8n97?h952`58 7c?28?n7)"5mh0mn6*=ec826`=#:li1i45+2df9gf=#:lo1??5+2dd9`c=#:o:1=oj4$3d2>72<,;l96k85eg9'6c1=9;<0(?h7:0`6?!4a13o<7);7)=?0;3b<>"4880:n?5+31096"48l09o45+31d96f?<,:;;6?m6;%125?5<,:;967=#;8<1?6513-99n7?mb:&06f<6jk1/??h519`8 6572:997)=<3;08 6532;1/?9j535a8 62b2:>h7d==6;29?l7di3:17d<6f;29?l5513:17d?lf;29?l55?3:17d==8;29?l4>m3:17d<<4;29 6442;987c==2;28?l44:3:1(><<:310?k55:3;07d<<1;29 6442;987c==2;08?l4483:1(><<:310?k55:3907d=;6;29 6442:>>7c==2;28?l53<3:1(><<:266?k55:3;07d=;3;29 6442:>>7c==2;08?l53:3:1(><<:266?k55:3907b<:3;29 6442;?97c==2;28?j4293:1(><<:371?k55:3;07b<;f;29 6442;?97c==2;08?j43m3:1(><<:371?k55:3907b<;d;29 6442;?97c==2;68?j43k3:1(><<:371?k55:3?07b<;b;29 6442;?97c==2;48?j43i3:1(><<:371?k55:3=07b<;9;29 6442;?97c==2;:8?j4303:1(><<:371?k55:3307b<;7;29 6442;?97c==2;c8?j43>3:1(><<:371?k55:3h07b<;4;29 6442;?97c==2;a8?j43;3:1(><<:371?k55:3n07b<;2;29 6442;?97c==2;g8?j4393:1(><<:371?k55:3l07b<;0;29 6442;?97c==2;33?>i5;o0;6)==3;066>h4:;0:=65`22g94?"4::099?5a330957=?4>5:9l60g=83.8>>4=539m774=9?10c?;6:18'775=:<80b><=:058?j4203:1(><<:371?k55:3;376a=5683>!55;38>>6`<2382=>=h:<<1<7*<228117=i;;81=l54o376>5<#;;91>8<4n201>4d<3f8>87>5$200>7353g99>7?l;:m115<72-99?7<:2:l067<6l21d>9;50;&066<5=;1e??<51d98k75f290/??=52408j64528l07d?9e;29 64428<<:04g?k55:3;07d?9b;29 64428<<:04g?k55:3907d?87;29 644283:1(><<:04g?k55:3?07d?85;29 64428<<:04g?k55:3=07d?83;29 64428<<:04g?k55:3307d?81;29 64428<<:04g?k55:3h07d?9f;29 64428<<:04g?k55:3n07d?8d;29 64428=h7c==2;28?l70j3:1(><<:05`?k55:3;07d?8a;29 64428=h7c==2;08?l7013:1(><<:05`?k55:3907d?76;29 64428=h7c==2;68?l7?=3:1(><<:05`?k55:3?07d?74;29 64428=h7c==2;48?l7?;3:1(><<:05`?k55:3=07d?72;29 64428=h7c==2;:8?l7?93:1(><<:05`?k55:3307d?70;29 64428=h7c==2;c8?l70n3:1(><<:05`?k55:3h07d?8e;29 64428=h7c==2;a8?l7003:1(><<:05`?k55:3n07d<=8;29 6442;8<7c==2;28?l45>3:1(><<:304?k55:3;07d<=4;29 6442;8<7c==2;08?l45;3:1(><<:304?k55:3907d<=2;29 6442;8<7c==2;68?l4593:1(><<:304?k55:3?07d<=0;29 6442;8<7c==2;48?l46n3:1(><<:304?k55:3=07d<>e;29 6442;8<7c==2;:8?l46l3:1(><<:304?k55:3307d<>c;29 6442;8<7c==2;c8?l46j3:1(><<:304?k55:3h07d<>9;29 6442;8<7c==2;a8?l4603:1(><<:304?k55:3n07d<>7;29 6442;8<7c==2;g8?l46>3:1(><<:304?k55:3l07d<>5;29 6442;8<7c==2;33?>o59=0;6)==3;013>h4:;0:=65f20194?"4::09>:5a330957=?4>5:9j67`=83.8>>4=269m774=9?10e?<=:058?l45l3:1(><<:304?k55:3;376g=2b83>!55;389;6`<2382=>=n:;h1<7*<228162=i;;81=l54i30b>5<#;;91>?94n201>4d<3`8957>5$200>7403g99>7?l;:k160<72-99?7<=7:l067<6l21b>1e??<51d98m76a290/??=52358j64528l07b<72;29 6442;2:7c==2;28?j4?83:1(><<:3:2?k55:3;07b<8f;29 6442;2:7c==2;08?j40m3:1(><<:3:2?k55:3907d<<9;29 6442;937c==2;28?l44?3:1(><<:31;?k55:3;07d<<6;29 6442;937c==2;08?l44=3:1(><<:31;?k55:3907b<77;29 6442;2=7c==2;28?j4?=3:1(><<:3:5?k55:3;07b<74;29 6442;2=7c==2;08?j4?;3:1(><<:3:5?k55:3907b<85;29 6442;=?7c==2;28?j40;3:1(><<:357?k55:3;07b<81;29 6442;=?7c==2;08?j4083:1(><<:357?k55:3907b<9f;29 6442;=?7c==2;68?j41m3:1(><<:357?k55:3?07b<9d;29 6442;=?7c==2;48?j41k3:1(><<:357?k55:3=07b<9b;29 6442;=?7c==2;:8?j41i3:1(><<:357?k55:3307b<99;29 6442;=?7c==2;c8?j4103:1(><<:357?k55:3h07b<96;29 6442;=?7c==2;a8?j41=3:1(><<:357?k55:3n07b<94;29 6442;=?7c==2;g8?j41;3:1(><<:357?k55:3l07b<92;29 6442;=?7c==2;33?>i5>80;6)==3;040>h4:;0:=65`27294?"4::09;95a330957=?4>5:9l62e=83.8>>4=759m774=9?10c?9m:18'775=:>>0b><=:058?j40i3:1(><<:357?k55:3;376a=7883>!55;38<86`<2382=>=h:>21<7*<228131=i;;81=l54o354>5<#;;91>::4n201>4d<3f8<:7>5$200>7133g99>7?l;:m137<72-99?7<84:l067<6l21d>;950;&066<5?=1e??<51d98k73d290/??=52668j64528l07d=;b;29 6442:>j7c==2;28?l5313:1(><<:26b?k55:3;07d=;8;29 6442:>j7c==2;08?l53?3:1(><<:26b?k55:3907d<<:325?k55:3;07d<<:325?k55:3907d<<:325?k55:3?07d?if;29 6442;:=7c==2;48?l7am3:1(><<:325?k55:3=07d?id;29 6442;:=7c==2;:8?l7ak3:1(><<:325?k55:3307d?ib;29 6442;:=7c==2;c8?l7ai3:1(><<:325?k55:3h07d?i8;29 6442;:=7c==2;a8?l7a?3:1(><<:325?k55:3n07d?i6;29 6442;:=7c==2;g8?l7a=3:1(><<:325?k55:3l07d?i4;29 6442;:=7c==2;33?>o6n:0;6)==3;032>h4:;0:=65f1g094?"4::09<;5a330957=9;o116?7332c:ik4?:%117?47>2d8>?4>5:9j65c=83.8>>4=079m774=9?10e?>k:18'775=:9<0b><=:058?l47k3:1(><<:325?k55:3;376g=0c83>!55;38;:6`<2382=>=n:9k1<7*<228143=i;;81=l54i32:>5<#;;91>=84n201>4d<3`8;47>5$200>7613g99>7?l;:k141<72-99?7646s49>=76516`8965?28=j70=<8;34=>;4;10:4;5232:95=3<5:936<6;;<10839>76>=91;01>=7:0:3?85403;760349847652108965?2;::70=<8;034>;4;10:jk5232:95cc<5:936fc9>76>=9ok01>=7:0d;?85403;m;63<3982b3=:;:21=k;4=21;>4`3349847?i3:?07=<6n;16?>651g38965?28l;70=<8;3fb>;4;109l;<1076>=:9301>=7:32;?854038;863<3982b<=:;:21=hk4=21;>74?349847<=6:?07=<5:=16?>652318965?2;8970=<8;015>;4;109>=5232:964`<5:936??j;<1076>=:8h01>=7:33:?854038:463<398152=:;:21><84=21;>772349847<>4:?07=<59:16?>652008965?2;;:70=<8;024>;4;109>k5232:967c<5:936?76>=:;k01>=7:30:?8540389963<39815d=:;:21>=h4=21;>753349847<<2:?07=<5;816?>652228965?2;9270=<8;003>;4;109?;5232:9663<5:936>:9;<1076>=;=801>=7:26a?854039?563<39800==:;:21?994=21;>4ea349847<6f:?07=<4:?16?>653358965?2:8370=<8;11=>;4;00:;i5232;952d<5:926<9n;<10=?701278?44>879>76?=91?01>=6:0:7?85413;3?63<3882<7=:;:31=5?4=21:>4>7349857?8f:?07<<6?l16?>7516:8965>2;:<70=<9;031>;4;009<>5232;9654<5:926?>>;<10=?478278?44>fg9>76?=9oo01>=6:0dg?85413;mo63<3882bg=:;:31=ko4=21:>4`?349857?i7:?07<<6n?16?>751g78965>28l?70=<9;3e7>;4;00:j?5232;95c7<5:92676?=:9n01>=6:32`?854138;n63<38814d=:;:31>=74=21:>76?349857751dg8965>2;8370=<9;012>;4;009>95232;9675<5:926?<=;<10=?459278?44=219>76?=:8l01>=6:33f?854138:h63<38815f=:;:31>77>349857<>8:?07<<59>16?>752048965>2;;>70=<9;020>;4;009=>5232;9644<5:926??>;<10=?468278?44=2g9>76?=:;o01>=6:30g?8541389o63<38816g=:;:31>?o4=21:>74>349857<=5:?07<<59h16?>7521d8965>2;9?70=<9;006>;4;009?<5232;9666<5:926?=6;<10=?44?278?44=379>76?=::?01>=6:265?854139?863<388006=:;:31?9<4=21:>62e349857=;9:?07<<4<116?>753558965>28im70=<9;0:b>;4;008>;5232;9771<5:926><7;<10=?551278?l4>7e9>76g=9>h01>=n:05b?854i3;<563<3`82<3=:;:k1=5;4=21b>4>33498m7?73:?07d<60;16?>o51938965f282;70=;4;h0:;h5232c952><5:9j6?>8;<10e?47=278?l4=029>76g=:9801>=n:322?854i38;<63<3`82bc=:;:k1=kk4=21b>4`c3498m7?ic:?07d<6nk16?>o51gc8965f28l370=;4;h0:j;5232c95c3<5:9j6f39>76g=9o;01>=n:0d3?854i3;nj63<3`814`=:;:k1>=j4=21b>76d3498m7o521;8965f2;:370=;4;h0:j45232c95`c<5:9j6?<7;<10e?45>278?l4=259>76g=:;901>=n:301?854i389=63<3`8165=:;:k1>77b3498m7<>d:?07d<59j16?>o520`8965f2;;270=;4;h09=:5232c9640<5:9j6??:;<10e?46<278?l4=129>76g=:8801>=n:332?854i38:<63<3`816c=:;:k1>?k4=21b>74c3498m7<=c:?07d<5:k16?>o523c8965f2;8270=;4;h09=l5232c965`<5:9j6?=;;<10e?44:278?l4=309>76g=:::01>=n:31:?854i388;63<3`8173=:;:k1>>;4=21b>6213498m7=;4:?07d<4<:16?>o53508965f2:>i70=;4;h08855232c9711<5:9j6n278?l4<279>76g=;;=01>=n:20;?854i399563<3c823a=:;:h1=:l4=21a>41f3498n7?89:?07g<60?16?>l51978965e282?70=;4;k0:4?5232`95=7<5:9i6<6?;<10f?70n278?o4>7d9>76d=9>201>=m:324?854j38;963<3c8146=:;:h1>=<4=21a>7663498n7l51gg8965e28lo70=;4;k0:jo5232`95cg<5:9i6f79>76d=9o?01>=m:0d7?854j3;m?63<3c82b7=:;:h1=k?4=21a>4`73498n7?jf:?07g<58l16?>l521f8965e2;:h70=;4;k097;<10f?47<278?o4>f89>76d=9lo01>=m:30;?854j389:63<3c8161=:;:h1>?=4=21a>7453498n7<=1:?07g<5:916?>l520d8965e2;;n70=;4;k09=n5232`964d<5:9i6??6;<10f?460278?o4=169>76d=:8<01>=m:336?854j38:863<3c8156=:;:h1><<4=21a>7763498n7<>0:?07g<5:o16?>l523g8965e2;8o70=;4;k09>o5232`967g<5:9i6?<6;<10f?45=278?o4=1`9>76d=:9l01>=m:317?854j388>63<3c8174=:;:h1>>>4=21a>75>3498n7<<7:?07g<5;?16?>l52278965e2:>=70=;4;k088>5232`9714<5:9i6>:m;<10f?531278?o4<499>76d=;==01>=m:0ae?854j382j63<3c8063=:;:h1??94=21a>64?3498n7==9:?07f<6?m16?>m516`8965d28=j70=;4;j0:4;5232a95=3<5:9h6<6;;<10g?7?;278?n4>839>76e=91;01>=l:0:3?854k3;7603498o7m52108965d2;::70=;4;j0:jk5232a95cc<5:9h6fc9>76e=9ok01>=l:0d;?854k3;m;63<3b82b3=:;:i1=k;4=21`>4`33498o7?i3:?07f<6n;16?>m51g38965d28l;70=;4;j09l;<10g?47j278?n4=0`9>76e=:9301>=l:32;?854k38;863<3b82b<=:;:i1=hk4=21`>74?3498o7<=6:?07f<5:=16?>m52318965d2;8970=;4;j09>=5232a964`<5:9h6??j;<10g?46l278?n4=1b9>76e=:8h01>=l:33:?854k38:463<3b8152=:;:i1><84=21`>7723498o7<>4:?07f<59:16?>m52008965d2;;:70=;4;j09>k5232a967c<5:9h6?76e=:;k01>=l:30:?854k389963<3b815d=:;:i1>=h4=21`>7533498o7<<2:?07f<5;816?>m52228965d2;9270=;4;j09?;5232a9663<5:9h6>:9;<10g?53<278?n4<429>76e=;=801>=l:26a?854k39?563<3b800==:;:i1?994=21`>4ea3498o7<6f:?07f<4:?16?>m53358965d2:8370=;4;m0:;i5232f952d<5:9o6<9n;<10`?701278?i4>879>76b=91?01>=k:0:7?854l3;3?63<3e82<7=:;:n1=5?4=21g>4>73498h7?8f:?07a<6?l16?>j516:8965c2;:<70=;4;m09<>5232f9654<5:9o6?>>;<10`?478278?i4>fg9>76b=9oo01>=k:0dg?854l3;mo63<3e82bg=:;:n1=ko4=21g>4`?3498h7?i7:?07a<6n?16?>j51g78965c28l?70=;4;m0:j?5232f95c7<5:9o676b=:9n01>=k:32`?854l38;n63<3e814d=:;:n1>=74=21g>76?3498h7j51dg8965c2;8370=;4;m09>95232f9675<5:9o6?<=;<10`?459278?i4=219>76b=:8l01>=k:33f?854l38:h63<3e815f=:;:n1>77>3498h7<>8:?07a<59>16?>j52048965c2;;>70=;4;m09=>5232f9644<5:9o6??>;<10`?468278?i4=2g9>76b=:;o01>=k:30g?854l389o63<3e816g=:;:n1>?o4=21g>74>3498h7<=5:?07a<59h16?>j521d8965c2;9?70=;4;m09?<5232f9666<5:9o6?=6;<10`?44?278?i4=379>76b=::?01>=k:265?854l39?863<3e8006=:;:n1?9<4=21g>62e3498h7=;9:?07a<4<116?>j53558965c28im70=;4;m08>;5232f9771<5:9o6><7;<10`?551278?h4>7e9>76c=9>h01>=j:05b?854m3;<563<3d82<3=:;:o1=5;4=21f>4>33498i7?73:?07`<60;16?>k51938965b282;70=;4;l0:;h5232g952><5:9n6?>8;<10a?47=278?h4=029>76c=:9801>=j:322?854m38;<63<3d82bc=:;:o1=kk4=21f>4`c3498i7?ic:?07`<6nk16?>k51gc8965b28l370=;4;l0:j;5232g95c3<5:9n6f39>76c=9o;01>=j:0d3?854m3;nj63<3d814`=:;:o1>=j4=21f>76d3498i7k521;8965b2;:370=;4;l0:j45232g95`c<5:9n6?<7;<10a?45>278?h4=259>76c=:;901>=j:301?854m389=63<3d8165=:;:o1>77b3498i7<>d:?07`<59j16?>k520`8965b2;;270=;4;l09=:5232g9640<5:9n6??:;<10a?46<278?h4=129>76c=:8801>=j:332?854m38:<63<3d816c=:;:o1>?k4=21f>74c3498i7<=c:?07`<5:k16?>k523c8965b2;8270=;4;l09=l5232g965`<5:9n6?=;;<10a?44:278?h4=309>76c=:::01>=j:31:?854m388;63<3d8173=:;:o1>>;4=21f>6213498i7=;4:?07`<4<:16?>k53508965b2:>i70=;4;l08855232g9711<5:9n6n278?h4<279>76c=;;=01>=j:20;?854m399563<3g823a=:;:l1=:l4=21e>41f3498j7?89:?07c<60?16?>h51978965a282?70=;4;o0:4?5232d95=7<5:9m6<6?;<10b?70n278?k4>7d9>76`=9>201>=i:324?854n38;963<3g8146=:;:l1>=<4=21e>7663498j7h51gg8965a28lo70=;4;o0:jo5232d95cg<5:9m6f79>76`=9o?01>=i:0d7?854n3;m?63<3g82b7=:;:l1=k?4=21e>4`73498j7?jf:?07c<58l16?>h521f8965a2;:h70=;4;o097;<10b?47<278?k4>f89>76`=9lo01>=i:30;?854n389:63<3g8161=:;:l1>?=4=21e>7453498j7<=1:?07c<5:916?>h520d8965a2;;n70=;4;o09=n5232d964d<5:9m6??6;<10b?460278?k4=169>76`=:8<01>=i:336?854n38:863<3g8156=:;:l1><<4=21e>7763498j7<>0:?07c<5:o16?>h523g8965a2;8o70=;4;o09>o5232d967g<5:9m6?<6;<10b?45=278?k4=1`9>76`=:9l01>=i:317?854n388>63<3g8174=:;:l1>>>4=21e>75>3498j7<<7:?07c<5;?16?>h52278965a2:>=70=;4;o088>5232d9714<5:9m6>:m;<10b?531278?k4<499>76`=;==01>=i:0ae?854n382j63<3g8063=:;:l1??94=21e>64?3498j7==9:p7=4=838pR>6=;<104349857<6;;<10e?44i2wx?5;50;0xZ6>23498n7<69;<10g?44i2wx?5950;0xZ6>03498h7<=838pR>67;<10a?44i2wx?5o50;0xZ6>f3498j7<6m;<10m278?44=9d9>76g=:0o01>=m:3;f?854k382i63<3e81=`=:;:o1>4k4=21e>7?b3ty84<4?:8y]7=7<5:936c`9>76d=9jk01>=l:0ab?854l3;hm63<3d82gd=:;:l1=no4}r16=?6=1rT8945232:953?<5:926<86;<10e?711278?o4>689>76e=9?301>=k:04:?854m3;=563<3g822<=z{:?m6=46{_16b>;4;10::k5232;953`<5:9j6<8i;<10f?71n278?n4>6g9>76b=9?l01>=j:04e?854n3;=j6s|37294??|V:<;70=<8;344>;4;00:;=5232c9526<5:9i6<9?;<10g?708278?i4>719>76c=9>:01>=i:053?xu4>80;64uQ3738965?28=:70=<9;345>;4;h0:;<5232`9527<5:9h6<9>;<10`?709278?h4>709>76`=9>;0q~=92;29=~X4>;16?>651608965>28=970=;4;k0:;?5232a9524<5:9o6<9=;<10a?70:278?k4>739~w6042902wS=93:?07=<6?:16?>751618965f28=870=;4;j0:;>5232f9525<5:9n6<9<;<10b?70;2wx?;:50;;xZ603349847?84:?07<<6?=16?>o51668965e28=?70=;4;m0:;95232g9522<5:9m6<9;;|q020<720qU?;;4=21;>412349857?85:?07d<6?<16?>l51678965d28=>70=;4;l0:;85232d952359z\023=:;:21=:84=21:>4113498m7?86:?07g<6??16?>m51648965c28==70=;4;o0:;;5rs244>5<>sW9=;63<398232=:;:31=:94=21b>4103498n7?87:?07f<6?>16?>j51658965b28=<70={t;40f3498o7?9a:?07a<6>h16?>k517c8965a28<}Y;=7:04a?85413;=n63<3`822g=:;:h1=;l4=21`>40e3498h7?9b:?07`<6>k16?>h517`8yv52k3:15vP<5b9>76>=9?i01>=6:04`?854i3;=o63<3c822f=:;:i1=;m4=21g>40d3498i7?9c:?07c<6>j1v>;j:18:[52m278?54>6d9>76?=9?o01>=n:04f?854j3;=i63<3b822`=:;:n1=;k4=21f>40b3498j7?9e:~j36c290:wE=;0:m25c=83;pD>:?;|l54c<728qC?9>4}o424?6=9rB88=5rn732>5<6sA9?<6sa60094?7|@:>;7p`91283>4}O;=:0qc8>4;295~N4<91vb;?::182M5382we:<850;3xL6273td==:4?:0yK71651zJ005=zf?;26=4>{I174>{i>8k1<7?tH263?xh19k0;6:?;|l55c<728qC?9>4}o414?6=9rB88=5rn702>5<6sA9?<6sa63094?7|@:>;7p`92283>4}O;=:0qc8=4;295~N4<91vb;<::182M5382wvqpNOCz40b?ge?m>3?5sO@Cy3yEFWstJK \ No newline at end of file diff --git a/cores/KypSpectrum/ipcore_dir/rom.vhd b/cores/KypSpectrum/ipcore_dir/rom.vhd index cf11c59..78de9aa 100644 --- a/cores/KypSpectrum/ipcore_dir/rom.vhd +++ b/cores/KypSpectrum/ipcore_dir/rom.vhd @@ -22,7 +22,7 @@ -- devices, or systems. Use in such applications are expressly -- -- prohibited. -- -- -- --- (c) Copyright 1995-2015 Xilinx, Inc. -- +-- (c) Copyright 1995-2016 Xilinx, Inc. -- -- All rights reserved. -- -------------------------------------------------------------------------------- -------------------------------------------------------------------------------- diff --git a/cores/KypSpectrum/ipcore_dir/vram.ngc b/cores/KypSpectrum/ipcore_dir/vram.ngc new file mode 100644 index 0000000..c57f22c --- /dev/null +++ b/cores/KypSpectrum/ipcore_dir/vram.ngc @@ -0,0 +1,3 @@ +XILINX-XDB 0.1 STUB 0.1 ASCII +XILINX-XDM V1.6e +$0a644<,[o}e~g`n;"2*73>(-80!<74012345678=:0<=>?0123456789:;<=>?0123456789:;<=>?0123456789:;<=>?0123456789:;=95>3;KMTPR=imnym1?=:1<20>742@D[YY4ndepa844=87;?7<:5IORVP?GCL[K7=>4?>0685127?69991:6D@_UU8tad:7294:>6==:HLSQQ113906?OIX\^1HDL33083:45<;;0DYY^ZT;FLE956294:?6==:NWWTPR=LFH7?<4?>0380?OIX\^1HD^N<283:47<<3CE\XZ5DHRA86<768:087GAPTV9S@G;;3:5==5;:HLSQQ2:69KPRW]]0OC]O33;2=57=32F__\XZ5DNRA86<76m1=av6tpe201+598136D@_UU8gmkg;?3:5=>57:NWWTPR=lfn1950?:8EABUI5:556OKDSC?558>3HNO^L2>1?;8EABUI5;92o5NDEPB845=8730MIJ]A=30:==FLMXJ0<07;@FGVD:5611JHI\N<2<;?DBCZH6?255NDEPB808?3HNO^L29>99B@ATF4>437LJKR@>;:==FLMXJ0407;@FGVG:7601JHI\M<02==>GCL[H7=<06;@FGVG:6:7h0MIJ]B=30>58>3HNO^O2>3?:8EABUJ5;546OKDS@?6;>GCL[H7:364AEFQF91902KOH_L38?:8EABUJ535?6OCL99AQVYNFOE97NK>2:AKAFMXD@INB^KPTXRF0>EKC9<0OAE>8148GIM5?9?0OAE=X99@HN4_91:>7NBD9168GIMF=2IGGL?8;BNHE4B5?2IGGL?K469@HNG6L1>0OAEM5:AOOG723JF@O<;4CMIG50=DDBN]o6MCKET\@LPNLL?0OAEIX99@HN@_91:27NABMHVWAA733JEYIRIJNDPBPLIIW@DMC:5LRDCWAAeBF\HU\EIZG_C48@LG;87=0HDO311<4?AOF48;5;6JFA=31:2=CAH6:?394DHC?51803MCJ0<;17:FJE9716>1OEL2>7?58@LG;914<7IGN<0;=2>BNI5;5;6JFA=03:2=CAH69=394DHC?67803MCJ0?=17:FJE9436>1OEL2=5?58@LG;:?4<7IGN<35=3>BNI5832:5KI@>1=;0394DHC?758>3MCJ0>?50?58@LG;;84=7IGN<2<5?AOF4=4=7IGN<4<5?AOF4?4=7IGN<6<5?AOF414=7IGN<8<5?AOE494<7IGM<02=3>BNJ5;:2:5KIC>26;108;EKA8429?2NBN1?:>69GMG:6>7=0HDL316<4?AOE4825;6JFB=3::3=CAK6:2:5KIC>14;1<08;EKA8749?2NBN1<<>69GMG:5<7=0HDL324<4?AOE4;<5;6JFB=04:2=CAK694394DH@?6<813MCI0?08;EKA866912NBN1=>:1<4?AOE4:;5:6JFB=1=2>BNJ5>5:6JFB=7=2>BNJ5<5:6JFB=5=2>BNJ525:6JFB=;=3>BNXH6;2:5KIQC?5;12:2=CAYH7>374DHRA86<76>1OE]L33?48@JG;87=0HBO311<4?AIF48;5;6J@A=31:2=CGH6:?394DNC?51803MEJ0<;17:FLE9716>1OCL2>7?58@JG;914<7IAN<0;=2>BHI5;5;6J@A=03:2=CGH69=394DNC?67803MEJ0?=17:FLE9436>1OCL2=5?58@JG;:?4<7IAN<35=3>BHI5832:5KO@>1=;0394DNC?758>3MEJ0>?50?58@JG;;84=7IAN<2<5?AIF4=4=7IAN<4<5?AIF4?4=7IAN<6<5?AIF414=7IAN<8<4?AIFW[OL:6J@B=2=3>BHJ5;;2:5KOC>25;169GKG:6=7=0HBL317<4?AIE48=5;6J@B=3;:2=CGK6:5384DN@?5;1=08;EMA8779?2NDN1<=>69GKG:5;7=0HBL325<4?AIE4;?5;6J@B=05:2=CGK69;394DN@?6=803MEI0?716:FLF949?2NDN1=?>89GKG:493:5;6J@B=12:3=CGK682;5KOC>7:3=CGK6>2;5KOC>5:3=CGK6<2;5KOC>;:3=CGK622:5KOC]QAB189GKUG;;3:5;6J@P@>0:2=CGYH7<394DNRA84803ME[N1<19:FLTG:4294<7IA_B=1=7>CII:1NBOl4EO]QWQTFEVKi7H@PRRVQEHYE=2LJ@^K>;F18CKB?3@DBX]Q?099JJLRWW9;37D@FTQ]36==NF@^[S==7;HLJPUY7<11BBDZ__17;?LHN\YU;:55FNHVS[5103@DBXR>?7:KMMQY79>1BBDZP0358MKOSW99<7D@FT^273>OIA]U;9:5FNHV\4311BBDZP1358MKOSW89<7D@FT^373>OIA]U:9:5FNHV\531969JJLRX9H=0ECG[_0@4?LHN\V;H;6GAIU]2@2=NF@^T=H94IOKW[4@03@DBXR1BBDZP2358MKOSW;9<7D@FT^073>OIA]U99:5FNHV\631H94IOKW[7@03@DBXR=?7:KMMQY49>1BBDZP3358MKOSW:9<7D@FT^173>OIA]U89:5FNHV\73198;HLJPZ5??2CEEYQ<969JJLRX;H=0ECG[_2@4?LHN\V9H;6GAIU]0@2=NF@^T?H94IOKW[6@13@DBXRO9;HLJPZD>3@DBXRHFLD48HJGCMM<0@BMDEE58HJANKHFh7@oeosTfvvohfj1Feca}Vdppmjh53G:97C?8;OGWSJTL<2DDBH?8;NRWMHO]MVZYE@G[IWGP[KAD92Zh7] =0012445XD=1[M_Zn;QKM[GSTAMRi7]GA_CWPJDKB>2ZXHB@Ja:PBIG71J^OY:6\JGBGB2>TBOJOI86\\T@68VVRE?2XXXYW_Ed9QWQYWZ@EYEYWPAd9QWQYWZ@EYEYWPB038WMTBOVOSX_OLT^LDG`=T@[OLS@GA_RKYA45<[@GTOBBCIRKLJZEOMJAj7^GB_EGUMFC13ZE^^NK7;RRBVQGI>>1X^[OC_@58WWPFDVH=7^ZNTTQ7?V_IK=1_U]K86:W3+}usWkf`S`kb_fgmawgsg{%lblzfvd`nc+hf|`|nSobd_lgn[bci'kgei lsup,vdkkgfzP

Vddecg{.scn+VBW&ZCF\AKPPSKN5=(uid==7X> xrv\fimXelgTkh`jr`vlv*aii}c}ioch.ocwmscXjeaTahcPgdl,rdjnl'ixx!}alnlku]4U'xja#| s7]mklhn|'xja"]KP/QJIUJBWYXBA<6!r`o`?PUBZV\B_DLCE29UGF?<^@O\SYW_E79TAD:76?1\IL2>>79TAD:5611\IL2<:1<5?RCF4:4=7ZKM<1<5?RCE484=7ZKM<3<;?RCE4:0;2;5XEC>0:g=PZ@^NSKG]SUa8SWOSMVGDHHQNc:UQMQCXEFNNSO?k;YKOMK^*PMH+<#?/SUWA$5(6(HYHED84XRVOMG1^t|:1Ri~64aefqe96912koho311<:?dbczh6:=3l4aefqe97529427ljkr`>26;>gcl{k78364aefqe93902koho36?:8eabui5=546okdsc?<;>gcl{h7;364aefqf9>902kohl39?3;?gjlWdofSjka_fgmawodWjy~<64bmi\i`kXoldT|gb_vkgpmY6911i`fQbel]dakYwz`gT{dj{h^02<>dkcVgnaRijn^rqmhYpam~cS>?7;cnh[hcjWnoeS}|fm^uj`qnX<8n0naePmdo\c`hXx{cfSz|npqgq[v0X98n0naePmdo\c`hXx{cfSz|npqgq[v0X:8n0naePmdo\c`hXx{cfSz|npqgq[v0X;8n0naePmdo\c`hXx{cfSz|npqgq[v0XdkcVgnaRgaptv\fiidc8>0naePmdo\kprw}}Ui`bmd4:aood23:2=cagk7=394dhlb87803mcem1=17:fjjd:36>1oeco35?58`lhf4?427igaa=594;199gkpre4<437iaztc>5:d=cg|~i0:4?>99gkpre4>487h`n8:ldggsndm80bb:4vscn0``<~{kf obd_lgn[bciW=T?!ul_`fgvdYpam~c1<=#c^cg`wdX`nd0?<,b]bhbiua}bf1<"l_`zj[lbX`nd0:#c^c{mZukioTxt~j=1.`[d~nW}s{i0?#c^`zp`Ytaso65!mPcnonkkYddb7; nQkegcvhqYci}k6og{_`fgv`ut59&hSkobim{>wugu|hd= nQgar]b|lYnl4:'oRfns^gme87+kVbjRkab<2/gZnf{Vcefhm{esp>4)eX`hyTahcPotvsqqYumnyTm0>#c^jbwZkbeVe~x}{{_sgdwZd:8%iTdl}Pmtz\kprw}}Uyij}Pa<2/gZnf{Vg~tRaztqww[wc`{Vh64)eX`hyTbh{eba\mkvr|Vxnk~Qn=1.`[mgtWzemxhml_nwwtprXzlmxSo3?,b]jjlrXn`fn1ObnnjQwvlh`$jUbbdzPfhnf[kgjm4ddSnaj_gkoaZjhimoo nQfnhvb[sgk59&hSd`ftc]uei;7$jUbbyk}f`af[qwm4:'oRb`ae]jjlrXn`fn1="l_lgn[qwm4;'oRczx^rjt`jnflUxxlijs<2/gZvuadUu}k21-a\v`gcWmo{xeQn=93:6)eXzlkoSikti]a9=7>:%iT~hok_vkgpmYf51&hSknd^uj`qnXj42'oR||t^rqmjtn|pUj1NK#c^pppZvuafxbxtQm=BG/gZtt|V~r|h3\YOA/gZtt|{kfSl3?,b]qwqtfeVh6EIJ+kVxiRl}al]ahjel59&hSx}j_c{waZqbi4:'oR{|e^`zp`Ypmk7; nQzsd]gacgrd}Uomyo20-a\qvcXmji6c18E>1<6sZ>o6<9l:064>454i83=6?9l75ym52g=92d:;o49;%347b8202<6;:k:5;4=7b5f?V74k3;ii7>5121b5<0=:>i3<6];b;3aa?6=9:9j=48526a;6>b6k90;6<4>{R6g>41d28><6<=71d?m1}X<;7:182>4<48rY?h7?8c;373?74;h;2:7<8c6f8 402289n7[?89;0xq45a281~=9>50:'51>=9:1i=n>50;0f>3<48rB::>5+14g95f60<6=3w/=:951`78 61=9j80(9m51b38 432281/=8:516f8m4e3290/=9o51b18j42>2910e<6=:18'51g=91;0b<:6:198m4>7290/=9o51938j42>2810e<9i:18'51g=91;0b<:6:398m4>e290/=9o51938j42>2:10e<6n:18'51g=91;0b<:6:598m4>>290/=9o51938j42>2<10e<67:18'51g=91;0b<:6:798m4>0290/=9o51938j42>2>10e<69:18'51g=91;0b<:6:998m4>2290/=9o51938j42>2010e<6;:18'51g=91;0b<:6:`98m4>4290/=9o51938j42>2k10e<9j:18'51g=91;0b<:6:b98m4d4290/=9o51c08j42>2910e:18'51g=9k80b<:6:098m4d7290/=9o51c08j42>2;10e2=10e2?10e2910e<6j:18'51g=91l0b<:6:098m4>c290/=9o519d8j42>2;10e<76:18'51g=91l0b<:6:298m4??290/=9o519d8j42>2=10e<78:18'51g=91l0b<:6:498m4?1290/=9o519d8j42>2?10e<7::18'51g=91l0b<:6:698m4?3290/=9o519d8j42>2110e<7<:18'51g=91l0b<:6:898m4?5290/=9o519d8j42>2h10e<7>:18'51g=91l0b<:6:c98m4>d290/=9o519d8j42>2j10e2910c290/=9o51c`8j42>2;10c2=10c2?10c50z&21`<6h3n380boj50:lgb?6<,li1ih5+ee8fa>"a9390(k<53:&e7?5<,o>1?6*i5;18 c0=;2.m;7=4$g:97>"a1390(ko53:&ef?5<,oi1?6*id;18 cc=;2.mj7=4$023>6=#99;1?6*>0380?!77;390(<>;:29'553=;2.:<;4<;%333?5<,8:36>5+11;97>"68h087)??b;18 46d2:1/==j53:&24`<43-;;j7=4$033>6=#98;1?6*>1380?!76;390(5+10;97>"69h087)?>b;18 47d2:1/=6=#9;;1?6*>2380?!75;390(<<;:29'573=;2.:>;4<;%313?5<,8836>5+13;97>"6:h087)?=b;18 44d2:1/=?j53:&26`<43-;9j7=4$013>6=#9:;1?6*>3380?!74;390(<=;:29'563=;2.:?;4<;%303?5<,8936>5+12;96>"6;h097)?"6=80:9i5+140973=#9<91?;5+144971=#9<=1=874$07b>7=#9

6*>708235=#9>81=:>4i06g>5<>o6=90;66g;3;29?l73m3:17d?;f;29?lcf2900e4850;&20d<>=2d:844?;:k:0?6=,8>j64;4n06:>4=4`8:1>h6<00976g62;29 42f20?0b<:6:298m40f290/=9o517;8j42>2910e<87:18'51g=9?30b<:6:098m400290/=9o517;8j42>2;10e<89:18'51g=9?30b<:6:298kg3=83.:8l4m4:l20<<732ei?7>5$06b>g226<54oc394?"64881?>ie83:1(<:n:c68j42>2:10clh50;&20dj6o:4n06:>0=4`8a0>h6<00=76anc;29 42f2k>0b<:6:698kdd=83.:8l4m4:l20<5$06b>g226454o`;94?"6488b?>if03:1(<:n:c68j42>2k10cl850;&20dj6o:4n06:>a=1<7*>4`8a0>h6<00n76an3;29 42f2k>0b<:6:g98kd4=83.:8l4m4:l20<<6821dm<4?:%37e?d33g;?57?>;:mb4?6=,8>j6o:4n06:>44<3f3m6=4+15c9f1=i9=31=>54o8g94?"648820>=h1m0;6)?;a;`7?k7313;>76amc;29 42f2k>0b<:6:048?jde290/=9o5b59m51?=9>10coo50;&20d8:9lf<<72-;?m7l;;o37=?7>32ei47>5$06b>g2265<#9=k1n95a15;95g=4`8a0>h6<00:o65`b383>!73i3h?7c?;9;3g?>if?3:1(<:n:c68j42>28o07b7l:18'51g=j=1e=9751g98m4d=83.:8l4>a:l20<<732c:57>5$06b>4g26<54i0:94?"64881?>o6?3:1(<:n:0c8j42>2:10e?:50;&20d<6i2d:844;;:k17?6=,8>j60=4`82e>h6<00=76g=1;29 42f28k0b<:6:698m76=83.:8l4>a:l20<5$06b>4g26454i0g94?"6488b?>o6l3:1(<:n:0c8j42>2k10ej6a=4`81=>h6<00;76g=8;29 42f2;30b<:6:098m71=83.:8l4=9:l20<<532c9:7>5$06b>7?26>54i2194?"64887?>o4:3:1(<:n:3;8j42>2<10e>?50;&20d<512d:8449;:k04?6=,8>j6?74n06:>2=4`81=>h6<00376g=e;29 42f2;30b<:6:898m7b=83.:8l4=9:l20<5$06b>7?26o54i3`94?"6488`?>o5=3:1(<:n:3;8j42>2m10e5o50;&20dj6574n06:>4=4`8;=>h6<00976g75;29 42f2130b<:6:298m=2=83.:8l479:l20<<332c3?7>5$06b>=?26854i9094?"64885?>o?93:1(<:n:9;8j42>2>10e5>50;&20dj6574n06:><=o1<7*>4`8;=>h6<00j76g8d;29 42f2130b<:6:c98m2d=83.:8l479:l20<5$06b>=?26i54i6;94?"6488f?>o003:1(<:n:9;8j42>2o10e:950;&20d0:9j33<72-;?m766;o37=?7632c<97>5$06b>=?26<<4;h57>5<#9=k1445a15;956=91<7*>4`8;=>h6<00:865f7383>!73i3227c?;9;36?>o>93:1(<:n:9;8j42>28<07d7?:18'51g=001e=9751698m=`=83.:8l479:l20<<6021b4h4?:%37e?>>3g;?57?6;:k;`?6=,8>j6574n06:>4g<3`2h6=4+15c9<<=i9=31=o54i9`94?"64882g>=n0>0;6)?;a;::?k7313;o76g8c;29 42f2130b<:6:0g8?l16290/=9o5889m51?=9o10ch:50;&20dj6h=4n06:>4=4`8f7>h6<00976aj0;29 42f2l90b<:6:298m5$06b>26<54i8:94?"64881?>o>?3:1(<:n:8c8j42>2:10ch750;&20dj6h64n06:>4=4`8f<>h6<00976aj5;29 42f2l20b<:6:298ka1=83.:8l4k6:l20<<732eo97>5$06b>a026<54oe194?"64881?>ic:3:1(<:n:e48j42>2:10ci?50;&20d2d:844;;:mg4?6=,8>j6i84n06:>0=4`8g2>h6<00=76ale;29 42f2m<0b<:6:698kfb=83.:8l4k6:l20<5$06b>a026454ob`94?"6488b?>idi3:1(<:n:e48j42>2k10cn650;&20d2d:844l;:m`3?6=,8>j6i84n06:>a=4`8g2>h6<00n76al5;29 42f2m<0b<:6:g98kf2=83.:8l4k6:l20<<6821do>4?:%37e?b13g;?57?>;:m`6?6=,8>j6i84n06:>44<3fi:6=4+15c9`3=i9=31=>54ob294?"648820>=hjo0;6)?;a;f5?k7313;>76ake;29 42f2m<0b<:6:048?jbc290/=9o5d79m51?=9>10cim50;&20d2d:844>8:9l`g<72-;?m7j9;o37=?7>32eom7>5$06b>a0265<#9=k1h;5a15;95g=4`8g2>h6<00:o65`d583>!73i3n=7c?;9;3g?>id13:1(<:n:e48j42>28o07blj:18'51g=l?1e=9751g98m40a290/=9o517g8j42>2910e<8k:18'51g=9?o0b<:6:098m40d290/=9o517g8j42>2;10e<8m:18'51g=9?o0b<:6:298m3?=83.:8l498:l20<<732c=;7>5$06b>3>26<54i7794?"64881?>o1<3:1(<:n:7:8j42>2:10e;=50;&20d<102d:844;;:k56?6=,8>j6;64n06:>0=4`85<>h6<00=76g90;29 42f2?20b<:6:698m0`=83.:8l498:l20<i7>5$06b>3>26454i4f94?"6488b?>o2k3:1(<:n:7:8j42>2k10e8o50;&20d<102d:844l;:k6=?6=,8>j6;64n06:>a=4`85<>h6<00n76g:7;29 42f2?20b<:6:g98m00=83.:8l498:l20<<6821b984?:%37e?0?3g;?57?>;:k60?6=,8>j6;64n06:>44<3`?86=4+15c92==i9=31=>54i4094?"648820>=n=80;6)?;a;4;?k7313;>76g80;29 42f2?20b<:6:048?l0a290/=9o5699m51?=9>10e;k50;&20d<102d:844>8:9j2a<72-;?m787;o37=?7>32c=o7>5$06b>3>265<#9=k1:55a15;95g=4`85<>h6<00:o65f6783>!73i3<37c?;9;3g?>o2j3:1(<:n:7:8j42>28o07d;?:18'51g=>11e=9751g98yg7183:1nn4?:1y'50c=9=i0D<9;;I357>\4=3ip:795d;32>`<6:3l1n7o5c;33><>67=i5+f480?!`12:1/j:4<;%d;>6=#n0087)hn:29'bg<43-lh6>5+fe80?!`b2:1/jk4<;%334?5<,8::6>5+11097>"68:087)??4;18 4622:1/==853:&242<43-;;47=4$02:>6=#99k1?6*>0c80?!77k390(<>k:29'55c=;2.:5+10097>"69:087)?>4;18 4722:1/=<853:&252<43-;:47=4$03:>6=#98k1?6*>1c80?!76k390(5+13097>"6::087)?=4;18 4422:1/=?853:&262<43-;947=4$00:>6=#9;k1?6*>2c80?!75k390(<k4<;%304?5<,89:6>5+12097>"6;:087)?<4;18 4522:1/=>853:&272<43-;847=4$01:>7=#9:k1>6*>3c8201=#9<;1=8j4$071>60<,8?86>84$075>62<,8?<6<;6;%36e?4<,8?i6?5+1639526<,8=96<9?;h37`?6=3`9n6=44id`94?=n9<:1<75f4283>>o64g83>>obi3:17d79:18'51g=1<1e=9750:9j=1<72-;?m77:;o37=?7<3`386=4+15c9=0=i9=31>65f9383>!73i33>7c?;9;18?l71i3:1(<:n:04:?k7313:07d?98;29 42f28<27c?;9;38?l71?3:1(<:n:04:?k7313807d?96;29 42f28<27c?;9;18?jd2290/=9o5b59m51?=821dn>4?:%37e?d33g;?57?4;n`2>5<#9=k1n95a15;96>=hj90;6)?;a;`7?k7313907boi:18'51g=j=1e=9754:9le`<72-;?m7l;;o37=?3<3fko6=4+15c9f1=i9=31:65`ab83>!73i3h?7c?;9;58?jge290/=9o5b59m51?=021dml4?:%37e?d33g;?5774;nc:>5<#9=k1n95a15;9e>=hi10;6)?;a;`7?k7313h07bo9:18'51g=j=1e=975c:9le0<72-;?m7l;;o37=?b<3fk?6=4+15c9f1=i9=31i65`a283>!73i3h?7c?;9;d8?jg5290/=9o5b59m51?=9910cl?50;&20d1:9le5<72-;?m7l;;o37=?7532e2j7>5$06b>g226<=4;n;f>5<#9=k1n95a15;951=4`8a0>h6<00:965`bb83>!73i3h?7c?;9;35?>iej3:1(<:n:c68j42>28=07bln:18'51g=j=1e=9751998kg?=83.:8l4m4:l20<<6121dn54?:%37e?d33g;?57?n;:ma3?6=,8>j6o:4n06:>4d<3fh=6=4+15c9f1=i9=31=n54oc094?"64882`>=hi>0;6)?;a;`7?k7313;n76a6c;29 42f2k>0b<:6:0d8?l7e290/=9o51`9m51?=821b=44?:%37e?7f3g;?57?4;h3;>5<#9=k1=l5a15;96>=n9>0;6)?;a;3b?k7313907d<;:18'51g=9h1e=9754:9j66<72-;?m7?n;o37=?3<3`896=4+15c95d=i9=31:65f2083>!73i3;j7c?;9;58?l47290/=9o51`9m51?=021b=k4?:%37e?7f3g;?5774;h3f>5<#9=k1=l5a15;9e>=n9m0;6)?;a;3b?k7313h07d?l:18'51g=9h1e=975c:9j53<72-;?m7?n;o37=?b<3`8j6=4+15c96<=i9=31<65f2983>!73i3827c?;9;38?l40290/=9o5289m51?=:21b>;4?:%37e?4>3g;?57=4;h10>5<#9=k1>45a15;90>=n;;0;6)?;a;0:?k7313?07d=>:18'51g=:01e=9756:9j75<72-;?m7<6;o37=?1<3`8m6=4+15c96<=i9=31465f2d83>!73i3827c?;9;;8?l4c290/=9o5289m51?=i21b>n4?:%37e?4>3g;?57l4;h0a>5<#9=k1>45a15;9g>=n:<0;6)?;a;0:?k7313n07d6n:18'51g=001e=9750:9j<=<72-;?m766;o37=?7<3`2=6=4+15c9<<=i9=31>65f8483>!73i3227c?;9;18?l>3290/=9o5889m51?=<21b4>4?:%37e?>>3g;?57;4;h:1>5<#9=k1445a15;92>=n080;6)?;a;::?k7313=07d6?:18'51g=001e=9758:9j3c<72-;?m766;o37=??<3`=n6=4+15c9<<=i9=31m65f7e83>!73i3227c?;9;`8?l1e290/=9o5889m51?=k21b;l4?:%37e?>>3g;?57j4;h5:>5<#9=k1445a15;9a>=n?10;6)?;a;::?k7313l07d98:18'51g=001e=9751198m20=83.:8l479:l20<<6921b;84?:%37e?>>3g;?57?=;:k40?6=,8>j6574n06:>45<3`=86=4+15c9<<=i9=31=954i6094?"648821>=n180;6)?;a;::?k7313;=76g60;29 42f2130b<:6:058?l>a290/=9o5889m51?=9110e5k50;&20d9:9j5$06b>=?265<#9=k1445a15;95f=4`8;=>h6<00:h65f7b83>!73i3227c?;9;3f?>o093:1(<:n:9;8j42>28l07bk;:18'51g=m:1e=9750:9la7<72-;?m7k<;o37=?7<3fo:6=4+15c9a6=i9=31>65`e183>!73i3o87c?;9;18?l?e290/=9o59`9m51?=821b544?:%37e??f3g;?57?4;h;;>5<#9=k15l5a15;96>=n1>0;6)?;a;;b?k7313907bk6:18'51g=m11e=9750:9la2<72-;?m7k7;o37=?7<3fo=6=4+15c9a==i9=31>65`e483>!73i3o37c?;9;18?jb0290/=9o5d79m51?=821dh84?:%37e?b13g;?57?4;nf0>5<#9=k1h;5a15;96>=hl;0;6)?;a;f5?k7313907bj>:18'51g=l?1e=9754:9l`5<72-;?m7j9;o37=?3<3fim6=4+15c9`3=i9=31:65`cd83>!73i3n=7c?;9;58?jec290/=9o5d79m51?=021don4?:%37e?b13g;?5774;naa>5<#9=k1h;5a15;9e>=hkh0;6)?;a;f5?k7313h07bm7:18'51g=l?1e=975c:9lg2<72-;?m7j9;o37=?b<3fi=6=4+15c9`3=i9=31i65`c483>!73i3n=7c?;9;d8?je3290/=9o5d79m51?=9910cn=50;&20d2d:844>1:9lg7<72-;?m7j9;o37=?7532eh=7>5$06b>a026<=4;na3>5<#9=k1h;5a15;951=4`8g2>h6<00:965`dd83>!73i3n=7c?;9;35?>icl3:1(<:n:e48j42>28=07bjl:18'51g=l?1e=9751998kad=83.:8l4k6:l20<<6121dhl4?:%37e?b13g;?57?n;:mg=?6=,8>j6i84n06:>4d<3fn36=4+15c9`3=i9=31=n54oe694?"64882`>=hk00;6)?;a;f5?k7313;n76ame;29 42f2m<0b<:6:0d8?l71n3:1(<:n:04f?k7313:07d?9d;29 42f28290/=9o5699m51?=821b::4?:%37e?0?3g;?57?4;h46>5<#9=k1:55a15;96>=n>=0;6)?;a;4;?k7313907d8<:18'51g=>11e=9754:9j27<72-;?m787;o37=?3<3`<:6=4+15c92==i9=31:65f6183>!73i3<37c?;9;58?l3a290/=9o5699m51?=021b9h4?:%37e?0?3g;?5774;h7g>5<#9=k1:55a15;9e>=n=j0;6)?;a;4;?k7313h07d;n:18'51g=>11e=975c:9j1<<72-;?m787;o37=?b<3`?36=4+15c92==i9=31i65f5683>!73i3<37c?;9;d8?l31290/=9o5699m51?=9910e8;50;&20d<102d:844>1:9j11<72-;?m787;o37=?7532c>?7>5$06b>3>26<=4;h71>5<#9=k1:55a15;951=4`85<>h6<00:965f7183>!73i3<37c?;9;35?>o1n3:1(<:n:7:8j42>28=07d8j:18'51g=>11e=9751998m3b=83.:8l498:l20<<6121b:n4?:%37e?0?3g;?57?n;:k5f?6=,8>j6;64n06:>4d<3`4882`>=n=k0;6)?;a;4;?k7313;n76g:0;29 42f2?20b<:6:0d8?xd6>80;6om50;2x 43b28>h7E?84:J226=];<0hw;48:e825?c=9;0m6o4n:b824??=u-;?97?mf:l7a?46`md;28ja`=82.no7kj;%gg>`c<,o;1?6*i2;18 c5=;2.m87=4$g797>"a>390(k953:&e"am390(kh53:&245<43-;;=7=4$021>6=#9991?6*>0580?!77=390(<>9:29'551=;2.:<54<;%33=?5<,8:j6>5+11`97>"68j087)??d;18 46b2:1/==h53:&255<43-;:=7=4$031>6=#9891?6*>1580?!76=390(5+10`97>"69j087)?>d;18 47b2:1/=6=#9;91?6*>2580?!75=390(<<9:29'571=;2.:>54<;%31=?5<,88j6>5+13`97>"6:j087)?=d;18 44b2:1/=?h53:&275<43-;8=7=4$011>6=#9:91?6*>3580?!74=390(<=9:29'561=;2.:?54<;%30=?4<,89j6?5+12`9512<,8?:6<;k;%366?513-;>?7=9;%362?533-;>;7?:9:&21d<53-;>n7<4$052>4173-;<>7?80:k20a<722c8i7>5;hga>5<5$06b><326?54i8094?"64880?>o6>h0;6)?;a;35=>h6<00;76g>6983>!73i3;=56`>4882?>o6>>0;6)?;a;35=>h6<00976g>6783>!73i3;=56`>4880?>ie=3:1(<:n:c68j42>2910co=50;&20d;:ma5?6=,8>j6o:4n06:>7=4`8a0>h6<00876anf;29 42f2k>0b<:6:598kdc=83.:8l4m4:l20<<232ejh7>5$06b>g226;54o`a94?"64884?>ifj3:1(<:n:c68j42>2110clo50;&20dj6o:4n06:>d=4`8a0>h6<00i76an6;29 42f2k>0b<:6:b98kd3=83.:8l4m4:l20<5$06b>g226h54o`194?"6488e?>if:3:1(<:n:c68j42>28:07bo>:18'51g=j=1e=9751098kd6=83.:8l4m4:l20<<6:21d5k4?:%37e?d33g;?57?<;:m:a?6=,8>j6o:4n06:>42<3f3o6=4+15c9f1=i9=31=854oca94?"648822>=hjk0;6)?;a;`7?k7313;<76ama;29 42f2k>0b<:6:0:8?jd>290/=9o5b59m51?=9010co650;&20da:9lf2<72-;?m7l;;o37=?7e32ei:7>5$06b>g2265<#9=k1n95a15;95a=4`8a0>h6<00:i65`9b83>!73i3h?7c?;9;3e?>o6j3:1(<:n:0c8j42>2910e<750;&20d<6i2d:844>;:k2j67=4`82e>h6<00876g=4;29 42f28k0b<:6:598m75=83.:8l4>a:l20<<232c9>7>5$06b>4g26;54i3394?"64884?>o583:1(<:n:0c8j42>2110ej6d=4`82e>h6<00i76g>c;29 42f28k0b<:6:b98m40=83.:8l4>a:l20<5$06b>7?26=54i3:94?"64882?>o5?3:1(<:n:3;8j42>2;10e?850;&20d<512d:844<;:k07?6=,8>j6?74n06:>1=4`81=>h6<00>76g<1;29 42f2;30b<:6:798m66=83.:8l4=9:l20<<032c9j7>5$06b>7?26554i3g94?"6488:?>o5l3:1(<:n:3;8j42>2h10e?m50;&20d<512d:844m;:k1f?6=,8>j6?74n06:>f=4`81=>h6<00o76g7a;29 42f2130b<:6:198m=>=83.:8l479:l20<<632c3:7>5$06b>=?26?54i9794?"64880?>o?<3:1(<:n:9;8j42>2=10e5=50;&20dj6574n06:>3=4`8;=>h6<00<76g70;29 42f2130b<:6:998m2`=83.:8l479:l20<<>32c5$06b>=?26l54i6f94?"6488a?>o0j3:1(<:n:9;8j42>2j10e:o50;&20dj6574n06:>`=21<7*>4`8;=>h6<00m76g87;29 42f2130b<:6:028?l11290/=9o5889m51?=9810e:;50;&20d2:9j31<72-;?m766;o37=?7432c5$06b>=?26<:4;h51>5<#9=k1445a15;950=4`8;=>h6<00::65f9183>!73i3227c?;9;34?>o?n3:1(<:n:9;8j42>28207d6j:18'51g=001e=9751898m=b=83.:8l479:l20<<6i21b4n4?:%37e?>>3g;?57?m;:k;f?6=,8>j6574n06:>4e<3`2<6=4+15c9<<=i9=31=i54i6a94?"64882a>=n?80;6)?;a;::?k7313;m76aj4;29 42f2l90b<:6:198k`4=83.:8l4j3:l20<<632en=7>5$06b>`526?54od294?"64880?>o>j3:1(<:n:8c8j42>2910e4750;&20d<>i2d:844>;:k:j64o4n06:>7=4`8:e>h6<00876aj9;29 42f2l20b<:6:198k`1=83.:8l4j8:l20<<632en:7>5$06b>`>26?54od794?"64880?>ic?3:1(<:n:e48j42>2910ci;50;&20d2d:844>;:mg7?6=,8>j6i84n06:>7=4`8g2>h6<00876ak1;29 42f2m<0b<:6:598ka6=83.:8l4k6:l20<<232ehj7>5$06b>a026;54obg94?"64884?>idl3:1(<:n:e48j42>2110cnm50;&20d2d:8446;:m`f?6=,8>j6i84n06:>d=4`8g2>h6<00i76al8;29 42f2m<0b<:6:b98kf1=83.:8l4k6:l20<5$06b>a026h54ob794?"6488e?>id<3:1(<:n:e48j42>28:07bm<:18'51g=l?1e=9751098kf4=83.:8l4k6:l20<<6:21do<4?:%37e?b13g;?57?<;:m`4?6=,8>j6i84n06:>42<3fhm6=4+15c9`3=i9=31=854oeg94?"648822>=hlm0;6)?;a;f5?k7313;<76akc;29 42f2m<0b<:6:0:8?jbe290/=9o5d79m51?=9010cio50;&20d2d:844>a:9l`<<72-;?m7j9;o37=?7e32eo47>5$06b>a0265<#9=k1h;5a15;95a=4`8g2>h6<00:i65`bd83>!73i3n=7c?;9;3e?>o6>o0;6)?;a;35a>h6<00;76g>6e83>!73i3;=i6`>4882?>o6>j0;6)?;a;35a>h6<00976g>6c83>!73i3;=i6`>4880?>o113:1(<:n:7:8j42>2910e;950;&20d<102d:844>;:k51?6=,8>j6;64n06:>7=1<7*>4`85<>h6<00876g93;29 42f2?20b<:6:598m34=83.:8l498:l20<<232c==7>5$06b>3>26;54i7294?"64884?>o2n3:1(<:n:7:8j42>2110e8k50;&20d<102d:8446;:k6`?6=,8>j6;64n06:>d=4`85<>h6<00i76g:a;29 42f2?20b<:6:b98m0?=83.:8l498:l20<47>5$06b>3>26h54i4594?"6488e?>o2>3:1(<:n:7:8j42>28:07d;::18'51g=>11e=9751098m02=83.:8l498:l20<<6:21b9>4?:%37e?0?3g;?57?<;:k66?6=,8>j6;64n06:>42<3`?:6=4+15c92==i9=31=854i6294?"648822>=n>o0;6)?;a;4;?k7313;<76g9e;29 42f2?20b<:6:0:8?l0c290/=9o5699m51?=9010e;m50;&20d<102d:844>a:9j2g<72-;?m787;o37=?7e32c=m7>5$06b>3>265<#9=k1:55a15;95a=4`85<>h6<00:i65f5183>!73i3<37c?;9;3e?>{e9?81<7ll:183!72m3;?o6F>759K5352t.:884>bg9m0`<53g>m6?5abe83?kba291/in4je:&f`?cb3-l:6>5+f380?!`42:1/j94<;%d6>6=#n?087)h8:29'b=<43-l26>5+f`80?!`e2:1/jn4<;%dg>6=#nl087)hi:29'556=;2.:<<4<;%336?5<,8:86>5+11697>"68<087)??6;18 4602:1/==653:&24<<43-;;m7=4$02a>6=#99i1?6*>0e80?!77m390(<>i:29'546=;2.:=<4<;%326?5<,8;86>5+10697>"69<087)?>6;18 4702:1/=<653:&25<<43-;:m7=4$03a>6=#98i1?6*>1e80?!76m390(<4<;%316?5<,8886>5+13697>"6:<087)?=6;18 4402:1/=?653:&26<<43-;9m7=4$00a>6=#9;i1?6*>2e80?!75m390(<5+12697>"6;<087)?<6;18 4502:1/=>653:&27<<53-;8m7<4$01a>4233-;>=7?:d:&217<4>2.:9>4<6:&213<4<2.:9:4>589'50g=:2.:9o4=;%345?7082.:;?4>719j51b=831b?h4?::kff?6=3`;><7>5;h60>5<n6=44i06e>5<!73i33>7c?;9;28?l?3290/=9o5949m51?=921b5>4?:%37e??23g;?57<4;h;1>5<#9=k1585a15;97>=n9?k1<7*>4`822<=i9=31<65f17:94?"6=n9?=1<7*>4`822<=i9=31>65f17494?"6=hj<0;6)?;a;`7?k7313:07bl<:18'51g=j=1e=9751:9lf4<72-;?m7l;;o37=?4<3fh;6=4+15c9f1=i9=31?65`ag83>!73i3h?7c?;9;68?jgb290/=9o5b59m51?==21dmi4?:%37e?d33g;?5784;nc`>5<#9=k1n95a15;93>=hik0;6)?;a;`7?k7313207bon:18'51g=j=1e=9759:9le<<72-;?m7l;;o37=?g<3fk36=4+15c9f1=i9=31n65`a783>!73i3h?7c?;9;a8?jg2290/=9o5b59m51?=l21dm94?:%37e?d33g;?57k4;nc0>5<#9=k1n95a15;9b>=hi;0;6)?;a;`7?k7313;;76an1;29 42f2k>0b<:6:038?jg7290/=9o5b59m51?=9;10c4h50;&20d3:9l=`<72-;?m7l;;o37=?7332e2h7>5$06b>g226<;4;n``>5<#9=k1n95a15;953=4`8a0>h6<00:;65`b`83>!73i3h?7c?;9;3;?>ie13:1(<:n:c68j42>28307bl7:18'51g=j=1e=9751`98kg1=83.:8l4m4:l20<<6j21dn;4?:%37e?d33g;?57?l;:ma6?6=,8>j6o:4n06:>4b<3fk<6=4+15c9f1=i9=31=h54o8a94?"64882b>=n9k0;6)?;a;3b?k7313:07d?6:18'51g=9h1e=9751:9j5=<72-;?m7?n;o37=?4<3`;<6=4+15c95d=i9=31?65f2583>!73i3;j7c?;9;68?l44290/=9o51`9m51?==21b>?4?:%37e?7f3g;?5784;h02>5<#9=k1=l5a15;93>=n:90;6)?;a;3b?k7313207d?i:18'51g=9h1e=9759:9j5`<72-;?m7?n;o37=?g<3`;o6=4+15c95d=i9=31n65f1b83>!73i3;j7c?;9;a8?l71290/=9o51`9m51?=l21b>l4?:%37e?4>3g;?57>4;h0;>5<#9=k1>45a15;95>=n:>0;6)?;a;0:?k7313807d<9:18'51g=:01e=9753:9j76<72-;?m7<6;o37=?2<3`996=4+15c96<=i9=31965f3083>!73i3827c?;9;48?l57290/=9o5289m51?=?21b>k4?:%37e?4>3g;?5764;h0f>5<#9=k1>45a15;9=>=n:m0;6)?;a;0:?k7313k07d6=4+15c96<=i9=31h65f8`83>!73i3227c?;9;28?l>?290/=9o5889m51?=921b4;4?:%37e?>>3g;?57<4;h:6>5<#9=k1445a15;97>=n0=0;6)?;a;::?k7313>07d6<:18'51g=001e=9755:9j<7<72-;?m766;o37=?0<3`2:6=4+15c9<<=i9=31;65f8183>!73i3227c?;9;:8?l1a290/=9o5889m51?=121b;h4?:%37e?>>3g;?57o4;h5g>5<#9=k1445a15;9f>=n?k0;6)?;a;::?k7313i07d9n:18'51g=001e=975d:9j3<<72-;?m766;o37=?c<3`=36=4+15c9<<=i9=31j65f7683>!73i3227c?;9;33?>o0>3:1(<:n:9;8j42>28;07d9::18'51g=001e=9751398m22=83.:8l479:l20<<6;21b;>4?:%37e?>>3g;?57?;;:k46?6=,8>j6574n06:>43<3`3:6=4+15c9<<=i9=31=;54i8294?"648823>=n0o0;6)?;a;::?k7313;376g7e;29 42f2130b<:6:0;8?l>c290/=9o5889m51?=9h10e5m50;&20db:9j5$06b>=?265<#9=k1445a15;95`=;1<7*>4`8;=>h6<00:j65`e583>!73i3o87c?;9;28?jc5290/=9o5e29m51?=921di<4?:%37e?c43g;?57<4;ng3>5<#9=k1i>5a15;97>=n1k0;6)?;a;;b?k7313:07d76:18'51g=1h1e=9751:9j==<72-;?m77n;o37=?4<3`3<6=4+15c9=d=i9=31?65`e883>!73i3o37c?;9;28?jc0290/=9o5e99m51?=921di;4?:%37e?c?3g;?57<4;ng6>5<#9=k1i55a15;97>=hl>0;6)?;a;f5?k7313:07bj::18'51g=l?1e=9751:9l`6<72-;?m7j9;o37=?4<3fn96=4+15c9`3=i9=31?65`d083>!73i3n=7c?;9;68?jb7290/=9o5d79m51?==21dok4?:%37e?b13g;?5784;naf>5<#9=k1h;5a15;93>=hkm0;6)?;a;f5?k7313207bml:18'51g=l?1e=9759:9lgg<72-;?m7j9;o37=?g<3fij6=4+15c9`3=i9=31n65`c983>!73i3n=7c?;9;a8?je0290/=9o5d79m51?=l21do;4?:%37e?b13g;?57k4;na6>5<#9=k1h;5a15;9b>=hk=0;6)?;a;f5?k7313;;76al3;29 42f2m<0b<:6:038?je5290/=9o5d79m51?=9;10cn?50;&20d2d:844>3:9lg5<72-;?m7j9;o37=?7332eij7>5$06b>a026<;4;nff>5<#9=k1h;5a15;953=4`8g2>h6<00:;65`db83>!73i3n=7c?;9;3;?>icj3:1(<:n:e48j42>28307bjn:18'51g=l?1e=9751`98ka?=83.:8l4k6:l20<<6j21dh54?:%37e?b13g;?57?l;:mg0?6=,8>j6i84n06:>4b<3fi26=4+15c9`3=i9=31=h54ocg94?"64882b>=n9?l1<7*>4`822`=i9=31<65f17f94?"6=n9?i1<7*>4`822`=i9=31>65f17`94?"6=n>00;6)?;a;4;?k7313:07d88:18'51g=>11e=9751:9j20<72-;?m787;o37=?4<3`!73i3<37c?;9;68?l05290/=9o5699m51?==21b:<4?:%37e?0?3g;?5784;h43>5<#9=k1:55a15;93>=n=o0;6)?;a;4;?k7313207d;j:18'51g=>11e=9759:9j1a<72-;?m787;o37=?g<3`?h6=4+15c92==i9=31n65f5`83>!73i3<37c?;9;a8?l3>290/=9o5699m51?=l21b954?:%37e?0?3g;?57k4;h74>5<#9=k1:55a15;9b>=n=?0;6)?;a;4;?k7313;;76g:5;29 42f2?20b<:6:038?l33290/=9o5699m51?=9;10e8=50;&20d<102d:844>3:9j17<72-;?m787;o37=?7332c>=7>5$06b>3>26<;4;h53>5<#9=k1:55a15;953=4`85<>h6<00:;65f6d83>!73i3<37c?;9;3;?>o1l3:1(<:n:7:8j42>28307d8l:18'51g=>11e=9751`98m3d=83.:8l498:l20<<6j21b:l4?:%37e?0?3g;?57?l;:k52?6=,8>j6;64n06:>4b<3`?i6=4+15c92==i9=31=h54i4294?"64882b>=z{8>:6=4:{<342?73>27:9k4jb:?2255g822>;6=o09963>5g85=>;6=o0=;63>5g851>;6=o0=863>5g857>;6=o0=>63>5g855>;6=o0=<63>5g86b>;6=o0>i63>5g86`>;6=o0>o63>5g86e>;6=o0>563>5g86<>;6=o0>;63>5g862>;6=o0>963>5g860>;6=o0>?63>5g866>;6=o0>=63>5g844>;6=o0=j63>5g85a>;6=o0=h63>5g85g>;6=o0=n63>5g85e>;6=o0=:63>5g8;e>;6=o03463>5g8;2>;6=o03963>5g8;0>;6=o03?63>5g8;6>;6=o03=63>5g8;4>;6=o05g84a>;6=o05g84f>;6=o05g84=>;6=o0<463>5g843>;6=o0<:63>5g841>;6=o0<863>5g847>;6=o0<>63>5g8:5>;6=o02<63>5g8;b>;6=o03i63>5g8;`>;6=o03o63>5g8;f>;6=o03;63>5g84g>;6=o0<=63>5g8:2>;6=o02863>5g8:7>;6=o02>63>5g8:f>;6=o02563>5g8:<>;6=o02;63>5g822c=:940d34;>j7?9b:?21c<6m70?:f;364>;6>90::63>61811>;6>90=563>61853>;6>90=963>61850>;6>90=?63>61856>;6>90==63>61854>;6>90>j63>6186a>;6>90>h63>6186g>;6>90>m63>6186=>;6>90>463>61863>;6>90>:63>61861>;6>90>863>61867>;6>90>>63>61865>;6>90<<63>6185b>;6>90=i63>6185`>;6>90=o63>6185f>;6>90=m63>61852>;6>903m63>618;<>;6>903:63>618;1>;6>903863>618;7>;6>903>63>618;5>;6>903<63>6184b>;6>906184`>;6>906184e>;6>90<563>6184<>;6>90<;63>61842>;6>90<963>61840>;6>9061846>;6>902=63>618:4>;6>903j63>618;a>;6>903h63>618;g>;6>903n63>618;3>;6>9061845>;6>902:63>618:0>;6>902?63>618:6>;6>902n63>618:=>;6>902463>618:3>;6>90::k52172953b<58<;6<8l;<354?71j27::=4>4e9>536=9=o01<8?:06e?87183;><63>60822>;6>809963>6085=>;6>80=;63>60851>;6>80=863>60857>;6>80=>63>60855>;6>80=<63>6086b>;6>80>i63>6086`>;6>80>o63>6086e>;6>80>563>6086<>;6>80>;63>60862>;6>80>963>60860>;6>80>?63>60866>;6>80>=63>60844>;6>80=j63>6085a>;6>80=h63>6085g>;6>80=n63>6085e>;6>80=:63>608;e>;6>803463>608;2>;6>803963>608;0>;6>803?63>608;6>;6>803=63>608;4>;6>806084a>;6>806084f>;6>806084=>;6>80<463>60843>;6>80<:63>60841>;6>80<863>60847>;6>80<>63>608:5>;6>802<63>608;b>;6>803i63>608;`>;6>803o63>608;f>;6>803;63>6084g>;6>80<=63>608:2>;6>802863>608:7>;6>802>63>608:f>;6>802563>608:<>;6>802;63>60822c=:9?;1=;j4=042>40d34;==7?9b:?224<6m70?91;364>;6>;0::63>63811>;6>;0=563>63853>;6>;0=963>63850>;6>;0=?63>63856>;6>;0==63>63854>;6>;0>j63>6386a>;6>;0>h63>6386g>;6>;0>m63>6386=>;6>;0>463>63863>;6>;0>:63>63861>;6>;0>863>63867>;6>;0>>63>63865>;6>;0<<63>6385b>;6>;0=i63>6385`>;6>;0=o63>6385f>;6>;0=m63>63852>;6>;03m63>638;<>;6>;03:63>638;1>;6>;03863>638;7>;6>;03>63>638;5>;6>;03<63>6384b>;6>;06384`>;6>;06384e>;6>;0<563>6384<>;6>;0<;63>63842>;6>;0<963>63840>;6>;063846>;6>;02=63>638:4>;6>;03j63>638;a>;6>;03h63>638;g>;6>;03n63>638;3>;6>;063845>;6>;02:63>638:0>;6>;02?63>638:6>;6>;02n63>638:=>;6>;02463>638:3>;6>;0::k52170953b<58<96<8l;<356?71j27::?4>4e9>534=9=o01<8=:06e?871:3;><6s|1c694?4|V8h?70?:f;`f?xu6j<0;6?uQ1c78943a2j30q~?m6;296~X6j?16=;>5bd9~w4d02909wS?m7:?225f?52z\2fd=:9?81nh5rs0``>5<5sW;io63>638`=>{t9hk1<7;t^0cb?872n3>870?90;60?87193>870?92;60?xu6jm0;68uQ1cf8943a2lk01<8?:dc894062lk01<8=:dc8yv7f13:19vP>a89>50`=;l16=;>53d9>537=;l16=;<53d9~w4>d290>wS?7c:?21c<5j27::=4=b:?224<5j27::?4=b:p5<7=83?pR<7>;<36b?4d34;=<777b<58<;6?j4=042>7b<58<96?j4}r3:7?6==rT:5>5214d96`=:9?:1>h5217396`=:9?81>h5rs0;7>5<2sW;2863>5g81b>;6>909j63>6081b>;6>;09j6s|18794?3|V83>70?:f;13?871839;70?91;13?871:39;7p}>9783>0}Y90<01<;i:23894072:;01<8>:23894052:;0q~?67;291~X61>16=8h5339>536=;;16=;?5339>534=;;1v<77:186[7>027:9k4<3:?225<4;27::<4<3:?227<4;2wx=4750;7xZ4?>34;>j7<9;<354?4134;==7<9;<356?413ty:4i4?:4y]5=b<58?m6?94=043>71<58<:6?94=041>7155z\2<`=:955217296==:9?;1>55217096==z{83;6=4:{_3:4>;6=o09m63>6181e>;6>809m63>6381e>{t9hh1<7ab83>7}Y9hi01<;i:4`8yv7fl3:1>vP>ae9>536==91v;6>;0>n6s|16g94?3|V8=n70?:f;3`?87183;h70?91;3`?871:3;h7p}>8283>0}Y91901<;i:0f8940728n01<8>:0f8940528n0q~?74;291~X60=16=8h51d9>536=9l16=;?51d9>534=9l1v<6::186[7?=27:9k4>f:?225<6n27::<4>f:?227<6n2wx=5850;7xZ4>134;>j777<58<:6??4=041>7755z\2<==:9?52172967=:9?;1>?52170967=z{8226=4:{_3;=>;6=o09?63>61817>;6>809?63>63817>{t91k1<7;t^0:b?872n38?70?90;07?871938?70?92;07?xu60k0;68uQ19`8943a28=01<8?:058940628=01<8=:058yv70n3:19vP>7g9>50`=9116=;>5199>537=9116=;<5199~w4>7290>wS?70:?21c<6127::=4>9:?224<6127::?4>9:p5=4=83?pR<6=;<36b?7e34;=<7?m;<355?7e34;=>7?m;|q2g1<728;pR699>50`=9?=01<;i:045?87183;=m63>61822==:9?:1=;94=043>40134;==7?9a:?224<6>116=;?51758940628<=70?92;35e>;6>;0::5521709531<58<96<89;|m767=83;pD<8<;|l077<728qC=;=4}o107?6=9rB::>5rn217>5<6sA;=?6sa32794?7|@8<87p`<3783>4}O9?90qc=<7;295~N6>:1vb>=7:182M71;2we?>750;3xL4043td8?l4?:0yK53551zJ226=zf:9h6=4>{I357>{i;:n1<7?tH040?xh4;l0;6629~j627290:wE?93:m717=83;pD<8<;|l007<728qC=;=4}o177?6=9rB::>5rn267>5<6sA;=?6sa35794?7|@8<87p`<4783>4}O9?90qc=;7;295~N6>:1vb>:7:182M71;2we?9750;3xL4043td88l4?:0yK53551zJ226=zf:>h6=4>{I357>{i;=n1<7?tH040?xh4629~j637290:wE?93:m707=83;pD<8<;|l017<728qC=;=4}o167?6=9rB::>5rn277>5<6sA;=?6sa34794?7|@8<87p`<5783>4}O9?90qc=:7;295~N6>:1vb>;7:182M71;2we?8750;3xL4043td89l4?:0yK535n7>51zJ226=zf:?h6=4>{I357>{i;629~j607290:wE?93:~yxFGKr92=7 13, + c_addrb_width => 13, + c_algorithm => 1, + c_axi_id_width => 4, + c_axi_slave_type => 0, + c_axi_type => 1, + c_byte_size => 9, + c_common_clk => 0, + c_default_data => "0", + c_disable_warn_bhv_coll => 0, + c_disable_warn_bhv_range => 0, + c_enable_32bit_address => 0, + c_family => "spartan6", + c_has_axi_id => 0, + c_has_ena => 1, + c_has_enb => 0, + c_has_injecterr => 0, + c_has_mem_output_regs_a => 0, + c_has_mem_output_regs_b => 0, + c_has_mux_output_regs_a => 0, + c_has_mux_output_regs_b => 0, + c_has_regcea => 0, + c_has_regceb => 0, + c_has_rsta => 0, + c_has_rstb => 0, + c_has_softecc_input_regs_a => 0, + c_has_softecc_output_regs_b => 0, + c_init_file => "BlankString", + c_init_file_name => "no_coe_file_loaded", + c_inita_val => "0", + c_initb_val => "0", + c_interface_type => 0, + c_load_init_file => 0, + c_mem_type => 1, + c_mux_pipeline_stages => 0, + c_prim_type => 1, + c_read_depth_a => 8192, + c_read_depth_b => 8192, + c_read_width_a => 8, + c_read_width_b => 8, + c_rst_priority_a => "CE", + c_rst_priority_b => "CE", + c_rst_type => "SYNC", + c_rstram_a => 0, + c_rstram_b => 0, + c_sim_collision_check => "ALL", + c_use_bram_block => 0, + c_use_byte_wea => 0, + c_use_byte_web => 0, + c_use_default_data => 0, + c_use_ecc => 0, + c_use_softecc => 0, + c_wea_width => 1, + c_web_width => 1, + c_write_depth_a => 8192, + c_write_depth_b => 8192, + c_write_mode_a => "WRITE_FIRST", + c_write_mode_b => "WRITE_FIRST", + c_write_width_a => 8, + c_write_width_b => 8, + c_xdevicefamily => "spartan6" + ); +-- synthesis translate_on +BEGIN +-- synthesis translate_off +U0 : wrapped_vram + PORT MAP ( + clka => clka, + ena => ena, + wea => wea, + addra => addra, + dina => dina, + clkb => clkb, + addrb => addrb, + doutb => doutb + ); +-- synthesis translate_on + +END vram_a; diff --git a/cores/KypSpectrum/keyboard.vhd b/cores/KypSpectrum/keyboard.vhd index a26304c..679fe7a 100644 --- a/cores/KypSpectrum/keyboard.vhd +++ b/cores/KypSpectrum/keyboard.vhd @@ -4,17 +4,19 @@ library ieee; entity keyboard is port ( + boot : out std_logic; + reset : out std_logic; + nmi : out std_logic; received : in std_logic; scancode : in std_logic_vector(7 downto 0); rows : in std_logic_vector(7 downto 0); - cols : out std_logic_vector(4 downto 0); - reset : out std_logic + cols : out std_logic_vector(4 downto 0) ); end; architecture behavioral of keyboard is - type matrix is array (53 downto 0) of std_logic; + type matrix is array (57 downto 0) of std_logic; signal keys : matrix := (others => '1'); signal pressed : std_logic := '0'; @@ -93,6 +95,11 @@ begin when x"49" => keys(45) <= pressed; -- . when x"41" => keys(46) <= pressed; -- , + when x"03" => keys(54) <= pressed; -- F5 + when x"78" => keys(57) <= pressed; -- F11 + when x"07" => keys(55) <= pressed; -- F12 + when x"76" => keys(56) <= pressed; -- ESCAPE + when others => null; end case; else @@ -113,66 +120,70 @@ begin end process; cols(0) <= ( keys( 0) or rows(0) ) and -- CS - ( keys( 5) or rows(1) ) and -- A - ( keys(10) or rows(2) ) and -- Q - ( keys(15) or rows(3) ) and -- 1 - ( keys(20) or rows(4) ) and -- 0 - ( keys(25) or rows(5) ) and -- P - ( keys(30) or rows(6) ) and -- ENTER - ( keys(35) or rows(7) ) and -- SPACE - ( keys(43) or rows(0) ) and -- DELETE(CS) - ( keys(43) or rows(4) ) and -- DELETE(0) - ( keys(50) or rows(0) ) and -- UP(CS) - ( keys(51) or rows(0) ) and -- DOWN(CS) - ( keys(52) or rows(0) ) and -- LEFT(CS) - ( keys(53) or rows(0) ); -- RIGHT(CS) + ( keys( 5) or rows(1) ) and -- A + ( keys(10) or rows(2) ) and -- Q + ( keys(15) or rows(3) ) and -- 1 + ( keys(20) or rows(4) ) and -- 0 + ( keys(25) or rows(5) ) and -- P + ( keys(30) or rows(6) ) and -- ENTER + ( keys(35) or rows(7) ) and -- SPACE + ( keys(43) or rows(0) ) and -- DELETE(CS) + ( keys(43) or rows(4) ) and -- DELETE(0) + ( keys(50) or rows(0) ) and -- UP(CS) + ( keys(51) or rows(0) ) and -- DOWN(CS) + ( keys(52) or rows(0) ) and -- LEFT(CS) + ( keys(53) or rows(0) ) and -- RIGHT(CS) + ( keys(56) or rows(0) ) and -- ESC + ( keys(56) or rows(7) ); -- ESC cols(1) <= ( keys( 1) or rows(0) ) and -- Z - ( keys( 6) or rows(1) ) and -- S - ( keys(11) or rows(2) ) and -- W - ( keys(16) or rows(3) ) and -- 2 - ( keys(21) or rows(4) ) and -- 9 - ( keys(26) or rows(5) ) and -- O - ( keys(31) or rows(6) ) and -- L - ( keys(36) or rows(7) ) and -- SS - ( keys(44) or rows(7) ) and -- -(SS) - ( keys(45) or rows(7) ) and -- .(SS) - ( keys(46) or rows(7) ); -- ,(SS) + ( keys( 6) or rows(1) ) and -- S + ( keys(11) or rows(2) ) and -- W + ( keys(16) or rows(3) ) and -- 2 + ( keys(21) or rows(4) ) and -- 9 + ( keys(26) or rows(5) ) and -- O + ( keys(31) or rows(6) ) and -- L + ( keys(36) or rows(7) ) and -- SS + ( keys(44) or rows(7) ) and -- -(SS) + ( keys(45) or rows(7) ) and -- .(SS) + ( keys(46) or rows(7) ); -- ,(SS) cols(2) <= ( keys( 2) or rows(0) ) and -- X - ( keys( 7) or rows(1) ) and -- D - ( keys(12) or rows(2) ) and -- E - ( keys(17) or rows(3) ) and -- 3 - ( keys(22) or rows(4) ) and -- 8 - ( keys(27) or rows(5) ) and -- I - ( keys(32) or rows(6) ) and -- K - ( keys(37) or rows(7) ) and -- M - ( keys(45) or rows(7) ) and -- .(M) - ( keys(53) or rows(4) ); -- RIGHT(8) + ( keys( 7) or rows(1) ) and -- D + ( keys(12) or rows(2) ) and -- E + ( keys(17) or rows(3) ) and -- 3 + ( keys(22) or rows(4) ) and -- 8 + ( keys(27) or rows(5) ) and -- I + ( keys(32) or rows(6) ) and -- K + ( keys(37) or rows(7) ) and -- M + ( keys(45) or rows(7) ) and -- .(M) + ( keys(53) or rows(4) ); -- RIGHT(8) cols(3) <= ( keys( 3) or rows(0) ) and -- C - ( keys( 8) or rows(1) ) and -- F - ( keys(13) or rows(2) ) and -- R - ( keys(18) or rows(3) ) and -- 4 - ( keys(23) or rows(4) ) and -- 7 - ( keys(28) or rows(5) ) and -- U - ( keys(33) or rows(6) ) and -- J - ( keys(38) or rows(7) ) and -- N - ( keys(44) or rows(6) ) and -- -(J) - ( keys(46) or rows(7) ) and -- ,(N) - ( keys(50) or rows(4) ); -- UP(7) + ( keys( 8) or rows(1) ) and -- F + ( keys(13) or rows(2) ) and -- R + ( keys(18) or rows(3) ) and -- 4 + ( keys(23) or rows(4) ) and -- 7 + ( keys(28) or rows(5) ) and -- U + ( keys(33) or rows(6) ) and -- J + ( keys(38) or rows(7) ) and -- N + ( keys(44) or rows(6) ) and -- -(J) + ( keys(46) or rows(7) ) and -- ,(N) + ( keys(50) or rows(4) ); -- UP(7) cols(4) <= ( keys( 4) or rows(0) ) and -- V - ( keys( 9) or rows(1) ) and -- G - ( keys(14) or rows(2) ) and -- T - ( keys(19) or rows(3) ) and -- 5 - ( keys(24) or rows(4) ) and -- 6 - ( keys(29) or rows(5) ) and -- Y - ( keys(34) or rows(6) ) and -- H - ( keys(39) or rows(7) ) and -- B - ( keys(52) or rows(3) ) and -- LEFT(5) - ( keys(51) or rows(4) ); -- DOWN(7) + ( keys( 9) or rows(1) ) and -- G + ( keys(14) or rows(2) ) and -- T + ( keys(19) or rows(3) ) and -- 5 + ( keys(24) or rows(4) ) and -- 6 + ( keys(29) or rows(5) ) and -- Y + ( keys(34) or rows(6) ) and -- H + ( keys(39) or rows(7) ) and -- B + ( keys(52) or rows(3) ) and -- LEFT(5) + ( keys(51) or rows(4) ); -- DOWN(7) - reset <= not ((keys(40) and keys(47)) or (keys(41) and keys(48)) or (keys(42) and keys(49))); + nmi <= keys(54); + boot <= keys(57); + reset <= keys(55) and ((keys(40) and keys(47)) or (keys(41) and keys(48)) or (keys(42) and keys(49))); end; diff --git a/cores/KypSpectrum/keyboard.zxuno.vhd b/cores/KypSpectrum/keyboard.zxuno.vhd deleted file mode 100644 index 1371cb1..0000000 --- a/cores/KypSpectrum/keyboard.zxuno.vhd +++ /dev/null @@ -1,356 +0,0 @@ -library ieee; - use ieee.std_logic_1164.all; - use ieee.numeric_std.all; - -library work; - use work.mapa_es.all; - -entity keyboard is - port - ( - clock : in std_logic; - ps2c : in std_logic; - ps2d : in std_logic; - rows : in std_logic_vector(7 downto 0); - cols : out std_logic_vector(4 downto 0) - ); -end; - -architecture behavioral of keyboard is - - type key_matrix is array (7 downto 0) of std_logic_vector(4 downto 0); - signal keys : key_matrix; - signal pressed : std_logic; --- signal isctrl : std_logic; - signal isshift : std_logic; --- signal isalt : std_logic; - signal isextend : std_logic; - signal lastclk : std_logic_vector(4 downto 0); - signal bit_count : unsigned (3 downto 0); - signal shiftreg : std_logic_vector(8 downto 0); - signal parity : std_logic; - -begin - - process(clock) - begin - if rising_edge(clock) then - --- rst <= '1'; --- nmi <= '1'; --- mrst <= '1'; - lastclk <= lastclk(3 downto 0) & ps2c; - - if lastclk = "11100" and ps2c = '0' then -- detector de flanco de bajada de PS2CLK - if bit_count = 0 then - parity <= '0'; - if ps2d = '0' then bit_count <= bit_count+1; end if; - else - if bit_count < 10 then - bit_count <= bit_count+1; - shiftreg <= ps2d&shiftreg(8 downto 1); - parity <= parity xor ps2d; - elsif ps2d = '1' then - bit_count <= (others => '0'); - if parity = '1' then -- nueva pulsacion completa en shiftreg. - pressed <= '1'; --- scancode <= shiftreg(7 downto 0); - - if isextend = '1' and shiftreg(7 downto 0) = KEY_RELEASED then isextend <= '1'; else isextend <= '0'; end if; -- procesar la secuencia E0 F0 key - case shiftreg(7 downto 0) is -- detectar secuencias especiales: tecla soltada y tecla extendida - when KEY_RELEASED => pressed <= '0'; - when KEY_EXTENDED => isextend <= '1'; - when others => - end case; - - if isextend='0' then -- teclas no extendidas - case shiftreg(7 downto 0) is - - when KEY_LSHIFT | - KEY_RSHIFT => isshift <= pressed; --- when KEY_ALTI => isalt <= pressed; --- joy(4) <= pressed; -- dato entregado por el joystick - when KEY_CTRLI => keys(0)(0) <= pressed; -- Ctrl izquierdo: (CAPS SHIFT) --- isctrl <= pressed; --- joy(4) <= pressed; -- dato entregado por el joystick - when KEY_Z => if isshift='1' then - keys(0)(0) <= pressed; - end if; - keys(0)(1) <= pressed; -- Z - when KEY_X => if isshift='1' then - keys(0)(0) <= pressed; - end if; - keys(0)(2) <= pressed; -- X - when KEY_C => if isshift='1' then - keys(0)(0) <= pressed; - end if; - keys(0)(3) <= pressed; -- C - when KEY_V => if isshift='1' then - keys(0)(0) <= pressed; - end if; - keys(0)(4) <= pressed; -- V - when KEY_A => if isshift='1' then - keys(0)(0) <= pressed; - end if; - keys(1)(0) <= pressed; -- A - when KEY_S => if isshift='1' then - keys(0)(0) <= pressed; - end if; - keys(1)(1) <= pressed; -- S - when KEY_D => if isshift='1' then - keys(0)(0) <= pressed; - end if; - keys(1)(2) <= pressed; -- D - when KEY_F => if isshift='1' then - keys(0)(0) <= pressed; - end if; - keys(1)(3) <= pressed; -- F - when KEY_G => if isshift='1' then - keys(0)(0) <= pressed; - end if; - keys(1)(4) <= pressed; -- G - when KEY_Q => if isshift='1' then - keys(0)(0) <= pressed; - end if; - keys(2)(0) <= pressed; -- Q - when KEY_W => if isshift='1' then - keys(0)(0) <= pressed; - end if; - keys(2)(1) <= pressed; -- W - when KEY_E => if isshift='1' then - keys(0)(0) <= pressed; - end if; - keys(2)(2) <= pressed; -- E - when KEY_R => if isshift='1' then - keys(0)(0) <= pressed; - end if; - keys(2)(3) <= pressed; -- R - when KEY_T => if isshift='1' then - keys(0)(0) <= pressed; - end if; - keys(2)(4) <= pressed; -- T - when KEY_1 => if isshift='0' then - keys(3)(0) <= pressed; -- 1 - else - keys(7)(1) <= pressed; - keys(3)(0) <= pressed; -- ! - end if; - when KEY_2 => if isshift='0' then - keys(3)(1) <= pressed; -- 2 - else - keys(7)(1) <= pressed; - keys(5)(0) <= pressed; -- " - end if; - when KEY_3 => if isshift='0' then - keys(3)(2) <= pressed; -- 3 - else - keys(7)(1) <= pressed; - keys(3)(2) <= pressed; -- # - end if; - when KEY_4 => if isshift='0' then - keys(3)(3) <= pressed; -- 4 - else - keys(7)(1) <= pressed; - keys(3)(3) <= pressed; -- $ - end if; - when KEY_5 => if isshift='0' then - keys(3)(4) <= pressed; -- 5 - else - keys(7)(1) <= pressed; - keys(3)(4) <= pressed; -- $ - end if; - when KEY_0 => if isshift='0' then - keys(4)(0) <= pressed; -- 0 - else - keys(7)(1) <= pressed; - keys(6)(1) <= pressed; -- = - end if; - when KEY_9 => if isshift='0' then - keys(4)(1) <= pressed; -- 9 - else - keys(7)(1) <= pressed; - keys(4)(1) <= pressed; -- ) - end if; - when KEY_8 => if isshift='0' then - keys(4)(2) <= pressed; -- 8 - else - keys(7)(1) <= pressed; - keys(4)(2) <= pressed; -- ( - end if; - when KEY_7 => if isshift='0' then - keys(4)(3) <= pressed; -- 7 - else - keys(7)(1) <= pressed; - keys(0)(4) <= pressed; -- / - end if; - when KEY_6 => if isshift='0' then - keys(4)(4) <= pressed; -- 6 - else - keys(7)(1) <= pressed; - keys(4)(4) <= pressed; -- & - end if; - when KEY_P => if isshift='1' then - keys(0)(0) <= pressed; - end if; - keys(5)(0) <= pressed; -- P - when KEY_O => if isshift='1' then - keys(0)(0) <= pressed; - end if; - keys(5)(1) <= pressed; -- O - when KEY_I => if isshift='1' then - keys(0)(0) <= pressed; - end if; - keys(5)(2) <= pressed; -- I - when KEY_U => if isshift='1' then - keys(0)(0) <= pressed; - end if; - keys(5)(3) <= pressed; -- U - when KEY_Y => if isshift='1' then - keys(0)(0) <= pressed; - end if; - keys(5)(4) <= pressed; -- Y - when KEY_ENTER => keys(6)(0) <= pressed; -- ENTER - when KEY_L => if isshift='1' then - keys(0)(0) <= pressed; - end if; - keys(6)(1) <= pressed; -- L - when KEY_K => if isshift='1' then - keys(0)(0) <= pressed; - end if; - keys(6)(2) <= pressed; -- K - when KEY_J => if isshift='1' then - keys(0)(0) <= pressed; - end if; - keys(6)(3) <= pressed; -- J - when KEY_H => if isshift='1' then - keys(0)(0) <= pressed; - end if; - keys(6)(4) <= pressed; -- H - when KEY_SPACE => keys(7)(0) <= pressed; -- SPACE - when KEY_M => if isshift='1' then - keys(0)(0) <= pressed; - end if; - keys(7)(2) <= pressed; -- M - when KEY_N => if isshift='1' then - keys(0)(0) <= pressed; - end if; - keys(7)(3) <= pressed; -- N - when KEY_B => if isshift='1' then - keys(0)(0) <= pressed; - end if; - keys(7)(4) <= pressed; -- B - when KEY_BKSP => keys(0)(0) <= pressed; -- Backspace (Caps 0) - keys(4)(0) <= pressed; --- if isctrl='1' and isalt='1' then --- mrst <= '0'; --- end if; - when KEY_CPSLK => keys(0)(0) <= pressed; -- Caps lock (Caps 2) - keys(3)(1) <= pressed; - when KEY_ESC => keys(0)(0) <= pressed; -- Break (Caps Space) - keys(7)(0) <= pressed; - when KEY_F2 => keys(0)(0) <= pressed; - keys(3)(0) <= pressed; -- EDIT - when KEY_BL => keys(7)(1) <= pressed; - keys(1)(2) <= pressed; -- usado con EXT, da \ - when KEY_APOS => keys(7)(1) <= pressed; - if isshift='0' then - keys(4)(3) <= pressed; -- apostrofe ' - else - keys(0)(3) <= pressed; -- tecla ? - end if; - when KEY_TAB => keys(0)(0) <= pressed; - keys(7)(1) <= pressed; -- modo extendido - when KEY_CORCHA => keys(7)(1) <= pressed; - keys(6)(4) <= pressed; -- simbolo ^ - when KEY_CORCHC => keys(7)(1) <= pressed; - if isshift='0' then - keys(6)(2) <= pressed; -- simbolo + - else - keys(7)(4) <= pressed; -- simbolo * - end if; - when KEY_LLAVA => keys(7)(1) <= pressed; - keys(1)(3) <= pressed; -- llave abierta, con EXT - when KEY_LLAVC => keys(7)(1) <= pressed; - keys(5)(0) <= pressed; -- copyright - when KEY_LT => keys(7)(1) <= pressed; - if isshift='0' then - keys(2)(3) <= pressed; -- símbolo < - else - keys(2)(4) <= pressed; -- símbolo > - end if; - when KEY_COMA => keys(7)(1) <= pressed; - if isshift='0' then - keys(7)(3) <= pressed; -- símbolo , - else - keys(5)(1) <= pressed; -- símbolo ; - end if; - when KEY_PUNTO => keys(7)(1) <= pressed; - if isshift='0' then - keys(7)(2) <= pressed; -- símbolo . - else - keys(0)(1) <= pressed; -- símbolo : - end if; - when KEY_MENOS => keys(7)(1) <= pressed; - if isshift='0' then - keys(6)(3) <= pressed; -- símbolo - - else - keys(4)(0) <= pressed; -- tecla _ (guion bajo) - end if; --- when KEY_F5 => if isctrl='1' and isalt='1' then --- nmi <= '0'; -- NMI --- end if; --- when KEY_KPPUNTO => if isctrl='1' and isalt='1' then --- rst <= '0'; -- reset al hacer ctrl-alt-supr --- end if; --- when KEY_KP4 => joy(1) <= pressed; -- dato entregado por el joystick: izquierda --- when KEY_KP6 => joy(0) <= pressed; -- dato entregado por el joystick: derecha --- when KEY_KP8 => joy(3) <= pressed; -- dato entregado por el joystick: arriba --- when KEY_KP5 => joy(2) <= pressed; -- dato entregado por el joystick: abajo - when others=> null; - - end case; - else -- process extended keys - case shiftreg(7 downto 0) is - - when KEY_CTRLD => keys(7)(1) <= pressed; -- Ctrl derecho -> symbol shift --- isctrl <= pressed; --- joy(4) <= pressed; -- dato entregado por el joystick --- when KEY_ALTGR => keys(0)(0) <= pressed; --- keys(4)(1) <= pressed; -- Modo gráfico --- isalt <= '1'; --- joy(4) <= pressed; -- dato entregado por el joystick - when KEY_LEFT => keys(0)(0) <= pressed; -- Left (Caps 5) - keys(3)(4) <= pressed; - when KEY_DOWN => keys(0)(0) <= pressed; -- Down (Caps 6) - keys(4)(4) <= pressed; - when KEY_UP => keys(0)(0) <= pressed; -- Up (Caps 7) - keys(4)(3) <= pressed; - when KEY_RIGHT => keys(0)(0) <= pressed; -- Right (Caps 8) - keys(4)(2) <= pressed; --- when KEY_SUP => if isctrl='1' and isalt='1' then --- rst <= '0'; -- reset al hacer ctrl-alt-supr --- end if; - when others => null; - - end case; - end if; - end if; - else - bit_count <= (others => '0'); - end if; - end if; - end if; - end if; - end process; - - process(keys, rows) - variable tmp: std_logic; - begin - for i in 0 to 4 loop - tmp := '0'; - for j in 0 to 7 loop tmp := tmp or (keys(j)(i) and not rows(j)); end loop; - cols(i) <= not tmp; - end loop; - end process; - -end; diff --git a/cores/KypSpectrum/make.bat b/cores/KypSpectrum/make.bat deleted file mode 100644 index 671bac2..0000000 --- a/cores/KypSpectrum/make.bat +++ /dev/null @@ -1,9 +0,0 @@ -SET machine=zxpp -SET speed=2 -SET ruta_ucf=papilio -SET ruta_bat=..\ -call %ruta_bat%genxst.bat -rem call %ruta_bat%generar.bat v2_v3 -rem call %ruta_bat%generar.bat v4 -rem call %ruta_bat%generar.bat Ap -call %ruta_bat%generar.bat Pa diff --git a/cores/KypSpectrum/mixer.vhd b/cores/KypSpectrum/mixer.vhd index 0afe674..cf1349d 100644 --- a/cores/KypSpectrum/mixer.vhd +++ b/cores/KypSpectrum/mixer.vhd @@ -7,10 +7,9 @@ entity mixer is ( clock : in std_logic; reset : in std_logic; - speaker : in std_logic; ear : in std_logic; mic : in std_logic; - ay : in std_logic_vector(7 downto 0); + speaker : in std_logic; l : out std_logic; r : out std_logic ); @@ -18,35 +17,45 @@ end; architecture behavioral of mixer is - signal tmp : std_logic_vector(2 downto 0); + signal src : std_logic_vector(2 downto 0); signal ula : std_logic_vector(7 downto 0); - signal sum : std_logic_vector(9 downto 0); - signal mix : std_logic_vector(9 downto 0); - signal o : std_logic; - + signal mix : std_logic_vector(7 downto 0); + begin - tmp <= ear&mic&speaker; - ula <= x"11" when tmp = "000" - else x"24" when tmp = "010" - else x"B8" when tmp = "001" - else x"C0" when tmp = "011" - else x"16" when tmp = "100" - else x"30" when tmp = "110" - else x"F4" when tmp = "101" + process(clock) + variable tmp : std_logic_vector(3 downto 0) := (others => '0'); + begin + if falling_edge(clock) + then + tmp := tmp+1; + if tmp = 0 then mix <= ula; else mix <= (others => '0'); end if; + end if; + end process; + + src <= ear&mic&speaker; + ula <= x"11" when src = "000" + else x"24" when src = "010" + else x"B8" when src = "001" + else x"C0" when src = "011" + else x"16" when src = "100" + else x"30" when src = "110" + else x"F4" when src = "101" else x"FF"; - sum <= ("00"&ay)+("00"&ula); - mix <= sum when rising_edge(clock); - - Udac: entity work.dac port map + UdacL: entity work.dac port map ( clock => clock, reset => reset, i => mix, - o => o + o => l + ); + UdacR: entity work.dac port map + ( + clock => clock, + reset => reset, + i => mix, + o => r ); - l <= o; - r <= o; end; diff --git a/cores/KypSpectrum/multiboot.v b/cores/KypSpectrum/multiboot.v new file mode 100644 index 0000000..f8346f4 --- /dev/null +++ b/cores/KypSpectrum/multiboot.v @@ -0,0 +1,307 @@ +module multiboot ( + input wire clk_icap, // WARNING: this clock must not be greater than 20MHz (50ns period) + input wire mrst_n + ); + + reg [4:0] q = 5'b00000; + reg reboot_ff = 1'b0; + always @(posedge clk_icap) begin + q[0] <= ~mrst_n; + q[1] <= q[0]; + q[2] <= q[1]; + q[3] <= q[2]; + q[4] <= q[3]; + reboot_ff <= (q[4] && (!q[3]) && (!q[2]) && (!q[1]) ); + end + + multiboot_spartan6 hacer_multiboot ( + .CLK(clk_icap), + .MBT_RESET(1'b0), + .MBT_REBOOT(reboot_ff), + .spi_addr(24'h000000) + ); +endmodule + +module multiboot_spartan6 ( + input wire CLK, + input wire MBT_RESET, + input wire MBT_REBOOT, + input wire [23:0] spi_addr + ); + +reg [15:0] icap_din; +reg icap_ce; +reg icap_wr; + +reg [15:0] ff_icap_din_reversed; +reg ff_icap_ce; +reg ff_icap_wr; + + + ICAP_SPARTAN6 ICAP_SPARTAN6_inst ( + + .CE (ff_icap_ce), // Clock enable input + .CLK (CLK), // Clock input + .I (ff_icap_din_reversed), // 16-bit data input + .WRITE (ff_icap_wr) // Write input + ); + + +// ------------------------------------------------- +// -- State Machine for ICAP_SPARTAN6 MultiBoot -- +// ------------------------------------------------- + + +parameter IDLE = 0, + SYNC_H = 1, + SYNC_L = 2, + + CWD_H = 3, + CWD_L = 4, + + GEN1_H = 5, + GEN1_L = 6, + + GEN2_H = 7, + GEN2_L = 8, + + GEN3_H = 9, + GEN3_L = 10, + + GEN4_H = 11, + GEN4_L = 12, + + GEN5_H = 13, + GEN5_L = 14, + + NUL_H = 15, + NUL_L = 16, + + MOD_H = 17, + MOD_L = 18, + + HCO_H = 19, + HCO_L = 20, + + RBT_H = 21, + RBT_L = 22, + + NOOP_0 = 23, + NOOP_1 = 24, + NOOP_2 = 25, + NOOP_3 = 26; + + +reg [4:0] state; +reg [4:0] next_state; + + +always @* + begin: COMB + + case (state) + + IDLE: + begin + if (MBT_REBOOT) + begin + next_state = SYNC_H; + icap_ce = 0; + icap_wr = 0; + icap_din = 16'hAA99; // Sync word 1 + end + else + begin + next_state = IDLE; + icap_ce = 1; + icap_wr = 1; + icap_din = 16'hFFFF; // Null + end + end + + SYNC_H: + begin + next_state = SYNC_L; + icap_ce = 0; + icap_wr = 0; + icap_din = 16'h5566; // Sync word 2 + end + + SYNC_L: + begin + next_state = NUL_H; + icap_ce = 0; + icap_wr = 0; + icap_din = 16'h30A1; // Write to Command Register.... + end + + NUL_H: + begin + // next_state = NUL_L; + next_state = GEN1_H; + icap_ce = 0; + icap_wr = 0; + icap_din = 16'h0000; // Null Command issued.... value = 0x0000 + end + +//Q + + GEN1_H: + begin + next_state = GEN1_L; + icap_ce = 0; + icap_wr = 0; + icap_din = 16'h3261; // Escritura a reg GENERAL_1 (bit boot en caliente) + end + + GEN1_L: + begin + next_state = GEN2_H; + icap_ce = 0; + icap_wr = 0; + icap_din = spi_addr[15:0]; //16'hC000; // dreccion SPI BAJA + end + + GEN2_H: + begin + next_state = GEN2_L; + icap_ce = 0; + icap_wr = 0; + icap_din = 16'h3281; // Escritura a reg GENERAL_2 + end + + GEN2_L: + begin + next_state = MOD_H; + icap_ce = 0; + icap_wr = 0; + icap_din = {8'h6B, spi_addr[23:16]}; // 16'h030A; // 03 lectura SPI opcode + direccion SPI ALTA (03 = 1x, 6B = 4x) + end + +/////// Registro MODE (para carga a 4x tras reboot) + + MOD_H: + begin + next_state = MOD_L; + icap_ce = 0; + icap_wr = 0; + icap_din = 16'h3301; // Escritura a reg MODE + end + + MOD_L: + begin + next_state = NUL_L; + icap_ce = 0; + icap_wr = 0; + icap_din = 16'h3100; // Activamos bit de lectura a modo 4x en el proceso de Config + end +///// + + NUL_L: + begin + next_state = RBT_H; + icap_ce = 0; + icap_wr = 0; + icap_din = 16'h30A1; // Write to Command Register.... + end + + RBT_H: + begin + next_state = RBT_L; + icap_ce = 0; + icap_wr = 0; + icap_din = 16'h000E; // REBOOT Command 0x000E + end + +//-------------------- + + RBT_L: + begin + next_state = NOOP_0; + icap_ce = 0; + icap_wr = 0; + icap_din = 16'h2000; // NOOP + end + + NOOP_0: + begin + next_state = NOOP_1; + icap_ce = 0; + icap_wr = 0; + icap_din = 16'h2000; // NOOP + end + + NOOP_1: + begin + next_state = NOOP_2; + icap_ce = 0; + icap_wr = 0; + icap_din = 16'h2000; // NOOP + end + + NOOP_2: + begin + next_state = NOOP_3; + icap_ce = 0; + icap_wr = 0; + icap_din = 16'h2000; // NOOP + end + +//-------------------- + + NOOP_3: + begin + next_state = IDLE; + icap_ce = 1; + icap_wr = 1; + icap_din = 16'h1111; // NULL value + end + + default: + begin + next_state = IDLE; + icap_ce = 1; + icap_wr = 1; + icap_din = 16'h1111; // 16'h1111" + end + + endcase + end + +always @(posedge CLK) + + begin: SEQ + if (MBT_RESET) + state <= IDLE; + else + state <= next_state; + end + + +always @(posedge CLK) + + begin: ICAP_FF + + ff_icap_din_reversed[0] <= icap_din[7]; //need to reverse bits to ICAP module since D0 bit is read first + ff_icap_din_reversed[1] <= icap_din[6]; + ff_icap_din_reversed[2] <= icap_din[5]; + ff_icap_din_reversed[3] <= icap_din[4]; + ff_icap_din_reversed[4] <= icap_din[3]; + ff_icap_din_reversed[5] <= icap_din[2]; + ff_icap_din_reversed[6] <= icap_din[1]; + ff_icap_din_reversed[7] <= icap_din[0]; + ff_icap_din_reversed[8] <= icap_din[15]; + ff_icap_din_reversed[9] <= icap_din[14]; + ff_icap_din_reversed[10] <= icap_din[13]; + ff_icap_din_reversed[11] <= icap_din[12]; + ff_icap_din_reversed[12] <= icap_din[11]; + ff_icap_din_reversed[13] <= icap_din[10]; + ff_icap_din_reversed[14] <= icap_din[9]; + ff_icap_din_reversed[15] <= icap_din[8]; + + ff_icap_ce <= icap_ce; + ff_icap_wr <= icap_wr; + end + + +endmodule diff --git a/cores/KypSpectrum/papilio_zxuno_Pa.ucf b/cores/KypSpectrum/papilio_zxuno_Pa.ucf deleted file mode 100644 index 2fa1a7c..0000000 --- a/cores/KypSpectrum/papilio_zxuno_Pa.ucf +++ /dev/null @@ -1,63 +0,0 @@ -# UCF file for the Papilio Pro board -# Generated by pin_converter, written by Kevin Lindsey -# https://github.com/thelonious/papilio_pins/tree/development/pin_converter - -# Main board wing pin [] to FPGA pin Pxx map -# -------C------- -------B------- -------A------- -# [GND] [C00] P114 [GND] [B00] P99 P100 [A15] -# [2V5] [C01] P115 [2V5] [B01] P97 P98 [A14] -# [3V3] [C02] P116 [3V3] [B02] P92 P93 [A13] -# [5V0] [C03] P117 [5V0] [B03] P87 P88 [A12] -# [C04] P118 [B04] P84 P85 [A11] [5V0] -# [C05] P119 [B05] P82 P83 [A10] [3V3] -# [C06] P120 [B06] P80 P81 [A09] [2V5] -# [C07] P121 [B07] P78 P79 [A08] [GND] -# [GND] [C08] P123 [GND] [B08] P74 P75 [A07] -# [2V5] [C09] P124 [2V5] [B09] P95 P67 [A06] -# [3V3] [C10] P126 [3V3] [B10] P62 P66 [A05] -# [5V0] [C11] P127 [5V0] [B11] P59 P61 [A04] -# [C12] P131 [B12] P57 P58 [A03] [5V0] -# [C13] P132 [B13] P55 P56 [A02] [3V3] -# [C14] P133 [B14] P50 P51 [A01] [2V5] -# [C15] P134 [B15] P47 P48 [A00] [GND] - -## Prohibit the automatic placement of pins that are connected to VCC or GND for configuration. -CONFIG PROHIBIT=P144; -CONFIG PROHIBIT=P69; -CONFIG PROHIBIT=P60; - -NET netCLK LOC="P94" | IOSTANDARD=LVTTL | PERIOD=31.25ns; # CLK -NET netRST LOC="P85" | IOSTANDARD=LVTTL | PULLDOWN; # A11 -NET netNMI LOC="P95" | IOSTANDARD=LVTTL | PULLDOWN; # B9 -- SW(2) - -NET ps2CLK LOC="P115" | IOSTANDARD=LVTTL | DRIVE=8 | SLEW=FAST | PULLUP; # C1 -NET ps2DAT LOC="P114" | IOSTANDARD=LVTTL | DRIVE=8 | SLEW=FAST | PULLUP; # C0 - -NET joyBTN(0) LOC="P123" | IOSTANDARD=LVTTL | DRIVE=8 | SLEW=FAST | PULLUP; # C8 -- JOYSTICK A1 -NET joyBTN(1) LOC="P126" | IOSTANDARD=LVTTL | DRIVE=8 | SLEW=FAST | PULLUP; # C10 -- JOYSTICK A2 -NET joyBTN(2) LOC="P127" | IOSTANDARD=LVTTL | DRIVE=8 | SLEW=FAST | PULLUP; # C11 -- JOYSTICK A3 -NET joyBTN(3) LOC="P132" | IOSTANDARD=LVTTL | DRIVE=8 | SLEW=FAST | PULLUP; # C13 -- JOYSTICK A4 -NET joyBTN(4) LOC="P124" | IOSTANDARD=LVTTL | DRIVE=8 | SLEW=FAST | PULLUP; # C9 -- JOYSTICK A6 -# joy+5 # -- JOYSTICK A7 -NET joyGND LOC="P131" | IOSTANDARD=LVTTL; # C12 -- JOYSTICK A8 - -NET audioL LOC="P98" | IOSTANDARD=LVTTL | DRIVE=8 | SLEW=FAST; # A14 -NET audioR LOC="P100" | IOSTANDARD=LVTTL | DRIVE=8 | SLEW=FAST; # A15 -NET audioEAR LOC="P57" | IOSTANDARD=LVTTL | DRIVE=8 | SLEW=FAST; # B12 -- JOYSTICK B1 -NET audioGND LOC="P48" | IOSTANDARD=LVTTL; # C12 -- JOYSTICK B8 -# audio+5 # -- JOYSTICK B7 - -NET videoV LOC="P116" | IOSTANDARD=LVTTL | DRIVE=8 | SLEW=FAST; # C2 -NET videoH LOC="P117" | IOSTANDARD=LVTTL | DRIVE=8 | SLEW=FAST; # C3 -NET videoR(0) LOC="P118" | IOSTANDARD=LVTTL | DRIVE=8 | SLEW=FAST; # C4 -NET videoR(1) LOC="P119" | IOSTANDARD=LVTTL | DRIVE=8 | SLEW=FAST; # C5 -NET videoR(2) LOC="P120" | IOSTANDARD=LVTTL | DRIVE=8 | SLEW=FAST; # C6 -NET videoR(3) LOC="P121" | IOSTANDARD=LVTTL | DRIVE=8 | SLEW=FAST; # C7 -NET videoG(0) LOC="P84" | IOSTANDARD=LVTTL | DRIVE=8 | SLEW=FAST; # B4 -NET videoG(1) LOC="P82" | IOSTANDARD=LVTTL | DRIVE=8 | SLEW=FAST; # B5 -NET videoG(2) LOC="P80" | IOSTANDARD=LVTTL | DRIVE=8 | SLEW=FAST; # B6 -NET videoG(3) LOC="P78" | IOSTANDARD=LVTTL | DRIVE=8 | SLEW=FAST; # B7 -NET videoB(0) LOC="P99" | IOSTANDARD=LVTTL | DRIVE=8 | SLEW=FAST; # B0 -NET videoB(1) LOC="P97" | IOSTANDARD=LVTTL | DRIVE=8 | SLEW=FAST; # B1 -NET videoB(2) LOC="P92" | IOSTANDARD=LVTTL | DRIVE=8 | SLEW=FAST; # B2 -NET videoB(3) LOC="P87" | IOSTANDARD=LVTTL | DRIVE=8 | SLEW=FAST; # B3 diff --git a/cores/KypSpectrum/ps2.vhd b/cores/KypSpectrum/ps2.vhd index 40ddc65..c855f60 100644 --- a/cores/KypSpectrum/ps2.vhd +++ b/cores/KypSpectrum/ps2.vhd @@ -5,9 +5,9 @@ library ieee; entity ps2 is port ( - clock : in std_logic; - ps2c : inout std_logic; - ps2d : inout std_logic; + clockPs2 : in std_logic; + clock : inout std_logic; + data : inout std_logic; received : out std_logic; scancode : out std_logic_vector(7 downto 0) ); @@ -20,8 +20,8 @@ architecture behavioral of ps2 is constant state_waiting : std_logic_vector(1 downto 0) := "10"; constant state_received : std_logic_vector(1 downto 0) := "11"; - constant minClockPulseLen : natural := 30*32; -- 30us @ 32MHz - constant maxClockPulseLen : natural := 50*32; -- 50us @ 32MHz + constant minClockPulseLen : natural := 30*7; -- 30us @ 7 MHz + constant maxClockPulseLen : natural := 50*7; -- 50us @ 7 MHz type reg is record @@ -57,13 +57,15 @@ architecture behavioral of ps2 is ); begin - ps2c <= 'Z'; - ps2d <= 'Z'; + clock <= 'Z'; + data <= 'Z'; received <= r.dataReceived; scancode <= r.scancode; - process(r, ps2d, ps2c) + r <= n when rising_edge(clockPs2); + + process(r, clock, data) begin n <= r; @@ -72,7 +74,7 @@ begin n.ps2lastClkDeglitched <= r.ps2clkDeglitched; -- Deglitch the clock signal - if ps2c = '1' then + if clock = '1' then if r.ps2clkDeglitch < 31 then n.ps2clkDeglitch <= r.ps2clkDeglitch+1; else @@ -89,7 +91,7 @@ begin end if; -- Deglitch the data signal - if ps2d = '1' then + if data = '1' then if r.ps2dataDeglitch < 31 then n.ps2dataDeglitch <= r.ps2dataDeglitch+1; else @@ -153,9 +155,4 @@ begin end case; end process; - process(clock, n) - begin - if rising_edge(clock) then r <= n; end if; - end process; - end; diff --git a/cores/KypSpectrum/ram.vhd b/cores/KypSpectrum/ram.vhd new file mode 100644 index 0000000..e0c3585 --- /dev/null +++ b/cores/KypSpectrum/ram.vhd @@ -0,0 +1,27 @@ +library ieee; + use ieee.std_logic_1164.all; + +entity ram is + port + ( + wr : in std_logic; + di : in std_logic_vector( 7 downto 0); + do : out std_logic_vector( 7 downto 0); + a : in std_logic_vector(18 downto 0); + -- + sramWr : out std_logic; + sramData : inout std_logic_vector( 7 downto 0); + sramAddr : out std_logic_vector(18 downto 0) + ); +end; + + +architecture structural of ram is +begin + + sramWr <= wr; + sramData <= di when wr = '0' else (others => 'Z'); + sramAddr <= a; + do <= sramData; + +end; diff --git a/cores/KypSpectrum/sd.vhd b/cores/KypSpectrum/sd.vhd new file mode 100644 index 0000000..173949d --- /dev/null +++ b/cores/KypSpectrum/sd.vhd @@ -0,0 +1,57 @@ +library ieee; + use ieee.std_logic_1164.all; + +entity sd is + port + ( + clock : in std_logic; + pause : out std_logic; + iorq : in std_logic; + rd : in std_logic; + wr : in std_logic; + oe : out std_logic; + di : in std_logic_vector( 7 downto 0); + do : out std_logic_vector( 7 downto 0); + a : in std_logic_vector(15 downto 0); + -- + sdClock : out std_logic; + sdCs : out std_logic; + sdDi : out std_logic; + sdDo : in std_logic + ); +end; + +architecture behavioral of sd is + + signal rx : std_logic; + signal tx : std_logic; + +begin + + process(clock) + begin + if rising_edge(clock) + then + if iorq = '0' and wr = '0' and (a(7 downto 0) = x"1F" or a(7 downto 0) = x"E7") then sdCs <= di(0); end if; + end if; + end process; + + rx <= '1' when iorq = '0' and rd = '0' and (a(7 downto 0) = x"3F" or a(7 downto 0) = x"EB") else '0'; + tx <= '1' when iorq = '0' and wr = '0' and (a(7 downto 0) = x"3F" or a(7 downto 0) = x"EB") else '0'; + + Uspi : entity work.spi port map + ( + clk => clock, + enviar_dato => tx, + recibir_dato => rx, + din => di, + dout => do, + oe_n => oe, + wait_n => pause, + -- + spi_clk => sdClock, + spi_di => sdDi, + spi_do => sdDo + ); + +end; diff --git a/cores/KypSpectrum/spi.v b/cores/KypSpectrum/spi.v new file mode 100644 index 0000000..01f08e4 --- /dev/null +++ b/cores/KypSpectrum/spi.v @@ -0,0 +1,111 @@ +`timescale 1ns / 1ps +`default_nettype none +////////////////////////////////////////////////////////////////////////////////// +// Company: +// Engineer: +// +// Create Date: 20:24:47 03/04/2014 +// Design Name: +// Module Name: spi +// Project Name: +// Target Devices: +// Tool versions: +// Description: +// +// Dependencies: +// +// Revision: +// Revision 0.01 - File Created +// Additional Comments: +// +////////////////////////////////////////////////////////////////////////////////// + +module spi ( + input wire clk, // 7MHz + input wire enviar_dato, // a 1 para indicar que queremos enviar un dato por SPI + input wire recibir_dato,// a 1 para indicar que queremos recibir un dato + input wire [7:0] din, // del bus de datos de salida de la CPU + output reg [7:0] dout, // al bus de datos de entrada de la CPU + output reg oe_n, // el dato en dout es válido + output reg wait_n, + + output wire spi_clk, // Interface SPI + output wire spi_di, // + input wire spi_do // + ); + + // Modulo SPI. + reg ciclo_lectura = 1'b0; // ciclo de lectura en curso + reg ciclo_escritura = 1'b0; // ciclo de escritura en curso + reg [4:0] contador = 5'b00000; // contador del FSM (ciclos) + reg [7:0] data_to_spi; // dato a enviar a la spi por DI + reg [7:0] data_from_spi; // dato a recibir desde la spi + reg [7:0] data_to_cpu; // ultimo dato recibido correctamente + + assign spi_clk = contador[0]; // spi_CLK es la mitad que el reloj del módulo + assign spi_di = data_to_spi[7]; // la transmisión es del bit 7 al 0 + + initial wait_n = 1'b1; + + always @(posedge clk) begin + if (enviar_dato && !ciclo_escritura) begin // si ha sido señalizado, iniciar ciclo de escritura + ciclo_escritura <= 1'b1; + ciclo_lectura <= 1'b0; + contador <= 5'b00000; + data_to_spi <= din; + wait_n <= 1'b0; + end + else if (recibir_dato && !ciclo_lectura) begin // si no, si mirar si hay que iniciar ciclo de lectura + ciclo_lectura <= 1'b1; + ciclo_escritura <= 1'b0; + contador <= 5'b00000; + data_to_cpu <= data_from_spi; + data_from_spi <= 8'h00; + data_to_spi <= 8'hFF; // mientras leemos, MOSI debe estar a nivel alto! + wait_n <= 1'b0; + end + + // FSM para enviar un dato a la spi + else if (ciclo_escritura==1'b1) begin + if (contador!=5'b10000) begin + if (contador == 5'b01000) + wait_n <= 1'b1; + if (spi_clk==1'b1) begin + data_to_spi <= {data_to_spi[6:0],1'b0}; + data_from_spi <= {data_from_spi[6:0],spi_do}; + end + contador <= contador + 1; + end + else begin + if (!enviar_dato) + ciclo_escritura <= 1'b0; + end + end + + // FSM para leer un dato de la spi + else if (ciclo_lectura==1'b1) begin + if (contador!=5'b10000) begin + if (contador == 5'b01000) + wait_n <= 1'b1; + if (spi_clk==1'b1) + data_from_spi <= {data_from_spi[6:0],spi_do}; + contador <= contador + 1; + end + else begin + if (!recibir_dato) + ciclo_lectura <= 1'b0; + end + end + end + + always @* begin + if (recibir_dato) begin + dout = data_to_cpu; + oe_n = 1'b0; + end + else begin + dout = 8'hZZ; + oe_n = 1'b1; + end + end +endmodule diff --git a/cores/KypSpectrum/ula.vhd b/cores/KypSpectrum/ula.vhd index 7cf3313..f791c92 100644 --- a/cores/KypSpectrum/ula.vhd +++ b/cores/KypSpectrum/ula.vhd @@ -1,65 +1,178 @@ library ieee; use ieee.std_logic_1164.all; + use ieee.std_logic_unsigned.all; entity ula is port ( - clockVGA : in std_logic; - clockCPU : in std_logic; - keys : in std_logic_vector( 4 downto 0); - iorq : in std_logic; - int : out std_logic; - rd : in std_logic; - wr : in std_logic; - a0 : in std_logic; - di : in std_logic_vector( 7 downto 0); - do : out std_logic_vector( 7 downto 0); - ear : in std_logic; - mic : out std_logic; - speaker : out std_logic; - va : out std_logic_vector(12 downto 0); - vd : in std_logic_vector( 7 downto 0); - hs : out std_logic; - vs : out std_logic; - rgb : out std_logic_vector(11 downto 0) + cpuClock : in std_logic; + iorq : in std_logic; + rd : in std_logic; + wr : in std_logic; + a0 : in std_logic; + di : in std_logic_vector( 7 downto 0); + do : out std_logic_vector( 7 downto 0); + -- + vramClock : in std_logic; + vramData : in std_logic_vector( 7 downto 0); + vramAddr : out std_logic_vector(12 downto 0); + int : out std_logic; + v : out std_logic; + h : out std_logic; + r : out std_logic; + g : out std_logic; + b : out std_logic; + i : out std_logic; + -- + ear : in std_logic; + mic : out std_logic; + speaker : out std_logic; + -- + rows : in std_logic_vector(15 downto 8); + boot : out std_logic; + reset : out std_logic; + nmi : out std_logic; + ps2 : inout std_logic_vector(1 downto 0) ); end; architecture behavioral of ula is - signal portFF : std_logic_vector(2 downto 0); + signal received : std_logic; + signal scancode : std_logic_vector(7 downto 0); + signal keys : std_logic_vector(4 downto 0); - signal rows : std_logic_vector(7 downto 0); - signal cols : std_logic_vector(4 downto 0); + signal border : std_logic_vector(2 downto 0); + + signal hCount : std_logic_vector(8 downto 0) := (others => '0'); + signal vCount : std_logic_vector(8 downto 0) := (others => '0'); + signal fCount : std_logic_vector(4 downto 0) := (others => '0'); + + signal hSync : std_logic; + signal vSync : std_logic; + + signal dataInp : std_logic_vector(7 downto 0); + signal dataOut : std_logic_vector(7 downto 0); + + signal attrInp : std_logic_vector(7 downto 0); + signal attrMux : std_logic_vector(7 downto 3); + signal attrOut : std_logic_vector(7 downto 0); + + signal dataEnable : std_logic; + signal videoBlank : std_logic; + signal videoEnable : std_logic; + + signal dataInpLoad : std_logic; + signal dataOutLoad : std_logic; + + signal attrInpLoad : std_logic; + signal attrOutLoad : std_logic; + + signal dataSelect : std_logic; begin - Uvga: entity work.vga port map + Ups2 : entity work.ps2 port map ( - clockVGA => clockVGA, - border => portFF(2 downto 0), - va => va, - vd => vd, - hs => hs, - vs => vs, - rgb => rgb + clockPs2 => vramClock, -- 7 MHz + clock => ps2(0), + data => ps2(1), + received => received, + scancode => scancode ); - Uvideo: entity work.video port map + Ukeyboard : entity work.keyboard port map ( - clockCPU => clockCPU, - int => int + received => received, + scancode => scancode, + boot => boot, + reset => reset, + nmi => nmi, + cols => keys, + rows => rows ); - process(clockCPU) + process(cpuClock) begin - if rising_edge(clockCPU) then - if iorq = '0' and rd = '0' and a0 = '0' then do <= '0'&ear&'0'&keys; end if; - if iorq = '0' and wr = '0' and a0 = '0' then - portFF <= di(2 downto 0); - mic <= di(3); - speaker <= di(4); + if falling_edge(cpuClock) + then + do <= attrOut; + + if iorq = '0' and a0 = '0' + then + if wr = '0' + then + border <= di(2 downto 0); + mic <= di(3); + speaker <= di(4); + elsif rd = '0' + then + do <= '0'&ear&'0'&keys; + end if; end if; end if; end process; + process(vramClock) + begin + if falling_edge(vramClock) + then + if hCount < 447 + then + hCount <= hCount+1; + else + hCount <= (others => '0'); + + if vCount < 311 + then + vCount <= vCount+1; + else + vCount <= (others => '0'); + fCount <= fCount+1; + end if; + end if; + + if hCount >= 344 and hCount <= 375 then hSync <= '0'; else hSync <= '1'; end if; + if vCount >= 248 and vCount <= 251 then vSync <= '0'; else vSync <= '1'; end if; + + if vCount = 248 and hCount >= 2 and hCount <= 65 then int <= '0'; else int <= '1'; end if; + end if; + end process; + + process(vramClock) + begin + if falling_edge(vramClock) + then + dataInpLoad <= hCount(0) and not hCount(1) and hCount(3) and videoEnable; + dataOutLoad <= not hCount(0) and not hCount(1) and hCount(2) and videoEnable; + + attrInpLoad <= hCount(0) and hCount(1) and hCount(3) and videoEnable; + attrOutLoad <= hCount(0) and not hCount(1) and hCount(2); + + dataSelect <= dataOut(7) xor (fCount(4) and attrOut(7)); + + if hCount(3) = '1' then videoEnable <= dataEnable; end if; + if hCount < 256 and vCount < 192 then dataEnable <= '1'; else dataEnable <= '0'; end if; + if (hCount >= 320 and hCount <= 415) or (vCount >= 248 and vCount <= 255) then videoBlank <= '1'; else videoBlank <= '0'; end if; + + if dataInpLoad = '1' then dataInp <= vramData; end if; + if dataOutLoad = '1' then dataOut <= dataInp; else dataOut <= dataOut(6 downto 0)&'0'; end if; + + if attrInpLoad = '1' then attrInp <= vramData; end if; + if attrOutLoad = '1' then attrOut <= attrMux&attrInp(2 downto 0); end if; + + if videoEnable = '1' then attrMux(7 downto 3) <= attrInp(7 downto 3); else attrMux(7 downto 3) <= "00"&border; end if; + + vramAddr( 7 downto 0) <= vCount(5 downto 3)&hCount(7 downto 4)&hCount(2); + if hCount(1) = '0' then vramAddr(12 downto 8) <= vCount(7 downto 6)&vCount(2 downto 0); else vramAddr(12 downto 8) <= "110"&vCount(7 downto 6); end if; + + end if; + end process; + + v <= vSync; + h <= hSync; + r <= '0' when videoBlank = '1' else attrOut(1) when dataSelect = '1' else attrOut(4); + g <= '0' when videoBlank = '1' else attrOut(2) when dataSelect = '1' else attrOut(5); + b <= '0' when videoBlank = '1' else attrOut(0) when dataSelect = '1' else attrOut(3); + i <= '0' when videoBlank = '1' else attrOut(6); + end; diff --git a/cores/KypSpectrum/vga.vhd b/cores/KypSpectrum/vga.vhd deleted file mode 100644 index f37c0ba..0000000 --- a/cores/KypSpectrum/vga.vhd +++ /dev/null @@ -1,94 +0,0 @@ -library ieee; - use ieee.numeric_std.all; - use ieee.std_logic_1164.all; - use ieee.std_logic_unsigned.all; - --- |VGA 640x480 | Horizontal| Vertical| --- +------------+-----------+-----------+ --- |Visible area| 0-639:640| 0-479:480| --- |Front porch |640-655: 16|480-489: 10| --- |Sync pulse |656-751: 96|490-491: 2| --- |Back porch |752-799: 48|492-524: 33| --- |Whole line | 800| 525| - -entity vga is - port - ( - clockVGA : in std_logic; - border : in std_logic_vector( 2 downto 0); - va : out std_logic_vector(12 downto 0); - vd : in std_logic_vector( 7 downto 0); - hs : out std_logic; - vs : out std_logic; - rgb : out std_logic_vector(11 downto 0) - ); -end; - -architecture behavioral of vga is - - signal xy : std_logic_vector(17 downto 0); - signal x : std_logic_vector( 9 downto 0) := std_logic_vector(to_unsigned(512-20, 10)); - signal y : std_logic_vector( 9 downto 0) := std_logic_vector(to_unsigned(383, 10)); - signal f : std_logic_vector( 5 downto 0); - signal bmap : std_logic_vector( 7 downto 0); - signal attr : std_logic_vector( 7 downto 0); - - type tpalette is array (0 to 15) of std_logic_vector(11 downto 0); - constant palette : tpalette := ( x"000", x"007", x"700", x"707", x"070", x"077", x"770", x"777", x"000", x"00f", x"f00", x"f0f", x"0f0", x"0ff", x"ff0", x"fff" ); - -begin - - process(clockVGA) - variable bpre : std_logic_vector(7 downto 0); - variable apre : std_logic_vector(7 downto 0); - variable i, p : std_logic_vector(2 downto 0); - variable b, c : integer; - begin - if rising_edge(clockVGA) then - if x < 799 then x <= x+1; - else - x <= (others => '0'); - if y < 524 then y <= y+1; - else - y <= (others => '0'); - f <= f+1; - end if; - end if; - - if x >= 640+16 and x < 640+16+96 then hs <= '0'; else hs <= '1'; end if; - if y >= 480+10 and y < 480+10+ 2 then vs <= '0'; else vs <= '1'; end if; - - if x >= 64 and x < 64+512 and y >= 48 and y < 48+384 then - if x = 64+512-16 and y = 48+383 then xy <= (others => '0'); else xy <= xy+1; end if; - - if xy(3 downto 0) = "0000" then va <= xy(17 downto 16)&xy(12 downto 10)&xy(15 downto 13)&xy(8 downto 4); end if; - if xy(3 downto 0) = "1000" then va <= "110"&xy(17 downto 13)&xy( 8 downto 4); end if; - if xy(3 downto 0) = "0010" then bpre := vd; end if; - if xy(3 downto 0) = "1010" then apre := vd; end if; - if xy(3 downto 0) = "1110" then bmap <= bpre; attr <= apre; end if; - - b := 7-to_integer(unsigned(x(3 downto 1))); - i := attr(2 downto 0); - p := attr(5 downto 3); - - if attr(7) = '1' then - if f(5) = '1' then - if bmap(b) = '0' then c := to_integer(unsigned(i)); else c := to_integer(unsigned(p)); end if; - else - if bmap(b) = '0' then c := to_integer(unsigned(p)); else c := to_integer(unsigned(i)); end if; - end if; - else - if bmap(b) = '1' then c := to_integer(unsigned(i)); else c := to_integer(unsigned(p)); end if; - end if; - - if attr(6) = '1' then c := c+8; end if; - rgb <= palette(c); - elsif x < 640 and y < 480 then - rgb <= palette(to_integer(unsigned(border))); - else - rgb <= x"000"; - end if; - end if; - end process; - -end; diff --git a/cores/KypSpectrum/video.vhd b/cores/KypSpectrum/video.vhd deleted file mode 100644 index 17df49b..0000000 --- a/cores/KypSpectrum/video.vhd +++ /dev/null @@ -1,26 +0,0 @@ -library ieee; - use ieee.numeric_std.all; - use ieee.std_logic_1164.all; - use ieee.std_logic_unsigned.all; - -entity video is - port - ( - clockCPU : in std_logic; - int : out std_logic - ); -end; - -architecture behavioral of video is -begin - - process(clockCPU) - variable c : std_logic_vector(17 downto 0) := (others => '0'); - begin - if rising_edge(clockCPU) then - if c < 69887 then c := c+1; else c := (others => '0'); end if; - if c >= 16 and c < 48 then int <= '0'; else int <= '1'; end if; - end if; - end process; - -end; diff --git a/cores/KypSpectrum/work/make.bat b/cores/KypSpectrum/work/make.bat new file mode 100644 index 0000000..d3ba815 --- /dev/null +++ b/cores/KypSpectrum/work/make.bat @@ -0,0 +1,9 @@ +SET machine=zxkyp +SET speed=2 +SET ruta_ucf=..\zxkyp +SET ruta_bat=..\..\ +call %ruta_bat%genxst.bat +rem call %ruta_bat%generar.bat v2 ZZ2 +rem call %ruta_bat%generar.bat v3 ZZ3 +call %ruta_bat%generar.bat v4 ZX1 +rem call %ruta_bat%generar.bat Ap ZZA diff --git a/cores/KypSpectrum/work/zxkyp.prj b/cores/KypSpectrum/work/zxkyp.prj new file mode 100644 index 0000000..d9e3b7e --- /dev/null +++ b/cores/KypSpectrum/work/zxkyp.prj @@ -0,0 +1,20 @@ +vhdl work "../ipcore_dir/rom.vhd" +vhdl work "../ipcore_dir/vram.vhd" +vhdl work "../ipcore_dir/drom.vhd" +verilog work "../tv80_reg.v" +verilog work "../tv80_mcode.v" +verilog work "../tv80_alu.v" +verilog work "../tv80_core.v" +verilog work "../spi.v" +vhdl work "../ps2.vhd" +vhdl work "../keyboard.vhd" +vhdl work "../dac.vhd" +vhdl work "../ula.vhd" +verilog work "../tv80n.v" +vhdl work "../sd.vhd" +vhdl work "../ram.vhd" +verilog work "../multiboot.v" +vhdl work "../mixer.vhd" +vhdl work "../div.vhd" +vhdl work "../clock.vhd" +vhdl work "../zxkyp.vhd" diff --git a/cores/KypSpectrum/zxpp.ut b/cores/KypSpectrum/work/zxkyp.ut similarity index 97% rename from cores/KypSpectrum/zxpp.ut rename to cores/KypSpectrum/work/zxkyp.ut index 8c5e2eb..d1824d0 100644 --- a/cores/KypSpectrum/zxpp.ut +++ b/cores/KypSpectrum/work/zxkyp.ut @@ -1,6 +1,5 @@ -w -g DebugBitstream:No --g Compress -g Binary:no -g CRC:Enable -g Reset_on_err:No diff --git a/cores/KypSpectrum/zxpp.xst b/cores/KypSpectrum/work/zxkyp.xst similarity index 94% rename from cores/KypSpectrum/zxpp.xst rename to cores/KypSpectrum/work/zxkyp.xst index b610316..e3436f5 100644 --- a/cores/KypSpectrum/zxpp.xst +++ b/cores/KypSpectrum/work/zxkyp.xst @@ -1,11 +1,11 @@ set -tmpdir "xst/projnav.tmp" set -xsthdpdir "xst" run --ifn zxpp.prj --ofn zxpp +-ifn zxkyp.prj +-ofn zxkyp -ofmt NGC -p xc6slx9-2-tqg144 --top zxpp +-top zxkyp -opt_mode Speed -opt_level 1 -power NO @@ -15,7 +15,7 @@ run -rtlview Yes -glob_opt AllClockNets -read_cores YES --sd {"ipcore_dir" } +-sd {"../ipcore_dir" } -write_timing_constraints NO -cross_clock_analysis NO -hierarchy_separator / diff --git a/cores/KypSpectrum/ym2149.vhd b/cores/KypSpectrum/ym2149.vhd deleted file mode 100644 index 4cfc60c..0000000 --- a/cores/KypSpectrum/ym2149.vhd +++ /dev/null @@ -1,623 +0,0 @@ --- --- A simulation model of YM2149 (AY-3-8910 with bells on) - --- Copyright (c) MikeJ - Jan 2005 --- --- All rights reserved --- --- Redistribution and use in source and synthezised forms, with or without --- modification, are permitted provided that the following conditions are met: --- --- Redistributions of source code must retain the above copyright notice, --- this list of conditions and the following disclaimer. --- --- Redistributions in synthesized form must reproduce the above copyright --- notice, this list of conditions and the following disclaimer in the --- documentation and/or other materials provided with the distribution. --- --- Neither the name of the author nor the names of other contributors may --- be used to endorse or promote products derived from this software without --- specific prior written permission. --- --- THIS CODE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" --- AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, --- THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR --- PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE --- LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR --- CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF --- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS --- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN --- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) --- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE --- POSSIBILITY OF SUCH DAMAGE. --- --- You are responsible for any legal issues arising from your use of this code. --- --- The latest version of this file can be found at: www.fpgaarcade.com --- --- Email support@fpgaarcade.com --- --- Revision list --- --- version 001 initial release --- --- Clues from MAME sound driver and Kazuhiro TSUJIKAWA --- --- These are the measured outputs from a real chip for a single Isolated channel into a 1K load (V) --- vol 15 .. 0 --- 3.27 2.995 2.741 2.588 2.452 2.372 2.301 2.258 2.220 2.198 2.178 2.166 2.155 2.148 2.141 2.132 --- As the envelope volume is 5 bit, I have fitted a curve to the not quite log shape in order --- to produced all the required values. --- (The first part of the curve is a bit steeper and the last bit is more linear than expected) --- --- NOTE, this component uses LINEAR mixing of the three analogue channels, and is only --- accurate for designs where the outputs are buffered and not simply wired together. --- The ouput level is more complex in that case and requires a larger table. - -library ieee; - use ieee.std_logic_1164.all; - use ieee.std_logic_arith.all; - use ieee.std_logic_unsigned.all; - -entity YM2149 is - port ( - -- data bus - I_DA : in std_logic_vector(7 downto 0); - O_DA : out std_logic_vector(7 downto 0); - O_DA_OE_L : out std_logic; - -- control - I_A9_L : in std_logic; - I_A8 : in std_logic; - I_BDIR : in std_logic; - I_BC2 : in std_logic; - I_BC1 : in std_logic; - I_SEL_L : in std_logic; - - O_AUDIO : out std_logic_vector(7 downto 0); - -- port a - I_IOA : in std_logic_vector(7 downto 0); - O_IOA : out std_logic_vector(7 downto 0); - O_IOA_OE_L : out std_logic; - -- port b - I_IOB : in std_logic_vector(7 downto 0); - O_IOB : out std_logic_vector(7 downto 0); - O_IOB_OE_L : out std_logic; - - ENA : in std_logic; -- clock enable for higher speed operation - RESET_L : in std_logic; - CLK : in std_logic -- note 6 Mhz - ); -end; - -architecture RTL of YM2149 is - type array_16x8 is array (0 to 15) of std_logic_vector(7 downto 0); - type array_3x12 is array (1 to 3) of std_logic_vector(11 downto 0); - - signal cnt_div : std_logic_vector(3 downto 0) := (others => '0'); - signal noise_div : std_logic := '0'; - signal ena_div : std_logic; - signal ena_div_noise : std_logic; - signal poly17 : std_logic_vector(16 downto 0) := (others => '0'); - - -- registers - signal addr : std_logic_vector(7 downto 0); - signal busctrl_addr : std_logic; - signal busctrl_we : std_logic; - signal busctrl_re : std_logic; - - signal reg : array_16x8; - signal env_reset : std_logic; - signal ioa_inreg : std_logic_vector(7 downto 0); - signal iob_inreg : std_logic_vector(7 downto 0); - - signal noise_gen_cnt : std_logic_vector(4 downto 0); - signal noise_gen_op : std_logic; - signal tone_gen_cnt : array_3x12 := (others => (others => '0')); - signal tone_gen_op : std_logic_vector(3 downto 1) := "000"; - - signal env_gen_cnt : std_logic_vector(15 downto 0); - signal env_ena : std_logic; - signal env_hold : std_logic; - signal env_inc : std_logic; - signal env_vol : std_logic_vector(4 downto 0); - - signal tone_ena_l : std_logic; - signal tone_src : std_logic; - signal noise_ena_l : std_logic; - signal chan_vol : std_logic_vector(4 downto 0); - - signal dac_amp : std_logic_vector(7 downto 0); - signal audio_mix : std_logic_vector(9 downto 0); - signal audio_final : std_logic_vector(9 downto 0); -begin - -- cpu i/f - p_busdecode : process(I_BDIR, I_BC2, I_BC1, addr, I_A9_L, I_A8) - variable cs : std_logic; - variable sel : std_logic_vector(2 downto 0); - begin - -- BDIR BC2 BC1 MODE - -- 0 0 0 inactive - -- 0 0 1 address - -- 0 1 0 inactive - -- 0 1 1 read - -- 1 0 0 address - -- 1 0 1 inactive - -- 1 1 0 write - -- 1 1 1 address - busctrl_addr <= '0'; - busctrl_we <= '0'; - busctrl_re <= '0'; - - cs := '0'; - if (I_A9_L = '0') and (I_A8 = '1') and (addr(7 downto 4) = "0000") then - cs := '1'; - end if; - - sel := (I_BDIR & I_BC2 & I_BC1); - case sel is - when "000" => null; - when "001" => busctrl_addr <= '1'; - when "010" => null; - when "011" => busctrl_re <= cs; - when "100" => busctrl_addr <= '1'; - when "101" => null; - when "110" => busctrl_we <= cs; - when "111" => busctrl_addr <= '1'; - when others => null; - end case; - end process; - - p_oe : process(busctrl_re) - begin - -- if we are emulating a real chip, maybe clock this to fake up the tristate typ delay of 100ns - O_DA_OE_L <= not (busctrl_re); - end process; - - -- - -- CLOCKED - -- - p_waddr : process - begin - -- looks like registers are latches in real chip, but the address is caught at the end of the address state. - wait until rising_edge(CLK); - - if (RESET_L = '0') then - addr <= (others => '0'); - else - if (busctrl_addr = '1') then - addr <= I_DA; - end if; - end if; - end process; - - p_wdata : process - begin - -- looks like registers are latches in real chip, but the address is caught at the end of the address state. - wait until rising_edge(CLK); - env_reset <= '0'; - - if (RESET_L = '0') then - reg <= (others => (others => '0')); - env_reset <= '1'; - else - env_reset <= '0'; - if (busctrl_we = '1') then - case addr(3 downto 0) is - when x"0" => reg(0) <= I_DA; - when x"1" => reg(1) <= I_DA; - when x"2" => reg(2) <= I_DA; - when x"3" => reg(3) <= I_DA; - when x"4" => reg(4) <= I_DA; - when x"5" => reg(5) <= I_DA; - when x"6" => reg(6) <= I_DA; - when x"7" => reg(7) <= I_DA; - when x"8" => reg(8) <= I_DA; - when x"9" => reg(9) <= I_DA; - when x"A" => reg(10) <= I_DA; - when x"B" => reg(11) <= I_DA; - when x"C" => reg(12) <= I_DA; - when x"D" => reg(13) <= I_DA; env_reset <= '1'; - when x"E" => reg(14) <= I_DA; - when x"F" => reg(15) <= I_DA; - when others => null; - end case; - end if; - end if; - end process; - - -- - -- LATCHED, useful when emulating a real chip in circuit. Nasty as gated clock. - -- --- p_waddr : process(reset_l, busctrl_addr) --- begin --- -- looks like registers are latches in real chip, but the address is caught at the end of the address state. --- if (RESET_L = '0') then --- addr <= (others => '0'); --- elsif falling_edge(busctrl_addr) then -- yuk --- addr <= I_DA; --- end if; --- end process; --- --- p_wdata : process(reset_l, busctrl_we, addr) --- begin --- if (RESET_L = '0') then --- reg <= (others => (others => '0')); --- elsif falling_edge(busctrl_we) then --- case addr(3 downto 0) is --- when x"0" => reg(0) <= I_DA; --- when x"1" => reg(1) <= I_DA; --- when x"2" => reg(2) <= I_DA; --- when x"3" => reg(3) <= I_DA; --- when x"4" => reg(4) <= I_DA; --- when x"5" => reg(5) <= I_DA; --- when x"6" => reg(6) <= I_DA; --- when x"7" => reg(7) <= I_DA; --- when x"8" => reg(8) <= I_DA; --- when x"9" => reg(9) <= I_DA; --- when x"A" => reg(10) <= I_DA; --- when x"B" => reg(11) <= I_DA; --- when x"C" => reg(12) <= I_DA; --- when x"D" => reg(13) <= I_DA; --- when x"E" => reg(14) <= I_DA; --- when x"F" => reg(15) <= I_DA; --- when others => null; --- end case; --- end if; --- --- env_reset <= '0'; --- if (busctrl_we = '1') and (addr(3 downto 0) = x"D") then --- env_reset <= '1'; --- end if; --- end process; - - p_rdata : process(busctrl_re, addr, reg) - begin - O_DA <= (others => '0'); -- 'X' - if (busctrl_re = '1') then -- not necessary, but useful for putting 'X's in the simulator - case addr(3 downto 0) is - when x"0" => O_DA <= reg(0) ; - when x"1" => O_DA <= "0000" & reg(1)(3 downto 0) ; - when x"2" => O_DA <= reg(2) ; - when x"3" => O_DA <= "0000" & reg(3)(3 downto 0) ; - when x"4" => O_DA <= reg(4) ; - when x"5" => O_DA <= "0000" & reg(5)(3 downto 0) ; - when x"6" => O_DA <= "000" & reg(6)(4 downto 0) ; - when x"7" => O_DA <= reg(7) ; - when x"8" => O_DA <= "000" & reg(8)(4 downto 0) ; - when x"9" => O_DA <= "000" & reg(9)(4 downto 0) ; - when x"A" => O_DA <= "000" & reg(10)(4 downto 0) ; - when x"B" => O_DA <= reg(11); - when x"C" => O_DA <= reg(12); - when x"D" => O_DA <= "0000" & reg(13)(3 downto 0); - when x"E" => if (reg(7)(6) = '0') then -- input - O_DA <= ioa_inreg; - else - O_DA <= reg(14); -- read output reg - end if; - when x"F" => if (Reg(7)(7) = '0') then - O_DA <= iob_inreg; - else - O_DA <= reg(15); - end if; - when others => null; - end case; - end if; - end process; - -- - p_divider : process - begin - wait until rising_edge(CLK); - -- / 8 when SEL is high and /16 when SEL is low - if (ENA = '1') then - ena_div <= '0'; - ena_div_noise <= '0'; - if (cnt_div = "0000") then - cnt_div <= (not I_SEL_L) & "111"; - ena_div <= '1'; - - noise_div <= not noise_div; - if (noise_div = '1') then - ena_div_noise <= '1'; - end if; - else - cnt_div <= cnt_div - "1"; - end if; - end if; - end process; - - p_noise_gen : process - variable noise_gen_comp : std_logic_vector(4 downto 0); - variable poly17_zero : std_logic; - begin - wait until rising_edge(CLK); - - if (reg(6)(4 downto 0) = "00000") then - noise_gen_comp := "00000"; - else - noise_gen_comp := (reg(6)(4 downto 0) - "1"); - end if; - - poly17_zero := '0'; - if (poly17 = "00000000000000000") then poly17_zero := '1'; end if; - - if (ENA = '1') then - - if (ena_div_noise = '1') then -- divider ena - - if (noise_gen_cnt >= noise_gen_comp) then - noise_gen_cnt <= "00000"; - poly17 <= (poly17(0) xor poly17(2) xor poly17_zero) & poly17(16 downto 1); - else - noise_gen_cnt <= (noise_gen_cnt + "1"); - end if; - end if; - end if; - end process; - noise_gen_op <= poly17(0); - - p_tone_gens : process - variable tone_gen_freq : array_3x12; - variable tone_gen_comp : array_3x12; - begin - wait until rising_edge(CLK); - - -- looks like real chips count up - we need to get the Exact behaviour .. - tone_gen_freq(1) := reg(1)(3 downto 0) & reg(0); - tone_gen_freq(2) := reg(3)(3 downto 0) & reg(2); - tone_gen_freq(3) := reg(5)(3 downto 0) & reg(4); - -- period 0 = period 1 - for i in 1 to 3 loop - if (tone_gen_freq(i) = x"000") then - tone_gen_comp(i) := x"000"; - else - tone_gen_comp(i) := (tone_gen_freq(i) - "1"); - end if; - end loop; - - if (ENA = '1') then - for i in 1 to 3 loop - if (ena_div = '1') then -- divider ena - - if (tone_gen_cnt(i) >= tone_gen_comp(i)) then - tone_gen_cnt(i) <= x"000"; - tone_gen_op(i) <= not tone_gen_op(i); - else - tone_gen_cnt(i) <= (tone_gen_cnt(i) + "1"); - end if; - end if; - end loop; - end if; - end process; - - p_envelope_freq : process - variable env_gen_freq : std_logic_vector(15 downto 0); - variable env_gen_comp : std_logic_vector(15 downto 0); - begin - wait until rising_edge(CLK); - env_gen_freq := reg(12) & reg(11); - -- envelope freqs 1 and 0 are the same. - if (env_gen_freq = x"0000") then - env_gen_comp := x"0000"; - else - env_gen_comp := (env_gen_freq - "1"); - end if; - - if (ENA = '1') then - env_ena <= '0'; - if (ena_div = '1') then -- divider ena - if (env_gen_cnt >= env_gen_comp) then - env_gen_cnt <= x"0000"; - env_ena <= '1'; - else - env_gen_cnt <= (env_gen_cnt + "1"); - end if; - end if; - end if; - end process; - - p_envelope_shape : process(env_reset, CLK) - variable is_bot : boolean; - variable is_bot_p1 : boolean; - variable is_top_m1 : boolean; - variable is_top : boolean; - begin - -- envelope shapes - -- C AtAlH - -- 0 0 x x \___ - -- - -- 0 1 x x /___ - -- - -- 1 0 0 0 \\\\ - -- - -- 1 0 0 1 \___ - -- - -- 1 0 1 0 \/\/ - -- ___ - -- 1 0 1 1 \ - -- - -- 1 1 0 0 //// - -- ___ - -- 1 1 0 1 / - -- - -- 1 1 1 0 /\/\ - -- - -- 1 1 1 1 /___ - if (env_reset = '1') then - -- load initial state - if (reg(13)(2) = '0') then -- attack - env_vol <= "11111"; - env_inc <= '0'; -- -1 - else - env_vol <= "00000"; - env_inc <= '1'; -- +1 - end if; - env_hold <= '0'; - - elsif rising_edge(CLK) then - is_bot := (env_vol = "00000"); - is_bot_p1 := (env_vol = "00001"); - is_top_m1 := (env_vol = "11110"); - is_top := (env_vol = "11111"); - - if (ENA = '1') then - if (env_ena = '1') then - if (env_hold = '0') then - if (env_inc = '1') then - env_vol <= (env_vol + "00001"); - else - env_vol <= (env_vol + "11111"); - end if; - end if; - - -- envelope shape control. - if (reg(13)(3) = '0') then - if (env_inc = '0') then -- down - if is_bot_p1 then env_hold <= '1'; end if; - else - if is_top then env_hold <= '1'; end if; - end if; - else - if (reg(13)(0) = '1') then -- hold = 1 - if (env_inc = '0') then -- down - if (reg(13)(1) = '1') then -- alt - if is_bot then env_hold <= '1'; end if; - else - if is_bot_p1 then env_hold <= '1'; end if; - end if; - else - if (reg(13)(1) = '1') then -- alt - if is_top then env_hold <= '1'; end if; - else - if is_top_m1 then env_hold <= '1'; end if; - end if; - end if; - - elsif (reg(13)(1) = '1') then -- alternate - if (env_inc = '0') then -- down - if is_bot_p1 then env_hold <= '1'; end if; - if is_bot then env_hold <= '0'; env_inc <= '1'; end if; - else - if is_top_m1 then env_hold <= '1'; end if; - if is_top then env_hold <= '0'; env_inc <= '0'; end if; - end if; - end if; - - end if; - end if; - end if; - end if; - end process; - - p_chan_mixer : process(cnt_div, reg, tone_gen_op) - begin - tone_ena_l <= '1'; tone_src <= '1'; - noise_ena_l <= '1'; chan_vol <= "00000"; - case cnt_div(1 downto 0) is - when "00" => - tone_ena_l <= reg(7)(0); tone_src <= tone_gen_op(1); chan_vol <= reg(8)(4 downto 0); - noise_ena_l <= reg(7)(3); - when "01" => - tone_ena_l <= reg(7)(1); tone_src <= tone_gen_op(2); chan_vol <= reg(9)(4 downto 0); - noise_ena_l <= reg(7)(4); - when "10" => - tone_ena_l <= reg(7)(2); tone_src <= tone_gen_op(3); chan_vol <= reg(10)(4 downto 0); - noise_ena_l <= reg(7)(5); - when "11" => null; -- tone gen outputs become valid on this clock - when others => null; - end case; - end process; - - p_op_mixer : process - variable chan_mixed : std_logic; - variable chan_amp : std_logic_vector(4 downto 0); - begin - wait until rising_edge(CLK); - if (ENA = '1') then - - chan_mixed := (tone_ena_l or tone_src) and (noise_ena_l or noise_gen_op); - - chan_amp := (others => '0'); - if (chan_mixed = '1') then - if (chan_vol(4) = '0') then - if (chan_vol(3 downto 0) = "0000") then -- nothing is easy ! make sure quiet is quiet - chan_amp := "00000"; - else - chan_amp := chan_vol(3 downto 0) & '1'; -- make sure level 31 (env) = level 15 (tone) - end if; - else - chan_amp := env_vol(4 downto 0); - end if; - end if; - - dac_amp <= x"00"; - case chan_amp is - when "11111" => dac_amp <= x"FF"; - when "11110" => dac_amp <= x"D9"; - when "11101" => dac_amp <= x"BA"; - when "11100" => dac_amp <= x"9F"; - when "11011" => dac_amp <= x"88"; - when "11010" => dac_amp <= x"74"; - when "11001" => dac_amp <= x"63"; - when "11000" => dac_amp <= x"54"; - when "10111" => dac_amp <= x"48"; - when "10110" => dac_amp <= x"3D"; - when "10101" => dac_amp <= x"34"; - when "10100" => dac_amp <= x"2C"; - when "10011" => dac_amp <= x"25"; - when "10010" => dac_amp <= x"1F"; - when "10001" => dac_amp <= x"1A"; - when "10000" => dac_amp <= x"16"; - when "01111" => dac_amp <= x"13"; - when "01110" => dac_amp <= x"10"; - when "01101" => dac_amp <= x"0D"; - when "01100" => dac_amp <= x"0B"; - when "01011" => dac_amp <= x"09"; - when "01010" => dac_amp <= x"08"; - when "01001" => dac_amp <= x"07"; - when "01000" => dac_amp <= x"06"; - when "00111" => dac_amp <= x"05"; - when "00110" => dac_amp <= x"04"; - when "00101" => dac_amp <= x"03"; - when "00100" => dac_amp <= x"03"; - when "00011" => dac_amp <= x"02"; - when "00010" => dac_amp <= x"02"; - when "00001" => dac_amp <= x"01"; - when "00000" => dac_amp <= x"00"; - when others => null; - end case; - - if (cnt_div(1 downto 0) = "10") then - audio_mix <= (others => '0'); - audio_final <= audio_mix; - else - audio_mix <= audio_mix + ("00" & dac_amp); - end if; - - if (RESET_L = '0') then - O_AUDIO(7 downto 0) <= "00000000"; - else - if (audio_final(9) = '0') then - O_AUDIO(7 downto 0) <= audio_final(8 downto 1); - else -- clip - O_AUDIO(7 downto 0) <= x"FF"; - end if; - end if; - end if; - end process; - - p_io_ports : process(reg) - begin - O_IOA <= reg(14); - - O_IOA_OE_L <= not reg(7)(6); - O_IOB <= reg(15); - O_IOB_OE_L <= not reg(7)(7); - end process; - - p_io_ports_inreg : process - begin - wait until rising_edge(CLK); - ioa_inreg <= I_IOA; - iob_inreg <= I_IOB; - end process; -end architecture RTL; diff --git a/cores/KypSpectrum/zxkyp.vhd b/cores/KypSpectrum/zxkyp.vhd new file mode 100644 index 0000000..0d52846 --- /dev/null +++ b/cores/KypSpectrum/zxkyp.vhd @@ -0,0 +1,264 @@ +library ieee; + use ieee.std_logic_1164.all; + use ieee.std_logic_unsigned.all; + +entity zxkyp is + port + ( + clock50 : in std_logic; + led : out std_logic; + -- + sramWr : out std_logic; + sramData : inout std_logic_vector( 7 downto 0); + sramAddr : out std_logic_vector(18 downto 0); + -- + videoRgb : out std_logic_vector( 8 downto 0); + videoSync : out std_logic_vector( 1 downto 0); + videoStdn : out std_logic_vector( 1 downto 0); + -- + ear : in std_logic; + audio : out std_logic_vector(1 downto 0); + -- + ps2 : inout std_logic_vector(1 downto 0); + -- + sdClock : out std_logic; + sdCs : out std_logic; + sdDi : out std_logic; + sdDo : in std_logic + ); +end; + +architecture structural of zxkyp is + + signal clock14 : std_logic; + signal clock70 : std_logic; + signal clock35 : std_logic; + + signal boot : std_logic; + + signal reset : std_logic; + signal pause : std_logic; + signal mreq : std_logic; + signal iorq : std_logic; + signal nmi : std_logic; + signal int : std_logic; + signal m1 : std_logic; + signal rd : std_logic; + signal wr : std_logic; + signal data : std_logic_vector( 7 downto 0); + signal addr : std_logic_vector(15 downto 0); + + signal v : std_logic; + signal h : std_logic; + signal r : std_logic; + signal g : std_logic; + signal b : std_logic; + signal i : std_logic; + signal mic : std_logic; + signal speaker : std_logic; + + signal automap : std_logic; + signal conmem : std_logic; + signal mapram : std_logic; + signal page : std_logic_vector( 3 downto 0); + + signal cpuData : std_logic_vector( 7 downto 0); + signal ulaData : std_logic_vector( 7 downto 0); + + signal romCs : std_logic; + signal romData : std_logic_vector( 7 downto 0); + + signal ramCs : std_logic; + signal ramWr : std_logic; + signal ramData : std_logic_vector( 7 downto 0); + signal ramAddr : std_logic_vector(18 downto 0); + + signal vramCs : std_logic; + signal vramWe : std_logic; + signal vramAddr : std_logic_vector(12 downto 0); + signal vramData : std_logic_vector( 7 downto 0); + + signal dromCs : std_logic; + signal dromData : std_logic_vector( 7 downto 0); + + signal sdOe : std_logic; + signal sdAc : std_logic; + signal sdData : std_logic_vector( 7 downto 0); + +begin + + Umultiboot : entity work.multiboot port map + ( + clk_icap => clock14, + mrst_n => boot + ); + Uclock : entity work.clock port map + ( + clock50 => clock50, + clock14 => clock14, + clock70 => clock70, + clock35 => clock35 + ); + Ucpu : entity work.tv80n port map + ( + clk => clock35, + reset_n => reset, + wait_n => pause, + mreq_n => mreq, + iorq_n => iorq, + nmi_n => nmi, + int_n => int, + m1_n => m1, + rd_n => rd, + wr_n => wr, + dout => cpuData, + di => data, + a => addr, + busrq_n => '1', + busak_n => open, + halt_n => open, + rfsh_n => open + ); + Uula : entity work.ula port map + ( + cpuClock => clock35, + iorq => iorq, + rd => rd, + wr => wr, + a0 => addr(0), + di => cpuData, + do => ulaData, + -- + vramClock => clock70, + vramData => vramData, + vramAddr => vramAddr, + int => int, + v => v, + h => h, + r => r, + g => g, + b => b, + i => i, + -- + ear => ear, + mic => mic, + speaker => speaker, + -- + rows => addr(15 downto 8), + boot => boot, + reset => reset, + nmi => nmi, + ps2 => ps2 + ); + Udiv : entity work.div port map + ( + clock => clock35, + reset => reset, + mreq => mreq, + iorq => iorq, + m1 => m1, + rd => rd, + wr => wr, + di => cpuData, + a => addr, + -- + automap => automap, + conmem => conmem, + mapram => mapram, + page => page + ); + Umixer: entity work.mixer port map + ( + clock => clock35, + reset => reset, + speaker => speaker, + ear => ear, + mic => mic, + l => audio(0), + r => audio(1) + ); + Urom : entity work.rom port map + ( + clka => clock35, + ena => romCs, + douta => romData, + addra => addr(13 downto 0) + ); + Udrom : entity work.drom port map + ( + clka => clock35, + ena => dromCs, + douta => dromData, + addra => addr(12 downto 0) + ); + Uram : entity work.ram port map + ( + wr => ramWr, + di => cpuData, + do => ramData, + a => ramAddr, + -- + sramWr => sramWr, + sramData => sramData, + sramAddr => sramAddr + ); + Uvram : entity work.vram port map + ( + clka => clock35, + ena => vramCs, + wea(0) => vramWe, + dina => cpuData, + addra => addr(12 downto 0), + -- + clkb => clock70, + doutb => vramData, + addrb => vramAddr + ); + Usd : entity work.sd port map + ( + clock => clock14, + pause => pause, + iorq => iorq, + rd => rd, + wr => wr, + oe => sdOe, + di => cpuData, + do => sdData, + a => addr, + -- + sdClock => sdClock, + sdCs => sdAc, + sdDi => sdDi, + sdDo => sdDo + ); + + sdCs <= sdAc; + led <= not sdAc; + + vramCs <= '1' when mreq = '0' and addr(15 downto 13) = "010" else '0'; + dromCs <= '1' when mreq = '0' and addr(15 downto 13) = "000" and (conmem = '1' or automap = '1') and mapram = '0' else '0'; + romCs <= '1' when mreq = '0' and addr(15 downto 14) = "00" and conmem = '0' and automap = '0' else '0'; + ramCs <= '1' when (mreq = '0' and addr(15 downto 13) = "000" and (conmem = '1' or automap = '1') and mapram = '1') + or (mreq = '0' and addr(15 downto 13) = "001" and (conmem = '1' or automap = '1')) + or (mreq = '0' and addr(15 downto 14) = "01") + or (mreq = '0' and addr(15) = '1') + else '0'; + + vramWe <= not (mreq or wr) when addr(15 downto 13) = "010" else '0'; + ramWr <= mreq or wr; + + ramAddr <= "01"&x"3"&addr(12 downto 0) when mreq = '0' and addr(15 downto 13) = "000" and (conmem = '1' or automap = '1') and mapram = '1' + else "01"&page&addr(12 downto 0) when mreq = '0' and addr(15 downto 13) = "001" and (conmem = '1' or automap = '1') + else "00"&"0"&addr; + + data <= sdData when iorq = '0' and sdOe = '0' + else ramData when ramCs = '1' + else romData when romCs = '1' + else dromData when dromCs = '1' + else ulaData; + + videoRgb <= (r&'0'&r)&(g&'0'&g)&(b&'0'&b) when i = '0' else (r&r&r)&(g&g&g)&(b&b&b); + videoSync <= '1'&(v and h); + videoStdn <= "01"; + +end; diff --git a/cores/KypSpectrum/zxkyp_zxuno_v4.ucf b/cores/KypSpectrum/zxkyp_zxuno_v4.ucf new file mode 100644 index 0000000..f9727a4 --- /dev/null +++ b/cores/KypSpectrum/zxkyp_zxuno_v4.ucf @@ -0,0 +1,93 @@ +# +# +# + +# LED ######################################################################### + +NET "led" LOC="P11" | IOSTANDARD = LVCMOS33; + +# Clock ####################################################################### + +NET "clock50" LOC="P55" | IOSTANDARD = LVCMOS33 | PERIOD=20ns; + +# SRAM ######################################################################## + +NET "sramWr" LOC="P121" | IOSTANDARD = LVCMOS33 | SLEW=FAST; + +NET "sramData<7>" LOC="P126" | IOSTANDARD = LVCMOS33 | SLEW=FAST; +NET "sramData<6>" LOC="P119" | IOSTANDARD = LVCMOS33 | SLEW=FAST; +NET "sramData<5>" LOC="P117" | IOSTANDARD = LVCMOS33 | SLEW=FAST; +NET "sramData<4>" LOC="P115" | IOSTANDARD = LVCMOS33 | SLEW=FAST; +NET "sramData<3>" LOC="P123" | IOSTANDARD = LVCMOS33 | SLEW=FAST; +NET "sramData<2>" LOC="P124" | IOSTANDARD = LVCMOS33 | SLEW=FAST; +NET "sramData<1>" LOC="P127" | IOSTANDARD = LVCMOS33 | SLEW=FAST; +NET "sramData<0>" LOC="P132" | IOSTANDARD = LVCMOS33 | SLEW=FAST; + +#NET "sramAddr<20>" LOC="P143" | IOSTANDARD = LVCMOS33 | SLEW=FAST; +#NET "sramAddr<19>" LOC="P105" | IOSTANDARD = LVCMOS33 | SLEW=FAST; +NET "sramAddr<18>" LOC="P142" | IOSTANDARD = LVCMOS33 | SLEW=FAST; +NET "sramAddr<17>" LOC="P140" | IOSTANDARD = LVCMOS33 | SLEW=FAST; +NET "sramAddr<16>" LOC="P138" | IOSTANDARD = LVCMOS33 | SLEW=FAST; +NET "sramAddr<15>" LOC="P131" | IOSTANDARD = LVCMOS33 | SLEW=FAST; +NET "sramAddr<14>" LOC="P111" | IOSTANDARD = LVCMOS33 | SLEW=FAST; +NET "sramAddr<13>" LOC="P100" | IOSTANDARD = LVCMOS33 | SLEW=FAST; +NET "sramAddr<12>" LOC="P101" | IOSTANDARD = LVCMOS33 | SLEW=FAST; +NET "sramAddr<11>" LOC="P102" | IOSTANDARD = LVCMOS33 | SLEW=FAST; +NET "sramAddr<10>" LOC="P104" | IOSTANDARD = LVCMOS33 | SLEW=FAST; +NET "sramAddr<9>" LOC="P112" | IOSTANDARD = LVCMOS33 | SLEW=FAST; +NET "sramAddr<8>" LOC="P114" | IOSTANDARD = LVCMOS33 | SLEW=FAST; +NET "sramAddr<7>" LOC="P116" | IOSTANDARD = LVCMOS33 | SLEW=FAST; +NET "sramAddr<6>" LOC="P118" | IOSTANDARD = LVCMOS33 | SLEW=FAST; +NET "sramAddr<5>" LOC="P120" | IOSTANDARD = LVCMOS33 | SLEW=FAST; +NET "sramAddr<4>" LOC="P133" | IOSTANDARD = LVCMOS33 | SLEW=FAST; +NET "sramAddr<3>" LOC="P134" | IOSTANDARD = LVCMOS33 | SLEW=FAST; +NET "sramAddr<2>" LOC="P137" | IOSTANDARD = LVCMOS33 | SLEW=FAST; +NET "sramAddr<1>" LOC="P139" | IOSTANDARD = LVCMOS33 | SLEW=FAST; +NET "sramAddr<0>" LOC="P141" | IOSTANDARD = LVCMOS33 | SLEW=FAST; + +# Video ####################################################################### + +NET "videoRgb<8>" LOC="P81" | IOSTANDARD = LVCMOS33 | SLEW=FAST; +NET "videoRgb<7>" LOC="P80" | IOSTANDARD = LVCMOS33 | SLEW=FAST; +NET "videoRgb<6>" LOC="P79" | IOSTANDARD = LVCMOS33 | SLEW=FAST; +NET "videoRgb<5>" LOC="P84" | IOSTANDARD = LVCMOS33 | SLEW=FAST; +NET "videoRgb<4>" LOC="P83" | IOSTANDARD = LVCMOS33 | SLEW=FAST; +NET "videoRgb<3>" LOC="P82" | IOSTANDARD = LVCMOS33 | SLEW=FAST; +NET "videoRgb<2>" LOC="P93" | IOSTANDARD = LVCMOS33 | SLEW=FAST; +NET "videoRgb<1>" LOC="P92" | IOSTANDARD = LVCMOS33 | SLEW=FAST; +NET "videoRgb<0>" LOC="P88" | IOSTANDARD = LVCMOS33 | SLEW=FAST; + +NET "videoSync<1>" LOC="P85" | IOSTANDARD = LVCMOS33 | SLEW=FAST; # vs +NET "videoSync<0>" LOC="P87" | IOSTANDARD = LVCMOS33 | SLEW=FAST; # hs + +NET "videoStdn<1>" LOC="P66" | IOSTANDARD = LVCMOS33; # stdn <= "10" NTSC +NET "videoStdn<0>" LOC="P67" | IOSTANDARD = LVCMOS33; # stdn <= "01" PAL + +# Audio ####################################################################### + +NET "ear" LOC="P94" | IOSTANDARD = LVCMOS33 | SLEW=FAST; + +NET "audio<0>" LOC="P10" | IOSTANDARD = LVCMOS33 | SLEW=FAST; # left +NET "audio<1>" LOC="P9" | IOSTANDARD = LVCMOS33 | SLEW=FAST; # right + +# PS/2 ######################################################################## + +NET "ps2<0>" LOC="P99" | IOSTANDARD = LVCMOS33 | SLEW=FAST | PULLUP; # keyboard clock +NET "ps2<1>" LOC="P98" | IOSTANDARD = LVCMOS33 | SLEW=FAST | PULLUP; # keyboard data + +# SD/MMC ###################################################################### + +NET "sdClock" LOC="P75" | IOSTANDARD = LVCMOS33 | SLEW=FAST; # clock +NET "sdCs" LOC="P59" | IOSTANDARD = LVCMOS33 | SLEW=FAST; # cs +NET "sdDi" LOC="P74" | IOSTANDARD = LVCMOS33 | SLEW=FAST; # di +NET "sdDo" LOC="P78" | IOSTANDARD = LVCMOS33 | SLEW=FAST; # do + +# SPI Flash ################################################################### + +#NET "flash_clk" LOC="P70" | IOSTANDARD = LVCMOS33 | SLEW=FAST; +#NET "flash_cs" LOC="P38" | IOSTANDARD = LVCMOS33 | SLEW=FAST; +#NET "flash_si" LOC="P64" | IOSTANDARD = LVCMOS33 | SLEW=FAST; +#NET "flash_so" LOC="P65" | IOSTANDARD = LVCMOS33 | SLEW=FAST; + +#NET "flash_ext1" LOC="P62" | IOSTANDARD = LVCMOS33; +#NET "flash_ext2" LOC="P61" | IOSTANDARD = LVCMOS33; diff --git a/cores/KypSpectrum/zxpp.prj b/cores/KypSpectrum/zxpp.prj deleted file mode 100644 index dbba7fa..0000000 --- a/cores/KypSpectrum/zxpp.prj +++ /dev/null @@ -1,18 +0,0 @@ -vhdl work "ipcore_dir/hiram.vhd" -vhdl work "ipcore_dir/loram.vhd" -vhdl work "ipcore_dir/rom.vhd" -verilog work "tv80_reg.v" -verilog work "tv80_mcode.v" -verilog work "tv80_alu.v" -vhdl work "video.vhd" -vhdl work "vga.vhd" -verilog work "tv80_core.v" -vhdl work "dac.vhd" -vhdl work "ym2149.vhd" -vhdl work "ula.vhd" -verilog work "tv80n.v" -vhdl work "ps2.vhd" -vhdl work "mixer.vhd" -vhdl work "keyboard.vhd" -vhdl work "clock.vhd" -vhdl work "zxpp.vhd" diff --git a/cores/KypSpectrum/zxpp.vhd b/cores/KypSpectrum/zxpp.vhd deleted file mode 100644 index 407f236..0000000 --- a/cores/KypSpectrum/zxpp.vhd +++ /dev/null @@ -1,240 +0,0 @@ -library ieee; - use ieee.std_logic_1164.all; - -entity zxpp is - port - ( - netCLK : in std_logic; - netRST : in std_logic; - netNMI : in std_logic; - -- - ps2CLK : inout std_logic; - ps2DAT : inout std_logic; - -- - joyBTN : in std_logic_vector(4 downto 0); - joyGND : out std_logic; - -- - audioL : out std_logic; - audioR : out std_logic; - audioEAR : in std_logic; - audioGND : out std_logic; - -- - videoV : out std_logic; - videoH : out std_logic; - videoR : out std_logic_vector(3 downto 0); - videoG : out std_logic_vector(3 downto 0); - videoB : out std_logic_vector(3 downto 0) - ); -end; - -architecture structural of zxpp is - - signal clockVGA : std_logic; - signal clockCPU : std_logic; - signal clockPS2 : std_logic; - signal clockDAC : std_logic; - signal clockAY : std_logic; - -- - signal reset : std_logic; - signal kreset : std_logic; - -- - signal iorq : std_logic; - signal mreq : std_logic; - signal nmi : std_logic; - signal int : std_logic; - signal rd : std_logic; - signal wr : std_logic; - signal a : std_logic_vector(15 downto 0); - signal d : std_logic_vector( 7 downto 0); - signal dcpu : std_logic_vector( 7 downto 0); - -- - signal ear : std_logic; - signal mic : std_logic; - signal speaker : std_logic; - signal va : std_logic_vector(12 downto 0); - signal vd : std_logic_vector( 7 downto 0); - signal dula : std_logic_vector( 7 downto 0); --- - signal rps2 : std_logic; - signal dps2 : std_logic_vector( 7 downto 0); - signal keys : std_logic_vector( 4 downto 0); --- - signal erom : std_logic; - signal drom : std_logic_vector( 7 downto 0); - -- - signal eloram : std_logic; - signal wloram : std_logic; - signal dloram : std_logic_vector( 7 downto 0); - -- - signal ehiram : std_logic; - signal whiram : std_logic; - signal dhiram : std_logic_vector( 7 downto 0); - -- - signal aybdir : std_logic; - signal aybc1 : std_logic; - signal ayoe : std_logic; - signal aydata : std_logic_vector( 7 downto 0); - signal ayaudio : std_logic_vector( 7 downto 0); - -- - signal kempston : std_logic_vector( 7 downto 0); - -begin - - Uclock: entity work.clock port map - ( - clock32 => netCLK, - clockVGA => clockVGA, - clockCPU => clockCPU, - clockPS2 => clockPS2, - clockDAC => clockDAC, - clockAY => clockAY - ); - Ucpu: entity work.tv80n port map - ( - clk => clockCPU, - reset_n => reset, - busrq_n => '1', - wait_n => '1', - busak_n => open, - halt_n => open, - rfsh_n => open, - m1_n => open, - mreq_n => mreq, - iorq_n => iorq, - nmi_n => nmi, - int_n => int, - rd_n => rd, - wr_n => wr, - a => a, - di => d, - dout => dcpu - ); - Uula: entity work.ula port map - ( - clockVGA => clockVGA, - clockCPU => clockCPU, - keys => keys, - iorq => iorq, - int => int, - rd => rd, - wr => wr, - a0 => a(0), - di => dcpu, - do => dula, - ear => audioEAR, - mic => mic, - speaker => speaker, - va => va, - vd => vd, - hs => videoH, - vs => videoV, - rgb(11 downto 8) => videoR, - rgb( 7 downto 4) => videoG, - rgb( 3 downto 0) => videoB - ); - Ups2: entity work.ps2 port map - ( - clock => clockPS2, - ps2c => ps2CLK, - ps2d => ps2DAT, - received => rps2, - scancode => dps2 - ); - Ukeyboard: entity work.keyboard port map - ( - received => rps2, - scancode => dps2, - rows => a(15 downto 8), - cols => keys, - reset => kreset - ); - Urom: entity work.rom port map - ( - clka => clockCPU, - ena => erom, - addra => a(13 downto 0), - douta => drom - ); - Uloram: entity work.loram port map - ( - clka => clockCPU, - ena => eloram, - wea(0) => wloram, - addra => a(13 downto 0), - dina => dcpu, - douta => dloram, - clkb => clockVGA, - web(0) => '0', - addrb(13) => '0', - addrb(12 downto 0) => va, - dinb => (others => '0'), - doutb => vd - ); - Uhiram: entity work.hiram port map - ( - clka => clockCPU, - ena => ehiram, - wea(0) => whiram, - addra => a(14 downto 0), - dina => dcpu, - douta => dhiram - ); - Uym2149: entity work.ym2149 port map - ( - clk => clockAY, - ena => '1', - reset_l => reset, - i_da => dcpu, - o_da => aydata, - o_da_oe_l => ayoe, - i_a9_l => '0', - i_a8 => '1', - i_bc2 => '1', - i_bc1 => aybc1, - i_bdir => aybdir, - i_sel_l => '0', - o_audio => ayaudio, - i_ioa => (others => '0'), - o_ioa => open, - o_ioa_oe_l => open, - i_iob => (others => '0'), - o_iob => open, - o_iob_oe_l => open - ); - Umixer: entity work.mixer port map - ( - clock => clockDAC, - reset => reset, - speaker => speaker, - ear => audioEAR, - mic => mic, - ay => ayaudio, - l => audioL, - r => audioR - ); - - reset <= not (netRST or kreset); - nmi <= not netNMI; - - audioGND <= '0'; - joyGND <= '0'; - kempston <= not ("111"&joyBTN(4)&joyBTN(0)&joyBTN(1)&joyBTN(2)&joyBTN(3)); - - erom <= '1' when mreq = '0' and a(15 downto 14) = "00" else '0'; - eloram <= '1' when mreq = '0' and a(15 downto 14) = "01" else '0'; - ehiram <= '1' when mreq = '0' and a(15) = '1' else '0'; - - wloram <= not wr; - whiram <= not wr; - - aybdir <= '1' when iorq = '0' and wr = '0' and a(15) = '1' and a(1 downto 0) = "01" else '0'; - aybc1 <= '1' when iorq = '0' and a(15 downto 14) = "11" and a(1 downto 0) = "01" else '0'; - - d <= dhiram when ehiram = '1' and rd = '0' - else dloram when eloram = '1' and rd = '0' - else drom when erom = '1' and rd = '0' - else kempston when iorq = '0' and rd = '0' and a(7 downto 5) = "000" - else aydata when ayoe = '0' - else dula; - -end; diff --git a/cores/MasterSystem/make.bat b/cores/MasterSystem/make.bat index 44e4cc5..7602649 100644 --- a/cores/MasterSystem/make.bat +++ b/cores/MasterSystem/make.bat @@ -3,7 +3,7 @@ SET speed=3 SET ruta_ucf=src\sms SET ruta_bat=..\ call %ruta_bat%genxst.bat -rem call %ruta_bat%generar.bat v2 -rem call %ruta_bat%generar.bat v3 -call %ruta_bat%generar.bat v4 -rem call %ruta_bat%generar.bat Ap +rem call %ruta_bat%generar.bat v2 ZZ2 +rem call %ruta_bat%generar.bat v3 ZZ3 +call %ruta_bat%generar.bat v4 ZX1 +rem call %ruta_bat%generar.bat Ap ZZA diff --git a/cores/NES/xilinx/make.bat b/cores/NES/xilinx/make.bat index 5b2b567..6ff9fb0 100644 --- a/cores/NES/xilinx/make.bat +++ b/cores/NES/xilinx/make.bat @@ -3,7 +3,7 @@ SET speed=2 SET ruta_ucf=..\src\nes SET ruta_bat=..\..\ call %ruta_bat%genxst.bat -rem call %ruta_bat%generar.bat v2 -rem call %ruta_bat%generar.bat v3 -call %ruta_bat%generar.bat v4 -rem call %ruta_bat%generar.bat Ap +rem call %ruta_bat%generar.bat v2 ZZ2 +rem call %ruta_bat%generar.bat v3 ZZ3 +call %ruta_bat%generar.bat v4 ZX1 +rem call %ruta_bat%generar.bat Ap ZZA diff --git a/cores/Oric/build/make.bat b/cores/Oric/build/make.bat index 63c063b..e472a4f 100644 --- a/cores/Oric/build/make.bat +++ b/cores/Oric/build/make.bat @@ -3,6 +3,6 @@ SET speed=3 SET ruta_ucf=..\source\oric SET ruta_bat=..\..\ call %ruta_bat%genxst.bat -rem call %ruta_bat%generar.bat v2_v3 -call %ruta_bat%generar.bat v4 -rem call %ruta_bat%generar.bat Ap +rem call %ruta_bat%generar.bat v2_v3 ZZ3 +call %ruta_bat%generar.bat v4 ZX1 +rem call %ruta_bat%generar.bat Ap ZZA diff --git a/cores/SamCoupe/make.bat b/cores/SamCoupe/make.bat index 2221e59..81de64a 100644 --- a/cores/SamCoupe/make.bat +++ b/cores/SamCoupe/make.bat @@ -3,7 +3,7 @@ SET speed=2 SET ruta_ucf=SamCoupe SET ruta_bat=..\ call %ruta_bat%genxst.bat -rem call %ruta_bat%generar.bat v2 -rem call %ruta_bat%generar.bat v3 -call %ruta_bat%generar.bat v4 -rem call %ruta_bat%generar.bat Ap +rem call %ruta_bat%generar.bat v2 ZZ2 +rem call %ruta_bat%generar.bat v3 ZZ3 +call %ruta_bat%generar.bat v4 ZX1 +rem call %ruta_bat%generar.bat Ap ZZA diff --git a/cores/Spectrum/make.bat b/cores/Spectrum/make.bat index 79c5399..dff5845 100644 --- a/cores/Spectrum/make.bat +++ b/cores/Spectrum/make.bat @@ -3,7 +3,7 @@ SET speed=2 SET ruta_ucf=pines SET ruta_bat=..\ call %ruta_bat%genxst.bat -rem call %ruta_bat%generar.bat v2 -rem call %ruta_bat%generar.bat v3 -call %ruta_bat%generar.bat v4 -rem call %ruta_bat%generar.bat Ap +rem call %ruta_bat%generar.bat v2 ZZ2 +rem call %ruta_bat%generar.bat v3 ZZ3 +call %ruta_bat%generar.bat v4 ZX1 +rem call %ruta_bat%generar.bat Ap ZZA diff --git a/cores/VIC20/ise/make.bat b/cores/VIC20/ise/make.bat index a48299a..f66228d 100644 --- a/cores/VIC20/ise/make.bat +++ b/cores/VIC20/ise/make.bat @@ -3,6 +3,6 @@ SET speed=3 SET ruta_ucf=..\source\vic20 SET ruta_bat=..\..\ call %ruta_bat%genxst.bat -call %ruta_bat%generar.bat v2_v3 -call %ruta_bat%generar.bat v4 -call %ruta_bat%generar.bat Ap +rem call %ruta_bat%generar.bat v2_v3 ZZ3 +call %ruta_bat%generar.bat v4 ZX1 +rem call %ruta_bat%generar.bat Ap ZZA diff --git a/cores/generar.bat b/cores/generar.bat index 1adf1bb..7c3cfe5 100644 --- a/cores/generar.bat +++ b/cores/generar.bat @@ -4,3 +4,4 @@ call %ruta_bat%par -intstyle ise -w -ol high -mt 4 %machine%_map.ncd %machi call %ruta_bat%trce -intstyle ise -v 3 -s %speed% -n 3 -fastpaths -xml %machine%.twx %machine%.ncd -o %machine%.twr %machine%.pcf call %ruta_bat%bitgen -intstyle ise -f %machine%.ut %machine%.ncd copy /y %machine%.bit %machine%.%1.bit +%ruta_bat%..\firmware\bit2bin %machine%.bit COREn.%2 diff --git a/cores/test/barras_de_color/make.bat b/cores/test/barras_de_color/make.bat index eab008a..88eb4f5 100644 --- a/cores/test/barras_de_color/make.bat +++ b/cores/test/barras_de_color/make.bat @@ -3,6 +3,6 @@ SET speed=2 SET ruta_ucf=pines SET ruta_bat=..\..\ call %ruta_bat%genxst.bat -rem call %ruta_bat%generar.bat v2_v3 -call %ruta_bat%generar.bat v4 -rem call %ruta_bat%generar.bat Ap +rem call %ruta_bat%generar.bat v2_v3 ZZ3 +call %ruta_bat%generar.bat v4 ZX1 +rem call %ruta_bat%generar.bat Ap ZZA diff --git a/cores/test/test_pal_interlaced_progressive/make.bat b/cores/test/test_pal_interlaced_progressive/make.bat index 1e0b22d..8b85b84 100644 --- a/cores/test/test_pal_interlaced_progressive/make.bat +++ b/cores/test/test_pal_interlaced_progressive/make.bat @@ -3,6 +3,6 @@ SET speed=2 SET ruta_ucf=pines SET ruta_bat=..\..\ call %ruta_bat%genxst.bat -rem call %ruta_bat%generar.bat v2_v3 -call %ruta_bat%generar.bat v4 -rem call %ruta_bat%generar.bat Ap +rem call %ruta_bat%generar.bat v2_v3 ZZ3 +call %ruta_bat%generar.bat v4 ZX1 +rem call %ruta_bat%generar.bat Ap ZZA diff --git a/cores/test/test_pal_ntsc/make.bat b/cores/test/test_pal_ntsc/make.bat index b289257..cf0106d 100644 --- a/cores/test/test_pal_ntsc/make.bat +++ b/cores/test/test_pal_ntsc/make.bat @@ -3,6 +3,6 @@ SET speed=2 SET ruta_ucf=pines SET ruta_bat=..\..\ call %ruta_bat%genxst.bat -rem call %ruta_bat%generar.bat v2_v3 -call %ruta_bat%generar.bat v4 -rem call %ruta_bat%generar.bat Ap +rem call %ruta_bat%generar.bat v2_v3 ZZ3 +call %ruta_bat%generar.bat v4 ZX1 +rem call %ruta_bat%generar.bat Ap ZZA diff --git a/cores/test/test_sram_y_video/make.bat b/cores/test/test_sram_y_video/make.bat index c804d76..deb62af 100644 --- a/cores/test/test_sram_y_video/make.bat +++ b/cores/test/test_sram_y_video/make.bat @@ -3,7 +3,7 @@ SET speed=2 SET ruta_ucf=pines SET ruta_bat=..\..\ call %ruta_bat%genxst.bat -rem call %ruta_bat%generar.bat v2 -rem call %ruta_bat%generar.bat v3 -call %ruta_bat%generar.bat v4 -rem call %ruta_bat%generar.bat Ap +rem call %ruta_bat%generar.bat v2 ZZ2 +rem call %ruta_bat%generar.bat v3 ZZ3 +call %ruta_bat%generar.bat v4 ZX1 +rem call %ruta_bat%generar.bat Ap ZZA