diff --git a/LICENSE b/LICENSE index f219548a..9a86ca1f 100644 --- a/LICENSE +++ b/LICENSE @@ -1,4 +1,4 @@ -Copyright 2017 Regents of the University of California and The Board +Copyright 2018 Regents of the University of California and The Board of Regents for the Oklahoma Agricultural and Mechanical College (acting for and on behalf of Oklahoma State University) diff --git a/README.md b/README.md index fdf637eb..58c8e505 100644 --- a/README.md +++ b/README.md @@ -7,9 +7,14 @@ https://github.com/mguthaus/OpenRAM/blob/master/OpenRAM_ICCAD_2016_presentation. The OpenRAM compiler has very few dependencies: * ngspice-26 (or later) or HSpice I-2013.12-1 (or later) or CustomSim 2017 (or later) * Python 2.7 and higher (currently excludes Python 3 and up) +* Python numpy * a setup script for each technology * a technology directory for each technology with the base cells +If you want to perform DRC and LVS, you will need either: +* Calibre (for FreePDK45 or SCMOS) +* Magic + Netgen (for SCMOS only) + You must set two environment variables: OPENRAM_HOME should point to the compiler source directory. OPENERAM_TECH should point to a root technology directory that contains subdirs of all other technologies. @@ -36,6 +41,12 @@ For example, in csh/tcsh, add to your .tcshrc: We do not distribute the PDK, but you may get it from: https://www.eda.ncsu.edu/wiki/FreePDK45:Contents +If you are using SCMOS, you should install Magic and netgen from: + http://opencircuitdesign.com/magic/ + http://opencircuitdesign.com/netgen/ +In addition, you will need to install the MOSIS SCMOS rules for scn3me_subm +that are part of QFlow: + http://opencircuitdesign.com/qflow/ # DIRECTORY STRUCTURE diff --git a/compiler/Makefile b/compiler/Makefile new file mode 100644 index 00000000..af3eb2c0 --- /dev/null +++ b/compiler/Makefile @@ -0,0 +1,116 @@ +CUR_DIR = $(shell pwd) +TEST_DIR = ${CUR_DIR}/tests + +MAKEFLAGS += -j 2 + +# Library test +LIBRARY_TESTS = \ +01_library_drc_test.py \ +02_library_lvs_test.py + +# Technology and DRC tests (along with ptx) +TECH_TESTS = \ +03_contact_test.py \ +03_ptx_1finger_pmos_test.py \ +03_ptx_4finger_nmos_test.py \ +03_path_test.py \ +03_ptx_3finger_nmos_test.py \ +03_ptx_4finger_pmos_test.py \ +03_ptx_1finger_nmos_test.py \ +03_ptx_3finger_pmos_test.py \ +03_wire_test.py + +# Parameterized cells +PCELLS_TESTS = \ +04_pinv_1x_test.py \ +04_pinv_1x_beta_test.py \ +04_pinv_2x_test.py \ +04_pinv_10x_test.py \ +04_pnand2_test.py \ +04_pnor2_test.py \ +04_pnand3_test.py\ +04_wordline_driver_test.py \ +04_precharge_test.py + +# Dynamically generated modules and arrays +MODULE_TESTS = \ +05_bitcell_array_test.py \ +06_hierarchical_decoder_test.py \ +06_hierarchical_predecode2x4_test.py \ +06_hierarchical_predecode3x8_test.py \ +07_single_level_column_mux_array_test.py \ +08_precharge_array_test.py \ +09_sense_amp_array_test.py \ +10_write_driver_array_test.py \ +11_ms_flop_array_test.py \ +12_tri_gate_array_test.py \ +13_delay_chain_test.py \ +14_replica_bitline_test.py \ +16_control_logic_test.py + +# Top-level SRAM configurations +TOP_TESTS = \ +19_multi_bank_test.py \ +19_single_bank_test.py \ +20_sram_1bank_test.py \ +20_sram_2bank_test.py \ +20_sram_4bank_test.py + +# All simulation tests. +CHAR_TESTS = \ +21_hspice_delay_test.py \ +21_ngspice_delay_test.py \ +21_ngspice_setuphold_test.py \ +21_hspice_setuphold_test.py \ +22_sram_func_test.py \ +22_pex_func_test_with_pinv.py \ +23_lib_sram_prune_test.py \ +23_lib_sram_test.py + +# Keep the model lib test here since it is fast +# and doesn't need simulation. +USAGE_TESTS = \ +23_lib_sram_model_test.py \ +24_lef_sram_test.py \ +25_verilog_sram_test.py + +ALL_FILES = \ +${LIBRARY_TESTS} \ +${TECH_TESTS} \ +${PCELLS_TESTS} \ +${MODULES_TESTS} \ +${TOP_TESTS} \ +${CHAR_TESTS} \ +${USAGE_TESTS} + +default all: + +$(ALL_FILES): + python ${TEST_DIR}/$@ -t freepdk45 + python ${TEST_DIR}/$@ -t scn3me_subm + +# Library tests +lib: ${LIBRARY_TESTS} + +# Transistor and wire tests +tech: ${TECH_TESTS} + +# Dynamically generated cells +pcells: ${PCELLS_TESTS} + +# Dynamically generated modules +modules: ${MODULES_TESTS} + +# Top level SRAM tests +top: ${TOP_TESTS} + +# Timing and characterization tests +char: ${CHAR_TESTS} + +# Usage and file generation +usage: ${USAGE_TESTS} + +clean: + find . -name \*.pyc -exec rm {} \; + find . -name \*~ -exec rm {} \; + diff --git a/compiler/bank.py b/compiler/bank.py index fb97d552..142d2678 100644 --- a/compiler/bank.py +++ b/compiler/bank.py @@ -23,7 +23,7 @@ class bank(design.design): "bitcell_array", "sense_amp_array", "precharge_array", "column_mux_array", "write_driver_array", "tri_gate_array"] for mod_name in mod_list: - config_mod_name = getattr(OPTS.config, mod_name) + config_mod_name = getattr(OPTS, mod_name) class_file = reload(__import__(config_mod_name)) mod_class = getattr(class_file , config_mod_name) setattr (self, "mod_"+mod_name, mod_class) @@ -99,8 +99,10 @@ class bank(design.design): self.add_precharge_array() if self.col_addr_size > 0: + # The m2 width is because the 6T cell may have vias on the boundary edge for + # overlapping when making the array + self.column_mux_height = self.column_mux_array.height + 0.5*self.m2_width self.add_column_mux_array() - self.column_mux_height = self.column_mux_array.height else: self.column_mux_height = 0 if self.col_addr_size > 1: # size 1 is from addr FF @@ -234,8 +236,8 @@ class bank(design.design): """ Adding Precharge """ # The wells must be far enough apart - # We use two well spacings because the bitcells tend to have a shared rail in the height - y_offset = self.bitcell_array.height + 2*drc["pwell_to_nwell"] + # The enclosure is for the well and the spacig is to the bitcell wells + y_offset = self.bitcell_array.height + 2*drc["pwell_to_nwell"] + drc["well_enclosure_active"] self.precharge_array_inst=self.add_inst(name="precharge_array", mod=self.precharge_array, offset=vector(0,y_offset)) @@ -249,7 +251,7 @@ class bank(design.design): def add_column_mux_array(self): """ Adding Column Mux when words_per_row > 1 . """ - y_offset = self.column_mux_array.height + y_offset = self.column_mux_height self.col_mux_array_inst=self.add_inst(name="column_mux_array", mod=self.column_mux_array, offset=vector(0,y_offset).scale(-1,-1)) @@ -434,7 +436,8 @@ class bank(design.design): # Place the col decoder just to the left of the control bus - x_off = self.m2_pitch + self.overall_central_bus_width + self.col_decoder.width + gap = max(drc["pwell_to_nwell"], 2*self.m2_pitch) + x_off = gap + self.overall_central_bus_width + self.col_decoder.width # Place the col decoder below the the address flops which are below the row decoder (lave some space for wells) vertical_gap = max(drc["pwell_to_nwell"], 2*self.m2_pitch) y_off = self.decoder.predecoder_height + self.msf_address.width + self.col_decoder.height + 2*vertical_gap diff --git a/compiler/bitcell_array.py b/compiler/bitcell_array.py index c3800cea..44318206 100644 --- a/compiler/bitcell_array.py +++ b/compiler/bitcell_array.py @@ -21,12 +21,13 @@ class bitcell_array(design.design): self.column_size = cols self.row_size = rows - c = reload(__import__(OPTS.config.bitcell)) - self.mod_bitcell = getattr(c, OPTS.config.bitcell) + c = reload(__import__(OPTS.bitcell)) + self.mod_bitcell = getattr(c, OPTS.bitcell) self.cell = self.mod_bitcell() self.add_mod(self.cell) - self.height = self.row_size*self.cell.height + # We increase it by a well enclosure so the precharges don't overlap our wells + self.height = self.row_size*self.cell.height + drc["well_enclosure_active"] self.width = self.column_size*self.cell.width self.add_pins() @@ -115,8 +116,8 @@ class bitcell_array(design.design): gnd_pins = self.cell_inst[0,col].get_pins("gnd") for gnd_pin in gnd_pins: # avoid duplicates by only doing even rows - # also skip if it is not the full height (a through rail) - if gnd_pin.layer=="metal2" and col%2 == 0 and gnd_pin.height()>=self.cell.height: + # also skip if it isn't the pin that spans the entire cell down to the bottom + if gnd_pin.layer=="metal2" and gnd_pin.by()==lower_y: self.add_layout_pin(text="gnd", layer="metal2", offset=gnd_pin.ll(), diff --git a/compiler/characterizer/__init__.py b/compiler/characterizer/__init__.py index 3bf4829a..08d443a9 100644 --- a/compiler/characterizer/__init__.py +++ b/compiler/characterizer/__init__.py @@ -8,22 +8,22 @@ import setup_hold debug.info(2,"Initializing characterizer...") -spice_exe = "" +OPTS.spice_exe = "" if not OPTS.analytical_delay: if OPTS.spice_name != "": - spice_exe=find_exe(OPTS.spice_name) - if spice_exe=="": + OPTS.spice_exe=find_exe(OPTS.spice_name) + if OPTS.spice_exe=="": debug.error("{0} not found. Unable to perform characterization.".format(OPTS.spice_name),1) else: - (choice,spice_exe) = get_tool("spice",["xa", "hspice", "ngspice", "ngspice.exe"]) - OPTS.spice_name = choice + (OPTS.spice_name,OPTS.spice_exe) = get_tool("spice",["xa", "hspice", "ngspice", "ngspice.exe"]) # set the input dir for spice files if using ngspice if OPTS.spice_name == "ngspice": os.environ["NGSPICE_INPUT_DIR"] = "{0}".format(OPTS.openram_temp) - if spice_exe == "": + if OPTS.spice_exe == "": debug.error("No recognizable spice version found. Unable to perform characterization.",1) + diff --git a/compiler/characterizer/delay.py b/compiler/characterizer/delay.py index 094d2e15..8a7b4bfe 100644 --- a/compiler/characterizer/delay.py +++ b/compiler/characterizer/delay.py @@ -40,9 +40,9 @@ class delay(): def write_stimulus(self, period, load, slew): - """Creates a stimulus file for simulations to probe a certain bitcell, given an address and data-position of the data-word - (probe-address form: '111010000' LSB=0, MSB=1) - (probe_data form: number corresponding to the bit position of data-bus, begins with position 0) + """ Creates a stimulus file for simulations to probe a bitcell at a given clock period. + Address and bit were previously set with set_probe(). + Input slew (in ns) and output capacitive load (in fF) are required for charaterization. """ self.check_arguments() @@ -52,7 +52,7 @@ class delay(): # creates and opens stimulus file for writing temp_stim = "{0}/stim.sp".format(OPTS.openram_temp) self.sf = open(temp_stim, "w") - self.sf.write("* Stimulus for period of {0}n load={1} slew={2}\n\n".format(period,load,slew)) + self.sf.write("* Stimulus for period of {0}n load={1}fF slew={2}ns\n\n".format(period,load,slew)) # include files in stimulus file model_list = tech.spice["fet_models"] + [self.sram_sp_file] @@ -116,8 +116,8 @@ class delay(): self.write_measures(period) - # run until the last cycle time - stimuli.write_control(self.sf,self.cycle_times[-1]) + # run until the end of the cycle time + stimuli.write_control(self.sf,self.cycle_times[-1] + period) self.sf.close() @@ -125,11 +125,14 @@ class delay(): # meas statement for delay and power measurements self.sf.write("* Measure statements for delay and power\n") + for comment in self.cycle_comments: + self.sf.write("* {}\n".format(comment)) + trig_name = "clk" targ_name = "{0}".format("d[{0}]".format(self.probe_data)) trig_val = targ_val = 0.5 * self.vdd # add measure statments for delay0 - # delay the target to measure after the negetive edge + # delay the target to measure after the negative edge stimuli.gen_meas_delay(stim_file=self.sf, meas_name="DELAY0", trig_name=trig_name, @@ -138,7 +141,8 @@ class delay(): targ_val=targ_val, trig_dir="FALL", targ_dir="FALL", - td=self.cycle_times[self.read0_cycle]+0.5*period) + trig_td=self.cycle_times[self.read0_cycle], + targ_td=self.cycle_times[self.read0_cycle]+0.5*period) stimuli.gen_meas_delay(stim_file=self.sf, meas_name="DELAY1", @@ -148,7 +152,8 @@ class delay(): targ_val=targ_val, trig_dir="FALL", targ_dir="RISE", - td=self.cycle_times[self.read1_cycle]+0.5*period) + trig_td=self.cycle_times[self.read1_cycle], + targ_td=self.cycle_times[self.read1_cycle]+0.5*period) stimuli.gen_meas_delay(stim_file=self.sf, meas_name="SLEW0", @@ -158,7 +163,8 @@ class delay(): targ_val=0.1*self.vdd, trig_dir="FALL", targ_dir="FALL", - td=self.cycle_times[self.read0_cycle]+0.5*period) + trig_td=self.cycle_times[self.read0_cycle], + targ_td=self.cycle_times[self.read0_cycle]+0.5*period) stimuli.gen_meas_delay(stim_file=self.sf, meas_name="SLEW1", @@ -168,7 +174,8 @@ class delay(): targ_val=0.9*self.vdd, trig_dir="RISE", targ_dir="RISE", - td=self.cycle_times[self.read1_cycle]+0.5*period) + trig_td=self.cycle_times[self.read1_cycle], + targ_td=self.cycle_times[self.read1_cycle]+0.5*period) # add measure statements for power t_initial = self.cycle_times[self.write0_cycle] @@ -238,12 +245,14 @@ class delay(): # if it failed or the read was longer than a period if type(delay0)!=float or type(delay1)!=float or type(slew1)!=float or type(slew0)!=float: + debug.info(2,"Failed simulation: period {0} load {1} slew {2}, delay0={3}n delay1={4}ns slew0={5}n slew1={6}n".format(period,load,slew,delay0,delay1,slew0,slew1)) return (False,0,0,0,0) delay0 *= 1e9 delay1 *= 1e9 slew0 *= 1e9 slew1 *= 1e9 if delay0>period or delay1>period or slew0>period or slew1>period: + debug.info(2,"UNsuccessful simulation: period {0} load {1} slew {2}, delay0={3}n delay1={4}ns slew0={5}n slew1={6}n".format(period,load,slew,delay0,delay1,slew0,slew1)) return (False,0,0,0,0) else: debug.info(2,"Successful simulation: period {0} load {1} slew {2}, delay0={3}n delay1={4}ns slew0={5}n slew1={6}n".format(period,load,slew,delay0,delay1,slew0,slew1)) @@ -364,7 +373,7 @@ class delay(): for slew in slews: for load in loads: (success, delay1, slew1, delay0, slew0) = self.run_simulation(feasible_period, load, slew) - debug.check(success,"Couldn't run a simulation properly.\n") + debug.check(success,"Couldn't run a simulation. slew={0} load={1}\n".format(slew,load)) LH_delay.append(delay1) HL_delay.append(delay0) LH_slew.append(slew1) @@ -394,44 +403,52 @@ class delay(): of the cycles to do a timing evaluation. The last time is the end of the simulation and does not need a rising edge.""" + self.cycle_comments = [] # idle cycle, no operation t_current = period self.cycle_times = [] - # cycle0: W data 1 address 1111 to initialize cell to a value self.cycle_times.append(t_current) + self.cycle_comments.append("Cycle0 {}ns: W data 1 address 11..11 to initialize cell".format(t_current)) t_current += period # cycle1: W data 0 address 1111 (to ensure a write of value works) self.cycle_times.append(t_current) self.write0_cycle=1 + self.cycle_comments.append("Cycle1 {}ns: W data 0 address 11..11 (to ensure a write of value works)".format(t_current)) t_current += period # cycle2: W data 1 address 0000 (to clear the data bus cap) self.cycle_times.append(t_current) + self.cycle_comments.append("Cycle2 {}ns: W data 1 address 00..00 (to clear bus caps)".format(t_current)) t_current += period # cycle3: R data 0 address 1111 to check W0 works self.cycle_times.append(t_current) self.read0_cycle=3 + self.cycle_comments.append("Cycle3 {}ns: R data 0 address 11..11 to check W0 worked".format(t_current)) t_current += period # cycle4: W data 1 address 1111 (to ensure a write of value works) self.cycle_times.append(t_current) self.write1_cycle=4 + self.cycle_comments.append("Cycle4 {}ns: W data 1 address 11..11 (to ensure a write of value worked)".format(t_current)) t_current += period # cycle5: W data 0 address 0000 (to clear the data bus cap) self.cycle_times.append(t_current) + self.cycle_comments.append("Cycle5 {}ns: W data 0 address 00..00 (to clear bus caps)".format(t_current)) t_current += period # cycle6: R data 1 address 1111 to check W1 works self.cycle_times.append(t_current) self.read1_cycle=6 + self.cycle_comments.append("Cycle6 {}ns: R data 1 address 11..11 to check W1 worked".format(t_current)) t_current += period # cycle7: wait a clock period to end the simulation self.cycle_times.append(t_current) + self.cycle_comments.append("Cycle7 {}ns: Idle period to end simulation".format(t_current)) t_current += period diff --git a/compiler/characterizer/setup_hold.py b/compiler/characterizer/setup_hold.py index 919bb9b9..a184ffcb 100644 --- a/compiler/characterizer/setup_hold.py +++ b/compiler/characterizer/setup_hold.py @@ -145,7 +145,8 @@ class setup_hold(): targ_val=targ_val, trig_dir="RISE", targ_dir=dout_rise_or_fall, - td=1.9*self.period) + trig_td=1.9*self.period, + targ_td=1.9*self.period) targ_name = "data" # Start triggers right after initialize value is returned to normal @@ -158,7 +159,8 @@ class setup_hold(): targ_val=targ_val, trig_dir="RISE", targ_dir=din_rise_or_fall, - td=1.2*self.period) + trig_td=1.2*self.period, + targ_td=1.2*self.period) diff --git a/compiler/characterizer/stimuli.py b/compiler/characterizer/stimuli.py index d367b518..7986f11e 100644 --- a/compiler/characterizer/stimuli.py +++ b/compiler/characterizer/stimuli.py @@ -218,17 +218,18 @@ def get_inverse_value(value): debug.error("Invalid value to get an inverse of: {0}".format(value)) -def gen_meas_delay(stim_file, meas_name, trig_name, targ_name, trig_val, targ_val, trig_dir, targ_dir, td): +def gen_meas_delay(stim_file, meas_name, trig_name, targ_name, trig_val, targ_val, trig_dir, targ_dir, trig_td, targ_td): """Creates the .meas statement for the measurement of delay""" - measure_string=".meas tran {0} TRIG v({1}) VAL={2} {3}=1 TD={7}n TARG v({4}) VAL={5} {6}=1 TD={7}n\n\n" + measure_string=".meas tran {0} TRIG v({1}) VAL={2} {3}=1 TD={4}n TARG v({5}) VAL={6} {7}=1 TD={8}n\n\n" stim_file.write(measure_string.format(meas_name, trig_name, trig_val, trig_dir, + trig_td, targ_name, targ_val, targ_dir, - td)) + targ_td)) def gen_meas_power(stim_file, meas_name, t_initial, t_final): """Creates the .meas statement for the measurement of avg power""" @@ -246,7 +247,13 @@ def gen_meas_power(stim_file, meas_name, t_initial, t_final): def write_control(stim_file, end_time): # UIC is needed for ngspice to converge stim_file.write(".TRAN 5p {0}n UIC\n".format(end_time)) - stim_file.write(".OPTIONS POST=1 RUNLVL=4 PROBE\n") + if OPTS.spice_name == "ngspice": + # ngspice sometimes has convergence problems if not using gear method + # which is more accurate, but slower than the default trapezoid method + stim_file.write(".OPTIONS POST=1 RUNLVL=4 PROBE method=gear\n") + else: + stim_file.write(".OPTIONS POST=1 RUNLVL=4 PROBE\n") + # create plots for all signals stim_file.write("* probe is used for hspice/xa, while plot is used in ngspice\n") if OPTS.debug_level>0: @@ -265,7 +272,10 @@ def write_control(stim_file, end_time): def write_include(stim_file, models): """Writes include statements, inputs are lists of model files""" for item in list(models): - stim_file.write(".include \"{0}\"\n\n".format(item)) + if os.path.isfile(item): + stim_file.write(".include \"{0}\"\n\n".format(item)) + else: + debug.error("Could not find spice model: {0}\nSet SPICE_MODEL_DIR to over-ride path.\n".format(item)) def write_supply(stim_file): @@ -282,26 +292,26 @@ def run_sim(): temp_stim = "{0}stim.sp".format(OPTS.openram_temp) import datetime start_time = datetime.datetime.now() + debug.check(OPTS.spice_exe!="","No spice simulator has been found.") - from characterizer import spice_exe if OPTS.spice_name == "xa": # Output the xa configurations here. FIXME: Move this to write it once. xa_cfg = open("{}xa.cfg".format(OPTS.openram_temp), "w") xa_cfg.write("set_sim_level -level 7\n") xa_cfg.write("set_powernet_level 7 -node vdd\n") xa_cfg.close() - cmd = "{0} {1} -c {2}xa.cfg -o {2}xa -mt 20".format(spice_exe, + cmd = "{0} {1} -c {2}xa.cfg -o {2}xa -mt 2".format(OPTS.spice_exe, temp_stim, OPTS.openram_temp) valid_retcode=0 elif OPTS.spice_name == "hspice": # TODO: Should make multithreading parameter a configuration option - cmd = "{0} -mt 2 -i {1} -o {2}timing".format(spice_exe, + cmd = "{0} -mt 2 -i {1} -o {2}timing".format(OPTS.spice_exe, temp_stim, OPTS.openram_temp) valid_retcode=0 else: - cmd = "{0} -b -o {2}timing.lis {1}".format(spice_exe, + cmd = "{0} -b -o {2}timing.lis {1}".format(OPTS.spice_exe, temp_stim, OPTS.openram_temp) # for some reason, ngspice-25 returns 1 when it only has acceptable warnings diff --git a/compiler/characterizer/trim_spice.py b/compiler/characterizer/trim_spice.py index a5025d60..f53ac184 100644 --- a/compiler/characterizer/trim_spice.py +++ b/compiler/characterizer/trim_spice.py @@ -45,23 +45,33 @@ class trim_spice(): # Always start fresh if we do multiple reductions self.sp_buffer = self.spice - - # Find the row and column indices for the removals - # Convert address froms tring to int - address = int(address,2) - array_row = address >> self.col_addr_size - # Which word in the array (0 if only one word) - if self.col_addr_size>0: - lower_mask = int(self.col_addr_size-1) - lower_address = address & lower_mask - else: - lower_address=0 - # Which bit in the array - array_bit = lower_address*self.word_size + data_bit + # Split up the address and convert to an int + wl_address = int(address[self.col_addr_size:],2) + if self.col_addr_size>1: + col_address = int(address[0:self.col_addr_size],2) + else: + col_address = 0 # 1. Keep cells in the bitcell array based on WL and BL - wl_name = "wl[{}]".format(array_row) - bl_name = "bl[{}]".format(array_bit) + wl_name = "wl[{}]".format(wl_address) + bl_name = "bl[{}]".format(self.words_per_row*data_bit + col_address) + + # Prepend info about the trimming + addr_msg = "Keeping {} address".format(address) + self.sp_buffer.insert(0, "* "+addr_msg) + debug.info(1,addr_msg) + data_msg = "Keeping {} data bit".format(data_bit) + self.sp_buffer.insert(0, "* "+data_msg) + debug.info(1,data_msg) + bl_msg = "Keeping {} (trimming other BLs)".format(bl_name) + wl_msg = "Keeping {} (trimming other WLs)".format(wl_name) + self.sp_buffer.insert(0, "* "+bl_msg) + debug.info(1,bl_msg) + self.sp_buffer.insert(0, "* "+wl_msg) + debug.info(1,wl_msg) + self.sp_buffer.insert(0, "* It should NOT be used for LVS!!") + self.sp_buffer.insert(0, "* WARNING: This is a TRIMMED NETLIST.") + self.remove_insts("bitcell_array",[wl_name,bl_name]) # 2. Keep sense amps basd on BL diff --git a/compiler/contact.py b/compiler/contact.py index 7708da1b..c3fa810d 100644 --- a/compiler/contact.py +++ b/compiler/contact.py @@ -11,19 +11,34 @@ class contact(design.design): Creates a contact array minimum active or poly enclosure and metal1 enclosure. This class has enclosure on multiple sides of the contact whereas a via may have extension on two or four sides. + The well/implant_type is an option to add a select/implant layer enclosing the contact. This is + necessary to import layouts into Magic which requires the select to be in the same GDS + hierarchy as the contact. """ - def __init__(self, layer_stack, dimensions=[1,1]): - name = "{0}_{1}_{2}_{3}x{4}".format(layer_stack[0], - layer_stack[1], - layer_stack[2], - dimensions[0], - dimensions[1]) + def __init__(self, layer_stack, dimensions=[1,1], implant_type=None, well_type=None): + if implant_type or well_type: + name = "{0}_{1}_{2}_{3}x{4}_{5}{6}".format(layer_stack[0], + layer_stack[1], + layer_stack[2], + dimensions[0], + dimensions[1], + implant_type, + well_type) + else: + name = "{0}_{1}_{2}_{3}x{4}".format(layer_stack[0], + layer_stack[1], + layer_stack[2], + dimensions[0], + dimensions[1]) + design.design.__init__(self, name) debug.info(4, "create contact object {0}".format(name)) self.layer_stack = layer_stack self.dimensions = dimensions self.offset = vector(0,0) + self.implant_type = implant_type + self.well_type = well_type self.pins = [] # used for matching parm lengths self.create_layout() @@ -37,74 +52,112 @@ class contact(design.design): self.height = max(obj.offset.y + obj.height for obj in self.objs) self.width = max(obj.offset.x + obj.width for obj in self.objs) + # Do not include the select layer in the height/width + if self.implant_type and self.well_type: + self.create_implant_well_enclosures() + elif self.implant_type or self.well_type: + debug.error(-1,"Must define both implant and well type or none at all.") def setup_layers(self): (first_layer, via_layer, second_layer) = self.layer_stack self.first_layer_name = first_layer self.via_layer_name = via_layer + # Some technologies have a separate active contact from the poly contact + # We will use contact for DRC, but active_contact for output + if first_layer=="active" or second_layer=="active": + self.via_layer_name_expanded = "active_"+via_layer + else: + self.via_layer_name_expanded = via_layer self.second_layer_name = second_layer def setup_layout_constants(self): self.contact_width = drc["minwidth_{0}". format(self.via_layer_name)] - self.contact_to_contact = drc["{0}_to_{0}".format(self.via_layer_name)] - self.contact_pitch = self.contact_width + self.contact_to_contact + contact_to_contact = drc["{0}_to_{0}".format(self.via_layer_name)] + self.contact_pitch = self.contact_width + contact_to_contact self.contact_array_width = self.contact_width + (self.dimensions[0] - 1) * self.contact_pitch self.contact_array_height = self.contact_width + (self.dimensions[1] - 1) * self.contact_pitch - # FIME break this up - self.first_layer_horizontal_enclosure = max((drc["minwidth_{0}".format(self.first_layer_name)] - self.contact_array_width) / 2, - drc["{0}_enclosure_{1}".format(self.first_layer_name, self.via_layer_name)]) - self.first_layer_vertical_enclosure = max(utils.ceil((drc["minarea_{0}".format(self.first_layer_name)] - / (self.contact_array_width + 2 * self.first_layer_horizontal_enclosure) - self.contact_array_height) / 2), - (drc["minheight_{0}".format(self.first_layer_name)] - self.contact_array_height) / 2, - drc["{0}_extend_{1}".format(self.first_layer_name, self.via_layer_name)]) + # DRC rules + first_layer_minwidth = drc["minwidth_{0}".format(self.first_layer_name)] + first_layer_minarea = drc["minarea_{0}".format(self.first_layer_name)] + first_layer_enclosure = drc["{0}_enclosure_{1}".format(self.first_layer_name, self.via_layer_name)] + first_layer_extend = drc["{0}_extend_{1}".format(self.first_layer_name, self.via_layer_name)] + second_layer_minwidth = drc["minwidth_{0}".format(self.second_layer_name)] + second_layer_minarea = drc["minarea_{0}".format(self.second_layer_name)] + second_layer_enclosure = drc["{0}_enclosure_{1}".format(self.second_layer_name, self.via_layer_name)] + second_layer_extend = drc["{0}_extend_{1}".format(self.second_layer_name, self.via_layer_name)] - self.second_layer_horizontal_enclosure = max((drc["minwidth_{0}".format(self.second_layer_name)] - self.contact_array_width) / 2, - drc["{0}_enclosure_{1}".format(self.second_layer_name, self.via_layer_name)]) - self.second_layer_vertical_enclosure = max(utils.ceil((drc["minarea_{0}".format(self.second_layer_name)] - / (self.contact_array_width + 2 * self.second_layer_horizontal_enclosure) - self.contact_array_height) / 2), - (drc["minheight_{0}".format(self.second_layer_name)] - self.contact_array_height) / 2, - drc["{0}_extend_{1}".format(self.second_layer_name, self.via_layer_name)]) + self.first_layer_horizontal_enclosure = max((first_layer_minwidth - self.contact_array_width) / 2, + first_layer_enclosure) + self.first_layer_vertical_enclosure = max(utils.ceil((first_layer_minarea + / (self.contact_array_width + 2*self.first_layer_horizontal_enclosure) + - self.contact_array_height)/2), + (first_layer_minwidth - self.contact_array_height)/2, + first_layer_extend) + + self.second_layer_horizontal_enclosure = max((second_layer_minwidth - self.contact_array_width)/2, + second_layer_enclosure) + self.second_layer_vertical_enclosure = max(utils.ceil((second_layer_minarea + / (self.contact_array_width + 2*self.second_layer_horizontal_enclosure) + - self.contact_array_height)/2), + (second_layer_minwidth - self.contact_array_height)/2, + second_layer_extend) + + def create_contact_array(self): + """ Create the contact array at the origin""" # offset for the via array self.via_layer_position =vector(max(self.first_layer_horizontal_enclosure,self.second_layer_horizontal_enclosure), max(self.first_layer_vertical_enclosure,self.second_layer_vertical_enclosure)) - # this is if the first and second layers are different - self.first_layer_position = vector(max(self.second_layer_horizontal_enclosure - self.first_layer_horizontal_enclosure,0), - max(self.second_layer_vertical_enclosure - self.first_layer_vertical_enclosure,0)) - self.second_layer_position = vector(max(self.first_layer_horizontal_enclosure - self.second_layer_horizontal_enclosure,0), - max(self.first_layer_vertical_enclosure - self.second_layer_vertical_enclosure,0)) - def create_contact_array(self): - """ Create the contact array at the origin""" for i in range(self.dimensions[1]): offset = self.via_layer_position + vector(0, self.contact_pitch * i) for j in range(self.dimensions[0]): - self.add_rect(layer=self.via_layer_name, + self.add_rect(layer=self.via_layer_name_expanded, offset=offset, width=self.contact_width, height=self.contact_width) offset = offset + vector(self.contact_pitch,0) def create_first_layer_enclosure(self): - width = self.first_layer_width = self.contact_array_width \ - + 2 * self.first_layer_horizontal_enclosure - height = self.first_layer_height = self.contact_array_height \ - + 2 * self.first_layer_vertical_enclosure + # this is if the first and second layers are different + self.first_layer_position = vector(max(self.second_layer_horizontal_enclosure - self.first_layer_horizontal_enclosure,0), + max(self.second_layer_vertical_enclosure - self.first_layer_vertical_enclosure,0)) + + self.first_layer_width = self.contact_array_width + 2*self.first_layer_horizontal_enclosure + self.first_layer_height = self.contact_array_height + 2*self.first_layer_vertical_enclosure self.add_rect(layer=self.first_layer_name, offset=self.first_layer_position, - width=width, - height=height) + width=self.first_layer_width, + height=self.first_layer_height) def create_second_layer_enclosure(self): - width = self.second_layer_width = self.contact_array_width \ - + 2 * self.second_layer_horizontal_enclosure - height = self.second_layer_height = self.contact_array_height \ - + 2 * self.second_layer_vertical_enclosure + # this is if the first and second layers are different + self.second_layer_position = vector(max(self.first_layer_horizontal_enclosure - self.second_layer_horizontal_enclosure,0), + max(self.first_layer_vertical_enclosure - self.second_layer_vertical_enclosure,0)) + + self.second_layer_width = self.contact_array_width + 2*self.second_layer_horizontal_enclosure + self.second_layer_height = self.contact_array_height + 2*self.second_layer_vertical_enclosure self.add_rect(layer=self.second_layer_name, offset=self.second_layer_position, - width=width, - height=height) + width=self.second_layer_width, + height=self.second_layer_height) + def create_implant_well_enclosures(self): + implant_position = self.first_layer_position - [drc["implant_enclosure_active"]]*2 + implant_width = self.first_layer_width + 2*drc["implant_enclosure_active"] + implant_height = self.first_layer_height + 2*drc["implant_enclosure_active"] + self.add_rect(layer="{}implant".format(self.implant_type), + offset=implant_position, + width=implant_width, + height=implant_height) + well_position = self.first_layer_position - [drc["well_enclosure_active"]]*2 + well_width = self.first_layer_width + 2*drc["well_enclosure_active"] + well_height = self.first_layer_height + 2*drc["well_enclosure_active"] + self.add_rect(layer="{}well".format(self.well_type), + offset=well_position, + width=well_width, + height=well_height) + # This is not instantiated and used for calculations only. diff --git a/compiler/control_logic.py b/compiler/control_logic.py index de39e010..7a1e3851 100644 --- a/compiler/control_logic.py +++ b/compiler/control_logic.py @@ -59,15 +59,15 @@ class control_logic(design.design): self.inv16 = pinv(16) self.add_mod(self.inv16) - c = reload(__import__(OPTS.config.ms_flop_array)) - ms_flop_array = getattr(c, OPTS.config.ms_flop_array) + c = reload(__import__(OPTS.ms_flop_array)) + ms_flop_array = getattr(c, OPTS.ms_flop_array) self.msf_control = ms_flop_array(name="msf_control", columns=3, word_size=3) self.add_mod(self.msf_control) - c = reload(__import__(OPTS.config.replica_bitline)) - replica_bitline = getattr(c, OPTS.config.replica_bitline) + c = reload(__import__(OPTS.replica_bitline)) + replica_bitline = getattr(c, OPTS.replica_bitline) self.replica_bitline = replica_bitline(rows=int(math.ceil(self.num_rows / 10.0))) self.add_mod(self.replica_bitline) @@ -77,8 +77,6 @@ class control_logic(design.design): # These aren't for instantiating, but we use them to get the dimensions self.poly_contact_offset = vector(0.5*contact.poly.width,0.5*contact.poly.height) - # For different layer width vias - self.m1m2_offset_fix = vector(0,0.5*(drc["minwidth_metal2"]-drc["minwidth_metal1"])) # M1/M2 routing pitch is based on contacted pitch self.m1_pitch = max(contact.m1m2.width,contact.m1m2.height) + max(drc["metal1_to_metal1"],drc["metal2_to_metal2"]) self.m2_pitch = max(contact.m2m3.width,contact.m2m3.height) + max(drc["metal2_to_metal2"],drc["metal3_to_metal3"]) @@ -87,10 +85,6 @@ class control_logic(design.design): # Some cells may have pwell/nwell spacing problems too when the wells are different heights. self.cell_gap = max(self.m2_pitch,drc["pwell_to_nwell"]) - # Amount to shift a 90 degree rotated via from center-line path routing to it's offset - self.m1m2_via_offset = vector(contact.m1m2.first_layer_height,-0.5*drc["minwidth_metal2"]) - self.m2m3_via_offset = vector(contact.m2m3.first_layer_height,-0.5*drc["minwidth_metal3"]) - # First RAIL Parameters: gnd, oe, oebar, cs, we, clk_buf, clk_bar self.rail_1_start_x = 0 self.num_rails_1 = 8 @@ -275,7 +269,7 @@ class control_logic(design.design): mod=self.nand2, offset=self.tri_en_bar_offset, mirror="MX") - self.connect_inst(["oe", "clk_bar", "tri_en_bar", "vdd", "gnd"]) + self.connect_inst(["clk_bar", "oe", "tri_en_bar", "vdd", "gnd"]) x_off += self.nand2.width x_off += self.inv1.width + self.cell_gap @@ -326,6 +320,7 @@ class control_logic(design.design): x_off += self.inv1.width # BUFFER INVERTERS FOR W_EN + # FIXME: Can we remove these two invs and size the previous one? self.pre_w_en_bar_offset = vector(x_off, y_off) self.pre_w_en_bar=self.add_inst(name="inv_pre_w_en_bar", mod=self.inv1, @@ -512,11 +507,25 @@ class control_logic(design.design): offset=clk_buf_rail_position, rotate=90) - # clk_bar - self.connect_rail_from_left_m2m3(self.clk_bar,"Z","clk_bar") + # clk_bar, routes over the clock buffer vdd rail + clk_pin = self.clk_bar.get_pin("Z") + vdd_pin = self.clk_bar.get_pin("vdd") + # move the output pin up to metal2 self.add_via_center(layers=("metal1","via1","metal2"), - offset=self.clk_bar.get_pin("Z").rc(), + offset=clk_pin.rc(), rotate=90) + # route to a position over the supply rail + in_pos = vector(clk_pin.rx(), vdd_pin.cy()) + self.add_path("metal2",[clk_pin.rc(), in_pos]) + # connect that position to the control bus + rail_pos = vector(self.rail_1_x_offsets["clk_bar"], in_pos.y) + self.add_wire(("metal3","via2","metal2"),[in_pos, rail_pos]) + self.add_via_center(layers=("metal2","via2","metal3"), + offset=in_pos, + rotate=90) + self.add_via_center(layers=("metal2","via2","metal3"), + offset=rail_pos, + rotate=90) # clk_buf to msf control flops msf_clk_pos = self.msf_inst.get_pin("clk").bc() diff --git a/compiler/debug.py b/compiler/debug.py index a5502fda..7001373e 100644 --- a/compiler/debug.py +++ b/compiler/debug.py @@ -14,14 +14,13 @@ def check(check,str): index) = inspect.getouterframes(inspect.currentframe())[1] if not check: print("ERROR: file {0}: line {1}: {2}".format(os.path.basename(filename),line_number,str)) - sys.exit(-1) + assert 0 -def error(str,return_value=None): +def error(str,return_value=0): (frame, filename, line_number, function_name, lines, index) = inspect.getouterframes(inspect.currentframe())[1] print("ERROR: file {0}: line {1}: {2}".format(os.path.basename(filename),line_number,str)) - if return_value: - sys.exit(return_value) + assert return_value==0 def warning(str): (frame, filename, line_number, function_name, lines, diff --git a/compiler/delay_chain.py b/compiler/delay_chain.py index 6ac0f4e6..5a97f711 100644 --- a/compiler/delay_chain.py +++ b/compiler/delay_chain.py @@ -24,8 +24,8 @@ class delay_chain(design.design): self.num_inverters = 1 + sum(fanout_list) self.num_top_half = round(self.num_inverters / 2.0) - c = reload(__import__(OPTS.config.bitcell)) - self.mod_bitcell = getattr(c, OPTS.config.bitcell) + c = reload(__import__(OPTS.bitcell)) + self.mod_bitcell = getattr(c, OPTS.bitcell) self.bitcell = self.mod_bitcell() self.add_pins() diff --git a/compiler/design.py b/compiler/design.py index bed5de15..39ad1792 100644 --- a/compiler/design.py +++ b/compiler/design.py @@ -27,8 +27,13 @@ class design(hierarchy_spice.spice, hierarchy_layout.layout): # Check if the name already exists, if so, give an error # because each reference must be a unique name. - ok_list = ['ms_flop.ms_flop', 'bitcell.bitcell', 'contact.contact', - 'ptx.ptx', 'sram.sram', + # These modules ensure unique names or have no changes if they + # aren't unique + ok_list = ['ms_flop.ms_flop', + 'bitcell.bitcell', + 'contact.contact', + 'ptx.ptx', + 'sram.sram', 'hierarchical_predecode2x4.hierarchical_predecode2x4', 'hierarchical_predecode3x8.hierarchical_predecode3x8'] if name not in design.name_map: @@ -41,6 +46,7 @@ class design(hierarchy_spice.spice, hierarchy_layout.layout): def setup_drc_constants(self): """ These are some DRC constants used in many places in the compiler.""" from tech import drc + self.well_width = drc["minwidth_well"] self.poly_width = drc["minwidth_poly"] self.poly_space = drc["poly_to_poly"] self.m1_width = drc["minwidth_metal1"] @@ -49,7 +55,16 @@ class design(hierarchy_spice.spice, hierarchy_layout.layout): self.m2_space = drc["metal2_to_metal2"] self.m3_width = drc["minwidth_metal3"] self.m3_space = drc["metal3_to_metal3"] - + self.active_width = drc["minwidth_active"] + self.contact_width = drc["minwidth_contact"] + + self.poly_to_active = drc["poly_to_active"] + self.poly_extend_active = drc["poly_extend_active"] + self.contact_to_gate = drc["contact_to_gate"] + self.well_enclose_active = drc["well_enclosure_active"] + self.implant_enclose_active = drc["implant_enclosure_active"] + self.implant_space = drc["implant_to_implant"] + def get_layout_pins(self,inst): """ Return a map of pin locations of the instance offset """ # find the instance @@ -62,7 +77,7 @@ class design(hierarchy_spice.spice, hierarchy_layout.layout): return inst_map - def DRC_LVS(self): + def DRC_LVS(self, final_verification=False): """Checks both DRC and LVS for a module""" if OPTS.check_lvsdrc: tempspice = OPTS.openram_temp + "/temp.sp" @@ -70,7 +85,7 @@ class design(hierarchy_spice.spice, hierarchy_layout.layout): self.sp_write(tempspice) self.gds_write(tempgds) debug.check(verify.run_drc(self.name, tempgds) == 0,"DRC failed for {0}".format(self.name)) - debug.check(verify.run_lvs(self.name, tempgds, tempspice) == 0,"LVS failed for {0}".format(self.name)) + debug.check(verify.run_lvs(self.name, tempgds, tempspice, final_verification) == 0,"LVS failed for {0}".format(self.name)) os.remove(tempspice) os.remove(tempgds) @@ -82,14 +97,14 @@ class design(hierarchy_spice.spice, hierarchy_layout.layout): debug.check(verify.run_drc(self.name, tempgds) == 0,"DRC failed for {0}".format(self.name)) os.remove(tempgds) - def LVS(self): + def LVS(self, final_verification=False): """Checks LVS for a module""" if OPTS.check_lvsdrc: tempspice = OPTS.openram_temp + "/temp.sp" tempgds = OPTS.openram_temp + "/temp.gds" self.sp_write(tempspice) self.gds_write(tempgds) - debug.check(verify.run_lvs(self.name, tempgds, tempspice) == 0,"LVS failed for {0}".format(self.name)) + debug.check(verify.run_lvs(self.name, tempgds, tempspice, final_verification) == 0,"LVS failed for {0}".format(self.name)) os.remove(tempspice) os.remove(tempgds) diff --git a/compiler/example_config_freepdk45.py b/compiler/example_config_freepdk45.py index 07dc7a74..16545b2d 100644 --- a/compiler/example_config_freepdk45.py +++ b/compiler/example_config_freepdk45.py @@ -4,24 +4,6 @@ num_banks = 1 tech_name = "freepdk45" -output_path = "/tmp/mysram" +output_path = "temp" output_name = "sram_2_16_1_freepdk45" -decoder = "hierarchical_decoder" -ms_flop = "ms_flop" -ms_flop_array = "ms_flop_array" -control_logic = "control_logic" -bitcell_array = "bitcell_array" -sense_amp = "sense_amp" -sense_amp_array = "sense_amp_array" -precharge_array = "precharge_array" -column_mux_array = "single_level_column_mux_array" -write_driver = "write_driver" -write_driver_array = "write_driver_array" -tri_gate = "tri_gate" -tri_gate_array = "tri_gate_array" -wordline_driver = "wordline_driver" -replica_bitline = "replica_bitline" -replica_bitcell = "replica_bitcell" -bitcell = "bitcell" -delay_chain = "delay_chain" diff --git a/compiler/example_config_scn3me_subm.py b/compiler/example_config_scn3me_subm.py index 69922ef5..1145c5b2 100644 --- a/compiler/example_config_scn3me_subm.py +++ b/compiler/example_config_scn3me_subm.py @@ -1,27 +1,9 @@ -word_size = 1 +word_size = 2 num_words = 16 num_banks = 1 tech_name = "scn3me_subm" -output_path = "/tmp/mysram" +output_path = "temp" output_name = "sram_2_16_1_scn3me_subm" -decoder = "hierarchical_decoder" -ms_flop = "ms_flop" -ms_flop_array = "ms_flop_array" -control_logic = "control_logic" -bitcell_array = "bitcell_array" -sense_amp = "sense_amp" -sense_amp_array = "sense_amp_array" -precharge_array = "precharge_array" -column_mux_array = "single_level_column_mux_array" -write_driver = "write_driver" -write_driver_array = "write_driver_array" -tri_gate = "tri_gate" -tri_gate_array = "tri_gate_array" -wordline_driver = "wordline_driver" -replica_bitline = "replica_bitline" -replica_bitcell = "replica_bitcell" -bitcell = "bitcell" -delay_chain = "delay_chain" diff --git a/compiler/globals.py b/compiler/globals.py index 10490fa4..84b831f2 100644 --- a/compiler/globals.py +++ b/compiler/globals.py @@ -11,9 +11,6 @@ import sys import re import importlib -# Current version of OpenRAM. -VERSION = "1.01" - USAGE = "Usage: openram.py [options] \nUse -h for help.\n" # Anonymous object that will be the options @@ -50,22 +47,26 @@ def parse_args(): optparse.make_option("-r", "--remove_netlist_trimming", action="store_false", dest="trim_netlist", help="Disable removal of noncritical memory cells during characterization"), optparse.make_option("-c", "--characterize", action="store_false", dest="analytical_delay", - help="Perform characterization to calculate delays (default is analytical models)") + help="Perform characterization to calculate delays (default is analytical models)"), + optparse.make_option("-d", "--dontpurge", action="store_false", dest="purge_temp", + help="Don't purge the contents of the temp directory after a successful run") # -h --help is implicit. } parser = optparse.OptionParser(option_list=option_list, description="Compile and/or characterize an SRAM.", usage=USAGE, - version="OpenRAM v" + VERSION) + version="OpenRAM") (options, args) = parser.parse_args(values=OPTS) - # If we don't specify a tech, assume freepdk45. # This may be overridden when we read a config file though... if OPTS.tech_name == "": OPTS.tech_name = "freepdk45" - + # Alias SCMOS to AMI 0.5um + if OPTS.tech_name == "scmos": + OPTS.tech_name = "scn3me_subm" + return (options, args) def print_banner(): @@ -75,7 +76,7 @@ def print_banner(): return print("|==============================================================================|") - name = "OpenRAM Compiler v"+VERSION + name = "OpenRAM Compiler" print("|=========" + name.center(60) + "=========|") print("|=========" + " ".center(60) + "=========|") print("|=========" + "VLSI Design and Automation Lab".center(60) + "=========|") @@ -99,13 +100,13 @@ def init_openram(config_file): import_tech() + def get_tool(tool_type, preferences): """ Find which tool we have from a list of preferences and return the one selected and its full path. """ debug.info(2,"Finding {} tool...".format(tool_type)) - global OPTS for name in preferences: exe_name = find_exe(name) @@ -125,6 +126,8 @@ def read_config(config_file): config file is just a Python file that defines some config options. """ + global OPTS + # Create a full path relative to current dir unless it is already an abs path if not os.path.isabs(config_file): config_file = os.getcwd() + "/" + config_file @@ -140,18 +143,17 @@ def read_config(config_file): # Import the configuration file of which modules to use debug.info(1, "Configuration file is " + config_file + ".py") try: - OPTS.config = importlib.import_module(file_name) + config = importlib.import_module(file_name) except: debug.error("Unable to read configuration file: {0}".format(config_file),2) - # This path must be setup after the config file. - try: - # If path not set on command line, try config file. - if OPTS.output_path=="": - OPTS.output_path=OPTS.config.output_path - except: - # Default to current directory. - OPTS.output_path="." + for k,v in config.__dict__.items(): + # The command line will over-ride the config file + # except in the case of the tech name! This is because the tech name + # is sometimes used to specify the config file itself (e.g. unit tests) + if not k in OPTS.__dict__ or k=="tech_name": + OPTS.__dict__[k]=v + if not OPTS.output_path.endswith('/'): OPTS.output_path += "/" debug.info(1, "Output saved in " + OPTS.output_path) @@ -172,16 +174,15 @@ def end_openram(): """ Clean up openram for a proper exit """ cleanup_paths() - # Reset the static duplicate name checker for unit tests. - # This is needed for running unit tests. - import design - design.design.name_map=[] def cleanup_paths(): """ We should clean up the temp directory after execution. """ + if not OPTS.purge_temp: + debug.info(0,"Preserving temp directory: {}".format(OPTS.openram_temp)) + return if os.path.exists(OPTS.openram_temp): shutil.rmtree(OPTS.openram_temp, ignore_errors=True) @@ -242,7 +243,7 @@ def import_tech(): debug.info(2,"Importing technology: " + OPTS.tech_name) # Set the tech to the config file we read in instead of the command line value. - OPTS.tech_name = OPTS.config.tech_name + OPTS.tech_name = OPTS.tech_name # environment variable should point to the technology dir diff --git a/compiler/hierarchical_decoder.py b/compiler/hierarchical_decoder.py index c3cb6e0c..ac513c0e 100644 --- a/compiler/hierarchical_decoder.py +++ b/compiler/hierarchical_decoder.py @@ -21,8 +21,8 @@ class hierarchical_decoder(design.design): def __init__(self, rows): design.design.__init__(self, "hierarchical_decoder_{0}rows".format(rows)) - c = reload(__import__(OPTS.config.bitcell)) - self.mod_bitcell = getattr(c, OPTS.config.bitcell) + c = reload(__import__(OPTS.bitcell)) + self.mod_bitcell = getattr(c, OPTS.bitcell) self.bitcell_height = self.mod_bitcell.height self.pre2x4_inst = [] diff --git a/compiler/hierarchical_predecode.py b/compiler/hierarchical_predecode.py index 37ac5d8a..7e336405 100644 --- a/compiler/hierarchical_predecode.py +++ b/compiler/hierarchical_predecode.py @@ -19,8 +19,8 @@ class hierarchical_predecode(design.design): self.number_of_outputs = int(math.pow(2, self.number_of_inputs)) design.design.__init__(self, name="pre{0}x{1}".format(self.number_of_inputs,self.number_of_outputs)) - c = reload(__import__(OPTS.config.bitcell)) - self.mod_bitcell = getattr(c, OPTS.config.bitcell) + c = reload(__import__(OPTS.bitcell)) + self.mod_bitcell = getattr(c, OPTS.bitcell) self.bitcell_height = self.mod_bitcell.height @@ -252,7 +252,7 @@ class hierarchical_predecode(design.design): if self.number_of_inputs == 2: gate_lst = ["A","B"] else: - gate_lst = ["A","B","C"] + gate_lst = ["A","B","C"] # this will connect pins A,B or A,B,C for rail_pin,gate_pin in zip(index_lst,gate_lst): diff --git a/compiler/hierarchical_predecode2x4.py b/compiler/hierarchical_predecode2x4.py index 90f86f45..c621b81e 100644 --- a/compiler/hierarchical_predecode2x4.py +++ b/compiler/hierarchical_predecode2x4.py @@ -27,10 +27,10 @@ class hierarchical_predecode2x4(hierarchical_predecode): self.create_rails() self.add_input_inverters() self.add_output_inverters() - connections =[["in[0]", "in[1]", "Z[3]", "vdd", "gnd"], - ["inbar[0]", "in[1]", "Z[2]", "vdd", "gnd"], + connections =[["inbar[0]", "inbar[1]", "Z[0]", "vdd", "gnd"], ["in[0]", "inbar[1]", "Z[1]", "vdd", "gnd"], - ["inbar[0]", "inbar[1]", "Z[0]", "vdd", "gnd"]] + ["inbar[0]", "in[1]", "Z[2]", "vdd", "gnd"], + ["in[0]", "in[1]", "Z[3]", "vdd", "gnd"]] self.add_nand(connections) self.route() diff --git a/compiler/hierarchical_predecode3x8.py b/compiler/hierarchical_predecode3x8.py index 3f18661d..eff12549 100644 --- a/compiler/hierarchical_predecode3x8.py +++ b/compiler/hierarchical_predecode3x8.py @@ -27,26 +27,26 @@ class hierarchical_predecode3x8(hierarchical_predecode): self.create_rails() self.add_input_inverters() self.add_output_inverters() - connections=[["in[0]", "in[1]", "in[2]", "Z[7]", "vdd", "gnd"], - ["in[0]", "in[1]", "inbar[2]", "Z[6]", "vdd", "gnd"], - ["in[0]", "inbar[1]", "in[2]", "Z[5]", "vdd", "gnd"], - ["in[0]", "inbar[1]", "inbar[2]", "Z[4]", "vdd", "gnd"], - ["inbar[0]", "in[1]", "in[2]", "Z[3]", "vdd", "gnd"], + connections=[["inbar[0]", "inbar[1]", "inbar[2]", "Z[0]", "vdd", "gnd"], + ["in[0]", "inbar[1]", "inbar[2]", "Z[1]", "vdd", "gnd"], ["inbar[0]", "in[1]", "inbar[2]", "Z[2]", "vdd", "gnd"], - ["inbar[0]", "inbar[1]", "in[2]", "Z[1]", "vdd", "gnd"], - ["inbar[0]", "inbar[1]", "inbar[2]", "Z[0]", "vdd", "gnd"]] + ["in[0]", "in[1]", "inbar[2]", "Z[3]", "vdd", "gnd"], + ["inbar[0]", "inbar[1]", "in[2]", "Z[4]", "vdd", "gnd"], + ["in[0]", "inbar[1]", "in[2]", "Z[5]", "vdd", "gnd"], + ["inbar[0]", "in[1]", "in[2]", "Z[6]", "vdd", "gnd"], + ["in[0]", "in[1]", "in[2]", "Z[7]", "vdd", "gnd"]] self.add_nand(connections) self.route() def get_nand_input_line_combination(self): """ These are the decoder connections of the NAND gates to the A,B,C pins """ combination = [["Abar[0]", "Abar[1]", "Abar[2]"], - ["Abar[0]", "Abar[1]", "A[2]"], - ["Abar[0]", "A[1]", "Abar[2]"], - ["Abar[0]", "A[1]", "A[2]"], ["A[0]", "Abar[1]", "Abar[2]"], - ["A[0]", "Abar[1]", "A[2]"], + ["Abar[0]", "A[1]", "Abar[2]"], ["A[0]", "A[1]", "Abar[2]"], + ["Abar[0]", "Abar[1]", "A[2]"], + ["A[0]", "Abar[1]", "A[2]"], + ["Abar[0]", "A[1]", "A[2]"], ["A[0]", "A[1]", "A[2]"]] return combination diff --git a/compiler/hierarchy_layout.py b/compiler/hierarchy_layout.py index ef11de96..12edb1d9 100644 --- a/compiler/hierarchy_layout.py +++ b/compiler/hierarchy_layout.py @@ -60,21 +60,44 @@ class layout(lef.lef): def find_lowest_coords(self): """Finds the lowest set of 2d cartesian coordinates within this layout""" - - lowestx1 = min(obj.lx() for obj in self.objs if obj.name!="label") - lowesty1 = min(obj.by() for obj in self.objs if obj.name!="label") - lowestx2 = min(inst.lx() for inst in self.insts) - lowesty2 = min(inst.by() for inst in self.insts) - return vector(min(lowestx1, lowestx2), min(lowesty1, lowesty2)) + + if len(self.objs)>0: + lowestx1 = min(obj.lx() for obj in self.objs if obj.name!="label") + lowesty1 = min(obj.by() for obj in self.objs if obj.name!="label") + else: + lowestx1=lowesty1=None + if len(self.insts)>0: + lowestx2 = min(inst.lx() for inst in self.insts) + lowesty2 = min(inst.by() for inst in self.insts) + else: + lowestx2=lowesty2=None + if lowestx1==None: + return vector(lowestx2,lowesty2) + elif lowestx2==None: + return vector(lowestx1,lowesty1) + else: + return vector(min(lowestx1, lowestx2), min(lowesty1, lowesty2)) def find_highest_coords(self): """Finds the highest set of 2d cartesian coordinates within this layout""" - highestx1 = min(obj.rx() for obj in self.objs if obj.name!="label") - highesty1 = min(obj.uy() for obj in self.objs if obj.name!="label") - highestx2 = min(inst.rx() for inst in self.insts) - highesty2 = min(inst.uy() for inst in self.insts) - return vector(min(highestx1, highestx2), min(highesty1, highesty2)) + + if len(self.objs)>0: + highestx1 = max(obj.rx() for obj in self.objs if obj.name!="label") + highesty1 = max(obj.uy() for obj in self.objs if obj.name!="label") + else: + highestx1=highesty1=None + if len(self.insts)>0: + highestx2 = max(inst.rx() for inst in self.insts) + highesty2 = max(inst.uy() for inst in self.insts) + else: + highestx2=highesty2=None + if highestx1==None: + return vector(highestx2,highesty2) + elif highestx2==None: + return vector(highestx1,highesty1) + else: + return vector(max(highestx1, highestx2), max(highesty1, highesty2)) def translate_all(self, offset): @@ -143,9 +166,11 @@ class layout(lef.lef): debug.error("Nonrectilinear center rect!",-1) elif start.x!=end.x: offset = vector(0,0.5*minwidth_layer) + return self.add_rect(layer,start-offset,end.x-start.x,minwidth_layer) else: offset = vector(0.5*minwidth_layer,0) - return self.add_rect(layer,start-offset,end.x-start.x,minwidth_layer) + return self.add_rect(layer,start-offset,minwidth_layer,end.y-start.y) + def get_pin(self, text): @@ -308,42 +333,50 @@ class layout(lef.lef): layer_stack=layers, position_list=coordinates) - def add_contact(self, layers, offset, size=[1,1], mirror="R0", rotate=0): + def add_contact(self, layers, offset, size=[1,1], mirror="R0", rotate=0, implant_type=None, well_type=None): """ This is just an alias for a via.""" return self.add_via(layers=layers, offset=offset, size=size, mirror=mirror, - rotate=rotate) + rotate=rotate, + implant_type=implant_type, + well_type=well_type) - def add_contact_center(self, layers, offset, size=[1,1], mirror="R0", rotate=0): + def add_contact_center(self, layers, offset, size=[1,1], mirror="R0", rotate=0, implant_type=None, well_type=None): """ This is just an alias for a via.""" return self.add_via_center(layers=layers, offset=offset, size=size, mirror=mirror, - rotate=rotate) + rotate=rotate, + implant_type=implant_type, + well_type=well_type) - def add_via(self, layers, offset, size=[1,1], mirror="R0", rotate=0): + def add_via(self, layers, offset, size=[1,1], mirror="R0", rotate=0, implant_type=None, well_type=None): """ Add a three layer via structure. """ import contact via = contact.contact(layer_stack=layers, - dimensions=size) + dimensions=size, + implant_type=implant_type, + well_type=well_type) self.add_mod(via) - self.add_inst(name=via.name, - mod=via, - offset=offset, - mirror=mirror, - rotate=rotate) + inst=self.add_inst(name=via.name, + mod=via, + offset=offset, + mirror=mirror, + rotate=rotate) # We don't model the logical connectivity of wires/paths self.connect_inst([]) - return via + return inst - def add_via_center(self, layers, offset, size=[1,1], mirror="R0", rotate=0): + def add_via_center(self, layers, offset, size=[1,1], mirror="R0", rotate=0, implant_type=None, well_type=None): """ Add a three layer via structure by the center coordinate accounting for mirroring and rotation. """ import contact via = contact.contact(layer_stack=layers, - dimensions=size) + dimensions=size, + implant_type=implant_type, + well_type=well_type) debug.check(mirror=="R0","Use rotate to rotate vias instead of mirror.") @@ -363,14 +396,14 @@ class layout(lef.lef): self.add_mod(via) - self.add_inst(name=via.name, - mod=via, - offset=corrected_offset, - mirror=mirror, - rotate=rotate) + inst=self.add_inst(name=via.name, + mod=via, + offset=corrected_offset, + mirror=mirror, + rotate=rotate) # We don't model the logical connectivity of wires/paths self.connect_inst([]) - return via + return inst def add_ptx(self, offset, mirror="R0", rotate=0, width=1, mults=1, tx_type="nmos"): """Adds a ptx module to the design.""" @@ -379,12 +412,12 @@ class layout(lef.lef): mults=mults, tx_type=tx_type) self.add_mod(mos) - self.add_inst(name=mos.name, - mod=mos, - offset=offset, - mirror=mirror, - rotate=rotate) - return mos + inst=self.add_inst(name=mos.name, + mod=mos, + offset=offset, + mirror=mirror, + rotate=rotate) + return inst @@ -488,6 +521,26 @@ class layout(lef.lef): return blockages + def add_enclosure(self, insts, layer="nwell"): + """ Add a layer that surrounds the given instances. Useful + for creating wells, for example. Doesn't check for minimum widths or + spacings.""" + + xmin=insts[0].lx() + ymin=insts[0].by() + xmax=insts[0].rx() + ymax=insts[0].uy() + for inst in insts: + xmin = min(xmin, inst.lx()) + ymin = min(ymin, inst.by()) + xmax = max(xmax, inst.rx()) + ymax = max(ymax, inst.uy()) + + self.add_rect(layer=layer, + offset=vector(xmin,ymin), + width=xmax-xmin, + height=ymax-ymin) + def pdf_write(self, pdf_name): # NOTE: Currently does not work (Needs further research) #self.pdf_name = self.name + ".pdf" diff --git a/compiler/hierarchy_spice.py b/compiler/hierarchy_spice.py index e9d1bb8d..d218227e 100644 --- a/compiler/hierarchy_spice.py +++ b/compiler/hierarchy_spice.py @@ -126,6 +126,8 @@ class spice(verilog.verilog): return if self.pins == []: return + + # write out the first spice line (the subcircuit) sp.write("\n.SUBCKT {0} {1}\n".format(self.name, " ".join(self.pins))) @@ -146,9 +148,15 @@ class spice(verilog.verilog): # these are wires and paths if self.conns[i] == []: continue - sp.write("X{0} {1} {2}\n".format(self.insts[i].name, - " ".join(self.conns[i]), - self.insts[i].mod.name)) + if hasattr(self.insts[i].mod,"spice_device"): + sp.write(self.insts[i].mod.spice_device.format(self.insts[i].name, + " ".join(self.conns[i]))) + sp.write("\n") + + else: + sp.write("X{0} {1} {2}\n".format(self.insts[i].name, + " ".join(self.conns[i]), + self.insts[i].mod.name)) sp.write(".ENDS {0}\n".format(self.name)) @@ -158,6 +166,7 @@ class spice(verilog.verilog): #if os.path.isfile(self.sp_file): # sp.write("\n* {0}\n".format(self.sp_file)) sp.write("\n".join(self.spice)) + sp.write("\n") def sp_write(self, spname): diff --git a/compiler/ms_flop_array.py b/compiler/ms_flop_array.py index 2c837c20..ca51cda3 100644 --- a/compiler/ms_flop_array.py +++ b/compiler/ms_flop_array.py @@ -20,8 +20,8 @@ class ms_flop_array(design.design): design.design.__init__(self, name) debug.info(1, "Creating {}".format(self.name)) - c = reload(__import__(OPTS.config.ms_flop)) - self.mod_ms_flop = getattr(c, OPTS.config.ms_flop) + c = reload(__import__(OPTS.ms_flop)) + self.mod_ms_flop = getattr(c, OPTS.ms_flop) self.ms = self.mod_ms_flop("ms_flop") self.add_mod(self.ms) diff --git a/compiler/openram.py b/compiler/openram.py index d58191e0..64e32306 100755 --- a/compiler/openram.py +++ b/compiler/openram.py @@ -39,19 +39,19 @@ globals.print_banner() globals.init_openram(args[0]) # Check if all arguments are integers for bits, size, banks -if type(OPTS.config.word_size)!=int: - debug.error("{0} is not an integer in config file.".format(OPTS.config.word_size)) -if type(OPTS.config.num_words)!=int: - debug.error("{0} is not an integer in config file.".format(OPTS.config.sram_size)) -if type(OPTS.config.num_banks)!=int: - debug.error("{0} is not an integer in config file.".format(OPTS.config.num_banks)) +if type(OPTS.word_size)!=int: + debug.error("{0} is not an integer in config file.".format(OPTS.word_size)) +if type(OPTS.num_words)!=int: + debug.error("{0} is not an integer in config file.".format(OPTS.sram_size)) +if type(OPTS.num_banks)!=int: + debug.error("{0} is not an integer in config file.".format(OPTS.num_banks)) -if not OPTS.config.tech_name: +if not OPTS.tech_name: debug.error("Tech name must be specified in config file.") -word_size = OPTS.config.word_size -num_words = OPTS.config.num_words -num_banks = OPTS.config.num_banks +word_size = OPTS.word_size +num_words = OPTS.num_words +num_banks = OPTS.num_banks if (OPTS.output_name == ""): OPTS.output_name = "sram_{0}_{1}_{2}_{3}".format(word_size, @@ -79,10 +79,6 @@ s = sram.sram(word_size=word_size, num_banks=num_banks, name=OPTS.output_name) last_time=print_time("SRAM creation", datetime.datetime.now(), last_time) -# Measure design area -# Not working? -#cell_size = s.gds.measureSize(s.name) -#print("Area:", cell_size[0] * cell_size[1]) # Output the files for the resulting SRAM diff --git a/compiler/options.py b/compiler/options.py index c6d1f53c..6393a545 100644 --- a/compiler/options.py +++ b/compiler/options.py @@ -4,7 +4,8 @@ import os class options(optparse.Values): """ - Class for holding all of the OpenRAM options. + Class for holding all of the OpenRAM options. All of these options can be over-riden in a configuration file + that is the sole required command-line positional argument for openram.py. """ # This is the technology directory. @@ -13,6 +14,7 @@ class options(optparse.Values): tech_name = "" # This is the temp directory where all intermediate results are stored. openram_temp = "/tmp/openram_{0}_{1}_temp/".format(getpass.getuser(),os.getpid()) + #openram_temp = "/Users/{}/openram_temp/".format(getpass.getuser()) # This is the verbosity level to control debug information. 0 is none, 1 # is minimal, etc. debug_level = 0 @@ -23,9 +25,9 @@ class options(optparse.Values): # Should we print out the banner at startup print_banner = True # The DRC/LVS/PEX executable being used which is derived from the user PATH. - drc_exe = "" - lvs_exe = "" - pex_exe = "" + drc_exe = None + lvs_exe = None + pex_exe = None # The spice executable being used which is derived from the user PATH. spice_exe = "" # Run with extracted parasitics @@ -35,8 +37,32 @@ class options(optparse.Values): # Use detailed LEF blockages detailed_blockages = True # Define the output file paths - output_path = "" + output_path = "." # Define the output file base name - output_name = "" + output_name = "sram" # Use analytical delay models by default rather than (slow) characterization analytical_delay = True + # Purge the temp directory after a successful run (doesn't purge on errors, anyhow) + purge_temp = True + + + # These are the default modules that can be over-riden + decoder = "hierarchical_decoder" + ms_flop = "ms_flop" + ms_flop_array = "ms_flop_array" + control_logic = "control_logic" + bitcell_array = "bitcell_array" + sense_amp = "sense_amp" + sense_amp_array = "sense_amp_array" + precharge_array = "precharge_array" + column_mux_array = "single_level_column_mux_array" + write_driver = "write_driver" + write_driver_array = "write_driver_array" + tri_gate = "tri_gate" + tri_gate_array = "tri_gate_array" + wordline_driver = "wordline_driver" + replica_bitline = "replica_bitline" + replica_bitcell = "replica_bitcell" + bitcell = "bitcell" + delay_chain = "delay_chain" + diff --git a/compiler/pgate.py b/compiler/pgate.py index d8020368..0a258048 100644 --- a/compiler/pgate.py +++ b/compiler/pgate.py @@ -47,7 +47,7 @@ class pgate(design.design): debug.check(nmos_gate_pin.ll().x==pmos_gate_pin.ll().x, "Connecting unaligned gates not supported.") # Pick point on the left of NMOS and connect down to PMOS - nmos_gate_pos = nmos_gate_pin.ll() + vector(0.5*drc["minwidth_poly"],0) + nmos_gate_pos = nmos_gate_pin.ll() + vector(0.5*self.poly_width,0) pmos_gate_pos = vector(nmos_gate_pos.x,pmos_gate_pin.bc().y) self.add_path("poly",[nmos_gate_pos,pmos_gate_pos]) @@ -97,93 +97,117 @@ class pgate(design.design): def extend_wells(self, middle_position): """ Extend the n/p wells to cover whole cell """ - nwell_height = self.height - middle_position.y + # Add a rail width to extend the well to the top of the rail + max_y_offset = self.height + 0.5*self.m1_width + self.nwell_position = middle_position + nwell_height = max_y_offset - middle_position.y if info["has_nwell"]: self.add_rect(layer="nwell", offset=middle_position, width=self.well_width, height=nwell_height) self.add_rect(layer="vtg", - offset=middle_position, + offset=self.nwell_position, width=self.well_width, height=nwell_height) + pwell_position = vector(0,-0.5*self.m1_width) + pwell_height = middle_position.y-pwell_position.y if info["has_pwell"]: self.add_rect(layer="pwell", - offset=vector(0,0), + offset=pwell_position, width=self.well_width, - height=middle_position.y) + height=pwell_height) self.add_rect(layer="vtg", - offset=vector(0,0), + offset=pwell_position, width=self.well_width, - height=middle_position.y) + height=pwell_height) - def add_nwell_contact(self, nmos, nmos_pos): - """ Add an nwell contact next to the given nmos device. """ + def add_nwell_contact(self, pmos, pmos_pos): + """ Add an nwell contact next to the given pmos device. """ layer_stack = ("active", "contact", "metal1") - # To the right a spacing away from the nmos right active edge - nwell_contact_xoffset = nmos_pos.x + nmos.active_width + drc["active_to_body_active"] - nwell_contact_yoffset = nmos_pos.y - nwell_offset = vector(nwell_contact_xoffset, nwell_contact_yoffset) - # Offset by half a contact in x and y - nwell_offset += vector(0.5*nmos.active_contact.first_layer_width, - 0.5*nmos.active_contact.first_layer_height) - self.nwell_contact=self.add_contact_center(layers=layer_stack, - offset=nwell_offset) - self.add_rect_center(layer="metal1", - offset=nwell_offset.scale(1,0.5), - width=self.nwell_contact.second_layer_width, - height=nwell_offset.y) - # Now add the full active and implant for the NMOS - nwell_offset = nmos_pos + vector(nmos.active_width,0) - nwell_contact_width = drc["active_to_body_active"] + nmos.active_contact.width - self.add_rect(layer="active", - offset=nwell_offset, - width=nwell_contact_width, - height=nmos.active_height) - - implant_offset = nwell_offset + vector(drc["implant_to_implant"],0) - implant_width = nwell_contact_width - drc["implant_to_implant"] - self.add_rect(layer="pimplant", - offset=implant_offset, - width=implant_width, - height=nmos.active_height) - - - def add_pwell_contact(self, pmos, pmos_pos): - """ Add an pwell contact next to the given pmos device. """ - - layer_stack = ("active", "contact", "metal1") - - # To the right a spacing away from the pmos right active edge - pwell_contact_xoffset = pmos_pos.x + pmos.active_width + drc["active_to_body_active"] - pwell_contact_yoffset = pmos_pos.y + pmos.active_height - pmos.active_contact.height - pwell_offset = vector(pwell_contact_xoffset, pwell_contact_yoffset) - # Offset by half a contact - pwell_offset += vector(0.5*pmos.active_contact.first_layer_width, + contact_xoffset = pmos_pos.x + pmos.active_width + drc["active_to_body_active"] + # Must be at least an well enclosure of active down from the top of the well + # OR align the active with the top of PMOS active. + max_y_offset = self.height + 0.5*self.m1_width + contact_yoffset = min(pmos_pos.y + pmos.active_height - pmos.active_contact.first_layer_height, + max_y_offset - pmos.active_contact.first_layer_height/2 - self.well_enclose_active) + contact_offset = vector(contact_xoffset, contact_yoffset) + # Offset by half a contact in x and y + contact_offset += vector(0.5*pmos.active_contact.first_layer_width, 0.5*pmos.active_contact.first_layer_height) - self.pwell_contact=self.add_contact_center(layers=layer_stack, - offset=pwell_offset) + self.nwell_contact=self.add_contact_center(layers=layer_stack, + offset=contact_offset, + implant_type="n", + well_type="n") self.add_rect_center(layer="metal1", - offset=pwell_offset + vector(0,0.5*(self.height-pwell_offset.y)), - width=self.pwell_contact.second_layer_width, - height=self.height - pwell_offset.y) - # Now add the full active and implant for the PMOS - pwell_offset = pmos_pos + vector(pmos.active_width,0) - pwell_contact_width = drc["active_to_body_active"] + pmos.active_contact.width - self.add_rect(layer="active", - offset=pwell_offset, - width=pwell_contact_width, - height=pmos.active_height) - - - implant_offset = pwell_offset + vector(drc["implant_to_implant"],0) - implant_width = pwell_contact_width - drc["implant_to_implant"] - self.add_rect(layer="nimplant", - offset=implant_offset, - width=implant_width, - height=pmos.active_height) + offset=contact_offset + vector(0,0.5*(self.height-contact_offset.y)), + width=self.nwell_contact.mod.second_layer_width, + height=self.height - contact_offset.y) + + # Now add the full active and implant for the PMOS + #active_offset = pmos_pos + vector(pmos.active_width,0) + # This might be needed if the spacing between the actives is not satisifed + # self.add_rect(layer="active", + # offset=active_offset, + # width=pmos.active_contact.width, + # height=pmos.active_height) + + # we need to ensure implants don't overlap and are spaced far enough apart + # implant_spacing = self.implant_space+self.implant_enclose_active + # implant_offset = active_offset + vector(implant_spacing,0) - vector(0,self.implant_enclose_active) + # implant_width = pmos.active_contact.width + 2*self.implant_enclose_active + # implant_height = pmos.active_height + 2*self.implant_enclose_active + # self.add_rect(layer="nimplant", + # offset=implant_offset, + # width=implant_width, + # height=implant_height) + + # Return the top of the well + + def add_pwell_contact(self, nmos, nmos_pos): + """ Add an pwell contact next to the given nmos device. """ + + layer_stack = ("active", "contact", "metal1") + + pwell_position = vector(0,-0.5*self.m1_width) + + # To the right a spacing away from the nmos right active edge + contact_xoffset = nmos_pos.x + nmos.active_width + drc["active_to_body_active"] + # Must be at least an well enclosure of active up from the bottom of the well + contact_yoffset = max(nmos_pos.y, + self.well_enclose_active - nmos.active_contact.first_layer_height/2) + contact_offset = vector(contact_xoffset, contact_yoffset) + + # Offset by half a contact + contact_offset += vector(0.5*nmos.active_contact.first_layer_width, + 0.5*nmos.active_contact.first_layer_height) + self.pwell_contact=self.add_contact_center(layers=layer_stack, + offset=contact_offset, + implant_type="p", + well_type="p") + self.add_rect_center(layer="metal1", + offset=contact_offset.scale(1,0.5), + width=self.pwell_contact.mod.second_layer_width, + height=contact_offset.y) + + # Now add the full active and implant for the NMOS + # active_offset = nmos_pos + vector(nmos.active_width,0) + # This might be needed if the spacing between the actives is not satisifed + # self.add_rect(layer="active", + # offset=active_offset, + # width=nmos.active_contact.width, + # height=nmos.active_height) + + # implant_spacing = self.implant_space+self.implant_enclose_active + # implant_offset = active_offset + vector(implant_spacing,0) - vector(0,self.implant_enclose_active) + # implant_width = nmos.active_contact.width + 2*self.implant_enclose_active + # implant_height = nmos.active_height + 2*self.implant_enclose_active + # self.add_rect(layer="pimplant", + # offset=implant_offset, + # width=implant_width, + # height=implant_height) diff --git a/compiler/pinv.py b/compiler/pinv.py index 219c7fae..8bcd7841 100644 --- a/compiler/pinv.py +++ b/compiler/pinv.py @@ -17,8 +17,8 @@ class pinv(pgate.pgate): from center of rail to rail.. The route_output will route the output to the right side of the cell for easier access. """ - c = reload(__import__(OPTS.config.bitcell)) - bitcell = getattr(c, OPTS.config.bitcell) + c = reload(__import__(OPTS.bitcell)) + bitcell = getattr(c, OPTS.bitcell) unique_id = 1 @@ -57,8 +57,8 @@ class pinv(pgate.pgate): self.setup_layout_constants() self.add_supply_rails() self.add_ptx() - self.extend_wells(self.well_pos) self.add_well_contacts() + self.extend_wells(self.well_pos) self.connect_rails() self.route_input_gate(self.pmos_inst, self.nmos_inst, self.output_pos.y, "A", rotate=0) self.route_outputs() @@ -128,9 +128,6 @@ class pinv(pgate.pgate): self.width = self.well_width # Height is an input parameter, so it is not recomputed. - # This will help with the wells - self.well_pos = vector(0,0.4*self.height) - def create_ptx(self): @@ -183,9 +180,14 @@ class pinv(pgate.pgate): self.connect_inst(["Z", "A", "gnd", "gnd"]) - # Output position will be in between the PMOS and NMOS - self.output_pos = vector(0,0.5*(self.pmos_pos.y+self.nmos_pos.y+self.nmos.active_height)) + # Output position will be in between the PMOS and NMOS drains + pmos_drain_pos = self.pmos_inst.get_pin("D").ll() + nmos_drain_pos = self.nmos_inst.get_pin("D").ul() + self.output_pos = vector(0,0.5*(pmos_drain_pos.y+nmos_drain_pos.y)) + # This will help with the wells + self.well_pos = vector(0,self.nmos_inst.uy()) + def route_outputs(self): @@ -196,8 +198,8 @@ class pinv(pgate.pgate): pmos_drain_pin = self.pmos_inst.get_pin("D") # Pick point at right most of NMOS and connect down to PMOS - nmos_drain_pos = nmos_drain_pin.ur() - vector(0.5*self.m1_width,0) - pmos_drain_pos = vector(nmos_drain_pos.x,pmos_drain_pin.bc().y) + nmos_drain_pos = nmos_drain_pin.lr() - vector(0.5*self.m1_width,0) + pmos_drain_pos = vector(nmos_drain_pos.x, pmos_drain_pin.bc().y) self.add_path("metal1",[nmos_drain_pos,pmos_drain_pos]) # Remember the mid for the output @@ -220,9 +222,9 @@ class pinv(pgate.pgate): def add_well_contacts(self): """ Add n/p well taps to the layout and connect to supplies """ - self.add_nwell_contact(self.nmos, self.nmos_pos) + self.add_nwell_contact(self.pmos, self.pmos_pos) - self.add_pwell_contact(self.pmos, self.pmos_pos) + self.add_pwell_contact(self.nmos, self.nmos_pos) def connect_rails(self): """ Connect the nmos and pmos to its respective power rails """ diff --git a/compiler/pnand2.py b/compiler/pnand2.py index 6a1e2bb4..dfd89680 100644 --- a/compiler/pnand2.py +++ b/compiler/pnand2.py @@ -12,8 +12,8 @@ class pnand2(pgate.pgate): This model use ptx to generate a 2-input nand within a cetrain height. """ - c = reload(__import__(OPTS.config.bitcell)) - bitcell = getattr(c, OPTS.config.bitcell) + c = reload(__import__(OPTS.bitcell)) + bitcell = getattr(c, OPTS.bitcell) unique_id = 1 @@ -50,8 +50,8 @@ class pnand2(pgate.pgate): self.setup_layout_constants() self.add_supply_rails() self.add_ptx() - self.add_well_contacts() self.connect_rails() + self.add_well_contacts() self.extend_wells(self.well_pos) self.route_inputs() self.route_output() @@ -94,9 +94,6 @@ class pnand2(pgate.pgate): self.width = self.well_width # Height is an input parameter, so it is not recomputed. - # This will help with the wells - self.well_pos = vector(0,0.4*self.height) - # This is the extra space needed to ensure DRC rules to the active contacts extra_contact_space = max(-self.nmos.get_pin("D").by(),0) # This is a poly-to-poly of a flipped cell @@ -139,22 +136,25 @@ class pnand2(pgate.pgate): self.nmos1_inst=self.add_inst(name="pnand2_nmos1", mod=self.nmos, offset=nmos1_pos) - self.connect_inst(["Z", "A", "net1", "gnd"]) + self.connect_inst(["Z", "B", "net1", "gnd"]) self.nmos2_pos = nmos1_pos + self.overlap_offset self.nmos2_inst=self.add_inst(name="pnand2_nmos2", mod=self.nmos, offset=self.nmos2_pos) - self.connect_inst(["net1", "B", "gnd", "gnd"]) + self.connect_inst(["net1", "A", "gnd", "gnd"]) # Output position will be in between the PMOS and NMOS self.output_pos = vector(0,0.5*(pmos1_pos.y+nmos1_pos.y+self.nmos.active_height)) + # This will help with the wells + self.well_pos = vector(0,self.nmos1_inst.uy()) + def add_well_contacts(self): - """ Add n/p well taps to the layout and connect to supplies """ + """ Add n/p well taps to the layout and connect to supplies AFTER the wells are created """ - self.add_nwell_contact(self.nmos, self.nmos2_pos) - self.add_pwell_contact(self.pmos, self.pmos2_pos) + self.add_nwell_contact(self.pmos, self.pmos2_pos) + self.add_pwell_contact(self.nmos, self.nmos2_pos) def connect_rails(self): diff --git a/compiler/pnand3.py b/compiler/pnand3.py index 44a930d4..6d0b1e79 100644 --- a/compiler/pnand3.py +++ b/compiler/pnand3.py @@ -12,8 +12,8 @@ class pnand3(pgate.pgate): This model use ptx to generate a 2-input nand within a cetrain height. """ - c = reload(__import__(OPTS.config.bitcell)) - bitcell = getattr(c, OPTS.config.bitcell) + c = reload(__import__(OPTS.bitcell)) + bitcell = getattr(c, OPTS.bitcell) unique_id = 1 @@ -24,7 +24,9 @@ class pnand3(pgate.pgate): pgate.pgate.__init__(self, name) debug.info(2, "create pnand3 structure {0} with size of {1}".format(name, size)) - self.nmos_size = 3*size + # We have trouble pitch matching a 3x sizes to the bitcell... + # If we relax this, we could size this better. + self.nmos_size = 2*size self.pmos_size = parameter["beta"]*size self.nmos_width = self.nmos_size*drc["minwidth_tx"] self.pmos_width = self.pmos_size*drc["minwidth_tx"] @@ -50,8 +52,8 @@ class pnand3(pgate.pgate): self.setup_layout_constants() self.add_supply_rails() self.add_ptx() - self.add_well_contacts() self.connect_rails() + self.add_well_contacts() self.extend_wells(self.well_pos) self.route_inputs() self.route_output() @@ -88,13 +90,13 @@ class pnand3(pgate.pgate): # This will help with the wells and the input/output placement self.output_pos = vector(0,0.5*self.height) - self.well_pos = vector(0,0.4*self.height) + # This is the extra space needed to ensure DRC rules to the active contacts + nmos = ptx(tx_type="nmos") + extra_contact_space = max(-nmos.get_pin("D").by(),0) # This is a poly-to-poly of a flipped cell - # This is extra liberal for pnand3 because we know there are big transistor sizes - # and so contacts won't interfere with the rails. Therefore, ignore metal spacing. - # We need to do this to fit the 3 inputs in with M2M3 via accessibility. - self.top_bottom_space = max(drc["poly_extend_active"], self.poly_space) + self.top_bottom_space = max(0.5*self.m1_width + self.m1_space + extra_contact_space, + drc["poly_extend_active"], self.poly_space) def add_supply_rails(self): """ Add vdd/gnd rails to the top and bottom. """ @@ -138,7 +140,7 @@ class pnand3(pgate.pgate): self.nmos1_inst=self.add_inst(name="pnand3_nmos1", mod=self.nmos, offset=nmos1_pos) - self.connect_inst(["Z", "A", "net1", "gnd"]) + self.connect_inst(["Z", "C", "net1", "gnd"]) nmos2_pos = nmos1_pos + self.overlap_offset self.nmos2_inst=self.add_inst(name="pnand3_nmos2", @@ -151,14 +153,16 @@ class pnand3(pgate.pgate): self.nmos3_inst=self.add_inst(name="pnand3_nmos3", mod=self.nmos, offset=self.nmos3_pos) - self.connect_inst(["net2", "C", "gnd", "gnd"]) + self.connect_inst(["net2", "A", "gnd", "gnd"]) + # This should be placed at the top of the NMOS well + self.well_pos = vector(0,self.nmos1_inst.uy()) def add_well_contacts(self): """ Add n/p well taps to the layout and connect to supplies """ - self.add_nwell_contact(self.nmos, self.nmos3_pos) - self.add_pwell_contact(self.pmos, self.pmos3_pos) + self.add_nwell_contact(self.pmos, self.pmos3_pos) + self.add_pwell_contact(self.nmos, self.nmos3_pos) def connect_rails(self): diff --git a/compiler/pnor2.py b/compiler/pnor2.py index d344dc54..684a2b51 100644 --- a/compiler/pnor2.py +++ b/compiler/pnor2.py @@ -12,8 +12,8 @@ class pnor2(pgate.pgate): This model use ptx to generate a 2-input nor within a cetrain height. """ - c = reload(__import__(OPTS.config.bitcell)) - bitcell = getattr(c, OPTS.config.bitcell) + c = reload(__import__(OPTS.bitcell)) + bitcell = getattr(c, OPTS.bitcell) unique_id = 1 @@ -51,8 +51,8 @@ class pnor2(pgate.pgate): self.setup_layout_constants() self.add_supply_rails() self.add_ptx() - self.add_well_contacts() self.connect_rails() + self.add_well_contacts() self.extend_wells(self.well_pos) self.route_inputs() self.route_output() @@ -98,9 +98,6 @@ class pnor2(pgate.pgate): self.width = self.well_width # Height is an input parameter, so it is not recomputed. - # This will help with the wells - self.well_pos = vector(0,0.4*self.height) - # This is the extra space needed to ensure DRC rules to the active contacts extra_contact_space = max(-self.nmos.get_pin("D").by(),0) # This is a poly-to-poly of a flipped cell @@ -154,11 +151,14 @@ class pnor2(pgate.pgate): # Output position will be in between the PMOS and NMOS self.output_pos = vector(0,0.5*(pmos1_pos.y+nmos1_pos.y+self.nmos.active_height)) + # This will help with the wells + self.well_pos = vector(0,self.nmos1_inst.uy()) + def add_well_contacts(self): """ Add n/p well taps to the layout and connect to supplies """ - self.add_nwell_contact(self.nmos, self.nmos2_pos) - self.add_pwell_contact(self.pmos, self.pmos2_pos) + self.add_nwell_contact(self.pmos, self.pmos2_pos) + self.add_pwell_contact(self.nmos, self.nmos2_pos) def connect_rails(self): diff --git a/compiler/precharge.py b/compiler/precharge.py index 519e36fb..d2a64678 100644 --- a/compiler/precharge.py +++ b/compiler/precharge.py @@ -16,8 +16,8 @@ class precharge(pgate.pgate): pgate.pgate.__init__(self, name) debug.info(2, "create single precharge cell: {0}".format(name)) - c = reload(__import__(OPTS.config.bitcell)) - self.mod_bitcell = getattr(c, OPTS.config.bitcell) + c = reload(__import__(OPTS.bitcell)) + self.mod_bitcell = getattr(c, OPTS.bitcell) self.bitcell = self.mod_bitcell() self.beta = parameter["beta"] @@ -128,15 +128,12 @@ class precharge(pgate.pgate): """Adds a nwell tap to connect to the vdd rail""" # adds the contact from active to metal1 well_contact_pos = self.upper_pmos1_inst.get_pin("D").center().scale(1,0) \ - + vector(0, self.upper_pmos1_pos.y + self.pmos.height + drc["well_extend_active"]) + + vector(0, self.upper_pmos1_inst.uy() + contact.well.height/2 + drc["well_extend_active"]) self.add_contact_center(layers=("active", "contact", "metal1"), - offset=well_contact_pos) + offset=well_contact_pos, + implant_type="n", + well_type="n") - # adds the implant to turn the contact into a nwell tap - self.add_rect_center(layer="nimplant", - offset=well_contact_pos, - width=contact.well.first_layer_width, - height=contact.well.first_layer_height) self.height = well_contact_pos.y + contact.well.height @@ -175,19 +172,19 @@ class precharge(pgate.pgate): def add_bitline_contacts(self): """Adds contacts/via from metal1 to metal2 for bit-lines""" - for stack in [("active","contact","metal1"),("metal1", "via1", "metal2")]: - pos = self.lower_pmos_inst.get_pin("S").center() - self.add_contact_center(layers=stack, - offset=pos) - pos = self.lower_pmos_inst.get_pin("D").center() - self.add_contact_center(layers=stack, - offset=pos) - pos = self.upper_pmos1_inst.get_pin("S").center() - self.add_contact_center(layers=stack, - offset=pos) - pos = self.upper_pmos2_inst.get_pin("D").center() - self.add_contact_center(layers=stack, - offset=pos) + stack=("metal1", "via1", "metal2") + pos = self.lower_pmos_inst.get_pin("S").center() + self.add_contact_center(layers=stack, + offset=pos) + pos = self.lower_pmos_inst.get_pin("D").center() + self.add_contact_center(layers=stack, + offset=pos) + pos = self.upper_pmos1_inst.get_pin("S").center() + self.add_contact_center(layers=stack, + offset=pos) + pos = self.upper_pmos2_inst.get_pin("D").center() + self.add_contact_center(layers=stack, + offset=pos) def connect_pmos(self, pmos_pin, bit_pin): """ Connect pmos pin to bitline pin """ diff --git a/compiler/precharge_array.py b/compiler/precharge_array.py index b728517d..7c91f126 100644 --- a/compiler/precharge_array.py +++ b/compiler/precharge_array.py @@ -17,7 +17,7 @@ class precharge_array(design.design): self.columns = columns - self.pc_cell = precharge(name="precharge_cell", size=size) + self.pc_cell = precharge(name="precharge", size=size) self.add_mod(self.pc_cell) self.width = self.columns * self.pc_cell.width diff --git a/compiler/ptx.py b/compiler/ptx.py index c6b6aee7..ed9c8e74 100644 --- a/compiler/ptx.py +++ b/compiler/ptx.py @@ -61,15 +61,19 @@ class ptx(design.design): def create_spice(self): self.add_pin_list(["D", "G", "S", "B"]) - self.spice.append("\n.SUBCKT {0} {1}".format(self.name, - " ".join(self.pins))) - self.spice.append("M{0} {1} {2} m={3} w={4}u l={5}u".format(self.tx_type, - " ".join(self.pins), - spice[self.tx_type], - self.mults, - self.tx_width, - drc["minwidth_poly"])) - self.spice.append(".ENDS {0}".format(self.name)) + # self.spice.append("\n.SUBCKT {0} {1}".format(self.name, + # " ".join(self.pins))) + # Just make a guess since these will actually be decided in the layout later. + area_sd = 2.5*drc["minwidth_poly"]*self.tx_width + perimeter_sd = 2*drc["minwidth_poly"] + 2*self.tx_width + self.spice_device="M{{0}} {{1}} {0} m={1} w={2}u l={3}u pd={4}u ps={4}u as={5}p ad={5}p".format(spice[self.tx_type], + self.mults, + self.tx_width, + drc["minwidth_poly"], + perimeter_sd, + area_sd) + self.spice.append("\n* ptx " + self.spice_device) + # self.spice.append(".ENDS {0}".format(self.name)) def setup_layout_constants(self): """ @@ -94,25 +98,19 @@ class ptx(design.design): self.active_contact = contact(layer_stack=("active", "contact", "metal1"), dimensions=(1, self.num_contacts)) - # Standard DRC rules - self.min_active_width = drc["minwidth_active"] - self.contact_width = drc["minwidth_contact"] - self.poly_width = drc["minwidth_poly"] - self.poly_to_active = drc["poly_to_active"] - self.poly_extend_active = drc["poly_extend_active"] # The contacted poly pitch (or uncontacted in an odd technology) - self.poly_pitch = max(2*drc["contact_to_poly"] + self.contact_width + self.poly_width, - drc["poly_to_poly"]) + self.poly_pitch = max(2*self.contact_to_gate + self.contact_width + self.poly_width, + self.poly_space) # The contacted poly pitch (or uncontacted in an odd technology) - self.contact_pitch = 2*drc["contact_to_poly"] + self.contact_width + self.poly_width + self.contact_pitch = 2*self.contact_to_gate + self.contact_width + self.poly_width # The enclosure of an active contact. Not sure about second term. active_enclose_contact = max(drc["active_enclosure_contact"], - (self.min_active_width - self.contact_width)/2) + (self.active_width - self.contact_width)/2) # This is the distance from the edge of poly to the contacted end of active - self.end_to_poly = active_enclose_contact + self.contact_width + drc["contact_to_poly"] + self.end_to_poly = active_enclose_contact + self.contact_width + self.contact_to_gate # Active width is determined by enclosure on both ends and contacted pitch, @@ -125,22 +123,25 @@ class ptx(design.design): # Poly height must include poly extension over active self.poly_height = self.tx_width + 2*self.poly_extend_active + # The active offset is due to the well extension + self.active_offset = vector([self.well_enclose_active]*2) + # Well enclosure of active, ensure minwidth as well if info["has_{}well".format(self.well_type)]: - self.well_width = max(self.active_width + 2*drc["well_enclosure_active"], - drc["minwidth_well"]) - self.well_height = max(self.tx_width + 2*drc["well_enclosure_active"], - drc["minwidth_well"]) - - self.height = self.well_height - self.width = self.well_width + self.cell_well_width = max(self.active_width + 2*self.well_enclose_active, + self.well_width) + self.cell_well_height = max(self.tx_width + 2*self.well_enclose_active, + self.well_width) + # We are going to shift the 0,0, so include that in the width and height + self.height = self.cell_well_height - self.active_offset.y + self.width = self.cell_well_width - self.active_offset.x else: # If no well, use the boundary of the active and poly self.height = self.poly_height self.width = self.active_width # The active offset is due to the well extension - self.active_offset = vector([drc["well_enclosure_active"]]*2) + self.active_offset = vector([self.well_enclose_active]*2) # This is the center of the first active contact offset (centered vertically) self.contact_offset = self.active_offset + vector(active_enclose_contact + 0.5*self.contact_width, @@ -189,9 +190,9 @@ class ptx(design.design): # This is the distance that we must route up or down from the center # of the contacts to avoid DRC violations to the other contacts pin_offset = vector(0, 0.5*self.active_contact.second_layer_height \ - + drc["metal1_to_metal1"] + 0.5*drc["minwidth_metal1"]) - # This is the width of a contact to extend the ends of the pin - end_offset = vector(self.active_contact.second_layer_width/2,0) + + self.m1_space + 0.5*self.m1_width) + # This is the width of a m1 extend the ends of the pin + end_offset = vector(self.m1_width/2,0) # drains always go to the MIDDLE of the cell, so top of NMOS, bottom of PMOS # so reverse the directions for NMOS compared to PMOS. @@ -264,6 +265,14 @@ class ptx(design.design): offset=self.active_offset, width=self.active_width, height=self.active_height) + # If the implant must enclose the active, shift offset + # and increase width/height + enclose_width = drc["implant_enclosure_active"] + enclose_offset = [enclose_width]*2 + self.add_rect(layer="{}implant".format(self.implant_type), + offset=self.active_offset - enclose_offset, + width=self.active_width + 2*enclose_width, + height=self.active_height + 2*enclose_width) def add_well_implant(self): """ @@ -272,16 +281,12 @@ class ptx(design.design): if info["has_{}well".format(self.well_type)]: self.add_rect(layer="{}well".format(self.well_type), offset=(0,0), - width=self.well_width, - height=self.well_height) + width=self.cell_well_width, + height=self.cell_well_height) self.add_rect(layer="vtg", offset=(0,0), - width=self.well_width, - height=self.well_height) - self.add_rect(layer="{}implant".format(self.implant_type), - offset=self.active_offset, - width=self.active_width, - height=self.active_height) + width=self.cell_well_width, + height=self.cell_well_height) def calculate_num_contacts(self): @@ -321,23 +326,27 @@ class ptx(design.design): for pos in source_positions: contact=self.add_contact_center(layers=("active", "contact", "metal1"), offset=pos, - size=(1, self.num_contacts)) + size=(1, self.num_contacts), + implant_type=self.implant_type, + well_type=self.well_type) self.add_layout_pin_center_rect(text="S", layer="metal1", offset=pos, - width=contact.second_layer_width, - height=contact.second_layer_height) + width=contact.mod.second_layer_width, + height=contact.mod.second_layer_height) for pos in drain_positions: contact=self.add_contact_center(layers=("active", "contact", "metal1"), offset=pos, - size=(1, self.num_contacts)) + size=(1, self.num_contacts), + implant_type=self.implant_type, + well_type=self.well_type) self.add_layout_pin_center_rect(text="D", layer="metal1", offset=pos, - width=contact.second_layer_width, - height=contact.second_layer_height) + width=contact.mod.second_layer_width, + height=contact.mod.second_layer_height) if self.connect_active: self.connect_fingered_active(drain_positions, source_positions) diff --git a/compiler/replica_bitline.py b/compiler/replica_bitline.py index e54ca98f..fb8ede4c 100644 --- a/compiler/replica_bitline.py +++ b/compiler/replica_bitline.py @@ -18,14 +18,14 @@ class replica_bitline(design.design): def __init__(self, rows, name="replica_bitline"): design.design.__init__(self, name) - g = reload(__import__(OPTS.config.delay_chain)) - self.mod_delay_chain = getattr(g, OPTS.config.delay_chain) + g = reload(__import__(OPTS.delay_chain)) + self.mod_delay_chain = getattr(g, OPTS.delay_chain) - g = reload(__import__(OPTS.config.replica_bitcell)) - self.mod_replica_bitcell = getattr(g, OPTS.config.replica_bitcell) + g = reload(__import__(OPTS.replica_bitcell)) + self.mod_replica_bitcell = getattr(g, OPTS.replica_bitcell) - c = reload(__import__(OPTS.config.bitcell)) - self.mod_bitcell = getattr(c, OPTS.config.bitcell) + c = reload(__import__(OPTS.bitcell)) + self.mod_bitcell = getattr(c, OPTS.bitcell) for pin in ["en", "out", "vdd", "gnd"]: self.add_pin(pin) @@ -240,55 +240,50 @@ class replica_bitline(design.design): """ Route all signals connected to gnd """ # Add a rail in M1 from bottom to two along delay chain - gnd_start = self.rbl_inv_inst.get_pin("gnd").ll() - self.offset_fix - - # It is the height of the entire RBL and bitcell - self.add_rect(layer="metal2", - offset=gnd_start, - width=self.m2_width, - height=self.rbl.height+self.bitcell.height+self.inv.width+self.m2_pitch) - self.add_layout_pin(text="gnd", - layer="metal1", - offset=gnd_start.scale(1,0), - width=self.m2_width, - height=2*self.inv.width) + gnd_start = self.rbl_inv_inst.get_pin("gnd").bc() + gnd_end = vector(gnd_start.x, self.rbl_inst.uy()+2*self.m2_pitch) + self.add_segment_center(layer="metal2", + start=gnd_start, + end=gnd_end) + self.add_layout_pin_center_segment(text="gnd", + layer="metal1", + start=gnd_start.scale(1,0), + end=gnd_start) # Connect the WL pins directly to gnd + gnd_pin = self.get_pin("gnd").rc() for row in range(self.rows): wl = "wl[{}]".format(row) pin = self.rbl_inst.get_pin(wl) - offset = vector(gnd_start.x,pin.by()) - self.add_rect(layer="metal1", - offset=offset, - width=self.rbl_offset.x-gnd_start.x, - height=self.m1_width) - self.add_via(layers=("metal1", "via1", "metal2"), - offset=offset) + start = vector(gnd_pin.x,pin.cy()) + self.add_segment_center(layer="metal1", + start=start, + end=pin.lc()) + self.add_via_center(layers=("metal1", "via1", "metal2"), + offset=start) # Add via for the delay chain - offset = self.delay_chain_offset - vector(0.5*self.m1_width,0) - self.offset_fix - self.add_via(layers=("metal1", "via1", "metal2"), - offset=offset) + offset = self.dc_inst.get_pins("gnd")[0].bc() + vector(0.5*contact.m1m2.width,0.5*contact.m1m2.height) + self.add_via_center(layers=("metal1", "via1", "metal2"), + offset=offset) # Add via for the inverter - offset = self.rbl_inv_offset - vector(0.5*self.m1_width,contact.m1m2.height) - self.offset_fix - self.add_via(layers=("metal1", "via1", "metal2"), - offset=offset) + offset = self.rbl_inv_inst.get_pin("gnd").bc() - vector(0,0.5*contact.m1m2.height) + self.add_via_center(layers=("metal1", "via1", "metal2"), + offset=offset) - # Connect the bitcell gnd pin to the rail + # Connect the bitcell gnd pins to the rail gnd_pins = self.get_pins("gnd") - gnd_start = gnd_pins[0].uc() + gnd_start = gnd_pins[0].ul() rbl_gnd_pins = self.rbl_inst.get_pins("gnd") - # Find the left most rail on M2 - gnd_pin = None + # Add L shapes to each vertical gnd rail for pin in rbl_gnd_pins: - if gnd_pin == None or (pin.layer=="metal2" and pin.lx() 0: - debug.error("{0}\tGeometries: {1}\tChecks: {2}\tErrors: {3}".format(name, + debug.error("{0}\tGeometries: {1}\tChecks: {2}\tErrors: {3}".format(cell_name, geometries, rulechecks, errors)) else: - debug.info(1, "{0}\tGeometries: {1}\tChecks: {2}\tErrors: {3}".format(name, + debug.info(1, "{0}\tGeometries: {1}\tChecks: {2}\tErrors: {3}".format(cell_name, geometries, rulechecks, errors)) return errors -def run_lvs(name, gds_name, sp_name): +def run_lvs(cell_name, gds_name, sp_name, final_verification=False): """Run LVS check on a given top-level name which is - implemented in gds_name and sp_name. """ + implemented in gds_name and sp_name. Final verification will + ensure that there are no remaining virtual conections. """ + from tech import drc lvs_rules = drc["lvs_rules"] lvs_runset = { 'lvsRulesFile': lvs_rules, 'lvsRunDir': OPTS.openram_temp, 'lvsLayoutPaths': gds_name, - 'lvsLayoutPrimary': name, + 'lvsLayoutPrimary': cell_name, 'lvsSourcePath': sp_name, - 'lvsSourcePrimary': name, + 'lvsSourcePrimary': cell_name, 'lvsSourceSystem': 'SPICE', 'lvsSpiceFile': OPTS.openram_temp + "extracted.sp", 'lvsPowerNames': 'vdd', 'lvsGroundNames': 'gnd', 'lvsIncludeSVRFCmds': 1, - 'lvsSVRFCmds': '{VIRTUAL CONNECT NAME VDD? GND? ?}', 'lvsIgnorePorts': 1, - 'lvsERCDatabase': OPTS.openram_temp + name + ".erc.results", - 'lvsERCSummaryFile': OPTS.openram_temp + name + ".erc.summary", - 'lvsReportFile': OPTS.openram_temp + name + ".lvs.report", - 'lvsMaskDBFile': OPTS.openram_temp + name + ".maskdb", + 'lvsERCDatabase': OPTS.openram_temp + cell_name + ".erc.results", + 'lvsERCSummaryFile': OPTS.openram_temp + cell_name + ".erc.summary", + 'lvsReportFile': OPTS.openram_temp + cell_name + ".lvs.report", + 'lvsMaskDBFile': OPTS.openram_temp + cell_name + ".maskdb", 'cmnFDILayerMapFile': drc["layer_map"], 'cmnFDIUseLayerMap': 1, - 'cmnVConnectNames': 'vdd, gnd', + 'lvsRecognizeGates': 'NONE' #'cmnVConnectNamesState' : 'ALL', #connects all nets with the same name } + # This should be removed for final verification + if not final_verification: + lvs_runset['cmnVConnectReport']=1 + lvs_runset['cmnVConnectNamesState']='SOME' + lvs_runset['cmnVConnectNames']='vdd gnd' + + + # write the runset file f = open(OPTS.openram_temp + "lvs_runset", "w") for k in sorted(lvs_runset.iterkeys()): @@ -174,12 +184,13 @@ def run_lvs(name, gds_name, sp_name): # run LVS cwd = os.getcwd() os.chdir(OPTS.openram_temp) - errfile = "{0}{1}.lvs.err".format(OPTS.openram_temp, name) - outfile = "{0}{1}.lvs.out".format(OPTS.openram_temp, name) + errfile = "{0}{1}.lvs.err".format(OPTS.openram_temp, cell_name) + outfile = "{0}{1}.lvs.out".format(OPTS.openram_temp, cell_name) - cmd = "calibre -gui -lvs {0}lvs_runset -batch 2> {1} 1> {2}".format(OPTS.openram_temp, - errfile, - outfile) + cmd = "{0} -gui -lvs {1}lvs_runset -batch 2> {2} 1> {3}".format(OPTS.lvs_exe[1], + OPTS.openram_temp, + errfile, + outfile) debug.info(1, cmd) os.system(cmd) os.chdir(cwd) @@ -244,7 +255,7 @@ def run_lvs(name, gds_name, sp_name): return total_errors -def run_pex(name, gds_name, sp_name, output=None): +def run_pex(cell_name, gds_name, sp_name, output=None): """Run pex on a given top-level name which is implemented in gds_name and sp_name. """ from tech import drc @@ -253,24 +264,24 @@ def run_pex(name, gds_name, sp_name, output=None): # check if lvs report has been done # if not run drc and lvs - if not os.path.isfile(name + ".lvs.report"): - run_drc(name, gds_name) - run_lvs(name, gds_name, sp_name) + if not os.path.isfile(cell_name + ".lvs.report"): + run_drc(cell_name, gds_name) + run_lvs(cell_name, gds_name, sp_name) pex_rules = drc["xrc_rules"] pex_runset = { 'pexRulesFile': pex_rules, 'pexRunDir': OPTS.openram_temp, 'pexLayoutPaths': gds_name, - 'pexLayoutPrimary': name, + 'pexLayoutPrimary': cell_name, #'pexSourcePath' : OPTS.openram_temp+"extracted.sp", 'pexSourcePath': sp_name, - 'pexSourcePrimary': name, - 'pexReportFile': name + ".lvs.report", + 'pexSourcePrimary': cell_name, + 'pexReportFile': cell_name + ".lvs.report", 'pexPexNetlistFile': output, - 'pexPexReportFile': name + ".pex.report", - 'pexMaskDBFile': name + ".maskdb", - 'cmnFDIDEFLayoutPath': name + ".def", + 'pexPexReportFile': cell_name + ".pex.report", + 'pexMaskDBFile': cell_name + ".maskdb", + 'cmnFDIDEFLayoutPath': cell_name + ".def", } # write the runset file @@ -282,12 +293,13 @@ def run_pex(name, gds_name, sp_name, output=None): # run pex cwd = os.getcwd() os.chdir(OPTS.openram_temp) - errfile = "{0}{1}.pex.err".format(OPTS.openram_temp, name) - outfile = "{0}{1}.pex.out".format(OPTS.openram_temp, name) + errfile = "{0}{1}.pex.err".format(OPTS.openram_temp, cell_name) + outfile = "{0}{1}.pex.out".format(OPTS.openram_temp, cell_name) - cmd = "calibre -gui -pex {0}pex_runset -batch 2> {1} 1> {2}".format(OPTS.openram_temp, - errfile, - outfile) + cmd = "{0} -gui -pex {1}pex_runset -batch 2> {2} 1> {3}".format(OPTS.pex_exe[1], + OPTS.openram_temp, + errfile, + outfile) debug.info(2, cmd) os.system(cmd) os.chdir(cwd) @@ -306,7 +318,7 @@ def run_pex(name, gds_name, sp_name, output=None): out_errors = len(stdouterrors) assert(os.path.isfile(output)) - correct_port(name, output, sp_name) + correct_port(cell_name, output, sp_name) return out_errors @@ -329,7 +341,7 @@ def correct_port(name, output_file_name, ref_file_name): part2 = pex_file.read() pex_file.close() - # obatin the correct definition line from the original spice file + # obtain the correct definition line from the original spice file sp_file = open(ref_file_name, "r") contents = sp_file.read() circuit_title = re.search(".SUBCKT " + str(name) + ".*\n", contents) diff --git a/compiler/verify/magic.py b/compiler/verify/magic.py index 327b3e22..b2e66aa2 100644 --- a/compiler/verify/magic.py +++ b/compiler/verify/magic.py @@ -12,10 +12,13 @@ ln -s 2001a current #!/bin/sh magic -dnull -noconsole << EOF tech load SCN3ME_SUBM.30 -gds rescale false +#scalegrid 1 2 +gds rescale no gds polygon subcell true gds warning default gds read $1 +load $1 +writeall force drc count drc why quit -noprompt @@ -27,7 +30,8 @@ rm -f $1.ext rm -f $1.spice magic -dnull -noconsole << EOF tech load SCN3ME_SUBM.30 -gds rescale false +#scalegrid 1 2 +gds rescale no gds polygon subcell true gds warning default gds read $1 @@ -40,12 +44,13 @@ EOF 3. netgen can perform LVS with: #!/bin/sh netgen -noconsole < 0: - debug.error("{0}\tGeometries: {1}\tChecks: {2}\tErrors: {3}".format(name, - geometries, - rulechecks, - errors)) + for line in results: + if "error tiles" in line: + debug.info(1,line.rstrip("\n")) + debug.error("DRC Errors {0}\t{1}".format(cell_name, errors)) else: - debug.info(1, "{0}\tGeometries: {1}\tChecks: {2}\tErrors: {3}".format(name, - geometries, - rulechecks, - errors)) + debug.info(1, "DRC Errors {0}\t{1}".format(cell_name, errors)) return errors -def run_lvs(name, gds_name, sp_name): +def run_lvs(cell_name, gds_name, sp_name, final_verification=False): """Run LVS check on a given top-level name which is - implemented in gds_name and sp_name. """ + implemented in gds_name and sp_name. Final verification will + ensure that there are no remaining virtual conections. """ - debug.warning("LVS using magic+netgen not implemented.") - return 1 + run_drc(cell_name, gds_name, extract=True) + write_netgen_script(cell_name, sp_name) - from tech import drc - lvs_rules = drc["lvs_rules"] - lvs_runset = { - 'lvsRulesFile': lvs_rules, - 'lvsRunDir': OPTS.openram_temp, - 'lvsLayoutPaths': gds_name, - 'lvsLayoutPrimary': name, - 'lvsSourcePath': sp_name, - 'lvsSourcePrimary': name, - 'lvsSourceSystem': 'SPICE', - 'lvsSpiceFile': OPTS.openram_temp + "extracted.sp", - 'lvsPowerNames': 'vdd', - 'lvsGroundNames': 'gnd', - 'lvsIncludeSVRFCmds': 1, - 'lvsSVRFCmds': '{VIRTUAL CONNECT NAME VDD? GND? ?}', - 'lvsIgnorePorts': 1, - 'lvsERCDatabase': OPTS.openram_temp + name + ".erc.results", - 'lvsERCSummaryFile': OPTS.openram_temp + name + ".erc.summary", - 'lvsReportFile': OPTS.openram_temp + name + ".lvs.report", - 'lvsMaskDBFile': OPTS.openram_temp + name + ".maskdb", - 'cmnFDILayerMapFile': drc["layer_map"], - 'cmnFDIUseLayerMap': 1, - 'cmnVConnectNames': 'vdd, gnd', - #'cmnVConnectNamesState' : 'ALL', #connects all nets with the same name - } - - # write the runset file - f = open(OPTS.openram_temp + "lvs_runset", "w") - for k in sorted(lvs_runset.iterkeys()): - f.write("*%s: %s\n" % (k, lvs_runset[k])) - f.close() - # run LVS cwd = os.getcwd() os.chdir(OPTS.openram_temp) - errfile = "{0}{1}.lvs.err".format(OPTS.openram_temp, name) - outfile = "{0}{1}.lvs.out".format(OPTS.openram_temp, name) + errfile = "{0}{1}.lvs.err".format(OPTS.openram_temp, cell_name) + outfile = "{0}{1}.lvs.out".format(OPTS.openram_temp, cell_name) + resultsfile = "{0}{1}.lvs.report".format(OPTS.openram_temp, cell_name) - cmd = "{0} -gui -lvs {1}lvs_runset -batch 2> {2} 1> {3}".format(OPTS.lvs_exe, - OPTS.openram_temp, - errfile, - outfile) + cmd = "{0}run_lvs.sh lvs 2> {1} 1> {2}".format(OPTS.openram_temp, + errfile, + outfile) debug.info(1, cmd) os.system(cmd) os.chdir(cwd) # check the result for these lines in the summary: - f = open(lvs_runset['lvsReportFile'], "r") + f = open(resultsfile, "r") results = f.readlines() f.close() - # NOT COMPARED - # CORRECT - # INCORRECT - test = re.compile("# CORRECT #") - correct = filter(test.search, results) - test = re.compile("NOT COMPARED") - notcompared = filter(test.search, results) - test = re.compile("# INCORRECT #") + + # Netlists do not match. + test = re.compile("Netlists do not match.") incorrect = filter(test.search, results) + # There were property errors. + test = re.compile("Property errors were found.") + propertyerrors = filter(test.search, results) + # Require pins to match? + # Cell pin lists for pnand2_1.spice and pnand2_1 altered to match. + # test = re.compile(".*altered to match.") + # pinerrors = filter(test.search, results) + # if len(pinerrors)>0: + # debug.warning("Pins altered to match in {}.".format(cell_name)) + + total_errors = len(propertyerrors) + len(incorrect) + # If we want to ignore property errors + #total_errors = len(incorrect) + #if len(propertyerrors)>0: + # debug.warning("Property errors found, but not checking them.") - # Errors begin with "Error:" - test = re.compile("\s+Error:") - errors = filter(test.search, results) - for e in errors: - debug.error(e.strip("\n")) + # Netlists match uniquely. + test = re.compile("Netlists match uniquely.") + correct = filter(test.search, results) + # Fail if they don't match. Something went wrong! + if correct == 0: + total_errors += 1 - summary_errors = len(notcompared) + len(incorrect) + len(errors) + if total_errors>0: + # Just print out the whole file, it is short. + for e in results: + debug.info(1,e.strip("\n")) + debug.error("LVS mismatch (results in {})".format(resultsfile)) - # also check the extraction summary file - f = open(lvs_runset['lvsReportFile'] + ".ext", "r") - results = f.readlines() - f.close() - - test = re.compile("ERROR:") - exterrors = filter(test.search, results) - for e in exterrors: - debug.error(e.strip("\n")) - - test = re.compile("WARNING:") - extwarnings = filter(test.search, results) - for e in extwarnings: - debug.warning(e.strip("\n")) - - # MRG - 9/26/17 - Change this to exclude warnings because of - # multiple labels on different pins in column mux. - ext_errors = len(exterrors) - ext_warnings = len(extwarnings) - - # also check the output file - f = open(outfile, "r") - results = f.readlines() - f.close() - - # Errors begin with "ERROR:" - test = re.compile("ERROR:") - stdouterrors = filter(test.search, results) - for e in stdouterrors: - debug.error(e.strip("\n")) - - out_errors = len(stdouterrors) - - total_errors = summary_errors + out_errors + ext_errors return total_errors diff --git a/compiler/wire.py b/compiler/wire.py index 879baf9b..08670bb5 100644 --- a/compiler/wire.py +++ b/compiler/wire.py @@ -12,8 +12,6 @@ class wire(path): The points are the center of the wire. The layer stack is the vertical, contact/via, and horizontal layers, respectively. """ - unique_id = 1 - def __init__(self, obj, layer_stack, position_list): self.obj = obj self.layer_stack = layer_stack diff --git a/compiler/wordline_driver.py b/compiler/wordline_driver.py index 853c6b89..aaab96eb 100644 --- a/compiler/wordline_driver.py +++ b/compiler/wordline_driver.py @@ -129,8 +129,8 @@ class wordline_driver(design.design): mod=self.nand2, offset=nand2_offset, mirror=inst_mirror) - self.connect_inst(["in[{0}]".format(row), - "en_bar[{0}]".format(row), + self.connect_inst(["en_bar[{0}]".format(row), + "in[{0}]".format(row), "net[{0}]".format(row), "vdd", "gnd"]) # add inv2 @@ -149,8 +149,8 @@ class wordline_driver(design.design): self.add_segment_center(layer="metal1", start=clk_offset, end=a_pos) - m1m2_via = self.add_via_center(layers=("metal1", "via1", "metal2"), - offset=clk_offset) + self.add_via_center(layers=("metal1", "via1", "metal2"), + offset=clk_offset) # first inv to nand2 A zb_pos = inv1_inst.get_pin("Z").bc() diff --git a/compiler/write_driver.py b/compiler/write_driver.py index 57ba39c3..67477a8d 100644 --- a/compiler/write_driver.py +++ b/compiler/write_driver.py @@ -11,7 +11,7 @@ class write_driver(design.design): the technology library. """ - pin_names = ["din", "BL", "BR", "en", "gnd", "vdd"] + pin_names = ["din", "bl", "br", "en", "gnd", "vdd"] (width,height) = utils.get_libcell_size("write_driver", GDS["unit"], layer["boundary"]) pin_map = utils.get_libcell_pins(pin_names, "write_driver", GDS["unit"], layer["boundary"]) diff --git a/compiler/write_driver_array.py b/compiler/write_driver_array.py index 868dcbd3..a220e473 100644 --- a/compiler/write_driver_array.py +++ b/compiler/write_driver_array.py @@ -15,8 +15,8 @@ class write_driver_array(design.design): design.design.__init__(self, "write_driver_array") debug.info(1, "Creating {0}".format(self.name)) - c = reload(__import__(OPTS.config.write_driver)) - self.mod_write_driver = getattr(c, OPTS.config.write_driver) + c = reload(__import__(OPTS.write_driver)) + self.mod_write_driver = getattr(c, OPTS.write_driver) self.driver = self.mod_write_driver("write_driver") self.add_mod(self.driver) @@ -69,14 +69,14 @@ class write_driver_array(design.design): offset=din_pin.ll(), width=din_pin.width(), height=din_pin.height()) - bl_pin = self.driver_insts[i].get_pin("BL") + bl_pin = self.driver_insts[i].get_pin("bl") self.add_layout_pin(text="bl[{0}]".format(i), layer="metal2", offset=bl_pin.ll(), width=bl_pin.width(), height=bl_pin.height()) - br_pin = self.driver_insts[i].get_pin("BR") + br_pin = self.driver_insts[i].get_pin("br") self.add_layout_pin(text="br[{0}]".format(i), layer="metal2", offset=br_pin.ll(), diff --git a/docs/Makefile b/docs/Makefile new file mode 100644 index 00000000..b0d853fa --- /dev/null +++ b/docs/Makefile @@ -0,0 +1,6 @@ +all: openram_manual.tex + pdflatex openram_manual +bib: + bibtex openram_manual +clean: + rm -f openram_manual.pdf *.aux *.bbl *.blq *.dvi *.log *.lot *.toc *.lof *.blg diff --git a/docs/control.tex b/docs/control.tex new file mode 100644 index 00000000..472461d1 --- /dev/null +++ b/docs/control.tex @@ -0,0 +1,4 @@ +\section{Internal Control Signals} +\label{sec:control} + +This section not needed... All information is in Section~\ref{sec:timing} (Timing). diff --git a/docs/debug.tex b/docs/debug.tex new file mode 100644 index 00000000..98bab10d --- /dev/null +++ b/docs/debug.tex @@ -0,0 +1,49 @@ +\section{Debug Framework} +\label{sec:debug} + +All output in OpenRAM should use the shared debug framework. This is +still under development but is in a usable state. It is going to be +replaced with the Python Logging framework which is quite simple. + +All of the debug framework is contained in debug.py and is based +around the concept of a ``debug level'' which is a single global +variable in this file. This level is, by default, 0 which will output +normal minimal output. The general guidelines for debug output are: +\begin{itemize} +\item 0 Normal output +\item 1 Verbose output +\item 2 Detailed output +\item 3+ Excessively detailed output +\end{itemize} + +The debug level can be adjusted on the command line when arguments are parsed using the ``-v'' flag. Adding more ``-v'' flags will increase the debug level as in the following examples: +\begin{verbatim} +python tests/01_library_drc_test.py -vv +python openram.py 4 16 -v -v +\end{verbatim} +which each put the program in debug level 2 (detailed output). + +Since every module may output a lot of information in the higher debug +levels, the output format is standardized to allow easy searching via +grep or other command-line tools. The standard output formatting is +used through three interface functions: +\begin{itemize} +\item debug.info(int, msg) +\item debug.warning(msg) +\item debug.error(msg) +\end{itemize} +The msg string in each case can be any string format including data or +other useful debug information. The string should also contain +information to make it human understandable. {\bf It should not just be + a number!} The warning and error messages are independent of debug +levels while the info message will only print the message if the +current debug level is above the parameter value. + +The output format of the debug info messages are: +\begin{verbatim} +[ module ]: msg +\end{verbatim} +where module is the calling module name and msg is the string +provided. This enables a grep command to get the relevant lines. The +warning and error messages include the file name and line number of +the warning/error. diff --git a/docs/figs/2t1_single_level_column_mux.pdf b/docs/figs/2t1_single_level_column_mux.pdf new file mode 100644 index 00000000..94917359 Binary files /dev/null and b/docs/figs/2t1_single_level_column_mux.pdf differ diff --git a/docs/figs/2t4decoder.pdf b/docs/figs/2t4decoder.pdf new file mode 100644 index 00000000..acd551d7 Binary files /dev/null and b/docs/figs/2t4decoder.pdf differ diff --git a/docs/figs/4t16decoder.pdf b/docs/figs/4t16decoder.pdf new file mode 100644 index 00000000..0bc44718 Binary files /dev/null and b/docs/figs/4t16decoder.pdf differ diff --git a/docs/figs/4t1_single_level_column_mux.pdf b/docs/figs/4t1_single_level_column_mux.pdf new file mode 100644 index 00000000..32304833 Binary files /dev/null and b/docs/figs/4t1_single_level_column_mux.pdf differ diff --git a/docs/figs/Array.svg b/docs/figs/Array.svg new file mode 100644 index 00000000..419083d3 --- /dev/null +++ b/docs/figs/Array.svg @@ -0,0 +1,1475 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + Bl Br + + + + + Bl Br + + + + + Bl Br + + + + + Bl Br + + + + + + + + + + + Bl Br + Bl Br + Bl Br + Bl Br + Col.Mux + Cell + Cell + Cell + Cell + Cell + Cell + Cell + Cell + + + + + + + + + + Array + + + + + Bl Br + + + + + Bl Br + + + + + Bl Br + + + + + Bl Br + + Cell + Cell + Cell + Cell + Cell + Cell + Cell + Cell + + + + + + + + + + + + + + + + + + Bl Br + Bl Br + Bl Br + Bl Br + Precharge + + diff --git a/docs/figs/Col_mux.svg b/docs/figs/Col_mux.svg new file mode 100644 index 00000000..4fbf41be --- /dev/null +++ b/docs/figs/Col_mux.svg @@ -0,0 +1,1401 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Bl Br + Bl Br + Bl Br + Bl Br + Col.Mux + + + + + + + + + Array + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + select lines + + + + + Cell + Cell + Cell + Cell + Bl Br + Bl Br + Bl Br + Bl Br + Cell + Cell + Cell + Cell + Word lines + + + + + + + Write Driver + + + + Write Driver + + + + + + To Sense Amp + Enable + Clk + + + diff --git a/docs/figs/Logic Diagram.svg b/docs/figs/Logic Diagram.svg new file mode 100644 index 00000000..2a29e937 --- /dev/null +++ b/docs/figs/Logic Diagram.svg @@ -0,0 +1,747 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + Precharge + Array + + + Sense Amp + Output Latch + + + + + + Out to System + In From System + Bit LinesBL0,BR0, BL1, BR1, ... BLj BRj + + Word Lines W0, W1, ..., Wlog(n) + + + + + A0, A1, ... An + A0, A1, ... Ak + Sclk + + clk + + Bit LinesBL0,BR0, BL1, BR1, ... BLj BRj + Bit LinesBL0,BR0, BL1, BR1, ... BLj/2^k BRj/2^k + + Pclk + DataD0, D1, ..., Dj/2^k + Data OutDo0, Do1, ..., Doj/2^k + + + Address Decoder + + + + Column Mux + + + + Write Driver + + + Enable, Data in + Bit LinesBL0 ,BR0, BL1, BR1, ... BLj/2^k BRj /2^k + + + + + + diff --git a/docs/figs/ZBT.pdf b/docs/figs/ZBT.pdf new file mode 100644 index 00000000..a146850e Binary files /dev/null and b/docs/figs/ZBT.pdf differ diff --git a/docs/figs/bank.pdf b/docs/figs/bank.pdf new file mode 100644 index 00000000..4bf5dd44 Binary files /dev/null and b/docs/figs/bank.pdf differ diff --git a/docs/figs/bank2.pdf b/docs/figs/bank2.pdf new file mode 100644 index 00000000..fa6e34a7 Binary files /dev/null and b/docs/figs/bank2.pdf differ diff --git a/docs/figs/bank4.pdf b/docs/figs/bank4.pdf new file mode 100644 index 00000000..5d2b827e Binary files /dev/null and b/docs/figs/bank4.pdf differ diff --git a/docs/figs/cell_6t_schem.pdf b/docs/figs/cell_6t_schem.pdf new file mode 100644 index 00000000..b01c23a6 Binary files /dev/null and b/docs/figs/cell_6t_schem.pdf differ diff --git a/docs/figs/cell_6t_schem.svg b/docs/figs/cell_6t_schem.svg new file mode 100644 index 00000000..9af83cba --- /dev/null +++ b/docs/figs/cell_6t_schem.svg @@ -0,0 +1,522 @@ + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + VDD + GND + BL_bar + BL + WL + + diff --git a/docs/figs/cell_view_1024_16.png b/docs/figs/cell_view_1024_16.png new file mode 100644 index 00000000..f85358c7 Binary files /dev/null and b/docs/figs/cell_view_1024_16.png differ diff --git a/docs/figs/cell_view_64_4.png b/docs/figs/cell_view_64_4.png new file mode 100644 index 00000000..12e39112 Binary files /dev/null and b/docs/figs/cell_view_64_4.png differ diff --git a/docs/figs/class_hierarchy.dot b/docs/figs/class_hierarchy.dot new file mode 100644 index 00000000..00337aec --- /dev/null +++ b/docs/figs/class_hierarchy.dot @@ -0,0 +1,10 @@ +digraph G { + module [shape=record, label="module\n(e.g., bit-cell array)"]; + design [shape=record, label="design\nDRC_LVS()"]; + hierarchy_layout [shape=record, label="layout\n"]; + hierarchy_spice [shape=record, label="spice\n"]; + + module -> design + design -> hierarchy_layout; + design -> hierarchy_spice; +} diff --git a/docs/figs/class_hierarchy.pdf b/docs/figs/class_hierarchy.pdf new file mode 100644 index 00000000..154e8955 Binary files /dev/null and b/docs/figs/class_hierarchy.pdf differ diff --git a/docs/figs/class_hierarchy.sh b/docs/figs/class_hierarchy.sh new file mode 100644 index 00000000..86302860 --- /dev/null +++ b/docs/figs/class_hierarchy.sh @@ -0,0 +1,2 @@ +#!/bin/bash +dot -Tpdf class_hierarchy.dot > class_hierarchy.pdf diff --git a/docs/figs/column_mux_schem.pdf b/docs/figs/column_mux_schem.pdf new file mode 100644 index 00000000..c5f228da Binary files /dev/null and b/docs/figs/column_mux_schem.pdf differ diff --git a/docs/figs/column_mux_schem.svg b/docs/figs/column_mux_schem.svg new file mode 100644 index 00000000..c60edce8 --- /dev/null +++ b/docs/figs/column_mux_schem.svg @@ -0,0 +1,665 @@ + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + BL + BL_bar + BL0 + BL0_bar + BL1 + BL1_bar + BL2 + BL2_bar + BL3 + BL3_bar + A0 + A0_bar + A1 + A1_bar + + diff --git a/docs/figs/control_logic.pdf b/docs/figs/control_logic.pdf new file mode 100644 index 00000000..962a901b Binary files /dev/null and b/docs/figs/control_logic.pdf differ diff --git a/docs/figs/decoder_to _array.svg b/docs/figs/decoder_to _array.svg new file mode 100644 index 00000000..9b7499f4 --- /dev/null +++ b/docs/figs/decoder_to _array.svg @@ -0,0 +1,409 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + Address Decoder + + + + Vdd + Word Line + Vss + + + + Vdd + Word Line + Vss + + + + + Array + + + } + } + N-Well + P-Well + + diff --git a/docs/figs/gds_file.pdf b/docs/figs/gds_file.pdf new file mode 100644 index 00000000..c79bcc2f Binary files /dev/null and b/docs/figs/gds_file.pdf differ diff --git a/docs/figs/layout_view_1024_16.png b/docs/figs/layout_view_1024_16.png new file mode 100644 index 00000000..a97bfe63 Binary files /dev/null and b/docs/figs/layout_view_1024_16.png differ diff --git a/docs/figs/layout_view_1024_16_annotated.eps b/docs/figs/layout_view_1024_16_annotated.eps new file mode 100644 index 00000000..3b94d87d --- /dev/null +++ b/docs/figs/layout_view_1024_16_annotated.eps @@ -0,0 +1,4512 @@ +%!PS-Adobe-3.0 EPSF-3.0 +%%Creator: cairo 1.8.8 (http://cairographics.org) +%%CreationDate: Thu Jul 22 08:02:09 2010 +%%Pages: 1 +%%BoundingBox: 0 0 776 679 +%%DocumentData: Clean7Bit +%%LanguageLevel: 2 +%%EndComments +%%BeginProlog +/cairo_eps_state save def +/dict_count countdictstack def +/op_count count 1 sub def +userdict begin +/q { gsave } bind def +/Q { grestore } bind def +/cm { 6 array astore concat } bind def +/w { setlinewidth } bind def +/J { setlinecap } bind def +/j { setlinejoin } bind def +/M { setmiterlimit } bind def +/d { setdash } bind def +/m { moveto } bind def +/l { lineto } bind def +/c { curveto } bind def +/h { closepath } bind def +/re { exch dup neg 3 1 roll 5 3 roll moveto 0 rlineto + 0 exch rlineto 0 rlineto closepath } bind def +/S { stroke } bind def +/f { fill } bind def +/f* { eofill } bind def +/B { fill stroke } bind def +/B* { eofill stroke } bind def +/n { newpath } bind def +/W { clip } bind def +/W* { eoclip } bind def +/BT { } bind def +/ET { } bind def +/pdfmark where { pop globaldict /?pdfmark /exec load put } + { globaldict begin /?pdfmark /pop load def /pdfmark + /cleartomark load def end } ifelse +/BDC { mark 3 1 roll /BDC pdfmark } bind def +/EMC { mark /EMC pdfmark } bind def +/cairo_store_point { /cairo_point_y exch def /cairo_point_x exch def } def +/Tj { show currentpoint cairo_store_point } bind def +/TJ { + { + dup + type /stringtype eq + { show } { -0.001 mul 0 cairo_font_matrix dtransform rmoveto } ifelse + } forall + currentpoint cairo_store_point +} bind def +/cairo_selectfont { cairo_font_matrix aload pop pop pop 0 0 6 array astore + cairo_font exch selectfont cairo_point_x cairo_point_y moveto } bind def +/Tf { pop /cairo_font exch def /cairo_font_matrix where + { pop cairo_selectfont } if } bind def +/Td { matrix translate cairo_font_matrix matrix concatmatrix dup + /cairo_font_matrix exch def dup 4 get exch 5 get cairo_store_point + /cairo_font where { pop cairo_selectfont } if } bind def +/Tm { 2 copy 8 2 roll 6 array astore /cairo_font_matrix exch def + cairo_store_point /cairo_font where { pop cairo_selectfont } if } bind def +/g { setgray } bind def +/rg { setrgbcolor } bind def +/d1 { setcachedevice } bind def +%%EndProlog +11 dict begin +/FontType 42 def +/FontName /f-0-0 def +/PaintType 0 def +/FontMatrix [ 1 0 0 1 0 0 ] def +/FontBBox [ 0 0 0 0 ] def +/Encoding 256 array def +0 1 255 { Encoding exch /.notdef put } for +Encoding 1 /uni0041 put +Encoding 2 /uni0052 put +Encoding 3 /uni0059 put +Encoding 4 /uni0053 put +Encoding 5 /uni0045 put +Encoding 6 /uni004E put +Encoding 7 /uni0020 put +Encoding 8 /uni004D put +Encoding 9 /uni0050 put +Encoding 10 /uni0057 put +Encoding 11 /uni0049 put +Encoding 12 /uni0054 put +Encoding 13 /uni0044 put +Encoding 14 /uni0056 put +Encoding 15 /uni0043 put +Encoding 16 /uni0048 put +Encoding 17 /uni0047 put +Encoding 18 /uni004C put +Encoding 19 /uni004F put +Encoding 20 /uni0055 put +Encoding 21 /uni0058 put +/CharStrings 22 dict dup begin +/.notdef 0 def +/uni0041 1 def +/uni0052 2 def +/uni0059 3 def +/uni0053 4 def +/uni0045 5 def +/uni004E 6 def +/uni0020 7 def +/uni004D 8 def +/uni0050 9 def +/uni0057 10 def +/uni0049 11 def +/uni0054 12 def +/uni0044 13 def +/uni0056 14 def +/uni0043 15 def +/uni0048 16 def +/uni0047 17 def +/uni004C 18 def +/uni004F 19 def +/uni0055 20 def +/uni0058 21 def +end readonly def +/sfnts [ +<00010000000a008000030020636d617000a1f12800000fb00000006a63767420ffd31d390000 +101c000001fc6670676de7b4f1c4000012180000008b676c796685f3d158000000ac00000f04 +68656164dd84a2d0000012a4000000366868656110450779000012dc00000024686d747875cb +0aa000001300000000586c6f63612cae2944000013580000002e6d6178700451063a00001388 +00000020707265703b07f100000013a80000056800020066fe96046605a400030007001a400c +04fb0006fb0108057f0204002fc4d4ec310010d4ecd4ec301311211125211121660400fc7303 +1bfce5fe96070ef8f2720629000200100000056805d50002000a00ba40410011010004050402 +1105050401110a030a0011020003030a0711050406110505040911030a08110a030a42000307 +95010381090509080706040302010009050a0b10d4c4173931002f3ce4d4ec1239304b535807 +1005ed0705ed071005ed0705ed071008ed071005ed071005ed071008ed5922b2200c01015d40 +3a0f005800760070008c000507010802060309041601190256015802500c6701680278017602 +7c0372047707780887018802800c980299039604175d005d090121013301230321032302bcfe +ee0225fe7be50239d288fd5f88d5050efd1903aefa2b017ffe810000000200c90000055405d5 +0013001c00b14035090807030a061103040305110404034206040015030415950914950d810b +040506031109001c160e050a191904113f140a1c0c041d10fcec32fcc4ec1117391139393931 +002f3cf4ecd4ec123912391239304b5358071005ed071005ed1117395922b2401e01015d4042 +7a13010500050105020603070415001501140216031704250025012502260327062607260826 +09201e3601360246014602680575047505771388068807980698071f5d005d011e0117132303 +2e012b01112311212016151406011133323635342623038d417b3ecdd9bf4a8b78dcca01c801 +00fc83fd89fe9295959202bc16907efe68017f9662fd8905d5d6d88dba024ffdee8783838500 +0001fffc000004e705d500080094402803110405040211010205050402110302080008011100 +000842020300af0602070440051c0040070910d4e4fce4123931002fec3239304b5358071005 +ed071008ed071008ed071005ed5922b2000a01015d403c050214023502300230053008460240 +02400540085102510551086502840293021016011a031f0a2601290337013803400a67016803 +7803700a9f0a0d5d005d03330901330111231104d9019e019bd9fdf0cb05d5fd9a0266fcf2fd +3902c700000000010087ffe304a205f00027007e403c0d0c020e0b021e1f1e080902070a021f +1f1e420a0b1e1f0415010015a11494189511049500942591118c281e0a0b1f1b0700221b190e +2d071914222810dcc4ecfcece4111239393939310010e4f4e4ec10eef6ee10c6111739304b53 +5807100eed11173907100eed1117395922b20f2901015db61f292f294f29035d01152e012322 +061514161f011e0115140421222627351e013332363534262f012e01353424333216044873cc +5fa5b377a67ae2d7feddfee76aef807bec72adbc879a7be2ca0117f569da05a4c53736807663 +651f192bd9b6d9e0302fd04546887e6e7c1f182dc0abc6e42600000100c90000048b05d5000b +002e401506950402950081089504ad0a05010907031c00040c10fcec32d4c4c431002fececf4 +ec10ee30b21f0d01015d132115211121152111211521c903b0fd1a02c7fd3902f8fc3e05d5aa +fe46aafde3aa0000000100c90000053305d500090079401e0711010201021106070642070203 +00af0805060107021c0436071c00040a10fcecfcec11393931002f3cec323939304b53580710 +04ed071004ed5922b21f0b01015d40303602380748024707690266078002070601090615011a +06460149065701580665016906790685018a0695019a069f0b105d005d132101113311210111 +23c901100296c4fef0fd6ac405d5fb1f04e1fa2b04e1fb1f000100c90000061f05d5000c00bf +403403110708070211010208080702110302090a0901110a0a09420a070203080300af080b05 +0908030201050a061c043e0a1c00040d10fcecfcec11173931002f3cc4ec32111739304b5358 +071005ed071008ed071008ed071005ed5922b2700e01015d405603070f080f09020a15021407 +130a260226072007260a200a3407350a69027c027b07790a80028207820a90021604010b0313 +011b0323012c032708280934013c035608590965086a097608790981018d0395019b03145d00 +5d13210901211123110123011123c9012d017d017f012dc5fe7fcbfe7fc405d5fc0803f8fa2b +051ffc000400fae10000000200c90000048d05d500080013003a40180195100095098112100a +0802040005190d3f11001c09041410fcec32fcec11173931002ff4ecd4ec30400b0f151f153f +155f15af1505015d011133323635342623252132041514042b0111230193fe8d9a9a8dfe3801 +c8fb0101fefffbfeca052ffdcf92878692a6e3dbdde2fda800010044000007a605d5000c017b +4049051a0605090a09041a0a09031a0a0b0a021a01020b0b0a06110708070511040508080702 +1103020c000c011100000c420a050203060300af0b080c0b0a09080605040302010b07000d10 +d4cc173931002f3cec32321739304b5358071005ed071008ed071008ed071005ed071008ed07 +1005ed0705ed071008ed5922b2000e01015d40f206020605020a000a000a120a2805240a200a +3e023e05340a300a4c024d05420a400a59026a026b05670a600a7b027f027c057f05800a9602 +95051d070009020803000406050005000601070408000807090009040a0a0c000e1a03150415 +08190c100e200421052006200720082309240a250b200e200e3c023a03350433053008360939 +0b3f0c300e460046014a0240044505400542064207420840084009440a4d0c400e400e580256 +08590c500e66026703610462056006600760086409640a640b770076017b0278037704740579 +06790777087008780c7f0c7f0e860287038804890585098a0b8f0e97049f0eaf0e5b5d005d13 +33090133090133012309012344cc013a0139e3013a0139cdfe89fefec5fec2fe05d5fb1204ee +fb1204eefa2b0510faf00000000100c90000019305d500030039b700af02011c00040410fcec +31002fec30014bb0105458bd0004ffc000010004000400403811373859400d30054005500560 +058f059f05065d13331123c9caca05d5fa2b00000001fffa000004e905d50007004a400e0602 +950081040140031c0040050810d4e4fce431002ff4ec3230014bb00a5458bd00080040000100 +080008ffc03811373859401300091f00100110021f071009400970099f09095d032115211123 +11210604effdeecbfdee05d5aafad5052b00000200c9000005b005d500080011002e40150095 +09810195100802100a0005190d32001c09041210fcecf4ec113939393931002fecf4ec30b260 +1301015d0111332000111000212521200011100029010193f40135011ffee1fecbfe42019f01 +b20196fe68fe50fe61052ffb770118012e012c0117a6fe97fe80fe7efe960000000100100000 +056805d5000600b7402704110506050311020306060503110403000100021101010042030401 +af0006040302000505010710d4c4173931002fec3239304b5358071005ed071008ed071008ed +071005ed5922b2500801015d406200032a03470447055a037d03830307060007020804090615 +0114021a041a052a002601260229042905250620083800330133023c043c0537064800450145 +02490449054706590056066602690469057a0076017602790479057506800898009706295d00 +5d21013309013301024afdc6d301d901dad2fdc705d5fb1704e9fa2b00010073ffe3052705f0 +00190036401a0da10eae0a951101a100ae04951791118c1a07190d003014101a10fcec32ec31 +0010e4f4ecf4ec10eef6ee30b40f1b1f1b02015d01152e0123200011100021323637150e0123 +2000111000213216052766e782ff00fef00110010082e7666aed84feadfe7a0186015386ed05 +62d55f5efec7fed8fed9fec75e5fd34848019f01670168019f470000000100c90000053b05d5 +000b002c4014089502ad0400810a0607031c053809011c00040c10fcec32fcec3231002f3ce4 +32fcec30b2500d01015d133311211133112311211123c9ca02decacafd22ca05d5fd9c0264fa +2b02c7fd390000010073ffe3058b05f0001d0039402000051b0195031b950812a111ae15950e +91088c1e02001c1134043318190b101e10fcecfce4fcc4310010e4f4ecf4ec10fed4ee113939 +3025112135211106042320001110002132041715262623200011100021323604c3feb6021275 +fee6a0fea2fe75018b015e9201076f70fc8bfeeefeed011301126ba8d50191a6fd7f53550199 +016d016e01994846d75f60fecefed1fed2fece250000000100c90000046a05d500050025400c +0295008104011c033a00040610fcecec31002fe4ec304009300750078003800404015d133311 +211521c9ca02d7fc5f05d5fad5aa00020073ffe305d905f0000b00170023401306951200950c +91128c1809190f33031915101810fcecfcec310010e4f4ec10ee300122001110003332001110 +002720001110002120001110000327dcfefd0103dcdc0101feffdc013a0178fe88fec6fec5fe +870179054cfeb8fee5fee6feb80148011a011b0148a4fe5bfe9efe9ffe5b01a40162016201a5 +0000000100b2ffe3052905d50011004b40160802110b0005950e8c09008112081c0a38011c00 +411210fcecfcec310010e432f4ec113939393930014bb0105458bd00120040000100120012ff +c03811373859b61f138f139f13035d133311141633323635113311100021200011b2cbaec3c2 +aecbfedffee6fee5fedf05d5fc75f0d3d3f0038bfc5cfedcfed6012a012400000001003d0000 +053b05d5000b015d404609110a0b0a081107080b0b0a08110908050605071106060503110405 +0402110102050504021103020b000b011100000b420b080502040300af09060b080502040004 +06000a0c10d4c4dcc411173931002f3cec321739304b5358071005ed071008ed071008ed0710 +05ed071005ed071008ed071008ed071005ed5922014bb00c544bb00d545b4bb00e545b58bd00 +0cffc00001000c000c0040381137385940b80702080816021908170b2708270b34023808360b +4b0858055b0866026b087702770b8602800287058b08850b9402900297059d08960b1b060109 +03080707091601190319071709100d260128022903260528072709290b200d350034013c033b +043a063b073409340a380b3f0d48094f0d580b5f0d650065016a036a046805690669076c096c +0a78037906790778087d097f0a780b800080018302880385058408830b8f0d90009001940297 +0597069508930b9f0daf0d405d005d13330901330901230901230181d901730175d9fe200200 +d9fe5cfe59da021505d5fdd5022bfd33fcf8027bfd85031d0000000000020003000000000014 +00010000000000340004002000000004000400010000f015ffff0000f000ffff100000010000 +0000000600360000000000160000000100020003000400050006000700080009000a000b000c +000d000e000f0010001100120013001400150000013500b800cb00cb00c100aa009c01a600b8 +00660000007100cb00a002b20085007500b800c301cb0189022d00cb00a600f000d300aa0087 +00cb03aa0400014a003300cb000000d9050200f4015400b4009c01390114013907060400044e +04b4045204b804e704cd0037047304cd04600473013303a2055605a60556053903c5021200c9 +001f00b801df007300ba03e9033303bc0444040e00df03cd03aa00e503aa0404000000cb008f +00a4007b00b80014016f007f027b0252008f00c705cd009a009a006f00cb00cd019e01d300f0 +00ba018300d5009803040248009e01d500c100cb00f600830354027f00000333026600d300c7 +00a400cd008f009a0073040005d5010a00fe022b00a400b4009c00000062009c0000001d032d +05d505d505d505f0007f007b005400a406b80614072301d300b800cb00a601c301ec069300a0 +00d3035c037103db0185042304a80448008f0139011401390360008f05d5019a061407230666 +0179046004600460047b009c00000277046001aa00e904600762007b00c5007f027b000000b4 +025205cd006600bc00660077061000cd013b01850389008f007b0000001d00cd074a042f009c +009c0000077d006f0000006f0335006a006f007b00ae00b2002d0396008f027b00f600830354 +063705f6008f009c04e10266008f018d02f600cd03440029006604ee007300001400b6060504 +030201002c2010b002254964b040515820c859212d2cb002254964b040515820c859212d2c20 +100720b00050b00d7920b8ffff5058041b0559b0051cb0032508b0042523e120b00050b00d79 +20b8ffff5058041b0559b0051cb0032508e12d2c4b505820b0fd454459212d2cb00225456044 +2d2c4b5358b00225b0022545445921212d2c45442d0000010000000200001def707c5f0f3cf5 +001f080000000000bab9f0b800000000bac26791fe89fe1d0a4c076d00000008000100000000 +000000010000076dfe1d00000abcfe89fe890a4c000100000000000000000000000000000016 +04cd006605790010058f00c904e3fffc05140087050e00c905fc00c9028b000006e700c904d3 +00c907e90044025c00c904e3fffa062900c90579001005960073060400c906330073047500c9 +064c007305db00b2057b003d00000022009c012601880204023402880288030603460424044e +048604c60536058205b006040626066c06b407820000000100000016004d0007004200040002 +00100040000700000415056800030001b8028040fffbfe03fa1403f92503f83203f79603f60e +03f5fe03f4fe03f32503f20e03f19603f02503ef8a4105effe03ee9603ed9603ecfa03ebfa03 +eafe03e93a03e84203e7fe03e63203e5e45305e59603e48a4105e45303e3e22f05e3fa03e22f +03e1fe03e0fe03df3203de1403dd9603dcfe03db1203da7d03d9bb03d8fe03d68a4105d67d03 +d5d44705d57d03d44703d3d21b05d3fe03d21b03d1fe03d0fe03cffe03cefe03cd9603cccb1e +05ccfe03cb1e03ca3203c9fe03c6851105c61c03c51603c4fe03c3fe03c2fe03c1fe03c0fe03 +bffe03befe03bdfe03bcfe03bbfe03ba1103b9862505b9fe03b8b7bb05b8fe03b7b65d05b7bb +03b78004b6b52505b65d40ff03b64004b52503b4fe03b39603b2fe03b1fe03b0fe03affe03ae +6403ad0e03acab2505ac6403abaa1205ab2503aa1203a98a4105a9fa03a8fe03a7fe03a6fe03 +a51203a4fe03a3a20e05a33203a20e03a16403a08a4105a096039ffe039e9d0c059efe039d0c +039c9b19059c64039b9a10059b19039a1003990a0398fe0397960d0597fe03960d03958a4105 +95960394930e05942803930e0392fa039190bb0591fe03908f5d0590bb039080048f8e25058f +5d038f40048e25038dfe038c8b2e058cfe038b2e038a8625058a410389880b05891403880b03 +878625058764038685110586250385110384fe038382110583fe0382110381fe0380fe037ffe +0340ff7e7d7d057efe037d7d037c64037b5415057b25037afe0379fe03780e03770c03760a03 +75fe0374fa0373fa0372fa0371fa0370fe036ffe036efe036c21036bfe036a1142056a530369 +fe03687d036711420566fe0365fe0364fe0363fe0362fe03613a0360fa035e0c035dfe035bfe +035afe0359580a0559fa03580a035716190557320356fe035554150555420354150353011005 +531803521403514a130551fe03500b034ffe034e4d10054efe034d10034cfe034b4a13054bfe +034a4910054a1303491d0d05491003480d0347fe0346960345960344fe0343022d0543fa0342 +bb03414b0340fe033ffe033e3d12053e14033d3c0f053d12033c3b0d053c40ff0f033b0d033a +fe0339fe033837140538fa033736100537140336350b05361003350b03341e03330d0332310b +0532fe03310b03302f0b05300d032f0b032e2d09052e10032d09032c32032b2a25052b64032a +2912052a25032912032827250528410327250326250b05260f03250b0324fe0323fe03220f03 +210110052112032064031ffa031e1d0d051e64031d0d031c1142051cfe031bfa031a42031911 +420519fe031864031716190517fe031601100516190315fe0314fe0313fe031211420512fe03 +11022d05114203107d030f64030efe030d0c16050dfe030c0110050c16030bfe030a100309fe +0308022d0508fe030714030664030401100504fe03401503022d0503fe0302011005022d0301 +100300fe0301b80164858d012b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b +2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b +2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b +2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b +2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b002b2b2b2b2b2b2b2b2b2b2b2b +2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b +2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b +2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b +2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b1d00> +] def +FontName currentdict end definefont pop +%%Page: 1 1 +%%BeginPageSetup +%%PageBoundingBox: 0 0 776 679 +%%EndPageSetup +q +Q q +7.707 667.777 760 -814.398 re W n +q 0 0 777 700 rectclip +[ 0.8 0 0 0.8 7.70649 -146.621008 ] concat +/DeviceRGB setcolorspace +8 dict dup begin + /ImageType 1 def + /Width 950 def + /Height 1018 def + /BitsPerComponent 8 def + /Decode [ 0 1 0 1 0 1 ] def + /DataSource currentfile /ASCII85Decode filter /LZWDecode filter def + /ImageMatrix [ 1 0 0 -1 0 1018 ] def +end +image +J3Vsg3$]7K#D>@X%)XnS)[qKi@M(SI<[AN=7H774jC17kO2kcD3>@cH-^$o,1:^r(>q_R=Al + C^cenm@9:1mM9jS"!dTMT<$3[GQ$8#0$s<4ZX!SPQ1`C/mNDH?Y*`p%]Z?>d6a`U`\M^gHS4lm;rFK>V/<(qZ?>*KS9PE`kN%="Tc + _Aoh+fk'&t\ctIN)4XQLiVpoI(:n)PVIBCN6D34(t\o4p0?mdmM[+f#sfZcAPrEgA#a5h8d + >eXi0S^6MAHe+")]cj7E(p*PZ6rh=(,dIU>=;fBr>1IXb_>k + P!3[Vlc]Ift`[fh>e`R/.f:bLf>(u5`eYM$):=E-ON-NZ7cGM&A/ef_T5Ys"%2R2%gbY&,R + "-9O_e;>`Y"/@)9.f?D&^M-b]Or)0EQM7_.Yr/KL>6F%3\!B,B/Q#Lb+;r8TFs'-pmL#6o. + 2n7&kl1.r7]s9G7iR1!Gh4bqmTX9[u#FPAZD"ReA#&7l_T:DFlX + =&W,$D-PU,c#m=DQ0j!,fF2m^h95J.;*e44Kb%3UV:)/KAQu + 3q"f9]-K4i>X*UBMpk*UsSG;IuP]_l6B/'B8MY1F2#togO[JR;Q;sjr'1jRHBp<.>]GRr7&kmMh(\Wk^\8KI^4"=I@mb9Z&'5nhV%E%]U:DLk=S8TF]2mM_]%)L2, + .77IDD=PkJ&/cf!g<&o@/]mZ+3X#J[G5d8Hf(qS.Vr7DWhm;2:I_VrMHJ[8kmX/ciS>^i#J't:oC2_h'IH + k2!V1*/TlD/n/Vn:pfIP:QfhqN6"JcN5E62prpC^;/&."OY)%fp'k%tWm6"$jp@"CS;J82+ + ?VR+O1tTZe4*:b=<9pe;''6\L,SJ\nql>moVE0nrNM)FIKS!/[3MKT6)c^t:J0+L?AROIcb + 8L@RW=/8(daNS-_39Y]_t9'5JO4,#`F-&j"%0ZPhgDEbjpV8=Ko3( + hB^tP>Z9n8_H6SjTAD=`5YEd1^<4&j@P?6OU/M=d0JI=Wg5&R7QQlDM;sP\QI;@/adGLLjo + iMf;\!81n3%H-F\^s%4"%u4RRS3CcPcA$B.X.W<"=LV=q*d?KE@\jmXCKp)Ik.g\id> + hLsO3C6`@[0UGK?%*kDqRkli6+<0!,:)+I:G/7b3r3^c@R+U6n1dA>3q$;B,S9&WISRo5]F + 6-*,!kq,3"<=Ya&>)_3N!A8oJNa,6"S:p!WXd,/0=[VpRE3_Fc*+n= + Ue6o7;8l(Y-qB]b>LoJK6*8?\%qiLun?Cf-sj.'BO\.'P3k8\^+K]7>\9M0#h#C_- + @:XJsQ(uYL=4ak,7i_VKjrc0^e)`$3o8qb:_aSZoY+0'6EnSTDtKZC5l,akSpk1FT'C](-o07XI:0N(%$ + 'eUA's>AIX5h1h$#6M=a?h0\UEnMXDhq:+`XDlY.i^=,]UTo-1+DYgBZR\2E\*O300XSqrR\+N1`.$ + t:2n?SP68_q+NAj'1skYeE?@(B533>`Fm:7S/?%`unM@'8R7n*Q.VI'$pBGNU@M%a12C1@S + Cj+ZNaj^=cYa]p+V#A3!DZ4.94.@eP;8i.j3+?]\)m_/BcWT^#B@Xnfk.W(LfrjD^CjD + $#2F>bMq_q`KX.;&dIaVCq8nhQ_%I^&WLUhB:&HieRE;d@$#]!76.u([1A_+XFU4@%JNqEl^6$;?\WOV*Q.Z'cf'(h"A64&Jd@(_]2[&enX_2LWdX!gde<+OqK$ehj:If-kD + 8]c?-E&!0f2!f;dXiUD'2B=E?pAsA^&JiDhP9.Zhp(us8*RF25LFMDO5A.5ICpWmpsqY+qg)3[qn + CDA^lI(/O4=4a"TWKIT[29_c_+D0')7G_n-qSN&#cLi*s$=+rX^"MM.6In??cVI\T`5$*]<:9[q=h%1/-;ZAf;%0YIa,33s1C + UWgI\0]9BT'sV$ZjOY$@mW5H[%o-k:BI + @/(JhF1&Otu:!q=Su]MJ+sn2V5!U7_V?$ZVRPd@2$DV&D(f)A0(iEN^:cYo@\j)mQ + ^gn[TVO]c8cK*-'4C;:-Agdi@o.*O49Z+X1qK,-iL=dO?C1m[\>s=U'h$OYZWmOSXu^o8uV6Pt&2IT+:HJah7eI=$&9 + :nF0i&YV2]47d/.sZjnhhXJ"Y^Sp0Ja"ho*mE1$Sc]70p<>,ZQV'p,r*jt1,CF9F"K1(0f* + l(1UAqpdlB5U75Qel1_WS?F&+X!;)NDp125=WVCZ&.3uG,`qGQ>W0BE!#:B[t%%rt_s;Hke + 0i*NTN1U?`Zj<@nC51U/sY,cO_e42Os<$S82dm6)$t3lP)`PEo2q4$M-UXu#B.LLc95G^\<1atp@P=;iW4&f9KF@ej,CI%MG9.?o2e6PL=Y=Nb*8MkEV"W%9*K0%MM72+uO'6Q + pd9gSDG4Og3!e,qjU#tC/%(UPhee.YJ3cUY=^89Cn!1r2PdRn]-h8TWibFM0^Goh/5u8eff + J<<5ZjhaUT*7LKAj'am3j#u61\r!I:-'YdM0?Vkk?8(#Nuo0:b;;q'W"oi4Y+[o%7\::)L2eS.u^rDti[5;b`&"f4so6W^W:6$2'ceON;43 + E,TZ;mYcXVG5?OW + 5m62I30<4`8;ei-:3$"6k+Dt\g$emh%'I<2i1CU + R#AFt7ZUZYro!Pk81%[ht)^V/$76B6BVYQUtk79^S%7G*aRZbFnT!/6FB1bF-3J&WNHj + "d3`]j5G8Fr$o61ttDjGB,pT&I=MgL]U?^EQk[K1`!Kj/<]AJ3AnjoZliprZ$hISi6:p!2b + OWmGZP_aj[DqHhen31%s< + (b///-"pALI'tVPQa0QaM1ZVFB%6!q(O8rH(PO_BCH+8+[WR9?ULBO,Hh\F^2K+=p6EaI;L + KAbSpk=P!?%mBIHC.KZpml$L-W-7lBfL$cQ)TD["_r3HMcYOd(o;n/eO*D@MO)#42kbu9@@7)D7@Q6GV(guYD@9PJbX_<3&Q + KDZ&#p=GkgQ-eXqX7?]k(_NS*E:f`un85pgJ5UGE_gDF;ZH:d-[(,ac-NUG52` + '`f$+HIuLooOr3^i\J^Pg;2c;OMKr-V)3'iGpPRWMLN5Oeq"9j'q2Q<(N`>P5fjU587@Elp + 6+G[)2?T7VQ^KbN;e/!_`ctV5DYUH38hNCTVY?Y+3tmtQZME)D$7b908UsDRJEL9]#Tb/l@-7Nr%AQ;.uUA4bNFMj:923]!qNl@EIH, + <]F4cT+JHb'ZFH$>P()jtmgG*G:(3.$`$UJG%!VHBmnRR`^t@uGM!U"Y:">#hGS$&;P9W#* + jXg1kjKB;]`^RmmEH\VlDJ4fZ)ANgWJ;Ks.:T]rIMYW;8NUK]ekl+,sBbO`]'/pB,,U'r@? + \XTrF-^spXJm,Req[[mtO--taY^:_Z<_'aUS[/,XZ]b)Sq9hjFml%`22\ + Pd#n0[NpDWr\@VL-DnH1]Hfgn$=,),e?%H#'`)=1888Vj=WReW$ + 'm%B"S&86YX.1a?*2pXl?*;qR^KO"@MQosf\S51QHrG)KF/GHTa-bF`]Lf?o]><12` + E_.qoKC1Ijg#V2cTL%,R]k!pbKb6*OeoJ4>??1,V9,8"brl``ft&m80PJ+)`man,`(e%[he + !igS%R"Upqsq\?bfphlT9s@4Y=ES1!Q6)c-T=@Rt>#FQde-KeQf`4]Sk@QY0$E8YFHcfPZF + KEh)opn8j,$>n/3%j:S4nIb-&P^\+i()SHCh)Bmj41VoBeZZ= + />p7d(f?h4Yb@q@:]ZJ*?.='_7aZT%E,DY)<`i=F^gt_!C>X.,Y"5\3.d+sI_)fsD,!T>#$ + coqcdG#d+aOj^:_E#c'a*>d_*FN/^qA_e`oI1P364hJA$WLUAuSN5^.#NX%2ar5Vu^!#="" + lru3f)>-TrS?T7;W$8*X?+,WmW[SljM>-Tb8in2fNm>tNT;*-,TZ:4\1,q?rSG15^"uE'Sp + $9GQ(E<.jdJ+g[Dh582XC@=f/o,UrS-<1EQ&qQl[GtqVK_F>46DEsm9X2:IECoJJ5@elm!_ + Ol-OX_(L$i8Ie=@?>^DEA(&)b-(hd68aIcp!Boq*7%RU!h\gUG?hp[Od&hHgZX54@SsZ1=M + Sl1tb801mQt+B3)+cY#;ZE(u"G`jHj@"\=XHAZNJF][#OeK$HNprBJfQ2sEHh07NT3Qt"=Bq3c3[UpDA$-gR=Mb[+p`r\a+.c1oXuaBi"qh + @G(H::D4jY!1V`&,5i!!@1mnJJ'2#p4d;Tl + I%?68'UH^Z*YnKQ\4ZKLf[[q.-'U$^Alue#9A1LH1:5V%O&&&kP6T:Z?AoAAX`hTMajV]%' + P)&ZnC#dOLLhLG+V7WtkJ*#)*qY:SG4Rh3tB&NDnn:b2nr:@'%oIF\APLBkjR!/^nu6LC%d + `8F\Wah<)1W_-_2+pjP9gK:lI%dVI(m,CZRbZ]Q`F2S44\ddl*sk/G4-;S\ch<[).9K"[kd)YH%3*d=MgWYlK1O;5<8mA@P._ENr.\h0i/gNL-Dd#d_NG/.cgQ@DSsWs_6/,`!^1BeYlI'$HB + /7i0(V-fZ*=-$"Ll\22%I-3X>:AI0WRbW2K6T,keAjA?GjY'HlEmAcc]/[3q6G](:hiAk16 + d-9Uu&<%RY:)^$TpAc,sru'XfSKXAH.E8j':)b*%.q/^3YKZStVMK];@.d*,Cs_@Km(i4pn + U^HB:dl8jVp%J9lE7$-2J'=tNUf06EY)pjMh'V`Q19Q"\R,uQ7P[nT`fUpgH3Z^]299ls*- + m7d0n#/.H:m5lOkn:P^X3me)cfi75_.iqUW14*2,/+QZ"ksAKZ!$R&[rU2Ko]]aP>@%8l?oC38PH+DicXGj.2S"rQ%orDXle/-oDK(hp + /Y^u=rY(c6]I))LE>h;^P1/1B)dC_&V#)J->mu]CXE0?=R`pl["dh4>CtC4XpiOEN[4jG^Y + ]g_gPr@L*Q\47ACP4"\Eu'NGTO;$inN\tU2)N_QH[eDVo%=O&jR>"7o86L'X]q^(St;-;jn + [bi,O6/L[`mH-p2O;a2kK?&8JuDglSeHD5IE[2HMa(.2cVNU\\Eq#I+rBf?Z!aT1Bt"q+:J + X)LV:d!"4I:t6hYpZYfso7)#@NR7=$Vq$9n2U"j=g'J+-&6'?DZnT)"Cn%&st.#Z12&;rE9 + urTQXkGk2b^c>h15(D?JbgRtn:K+NUo\2XVG+qnToE>A",U0@46>6p(i76A4SJJ=^Ic%h;@ + /&V.$`o;)%Gd$p^_g&QT@@RO0WtlWg-f#]7P:(\HH3BO)U;nBu&:[Nb%Req\hB+gY6dUi<8 + 9aM8RkdBaYd(FQq'-fB"B0i3:-Ud?[.9p?9SIL&9>u^,&7Z\I44)OO7u4JHSANs>NZ'!/#u + _\:>Z?qCIPa"iEu*EPQ&X+%1e/AT*8g)SF;"Po0ugN!,0Qo[%]S;7-ZoA8]@P*]4H+aTMC'.k%^pXE\#M0hp,LmYM[o/<2Yqec^:YoFYK,pM\ + m4qnW3-Ah_r-k(c!WaW!Td`14CPb"L)A<*.2<(R + aV$e]>!knT/J3FDZBl>q#a/ne&YgkElcci38)s[\=YoJS:o[5OaDF58PcBC8=]n%Y"\PKN$ + D'SP8GFZsEMc]cT[-fH94s5g9bj+H<9*F$kZYEd'H4!KMU=:0jDC^bDL>L[#=R]#IB/HQOO + oq\5a;cfXg'(*<(b)GW23(^&]2H5.Tp*C/0qI)2OrIE]_;6,ej6]"-[PeW#f3?4,Y-$eI1T&aXb("`>RVKT]lE+'Eqf=F8 + B;W%JT[%mcJT*a(+nO)>:rA;m">Ee[6.\M + G^H4FrcHDu@J^mqr>j1PKXS%%af5@#0?]4H/ + [Z3+lGPZc\Hinfd.tPRg03>15CRTi*POKl,3 + -=[MJdl/]m+`KSX`31E)'PhGu$*USAo\lmPhn+)JS.M_k$C$"3*=p($@][HLl#Y`d09CkP[ + +4EB]kFp`C=1]EarMcCra4(I@>U4,*=@Q.GeM1[0eoFA:iE`Tm)Skip1?&drf-ApV`s1I+^^a%u+PQS[YB"N + %248YR2>IultL-!H,-K-BoRi]*s&uOu95i]qr6_(-<0o3ut]7NjF!pqA`l+A533]XW#n=N" + 2*5S?56$sWS*#udmjMB9Z[e([qMnU7^+td?E6?BN*6`!)"e\Z+'Pq0#HS1I!qeA0H/65ttP + pkZf9T,#cE6Ak1u3jM*\V^mt2-U]/^KK):d3BQO%03IU-S$]-,012b=_E5R`KKUnD-:<%f6 + 5+aUZY`&2R(K.B4%(k8@^'M1Y7^r3<<_@/ZH>Y7EF9=IbW`<77"CeI..6E + 8704>^,,Zphqb8];%;62X/=S5mNa_Sm3G&0+/.bZ:gX?8%7"6o7S+Ugui7<5TD4_;o5poKg + Jr=Jb(]_HFq!(oBbR'Lo0*7Z8W_S8GGL7)pQl6VMAN>]N;==[pUa6&\RYr*26c[mkaka((^ + C>WtYUj/B"4.\Z3"),lMT=\)*;Oq`S@WI.5[O@V.<7$JIuZm`qo(VGDH_!2=jC?!''2+@)m + aMYnde8n*DNiq)Q8JEdK!j8H>N4`Ch`WSQH4HIKuQH#_e]Mt-;e="2?:!&7I8$fXg/65=^Q + q?Y)8DKFAr16KmF2haeRd&Nu<1-&-P=i3^b(QY3e>p`6P"Pq]aZMQ*e3ZVMHcP3R)sjh"/? + )8+Bu\)u8h/9-.4DA6:HBIG6S(8;KXn`FeOke/YEBJc4L.$l"O"_8ao$NX/=WOOU.b]b75S + :4*5T[[^rqDL`Iu"<$JW[EThH`>]O[m4/A]MoaNX9GbNt9`/>#PQ_b5s69hV1ueCI2jY"Nk + ]bqX966_dAWe]eMube2@t4=eV>(!Q%&8d*nm[&QH;e0k$cM]1?qWX$hT/X*!PXto$4b#-ID + VOp!@&S1:S`:=eg7F&:.R[iaoh!:kcMFadp\\uak.9angQ;)J*bM.nH4Is_0XN+SIc6OCUo + YsUQgr(C?7/WKG%+_6@.\_UVc?)V#eHnZ,Tb&4@bG=Q#"NO,^kKmc%:)'h0D#@-&!\]N89n + ]$4e@&43%Sa>D:^$bdr=RET)Gl,)c4(ag*?*$.`m@Cq:gG*QjQ=eE$d\1^61#pL<<5gQ]>K + =3b`W#tK\jTT][Be!dLp9@$sZY8/kR+k9e?-96En_mQW"&(;(W.'eKE=H"]Cl@;Df?>I3d4 + J2p4'%e!/t7%0Y.e@o&&sFo[@(TVaGu. + r3n[\:F>mZO^0E)PiC#37_<3q:uqF5rZM!G; + `#c:I9t$t#L[`#e-q>a!Me4k6jPhjn2$t@g-HIApEe89]e/D! + k'B[][gb*@\4"btXBK2mn^emri(XPHnlLJc1UMq.K&+>#t29hHWVO4(,S=+"U + ]NL*ZDR8scefEIPm4[.@93n%Z#2t]jI1q(oiPZ79deH,uHWNZ`k;Of=6g20X7S/PCDMcdr\ + &oF+>"Xqh7ES%S?fj*W=japYCl-dg==7pGW`J.M!X]IBcgKh:R!&R=4PXPm$ + 66m\6Buj`P']$Fdu*AX4LopdZo[@-+Kdge(hN(>lAHoV;>F1_H>(6=P^aH[GP7Y]\U6,gsp + >mrP[6_`S;JE?!Y"tD5H*:dFL1]gmm8(NQ,;+*c#7AnakqaZA9XL%3m7FLo"F?L6>$r)f3]`E1mB=XE$5Xn5trgg5^%?2`egc*gqP + ^gKS^?=]S\XiF_l]%glu7f=sg>[lPB&):1le'6b-[I5E5"09,]?:GMf/cj4fo?/HY@?qI,[ + GYGI#2nVa@?"gT'fTRGKjht;bH5#WeZ`JY+5NM)?nLV&<[V=Hh-1U@>Em+`D@t7p/6:S`@& + =XrQ%WU9(>h"rd-_;%/aVL\mpWpZim""PhBLEc\mR-N@ob'gAYrtNp"\Cb)"%H9*Z/@(*ar + )/@J1&gk!MtZ%-1/>?hg9o>X>S/h]/4^6HTPog%\(3RFN"+PR=UQVGeJAmUYk9.>:d7/G3S + %pWj%Gjb?oLXA*5a>0dU:>3t'7oPVY9-s_rC8(?tgh8@]0;Js.SIDKHKG3 + 8d_iY%_dXE8(*K&7SYkJhW-&g*l^#2t`kLd$\?qJ+l\#Z3_s-M']'IqZCcgQk*kgo@`G8[^ + m!K4X:;:Ue$#D625d&3b-Hp:9nnb2=Cb,[)k0ZEUbj>&HD)TB#>L73kc0LDB^]r5&VUk)4e + 85DtD0FWMB$S28cgBlAmCqJm[bPXng?fs=DA,/"f&T)FeF%5'[V"dlNm2IEkAD7:m@NMue> + V=WIa8Gr:B!m^FRMupU(/o]mp>Z=\u%m&o:#ULjR2VX*/C_f\6pAR\RZInL;<4Ps6o[^E$# + +"0*(K+!cUX3E)-[W?O(OO#]O\fn:(a`Y6o6`$1Q7KE7YM;h[a\p&9-eEE;pO?%h`kH'6-e + \nQuuMB,,E)(ib$CEH`=:L@;ofC2;\252NS1DR8`eiTs&PnKt`T(BSL8"nDm%1kRT%cJ5`J + -Ls(snn00759R]G+`8gu4RX]h[jSj>g[`rMnuN(:?S6B&-Z#8>29.Q@="nL#0lr+*DDs@7- + SG".i,bMBn96@'h`0s]-oMl(F&Ub/[lUgm47999F13uDB'OGe5]ZTVEpkdQDa*b7.Ir\_F5 + K@W(In%\s)\cJoB.q$pIB?J8opn'FY?F-%jX>'+a!0DFcTPi:IOj\7BuK+RQN=nK&f^F>>K + _>miGVIK_Fl,@^m4^AZ#!?q7!<1W^>iE2V(de`ejDtO%;ZgYVp&ED>^:eODhk$C(>9rp/F( + *WkD]0HEd(T6\-Ie5e9%p%OnV2d8 + "Xr"6K`VuKm@TijsP?Gr":$"EI$H+_SMVgi8AkSMtZV,Gb,k"T9j7YbPB#+89]2F[YaerVK + cuWp]maDmtkU0a*9?PGdiBQ+,/1QG[Iq*H*=D'@4_9lI![5lH^b$P"2ss^]R+"dGFI4\(s5 + EOI/4Y*/bc4jLSRABO=GINqZiO"s/PfHLl.P9TNB&.Vg\E^`d6$HHe6>ckAu!ZR.5YSp0@iHbXDUpTj]=S,I%kn[DglPkKc<7Kk]+guS7>CP^m*j#U9" + IMK%W?MC$"o`uAqbpbV!M)eQpgNc37GTZ&G2h*T'berC+r:3W%=,mhk'7(J^q12"`&*\NRm + +=8f,0AKTG4h!to_jH7GTIq'9_8Sj!WE(M5p1+p4=1"8L-_JokU[Je$\Uq+d)6&n/JWq-@Z + fle6734u`h>*MUlH0*Pt<,)`+#/s&XCE!Z:I*8;(RjLUXRlVVDgl+cfWUM"G2=qSkEM`g-! + fA25Eb*;(?DAQPlYjBG=#PWZ`^p;X7>O"BI<7WR58,3iqV?2S%;80KP2FV-g7Umhbh22Hs4 + me`o'g's;74_-JW-g(fA,P+gcQfDAS:)g7k./2fWXmgYhobU-2C'ln_b`TUq/I;AjW?E`1$ + qa^W8gRu8N2EFOFRaZuCl)JmJ`Q&e'bM);aI@^kp7SVQK=a+TJO%o> + 9apNcZ]V_(Me:fXsrE^ltq"1Zo:!&+hQh5B+Oo"hF%Wi7'^tA2Ls5Wl$b+4,mGuWB`#0nI[ + N06hH^);8aOha)J?_)R,<.N?'s^A2rqpBoB(".5'\sM8!n$#6RXN/B]J4mULf#bVO'r1TAf + dBX#.uP>OFrF1h.1:Qt.]&2fI&Rk$]WPHu@B'!`4ibO/9,pd`d_6P;Y'KLmQ9[$s&D8d8u[K@i-s2`oAa%?6lV(?Q8f8.Q>L#M.d2AgtK(!l" + C8G87!]Mo,Qfb]dn(AD=X3btf:u5\D[Z%.iF6rpACt&\QJ^78I!K#&!-UZA.S=Op.bS1":f + 2#\+!Kp)1'chbD=IX`WA"/JdR%j%-B?7nkmg#U7NRrrmg:1ENqrq(5h9dn32P3W2^/SG>;S + "42`;2C3a./iOjb98n+$BeDet6kbip+lkZ0?;D2q=qI=n=<@=td.-.bBX9;L<.+%<3ORk-W + haiDb%RXoQ2"i7B%ia\hNcoGePnn(8hCAhDQN^c'X#f$[i=:O,[Cpc-9$HK9RXfsEPK/FJo + ^c@iDV32">Vn==A)H0oJ;YNG&4Tr]\ec:Ofl6XIoC!W$8![Ka,UQNc(W5tWhK,WDS]qq%%- + 5A^#=^h$KY?]1:UnR_j@7e[^.EHbQjL+,:<>bkd9o72s[.`,8d#%@AFED)/cYK1&kWjPG@.=I;lJ&0o10&AFdZa%rP+R\8;SJ6jAI+)? + dtAScAt&AhOeF>9aGi/g\AT9QF0A-RV7G;bC@YNl`[o-Yi=O;Y$5iNbBGY@l.*Lb_NN%'[% + 5n"_C(YNK*oL0,Yun@H6^?;R,8qU@TS"m#4@(U-$8l6PCN?\E=sTZ#sKa5b`Bp6Yp#A?4/d7'IZC^-_Sc[9?8\fW*[%5D^]U7ifH:;pC0+ + ),bUAk?`o.GJ%,WY9tG:`*rdkG3KOoHKN!BQ"#%/P;ee`JZl>V*uHDDPHNPI@fZbZE%u5Hr + Vlt7k,kbA#t`59pVZI.W[A74`@DrAoZ6[K30S]NfWgD_Auhm5H8!QSpc@"P17=ijkGp5q,JhDS*Blr(`YI + DJbC$^?_bAh`>Oqhus1soEtOm]'FrKed%6C*oC0N)hDqE9Y`D9k/GJWK+i3;I:L47eMNik + E>adhuTLUNZ$j$-G7Xo&X\YO<-Sf^)3;//aROUELn/h\@ogd3rP?7?:&GQp(:\+PF6I2<0h + cE2s'64J$VUaPhG@&A6d_lP.j!&Qp$^DF!!uY(2h0]4$.+F%AC*dLe;tCb20umRkMJs^0)A + Yi6<:6S7YKr=)FmL%#Es6[Z%OKgJR0Wq3!H5gf2n7=R"EFS+@*LLcTTWBmF&`hY3"H%/TT<'g5?UW%88a#U)cTaGa.o0gP8ju+Z.8`X<#YCLJPLYNYB]b15.^\9 + tPH^N7Bs2.;Sg*X>d3giPW5)mrN#;bRI6\0>c(Wgpm,3`$9PjutMdQ)&)kP[3=F\VCX3kmlE45"OpcA1$KB/<$ + 5eCr0H18dNsUb0!"bb-OIH;*.0sk`#;Bir&8_]WXTia( + #7ptG&@W#YRgP7`$S\alcf5=._[8*<#B3*;OFmp;dgM8p$h2sZE*i`%T+)@.%^>%'d,>M^# + n4%V%.Lk?E=WQ+it,&W"H`9`YO)o6*ORE`7q%@['$#m9cnM:I`0,%1r&90nE%u + V,uAJ.gR!7=.::oOflAI),n;/p"G:X$)CK`%YJr:*DmOT?+-LD$kE%$><:cqtY-#ndgf(_K + g_OV\m4Tbc$-$5&+5&IT4*eJ#2^(pSc4n\#nRP8_gF&s6$*Oj+'7[10?s*DsKj&[)[a`l*`6eEsjBdMi/h4.s;VZ.FmWM)sI`d\#''+1(!`"YWUIVnI.>1FVfe; + ViHA%S[')J@2'eftr0f'#.AA'_(%l*=41G]4u9+m/>.5)=Q1[6Ylk'h;!,;56*11SokUYR] + s(GM%11ds0(1KuS'__RDqIL@#OP>8:gEA7\,dk^;M#TU:Z/@?.83)\Il/23I?CGZ]E3HI6: + abqr1ZS9QY/b=*Fo;o$O#;Qs`.`R9oa^Ak@4ZjBS\9$/+duQYUP,0rp2tO@4e$V?f`0=2u3 + )d:L'8\VGRkk`N3+r+FP<1B%k:fjI3qMe;<#IL?o/\HX6$)+E.b-`-d57kY4J\N$;fb9"bc + NBM1hr(3'BGO%\pa1b7!!uFBPBX51IWK9plSH+a`g6QVG&SC]BmnqX/OU(/D#WZ`mfUh9:W + g+(sPWOM.PW^brTL>G)Y]5/>8cV-oU9>V]EPk.Xl[nO0f9JjU@FOneQgJ5-#:R'q,Pj(uISTD,Fh(LP#uPim=LH7X("67Whc076>a9#023ChFqcWT==dA + qmFqWJn[oeps?Bp"JD[B^Wfib`->P3\XQ1\Ro.p1>+?^8T9p'YAR%p`2PnVkY"Q.KEp7:Yd + d@WkgZqFnO(m1PSY9RpFAThq/I*14g + tMcN)srHWA]r-B6PeGo:^(:01N + )"GLl%RPHAtJmrhc,GIJ5G')cg08TqS2G5#?iQT]SVfX@,fHZr+J2JID[AUB.pH$@"]\".n + JTg![sG*b"2f3N@_RsgWII(/!UPNR"2Z#FmrE#4'o[jQL2d675XI^5XCB.IaF?Yail29i=I + [uYtS8=;BJJ^9FIa[%@5Y5 + NqnNj38Kl<-%'tiLRA[5fnYh08!#_YOZ.E6!mGJ*(=q+WJ(]aFe'2pR6&V*^J(Do8c-mJ23 + J7KuS;[-5psD/2f/cMgRsCbq#W4TB/X]a1Ml1J'ed(X/6C@-k%dX,=6KV_a^m=k0-J]1MkLQ'k"AZoP;#iJcKS1YS1i]%=!.FYoQ]W]L$VqN\4O + pr*#EJ,8c@],6E.2lujMXnof6faFg+2)Sk9ZC6-"3jG?'rMIhe-=j*?t6i5ZKUT.Pi%CT@=+f:?*mZMPT?gE3A?q4SaAL" + ]V7Wroc_EN^72XD$Hp)m>ph6`9eJQPs;.\p^g;Trcs2SN?GL8HH0o0tgd/WOjrFH9nucO,r + #mKfd&CqZX1Tp,G.oZeA!Z46rj"mu!U4Yl"1#HkEN/!Mb#GYr%lUr!eKF-'0&HXI1NE\D+0 + UX1B6cN&tU`]19-X/&1sc_tpc+];IsLT>EX7^736XHl88,l*<@0`k0X74E8*b.DHbJ`dArD + >WKFO?+_.CX?-](r&(C"J\lf&^cPnsHVM3oIE=TgWn]&"*3mFE*Q'ZD[6)@0]S41LM8?ZL_ + q^`U(kJ2%caO:M\%$S*4,'5K`K2)459#E%K`bd@F(bs>-T30XCSSR*eZ#(la(B_NEHf"Ln[ + 3YG]3J^[gSN0L(X7k5kZ0-7IZ`kq%;?PGBQci/IZ + %eZLLJbfl<^[Y*hhiL8*aKdl(5@s[Rjt8U[4S]lFs64T$-HNQ"YWmC#6VlG(4-'ZW4`imbZ + FXIZX6h7upp0TiDrhoHS"mqphofl[Tha-^[ + PP5#Jo3WY@?[))_rV#-*pR_9Wp7G[kL\MsZnUDYU+(t@uF7[/=p"#?(?bPiV:\\;/q`_.[+ + 2@TbebkYO,SCb=nbX*mHR#dc)3DfbE`"%ORjC;rs+14NJ%so<8/rBW#DGI;OI0i:*>+)qiU + L$7=t(8I7UqR:oPQl6O@\G1=U^ln.$I87P.>\7@4dkik#5EYhIej<:8\c9o_*huThjlo)C6 + Ga8YXYt'ZsE6ThhXdWg+L):9@[#f?J? + XJ5Yip*80/t[I+f%KK)'cu6Wcf!Q)IU19,#Ku)`G%i#sPP3eH&$)/h5Di,3qmiq(^BM62/* + Q@b/RuBn_2o'3!(*iA,iQHkCT@4sDtGsX_Jo-#$UTr&2"sA!_jqK)0apn]68:#Q%)_Abe@m + Z=1'kfQkTkKu8?@(;+M>!1!@(1A'U^>hnoU3J8i!cO,=sZ?V(>6E9J4;WZ:);OJ.i?B1eeW + ?br&2dAD&lco5s,IbTHu_3D>S,0/(H=lQ\X>ZJ;]MbL?[f3(\3D'.?Ip.uQdBe6OFfdF.D4 + 7*N$/#lDi1I2bl'1u0HIajg6h1t:%rF&9C8R$?qSSPK0IF2Y,QX + .^Kgt*!ZB%rW"EHbY'S^Slk[QM(QLRlhg!EaNT<&foon4B<]QMrbGCm[<0f.:O7! + =[DM'S`k`#kPjSUD=s`:K$CaSPs"CM>kuD,(WR75BcA,n29q_a-cXQ&%`p5/P?tYSd.<#_Y + 2m/7!QaPQ:Bf'e>#,0eE*SZpcLgf6:Mb0cGB)872#UdXFPXE3U[qb\leYt(pIeq:rY_rScQ&h+Rq2FIpN%jnF5ch;K[Ik`\0_UoXa + i+djb:>RNik\Ur?"@c]P+t,U`]&b&drH_:8"ul<=!23oNK2HqM`orHdRe!U7WjQ+[G2S]l, + \iDPofpAS39o9LHAV,l$Fnafma<;tE=tEKaUl\V+FAr`0t%_8=K*9Ll/RKEH*,+uK,(.l>E + 4i#&3o@0-DCU4P`ZF33[ggU,j\]B=1ip@=n__Bsd,8FB/With/Lm.,/m3#@RupHdb\)g]k_mQO05>G]C*>C2,l)m#(2$Ki + d(1S%'Pt+iER?7%1FG8RUlfP5;6!J:W"h%\PQ#j:H%SV]%5XVQ)ML;1j$_oJ0;)7?o@+*r4 + /onWQIQn/:J!oBi/CX.m`nb\q;D#seOQC"%I_c7YoV:DCeB`_K?5C:,=nbl&V?IQcl0AWjN + NCU.R(@D.dBHm'lHsmIS8.I8jN@ge=RW[-f9.t-fMRBX + :be4sH:><01\QA6PG-^_TsHb;bu8h_$Ur)!<.$*3SX,rW'&4n:miOnX3nP=KTa"6K@LJEqngt+QS/Kg@2:,qhGB'NBl1fdM + p):"11SLg>.?CA^A+&;&>@drH]16*%f:?n@)JhVqRd5o;JiQ4lr**.[BfP_,^*=&_>NP1Q6 + K&KLr*B;1CEW3Ap:f%A-Yh"e[BfMOc-feE9 + kt3SVUl7tYW*)ohZ-ptgCJHUt;2T(U,A`YsI1nr?5SZ=Waag2gtA]$4 + 9_f(.t9:Rgn!+3J]DNfPW89BYApR.b;Dgj(b=FU9\d3js]snOKY;.b%k;SmtJX3PDqo]3u[ + FMpL4E-g#1R>4jsqh`V4QpC?"fSgS]E]s*;?NmT.tQ@\Knn%AEZkMAE"[DV84nJkA,L\m;r]e%&5E"mBX8]nu\j&:a_!DXu>OK9Om67le5KhqLr!^B + "!C"^84o>jUA+dL0s1p5'^f0Yd'AYXkr4msd^FTH&bSEL?(Vu%I4Zjb#HjdY&$pfg]_/&^1 + 1a9f$+2JpE4^9C$$ld'r"2a*[6B!!P_p:[i%m`$!4hN,Z'Ho]J*kWFa3pWXU.l8=aQgWY+POZf=HcO= + N.;`-b7hoKU9XoYj3l0e?,9F.]p=]cK9c`EEhH**5P7T"5gd_@,&9WU[s?:IWK+7G8VJld\ + H#(San$73Z1lZNrR5=2mji.3)Ee>\CR"BZ;#e.RQ@k/%EP+Q,O_Y7@U!jbZ)D0Bs_Vla!=b + U@@G0*,8BP[-#$+%M93a..->XB\2iHnGh656Ha4;i8MpB#f">7?gM9FF:Ss)8qG& + 8/u,1S:8F=>0$hR6k^.X*-T?7LbjF#70JX_>GReqj:Q)$&Zh6,aTDr^R#K]=&9.D9E1;jBQ + B"W,WOr("j)d'!Rb./H`ko<;hVb513O^P.\I'uX\\rT],9-Ci>Gl:9/\P$2?9*#.@auK + Jq3>]kt]1^q_b:Jq&4Mm5.^5=JRb4+akCq!)CZqQRRbbVU>9W=.R^.c2]bP]"Hq!q)u\kId + [9&.J2[&"AIdnG_JbiI3p7+9:8Yt\3L&HpY/i:]lu\]`49:%[#Z/BuB1_5ftgR4C!2M1S,H + Kr3;PcAY',o/N`A5a,'XcHP],oo6C3ktdd+:^mP)>nG%>$.#r(8:4tl9PVuq7o+O72AHqJo06IF-"#9#$/^H=i&gcm7:6Lg1\L[]rKeOXBNET>(fOQ.KJ1fX'3cQgC:@m*Nn,N? + e].q>@"^B't7CHKj,RrgSMO9c*^dK]\7I[0=a$r9t&fYWS@cs>D-]q./ + 7!5akY.Eg\o2tM99%V`*?TWgeGUUS]fca^g"4l>FiF^FRWK\aP>V"gcUGKD!g%)eQhLi>h, + r^HTKuBhVH`);@HB-]u+.#d9W=%:6!TV"it"]hHaFH`V&9H`Pl/SkdY3e',$:1A`_[c[)SB + s>tsEe`SK?ehqWY@hNcf%D:[SZgGBr/gu[MNSaFDhe6Orqhli0DXIV@2'n>>B3'>?k%YV!0[M6k[)H:mN?Dh<*S]UL7*8hu + 4GK'LQ:U.MIO`=md/6F?`.Z7H0%82FTJ;$?+hP_I79J/1GtTrX@g=al#UUURY=lV#d$m]46 + :O@pUi14j;r](?:%I7625pgiVJL/5Nfuj$ko`ajaT+1LkSLj&85'p(^CkY@7$4j<:e`c9pY + 5T&_E*iqQ=tWo_N:2&`W(7EK(H0k7:X>V9]Ui]lRs&*C$"0mVG`IFhsRP.L'Qk + +cbT[$rPZ@qHKH7RaWGSl?RPR,#,6g!-*f2I>S'39OTAk72UA^1-5j;J-bqk4*`XDJ/'C7; + ).jB@_]K(-e!>jiO&46a7dZr^bA!)+^VOQqaXG,k=a.1#!G;?"Ak&gTd@D/lMLmkQNilp5# + ,+GmMWBZc/I2a86KHAbklJ/$3X*JTXlk*V-t4FJ@d28d5"L-1ju0&4oM+(H7$`jOdbImh'`QP;X([ok + hd`b7HuJ3,NG6o2Ysu7NNBX'@Zg5'!at@j:7"FsD&[H@hWXAMf'S#Nfo*+L_/J[H^JoVUQc?>%G0+U-U?\Vo;.2 + A#REfMIhjLq9m:N[TDR=='d2f[eR`:*o9LD\fj6C_O(2fi!G+77Kg*#8"D,!XfDZjssZ09R + WUY_$c$T;I;,:*1d2qc&WqYCi`qQ2[o16 + ^JRcG0n'XOI[Y7Wq=%E5ReErNTj[4A1\)b%Dg$MAVOI!L^i"n1Ds1g@M3(i[ed"Ia[FTbj96E7< + ^_5%gh_0d-4g6oKNY$2apU$*qXG*_nhW&WPrnI/+ZgA&pGGg9f1<'Qg+dkoB-?m[6W\8*:F + D6d9`Gbng^#MAo0sImjCTj,8Ba6lh*JEF+6;mjiJFtk%Z/J0NU"%B4556"7k$0RR]Ma:Hn@ + SrH-p$FSB5/d:%+2/a>hsCC`XMf0FA+89(OoFIq0/U&=H3`cTLNn)h1Sk'ZI?+iVBbS, + )aZgQsa>^M0Dg1fuj`.`dHDdn>7sj + O@$$?B1q1"+m-^f1MlZV0jp@#hSc5D+;DV#qOB=DN_B6Z'(r1CZJkK%OBCXU5kFaS-(^J8-+>&^pQ + GZQcss$#l6!UtE&ID<'j\f^YRhY6IhHC*=]G@pORBDbhsHiKmg6&ffsW:>7fDP*tG5pCtK?,gL6aS4tA0H/. + P-5EJM_EU"7<%kFBoW=dihZ:Q%68EA-s9\,b9M:1M8C)&WU&fZSVU$WUd+3^^U[N"M:b9]]_J:tY7#,Rm(c=^V%#:X4?EG;E4d%W[]4[lmmQN38F! + qZ'2IOD$koG>3t&s[nZ9!BjVY@E9EQ32%s1;5`9kcG(Gh*d0`=O=`&A^>03gj%8Sh"hK$,W + ;Yp2PT7&&Eud%fhF92dW[pW8PMkrHRUd_u6tX]2>35L2/.$Tfq^#sC7g*9RT"%i^]t.^:5n + lS?q!HS)Etbi9kj%\.),:@YZ?&kT@XT010Cd?l^e1f?D6V=I;tPXjtbf0@ff[(BMhD+page + o7Z&Xk+91^ETQfQ&.0Hp*9j:=d1HJ8$W^&eAf*X'cU#eEkS^;;"h!IOP(9j=$ + =l">?;Q36E78c)`?CdN"$f:(M#$0:=<(!!o;JIZQA=Yk[;.MbgL(\V"?*b,D`,=b[fYg3$>ss%8].5=jo + 3%FJbH=jDc/?Wk*]:0bEeqnaqqK9E0B=`:+X + [l]U0=]]J`&X'!e)s67F5%cWWntopm + II;DfC#Of<+;LNhK)04mt\2p^!V?<]Dbt'36FFrUuB*C(,Su^C?.\=aeh[H1eb,]YQh/5L8 + lufAGc`s'Pmo61=dQ^ZZ(n?mGM:YUONVGQ.d'*"@D%/;Gkq*%O#?gKTJY8YIJWb;D^U3OQn"- + #b;JMCf#qm.O7GBU/W>DQ`JCu@i_27gd*aU:W&GG9CgN,VL(d!Hf + ,NaLFH!KA)b)g7*ocNZLlotA83$2YU6Kh^;6iC,GnhK2oRW,:P"3Rg,8$Xq+HfW+4@WHk,U + 9B/P;+gaaiOQ2V!Nc!dE3u\8Ll"Gm$`k'*`^4J9-Bq([=tnY2Tkh]%H1![QBK*P6?g4TP^i + a]KTrU3"2t'YRm3>ERJ=H#bcY;>\=59NcG+(10dY?.Jk+B + 6b'6]Bm6,+#oUf(=IF">W5Nh\?T^:5@5#,t4c/(SarA + N_tZs7d0dkU_JiO;HNHEeuZu]A:\,PF^I%l,hlB2KiF1d>tlZ8m@$i#][G>7:TNE-XD4]BRcS+]'lLG0FU + 7<)UOQJ?MPjIE-15k]s)i)A1MMiYSDW)V6Skn].C,,k.pm*MWjC7\WjrKV@I:u + .Yq51ZX8?d2/U`tf$UV$u.t;H=NP_]mt?=Qf\>)m_rmR\0m*)t" + chIY)[h-FZYq/oW=P@s,S(HMF,M6lW7I2[Ab[VZ_<'_u*kWR8HC/GYts't^l12)2+tK;UM# + HIE&l9enU]:FqZ'Y\BFjW`uLF<@BCc@[IF]kt)DN40Z[RT+?Rq + l@gmK8)EZ!#d4mpb^e4(bom])Y/T/S*Gnl=.RU@c+ + +:qHM9cPs2MkVPSpotrVq]9r83Y&g6t-K!g$,G8iO9t^+Qoi.,\amI>Tb]\R[h@j+DGCB[J + \[=84)E4OY'+:Z4EO+V@q2K)gq2UaV[II!<#B5Z&Y.TbFiLR_\fqcKi>fmlDMDKCBh)cH> + n-E7iKY?Z-uD:[6hU[PNqSrahU2@aa6gI-g8N8.So*:\[Bj'$BU/lu#)`YR750%bU56ndgQ + XXo-2A*<8k8qJFO;N:+k"Pk5LQdEeD2%PHBebks)C!UiY[O>c7JE(+K*klN@6W`H"8C?mH0 + RP:81CnOCZR[UIVlNL\am^?4OXs3;G$]`*J.Zih+*sN2'##=IN/O9,LfN$8snu^KRXb=X>I + e8\qo'hBIC2W7])"Yp-.q>79YCNZM!rEOFB2<3ucdqQ%Ra=k:8'd_.n0%0)`*mX!!5k2oYY + P:13;E=XdGrNVV%%EA%d + 5891W(9gF6-VWPTG9J\f"jqf.bEVem,7@At)R9k?Xa9ihm.b%soC7GVn1=i_G6Y=l?P)rCE + BtOZfbr1k+qbV4d17/BM]Bj"#jtCmnq@Bh]a:pL$`o`[cDp/IU+HP7]F + F;&deik;'q/;VqWFRg1MS(X:,BZPOSP)HY1i)"7>Y1#3I`8C!Dn%23LqD\"QqD([U^0J^6u + ;H5W=.48##*`FoCOj>4MHM5f(0+jO+ZP):SB-:&-&(0"!nW`?>k*,4\FFZIM.D_"f_n*tii`F*A*KRm + D(75n0qDEr.i5XJHT;,#X4@0M!D((_Mu:J].Cgo95V:4k!;_>2GY$Uo2OgIFJ@AcZV=El + 9D&#S[/@5;!DR.`i`,3o2"=/ek=Glk//4Oe[0"k.#1E/ODH.0[[1c1\G.Vl:dH8\O1`K(&2 + ,(B[HGU+hFQ$3L6VOlW9uL"@DCJSmNc=/]dh@m7"=Do<<3\YtBCE5r>W$;:.d&V;/F3a&81-fPFg-MZ7.O'L1od_/+"iFt6/- + T#+0"B%A%blpGD:CM>VP!k*3a$iN_`m8D/5a/g_!X:n`05/e;6B9`'hlp#.k*GcM!-!$dSf + "Ysb")M#CD(J+i(5B3^mq]"QD3[n1QH$qqbAS/e)><$'QM5=kokjDhCGpN3f''todq6"4=] + TL\pEa]9+)s%.DV!>W9!N?%,B:/*Z*s['er+=q2.(PYAN'^3%fD))^*g`iaSlcVm.7\l%fn$+AJr05RaGQ#Bs+33gQ8f_JQnO)Kl\!;3Q + <4!NpbdV);O#g-MHE`*$$CrH-&&=TL$6X5.O0\8-\f^CLDWU9$5&&\:Oq]sL_u,$\7D-iLl + jZ_OLUF&GbU^qVhlj=T_P"333@W'l\&tDLY,mc=?hETRG0=BU + LEs,&72Jb[EJ=M9Z\B8tOiNX>ZB2s#r7rIT9PO-h&VQeLKZ9ggVMAFj#0,WB9^eBSO2W`T? + m26hZW69D?X!_$<#;tT>L#0\u.$RKhHO] + 01G'22n`():\t5ff.5eS:taHYoN`57@^n=PrYB^c$>lu6_)VtP]![oa5*'7o]jPmlFE%Ln2 + HYYFdBT0,?^q8Eh)?>'q3hoTMmqA=eD1Oj.Q#nU65PO3K0k5mA!hK"]C\XH4uaXhj0]mUH0 + J#qdPkbWmGit)K6++4fLO1D'(q5Bl#I[_N[@7to)`>(9?*g"nZ.jQ1#q<@\/[m]T\= + 5X>HPa$#J[J^C[@9Cl3n(JuNJG-.I[b\kH^KWd2h*olPWQ4^HbZ[eX0S4g\Q\lm)"YDPVi< + d7MHb^a)&3Gr`';4:-u>!5P)W./@mro"7>trm/^\L*sda;M>gA];HPkkj*G6t' + KY8&fiBR6eZaeaDHFe>+jSj:Y8f!X4>"EOPF/qbS,=/Dgk2MPLVu(1aP:F'r+!ioYK=FYani9`q?P&G4/L_0R + 2dTRHF_7)9q6UEa0(3A3Es^TXim51V)aU]4>FgfKuZ=!4l#"jCrq!NDpGq@cMYZ):9@Cf/^ + M(tcJ1G,4JSI;h9arXd2a1K*(e>%!R]USSD;$%>pmO;h5.]X`B>*\`KeAQ_"hqc3+rIM,N5kC-q(?< + c<7FlaZ7jrPi2*TQ3eKB^+//`)?Ere9DsPN,t`l99.ASuLrqFlAnak14nBr_r'pkMk?Hk8q + +sSu_%g.s1d0k'hmGrlsBXdI'3/l(6ShhS\NJe)rnLmCr785+ga3rT0XP?%*m]?@hS%jm`8 + -m_6a2^#ee?Vsg5om6;QZ2RW%'iUEHeo3WU0?Tmi":Z:08msb'9^BNnP + 8WeF@eI#HoI9"jrl)0uZc$[pd=Y&%.i5rOBmlbMaSYMQNhp+*P_=Y?4r>28pO(IsUApgr&6 + tp6tU0\q=aq)>bq8)qk2u@YI=[/aa3^$4c:&J$.`1;naP?%Gp>s<.K`SC*uPi_j+4UM\d-VYX9^[OC\7);@qkYA`<3o*^ + p)MSs")FDqD]'OCmgiC:h658]DJ!IHRcec2HBpKEL">"a=If?DTblNfWXgH6iZ+h5I5pNh5tYE^s9E:k.Z2^9?EmJ?]D/b`?&bH'&L)*IkEC% + ^5kN]Z7`]1bIrN<=+AAl1l,WO;jc8ts'/l7ctkc/@_5kR + Po]G(?4$l]!Y_/Rk\rjU$"Wp`=$$S(tgXKqpJ.<)?9q'E)+E>1nS"8(b3D]?Fr78dXa&%@] + a<@#NR'WUI`0VecS7e5VLg8slZ!>eBajJ:(uNf,n-`j1PU--YeaSM[k*[*'o=ntTPP]+Z+Y + ,qH8@d61?@9`#])njJ$^cu9]aeP>@\k:k;G%08i?[#G/J8CSo%6W=a/1>Kc'gbA9IoRsVD: + fSel5Y]YM]hMLkj:M2c'(#,%\$<"f:tHE!9./2-h/>eWePrA;*9;-5#T0p7uoGq;#?F?CIeLbuWmFQBh=(BfsS3GOTo= + c:mQZtZC/[P'If"9dVHO]/^oXDOb_=p*2SOIg/^'*IFac7Y7*e'Ye]_iZ"jrq$hhM + Ne=#Ldp`;O$:VfV;JLTfULAT[mB,/-e_bnN3ohVd99b^1udkJ0!j!FG[69$ek*Zre18h`AA + un&=WZVufI+i\Nl]!N?`uEnd9c(4e/C%m,Mk$lJ8WCb6Y@2l:KB&)o*;$gh4\"OdV6"8,hm + gul9t%+u7<`I)Lds/gN4_d.ip9TXiM1[!d&,-4.:&<6=cV[F1_,Z6qeRDchLJHV>qpjmF&0 + h'\`n!iY>A+/tH6RX`,*(1?_X_m4?VC:AtCFtTBMCH;qp@mF>CO4D@;NfjEH81 + =!IT;6Ffl"2ES#Um]eoTFuM4u^NlN9"KmVi]>e1V]:0,30-M4q_R?b1S'b*gEpmP0R%;l"m + RK)eP7RmPM&&)($O9:Qogn-H(1<1#PI&H#j.-bilA)A@-iS')H7`WN=0KI(s1?D,a+BLG^% + 2RZUA4mE:l'q.4&BM1p)?Q,[SGah0'\'@pX2kH'H-6m[P,a^[\MG`.N+9qb$gL.5[_E_=eS + S.ZH[c8iVaNMI5?DBoZWCiJCJ[=u+2o8`Y`nDfgO`:=XgdAlTSC1 + >\G>`WB9iPm_cbAqEoqI7>R-ctUm]M,[!a;X*:U;.Ci9T/Q.rNI]C,=iB#H,33+i]_Gk + h`gh"H+VUdB%==U(PC7Ikap.h8(\eeahKdi4hb/RL"a^!9-NMpj5rlFBlB5.;)JXL+$Xh7U3Z + ^)@tMD2fC(U07bWX7j*TPTNA04[6/nrkd;,%qBE]Og-fFa4YeeAo.F:[!$?9g)Et)D-aESp + =@gLRqHX+]tLq"#34J8QZ6n[agq.Hl.qi(GAb+O]6B#$hHSTVmsXH72n&P>S*tiFXoYj]0' + 9eb)c.A'%tDp.ln9'In_^\@+]bT&EOkT%X[(i\N.m\,p;Z-]B6A6#.ASfP+Ng + 3UFRkG\a0ld8`nACtE_Ng;F!i'WHnQphrc?,)2I5I8bFS#q@E!J?N9IhPUMO8#SpA%`l+/7 + ?o0.fK[g,p_>Bch5mNKD-cRIrQpR:cX^"E.A9Br(;UNA\fg:C?akaf>`G0X1E\sI!lrP+KZ + DPO#>`cLI9CS5n>dC=QWC[Rb6\*@GMWXt2kf2em[CKC[)ToFAkF7g.2Il_"2.J<=G.Ykq)r + EehQ*4,@-i6LRUC8H>%S!8qu;Hk@,/g%AnSuUYfBcAC82nuF>Y+"Y8R;6#lI^=3igKIf3nn + f,Eq3Df(>;(l\Ffg1F[bARNYH@-WQ*[F?fBtr*0ro+a6DF/Hg-HZpo_r46Y?(8]IdbJX4[Q + EE'RS[f;r9gN`%7\B5.]]<)sX3`d(\i75O$O%LH3>VDf(INe9>57Af'/0_h1Ei/-VT + aKSP,.bZRn\33$_;j]&]I>G\'uCjU/9Ea"9FX<6*=A:rWa]I%RIIshX1r,X5r-KKMEaD#c, + .; + ??2abeK)uMt=lqo2W4"A_B`Bq>Xgdsn-@m4^<-6,(^"A$KgAOVgq`M1jO'PKs(Bgh<&7/T- + I@`6!>BZ5PVXNXPZ1iKG5F2M7&SNLr2Uan_V3PWL:_3B,ZHiH@L4iF^Q`,n5\4ERPhiXf5@ + 4[^Zc_ob/0()%)K,u[pE$nT*Wm(EH>W2)19$f`Xd?pb'Q5R\p?8^\pO2T*H^`Tu5Alse!D< + 6,Dm7t^$GPYf*lFi4D_7KcBu;DUK&H_bFScm6IIKa)k8&48 + Qt(Pfa\<6Y&qU!hII0ZGio,-o=iB,cA]4AkLio`d4+"r*;l>QUk)T7W[cc7']FT"MjPNb62 + P&'Wieu[ju977b#%>jLd$sIS#K&6W?TLoVY?p\]=oLXn5YUAAfsFYfp>f_+]E"Mq10&jV$S?#Uq@H[\WINWXJJ>H-W + 2cs8kVa?p*2;k:NZ[I<3A^-OADkFcb0V1>\BC2R1XG,cA_592!RlDrm2pM:c/,I6AZl8\KS + nDaU45/=TZS%+OMI)WEB>N>oB\2`_aT$:F(6^eHaBZ'$nG$cNP-u%3,]P6HZ$Q*CUK+A+.[ + =*l5FTdYmZ_$,+b]/&dI_d'Chi>lRXLjANB=9N9>2bm6rng!(.4:.4Nm17D+r=jd0lcW'q@ + eIU+KJP(Kc:>IGK%4=Uc+sGJVc.XqO,Vi)mPS#EN(J'r.f[:Hc(E*"i<9U%*WZI4l;&(nO/ + ZDnsZne4h$GA.n_"o.H+g]Lnnu.Nma'?k)m9.`R69N-)e]d8P=fPKh>!7[u;<4.)eR9"GX: + qEO;_k[B,l%`$6CKH2jHFWrs`!P[Z;dga&n_1kuJ&_mO.:/'a"D8 + Y,1GZHDDYW2mZI.HXLtm-ih!N6hATZ]b)H)h9L`O_gh8B]oB&-2-g3( + A>c+@3tTNn&N>t(a+J^)Q!A + ]rcR*b7NAR\R]rk6Z]CCi&6WF$k8=B(g&i5%LZUHE@Bo=VVrX"QebmC1ieG8nN<[I7GQKGA + #0p_<*k8LE/Nj!/PoK'B'sJ8g4*d9"]JANM2#q^mV: + D&=D5AgB[d:M/W"/[HJ(3+fg^i`??bQeHYFgf"ZDf`eo;PhQU)NEksg,9SpG(9HYQi0QYb73D'$MK?H__B`9e&sm@NM.Y3@pke8>YpD8+j^`pE.(bj7O]m,l + E-/$!Relu&unD.C$C(@PM`\ZhDdO@OcMMV5B'trs*!LiNL]9kdobc?rh[L + E[FT5,/0S4F39'[CNFE^4I:KV`E=7lf$:$o&G2c5Em;Uk_Kog`2.5kaFUcjfGDFf9ob=(6< + cG4iqLFgk`NLKWA==8!)nE"4O5F^_'= + :M9A[GkMA_=uE7&+*7/mI.pu^pMtu\GBJ)TCj24IF_=j$2hH8jJG7Z1C&q$'#CZAKM"jc#f + ^F!?%t&SnFEj.0p\/b'LNWCDC%nf3pV2da?XJ$?P%fu5Gh7WDB5@9$MhkGnq%&s;&!)"6PP + Cblq;HGkSrWW=DtoZ]GK,R7\"3@KT6[XD:U#-$Mu/!mqBobILU;:*]6dnFH&m` + *5@&S2S,/1tqV1*.=(FFF\_@:dW4ftWJ>cVN"r@ + F$!TIXR"ZQerIsBmt8s976@1BBj7[Y#,D)IP,UKkHU#uj_%BZ(K]G#RSZkX_?1iL + PCUk^K_hkc^&'!!3'!JO&-i80e*K$A:]ROEcEg(CZ/>@Zb?B(*%jX6)2ik9NiAWLVfgKW5N + :H$\q101AK?c6S+8B,S54%[OW_jc=PB@S6eMG41o]iF^`t^+rW(`DbnZb7m/58]4bLc'Hblg8_5*Sd34_* + +!g%,0%IO6sF>j0oA2DQC)4"9Ro##dYk!n`X]@NmkF--52@jtFB9L&ETE4\`i+hIXK"$ + [G8SB(MNK)H;7idd\?_?_.SA-pNjHFaKLmdemQs7HbR<`((!*XRbe1Ft,&E[lWK``*c7N"0 + *6RZePoqg1gNaZ3MlYSe^_6;H3D`XZS>IWS'TG8rb9[<-:@nrf,Yq9*d3q_RPeSg!dHrGK9 + FZ+Yp=&[2VOG'&eO`-YnsnZ=82!q,-d&f5:6popZmo<[ + APr=;FOY82tY7+(.pOSMLf'(%f7\2DE+VB-MA5RoIrSAMVq;Fr^p=B1X_e5-emhhb;K-4>S^(e+[WAQ_E)#7Wr'^ZG/IO-8`NNeA"!oVgSYJMtPJIaGH0R,_0MrQ1]5*]j + 0-S,4>Gn&i(;0U8,eC([j@,"I6R"6%2BS]&HS,1+\i&>Li4JaV'tCel;uL2iDaR:kmlQQ+\ + nkP5EOW'3M[>Tj>VrM*73%M;j_&tlqm#28%cPQEb`93D:V'ta+'lThK>=Jo6aJt`[cF\1$EJg"s:K-N(/ + _/neg6Rme#B9Ml^cd+-RL[>uf]'mb9,"H[Ecsn1Ff.@%/mfEbVB43(%l^hq?.s:JoFmf(eU + '@t/"7g%W/A@&DaYGCQgI"?>#mp/V"^1+r[A.`C]=>g*P$7XbTR[trb*$eg*V&LPHHcCB7.*n_(Y?6Mr"&.tjg$$bBFOi8N_]2 + @m)(OlU]fiac>HYS"Z:#fciN$2$LG)#,pCP_,G$IVB%E5;dVQCPp9s?g[\U7RsOlgAH;,c! + El]#lc)JbVk.eSXRO-g8c=Eg4fo?*3"$/*?qNYGu@qP/a1i5U+DRfl2B$qEXL;>Rdb\P67b + 3!cNKhS=C*];j>k=N%c#NHGHm`8bUA.*h:-=\dD@T\-OQ.`oAtV.Oh[JT,Y))[sl7k; + 3!bCQ4S?jBHbpQ-uk%rk2dfLsjGaBp,/%^TNV:a)(HO-KiU-+Pb2++;U.qUknL%,?"`&20n + ,0\u;;+=8U6Q!">Z\Xl&rVOLrb:Ur\\Y8P.ELhCn)rWS,E%km='%r6\VaK44Y.33+g,@c"o + WXrDWa[-NI1rHqBVk0dAj(7@/YF+1*e/V>ZoI?Oq(Y7tf0gg5.ML*@B_(93IKq + 5DVDc(75s/A=]W/rc1:PhLKC4i0nEtT!^oVj=gK^P\"mXro51I!Cs]WO'm9[Xcg?Y4^UI'5 + .\?a^V33M!7'4QF)'YN=8r+6sVo^aZBWQlOZLj:5TW6)P.$]3@Daj5 + #V`OH^j^;X7Lne0&:3EWY[\:*d!n)F07qE[hSFWPD>ZsCi/5tb!p(`nD`b&QA90K?F2.Xt# + JTE<"'Y5"4J>#Q1H>T`H]+qE;n_)!-N,bV9:]?:jXmYmSp"GWc"\R6BtSXf]%cL#, + 8fLaUXGNnF^Fg68!0(*.\ePU4E'=r:/lb^ikEbIbh>IWm=Psh[Xda1I;;44rVM/O@FFc4`P=oVS*?j4OS^WQMUnZM6*97_SeC$Q[ + e#cQKogZ&6%-$%fb\rqh#$oV9%3smA%qW&S4gd>qPif(LnZd4eGWI`#AkY@I1Vn:[)7Rb$q.iHrbRkCbieCt^2*aT6'N-84`f@gmR)NCMop83bJb=^!sXJ#$]onV.GX[M>Gc( + 1buf2[*C#i^9]M"3tk_,t:'`3'!BhL(X1Rs0HoV4YA:cG60p?:/UIMkKgNJ):Ln>B.m5`O> + Ijg`/C;n3"6jWEo\[]N4Q=L+/Xth^HU6Mj;kNQXm.X*C_g8kOW"=[E3nWtW + eHb#.bBfEgfk5skZ-^o$m57/+"?9^ + ,H"B+D]#j)f[:Aji5_lgVR-G,ZF3c1=cX"8'F(6rEd715?R;1hS'^`??cmY^&4F1?R.J%>^ + j4fdXpCb[oA6+eUL,>34ZAi&*eVjcDchDc#Hmd=UXo;m?OsiR^%DDn=E(L40CBe`V!)RY=n:_/[PmK-s#k1Opn3I@7R0lc]$*\a`cpmlT(e@:>5D>!bm6Ha9" + HZCn`IgYMON9Kp`j>&I[&@Y^OQ82*9a\,"%hNdiE:j_qpCGXJ&.nXK;#_)H!t^S*&CD.&Yn + mua)%f^b&eQ2u;&p:3,8.7/'%&KK&N:?m3tkIS'9PKn;*u%[5nq^:'_+g2&Q]]E>88l"'p2 + o>d:3rSB,8m+(D1F!0P:d3(CUl7n>eOtE8:rlf*sG!6&dT-bq>?&FV^(<#8%7KE&@aF3sY; + L'bR>O&>9?UN>lj*)mQ.VOG=fQ_]&$6)_o#3&\S]p[0X%\)H#$'&@Df6h$S/\&2DK1;<[oI + m0Aci*O4]61'&H"_ZgYe*Kfq9;>22qq]O7&*>(pd:i@@.=Wm3P+-8,p;BZD<.in0u)U]]IE + &SrER3HZC*tRNVdLdc\"!"St-*dn&dQ&M7,p@:`,d:,lE'G[)<@796,;OBe;I:S%boZDU'C + p>q&p#5E?PfHc([W^jD[=h>M",=H(upABCFHO:RZT1(eP0=#'#uOp*p?';Pn*0JDXd%gk#F + !Tj3F+*bFG=;M(NR\mj1Z[c@"GB*_hZ#02g6c7EFdI$s/):mqhuFkj'ng^>"R"0TP5HP0iE + V+OKMuhJP`Qo.7#B'e_/Imm[%)m"4D6)_p]JmOfe>bbBq-2)K1f\FVuEo/P#O,_/fr0M3JO + a7@.>AA7Y41UCK27T-=*'Xs+"f&m6sEt[V6CGf%"]$(sDDS8%D5<+joa7C(C;];WulSa]C1 + XbF>;\7??Z@telRa.qiY2JG`D!^b(maJp4;j0;Fd-C4SdS);VC8c@Bj#HJZj&7ftWoh,+b< + L'Dj--H-'/MZXao=Zi!s"0H;6*l%''2q4GbWu?dL+F7oXo@.9ilA4B0'q6jN$ + G9d82r%PGr$5`L%NF%Jt<.5t2A3)!O3PN+sr,$/YcbOh+QldY/TGrG;O9(&$'mZ-I'm5&Du + ^GDK;F;jES@npn\1obms;Ya*F3pTbI26Q0"'<<^`HoA%Q9l-doX9@PtU4'-PfMmu01uV8Jd + nmEgd8Pli2).LA5ipI]5]iJLZ_:0[7l\[p6LrGuPH`i&=Z_ht9hgSfd(*!&LJ2i);/<2XC7 + /#&\hj!59!fr#V8TK3:!LSi"2\1u12-+$nGp58D + :"B\-8-G?,Hb6PPe`'):HDHL>:`8@$c:p!l`9B3Hq00>IT;j&ngopF:sg(i\"7Oc6V`2b+W + ")3uL;NCudgk=A62P)U0ZoFersY`6r`RhW*"9WF\j9j]_,U,?FWmDD[U:t1NKg'<4I!L\?1Ym8_.eDomiWVSNSj>:A*"$'hmVIaPf%81DQNp[Zaq(8AR2e;(V.8l + [(gSg<[(_Rh_hWp,>OnF[VLMCWN2c#[M&mAF)tePtH)`%Kg:LR::%uB9oqa/!do8cTG75A! + 8K_WeF.^M,G(1Rh_&rY.%)h2fNm'2lM4=23+#gq.!!iA6,B\QB+jBk>TLsD73L,%R"Ohs$: + h(`j[=;(5$JTa^8)n<7X=Y(@>op[;,G+8kfb7pFOo3^N1n!F=n"f;i=r4JTUR4`"ps9p&_L + b"\"$C51c?Nd)08W/R^O^7[>!&(*=A\_^a4aP#R!B&V3JPpMK3WDCPjk2X+>Q"I>BW;"o`N + X>b?G^M%e3H$4C,[1uq)q/KJSIeT+PecUDG;f-04GUFSP'.YpVG+?$$hNutm(KXU\bic%bS + 4l(eGRJOo%t^##a]Da)[p`3;+Z":h_Nr/ZpMj+(?\!:X8M&\Me2_60)1HeYA'ETTFdHEka( + j)L1"K,npZlg:%q_0`W?fAn2`kVg#)jAu5hHlmY5*]FFbJ>DF]4?Q[,3]""cBc4:_f[YFjk + f^*H[MDAN4+@(cus8fmXa"I.h8q=(?ZF4]p?$:KY-o(>s#[jaD=#_H'rtfMt.;j``[iMt_J + P[Y]5EG@5TXH?[J>(Ti&8'h?Wu7l%JA196Sd]jd/AfJn:1L96\T1GI#[B/hYYQMb(NqirL/ + PfA?;XL4>bb[S#aPm0(s3F\3d)jct"N=(9U1aSJ8<*XMD:"ai\\UTr9OZg70a*EPQ=_qWHH + K1gmRANGNmVeJLi*(E*R5q@i\ZqO@E)\15=ZN9cFb?27>[JA!?$X_\<@Co$Z^_58S_7;<3K + @[+A"0I6S)t$JXM(2#pRK5A>NO7uL,GRu=dh@aTZ)"l'[`>:b3<'#K),E*jXm-,kj>r3Sd` + (%RJiiU!Mc(9UY/gT3^Z-bqiP%IU=kR7RKki66(Z?X?+JFY).B?[*+8UNVE)jr\`[.M3MuY + "Fuk2NRH'tT$sboHRp'Hs)C8&HEMGTc7bc*M[El1h[:.g:^"Y-Hqah9bK>)t$NuQcXQd0d + -K/3<]]pT:MRtC/L=1T=TTf)SZ"3$UC-c)9:_&D^X'mIIj!ObI/]PZKB)n+kqA=P`l^,s/e + f)rW'rj4V]]u"ikMaMg')cK^K1.ngQfKutCC@V]&86)JTgjh08JCN`U2oR=S9fpGXOiauhW + G"'4AhD/A.RY2KPUqC-c@S#JLf/t;QDjZ1S?'k,T:qd@\=B0B4H[fJY3gVOc$["C`T166N8 + HascRKHYSiQKJLFr[65I*'R%igP8Z`#SVW,WX15\^,RHc@#`@]\1[AF3P"mc!8:o*2C + qF%Fa,*bl&:'SI*_-"FpAAceSuY*3mrj;pua5ar2If>uB!e6d'kpe6OHR>n>-sFig1_d+oe + oKN$1p)9]]mB,VUpSR'p>*CDtWUE)5ErEn2^ggltFesuoo>u/k]?eF26fj/[QI@Ja"\&r!g + gDtdq*8f>\Ok;ghWnk5@IGN6JWaC0Yh7^MDrU&Gk^"j_#be2]erPd7`n^j=+h#6B?FBGP_" + S`S>!&@CT_WYlD.i]T^#>uN"nr!ACM``5PaGjMCn*MB?)rhu2+u2M6Sl7(%.0@4\-o.8:nn + [>nB*&!)&RJ6\P*$E@:AV81&Unlbr`SEiJ*6fNiSIi:Z])%$hHT2qB(86hidoP1%KgP*riA2hjNdP[HE%E+9'acT+C`>U\d9GpqOlBI_G[:_t$].nt + -*W^YSEe\b7,%$QnEm^S1XV^&ET`s*oPA:e2QI$OMI%Tl;DJ)BfHD_r=NqA.gO2LIC,V32D + !`'p(nY&ia]b0cQ:sACASAY$i$'aQ(_ECnbo,SB@^,WLV[n4+trDF3+jUDb6VM..h7+5*\+ + +`b:N\]eZEMX2:oZ.^a$-,d5jsonna#4'])?V"Iq$U1%r,g1hE#[6E[[Af7DL.)[l"H\Z"u + O7WVX7>6e2@sEh/._1GW@PX>+Fu'@>!+g)ZN8?o`CsV;6fDNWE8#F^Hoe8O0^'fGAm.B$!G + 106T_IYVENV:sKU##-\=ktFFD850$34XH-',R(no_Eo2n;pHQtCUB*StP1]rQcbm?F5u!">s1E/@OT< + 6o42hRkXtt7T_D'`0$9mtG*t6)+g_g>ZYB2W*^6*5*pVeg+-O[ere6`q\X_^Vr`9oFL)np: + P)]^re/7T42EX[3ra3hhp,Y!mu\L#C:>bDre5X^=)ALmRGTWLu?5#<$*O4&d2J>7^%cs + ,>3*2me=,+A>M?2;nU3?9[i'P*6iQCY:r5(Pas)BoG$+Jb]EFJ3`/eO,kB5[)lV+NcQtWu; + RGO%6SoF.o1cu^A,a:h'l<"406N)q=i/BG6!,^=*#R2&YL>@:1=3@bgXo)'G/W"5o=J5>/q + cA";U%R?A4&2]B5CU>/[U)[:n(Tj[p!#oV9s,82d.;D>7h6%FZF<0e;dlP`S# + [r(N]t&?.ZLE='bP`]78Vfed[=6NE+'ShR2bnJ"g%O%sHtLjrE\p26D4W@2I3&MW@k,0p(6 + dNSAehLkZk-jr$>8K#dZZ`7qc12E-TXR>,Erj-Yi1M*GhYLhYV!$H$ + Q$MWg(-ashH2ae-BfY$=Rd2quW:0)!?GiAq>`m.qd"V/"^b08j>/G2]B:)lE57mal(.# + [WrGa1Z)t*l47Z\+[MRja38fQZ*na)6<7qf+5F_]6?!An_2!B^2ePfCUIXLDDeY&r&2+2kh + KMIcus\0+e,[(Ntp".I:#pdA36B&b'%$>0A:92G>$5+]4V;oGT;HTfD(n$NR7(,:1<8T?>m + %1p:cQbVg)Lm>I==!g'OdM1aT`]Go4ne9)AkVm1*e=a<7rI)cAAPAQ)Z)fYuW'9&Xi19p*cu-SE9.k:#h'b4jB + mnO#tIM]%*IQ"VG"3,pW*Ve)3i@'HkK=IaGB-Sj17[?12]-B#cB+]'CV/_l8$I1:B4qdWEC + su9ZYkg*7f]7Ocl;4auO^M,kSW9ENWD:_q-RgUh#`h,uR6IN>tu@[SASeKDe\fpAPNp9,iidESs*:BcFEC&js9AX;gr5t + 'SR&FKN+QWc>LuHq(n:>V3Ha-BsH@:UEkH3J2.1]_^BPFe0167B+cFd\a'jdeAG#O<@XrWk + 8TNB5GW8[BLJenQ405T1/To4a>sg$esp$7OsZkkPXM0XqUStpP)IcPmZEW+5*p?U8CQ:0:Z + fVgQ1UBC`<59e-LD#%b#5988lZqaI!nZT_C2cpNBo!u;Q7&e6rlpd6I^++VN7I[`l]#UhP, + -MoHnQ',rD3o>A13]1Tj6l1ri/RK;V'S5(9>E%Y]K5Q=]j9PC[He7p/8%ob:d>&I>k/ + V2Si2d6#%p82QuC892PJnA^i$,Z8>lg<[r/K.kS(t.7Vh=X%PWm?#d-X_TuAQU7#f9S==@Z + doHj=E8B<0W-4WHeuM;M/hLG1G+i^()jb=Q7GG@1,'?rNd44FX8$uEags2B?iGO@dN`3OS> + ?]'WkcGDZp.jf,g7'e!23O\6-N[H(;0Hk5\u>A?%b@[k@[2=BZuguVdi(l5DJ`(WlB;*DaH + &`#,qu0q"shZtB8[TqrN+P`h:Ht&<%NajW0]qI@]O!oD?X4-fW,q<97LU@ee(*U1;dPe*AM + RC9;ac'p/,MLCU/Y<[g,5`?V$M>nkM6X(P9.eCk\*o-$>jtdk;g@_)l<^iOZF<*a^I1G2eTR8X+C>h9U,``'YcG9geDrK2!JTun7r!FX^%T5q=sM&BqlA"4iVEg9bK + WM_L_H_%%@9ZtQS@\@,^k@a6Pc<>N8b[C9%'"!t*\lsj>j=L_;Fd:G$)NRm/W=Q/85&/,OK + 4!P`pSrAM`4Hm+&*;W2Jo=u%Z8g04Ao16X.#g[D3IbW)>cXB8rf,/@mr0bX$)d?+Y0T29F6 + +toXZ"a[e?pZJY(\N`9B7obE;Net%"37Q(2ldSV'FuEMo)`J.uG8%eEP`H`3i'm`I$'Um!U + 7bGKoj=G-K*TmH9o22SnIC1O!eDe&_=&9]K>5P]H\W[nT=rd!J\RCom;YGXe"SgoHWU/.p1 + 9h`TWi"#9A<1XPQ&7F(iRCKR0>deTcqcoR^Bm_1isHD]c:g0\K\X]a-&#@,uo6V:fOXf],e + 2Q:oL@;h.!(OB(TfNjP[EdlcU\ef>?e(3JrNn(:Z#)_g(s/bu1=5`a!L"O*]Mtim5i%TA7c + X%9Fq&\5943qj8GlQ!)^;mb]mcF'>/$eJ9c^T=5K_(`6e9&uEe%KC7p"GV@i,9p'3kg.;GL + *Mc+"P(9AK[bX@bY=d:PUA]o\c5MKC<,taF9#i1mi7bZCAAik;3:"Dsp\NNrAKs%X%)Xc`) + 8sX.M2W`:goLU2PN'VLCGUg3nn+G/%VXrCc`>b(VjmQPPe5Tc:VWS):aR!4t$>,-0=k@m.R + m!'gAU]aM?\bQkn_JO#Dn]USK-Zh)!(oY;ts5Wc!Yo@c4+$`_?V5q=i1"%56[$:.Ul5ng@d + EkJdMMDYK\3^^'a"9q$$s$<_/[OYC[)R2U2CF\r)_B]:@S/]+Mi0'R<^JgahF=4_s&Af+>5 + U7hp1Qsug)FB)R6Bfe`U8L?e-GSm;6ED$.^qN@OMh&6nE3fpS\Vtd0M=aH!W2to99FJq=`2#sme47H!;8ihE#p`>9&>; + Mq:;j53`Gh7R:p3:Z<^f\a7;/:3<*7,M\HueP`H5S-S6JFX@#Lg]7Nl< + ^"DGe?Z:4\$$\Vj)UgZ_tBZ7niN=``lr+e`kE5hH\7FYpjp1i13#DT@-F + `11\b'O/NJGfRa#7\"]n]Q-MYC;rqea;e1"ppruVJOdq;`h[oO34m2KF[j<(`e8k5,`'H&H + Gn$`8*kfJE3[HBI#=GS8JGdY1jR(4Db"&X8CWdC/5sYaQcWKm7Wb'?,auhkKup-Va^D9mr* + r9fDof#F#rGjXjIF?aJK][-3P0d?&:u)^kI>Qc5*8L$U[9ujlT]WY3,@_;'IPk>Wg1Mt8lW + .?1pkBkZqFZ394YNTFL]M1\]]Z;99d$2`4O4B]1_4tbNupcoYAZR_9;bnbS7rg,f@i*`6;c + 19Q\7tI)aB`aip!lb`'`hUs)N>bfo.mbk0.S"O>7#ccm/0Ye7g[`1k9TR7Q+,MPPtsZq\Ya + Qq^i6bp9#S]X^TBfZg5,8fWf7o\@OSPYI[U:&NkkguHI4TZEAV8Ap;qD"k0Dlo4H=3!f+J\ro[s9"q+#ZE1?(U8U]57R;o_;C[F8l4'm + W(8,1<6nBLgj=i0lmmL+P3eR2q9>a"6NNe'fd`Vtc>X6.'4LN)Z_TY,&g]c,OBN!T=^s\d] + oFo+\^Ja\C6eiYK9JXEDT2UCO;a[NOKf,YFjuaA-6%q>h/`hd^*Q7eQ>`0W'Pbt<(&Xpoea/>>?'?=VYE9NT&_\g/!@9jh&E,o>jR + =-\.ul`D,,rB4.N.`U8]+1Vg+)REm?uXU5 + hORM=Q*3sAS4%t'L5BU<0@D>]rP4=bh!Lde)dGc[9:ASV*[n;_s&II;jGopFI:=V=N[So.V + lR@XP:Fmf$OV),V'q,1L&$IgU0p`_5^MK^c`r(g+sULD(`aqG?djb>[`n"_q6aSW7.OR+;J + WhKkjp&Vk1lQ>LfP*!6SQ)"?T%d4Pe8sm?:e??!11Me9t:8/MtBDOMB%c>N>N?HhprNH<&u + W5"uqZ?&1[\WBY4%[GC"*1our7*`s_5b4UMA;i**>M--Uu/aJP/64Hrn[Ts:S>:%!g6f)*+ + OkcL$h6fm\mFkQBPZr8b6=o\tM_Q/f_d@8J>OmeW&O[Ii7QiW(e@j0IQ.4IB6JQER&.RX8* + Wt;c"[5B.YqA'iKTjY4XeP + 0qn[B2 + Sa7@J4ZMip+.Q?f#Qa*G.Rt7Ijp56e#_!?X%&$fresVR:^>gi;MEiL3hm??n4*;=f!KLXq2 + rRGZimKB20b?/`G^/"l*]G%q\"2L*^=.?T[*__/:"P2L+4VH03)7f1q-7VO6IOIct1d[2s2 + Bp+b]AF_D5pA6P#9Boj2Y)\"DofMnnXY"Xki:KT5DC5%C+c%e#h]&a]*Z%Z"*=q-Y?Eas\Q + .P@P.5$6Egg+:nrlQXf^.5U9f#O3?'/2jse%K0R:D/11s=#:.e)P7K8Gj.tl07(F)2Rhklb + N.g%S)N4&St^#e1Z.#YCjs21T#,!39453BCR2_IiclK[$#J1M@K)@)_%gcb&*l8Z&sgCIrk + gB)ce8lDh.F+_,Q$e06Ef>>m9@;pJPG8X+"Q3fm*: + /mG$MP;>fjJg@#OFCVc[oA>Y5>RVDi>Q>Pb!p@W:74mhcL,KbLND1jg+/.j-!ZZ?g_ZpnCh + @o=LkjT0.j!NW.bSK,cA*V'>L$aM+JeRZp#pO@WnX9(?WQQ9=M4J8t+\*RrW + ?n#5,B7`#nf!0(q?S29nT!ecnm<*&:FC00a;_T/+\p[1[hbRh"7P($ng>iYM?k1J,7mp,nr + `fhmi1fk(imYGSC\LKZ20r!&G(r1VnY'/T0%(s*$:e9+M$_XmlBql+&n?.oHFN]hd?$M@.oEKG+TS\ + :Bk8D92W8DdKHeLUPQ][IkZT?1];jo",h.3&b@gJo4/n-M\,Tm/QQ&^'5B.DF'W"*I?P&Q5 + ,uCEVh"1Za!dP_pX5,!dt?oMoQY60CP(XBN3$pJ1@I4aG^#(O-\-HmQh]`q&/P;ni^/lbOl + 9B)oRDqYO')upId@6>F2sY(LQ;.*Q=>+mGPXFH[TD6]7GWLfZhl1F!Wd8Te9&GgG7tZ)h@XAWM'VAn1/j4Ol.D_G2A_Q@7!BmHh[=IF-47r("n,AFRuOjF#J9 + r:$u=KaZ3kc:b8H9pFT6r.Rnar_Y&eI12\EYLq2De9rFj;+uXj]SHGk!drn[IHT,-&)5J2g + ;^&BMX:Fn8&kL?i^h,M8W7dh71&q[%=MmMa`Q/5s6G-A#LQW(r\*5-+77EVk>7N*rV+fk(\ + 7Q2"\M;<:J]ckJ)1($p4#4@s%hk*hr]>g`R+Y^a9[;\hr"bS&dJSn6/bXRA0r6#LVi#sW0B + U^'o0e.!@)*(:.PRea4&sorb&YXBMU3)`=Y!FJRUX + (:lBWj__G+/p;U/6M591@-omG/Vb'ZaAB,5WjY,2KWesjGrsk%.@8$90%mkc)gb0p6sYOgQM_[cQF%PU`N^D+Tte+FJ9%nob)43rjdi5Db + 1?Osm`1^<#,Z*YSm][0ShrBtDU/DNba>@R6EO6i8ZaYAIH+hUA\>mn^c%"tV&YACHm7hXV! + *^I&Im53$b][m?NP@Vuk9bm=B3n$>M'YgAS!0Q_E2A\Q>N=-=E]\'?)ua>^&o/8R3+6eT+T2'gm + .KQ[S78=LU/EGZu!?`Gf)u]le^/F`m_5?C3nkI,7r4YC^2,NWXrB\8D2!@X*%'Mdj38Xbp; + ,N]BmF3#2s]j0]@iOBm+e_3AG2%Uk=U))]a$jEGcaLXl.M2jNMbp%ss03Se29BU93[UK6'F + I?Ec]AnRWG\RnjAC&2-2UguG[[@kon*^d-qRc^HBm$cbr@aQW>?LWIOG2b;qCKeNtTd4%`; + _V05K*Kb^CDA@hcm\%oW_R9llp3_*>Ta3?l7REd,p+aj\/NF6 + nBNeF[$"7Xt'd(Lbqh-sop-oc;@jLo6g48_J=Dk<%I?CKFT\FhS*0JTor-PMGrIO)a>,So9 + 8CHC]8VkV+&B#)i?7?YAp&^<_Z-ak^TsYl$\_alWD,8%8\0grr/R3`e*V56U/8t:BIW+a'WQ4p@U&D:7nJCG9XOeNAja" + [:0&/n'#'X+oDsfQk&!gK%!^l5>CWqe`>+RHHO=#_OA8A+-3jrX-WGDVe!30XH/C_mm-HrT + Ph%f3n5j,Q9L+f5E(S,<394:tT4]?i:C1)@Tc8QUF+#]:)"U'<[-p2#&]2q!*e`f7Y;j07VI#4XjZ?%s^*DmnP&Y>1AHVrM'*@Xk%T9W`deLGH/lK&_Oe[eo3<8C + %leSg^pU8LtJTj=^q7\5>qUt5s?5UZeaWmr/ZdX(RK'"pW1'i%:agF#PXPkV$J;S,deThm: + '0XCAk^XkP+A*iSY:R6U=];kI:'BOtUp"$G&U=ip+D-F(Gq9r!u?CdRe_QVEX@jd\*2%M/A + E>KnKS4e\!mO:)^FXD#C`-HIkqF%bE62i92ph2*LM6GL3O<-ne?u1/'86#r]h:+K6,iToS` + F.N=b%,[VfnD&DXO3oF6"Q+Z!NWX\_Gu7JE%cU+1\^eO-ff>$J]Z:\GFIUO57r07%ZWFd!2-.NsUR7OiDFdf/9;WJE#"W4uDogYL + ##N,T3&U0."&@0H=N0If9%Gr$)em#bTE<cXDaIVD;Dk^ps7DisRk + '0P4b,Vu#j+>JZ9i<`Qla#5hl1=,.1o0$!e"+Mo[bM(c#;c^B68kDD9mZ_g"1-JLXXl4o$9 + $"_(9B-$0)eW@([G0!ifp1.uXTkN;QZ8bo,jQO"9'/kWgRO9??KIa'f7?Y<]6Vusq?'o`@q + S_(=/3t9)Y]JBQ7%3ubBC^*s>C&P2P6A0sK[4^:NQ6(K1EIg2lSUNpgm2/qna8qf\[HtN2d + 7Y5PhW+ZEMD'^RChOe7kcG!kZ=sL]e"nsK:c8l1@?K/0'boZu9R^4 + m9S@kP'el>7Bo.d+*HKYmj'@h2g;^96(`3U50hMH(ekq-D`q&u6d`f\m%GMT$nAru,e+.)? + ]B?>AfgZ&rSJT!A>]lY=i`&UJFClSmQpNJrE4VN*M9Y%>`?Gu)aMl1Y&[DXPu).]m-WNKRDZ2n606%p(!uF2En\s*eS%p%7eaNcV + Na`Ictr;\(Q('PIeJL;X`JWg\pS@kP`lO>/*M?Z]2[J>>1C=.>tXD"jPd@Gqe%ghnGtBg>% + %-CH5bFq*+Jpni]:jjIYgb]-jrN*nR+RIML82Sn)sB]=W6l"'P7Es^%K!YC1YU435^FRq-?n&*T7:EJXP2WW1A!\\N?n3ZT*P^cN6hiQ^>Y^ + $V[%bVCB#r!pnYaGsI:=2m9i==l:0L54?:CT_4%kNV6O4`DC;[uR`p/$k]d0Bf:$MA@j$ZL + jcOGaA33p)M,UCIq3OIHVR>7(r?'WhrU&0DMp1C)0rDPPANL?uEgYdjn0qe;;ll&njj+Pb; + M^sO]Q$*tMKGajhd)@tQ/UH4:9CtPif'/(KA8ECR:dRNWu&n80cc&!)'ZOr;kMGX*C9Yfns + bXh9Fb43]5@*jO.Z&E*b/N=KiI">ToiX7HrskX4n"^FDRj: + )OP#k94fH*NlpUdKiL)bdA"%&-L`-YN[-'.0`WY,HT$a:L>2[[0In,,``;am[GGX+!kmD,* + :P&-\VYa`?pa,+U%fh/Pt:9cR3`"*Didal>[o)jM0,+-&:_2&O@c7=WrrgnM(t4&764$""( + 9W*psU^/Dfh-[aGdC.?:jRP#EjS9WU"lrXXK%;(EkHJM!%bFg'IIEci?UZRsV:8$_S(<, + ,s"B@O0@I6^%R0ltf.`@0-uKV:ZAd2:?NIH4.e;rZXamm_U,nE]qU(>5c,ghT=SmbO(_]h) + jPr(8`gVt6/^n2,cdF44ZRsE>($^a>W@3sE9(VWaIuG_=$#5L+M)'#_[YYidaXJs(R5ZgUQ + H;siBeF98.iYHkNp0l%:>4jZ*/:G1P%W]u;hFaWaZ.bW3O8<;')%R=G`t[:3R`%1&P5#^h` + I%QP-agEe&+,Nj$,?S.PRVZ1Uf:7!BK0T3sbXG#X(@IlTU-Z51B@\ZZ/;''00!h6;i-lF-* + \a,rq2=5kF/*o63NBVN>l26`\ZqBm>rmZTPFP7'p5ZZ^-o!7jQ2iNRSh5oMnDfWri[/7*.k + _no74#'0c&N4EH!A&@Xdc/Ncu%8TY&*b&L!02(;M&3n+Bt'FKlm.W^gIJi'T#1cIR^"Vrqu + 7nA>(oPX'GAO_fY9XL2?PG:g9i073I2cKNAFEL"d3DO\^:UJ/6o8b&:'h5RB9=,]>F5l1bGaEdn'?jK,Cf(;_>IW;em?aFS$or<$n>B2+23092tRS<>A5.2-Eq%>uam5=#Fhr;` + ZiFg##W[9M1l>P5s?29B)=@MSoQVM]-N + TjfoDCUOCMQ8`>4:Ln%NAL>H.`4G$/@1F(\McBEgk9[?kLFKj*%ZB6G)'L + =Kloq@C@d*LMG]V,Rb/Vo^f6,ILB;,Q[=3``9>>_G + *i.f2upCri3sO0Iju+YEH9VHKmWQjJ[c55GEI@bK6`fC)f&f5e71$'Eq!0-K,7k,3%2(77t + +Q5HoOKCM/^Ka_gN-(Y6qalOIq'UB*2778shDi'-Qbi=bp0\YrF[epk)4@2h%+BI`dpt(L; + <17u;3"H5+\J(dWtf*3lm)l8X/Vdl\oE+)mE3R$1$:%dINl_*$qUQ4l:NtJ3 + +F!D39E=7sDHtAFtOS]V&*8m!j93D9:E.f#*#F/\DtLd^(6+I\0X)QKP!LYED[?.P + OqO[V3;\nb756Gg.rei?ZosRS*u9r8,'d%M)-&0X"&>"TPaN*rPQ_9@0_R9Ir_ufH'*fs!# + 1G@Vi#*DjfkHBXB/>^e/[rm^\Wn[*"R>Q+/(pUE17shWP2\KgR+X>20Z0AX>r/b_/JJ;WdH + R)[*7&n5PH`.S;X"eb"Fo*HXLV&s3I`GR>FX"",?"%\3Q[ER'/-o"SQY?H(tG-Z9;&i1H*W + npnMQ-o)b1K[Gju9pfrHm])j[KuT9)p3n+2n!/JNLYU\Ts&q+i0<)2thD0U:9?(#<46kGH^ + .EO/f-n%j#88N$*Qh,@r(Q/FLff9a'GSGAQ&WSeC1:=8[\Z*l^QTYcY5-n$\X^0cKk]41>c"2nF?aPVK?_HTABXgU=]"\ILOO",'" + 0B/\9hE7ii`2=$85dbC47([]1^1L[5lq2X5>ZS+NUdjoTF@:7pC)"*` + pH(4442"!r=hdg(,Ftu&N@R'@.sEfa-h\`<4b57+E>dqC/:X5ILc5XmK*<3PI/'-F&n%;6?4II'lS]*51_Q,'-d:!.2XdWMd`gp& + H&Tr&Ii,2h>qR%]c=P%O4"IZNO^cVL7SU8.fX/J(=$89meRYLOJ+%)P9UV,4!HC;(Oo\VdU + M`R[Lq_uu06*8jFbdtUY3Lc2E1!N8*d@Dr;PFp4Wj3\fg[`n1iS!DPe4l+k4hAgOl>bTI=G + KBV`T`&0+ErXNMq8ZaNc+Pi**XBrXZ+HNui>jN.*RDEi]aB0^b<5mRIAtE$o?7+Pj1,B^^$ + bsu-a\;)gV)G&I)i?OpRN;chE4<8]`[>$#8Xu[j'D97^1@d;kK5le`dUPaD_9jOLZ&)gX?% + NPa"ud?'+clY]=n*P4eKQ>5nb:[Z!K<:g,"XN.HZ(2ja4DaS"nCQ]'b!Uik7/7?BrF@akIi + UJ+j*!CP15`f7?"TYj2)>*qZQb3^G^,K532lnMYEVM,#[Zh_CYVIi#n^oPg"uSTHT8YlLD' + ,-2/Bi@B-CkI3'..>S:JZoH'rYU6dQ!2eA*^@udB.efN:>BWL;Mb2p3R'DC0S=`"nU0(]VC + Ke%$:#^XFY.l6d?Zh$/GcVsU_VXO2+'>h`?&CirQYSt_b.$t7bO_&dpma:!dkgS6%tB'ppA + ]l=J"cUYjL7+6L[CZ)hlt8\[G=FirMa:XgKMC;?hk'AG9`Lf`O.[_[R8dWY.?$Z'&d]84@2Ftu-$(NZAo0, + h`oBrgUuI46PYU>(.I?>X6&&5"&m5'(F\/B#VpLlkL:'C3c(S*_[>ol=PuD9N3qQI%s05RA + ':N3Y+^:C:+d3iC^9;R`9B=Q*'ga?d^0*+rS#&k3K=0HAfR&W.ruJIQ0,]$t]-j/@<2R*m4 + #"p%REm%F8q`4%GHTlq2f49_?R3j*X0qn44*>\uhK@OhSL[oYh=:3o%Ro7obM[BA0Kj7pUR + T3W/_S3`=/4I8k53so7p?Selub/A0+>nOkjW,on;i5u\OPh3rVqq^J'IN'^!>rtp-.p@](& + #1,II;10I.//^JD2WcSCS])#V'd]E&;QY;>ss6'#7Xqa1nKk6\0rA0V>t;%+HQ6]jIkn\oK + i>62T;6cTPFdA.!d0[\Z`\O06$=TM$Sgg^<(E@`%N8FSHg,sa9hIic]CoQ#`*d_qgkbL+7^ + %`j_GN@.B)P-6F@'/W96bjp_#'?!_k+Y,qnjMrT9;gd=<]b=YJ^<*^omkE*am%Znjdkp/,- + ZgX6-Vf]'`:LT?<>eM#oX,a@;DY]'1/0Ul[i*N!PhegYYsQc#;08@!7o*$b2cWZfb<%u$Fa + \*\;RAl8;:ZJq3FLHX>l@LM2*I(0Vj8?O#X:2:P?1mf`GoBkZ5oE3+AGbDQFG#bIrekn9-J + Dd2atfD>uuI-G:)UE9k<,TD>XK@:(?l=i0X-^J_uGN++[` + W[NUW>piYnRA(^3"Nam=".>d+e`^,c!GQ$WEj]KN2M.ClQ!LDgA[V).@=Z1&[?od(XS`\RJ + 5CM_k(0@*hqEu-fAXX+"VW0\N0r4+2Aoi'.q2VASB:3qPTBUZVbHbln0#OmYqBiVWC7:1-U + ZWNgiNhj?8X^MFjthj`r$mYA@:gSOGVkrV*'XRR7De&(QX(>Zpn>[JeIEh + %V,_!i>q/&H4pcKihuHtOn+ni\nse8X4[A'OLJG;7YAf[!pPo)7`Uhsm80=iGKs0/MGV3.G + 5^H%%ZZhf6@8RGheF$XmSR/Luq6\9Mm"k2cmVg?(@H4n"%_Ch:ZY.EVn2W8+[ci8cib=6#" + nTAC=[Rt?n)Qt$J.7ihLAp'SXnELAMaNKHI"fPO=k$S>pN!^I";D'24[3@l?Y^Lc.&(c2j` + :^EmaFoqc=<#^=KU'\Y\=Ti/rid@t-o9DZH#[ps_L+iB:61tfn+q\->YUUER\;^ULg_qb@Q + 5[N$QOmSa)2;cL_*deH'B2tHLQOIp^uu!ti%/,eE7!]8K'*'+9Ors@oZ"n&obaDC?AFZ3/& + hWV&n0:+MNO;I63p?q,G]C0:qAV(a25]'.>3]Ni7(:G8JL(cIZfdlb/NQT+Q,Y2IPMs-7_$ + &D+tO4fdE5$QGnUZ\/<5WC62/M=gEn3lXGSZs682O-'r:3'LCpOfasggKj]nsCZ9hehGde; + s/?Y-j;EhqLD)jKpa:!MlY#Fdt`JeUsYAN@[88EsL(_/mpsePN0cTN($r4IUgckrZq_:D + /adRT/r$]gHb((8TI&NCdFS1o6H)T[VVg;r%%=W>*>1dE9'rWT=noo_PXfqS?=7j[u2RWi] + ,G5>(/\3a?4UNOGR2i>XTl]]_lQ'-_t$LM9d20Y`/k.Fg=ULC4ROKCE%Qe/h + nkq((sXtO22OZ0Tf9csGCAuY5d[&BSf-7>ou;`Nhia]4HqGhVtm4ViDR\[1.8go+(2k&cfU=&D!(-q+?9j + kIF,G3iOjq/e9C_4&fPn3njUHf.W[18lD`c-+WiY@K?%0HMsn48Omhr4nhhg?Qgs$T2Isi5 + 'Wd#0Z?Sr%AcLP'CSK?t5`(i$,861%OS`$oX=8[g\!=CFp&VDDhG,MHL"BjEfs[2#Ld-Ml-D%3pY9!p.oMY>=FH=fCi[(t73&;!Vt6X + *$&'dot4"XSlG,p"%"2)Ojl>69D;kf#-0f(LCh#I((uY]@_I+>\h$"Zo1D"fUH5cm;9-rF[ + !UpS!S&0h9W@8(;IT\.p)/0]souKT%odlFDYl_]!Y":h:ot_Dk4GKpS*])>Pi@*mDH`IpY=O+K^R,$\[J[Vhtrn!m_/#*GinMN47;D#*\"mI*rXS.IspRa;p9@H-/NB + \K(6Pc`j]Rf^jNJRn_N0B30r"PI#FNdmQnni7h=e\LKeU::XODG.HqhAD=kQ3bdgTCai*Y; + oq%/nH*9BiS/Zit%V`P$QV?[kl`p(WFk_806Jn?;Y]ap-^q&V2i>m]9oo1o]qU]QN4maD5N + r>q1gcs1t61:_g*[:eqVMf7D6XQmVQF#-nd"N"PGtch`eM`9F)<,j2$amERZ'b'j,"nc8\` + A.0Dh8M,T0Yd`\7KK+cZsDFqXh]u[.\BkIXg*G1]>ofY3;![gZ5d:X,9CO&d&&4%fZ#HL)UKG=Loe@-Y5GSFrOs7;Q[6YKH^ + 5N+&>S<^qEPN86Vn=(J"660O_S+BQ5jT7B//u=i-^AIk02"PpPV,6A'r8bp$A9kCj;\S$p' + h,M4ISu&HmYXVfEei8YL=FWga^-;rBaIK+I"6@UaSS<)oGV?%%Gne30D%09JV215JYi%6U* + 5F'#%U?^gP^*Hi$2f:7'*!Zml8Hni4])I5O*hS:CEU%/%L>VJH#/OXX\7NsM#Ye.Wu.46Z=T+Y^#;\ME,A><+? + 652f&/8n$7k9AD;66kAC/98_*BgZ\+/c"hIl;,Hnh+!n/7]WegKQG,>Hc96l)u-K8q\Z^Z&P('?8+`=[p&8ak8=[OdK\E>64h"+[9$EsJ/@!BN;U,EUbWNJT" + JV\CSjAUY8lXckN75ooA&AGJau"Ol4Qo*_Z:lb,c4nr"`$7eem7ObL^\m*:RRU"FY04K?a+ + U#02"!d0j%KR\NU5Fagg%q-^e^.jaD?,so_$N4l*e59aol9IFHfFG'=hq4:#(Rj>bB#i"!P + np^\#Xjr<1#;6-*RFcj\`*r2q=#f?PA+b!`JUHtkTbhG=glcm6HRd&=g`%EQL'8,P3[r7_6Ukh[:]h^d6:TT[F + ,n&''.FAS*`lt$A1rTq=`XZ4t]Xn$[/Yrh+X@CW7=:9C,n)ZDg//S>d + /"!O8a]*&/fB=!7-sSDI1ac;b1)Cr:g>0bgojT*+]N:_5%4uN[49Sp"&<*L$rp&aX8^Us9$ + e:T<:on0`Df`Ui]./q:!H#R4[[V-FY>SU62`33A*QG;1K9WFa,NL;HQ.Wl%Rr1l1Kd2YF$ePO\iLt>=m%NTjrh/cZ"**'lc;(YYe[;!otGu$#B=D`E;^'r6c2Mb7b8p==BZVDN?6`:[*d,P=*&N;FF6K`<6T/T`75_Il:Al\t":#k)n + HsBsse>:%HZmk9mQj*Yo`W@-*kGt>q+UY?QXpO#Y[U;GI.Dj1SqS0#0`F,hZi6 + o,D!l:@h`o,,Q@$VVfEfFKGY:>h>iB"\%9"n`.Yo@GG@H"_t/e_[u)rV8Hi8,^:mMXte^gZ + fM@D\OCeeMYGI:>)_i^PHX;LW)p&M2>`iZa<>.aI"-/?H9+ih;:j2@a4D/`P>rAeH,)d,Z6+jpeCsj3tBlbfutl'MpQ;`u + +C6g.Y9Y1sS4jNSiNnZqbLOK>G1sVRaU73J4(fUV,cmIQPHXB@EC#c@4rbJ\/7]]=YE4p4? + rS`4FNMBO6DV(5(hBLZg@?B?#kmbB7KQM`A/"kgQZtk(PldOCu:ekjFZq-BGd1H>+FeBZ%8 + lp6TJ/R;"RF3^/em[Y3o"^?M5Z]=rf.St'NgS*CcXl2ID>",CPZQKb8ql%Z'KAu+]]V)e^s + C7_MAL5G2%U$?fYBjRS"`fXr#Y%m*VlP>+g/tb=%YA4W8kpEcOHg5=Z[q_e)lR&ZJL:6E^\ + a+^0CQ>[a5-=/%]5*^old!92hP+f*_n6bnCb)^U*lRE"^1n^ECjs08:;gt/`Ft:J2:aU^DK + c[0qS_.];jF(i,]-5gU?;`&]b]$ikj1-O2/T"l6&a1AI=,/QZrfCMe5[O<'D#iN?s/3BbWU + C-XbT^6#]:SF:%b14]p$jW.#inimG3BGID"ttE*:GD=VY@ASW-O3qoTu;/p2Y=HA5eGP3un + O<@$R(QLr3%p!PD`8F=%>L&Tfj*S?%!=MF(ff("U:o%_`af`(]L%f4iFB5\NKAc"?[i)qI=0_C@W<>CE)-H%!sqk3r*B7n/ + ^3]iN,_W&eU6Fpm?H5jlpeBeDmdPd,n!jE:e[-Xb@IXB"^u:E)Vk8aDqusF_fjj7:c@b)n-`%NGEp#s.pX)oWSh_.PHk9+f + Yq:MM6=8:.n`s1.&:YD;O<*rMk6t+`R47Pfj8oI5k(#\^S;V&4aDe0^Oh_=^4A73@,p,?+F + 4gaZr-urZ#dgau0jd(!q$spVEDU/g?s&?f=p[Ml;p!e%idpMe:A69oto`Z(Q*'gg%C=7NY6 + P[0uG?XMOM6a4up"rkE(F3m$o'cOB%#\okb7UE3+nSHg(X`*"f';$k#9_s77%)u#G@ + aqJ$`eZ(iJ[7O&gJlc7XJtEEW`oDbP8DeQSSdD>.d_5;$qCb4bjq_;BWFJ#r8iV9W)S7dm) + IAKgpU!;@Q*>^osu(%olpJ9\h`o\JhS-,n6G$22OIDEh(s%5E+bWcZhp;)?aH:Oql1nG->g + FB>dB&b&>pHD6B/qWGnHYE\Qq`-0Y1=`83TI$O8(QMC,hr$Ta6Q&fo4OG]R[r26uND%M"mg + Nu0,(]1D9qbQ6ua4,Fbn8;$6p*\Yb=5 + E<"me;4@oJa>TfBi54EW$C2YO@*k2;WbR[6;i%dd4pD9U[.pcuWhZH*s@/#,GG: + F@n\gM`$=>k>ke4d]kp7g>g^Um+1&j\BM.#]2b`uJ\]FrG7&4+a)nK+n98*eMYh##cZ#2^" + ud9E`8r^r)[tTPC<52,\_T0@l&Wj0C>*Ld,<\l3Ai+[jBb@(.W:a;kG2c,GEr]ni + rbn%K"$S;[uYq0)W`UM@mejOMAh!7?=P[aJG;-Z7'71B%a%Ru:KI2ft!'H&&ZOt1#e]ImF. + OLD-W.$H(C>BoGE15e3K-;iO%o1`*kPf?-e\u_IHDh98h1^dO/X`eJ-M)>em^W0c/D?fiBB//6%ouCL59s]n& + aTf"Jb5]XFW6BNl42_/rb&7+O;&Em?7GrEBRu'UZV9'Q_GA\dPff1<%O(#R';.\Z'/d7I!QY!R-e@10<>Xt1, + *DKo4^2%\n$-n$h=P;h>Lul&;+PY(del7B!_`l:R,?ok("j0)@'*\kma^jhC2QhWBm+S%e4$E#]OX_!q7$'uB@o17>gr>PBMamQ + :FmO6?FZ'?Y7K^H';T=e>6'FBl9?d.4ipF3=+ppJ8JCkXPrLp74-Le8]n\$CLOqa*HM5gfH + krpV"$$a*:mNLZY]9hjrQn^*dp\p\cH5ja*M1s5R9H#G]f?rtfhHHMqc_jnaHKZfCTt:Z:F + 3?Y@X2q&aOcp&?%>Z.;BcM>uu`I*]FfKH/!qqp/RJI^rD&Qf<7GGP3])gj]jb#5C&AY4f!aglgK1]#K_T4cA)r)TfOE(^q=CUmSj?%q]D<4,tqYX_(( + ORpf+i,Rf&0W:nI^#Oj7+dJ)i^?UoYAti&-g_&qKCk$tl7GG,D\D#n9T&8CkX=XKT[csI9< + CoA[PW0\(:,?&leSA,`kL&n)LRS8os6R9Es0a@>Xcjg+>a9XWM=MLBi29j[MBr0f"0OMCH6 + _p#q6g[1mhUT6'05(?R;MlO_?:H;Db@7-dn23Og8f[/B2kRj6D)Zd\PnrBhHSfm$*hC5$'M + Lm2](l5aO8>3])\F=!c;oQ#akVg?aALs:.B@fO^tD^.I(hCq<9+LFJGE`RW$5,[_9g'm%?/c;,0-%`[.AaS5ZBpb_cEbP + +%o8#?kHXW;f6J\Z)<$Z@f5*\OG](QUm'P.aUO#3GAX2:ri]MZg(00W8,smP/Wh_R67a9Kd + r<]*`#VtD*k2o/=qaIISkE@:=/"5V(8QN;*%CHkT$%Ro`As6aXp(3r@O"cCkO]M`3tOIAh$ + fLZ5tLC=AO'LXb7CR0:8hc#fj_`O&Fl^FF"nG>k`o^=\>/=mS:gYdO& + :=IShf'#epqFumTFRjDP1jbU4n1=0/C7:rX'OL*Lrb$%G<=KP;k[._)Ug:L!o/:FV,f#HKK + gH/T>[>hP:9#FkK-Z/8L`No2dg"T_TENRL!\5l)T>:ZOVY'mLaG>@:*)jP$O + Z51]m)16pR;Cq4<&iiV7sg6-OX:o0n?Eu,JWs\$Xue,LTnJ__tW$f@iK'aEI#.hCR-:m\TNu3PP:Nm,NilVK0qL$T2Ibop]oTJ]ug] + &8"W5PAkt\cPKXuk)C+>Z;u=sg)DMU$p16RY(+dOF%9kZV53b&h9t!%ojV`KSb0n9eCh<1B + !#'qF^C-[Gb6DLh"-VLrjpMr>>=GN4/6aQL!b3Z;/;_`Yjg5_c^KJs?Lu_S55&1 + T,Ggj3RVk/F%X*^%dW\dZu7:in_MkG:pknq^HOQSYN!*5*Nq<:OhWC6d0R7oB"u@,4?Pud< + M7tf6m=2nm5tMqO\YeHfq*mI`'^S598qbf<=O)F/AHmhsA%sU[k#Fdeh@#mJ['=D10%ToUh + ',4[6gX?Q\QYYA;F4LL9k+p[!kg6l<,i*0TEnViDO%MZT3ARZK-5n"]AD`#qaR?tbPt + qiC#5,m8$Z!r^$dh_5sa"O-d50)MdP"OKJ0E)J[b<[#dWhSaaDDph.Q\4hnYq8Mq0,hA+IF + D^(;pJ0NL"e=J3$=6Pe"KCnojPL.p)Fk@-X"^.OD_2;a`g'B#mguZ0,BX1:J86im$#iHE&8 + %Db<;@dS$V@$"OOj`agBEI6L6)iP0RjPN5m0s;%?:.X:'h75T\q7WCgr#'7U59+AIg&S&2. + _d&>iG]OA%?QIHEs.D=7p1HN5c+-ud-/d1H\Hr=U<>#-e=AnO0O!h[FI2%&@p;0S:!X*=MB + D$.0V(;!^-ZjU^l-'lI.j.LQfmGnB*G&$^[#0T8EiE=d,L(N<4N:i@'\Ntej%'JZElEBbAH + BT]GCC%)f]W8K)$Wrhh>Y\<0nC:'ofo,XeUYjTa<:Y>ITkk^G0pI9?NSNF4g&QaDN?ucBfL-f-54KS;_9M`>;pR3/%#o$/ + jp3D#Gq + 4qo#&lg$%CM+)K9AlF@91PnCs2]7jN,'+to<+/3pAO@$V89:OtFO4PTB/`]d8Q%aEe6+ER9 + hoGo9,,aC;_LmEnP$7J-NnugP\=`o?TM%m:p0=a2%`G:Db>-L85h][FAYT:1J%*@9U.7t1c + 7[CnN[e'Pk06!F"9pa.g<IE!F+t$Z;mk$< + b9_FrT<7`Q6d7RBq"#[2A'q&*ElsVbK=HNVb9*C]irE2nu0STC+('%f$%8,1Z6<+n28Xi'> + +]h5c:=MF12C1adR9%j"IKk^Q4B53+_.t&CDN=5#*2];:LobID:9/3;k[gsbANW`:\F0g2LSJ(Bgo + 8T>#-\=f*+b:`CAGgACYs!G+iJJEGQA^EV(E:kRA(;9_4B)BjYK&V3XX0HjZcOD-Sj94Es,=,C2TNHL'O?/c09 + Z-Q^M+aS4u64WEX$:?G>tRT'lUIB1bV!DBfS+0;a2(em$GD5lE;^=/sge83 + 4-'g@CM%ke + W\.`eJSVEM=M,se-p@)m#Ru>qH7lOTp\B,Ric"1F$1Ua>V(=uLYZZ;=LO8*H]\8OUA[tV&= + Nu1f9=P\Y+R]A=W'rdl$h)SHEkG5A$pNb( + m"EL4Sa"r(R(2je>]e#?Zk$CdIWaOj-[B>L4^A$3Defl[sV*u:%);MQb,r[/9+VOUs(-2i"\rP1# + 'q&u!9\KrSnXU#P+/#(#WNdPEqF@PHEMV<2KCN69>*l9mSY+TiBOla`UN<#1+/hf*U0;W?q + F#'Z8ZGtYC\i[\)HDSs-`236U=F[h>/bXsUSF#YUY;-<)6X^\?(5%;SU1sGd&3ra"0>A9#k + P`qUh,kSWH];)!g"ED29)[5OdHm!AhZ!oNM+h(cJ=Ij?Ho:e%FMUY[b?(5cL$1lHYhIhbg7 + ;5[k3cjNQBI@]srEBeVn^\]48>:lIQuDfM/C!XJ<;L9=A].\3"fWD6::Z\?TgQgj=G(]5bB + nY/VF!chl,"m6/,Zah=f#fpe5UHbI&'VT;te]=Z_IH\&^h\[`[:]GlaaHiLi"_nFgj^PsPR + >H,>rPg`jO_#,LeS*Rq=/\.Ad^)O>g%;Wd"#JU*l]%f6X/(;.Y6,WT#\U6ZI>DTGP0>\))> + 6;LEki8"nh3^(;Qg,E](QMW;=!!GT?01=lHUiEf;8N0oaW-Ye*0nXYRE=6ZarI>$r2[tFXi + d0;b?VBsS?^8m\'+]]bT+[I>g(>Rcchp,bhU[lSCc$@e]o/hc91"0>jK\*n'6=PcJ8*=$pV + aRW>rHgH1T;$>]Ifla*CaX:o,O3/o/d\S[KLRfR*;24I*]E0u]Wf_ji1)43c4oT@3X-e%J, + fI6kX'"k; + e_F*V?"DO!>M&h?X1`N*S-do?.Fc&+_*(6;44V0;Z.`GigKY]0ICn6^3Pt`g]3Gfq]kuMpa + 4hS$g721"?-V/qhqi.ZchAo+4$gmb$/bVQ4\LY3 + i1JDQRZ?EZ?f2se7'JfamO(Am+J + Au`S5-N=,4?NoUs1[^i]D-f:hSt!$l:\!<06!gI(hYE/G'kuO2OabQ;e/@GA0-cUCO&sa!T + 1AK:UQo07Ys/b65(TEahgJi\oWsPLqVra5F'=&"oHlM_S6mYO[p@`Ud(L7&;q%)h&)\H5dC + 6H.e*Hjb^\[QVHZV'/5>C8^;+oH#M17,Octe>YpO1Mkj?DsNT3%=Boo$P6R_IsGRb.p.L+:Ve!BcB!oek>!ZMs;6:VXA + Nmqg[,\!+l@aKNBVX=%2EXH(8W1IC.Mn'c>=!M>h!fV[r:;XMc!@?UgPu2:FN12R0HRsY-qouHYn6NQLrqk9,:GmR$^,rrP\Ce + 9\49ZO2Z*.@`qBl;W5RW0-/+ + *QW7`T-u%,UoP`?:W+HAb)TrJkX*W@<p6SZ@$-G5B2WR0"c""SGkncl>[S*0m"iu5 + #?(4qp"]lf/YZDUtHJ>d"G[?c\ieDkb^1hOV,6Ig[(]Z0?Vg61@>9=^FL]a-V_YL2(HC=[) + 60;9Q5DBo[E'[do"DlKJ>6m;`cE@Vc8X\o?hA:imbRtXGoW\Z>79V=0"E,ACrbnLI*jU"\C + d>0[(29\5m[lVnprIVa8mWZMSGqeMFl;ZSlZ6kKh`hIiu\\lX)uqG>-a+fMg>Wp=Sdb,kt\ + Ge_;`AoZF3=h0$'S9>e7Qbu;Ecbuo5>0*O4fcL.O,J'V):%tUo?,<6_"psgsSh,s#;VPoE]MkZmQ + Td5AWL@0P^6**)F3WO'51AVpe-UflP^3]R+[sH--C0bbhZ6%R]:8XF0SK84C?iRd=CksCnjo#bFT + XA;%OfV?!ZoNnP$=3X%4XuH4UQS[lIN0,h[2K\.dA+"]j!Vito + *k>XI7Xl`6p*R1dar#ce:To>V_6t2c?/k%"0J1Vc8.+_:la;'-7=mUe`m5`s#^u*RgVUC,k + "WGDGcU620kYV.TmSjeWbrG--`7L1KIMXOW/raR;V+`D/9amE!^Pn(q+[qe0s8?M^&gS*V(gYi^7Ik^nRMeZGTtsiqZ)Phj71B!]3V=e@DHT7@h]cX$QuXt + 9)n&j8l6B9c5Emc_c.u;2OUY(SB]3#5Nd + E406C))d;"Fm,"kBXmfmpbC(P`ko@^..P."/4;,/G/oVIdYZ;MRB4QRkp1/E@oeZ/(*CFqZ + @(#jqr.3Dq/72_^I-;Dl;SQtAA9;XSt]\%M-;.K9OQk`f1=.NsY6n=ZAD@90#^>u'&]jAbQm_c'MP*2*iUpjC5bY + ,h1h+S$`Q!nQ9N!f&.9W5MR>68+<86<#X?,(-t#%:.TI'CS%]@J>6\=67H0Zn"FGQ-^[bX# + o]SgqM)cP'aqYD#k$(;\Y/a5$S]LF2qU[Wd_ji2>Of0$Vk3Qm1tXi]DNBp,Tj3de^Gc@2"s + p-_M*U-e=dhkqF/Q_:\o81=Y7k+$Ao/,`;5*bfc,#*.H-f*uX+L[imK?GHP$kk8TA9i6kpd + c<0Bc_OS#m1M07u\%:BgbRL.bSqFk)NK68^+.8t&;nY3o''LkkNH?bp2g;Fq;ehqgZo0\gQ + q?1GCKT0f<,H3CaicR>AUm*.K]?G9@pJIjV,]*bi + J-&33?N#:>$RI?#;]f[;cU9]6d%;36^!\XKe_;)e3T"/[)[c[S5MhPA"kdPI("4B>_@1Epl + .MC,+l@gH1IHn!oeBTn_^cRqm01mE`Q3]XQj)$ZfG<&&#JJces,EIpsH"`&Pd6hmOVOE/jP + 2pZXinm4CVpnm<8r3rJ?/`4p" + -O]-bf9F;C:!YjB+mH;[q/maP`:ip?l2/eWoNnH5WuiDGI$:2NDSaZ1mk!RKQ^)`CiRN9Ue + ?qBu[rsCO`js-%gRWE"Df1VW426F5r1f7q%ZB8V[pHFI42(FglaJs?[H2j!VO?j$+^SL%TmOO[lAXo4E'Db.Hmr*Jd_hC'd_j + mfKJVrnGJEsFUYP`RVss\8bFJT*k55alpO4LCqL=:arU6r]^?;`tIeW=1:TaHk\(LESQhGn + 3;>It&g&?KEoRDqcK0A8n5Qges'E5[DpHQjl5Vr8P/+LAZ#/@M=^[pU&MsA*!r4ku)5_KJ0 + $i[mT#Jegk^AJASliFoVo"Y)+_"7puX;/GWm6Ph,5m.idA-g"F'#BM=5J.NCA+ma.kWsS"6 + /3Tt";O2?$,Rr)_*e_u*$@PS#=1HR5/\I.C[+53-,M2V60&;;oIRkD,X:'15J.h"`$[k:rP + IV?_]0R^"f"'.`KWn_1c32,6UXmW`5FQ'*+;90@RbHG + ^]\#a9J=Cj'#n`c79fsb6p*qXq1Aa1QXebVdI8CrFOs8$m0S`-k0eM+.&laJ=4(jClPTBuo't_d%LY/6 + TuWK1PnYa7OXK4I!^iKLiJ*7o?o=r_6b.C?P_/U%XMD!D`9(>`iq]`EFZnr) + :\2:F[9,o0$\K:o9+;uV"Wk(if]LthT93M>=CpC4Unu4acZi$o!XMD"q7a*-e[8aZX'fr3OVCeh>7Tb9X78*6:e._p"Y(9&ZpHA + CSk?W[%_J9t]0'XMrF?36Zc`9mUhSN42P"K?`2`c4RsU"N)fbcE_Go9a&a9'\#"abI!0PcN + MS;KX4G.;]Ipg1+_q%OrDV<]hNV4c/eTC>ihM!YVmUmt93%acR7d5;;m_7Q2 + 5&0h%AYS@OC>b"Wu&Q)7A;(WP3`>Aqf*=0=t;?[t:'b!t\+OVC4;:(b/jJc"<[aD3#dEO(; + FWo,n-.5d0;/!13I2,UJ-IUu`M9R<%FXnr\,>sL8dle[J74b92(m@C/^oCq;=^&PEa_oF,1GpH;l)@XV(:&,1=864hC4*3U[Sj3l*%P5J.U9kVXHH-IVU]NX+9A@/])$-lCk9ZpRt,kP))e'Ba'1;^ + _/^njqFk,/pLXG"EdAJ$c*H^[3ugh!WFKjG/>N2,27WSD(4gU5:1r5CJJfXk_A:$i$g--BJ?pbh`UbHdes7.hG8bGfX!eH4F[KuZrA + qU1q!9&7rhp!GIAa'@H`&"VP!IF_]J\R&Kt>F"9q=e4F"_-Z3I>UlbZPEB1:hbOu"?F8`sI + E(.JhT\IT>u\Vg<4UnWo&"$8eudY4"S=4Hb>jI*>NOo#jL2,fpc4>MhrVN^4p7_Z&`g")s+4B&LK3fYhlu6bXDP;0lU>I@SbOM.['h3eKim`*&WDY?tq]t;TN/h7c8 + ##,;BY6[J(lifH9nqT/F^L-/t=!s/o)$@Hj^C4rUFIn_qI)Uk0^oCK"\AgnH\Y,!o:6bllh + =Zk7Ur?(D/C[C)9'a3gIGbap%P.e[4c]\Q!L,RQRSDA?QekHi_h@n$X\ou!K1SDuWlA)f/u + <]o?t"_*Jm+9F'(33a-G43a'2jH6KPY",mG:+g-7)&Y6i*UI"e7Nf]9jQ,"T`9H!^;;\eGh + neGaEB.C_"'sJRj(;@th(E!/^_hp#@s0@t4tKGq/*7=@iEe1s%SC)oji?mUVu>=l + `%aj!.3+3Da4fWkJs6jj%7=:,.d2f]16k@iEQl7ST=cC/HjStTXAj>MU$p697i4m'b)d5i+Zk*P.PC"oM(?P([/IRNI5< + U+k;BkJS?F + Sq50k_?8jB:b`k,$Lbr\Gd-l/oT``Um&o]kl9H4hB>1V\74W'n'B6C1UF& + n('kZBa`bIio-#U#KrUfAm0^P[>jpn@m:=F($aDF[3B4[-?(>t_fj\=m;%u.jcoQNN>?K?. + @W+KYrmai+m#%uY&\Ep#A[*LkI3m%m[I&`)s_,+[N:@7NeVIOk\k&I\b?MN + L)$$.6,#LW'B`mYk@HJ999L']FWX:u?Sc_VDB5U:hJM=m7jCqs-ZlN#E>IgarN>CW#As`fn + `?fV^=d;*FCODTFZjPFG9a',,iuQIFC=0Qp2:ll5^0(To9V]8O'6YN93U$_GFiI1)bkGa^j + $qjp7FkA2gKCY2ftpDG6NV7a&m,C2-Yihq#1?bO&:$qLhZO#F2G#KZ5<5T0M<^HC55sf2cB + 6+.sC*(F;IthNt]rFcLanTm`-af%OH6Tp\4E9?r=Z.^S#d/s*0SSnU_;Ch%"Y<3RbH\mB9X + ^!CdNY_tXJ-HFK(5`PhA_55Id2.jpHfI^\IdE;+R:mOJ;.pMk!sOlDXGDm,158#CSsN?>Wr + BY8j]PRKgiG=X!!8L/jXN)rQ<5C>-#8RKP,%!>)#iCN=!I"Z7U5K!ECF3/6M88lMf\'.D`@ + /RZ=I123.a2NFRFif]drCe.-r0;ZrO%9\3I>gmKT>Q(-qT09'8UnZCFGg%c`dPLFIF$/dhp + -[%GfMJur:G=6\*!WoJ]H[%rUc%6n(,HbbC2\4I#luQ0@YF]eO+97Ih1fB4?EIpC&VK"I]( + fsO8/\o@Xi=@8PeOL0A1f@dXOfM$C=@=bH%#%&WnMlJ.*>XLNi6dA9C,6Q + _87U'rr$FuUMF8a'8S!i%,E>0d1C80#D(Upnj1kk-RS=oV7c=nMm1,+C5Z"?MGeG/h7]+Z` + '`+()PujtalP40*AueOl6K#(_9`D_2Zr=%AR\d159Uj:>(H[o5j*/(@0%ZTSmeqII?Z7t%( + )I:4_;]FdX@=i`NQ>Tb=T"a\.@84iEk/j&F#BN8BCo?o-AP6hdqX"D]fro*Y1@C^>90TYD6 + r!aG8n6HpN+++E&ZPn-P)3RjDfH-ITJIr4J-]SZT/3gRkO'b,osL[lL3MufR$nk5@9c?_YC + dN^%B`ihWd\Brb7FCamJeKrDKi6,Nt]5DO]ef^+ZPdhn@@;%03c^4:;-S:\4/_^<`"h#4'a!/KDA?Pnp'81!H_ + 2TGV2+s+&\M_Y'/5&/qoeM8pap + g`=/4p@C;:Dp9:K1=o9jLTFNeLZGd'\ioX&?>?@'NUOh.Z*)2+"!(UU@d9l-\'V,?n5?D0' + 4h?spIo;P[EHfuY/K]+@2?j8"X&jua?EP%>c%b"uAefCD[pC9S?[,l^?/kUE + 1J)%XUJd:@+JB[d-mKC8^D2k^29Z\3h; + 8Yn3&q*TP@VZ8]>kccJ-ugSX'#0EuJsaT^nUoiCQk8f7QIBo`'4$mL+5AUN@4S.8>.neKIi + @I[0k]p)T/0[V#CiOmHQV#._nMRn%mMI=?WfWp`&=mJ:rh:KI!j]>f$_\\c"WW9[dN"(r,J + h)dR!!$9n^JT&6`4@6-_)LJ2m0:E2$-Q_1fA,L@`jg)F/nF^2='4]7T&%ZBu!h\g)ILoZ_[ + [9u%?2Q6ln@>d@#Y,)kqb;4Wq?8sJ)$a3d/U+Gm#t'K$_k;YY;[Y?*3PpIa,*XHo9U4DO#T + XUdak)H4V?X6F%hRYm9o&7%VF+Im]%e7jMpDk]`oZQq,'6810^^6ukDpEh@pY/aA`Q@KOW> + XhqHsjHdDbm7*FAA_NH+5O7MpCmi7rC3&_]l4\?@1=4BRfOL,d6[b9l9hJSGct'uB,/r1Fa + =N07p6b*\#6@p76&ELnj!fh3Z&$\r-[/keRMRdT&&D0`5QkEK&Bek8[IPu#Z72>CknhYZ,Z + jCqi4-#!)mN(7j6>VeXcdl=535*g6o'1f'!/gjo8N70*!c'WPqVEBm&P$W9$.G44Mj>NV#J + pb[CX#;+8l]gtk76ud.+_W-#O)mpA`O@c,@LX&qe3\jb#'VKZ7),,#@\&)bd.aqL6S%Tg#<[e6b'?8Q1M)=XB=dXS$V@X6RGiBr)J_18\O2=A)P + b7Tb[nN*8l$MR,lSJS>M14\#7RkQ:E + a0Y%RK"TYQ]e+e!RIr`ML@a^l:cBsggoXAKa053P5@ + '7ILb_Ppjk"Kd*X9OX8>B=NHF6@);iks)RE:2VkMl^!Gn'ebgX";-fU"3qRh)j(^Dd=os(P + ;%?41f*??Mh9\D(U@7fFIg[lh+tpeeVQ#rl3 + =_#rqAh&[HYHj5J._F=IGn`)O>=@Je<'DPeYr&bciH/9?e%"L**;7j$^E%?7Q/5/-eF(g-+ + hp_G2(aS6[K;1+^e0[7>QR9lBE4L502"lWsZ@if'UV1#Y07Yt7U0Oc#[Mr]>,WL9e)k=erA + .ul6cpbI'T/7!D)^*^l<00SCOWrY!:o=F83k`tnboEt6I[e>1-9?LJ+.OeT2[a_h3h)B'j< + JnWXNoaRkRAk-gkZ.G>*TkPi'fC`HYZ>;bdOm=3*Ef,D%J86H.pU0\a,b@D`4 + EOeX^=0lY;1jTA/e/YkH'*Y*] + ;ICE:s,[q6](QgZkO*LFG//XkPN7s44S]pWn9aktc-3GVhL^%Rc!OY[Kom45!QdX?K^a(c`?@qGI7636g]1qD<--]b537 + +j*o=Pl_&I[XUqbSF=OC7t4# + llYn";"W<&9.n-_ZfNa#]N-.0NA?SM$Iu]"Y_k7OI$8-')iH%")sA+cq=DccNis"s0.amYB + pE^]*JsP"cqsGOF6uq<;NhQ$IG%Gn.uL0AHpMT%?SmG"n)g1gB=b:"q]5Y0`;M9]*j[f$W( + mIn?2r`bl?&dpCR'/E5r@uhYp=b%',E;:>!!L,+8^J[gb=EBu9>>^8]LI'?t>XD*43&Tb*" + T&<0ZbY84h;p?Ref'Q0l(ND0Zf.bmUj&S@-dC(S>qm2%Bcd;\I?c?gZr=,Os_;NZ>4lm3:jED,J7udT%0j=V]=G*@l%M;GuZIh]V + J/-;.Ig`3;?m!^%`]:8E,$_n[W4Sk_YS5I-G)AK8mk](&\$I)I."Ua7Ic-qNF9:LjPWUGXM + HDFnC8:IP%U&t(>)n3XFn2=f-H6sVD+"YI%&40n?4P3PRn`'AA9/k!H,P5-eb_(\dI/O[lR + '+Z_6[SA*q/MaplUkpW9!AZFN0QS*bUDGTT0e%/h9N(U:Eq:o)1F]XL/FsoTdfMl,aY=H10 + @O,\P7ohf3ARp82NpKc'1F]u(H59*1\5B51GpmbQqron8+W'&dsj@[a#6jY1,D3VZB[B_P; + KV$23WAId_._`GYLbqS!&gmit=WJP:[HK3)^>M'@9N"#qKj]+A'sELTNJ`^bA^=0QZhHP@H + K1EBeN044>iB1X/0@s#lQc3n(2^e&+7'V*T205Ei!2o:n+K,Y8X/5GL.oPTrI-]0_]O5r8$ + tZh6;a;_I]42`+/p1^>r25sWq"1NXQmZl(^m-UtFd1"9;lPW15WB1QMY + 8@0+&oI!"J9g@-R82QS]'N%7D7nU(b8on!)1m^i,D_cAC99cbUe5&Ih?V=>C:i.+tnLdZn2 + *UI,';r!]&O@EC],FBm:6,I(0jpJC31EgQnI7E$%EO3\4!r/iY\[.Q$nW_]kj6h2B2nCHVi + 9"3d\u]C\d,?8;DQ`VNjR=Tcgc=E$UIXL7c$hb;@@VHD!Ht"-J@U)c0Ga9FY'!'G0K28+I- + j-%(fJq$WW?!;pA#R&djUL[o5/"+jtogPo?08Gpj:S/Bl_+*Gh3BjFc&Z!!5E=KOqfb1BjVLKF.U=`m)d^D/]i85ea$\cpKn<-@o@Y_$g*^=(@(H_&lhugDH?@Jf*cL4m,IaAEOOnFQQL3f:mP/tDO1ZJ)jLO6M,H8aS'f)AWm0mm&NG + 1NL:pA98^#C[J!F#U@P(<:^0a)KYbE>M]*p[`kn6%$/6HT2%N\!__a-ZM)1J+qoP2`Z+B*I + G8@G5&Bk2uA$t[sg:mGP=ITGD0rOeUr)!HHq(j[bH.26\8C]K@cfE2lVKiUO:[WJ(Ne5\6" + *u'npm4H$D3!Z%IGuGC\='L)1ALR!!SK8F9%Cn=ll08Y]($moIk*<7255$+E^>B2BG-I^lq + HG-r%Z]O\'qB6]>\pb.SgC@2mhKoM(!VQ>FF07T@%BCS/t%f;"hT4]@%FUTCn0nYG[oo1To + KT40+7VpR6pfD.JHhS1e=TrI5/WP)&C:2NQEba[G!e;&5JJcXp7_H?f#EBY`r!oN]=R,D.m + r_bqCt.i9e&d`?0iEgCPBdH'q#QbC23PJSI[O]*`@I7BH'NQ"OA(^r#_SF7I..Uf)-LmFGr + :\.fO"A$O)'R>\ORl_'9Ut?Or76Nfr(-]P][k3G?M;u=b2_r]p%eQPU?Ej3O%5*bFBH\-+T + J9=eD/9@@e>mSCsU,(UKGGLiN4[Pe#d*REqA5s-_R9R(%[GQ(OE=gR@q"SN6e@GuL.m*5"2 + )M*oG&cIs`"SJ-7M>Zd[q;iB)A$)#a3eaHTX^TnYLg$F>Z9;_V0n]>)U=uk`E + \jUsK:p?fVqRP@3n'^iPid]9n9WH]H,3pT0<8+1'O'%i/hCgV4at]FR$rA)3@eP7a0$&7Wc + e-?[.8p>M?KX7f8hq[ot-EOB[,?/"PPKt"D + #ARJP-YA%XD)Z8dqBdYs&Ya[e[elfQ\Dm-co]Gc^.W40F-?b9=QW#O3FkkVTsEO/l4m[Gep + Hc*M_`N_>KUQtBn\iqP=6V^??MY^8IdQ:jj7i7^?VKeTH@ZeO_&]56b]C![c>P3/NXhG`!\ + /UQg/$l2ZgSf#7_p!8)>Mm3*f=:_Z:WKBA$D"dj0r>\Ye(UA3$dZM5s1-oj[J?f11)I6$!+ + 9#cP<6J!)r%iLLUgV4-QG_"2D_o`e[eeX\rM!W4+#+d*F7I(^:]rY7T%-e?\KFtY58U@>D$ + ;\Z+f!Qg-!b[3>9"#(X9B-Z?s*A>g'Y4=!L3EcMNEIg\o7erPk@&LhpiQKn[gLFjQYGDnMX + @S=t%O8&G1`b*F@%$Ob(%:T6K-?_&jg#$$hVDohjWaBXspq-0+(c.&9teD2p_>CX2rU!LC[ + e6QQ$f&2QO-.F>oeQm0%h0%.mMpVCJcr\'%40c_PMih5kYFO_(AS9EqbLesbeN@?dge2\D( + T`mm_nDIOSXm/o!O\K5a'R6tSR-iD_lk3$ha!Dr\H$gYA + p3I*'g-A)f\`di=4hM!sGr=j2;njIR7#D8D0)K@M"ZbW=M2rIr;jHf3=0fH(^Ha*$)N&*H( + 6jo(D+]]nK@;:g8P+4Zu`??Nlo@GO*oI9k+Wh"0Eoe`#?"Isr-44icje.I0-ZefMfX*`(pi + 3NM"Tc[@q!]g;%mn*8^\epQ#knccRqUXpje^g+56^Ba3*C$**GnI;8T[HZtJl/]O*h`gSFT + $PFsOm6:,kC1>??BsqC43nsb^-3M.;H*0-H1B`WocGF'IjaV*6e&j%iYtnbrKm5M$h[jGjM + #0$`BX*e#>M'`RB\Fr4;6Ui=l.PUh[>eI;8EsuKo9$%LOZjn5J-fB97P[q]t5CWO9:_`Jb&Qj=fFp_4,:!.hs/nqc%lS_IkL]dBq'jOpSk_]Ghhn$DlTZL?6tr[i' + [k.]ZBe[.)b\dHgTpch&Lc7S]pW*nSdN`'1@W1m + KcH;7"4?r_ei`bsg*'Kf)?K<"r7+6jT>8)q=M6;b'X4]an,j/c@h+ehu8.;GqYN.mU\Hm/] + s`[-_W+\!:KfAC_%b93t`-rI[qjp%>"W>#pWp4MFTB%9cpMQ&fZ\en&g,e99@/E`Z:ARr?W + 47GVid[[dk=cV^`UG$C9gNI+mTNNAIHep[!neJ.](ITl!ls++3pIE,>n2AO2]gt-DL=(3"u + /W!rHX^uG-GX^SS@9Bn#OA_FI]9VAm`FFM[$:[s'k'6"nC?HIg07i;rSf)e8pjN`^caUnCQ + =)`PP@3N6DO[D-QW<-sA(iPjC$HU*^ol^$p78APRZ2lWA6S,@YNOXM;.jHDIK>:B3Bjp@m/ + !mL[;&8sFcGecjLr3D44LsQG>etf(6r>RqDD88lFu;.84k8aW\;p`5OGbo*a + A/bI)`Zf#ooaeM9"qVe=aRrNC4qpF^r@h=pm"KAUo[#D_>a^.4%AGlD'6k'?rMUZVE%LT0N + a^;mGEHJ[hkme_J-_si&&s3'q[h^?bCI6VAlpO.O@g\?5IQg=GGs/5DaIm<,js$*F^s'Q67 + J5@!_5^3M8?o/4A&2"2QfHC>>PRi@b7LDG+/I#Ua)hS]Ak;gFrkE9nZ,YF"b#f02n?#ul9D + P6\a`D5\ra_le$Uo>YLf!Z^n4*N)%fbR+#%pc1U7#'\06t^?K+oEC;84"Ub(mnVR9KlJH*[ + s1LT+bUC>)7/r,XGPI(Lin7JFRTG`:BN;@k:]?;.7j?(uH"$UhPgNXrp1nh&.ElEJUmF-,j + Qd*b3E/J8q#=48B0`UeGEZdIK^skntZiXF$$`[P:7,q]V3:Q]cB$84V=Q-6K=IOR`lVauM[ + 5jU?U'&lq"b\Qp@i9X-C:P#"_B,:TJ,qNFhF5J[YC/g]ksQ?%jjbXm4:V4>VhEuJ!#.?bNZ + I(,NL2EaP:UBh9m,#'N*d6i+`$DEo)FcaCsVWl83>q0'%OQpeoB$SG0Pjk8[)#G95p=>bG9 + 0;f0]?D@(M0KSY-k"T"jO(*aoth*>EO/lW9/E?m"VHtU;IER + [uPQLoX*W7:TNc2D9FoGWC]O`)uH0n,`U:h,SYLo$$tQRu8r85[nMD'ndlX-rmHa]`@(W4B + gl\q*04&ac4@4_D*Z2NWr)/#8FsP0n$?Ms;<_V6.k!)@E?jkS7-q`\*1J3k&"$j^i6c@Zf" + /E^FMM^8A9oP?-tcOR#nLY*8:c;``B:._D"MnndgCK>^k18@-kR,[)]ID!J-h[Iu(tdq3X]D + =)="Q*0'!9*&mG9hA0j531:A+)e7jcDT78#$1W!9aRrQUXo"C>')-0-lj>$[gaR[H*m$3TE + '&t@5tF3_)P_JicT4_f=Df+IV0'?9[#rR-O,Htk4SSR(c'j59+$:9l,:4^L@,ci!FFM`=ut + 90U)hAKKW(=X]2tm9;OgU+0]E^FXAIZ;)P;haqB`uCU=E_B=Hh.OTK]=XXXC`1O6j/3KrFk + .TmK.F0^ZiOkE*sL%$Hi%rHQD\2QkC`$'o5kYJSG#(ZXSLAgt9Q^N`asATUpD(tAl%R?=gZSXLeD%0gh69N_rW_A:MJj#pqt# + D#Rd8j@VAp!Tq2N%u056qna`i`]ug1.Ih_bjKQqS>VSB*i2%+m^0D#KM.kEB0P_S^ + '.%crh;E(cqCq[.\%^g;d(Q/P1N%-E,5$BuapnH#7]?XMX-'a(SZH[-hLuaSSH'CqUuY@Ii + 'sfgNVn/GDpp#2m2jY=*:KXd1Vh]A8qLpa##aI.+(6^_d^e_WYu5P6M%B4bO92R^,KB9Tt(Makkf3bEs%`_(3`F5;h0k7D='eP"&NXTkH+E[8CQ\d + D<--"^F;AGk4uNk([bp5NXbd>37hEuKoMk$L0[7f4##,(U?6bL0S];a=_sYUPrZQc58[n3A + s51)pkIk^r@9aK*6lRu#5cu@LUBsM@t]+,E7hEDrH'+H[(F(Jg=:NqEX^'N4!n%=R[86n4h + 8`/^O+MDLJ2^,'r*Ka3mLk!ULu04elF.]iZ;T!D%Z6QcAj8VI) + JrHhH-CST^PK[6:^1d7#FeH!Qj&FI(n1qU;6O5A+*CVg@NU,;4'h(WekEU?*)C;Yk1?IP/q + !o%Q%WGQ4/pn)e6(fLHC"5$bl"^A6ntURHT4SDY&GN%_O>PACN7,RKZZcn;>j4epmqd'u/qm(M_kQEsZ,$T=ms<4X!*K9>[$b35FQ,+Y(RDW=uoHhn=s^6"5s;lkdJH(q7[;2cHb=0cDmDkI + !Db]?C\pr"28Jikgo1[X9G0gH[lRYs/9"&6Xe)>Ni_X5/0bY5?kk=e24pdf/3[$^/MR0'Ip + eKm_bPA6VGQg!e\<.h7@s()$Cg3TUe,R(rRC>0Vgrg4&*U0f>D+:_Ak#5o$=j',/fEr5*SG + r9Js\>eW+]J578lsMqL>:0>8BR2`fL-_bcHT?c1mi_i+F\S/3!3/jaqW4ql8L"?8d@3CX\Y + /]fufge\e,%mN/C7?h(E_gFhG]#Ik$*K4CB/3USW5/QYr_TYut'C*L\q)[S/&8W1P/9&)p1 + p;_T&o.7F1jPt`HS=.;-R*_!'(%Z*g-?%#5cXfKr$48&LDnqU&8VTb]G@ou:.0YQ\U6P2,] + >t9a%.ae`^BI8b\Re/I_b;V73$Hg]1G#i)F_`Fap;FLC*Z]o + Q#lub_\6'VRV1$h96"=apD[m9!p46>CrlD$aUG_f>`6>/gqV;Y1DG//,ak\?n1@Ra&ZgEmd^uXIn#V\r^g$o?jQ47Zs/1 + OS-_["hV#>STD:qDQ:UcZh9l;2mHY#Pe> + UpI""+ApT=d*2bLWOPf5r6Q_8cnjNV73Jam*mU;uX6g<8'a_nA"jrS\9oD9`U9[[>'.LmQ\ + 8:J-bq2hi!RZ/g.Vi*`4-%aB,sIP$e"ntO72/Bh'ePD(:0N+p]Uc*o1Jf)*QRcE?`B@(4bY + s,nR&)poh(u@m+hc=]XIV`-XWBX=&_*@:[T,Lf/K<+q8lTcJ(M*%jX\`!Q;,jjfb(TUA[6W + 1U80M`'QmGfF/O\$H;UV+Ad/?F,o+/Pm7ac]ke%4%/D,\l&X0BZsVUV1MM@mXW!#$l*."hX + F>TP7M@mErn69f\`7J + 6,/4O,IjK(RT:^ah;H + p>/>h\&p7V=EFm=C4C-?9RGC*Tu<8:*@gNhj*Z&7J`j+ia,@U?H)SESc/m`m+t1ehO + 7#CH9bhT#@5$shGs_bU2+,m$"$F*@#b6EE_p-B"Q$j$?LA1Bec+Lp"CNPahi8:VecOdkfAK + sIiGKB:NYW]P'&e9M@7C^bSc<&&nmHnT@?):7('Z)i$/_$^@Fc<&V.hG^m_AB#0Pc;;2/CJ + hE@ji/8Eq'!r..&UDV$Ff='V:D-/_Ssqa^hn/#adH-#YWZE5mjT4$<2GKRCS\27MF#^_1\0 + m)p5p2kb;G<@bXN.i#iM"68&Gj,C#pg?),2,=\4!@ropWVFBB8sK@sehtmSr + 5LFQEA5AZ6nacc5'%SGN`Mk4+oW1:mJnJ3f\c*9i6"UL*g^:1jA`68 + \ru6kV>"F2kin*M?-XAIh?m^A0Od35i_H*erVYP65[ifOC*'6e7MG'1,@M'#C;(ftNhr>mV + WuI%iHDIP#-R4i,%4f[@J6tbI^5QRYMnmqCA+ZCL9#)"W+!]R-AJYf0".@+\*GB?@NMqS*0c(7,6lc-I#2Sn\@aD.u;N\QJPZD$>B)m/TR<+5"O"/j#*dHmQPsb"V+9#19r& + D0tf#RPBUnnCJ4oLk2p[Gp/(2&PN`a;>s`n]$Ge54RaXM!3.sn@':=pAe9E*cLaBDndE6DI%8^"7bh2g#!]gT-/07?L` + 45n)"uQfS*dP>YcAUB]e=E2_jcsIrEWuipM4iF6gnAi5F1rF)6/B?U+m_hT)"Ha,lTWQRrL + #7/!_*=.68FXWZDX[hoRO;_Q##@cKN5T)4FIb3X + G?^9tTS]Ua4h]6paD>:[_IEdWd_$\<8hFo7f1#="-4p!r;mr+8/hb0\l?9S;i#^J,s6jLd$ + J`qM"Q)X-X[9V^3Nqa7 + "Mc`IZFWIZ$_%o$nT2eh6*Hdh)ScoKE2LSd"D"sZE807IaAArY,.3RrJG21qZW@)^&G(#"8 + 2>f4.a-6s8MNk4N'/N0N:N;'8+;^(!khH9?LLTb%(@8#OdrU3_m)>Y1I&/:OY"d1\kb[dZ@ + #q@cBDeV.neA\,7_k;/;Z101Xu^M_R&o+Yu;;F2)8%9ltK8E0#\,he'u%*7++cXgJu&>SKU + s5'blun=Ask*=3=N@6WR(V?$uS$0BB`4d;f*6o2:l"moiD.1ac[-['WgdcrL".o1eZMO#`m + $ip>o/c6K6'?2'>PFLl[slZfjXm=BIfQXifFf(ES^N6ogFL"gObFcomC*`%dDQ`\/g`qf$YS + 7PjR!LDbJAmq?@f:Ibe51W0oMr?\YV*8PgI>9m?30UUAk;NUJ]kE\63FPV2KrJ&!RQehXf= + K3S&'t(]i>Yh(?7S*T34@)C2Hrp>Sa\_tR?Zsi:,)ogqOZTEjd-J?`,-FLn#g-Lh:7>Le97 + %u`OrqPL[BHG+4!D>#:Y@IgZ2kn;n9)=eOXsm%D?0i+#2GMHY1*(ni&b_#\D[Z$,>aDrg14 + 3R3.^XCE9UL*FlIc7F(b9Vhj`Kp4]Pt./3H:^Kufl-1#HVoK-cFM?7#H[H$qlXr*;tf3%,@*g-_ugE!<@0#1SAM_ + A%,G:"?u!4Q56$gK6'CD*hnm?_L-&F>-GF_6lc9$'I]\U12^iYX:h2YV>nAVLf.*6$Qk+/!%^KsD$q4VRW*)%;=ZnJJB*E4 + 6J0`SWh3B:Pna)VUXk%;k@u'aoOUQ,l*sOhL\QabH5A4U3TsO`U;(=:e9H + =V;oNH]>l8_DuXWO=fP&8UH6UU))-Df4PMUGZ=7VN#RV3J-Bds>LskrfTU2#`V9C3`Ec`A= + ;(qO5np6VcnU!N)+hUss-j7-ZoeW\m,C<6?^VWE!&qol?9q$G038m8fr=MQ><#SPa-uB<$* + SWn,=D_$GT]3qcYN3I'>KN_cTPDA8;WeYk?_n + =XonP/8[&A(&l3U3m2.$c&8n$G*,e:2.Q#BRBAHZf%K>\>jG[L[Piku0=dI$D;Dce8(?I%$ + [H[8@26:Qpm9/#PZ4K-a<=V?kS];5D!jI4\lUrWgY9,ZDWTN_f(EKXCTDYsh7gN;mcNAaMg + +V9_n:1kn?P.!I.(q8\m>@u,'#6HAm<-=a]DNUWNH\P"L8gm+/2%T(AN + M_8Q<(R/mICW)VG*9:qpQ*HW7cC)!i@JnTEF2h,'H.t%9/:ER8hKR3=P;;=&,G0%K8C4pQ7 + VFp!S[9.Pc.U]2k^;-YV=p&"fZu?c4>EWaQ-7GJ2X'EWCP=VUT$k3ao'*8^XS%meef*:HCO + L?.Flp3cg@&D7h1;g((<+of+(B&GNO!_>bLtW#BPcM"ZhB^8g7)G`m@CAf[`7(VgNRURc,I + 0d*oYnDT6"n@bI[F;m+kmTG]*KA[*@Xh@WPM.5:L^MVGU`P9X/suXogE@9tWAGkk/kLk;4N + Udc%X7aBO!a`%2prXqn=^=&(?em/=;tQAVlsDEU>Qf+P$IC:`rl2e_Td[A.o:amk9\@_%76 + [WX:UEXLjL.h=MBgtpKNSl]a=T+U4UQ^ICT?#DY]9]UUDU"=aYdAgPEl9(6]f<25j3EJN.r + GSM(?<]PfeMliB;iLEVQd7]/:$oVXeFjAheN)eVir"_)G/!(aqk^@^*P/ZPcF)3u%t3Vhn% + 89Ge&VA64lnj(`H^7Eft8DW[,+$bq(E-6W],+hI@n`,5:t*gX+#FY1%EHhX?7[BP?4bPST8OA95#`DL" + NT(*<&,-"DW;jsm!!r't,/jCM=T#-D>NmQ'O9#E$k`u\Yqnc>5ko0G55l'mK"E4F+:XY=Xb + X[a>"@`l\l!4-WjDYWm,>^Rh0HU:-%fT%3rM`EcaXmTCY&4ecrs.'SO0\iu6MtMa:2kCZ8K + A)`,ljlL!i]-COCCB;%$&\frifLZn;dNF5`madI^#:6WCI*0Pm^&:LbL + t#nAbJ^GTdX2q6+91#Uou(VVc@LhiMMad!H3u:kiOjp$ceiUq$']I[G%[N"9BGNX#2Irnrl + e]J"Mu-3dlJ5Yb-\@#,frE2t]WA>,3 + /J-$#Q@g[cjkr]A;G7[R(=/*YE=R.G`r6*6)+MRNELRDWI#\L\)5fAdOFh^rTRp"V%nHp9V + r&5g(hh<@%hLfp'[k1f@*gE`3O3SJtHR4u!6h;'*9$jI9!lpJL;jDlEi + #Et[qa&uX\%c3-=n7k>p9RdL&)88TF[gDI5E+-LGLEW7O%!tLG0#r63"1-6oS@3K[S-;Y9Y + ;/\*#R4"kBAqs5(7<9C<<@LfN0..NDn[q;rD]CP40leQIL1;r:+Dn!n-P=1n&JUbt.JG1IEr!e6aOZ\ + OZ9Z)m`'he9shDcTUcm7eEl9FNZkT[nYB&7^JFQDhgsrm5<4H8Wa0NDoRKqUJNdQ8^s#$Pj + qK=p2W!I1/sr%1r2\I%o!c01%_kNeGE")brV+98C\A2[4P)F0h\nr:pYjQPp]M\9/BP\9bg + /jEa_j&@oF)`1j%bUoat+ZG=o8=;m_*U<6\BbB1A.D7asS$[)Y@Q@97Aq;5nV%B>.?m7c?Z + d3^V+anm;@9F'?sL6t2KeeX6,3^KVB'>U'Iec]9:_93j8=+\hJ@-.qb9b=korVG>LI(#".; + jseS4nrGi.rA2[k-%V8tt-V0OnB'uPg^gEN + 2ddjjZD3kOtc78V?nSWOqCj*"&[_m1<)"9H8F&pV/DR463j)aqoF0=PG=%Y@D1nQ/M>#[K= + 03$iH;Gp%#.`DIVa%#!*HM-Nj>j'n/aFObq-MS4u%1o:>(B"s?C20QBD3D)#(R]DV@63jm' + Xt+nPBpZ(Z8XW+H8iHN\'%eWBm"M8*N84NeHL@8ZTLXLI<63PV4W/-*E2^qIJ<=lPPd/TIt + ,q<**:[1pXpVWZZ5`IJ.ThP\"S9''7onjQ^@GmA$^cS&MURLE-O*aEcbD"ShTp!HLhSuZ)N + ,;oKkMdJ<1L-3)>*jFau9/Jf$">p\A#OLP&ZuEEEHunY^]#%tZUrJp;]p\:K*rKn&TVLY*D + jG`Oi:K8-m[:`)WV=7oOhnUhYVK2S@&m*O>L`mq1-N/T%3X]![Y:Q2A[eVs:@OL]AOnQ?^j + 9dJ0&XL-\U9oR=FgC0V"9hC:'d>n#-O:=@6bl*U4gs&sOO#[B)D'[o)%uf0Ka&quKbo4cbJ + Wa.hNt%)3fa!RtTp'a.P;s)7bZ0i9Z]o8[dg_A%q,r]:%?jp/d90\9\J^YMA!2g%Q$FO83H + :E(>F00$Q2*D_fcuf@s-D>$PkfrufgV;h-^:^ER(8a7)5iQJ3L73:f@d3mH&nMA!=&:gK**Xc"RS:RAq]>!F!; + :Sp\IUm3EgfM///9PAZLJu-Ij\Ef"@Q&,_&UU/XI==$0K?@mE*G'\/)'[rt&M58XfV:oR]P + TtpOF%?)%L.!n">-!<9D15S?W1&2\3Z0qZbGppEWnK=$H@7CA4fJ-7X;[]r3_cG_jCB1QDc + d;^R[kp3\"FY9X]kJ%3r?&/T<,X852,1TRc-V;CG+?UB\JBL[/VrE?ua+DZ;KYWHP`tC=gJ + pTXa3?]]+ZK;6)E!_[!4m2gA.TA`D9K"ZFaPA)L6Oq>HO@3Wr"TJqZEc2L6l\`N#>==(u3V + Oi69k=SCpK&m68=Q`k0qP'\AUp>'$-8l(7^iSW&Q"=M^CCl^N01esjF6H1@A,a1Rh>RCQar + )>;ni/0b + .GR'HcNq3e"6Ij]m6s#gYKb!-bd50Q!'ls4;j@\T.j!@n$^S%F),GTXEU7Y[qV$'>Y6?UX]P=q + W2.D!Aq3aBfZ4KXL]n]J_m,+R"&>g+;fh9I2Rc5bYAQc753O3YE&bl%:^A*_Ba:XAslcTJ8 + SguZk1%F4a>d%XIbI/hI)&'n'BIN8J8SK6-a+jW:6dp4hZDh6>"%F^ile6PYp*:PVP1":UH + e@f#74O\t36.*A)eD4ie>liB@&'iuUeU9O,4^WpFZ-rS`f=_dF4a58d(n&'WfY%+3I21DYlH.eb3g>0Ts>q+R"^YIX\d=&FOh0 + IhIbL'VQeNJcH4lt/KQ-c)8h7`""I.>p"(Y)gkh#7E&?"MrbCYQP5gg.>?IBVX9s5(+HP^T + 7`hD*Qth;Z-\igl.`hD7dUcf,t)iOp>o^!\I'9AmNscJAJ\"2I`9bJR7[:'Tr(g,n=:So\V=ss"j@UW^8 + op5i5`5BPGURC.8/botG="`1-N\'8K*Tr$0X;T/l1BA,0;7/YCMN56CmMU.@Mjqu-E^iW0" + 05empj1^F*cKY_$baD(%(+ji9>*ZYKF_'AL6[$iWrNQL-W89AH4+co-& + OGRMFD^^dgVijT0Jd3us7\k*_2!T-0QVXOm.CBpO8Yae3;qcVJ%5P$,A^sEFg5ui@e*47), + kA]Y[7.)/lGNTV!+m+M%.5-oK1),5$M=?n_7Z'pf5Z]0YX\WKoa^LR@.BFW(/L-& + dH9DAfs;X#Zm"BJ\>t2E+3ZU1#T-97>ZXA_5n<1#6EHaXW6B27h&8:A%Ys>9qr$eZ38A_!: + @"g:_9-2oT:6[iPJE[s-ilpDf0hP8@i4FfKih'WtAjn7R'<3M0qmfnILWr_II4[udA4\fJO + Y_PTE`K:;P6NRR[3_(;=1!%)X5>3@)E)a:)aY[Ur82U;45b;O6s#6I/pZGuT#akP2A4UKT# + i&pGG%hlk,oE,ZC&6qc\]1Jd-Lor2N=StE5X5b&3Z.qVg[*>)5YUQf0NtfOSCVqI%Z;`[k[ + gt9Dq8eY&Wt@oXoQ:j-F##m$6um&mktK=>58D&YHcZ<103jCp8eW2l!DF"<+#_;\I(MAC9f + t9L7^Kb64NsnS!r7%HTW/fVJk854a5:((S!;8%n2o_"l8b9]*Z%Kr0@>BdD0%D>i]XNEj'jmM'\Xkj87?FW/_J)GQP + &P^Uc-%RJIp18_ocF>`kDHerGLIg;4'm,AYmQK.kf=9%Dk0g_3r;+m)'l/drFZM+<41Reh< + nu/6pQrtsNStdbn@f!.BJamfAAt[R-!=q]-*:Fr2APsg8?Y.f)GF&Z]2IS@e2^NADoI%9]= + LAgWASWpD5V$s2C?krn=t2PB=Y.&Nae9DOf$2U?KZ9GeqVFiDEHYX=R5bU]*7.r(98h'[16 + 2,ml=\j&@p4%6YtNFk\3Wqp^X;MdAs%=*N?jHsDfJEP9mkRHtuD8I2]:NbMO<]1-YGGVPbO\8YaJU"j\^ + QW(j$h`nI7EtJ?ppA*B7n3#"XbV[B*s-=QWIguA'[>$a'eU*R#ba#fS7PNhiA,p);+d>*3? + sHcYLdk%]_l!+Z@9@6e>H?u<0B;P7+_0;:%[I45\70-=6P"pUSf#39^s4$bAqH)gq_KW3iu + Ndd1Cis`/`d1V+nHF*NbTlX_tO]dBrQZB;56@#Rf6NlLOP:AlQS^_<1Nj&Lb#nc]4Dc<)u= + 2hOc@2gfXdCn6WI`u-3poEe?dnW@XHBtS#er#'OIbqG:d7b[b$i]?Sh_;Y#uIQ2D5W71+u9 + pC-+u=ADWulOb+jP4hXAo*1At(O`C']Z3=/f1j\2q!l?X)K(*^R8/mdb + ia0C<0Lu&&lqgtpJ + Cr>4B%/s=L:lD@+?C\`%A8hpsHjZ&o6@dK"'*R2t?r45!>p>-obO$qN5#?FABS#*I?,#TJad?ebjX9;s; + Z3HoOkE-p&MijO1;K#QM<@['O;kd:g00L6cT.6(l7^G^HUF?%g//6X;[<^6,HLk7@7)"_JG + ,O!u]40g>AYIUR$JK_Qp"]1uXV8]s=c2$L("E#.ekQ\0MebFb>l'rY7C#Z=,B'E)gq&@Ylc + :$MB._pL:,U.D:a5comF-9df.H#_7bp.t9^o_fiorV*>$),hd@_/U79c6`MCP]uOn\9fdRq + AbSmAY'=V'PDTh^V&bTaDkf6Yr0REc+Ol2Skhe$9J6+Jl>XUJE"aTIu2S$ + 8R!$sq;k4MQ'B*t_(h-(\dRr4ZN==Ak6YO-k-\KXS+BG"j_5ls]2Q%BH]$Dk/`D*SBZd.ub + =ns#82nSSD)Q'lm;5BU);h9"G&MrB8>9]dp/3\..FKtgo&s@1j)i1b6@&^\C02d[nQk38=k + biM3=DQ;97t]^2BQ]#!jK(mCQ05ns6FDqWiBrkMq]7=km3KVP_QKr3L@' + tH8uZug^>@6mHoJ72AYG@><=e3I;)r.$V!OQDg(8K_j3-3kL*S\7W"\ + FYkFs[hcFH?TAH6e-A'Wd=4r5]g@GG/ud?HZ + N;[`:TF)j\8St1;2Br/0Qk+OfG/$plogE1p0PA_qO_J.h06:$12GUUHj<-SbIr'omFStjDX + F##^ijVCg&%[u5b7Yfp\s4445X32^+ZL2Y92kQ(P_AW(VKP2q;cn+Gk)4Ac?Oh+fR49`nt( + odqO^KQr>ch\5/ + McWfkOn(%2?)s)?pDta1VD=cY+m\+BP_oB/?-rkMJ'^a'1N1\a4&ke="+.=r*AlPhTHE\Y\?1 + "m>X&AjuAT<_?2T]2W\,%DHOTqSce(jhsf)^<(^#/S4s_:/k/j;c#&*Pq@j_?;$ur$&ul,= + 3Y#_GhetA0aK`-,P$V_LsATPUaP//&J)56F8;\j=S7@/OKXn_[J39'JdQO1W(1h__a5<6oD + l(2T(2+6^0OIS2eE^42\Ef_jd6^bFbc/U6m,F\e?3kq,/kMUVSFNP%'-VF?7?]q`qM.^3fB + 89E@PG#JdD<653#)S.%Z1,X6rU_Xp[CKMTP!#fQ'9_dlY0r$oYG"i'+u`5GQhKMXlA<5)mG + 7BBTT]Mgu#=2iro6"8u+7^N6:<)^hJF@N>)5R_bS>][o$0ucV-7r1o?oO + u4nI7O2k71;?gN'AdC&4Bbk_6O_B,SQkdMAQae6mRT)Ej[Ai-qOLgaV-$n,`jdE3\CdSYi6 + "iS#3*XAiTq=\Ui?j6Og+h=t]A]-T_!`M5I>J[O@Te/pc-Qdi]/N1Uh`G-=X\.>bN[`mk;d + IajTZ+6Hc4k#V58>0m]q+,a6&aZ&m,O0!(oii`!so<]>>c[otPt`3["MS1kYD-2W4q9W4D- + WN]RD0EZ2b_E'CYX=/E'[*584q_(OHprR!tP.DO193j,"$Ho`/1?4ZlUnPtbY9:^"9&,o:e + .>4TQ`GHt]lMuXN[llX(3q_bp1`8\MEb7"IUm$]H@;UYP + bFYHJ^+"X\D,[9SiVl!lqGXc8N>gXthdlF(n=$fWmj4bKG4WKZ(+e`_2apbH1&(,e$NjPtp + ]*bq.R'FQB#30enlqW8nHse"FNn)QC=h5r=PE<"[&"r&S@X)#>5`>dD^,,J%'(Zn0,#_[`j + o9HHPO9\M_W,cMkR_^^>E\E+)G1oa..nX)?M->NY*C9pNd$Bh^AXur`2d@%0Ud[D)hYb_$@ + 6.Sh?'TD+KXAmai>&VTWpaL$qd,^E5$*qrnY-'6lOl[Z\')YV.cVbt?NTB(qg#bFO-mQ& + AX"#UXtIeFd6N9ie\s>S+T!cLk=:'qj45G1,1i9>.)VWZRD[M[XH`fdtA#U0UpP-`a'7-`o + 9Q-"L*u6s(aNb!hF;_4oT$*n)^:/_u3t*N`M9ZrFA7UJ3JsfpUMSYM5`Eao/ir26Nh$*L7> + (g3$TC$0L!M)^lS@0ZBkiXhNJZ[FqZLh+:-(!b@`[Fc2dg?$O[dRRS&KV85P-8Z0<-#";l5i+ngaI.Ut6pjc)):/LPW6u^55 + h=:Me)%(^fj2[rK]h+GWDagEd?TTch=+0NIbHrc.+7<\jh+W"nlOX:?U_!:Z0"r1:Y>p.>W + LeAKZR@SnZ?Vsc<^?F>n;s^?M5I!/W&J%"l[RI5i&1A"liZp5VsF&* + ;`[AR'/D(1acKnZHa`P@p<,P'J^Yjd>\^Z.cr-@jtcSXPD_H8AXU86%Qeqn*bf + 49HXs9\S/u6Rp+a!^B217=B#\1j#"iI5G%Y,n/'F1&qj$:@l3g(*<'G>8])QE2rAdehji2Q + *)j$S5CLupc2)](*;CgjhKkF_E?T(I**eELoD.Vg'kO*T*WXbnDF_32T:3/raSjIqLs"jrU%,$TC%'A7'5BAsSm!l\F[>T + BDMs;bJu_L3#@EJ7l$_l6rk$P?Y@7MeNr]A(GY^^9-W5S`Ef7BKepa7<2GOC-`=@6n3i4N/ + Lku(2Jm[VrMCr`3EseKaLCj:[pe4P=sV`5I'gUZmM)HmU!f]k2BA? + lYXql\md,TMh3OHk&2m5m]N1!52^i%m? + [qAFGXngD=Me$nUqPDcOj#-#;I,1c]"jaC73.l[rDPeaQC(blVXm@]5?F2aJJ.MI0-5+k$H + LWhU'Y0hTtBQ<&0q>8c'jecDo`iC%EVbSh/DOeuiRAGHuu^-Rh)tDO0B-YB,a^?ai,_2_]; + @P&lsDn7Hhk^0u(X;KL^BF1#"hs#fpD3bpB%oI\Cf7mPf>'QZ3&BGX0\k=B^@8b36UoX?^M + a$-V,4EBUJFSA\rB/fDM:@nc/oe;AIDcH@Y3-26@olicFY>o]m06GN=X%urBLI(-b?1b$lF + n\;scBIn8>P/M>obUc.=%IL9>P3JXo)D_`LMM("D0A-IFPgPO-V3Ko:j2Rnoo@#_Z7+""Ab + StdF_6I(7ko3h7s6h(G8F5$mqd.0:Z(&CpV0pVcY`F6@JB5"pRaBh%s[kn?h@Bko[eP8^P- + h8V=mE1Gh6m"#+>8L=E_G>Fq9?%[uL($NqgYNF!YI\llA1SEkdik44r;5TY\BeR`=E;D&cl + uh^oP"S8ukuCYR(QgaN!9ho)^h7oX]PUk!`t!.#o(6I]qmUduT( + qTl$/Mr]2Zk^+i=q]'d+9R0.CW;?u2qEMK9m!QkjY^:;VqVSN(YGZ^H\9lQ)HC)JDb\;G(R + 7=BfqM2T#pV"@<^;B?F`2CUE5K>sHIJc%5r4g*=GJue]bko/jH;n_Y\#amOd!QYSr27tjT@ + 8+)aSNZYI35eD/*MA6-@D/I`RiF_a4^BlE]NNaq/b9cLRn>nf_i4hrD/qQ2j_RcWql6)(XJ + c?k:+2R^q\dDHY;5aB?bb+`;\B-rl;^"5O\LDmsUPlIkRBa5LB@1n\!K1I6[H(:Y1)OhZ&Z + 4qY0W0TDSQuJ3VrL#S[mV#D0g$&4eVr(CGo8,#J'11)1OW_kJi0e06UhNQ>R+f^(dp,)sYf + E[at.0.`#Rj3nl^_IY'F9;YU4*56>LR`9!fM<*r[5bq0<1J("fHU=@SBJN2&&uuV/dV(D9b + ppCfXk'JZ$FN@8@B!Amp.HEX`G)7)XtsiV^@pd%iIDAORqoF%mWVJ!"?T$Sg"( + =o%OULq^uOfAS?8T&Pm-@A2fubU2lY)eo_VKL?ToFHhKV,/SnD->jmMtlg`JJU^W?-Dir;5 + ef?s?MDkl-lf5ItS\du.$oJ^^cr:rV)$h46]WiR3>5n5]0nNi7@U@LL043%K@YT,e75B,C& + &3>mU3sNE[llcs/0YAtJ_/9*?%70GV9,GPZChF?p;064g`6dQQ*Q>2aRik0T9Sj3KYKW+O7 + T!]1'ZeS,E?rS&P^*SJP'e,qb&3_r/kY^,CDB7#gq,GfZMV0Y_Ga-(2T=.(_^8'?FQX!)&R + =i\9@I_'3)3@fK0[;;)s%LR1c0,=7alam0i$(pof>r,XXQ]5OY%Yoc + R;&1&W%d'Loh9N3iK@3N_"/R(oe28#2[>,M=^]jF7<($.ejORfdr\go+'3G=qe4M + UjWPUD(+$4jg6Ql$AN7qoT`-i+>C1AE2!*Cbgm7o4GhI6>)k+@JMiiqY=jC'(AD-qsRU_c"=,&W$j3*MC=tW[HB\BgMN9AMn6`'(ZSqieI\PAoe[b + 1kMJE2$"\"N"Ip2QtpgDf+[CKfkYZsn?Y\$9Mu_pu?bqM(W"COK72uEdNhoeaiYY$'t8^f28p + I*ENoOG5>!/Sb/BUUY9p\QW'pRSf]9=Dk(Gl`pm5&2r]!Ds(B^HId\ZHpHF)7msBKV^Uq"h + `ZO#XhFFKpI1Bk3oelWujmRI:G0Srd5Gib`hqN7#Na9'-G=qX.Zc7/`p&R0E%-sNiidf8Sb + .or"q:lpNI]j(O6$Mno*i&XXY\F:aB;5Q:r"j\)7H$Cs0%uu"%X?>e%Dg[2lEAub(0O^']cmSm!V7a8jgZ'@]\5 + agHFi8Db,Ma,`l`k=0bh#*JkuJA7@D]Xkgo!R2L0r0S5prI[eW80??n."u,*e\(RYPoL9m'5d@oAMZ' + 4P[sg!(]f9XU:$7RKmM?T4ea^6NcM/BZZ([jREMN)J)E1'tEPj"0Ga'/G)7<20Y1m+J&\3a + G.!LHZr9a.+V?H_tMm[#u]p4S%3^W]8"ek^=4.di+1eH)1,1eI,<^G',De01VqB'pt5.8]k + 4>6=_YIU/?B*dE)>JkRA$!9X(7n.("^DETCCQau:ntg:f!3r/DElGuY^&W2=mB4>gG-WVM4 + _,Ej99WUZ\0KLn47R]`0edX=WnW2N[B_-6Bo=jLj(Uha6EUpEOHf6?U-lGC9>25337M>^&F + Oq*h$Gs']I$K*3[!L2.1JCuuUA*-2iZ&B11f#gOdCn5:G[Run8=Z]39>.$KD3lK@Uhbn6IH + BgC:Am0iE@;Al6Y>e8\=rVHpkN+b.FkY56>BOO0jO(HXWP)GMKfH3B>)nEmI+&1I@d]MOQB + fa[TPFjT%i)1C'K4TJ"YFts%?XK]B%YN>944qII([f(X'OIDWp\]XD>-*0>W]2q00R@`W3Z + >)S+Ro+,pU)RHAsIu9jOaroUtp#q:sa=Aag`M^_RjHeOnRQ/mNUef@KrW$MeQ-"ieHgHKh1F_rt:^\CgXfdd.@-`q*^B9&kL.kb1JQ*lmCdF3L\anK$eLWm"g>aFEs>nj&YO1TK9MK(6s&1:U9MW9bLLeO@SBp-YV'NSH=H(#m.4=9NY + /hsK.lK5&VkGqNPtL>0O7C!N8tI[es2:o@U2^*o!U`q)3/TK]`G@#Xk_4tY@)!+"fe^p?-Z + U=B@<;QW--sl_O<,;5%=>0kY-ZOKIpqS%B3Y'lM;*>h'5.8J]/+mrh=f$ + :gY=H]FdDaOg$J=u-&\hu.fS:P"*F#aK;WrHbM7:lr.K.%e8M*B55j9T<7]Khn\tN0^p,n\7U44]=iCcp:O=+HS7%i]$G3Hb"L@Us!^:I[o)S + M40WQ@?1,C]BDF[mjnc`G + #P)bPOWs^=TDZ/Co)++:V%i&eBO<H`OY+54RTUcD=nINjJ%HtK$J + GkQTmB;cV%dqRP7+lM.m'!Lpn##NW5l$C%lm=^*7'QM?nHCCOohWC-YFP&MJFADjc]?2V^<1BJeSoj?NFrLB](U)%#Z,L<9lgLlN<60;pCM*HDf#btkl>War3% + sV:h[JfD$c:bi6WPO0LH;R-O?a2$ZM4#Y^lr(DW3ZUP3d)h&.m.2:qXLr + i<>;sVb2t,6TQu4-7a]l(Ln"4,:kW[jVPeH-]s3AEH!ZfOSFF")"EbDd>0Z458iK?)GuAL0 + pF+2==g2i):>c/iu]6QQ7W]]0F>9/j&[./9,\DI*+M>U0tSH'gaWo2*MWcZdEs!)GoQnk*c + \VC&`XrX4>VUa*g,P&OprOrK,Lra*b+X\&`4\9&KgQO*KgRGOq/^5mit^_2!S-dZ99C04!X + :++&W[k1-$?&8L3jO*thR!;>h^p?R%=9-#qN^dRPC!XWTB-))o*7!+%5Ccn0ln?iZQV&e,r,!=1 + ,C@7o.;aS.l26$1Qs[PZU$D=75NCa1c%c]F%nMJ;)NDj27$:?doeR"AMu>Y2A9pcF)NtCEA + qqL(@sI$;SaM3/2WKD2$5QmdN9\H#oh?=1QoL"dhaI]D]t<9.^HN>;l(XX+":'R3mr"(Zb8 + D`\JI$?,SQk+'>l:4b9tc^4&SF/Ej6jQg`uF,4eilUo7&:=XZnVf5#Od6 + 3E-qI;l`8"8O&GH..h""8=B<]`4/N!-6r+DuB^`! + m/_eNJ!,N`"8&Gr_)mlU'Ip*nM(Jl_\B?e-1EDUnQr/r]*,@2r\7gkE5*"T2%:+G9G'&iO* + _FWo1cGB'5;LR:%o.&.gC+]"]8nF&GYjXT28BL:mCVKPiY[TaU?-%-ZV1s/feVchDDb@8@8G.Zg/T@kF^l+3Rof* + Ro!L7hB*)6PtbG`>?+MDjAg)iE2sI'%i.%5>89ir7gr,aPc9`7Q#HOkee(MMIc_?AajSm$< + 3Is8I_=5YkETajciFla#266O>tlDAYe82p&.[nkuFbhAYD3a6EG/,_'K15J2:6()`q]!6kg6/*E=$4-O&Y + h93)?qZ[YJFZUt[bN>Oa"Teh7euKk:YKCK@2@[^06435SJ>mrlffeW"BFqc\1+;,DB$Q)=G + EYtoQ3Ap2F%QBc,A_.g?7AJY($[c(ILQZ7-=E->`+(Ah-5VYlNeCc + SftO=&!7M5@q:bEYeUQQAnTs!FHXCE7LX^'fC%KXKhEupG\dNGmkj4H.U9e(38hD7; + b&jIC@EnQd4sLj_^@%F>00%X]];FWI+-jI;a`J^>XBp_PEfO9GV[pDg3bP%W + K=A<-\eSt0(%JX^ZQEQ*']7sCjVe]Xi;troI+DN,*\Shheg#d7drH<7Qa5R''*mLY/YT(`pjo" + (X@d%9WtU3-Nhi:Q[0\O``!E=3E5JNk[RsnG!<4\>PD^rogI6`=,.cosJ^dq%nD:Fe;Dh"PuaMZGtrK!B79,RS+lYb`_tFUVk)La];GCC)76mjPE8q + m_9dCjFfgn=o7WP+Qs':'H+)%e1P%I2mTDuK[VE]3*LZ__ST)]7b:'lcmtsiiU6t[sH#Uq% + Q'%-iI\dtGN_VWHer@O)&V1c5f6*#gI>ihNNOie03aJU!DbA[8@TSI`Wed$YClYq>;VK#X^=q@VM;kc,c!:!@F3LV'o[_`B">r + I87V!4KGQ&l=X:&;\'HJnm+k&EH5TN^*;ohnE'T*#0bEl#?26L + 5'#fBV:2Q@YlM3JGI9'Lp=d!Y_eBpKpt,P*$g7Y$@N/a_<;?F4:$a4Cl,*lM>TViS5I19RD + Yt._;)H + :gptYA-cUO8a,GAkI(dW!afp/,_!#$Z*<^WbpjQn7b=I)<4P4hiK?>TgK\ZmRr9;UUXjOe; + I!l[Lg_n+ZLJ+Rad6/%lB>;g+Hd=h;clCl_>l9lBWRkQ$@?daa'b'bq`*)k.qdE_[?f3P%sa)/WJ3$0'<'NW+lqhAf@g'B]+#jU<6k^3SqB + PNs9@EaEnLfc$'gVrrN@L7X+`I^7qH>O7rDSXtd8]PN_c11F?72 + .%6'9OCMa$A-3809SYZpuMY>P(-X1K18<+'nHP5reJ65(?-jEf'DZq*&h_pN0^5d=:rK.JT + -)p2j%&5?IC(g%W6a83^N)E_H7+^[tF36Sg/YF8nd65=0GQd2&`lS]24ASD%^VD!mbSi=tPgdD8+nI\D:UlMD^^q?`[V1(-CoP[= + >16B:(e]qY,NXbN_)*D@2/T_d_o@S@3>ZKZRYBf:*4F)kOoX1&>Z=ZP<_p6i'9T9ZG5Cq'4(5q4`C:Yu""EM$uEQU9`Y + *(&bSk)M]MR=YO\c3eTCJs7?+OZ/#,=q-BP:[sK'W!M,P9SI(b0qod1!MJld'lP%'Z>l$B[ + !A$:@bc\Jkjc_krm0FK`aR_F;3f+:Qs]?euKj%.J&SNB + SD'ZCqZ;p2j#<)cj+rDcg\btujsad4J$L*H=VP<2C+"=-YXU0@mN7=('W + ;"a=;+2>*"pf2c`Q7bDgbX_M%'Q'H7?eg4I5>P#dg?r2!R=`R`U7Ak7RQ=[O0h6md=A6j9, + c"u%A[@p+FfA1dmg@dD]J)Ahk$\$Znc51-JQ8R]Ii:j@qG?\-,*I_@]N[8`#=4QDr<;@k0N + SkP[/U?(&AefjU3,VNQ@2['BM<1%`Dj4CIG#b*q225Bf@J=A&HtSkMNM"[B:5+hp3c8kY;` + ;X.WT-#lI;rLo:+<;\3'NlQBcADfr^?>@SDn5?O[dBFM):$dU?(>5.`ng0tbqd=sCro#=o'13QFI_o#1p+H(;`MskC>mW + `o%T"Do^],J<7uP>qqfOQ4H\.Cno&rLE1M3,ccd7aA)gf77#rg@?!!NTp`;RmjKBVkLJ3!M + a.T8NH-_c,>s>s&]?u%sI_"L1B8Ii2*_31Se"8JIK7,o>/bZiTh"RDHo7(].YeV'@ojeD_heC,U>1]hZ'n&#(d:il,[F-Lr]EN$''l=RPCG0u3'qmGm9g%WFtinh6^70Z + j4'o1&tTpe\Q'j1**.Cu@J.L*8MF[#23lSo<6-qkk@PCW@^&&36[L(1^0Gl?@0aNQBgXf7\ + ENC2b(@>6E&[QTX7 + m`c]k%pVqhfX1jOc$C%XV574hor$@o/@ktNUaD4WR2O\WsXs(A[SQ?6/Y<#3)?Kr$YQSMke[>jGBiM):4p:`?e>WpNid$R2:nf]P_<(nibm(([dGJgc*!)?cd;R/?#FeYQ*HoB;JIW]mFCKFe)#5sa2)(&Xn/ + 4tDYHfH4X@/3TY4F8]O6%;,%T55Y:4(!?hl:$.-p`>cjC7i9+M4?4W)#^.(.%[>n/>0&&FJ + t"%*u4LgW%+_me%WVL.`r+JoQPGOgi(BmY^FNEX;@lP?SW3ut5R.&Ro2$!Q[G)l11J__9a` + 8Rb%>,4s4$GM`-Cr'-6R$4QTrbZY[&E`^:gaq[4fU + +,bh9U1C`F7-o2Bq%],nOXI:l.?#"-(ET,;=T:T(#^KhBlcChu6bX_7XJcLU"7-S(SKYJ[# + ,ZTf'Al+%MrUi`'o[IR!O>;W4KgV#]!a!T(>3%ieah)c?7APH"B1PV.?GO%#"NA@fK`f7pk + Md(0.:W0Zm'[PBt0'WY'`m\_mXB59Fiu2dJp<>ha&pk$C#Y1]N-G7E"'6[qm7F&@PVP3qfN + 4rRfE&hg-gQp/q@nkk$H7"Zp>[bcgP')&Yf"L=R"/k6uPEJqI:[:V'X6cjcZScqrbFO9ZFK + QR.G^bcQS;Xau%P*RL^.$`mf5tW\e]^#X''T]h7TMlK\pNScC)j9gA;A1\HN(,9g'=lsC]W + Jia!JTn,H^RoWS(Z(E/7b>g3='bao#@NXE/%'kg&;RqrI8/>*G7uSXlC#Y,Snj_hc-!gVE?4>V\)?oh__AXIZ26YXjRGC"P[dI+ + r6q-DE_]ob^:#KgGaI%E^"9`>3s+gD/>foBH*2]?V.4p#69:ql2E0n)0-WX$i%7.gH7;F]=]E%_i-u^rPEnN_@u(L'Cri+&\T^l2Og\T,C.5L_mSOl + \T?po]4SF6kpa5R60p'i6j5X,do*HS)Qq-]/RV_bsn4 + m^3lHhFE"qbRn<7;ao_9/'3d7L@O6r``P]bbHdKo6G=OZtW(`[:A5bNN!CW^7aOA6uK?6WZ + F?ODZ\C?n>e71[PaKW=Y4*6n0,d+_SYI6h&QjZqfMk\3i"[USURUU)+>6$RoG<^bY6qj+B, + TsI!+g?VHXK4n7Zs?>K\]YDV/_m-Z[*5bC91&Kebe+au.mQ8YE3U\!9euZ@XJ!a9Vo%0<8A + (,,bg+ADek02Yc$[.3HlONu:-f#g9jDs9bPn]`=ds3KbA=.NI+qL>:#)VP7$,)LLoc + 979X0/k**57%CoFlb5PaB\_h1J7oIfb;a=<7d<"-t)`uSFXYl_$=R1k^=PnA!+&=AUm./FO + GqiIWR&XQW9.!g$]sHudErcYbo7+_(XVh1;FN!2#Y)Te2:*',uN2E<)l(]#i7Ar0k[HW.=V;b[qP,qi."I+)ALd;;-MXT6u7- + dsqXdcCYaq%QXg.G)6mdHrmCNJ(3K3`Z-5;MBm&2'l@aNf3"Ydl!68ONZ&=P1]F>=7pjcjZ + _?dQIqaaf@-t!*t`XZ=C%M$h47KpQe;P0f;4#Mje^D5Leu&r=nS + (_[E&8@6>42le&ZC + >8;4auEK*]R8B\qB/g?K;=l)'Kh-:SA/c2M"':6WP_G.*Wg^M(_@IUF!aBUc*>cl'ke4E4- + MP[BP[doU:r5-:%NA(7R-3_j[(!9/AfI^=E/1o+;l<@O?d)etn?$`P&]aka$Xh7TsB6 + U8PXi8%DYh3H)T*R.k&/7#P)2>u@Jeua#[FN"_!A.eM1nESu/ak80LHKtLWdGa\^%o'`E8Tqih-?@T%I0uOlem + d#h4<_8Sc<#UiS_-F0J2@]Ei`Wed`2FFi)TR0AcCWCM-qXT?S2H+(%,H^'rk9oh$+U"N&op + 6C12Ppge$\aAas#K(#P2#>V)(Ejnn!p%:@h#&iB2#''WW.9A=m+gSK#-9hErHBYRMleD#^2 + %PGh_0?L:g8VHHTV@c8AG=NXI90D^f;dR[)hp">@iClm9:(UJO#"dTlc1U""o]fiF;U$cPc + >9%FKMKe0p94tW?lhAd%QhYA+2g8qj?ug;UgN!n,u'8Ec()7%"?,>1Qq?o.A6qN3c,DS'U> + J).^>ol!1b$U9B0RZ(:1VU\<6f&c.HPYf9GE\#)qdBum7>10`'hgEQ:k9Ve73pZj,RO/[Sl + 1&Nb(o)k"F'2j6tf95NAPIa,D,%XK(Ae1c' + AqjScCmIj:pdA+O5c(n7;BaXM.H7F\@^WdV`.(RZFuW2kikmcjU3+G11-#hVj.:BQ^/3rMG + KOM_BXPe@Ai").BBJ&4?Y$NRen&DV53Bk!^um5El@+ZTD"q=+IqIgLBQW;"e%Y0,I7fg5lm@`d#.SG$\SC! + :ChtVfZ^A7"Jq(@08T?Mm.5L3@=o9'g`#jCZKpretZhC2C7m9kI8cL4sD\ + @dVaOj'L3)SI!pqUYlT + U/A$>=0D[W&,UE/`'/j5FjHhrTT;mV@_AZu>8k&aQ%l[19fdhV7H7!Q84RmZ(Oc/B6e#2XV + (V7eCl=7cQD`Zu2bKD7&B.^F!q2+)KgFm;r#B8kHOo]h':O63e3AB&%B51,albERup_:>5, + BV"3C76XLgImb)U8.D;lCCb3Kd1-+aZ*:poP]C*p_pAm0i\+4@uAfc>@`a/3i+7`bJn\59K + f'`'_KC9!_B9XA%58IjT5k2$DingloD[1?$?uj:CoJ[M*k>Gh@H3c\\OsqH)1Oi1kCU`0(_DfdA! + F,uOZ-]7^'9_+4Hk!*_YYC?&WVY\=]E@b(,"/50"<-Y=%o\Yr1O-4?3ZehSRBrpr6IDdYdc + _dJD/-r8C,C/WIgpp,lTgJIF%"a-fuo)k9sf@/B9pQ8*VtXjkZj$I.u7jXjf0IG#o*CRY=$)[@'P+#r/V_aLcAQ7rs?H#L5dq!MK"a6Y"S(MPCq#k`G;OLK9EN96eX` + 0k,-l.ZASr#q1>H`.\Pd7c4LKCUDS2H?O2d/^o?+38EFKqcs + 2fmh7*U.t.(H(`2hUeV"JDH5!N7Tuq_j'5\G89dti)k-TL>S@&,Ca/>^)qQ.D7Y:X@!MZ*H + !U0Y.?WZ#k!=d_349]h>e*m6R,iNF>EW<tRO4B,m5`H<[ccB$Xep!)`c&HSRPs + uPBN`@LR;EmTVn-aBQLUSc]@PN4Dq]sI`c(Xe'?0J=VXq$0I#fqLmeM%da`(M2+2[W>%l_^ + P>B`rSFIP3fcKguB*N=#6D[FSQqd2eEpO-A;fleCfIGXYR%ggR(r\hsZB"YTm`pWQt>HkHX + dtHXW)NN(OfDZHS[J)M_n)3UT$hiO]:(d=\c;4#]J&]Iq]uTdAN + X9\cLFl8iQc*C+S-4?1on>Vq_#n(RY^Y_X"=WCJ_4TKa28s#1);$58@&tZ)0D5s?BFb7(*# + 2]hKlEQ'!<$$["G2`,"2TUi#iN&kLTI6lrYNA+FU[8-jG3 + 5n+;-)U=!?W)LX7q-`436\U0L`RnU<$ffQ.1)Cd!XFJap]-`b`pW,`(u".)9KW#bu3BNTPf + ^6AX2oj;\PfnK&4[W=!\jlunB8G!*k_d/mcCaFfGbpW'4D+X3._O:e'U6'rAui%.Wfd!@[k + .2Gro/=;Xl^+W#*pBm`JO-\.1<0p_M%4(RJO7J$35Z3^q@luB10reC!8R!@57)+a;C/Mskq + ]hm.Lm[d#8]F=X2'kB'PYb[E93J;IhV?;/1I_gK=c5>LHS/cn= + ERUC<_%X4SP<1g1-&6/L?S,H2`V`oUJ$adM+f&QK?p3!dM'AhmrS9oNjW+G-i0EdDso)S=L + L><,'T=GC)ba.pA`*Xklq?5k?ELXJ>2MRQPmmi[K4gV3Kf(e(:?]Sg>k\PS*!'MM1">,G;" + MjkSAN:K$HM0rEIGP>[jFh5[6KWO-QA;($o`W\m/CoNH^oRPNr=/R3W.uY'#o0f?4,"W%C-8Fo%EU.R`p0AV#+AL7d')K44!p^Tt:G]/cnmAgd0fH@Q'F& + n<_2"#Zl6De^J]p!ALr;0\O_[%l@g[eGV5McOc)esGXHJ)o:,@-BXEd/s2^&/83$$B45dH. + OMkmDtmjb%Ar>r3kdBd%#0&s-[Gl)ro"hi4#*.l/t-.?8'4kmi(-.OY:\Xo>T@C(hB^Z&MflZb?3X3aP9jDV05#4'&shkMnbU!IRVE*h + ]_(p*BpYHq0N>*e7>)K!9!hpc1tuR:$fujT%Z\`f(SmQq6Fc&*/T,7)U[dg8j_ndPdIuSQ0 + D0OVQD29e!`p*Ber8SFP`A#\q&[Q%8j*I$L?1[@#O:J7B:QsXjY.+;A"n/Tlj\O[(<;@lj[ + 7(oenYY>0gF>/X*Fsp4(.:]!03Ge9`uXn#^@L[r0[Nq_rqA9s_ZZ*n9-f_g,tP@BoNE + #N5KkIW6t:`-B#HiZ&Jgm_13c3;0f$rf>R?f.u]`#GlF1_qI2%A)G1U3l>gKm%*spHn^MqJV[R- + DVZM?Su(e-O-9lAD>46>@Sk?]LgAX6Ia"NASXG@Hd14j%4?( + "ln/UQpF/9OkH(?YrVs"XRJYj1%uQF]hC@Ag?8YH/Xh@B)AGIRp@Jd6ho<9KKp1R[q>HJ!O + I9akhT5QdhCQBu14oG/kN\l2lUjG:Dl2._ApO$oMAT(=0P(cC)X>\CcnGSD]s(cMn%lF*$% + )D=VrpSYA@ef^OD#q]u!H5dP&-VSY+Lbi.!&#o(:V8+&%03Rn!jAj'0A?N2\H$=)"E6'qn4 + a(J;"]oL/C8"CWDs!M@-eEBbqKk/07a3V`rY[P"/9(_+Voe=gb/JOO*57.^'r2Ekf-luu]qRTN:O(c]KOI"'E/G+PC$nu6#K3"@Z + +VAY$rD-Dm"-4+ndgKsJdncX(0eWJTFUHL9$OL>ud9-\Cd0D2QR,_k90l$K%I2$Z8PHcnE/ + @N*oAZsn\5cpV%&O*(iV&IOj=h?cPd>S'e$s<@\,Js5o[*1)_q")Dih_13>_3XqCk\]X;Mmga!! + 2E&[1:=a1WCRhTi3P(,<1Q:mDnKYnN8m*RZ)CafcpE.3pX$p@3$U1#!pn:r:W-+etAJZ.0? + T)'X']*)]7rZ>Cto_]H(mq(Y;V8LGj(E?EVS*cWn-Z0_,c1rJhA&E:@K/GC*Fk4hd$aH@>i + Z6Eikr-o?^`Njg.8\ju!gqFCnO:h26nbXZ3kp:?5O&4RF0nCZ,9dt(-.Bib#j'NJj'dYV<+ + S+D8nguC*h%qj[r@qX"d=!SYB-Hj]'b[&Sd\/G%r>#[>1G^H`Ecj&,)'CYr$LFN4ne!1RNA + 5GE0bX@99T:H!!u\Eq1f+',P*I.eX!eKg/s:,QOe"1gf-rI42f^o4Ote(7I42FW1,CX)'&a + sQ)`JF90sb:DdlSFf5m>_?1@kN&o'I67@i8,e4-4SFdmlIJ9.0=,,L\e:133@-X#RC*'sY@ + AbQBg<5ohcE#SZMaPOCPrAN03.2R>b8bcNf[NAT%"2q(\a;[5B?T0*d^1"45iPLi,VUF=G0 + I8[/lj$>1Mm43/Nccg;#&,e-q.!u-i%rUh5_@Z1XT^1X8\5AY]1]]C3"WV,\ag,h5P4'ks. + k),*2=lkUPQ+2&Y;^L>"dFp!oU,H\Db3p'4d.f>bsa]nFWlt]#P8`u<#Ij+*BiV/4-ZX/1i + l61Y=Fe'9XMD11"O30dQBPhS@C4=PC + G\@"gmeOrZDV)OZObdB`#.N)-KX&F,:9PgCD2/?/KD^Eh/3E-Gc;WCb6$!C+M)O-dG1C[Hn + fi&J?=&i[.kd^F&4['<+[-oG4OLl"Nr_W5no9<$=_ac8=2_"nMV*Lc?3Lf)dem8mI$0IQ765P`o&KR@l>\&2A9Q.-",:]@$ + VsI()LKs94TqB@eNB'p((^,q-l6bB$RAfQ5sR\@qIVXAN!h((0=nP+(mK=B(gpe<\7plH"e + #jAQGDjQC2@9I;$'?AepkMG(43aYA!W"Alan+]u_TjUp[DYFq6F(A3Ho[oG + ;k"qQ[sA4K6W`DsEa* + \]FHrnL>(XIM2c$br-ICIgVfAh;r`3_IZTGM3!"\VqP8=jKD95:=EfLds+i#&L3QjR3)tb/6$Ggh + Lhe;dpl1/FrJ@FbM-*?!3),+lia=aaG)A/8\:oNkqi*(IGF6d8Wu/%Mfo@PlZ2!:'\;uS.D + 2S,1M>39nE="+n'jdZ)>mqM?BcTUD!Khti[2%RAP.=#W>0uib%OhF?ZHHSInRP]/FVdhof* + -4S4*+I:FVc3@\N=YR:>9s`PaP$^[Ztc6=)5?4FP0*(fjA6U$'pmrEu.31=]ol*8TOPaQ5O + sY=\Y:Wl^9bqQT$F\q1kA`A!iS>R+\+"f!Ul*VfZ(2C"YY8\US[]!LQn^PW>/$)-*0WELf# + 2RMNB%RF.L,fpoTcSU%i<\`'+QMjtZ5ReAn0\auCnX.)-0SsfUs)?lO3GFSDTFIC+A(8IJ4 + #FHD?TNOQig&%!/EKrRBS2q7L[j.XD34.f?FTY0<I + cI];k>F,^GT3$8sJRF%.-NlV,Jpj=;9'qeIrU=9rlfA./>YtoZaJEd7`LsX.&9CHGHD + [u/bN=MHI8^TEMq9`8%T)0qY.-I$!/j<=*fS'q[Fr.jVZOC'AF.2%:?Ae"0U1fZI8I=gI\N + 9jf^OcYo:#6Ra\ZK*8An'1B$1EXSjmU=jlJ[*cRmni+-,%pY9QV + $(-UgW!E=u.(O84&2P8C1OgW&(]\Zl_*Y;nPQ:]eYY^H`9,392 + jS@\(ioI<_p4YM7br:kZ(na4/&R>/X>,t"C2Q8PE@WK%D@r6.(eZ[]A^ + _V9t>-$%^IB]e)a7"^Shm6^!tjXJgf-=A]\/QY&ipGPrlK5PrrL1PN7PM9XK_bhVMco=(g-dDpMabZhR%P*j$)o>C-Q + `g*)kqUJoc'/Q)rbI[GjI30o.RmPmR?SUN^1a0Am=#i=&\pY18r=nl$VU8YtW>mQB;G4lsM + 8rLIdQAV_%.?QhW%&'O^>o6"1gd)koqg^q%lMt=fd7k(rt#hU_!?Eb4]s?-Bs6$oX1N#c]X + QBA\ZD6r_V=n3dW*?;+0iMcdM&=T'IC92HeSC#]N'j1@)naZW5)Dc9m=kK3T+`E`YXr<_;-Y>'9qi#PgrSd/8e+le# + !iB?#*N:"(.bKU?g>5_h_I)4XQ5LR4)cb2KF]:1q-)(M.h=hQcFr13!l/<)i;j#ltD1Eenc + j/Y@Zi*A#"ob$@N38@e$l+3Ls?8*sZV+t7P\%YYur;Y7f=m@"thgG1\h,31Dag)tq>WY1;& + BKH.kMDf8jPFgg*PmhDp+,N]>iWH3?%qbuEMc,!/0!'$8b\C0s4PiZ_&dj1W$13LGHGi9]Q + K@kE"438]12]cjJYWVYN`P;cOE^)3P7dOS2.rWVm:Vu`B1m>0H%*$\),iohiIF5^%prSkJn + Z;f"@%NY[CDB_6Uce$iaA@ebA<,[/dsq$JSclr1 + Hn*C"7#p2XogU$N+,t";I`1LND+"tXKNK@LYqn.Oa:o9GKZh+4]!!3-#It/Y<3$\D,bVMOn + &D2([*>*rj@M!4C&h*m7`oBqK4;pF$M8Z3O31MHE'o#1&Z$\+'_W*BhC + r/1rTh+>XqCLnN/!3W)1tiA`77O#rUp3Lmp+oI9dc".d738F+Us`t"RK[Rp:lj8lF.,5VPs + Vf\.Ih`WL2m9sas`S!9NniTQ=)1$lE.dW'X$"5ep34l!H>tYjHXJo6A'V@fg#7Y^(2:T@,4>X1HmH>EN@_p1-#Z + ]>H+4NjCpZ8Q>73CPKu)">sF3jiU?V+Ib[[OdrbCa]H6iTK"L(;>Wa)jF8h.`02(s6]eCt4 + r?q&e!5Uqi,OYn$:im-:6'/Gfp-J0%gAsSNMI-P%bG734681Lk%)_Lt7.WYu9K2bI"Z/Nh2h[-]VDF)9AkajZ3`3`.RO(F%,r1pn + &q;I(A79lQWq5u2KBKeuWRe7fI\[$HUCpKV($"We!3pA<0?RC:XU#\Bi<[uI>peJFj0qg6<#6CEEVt: + QZcN>V4B9kPj9a.V(G#kiNu:QfXs:

qL/Ud9+0XqdPQ/ITo-G6]%Xq:"P(V@^qXU:M-^ + p:JfYj:7L9?P.ZGkO4F+r9#4e?/.n!q#(5Rr=S&9+tTsep(t1R:$h`*I]bhNb50#3OW@gB. + _,WO0dMO8Z$);IZot+HBTkWB"E]rU9lr`4)O%=r`,u_)X\E3CKg;ZZ/1n7_34*<:6s7@]5C + mA27kc*mHdo/Ha<'2"b4XSg8_E^(:=mebg:nZ$/_e1BdaqbhJ_Fr> + *hUgN]cSulpNk/`NI&;d+l`&U(b0L>e)a57%C$l4IlJe#UUdf + ps?oRno1&O6U$$"3BWKlEn*6O4tD+4N$#&?5[rLgpab6p?B&areFoGn"3;6&./>,/1"4"la + >bK.q<]6YIJS+d=pAd*HpqI#ATZ2T5D%,,:rZN7%Vo`CV-h,]o321+jkA)%@p#e8(!u + >"hFh'-nj!UQTT%6:1K8*FttJQ4g2e8a0"aj=G;90u@&7=@jtgUp?=bC0\]F9-pF9Y)s??> + YGHZ11je;M/rGj9W-lB)mL>;XA"eI2=h!?M]sIf7-:n/Wkd6a7kJe(lGL0Pg^%kX&V?F?]L + Er`fOWn`'>RO,3UY$M5@0+J]MTN\i3oj6:[tT9N6>3k(GD=4J4cFErkjpUO()6e%oRM1\Sr"%F: + '$ZOSZMRBp\p)ZX2C%T[&;$V2I.E)4`;m!XZpCc./H:VL%3gs(6ReNbO=Y4a'maerq9P['a + S+UrP3nA"=X0!/ZUR`H#VXlEF)S?WsH%F*B1`V,mI&8aFQ:Gnr0?eOQH=X6"Q#[ + $nF*l,d#l$]M5(G-]W?F&Zoi>I/Js^XNH0?Yl8TZ0sZL=m&"ZCdikj2+"O_R\ssR9c#XP'! + 4=/3-6`X]sY:\hV$'_E!o[XUnh1pgfjAd/B(M[QSRi$$\M#%/Xj5R1;2Lj:NgP?h0bE4B#t + g8-m4a$^!ZO'bIJbpVN^ql1'k*e2Anm8dNr'QDt + (-KLEqDmNYJVrOeo8E@X)IC'T1%H)*a14\LjLce%0Fg.^ESDMX/9;`8[&1rJB-HBLB:-!cN + lfsu,NF/+Og+gC`7\'-j@mm`nbu+nR@>>\%*P3FXr,DDlRYOh".uD*JC+-#0Z2SF>>(D=2C + A8"SB:8N+'t1=\k&80I5b!0l%LTEai0cal[UA]et;^5rS+b(2^_AKdJZZ]s"fm<>,(_)&&p(jjc)[.MQ*OguMhV$Z\"(^d + EJPtXH#i&WkEUJgU](TaM0Lb_YDOoOq(TY]/`;aN=c,%'ck3Uq/6Ybs^YI1f^qehml*Uc`" + ]m)`pi$UU9mN*Ih2h'gWgF$.n%LL*unj;&D1O!iq)oHm32V@*nIIV2HYfheFJK,2LE*cbLq + )YS:76?e+:1qJT"575>bDL2O=i<4j3TXLeT(Gd']=E[dl!4gSEp_c5qF9?%r7?k??5:C>f/ + ;W:"/kLf[F'=Ze`cnkQh.q>fK'ftm!A\goq%M`\ABf_]l17Hm_dTO#>3q0Q^;g]Ok`$*;=5EauPA&7r2@GH58DBPB+e?M?t3iaR$T(BP + N;O]78B"k1KQ`,uAj!VUPcbK5.j,%n1SaaqJcXL;1(_^ + Vfb/B^3;nren,_Mn7*246F2nN5!2$^TCO?[)-nM5[^2#1^cK8,aec]_:1/)6kD\D%79p"5_KcC6o%"i1I38#Mid! + bF%X=Y2]0au5"$X2]K./d-c2R:6KAnHbSNRDbJ.!)55ZjgnCg$&qQKtaMEBZXP3j\*M&epo + 00@n$agN#fG.Wr:^#IBsUJVlh;Q/=LVS#1148m"=n3\r%Sq?%+_T`O;7#gGs);r*)X7euH2 + @e3*WESl3_1T:%Vo@^u$liWagg%bh@@caoXlH4I<(F^'+"a5X/`GbO'!K)uBc,&U`iFM//1 + j/?f;j!bR)7/Yj;5`XnsTlV$#o(I!I`!Sm)N"m/<],8`*GRf;(NT;%-1O-S6`2!JF/bCg8\B8?XF2ON + Kh>mJX,MtZ'TXkmK/[U%8W7W2<37beAu\7saWjR%&s:<.508J1`Y&,;XJ3jPU)p+Lb64E;g + j?i<]#CA\9>dp3X?i3fA]Tgb-j7=U"?]?D\?>JA4aZ\39(\&tJgSj-7'YFYRFfC*nO3"DS? + #L9qN/3$dl&H+(kgI7>h;K)W@mPgX1ZrQ%&b2"P=WoO]2[KWA<*T&Yd\G8]9M'nCmi;5R]5 + %j9WW&%<5hS#FY8U.\=CUT*4N*k>Ioco#]uV/AATk(DPmn]W^OQkOp4Y>,e>8h9/M(Ago\b + !LbZKMCOOI"IJl!/Ea:cS?8smn?j2r?R:)r!7 + 9T%2]]2&Qh93h0['ZcWC"0NX'crCLu*;!$[od9%_R2hchqOl4M\PXX]:'CE\N2fY.N^c_I/ + :u\S1"FU/l;;+'cTIEig=O^DYL@V2;?Q;a'f*iuh,;c[d8]S_KO) + k42pmUL;4NcrXXQl5,K2eGaiqr09[+"#eu(?$`9^1B3r[(ieLgtu9altZJVHTlhT\r8eQC? + uSH@0?37B/l<"0&Zog2AI8l;SH;rhRkSOZ5!4jM8]:1Z'-XXgD7?HseEdq%dn"X?o^3Dn,BPM\ + k5[1b=,Z;/>1SLlkuXHX0!mI[4G<8GZMbBfEF1b71dr5IonPue"qLj]h(tq>u>G,`TZ"-NI + o1c6dQgA;Pc_+eE9B8`Ddj;8Te1gD.cusnB*V9ejQTB?$HsAOkI,_eToI4_qapNeWc_14h82sC.^;(gVdpW4 + PAF=W*+PrM\X[oN.Y:?bYEig?-JPhIGPA)e^Bt"b9_>a7H)t^[73;khEuQaD/d-'`M@NNnOBk?DK(,-0r]jf#k+C;HSb^J=H=" + !sfCdMB2:TroO.EN`>+Os9*6DOb\_[bMe4mrCd&S7Q*0>?3#_?e+[-XZ)c + ?3oH9UhaS15rU=+KpKd1]?hBH=?-;#Q!RR\LhOYA9L&TDXq-Q#U=K.Ou"rH1B(/9US@K`+X + [K'c9`8?"F@H@5*V7bhJlq>jmY>$"a>RKc@6fTQ[i4Ro(^*Ybu%_W#Cq` + &oAF1c`2?\5!d!^tf;\SiPE23l8B?=?$^%PohFjI62]HRg\B6#TkY<*`L0EdFL?>!?k`,#nD2;d&B%*VpB[2%?Q;?)g?G*ZgEA*6m=eg?et###JWkhG2n>P1lnrhH!h`8_8$>Q1AO$&CB96SfAZYlbFWRi + jO?W3A'=1X;sT_HWm!2^W^N1`ibSdhuot3AEk(1Zl!M;I6[V[-N#]V;jQ$RV$>M?u$OalNX + KW;_#+`%dVk(l`1h<)_Z";Yj;-9lXMb.?F+Gm68K+hlk;d%m`92;Ztm[nTba_Ff#=D5X6\' + @D!&RE(:*$G6[Pl#&on6n= + L!UV[N"'%.LG0nAc#Xeu`hoYNd1rC3@F("]8800AJ)5EBTCP-,no"(X7TU3o6%\lcD4u_*" + dBA2pIAo?BAOD!71PM2$RDS'F-kP;aj1nh$&3[ii8ZO)cPIEPo)q-RD,$>M/R`E^S7Eh^N8 + GO@FTH4:AcAc=1hLS+>mmErL4Q%>"(o.m0lQg8o1NG:N/Z001a0o7%j'O#"6>3P.b/EP*L. + 7mUWih.U^k9t)M@^Fr&'Emak^F?^dd(FA^;in8N23r?]hVE/gs4S0.IoZ&Or2a?rt)I_5a< + UW%k?U/V42t]('o2dhlZd!L!K5gnJF + u:QFmh,""f7,I=*Ae)p4loE(JXV$@CUL4LLKj/1j3FDR/(/&!*TR'9SU8]"r0A,rVp5*g]2JZhW3d"Z?`_rtch^qk>@pq6GHOtRc=tn7?MD + NL-dc1S)gS`4HWS>^rJZ(Fe4PdoqtIIGkJ7#A[X'OSq@Yt,jH57s's@5=3,Q5^g-a/-'JH + nm9%Pfk9"R;D:[/s&]!Z+;4SI5dE`kn@5'G$,!+9'A'F']LuAQqOCL3onGS7&SG1nqtA?X% + n[Ok>]T7RPQ^i=Qn8h"a8p5Vq>k8$G@e2IC@u[dV4@R-1MRlW#FmRC8(KSI_o_L]dB3C^akAE5(Sm)<$X$Z)jlTNB",h-T%s4Y0DlNn1cTn9`VP\4,3(5&"7tDZ&NgDbI2pfM$HTku2+9"@0+;h6f<.K94&`L$)\Uef1KacT(6Umnc>N"n_Gc[. + E37DDX]Z$!2U08Of1g)YDl5N%q".Sq>ut2u2M;"jk2[_-0Q6,iS:DQ?ql/V\jLW+7sIET= + J[e-0,nLmd'cFNl.gILZg2T<7BQR;0``>DSgV/)QA2/_E"SUYX%2eJO!mlC\2A5R,p6.sLA + K5lfVRr1"Ojdg;lYK_rQ*J`24rKh]CRN4FHHVKc@/_,g)hOCcqC](P$=,t*>)^&tD)+1*Adb,SG)L\^_j! + ,nHJY#fX6k4odWQ+_?T:9bODZ/$C3!BAS)Y\U(q@B@aK_6?qV,WB_m)'";$CaC@G41.o6Bg + 'TNn_R/YO/L(\%;OsU;1:MNV^P[K)Q\;qM;Ap\0iZ]'OAX2LC]XW^3Hsc@Up@%NtnTY'#_5 + O,"$sDQ38sr>61cP#Y$(cqj+T\?uV[J^A!H!,M[/gneNi:Lh<,%,"HV;47:/t&Gof/o0I&"q]Qd#; + 9:1u3lUBb[:;u,`DOUV;Ge>A)P$?J;V2";oW%[g$0=\WF<2lP72VUKYHA8a8T& + 83L1QPp1L^)Sn3Y*EHX7$Cb#;ik)2F+IUZ\Q<$$"cDrfqTiHuXe_6^"lfDlXFj@5@2$ZUP- + $$6=%RsQi,@@YD7RDY63*2^[Td>KqC3<3W0"L?Vdf1O&:^f"MrXjP@0`F0C;\^3;(#=o6*`jc0V4V^B^ + G3-d6^c1o,"*s,O0m==[A$GKV/rm4lSL2W(Y]=<%lT^28sE!@`.QV+;equ_lG7O5[WRgEN9 + 6\OpAQbh&[*9%BTIPI*W_O1?/hQ0;,DcT9H(oJM04AUtm-2b`KF!ouVQ[LUE!nuPe$l'QA;]M8V!fo'OH>?G3\=hbDrhBV9e+J + JPge\f\pI:(gHS9j/KPOONaT(;F=^%"7pW<4Ej5j"r,"j5sc4eM]jiY?0NW);eH86Z+4X[5 + ;n:Ptkh19Hl09ee0X3LHY7H==GVtAithKr%0k<6;\oc@>sHdbdXrXZO250r6cmuQo8#Klf` + )sVaAL[9Ic](t5bm*qZ(npSj>r);MAq7i'erbpWhIfJR/J%+m]GM<"&L\Lg5L%@FQq#8#%q + #0ZQrK#>+009+$XSNIV!)L!$O$4"Ro\$Y[IYg(BlKo!cUj9OE1U;M"WN6!Y? + X_n%At1@g2@dp[F4Fn;@26K)cI<$1NKJd&dNaP6S7l#4PIm:j!1#UC<6T$uf>I:q7#(VZ6- + "eH[`:&/%-F6OhE,$W,F^d(9=?lNkl+$rG[0%p8Mh>$hi;$P5B-E.n-#fa7.n!0Ff%Y_W'TjID& + S2<3Ba54f'eri*d;'E#>nXDj%+0V5n0&;sMZaW='N$Y&E2OL,Ii5I>'bR\WEMWMP6P3.g)f + ^-7&W%H(P8TKY(br-#0uXPu],`WJ((m;]Z&ogLFWOCC)0+gO&PF1-N?;$B(ibf]dK:K[!>A + bml3;T + MbTKeJ,Uu-ZMf`f(b-F\JD(?mGcG]%.0L"Jh-12W;`R<7qEpld(k#-M,Nsa^+J:rkl.:ebo + Y$sW?)'kAgn-ua.X4Z9GfdQ6Vc:8Z&P*mR$J6C$bh,:h):44Q>jR;J?.k?"r'%&3BeLU3HE + RMep&u=ngFXPV(-Z[fgZGPu=Lt%EIln[kkdb*tcY:]2.0Z*HuP4p[`;SJk7.SdB"0*WbHT>#S3KfLbdn)E\aZ+?RUlqA + s;lV.I)V`:B[:i[t%Il:(dS'!H0b&C\F)*7G`7Jn6GpDP!12up*=t#OjE2$TVPLsj'YT]5F + +I!s6'G!KO,]M6X6AGS-P8?Pq(I7UQ6F7:VF:U[E1I3At6Bj]%e5&CF=$ZnbE/[peoMIs)B + ggH:6r[qiPZUR8>r.^h7he6[oT_qrRmGPkZP96*FK + %d;01U+W6+"6r1i#``ZV/I@8@4"D1oF!2>=0+KckOAlP\iuKh(CP37b#OS<-q4O^IcqS:Gf + OP'\,sc_,,6'9Q^kcQh;KU)U<9I*n+[u% + ,;cO9+<2EOCM,Psd;Y9]^PuC]5>cP2!<]*lO[,4oiHWCk';RE&jo_VDU.9I=+8!KECQ&/(T + 79J'8Y7tJIFamFks&X>=*U[D2-X8WUKJ>$>SVl`[0obFd9BV==EVege + K[pk'3#^C??GF6$a7@K\W%CP?:7''j + Xeh(%idY(o=:E,,);Qh'.>P=o?)i6+$43KpsderI6IaKQ/FAgOp!B;Ykg.i-_MLf]fT/]e0f + %2!b(CP7a6n>`1TU/f$QYCPbNfnTtE].?LWrBYQm7Xc)4LVS(Ha;eP\ND7;P`f%VdpM. + QDFD:Z1>GCsN4olfULEHeBGQRR7t$$[6;FB=ZRQQV`@N(S0Fo]D3B7#`Fn@6SiD.b:dcD@C + [Yd:.=i,`*ZkV!2F0"_-`dF70?[[uY`nY")NbHZiD0N[X0\:Hs$7ATmBj2P59DaaFuG4NQ_ + O3%X7&0^d"dG&oH!=4;g/"anU6BUC"2mZuk`X^sGRKBPm\[c;rTodF_9Bbo_sf0a8-I4*Wr + LN_9g#K_R9'&D/^GVj7+:*4bIbBoUi/,/.](i+Bk4_P+6090%T"I//<)iIb=M,QQ`prZD-W + JGXu?Zqmnm@Gc:7q^IINHbhf(t46,dVLlLEB(jUZPA4(lWUg/Ll!,8(US58@.3M)\Rlpt:dSpPRWGJseQO/n8_mMi6Y,Nu6 + \m(pB16.lhi-5WCM^p@"=`3K(E-Put_.oG9?:8Ua"19K!9.oBfs&rBBDoQBiPO\&:U(9n64 + Rj+L6D)!'B&d?qt&&7jaZ\Vl2%aBY#\C\[3O74XKIAQ7=bO*NlR"[MC^D0>V`Pr\N.3)P/U + EL*$VI[D22q&=]a$\3nKPh@>B=ok0/5F%X*TB4=g#gIBMAMa/RUJ6l81=_fEr]lmhJl[l*, + 6=Ij.A"+&D`Ms6ZtPeOGBLErP%^FVq1ac%D2oI:U`+#O)04NcO/2RAM7.i'qL&prbEh?\OS + AiEH?5bteUtGPAX[FF\h\,gE\r!pVY\Dq]*YN@/U=oDSXP&5H;U>]\Qef:WbAB*3Erd + 'XEgSCT:5GE=RTaGZD4iqSD"L[.e0b&bC06#R<.;/mpObRj_(plm5+>aRe<.`s-oh'S@1!- + M46c"LPFHVZPu-0HA=!'g@:VEZ'adBfL_GL4fY!:XE*L&XbX+D,t<([B,ad[3]X> + ajo&[l6j(_ljt%PF=YS5!q7g,)U,Y0.quOF!mB + 3GV3]I_fH@r%urOb2?[+B#Wg:b;@^U9Q9_R`s_gDVJE+)b>?opco!qtb;:[,,%dT(t%'gIn + qYYH\aP]_e88qr)RB's%5s1E9&H;ij`/3GMaJUkQe)g?6Jg*F.AY`S;i]Gkma)B=]#_`I)U + 8UFT-O`P25U^\iM=!gh"=h7:/RaOrS\]T^8rBuG@a6ckWM/"0^I`dD.#qQI#jdCks5 + NT@(,Z8[5L=g2&,I_0I+9S]bEn'LrDQ',oaR'BnP]3S#*5]67-r*-%g`PXbsPFiqNe8'lWL`uSfjQ`J[X/^@X3]R9%gkoH;,o@)I`L0A8g>U + \u&2l5;"N>Z:Y]m[,p2nY;4c$aT)>i!NNgDJ(=5p='_fTrH$Ll42+qle%CCc'6&4UIG%l%[2dl4?/a')mGU3XLc=.9go&@:s/Fi + MC-DmHrN"R6DbAg&inX4Zju/7u-.\T'j1Y-?=G+[XjbFkSPs'\u*JNJ-QeQo$5/"ehSR%gK + fAROa,Af3>dfHj71e*N^Y7UalJVA1 + o=D+QV++ffo3XV24@8%F.'E#EBBdgBG8N&reEe6;`c7BY0X[*`$2CLgHh%_BjOnB9%-%gB\_n*l0/#71j-?LSeIFj?$NMoK + X[#c7hKMRVKKfi[qlhibQ\Z>j\m-NtO56M$M&:8:+ILu`Y]D/J#`DUmUPHHgonA$3O_F1_s + ZDgSMDm^N$t^6;@,d-gZl%Nd'f`oUg=>C*`)Vm>XW48eJiC8]kJGIk4i-\jGCol9^G:7&`Y + io0`MhS7+#oC2IbNQ\'o5ONmLVSA3;jT2ECe,o?Zb#Ar#5Rq#Y"hi"+@/@\lbT-IGn([dF6 + r:fD%mR_$]Nal9$@.U0f0MjQTE>h[$N + FA1;ahg:/fV-36-),%-l,["HPZAPJjX\d8M%F+j]f!rC'TuUm4O!1VC%7%+Bo%9ZhGsWCGA + nFXL2<<:UJk;fbYX:JZ+U5:];?SRX$A[2eWgc;i+X,Z?:bDbaD4*=l%JZE5E5ZrElg>tGc) + q,^a?D3%dm[B2M8;tM@4ADDlfG#oU@Nee.K8AI<7C.m-oSqme@+VLm,N1Uf`K/f]?'09'Lk4BC6Y0?c)3E%I).,>rCH(F<2fVdJFr.) + f,+M"ms`F'uhs=C-206UAb);eRNp9NjmS"<^?AL6cNo&Z$%d%>1uik,'Hd#V8%`4m@0Ui_RH(Hj"SEO0$\FHtEOFs0hH%Q=DQWm+.n)r6(_XE2OEJ + pf(a,"!UHX%0'qiI#;T`>BeUrsSi]cPQ!+45FE[ifQ`2>Zo=mLK_MJ6$W-ijo&Z`/Gt_>6, + N"UO+/^1C.+(VOs-j.fh%M@mEK7OY;!@QYKX&8=n[.'1FY1`q?(c8TJLqi[,]g<+Mro%hf%GOfJV_rf$I;@M*DdnS`"-^'joP) + O[g=sZ.".2EtHkDRLV?p^9EaJHP;RZSd@(FaPHAa=N.nD[208JaLd/6QU+Gk + \\d;Rr-"JQld/$jA35J;HV":E:k+5MMQV$9B"I;l9=AimJ".M-QM(c\&dCDJ"(u6F9%/*TJ + =)C>Ao@'R8%8bV*!>B2&Z]NUAU-\&P+)>]#XUX-P5aP28W`<5_PfATfkjpqe/:=M+;NK*.q + _>.2KriW2W?mGP)e_)%YAqjM8N8"%A3>^OY\'01HB1^mrKjd22M9MZ1M8);L96N.8'K-YBe + !t`WYH"peN3@qmAsN`Q+_(MqO_$XrK"Bc^6pDG2WrYcP"(B3Hmk4#bLYj:ETNhu:6 + a^/&BL$8c9`;$M=?d"4_@(mn$Y$2cLgM[W=e$W5d6QJm;H&".M1W(Zj"6<+!LTVrn_78A-h + eBbWYJ)p;(V3"4Ls!rG[Q2:Y:Dm`q;%I_#)RR#jRUg5KMm0'&L3YEp@JCo;1E@jPdK^?Gm! + WPfAm1K\EDA69iKJ=@K$>/4!o9=^P,Pf?c8b8Lk=buSnLa%0\jn8^*@[_N5+9NkX"7n.%2\ + 4t!f!#@a48A\TQ2(INUIVHeeGc];gO%r1NCA!gRse\I`#mpV5>eum^dqU2m[84 + n\8&6>CjN^k(DMp@h`hJdquG1;m?0-K^X=>PI1&Ih&/k.dtVYU\?6[qS)q5$XN@E;:Dr-h; + AS3'CVi(hDTFb_7rTMB_"C.rjrCRRAbp>dq#<)(HIIJhr`.#d-O\D9+.I=%@eG@Ni#>H=lGNTo![Y+3>!F0TlU75XkM8).B_7<.bK`qSpdaUPGHo?Q + 14HA?/!)gAks^0f^nQK7:+hnF9jrBe"P2XWVtZ!>n)3qg-F\rS'$D`SNqFs_$ggE-athL.@ + _SE!EE:SoN;YM4-!MLm`4aNtZpgou4K\^+L7HKJ`'TT?MS1047qY@$U(0*iI"FUm!b;BpQ!/KHCD&,jYtTa;!6Y_n#5&+;J#Zr#Oj^&TCi)fAud#;lei;Inc),BM + 6mNMI)"R`J$6ij53(Zf/,#?Gr1c(J^ao5`Mse>`UH]Fn[T!.=j8QheofA$/5cWa,;tRj]r] + ]*'^.\a#g]tV^q*;k%]3Fg@&Rn$O&O=P25I9jo_T]cIg;)bY^SCrpg&42ufKO*m6!P?pC?3 + .ApHa`94u=$>;u]*^%mhNU5@b_Lr$0'8'#(Fa/o0f:X:W4L+$YsW6.>m$HnE4b$,-G/_:0h + qZm`a1.7&&%_R(1HlnlOgkZ>62WpaUenc&%`G.g^A?2BbZ.%f:.-(.^PjtfN*Se5@QrgV4Hf<5Md + [Y_40H2f-Ss#WPL(J2bU[FV]b)kM$sYgJ?+:k5\)]KTiOh59MFRcK4&VY4C"fq@3@k;Y0V_ + ]&q\Vi>cH"FP4?JG?m!kN[E6&Xq\k6G80\eD4FYAh^UjV + t4?LDNUJ/9-Q,s]Y-gZi5m#K/VU.DAG88E7Po"2t"Kuik<0iXN3ZTbm-Tu`1Ea_T8Fr1V2( + VFV,Wa.ob-e9f>+PKB>ZaXi_"FJCZtMb57J8\$lQ>c+CbXN;`[8MmTm$3RgaHq@k(8$oDA$ + ^n(qX%S,B8edW6e'GYUKhKc&s]W?_JU@@:PT["+"$P3`g$n + 1n4i9q4NaUp5sO^Oco6Gf1,BGgk&%hT2237a2tPK_\cOd+%O=UNC#'?sM#&/#.,c>;`>m*j7=hiUb>:5$\_bjJ4 + /m##&k%`%^3o]-Seim,3m:>F[MAF`M!hG5-P:NY;d#l7>=qbN=@c]n=Oh"o@8p'oOJ:5niV + Pl2+Dj%r/8c=$q(AH5KU!DlJU:"9?l2$hNf!RH/m:fS!%K`[,Gnr@u&:9=cHTZ,4;s3DDO: + c-q"OY'D:b#%HHc3V85>hKF;&^[W3&%ra87*mS4d76Ph;$A%uh&Xd@*mm\':Rr_f%4'5hk> + ;MZ;*?4eXXd.p/5a@0d^]f`]b4/0&^]>9d\S?fo_$S-!6sUsB!dZkbMF[FTC4Aut*e,:O + kbqRW&1XhUP<:HDVI77,k2Ge6WF%Y>1%]<;1USg.GL&#Ilkgb + 1OEFc]?Q["AOi692?T`*)EAKVdP^XAbo:EKU9YDsD'mneQ9lH0eF'"a?f.CqYolJ_2H.S$nfA1i+*1E,rHOMcR=<2kB9mYEeOOm^af2[<%V0 + Q03Gut32V?MJ%NIod4M&m>H2mmSE4bVF@I+[8(=T"@b[=),)K38qF=QP(cD4"EOLY48?,"culPY1h]ig't,b'oCW"Y$%m19J(G?Fg9[AU=[)[g/YZ;AY@b*YM7=9=m_@(24rM1 + W7Q1">%O^<9s[tcUteDNfq#ub9u0n:WE]%T>W'=.D3S84]Nh:dgYK^#L!AE_X5$^dgh"l;Q + +]eTa]s8>>V3'\1pttIYhSQogVq@Z`R!3Hg=eF3h2TD0V8M%6QJK6qhAt3P?/o+Z\m%V]=X + DI%-.Q6="]nf,4^p:X + CLb06eC*VnNB1LGb$?^#ZS4o3rC2EXAi.](f3*1erts#IX'\kR*N*VNk;IGdbT?sB%,Cr('u%Q@,f2O(E&`Yhp5rQ17)b:BU&Xr-).pYusS@jWbcp+r"p#iQH/2HD4ueb!@!UuLM/j)_P8`YW,o>[j!Sj+]`KcYhP6UK_(4BYaBmA:hU:gbClr&cm>-+%2>*iu[J* + q&KNilMASJN[7&aZ&mC^rs(sTb)]jo((@BWtb@)cL7&YeC+TOn5?()@.[p0p[$0W;8beHC%;9?>X654U + ju.L\94heM>iVu+kQ-(p'T;.:\`bhUjnqebCi"Z6ETb&tX"j`jY"`S)JnX;)k<=P\Ao + hXoEG"X"kbF?K#+B6QSnP9DBOtl??1V`aNoj)nh8Yj1L8aaBt[XjCgA7I*62O**@;g + mlqXc,:%9KU7c]MKCGQje[#8Da1?qtom'Z[I/7D-)F$-=;3sJ3rY0h)mK4C0YD+$Ks$+?,M + BBQ$SmBY;H&a8VLJo*;RD>%6MgB&V6/*t_JT*F@k/"u/r);!a*m?XB4CH9fq&>O.+m3^fX` + p%BrT5(--BOr$e53D:qlY4d)D$"ft->)^#M+\'?4\k0Y?I*Jca_cb^*0A3X10SKCr%m"dDC + 3Zs[JT?=Wpf24me4`k0"c'[D!p]l/`tpY'N$Cd$>^4AB7C0U)Z"_L7"&&pqmJ]h\DZFP8(?3@#[FY`RNfhL0+n&*]EK9a2f*-"%#&c,VnXDnQ_\fC + 8/V"&AE]_A2hZ`P*(%;TCm`u2J7h,$r[.5-U1+m'WB/+D\0l[VGnt.DtJnH(k\mHLYad)AW + 2S[:%^="7Qn/",4Y/`EG4t`Hn]gj>*?%)0ik&>56CsNda,]gO%#>([&*ZH(H')1\JIIR+sF + (LSXQO<-@PiDXYFB;-K:JE-J/+Zt[h'p*Uf%.F57WKj6E'C5m5>Lli7I]07p.m:1f0=)DB6ACQOp>+_B1MSe=V\C\*2d$ + 8B3`,WJp$5hTgse17trd3@IB)[nlI76LKBG4/o\EuZ0-K"?VY_f)K39t4'q>SHRH)iX#b>5YB2F:eu(b0G0"in13X7%g)!5!%eK@cJ`X@YoUf"W-R + F%VEd:0cGSb\uO0&+@"SZi/T%A_n7t>fUM#%'ja!TX:baeN:%<':UpkQb4Q]QGFCj#Jnr1h!-]@p]omK?UrE"FD/^3sM]PjDqHG@r%[h!j>^i_TJF%=j\k4F#XFSt< + WrO8_QD1QfTDg]RRqS.B#(5r0fP5]sHr3)[]B;+g%O8^d)r4_NH:V(JL:AfUA1oIC"0@ooq + j`n8FrK]>>VrmspnM>[`)./s@"9&H*!!"-[pad$e$%p*g&6Lb!)$Gga@W + XfGMNPc;>GXP.m(lZA,ZFG9s,9W;n,4g&\atk`>9I=ctN5cMYSODV$q)nLR4-n'd2#9>GUI + C0jjcdeT5&2R=d&XN6>t0lHN`2d>]"E4(?_1?#E[dOHYt^#/C6TU4&sl(\;Ce#Ge^CL"TN< + eOBaqf*LkF,YL2,6#K,2M`0t09*#;_[OgM.VKAnoYTct6up]e4bL0>?;N0KLQ#%C3`cG+3o + OkA@fcDYMlMhOa[9Rnp9[8G/;sUW,t#&mO`upX&$XVd-9h>G&jPnZmOu?RiCR](2g[HW?d` + Ks9f%G"uqU0AO/5YEeRB".;=DFY1b#Bq*#KKX5+YlF + uS..-s&Zkq*.Wjaum*ChPdPH;'36Usl + T+]+"P0[?3Yr,$(;&/.2?SN8UlXsci7M?JL0"k.%u0(G)fF,hC>7%c\EnL\K=U:Em^'a + rqqgeUmTGSE]5X3&hoKdWI\j44]SA)Wke)reTPp<#rQjsQh_WDp]6<_bF<$o3e+J#7(XZrf + =#JCu>Gkubp3\f;_fo:.Hd[,o2gSj6%,qH)DQ?k:fZ0A)0q@QX=4B!@qm89YB0F/=F?`Se?uq%]JgXFjA + Z._IaE(nR5=N,b:A`Q5L\*4sUOEN/1la:T7.6s>*Q_DK7[IiTT;/WUKu1Int9o3N,[N046( + 3N2`9UeAjkneO^+#o=apI#!lHJkd#6$Y6WUblbI&t2QUa + L`ZCKQiY9Z:MG2=!urPW0\.J77p(R-KVV;P4JCYSBWt.&muJ.32ukQ"%YYeqH`\m;c+u7a*$%g3;eT+%J2[`)_Q9>jE[ZYgbSGfr + Go_l0V9Qp"loNHIYqG/O$K6?FO#^JuP`OU94.2(#)@6C?p"&Xqp87=kW=U/O^DXFqV7;HLj + SkNE!'G>&_fW@n!MioVnki\QT036"u=J\ec".dJG\C/q">"a(f9+=G7?ZN(]ZOd+-(Tbkd? + 1eM((PANpKt36])>ITPP3/M!X,W.O*Bf:Y_!Fd# + ?=o4>PEeL:,snNm;:psMgjkb6!&=*.:MRmOk&S.a-g]^A^"S9XNJH%Qp3H2bh.'i;?>#Z]- + `tnR@BJ=E1csKktgEL]/*'1B)&ZdB?WG91Wc3+Me]WZ>k(4%`Ym'YO#*b_\"E0lL + 3=b5eh3bMX]QfFubg>gji1H=McA!StV`7N^HeEEW[Z#jg>eV`YVPDooZT$0BFF%,NA30AeO + T(RQYQTrEHq_mofpI!R@Gi3;X^p#HpZF_±1Zfp<,JLfpb:om;95sp0c)A.mEII3NCZ]X + hraI8h5!DL9Y$nj;`)CES]#]2$r_6HN,C1c"K\YWWqQ)+[5J0C!1OoQ/m6s,P*`ZV"qaef_ + dkcg[9>aH1@caI!];*D2ZfO9t8pQqc.IhA$#03lKF\oS78V>@^a;rlWVK1F)Fe+3i6cS)DA + 13:=%43%kQJco9aB#PJZ_C/23Tp]((?`I:ibMfVdp*u#k:8HY4I_90@s$GR%:8[f>f^crX29nt8md + es`&3/k,o-CIjDlj&d!iu_uk`@,\"=3QB4S%JU4qF1Amo&b="H"J?;NI"7&5)g$Ws"Lib\f + DQCio?3'L/\[no$r$O(AIY^A(.$kqI4`j(csQI+PTD!"anhbjPi+2$Jit2aYIc&#ej@PjK# + 'o+$N_YADD)i7q,t=:gkf:qZYoM#n/p]C#n-/68F*/3E@1$15n:YZf+d0_=X)n?$0hiaOg+ + ]*/[Zq$NZ$XZj=8d*U.O#%FD;%>PF'(cG43c>`R2:gWX/R1dmYq/IbK:JUB*b2_ut%Ib.bc + OBk*Pk<4s'+>YV:\M\eqEV)s$8Eh0`(K@AK`+Tr(/YARKcpR2''ZLAg$U'BE,aU9TaMFX(o + ri(E;%@M2Wg(-^!5:(,:MCSJi?38^Wl+%0Bi@sb5Odgr/&FLC@)I#m%$ek"mO;k@hg$FlMa + FMjM_cS6n&o9lMp,jZ;LcHE0@o;MS(EDZ;<`ndA3bcUEL6C7^.4G"+^SJHEK"GY>Fa)WU1> + `3?nl:+\OB,E[p4SPorsGZ>ef.lFeJN[1Ja*74 + tX3-0diOWp3-<0/3h+\576$dfUgMHRt3%-o3k*N2%Mufe/IW/8H$8Ee*/U+!_2G,c`=PdIB + !_;%_8'.l1Bd;A1W[2Ys`j2:GJ_'7V\LCH%+u0lON?:`C@7k!!R6YA-,#EPg>5R5.-C:GX! + <";*\7fc9Td4+pZd0cMN.kl#(spCN5Wka[&t1s+dLndg>"n(](__Y=XR_9;@57:-]pHQZt; + *c(,Xo@"M8GlEp$(NVPjAc;Eu=f5qqGoB/FNIbSH%hc)ruY]g1k) + *N(#*O4&m/p0PR!5.pM4)^$A%s:#+koLG"78C<\bi9]N,=YRIos?57<.*oiK(m6G6W@hae: + 0`j1uD6:#gGM!1G)!&o0[IS*XugQFIc%R77hGZ//.sXFEoF@b2UpY6:A(FPa'*AVaShh9+W + :)/\t#<[`,W9_!rF.&DC7W9h"O*'oU*F<*FZcIn-lO6a1o3o+^(>!>&4f4"l"/oP0jP^A9\ + *4(\::o@l_l+K&2":ohn\2%`%DeP6i.*(f<\e,NB(aBT*>_,QmloL2Zc4$TcQ+u)>/Xk66d + ^5)jT2/W:S'NIaOnB7t<.'c-]^;Uc/tCeeD.5C$5VV;/FtI&:0j]#0A6(!bo$LsU3F0 + 'NAa$aM[LHe+G@YjbB*G8I<\%k + W*G/?K?hNYnFSB88"!Vo*B"!%;<^1@XKkH\^Blql\[]=3[ZY=U)@-P]T + kf;N2H8lpPtWmN.YhlNN$r<=-/e`Ng+aWGKBoP2dCH/C=/gFGXa-7kHT.a@\&i + nsc$APlHmt/@f=Q9O^O6pYHM=pbGNtD/_0't:Iokf_GI2Z4K6=.rIb1WK\(#6'fm>ZKGSf= + fQjB'="bPA+J%+luGSkT@*0%HNJ_-TJGJohM4b@oDJlkHlGW9e)",4dRJL8cu#j6ln#D@;W + HL'FfpJd=a]uZJJ\3;ki7Pf; + hA,&HMB@OGbou$]8Lo]R(1(ufN<+&\s0^ELc=jLR*U)gfn6d4N-FBDM!L"dViM\HO18DO\@ + 6XL",sb?FkH)A2j9'm_i#A6IJDT?)$YW$Mg`)iIT[8==Ug1SCQ-9dK/k$.p[aQ)NKI>tP?2 + +TR2;$1h1@WdOZ?Knppkb)6]O/sNd49Wpg]V80pJ)?ME'O0QVAKP2-8e,=>@`]n].%rk/\6 + +;RS+BLI1qT<@X)f/VS6=7/(5YP( + )IJMe3'#SZ)93S>b;tl@oNB:?=nPS\=e9Z9SuA-Mofo%5O\D2Q+#[8q0AE1B1S6]K;7[oi1 + ZZ<8]agAJTUHs"q@>,\-_M.sT@Em+n-u#$9:f;H9"*qfQ!I+C7AW%6U5pat3Y>B&m!TcATR + &=eE.t39?(^t.TA"4]e2YPcY7+R)UVm*WdYFVZ1Sf>T2VLm))R62rQ)>'_X.$#c\eV.>2Vh + Q';i]D()IK&'QpFn7*4fRLFR?"`W[D_p^#Kb')YY2YJK+/Y.'a"<[2k]/UHT=)Yd6,H;k]Z + -eN[$3\Q)bPKibI=_B=oUZJ`s->50\q_#+!dZQa%f].bBI8$cDkZs,@1HT\3134<$@-2UEB + gInpNC1)B<\_CDn>?!"T;7G:s\*q5E4%$@>e[J0b[KD'IJ;Z&Ut[_"W1Jj$L\6ag4$[ + bF0ZRsVVrlaZ7L\9hr">I1tHS%F$>[C`3'H`OfkJ[?BN[X7&BS#O#o+hQeO]K=0J>M["Tcb + rG1S+X>(YIn)c6(>N6+pqWQn\+ho^K[t[4-dC(rZljm;*5)oHlp/Z+Z$aN\jMUp4?L + H-Do0,a^`1em>W'9cRCo%PY5CO3gb$A_-,nXe\_C3)*Zj1i4b^q9ES>K+/a]>f5B`k6l + ?S6Ni-&]gJfaNM-,gm,_rVnZJp_7UN$>aN"VK?"p`\@bb_4-@^VD8lE7^YF%V>dG^2=hpQ< + bM8Z%*7r#Sagp3ObIiPGS*7PU0L/n!`16M?*;Rf`ftlJ4b+/"Hgi^rUHd03mb+*CgI+:+pU + XInTaF)mk4E8V/)pE^P`8*;s*Ab^+$dQBOaW2bPr0c%t(p@3CbC)b)4]fZdA&(3@eQff4*1 + sn`NR?PmclE;AI';,WJ(M@Oe=D#M9+RbgV]pFY+C\2n?'P]OmrpTE4L>InCs4n1\!&)OX"%NHccFN*-Cj/$I + l[#;D1n6dTW';(M1VFt3p);A41ZYt0'WmGCYG$(WPcQ';q0V7)rNS)+*(/N`&uUE)O$iI11O>rUrI]<*!HiDWV;S + iu/kARI]9Xf8kj*\CmGS[4c>45P\Q)[IhGP/G`^k^ITRn.!mUM;u;Hih!XI;Q]55ZeSOcl+ + >WD^>nQdE*o3]i-d-=^*W5rWP/;Wl+Q-AoP@QWg[:X8m`iH'WgDRJh&uPG@N696"oXgL]^E + L,5-qUi>u&$at1eFS)jH&]GHQT;X>jcO^a*pZYQM[6M8]7-$EC*c\ + PUqN:RkT7+4&K%>2!S`jB;D2&DggfG0TgE+RY9/$/PTQm3Vb;LGlCMfk+2-n[?f5dOiXRX4 + RoB,G]D"ANiEsjmona(HG748.mN%_o06?]V(]"15s*oPAJ-Zhr#mc/L=b^TP%Mo;(_I='i* + 'Q(oMah+E\3tKd'SOFM;&KL''cr:R,I5D7=uQVG8>O]/N07$QO2U"_q/l%/.@S?>:oV[5Be + #jsV18m=mUIE:9k:M4*6*OoQ-6$M7(jjo'"YiKcT*8Y/j;p&Ec=Zh@q)g9%r-rZT + 4j'P^,h">pHrSm:9[d5=ZNOFGJ1=oM]Q97pK0>HH#[ld@Oo4Ma/:Z`M=Csq!km9+Keh+lj] + VsNj:oH'>D]rK=qI!;$!RluYir9,+Oh`Jrto69U$M[C#nX$d"P!OhB*cK[1/F&Kff9XG"R_ + @K"6"$qcId(cZDPUqs#cjNCQXR)EcVSW>VZjAEaq#;EW2>cVp>E&&@eD`mV>VMn[Q]15g-)8PK$pj[d[MKgMT + B;TgRdE,=2G:_FK(/'j5M/L`ij"&B?S2(U+S:@Vko8_!::Vc^hF4_Xf)pkM/`7U6$;d+\Ig&VW)h$Y:#/3ES9Qgt-GE=q6 + =_i)']FS60_/.3(=Te&SOuYEnp3.f9e7C[O[ + GkQC(,=TB^"qN$\9nOB\,(Ij3S+#>%dh3BratoFH2N%?:#MFTTh]=Xf9&:6()sE'W9s/[a( + FF3bFj(`5tn#>'`F1f+*Zoln[8$fje+Ym-gh$$Y/\o7?$#R]m`FQjj+`.4=lg2bhY*U16%=YA5JQe\cPEl + I5GcVqWo>ea)f">FXVn"CL%I[X.n)nm=kKhLVSXFdOs6ui&flQA$)ih's#Ff]NlM8O3g$M65X&+?h8r!:X(T5"bRN:@O-FUV + //_Z4!3O28UJ]ro;IgGTV!KlO0-\T6J2"2ULHN5O-slWaE3+]`4CYXE_&/-9./+97#=@'LT1)gmfM@7^B2OV + #\c32UZ;DN%)=.MD!Cpfaq%W<2ldc=_.on(ZL-l'e&LgH>%JJ-g>d&@C$-QN/QoNC$&l(Ds + g72qRM7K?%@I2EUI(SOf=ZdQjW5\G]rSl@^2dhYSAcX`;Enm7>M=UcnGeL6qCSjtO"f+q-J + >?g1f0.gkf:?iQANA7/r`p"3Td+)AqnUuqA`&Us3AL([VVM:o3fim]a,ZkEUG1P9W3@gqMX + nCYeeqQ%h/)>NU($:8&)&luM/Tn0qqS:aa%:-#_Ej<&>``Y@q*p`K^Yr6(-=\Bgs/CfQ_[Q + ;];3SS359lmMH0%F,E:Le4@(U\FLd+W86CFuZo[h]V"fR$80/D[S?[SG0'X+>3V[A((:_Ur + +/EEt-'cF;8cg0EBnE:/X_\sI$lgj;n=/nM;tQZCd8HbXiArSjuh:?($?6#s/?ah;l3p>$, + 0HET3s\p%?RhgC7fG + YD+%0G[BlJS'bheQ2JDlK)OQlm>.h2"MVC<(L8R"NH&8F_0D-W7J&?ena8Loa+063/:cJq+ + U^KDq]V-NZ'/2U4iuA.i8gu!P"<;Wb*`2\AXp;nEo(-FR-BtZ0tFOm&4RX\1L*D*1e2P\duQW._5j59T<_UfK9P`6*DpBkEp$O7egiar;jAD&lc`MXJdEq\N.INL,g;-J.$U=*&8M + 8%5di5hu7EP\b3;]/8C4gO$h`mQL.l)ri2]\A,U70%nF<$V><>_6\@jOkr17H>Uq&` + AdMsiEA=!n"(oEF\`G&]H<%!mQJ()[drMW960T/n%X-+qW(n2QYp,]WQ;E\rdoj5L; + qN"qMB[m+ShY5`NWH8'CfY=$_:2bOfb#jEp`=n9r?pU30X&*o@RbVpEffs#8*s+ + $8IFHh.(+pZ),MW>U1=\+`+"aSu47nGdEOqVQr#c'h#u4dg=RX5H2urBA-u44F3n@)>/:lG + +A3-/s3ad8%Jn!'X#$5HF<<,RD%un@jf1ZWWV7mfUAQ)'Itln)XJOV_5sRKr$k;-./G?he%m@4,r?henL)")U+$ci-gF[14>/%%U;2)M]])mQP*3QMAY!'S_[;Jj4?,QQ3C*3\ + ."jZ2bWHmc1W,*'-hJZLA3[r<5f?!U6mOq61c.T5*Ps?c-<(74R>rX]AAW-ZUdRhhPURlb7 + )Jjp'(escOt*D&Q`6-^73jb0$p2CBTgR7=6f]dc;H^tt7REVK7#XI/$re?[;T7?T7)V%'r( + '9c0#`3D-$2&`S(#<'>==?^_b=[AJtGMc=e:9m.I8B@oP;8=Rm%6X.L^,^>]<%Ql8rCc4)h + tsJT*uH/A\o&+l!ro;QrYq-c+;\-F'#2>,]LC*hF@&_$jSgb]#ad&=Y]E7oXfJdW\/+B>hG + A7mo.$jD`+q-q%#dSA]#+UejUX;lQ3L5O'-+T[CcdNL*n1_ZX:7*'Br@AKE[i6hH52eI9X;eL[Rm!Rb,fSS]Xc14`CpE69GG.^<5$$lTutT5V_RDP>`?_YR)e!E9UotD1mZan*9!QGKQ:Hc?6%Z8a)s'AkIZm_tF5\"'Fnb_OI + @]1Wjg`mfmh1&fBbeg^O]^DQW<1rR#?\\e!03pWg."4B2p"g3d:"8:JoZC!`^sDqpb^AcOPm5OHP# + (H_;=)M(XVOSmo2*A8V>S\;<=2=*&lKGX5g2pK6(QBhmmr;#d0`^d*5E7,jZK4XY5L61bpiBuN19KMX66c?Q/69N<.P:=>Z:&rf2 + )e53j#eH8LQ@9,O!ebpF7V(u&IACNDfP-&NND,aQLB + K]p@uA=Y'G5I[ecf&APdo6I@oTj-=*2G^rH + Qr4qpf6Te]iYHojq.rD-05>dT(_I[:[tLa:VPDet$YZ7"e[%=4g5^f,]Cnm>"LPX4N&ebP` + I4?'&,>;:CLWS/$KU?&?M9Ct07haOGANaTIY_5S/oA&X@a?OLSHlJf[2>=u'BP]EKHA<8&2 + H468Se&[#'nJ/*/K)/AT4V4,%!'/5%UV(/=qdE/Q/%l"A<=^?9J,29?&#c;>[gHkQbMZBs/ + a]gp1>8nR9mAuhK]%,?6>9anfFgg$6[')P*gblcM%DH'l"L5YMgA3m9;EiHEgYIjkgK + !(`orq_%bZru:?*1G=?.iN^atQ_6?"Mc\S]4s3ii"0[g[3eNrQn-:0Xmt8]_VUah?Tn-3-0[-^i8!G8?e*-#ec+A + _!+4R`0(npG/a-Fcpg$&J?PV>Q;\.co"(+LFi3L0bV*E4lN_QT&Ugg?&Gp?&:D.-F(5UI0V + ]fZkeiOg%2VsJoFr#i]W='p%H=[e&'jg7=5""L/P&HmI4E\re'$"=nCRbe>ZNJu-=.,jS>: + EgBY4t,'/I:?M4e")!J"t[bh.70_piq3%4_6dZ*fOENf$r/V(r\Tj?-jcJ'W'2qF4tkPg=X + F=Tfk^C2ei[GR/&k%9A+_nB9=X"g-0'tF@\uNQeQ-/!3am2"ioWU5*Znkr5%4tij8:r55tg + $o9k2lQAJRC=rL)aVbM,3Y=S=i:mS)-Mo=T`-eO)V$S#tg.aM7Ln)<;>Fd$ + fA'2.:ejidb.AopKA]A-h'eLdr/m"`QCmN*%N@X&s=\'PBj!ThTem-] + >NlsB=$ob#U4_Jl[(@brL$53)*-!V#g[DjM,'7@`\MTOsL.k,,FBIZWk/M7WtT[YD"B$dl] + FoO4:TBRZg7^E)WHDX/pW\lU.lm^23`-0C5oC"A1+k,\%T3V$4Un\6Vq[j/;!0'ZAjEc,`. + m]:GhX_-0:lOL+1h^EPq.<9ViC2Z0):H)njRH^l\o,fr3ml<1J122M,Ep#].B.S+:4S0FWn + u!r/1H+O-0ka'4lCUQ;T.oKD5P(d2oZ'8i6RhYg1j$2focG1EcUp5g:?^k>ZR8?:hb*394e#dg!)>_g:$=,TakA$AVu[p,-YKhmTMg?p0;B:B4@`tVp4n5_AOJ:*u, + 't#^5-h,aMC+)prJFa!e2GF*> + ]el6hmH2!AJp[XMl(P,'Fg\[8Q\G44Nqko'$3u7FU9FB*P^0HjfnJM]_CGARQM@YXGn4kC+>oqU_bA-aJ#aP']-KG>ER1%O + cXiRX3;Eq8eJ?K7`l:T6ggG@V:i"s0MU#G^3A\q7i/A&%D>3Hi+,_Hl&Q):N1U2_u(V!pl8 + =$Dmt*iZ$_VElkboa\#K8u*rF6sqe+:R+0kWKb'MsrqK?0C/$8_n`HuO!r0;4![uUCDZMG% + XI?26jn'-.PeU@2=GfI3a0"Bt1H,5R(D(TMjKfAB(G's.kHf)=0^q"p/P>2YUqp0RNq+c3m + 3SI?5@C<"XghQOK'0Q)$AC&&7C!bQuiaM:h%OZ^am-T0"[ICHKJ!baNhr"J;%LWDl6=CG84 + ;JA7Kg;@%."k.m#`1g?OQ^dM)[_YE,Z2W.L,B[+`aEhcba)*OOA'2(R.SO..%3ciOf3):?Q + l(9W&%PGl=2<(b9bWZK[-,;P0d^G\igss4d4>EpD775do:.u)08$Uh?u]-E*VYJ"g$!G.$pAfm + #NOY94+;jpX1Pr`q-3b<[hH?`pU(qn-=]3Lk2a07SbKCmVVD8O0?Z + qnUEq)q9,;ZEccHbT,'YH!]T^sD'io;U$Z+P&hTS/2OI.'a+j%*GkVkb=2+nr0=3Z]bJ[n, + s<47^2bi*QKkG0"/B3XD#em8,QjerC!EZ7;9;c:9s"Aj'UI5J#R6t8;X/sT'"bL5bq6oO\= + M*9?e4G`X[8ehESeZX)9kg^6's&IM]1ucbEF&^M>?)Meg\I4]tIiFrdVm\J/&+E + _NoHk:b9:smkJog;05jXGc>Z+[\*f3 + ".*sDlT++:6L(XaI8Eg%2&d? + %RaO&07l#go?ca%/h6$/=(@/^(H/AG3f-mfp*q=UG)oKbF%j>@gpVI:bm0LZaFlCr\gKj.; + 8nfSf>#VD>B;khbXE.@teP]iQDN0e]A9eiNQ`11q,et[O.L#cJD"eDJ*22^$F^(k=a+u^#rI[HTW@iH> + /W:R^aGdidYiCY,[9F[N0/[FO)[D[-,6S+.MSHNl_;eEu+mVF:2lG;<#@m;X#-`ohjqP=>O + $+M-a>CJkZ[>-V,<`+VHJ*E/ff;!YYa0HdZX>;7aGQhVt-U\pKLKKL>GF%\'fcLTCP%3]M` + g(c(i?cI)Eh#(mF$Hffh'?(4'G1Ar6*nq#)CWBh;-nCf&]K$O>^5WFG[fit.r&R"&2L!3^@ + ;[\3IGot&i)#<'?]Q^Re%3?el"_6%uJPX]?W-ICs%AYh*-Io[\f4a"QX*RPPM'P[%&s'g&5OE.@$b/kkYP+7Mm&DfglLta(`PRW!-M;(Qm(qo%$-;Y8&>Kcg0fA^V[E< + _!U_7%MXV@m6l&XhT9a,(,\oM1WL1)\(Gmhk)QP`"nGCIX_re)>p,F3h8M`AK"X=p/u$eXhbh/j&7F$=Z[rPn1SUcj!iBV3M1KY%BjXaB'JCgq0(.`eVT + I.m7R8XJ2cd1V)bR$`2n:S'R*C_FV(*>!2S98 + /PmV7`DLB.6LoVmI)!_)Vaa-`%`WTld9UUDmK)D0rt)2U9rZ>@hZRV72a>B\Lg+-R%Fp$!B + s!hRggefP>Ve2V/[8>PQYkl(mF?1Er_I9(aIllf,I7(2)G"P@RAsgOli*p!=SG8Y&6K]S3B + !T6khQksP53eRH,.98ti1A`'\XL#]TT>gaJ\jJeBXj0MDOH]e9dNb]MT;G6;+Y8->Vn,!3d + V[%gSACA<&$L$'2,?jA#nYgY^Y[N?f^9HBBXUa4l?Pt#CWs/Sj(n%GR(=Po17JpURUGWG%ub^5WH]Y;:n?T9ri7@`l0.o2O^-"Vs8+-1e)T!pd1;/4LN1#7 + T2g$5BT<>T9&AY(#20LcCa=!qhuY]))H.^D'/Blt!ee!bQs,A04#d<`,I)Q^+-,Y&0'(&N& + sdI`P1#Xc"+.]IG-6=2:"@M[ONONccp7HA5]8V/h8g + @ag9BFqB&V@Cm.)Ctei'ngqDY3sA*mXk\CuTu^:S@qtIUB=K\9(-"AFNKQ/[\IR3fW*(c`D + KJF:G8@L:)c(e/l9Vc'IN?ftQE+ul\%$A6#iF%1Ds[s7]/T06>.arK*c7n!TJn/KG/&>L*Z + )jB(CoT4m5&Ya[D=i;1-aM`RI,GbLj)/ah,b\jm;@NKH03Nhf7T3(DI@ebcO&agK9Yg&gJe + ]e50#fdbAoIUemR42LKYX`^RG*B/:Y5IS?=S21+E.XZO=6,8[c19_8`H`P + Kj5_._9[g>kqr_;DlXPopNq[UAm`Fqr2oP%ML"\R2HKQ4@[s51bj&%t-P0-NnCDq[MrIq5W + qP>398R&.B7AJDibp'2GQg`Oq9_]\;i;>fuqiSq;pqJKAI,C:\A][,'59K'9_GBh'K8F/(= + 71K4TCBRUhtu;8l[=i1p:iQHqkj,[rm/r`5@?r;//C!:TFV:]gW8#6/WO!\acT,ZarL#m*pF!Dflq:b$)h$NY3'rQl2Zn3I'd#m-+6"V< + m$E&d)9-NXiOqlh"B:WiqR#`sH?n;@T,=UD; + o#LI`#0S9ZBm/E*$qp8sT:brGtSHH)r$LiNQn@8\kXTm.Y#8#8jOI6L'dfhGW$4tAe&Dmi! + 1C^SQ$BW(60Z+ASlNrZ>#uL9qOKf7VM%.i;$tNDe_kb`h3mgYgE_Aa,:NY*ICdcTeb:d=h& + Lc3!i=GGl'G#a'O\$6a9b]'2^$[&M3X2!r%OfPt)V@&MTLW?Q[I5f4@eM%_V9]k9*E8i[\cODT^_ + Vk0:`-u0?q$Mo3F.-XYH!COV/`l'*U%JKI@L&1X`0X1C5jX:Glfo2j8# + 9dZH-PV)AuP[gIgAZW/o)P;TZm,I;kPaA"9#HT?.S16*;1P49_PD'm_O/Ik?3;kZ16R5d"Q + .Pl91%4ju2eFh34'$kUZ=5-@T'Z4nFObZse>I3WF_6cd?9F'-\gF"O`,X/rP);Pur6d_lQ[@>p16C2 + D3)!2ZdE7dUQ/.@0R@,c'FV7VF'1 + ]m@_iBWV'E0LL\;)o])%RsCnL_9;aiccJtO^-"-\lF#O/'?3qaGpl@;G+]*jb6-'Nm:X9:N + Ui:b]pZ2[m)F5?IU9%0gAM-.p$gI7S\WLbHek1%818SM%u:Ue<)4.d-]=s6I_N@bp6OBq+d + _NX@aabeOmjP=MRrqS]+K>l`X%0LAr%g$/5JTTo3R[JO9unP24nM + P=^>i$9u<(`atTi]'joNWRFR:)Fcft;ohcH1f%-Hcoq>2S[q7+?;iE59Pl"o'92h(,Je]M! + Ej\Q<=&!JB8eunn'd$lL\:mU3`YO)>Q?cs#]4A=59,;9E@?%(7ObHIN0of$'Pk-WD + Wh0nU]4()@83$?:_o%)Ws`]S@r-'>LD8MZjg8S@9jHe+9h^5%YIi`")@PYBN=nrN=SS2"X-F@Q'-jQMGY^Y+6t.AJQ;(p/WVXMg;:]9BuIdMQM2ACsKIfIZ1" + petV/*__\8&+nWg*%t^Q7+b5f$CDQe/V!!;&l!mg6Y4s'?ZoM93?SU0EH>0.';Ac]a9mN"E + AC`&@$rJNW(9ps5d>QV(L4alqgO=rtM"fLq=:]:/B6nC%DR0.PWq/+cC=LCA?]8gRfRShq# + )lTHB,C(02+GfU07qa1JXC@S`h.hu?$-qtYO8/Ef@an1FbR?%KfELuZN#S,MW7>8Lpu6KQR + M'aT8g:CIMfDNF^J&S%`gI^!!t0;:K075;371Odj\?=nLE(uB3S),^Pc$7=(slro!P_K=iU + e`oupL)4b@TZKt-f$'d%^'nVNY7LR1E338D(S+,?o;HtsM!/PkmYN6=fb'?mhFUp@E7spP,&jPk;)3fIqoE + +b'-?=Er"p8m[KkD3`Z.C"^%Q\YGYifWgd&3Xd$Q']Y$Dr3Ei0Vb?C4g%1^M2i/`6FI2lH*#YacC_kZ$ + .C]2XQO8?_eQZO#_\3m0/,&S=S7YR["dI3`gtQFe;iGEV8:^H3'!u,EDOJPZi:%G;"a)AX, + 0?Fgo4:(LSe)RdFTS\-8%VDZ!V_*a3?$K-Wgc;h4I;)&#"F0dm[2<#JqEl\,hh11W>?c1(: + a:?LrYY@ge8\EkRPIP\?qj#V)M>6M"L#&"HN[GZ4B=/)cs>JLTg7t['';6]2543#I1$u9 + M[sa%)o_\=Q0#SZ#8mDhD)aV+u:r$:8\]W(egIK#38%r+sJ-3F!:&e`#guLNh]FR21)7- + VHO1fjF^kNiu]HajI-c%+h\\'WXHh4m[(U3L@_tiZ\e'l6\U,jeYa2JXQ2hP`p5=O'/IBi' + CETWlne4J8&e[]kl+VKr)jaV.#kj/Xub"$@6^\3*8FEq_H_M]k/29N/\f1P`^!HSlJ3 + 02`OrP'&i"9g-/%9eQf8'@/NU)44X_b.QK('^rj729UBl_Y[EF3s!P]hoVAUkZmZ'>i!PDb + H>*r/j.8&>bTJ,!RH0)3aB5?*>ctK-UHOadK?Vq'A^gcGh5'cdCfjj*8aoJ5L[0;hAilLSM + /*4>LQJ+c(,*erC^P3&^%Gfai!e\h$;CK7Fi7ac96U-*4rePn'kWuesjk54XJK=5JOm7g"i + .D?#+;io/]%!31WFe]r0UJ/#[`;e_KK4]sl^#YJhNs?h<1!<_q7o/_o.]ebn=XOuXNd]+qN + u#Z0[od+&5Hra!U`NifU"uSoa#@CZc7Bq;)Vo5 + 'c?Gjkh*_idQRld:MOH%I!=bkT6?-*`qTtO6D$Mkrqc'^7c9*VcZpS*qDXlCR2+T$-TZOmg$Uj^/6'^=D_%j7+ + 1Mk0U*erTku/!NWWNp%]G.S991')-bHn/=!iYCI,%E_ljaO8%0k0I$*AP>1LkhQb#N,kCiS + 3\#G/3Ok%'J-]2d%k`e\QpGE[f=WdBXgO?Mbp]#+*g9(.BKp$q2K3?ZGGB4fiRuVb=*\f$X + s)EH,DIMFo7(RtJ[*eTPm=';jCcU&C9^&.g + ;3XA[;\:[TOW88S$:q4?b>HS^42F\ht+g1S<$+PN^gTNsh](BN&)VY.7Mdf;UWBPn$AgR+( + BoH0krG(U;[@G&!";kq85rXqrUB6M#)a==lA1<)WB`X\^]1r#G8BGck*3e4T,.nR8D$VO,N + W7[KCYfPq_>--&$1^fp=%N/hO@PH!S!)>lAX$\Y(r/TY.1So(OUC:@-4j\m1pZf^_g%/-HA + XI?I(e,AY-D:7_ApUrc"CU)LWD7cA'7"V$LL\X%1T0KO&iq7YGEK9Lch79N+IhZaK$hLpk5 + Ko95ni[MR$MqIj'E\J%O@0BW^sHT8pcG^%)[/P>_n?)fn=1.&683dRn@k!c,ne-N"1J"m:u + jPL6STh=&4H%.@2h<@>[nO:n[qd-7T''K)TD7mLD<^Ib[Z(sAf8eMO1c4/Qd52S"5g)"/&Pl,#V#`)G<5b1n<#&t?.aZU\ + 2ce>5]kL$g<1S5'eoSfU;V&7p@o:k)';4mK9MuYi!#C!IaH-_?\@]INdfF5=[_qKJX6B[HX + #JVK_em/fICjLPW%Fuh+Vp6aEOJIIGAge]D6h]slFkSn?d/slh`FJ(6%D2#4)3Zh9==5@hb + BR_dU4Qu++)s+*[IiHf]+]?\BSdRcf;MF1PrD^2?/prQmO0@29Y\6Q/XfI1u%):?3,di=aK + B4B/kM+RcO:YAYV5pqa0>MYJ,RGkY=J?P\1muK($!)(+H9LH)@=A[(/r@Ug[HMB;]:/m_=2 + 7R>sh63kE=Ii9f3hTs\OBmb>)-\HT;Gu]^e/a)pmbQLHCUer-%n4Dn*h^`,Jjs]or&Z5-99Wh2aAFna6VAbV#H(= + kGaiZQ7i0*D1rrGkZicC"f_6CQi7W7gm`;qAoBcGH!aXK3d)T#C*^Z8'cqQs"M^,Ys&>bpK + Be%)e]0-GF*s]s(ZEI5:?C,i"Q/FM`ctaB7><%quqUi/cNQL!rsFl3Id,'#J`:g!$J?^IjF + ^j39VLi?i1mr:XnVnpa3nOX!8&jeQp$VnV^L/93-6KhP[iX@)b0Idu + *W/1]:N&lZ2p)1MAnIo>Y&;Lfd,+L'T&n7@kMfA)&6eJ^V,#hNs:hD5bfR4CjN+@jN0TJU. + ;[aii(lWHT1WL>l'r.jGN3Jm,`-B`Ej)e:]EU!j$'C?R2,^YDGJiGY:6R*f9ObN>b7)s!8+ + _*?(L[g*d79FIK+H0*ZdCq>(fg?[Q]UX_^IQko2:Ce]RSre!,7E2:t*+W$WM3>kC`eAp9#78=GWWu)N>fT'GmZ>eQQ/1t9p&7YSA#C=?If%d'kBB + p0l<`E)<3mlKh`9M,\W3l8u_Gcq.;Jg + hlWbf,sdot@*CqY:pFj6=WC7&Gs"e<(L]Yg'!T>gJ.V1OH+;uF;o7=DcB + ,6p5u'6ET@RAWgUL79_/GcQi>_/K4a;I"0@e@9a@f + &:F:DX^s$E",P61E2$\W4!m)G[CU'],+$J:.6Hh0"t^eLLY>?K=MjHr)=XXJ`ucpZaKNH)- + jS,n^\VR\R=N.XCkM;2$0uV`Hn!n1Lt;S*6Em*&*C?VOYWL>`L-)>k1kBIZE@$G=T^h=N4F + VHBg^16KlH0:j\p0e,:L)a0'GrJQnq3NaU[n>@grO(EX#=M2R?+f/NI4qK:L&0+"c4ECS14 + L*QjfE1-(<=dpt/Z^oGnhTHK_=C + ^O%I%kFJ`>>IIjO=5LqnP$>D!`W'fNCB6g!-`%gVJDOBQ60q;lU,+gGg:Mi'QbAlg2LWrqp + `!jVID`hNXuFq"o2oNTkH*NP[F,4qraPS(W-#2;de]6-E#jRnp4_JURN%"MXD,U0cN`<4Mh + 5CY>KQPf.GU=]ODR`uZuP7Wj&Q*-ESRYhns;,b)688Y^1Yc;io%`k';=q[*I'I8`P=F98*l + dnGdq)/hjil)lRng)[8*d=Gl(cVqRb4$0)O]khUUli1VJ*19[=`_ZfiuXUi'4scFj$Bp9)6 + VqX8=6RMR13mK?9=J0p**8f`?V-9( + `P&r22f1]%S[WH;=hW[Hqi!KK+.@^f:q_P'mmS0V + o^:6c$T$$l]:"^]XI")Yq+bpc:41^I(gZPRB^f2E6oh](?rWS+O@`*Pmq<5h"f + 1A'M.IPbC<#WBDYI28X5ccKOA/;V<,XGZF5`sp=93OUfEC)DB_5!sFZg0r:,!>bd + 0f.C;PLl_cl4*XE5pP,*9?kB&q)t\K^%-ZKWk\la'I@126kP(YH60cCr4l8j.h!o=TrU/C1 + (^K[0'ih[9J=4M#=!Sm_g>M&'LoYZ8&Eb03;cIeoD#i$'0*hd6?:2YUeAQe'gAEN5EiTGHh + t:s:r"&H4EO<1/6p,`?)cmk_djcV.q-0Pk!b4e`(UQX4/##0?q":m`b\pHKO-Z<)9#9R6DP + aA$kL5qAN3?15?oX*r('"B?T\U5nu3I8b?1IdmQ50Rt5>Tk2".7C7Y3n)Knlu0pL + O[uQ3[,dFKd7+f.%[BU\&.G$C=ZI4*;EWnM'TAQJ&R3AF"-n8,Q9:cRYsO`bU.NI1Q8)F$R + 9U@eUWORPPq8q-A?/=EUD?7k9$'_k;*@OV:QkpXb7(8`5rk2eU.Zq+'L\l7Pc79nS')r`b2 + g')e=fO*[EC\9ae>#+AQ%;%k`5Kk^^.MAB95Mcd"OP@4futmQ9r-Fb1qLp$3)+*obOjF[@6mN + hhFn'qbtQ@+4O?fMgeGH%:3=lUN6KD.k0=+TcA<^eXIdQ#h%b%^O*Lt&XOGK57S^&CcQr*X + 9_;+co?V7G:NZ;+I/-QsqG2eA:Rq=.XSblLrD2eXci!c="TM:-!`0m>:_a+0/HjE`"]0%?: + jiMoN<`:F#Z.'":ot.&V%$87%FE?0;#L1-LpTOd;C*ejodqNX/CObT;8Q;]9dP.;lr% + .]cg>!-DjL$<#n2$b$3?&2C3c*;O&6O'hKaS3`KBMe86AW4\/O`6dm>9eG;nh`A?$R+4C*\ + eEV2*'gL408^^U2e9+^?D-0e<3RpPdrPq^c`- + <(.VujsBRsBTO?jR/7)Xnn)kB2.KX^>o2N+]Z9nbupN`[O57Po!c$nPO$Ft&]?8PF!6Zt* + `@GQN(K"SgdS3``*Za8P?NAH6>HVL.s'?iN)=G9_qiYVm1W?DFM7Qq%/&)Qo;Gq[g=oVi>@ + kEM$^fXaQs+pYaSho:b`"8F[CAZ[2[.9)JKtpktnm!4,>M\:,Fm*1:c:8o/=EWq3j:]8 + `Jk(ghg-)[reV^sqBAW%N?iBWR25OL,p9i`Z>4n.fQ1\NiH!['4hQ2apN)F#S$:/h85c(hn + gel%F%U0tMh4.d/`TGq;&)6cLi9OaeCTCaCc:9sUiGHNd[KtgIr&nP+#o\3C5_IZf4'-RL_ + n2U>>Gjj5dCnqq`!^`J=KRn;M'$%Q=7uO1ec*R"p0b7m__)[pXl/--#2_l90/a`j7!)p#LZ + !mL@qI=FeYjLRjkkMG@:fZ!b<0/XAAAZGgcaG#%B;!2*941:A,?>d`UMj8/&K!fA$fD!IFm + CX',J"j?DG9q%Kp9pLLdPUW,o4sMLNGW`\eB2IhoWeOu@,8\7@VnOZ`egrHC[LOQ/=;DR[jk;>QD + -tkC4t^!c@t\R$niH;D;-:I)VL1ouP^N.]d/nSSTJ@FC0Zb> + t_Nh'jLDVt.iW,Scu?5mE-Qoq5WgfB%cNTtt3i6)H\-B;mH_ndtG.5f:WpoIr" + fEmsi(J;e3X?`+N9<,jem6$K6WHkdqODQ;l#]k,tT%Q&?H3u`Nh*rQ!b&(]R]P;3!*8WAaN + MramC?G6#X'X^P[_CiIC0T8WlF`9#%cWC!N8))(Tha!Q?=b>#lta>4@'8^ep?^flmA!/3lY + R>Rk2"+M\SD]EfA6OB-;/5C95bm3BW>]_T'tqcpRY^gC:<^$-LYa[p2;khD@Tc`QKI;cnn. + mef?X/oJu$l_[>_QNW(QM>AcQuA]eE3>8iLCkGK%744%E:2t0qd49 + ]qX>RCB"o1%L83Oqp#D)PY.ksEf*#u@"`P7`[D*9E/V=ugbJ"G0]o5"UMr1LcgG`nAd>l^9 + :Ffm,GiF,im-`isY-HXIOW>/t-CUX+]m_/bEE8?@-'FL6;0sX)7ae\W6n^Nm(367B6WE_[, + ]XBRD`M\5DV!o,o>8=c)/"$MEmt%QoO.Rg<*8b\6WHoAFAG&$dW!c#E7*rroG:3mRR'sj5? + 8t8oYd/?&pJHZ?R<_bFU)#?-V@=h3i=_aFHQ4fD`9"8_'4/:$bnr*hbs&q;t[n%n:+)P[8k + .(@s(RDF(\o_#A!M:8G57AorgkdT4W8MB67KoIr,?h>^5p/b0<5mC\JWWG(4r1(Mn6OJ+o*=O8<_f[ot.4I/"4u + (]T3`pJ5p]7J2^mp5b'-B8W#\>^4;GYal1s-m#l8:!Lnop9`rJaMjF0F9'MEfu'hh^ZOE;f]n_$nj4/_# + J80o6N0[UjA-n$q%t&YUl[O@TN;4pAE<6$"p^+H\WL&[j?BtLjQT'gib"82XGe2^7CV$k]I + Y)&&$strJjIlH[it]$C#o[`c0dDn`c*M8r%ap1L-3.l`\:tg6MPTfrq:q[%G87'ANH$j'NV + K]8=f0k#Nn&eGT'kSlYB/-eZ?Y^Z[7orQ!RgYLED-qYg,3Hl(T;(4^eI$@Xq]\JND.,s3YI:q#X?b(NuaO+)?$[tQJGL1_m^g-?V)b7bKW7_,7[V0k3Nhkc/"Q[l3S:@'t&u;*jh + tp*@'2FAuL]dV["+ibQ!!jhk$O_\TTb+/=7NE.s66OW'Hk%qLN^`!UB`rTH+-&dannB(]8L + 0G@jYA9<\m[1Wal?;Zm)jH.Sk3PbM8[D66_R@iFBPFaD_.F)B_;*0-=oH>:T2e.`EI+[O&Y + AOb(Xl40<.uaoX`;%X';c0X7iSgP2C;V:g'6HGA;*QlIE]&VdpTD0NS + Z1CK>fA+$k>SVJ4t]&Ia5X$1_&F3NZdR;<&%97EOG2;0"(Y?S$VB/:JI#$2t6gZS,Gqf_:, + \_ch[qb?dBNC:a+3-mbogBGg^dIqsjDa,V=l#/T:NeVnmFQ3'NrVi]fbLN>+3nf'rT7bhgH + +Nc6s.d!$Yqlg1g,A`,C^[cL2UBj4og'+(6M7A*,N.OT8>7f%6>.h_LdLUJ*t'5ES"fbo0# + Pd7^MjSQi'Ga)'bWs?@q,SR0H_10gLta&6\fTZU$ZW?F/4,bH_L1>H"bbVF7rn]akjP;1-3PhS%-;k+^^8?t?X)Tm#XkfQS + XPd&G-1](`I8CS(8(UnB9'1'n3`2u2IE\qK"au"Ke0N&Ob%80>n`'H^Z1AjF5c89(n<)Z`/ + 3C-Q.>`cZaaZX6t6_FP[>R]042F'X.EbSaU0\ek5fN'aT%+t7T2%u?a21f7][J>[=q#3::hDchGO5r:o/!/d&XuD,:fe+ + S(AU!Q\G36?$A"MVh"t?)(q=])AAN6i0T]"KA]81*f2?T7Z3X/$=C0H&eUL76--'rDY?@Sn + i>0ZrDle-0@G3^"5SRh&U7[]e3=batkC-+&_WbgA.bI-Au7^o133jtBcmb=oE]P\ZPKt$Rk + -+/Qu>[I6+E85pRDK/mI/$n7Tp.r-74+A3l?'rqmeF]7a4,S+WcIp:Zh.E_1oc4)_C2!Mlo + tg=ShdP&L]XM+Tn%K7Ah/GO?);8mi`p:N`SZbi#H5W?!iq]&J8aGQRQ_!#[^..SED;:aVl( + pTn3>HJLR*K+,Zfd)t_7[VZAJX"L/nU5r + L9l]>'&q'h6]g"G6(",8=$m!rmpY=r\4254_^Ai3^,JAZFWVisrb=%a+30-_$tBX_O0Td1` + OPoY+LF*P0ra-La-@!8HoI%*&kp@1!u.3J&s0Bd(q.ts'OdeCI^1^U8dKVY,)hAAKNZRBGs + *=He6Jf;CgE_&'dOY, + SbNf^F#3mF"3r?*)fS!(bq9R0hoQQ)*Go3,m$)8df`N-UF>k$lLoeqGC0*L+soKM?0-/a+a + DO&NbUcPcHZBB)Nf<'FF.=IhkAAA4#oieU>'^D<_PPFf-j<(0p..]F^'@FU$]anc/QLofs+ + PbOO:>$3+RD"FFoig@`C"LqsCoU/TXDNK!V9F/QI6?)bb;CG=1.RaZ'P6re_#X:K:Q!JdAL + $?T;"^#>7Zt7Nt*6$"0!1U@:I-WMS;$F3F+?VoFlUmngqX1o[A'q$V^9oO"oX*F9qI?r$0! + lLH[;5(sYNYh*=>kq:SAfBM((kX^9'3CZXJ15#%B.N2V.f)!jKc`7bUkenZ.>22Oq=FdauY + /[/Z"H&FP>_O9(1]kYJ9:HA + CI+YZ)%dD`+*HC'7kD&<^c-D5qB3ess0/]K:\),80CG0!1*La\Yc3)`mgNW'c + \UY@e7Fnn58hWll]lO(rfc$%(YZ:8!pX1\PbQ!:c%G\<-9*3ri/U8qEm^72Sf&*FqoW\QW^ + t7_WiQI*cod + p^"U((%WPu+.D"`dU8JNdQZ@u&a'A`an_qWf+EbKtF1e]8o(TWG5[cJFT.9$nK\29Iol#+B + 'pgqN@YIDsU>Gt[Hi_quKVd-t@Q>mhHP1Bj2[`Zj5,D"DCQ`LsrS7cZm,gJMR9K$>3;pZ;e + J3]%R8e$<%BA>jXHEn)blo*X#\l49oac8MHI?/b#7AY^`EjLa,%;sTj,)l.oEf!P$ElO8Of + opm(s>1tJXN1lm,,^,##MR_kUVf]?m^!h7.CtFZT:p^G.f@oggk5-I4G;e(/%9h];%*tlK* + m`2[mXOOC_^"oY^:.>,D-q'm^F)^+]A*?I:'X@=G&;5pPnR519a-b2hR'^pQI"o`j2U[cnD + a:>U/`5OW%Z1"h"93SE\:K\1e0!UqJ1$6?3Rkfh$_i(+$IMjGJuSFcK"hoS+%H=W+ImhSpE + &__[_I;ph*(BfG>5k]7 + );]W$2='$?>EJ0Y<.GZ^LlUB=+k=[-g`=KT^;Q,_#,h*j + nSPFgE-Z`=?T[0GPus\.:XNsk'AEC[mID\j9'^ZORWFJun2h,P_cq2GIQssc]e + =Kph7'n?YKtlZn%SJ^i/3G'hJ_cZ:;5ZTg>upGiU,:G:TF+!Y.?:]['*6VXcVaB8q$fsF06GucC;!GEh=+VGceepW9'Qn + k"74J?%[dPTHKY]pqlg^AE$X-ib64j)QS=g-DL.V0DV:+rY7,1Km+D:iY6L"fg/$#q%rCpb + ;ZcF]0l6Rk&;9F(kkblb$Ll@CcD:URR/sMQ!Uuu:%'YkSqTF^J_/P4RmhkPQ`g:MgB$&>u8 + 1O*\=Rp:fX:N&YE@DO&*t$>B"-Bg\cG\ja,c&Q0'5Qb4$oHn(Y0`7[M,"]tnF2o$*0CAcX" + 4,ED2T*F31R,snIK71s.N?nj,CBq*(!0?V[%Bu,eD&'5K + q"M(cCWl2M-P_$!R4([[t9%J:I`;&8TfXmP]TDrB18gC,]tq,+BQOjMkQE>u/G#Jsa%YPSY + [Eu?^s)/Bm,mEm"-5+BlT"&DbZnRDuEE:tdm"Hc\$&?*5S#%)@Y'liCPOFJ0gdas9?*cXmq + Xr@,`e3n + #`9#Yi-^%18^2^diqd=;;2,7>2;r8r3Cihcnck:HQ]Vkp939uEST^'oc_`+),Ap90q/i6*> + O`/,8(jT$;E*A#nP"1&-Mq#nJ[gqVX^hmUG!?*0+BIR"J@6WoPZ.ZL\ig4*j![#mUiXT0,d5Z9Bp0QSK-rBr23E;GF-/D\SMj;$>dC1ScT)L+brF+# + 3mqLu;DC7Rh!4Ih+&^93m1UD$dlB+_"]>X,dk;._!0Iu1Wq`Kl + TA'`!\CG$nS4b<5c+)42q-qU'<=DseG<+%%W1QK;cK=5>4o6,cOr/a;tE%eh#10l)Y2uTnf + 4h!8KEqg6W8+[Zi*3a6Ti>;.T>\^%sJJ(2_-X\-hGGD<'rj1;*^>s6SnBuduQuIY0li,8Fe + 2m;TVJ6O$^3h*`7O3j8R9.p@8enWild!C:md@'YN]!9bS+4b!bl5?rZ469LP1=kTj#:5#]E + p:?=!$,I1=F*`0fg9[r`2.j.:".TAc/<](CaeG;GkG!D6)23dH,V,^@"!E'XS;FH%,K\o^N + 'KDoZ;C&eNKX+=:iDRW<;C(m2[22fm+&UPW!oc&K_no[Y?.!_=`qM,[8g3aNEPp\-W + S8mV-dIb@o.FQ8`=)2.RIaA2ZY_<_Hth:LnWIACaal(0>(u>@nXRAl`8NG%5- + MDe@RAB!unr(3sOnHY=1EBNBOpQ@ikZLM57E0.;ZN')Q)qT1nbs@9*s%E@FV*,k5uDVm_^` + 2!7[llWs2>:5$Gi2.^:*l!-VpP7H(eY@+"l#2mK;HG)=e[AG#_ep8:<0oC;Q/Qa!j)?7)Eg>a-f/QWo6Z + TT&>r?tK[E!9R5?AWHDtcP>- + _;i)8^Cq:)t_XU8]V4a`*B(m"?,1LU]P%bc^qb(Y>$]pmhP&3gSDb:InGE6T(oLTtmE;V;G + 8^ESkOtV?i-T(J'+S2FYe5%F$&M&)fIInsWdCD0]PnA$O!7Xq8CS;pAQ%F5?L3-ih[$H45_ + a;uh#]s3.1#gs;P=jJ#2`%Fd?*$psRa]Q&P@I?#Q9@XEtM%!Ffdg@!B(pP@Bua%r2abCKJgP=ecVW + .hXQi/'>hjdbgBMl]pZ5,Ou4+(qeXjr0cu8#WW3T1t+[0:G]KKI/)B\fQECF3L6)\O;YTh\ + G7iRf0Q]*(pZ![0_q9<@$OB,]bH0mn%hE;M^_G^qUuC9);Q#;J"_it)u./V;e[QR99n1hV0 + UNSL#7i2I"Y@TTQ8F;1iF$EMk+!j3VgLbnopff/"j"-J9kRhQtqX`3qPC[Lq3DGo0!s@Fek + !%VHDBApY`-!$':;^TIrkA=]XQBiL`,RW-X;q08B)PCE,=%)"=B"9cXmn8"K6341$`'-XS6 + ``sboH5h]X0%qUo&]dXRWVXoECg5V6J".QXGS,'6NR:3,,,oX8g/$@ot:pI6.B;@;*XkNM8 + 3/+XjkFE*rIo6`@\p'0\H[]+GC)V_=DR(EGMSaS\RTHs0q3-0I1OHG=Rb3,a/gSQfLp(K09)!Q_C4!H7RZ<7d@GTRjVL=e7nT\H(Z=nepu@# + g]52f$[4OO]Os6\4")p6rf9qhF,$Rg>IPKo1pCd-@5:UUWD?UXFRtCjD_$caotm^=6X7E4r + LPE?(EQZh1N9kb#Y9Fdt(bZCAnK(iLl#kC=G`$"d8S]:G,>]&4IMGPHBt3b=q1j[dn-]eDU + ]qkj^=$aX^/]X(8Kg7al*(IhT-/G\8!HHO6gB*CCrX,^[6&YhTR&$MG^_,D`!&ORd)QSal- + a'6M)q.I;Xs$0]j+:K\\o@q<3eZgm#0XAC83e,>#$*_&ObPMl+HfLj1oq'p?`;JLXr.b0>U + U6I`Z(+eG2qe1SSXh!)hi=j6JUWbs=VS#[kSZ\"8e_8F2b1hKZ>g&`,6cqQ + Webj[nqYf%;[F3mCg3m8Y>]%B+>D/A!ps%.)?!H"[le"@_`uI1u>rUL-F3=?eJDKV+>//n\ + ]:bZ-SDD@OcaPpj^"m!&f"K&W(s+j$HUM.LVOUr6h07LV/Vot,hE=ro*YHgS[0KS:[h^UNj,S]5?n'#/A<3:N + PB0ZC`W0j\,>*Hkb"4>+$l8\!!%Mai,C(=!X/j]5l_>21bKpZ5XD)_BV[sH&V`V]n6#;CasEDPge + g$H.:so+/-rYdj],pV^8TK,a1d<*iT+;at,E^*.G(aRT^oCb<"jtX?7IO8-;Y2uqc>p]AV + Lt(e_2([%aq_F\j0m)b&'1#XRB6RCF:9Np0i+_l^/]LtHa05&I>$eV#4iQW'[BY*D1V_o3c + +@(_f.UX3OR4VWlc5JRn[S#cGV:k]k92JM#5C%aqs)`c&0`CHXNRYhs#Mb/Pi0AoX9-Bu.K + [?=YtmaHr[X$KD#_,MX7[/lbe+M-0T:YloXV2QqZaEI.hrE2%4_N!6?(]p*Cqfi6I@`s,Te + !eOirRI4cfKr%_jb5*;d^9,MaWZ:)dacX\sO>.)b\GY7*d7Cp*rRnP"]H`):\')7`T9f,_a + BMEq_H16`W1U%2`R5.'Yp[1F]b"Jmt)Z`BDm8P53eV50>Kk,qNuUm2nIo!L2.TS^WOWNVQY + o#7oXjBjPaPm()`bLL`'Z./Fs%9b0fKiEV'FbO1-W"j/\.b)umG>Zs,jc*)<(0,-Xf!T(!? + J+rLHC*;CAY!3qQCXh@g,7^$@G:9'JS3T#jiq#^[hYBM[e; + r\:Phe7bd2'1FlR&jl_XPh?+@T>LZ:?`231oX-:*SsR2u + Ha=Le>`BB30[fpLn<"q?N'FKSi2jS?55<9IC2CPq9jjkl?dG:%6`kLo8`TkSa'pQSjk + #6hYGq,Xc!?Q"`e>Duoi$(`* + 51K=cP.%K8IL*sH&J(P5FSrBL';"!=)#&;BWu.`IdA'VPA- + J<HQ*UEi'^mm8Kl32%*1S7@Kh.P!s?Bc:JdFal-?/k:/S&`_YKN3Vq,8!jT)U_Ia(Z + ,/fJGZPhor'$(f2FkbhM'QV:I=Q>B36(1t+egNVP0d*!4"$KejP3%LZ@Yq!R4AOe<1oNI3] + p$%m1#Y]85i']9>,T_.\d,=MDEIU`0k0aAMgfZ14DAZfo[L(<1&j?-:19qQSGA%Y)P.;4Da>i)"b2IFKbK-k5qQBJS38'L5&3TCPBOAk:VcIr" + KVt@ise(T%@)@Jd-eDHt,6>0"a'0k\cB;2bB6r8ac6DKeUTFgg)8]iVTBe:!oPGU4c3VPIH + 2&qMC[Zs`>kt*=X)5YiWR8Ol39keG+V=F\2;gO'A.,?>MPcf$T&ec]$U4'$OaK-h'F@Rg]) + QMt:i0CTM<6t]+91?*U]OiBh=J8;a`K=dXAqj)#7;bBR0d8[=>(r.QCmPX%qB_?@N/I:S=i + ak'UD/N.)a]WZFnmrJ"BM6oNJ+Q[)2T_%mp1l5:ilq;Yh(BLR9ZS?6fsclfddqI/5;X0m=i + %&7$aU=RUEHLil\,SLj(FL=L8C_d2:%uC>H"?[2/G^>0B]ND&o3ip6rgr]7js9ael8M(??c + FnSf0lGd3%Pg=rZbC2TSnG':CogWR=XmJY#8##tublbdc1h0H/Y8Nka;GC&ZLmBefP7:'#/ + H1,n3[ah\$hi#$S%kZHnpWhK">S1IaV.$n/2YgQ=.:a+*n[;P#]3MBkHS/=o^XkC@h7M-mD + O(aH74tJb1(.'%P:-\r%E\bG18ELilQ'`*4JGglfNp5t + 7jWpEboKViiNa9Zl$i/6(Dn\FMbXWnC#jjfGGKo/9[o\QGtFr474FI;[.%M^;o(Z(!P@C<\ + bTTk>"kRkf_=baE*"k?S:,1U^')fu#`0_rmSs[Y2mD7m7U!pgH!S@F'5J4Q`1TVR.+uc+6T + @l$S8_2"m$YqK#!f/Jjju*bNapB05C<4fR?TQR\Cf%FP<'E):7POcWD)V6e3 + SNiS9%^"C61JAKGIBrNP_:*_l^M9jDW4(!qeN/1pl>5:U0G]W#gG`,IbjV8`h,`:bZW_!iZ + +G.%]%U>SFD,Nn]/L5Dh:q"Vmi@h/pR^Ej>/,W)NEG;ro0-6sptm + CUI0Z!PIYkQm^HQNU"(QF)L!_n^2W_USKpRgDc$HhUi`s69nLd,RG?4Fl?&N$+9i'5`V_%3 + tj-Xq[g!KU[^[8XKUiB_+_`DERke6.HS'9d&4!ufOrHi^/r_;2FpKc-J&=m:i@>kj7Nk!\J + )PC>,Fg#O?`c^:JH4'YI<9aq)`%t$;oJPkbY=lBJK%Al_ahFoP?H2]_oD8ngm&rkoaF;g2H + ]0D*^"[18'l*7_R_,'&M3CMV:XH&DH!Au-^U]W9iAj\^J+,AN_\J*hqkC4d^9)2I+(H4;:Q + \k1^YZ^IS+`Z84,3.uaSc(Mb[@grr9Tp@YlQThX6mU4pV70g^[qCXHK^PY,JLJpYU^^/EnJ + ,?%6re^5E`Sd,Ps\Lf>*m4^bc>46g$`;qQXN056M1=OKE&e,a1fb#^)Q^ZK"aIf-l>V`66cS!>QV_u$SV\l + ^3hI)m,n"4OX1k/4 + _V6(;<\k_unr8_)TAt01!JJ63L'#;t`H2>1M%e&?m%$LSWPkRW1!rG/"Kn?dS\q]YPQ + \?V4"a%A0o147`!hm5_"u+TUTU\4Y`+g-m&ruC9ulQC9;IuoC];NPQ,h+J5a2AhFJm)Vd_$ + iXb5>C9C@Xu,h*j^(YWP%-A9,nIO\@=:b^=?J9[(\Aqa_]m`131.JI9E`L.U+<9dIiEK[*0 + uVbI$/9WT5P1n--A4A!cBa5Ggl]VW]nVSZ$>:$g=tbahJXeP"-/:+Y#;!a\?t^r4I2c;`?- + 1r.6:k/ap_9@W1HUt?: + JAjN9^j^jgqQc%cRf2or)6CmohE*_:NZc(K]GhVg!?GTckQ/u*7iI>PJC`)Pou5#'2]29;Ja`R"LufY%ST:Q6;6jooe/NE#11U"V8WNk;b^&A"Oe@I6!Z9 + ?od.id2+aSX:[JV?KTK#p?dhF:d-U_[D*6._hp;fmd_->nZl-Wl3)Y[gd(L^S7.!ig7E;49 + e9*Cmgsf2$,udT2cP8XcXWu;r9N%]@dcEF9btccYkL3.%eVb!`>@O;7*IQ`%=jX!%rXY=6,SYV')A9GfYNIP&" + aJ'AHUm<7dCOeR`cf]aE@Yi`6J`=EQ/sKlU7K%9V-scrZ3fe?lhaSVbjD&(?N/ffbqTQ!M^a + M-:X3fnEP]jZ6,TT@CQNeKqBHSJU#X`7dA=epPG1-*C7uRb%Fr>.n*Cb`LMCB%a!Y=+-RlP + E]7!X]g^mP4ao78R2_TLXEs>^`>MKumS"NSD^^>f + BUq*K\MdOkN7->#ddl"hWA[(,9!1-CRs_,)T[#/Z7l0,3eKm8`uu)S6b[tUXe5"$i?]nO'R + ?uVP9:1qJN6XKdiI5?:pqu3h[t8l<\caWWJQcHD95qKANo0UllL":$\dQJgRb]?KL;t*U+u + PJLIqs++hh#+8jt$"/2h-tVZ$c/PH-!o?76?QK@,`TZ0%&RZ@c?mZOp2=i25$f>g\-a!oY/cXc^$Xnbu? + L@UJVAWdlr*Nb;hlZ:=eJQX"HG`/kfA2BeV/'01\7/bi&Q+i]>W#`_.H7Z!iU/8TQ6>2[d>IhJQD,k%qD!!NEa;L-Wf\c_knk;e+ + >u^EBnl^*mJ:nXk$.H%U?]f>nf`^-.KXlcI[3=g>-3%9eY*s&DK@j:^*TLCF9NjgNp`V-O:iC;%1,lk/NBMTcg + @eK1bb1`kr,c>,!/_-MlFI.bpJZXR76&5ASGouc#AZ>/42lCH#]Y-;\JXD-8#C-Je9NQ,1W + [;$bf>Xc'drfV%[eA8$!CjjB6Y,uM8^hW;;8/BEEc-:&?`,!r'D#J#oIATup[VS+Fl[?b-r + -I,[]'G'.>hu_kST.h,QW"W^9AYrVTg(1nHf@5J@SAfA9+k+^*)Y95*PI%NgpK:[>OJQA&K + Kcrk0rWQmc]oID!no84P3psZt]63al_7$[di#dS*f@dCu2X;T"XSU(g1Cn50*tfQ8LM=5>Ca(o4arPod96LIl,pK*V+sfM'#IJ7cE[O\Hl85Ec.E#@VXc.ru5&FlunYZ\4#B`I9`:q#q + p4k3j-Z;5)G>7OI<87BGrA3nDL2f^qC>XZppAT;<=EcsKG]rS#kDb<7DU.p6of$R82f!SMM + "ro,F<'X_c]<;eQ10QtEFlG$2MOXJ3tQ$l6^2laIm=n=$q$)KZ/-n6m'6+E,As;A22%T>)X + +o%91Vo

k_D-#$\qfVh?K`)_-q5[6b^MnW$EIJ1Nqj"bla1-SZ$N?YLlb-7Y( + S?)1+FA5i]8bC^Ei1BrVmPi=F@EKQIcYYMk7qZ\5N#?t,Q%QGK>A]bQn1-9$\q$@:q/Id&q + G^)@I]`?)As>'O!"7ON1mnVI>oN"-,_0Z8eYGD)@\Lj`*;.8p`[m8#2;^XIoM#;(5B=!!6e'KN>#d)Z0XtI@o'+-YP7"kHl4^5DEo!#+h6V@Mc*##a^$%1RMl)B$ + 5/HE)142f+(E1<0YWBoB>7YYdf68/0L7\jFhrm#.)ugF?][PiJHlR8nM5JJK[X>eq]:7C7j + 7GJcrmQ;4KPpBeMskSZS?hh`otQ!gc"$B5oX#]gg[+2aO4q+_[]VuJX>\B$o^KPRoD\?UDc + =IEYOF(affLjNr9D%UMorb#&.B?^-;1EP"$Efp18_N6'O:LPlEgR.6>R8H'>j,N',JKI)kd + d&1(7d#XUu5:O1R/?V]8-F,:=BsYA@\F[;pqK&je<00d*9qCZ?1"dCc958b&$4.n?i)OYOs + l'T1;I$9Gc%Y)6sJOJ<:9B\Tg#j054QO[>C#c"Lq^40d#C!=l\^r)U#K%=GJ/8?V9-`_)K, + \P/hVRjSiu'',pZ[r1je]%"+c59``te*U%5$bKhI<](%^=k9tqF]_TWokRo6eP05a=ET$eV + HEN)P?Cr;/OpZ-[KVq"=0:#Cj4W^oKkB!2Q'k4rQHN3?g=BQ?D;5eISR&%87E]Dr[T1dX>Y + P+mom((nIE.?2)(&KogA*ouT]0,bH$Wr1^26n + aH!Rn;l.CGhWFf8(D4b.e`UTd:R\"N%C>("gKPT/YS$HV::1n>'cQ/"4m/##VMJ1`+[B+8V + Y1TcBRGMMR>W_qaW,J$R)3f(Y7WkqK=<@&-BmW>,`,^0J"0h9@^5K#PI)VEZ^s>VXT@,A+F + #Zt!#?O1>Z@dj",?0X0ejkdVES#Pi%4O4aGnJWV,S`2I;D + @-fe*D9='?8-&kQ9JUsV/a:*=`=h,t;gL,q+%)EH(ZH,sK$elb`CG%cUU3OE;/S*W.*E3r" + EJt\nBE=.]L>`paH7jgifhJ''-r6e5E\"T8?sLD,f,NmP"&&8fe4X^j@k^,8kmC+6RdoB:f + :0q4D)%n-a-Uj"@SA4t0BRAqR?L + 669?EkQk.K34P:Be\R<:;u"Mg1A,&YRA__fGfgmh;HDp>9/0;]_nScKWS2k025EZgN' + 3q7Sed[.^%hVKgFdcU$ZGq4)O>J5=:r-E$e.Tl_K&auON'B;H<4'FolFH5/\VSJIc:eooF) + R7A[M,GK:3Io4p"32ld&UXU'EaXU4_W0K<R_4<4NG*.C + +)="mLcW>okg9`IrIg + 3nU<]4&)e3AXO*Oc3d`Ue<';EuDQ&iZ19is,bP@QC>&WHr_R,_t"";S9:VW&LQdr8&Na,b6 + *5[57DBos(>HhQ.\*@l8QX]<*H0lH9r'-hR8KJ9cW=r#kOW>mPG6b2[:iS#6KEMZ\$4-km^ + 5dU'"DWS$\2MU>KX5nH-V7j5PK)Ah'gO516q7."Nf\F*dK:OUo[r98W37",*X'4e3/1*C$%=R5#, + bda#iHhs.Jq3NR&&e-A-^j`:Q67ds=5%+A(\iF[C#nHA>;[]kaV$:6_P8QVm$2B:TbIXRnS + 7<%WL\Z1YiSeiE$-;Uu5Yp.jAoHbW:6lAN(Bmbck^kjksIaS$\.i-^#@ + 4HMi-dr(<-H5Dt8`P]Ca@Y<`h8!37G`4bd6PMA8*J+F]haiB!)dl]jVn(s,Ap7CO4I@me5r + jU2LcZSY;^T?_7F3Aj$A`g'9Sa7D9jEdGHh0pG2oA;LlFO(iTrh#kSrenMfhehsKkK`sQH7 + 8Sr5OlEgg@=&6f1d@;h7k&E@(m<6rt!N6HH4Y1s0(_bT0/1WY!)LK6cD:STPle/H!Y;m=02DBu(B^lt":t5(%q`!1pfbW + &,;:U/M->;.6FZ8elqhg0..W`Y)O7N>ls_S&n'q]*%e%_$#VJMgn,WW/9#uZhj0"RG_uSn7 + [,oB=nrTO*b6&)_#kWnFj+:+s.tg3e6NA`)$RHMkB@RGf]S:>X%-4/I:C.JG5Z(/l%Igr+C + HUZS[/Q-/8M43Tn=&FBT)):]:6)"XK\$^O[1&.n&F]UI&E+42kn"">qW#+!;%+oC_Y152%o + G+s&@DWQ3rb=+,B01dd7-rCY3h=Lr_Eb4d7Uj/9+(-cN=\t#8'g(;m=(V0K0n\G.)9O'sVm#;.19G]_A2/!ioH4&]kH + $G#,?d]W[M3&IBAR@.NilJ$GI_nWH[eWu'fa$P@\\;%j*&0b'7ms%aRFY\6^_-nQs@;Q":E + Vd@WpI`U`C^@!blN,k3J?L/5Vkf!u=&,*=<)R<%D&r0FalrLO!'Mn8GZ4"7gCS8Oskn`A=^ + 'dt*ljY*ModkF.?$C9ZV+ + hbh0k^U.E_^L@\$SikePK.-/i/1sq!=;\Lf>pGOdP/$iM:0'P8Bb:rBgbtPqj'!V%!`@[6Y + -d6%Pn7n!Ra#&us2R@lgF-;m]!ka`-1_[PP;X!8AT]:"g1NU:FX5beU!4S/S4#>1(;gB,l; + )(r`1U>aSN\8DrcS0=5%FZslF#6aWAs+qi`DY!g;muZ>n8*E670l[S;GpJZZtgq..mku31)!FhVe7qDQUKU%&Y0]%VEV8?3>/_^%)"IWiCgP + /3E.:E;k!Q(JJo2tKCmPT<'*26UFrni4\qA6ZIMRSK#Y/*:ij`BFo0\%s,cE-j/#;gMf6WGF6"C4H]4\g-:=3"N>8@'@YQH[hX=7 + ]uV<'*'^O#&>b:pf[hdrtDl8PbKg3 + Ha1DLNu'c-b5)aP,t-BMEDQ$l3QX]26k=I&>JQ3fkMPui$2?51?PFRDp]4t4uJFQ.XN&91. + i"!^HJIhZfGdP3!QGt'W,joQQ7UL.W]7nndu=1,G?PP&4hqd&`a:%YJ?<7^Co$7$B:jn,0H + 4\FX;f,t9jZ2pb>Oo=024JA>[qXF+MfE9+Q4m@n$G)GuA + !JEJI3-a(G*\CJa<,TqH#],*=I00 + e('ASWlUuDf"?%o0'd#0<,?-Iu:=UilpM4ejVdS+.FuM,p[Ma?LYmH^@4O\"!oilST_gf.J + H5+7qFNfd=5p@QVA8l0n(/mWr/@.m\.882YbY]WF"I3qeKQ*30O?J9hDbKQj:mQGm3#-],2 + fb8HEYORJjP]a]-Yj?)FHt)Jom(B>om9Z\_:WaI'u`$HRolG>LDNf7o$L-m^H<2\JYZe&=F + 1%Sms.h$??c?n'et*AO'K('M08hNf=rg'qa`X*9/O,:'KLWFm:T3hKnT\cGJcSPVdUBY;O* + GsGZR"M8Q@E^L%s8#\D"Tnabn`j1"_D5CHXrNm="d>C)ELho+pjo93QRE3S=]i@sNotUHNg + @LioOXd#2WuOc3[:'nfCiMb"R5K(hH'pTIL,\^k3.mTD(-/oE34+$oG + ^5i;T"Fec.[da2(.1=g@74.3,0RoiG#)]C>m;h.K?Uqs(dgcYBdC'*7=#VTE%pic9k'4]!q + 20I3HJ#<\Q9=eU6[q72/RQ"'r-h?p0',E27K>VJ##n/m(+F;&tu-Tms)C)6-_remWL:k(>!H;:m0-_&Z'f5!Eq.!2)VC;JZLogWnMZu](H&`h5ql<6FqfC + qB)NEQ'Dn&#^Y0`3S$Y7'`)"es18kVRY_1e%B0,qXEt2KPE2pD[BdC26+[N!YPkh.@6q;`" + E5$Q1XQ&^0._84^UH:SXBQ@J>32egEs + WdGY5=ElgI%qZVmTa$"o'?4Qmj8i0*g,cAQ2jCQ<1_`;19-Qi(`7FXo5r&iP#-M]t<==S*. + Mtn\4nn^>&Iu48Zd>rP1Mr^jH*s]EQ++$,HHR_)rUO*$)kC+2PT5_L*ZH]Hb;k.Dm,W_`Tr + sHp,AP6,U?&_u)sA]Lg'>8&)V&cu?_EQ@#?WfXFE*r=XQ+\*^8_+dm6#bJhV)3Y + fR/#)8e.++JtK1ch5sVs]EcN;EQMsOdCbXqI%K;eS]XP`a:0QUHhGMjcc\p&b)2\2gkX&mU + WD61cjg`6>c-@pV9DYUW>s[8r0tqn^WVU/WgqD\mK:ctaP/iZi*;AsXf]p^i7cuIh[TD/SI + jJE_p.!Sgt[V!>f"]K,h$$Jd/>Q@*@&oNf\)f3c$^ba*C7uA7FOB]dsX7+r>X5a*guq-;nQ + =F\bSZ25K5ZD]Gt_==>=DK%qatWO=#D.M$FcX&Zt`nZdQ#rER>GCGGoj46o#'lE9j]r-)[c + d+4mtEA@]'j%1;E6LiCJE\(0/goZC2j++&4CO)GtZM('Igfj2q0<8HAW@GSVph>%3m*Tu/q + >X&hjSfQLa#ONAuK6i[EgA?N[@oqBt]&d5^gHH2m4eDiT^U65Bg7@[YSdXRH%A\mtd<^.76E + "C*iI>ba),Fp/+7^"H;5![h\dQ)ARq_;7MujoiA&UehrJU+$74ZL)-DLQGJ$;qsdgU>Bfh* + RGX9RKo*EAT"^&*89()$_&+#Qp"*!2Gp-\mUNNZ]XIkcC=eVFZSb?-EOM?#:3M#n.Z1\+AY + m)0Af&:q`YDSa%q/YZr?[.T5mGsB1J,$dH\DR3+ROg61n7Agn]BS#4Z]*3ACLo+5#XV?_pB)gbj)#nU!tF[Ln.^F8=)h_e/JR+6#*FSlZRW + 7^>25\`2]+bKkcquVU;<*.TK6_AtNf/Yuj%eb9&=@;mI3tp#cd3b"OFQ9SFiO + NQB^jfK9(=NC:e@[<'P\QVXj0>:]N=-Hc4!b?].lfbb5Mt8Pci1MJ?Us]ue[M`_kd7Q!qr7UM&2 + XlW5ql2B#!oI$>jo4A!k.I-c(m&X1_*]:dlQfqnFf'3oDHuscm)ZF]5ZO(d5pdN_X]?ngWm + o/:n(YR7kbW5&i\1U6PR1.,P_bfc@gM6_lT%YX2ti-N6fJf*'YGtZ81S[`sJ2fnAGUdEq7@ + JjPDVD`Yo45;R1CV;!7B9*X5"6.E + MabufH^uK35d8BhsYU]=a:m+Ebh4$2k9cU?B9s"Rl=$tP5+"l60b*cbEOa7s(4E + an,5fk`<_*_C*9ikM'c2D!W`A0"G;Gr_/1MkStXbh8Q[libS?]_jGK<[88#tr@+:(;]QJs:O01,S>,d$mrJGA^!FnE4$[b<\MumWMuJ-DdAnZY6m7e` + e'`OE1f@uNOG4%W(b)0$#?Zr,!2$.](Xb-G+q\991BZ^%)Bj-7;4+r7[c$/kb.*4GZ#i=o@ + gjQo=`pn#kG1%i`>\Y7H,iV!0W9C-hIJs6``>#CR,Y??'SM<]STr'(1EL(3.YFr+]0Ibj#a + :19O7%FQ_LoTN+DcB=cTrSa2ST88X2%g-SN7p[Y9RFr\RJ-V4[3Xn%+]eCE\A%O6oc80,_7 + _(&r%7ILHPs2)YAT!aM&QAu*2qQM7:.OB++D8]7V-H/a4C-k*?VZK(.Fl$CuWeZ!aFQ9 + 9=@PAPG8i85X[-X'(\Yc.mbpt,6qH/]5lYRS=^6OO?2>31R/klS[FUQfB=_Ea3jm$-/oD.F + ;BL5+5R\$qhOAm7!9ZB35WO]sPRD,P_a:$o@Aa44d='D*qT!bbXoa_K\LrB$mF;HE)EDQR3 + >X`g/iP06d9S@uR\BkiH*)hhmh"gCVMHH/"GA@aC)[T_5P'HR(=,pc/ + 8t6M + +9G;la]/`tT-IZc`R^$$p.-Z*g6F>R,TQVUW=FAf!(>b;(H?3"mbSdEuQD2j>]#3Z(f9s$E + Cs"fIqWe#0Irtr2ee-)&leQJjo)8+oAVkgJaX(!BQt=1hRf\&i8's=3E>b2fc*`TmB="/VWs:io9a + MM=37lm0'%D,N::^ugj$Rak8^g2DGB*;H2a,n1e2WYmQJk)*usN.6\4n_:2%,o+6Pch+)q* + K[CWPCleI5co_r@R2n'aH4En1)?Er1Umq?VsNYYUNn81_(C%#k"]Tpe;6$s$)n%KUS*U0:o + abPfCh<;rT3nrQiP'E59(J#VBl/=a;POP/*c$5%:]=Z+FoA4Q9ptn=#r>2='Sp.tr%oqK!h + lZP-QdU3[^B-(4.]CmldkanGZ)!qgXCc^.60;*ZN^YT:>F8:U]p<6g+7EX7e];^\ + [tSj*VrHoDW+Rpg9*4r(jlr^/s7_?AIP;n(%#ZLWB@c$hF=)dI)L.jStfAke@Ms^PhVH_rj + 86!Bs0J5GS:oZi7Y.!'\lr5We6r/-!A#"i'C#^q:"=bP4>5$UBXV5TC4uoEi:%d(j`05njk + pbP=BX'YGt1526ac`"bL1&AU+86)4HFHk&Ga*5F*/5qF*De/#dr)*mO460oIU/0D[O(rBf/ + ^dJ5i>Tc?Q(Vi\U(^T@^au2(AknDN4-n/(AZ1#%;_A0C@Q##6`8i8-:7'qg`ZtWJr4%VecW + [P-KWY0>>8slP4@[ETK6V9*`3RFek0WNNi,`8LcN'P%MRZJ_k`&'ra_42m!Ng(_P7*4c4ns + Q@38&G/I,6@k`]KJXq/g._n+52mrqBEq4/.<76FDA)QLch8OPsM6P9 + Mj<*UcM0asjT78.&6"AM7*@4!6pSGYsu4?KMdmR;4Z7G:h\_==9o>t.*T`U#q2A7.g$A=o$ + @7)WJ%RIit%;B\_A`,nVj*+D@$;`&;i,RRL#'PBq#F2lp*(T_dKdUC-pFN0Pia#%*>;1b$# + HUm^U+?XjiGHN#06S3'T4d(%e.`9GBf\d6-3Z8b+(9SCDZXLl[jb=W2e6B&gu`6#c + !`6A.Z9>%]+eAP%&^s(:Nbs]k$jMoFQ_bGg&9H;a14;kujeP%7>9>o`3>hI:HiQVKM9jH`& + Pf:eh`Bk:"^]`7`1u1m-jikC$cG\niUu"itl,%PU,'k^MU+">9obhR!$Yp#'iZL!t5dH"_% + C6GEK,:d!&1ca"*$L7q,l4VWK=nf_UcYnZ$sgs@M)rjG84kU.K`jqoKh89c-IXuM6u#<;?V + hXo8JH!\gP88;!lJK)d)8sU]S2Tn@F4XI`\IfrCg>&@#SGgX/fbWoe68oJD935$a-uY34W2 + :FB@17=7foMYoi)7r(&N@7`]1/scq;$3L0LpeRf3 + iqTpcshS42"MoQSKa%s,+U"cNEc`(?IcGee]hJGSR9q\-WS\$ed05pX^tNR>7$9me_#`/rG + #@ZCK8&`eu``q%9U/(B%@]/,+W[R]kCH[Bi[5df*uBCok`4pG#m7cIb>>9k,7 + C1YNT32n[>4%7%ICeA"f8A-]\:&jgNAb7h6GYhFP)#Cg[2"CmCD!]]%fG_gb + $'AKs00(TNZc_>]mj7or?dFY?U+J=08.Nc+Vo?\6P$8h#2kd=d@;oZd2?F8PN2AH8&:W1#7 + gZ`C=Jmm4@iSk/PSa^*[118Ze@SQ737IJ + /qn)G0B@%-QE2BlJY'a[hjMQ#;si3TcBq8@.i<7O7mNB8sQb>fN?eRdXgRj=CZ:K!`ghBN. + G$MHl=``'SCTB(TkL-K/6HfM(4jQb<+*^*kh39;E?A,]Ec@Sc)cjC:pS)obss<]8huG@_+d + AK:[+/U&4@KnLJG$&7o''<[oLnQA57(+P3t.BA`bn"kTj6jrd + *%b<1=Y:B'ggV*c5QhK4;e7B#t$cSc*1@=(nIjkUqTq[!(Q6Lh7tSjj&rM`fX6/*RlugAJP + eT[RK;$G%Kfa@Kq9pes7;1B]oH#I=2L?SVikcT;l`]<,%RcGL + @1Y(,WNTF\G&7f>g6qi'pnolonRUd^GBWCmGRd.n4h^T + KPQ0_iD-$*-9^\OG3PU&j_f5)<_mFPFlp]=C6io'VRblu^hRc$l.+JL%Y$,1+_[1?Cq3/RQ + ;DDSB'L/(D$*)g?F]@IK@7KFkml5-:3CDc_!NF)&Jj$`mYL8-`GN'-C!P>n,Kue:]B,?kje + enl*nP)F\)c]+mV]u%[[n,'hWIYklAgti?H6gKc=rSa_s + (]mmbCcQL!e4^[?j7kB:Y,VK2&nqX0sPkr/J%>lWdQETP]`arKOm=PK&G,_>Sqc&U6E1[2F + p=8UYf'lHBlmETfI`CbUkO99..bi0S7emo;lZ%[GDf6VY:>BP/476FOhPVdk%kMMYiG^>&D + &4bd7iUZa+)[,mn`L!oT)Whd1@5SYEi/)9H>9`Dn8Y&BD(c1c7lbWd3ceWen/d*tEA@&$05 + uBbF5JV:5:'tQ/?=NI/`.c_010hnMt:"(o8[JTG5u_d#3`LXdI^0(G*D%&2t??/n95oEs%N + %I:%^G?o/BYA#4C<4nap0mkBANMp47dR;;FGAfirrmEYpMSk4nW-gpf1RTS-.LlPE5bW + /Nt(f\%ass8RFV:P+)>j7^<+s-nLnjo[^7l#1uCeI-YeD.:3$\Ai9RheoU:a%2.?5ciTc0g + j\]r?P'V9=Jo;Dto/D'k;ObT@-;_)>p.']gcX$;WmTp>#/%5dt(PNH>LhoROB=EH0$Oi1.6 + =Wf?o=ggG08lW=L%E&_h9D..hh_'J67LkBpqM=I58chTJbQ?1dr1V!51Bs9P3VJCB*WPI(- + l'TIs4\8H%%5gQ_\jYp/IZXpO:e>P-"HAH?_Z$n]-O_D>.#da6g(4qEIgCn@B>P$]P'g$HP_q,J%b]a>'5^dHM;IW5>1lGIJan + YG&YSqh!<-_i'NY.bM8i9j;Z60\NGPYcJQd],hC2h`BWN#lLd^5V336FB)hc/)&a6$:%1\CfUf)G:P#3B\aJ?-;7#j,BQ;& + ND#rLd]%$JkFZT4!LFV]d.kHfIKif?3ea5s[c*Cb$$OAhkG8sL`m9UpVNL2'_'UFMMX.X#P + PqR]Lg>AD^!Q'Ssn\_:onS&L-R@\mE"f;o/I"b4AHE0u#2-OYjN@kh*@L-HuEb%,P'4LSlW + S'0u9=mY:#7A8.C1tk)VQVjg6CNV]:B#@oZg2-K;/]QC`\(ttHS,M4LIDXo]ptT1G':$W"n + oOL"jPC1WN'TKF?Gp7Qe=$"USY$-g^Z+L&Hes6"Vp,2.e\0er?Y@E'l2?%$c\rsLir/\Rb6 + .>1^[MX7YJ9QgoJ7X%1`6H_YWO!5_9e\g"[Ohq/F,WaH6W_`&H"[&__A/X&];u^2\a38>Yb + esOQ9[a5nT&U&Ohg];&-tK"MZJ3dde=r8^SgH2pIN8f/ZS^7*da9Yr'op:U@D]3R?oR + m6o53I01V<'NFrrb]Gu%5#N)rbqW%:[2VJ2FF?/DcBB6u-Ie:hY=qp&m8$SNPSIOiF7)POj7ZfYb[V?-*"*Lu6Mg7==0``ZL?gn8;NejgZPs!BdNV6'jgX%PKF + tmfl\RWL5YKOlq"I&@H0`KDh;!39G@JB:-tU!baG4EN!R)QB@6hqHPhRkZM@Ak\./cM3@/6 + /o:2pn$\td62O\GZ"(9b07IIoIR002>IICYDk#;OWTIDKY6=2s-?HXR7'Od + B;XPT/iPn*/5K$B6tu=^[O2>"it4:/iUlC\c3J2mk4>.ctPBC!RGW=s5@Z0Y>ecE8nJcCfiq`A17BQDm%oMcbT"f'hF+#uilLnP=ceOe6\@uK.on<7_"9o@6?f5%1XDuaQc?gbHQk"SbYRmblO94ZN4b)k$>'AgeP63] + !`(,1LLQ1'JRT#Ic(R`0kZWmISGA7jDNV,*^MJ7D\&E.j]S"P><5h6&9dA>T@C;EfN?#pYa + pS`4g6Y(/@4'K*gX]`^d=0A]SQT&=r0dRZ@@lbGbFs?f\GPP=ZY2\:lCV>D?iHg"aP)6RX; + R^m\39/C$/s%qH@bRPL%0b5!%rV8I).'5g36WI6HJ%"EQ)``k;LOUJ$cBog\/+jSd.4=G$! + T9E:g1T>F[h^g7F&f*N*3BKZ2`,_MLY'J6Yh[V&g$)12)oYel?9P$nqUFdCD[b0`pkR>b0F + GaX-[DO?U4:Z+iU4Z!^jT-VY7[Z)1`4NS4oNCGZUo4&7Sk.$uO'H"!e;f12W]:fk[/d(d7\ + gVs3>\(L@$FGN0qX5*,blUXCD->YeOj7L-)EJ-XdOC_l-?uB9kU::7NG0+T1J7(m]R02r^] + )R@:r#iL6b;U<%>F@>dZ2f<\C&e=f5NhZk]4;R_DcL_.MZ.Ha/k0DV=4[8n_d&Lc0F?dMlG + _k^?m8eG@)1WVoI=Pe;4+?JScm)c!I,ZFDaNiQ$6d2^>$pYYLM6c6k25/N(DQ(;A=$MLTNq + iVTr\p2=)kO'sI'-pDfWk[$?99.le!Z54jB;+jhOC%;@CpNj&M$QX6UNU"6%8kV/0STAYJ" + benDlZNhF^,7/H[fMR%4f#1du + iA]Q[R[+(4U/_MVX]L6K1-k[We=o`>^m`E:*b"jd,Ae>)-F!B1#,^jqX;Rs,-7"O`)QY5he + B`KQ7NO.:788jr2!EA'7BJ\>M="G#+0:XiU2ZmW7PQpP/4`;nR$,6E;EH\7B*THWX_2NZ?? + O'NR'RfVMJWI=76rjt#(F`bF`ZCkgNN%dN[r3K1YX,%:8cEE:d=j*`L8.HQ\K]B8J-.udr= + m,?dm_T)%MeI0o6r6%2(i_aD/_JfgeXh7/P[[lHt/%(f']YBAVhG;CrcNiRE_Ot0bSR_Ge8 + a!/Rg[^qn`GuJlhH%M;oj3^4lP7=nN!O/;B<]?mX%NUT%[K(qt3`I)$5Se + eo^pE)38qIO1"4`AgB._!*:%umhV2mr>mo9'"?bNo0,E;EpOl@'8gh7i@Ip7=A>r?'Gc^"9 + /f%smnehX;!+pP#L>O7rKi\lD2/q9MUg0*qW4)Z,T!!@TT!O9#EDeH)lCnZP"RO5g<'d.bm + :q^'JfO=^E-]VR8Hn1Y8LR_Zu(C#.VhF + NbC+r#V:j1;[Ag"=le#Z=;O + N9JefR(WK%-`l)8QuY.`:(tKgPV5hE(H!cmVG_\F&#'QYk[;)$P2aQ#Z0$oVWe!k&Ibgr&T + G>;#tY\b@et'ikV3e]d4FJk#d]X&&huliYl,7*!>2Bk6t1sl!c@W:$iE%l>' + 5F'o2oTYeLmVFJFs]%oIq3d:1rSJhN>G?C4#)j'k^=A + sVRoM:"pm4"9N;sLh\=J/)_=PqdEI!"R2;eL%.Rg9%IU^qUDo=B@+!./0uY.Ed24@^*`/eB + ,4%)ea=\g(.q7$P6Js8Dj!$gC/]-TmK%;QWZnj*;gJJI=1-FYgcmdu82j,X=dMgMC=!@-(- + ZUgs;G8RG0d:+S-"=&(128][E?p]W-=^[8&nNCF>Vu"o-_c)<@qd=]Cb0&C.2&$t;GSMm?7 + h=Y,r-8dZA0mWN@GQp,BB\1&htnh6R\*B-^)S#ZB$I*:cQnD.Pf7",:b2u[4Ob(/Wqb=P/S + s"Te/%R1fE?[P(P7Tq^XGL/lMKu'+$B+PqDR=0[e3!Eu$M$r@"sA1(rP"F!i;U.PUH?1"-. + TF"]>TO#'-41Qrb&;G/hZq)#Dg1D<,1;Ze`E\Lu?023V<(_RVL5)(r(`+u1?r&:4^9diWGI + %b$+;Y/mr('TA1c'J#>u0V2_BUCf69lS,DmMTZkbqS98i(NHVo8eBqGii@(F*saqiBYup;! + 86n-4clhL':TnOoT#onag'e@&\gK/[j3\t+-Ba:;pN!k'g.\cLND[bd)Mfh4F?ZR=)`j3^7MC\L;)pnB"$^eVjf1s?e*B'):0/IN$o"?hW=&T1k5ZGg^P + MWFEjY-4"+Z2>]Ea(F(4YF%>))no"R+-rA:pC=Y + iW,20i:[CGf#m<-;DHFb*KAD-1qa=1,/4o!_XE+^&re;g!LnQ'#<-,?FJo1XbMjok@R(#@) + E!-C*1_oeTl2/R.eh>I/HYeY=9&h-6/\?F@7FQ1J6\hd2LD@+ES023hTN$"9*O@.fLap*;R + SjsbHp03)X9((jhQ)e!612g$HR%B`+'HL2$_c`,H+EG1R(aF0%TAkj&C0$_d!HO:873jhXi + F\u,>53u%G?>^8_m];#kMI'f\54#r)et6ZbFW5/K#Cj+<>[_sNd]klgaE&RZ02Xt[Nb8 + i1LDg)q9(>E_n'6(CWm6XBZf+2m[[;bXR$F1mtj`f3;FZ>[u0UKMn'"OpQ^YS$"`k + (HYl236msQ1O)V+EOg+8=V$k.mW9E)Of.N,H+T9NK9dCI,T4ViH-5<\Xdp>.SQT$Pq-0)/)jWDTQ=pMm=RDB>EL0BqAB + M;TNYjlKN>:OREK>EJDRW[IReUMXVVncWn\ + 99mQ#%t\<09\D1&DiRAN+T>#cgD=Et]:Nga=N>%1HPb2N8lPnBbl=0 + rFf:QIWOUW\(p&SaaeojI5['k[C1;X\DX+MpVL#G1M![tphc.eVW[J1RD25&.Xd^2-,hc0b + HFZL+G)K)[j=P3aD5;;8:TgcP9,-?eR_J&#[71inW;>\K]*G:=gT4S]Fr?>^Q;E0Q%Bqm!X + :uJT],RTV,^M<%Xp;]SWiqGOV6dcXmMWX"';c^)YSp6=MUeqr$V@_4^UnE0qY^u;?*VN/ZI@L8>D! + A(LT:Nt\D%fp[_KE,eY^E#Y4hRpUT!J1B4o7!M7EXN=sXU2*D;:;U$T+Z]5aRFd5jYT_/O_ + d.bh[a'l"]*Ek=9@H7>h_F_r)dX8=N*Z^%>R'uJ_I\@_"9gbrKYMjJ\u_o=(B'NKc!O,uH" + [l\6@8GgA.hEDk,;?h9PW+hn$=2ql"`qt&"RaJ[X[7`6b[6!-b<>?&4W-)6eZoZORI$:[:T + !b]0*DqS@?"u];/]H)-k(n4HHcfZ,aGfbo>9:mU=*$J]aHuQhj'?g8 + iABZcF(U9`3Mg37#p!#KD/iW#TZ18:SZBX1/!k'D*lsq6R]eqj#Yc_Rslt]a6u/S]B"jaf3 + n;ql.!:4363tb4JubHLnb^(Vpo0A_a-,g1e.qg!3k(YhR^L4D@Yu%WbnhdiA8$*&G$Nc`^U + @ao(ZD.*^D89;u-H;-b3Y3tJZf>%8S,g'Bjq9LIBZ;*g^L[2\Y/P_P$@&3LjG^\eOs*!Jh, + LVUETU3upaLnhe]c/1W$hMAqk?%^ho]A)&nZ9@SLeKN_=Z+aCii#;XHm^]nl);JLXB7)_=- + ahp(S`/BdcFn_e<&r$j*ccZRe.K+BPSej4IFC3Mds>*&>s6IPRFU,=\6GZcI@Ik5W374uWE + XeMILkS2[Fp!lgc[)'^)t"9=h>Z!kWP3^3:#`KNP_-Vf,QI%h5e41S]5!0fH)p8I#Hu*Xm! + @reNPM&4pem,Ms=R%eR$/:SPS;fbNp9eVk,X+rYsr'NRId?NP7XDS]Bet@Hh'?k'M7453^< + UiU?apmX6D6h*]:iHgr,Elb7G&>lqOj"m0*QlTFFqITO4q-gdM)mGA06qp4WC[EkGTn(kJ2 + 5*NotXIH-K)o_M89lHSHp:Xo#HW33G>J)%J^)j?Bj44*8JZP?NS%Mhi5HXh>2l + +/Lj`hs:+oqXo!!!Q),SCOiKL'!B3,CJb%7!]Gc^nPqn"R]n-[)/nblNN$D/$_f\1s2'*;dHq?D6ul6@`pR/hsaX6V]:DS7OFJ![nuY(r1:29R\sII2*CkJ7<#hR[T[s2%rZlt> + icQ6O/AX)8F#,U.bd0^h2,1DNh_n4A4$=:^:94gZ7BNp>lbb3Y + UtNF;`*/6Z0Z6#W05*af+AWY=ogHOCSG)l^dAuq0^J0A^ZH):,+\#:'m/[1+nUn/?302k_e + C"[dI,\)PP)iVkoF"Xk<78]p<71B@1??Ibg?e^`ZrM*3cIK=f:!i@BHVi/YAW^KS;Oq#Z:m + GUEAl.!BGt?XGZ8YZbYiUd=d^E/,<[lU:^JnGm"h(74[Hr$#06]"Ysijo&lB2X&)[A[L. + ())O3>2@l.?oG@C*TMCA#s>^Z*h*pRG1KNGBmEb$Y%*bmiP.)CV#.^JX>V#Ym9/5$,>,0sP + q1&d*4nU3En%K1b<..-p%&fmY1>%c#=?RTP35KfFT#98eo`I"LXUBoGA#Cu4X7Af;gkQJfl + jJ.;;?=8s*NUIW-<'tGWn4pj*7-PnuQ!h[diar*H + #3o6n@1Z17ZS+2.DrI[@P9qk#P+SUDTtXaUf2qS3pHpYXI%Hdd;.:V8Lp%#V6:u79rQ$8i,a;&uf1PI;5U@d=k2[aLF3-%#-,dO='+B;+Ku + -A:aT@i7r,Io4[Q;O01FD2TSWjb-;+^RR-tO[%PgZF,b.1A",uh"4'#%L@l"M\[XL"5@k$1 + QiD_G\O^6b#^@8%Pq0IAWoR.D)(9Y$EEAk^O=PY]8L[(kVKEB)cg"S%.;^-(<@X*[aH'*[<@Wp6Jq6fLP>S?n8? + 4U?XjotGLU3!_AXZE!5Llc\\GGX:n?#-0R:!( + Do=IU1;/9QhcaLS)`6>kS@bB,6*_.fIjA>'RfifFPDo[F([*p3-KJ":YhWpb&n% + 3[gn%ljdSeA@=_NK=)/CZQ9cd2fc'a$e1BjnLC9]p]rPLWmJA>qLUdFeCH$16FhY=BnY]M? + CNE155tL5=d(L\oUTQc4\2S-1gW%$gY5u/B7Zu4[$dOiP9rU>n>[s"mP'G]G_'BO\[[Z9rgr$@Ko`Ws + ,RIbWc7;3W0:!P6quaBb==jRG,\bF(R4*m>XEZDL+(=a9GFI'nGZFimr*Eo,j.'9J+KN/P` + t!(XD_?"@5fS9cNp@N7`sX9@p\\gc$?KZ.7SY*LUs)b_ufg>DKkGK!2idcNZiF7Xsb]QqgZ + WsmIK(QNf/)=b)slpSqfVKBHHZ+4F^jdEC5LWA+++mWo-MRE\s+u[VNB!sXrD(]`Y-XQ%M* + E6B'Q.aF:jIQ0&4>?lKDUA]m + pWJ6prB*D/@F!I^_LFe/7?-A?B@HoprDb>2SRLb3qr%VRBJOm=Q5hk>j!.7IVe + `YEB=PJD+eTRE;nK5Rk'Y:Sh\-,2]HV':EUR)>ZSCgIPQ;;/7c)t\+OX4BY,!)D1-K@\$kS + Tg]ooZ]Xu:0p;Z7n2f/-cL!I=hID"]:2JmY>E(==qmq-0CK+qcc + WFO+`VY\AeD=96Cd("%>1.3WMT;l@:JZn^:U7Pj$Y!C:Z-3!qQ1Nk]Fn9O!LbTuIe6_aCq6 + QF=p0Y]%4IqB]&!-$s%ncG!BBGF2#P:.(23JD@7eSG2ffedfp\b1qC!XMg^C)jqHbZhs]h- + @,(Yn_/YELf(@DY/PniF,K4sT\`1Pn.[SZoHp4V;HnX7`aHW3'hi4i;ib4*Zi3d&qV`\W]u + We"OPr)aB7N\Qf7u$Q?32%2l5P03e.`6NOn'N\;>U^0Bt9di:M,iO8'HS&>NH4)qfHO?R1n + ^'kL_oC,"J+$nr1[tu6:Rg?L(kJAItQ`MF5j4Y/5$o*<,>G + drC^1`=;h12_u#,/[YCX?4RX%`C;f1K`afal6uBk9BYssH_0H[6$pV?*qRoj:6%iSa$o#&Y!']ua`QSWWFC^8& + =H.,c\"KffgRuU1(;PlD4L5YdoMS0u.M3YA5@f1.Cjn]EL.DF[_J=\9F.(!HF@'Ia`,'T]R + uabKLdrun`OmWhP^>ke\&""faF"E<9INJ;DO<8I8K,dmCe-cQB#N1k2nRF.b]QA/2+Tdna@ + U6]lj="B\A>tE]?3\m&SrE@!5u.J]P3g"[6uHt9"N8>$VW*cJ]gHfP:Sb0Z3m`47nE[C_"!9Dl]:!P,= + j>>.H&99bPN,fi.`_Fr:gR[gt"dCPXFd*'h8S*V*="O3;(b=s5obqZ!M[#%dO.AY/j5Y`Cn[,oi(fB9ae\c)%Y3@'%T3-eeM,Ft;5#]K@dQfulhm7CE?'NV^WA*Igi; + ^rPa!PAnt'TaK0miQGAXg$"_8NLs=GIT?Pi[g(g14=ZkE/W';75g#]5;D + 6#h='ir7qg3o[KlrR>t%oU>gg=\F>?)QF?W7LX<>:lBsFe;O=5eWGkg3'Q&FUV;^/4]ZLd2 + fMsID8EL'\faigN?iU\FWq$]j)S\>V-Ik4el6CbLs#4>>1UBV5[]7ZWq(K;l..^U@bE=URbM`nfb+>6T%Pjl"q + ]a^-:2?8]Z*-0j96hnGr<>SYt!4fg9)Z&d%%/$= + Rrm@GVj[mMi*&Y,V[EW=$,73]H#,>iH*FTp?e$/g@6s.O&aUimo!I/gfP+/7B#7@bqZ*lEB + 2fZmk\YVkPkS3jdo;LoYtZW6R,nmO7%?XlG$1Yt\--2/"Z..V4r%L#RH5bjj/uNs%N$L@9P(@JA+D!W[Uj!0/nFrojb@>X.\:1b. + k,@+T"\ZE*[0Z0C`b!@.m?hm2AYH[B&\P_A@a9C4G*QatP[sK&BkBNj^/LVl\;CDKC"493/?6l*>qnb,fP:p6p7MduXukm + I)J$-DNL3Q@auN0p@7#(J%I@4THdW%V?m))mV1GOmr)aD`=KGP/`K8VM+gRE9eqUNKb3*Ol + 1tG-t^qKF,?#sbX[q`@]CAMb`;-p46fc3+**J&&:1rMSnlL)#L(Au8DT%l6&Z401iBJW# + 73!^T/6Z3&Cp77-^3"&Lc6]VB>2P#Z=$ZN>@E/+VAmfsYI%$Kc^E3B@_VZZH:&FgafE:C"! + fS/g](\(9$-N;=sl^0aCEo#?(2L7rp=[EG&-kIm3H?6ufCrF[oR,=$C_U8Thd>oTod + TQTW08;KDe+F0@EBpKd=8@[b=dp.o+>Db>1s9;BO-p!7@G%q,(^2g.,rp%N'?hemNH:NG&2 + p48.pB4^fr:@oW@G7Qi\+'SB9>TF=jpJ$Y?m7R+kHh[hac6mH$=(Cu[C@mQcp2=U3VE\gGdhL5Vfd5CEd1*9E^rap:N:Q=F84(?Ei4e?GC + FTtHZnk7G5jJpR>5efGOY=HmtDig$cBlg^2LH\ZtVC5DVlu[Q,Nr6q!:r-%3B*^B5`6nDQ- + ?K8#MF0o2/^?f3Z"6rpOrXe^TQUec*[;(TVLT?>p,=(@?ZTVmFkVlo6F-qgEP_?bA`![VD_ + PhtOeN(?bS`_>F8Ldndf,%#(b3WU)P)lA*=FLJH:4^MY.)))&4A`q!s?c>`3CRO];Q\CjF?9X1NFT3:CR(pdG.Vj_<,>XHKHdm>Y?`b>$H0Br + G/795eCsS.%t)9%D0X6(+rbdDcnACGQ;Z+QY$\:'qfM]ASWdUS=P93k0n#]lV,VhKZY>WMh + lO)X2Fi1NeQ;Ish@;VUA>jE^'29NKVlo1MZb-3+%\mjeF1Y8?4O7T8gf#maC_'%HVmuCW0V + &,@6Z)0bqO&F3/).,IrNqsg:Fj$#VCjBRpUt=](r^Ka70>D + a4Fl+nY7sn[`=#'\c9nl]+!&9t6uOE@6&]WJ6\.D8BE,5a@Gb_$No0<<=`bVG,].S[1d + /N?*0)ui(B;fou@7ZJ.+1/4ld'-e\LSFm=^;_$#c8b9S?\#E'Fd,$1n.WHmt&mY<#[SbNSS + u4Ep1nE+C2*1,(cMANZ]T^RU,.4hIdnE3W%#E];&1hTT:R+nPnQ1i`(C8B'HmqE>'1Ie>`K + gZF;9[OB#l$t*RV,_HG$9p@g@b(2l,E;]m9SA)Hp6duDG6<93OHbr8'Y%<\OORT!aBP:=!` + HjagSLG"3XcRnLdVc9uD,3Qh.o4$CCtUPe\r`Y(^1CX6P26_%jYm*f@UHEHhUFSD + j.;!>;>gfS>.N4OmH:\@D6$t]($Ct9piT)U0X16!>3q]#V-trZm^6Y&q)-?oCcPLT&EB*h? + aOSf8:0V3**aCQ!:J)'b6.%.=PJqi'pdSG5O$*+*!Ng2Js>Qhu# + u!FRX`3*mQ(k9_QBrsViUM@$r>8.r9hdh(X)/XDh7g<(64:.6ecZtNW1s + BEo:g(Lc=(o3R1SB7on_(KR]]:2.o4F$uVmD.% + #p9!BC9$CI01P+5TZ`XPYhBT#pI<% + Ek5VFE7AY,S?H#FHt5^"@B+gE=n-DA(7l$.*g)q$93.7;*#Y*m?FbZYZHB=W1A$KX&IHn\S + !29-"]@XIp.o+in!''D*=lt(T#670f$M)_9[n;+BlrkV[8-_ieXPUJ"=Yo0)j*I<$fDfRoV + M/rfrFR!to<^fMk37m0.o71iuSkjXAXXJ!gU$uql7p4"s=r\3L;(WX4PD_okF3LEH;-:S(O + XR$5-&3*/MGQ0+'^5b&SL1(767Q%^BL>abVJ78N))2k:SE$9,rXVH=jWIBAq*26$##PY_/8 + 1RNP-Y#K;JK`^P#MFX<([p#WF$%um5(6>*=GB.RiW4'^k + k1XUCFD`D2BX_a@?+[@`/oh!)[uTb0qos6N[H+pnB(OjE_g$)Om(QPupthM!HLD%5\!Ohj? + ]30U01EIc=,Qh1gQ-J/Q3+e0rod`/EIdOb"h6KDmU83UKWo>1\C]U>?`XWh/PZVgpdYj'S3 + )OGL*FRGVX`V]:PLK^%`(4q$it^Y[Je)>Y9W,@"c" + h87_Y5d)WRoqNcG=laVb=&j6R#9nGX?JfbYuEC]frD(1>:1%g;#g\Wemf=j8sn/8!,@SMLa + =anZ;mkD\#Gh\[H*K;#qjoL_m4HCADsmBq.LbcdSHo.B)Of[[.^3C + )NR\Z>t(a#-E#BtVcIPl?)mRHXk"E:=_h;QXnAR$f%T:nCV>/![KaFt3r`W)?&>i[*m*'h. + qEJ0S[3Kobh?8cC$cq?[J%&^g:M9>D9]JtG6Lq!G2"N[rQUn;Id+k!UNQ!0'SNr=hq7bF4_ + lV)]!K,ia'!1*Deuns1$8#T]C1&Yh*]"6m_%EP-T^VN&Y(f2s4qp@LLr.6^p1?VhmXPWC(; + >X1'\l[>]4rSN^'(ZmW@JlUQTA`:V_%C>ig7SQKi?p\b7C,iB$FeE"6llH+rb0]ZZH.c;W+ + N-Pto*?_(ZoO4-(t"mLE8U@V-PeN-K(k^>g]oq&Y.qN!`!h,c[\IP]W$VTS/9K4f,9!b:j@ + R3d/"Ip(Ba3>Ki!,7b,471(\4[&_KS.qY!sKC;n.&XT%&VKP"i2aV=d,d9oW:3ic0,"Y?'OF5SnX&FHH++q\oc?/'kZ(rd + p\#C8!7e8!EOF2qlnoQSm^6qQHqJo`#(9Q#GRTqnIg3Dj9pU&sI7@VWnMd0CGpf<2Zc66gD>bDX=9V.\@7 + "oIl0pc[,X?J>T@>!6UZd-mJ>fcN13Rp[?%NcVg-l%f(&VYsN-rO!OF\&H#=mqaaV80;>EW + '_3]$#*7]=bpNH>jSO^A=R^M:&%;J`qO/mk;M7B&l1j[5LqYGTQk&E/.QjKJPc8QuVoPJ"0 + *H-)[1#KA:(YE9"]4`.B*:f7Vo^PZ$S)O&K!5fA#uK9UlSAUGMLM:!qWa`PcqOt)r;NY>%o + ?I#$GrF7MOVs6O6W=C%ot9d6A+dsoV]d5`n9mE,8(MBooUXm:giks4VJC`Og&Z';'N.sNrZ + A`Y4'AcagD:+.0h;(X%2#N:u;^p)%!L;#r)kqDdA56m86*K(pTb9I9iP*>G!(_B0!n[B6)]ae[<+ + /H^q.;aX0OkHI*43nP^P"R2npn*R?_jn:;k3g- + W$"pE^P%DlFh`Pm9rArbm-*b-I[3m*Ll,o]htZ-E`>*nHG%J!0Q4h;<8]//IepU'QIH6&s! + 7&^FHMC+_]CIdD6r[=!5qgD".lQn1>Y9P."7/&1D0?d.1Ag.h:i7(im(c;=sW]]+IL3(DBFpduIdVR5m!O0Tm8tnT,PR. + iU32UJ[^<1Mn\)E<5OA,D2/eALf^d-M\/G,Z(ZiNq"mQ:BSVN<=]6=10c94[\@B$HP0dRn` + M7A3h9r];DYE]&):c[J=Nk>(.hIt`;pP=f.D&?W[/6D'?r?g!C4t.)KNW#;^k"r_[[2c5u^ + 3%Zai#mfgPHTp!Z2dD[Ac%G#4c,72#\[FDP!a5;996/$sX`nP)?7C,f0 + q/^oD$ZqX"gUGVV/7tkY5FEG-/@mu;!75CH4<1?Mej"n'F8$DGVB$s?E\Opt.Kgl5?EfgW, + G>2&52A;2r1fmGZF!lY(8gW"Xds4-!^b2UY(=SaB'SB*/m4i_Q7Pt-1oU\@5rCBnM/(Ds=V + mK/TcPuML:%XK>[!nO1#>t,a9s_l,eK7a&*pqre-B/#NmKo\;pD](a + YFT9?KJorhP;Bh:1u<:uS_EMZ;W`EZEn?ErBnZQq^l`rZl,'NOC#Q2r(M9j]0R?ZjsgD_?) + GdpOn?6dn,*Q'kr8q&jhs@+.hXAtrfM]j.l%=]PK2e[%`1TjH;%@TBHq[GPW-M3oaO@_k@jQH>aBLV<`*S>BbIbV4 + SFJC('S;-\SDo>A$mUsQA9!/*C9Cq?5>P.[Uj4I,=/5Q$0$51d%iGX@9`4@2:gqrK-3GQoV + aVS/p@/GpA.idC3hHX,Smh:[F8,0A;;j8EN.;SYpN=(eLOIS!d?.+OS^Hjr[ToOXnODg0C* + W,f*SYHB@f4dG8c9+q/f[mFZ1X(QVL]t0llk?Fa$D:aO>8**eRN]F8($%O^/Qc@/[HP'1ZP + UQ[Oad\H1lm1k(QijlCNW]90d?R>-:N6D[#hK + S@fRE[UcJYP)LJ6J:Mg?;WB'.3YbG,-38j,*isj)l.qmfM%BDOe^rsm\$].sRIX:B?12KeM + c"F)GcH/i*`X[U=DF3L/?J^W\XfPU+qRY[h]rns+ko.phNmcoJp<21V`]E8$]%O9i7Bh*hl + gE'EHQ01AEpXePYthR-mO$"Yo];P;YZigIgBu7g3O67[ZTB>9:4]^2)XU`=`u>&dc2G$9]] + K^Y[9I"Cg>00KBAq(L\B:^r5:p6Bq]3?g\%5bn].Mb%D"Xk;JZMafR+(M&4$0`pA\WS+ZYjK + b)o'.W@D2QY^\b"F>HP1MYfU*6]3B7?*##AWTYT>&l.dYq41i=60#(WEiLBo2Rr,b72mD'@ + ZlDTC>Re4@:UiLl`7ta242ns>/$V3D^"ZVq]9TW@+2XOP_;#gm]Mlg3;oH;'`k31rS7T[PM + ne%U`*@9=S1Vh;Fi[ei`bk=`*.uAgPK,e\add4_]6h]UWQP^*seB)Jokq"'Ah6B"=m:2\hako03PTcrs + l+H0I^2oqo;`7(#0Q#i3lcD:;c8T,JlH*C!<46dm&FF`P^t2LdJC/Q3q$eTs$Ar6NgEV:>? + Q8"DnmSO@`d/('n@f:%QJh,W)J=kH^pfU[4WO>G<"-pmlbTtQqp]o1S_,MH-4eD71%4g%>] + \#90H:&R#C>#Ejm%GZBHUKu-o]fFa$$f!!6h49j2I9kWJjj9F_9&8eO]ueVALYEiA3r-bF4 + X8P/`ap1r9YLm#*ICPPiL$%<^>3HTqB+HqDqgi%d1o^hl"iJ+7rC6O,Cp[DJPC$N8jT%J2q + I[d\t.sVr\XUMjYl4>7P/SLq-#st?C%kC23+sRVs&/!m[A,[:Cn`,MUDEj,gQ10>jnPNIH] + OQl(3\^*hJR0Kq7)/31d28hQ?$kYO!9Nkj&E;KfA;dVsGJE0`J]JrmpSqh<[=plFttNI`lD + KTBlLDlTX"e*p;n?p[3L\lsBe^)M;k_POT^CnG`maU16ClX&iI?X`Q`"n*MonXjmorpT;?BI[@`p + AYTo'Q'L->P#UXn)#kp5?I7pMtd7$m%1cXIrY;AJa%ZNL + eElp&DGis#'Z1L\JR2n_`7&I\lL_S+^3unfQp8!!!-#"U'Cm@1[Z_)Ar^.THVZ@r&t>sMFA + ^dGdKdn*/VO@Ydjmg%3pMDit@1'ol&=b3.uqqeZ`1nRCD`MdkORn + 3Y$hs;:$D6fjZ6s*QrU%`g6FiB*2C`WEm"nA59I#\l4D*Tb]\= + 0NUrp8;IeP!u[?4>]P)30Mn[d@"m),7;Ln2mclA(.k4Tgc.EcoZr(7h+ + 2$uNL9!T]c6jP1W@<'G]b'cT:SQbnCkO"s"C^jh=Vp%1YU;Acm.VY5Nrjh^GCr"[eMmXo?R + Y&mMlGh^p!%""L36g5[n)'UFfbD'O#_==kIme%7AH\SK5b/\Q+-XNe(gYL^+ga'>Vrda-EeFD!'b0Wf + +=7e&Y59fSB6l#Y%1?0aEelfm;3cuP9Fc7_i2u=DQREP7X8kPHYls38 + W)s3^>Y+>E*cDRB%Y[qL0hI*Mh#ZW#-4E;pg4E?]pj,5_+o91Z-2E.c<\QEqZPZI:g[eE?^XO.=p/oi&q60?6S`AP*Nm4_RsHSNH@t;"_+FQ + r]C-6jYa?`Z;@oM\I#H>@D?n-9oSalX%M7F>"*/`:fr?j'6/F:4aNJaJ/WiHqK34VDl?ccO + sGdl@EpihSfl#j(5hH%k=:n[jeA + iHN=5^B`^onF,ID?I9u[sf3!1YkCn5]hSh3J^2Ye"k:66(/O@Z:c,:"gaQcb=j,ndC5*Lo0 + 9:t=1<-Zop[[*:j75%(t"ADSZ/"+KiIUIKIL&Yqen8?G'h8(\%E-Q?`fdY`+[\[N>cZr1]k + l?Gp(`@'iETlec?A^?Z^-7)>=QV9SL8GJ5k=;5S.F5e(Tf:OBs$o!s1VF/YNq`1(7+%U00_ + EjP1@2>mK:QS9#dct(T>`9PsoZ_DT-*\^=6(+WmXq[>G78Mhn+IM`Y6,hP>+eoJYGk=`N/S + WU1TBnb-oS.:fara.+SHNOY_NISO5ih+a)O45N=j_LJ1StF*:0N0hX#tC0^)#1YRu68#Zq7jb9e#1=3=L]h&>tbtDc@]PMI=C]WCr*X4@S+\W"ldoB%4WVHu4m9"uojHjLR0-%`<8q!0>--fN( + )@Nc*qR6hqc&[lC=ElGR@PGrjcrLKesT7'`a+O!)`lQZOu>d(#?`iCpnn@e)uj.s;7N*)*J + ODCRrW1&h!kN7jB#FJ`:^gG=3&M5N?c8h1Zkt<+&d]S&KoP[^e>nURgD-YWU9#Ssn06qYGP + VK&t!Oh\Ih,4*%oOkhdZ5XGGk^"U3am5WH)d[m?b7j?\)_[jo^5^ILY<(s+Vl]K-OC-7V6FGUhX7Q=. + :jZ8Km$Z>+Q`dUC]4O<6]h>_U*k/b"C8QuKn$i&jPJarg:$8(F\9*2Yi7M[8.35=bp+D]8F + mWf1h?1d^rnHH/[kKE553I23)q-3RT']i/XnCO_FaUZ`mSW/dGu!nXHb!ST7,,_,cGA?7:T + j@2]@-N4*LQY`P,PB2dWHWbft8]UfA<^`q$nY5ICE.XT!RL)Np$!qpV6E-6[a;g6gQPjfBH + Na^_1O!pH1[Uk:,!nC<6;/^m6mk<+-c0[J6C]JkX=1ru. + RM'(6Hh&Kgb2"D0LG+[_Yc,U/2BRT0uH[@6W>m0>W5#d3(%4:6[Uo3N&j>=4%%4Q_q[@Aj? + 5ls5XYH86hE]5$pqlP6UXU96sN*tCdga67RVVq6aR74F:B\i%_0t%7+2ke<"c>A(GQ=mNl2 + Jh0o&/e810oD_5p#CA6"ukZBF!/7?eRpoM`_^3lQ)u`O$LNKN^fl'ug)5`Y$0YjBY.FA&\X + TO#1"ZA7`aeg-enN`Je%j]LBg_W^\gY`Z/j8/8D&X8]J\`7YG_MjDr94(e59F`cPc]"Ed(Z + Bo.dT8!J0e1jPMUG=S`Wa#n1Xr--%@J&]jt7VmND*,!=i0uo6%a!?#Q"FWgGK?/Fq81]'W9 + Sl9pL<('^6SsKf*/MVIMoWbA`p>t3m#9$pM9.l78OS6R,_JD,NPb=<`Is8hAm#e8)V.MNB3)]-$f:GHCX0Hq&Xne8Wn*_OTr9%9puHbM`Qq\? + tQ\+q6`HAXon0boUf(&RsFI'GP,KM).247'>E_QYf3!6]2_[Z`JN1q>knZkbDnZUncPe@Ii + DY"SB"b65_IZ,2c:[QeiE&c##&a^m4n,eTXp--C2M_#@#km7XISZD>[f![#).:!4\\b;9"= + 3Cahf`@[kL9A;KBbgdHhefn)/c$LWX;("W(WgQ902!hNOe+4/fb*C@-9?baFeDX%>:6`!Yb + <3e.;R]?i@EgO37^6Z%M_I>*btJhlQh8/?D"*\=dC9&<:!DX]bg%Ga^.r4s5CCjOm&s)bW& + retbC[]//G[MX\B[e@9e=:1]`#7VnkI'_5cJ0fZVjHnd7\O0:)_R*>m8#(/PB'd9`4pn>m% + !^kYQs59aq0GpNeQT*)93]pu?RDm_/";AjMTF8QE`P=m."`ouM^6dE@FF/0<8- + 509a"Jf!7\<,;jqi0fuhn3L");W.V1A6>cLhq'":5%f0rHd;hih6AX\p?_b,FWJP[l + ohG/[3mHT$p-.899SFeVqPUKc + !H>,+QWYVnZl7.iC3s5@kHQ2:bi?3):!_/G1=D>?b? + ,c!3-J<>Cae1Ct=YoJjN*fF?t'$rY6=KXM&;;6:YWD&c0]+&UR==Ie7Vg4_5eV^bD4g<0"k + MCRH9p"erY)[eX-N7(Y,RC*BZZUL.d,GD5d$e3.P.b3M81?0D2.jgqA5koZn_,#h>fEjG+KJe3$Ei*,Yf3\LD;:qXGM>i)hcb4ZN!.r>i` + -/B;C"=Z@4#%iF5gH@_tI,rLQujXgc"Hgko&MmL(Pq:L1[^ghj(OeHi107hN_OXUZ.Yegb)3: + uCtJi"E>'%Js!ChnZY@3^pGQ.e(u8Qr]o??lgE@(-CTR_lBjfi>nBE*AQM9@-3b4gX\Kg0g + OcO=hU+Q:qa\U%R.2d'ttsF?Zj`V;p8^bHX2Lcji0IB-@Xi!!aR+Ciq=>Fr6sWUIUZm(:Ak + I4Q=++oD&Wsu?.Oh7mMlW>9.0^)@WeT_S_*(3+Qiq-f^9.0FcC!]hd`g-KB^QqGFuj?V + oMS^6@Erksj8O4dN!2S;\j"Yl_[$TV/uX + NV$/>>Mm6'#Cgd,hoo@?HY2,G@:idC$;6;bPQDq%9:ll3=R<:*9gnX?U];'W`g#:5R6 + ::]M-JY\md*lc%[PV0.G0s'U&'l;+:\NCWhT>!R$11%CCinYNp>;";=DS + 0J%bBg,KA4XGk.PJ?S[AmAjVIF5Aptu2Zg!UXRMWSE3@r3HggHL7.E>+O1tEd%e8[B!:4%D57oMS3l5Z\(#IZ-A + L9LqI>qf+`u(t;j^!O3<(uD]mN(.MQ[,Y&C#hNcc'3to5F`$EpD<>Brpmt%^i(fB]Cio,0( + IO1&'O"I%eaj4o^9IP^Q\#(?-g:/kAs][P69c.B.S,O?U,\l59DQKhK_,(5')3NFh_8Prt]^k;>%t541AVkB4L:@BD#d# + F>#McLG:jA@kuu2#D + 97`oZK.CIItJ02Th-&Qas;miB7WB6.P?%6numl1*-V*fIEDeQaS]C:gmUgYR>\Cm^LVg-\q4E?9f9^cqR!Ah#q4sA!+/8RLUWA4`qBV + #FQ_8Y8SU+)27n90I+-ZK7Wl"4oGhd\g#H2qrSANm[qDY>KbU.ZYVu!3\qN%]S-^I=WTDI` + GHT/3T=0h^1T6d-=qk(NI\#4Pm^A?HkqfJ,"pU8+4P57\eqH(Q/n#seK`P[Ja + a*`rmGZV]Xb`);d*fQ,h@MZB!GDgK``$Z=#bh/_["kA#0%nu*N3d'`YZOq5e.@4Zt`=%,AH + '9lq:eIT&Zn\:@$5"_>JRUJS\C-l`"h88U8U`IY.<";0NH`>J:/b1G*ms\1$GP[mWo\0]IH + C7f##lSek5HEUBFjH32T4V3qkPV-fN7P,rcJ.Snc-qlU_hqfobn)]""YLs!]OPk\CZYC?J&OtJ;VWS=%>C\@kYV1gHDPT)8 + ?^[h(4.9fen6JAH_r"9XhEG"p:U@Xqk__L1g:tib) + loBUF4:%R>,VA@MuhmH$l2(/k=1Mn^HcPY<6u"meV>0Oe89.M7Bk!9(e(^"9bG# + mPM6A_O^pg"7^5X,*^t#>HQp1dglV9.EX[R+ag!CN,!@WMI3ZlI9N2GA0[V[?*R1r1,(Ysc\o7Iu2q+AO]1G<=%?XOfd/oBdDV;)?.M2 + bl1e'g#2j4N0e9e;YhA]sN2H(t6q*X&)^%/NZU)P_=fbdnr824OXu!gJQJj%4+9heVtSKch + 1R22,nXFB402Q%>A:l[KU#>=-_3g_>J_W#UPl8F7"4YPgo?=@cKDf9@uTa3[q6D]0W]Vkdj[6d.&F+"WmJd + qG]#Ld2OMC!JRZ-$"`e,>h@5WYGRdF5A.C]!Noc7iHIf,k^/^RIpq)HNk4od8KP$UpNM#'R + $\s^S\mBjfkmj2>LgrJ(2k8rsDMau9n5cZZ\G8=dM/0[4Z'XGgDP*unHS__&CjUWSVjqFk0fd[m5jj,hJRb^J#IG%[kZ>*/m`hUFW7 + 6:O`EWM#1330NW!b-%\el"XOl_:E;2VFrUP-F^@$p7Ig<%:k1e/np,Ap]]^RgBd^nZ>9ESk + Grib\W#%B'k*fC_:O9Pa$-iX5ir!,d&J2,#VR!&,\2STbm'In1K/& + qpj"V3.qNfeJf8!pV),Re1Cd4RW#kk,^$1j=^0EYM!/<>_N">EPj&1cj9E-):AtNH-XC8Vo + MEjWl48;1;533=R@4>aLM7%T>_CW@MOZTU*hH8kV/V/#>XBNtTl37d2-/,ZJiCdT0aKa_rS + <]XjNZFP"JLF!)f'^Q29)?V$TI2W5pcR$/S(c+*@'-=k\gdQVBc\8*[/%(_sM(37BnX#_Ub + )4T%e=O"se,U.opRBbSOS@?.1+-Cp_JhU+eGEVYA/%]i?@=Go1`^?[f$#f:JVS=>K;V&s+3 + A,]:5mQu&@#M!IdE/Dn;kQH*WP3^0RAWrI&9K=#/htYVD)OFV+^PalV5Adp\;FtqLqQ#s[/ + r>;.AH^2UV!E)t0J?Iko8,V"@$N%\<@Roj9)S@^T + 2k2aH7H0rl%;I9!bR<,+7_NAZTj*Rn@pllh:^V^f()R[I;.FXXHd0"EcA:L1"i=g',d\lYp + O9e.\uh + *^s%VopXhqRrq-aiP2h0QJu!Zc"ZT73Mfb'XVa][nEY5JA!R2@==\H9/%pYIQ0k:#p7HRY[ + D&=BVVP1Oa]Z_[ZFWrRmaVL18+$9B\Fnjuh^Xge*$^EP2gX0'$Z1=ZIL!VecCj)gm7C'Jr- + Lnqn3/1EH0n<5I5lV+^9V<?Y6IbuB?Ua=oI`eF)Fhg.lH=WshGh?P3RQi1s.sir2pjRYc0J)(O + "Y*Xc_c%O>,k#iBf7cPfhC5ffaVfaX#S1Gb@bWbOUDO\V:#.o>\.MU&[m.!g,YVDArTrSEF + )>b=QZWqm/OFI<57(hUMCQL:M5S\eA(i9*,99e2s4^hP5`po + ic4+V0o>td3^o%)2&]rdJ/Ks?mS>Y*"l:tuAJ+%&Dj>aL0,qCk^U3E"n@pFT9#d!"=X,A2c-*crp'f#&qekZD`OiW,V!b$?.EgVRBHBRMrZt[3;-7T`]L@ra]o"&Bp51([n_/+*TZ#H9a@=NWrql3:>f`TQc + 6Xebk5m)bf+X!i4SKgnD8dIqFtqPFpE9LHYX#X%e&BT%g1B>A$PKn+7]$uZ1;)eAF=qonMY + T@XkOBCI/;UFZ7!mR?RDZ6^4#EsG?2ue"5eM[C&,D9P*.kJb4$s5LNP9&l`TmIc`I&)R`nN + ]Zmm'UMaX4s7`0'Gj=OF/UOL*Q)T7X1c_S)4N)JsJi4)@EZ\>jjKH*3eEj!L"d%'TCm.9].fh]ugbJo#BN$ + s7$cpj-YcSQ,V[ojemuN_EE@1t;![mFrD,@J1:ur@Oie!9op9@a7;,W/=9*3C`lVST9:9=g + Vo,$pBooRfbd>&C?JGcYnd77%D0/ERr;[8C;%PQcX0&%2eN>G:LdgeVu%Q#SQ'#P7tBhq_0 + ljX9d*>beBjY,u^AbcF!!p!)u*jJoM;=9eX$C>HHSEY]kZ23_Tr?.7+PNgeYalac:$CrW"+ + ;,D4Op`Dsp79VT+As!uBiq!!kp#[BS-^2Y.6/WY7j;t1S2*MX$-s]V&L11N,LTPW;CNqj3@ + -F+T/'O]E^qIU`1CuNNj!ZPY:EM/-rR<#P05D^9.FX!.8nZdP(oTLh^fD$.FOD0ZKj+u9eQ#$.LH, + .P63Jdf-^(M-*m+ql0Bo6h(]QL/5mWCdh=8f74GNV02i$)d^q9`,r.5q0iHs]14M,YpGCl<:"%7MB,d-(d+A=BSRH2q)n/'72\pIlLAb30TC_F-AT4P + rTME3RaHY':Cm[T/q%g3g6a.e$D*A[lY864&`aR'>HY.]f_Lr4L<'je'gGnf0&ZZ4]C0"PM + \Q&j$&[c51A[YoBSUSpHMUR5;W:,Oi9K4=#Qkd2Y7A8P@.G1H;m>39@IlG'@p/?+B0T::PE + RI1L=1;G=&R-:8O.AKr7:;-UD=/6tHN[<)#a0/l<_b&@m:K64GF + U^s-k=me<99cPOeDj?SUDuV\*/23K_k-tV+WX0L!iO3CZ0#pKb6'Kb$k>^*naBI89dKHS[HJ=]-1iEp$HNTic + H.=L1Y&op[VBV_Q_ab,<0?9A_gHr9" + JhAQJ8s/gQ]62*Y3@;No+q@@2rB1aK54N(G]s=,f)L0LYo;6KI5e!HpbR9e"RGKMF#LdalS + !oM]abjp'K5IU[iXn`HOohBKt'\j(h!6G@+4QdKlH:$3%]P[YeCruF#[fYGCbSd4G;6B8TQ + eD&D)f(W,S7@ucTPMK#8H\FYFK#Dh$-O4`iCfMR@LDWeP)hG:,1R$EVt5E6MkJ^;r"(9`2q + mcmpEOa(r1=VZ=d,uUN-4*=TafB\WDnUB"Q;fUK(=7/5;MZT7Ok$oOR0,V^^Dc>$aCp@o'N + XM$[]7N"&Q'f=Mq1FnkduEmsMmq#g3CVhD4"#k)4?152hH8,PLslC[=6=]_(/H^% + [p(3kCeGfof,3K4iiOr(a))(1i^S!)+.MAb01q;78OishFan%$Gf3\Pntm>s?WSo(s/g/FU + =&U@P!Uq&b@GZ0=-7IhuCU%I^Lj7q1$feNC/Xr.[UFZtfqULK6[B + 6M6Yo7>9We.XJ)]ACVZ^VH;gJOAS+1,6,LoS:nb29/NTsks;MYd@PHW@O:J#-b:Z4"FQ>@i + Ike$Ah(ZTAW'gLI$^o=)=j\[rlmqd6oacYo.OM`WE=RQ7tk`O*69[/6c+>A:\G>IOFP\Jnn + ]HW.Mfhn==`[G0KIeCd#/5^pY_3^06QM"9<0@;Ea4I\6+1MK%R+87ZC!rG49?%_KR9Z8;r)q&1pW@41`79s?l- + u4#TuK3UbXq>,Q,h)t]us[0bhUmn>YiFGOIt_g9io459\T=k + -Ieej5@Ya%*McLT<.r+jS?_9m3hd2`TEMZ"G?pWm+*R!fg<*:;-&U!RLB@iVVt.=9M9a'B] + ;aZWGFr3+Z,6cW5;@\!&88GkSa3W)IoeD_8[g0'j>nKp4HEaZ&Nu[9T+g,!q[W/"& + 822G\k#SO6#GKLah7\P0F9a\UG>)r^@G@79E8A6Gg8Wjs#L*!T]?Rc9a)g%K!ScB4`VkXP7 + j`QVob`YHe>Et_#7J_gjkl/0hoXE9g9d])pDog:VB,%=qr=^s?f$5.N?/\@D8kKTXl-a^h# + 93@gX3$lg3)+hQ3Lf]?7Prg%YgPgBKf;OSf>DualE\Li^^'3#1M[?4lZHFj"DV94rK=*Ols + EekO5P8Vh)"^:1kV&h[t6ThOWkM$Ht\^h;25hS]Tp%CTOIsgb98k':V7P'iF'W7'gA]-%8i + 8am=-q5]=oo91XV#a#LI8SM9;7+U:<,4d!DbkJ_n$NftT(#>ne*p?>n=KUH + o`S;aRT3]/=aqSm+"ckJku&Sun/i&.59rq[),BfC9gr(S5r81qW?D6s4X5p0UPf^Gkj.EV-WspP!2M'5.!7TNN@T4LGLk?]Xm;Mbu^*oq)e!?_@'W48 + I@/qB#t;T3"Yb5P[Npp*G5kT7&]+28H"#/$<2%eoedbY&oC<.,C7EAC/cMWc.m]X9&D%It. + M13#!,3$%p+QE*+@l!=4BIifM6_.N\tU`T*'Tgi=ndM+Ajg3?0qS.$)BAd4#c=9dGqC@aKB + ?AmZ77:1c1o,h>=JQ:bePM/<_e-^i:mP6s.DO\;7mk>WkC/tH+7d:tPl/GaiuYLr!f$S8I, + "KG9L<6Dn[D[4"'_D&2eiT>N*Z)slkiL9K?GeCu7Kjbg@e0G`unL>bqL? + _Or4c47[/`o6?2]KNQ3TXeD#>$@M5$*)M=o\/V;=(t[NlLkobj[VIlfjM7R^&FXDO54D)3b + nAoe]4:l3E+Y^;f,@lh>4cjL)/%L^0l5NhZXO]:[%7kSm<*q\_6Z(Enn@#T-s3;HTRj)ZbV + j@:>;67301t)n?._6VW"f(b&ITfYT"GE2D8Pb"L8LG/GCphHn_ofd$nY05k'F^f=_aV8GC$ + h44KTZDtA"s7*u(3`5N8RB[=#I4@5W-DBp4a^+PUV+@g+mQnq$gRN2bpP*D^h6'#i[-V=aK + ="DFL10lKU1Bb";bS)``/4ssL^GJU49NI1iD$/6I['M%(2bu4TXHLeJj+TZj1YgkR[PM1=5 + YG&Jog2CE`:$+<4^LX]&8!<=K=9e9 + -1$8_)@.AQr6CPt>6'[InH2;q(\r1>"K2O]g:Xc&Gh)Ffgj>=&t;>;UEu(Ve+EPjfMY=(@= + h2<#6k"@G4Xsc#$OJ]kK[[pQ`pDeQ7_$BNt4ZMf%/EapLTt.?FVIJ_'7A]I$ANm4JX&V5D>RZ>`c + %B>"j(et2_2u@*>][0,2=74aRf:&J&V&+O'B\GSF9P0E?'0Yf5<_6\8U`)*"B.irl'>l"[(i*].O2(>h2Q7OTR^7TZ]1SU@@lW2T.-R8Y3bKY3TrIG_H + 38LomT`0_gq=is).#%abTC'UVEQU[#hNUs`L-krFMa_YskHW3C)`aBZUN-6M#ZoIY/X%lf8 + roX>KS5R4E:"dcGg0nZc;YG9+H/(mP`:7be>&QM`mkU^Zl^j]Cd2.Q1k0/OQP*Q,BolWaLeG + r53Z6.M@K1`(agn`HjP+;>\39X?Z4`rbG+A,u_WZ=^$Po>\4)?iiHl-G]bTGmZ,3mE' + C)MYq9m"L]Wn%(X6q*\P!S;^4/16.g!"'EoIh^c+UZ.D?&PYW66XVE>+9;B$gD+d&X'5#cO + b&M-#eR1L0V"W!3@m?)sX?\,h)9f*?@LNZ"\/(Y6dP==4<:mbT(<1;`RtiJo%DKCfMWmCC1G[JiQ:8&Q`2Zgp*u0i^6f7!a1+^c%SN@)H,_Y=8dd2gXoKfqMn.rXc&jcIL_*.[FGddD7aKra/m5BsCDFDl#5s?K/;JnA7 + 2sGV8:-N*D#+IDNF5*"BL5d1RC7L1]P + UX<:N\YU-?`aV0R`k\Sdmc_d&MH1l;a/B7)OL6p"??ZMp#\\7 + ^6"l5[9q.u$@^ZCHg;)fY9B\j2%1lgA-r%AmN%@==U5&eVjf(JAmH*(QgS(AH,Cma'BTfG: + b8IdZMhV7G(p-0MJ=NclohHu99%+F/3s-I1o&]V*\k`!&:D=ReHU"pmb^=KcEEZNuL\pjG1 + Hg@R"/ouq,[V4rqRt?uEZ(%oQcGdbgq=!a&d^PQAb?\23mAa7:3PO/$*:$%$D"6*fk@Nn+U + Qf`7^"[a4B()6#BN`$FcK^^S./]n.Fkk0ZqmOh_>]Z>#4Yg.sg.d\D1kZ.N(b*"eTp!hr8B + FLRl,Zr%o[ZK$R!iVF9,Fi+gr^5hYG"1n7[@DdPZ`;?%Jr:fQ1po6=UqR6FipNkBG%Oa?At;[#Ej`&LDa^ABq+)`k;%j1J=7 + ^r-=6bQ#(O%^jLk["*Y@MlAT'hn!g:^haZCM'B\)cG9&@]W6]Hd"f$bN'IL/4=iV)K2oMl3'X1_^mh.6F/(r%X24-9`"X + (No4:="g`'2;M6"t1E_=$6c8>Du&f]E8@oB+#aXkW46.%^+il/SI\ + 3Q;W8`l('\49Ig\.R./@Y/F_+nFB&+pnp/#_N].4<$T4)"\,RF,+MlA$Sk!M`%6":a'<4Dn + D;(lAO/rL]UX&U4ER;37)oBm7hg0e]72YR*O<%_5m\#k/1sEA7OHUl#b6.K4DCqQ(<0%(_L + -u,FDa<:"3<"M8NLZXgc@sl>X5rg^U(DhoU3dh<(O);a!6('b^_YUT1?O%&VMo3*&EOiP;h + P'1!GYK'I-4[UU7D+Z)",&["^aWPXl4=+uD7$$iW[bCJ'PE8N_u*'U;5U?:);d/X+2dgC;; + h5Ke/5b-ZU;ZqE`:)+JYa7bJJ4jB4VZeAY?772[:>J[!@>fdqMJ_27?_P!LAq:<^Z$,m'@) + r3*q/%4tJ46Yb@F,329us/IU3/'PZLA*9mBPg*[=brf4T67403mBfL?3*afs4PH)6MTiB:S + QlCZCRD(hdPdT=aA\&BHE7fYkdK2a:'5FZZAgALVTn*CcEcu;]\L$0l:u[+)T$E`U]R_tC; + 0>t-M6e#=i2b9:sMGEcSWA9"Qn$@ld#An9q#b?F@"01dPup/:?;5r6@2Mh7a7b!cij3:1_A + "Zj#.>KX(:H#U!O,ds31u1.a7mm2!WFD9$J?[T2K,GSG^\)RkGK?c7JY58mG+g0rj%%:3@7 + J;o-$X^ragTdH'XD@WcJ.U0N7Tb:o!&o14uDZRPBYBJYL-O=cP7-iUCeOEegcpr + :-B1cW>DOn*D?;?:i.MXo`:g>/l8)l;Ne#Wb#m$?hp;fg_=\>c/M>Hq_D0`;XIN'L$XlJ.; + 33WR%GFD"Gnrh:=M8h!c[hT'd?t^-H'd&OQD&#[V+K0f:t30M)"gL#d<1kVG1=?u)1>7ZEH + N-JQrO;ge?)`=>uoKaN`=\BZDM6e:gfNV-[/5>F'D:eBL + rmR=gp@>7fn-ef@k[M1eo`@MZXg(N!;UeS/#X;cWp;/dVtord$QY$2XEgE + !NQ-*u>`[+d1?gI8PTS14t4Xjp9qA#;Ql>i"$YI6:6h"l6<4;b]@/L#Cb2hHh*&c?1D&>gqK!gEC[Eh-<$$ + jjW#lm6e#9T;CKk[G%3mOBr(X,Rr70e]6*k4'_a@hYK3;N:,Ml-!jUFUMNHH);$X + E)T?ck<7Sd43l[Dn4+i&X'YfbBp!!oU3m@7;*mo<.!-'-_#e\CMO*dPG7lgu28^+l32@jql + s4e6srKiQJT*ke?"]inlWobn\FXAfkFk-=IZ/;jH\..Jd8E["oa7gdRH$A5gu`^=e%1)oab + g@/JWHjWr'pj.soZXNkT]@Er32W#X7&3b=4_;ZlEQ9@nNmk8gZ^+KVl#\m2Ybi + j@%m9;O^7jEMH8p8'XQ7,]9bGo]1WA^NMu_XHpj&5e&q^2E"Db$UeON;e0uq8u=g-.FdFRR + q6^V_j4EI-;Dm8J'EqWb#Tm$hEkf>rl\>@c+)]7^/rV<$iVS6rY-/^ja-(4im]4i"KRj=H)16k/9rD+j" + \A\O:=4XeDc8EJEP9AY_Ak#l@EE$PQV2\a,-kc&&<_nOC/72DU\;#!Sl%^ed#j#]T_<^F-j + Vp%TLA(/7bc?&*UFMSZJ5(mOjj'q3X5&e]0*G:+plP?R8#*pC7QY8"Q^ID5?U + gCCQN+`]\B)X!b&Ud!8NCeHd**h-rJ@`$nm5E$WSrO9gFK3fSm1)YLT&==#k0#Bui#^#*qjq&Ahb_QU6Y'Kj*ga) + 6Jj*HD6UokPDLFojXiiWca?Ds1_r"fhRW!YVdai,Mk'Z"Mk'Nj,_'%AC%>TLOnFd6^+P2%,kC8OpA"j^f1+mgn8AJWSKL8!t0W,O'U$ + LT>2/NW(0"n?p\l0c/s9=r33mVf>>m11"/S+GfliD+:jb1#kJq`!c`+`]q:EFY_`2Y=JcG@ + YUB_rJ/ao_6[$jq4tADYF0PpB=i3g[b86bDeu.7%Np%j6=Q/*TjhN)#]Tqn[ht+S7ma!W8a!T]13HF"Ja`Jrt%mo[(6b=6CmLG" + 1lkT'FE:XRa_\p*O]0G!@D4MHhWPa(I + SZ1p6OBJbE/\Gomgj7oAgn(&,E=F9_];UH6j7R!-KMoL2sr&]m:G\R&mP%4Xln^1H9/"n=)IZG + VKSjpU#,BbmZHkN^/'57op-c^^Sg:eIRE:7]Opi[^/3gAIen7Mp#i^M<8maC:%n9ZUc3:.R + JYAhfVp'*b\Zk!(FX@)LWu-V0%-_IS3/@`br5`mIM,HU0@&Z:.]%6(;"",*MS%2O"T87[WY + OFecbK0(L$)0;K7A + caI_'Lm:k/NG&,6hK#lfQD?uRM>/fbCW6R#??<$iIfMaS^#\28(d"c]0!n+dYm,7fu,ij+s + 4N^k(M9O`!5%"_D+S4V_gWDp;`+.1+1dQ&l@D`X%UV%VGI^(Wf)80\h;4][OVWE*W;q1V-S + 9qG+[e;7H`G#BY)\C/;`:Jo8kf"+Dc]_ZI*HuJG!02ag),H@CL.h%hgo8RFt&DO346q=@TWd3QK5G"Z]j0H + Xq?4[)24Oh57u?`%7\c_',]o*BC]=Rj9[2Wea'PQ[.C?BlSDjk:a!'P],?*EX"Y4'1ZRm.@^m5lBL]B + IN*gDO^0mb&Fr$YJ/%lOH4V,+4iaSmTkhD[E:qaA(RYo.KM-qOqC.p_7204L3du%"-c.cjKq0Zn/[:;u`^C#0j# + fYe`gS_RaOM5>JHn#FZ8+oo@3"Su=ZgN!0H + +cD<<=bg&P))dLo0hb@gS&^!@aHPk6Dsb$T9MB^dCJR/->_V4e5h7N3[741%4@pXcAkd0=[ + hS._ktqPN7(<9:FCQ@UD2^R9r`V3.)eHHo9Gn:=fG))KRTkaeJZmtk:N[@=K#4PQIK!n"=, + 6QX=b]`c'k>/B3_jFFa?=$Wde18[4%^`,+R/_hbiU6G+&"9[+AL?679_MXOXUf:tj;dX8N: + &1K(nb.g&SHh,(@VqP`&(Dd)JoK<_fWZI160>HE7.Zh=I:@gDrE+-R%@q$%bQ=G"gQhFE7&M+0#.R1aK + D5K!!>/7Uf"D)/gPak:GRju@R>*Tg^dnLGYl7s0nKc=bENdjR0A6NsbjF?@"d"(XN8ST?\f + _iY`u.SR_o*dfc_q?ILCN73CMhM9&FNR[*lkG*)d2o8%^8S6TeUbT$/cMD0?Z;!C[T%93]H + @$oLSH5_HL8i`"?Qj-2lM7\C4b#Lo3,$CJM@J$"7bBq&CIgOI0SZCOHRg^9b](jC$pcs$nJ + gF8X-a/=p=i[,K\pXYIPH*\gY6@YDG0H/pAX70EK9o-^"\nJ=t\WXa)c/c.D#6`mbGFLHJa + _&]!qD1htt0.D?`8;[ncPQ>R,^rIMokD2Y,grgP'V7/4qlGGi3s&J8j?q`4.G/hcmFDnBM] + h\;o_3*#W[7^+I;a0+H`"O)XRe:WIaq0'7,DS9(h0a176hj]rC$oI`5L3QET(l>rQec?%#c + qY&j;B6\@/T?oVp=Q1?2X7^q$eG3T)lhq'eEfRQ-\K:#$]`3Y,:2.QA2dYj`bFeIAIF7qaG + Nt_P\8cEJbPR>gmqWH=pQ#@,4*QNUrTfjFr^#<8037J2S#H%06fC(MPOSO[^3SSSjLdE(ko + B.AW4s5$Gcuhl*e0>tDV+!\YF5(?CXm[51$a4j\`978fmBo8`Vm9Cn32W?q@2uK3`i'HSi> + a(++f.CkGdB$!MsTX2mFV:&(rXtB'da2pU4DLC7@S([Mm,lSQoN6n%M$Z0"lcn,.tY6Igi$K + uU?0R>?JEsU-!.km.n&.[;Z0b$Np$kR*'nBDFs8IfQ'rieNmKF\NiE-Y9*%e,]jORe.Qln< + Ns=Yg4#&Rg.9<)fcN*1))\[Uk + UWD)H"H";#qZMd<@p_?)6jDanmO%(mk%C*-kNX9dBn`#6S6a"-8M2#Z!@.1?q$s9(1OrmV`P[aF"q]r + (NG\kdV=Y8aK0"]J5M4]%J:oS5;El_)s4CY'&+d1.kV9/0G"[GOlI.ag_!VaC?g< + -kl]s,qVOP@4WX]-FXYD)0cbb[hh+q&ZkW5Z4-n&igU=&N)A-^scFEF.E1@YqBt4-W6%[o5 + -$5]+7I<3)G#OZbJ:OV`b\"+-Ub'Z8"B2]-5YT1@o3APD:iuZIoms4B%q8du-8NN^V;E&?TqFJ2j,m?Erc_,+\6[r.?,!.ZfsED + F$B5?3&HacFGi-.Db8Ai46u)nZQ;HQK/-65!O6UrdWX&8K.lcm`H+)W'29QI6:"5brJJ?3' + Uls^[37<_5'+8,M).[5[6:n'7F_9,-eCac),8K461bO\P[-^WR8PFh;%_[?[!,(4XXI)B;, + ^eRe=T,"bsKpB;q$4q'Mgr7i@r`g4S;K22*X`uKi1m,;)#s]<-p-8SPkU#;Ud?aP/U$N!CN + *83`MGIoXe/S7p.5J4g_+Jo`mi<'2Na(\(=jjQU'g#G + r;d36gH.BMNe2:N1O]<*t,uSS[EN<@6"]VnG?$4+U[G>1gh_-j,5LkZs1[S8noiMsR=B!AW + Q$"TW)`#t@("EajQ*F?=$!DDS2Di6)[)@alju)3h1#Wr]JPAG;Y>Ng#qNE^Hel-.$.i8E"( + f(?T2KKSY4MkaBXHj)r[G_:TB0WXl?*m?L1UGra#e%@4!lhZdoT+ + Xf"5sS@rg,[7J"E6Fu=F9pBIQ&oojMVdrT^R + 8O>@[Fn'H/%s%C0?=X$qGDK'sTgY+qDH-j,B%;0n+^Od4E]5L[<;h1:G;WHuE&S_W=,23). + sTMFGIFboQ6U=7Dg0YEEHb[%Mq56BWi^&8JEg[Db8.e7._LT`\]_a>.RL@A+L4t@Y%r?n9( + KFC1P/^IZR\qdlaF@6.)"r,]dl7!8caP0g9qh&]i["Ape8@.gP.["K30&!fMdNL7\;33LDX + r`Wh5'6*JUW,K=G9E.p%B`Lo<:lUWU3$fTh3DLPQeJLfe_T30B)cT8*^%"'LR:)YR/)`03K';NOdVW&RCT#Zq5'M4WL>iJRX + )$)3O,'!YFE)1S'']?=WWrt.uUHuX'$XX.F,HF?_"[@Y?4E-9Atf=(S021KU?2-fc[a!l&O + CnNOf"[)"E`VpPt.LQ5LWuRE(*+c&&rV[u.eZ$\+7A)j`SuU7*@9=t-1l/YDkaU"EG=\acF + T",rZ`TUJ<2H4cq)lEkfRMje"F>",'P8Y_YqO8;/&>#V0+AYSu2MqSQ7H?-/L"fE7TUO"em + \r3?[NjtO'V0\K(q'W%#%?d0XV3j3@\3Zl.LSQBhP/E-?'[)\0M3UePXN\@EFPC9R2NeZ(r + 1eaSj/3fS+tN)\(RF*0[AA7IV1)DH>$3uhf2m54R9u;oY;[.U3s0=9EI?=28+ih^pH`6\>& + ^g9E*%as=,U@nO0R:!3EIpdGO^'d"`VsmYa.MXbd"NUq`D9.Ea)>Gf>C*YF0F0bH^=?/pSi + =_a[Ni2LiO"h4=Z?/h>:FYqiH%)3]p+@pdNcKW=^6ZaHY + GLJkWF"TaIHJT]>)(,YJshL?(9#BQbggKO(e5#ag>!gqt%7$ah9Xn;k*m1gUG9S_@u@g>hRM0kKS@ + 3d(B0+I1Y+U"1W\fe+TWf22TTu^XTlj^jPI[gl]DM@bOctZ!;(LRpF:0;f`sBH.rAO4=t5> + o;mYmW_VF5:Y1m[7QrINS6Bh!K0:g4a<]c42bQ$0hG`uW"J4 + iPbFmCh<>f9[7jRkJ.)D9X"CIsi3jSRp/,J^dukc90S)^%9UA\^)9,hu-d)>tr$2A&g^0bh + ZFMI9k_NccSEZdMm\a>tO!\?c]q>HJT+^$sh2&Ze5p6Y^SgUoI85D[FTd0e,Bs=?9.#7V;3 + .XZokt_4u_C`(Z#$ehEFT&UW3YChhO>XrL0iT(C[^V]=/Y9Up;7 + 55jS=l.aX)++DJ]et"!l#La@&jc\64St"gSWQ^n`[soXmh<0#'8T&N0M#_82\h39@F1t + 6L+a="8YU0Kb\A(HO@Q#Xq!?!r"-c8%o4c^_B-N^=U[Y402KM*W;;lQj`@=eAVFY8sR%l@[ + 4-Iou[7ZY]!D8YQj0]a]cGLs#=JFA=Ks"KHTNC?!4*:bN@$t$ZQ.k%HMbKGoBNO[,C7BdRe + S):GNN1lBa&&oSCE;ij)OFqi)#Oi<'0"3GnbJ\m6:k4bk@V)l-At<^a_.rd%(;4"R]kN2)* + 1748%$b"Fn1uuj$16(nb;p.VP;>JbORO$*Aj[\VW2MS'_pil;'*1>\(Jt2:DHdeoD9T"mg" + !ko(040XgXRQeaNE`4H#PIgWc$K02'=]X)+hSs19rmPl`t(ZiJuK:h/;c]F[HKW'-,%@-PB + :F6;pX0.Zsl_iUoP&Aq>.]_"Rk"8;u<&JQYh7BVjZo/5sK=V88cHmI4U%9-I97M+'Kr'[\] + GoOhc]Q5>]D9Od^aO1Kh%mpi&R#f9`e8#U_0>+>'_U;DteAa9a&L#3>N40PEbp$oX9_/=T/ + kIbpM(H^:4HD=rMRt:=:Fa6lXfkDrN6e]peJ0VlY-["V-o!jjo/9F^`1G?ag*"6`F6s=AWQ + k;J&h>1_#?83Toi"o8PuUei\8(\=J_&A0LKmn\?$f:HQ+^)b=,T4W?Rka1F&uI%,B_h/B%j\1?WYn)mA!Q_Q9'/(gc$7E=P=MWB43&c`F!01(/;2K>E$8/0ig5ubBR9Xh<*8 + EeNNGB?2#ZOQ!5'"(P#IC`SH-tf8^)Yh"UcqYd??+R=er#(-?6D#[IXdA4n6gNFDQ5Obr,n + <\87ER9!7Mj4:YA+Q7RA_1Um[L3]2"H.@\:?KhYMI:q2mBio!cAsJB`G0VD,ijG()\*2I&T + p'+M(93d:]&#B6kr8%.OQ^ZGag'qH<-(i4gZ47/nBo(fYIK&O:SB#u7iT:@LsV- + WM!X+JBO&W1F#8@S%#;)?!+1AfX2O%1c?q5;.jR5Jq.f%MY^/L!_1t6ffg3;g_AsE6/g4BW + D;FJnBqFmJ4LF8Jg@0@5C`[1.I)!)5;duKofua-O;pGj30*6d0;-i\?d4:&cdr3]^s3(OIW + )qJWA.36:KNi*E3/]OYOEqaB6b"UP)s:;'mP:=Ho@#A:fBr5"J3=pCuXuR>UP9.)ZEV%4+E + EO\r8F_oZUC;p:8f1;5]j=]HH+9T(=gJlTr"B)Uf/TTZVr5ro/^80?i[RVDuJOa4,2k+p\! + 7=o9<@P]s@%,m[S@$AklRlAKKgkHJ?EmF=?-^tSgj32DeqTi!:r:22X^V::Nn;m + jocgLQd[sUpnR:bf=KkgQ]3*e];='9YVtN`ce-dF-lt(7@[T^^PgC7h0Ko!%!G.gqfX_7"^ + PI1$!eQ/^oC+XS)XnI(M=K?.8/Xob/F*?0iknQoEKfuf/VQj0KEG7!^_7"L]^e1O?$1d60C`]/#O?n>N*0h*Y0fVYNOliDe.7NTNn-O\r39BEY_NjpuTgSYY3)h?RPTt?cC)B]B4t_C + Z^uEe)8eMu]]5WjjAaEgf'1um.)7R.'ki96]ASo^Y^c'dajSSTnD-c\RH)DM@)uH#lmK:c1cSgh(j+HpJ + '?do0X69@AQZ;F>Ykg:/l5^+5Et.$R3M/@tS;KXR/o0!`h_4"qB;]e,dF.mj]AgLgX*.59Z + [%mHj*P-)G0Ym!3$2n%^"9&lPs:t-QA4n#(W1KI&`S1;I%D[0m%&7HNmF&T6%lf=lp_%XVG + E1M8TgAtl&da6ga;UV!86oEalq1$$1m_R>]KNPUa559o*'WIAE[O5Mo60+ns3hO04tC#2WX + NpMH<4KUZ^WV)tcct/LMWpCNsrURQd!7)R"Q%pI]:b&KT$2q*LB1P2c7?n'$qJS+f*B[5G6 + n3_Speq7X8Ur@o,>I`(jNjLc9%T1=6e_Gi`<2*Y=F'e1rQg]P=Wq%!l0V&TP%=QhpG!@AcR + T5lNs6ejl"@_D7;Qj]o<+uL\,mh(Z4--M@F$jW&Jd(jBW]t=r:>OXp5)a2rt)RJcqoAdZNd + Qsr?5VqoD0g\)Tn%'b9$:4m3e+,_^+eo_n\YK-j'GiF1OHp8X22GR2+(V,6Yn\DA&L>7VRr'Q3s7UP1PuR-\.CHn6,:"'.KGQ/DA@^%1h$ + =q;tH)u5==-$'c=BrgR&OKTK_-!'16M!TY!THr44pL6s-jU1][u`-G/LP6nCS<"@p#p:C1. + T+7)Qe8L-U76o7k1`Cs%F`'91OY($O@=P#7+qW$oIi[] + @(^!p]8U=0FAp,"B>u23`\L,F9/X[&83#+27\!dG]M_2:7O3q2$^6gpls.L2!fOSq`dpt*1 + e*\9D9#=ZMi0HWI!S4$50(<0`lktagk!N4Fca7;7@[]tKN:VtV8]fj7tc#]6ub?k7(k[;+\ + Z(\6qbU#:W/th`iOrX1kNchM)9lL8IUMFr/=/TEQ(m[a#&Xk[#N+*Qp*W%4LAZeb[:`&1CQ + Xf6VKG]4JYSCV*fmQ_E2_RgHpuGkt5qo4Q-'.KGu1Mg(]cp7;SS>jKHRt2S_GE$03+ee*K] + VI`Z,c9/I*UZ4t*[.hL?j`'k@4DroaM,=)bq-TLCqm]8)N8ce` + %7:mWd."&YY.[#bN,ghoHbf:&LH5Y,+Oikg3Z,3@#bYn8Gos5i;,mlGYPO)PiUl-Ut),rpI + t5/5((:34LIqS9Z`59bCUDP)s&MRf*G'^9JkPIbiL(.p!4lJb_&>WPNGQ6Ll`r#2]Et#0dsV5CPrU]I0h_t?:Xo)3/H1lEm*>i"dH(g8/@!Vd4&@+@`^N;Bm) + 79Jf@4nm:FmP7Pk7l__5AS<;b\"VbgoZa2:Uu$bQU2TV)V?mhl=p@1aO/;7.&GD!`J\mLf? + H8UuKbVf[RbJo2S49:NWnke/(pb0NF*Fd1k6]"_L*]s4&, + WdH(j4:o.1YN^&q#edY/NSRU&7?,ueQ;q/_-rGYHbGZ.S,ceQRDPsr='0@ga7e@TqRo`/#R + 0ND[Ed!]8&9hEeK=jM5==:K[PATq&>=&%IGe1G=T,mDp!78[WLeD1qjHh#8gLK@H2f,\!k[ + -P8^M_t*3eXAkTrK\^GPh4u5=DZqidna)a\t)PB6Tlm3?),0BUr,Utd^-rM2(dO(2d"Tgfu + l]bgi(7:gfU\78M-B(-&e$+9I4aVAV8I5hEEMd=05cXNBT.h,[5]3fIR0OotaU=6JO-T>>;e)_C&SrM:i'B,6`j+!aAJ + 9P[$AOgRWUgNCVGD0[hjb)j4O%P:MibV7>KUe7TpPj=nNZ_]k:ZZ_cWbj<+V60/`'*IfNAsOh + $*(C"\UYrh,Uiff@?>@p%CMToEjRdg;M"f.U_(CjYqVbe.$?>%GB8G,@.\l>33'I4ljOuB\ + $2@i(\)n4n7HInqm=ae%N@qA[pYe`DL4@d7+4Fc0sN<\R6pYg+ih?FetmG(o9tFb*9iuOVV + <\*2[P#>HA61D/IK3Qd?b][j=U@e^r[AQobHNge?GJ*YZ+gH=9]S>IEu8?7&ZI+P\9,[D^* + Ij]c2i,2;LYghnfT4@J!?Zq!PG?-XhQCs-(32W&[-hbB]_"8PkGjj6@qbq^MH]tIpP6=^!Q<;o0c[P?^Zb2dG;@hek$-$%C^5Z.M[_Nm8lmGD8fn3/I0>1H%%VI@L37p[>r]*2fn3_ + dS2;c356jl0mM9;:\7H-2m4PAIA@V5OHB%;E:N[%tD-+kfViN)`eFO"QPa%jN*Ye)&4djqU0*NpD + 9BW?6[@h7ep,ck=7kn]Ad)WGGR*AT,fkd)]lb:%'_O0GYSZC:HlY*`q0-*d`Al'!"LcBU+7 + /EuIPZM'`$:73_.b50ntj+L8;N#/h`frl>n"\Y,JRO-F3'10(,*Ap + 9(R,X6N0OY>ZNlXmW1VRj!7D6DW1^>*SNh/2$*D=']IeBto*9St:cZP%E>L5ATY_L0k2F``kjC/k-@28l&OmZk3B) + jZEIIY/f*_iHM$XZc0k#dYD2W57e(C,YjRP;me62>?F+PSXDYbdC6nTJ1)4M0o]p[oDe?#I + G5Q9Ek\hgJ0Fn/%f(^qK!cQrin*^)B7fdP2_sf;Rn7M'+?O-'B$uaFPE'FSH:7^n3$?#kPn + )(GNa.0qp$N]N6o[Zmp + +:2"P?,o!oS.D`)U))0UNFe;n2+'/%I;p%U>G!Aq!Q>"E:C;SS

kH1NC[pLdWP7riccH?^6-p?uYfS> + 5g6. + 4+rVu,0o"OLP>eT$#ncN + r=qqp873XJ=9R]8PNCG1TaLn*9-Bh$^;Q3oq@5].!7V@m`bk=1KS'U:sM58"@ + 7u(",<17AVTe<'=@2.u1:9>h5<\&5pXZgr9WEAAlX!L)L*3WKsZ8sk?AS[B3lZ[%0`oVNXf + Pc!!V4-L6\mB=kloi55Bte#NGWSoL(Pon0X;MGLB*3jkj)(2HmO!@Vb%ELI3>SLTX0ZQK]$ + 5E=@C+SQG$Ag\hfZKdDE$=`rj*[gM*h!Lh?L$Aa5HA3r16C(T@)9_q7R8\K:1*Jjng(sY@" + +_n9DOY:8\c5hXpGe^>D*^bM_]74b"!LUUTXer]SRpbk41rA-2eHDt:pI^p#@(mQU,Eo)uj + jF6*NkO5(TX^2PnT$Tp,u1CCu1X>(8H:t,@I_p6Ior5>jF:BSORHq+acZ)`ia7*XdlnOAYq + K-/&ee6qgcYN/P#8!6PO$-9BTp9+kM<7)Y:3'eiGQm+4eUZjeHT;3 + O^/.aE'7(I6J,[5gh-ofUc!<)OuY<)^.M.jJ(NNCQ!,o0!U0I(0%Y`F"l-E`E0TX2'3?3[^D#'>':&q"'P?:G;%=.I+*#V(0tWjc1X:0DU%o4YBVo7Q4n(H;U#_;fH+VSc":=?j0L+c#&:Os8@N.j4phY&#^HLar1-!+lYm + %S)U//iH.Vj]Pe*NBU"4-'.1j>7$37W5G6^,5ATVS`-\GD4bH#ndh>Mfq+1\XdO6gSKV*V3 + JZaVDM+k)qK@m\Xa69^T-r?)Dk_&/dW)(VR]aQ%kh?lpU>\]Ceu%dPp8tdh=[(6>lMG2h[q + Qe9X/RS\NqL"oqnhF,r*d!O?q`pu6@J]+lUD[if?gs7::4IX + ;B\Sq9#7&BFdpBe!F#kq>cn"$>N\+U35(!^D0LL/s/4.[hKDqr?Jf_'[LH*-hs+-4h>ITNe + ,G5TqA`d0fu=mE'Cmtp1OhKO,5G97&0M=PJt/,9*Hs-q7uSkn+akk^m9i-N\Vr42OVp=h*e + Ih2qb3X:+??:2&HYO/Y\2]VQubKGJIL&XG0'*VL."Ei#3eitNF#@Lae1CSA[_L_p2@:9OtY + JlYl(.AY"*&E>cR-LuE9b-.@8qF'`iOi7Ma'D@CCP3`Q3p-A?+9Y,c6mEO9Q=8W>OeC5n9#/Q:8.rHP>EgVKT.;rkQSRr1pt@P:tSI6ui_ + [AGc"6O.l>/kt;3>UmcK^`1'CZko-=E?^4JT0hY"c,hS'@O#$sWb?-Okj-0_/APQ\uq3`jI + 6j&iTMG?Rl/JcHEdJpK_npe0mo]ULcBHHqt?.D7LS6.OlEHV?GVCf@gU>kWO$N20+1GRPeTF?'(Zkifr*]'2WJ(2QdfnZr_"l + `bPFaX>=n*^:JShCfHJ&1pYNZ$=@#>7A$tX$ER635sX\^,IE`AgJhC&E+656Yh&5u=io]7X + uR#rG7N)'k4`78Fi1ah0#H>31Mq#hMn4'i^tDp\@4a$h\b&5Vg"Ldm,1Va`Yr_#QW?HM\j_ + CU1p5m277t'jfqP!O^D-jhqD'L(O[n]-LfLe/,j_PEsY^SjgHe/Pie7l]X#1d0Bd*aLfH\= + @Vn6iliG[;-uOqM[=gl+IGY/00DGAg"oC?P17./OXR/!lFK6(#\f-3UY`XX#UO + j=p\D`n[:[!Ctf`cHa/^:S!ClO4"B=h?N`&@1!9!Cs5IhKN\__AH3BE[j.&o*nnr'\R:dGt + b7SR]hBfXVXopi-Xbo[;Bt]o!(d2+3P+D#R_-(h1i-_M>DI,oS3BK4]N0^eo)h.4Lrp!qX)-U6md6)h93;TI,0>Nu*-Vm + T!QdG#H]lCF'AG"-6!R6!ED(]C0'DT:<([nFf^)9L#]?^;&7OB5uauca.h%h9]UqC183MT6H=ogcH6DS657 + ?K?kE>A2=2X$(mFaSUambl@aS>3[#(*+0m?SiuGHW+O4\pRuIRD;kT1:e&.gu"1:XSkX=2- + n:K_Kode+S8?3.6k)U-BI%li2LU^"9TX*r!?kMN@,M;XL47dje2u4;ZkB`2AoR(# + 6nm;=QID8eWI\4%<5I9JMs5>>SVkq!]@,Dm]L>qZCd`!DbEPO3%MY55*aVLAm9'#&^Xl@dmjo@gPu'.`uun$ZOY>m0R[3E_ + rti0VgEqXtpWZ.0T,nnAN'Q^b"uf1M0Vq_F"Z_)%E+,&Hr\t7hDo"&7Wfn:uN""$oIJmIdnKjd1$]j*>5U($?6P(EA1/X0,!ct&PY,Jk3R1YR2&;9[Na5%YRAJ@ud$h7OJ;4LDO\J,UE)aaKAiuK)d>9"6;((n_+1"@([cQ$Xh' + /A/J1!p?ukodD@91-6osCeU#6.Ac>\dN]4Ld$M]l.?Yi#&o(alFC8\J1=Fhedc+X)e6k$l + -P?k:`K`([o-70;,1@<3dg[jk:Fa5R.$G#nUK86%b:V0u>Z1STdY/$L5[SRX=VDqr0nP)+L + F6#,1,DQYnOkA6V),Gn%?gH#1?U$jfepX%1UD?HPC5;eJN/iV'_@G91=%rOKcnj*2[&G+1Q + +1JB-`YV3O>\G;lpfKUCQmn0f+eL;HGpn'0#H\2c8$c;+ipucRUfX4>JKL'?`/[a"NY24`d + Yde$q(fnNJY54;5@noB.Q$iBTeB5a.U#F8n@#k<1$84k!h+<$t"pi%Ym=<`:G$&?@q"#ZoJ + O?*kD5i\rL/X!m%I5r,2cPWqTJj$(np5*Rom`Ml9?77K&E6j8uCP.s8h>;M!A.^WP-'GWH( + 0N8a1/sJ"=;aX#BD(ekMl?%)=P;Z\;+$l"+6cCW67>4@`7QhHD8S.3OZ^idlV+XdW0p<2;A + Pl,8I7WuH9U!jp'Ji@7gC3_f/4@ZS1j)F_.o4[p$1unF&uSI2nJ`-g:"3HEEq<)3W?`,F7. + h]TFW38[-W3l%7'n$i2'4FBBi=So;NoX0PY4Z6hbGmb2jHR1Pqu#GLK&B5:R'U5oc7$i4&Z + l%7?nf%*jTlP8@r8\Y[VgKZUh,.6N;iaUIroh@cl?I>Dh + ebgW@,=WBY./!ro24k7W'b)kC?nr$/ibRo7f,BU.C9Q=FNmMa$j<@+FrnG&(ieX^j?+/XE"A'ttgaT.kAZAMZnoG.g + ]flYb-mGVlj8F_t*c_.=DT13J((ON1ukEC_qpB]h1KR:SOm@0)Vfl,>:A50)2fBh*4)pT7 + GEQlgf-O,b)0N1XA+o^d2-G%qO_)"EF;LWh2?e!mX*W8GB9W440VNabOa?S&GIP>!(MA+s_ + 0B&)/D"li':4,Kf2:+qH*^S!FEr;`fm\#pI^d!32t#uJZORa^2>@%W\,gL_>A=n)ep%>_GP + LIt]4\VEJf#_asR9i1U2JQ6 + !.X]pN>%tdt+%!W(+3,2mJ9(d + VVlp7"f=n,oTrjXL2i$h=f3g5TDAuN>)Hm;NkC-gK-S(.Qg:Wq)lYlmKXrb-OaEb4Y^cM]I + $1:$ORgWnAA/^" + &mk4DSS:?8'AHkaSBQ]o&DXXR&\rPG1>HI=18qr\;]A''A)oDj6b-g[XC.N9V#]%%V#'Sb? + #FhN0)l^PRgUl45R&42E47U"^\o]S%^UOB\qs'Nf&\o@91%_446;M/g?/5Jk&2`Om;->[>6cY]Y8Q^,tZ!(j + Eo';Q60D`a!r-8o)L1K>)#4NWp06&')>QJ\+%8OW2cb-f;L_HNLj\adfQH4J0_8X38gfbT+ + +9>IK;,Zc0RIb$<6[SC>VCfuk>Hc2>#U]]I?7GK_BYaEsK)>m;rrDIG3gXD%FOB?k?U\]'T + W\.7!8-mFr1V654e`uQ;/h'E-9/'%KcPC51%>h\edk%,pj!_>V\7WHpXkL<`jFH7pPgekDp + ("KWlebhne)q_jH'>rWZe=8nY43bhEF2Zm]f<>e)I58VGb2ci@_n8l_*LG8on?-&he#Uj%D + tVhTKTWpW34l_o]On.3He9>[V#1; + 'a5nnHgHPM@23Y'\^I_BO_]J(q[0i8"pVh54YpQsQp'B^GVd + bPl2^7jRo(%7^Zj1^r=*\kt_45E_?oDU2p>tedX0?p$/n6@<1*1QV.$fE*_i*SFp*dX.OJ& + XTDp>/s84`0q"8bh2([_.tc*gPU>7:NspnfG45SFsSq=kB6Hk8U\]r\NuWW\qN'V1+-KIu1 + mggN6]f^H\9q*tRSZ(2"k%r!N8Q*jPLLqnYIl]&%)orpfD@p"lDCbVMKAOB==\&IF.XiK2\ + o!X/i0!$C_jX:cs!MacZg"#P!@><"kZfpKX[8`5bWqA?AmV=qb8 + SJqj[GJB"ZHk-:RpD?)Dm\H"p_r8FnVOL'.C&d2ihM!g8?96]mDc8U`+$':*+\J!R']A!P\ + d4Kc\.50X]`=)^)`i2j6BXGQCCT(Y?WnCR1?i;_1_0N)bc:\EE:V$\!kOkl\3`C?#mC>pEH + f`b3F$EhQI$XiUM0jSmOFKd2IC5E"1A\?=!^hWKMf>.p'!;A9'CR4BgnL>.TdTG?NNs1FZ#N2Bj58" + *5t?=`Er)V`GZcGirPh'n_IL1Wp5Ek4Z]ahqNBkW + 30`5UgDNYRD_amjn!?VMa]hrgSY(Ih,3>+`j+;kff/GX(EG:#]*1\QF-9 + 2(!:s?*6a'UZ+$lOk9ti']>caL(]4'KcDo?KT`oE?DZ$0tMG4T'HEG/YQc;gNp3hYlm<'HSRFc*O%u]J`4VHq(?odYGo(D]fbP-&4IWo5] + \C5J,:Y;9qkF2C6PB_KA#lQerQM@"$VL&'9r%pDFbXCGUi!-8;W)\JYiMAlHor]X!ma)^?8ZN3P + u2[91lu+@K[Sd2!cCGiiO=HsgjY^,DjuUELk@=C[5'>-JRGb(iR#Ff5['Zk2DQu4;+_*].! + 3e0%9djM\k+sGlAq=^MN,umPe(>;'9j*'N7,hK7H/-_QBS%j:+C*RkcHS6e&Is.)#i$a8l2 + EaP^g35%bOY*S5B<.0 + sGg./]-5=-6V:-3fXa)QVlb+:5eMSpTL%AS\EBp]AR\*T,$X[CtLp.WVUITXpA#m!mNckW6 + d!I3>.j=>e(1O;aC-uX0`(70JQ>tTbcV`S"T/8<<\6:c;CS(d7J9.[qgIgQmW7@e6eILEdM + ,@O>l%?>:$Ah8U'iXMte#[VJXiQs59Iba^Q'WtPg;O4Yltj):pM.rR$d![41-d)RIN@4%_0 + 0a&d6CHUR`^@Uj0*jY\MrA#P)Ie=B`'BpYNl'lLq%MEH-O')pA/0bI=\N=Do('Ms'I`5J7. + 49]snj=7D'ps?To7>f>@YY.=Hsph@-V[1D!pZfmrJn/ZcGQ(#f'fJ?'_/]Jscsik,4PE1T; + 1\Ea"Ekt-j'Xpi2c$Q$?I+E$_P1rpO^&`2lDNUhLDa:4U9@U#OYZJJ?spb+&T/@euk-3q]c + h[=!HE=]@@*6gK0[c;a@QZITFb;XIeB:OU1Z:s2.BbT"fsuE8h.V5/Uiqd!g3O]Ql1]D4HQ_-J1mIS"LpAE(G'/N9d9>.i + 0L;R.-;/hKqPiZdLZs0.Pk2%?#2AVA1r,WKjN^$V?Y%?Mg52k^3:Qi35/_Sn]#P/88\9HOK + XLlrMnZE'1=NW]HljlL2mumjNLp,55'aa + A]13:6X'^S\couNCW]E?-k-LIFinNW1InMc8tUh0jV%FpSr_f/+W\F.;QX=0'gilA9-]V/& + A%-(NoMUS^dWD`cj5dT6V3?nJmdJps`a8.&TFn?=8EZ%lAS0nX\e`?WQSm`Tb`.T(P8b0^D + ?1kBrudp+lVkm,$4YqObKp=pLdK^ZYIN^s^OuF#Qg9^IcJCYBe2OR&\3;Y3n?nIlr)-t + pO&+WshhQGo.rV/c(9,kC^[kM+XiiXnjjQ;@Yja6*r&"U`rd9D](2)7s(_ZI9.K9_8?s9^(GA%PU/[*+i>266S!W'3R&242iBdQ0/P + ^Vkc)FUS&<0%6?G<,A2>1K4eHOS_IPPT"?Ss1Xgl#)NPmtJ#dhLTYJa=8ZReX4gd=I,/?8> + '3UB4lgd4Au0LZC.S.&1W'9>P'9Z88A6I\Q:\g,//eO$oH`@O8A9N\l:6:J7=7I3C\`$WGr + 42lkX`\]3c#k#VF,K6`k7<7ree2Y>8#=`Ms`Om<_`,(^7:+I"h(Q#l5]M:jen4*R\]0%*'" + BVUVF%9b]UI9)iUiJ<)H+r"aLbs?Em!2*2:I#U'8&DFKj8d!F$G[@*VVH^:g=&2!#,C73+i + I58<"M=uI]Z;!+hWUglY&hZJ]Ook)15aK,Rqgt^f_1\&Ag8mjsLV@ + ""2T2!'6pJ^iA[YQe8"j51S;YLjSk!UhO9D5M["KpIH:N(Pa^f6\KW'lXKIN^e87W>IS>7= + 0V*AJ"9!jaRI#l;nU+'oR/_mHpKX%sZS'#QRb6`^Aj)VsuMFW''Q`R^+>Ra31]uNf[92f]+ + P`ADe3W]#1(+oc5^` + FS?jOG#>5a@9`&d*eI#$@qFFeATfM` + Q/&RceQRhr@6*p-5Aqnc(oqi9X%5#!6lM,:aFCX<7*u`/l>mub[f>Ibi;C9/3fCbb5Bpeb- + =hZ5uY`:dQL%K4&s],(t>BS_t_b]^uX"h,LkCoe==c*C%2tH9TXBlQ&SSa78VL]GZ?%g',3 + i5bRE$-#$#'S[ImKpAQ9eb;Ur0Veb*/_,a5WufsZTA2H;M1oiW?L@b*\PecB/I'kZ!cCK<; + sdpYu%NFc-:C0$H3ep1WEF]R(_DH1sA/JmN + I7CmaeTF_jX8(N4qpJ+rc6h/86gq:g&Zbfn1HPbY,Kf\@U-/fgCue"ea8:j]T3[fu + oO]7@2^#O'2W4=dp_k;`?n(V:n"r=S8W2CP>reT0s@>fs@O/eYtu;PHFr'\bi4+P\E7.*SU + Ik>7HMFKsfUnUK]g<>Et12e[F/-Q)ec7>:k`f"\N!AZrm:7=UWZGjcqi#Qidon'F=uF`5Q.B3re6O*60o_XU + _kPkUb?_Nmg)\l#c,*Y4hH;_E?-Abp'qnk&ADFoq807pgO79._45>qA5m%,]#]hpF8fN7(VkqH + 4OfdY,_M,EgLb$"+c/cs?]JHIU:>A?Af6ODDAaSAn3kE_l%Xe89plSMX$S&(XDj8JOeG*CS + ipio*?>;u@>-h'CmC)q6*6hrNPNVA3G8X5T?a?Z#Do"\W2spg:`W=C!.YWJP!kktCF/k9Mr,[nrI94eYJ:24=JB]T.Si\jjbefj'Z&7M/Ik$) + Z\jR$MB;-/G^AWCeCr^c+a?rSu6B!+nl`8G8?kN'l#kE])[L43]GIq;)jkR#4A*A(o9.Oeg + "BM?BY?9RLiJRt-RjeadX;5WJF@FDlK2D,0q:1%TcM3P_1Bb$']:6HbP!Tni?Am?+BhJ(CR + Lm3C*ICeC>O+2O[09JFm\]8<<=M-uf+hIip7mg8Z3lo+lN + MRaf"#SQ\ngtQ` + +h*@AZG`ia%4DHKrceE)5251,Mldd&=K=2qW7(-pJHV-#Y27^fQn22$i&hH56a7]+jTk/(p + %[mNXFC_j,?Jjj!eNa0Qo>Q*gC)gU<]Zt'k2"Rb?A6MSFjo16T3Po,?'a_\ + F-k^;pKbf3>_Ueu?(kHpi,?@*Dp>1tmf$Q&U@95jm_8I$*M;$@Y4)r)DOo;2X=ituqd)br> + aFe`rsE)1"Rcffh_!FKjc/]3$uhgME.71n]u+gh!AgVB7@!3/?KgpD)A)>r7f>J0%ih?S6u + f87b%D]&[?R_`dgMcie#%Fr6='-?P\m[:bbbPIpp#ig"32qnAQ#/V%k2Me,3'Ii@S5rlD_5 + faP/uFs@XdAIKDFhA']\j?o04Yo?J:]WBCbdUg/?gJl21&;g0lo\*EO:.mal'geoSk_o*7D + B`adBeYk(-=2MmiA[WOn$j)]u,Eh=\T#=[eD+`k[YlTI<$-Ur4>Mf)lS8bXJ$pI=\F8lL;7g\i3l<+'3W(!S`qop:]j":N5/tEH$,H?@1p\T+ + ^kb[.-A-FcS'I:O`"%=Ecu4G)lNFQ$J9qnjES*:R`1V(;PS + 8oF5)s36CsERsI;d+'dfHpR6DHSp;uJiJ41S$4<.TVe8C*qOa%I&$C5k(])8XqVR/jO.,oH + YU9P@G^$X37n@aB)tc^kVT1Re2^`VNT;qXu$^W(ca-3Fl.e3/*nisr>7n`a*9_3J?-J-"S` + ;][Q^3G-';c/TFXg\:rH5n`E*,4L(Cc/<6LOGi9aY/_a()B`gR_I[Qc7@Q)4 + [4\-&fUjZMH].h_h=OC2,b'2NM.Be*Jkn*8G;8\".=)3a7Vc+W&Jl[lF?;^NhouB=GDM'rq + ;Q_t!?r9^b`kcg#U2HqcOIX..Z$]03P7aZm1(cZ;8lJ"Kn_tOI,c5WGtXV'lFs/*(PZB%GYl;])p;P]Q<8VrZck + "7::aXSg(\q66C;KHPTkDS"4FqI:dJZhrEFV0!Za6..8ojRkGAC(2sn:";)&b_f[gJl7g(__.k[4,Z$Pa>`0YJm`g9#DQ[I + 2@Q3d(fg@i@K6TgL>uC%-D"\Lp-i'C38Pm?j7rgV/`^uJ++e%UmST4F=Ul+2dogP9]H1$'GAU2"TQRLPI(OtZ6mZX=+qAu2okh:nBpcj&DX/Fq0Q5crAEF)eEdb#&[Z0 + [:3obD52?;HSuRqa+Um.aWCZ#4fHm"k*L7[:[J]+1OLU&5D"#O\)Lq3ga_F=hq,gh.YEi4P + +.c1@:)AA'Jd$Ge;>.QjubFPQ/&Joh[[o![=:.[*$hEn=5\C`T?3?7Q/G[@'#cdG$FK'KsE`L(Li_2._5Nm3u!.OBb5MJKM\a9k]>,UF%q'!`oTff_kQSFr[uNge,TF%U + /iR=J*4A%apQ3g0m0`k$(NcO$)?:kj!ifaC6@NCe*>DI0KgXZ>[c+e,@gWQ?%6-Rc& + (He".U:MIdPl\+2qPNJbkaPSin`Ec6f60so;mhonXHAh6`YZ@e(!b_1DU/d`1]?3?Hjc'hV + ;9k$ManJ>:FG"J;[Z3c!$UQ;]+G0:oCe78i-(_1,Q0.Z3?Djockg?ae+5uN)%NZhO9g!;]dpVi:KegnP$6N]o]98DE<=3WQ@/m6EeNoM1,_ + 3Dhm;`STbZZR2$=)198*+,Drr[P&$L7i56'/oC#$bdHr)V,4AVD1h%e60/tjB62q(N'>q=H + ?M$MbgEc5-qRVf&=*^UTSVP_908l05)A#Y]GhrZ#p[-BUhekoB*2bHJ^h\$C.tR-25k,ref + POSMKFE)r#Y1DVBt`R'tI,c+?&'mX9k]GD>X"R3!-/phL//b[m)EV>*Cemipa,qI;TYK5X3 + 49K2lcFV(Fka;CgN2;\^l0["lP*Zn*!926n*!u>WW/S-XhrSH=a%Ih&61GQ>1jH8&R6M__C + [I4Z&I't#/aYBp.U>Y0s]:2Zh@b>,@4*_`a^$nKU"%sl5],XUEFBP*>*=[\*YXTJ.^'DD3Y + 6a)m:(qTd8^KN:2WSnFXm_dJ^@a]-kWNj3E$!?UqbJDX]M#Et:>a\_Q[/$mh]!NsS_s5RJ8 + gL&nkR_N4`Wc=nPsG>pfu!*Rg4f>5#3E5f,nP/Ef+L9;oSQ60B!pX0!*nM[<^Y(kWJB$\To + *Cq&`Dn]XoP%fg!^4^L?H^^PHR4&(5a\>i^,MneSl>6,O/L.8O6$*YfD#$S + r;Yg4n"mC+9?aqB7*j2<9I7"9n&12SVZB!0/_>hJZRo" + qLh)*;YaX.n)-L&46&N\4agj"O#s'V],^`dflq`b4%O:cqaTP(BO#J#&fD)n0nX)KViYt>f + KbF$HW;470W1G!0Dg.OG5jA&6@Lt#7`H9C1H35O@\<6rso\C5j'L+OC2E"7h#\=BFsB=X-jO + h(i.MB&n[ICYeq"a,!Vj='.+A+OQR3&D%'8j%*'q.EBb%Sf+iou%aeoEnZ%qbCrciXdJ_J_i69^t%V;3;mh*tT#Q)N`hiYn7bVnIs;[*g,8!EQ'$iq\ + [^$'%.(-&BQ"L"!;OK+`ZroZ2kB:Nu/J:+481T1(`o;0d-"p3H:r?nOX,YPX+bc)of9'&VD + <)d3N``hJth%dK_";5_lXX,#W2&1$9j'CF&ET,Z0C4EN^drN=4"f<=Hm]X_Q1V\gkmnXm"d + cN#*&)_^]1\_X-G9"N)`_m44?b$HhB[&617/R*B0*/Bd8/P1(s[Y4C#>__;;Gc-T`OQS!7D + /YlZ(nrkW/GchL^0%0bL;Y)Cp#+SS\/h"aEZB$`H*(_C9iFlPR%JqkX8q?>&11tua;_9+b? + AK7OJb#nF9,`)>5V*=P/+ZCj1FXnRa#.p5jKhc9kfks51GohO0FZPk1Gq(2n>'!.26u$pK2 + FC&JhJo12,fDkdoe[E3B9fZ39X!q1MJm+D`[Kh2tO.3Z_ohTX#G+'2m^1Z8$=sDd5s-+4Yt + Um/=SR'8NRRR2M0f#r\])l%f'ne)\BQ!q*D@2`(J!e(fX6#=2; + [5R0o;1M&lcpiSD45nkD#F;+.d27Af00FI>^tatIX+Nol(N%I69cb;4$A0dk+2F + ;IR8gk[eIjAVaFcBNk?\9h2q1C/A]dipH-)`X$,lu%)C[*^u-eDBiN34.KtZ@+\;I8:)>:5 + >MnFDU8>'(pLrad;Pn-YiX&2k>GpsNFe?r3H(5?oXiRFbr9u0d#rCc + `H9Jnt#[6[FmChQa8/HB[o1G'egc + P04G2)lp?YUMI.?R4lAE][IS4=4)=NHP>2Fn9%?].Ohk? + "X%Bp!m7:S::jX.(.MZ=>Q8e2.]Wc@9tHY'5TnQ$6rLR9Wa?A6+=^F[K-84%tPfr>&TlQ('Sn`G%2`B5Hl(1ub + !)[ki]t>S^1Ha*M;47V*!b5aK!jm^0egi656`=LRE<.$\/:-!]bC-8r%uB`2lR6Fca>;H4* + CMU-7ZCMu*NmLJE"[Pr+,).6CNea\"1mn=N.J+q!'<$d"%),DI$EYs"R<[1YtUI82HE/?N3'[M^TWDb`'I_tQ#=$:U= + $\@K^i"ui5fH#HdXHU)8JX?FgP3\)d@>FVB8/GOjfOn<-nO5>>KNSVB3*0duO%AU>LY-[*F + 4=EH?'<)qP6K6/nGQh+KiD,FJlc&TAa!4HN[D]&LDP#DUt:j,O-S@WO]Rrr"CI?h++0eAPp + baSQd\1EZO%QedSO+%"X6Q5NDEWG@A/O,UqOQGX<%;tQ"!7q-4=IT\Ip6lD$:$YW + \8KHcnS6P#AZ[ss`_J&2+`K^Y92o70kNT3'E@2elAR\X>J5oTpk"oc'DG\QDhb3sO9@I.,U# + [r`oW'JR+*L"^'MopohRSkkeFV4(&8F:^NjUQTmC,5G"p/1$U@kqOS71WRt2MqsG;6)]*JN + 0Yo=\!-9AFi.EafALaSSU`]d4h6QEqR';SMhi;'Wd8HZ3BHOG_2 + 2@=O'*omRL"'TPuTe,TGB2SVi.Gk1U&oEB=c'cmqJ^;23B:%Z'JOf=ETQ`\Z4iIZ.`isENQ + #Pi*:F$+e3R"JmXDdJo5H+98C@LZU)6)-"8WL2/9qY4I*gc-)jOr:Z + 8N@%#P"PYkp[u7gM4)?C!S%.K]I_1i9lLV(d]5Z?eOZL?7gT=m'%rpu63X6%rg:t-Ck_iR! + ;\Ge3)[fdn)jE5?AGFKaHc`$!W8%))\u/c><5Z,26,-XYYRXCBe:E`>rO"+\Zu3^eZ4jV)a + 0lG<[]!3E<` + NV\ael\l_cPfVS86*B/]IX/``F\.*'(3KT5#;C\b?P[>FW6.O2r7.^",hi)9'_k4heBcb'A + ice$ZjoH*@+=aHhCopts6lUL]lm-G.aCOut:c5Wq1<[TqG!4O(Wg'9X:XaP3X[I,D7HEG5: + Ac%YQ%r)(P)q9TVbM7cS:>]k8Gn7*G2_S%5O0F_X,,ET?XOSH^G7@]UrOS]s*Vn8R]=\kC> + 4_:*]e(Q[kD'HHuY2'g%a2mGKI7BXT*GbUaWGNg,bJ5Q-gTA)%DSlA&m&PUmdtC(2])s!(R + qG([\\#P%NdNo`(_ATMT7Lb3cpp6q]'nAMA43n@f4X'1\5g4jZq$PCc5jUIq#fD6\]A"3h, + tWNgKL0M8tJ3!8UVuDI9F:;U"MT(Yo%8SRpF]p_,8o2g3+LKgR[7>]p)fCKJ$-;rXIfB+5o + ?T\%#pBR`VM[or\3D9FQ2KI9GTShrC:kf^k*\r_KYe9sWVWindPoghk.2X5VoJY$-&'MKR[ + V=6)86kB7m'g\0a>!MWX]kIg3?4sAj5H+2XsfUeRX44WS%JA(p)h7%T5rS^M#"f$MAloPnS + em0-I"F\`hm'-rbr/P_/kNq%M-PYJ*:grLu#)!W`7pbTM*p-($p$OQYEBa=$IeW6,mjd2oj + #`UrYoE3rc:.Nm+Tu*h=Vot:%k^Us>l("RlRI:%?o*r5c,EV5qerkDJ + ,+-6Cc\0)=W'FkBKJj82?GW[;d$@tQQnE?*3.2@b0it7[.DE/_u8)t:#'TPa2P=_J[Ln$4F + 'UDAMEdZPeMPLQI+jf$<8R04IeiSZtWMmWBm?..Weh[hPXAW8 + h0Juc!goHVq:;K3fM)!@^=T:eshn1f2B-1Cc?.#mQ#F!hC[?KrSI@(Xjf%+r)HB+Ku[CP[O + ]'6+c47s16W+LlReOJjn%.V7W001cePlfbpD[5OjiGJ[`e?Paem\Ap3,5_G@S,>Dtk:n(Cl + 9]K0qWh^]uBR#ibFE3kcT"M9"Xt]+V9%CRa)@FE!d2#?Q'(n+Smak`9XnihcH7*8a8]U$DI + NIFJd_?gHnH4` + p;b0rjWbR&@oF%0X7=NO93A1fRH[5>ecS%kpbcN#:8+X:i!1/G.(9Thr')4\O%AdX.e?*Q7- + &]/aIQ`l_*]N<$Sa9r1tce7pO'&jR[afoiVY`U1og*A8q + ta5)f/ch`Xq>=Kfb(m7fb\Qg\ka(U5pm + ';&7fEaJ^2nG=u$H/HQt(ZT3eT?l1%53D^2SEbK;Y(:@R#P.^(_mW7Z=jX\]QNCDk'7ucN0Ak![T>V9_^D/Z;IIi,e%\HCNSn>? + Q'&nG5KAlCSgq%4Yml].7tDT.'YB>WH)JY!5r,2\5!m\L<6@YnfZg`DKLo'X9PII3V'OKKO + O?qKl$j]/d`up=8op4DCCd-bjGRf^6GH[^3_bk1Rr@]r2V?5GB8X]m;T_U!WG_MVo\tubee + u[72lS$ + `NcFe(P.MDJdeMK(SW>QLn6oXhCr,?h)eb`.P9%r29tJTb-5Gq,s%n;0V.&LZOSWoZ&H,/';I(iFsc;^P0L_df(U+(Xn@RUFG? + 4A#pcicmE)_YEfn\'4[Im]p0F!l@6EjE88\m6_Y?Zl>.U8YE90^%LgoCNF:WD'*J(\E[hfn + YH[fs.'7$s.leVHFUs`!fV7M]V&Fo2.6,C=0R%?IJ^NDmBZSU6n;@dVQ+HnP4kZpqKaBF$GV"KW + $#^Fkfl"MiLg!:mH@Dbhh/W'f"R@dKhcF_7ar7E`Dt^3X[0H]FcL]gq(\?M)eq6Q]njA?I% + 5V-9L#)RP/t9cl6=#=1et?CINd*Vi!WM649.KNd,Eis$BR6lP9/"R(n![5%n(dV6iYi>[*s + AB^'NKGO?Bt]%9j6P]MX=G5pH)+'@)gJTLSikLCPRM\_j`EVIc`\^tJMD+\HZo`#HL>\YbG + aYgLa%F0X[6L&D,MmI\A-bVHGQssrEG31Z+XHd^bn@j(Tme7d`[?l-`*HTKOELnN1[P(WuD + 47MkKAQ.hcHs5m+87A"OIAo@0ckV5EW1%;RWBD#GnmIW04'2(O,%n]#DFu.,1bN#K^#X*KC + s_4^O32b2pP9qpqMINMoqUN,2#cbjY#%$bJ_U%H#)Oa5NZf%^st(cd;h`e1\_O)FSES_7E\6"sm*&mA-8_N7hO--r$'T`U:(b(IenGYoc + qB#+o\\()3-3'=rX[(@MaI/o8D$rDY^<1s4'EL6uDR1b"^cV,u'Es=U!]i*b1.jS_MOlOR$ + +f/5^p7;cC^iN%Ohg2d5\pM;HFk^I0YR7<5qq7_WO"(b*2EBf_/QD?J?V<7Xt_(T10b9F,T + R?sVDMN5^0D7"ll_;s+c-SJ[gX/f,6YU-+[:ll3pUlOoGYT9l3lAoMc;5]1]JjrYmEfZD%6+n_K7WGZo,5^&d\t*NUr+F!llk!/jKEW6b&2nOe=tN4[*[H#fJtmF@@e2-_;8 + S]E0au6pn]AogEeHP"\E`S+F=V6:A);`5*n9Mn[-ofpe4&,a6G+`(H%X:RdM-+EUSc@YbRP + WTi%Y"$L!84o>a`#,q!LC%4A7Je&br/-@N+Z\nJ][LuCW1HQGU;d + <-aU;C\E^$rX>fbEW$.DbXKS_tc:q%.!8UQg^qCY>X50--^8Fs>#UNaiM_acP;2l(=QN.X^ + gPR>kFa-;1tjJ'`.VnPQq8s$R)9&N6E%krs=b+,>"Mh)Uh4j#%Ob+fHg0m'b'X\*9&92'o[ + N4Ba(Y=c`gb6uE_A=#BJS![0f`KZHF\_Ga)m52>bF2q^!'H;b + S)d+C?\9*Qc\mD8X,Ob%%BiLccOD6Vu3aA4Ni[g_ap8s9.[PGN7,kL9M2sb9+94*1buY3[? + _eg:!B`^6Nt`AZV.sG5AZl`,i;>7cH87ob-^76+ER=Y! + :IQ$k%&hP/)Gj,jc^aUSXV]BDmnrDfcNN9&<2.]M*#>X!9t_^fCqr(O_9QTUdUVo),ecpV= + Ij3u9_Ba\7'+V_&[%ZU8nBH;ii1-j/PEb&Q'Cl<2()9b1f8*F:+Y'rbr3t2UVr]Nb_+PCK* + fb,aO3a7ZqIpXjZuP8Y*UEkc=k0bSDhbQ511/tdT!.\"\-oH4k*BVde))=>piMr+&qRC6u< + R`$^&Bh##Tdh\d?hrk#8-a.6[??"h^kCf[4lf!T3@m;11(E)u(7epV;agFH(M + Dc\6-<:tK(A,W2PdC3(d_-M9*dI=MH82$2+`IqqG>3"$^.32SPR8\)9kn6o4j&b:M)B(]!< + $^+-IFk+DmND4^9E>T-0,kQkcGWU[Y!PHJ1 + f7VY(*mlV+m,Y-8)2>)dRS?&mRFO0'_(gI6MANO^?VN7tC_PuY0E*-"t)'\RQ.\dc<>SP*0 + e^=os;[bZJf*72=2P;eI,m7KmZhsA"rAG>K)G'L#PU-khZKDh + G([f%:N+.k?@Q;>6PDP`Hg=BZX/@P=_1'-28?a,l\W$cgR[sZXh(i]i7ne58'>CDS\H8Wgt + 5W]?HCm(29+E6`8"(??N?g*XjC=lXBhYNa=YS?aWB5kSP5UWeD8eTAYWD9jBqRCfq]0fUG-$J)r:1i=oK> + 34i(KXZ/2>N?@Ei#]WpB)&`GMd@HJk/e\^,OTO2jjhbG_(P*=WI+CX+Pc:'&:%Or$U.pCL/ + b4[QT[PHfA#grnPRoPR*NQpKCb$6h6gjRE,Q3U\:0jl%=X0pPemPJ3"YHA?qj5pJ99=ELh4 + kDQ[ic..j%R]<#*9(shg(iHu*ZS@#ZJl2Dg0RM4SkBBM27ME(@K&?!oQ&s*),Op?iq=O&IL + ;&tp"DRsir'odU[)D]OQFHgim(q@>7]_2=5n[9>DpsAh>uN9XOTdG;'oUS7TeI]<8sK6>Ac + Sq/GA,k[btISi,3C:R)iZq3+59Jk'h)(("6d^/*>\Vh-A$3"qfPMADtnKAe7;pQ5%n[S2SY$C'JKe# + &7k,DI;Nji2+EXD@GT._;l(T>\9L=L"#4N2@Y$Xc_b14NcSjY;s3"h*hIao*9?4IQ/tbpl# + it0&Q!-^HYIAMBPf\>7M"_VM.QP*CXr.B`eicR[:iUTCPKT2NbE$-[-PHBksia0c=,_p[qn + 7KCeeO-=f's*_/.$?Al5Smen41nA)haA=GCbTA/=F4>!YUd)r:d0AoQPfW>jW%?oCDhSugW + UFibE9lAd3.IM8Alhs4T=lNqrH/p$>1T',5cmCqCo2G32?h/)H:CaN"sU>Tpsjm2o$l"5k9 + 4Fh=h=)S<.mhV*f^>SC?ID + 'h(11]%c.=32Q0C&I,=aC;n+mI^QC;D$MXYpCEroZe(@gkEilA*dF%7rkri>&kmdN8_o8^7 + tcTPiWeag1'o0*4s``?_pfGu%]X>`B1]h!5l'(e+NP".(mT,(OGH?+4"oFFIESj?I^#k:'B + FS>r@hbDF@(\&6hFU(KTAq718LNQ)unJcC]mM5AjPB$CcoSph1gR-P^9(_R:m70#+:GQs/? + ZWN[oG7E!*piO.2tY-ZE+[40T4W$9B6%&=o47fAG@pP5"^Y4#me:F=05>[nBD23gBieX606 + ,W/A7`ogfe5QFLI?:piV,8opV!QWFF2jO;&nbGE$Sicg"BSPghcW'7.5[TkCQnk.C=tM\_c + T`-\V/Xr:k`I_G>tjs+\`[RZ%l\qJO/@%r_a=iSCp.#f%qoh% + p%h7BHG+e(#CLk<_qXP;mWdT1??&r@TG=EFGQ3lg>`FQlTi4/G+SSteX4^hIAT`A+kp0u,k4J:9 + ?Pr^$[RC%V5!i^`IQIY$lXMELm9k!eJ!`4;RjdTq=bk+RRAIf`jS'%m4.W;_#4`;f>V6K8# + Xq#$uu71]%jP7rGDr;X%hL]dPT!.dAmYUCb,&IX:YU!WRf7O8_*7:OYH<"^&QN5m0)R0594 + #Ed);12-<;<=Ol0A^^C-5!'^H6=]Ss/>dJ9RS;n.ac-LY6^^ZHZZt"!9hCmBi3]Jc7\N5M< + FYRb2(#Y&Pt<4Ig>ue?>cV"Dd-DE%HXWGrX:pJV,0=K/<@p#,h88&eVGo'H3pkN&6+boj-ce.2HM&kc=_4OrDAG2Je8iS(jtD/Wcie)9*[S_c;O-fLi + D,$qH:PMu"dom&_RcbGJ0d87'FL'ggLl%&PJN,^aVZ,rAnqGAAL`q"(LRbY/EmPa/nWW" + [.\.F!A9%jGpR]d>W\S]rrB+'1t%8\Lu(RqM-098h'sU%)<"i`Q\KAM%r^*!imcm$:N,rZ" + e[P(Ud.^i4D?sUrbL>ck=_h5u['*3CL+"1HNc;,&\[NF@-@!dW0aV2F'fKIdL&*U0g>5c(- + XPb7sV7ZW'aH#shGW`;&Inoh)D\4`.$$9i_ah3p9V/XD6P0CILlC;=GT'?`6m<@YRf<)Jqd + n&VXk/791+eK\?$GnP*2+rN/oL1'Ibsf2h7m@*f\s.4!7SCsQ2:=.KdF?'c:;CYZCYcXU20 + N;%)DpN1\*=qG8+J5LP+fi?Vp/br=S(ffsMbG8P`;b6]'2'1e@k!(HUP[+ZQ:b"8"?HY6Bc + ]GAUF=i\eXH`)/f=214QULXm@2hp$R^.`\lB+Ef>\X% + DqF\YEa/[7@:^Ra'Ti-sH6PSnn[uP?d*MAUOjO)Eub&j-t/tU#+F2.Cm/SO$))]4hq,5?#=Elon4i??K=Vl2(Fu;=Zc&Ju]pHrDHH,j>DOLn.F,s? + uJW]^a"lrTDSnDn(Dlk\0P7NUI9^\@Lk4a3nW@q*H!QZb!*g`!hDtqIugSK^]q`^*/j!0CQ + ]Aq\7FjZo9+jr-1APqgA,#B5"X-&mmJKfVZ;!3^e.r@Gs + BSH:2*c>q`Ct-UjCe)WP@FDNKEl^_],l=%b'$.fM01BCPfI3q[hS[QMJfb\e8nG?WE!-,N" + pa^Dc!C5nX67lVi[+(Q.L$T^^A3)(],1ma@Up.\+LOVjaE,%>Ra&Y?O'"5F6=KlSTr[g>&D + +N.EAY`4;hq#)\pCcWb\h3/L.:;nBpQC#k%)9[kiMilN.PHu;c9U-g\QAg9P:r6m9W*(,U3 + Y[N-"`_::\FPW*hfLTa9=Y?5[q6o;Ojh$h:DoWHj3t\hdgg.fpld..h!9Sgl'tM*prqmS^6 + #\@:I1sW+W%57MGt$G8Wrj<-0#c717h<>3*enH`=S4EDIubW&O.6U"dLc"7m`KH9VH"5>&[ + L^b>k#kjp^%8bGprG<^Y-##n\?GoU^$9>#V:>i>n,hVXaXD7ChcUkJYW9dt0P + X\Fs^$Cf$rbH;DT'gHMO#AZXDDH9fWj="-7TX7#pXdn7RqlZE93#D.Y,PLVt^K1J%_.Z?:] + ].Dj9(TEA@rB6T/XXl=VUb\sG=BYoWX?/_6<OBV=S;.lbggn62BU + !.j[9D>9HaS%`c)IR_9\ruW]j6tIc@7B?jk`N?5AkeWTsTj)5g"jpDfmJ3[!B`"6CdGGQ,( + -Hb.UpSm5rj&8VhTUbLmcDgl2?RrImQX]rjl]Dp!V?3p/_\Lq*f7l$Z)SqgK-S#>kN\9Hgajs*- + hJ0#I/[dZe21k=.UtGMrb2Kpqq5mu7@sN'jqLF^G+D+3QF`I+a`EB5Di;'uY1,a*63$C<79 + Ga.s/o2[$DTku5.8KB>\^0i)(u<_rC8p>;MYP(>--URNna;1\(Gcrcb'OfkVEh]&Q#83Hl$ + 2joRAbBA.V_Y:VtAP=db:]YjnmcRZK@:kqVPNs=Jn3_IZN%tO#KL$C8U#\^WlW[r9#WKRPV + +f^^Njlk=oHP/eRlm>9bP/CeK;$IMoh'0n&2$!MXQT8'L]S%VUi!#^Jh,gSO9s^77G>W(/j1V/J]NG'Qb#XN-%cC=(i;2&V,rq)gijS[(]2'j"*\!q.)E"Pd + mrNKL*4e+a\`DP;l/GE_4nELHh.[pPbR3Ns2ZD-d>0]TSN;'ZJ(1s"^cXZSV\$S(904\9cF + E)2@/N2-pg>*P>B+IGD_>?dWeQLq%Z',KPU>JbA\XQK@t)sM]H^GZg^m5Fit\Z + S@-3-;aoR[8`Oq5(-n*9Zc19=`,*HcNGZ60(&00ISI#auj3Z3YFq&KEQX;5nrgT + 3]?U*]/#LE$#RpRis8E>2>'C=S0duqBYglf"gm9a(3r@`rP\`;:aD]dagX:Gh3WW0/qr+C!6'K:,\NN^?n8*!Y[1%]"si2QX(Er-n9bq`Xo + n__+V*<.1cHQR_0?AH^8YIVo(n'\l:Ep-92rD-0^M&Pt].^(?*pF`3A%qMpV(;B5I^2BnE0 + 866?.lE@eQ:N!,7JH?>\2%:CP&"Ae*`PpBAj`r3 + ,>[a.2*a!7e-erigeB&,QTIcLFZtr\0ZFK0KN7q#'RfqX=^ADtNR*eeiF@5ln1:&:b;B + [Ygi-=\Oqnl"="(GIdYM3#;;\AODbKp`qaO4q!b$jU^[Y"Ka4g"fFM$a0/!PARhZN5NUOsg + 0aQ_Km,JYUnL]XfOZG^bW9;0k!%kMbn-I`%o&ju6%<1bHmqUTRi;l_g%FD]qVT?%TD%Y,K[ + #N#[:cQ!7h@6n)j#U_0NT5JpC_D.#k9%q%cn[Mh#_06%rP#\.@h3Y2\ + kh,;,Z$%\tt>>2D#K*iWu4n\FBc?O-,Zhm!m + EOjN!'o&=WnlZ,9>;>2LLk6Am)*g2R(P(r(\g?$Ym#>uER&[_a\UsMu",L>#cE[r:gcRf5C + j\j*KDo2G`@-1lX3,VaoN&PFEJ?OIKD$W9V8n/3Q.D + U6\k#%]4K%eT'bgCFqg%o!gNMu^c\gF9;=+`fcbdm5AmPpu(NmE.9iZDfZ8RbfhonoJ(nmb + 9ENh(0-K1i\9('6,->\IDI4#qt*d1Q+6>p@;hL84]2R!e>-m@2*LiG"X5/U-gu"p94(#/ui + JDF.54b(HUY<4#85f-J#u]_CtMJ.W_3nd&+^%]/d`p4_ju$;]RntPrf%95',[FOD-i+krS* + u,STo8PC>\H$TfV#,kMC*F5&q(#%WqE2=q)(PKlFuh^^(p42e47<%C8?+">+?IT-qKPSZ^. + s"3UQ)l31!oG']E]02BE1fHD'PU%Uj)*:`K6Sm[]F@eYQ;)^;RlguDh@_k+TMQW165f9-Y' + R<'1HoKP>75KusNuBm.TOe3X3:sUOK"dUblOI`R9,,E>@rk;Masltt9[ikSoYruBcV>2*/] + 1F\.=4e]a\K56.CAP<'UFaB#>HG4:K73d<<5k#_bJYF:ph*9PljYO)c7=<:R)/_PjqLK,>h + Gg;3`Y/eA2t2,u@T/;cOc8PmpTJ4%f/l;q4H#_h-1soJ!1Jq/M=`p]@oX.IDXM7HD1JFuN[DuQqo1h1I< + XrPGeWEoK&PmQ8=O`%3eg4c@"(KgV16m&]eh9\)'hsbN>udY%Fq\DO:AAu%>*_Sa4aZU- + D;[j4lV8'de\I[U`GKKk + D)W2O2LTGNj\OGrFE\1:1mrI[3G]IXC[JlXG@r6;lpV^H4k=Igf4Aca;0OsI!qg8K(PQp3J + TnRb@[E3o=,hEI]lY']EjqrmQ`GGaYBq(lHWR\'Qb.Ur^O-j8Hrn@9L^\N\D1(AZI4'o!Y8 + r%$7t'DdINq4/@mPRQjaF%HIj^gtVMfq:?%8_qJ*/J8-b4c:rIF%ZJ7G4#j#qsg4+ZEPJg3 + 4+@j-H6-%T\DK-Q5)is143"bYh#KHfZ6@aB_;7>#g;JN*7UGPGoT>C[PsA/J6n(hnD#Cc%M + TI(4BUR!XV@Iu"qoLffFgR#?dQO,4^;M--+$R%&rbT8FJ\MHHd6R&c+sYDX7(McdHHR(J:/ + ^Pj#IN*+,ZR*1H@c]&djNEFelR+mVQhi8Q6N`bJ)R-TdbmuJ=WO').;R/;rss,\*#OBDgMR + 1#,0&!7_CO]`K_R2_:A+-IKdP$'/qR4FHR09[80P?Bi.R6-Vc5Em$QPZ^M@R7idt:R)erQ! + %1RR9Ps0?^;R>Q<@jdR;8,ADjM>_QW\O!R[HcO-plLR9>lER@BVtT:- + XmRTZPWRB)e0YF?E9Rp!4iRCesA^RQ1ZS6eB&"smTTir8+RN%\4F=Pue._6lV\gVqE/1>fuD"r"! + )EE9a@>1(ZA(j(pRRqt^9JcN%Fdc0Yg0(6J6%PJ1K,S0N>%rVXAV-@jK%b<$qGj:OH%Xh%K + GoPu)Jt137=cA>WE9V/B'#tY8ZDJZW[=FYRbOsuhl[mXY$1"kRd7-1n#mZ$Y?L\(Res;Bs0*FEYZh@:RgZIT&$[&eZ!/$LRiA + We+0lh1Z.:9=h4sk^L"]&2)G@fU?\WprV*!A)Hh_qlo + qf;%JfFV9S'WAW%D;TFVu-_1gZcFSA&6qE8j!Y/]I7^2'r--oV`Zi7Ho\+;0u1Fe-9Nh'Hq + 5Gd9tS&:`EZK`S6Ntf?cF'q`a!/rS86."DoWi=a'ZSf?YF+6"=dia+"lSh&MXH`J+W$,/.DrFskHA)n[oj?7MDI=9\Z+lp?nj8N'?5!.h + s:T")?Wh*Xtr`A4<9tWVL]Y8O)5%VEVIA/oN]fq"^^5;%PBnj?]`'0IGhOEcdTB[Jml<^CR + Su_/5YNm79lX%'dT"F=F^[*#Zls@a!T$-KWcg;e&m9\E3T%iYhhsMQGmU#)ET'Ph$n*_=hm + p>bWT)8!5s6q*4n6ZFiT*t/G&+L_TnR!+&T,[=X+7^Kunm;9kJ + D\$=8tMH*_#_XD=eoGk8mk#5%"!?=nKI9je#QHIq@dBC%hRJotOT&+*[Fn@=Xr3X'^R95=? + ^OGLJd9_S;AQrgCYg48L%oqHp/sT<%hGYPTEJqd6i0T=b!X^\f1kr*RMBT?I/ici"s7rEn1 + TTA0>%hu4_Xra4jfTBlL6n,FL$s'PO#TDSZ*!<7U8i/h%t*YA^46K+$YF?Ui[M+$?c=L;Bh + )3%,GOkB;T5p;@]jH.%\A=fk`jQ.kn[_-sTNm$:j5T$_8[>4%X1FhZgS\QnQh>IE>XH+dPQQe + V35!J/'pndduoRE]@8RG@Lc6(u\>oU9&DT2DTq"qY[5DRk\b4bPDIF%5ls1AmNr;/a?bO5p1s\!Q1K;sa9s + \s!3)28ok;lAE[-p+Q1Xu._:UB]n5Ys9P#=;7o2%N)P1fY>];7(Hf85_:0-V@:D[4b3P1t= + N[;mc3^:fK:e7oE3aZ[!f#hEB?Ul + Xj)-fQb#b:Uj))mJ##%26%Pg+/d6XX(erB_?!(ssLY^UBiJHDnXsF@fOG5[sA%9_XMr.WBa + cY;f2G]QK3EB4IA[utkQtA@EB:+D/.QPtQh+G$ + (UHN?Hf:r5$Z.YkbW[Z\sIEJ>@U-7cbhkFEaS)L'T.N.9?IS,gcq&(YXk+NiRNTm+mWXJ-c + T#uuYTO-m_n,)NcT9<_E=3ZJAIok7qID:!`pjPGokPBYB\*s6E5M,Z/J%tUTJ.Mnc5WB&N? + o/+>&1.QG\/>BVF:Ws77L;@?.0X+d(P<92%7.K`gB\&~>Q +Q q +0 g +4 w +0 J +0 j +[] 0.0 d +4 M q 1 0 0 -1 0 700 cm +2 23.609 m 64.223 23.609 l 64.223 595.379 l 2 595.379 l 2 23.609 l h +2 23.609 m S Q +q 1 0 0 -1 0 700 cm +91.895 80.117 m 771.305 80.117 l 771.305 583.871 l 91.895 583.871 l +91.895 80.117 l h +91.895 80.117 m S Q +q 1 0 0 -1 0 700 cm +84.645 640.48 m 774.199 640.48 l 774.199 698.547 l 84.645 698.547 l +84.645 640.48 l h +84.645 640.48 m S Q +q 1 0 0 -1 0 700 cm +87.551 586.77 m 769.844 586.77 l 769.844 602.738 l 87.551 602.738 l +87.551 586.77 l h +87.551 586.77 m S Q +q 1 0 0 -1 0 700 cm +83.195 605.641 m 772.75 605.641 l 772.75 640.48 l 83.195 640.48 l +83.195 605.641 l h +83.195 605.641 m S Q +q 1 0 0 -1 0 700 cm +64.324 78.676 m 91.906 78.676 l 91.906 598.383 l 64.324 598.383 l +64.324 78.676 l h +64.324 78.676 m S Q +2.798638 w +q 1 0 0 -1 0 700 cm +89.125 63.559 m 774.074 63.559 l 774.074 80.727 l 89.125 80.727 l +89.125 63.559 l h +89.125 63.559 m S Q +BT +40 0 0 40 359.016309 370.18186 Tm +/f-0-0 1 Tf +[<010202>41<01>78<03>]TJ +-0.940084 -8.85691 Td +[<04>-2<05>1<0604>-2<05>1<070108>2<09>]TJ +-0.689554 1.161355 Td +[<0a020b0c>-2<05>1<07>-1<0d>1<02>-1<0b0e>1<05>1<02>]TJ +0.149952 14.44435 Td +[<0902>-1<05>1<0f>-1<1001>1<02>-1<1105>]TJ +0 -40 40 0 98.934296 464.044189 Tm +[<0a12>1<07>-1<0d>1<02>-1<0b0e>1<05>1<02>]TJ +-0.179075 -1.955155 Td +[<0d05>1<0f>-1<130d>1<05>1<02>]TJ +40 0 0 40 302.400244 123.393945 Tm +[<0f>-1<1312>49<1408>1<060708>1<1415>]TJ +ET +4 w +q 1 0 0 -1 0 700 cm +548.738 43.836 m 603.906 69.965 l S Q +589.445 636.883 m 578.789 633.078 l 607.52 628.324 l 585.641 647.539 l +589.445 636.883 l h +589.445 636.883 m f* +1.807476 w +q -1 0.473684 0.473684 1 0 700 cm +-505.843 176.493 m -498.612 169.263 l -523.917 176.495 l -498.613 +183.724 l -505.843 176.493 l h +-505.843 176.493 m S Q +4 w +q 1 0 0 -1 0 700 cm +107.426 463.375 m 78.391 531.605 l S Q +84.656 183.117 m 80.426 193.613 l 76.824 164.715 l 95.148 187.348 l +84.656 183.117 l h +84.656 183.117 m f* +1.840309 w +q 0.425532 1 1 -0.425532 0 700 cm +-407.136 257.906 m -399.773 250.542 l -425.539 257.904 l -399.774 +265.265 l -407.136 257.906 l h +-407.136 257.906 m S Q +4 w +q 1 0 0 -1 0 700 cm +580.676 560.637 m 647.457 595.477 l S Q +633.27 111.922 m 622.477 108.531 l 651 102.672 l 629.879 122.715 l +633.27 111.922 l h +633.27 111.922 m f* +1.77317 w +q -1 0.521739 0.521739 1 0 700 cm +-738.944 -202.542 m -731.851 -209.634 l -756.674 -202.542 l -731.852 +-195.449 l -738.944 -202.542 l h +-738.944 -202.542 m S Q +Q +showpage +%%Trailer +count op_count sub {pop} repeat +countdictstack dict_count sub {end} repeat +cairo_eps_state restore +%%EOF diff --git a/docs/figs/layout_view_1024_16_annotated.pdf b/docs/figs/layout_view_1024_16_annotated.pdf new file mode 100644 index 00000000..b7bad3d4 Binary files /dev/null and b/docs/figs/layout_view_1024_16_annotated.pdf differ diff --git a/docs/figs/layout_view_64_4.png b/docs/figs/layout_view_64_4.png new file mode 100644 index 00000000..44e7b060 Binary files /dev/null and b/docs/figs/layout_view_64_4.png differ diff --git a/docs/figs/methodology.eps b/docs/figs/methodology.eps new file mode 100644 index 00000000..57dd0aa7 --- /dev/null +++ b/docs/figs/methodology.eps @@ -0,0 +1,866 @@ +%!PS-Adobe-3.0 EPSF-3.0 +%%Creator: cairo 1.8.8 (http://cairographics.org) +%%CreationDate: Mon Oct 17 14:59:32 2011 +%%Pages: 1 +%%BoundingBox: 0 0 630 399 +%%DocumentData: Clean7Bit +%%LanguageLevel: 2 +%%EndComments +%%BeginProlog +/cairo_eps_state save def +/dict_count countdictstack def +/op_count count 1 sub def +userdict begin +/q { gsave } bind def +/Q { grestore } bind def +/cm { 6 array astore concat } bind def +/w { setlinewidth } bind def +/J { setlinecap } bind def +/j { setlinejoin } bind def +/M { setmiterlimit } bind def +/d { setdash } bind def +/m { moveto } bind def +/l { lineto } bind def +/c { curveto } bind def +/h { closepath } bind def +/re { exch dup neg 3 1 roll 5 3 roll moveto 0 rlineto + 0 exch rlineto 0 rlineto closepath } bind def +/S { stroke } bind def +/f { fill } bind def +/f* { eofill } bind def +/B { fill stroke } bind def +/B* { eofill stroke } bind def +/n { newpath } bind def +/W { clip } bind def +/W* { eoclip } bind def +/BT { } bind def +/ET { } bind def +/pdfmark where { pop globaldict /?pdfmark /exec load put } + { globaldict begin /?pdfmark /pop load def /pdfmark + /cleartomark load def end } ifelse +/BDC { mark 3 1 roll /BDC pdfmark } bind def +/EMC { mark /EMC pdfmark } bind def +/cairo_store_point { /cairo_point_y exch def /cairo_point_x exch def } def +/Tj { show currentpoint cairo_store_point } bind def +/TJ { + { + dup + type /stringtype eq + { show } { -0.001 mul 0 cairo_font_matrix dtransform rmoveto } ifelse + } forall + currentpoint cairo_store_point +} bind def +/cairo_selectfont { cairo_font_matrix aload pop pop pop 0 0 6 array astore + cairo_font exch selectfont cairo_point_x cairo_point_y moveto } bind def +/Tf { pop /cairo_font exch def /cairo_font_matrix where + { pop cairo_selectfont } if } bind def +/Td { matrix translate cairo_font_matrix matrix concatmatrix dup + /cairo_font_matrix exch def dup 4 get exch 5 get cairo_store_point + /cairo_font where { pop cairo_selectfont } if } bind def +/Tm { 2 copy 8 2 roll 6 array astore /cairo_font_matrix exch def + cairo_store_point /cairo_font where { pop cairo_selectfont } if } bind def +/g { setgray } bind def +/rg { setrgbcolor } bind def +/d1 { setcachedevice } bind def +%%EndProlog +11 dict begin +/FontType 42 def +/FontName /f-0-0 def +/PaintType 0 def +/FontMatrix [ 1 0 0 1 0 0 ] def +/FontBBox [ 0 0 0 0 ] def +/Encoding 256 array def +0 1 255 { Encoding exch /.notdef put } for +Encoding 1 /uni004D put +Encoding 2 /uni0065 put +Encoding 3 /uni006D put +Encoding 4 /uni006F put +Encoding 5 /uni0072 put +Encoding 6 /uni0079 put +Encoding 7 /uni0020 put +Encoding 8 /uni0043 put +Encoding 9 /uni0070 put +Encoding 10 /uni0069 put +Encoding 11 /uni006C put +Encoding 12 /uni0028 put +Encoding 13 /uni0050 put +Encoding 14 /uni0074 put +Encoding 15 /uni0068 put +Encoding 16 /uni006E put +Encoding 17 /uni0029 put +Encoding 18 /uni004C put +Encoding 19 /uni0067 put +Encoding 20 /uni0063 put +Encoding 21 /uni0061 put +Encoding 22 /uni0045 put +Encoding 23 /uni0046 put +Encoding 24 /uni002F put +Encoding 25 /uni0052 put +Encoding 26 /uni0041 put +Encoding 27 /uni0047 put +Encoding 28 /uni0044 put +Encoding 29 /uni0053 put +Encoding 30 /uni0049 put +Encoding 31 /uni0062 put +Encoding 32 /uni002E put +Encoding 33 /uni0056 put +Encoding 34 /uni002D put +Encoding 35 /uni0064 put +Encoding 36 /uni0073 put +Encoding 37 /uni0054 put +Encoding 38 /uni0077 put +Encoding 39 /uni007A put +Encoding 40 /uni0075 put +Encoding 41 /uni002C put +Encoding 42 /uni0078 put +Encoding 43 /uni0042 put +Encoding 44 /uni006B put +Encoding 45 /uni0055 put +Encoding 46 /uni0066 put +/CharStrings 47 dict dup begin +/.notdef 0 def +/uni004D 1 def +/uni0065 2 def +/uni006D 3 def +/uni006F 4 def +/uni0072 5 def +/uni0079 6 def +/uni0020 7 def +/uni0043 8 def +/uni0070 9 def +/uni0069 10 def +/uni006C 11 def +/uni0028 12 def +/uni0050 13 def +/uni0074 14 def +/uni0068 15 def +/uni006E 16 def +/uni0029 17 def +/uni004C 18 def +/uni0067 19 def +/uni0063 20 def +/uni0061 21 def +/uni0045 22 def +/uni0046 23 def +/uni002F 24 def +/uni0052 25 def +/uni0041 26 def +/uni0047 27 def +/uni0044 28 def +/uni0053 29 def +/uni0049 30 def +/uni0062 31 def +/uni002E 32 def +/uni0056 33 def +/uni002D 34 def +/uni0064 35 def +/uni0073 36 def +/uni0054 37 def +/uni0077 38 def +/uni007A 39 def +/uni0075 40 def +/uni002C 41 def +/uni0078 42 def +/uni0042 43 def +/uni006B 44 def +/uni0055 45 def +/uni0066 46 def +end readonly def +/sfnts [ +<00010000000a008000030020636d61700252f32d00001fd00000009c63767420ffd31d390000 +206c000001fc6670676de7b4f1c4000022680000008b676c79661cacd2b0000000ac00001f24 +68656164dd84a2d0000022f40000003668686561104507920000232c00000024686d7478d559 +18d200002350000000bc6c6f6361aa82b2fc0000240c000000606d617870046a063a0000246c +00000020707265703b07f1000000248c0000056800020066fe96046605a400030007001a400c +04fb0006fb0108057f0204002fc4d4ec310010d4ecd4ec301311211125211121660400fc7303 +1bfce5fe96070ef8f2720629000100c90000061f05d5000c00bf403403110708070211010208 +080702110302090a0901110a0a09420a070203080300af080b050908030201050a061c043e0a +1c00040d10fcecfcec11173931002f3cc4ec32111739304b5358071005ed071008ed071008ed +071005ed5922b2700e01015d405603070f080f09020a15021407130a260226072007260a200a +3407350a69027c027b07790a80028207820a90021604010b0313011b0323012c032708280934 +013c035608590965086a097608790981018d0395019b03145d005d1321090121112311012301 +1123c9012d017d017f012dc5fe7fcbfe7fc405d5fc0803f8fa2b051ffc000400fae100000002 +0071ffe3047f047b0014001b00704024001501098608880515a90105b90c01bb18b912b80c8c +1c1b1502081508004b02120f451c10fcecf4ecc4111239310010e4f4ece410ee10ee10f4ee11 +12393040293f1d701da01dd01df01d053f003f013f023f153f1b052c072f082f092c0a6f006f +016f026f156f1b095d71015d0115211e0133323637150e01232000111000333200072e012322 +0607047ffcb20ccdb76ac76263d06bfef4fec70129fce20107b802a5889ab90e025e5abec734 +34ae2a2c0138010a01130143feddc497b4ae9e00000100ba0000071d047b0022005a40260612 +09180f00061d07150c871d2003b81bbc19100700110f0808065011080f501c18081a462310fc +ec32fcfcfcec11123931002f3c3ce4f43cc4ec32111217393040133024502470249024a024a0 +24bf24df24ff2409015d013e0133321615112311342623220615112311342623220615112311 +33153e01333216042945c082afbeb972758fa6b972778da6b9b93fb0797aab03897c76f5e2fd +5c029ea19cbea4fd87029ea29bbfa3fd870460ae67627c00000000020071ffe30475047b000b +0017004a401306b91200b90cb8128c1809120f51031215451810fcecf4ec310010e4f4ec10ee +3040233f197b007b067f077f087f097f0a7f0b7b0c7f0d7f0e7f0f7f107f117b12a019f01911 +015d012206151416333236353426273200111000232200111000027394acab9593acac93f001 +12feeef0f1feef011103dfe7c9c9e7e8c8c7e99cfec8feecfeedfec701390113011401380000 +000100ba0000034a047b001100304014060b0700110b03870eb809bc070a06080008461210fc +c4ec3231002fe4f4ecc4d4cc11123930b450139f1302015d012e012322061511231133153e01 +33321617034a1f492c9ca7b9b93aba85132e1c03b41211cbbefdb20460ae6663050500000001 +003dfe56047f0460000f01a240430708020911000f0a110b0a00000f0e110f000f0d110c0d00 +000f0d110e0d0a0b0a0c110b0b0a420d0b0910000b058703bd0e0bbc100e0d0c0a0906030008 +0f040f0b1010d4c4c4111739310010e432f4ec113911391239304b5358071005ed071008ed07 +1008ed071005ed071008ed0705ed17325922014bb00a544bb008545b58bd0010ffc000010010 +001000403811373859014bb0145458bd00100040000100100010ffc0381137385940f0060005 +080609030d160a170d100d230d350d490a4f0a4e0d5a095a0a6a0a870d800d930d120a000a09 +060b050c0b0e0b0f1701150210041005170a140b140c1a0e1a0f270024012402200420052908 +2809250a240b240c270d2a0e2a0f201137003501350230043005380a360b360c380d390e390f +30114100400140024003400440054006400740084209450a470d490e490f4011540051015102 +5503500450055606550756085709570a550b550c590e590f501166016602680a690e690f6011 +7b08780e780f89008a09850b850c890d890e890f9909950b950c9a0e9a0fa40ba40cab0eab0f +b011cf11df11ff11655d005d050e012b01353332363f01013309013302934e947c936c4c5433 +21fe3bc3015e015ec368c87a9a488654044efc94036c00010073ffe3052705f000190036401a +0da10eae0a951101a100ae04951791118c1a07190d003014101a10fcec32ec310010e4f4ecf4 +ec10eef6ee30b40f1b1f1b02015d01152e0123200011100021323637150e0123200011100021 +3216052766e782ff00fef00110010082e7666aed84feadfe7a0186015386ed0562d55f5efec7 +fed8fed9fec75e5fd34848019f01670168019f470000000200bafe5604a4047b0010001c003e +401b1ab9000e14b90508b80e8c01bd03bc1d11120b471704000802461d10fcec3232f4ec3100 +10e4e4e4f4c4ec10c4ee304009601e801ea01ee01e04015d2511231133153e01333212111002 +2322260134262322061514163332360173b9b93ab17bccffffcc7bb10238a79292a7a79292a7 +a8fdae060aaa6461febcfef8fef8febc6101ebcbe7e7cbcbe7e7000200c10000017906140003 +0007002b400e06be04b100bc020501080400460810fc3cec3231002fe4fcec30400b10094009 +50096009700905015d1333112311331523c1b8b8b8b80460fba00614e900000100c100000179 +061400030022b7009702010800460410fcec31002fec30400d10054005500560057005f00506 +015d13331123c1b8b80614f9ec00000100b0fef2027b0612000d004f400f069800970e0d0700 +03120600130a0e10dce432ec113939310010fcec30014bb0135458bd000e00400001000e000e +ffc03811373859014bb00f5458bd000effc00001000e000e0040381137385901060215141217 +23260235341237027b86828385a0969594970612e6fe3ee7e7fe3be5eb01c6e0df01c4ec0002 +00c90000048d05d500080013003a40180195100095098112100a0802040005190d3f11001c09 +041410fcec32fcec11173931002ff4ecd4ec30400b0f151f153f155f15af1505015d01113332 +3635342623252132041514042b0111230193fe8d9a9a8dfe3801c8fb0101fefffbfeca052ffd +cf92878692a6e3dbdde2fda800010037000002f2059e0013003840190e05080f03a9001101bc +08870a0b08090204000810120e461410fc3cc4fc3cc432393931002fecf43cc4ec3211393930 +b2af1501015d01112115211114163b01152322263511233533110177017bfe854b73bdbdd5a2 +8787059efec28ffda0894e9a9fd202608f013e000000000100ba000004640614001300344019 +030900030e0106870e11b80c970a010208004e0d09080b461410fcec32f4ec31002f3cecf4c4 +ec1112173930b2601501015d0111231134262322061511231133113e013332160464b87c7c95 +acb9b942b375c1c602a4fd5c029e9f9ebea4fd870614fd9e6564ef00000100ba00000464047b +001300364019030900030e0106870e11b80cbc0a010208004e0d09080b461410fcec32f4ec31 +002f3ce4f4c4ec1112173930b46015cf1502015d0111231134262322061511231133153e0133 +32160464b87c7c95acb9b942b375c1c602a4fd5c029e9f9ebea4fd870460ae6564ef000100a4 +fef2026f0612000d001f400f079800970e0701000b12041308000e10dc3cf4ec113939310010 +fcec301333161215140207233612353402a4a096959596a08583830612ecfe3cdfe0fe3aebe5 +01c5e7e701c20000000100c90000046a05d500050025400c0295008104011c033a00040610fc +ecec31002fe4ec304009300750078003800404015d133311211521c9ca02d7fc5f05d5fad5aa +00020071fe56045a047b000b0028004a4023190c1d0912861316b90f03b92623b827bc09b90f +bd1a1d261900080c4706121220452910fcc4ecf4ec323231002fc4e4ece4f4c4ec10fed5ee11 +12393930b6602a802aa02a03015d01342623220615141633323617100221222627351e013332 +363d010e0123220211101233321617353303a2a59594a5a59495a5b8fefefa61ac51519e52b5 +b439b27ccefcfcce7cb239b8023dc8dcdcc8c7dcdcebfee2fee91d1eb32c2abdbf5b6362013a +01030104013a6263aa0000010071ffe303e7047b0019003f401b00860188040e860d880ab911 +04b917b8118c1a07120d004814451a10fce432ec310010e4f4ec10fef4ee10f5ee30400b0f1b +101b801b901ba01b05015d01152e0123220615141633323637150e0123220011100021321603 +e74e9d50b3c6c6b3509d4e4da55dfdfed6012d010655a20435ac2b2be3cdcde32b2baa242401 +3e010e0112013a2300000002007bffe3042d047b000a002500bc4027191f0b17090e00a91706 +b90e1120861fba1cb923b8118c170c001703180d09080b1f030814452610fcecccd4ec323211 +393931002fc4e4f4fcf4ec10c6ee10ee11391139123930406e301d301e301f3020302130223f +27401d401e401f402040214022501d501e501f50205021502250277027851d871e871f872087 +2185229027a027f0271e301e301f30203021401e401f40204021501e501f50205021601e601f +60206021701e701f70207021801e801f80208021185d015d0122061514163332363d01371123 +350e01232226353436332135342623220607353e0133321602bedfac816f99b9b8b83fbc88ac +cbfdfb0102a79760b65465be5af3f00233667b6273d9b4294cfd81aa6661c1a2bdc0127f8b2e +2eaa2727fc00000100c90000048b05d5000b002e401506950402950081089504ad0a05010907 +031c00040c10fcec32d4c4c431002fececf4ec10ee30b21f0d01015d13211521112115211121 +1521c903b0fd1a02c7fd3902f8fc3e05d5aafe46aafde3aa0000000100c90000042305d50009 +002940120695040295008104ad08050107031c00040a10fcec32d4c431002fecf4ec10ee30b2 +0f0b01015d13211521112115211123c9035afd700250fdb0ca05d5aafe48aafd370000010000 +ff4202b205d50003002d4014001a010201021a03000342029f008104020001032fc439393100 +10f4ec304b5358071005ed071005ed5922013301230208aafdf8aa05d5f96d000000000200c9 +0000055405d50013001c00b14035090807030a06110304030511040403420604001503041595 +0914950d810b040506031109001c160e050a191904113f140a1c0c041d10fcec32fcc4ec1117 +391139393931002f3cf4ecd4ec123912391239304b5358071005ed071005ed1117395922b240 +1e01015d40427a13010500050105020603070415001501140216031704250025012502260327 +06260726082609201e3601360246014602680575047505771388068807980698071f5d005d01 +1e01171323032e012b01112311212016151406011133323635342623038d417b3ecdd9bf4a8b +78dcca01c80100fc83fd89fe9295959202bc16907efe68017f9662fd8905d5d6d88dba024ffd +ee8783838500000200100000056805d50002000a00ba40410011010004050402110505040111 +0a030a0011020003030a0711050406110505040911030a08110a030a42000307950103810905 +09080706040302010009050a0b10d4c4173931002f3ce4d4ec1239304b5358071005ed0705ed +071005ed0705ed071008ed071005ed071005ed071008ed5922b2200c01015d403a0f00580076 +0070008c000507010802060309041601190256015802500c67016802780176027c0372047707 +780887018802800c980299039604175d005d090121013301230321032302bcfeee0225fe7be5 +0239d288fd5f88d5050efd1903aefa2b017ffe81000000010073ffe3058b05f0001d00394020 +00051b0195031b950812a111ae15950e91088c1e02001c1134043318190b101e10fcecfce4fc +c4310010e4f4ecf4ec10fed4ee11393930251121352111060423200011100021320417152626 +23200011100021323604c3feb6021275fee6a0fea2fe75018b015e9201076f70fc8bfeeefeed +011301126ba8d50191a6fd7f53550199016d016e01994846d75f60fecefed1fed2fece250000 +000200c9000005b005d500080011002e4015009509810195100802100a0005190d32001c0904 +1210fcecf4ec113939393931002fecf4ec30b2601301015d0111332000111000212521200011 +100029010193f40135011ffee1fecbfe42019f01b20196fe68fe50fe61052ffb770118012e01 +2c0117a6fe97fe80fe7efe96000000010087ffe304a205f00027007e403c0d0c020e0b021e1f +1e080902070a021f1f1e420a0b1e1f0415010015a11494189511049500942591118c281e0a0b +1f1b0700221b190e2d071914222810dcc4ecfcece4111239393939310010e4f4e4ec10eef6ee +10c6111739304b535807100eed11173907100eed1117395922b20f2901015db61f292f294f29 +035d01152e012322061514161f011e0115140421222627351e013332363534262f012e013534 +24333216044873cc5fa5b377a67ae2d7feddfee76aef807bec72adbc879a7be2ca0117f569da +05a4c53736807663651f192bd9b6d9e0302fd04546887e6e7c1f182dc0abc6e42600000100c9 +0000019305d500030039b700af02011c00040410fcec31002fec30014bb0105458bd0004ffc0 +00010004000400403811373859400d30054005500560058f059f05065d13331123c9caca05d5 +fa2b0000000200baffe304a40614000b001c0038401903b90c0f09b918158c0fb81b97190012 +1247180c06081a461d10fcec3232f4ec31002fece4f4c4ec10c6ee30b6601e801ea01e03015d +013426232206151416333236013e01333212111002232226271523113303e5a79292a7a79292 +a7fd8e3ab17bccffffcc7bb13ab9b9022fcbe7e7cbcbe7e702526461febcfef8fef8febc6164 +a8061400000100db000001ae00fe00030011b7008302011900180410fcec31002fec30373315 +23dbd3d3fefe000100100000056805d5000600b7402704110506050311020306060503110403 +000100021101010042030401af0006040302000505010710d4c4173931002fec3239304b5358 +071005ed071008ed071008ed071005ed5922b2500801015d406200032a03470447055a037d03 +8303070600070208040906150114021a041a052a002601260229042905250620083800330133 +023c043c053706480045014502490449054706590056066602690469057a0076017602790479 +057506800898009706295d005d21013309013301024afdc6d301d901dad2fdc705d5fb1704e9 +fa2b0001006401df027f028300030011b6009c020401000410dccc310010d4ec301321152164 +021bfde50283a40000020071ffe3045a06140010001c003840191ab9000e14b905088c0eb801 +970317040008024711120b451d10fcecf4ec323231002fece4f4c4ec10c4ee30b6601e801ea0 +1e03015d0111331123350e0123220211101233321601141633323635342623220603a2b8b83a +b17ccbffffcb7cb1fdc7a79292a8a89292a703b6025ef9eca86461014401080108014461fe15 +cbe7e7cbcbe7e7000001006fffe303c7047b002700e7403c0d0c020e0b531f1e080902070a53 +1e1f1e420a0b1e1f041500860189041486158918b91104b925b8118c281e0a0b1f1b0700521b +080e07081422452810fcc4ecd4ece4111239393939310010e4f4ec10fef5ee10f5ee12173930 +4b535807100eed111739070eed1117395922b2002701015d406d1c0a1c0b1c0c2e092c0a2c0b +2c0c3b093b0a3b0b3b0c0b200020012402280a280b2a132f142f152a16281e281f2920292124 +27860a860b860c860d12000000010202060a060b030c030d030e030f03100319031a031b031c +041d09272f293f295f297f2980299029a029f029185d005d7101152e012322061514161f011e +0115140623222627351e013332363534262f012e01353436333216038b4ea85a898962943fc4 +a5f7d85ac36c66c661828c65ab40ab98e0ce66b4043fae282854544049210e2a99899cb62323 +be353559514b50250f2495829eac1e0000000001fffa000004e905d50007004a400e06029500 +81040140031c0040050810d4e4fce431002ff4ec3230014bb00a5458bd000800400001000800 +08ffc03811373859401300091f00100110021f071009400970099f09095d0321152111231121 +0604effdeecbfdee05d5aafad5052b0000010056000006350460000c0201404905550605090a +0904550a0903550a0b0a025501020b0b0a061107080705110405080807021103020c000c0111 +00000c420a050203060300bf0b080c0b0a09080605040302010b07000d10d4cc173931002f3c +ec32321739304b5358071005ed071008ed071008ed071005ed071008ed071005ed0705ed0710 +08ed5922014bb00a544bb011545b4bb012545b4bb013545b4bb00b545b58bd000dffc0000100 +0d000d00403811373859014bb00c544bb00d545b4bb010545b58bd000d00400001000d000dff +c0381137385940ff050216021605220a350a49024905460a400a5b025b05550a500a6e026e05 +660a79027f0279057f05870299029805940abc02bc05ce02c703cf051d0502090306040b050a +080b09040b050c1502190316041a051b081b09140b150c250025012302270321042505220622 +0725082709240a210b230c390336043608390c300e4602480346044004420540064007400844 +09440a440b400e400e560056015602500451055206520750085309540a550b6300640165026a +0365046a056a066a076e09610b670c6f0e7500750179027d0378047d057a067f067a077f0778 +0879097f097b0a760b7d0c870288058f0e97009701940293039c049b05980698079908402f96 +0c9f0ea600a601a402a403ab04ab05a906a907ab08a40caf0eb502b103bd04bb05b809bf0ec4 +02c303cc04ca05795d005d13331b01331b013301230b012356b8e6e5d9e6e5b8fedbd9f1f2d9 +0460fc96036afc96036afba00396fc6a000000010058000003db0460000900b4401a08110203 +0203110708074208a900bc03a905080301000401060a10dcc432c411393931002fecf4ec304b +5358071005ed071005ed5922014bb00b544bb00c545b58bd000a00400001000a000affc03811 +373859014bb0135458bd000affc00001000a000a004038113738594042050216022602470249 +07050b080f0b18031b082b08200b36033908300b400140024503400440054308570359085f0b +6001600266036004600562087f0b800baf0b1b5d005d1321150121152135012171036afd4c02 +b4fc7d02b4fd650460a8fcdb93a803250000000100aeffe30458046000130036401903090003 +0e0106870e118c0a01bc0c0d09080b4e020800461410fcecf4ec3231002fe432f4c4ec111217 +3930b46015cf1502015d1311331114163332363511331123350e01232226aeb87c7c95adb8b8 +43b175c1c801ba02a6fd619f9fbea4027bfba0ac6663f0000001009eff1201c300fe00050019 +400c039e0083060304011900180610fcecd4cc310010fcec30373315032313f0d3a48152feac +fec001400001003b000004790460000b015a4046051106070604110304070706041105040102 +0103110202010b110001000a11090a0101000a110b0a0708070911080807420a070401040800 +bf05020a0704010408000208060c10d4c4d4c411173931002f3cec321739304b5358071005ed +071008ed071008ed071005ed071005ed071008ed071008ed071005ed5922014bb00a544bb00f +545b4bb010545b4bb011545b58bd000cffc00001000c000c00403811373859014bb0145458bd +000c00400001000c000cffc0381137385940980a04040a1a04150a260a3d04310a5504570758 +0a660a76017a047607740a8d04820a99049f049707920a900aa601a904af04a507a30aa00a1c +0a03040505090a0b1a03150515091a0b2903260525092a0b200d3a013903370534073609390b +300d4903460545094a0b400d590056015902590357055606590756085609590b500d6f0d7801 +7f0d9b019407ab01a407b00dcf0ddf0dff0d2f5d005d09022309012309013309010464fe6b01 +aad9febafebad901b3fe72d9012901290460fddffdc101b8fe48024a0216fe71018f00000003 +00c9000004ec05d5000800110020004340231900950a0995128101950aad1f110b080213191f +05000e1c1605191c2e09001c12042110fcec32fcecd4ec111739393931002fececf4ec10ee39 +30b20f2201015d01112132363534262301112132363534262325213216151406071e01151404 +232101930144a39d9da3febc012b94919194fe0b0204e7fa807c95a5fef0fbfde802c9fddd87 +8b8c850266fe3e6f727170a6c0b189a21420cb98c8da000100ba0000049c0614000a00bc4029 +0811050605071106060503110405040211050504420805020303bc0097090605010406080108 +00460b10fcec32d4c4113931002f3cece41739304b5358071004ed071005ed071005ed071004 +ed5922b2100c01015d405f04020a081602270229052b0856026602670873027705820289058e +08930296059708a3021209050906020b030a072803270428052b062b07400c6803600c890385 +0489058d068f079a039707aa03a705b607c507d607f703f003f704f0041a5d71005d13331101 +33090123011123bab90225ebfdae026bf0fdc7b90614fc6901e3fdf4fdac0223fddd000100b2 +ffe3052905d50011004b40160802110b0005950e8c09008112081c0a38011c00411210fcecfc +ec310010e432f4ec113939393930014bb0105458bd00120040000100120012ffc03811373859 +b61f138f139f13035d133311141633323635113311100021200011b2cbaec3c2aecbfedffee6 +fee5fedf05d5fc75f0d3d3f0038bfc5cfedcfed6012a012400000001002f000002f806140013 +0070401c0510010c08a906018700970e06bc0a02130700070905080d0f0b4c1410fc3cc4fc3c +c4c412393931002fe432fcec10ee3212393930014bb00a5458bd0014ffc00001001400140040 +3811373859014bb00e5458bd00140040000100140014ffc03811373859b640155015a015035d +01152322061d012115211123112335333534363302f8b0634d012ffed1b9b0b0aebd06149950 +68638ffc2f03d18f4ebbab000000000200030000000000140001000000000034000400200000 +0004000400010000f02effff0000f000ffff10000001000000000006006800000000002f0000 +000100020003000400050006000700080009000a000b000c000d000e000f0010001100120013 +001400150016001700180019001a001b001c001d001e001f0020002100220023002400250026 +002700280029002a002b002c002d002e013500b800cb00cb00c100aa009c01a600b800660000 +007100cb00a002b20085007500b800c301cb0189022d00cb00a600f000d300aa008700cb03aa +0400014a003300cb000000d9050200f4015400b4009c01390114013907060400044e04b40452 +04b804e704cd0037047304cd04600473013303a2055605a60556053903c5021200c9001f00b8 +01df007300ba03e9033303bc0444040e00df03cd03aa00e503aa0404000000cb008f00a4007b +00b80014016f007f027b0252008f00c705cd009a009a006f00cb00cd019e01d300f000ba0183 +00d5009803040248009e01d500c100cb00f600830354027f00000333026600d300c700a400cd +008f009a0073040005d5010a00fe022b00a400b4009c00000062009c0000001d032d05d505d5 +05d505f0007f007b005400a406b80614072301d300b800cb00a601c301ec069300a000d3035c +037103db0185042304a80448008f0139011401390360008f05d5019a06140723066601790460 +04600460047b009c00000277046001aa00e904600762007b00c5007f027b000000b4025205cd +006600bc00660077061000cd013b01850389008f007b0000001d00cd074a042f009c009c0000 +077d006f0000006f0335006a006f007b00ae00b2002d0396008f027b00f600830354063705f6 +008f009c04e10266008f018d02f600cd03440029006604ee007300001400b606050403020100 +2c2010b002254964b040515820c859212d2cb002254964b040515820c859212d2c20100720b0 +0050b00d7920b8ffff5058041b0559b0051cb0032508b0042523e120b00050b00d7920b8ffff +5058041b0559b0051cb0032508e12d2c4b505820b0fd454459212d2cb002254560442d2c4b53 +58b00225b0022545445921212d2c45442d000001000000020000322394a85f0f3cf5001f0800 +00000000bab9f0b800000000bac26791fe89fe1d0a4c076d0000000800010000000000000001 +0000076dfe1d00000abcfe89fe890a4c00010000000000000000000000000000002f04cd0066 +06e700c904ec007107cb00ba04e50071034a00ba04bc003d028b000005960073051400ba0239 +00c1023900c1031f00b004d300c903230037051200ba051200ba031f00a4047500c905140071 +0466007104e7007b050e00c9049a00c902b20000058f00c90579001006330073062900c90514 +0087025c00c9051400ba028b00db0579001002e3006405140071042b006f04e3fffa068b0056 +04330058051200ae028b009e04bc003b057d00c904a200ba05db00b202d1002f0000002200a0 +010a016c01be01f602e602e60332038003a803c6040a044a048804c40500052c054e05b205fe +069406c406ee0714079e0818086c08ac09280952099e09b20a220a380a840b340b6c0c8a0cfc +0d380d540e220e7a0ef20f3a0f9200010000002f004d00070042000400020010004000070000 +0415056800030001b8028040fffbfe03fa1403f92503f83203f79603f60e03f5fe03f4fe03f3 +2503f20e03f19603f02503ef8a4105effe03ee9603ed9603ecfa03ebfa03eafe03e93a03e842 +03e7fe03e63203e5e45305e59603e48a4105e45303e3e22f05e3fa03e22f03e1fe03e0fe03df +3203de1403dd9603dcfe03db1203da7d03d9bb03d8fe03d68a4105d67d03d5d44705d57d03d4 +4703d3d21b05d3fe03d21b03d1fe03d0fe03cffe03cefe03cd9603cccb1e05ccfe03cb1e03ca +3203c9fe03c6851105c61c03c51603c4fe03c3fe03c2fe03c1fe03c0fe03bffe03befe03bdfe +03bcfe03bbfe03ba1103b9862505b9fe03b8b7bb05b8fe03b7b65d05b7bb03b78004b6b52505 +b65d40ff03b64004b52503b4fe03b39603b2fe03b1fe03b0fe03affe03ae6403ad0e03acab25 +05ac6403abaa1205ab2503aa1203a98a4105a9fa03a8fe03a7fe03a6fe03a51203a4fe03a3a2 +0e05a33203a20e03a16403a08a4105a096039ffe039e9d0c059efe039d0c039c9b19059c6403 +9b9a10059b19039a1003990a0398fe0397960d0597fe03960d03958a410595960394930e0594 +2803930e0392fa039190bb0591fe03908f5d0590bb039080048f8e25058f5d038f40048e2503 +8dfe038c8b2e058cfe038b2e038a8625058a410389880b05891403880b038786250587640386 +85110586250385110384fe038382110583fe0382110381fe0380fe037ffe0340ff7e7d7d057e +fe037d7d037c64037b5415057b25037afe0379fe03780e03770c03760a0375fe0374fa0373fa +0372fa0371fa0370fe036ffe036efe036c21036bfe036a1142056a530369fe03687d03671142 +0566fe0365fe0364fe0363fe0362fe03613a0360fa035e0c035dfe035bfe035afe0359580a05 +59fa03580a035716190557320356fe035554150555420354150353011005531803521403514a +130551fe03500b034ffe034e4d10054efe034d10034cfe034b4a13054bfe034a4910054a1303 +491d0d05491003480d0347fe0346960345960344fe0343022d0543fa0342bb03414b0340fe03 +3ffe033e3d12053e14033d3c0f053d12033c3b0d053c40ff0f033b0d033afe0339fe03383714 +0538fa033736100537140336350b05361003350b03341e03330d0332310b0532fe03310b0330 +2f0b05300d032f0b032e2d09052e10032d09032c32032b2a25052b64032a2912052a25032912 +032827250528410327250326250b05260f03250b0324fe0323fe03220f032101100521120320 +64031ffa031e1d0d051e64031d0d031c1142051cfe031bfa031a42031911420519fe03186403 +1716190517fe031601100516190315fe0314fe0313fe031211420512fe0311022d0511420310 +7d030f64030efe030d0c16050dfe030c0110050c16030bfe030a100309fe0308022d0508fe03 +0714030664030401100504fe03401503022d0503fe0302011005022d0301100300fe0301b801 +64858d012b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b +2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b +2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b +2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b +2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b002b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b +2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b +2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b +2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b +2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b1d00> +] def +FontName currentdict end definefont pop +%%Page: 1 1 +%%BeginPageSetup +%%PageBoundingBox: 0 0 630 399 +%%EndPageSetup +q +0 g +1.005231 w +0 J +0 j +[] 0.0 d +4 M q 1 0 0 -1 0 398.268463 cm +220.387 54.336 m 351.496 54.336 l 351.496 88.773 l 220.387 88.773 l +220.387 54.336 l h +220.387 54.336 m S Q +BT +9.6 0 0 9.6 240.400003 325.596368 Tm +/f-0-0 1 Tf +[<01>1<02>2<03>2<0405>-1<060708>-1<0403>2<090a0b>1<02>2<05>]TJ +0 -1.25 Td +[<0c0d>-1<060e0f>-1<0410>-1<11>]TJ +ET +1.60016 w +q 1 0 0 -1 0 398.268463 cm +175.582 163.477 m 175.582 168.566 160.82 172.695 142.613 172.695 c +124.402 172.695 109.645 168.566 109.645 163.477 c 109.645 158.383 +124.402 154.254 142.613 154.254 c 160.82 154.254 175.582 158.383 +175.582 163.477 c h +175.582 163.477 m S Q +q 1 0 0 -1 0 398.268463 cm +175.504 212.371 m 175.504 217.461 160.742 221.59 142.535 221.59 c +124.328 221.59 109.566 217.461 109.566 212.371 c 109.566 207.277 +124.328 203.148 142.535 203.148 c 160.742 203.148 175.504 207.277 +175.504 212.371 c h +175.504 212.371 m S Q +1.6 w +q 1 0 0 -1 0 398.268463 cm +175.023 163.754 m 175.023 212.371 l S Q +q 1 0 0 -1 0 398.268463 cm +109.645 163.477 m 109.645 212.09 l S Q +1.60016 w +q 1 0 0 -1 0 398.268463 cm +311.406 163.895 m 311.406 168.988 296.645 173.113 278.438 173.113 c +260.227 173.113 245.469 168.988 245.469 163.895 c 245.469 158.801 +260.227 154.676 278.438 154.676 c 296.645 154.676 311.406 158.801 +311.406 163.895 c h +311.406 163.895 m S Q +q 1 0 0 -1 0 398.268463 cm +311.328 212.789 m 311.328 217.879 296.566 222.008 278.359 222.008 c +260.152 222.008 245.391 217.879 245.391 212.789 c 245.391 207.695 +260.152 203.57 278.359 203.57 c 296.566 203.57 311.328 207.695 311.328 +212.789 c h +311.328 212.789 m S Q +1.6 w +q 1 0 0 -1 0 398.268463 cm +310.844 164.176 m 310.844 212.789 l S Q +q 1 0 0 -1 0 398.268463 cm +245.469 163.895 m 245.469 212.508 l S Q +1.60016 w +q 1 0 0 -1 0 398.268463 cm +439.926 166.688 m 439.926 171.781 425.164 175.91 406.957 175.91 c +388.75 175.91 373.988 171.781 373.988 166.688 c 373.988 161.598 388.75 +157.469 406.957 157.469 c 425.164 157.469 439.926 161.598 439.926 +166.688 c h +439.926 166.688 m S Q +q 1 0 0 -1 0 398.268463 cm +439.848 215.582 m 439.848 220.676 425.09 224.801 406.883 224.801 c +388.672 224.801 373.914 220.676 373.914 215.582 c 373.914 210.492 +388.672 206.363 406.883 206.363 c 425.09 206.363 439.848 210.492 +439.848 215.582 c h +439.848 215.582 m S Q +1.6 w +q 1 0 0 -1 0 398.268463 cm +439.367 166.969 m 439.367 215.582 l S Q +q 1 0 0 -1 0 398.268463 cm +373.988 166.688 m 373.988 215.305 l S Q +1.60016 w +q 1 0 0 -1 0 398.268463 cm +252.73 339.355 m 252.73 344.445 237.973 348.574 219.762 348.574 c +201.555 348.574 186.793 344.445 186.793 339.355 c 186.793 334.262 +201.555 330.133 219.762 330.133 c 237.973 330.133 252.73 334.262 252.73 +339.355 c h +252.73 339.355 m S Q +q 1 0 0 -1 0 398.268463 cm +252.656 388.25 m 252.656 393.34 237.895 397.469 219.688 397.469 c +201.48 397.469 186.719 393.34 186.719 388.25 c 186.719 383.156 201.48 +379.027 219.688 379.027 c 237.895 379.027 252.656 383.156 252.656 +388.25 c h +252.656 388.25 m S Q +1.6 w +q 1 0 0 -1 0 398.268463 cm +252.172 339.633 m 252.172 388.25 l S Q +q 1 0 0 -1 0 398.268463 cm +186.793 339.355 m 186.793 387.969 l S Q +BT +9.6 0 0 9.6 75.557163 243.454333 Tm +/f-0-0 1 Tf +[<12>18<04>1<130a14>1<15>-2<0b>]TJ +18.684519 -2.996216 Td +[<1216>1<17>1<18>-1<17>1<19>41<1a01>]TJ +0 -1.25 Td +[<1b1c1d>-2<1e1e>]TJ +12.805588 0.0276477 Td +[<120a>1<1f02>2<05>-1<0e>-1<06070c>-1<200b0a>1<1f11>]TJ +-26.891736 1.133586 Td +[<1d>-2<090a>1<14>1<02>1<18>-1<12>110<21>1<1d>]TJ +0 -1.25 Td +[<21>79<02>2<05>-1<0a0b>1<0413>]TJ +8.43187 5.747114 Td +[<17>73<05>21<0410>-1<0e22>-1<16>1<10>-1<23>]TJ +0 -1.25 Td +[<0d0f>-1<0624>-1<0a>1<14>1<15>-3<0b>]TJ +25.203725 -0.0305608 Td +[<16>1<24>-1<0e0a03>2<15>-2<0e>-1<02>2<23>]TJ +0 -1.25 Td +[<25>29<0a03>2<0a10>-1<1318>-1<0d>35<042602>2<05>]TJ +ET +1.005231 w +q 1 0 0 -1 0 398.268463 cm +156.406 248.234 m 287.516 248.234 l 287.516 282.676 l 156.406 282.676 l +156.406 248.234 l h +156.406 248.234 m S Q +BT +9.6 0 0 9.6 168.816605 130.165637 Tm +/f-0-0 1 Tf +[<01>1<02>2<03>2<0405>-1<060708>-1<0f>-1<15>-2<05>-1<15>-3<14>1<0e02>2<05>-1<0a +27>]TJ +10.126953 0 Td +[<02>2<05>]TJ +-10.126953 -1.25 Td +[<0c0d>-1<060e0f>-1<0410>-1<11>]TJ +ET +0.921608 w +[ 5.529648 0.921608] 0 d +q 1 0 0 1 0 398.268463 cm +0.461 -281.039 m 116.008 -281.039 l 116.008 -248.191 l 0.461 -248.191 l +0.461 -281.039 l h +0.461 -281.039 m S Q +BT +9.6 0 0 9.6 4.795825 134.635925 Tm +/f-0-0 1 Tf +[<1d>-2<0a>1<03>1<28>-1<0b>1<15>-3<0e0405>]TJ +0 -1.25 Td +[<0c02>1<201320>-1<0710>-1<1324090a14>1<02>2<29>-1<0724>-1<0902>2<14>1<0e +05>]TJ +10.197266 0 Td +[<02>2<11>]TJ +ET +0.874385 w +[ 0.874385 1.748769] 0 d +q 1 0 0 -1 0 398.268463 cm +331.52 249.285 m 435.379 249.285 l 435.379 282.18 l 331.52 282.18 l +331.52 249.285 l h +331.52 249.285 m S Q +BT +9.6 0 0 9.6 345.902591 136.871082 Tm +/f-0-0 1 Tf +[<16>1<2a0e>-1<0515>-3<14>1<0e0405>]TJ +0 -1.25 Td +[<0c02>1<201320>-1<0708>-1<15>-2<0b0a>1<1f05>20<02>2<11>]TJ +-23.853645 -9.999148 Td +[<1a1010>-1<040e15>-3<0e02>2<23>]TJ +0 -1.25 Td +[<25>29<0a03>2<0a10>-1<1318>-1<0d>35<042602>2<05>]TJ +7.661297 2.021848 Td +[<120a>1<1f02>2<05>-1<0e>-1<06070c>-1<200b0a>1<1f11>]TJ +0 -1.25 Td +[<1d>-2<090a>1<14>1<02>]TJ +ET +1.6 w +[] 0.0 d +q 1 0 0 -1 0 398.268463 cm +280.633 88.879 m 145.965 152.578 l S Q +151.75 248.425 m 153.273 252.686 l 144.52 245.007 l 156.012 246.901 l +151.75 248.425 l h +151.75 248.425 m f* +0.723173 w +q 1 0.473029 0.473029 -1 0 398.268463 cm +66.083 181.103 m 68.975 178.209 l 58.853 181.101 l 68.977 183.995 l +66.083 181.103 l h +66.083 181.103 m S Q +1.6 w +q 1 0 0 -1 0 398.268463 cm +280.074 89.438 m 280.074 153.695 l S Q +280.074 250.972 m 276.875 254.171 l 280.074 242.972 l 283.273 254.171 l +280.074 250.972 l h +280.074 250.972 m f* +0.8 w +q -0.000000000000000061 1 1 0.000000000000000061 0 398.268463 cm +-147.297 280.074 m -144.098 276.875 l -155.297 280.074 l -144.098 +283.273 l -147.297 280.074 l h +-147.297 280.074 m S Q +1.6 w +q 1 0 0 -1 0 398.268463 cm +285.27 89.043 m 340.207 121.863 l S Q +334.711 279.69 m 330.324 278.581 l 341.578 275.585 l 333.605 284.077 l +334.711 279.69 l h +334.711 279.69 m f* +0.686779 w +q -1 0.597406 0.597406 1 0 398.268463 cm +-298.881 59.975 m -296.137 57.226 l -305.75 59.973 l -296.135 62.722 l +-298.881 59.975 l h +-298.881 59.975 m S Q +1.6 w +q 1 0 0 -1 0 398.268463 cm +155.465 265.453 m 116.348 265.453 l S Q +149.062 132.815 m 145.863 129.612 l 157.062 132.815 l 145.863 136.015 l +149.062 132.815 l h +149.062 132.815 m f* +0.8 w +q -1 -0.000000000000000122 -0.000000000000000122 1 0 398.268463 cm +-149.062 -265.453 m -145.863 -268.656 l -157.062 -265.453 l -145.863 +-262.254 l -149.062 -265.453 l h +-149.062 -265.453 m S Q +122.75 132.815 m 125.949 136.015 l 114.75 132.815 l 125.949 129.612 l +122.75 132.815 l h +122.75 132.815 m f* +q 1 -0.000000000000000122 -0.000000000000000122 -1 0 398.268463 cm +122.75 265.453 m 125.949 262.254 l 114.75 265.453 l 125.949 268.656 l +122.75 265.453 l h +122.75 265.453 m S Q +1.6 w +q 1 0 0 -1 0 398.268463 cm +252.395 219.602 m 218.934 247.098 l S Q +223.879 155.233 m 224.32 159.737 l 217.699 150.155 l 228.383 154.792 l +223.879 155.233 l h +223.879 155.233 m f* +0.618042 w +q 1 0.821886 0.821886 -1 0 398.268463 cm +14.403 254.873 m 16.876 252.401 l 8.224 254.872 l 16.874 257.345 l +14.403 254.873 l h +14.403 254.873 m S Q +1.005231 w +q 1 0 0 -1 0 398.268463 cm +341.922 104.066 m 473.031 104.066 l 473.031 138.508 l 341.922 138.508 l +341.922 104.066 l h +341.922 104.066 m S Q +BT +9.6 0 0 9.6 354.334622 274.333276 Tm +/f-0-0 1 Tf +[<01>1<02>2<03>2<0405>-1<060708>-1<0f>-1<15>-2<05>-1<15>-3<14>1<0e02>2<05>-1<0a +27>]TJ +10.126953 0 Td +[<02>2<05>]TJ +-10.126953 -1.25 Td +[<0c0d>-1<060e0f>-1<0410>-1<11>]TJ +ET +1.6 w +q 1 0 0 -1 0 398.268463 cm +408.594 137.887 m 408.594 156.578 l S Q +408.594 248.089 m 405.395 251.288 l 408.594 240.089 l 411.797 251.288 l +408.594 248.089 l h +408.594 248.089 m f* +0.8 w +q -0.000000000000000061 1 1 0.000000000000000061 0 398.268463 cm +-150.18 408.594 m -146.98 405.395 l -158.18 408.594 l -146.98 411.797 l +-150.18 408.594 l h +-150.18 408.594 m S Q +1.6 w +q 1 0 0 -1 0 398.268463 cm +157.699 221.309 m 200.727 247.016 l S Q +195.23 154.538 m 190.844 153.429 l 202.098 150.433 l 194.125 158.925 l +195.23 154.538 l h +195.23 154.538 m f* +0.68678 w +q -1 0.597403 0.597403 1 0 398.268463 cm +-251.189 -93.67 m -248.444 -96.418 l -258.057 -93.672 l -248.443 +-90.923 l -251.189 -93.67 l h +-251.189 -93.67 m S Q +2.4 w +[ 7.2 7.2] 0 d +q 1 0 0 -1 0 398.268463 cm +22.473 236.957 m 597.465 236.957 l S Q +BT +16 0 0 16 5.708505 64.082971 Tm +/f-0-0 1 Tf +[<2b15>-2<14>1<2c>1<22161023>]TJ +0 -1 Td +[<01>1<02>2<0e0f>-1<042304>1<0b04>1<1306>]TJ +0.674965 15.682794 Td +[<17>73<05>21<0410>-1<0e22>-1<16>1<10>-1<23>]TJ +0 -1 Td +[<01>1<02>2<0e0f>-1<042304>1<0b04>1<1306>]TJ +ET +0.921608 w +[ 5.529648 0.921608] 0 d +q 1 0 0 1 0 398.268463 cm +514.727 -138.27 m 630.273 -138.27 l 630.273 -105.422 l 514.727 -105.422 +l 514.727 -138.27 l h +514.727 -138.27 m S Q +BT +9.6 0 0 9.6 519.059866 277.406592 Tm +/f-0-0 1 Tf +[<1d>-2<0a>1<03>1<28>-1<0b>1<15>-3<0e0405>]TJ +0 -1.25 Td +[<0c02>1<201320>-1<0710>-1<1324090a14>1<02>2<29>-1<0724>-1<0902>2<14>1<0e +05>]TJ +10.197266 0 Td +[<02>2<11>]TJ +ET +1.6 w +[] 0.0 d +q 1 0 0 -1 0 398.268463 cm +513.824 122.125 m 474.711 122.125 l S Q +507.426 276.143 m 504.227 272.944 l 515.426 276.143 l 504.227 279.343 l +507.426 276.143 l h +507.426 276.143 m f* +0.8 w +q -1 -0.000000000000000122 -0.000000000000000122 1 0 398.268463 cm +-507.426 -122.125 m -504.227 -125.324 l -515.426 -122.125 l -504.227 +-118.926 l -507.426 -122.125 l h +-507.426 -122.125 m S Q +481.109 276.143 m 484.312 279.343 l 473.109 276.143 l 484.312 272.944 l +481.109 276.143 l h +481.109 276.143 m f* +q 1 -0.000000000000000122 -0.000000000000000122 -1 0 398.268463 cm +481.109 122.125 m 484.312 118.926 l 473.109 122.125 l 484.312 125.324 l +481.109 122.125 l h +481.109 122.125 m S Q +1.60016 w +q 1 0 0 -1 0 398.268463 cm +488.539 29.785 m 488.539 34.879 473.781 39.004 455.57 39.004 c 437.363 +39.004 422.602 34.879 422.602 29.785 c 422.602 24.691 437.363 20.566 +455.57 20.566 c 473.781 20.566 488.539 24.691 488.539 29.785 c h +488.539 29.785 m S Q +q 1 0 0 -1 0 398.268463 cm +488.465 78.68 m 488.465 83.77 473.703 87.898 455.496 87.898 c 437.289 +87.898 422.527 83.77 422.527 78.68 c 422.527 73.586 437.289 69.461 +455.496 69.461 c 473.703 69.461 488.465 73.586 488.465 78.68 c h +488.465 78.68 m S Q +1.6 w +q 1 0 0 -1 0 398.268463 cm +487.98 30.062 m 487.98 78.68 l S Q +q 1 0 0 -1 0 398.268463 cm +422.602 29.785 m 422.602 78.398 l S Q +BT +9.6 0 0 9.6 441.005374 347.123721 Tm +/f-0-0 1 Tf +[<25>167<02>2<14>1<0f>]TJ +0 -1.25 Td +[<120a>1<1f05>-1<15>-2<05>-1<06>]TJ +ET +q 1 0 0 -1 0 398.268463 cm +422.809 52.973 m 353.52 73.09 l S Q +359.664 326.964 m 361.848 330.929 l 351.984 324.733 l 363.629 324.784 l +359.664 326.964 l h +359.664 326.964 m f* +0.768277 w +q 1 0.290323 0.290323 -1 0 398.268463 cm +312.613 162.063 m 315.689 158.991 l 304.933 162.064 l 315.686 165.135 l +312.613 162.063 l h +312.613 162.063 m S Q +1.6 w +q 1 0 0 -1 0 398.268463 cm +282.879 22.918 m 282.32 51.973 l S Q +282.441 352.694 m 279.305 355.956 l 282.289 344.694 l 285.703 355.831 l +282.441 352.694 l h +282.441 352.694 m f* +0.799852 w +q 0.0192309 1 1 -0.0192309 0 398.268463 cm +-40.128 283.213 m -36.928 280.015 l -48.128 283.215 l -36.93 286.413 l +-40.128 283.213 l h +-40.128 283.213 m S Q +BT +9.6 0 0 9.6 199.049588 390.974713 Tm +/f-0-0 1 Tf +[<2d24>-1<02>2<05>-1<071d>-2<0902>2<140a>1<2e>-1<0a14>1<15>-2<0e>-1<0a>1<04 +10>]TJ +0 -1.25 Td +[<0c26>-1<04>1<05>16<230724>-1<0a>1<27>-1<02>2<2907>-1<03>2<02>2<03>1<04 +050607>]TJ +10.234375 0 Td +[<240a2702>1<2907>-1<15>-2<240902>2<140e0705>-1<15>-3<0e0a04>1<29>-1<07 +02>2<0e>]TJ +10.169922 0 Td +<1420>Tj +ET +1.6 w +q 1 0 0 -1 0 398.268463 cm +327.57 265.453 m 288.457 265.453 l S Q +321.172 132.815 m 317.973 129.612 l 329.172 132.815 l 317.973 136.015 l +321.172 132.815 l h +321.172 132.815 m f* +0.8 w +q -1 -0.000000000000000122 -0.000000000000000122 1 0 398.268463 cm +-321.172 -265.453 m -317.973 -268.656 l -329.172 -265.453 l -317.973 +-262.254 l -321.172 -265.453 l h +-321.172 -265.453 m S Q +294.855 132.815 m 298.055 136.015 l 286.855 132.815 l 298.055 129.612 l +294.855 132.815 l h +294.855 132.815 m f* +q 1 -0.000000000000000122 -0.000000000000000122 -1 0 398.268463 cm +294.855 265.453 m 298.055 262.254 l 286.855 265.453 l 298.055 268.656 l +294.855 265.453 l h +294.855 265.453 m S Q +1.370434 w +q 1 0 0 -1 0 398.268463 cm +219.727 282.898 m 219.727 328.188 l S Q +219.727 75.561 m 216.984 78.304 l 219.727 68.71 l 222.465 78.304 l +219.727 75.561 l h +219.727 75.561 m f* +0.685217 w +q -0.000000000000000061 1 1 0.000000000000000061 0 398.268463 cm +-322.707 219.727 m -319.965 216.984 l -329.559 219.727 l -319.965 +222.465 l -322.707 219.727 l h +-322.707 219.727 m S Q +Q +showpage +%%Trailer +count op_count sub {pop} repeat +countdictstack dict_count sub {end} repeat +cairo_eps_state restore +%%EOF diff --git a/docs/figs/methodology.pdf b/docs/figs/methodology.pdf new file mode 100644 index 00000000..10292af0 Binary files /dev/null and b/docs/figs/methodology.pdf differ diff --git a/docs/figs/methodology.svg b/docs/figs/methodology.svg new file mode 100644 index 00000000..0bce61b0 --- /dev/null +++ b/docs/figs/methodology.svg @@ -0,0 +1,1053 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + Memory Compiler(Python) + + + + + + + + + + + + + + + + + + + + + + + + + Logical + LEF/FRAMGDSII + Liberty (.lib) + Spice/LVSVerilog + Front-EndPhysical + EstimatedTiming/Power + + Memory Characterizer(Python) + + Simulator(e.g. ngspice, spectre) + + Extractor(e.g. Calibre) + AnnotatedTiming/Power + Liberty (.lib)Spice + + + + + + + Memory Characterizer(Python) + + + + Back-EndMethodology + Front-EndMethodology + + Simulator(e.g. ngspice, spectre) + + + + + + + + TechLibrary + + + User Specification(word size, memory size, aspect ratio, etc. + + + + diff --git a/docs/figs/ms_flop_schem.pdf b/docs/figs/ms_flop_schem.pdf new file mode 100644 index 00000000..94c63ccd Binary files /dev/null and b/docs/figs/ms_flop_schem.pdf differ diff --git a/docs/figs/ms_flop_schem.svg b/docs/figs/ms_flop_schem.svg new file mode 100644 index 00000000..e4518ed9 --- /dev/null +++ b/docs/figs/ms_flop_schem.svg @@ -0,0 +1,1562 @@ + + + +image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Sheet.39 + + Sheet.36 + + Sheet.13 + + + + Sheet.23 + + + + Sheet.27 + + + + Sheet.30 + + + + Sheet.31 + + + + Sheet.32 + + + + + Sheet.37 + + + + Sheet.38 + + + + Sheet.40 + + Sheet.41 + + Sheet.42 + + + + Sheet.43 + + + + Sheet.44 + + + + Sheet.45 + + + + Sheet.46 + + + + Sheet.47 + + + + + Sheet.48 + + + + Sheet.49 + + + + Sheet.50 + + Sheet.51 + + Sheet.52 + + + + Sheet.53 + + + + Sheet.54 + + + + Sheet.55 + + + + Sheet.56 + + + + Sheet.57 + + + + + Sheet.58 + + + + Sheet.59 + + + + Sheet.35 + + Sheet.33 + + + + Sheet.34 + + + + Sheet.60 + + Sheet.61 + + + + Sheet.62 + + + + Sheet.64 + + Sheet.65 + + Sheet.66 + + + + Sheet.67 + + + + + Sheet.68 + + Sheet.69 + + + + Sheet.70 + + + + + Sheet.63 + + Sheet.71 + + + + Sheet.72 + + + + Sheet.73 + + Sheet.74 + + Sheet.75 + + + + Sheet.76 + + + + Sheet.77 + + + + Sheet.78 + + + + Sheet.79 + + + + Sheet.80 + + + + + Sheet.81 + + + + Sheet.82 + + + + Sheet.83 + + + Sheet.84 + + + Sheet.85 + + + Sheet.86 + + + Sheet.87 + + + Sheet.89 + + + Sheet.90 + + + Sheet.91 + + + Sheet.88 + + + Sheet.92 + + + Sheet.93 + + + Sheet.94 + + + Sheet.95 + + + Sheet.101 + + + Sheet.102 + + + Sheet.103 + + + Sheet.108 + Data + + + + Data + + Sheet.110 + Q + + + + Q + + Sheet.111 + Clk + + + + Clk + + Sheet.112 + Clk + + + + Clk + + Sheet.113 + Clk + + + + Clk + + Sheet.114 + Clk + + + + Clk + + Sheet.117 + + Sheet.115 + + + + Sheet.116 + Clk + + + + Clk + + + Sheet.118 + + Sheet.119 + + + + Sheet.120 + Clk + + + + Clk + + + Sheet.121 + + Sheet.122 + + + + Sheet.123 + Clk + + + + Clk + + + Sheet.124 + + Sheet.125 + + + + Sheet.126 + Clk + + + + Clk + + + \ No newline at end of file diff --git a/docs/figs/nand2.pdf b/docs/figs/nand2.pdf new file mode 100644 index 00000000..e6bda803 Binary files /dev/null and b/docs/figs/nand2.pdf differ diff --git a/docs/figs/nand3.pdf b/docs/figs/nand3.pdf new file mode 100644 index 00000000..b5f91a52 Binary files /dev/null and b/docs/figs/nand3.pdf differ diff --git a/docs/figs/nand_decoder_schem.pdf b/docs/figs/nand_decoder_schem.pdf new file mode 100644 index 00000000..f2e7eff5 Binary files /dev/null and b/docs/figs/nand_decoder_schem.pdf differ diff --git a/docs/figs/nand_decoder_schem.svg b/docs/figs/nand_decoder_schem.svg new file mode 100644 index 00000000..cbde82e3 --- /dev/null +++ b/docs/figs/nand_decoder_schem.svg @@ -0,0 +1,909 @@ + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A0 + A0_bar + A1 + A1_bar + PCLK + VDD + VDD + VDD + VDD + WL3 + WL2 + WL1 + WL0 + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/figs/nor2.pdf b/docs/figs/nor2.pdf new file mode 100644 index 00000000..1895f236 Binary files /dev/null and b/docs/figs/nor2.pdf differ diff --git a/docs/figs/overall_flow.pdf b/docs/figs/overall_flow.pdf new file mode 100644 index 00000000..340737ea Binary files /dev/null and b/docs/figs/overall_flow.pdf differ diff --git a/docs/figs/overview.dia b/docs/figs/overview.dia new file mode 100644 index 00000000..a79e3138 Binary files /dev/null and b/docs/figs/overview.dia differ diff --git a/docs/figs/overview.png b/docs/figs/overview.png new file mode 100644 index 00000000..fc5780bf Binary files /dev/null and b/docs/figs/overview.png differ diff --git a/docs/figs/pinv.pdf b/docs/figs/pinv.pdf new file mode 100644 index 00000000..bd725e8a Binary files /dev/null and b/docs/figs/pinv.pdf differ diff --git a/docs/figs/precharge_schem.pdf b/docs/figs/precharge_schem.pdf new file mode 100644 index 00000000..d1fb1f0e Binary files /dev/null and b/docs/figs/precharge_schem.pdf differ diff --git a/docs/figs/precharge_schem.svg b/docs/figs/precharge_schem.svg new file mode 100644 index 00000000..9323e52a --- /dev/null +++ b/docs/figs/precharge_schem.svg @@ -0,0 +1,311 @@ + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + BL + BL_bar + VDD + + + + + + CLK + M1 + M2 + M3 + + + + diff --git a/docs/figs/ptx.pdf b/docs/figs/ptx.pdf new file mode 100644 index 00000000..f5ad721c Binary files /dev/null and b/docs/figs/ptx.pdf differ diff --git a/docs/figs/ptx.svg b/docs/figs/ptx.svg new file mode 100644 index 00000000..9bba115f --- /dev/null +++ b/docs/figs/ptx.svg @@ -0,0 +1,1557 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + Finger Number 3 + + + + + width = tech.drc["minwidth_tx"] + + diff --git a/docs/figs/replica_bitline.pdf b/docs/figs/replica_bitline.pdf new file mode 100644 index 00000000..af396c4c Binary files /dev/null and b/docs/figs/replica_bitline.pdf differ diff --git a/docs/figs/replica_cell.pdf b/docs/figs/replica_cell.pdf new file mode 100644 index 00000000..7ae362bf Binary files /dev/null and b/docs/figs/replica_cell.pdf differ diff --git a/docs/figs/sense_amp_schem.pdf b/docs/figs/sense_amp_schem.pdf new file mode 100644 index 00000000..12e78492 Binary files /dev/null and b/docs/figs/sense_amp_schem.pdf differ diff --git a/docs/figs/sense_amp_schem.svg b/docs/figs/sense_amp_schem.svg new file mode 100644 index 00000000..086a1153 --- /dev/null +++ b/docs/figs/sense_amp_schem.svg @@ -0,0 +1,550 @@ + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + VDD + DATA + BL_bar + BL + EN + EN + EN + + + diff --git a/docs/figs/sram_architecture.svg b/docs/figs/sram_architecture.svg new file mode 100644 index 00000000..f3b52a3a --- /dev/null +++ b/docs/figs/sram_architecture.svg @@ -0,0 +1,679 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + Precharge + Array + + Sense Amp + + + + + Address + Bit LinesBL0,BR0, BL1, BR1, ... BLj BRj + + Word Lines W0, W1, ..., Wlog(n) + + + + A0, A1, ... An + A0, A1, ... Ak + Sclk + + + Bit LinesBL0,BR0, BL1, BR1, ... BLj BRj + Bit LinesBL0,BR0, BL1, BR1, ... BLj/2^k BRj/2^k + + Pclk + D0, D1, ..., Dj/2^k + + + Address Decoder + + + + Column Mux + + + + Write Driver + + + Enable, Data in + Bit LinesBL0 ,BR0, BL1, BR1, ... BLj/2^k BRj /2^k + + + + + Data + + diff --git a/docs/figs/sram_overview.eps b/docs/figs/sram_overview.eps new file mode 100644 index 00000000..52e66eec --- /dev/null +++ b/docs/figs/sram_overview.eps @@ -0,0 +1,3128 @@ +%!PS-Adobe-3.0 EPSF-3.0 +%%Creator: cairo 1.8.8 (http://cairographics.org) +%%CreationDate: Mon Jul 26 11:00:08 2010 +%%Pages: 1 +%%BoundingBox: 0 0 944 450 +%%DocumentData: Clean7Bit +%%LanguageLevel: 2 +%%EndComments +%%BeginProlog +/cairo_eps_state save def +/dict_count countdictstack def +/op_count count 1 sub def +userdict begin +/q { gsave } bind def +/Q { grestore } bind def +/cm { 6 array astore concat } bind def +/w { setlinewidth } bind def +/J { setlinecap } bind def +/j { setlinejoin } bind def +/M { setmiterlimit } bind def +/d { setdash } bind def +/m { moveto } bind def +/l { lineto } bind def +/c { curveto } bind def +/h { closepath } bind def +/re { exch dup neg 3 1 roll 5 3 roll moveto 0 rlineto + 0 exch rlineto 0 rlineto closepath } bind def +/S { stroke } bind def +/f { fill } bind def +/f* { eofill } bind def +/B { fill stroke } bind def +/B* { eofill stroke } bind def +/n { newpath } bind def +/W { clip } bind def +/W* { eoclip } bind def +/BT { } bind def +/ET { } bind def +/pdfmark where { pop globaldict /?pdfmark /exec load put } + { globaldict begin /?pdfmark /pop load def /pdfmark + /cleartomark load def end } ifelse +/BDC { mark 3 1 roll /BDC pdfmark } bind def +/EMC { mark /EMC pdfmark } bind def +/cairo_store_point { /cairo_point_y exch def /cairo_point_x exch def } def +/Tj { show currentpoint cairo_store_point } bind def +/TJ { + { + dup + type /stringtype eq + { show } { -0.001 mul 0 cairo_font_matrix dtransform rmoveto } ifelse + } forall + currentpoint cairo_store_point +} bind def +/cairo_selectfont { cairo_font_matrix aload pop pop pop 0 0 6 array astore + cairo_font exch selectfont cairo_point_x cairo_point_y moveto } bind def +/Tf { pop /cairo_font exch def /cairo_font_matrix where + { pop cairo_selectfont } if } bind def +/Td { matrix translate cairo_font_matrix matrix concatmatrix dup + /cairo_font_matrix exch def dup 4 get exch 5 get cairo_store_point + /cairo_font where { pop cairo_selectfont } if } bind def +/Tm { 2 copy 8 2 roll 6 array astore /cairo_font_matrix exch def + cairo_store_point /cairo_font where { pop cairo_selectfont } if } bind def +/g { setgray } bind def +/rg { setrgbcolor } bind def +/d1 { setcachedevice } bind def +%%EndProlog +11 dict begin +/FontType 42 def +/FontName /f-0-0 def +/PaintType 0 def +/FontMatrix [ 1 0 0 1 0 0 ] def +/FontBBox [ 0 0 0 0 ] def +/Encoding 256 array def +0 1 255 { Encoding exch /.notdef put } for +Encoding 1 /uni0050 put +Encoding 2 /uni0072 put +Encoding 3 /uni0065 put +Encoding 4 /uni0063 put +Encoding 5 /uni0068 put +Encoding 6 /uni0061 put +Encoding 7 /uni0067 put +Encoding 8 /uni0044 put +Encoding 9 /uni006F put +Encoding 10 /uni0064 put +Encoding 11 /uni0043 put +Encoding 12 /uni006C put +Encoding 13 /uni0075 put +Encoding 14 /uni006D put +Encoding 15 /uni006E put +Encoding 16 /uni0020 put +Encoding 17 /uni004D put +Encoding 18 /uni0078 put +Encoding 19 /uni0057 put +Encoding 20 /uni004C put +Encoding 21 /uni0069 put +Encoding 22 /uni0076 put +Encoding 23 /uni0055 put +Encoding 24 /uni0070 put +Encoding 25 /uni0041 put +Encoding 26 /uni0073 put +Encoding 27 /uni0077 put +Encoding 28 /uni0074 put +Encoding 29 /uni0053 put +Encoding 30 /uni0036 put +Encoding 31 /uni0054 put +Encoding 32 /uni0049 put +Encoding 33 /uni002F put +Encoding 34 /uni004F put +/CharStrings 35 dict dup begin +/.notdef 0 def +/uni0050 1 def +/uni0072 2 def +/uni0065 3 def +/uni0063 4 def +/uni0068 5 def +/uni0061 6 def +/uni0067 7 def +/uni0044 8 def +/uni006F 9 def +/uni0064 10 def +/uni0043 11 def +/uni006C 12 def +/uni0075 13 def +/uni006D 14 def +/uni006E 15 def +/uni0020 16 def +/uni004D 17 def +/uni0078 18 def +/uni0057 19 def +/uni004C 20 def +/uni0069 21 def +/uni0076 22 def +/uni0055 23 def +/uni0070 24 def +/uni0041 25 def +/uni0073 26 def +/uni0077 27 def +/uni0074 28 def +/uni0053 29 def +/uni0036 30 def +/uni0054 31 def +/uni0049 32 def +/uni002F 33 def +/uni004F 34 def +end readonly def +/sfnts [ +<00010000000a008000030020636d61700156f213000019c40000008463767420ffd31d390000 +1a48000001fc6670676de7b4f1c400001c440000008b676c7966097c82ed000000ac00001918 +68656164dd84a2d000001cd000000036686865611045078600001d0800000024686d7478a954 +114500001d2c0000008c6c6f636166f86ce600001db8000000486d617870045e063a00001e00 +00000020707265703b07f10000001e200000056800020066fe96046605a400030007001a400c +04fb0006fb0108057f0204002fc4d4ec310010d4ecd4ec301311211125211121660400fc7303 +1bfce5fe96070ef8f2720629000200c90000048d05d500080013003a40180195100095098112 +100a0802040005190d3f11001c09041410fcec32fcec11173931002ff4ecd4ec30400b0f151f +153f155f15af1505015d011133323635342623252132041514042b0111230193fe8d9a9a8dfe +3801c8fb0101fefffbfeca052ffdcf92878692a6e3dbdde2fda8000100ba0000034a047b0011 +00304014060b0700110b03870eb809bc070a06080008461210fcc4ec3231002fe4f4ecc4d4cc +11123930b450139f1302015d012e012322061511231133153e0133321617034a1f492c9ca7b9 +b93aba85132e1c03b41211cbbefdb20460ae66630505000000020071ffe3047f047b0014001b +00704024001501098608880515a90105b90c01bb18b912b80c8c1c1b1502081508004b02120f +451c10fcecf4ecc4111239310010e4f4ece410ee10ee10f4ee1112393040293f1d701da01dd0 +1df01d053f003f013f023f153f1b052c072f082f092c0a6f006f016f026f156f1b095d71015d +0115211e0133323637150e01232000111000333200072e0123220607047ffcb20ccdb76ac762 +63d06bfef4fec70129fce20107b802a5889ab90e025e5abec73434ae2a2c0138010a01130143 +feddc497b4ae9e0000010071ffe303e7047b0019003f401b00860188040e860d880ab91104b9 +17b8118c1a07120d004814451a10fce432ec310010e4f4ec10fef4ee10f5ee30400b0f1b101b +801b901ba01b05015d01152e0123220615141633323637150e0123220011100021321603e74e +9d50b3c6c6b3509d4e4da55dfdfed6012d010655a20435ac2b2be3cdcde32b2baa2424013e01 +0e0112013a230000000100ba000004640614001300344019030900030e0106870e11b80c970a +010208004e0d09080b461410fcec32f4ec31002f3cecf4c4ec1112173930b2601501015d0111 +231134262322061511231133113e013332160464b87c7c95acb9b942b375c1c602a4fd5c029e +9f9ebea4fd870614fd9e6564ef000002007bffe3042d047b000a002500bc4027191f0b17090e +00a91706b90e1120861fba1cb923b8118c170c001703180d09080b1f030814452610fcecccd4 +ec323211393931002fc4e4f4fcf4ec10c6ee10ee11391139123930406e301d301e301f302030 +2130223f27401d401e401f402040214022501d501e501f50205021502250277027851d871e87 +1f8720872185229027a027f0271e301e301f30203021401e401f40204021501e501f50205021 +601e601f60206021701e701f70207021801e801f80208021185d015d0122061514163332363d +01371123350e01232226353436332135342623220607353e0133321602bedfac816f99b9b8b8 +3fbc88accbfdfb0102a79760b65465be5af3f00233667b6273d9b4294cfd81aa6661c1a2bdc0 +127f8b2e2eaa2727fc0000020071fe56045a047b000b0028004a4023190c1d0912861316b90f +03b92623b827bc09b90fbd1a1d261900080c4706121220452910fcc4ecf4ec323231002fc4e4 +ece4f4c4ec10fed5ee1112393930b6602a802aa02a03015d0134262322061514163332361710 +0221222627351e013332363d010e0123220211101233321617353303a2a59594a5a59495a5b8 +fefefa61ac51519e52b5b439b27ccefcfcce7cb239b8023dc8dcdcc8c7dcdcebfee2fee91d1e +b32c2abdbf5b6362013a01030104013a6263aa00000200c9000005b005d500080011002e4015 +009509810195100802100a0005190d32001c09041210fcecf4ec113939393931002fecf4ec30 +b2601301015d0111332000111000212521200011100029010193f40135011ffee1fecbfe4201 +9f01b20196fe68fe50fe61052ffb770118012e012c0117a6fe97fe80fe7efe96000000020071 +ffe30475047b000b0017004a401306b91200b90cb8128c1809120f51031215451810fcecf4ec +310010e4f4ec10ee3040233f197b007b067f077f087f097f0a7f0b7b0c7f0d7f0e7f0f7f107f +117b12a019f01911015d012206151416333236353426273200111000232200111000027394ac +ab9593acac93f00112feeef0f1feef011103dfe7c9c9e7e8c8c7e99cfec8feecfeedfec70139 +011301140138000000020071ffe3045a06140010001c003840191ab9000e14b905088c0eb801 +970317040008024711120b451d10fcecf4ec323231002fece4f4c4ec10c4ee30b6601e801ea0 +1e03015d0111331123350e0123220211101233321601141633323635342623220603a2b8b83a +b17ccbffffcb7cb1fdc7a79292a8a89292a703b6025ef9eca86461014401080108014461fe15 +cbe7e7cbcbe7e70000010073ffe3052705f000190036401a0da10eae0a951101a100ae049517 +91118c1a07190d003014101a10fcec32ec310010e4f4ecf4ec10eef6ee30b40f1b1f1b02015d +01152e0123200011100021323637150e01232000111000213216052766e782ff00fef0011001 +0082e7666aed84feadfe7a0186015386ed0562d55f5efec7fed8fed9fec75e5fd34848019f01 +670168019f470000000100c100000179061400030022b7009702010800460410fcec31002fec +30400d10054005500560057005f00506015d13331123c1b8b80614f9ec00000100aeffe30458 +0460001300364019030900030e0106870e118c0a01bc0c0d09080b4e020800461410fcecf4ec +3231002fe432f4c4ec1112173930b46015cf1502015d1311331114163332363511331123350e +01232226aeb87c7c95adb8b843b175c1c801ba02a6fd619f9fbea4027bfba0ac6663f0000001 +00ba0000071d047b0022005a4026061209180f00061d07150c871d2003b81bbc19100700110f +0808065011080f501c18081a462310fcec32fcfcfcec11123931002f3c3ce4f43cc4ec321112 +17393040133024502470249024a024a024bf24df24ff2409015d013e01333216151123113426 +2322061511231134262322061511231133153e01333216042945c082afbeb972758fa6b97277 +8da6b9b93fb0797aab03897c76f5e2fd5c029ea19cbea4fd87029ea29bbfa3fd870460ae6762 +7c000000000100ba00000464047b001300364019030900030e0106870e11b80cbc0a01020800 +4e0d09080b461410fcec32f4ec31002f3ce4f4c4ec1112173930b46015cf1502015d01112311 +34262322061511231133153e013332160464b87c7c95acb9b942b375c1c602a4fd5c029e9f9e +bea4fd870460ae6564ef000100c90000061f05d5000c00bf4034031107080702110102080807 +02110302090a0901110a0a09420a070203080300af080b050908030201050a061c043e0a1c00 +040d10fcecfcec11173931002f3cc4ec32111739304b5358071005ed071008ed071008ed0710 +05ed5922b2700e01015d405603070f080f09020a15021407130a260226072007260a200a3407 +350a69027c027b07790a80028207820a90021604010b0313011b0323012c032708280934013c +035608590965086a097608790981018d0395019b03145d005d13210901211123110123011123 +c9012d017d017f012dc5fe7fcbfe7fc405d5fc0803f8fa2b051ffc000400fae100000001003b +000004790460000b015a40460511060706041103040707060411050401020103110202010b11 +0001000a11090a0101000a110b0a0708070911080807420a070401040800bf05020a07040104 +08000208060c10d4c4d4c411173931002f3cec321739304b5358071005ed071008ed071008ed +071005ed071005ed071008ed071008ed071005ed5922014bb00a544bb00f545b4bb010545b4b +b011545b58bd000cffc00001000c000c00403811373859014bb0145458bd000c00400001000c +000cffc0381137385940980a04040a1a04150a260a3d04310a55045707580a660a76017a0476 +07740a8d04820a99049f049707920a900aa601a904af04a507a30aa00a1c0a03040505090a0b +1a03150515091a0b2903260525092a0b200d3a013903370534073609390b300d490346054509 +4a0b400d590056015902590357055606590756085609590b500d6f0d78017f0d9b019407ab01 +a407b00dcf0ddf0dff0d2f5d005d09022309012309013309010464fe6b01aad9febafebad901 +b3fe72d9012901290460fddffdc101b8fe48024a0216fe71018f000000010044000007a605d5 +000c017b4049051a0605090a09041a0a09031a0a0b0a021a01020b0b0a061107080705110405 +080807021103020c000c011100000c420a050203060300af0b080c0b0a09080605040302010b +07000d10d4cc173931002f3cec32321739304b5358071005ed071008ed071008ed071005ed07 +1008ed071005ed0705ed071008ed5922b2000e01015d40f206020605020a000a000a120a2805 +240a200a3e023e05340a300a4c024d05420a400a59026a026b05670a600a7b027f027c057f05 +800a960295051d070009020803000406050005000601070408000807090009040a0a0c000e1a +0315041508190c100e200421052006200720082309240a250b200e200e3c023a033504330530 +083609390b3f0c300e460046014a0240044505400542064207420840084009440a4d0c400e40 +0e58025608590c500e66026703610462056006600760086409640a640b770076017b02780377 +0474057906790777087008780c7f0c7f0e860287038804890585098a0b8f0e97049f0eaf0e5b +5d005d1333090133090133012309012344cc013a0139e3013a0139cdfe89fefec5fec2fe05d5 +fb1204eefb1204eefa2b0510faf00000000100c90000046a05d500050025400c029500810401 +1c033a00040610fcecec31002fe4ec304009300750078003800404015d133311211521c9ca02 +d7fc5f05d5fad5aa000200c100000179061400030007002b400e06be04b100bc020501080400 +460810fc3cec3231002fe4fcec30400b1009400950096009700905015d1333112311331523c1 +b8b8b8b80460fba00614e9000001003d0000047f046000060112402703110405040211010205 +050402110302060006011100000642020300bf0506050302010504000710d4c4173931002fec +3239304b5358071005ed071008ed071008ed071005ed5922014bb00a5458bd0007ffc0000100 +07000700403811373859014bb014544bb015545b58bd00070040000100070007ffc038113738 +59408e48026a027b027f02860280029102a402080600060109030904150015011a031a042600 +2601290329042008350035013a033a0430084600460149034904460548064008560056015903 +590450086600660169036904670568066008750074017b037b0475057a068500850189038904 +890586069600960197029a03980498059706a805a706b008c008df08ff083e5d005d13330901 +3301233dc3015e015ec3fe5cfa0460fc5403acfba0000000000100b2ffe3052905d50011004b +40160802110b0005950e8c09008112081c0a38011c00411210fcecfcec310010e432f4ec1139 +39393930014bb0105458bd00120040000100120012ffc03811373859b61f138f139f13035d13 +3311141633323635113311100021200011b2cbaec3c2aecbfedffee6fee5fedf05d5fc75f0d3 +d3f0038bfc5cfedcfed6012a01240000000200bafe5604a4047b0010001c003e401b1ab9000e +14b90508b80e8c01bd03bc1d11120b471704000802461d10fcec3232f4ec310010e4e4e4f4c4 +ec10c4ee304009601e801ea01ee01e04015d2511231133153e01333212111002232226013426 +2322061514163332360173b9b93ab17bccffffcc7bb10238a79292a7a79292a7a8fdae060aaa +6461febcfef8fef8febc6101ebcbe7e7cbcbe7e7000200100000056805d50002000a00ba4041 +00110100040504021105050401110a030a0011020003030a0711050406110505040911030a08 +110a030a4200030795010381090509080706040302010009050a0b10d4c4173931002f3ce4d4 +ec1239304b5358071005ed0705ed071005ed0705ed071008ed071005ed071005ed071008ed59 +22b2200c01015d403a0f005800760070008c000507010802060309041601190256015802500c +67016802780176027c0372047707780887018802800c980299039604175d005d090121013301 +230321032302bcfeee0225fe7be50239d288fd5f88d5050efd1903aefa2b017ffe8100000001 +006fffe303c7047b002700e7403c0d0c020e0b531f1e080902070a531e1f1e420a0b1e1f0415 +00860189041486158918b91104b925b8118c281e0a0b1f1b0700521b080e07081422452810fc +c4ecd4ece4111239393939310010e4f4ec10fef5ee10f5ee121739304b535807100eed111739 +070eed1117395922b2002701015d406d1c0a1c0b1c0c2e092c0a2c0b2c0c3b093b0a3b0b3b0c +0b200020012402280a280b2a132f142f152a16281e281f292029212427860a860b860c860d12 +000000010202060a060b030c030d030e030f03100319031a031b031c041d09272f293f295f29 +7f2980299029a029f029185d005d7101152e012322061514161f011e0115140623222627351e +013332363534262f012e01353436333216038b4ea85a898962943fc4a5f7d85ac36c66c66182 +8c65ab40ab98e0ce66b4043fae282854544049210e2a99899cb62323be353559514b50250f24 +95829eac1e00000000010056000006350460000c0201404905550605090a0904550a0903550a +0b0a025501020b0b0a061107080705110405080807021103020c000c011100000c420a050203 +060300bf0b080c0b0a09080605040302010b07000d10d4cc173931002f3cec32321739304b53 +58071005ed071008ed071008ed071005ed071008ed071005ed0705ed071008ed5922014bb00a +544bb011545b4bb012545b4bb013545b4bb00b545b58bd000dffc00001000d000d0040381137 +3859014bb00c544bb00d545b4bb010545b58bd000d00400001000d000dffc0381137385940ff +050216021605220a350a49024905460a400a5b025b05550a500a6e026e05660a79027f027905 +7f05870299029805940abc02bc05ce02c703cf051d0502090306040b050a080b09040b050c15 +02190316041a051b081b09140b150c2500250123022703210425052206220725082709240a21 +0b230c390336043608390c300e460248034604400442054006400740084409440a440b400e40 +0e560056015602500451055206520750085309540a550b6300640165026a0365046a056a066a +076e09610b670c6f0e7500750179027d0378047d057a067f067a077f07780879097f097b0a76 +0b7d0c870288058f0e97009701940293039c049b05980698079908402f960c9f0ea600a601a4 +02a403ab04ab05a906a907ab08a40caf0eb502b103bd04bb05b809bf0ec402c303cc04ca0579 +5d005d13331b01331b013301230b012356b8e6e5d9e6e5b8fedbd9f1f2d90460fc96036afc96 +036afba00396fc6a000000010037000002f2059e0013003840190e05080f03a9001101bc0887 +0a0b08090204000810120e461410fc3cc4fc3cc432393931002fecf43cc4ec3211393930b2af +1501015d01112115211114163b01152322263511233533110177017bfe854b73bdbdd5a28787 +059efec28ffda0894e9a9fd202608f013e00000000010087ffe304a205f00027007e403c0d0c +020e0b021e1f1e080902070a021f1f1e420a0b1e1f0415010015a11494189511049500942591 +118c281e0a0b1f1b0700221b190e2d071914222810dcc4ecfcece4111239393939310010e4f4 +e4ec10eef6ee10c6111739304b535807100eed11173907100eed1117395922b20f2901015db6 +1f292f294f29035d01152e012322061514161f011e0115140421222627351e01333236353426 +2f012e01353424333216044873cc5fa5b377a67ae2d7feddfee76aef807bec72adbc879a7be2 +ca0117f569da05a4c53736807663651f192bd9b6d9e0302fd04546887e6e7c1f182dc0abc6e4 +26000002008fffe3049605f0000b0024005840241306000d860c00a01606a01c16a510a00c89 +22911c8c250c22091c191e131c03211f1b2510fcececf4ece4310010e4f4e4fce410ee10ee10 +ee111239304014cb00cb01cd02cd03cd04cb05cb0607a41eb21e025d015d0122061514163332 +3635342601152e01232202033e0133320015140023200011100021321602a4889f9f88889f9f +01094c9b4cc8d30f3bb26be10105fef0e2fefdfeee0150011b4c9b033bbaa2a1bbbba1a2ba02 +79b82426fef2feef575dfeefebe6feea018d0179016201a51e0000000001fffa000004e905d5 +0007004a400e0602950081040140031c0040050810d4e4fce431002ff4ec3230014bb00a5458 +bd00080040000100080008ffc03811373859401300091f00100110021f071009400970099f09 +095d03211521112311210604effdeecbfdee05d5aafad5052b00000100c90000019305d50003 +0039b700af02011c00040410fcec31002fec30014bb0105458bd0004ffc00001000400040040 +3811373859400d30054005500560058f059f05065d13331123c9caca05d5fa2b000000010000 +ff4202b205d50003002d4014001a010201021a03000342029f008104020001032fc439393100 +10f4ec304b5358071005ed071005ed5922013301230208aafdf8aa05d5f96d00000000020073 +ffe305d905f0000b00170023401306951200950c91128c1809190f33031915101810fcecfcec +310010e4f4ec10ee300122001110003332001110002720001110002120001110000327dcfefd +0103dcdc0101feffdc013a0178fe88fec6fec5fe870179054cfeb8fee5fee6feb80148011a01 +1b0148a4fe5bfe9efe9ffe5b01a40162016201a5000000000002000300000000001400010000 +000000340004002000000004000400010000f022ffff0000f000ffff10000001000000000006 +00500000000000230000000100020003000400050006000700080009000a000b000c000d000e +000f0010001100120013001400150016001700180019001a001b001c001d001e001f00200021 +0022013500b800cb00cb00c100aa009c01a600b800660000007100cb00a002b20085007500b8 +00c301cb0189022d00cb00a600f000d300aa008700cb03aa0400014a003300cb000000d90502 +00f4015400b4009c01390114013907060400044e04b4045204b804e704cd0037047304cd0460 +0473013303a2055605a60556053903c5021200c9001f00b801df007300ba03e9033303bc0444 +040e00df03cd03aa00e503aa0404000000cb008f00a4007b00b80014016f007f027b0252008f +00c705cd009a009a006f00cb00cd019e01d300f000ba018300d5009803040248009e01d500c1 +00cb00f600830354027f00000333026600d300c700a400cd008f009a0073040005d5010a00fe +022b00a400b4009c00000062009c0000001d032d05d505d505d505f0007f007b005400a406b8 +0614072301d300b800cb00a601c301ec069300a000d3035c037103db0185042304a80448008f +0139011401390360008f05d5019a0614072306660179046004600460047b009c000002770460 +01aa00e904600762007b00c5007f027b000000b4025205cd006600bc00660077061000cd013b +01850389008f007b0000001d00cd074a042f009c009c0000077d006f0000006f0335006a006f +007b00ae00b2002d0396008f027b00f600830354063705f6008f009c04e10266008f018d02f6 +00cd03440029006604ee007300001400b6060504030201002c2010b002254964b040515820c8 +59212d2cb002254964b040515820c859212d2c20100720b00050b00d7920b8ffff5058041b05 +59b0051cb0032508b0042523e120b00050b00d7920b8ffff5058041b0559b0051cb0032508e1 +2d2c4b505820b0fd454459212d2cb002254560442d2c4b5358b00225b0022545445921212d2c +45442d00000100000002000039b310185f0f3cf5001f080000000000bab9f0b800000000bac2 +6791fe89fe1d0a4c076d00000008000100000000000000010000076dfe1d00000abcfe89fe89 +0a4c00010000000000000000000000000000002304cd006604d300c9034a00ba04ec00710466 +0071051200ba04e7007b05140071062900c904e500710514007105960073023900c1051200ae +07cb00ba051200ba028b000006e700c904bc003b07e90044047500c9023900c104bc003d05db +00b2051400ba05790010042b006f068b005603230037051400870517008f04e3fffa025c00c9 +02b20000064c0073000000220062009a01040150018c0222028602c60318036403b003ce040a +046c04a804a8052605f406d206f4071c07ba0802085008ca097a0a980ad60b520bbe0bf60c20 +0c460c8c000100000023004d000700420004000200100040000700000415056800030001b802 +8040fffbfe03fa1403f92503f83203f79603f60e03f5fe03f4fe03f32503f20e03f19603f025 +03ef8a4105effe03ee9603ed9603ecfa03ebfa03eafe03e93a03e84203e7fe03e63203e5e453 +05e59603e48a4105e45303e3e22f05e3fa03e22f03e1fe03e0fe03df3203de1403dd9603dcfe +03db1203da7d03d9bb03d8fe03d68a4105d67d03d5d44705d57d03d44703d3d21b05d3fe03d2 +1b03d1fe03d0fe03cffe03cefe03cd9603cccb1e05ccfe03cb1e03ca3203c9fe03c6851105c6 +1c03c51603c4fe03c3fe03c2fe03c1fe03c0fe03bffe03befe03bdfe03bcfe03bbfe03ba1103 +b9862505b9fe03b8b7bb05b8fe03b7b65d05b7bb03b78004b6b52505b65d40ff03b64004b525 +03b4fe03b39603b2fe03b1fe03b0fe03affe03ae6403ad0e03acab2505ac6403abaa1205ab25 +03aa1203a98a4105a9fa03a8fe03a7fe03a6fe03a51203a4fe03a3a20e05a33203a20e03a164 +03a08a4105a096039ffe039e9d0c059efe039d0c039c9b19059c64039b9a10059b19039a1003 +990a0398fe0397960d0597fe03960d03958a410595960394930e05942803930e0392fa039190 +bb0591fe03908f5d0590bb039080048f8e25058f5d038f40048e25038dfe038c8b2e058cfe03 +8b2e038a8625058a410389880b05891403880b03878625058764038685110586250385110384 +fe038382110583fe0382110381fe0380fe037ffe0340ff7e7d7d057efe037d7d037c64037b54 +15057b25037afe0379fe03780e03770c03760a0375fe0374fa0373fa0372fa0371fa0370fe03 +6ffe036efe036c21036bfe036a1142056a530369fe03687d036711420566fe0365fe0364fe03 +63fe0362fe03613a0360fa035e0c035dfe035bfe035afe0359580a0559fa03580a0357161905 +57320356fe035554150555420354150353011005531803521403514a130551fe03500b034ffe +034e4d10054efe034d10034cfe034b4a13054bfe034a4910054a1303491d0d05491003480d03 +47fe0346960345960344fe0343022d0543fa0342bb03414b0340fe033ffe033e3d12053e1403 +3d3c0f053d12033c3b0d053c40ff0f033b0d033afe0339fe033837140538fa03373610053714 +0336350b05361003350b03341e03330d0332310b0532fe03310b03302f0b05300d032f0b032e +2d09052e10032d09032c32032b2a25052b64032a2912052a2503291203282725052841032725 +0326250b05260f03250b0324fe0323fe03220f03210110052112032064031ffa031e1d0d051e +64031d0d031c1142051cfe031bfa031a42031911420519fe031864031716190517fe03160110 +0516190315fe0314fe0313fe031211420512fe0311022d05114203107d030f64030efe030d0c +16050dfe030c0110050c16030bfe030a100309fe0308022d0508fe0307140306640304011005 +04fe03401503022d0503fe0302011005022d0301100300fe0301b80164858d012b2b2b2b2b2b +2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b +2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b +2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b +2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b +2b2b2b2b2b2b2b002b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b +2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b +2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b +2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b +2b2b2b2b2b2b2b2b2b2b2b2b2b1d00> +] def +FontName currentdict end definefont pop +%%Page: 1 1 +%%BeginPageSetup +%%PageBoundingBox: 0 0 944 450 +%%EndPageSetup +q +0 g +3.2 w +0 J +0 j +[] 0.0 d +4 M q 1 0 0 -1 0 449.799957 cm +205.586 33.855 m 621.078 33.855 l 621.078 277 l 205.586 277 l 205.586 +33.855 l h +205.586 33.855 m S Q +2.4 w +q 1 0 0 -1 0 449.799957 cm +134.273 33.414 m 134.273 277.441 l 96.422 239.59 l 96.422 61.602 l +134.273 33.414 l h +134.273 33.414 m S Q +1.6 w +q 1 0 0 -1 0 449.799957 cm +60.18 146.973 m 96.422 146.973 l S Q +90.02 302.827 m 86.82 299.628 l 98.02 302.827 l 86.82 306.027 l 90.02 +302.827 l h +90.02 302.827 m f* +0.8 w +q -1 0 0 1 0 449.799957 cm +-90.02 -146.973 m -86.82 -150.172 l -98.02 -146.973 l -86.82 -143.773 l +-90.02 -146.973 l h +-90.02 -146.973 m S Q +1.6 w +q 1 0 0 -1 0 449.799957 cm +134.508 54.594 m 621.285 54.594 l S Q +q 1 0 0 -1 0 449.799957 cm +134.508 141.715 m 621.285 141.715 l S Q +q 1 0 0 -1 0 449.799957 cm +134.508 228.836 m 621.285 228.836 l S Q +q 1 0 0 -1 0 449.799957 cm +134.508 83.633 m 621.285 83.633 l S Q +q 1 0 0 -1 0 449.799957 cm +134.508 257.875 m 621.285 257.875 l S Q +2.4 w +q 1 0 0 -1 0 449.799957 cm +348.926 343.105 m 449.551 343.105 l 449.551 361.578 l 348.926 361.578 l +348.926 343.105 l h +348.926 343.105 m S Q +3.2 w +q 1 0 0 -1 0 449.799957 cm +206.719 291.098 m 618.336 291.098 l 547.359 327.414 l 263.613 327.414 l +206.719 291.098 l h +206.719 291.098 m S Q +q 1 0 0 -1 0 449.799957 cm +203.129 1.602 m 619.512 1.602 l 619.512 18.52 l 203.129 18.52 l 203.129 +1.602 l h +203.129 1.602 m S Q +1.55249 w +q 1 0 0 -1 0 449.799957 cm +216.395 18.453 m 216.395 290.867 l S Q +q 1 0 0 -1 0 449.799957 cm +229.27 18.078 m 229.27 290.492 l S Q +1.556427 w +q 1 0 0 -1 0 449.799957 cm +596.594 17.465 m 596.594 291.355 l S Q +q 1 0 0 -1 0 449.799957 cm +609.465 17.09 m 609.465 290.977 l S Q +1.55249 w +q 1 0 0 -1 0 449.799957 cm +408.098 17.027 m 408.098 289.441 l S Q +q 1 0 0 -1 0 449.799957 cm +420.977 16.648 m 420.977 289.066 l S Q +2.487167 w +q 1 0 0 -1 0 449.799957 cm +404.91 132.52 m 425.762 132.52 l 425.762 151.762 l 404.91 151.762 l +404.91 132.52 l h +404.91 132.52 m S Q +1.6 w +q 1 0 0 -1 0 449.799957 cm +359.969 329.41 m 359.969 344.691 l S Q +q 1 0 0 -1 0 449.799957 cm +374.078 329.387 m 374.078 344.668 l S Q +q 1 0 0 -1 0 449.799957 cm +427.621 328.605 m 427.621 343.887 l S Q +q 1 0 0 -1 0 449.799957 cm +441.73 328.582 m 441.73 343.863 l S Q +2.4 w +q 1 0 0 -1 0 449.799957 cm +158.434 32.609 m 179.375 32.609 l 179.375 276.637 l 158.434 276.637 l +158.434 32.609 l h +158.434 32.609 m S Q +BT +16 0 0 16 379.104615 434.102483 Tm +/f-0-0 1 Tf +[<01>17<02>21<03>2<04>1<05>-1<06>-3<02>17<0703>]TJ +-20.371625 -1.429849 Td +[<0803>2<04>1<09>1<0a03>2<02>]TJ +ET +q 1 0 0 -1 0 449.799957 cm +348.121 376.93 m 448.746 376.93 l 448.746 395.406 l 348.121 395.406 l +348.121 376.93 l h +348.121 376.93 m S Q +1.6 w +q 1 0 0 -1 0 449.799957 cm +358.359 362.027 m 358.359 377.309 l S Q +q 1 0 0 -1 0 449.799957 cm +372.469 362.008 m 372.469 377.289 l S Q +q 1 0 0 -1 0 449.799957 cm +426.012 361.223 m 426.012 376.504 l S Q +q 1 0 0 -1 0 449.799957 cm +440.117 361.199 m 440.117 376.48 l S Q +BT +16 0 0 16 355.977417 136.594032 Tm +/f-0-0 1 Tf +<0b090c0d0e0f10110d12>Tj +ET +q 1 0 0 -1 0 449.799957 cm +196.895 310.461 m 233.137 310.461 l S Q +226.734 139.339 m 223.535 136.136 l 234.734 139.339 l 223.535 142.538 l +226.734 139.339 l h +226.734 139.339 m f* +0.8 w +q -1 0 0 1 0 449.799957 cm +-226.734 -310.461 m -223.535 -313.664 l -234.734 -310.461 l -223.535 +-307.262 l -226.734 -310.461 l h +-226.734 -310.461 m S Q +BT +16 0 0 16 131.150171 437.189101 Tm +/f-0-0 1 Tf +<1314>Tj +0 -1 Td +[<0802151603>2<02>]TJ +-8.204698 -7.355704 Td +[<17181803>1<02>]TJ +0 -1 Td +[<19>18<0a0a02>21<03>2<1a>-1<1a>]TJ +8.140788 -9.532159 Td +[<14>18<09>1<1b>-1<03>2<02>]TJ +0 -1 Td +[<19>18<0a0a02>21<03>2<1a>-1<1a>]TJ +13.840575 -1.667784 Td +[<13>45<02>-1<15>1<1c>-1<03>2<100802>-1<15>1<1603>2<02>]TJ +0.0468323 -2.214767 Td +[<1d>-2<03>2<0f>-1<1a03>1<10190e>2<18>]TJ +ET +0.8 w +q 1 0 0 -1 0 449.799957 cm +676.996 58.477 m 426.332 133.262 l 425.105 152.562 l 676.574 257.215 l S Q +3.2 w +q 1 0 0 -1 0 449.799957 cm +675.879 58.777 m 942.465 58.777 l 942.465 257.715 l 675.879 257.715 l +675.879 58.777 l h +675.879 58.777 m S Q +BT +16 0 0 16 709.534497 402.365834 Tm +/f-0-0 1 Tf +[<1e1f>-3<100b>-1<03>2<0c0c>]TJ +ET +1.6 w +q 1 0 0 -1 0 449.799957 cm +397.629 397.246 m 397.629 433.488 l S Q +397.629 46.155 m 400.828 42.956 l 397.629 54.155 l 394.43 42.956 l +397.629 46.155 l h +397.629 46.155 m f* +0.8 w +q 0.000000000000000061 -1 -1 -0.000000000000000061 0 449.799957 cm +403.645 -397.629 m 406.844 -400.828 l 395.645 -397.629 l 406.844 +-394.43 l 403.645 -397.629 l h +403.645 -397.629 m S Q +397.629 22.714 m 394.43 25.913 l 397.629 14.714 l 400.828 25.913 l +397.629 22.714 l h +397.629 22.714 m f* +q -0.000000000000000061 1 1 0.000000000000000061 0 449.799957 cm +-427.086 397.629 m -423.887 394.43 l -435.086 397.629 l -423.887 +400.828 l -427.086 397.629 l h +-427.086 397.629 m S Q +BT +16 0 0 16 357.241675 1.484389 Tm +/f-0-0 1 Tf +[<0806>-2<1c06>-3<10200f>-1<21>-1<220d>-1<1c>]TJ +ET +1.55249 w +q 1 0 0 -1 0 449.799957 cm +565.953 18.199 m 565.953 290.617 l S Q +q 1 0 0 -1 0 449.799957 cm +578.832 17.824 m 578.832 290.242 l S Q +q 1 0 0 -1 0 449.799957 cm +243.004 19.812 m 243.004 292.227 l S Q +q 1 0 0 -1 0 449.799957 cm +255.879 19.438 m 255.879 291.852 l S Q +Q q +q 0 0 945 450 rectclip +% Fallback Image: x=680, y=61, w=259, h=186 res=300dpi size=2511000 +[ 0.24 0 0 0.24 680 202.799957 ] concat +/DeviceRGB setcolorspace +8 dict dup begin + /ImageType 1 def + /Width 1080 def + /Height 775 def + /BitsPerComponent 8 def + /Decode [ 0 1 0 1 0 1 ] def + /DataSource currentfile /ASCII85Decode filter /LZWDecode filter def + /ImageMatrix [ 1 0 0 -1 0 775 ] def +end +image +J3Vsg3$]7K#D>EP:q1$o*=mro@So+\<\5,H7Uo<*jE<[.O@Wn[3@'nb-^757;Rp>H>q_R=Al + C^cenm@9:1mM9jS"!dTMT<$3[GQ$8#0$s<4ZX!SPQ1`C/mioWjnAY&^gM+`4=1jRLW!YA=M/6)*KS9PE`kN%="Tc + _Aoh+fk'&t\ctIN)4XQLiVpoI(>.nOW?*DmsG$@,,f58"PDKfeXi0S^6MAH=;fBr>1IXb_>k + P+oS^^pnX!PjdJ%0OEX9GI`IODGpB_@VYP$,Ve*/ITH-bV]jIOR,+@`"`Y",ZIn#4SCjj>/e9$(.LU;GSa9RBOG0#GDN?cO-A2#::%$g,Y6@ + "SM2*A9YE5'oPAVt9%.$V8^`j*/PFP,br"q7EP_Aj*tpKE4<6:.a&AJ88Zc!]'l@2hecqCM + C"A$8Ci!/X"a"ifP6F61=;D=s:f/TseRP+M8[i9#2JL'Af7ueC*['#?qeOq$"Mnd)k7*kre + qTTnELQVR^L`mW8\/eFQYk)d?5EKYCfP)T`bO9dJYQ:I`hhj?)u'k;ES<4Ma[Vln9fIdbQu + 3q"iY[\$a4i?-l&3au3R*Q>[gA7ZQh^r)OlV519O-Z_el5r:L)+$,Af!bZREO0hZ('nN\`m + "_-MDjj)FcoD@VD$MAXZ.*XD)KCeF^GBSG,=AWL/"7<*^F)n(=C%:Uc@f\q]C!LX@!4Q\1/[h=%E%]U:DLk=S8*O(99TS`EcRLa + VJ#:cWG5CRK\nr=PJ%8ed?HdC8(3`o:>rpT\ad?qB,S@afuDJE]7"OMQZQ;QRs&1P?mbg@J + ^&LOD]DDKa+N99hJ$3WoVDjel'4H9SlYSSQ:]=:IdaREHl_0Oe4sj]jibaV(,J6E[$.@7p8F+h<]l>b;i5g`ed0rU + b=FMS=>Gi0S3)E#j4VQWK0G>X6.L@N),@\HEMbmA>#RJ'eUB$R<:q>kKO_G]efYD^sTq3RO + #92]VEK3oA3_*-RVjYtU@q1qbYBWD/T4j[FiYX[H;!T:Be;4_,/hTO/W$S,7BnU7BCaesAW + 0.KS=$qLL8_D_MJ7JOTl + ?Nh;'$p<33XW<*/b?diarEUSHRphNgN.P^K + aNTONfSh%AS4C7[`.H3]l)+K*-s&RnXe5j'uW#"%eu8_%WPFV;]]gm`NTc03.J'HJTPDk]Q + RMFLXjZ:>V-KX.^#,dlplUF]FY64T/Q(o7!3,jlE7>[11YZM!*38t'jZ+O$ep*CFs0R8V<8 + 8bq#QQU'Z28`;6r8rZ^577jIY/uBICYa1J.`D05R:5l*d/0oIfX$MWG:E\1D"2KVl7/K@@\Zi0XoiI]WP5.A(,D1?,G-;X$Q;j[g-0dV+T?RW8T`h;6L75r;71j%`L]uY1 + oLW@;V"\:VJ;U&a.ZdRDI*(g!K\1jt#Sql\49;[-Gr$ohDhpY1?e2?#/hY6VV:)I'A:JP25 + o<[oOn=gY236K/LKSU#%@,Lnust;cfV"ec[Aca!oIjUP"4;0V$H=J]Q`fJF>O3>)JNlpI#kFDbc0eG"""$Z\.2$WWW9M+>$tu8 + JS\O1*JoBKUAVTh#!90>nk@6$C30&*@)8"!E]1 + Bbp<%.V+fa$FVb;F(N[f=;MrX.cpb-or[g8].7VU+MXuNY>mjI6GER$j;3X-#Z*OE^!&WnN,$_"*/jP!*sMd[j4q>e + VfUfa>ldiJ[sK;67POTbMS.Ht(A+($e^;FCl`V.@D-Ve&qk1IdTdF^7h!/9kXi7E[PXWog$ + U,)a;>M$ElFB>a?,C?s/_B$Gb-p'/@c>7F0.L$Hc)&='-O;e?4sST+2Ld:AW8=>$[SPa94= + Yg'3($Q,H_XtBY])iPnW>pHnr7[4=,?1TlX@n-dPTM(+^H+'YTkj28[D@HWF5Z-^E/2L^Pm + ueJ[4FKrm!,I[9.^Q:;Ha,Pc&`R%kMK)Ss_CRS?M"Q9Ln_@hAK?edscXjOS[?f;[dT0O%p) + ^mAV2p7A0ac^[+7id`$@0YVh2ZQ#/Tj4hOnq=FZ0cnHXJkCE$fZgih.WWqa[R0N\T^hC;TK + fr+S+H;d;qc4[FNe+ppX\u?&u:7?HdLk!oIb\I_CHlh.K)Lf[!?rPu_mkh:J6s9?MOY1^;n + 6VCo@f*Y3Aqh[Rj+`lnd[lr5X=BU9Bi:.X\nTJiZ=0.#*=SX(/0C#js:?"8);ZVF#Hs%RKG + ^k1/T(3_^J2qU2VZ1_MMg3[1CB@R.e^+ZX#@NJtt3m@GhE.6n,9:4fS,+d>$GOQM&F#pZ9Wn@C"NT9iS.=j7iWEC<%eg[ + 8jhN4L^AYAXCp"TWKJ!3ck`jZm)YcBh4P`f4`]l1C&bb[cI>?Un?mAB\8YVAY<_M+OGR$u! + Q:U^,7;qZ'S!OAH:g<7_G$6L6ulH]>>P + ,pqVLae@MD3Bu.Y)OaEC'P+RnNdjD720`5'VZL=7FZuDd%SU&%E`S>C%RPNU4_\oD?ff7b7 + &UZfPV!ZKC"WM$tosPKEe];`rK`3TX*/ZW2c\OC'E6YNY3Lla^[P20TQ_S&D'Eg8R7^;K"I<8g_JIHmI#"kBB%[8tlEmEH8S#nDjCi1] + /sGLpf+D>Id:.uh*.$c+"(g1WlVejfFXM3T-aJ--jKs.\fRrF#\8JUmarI3K!gcZ\\I)<"l + ghb:ghho#r[?(5l`fcl]%is/#?&5c8X,''fNKa-s/lQK-e=VY\qDC%UBL'[KXa_ZC`m;`s/ + K%o9^iP9YRRW+Tua$W`o`hHJh&Ip=BS[U!(B:k<@Y`U88 + 0@KBMC2-Id0lmYrTga3UIcZV^/,HHSRfR7EugL'D"^\pGhFQ>DS/LdHiLN6I#qdp`TDC&kd + Noe0^r33.e-aejGVdh,#fJHWbs;].VPV)i[s3i#_J7Cm:bY))IWJoN34aeG0%*f\qE_Hq9LCmCmoobb.d[>31>Z-3e=C>gi-$$^)SHX,; + 3MmT_'lJIjNi'JVu)`CtBq9XN#+AKG5l=Cd7TK/(Qj9rnmMU&sg\qB9F+:3G10D]h0^`l?.DWr4Woooc%k/N5^Q\P3pA<+Jq/k]2?8-d\4OD)dZP28eVUf8!:?Iirnp#L9QS48. + P_ZYL&M#(@pqa-$b=s])=[Vok3LLGoqBF<%q#p,Ni`.Dd/d;9Z[$'c-[oU)V&^*WF%"WhCb + fVK*V`#tgklpAJSB*ftkJ^;]%VoYn,MAZd1eHU+i7=\Z58I7$S%27t`9L=hS5#oPB;2#u[; + kTmY"GH#A*sN9LL3-:'UgX\O7b-7-="pT6\4LEh?>"_c"dX]EoNHmY91\b].+3G+!e]d`?U + taepG6tDf'e?*jbEAL8(sC[\E"*6qD9&75iSt_MQo[Go1%+JKhHT?c>RXK&sO7'9(!)4i6c + 8'Las0uLT6R'c>5'4=%&*m%6.Gq8mMZYROi/'O/`GD6QAV;BGV'ujKqk0arfq]7`?EA95I3 + gaA2s(E(6O,,_Teu[=3=2J>p><7@J&5k:)1a>7U(D`JQaq\=cI>H79'd%"*cKm]b:2JCm!$ + V*%p-l>*N5g[LAXCcc*h*p-k4Dl^+78(N&X$R;egWIAF-q3RMb6sQds,L!/udp1ncYU\7g.?K2PUWi#u!(q + )p0_uNu^"hMr/8WLMFo;VT=S:s'rjkBlXc4u> + %f)X."n#)jX<7.bNMG*MIV:sH&lG[>;E)8JGkcCZJ6[CSi)%c?GmhE[=Aub$C::a=FBM=)Z + $m$kGTd=etM0.23IKo[@Tb3C7kG"N'pU,?N[AF.N`P,]U>m"iATFhHH-Ae]JS#Kr;WOginj + r.7?UNccm\=b.Xi'"V.37@!3X+RuW)SUeA_lS1-XR=oH.cmdZJ\,U\9#R$$7t,="7")4Gjt + \#iG#ATgR.Vi$KI:$T"HHTi:`mW9GNZ9b/jRF@)#?->=c>\qklPCL_Ft54^q:)$,fJ4:d2E + 4BI#sN+n3dJN-*0@CUW`ZD.THRu28af$TE`!/m/(9CFE:.PD@"[-7kUH/;8@j)]:<,7H\?L + QM7D<&\P\'kLJtb$\[i":X:)GQR`GJ4bQYT)M]1):>[PT$hFb`OGUIHAaZeJFMg,VZ]f@bQ + )FfYnOT22&:8Nh@Kc_80N?r8`M!ZhR/e[pLpFgWmMb"h*$Of^b9\opo980*En+saG`0'F?@ + Z.`&0^8iB?-mu&@Z%CV7$_1L89HA4EYSWe:iI3mu:HT[&#%"=0n)lZrDR0+!b4/C#MFR#Y3`eS`&4pJa^Fd0XMJhJ^p + =RoAlDg%Y\YZbRE[65"S-.1ZSKt#o'mA)i&XQ?t*8&i5<`r/iV4]f2j]uRa]a8;jW?8LVj4!'cYV8; + nG]p^$34de5^mE*.J"NXame7]:$A8%57.e`9B>0fj'Df&;p7.=FMKR)pF4:$]U#fMPjP'<$ + JVJV2"Y_oNdtaIBBSg + U#!6j7&ld@0Ufr%k&+*#mGlBT!4R"/bKR%_r;3jPYM/mMacYf=SqMR``Ql"Tgo7`i7*41I$(DsR + #>#_m4ePRHDb9&MF/CDKtHd?8bfh@Qm8YsmMoVrp0G?C9b-+4+3P#H%ggK[bemF*k9g>=l7 + %ZV5*1maiVMTHa1Q/>]a&Q-*AIdUHQ=+t/'/^$mdo:jU60P],tW,fRjU + euKVKt@.%1p!4Gja)F3AG%_J@?WCr0W)C12'_9]_5^$ERiu](I*n/;Cj-o:`'D.7QA@?l2i + $M*Dj,!KfYc<$^gEY;4eW2nR/<@2Uam*3Ccn-P?=g^_0TBfF"856Y%=#8>rP4EnMV>0!tcWJVko:?+qgH1AQa1fRqGmtJpU!WCa0@A_ + JqTgi>i.L]5?:YH@W`NcK(+$h"O7clb@%aqZ">T'F"k/T_&^@_'A:^<^EVEeUJm,S1=u10Z + _-@L/@(;%u%7o]+L11.=#aepnfR"-?O=A^:Xt%EGa-jipq*MB22'Ngdl7=^qL>F0:-8GL1? + W`H(m^q9$.:oO#U8[`k9a>[+K)+Fof%i7hQ_4^=]?ZZQ>XcTtd>_.P\W;C*s4lVqWU^LL_V + ?M>ZeGC'Jj'9=ca,TpeGogHlcW#3'-0qe;V/kRI7W]l/8FZbIG!#(XZhb0d3$l7>9r$,)?L + _!bO]Y9V/0I&AL<-HlW9IBTprhS$04Nr3_`$6o5I`iJF=Q?)q:>:86nF#eJO=/G;3?WZDrJ + )Di[#D1n/:)AZDpl6`XGlC)%bb(9W$R*B4.FUn-1c5`:kHXjo.s3B^O2uT2#K-(ZIjQUY\G + Xgl+hUuf%e;"\[oA-YW1/g]b0L]NnUGF-LEX@:)S$r`&mC'=k9ElTdgmT,:#m"?VYAkIg0m + 6uOB)`SQC.qIU#^X_,k4,#oZDsL/:6iO'1-q@$=Qde@jVZ^OLCOB9LDi"aa@m,aDB@0H8m; + XJT8!&N^TRG6\pDhfG^UCJ<1rZ5mSnD+R"]HS`1DP#\ablj?SN`+so_j7P@4$0LQt-k""`Z + E\mA>?,h28;aiBF`q1aRL-k6G"(BUf=%klBZmCYCp-2(C!?bneK92636V)HZdafmN;(6Y#[ + ^@eEdhou3.bRq%iJ;CV@teTr;/N(_R%kopUNOs(s#VWn]]*DpM9G<88jhnYh=O`V&RgD_VB + H`\A?_DZ`NY]ZZOIRYP?,eq?MpOiQ&kcHT5 + XPj.)=!F&%#.3bMAECaY=_7onKb<8h[/AsCjQdpOJ\TU2:&H@He9oWAqiO`X2AVFSb[6="m + 7M%ZM,`3nnE=3OHIZmb'0.&t+X]*aHI3\@Tb]1&\3.r6IrnKljG29!,7'LbP^#[1UXl&^4g + J^0_hg2J"1cuc1?GWgj$J0F1iPVNTi>t1d:GT.):WKfB><;N:fC6__tN6ST*jg,D[i5.)*[ + XJO&'3IXC@p]8nZQJ\g>#5*/%dW%>jR* + gWp/KP?AG`q@0=RpZ-89r6nHHuba5SYj^::,R!dfc^J'CAeo$@usD"oD + [GD3ZddVtF@TQG!i)eW@8+p>9*OJT,KA_j$$=jg=QAE`^YQVh*6IKtEumY)lMlJMQNoHa.^ + F?rFUf?LKSp`HXbXj#04rC<74!N(<8.\WbVlnH8l^)I>;G0U:q_BNa[ltMB@p0\;+MK)ZI` + L++N@e*lVNq6*aGh0(I@-;9VGW<`odiSYhJ-tiY-HL^q,6E7TOF^Lfaahtj".Z'/!gVdU`^ + s:37EFcaL+0hB!`Zd8,jlt->9^Q9`Cjj!8)?.7-R:tH1rZ\Uf%tJnRFaN5I.LD\V81!.:-KfomQ^-6)`O@YcSCa6OIWUtDr.Tgur$GA + A>"-):F2!>_WSQ0rLO;ZVqesTiKpN_=Lh?Yf34:<0o3qdVD=&m7rd2`e=F=uP-H^AgAS_(J + tIdu9Af6ctWpV1qP!T8>AKCGHK_g$YCid=gcnX_\[GlJrJI$^&fSla*\Ikg)5f:2B'GJs,[ + fI[iRZLj$55^ICil>FC-a]nZOks-ht^k]8R+>a9!E#n@jhc0`K:ItSa(MSIlB)$rcj&qDok + ^.9VoA;L:0c&XUN'ZOdK^4WZqrc#k*b=>M"#OB.*VE")9SSD^ge>n*qL;T4rL^RnIfJC)J! + ]d+T@`s@s6q0^+8ZU]?p4ZT!!8Yk!V?FIYS=S4IC.2O]sn5r9F!h1#!K$?J:Vu,Qkhrs+@+ + ,IJuCOllBqbOrP-Pg5I;%h//(<3'L>D-6!P0kC_oBb(dX)u6(AiZX;aI<*'qdh6/3MIllSO + k+@6J[66%19/0dJD,XP0N6 + cilcr"@Gj=J5`R;,CQrRJUn2PX["0aJ1n'A.g-hA6BjZ"36DT4;\b/+Oo+YT_s=B#0J!kl/ + 1WVBlMW8D2)"SgM1Gu"@VUjp2oNo@7,1O*lq^%I:dkdi73#2o/5nu"<(0>,ZBSBBiHm9B+N + !^q!B]2S>MIk7gn`Rk8]lsE36"2K:A^gg'LMc$d!)OH's7;+,=<+e[JBL[qp7\"3_XD: + ;/9=%%"&"PH8Pb9u*,.q,j"'&%[+9c[GYe + KU>:1cQ)LO/Fh$m%a>\p8;IGeFR7>$peQkE:Rq8WXSYf+r(kQ8:YbqFm/Kl[!)O+*:`TU6/ + H\g4"Aher:gF9%D$Nmc#Z-Ke:n7qiXU@t=$rG1X:u)UW_lPoC29#d!9&0%='_>0ao$K"jb+ + rE4>M?I/%ag76Z60fKgN8)=H6KZT$'a6s"-4uPO>tJA^AOB`%3::5Ju";,.>3e7*@Fa5-rQ + $R;Oo:8XXd;_/5j_E;V`s'm3e6OGQIat6LY^g/$QML#!dSK88PES,go<8(.I!`]$mXrM^:; + u%"\M);Y<4Pm6=PJ5ZA1Y<#n;)/ONK#6rZlL<*_smD+@QR85tR?<1QW\X\2X,9N982<8C;K + m8$^[:fRs%GFB + ;1Z=']uND0K'0GZTlM=.OXl_]2"m/MpQf/T<:4!tBgn$5\p^:@'g[V%UqI3P*C-\*R8'J/j + /HL]Z[p.F:"T[>S+_N*+>a=P]!>m>kBJOBE$T=WNZ./X'=#PZ^_G=^@=rD3nCRQs#E:=e2! + aXd`J,S6=+-=l#ZPm@RP[TNVeu=rj>@/Y-"J3S2'k"!sg"Ps!,4W5+nVd0s='`:?O>(;i5f + \(o3K]N@SV&&Qkm0u]nl/WIG'5R`iE)l[]*pm5$Fm*Z"'ZJ?\Tg[IrY[g>VLPY%Mpa]h.:^ + g%>b>TL[d/]1gV`*?$U>[>?S:rj&qe.jB+gmZJQ!&L`"-URF^^#Z.U]O4Z_!QE6a2qrf*c$ + umh.'#lr^V\2(7E:<\`ncX-?(K\TXkR-pgg/1\?/=@CmGD4Ji*HlO?6/$3/`U/#jBbRB?T/_=9Vn)+Z-VD2C%;Jm&:]SU408R(RMA+!C.hU]n@c4!7cV?D`( + j.V:&)L<;HXq+q>&7H%\@3-%i/e_YW'Oa`O@6tnO!Po+/_RNKXN<9]C-6#LXc+9rL^jN9,` + &5^_8ihqM8-7HH9lbniI1lluN)7J3!ZN;k(#k6&@\,&YXt*tq/7QmV@br_HmOr&K0OkSI@i + dC8/i.!$1h09<@pV''DDu'S3+It/A"G_kXug.-4CcZ"A)9CZmQY2^(6l&B*%Ab"G[/A39JW + CQJY#>)bfu4gX[VmQ7K_AOgXd7:G-:V**bpK#.0e+;! + =SV"/ChCt0B&7E;lp@e97u-$k$d+_CV:B"Y,%&>01m<@'I.BOJGs2$pJK,&KA(@Qo2RQ"A- + K?YZeo*$M=3]flc1Y;:Sm,)C03)Dac$Q_-Hn_LTJUAm-u$pgef1j/SFSVo33[?=`J)fI;\5 + go4;r[4B"jTZ5(LRNhU30ki09TsKl4hpVPb2K$3TjV:u#SMZskW: + ph8t?)dKPcBP3P32`iSL?]PGg+CYlcCG&R_<+-\Q"L"Oh@HR_aRe]>A%cQh%B*.T_.0Ip`+ + "FNI&&?Q_j&hD8AV<4],V7Ejb]#ftclGh)E6*QCNka`B@A2C%@4ae-RJjU],C)3=kKUmd>g + aAu8Ukth(g2F+Mdd@V(DB@eT0&mFV]EdscP3Fk9WD40IrtoPR!VA'A,WO6a+2bK*Vn$%^fs + R';K<[W#Uc-NVDHROJ#j&1*D&*KI)H^Ch@Z/p2S&mQp&c/+j_NM>R"TKMRr?o)?hoGun%4O1JZ,[pL_!+'%nm<_aD^TRQ + R\=H?LhS@J6BuKlFdQG)BCaRBef]n@uFkS8*i-gpJ6Xi + 8NOT-oPLN-N[.Gi+MlTs0I3_3fW'GGOd'ZIiu]?4tS5q!$@S"_utFB_Wrhd + P$7K@IP6bdbdQM!\]?sVG76:Unb,_H68l-0;EhQQPR\FpW&E#a*Ot5a:+b*&]^\krtDI*Q" + >_`q1jOkLRINO)LAC*q7tF(f8'$?8U:#)H3qB6(Una@\9j9i'$mEAa/4E3Vh'o-MP30=0=` + (#QYcO8m13*9J%qDLZ3;V^H0;PZMUZqO[Kadir1D,ZYKLm'\dHKT/GG;-%\\7%8:0QPI(>Y + m%lEYY2>[$"Df=&ALW'*tT)=)GMKbbBDqf]TgjRIcI)oXlfIqX@c`fp=$ST8Cd>E?1oD7c/ + gUEVpYN$E`f=O8GUjDf,"BKtX+#P47Bk + _$)'r,8uh#OD;Sp]&SM8S$7p7&Es7Q:kf;q'/4:Tpcs5`$rJoF<7"eB?/^-Z@q#-9ISD:74+9OGZ.^$oSl + 8V;]/S#?``3;76)YL"X]@H$nIo- + ,$9t;I%MV;D$ZSGn"*%=4>Fm;h8b25L96.!5MDN#m.oh4:q_4:g=kB_9dQHd@IBgHIJO=nd + H,^7*;4AcffXh/W0\#oOZiOH$PP8-CoF.hbYNjGtW4-&pJnOCqHM$L + ^iA)-iC:S[:S5>U?u.*>GXW@H'=]Wj$2;V\f8bL4T\$:P"Ui4%gcH%b0cWh_e^WsDh+g]:ki#:^2"9U,m'QQOcd&Wmm*JMp#k63kh2t=WDf$Efd + I41]r6fNNPA8h&]s2D.m-;^+kSB2\a:@2,ND\4\F*Rml+6<;^@;?j9h(OlC&&O@]^SKn + Y8>cpQ0T@XBYM;'fJ3(#+P?U!.$3go2E4X=p` + 9Y(6)mO![Nm6/I4MKL?F*i[bi:pV#M;n.N=EUV6IG]P5q#4Wmkd>\?n!V^:J$.2`AM7&K]n\fFfo+^!DhXXp`k; + ,8gZ`@SZ3_e84@be3*ol35Mllg;[25GWF9Wak(tF"Eee+6N`cYi2eXhh"+k&bJPd;WuYif&dmPosWFfaV*BigFh?L&HO)" + mmD)g\G@CRn7sUY?(NsAFCQqb]QdOl8Iq3e#Xc>?e^][DU(5=\&[]5g_"%8`MLNi(E?mhOeZs\n`#hpL0N) + 1@8s;@IB,^Ngl(]DG4$cc("[h7h@m[[0-JfXe]rE"lIf)@XK7_0Y1;DKjC7J7?^`\Bq5AU\ + #iHCCZh&4aaP)>s<(3^FOM_--QZZaBZ4`oWCBtl+YAqOt`tS5Q8R[_rL;\N]&t"&?iXn>0` + ?$<@=Iu[S43TQq]VrCS@b4JGmqp&:Gl*\ZtS<5E67FVXYR'iA^bd3XBlk[8a01b3We*q7H + X-,1@L<\/`,A7KF7Yo,80ln%fc5\Q*.3DgpU2 + @^Halm]0g$kqAg\?a6KO1FUiX$=%$gD8,1fZjM^8(Vr-+'fF<<%0"^7.';>`I##>@9r#fV@_;iIBYna+BRM;e)1>1Cg=h,g05+e@# + 3#!N5k0MDSo@W,(S9ouADU4B\")<_Ma\aSQ8H%t*^;op!_.>c]&)hOQCe1W,`&6)?p8C?g@ + #og,f%ca\EkYLZb,)[rn\km.4='k:^\#ikMu)6`;/_#(c*\S:/2oebGuI1QI"!phIY-K_.u + 2A+.O4K^k\JS194I"aSXB<_id[Acm'"./s$R:hl?9qfd^0FsZqS?DO8_DJK!d9I!QDdIXA\ + :Mn-Y7,#Oj>R0JX,W2ET3=6uG=UNPb[/6Lo^(6:6p>Y4rf/4U$C9oP>qf/o8qqpo\,Fd81n + i$./^3@g=7e!%uQd0F5H*%)>Uc#G_M(N6_e!Q_r<:*QZTQDnJ^//Y-3p)3>Ck\UD:_)1cd^sVF + 0hh!-2a\]+eT-&kj(X`'W4:K%o7[gb$MiM09tt@[2gCUVW3B%VY)<[)^!45>BSUDK6`c<0ZiRPNj#0P + (J.Frq;M.1K"GO/TCGsD'8?V+Yo!3nX1j>VF9aul7Qc!m-G75djpEZje25W;Sqri-S18Dd& + o^cUX[Yq@-#S7)aNjB5lic93Y8J/n'#YbCMoojfTU@4Td.N(8u1_sT]se-/:f/4;aAF + +OKF]g2TMLF/?:\h'elis0_1U#c[@`^+#1*W35_%Bcf!V2fK6nC3RY8oT`$oM1_:/t&2CcN + X0+H48sX5EU8g>pD]ZLN.-?N?\'crI;ps04_PFN!4i^&O0_mll#rf*jbHl`dN!DOV%61]g5 + Jo=ccVDG(O!_0t&9Fr\1:8Y'4uDak+qIHc.7QEl4Oe56d'PF;Cah_EO$+Y?*J9N`&FD^S7W + -]87#%f07GtLD%ffPpiUcR>mb:.hgHW&X7`-.HNKC@SSF=]%&i6LI_"Kq,haikR2^?-;$J: + UN0#_[o1_&e2laf1e;QlkFfb/Bed<.qN[V5;-97kVVY0f2nIk`a59B?m3Kpa+*)Q:u99_@0 + nNVoeP*mh%V-Esm/+Tt"DL^ie]%+D!_d5]"%oPrMG6_$.nG + /WhH44.I.F?2QW0$,RU]np)E'hqh#,?$Ic-1s7l:k^V=5t4kE-.PRjeZpIDf\"$_`G;X=NS + ,Yb3'GY:!hcM;T\BiAoZ4GOWT3d,Das3DmPcpek/6tnldi%nglq=+>?1Z+op]=j;-FTt>#\ + o9ZCbN693W/J@DXdb$7b]:*^Yi6*\ekmc__*.QXc.*:EsmJC->dreO-VrksRl%bB=ZEDE/t + 7_2B"l0!P?k+(g3m?rh"f2@CY5QW*MI&Ctf@eC%b<*g0:YBGQVnMOpHb7cr9%((OX\(8Dec + H4+ns/+MWGU\LiVDS%UVktM72bI6s+UnjuIPP/OR(6<<$2eMd7,Be0I1(@ENokhQ)@CGK+8 + RB([1-^a>]-Gr?2ZaH?#4R/?#<*,"p,b`"?Qs`O::l1&hWJ\$Hh%@Q&Y].8h-SpVg=]0UFjAfW\5_l.Qg*ka\*2@iUiG>mqj7@Q7>KpX'j^ + AXaQP=U_g>.\$hsPT"Quh?YN/La_:[q20H7_F4X-.-LZ%u@r@Y1DYO$-8S6kt`7ur,*K;C- + c;m-E0k7fktMY(m;CHSE>m>d%eD4.fq%j#-b*S[E;,"#t%iT&M + a%[F8,fSfEYh:H$-V-Mj5iZX;EtLe>*W61_T3cGiB"]joefO#.X(-f^g$ro$YiP\9:h6"/) + k-7nW2iXdHOAWDKA5!=b_WOjg9:0V^[s-Sn`n&haqUm/rKe0^*[Z]&V;CClk5?r1S?0r#tp + 2m2on7PnH)$cZpt&F0.6b!YHZi3`9_VcC?p1*hP0)1j?YTf9qTh(Q6m*N!AU,;A"kS9oRb\ + 9^+I#l:O(d-DRXj3`:PGs\<'lBM'q,:Z=8Dam,Oq + 2ZYg3-jh^)=qhjU^Hqo4+P;C&[?'niA6HWdVMh\$Df+Cd_2#C,KVi(0?kOn5G+UPT)%uQ&L + n+fXeV7;3gBR(E2(el2AH?Cl7)[9UVu'3A!tddR(##Ak389hSXF[dRCZTqBl>Sso"g2V-U] + C@nZW8PL'!g$"?MPIg66#sQ:(/HQBPdtlN(Rk-!s=!Pe%h[".\Mu/2pstX2$`s)T/X[^]V0 + kXP/[;+Ao7+?`fc[#/GSg(O$MM`]1,1l-J5T8u/R]fpG)eQEX#+HY=HQkDQVcJI<"c\heC&KDI9,)\l0A9cO)IdT1B/*P[VY`MLDiC$VoTb'I6um'D+ + P!DuHieY1Ys:JWHZQ7'O+S/B1QMCqN^I$[o6b:QAn""nX0P,=5!u,(!5"g'4/)bfVDmEb]% + OLoHI9!J9Egos6b=NIFjF>FZ4QGcd&R.08u+dQ[BI\5j=^CM@,88!*PR%1^;(>q!#`O:,JT + $R[bsfo(aoPQ@DJ8u#,?rLe#AOTOLZTRfa?76qb\hi6#O;&DHf\+f[$r&,t;muQ\"jr/(2B + g5JA7q`5"1J)n3Hu2,DZ76nR%R%7b\ec[TC#%"_'].s&71)7cIR\mQJh)[X=89F,R3aP;e> + _sO%k03p??cga!LX0V"G:9ajeQFl"oS)_50kQ+r"!rTb8SAI>>/U)T&qE0ooHC#Q'Yp8[Cj + uQ';:EH.O?,N0ZV?Ou:89EDopSGMRDEKXQ4&'i3f6't9)8,9.o%+lG5H@Djn'Es&I#YSq1' + jF$S,fsiE?c-YgS#,LWV_Unf/+c.EYnXs$ljQn40/M$[E+K4TQOp,DH@bqjuSiT%.70MdQ^ + PA?M"Y([W?1/*3RZciGa1Q!Pfl3!)M9Oi!6_!RhIF.gZ+b'bM%V6g47A,+P&Jm/i]s34bLO + 5=%gpQq8/HRcc4AZ's!7_2r&LH%#HmEMf(I00:oeb^qcAq)WsX9UtptY-39>k/(4opga#$S + eD4!1qdr1TMXSiLe)Wk/1:7K.#M)VKg>f+r&\>TV7kd7gfKl"ZS)pSqkQ0L>Xh_"!&@"+[f + [A"HQB7h(_foBHYts'R$q#1pj,US=Fks?UgpYhik0MjC$]Mb'EsSMJ&=)Fd7(Oi$n`/:QW*QJKZ.mGVZ91]S/-"NEC7R+R=kIU6 + #)V?83=W7cQ,ro):n9OVf?r)))7k/sR5aLrj]&@-O(Ak)NTN??"#W9G^NZ;EfVSTbcjF)DI + bE7AUs&OCYs)Te^`1,B(`22R&aS;[pY0n2e?.YnSaElS>oqgU033Pq,dNYg&7_ee_M0p@)P + )&hfEAE9@7J0h[Xe9J_#-<5i>:R+ujL+d'lWnsNak?SRtnB(MGGp4#B%d:i0@>rJ`]QAB+#6@5@J(&BJ1klNi@HUVIZUDdZgm&RIfH%toD[aM0TiUI5S1:U$pu_u2\&3ZoKNmT.)GQh*0DtJ'GiK$7i":AC7PD?Kp63+RF/:G*$PUhV", + Q3`.$(Bl^N(Q[dC*mq(RNXQ?>ctU$RUVERGhAR8UDX?'CH#ZIoW.n9bd@1AK6P&p#dU1`[6 + .*igB@MR6-ZP5;s!/3sWa-kGps>s:?IiU];Te.K_f6AEA:@8Sb9%7UcUEqgm`'U./e5"%gm + )4!bZ2\Auqofl8P2&/VZ<3@0BG.#ZWJ?Q=r:T$_B>h+qpg[3 + hZ)I-G(n`=[,tgF&O-m`XC-a]gE5WpAe!>>5:V5Zg`-@pD(_h<"KY@(r4%j&Hr6??o8/q:k + 8-D'f7ekHs\h_pO6JYoq+.h7s&idi2.P*>2_6QM2!W0[N9AH-T3>#a0L!bN(>An6BS(C3`; + 6>O`[iVcj.\QPU]0=5.Z-T(;MRp*qWKWdfYmNNkoKSW + ;FZ+-t#MNj:g^u9_5@!j*=>alg5/%Wq+^W/=m&2'6V\SNGs0cdVG2KfI2K_ks.(+>-=;DX.@p'RG\F4B@D5-X803d0)^,ZklKj5UA2pPd>4jsM4=)Hi>hKQ*jc + Lj>%=4VN-F$bA".q.n2*\qH[X0Dm$FfWbW78_d1SeRf\C.I`RN?.R23\X+X!*q53gro4Gp3 + NS>g\4ArBYnD7(j5=MNP)j>-^k(^ThX5dj.e.$5XV@T,RpKflWPB]TmIjj;h0tf$TE$I + V%3rqVm#7=9Rq1o3?b=9saJe1BX5r^9J)kjGn-I'1R!_f\P'!rn1dbnk<'RHP+DUm5nI1]DR_#q7#"Xe7GSd+;=UpnYj+'N]G$/,* + \a6I+U]YU(\OD4qRt8-/3S6UIU[&2Ze^$J*fdBXJYO'P,EZp?`'8F*X"Il;O2: + ;b!`BS<^5q'WbD;Z=.RWV!!J;_b#+_jn(R#%o%#l)L10e1rsc;.FQ.gm1QDc8#[4MV(^N*2 + I:3#8J:ub&L;fh%K$->$_1^,Zsk/Xn[Sn4KFQKk^^d+nAQjtjhbR[LS0u*9:6Xq=VmQ6K)N + aNn"\B^JJZaueFV>@1">nah^(J15LKe2!`A94V+(9RjZ5,pO5oMa3AK,rk7e0Lu$R]RfFX` + UD,*oaHR,`#QVP\-/ab(nF[asg&Qr]g3.S>1%h&Jmj<>!_b4*ba]otN9gnY8CZcHY#0">r1OPm^$=)AJcPtd*s@ZnT-0[ZF<$Oi;;!>Ae3#Q="!-(\.R0P)&L7C + $2`sgKGA,t%?)$S>PK$'oPYC + a`l^9Y6&1\mNZ"GDC/mqR3H-TW[U"l)&VO`Yc`6;JUt$-IgfSaX!4:&nPASP(Xfb:Ea!;[Y + k;/kn-;h3RUpZN/cCqFta@/GWHEBWu[=V + .l"rYCL"3SoIQq4WGps2*9]_H&W;g5#+EsGj86%lT4LGX6Y_oii29C4:=d0GX$\JnNXD.L> + fo]@1R>pH7@mO=P`Z=VdYRo*dHT%+aW@DSU=:l>h7Dn:Il2!dUD0V"?V"@CM6Tdb:Y?,T3*c2rGb_T8bM+-eg.a4YcqD7C_^p/2A*a`rGda:S)(_$sjHF + _bN1WqU]*\,$%.BIH#s)trdY"uA\VMasPDIdk8KY1CLGV5F"5#;KD7'tQu(l0:25iZ(IF+h + _*>a[LsfX2f0bi@:--8A]^_Ruq8J1T_R)lJ2hNZA!QL'9aPP^_0UHZLO<^2Ki^n:tr(0\>'0]:0!mQm&m?")gnQLp(pCcD8@bSIBde7r + U\il\09G)]cl_=hqi)(a(W(BUu2'a[F8AL:,+-6eK)ril9&@O^5(>;+(L2XrE]IhTAM'tT! + GGOX;V$ohDZh*VV%QIpUls[]`K;O$,>`lKo!eL%dC!=lc>VILp8Vk)O,h3\U10*+_q_U2RX + GR%EcM>9-j]$#cqNr3K\#+j-r6V%)C8?^%8BX_r.LF%C)D^ZssOoK7(C;&@`q:1uo6'Ms2] + )L9Z+B6)5F.HgRsY"[UOZW)sbMnot201acZOWsBcLYTL$r_S9U&RU^ICOVkF7@`"7_L9^b! + S,P2%3WMQ"Q6X3Gj7&&@+X^eE_E.'C0HmB>.R,UC]o^)aTMM?IBc&73R94G`oG^094I$TjZ + jX%GX$X_Q'1!kKZtm$496WZp9<#6k^3i2MU_l1p)*YDt7&3GZ6l[DUCk*L"J1OHG1f)!@"9 + ;t0]aD#pfF^P?*s#%X+,e7F!)gdeBe/aIR^h7N'J).q9gmV87H@6p0E];p"i_-`,]PMh"7V + 6?2hFZ.W/*^Od1lppA\t3XLC%od]Lt`4Cld(00PitTgheYH6*SP=YhM]-`'h4R7Oci+/c8. + !@o>:-;o`:]7L6`Jh/TrB,*.O^e80CUX9["l_eR#CS:_AQbrK4u$=1 + G;"k)bVufi>is/*gnj:-EMaF<"U_ptKV\:-]q,@sjWZEa/#`[c40q&4)-EjIq'VA>a.KnuLA>O=0sf!G`lqu + 6NKfaE1^=BJa9.p-"2cAtJj-^?.Rp-'QkB9c]YPl[HVfWj2]@1J&Fp/Ha?g"I>gC"N:S.cqZrU=9U-IMjp.\\=3^PMN8qZ)) + ;#IH7k);F,QEX39::j0VAm0`/8X4"Pf&koZSsc/2K:98LZ!Gq5PI*d*Mh@:Mfc\g-H?sg6V + j3_lFn#nSfMJ-cbb9:3_66r>h!tl9P3.^(i%EeEoXTEk><>WMC7jF;@c[R*Rk+7u]3ar>pj + 'I*O-t-Qsh-aM]@:dSRb.SZ1;j=FJ6n^f*(/)N`jS0a]q6hUE9+e0/NC3+9[c@_]]gUdLS+ + &8@&N)M_2JSe9Z%fR?_C`u:ZCMg6!@I7)L1:l9ro(d19u"#J"\3Ma2+28G8J@!aB)W!D]QT + n4oEoVE/s*u>(h9d)l&M2<(;E#POM#Ln6\[7o,E$dt6s;PXlT8nq8B'0Al%;WP+2oQ<,NB; + i3m`07i7d/ZsZ2$_:(T@I5(Z)A;3:I:c2+7XnXd6Jrl-ItV(_p%*FatTD#+'7!@fB%H"TrK + 3^r=XNO'EqtOjSqaVbTFN'#K44*m>'>BJ(Tn^-P_40V-]Rrnbp4b + hohR+!dT't)P'pe;D2o18A\.PHZo+3t*GEJ='?<7NYlmKZCU^F*RjGac7t_c6&H3P'*tjF2 + RY?q;[7-"C>e]K)cRBerEZ'Zcj]P!i;I* + /K<6P'mjF!8u"^fTM'f'kEWOUg=$D);Gg>(8S%d\kZDGjA,#@a$fG]FRiZt:"giWf(I+D<2 + 22b`PV.$O/1Mjc + hrXNXOO`0#$U4A?Sb_0Wl$)Nh;'(BQm.S_FS/1^E!=*UoX4FI&/e?iW:hT(FBGPq(XB+5BQ + X7l,ZujRC)mn^btSU1MHm:%f#1\4c??_P#bBo>I_=VAGcU4_pCAi&Y6Jfg]cQ"?<;-SO8Vr + JQP.n.m;?@rU=69$==dV?S&DdJS@m^[TmsJ6#Ig!'a[c28L:M + bB8[1$#:T+Q5X&!N9O81>M[ZiV`@)3sg3!nTY-P^o:N]IHR>7.cm&pk`YYnn1_!6#cZ.kEQfjr`/ + t80)jsda`)A4%`ZBFPg'(jUp,(Kehb'aCDV7R).T79>och-0W + ]E#C+!!B!Z'i[6BD?]-^B]bR$*KDXGi?#P&;s)SAO-UfG\S[Rm'Hf@J7PnUf*cRFtgT)lkR + lPeQM]YaVN8oGSR49Rb8+(:>qfqPe` + D4S7%ushd,1`M'/BcOkiRohp5eGBOQdH?_lRSbeC#AdO3r'f^g&!1>Z1XBR(Wb2BqdHbBF* + k=G3Oek6M+b46WjKLVG+n#9d(NHUhWd[O_Rpnl=QpYG,OV[W9T\JlDCTH[]A]5XQnB=lK58 + 7p93cdYj3(0lR&q'2RD^=[-Lc#lXmTk7Zt3j*GINiQTP'VF9a(#lpC85(MR>l#/>\6@KmO$r]2WO3k9Y[ksUZo.h<< + e,p`0RY2795tGC[ZeFdV6'/!*5S+-L>Oc$RB_/P_9,WAJQ4[jpS6e>@usbG5(H[q!XOEn## + sM[eoO5r9r58n)jW"RoIrn7MspG6dVm#jrK%4gsLB8Z,hj>%%U + k!h>0;2XnBiS,eC,7M#aaffF*dd"&kGlnUCb95k:ceaU,I,OYsCNsT`e1^3BYMg='WX6aZU + +4tOXD#7OOke1gSRVagrkTPTG<:s3D+ + >rGhr!kJ&0VlF_-c>B2\XE_b&`%b$*>e;kt1nqg]DRmk7ABgb,(?TocC9ul-uFrV#HifkB( + \@7X?e/+VY\Sm)p2hUlqK_SW&ph,9r7u*,;1WapIW**SL04MfSm7$YBJ1P&6f42YK'"n]`8 + ;8/+c\QgqLA=o9q.H#hGF/,\R/*):q59\W\"!36SGCd-q<+@FpRh9eT_]IuqBr$62l$4>V# + "/hqIc]$J!:^:AO7g"k8p2f,TUt@:u9faGie=92B;/IRj<'6'VR1HO/NQ'Vg5%Z$mLP/p4G + Ha+P:UNnfWa*!(Lf;SS]`#K23hK+"-g1^hn"8[8k6@^*\46_0=u5=/`/eS^ibH%Rj>MI&G- + b\'+]ibl$);r9)7;hdCti'&M0S>Qde"0EIK`?%"rdI3`-*ekPNVd%km2rMSBJ\(gl%h#5j\ + rTE&9pYYrTi;OPOr[6_)2rjm-jSi6Brb(BmGN\s\kl-q5rho&\\*J#4_3QF;F;KscBEEThe + 9sjgIh2#Ckk!44!9rHKUF]uIj[p?2iCj'#GVUo[n$>r0lY]fXR^B + J##-\KkO_2rIR#Jq%2(p4b\$nOBU!YdK%!^QB?-H$#Q6rl^3&dJ_3&PO>NULjio8>G2P65_ + H@-sDgmWC\"nQ\fG0'hArGKd"O#.V>,!PQ=X?`G#b$p):!?raV%R@-V=_DR&;D + @Q?T+g#UI''Bnfra=_\)jUd/[Q#-Frl)U>aml^I7G4DYrBn$2537a*@L)!G>7dQm-!Ck8r, + T'!7pCS'a@DO[X:mua0\+q"5Re\UUA%h5aYgeS[(nXOM_JY:[rh*7$Leo:584c + h&4g7FCau029pg*D]\copYUc_easlA2!Y.B5AT4'Bi3Wi>-1u6SQ:j%*!0%5V;#M5"i=)X? + pmBkDk"P$eOnhD]VFG"\5s9bQcJXn**%F\U-KcKB2kmcboDS5L9N:!^P+!1\#pdYO22H&A0 + e.Y#trsaVcl_Iddc:ZG^"kOcqI!8D+t-Uj.rn,S>W)9eE^"KM`(288(RlU*XuB"X*pr+4-! + l%cP//`dB3On>o^.d8p_7KJA3Xc5K&PD%5I@lkN)p.m9hY.Kku%Ca"*K/3nrd!CFs2k"#fL + 1DmJ-)UM;M5jPPV0FK)AGBr.t4iPf!(ZG!K.IcUC6\ru)j$[U@;6DfHf\IM,KQ3#Lc8nHtm + 2b6*H&khj5"F9(+63QUOAZQT86HBFj@"idZ'%RG+]9^6J;04QZ:ZHoU(-2$D0XuA\#ko8EB + kG&D?t8/2o%Ve6-)ui6+U)&M-MI*KT;1HW^TDL`%D6^\P!%!?8%[50?UW^?OrQR5)'(6Qm: + r&$mCD!R5c1XA+YXcMUD.="=ctdWM"R64.G[)KJI@( + O/ds$#1mFFGGtQ1fGgFf]^/sOaTM7+\%I+@YW'q#d<%`o%g)WQ#h%?AWFDT?(YVkX]4DI2s + Y_?gS%4MB%MTBbW-t%< + *G8Yl:":D3a('.sEG(G$-@T9I5#'8ZCGMMlL62c>=Jh")_'$`\,"T$b,m9qZ]L- + HFpr:,e5a@0Fd9q,J1B'Ub4kas$)Mf+IkH8N*-2KchES!EQ\2Rnt$T[/ES5-A3pbXebt?\? + sA-m6LR;#!H@gAi/R:fCl&cO0di&7ElEh#qhM)E7B:'gmG$7o7!3kY]["o.^-^foJU9h&W9 + _L66jdQST.H/2afQ\"e&`5"%ZKm=Jik"aZ4>W8eb?JDMDE:GiuErEL^-J@a<'@!cZp'7RkEMRJ`G%2&C^&@3*LN0Ag`6*H,P*;+3J'lZ9f(Q7Q<@mZ'GK\ + L+5`eR&`[LY8u[$LQV.$>3HL#/\7mH$JhHM_2@X>,W#dF$6G7TK**6=;4Nqq6-AR]d9_&dn + BLYtRrpB4ETHfE6.a\2A6KCa1NDd-[,0j&5>IiW?hR'A2UgZN5-k<2PRF$93o>>BXNp\ii. + H5'%p[Gadhg.5*C#S\dt*AOomiQ(N/Nsfr$VoJZ!c^gHt31X]7#/Gl0ZCOrdFhEs6p$h0E` + P0]O,Oj*MLXW.L[9A&8D5V&PsV-i5U%UQn62J%$3/NDX&!p0H0Er*7-s(V=mR/#18KRR&th + )lu&4BEg^]2[#BC$0M;U\LA:#?g!6DI%]]ecB)1b5qG+QsNkYg\Ldb+FT$*/kDU@1#MUtQN + +/SDr_=[bYnt:^=c(PcHi3^E(rWY'he&6@Z6$0C$WH6D?gkr-GTek(E_&)j>r0Zrt*mbs+3%Er;bltZc!K*AB3kmrC19ofku-n91PaQNQ28- + KX#0I'%jaq(02CoH[DXV6gj-SUS(Y0P6%]+jWR^qogV+nYs=be!mo!W`uCEHMY@7gm+A`+3 + u(@U-N.W#MZsN,0*9hAX&TeCk + D%!S\`*jZ1,^B$f_CJIm+Asp=1,U:cD]k0O4e\Vr.:*)P*/M + >\F@;Ws3Ekg+e3Y[o.YpDslc*`&*edE*HUU>#%HgFg;iOkh,+P0;1]m4sp@D:$MQneX'_Xa + q8)!4a8I7Rh("HN>2ZE":Ie)_*Vf/Fq1/d\abk!ZFo7'PiR3Z*4Z=Xk)Z\-.1LKQT*Q8h]d*,NN1hdW[bDaZQoRne1L3Z<8J=m5?^pV + /p5T-GkPeXZYf72j"t:dg%6VK+`7m#*XrM1QNq]SMBK/1,+JJn;02HSI'?n5tU)u,$-j8:G + alA$o>btZc>BH3CC/9bYutRE`G9%#`8+HZq[+p/J`:ZcXh@7s4gm5@qJ + C_Q%>PlP:#]eD1i0Tjs@obR)IbqYI13?dbk;#'D4g0,?VA3dT) + DpEueDAE?=V%9pP/$Q)R(#!b0]d>B7>UPVH1fR8t(2@J1jFIlZ0g=>W-G42MFSC + -VDrC=&q+YQ8`JecXYI39K#=Q(7<0d9ej"p?^$mbe9=jbVTT`f82e%MG&^(HFYm,68TjE:2 + UuYbqe3Dg9(nBWiH71rjhkJTS;b5dmq?ARq:)pIEO3gp1o-ZAUAR1He*[r + Qj&"X*IO/)?$FP-=9p*PeTj%EE1*Y?KHaUP6pcF.R8BJ@ND + ARePGXm=kpK2NKKW1f"Fn^?/!HiOYE0t$bGW1C%?\A'sB:!OW(jUp^LnD1QB_YMYQqN-ul# + \i4Lo84H=&3c.ZZ%h3Fh")pR!4H4,DXlf@@3[FR)P"t#Di-eDE&Ah314LtgPgpTMH&&N2*" + 0+&NUcaHoSTqiY@C&c\r\aO')LF-7b&,0mrbiNH[['3AeH"hpk".AteRc:<5Ga"A[I^;go2mtr)\(P[;3 + L^/(R5c^Wkoo5cqdKUGK#[md$%_SOS9[ + o,6mJJSQ)#8_Af>2GRS/]F:N>%)V`KBm\lk"Q&"gCbTD+J<=-]P,JjNqV@k1aY'9-Pt.A6L + eI_$2F)Ob;jJ:d1'#nnmo\&g^> + Xf$Kd-*t!Z(3=hiJ!R\1YF?,[HI\bb=/aj1GkL6ZRE;]Yc`Ze6Y;t@CK?LINh5n/fZWf_R3 + u!Rs1@RNORStVA]]Mib>ob/%F:J]1fW5WTgJRD=P]ZCQ&Jq8^)RBo2V5[3fO"HSQs/O$fU]h + u'HrtG&KCn@gaXM\$]CMc^RR7$2MJu9?*W(t5<6W<\J<%L/].#5_`C6*Jfhn?Zbu]P`qIO@L7##rgKhkTB=q.&]X:7Q3A8D-REDs0a&n,;S0u5pX2WH?` + Z"To_@=MPTurnEbk:GJ(jX;0=3Ud]bL"qd(idg;$-\cpbhVI/21<_OF3U2,cU&#b&D,35!$ + M4,Ln+"^]bO?`q1]mfZ@*K1r<3X9$.:sILj]rb4Z,m')kWVeW;H+a4B9`+$ds!`d_-IFpj( + =O2q>9he%.9PgT/:4J"Tu5clGgd]i!0_)Qm^83&n + >Q'/@Qa/<4g:kl5Fu4np\I+O5&=2*DD!"#"s6`M,0X9g^0Eg?V>O&'r5ZSKKBN+2Xnk95+: + jhQnd,5I5N*0@<%]$tLI:#SBClf2qhm_306kt"3;&=q,SCo`NTDIJ`u`X+]OEGhMEb\d(mI + @$24I>'':IA05$p`(=k%Wp4\.6.W>; + &>T7k6AL#Y*%nGWU!QR*)>+(\_Z^@GAb[Jo59QAQZcioL^RNEesLSo('i/]htqil;2H7<_W + Ce:n,^!!)c.c`CV]3YWbXn4ll,mDY7(&iVC@Z<_4liBnGSp)iR8<'k8Zgs*!Z%.!?5Xp;[/ + _h'O#Rsmg8"l,UlVnM^EA\EudbgdNo=A7u>h@*0MRK'?)[35`:ZVtoRfcA,1+KZ[7"eMCq((8OMn^8$a:bd#HQ5"^(SWZLAK=UAQr59lsh#K1 + 'J%233n,L/."*4o/%f#KBkX#1^<&M@lMXo;II3lHeS/+00@>H]J_pRCKgGKCuZFo5tL)IY$ + d.M!j7&1km:+Xo'7#ID6nFlpOW>5]Pf=GoY#0YhY=fs"]os+m39o"?u[/!AROXI&n,3[rYf + ,%jk_5=)#0f&Mb4Kg17$)RbjM[,=TeCA*HPae"I_>:S!=jOAeJQ[R%]OQk&/+-2]WQbJ@$O + ,V?*<%lr#,-k4)TNUDXt>?"IH@qo2oUjn>I%R8R;3.V&e82M+8no#-JX'+Dta)ckd*Ao.<0 + Oejoq@?Zoo1-rgg9JW?lPTpKpJ\=iXif9h6C20?=WbSQ;^$tqe)+gHBW]a"WX*Wd9Y,f/)] + s"L6"2seYk;o\F$t9IsJL^X)!'j2p5ER^7IUr_HMdp4bBpqXuFl.hp`E+cQ* + ]aBIAB_$>1F?q`RI`cbQZK93DS.[)k@=s$MmX@Z;E[Qr&9/`TaZ3ujkFE9`F\]Q'OYTqS]X + ,[rf&FaT+\H:po1M1/4:bi&@0e[bBOUJeg*j4:pmG@nkd + Tc)uF?4V-tt'4#0eqNgZ'c9s1a@1hA]S8e9Z+- + /J(Zoc)@;-e-^h)WZ=L+[uEi@&pfJ4S]=2)+JtZlSoT^Fb:7-YWh-=;VNfT'`s$5uQ-=>OZ + .WO*Ko8ZiI!f(W^_n]tAf"L3[N1V?Vc<5,,1cCG>Z*_+8JTc$ilt<#M;h2ke'TNaKV!KfJa + ,_9]"=@K93Fmn9@ipo,,\h$&!b[`L?e7ICX@g>O.]X9P`PJ<7'P"73^,eG_<+iT0cYK<]5=H@$(4r + 'K7dl^g/V()U[0a1`&)o0%%i+rf>'J7lW#@9CE'X3'$)4XEF`IB(5S#ZTur9+H$8 + [Y_$t$F:1Ld@DJ'KNGV + 3aN`1bqa3:nS)mNOQ,rN,Is(j1jK$+@XR1#;(2eh`m6L]QONrEV8dHXc;%kaTS\=:h^aMk; + 8)hOheqF&$?c(DeE!0^eFM@oIX_Y.HedSHOP6a3qJZt+d(D85Uf\rio;WKGPfiqIpi]=%-E + BD+>>?c"[$sn4aM<_0T]!@qXcaV66`?"3BrLQ-u.dX[5]?0t+DfDPe<'L$bJcC3+XoUXfR* + S1bZ&t_2i_GTS-6B,e.P+"e]PcHf%=D46=&A]D`$+6T8bO:,QaW:m$)]$sB2riN.SNta@r8 + XUf\S5;*4_A($irGZ"TED5_c>W[G>SL;ZlY_F7/J>8Pd:u:J=I6nr_KGV3ct:S\&7r=bS_n + sM1l`U`OdirE&jG`-fR=9-R`:>[Z/6u4aeaiAD5boPO"_:(pFH$^lbAoj,VgL?ppd=U&@3hsb6#D[&,KCOjACb?,gn>aCF`I9bZDAbCD0qROI];$=rO">5kat7sYFmghQj + 33.;>P3O\f)pM1'`F,3p6EVe$>8"mZXNjhQDC%YK$\5X%U!Joa/e`jBGH(iT\#Q-&c71TQ)5@Z)/=?9td2Y]oX[oZnMM30`hb=!q\9*(d5IA+IR5YP + >RI(aIS.&[18LB7B?Q)MBV_TfrQ9bZ,2rl$&I&o@3qCVn\ + C&:'dtCs\/7WT'u\`L`9Vk(YX#-jl5>FqVl;.!@%)n5PnF+[T6W:1ikI[%5WPV6!Vd\S]6o + 3m;Rc-[PrW7iOf=AX,DefVVpLergdW7@U7:aU,+D[YWqiC#qPr=]YIkMgHap%Q0r\V;WH'e + oJi'Hjcpk*W%3-7to4,VK_+,oD_:h,^HOZuQ66nC28#XAC/',0S,f(II0a&i($dB`NcD:o] + 8*I+4$(I5(=W)77XPD!=,J>PojMjY4+8?3$_*e'ZsMi8n];=Hi + sMuDi]d1NuRBs3K_#ERYcj-'7onD+`3q^#JOk28:VIK3#,([:4bG[bA:K3ED2d@_%@P75NJ + E#KF^Oo&4VTj7\mYqZtll3'ZSoC`q1%e$l@+b`>nZnUPljcgBX_D#c[\-WXQk&FE]F_Gd`i + _9YA[Y"FM]"'.UU..a&Q"oZsX=J"D#3V#/J39[np_[1IU2)ek-l];I]:ecOWp!K>nM%,Je\ + NAm86+7WJI@'g6VTa;V^aABn]/EeKtqE7Y)cE#Ru]M3r^Uk2!1Xg3YZH'T"8;\8#l9o;>qM + fpJID5B;/'r'!g<9f(6*`&.Ac`(u;r;8U#3\qU@W*;B8]sG.*[Gj#_:C%WOJL/*inf$QV9OE1gH@ + U0+WF_('';0Z!?r2DiN67*!%`2/BMLr-51fCtkPo3B>AGn.9s0W`SS!(WJ5^h5c$9:s,&j`n + 9e(^pJ9@)XW5?""FfhT**>80b6=OdA=M'tq$L"F\=&BY4h8Q;?L8goZJ$`;s1,9B?3Ya][!^_aKa1i?og((T=!f;"_2clT0eo4,`c!5<=g]Q$U>M? + _ole4uT>:p$4Q;M*o:k./,$40%F[&Rf<.a=7\]`Vs>Q17_bE$A@he:\E;)IX;C+Y\m8Pt"3 + gN(p+kh%Ep\lC@7?7a#)Wj'Kb&?cNoKbZ1agN#PHd*)SSs4@C:(?1Q1PZ94B"]VO%aM@/*B + EnbAOhV"$SEV:erX/suKcf4CH"m*81Do1I2Pj*;BdNGV)FpNug$%RmO_$m6@WMNenqWuL4_g!6W+nPhnFo:p-qqY)cC7('++&e)*Y.Wr]d6=-!T,g>4G + p(/kt"dO*cjL\[InCQA\YX-`HAHOgLJ7^eabpf[N_oXSBc:3<@Vc!q];&l*RiXGe#?m/4pa + m\Tiq(#IPMQ/+ifkM"nHJ^Fb:[O,Kuioa6;bYnRLBXompXGl=*,)&]t5&mJ503WBf:l.fb$ + \A]u4:ag&uR0,(U:Z5^sPBJQ?P;8`.$P##@*]2&>'r`PIRf<]kM%]^ofS5 + h:V6m$mJ-S[2\3cQ-&Ff'\OO[>>d3\&dN3:ZF,]g4e^(9Wk2c-&aHPN;8%cQ:"!R@Y2H&_) + N#ED4=)dR$!4XVW8Y@7?8tL!ljC<*E(/;=ZsC_+Gc$hafJb@d?ZbXP@Ag3%7@YTr\"je-u- + OFNC2Q*;X;;l!Qal5R73b%?3e'Y'2c6uL>qVT?1(JK'r(.P**ge";:f(P5+-9'^j@C#UMe_ + dCd*;J^BSLd-'Y0Z7`IE(I:(kQNc9o!Cp!?W[:Nk,f/@Fd?Zg#9%h:^>crRh(nOcH6fm5B+ + J6QVU?g[-H]7H3hlaYE'/B[N)nl)18l,[nX:jCM_ZN?EL8R:e_M6P47Ah=irM<2P`KX1fnBVk + Mb_orq/Bd]]gnoW;SQC.)U!-r$jkcD)NYCaa^kr72j&(qA[Zg&S%mK^13#5(r?5Hc3maka1 + 0UAW9R(f$5h-2Q[FT80t'99pNPhdkLe;=7m[?\%1,rjA:#B:VjGa4t$\FL:J8[jg"AM1N8a + ^kb./nn,@*g&[2MZ6IFk6Q=s8+dn%S<_!R2M-g,/P!"3&r+C/kN3e6$OMr@A"9Z`T0iV]BP`''9IL:2k&V=n.Y + [->3k*%X,R(?:I,2^8rW*,m<+ZI+H]m: + $##P9nLpURH:90G9;YQ.FS?55O&K*0;K['2Alsg + a=(9?RD2$)AW468o`3lE"CF*1Qp@:Abd;q_38+V + Zm%:eF@2]?:(!CG30CI_/=d9Ue0hm3mgA`A$s>EGC/0G#D^:YS3MDNpY4`Xp%CM]c4>N]jG + `pP^;H#I6hQffk7&q5/7H=aKF%-6co_mC_,+AS#,ppW6O8]+R"Ym!:q/XsM6PY0%[E.O\Ic + U)*(^d?clq>+(aP&B0ZCkm?i`__ChPH@`,'D!SWV]%*ll\+JKW$.8ZR-*nOI5$cQ!P%Ye(eWZ&f,+##T?W((r0LJJ:bVnaAN^lRS'3R8_lD + @Du/rI6a.+)0\E@7PU`-Z,Z%U7\4^Ke9i?;S'^aKXr70u[&5c@h%k,.1JkB0q?0(t=2E$.#8Z6c#Aeh)B;kgL:UoE;cd8XG2:9Hd'DBV9!1b.A'26sPO/Hb7\(7PbnX4=e<2 + kLpc)E0M&9@:L6*6u,YhIK$%,ueedDsf\OA"Q=6%j]qRr<\iO(XJ[4'([Ur"Go,RrFP.@Ab + brb6T=b%odX2O&W'R0Q*#3bT94mFio8U;5Z^`7$!4/I0\q3SV4?F1i + T<[^MlnL^*_t44!O7WH:cWUb*!B:ujbN6sKs6n + jO-ih)7u+7*RJ\;:Km2o3C05^IY5tN`'8j=GnMXZ?S5ThX[XEY]IL-@D>J,$un$rdmV_E:" + +jkVmn+JbM]6%[B6(*2L=dk3u20jA(jBfOej)tRoXl61n"#YdiF<[J5au%7*8K)hoVUYNRe + -#[oUI?/q(RNi$&(dhrm(LbGc,r'GaG"jLYe.AW$fsYuBnuG\S5b/hn-b_f/G'`Pa!U\0N< + WUZOHZATYW,2$VZ9nL?t(WtfdF[Y.$E(JpW9_NEFWc1pQ@Ye>H8i2I.$N&>1BW%\I$F6ert.](FqtF=(N@#rZ6ZTW`VQnT64t[_0[Q%NFB&fj>YISLcI/BG:GnoU$`J3.^4a.1N + 7"4R5!_)7;,V[Hct0Gh':*]7H-nZc<9oZ:>o.#3I6d1eVm_63Hd@Q?5,[36T;F!`EaX+,_eST)[WOpB;-!K,ip1,ETCQLU@_oRdAf,q,V^sp=_0/GTf$oZL!c + ^7S0Ik;;I,\!9MX7Z4+q#0O^l%dm6#X<'1=d6ACXe_/Pq:kbfiJJP+0fp8#@[ + +Y[Tq#Kk%7B]i"A^cU6H6O*In1)6t?^TS&i[7CJ[F>+J0pM&K#LXg\u=knU^0>Ci_::mo-< + MWgX7Y(Z-rQ&]"jm*uu6I(m21`;P=MbST + ^PluKi*Q(F:G50>CM-@"u,QI]jjt:M9Kf&/<[`?`Ti4'6TO,16O$T/AQ=;t5Ut]TPB2nX'r'A\%%O,q$a*f<3L`0Hm:&GKkoh? + GVb\rYP#Re4@b0;%,r%jLa%"A1)*='fm`^a=VD>1eh0s\; + \;u"))rVl0h%CqQmuXI+]aUu"d5n+4r(rRN,gbO(U1T%*ZJg`nQdJ07HP=!H@[%S(*l + CUHK!oPIl_l"d*DB`%U?tqR1C4@1AUZoR.-)+f(U'"r.quPF`93;giAeDXO$,k1\t77!Ca: + T@^as&]aJe"E.VE<)9IXQ$p*WuVNRQbWHKc?&%O4oq'&I#:jB + q'e$Pr>g?#aC6@&J7s;Ea:!9/n)$JZh+Q.+=]stO0lJ:fCNNqN]889/5GO2A`#Z>D4 + 8a/M"V&lCJj5iT'k8ogn8Qdr2$_P+&M)&9(X%H!hB]59)!%icfN<=Ups= + eeEAJ>ON2aX+EUYfi\NV1K+g5B(+O]D,XV0V6XRl6LC8bk#[Z$#bO-2qMHT:Aa+&9+Ct!)% + o[#^jR]>$d/^SO_V*rHEX`(oGnD55___A%*:][4]q3ODW@;*'5WrPmq: + P^6bcMR_6NU5`(Z4](uE)@@O^XTBLmft:7oJ=bc+!>Kpr';d-=?:%.1KSME%]Z^koqB<[]S + S+f;7#@X6tYi[Pj?9$H%+o'3:&Rtj=X`\N$=JeG!NSrdCl_R@4XZ<=%[Lrq7fE-=nCnG5p? + bUqltV:(urHm(iY5S.Bu7@&djNg_S6G\2Da7;@Sdnqp/M%Ig[78q^NIQ<:.<9'Q8J`N2L!N + +49cIg,7t8/Q4,P#`n0.$06[Y%VO#dgjSc2PWMkBu&\Xp0OSeM$4Z@WG%Mcg7,o(^.,-#OV + \Ul)@"+Sl:=H"0K)f^,4]R\nuWPqm2#:F)Rg9-'Ec#>iUC\2f(NM9BWOsiqdpL_!7j8%C.24C(/JQe-8ph,Alc3B^I@GI,AP*4S13 + WMBncI9YVp.b!`ZBH$'Om(+PN=k";V3'k)!bDir^E=IYOM)"7m0\;\q0?h?<1s$71(A.\@? + Pim=^jnquqa9(qjR5:=oD-uh`kXX_cf9%-EKOcNQYcau"I>*9J0p.\Gk9/tJ.>X:)i(X#A# + NGSA_;YZGm3!fI"i9GEHP.$3pf[DuC1R9G/U6uUlq[oq,;6]q[Zt\OBBCXdZ!.R(me-(sLC + EP&g5TMt;'0O4_l30e*0K*;FcFZTHY"db4A^W^Mb#0_I2Q+cmXnO%!#V>.'+XJIJAQDn[## + qGf,c[m3#]N#F[WEcoRV^-#VFWVDN*5?95Qo%+7II`VVI&ch"tfEmbO/r7CIGs,70#\D5[d + *F\-M?baDtP*AX7W6,+WeB[kIFsPNn]OISk-CA'=dLZEtg/<@Nd!D(2?="d9,/C;3=mgMD4 + +0X=AKg`t)-HDU[IkDE`dYbA&+JPG^M8q^S]^8^Y`.#c;]1#sma/m?5\!(>L/^cP;GWflKK + M%O'WB0KI1\k4)(:]M)(<.XfMRt1bAUFhH7#th)JPHt98 + P^,`D\Kg;h-l25VH9*%K[aj=o]"85QP&=='Eob"spLGc05.[#sJE^B(>Fi-[qqLchdo8mW]4>Hl<,F7Bgj4R&2lsP,9S]NJP4?jVP]OIVIf= + uJj]H0MQY"i('QTL@g(=%5^7%DY"X_sND,dOP:K_VAEQeM*q8AnkZVV6T#mif9uUjaju-\& + cDH?EXqk8qjd0BZ`k;pm^J(e0C>)Z;/78^3/>HgVL,,5Dgr=:9XNmjN.C*(9FMcGs#YjAc/ + ni,KFrP1fH/etOde8mCbut)a,lhuQ"mSNGR$Ngl0Q*n%F2S-FWG^;UDZBf#^_:Q5UqamN;6 + qhEpTnu9lV+\qE4& + b1FTf0SlX^r.M-"b^FYt[O%@]BdKfWq=Ee\FNeM_;fPQR27'Ou72&m + ]<^db;+(Vt_6d/geb!c^iRUku`_TuqM6@TC9BOsPGU;Fdd,9Bf40-\\E-'h]2,!Z:d5Qe74 + W[sTP^1;p-lsdQGD=XdOoV7TC5L$ng8q*PNXQdNs-:SKZWBC+r)hHW`J^Ya:M7>(tcX`AOF + uQ<@627(,R,3Zg")]N"jfgu_#3rJu]gaRs"EnW=Zo<\J=Jqogoh=lq+j@`of\o5 + #UU?u>V9;#=[S-GDs\?D@R&-?_N\aNUX7;C*N@[+m-?^+aBilE.u40A$NY]l.m+a0?+L(>P + 4!i#n?H,hD3u37h?"pMZehDrR[6-D%Atm;TBj;K"LH-,9[_)odl/EbCE59VF,tSV7$fW + .'5&+A&1KP'eosVb0nVEo9fMkgP6;hIDj>IKRecaOP;.o;COnMqR6$U$?+5$>+E;VWJTt1i + >'6lLk\"*D6!IuS>G:#%(SonHW$Y$=D'f-r_fSWd`]6T6IgXDNR#ifmPU"1kT8:4a"Kn``q + MBgLBBRMm`K$pOXD&H`AYM"ois&1H]-Yo!T]i2lUtLZ.%SA$h#C5)p)dqOB.`=>j]8@Dr/&P*hdu61E+6T$O%f'0D(3bE7u!bYSr&8^1^/ + p!,/3B%%g-AY_sSs<6FqXSV'X=GT^X)EW@gk7=>.)a4\>EpVUB\VBIou\=Qn8J').;R=%.X + J:]NBRqN_>SRd*;rM3uAM=NhJ(cj6#hNL'0q_GP6mZZ$'5;:@65'/^GE3>:*Nppg2XR/n$Y + ;"[m;XW$1]R2$LF;\p612S.rsq&pRK8JkN)Y?M&f\MlLoR5l!2YYV*[Dm+?7M3S7tPtMdU[ + @:"eLR'%`Gk[@3f9R=VRN6UD207bJH3ta]S0'`gWT)3K/,[]9csH9KVIV#jj0>KAi,'`:>f + AZR[_.4TL3)VW2J,@La$+`YY(Gi.@k"og[%tcSGYFTu7bG)^VH7UW?+SLu*/QfC7IHZP^oY + VQ_<#cVCkj-GP%bgA;XXU/p$-k8.c&LZ/NZjIs"lG?H1K$.B1V;)g3n3e(s&3'%' + idJ[RifaWW[PIC2GnBNS?+)Aq/fJbFKpVESAlth$!0&kPP5a7O#aIhCAU(5247AWpE,ZcQa + 2mKQ5>IF=-8f8Q'U$iQPZ2sgI#3KZ;VBf+&'k1V-ZdkO>-0/<-EjFA,L3oIQu*N0P'*=H@" + _E3Z_mS`!`r@4@FL-QqQQB[r?M8AjgL9)^&qX*!nb*dif\A'nGFJ&TQ/$#>bH7H[,,P$'P$ + 9ZM]5E\A(XcMhViJNtbWl2Q?3Oc"5MRq1$)Qe9\C]")=3-&`$l*R3fqM9obnn`nkil%VL2M + e&&/n[=<*U(41kZTlS! + eEn\6Rj + 1k%UGY*kk!!f5]WlNXLq4mru37,RN:ZsGI)NCG"pf>N + +%+a;#`;HG]H;(7c&+`4L=^7^3,uJX\A@d!2rJ/WG[2C>j0C>jdq_[GLG!]jC/og9c#!qnYt_ + \6++"_22B*d?rAu4E6JhAB25Z:0fH>@HQDag\-+_U![QGRU%hD;5pY(22WDoa'_6e"L`mKY + r?WMh((FDc1\2h_;T>hY6GLX,KVY1`a$k,4Bp2co[1?Pk?ZcoiV*/>hY2N9iU/QcMGGtYcp + dU2I=\SA/)Y^K.Xm]Ga,BK`rI4d5Y0#>^Q]A$`l&2^#>3CE2BOp4`/kI6p67seb\ZmLa(0` + Mh@id?[+i$)L!q?gH&cn+K%2:4a>ZN=CU\%kk`[6p^ElP"^DW788dfb)rXsqI8)Y+K,+rBf + )G9du&;/mpM"g"=B(Ig6YSJl,`Yqj2Me!thJ1u;0FUAM)&4@ + 6>`98X1e,REcF2iIQUsMs)Cc#!W!)N7"EY_Q8ao-T_$n?qe$r!/e7CtO]aI>h0-hdhWO7=m + 7TSIg-E-ID'%XMr(hu_\&>b/?+^Yg[LojqaW*%!Io%-?Y/K;nSX=rX\7+_SCMZhOtYZ3*cO + oXQ,d&^eEW0Su6qm[>;V,+B4SB++jDfq.h7m][!L4n'#I1ZK/N+O"9<;OTIXE[(4YkJAkFG + Fg-@5C+3)'_ecA0PtlI56OTg6l_0(dd(R2AjUL7=)^s&>`g10r1ZV/5o3A.Ou+`Yndr1;_[ + PXQB!D-gaTn4,D9&O#1ZB13p26iL;Q.10ILQcuChkbb-3_V[W/b-d=>`2*h)k!V9n + *ZksDUk4(kB'8.4J0Te@lCE0CVuOjn!&4%6_gaSM&Rn+@+(oK$NATp@J=B[.L\2 + bRk-03_3,f:*FcD,%RO2eM^>dgC>*?UW"(;<-43DNF9Z-WKbQFg/Wb + ;3L7+0`=n<N!SgObaZ$;=,NUb5j[Snp>D + @B;2IF^s2F(3a@9]7f;o,kRHSNNjO)]?'@RI@qp"'t,QJq^F*i?'qBEW5^5>g6jYT@-tPYb + -Cfph)0*fX\%X9sCS>3AAr)@L=Dsoo2aG376?XFUG_?c?2] + ;b&0F5W/,Q_G^&lE8^%sS@"*b-mlNC, + [6@UDjFS^8_L5o\&QDc@mpd%N/OS0Q.Lig%Hl[i4;^Mj'muhX]gAfNkH>qfB[+OOfjj>3RF + pFO$T13lbN/o59')'lKF$RV;/(Zb`OM&tM.5"&iq/_0NEo)*J=a(LEY'*L\o]Bt@_OcTP,2 + YDT>DC978H`gkQtUld=.uNqja#E5M`.[FEOki5Y)>h?r_9!Q/2`QHM%D2?%*jAk + oEAeNsM/P5M?+lBhg?k$T>4:gAm.KD*eFAUa$Hc$oF2%X"b#d`LSK_gj\/o,Cna!PZ!G[s. + Aqh_9OSdZXsOq(Tl45R_s#NV\OifU0:2kf*C7DY`qTRm\UoUp3Vo^W69Q(Yi![BQuS#j7Iu + D(2-1k^>H;oXIG?r/JM5kab]Y:t.=i1q1JqmH^=il>S4l)55Pu=gE/kEXpUMI),OMQSBf%E + t@s#!79H`u3C"%7@-[]b.#3)in2nH3q5p-E7'Nc"Lh=LgP]nO3W<&B=@Z(O>P@60/BfZiQn + DseXd\2o/bh,eo"^A1<6[jL=pS&SRR,q=S&LBBmNVI1Q",)EbO-KHSRG]K7FOEimPS,'C`c + C3oXkF,64kto:KhG_gJ26ih1e%BnN!T?t>=Rj'MNm[\k0YI7<$XT)g(QVYLqnIB)2"7;fmt + RgU8u`q>6gFE\-D'MF^4E\G@b+PC>#o(iosMaa6e^t;JJ\n!?sRo+U&)F<$Mag[KG6+48[L + R5@>D^=-2nF7]OLSeeX>:@#OZJXa6&_FUCVdD./5_5M.f$ + L3Ee;McB6MB%e;"[h?9gbbRSb:VI/4M_E+;:6mJe%G!1.9l)T<'8(F]0.r:]h4cGC#PX5S\ + s.64c5oGR\>6Dkc-=+St`%!/4d^@S3?c-WfRR[)=jC\X0Ybs`:;'c@ok/_kE&X+OE9ZYdm# + _%beCpoX)\9BJcmTc!%XeU/&DOGP.dp]$*3iL^JT#9@'r4?p]2o@$5<7C9D]60r'/S*^Znu + epkHQiO2)_u1O6&/R7S%59JDY)Q5O`_$6uh&;[!#=Y3PJDHLR0)n\k?K`$h(9ZN['q3MK,G-A,8+WU/USk\[T8G.u*uh-!"FgIU*Zc;AK_e@mg`VG)+i5_J_F,o34=.9i- + Gk#G]@4J\UVFmc!(+j]1A!2j6SPhd0f(W+]SoV+FI8(.2@%*\6[@'JCHO%+e>Z$j_n;C0"> + rR2h5RC2_ur@_>bIZbcCSQ74etNRX%U.M84lj]^#Ven"&V6,;Ecp49!kd^oMCVp;340/&7a + r9KBbY-<\q)K`Htq1P@);(@)]`e59sOL4C6#%Ak!%g7N;,`F8;]VqPNl][Y/8-i9S/J90`K + F7\\YTb1qph!=9-b#\l#^;)Y3&!2Cu=SRN0JWPk-L,d:E%LA@oD"Oss^^^4`C+3@lRX!&Vu + 1iCB7lG$7X!>iSI)Sg`[qu/o"9Id(_mZ,si_C68XVB(nsRJ.*1Bo_LSaTP + J4?0kfG?l6JF089>n^M1-B>.__a2E<:lu3c7B*f$q.NkPat1;SilY;4Tnb\<;a*+TtNf\]j + !ogCdLqEmmK-+SodCh@nSu'jNnnOZWsRR"A?\Vik@Lr:j!/(]Wj>AZGeB$`B:NH9KXgn3&@ + Z2^=67Kj'P"J>;dF0^FNg5j(,nq_S94)5ALeL,\$hMA,o;7!3Bc>C]27tECPb-`gD-CX::D + &X+tp0`0d+me,iU,E + 3[ClmiI^_`^VCCZ^nSGfr"(=9Y3I1+_GW%tK#j$r8>PE>YnbQ?U<]:oKoG>r""D*V.`/5:a + MdMZ/1s%InA>&W4BjSY,;_bN$WAo\ae\Yp]XG_I4\=s'd1oR0JsT9oU:jJn`#D0GLt'd'"1 + 4QO]t?il`E^t,NDP8d7)Mm?gJ^[t@FehF:t2d.N=RNk&Be>l4Ogh_)stB+=iIH2^DpLe1Lq + 2Z)FalL7MQn:!"DU5#L":kbVT1F$ti75BM;rN9Q_USKJaHOWN[R"&co,+iM`*K+=-OGR,QR + BQm]^()S1/A=E$E*J[mFj[oR@'T3WcM#tc.GqiJ26)VO.&1,0`5L]c*NRE-)".hR>",F3@, + Kb?*aK"[6@JtuMpc<+@ID!0;J7=YP2R+..O"HTj`^I#:XeAUgt6/'F\:X:SY1JNd(]i2&p< + 6pKJ:S^'J]iWpAXdu"cZo"O76pSFqf37+ZHF;U7e@eLbFJFU + eG+]oXf-\gfA,NPO;lD?O=:O&J`gnq*54`/H"(=D.>Xd-55=A + j[,ed>:^K3g4bRA"**+[8EA^!;^bXc&6=EI5MH,(/B_aqQdM1$)Rq]^(HPS(-U3*"XP3??S + EVPkH(Hl-0PH_"V/R^Kb6Ja8P.R`<.!VFk#'_^<5W*4b&6%&?]/>[Zih8n+Gi27-BV[FPg#iGeD0O2m+jqqedS()^i@LQTZk*QhPkfG)fj;s=HC`P,?rYu%`T8G + Kjp]Mt$n`L[6#;FGs,aIf,8(]PH!(5`aMo?sJL4$[N@b6@#GFaE$K2@'r9t*]S(Z%Sheerf + oI"":T\lf`g)TM%(^&lahH3@\-^atoAmFHK?012mfl9s,j(SP!T&=H_>HUB4Q3jmh$WU1%< + FksVG%>3Hi*cK_?(i-"KC-nD!)qgiJamIUor9LEm7?!`?VU;mGieaH/ + t/9OFDQ>`dHt#IHTaAkOsDgac&a'LB<#;;nrqb1T<)_"_Ebt_3N5AA^/E+E)D%';4]LD/i$ + Kl1L2k\>t&pB1h>jqB!#eu)n:+f!c?@+`-R,`9H%S^^tF + g'+0LSYB)j/"fY/0aJf.l.lp%J8;$nlaFFga_+k-"^+d'Ahe^EA,XH(p"L= + kmZg$PZjmC(d:MkliLJ4:]Q_6KZsDCmoX/mQqFh!GqObo'dkN*R3Y>pbS/eK.T\+DEEQ?%m + T1Q$Zf4a59QQMOCk!);Ir[AR'Q$K"cga-mUiU+HZ6PC#]i23tu")B\mGPhL:4FI3$c[+uuTYD=pY9Ytfu9lS_c/7Jk1@N&mZP\p;%4-n]KT + gi4\SnM_-KNJ*ijhB*W.li%.>*G+]_fBagkai7rZ7VHU>)=cXDlucLd'`_Gbr+r248rX"sV + ]PD0c;m'0ekT`G<"841dM`F`T,\QGT`al;/b8'Wo(Og/#;G`c/m25-_-#E)?7e45X#eG+k_ + :_RT&]%Cjl7C;dEU.fh:0j>e^=?Hm]G*sNS3-jm__mn,pH,oGX[oqS$A>%=C(>UI\(;RSXh + \rRNA*d%\`HS9o@))(GZK]Oi;lQ;8GioRH^B%0.N)-a2(PKJPhotO^=A0AT3p)E2Kp[[J3; + Kq,De=:!$VMrf9i+/9^f`CH*QBUd>V`a'_usEZ!O#8+]G+"+ls]#n=;s_*`MAX>u%;(<.M&FcX? + 'D,kuWf]!n;Xa/o-hXnWBN0rQF%-[L'EO7qZ0G4bV)#&*lTc$(cOpHB46:(t!fVfF\6m(Xh + C?GUiF\`[$BHcseH.PVeIN+NQ.HoJt@8&Y=,`VaAgr--3ZA\EYIVk*p[f%:(G;\en3kP1#P + bIu4pe^4*)ddE/ZDP'.-2XBTsm-.Rg3F8[f&d'Vkc@/$W=I:'Ep+*ujsq!O:,ck,/sj; + IpZZo\02>)/'/sH@q^]IJ;p5O^%fn3hXs7fsd`!\"muEOmp+lj_%r^G-p@aN"AS`S8NuPFF + \gqp&A[us)8o!/MEn#./JGR1]OcCAZGJ'`7iQ7Cfl3E+A*Io`XG1e"JJ-F@5]*RLasZDaJ8 + _d(Q:gn;7P\14WfbVA5YE5Q;&`k80/DP%(.<50[*!b0GN#@2_NBQZaJlefft_JBN.#=(6(h + [;JB+AAN$)QC/e/t1TaW78B8JQHa'L>&@YT-8mgYeJo8@/bQRB"O=UhC_%99T"eAJ(SHk + HWMpP*-:oiskY:jE5=Mp5GSHbWWA3aEgKN(X_MeqTXc,Gf]>o&)jLnbiL0s!?:]LN#sBubo + IHoae",_Y',OaN,4J6VPiWmNe#=3HN)Rf;4b=@2HU!KH$moE0NEjq"d1f:i7F=X>+CMMfc'$$k@I(df+lPQ?).gaW2Z#BEipUrmH + YDY/1!p.Cfcp>SS-0M"&BQS$!?h%.Zq6Sc[l;0b0R8EV`T89I\V^N.*d+b*JEA7h'f^,i\OI&6AeXnYf_kb,=JK#_ + m]?oN"M:^DUF:12jhhGj%Fek[%3/CY]:WG_@qt4&g#HcI8B,35p*I;NDs#2,7T!n:+=EW-W + q_ZjKkhL:9IARfg%YL2-HtP1kEegihVg5Q;\-):+>J:k9ZA"GcIn+WqV[XhHI@hp!1,kM1V + sD)T6s;Bk+iAPkOFFJZqc78BEkB-0HZrSEn=?:5#H1!lK>Ri[@nVL'%I0CJ + +(-'eV%#0Qs#A?ZlA?;>d_E/![g\k%]fjX3KZHmlI)mn7.8H5(@n2+G`%E9XWR + ',N30gt<*!m@DY976[LokoAoe@,S$8):V65<@8epQ?CW1l/#Xg8*)Fu;D-p#];7:O'^NKGl + ADs]78iZ@CWKO0-seE.kC;t)GC#P>@_H`FZ6%H<^_e^/'O(rE/4AVTo:j77)]o(_o)W6<+b + N%\04nkIRpm'(MGO+7``V&mA'eqO*;`ZLi<]4S(cN@C>]"b'XBMF.k1qsG;f?.Q34K*S1<+ + M5)Var*!B2::gp&ST7Qo);q+gP;>*U?_CSm8]G"g#g4"&#eYKE8nU>DBk.W9.(^%/W,b5B> + K0<1qPEo-afWoKT?`>HBjj^R.a&RY$.H-fXm#N`Ok%P1>4SL-hH)9<#sm#E$jPL]o`Ja1,i + Fe"%cQjPQq;*`DqV6ok>]<5@VE]a3m*EF50YE + L#K + MG?7];9-,-p^@ef0f'E'80C6@8h+^^`IFDNgm)["+;m&7mj`bpI(W)[$G42IT + L1cbC_mA*Jfno+2rrGS=p^/VEZWH]du!R6,",cDjd,;DK=F2d4J3'KTKi]PM)GdH$k^htWQ:6 + MAjdWc*;Esjq[]WA`_K85&3LJn9s;REceAQ+4B`,mq8:"YjP]k]VY`%m*UkI<`8J2g7%;#+ + &C=qq&825DCu_Z\j9erX.U:';@e%`=nh*i2DH?>2>6FAV5gM:!%li^RR-*e-Wm&>mLLasag + :?EBCsT1`U"K,c)Zg3Nq^,(KmujEl3%W*5"@KD%&54,uVYZ+J$\Ej)-Hq/*&Gsg02=NNmcF + W[$K%gf>kcg3pY@?a4kip=Xl7L#N7,!=UC0G7$LEWa5+f^L"QA-QS6cFFn`MSNI&H!uSr.: + 5G:V:6%W(]be7jfjL,2sO&I1h@!*&2"*_9>r`[OpsZ5Yo8C&'VhMd*M14&93A"n(to3'].( + MrbfmXXWF&a,bArFi!:1JlSO2%8:k^m!$d@&EO];iG#\PT*$i1#W6/2h,o*8BM'f5Aklr-t + h$bs8FE$[b:RN&>m2k?1%52gbcZgaIC.q0p*GCWOW<.HegE#2aoj`mf#pDAKPIIRBYY&R(&]bmtul-u+MGif>E + r@TKG';om*KdbktK*#K>33Pg,!CnOYEQS#!uMNQsWYFR1[)],X+lRgi;1<25H\JVI4_G8&+ + nW^oX+RKc4m8*BnD?e$Tr8@&Ee)1HMJ0pH@?nUCB?o$Y&JWL_tNA88,VdY9>CnQN6RZ+PJ4 + Ar,LUu;'t9fhmM.?D?Vk=/LWg`5n=M'[R1bb6cmJN3oON3X-:,]Zc%ZkU=M4sZd(oB@H[%j + K=7,7[8r;E0T;:utSCo$ap1@SI/GOYmY7k7:&F7t+19ZB0'0CfAOoZm]c\_(Ph(IR[ue/>- + (a7/Jb@0N1(^jq*E4+@$*Y'*fp';iDR2rBc']3Ra'Wd99$o+Cq@o3j3TmDI"cpY0B\Hc*OZ + +XhN)aC?eDH\b!QNZs'HF;+]l"2Pu3BV7&^&F$gUsOhL8BM(XuM$VF8VGn1cHjhdh:)a-@[04ij#)f8)3+AJmJ@e2- + LGY"mEqlN0s'<\YjRSU;LiU_@'`e.1hU5_4N!^Vo'f->(_rt0/n&q$Af25:/;cn(FD.dQQ" + a9n57sXHA>Q/NE@!WoO?(-i=>\YF<7O?JO&`'?ap@>DeX8>em,RA1\+B/9;DQiXIb/Z>#ZL + fcQ#0a"2aGek$.<"hm(Wm%U2uBd!Ya0<'K0R@pbo);>@B0kF[1CSOVP)D98!IAc^@:TMIbe + d;ok:c'O`W4DA@=+=9X7M6_-3!-q?).(<#:Ek^okoN=;m/`PR+r1Cge+kI"EIq6 + lt7VN'7^Ve>XG+US,jB>&+&/!"N<9'KWM$#?*`;;'W?d&I+%^=cL[p.G!,o$kH:ZYG,m88r7;=eDX;6&)@rl"+jSH + *;?EZe"?mLqMK@)P'-AUofbS;tRP"qp#dAUIG(3f((3Cc<(oO.:SBUjR/26;o$p'o%b"R;# + +mBXHegFQ6\9/e/[_0dd/.Fe8n=V$F:_jNNk1P!JT)'6//1>RkH=bdgu=EqH8A4:%bs'idE + \2HEjZ&=8)^_#HS@p0@\/NmoakM$IZ:nOp+Y9k'K$6WYk9Wi'qm;h]`8QadZp]TQtVBiYc[ + B%8L;QXUQ^MNWZ7[Ob;@]_+tHoo.PrdnO?"%ebpUp<&;(K>_S(m:cSCJ2`U8Q'`'!j:/oLJ + MukDJK\--N`4GHC1Q6b&U#H-3$5?@9r8JZ7B8Pe?%_m]'8.]bG+WAJOB,>Y<:jTZ`B95m5W + *_kB<2nbN!eBZdd'U.Fr52-pP4"?kh%P@,@5J'V`eW0/lmmDp1]Fr9kAPN&beF + f(q`0^!YDmB%!_s]3=#`_%R0ikEY9Z4n@Z:AkMj8hY@7[,rjKOK\H=P^Cl9]7cN\HpH<5Xo + 7Y*0D2#H$B%1WfP%7B3q^)naY.7'R2(TM'I]ecuC[E[uRsu2AW5]C1BU;IQa,=XY4]alY#q + I2:&e*Gi>B!t;db@O>(Al4D4&<`jd'6XsW>2jsHt4Ui),W@0ODT\^6?D"_e6%skF%Re9 + IJX2[-AN<3l0eK:n"fVrD@JQXd25ol`+&AK\k"h?+P,DsSDsqN3Vf00pI7G547En%BKmb!4NB("blfq + +qQ*$q`e+$MtN;(Q:\&eO=MV!S/M;2.d%7J@m3l + Ql/'Z?rt93q_L,OdlW:gn&4R0$M!mPca$rT4gW&Mah\/#A)N=^m:H@oa#AfQ=,^SJh83Xn$ + =&7J?rP.QH*%ShX`^U-Fg"$@iEKLI>F\PAHLBHZ\W^*36$I9kr2ek)c7Ks]d1#O + )Lg`HAd^,!6.m*A2rjX`6D[i)eKYn9Os(8E+j!XOrtPiJtq&e_it&"=+:I99K<,R`F:AcsH + 0;i$C1`rZNA,h'2`e%-pu^/NP@2R@t*i/uZgrPA3pAU0V:PW(Ra>8E=e27[ZJHXb-ekD%B8 + :gBo&]CUgTp?^,o2DLu&QJ#0%h)?,.!(HBJJ3i"f>R+QnblEgL',/T==LN+AoEkMYS7$ + 5+^jY(L$<5a^7AuMNe%TAjl>skYAEHKX;VGgUhdq64%:q4c#qCoP!"cV%?o%+&NB?W:V9`(Ef@)mC`'Y3-"(5Zi!)CW@Qq\T#&c/,AM:!BFCIr_BW4)m + r^Vb)<7t<%!cR=m'FOY;GniUL(5@ZVEr.N-6sNI#<;45Q1k'4Eh7IL,l(f/O;;+N<0 + DUGE#4?`%!+ke/^_\q^H3?HpaIlJr7>J^U;3biWi#[sdjX%!YC6JP\4d`Zp8HYClLRLS7iP + 0%'CSj2ubX;aBZa1W`pnODR=0U*u-n."R:-@h&dnr])![8)p^3&roM)P7])A8Q8#Z$j=bo1D<1$0fTqc/'ph\DK[D<5&_3#:'ZAW4T>**M5$!UZu;D+e*c + G8GtYVffUOheqc/MYP`:12mWF&pjp#5a_'SJfp[&/B8BD#&KG5.%na9Et`^[q5\m_>i$2sm + 1&lfHYM=4QU\/@g".hL(A+l`BN3^p[f`b[96b70AIrS$'ObIdj"pK?hG^bKGga>`:[XQEmF + CNFq\6JoD+!,=pW-YPQ]+)h-Mc!%Q"R50mHj`L+!6au5f*=CIg."Gi+)oh"gA!=!>2O\"C= + *DA*4"Z8'DnT/*u0N#3^/Z + %$p,8"HT(Wc6But,Y"??P7EOOB;?^D\mcYV@mj/<@!H"qZ#"b6bHiH''(Dup'eTSQX@jb]Z + lofZHFAebQ:0)9l>lD41Y4ppE_9p-5Jn%;6qB'=ggF""0u7K>,7GQboudu<_q%jReN'#jRt + koKd3reM"+Hdjq6/=iV-dCpFo/kZ,Vaj45T&3LnCBu$G6)pF)'0"aEVO1-MnXH54j?sZcNo + 3oJkmdWo80]l2:)(>a0PQUn&tF[5JS%]!=Q+T)ZrAIbk8B7?Y;Q7rUFfXGk)eY5_;E/&5On]U+-=_PCUNq$qY_!-=kVqPEL)b8bk + Y#AJCo'a;L'JUumt51CkOh$6nOV9K + \!ZFe+dUt.^JM^ms=([#oD[8Wf2FMZAJ5?7mKf4)b_1^ilJ9Gu73RFn^\L_G_!Q-Q[?9F6h<-H+i59,[grBGCUtXe`$5U:=9\dXY.d&OR>"lJ:4:E\ + Z+U=M7Kc..2:ZCJFFXYG&lT9+Erm`G*`RD@*"iGVfZJJL7mRoKFj'W)$9)q8Egm-C(i:A$5 + b8BG#00H0TU9B&uR?j[o?FL>97liWt`U=GE2da4GTXGJKfPq$2f/]M#j + 8J"SsVl;IF:NeI?RVC^%>GYE52ALC4(uX:S(0L@?Wo+M8Vo:j0+,/4nLi+tp$\@=eXSl.L- + S.i2US1P6Ih-j4uJ<"`biCDi_2V$J119i>h'Np<6Cm%`[Jp0'3_`%,e[J?=._L'l + ]),^3#YL&J?f6`M)Z.iQjX)6+05H]^/UD + g,<$XnE;Kg^Y7YC`4b$fa6PXu7NCM=".p\p/3A4rM>,[hiNO@>ld7Ih-eTQ%qJ@P='ab%'e + S=fKbiaA/Hu@M74NrZn*Q"]N,YJ1d5IF!7#M9K*9k,%-;`+4pZQ'$8"#X%L/LqaXm)jNE[t + lRJ,6Fkf:-aQT&OSi*C"Mqe^2YKbamNT^Gek/VU^E;*j/@ken$`/!.s_Qur9p\;&Cui&TAd + oFo)rP@d+#Xu/35;XFk+(MfI>0N(,I/@qQ]aj-JkG]ebZK$:>j_:q^$`rM5gJ:6H9]8dnN` + 1_'g\92=Y]ZRbV.eD/k!jV(WbhlR(7;Ar[r;bFCc!4"Ua=)q'c*[_o0P#<>80Sd\8=2H3+9 + [P#0oKr'`;scZEpb1kLs[+gMEG:1S^?n1'1]SH#_LNgOD2,7]@UH3U([E4@@GL%0UH`_&D8LrpV]`429Mif2?CC0;3=BX)^c>[16>>uJZM^8huki`8p + M>@(l]!Vt5a!l1"l+3WW=>2b4'ile)C;3ld/EJ@#")F9")TPf>2-O7sT@lksjO>MkUYhaN, + FoK50HP^2YSX6[+IaQhR<7ck0%aFOHiS7$-!J6jZ=_,o*Zb'"[n"'3fGQ.W<_Lp;DIMLNeB + :IF4O>ZQggVs=q/#0_qpI3+>?pgsA!0SCcS2h,s`umRLEmYB?RP@l.RL/94n=@P6KTJ$k9>NA!!;C;UQ_jbBd1\OY0nr5E\FTca + ;j%Y*+s>R:m@H%>:bY\jBC*i_$i"rK`YG!P-r)K.;F,T;"q'Y>OMs!"_Pg8joaR7(c2]bY: + L\:.4GE7/TkLlpIH25:!4N6F9]H.=\Gg@]9.!SWlsiN*/T>>",Mr]`I?#;C%P6%A&D$SYG@ + %p`7?m`!eC=+L0Cg9?SNd%[/>T4=DM?1,>GJd>3U8Vf4niC3YU[H*\Bg-a3q@)qZ(fY:&gd + `CtAD8VOk+KEnKc-sJgNbM\kb5+BGSL)I\)Z*g=JNs:HX5?QSg>%E:Wi%fO@0LJ>r._mdfE + Z%7TU!nRMpq-mund"CAQjM)td,HJN7KbK3Rc>J'CghnL+0Me;inrs_6KN^T2*"]BTUo[BM'I/ + *ugCBV_cNrhsOfM0puYo;Y_>sW>)>2_rt8sM(k99"?25*MS,JjN$YuY,,)= + "'6GXrjLi\V_AH6'/lRh6C*tWZUH'O_U80N<]'H*=m"^8+LYJ05@dlCH1G9]:!.$LiW0bK^ + T":]5&fF?J8O+DlJ!X)$Zr*fja[7`Xp-bR+!5Pt"8g^9HkKWAN:&NpE%,jr$i_D&b:-@SYH + ![4j>GGR-T)i&^JS$0d_+ZEG+peAl+nD^"(Ja/ocM.H:$_78W"j\S%:H[K/9_D1dp.oN!:% + [8+ADDu,=iK?lY@GltWjO1b8=\nj(to?;e*&p@`&*F8SYC3+S8*jid\hH@`n7!)ld`1p<_$3e7b5jYA+*2gr:A>["l)Op)`;u.J + "<3Z1@$c)"eI'O$_T_b[N"pH]o/^1.*n@be2/S@PG]A3)&s)9`pmc(khrV-,a$.N)<3C9TH + i.6^iRg+dA"[!SK,Ia-g1"PV]9f.CuD`rfSZQN)at$9m'NCG#rO)=+,Z.+N`K=8@KoaXPNh_+s21:A=gaEEJd+6*GuffR8QXNJUc.G+NID3hheKO[C!ipCH9` + R9KD"/@\?8#fU58%?h[,nKjc@gDTdncrm0a].VHOe4/KK4_/M%'ar&,28A7'=oD7G"$8[4G + TnZqW-inT*.'k"5Us=P^H85`8]+(:5rDY*$*'&[1leP<]@=>BVOEd472DOgN$uPD(]/ieRK + T/H%uqfP6g3G]g;HI3X[[n1W`\7!JVau%WYc_4g&X?7r@l#%1,^Xmg]<)W9V3hP2Sb5b&53 + E\U!MCH'gHDN+"TUOEt5&R<0S#\Or7sr&u:MN6ej\"O?h,*R26:ZEAZZJV@(\B.[?!gX`9N.'?r%Q?K?;-S=\PneHj-W2K + 1!J]JNcn:PMQ8Pj&E^(:5(=GiU'.\JY$/8#h@l0)c'Hq?5\jWaTWKSq6?iC%5% + KTrY!amV_?p4^$1:8k4tDE2d(h=`lg$A$)kl8f#J + .Sg"Y1CUiYJ..S!4,;&,h.9bLW('3\po5!"94(pB8N].uuob'F_"im>NA))Y@WQK#dqC.,I + -8t66I(`ERZfPP-OF"-*R"q^qO!rKXGr(nLjZ3//+Okeuk!u%6^(jU[pX\rW,q-4S@di8ES + 1n[0a?W(l.Yqr0'D9kKqk#AaU9[GPqYS1q!>^4)=#$jCl:U*hD$]HPX + P(CU,>Kc<6`k>10`;d9i]Wf/fc5Q$YLqM>0[CIG[A^n(Ni#PXp#3%6-VOc>cN0k, + r"Q_W8\QoZ"cNP-1qQ\:p\'Pe"aNJs)?FK>FOc(ib>-;?XQu&*>"YAh_%@+TjoLDO\3$S[EN2ZW + .\?cfUn%k-3:r`jQAc91b^K8[_?1=U!mXB&sGo[Z$pA/,knEAI^P/-JRdW/>Wh"OUU4DUi_ + 5mo;NU1n]9sX/%Fi:=jOZH6_oSi%O0LB&^IsToqV&hR=b,PP8uJY&!q7u%4LG#QIuQCD;Hm + `9FNB=?MQb(Em.:#?B00bSR&coajSFAB<>V*`F?B[A'G8[cNjSekQN/HgRa?mPVd%q)]]>A + AesBEYCW;1aiP5Be<$q#*$LF\+`eV1"S",YEBb.W:DIkV(3+7/EISbj.7"RdOjHjh'7B(`N + qr4tOD0gY:?:i8#-=m]!>bj6EJGf[:F1$g-?2oj*9mnRMaOTTJYYrT,T.i>H.cBlC72<[*) + ^_.@1XY5of:u;cQ99@&Z+0W#RV:Q=i3#\0rsV/%-!TpF1U>rFEb(1UIUR^^*DZR_M]6KFZ: + Be]>8)(ofa6t,P!QSl#8I>(G+7bYj319 + dQsCU!VEWja6JU"EMu",)R<($;G0BVik(jU9<1BIPAE[R12;q;E>Y$JM<=N^3K!WV(\ptc"#uJOd+(d\EO\.$c>`O'p$qN@nc0IJ!S],'8iLtcdGd9*1BZ.d>m\ON39#&g!(j: + qjUF"UgA.YU+pU8HKQsi[/p%8oWj,D@r]d+)V3L>.H/(C\kBbgB/GId7Y=2Zq2 + olFdW^YbGGX?MG9)*5ngG<&k<3&4IMKu!U2'?S@R6muQkZN5#Q^ + q.FFkK?`csdq'NKl#iPbMBZ6Y9a.AG$G_h'`-N]SK3.0JEprK9D+dWn6X<@aA.A^^C-`ap` + :9iSH?XQ5:$$Vs,gnkB8Y6W?oe'R?5rPtRuQC"3!57\s%`b4!jW5N + `Z%62eA/LT/_,c5`g6J44YG%W_l!(d^,,6$/-8lUGet6c`-aj<'NrEmZ,XG0&En#S)03^?_ + +um[c4BNa4TLs>):AUD^^Wc23j&^WRZ3g"Aa6O&kgHMhEGYaM[%[Y9YU7C'f]4^DBQ]X;G'Uqs + &QPQWUl!5-j&Xbd#Q#X?U*15..EbV#Jq/mgD1)TC&Tn94S,e(W7,W7>EXA3(gB.Nj/b0ml^ + BM2096A#al'Yk#K5kN,Ebereo<_ZBs\L^J(I,LAV7L\KOcHAJj,_er7";]>#m/X=%ZAQ%Ld + )oS8URMG[(fF5LfL=Y*)[Oer1[_(8ZA[b)PsQu-aH(8R8c'GN?h1oJ9a=OEF=?"H'Z[kD#c2IH(4"SNVU4"4m,2` + Gp8:!Ao9Q5"'FNVOW$B,#F?(NTQFntiS&PA=L%ItTA%!T?d]5\:^JRk-)$@r,5mkB8K?Q4:;7RcqH2lI*r=DL)N_4dV\s/6#F4 + V6WBD^Ac.)55o%/fS,Sg/r*R5Ui0o@0k((=*(lIM'NlEm?ID]po$)f,[K%(NW$^!)(`A!P5 + j;hOn0eOd5^_!%\A-:&h1^DY=Riq>T:+=FKVfL.UPN%#pXMmIR69P^:dYTC;@:#o6'HQ0XG + !N%R@#^P1$[JO'VP69oVs1sW2C-gCaS_OP>^o;]SCYfu3c!YVE>/tI + \WA@tS5[.H6KZp%9)/g3%EPlAP1Ei1I.8X5FLi!XSm@,Fj[sHj]K`Z)-KnscLef?;#/)q"BPR(PCX$pPU<)`"SJo29g!.eJ-HTi+.rZi)lbti.!:kT*4&LJ43R8Z.\9kXa + Jfb.d'"q#Md.H26]88ShDoK""Y8>no;(8FiTOH%go>`,TI`Q)bZt/)V">[:p&_ + /"7QpLi\$)b%E>I&i[8dJ$tRdWmd9P'%_3tNaZ#!/>M!Fh7;ISL9p8nTASSA>o2cA'4tgDH + l[fWQ9)P,UR_lY`<5N3^ck_VL^#9t[f_mc'*+2\4;`*,?HL(n9H+*3&1*JDq`e^@r;8d1-V.7j/uddW([F$mI7Y3qd/72r+NM1LE8DIhi_mgPC"6aH)A3KW?)`#;Foop,\P#84*g4@kG@0aP_qY:$ + Pjl91A(:e$C6ME#5XiS6YR@Y;9P0im-\QY,X+-,sRC.d=TN>EEkEbBbFcpq;hkpFldSC)L= + K@4X!bhg%aT,r+;B$tTXJZpQ@?K-Fi](0\gk:m'dZ]RC_pU8tr1AY%ho=5q&(X=,(c[,C"[ + $ql]qXBQf%N9P.Ek'$:oZe4eS4NGEr+93bNh.PJfdJSlPSm4aB7gr!/-q*tiW!KQqaHWmfE + <=)PnL@b_=5H>)-%\o-RLN;4$8/U8;QSaABlgVX!)pmM?uk\+j1_ESPL+UlKqL7;69Ns:H= + !&"U2!'HWD@-'G52qQ`oH!W>#^)%.7"RhHPV$^'B!HaGTN#0/I.6IYV[/!1Yq3('<,tE>+V + >6S&2O!..sE;?0L^EHSNA/[;$+NS2q!a'PcfToFanDqY5!nr?%JIqC;u?lpf.&5Y;\VM]=5 + jBC_+CW.m_2g?UTM+M*=[\;+q6rWnlXTs!/o84+]I[ON!Hi\[;RVEY6-PJ[e:D\1Oe)JGf% + KdB-q0)eboSuh78M%>+RKkQp+P_"_CGDmSTTVVk;:AATU5c]c2Y^6W%Ig?U<#RAjRMZduJ\ + GsETis]8+MnJ).^uN89#r&7aLPFlL&<]U5P0#E>?i];f3p#Tmjrqm^$hRnGCqm,l'J=K;X9 + 8W!#j:>DAEQJfYj)T-mZ,N(\>R\V!G^l^&lQdV\;13rm\Uq3`=W@-M2.8d::A.0]#JI:Clk + J#Ypu8=batuaDCgBWM=b]MpciZ9^ObYjd7W&Bc8Nu767<[C.*@K&:e)c"Pq?g3%(p5s!X,\ + D25=L&B3M,VDXqOEG!P87MINGY2"Q[scZ(NSOd\?b8>m]sH&kdIb)1L@>1&C=dEt:AO5OKg + *cU>[eOFr:6jdnofOE%nN^Ea;hI?@,Bag-1:],AI^fa + AFGM\_!3)MLg*9sRZA:]RfbB)lK>!3cqLNOm.@i;L[tf#9=YLRrL]Sq/2$mYV)\kg2Sp0R$ + @]$Ok+CX(H"c;L.Qq[49I]#u_#kd".9\7HhU8$&T9`K*.*.BJJY-.q6Zlh_#Q%/lLhr#LOc + +Cn!1n,g_heV7d27#79M<$8V9.P6tVnW6k!7$S0qole`)S^0pHI^T-SX#$D + ,Du!VV^\mf+ZAcp.dll".hWPT_rd@*(V,QOu@lF0L$+pI89,e`gBZE)Hkuo4Ag2X%ik-PI\ + gl?o$$86b"3HXCj2mu3YR32PNjIaTQs=-$L_$C8s0W2Y^9<7G]J?5.C0us#)jnq;F^#3,Ol + cV`[aqFTh!&0D14#DFFOB8,!7hn=0`F4=UV + nP"@]/D$B#TN2R"IVRV0#]W@q\X_*fS&7.l+XKY(b2Y-MeDs\jSnCaq9-<'8H12P[_pAg"e + gI2>J$U2U)OSqb`@Zj;2AJe=c`.]SCX_?*2@d&5s;QX_DB>c]pVrgRJJkO63_C-%9m;242e + H`Cu.u9cuY54lF,f-TX_5&uu8UF=b+&Wgu;Fu1pa*XYbTPDp5neAt=?'Fr3W!pFRBr]`` + W'_A,hdO6HH)GQ7UYY7OSa9]WCNWg1#4GQcMNulQ)gaOf5(ibH)%-j^N2a.a85'=nTP%d,i + #5$lid*\qnkG^\q!;8.WH^);fXAEAYb&F6g[4.^BD9>?;=LEe],`@mfkBQc<)OI=98ZQGrd + `d%G;RiNKE27fF0>^WoU_`2[bDDOEaa.UFqEja..nROGM?n/P7S76JE9&Xp`<>%S4C#f<"> + StM8h`j#%'=&HPpZoeOd@@NRS3,;s"\!9&nb[MY=d5_9+lA?:^l*!HN>YAA:GuO$.bLVht)%2^4$e8Lr + Q"*j6bnOsl1J@g*M-j>EI5CBR!+nRmbSj;KT'jPM=mkNrD2?,>Zu@n$0#f0TU?KQ+.eF;n2 + f)o,Q+Y,E6[Cp!5W,L@)($j>KPS./=RmW,`D/?MstH`oK9!%mYK#[;PZ\<+>kns+9))L9u:HsA3?M$-/5>r/(O',u=>sI]qJObO<1rXF.k_Y>dE9@kB..$ + E$#lHSi*lIX$bbRmgQJPG)Ig1[LME5a[qOp>k2TOI=b3&UOcHIOPn#A(%`e'Du,(:7\;hMY + Aj7IbYS5#)S<"-K-?&5e9LDT>l%j=^]2+teVD9VHm!6I_4?h#o*I:DiLt9Xt\1L + mok"aiDnf">55KY&;@JF2iUWju@Gn'Ej8'!1B1AR@BVtT:-Xg4?uY4l6qUol$+Ce>EG7OZN + @co.?Z^/):t>:dYAK"8L@o$"`ZhoLn5oXu;P=*$=iUk6Dh2"H'EA%*O`1I*a + G9TL%M3_)>6uMIp*`>D=Au"#]Kijc2SjG'45O/GScrj2!*3SOt<(n?mad,SYUf`dN4/OPZ: + 9%$BLhTKLPLYCZAG(T>E!0Q-YZ62TB;Tc9GHhNsMT0bH-PCC]$9Yj3rf*+Z1nSZ&SH!O)VS + fg)CGTme3D5\>9?RX:kE;;jTP;lN=NHST/0^L#L:0('>*Y[>k5nA9O(ecDHNrh9:$@VYgjD + OA;[mPX$q=)i_Mk=7DTIL*Lf9TDMIn!P>e[-r$.BiOg,I]MB)3bcYj + l"e-[7Rs4UOPs(W62nfeiS$YR*@K@itV + Kc(eN0W.^/Xasa3ME2g-*[@WX2d: + l!@ZJ1b6q-Jl5KRh+iI8WQLW#gp'i2*N\6#%[/g9MjA=RYsFY&!NrMt%u`k6705V5M7:bSn + tZV?g]oG*)!,?sh:(DFn\4NoW-XkTkT[H>kqk)@/]%c']mT0p13J`oEo%Z?)2[rNn>-T@X= + '_=g!pa!*s/"ls!?NrF=fm+t7(;TA5#UW,MsUf`=aXQnBE-Fd,lm`U;8IL$eAb6;&L=lD2'o1Q"^YB$@[NmIl4[g6tKTI^r0Gf^Ip]8ilh + W/oqa1%TI:/\e@>/!hLST?.e]D6e2F.Up+T/XR$g^IF*r&H3u_/U('V)cBNn\R.T_KYdp=r + fQU+l46u_fLlE3"nP[,K*!&`.5>8d<3D=,K4t3K[\P,'A]NZnV*:bj$%(;*-8#Y2r8dqd;N + C5-I(&#(ncgW2U-''.uLHF][]S9[V@LH`1ki80I-e!!NV7'9%OUU/5)$&bCt8!n5reOSB92 + 7I0D0ipH3Gn0QSaVIV0RG"^mTK`h8Nk66olW/?VfIb\+uYba@iK9n!H+r^c/[!0LE@Fgb2W(f\=jktBDSBd:4Zeh4GAmH(Oe.&RVQ).dduoRE\,A\_#\e&GUS8hHF-aJShAUCF6sjWQP9dJ^pihj]T>X")W+0te6?X7oBoJPsu@[XG4XTBHG1YcD)-"IeGP0UlD2F8Wf-H(lRi63rD/SN(b%]#%Ij#L?-r:c*MNKM`5RZK+F+pGet=o.Tcfhc + _Be*lPGcuJp'lt]7T"6N]H`ZdB%W]F&FO)V\I&qCT'rbA75^<89*#8$c?KQ7SVC9jX0&Zmm + U,seYbQ:ERlK8AoC_V=h&@pPBP=giIFAup0;[O,1Oh6% + Js.6o`,JMRQW)dG:_rGjP[)kD(V2c5ob=,.OIo/&9]k,]fITh0W!W?@'*hmV1&J4OZ_;YOL + b2@kIL3*$iJ2!mkO9g`cBE"6?M^+K]O+D*M6A#hr=(!5I3a?LC71WX8M\Q)gU[qE-UijAO9f#O")0#GPRuW.1U0Z"YLM(RKEcJK57Wd*T8sB!.b4aT5%_,cNh&Q + )1I+A#sLY2UA`X1aDqa.,sf\(JedZ@lp\9KMpXn448TN5>):tBk.Vo"op6K'&G%Keh^(5Y: + J?'^T]gEdr*:3WtnA`VEH$7o=Xf^cu^\*K&X-tP=g+/bu7`r2@Yj`gG]SiXbJe,98c93/IB + n_=,q9/i"Ng:*T@X%0_aX$Ycce)_53KiBDO8]:ViYG\e*&B6aot(q(jnfD+eNs.4dd417^82nJr9g%3X4fXKi$Or$ZIdl`]+*e<$ + :gm%*=isAKGMpEj + YL\dGg/9M:XZ`Vj1(HWA>dnPZBTSB8]EOVS.L@O5r6$PJ5A0WgD.O9R'S;QJ$?8ll78_c7p + fcQJ!FdU6RE:c(%,r7(F=tLK8Zla7-/&51/Ikau(o%pXN.h\:'W.-^fUb:_0r-YFeVCCG=q + 2!t&2mqi"JF56hH4>@MC(KS,#QH>T1HAB+r[:$fA?Ws*D['.6n;7oB\eoYlks_J1_3.,bN" + ]YNT9$%W;+q]g5GnK25QN[ObCO)Z9N3S/pp2m[,M]h;aRl?6S;nIpE$mG>fV(C=>5/3A1Rq + ;XH5s)ZbRq,fWVR^ilP6=SL0L/;[Un`#2-FMZ\1c>@Il[JV1[_8&[XqZ[lKfO_c&(&fO03sknR^Qm)%BqW$TmY0X=9Ve'!@<[7IUNXFLKBq$AljA(4a[Q>EAf2`(oJ*X]NL + /4Ft^iPZ5"gAIpKmF2j,:k$0/S3!jV4ua:f_YV"p=ucQpi*,uun0'1XpW_`;@GoTV0-_)Qr + a7\$fUVC3nC5fbMD*tjnN-Mc`S0Vju*m=[UJ[`Op.G&K/n"CAOj#i')LFJ00#KcA7oe`^t` + Dsdgd;?GKTMh,oD"+eIO3]Q1%,p1Ks9E[:.Z)(4e"-5F^9kh:$Vf^Y%W/S"24.Q2IFYP_L[ + (L^rM/uB;j0#9i^bjN\B:g#F[^YE>d&?]Aaq+(G&t9*=*UB"5+C[0Un$GH>%@AbkF!tU^X[ + h2g5:J5If=OX=3i_uC9GSbm3Wd_,ZF + V'2iZ,\9cgr,+fGk14E%8l6WB4C]!1C79Jf?4k5p\D.?t9HIIA@R#YT;J1(&.uLLc]fDiDKGSr + _@Cu@NmY7pZ?e$e=<>+i@.c\)E&B<;SdrshZ`%fE>`sP7/&^=+#?$gQh)82c$@&akC!#ro; + sSdhcND\-K[AkF+XAk]d*VAG!_TiP%IDM^S*^KuZqRY`)G,d"F/= + *+]Y6M^XRG]A:GU)*d+B_h@MK_ukl&9+6Sk$MD=eMC2`Btg7Kl!QWF%mR)BoO\+_d[^*'h$ + F1.J4sNt.D"a\iG($,?%(\@O3o&Xtod!l-Vp^dJ8X3>@XurgcFK^k3.T8;&!ER#OD^KOK]p + Jt/gnf`iDf(f9+hBgnT6o+3TnT/cibZ\*rE%'NEqb+S]Xfi)lbs"CRrQ=% + l*CBl!=o&USUUkKV@E/,/#Q&6lZ$/Sg)1a;!/SPhEnGgX((^_l5QOD'7m5H'p@cEe(?%J`G + f=k!s=.h+Lc2Yd:f0nHn9<7mf#!PZ*=j[NE\O]:=,dP^1a2EAGe:#BLF + TXXd7WGpRgh"0'8L?7Q4bFqAP9Ur; + $LK0L^A2M9G.i3Nmt]Hmd=HL;]'J\MRS58o0,$+h.nKuo_(5?`jEftfmtZbM@8Zp7 + ``@Z;@H;5ia#J>;kE!!7]+WjgA%Jhm1toR9EnY0-C?b3O`l._0me/l/)P0!\7n6O6`:DeIV(,?US_\4NJ1dtV``Fs_B3/`eG + 8"E!Z%oK6iiiE=]cG^Cn`U$rc>[YPbKfWA](U9m'8O=q<3eYUNb/,'JAD*s)6\9SFU[eU5d + 4V*W'+h]!K)8/l_8IT;9:L#()VG_@KX;#D4i?P&\JcD==rf226;Ct:6od=s8g:CM7RV@[WE + S^_d*@l#h2bG"_)i;P#\sXGp6:t:a'n>&@.Zb3IR3&:Lri&qbdE5-+:'/Q$`apY61`&FiY' + BrUWW2<&Ik&9*LZ_@V=D&Y/7Z3#AV4,(*^Dm(&\kD]@iWm#^jPI(KQ'%/%CPonMP9%:7Ae>OnId3,N,c@ + u(le)aDn9XR-e[_TI[5g#Op]FIT1]/?jocP5o/%2XeVQ7='G:JdDnjS">-HPo-;'(7IL[Ld9`-Rk[X1Un^BLOuK5TLh5 + j&1CUh7E0GN!aU'&?mlm,0`oH8)Hua8,8!l8k;`t76i3$7'^CG7;&e$OXfUqY=sQ+a7]kAk + 2)GoQd"EWI:RRBJfYTHtW-hCC@u9!RbLF62g7X57Mk`Sf*C07"F[4)1Monu + pLs,\00kh8S08a;$8E!CdW%*rXFA&OVNHcp4D82/6EaSQ3(] + >!W"tSFfD!g*p..HJ$;b%n2K1m5#(I=H3sP,(W6/R?sr0PRT40h`uITPA.Uac]/:eX(3Ie\ + V\"(*4o;e&o'_)MArHC+su4XhuY.&b&&)=A=mS*9H[W+j]YaNd^]B36hEW=S3bdZiL!Vu:> + ;,fA4F+o8(`P(+mE@2@3:(j'!]Sh-5HR]mJDI3(9dVBJfYPV65uF]bTbt(%^AYRZ'J>MUR0 + f5;+,HPhO[;s- + uH+\,Dnr`?".,c*?m[JQMGFH5Qb4b-4;hq4c,?C@jG9e3(T!b + j.qRmZen[+>N=c'ga+UF"YaHpk%#dWi\j2V/N-k"7_[+^kiT++VFa@n8j=gh5<\4DhG)-36 + ,.irb"bc=:/P;/;Oj69(AJI,dsWSn]'5Nqlit8l(6p/Y8CA\i@Wl#`#UD.I@Nc9pl)DT4XULlfp8bj-&o#9SMT2],NbG, + 5YaqRDX2I,#b&0E7LlRN"k)]Z0,EpetU*;mbh$fTEqX:lin&G:of)>("rpRB9+>t)]-5@m0 + @M\<_RO0oW'tNTV2rfjR>LoV)juclI4YjC*C6c[lmQo;JO'HS)C?7BjDY.oqoSO94;m&]u^ + 9cV_c"gja8hRVQ/^q(+VDMf\5LcX=,cRKs,4E)Qf.rkI-RGW:`<&fSCA + oDs/q3/FkseHqsAFcNcb"G3&'q*8R$E@?`[c'\=*m%b^0rh:`_i1aEV + &d;JrA;(E#E)oU,s`U]?aDa*i4B(lX>-%R4fa7L^tlD+$M>4o@/ouC>1f3S(4>9M#U34u>" + \Y#k4@QeMYl2"r317-,d:.0_/@1-rB_lWsNsp]l?E(P27cGS',%+sNNIG:7AgEo + J`%m$tQ8="REj0)0Ce*CO_._=uo@*4O?_TLum`AC2`7(*L03)mUHV9$C^uDY'hG'Z<)(jp% + ""#OU&lcB`]_Vi-E+6J,=di8o_ST:Q\17M1Xu1!3p;"eLktTe)>M&fG=rWa@i@i#n-\*mPh + jY41ELN*9g:qBk7q:nlrP52arL(.h.0EU3L7[ek9XqhM]YQb!!k[lNY`,t\DDZa^e(UFEh* + b+Ai#SLEN@.H?[Cl;g!f`/S9_/o$:r5#ssmk,`)YO/JT>E=PHLn$)01F55;.jM&k$Vfpl<) + !(D#h*?p)<`.[fM3dRK)fpR!'l#=IU&X\Y + J>*dN3ZS9af;/^L+up3qLib)^Ll.cRbsMYoHL#;AGk+ + @chK_u[,.$t-7Y<6-/e8pmC,/EP):o2dl'gH>A[4`jBB,)8l04;5+h?"F^,'\EN]5b4PYD* + nYkpI:/%97:5T34M_D,I`X'j?>S"mUb.Dcfe>@D+-*YIW_g`4?eK5*.h*[I5R!_BeME4PDf_r: + 6VcRj;qom*4&lX0TiJJ=#if!B>G-W5=^@M^m8IBE%XU0CfSb#!riKUmo!=%N.(] + 5a%t0(Eg5mn4DGc+M'5aO4!,lf&6"#=bMUs9.F-%24NEhH%BWH@.+qsA\87F:-HdPf4I*.$Aj81HqdVlISg9W>ld9Q)0C0&N_Q`B" + (<3WGM^HTPm)q;tZcBC;IC)MF87kl(6W>EjJLb"@2F)XrgAl*.FnKd$P7h^]#36,k)j + W=t@rK$9$dWZekM@>C1]BW(XL?lHHe[K3RZ]oQ + aXWUd=jI.nMXjkZL+mB0W;$fK(aUQJQr+H;sg4C\,RpM&g+REI-q(&k6/G)[\1[)`TG(reT + 6";HO8QU7raP'1;_T0)d`,iEIf;P1 + pF.me3K[^8]5'q3'*:+#sKa@#bi#BOA^sGY_Va$-9&pm=Gn>7/Hr)](?47WS(h[g-1$dA;Z + I:Al%B-#(^QLZ(h/"N&jd+JaTpiS.GgNk1IJ7h1KJD==kc(a%/lj+1Lb1FWOF9m/Z,$._UM + bYf#FP?pc4%F7aUm&UIi`(r%;Jgolj5a=sMfUI%e[qI[YWO2k+)gQN_73PVk"r+ + :6V)2-(Pa=oe)U-uLoOQ#-T6pCj.:?&M7'ob9TYD\gN@D@N(JZF.V=@]4_+%t22&J&%,pXo + ;f-?;`BY:AjPc%`%WVd5'\#fed9&=hNe@C_9#4XWQk'6h,R]11@ZhA&+u!%S'Nml$Aj + M$gZqC9CVF/k$M@:PIk[RIVp(Ki:sAFYYD`cbA_,?ld[beRp_->$m + aq4TWWPgd[Z%;4k_ZhAatC[)l'CTX5Vib]LNbP0(_e7jBUBas*/^<'![]0lEi_3HM.P*$_G?O,g9=F + YbHl*Tp[kCA"pF;mpEO`3c*@Fl@9%OiRg?bmQlgCBqkhm*EK(rWLln^/M?)`3un;#6"*0_R + f_5&LsqjZgO=N'gMp`PC^St5GuiT>I__a%Do]F=jEO0@9'W60*q![V,!!gBEnQOo!VU6KjH + :r2\5.9.4qSI$S9`L#"@Vi`:V;Q%XOj)Kl/nh'De;.!#i!r.MZ*jKNbYcQpV4;2NK:ug.>E4-s^0/M!a^D + 5aj:b17Z8>^rS.BXV)poNPB#D;7"Z[n'-J39MFFXp^I.Ep:cA]9$kLjMABeL?CIoNHAbt7W + hd4,u!,XX#>U9]<'O9%hmi[>p-B+=-uG5J:Y2Nn/[3:%#G;26%(YLI!5\RF)KU,0DC#!'lJ + >RLe8(CK&mIf!7;&q!*-f/!%Hhs6QcK2*Ki'DrbuZ[8.C"g[SX)s?Ph/c2,&8]S;qM^^ksaM;dZhA_"e]ND@g1"hED+V!T0ISmX7LB2XhO\3,@r6 + Y1AcOqFaaoC:i>ne,"hsl4GC$f30C9s51c + 1In_X;QU8p^ + ekWSnnr5f2ddAfHdEF&5@IM!]`D2r#Ib/C[SpsgkpQIdkXirg'O>:4i=ST;M*GNk38l4Kl$ + K0E]L>#S/K%-B8iH9k'YbFZ`7dbC,4XN\R:7I2>T"o#h*5+9oX6-#0GP9ZKl>mZ'RWp-+gd + kR\tcugAcrur\;`BNa]j(f!s<2=6VmS0Dq`,MGp>WT15>i0CBf5jT.%M!G?^7K^`TUf"7r\ + B&h`OiL9o1oQm3;;*lB9KZ^"6D?\rg"Cs,Oi'RY:;"Q0MIY7JXk6;Uh@*-^:)pi7o&(9HR5 + ,4rfismnsN(j0s,3.dFj=4118m:;L)Q!Pg#RGnD`NC'iTM/*c'Ldt.5mDeaO:9>UW5f6l%X + 8KB$OeR9&rqJY0[+0?56f!9CBNG.$\WU*+V$3f%WLYBYjDqinII>H%h6ZD$m>-!Ac`PI77F + opkMQ^oEs;Y0%riI!YoOGH+US733b1EhY*00L0^aK1@d`[Q.b)]1N++?hXpj#p^c79DaGe3 + eNDC,U9),U9*3]W`1^:0'0l1e\b6+X$aT/.RVLD)]ZPT:1J7eJ"Fc + #U=2G5BOhQ`H:[B0Nl"mWg$=RQsW-C@7ph$aJD+[rF;8lWd + 0>mW,Z$$++1AFNrdM!Us0,=Vg,"[isilN=EA&B0UB%Y3;"?r@.")00V0EjR?mn/J\K&k0+] + Xgp1X+Yki"134m"ZRms(0f$lL&FI1;!)595b\418?7kY-o.r5p;)L.02/^DIct&lOn7ON1P + ArGnMU'G)bjTJ'Mba2Pmf=-&jV7(?'h[nt0+uS!(sbhRNl+-H.V`U.71i.]$HdHl/=$fC^8 + FCPa!"WAJ[[`1*'"QQG7Z&Y@U0m>Y\[18p]e1AZob\BTFDNI^n?Kch!2FKLXI&dk%Faq##$5:Ctr7]*[a+H>NS20;D + XZq@='pH"#V="JSmb)D8J7KdDG"VbX`7G\BLh$VY+7s'#HX3DrA-=LKX3bkOhB5F%#k%ZXk + )DmhYnu&D3:QRD4LHuQ)n3-0j.qf#8W!N]$5:e9Q#P9uJP0F8qd + 0UAL9r?EU$o21DY..C7LP6j]:c0JQ+=+dBkXj9:B1W;Y]Z-^,9ObSJZ>(9+!*IA@;cP8E[4 + P;L0iKqe;ft*![5T@K$M,WG!>S-+ + 3G1>b>"1$BQX$_#L?"9Ql.72O`8K:[seQ(6K-EtLnoGYpF9MU.G[JaIoZDQrA-crPX;=_6! + HId*4fMVY#Ooi2d./YnQfh8:ANLN:6gKpdiCJ4.^-!MiJ^K*6]A9LHSllejb$?;4u]gh;Z. + )Z.0?o?GI"VD)JZu9K@EG%1O,>6D?V"l2dE2H+3CCukIXD7gra\h8HE$lcZG+E@2(H[SG3! + ad`CP=k/[\g"c:Bk`2MDn5s/As'6SLX'n&:N]3$Jp'[]a[ + Yu]//m&t6pYHJkjQ(2VX[+_DW-eA?%p9>t8*'BOl!9U/r-?<_a\ou*$)=u`je'nH=a9a:K@ + lJCUU8;/Ek8Xe$??+(mCV".*WrBC;4I>kn\,C7YHp.251_pMOO06"b*;`Bo@>T`kVUF,j,e + A"*@aYh"2r&2HCiklO$m>u8!,I5]@tZg1KQLl1pe2TQ@ + WNaS_03+"of2k`72X^(:.bA!lJN'[`=EB/bF,9>7N>:'3()NNW\I_$8b`[1sZhMtuZ*0Ae: + aT9&)q4&#FaoZ%m'oil@2KM@WF94R\RD\TJas$C<[sN'0pMKA@OH"0o33Wde7cAnR9ZN:'HP?!nOqW'[#"=]!M)]X;GnlMXpR>%A<5F#q + NeC3^X3XMPaGEu2E@5"q=3HKb[*rGXU+I4I.H%B7)5Zg%)!r7kHfoe6rl_cddVg<*Fb3GeT&Juc) + C7eXFlVAlX)Rg0o/3L/3I]:upB=:H?tDm@^gV%b;_GU5]m0>!^p4hESXRm"7Xn\7/4[(B,4 + Hfibg=_p-]S'o?lib>iEgFYI_^s#T`0Z/p75JLGL_Kri(-+AuJLV\Vp\CGj`3F9s6fiVDkP + 1g_T=-HcgR5n,S3J$qB6?0URdsZNq`R5L5q-.015K8;W][?D')q0@Bfjc[>LjNUUn""2d7B3SZW=g',MD\?3[2Hc43[i%`XR:]\6T!<"< + 1-,W4:l:IH3\s8i5@U[7o8]G"te'E*TfB($la4,]ZYtns5_t2FW?p?S:i2KZnlWgpJU4LpEA4j4hl;2^2S,o?RZUId?[F(bM1i=]3RjWh>H(l9tWVdU]*G(DMWjV*6A=+Fad + KTVcO$/N-+QdB6eZ9\07]<.mlD[jJ&SrcA7sa8II=9hYrAq^5_@UOm,&pl"/jDDL<>-<' + 9VHp7gR-g^Bqjk4VIW9F="puI^82UiU/nkmXFEg^?hGn + b>:]#)1K4JrW0PJda_sXrk6/cE2K5'S:r9K]gU0'E_6NJKRUlT:f;3L/&G('0UeRtj)rhVr + qb+C6XDS9d2tOuG-K*FT-PQ*1VY%)^KpC"$>qH\hGfj\-F)/>,KRADaSn?pU2FaC%\6"TgP + anUhi7F2Onh5,q1"h.WXM(3358($pW98s[*riYa6O_MlWMJM):A;:QC@:R;hV0#tr:&/:(7,r!Hh16r'Fi@Tu2jq*kQc':.e:!qFRI-e=*/'l@[&q(1T73g4( + eeKZRqgbUEsc5-'7XAb-e,]72ho?Dd?"N=fAd8(22F"EJ[eiN + 5[ef"2^+c1A?f?B8^SS3Wf+K!Dp@Hdq@JGV:"RqWYr`=7dX/Kkms" + [N*uC![jn!cr*hQN;g$SN\rZ8HHc"6QXIG6uTT1A_Us$,uS&njOA$jnu0iY3"36"'='-Gea + /,+FjPj=:5InA>=-Qn[Mt8?rOMAB#ln,l; + (RoB=;-&6<4*B,B-PD]'WsdrK34DGkAqULf^uL@d+[KM#)@o-nCa)'[EP;mA1JljfPf*kZ + 7ZbR968oY>Gt(^a\nC[[I]I,BYF0!JVJDZ5q8RKHB6iWdT4e!)K:ut)->/]Wfk+6\<7:%kO + !G#E8+;HYg-#BmG&_hJItY>?L5Q9n=l#lV(?HUEig&Y!6u;&;'&cV69oX7f1XRk6e> + 4.F_,JpA+fTqASS\I4gT"[Xs2nFnIB1hha7-N?'o<>-]@#0r^W16GoAgjV"akDU9S,D>DnVe01+9hJWN2*6&7N,+X1gD@f&fG08u*h(.=!Mq^"[!Ai7VRnK)2iHW"e0qZY + Kde:EcnC81dOX-NnO+Mc0_L3QkBo<^&;KTf5A\I#\&<%]HDpDD%XECo`$hFG+Z*t(f164!A + /@2Ph>8o[Wd:m.cJjJeH*C)EtlAuj^W2DQmg6T'.(n&hTeR#.nX[E0X?-NKd`J8kn + =PpR0IjiR&2^fNoF9( + +TccinPAj_KJMb'd*rF-PZu75IC'gr%=#@4reArMGNjJI\]2!*$JMW0D1p<-gJ,U1-&%'fH + $#af=_;jOeYaIGIWO@gaaQ>H=$4Y:<]!oqN`DN6G + YnQnns!YMD`K$\`9+_3XDAl*KYY,%sd(]+0!K7X*=&]nQTR-@Hm]t;Er[aH%%e#u>\5U9t,=ID + 2l`LQT""<3l=!"`FXC;\8GRCDd+;/EIASII1FH*G]+>WTCqci5D]Oe-qug/Ns/(e1p44SOt + oo/eCq#_AP'$6j?PVO:"%0i$=_9X^knkGRHS/tQ$#*pZLqDXbR/kRF"]%[a_BXK0nsVkR2ot^B + G/;Ar``Fe"`YVQY'+l1`Y1*6uB-5T-M=D^_Gp]9uK=&fL*D`m%'KLG + (.imHWP"MS[Z(Oro)XZQZMScf=Q6Un_=fQL$soI".Y`,f/X0sZ>tl&&7,)t01?(p:\0BeHM + ,)42(dapP*pS&mD?)6K6"UgfQiA)`:4RBMY]PrGm7O0BR&Wk$gk)_::UEobA7cMQp5eeEUJ + 8,]D%okhg>BSg&8.4pju`12X)^m"k=Dme:=Rk+$j!?,\"aaVQrt.br]]12#8IJV9`J;YToq + /ql6(af[][Js&SJ$0J#kQJ)T&f87j]0=`(.anc"$iqu<;_s$-D]5R[ZY*!/AV"$esO5YM>H + >QKgJp[bh>UDdR-UN2/6B!?[S,GZE0> + b7[SJXU,TnPPU:(CJP1Lq@;US9rY(r"02_\e"iqRXh+t7mq_q7#X]*S4Z2N916Ed7*J.2#Sk;A+2mq(719H + S6&Qk%+RCU!q + 1SNI7u;Z->&$MM/Ait%^;B0Lgj;Cu*5d*ka0@3VnOp^g[h]NCQs_L:=<^:M8Bd&agl=qlO%B218IU_Q*0NlEP=[m$8PG0F*0q<6(eK!iK&i=%S=0RcRft(-3?[ + "0Zrst6%kIOsX:uMm&opFIat49Z7T?*0*#?Ns(VKC6b$&c(1D.!0'1'QJP.T8QCNl7iRflu + b".Y'sclbt0'MCCj92(UD>dd:A[nD+Y98pDSS;^*3#6?*_!Sk?iN4q[+1VL-h2PQoM8ruQE + W=[:$27"/Q[!mjGXs8!o^B?J[)S4-Q$qMMHa=sL47"n0BLC@.D05clL + RBM%"836^58Re9Em!Me`7]WC-c<>2.WjZMRY;)K,abih@"ks`h]9%&L;i_<&;RnhamcKt#G + %1:N8,>pZM8Mp(_be;3d4\pl,c^_itr52C!kKh@.a5$[3N;pX%!6>U"%ZLP:4TpCs"jH`X9 + aoFt9f>pe2c;L@MgUla&*B%9&f,9q;as>h_ukSl=__;tO/ + 6";&P;CfTa@<&><=X`,H>7RdbPe/`S'D+R@+MnH_CLYV2"FR0/Fm8WHqeGSf9%;&]/IolQ, + eNEP$FSJjHq,MP5;Pa1k=Na^?I6'IX:\;[Eo!Zc$2S+"Q2C4(d!m6O+XsCr!OGQ&O81N:@+ + PA^i=\&s(>gV/@QW\a(=cJhPHpIb*#[+Y@fuO9Kgt%EqSU`knJ63'1*(&>LUKTgV>"ths?) + CeBQc(JLJ:4)@26%'qf%Kg&>0WOeKpp_XeSPd>^ZNg(;kPA3Dep<3[sDj./1S9NtIJ=WI03AG'.)b?8f + BR"W'O:!N_jcV55X>n,'Z8-[lu#i.HIh+c)K?.N:uf3)t?J?@:NNRE>j"C8^fJ0`Otn,e,? + hb151%Lq%Do^t\X*!0^4!sRd#e)CL-B*AB][VU7l?,@!2LJQ\^`[+mB`Eg]ilAO'iQhtBW9 + HZK`k*,Qt?VI_V,d#=*sAn!b7OINFE6a@BH15Z>di9i%$Gtq[ + "'k4Z_im"FH*SQD9]@h#\p*\$,%1LiU*?ZCi%Xu6;E2\c4lJ7-B#hCO3D:4Z^2(>^n+ + jsU)BgKGgut*^VkB$R!9.6P^`$%I;5CIU:Q]T+ZG%["$`R7>o:u/=@Hf$rf5B9FfuV) + [#j<4?R1-;e8-lAPQ6:<)Lt\*G'Wk?*0dX#SCB",eopNjj%.ChHjd]?Y04EAN=<(+c9b8)Z + ]kJ>ofkp2J->F*lSC7?V!%d%VfQO5%_HNTPShh"F,X,Rt_f6-As'12AQO+036lbe.*O1\`i + "RUuE/5*f_6t,T'8\Gb4mVe>9i>Od@0c.C*HFk5K85@KW>JAcrlakY>&C-oqqpD:=nk$t/" + U-8E[]3TsM&B[2TNhGTQ)/ElnbA%gOGEEIf^P8!1TB]a&C31PYCfaZ\N&PU$_fj6jh%qiDU + A8F(rAk3/[a5i_eJUA`"fJfNOX6VsVCJM9Q?FFWe[iu+b]qIK>A`No(P_!F+h2XAoXce:8CkSt,COX*7Z: + _Y`RlS>T,%DrK"!SiaI-3,'iH7Cdm,.(Wp1JM9CpEHlSO[+SboQe2dCt%?8X:Y6WjYKKZ=5 + -mgf,5C>bmCrm>e/V+Aq2056Dr]hoHDSBo-3%5/"C$D3j-u*o_&iW.aU"B"1#:0HP+L3o/^ + ,mYqE[ENou0j(oBQ,h%"/HY1CPW.sgkW,&&?^<_VDSPn!B_]A-Z(%0`*nqa!+(7G^fS]%!pBL + #Z?s0*'f4")ec9F(baW$h6Fe1Eso1j!$MQWpcU+V%LD*QH1k6oAPD7>TWX0rh_C1KE!MfW=hpC2ZYldEsY(#Ef+nH1NP + c;F&)^.*-]"<=*9p`E]nWr:L"/s]#?u@mC4&-*7jGgfh2/a1*Sfg96\HHO+PY-JQ;_^2CE;@9&"4up + $%``4^2$J/nBp^C(9TG*Ue1!NHCA-FJ\\Q^!u\q[.N"Vo]peppt#*Ie+Fe\Rl=9/O)kS6?_RL-j7cu5T46JLA')2jWX!+8De> + :OBD.C#it#nk#Aaa^LmZe3?Hc\n>q`dMQ^BFJ"]'8_Yda8?[Iht=FQ,FTnRltIZLnuDGK^;@$H(T%j"Nbj.!IO?AH-`&U?jcXI3qn/>GE?J3TK%/"# + ku-boeAc*8$MaeF`kI;'&TbW+4-eOXkWlYf1()b08V0B7EVaMop;utY@%fh@1KRG'8rB7B1O)4SH7MLSr]<5JUfZ_/r^L=Kc^_B6%p7jc`3R$_L&hB?,CTaaC#0I)% + +WcrYVXXShe7GRpg'\Li4M(4Ta0G^%^jR#6P`-99=7#-$K` + >6XT?XKLR7$MFD"%Gf42O)id@X&bX(r'-f'M78e(]UhqV;b>PY>,fT"(Nm21bH,Sif4.]5\ + e+s4PKg06J<&AZU,_\kt;a](*D++8"<`N@hH6$V*>HV%?0+.jd`0%>BCr7bg$IgZ9(N%7JK + (A!h\lZ&dHc>.?HbNir%@dKt"F7isYedD+!jiB;`Z$*jJ]"]S2>hnn-^DlejI1s4L,eLX,)* + V\JC,aPKKQ7rc&W)c`T-N7I*iC\pXQZ)HUZfifZ3*g8:>`!%POIIqu2(\`iK1('Vi#@,='P + Y/.B?id#pLWcLFa#)\;Qi$GslHis_;Ofd.,eE;4&WTO8ZF(*MVr&k/L*g)>*#mQs*Z,UL;s + 7&6R":),&t10,>?UFKSBVC!L!H:@BeOX.\6.A3H#.S/QqLe;>+Vh<-JR]2@JWE?3jP#T6f\ + >p3ni4&+>G20OnX(L#.1OS.@Y=nu&_%eT_$mdtD:b(`k9S#at:/%E8Bl#>ET='4TY'Xh/W0\#oOZqnFuD;,l(:Z^h+X:8AHf6&t"L#uu,]EE#(S>2] + +4cZi^i^2#Oi86!b9F(Es&$ik%X:a#--#gbsR%)J$EnQNR`?+EqP-]Brl6_or10uPIQ#_O9 + +;Ab0nWVg6D`j*0t*QPG_K-A=FIJJ?)Z=KLS8lDIe/5&n%]mjH]`5]'`X#e\:XfHd-\ZWGK + 0oWE%V!U8ulq8,6Z0[ArN@-P7%n+feD')IL8-MF_V#7-G31[T_8D8ddp(mNfr=)nUaaX-]lP+8gi@K=M,YqWbY(pN@YE.'`-7.0<'d + i_GfLcVI<"R]QALit7&fr53kV&d.7KFi^k1NRO)):QH8NtLiuG_D5d;p7;)+RHcD](D^:9h + "MV?FZuHW]l?7Obl#j4l9u)c(,"b]rn!Wh7ns + 403&Hti"f?j.J;+-<)0;Aa*UU&A\I>t9'N$.RSeA%X_6*"e[78H;f4HO2sB(mK6_ + rFRJos:r>jf!H%8c[!_:sm<63#J8hpj-_"J?aC8#gC1[YZ3[lYk.m9Qg3;M'[go0M=tSTSn + Rf21+*6fE]pL/OT]8sjHufC]r(oP.LUa_+,CSU@ZkNMFp7Se>&!fW`ntQGk;9pL;+&XRt=^ + bsp#Sf$05\bAs7.8\3_&F*E*DL,qQLlQ-k\"(-5#Y17+h"'@C8@5bopebCd%>i_$1E-g;>3 + n%9k1TH-aISeWF7pTefGbT?Ki2`=F7U?OUB=8T>dn:9EBg%E$1BQpl>9`cMS(ih*?BUZUiS3*q`m_RR]7m6:q8$Po.7;8-gnYGT + dQ>126aNKWCL%Vfq%fG%,Nf9ksoRH2`4YN`AOX>M]JW^WN88'.j+I5tOGW&'#$3,\LoYSJn + CCF80O$^!AL7uho(p`C&b]>7P`2r+:]K6F\1T\()Y<*S'gZ>&=^,Dh^T,l*l#plkS?^eIES(HY=hl4_I.R\EYF/l-5b+kco?<3YCApWR`84@S(&"hKHJEjYhRHnG(_c/7uk3 + D-"/%0K%3R_+SD!ro07G#kT"qV=4Q*SDqbtnGiBNUb8[KSkF)V\V1m(JMmoJPa-)![N*ICB + 7NcH7&PSNn2GgS<,'GMV"Q;seS,\OZAR4Si*P:&9]+W\ihZPp[qYbb7u+Pu?JnPB)WM'Zs, + *Zc`Y_5&h09`5^CDhO;Vgef"@'E/eD$(B]<.4_\nTc,cTIlK."$mtbc2+_HGU:J0tJF`Z+` + jj,#[O5>$)a6,T(4T&(K*M=DS-UlA_,GZoB:"%U246LuuS%O`mAEf.5l7S!bo\o\n8*8&7> + m+$CC3.f)7d^cb/5pZI[F@7JXPXiNdaVLphQQAKe//FBp=FHAl5,6D6Nl"qp!?hDJb"MuBF\rsV_CdMl4X=t=U!)mgJDuBDn + <<4^pM5'[1,1)9V.ej>fq#V#Ao^uY^6Ik3#PQ4'L*:'kmj%oCtH%HRml>kcU4fhW + eC-6/XNG5tB!o!#WEO:IrkhZ64Z!KD?7Y#so\phS*o/'tm?:OX)$2D&35:)hBpe^tTh?dOChN*0A_XA + %:A!Ri%9HkHS",YQEj'.0,L3CXE.R;$>J]3opl9f<7O&Z03h1(sald&b5p'/p8;A&foC9*: + b!f&fsf!B-K`A>bH9b^aC?,0-``1,Cn)b_&jp'D^8(-)aV@e`*sbX;BF7ekAguWct$47N3Z + 68lEUdD`E)/B973K]#dOYWD0EPbs,Ck.Md[qcc+!a-j,a(h@1/T> + q=Q`S"-IJ.:9TogBQPp81$OoH2:(8_-DX3Gu*jU#1dbYr6i^,q>/qFTe^qhZ(EA'R#08$K$ + 5h.Ol`^O=F0S.1s_:(+@M\cu\_NEd#9jm#pdUlACf$6t@/f=\n5e5301.$a=9o>6r`A==Jh + N31,F&#BT4;[Tj/qICi,bPJX@KmKY07Y0;L!C$hEp.%d,!fg7KU<_-Ji58h0p>('EE_,e@5 + LoA9G:&$P>3->;W1PT(\:g8A=s8cZSl3"2R@9h+K%=8FsZ*Y4G:dPZ[s.FL@s#R3J&>'bqT + QBqU:H'e'%aKD+)0\g.gu!(kc*IJ[YO9Ql"6V(%_hFe.2uGgeoGK!ONb@J87IOX[5e,'(d\ + 5V8F!fiZ%H6)"$WDYjQQ$o"iU/1%%0JPOr4g.-.J^jRY);bWsHg.7FSGjp#Ya9^sqJp@U7S + 6LF"b105k8`Yh[/(6@Ggdd.PVjpg7P8WoMF[%7;_U&ic@"SA]kA8`9;;G#<75U"0@d>6YCf + gg]E3=QPT1j;W(.7_[+-W7';@5g"LbnKcP@6a$Xf(YnaD$G"3Fo + 2M\\5m3H*F5K8VuQhd/ZgDH?">V5nMW+)bNpDmK3o(B=SlJLM>H&@Yk`&3Y#OZ"(35+;R6" + FVu`(Rf&*F;D[obK9^:L>TL;/;^%7h"XXUYP[US82kP!G0hPgn!10a!J.>Gb,BX0@. + CJ)'Tj)mS]dHkund@$aETH0SIqo,fFK3j-nH-sR3GXcOCXEY^/"qAX,A`J_Ed.(3NL(EagD + H)r0`f^-27D^lDb8kZ".0um'5LkV7s^g7>n^s=(`EL@WW_DS<$dG]XlVoL2(0*>.b+iYfM@ + 2<;h\=TKpZ(ufO'@M@tn)uL6ub2fPcN^F,*kAL1H\.%hh&*Vc@,&2e5QJ5cbLkP"rocLR=Q + ffUn$1S\,'q8!60_g_Tq=9J_MDP0E3V9>$1#XDQPV4(Vbg0^]q + A#j(I'13lJ.m!-Oo&&k+h\Hl<&Cq + ?Nn/Z`@9=X.$Ysma60N$XO?\N-Q-h'BNbi*G!blJRtZ&^s3Mfi^+QsY+"[Zg@)3`o:n?b5e + ;$76!F*9$k7Og?.YBG\qr).C&rO]2g?]U(ICoMZ%GIh3^GX/`5sCEMdVZe=#QeWfoZf-kF3 + a7RCD2fB+GQaUB0sHRlRRh12XC-o]qWY>N93@`$J>lC(2,*8lgI."WODkGXQ%b7sNFQGUtn + oF"+H$$7(()"LM'RU,9BD\sob3gTS4.Zb'GN]:6FEgV:B?_n93o]UR*WgX!PPe%Ju*3^nF" + bI_*dZ=VP,F.19F + >eQ,(Ig?1La>-B6+`3[`,f0+Hb#W96//*L)lLL,;oN!C`LL/G"gM:M(i'5YLp\%]Ra[D?lp + Q"@2l-"'j13.aK?.;QaIJ10gWRDQ'ImUg2ru9`ptu:nWPZ$;Sie\Y==9\#k";-)N+,8-DFjNX+1WoHl7sX-#(T(BKTPGN66'cG$jK[2T6e#C3e=B7^h+uQA;q5/T + eX]pph-\_RA(Fpuet$U-d#82mF*Y3FH@+iU2a`oU$`WR9f%l8:h2g50PM'6.fq"Vch*KNGU + ?n3N#EuW>(SbWnd.>BtFi2\AUY5Uth4<\\9%.S-e) + =h;)ojFo2f;SR16>9piS\#Ii1:>7h@J1cUXRSL.3%6)Hf_M7dG&j=gUlZ;GH\8Q6RbGG'>& + Ds)>Y+46NB9]=Y:WONTa0 + /\s6M.G3+\6o4QjZDe""Gh'J%G$$:PS!Ml[@(*i,dZg1r,l^k`ShS8Cu_sC^Mm%2DehTtR1 + e*UJnm@N)"hR$J!-Zh5nFFAO,HPJHN+u(.rn"0FFhZ*'e"7TY&n=L(o9%["OkJHreJpW:$? + %(u81[70%>hl\8^9@%`1\4s4o:J,5WnB;B'M!T?`mVaBpN3B`lm4jc0:qeh4=F,I&]2'F\0^65J8mA0i_X$dA'HjZM1XX^,\*+m2 + 7Wjn)\2r9j[6r=M&hk7i'bhmP&lGXFZC/hQ-$^Ye7BPN^_P#6*_&3u."1$hted2gUPc@K6R + _![*$70Kp$]Ka"0$G]Z+m&W&p8O]\ts0c>s?j,r!dIR,->8E>q:1d2`l#g0uhcqM.V"TZd/ + 1@RuE)A8T5AFnLHrddA/;!=-I1cePr#sn[N\o\Jp"K;CdPu&3%B3D?;C>^SDI2o*)r?CdVd2kSL^om6S.hflioJ8G/65?#n`Q20'eK"o_ + ar]7h@,R/!KYD`tp3Y)2*M7krM;*_3KaMLD(:'?G48VY#m]8M@&@6V4GmAdlg3:`V"d;R9I-/ + #qmP/1M::'V#7=&4\JZdkGo$5N4)P2GKo6h`+@ePik)&ZaB0`:G^Mp5#8NWs$0C;'aI'%Zo + &+4d35V-'N(OZ*h4`9TH"G>ThR-Y;^*MH6drF85>Y<:'h;/$[5@,+c*Z,Z*7_<-79C`!,&G + YWl&)LD.e;V&01s\%a"klhBQH%21M'?m=Z09HAm)I(,W$*6O]cEj-?O/J>:spODAec1rPd8;HVID&g<#(OBHl42mQ?.er:\fW[fR$C=''':d'D:"$R2`i?a3p!h+lC + *ckdgIj+JU!6?&kf$]36Or=,%=l+dN + i]F$/&5c?$Ym5L=L8(Iunq]f/a:FZif-eoeZM?eBK'O(Kte[tIqLX"t;@(\b74\_ms((LuH + L^,M,6Gs5;rk'<`R/j/]rOR_9>6N=28HSu^:mK0!NR9?Bm'XbfcWHu\)Jf2<@`s7!ECWR'X + Q_Bgmhm`(PIm;QX);GBl_LM`/!=q^,g/uci*b/pg*A_^c"G@;8E(1."3%5#=ZhA\U:!,OOi + ekTX*sW@1'#HDgp]rTN-7Nc1'`r>PLjES7@3uirk\)7#YdfGt9QS+XaDf1]pP8qF+[B^sJl + q8^A*2='Q#p2ed7PcKOVTB732k",H0e%"#WM7#fiNO$S!q&a*_66Dub5qu7&&!l/A2rfEnaKm!8")O#mX4Ru[&2O!1U6?q + DQiY(@>(k!j93>V#;+!V(,%WI'Pn3]j$Fs:iT60"E]]^3?O@e*$59WOYZHj8SG'6U3*8t;S$"(Blr@.@]fYU[$NNNn[B'\VO]QjBhr + 972gm$,>/Hp"eGeQ3jCArfru%2$mZeqln3-8I9e'A5, + %X-KQie?DFDKX::(ImXp4/m@?[F`#,B'ik-]JCGcRL3,M`Y + Hj%H"@Od&%A?5?Ep2NDVacq(WQ8X46_03[J.D[:>f@BI0,/P65@!6KS[%/&[4)GW@Zi%8Wp + #SD/5"PQGMun1?]YD\;n$VltKhMHZ1SM*PWGH&RmjoM/bDk*-e:!%]"#CA-J2\%Bc_+H8UR + M*[euFk8e'FH&lmWqLD[eD;XZjs/7>WaU>sW@$CJ>aa$l5-A83W[[+T-A`jSLA5QpL8ht.C + mt_)&5nB32+=srTO4AP%SVk>cU2)"dYsFT9N9Qm97;`hkadP##jq1bF4D3@"kLZSh?Q)XfN + =@p+2(7.NZucMW&^J?c>8Z!;_d]nWj%&@I3+6X1J8K!$)prYi.?'X1LVglf=CX^QqNGtnuUeq":61KeJ#Vfju=08GWqm'K]p!qKq,`H2sa1Tpo!KR0pc,Ah + /.57k4/`CB"VAa3\sWWW<+h&NfrD8g^gtN;CeeN8ngO)>H,9*lHAb;b53M^T2*'oOd#jX.ThQ2.@p;prrC$DE'NLsVG + *S*HL-4^lV:T4$/g&euMnjnEfgWYg'0W6ELU]JPheq``;GgbNU\C%)kB@6GjQj2C3T"O1f^ + K`iQLaIWiF?cJfnY2mD%3>L%Be::)Jd692Ug;?&H(mcS$[@1-m'%,U@%i]\I_)DIeD$2#G' + p&L(@GE47s>+^'[+9gs>(F\$u)Qk@AjT]Z&:4)A^'j9Dg\Z\cUVC=DfkLYQC@Y&SOB)!C,f + Q0<$g^#bUu"T&3EU"7:Nbg#bUiOCm;*=aA=TquaoB65I&A]6(5qCm&&9,Ln'u=:-60p2?j=\=>"@,id#GU3;J7G(Y=KM9lWP](A&1N + f.*B=K4J:Y]eQlq")4.`Ec"AtmT3*WlUAqqWsXNW64e1ZnFn@op2WuIP7K/kGM6UZKa^L

/.hh_),t!\s*.TZ9'UZ*Q8^lO#+!r)\oLGm^?5(RYXJQTqaf5-_9H; + MI<7mK(+ASl@bC0XiOkh+_r!`ne)'@`DgE/A/N.PB9P-k_8F=0e#l/NCQ:e`,SX<3lrZ/KW + 4&t+!ebQEKQ;rY$'Bga!fUMV#Zo&g@KlZoR[L[@>\(BmCe)Eka4&j+!g"hYs#1N'YR"9l9F + AI1(5]ksWTY6e3LpP^9#EZoRM+U>EOEecI?-3Q.h"j&Ej@2OSMQdp8J(J]Rm!g9pTsG%ZjX + %Tg+tQQqm9<"Zt$%+)f8"e(,Vfe['Qkk_udT9R`YWE)d5QfE?^/eWJ7dU_`C^!9BlTn2iBY + [NLM0q-q6h5>"ZWBXs(?O3^PQKTZ[IN4B*4gN#Olu0YE'S9*Cn[)2cQc,8*,7L:!eR1oDF/ + Z^J>VK-\.QYXV7#>"b*^R#J28XKTfP_otNeZ%9=#&Fr3pEZ1FQL9,s(@qQU>)iA)s)F8%*T + LZoa]"i&$LH7f&XGb;!`A77M3LV88lpa2q30+c"9g%+0B_j6,8h5gn8OK4&Z_KSRQGi*dZs + (;jUH6Gh'4UOS$6cXgp4^]s< + @2>F7/kbJnZ!4G/[$o)f9"H"-7*DOS"%0Y1Qo]>WdH[jP,8I1?^P:[':QijuADnP`qJ4<-\Mo?45Y0s_2i&\.B\&9LTo:W*V[<>AB],uR + E_NAtr#.]Y>EYrX.d$74)bM:_*:8p;Ue%E!4@qj>[$ + eM&b=1'V^D21,mbE<"s\<6R9:kg6h3)_du=@!#@h'Sd=Y(i2F>lL + )+rT@sIAg'[8lOf?L^DDM`1cR"JLH^QIU+[<"4 + 9]gD.\c$`7GRMX)cV1d*"t>YPs;=ad3]eSN!@0%TBS`78f`/TF"\^ePkGgS(Y%)'Blh\&6\ + T1:1aB@geD]HNFe>aZJ)QKSfDCF!=QtoS=(gC\F@p(-S"6BTOFH(;rS+]CgVcc[oTi_AV,nYq8X/4B3K;c69;E8s?>s+@@oZc=ZN6 + ':Ns5J1ecK-7+lKED3s,p0jcU/Pm1"s+Ss9rm4LnSV'Y9SmL/3_3dj&2/mVI[F"+Q23 + 8_dUO,3H/]l@@e@c!s1>KJBHR$mM]NAd$mmjZO.d6EfEDiE0tGserj+l9F52b^;EW$Wc1[B + :,^!a>_MHpd^a-G,;5i=UoM,)i_DYsi9*0)r7;7h!Yo%/,LnpAMA[:p#28cX3pd>```Jl:)dqBOiWPe->A$uo7HMsX<.KDS(1f + NhaYtN1ieAmjOih9'^`'0p,U4tIWt_c/;HAo+]1>Vo-pm+*H`=lP2qEE?k'ht%S0qo+RYh( + L'Y,r%+!`%l8%#4+p4hdMJ(,rj+Qbt#+:gV5oRlF1Xp(^P"#%ePi*p).RiXGZM5IHnX.^@C + d2D5`(e`;kOKJ_],Wd^DH_+dHD9_1U;C5:Gp/=BVrFr5B1C?Ll1>ae8=G4,YT]Hd$ck6]O= + "7VYj&kQ5D5.r+0<#/K\40j`2IQY>(]`";juD/Y:9?K6TpFi8XmVsm?C'k[&*ZWfW`]_%Ni + @rVWfZMEWg9aP1P4cl;eHaGB-J37Q?.es*i&fZ/D7JL(8;EjWL.GgL*k$)4MR_>Eash[m*J + L;G'W=gLS;0'KUSAPoFi/^m`Uh!eEOGtMTkDSfA]P]VT+I^k)/B6o]X^(>8/W^p+O_eZ)u; + /]]g0.E_-W'dlg(Y*7fDUE*()66DRB-A6.>>(7W_]][@aodOi5ur?Z?WN;_`6o+rL>&)l0eF0C>`"Tp98piHM-io42^/I&BrJ!m0&#sF.^'+E2N_.5&P8Q+3JQ.fQX#kAX&f2fmUBrA@rMXXB1GZH + a$?TP%dnDRMTDY5>A+J8eOl]cRHDVG,9' + qu\bD7:F/Ddbp/1G+^@U0$;GIRDaM?OJ[FrT>"rX!]`4^dId1)RY-hsPGaU,Fm>c)M + d5R\P1o#@59_rKRFp0\b*t[G'_Ikf:Om8sVFNH>q_R=AlC^c]rO(ic;)io2"W@a%+%R&1W:)+7r2(8ZU^iLd8+Z0>#dI<lF^^pnX!PjdJ%0OEX9GI`IODGpB_@VYP$,Ve*/I.T'aVt\oUF:O$Vr4d0 + &W!\?lP#MF9DiNa;/8"$`X=4\3(AK&D"E6$e8uhRK1pZK&gbJM$cnJ^N?cOX9U,uSDr^Ec^ + ?)_t9$33NkkBfea>kij0u+SY]O3P4!5%/Nap'b3Opha^@-DGdMURH?4>kbP;(Onm + ),XckHom6-ti>@7.UO8AdlO<,8oK`$+Lo%[!!W10RM]br&5EPjLUX8[$pA-lOk'D(61(Zek + D1;V3u$K(AQLn]Z&)\d$RMaq,+FU"cG!;)C:@k*kRLkiA>YM=Q)JLs0.;g(o[EBr+W-ZCR# + tk`$.c.N"@0W9$@/Cc)LSb^V8nEh[H>[qU25Q+)ZT:m3i;+a]=faT6gNpZX>\Y[qjT@pNka + lXa4Sg?WAr\4`-5STp"1M6Ef*iuZGiIA3;bLj92WAUFh3Eua\XR:KNY8gmpj(bpi[7m"WSAa7X=e9%G\diTP3^FIJT + D7>!pk^S'3i^9#Yh_H_>ppONdHa87RgIMk#$%9a[a&5S*p6in/MrB_=3sJ%E%]U:DLk=S8T + Fgnf3]:`=Z@RfurS&Il/36@&usE`8dps;FPn,@2KmPP\<$nZ+qg?eUiQe2ti?d)p.gpcZS( + >n9is[gQqZ#LF&?Z3]n`u7''Z*C0nr60CD3Fe:Po0>."rM6'V + e";a71#l/>R?ZEHr/81eD$56->"\k4ll85SA'19gr*=0B0hD*3jAt/B/Gp(GQs`X!"g2!Rh + q,*,/lYS6^umgrTWiEIra23]\+X-DJ;j04U.u`$iM3j91$q;@Z#a=U_Z?_6,[#aP%SCE,LZ + o^6%nZRB38,\k752@Uk7GUEK@[dth%)MSVftYSAVFdGY(GXY@1oc9VG_>Q\BB=s"qTQ74G',l8XLZ]F?<@f)tYB1X4 + iEeq-m^$hWkPe(T4Gl30JP;c8(jpLum+)BYWXb(P?!'YUY>p*Q=4&*sd^.#%@KG4RF!<'_ + \AGLE>]3`lfji;YI>A#NN3&lc)/OQaO(/C>$2Zk5_rJmT96`C!?:O]2 + r8lVH1r?:<`,/Gqm[a'r/1`Fm&AM==LF;1V%EK*4H]E?dl'a%^C + Ott$[b?8a9A_Zm761\9k(o3haZ3?.j-82u16AXS\?9p9I"f%*3NEj)Y2JtXFN3+l?BAEE". + p["I!*O3WYjf/()4t0agl!kOQ(?>7\5'$I/87qiV;$fIJdq;#3ebUobc'f8jjkPEnijUBWl + f%6)0Cgc>eIu*YmQrFkVgf6Xm>bC<6MB'Y_]q\[5NNe>7Y1Z?&Z/X`O_1^8Y<@*LEp%ea-( + 6Wbf5db`D="OgIVHQ9sPH?-%`V#M3dJ)4j8.jL?Z]c&MW0)BR*tAn_RKrH>d*V^%]PBhcoP + uDr(B,p]giX>RuF*?4FaFZ=hs*IHk;N%d5T>UqqCKR:,)g3e@Dm`Xbt(b&qX>3`Y%g + ?;8O$<2[TILG`tNf=C^31?H:YmN+OIa,]U9k?RJIF5D>kq?K=CFZ]fp8gDN^^E!>HT:pA`S + ^[Fj;J5S=sNVMo&q->;A^!'\7\Yj&emfTdQ;i,na];?)':)LS$^pJp8 + U6=S?Qc"VNA76PW`/*m![U?ebO7Z1_MMMJS[rcX^fVOl>u-1iI(:ejAVZA!M20![KBu6c]S + k0+7ohE;nSs7_9V3(f9P$oe-1L_R(APA$@5-nbunA + qL;l3eu@;/o_tZ#qsmW:+fnun=qHc$dbqPE"gD89L42j-E2&8n]')1;jOX44?O(Oq#I&U]n: + :Mb-q@)bHS@,RX02VC?JNi;!9V(HACAV]Q3kQQ<=L-;"kNH[dTI+Z$a#0O-*km7$EbrjmfP + OS`Y(8mN:K9o>p5C@ij(8s!e`hM#;GLWJC+lSk4Jab!!20ljpYsVMID,o@4+lnAEIPTCroN + ;n3r">YlZNZiaFPJ$dgO=nM(\(@eRfbfkm2PDgJoJ1hItn%>LU.Po4S0)6o_MnY$jUV&F?Q)R6C_n + Za#f[2X+r)mR'p@*'BB#S;b\ADr9,ECM2T-l_,r*Md5MBltBbjW8F+*jP)RnaR\UN?<.u(f + (JDL]&$^7)H+,blA*E`5`YUaVQ5J6n?3V.;YJnq&&Yn,-idEnhD@E2'[,q#kC*L!-$]Rf"u + %C4"Qd0^iEZ-3@/]K-*gf&nmNJX-Qd>^(_QoeV`Q$((i5?H4>3o]7aO&(6@[6l$A@OTZB5k + jerOF<%>0]^18'el^oboGm`OV<,;pbkNt:41ZQ[RDl]3'[JK#Y>+4?o* + OF`B84`4B#pBF(@#b`Xo%7s!bD!^hQq^*iZ$P_JRIQi!@TFb*E2P]M_"d6`2Qpml_g'4Q-f + 5Zk5S\'gZpZ6*qXu-?R\/Ya3U'"Kn,=+AY?MGR,[]dki.6oKbl%77;5h3:mYFPLah/90MXC + VUO\$1[;Qo,(jCFC^FMQUia^J6jlpU.koft1GW\nb$`,F13AIh&uQ.1i9ommmisYAV2V`/p + )A+P5D/6]ju9qYohoQNH=s"GV`0OaV'O' + bHMohT]*$aUccbBhk-JD)jV3!/A)jp`hpdQ\mV;6p&u1/L]@ekIF89WFtaP\rm(%\TZ26`< + P^_*1i9l9;PHV-8#9dPXKDj\4DpC(o..%R`?g!0I#OZGNW1U602CKYLG. + .\Pu&RrIp-'@pK479]@V86)Wqp$lBHoj;k;?aZb@:h5^*%"OaZoH^K1pF-,(O"66uU+VB=nhUHn=\gq^A?B)CA:M + Xb*-CAG.EjmW@pG$_J203t%F14;RpH`m[7VU>D8Z,U$%2f[Fj*>]nT[srca`I)mOI(.@JpO'53KhLFBD5TEh@#'1[G` + LnkI2D:"p[N_lom_0QGTkU^@\7nN^IR:iGp]dA"a6R5S3+X)E-J+)-TY8U"I?jJJu7[.p?p + P;-J.5P9_RFtj#q"ShX7KSd2$g[",cXMg93fX5DBC;k=1;OQ%G[Q$T; + GAX-@@Qpse+,J]>4l_-XB`aC,CBn_fE\3"GM6&KodMPb8KM%p]4f+[ItpPkl(f&@ok(a"JF + P@8luiAZ`Ak8:L$UEEgS7+P&m`bYfe+B[GG(i0OJY[^V%9k&Qk)GXcN1PCmbZria + ,&_Z?.HX6n/[Nee*SbSX(.<,u#2=DYP;nf/kuH7/6A;Bk`d+e!&h/9_h)IfgnuFMj4S'O"! + #QPg,:MH^eJ5KMnk(Yfnn5MJ=Jso6AOs`J%d`k@m9r%9+X.Ns)]S>Su[\1\f".K&U5!-5dR + Odj;Y$Wj;]Rq[\F@:=c+r3F/,C'qopj,PKX0;^%(L#GIl(o)\\?WAB?,pf/(@oVR8*Zn_dN + .SOCpH.#Q'i0aO$"H$V7?oK!8.#!qr4eeBZVQhqDqCXD2JiL>eVn.;SqLPS+KrB^lBr;fg1GtD)1S@qZ>+9P06DW%'B02n8H>"aLefaTb&GYj8*Mtj&>l&<2R:I[*BLKCI7p + 0g&flaCm(TEgQ+.A`VHD)oi"Jr\,,mTr;jMo'J6^50l;0EPQ%oDk31T[%1Y$$+@eo-5'afZ + jH=\g$_oR?T!9GJuDJdXgQ]0QBD/e*QtYG"rdkq`b-2E7g>.B(DZf@>j(2G1uAUsSI0k3#r + A)B72I@90/)],eCCKk=L11%@Pfqh?DC/6sSPX:Y1BP5DV$3,:rf`X33t:I'B6a0nnGLLH!D + GZBkFPIu7`cak]kJbJQLmV/0D]t<+6qr,7Njh?*+^,RrP61_RsPFGdAOQ&'M7E<$grf6!L& + 81;#%$Wh)@"\[>UOpB:[[@Y\#%FN4]N`REqU-(hed/k@"'XOl4"8&A_3#]9nf.aeErWRQ$c + )$24phh:A@?8Y*$Nc-'p/3l"tEn@/]:csZ4P&JP-?`2P_bD$X;:@BB(A,o/5[`bB1+f0,_0 + 8^K^lr?.miZ4pf*G:=Z\.'R+Q88e2DcOJGAi1K:)b64F,16eFji>D3>YsV?Xeg*e:@*". + 5Y;\"%Ll&Or>>MoO$>k57L-r-JZZUh$99P*bNM_*ddCgN3=V8=_l5o'r=PYRWr@uba2:Ht6 + e%IonAdhfX_CkVU0S0&Dj"cDoNAE-SLe.-DDZiG@"K'CNqo,sKkaH1I<.u+UP9padSKD_h1 + W+T%_u)mS3'l(]RY[M==?TuDdqhCT&(ZZHf"udc#:aDM`Rg?Rf>?:p*Kb0nI:j,78Y\7)o. + iOn`*bZ;8/#i5,ciOT&]m=MhPa9#,<.O(V9>.m]4J^;^Kf(pcB3A,53' + .nF.(j^)0D6iE<]:R7`)QK![d3Q(1Vd5%HNl%m[M`*k`C5X"J$`XeR(`V\s'pZk,ql[eBfh + UUCJE/)`WB&%lK3Hd1\NfRd*4!h`o@46Y*,AP>r + XGN8"rX"%:rb>@`dLl]<9CqYQG#?.T;#Sr$sT`g`[jqt%P2Bi\,PYNYBMacYN*_\K4;4^]/_MQqpP'1VnXN3#i$%3#_ + 9f[%jsJ;#8iuO/[>g*PHQE=Vn98F/CRf_b0M__$>gDC8:&`&2$D`4K33`W=OaF#PqCHlgMQ + [(S_!7T^#*c'*$,n+9$lTHGm>Bf$^_Ri#J(hJC%nR-lSgmF:=jE6/Upab2"t(3pq0+BbPmW + bY(?]jHfq64=3YaXF+*q@Gc!!L@d'P]:<+`UiK%?#r^(4-E6X5R0UYC/Q + ">5Q>F/psL1?IuB`gqIMs-kZe0XXHFk[]pOreZ`ofKE$<])I=?kl/M.%(N4Ve@t@5j`jD,t-gi + 4hnGGY%7kBQRd">6']&>KKMTVDpSF#49@WQNTAl3X1^I)O3Q@SB]FR:dS96Fg4>8N^SMR7_ + RB+J`hp@9@uh%Dm4!EB]&!t7F*Sg=Bh?cDapGPQV^S*,(rLSEa4DG-;X\aGAUGMY9NV7=.h + `,9b]L&S3*#%'h,TA]Qn1>6N9#JKq^J#DUN.I_';jdkn#5>WMgald[?k4FN56hVqTp.>WNJ + Xqf2U7^p;J-Ll[E:j-JINb/h^.F45rXPjh[0]aDs*].,C!VJ@LQ1ac7Dkm"XKoP@1#pEpoP + 7ZBJs?3ac)01S-kH"-Q97m&4q[7`q:H"j,tC*j#,JSQ8ge_d)(j+SC.]DpE3cRKoh-/-q>F + -.-+:CB>Z;-NT;-CihVd$P#b3uGGr&YZKZ]D[I"u5Y'+?f'RskT5DC%Q$D1-HD]s76-m`p_ + jcm*;P15>QdH)u\a`neg4Vj@r&MQR?_[-tk50S;711jM/R?KOA9_jh\AsC7@!GZC2E7h6Zo + RAb-/_@?WAj).M\PPpCRqB\C8O7/50bA#ni+gGNN9pr@8@$97aSFN52H!Hq@OAS@9HN + h[fFgYr=o-`o5@ZahF39&I(bB&h!9t76gol@_*X2mYdO]2W1#=q4Y,?_jJAd9a`/#cGl)2? + M?%iSj.Os7mZ9>6RVT]W9nYaq\DY+IDX2DPZ/6C]kfUJuQ%,p^Xq>mmWT0'PX6V%lQrb]n@ + @)R/Z5N9c`t"[,K.!-qZ-<32@NZR3XQ9F$FeBMmu1N&on-(/TKgi9IoTqXIm-b3ZXarD1_U7:9>G + uOq0K`DGp::dg2WjQKJM0=0%=mDCTZY=8jU5HkcCN**"r+cW@JP\rJ.O4ntA(M(N+A*X6<1 + ArC;0IAQP+MHN.,\&,9acnl(0k,NQXpJZe-8?J*#&Ng]Boo"PhY+j8pO4H2o/7gdqMGYIJ^ + 'Ei:r')!D#U!j/9brnl!JXd%;!o\bJ)g@.Xn+jPD#hV+.gC>6tr[F;-T>81.TnQ']hp>4TBR + s.%De\BCtoWMLe6#hc6aGFQ4FkjXiF*%&5.lTmfd0Cg2.&*1]./pV"-0A`mMCiI6OXNa3pF + sKRl*JUd:TPkDm7.ON*.#"2UaIdVV;jnSE^&p(LsEB.S.\hb+OLO,M'H1++WKf([5;_)uUh + tGuS^=/J^"2Y=4]KlK,Pak."2B'Uq6R);SZ3(8C3Tfh[P7.'PrO9p6kW + 2f3ujS3aei,%?\]NKB/U-\SdF%&ejQR60ohQ9:::Z7k-q\jT%D^#X3S8Qdn^VupU7(f>%@f + CjJY4tD1$b837Z687s:YgAtD;Wm;9&Or0p+FO"\%(A2p1MmX3dV.J@s%2'W3t.%#Xaq6oY&q2TY"QsTNIW0+qtXM,N)uO5p@<6Pm)6W$ + QIPDigMoteI@)#"tU6'&mcC6Wu0clMOX<*//'(O_)?nCV#/%ZPA7onP<;bS4DSgh$X>WB-601]T1&/4.H[_Q`,E;fe2f.Z'*C6tBar.5&G/:,[u*0XMV"`+')6) + *D:\Wp@^1'HB%/*B+C>`nYGAiZX2:E5F$"^.EU@H1DO,0*MEZ/Fq+OoD]\jPp@J=[IDQ\>* + _&inLIIs'^Ona)s>+skeinSZZJ8mZog0EDQn4H3HI>J"8PJ[iC"eX`%lqO-lBMU76b%50Pj + 6'e4?aL8e(o//K#$ZRL0]>`#tc4*WSMXnRO,ueKDHM"S>kBqTg2o`&.Ys32)fq/6p!NYqF_ + (47%sL/>EarA2'fj[[\.+3/U1_XhgcM`k-1^FK8$DOUgn'MJ@*tiVf:X8!/ZiSCh9h_r20d + 1W;FS93I`US@:'O1o[9S3gj[s0MROZ[?/V<*I,,`&R:sM"2fdP6_o<$]KF?RZ:J1^3IC55" + H^hoW^rA3/kU:O<.hp'a==!G\fo/5S+)F5#eGR%YU]1"c.XbHdQZ]NQs,XVuS4/" + Diq,QB1hdu0(._\!]OR+aJZ+..Fabfo'A.#uGC_EhVu.\*D/K5Jbu0"d9P4J_"4XJ\:V"i% + 9c68MZ#RQA5m@2FcF^kiOW!M)I0rOs!=:KoM-+]:3/n+u?i6neSQ@-[>ef'S+C + PP!5g8`*DUV>fAnn5IlaTVsMM^*(.J/b/hfMcru.Igdk-+"V(;+[NSk?'E]/0i&b'O5VrR= + Ha^ULWMB9e^[hIQdF=M0s!.B/4.HS;.aa0B)Pi="$(2m-KaL]TlHVe/4=oU1I--gf%RHV!] + Q;.hN#^-5*RY*?6kLN.iUINn8"@c*PS=Ci,eB6pfF["-7FFZ)@QL'*f9WbG]1BY/3=X@k77 + DR)P(Goa+fma;VG7uq:[gia#kl0;_am3FV4@_+o9_oT6)>S+\\sB?4H%-P!`Vchd'H9]Pmi + ZBr/cg'SB==$%8Tt"TZ,<4^&`7;;U7jr2BEHS[/t1_6*!GJE_gs)7FLV3;>lmBF,FZ1,*b` + "m"Ee$'ujf/b/EI8PT)OQWn$cR4Lh;hZ-0^uYr_+Xc[<>?64+>]du`TE*6V>>@oiuI+]?,_ + SB9Bcr$N8U;lKQo/E2kVK_MZ`buTNC_\/+ + Om1]9_=+"iVX7%WupPp^.VHYgL;FU19(`@%>$tm@_&A`GG(^-/")V7K;lODfM1)$(:0nRb^ + C)HF,G>X=@JZEj^:!1$dN:Xeh&2aXD5Sb-Uu''7b*s].rc9fnMO/\XVgW5.LW?J81us@4]) + \<@A[&GRa)=M=8dm._>.1R#Ln0S=3\K%XbB=CpoXVuNq>t4_$6>OTG8$JW;4r-^r.6d:e=L$)*pM56CJ]8 + [@4s%_^WdLb*X9p&W(qQh-7YI]VX<+,?`hJ2U&,Qm-%3/l3")'+>lQ$%)#qF>n$^i*2)#mfnJQnC)82 + S6?g$%2?L_]rPL/j0It[DQ3[m + 3XVR.)3nU7-@Rmje6C]([L[^3/C.Os/bHBQlUH)9X\DN!i89Mm]!OuLDb$WEej"\%#l_@Fi!h5j3?k@^XaifU5V@2GjMi5$cRL>FEO-Z![0 + ,b4n9*13tdDIE1+509'@%#bm2Iq^.i>grf/?<2B-:YD9ekSeIl7'RMR$%1MQEe`=)@Bqm2& + *t.4]Aeq!V.J9j+bt)T?44p(lL=,]2$`ZQ+Prh;g\[,+m'.\!P3hPPkVQ8R*jjj;=NN'jFQ + '^5g75D)YPm^:&j@DMW7*_8B*=F_M3s\`\`'5e?"a=R0$q(3KMQ_RNc'LMbOdtneMnHMi;c + &=]8%/=iI*CUH+%>lnXQpX!E^9LXo".p4Fc*8lc^#;ECl7V!$;kW^b9dkaCVs5rf7>)TC16 + ULP3p'.\ZX?_.l[o=M#A\.[2$e,>5;O)@h + )9?lOAMGadft9RFRtOqWIE(&<3$3VLe"JX6[o"kY.jCG(rmgBjjJ*@9'%;f#&>mHt^$<'^G + (M&SYS*C*?WK!jU7sS-BT=0'_ng-9[0-'<1!]QB9`_&tm,k + >eK>!PjS%lk2>\'qUScO]%`5*G@I>Se&mk>3MI+bH*6Fu.L`Tt + &Ftq,>r9rSSA,@8^#ri8!Uf\Lobh]=4^m;-o$US2<^qpg-W^cml(21##4WP7jm7i[mG@%T\ + 0`X;0mJtp8;_8d?ACTL\F2=!cG/lDJU_8J@(*/tRC_iIFS?pD^tnM!HVbJqom$N.rV:=aD@ + YPilE1#/#lsTmh&*"6&:Pl>lKsq.17ZIk1sp(s)3CB!U2gK"#MFn,2h)NK;eTIiBQ!ETI@p + 1DU%eS@$N3YZ)e)j*1-QD?R6h3rRtY2&5JT"Y-OesCd&S?/8$`5\4deGaRVF:lB_.&cYCC< + VZfc'Jk\M=5D27*8c'+asuZVB!,b + V;U&L(F+],Mjc#o@`Pr4K+U?23Mjt'pA(gQ`(\;#G3)N4:8k.W,+SY;9r0Ng\n&kI8h@6s + @E5qB&(SBWh:LF+:[t49sPTpOS,&"pC'?(gt605RJ2WL)4:>fRiZ>m#"$e + dM8S$7p7&Es7Q:kf;q1Qb!1R_$Mds8".FPiZGkKE,l\qH]M5nYRq6 + -b^+VEp.gqLX$h]rF"@caq'Fq-/5J?Bt8EL"g*Nfi;'p*Msf^)d>`hnt!_pF&Lgsf6=pjYk + tQ;+1M"<#&tlF4!I>=Ji;3h(;bSuJX&9T^rebpfK@/d24Mm(F4p?#;akh,STMeU5[.2+ee3 + ,GSV!VIf\1!sgO7*)Fh=%"C5^k=H\=$2@tm*lE^Q+V?tGoKcA+ode*:OK]mV'YZpsIuK#+& + `\<;+-Cm>r/a&ggWp3V5Es+eYVoD3lG/J#^RoPsjA^VH'6%mWHt#X6&CA.Yd\O0fc/U@*%) + @&V4h+NH3p>8"iXY]Ml8_pJYn\E:GF^BOjSK:5s%HW>d(qD8'.a-3r]eN + 3Qm^]@a]5Hq6n,kaG3VeD\TVSsV4?GWV1VHXbO"OQ,kZ + WG/W9RQXTikE][;fJRQ1]]:=IQ'DA3s(jCb]T>OP[g^mG!*JP-Cgtk[JGKIdg*N7"4 + o!n'Qsc^s>lLGZF7Q0+`*m9Bp8-QpGt=,b<;LfSi76MG)k0^_'dH<5]pFH8eX@]J):J0#KT(g%BgO^[VfM(/,lla,_Sd`-YadelOY[@"W4 + G8dK_E!C/f.X5Y%)@c2n[3&%aVJjA?P#X]POW=207VJQb_N8CrKq:*aOVH,gckN + ZT:`];1GhQThA[,,e7Ms)]c_KE!YDHMu7=+cq$g9lrOS-?-aOu(V(Ko`T%4s!e*ol=0,O9& + n%#G*=A0O)L@Tl/:OU35e#^\!dbW/6.&se5Er>ZGUHGMB=[ZU(8)3TAQaqDuLK^>N`aQ,[f + :t[>9Cor5>.+&ImU&\@h;X'[7uP-q:ODD + U)4F4&UhkO3Hjq9VSmrBaTSH]m,Mpk9T/Zdg@lgLW6LS._gAs%J7qe5obQ8'NpRKpqJ`=*i + G8$T?XnZNp/VQ`agZaO9Do91H50s@D@0BhJl>_5pE;AT0SBMa + FU!WnTa="Z)(@]WP>;(^G-\V?:6a2;l5lt4/ATCi&B9L__DJ?jZ$1FYZ?$C"%-K[P, + 6->P`THW'.&)4RXTDoJPBoqLhFWjR;[[--a!P4SVrGD`ZV-ChqM>kRrd*qk&LSNq)6-h4)B.cB2NV/+@O+HVI-:['>8c@Zf:coG[ + 1nRLI;(>#E+c-Z"&[9InDG$nE#@/4G;Y@C#],45VT-AYpAj54g39hePnb\okHtNa+Zf0Q"C + JW0J8F4cDV>0Y9G@5)1dV(ji2UfK!!#8QZ"Tj29+;(Q/*dn)OfaUC\ZhJh6tKij0S;n + 9sYsQS3Nj4RJ)L7!tqI;1Tm4T!?f9s"CQ-uLNHt + a?=?h.>U_lTHbiZ";`@R_Z4EB7jR$*U*]+Y1sZD'9Fl0r4HM[ER?7=JcNeM",W/S2GIClJ7 + /umVY(sQ(K.(NJ3IhVF@+[,@YL18XjQfl[fSmCVd9EDrhh&gW;d:LB,Z1ecd.HMo9&-lP_^ + _`"6r6NlbESd(JH'gYU[pFB?Nc8CQ&nF@sn_n/*-"PiSC4'ErjIC1un:XZ+,b^=c0VBSXdf + D+MR>N*_Lq`q\^;*5$c9hIZ-a2N]B9pjM!\m759)p84haVcD!5=@fiW6sE$NS3[WHcKoCmV + ?RhrBo?#I[I%,-36MnT5*aRZ5/rRXT+(A%QT!EFi-5C^fkFq_#UH?j=]W6[*$-s4oG:_71jS + =,'OduE%CQ+$7IqcbVA@bO4VYInH65T>r=IELa=EbjHd)])koJjT#,:[WOg'7L_<'=@W+r? + /X$*F#bhH37[n6tk4sYaJakq6EY9D9>mmVPi`c5KaHh@<54R(CcW7I!.[!KE'T,2i!C_RaUIP;5 + ]YgB!R!0Z!A%9/pc4%=Y6,+l`/%acqE7O__T`_2/65-6Lo(WcoIT..OAcg.XXUabh[%_cbi;[&OR70 + 7T`=UoYI@5/MRU:B[eJo[rA5R7\L&]:q0=ir2Kg[.0T[)BbYQ5Kl"K,NR/TkL0m_Yq4k0?. + ^8a%WA+G!tVWmEHl:\;FXd1`\,(6PIqotYs:WXLe`gju,(h'L)kmWj@;@_q0&( + 06'.S?LH&nd^D`O]_<+OQB97*/7l;Cf&Y5<8qk-?VsRPW=3(<2(":KUo_<1M?r& + -3'jd?X&58GE_e)]L/BY/l3r"(Ck!Bii>[U8lOUeam^FU-VMpJl?>f,CL&r!.[\N0G+".35 + V_3KSo"FG''(WID@hQ$L@Y""$7O&PZkmV""65OQ-*:;Uq_Y2SL`*uLhQObXF%ktG1GXI&40 + [6um.R$h6a"`bs1".'O:_kbFd*8grA;Q2]cX=['>oBrH>1-=C10H;lWsp^K=@ROto,fha`k + ^k/1lMLlE+23JI-C$o()&hi'66C%N>g-N.8="SWntAQjYp+qM!W@Y,LFdC>&OFJYE%VJchQ + kUR[,WCZOcL7M`hPD\q&lF8eC4g0G]h0fRL/$??$r<0d'"Rq]S>-+d"D);[2h]*2X*;^gpn + '^mRDcpHOl=5AD8OCA:G_+Yq"*L\!;+X[OMaN**DOjpuZ"DlBiN!cmK79&R*Ae2'NO7QY[eWUcc)kqU:n!]r.,g-sQ]OQ\Uc + R>l%g"?"4@:8e']VqZ8dc?)1lgq8e-^C6&J_TE2Y;5o1`[l[@hVY]95_ucDV,CEEDBLP+TQ + R]"JcG4:fpRj'i[_&Z')WbN7[Qpp6>YX'ga8^?Mc=<)`21VP\R>)]f9rN<)m7A`59t+Le,d + jodX@T:#p7I@b*:703jdc>h./*V`Y6##dXd48C[;tm6N":D(%8L;&'6M[*nlSY^qriK]&j^i + )8pW"3!@%8#e\?)!<0beB7%L;D(TJe0Uk`/)kTGWM&G>>sP@;as'K'Nd + eS=26n4!!-h8VeVNuC1(Ic!5E;H#664U?5#&";`@M&5@fF;?P%Juc`6ML%7@qp@).R"QK)` + 2kA!6qDUfj7-U>B5l!^`O@J!>Cp*E"JbA`dT+8.Ds:U^^t3?,)hlS$31(CbCSJkRBbei$@K + Y>S;Yd-`87%`42:@hP'l7h1[HZn_"Ma^XVWqXJ@J>>R(*m4hek3teT"B_9\d6lB]l&S]/iC + &g>5Q\#2QYQblM$hh(Y(;1tL/uWhJp/,15QR5(ccM(3Zr3k0HG2$m-iW>I#C:>=I]hkPDlR%[JFCbNn%;&FB + NSbe<dVCtm*H5!N4sfsn3sB4/B.asc-[6mhc`Q#c*aQ%Er>L8b + ek&8D)R`62gL(#I>#+WCA+uLB)-5<95F9k5r1NXGd,%o-o^=HeFHUH2fj`?+)R6*HZnM4fR + Hd8`Y002*r"!!plRu^Q#M!pQ-rHbohAq=;e*4:7hVR:=^RLa22al>dPY\c=MYFuf(!ZFn0^ + bm/-c2l^9\/2!H-o439G6,N:I^^9DJ+AFg6,B3GB;26.^8pQ[/tIIur6\Kc(L8q%b"()RgI + E5udlNC1\KS.Z%t9#C!50n#(pXF`&'_LUfil3.lUGLO@W+BWPQ[3E_pkj.VQSQ8E)Npn`F? + 4`SoD*',%6"cJ_Ara+^Z95V&N9.X1;,g*/B/I*phUa$T>,WXPXbdd-aR.X.W5>:kN?Wk.*3 + Q$r(a,mjTSG/),=-Jc5QU'-;jUt.>)DXJ.Bi'nlT6WSTH2WEM!L0!HPo,Ki)-8`JUT%G.l^ + Ao*KIt_!,,QttTNN0Z#TN4hZZJ.##0,?iMdbu)O[b$q<\6jP!A$$uLWK\Q1WO+< + pi*T+GgD_lU)_P'Kf(C8Y6t/`ep>)`-]9G5BP^3Lt\d=Vt%9$FB2Q_P;RnL:dV5tKl.<:oP + R`e^?,Ir0$:1VAq4'5&[+?]m=ph9l<`$./'qPDE/Z:Y5&U%&a=q)u0EK37q'=?X&O5T?(Y& + %G2U)\mUC&Z?SrW*.[s6M=b`c@;lHR;BXS*"nL9,gXd&PI98>pg&1>e[iXa[/%A(7IL[?:4 + oK._-B4@.7Q#Znq%P],eJ,]qg"h2I@q_1Ld@)XKK4GkTt)-n`m'4J[hX?Qa*r1tQQ0qb"@b + &GbW4=kZ:3nA7JtmCmhG<;h/LdrUkq6#oe1[G3d-LeH>SjM%Au9"Vn!8ARY-ph/!. + Y-/.-*&'^Wu^uY]olM.$5;Q'F=W>e@K,B:TrnsQ[(gB.reBi3.2#L0?^&Bi`@jg6;g;7Cho + WgeR>gPLa`NI&1m>PEBQd@ETnbgB2dl:0)"J_>Qrg"i:S*MYi1Cnp2th0eOq'` + "&2`[q9,8nOB_18S+Emi_nY! + I^]HhnNp+1CZ:]Xn!WHC+*b4>=BBF_/k/D_^8LYYXZ)G2R:V)bKUG:OD[[9%i0]tl&6QtT` + Qg'e;$N?W^&.4"0(Z'CXhRIj?\&5]Q?(cRRZe#)U(BM&F!U)_iXBl:/4qFB5D2Og\e6^Df$ + .%Wkqr<+BfA8aE)ti9_MBkTG[)tSH_V,40&+H"1>bI/J"D4As3TlY$Ccj)nhVoi1LTnLN0Z + [F_rQYdY=7_u7"CF>"5=6X_iiaE%)L4ER?1$%qo?nZRdTWuN3k+$3-2*2)m29QJ*nfL2mIn + ;@RGR,@4aKr,EeYF'f+?J.M/"amf@lnO/rQ)PJO&.T=>V'2$&(_) + OP"Y=+VBQ!ifLX&?%X"c`lp0bP^EWX(CZIs?6@540Dk*&rThJkQH:?Rhoo + _sD-Thss:=^/10]T]+$V:c]o63<4,US\m^7=eU"]I:+`jaC9?51muc;!jbRBsh.3QD'#F^M + ud!f@O)HhB)=&0lMnQnXBM:_#a%kgbkl\M'M$*f[VlCX-'RGnrpMZ>t^SHk/b*[[X9s+,j< + Q8m&b^p=p\@P>AuhnJs`F:G>_pe$]=+K:d.Yi0aY`/W=i35!=1h'#G + ">o4-;J\Q/F<:cT0U*pl6EmgM$ol7[2Gh;dN'8CQ+I#>+7&q`)Z&bpl=Ke3Ub[22;BZYk,W + iDM^Vl?\"P,$#/oR@uS1),Kf8?t%1UT#_HR]!/8R]@rB%j'J\@g + UNc.dQ)\)`4.1iBCg/ff2J>IS$pHYh+r!KQ7%j0J'ZG'/ + [<8`.I>XNrLiq1\H:8e&:n(1X-"idPT3;V3pGVnoI8:Xg<@0-%<>AM:=&p&uVXY@=+R&D&O$G.O=#Jf\?e@7WMTFH:D3JPHXW= + $I_7FOQ]Pfm_pV&!*jh5V<=!c+5/9b",^=u_:Bm>Rk^$$6P=1NStnN=96b]>nsfn$+o4ID8 + 22'AmH76,@[e/Q)&=4VN-G@0!G4dTg8F`SELg^Th$LYc1&U=1a,ni3ZTB-a,YiZrn\9STilNJ`_KTN3aK+UHb7obIm'u[VM'4Q + &ZM@i<,76$b("J]=GJP[7R[`7dO"2SI2M2\phQt_]XR6K.bqpcYUC6-V>^K"V=aFj;(XaRFmeP+)94J,b- + LdOcm>nnYBVj.ml-Dh@3.meWe"nKS:b;_32i6i!GOt'a1\Toi/e0A2eQ#XZ`cO*o6.rc3t$ + ,ZETj1l9f?G\Q@0:A(_B!g0Z#Z;bTp'aL-%,V.#L00'"qA1M5Eh*6rF\]L#4(i[(SeK+h:H + @Z#_bBe3;reuqYY.2GFT79HJM8g3aMs$O*+R3DOYTC"aqKCY:/&>^9p-eC,I990aoOdaWGq + U1V&q+k!(Np[,,EpZQ"`_pL=-,@,8uL0<3OC/5=JcSQ&GE4`W<.Num/=Rf*DRJ*.(++H^ai:>")^_SEdLFqmaa%e]40-g:_:C + #7=]'>)-hX@E_^?SfVNa$R(Zt['[eX4b"aZ[1quWp\)hC87#6MC]!FWPXK5buE_AGcL@6>J + 4J=V+g5V81)^^"ILoO3!/(ktkBO[A).%V8MK3)MbMC=D8]UJGbk?d&1\A/-G>&gH#`j[2]c + oTEu(fr`AbG:+&HHb`89It6Y&KedgIar*\T@;IYtJ2UIY2hnA+S8"=1p0X0MEY9uC^u6Uq. + [_*f0G@+@$t5WfRPR\YB"[B!F0\,+UCTKoSG4&0o=P?:DaA&"$))H!LX@"f7;0@PUNAo_!u + P5gX,mXaE:^r>NtsL`Gg>ki9?W<52U]tij*-ODgRSaEQ0NZ/\`F$r\ + 9?7^Yu5eN/2Enc*-F^QlSm)7dOM"G'PRUUG?lg)EOpPr[&),oDA:d'Hd?]t(UKFm7,6%^=/ + \a-nZ)hHe'.GZLp%I<1DCh&FC[D_cc(\$Fd(qrS0?i7l"D56'O\#D$hX$,LjF#N6X?ECI*F + $+P/?ZOZtc4?1@NW(^luO"i6+g*%ElNTSac_E>lNa1Wp6YGAH:PK7K:PjM5Ta4CKqlcY/QY + !0Y33tCB-`Q/N\65mBn/(],,BC+[1[5tRPgI6=)'&CJjpHIitHae4f*Tt+[^A6Z5pNbYiZmti4,S-^G-a1 + *g&91u7`UrmBe3%YHn`rul%)^Z8mp_7H4(4I;7(hUshc]O(=)Ui,m`2UsR)p7Z,jDCqVXe& + `af#!S0G7OIJMZ*d5Bn7JpODr[#N:%pJg3H5V"k)\jZemZo6gSaqAc!*k$-MA3p4lUo/j3X + rlaq_pYX5*kOErIer*"9k84/p=+7p;qgWhYrZB2VIm<2qQ2#S'!FPd\9T6qMRnU'uKs;jtY + qo3260GX#(+k`3][I_"HW@2+n0@8G[>Na"@bj%cdhM,t28dtPe(1f4fJ4B+4fV89+;@+._^ + DrNPlOh#F8E_+(r;FS_28JO_-i#)*4gZ@#FljNPTRaDr]Zfk1Ga'A4#K3[m(3V64!M2O$n& + oDZ\RlrLVt[OY^$R8F2H:D6KBc9oIn)b0Z+SZ_^%"T1c*#_VZm`?Zg]mm#s^UNc*7W%0cJC + u_\9-s'Y*HDX[?#L\iQs'<3_XM_MT,EUDtl/*At1PUheJ_"4f(B2B4lb7`m0;>n]K<_Vk\ + 20XY7O2H_0U`WRL]clm(n%BgqT^qGca;]Y[//1X'Kn$(;R(%&W4W>Ij9Rm?A";=A\PjKUX- + ^b6Qb?<>_#p,oUROZX@)(pu)_h#IM#!+1qo9D!a5h]*<*ME,1Vu6C7H6>1ZT1PJKZI,A7S$ + Pm\VUsJM(I,5/F/3K.a^6&of2#K^f&[t@b.qc)9>t(a!4_I>?WW5*QLe0[E2?)gXik!ferZ + \2A*6UCjQohHkmEE8K=>DoH;3WEOsYN^ANSlFC7X-T?:-0^4_6^GUATt367n/_lRRi]E:OF + "?`Js5[81p$dGepOu6dI)q:%d[$3hu\iGFd\WYpW'43L?GsoI4a/NB8\R7qL@S7u[bN!n@$ + mN[5ZU.<-*+O.R"CAgt-H7%>b[e`"[&4b"W((S&8=TZIU]Eiha2>i2b1&U;Yro\:<(d@U`$ + EAF#aLCCTd1"J6pqF$<-1C\7_nA67#V]!N(V3^9=`Pu8\DZ,be-O&]hL?Bc6E3[qs(cJ_*5 + fS+b[bS1O$hQim*eQXdmI%>_l":b=JuA8AiNie&fi)o#U_p5^\\hTm]QidD3ZJb>abFFI&, + 4Qc,C+\\o,EFLmr0SJti*cfG))AE1YHlV:Dbc=1D&>[P5+-VsC=csg;+Zt;jfB2#C?5R<'/ + *,7Th"0kdccP3QFb`G44Z-[3#cV0P9,2Q+3fZ-r]_#2p,FS\S)H-<#?cckk^?lq=2'\^k#L:8E0`3pnA8+/J!lhRg7`5GIltsuM5Z%CL9,%Z[5ss$NF% + K%od8ZDsoTr'aQoV+"\\/j'R-@Db]:2ck;Z/Z*Z+\QGJPl'6dK96iI&&]T44G!2RI):oPmG + U1-H_kdLeS9"]d_8*.a$P,X/tj9*>$Zl64t"e`(Y6fdATu#g,Y]]7t!9cMk%no>tMl>bKWa + ]F]XoH4Mis=^@\0hoRkX&=B3mWPYFM;N@$L$$;A,@9[,"WaQ^e%.noc-;Vb!l/CN)-%+O@i + <:psU"S^A-psVq4bCgL"WE`;s3E9p0f-PI#'j43=,YhHd&Y/"3'a.31F'"WPOMtR#R8ZS&3 + R6Fh9\h0lm1)MV/B7&g%4[)qWFjouXcqMF3"ddnmY1L'L=2bKte&KJAC=YB/<_Z06]WTm$YJ>95`sn + DqNG6R(p+)Z@d:G.3F])(ih,R%Qf+j>"265HHT%?C3=&f<)9Z#Ig>L%pHg;_;fc'Xp@CDU5G'cb4;BrAi.<]NeIULjcDN9s2/- + >>.a8:fYM?[EF@H[+5>uaK:t-jdf0>A5k_?b86$[J=LE'EP + rN#+N`!L??00(2FJ;d;5.>C6W"7j]"r^ftAe:bm_b>kt: + #t;"_Chr:=:2S_iICh0m#nN>C?@MTs+uc`o(NNPj?h"Q7gUhgL^F%J`gW`)7SNi8,*u-2gu + Kk$)-S>A_a?jjDqU\P3O^bpA!N0UlHULYh[V?NpdC'fCeY2VOFTg859^[N"3p=5`FN>`I]; + Fd?*h,iY(U@6lhRbpUZ9.*h(70X)R,n1\>P6fS_Yiur;M2DaA_1uhUoj(:40FuSH939-;bj + /+aI>AKDuklJV@?G6POR$^Gr'ELOu'A-&j1Hbp`3oj=1jCUmBG":V-0nd84K8*!M<_Iub9\ + ]N'>RfEB*SZN:$f0>oA,]BS2C6]k-K,+NhkdU5Y#Anc"lcL5ikMG'E,(Gis?F".jhO(b4Rp60-hU@K;,A(%YV"Zs8n/ + e]re\FQmA(ojt5)9Z3u*e`[Xu"_c;)$CPFt(bHcZOQdOCkpDSX2O!ApPj)56l"67GG*hHJP + \Bl'MO?$Zcin%<)eaJO^nSNN>/5\]$3BBk""p>4Nhbl/V!;!Wl=QkUi%_6T0*0P>YdSu-ID + Jj)oA.CXg9'2qhQP.@KMh_KgC;9`-Eq8R^1`>ekab0K77V%)8.M,!0K9?=qnnj^*UD:ilfP + qIp:oqu_!DiQlmBU92T+lN`9^O?RQH9*1I8HB@qj1]lUZ]nl>M2bbaD%%$@Y-S?I/!Cd-VU + rm3^3u+]:>i&2mjalF!R*`Za+iY$s;mCp)L6m]fn`G2Wlpfl#P]oUfo$l"b-Ee88[Sfi'EU + %PSQ+7+#9-G3A:JkjFc$m\]:;[d3A$m-`HlmcNh'dpk'F%P-DXg+M9=(<_46W3iK)2DLD5m + e?1)q!XOEn##rHaceCoonnd\h51M7[5[1Vguocsml(N&FV`mN + &`ONOK2\Y^O'_,6>nRiX-G8Kcl+7YJU'*qf^Y]"O%#`' + mQn_ml/ru[PO-up+@E[N(%2^@l`,k>"Klu@(a9"sVR/^K^h?R?+b-4=c-)e^T>Eo`lr'!K. + tjB`#bn5cjYAc$N:1r9J(P3&0B`erd+crEY&!EV>JgYDp>;01>PoB/=/pHS9T5kGjYoHuut + 2ad4-7.^,6PlOeUEF=P\8Foe%LRC8EYZkY*99^MeFQZEkpJ:Ge;"YVgJtGr-&Yjmf<45R$E + hu]A/W=P,,39mJF&uPZNs'MMQ!PNB_ + Id,p8;[![qk]XD"cItp?->epM]bf?fN80j?WtTDfbMHHZr;*pL%TWG>"7rE-IXopSW?3[sR + kiBt@D3)&GCBRn.[6:@ImPn,U@;(BO4/KY7=i='m`Uh_X"7Km8f-FpPO"*a@KN.#^0,!O%N + 8a,dq'4m!nBq'V@$2j=&-PkeCGq.H#hGF/,\R/*):q*8D7Y\VE + #$7PpVka)YV#"/hqIc]$5B2qm?\:ACm8&8i+'3Kk:j=oMhd;6:oBC;logfNpi:gL2#D_edZ + hj^0[dT*3?]3pgs4?K-&/.;TBK,!+:)4,;qrb]jpV6V2_#,"br$TAZ2oGP``;E]UquD!>EK + 1eVT81oFL[R)*pWLO+IDVq171$b[XO$5J+\RJD3n + E&BA9l`L0F>,@X[6Qn(`?pa-_709T]*V)V:P$X]O#MX]B/bb,H3UO$HdA^Qq\(M@+`,"_]3%),P"LoUUr*$H=g + 9i['"MqT,VH/qE/AS0;g&[:>3*6[B$LGlulSrVUo[oghq=6LK=(j^I<*7HnetE9?.#<\O@Q + K#Fr'_3''r,T2eD53d+&bYbu]-#DBtQYkX/QGN\UEI9s[$\)$NJH0>\E&r)3^UCaC*.StI% + _Q[hairQ1&al':g.d8.\N%50EZ%,Iq>-j-f8K,"'MeUiG6]gXt&&]%g71mIpUB899X?.%)] + Bj;SaKfW_/s%k:UGcSfUoQ[81a01p"3%2`:(+HR4'"F#V))Fm`3O3M-d!'\V"?UD;gr"3,Z + BFL\=m/ZK/l42QmfM`$_UV57g#^U3tB`Lmn;k0&qpQ=@*jZB#_A"m*qGj"5L:)R"[ULsqr[ + ahn&tG(^Zp->WR/!D%0SsnA/tqB:o#ZO6WB%.:Xg*g78_Qk4AMhD.V)U6TWE*?a:%?s*m,; + CZ/!PZ9]J7^1ef71+iprOP9n_e/WF8n(.rWtb4+8"sO;6XHdV@dSYUiEkbd8rp@blIk(etg"iKmP>_ + CqH_Tc#DQU6'gT + u=G+O3o]m6"0Ck#nJD)GZQo[Ps-3H,!F]rHjU0%3_T,2s_3-_70muJ\noJ1P>!40$U`i)bN + t_eLX0;B]@EnB,Ob?V/mVXETMNi=7&IK,\5>8e\UaF/f0jI)2,Pg=uiD#RnXd;7@dX`jh5V + 5RL@(r]T_*p_fQn07FBq;FVB'cQ`uqZ;e_d,/3dpRUc$-uG?2E_-04o*.CGTSo5SP + "#eAGZmDWW-2fUW]2,S"9[7CXQ9NniJaFa7i[k:u_*hbk\K=DqLo7Tdn'?L*JP%tu`%26>k + q$^>:a?1oJo1q=Uck&\_?1WS/H+4k$d;,'VO[9$QT#jb#Yc$bh:21m<%`n<\YcCbPh2*p.$$ + L4[hk^bhh-ti@SkcA8'T9?K^l<^3QIr0[&XJA=2 + P!GFS#VR6o.:Keh0')\/U&oK;CfXiOUr1f3+Q8-O>McK&Y<2[,SbVXM + j4!P!26OAZ.W6IS%#:2Ap-qHK%4!H@H*:(/UWlu+7&jN,,ICWM:!#a]Wgr"B[I2%:dS!X$> + d99mXuF5]is[6HFfa*,?:VUJBC,g/Xn1sI`$p7C-le5>dQW?<)dR7(M#=\KlIlc,Cd"o;27 + HWShHS`_DsdeF\5s0uN>mg*/jOWk5q;!tbFKt2!u\=2El(fN1FSpOhkQBk0"#+Puer45>FAmI;3@cJi28m="HBp)^^14qF.\54ARO^fPja?rH6&iWT4Ach8O + +K!`:e4T^Hs(+%=d%>F;f4MV'cGN$rkLW7=W)7YW6@U)WanO=tH=K`KLgg,j.L+K+iD^//u&uYg,h9(P5aaR:TId[:-BUY$<4dIL@pH:Wl&M/dZp<0 + (T9%bZTu^AmE>21IF2Bq5l.$JaJW,L2eOW,%BKAGJ`5neR;X8S?rKO,Ur5&BMk=o`Q + j=N!g*Y"h&W9_L69nf:J,>,/Yrk(@admb/-B:TAPDVo + M(_+7!0J#BejE!Os+Na7F&_d>P8!Y1BYcSI;knXs%>T0!i\]f.#9>=G-ZUGliE\%JS4>ht6 + A\!m9?X.0?_*!q7Dk^g7/J3:ELue)2FM.B + LRm`8IYai9LgT:=-6sNrQ=gHV^*C9k:Q/g8o#F80f;YOEBMj5mO&_#N0;%0JNiPM$U>F![K + &[i(!X[1'-m7p$e@I!0[:GnGRo7rQnmZ.R_taL]Y0].d@S9T]ag + -ua-781V^bN[UIAdS'%2!tddkTR@Mb`XIu(&+NL30i\s-n-\\j#]X6P`)]W0UAZarrN&@!Z + #lLT\D&Yhk=kO2OM[EE/JiDcQgi<1,U>\YqUa,"$K\ef@3?4\W>`%D)Y('O0sqs?\Jqfe)P + IHW,jYhWaTFp)&ShHtMl>.P;PPIuUN%Rsn`4Ht/k*$#ibQctY3\gL^Bm/T+7;N)OJkZ(^EB + fk+S$*`!ZeuZ6j + ?6H*U,-!cP+(aCT'Z&_&i4An<.mk#!]77gmW8g(Y\p;ZFH6ejX[CK%ZlV)H,=5co$<$O`oS + 6(P7m$/jrmXL='+54J;+m.tD%p+^<*TE&?n:j+4sId?#QmP-R@0f[bm2bC$rVBa\i[3%_/ + FZVE3,4mTk25FZg0dFdf,RT#!(Lj42>O + rq9J7V1n,=Zci4Z%(7Q.\@<3ko+gd,CKd+T5kgJ-s`A"k$Oc2J"1bH"O@>fO5U4Q?4'hH", + ?P0/G'uUi+jo3BD]V2'AAM/Q.&aUs$nqU,R\E1'1bahLbPZ6&2t2@ + 2\ZWq&e,urETE9PlolDTj)Ulq*]Gf7+f#lt3(G6TEHa]g5iHfn*H[uZFRj1\@Fo8CJO('WX + YgkQFp&<)X'i<<6FP!>2_B5aVen9,D0@,L[68`#Le61\@obU"e]VJ1ec/5W\/Mfh=`ks5'X`?k(dqGR0MZeZ<[DV8)hOkGGkBZg[Dc,C%,@Q=c.B!P(t"FS3l"&Z_g(I]GPdGH)37kq7\ojA1G + =7MQWUbsCK6R6[&8)5$&_l'@/"`(R7&tN_aJahgXmluGt4-/rJao:NL,ukf:$Qbq0FQdA=6 + Se,tgMT>AFqDP847ape,3>*@l[sBLK=:AW(e%_Tj+Nh + sS)ja=R&,tt?We8!JCul>3K8s-_4@=(R;tMjGf`(Pa.:oM-Q/n/2XuFnop^+nS$QInq?033 + `KI!Y?dofu'H*9?&U)\N@2@%ZH6ah_iEH'=Po.]5)CM:h>G!h@H!!4TQpI%)TLH>dQPql\, + N5<$]8CmW6$/lqQGJ,46(%LKVW(IIW?kae1S20tVrBq9fr_%fZ\0b\Rug:'>(NY_c_Zn`T_ + /tA(:SHjAXJp#Mj>$UR^=;cFHS\1Ss7F!HGh"rKpEWD4TW0s/XdFfj:HK=-%Hr;3p!Mjl)m + 9oY4IGXi@1s@&Y%LpYN#7ICh=CKfFMI&&Gk^t3o^[S?jLXL%H0CS+d93VT8NKGSQN@!GBL, + .a/c0OX8/BcgGu2NbCc294SXLJ0,dkZG@mLn$!UiH4(L&=N@a$N:KpW%HZUmH8ZcD3\+8_j + ^h^H,A[noB9;&8p,77"#;/eNOSJd3h)*b/?,I_ucZcN6T'ZkbBXee*PReq+a=!r^RmLs,k9 + Po3k44V#c,Rb:%&:mco/4LMemN,TE^>e7V+hAI/q6+3UZ0jokHj%Ilnjd+)_"uZ=@AprWo= + =W,VKs86=kUP.J\)3f]2c6aHmtdo^Sle7*;i&t>6YYo84RQ_`;EKO+Q^RN-,m>Q(1q]Mgc* + 5^IC1nD5-bq8"_#A4Gi(cka7@@`,k02)F#9C)_:d;$\_!lEBqp&,O5)I!Ho9$Vh8?es4X@( + >*++(gO:PD3bP]3#+UcM(lY9?iADF0/,&MZ'-5ea;'r2RXgr%EU&e3X`^u6&#/5:tP]m@>R + \ic7a3[(hWeY$0=O1_6>SI;)qXd]FBPM.+C4bKDU%ZL?"Q!O-S*?2X9F+:A8-D[iLG)>1,)<%8piT(P_:1>3tS1;u + A:RCs$=0>7N+2:/FB7[K1?:E2,YB=(8E'8X)!cl1ph7f_%9"[D/pTNF^a0e&)nb4Dd+j`SX + qpcl:_4@'YIKCkL%<+Do6XF910-AN35A-QU)dE!tKW7;Uq;jbhj_OomR/H07`Gk&"EP'Q6X^dhIGg@C0$qfo)CH95;DVbN#F>kBKZ2BbVh`C-87A9c(t%$N(lcQBL` + "`LDY)nh7M:F0A$>?OMpoZhZ'uIT@+mbF&l.d_3Kj&onM@PjHccY50br0pqqSunY0;F)#`q + $q8$Ek:IK,UJVWoN.Jm.Cl1_B2X>fi]q:ko&-?fQAUoWX1"8BfXL=fTGAG(d@k"0%bEdl4_ + 3;o!jC&-c`+:gFFQ3c)p18,)s;VDutLI9ZJ(-G<\n@`F`Zs;`c"S$eQI%FrKU`-FJtKS<*g;XNI0dOZWk/1GH[J3pHJQg\*NqU + ;>G5Q5Fo]@.b'+h7O/%B5\Q!p=hs-@&m.G2e/Df4lKOu#)b;-pkFG/chKhP,CZp7+0a'iU6 + uaJEU:EeQgD)qlM1l`]Ob9r@XefH))\g]97ib(<9H%2$n=2+Y88iM?p`FKD4K9I.@uPQ#14 + fpMR?F?e@_/E6Hs4^5PK$Xi'*3kC):KdSC`IL`noVQXF-.W<&!TJ/c>^nM4$=qVqVY.diMA + aXF90KL77V0]HHB#>8sLEsM0[0tpd^8C7 + 207=IWi?*O]GQA>+&sshBK + 0X#:\75DYItl%/ms3fk[r.p]2-sqIBQ*4Sn*1Z8VT&Y!u&R=LjPB*'3HrX?G:kO + Ujh-/1tc;k"k"=];5bt9`F+>oB?$].1uS:;n@NeLrk)*A8jeRcN7=^m!UN2#=/&,8J3NEC1 + BC.Z11@0T[8FGJcZGfW'D@H&8m/Y@+DJi<6rjJ?#Qd_XIQS\qVdTR:C!E.1"B/KU!lLfn8L + `#8:]F4WS`!#=PXErp76soKQ"!T#cZu$93bqgEQV;&.@2;<,(*UQO`iBHp`/Hs;kI(8KipG + oD!=FM?tR]`?TQ!>Y[)K*=H:J@R(1fjA(5jdOnD,Sd[=,p>AD1k$CHIW + pOlM0HD1<(LG7+&6KFUFP'.p0oErHiS4ZAm]gF&CKSPVO7ldWhY)V[S!8_Ii1ZB`c8NCcCA + ]+X65"HIaq[aOdA'.kb)#T9kAK2gS5o5lc_pcKZBd$ + eMpOCo_9/r!Tq*F^;r$4(9G-GD+1[p'V_CFe + EUK/P!n0Q+=[=\d%R5b!;m`(&5g5 + nmfN]O&/d0$i=hS:g^A2KPb/jh:rN_9-M*=R:qPa[aRXfc/3jrT&YTYYQIrt2&GM4^.;/4- + iYqEMeW+JT^A-9DUiSM;:HJiT9btfAd+O5,YX$9\%jOfq^Kb+:)f-`N7A$s:E\7qL6cV'uR + e3-`Z>)..iSQ9l]YRVMe3(&oIdf*1'O,3a"^t0G,-U^X(f(#:*V(sPm1` + >84aBeT*?EnoY0(Lm>n08ED+&3gFTt/`rKPSf_ARi)Vqn#]*<,gb'E:m?% + tE*ZSbsQ0gR86D\ + $"@V%[h^!*gRjr\p2m5q![<3#Y(R,sbag'QRt8nW^Kp.2,Rs$1T7"Gm]Y%$FMmXYsWfM373 + ;I+[IM)1'2ik3@lq"1D$OQZ_Qm#j,c(Gi$cMP_Q57S\>6i"1:/MeY/3#udZd)6P!41OZuY[ + cME;iS0gf2(6YMNEg7Gk_6TQCN0=*nWGr6/#s/XP-QdAC,JuJgq5s'$0'XU.-b;(jB4.9tM + 5`iVm=UU'I)$f]4);tn1Ob=A;UTKH-'SFqeA&s5rd&W"tSnS.g=p'N^$5-l.7;3Di^r7Iql + 'OaS/%QffGgM\[82:kSTb'7D3'jl9m[G'MU/Fqs*(c0)-PO@<($U^TU.W1ie$jQ=^gi+N]O + )+Nn//`6'>^7M6mk1:-mGDH,-p;S_WF1\=%?M=5&;f'ZnA^J0Ks#j_]nS;4%R7gG/rBe3Rg + #6,G?/'U:V@/W]<-T>>r,u?Q(s('Q\AJ`/$2`"#22]`UH&^\pTc:&.j_3ZD&3I\:G,4hNll + H2K>UZ>,hWdPmo`E4aP1!@>#phN[/+jr(4Bn3N>?%W_i#H8a)CXe@dsXJ[6O%!&$tRMhC#/_#WDR'7C;J6UqOM`u@.]1 + HicOP"EU'9<1\*H^6io6q?$Z6Sh8#9(P]__+Yd>8,E!JS+"EC58pkV%I&N_l=q5_VQ^(k.[ + 5f?PL?k33#,ZoKA#]3#lg!cGKPa;#h[ahM=A+@kFRR@K1slb44^fi)jQm8-,CWSd-.sdQkp + =rbTu'QZ=b:O7@@9r2KE+Ob&G9sb_(;dT%qPtTiI=sVjQ^!&)?#tm*\TW6UaX^0R:+,Er[\ + QW]`<^:Fqb448HNM?PVf3T,BKqH$IMBlUu4SNr;9@5_b7p#3G^@ZI!/0KRP]BU6UR?M + Pl4EQ"Xr`T6^%7=9KP'+6Q[<9XhhH7GgE5&VS#"Cb8`r9HQY7>W?o>Yd48.U,gh[KdYQZfL + N4W&`=dkcV^m\RNCYPH\Outb*As!QV;bkoM3j6J%&GrX:gG:Q0d;^Y#`M1hV<&,]RhQt(a; + ([J,eBs2,BV7.nCW]j;XReOeJP8XN`nUL]YKC`^ + .3bp)MXTPZV"%^eK6?&NA/.^I_O+DP[aGc4jrMMBTQaqK<@LtJf0bgu!0H_dZHScU68.Ko' + )X5/#Kh#07OJ&"--SuARB[9l4nd;Gf'cQAQdO[9)du_U3Ok*Na.Cm-T)Uo"KEXjf3P>RnuI> + B";SeFsY&ANiUEM;r=1I>h+@?[b'I)Jt + ZJt9)KrDCK&*tF,<(PrQtGl;S$[!gcK$QX^od/Yl>O + k)L[#*bjfB60P0(U:2Q>Sp8T*m8Cs;GWdJ*R+XoqB\BFWr1=l/OG_j260=R"?OZa(5Vos%` + RGTU;Pp]:,o'mU;`KQOS\WL#6BsaTNJcGt"P@hOph=[ZL*Y0aNd)YWDjAOG + XCC1('ii.3"ZQe"HWFG_%2._7/onR^"ap;M,UDrjr?s)P,oP,Hr@Tl4(XZ)/nk-Aa\UjH$5Vj)dT\c-BWt;jp3sErl)6p6i+$fm]RN,^8/,4[u0bnJGV + QsSBQ5Z)u2rVZ6_\LnKKIP*9*FkNiS*;dD^tt6Z/.=fGLhj/j"0S52#EUPi&8;3MG_VVWL5 + \E`T*fWMkr]NV652+OBoSNP*u4(sA9a!RR"Ak:-;T_uhk^9O1qm + >>2rECGcl@F,"7"pD?"M[4?mNZDUr>.S^71OUOl4d5)J_6N)@SuI&bBWMXK[[b7%NsoDaQ3qu,TMX + &`Ng5M-d%N?pC&M5A`9U$'V8A6OlJ3&*m/`..N\[&/[c5O80\&r8kd@C1:Qm5FQ@*8\(42S + S*bV&5\9kGu.fV\uq1l'.,m.hIO#VKo?*Y#^GMcSQUne0K + <9"eat?Q=[0dg*Hl9L:h:JNOLEYR-=[]($PuYPaZsIf;&QN3EEEe+W*OYkr-4JYi_#".hSL^'Z1VCEaTNb + $'"0f)JfL:O<2&J&XAkT'h]mZ\@WEk=VBFq/%G#'BqLCMK.G?DeK%utG3i!Q*C)Aq#]3UKg + ih_+5$/lXmjZDD-HqQt?oKZQ+OYYM3_IR69!!Ud-d$3GM\I?+_lSL.WcDhnBeM/c.m!l5PU + %0(5pE%%YS+l*HBsXEUOuhru2oGK+9%3RGc@"H5;^:"7J/q%*lRNp:jS + (^^(PSP/-O`ZpbE![[N>XU/9^?62kJUe,dK`gA9I%@bh_E=d(#6P4N=&kj=N'h'+l]Y^*"/ + >IiofQqgmN(>5:"D$?,LK+bGLNEen,6ZSc6-JeH5R+c=&pbPP;&p0Vl^j2Z;_$Z2IYZFC"W + a`T&k7!(p;'-[//%XB\\13J%N]0S.5lpM3o$\3mj9L6&'2g,8d/Auc+XMe@nfWN2Gg71d+p + Z]N.CSbB[(18`AJT8P&=VE9lD>`__]Rn=6rLN-q^s@rs:ER_&6h55[nLQ + a&H't7eTp92MEbD8*eroTDNETRV"L6JqfU?Ou)erbI8[+C5H&[9['gB#M*k"Rn=3KBFnKqF + 0]YDfUI0hVB%,nb&CAsSX)#3!KGjg]YSWr9&PG@= + ]XFf$H,M_np7=RhtNUQ[Ut;-A$2AVlnlXu"6A!in_adU1MX"cE%RaOW3@d^H11A=)!k2T:Z + klZ?(^*d>`o!uHXUi`l35IRbcNbN>"e^%9aFP3MtFa_=r7Fe!*MQU>R44mcoGG9]LF^pnerk9+Oq:(lmP*8_Yc)0_ + bZqk35a'N/I<`$)>b&K;&]^T),XWae1Ti31Dm/\B`f97dCBc-Z"/,7*g@94;]r_M=d6gn7p + M.(a\IMW-DsRk?G2B91oLdS^s'#.b>#51b`rCN_'_oT*6Bt[dlc#7bu7ehGg48;igd6+c,,[SgfQU,(;6T$fc[q5\&FI+Rh*3V%k[''n')(AQ + `>BQK?eK@-:lM<+gNk=-_`g4&>FtR-2Uqid%\=b6&Qa,[@/dbL]mL,A8G'T`>ld`WRQ%_7m + -%CJVB$5Y%Wd@BdQoH:mNsbqlVedHtA(Bl2+7VV)a=r;o.=U'C*b)mabhj92;k\d-]!4reo$8O(B.QFOHQCmTS<,-+K=Z#_WS0#%Y!1a5NqP@Q + [jp45`loce( + Xp4YWP*8'fmW]15m&[D@A(i\rh`[*HHd0#=2inGCsu`GKjM7Kt(+>)tDKA_k_WH'hGn8N`\-/,e*aA_ + 'E@sX%s'm3j>t_E.0'2$(Q_@Yjj^EP$#c9B;UUGMXc/&K2obQTKI?2eT5Y)ar+QOf%OO>1< + 8=:285m3/OP!/UEkp3J8PY)MtfsqOU2#p,s.?(Q]:eDTo.*HZf.j]#7Q1Ddob:.'U,ed/9- + A'Uu.r?EJHhj;,=5+R42p]50\l/,R)CP:LmSf&*OC2[k*[?LQH&\qo5$_>q7/U"2" + t8e@gM[SNIW"3fdgp4]e1eCu%FZrIkMt8Hn4[oE6 + [OG/o0TRUj'&7BI"rl7#O'_,_rkP"cAG?JSoV.(@TG%U9h."n!KI\C('WglN\"mU-R9f.uPp]9@ + @)V:>W+7d+,3-[+o3'EYamiW4!QGehkk\0,fEaP56kmq(kh!-\--TJq,2_sY-E:+b:;Z#_O + f>J%@l$Jl`dGsKpC]eVG?;cft6"$R03W9kD:<#o1u4J&r_?OUA51i]?G]OnIF(:/j"(g5Xt + /U2+geojb>74\fYLN#>GVbD6';P\@9R5p3Tp7Q*W6h?>ou(mF:A7W1>!TQa)7RZ`_`` + 2-Uqb7pLELm`Glg!9k=[3_]0MO`c3<@WdK'Z[@fXRSQ"Wqr_V/+Op=nERBu9Mq>OUnO?sH6 + >7Y[>Zh[VE`<7TYmR]BnRO]@nUR%Z).\+:@o4)c1pWDK01atQ8qfC.G8DoCp&FI!l8\egc+ + GJNScNg)t#E-1'/6o_^JR9dsNBmSR`)8V(Vu0_d$8NLT]Y5RS/WgnBj<"SPD=8W1b+'56p9 + J%*S@sRm1S'*McUa:)$7FN+TH7:n^b@Hsf`FE]8O&_e5RN&2-9@cUc5TRN1 + O?&f1%B3FodpQN?KI/D-1`h4dMJ"COJG(tk/&U_o"*ubFe!D#LbsUi34$j'-[k$[oKTHqlDBO@7Gi[.gfR3Y]_)+n!G='#JH]CCOff?\pmB9RbF + ,#I\I5%LK+Q5f;o)AFqFN+)Pq@[/m0mZV<1EX9?g$P6%QJYE46kXhET(GgcL;.lSk):adl& + _JBrV"<)ng\<@n&K>tm(1=-`,D5]mg@T/LI2-CTNL5/H/7B+.G&KgFAP]ZAf9MYH!+7:VKQ + Si7#Y;c+](f+D;+>d6YNS#8(off980rJH3IMb0kG5JW1WT(B^Hn.snF9N>)DK3@:;HA-U:` + BW`SbrE5qMfMC/GClZ"C]$oX"I,AC/o0NS:9#B1&-hmH:mkmJP)fT,aXmCa:*hG>;Y`b7@mG#@9=jRAoWMcS_M\JMAP@j%$6P$ + SECXPRKoAI_^1cU$:SbLPB2H`%.,m[sZm`6>b=IQ79Fn1#N,WZRN]rFQ?K=agjG;U"Lu>_Y + IT6aQgBQ`6jb-OmqULC$$Yi^k9jhAEK+c*Z#N0k@:@b9Y[-qg\'EF"u`O->oJu5eFGD%r"c + n=eo\uXc=>6MHOXU>o,CDO_jG77lW9SUTd^B;N$mr:tg0ed"^32L?c$F(`hb._'`G\a(eH, + U,4ar2%mR+hh"PD[Z_d.J??],SVcnnCqkWDijeEg<=BB8L%9ieI(/<(*[$/P7?D0H*Gnl@N + J;,qiA-Kpp.;PXf;h@n3C[`WVHXUlrs%FMoH!-pF@NLcWHOC/>g:$8.Kqge(),:8Akb6ACA + 2FN3JX2@7NVW",Tb5Xo8o4A7*(dC1-:>6_@e*QW'Q-";Z9%YAL<0kQ_WDr;[Ge;)%56k!Ir + .D!?gcDO+8+_iWT`4S3*'K-2,Ysf@@K@G"eWfkOLG=;:(BF[Rh?A`@QFUVMNi6rAL?us:DY + (Q()`\eVD\F4=\#HWY^7ne)&;'j)+"_=L/a53d#k,D0f)\VTn;[5"/O=a"J*!^".-H9uD^/ + /Ps;X@f26jPj&&6/m1h'1AF8-4Rf%Tl0U'0pfXNqTA=5VOTn$Xr[-$T]U\>Y,'W8;"iB#Ae + \*NnbniG7,E0MB[cDhAQ[(>;52tMb8p9:5hKL0W%h\JKg(Mra'RG[UC)_V=Z.s<6Ye)D?Ht + f.AE;*>Yf5SeV2eO0CT?CHH7cm;cCbDVDMdOlOjlP;b$Be-/@Hk35u0tP0Zsm@n_"WWB\l3 + )MO,8j?SNrD&)62Y)`TI;3:qF!m#aIVF'*4k)C.%nr9sAL$3CKTY$cPqsLijb*lN*kJ:Ll`d6;oTDb[2`/)Mth>MKGal"\?fa($BOOk/ + L7h1p[B[[jZbh7o4-F-I[XY($>:ra22^&cmWLXc"1?M_lRB[$M;5a606mG#Ac(A'_/P;:(/ + p*#]*KFK-l4/JENFuA$h[UEq)cMXQ38A7r4plLf`)e8C:bEV/SL#Qt4-)8B57<6e"l,?:5* + _DQ7eOLR^40E`oFEgB1,FEKKGSU^%#^Y))M/b9/HP\p)T\m7_hQUJ0DLdnV(d0/-T`OC'Zf + @S?3'@$\-78tSND;T(4@o.eV1eSe2qN/!,3El:j0,eQ3/\k`Q-D3T?RLibNX,XCLP=-cSk + NYsB\VIN%I6j8OD.%Z;0&;2>HA7J<$DbsP(p5\N"49u9_1gDF1e?]F.L_6T7ATZDAWhlA(F + 9Us&Jk@p,D/4>jP_E+4KTpl,cLFGU,c!\PVb041/PkZ/BI&ONM5"Ma/g4d&(%#,+QLn\h8t + 7)4k^67fYXB"!J0>gme+0\VU+dijjTCuZOQBiuLCUYK + %eGa2,Fr5hrF$A3@8R1h;$f:8TZmXLD3W15p#L[@3.%KHNobM4WX*:u[.OQF7X.sj7>+-K: + i#0KDoCpma?GfG",#TTd + *e%FMD(tW2PEJn1rge:W]ln?5W_YE=A?Y#!_S7ON*5@\Z^*eH)M]MPjE@2R\rQLVTS,Qea22\LI"P*AYih"Hqa\#Kq2fU:C[oQcCeF;=eKq^iF[qDH + 3bfY51c>QjDF@f4%E!*Q#Fk/s1Ep1F_oP'_:dF2[b,?X`Be6O8PfG"Vc"T1kKD9Q,nC*/4@ + q3$3MKO6$&pu*T?TSgDe^,Xs=Mfi(C.A+_f(>Uh4R-_-^/-t27f8u@TH[@CaSBS'c$DFW8l@plQ8Eb\(`E[>]@M!fS.0-]CC)MgRj10>n/bd.G. + =N_\Yl3KJiG#nm^5j-!TLc%iZY;bt23&k[5&FBuAOi]q\X=I_8()MdM)i15[XR64Hb]5QG, + #8E'H`6BaAU$;[*-B*J5K"g08&AeTPb[;_CSe8VAM-ari#1W_I*drsQ-`N$/;%,H.gQW.`G + epKlJ[EmTS^&O81^KP9ZH:`A3.XSC/Loe!_Sn.7PH>,74U&__lRtg*Pf*Y>6p>[6gW?Xl;%Q + J[jYV70Y+iC'_C_q;+F;MB^VNG\?=,/IETMB#q/W^la0rej8tYp)e7VJPcX+/BPaD-e-&%T + 5a')=n6,_%a-K$1nuX7n@80^qo7bE@\9Q&KIU%f+c(3oZlgDZ^c" + \IAM3f!2\aRFQA:o9WK.d2`mUU-S4[W'IWL&o)&E`PBV-d>7u"V`5YE)P + l1=@@=Jp66\R*hkG%=n@&$$V,s&!J`Q:d,+1=SJ+$;a^LX^g5;bkMC+jg`,rtS:hR@8WOc/ + i+>2^(LWUrrj;bWZ'PWXI:j2LE&PA]C]$s)*`pg>r?"G>rY"f7MK$gMR`kIj)@'XNhTS82c + .5\nq?7edtI,*EK?g%E?T@rj:[<,W\h6,YuNIaCrpjkJ6NJKA3&@R9A@>T5L1*D.)*MS;0Z + 'I(oN@,s/M"=A,mu]`.Nla)G:uITsV2\W"JYpe^1T$,AZR0Y8SP5Ic#/'oD6"eR)bCpBG(J + -YcbV\$nJtQJM<6NfjX^*/SBhlj_ + 9Q1\X1m+\"4ZRp=1<:83se9:cs_*%53gf#:7pW6'Kem-dE4p^D!FPYbS5@)1[TXNS1fn2f2 + M4HFQ]6YD[@GP]l)bj+N]m?RO,Q=2hac#[bW7:*4;XiQD.3r%l!Z7"S<,a+d/OS>_n816Nh`+635i'W+@[(X;2#c)Z#[k67PU-?)DXm(WsYSRY`0\*dI + 8q7#r3(^,"4pg*?*$T<0nq'Z?2]e8huX/.S@"RBTsL]]I$_nZLIN@5SF^c_N#3^jYSDrUc: + T$;foZEPS90\3YZY@*)"6Vd/c*uYk[WN:a@Ut'G>LEN*]@1iQ4PY%*HU,)mNh*!Yk/m9`$d + p+X'T51,3Q@(pt%4C)h@Q'e?Pgif6jR_A-A`<\*Ar-J#5bqGpZLWOZ![[Io!nSe_oj@Oi^] + S/GHP'p]WgU@"OAg,)BGP9#dZlYJU>gWj6^V5:n'>VtC_2@[,Or;05%j2UDTm]"uahBtbT# + !41@D_>3=B[_D9\*ub8IAiZ/iRV'+4X(gHlGe7RA[TE]DL.ZTI?tct\iL=O4lWK"O$Q^ + *_*,J6*3tuQ-*B$^b/jcKF);FN>P/X$4o@g+6cNRcjNfK5BpNpLqg:)piF`+@AlKm,AF\)Z + PQ-!/r&oL86r!YoA%Oc<@QPM&jU9>UgnhUtW,?.,]`QW/]SkaiJD.;(4oJZMZX,UCBr$(>J + 7orit+J9J%!^2Wrg,PjI4kr'[CDWgk^%[$7GV#Uh`TbGZ(O;PUQ^7DEYe_VK^^-OFg(m%ga+!6F_:O@Iud?&I'BsAh#P[13=7J>n[g#b5HrS+^fl(.7(m=+!S" + Z:oYEG.s/pR_]/^bc9s1e7g@MmOJ"V.a^PYlcseEQ""!Y + ViCDQee5/d=[uK7_-%T)C(jUZIogV"8M^"#)V-[b=\CJ^/HqrEg"mO2:fS922nAcTVgFp+IX]tT]0A[l%fa[1HQ0^-8`a*2(cujSfb%*M4 + hoCm\D%5&N>]o`$$6=Jc+:R5;=VV]nD4)"X&*Xb+Q/*;OA9c&>f/VF"\-(bhohR\^&-R&iQ7 + #c\OL#6X7j#:MC>GE_Hss?,'\I/2sKEbB23 + c8oB(1PZ^/+jsY/%mL5'hC'\1E.(RL&/Q.%niFFOa=iXSYdf'Kk";KD,%")^)#Eajf6dgl3 + p#1f"5-rd^PnX)#4MIGABe0%#$Q]Ur(OsNhM+]L61+/6_Y$+XnBH=(C&hKetV&=>mOhsm&* + 7k#mV%tJ!KQpKJ0#(F\rMiZ6;!j"RETcK-]5Sb#J-Ne($H_CC`4#AHs0:F=-Hs[m.f52C?J + 9Kh/?uFFg>(676:D]8*b.-6%Ip\u71u-o;2P@rB^'7`D74Jb7k@MO7 + ICh&U55ZlclALf2^&W#"_BfqQ#a<71UF`#:DS2]B;3M>_FAoKXK[k&q#"ReUp7RreDFb0B2 + /gPI3G9tBU%$\Y(F@1*la71B\e%XN(1SG3\oE]4&K'k-J"*d:tTb3C/=$G_5hqHL+a-W-4_ + IF;5P:nkjf!WEhlTsILfp?,YgUP!:Llp4&t`# + Z(S919'Glge^f>3]n9URp)5j.!DmG\$ehfp9Z+3A?KVrYj/[e0Jr?.mmMMe+b"QCCkM/bFY] + q\hF:Mk9B"c!Hj'E!5H$]R,=&N,?O(.`3$83j&NSJ)Sj\'BiH<`CFtHCdfM1GiY85rQT9?j + %AVd_3HENOVb+CJes`B)`;K!/Xen"-JJn\]G6l`@_?'(c#?nZlC;;_X8,%`0hN(VP6a'l_C + k5+`Z3`Ukqn_X,Ul_'UF.S`7CsU6/0Kq7)rsP+f7%#SH3`]AttucEN[d1Z+*9`'-1mW#C^, + jI7M6Ti7Cj?Y/iE"H+uB&I.C.X=`Seh\a!*s,=YdAI*\7V=CTuuAR4WU_UrVJ]W=Ll8B=k0 + 3]?i6(omthj6LFH9rMkS]5;rZ0^ZKOnJZNb'?LEtCrUU#Sp'(L)ujJnm2q!sZkXX-2s3W'; + s5ITq`>(UU_Wm?SZD%Uk,RT.XST-brDAo_/Uk4]Q<)MSAZ2btRP_@m^SsQMR]C]Y>#H0A[6 + =nPN*Gbb,**RdKptrMP0,]iiCTRX8uS5B5*=VSnQ$i$7?+hES!hMGEkE_r6"'NL!W%KBC,V(SS(gHkLPCkh](q[Bo4SqDtoIq]c^P,4RN + 5\NDHJAVF&FWXtnjR\:FrPR[IQ-$kB2gQaK;$`GhS/$XF\(sA:L;E'_XT]5>?@^lmc^oTkm + &9.go9El>LV7L>"\p?f1UT#!G"-qpp-TeCjcnN&j9`]#9V!2VU&K.'8":Rir,!p+8$hC5^4 + f72RS,(5PEf?B4j,"?2RYaouaV5q?oR\;fJG:8+`#C4g8e6J(NJ%NE47A/;\[D8Y,rl=<6s + Z/-$^5!n-o+_[8Tr$oBuZr`ZEqoDM4MBS5f_N + aN/=,NfaQs>KIqImsSc4!l^$OP'A6+WDf#7ikc84!I#;.<()DQC$?,B;e7dEN95U8XM^O7FVQC + NC8LOslb,P>[\d8V&o(&M-9HYO%OJ@$`$V*On]Z\69i]Bd:Jo\4bnsbOLuFEqUF[-Ec8S6c + /:P6+-NW^L[R!L\=O"Dhp1o?p+l0YKMp]hJMa)2G07U^7XDNeuh`Be5Fh"s5jLS + C"OJoR75_>po5M8,6s?;7IRTYGWhJd;`)%WJ[9=\/SD>^@[;]nB)+VUQ11X%q01kgA+13V? + #\?23:S@TZ0eS-+K,":m->G8Y_TR$^[9)d)_F_@-F)2"[u8>1`4W\,M.p3j,46K%]T&_b&Y + mH(X\(/(MRWQ3a7SpKT?uXQ+AXMFZb6R4fjJO^FUu]6#i)fe:PkG*EX!WNC9Z'"-'lYdU:- + _&f8`kgql,/#/s*^`D"e.ba$lpKt1\ZZ5=a:mkH!gVnr(kM0i*^H'YFeOE'(jSPL\#4=q3n + Rd'b_1$>PJQrJ%K-+NQG5tqmZ*7c;5!gtnZJlAMEka-]M-j0:.[+__lW'j6J3h/Z=fpU+dA + 'P_n7&3IN40Y$U)4,XBS*N2I+ajqj(R&o$+VPA,(p:`,KVc8r#spQ];Of1%!AB\SJUN$?d6 + FMM^6YlSN.Am6CAaZ;!]DL.fPj=sd+.O'Q5cAE*1pi;[` + QQ(jmE?,UIa6!4o)9@.kT[]njR.(_S/OU$X-L[ZFC"#S[$4a_I0H + oaSM+,A7nY + Ma.\k:n+ID,pCG[.LN9igEQi+!X^85Z+l.W?Asc'*745`&r<:b<2=:VPJLt"Z%SKIPbruO? + XU4h&@&1V>Ft?g#pm&2fR4WGh*Rolp]_,Wo471>odh=/T=u])B5'204@m?Z>LX'4l + bO'O;!ci2,?`!^9:rt7RHhjI*<`7_5#L!'[mRL=S35)pPc>qRYn^%8r8bb4fCZIPCeE"2;A + MC?'g!ujYg&A^eXqd7-`s)ePlcYot>&4sEtG%+LfZXkY2UmU52nELCX/^WL]nUT;8:l%Z.r^5)@U$X6nlc7P?ubo/UP+$D+a\SBNjYcgMO3bC091u(gUCL^AkB->W4Hq + @'Qik#%\hVf8Q>$[uK0$3$+e/^i,BKE^tEGSgS\LjpT>.mO3eOs^Z + ea6p%AXmgQW-s_*4K(QKefYs?L3O%tTc\(TkIsOnq1Oi=>.+L=1hc!U+YoJ>7\-mV\!$[Q< + nH_qUUC2(*$&N,mYVZEM5S:!2O&U1UnMJc`l]`bQs#*i8D2BmEf`RmQ.`+.3OLgebit,3c- + *'MUu#s%c=tKoc6KMS"AE)m(nO:gP2ooB_J]NK[_]6Z*O.hm@s\tHM4=p+-K5LBF<&-&DDS + '/Pc[_1_HN:B3/k+t_Lcd0=qMd\4ZQI3W%l&j@pfgGFbqIDn[BI#L:^e6]MNLUn\^55!]Mp + W2HjG(.\$1i]T_6tRdpD)dTMg^q*_+%4c47[6c,T+a;nMSIt<%R[=Qgp_>k1qYbaO/bmdD0 + k0rJd%a3`WF*?-f4nf=5Pa*EZ+LqGZIM;hJmh%k5Q/)*%(>oUBZ5#'\-Q8ZsWTU&8'+/aY, + LO;t),b5QQSV'p(ODSr3;XfXompGkZ>5U;R-<>2O,T&GLV5+%'>':@]T&ppV'8eIfnu8P+6 + dl6`'4(LWrlj:hXc!5Dsj1c#+nX^(mep=U-X2@&?1P-0-XjQ(a1UG$>pO2d3si,S1@NO,[( + `K*>]S<'UZh2Bo8Brfo3IsP`'Do@hKtpq%^G[\XB_#)"Wd@G2U,ApU>L.^E$lu*a_,RGJaT + "n^$P&NK[s[(^-!TP9_Z`Pe_sGp]$#`Tp3EFb9BE^&Ge%%_nZ:KNM2F?q":<](`IZ6=ulEg + 0d@>>GkO1"1i4Iim5!Ijr-gs&u8VNub,V^Pak+EYtg+O%)$'^ASW<&d2JFehQ^ + SisZ\PbRO"[Wa+aOK_P-+sorg4-%%\XVl:'D_S-=0R9XZ1RlpV]#+&2HcG@(/UuTP0!h;@$ + htaGd"sFP_ePRmeV(?RJ#.#GQ2%$pA`r,T%=JR&YTD!MUeB3TK(T%.r-K%),2o\X.0R=W%k + N_U0!Nj_O9-RE8_7FnH*\1KFi.anK>uAGjVkB,TIdDU1/!V)%*`ULCWQq)kO9ZYMA_nI5:c + lna9M-d]TFW\]S$,$qn8>K:kHl1_f5r0.bN\"QGO`2>0_'?kO&<"N6mC47::X-h(Uc%'tFQU6;p^e` + &+M*)FR(M1@/!C(K3e+0t08fbo`$<*3qRLAka4TY,+b$@WG_9Qm1Z`=eYh2H(5mf8Eo-.I) + ;O7kYGA,k)Ao-4)%Rt"Z<,P=B&phj(22T"';*WbFBUg + SQVFC-C3<^nB")'LfP4_32@e;GOYH2m>Hen8>JH&^;7nk\n_(t8l5Z>&+#b+35]fZT17)'_ + @5rFBa7Ok(4l9+]<;o#6ZD+R,qJ7YM$Ag;%7/TiQ3RQ@LpHO+'J$_`=)#og3$#K^2E%7;q* + mdP\IDLapZo1KmN+EmHOf + WC=`t?O<*QOeHHD]k#!PR038p+SS-XlNMU@COfYp>+1BE;D4cU&]VQXL<4lhuOTI::;lZeK- + f'q^Dg.)jNI3fS7'm/&)>DDJ\Ja!BRn=Q[.@/\T-(YQeP;l577OEd;%u8W6r.bap"XYd*@i + ,=Y_rHNI$?+u0VF6Xp7FGF9;sq/NQ%[h(J![YuR.uB!=M\sgk8DQeA(DJAM[1*i&S4WNV1+ + D*(7DQ^&1&2+WK8(^SAEgo#LPhg4r9M6f^)$G+%PI1`R#CqA=CeU>gH:Yo?62Iq>cu%V<$RM?c/Q\cJ'YsR + 60?_KVq#m_(/VMLI)PRP'ESmBKtI-hsCIGaf@%u&uhdKG6^aK>B&,tWrJm + jNFPO/:`;lW%@('f$i9/c1,i]SM;n&&\^#J2b[]I1e5botnS5c1ge)'>@7Q]g$O_H@O96rV + rMVW4#4^pDjeS&esl3c5cVoBFPe[ShX!."T.dlJs>i5+`dhA])YLH"Xkt3r7TWM'4,GS,:j + rgYlMqd#qI01/BC$`iIiq?:sDGE"h'$ggSJD5OD@57E6Xuj[r4Qa,!FkG$mIqoM*XHT/uL% + C@(d<[9#kgYD-3(qSE50SP"jqSojs&*P,(2:6n + jT=m\B8`;*7`(ke\DP*+#TbVpt.-_!-h60LV,J-gLp,V[V5g>#4'&bHO[Q,k)MOVRVqgMb7,tk3db7u"l%,j5*" + 6BJH.W;t4Pt`omfq^1dQRqqE*USM2YO<))g3W2fPQLFVpt+b\)u'P[$2G#kl]%a2('V1ZZ7/Rjbpkkk[Q>YPmOa6R<$t<59!#O]-<,HFXim8!ikg0E'#p96.>]#I`7PVmWliL$00 + eA%>R)IYg,%O[n[He5$a[>`=ADE]`nm4r1),DJ%R\D6>*E7^b=r#S>I1*?`@E_l6i@T2]=V + g\p>RK^g5r==E?[-1On>I@?>!r`HP:HoYk-rprkng4]@X^5Vqmhg?Tu.q.^L;(9B\$^ki*h + +#l3<`R"JFt8,6!IoG>9jEmMk..@#9G$F=+e581U>c]AWH3C=FtI"*4"a>0V>b>s=\Z87^= + C@Va4hAAo?E]@]daStL:GDp21O'J3mu[FW(EAK\'j\WQgFgR]6dFKYkM`p0(0Y)@=frg>>= + MJIsT%lZtO@BX*g<2M[%E00uRoe@R3G+;/KM9f,#Nbcpn0Rgq[%U`BAe#dq`TAr2:i#4526 + ECoFf=aUp;JN'i=9+Xbe2C2>NEWs*R%WNiRS[ni*-$D+an\FU6'V!TaB,%P=o\Q.fqL[/KH?eRn[@:/:p\N\Uk$Xf39N`);5^9ol+XL\DR\'"l-[q28:gc7dJYB$OFk=7`AHA6,][/[c-M+6R,A + C%270Sp^UR#;l%::W9hU;ASJd34NaE0^O@%0t'\.LgehMu"4(`MS"7/&F)VP.`Itm9_&Xeeu1"n$*Fmf[TL#;C9%Y,84:Wlo:_bHA-RDRTjiN"SuKD86cQEG;$0Ab*]i] + TPDIQ$qE?jL+%(S`-)LA@B.n_.iNud%1r%@Z)GnV,udfUjufT:B*g,"!_>iemWWGsCCb=9b + D`tBHO0imp`jbQDi3:bW"GohgZ)?69UOjN(oXtN3B1i&0qZ) + 3HJ.0dH#rI+sb]`N0:a?OLi^S+Sm\u=7+#3Den1mOr2P:29jrhO6JUn^op?SQXP6H&Gj2uB + M>9WP\+sUuHVJKVVe@dUJ,;M,$C(CQBm"C0gKa:Y3NjK`<3@+/lL(;(Tj;:^)^g'4]?ct,_ + V=$J6&p'npBS`Zd`5#ab"Lg_]0#I$M"pj_WI+U`.B$ucA"TCfHDKJ_;jC4('6OmVg6=aO`D + WmgQ"3Om4+EO@PK#fW;b:tQRbd.F;DWNH!#&IW+MH1*//]-!kV80qKm/i>_'2+)S$]=[ONn + Q(_,p]<$8QtnK[+g^>]#!#VdT71)E`StUMZUW\9C`<$/Hoc64_f:u%%pfV_DCF5LPU7W#(V + 9D2N1DpkGcr+q#:aNoj1P[Y_XZGUh+0#7Wn3%n3B-=9I3t>5"MJds=SlQKM4YtVOCG9,:2E>Qs + Ss.,WF6Plb)'dQplI&/Fd"s$sm6C4CaR#e*6l;+\b``?p0QW\)k+$2*r*P6gW.K[fim8ZSe + 1F7NR)YdeK0))h]fDku,QrX>7s>r,CGUYeJ-os=,*\tae3ns0=%[oo7KfY6`gC4/1T?R.FE + pBP8>rmX/^u$bA.BlA0YGFp!!U%Ud5&4+ReJD,pPkuZ4n:O[AY0%b87Na1X)fUZ)8>D^G4^?>BQQA9@I&i;d%)Q>BT%6Fm335nO14d70 + 32+1HmXMXY3YG0=7Ia07?t*?V9^i\gsZQo+Kg-\282-WJtDnc&s0#kP_TXpId1a"Bp0tWAp+VQ8BU#=,//V + _S9FUgBf;2$$&g[<:,"!d?e$tcUqnL3`\Y"b*d'bVf""ou9'+D[+>^VPOpu38c#!+$D(_G_ + &:[eYKijYkDDpTo@p*12S@FQMpN?j\L=.u::-CeI2cF[uXD + h)\F?tXMQWH.%a?D`6pl?ZN$S8#kB[mQ$9B[#t"3fDTd5GoiKAnXH]``F04^E,eT\PdWC@PZFUb0WL" + ;`pRM0BYUOHeY&F["I4O4%Lm%tF/Ta#`@O!SOCYT6>io]LBB!Mo`%19^AqQ]a7L4O]e:-TK + :a]!a&s,n!DK$hPCLXRQ$Uj4F'T:!mBc(uJG^+dpY]H`cArk#0c0[@0U + 5dLnmd:$?UZMACBBG`7XKZoKT/["8;oUloJYfqJ]K0ZUY7`o!j-14Ak+W*j0gFUaCp3aH:" + 6MJ^IA+:8jm`BEpT1An7@:Bs,UECDOCm2c(\XAkrSVd-T#SZqO3Vkcj88 + o@l=6nkA;32e/RB(W4sEeK<@"I_0t0kf'SHL?JOUcLr?B/!:9'Ukf#J`F2NBI8TeFV8,s0W + $jVq6?fs]9r7e"8,Tig3KU-I8kKeD:d7*\ppZiN1UuqIQ=qloVF6$fH(7KNVE$QG70q+bFI + *.G9].]&B&,B->u?&e0iui]#Y0KEgim-MpD)\mg->>3%AK#i!*^uAO^_e3e@P'?c<(#X3-F + bmUM#j+_7,%,rWN@kftW[Zjg)68(p#k@=uY?Z9'A<6ajF4FB!K+5,c,tiANi2mSEGC/B!(& + >%sr49U,Bn"1Pt$gJ>5h?+'/jW&N*gRYeHlD78VUWAXis3gjo3^Q#A!Wd2QlYEK8qb`bHsC + !/2D7ikGOLC3)0<+SO2764bMg-'&(:Mpi.,K@!dk--SU@Z)('O'40s]`J=38dFeF6rL\>P$ + `no4Kli,e$8+#ZZ/hLgjF`^H5H&rNI8J]Q* + %6e`!f>pk7!0=&qQ"pf,;N+Af9MZ_96;N/(T:+X^0*cU:HZcIZ,3bl\HMC+#8.iYgW_$4Ss + J]J[7nr_//c-5`M1V[b=o?[@9cmO[f\Yj+"isXdtNt)HP8d^jFITbdH+6!=[j?(dJHN#VkDd22piu:YIhKVLq_ea_tR=9MHI + Ym9`;r(L3N'<6cHq3$3QdOI;dMefto*aF,q;36]lT?KVqcD,#[Hmh.gYS(1oo&0#c*[J@?s + 1*j\(BKDZg.6)m/H+F^:D,8=mgb/mlVo_HYLD>p$_^Im6)E-*o#+%!OuDa`SU^dH&M+#WMb + 4`ninFhrqW"SrUPFmID5rF3h,Cn_YbPqS0H8 + E]Np.g&%DX5/3BMI381?S[^nZhZ'MO5M7_tYOWdir]fMQ,Xd;^I=1rUn%R!EJ,(19`ZPE5l + j[)$DF*1LQrG[U%>R=1&K$a-.2@b0it7[.DC4k60OtJ-&V`h3P5qE\fhlopNL):F%`srUBf + 2ASk7a95mWgsf:ZrK2'b6'hUJ^7iRT1tc13Q>-P2pG`].+T=!)d6iOM`85YUgCLKegb]ZWZ + Z2RoQWED7X<&[2:P&8)8?_]CN>N)O4(GfO=b)'"r<.@&(fmd1G + 2LH';"&@;Hi&:6rBdm26`-:r.$k!jjWR^1 + PH3!34&`#6jY]#o1X]XLb]P@61'OrOees;;O+)XH=E;YnDlYA6h(:G[^c]sPa4=d6_'<#$O + T$/7Ic%@)+JVACE#49$c_bMmn;7*^$gmB)p!%FM^(d[lhpfK:a?JQ5ts^Gek$?&,2'hC$Z- + 7TXirP,2j0uS0hcX6b+P;H6^!crBiCIa3U%3OGKt7dlT7l5`:H,fC$DT]7n`^\_6C"&'#bd + ]7/98KFCcBh8PJG6d'RX?:Bi[qFWA%dc(la*2Xn5fh*X\D2,dKI78h0ueR_p,N,l=dBefE + Em]6b(rq,%4))(OA.:U_6%RuZdY)UZiN)s_&D.IGEr&T?h<*iB-4&6$?T\;c4WS)Ff;iTX& + [N^8)e+J.]6[!*Pm89Gih)KA*sM)J`+'^ph8aM(/d2)@P1k+Y_#>Rns%h&_ieLFFbc&kH00 + GYh%F9H"4FDZhb7?:npu*"/Z^ILe285\IVCj?X/e3_'qLL0HK!2R(E3AiYmYn$=gKUZNm]T + JA9Q\*9a>"7IHL@M=f^uf`q-lX3mJ%`mRPk2F:N[F=sE(dc=/%]Y8s9MmTZPCSSrnR/'BL_ + "k=u6P)\GDVOCh\:WmeGohol07oRqcq&]R=E$s&XfbXO['AI>ThTQaP)ckOh(OcD6iH?2q$ + \@u"8!E%[E=H-Sp&#-dko'Jo60iKBR#13M!^F;3%^qKjBmaR>bLghtT:,A#ISVa#kYcib.8 + rH?)pm'a"M&p;FYE(\5PF[>Qn,CgUZ?d;EQ8,LX:#UO1bCueFB/Eq'.Sql7Bhnpf7uHn*q0 + p(O2o]L+VZ/SOHd)U2WXsIi:VeV1)C8\@"q*WlmZq$spf'h10LU`%(02\#=9H'R`UUDS?Pq4#U@_*uF9E6::aD$S?kc*" + SK)(bRZ<.l`sp\jm"[?;*Us=c8,30.@acSD;AJ.#OhW)@nCAJ_1f[*:#p_k0P6V_#!s(tI% + cl(N&FspDamkoM:RL+*MS+'B3DgB!'W[LUQ6ea#3>8$\,)Ro).Q&'H.qR5B7VdO!bOND&?D + ,VG_YR&cfZkehHk-TMnn/!VTN2(%dg,JDWX$YN*Y8HA17"Y;Y"m(H-j=X"9i + 2nTgT?0NBCTN[2j\/stg'EC7oRIj!HJk/EH_DKP + L$-0LT*\=i_bl?$!+.,mZ"-ZW2f*NPPq\n2THU0:u + @&h#omFbbPuPi)Om)c-elrEnX^sD4YqZd7'( + gK\!H[Cfbk)>>]@$ZJkk>nTW)sGTJa91Rca]uTE4JB$+c5R$j(d[%Be+A$MS[[#B;>?7CD/ + <2+H@f)h!$N;+%PW1&3inTL[@m9RdP7rOR@-IW*UqDlf4UR`X^H6uZeSJHH!Zi(OCF5iGd"g-D2l$I$bVS<\k7W!kLnG[@CI>59A3q4]O5LG[,E=c^FMlBDhk(F;'[nF+/&"l%_ + C>VMg43e1$Z^TEfFJ(!(nZ")3*VFFZMc!P%V*T"GaBma*l6f7%8=!HAJY,Y'&=-f:)G@C]/ggFr&!JRhoRNI?CgY6IF3`;F>X-0kRCR:%;*L+L>Ii-;qF`CAu>K9e_$G,fr/QOBJ&PD;iiG^72F'@C8di![7%32&3,5'4#'naQLu>?G7WJnL9DUVi?V7k8*W[& + 6A*[PGCX(uEX2Rra$uc?\#'kFD5e+9V];\e(MJr>#c>&EFUQ-70u"5#N8=*YUe9an00c/ + >35mnEPiK1O.6[p`FX-YWajK-9`M7iPY89J'n+B=6ogW\+b@Oc5ZeMoDW11q_9$r&&6T)aT + -5a1ogqi\-"ZVdkUn)1t/LU;bfJ+8?E.63b#LKMf/\2qZCp95eHeVbRHhm%RB@k5l;0Z$kY + cF&j\&^5s,iI9GKiu(-uaQ6$sM8N#=pO)F:GD6+e1'bT0")*^>;c^SD4=Lb(k0o7<\^1/JR + E1NG5A#QR5kMSQ;SS0kN4XKg[r_Ri[8;l'Q:2+$XO^RQ@])GYrH*[<.YV]5(l8Ud.\7?*I? + KZ#hQlo@5==KSWk%[n#u+L+)hLBbmtL3).)'C:dLk_C?G3&EK\8S"53q59U`31)UbC]-Yk8 + joaR7(c2]bY:L\:''q3Ja61<]!.6"#;DWA3h-9Z_UAk1"$dPIYaa(MF:?7_EP,b\0EB:TI#,)b: + gK^_=)5,="pL^_<]_,1A!YF?5pn0S:H+@0@g"'Lr4!!SgmKe7+<.5f`/C0niYn=K0iZf9XfHL\a82toOU*-'gK#fL((+GD6qApg.T!rc5aZPeZ9U/1S + Q:YnZ8UQc-oM[B,FLO@\#t/pXbah1-S&Jk[Z4fqdRib4TU.Qu38j&nA9Vk?dVFk[&8pmR0N + 2]F>W_0@n9"_5tbcOLmY"J&a9)Pnd%'`GFZ:caT904=f1C-5[<6=Ks8_gg)`1FG+MloLot>9R-#o+iaakaoiF%-=h'^]Zj.*c:m + TN9`373%+.chc)jeR2fg34.dB'b<'W5^2al:W4P*1"!l,KQ[os]blO6K5hG*@o:&NpE%,jr + $i_D&b:-@T49]]#Sk"]aU:428#EjN!d"@)2V1,C.3o1ooQ9;KGj5O2._7-Mr:nkUh.:H\8F + 9_D1dp.oN!:%T\fMX(g09#j?N!%\4HN;W_r"&HE.[*qb]1@#K>nP=Pq*)Q_`e3KLVaA?^Y: + jiU(6%R*T@_3T3"9F=aFU_1'%T)O';#Lr&%1Y0W&lC4n-e(qt@iR6[9#+(+a#cr*RnZ=tl: + N!>%nn6="A-8F'2dsD;&(3O%3\Ui,#U!;;EZ:'9dN\C-;n\.;LKrkN@@br.T3AZ/k@H';8Y + ek;6jT1$F/Cf>qnCu'gQ^WdlXEH6fb4p<`O!<1=1Xac([(9Icd9nc\TL0/;J=FH!*ASQleBnSVWK3a + F5,GnBN'tSY;4Y'9!P6oX:Z*tt+]$_OTYl[6//4>07";ETCRX8.rDhR5A3*9<6UHD)d;H`C + Z=oG!:+]bK[h@H+<"oY5V]qnn(*>QMi4QD$mJ7[Rc+R?;^0C!>>Q)?B%Dc9i_H\\1>Wp#19 + uU:>H&io%XNDOc*Q\ZKOc#jf6J]`c)=OK/D'hEbh#5T*%FJH%dTnHR>s6\C:"9F$QBUQ6s2dV52"AL<`(?h8n$oG[>E-1!Bis1s]e-5(0bC6*/YLskl<^ + UY*3$Im%#bQ.JHokd?N'A#%ImdGnm=!?)hGLF1..sS%7gNhd(3gP<9gbUlS:7'[j)6h@.gm + cdmiqkXN:1Napf_56_u[4'1MM#:'G$3#%2)V$IqA]]m>:/pUKumVCRUuq\%q'qP"=9^0k,TMAQ + KeHWt?RfG\Q.j#07B!%D?s--et$?8n8r?\aS)iH-g,"b$L]D`q!hf]**)&`#qZ;9-8:>?ZX + _G$PXNN&%]7jUP[1%Uiri:b$am(b.[>!b7,Y*C-!l=^srb@.p^N/4/*RfEHMPbDN1T=>Lk= + jn-RT+j8qe;IkMR+biV@IS6_j9]Xo&jQTe-qN9qQc`DtSaM^9;.0*Ref]I.=13GcC_ou'@Q + 3sJ4Yj-Q=*edc_?f?o(0eRG.VMSuXMJ0%(XGuY/R`bmV>m5;5"Nh*VD1Uiklp.Qk1M$sEd& + C0P:.(dmiJK8OL,?C]V3c!SC`E&KGiFTZ*F0E:N"X + A>W*nNu6D_@uIC^U8J>NS!JlsL=L-Ieno-p*JB@ql9hYGeg`3:[`UA/(gA=:g:kYtaAU/+3 + ^,$P6u?qWlk:g``khjJ_ZUanACdDdI\CD7U1^(X)S(En$?=qf%62Ou*-3jK(h+^>1:G@\W[ + jGrb')Y-.O#APm_8I7NqmU]O!#2t9I]P*j!kCX6HE!mVA_n0_qk`BN$8T>+sNh$Tr[THAaW + T@CbBjH5'Ca;kj2X?lu)+TIg$anq]#Y#Ss")_KL1Z+n>'/G!d=F+6.]XuG4Zl!E#'$??S,U3;E5YpteYj + nCa%pEeue-LPLPmWT!*LFMYX.dj2bm^GHZ="U"gIA.*!,N6-TdLC9UO)QQ4A6/p+O&:$A;K + XDRBWEi1F.a'0?%+),njC3HPf/cl'D$3K]Oo(<(>ori-IQX"E7k3d];ChC_3$&t8V8o_]LLX.g + AP7r.AH?ZQ>GJAMS2f\NBEqE.Kn@s)>c[g<_Jp8r$GX$ieQ[SKZIeEGboPY.[IgpWuMKl=_ + Ge]2^cJs.USa#R7oNquNLOf0OP'J^EGs@O=9i6/u-[>A7FpCN\(R99Nj*kq0IXgR1M&MkL + r?Xco$?cONcg?2=mXFWnIb#(%V@eM?&r7SBN'ZpD6hBBa(_sd'oO849tn"T)eoC;CJ= + 6Y4lrdXD:#Qt&0"+igHd!.r*'aoa`@F4e&7O8_*7:OYh`+CkGN^mU,poF*Voo_CIc<3MX<7 + R9l-.;UB`aprp9kMjDCuok&<)6E@oGn(p6T7k:P]KPEcV$%B:)*=P75\"FeQA)^]k4ZVXu. + .UpD&D4@sM3aM&9fR-.9'oU(AES12 + D7jXAAATHIO`b./u\3Ddq%0Me^f?uGHbPad%3q$d[;\oSQ + __6"&S9!4,aicd;;-`bV7]NZFom5GC_Y&oCBm3e;pKrXCj3DpthLA%nea)pUIGY!Za5uphI + =C('a63-mrdTFDquHf'BAn;AlAVS8pXS,f!;_R3p&(I%_ + t2;Oj^9b0mr-/B^rH\Lu(Rr4t(]90)X/*2\D9SX4;P,;t\UI,R'1;k3)5cI9GkkE/.(pn<^ + "r*h!L6<+::d)%pW,>gcR)*nRh8@9=p"19QgOH[X<9[cto*_t2'PsAj/7cd0ceC,.0<7OuS + =]X)'I:67/h;Zco3RpZqmKuLQ5hqW%i.8pAD(!hR:b.'IA&kn@dU-0MKCP8+ + 'V%u\/nkje\E0[6,gr_#Ljl\.c!i:^nZmTL#I:5=.&8?hU'qB?!g0Kh1!t"rW.Q-=<7d#i7 + L4*K]-$>)2@,&HI@1M9)5eN3[EY\N/RJ`[uTM$r]uY,=WU.tjDg!LP_g8[JX5)B^gWUaq3Y + HVKt4]rS:u7F@Mi?9aG$:DH5og4AD050V!15"SiBIKDP1TV:c9JslIrtWXQs'H\ZY8PrkYi + *>8uAfT(4>-=D^HM>Ft)jmb>JG]A2*7B>3NeBMlQu>TX4_nA,>@&+Nn3#Scg^ + QsL^%6/O-(o%^u7b_Q>H3K0#q#=,>WLHeA9FPT/YeFd*S=k<9%Ipq"'?(1&A*kIK$;KkLkH + #%&$=A@`K?6>$`pte5tjS7[eRDT.MpRhul5f]f1HJZ.Zm/(,9-1:X/TJ-k'>ZaMeq-QA6o_ + h'6JftSQGpiC3;E;eOIc%p1r;U-]q>UE?rW#2#"C+hqoN3O&9WmL$"CPUFJ^?Rd5o:mNi1q + *>cs-`?O:qi66lc9sHil\P70qit-%k+s%Y0?n!as(VK(-Jk6Ps>8h>/iU+r"1tOhhOc*'K) + (rZFTGKb35h7>T>4,T1fBBnfgd3MG8!5#=]R@\d"]d9\@mR'd^hjB[\kIP=5.`>IV\=E8rY + hh^LG/n8-j.pgXdG?uUR.ROc0\2<%g->sI"L2WI!!LJpF,,KV3KE"<(`QY.ck3C+c2@@7*'C"`8%au_?O7j`K%Adp?ibRC+s8jP?q]5lD7L\eR#=WRTqp%*D*+>( + 8B;8#X6?ArMR&pZrWXG>3fa:Xjt*5VFV%cLM\R^2;JBEVU4`8/U\Gcra+c[2/=Tgr"5#El0*d^":!n?Q8*Sn"o]kfA?F4S*G"1j6mFclMr/L&gf:X + S\3BuA2-I]=RQ.t_:UsX@2pSHn=mIf_f#rkMju3"i/PXt*'>2P`1qml-&Pfs'OmS4MXb:1` + RqpB@iSh#6!upsb?@SoA830)n;Y>;MSRn8ksY$D7EF.(,\3F1P4E%FX(IH/f`?_H"^/B3Jb + pF?m'V[9ZrMeTIkYIS`L-6DA^&i"1hN9'pHXffc-(&IKe2;\ZFRM,G"Nd8$AXgdk'bS/s$1 + 6<"eTEK(`RWj=kp':,1-_9$d2oqBbqS]oVRo%g0[NfSMd;:k+0t=";F=N%u?ICG#)0ho/hn + cYB1hfe_7c?CE6ufkZ(29j*JipWL>;2a[$JH^L/eX&/!]``RroeA8Ig%ZM%nTg"S`)CrOXB + _[b3,>?sl@O]AjUpqAhb898Y_afRKKjkSU_FDdZ!rb7%'g[h4Lb:uN"k#d,i`=t7<^mi(4k + 5F2ls+#&0"i0m\"lS/XJM^3D_S_uTf?4sPgEC9<7P7N4)io.3Si+O_k8iUjS[&INm@q]LY)"Tp^m+05D;GN5pXns?AIho3&9aYqgA>N"mG5OeG95S#n_[pEIG@! + /QImE9+IM"pN9R4@&U<>Y(:r8k0&0*d + 4l/=LV=`W:e9[`elMX3G&*d@"7\LjL8sl(9m6F^n!GlKSrWm?DW,C&+@H%-6`VA=4jF!SbT + W"J,*d)u.mDsHo0GleJa?Oh[Bi<9;00*;bA"&L + oYO?3Qk56MNMa/NeeA/t>'ID[-hoPcDm-C*mc>N\%1 + ]Y(R4i8*J^n@-_DW:IoC1OIHR'T*c.)$;dW-OIZ3$,-W5U$Vle[MD2#ekc;SCJ>UOaO,4*< + cOCH7%8bXcLkr.4=Ie?E9h0:>O(8h6mgg!$%oE!2OS]R8rt#bE%hM9&+_%`ODY_Z6&Q'>VO + W+n[*e0$`ZNYs'O$#f^nIlKj'2^\%OZO6(584\dL@7#p93P<2it;r&'iA$IO]rR?$ES--!W + dOTm_WJQXVVRj(K#AmOa@nlIi&c>h[a8`@@\7W`te-.),Z_^FU#8/5jL=9$4J0d+b[GkV$L!P1qS:h_ + #Q%/lLjbP2*T@SI7`JS>ZfHP5?o\s"G)f]4uel%S4smlJ;nW0iJlCP8c7*+#4KS1/f&D/&n + n&kfAqk1K-4gP<1SCBWS#NCr^@h'2(12:Giea2,dR6P?Tn:^n>EhS1nS3o4p85D`8>N2cFo + ZPC#7;IlJ*o3)bSlPD_ELO#[l;3E)8)PFFS]T/mX\3`Dq;PH-anY<*E(4&`UMPIip*^H<1I + 4B'9_PKQ);cTMrj4]BrqPM87Lh`__65#^W.PNtE]mlqKW5?%;@PP[Sns$.8#5Z@tRPRBb+% + m^mC5u\XdPT)p<+$pYd6;#ZK+9~>Q +Q +showpage +%%Trailer +count op_count sub {pop} repeat +countdictstack dict_count sub {end} repeat +cairo_eps_state restore +%%EOF diff --git a/docs/figs/sram_overview.pdf b/docs/figs/sram_overview.pdf new file mode 100644 index 00000000..153b1ac4 Binary files /dev/null and b/docs/figs/sram_overview.pdf differ diff --git a/docs/figs/sram_overview.svg b/docs/figs/sram_overview.svg new file mode 100644 index 00000000..1f399816 --- /dev/null +++ b/docs/figs/sram_overview.svg @@ -0,0 +1,717 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Precharge + Decoder + + + + + + Column Mux + + WLDriver + UpperAddress + LowerAddress + Write Driver + Sense Amp + + + 6T Cell + + + Data In/Out + + + + + + diff --git a/docs/figs/timing_read.pdf b/docs/figs/timing_read.pdf new file mode 100644 index 00000000..850a0704 Binary files /dev/null and b/docs/figs/timing_read.pdf differ diff --git a/docs/figs/timing_read.svg b/docs/figs/timing_read.svg new file mode 100644 index 00000000..f7c218de --- /dev/null +++ b/docs/figs/timing_read.svg @@ -0,0 +1,641 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + CLK + ADDR + CSb + OEb + WEb + DATA OUT + A0 + A1 + + + + + + + + + D0 + D1 + + + + + Setup + Hold + Setup + Hold + + Read Delay + Setup + + + SCLK + + + + diff --git a/docs/figs/timing_write.pdf b/docs/figs/timing_write.pdf new file mode 100644 index 00000000..74811468 Binary files /dev/null and b/docs/figs/timing_write.pdf differ diff --git a/docs/figs/timing_write.svg b/docs/figs/timing_write.svg new file mode 100644 index 00000000..eb5290c6 --- /dev/null +++ b/docs/figs/timing_write.svg @@ -0,0 +1,853 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + CLK + ADDR + CSb + OEb + WEb + DATA IN + A0 + A1 + + + + + + + D0 + D1 + + + + + Setup + Hold + Setup + Hold + Setup + + + WD_EN + + + + + + Setup + + Hold + + + + + + + + D0 + D1 + XMem Cell + + Write Delay + + diff --git a/docs/figs/tree_column_mux_schem.pdf b/docs/figs/tree_column_mux_schem.pdf new file mode 100644 index 00000000..7a4e505d Binary files /dev/null and b/docs/figs/tree_column_mux_schem.pdf differ diff --git a/docs/figs/wordline_driver.pdf b/docs/figs/wordline_driver.pdf new file mode 100644 index 00000000..4eda2a71 Binary files /dev/null and b/docs/figs/wordline_driver.pdf differ diff --git a/docs/figs/write_driver_schem.pdf b/docs/figs/write_driver_schem.pdf new file mode 100644 index 00000000..53427630 Binary files /dev/null and b/docs/figs/write_driver_schem.pdf differ diff --git a/docs/figs/write_driver_schem.svg b/docs/figs/write_driver_schem.svg new file mode 100644 index 00000000..05c2693f --- /dev/null +++ b/docs/figs/write_driver_schem.svg @@ -0,0 +1,643 @@ + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + VDD + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + EN + + + + + + + + + + + + + + + + + + DATA + + + + + + BL + BL_bar + + diff --git a/docs/figs/xsram_block.svg b/docs/figs/xsram_block.svg new file mode 100644 index 00000000..1d0d465d --- /dev/null +++ b/docs/figs/xsram_block.svg @@ -0,0 +1,199 @@ + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + Block Diagram of XSRAM Topmost Instance Datapath + + + XSRAM.XPRECHARGE + XSRAM.XARRAY + XSRAM.XCOLMUX + XSRAM.XSENSE_AMP + + XSRAM.XWRITE_DRIVER + + diff --git a/docs/gdsmill.tex b/docs/gdsmill.tex new file mode 100644 index 00000000..32cf68dd --- /dev/null +++ b/docs/gdsmill.tex @@ -0,0 +1,33 @@ +\section*{GDSMill} +\label{sec:gdsMill_permission} + +OpenRAM uses gdsMill, a GDS library written by Michael Wieckowski at +the University of Michigan. Michael gave us complete permission to use +the code. Since then, we have made several bug and performance +enhancements to gdsMill. In addition, gdsMill is no longer available +on the web, so we distribute it along with OpenRAM. + + +\begin{verbatim} +From: Michael Wieckowski +Date: Thu, Oct 14, 2010 at 12:49 PM +Subject: Re: GDS Mill +To: Matthew Guthaus + +Hi Matt, + +Feel free to use / modify / distribute the code as you like. + +-Mike + +On Oct 14, 2010, at 3:07 PM, Matthew Guthaus wrote: +> Hi Michael (& Dennis), +> +> A student and I were looking at your GDS tools, but +> we noticed that there is no license. What is the license? +> +> Thanks, +> +> Matt + +\end{verbatim} diff --git a/docs/implementation.tex b/docs/implementation.tex new file mode 100644 index 00000000..a45db539 --- /dev/null +++ b/docs/implementation.tex @@ -0,0 +1,373 @@ +\section{Software Implementation} +\label{sec:implementation} + +OpenRAM is implemented using object-oriented data structures in the +Python programming language. The top-level executable is +\verb|openram.py| which parses input arguments, creates the memory and +saves the output. + + +\subsection{Design Hierarchy} +\label{sec:design} + +All modules in OpenRAM are derived from the \verb|design| class in +\verb|design.py|. The design class is a data structure that consists +of a spice netlist, a layout, and a name. The spice netlist +capabilities are inherited from the \verb|hierarchy_spice| class while +the layout capabilities are inherited from the \verb|hierarchy_layout| +class. The only additional function in design.py is \verb|DRC_LVS()|, +which performs a DRC/LVS check on the module. + + +\begin{figure}[htb] +\centering +\includegraphics[width=10cm]{./figs/class_hierarchy.pdf} +\caption{Class hierarchy} +\label{fig:class_hierarchy} +\end{figure} + +\subsubsection{Spice Hierarchy} + +The spice hierarchy is stored in the \verb|spice| class in +\verb|hierarchy_spice.py|. When the design class is initialized for a +module, a data structure for the spice hierarchy is created. The +spice data stucture name becomes the name of the top-level subcircuit +definition for the module. The list of pins for the module are added +to the subcircuit definition by using the \verb|add_pin()| function. +The \verb|add_mod()| function adds an instance of a +module/library\_cell/parameterized\_cell as a subcircuit to the +top-level structure. Each time a sub-module has been added to the +hierarchy, the pins of the sub-module must be connected using the +\verb|connect_pins()| function. It is important to note that the pins +must be listed in the same order as they were added to the submodule. +Also, an assertion error will occur if there is a mismatch in the +number of net connections. The \verb|spice| class also contains +functions for reading or writing spice files: +\begin{itemize} +\item \verb|sp_read():| this function is used to read in spice + netlists and parse the inputs defined by the ``subckt'' definition. +\item \verb|sp_write():| this function creates an empty spice file in + write mode and calls \verb|sp_write_file()|. +\item \verb|sp_write_file():| this function recursively writes the + modules and sub-modules from the data structure into the spice file + created by \verb|sp_write()|. +\end{itemize} + +\subsubsection{Layout Hierarchy} + +The layout hierarchy is stroed in the \verb|layout| class in +\verb|hierarchy_layout.py|. When the design class is initialized for +a module, a data structure for the layout hierarchy is created. The +layout data structure has two main components: a structure for the +instances of sub-modules contained in the layout, and a structure for +the objects (such as shapes, labels, etc...) contained in the layout. +The functions included in the \verb|layout| class are: +\begin{itemize} +\item \verb|def add_inst(self,name,mod,offset,mirror):| adds an + instance of a physical layout (library cell, module, or + parameterized cell) to the module. The input parameters are : + \begin{description} + \item[name] - name for the instance. + \item[mod] - the associated spice module. + \item[offset] - the x-y coordinates, in microns, where the instance + should be placed in the layout. + \item[mirror] - mirror or rotate the instance before it is added to + the layout. Accepted values for mirror are: + \verb|"R0", "R90", "R180", "R270"| $^\ast$Currently, only ``R0'' works.\\ + \verb|"MX" or "x", "MY" or "y", "XY" or "xy"| (``xy'' is + equivalent to ``R180'') + \end{description} +\item \verb|add_rect(self,layerNumber,offset,width,height):| adds a + rectangle to the module's layout. The inputs are: + \begin{description} + \item[layernumber] - the layer that the rectangle is to be drawn in. + \item[offset] - the x-y coordinates, in microns, where the + rectangle's origin will be placed in the layout. + \item[width] - the width of the rectangle, can be positive or + negative value. + \item[height] - the height of the rectangle, can be positive or + negative value. + \end{description} +\item \verb|add_label(self,text,layerNumber,offset,zoom):| adds a + label to the layout. The inputs are: + \begin{description} + \item[text] - the text for the label + \item[layernumber] - the layer that the label is to be drawn in . + \item[offset] - the x-y coordinates, in microns, where the label + will be placed in the layout. + \item[zoom] - magnification of the label (ex: ``1e9''). + \end{description} +\item \verb|add_path(self,layerNumber,coordinates,width):| this + function is under construction... +\item \verb|gds_read():| reads in a GDSII file and creates a + \verb|VlsiLayout()| class for it. +\item \verb|gds_write():| writes the entire GDS of the object to a + file by gdsMill \verb|vlsiLayout()| class and calling the + \verb|gds2writer()| (see Sections~\ref{sec:vlsilayout} + and~\ref{sec:gdsmill}. +\item \verb|gds_write_file():| recursively the instances and objects + in layout data structure to the gds file. +\item \verb|pdf_write():| this function is under construction... +\end{itemize} + + +\subsection{Creating a New Design Module} +\label{sec:new_design} + +Each module in the SRAM is its own Python class, which contains a +design class, or data structure, for the layout and spice. The +\verb|design| class (\verb|design.py|) is initialized within the +module class, subsequently creating separate data structurse to hold +the layout (\verb|hierarchy_layout|) and spice +(\verb|hierarchy_spice|) information. By having a class for each +module, it is very easy to instatiate instances of the modules in any +level of the hierarchy. Follow these guidelines when creating a new +module: + + +\begin{itemize} +\item Derive your class from the design module: +\begin{verbatim} +class bitcell_array(design.design): +\end{verbatim} +\item Always use the python constructor \verb|__init__| method so that + your class is initialized when an object of the module is + instatiated. The module parameters should also be declared: +\begin{verbatim} +def __init__(self, cols, rows): +\end{verbatim} +\item In the constructor, call the base class constructor with the + name such as: +\begin{verbatim} +design.design.__init__(self,"bitcell_array") +\end{verbatim} +\item Add the pins that will be used in the spice netlist for your + module using the \verb|add_pin()| function from the + \verb|hierarchy_spice| class. +\begin{verbatim} +self.add_pin("vdd") +\end{verbatim} +\item Create an instance of the module/library\_cell/parameterized + cell that you want to add to your module: +\begin{verbatim} +cell=bitcell.bitcell(cell_6t) +\end{verbatim} +\item Add the subckt/submodule instance to the spice hierarchy using + the \verb|add_mod()| function from the \verb|hierarchy_spice| class: +\begin{verbatim} +self.add_mod(cell) +\end{verbatim} +\item Add layout instance into your module's layout hierarchy using + the \verb|add_instance|() function, which takes a name, mod, offset, + and mirror as inputs: +\begin{verbatim} +self.add_inst(name=name,mod=cell,offset=[x_off,y_off],mirror=x) +\end{verbatim} +\item Connect the pins of the instance that was just added by using + the \verb|connect_pins| function from the \verb|hierarchy_spice| + class: +\begin{verbatim} +self.connect_inst([BL[%d]%col, BR[%d]%col, WL[%d]%row, gnd, vdd]). +\end{verbatim} + The pins must be listed in the same order as they were added to the + submodule. Also, an assertion error will occur if there is a + mismatch in the number of net connections. +\item Do whatever else needs to be done. Add rectangles for + power/ground rails or routing, add labels, etc... +\item Every module needs to have ``self'' height and width variable + that can be accessed from outside of the module class. These + paramaters are commonly used for placing instances modules in a + layout. For library cells, the \verb|self.width| and + \verb|self.height| variables are automatically parsed from the GDSII + layout using the \verb|cell_size()| function in \verb|vlsi_layout|. + Users must define the width and height of dynamically generated + designs. +\item Add a call to the \verb|DRC_LVS()| function. +\end{itemize} + +\subsection{GDSII Files and GdsMill)} +\label{sec:gds} + +GDSII is the standard file used in indusrty to store the layout +information of an integrated circuit. The GDSII file is a stream file +that consists of records and data types that hold the data for the +various instances, shapes, labels, etc.. in the layout. In OpenRAM, we +utlize a nifty tool, called gdsMill, to read, write, and manipulate +GDSII files. GdsMill was developed by Michael Wieckowski at the +University of Michigan. + +\subsubsection{GDSII File Format} +\label{sec:format} + +The format of gds file contains several parts, as it could be shown in +Figure~\ref{fig:gds_file}. + +\begin{figure}[htb] +\centering +\includegraphics[width=10cm]{./figs/gds_file} +\caption{example of a GDSII file} +\label{fig:gds_file} +\end{figure} + +The first part is the gds file header, which the contains GDSII +version number, date modified, date last accessed, library, user +units, and database units. + +The second part is the list of structures. These structures contain +geometries or references to other structures of the layout in +heirarchical form. Within a structure there are several kinds of +records: + +\begin{itemize} +\item Rectangle - basic geometry unit in a design, represent one layer + of material in a circuit(i.e. a metal pin). Five coordinates and + layer number are stored in rectangle record. +\item Structure Reference - a structure that is used in this + structure. The information about this reference will be used store + as a structure in the same gds file. +\item Text - a text record used for labels. +\item Path - used to represent a wire. +\item Boundary - defines a filled polygon. +\item Array Reference - specifies an array of structure instances +\item Node - Electrical nets may be specified with the NODE record +\end{itemize} + +The last part is the tail of the GDSII file which ends the GDS +Library. + +\fixme{Provide a link to the complete GDSII specification.} + +\subsubsection{GdsMill} +\label{sec:gdsmill} + +As previously stated, GdsMill is a set of scripts that can be used to read, write, and manipulate GDSII files. + +\paragraph{The gds2\_reader and gds2\_writer:} + +In GdsMill, the \verb|gds2_reader| and \verb|gds2_writer| classes contain the various functions used to convert data between GDSII files and the \verb|vlsilayout| class. These classes process the data by iterating through every record in the GDS structures and check or write every data record. The record type (see Section~\ref{sec:format}),is tracked and identified using flags. + +\fixme{Do we need more information of these classes, or should we just point to the GdsMill documentation?} + +\paragraph{The VlsiLayout Class:} +\label{sec:vlsilayout} + +After the \verb|gds2_reader| class reads in the records, the data has to be stored in a +way that can be easily used by our code. Thus, the +\verb|VlsiLayout| class is made to represent the layout. +\verb|VlsiLayout| contains the same information as GDSII file but in a +different way. \verb|VlsiLayout| stores records in data structures, which +are defined in \verb|gdsPrimitives.py|. Each record type has a corresponding class defined in \verb|gdsPrimitives|. Thus, a vlsilayout should at least +contains following member data: +\begin{itemize} +\item \verb|self.rootStructureName| - name of the top design. +\item \verb|self.structures| -list of structure that are used in the class. +\item \verb|self.xyTree| - contains a list of all structure names that appeared in the design. +\end{itemize} + +The \verb|VlsiLayout| class also contains many functions for adding +structures and records to a layout class, but the important and most +useful functions have been aggregated into a wrapper file. This +wrapper is called \verb|geometry.py| and is located in the +\verb|compiler| directory. + +\subsubsection{OpenRAM-GdsMill Interface} +\label{sec:wrapper} + +Dynamically generated cells and arrays each need to build a +\verb|VlsiLayout| data structure to represent the hierarchical layout. +This is performed using various functions from the \verb|VlsiLayout| +class in GdsMill, but the GdsMill file is very large and can be +difficult to understand. To make things easier, OpenRAM has its own +wrapper class called \verb|geometry| in \verb|geometry.py|. This +wrapper class initializes data structures for the +instances and objects that will be added to the \verb|VlsiLayout| +class. The functions \verb|add_inst()|, \verb|add_rect()|, +\verb|add_label()| in \verb|hierarchy_layout|, add the structures to +the \verb|geometry| class, which is then written out to a GDSII file +using \verb|VlsiLayout| and the \verb|gds2_writer|. + +User included library cells, which should be in gds files, can be used +as dynamically generated cells by using GDSMill. +Cell information such as cell size and pin location can be obtained by using +built in functions in the \verb|VlsiLayout| class. + +Cell size can be finded by using the \verb|readLayoutBorder| function of the \verb|VlsiLayout| class. +A boundary layer should be drawn in each library cell to indicate the cell area. +The \verb|readLayoutBorder| function will return the width and height of the boundary. +If a boundary layer do not exist in the layout, then \verb|measureSize| can find the physical +size cell. +The first method is used as primary method in \verb|auto_Measure_libcell| the lib\_utility.py, +while the second method is used as a back up one. +Each technolgy setup will import this utility function and read the library cell. + +Pin location can be find by using the \verb|readPin| function of the \verb|VlsiLayout| class. +The \verb|readPin| function will return the biggest boundary which covers the label and +is at the same layer as the label is. + + +\subsection{Technology Directory} +\label{sec:techdir} + +The aim of creating technology directory is to make OpenRAM portable +to different technologies. This directory contains all the information +related to the specific process/technology that is being used. In +OpenRAM, the default technology is FreePDK45, which has it own +technolony directory in the trunk. The technology-specific directory +should consist of the following: +\begin{itemize} +\item Technology-Specific Parameters - These parameters should include + layer numbers and any design rules that may be needed for generating + dynamic designs (DRC rules). The parameters should be added in + \verb|/techdir/tech/tech.py| and layer map in the \verb|/techdir|. +\item Library Cells - The library cells and corresponding spice + netlists should be added to the \verb|/gds_lib| and \verb|/sp_lib| + directories. +\item Portation Functions - Some of the dynamically generated cells + may need helper functions to deal with technology-specific + requirements. Additional, tech-specific, functions should be added + to the \verb|/techdir|. +\end{itemize} + +For more information regarding the technology directory and how to set +one up for a new technology, refer to Section~\ref{sec:porting} + +\subsection{DRC/LVS Interface} +\label{sec:drclvs} + +Each design class contains a function \verb|DRC_LVS()| that performs both +DRC and LVS on the current design module. This enables bottom-up +correct-by-construction design and easy identification of where errors +occur. It does incur some run-time overhead and can be disabled on +the command line. The \verb|DRC_LVS()| function saves a GDSII file and a Spice +file into a temporary directory and then calls two functions to +perform DRC and LVS that are tool-dependent. + +A reference implementation for the DRC and LVS functions are provided +for Cadence Calibre since this is the most common DRC/LVS tool. Each +of these functions generates a batch-mode ``runset'' file which +contains the options to correctly run DRC and LVS. The functions then +parse the batch mode output for any potential errors and returns the +number of errors encountered. + +The function \verb|run_drc()| requires a cell name and a GDSII +file. The cell name corresponds to the top level cell in the GDSII +file. It also uses the layer map file for the technology to correctly +import the GDSII file into the Cadence database to perform DRC. The +function returns the number of DRC violations. + +The function \verb|run_lvs()| requires a cell name, a GDSII file, and +a Spice file. Calibre will extract an extracted Spice netlist from the +GDSII file and will then compare this netlist with the OpenRAM Spice +netlist. The function returns the number of uncompared and unmatched +devices/nets in the design. + +For both DRC and LVS, the summary file and other report files are left +in the OpenRAM temporary directory after DRC/LVS is run. These report +files can be examined to further understand why errors were +encountered. In addition, by increasing the debug level, the command +line to re-create the DRC/LVS check can be obtained and run manually. + + + + + diff --git a/docs/intro.tex b/docs/intro.tex new file mode 100644 index 00000000..5da2f731 --- /dev/null +++ b/docs/intro.tex @@ -0,0 +1,267 @@ +\section{Introduction} +\label{sec:intro} + +The OpenRAM project aims to provide a free, open-source memory +compiler development framework for Random-Access Memories (RAMs). +Most academic Integrated Circuit (IC) design methodologies are +inhibited by the availability of memories. Many standard-cell process +design kits (PDKs) are available from foundries and vendors, but these +PDKs do not come with memory arrays or compilers. Some PDKs have +options to request ``black box'' memory models, but these are not +modifiable, have limited available configurations, and do not have +full details available to academics. These restrictions make +comparison and experimentation with real memory systems impossible. +OpenRAM, however, is user-modifiable and portable through +technology libraries to enable experimentation with real-world +memories at a variety of performance points and costs. + +The specific features of OpenRAM are: +\begin{itemize} + +\item \textbf{Memory Array Generation} + + Currently, OpenRAM supports simple 1 read/write port synchronous + memories, but it will be extended to multi-port memories, register + files, and asynchronous memories in the future. The generation + includes features such as automatic word-line driver sizing, + efficient decoder sizing, multiple-word column support, and + self-timing with replica bitlines. + +\item \textbf{Portability and Extensibility} + + OpenRAM is a Python program. Python enables portability to numerous + platforms and enables the program to be extended by anyone. In + general, it works on Linux, MacOS, and Windows platforms. + + User-readable technology files enable migration to a variety of + process technologies. Currently, an implementation in a + non-fabricale 45nm technology (FreePDK45) is provided and the MOSIS + Scalable CMOS (SCN3ME\_SUBM.30) is provided. The compiler has also + been extended to several technologies. We hope to work with vendors + to distribute the technology information of others commercial + technologies soon. + + OpenRAM makes calls to commercial circuit simulators and DRC/LVS + tools in an abstracted way for circuit simulation and + verification. This enables adaptation to other design + methodologies. However, it also supports a completely open-source + platform for older technologies. + +\item \textbf{Timing and Power Characterization} + + OpenRAM provides a basic framework for analysis of timing and power. + This includes both analytical estimates, un-annotated spice + simulations, or back-annotated simulations. The timing and power + views are provided in the Liberty open format for use with the most + common logic synthesis and timing analysis tools. + +\item \textbf{Commercial Tool Independence and Interoperability} + + To keep OpenRAM portable and maximize its usefulness, it it + independent from any specific commercial tool suite or + language. OpenRAM interfaces to both open-source (e.g., NGSpice) and + commercial circuit simulators through the standard Spice3 circuit + format. The physical layout is directly generated in the GDSII + layout stream format which can be imported into any academic or + commercial layout tools. We provide a Library Exchange Format (LEF) + file for interfacing with commercial Placement and Routing tools. + We provide a Verilog behavioral model for simulation. + +\item \textbf{Silicon Verification} + TBD + +\end{itemize} + +\subsection{Requirements} + +Development is done on Ubuntu or MacOS systems with Python 2.7. + + +\subsubsection{Timing Verification Tools} + +For peformance reasons, OpenRAM uses analytical delay models by +default. If you wish to enable simulation-based timing +characterization, you must enable this on the command line with the +``-c'' command line argument. + +% Not complete yet +%If you wish to perform back-annotated characterization, you must +%further enable this with the ``-b'' command line argument. + +OpenRAM can use the following circuit simulators and possibly others +if they support the Spice3 file format: +\begin{itemize} + \item HSpice I-2013.12-1 or later + \item ngSpice 26 \url{http://ngspice.sourceforge.net/} + \item CustomSim (xa) M-2017.03-SP5 or later +\end{itemize} + +\subsubsection{Physical Verification Tools} + +By default, OpenRAM will perform DRC and LVS on each level of +hierarchy. To do this, you must have a valid DRC and LVS tool and the +corresponding rule files for the technology. OpenRAM can, however, +run without DRC and LVS verification using the ``-n'' command line +argument. It is not recommended to use this if you make any changes, +however. + +DRC can be done with: +\begin{itemize} +\item Calibre 2012.3\_15.13 or later (SCMOS or FreePDK45) +\item Magic \url{http://opencircuitdesign.com/magic/} (SCMOS only) +\end{itemize} + +LVS can be done with: +\begin{itemize} +\item Calibre 2012.3\_15.13 or later (SCMOS or FreePDK45) +\item Netgen \url{http://opencircuitdesign.com/netgen/} (SCMOS only) +\end{itemize} + +\subsubsection{Technology Files} + +To work with FreePDK45, you must install the FreePDK baseline kit from: +\url{https://www.eda.ncsu.edu/wiki/FreePDK45:Contents} + +We have included an example Calibre DRC deck for MOSIS SCMOS design +rules, but DRC with Magic relies on its own design rules: +\url{https://www.mosis.com/files/scmos/scmos.pdf} We require the +format 32 or later to enable stacked vias which is included with +Qflow: +\begin{verbatim} +git clone http://opencircuitdesign.com/qflow +cp tech/osu050/SCN3ME_SUBM.30.tech +\end{verbatim} + +You can over-ride the location of the DRC and LVS rules with the +DRCLVS\_HOME environment variable. + +\subsubsection{Spice Models} + +FreePDK45 comes with a spice device model. Once this is installed, it +is used. + +SCMOS, however, does not come with a device spice model. This must be +obtained from MOSIS or another vendor. We use the ON Semiconductor +0.5um device models. + +You can over-ride the location of the spice models with the +SPICE\_MODEL\_DIR environment variable. + + + +\subsection{Environment Variables} + +In order to make OpenRAM flexible, it uses two environment variables +to make it relocatable in a variety of user scenarios. Specifically, +the user may want technology directories that are separate from +OpenRAM. Or, the user may want to have several versions of +OpenRAM. This is done with the folowing required environment +variables: specifically: +\begin{itemize} +\item OPENRAM\_HOME defines the location of the compiler source directory. +\item OPENRAM\_TECH defines the location of the OpenRAM technology + files. This is discussed later in Section~\ref{sec:tech}. +\end{itemize} + +Other environmental variables and additional required paths for +specific technologies are dynamically added during runtime by sourcing +a technology setup script. These are located in the +"\$OPENRAM\_TECH/setup\_scripts" directory. Example scripts for SCMOS and +FreePDK45 are included with the distribution. These setup any things +needed by the PDK. + +\subsection{Design Flow} + +%% % high-level org + +%% The memory compiler framework is divided into several modules: the +%% compiler, the router, the characterizer, verify, and gdsMill. +%% Figure~\ref{fig:methodology} shows an overview of the methodology. The +%% compiler input is the memory organization with which it generates the +%% logical and layout views. The compiler then uses these views while +%% calling the characterization tool to ensure functionality and measure +%% timing/power. The characterization tool indirectly calls a spice +%% simulator for timing/power analysis. + +%% % front-end + +%% The ``front-end'' methodology can be run with no verification tools (spice, DRC, or LVS). +%% only a spice simulator +%% and will produce Spice models (eventually Verilog), layout/GDSII +%% (eventually LEF), and a timing/power model based on estimated +%% parasitics. It is intended that this mode be easily run on any +%% platform so that designers and architects can get timing, power and +%% area estimates quickly. + +%% % back-end + +%% The ``back-end'' methodology uses the spice netlist and detailed layout +%% generated by the front-end to perform back-annotated characterization +%% and generate annotated timing and power models. The back-end uses +%% layout directly in the GDSII stream format which is supported in both +%% commercial and academic back-end flows. The back-end mode is to be used +%% prior to fabrication and by designers who want detailed timing/power +%% values. + +%% In both the front-end and back-end flows, the designs are Design Rule +%% Checked (DRC) and Layout Verses Schematic (LVS) checked at each level +%% of design hierarchy. + +\subsection{Usage} + +The OpenRAM compiler rquires a single argument of a configuration +file. The configuration file specifies, at a minimum, the memory size +parameters in terms of the number of words, word size (in bits), and +number of banks. By default, OpenRAM will chose the number of columns +to make the memory reasonably square. Commonly, the configuration file +also includes parameters for the output path, base output file name, +and technology of an SRAM. + +The configuration file can be used to over-ride any option in the +options.py file. Many of these can also be controlled by the command-line +which over-ride the configuration file. + +The one exception is the technology name. The technology name of a +config file will over-ride a command-line option. The unit tests use +the command line to read a configuration file, so it is a chicken and +egg situation. + +Lastly, the configuration file can over-ride any of the different +circuit implementations for each module. For example, you can replace +the default address decoder or bitcell with a new one by specifying a +new python module that implements a new one. + +An entire example configuration file looks like: +\begin{verbatim} +word_size = 16 +num_words = 32 +num_banks = 1 + +tech_name = "freepdk45" + +output_path = "/tmp/outputdir" +output_name = "mysram" + +bitcell = "custom_bitcell" +\end{verbatim} +In this example, the user has specified a custom bitcell that will be +used when creating the bitcell\_array and other modules. + +OpenRAM has many command line arguments. Other useful command line arguments are: +\begin{itemize} +\item -h : To get help for the command-line options +\item -v : To increase the verbosity (may be used multiple times) +\end{itemize} + +\begin{figure}[tb] +\centering +\includegraphics[width=14cm]{./figs/methodology.pdf} +\caption{Overall Compilation and Characterization Methodology +\label{fig:methodology}} +\end{figure} + + + + + + diff --git a/docs/modules.tex b/docs/modules.tex new file mode 100644 index 00000000..8c152863 --- /dev/null +++ b/docs/modules.tex @@ -0,0 +1,580 @@ +\section{Modules} +\label{sec:modules} + +This section provides an overview of the main modules that are used in +an SRAM. For each module, we will provide both an architectural +description and an explanation of how that design is generated and +used in OpenRAM. The modules described below are provided in the +first release of OpenRAM, but by no means is this an exhaustive list +of the possible circuits that can be adapted into a SRAM architecture; +refer to Section~\ref{sec:implementation} for more information on +adding different module designs to the compiler. + +Each module has a corresponding python class in the \verb|compiler| +directory. These classes are used to generate both the GDSII layout +and spice netlists. Each module can consist of library cells as +discussed in Section~\ref{sec:techdir}, paramterized cells in +Section~\ref{sec:parameterized} or other modules. A discussion of the +design hierarchy and how to implement a module is provided in +Section~\ref{sec:design}. + +When combining modules at any level of hierarchy, DRC rules for +minimum spacing of metals, wells, etc. must be followed and DRC and +LVS are run by default after each hierarchical module's creation. + + +\subsection{The Bitcell and Bitcell Array} +\label{sec:bitcellarray} + +The 6T cell is the most commonly used memory cell in SRAM devices. It +is named a 6T cell because it consist of 6 transistors: 2 access +transistors and 2 cross coupled inverters as shown in +Figure~\ref{fig:6t_cell}. The cross coupled inverters hold a single +data bit that can either be driven into, or read from the cell by the +bitlines. The access transistors are used to isolate the cell from +the bitlines so that data is not corrupted while a cell is not being +accessed. + +\begin{figure}[h!] +\centering +\includegraphics[scale=.9]{./figs/cell_6t_schem.pdf} +\caption{Schematic of 6T cell.} +\label{fig:6t_cell} +\end{figure} + +% memory cell operation +The 6T cell can be accessed to perform the two main operation +associated with memory: reading and writing. When a read is to be +performed, both bitlines are precharged to VDD. This precharging is +done during the first half of the read cycle and is handled by the +precharge circuitry. In the second half of the read cycle the +wordline is asserted, which enable the access transistors. If a 1 is +stored in the cell then BLB is discharged to Gnd and BL is pulled up +to Vdd. Conversely, if the value stored is a 0, then BL is discharged +to Gnd and BLB is pulled up to Vdd. While performing a write +operation, both bitlines are also precharged to Vdd during the first +half of the write cycle. Again, the world line is asserted, and the +access transistors are enabled. The value that is to be written into +the cell is applied to BL, and its complement is applied to BLB. The +drivers that are applying the signals to the bitlines must be +appropriately sized so that the previous value in the cell can be +overwritten. + +% tiling memory cells +The 6T cells are tiled together in both the horizontal and vertical +directions to make up the memory array. The size of the memory array +is directly related to the numbers of words, and the size of those +words, that will need to be stored in the RAM. For example, an 8kb +memory with a word size of 8 bits could be implemented as 8 columns +and 1024 rows. + +% keeping it square +It is common practice to keep the aspect ratio of memory array as +square as possible\footnote{Future versions will consider optimizing + delay and/or power as well.}. This helps to make sure that the +bitlines do not become too long, which can increase the bitline +capacitance, slow down the operation and lead to more leakage. To +make the design ``more square'', multiple words can share rows by +interleaving the bits of each word. If the previous 8kb memory was +rearranged to allow 2 words per row, then the array would have 16 +columns and 512 rows. + +% memory cell is a library cell +In OpenRAM, we provide a library cell for the 6T cell so that users +can easily swap in different memory cell designs. The memory cell is +the most important cell in the RAM and should be customized to +minimize area and optimize performance. The memory cell is the most +replicated cell in the RAM; minimizing its size can have a drastic +effext on the overall size of the RAM. Also, the transitors in the cell +must be carefully sized to allow for correct read and write operation +as well as protection against corruption. + +% bitcell and bitcell_array classes +The \verb|bitcell| class in \verb|bitcell.py| instantiates a single +memory cell and is usually a pre-made library cell. The +\verb|bitcell_array| class in \verb|bitcell_array.py| dynamically +implements the memory cell array by instantiating a single memory cell +according to the number of rows and columns. During the tiling +process, the cells are abutted so that all bitlines and word lines are +connected in the vertical and horizontal directions respectively. In +order to share supply rails, cells are flipped in alternating rows. To +avoid any extra routing, the power/ground rails, bitlines, and +wordlines should span the entire width/height of the cell so thay they +are automatically connected when the cells are abutted. + + +\subsection{Precharge Circuitry} +\label{sec:precharge} + +The precharge circuit is depicted in Figure~\ref{fig:precharge} and is +implemented by three PMOS transistors. The input signal to the cell, +clk, enables all three transistors during the first half of a read or +write cycle (i.e. while the clock signal is low). M1 and M2 charge BL +and BLB to Vdd and M3 helps to equalize the voltages seen on BL and +BLB. + +\begin{figure}[h!] +\centering +\includegraphics[width=5cm]{./figs/precharge_schem.pdf} +\caption{Schematic of a single precharge cell. \fixme{Change PCLK to CLK.}} +\label{fig:precharge} +\end{figure} + +In OpenRAM, the precharge citcuitry is dynamically generated using the +parameterized transistor class (\verb|ptx|). The \verb|precharge| +class in \verb|precharge.py| dynamically generates a single precharge cell. + +The offsets of the bitlines and the width of the precharge cell are +equal to the 6T cell so that the bitlines are correctly connected down +to the 6T cell. The \verb|precharge_array| class is then used to +generate a precharge array, which is a single row of \textbf{n} +precharge cells, where \textbf{n} equals the number of columns in the +bitcell array. + + +\subsection{Address Decoders} +\label{sec:addressdecoder} + +The address decoder takes the row address bits from the address bus as +inputs, and asserts the appropriate wordline in the row that data is +to be read or written. A n-bit address input controls $2^n$ word +lines. + +OpenRAM provides a hierarchical address decoder as the default, but +will soon have other options. + +\subsubsection{Hierarchical Decoder} +\label{sec:hierdecoder} + +Hierarchical decoder is a type of decoder which the constrcution takes place hierarchically. +The simple 2:4 decoder is shown in the Figure~\ref{fig:2 to 4 decoder}. The operation of +this decoder can be explained as follows: soon after the address signals A0 and A1 are put on the address lines, +depending on the signal combination, one of the wordlines will rise after a brief amount of time. For example if the +address input is A0A1=00 then the output is W0W1W2W3=1000. The 2:4 address decoder uses inverters and two +input nand gates for its constrcution while the gates are sized to have equal rise and fall time. +As the decoder size increases the size of the nand gates required for decoding also increases. +Table~\ref{table:2-4 hierarchical_decoder} gives the detailed input and output siganls +for the 2:4 hierarchical decoder. + + +\begin{figure}[h!] +\centering +\includegraphics[scale=.6]{./figs/2t4decoder.pdf} +\caption{Schematic of 2-4 simple decoder.} +\label{fig:2 to 4 decoder} +\end{figure} + + \begin{table}[h!] + \begin{center} + \begin{tabular}{| c | c |} + \hline + A[1:0] & Selected WL\\ \hline + 00 & 0\\ \hline + 01 & 1\\ \hline + 10 & 2\\ \hline + 11 & 3\\ \hline + + \end{tabular} + \end{center} + \caption{Truth table for 2:4 hierarchical decoder.} + \label{table:2-4 hierarchical_decoder} + \end{table} + + +An $n$-bit decoder requires {$2^n$} logic gates, each with $n$ inputs. For example, with $n$ = 6, +64 $NAND6$ gates are needed to drive 64 inverters to implement the decoder. +It is clear that gates with more than 3 inputs create large series resistances and long delays. +Rather than using $n$-input gates, it is preferable to use a cascade of gates. +Typically two stages are used: a predecode stage and a final decode stage. +The predecode stage generates intermediate signals that are used +by multiple gates in the final decode stage. + + + +\begin{figure}[h!] +\centering +\includegraphics[scale=.6]{./figs/4t16decoder.pdf} +\caption{Schematic of 4 to 16 hierarchical decoder.} +\label{fig:4 to 16 decoder} +\end{figure} + +Figure~\ref{fig:4 to 16 decoder} shows the 4 to 16 heirarchical decoder. The structure of the decoder consists of two 2:4 decoders for predecoding and 2-input nand gates and inverters for final decoding to form the 4:16 decoder. +In the predecoder, a total of 8 intermediate signals are generated from the address bits and their complements. +The concept of using predecoing and final decoding stage for construction of address decoder is very procutive since small +decoders like 2:4 decoder is used for predecoding. The operation of 4:16 heirarchical decoder can explained with an example. If the address is A0A1A2A3=0000 the output of the predecoder1 and predeocder2 will be +WL0WL1WL2WL3=1000 and WL0WL1WL2WL3=1000, respectively. According to the connections in figure~\ref{fig:4 to 16 decoder} the wordline 0 of predecoder1 and predecoder2 are conneted +to the first 2-input nand gate in the decode stage representing the wordline 0 of the final decoding stage. Hence depengin on the combination +of the input signal one of the wordline will rise. In this case since the address input is A0A1A2A3=0000 the wordline 0 should go high. Table~\ref{table:4-16 hierarchical_decoder} gives the detailed input and output siganls +for the 4:16 hierarchical decoder. + + + \begin{table}[h!] + \begin{center} + \begin{tabular}{| c | c | c | c |} + \hline + A[3:0] & predecoder1 & predecoder2 & Selected WL\\ \hline + 0000 & 1000 & 1000 & 0\\ \hline + 0001 & 1000 & 0100 & 1\\ \hline + 0010 & 1000 & 0010 & 2\\ \hline + 0011 & 1000 & 0001 & 3\\ \hline + 0100 & 0100 & 1000 & 4\\ \hline + 0101 & 0100 & 0100 & 5\\ \hline + 0110 & 0100 & 0010 & 6\\ \hline + 0111 & 0100 & 0001 & 7\\ \hline + 1000 & 0010 & 1000 & 8\\ \hline + 1001 & 0010 & 0100 & 9\\ \hline + 1010 & 0010 & 0010 & 10\\ \hline + 1011 & 0010 & 0001 & 11\\ \hline + 1100 & 0001 & 1000 & 12\\ \hline + 1101 & 0001 & 0100 & 13\\ \hline + 1110 & 0001 & 0010 & 14\\ \hline + 1111 & 0001 & 0001 & 15\\ \hline + \end{tabular} + \end{center} + \caption{Truth table for 4:16 hierarchical decoder.} + \label{table:4-16 hierarchical_decoder} + \end{table} + + +As the size of the address line increases higher level decoder can be created using the lower level decoders. For example for a 8:256 decoder, two instances of 4:16 followed by 256 2-input nand gates and inverters +can form the decoder. In order to construct the 8:256 decoder, first 4:16 decoder should be constructed through using 2:4 deccoders. Hence the name is hierarchical decoder. + + +\subsection{Wordline Driver} +\label{sec:wldriver} + +Word line drivers are inserted, in between the word line +output of the address decoder and the word line input of the bitcell-array. The word +line drivers ensure that as the size of the memory array increases, +and the word line length and capacitance increases, the word line +signal is able to turn on the access transistors in the 6T cell. Also, as the bank select signal +in multi-bank structures is $ANDED$ with the word line output of decoder, +bitcells turn on only when bank is selected. +Figure~\ref{fig:wordline_driver} shows the diagram of word line driver and its input/output pins. +In OpenRAM, word line drivers are created by using the \verb|pinv| and \verb|nand2| classes which +takes the transistor size and cell height as inputs (so that it can abutt the +6T cell). Word line driver is added as seperate module in \verb|compiler|. +\begin{figure}[h!] +\centering +\includegraphics[scale=.8]{./figs/wordline_driver.pdf} +\caption{Diagram of word line driver.} +\label{fig:wordline_driver} +\end{figure} + + +\subsection{Column Mux} + +The column mux takes the column address bits from the address bus +selects the appropriate bitlines for the word that is to be read from +or written to. It takes n-bits from the address bus and can select +$2^n$ bitlines. The column mux is used for both the read and write +operations; it connects the bitline of the memory array to both the +sense ampflifier and the write driver. + +OpenRAM provides several options for column mux, but the default +is a single-level column mux which is sized for optimal speed. + +\subsubsection{Tree\_Decoding Column Mux} +\label{sec:tree_decoding_column_mux} + +The schematic for a 4-1 tree +multiplexer is shown in Figure~\ref{fig:colmux}. + +\begin{figure}[h!] +\centering +\includegraphics[scale=.9]{./figs/tree_column_mux_schem.pdf} +\caption{Schematic of 4-1 tree column mux that passes both of the bitlines.} +\label{fig:colmux} +\end{figure} + +\fixme{Shading/opacity is different on different platforms. Make this a box in the image. It doesn't work on OSX.} + +This tree mux selects pairs of bitlines (both BL and BL\_B) as inputs +and outputs. This 4-1 tree mux illustrates the process of choosing +the correct bitlines if there are 4 words per row in the memory array. +Each bitline pair represents a single bit from each word. A binary +reduction pattern, shown in Table~\ref{table:colmux}, is used to +select the appropriate bitlines. As the number of words per row in +the memory array increases, the depth of the column mux grows. The +depth of the column mux is equal to the number of bits in the column +address bus. The 4-1 tree mux has a depth of 2. In level 1, the +least significant bit from the column address bus selects either the +first and second words or the third and fourth words. In level 2, the +most signifant column address bit selects one of the words passed down +from the previous level. Relative to other column mux designs, the +tree mus uses significantly less devices. But, this type of design +can provide poor performance if a large decoder with many levels are +needed. The delay of of a tree mux quadratically increases with each +level. Due to this fact, other types of column +decoders should be considered for larger arrays. + +\begin{table}[h!] + \begin{center} + \begin{tabular}{| c | c | c | c |} + \hline + Selected BL & Inp1 & Inp2 & Binary\\ \hline + BL0 & SEL0\_bar & SEL1\_bar & 00\\ \hline + BL1 & SEL0 & SEL1\_bar & 01\\ \hline + BL2 & SEL0\_bar & SEL1 & 10\\ \hline + BL3 & SEL0 & SEL1 & 11\\ + \hline + \end{tabular} + \end{center} + \caption{Binary reduction pattern for 4-1 tree column mux.} + \label{table:colmux} +\end{table} + +In OpenRAM, the tree column mux is a dynamically generated design. The +\verb|tree_mux_array| is made up of two dynamically generated cells: \verb|muxa| +and \verb|mux_abar|. The only diffference between these cells is that input +select signal is either hooked up to the \textbf{SEL} or +\textbf{SEL\_bar} signals (see highlighted boxes in +Figure~\ref{fig:colmux}). These cells are initialized the the +\verb|column_muxa| and \verb|column_muxabar| classes in \verb|columm_mux.py|. Instances +of \verb|ptx| PMOS transistors are added to the design and the necessary +routing is performed using the \verb|add_rect()| function. A horizontal rail +is added in metal2 for both the SEL and Sel\_bar signals. Underneath +those input rails, horizontal straps are added. These straps are used +to connect the BL and BL\_B outputs from \verb|muxa| to the BL and BL\_B +outputs of \verb|mux_abar|. Vertical conenctors in metal3 are added at the +bottom of the cell so that connections can be made down to the sense +amp. Vertical connectors are also added in metal1 so that the cells +can connect down to other mux cells when the depth of the tree mux is +more than one level. + +The \verb|tree_mux_array| class is used to generate the tree mux. +Instances of both the \verb|muxa| and \verb|mux_abar| cells are instantiated and +are tiled row by row. The offset of the cell in a row is determined +by the depth of that row in the tree mux. The pattern used to +determine the offset of the mux cells is +$muxa.width*(i)*(2*row\_depth)$ where is the column number. As the +depth increases, the mux cells become further apart. A separate +``for'' loop is invoked if the $depth>1$, which extends the +power/ground and select rails across the entire width of the array. +Similarly, if the $depth>1$, spice net names are created for the +intermediate connection made at the various levels. This is necessary +to ensure that a correct spice netlist is generated and that the +input/output pins of the column mux match the pins in the modules that +it is connected to. + + +\subsubsection{Single\_Level Column Mux} +\label{sec:single_level_column_mux} + +The optimal design for column mux uses a single NMOS device, driven by the input address or decoded input addresses. +Figure~\ref{fig:2t1_single_level_column_mux} shows the schematic of a 2:1 single-level column mux. In this column mux one bit +of address and its complementry drive the pass transistors. Selected transistors will +connect their corresponding bitlines ( 1 set of column out of 2 set of columns) to sense-amp and write-driver circuitry for read or write operation. +Figure~\ref{fig:4t1_single_level_column_mux} shows the schematic of a 4:1 single-level column mux. In this column mux, 2 input +address are decoded using a 2:4 decoder ( 2:4 decoder is explain in section~\ref{sec:hierdecoder}). 2:4 decoder provides a one-hot set of outputs, so only one set of columns +will be selected and connected to sense-amp and write-driver +( in figure~\ref{fig:4t1_single_level_column_mux} one set of column out of four sets of column is selected). + +In OpenRAM, the \verb|single-level_mux_array| is a dynamically generated design and +it is made up of dynamically generated cell (\verb|single-level_mux|). +\verb|single-level_mux| uses the parameterized transistor class \verb|ptx| to generate two NMOS transistors +which will connect the BL and BLB of selected columns to sense-amp and write-driver. Horizontal rails are added for $sel$ signals. Vertical +straps connect the BL and BLB of bitcell\_array to BL and BLB of single-level column mux and also BL-out and BLB-out of single-level +column mux to BL and BLB of sense-amp and write-driver. + + +\begin{figure}[h!] +\centering +\includegraphics[scale=.7]{./figs/2t1_single_level_column_mux.pdf} +\caption{Schematic of a 2:1 single level column mux.} +\label{fig:2t1_single_level_column_mux} +\end{figure} + + + +\begin{figure}[h!] +\centering +\includegraphics[scale=.6]{./figs/4t1_single_level_column_mux.pdf} +\caption{Schematic of a 4:1 single level column mux.} +\label{fig:4t1_single_level_column_mux} +\end{figure} + + +\subsection{Sense Amplifier} +\label{sec:senseamp} +The sense amplifier is used to sense the difference between the +bitline and bitline bar while a read operation is performed. The +sense amp is necessary to recover the signals from the bitlines +because they do not experience full voltage swing. As the size of the +memory array grows, the load of the bitlines increases and the voltage +swing is limited by the small memory cell driving this large load. A +differential sense amplifier is used to``sense'' the small voltage +difference between the bitlines. + +\begin{figure}[h!] +\centering +\includegraphics[scale=.8]{./figs/sense_amp_schem.pdf} +\caption{Schematic of a single sense amplifier cell.} +\label{fig:sense_amp} +\end{figure} + +The schematic for the sense amp is shown in +Figure~\ref{fig:sense_amp}. The sense amplifier is enable by the SCLK +signal, which initiates the read operation. Before the sense +amplifier is enable, the bitlines are precharged to Vdd by the +precharge unit. When the sense amp is enabled, one of the bitlines +experiences a voltage drop based on the value stored in the memory +cell. If a zero is stored, the bitline voltage drops. If a one is +stored, the bitline bar voltage drops. The output signal is then +taken to a true logic level and latched for output to the data bus. + +In OpenRAM, the sense amplifier is a libray cell. The associated +layout and spice netlist can be found in the \verb|gds_lib| and \verb|sp_lib| in +the FreePDK45 directory. The \verb|sense_amp| class in \verb|sense_amp.py| +instantiates a single instance of the sense amp library cell. The +\verb|sense_amp_array| class handles the tiling of the sense amps cells. +One sense amp cell is needed per data bit and the sense amp cells need +to be appropriately spaced so that they can hook up to the column mux +bitline pairs. The spacing is determined based on the number of words +per row in the memory array. Instances are added and then Vdd, Gnd +and SCLK rails that span the entire width of the array are drawn using +the add\_rect() function. + +We chose to leave the sense amp as a libray cell so that custom +amplifier designs could be swapped into the memory as needed. The two +major things that need to be considered while designing the sense +amplifier cell are the size of the cell and the bitline/input pitches. +Optimally, the cell should be no larger than the 6T cell so that it +abuts to the column mux and no extra routing or space is needed. +Also, the bitline inputs of the sense amp need to line up with the +outputs of the write driver. In the current version of OpenRAM, the +write driver is situated under the sense amp, which had bitlines +spaning the entire height of the cell. In this case, the sense +amplifier is disabled during a write operation but the bitlines still +connect the write driver to the column mux without any extra routing. + + +\subsection{Write Driver} +\label{sec:writedriver} +The write driver is used to drive the input signal into the memory +cell during a write operation. It can be seen in +Figure~\ref{fig:write_driver} that the write driver consists of two +tristate buffers, one inverting and one non-inverting. It takes in a +data bit, from the data bus, and outputs that value on the bitline, +and its complement on bitline bar. The bitlines need to be +complements so that the data value can be correctly stored in the 6T +cell. Both tristates are enabled by the EN signal. + +\begin{figure}[h!] +\centering +\includegraphics[scale=.8]{./figs/write_driver_schem.pdf} +\caption{Schematic of a write driver cell, which consists of 2 tristates (non-inverting and inverting) to drive the bitlines.} +\label{fig:write_driver} +\end{figure} + +Currently, in OpenRAM, the write driver is a library cell. The +associated layout and spice netlist can be found in the \verb|gds_lib| and +\verb|sp_lib| in the FreePDK45 directory. Similar to the \verb|sense_amp_array|, +the \verb|write_driver_array| class tiles the write driver cells. One +driver cell is needed per data bit and Vdd, Gnd, and EN signals must +be extended to span the entire width of the cell. It is not optimal to +have the write driver as a library cell because the driver needs to be +sized based on the capacitance of the bitlines. A large memory array +needs a stronger driver to drive the data values into the memory +cells. We are working on creating a parameterized tristate class, +which will dynamically generate write driver cells of different +sizes/strengths. + +\subsection{Flip-Flop Array} + +In a synchronous SRAM it is necessary to synchronize the inputs and +outputs with a clock signal by using flip-flops. In FreePDK45 we +provide a library cell for a simple master-slave flip-flop, see +schematic in Figure~\ref{fig:ms_flop}. In our library cell we provide +both Q and Q\_bar as outputs of the flop because inverted signals are +used in various modules. The \verb|ms_flop| class in \verb|ms_flop.py| +instatitates a single master-slave flop, and the \verb|ms_flop_array| class +generates an array of flip-flops. Arrays of flops are necessary for +the data bus (an array for both the inputs and outputs) as well as the +address bus (an array for row and column inputs). The \verb|ms_flop_array| +takes the number of flops and the type of array as inputs. Currently, +the type of the array must be either ``data\_in'', ``data\_out'', +``addr\_row'', or ``addr\_col'' verbatim. The array type input is +used to look up that associated pin names for each of the flop arrays. +This was implemented very quickly and should be improved in the near +future... + +\begin{figure}[h!] +\centering +\includegraphics[scale=.7]{./figs/ms_flop_schem.pdf} +\caption{Schematic of a master-slave flip-flop provided in FreePDK45 library} +\label{fig:ms_flop} +\end{figure} + +\subsection{Control Logic} + +The details of the control logic architecture are outlined in +Section~\ref{sec:control}. The control logic module, +\verb|control_logic.py|, instantiates a \verb|control_logic| class that arranges +all of the flip-flops and logic associated with the control signals +into a single module. Flip-flops are instantiated for each control +signal input and library NAND and NOR gates are used for the logic. A +delay chain, of variable length, is also generted using parameterized +inverters. The associated layouts and spice netlists can be found in +the \verb|gds_lib| and \verb|sp_lib| in the FreePDK45 directory. + +\section{Bank and SRAM} +\label{sec:bank} + +The overall memory architecture is shown in figure~\ref{fig:bank}. +As shown in this figure one Bank contains different modules including +precharge-array which is positioned above the bitcell-array, +column-mux-array which is located below the bitcell-array, +sense-amp-array, write-driver-array, data-in-ms-flop-array +to synchronize the input data with negative edge of the clock, +tri-gata-array to share the bidirectional data-bus between input +and output data, hierarchical decoder which is placed on the right side +of the bitcell-array (predecoder + decoder), wordline-driver which drives +the wordlines horizontally across the bitcell-array and address-ms-flops +to synchronize the input address with positive edge of the clock. + +In bitcell-array each memory cell is mirrored vertically and horizontally inorder to share VDD and GND rails with adjacent cells and form the array. +Data-bus is connected to tri-gate, address-bus is connected to address-ms-flops and bank-select +signal will enable the bank when it goes high. To complete the SRAM design, bank is connected to control-logic as shown in figure~\ref{fig:bank}. +Control-logic controls the timing +of modules inside the bank. CSb, OEb, Web and clk are inputs to the control logic and output of +control logic will ANDed with bank-select signal and send to the corresponding modules. + + +\begin{figure}[h!] +\centering +\includegraphics[scale=1]{./figs/bank.pdf} +\caption{Overal bank and SRAM architecture.} +\label{fig:bank} +\end{figure} + + +In order to reduce the delay and power, divided wordline strategy have been used in this compiler. Part of the address bits +are used to define the global wordline (bank-select) and rest of address bits are connected to hierarchical +decoder inside each bank to generate local wordlines that actually drive the bitcell access transistors. + +As shown in figure~\ref{fig:bank2} SRAM is divided to two banks which share data-bus, address-bus, control-bus and control-logic. +In this case one bit of address (most significant bit) goes to an ms-flop and outputs of ms-flop (address-out and address-out-bar) +are connected to banks as bank-select signals. Control logic is shared between two banks and based on which bank is selected, +control signals will activate modules inside the selected bank. In this architecture, the total cell capacitance is reduced by up +to a factor of two. Therefore the power will be reduced greatly and the delay among the wordlines is also reduced. + +\begin{figure}[h!] +\centering +\includegraphics[scale=.9]{./figs/bank2.pdf} +\caption{SRAM is divided to two banks which share the control-logic.} +\label{fig:bank2} +\end{figure} + +In figure~\ref{fig:bank4}, four banks are connected together. In this case a 2:4 decoder is added to select one of the banks using two +most significant bits of input address. Control signals are connected to all banks but will turn on only the selected bank. + + +\begin{figure}[h!] +\centering +\includegraphics[scale=.9]{./figs/bank4.pdf} +\caption{SRAM is divided to 4 banks wich are controlled by the control-logic and a 2:4 decoder.} +\label{fig:bank4} +\end{figure} + + diff --git a/docs/openram_manual.pdf b/docs/openram_manual.pdf new file mode 100644 index 00000000..18521195 Binary files /dev/null and b/docs/openram_manual.pdf differ diff --git a/docs/openram_manual.tex b/docs/openram_manual.tex new file mode 100644 index 00000000..1ac0fc97 --- /dev/null +++ b/docs/openram_manual.tex @@ -0,0 +1,109 @@ +% The % is a comment. This file is an Example LaTeX document for GP111 +\documentclass[11pt]{article} +\usepackage{times} % LaTeX 2e +\usepackage{graphicx} +\usepackage{epstopdf} +%\usepackage{subfigure} +\usepackage[colorlinks=true]{hyperref} +%\usepackage[doublespacing]{setspace} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Generic Shared across papers Keywords + +\newcommand{\fixme}[1]{{\Large FIXME:} {\bf #1}} +\newcommand{\note}[1]{{\bf Note:} \{\uline{#1}\}\\} + +% create some additional spacing between paragraphs. +\setlength{\parskip}{7pt} +% Default margins are too wide all the way around. I reset them here. +\setlength{\topmargin}{-.5in} +\setlength{\textheight}{9in} +\setlength{\oddsidemargin}{.125in} +\setlength{\textwidth}{6.25in} + +\begin{document} + +\title{OpenRAM Manual} +\author{Matthew R. Guthaus - mrg@ucsc.edu\\ + James Stine - james.stine@okstate.edu\\ + and many others +} +%\renewcommand{\today}{October 14, 2010} +\maketitle +\newpage +\section{License} + +\begin{verbatim} + Copyright 2018 Regents of the University of California and The Board + of Regents for the Oklahoma Agricultural and Mechanical College + (acting for and on behalf of Oklahoma State University) + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are + met: + + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + 2. Redistributions in binary 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. + + 3. Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + + THIS SOFTWARE 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 COPYRIGHT + HOLDER 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. +\end{verbatim} + + +\newpage +\setcounter{tocdepth}{2} +\tableofcontents + +\newpage + +% Each chapter description +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\input{intro} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\input{overview} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\input{modules} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\input{implementation} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\input{parameterized} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\input{porting} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\input{timing} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\input{unittests} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\input{debug} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%\input{conclusions} +\input{gdsmill} + + +\end{document} diff --git a/docs/overview.tex b/docs/overview.tex new file mode 100644 index 00000000..c5f36370 --- /dev/null +++ b/docs/overview.tex @@ -0,0 +1,91 @@ +\section{Overview of the SRAM Structure} +\label{sec:overview} + + +% address decode and mem array +The baseline SRAMs generated by OpenRAM have 1 read/write port as +shown in Figure~\ref{fig:sram_architecture}. The address is decoded +(Section~\ref{sec:addressdecoder}) into a one-hot set of word lines +(WL) which are driven by word line drivers +(Section~\ref{sec:wldriver}) over the bit-cell array +(Section~\ref{sec:bitcellarray}). To facilitate reads, the precharge +circuitry (Section~\ref{sec:precharge}) precharges the bitlines so +that the column mux (Section~\ref{sec:column_mux}) can select the +appropriate word which is then sensed by the sense amplifiers +(Section~\ref{sec:senseamp}). Write drivers +(Section~\ref{sec:writedriver}) use the bidirectional nature of the +column mux to write the appropriate columns in a given memory row. + +A representative layout of such a memory closely resembles the logical +representation and is shown in Figure~\ref{fig:layout_view}. The +address and data flip-flops and control circuitry are not shown but +are detailed in Section~\ref{sec:control}. + + +\begin{figure}[htb] +\centering +\includegraphics[width=10cm]{./figs/sram_overview.pdf} +\caption{Single Port SRAM Architecture} +\label{fig:sram_architecture} +\end{figure} + + +\begin{figure}[htb] +\centering +\includegraphics[width=6cm]{./figs/layout_view_1024_16_annotated.pdf} +\caption{1k SRAM with Two Columns and 16-bit Data} +\label{fig:layout_view} +\end{figure} + + + +\subsection{Inputs/Outputs} +\label{sec:io} + +The inputs to the SRAM are: +\begin{itemize} +\setlength{\itemsep}{0pt} +\item clk - External Clock +\item CSb - Active-low Chip Select +\item WEb - Active-low Write Enable +\item OEb - Active-low Output Enable +\item ADDR\# - corresponds to the Address Bus input, labeled 0 to N-address bits. +\item DATA\# - corresponds to the bi-directional Data bus. +\end{itemize} + +The outputs to the SRAM are: +\begin{itemize} +\setlength{\itemsep}{0pt} +\item DATA\# - correspond to the bi-directional Data bus. +\end{itemize} + + +\subsection{Top-Level SRAM Module} +\label{sec:sram} + +The \verb|sram| class in \verb|sram.py| is the top-level SRAM module. +This class handles the overall organization of the memory and the +input/output signals. Based on the user inputs, the various bus and +array sizes are calculated and passed to the \verb|bank| module. +All other sub-modules access the value of sizes from \verb|bank|. +The overall organization is depicted in +Figure~\ref{fig:sram_architecture}, discussion of the design data +structure is discussed in Section~\ref{sec:design} and the modules +contained in the top-level SRAM are detailed in +Section~\ref{sec:modules}. + +When the user has specified the desired size (word size, total +number of words and number of banks) of the memory that is to be generated, +the following parameters must be calculated. There are several constraints +to be considered in this calculations: + +(i) \verb|sram| can generate 1 bank, 2 banks or 4 banks. + +(ii) The area of each bank should be as square as possible which is dependent on the area of a 6T cell. + +(iii) There are several options for multiplexing (column-mux): 2-way, 4-way, 8-way and none. + + +All of the top level routing is performed in the \verb|sram| class. + +\fixme{More soon...} diff --git a/docs/parameterized.tex b/docs/parameterized.tex new file mode 100644 index 00000000..bcd89871 --- /dev/null +++ b/docs/parameterized.tex @@ -0,0 +1,258 @@ +\section{Custom Layout Design Functions in Software} +\label{sec:parameterized} + +OpenRAM provides classes that can be used to generated parameterized +cells for the most common cells: transistors, inverters, nand2, nand3, etc... +There are many advantages to having parameterized cells. +The main advantage is that it makes it easier to dynamically generate designs and cuts +down the necessary code to be written. +We also need parameterized cells because some designs, such as the wordline drivers, need to be +dynamically sized based on the size of the memory. +Lastly, there may be certain physical dimension requirements that need to be met for a +cell, while still maintaing the expected operation/performance. +In OpenRAM we currently provide five parameterized cells: parameterized +transistor (\verb|ptx|), parameterized inverter (\verb|pinv|), parameterized nand2 (\verb|nand_2|), +parameterized nand3 (\verb|nand_3|) and parameterized nor2 (\verb|nor_2|). + + +\subsection{Parameterized Transistor} +\label{sec:ptx} + +The parameterized transistor class generates a transistor of specified +width and number of mults. +The \verb|ptx| is constructed as follows: +\begin{verbatim} +def __init__(self,name,width,mults,tx_type) +\end{verbatim} + +An explanation of the \verb|ptx| parameters is shown in +Table~\ref{table:ptx_params}. A layout of ptx, generated by the +following instatiation, is depicted in Figure~\ref{fig:ptx_example}. +\begin{verbatim} +fet = ptx.ptx(name = "nmos_1_finger", width = tech.drc["minwidth_tx"], +mults = 1, tx_type = "nmos"). +\end{verbatim} + +\begin{table}[h!] + \begin{center} + \begin{tabular}{| l | c |} + \hline + Parameter & Explanation \\ \hline + \verb|width| & active\_height \\ \hline + \verb|mults| & mult number of the transistor \\ \hline + \verb|tx_type| & type of transistor,”nmos” and “pmos” \\ \hline + \hline + \end{tabular} + \end{center} + \caption{Parameter Explanation of ptx} + \label{table:ptx_params} +\end{table} + + +\begin{figure}[h!] +\centering +\includegraphics[width=10cm]{./figs/ptx.pdf} +\caption{An example of Parameterized Transistor (ptx)} +\label{fig:ptx_example} +\end{figure} + + + +\subsection{Parameterized Inverter} +\label{sec:pinv} + +The parameterized inverter (\verb|pinv|) class generated an inverter +of a specified size/strength and height. The \verb|pinv| is +constructed as follows: +\begin{verbatim} +def __init__(self, cell_name, size, beta=tech.[pinv.beta], +cell_size=tech.cell[height]) +\end{verbatim} + +The parameterized inverter can provide significant drive strength +while adhering to physical cell size limitations. That is achieved by +having many small transistors connected in parallel, thus the height +of the inverter cell can be manipulated without the affecting the +drive strength. The NMOS size is an input parameter, and the PMOS size +will be determined by $beta*NMOS\_size$, where beta is the ratio of +the PMOS channel width to the NMOS channel width. The following code +instatiates the \verb|pinv| instance seen in Figure~\ref{fig:pinv}. +\begin{verbatim} +a=pinv.pinv(cell_name="pinv",size=tech.drc["minwidth_tx"]*8) +\end{verbatim} +\begin{figure}[h!] +\centering +\includegraphics[width=10cm]{./figs/pinv.pdf} +\caption{An example of Parameterized Inverter(pinv)} +\label{fig:pinv} +\end{figure} + + +The \verb|pinv| parameters are explained in Table~\ref{table:pinv_params}. +\begin{table}[h!] + \begin{center} + \begin{tabular}{| l | c |} + \hline + Parameter & Explanation \\ \hline + \verb|size| & The logic size of the transistor of the nmos in the pinv \\ \hline + \verb|beta| = tech.[pinv.beta] & Ratio of pmos channel width to nmos channel width. \\ \hline + \verb|cell_size| = tech.cell[height] & physical dimension of cell height. \\ + \hline + \end{tabular} + \end{center} + \caption{Parameter Explanation of pinv} + \label{table:pinv_params} +\end{table} + + + +\subsection{Parameterized NAND2} +\label{sec:nand2} + +The parameterized nand2 (\verb|nand_2|) class generated a 2-input nand gate +of a specified size/strength and height. The \verb|nand_2| is +constructed as follows: +\begin{verbatim} +def __init__(self, name, nmos_width, height=tech.cell_6t[height]) +\end{verbatim} + +The NMOS size is an input parameter, and the PMOS size +will be equal to NMOS to have the equal rising and falling for output. +The following code instatiates the \verb|nand_2| instance seen in Figure~\ref{fig:nand2}. +\begin{verbatim} +a=nand_2.nand_2(name="nand2", nmos_width=2*tech.drc["minwidth_tx"], +height=tech.cell_6t["height"]) +\end{verbatim} + +\begin{figure}[h!] +\centering +\includegraphics[width=10cm]{./figs/nand2.pdf} +\caption{An example of Parameterized NAND2(nand\_2)} +\label{fig:nand2} +\end{figure} + + +The \verb|nand_2| parameters are explained in Table~\ref{table:nand2_params}. +\begin{table}[h!] + \begin{center} + \begin{tabular}{| l | c |} + \hline + Parameter & Explanation \\ \hline + \verb|nmos_width| & The logic size of the transistor of the nmos in the nand2 \\ \hline + \verb|height| = tech.cell\_6t[height] & physical dimension of cell height. \\ + \hline + \end{tabular} + \end{center} + \caption{Parameter Explanation of nand2} + \label{table:nand2_params} +\end{table} + + + +\subsection{Parameterized NAND3} +\label{sec:nand3} + +The parameterized nand3 (\verb|nand_3|) class generated a 3-input nand gate +of a specified size/strength and height. The \verb|nand_3| is +constructed as follows: +\begin{verbatim} +def __init__(self, name, nmos_width, height=tech.cell_6t[height]) +\end{verbatim} +The NMOS size is an input parameter, and the PMOS size +will be equal to $2/3$ NMOS size to have the equal rising and falling for output. +The following code instatiates the \verb|nand_3| instance seen in Figure~\ref{fig:nand3}. +\begin{verbatim} +a=nand_3.nand_3(name="nand3", nmos_width=3*tech.drc["minwidth_tx"], +height=tech.cell_6t["height"]) +\end{verbatim} + + +\begin{figure}[h!] +\centering +\includegraphics[width=10cm]{./figs/nand3.pdf} +\caption{An example of Parameterized NAND3(nand\_3)} +\label{fig:nand3} +\end{figure} + +The \verb|nand_3| parameters are explained in Table~\ref{table:nand3_params}. +\begin{table}[h!] + \begin{center} + \begin{tabular}{| l | c |} + \hline + Parameter & Explanation \\ \hline + \verb|nmos_width| & The logic size of the transistor of the nmos in the nand3 \\ \hline + \verb|height| = tech.cell\_6t[height] & physical dimension of cell height. \\ + \hline + \end{tabular} + \end{center} + \caption{Parameter Explanation of nand3} + \label{table:nand3_params} +\end{table} + + +\subsection{Parameterized NOR2} +\label{sec:nor2} + +The parameterized nor2 (\verb|nor_2|) class generated a 2-input nor gate +of a specified size/strength and height. The \verb|nor_2| is +constructed as follows: +\begin{verbatim} +def __init__(self, name, nmos_width, height=tech.cell_6t[height]) +\end{verbatim} +The NMOS size is an input parameter, and the PMOS size +will be equal to $2$ NMOS size to have the equal rising and falling for output. +The following code instatiates the \verb|nor_2| instance seen in Figure~\ref{fig:nor2}. +\begin{verbatim} +a=nor_2.nor_2(name="nor2", nmos_width=2*tech.drc["minwidth_tx"], +height=tech.cell_6t["height"]) +\end{verbatim} + + +\begin{figure}[h!] +\centering +\includegraphics[width=10cm]{./figs/nor2.pdf} +\caption{An example of Parameterized NOR2(nor\_2)} +\label{fig:nor2} +\end{figure} + +The \verb|nor_2| parameters are explained in Table~\ref{table:nor2_params}. +\begin{table}[h!] + \begin{center} + \begin{tabular}{| l | c |} + \hline + Parameter & Explanation \\ \hline + \verb|nmos_width| & The logic size of the transistor of the nmos in the nor2 \\ \hline + \verb|height| = tech.cell\_6t[height] & physical dimension of cell height. \\ + \hline + \end{tabular} + \end{center} + \caption{Parameter Explanation of nor2} + \label{table:nor2_params} +\end{table} + + + +\subsection{Path and Wire} +\label{sec:path and wire} +OpenRam provides two routing classes in custom layout design. +Both Path and wire class will take a set of coordinates connect those points +with rectilinear metal connection. + +The difference is that path only use the same layers for both vertical and +horizontal connection while wire will use two different adjacent metal layers. +The this example will construct a metal1 layer path +\begin{verbatim} +layer_stack = ("metal1") +position_list = [(0,0), (0,3), (1,3), (1,1), (4,3)] +w=path.path(layer_stack,position_list) +\end{verbatim} +and This exmaple will construct a wire using metal1 for vertical connection and metal2 for +horizontal connection: +\begin{verbatim} +layer_stack = ("metal1","via1","metal2") +position_list = [(0,0), (0,3), (1,3), (1,1), (4,3)] +w=wire.wire(layer_stack,position_list) +\end{verbatim} + + + diff --git a/docs/porting.tex b/docs/porting.tex new file mode 100644 index 00000000..94085f06 --- /dev/null +++ b/docs/porting.tex @@ -0,0 +1,47 @@ +\section{Porting to a new Technologies} +\label{sec:porting} + +The folllowing sub-directories and files should be added to your new technology directory: +\begin{itemize} +\item \verb|/sp_lib| - spice netlists for library cells +\item \verb|/gds_lib| - GDSII files for the library cell +\item \verb|layers.map| - layer/purpose pair map from the technology +\item \verb|/tech| - contains tech parameters, layers, and portation functions. +\end{itemize} + +\subsection{The GDS and Spice Libraries} + +The GDS and Spice libraries , \verb|\gds_lib| and \verb|\sp_lib|, should contain the GDSII layouts and spice netlists for each of the library cells in your SRAM design. For the FreePDK45 technology, library cells for the 6T Cell, Sense Amp, Write Driver, Flip-Flops, and Control Logic are provided. To reiterate: all layouts must be exported in the GDSII file format. The following commands can be used to stream GDSII files into or out of Cadence Virtuoso: +\begin{verbatim} +To stream out of Cadence: + + strmout -layerMap ../sram_lib/layers.map + -library sram -topCell $i -view layout + -strmFile ../sram_lib/$i.gds + +To stream a layout back into Cadence: + + strmin -layerMap ../sram_lib/layers.map + -attachTechFileOfLib NCSU_TechLib_FreePDK45 + -library sram_4_32 -strmFile sram_4_32.gds +\end{verbatim} +When you import a gds file, make sure to attach the correct tech lib or you will get incorrect layers in the resulting library. + + + +\subsection{Technology Directory} +\label{sec:tech} + +Inside of the \verb|/tech| directory should be the Python classes for \verb|tech.py|, +\verb|ptx_port.py|, and any other portation functions. The \verb|tech.py| file is very important and should contain the following: +\begin{itemize} +\item Layer Number/Name - GDSII files only contain layer numbers and it can be difficult to keep track of which layer corresponds to what number. In OpenRAM code, layers are referred to by name and \verb|tech.py| maps the layer names that we use to the layer numbers in the \verb|layer.map| This will associate the layer name used in OpenRAM program with the number used in the layer.map, thus the code in complier won’t need to be changed for each technology. +\item Tech Parameters - important rules from the DRC rule deck(such as layer spacing and minimum sizes) should be included here. Please refer to the rules that are included in \verb|tech.py| to get a better idea as to what is important. +\item Cell Sizes and Pin Offsets - The \verb|cell_size()| and \verb|pin_finder()| functions should be used to populate this class with the various cell sizes and pin locations in your library cells. These functions are relatively slow because they must traverse the every shape in the entire hierarchy of a design. Due to this fact, these function are not invoked each time the compiler is run, it should be run one time or if any changes have been made to library cells. This sizes and pin locations gathered are needed to generate the dynamic cells and perform routing at the various levels of the hierarchy. It is suggested that boundary boxes on a specific layer should be added to define the cell size. +\end{itemize} + + + + + + diff --git a/docs/timing.tex b/docs/timing.tex new file mode 100644 index 00000000..d022d208 --- /dev/null +++ b/docs/timing.tex @@ -0,0 +1,230 @@ +\section{Timing and Control Logic} +\label{timing} + +This section outlines the necessary signals, timing considerations, and control circuitry for a synchronous SRAM. + +\subsection{Signals} +\label{signals} +Top-Level Signals: +\begin{itemize} +\setlength{\itemsep}{0pt} +\item ADDR - address bus. +\item DATA - bi-directional data bus. +\item CLK - the global clock. +\item OEb - active low output enable. +\item CSb - active low chip select. +\item WEb - active low write enable. +\end{itemize} + +Internal Signals: +\begin{itemize} +\setlength{\itemsep}{0pt} +\item clk\_bar - enables the precharge unit. +\item s\_en - enables the sense amp during a read operation. +\item w\_en - enable the write driver during a write operation. +\item tri\_en and tri\_en\_bar - enable the data input tri-gate during a read operation. +\end{itemize} + +\subsection{Timing Considerations} +\label{timing_params} + +The main timing considerations for an SRAM are: +\begin{itemize} +\setlength{\itemsep}{0pt} +\item Setup Time - time an input needs to be stable before the positive/negative clock edge. +\item Hold Time - time an input needs to stay valid after the positive/negative clock edge. +\item Minimun Cycle Time - time inbetween subsequent memory operations. +\item Memory Read Time - time from positive clock edge until valid data appears on the data bus. +\item Memory Write Time - time from negative clock edge until data has been driven into a memory cell. +\end{itemize} + +\subsection{SRAM Operation} +\label{operation} + +\begin{figure}[tb] +\centering +\includegraphics[scale=.85]{./figs/timing_read.pdf} +\caption{Timing diagram for read operation showing the setup, hold, and read times.} +\label{fig:read} +\end{figure} + +Read Operation: +\begin{enumerate} +\setlength{\itemsep}{0pt} + \item Before the clock transition (low to high) that initiates the read operation: + \begin{enumerate} + \item The chip must be selected (CSb low). + \item The WEb must be high (read). + \item The row and column addresses must be applied to the address input pins (ADDR). + \item OEb should be selected (OEb low). + \end{enumerate} + \item On the rising edge of the clock (CLK): + \begin{enumerate} + \item The control signals and address are latched into flip-flops and the read cycle begins. + \item The precharging of the bit lines starts. + \item The address bits become available for the decoder and column mux, which select the row and columns that we want to read from. + \end{enumerate} + \item On the falling edge of the clock (CLK): + \begin{enumerate} + \item Word line has been asserted, the value stored in the memory cells pulls down one of the bitlines (BL if a 0 is stored, BL\_bar if a 1 is stored). + \item s\_en enables the sense amplifier which senses the voltage difference of the bit lines, produces the output and keeps the value in its latch circuitry. + \item Tri-gate enables and put the output data on data bus. Data remains valid on the data bus for a complete clock cycle. + \end{enumerate} +\end{enumerate} + + +\begin{figure}[tb] +\centering +\includegraphics[scale=.9]{./figs/timing_write.pdf} +\caption{Timing diagram for write operation showing the setup, hold, and write times.} +\label{fig:write} +\end{figure} + + + +Write Operation: +\begin{enumerate} +\setlength{\itemsep}{0pt} + \item Before the clock transition (low to high) that initiates the write operation: + \begin{enumerate} + \item The chip must be selected (CSb low). + \item The WEb must be low to enable the data input tristates. + \item The row and column addresses must be applied to the address input pins (ADDR). + \item OEb must be high (no output is available and sense amp disabled) + \end{enumerate} + \item On the rising edge of the clock (CLK): + \begin{enumerate} + \item OEb stays high (no output is available and sense amp disabled) + \item The inputs addresses are latched into flip-flops, precharging starts, and the write operation begins. + \item The address bits become available for the decoder and column mux, which select the row and columns that we want to write to. + \end{enumerate} + \item On the falling edge of the clock (CLK): + \begin{enumerate} + \item The data to be written must be applied to DATA and latched into flip-flops. + \item w\_en enables the write driver, which drives the data input through the column mux and into the selected memory cells. The write delay is the time from the negative clock edge until the data value is stored in the memory cell on node X. + \end{enumerate} +\end{enumerate} + + +\subsection{Zero Bus Turnaround (ZBT)} +\label{sec:ZBT} + +In timing of SRAM, during a read operation, data should be available after the clock edge while +during a write, data should be set up before the clock edge. Due to this issue a wait state (dead cycle) is neccessary when SRAM switches +from read mode to write mode. +To avoide dead cycles in SRAM timing which slow down the operation and degrade the performance of SRAM, Zero Bus turnaround (ZBT) technique is used. +Using ZBT, during a write, data is set up after positive clock edge and before negative clock edge and input data is latched in negative edge flip-flops. +Using ZBT, we will get a higher memory throughput and there is no waite states. +Figure~\ref{fig:write} shows the correct timing for input signals during the write opertion to avoide the wait states. +Figure~\ref{fig:ZBT} shows how a write cycle is followed by a read cycle with no wait state through using ZBT. +Input address bits should be ready before positive edge to be loaded to positive edge flip-flops. Output data is ready to be loaded to data-bus during seconde half of cycle (after negative edge of clock) and +input data should be ready before negative edge of clock to be loaded in negative edge flip-flops. + +\begin{figure}[h!] +\centering +\includegraphics[scale=0.9]{./figs/ZBT.pdf} +\caption{(a) Zero Bus Turnaround timing.} +\label{fig:ZBT} +\end{figure} + + +\subsection{Control Logic} +\label{sec:control} + + + +The control circuitry ensures that the SRAM operates as intended during a read or write cycle by enabling the necessary structures in the SRAM. +As shown in Figure~\ref{fig:control}, the control logic takes three active low signals as inputs: chip select bar ($CSb$), +output enable bar ($OEb$), and write enable bar ($WEb$). $CSb$ enables the entire SRAM chip. +When $CSb$ is low, the appropriate control signals are generated and sent to the architecture blocks. +Conversely, if $CSb$ is high then no control signals are generated and SRAM is turned off or disabled. +The $OEb$ signal signifies a read operation; while it is low the value seen on the data bus will be an output from the memory. +Similarly, the $WEb$ signal signifies a write operation. All of the input control signals are latched with master-slave flip-flops, +ensuring that the control signal stays valid for the entire operation cycle. The control signal flip-flops use the normal clock to generate +local signals used to enable or disable structures based on the operation. Address flip-flops are combined with global clock as well. +In a standard write SRAM, switching from a read to a write operation results in a dead cycle. To avoid this dead cycle, Data flip-flops are +latched with $clk\_bar$ in order to have a Zero Bus Turnaround (ZBT) memory. More details on ZBT timing are outlined in Section~\ref{sec:ZBT}. +After all control signals are latched, they are ANDED with the $clk\_bar$ because the read/write circuitries should only be enabled after the precharging of +the bitlines had ended on the negative edge of the clock. The $w\_en$ signal enables the write driver during a write to the memory .The $s\_en$ signal +is generated using a Replica Bitline ($RBL$) to enable the sense amplifier during a read operation. Details on $RBL$ architecture are outlined in section~\ref{sec:RBL}. +$tri\_en$ and $tri\_en\_bar$ enable the tristates during read in order to drive the outputs onto the data bus. +Table~\ref{table:control} shows the truth table for the control logic. The $s\_en$ signal to enable the sense amplifier is +true when $(CS . OE . Clk\_bar)$ is true. Similarly, write driver enable signal, $w\_en$, is true when $(CS . WE . clk\_bar)$ is true. +$tri\_en$ and $tri\_en\_bar$ are true when $\neg(OEb\_bar | clk)$ and $\neg(OEb . clk\_bar)$ are true, respectively. +\begin{figure}[h!] +\centering +\includegraphics[scale=1]{./figs/control_logic.pdf} +\caption{(a) Control Logic diagram and (b) Replica Bitline Schematic.} +\label{fig:control} +\end{figure} + + + +\begin{table}[h!] + \begin{center} + \begin{tabular}{| c | c | c | c | c | c | c |} + \hline + Operation & \multicolumn{3}{|c|}{Inputs} & \multicolumn{3}{|c|}{Outputs}\\ \hline + & CSb & OEb & WEb & s\_en & w\_en & tri\_en\\ \hline + READ & 0 & 0 & 1 & 1 & 0 & 1\\ \hline + WRITE & 0 & 1 & 0 & 0 & 1 & 0\\ \hline + \end{tabular} + \end{center} + \caption{Generation of control signals.} + \label{table:control} +\end{table} + + +\subsection{Replica Bitline Delay} +\label{sec:RBL} + + + +In SRAM read operation, discharging the bitline is the most time consuming procedure. +Generally, sense amplifier amplifies the small voltage difference on the bitlines at the proper sense timing, +to realize high-speed operation. Therefore, the timing for sense amplifier ($s\_en$) is extremely important for the high speed and low power SRAM. +If the $s\_en$ arrives early before the bitline difference reaches the sense amplifier input transistors offset voltage, +a read functional failure may occur. Contrarily, a late-arrived $s\_en$ would consume more unnecessary time, thereby wasting the power. +The conventional way of generating $s\_en$ signal is to use a replica bitline ($RBL$). $RBL$ as shown in ~\ref{fig:RBL} consists of a column of SRAM cells (dummy cells), +which track the random process variation in array. $RBL$ is presented for matching the delay of the activation of the +sense amplifier with the delay of the propagation of the required voltage swing at the bitlines. +In $RBL$ technique, delay driven memory cell in control path is same as read path. Therefore the +delay shift of control path according to the Process, Voltage and Temperature (PVT) variation is same ratio as that of read path. +The $RBL$ technique attains self-timed tracking with optimal $s\_en$ timing according to PVT variation. +Using replica circuits, the variation on the delay of the sense amp activation and bitline swing is minimized. + +\begin{figure}[h!] +\centering +\includegraphics[scale=.9]{./figs/replica_bitline.pdf} +\caption{Replica Bitline Schematic} +\label{fig:RBL} +\end{figure} + +$RBL$ technique uses a Replica Cell ($RC$) driving a short bitline signal. The short bitline\'s capacitance is set to be a +fraction of the main bitline capacitance (e.g. one tenth). This fraction is determined by the required bitline swing +(bitline voltages larger than offset voltage at input transistors of sense amplifier) for proper sensing. So in SRAM, an +extra column block is converted into the replica column whose capacitance is the desired fraction of the main bitline. +Therefore, its capacitance ratio to the main bitlines is set purely by the ratio of the geometric lengths (e.g. one tenth). +The $RC$ is hard wired to store a zero such that it will discharge the $RBL$ once it is accessed. +Because of its similarity with the actual memory cell (in terms of design and fabrication) the delay of $RBL$ tracks the delay of +real bitlines very well and can be made roughly equal. Figure ~\ref{fig:RC} shows the schematic of the 6T replica cell. +The timing for $s\_en$ is generated as follows. At first, the $RBL$ and the normal bitlines are precharged to VDD. +Next, selected memory cells and $RC$ are activated. $RC$ draws the current from the $RBL$ and normal bitlines are +also discharged through the accessed cell. Discharged swing on $RBL$ is inverted and then buffered to generate the signal to enable the sense amplifier. + + +\begin{figure}[h!] +\centering +\includegraphics[scale=1]{./figs/replica_cell.pdf} +\caption{Replica Bitline Schematic} +\label{fig:RC} +\end{figure} + + + + +\subsection{Timing and Power Characterizer} +\label{characterizer} + +The section will provide an explanantion of the characterizer that will generete spice stimuli for the top-level SRAM and perform spice timing simulations to determine the memory setup\&hold times, the write delay, and read delay. It will also provide a spice power estimate. + diff --git a/docs/unittests.tex b/docs/unittests.tex new file mode 100644 index 00000000..180e9b6a --- /dev/null +++ b/docs/unittests.tex @@ -0,0 +1,100 @@ +\section{Unit Tests} +\label{sec:unittests} + +OpenRAM comes with a unit testing framework based on the Python +unittest framework. Since OpenRAM is technology independent, these +unit tests can be run in any technology to verify that the technology +is properly ported. By default, FreePDK45 is supported. + +The unit tests consist of the following tests that test each module/sub-block of OpenRAM: +\begin{itemize} +\item \verb|00_code_format_check__test.py| - Checks the format of the codes. returns error if finds $TAB$ in codes. +\item \verb|01_library_drc_test.py| - DRC of library cells in technology \verb|gds_lib| +\item \verb|02_library_lvs_test.py| - LVS of library cells in technology \verb|gds_lib| and \verb|sp_lib| %(names must correspond with different extensions) +\item \verb|03_contact_test.py| - Test contacts/vias of different layers +\item \verb|03_path_test.py| - Test different types of paths based off of the wire module +\item \verb|03_ptx_test.py| - Test various sizes/fingers of PMOS and NMOS parameterized transistors +\item \verb|03_wire_test.py| - Test different types of wires with different layers +\item \verb|04_pinv_test.py| - Test various sizes of parameterized inverter +\item \verb|04_nand_2_test.py| - Test various sizes of parameterized nand2 +\item \verb|04_nand_3_test.py| - Test various sizes of parameterized nand3 +\item \verb|04_nor_2_test.py| - Test various sizes of parameterized nor2 +\item \verb|04_wordline_driver_test.py| - Test a wordline\_driver array. +\item \verb|05_array_test.py| - Test a small bit-cell array +\item \verb|06_nand_decoder_test.py| - Test a dynamic NAND address decoder +\item \verb|06_hierarchical_decoder_test.py| - Test a dynamic hierarchical address decoder +\item \verb|07_tree_column_mux_test.py| - Test a small tree column mux. +\item \verb|07_single_level_column_mux_test.py| - Test a small single level column mux. +\item \verb|08_precharge_test.py| - Test a dynamically generated precharge array +\item \verb|09_sense_amp_test.py| - Test a sense amplifier array +\item \verb|10_write_driver_test.py| - Test a write driver array +\item \verb|11_ms_flop_array_test.py| - Test a MS\_FF array +\item \verb|13_control_logic_test.py| - Test the control logic module +\item \verb|14_delay_chain_test.py| - Test a delay chain array +\item \verb|15_tri_gate_array_test.py| - Test a tri-gate array +\item \verb|16_replica_bitline_test.py| - Test a replica bitline +\item \verb|19_bank_test.py| - Test a bank +\item \verb|20_sram_test.py| - Test a complete small SRAM +\item \verb|21_timing_sram_test.py| - Test timing of SRAM +\item \verb|22_sram_func_test.py| - Test functionality of SRAM +\end {itemize} + +Each unit test instantiates a small component and performs DRC/LVS. Automatic DRC/LVS inside OpenRAM is disabled so that Python unittest assertions can be used to track failures, errors, and successful tests as follows: +\begin{verbatim} + self.assertFalse(calibre.run_drc(a.cell_name,tempgds)) + self.assertFalse(calibre.run_lvs(a.cell_name,tempgds,tempspice)) +\end{verbatim} +Each of these assertions will trigger a test failure. If there are +problems with interpreting modified code due to syntax errors, the +unit test framework will not capture this and it will result in an +Error. + +\subsection{Usage} + +A regression script is provided to check all of the unit tests by running: +\begin{verbatim} +python tests/regress.py +\end{verbatim} +from the compiler directory located at: "OpenRAM/trunk/compiler/". Each individual test can be run by running: +\begin{verbatim} +python tests/{unit-test file} +e.g. python tests/05_array_test.py +\end{verbatim} +from the compiler directory located at: "openram/trunk/compiler/". As an example, the unit tests all +complete and provide the following output except for the final +\verb|20_sram_test| which has 2 DRC violations: +\begin{verbatim} +[trunk/compiler]$ python tests/regress.py +runTest (01_library_drc_test.library_drc_test) ... ok +runTest (02_library_lvs_test.library_lvs_test) ... ok +runTest (03_contact_test.contact_test) ... ok +runTest (03_path_test.path_test) ... ok +runTest (03_ptx_test.ptx_test) ... ok +runTest (03_wire_test.wire_test) ... ok +runTest (04_pinv_test.pinv_test) ... ok +runTest (04_nand_2_test.nand_2_test) ... ok +runTest (04_nand_3_test.nand_3_test) ... ok +runTest (04_nor_2_test.nor_2_test) ... ok +runTest (04_wordline_driver_test.wordline_driver_test) ... ok +runTest (05_array_test.array_test) ... ok +runTest (06_hierdecoder_test.hierdecoder_test) ... ok +runTest (07_single_level_column_mux_test.single_level_column_mux_test) ... ok +runTest (08_precharge_test.precharge_test) ... ok +runTest (09_sense_amp_test.sense_amp_test) ... ok +runTest (10_write_driver_test.write_driver_test) ... ok +runTest (11_ms_flop_array_test.ms_flop_test) ... ok +runTest (13_control_logic_test.control_logic_test) ... ok +runTest (14_delay_chain_test.delay_chain_test) ... ok +runTest (15_tri_gate_array_test.tri_gate_array_test) ... ok +runTest (19_bank_test.bank_test) ... ok +runTest (20_sram_test.sram_test) ... ok +\end{verbatim} + +If there are any DRC/LVS violations during the test, all the summary,output,and error files +will be generated in the technology directory's "openram\_temp" folder. One would view those +files to determine the cause of the DRC/LVS violations. + +More information on the Python unittest framework is available at\\ +\begin{center} +\url{http://docs.python.org/2/library/unittest.html}. +\end{center} diff --git a/technology/freepdk45/gds_lib/write_driver.gds b/technology/freepdk45/gds_lib/write_driver.gds index c1b0d0b9..4954fc80 100644 Binary files a/technology/freepdk45/gds_lib/write_driver.gds and b/technology/freepdk45/gds_lib/write_driver.gds differ diff --git a/technology/freepdk45/sp_lib/sense_amp.sp b/technology/freepdk45/sp_lib/sense_amp.sp index 112d96f9..b5778306 100644 --- a/technology/freepdk45/sp_lib/sense_amp.sp +++ b/technology/freepdk45/sp_lib/sense_amp.sp @@ -1,11 +1,11 @@ -.SUBCKT sense_amp bl br dout sclk vdd gnd +.SUBCKT sense_amp bl br dout en vdd gnd M_1 dout net_1 vdd vdd pmos_vtg w=540.0n l=50.0n M_3 net_1 dout vdd vdd pmos_vtg w=540.0n l=50.0n M_2 dout net_1 net_2 gnd nmos_vtg w=270.0n l=50.0n M_8 net_1 dout net_2 gnd nmos_vtg w=270.0n l=50.0n -M_5 bl sclk dout vdd pmos_vtg w=720.0n l=50.0n -M_6 br sclk net_1 vdd pmos_vtg w=720.0n l=50.0n -M_7 net_2 sclk gnd gnd nmos_vtg w=270.0n l=50.0n +M_5 bl en dout vdd pmos_vtg w=720.0n l=50.0n +M_6 br en net_1 vdd pmos_vtg w=720.0n l=50.0n +M_7 net_2 en gnd gnd nmos_vtg w=270.0n l=50.0n .ENDS sense_amp diff --git a/technology/freepdk45/sp_lib/write_driver.sp b/technology/freepdk45/sp_lib/write_driver.sp index 8f1a551f..6f2451aa 100644 --- a/technology/freepdk45/sp_lib/write_driver.sp +++ b/technology/freepdk45/sp_lib/write_driver.sp @@ -1,21 +1,21 @@ -.SUBCKT write_driver din bl br wen vdd gnd +.SUBCKT write_driver din bl br en vdd gnd *inverters for enable and data input minP bl_bar din vdd vdd pmos_vtg w=360.000000n l=50.000000n minN bl_bar din gnd gnd nmos_vtg w=180.000000n l=50.000000n -moutP wen_bar wen vdd vdd pmos_vtg w=360.000000n l=50.000000n -moutN wen_bar wen gnd gnd nmos_vtg w=180.000000n l=50.000000n +moutP en_bar en vdd vdd pmos_vtg w=360.000000n l=50.000000n +moutN en_bar en gnd gnd nmos_vtg w=180.000000n l=50.000000n *tristate for BL mout0P int1 bl_bar vdd vdd pmos_vtg w=360.000000n l=50.000000n -mout0P2 bl wen_bar int1 vdd pmos_vtg w=360.000000n l=50.000000n -mout0N bl wen int2 gnd nmos_vtg w=180.000000n l=50.000000n +mout0P2 bl en_bar int1 vdd pmos_vtg w=360.000000n l=50.000000n +mout0N bl en int2 gnd nmos_vtg w=180.000000n l=50.000000n mout0N2 int2 bl_bar gnd gnd nmos_vtg w=180.000000n l=50.000000n *tristate for BR mout1P int3 din vdd vdd pmos_vtg w=360.000000n l=50.000000n -mout1P2 br wen_bar int3 vdd pmos_vtg w=360.000000n l=50.000000n -mout1N br wen int4 gnd nmos_vtg w=180.000000n l=50.000000n +mout1P2 br en_bar int3 vdd pmos_vtg w=360.000000n l=50.000000n +mout1N br en int4 gnd nmos_vtg w=180.000000n l=50.000000n mout1N2 int4 din gnd gnd nmos_vtg w=180.000000n l=50.000000n .ENDS write_driver diff --git a/technology/freepdk45/tech/__init__.py b/technology/freepdk45/tech/__init__.py index 798e230d..6b2d03b3 100644 --- a/technology/freepdk45/tech/__init__.py +++ b/technology/freepdk45/tech/__init__.py @@ -1,9 +1,6 @@ """ -Python GDS Mill Package - -GDS Mill is a Python package for the creation and manipulation of binary GDS2 layout files. +Import tech specific modules. """ from tech import * -from ptx_port import * diff --git a/technology/freepdk45/tech/ptx_port.py b/technology/freepdk45/tech/ptx_port.py deleted file mode 100644 index 3f0f7cfb..00000000 --- a/technology/freepdk45/tech/ptx_port.py +++ /dev/null @@ -1,23 +0,0 @@ -""" -This class should be called in the ptx function to draw addtional layer as some layer may not exist in the freePDK technology -""" -import globals -import design -import tech - -#class ptx_port: -# def __init__(self,name): -# self.name=name -# self.width=0 -# self.height=0 - # def draw(self,instance_to_draw,offset,tx_type,height,width,tx=1): - - #Draw wire to connect mulit active - - #self.add_rect(tech.layer["metal1"],[contact_offset[0],-wire_to_ptx],width,tech.drc["minwidth_metal1"]) - # BINWU: Fix extra stuff - #print"Freepdk no drawing required" -# pass - -def add_custom_layer(fet): - pass diff --git a/technology/freepdk45/tech/tech.py b/technology/freepdk45/tech/tech.py index 8d1ea431..1947fcc7 100644 --- a/technology/freepdk45/tech/tech.py +++ b/technology/freepdk45/tech/tech.py @@ -34,6 +34,7 @@ layer["vth"] = 7 layer["thkox"] = 8 layer["poly"] = 9 layer["contact"] = 10 +layer["active_contact"] = 10 layer["metal1"] = 11 layer["via1"] = 12 layer["metal2"] = 13 @@ -80,168 +81,149 @@ drc["lvs_rules"]=drclvs_home+"/calibreLVS.rul" drc["xrc_rules"]=drclvs_home+"/calibrexRC.rul" drc["layer_map"]=os.environ.get("OPENRAM_TECH")+"/freepdk45/layers.map" -# minwidth_tx withcontact +# minwidth_tx with contact (no dog bone transistors) drc["minwidth_tx"]=0.09 drc["minlength_channel"] = 0.05 -#well rules +# WELL.1 Minimum spacing of nwell/pwell at different potential drc["pwell_to_nwell"] = 0.225 +# WELL.4 Minimum width of nwell/pwell drc["minwidth_well"] = 0.2 -#poly rules +# POLY.1 Minimum width of poly drc["minwidth_poly"] = 0.05 -drc["minheight_poly"] = 0.0 +# POLY.2 Minimum spacing of poly AND active drc["poly_to_poly"] = 0.14 +# POLY.3 Minimum poly extension beyond active drc["poly_extend_active"] = 0.055 +# POLY.4 Minimum enclosure of active around gate drc["active_enclosure_gate"] = 0.07 +# POLY.5 Minimum spacing of field poly to active drc["poly_to_active"] = 0.05 +# POLY.6 Minimum Minimum spacing of field poly drc["poly_to_field_poly"] = 0.075 +# Not a rule drc["minarea_poly"] = 0.0 -#active -drc["active_extend_gate"] = 0 +# ACTIVE.2 Minimum spacing of active drc["active_to_body_active"] = 0.08 +# ACTIVE.1 Minimum width of active drc["minwidth_active"] = 0.09 -drc["minheight_active"] = 0.09 -drc["minarea_active"] = 0 +# Not a rule +drc["active_to_active"] = 0 +# ACTIVE.3 Minimum enclosure/spacing of nwell/pwell to active drc["well_enclosure_active"] = 0.055 +# Reserved for asymmetric enclosures drc["well_extend_active"] = 0.055 +# Not a rule +drc["minarea_active"] = 0 - -#Implant -drc["implant_to_gate"] = 0.07 +# IMPLANT.1 Minimum spacing of nimplant/ pimplant to channel drc["implant_to_channel"] = 0.07 +# Not a rule +drc["implant_enclosure_active"] = 0 +# Not a rule +drc["implant_enclosure_contact"] = 0 +# IMPLANT.2 Minimum spacing of nimplant/ pimplant to contact drc["implant_to_contact"] = 0.025 +# IMPLANT.3 Minimum width/ spacing of nimplant/ pimplant drc["implant_to_implant"] = 0.045 +# IMPLANT.4 Minimum width/ spacing of nimplant/ pimplant drc["minwidth_implant"] = 0.045 -#Contact +# CONTACT.1 Minimum width of contact drc["minwidth_contact"] = 0.065 +# CONTACT.2 Minimum spacing of contact drc["contact_to_contact"] = 0.075 +# CONTACT.4 Minimum enclosure of active around contact drc["active_enclosure_contact"] = 0.005 +# Reserved for asymmetric enclosures drc["active_extend_contact"] = 0.005 +# CONTACT.5 Minimum enclosure of poly around contact drc["poly_enclosure_contact"] = 0.005 +# Reserved for asymmetric enclosures drc["poly_extend_contact"] = 0.005 -drc["contact_to_poly"] = 0.0375 #changed from 0.035 +# CONTACT.6 Minimum spacing of contact and gate +drc["contact_to_gate"] = 0.0375 #changed from 0.035 +# CONTACT.7 Minimum spacing of contact and poly +drc["contact_to_poly"] = 0.090 -#Metal1 +# METAL1.1 Minimum width of metal1 drc["minwidth_metal1"] = 0.065 -drc["minheight_metal1"] = 0.0 +# METAL1.2 Minimum spacing of metal1 drc["metal1_to_metal1"] = 0.065 +# METAL1.3 Minimum enclosure around contact on two opposite sides drc["metal1_enclosure_contact"] = 0 +# Reserved for asymmetric enclosures drc["metal1_extend_contact"] = 0.035 +# METAL1.4 inimum enclosure around via1 on two opposite sides drc["metal1_extend_via1"] = 0.035 +# Reserved for asymmetric enclosures drc["metal1_enclosure_via1"] = 0 +# Not a rule drc["minarea_metal1"] = 0 -#via1 +# VIA1.1 Minimum width of via1 drc["minwidth_via1"] = 0.065 +# VIA1.2 Minimum spacing of via1 drc["via1_to_via1"] = 0.075 -#Metal2 +# METALINT.1 Minimum width of intermediate metal drc["minwidth_metal2"] = 0.07 -drc["minheight_metal2"] = 0.0 +# METALINT.2 Minimum spacing of intermediate metal drc["metal2_to_metal2"] = 0.07 +# METALINT.3 Minimum enclosure around via1 on two opposite sides drc["metal2_extend_via1"] = 0.035 +# Reserved for asymmetric enclosures drc["metal2_enclosure_via1"] = 0 +# METALINT.4 Minimum enclosure around via[2-3] on two opposite sides drc["metal2_extend_via2"] = 0.035 +# Reserved for asymmetric enclosures drc["metal2_enclosure_via2"] = 0 +# Not a rule drc["minarea_metal2"] = 0 -#Via2 +# VIA2-3.1 Minimum width of Via[2-3] drc["minwidth_via2"] = 0.065 +# VIA2-3.2 Minimum spacing of Via[2-3] drc["via2_to_via2"] = 0.075 -#Metal3 +# METALINT.1 Minimum width of intermediate metal drc["minwidth_metal3"] = 0.07 -drc["minheight_metal3"] = 0.0 +# METALINT.2 Minimum spacing of intermediate metal drc["metal3_to_metal3"] = 0.07 +# METALINT.3 Minimum enclosure around via1 on two opposite sides drc["metal3_extend_via2"] = 0.035 -drc["metal3_enclosure_via2"] = 0 +# Reserved for asymmetric enclosures +drc["metal3_enclosure_via2"] = 0 +# METALINT.4 Minimum enclosure around via[2-3] on two opposite sides drc["metal3_extend_via3"]=0.035 -drc["metal3_enclosure_via3"] = 0 +# Reserved for asymmetric enclosures +drc["metal3_enclosure_via3"] = 0 +# Not a rule drc["minarea_metal3"] = 0 -#Via3 +# VIA2-3.1 Minimum width of Via[2-3] drc["minwidth_via3"] = 0.065 +# VIA2-3.2 Minimum spacing of Via[2-3] drc["via3_to_via3"] = 0.07 -#Metal4 +# METALSMG.1 Minimum width of semi-global metal drc["minwidth_metal4"] = 0.14 -drc["minheight_metal4"] = 0.0 -drc["metal4_enclosure_via3"] = 0 -drc["metal4_extend_via3"] = 0.07 +# METALSMG.2 Minimum spacing of semi-global metal drc["metal4_to_metal4"] = 0.14 +# METALSMG.3 Minimum enclosure around via[3-6] on two opposite sides +drc["metal4_extend_via3"] = 0.07 +# Reserved for asymmetric enclosure +drc["metal4_enclosure_via3"] = 0 +# METALSMG.3 Minimum enclosure around via[3-6] on two opposite sides +drc["metal4_enclosure_via4"] = 0 +# Reserved for asymmetric enclosure drc["metal4_extend_via4"] = 0.07 -drc["metal4_enclosure_via4"] = 0.07 -drc["minarea_metal4"] = 0 -#Via4 -drc["minwidth_via4"] = 0.14 -drc["via4_to_via4"] = 0.14 +# Metal 5-10 are ommitted -#Metal5 -drc["minwidth_metal5"] = 0.14 -drc["minheight_metal5"] = 0.0 -drc["metal5_to_metal5"] = 0.14 -drc["metal5_extend_via4"] = 0.07 -drc["metal5_enclosure_via4"] = 0.07 -drc["minarea_metal5"] = 0 -#Via 5 -drc["minwidth_via5"] = 0.14 -drc["via5_to_via5"] = 0.14 - -#Metal6 -drc["minwidth_metal6"] = 0.14 -drc["minheight_metal6"] = 0.0 -drc["metal6_to_metal6"] = 0.14 -drc["metal6_extend_via5"] = 0 -drc["metal6_enclosure_via5"] = 0 - -#Via 6 -drc["minwidth_via6"] = 0.14 -drc["via6_to_via6"] = 0.14 - -#Metal7 -drc["minwidth_metal7"] = 0.14 -drc["minheight_metal7"] = 0.0 -drc["metal7_to_metal7"] = 0.14 -drc["metal7_extend_via6"] = 0 -drc["metal7_enclosure_via6"] = 0 - -#Via7 -drc["minwidth_via7"] = 0.14 -drc["via7_to_via7"] = 0.14 - -#Metal8 -drc["minwidth_metal8"] = 0.14 -drc["minheight_metal8"] = 0.0 -drc["metal8_to_metal8"] = 0.14 -drc["metal8_extend_via7"] = 0 -drc["metal8_enclosure_via7"] = 0 - -#Via8 -drc["minwidth_via8"] = 0.14 -drc["via8_to_via8"] = 0.14 - -#Metal9 -drc["minwidth_metal9"] = 0.14 -drc["minheight_metal9"] = 0.0 -drc["metal9_to_metal9"] = 0.14 -drc["metal9_extend_via8"] = 0 -drc["metal9_enclosure_via8"] = 0 - -#Via 9 -drc["minwidth_via9"] = 0.14 -drc["via9_to_via9"] = 0.14 - -#Metal 10 -drc["minwidth_metal10"] = 0.14 -drc["minheight_metal10"] = 0.0 -drc["metal10_to_metal10"] = 0.14 -drc["metal10_extend_via9"] = 0 -drc["metal10_enclosure_via9"] = 0 ################################################### ##END DRC/LVS Rules diff --git a/technology/scn3me_subm/gds_lib/cell_6t.gds b/technology/scn3me_subm/gds_lib/cell_6t.gds index d1e193b3..81c8112a 100644 Binary files a/technology/scn3me_subm/gds_lib/cell_6t.gds and b/technology/scn3me_subm/gds_lib/cell_6t.gds differ diff --git a/technology/scn3me_subm/gds_lib/ms_flop.gds b/technology/scn3me_subm/gds_lib/ms_flop.gds index 07454c41..50b6113e 100644 Binary files a/technology/scn3me_subm/gds_lib/ms_flop.gds and b/technology/scn3me_subm/gds_lib/ms_flop.gds differ diff --git a/technology/scn3me_subm/gds_lib/replica_cell_6t.gds b/technology/scn3me_subm/gds_lib/replica_cell_6t.gds index 3abed82f..50dd9d12 100644 Binary files a/technology/scn3me_subm/gds_lib/replica_cell_6t.gds and b/technology/scn3me_subm/gds_lib/replica_cell_6t.gds differ diff --git a/technology/scn3me_subm/gds_lib/sense_amp.gds b/technology/scn3me_subm/gds_lib/sense_amp.gds index ca17a55a..c0582672 100644 Binary files a/technology/scn3me_subm/gds_lib/sense_amp.gds and b/technology/scn3me_subm/gds_lib/sense_amp.gds differ diff --git a/technology/scn3me_subm/gds_lib/tri_gate.gds b/technology/scn3me_subm/gds_lib/tri_gate.gds index 06b11d99..0128ae61 100644 Binary files a/technology/scn3me_subm/gds_lib/tri_gate.gds and b/technology/scn3me_subm/gds_lib/tri_gate.gds differ diff --git a/technology/scn3me_subm/gds_lib/write_driver.gds b/technology/scn3me_subm/gds_lib/write_driver.gds index 07ac54cd..a8a9c176 100644 Binary files a/technology/scn3me_subm/gds_lib/write_driver.gds and b/technology/scn3me_subm/gds_lib/write_driver.gds differ diff --git a/technology/scn3me_subm/mag_lib/cell_6t.mag b/technology/scn3me_subm/mag_lib/cell_6t.mag index 3b048720..a0f2e63a 100644 --- a/technology/scn3me_subm/mag_lib/cell_6t.mag +++ b/technology/scn3me_subm/mag_lib/cell_6t.mag @@ -1,115 +1,115 @@ magic tech scmos -timestamp 1425318832 +timestamp 1517870584 +<< nwell >> +rect -8 29 42 51 +<< pwell >> +rect -8 -8 42 29 << ntransistor >> -rect 7 12 9 20 -rect 29 12 31 20 -rect 10 5 14 7 -rect 24 5 28 7 +rect 7 10 9 18 +rect 29 10 31 18 +rect 10 3 14 5 +rect 24 3 28 5 << ptransistor >> -rect 7 39 11 42 -rect 27 39 31 42 +rect 7 37 11 40 +rect 27 37 31 40 << ndiffusion >> -rect 2 20 6 23 -rect 32 20 36 23 -rect 6 16 7 20 +rect -2 16 7 18 rect 2 12 7 16 -rect 9 16 10 20 -rect 9 12 14 16 -rect 28 16 29 20 -rect 24 12 29 16 -rect 31 16 32 20 -rect 31 12 36 16 -rect 10 7 14 12 -rect 24 7 28 12 -rect 10 4 14 5 -rect 24 4 28 5 +rect -2 10 7 12 +rect 9 14 10 18 +rect 9 10 14 14 +rect 28 14 29 18 +rect 24 10 29 14 +rect 31 16 36 18 +rect 31 12 32 16 +rect 31 10 36 12 +rect 10 5 14 10 +rect 24 5 28 10 +rect 10 2 14 3 +rect 24 2 28 3 << pdiffusion >> -rect 2 42 6 45 -rect 32 42 36 45 -rect 6 39 7 42 -rect 11 39 12 42 -rect 26 39 27 42 -rect 31 39 32 42 +rect 2 37 7 40 +rect 11 37 12 40 +rect 26 37 27 40 +rect 31 37 32 40 << ndcontact >> -rect 2 16 6 20 -rect 10 16 14 20 -rect 24 16 28 20 -rect 32 16 36 20 -rect 10 0 14 4 -rect 24 0 28 4 +rect -2 12 2 16 +rect 10 14 14 18 +rect 24 14 28 18 +rect 32 12 36 16 +rect 10 -2 14 2 +rect 24 -2 28 2 << pdcontact >> -rect 2 38 6 42 -rect 12 38 16 42 -rect 22 38 26 42 -rect 32 38 36 42 +rect -2 36 2 40 +rect 12 36 16 40 +rect 22 36 26 40 +rect 32 36 36 40 << psubstratepcontact >> -rect 2 23 6 27 -rect 32 23 36 27 +rect -2 22 2 26 +rect 32 22 36 26 << nsubstratencontact >> -rect 0 45 6 49 -rect 32 45 36 49 +rect 32 44 36 48 << polysilicon >> -rect 7 42 11 44 -rect 27 42 31 44 -rect 7 37 11 39 -rect 7 23 9 37 -rect 27 36 31 39 -rect 15 35 31 36 -rect 19 34 31 35 -rect 7 22 21 23 -rect 7 21 24 22 -rect 7 20 9 21 -rect 29 20 31 34 -rect 7 10 9 12 -rect 17 7 21 8 -rect 29 10 31 12 -rect 0 5 10 7 -rect 14 5 24 7 -rect 28 5 36 7 +rect 7 40 11 42 +rect 27 40 31 42 +rect 7 35 11 37 +rect 7 21 9 35 +rect 27 34 31 37 +rect 15 33 31 34 +rect 19 32 31 33 +rect 7 20 21 21 +rect 7 19 24 20 +rect 7 18 9 19 +rect 29 18 31 32 +rect 7 8 9 10 +rect 17 5 21 6 +rect 29 8 31 10 +rect -2 3 10 5 +rect 14 3 24 5 +rect 28 3 36 5 << polycontact >> -rect 15 31 19 35 -rect 21 22 25 26 -rect 17 8 21 12 +rect 15 29 19 33 +rect 21 20 25 24 +rect 17 6 21 10 << metal1 >> -rect 6 45 32 49 -rect 2 42 6 45 -rect 32 42 36 45 -rect 2 27 6 31 -rect 2 20 6 23 -rect 11 20 15 38 -rect 23 26 27 38 -rect 25 22 27 26 -rect 23 20 27 22 -rect 32 27 36 31 -rect 32 20 36 23 -rect 0 8 17 11 -rect 21 8 36 11 -rect 0 7 36 8 -rect 9 0 10 4 -rect 23 0 24 4 +rect -2 44 32 48 +rect -2 40 2 44 +rect 32 40 36 44 +rect 11 36 12 40 +rect 26 36 27 40 +rect -2 26 2 29 +rect -2 16 2 22 +rect 11 18 15 36 +rect 23 24 27 36 +rect 25 20 27 24 +rect 14 14 15 18 +rect 23 18 27 20 +rect 32 26 36 29 +rect 23 14 24 18 +rect 32 16 36 22 +rect -2 6 17 9 +rect 21 6 36 9 +rect -2 5 36 6 << m2contact >> -rect 2 31 6 35 -rect 32 31 36 35 -rect 5 0 9 4 -rect 19 0 23 4 +rect -2 29 2 33 +rect 32 29 36 33 +rect 6 -2 10 2 +rect 20 -2 24 2 << metal2 >> -rect 0 35 6 49 -rect 0 31 2 35 -rect 0 14 6 31 -rect 10 4 14 49 -rect 20 4 24 49 -rect 9 0 14 4 -rect 23 0 24 4 -rect 32 35 36 49 -rect 32 0 36 31 +rect -2 33 2 48 +rect -2 -2 2 29 +rect 10 -2 14 48 +rect 20 2 24 48 +rect 32 33 36 48 +rect 32 -2 36 29 << m3p >> -rect 0 0 34 49 +rect 0 0 34 46 << labels >> -rlabel m2contact 20 4 20 4 1 BR -rlabel metal2 10 4 10 4 1 BL -rlabel metal2 32 31 32 31 7 gnd -rlabel metal1 32 45 32 45 4 vdd -rlabel metal2 2 31 2 31 3 gnd -rlabel metal1 2 8 2 8 3 WL +rlabel metal1 2 6 2 6 3 WL +rlabel metal2 -1 28 -1 28 1 gnd +rlabel metal2 33 28 33 28 1 gnd +rlabel metal1 17 46 17 46 5 vdd +rlabel metal2 11 43 11 43 1 BL +rlabel metal2 21 43 21 43 1 BR << end >> diff --git a/technology/scn3me_subm/mag_lib/ms_flop.mag b/technology/scn3me_subm/mag_lib/ms_flop.mag index 8cc10c8a..d43b37dd 100644 --- a/technology/scn3me_subm/mag_lib/ms_flop.mag +++ b/technology/scn3me_subm/mag_lib/ms_flop.mag @@ -1,6 +1,10 @@ magic tech scmos -timestamp 1424105514 +timestamp 1516666526 +<< nwell >> +rect -2 0 18 200 +<< pwell >> +rect 18 0 40 200 << ntransistor >> rect 24 178 27 180 rect 24 162 27 164 diff --git a/technology/scn3me_subm/mag_lib/replica_cell_6t.mag b/technology/scn3me_subm/mag_lib/replica_cell_6t.mag index 0211bf9e..8257df55 100644 --- a/technology/scn3me_subm/mag_lib/replica_cell_6t.mag +++ b/technology/scn3me_subm/mag_lib/replica_cell_6t.mag @@ -1,118 +1,118 @@ magic tech scmos -timestamp 1424371826 +timestamp 1517870621 +<< nwell >> +rect -8 29 42 51 +<< pwell >> +rect -8 -8 42 29 << ntransistor >> -rect 7 12 9 20 -rect 29 12 31 20 -rect 10 5 14 7 -rect 24 5 28 7 +rect 7 10 9 18 +rect 29 10 31 18 +rect 10 3 14 5 +rect 24 3 28 5 << ptransistor >> -rect 7 39 11 42 -rect 27 39 31 42 +rect 7 37 11 40 +rect 27 37 31 40 << ndiffusion >> -rect 2 20 6 23 -rect 32 20 36 23 -rect 6 16 7 20 +rect -2 16 7 18 rect 2 12 7 16 -rect 9 16 10 20 -rect 9 12 14 16 -rect 28 16 29 20 -rect 24 12 29 16 -rect 31 16 32 20 -rect 31 12 36 16 -rect 10 7 14 12 -rect 24 7 28 12 -rect 10 4 14 5 -rect 24 4 28 5 +rect -2 10 7 12 +rect 9 14 10 18 +rect 9 10 14 14 +rect 28 14 29 18 +rect 24 10 29 14 +rect 31 16 36 18 +rect 31 12 32 16 +rect 31 10 36 12 +rect 10 5 14 10 +rect 24 5 28 10 +rect 10 2 14 3 +rect 24 2 28 3 << pdiffusion >> -rect 2 42 6 45 -rect 32 42 36 45 -rect 6 39 7 42 -rect 11 39 12 42 -rect 26 39 27 42 -rect 31 39 32 42 +rect 2 37 7 40 +rect 11 37 12 40 +rect 26 37 27 40 +rect 31 37 32 40 << ndcontact >> -rect 2 16 6 20 -rect 10 16 14 20 -rect 24 16 28 20 -rect 32 16 36 20 -rect 10 0 14 4 -rect 24 0 28 4 +rect -2 12 2 16 +rect 10 14 14 18 +rect 24 14 28 18 +rect 32 12 36 16 +rect 10 -2 14 2 +rect 24 -2 28 2 << pdcontact >> -rect 2 38 6 42 -rect 12 38 16 42 -rect 22 38 26 42 -rect 32 38 36 42 +rect -2 36 2 40 +rect 12 36 16 40 +rect 22 36 26 40 +rect 32 36 36 40 << psubstratepcontact >> -rect 2 23 6 27 -rect 32 23 36 27 +rect -2 22 2 26 +rect 32 22 36 26 << nsubstratencontact >> -rect 0 45 6 49 -rect 32 45 36 49 +rect 32 44 36 48 << polysilicon >> -rect 7 42 11 44 -rect 27 42 31 44 -rect 7 37 11 39 -rect 7 23 9 37 -rect 27 36 31 39 -rect 15 35 31 36 -rect 19 34 31 35 -rect 7 22 21 23 -rect 7 21 24 22 -rect 7 20 9 21 -rect 29 20 31 34 -rect 7 10 9 12 -rect 17 7 21 8 -rect 29 10 31 12 -rect 0 5 10 7 -rect 14 5 24 7 -rect 28 5 36 7 +rect 7 40 11 42 +rect 27 40 31 42 +rect 7 35 11 37 +rect 7 21 9 35 +rect 27 34 31 37 +rect 15 33 31 34 +rect 19 32 31 33 +rect 7 20 21 21 +rect 7 19 24 20 +rect 7 18 9 19 +rect 29 18 31 32 +rect 7 8 9 10 +rect 17 5 21 6 +rect 29 8 31 10 +rect -2 3 10 5 +rect 14 3 24 5 +rect 28 3 36 5 << polycontact >> -rect 15 31 19 35 -rect 21 22 25 26 -rect 17 8 21 12 +rect 15 29 19 33 +rect 21 20 25 24 +rect 17 6 21 10 << metal1 >> -rect 6 45 32 49 -rect 2 42 6 45 -rect 32 42 36 45 -rect 11 35 15 38 -rect 6 31 15 35 -rect 2 27 6 31 -rect 2 20 6 23 -rect 11 20 15 31 -rect 23 26 27 38 -rect 25 22 27 26 -rect 23 20 27 22 -rect 32 27 36 31 -rect 32 20 36 23 -rect 2 14 6 16 -rect 0 8 17 11 -rect 21 8 36 11 -rect 0 7 36 8 -rect 9 0 10 4 -rect 23 0 24 4 +rect -2 44 32 48 +rect -2 40 2 44 +rect 32 40 36 44 +rect 11 36 12 40 +rect 26 36 27 40 +rect -2 26 2 29 +rect 11 25 15 36 +rect 2 22 15 25 +rect 23 24 27 36 +rect -2 21 15 22 +rect -2 16 2 21 +rect 11 18 15 21 +rect 25 20 27 24 +rect 14 14 15 18 +rect 23 18 27 20 +rect 32 26 36 29 +rect 23 14 24 18 +rect 32 16 36 22 +rect -2 6 17 9 +rect 21 6 36 9 +rect -2 5 36 6 << m2contact >> -rect 2 31 6 35 -rect 32 31 36 35 -rect 5 0 9 4 -rect 19 0 23 4 +rect -2 29 2 33 +rect 32 29 36 33 +rect 6 -2 10 2 +rect 20 -2 24 2 << metal2 >> -rect 0 35 6 49 -rect 0 31 2 35 -rect 0 14 6 31 -rect 10 4 14 49 -rect 20 4 24 49 -rect 9 0 14 4 -rect 23 0 24 4 -rect 32 35 36 49 -rect 32 0 36 31 +rect -2 33 2 48 +rect -2 -2 2 29 +rect 10 -2 14 48 +rect 20 2 24 48 +rect 32 33 36 48 +rect 32 -2 36 29 << m3p >> -rect 0 0 34 49 +rect 0 0 34 46 << labels >> -rlabel metal2 2 31 2 31 3 gnd -rlabel metal2 32 31 32 31 7 gnd -rlabel metal2 10 4 10 4 1 BL -rlabel m2contact 20 4 20 4 1 BR -rlabel nsubstratencontact 2 45 2 45 4 vdd -rlabel metal1 2 7 2 7 3 WL +rlabel metal1 2 6 2 6 3 WL +rlabel metal2 -1 28 -1 28 1 gnd +rlabel metal2 33 28 33 28 1 gnd +rlabel metal1 17 46 17 46 5 vdd +rlabel metal2 11 43 11 43 1 BL +rlabel metal2 21 43 21 43 1 BR << end >> diff --git a/technology/scn3me_subm/mag_lib/sense_amp.mag b/technology/scn3me_subm/mag_lib/sense_amp.mag index be7e00c5..32dfb9d8 100644 --- a/technology/scn3me_subm/mag_lib/sense_amp.mag +++ b/technology/scn3me_subm/mag_lib/sense_amp.mag @@ -1,117 +1,135 @@ magic tech scmos -timestamp 1424193153 +timestamp 1516827653 +<< nwell >> +rect 0 0 40 102 +<< pwell >> +rect 0 102 40 163 << ntransistor >> -rect 21 115 23 128 -rect 12 89 14 102 -rect 20 89 22 102 +rect 21 130 23 139 +rect 12 108 14 117 +rect 20 108 22 117 << ptransistor >> -rect 12 67 14 77 -rect 20 67 22 77 -rect 11 20 13 33 -rect 27 20 29 33 +rect 12 78 14 96 +rect 20 78 22 96 +rect 11 20 13 44 +rect 27 20 29 44 << ndiffusion >> -rect 20 115 21 128 -rect 23 115 24 128 -rect 11 89 12 102 -rect 14 89 15 102 -rect 19 89 20 102 -rect 22 89 23 102 +rect 20 130 21 139 +rect 23 130 24 139 +rect 11 108 12 117 +rect 14 108 15 117 +rect 19 108 20 117 +rect 22 108 23 117 << pdiffusion >> -rect 11 67 12 77 -rect 14 67 15 77 -rect 19 67 20 77 -rect 22 67 23 77 -rect 10 20 11 33 -rect 13 20 14 33 -rect 26 20 27 33 -rect 29 20 30 33 +rect 7 94 12 96 +rect 11 80 12 94 +rect 7 78 12 80 +rect 14 94 20 96 +rect 14 80 15 94 +rect 19 80 20 94 +rect 14 78 20 80 +rect 22 94 27 96 +rect 22 80 23 94 +rect 22 78 27 80 +rect 10 20 11 44 +rect 13 20 14 44 +rect 26 20 27 44 +rect 29 20 30 44 << ndcontact >> -rect 16 115 20 128 -rect 24 115 28 128 -rect 7 89 11 102 -rect 15 89 19 102 -rect 23 89 27 102 +rect 16 130 20 139 +rect 24 130 28 139 +rect 7 108 11 117 +rect 15 108 19 117 +rect 23 108 27 117 << pdcontact >> -rect 7 67 11 77 -rect 15 67 19 77 -rect 23 67 27 77 -rect 6 20 10 33 -rect 14 20 18 33 -rect 22 20 26 33 -rect 30 20 34 33 +rect 7 80 11 94 +rect 15 80 19 94 +rect 23 80 27 94 +rect 6 20 10 44 +rect 14 20 18 44 +rect 22 20 26 44 +rect 30 20 34 44 +<< nsubstratendiff >> +rect 18 64 22 66 +rect 18 58 22 60 << psubstratepcontact >> -rect 32 127 36 131 +rect 32 138 36 142 << nsubstratencontact >> -rect 18 47 22 55 +rect 18 60 22 64 << polysilicon >> -rect 21 128 23 138 -rect 21 114 23 115 -rect 3 112 23 114 -rect 3 36 5 112 -rect 12 107 34 109 -rect 12 102 14 107 -rect 20 102 22 104 -rect 12 77 14 89 -rect 20 77 22 89 -rect 32 86 34 107 -rect 30 82 34 86 -rect 12 65 14 67 -rect 20 58 22 67 -rect 13 56 22 58 -rect 9 44 11 54 -rect 32 44 34 82 -rect 33 40 34 44 -rect 3 34 13 36 -rect 11 33 13 34 -rect 27 33 29 35 +rect 21 139 23 149 +rect 21 129 23 130 +rect 3 127 23 129 +rect 3 47 5 127 +rect 12 122 34 124 +rect 12 117 14 122 +rect 20 117 22 119 +rect 12 96 14 108 +rect 20 96 22 108 +rect 32 105 34 122 +rect 30 101 34 105 +rect 12 76 14 78 +rect 20 69 22 78 +rect 13 67 22 69 +rect 9 55 11 65 +rect 32 55 34 101 +rect 33 51 34 55 +rect 3 45 13 47 +rect 11 44 13 45 +rect 27 44 29 46 rect 11 19 13 20 rect 27 19 29 20 rect 11 17 29 19 << polycontact >> -rect 20 138 24 142 -rect 26 82 30 86 -rect 9 54 13 58 -rect 9 40 13 44 -rect 29 40 33 44 +rect 20 149 24 153 +rect 26 101 30 105 +rect 9 65 13 69 +rect 9 51 13 55 +rect 29 51 33 55 << metal1 >> -rect -2 138 20 142 -rect 24 138 36 142 -rect -2 131 32 135 -rect 24 128 28 131 -rect 16 102 19 115 -rect 7 77 11 89 -rect 23 86 27 89 -rect 23 82 26 86 -rect 23 77 27 82 -rect 7 58 11 67 -rect 15 64 18 67 -rect 15 61 21 64 -rect 7 54 9 58 -rect 18 55 21 61 -rect -2 47 18 51 -rect 22 47 36 51 -rect 6 33 9 43 -rect 33 40 34 44 -rect 31 33 34 40 +rect -2 149 20 153 +rect 24 149 36 153 +rect -2 142 32 146 +rect 24 139 28 142 +rect 16 117 19 130 +rect 7 94 11 108 +rect 23 105 27 108 +rect 23 101 26 105 +rect 7 69 11 80 +rect 15 94 19 96 +rect 15 78 19 80 +rect 23 94 27 101 +rect 23 78 27 80 +rect 15 75 18 78 +rect 15 72 21 75 +rect 7 65 9 69 +rect 18 66 21 72 +rect 18 64 22 66 +rect -2 60 18 62 +rect 22 60 36 62 +rect -2 58 36 60 +rect 6 44 9 54 +rect 33 51 34 55 +rect 31 44 34 51 rect 3 20 6 23 rect 3 15 7 20 << m2contact >> -rect 32 131 36 135 -rect 13 33 17 37 -rect 22 33 26 37 +rect 32 142 36 146 +rect 13 44 17 48 +rect 22 44 26 48 rect 3 11 7 15 << metal2 >> -rect 10 37 14 152 -rect 20 37 24 152 -rect 32 135 36 152 -rect 32 127 36 131 -rect 10 33 13 37 -rect 20 33 22 37 +rect 10 48 14 163 +rect 20 48 24 163 +rect 32 146 36 163 +rect 32 138 36 142 +rect 10 44 13 48 +rect 20 44 22 48 rect 3 8 7 11 rect 3 0 7 4 -rect 10 0 14 33 -rect 20 0 24 33 +rect 10 0 14 44 +rect 20 0 24 44 << m3contact >> rect 3 4 7 8 << metal3 >> @@ -120,12 +138,14 @@ rect 2 4 3 8 rect 7 4 8 8 rect 2 3 8 4 << m3p >> -rect 0 0 34 152 +rect 0 0 34 163 << labels >> -rlabel metal3 3 3 3 3 2 Dout -rlabel metal1 0 138 0 138 4 SCLK -rlabel metal1 0 131 0 131 5 gnd -rlabel metal1 0 47 0 47 3 vdd -rlabel metal2 20 0 20 0 1 BR -rlabel metal2 10 0 10 0 1 BL +flabel metal1 0 58 0 58 4 FreeSans 26 0 0 0 vdd +flabel metal1 0 149 0 149 4 FreeSans 26 0 0 0 en +flabel metal1 0 142 0 142 4 FreeSans 26 0 0 0 gnd +flabel metal2 10 0 10 0 4 FreeSans 26 0 0 0 bl +flabel metal2 20 0 20 0 4 FreeSans 26 0 0 0 br +flabel metal3 3 3 3 3 4 FreeSans 26 0 0 0 dout +<< properties >> +string path 270.000 468.000 270.000 486.000 288.000 486.000 288.000 468.000 270.000 468.000 << end >> diff --git a/technology/scn3me_subm/mag_lib/tri_gate.mag b/technology/scn3me_subm/mag_lib/tri_gate.mag index f4999160..8559a1b5 100644 --- a/technology/scn3me_subm/mag_lib/tri_gate.mag +++ b/technology/scn3me_subm/mag_lib/tri_gate.mag @@ -1,6 +1,10 @@ magic tech scmos -timestamp 1428529544 +timestamp 1517275711 +<< nwell >> +rect -2 45 38 73 +<< pwell >> +rect -2 0 38 45 << ntransistor >> rect 9 27 11 31 rect 17 27 19 31 @@ -64,6 +68,7 @@ rect 16 65 36 69 rect 12 61 16 65 rect 3 53 4 61 rect 3 42 6 53 +rect 13 46 15 50 rect 3 38 16 42 rect 3 31 6 38 rect 29 31 32 53 @@ -76,12 +81,12 @@ rect 29 12 36 16 rect 0 4 28 8 rect 32 4 36 8 << m2contact >> -rect 9 46 13 50 +rect 15 46 19 50 rect 25 34 29 38 rect 32 19 36 23 << metal2 >> rect 15 50 19 73 -rect 13 46 19 50 +rect 13 46 15 50 rect 15 34 25 38 rect 15 9 19 34 rect 32 23 36 73 @@ -99,9 +104,10 @@ rect 14 4 20 5 rect 0 0 34 73 << labels >> rlabel metal2 32 0 32 0 8 gnd -rlabel metal2 15 0 15 0 2 Out -rlabel metal2 15 73 15 73 5 In rlabel metal1 0 65 0 65 4 vdd rlabel metal1 0 12 0 12 3 en rlabel metal1 0 4 0 4 2 en_bar +rlabel metal1 1 20 1 20 3 gnd +rlabel metal2 16 1 16 1 1 out +rlabel metal2 17 70 17 70 5 in << end >> diff --git a/technology/scn3me_subm/mag_lib/write_driver.mag b/technology/scn3me_subm/mag_lib/write_driver.mag index 8a8be7bd..7398bb84 100644 --- a/technology/scn3me_subm/mag_lib/write_driver.mag +++ b/technology/scn3me_subm/mag_lib/write_driver.mag @@ -1,230 +1,236 @@ magic tech scmos -timestamp 1424105890 +timestamp 1517448475 +<< nwell >> +rect -3 101 37 138 +rect -3 0 37 51 +<< pwell >> +rect -3 138 37 202 +rect -3 51 37 101 << ntransistor >> -rect 9 176 11 188 -rect 17 176 19 188 -rect 15 161 27 163 -rect 9 143 11 147 -rect 17 143 19 147 -rect 10 81 12 88 -rect 18 81 20 88 -rect 8 56 10 63 -rect 16 56 18 63 -rect 24 59 26 63 +rect 9 177 11 189 +rect 17 177 19 189 +rect 15 162 27 164 +rect 9 144 11 148 +rect 17 144 19 148 +rect 10 82 12 89 +rect 18 82 20 89 +rect 8 57 10 64 +rect 16 57 18 64 +rect 24 60 26 64 << ptransistor >> -rect 9 124 11 131 -rect 17 124 19 131 -rect 10 106 12 113 -rect 18 106 20 113 -rect 8 37 10 44 -rect 16 37 18 44 -rect 24 37 26 44 +rect 9 125 11 132 +rect 17 125 19 132 +rect 10 107 12 114 +rect 18 107 20 114 +rect 8 38 10 45 +rect 16 38 18 45 +rect 24 38 26 45 << ndiffusion >> -rect 8 176 9 188 -rect 11 176 12 188 -rect 16 176 17 188 -rect 19 176 20 188 -rect 15 163 27 164 -rect 15 160 27 161 -rect 12 156 15 159 -rect 12 155 16 156 -rect 8 143 9 147 -rect 11 143 12 147 -rect 16 143 17 147 -rect 19 143 20 147 -rect 9 81 10 88 -rect 12 81 13 88 -rect 17 81 18 88 -rect 20 81 21 88 -rect 25 81 26 85 -rect 7 56 8 63 -rect 10 56 11 63 -rect 15 56 16 63 -rect 18 56 19 63 -rect 23 59 24 63 -rect 26 59 27 63 +rect 8 177 9 189 +rect 11 177 12 189 +rect 16 177 17 189 +rect 19 177 20 189 +rect 15 164 27 165 +rect 15 161 27 162 +rect 12 157 15 160 +rect 12 156 16 157 +rect 8 144 9 148 +rect 11 144 12 148 +rect 16 144 17 148 +rect 19 144 20 148 +rect 9 82 10 89 +rect 12 82 13 89 +rect 17 82 18 89 +rect 20 82 21 89 +rect 25 82 26 86 +rect 7 57 8 64 +rect 10 57 11 64 +rect 15 57 16 64 +rect 18 57 19 64 +rect 23 60 24 64 +rect 26 60 27 64 << pdiffusion >> -rect 8 124 9 131 -rect 11 124 12 131 -rect 16 124 17 131 -rect 19 124 20 131 -rect 12 121 16 124 -rect 9 106 10 113 -rect 12 106 13 113 -rect 17 106 18 113 -rect 20 106 21 113 -rect 7 37 8 44 -rect 10 37 11 44 -rect 15 37 16 44 -rect 18 37 19 44 -rect 23 37 24 44 -rect 26 37 27 44 -rect 3 34 7 37 +rect 8 125 9 132 +rect 11 125 12 132 +rect 16 125 17 132 +rect 19 125 20 132 +rect 12 122 16 125 +rect 9 107 10 114 +rect 12 107 13 114 +rect 17 107 18 114 +rect 20 107 21 114 +rect 7 38 8 45 +rect 10 38 11 45 +rect 15 38 16 45 +rect 18 38 19 45 +rect 23 38 24 45 +rect 26 38 27 45 +rect 3 35 7 38 << ndcontact >> -rect 4 176 8 188 -rect 12 176 16 188 -rect 20 176 24 188 -rect 15 164 27 168 -rect 15 156 27 160 -rect 4 143 8 147 -rect 12 143 16 147 -rect 20 143 24 147 -rect 5 81 9 88 -rect 13 81 17 88 -rect 21 81 25 88 -rect 3 56 7 63 -rect 11 56 15 63 -rect 19 56 23 63 -rect 27 59 31 63 +rect 4 177 8 189 +rect 12 177 16 189 +rect 20 177 24 189 +rect 15 165 27 169 +rect 15 157 27 161 +rect 4 144 8 148 +rect 12 144 16 148 +rect 20 144 24 148 +rect 5 82 9 89 +rect 13 82 17 89 +rect 21 82 25 89 +rect 3 57 7 64 +rect 11 57 15 64 +rect 19 57 23 64 +rect 27 60 31 64 << pdcontact >> -rect 4 124 8 131 -rect 12 124 16 131 -rect 20 124 24 131 -rect 5 106 9 113 -rect 13 106 17 113 -rect 21 106 25 113 -rect 3 37 7 44 -rect 11 37 15 44 -rect 19 37 23 44 -rect 27 37 31 44 +rect 4 125 8 132 +rect 12 125 16 132 +rect 20 125 24 132 +rect 5 107 9 114 +rect 13 107 17 114 +rect 21 107 25 114 +rect 3 38 7 45 +rect 11 38 15 45 +rect 19 38 23 45 +rect 27 38 31 45 << psubstratepcontact >> -rect 12 151 16 155 -rect 26 81 30 85 +rect 12 152 16 156 +rect 26 82 30 86 << nsubstratencontact >> -rect 12 117 16 121 -rect 3 30 7 34 +rect 12 118 16 122 +rect 3 31 7 35 << polysilicon >> -rect 9 193 30 195 -rect 9 188 11 193 -rect 17 188 19 190 -rect 28 184 30 193 -rect 9 174 11 176 -rect 17 171 19 176 -rect 6 169 19 171 -rect 6 166 8 169 -rect 13 161 15 163 -rect 27 161 33 163 -rect 9 147 11 149 -rect 17 147 19 149 -rect 9 131 11 143 -rect 17 131 19 143 -rect 9 123 11 124 -rect 2 121 11 123 -rect 17 123 19 124 -rect 17 121 28 123 -rect 2 74 4 121 -rect 10 113 12 115 -rect 18 113 20 115 -rect 10 88 12 106 -rect 18 105 20 106 -rect 16 103 20 105 -rect 16 91 18 103 -rect 26 99 28 121 -rect 27 95 28 99 -rect 16 89 20 91 -rect 18 88 20 89 -rect 10 80 12 81 -rect 10 78 13 80 -rect 2 70 3 74 -rect 11 70 13 78 -rect 18 78 20 81 -rect 18 76 23 78 -rect 31 70 33 161 -rect 11 68 33 70 -rect 11 66 13 68 -rect 8 64 13 66 -rect 8 63 10 64 -rect 16 63 18 65 -rect 24 63 26 65 -rect 8 44 10 56 -rect 16 51 18 56 -rect 24 51 26 59 -rect 16 49 26 51 -rect 16 44 18 49 -rect 24 44 26 49 -rect 8 27 10 37 -rect 16 13 18 37 -rect 24 35 26 37 +rect 9 194 30 196 +rect 9 189 11 194 +rect 17 189 19 191 +rect 28 185 30 194 +rect 9 175 11 177 +rect 17 172 19 177 +rect 6 170 19 172 +rect 6 167 8 170 +rect 13 162 15 164 +rect 27 162 33 164 +rect 9 148 11 150 +rect 17 148 19 150 +rect 9 132 11 144 +rect 17 132 19 144 +rect 9 124 11 125 +rect 2 122 11 124 +rect 17 124 19 125 +rect 17 122 28 124 +rect 2 75 4 122 +rect 10 114 12 116 +rect 18 114 20 116 +rect 10 89 12 107 +rect 18 106 20 107 +rect 16 104 20 106 +rect 16 92 18 104 +rect 26 100 28 122 +rect 27 96 28 100 +rect 16 90 20 92 +rect 18 89 20 90 +rect 10 81 12 82 +rect 10 79 13 81 +rect 2 71 3 75 +rect 11 71 13 79 +rect 18 79 20 82 +rect 18 77 23 79 +rect 31 71 33 162 +rect 11 69 33 71 +rect 11 67 13 69 +rect 8 65 13 67 +rect 8 64 10 65 +rect 16 64 18 66 +rect 24 64 26 66 +rect 8 45 10 57 +rect 16 52 18 57 +rect 24 52 26 60 +rect 16 50 26 52 +rect 16 45 18 50 +rect 24 45 26 50 +rect 8 28 10 38 +rect 16 14 18 38 +rect 24 36 26 38 << polycontact >> -rect 28 180 32 184 -rect 4 162 8 166 -rect 23 95 27 99 -rect 3 70 7 74 -rect 23 74 27 78 -rect 7 23 11 27 -rect 16 9 20 13 +rect 28 181 32 185 +rect 4 163 8 167 +rect 23 96 27 100 +rect 3 71 7 75 +rect 23 75 27 79 +rect 7 24 11 28 +rect 16 10 20 14 << metal1 >> -rect 5 188 8 190 -rect 32 180 33 184 -rect 13 168 16 176 -rect 13 164 15 168 -rect 4 147 8 162 -rect 12 155 16 156 -rect 12 147 16 151 -rect 4 131 8 143 -rect 20 141 24 143 -rect 30 141 33 180 -rect 20 137 33 141 -rect 20 131 24 137 -rect 12 121 16 124 -rect 0 117 8 121 -rect 16 117 36 121 -rect 13 113 17 117 -rect 5 103 9 106 -rect 21 103 25 106 -rect 5 100 25 103 -rect 5 88 9 100 -rect 21 99 25 100 -rect 21 95 23 99 -rect 25 81 26 85 -rect 4 63 7 70 -rect 27 63 31 78 -rect 3 50 7 56 -rect 3 47 15 50 -rect 11 44 15 47 -rect 27 44 31 59 -rect 3 34 7 37 -rect 19 34 23 37 -rect 0 30 3 34 -rect 7 30 8 34 -rect 12 30 36 34 -rect 0 23 7 27 -rect 11 23 36 27 -rect 0 16 32 20 +rect 5 189 8 191 +rect 32 181 33 185 +rect 13 169 16 177 +rect 13 165 15 169 +rect 4 148 8 163 +rect 12 156 16 157 +rect 12 148 16 152 +rect 4 132 8 144 +rect 20 142 24 144 +rect 30 142 33 181 +rect 20 138 33 142 +rect 20 132 24 138 +rect 12 122 16 125 +rect 0 118 8 122 +rect 16 118 36 122 +rect 13 114 17 118 +rect 5 104 9 107 +rect 21 104 25 107 +rect 5 101 25 104 +rect 5 89 9 101 +rect 21 100 25 101 +rect 21 96 23 100 +rect 25 82 26 86 +rect 4 64 7 71 +rect 27 64 31 79 +rect 3 51 7 57 +rect 3 48 15 51 +rect 11 45 15 48 +rect 27 45 31 60 +rect 3 35 7 38 +rect 19 35 23 38 +rect 0 31 3 35 +rect 7 31 8 35 +rect 12 31 36 35 +rect 0 24 7 28 +rect 11 24 36 28 +rect 0 17 32 21 << m2contact >> -rect 5 190 9 194 -rect 20 188 24 192 -rect 11 156 15 160 -rect 8 117 12 121 -rect 30 81 34 85 -rect 19 63 23 67 -rect 8 30 12 34 -rect 32 16 36 20 -rect 12 9 16 13 +rect 5 191 9 195 +rect 20 189 24 193 +rect 11 157 15 161 +rect 8 118 12 122 +rect 30 82 34 86 +rect 19 64 23 68 +rect 8 31 12 35 +rect 32 17 36 21 +rect 12 10 16 14 << metal2 >> -rect 10 194 14 201 -rect 9 190 14 194 -rect 20 192 24 201 -rect 20 176 24 188 -rect 32 160 36 195 -rect 15 156 36 160 -rect 8 34 12 117 -rect 32 85 36 156 -rect 34 81 36 85 -rect 32 71 36 81 -rect 19 67 36 71 -rect 32 20 36 67 -rect 16 9 20 13 -rect 15 0 19 9 -rect 32 0 36 16 +rect 10 195 14 202 +rect 9 191 14 195 +rect 20 193 24 202 +rect 20 177 24 189 +rect 32 161 36 196 +rect 15 157 36 161 +rect 8 35 12 118 +rect 32 86 36 157 +rect 34 82 36 86 +rect 32 72 36 82 +rect 19 68 36 72 +rect 32 21 36 68 +rect 16 10 20 14 +rect 15 0 19 10 +rect 32 0 36 17 << m3p >> -rect 0 0 34 201 +rect 0 0 34 202 << labels >> -rlabel metal2 20 201 20 201 5 BR -rlabel metal2 10 201 10 201 5 BL -rlabel metal1 0 30 0 30 1 vdd -rlabel metal1 0 23 0 23 3 en -rlabel metal1 0 16 0 16 7 gnd -rlabel metal2 15 0 15 0 1 din +rlabel metal1 0 31 0 31 1 vdd +rlabel metal1 0 17 0 17 7 gnd +rlabel metal2 15 1 15 1 1 din +rlabel metal1 2 25 2 25 3 en +rlabel metal2 12 200 12 200 5 bl +rlabel metal2 22 200 22 200 5 br << end >> diff --git a/technology/scn3me_subm/sp_lib/sense_amp.sp b/technology/scn3me_subm/sp_lib/sense_amp.sp index 2d0ab02a..1399228d 100644 --- a/technology/scn3me_subm/sp_lib/sense_amp.sp +++ b/technology/scn3me_subm/sp_lib/sense_amp.sp @@ -1,12 +1,12 @@ *********************** "sense_amp" ****************************** -.SUBCKT sense_amp bl br dout sclk vdd gnd +.SUBCKT sense_amp bl br dout en vdd gnd M_1 dout net_1 vdd vdd p W='5.4*1u' L=0.6u M_2 dout net_1 net_2 gnd n W='2.7*1u' L=0.6u M_3 net_1 dout vdd vdd p W='5.4*1u' L=0.6u M_4 net_1 dout net_2 gnd n W='2.7*1u' L=0.6u -M_5 bl sclk dout vdd p W='7.2*1u' L=0.6u -M_6 br sclk net_1 vdd p W='7.2*1u' L=0.6u -M_7 net_2 sclk gnd gnd n W='2.7*1u' L=0.6u +M_5 bl en dout vdd p W='7.2*1u' L=0.6u +M_6 br en net_1 vdd p W='7.2*1u' L=0.6u +M_7 net_2 en gnd gnd n W='2.7*1u' L=0.6u .ENDS sense_amp diff --git a/technology/scn3me_subm/sp_lib/write_driver.sp b/technology/scn3me_subm/sp_lib/write_driver.sp index 45fa5097..a203d1ba 100644 --- a/technology/scn3me_subm/sp_lib/write_driver.sp +++ b/technology/scn3me_subm/sp_lib/write_driver.sp @@ -1,14 +1,14 @@ *********************** Write_Driver ****************************** -.SUBCKT write_driver din bl br wen vdd gnd +.SUBCKT write_driver din bl br en vdd gnd **** Inverter to conver Data_in to data_in_bar ****** M_1 net_3 din gnd gnd n W='1.2*1u' L=0.6u M_2 net_3 din vdd vdd p W='2.1*1u' L=0.6u **** 2input nand gate follwed by inverter to drive BL ****** -M_3 net_2 wen net_7 gnd n W='2.1*1u' L=0.6u +M_3 net_2 en net_7 gnd n W='2.1*1u' L=0.6u M_4 net_7 din gnd gnd n W='2.1*1u' L=0.6u -M_5 net_2 wen vdd vdd p W='2.1*1u' L=0.6u +M_5 net_2 en vdd vdd p W='2.1*1u' L=0.6u M_6 net_2 din vdd vdd p W='2.1*1u' L=0.6u @@ -17,8 +17,8 @@ M_8 net_1 net_2 gnd gnd n W='1.2*1u' L=0.6u **** 2input nand gate follwed by inverter to drive BR****** -M_9 net_4 wen vdd vdd p W='2.1*1u' L=0.6u -M_10 net_4 wen net_8 gnd n W='2.1*1u' L=0.6u +M_9 net_4 en vdd vdd p W='2.1*1u' L=0.6u +M_10 net_4 en net_8 gnd n W='2.1*1u' L=0.6u M_11 net_8 net_3 gnd gnd n W='2.1*1u' L=0.6u M_12 net_4 net_3 vdd vdd p W='2.1*1u' L=0.6u @@ -29,7 +29,7 @@ M_14 net_6 net_4 gnd gnd n W='1.2*1u' L=0.6u M_15 bl net_6 net_5 gnd n W='3.6*1u' L=0.6u M_16 br net_1 net_5 gnd n W='3.6*1u' L=0.6u -M_17 net_5 wen gnd gnd n W='3.6*1u' L=0.6u +M_17 net_5 en gnd gnd n W='3.6*1u' L=0.6u diff --git a/technology/scn3me_subm/tech/__init__.py b/technology/scn3me_subm/tech/__init__.py index 798e230d..6b2d03b3 100755 --- a/technology/scn3me_subm/tech/__init__.py +++ b/technology/scn3me_subm/tech/__init__.py @@ -1,9 +1,6 @@ """ -Python GDS Mill Package - -GDS Mill is a Python package for the creation and manipulation of binary GDS2 layout files. +Import tech specific modules. """ from tech import * -from ptx_port import * diff --git a/technology/scn3me_subm/tech/ptx_port.py b/technology/scn3me_subm/tech/ptx_port.py deleted file mode 100755 index a10a18a8..00000000 --- a/technology/scn3me_subm/tech/ptx_port.py +++ /dev/null @@ -1,29 +0,0 @@ -""" -This class should be called in the ptx function to draw addtional layer as some layer may not exist in the cmrf7sf technology -""" -import globals -import design -import tech - - - -class ptx_port: - def __init__(self,name): - self.name=name - self.width=0 - self.height=0 - - - - def draw(self,instance_to_draw,offset,tx_type,height,width,tx=1): - self.height=height - self.width=width - self.offset=offset - if tx_type == "pmos": - # draw BP layer - if tx==1: - instance_to_draw.add_rect(tech.layer["BP"],[offset[0]-tech.drc["BP_enclosure_active"],offset[1]-tech.drc["BP_enclosure_gate"]],width+2*tech.drc["BP_enclosure_active"],height+2*tech.drc["BP_enclosure_gate"]) - else: - instance_to_draw.add_rect(tech.layer["BP"],[offset[0]-tech.drc["BP_enclosure_active"],offset[1]-tech.drc["BP_enclosure_active"]],width+2*tech.drc["BP_enclosure_active"],height+2*tech.drc["BP_enclosure_active"]) - - diff --git a/technology/scn3me_subm/tech/tech.py b/technology/scn3me_subm/tech/tech.py index cfb52dce..b797b81b 100755 --- a/technology/scn3me_subm/tech/tech.py +++ b/technology/scn3me_subm/tech/tech.py @@ -26,14 +26,13 @@ GDS["zoom"] = 0.5 layer={} layer["vtg"] = -1 layer["vth"] = -1 -layer["contact"] = 25 +layer["contact"] = 47 layer["pwell"] = 41 layer["nwell"] = 42 layer["active"] = 43 layer["pimplant"] = 44 layer["nimplant"] = 45 layer["poly"] = 46 -layer["poly_contact"] = 47 layer["active_contact"] = 48 layer["metal1"] = 49 layer["via1"] = 50 @@ -59,7 +58,7 @@ parameter["beta"] = 2 drclvs_home=os.environ.get("DRCLVS_HOME") drc={} -#grid size +#grid size is 1/2 a lambda drc["grid"]=0.15 #DRC/LVS test set_up drc["drc_rules"]=drclvs_home+"/calibreDRC_scn3me_subm.rul" @@ -67,102 +66,121 @@ drc["lvs_rules"]=drclvs_home+"/calibreLVS_scn3me_subm.rul" drc["layer_map"]=os.environ.get("OPENRAM_TECH")+"/scn3me_subm/layers.map" -# minwidth_tx withcontact -drc["minwidth_tx"] = 1.2 -drc["minlength_channel"] = 0.6 +# minwidth_tx with contact (no dog bone transistors) +drc["minwidth_tx"] = 1.2 +drc["minlength_channel"] = 0.6 -#well rules -drc["pwell_to_nwell"] = 0 +# 1.4 Minimum spacing between wells of different type (if both are drawn) +drc["pwell_to_nwell"] = 0 +# 1.1 Minimum width drc["minwidth_well"] = 3.6 - -#poly rules -drc["minwidth_poly"] = 0.6 -drc["minheight_poly"] = 0.0 -drc["poly_to_poly"] = 0.9 -drc["poly_extend_active"] = 0.6 -drc["poly_to_polycontact"] = 1.2 -drc["active_enclosure_gate"] = 0.0 -drc["poly_to_active"] = 0.3 +# 3.1 Minimum width +drc["minwidth_poly"] = 0.6 +# 3.2/3.2.a Minimum spacing over field/active +drc["poly_to_poly"] = 0.9 +# 3.3 Minimum gate extension of active +drc["poly_extend_active"] = 0.6 +# ?? +drc["poly_to_polycontact"] = 1.2 +# ?? +drc["active_enclosure_gate"] = 0.0 +# 3.5 Minimum field poly to active +drc["poly_to_active"] = 0.3 +# Not a rule drc["minarea_poly"] = 0.0 -#active -drc["active_extend_gate"] = 0 -drc["active_to_body_active"] = 1.2 # Fix me -drc["minwidth_active"] = 0.9 -drc["minheight_active"] = 0.9 -drc["minarea_active"] = 0.0 -drc["active_to_active"] = 0.9 +# ?? +drc["active_to_body_active"] = 1.2 # Fix me +# 2.1 Minimum width +drc["minwidth_active"] = 0.9 +# 2.2 Minimum spacing +drc["active_to_active"] = 0.9 +# 2.3 Source/drain active to well edge drc["well_enclosure_active"] = 1.8 +# Reserved for asymmetric enclosures drc["well_extend_active"] = 1.8 +# Not a rule +drc["minarea_active"] = 0.0 -#Implant -drc["implant_to_gate"] = 0 -drc["implant_to_channel"] = 0 +# 4.1 Minimum select spacing to channel of transistor to ensure adequate source/drain width +drc["implant_to_channel"] = 0.9 +# 4.2 Minimum select overlap of active +drc["implant_enclosure_active"] = 0.6 +# 4.3 Minimum select overlap of contact +drc["implant_enclosure_contact"] = 0.3 +# Not a rule drc["implant_to_contact"] = 0 +# Not a rule drc["implant_to_implant"] = 0 +# Not a rule drc["minwidth_implant"] = 0 -#Contact +# 6.1 Exact contact size drc["minwidth_contact"] = 0.6 -drc["minwidth_active_contact"] = 0.6 -drc["minwidth_poly_contact"] = 0.6 - -drc["active_enclosure_contact"] = 0.3 -drc["active_extend_contact"] = 0.3 -drc["poly_enclosure_contact"] = 0.3 -drc["poly_extend_contact"] = 0.3 -drc["contact_to_poly"] = 0.6 - +# 5.3 Minimum contact spacing drc["contact_to_contact"] = 0.9 -drc["active_contact_to_active_contact"] = 0.9 -drc["poly_contact_to_poly_contact"] = 0.9 - +# 6.2.b Minimum active overlap +drc["active_enclosure_contact"] = 0.3 +# Reserved for asymmetric enclosure +drc["active_extend_contact"] = 0.3 +# 5.2.b Minimum poly overlap +drc["poly_enclosure_contact"] = 0.3 +# Reserved for asymmetric enclosures +drc["poly_extend_contact"] = 0.3 +# Reserved for other technologies +drc["contact_to_gate"] = 0.6 +# 5.4 Minimum spacing to gate of transistor +drc["contact_to_poly"] = 0.6 -drc["active_extend_active_contact"] = 0.3 -drc["poly_extend_poly_contact"] = 0.3 -drc["active_enclosure_active_contact"] = 0.3 -drc["poly_enclosure_poly_contact"] = 0.3 - -#Metal1 -drc["minwidth_metal1"] = 0.9 -drc["minheight_metal1"] = 0 -drc["metal1_to_metal1"] = 0.9 -drc["metal1_to_contact"] = 0.9 -drc["metal1_enclosure_contact"] = 0.3 -drc["metal1_extend_contact"] = 0.3 -drc["metal1_extend_via1"] = 0.3 +# 7.1 Minimum width +drc["minwidth_metal1"] = 0.9 +# 7.2 Minimum spacing +drc["metal1_to_metal1"] = 0.9 +# 7.3 Minimum overlap of any contact +drc["metal1_enclosure_contact"] = 0.3 +# Reserved for asymmetric enclosure +drc["metal1_extend_contact"] = 0.3 +# 8.3 Minimum overlap by metal1 drc["metal1_enclosure_via1"] = 0.3 +# Reserve for asymmetric enclosures +drc["metal1_extend_via1"] = 0.3 +# Not a rule drc["minarea_metal1"] = 0 -drc["metal1_enclosure_active_contact"] = 0.3 -drc["metal1_enclosure_poly_contact"] = 0.3 -drc["metal1_extend_active_contact"] = 0.3 -drc["metal1_extend_poly_contact"] = 0.3 -#via1 -drc["minwidth_via1"] = 0.6 -drc["via1_to_via1"] = 0.6 -drc["minselect_overlap_via1"] = 0.3 # Fix me +# 8.1 Exact size +drc["minwidth_via1"] = 0.6 +# 8.2 Minimum via1 spacing +drc["via1_to_via1"] = 0.6 -#Metal2 -drc["minwidth_metal2"] = 0.9 -drc["minheight_metal2"] = 0 -drc["metal2_to_metal2"] = 0.9 -drc["metal2_extend_via1"] = 0.3 +# 9.1 Minimum width +drc["minwidth_metal2"] = 0.9 +# 9.2 Minimum spacing +drc["metal2_to_metal2"] = 0.9 +# 9.3 Minimum overlap of via1 +drc["metal2_extend_via1"] = 0.3 +# Reserved for asymmetric enclosures drc["metal2_enclosure_via1"] = 0.3 +# 14.3 Minimum overlap by metal2 drc["metal2_extend_via2"] = 0.3 +# Reserved for asymmetric enclosures drc["metal2_enclosure_via2"] = 0.3 +# Not a rule drc["minarea_metal2"] = 0 -#Via2 -drc["minwidth_via2"] = 0.6 +# 14.2 Exact size +drc["minwidth_via2"] = 0.6 +# 14.2 Minimum spacing drc["via2_to_via2"] = 0.9 -#Metal3 -drc["minwidth_metal3"] = 1.5 -drc["minheight_metal3"] = 0.0 -drc["metal3_to_metal3"] = 0.9 -drc["metal3_extend_via2"] = 0.6 -drc["metal3_enclosure_via2"] = 0.6 +# 15.1 Minimum width +drc["minwidth_metal3"] = 1.5 +# 15.2 Minimum spacing to metal3 +drc["metal3_to_metal3"] = 0.9 +# 15.3 Minimum overlap of via 2 +drc["metal3_extend_via2"] = 0.6 +# Reserved for asymmetric enclosures +drc["metal3_enclosure_via2"] = 0.6 +# Not a rule drc["minarea_metal3"] = 0 ################################################### diff --git a/technology/setup_scripts/setup_openram_freepdk45.py b/technology/setup_scripts/setup_openram_freepdk45.py index 6c010ae9..93631a92 100644 --- a/technology/setup_scripts/setup_openram_freepdk45.py +++ b/technology/setup_scripts/setup_openram_freepdk45.py @@ -22,10 +22,16 @@ os.environ["MGC_TMPDIR"] = "/tmp" ########################### #OpenRAM Paths -DRCLVS_HOME= PDK_DIR+"/ncsu_basekit/techfile/calibre" +try: + DRCLVS_HOME = os.path.abspath(os.environ.get("DRCLVS_HOME")) +except: + DRCLVS_HOME= PDK_DIR+"/ncsu_basekit/techfile/calibre" os.environ["DRCLVS_HOME"] = DRCLVS_HOME -os.environ["SPICE_MODEL_DIR"] = PDK_DIR+"/ncsu_basekit/models/hspice/tran_models/models_nom" +try: + SPICE_MODEL_DIR = os.path.abspath(os.environ.get("SPICE_MODEL_DIR")) +except: + os.environ["SPICE_MODEL_DIR"] = PDK_DIR+"/ncsu_basekit/models/hspice/tran_models/models_nom" ########################## #Paths required for OPENRAM to function diff --git a/technology/setup_scripts/setup_openram_scn3me_subm.py b/technology/setup_scripts/setup_openram_scn3me_subm.py index da5d1374..fcc69db8 100644 --- a/technology/setup_scripts/setup_openram_scn3me_subm.py +++ b/technology/setup_scripts/setup_openram_scn3me_subm.py @@ -19,10 +19,14 @@ os.environ["MGC_TMPDIR"] = "/tmp" ########################### # OpenRAM Paths -OPENRAM_TECH=os.path.abspath(os.environ.get("OPENRAM_TECH")) -DRCLVS_HOME=OPENRAM_TECH+"/scn3me_subm/tech" + +try: + DRCLVS_HOME = os.path.abspath(os.environ.get("DRCLVS_HOME")) +except: + OPENRAM_TECH=os.path.abspath(os.environ.get("OPENRAM_TECH")) + DRCLVS_HOME=OPENRAM_TECH+"/scn3me_subm/tech" os.environ["DRCLVS_HOME"] = DRCLVS_HOME -# You can override the spice model diretory in the environment + try: SPICE_MODEL_DIR = os.path.abspath(os.environ.get("SPICE_MODEL_DIR")) except: