From a5e881801426f5c4fe03a4bca583a8c80dace685 Mon Sep 17 00:00:00 2001 From: mrg Date: Mon, 12 Oct 2020 09:02:38 -0700 Subject: [PATCH 01/67] OpenRAM v1.1.7 Global and local wordlines. Many updates all around. --- compiler/globals.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/compiler/globals.py b/compiler/globals.py index e1bb8661..2eba68e4 100644 --- a/compiler/globals.py +++ b/compiler/globals.py @@ -19,7 +19,7 @@ import re import copy import importlib -VERSION = "1.1.6" +VERSION = "1.1.7" NAME = "OpenRAM v{}".format(VERSION) USAGE = "openram.py [options] \nUse -h for help.\n" From 3c5e13f95c925a204cabf052525c3de07638168f Mon Sep 17 00:00:00 2001 From: mrg Date: Mon, 12 Oct 2020 09:05:07 -0700 Subject: [PATCH 02/67] Remove symlink --- technology/sky130 | 1 - 1 file changed, 1 deletion(-) delete mode 120000 technology/sky130 diff --git a/technology/sky130 b/technology/sky130 deleted file mode 120000 index 1517fa3f..00000000 --- a/technology/sky130 +++ /dev/null @@ -1 +0,0 @@ -/home/jesse/skywater-tech/sky130/ \ No newline at end of file From dcd29214bc9a36e526c85c365ffedfe094a96672 Mon Sep 17 00:00:00 2001 From: mrg Date: Wed, 21 Oct 2020 17:05:48 -0700 Subject: [PATCH 03/67] Temp fix to use old device names during Calibre LVS. --- compiler/pgates/ptx.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/compiler/pgates/ptx.py b/compiler/pgates/ptx.py index 97041eb5..67368ce9 100644 --- a/compiler/pgates/ptx.py +++ b/compiler/pgates/ptx.py @@ -152,7 +152,11 @@ class ptx(design.design): if OPTS.tech_name == "sky130" and OPTS.lvs_exe and OPTS.lvs_exe[0] == "calibre": # sky130 requires mult parameter too - self.lvs_device = "X{{0}} {{1}} {0} m={1} w={2} l={3} mult={1}".format(spice[self.tx_type], + # self.lvs_device = "X{{0}} {{1}} {0} m={1} w={2} l={3} mult={1}".format(spice[self.tx_type], + # self.mults, + # self.tx_width, + # drc("minwidth_poly")) + self.lvs_device = "M{{0}} {{1}} {0} m={1} w={2} l={3} mult={1}".format("nshort" if self.tx_type == "nmos" else "pshort", self.mults, self.tx_width, drc("minwidth_poly")) From cbf9c4850409a2fab1dbc66ece1078bf2cd8b0ed Mon Sep 17 00:00:00 2001 From: mrg Date: Fri, 23 Oct 2020 09:22:59 -0700 Subject: [PATCH 04/67] Names in skiptests changed. Reduce grid router verbosity. --- compiler/router/pin_group.py | 14 +++++++------- compiler/router/router.py | 20 +++++++++----------- compiler/tests/skip_tests_sky130.txt | 4 ++-- 3 files changed, 18 insertions(+), 20 deletions(-) diff --git a/compiler/router/pin_group.py b/compiler/router/pin_group.py index 8a1362c2..7f30226a 100644 --- a/compiler/router/pin_group.py +++ b/compiler/router/pin_group.py @@ -552,7 +552,7 @@ class pin_group: Add the enclosure shape to the given cell. """ for enclosure in self.enclosures: - debug.info(2, "Adding enclosure {0} {1}".format(self.name, + debug.info(4, "Adding enclosure {0} {1}".format(self.name, enclosure)) cell.add_rect(layer=enclosure.layer, offset=enclosure.ll(), @@ -612,7 +612,7 @@ class pin_group: blockage_set = set() for pin in self.pins: - debug.info(2, " Converting {0}".format(pin)) + debug.info(4, " Converting {0}".format(pin)) # Determine which tracks the pin overlaps (sufficient, insufficient) = self.router.convert_pin_to_tracks(self.name, pin) @@ -628,15 +628,15 @@ class pin_group: # Remember, this excludes the pin blockages already shared_set = pin_set & self.router.blocked_grids if len(shared_set) > 0: - debug.info(2, "Removing pins {}".format(shared_set)) + debug.info(4, "Removing pins {}".format(shared_set)) pin_set.difference_update(shared_set) shared_set = partial_set & self.router.blocked_grids if len(shared_set) > 0: - debug.info(2, "Removing pins {}".format(shared_set)) + debug.info(4, "Removing pins {}".format(shared_set)) partial_set.difference_update(shared_set) shared_set = blockage_set & self.router.blocked_grids if len(shared_set) > 0: - debug.info(2, "Removing blocks {}".format(shared_set)) + debug.info(4, "Removing blocks {}".format(shared_set)) blockage_set.difference_update(shared_set) # At least one of the groups must have some valid tracks @@ -666,5 +666,5 @@ class pin_group: # Remember the secondary grids for removing adjacent pins self.secondary_grids = partial_set - debug.info(2, " pins {}".format(self.grids)) - debug.info(2, " secondary {}".format(self.secondary_grids)) + debug.info(4, " pins {}".format(self.grids)) + debug.info(4, " secondary {}".format(self.secondary_grids)) diff --git a/compiler/router/router.py b/compiler/router/router.py index cacd5117..ba678215 100644 --- a/compiler/router/router.py +++ b/compiler/router/router.py @@ -301,7 +301,6 @@ class router(router_tech): adj_grids)) self.remove_adjacent_grid(pg1, pg2, adj_grids) - debug.info(1, "Removed {} adjacent grids.".format(removed_grids)) def remove_adjacent_grid(self, pg1, pg2, adj_grids): @@ -539,7 +538,7 @@ class router(router_tech): sufficient_list.update([full_overlap]) if partial_overlap: insufficient_list.update([partial_overlap]) - debug.info(2, + debug.info(3, "Converting [ {0} , {1} ] full={2}".format(x, y, full_overlap)) @@ -632,26 +631,26 @@ class router(router_tech): pin.layer) overlap_length = pin.overlap_length(track_pin) - debug.info(2,"Check overlap: {0} {1} . {2} = {3}".format(coord, + debug.info(4,"Check overlap: {0} {1} . {2} = {3}".format(coord, pin.rect, track_pin, overlap_length)) inflated_overlap_length = inflated_pin.overlap_length(track_pin) - debug.info(2,"Check overlap: {0} {1} . {2} = {3}".format(coord, + debug.info(4,"Check overlap: {0} {1} . {2} = {3}".format(coord, inflated_pin.rect, track_pin, inflated_overlap_length)) # If it overlaps with the pin, it is sufficient if overlap_length == math.inf or overlap_length > 0: - debug.info(2," Overlap: {0} >? {1}".format(overlap_length, 0)) + debug.info(4," Overlap: {0} >? {1}".format(overlap_length, 0)) return (coord, None) # If it overlaps with the inflated pin, it is partial elif inflated_overlap_length == math.inf or inflated_overlap_length > 0: - debug.info(2," Partial overlap: {0} >? {1}".format(inflated_overlap_length, 0)) + debug.info(4," Partial overlap: {0} >? {1}".format(inflated_overlap_length, 0)) return (None, coord) else: - debug.info(2, " No overlap: {0} {1}".format(overlap_length, 0)) + debug.info(4, " No overlap: {0} {1}".format(overlap_length, 0)) return (None, None) def convert_track_to_pin(self, track): @@ -846,7 +845,7 @@ class router(router_tech): "Pin component index too large.") pin_in_tracks = self.pin_groups[pin_name][index].grids - debug.info(2,"Set source: " + str(pin_name) + " " + str(pin_in_tracks)) + debug.info(3,"Set source: " + str(pin_name) + " " + str(pin_in_tracks)) self.rg.add_source(pin_in_tracks) def add_path_target(self, paths): @@ -914,7 +913,7 @@ class router(router_tech): """ path = self.prepare_path(path) - debug.info(2, "Adding route: {}".format(str(path))) + debug.info(4, "Adding route: {}".format(str(path))) # If it is only a square, add an enclosure to the track if len(path) == 1: self.add_single_enclosure(path[0][0]) @@ -1007,8 +1006,7 @@ class router(router_tech): # returns the path in tracks (path, cost) = self.rg.route(detour_scale) if path: - debug.info(1, "Found path: cost={0} ".format(cost)) - debug.info(1, str(path)) + debug.info(2, "Found path: cost={0} {1}".format(cost, str(path))) self.paths.append(path) self.add_route(path) diff --git a/compiler/tests/skip_tests_sky130.txt b/compiler/tests/skip_tests_sky130.txt index 68a6549b..827c2cc7 100644 --- a/compiler/tests/skip_tests_sky130.txt +++ b/compiler/tests/skip_tests_sky130.txt @@ -2,7 +2,7 @@ 04_pbitcell_test.py 04_precharge_pbitcell_test.py 04_replica_pbitcell_test.py -04_single_level_column_mux_pbitcell_test.py +04_column_mux_pbitcell_test.py 05_bitcell_1rw_1r_array_test.py 05_bitcell_array_test.py 05_dummy_array_test.py @@ -14,7 +14,7 @@ 06_hierarchical_predecode3x8_pbitcell_test.py 06_hierarchical_predecode3x8_test.py 06_hierarchical_predecode4x16_test.py -07_single_level_column_mux_array_pbitcell_test.py +07_column_mux_array_pbitcell_test.py 08_wordline_driver_array_pbitcell_test.py 08_wordline_driver_array_test.py 09_sense_amp_array_test_pbitcell.py From f97ae723f0275b988992165ea778bd9e4f5188e5 Mon Sep 17 00:00:00 2001 From: mrg Date: Fri, 23 Oct 2020 13:56:27 -0700 Subject: [PATCH 05/67] Remove extraneous config files. --- compiler/example_configs/run1.py | 19 ----------------- compiler/example_configs/run2.py | 19 ----------------- compiler/example_configs/run3.py | 18 ---------------- compiler/example_configs/run4.py | 18 ---------------- compiler/example_configs/run5.py | 19 ----------------- compiler/example_configs/s8config.py | 31 ---------------------------- 6 files changed, 124 deletions(-) delete mode 100644 compiler/example_configs/run1.py delete mode 100644 compiler/example_configs/run2.py delete mode 100644 compiler/example_configs/run3.py delete mode 100644 compiler/example_configs/run4.py delete mode 100644 compiler/example_configs/run5.py delete mode 100644 compiler/example_configs/s8config.py diff --git a/compiler/example_configs/run1.py b/compiler/example_configs/run1.py deleted file mode 100644 index f0b2d753..00000000 --- a/compiler/example_configs/run1.py +++ /dev/null @@ -1,19 +0,0 @@ -word_size = 2 -num_words = 16 - -tech_name = "scn4m_subm" -process_corners = ["TT"] -supply_voltages = [5.0] -temperatures = [25] - -#netlist_only = True -route_supplies = True -check_lvsdrc = True - -output_name = "sram_{0}_{1}_{2}".format(word_size, - num_words, - tech_name) - -drc_name = "magic" -lvs_name = "netgen" -pex_name = "magic" diff --git a/compiler/example_configs/run2.py b/compiler/example_configs/run2.py deleted file mode 100644 index c70009ed..00000000 --- a/compiler/example_configs/run2.py +++ /dev/null @@ -1,19 +0,0 @@ -word_size = 8 -num_words = 128 - -tech_name = "scn4m_subm" -process_corners = ["TT"] -supply_voltages = [5.0] -temperatures = [25] - -route_supplies = True -check_lvsdrc = True - -netlist_only = True -output_name = "sram_{0}_{1}_{2}".format(word_size, - num_words, - tech_name) - -drc_name = "magic" -lvs_name = "netgen" -pex_name = "magic" diff --git a/compiler/example_configs/run3.py b/compiler/example_configs/run3.py deleted file mode 100644 index 9c18c76e..00000000 --- a/compiler/example_configs/run3.py +++ /dev/null @@ -1,18 +0,0 @@ -word_size = 16 -num_words = 256 - -tech_name = "scn4m_subm" -process_corners = ["TT"] -supply_voltages = [5.0] -temperatures = [25] - -route_supplies = True -check_lvsdrc = True -netlist_only = True -output_name = "sram_{0}_{1}_{2}".format(word_size, - num_words, - tech_name) - -drc_name = "magic" -lvs_name = "netgen" -pex_name = "magic" diff --git a/compiler/example_configs/run4.py b/compiler/example_configs/run4.py deleted file mode 100644 index 5b2ba5b4..00000000 --- a/compiler/example_configs/run4.py +++ /dev/null @@ -1,18 +0,0 @@ -word_size = 32 -num_words = 128 - -tech_name = "scn4m_subm" -process_corners = ["TT"] -supply_voltages = [5.0] -temperatures = [25] - -route_supplies = True -check_lvsdrc = True -netlist_only = True -output_name = "sram_{0}_{1}_{2}".format(word_size, - num_words, - tech_name) - -drc_name = "magic" -lvs_name = "netgen" -pex_name = "magic" diff --git a/compiler/example_configs/run5.py b/compiler/example_configs/run5.py deleted file mode 100644 index 49416807..00000000 --- a/compiler/example_configs/run5.py +++ /dev/null @@ -1,19 +0,0 @@ -word_size = 64 -num_words = 128 - -tech_name = "scn4m_subm" -process_corners = ["TT"] -supply_voltages = [5.0] -temperatures = [25] - -route_supplies = True -check_lvsdrc = True - -output_path = "/home/jesse/thesis/outputs/run5" -output_name = "sram_{0}_{1}_{2}".format(word_size, - num_words, - tech_name) - -drc_name = "magic" -lvs_name = "netgen" -pex_name = "magic" diff --git a/compiler/example_configs/s8config.py b/compiler/example_configs/s8config.py deleted file mode 100644 index 7c0de527..00000000 --- a/compiler/example_configs/s8config.py +++ /dev/null @@ -1,31 +0,0 @@ -word_size = 16 -num_words = 16 - -num_rw_ports = 1 -num_r_ports = 1 -num_w_ports = 0 - -tech_name = "sky130" - - - -accuracy_requirement = 0.05 -magic_exe = ("magic", "magic") -nominal_corners_only = False -process_corners = ["TT"] -supply_voltages = [5.0] -temperatures = [25] - -netlist_only = False -route_supplies = "grid" -check_lvsdrc = False - -#replica_bitcell_array = "/home/jesse/openram/technology/sky130/modules/replica_bitcell_array.py" - -output_path = "sram_" + str(accuracy_requirement) -output_name = "sram_{0}_{1}_{2}_{3}".format(word_size, - num_words, - tech_name, - accuracy_requirement - ) -write_size=8 From b4ebbdd5df24f29a06eb2f24f9a298e03a51214e Mon Sep 17 00:00:00 2001 From: mrg Date: Fri, 23 Oct 2020 14:07:26 -0700 Subject: [PATCH 06/67] Require either device models or device library. Remove sky130 flag. --- compiler/characterizer/stimuli.py | 37 +++++++++++++++++++------------ 1 file changed, 23 insertions(+), 14 deletions(-) diff --git a/compiler/characterizer/stimuli.py b/compiler/characterizer/stimuli.py index 469f427a..0c528365 100644 --- a/compiler/characterizer/stimuli.py +++ b/compiler/characterizer/stimuli.py @@ -33,11 +33,22 @@ class stimuli(): self.sf = stim_file (self.process, self.voltage, self.temperature) = corner + found = False + self.device_libraries = [] + self.device_models = [] try: - self.device_libraries = tech.spice["fet_libraries"][self.process] - except: - self.device_models = tech.spice["fet_models"][self.process] - + self.device_libraries += tech.spice["fet_libraries"][self.process] + found = True + except KeyError: + pass + try: + self.device_models += tech.spice["fet_models"][self.process] + found = True + except KeyError: + pass + if not found: + debug.error("Must define either fet_libraries or fet_models.", -1) + def inst_model(self, pins, model_name): """ Function to instantiate a generic model with a set of pins """ @@ -265,16 +276,14 @@ class stimuli(): """Writes include statements, inputs are lists of model files""" self.sf.write("* {} process corner\n".format(self.process)) - if OPTS.tech_name == "sky130": - for item in self.device_libraries: - if os.path.isfile(item[0]): - self.sf.write(".lib \"{0}\" {1}\n".format(item[0], item[1])) - else: - debug.error("Could not find spice library: {0}\nSet SPICE_MODEL_DIR to over-ride path.\n".format(item[0])) - includes = [circuit] - else: - includes = self.device_models + [circuit] - + for item in self.device_libraries: + if os.path.isfile(item[0]): + self.sf.write(".lib \"{0}\" {1}\n".format(item[0], item[1])) + else: + debug.error("Could not find spice library: {0}\nSet SPICE_MODEL_DIR to over-ride path.\n".format(item[0])) + + includes = self.device_models + [circuit] + for item in list(includes): if os.path.isfile(item): self.sf.write(".include \"{0}\"\n".format(item)) From b45a7902c0e1feb96393b52e34c55acb9eb89126 Mon Sep 17 00:00:00 2001 From: mrg Date: Mon, 26 Oct 2020 13:13:38 -0700 Subject: [PATCH 07/67] PEP8 cleanup --- compiler/base/custom_cell_properties.py | 81 ++++++++++++++----------- 1 file changed, 45 insertions(+), 36 deletions(-) diff --git a/compiler/base/custom_cell_properties.py b/compiler/base/custom_cell_properties.py index 25c720ef..8e338548 100644 --- a/compiler/base/custom_cell_properties.py +++ b/compiler/base/custom_cell_properties.py @@ -7,13 +7,15 @@ # from globals import OPTS + class _pins: def __init__(self, pin_dict): # make the pins elements of the class to allow "." access. # For example: props.bitcell.cell_6t.pin.bl = "foobar" - for k,v in pin_dict.items(): + for k, v in pin_dict.items(): self.__dict__[k] = v + class _cell: def __init__(self, pin_dict): pin_dict.update(self._default_power_pins()) @@ -24,13 +26,16 @@ class _cell: return self._pins def _default_power_pins(self): - return { 'vdd' : 'vdd', 'gnd' : 'gnd' } + return {'vdd': 'vdd', + 'gnd': 'gnd'} + class _mirror_axis: def __init__(self, x, y): self.x = x self.y = y + class _bitcell: def __init__(self, mirror, cell_s8_6t, cell_6t, cell_1rw1r, cell_1w1r): self.mirror = mirror @@ -42,27 +47,27 @@ class _bitcell: def _default(): axis = _mirror_axis(True, False) - cell_s8_6t = _cell({'bl' : 'bl', - 'br' : 'br', + cell_s8_6t = _cell({'bl': 'bl', + 'br': 'br', 'wl': 'wl'}) - cell_6t = _cell({'bl' : 'bl', - 'br' : 'br', - 'wl' : 'wl'}) + cell_6t = _cell({'bl': 'bl', + 'br': 'br', + 'wl': 'wl'}) - cell_1rw1r = _cell({'bl0' : 'bl0', - 'br0' : 'br0', - 'bl1' : 'bl1', - 'br1' : 'br1', - 'wl0' : 'wl0', - 'wl1' : 'wl1'}) + cell_1rw1r = _cell({'bl0': 'bl0', + 'br0': 'br0', + 'bl1': 'bl1', + 'br1': 'br1', + 'wl0': 'wl0', + 'wl1': 'wl1'}) - cell_1w1r = _cell({'bl0' : 'bl0', - 'br0' : 'br0', - 'bl1' : 'bl1', - 'br1' : 'br1', - 'wl0' : 'wl0', - 'wl1' : 'wl1'}) + cell_1w1r = _cell({'bl0': 'bl0', + 'br0': 'br0', + 'bl1': 'bl1', + 'br1': 'br1', + 'wl0': 'wl0', + 'wl1': 'wl1'}) return _bitcell(cell_s8_6t=cell_s8_6t, cell_6t=cell_6t, @@ -94,21 +99,25 @@ class _dff: self.custom_type_list = custom_type_list self.clk_pin = clk_pin + class _dff_buff: def __init__(self, use_custom_ports, custom_buff_ports, add_body_contacts): self.use_custom_ports = use_custom_ports self.buf_ports = custom_buff_ports self.add_body_contacts = add_body_contacts + class _dff_buff_array: def __init__(self, use_custom_ports, add_body_contacts): self.use_custom_ports = use_custom_ports self.add_body_contacts = add_body_contacts + class _bitcell_array: def __init__(self, use_custom_cell_arrangement): self.use_custom_cell_arrangement = use_custom_cell_arrangement + class cell_properties(): """ This contains meta information about the custom designed cells. For @@ -120,29 +129,29 @@ class cell_properties(): self._bitcell = _bitcell._default() - self._dff = _dff(use_custom_ports = False, - custom_port_list = ["D", "Q", "clk", "vdd", "gnd"], - custom_type_list = ["INPUT", "OUTPUT", "INPUT", "POWER", "GROUND"], - clk_pin= "clk") + self._dff = _dff(use_custom_ports=False, + custom_port_list=["D", "Q", "clk", "vdd", "gnd"], + custom_type_list=["INPUT", "OUTPUT", "INPUT", "POWER", "GROUND"], + clk_pin="clk") - self._dff_buff = _dff_buff(use_custom_ports = False, - custom_buff_ports = ["D", "qint", "clk", "vdd", "gnd"], - add_body_contacts = False) + self._dff_buff = _dff_buff(use_custom_ports=False, + custom_buff_ports=["D", "qint", "clk", "vdd", "gnd"], + add_body_contacts=False) - self._dff_buff_array = _dff_buff_array(use_custom_ports = False, - add_body_contacts = False) + self._dff_buff_array = _dff_buff_array(use_custom_ports=False, + add_body_contacts=False) self._write_driver = _cell({'din': 'din', - 'bl' : 'bl', - 'br' : 'br', - 'en' : 'en'}) + 'bl': 'bl', + 'br': 'br', + 'en': 'en'}) - self._sense_amp = _cell({'bl' : 'bl', - 'br' : 'br', - 'dout' : 'dout', - 'en' : 'en'}) + self._sense_amp = _cell({'bl': 'bl', + 'br': 'br', + 'dout': 'dout', + 'en': 'en'}) - self._bitcell_array = _bitcell_array(use_custom_cell_arrangement = []) + self._bitcell_array = _bitcell_array(use_custom_cell_arrangement=[]) @property def bitcell(self): From 38ba5fc10dfad151499ced5a0916b81bef3954ae Mon Sep 17 00:00:00 2001 From: mrg Date: Mon, 26 Oct 2020 15:53:22 -0700 Subject: [PATCH 08/67] Use pin of pgate to figure out supply layer. --- compiler/modules/control_logic.py | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/compiler/modules/control_logic.py b/compiler/modules/control_logic.py index e99d7b89..f6a3232d 100644 --- a/compiler/modules/control_logic.py +++ b/compiler/modules/control_logic.py @@ -119,7 +119,7 @@ class control_logic(design.design): # We will use the maximum since this same value is used to size the wl_en # and the p_en_bar drivers - max_fanout = max(self.num_rows, self.num_cols) + # max_fanout = max(self.num_rows, self.num_cols) # wl_en drives every row in the bank self.wl_en_driver = factory.create(module_type="pdriver", @@ -162,6 +162,8 @@ class control_logic(design.design): self.delay_chain=factory.create(module_type="delay_chain", fanout_list = OPTS.delay_chain_stages * [ OPTS.delay_chain_fanout_per_stage ]) self.add_mod(self.delay_chain) + + self.supply_layer = self.inv.get_pin("vdd").layer def get_dynamic_delay_chain_size(self, previous_stages, previous_fanout): """Determine the size of the delay chain used for the Sense Amp Enable using path delays""" @@ -721,27 +723,23 @@ class control_logic(design.design): def route_supply(self): """ Add vdd and gnd to the instance cells """ - if OPTS.tech_name == "sky130": - supply_layer = "li" - else: - supply_layer = "m1" max_row_x_loc = max([inst.rx() for inst in self.row_end_inst]) for inst in self.row_end_inst: pins = inst.get_pins("vdd") for pin in pins: - if pin.layer == supply_layer: + if pin.layer == self.supply_layer: row_loc = pin.rc() pin_loc = vector(max_row_x_loc, pin.rc().y) self.add_power_pin("vdd", pin_loc, start_layer=pin.layer) - self.add_path(supply_layer, [row_loc, pin_loc]) + self.add_path(self.supply_layer, [row_loc, pin_loc]) pins = inst.get_pins("gnd") for pin in pins: - if pin.layer == supply_layer: + if pin.layer == self.supply_layer: row_loc = pin.rc() pin_loc = vector(max_row_x_loc, pin.rc().y) self.add_power_pin("gnd", pin_loc, start_layer=pin.layer) - self.add_path(supply_layer, [row_loc, pin_loc]) + self.add_path(self.supply_layer, [row_loc, pin_loc]) self.copy_layout_pin(self.delay_inst, "gnd") self.copy_layout_pin(self.delay_inst, "vdd") From dc991cbcab2dca6a3bf5eaec61ccc3650006051b Mon Sep 17 00:00:00 2001 From: mrg Date: Mon, 26 Oct 2020 15:54:16 -0700 Subject: [PATCH 09/67] Use pin of pgate to figure out supply layer. --- compiler/modules/control_logic.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/compiler/modules/control_logic.py b/compiler/modules/control_logic.py index f6a3232d..5b0b4a53 100644 --- a/compiler/modules/control_logic.py +++ b/compiler/modules/control_logic.py @@ -163,7 +163,7 @@ class control_logic(design.design): fanout_list = OPTS.delay_chain_stages * [ OPTS.delay_chain_fanout_per_stage ]) self.add_mod(self.delay_chain) - self.supply_layer = self.inv.get_pin("vdd").layer + self.supply_layer = dff.get_pin("vdd").layer def get_dynamic_delay_chain_size(self, previous_stages, previous_fanout): """Determine the size of the delay chain used for the Sense Amp Enable using path delays""" From f23fe078939a7bd5e7a33f311a48f5540f6bea46 Mon Sep 17 00:00:00 2001 From: mrg Date: Mon, 26 Oct 2020 16:37:00 -0700 Subject: [PATCH 10/67] Add custom layers without defaults --- compiler/base/custom_layer_properties.py | 161 +++++++++++++++++++++++ 1 file changed, 161 insertions(+) create mode 100644 compiler/base/custom_layer_properties.py diff --git a/compiler/base/custom_layer_properties.py b/compiler/base/custom_layer_properties.py new file mode 100644 index 00000000..f1d35e71 --- /dev/null +++ b/compiler/base/custom_layer_properties.py @@ -0,0 +1,161 @@ +# See LICENSE for licensing information. +# +# Copyright (c) 2016-2020 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) +# All rights reserved. +# +from design import design + + +class _bank: + def __init__(self, stack, pitch): + # bank + # column address route: stack, pitch + # m1_stack, m2_pitch (default) + # m2_stack, m3_pitch (sky130) + self.stack = stack + self.pitch = pitch + + +class _hierarchical_decoder: + def __init__(self, + bus_layer, + bus_directions, + bus_pitch, + bus_space, + input_layer, + output_layer, + output_layer_pitch, + vertical_supply): + # hierarchical_decoder + # bus_layer, bus_directions, bus_pitch, bus_space, input_layer, output_layer, output_layer_pitch + # m2, pref, m2_pitch, m2_space, m1, m3, m3_pitch + # m1, nonpref, m1_pitch, m2_space, m2, li, li_pitch (sky130) + # + # vertical vdd/gnd + # special jog + + # hierarchical_predecode + # bus_layer, bus_directions, bus_pitch, bus_space, input_layer, output_layer, output_layer_pitch + # m2, pref, m2_pitch, m2_space, m1, m1, m1_pitch + # m1, nonpref, m1_pitch, 1`.5*m1_space, m2, li, li_pitch (sky130) + # + # vertical vdd/gnd + # special jogging + self.bus_layer = bus_layer + self.bus_directinos = bus_directions + self.bus_pitch = bus_pitch + self.bus_sapce = bus_space + self.input_layer = input_layer + self.output_layer = output_layer + self.vertical_supply = vertical_supply + + +class _column_mux_array: + def __init__(self, + select_layer, + select_pitch, + bitline_layer): + # column_mux_array + # sel_layer, sel_pitch, bitline_layer + # m1, m2_pitch, m2 + # m3, m3_pitch, m1 (sky130) + self.select_layer = select_layer + self.select_pitch= select_pitch + self.bitline_layer = bitline_layer + + +class _port_address: + def __init__(self, + supply_offset): + # port_adress + # special supply offset + self.supply_offset = supply_offset + + +class _port_data: + def __init__(self, + enable_layer): + # port_data + # connect bitlines instead of chanel route + + # sense_amp_array + # en_layer + # m1 + # m3 (sky130) + + # precharge_array + # en_bar_layer + # m1 + # m3 (sky130) + self.enable_layer = enable_layer + + +class _replica_column: + def __init__(self, + even_rows): + # replica_column + # even row check (sky130) + self.even_rows = even_rows + + +class _wordline_buffer_array: + def __init__(self, + vertical_supply): + # wordline_buffer_array + # vertical vdd/gnd (sky130) + self.vertical_supply = vertical_supply + + +class _wordline_driver_array: + def __init__(self, + vertical_supply): + # wordline_driver_array + # vertical vdd/gnd (sky130) + self.vertical_supply = vertical_supply + + +class layer_properties(): + """ + This contains meta information about the module routing layers. These + can be overriden in the tech.py file. + """ + def __init__(self): + self.names = {} + + self._bank = _bank(stack=design.m1_stack, + pitch=design.m2_pitch) + + @property + def bank(self): + return self._bank + + @property + def column_mux_array(self): + return self._column_mux_array + + @property + def hierarchical_decoder(self): + return self._hierarcical_decoder + + @property + def port_address(self): + return self._port_address + + @property + def port_data(self): + return self._port_data + + @property + def replica_column(self): + return self._replica_column + + @property + def wordline_buffer_array(self): + return self._wordline_buffer_array + + @property + def wordline_driver_array(self): + return self._wordline_driver_array + From 07ef43eaf809e24bd8f6d9f1d757ce1a97b3168c Mon Sep 17 00:00:00 2001 From: mrg Date: Tue, 27 Oct 2020 09:23:11 -0700 Subject: [PATCH 11/67] Convert design class data to static --- compiler/base/design.py | 259 ++++++++++++++++-------------- compiler/base/hierarchy_layout.py | 5 - compiler/bitcells/bitcell.py | 2 +- 3 files changed, 136 insertions(+), 130 deletions(-) diff --git a/compiler/base/design.py b/compiler/base/design.py index 96e5f26b..518938a6 100644 --- a/compiler/base/design.py +++ b/compiler/base/design.py @@ -8,6 +8,7 @@ from hierarchy_design import hierarchy_design from utils import round_to_grid import contact +from tech import preferred_directions from globals import OPTS import re @@ -18,21 +19,108 @@ class design(hierarchy_design): some DRC/layer constants and analytical models for other modules to reuse. """ - + def __init__(self, name): super().__init__(name) - - self.setup_drc_constants() - self.setup_layer_constants() - self.setup_multiport_constants() def check_pins(self): for pin_name in self.pins: pins = self.get_pins(pin_name) for pin in pins: print(pin_name, pin) + + @classmethod + def setup_drc_constants(design): + """ + These are some DRC constants used in many places + in the compiler. + """ + # Make some local rules for convenience + from tech import drc + for rule in drc.keys(): + # Single layer width rules + match = re.search(r"minwidth_(.*)", rule) + if match: + if match.group(1) == "active_contact": + setattr(design, "contact_width", drc(match.group(0))) + else: + setattr(design, match.group(1) + "_width", drc(match.group(0))) + + # Single layer area rules + match = re.search(r"minarea_(.*)", rule) + if match: + setattr(design, match.group(0), drc(match.group(0))) + + # Single layer spacing rules + match = re.search(r"(.*)_to_(.*)", rule) + if match and match.group(1) == match.group(2): + setattr(design, match.group(1) + "_space", drc(match.group(0))) + elif match and match.group(1) != match.group(2): + if match.group(2) == "poly_active": + setattr(design, match.group(1) + "_to_contact", + drc(match.group(0))) + else: + setattr(design, match.group(0), drc(match.group(0))) + + match = re.search(r"(.*)_enclose_(.*)", rule) + if match: + setattr(design, match.group(0), drc(match.group(0))) + + match = re.search(r"(.*)_extend_(.*)", rule) + if match: + setattr(design, match.group(0), drc(match.group(0))) + + # Create the maximum well extend active that gets used + # by cells to extend the wells for interaction with other cells + from tech import layer + design.well_extend_active = 0 + if "nwell" in layer: + design.well_extend_active = max(design.well_extend_active, design.nwell_extend_active) + if "pwell" in layer: + design.well_extend_active = max(design.well_extend_active, design.pwell_extend_active) + + # The active offset is due to the well extension + if "pwell" in layer: + design.pwell_enclose_active = drc("pwell_enclose_active") + else: + design.pwell_enclose_active = 0 + if "nwell" in layer: + design.nwell_enclose_active = drc("nwell_enclose_active") + else: + design.nwell_enclose_active = 0 + # Use the max of either so that the poly gates will align properly + design.well_enclose_active = max(design.pwell_enclose_active, + design.nwell_enclose_active, + design.active_space) - def setup_layer_constants(self): + # These are for debugging previous manual rules + if False: + print("poly_width", design.poly_width) + print("poly_space", design.poly_space) + print("m1_width", design.m1_width) + print("m1_space", design.m1_space) + print("m2_width", design.m2_width) + print("m2_space", design.m2_space) + print("m3_width", design.m3_width) + print("m3_space", design.m3_space) + print("m4_width", design.m4_width) + print("m4_space", design.m4_space) + print("active_width", design.active_width) + print("active_space", design.active_space) + print("contact_width", design.contact_width) + print("poly_to_active", design.poly_to_active) + print("poly_extend_active", design.poly_extend_active) + print("poly_to_contact", design.poly_to_contact) + print("active_contact_to_gate", design.active_contact_to_gate) + print("poly_contact_to_gate", design.poly_contact_to_gate) + print("well_enclose_active", design.well_enclose_active) + print("implant_enclose_active", design.implant_enclose_active) + print("implant_space", design.implant_space) + import sys + sys.exit(1) + + @classmethod + def setup_layer_constants(design): """ These are some layer constants used in many places in the compiler. @@ -46,7 +134,7 @@ class design(hierarchy_design): # Set the stack as a local helper try: layer_stack = getattr(tech, key) - setattr(self, key, layer_stack) + setattr(design, key, layer_stack) except AttributeError: pass @@ -55,14 +143,14 @@ class design(hierarchy_design): continue # Add the pitch - setattr(self, + setattr(design, "{}_pitch".format(layer), - self.compute_pitch(layer, True)) + design.compute_pitch(layer, True)) # Add the non-preferrd pitch (which has vias in the "wrong" way) - setattr(self, + setattr(design, "{}_nonpref_pitch".format(layer), - self.compute_pitch(layer, False)) + design.compute_pitch(layer, False)) if False: from tech import preferred_directions @@ -73,17 +161,18 @@ class design(hierarchy_design): continue try: print("{0} width {1} space {2}".format(name, - getattr(self, "{}_width".format(name)), - getattr(self, "{}_space".format(name)))) + getattr(design, "{}_width".format(name)), + getattr(design, "{}_space".format(name)))) - print("pitch {0} nonpref {1}".format(getattr(self, "{}_pitch".format(name)), - getattr(self, "{}_nonpref_pitch".format(name)))) + print("pitch {0} nonpref {1}".format(getattr(design, "{}_pitch".format(name)), + getattr(design, "{}_nonpref_pitch".format(name)))) except AttributeError: pass import sys sys.exit(1) - def compute_pitch(self, layer, preferred=True): + @staticmethod + def compute_pitch(layer, preferred=True): """ This is the preferred direction pitch @@ -95,13 +184,18 @@ class design(hierarchy_design): for stack in layer_stacks: # Compute the pitch with both vias above and below (if they exist) if stack[0] == layer: - pitches.append(self.compute_layer_pitch(stack, preferred)) + pitches.append(design.compute_layer_pitch(stack, preferred)) if stack[2] == layer: - pitches.append(self.compute_layer_pitch(stack[::-1], True)) + pitches.append(design.compute_layer_pitch(stack[::-1], True)) return max(pitches) - def compute_layer_pitch(self, layer_stack, preferred): + @staticmethod + def get_preferred_direction(layer): + return preferred_directions[layer] + + @staticmethod + def compute_layer_pitch(layer_stack, preferred): (layer1, via, layer2) = layer_stack try: @@ -113,113 +207,26 @@ class design(hierarchy_design): contact1 = getattr(contact, layer2 + "_via") if preferred: - if self.get_preferred_direction(layer1) == "V": + if preferred_directions[layer1] == "V": contact_width = contact1.first_layer_width else: contact_width = contact1.first_layer_height else: - if self.get_preferred_direction(layer1) == "V": + if preferred_directions[layer1] == "V": contact_width = contact1.first_layer_height else: contact_width = contact1.first_layer_width - layer_space = getattr(self, layer1 + "_space") + layer_space = getattr(design, layer1 + "_space") #print(layer_stack) #print(contact1) pitch = contact_width + layer_space return round_to_grid(pitch) - - def setup_drc_constants(self): - """ - These are some DRC constants used in many places - in the compiler. - """ - # Make some local rules for convenience - from tech import drc - for rule in drc.keys(): - # Single layer width rules - match = re.search(r"minwidth_(.*)", rule) - if match: - if match.group(1) == "active_contact": - setattr(self, "contact_width", drc(match.group(0))) - else: - setattr(self, match.group(1) + "_width", drc(match.group(0))) - # Single layer area rules - match = re.search(r"minarea_(.*)", rule) - if match: - setattr(self, match.group(0), drc(match.group(0))) - - # Single layer spacing rules - match = re.search(r"(.*)_to_(.*)", rule) - if match and match.group(1) == match.group(2): - setattr(self, match.group(1) + "_space", drc(match.group(0))) - elif match and match.group(1) != match.group(2): - if match.group(2) == "poly_active": - setattr(self, match.group(1) + "_to_contact", - drc(match.group(0))) - else: - setattr(self, match.group(0), drc(match.group(0))) - - match = re.search(r"(.*)_enclose_(.*)", rule) - if match: - setattr(self, match.group(0), drc(match.group(0))) - match = re.search(r"(.*)_extend_(.*)", rule) - if match: - setattr(self, match.group(0), drc(match.group(0))) - - # Create the maximum well extend active that gets used - # by cells to extend the wells for interaction with other cells - from tech import layer - self.well_extend_active = 0 - if "nwell" in layer: - self.well_extend_active = max(self.well_extend_active, self.nwell_extend_active) - if "pwell" in layer: - self.well_extend_active = max(self.well_extend_active, self.pwell_extend_active) - - # The active offset is due to the well extension - if "pwell" in layer: - self.pwell_enclose_active = drc("pwell_enclose_active") - else: - self.pwell_enclose_active = 0 - if "nwell" in layer: - self.nwell_enclose_active = drc("nwell_enclose_active") - else: - self.nwell_enclose_active = 0 - # Use the max of either so that the poly gates will align properly - self.well_enclose_active = max(self.pwell_enclose_active, - self.nwell_enclose_active, - self.active_space) - - # These are for debugging previous manual rules - if False: - print("poly_width", self.poly_width) - print("poly_space", self.poly_space) - print("m1_width", self.m1_width) - print("m1_space", self.m1_space) - print("m2_width", self.m2_width) - print("m2_space", self.m2_space) - print("m3_width", self.m3_width) - print("m3_space", self.m3_space) - print("m4_width", self.m4_width) - print("m4_space", self.m4_space) - print("active_width", self.active_width) - print("active_space", self.active_space) - print("contact_width", self.contact_width) - print("poly_to_active", self.poly_to_active) - print("poly_extend_active", self.poly_extend_active) - print("poly_to_contact", self.poly_to_contact) - print("active_contact_to_gate", self.active_contact_to_gate) - print("poly_contact_to_gate", self.poly_contact_to_gate) - print("well_enclose_active", self.well_enclose_active) - print("implant_enclose_active", self.implant_enclose_active) - print("implant_space", self.implant_space) - import sys - sys.exit(1) - - def setup_multiport_constants(self): + @classmethod + def setup_multiport_constants(design): """ These are contants and lists that aid multiport design. Ports are always in the order RW, W, R. @@ -231,32 +238,32 @@ class design(hierarchy_design): total_ports = OPTS.num_rw_ports + OPTS.num_w_ports + OPTS.num_r_ports # These are the read/write port indices. - self.readwrite_ports = [] + design.readwrite_ports = [] # These are the read/write and write-only port indices - self.write_ports = [] + design.write_ports = [] # These are the write-only port indices. - self.writeonly_ports = [] + design.writeonly_ports = [] # These are the read/write and read-only port indices - self.read_ports = [] + design.read_ports = [] # These are the read-only port indices. - self.readonly_ports = [] + design.readonly_ports = [] # These are all the ports - self.all_ports = list(range(total_ports)) + design.all_ports = list(range(total_ports)) # The order is always fixed as RW, W, R port_number = 0 for port in range(OPTS.num_rw_ports): - self.readwrite_ports.append(port_number) - self.write_ports.append(port_number) - self.read_ports.append(port_number) + design.readwrite_ports.append(port_number) + design.write_ports.append(port_number) + design.read_ports.append(port_number) port_number += 1 for port in range(OPTS.num_w_ports): - self.write_ports.append(port_number) - self.writeonly_ports.append(port_number) + design.write_ports.append(port_number) + design.writeonly_ports.append(port_number) port_number += 1 for port in range(OPTS.num_r_ports): - self.read_ports.append(port_number) - self.readonly_ports.append(port_number) + design.read_ports.append(port_number) + design.readonly_ports.append(port_number) port_number += 1 def analytical_power(self, corner, load): @@ -266,3 +273,7 @@ class design(hierarchy_design): total_module_power += inst.mod.analytical_power(corner, load) return total_module_power +design.setup_drc_constants() +design.setup_layer_constants() +design.setup_multiport_constants() + diff --git a/compiler/base/hierarchy_layout.py b/compiler/base/hierarchy_layout.py index e4830226..7fe838cb 100644 --- a/compiler/base/hierarchy_layout.py +++ b/compiler/base/hierarchy_layout.py @@ -13,7 +13,6 @@ from tech import drc, GDS from tech import layer as techlayer from tech import layer_indices from tech import layer_stacks -from tech import preferred_directions import os from globals import OPTS from vector import vector @@ -537,10 +536,6 @@ class layout(): position_list=coordinates, widen_short_wires=widen_short_wires) - def get_preferred_direction(self, layer): - """ Return the preferred routing directions """ - return preferred_directions[layer] - def add_via(self, layers, offset, size=[1, 1], directions=None, implant_type=None, well_type=None): """ Add a three layer via structure. """ from sram_factory import factory diff --git a/compiler/bitcells/bitcell.py b/compiler/bitcells/bitcell.py index 5694a64d..7f0acc4b 100644 --- a/compiler/bitcells/bitcell.py +++ b/compiler/bitcells/bitcell.py @@ -10,7 +10,7 @@ import utils from tech import GDS, layer from tech import cell_properties as props import bitcell_base -from globals import OPTS + class bitcell(bitcell_base.bitcell_base): """ From 575f504e4b17e6d1c195e83e9824a7a7362d2cab Mon Sep 17 00:00:00 2001 From: mrg Date: Tue, 27 Oct 2020 09:26:40 -0700 Subject: [PATCH 12/67] Remove static method call --- compiler/base/contact.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/compiler/base/contact.py b/compiler/base/contact.py index 16c671d4..60d3c840 100644 --- a/compiler/base/contact.py +++ b/compiler/base/contact.py @@ -51,8 +51,8 @@ class contact(hierarchy_design.hierarchy_design): # Non-preferred directions if directions == "nonpref": - first_dir = "H" if self.get_preferred_direction(layer_stack[0])=="V" else "V" - second_dir = "H" if self.get_preferred_direction(layer_stack[2])=="V" else "V" + first_dir = "H" if tech.preferred_directions[layer_stack[0]]=="V" else "V" + second_dir = "H" if tech.preferred_directions[layer_stack[2]]=="V" else "V" self.directions = (first_dir, second_dir) # Preferred directions elif directions == "pref": From 5bff641c0addfd299640b5d30424f5d23fac9352 Mon Sep 17 00:00:00 2001 From: mrg Date: Tue, 27 Oct 2020 09:28:21 -0700 Subject: [PATCH 13/67] Multiport constants can't be static --- compiler/base/design.py | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/compiler/base/design.py b/compiler/base/design.py index 518938a6..90364658 100644 --- a/compiler/base/design.py +++ b/compiler/base/design.py @@ -23,6 +23,8 @@ class design(hierarchy_design): def __init__(self, name): super().__init__(name) + self.setup_multiport_constants() + def check_pins(self): for pin_name in self.pins: pins = self.get_pins(pin_name) @@ -225,8 +227,7 @@ class design(hierarchy_design): return round_to_grid(pitch) - @classmethod - def setup_multiport_constants(design): + def setup_multiport_constants(self): """ These are contants and lists that aid multiport design. Ports are always in the order RW, W, R. @@ -238,32 +239,32 @@ class design(hierarchy_design): total_ports = OPTS.num_rw_ports + OPTS.num_w_ports + OPTS.num_r_ports # These are the read/write port indices. - design.readwrite_ports = [] + self.readwrite_ports = [] # These are the read/write and write-only port indices - design.write_ports = [] + self.write_ports = [] # These are the write-only port indices. - design.writeonly_ports = [] + self.writeonly_ports = [] # These are the read/write and read-only port indices - design.read_ports = [] + self.read_ports = [] # These are the read-only port indices. - design.readonly_ports = [] + self.readonly_ports = [] # These are all the ports - design.all_ports = list(range(total_ports)) + self.all_ports = list(range(total_ports)) # The order is always fixed as RW, W, R port_number = 0 for port in range(OPTS.num_rw_ports): - design.readwrite_ports.append(port_number) - design.write_ports.append(port_number) - design.read_ports.append(port_number) + self.readwrite_ports.append(port_number) + self.write_ports.append(port_number) + self.read_ports.append(port_number) port_number += 1 for port in range(OPTS.num_w_ports): - design.write_ports.append(port_number) - design.writeonly_ports.append(port_number) + self.write_ports.append(port_number) + self.writeonly_ports.append(port_number) port_number += 1 for port in range(OPTS.num_r_ports): - design.read_ports.append(port_number) - design.readonly_ports.append(port_number) + self.read_ports.append(port_number) + self.readonly_ports.append(port_number) port_number += 1 def analytical_power(self, corner, load): @@ -275,5 +276,4 @@ class design(hierarchy_design): design.setup_drc_constants() design.setup_layer_constants() -design.setup_multiport_constants() From 611a4155b9bdcc56a0ef421c5a5aabd9ac8ecb6d Mon Sep 17 00:00:00 2001 From: mrg Date: Tue, 27 Oct 2020 15:11:04 -0700 Subject: [PATCH 14/67] Add initial custom layer properties. --- compiler/base/custom_layer_properties.py | 74 +++++++++++++++++----- compiler/modules/bank.py | 12 ++-- compiler/modules/column_mux_array.py | 25 +++++--- compiler/modules/hierarchical_decoder.py | 35 ++++------ compiler/modules/hierarchical_predecode.py | 38 +++++------ compiler/modules/port_address.py | 3 +- compiler/modules/port_data.py | 32 +++++----- compiler/modules/replica_column.py | 3 +- compiler/modules/wordline_buffer_array.py | 5 +- compiler/modules/wordline_driver_array.py | 3 +- compiler/pgates/pnor2.py | 1 - technology/freepdk45/tech/tech.py | 6 ++ technology/scn4m_subm/tech/tech.py | 6 ++ 13 files changed, 142 insertions(+), 101 deletions(-) diff --git a/compiler/base/custom_layer_properties.py b/compiler/base/custom_layer_properties.py index f1d35e71..c2dcae88 100644 --- a/compiler/base/custom_layer_properties.py +++ b/compiler/base/custom_layer_properties.py @@ -5,9 +5,8 @@ # (acting for and on behalf of Oklahoma State University) # All rights reserved. # -from design import design - + class _bank: def __init__(self, stack, pitch): # bank @@ -17,25 +16,36 @@ class _bank: self.stack = stack self.pitch = pitch - + class _hierarchical_decoder: def __init__(self, bus_layer, bus_directions, - bus_pitch, - bus_space, input_layer, output_layer, - output_layer_pitch, vertical_supply): # hierarchical_decoder # bus_layer, bus_directions, bus_pitch, bus_space, input_layer, output_layer, output_layer_pitch # m2, pref, m2_pitch, m2_space, m1, m3, m3_pitch # m1, nonpref, m1_pitch, m2_space, m2, li, li_pitch (sky130) - # + # # vertical vdd/gnd - # special jog + # special jogging + self.bus_layer = bus_layer + self.bus_directions = bus_directions + self.input_layer = input_layer + self.output_layer = output_layer + self.vertical_supply = vertical_supply + +class _hierarchical_predecode: + def __init__(self, + bus_layer, + bus_directions, + bus_space_factor, + input_layer, + output_layer, + vertical_supply): # hierarchical_predecode # bus_layer, bus_directions, bus_pitch, bus_space, input_layer, output_layer, output_layer_pitch # m2, pref, m2_pitch, m2_space, m1, m1, m1_pitch @@ -44,9 +54,8 @@ class _hierarchical_decoder: # vertical vdd/gnd # special jogging self.bus_layer = bus_layer - self.bus_directinos = bus_directions - self.bus_pitch = bus_pitch - self.bus_sapce = bus_space + self.bus_directions = bus_directions + self.bus_space_factor = bus_space_factor self.input_layer = input_layer self.output_layer = output_layer self.vertical_supply = vertical_supply @@ -76,6 +85,7 @@ class _port_address: class _port_data: def __init__(self, + channel_route_bitlines, enable_layer): # port_data # connect bitlines instead of chanel route @@ -89,6 +99,7 @@ class _port_data: # en_bar_layer # m1 # m3 (sky130) + self.channel_route_bitlines = channel_route_bitlines self.enable_layer = enable_layer @@ -98,7 +109,7 @@ class _replica_column: # replica_column # even row check (sky130) self.even_rows = even_rows - + class _wordline_buffer_array: def __init__(self, @@ -122,10 +133,37 @@ class layer_properties(): can be overriden in the tech.py file. """ def __init__(self): - self.names = {} + + self._bank = _bank(stack="m1_stack", + pitch="m2_pitch") - self._bank = _bank(stack=design.m1_stack, - pitch=design.m2_pitch) + self._hierarchical_decoder = _hierarchical_decoder(bus_layer="m2", + bus_directions="pref", + input_layer="m1", + output_layer="m3", + vertical_supply=False) + + self._hierarchical_predecode = _hierarchical_predecode(bus_layer="m2", + bus_directions="pref", + bus_space_factor=1, + input_layer="m1", + output_layer="m1", + vertical_supply=False) + + self._column_mux_array = _column_mux_array(select_layer="m1", + select_pitch="m2_pitch", + bitline_layer="m2") + + self._port_address = _port_address(supply_offset=False) + + self._port_data = _port_data(channel_route_bitlines=False, + enable_layer="m1") + + self._replica_column = _replica_column(even_rows=False) + + self._wordline_buffer_array = _wordline_buffer_array(vertical_supply=False) + + self._wordline_driver_array = _wordline_driver_array(vertical_supply=False) @property def bank(self): @@ -137,8 +175,12 @@ class layer_properties(): @property def hierarchical_decoder(self): - return self._hierarcical_decoder + return self._hierarchical_decoder + @property + def hierarchical_predecode(self): + return self._hierarchical_predecode + @property def port_address(self): return self._port_address diff --git a/compiler/modules/bank.py b/compiler/modules/bank.py index a1c6c251..335ee2b2 100644 --- a/compiler/modules/bank.py +++ b/compiler/modules/bank.py @@ -9,9 +9,10 @@ import debug import design from sram_factory import factory from math import log, ceil, floor -from tech import drc, layer +from tech import drc from vector import vector from globals import OPTS +from tech import layer_properties as layer_props class bank(design.design): @@ -906,18 +907,13 @@ class bank(design.design): offset=mid2) self.add_path(bitcell_wl_pin.layer, [mid2, bitcell_wl_pos]) - def route_column_address_lines(self, port): """ Connecting the select lines of column mux to the address bus """ if not self.col_addr_size>0: return - if OPTS.tech_name == "sky130": - stack = self.m2_stack - pitch = self.m3_pitch - else: - stack = self.m1_stack - pitch = self.m2_pitch + stack = layer_props.bank.stack + pitch = layer_props.bank.pitch if self.col_addr_size == 1: diff --git a/compiler/modules/column_mux_array.py b/compiler/modules/column_mux_array.py index 87e750cf..61c71672 100644 --- a/compiler/modules/column_mux_array.py +++ b/compiler/modules/column_mux_array.py @@ -11,7 +11,8 @@ from tech import layer, preferred_directions from vector import vector from sram_factory import factory from globals import OPTS -from tech import cell_properties +from tech import cell_properties as cell_props +from tech import layer_properties as layer_props class column_mux_array(design.design): @@ -33,14 +34,18 @@ class column_mux_array(design.design): self.bitcell_br = bitcell_br self.column_offset = column_offset - if OPTS.tech_name == "sky130": - self.sel_layer = "m3" - self.sel_pitch = self.m3_pitch - self.bitline_layer = "m1" - else: - self.sel_layer = "m1" - self.sel_pitch = self.m2_pitch - self.bitline_layer = "m2" + self.sel_layer = layer_props.column_mux_array.select_layer + self.sel_pitch = getattr(self, layer_props.column_mux_array.select_pitch) + self.bitline_layer = layer_props.column_mux_array.bitline_layer + + # if OPTS.tech_name == "sky130": + # self.sel_layer = "m3" + # self.sel_pitch = self.m3_pitch + # self.bitline_layer = "m1" + # else: + # self.sel_layer = "m1" + # self.sel_pitch = self.m2_pitch + # self.bitline_layer = "m2" if preferred_directions[self.sel_layer] == "V": self.via_directions = ("H", "H") @@ -123,7 +128,7 @@ class column_mux_array(design.design): # For every column, add a pass gate for col_num, xoffset in enumerate(self.offsets[0:self.columns]): - if cell_properties.bitcell.mirror.y and (col_num + self.column_offset) % 2: + if cell_props.bitcell.mirror.y and (col_num + self.column_offset) % 2: mirror = "MY" xoffset = xoffset + self.mux.width else: diff --git a/compiler/modules/hierarchical_decoder.py b/compiler/modules/hierarchical_decoder.py index f022a048..a5a63fc8 100644 --- a/compiler/modules/hierarchical_decoder.py +++ b/compiler/modules/hierarchical_decoder.py @@ -11,6 +11,7 @@ import math from sram_factory import factory from vector import vector from globals import OPTS +from tech import layer_properties as layer_props class hierarchical_decoder(design.design): @@ -181,25 +182,15 @@ class hierarchical_decoder(design.design): # Inputs to cells are on input layer # Outputs from cells are on output layer - if OPTS.tech_name == "sky130": - self.bus_layer = "m1" - self.bus_directions = "nonpref" - self.bus_pitch = self.m1_pitch - self.bus_space = self.m2_space - self.input_layer = "m2" - self.output_layer = "li" - self.output_layer_pitch = self.li_pitch - else: - self.bus_layer = "m2" - self.bus_directions = "pref" - self.bus_pitch = self.m2_pitch - self.bus_space = self.m2_space - # These two layers being the same requires a special jog - # to ensure to conflicts with the output layers - self.input_layer = "m1" - self.output_layer = "m3" - self.output_layer_pitch = self.m3_pitch + self.bus_layer = layer_props.hierarchical_decoder.bus_layer + self.bus_directions = layer_props.hierarchical_decoder.bus_directions + self.bus_pitch = getattr(self, self.bus_layer + "_pitch") + self.bus_space = getattr(self, self.bus_layer + "_space") + self.input_layer = layer_props.hierarchical_decoder.input_layer + self.output_layer = layer_props.hierarchical_decoder.output_layer + self.output_layer_pitch = getattr(self, self.output_layer + "_pitch") + # Two extra pitches between modules on left and right self.internal_routing_width = self.total_number_of_predecoder_outputs * self.bus_pitch + self.bus_pitch self.row_decoder_height = self.and2.height * self.num_outputs @@ -606,7 +597,7 @@ class hierarchical_decoder(design.design): must-connects next level up. """ - if OPTS.tech_name == "sky130": + if layer_props.hierarchical_decoder.vertical_supply: for n in ["vdd", "gnd"]: pins = self.and_inst[0].get_pins(n) for pin in pins: @@ -678,9 +669,9 @@ class hierarchical_decoder(design.design): mid_point2 = vector(x_offset, y_offset) rail_pos = vector(self.predecode_bus[rail_name].cx(), mid_point2.y) self.add_path(self.output_layer, [pin_pos, mid_point1, mid_point2, rail_pos]) - if OPTS.tech_name == "sky130": - above_rail = vector(self.predecode_bus[rail_name].cx(), mid_point2.y + (self.cell_height/2)) - self.add_path(self.bus_layer, [rail_pos, above_rail], width = self.li_width + self.m1_enclose_mcon * 2) + if layer_props.hierarchical_decoder.vertical_supply: + above_rail = vector(self.predecode_bus[rail_name].cx(), mid_point2.y + (self.cell_height / 2)) + self.add_path(self.bus_layer, [rail_pos, above_rail], width=self.li_width + self.m1_enclose_mcon * 2) # pin_pos = pin.center() # rail_pos = vector(self.predecode_bus[rail_name].cx(), pin_pos.y) diff --git a/compiler/modules/hierarchical_predecode.py b/compiler/modules/hierarchical_predecode.py index f5bff640..fff2de4b 100644 --- a/compiler/modules/hierarchical_predecode.py +++ b/compiler/modules/hierarchical_predecode.py @@ -11,6 +11,7 @@ import math from vector import vector from sram_factory import factory from globals import OPTS +from tech import layer_properties as layer_props class hierarchical_predecode(design.design): @@ -83,24 +84,15 @@ class hierarchical_predecode(design.design): # Inputs to cells are on input layer # Outputs from cells are on output layer - if OPTS.tech_name == "sky130": - self.bus_layer = "m1" - self.bus_directions = "nonpref" - self.bus_pitch = self.m1_pitch - self.bus_space = 1.5 * self.m1_space - self.input_layer = "m2" - self.output_layer = "li" - self.output_layer_pitch = self.li_pitch - else: - self.bus_layer = "m2" - self.bus_directions = "pref" - self.bus_pitch = self.m2_pitch - self.bus_space = self.m2_space - # This requires a special jog to ensure to conflicts with the output layers - self.input_layer = "m1" - self.output_layer = "m1" - self.output_layer_pitch = self.m1_pitch - + + self.bus_layer = layer_props.hierarchical_predecode.bus_layer + self.bus_directions = layer_props.hierarchical_predecode.bus_directions + self.bus_pitch = getattr(self, self.bus_layer + "_pitch") + self.bus_space = layer_props.hierarchical_predecode.bus_space_factor * getattr(self, self.bus_layer + "_space") + self.input_layer = layer_props.hierarchical_decoder.input_layer + self.output_layer = layer_props.hierarchical_decoder.output_layer + self.output_layer_pitch = getattr(self, self.output_layer + "_pitch") + self.height = self.number_of_outputs * self.and_mod.height # x offset for input inverters @@ -276,9 +268,9 @@ class hierarchical_predecode(design.design): height=via.mod.second_layer_height, width=via.mod.second_layer_width) - if OPTS.tech_name == "sky130": - below_rail = vector(self.decode_rails[out_pin].cx(), y_offset - (self.cell_height/2)) - self.add_path(self.bus_layer, [rail_pos, below_rail], width = self.li_width + self.m1_enclose_mcon * 2) + if layer_props.hierarchical_predecode.vertical_supply: + below_rail = vector(self.decode_rails[out_pin].cx(), y_offset - (self.cell_height / 2)) + self.add_path(self.bus_layer, [rail_pos, below_rail], width=self.li_width + self.m1_enclose_mcon * 2) def route_and_to_rails(self): # This 2D array defines the connection mapping @@ -319,8 +311,8 @@ class hierarchical_predecode(design.design): def route_vdd_gnd(self): """ Add a pin for each row of vdd/gnd which are must-connects next level up. """ - # In sky130, we use hand-made decoder cells with vertical power - if OPTS.tech_name == "sky130" and not self.column_decoder: + # We may ahve vertical power supply rails + if layer_props.hierarchical_predecode.vertical_supply and not self.column_decoder: for n in ["vdd", "gnd"]: # This makes a wire from top to bottom for both inv and and gates for i in [self.inv_inst, self.and_inst]: diff --git a/compiler/modules/port_address.py b/compiler/modules/port_address.py index e416eb43..14d0b833 100644 --- a/compiler/modules/port_address.py +++ b/compiler/modules/port_address.py @@ -10,6 +10,7 @@ from sram_factory import factory from vector import vector from tech import layer from globals import OPTS +from tech import layer_properties as layer_props class port_address(design.design): @@ -80,7 +81,7 @@ class port_address(design.design): self.copy_power_pins(inst, "gnd") for rbl_vdd_pin in self.rbl_driver_inst.get_pins("vdd"): - if OPTS.tech_name == "sky130": + if layer_props.port_address.supply_offset: self.add_power_pin("vdd", rbl_vdd_pin.center()) else: self.add_power_pin("vdd", rbl_vdd_pin.lc()) diff --git a/compiler/modules/port_data.py b/compiler/modules/port_data.py index c013bc4a..636f4b44 100644 --- a/compiler/modules/port_data.py +++ b/compiler/modules/port_data.py @@ -11,6 +11,7 @@ from sram_factory import factory from collections import namedtuple from vector import vector from globals import OPTS +from tech import layer_properties as layer_props class port_data(design.design): @@ -580,20 +581,20 @@ class port_data(design.design): inst1_start_bit=self.num_cols + off, inst2_start_bit=self.word_size) - # This could be a channel route, but in some techs the bitlines - # are too close together. - elif OPTS.tech_name == "sky130": - self.connect_bitlines(inst1=inst1, - inst1_bls_template=inst1_bls_templ, - inst2=inst2, - num_bits=self.word_size, - inst1_start_bit=start_bit) - else: + elif layer_props.port_data.channel_route_bitlines: self.channel_route_bitlines(inst1=inst1, inst1_bls_template=inst1_bls_templ, inst2=inst2, num_bits=self.word_size + self.num_spare_cols, inst1_start_bit=start_bit) + # This could be a channel route, but in some techs the bitlines + # are too close together. + else: + self.connect_bitlines(inst1=inst1, + inst1_bls_template=inst1_bls_templ, + inst2=inst2, + num_bits=self.word_size, + inst1_start_bit=start_bit) def route_write_driver_to_column_mux_or_precharge_array(self, port): """ Routing of BL and BR between sense_amp and column mux or precharge array """ @@ -640,17 +641,16 @@ class port_data(design.design): # This could be a channel route, but in some techs the bitlines # are too close together. - elif OPTS.tech_name == "sky130": + elif layer_props.port_data.channel_route_bitlines: + self.channel_route_bitlines(inst1=inst1, inst2=inst2, + num_bits=self.word_size + self.num_spare_cols, + inst1_bls_template=inst1_bls_templ, + inst1_start_bit=start_bit) + else: self.connect_bitlines(inst1=inst1, inst2=inst2, num_bits=self.word_size, inst1_bls_template=inst1_bls_templ, inst1_start_bit=start_bit) - else: - self.channel_route_bitlines(inst1=inst1, inst2=inst2, - num_bits=self.word_size+self.num_spare_cols, - inst1_bls_template=inst1_bls_templ, - inst1_start_bit=start_bit) - def route_write_driver_to_sense_amp(self, port): """ Routing of BL and BR between write driver and sense amp """ diff --git a/compiler/modules/replica_column.py b/compiler/modules/replica_column.py index d7e36fce..0ce472c3 100644 --- a/compiler/modules/replica_column.py +++ b/compiler/modules/replica_column.py @@ -9,6 +9,7 @@ from tech import cell_properties from sram_factory import factory from vector import vector from globals import OPTS +from tech import layer_properties as layer_props class replica_column(bitcell_base_array): @@ -41,7 +42,7 @@ class replica_column(bitcell_base_array): "Replica bit cannot be the dummy row.") debug.check(replica_bit <= self.left_rbl or replica_bit >= self.total_size - self.right_rbl - 1, "Replica bit cannot be in the regular array.") - if OPTS.tech_name == "sky130": + if layer_props.replica_column.even_rows: debug.check(rows % 2 == 0 and (self.left_rbl + 1) % 2 == 0, "sky130 currently requires rows to be even and to start with X mirroring" + " (left_rbl must be odd) for LVS.") diff --git a/compiler/modules/wordline_buffer_array.py b/compiler/modules/wordline_buffer_array.py index 45f3ef33..6f728497 100644 --- a/compiler/modules/wordline_buffer_array.py +++ b/compiler/modules/wordline_buffer_array.py @@ -7,10 +7,11 @@ # import debug import design -from tech import drc, layer +from tech import layer from vector import vector from sram_factory import factory from globals import OPTS +from tech import layer_properties as layer_props class wordline_buffer_array(design.design): @@ -70,7 +71,7 @@ class wordline_buffer_array(design.design): Add a pin for each row of vdd/gnd which are must-connects next level up. """ - if OPTS.tech_name == "sky130": + if layer_props.wordline_buffer_array.vertical_supply: for name in ["vdd", "gnd"]: supply_pins = self.wld_inst[0].get_pins(name) for pin in supply_pins: diff --git a/compiler/modules/wordline_driver_array.py b/compiler/modules/wordline_driver_array.py index c334404e..5d93758a 100644 --- a/compiler/modules/wordline_driver_array.py +++ b/compiler/modules/wordline_driver_array.py @@ -11,6 +11,7 @@ from tech import drc, layer from vector import vector from sram_factory import factory from globals import OPTS +from tech import layer_properties as layer_props class wordline_driver_array(design.design): @@ -71,7 +72,7 @@ class wordline_driver_array(design.design): Add a pin for each row of vdd/gnd which are must-connects next level up. """ - if OPTS.tech_name == "sky130": + if layer_props.wordline_buffer_array.vertical_supply: for name in ["vdd", "gnd"]: supply_pins = self.wld_inst[0].get_pins(name) for pin in supply_pins: diff --git a/compiler/pgates/pnor2.py b/compiler/pgates/pnor2.py index 331a0745..b3d4d5ee 100644 --- a/compiler/pgates/pnor2.py +++ b/compiler/pgates/pnor2.py @@ -5,7 +5,6 @@ # (acting for and on behalf of Oklahoma State University) # All rights reserved. # -import contact import pgate import debug from globals import OPTS diff --git a/technology/freepdk45/tech/tech.py b/technology/freepdk45/tech/tech.py index abe09e34..7aeb3e21 100644 --- a/technology/freepdk45/tech/tech.py +++ b/technology/freepdk45/tech/tech.py @@ -9,6 +9,7 @@ import os from design_rules import * from module_type import * from custom_cell_properties import cell_properties +from custom_layer_properties import layer_properties """ File containing the process technology parameters for FreePDK 45nm. @@ -34,6 +35,11 @@ cell_properties.bitcell.mirror.x = True cell_properties.bitcell.mirror.y = False cell_properties.bitcell_power_pin_directions = ("V", "V") +################################################### +# Custom cell properties +################################################### +layer_properties = layer_properties() + ################################################### # GDS file info ################################################### diff --git a/technology/scn4m_subm/tech/tech.py b/technology/scn4m_subm/tech/tech.py index 41801566..f9a99a86 100644 --- a/technology/scn4m_subm/tech/tech.py +++ b/technology/scn4m_subm/tech/tech.py @@ -9,6 +9,7 @@ import os from design_rules import * from module_type import * from custom_cell_properties import cell_properties +from custom_layer_properties import layer_properties """ File containing the process technology parameters for SCMOS 4m, 0.35um @@ -32,6 +33,11 @@ cell_properties = cell_properties() cell_properties.bitcell.mirror.x = True cell_properties.bitcell.mirror.y = False +################################################### +# Custom cell properties +################################################### +layer_properties = layer_properties() + ################################################### # GDS file info ################################################### From 25495f3d9492115d4d7b6d199b5e292c401036f2 Mon Sep 17 00:00:00 2001 From: mrg Date: Wed, 28 Oct 2020 09:21:36 -0700 Subject: [PATCH 15/67] getattr for bank parameters --- compiler/modules/bank.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/compiler/modules/bank.py b/compiler/modules/bank.py index 335ee2b2..bede24a1 100644 --- a/compiler/modules/bank.py +++ b/compiler/modules/bank.py @@ -912,8 +912,8 @@ class bank(design.design): if not self.col_addr_size>0: return - stack = layer_props.bank.stack - pitch = layer_props.bank.pitch + stack = getattr(self, layer_props.bank.stack) + pitch = getattr(self, layer_props.bank.pitch) if self.col_addr_size == 1: From acfec369d614f61220415a8e93e879aa6a48608f Mon Sep 17 00:00:00 2001 From: mrg Date: Wed, 28 Oct 2020 09:54:15 -0700 Subject: [PATCH 16/67] Add ptx cell properties --- compiler/base/custom_cell_properties.py | 26 ++++++++++++++++++++++- compiler/base/custom_layer_properties.py | 24 ++++++--------------- compiler/bitcells/bitcell.py | 2 -- compiler/modules/wordline_buffer_array.py | 2 +- compiler/modules/wordline_driver_array.py | 2 +- compiler/pgates/column_mux.py | 8 +++---- compiler/pgates/pgate.py | 6 +++--- compiler/pgates/pinv.py | 5 +++-- compiler/pgates/pinv_dec.py | 9 ++++---- compiler/pgates/pnand2.py | 7 +++--- compiler/pgates/pnand3.py | 6 +++--- compiler/pgates/pnand4.py | 6 +++--- compiler/pgates/pnor2.py | 6 +++--- compiler/pgates/precharge.py | 5 +++-- compiler/pgates/ptx.py | 9 ++++---- compiler/pgates/wordline_driver.py | 3 ++- 16 files changed, 71 insertions(+), 55 deletions(-) diff --git a/compiler/base/custom_cell_properties.py b/compiler/base/custom_cell_properties.py index 8e338548..43c84206 100644 --- a/compiler/base/custom_cell_properties.py +++ b/compiler/base/custom_cell_properties.py @@ -36,6 +36,17 @@ class _mirror_axis: self.y = y +class _ptx: + def __init__(self, model_is_subckt, bin_spice_models): + self.model_is_subckt = model_is_subckt + self.bin_spice_models = bin_spice_models + + +class _pgate: + def __init__(self, add_implants): + self.add_implants = add_implants + + class _bitcell: def __init__(self, mirror, cell_s8_6t, cell_6t, cell_1rw1r, cell_1w1r): self.mirror = mirror @@ -128,7 +139,12 @@ class cell_properties(): self.names = {} self._bitcell = _bitcell._default() - + + self._ptx = _ptx(model_is_subckt=False, + bin_spice_models=False) + + self._pgate = _pgate(add_implants=False) + self._dff = _dff(use_custom_ports=False, custom_port_list=["D", "Q", "clk", "vdd", "gnd"], custom_type_list=["INPUT", "OUTPUT", "INPUT", "POWER", "GROUND"], @@ -157,6 +173,14 @@ class cell_properties(): def bitcell(self): return self._bitcell + @property + def ptx(self): + return self._ptx + + @property + def pgate(self): + return self._pgate + @property def dff(self): return self._dff diff --git a/compiler/base/custom_layer_properties.py b/compiler/base/custom_layer_properties.py index c2dcae88..8faa2968 100644 --- a/compiler/base/custom_layer_properties.py +++ b/compiler/base/custom_layer_properties.py @@ -111,21 +111,17 @@ class _replica_column: self.even_rows = even_rows -class _wordline_buffer_array: +class _wordline_driver: def __init__(self, vertical_supply): # wordline_buffer_array # vertical vdd/gnd (sky130) - self.vertical_supply = vertical_supply - - -class _wordline_driver_array: - def __init__(self, - vertical_supply): # wordline_driver_array # vertical vdd/gnd (sky130) + # wordline_driver + # vertical vdd/gnd (sky130) self.vertical_supply = vertical_supply - + class layer_properties(): """ @@ -161,9 +157,7 @@ class layer_properties(): self._replica_column = _replica_column(even_rows=False) - self._wordline_buffer_array = _wordline_buffer_array(vertical_supply=False) - - self._wordline_driver_array = _wordline_driver_array(vertical_supply=False) + self._wordline_driver = _wordline_driver(vertical_supply=False) @property def bank(self): @@ -194,10 +188,6 @@ class layer_properties(): return self._replica_column @property - def wordline_buffer_array(self): - return self._wordline_buffer_array - - @property - def wordline_driver_array(self): - return self._wordline_driver_array + def wordline_driver(self): + return self._wordline_driver diff --git a/compiler/bitcells/bitcell.py b/compiler/bitcells/bitcell.py index 7f0acc4b..5a987ca4 100644 --- a/compiler/bitcells/bitcell.py +++ b/compiler/bitcells/bitcell.py @@ -46,8 +46,6 @@ class bitcell(bitcell_base.bitcell_base): self.add_pin_types(self.type_list) self.nets_match = self.do_nets_exist(self.storage_nets) - #debug.check(OPTS.tech_name != "sky130", "sky130 does not yet support single port cells") - def get_all_wl_names(self): """ Creates a list of all wordline pin names """ row_pins = [props.bitcell.cell_6t.pin.wl] diff --git a/compiler/modules/wordline_buffer_array.py b/compiler/modules/wordline_buffer_array.py index 6f728497..3b83b5eb 100644 --- a/compiler/modules/wordline_buffer_array.py +++ b/compiler/modules/wordline_buffer_array.py @@ -71,7 +71,7 @@ class wordline_buffer_array(design.design): Add a pin for each row of vdd/gnd which are must-connects next level up. """ - if layer_props.wordline_buffer_array.vertical_supply: + if layer_props.wordline_driver.vertical_supply: for name in ["vdd", "gnd"]: supply_pins = self.wld_inst[0].get_pins(name) for pin in supply_pins: diff --git a/compiler/modules/wordline_driver_array.py b/compiler/modules/wordline_driver_array.py index 5d93758a..c8d22260 100644 --- a/compiler/modules/wordline_driver_array.py +++ b/compiler/modules/wordline_driver_array.py @@ -72,7 +72,7 @@ class wordline_driver_array(design.design): Add a pin for each row of vdd/gnd which are must-connects next level up. """ - if layer_props.wordline_buffer_array.vertical_supply: + if layer_props.wordline_driver.vertical_supply: for name in ["vdd", "gnd"]: supply_pins = self.wld_inst[0].get_pins(name) for pin in supply_pins: diff --git a/compiler/pgates/column_mux.py b/compiler/pgates/column_mux.py index 20616115..18092b4d 100644 --- a/compiler/pgates/column_mux.py +++ b/compiler/pgates/column_mux.py @@ -10,7 +10,7 @@ import debug from tech import drc, layer from vector import vector from sram_factory import factory -from globals import OPTS +from tech import cell_properties as cell_props class column_mux(pgate.pgate): @@ -124,8 +124,8 @@ class column_mux(pgate.pgate): + vector(0, self.nmos.active_height + max(self.active_space, self.poly_space)) self.nmos_upper.place(nmos_upper_position) - if OPTS.tech_name == "sky130": - self.add_implants() + if cell_props.pgate.add_implants: + self.extend_implants() def connect_poly(self): """ Connect the poly gate of the two pass transistors """ @@ -198,7 +198,7 @@ class column_mux(pgate.pgate): self.add_path(self.col_mux_stack[2], [br_pin.bc(), mid1, mid2, nmos_lower_d_pin.center()]) - def add_implants(self): + def extend_implants(self): """ Add top-to-bottom implants for adjacency issues in s8. """ diff --git a/compiler/pgates/pgate.py b/compiler/pgates/pgate.py index 082ef7b8..468f367e 100644 --- a/compiler/pgates/pgate.py +++ b/compiler/pgates/pgate.py @@ -13,8 +13,8 @@ from bisect import bisect_left from tech import layer, drc from vector import vector from globals import OPTS - -if(OPTS.tech_name == "sky130"): +from tech import cell_properties as cell_props +if cell_props.ptx.bin_spice_models: from tech import nmos_bins, pmos_bins @@ -192,7 +192,7 @@ class pgate(design.design): width=self.width + 2 * self.well_extend_active, height=pwell_height) - if OPTS.tech_name == "sky130": + if cell_props.pgate.add_implants: self.extend_implants() def add_nwell_contact(self, pmos, pmos_pos): diff --git a/compiler/pgates/pinv.py b/compiler/pgates/pinv.py index eca2d22c..2546f833 100644 --- a/compiler/pgates/pinv.py +++ b/compiler/pgates/pinv.py @@ -17,6 +17,7 @@ from utils import round_to_grid import logical_effort from sram_factory import factory from errors import drc_error +from tech import cell_properties as cell_props class pinv(pgate.pgate): @@ -87,7 +88,7 @@ class pinv(pgate.pgate): self.tx_mults = 1 self.nmos_width = self.nmos_size * drc("minwidth_tx") self.pmos_width = self.pmos_size * drc("minwidth_tx") - if OPTS.tech_name == "sky130": + if cell_props.ptx.bin_spice_models: (self.nmos_width, self.tx_mults) = pgate.pgate.best_bin("nmos", self.nmos_width) (self.pmos_width, self.tx_mults) = pgate.pgate.best_bin("pmos", self.pmos_width) return @@ -132,7 +133,7 @@ class pinv(pgate.pgate): # Determine the number of mults for each to fit width # into available space - if OPTS.tech_name != "sky130": + if not cell_props.ptx.bin_spice_models: self.nmos_width = self.nmos_size * drc("minwidth_tx") self.pmos_width = self.pmos_size * drc("minwidth_tx") nmos_required_mults = max(int(ceil(self.nmos_width / nmos_height_available)), 1) diff --git a/compiler/pgates/pinv_dec.py b/compiler/pgates/pinv_dec.py index 028fe954..04e33fdd 100644 --- a/compiler/pgates/pinv_dec.py +++ b/compiler/pgates/pinv_dec.py @@ -12,6 +12,7 @@ from tech import drc, parameter, layer from vector import vector from globals import OPTS from sram_factory import factory +from tech import cell_properties as cell_props class pinv_dec(pinv.pinv): @@ -50,7 +51,7 @@ class pinv_dec(pinv.pinv): self.tx_mults = 1 self.nmos_width = self.nmos_size * drc("minwidth_tx") self.pmos_width = self.pmos_size * drc("minwidth_tx") - if OPTS.tech_name == "sky130": + if self.bin_spice_models: self.nmos_width = self.nearest_bin("nmos", self.nmos_width) self.pmos_width = self.nearest_bin("pmos", self.pmos_width) @@ -140,10 +141,10 @@ class pinv_dec(pinv.pinv): nmos_drain_pos = self.nmos_inst.get_pin("D").center() self.output_pos = vector(0.5 * (pmos_drain_pos.x + nmos_drain_pos.x), nmos_drain_pos.y) - if OPTS.tech_name == "sky130": - self.add_implants() + if cell_props.pgate.add_implants: + self.extend_implants() - def add_implants(self): + def extend_implants(self): """ Add top-to-bottom implants for adjacency issues in s8. """ diff --git a/compiler/pgates/pnand2.py b/compiler/pgates/pnand2.py index c1295a1b..b2dead7e 100644 --- a/compiler/pgates/pnand2.py +++ b/compiler/pgates/pnand2.py @@ -8,11 +8,11 @@ import pgate import debug from tech import drc, parameter, spice -from globals import OPTS from vector import vector import logical_effort from sram_factory import factory import contact +from tech import cell_properties as cell_props class pnand2(pgate.pgate): @@ -38,7 +38,7 @@ class pnand2(pgate.pgate): debug.check(size == 1, "Size 1 pnand2 is only supported now.") self.tx_mults = 1 - if OPTS.tech_name == "sky130": + if cell_props.ptx.bin_spice_models: self.nmos_width = self.nearest_bin("nmos", self.nmos_width) self.pmos_width = self.nearest_bin("pmos", self.pmos_width) @@ -212,9 +212,8 @@ class pnand2(pgate.pgate): "B", position="center") - if OPTS.tech_name == "sky130": + if cell_props.pgate.add_implants: self.add_enclosure([apin, bpin], "npc", drc("npc_enclose_poly")) - def route_output(self): """ Route the Z output """ diff --git a/compiler/pgates/pnand3.py b/compiler/pgates/pnand3.py index db5a1f28..de7e3e68 100644 --- a/compiler/pgates/pnand3.py +++ b/compiler/pgates/pnand3.py @@ -11,8 +11,8 @@ from tech import drc, parameter, spice from vector import vector import logical_effort from sram_factory import factory -from globals import OPTS import contact +from tech import cell_properties as cell_props class pnand3(pgate.pgate): @@ -41,7 +41,7 @@ class pnand3(pgate.pgate): "Size 1 pnand3 is only supported now.") self.tx_mults = 1 - if OPTS.tech_name == "sky130": + if cell_props.ptx.bin_spice_models: self.nmos_width = self.nearest_bin("nmos", self.nmos_width) self.pmos_width = self.nearest_bin("pmos", self.pmos_width) @@ -246,7 +246,7 @@ class pnand3(pgate.pgate): "C", position="right") - if OPTS.tech_name == "sky130": + if cell_props.pgate.add_implants: self.add_enclosure([apin, bpin, cpin], "npc", drc("npc_enclose_poly")) def route_output(self): diff --git a/compiler/pgates/pnand4.py b/compiler/pgates/pnand4.py index 5a812799..a71f2f52 100644 --- a/compiler/pgates/pnand4.py +++ b/compiler/pgates/pnand4.py @@ -11,8 +11,8 @@ from tech import drc, parameter, spice from vector import vector import logical_effort from sram_factory import factory -from globals import OPTS import contact +from tech import cell_properties as cell_props class pnand4(pgate.pgate): @@ -41,7 +41,7 @@ class pnand4(pgate.pgate): "Size 1 pnand4 is only supported now.") self.tx_mults = 1 - if OPTS.tech_name == "sky130": + if cell_props.ptx.bin_spice_models: self.nmos_width = self.nearest_bin("nmos", self.nmos_width) self.pmos_width = self.nearest_bin("pmos", self.pmos_width) @@ -268,7 +268,7 @@ class pnand4(pgate.pgate): "D", position="right") - if OPTS.tech_name == "sky130": + if cell_props.pgate.add_implants: self.add_enclosure([apin, bpin, cpin, dpin], "npc", drc("npc_enclose_poly")) def route_output(self): diff --git a/compiler/pgates/pnor2.py b/compiler/pgates/pnor2.py index b3d4d5ee..6a5679b0 100644 --- a/compiler/pgates/pnor2.py +++ b/compiler/pgates/pnor2.py @@ -7,10 +7,10 @@ # import pgate import debug -from globals import OPTS from tech import drc, parameter, spice from vector import vector from sram_factory import factory +from tech import cell_properties as cell_props class pnor2(pgate.pgate): @@ -36,7 +36,7 @@ class pnor2(pgate.pgate): debug.check(size==1, "Size 1 pnor2 is only supported now.") self.tx_mults = 1 - if OPTS.tech_name == "sky130": + if self.bin_spice_models: self.nmos_width = self.nearest_bin("nmos", self.nmos_width) self.pmos_width = self.nearest_bin("pmos", self.pmos_width) @@ -210,7 +210,7 @@ class pnor2(pgate.pgate): self.output_yoffset = self.inputA_yoffset + self.m1_nonpref_pitch - if OPTS.tech_name == "sky130": + if cell_props.pgate.add_implants: self.add_enclosure([apin, bpin], "npc", drc("npc_enclose_poly")) def route_output(self): diff --git a/compiler/pgates/precharge.py b/compiler/pgates/precharge.py index 4ae48167..feb9eca6 100644 --- a/compiler/pgates/precharge.py +++ b/compiler/pgates/precharge.py @@ -13,6 +13,7 @@ from tech import parameter, drc from vector import vector from globals import OPTS from sram_factory import factory +from tech import cell_properties as cell_props class precharge(design.design): @@ -79,7 +80,7 @@ class precharge(design.design): """ Initializes the upper and lower pmos """ - if(OPTS.tech_name == "sky130"): + if cell_props.ptx.bin_spice_models: self.ptx_width = pgate.nearest_bin("pmos", self.ptx_width) self.pmos = factory.create(module_type="ptx", width=self.ptx_width, @@ -300,4 +301,4 @@ class precharge(design.design): self.add_path(self.bitline_layer, [left_pos, right_pos], width=pmos_pin.height()) - \ No newline at end of file + diff --git a/compiler/pgates/ptx.py b/compiler/pgates/ptx.py index 67368ce9..e445cbcd 100644 --- a/compiler/pgates/ptx.py +++ b/compiler/pgates/ptx.py @@ -14,6 +14,7 @@ import contact import logical_effort from globals import OPTS from pgate import pgate +from tech import cell_properties as cell_props class ptx(design.design): @@ -129,9 +130,8 @@ class ptx(design.design): # be decided in the layout later. area_sd = 2.5 * self.poly_width * self.tx_width perimeter_sd = 2 * self.poly_width + 2 * self.tx_width - if OPTS.tech_name == "sky130": - # sky130 simulation cannot use the mult parameter in simulation - (self.tx_width, self.mults) = pgate.best_bin(self.tx_type, self.tx_width) + if cell_props.ptx.model_is_subckt: + # sky130 main_str = "X{{0}} {{1}} {0} m={1} w={2} l={3} ".format(spice[self.tx_type], self.mults, self.tx_width, @@ -150,12 +150,13 @@ class ptx(design.design): self.spice_device = main_str + area_str self.spice.append("\n* spice ptx " + self.spice_device) - if OPTS.tech_name == "sky130" and OPTS.lvs_exe and OPTS.lvs_exe[0] == "calibre": + if cell_props.ptx.model_is_subckt and OPTS.lvs_exe and OPTS.lvs_exe[0] == "calibre": # sky130 requires mult parameter too # self.lvs_device = "X{{0}} {{1}} {0} m={1} w={2} l={3} mult={1}".format(spice[self.tx_type], # self.mults, # self.tx_width, # drc("minwidth_poly")) + # TEMP FIX: Use old device names if using Calibre. self.lvs_device = "M{{0}} {{1}} {0} m={1} w={2} l={3} mult={1}".format("nshort" if self.tx_type == "nmos" else "pshort", self.mults, self.tx_width, diff --git a/compiler/pgates/wordline_driver.py b/compiler/pgates/wordline_driver.py index 6abf7b20..458f19f3 100644 --- a/compiler/pgates/wordline_driver.py +++ b/compiler/pgates/wordline_driver.py @@ -11,6 +11,7 @@ import design from sram_factory import factory from globals import OPTS from tech import layer +from tech import layer_properties as layer_props class wordline_driver(design.design): @@ -104,7 +105,7 @@ class wordline_driver(design.design): def route_supply_rails(self): """ Add vdd/gnd rails to the top, (middle), and bottom. """ - if OPTS.tech_name == "sky130": + if layer_props.wordline_driver.vertical_supply: for name in ["vdd", "gnd"]: for inst in [self.nand_inst, self.driver_inst]: self.copy_layout_pin(inst, name) From f6c5f48b4c1cc0656b00719987f37e1c658887a7 Mon Sep 17 00:00:00 2001 From: mrg Date: Wed, 28 Oct 2020 10:31:05 -0700 Subject: [PATCH 17/67] Default channel route is true --- compiler/base/custom_layer_properties.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/compiler/base/custom_layer_properties.py b/compiler/base/custom_layer_properties.py index 8faa2968..36e044c5 100644 --- a/compiler/base/custom_layer_properties.py +++ b/compiler/base/custom_layer_properties.py @@ -152,7 +152,7 @@ class layer_properties(): self._port_address = _port_address(supply_offset=False) - self._port_data = _port_data(channel_route_bitlines=False, + self._port_data = _port_data(channel_route_bitlines=True, enable_layer="m1") self._replica_column = _replica_column(even_rows=False) From 00cb8a28d943d1dd33e9ca77e3dd52c4f232ba78 Mon Sep 17 00:00:00 2001 From: mrg Date: Wed, 28 Oct 2020 10:36:13 -0700 Subject: [PATCH 18/67] Fix supply layer query --- compiler/modules/control_logic.py | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/compiler/modules/control_logic.py b/compiler/modules/control_logic.py index 5b0b4a53..7f9035d9 100644 --- a/compiler/modules/control_logic.py +++ b/compiler/modules/control_logic.py @@ -85,8 +85,8 @@ class control_logic(design.design): def add_modules(self): """ Add all the required modules """ - dff = factory.create(module_type="dff_buf") - dff_height = dff.height + self.dff = factory.create(module_type="dff_buf") + dff_height = self.dff.height self.ctrl_dff_array = factory.create(module_type="dff_buf_array", rows=self.num_control_signals, @@ -163,8 +163,6 @@ class control_logic(design.design): fanout_list = OPTS.delay_chain_stages * [ OPTS.delay_chain_fanout_per_stage ]) self.add_mod(self.delay_chain) - self.supply_layer = dff.get_pin("vdd").layer - def get_dynamic_delay_chain_size(self, previous_stages, previous_fanout): """Determine the size of the delay chain used for the Sense Amp Enable using path delays""" from math import ceil @@ -723,23 +721,25 @@ class control_logic(design.design): def route_supply(self): """ Add vdd and gnd to the instance cells """ + supply_layer = self.dff.get_pin("vdd").layer + max_row_x_loc = max([inst.rx() for inst in self.row_end_inst]) for inst in self.row_end_inst: pins = inst.get_pins("vdd") for pin in pins: - if pin.layer == self.supply_layer: + if pin.layer == supply_layer: row_loc = pin.rc() pin_loc = vector(max_row_x_loc, pin.rc().y) self.add_power_pin("vdd", pin_loc, start_layer=pin.layer) - self.add_path(self.supply_layer, [row_loc, pin_loc]) + self.add_path(supply_layer, [row_loc, pin_loc]) pins = inst.get_pins("gnd") for pin in pins: - if pin.layer == self.supply_layer: + if pin.layer == supply_layer: row_loc = pin.rc() pin_loc = vector(max_row_x_loc, pin.rc().y) self.add_power_pin("gnd", pin_loc, start_layer=pin.layer) - self.add_path(self.supply_layer, [row_loc, pin_loc]) + self.add_path(supply_layer, [row_loc, pin_loc]) self.copy_layout_pin(self.delay_inst, "gnd") self.copy_layout_pin(self.delay_inst, "vdd") From ae0f4fe68251e718d25f0ace74e5f4e18d7959fe Mon Sep 17 00:00:00 2001 From: mrg Date: Wed, 28 Oct 2020 10:39:54 -0700 Subject: [PATCH 19/67] Fix spice model bin parameter error --- compiler/pgates/pinv_dec.py | 2 +- compiler/pgates/pnor2.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/compiler/pgates/pinv_dec.py b/compiler/pgates/pinv_dec.py index 04e33fdd..b8fc8fe0 100644 --- a/compiler/pgates/pinv_dec.py +++ b/compiler/pgates/pinv_dec.py @@ -51,7 +51,7 @@ class pinv_dec(pinv.pinv): self.tx_mults = 1 self.nmos_width = self.nmos_size * drc("minwidth_tx") self.pmos_width = self.pmos_size * drc("minwidth_tx") - if self.bin_spice_models: + if cell_props.ptx.bin_spice_models: self.nmos_width = self.nearest_bin("nmos", self.nmos_width) self.pmos_width = self.nearest_bin("pmos", self.pmos_width) diff --git a/compiler/pgates/pnor2.py b/compiler/pgates/pnor2.py index 6a5679b0..3a17be30 100644 --- a/compiler/pgates/pnor2.py +++ b/compiler/pgates/pnor2.py @@ -36,7 +36,7 @@ class pnor2(pgate.pgate): debug.check(size==1, "Size 1 pnor2 is only supported now.") self.tx_mults = 1 - if self.bin_spice_models: + if cell_props.ptx.bin_spice_models: self.nmos_width = self.nearest_bin("nmos", self.nmos_width) self.pmos_width = self.nearest_bin("pmos", self.pmos_width) From 857f5cb136c046521886f4287390b21dd5910543 Mon Sep 17 00:00:00 2001 From: mrg Date: Wed, 28 Oct 2020 15:46:10 -0700 Subject: [PATCH 20/67] Fix copy pasta: decoder to predecode --- compiler/modules/hierarchical_predecode.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/compiler/modules/hierarchical_predecode.py b/compiler/modules/hierarchical_predecode.py index fff2de4b..3c19910f 100644 --- a/compiler/modules/hierarchical_predecode.py +++ b/compiler/modules/hierarchical_predecode.py @@ -89,8 +89,8 @@ class hierarchical_predecode(design.design): self.bus_directions = layer_props.hierarchical_predecode.bus_directions self.bus_pitch = getattr(self, self.bus_layer + "_pitch") self.bus_space = layer_props.hierarchical_predecode.bus_space_factor * getattr(self, self.bus_layer + "_space") - self.input_layer = layer_props.hierarchical_decoder.input_layer - self.output_layer = layer_props.hierarchical_decoder.output_layer + self.input_layer = layer_props.hierarchical_predecode.input_layer + self.output_layer = layer_props.hierarchical_predecode.output_layer self.output_layer_pitch = getattr(self, self.output_layer + "_pitch") self.height = self.number_of_outputs * self.and_mod.height From bd9bac6635788ecf71fa816911c83b6dd6de79b5 Mon Sep 17 00:00:00 2001 From: mrg Date: Fri, 30 Oct 2020 15:52:07 -0700 Subject: [PATCH 21/67] Fixed nominal_corner_only parameter. --- .../example_configs/big_config_scn4m_subm.py | 2 +- .../example_config_1rw_1r_scn4m_subm.py | 2 +- .../example_config_1rw_1w_scn4m_subm.py | 21 +++++++++++++++++++ .../example_config_1rw_2mux_scn4m_subm.py | 2 +- .../example_config_1w_1r_scn4m_subm.py | 2 +- .../example_config_2rw_scn4m_subm.py | 21 +++++++++++++++++++ .../example_config_freepdk45.py | 4 ++-- .../example_config_scn4m_subm.py | 2 +- .../giant_config_scn4m_subm.py | 2 +- .../medium_config_scn4m_subm.py | 2 +- .../example_configs/riscv-freepdk45-8kbyte.py | 2 +- .../riscv-scn4m_subm-16kbyte.py | 2 +- .../riscv-scn4m_subm-1kbyte.py | 2 +- .../riscv-scn4m_subm-2kbyte.py | 2 +- .../riscv-scn4m_subm-32kbyte.py | 2 +- .../riscv-scn4m_subm-4kbyte.py | 2 +- .../riscv-scn4m_subm-8kbyte.py | 2 +- .../example_configs/riscv-sky130-1kbyte.py | 2 +- .../example_configs/riscv-sky130-2kbyte.py | 2 +- .../example_configs/riscv-sky130-4kbyte.py | 2 +- 20 files changed, 61 insertions(+), 19 deletions(-) create mode 100644 compiler/example_configs/example_config_1rw_1w_scn4m_subm.py create mode 100644 compiler/example_configs/example_config_2rw_scn4m_subm.py diff --git a/compiler/example_configs/big_config_scn4m_subm.py b/compiler/example_configs/big_config_scn4m_subm.py index b90a9b1a..15d8634e 100644 --- a/compiler/example_configs/big_config_scn4m_subm.py +++ b/compiler/example_configs/big_config_scn4m_subm.py @@ -2,7 +2,7 @@ word_size = 32 num_words = 128 tech_name = "scn4m_subm" -nominal_corners_only = False +nominal_corner_only = False process_corners = ["TT"] supply_voltages = [5.0] temperatures = [25] diff --git a/compiler/example_configs/example_config_1rw_1r_scn4m_subm.py b/compiler/example_configs/example_config_1rw_1r_scn4m_subm.py index 7f2e6059..46722ac9 100644 --- a/compiler/example_configs/example_config_1rw_1r_scn4m_subm.py +++ b/compiler/example_configs/example_config_1rw_1r_scn4m_subm.py @@ -6,7 +6,7 @@ num_r_ports = 1 num_w_ports = 0 tech_name = "scn4m_subm" -nominal_corners_only = False +nominal_corner_only = False process_corners = ["TT"] supply_voltages = [5.0] temperatures = [25] diff --git a/compiler/example_configs/example_config_1rw_1w_scn4m_subm.py b/compiler/example_configs/example_config_1rw_1w_scn4m_subm.py new file mode 100644 index 00000000..360447e9 --- /dev/null +++ b/compiler/example_configs/example_config_1rw_1w_scn4m_subm.py @@ -0,0 +1,21 @@ +word_size = 4 +num_words = 16 +write_size = 2 + +num_rw_ports = 1 +num_r_ports = 0 +num_w_ports = 1 + +tech_name = "scn4m_subm" +nominal_corner_only = False +process_corners = ["TT"] +supply_voltages = [5.0] +temperatures = [25] + +route_supplies = False +check_lvsdrc = True + +output_path = "temp" +output_name = "sram_1rw_1r_{0}_{1}_{2}".format(word_size, + num_words, + tech_name) diff --git a/compiler/example_configs/example_config_1rw_2mux_scn4m_subm.py b/compiler/example_configs/example_config_1rw_2mux_scn4m_subm.py index a09edfdb..5f20b336 100644 --- a/compiler/example_configs/example_config_1rw_2mux_scn4m_subm.py +++ b/compiler/example_configs/example_config_1rw_2mux_scn4m_subm.py @@ -7,7 +7,7 @@ num_r_ports = 0 num_w_ports = 0 tech_name = "scn4m_subm" -nominal_corners_only = False +nominal_corner_only = False process_corners = ["TT"] supply_voltages = [5.0] temperatures = [25] diff --git a/compiler/example_configs/example_config_1w_1r_scn4m_subm.py b/compiler/example_configs/example_config_1w_1r_scn4m_subm.py index 7698f1a3..9fe143a5 100644 --- a/compiler/example_configs/example_config_1w_1r_scn4m_subm.py +++ b/compiler/example_configs/example_config_1w_1r_scn4m_subm.py @@ -6,7 +6,7 @@ num_r_ports = 1 num_w_ports = 1 tech_name = "scn4m_subm" -nominal_corners_only = False +nominal_corner_only = False process_corners = ["TT"] supply_voltages = [5.0] temperatures = [25] diff --git a/compiler/example_configs/example_config_2rw_scn4m_subm.py b/compiler/example_configs/example_config_2rw_scn4m_subm.py new file mode 100644 index 00000000..3d0721cc --- /dev/null +++ b/compiler/example_configs/example_config_2rw_scn4m_subm.py @@ -0,0 +1,21 @@ +word_size = 2 +num_words = 16 + +num_rw_ports = 2 +num_r_ports = 0 +num_w_ports = 0 + +tech_name = "scn4m_subm" +nominal_corner_only = False +process_corners = ["TT"] +supply_voltages = [5.0] +temperatures = [25] + +route_supplies = False +check_lvsdrc = True + +output_path = "temp" +output_name = "sram_1w_1r_{0}_{1}_{2}".format(word_size, + num_words, + tech_name) + diff --git a/compiler/example_configs/example_config_freepdk45.py b/compiler/example_configs/example_config_freepdk45.py index 9c536bc6..27b4c79a 100644 --- a/compiler/example_configs/example_config_freepdk45.py +++ b/compiler/example_configs/example_config_freepdk45.py @@ -2,14 +2,14 @@ word_size = 2 num_words = 16 tech_name = "freepdk45" -nominal_corners_only = False +nominal_corner_only = False process_corners = ["TT"] supply_voltages = [1.0] temperatures = [25] route_supplies = False check_lvsdrc = True -# nominal_corners_only = True +# nominal_corner_only = True load_scales = [0.5, 1, 4] slew_scales = [0.5, 1] diff --git a/compiler/example_configs/example_config_scn4m_subm.py b/compiler/example_configs/example_config_scn4m_subm.py index 71ef328b..4cfe2c07 100644 --- a/compiler/example_configs/example_config_scn4m_subm.py +++ b/compiler/example_configs/example_config_scn4m_subm.py @@ -2,7 +2,7 @@ word_size = 2 num_words = 16 tech_name = "scn4m_subm" -nominal_corners_only = False +nominal_corner_only = False process_corners = ["TT"] supply_voltages = [5.0] temperatures = [25] diff --git a/compiler/example_configs/giant_config_scn4m_subm.py b/compiler/example_configs/giant_config_scn4m_subm.py index 56751a9c..7d683088 100644 --- a/compiler/example_configs/giant_config_scn4m_subm.py +++ b/compiler/example_configs/giant_config_scn4m_subm.py @@ -2,7 +2,7 @@ word_size = 64 num_words = 1024 tech_name = "scn4m_subm" -nominal_corners_only = False +nominal_corner_only = False process_corners = ["TT"] supply_voltages = [ 5.0 ] temperatures = [ 25 ] diff --git a/compiler/example_configs/medium_config_scn4m_subm.py b/compiler/example_configs/medium_config_scn4m_subm.py index ac4af8b4..dc3ec36f 100644 --- a/compiler/example_configs/medium_config_scn4m_subm.py +++ b/compiler/example_configs/medium_config_scn4m_subm.py @@ -2,7 +2,7 @@ word_size = 16 num_words = 256 tech_name = "scn4m_subm" -nominal_corners_only = False +nominal_corner_only = False process_corners = ["TT"] supply_voltages = [5.0] temperatures = [25] diff --git a/compiler/example_configs/riscv-freepdk45-8kbyte.py b/compiler/example_configs/riscv-freepdk45-8kbyte.py index b0ebf764..ad7d6072 100644 --- a/compiler/example_configs/riscv-freepdk45-8kbyte.py +++ b/compiler/example_configs/riscv-freepdk45-8kbyte.py @@ -9,7 +9,7 @@ num_r_ports = 1 num_w_ports = 0 tech_name = "freepdk45" -nominal_corners_only = True +nominal_corner_only = True route_supplies = False check_lvsdrc = False diff --git a/compiler/example_configs/riscv-scn4m_subm-16kbyte.py b/compiler/example_configs/riscv-scn4m_subm-16kbyte.py index befe49fb..5ca44842 100644 --- a/compiler/example_configs/riscv-scn4m_subm-16kbyte.py +++ b/compiler/example_configs/riscv-scn4m_subm-16kbyte.py @@ -9,7 +9,7 @@ num_r_ports = 1 num_w_ports = 0 tech_name = "scn4m_subm" -nominal_corners_only = True +nominal_corner_only = True route_supplies = False check_lvsdrc = False diff --git a/compiler/example_configs/riscv-scn4m_subm-1kbyte.py b/compiler/example_configs/riscv-scn4m_subm-1kbyte.py index 1ab9f5fe..9572aeaf 100644 --- a/compiler/example_configs/riscv-scn4m_subm-1kbyte.py +++ b/compiler/example_configs/riscv-scn4m_subm-1kbyte.py @@ -7,7 +7,7 @@ num_r_ports = 1 num_w_ports = 0 tech_name = "scn4m_subm" -nominal_corners_only = True +nominal_corner_only = True route_supplies = True check_lvsdrc = True diff --git a/compiler/example_configs/riscv-scn4m_subm-2kbyte.py b/compiler/example_configs/riscv-scn4m_subm-2kbyte.py index 267e31ef..814d77e1 100644 --- a/compiler/example_configs/riscv-scn4m_subm-2kbyte.py +++ b/compiler/example_configs/riscv-scn4m_subm-2kbyte.py @@ -7,7 +7,7 @@ num_r_ports = 1 num_w_ports = 0 tech_name = "scn4m_subm" -nominal_corners_only = True +nominal_corner_only = True route_supplies = True check_lvsdrc = True diff --git a/compiler/example_configs/riscv-scn4m_subm-32kbyte.py b/compiler/example_configs/riscv-scn4m_subm-32kbyte.py index 98cb8808..dc9a31b7 100644 --- a/compiler/example_configs/riscv-scn4m_subm-32kbyte.py +++ b/compiler/example_configs/riscv-scn4m_subm-32kbyte.py @@ -9,7 +9,7 @@ num_r_ports = 1 num_w_ports = 0 tech_name = "scn4m_subm" -nominal_corners_only = True +nominal_corner_only = True route_supplies = False check_lvsdrc = False diff --git a/compiler/example_configs/riscv-scn4m_subm-4kbyte.py b/compiler/example_configs/riscv-scn4m_subm-4kbyte.py index 87cf4a71..5f374655 100644 --- a/compiler/example_configs/riscv-scn4m_subm-4kbyte.py +++ b/compiler/example_configs/riscv-scn4m_subm-4kbyte.py @@ -7,7 +7,7 @@ num_r_ports = 1 num_w_ports = 0 tech_name = "scn4m_subm" -nominal_corners_only = True +nominal_corner_only = True route_supplies = True check_lvsdrc = True diff --git a/compiler/example_configs/riscv-scn4m_subm-8kbyte.py b/compiler/example_configs/riscv-scn4m_subm-8kbyte.py index 8b1715ff..01dd6e7a 100644 --- a/compiler/example_configs/riscv-scn4m_subm-8kbyte.py +++ b/compiler/example_configs/riscv-scn4m_subm-8kbyte.py @@ -9,7 +9,7 @@ num_r_ports = 1 num_w_ports = 0 tech_name = "scn4m_subm" -nominal_corners_only = True +nominal_corner_only = True route_supplies = False check_lvsdrc = False diff --git a/compiler/example_configs/riscv-sky130-1kbyte.py b/compiler/example_configs/riscv-sky130-1kbyte.py index c4a298d2..637505dd 100644 --- a/compiler/example_configs/riscv-sky130-1kbyte.py +++ b/compiler/example_configs/riscv-sky130-1kbyte.py @@ -9,7 +9,7 @@ num_r_ports = 1 num_w_ports = 0 tech_name = "sky130" -nominal_corners_only = True +nominal_corner_only = True route_supplies = True check_lvsdrc = True diff --git a/compiler/example_configs/riscv-sky130-2kbyte.py b/compiler/example_configs/riscv-sky130-2kbyte.py index d50d532e..cb520b48 100644 --- a/compiler/example_configs/riscv-sky130-2kbyte.py +++ b/compiler/example_configs/riscv-sky130-2kbyte.py @@ -9,7 +9,7 @@ num_r_ports = 1 num_w_ports = 0 tech_name = "sky130" -nominal_corners_only = True +nominal_corner_only = True route_supplies = True check_lvsdrc = True diff --git a/compiler/example_configs/riscv-sky130-4kbyte.py b/compiler/example_configs/riscv-sky130-4kbyte.py index 2d870e88..815f2105 100644 --- a/compiler/example_configs/riscv-sky130-4kbyte.py +++ b/compiler/example_configs/riscv-sky130-4kbyte.py @@ -9,7 +9,7 @@ num_r_ports = 1 num_w_ports = 0 tech_name = "sky130" -nominal_corners_only = True +nominal_corner_only = True route_supplies = True check_lvsdrc = True From 5c1250191c6a59c723eddebace56987989e0c17c Mon Sep 17 00:00:00 2001 From: Tim 'mithro' Ansell Date: Sat, 31 Oct 2020 15:49:18 -0700 Subject: [PATCH 22/67] Fixup the bitcell.py to make subclassing work. Read in the GDS properties inside the __init__ method. Signed-off-by: Tim 'mithro' Ansell --- compiler/bitcells/bitcell.py | 36 +++++++++++++++++++++--------------- 1 file changed, 21 insertions(+), 15 deletions(-) diff --git a/compiler/bitcells/bitcell.py b/compiler/bitcells/bitcell.py index 5a987ca4..94a11ff1 100644 --- a/compiler/bitcells/bitcell.py +++ b/compiler/bitcells/bitcell.py @@ -20,29 +20,35 @@ class bitcell(bitcell_base.bitcell_base): library. """ + name = "cell_6t" + pin_names = [ + props.bitcell.cell_6t.pin.bl, + props.bitcell.cell_6t.pin.br, + props.bitcell.cell_6t.pin.wl, + props.bitcell.cell_6t.pin.vdd, + props.bitcell.cell_6t.pin.gnd, + ] + + # If we have a split WL bitcell, if not be backwards # compatible in the tech file - pin_names = [props.bitcell.cell_6t.pin.bl, - props.bitcell.cell_6t.pin.br, - props.bitcell.cell_6t.pin.wl, - props.bitcell.cell_6t.pin.vdd, - props.bitcell.cell_6t.pin.gnd] type_list = ["OUTPUT", "OUTPUT", "INPUT", "POWER", "GROUND"] storage_nets = ['Q', 'Q_bar'] - (width, height) = utils.get_libcell_size("cell_6t", - GDS["unit"], - layer["boundary"]) - pin_map = utils.get_libcell_pins(pin_names, "cell_6t", GDS["unit"]) - def __init__(self, name=""): - # Ignore the name argument - bitcell_base.bitcell_base.__init__(self, "cell_6t") + bitcell_base.bitcell_base.__init__(self, name) debug.info(2, "Create bitcell") - self.width = bitcell.width - self.height = bitcell.height - self.pin_map = bitcell.pin_map + (width, height) = utils.get_libcell_size(name, + GDS["unit"], + layer["boundary"]) + pin_map = utils.get_libcell_pins(self.pin_names, + name, + GDS["unit"]) + + self.width = width + self.height = height + self.pin_map = pin_map self.add_pin_types(self.type_list) self.nets_match = self.do_nets_exist(self.storage_nets) From 6514bcb4c1d49fa1dcb3204094af26ed7dd676e6 Mon Sep 17 00:00:00 2001 From: Tim 'mithro' Ansell Date: Sat, 31 Oct 2020 16:08:01 -0700 Subject: [PATCH 23/67] Use default bitcell name if one isn't provided. Signed-off-by: Tim 'mithro' Ansell --- compiler/bitcells/bitcell.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/compiler/bitcells/bitcell.py b/compiler/bitcells/bitcell.py index 94a11ff1..32201057 100644 --- a/compiler/bitcells/bitcell.py +++ b/compiler/bitcells/bitcell.py @@ -36,6 +36,9 @@ class bitcell(bitcell_base.bitcell_base): storage_nets = ['Q', 'Q_bar'] def __init__(self, name=""): + if not name: + name = self.name + bitcell_base.bitcell_base.__init__(self, name) debug.info(2, "Create bitcell") From 95d77119c79f71450e49d52bebc7f98dd658a37b Mon Sep 17 00:00:00 2001 From: Tim 'mithro' Ansell Date: Sat, 31 Oct 2020 16:08:59 -0700 Subject: [PATCH 24/67] Add caches to GDS related functions in utils.py * Cache the GDS reader. * Cache the properties (size / pins / etc) measured from the GDS files. Signed-off-by: Tim 'mithro' Ansell --- compiler/base/utils.py | 96 +++++++++++++++++++++++++++--------------- 1 file changed, 62 insertions(+), 34 deletions(-) diff --git a/compiler/base/utils.py b/compiler/base/utils.py index b476e778..33b9b8c4 100644 --- a/compiler/base/utils.py +++ b/compiler/base/utils.py @@ -4,10 +4,12 @@ # of Regents for the Oklahoma Agricultural and Mechanical College # (acting for and on behalf of Oklahoma State University) # All rights reserved. -# + +import os +import math + import gdsMill import tech -import math import globals import debug from vector import vector @@ -57,10 +59,11 @@ def auto_measure_libcell(pin_list, name, units, lpp): Return these as a set of properties including the cell width/height too. """ cell_gds = OPTS.openram_tech + "gds_lib/" + str(name) + ".gds" - cell_vlsi = gdsMill.VlsiLayout(units=units) - reader = gdsMill.Gds2reader(cell_vlsi) - reader.loadFromFile(cell_gds) + cell_vlsi = _get_gds_reader(units, cell_gds) + + # FIXME: This duplicates a lot of functionality of get_gds_size and + # get_gds_pins, it should probably just call those functions? cell = {} measure_result = cell_vlsi.getLayoutBorder(lpp[0]) if measure_result: @@ -73,22 +76,45 @@ def auto_measure_libcell(pin_list, name, units, lpp): return cell +_GDS_READER_CACHE = {} + +def _get_gds_reader(units, gds_filename): + gds_absname = os.path.realpath(gds_filename) + k = (units, gds_absname) + try: + return _GDS_READER_CACHE[k] + except KeyError: + debug.info(4, "Creating VLSI layout from {}".format(gds_absname)) + cell_vlsi = gdsMill.VlsiLayout(units=units) + reader = gdsMill.Gds2reader(cell_vlsi) + reader.loadFromFile(gds_absname) + + _GDS_READER_CACHE[k] = cell_vlsi + return cell_vlsi + + +_GDS_SIZE_CACHE = {} + def get_gds_size(name, gds_filename, units, lpp): """ Open a GDS file and return the size from either the bounding box or a border layer. """ - debug.info(4, "Creating VLSI layout for {}".format(name)) - cell_vlsi = gdsMill.VlsiLayout(units=units) - reader = gdsMill.Gds2reader(cell_vlsi) - reader.loadFromFile(gds_filename) + k = (name, os.path.realpath(gds_filename), units, lpp) + try: + return _GDS_SIZE_CACHE[k] + except KeyError: + cell_vlsi = _get_gds_reader(units, gds_filename) - measure_result = cell_vlsi.getLayoutBorder(lpp) - if not measure_result: - debug.info(2, "Layout border failed. Trying to measure size for {}".format(name)) - measure_result = cell_vlsi.measureSize(name) - # returns width,height - return measure_result + measure_result = cell_vlsi.getLayoutBorder(lpp) + if not measure_result: + debug.info(2, "Layout border failed. Trying to measure size for {}".format(name)) + measure_result = cell_vlsi.measureSize(name) + + _GDS_SIZE_CACHE[k] = measure_result + + # returns width,height + return measure_result def get_libcell_size(name, units, lpp): @@ -101,27 +127,33 @@ def get_libcell_size(name, units, lpp): return(get_gds_size(name, cell_gds, units, lpp)) +_GDS_PINS_CACHE = {} + def get_gds_pins(pin_names, name, gds_filename, units): """ Open a GDS file and find the pins in pin_names as text on a given layer. Return these as a rectangle layer pair for each pin. """ - cell_vlsi = gdsMill.VlsiLayout(units=units) - reader = gdsMill.Gds2reader(cell_vlsi) - reader.loadFromFile(gds_filename) + k = (tuple(pin_names), name, os.path.realpath(gds_filename), units) + try: + return dict(_GDS_PINS_CACHE[k]) + except KeyError: + cell_vlsi = _get_gds_reader(units, gds_filename) - cell = {} - for pin_name in pin_names: - cell[str(pin_name)] = [] - pin_list = cell_vlsi.getPinShape(str(pin_name)) - for pin_shape in pin_list: - (lpp, boundary) = pin_shape - rect = [vector(boundary[0], boundary[1]), - vector(boundary[2], boundary[3])] - # this is a list because other cells/designs - # may have must-connect pins - cell[str(pin_name)].append(pin_layout(pin_name, rect, lpp)) - return cell + cell = {} + for pin_name in pin_names: + cell[str(pin_name)] = [] + pin_list = cell_vlsi.getPinShape(str(pin_name)) + for pin_shape in pin_list: + (lpp, boundary) = pin_shape + rect = [vector(boundary[0], boundary[1]), + vector(boundary[2], boundary[3])] + # this is a list because other cells/designs + # may have must-connect pins + cell[str(pin_name)].append(pin_layout(pin_name, rect, lpp)) + + _GDS_PINS_CACHE[k] = cell + return dict(cell) def get_libcell_pins(pin_list, name, units): @@ -132,7 +164,3 @@ def get_libcell_pins(pin_list, name, units): cell_gds = OPTS.openram_tech + "gds_lib/" + str(name) + ".gds" return(get_gds_pins(pin_list, name, cell_gds, units)) - - - - From 232f754c73ae6acd0f8b35d38a8e1ec6ef7972ea Mon Sep 17 00:00:00 2001 From: Tim 'mithro' Ansell Date: Mon, 2 Nov 2020 08:36:46 -0800 Subject: [PATCH 25/67] Adding traceback printing to tech file import. --- compiler/globals.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/compiler/globals.py b/compiler/globals.py index 1f3244fe..98196254 100644 --- a/compiler/globals.py +++ b/compiler/globals.py @@ -514,7 +514,9 @@ def import_tech(): sys.path.append(tech_path) try: import tech - except ImportError: + except ImportError as e: + import traceback + traceback.print_exc() debug.error("Could not load tech module.", -1) # Add custom modules of the technology to the path, if they exist From bb164d915daaa435c941c3e68a0d4818990e0e97 Mon Sep 17 00:00:00 2001 From: Tim 'mithro' Ansell Date: Mon, 2 Nov 2020 10:03:52 -0800 Subject: [PATCH 26/67] Allow overriding the cell size layer name. --- compiler/bitcells/bitcell.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/compiler/bitcells/bitcell.py b/compiler/bitcells/bitcell.py index 32201057..74d39550 100644 --- a/compiler/bitcells/bitcell.py +++ b/compiler/bitcells/bitcell.py @@ -35,6 +35,8 @@ class bitcell(bitcell_base.bitcell_base): type_list = ["OUTPUT", "OUTPUT", "INPUT", "POWER", "GROUND"] storage_nets = ['Q', 'Q_bar'] + cell_size_layer = "boundary" + def __init__(self, name=""): if not name: name = self.name @@ -44,7 +46,7 @@ class bitcell(bitcell_base.bitcell_base): (width, height) = utils.get_libcell_size(name, GDS["unit"], - layer["boundary"]) + layer[self.cell_size_layer]) pin_map = utils.get_libcell_pins(self.pin_names, name, GDS["unit"]) From 1caecf5a69d50dd1532cc96595ba4deee8722a66 Mon Sep 17 00:00:00 2001 From: mrg Date: Mon, 2 Nov 2020 10:44:49 -0800 Subject: [PATCH 27/67] Undo version and traceback --- compiler/globals.py | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/compiler/globals.py b/compiler/globals.py index 98196254..3ebb2c11 100644 --- a/compiler/globals.py +++ b/compiler/globals.py @@ -19,7 +19,7 @@ import re import copy import importlib -VERSION = "1.1.7" +VERSION = "1.1.6" NAME = "OpenRAM v{}".format(VERSION) USAGE = "openram.py [options] \nUse -h for help.\n" @@ -514,9 +514,7 @@ def import_tech(): sys.path.append(tech_path) try: import tech - except ImportError as e: - import traceback - traceback.print_exc() + except ImportError: debug.error("Could not load tech module.", -1) # Add custom modules of the technology to the path, if they exist From fa89b73ef84dedc5b95cb2ce5497fbd1b7da9c22 Mon Sep 17 00:00:00 2001 From: mrg Date: Mon, 2 Nov 2020 16:00:16 -0800 Subject: [PATCH 28/67] PR from mithro + other changable GDS file names --- compiler/base/contact.py | 2 +- compiler/base/design.py | 6 ++- compiler/base/geometry.py | 6 +-- compiler/base/hierarchy_design.py | 31 +++++++------- compiler/base/hierarchy_layout.py | 7 ++-- compiler/base/hierarchy_spice.py | 22 +++++----- compiler/base/utils.py | 2 + compiler/bitcells/bitcell.py | 42 +++++-------------- compiler/bitcells/bitcell_1rw_1r.py | 24 ++++------- compiler/bitcells/bitcell_1w_1r.py | 23 ++++------ compiler/bitcells/bitcell_base.py | 18 ++++++-- compiler/bitcells/col_cap_bitcell_1rw_1r.py | 20 ++------- compiler/bitcells/dummy_bitcell.py | 22 ++++------ compiler/bitcells/dummy_bitcell_1rw_1r.py | 21 +++------- compiler/bitcells/dummy_bitcell_1w_1r.py | 21 +++------- compiler/bitcells/dummy_pbitcell.py | 15 +++---- compiler/bitcells/pbitcell.py | 2 +- compiler/bitcells/replica_bitcell.py | 31 +++++++------- compiler/bitcells/replica_bitcell_1rw_1r.py | 21 ++++------ compiler/bitcells/replica_bitcell_1w_1r.py | 21 ++++------ compiler/bitcells/replica_pbitcell.py | 15 +++---- compiler/bitcells/row_cap_bitcell_1rw_1r.py | 18 +------- compiler/custom/dff.py | 20 +++++---- compiler/custom/inv_dec.py | 20 +++++---- compiler/custom/nand2_dec.py | 20 +++++---- compiler/custom/nand3_dec.py | 20 +++++---- compiler/custom/nand4_dec.py | 20 +++++---- compiler/custom/tri_gate.py | 22 ++++++---- compiler/custom/write_driver.py | 27 ++++++------ compiler/globals.py | 9 +++- compiler/modules/replica_column.py | 4 +- compiler/modules/sense_amp.py | 34 ++++++++------- compiler/sram/sram_config.py | 2 +- compiler/sram_factory.py | 2 +- .../tests/06_hierarchical_decoder_test.py | 5 +-- .../06_hierarchical_predecode4x16_test.py | 2 +- .../tests/18_port_data_wmask_1rw_1r_test.py | 4 +- compiler/tests/18_port_data_wmask_test.py | 4 +- 38 files changed, 275 insertions(+), 330 deletions(-) diff --git a/compiler/base/contact.py b/compiler/base/contact.py index 60d3c840..a02e6066 100644 --- a/compiler/base/contact.py +++ b/compiler/base/contact.py @@ -34,7 +34,7 @@ class contact(hierarchy_design.hierarchy_design): # This will ignore the name parameter since # we can guarantee a unique name here - super().__init__(name) + super().__init__(name, name) debug.info(4, "create contact object {0}".format(name)) self.add_comment("layers: {0}".format(layer_stack)) diff --git a/compiler/base/design.py b/compiler/base/design.py index 90364658..714eaf8b 100644 --- a/compiler/base/design.py +++ b/compiler/base/design.py @@ -20,8 +20,10 @@ class design(hierarchy_design): """ - def __init__(self, name): - super().__init__(name) + def __init__(self, name, cell_name=None): + if not cell_name: + cell_name = name + super().__init__(name, cell_name) self.setup_multiport_constants() diff --git a/compiler/base/geometry.py b/compiler/base/geometry.py index 0ba8e858..2cb6e897 100644 --- a/compiler/base/geometry.py +++ b/compiler/base/geometry.py @@ -227,7 +227,7 @@ class instance(geometry): self.mod.gds_write_file(self.gds) # now write an instance of my module/structure new_layout.addInstance(self.gds, - self.mod.name, + self.mod.cell_name, offsetInMicrons=self.offset, mirror=self.mirror, rotate=self.rotate) @@ -402,11 +402,11 @@ class instance(geometry): def __str__(self): """ override print function output """ - return "( inst: " + self.name + " @" + str(self.offset) + " mod=" + self.mod.name + " " + self.mirror + " R=" + str(self.rotate) + ")" + return "( inst: " + self.name + " @" + str(self.offset) + " mod=" + self.mod.cell_name + " " + self.mirror + " R=" + str(self.rotate) + ")" def __repr__(self): """ override print function output """ - return "( inst: " + self.name + " @" + str(self.offset) + " mod=" + self.mod.name + " " + self.mirror + " R=" + str(self.rotate) + ")" + return "( inst: " + self.name + " @" + str(self.offset) + " mod=" + self.mod.cell_name + " " + self.mirror + " R=" + str(self.rotate) + ")" class path(geometry): diff --git a/compiler/base/hierarchy_design.py b/compiler/base/hierarchy_design.py index b4b0ef72..d453297a 100644 --- a/compiler/base/hierarchy_design.py +++ b/compiler/base/hierarchy_design.py @@ -20,9 +20,9 @@ class hierarchy_design(hierarchy_spice.spice, hierarchy_layout.layout): """ name_map = [] - def __init__(self, name): - self.gds_file = OPTS.openram_tech + "gds_lib/" + name + ".gds" - self.sp_file = OPTS.openram_tech + "sp_lib/" + name + ".sp" + def __init__(self, name, cell_name): + self.gds_file = OPTS.openram_tech + "gds_lib/" + cell_name + ".gds" + self.sp_file = OPTS.openram_tech + "sp_lib/" + cell_name + ".sp" # If we have a separate lvs directory, then all the lvs files # should be in there (all or nothing!) @@ -41,8 +41,9 @@ class hierarchy_design(hierarchy_spice.spice, hierarchy_layout.layout): self.lvs_errors = "skipped" self.name = name - hierarchy_spice.spice.__init__(self, name) - hierarchy_layout.layout.__init__(self, name) + self.cell_name = cell_name + hierarchy_spice.spice.__init__(self, name, cell_name) + hierarchy_layout.layout.__init__(self, name, cell_name) self.init_graph_params() def get_layout_pins(self, inst): @@ -76,17 +77,17 @@ class hierarchy_design(hierarchy_spice.spice, hierarchy_layout.layout): self.lvs_write(tempspice) self.gds_write(tempgds) # Final verification option does not allow nets to be connected by label. - self.drc_errors = verify.run_drc(self.name, tempgds, extract=True, final_verification=final_verification) - self.lvs_errors = verify.run_lvs(self.name, tempgds, tempspice, final_verification=final_verification) + self.drc_errors = verify.run_drc(self.cell_name, tempgds, extract=True, final_verification=final_verification) + self.lvs_errors = verify.run_lvs(self.cell_name, tempgds, tempspice, final_verification=final_verification) # force_check is used to determine decoder height and other things, so we shouldn't fail # if that flag is set if OPTS.inline_lvsdrc and not force_check: debug.check(self.drc_errors == 0, - "DRC failed for {0} with {1} error(s)".format(self.name, + "DRC failed for {0} with {1} error(s)".format(self.cell_name, self.drc_errors)) debug.check(self.lvs_errors == 0, - "LVS failed for {0} with {1} errors(s)".format(self.name, + "LVS failed for {0} with {1} errors(s)".format(self.cell_name, self.lvs_errors)) if OPTS.purge_temp: @@ -104,11 +105,11 @@ class hierarchy_design(hierarchy_spice.spice, hierarchy_layout.layout): if OPTS.netlist_only: return elif (not OPTS.is_unit_test and OPTS.check_lvsdrc and (OPTS.inline_lvsdrc or final_verification)): - tempgds = "{0}/{1}.gds".format(OPTS.openram_temp, self.name) + tempgds = "{0}/{1}.gds".format(OPTS.openram_temp, self.cell_name) self.gds_write(tempgds) - num_errors = verify.run_drc(self.name, tempgds, final_verification=final_verification) + num_errors = verify.run_drc(self.cell_name, tempgds, final_verification=final_verification) debug.check(num_errors == 0, - "DRC failed for {0} with {1} error(s)".format(self.name, + "DRC failed for {0} with {1} error(s)".format(self.cell_name, num_errors)) if OPTS.purge_temp: @@ -125,13 +126,13 @@ class hierarchy_design(hierarchy_spice.spice, hierarchy_layout.layout): if OPTS.netlist_only: return elif (not OPTS.is_unit_test and OPTS.check_lvsdrc and (OPTS.inline_lvsdrc or final_verification)): - tempspice = "{0}/{1}.sp".format(OPTS.openram_temp, self.name) + tempspice = "{0}/{1}.sp".format(OPTS.openram_temp, self.cell_name) tempgds = "{0}/{1}.gds".format(OPTS.openram_temp, self.name) self.lvs_write(tempspice) self.gds_write(tempgds) num_errors = verify.run_lvs(self.name, tempgds, tempspice, final_verification=final_verification) debug.check(num_errors == 0, - "LVS failed for {0} with {1} error(s)".format(self.name, + "LVS failed for {0} with {1} error(s)".format(self.cell_name, num_errors)) if OPTS.purge_temp: os.remove(tempspice) @@ -217,7 +218,7 @@ class hierarchy_design(hierarchy_spice.spice, hierarchy_layout.layout): pins = ",".join(self.pins) insts = [" {}".format(x) for x in self.insts] objs = [" {}".format(x) for x in self.objs] - s = "********** design {0} **********".format(self.name) + s = "********** design {0} **********".format(self.cell_name) s += "\n pins ({0})={1}\n".format(len(self.pins), pins) s += "\n objs ({0})=\n{1}\n".format(len(self.objs), "\n".join(objs)) s += "\n insts ({0})=\n{1}\n".format(len(self.insts), "\n".join(insts)) diff --git a/compiler/base/hierarchy_layout.py b/compiler/base/hierarchy_layout.py index 7fe838cb..040af129 100644 --- a/compiler/base/hierarchy_layout.py +++ b/compiler/base/hierarchy_layout.py @@ -30,8 +30,9 @@ class layout(): layout/netlist and perform LVS/DRC. """ - def __init__(self, name): + def __init__(self, name, cell_name): self.name = name + self.cell_name = cell_name self.width = None self.height = None self.bounding_box = None @@ -214,7 +215,7 @@ class layout(): # Contacts are not really instances, so skip them if "contact" not in mod.name: # Check that the instance name is unique - debug.check(name not in self.inst_names, "Duplicate named instance in {0}: {1}".format(self.name, name)) + debug.check(name not in self.inst_names, "Duplicate named instance in {0}: {1}".format(self.cell_name, name)) self.inst_names.add(name) self.insts.append(geometry.instance(name, mod, offset, mirror, rotate)) @@ -315,7 +316,7 @@ class layout(): return any_pin except Exception: self.gds_write("missing_pin.gds") - debug.error("No pin found with name {0} on {1}. Saved as missing_pin.gds.".format(text, self.name), -1) + debug.error("No pin found with name {0} on {1}. Saved as missing_pin.gds.".format(text, self.cell_name), -1) def get_pins(self, text): """ diff --git a/compiler/base/hierarchy_spice.py b/compiler/base/hierarchy_spice.py index 08e2b474..c1271ee7 100644 --- a/compiler/base/hierarchy_spice.py +++ b/compiler/base/hierarchy_spice.py @@ -10,6 +10,7 @@ import re import os import math import tech +from pprint import pformat from delay_data import delay_data from wire_spice_model import wire_spice_model from power_data import power_data @@ -26,8 +27,9 @@ class spice(): Class consisting of a set of modules and instances of these modules """ - def __init__(self, name): + def __init__(self, name, cell_name): self.name = name + self.cell_name = cell_name self.valid_signal_types = ["INOUT", "INPUT", "OUTPUT", "POWER", "GROUND"] # Holds subckts/mods for this module @@ -164,7 +166,6 @@ class spice(): num_pins = len(self.insts[-1].mod.pins) num_args = len(args) if (check and num_pins != num_args): - from pprint import pformat if num_pins < num_args: mod_pins = self.insts[-1].mod.pins + [""] * (num_args - num_pins) arg_pins = args @@ -181,7 +182,6 @@ class spice(): self.conns.append(args) if check and (len(self.insts)!=len(self.conns)): - from pprint import pformat insts_string=pformat(self.insts) conns_string=pformat(self.conns) @@ -214,7 +214,7 @@ class spice(): f.close() # find the correct subckt line in the file - subckt = re.compile("^.subckt {}".format(self.name), re.IGNORECASE) + subckt = re.compile("^.subckt {}".format(self.cell_name), re.IGNORECASE) subckt_line = list(filter(subckt.search, self.spice))[0] # parses line into ports and remove subckt self.pins = subckt_line.split(" ")[2:] @@ -234,7 +234,7 @@ class spice(): # pins and subckt should be the same # find the correct subckt line in the file - subckt = re.compile("^.subckt {}".format(self.name), re.IGNORECASE) + subckt = re.compile("^.subckt {}".format(self.cell_name), re.IGNORECASE) subckt_line = list(filter(subckt.search, self.lvs))[0] # parses line into ports and remove subckt lvs_pins = subckt_line.split(" ")[2:] @@ -293,7 +293,7 @@ class spice(): return # write out the first spice line (the subcircuit) - sp.write("\n.SUBCKT {0} {1}\n".format(self.name, + sp.write("\n.SUBCKT {0} {1}\n".format(self.cell_name, " ".join(self.pins))) for pin in self.pins: @@ -304,7 +304,7 @@ class spice(): # every instance must have a set of connections, even if it is empty. if len(self.insts) != len(self.conns): - debug.error("{0} : Not all instance pins ({1}) are connected ({2}).".format(self.name, + debug.error("{0} : Not all instance pins ({1}) are connected ({2}).".format(self.cell_name, len(self.insts), len(self.conns))) debug.error("Instances: \n" + str(self.insts)) @@ -330,9 +330,9 @@ class spice(): else: sp.write("X{0} {1} {2}\n".format(self.insts[i].name, " ".join(self.conns[i]), - self.insts[i].mod.name)) + self.insts[i].mod.cell_name)) - sp.write(".ENDS {0}\n".format(self.name)) + sp.write(".ENDS {0}\n".format(self.cell_name)) else: # If spice is a hard module, output the spice file contents. @@ -390,7 +390,7 @@ class spice(): .format(self.__class__.__name__)) debug.warning("Class {0} name {1}" .format(self.__class__.__name__, - self.name)) + self.cell_name)) return None def get_cin(self): @@ -408,7 +408,7 @@ class spice(): .format(self.__class__.__name__)) debug.warning("Class {0} name {1}" .format(self.__class__.__name__, - self.name)) + self.cell_name)) return 0 def cal_delay_with_rc(self, corner, r, c, slew, swing=0.5): diff --git a/compiler/base/utils.py b/compiler/base/utils.py index 33b9b8c4..19ca98bd 100644 --- a/compiler/base/utils.py +++ b/compiler/base/utils.py @@ -95,6 +95,7 @@ def _get_gds_reader(units, gds_filename): _GDS_SIZE_CACHE = {} + def get_gds_size(name, gds_filename, units, lpp): """ Open a GDS file and return the size from either the @@ -129,6 +130,7 @@ def get_libcell_size(name, units, lpp): _GDS_PINS_CACHE = {} + def get_gds_pins(pin_names, name, gds_filename, units): """ Open a GDS file and find the pins in pin_names as text on a given layer. diff --git a/compiler/bitcells/bitcell.py b/compiler/bitcells/bitcell.py index 74d39550..66809c65 100644 --- a/compiler/bitcells/bitcell.py +++ b/compiler/bitcells/bitcell.py @@ -6,9 +6,8 @@ # All rights reserved. # import debug -import utils -from tech import GDS, layer from tech import cell_properties as props +from globals import OPTS import bitcell_base @@ -20,41 +19,20 @@ class bitcell(bitcell_base.bitcell_base): library. """ - name = "cell_6t" - pin_names = [ - props.bitcell.cell_6t.pin.bl, - props.bitcell.cell_6t.pin.br, - props.bitcell.cell_6t.pin.wl, - props.bitcell.cell_6t.pin.vdd, - props.bitcell.cell_6t.pin.gnd, - ] - - - # If we have a split WL bitcell, if not be backwards - # compatible in the tech file + pin_names = [props.bitcell.cell_6t.pin.bl, + props.bitcell.cell_6t.pin.br, + props.bitcell.cell_6t.pin.wl, + props.bitcell.cell_6t.pin.vdd, + props.bitcell.cell_6t.pin.gnd] type_list = ["OUTPUT", "OUTPUT", "INPUT", "POWER", "GROUND"] storage_nets = ['Q', 'Q_bar'] - cell_size_layer = "boundary" - - def __init__(self, name=""): - if not name: - name = self.name - - bitcell_base.bitcell_base.__init__(self, name) + def __init__(self, name, cell_name=None): + if not cell_name: + cell_name = OPTS.bitcell_name + bitcell_base.bitcell_base.__init__(self, name, cell_name) debug.info(2, "Create bitcell") - (width, height) = utils.get_libcell_size(name, - GDS["unit"], - layer[self.cell_size_layer]) - pin_map = utils.get_libcell_pins(self.pin_names, - name, - GDS["unit"]) - - self.width = width - self.height = height - self.pin_map = pin_map - self.add_pin_types(self.type_list) self.nets_match = self.do_nets_exist(self.storage_nets) def get_all_wl_names(self): diff --git a/compiler/bitcells/bitcell_1rw_1r.py b/compiler/bitcells/bitcell_1rw_1r.py index 820adcce..0b5c5bde 100644 --- a/compiler/bitcells/bitcell_1rw_1r.py +++ b/compiler/bitcells/bitcell_1rw_1r.py @@ -6,11 +6,9 @@ # All rights reserved. # import debug -import utils -from tech import GDS, layer, parameter, drc from tech import cell_properties as props -import logical_effort import bitcell_base +from globals import OPTS class bitcell_1rw_1r(bitcell_base.bitcell_base): @@ -29,27 +27,19 @@ class bitcell_1rw_1r(bitcell_base.bitcell_base): props.bitcell.cell_1rw1r.pin.wl1, props.bitcell.cell_1rw1r.pin.vdd, props.bitcell.cell_1rw1r.pin.gnd] - type_list = ["OUTPUT", "OUTPUT", "OUTPUT", "OUTPUT", "INPUT", "INPUT", "POWER", "GROUND"] storage_nets = ['Q', 'Q_bar'] - (width, height) = utils.get_libcell_size("cell_1rw_1r", - GDS["unit"], - layer["boundary"]) - pin_map = utils.get_libcell_pins(pin_names, "cell_1rw_1r", GDS["unit"]) - - def __init__(self, name=""): - # Ignore the name argument - bitcell_base.bitcell_base.__init__(self, "cell_1rw_1r") + + def __init__(self, name, cell_name=None): + if not cell_name: + cell_name = OPTS.bitcell_name + bitcell_base.bitcell_base.__init__(self, name, cell_name) debug.info(2, "Create bitcell with 1RW and 1R Port") - self.width = bitcell_1rw_1r.width - self.height = bitcell_1rw_1r.height - self.pin_map = bitcell_1rw_1r.pin_map - self.add_pin_types(self.type_list) self.nets_match = self.do_nets_exist(self.storage_nets) - pin_names = bitcell_1rw_1r.pin_names + pin_names = self.pin_names self.bl_names = [pin_names[0], pin_names[2]] self.br_names = [pin_names[1], pin_names[3]] self.wl_names = [pin_names[4], pin_names[5]] diff --git a/compiler/bitcells/bitcell_1w_1r.py b/compiler/bitcells/bitcell_1w_1r.py index 56bd0b45..2f6bad5b 100644 --- a/compiler/bitcells/bitcell_1w_1r.py +++ b/compiler/bitcells/bitcell_1w_1r.py @@ -6,10 +6,9 @@ # All rights reserved. # import debug -import utils -from tech import GDS, layer from tech import cell_properties as props import bitcell_base +from globals import OPTS class bitcell_1w_1r(bitcell_base.bitcell_base): @@ -31,28 +30,20 @@ class bitcell_1w_1r(bitcell_base.bitcell_base): type_list = ["OUTPUT", "OUTPUT", "INPUT", "INPUT", "INPUT", "INPUT", "POWER", "GROUND"] storage_nets = ['Q', 'Q_bar'] - (width, height) = utils.get_libcell_size("cell_1w_1r", - GDS["unit"], - layer["boundary"]) - pin_map = utils.get_libcell_pins(pin_names, "cell_1w_1r", GDS["unit"]) - - def __init__(self, name=""): - # Ignore the name argument - bitcell_base.bitcell_base.__init__(self, "cell_1w_1r") + + def __init__(self, name, cell_name): + if not cell_name: + cell_name = OPTS.bitcell_name + bitcell_base.bitcell_base.__init__(self, name, cell_name) debug.info(2, "Create bitcell with 1W and 1R Port") - self.width = bitcell_1w_1r.width - self.height = bitcell_1w_1r.height - self.pin_map = bitcell_1w_1r.pin_map - self.add_pin_types(self.type_list) self.nets_match = self.do_nets_exist(self.storage_nets) - pin_names = bitcell_1w_1r.pin_names + pin_names = self.pin_names self.bl_names = [pin_names[0], pin_names[2]] self.br_names = [pin_names[1], pin_names[3]] self.wl_names = [pin_names[4], pin_names[5]] - def get_bitcell_pins(self, col, row): """ Creates a list of connections in the bitcell, diff --git a/compiler/bitcells/bitcell_base.py b/compiler/bitcells/bitcell_base.py index 690e98fa..6d85fde0 100644 --- a/compiler/bitcells/bitcell_base.py +++ b/compiler/bitcells/bitcell_base.py @@ -8,18 +8,30 @@ import debug import design +import utils from globals import OPTS import logical_effort -from tech import parameter, drc, layer +from tech import GDS, parameter, drc, layer class bitcell_base(design.design): """ Base bitcell parameters to be over-riden. """ - def __init__(self, name): - design.design.__init__(self, name) + cell_size_layer = "boundary" + + def __init__(self, name, cell_name, hard_cell=True): + design.design.__init__(self, name, cell_name) + if hard_cell: + (self.width, self.height) = utils.get_libcell_size(cell_name, + GDS["unit"], + layer[self.cell_size_layer]) + self.pin_map = utils.get_libcell_pins(self.pin_names, + cell_name, + GDS["unit"]) + self.add_pin_types(self.type_list) + def get_stage_effort(self, load): parasitic_delay = 1 # This accounts for bitline being drained diff --git a/compiler/bitcells/col_cap_bitcell_1rw_1r.py b/compiler/bitcells/col_cap_bitcell_1rw_1r.py index 01818a12..a611965f 100644 --- a/compiler/bitcells/col_cap_bitcell_1rw_1r.py +++ b/compiler/bitcells/col_cap_bitcell_1rw_1r.py @@ -6,8 +6,6 @@ # All rights reserved. # import debug -import utils -from tech import GDS, layer from tech import cell_properties as props import bitcell_base @@ -21,24 +19,12 @@ class col_cap_bitcell_1rw_1r(bitcell_base.bitcell_base): props.bitcell.cell_1rw1r.pin.bl1, props.bitcell.cell_1rw1r.pin.br1, props.bitcell.cell_1rw1r.pin.vdd] - type_list = ["OUTPUT", "OUTPUT", "OUTPUT", "OUTPUT", "POWER", "GROUND"] - - (width, height) = utils.get_libcell_size("col_cap_cell_1rw_1r", - GDS["unit"], - layer["boundary"]) - pin_map = utils.get_libcell_pins(pin_names, - "col_cap_cell_1rw_1r", - GDS["unit"]) - - def __init__(self, name=""): + + def __init__(self, name="col_cap_cell_1rw_1r"): # Ignore the name argument - bitcell_base.bitcell_base.__init__(self, "col_cap_cell_1rw_1r") + bitcell_base.bitcell_base.__init__(self, name) debug.info(2, "Create col_cap bitcell 1rw+1r object") - self.width = col_cap_bitcell_1rw_1r.width - self.height = col_cap_bitcell_1rw_1r.height - self.pin_map = col_cap_bitcell_1rw_1r.pin_map - self.add_pin_types(self.type_list) self.no_instances = True diff --git a/compiler/bitcells/dummy_bitcell.py b/compiler/bitcells/dummy_bitcell.py index 116ea3ed..7bf8a782 100644 --- a/compiler/bitcells/dummy_bitcell.py +++ b/compiler/bitcells/dummy_bitcell.py @@ -6,10 +6,9 @@ # All rights reserved. # import debug -import utils -from tech import GDS, layer from tech import cell_properties as props import bitcell_base +from globals import OPTS class dummy_bitcell(bitcell_base.bitcell_base): @@ -24,19 +23,12 @@ class dummy_bitcell(bitcell_base.bitcell_base): props.bitcell.cell_6t.pin.wl, props.bitcell.cell_6t.pin.vdd, props.bitcell.cell_6t.pin.gnd] - - (width, height) = utils.get_libcell_size("dummy_cell_6t", - GDS["unit"], - layer["boundary"]) - pin_map = utils.get_libcell_pins(pin_names, "dummy_cell_6t", GDS["unit"]) - - def __init__(self, name=""): - # Ignore the name argument - bitcell_base.bitcell_base.__init__(self, "dummy_cell_6t") + type_list = ["OUTPUT", "OUTPUT", "INPUT", "POWER", "GROUND"] + + def __init__(self, name, cell_name=None): + if not cell_name: + cell_name = OPTS.dummy_bitcell_name + bitcell_base.bitcell_base.__init__(self, name, cell_name) debug.info(2, "Create dummy bitcell") - self.width = dummy_bitcell.width - self.height = dummy_bitcell.height - self.pin_map = dummy_bitcell.pin_map - diff --git a/compiler/bitcells/dummy_bitcell_1rw_1r.py b/compiler/bitcells/dummy_bitcell_1rw_1r.py index d29c804f..0a6203f7 100644 --- a/compiler/bitcells/dummy_bitcell_1rw_1r.py +++ b/compiler/bitcells/dummy_bitcell_1rw_1r.py @@ -6,10 +6,9 @@ # All rights reserved. # import debug -import utils -from tech import GDS, layer from tech import cell_properties as props import bitcell_base +from globals import OPTS class dummy_bitcell_1rw_1r(bitcell_base.bitcell_base): @@ -27,23 +26,13 @@ class dummy_bitcell_1rw_1r(bitcell_base.bitcell_base): props.bitcell.cell_1rw1r.pin.wl1, props.bitcell.cell_1rw1r.pin.vdd, props.bitcell.cell_1rw1r.pin.gnd] - type_list = ["OUTPUT", "OUTPUT", "OUTPUT", "OUTPUT", "INPUT", "INPUT", "POWER", "GROUND"] - (width, height) = utils.get_libcell_size("dummy_cell_1rw_1r", - GDS["unit"], - layer["boundary"]) - pin_map = utils.get_libcell_pins(pin_names, - "dummy_cell_1rw_1r", - GDS["unit"]) - def __init__(self, name=""): - # Ignore the name argument - bitcell_base.bitcell_base.__init__(self, "dummy_cell_1rw_1r") + def __init__(self, name, cell_name=None): + if not cell_name: + cell_name = OPTS.dummy_bitcell_name + bitcell_base.bitcell_base.__init__(self, name, cell_name) debug.info(2, "Create dummy bitcell 1rw+1r object") - self.width = dummy_bitcell_1rw_1r.width - self.height = dummy_bitcell_1rw_1r.height - self.pin_map = dummy_bitcell_1rw_1r.pin_map - self.add_pin_types(self.type_list) diff --git a/compiler/bitcells/dummy_bitcell_1w_1r.py b/compiler/bitcells/dummy_bitcell_1w_1r.py index 758a5b16..a60f95ef 100644 --- a/compiler/bitcells/dummy_bitcell_1w_1r.py +++ b/compiler/bitcells/dummy_bitcell_1w_1r.py @@ -6,10 +6,9 @@ # All rights reserved. # import debug -import utils -from tech import GDS, layer from tech import cell_properties as props import bitcell_base +from globals import OPTS class dummy_bitcell_1w_1r(bitcell_base.bitcell_base): @@ -29,21 +28,13 @@ class dummy_bitcell_1w_1r(bitcell_base.bitcell_base): props.bitcell.cell_1w1r.pin.gnd] type_list = ["OUTPUT", "OUTPUT", "INPUT", "INPUT", "INPUT", "INPUT", "POWER", "GROUND"] - (width, height) = utils.get_libcell_size("dummy_cell_1w_1r", - GDS["unit"], - layer["boundary"]) - pin_map = utils.get_libcell_pins(pin_names, - "dummy_cell_1w_1r", - GDS["unit"]) - def __init__(self, name=""): - # Ignore the name argument - bitcell_base.bitcell_base.__init__(self, "dummy_cell_1w_1r") + def __init__(self, name, cell_name=None): + if not cell_name: + cell_name = OPTS.dummy_bitcell_name + bitcell_base.bitcell_base.__init__(self, name, cell_name) debug.info(2, "Create dummy bitcell 1w+1r object") - self.width = dummy_bitcell_1w_1r.width - self.height = dummy_bitcell_1w_1r.height - self.pin_map = dummy_bitcell_1w_1r.pin_map - self.add_pin_types(self.type_list) + diff --git a/compiler/bitcells/dummy_pbitcell.py b/compiler/bitcells/dummy_pbitcell.py index ead3d7f3..bdc98768 100644 --- a/compiler/bitcells/dummy_pbitcell.py +++ b/compiler/bitcells/dummy_pbitcell.py @@ -7,11 +7,11 @@ # import debug import design -from tech import drc, spice,parameter from vector import vector from globals import OPTS from sram_factory import factory + class dummy_pbitcell(design.design): """ Creates a replica bitcell using pbitcell @@ -23,7 +23,7 @@ class dummy_pbitcell(design.design): self.num_r_ports = OPTS.num_r_ports self.total_ports = self.num_rw_ports + self.num_w_ports + self.num_r_ports - design.design.__init__(self, name) + design.design.__init__(self, name, name) debug.info(1, "create a dummy bitcell using pbitcell with {0} rw ports, {1} w ports and {2} r ports".format(self.num_rw_ports, self.num_w_ports, self.num_r_ports)) @@ -54,7 +54,8 @@ class dummy_pbitcell(design.design): self.add_pin("gnd") def add_modules(self): - self.prbc = factory.create(module_type="pbitcell",dummy_bitcell=True) + self.prbc = factory.create(module_type="pbitcell", + dummy_bitcell=True) self.add_mod(self.prbc) self.height = self.prbc.height @@ -69,20 +70,20 @@ class dummy_pbitcell(design.design): temp.append("bl{}".format(port)) temp.append("br{}".format(port)) for port in range(self.total_ports): - temp.append("wl{}".format(port)) + temp.append("wl{}".format(port)) temp.append("vdd") temp.append("gnd") self.connect_inst(temp) def place_pbitcell(self): - self.prbc_inst.place(offset=vector(0,0)) + self.prbc_inst.place(offset=vector(0, 0)) - def route_rbc_connections(self): + def route_rbc_connections(self): for port in range(self.total_ports): self.copy_layout_pin(self.prbc_inst, "bl{}".format(port)) self.copy_layout_pin(self.prbc_inst, "br{}".format(port)) for port in range(self.total_ports): - self.copy_layout_pin(self.prbc_inst, "wl{}".format(port)) + self.copy_layout_pin(self.prbc_inst, "wl{}".format(port)) self.copy_layout_pin(self.prbc_inst, "vdd") self.copy_layout_pin(self.prbc_inst, "gnd") diff --git a/compiler/bitcells/pbitcell.py b/compiler/bitcells/pbitcell.py index 25868df5..298be6d2 100644 --- a/compiler/bitcells/pbitcell.py +++ b/compiler/bitcells/pbitcell.py @@ -30,7 +30,7 @@ class pbitcell(bitcell_base.bitcell_base): self.replica_bitcell = replica_bitcell self.dummy_bitcell = dummy_bitcell - bitcell_base.bitcell_base.__init__(self, name) + bitcell_base.bitcell_base.__init__(self, name, name, hard_cell=False) fmt_str = "{0} rw ports, {1} w ports and {2} r ports" info_string = fmt_str.format(self.num_rw_ports, self.num_w_ports, diff --git a/compiler/bitcells/replica_bitcell.py b/compiler/bitcells/replica_bitcell.py index 597cf5b4..21b742b5 100644 --- a/compiler/bitcells/replica_bitcell.py +++ b/compiler/bitcells/replica_bitcell.py @@ -8,11 +8,11 @@ import design import debug import utils -from tech import GDS,layer,drc,parameter,cell_properties +from tech import GDS, layer from tech import cell_properties as props - from globals import OPTS + class replica_bitcell(design.design): """ A single bit cell (6T, 8T, etc.) @@ -26,24 +26,23 @@ class replica_bitcell(design.design): props.bitcell.cell_6t.pin.vdd, props.bitcell.cell_6t.pin.gnd] type_list = ["OUTPUT", "OUTPUT", "INPUT", "POWER", "GROUND"] + cell_size_layer = "boundary" - if not OPTS.netlist_only: - (width,height) = utils.get_libcell_size("replica_cell_6t", GDS["unit"], layer["boundary"]) - pin_map = utils.get_libcell_pins(pin_names, "replica_cell_6t", GDS["unit"]) - else: - (width,height) = (0,0) - pin_map = [] - - def __init__(self, name=""): + def __init__(self, name, cell_name=None): + if not cell_name: + cell_name = OPTS.replica_bitcell_name # Ignore the name argument - design.design.__init__(self, "replica_cell_6t") + design.design.__init__(self, name, cell_name) debug.info(2, "Create replica bitcell object") - - self.width = replica_bitcell.width - self.height = replica_bitcell.height - self.pin_map = replica_bitcell.pin_map - self.add_pin_types(self.type_list) + (self.width, self.height) = utils.get_libcell_size(cell_name, + GDS["unit"], + layer[self.cell_size_layer]) + self.pin_map = utils.get_libcell_pins(self.pin_names, + cell_name, + GDS["unit"]) + + def get_stage_effort(self, load): parasitic_delay = 1 size = 0.5 #This accounts for bitline being drained thought the access TX and internal node diff --git a/compiler/bitcells/replica_bitcell_1rw_1r.py b/compiler/bitcells/replica_bitcell_1rw_1r.py index 79f16a47..4386e5b0 100644 --- a/compiler/bitcells/replica_bitcell_1rw_1r.py +++ b/compiler/bitcells/replica_bitcell_1rw_1r.py @@ -7,9 +7,9 @@ # import design import debug -import utils -from tech import GDS,layer,drc,parameter from tech import cell_properties as props +from globals import OPTS + class replica_bitcell_1rw_1r(design.design): """ @@ -26,21 +26,14 @@ class replica_bitcell_1rw_1r(design.design): props.bitcell.cell_1rw1r.pin.wl1, props.bitcell.cell_1rw1r.pin.vdd, props.bitcell.cell_1rw1r.pin.gnd] + type_list = ["OUTPUT", "OUTPUT", "OUTPUT", "OUTPUT", "INPUT", "INPUT", "POWER", "GROUND"] - type_list = ["OUTPUT", "OUTPUT", "OUTPUT", "OUTPUT", "INPUT", "INPUT", "POWER", "GROUND"] - (width,height) = utils.get_libcell_size("replica_cell_1rw_1r", GDS["unit"], layer["boundary"]) - pin_map = utils.get_libcell_pins(pin_names, "replica_cell_1rw_1r", GDS["unit"]) - - def __init__(self, name=""): - # Ignore the name argument - design.design.__init__(self, "replica_cell_1rw_1r") + def __init__(self, name, cell_name=None): + if not cell_name: + cell_name = OPTS.replica_bitcell_name + design.design.__init__(self, name, cell_name) debug.info(2, "Create replica bitcell 1rw+1r object") - self.width = replica_bitcell_1rw_1r.width - self.height = replica_bitcell_1rw_1r.height - self.pin_map = replica_bitcell_1rw_1r.pin_map - self.add_pin_types(self.type_list) - def get_stage_effort(self, load): parasitic_delay = 1 size = 0.5 #This accounts for bitline being drained thought the access TX and internal node diff --git a/compiler/bitcells/replica_bitcell_1w_1r.py b/compiler/bitcells/replica_bitcell_1w_1r.py index 52bea519..919f4f3f 100644 --- a/compiler/bitcells/replica_bitcell_1w_1r.py +++ b/compiler/bitcells/replica_bitcell_1w_1r.py @@ -7,9 +7,9 @@ # import design import debug -import utils -from tech import GDS,layer,drc,parameter from tech import cell_properties as props +from globals import OPTS + class replica_bitcell_1w_1r(design.design): """ @@ -26,21 +26,14 @@ class replica_bitcell_1w_1r(design.design): props.bitcell.cell_1w1r.pin.wl1, props.bitcell.cell_1w1r.pin.vdd, props.bitcell.cell_1w1r.pin.gnd] + type_list = ["OUTPUT", "OUTPUT", "INPUT", "INPUT", "INPUT", "INPUT", "POWER", "GROUND"] - type_list = ["OUTPUT", "OUTPUT", "INPUT", "INPUT", "INPUT", "INPUT", "POWER", "GROUND"] - (width,height) = utils.get_libcell_size("replica_cell_1w_1r", GDS["unit"], layer["boundary"]) - pin_map = utils.get_libcell_pins(pin_names, "replica_cell_1w_1r", GDS["unit"]) - - def __init__(self, name=""): - # Ignore the name argument - design.design.__init__(self, "replica_cell_1w_1r") + def __init__(self, name, cell_name=None): + if not cell_name: + cell_name = OPTS.replica_bitcell_name + design.design.__init__(self, name, cell_name) debug.info(2, "Create replica bitcell 1w+1r object") - self.width = replica_bitcell_1w_1r.width - self.height = replica_bitcell_1w_1r.height - self.pin_map = replica_bitcell_1w_1r.pin_map - self.add_pin_types(self.type_list) - def get_stage_effort(self, load): parasitic_delay = 1 size = 0.5 #This accounts for bitline being drained thought the access TX and internal node diff --git a/compiler/bitcells/replica_pbitcell.py b/compiler/bitcells/replica_pbitcell.py index 5a588c1e..03abcb25 100644 --- a/compiler/bitcells/replica_pbitcell.py +++ b/compiler/bitcells/replica_pbitcell.py @@ -7,11 +7,11 @@ # import debug import design -from tech import drc, spice,parameter from vector import vector from globals import OPTS from sram_factory import factory + class replica_pbitcell(design.design): """ Creates a replica bitcell using pbitcell @@ -23,7 +23,7 @@ class replica_pbitcell(design.design): self.num_r_ports = OPTS.num_r_ports self.total_ports = self.num_rw_ports + self.num_w_ports + self.num_r_ports - design.design.__init__(self, name) + design.design.__init__(self, name, name) debug.info(1, "create a replica bitcell using pbitcell with {0} rw ports, {1} w ports and {2} r ports".format(self.num_rw_ports, self.num_w_ports, self.num_r_ports)) @@ -54,7 +54,8 @@ class replica_pbitcell(design.design): self.add_pin("gnd") def add_modules(self): - self.prbc = factory.create(module_type="pbitcell",replica_bitcell=True) + self.prbc = factory.create(module_type="pbitcell", + replica_bitcell=True) self.add_mod(self.prbc) self.height = self.prbc.height @@ -69,20 +70,20 @@ class replica_pbitcell(design.design): temp.append("bl{}".format(port)) temp.append("br{}".format(port)) for port in range(self.total_ports): - temp.append("wl{}".format(port)) + temp.append("wl{}".format(port)) temp.append("vdd") temp.append("gnd") self.connect_inst(temp) def place_pbitcell(self): - self.prbc_inst.place(offset=vector(0,0)) + self.prbc_inst.place(offset=vector(0, 0)) - def route_rbc_connections(self): + def route_rbc_connections(self): for port in range(self.total_ports): self.copy_layout_pin(self.prbc_inst, "bl{}".format(port)) self.copy_layout_pin(self.prbc_inst, "br{}".format(port)) for port in range(self.total_ports): - self.copy_layout_pin(self.prbc_inst, "wl{}".format(port)) + self.copy_layout_pin(self.prbc_inst, "wl{}".format(port)) self.copy_layout_pin(self.prbc_inst, "vdd") self.copy_layout_pin(self.prbc_inst, "gnd") diff --git a/compiler/bitcells/row_cap_bitcell_1rw_1r.py b/compiler/bitcells/row_cap_bitcell_1rw_1r.py index f7a3a687..fbe08a54 100644 --- a/compiler/bitcells/row_cap_bitcell_1rw_1r.py +++ b/compiler/bitcells/row_cap_bitcell_1rw_1r.py @@ -6,8 +6,6 @@ # All rights reserved. # import debug -import utils -from tech import GDS, layer from tech import cell_properties as props import bitcell_base @@ -22,23 +20,11 @@ class row_cap_bitcell_1rw_1r(bitcell_base.bitcell_base): pin_names = [props.bitcell.cell_1rw1r.pin.wl0, props.bitcell.cell_1rw1r.pin.wl1, props.bitcell.cell_1rw1r.pin.gnd] - type_list = ["INPUT", "INPUT", "GROUND"] - - (width, height) = utils.get_libcell_size("row_cap_cell_1rw_1r", - GDS["unit"], - layer["boundary"]) - pin_map = utils.get_libcell_pins(pin_names, - "row_cap_cell_1rw_1r", - GDS["unit"]) - def __init__(self, name=""): + def __init__(self, name="row_cap_cell_1rw_1r"): # Ignore the name argument - bitcell_base.bitcell_base.__init__(self, "row_cap_cell_1rw_1r") + bitcell_base.bitcell_base.__init__(self, name) debug.info(2, "Create row_cap bitcell 1rw+1r object") - self.width = row_cap_bitcell_1rw_1r.width - self.height = row_cap_bitcell_1rw_1r.height - self.pin_map = row_cap_bitcell_1rw_1r.pin_map - self.add_pin_types(self.type_list) self.no_instances = True diff --git a/compiler/custom/dff.py b/compiler/custom/dff.py index cb703707..07f7e990 100644 --- a/compiler/custom/dff.py +++ b/compiler/custom/dff.py @@ -23,18 +23,22 @@ class dff(design.design): pin_names = props.dff.custom_port_list type_list = props.dff.custom_type_list clk_pin = props.dff.clk_pin - - (width, height) = utils.get_libcell_size("dff", - GDS["unit"], - layer["boundary"]) - pin_map = utils.get_libcell_pins(pin_names, "dff", GDS["unit"]) + cell_size_layer = "boundary" def __init__(self, name="dff"): design.design.__init__(self, name) - self.width = dff.width - self.height = dff.height - self.pin_map = dff.pin_map + (width, height) = utils.get_libcell_size(name, + GDS["unit"], + layer[self.cell_size_layer]) + + pin_map = utils.get_libcell_pins(self.pin_names, + name, + GDS["unit"]) + + self.width = width + self.height = height + self.pin_map = pin_map self.add_pin_types(self.type_list) def analytical_power(self, corner, load): diff --git a/compiler/custom/inv_dec.py b/compiler/custom/inv_dec.py index 80fdb74e..46138edd 100644 --- a/compiler/custom/inv_dec.py +++ b/compiler/custom/inv_dec.py @@ -19,18 +19,22 @@ class inv_dec(design.design): pin_names = ["A", "Z", "vdd", "gnd"] type_list = ["INPUT", "OUTPUT", "POWER", "GROUND"] + cell_size_layer = "boundary" - (width, height) = utils.get_libcell_size("inv_dec", - GDS["unit"], - layer["boundary"]) - pin_map = utils.get_libcell_pins(pin_names, "inv_dec", GDS["unit"]) - def __init__(self, name="inv_dec", height=None): design.design.__init__(self, name) - self.width = inv_dec.width - self.height = inv_dec.height - self.pin_map = inv_dec.pin_map + (width, height) = utils.get_libcell_size(name, + GDS["unit"], + layer[self.cell_size_layer]) + + pin_map = utils.get_libcell_pins(self.pin_names, + name, + GDS["unit"]) + + self.width = width + self.height = height + self.pin_map = pin_map self.add_pin_types(self.type_list) def analytical_power(self, corner, load): diff --git a/compiler/custom/nand2_dec.py b/compiler/custom/nand2_dec.py index c806bf5a..a9a1a7c0 100644 --- a/compiler/custom/nand2_dec.py +++ b/compiler/custom/nand2_dec.py @@ -18,18 +18,22 @@ class nand2_dec(design.design): pin_names = ["A", "B", "Z", "vdd", "gnd"] type_list = ["INPUT", "INPUT", "OUTPUT", "POWER", "GROUND"] + cell_size_layer = "boundary" - (width, height) = utils.get_libcell_size("nand2_dec", - GDS["unit"], - layer["boundary"]) - pin_map = utils.get_libcell_pins(pin_names, "nand2_dec", GDS["unit"]) - def __init__(self, name="nand2_dec", height=None): design.design.__init__(self, name) - self.width = nand2_dec.width - self.height = nand2_dec.height - self.pin_map = nand2_dec.pin_map + (width, height) = utils.get_libcell_size(name, + GDS["unit"], + layer[self.cell_size_layer]) + + pin_map = utils.get_libcell_pins(self.pin_names, + name, + GDS["unit"]) + + self.width = width + self.height = height + self.pin_map = pin_map self.add_pin_types(self.type_list) # FIXME: For now... diff --git a/compiler/custom/nand3_dec.py b/compiler/custom/nand3_dec.py index 5eea68de..3b19b35f 100644 --- a/compiler/custom/nand3_dec.py +++ b/compiler/custom/nand3_dec.py @@ -18,18 +18,22 @@ class nand3_dec(design.design): pin_names = ["A", "B", "C", "Z", "vdd", "gnd"] type_list = ["INPUT", "INPUT", "INPUT", "OUTPUT", "POWER", "GROUND"] + cell_size_layer = "boundary" - (width, height) = utils.get_libcell_size("nand3_dec", - GDS["unit"], - layer["boundary"]) - pin_map = utils.get_libcell_pins(pin_names, "nand3_dec", GDS["unit"]) - def __init__(self, name="nand3_dec", height=None): design.design.__init__(self, name) - self.width = nand3_dec.width - self.height = nand3_dec.height - self.pin_map = nand3_dec.pin_map + (width, height) = utils.get_libcell_size(name, + GDS["unit"], + layer[self.cell_size_layer]) + + pin_map = utils.get_libcell_pins(self.pin_names, + name, + GDS["unit"]) + + self.width = width + self.height = height + self.pin_map = pin_map self.add_pin_types(self.type_list) # FIXME: For now... diff --git a/compiler/custom/nand4_dec.py b/compiler/custom/nand4_dec.py index df3eee14..da575fd5 100644 --- a/compiler/custom/nand4_dec.py +++ b/compiler/custom/nand4_dec.py @@ -18,18 +18,22 @@ class nand4_dec(design.design): pin_names = ["A", "B", "C", "D", "Z", "vdd", "gnd"] type_list = ["INPUT", "INPUT", "INPUT", "INPUT", "OUTPUT", "POWER", "GROUND"] + cell_size_layer = "boundary" - (width, height) = utils.get_libcell_size("nand4_dec", - GDS["unit"], - layer["boundary"]) - pin_map = utils.get_libcell_pins(pin_names, "nand4_dec", GDS["unit"]) - def __init__(self, name="nand4_dec", height=None): design.design.__init__(self, name) - self.width = nand4_dec.width - self.height = nand4_dec.height - self.pin_map = nand4_dec.pin_map + (width, height) = utils.get_libcell_size(name, + GDS["unit"], + layer[self.cell_size_layer]) + + pin_map = utils.get_libcell_pins(self.pin_names, + name, + GDS["unit"]) + + self.width = width + self.height = height + self.pin_map = pin_map self.add_pin_types(self.type_list) # FIXME: For now... diff --git a/compiler/custom/tri_gate.py b/compiler/custom/tri_gate.py index 998562b1..bc59fa1c 100644 --- a/compiler/custom/tri_gate.py +++ b/compiler/custom/tri_gate.py @@ -8,7 +8,8 @@ import debug import design import utils -from tech import GDS,layer +from tech import GDS, layer + class tri_gate(design.design): """ @@ -19,8 +20,7 @@ class tri_gate(design.design): pin_names = ["in", "out", "en", "en_bar", "vdd", "gnd"] type_list = ["INPUT", "OUTPUT", "INPUT", "INPUT", "POWER", "GROUND"] - (width,height) = utils.get_libcell_size("tri_gate", GDS["unit"], layer["boundary"]) - pin_map = utils.get_libcell_pins(pin_names, "tri_gate", GDS["unit"]) + cell_size_layer = "boundary" unique_id = 1 @@ -31,9 +31,17 @@ class tri_gate(design.design): design.design.__init__(self, name) debug.info(2, "Create tri_gate") - self.width = tri_gate.width - self.height = tri_gate.height - self.pin_map = tri_gate.pin_map + (width, height) = utils.get_libcell_size(name, + GDS["unit"], + layer[self.cell_size_layer]) + + pin_map = utils.get_libcell_pins(self.pin_names, + name, + GDS["unit"]) + + self.width = width + self.height = height + self.pin_map = pin_map self.add_pin_types(self.type_list) def analytical_power(self, corner, load): @@ -47,4 +55,4 @@ class tri_gate(design.design): def build_graph(self, graph, inst_name, port_nets): """Adds edges based on inputs/outputs. Overrides base class function.""" - self.add_graph_edges(graph, port_nets) \ No newline at end of file + self.add_graph_edges(graph, port_nets) diff --git a/compiler/custom/write_driver.py b/compiler/custom/write_driver.py index 9afac81b..62b1387e 100644 --- a/compiler/custom/write_driver.py +++ b/compiler/custom/write_driver.py @@ -8,10 +8,10 @@ import debug import design import utils -from globals import OPTS -from tech import GDS,layer +from tech import GDS, layer from tech import cell_properties as props + class write_driver(design.design): """ Tristate write driver to be active during write operations only. @@ -28,20 +28,23 @@ class write_driver(design.design): props.write_driver.pin.gnd] type_list = ["INPUT", "OUTPUT", "OUTPUT", "INPUT", "POWER", "GROUND"] - if not OPTS.netlist_only: - (width,height) = utils.get_libcell_size("write_driver", GDS["unit"], layer["boundary"]) - pin_map = utils.get_libcell_pins(pin_names, "write_driver", GDS["unit"]) - else: - (width,height) = (0,0) - pin_map = [] + cell_size_layer = "boundary" def __init__(self, name): design.design.__init__(self, name) debug.info(2, "Create write_driver") - self.width = write_driver.width - self.height = write_driver.height - self.pin_map = write_driver.pin_map + (width, height) = utils.get_libcell_size(name, + GDS["unit"], + layer[self.cell_size_layer]) + + pin_map = utils.get_libcell_pins(self.pin_names, + name, + GDS["unit"]) + + self.width = width + self.height = height + self.pin_map = pin_map self.add_pin_types(self.type_list) def get_bl_names(self): @@ -65,4 +68,4 @@ class write_driver(design.design): def build_graph(self, graph, inst_name, port_nets): """Adds edges based on inputs/outputs. Overrides base class function.""" - self.add_graph_edges(graph, port_nets) \ No newline at end of file + self.add_graph_edges(graph, port_nets) diff --git a/compiler/globals.py b/compiler/globals.py index 3ebb2c11..b46addd0 100644 --- a/compiler/globals.py +++ b/compiler/globals.py @@ -188,6 +188,9 @@ def init_openram(config_file, is_unit_test=True): if is_unit_test and CHECKPOINT_OPTS: OPTS.__dict__ = CHECKPOINT_OPTS.__dict__.copy() return + + # Setup the correct bitcell names + setup_bitcell() # Import these to find the executables for checkpointing import characterizer @@ -202,8 +205,6 @@ def setup_bitcell(): """ Determine the correct custom or parameterized bitcell for the design. """ - global OPTS - # If we have non-1rw ports, # and the user didn't over-ride the bitcell manually, # figure out the right bitcell to use @@ -211,8 +212,11 @@ def setup_bitcell(): if (OPTS.num_rw_ports == 1 and OPTS.num_w_ports == 0 and OPTS.num_r_ports == 0): OPTS.bitcell = "bitcell" + OPTS.bitcell_name = "cell_6t" OPTS.replica_bitcell = "replica_bitcell" + OPTS.replica_bitcell_name = "replica_cell_6t" OPTS.dummy_bitcell = "dummy_bitcell" + OPTS.dummy_bitcell_name = "dummy_cell_6t" else: ports = "" if OPTS.num_rw_ports > 0: @@ -225,6 +229,7 @@ def setup_bitcell(): if ports != "": OPTS.bitcell_suffix = "_" + ports OPTS.bitcell = "bitcell" + OPTS.bitcell_suffix + OPTS.bitcell_name = "cell" + OPTS.bitcell_suffix # See if bitcell exists try: diff --git a/compiler/modules/replica_column.py b/compiler/modules/replica_column.py index 0ce472c3..5a33a6d0 100644 --- a/compiler/modules/replica_column.py +++ b/compiler/modules/replica_column.py @@ -77,9 +77,9 @@ class replica_column(bitcell_base_array): self.add_pin("gnd", "GROUND") def add_modules(self): - self.replica_cell = factory.create(module_type="replica_{}".format(OPTS.bitcell)) + self.replica_cell = factory.create(module_type=OPTS.replica_bitcell) self.add_mod(self.replica_cell) - self.dummy_cell = factory.create(module_type="dummy_{}".format(OPTS.bitcell)) + self.dummy_cell = factory.create(module_type=OPTS.dummy_bitcell) self.add_mod(self.dummy_cell) try: edge_module_type = ("col_cap" if cell_properties.bitcell.end_caps else "dummy") diff --git a/compiler/modules/sense_amp.py b/compiler/modules/sense_amp.py index f1d5de92..21353f4c 100644 --- a/compiler/modules/sense_amp.py +++ b/compiler/modules/sense_amp.py @@ -10,7 +10,6 @@ import debug import utils from tech import GDS, layer, parameter, drc from tech import cell_properties as props -from globals import OPTS import logical_effort @@ -28,13 +27,25 @@ class sense_amp(design.design): props.sense_amp.pin.vdd, props.sense_amp.pin.gnd] type_list = ["INPUT", "INPUT", "OUTPUT", "INPUT", "POWER", "GROUND"] - if not OPTS.netlist_only: - (width, height) = utils.get_libcell_size("sense_amp", GDS["unit"], layer["boundary"]) - pin_map = utils.get_libcell_pins(pin_names, "sense_amp", GDS["unit"]) - else: - (width, height) = (0, 0) - pin_map = [] + cell_size_layer = "boundary" + def __init__(self, name="sense_amp"): + super().__init__(name) + debug.info(2, "Create sense_amp") + + (width, height) = utils.get_libcell_size(name, + GDS["unit"], + layer[self.cell_size_layer]) + + pin_map = utils.get_libcell_pins(self.pin_names, + name, + GDS["unit"]) + + self.width = width + self.height = height + self.pin_map = pin_map + self.add_pin_types(self.type_list) + def get_bl_names(self): return props.sense_amp.pin.bl @@ -49,15 +60,6 @@ class sense_amp(design.design): def en_name(self): return props.sense_amp.pin.en - def __init__(self, name): - super().__init__(name) - debug.info(2, "Create sense_amp") - - self.width = sense_amp.width - self.height = sense_amp.height - self.pin_map = sense_amp.pin_map - self.add_pin_types(self.type_list) - def get_cin(self): # FIXME: This input load will be applied to both the s_en timing and bitline timing. diff --git a/compiler/sram/sram_config.py b/compiler/sram/sram_config.py index 573e7514..7544e946 100644 --- a/compiler/sram/sram_config.py +++ b/compiler/sram/sram_config.py @@ -39,7 +39,7 @@ class sram_config: def compute_sizes(self): """ Computes the organization of the memory using bitcell size by trying to make it square.""" - bitcell = factory.create(module_type="bitcell") + bitcell = factory.create(module_type=OPTS.bitcell, cell_name=OPTS.bitcell_name) debug.check(self.num_banks in [1, 2, 4], "Valid number of banks are 1 , 2 and 4.") diff --git a/compiler/sram_factory.py b/compiler/sram_factory.py index 0e9721c7..4f8dcc5c 100644 --- a/compiler/sram_factory.py +++ b/compiler/sram_factory.py @@ -125,7 +125,7 @@ class sram_factory: module_name = real_module_type else: if self.is_duplicate_name(module_name): - raise ValueError("Modules with duplicate name are not allowed." \ + raise ValueError("Modules with duplicate name are not allowed." " '{}'".format(module_name)) # type_str = "type={}".format(real_module_type) diff --git a/compiler/tests/06_hierarchical_decoder_test.py b/compiler/tests/06_hierarchical_decoder_test.py index 42bc38cd..027daf98 100755 --- a/compiler/tests/06_hierarchical_decoder_test.py +++ b/compiler/tests/06_hierarchical_decoder_test.py @@ -22,12 +22,11 @@ class hierarchical_decoder_test(openram_test): config_file = "{}/tests/configs/config".format(os.getenv("OPENRAM_HOME")) globals.init_openram(config_file) - # Use the 2 port cell since it is usually bigger/easier - OPTS.bitcell = "bitcell_1rw_1r" OPTS.num_rw_ports = 1 OPTS.num_r_ports = 1 OPTS.num_w_ports = 0 - + globals.setup_bitcell() + # Checks 2x4 and 2-input NAND decoder debug.info(1, "Testing 16 row sample for hierarchical_decoder") a = factory.create(module_type="hierarchical_decoder", num_outputs=16) diff --git a/compiler/tests/06_hierarchical_predecode4x16_test.py b/compiler/tests/06_hierarchical_predecode4x16_test.py index 7ded6144..3ea60c5d 100755 --- a/compiler/tests/06_hierarchical_predecode4x16_test.py +++ b/compiler/tests/06_hierarchical_predecode4x16_test.py @@ -24,10 +24,10 @@ class hierarchical_predecode4x16_test(openram_test): globals.init_openram(config_file) # Use the 2 port cell since it is usually bigger/easier - OPTS.bitcell = "bitcell_1rw_1r" OPTS.num_rw_ports = 1 OPTS.num_r_ports = 1 OPTS.num_w_ports = 0 + globals.setup_bitcell() debug.info(1, "Testing sample for hierarchy_predecode4x16") a = factory.create(module_type="hierarchical_predecode4x16") diff --git a/compiler/tests/18_port_data_wmask_1rw_1r_test.py b/compiler/tests/18_port_data_wmask_1rw_1r_test.py index 74aa7fc0..c4e422d2 100755 --- a/compiler/tests/18_port_data_wmask_1rw_1r_test.py +++ b/compiler/tests/18_port_data_wmask_1rw_1r_test.py @@ -62,11 +62,11 @@ class port_data_wmask_1rw_1r_test(openram_test): a = factory.create("port_data", sram_config=c, port=0) self.local_check(a) - OPTS.bitcell = "bitcell_1w_1r" OPTS.num_rw_ports = 0 OPTS.num_r_ports = 1 OPTS.num_w_ports = 1 - + globals.setup_bitcell() + c.num_words = 16 c.words_per_row = 1 factory.reset() diff --git a/compiler/tests/18_port_data_wmask_test.py b/compiler/tests/18_port_data_wmask_test.py index 1c650c74..b01460ed 100755 --- a/compiler/tests/18_port_data_wmask_test.py +++ b/compiler/tests/18_port_data_wmask_test.py @@ -57,11 +57,11 @@ class port_data_wmask_test(openram_test): a = factory.create("port_data", sram_config=c, port=0) self.local_check(a) - OPTS.bitcell = "bitcell_1w_1r" OPTS.num_rw_ports = 0 OPTS.num_r_ports = 1 OPTS.num_w_ports = 1 - + globals.setup_bitcell() + c.num_words = 16 c.words_per_row = 1 factory.reset() From f9787eb878f25d6cdf257609e1113d61e0d677c2 Mon Sep 17 00:00:00 2001 From: mrg Date: Mon, 2 Nov 2020 17:00:15 -0800 Subject: [PATCH 29/67] Use bitcell_base for all bitcells. Fix missing setup_bitcell call --- compiler/base/utils.py | 1 + compiler/bitcells/bitcell.py | 2 +- compiler/bitcells/bitcell_1rw_1r.py | 2 +- compiler/bitcells/bitcell_1w_1r.py | 2 +- compiler/bitcells/dummy_bitcell.py | 2 +- compiler/bitcells/dummy_bitcell_1rw_1r.py | 2 +- compiler/bitcells/dummy_bitcell_1w_1r.py | 2 +- compiler/bitcells/replica_bitcell.py | 15 +++------------ compiler/bitcells/replica_bitcell_1rw_1r.py | 10 ++++++---- compiler/bitcells/replica_bitcell_1w_1r.py | 11 +++++++---- compiler/globals.py | 16 +++++++++------- compiler/tests/14_replica_column_test.py | 11 +++++++---- 12 files changed, 39 insertions(+), 37 deletions(-) diff --git a/compiler/base/utils.py b/compiler/base/utils.py index 19ca98bd..ed016964 100644 --- a/compiler/base/utils.py +++ b/compiler/base/utils.py @@ -78,6 +78,7 @@ def auto_measure_libcell(pin_list, name, units, lpp): _GDS_READER_CACHE = {} + def _get_gds_reader(units, gds_filename): gds_absname = os.path.realpath(gds_filename) k = (units, gds_absname) diff --git a/compiler/bitcells/bitcell.py b/compiler/bitcells/bitcell.py index 66809c65..fb5e4929 100644 --- a/compiler/bitcells/bitcell.py +++ b/compiler/bitcells/bitcell.py @@ -30,7 +30,7 @@ class bitcell(bitcell_base.bitcell_base): def __init__(self, name, cell_name=None): if not cell_name: cell_name = OPTS.bitcell_name - bitcell_base.bitcell_base.__init__(self, name, cell_name) + super().__init__(name, cell_name) debug.info(2, "Create bitcell") self.nets_match = self.do_nets_exist(self.storage_nets) diff --git a/compiler/bitcells/bitcell_1rw_1r.py b/compiler/bitcells/bitcell_1rw_1r.py index 0b5c5bde..597ce954 100644 --- a/compiler/bitcells/bitcell_1rw_1r.py +++ b/compiler/bitcells/bitcell_1rw_1r.py @@ -34,7 +34,7 @@ class bitcell_1rw_1r(bitcell_base.bitcell_base): def __init__(self, name, cell_name=None): if not cell_name: cell_name = OPTS.bitcell_name - bitcell_base.bitcell_base.__init__(self, name, cell_name) + super().__init__(name, cell_name) debug.info(2, "Create bitcell with 1RW and 1R Port") self.nets_match = self.do_nets_exist(self.storage_nets) diff --git a/compiler/bitcells/bitcell_1w_1r.py b/compiler/bitcells/bitcell_1w_1r.py index 2f6bad5b..acc84571 100644 --- a/compiler/bitcells/bitcell_1w_1r.py +++ b/compiler/bitcells/bitcell_1w_1r.py @@ -34,7 +34,7 @@ class bitcell_1w_1r(bitcell_base.bitcell_base): def __init__(self, name, cell_name): if not cell_name: cell_name = OPTS.bitcell_name - bitcell_base.bitcell_base.__init__(self, name, cell_name) + super().__init__(self, name, cell_name) debug.info(2, "Create bitcell with 1W and 1R Port") self.nets_match = self.do_nets_exist(self.storage_nets) diff --git a/compiler/bitcells/dummy_bitcell.py b/compiler/bitcells/dummy_bitcell.py index 7bf8a782..e0af8754 100644 --- a/compiler/bitcells/dummy_bitcell.py +++ b/compiler/bitcells/dummy_bitcell.py @@ -28,7 +28,7 @@ class dummy_bitcell(bitcell_base.bitcell_base): def __init__(self, name, cell_name=None): if not cell_name: cell_name = OPTS.dummy_bitcell_name - bitcell_base.bitcell_base.__init__(self, name, cell_name) + super().__init__(name, cell_name) debug.info(2, "Create dummy bitcell") diff --git a/compiler/bitcells/dummy_bitcell_1rw_1r.py b/compiler/bitcells/dummy_bitcell_1rw_1r.py index 0a6203f7..0fb92103 100644 --- a/compiler/bitcells/dummy_bitcell_1rw_1r.py +++ b/compiler/bitcells/dummy_bitcell_1rw_1r.py @@ -32,7 +32,7 @@ class dummy_bitcell_1rw_1r(bitcell_base.bitcell_base): def __init__(self, name, cell_name=None): if not cell_name: cell_name = OPTS.dummy_bitcell_name - bitcell_base.bitcell_base.__init__(self, name, cell_name) + super().__init__(name, cell_name) debug.info(2, "Create dummy bitcell 1rw+1r object") diff --git a/compiler/bitcells/dummy_bitcell_1w_1r.py b/compiler/bitcells/dummy_bitcell_1w_1r.py index a60f95ef..1f3fb754 100644 --- a/compiler/bitcells/dummy_bitcell_1w_1r.py +++ b/compiler/bitcells/dummy_bitcell_1w_1r.py @@ -32,7 +32,7 @@ class dummy_bitcell_1w_1r(bitcell_base.bitcell_base): def __init__(self, name, cell_name=None): if not cell_name: cell_name = OPTS.dummy_bitcell_name - bitcell_base.bitcell_base.__init__(self, name, cell_name) + super().__init__(name, cell_name) debug.info(2, "Create dummy bitcell 1w+1r object") diff --git a/compiler/bitcells/replica_bitcell.py b/compiler/bitcells/replica_bitcell.py index 21b742b5..3f7a2930 100644 --- a/compiler/bitcells/replica_bitcell.py +++ b/compiler/bitcells/replica_bitcell.py @@ -5,15 +5,15 @@ # (acting for and on behalf of Oklahoma State University) # All rights reserved. # -import design import debug import utils +import bitcell_base from tech import GDS, layer from tech import cell_properties as props from globals import OPTS -class replica_bitcell(design.design): +class replica_bitcell(bitcell_base.bitcell_base): """ A single bit cell (6T, 8T, etc.) This module implements the single memory cell used in the design. It @@ -26,23 +26,14 @@ class replica_bitcell(design.design): props.bitcell.cell_6t.pin.vdd, props.bitcell.cell_6t.pin.gnd] type_list = ["OUTPUT", "OUTPUT", "INPUT", "POWER", "GROUND"] - cell_size_layer = "boundary" def __init__(self, name, cell_name=None): if not cell_name: cell_name = OPTS.replica_bitcell_name # Ignore the name argument - design.design.__init__(self, name, cell_name) + super().__init__(name, cell_name) debug.info(2, "Create replica bitcell object") - (self.width, self.height) = utils.get_libcell_size(cell_name, - GDS["unit"], - layer[self.cell_size_layer]) - self.pin_map = utils.get_libcell_pins(self.pin_names, - cell_name, - GDS["unit"]) - - def get_stage_effort(self, load): parasitic_delay = 1 size = 0.5 #This accounts for bitline being drained thought the access TX and internal node diff --git a/compiler/bitcells/replica_bitcell_1rw_1r.py b/compiler/bitcells/replica_bitcell_1rw_1r.py index 4386e5b0..5a19dbe6 100644 --- a/compiler/bitcells/replica_bitcell_1rw_1r.py +++ b/compiler/bitcells/replica_bitcell_1rw_1r.py @@ -5,13 +5,15 @@ # (acting for and on behalf of Oklahoma State University) # All rights reserved. # -import design import debug +import bitcell_base from tech import cell_properties as props +from tech import GDS, layer from globals import OPTS +import utils -class replica_bitcell_1rw_1r(design.design): +class replica_bitcell_1rw_1r(bitcell_base): """ A single bit cell which is forced to store a 0. This module implements the single memory cell used in the design. It @@ -27,11 +29,11 @@ class replica_bitcell_1rw_1r(design.design): props.bitcell.cell_1rw1r.pin.vdd, props.bitcell.cell_1rw1r.pin.gnd] type_list = ["OUTPUT", "OUTPUT", "OUTPUT", "OUTPUT", "INPUT", "INPUT", "POWER", "GROUND"] - + def __init__(self, name, cell_name=None): if not cell_name: cell_name = OPTS.replica_bitcell_name - design.design.__init__(self, name, cell_name) + super().__init__(name, cell_name) debug.info(2, "Create replica bitcell 1rw+1r object") def get_stage_effort(self, load): diff --git a/compiler/bitcells/replica_bitcell_1w_1r.py b/compiler/bitcells/replica_bitcell_1w_1r.py index 919f4f3f..710336e1 100644 --- a/compiler/bitcells/replica_bitcell_1w_1r.py +++ b/compiler/bitcells/replica_bitcell_1w_1r.py @@ -5,13 +5,15 @@ # (acting for and on behalf of Oklahoma State University) # All rights reserved. # -import design import debug +import bitcell_base from tech import cell_properties as props from globals import OPTS +from tech import GDS, layer +import utils -class replica_bitcell_1w_1r(design.design): +class replica_bitcell_1w_1r(bitcell_base.bitcell_base): """ A single bit cell which is forced to store a 0. This module implements the single memory cell used in the design. It @@ -27,13 +29,14 @@ class replica_bitcell_1w_1r(design.design): props.bitcell.cell_1w1r.pin.vdd, props.bitcell.cell_1w1r.pin.gnd] type_list = ["OUTPUT", "OUTPUT", "INPUT", "INPUT", "INPUT", "INPUT", "POWER", "GROUND"] - + def __init__(self, name, cell_name=None): if not cell_name: cell_name = OPTS.replica_bitcell_name - design.design.__init__(self, name, cell_name) + super().__init__(name, cell_name) debug.info(2, "Create replica bitcell 1w+1r object") + def get_stage_effort(self, load): parasitic_delay = 1 size = 0.5 #This accounts for bitline being drained thought the access TX and internal node diff --git a/compiler/globals.py b/compiler/globals.py index b46addd0..cc28c397 100644 --- a/compiler/globals.py +++ b/compiler/globals.py @@ -189,9 +189,9 @@ def init_openram(config_file, is_unit_test=True): OPTS.__dict__ = CHECKPOINT_OPTS.__dict__.copy() return - # Setup the correct bitcell names + # Setup correct bitcell names setup_bitcell() - + # Import these to find the executables for checkpointing import characterizer import verify @@ -213,10 +213,6 @@ def setup_bitcell(): if (OPTS.num_rw_ports == 1 and OPTS.num_w_ports == 0 and OPTS.num_r_ports == 0): OPTS.bitcell = "bitcell" OPTS.bitcell_name = "cell_6t" - OPTS.replica_bitcell = "replica_bitcell" - OPTS.replica_bitcell_name = "replica_cell_6t" - OPTS.dummy_bitcell = "dummy_bitcell" - OPTS.dummy_bitcell_name = "dummy_cell_6t" else: ports = "" if OPTS.num_rw_ports > 0: @@ -230,7 +226,13 @@ def setup_bitcell(): OPTS.bitcell_suffix = "_" + ports OPTS.bitcell = "bitcell" + OPTS.bitcell_suffix OPTS.bitcell_name = "cell" + OPTS.bitcell_suffix - + + OPTS.dummy_bitcell = "dummy_" + OPTS.bitcell + OPTS.dummy_bitcell_name = "dummy_" + OPTS.bitcell_name + + OPTS.replica_bitcell = "replica_" + OPTS.bitcell + OPTS.replica_bitcell_name = "replica_" + OPTS.bitcell_name + # See if bitcell exists try: __import__(OPTS.bitcell) diff --git a/compiler/tests/14_replica_column_test.py b/compiler/tests/14_replica_column_test.py index eb1e96f7..5cc620cb 100755 --- a/compiler/tests/14_replica_column_test.py +++ b/compiler/tests/14_replica_column_test.py @@ -6,28 +6,31 @@ # import unittest from testutils import * -import sys,os +import sys, os sys.path.append(os.getenv("OPENRAM_HOME")) import globals from globals import OPTS from sram_factory import factory import debug + class replica_column_test(openram_test): def runTest(self): config_file = "{}/tests/configs/config".format(os.getenv("OPENRAM_HOME")) globals.init_openram(config_file) - debug.info(2, "Testing replica column for 6t_cell") + debug.info(2, "Testing replica column for cell_6t") a = factory.create(module_type="replica_column", rows=4, rbl=[1, 0], replica_bit=1) self.local_check(a) - debug.info(2, "Testing replica column for 6t_cell") + debug.info(2, "Testing replica column for cell_1rw_1r") + globals.setup_bitcell() a = factory.create(module_type="replica_column", rows=4, rbl=[1, 1], replica_bit=6) self.local_check(a) - debug.info(2, "Testing replica column for 6t_cell") + debug.info(2, "Testing replica column for cell_1rw_1r") + globals.setup_bitcell() a = factory.create(module_type="replica_column", rows=4, rbl=[2, 0], replica_bit=2) self.local_check(a) From aec5865d71ef44f4ff411934ad98cc1ed6280aad Mon Sep 17 00:00:00 2001 From: mrg Date: Mon, 2 Nov 2020 17:41:14 -0800 Subject: [PATCH 30/67] Fix base class error --- compiler/bitcells/replica_bitcell_1rw_1r.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/compiler/bitcells/replica_bitcell_1rw_1r.py b/compiler/bitcells/replica_bitcell_1rw_1r.py index 5a19dbe6..8aed0f65 100644 --- a/compiler/bitcells/replica_bitcell_1rw_1r.py +++ b/compiler/bitcells/replica_bitcell_1rw_1r.py @@ -8,12 +8,10 @@ import debug import bitcell_base from tech import cell_properties as props -from tech import GDS, layer from globals import OPTS -import utils -class replica_bitcell_1rw_1r(bitcell_base): +class replica_bitcell_1rw_1r(bitcell_base.bitcell_base): """ A single bit cell which is forced to store a 0. This module implements the single memory cell used in the design. It From 8c4584daa15fd99d6a7c32fbcae0f42391c2bc77 Mon Sep 17 00:00:00 2001 From: mrg Date: Tue, 3 Nov 2020 06:09:42 -0800 Subject: [PATCH 31/67] Missing import fix. --- compiler/base/hierarchy_layout.py | 1 + compiler/tests/06_hierarchical_predecode2x4_test.py | 3 ++- compiler/tests/06_hierarchical_predecode3x8_test.py | 3 ++- compiler/tests/06_hierarchical_predecode4x16_test.py | 1 - 4 files changed, 5 insertions(+), 3 deletions(-) diff --git a/compiler/base/hierarchy_layout.py b/compiler/base/hierarchy_layout.py index 7fe838cb..c99b187e 100644 --- a/compiler/base/hierarchy_layout.py +++ b/compiler/base/hierarchy_layout.py @@ -13,6 +13,7 @@ from tech import drc, GDS from tech import layer as techlayer from tech import layer_indices from tech import layer_stacks +from tech import preferred_directions import os from globals import OPTS from vector import vector diff --git a/compiler/tests/06_hierarchical_predecode2x4_test.py b/compiler/tests/06_hierarchical_predecode2x4_test.py index c2b51f10..a119c9d4 100755 --- a/compiler/tests/06_hierarchical_predecode2x4_test.py +++ b/compiler/tests/06_hierarchical_predecode2x4_test.py @@ -8,13 +8,14 @@ # import unittest from testutils import * -import sys,os +import sys, os sys.path.append(os.getenv("OPENRAM_HOME")) import globals from globals import OPTS from sram_factory import factory import debug + class hierarchical_predecode2x4_test(openram_test): def runTest(self): diff --git a/compiler/tests/06_hierarchical_predecode3x8_test.py b/compiler/tests/06_hierarchical_predecode3x8_test.py index c1471a40..8aa3e6ed 100755 --- a/compiler/tests/06_hierarchical_predecode3x8_test.py +++ b/compiler/tests/06_hierarchical_predecode3x8_test.py @@ -8,13 +8,14 @@ # import unittest from testutils import * -import sys,os +import sys, os sys.path.append(os.getenv("OPENRAM_HOME")) import globals from globals import OPTS from sram_factory import factory import debug + class hierarchical_predecode3x8_test(openram_test): def runTest(self): diff --git a/compiler/tests/06_hierarchical_predecode4x16_test.py b/compiler/tests/06_hierarchical_predecode4x16_test.py index 7ded6144..169579c8 100755 --- a/compiler/tests/06_hierarchical_predecode4x16_test.py +++ b/compiler/tests/06_hierarchical_predecode4x16_test.py @@ -16,7 +16,6 @@ from sram_factory import factory import debug -# @unittest.skip("SKIPPING hierarchical_predecode4x16_test") class hierarchical_predecode4x16_test(openram_test): def runTest(self): From da721a677d69a44e42808da7867964ed99b14d76 Mon Sep 17 00:00:00 2001 From: mrg Date: Tue, 3 Nov 2020 06:29:17 -0800 Subject: [PATCH 32/67] Remove EOL whitespace globally --- compiler/base/channel_route.py | 50 +-- compiler/base/contact.py | 20 +- compiler/base/custom_cell_properties.py | 30 +- compiler/base/custom_layer_properties.py | 30 +- compiler/base/delay_data.py | 2 +- compiler/base/design.py | 32 +- compiler/base/geometry.py | 32 +- compiler/base/graph_util.py | 72 ++-- compiler/base/hierarchy_design.py | 20 +- compiler/base/hierarchy_layout.py | 38 +- compiler/base/hierarchy_spice.py | 60 +-- compiler/base/lef.py | 28 +- compiler/base/pin_layout.py | 4 +- compiler/base/route.py | 26 +- compiler/base/vector.py | 16 +- compiler/base/verilog.py | 26 +- compiler/base/wire.py | 8 +- compiler/base/wire_path.py | 4 +- compiler/base/wire_spice_model.py | 4 +- compiler/bitcells/bitcell_1rw_1r.py | 4 +- compiler/bitcells/bitcell_1w_1r.py | 2 +- compiler/bitcells/bitcell_base.py | 22 +- compiler/bitcells/col_cap_bitcell_1rw_1r.py | 2 +- compiler/bitcells/dummy_bitcell.py | 2 +- compiler/bitcells/dummy_pbitcell.py | 28 +- compiler/bitcells/pbitcell.py | 46 +-- compiler/bitcells/replica_bitcell.py | 14 +- compiler/bitcells/replica_bitcell_1rw_1r.py | 6 +- compiler/bitcells/replica_bitcell_1w_1r.py | 8 +- compiler/bitcells/replica_pbitcell.py | 28 +- compiler/characterizer/__init__.py | 4 +- compiler/characterizer/bit_polarity.py | 2 +- compiler/characterizer/charutils.py | 10 +- compiler/characterizer/delay.py | 368 +++++++++--------- compiler/characterizer/functional.py | 64 +-- compiler/characterizer/lib.py | 126 +++--- compiler/characterizer/logical_effort.py | 22 +- compiler/characterizer/measurements.py | 104 ++--- compiler/characterizer/model_check.py | 192 ++++----- compiler/characterizer/setup_hold.py | 50 +-- compiler/characterizer/simulation.py | 120 +++--- compiler/characterizer/stimuli.py | 46 +-- compiler/characterizer/trim_spice.py | 28 +- compiler/custom/and2_dec.py | 32 +- compiler/custom/and3_dec.py | 18 +- compiler/custom/and4_dec.py | 20 +- compiler/custom/dff.py | 16 +- compiler/custom/inv_dec.py | 12 +- compiler/custom/nand2_dec.py | 16 +- compiler/custom/nand3_dec.py | 16 +- compiler/custom/nand4_dec.py | 18 +- compiler/custom/tri_gate.py | 12 +- compiler/custom/write_driver.py | 8 +- compiler/datasheet/add_db.py | 6 +- compiler/datasheet/datasheet_gen.py | 6 +- compiler/drc/design_rules.py | 6 +- compiler/drc/drc_lut.py | 6 +- compiler/drc/drc_value.py | 6 +- compiler/gdsMill/gdsMill/gdsStreamer.py | 12 +- compiler/gdsMill/gdsMill/pdfLayout.py | 28 +- compiler/gdsMill/pyx/bbox.py | 2 +- compiler/gdsMill/pyx/canvas.py | 8 +- compiler/gdsMill/pyx/deformer.py | 2 +- compiler/gdsMill/pyx/dvifile.py | 12 +- compiler/gdsMill/pyx/epsfile.py | 4 +- compiler/gdsMill/pyx/mathutils.py | 2 +- compiler/gdsMill/pyx/path.py | 6 +- compiler/gdsMill/pyx/pattern.py | 2 +- compiler/gdsMill/pyx/trafo.py | 6 +- compiler/gdsMill/pyx/unit.py | 4 +- compiler/globals.py | 72 ++-- compiler/modules/bank.py | 146 +++---- compiler/modules/bank_select.py | 48 +-- compiler/modules/bitcell_array.py | 4 +- compiler/modules/bitcell_base_array.py | 16 +- compiler/modules/col_cap_array.py | 2 +- compiler/modules/column_mux_array.py | 6 +- compiler/modules/control_logic.py | 136 +++---- compiler/modules/custom_cell.py | 12 +- compiler/modules/delay_chain.py | 24 +- compiler/modules/dff_array.py | 16 +- compiler/modules/dff_buf.py | 22 +- compiler/modules/dff_buf_array.py | 24 +- compiler/modules/dff_inv.py | 20 +- compiler/modules/dff_inv_array.py | 42 +- compiler/modules/dummy_array.py | 18 +- compiler/modules/global_bitcell_array.py | 54 +-- compiler/modules/hierarchical_decoder.py | 100 ++--- compiler/modules/hierarchical_predecode.py | 34 +- compiler/modules/hierarchical_predecode3x8.py | 8 +- .../modules/hierarchical_predecode4x16.py | 16 +- compiler/modules/local_bitcell_array.py | 48 +-- compiler/modules/multibank.py | 220 +++++------ compiler/modules/orig_bitcell_array.py | 16 +- compiler/modules/port_address.py | 36 +- compiler/modules/port_data.py | 30 +- compiler/modules/precharge_array.py | 16 +- compiler/modules/replica_bitcell_array.py | 38 +- compiler/modules/replica_column.py | 14 +- compiler/modules/sense_amp.py | 16 +- compiler/modules/sense_amp_array.py | 10 +- compiler/modules/tri_gate_array.py | 14 +- compiler/modules/wordline_buffer_array.py | 18 +- compiler/modules/wordline_driver_array.py | 24 +- compiler/modules/write_driver_array.py | 12 +- compiler/modules/write_mask_and_array.py | 4 +- compiler/openram.py | 2 +- compiler/options.py | 4 +- compiler/pgates/column_mux.py | 8 +- compiler/pgates/pand2.py | 15 +- compiler/pgates/pand3.py | 11 +- compiler/pgates/pand4.py | 12 +- compiler/pgates/pbuf.py | 14 +- compiler/pgates/pbuf_dec.py | 16 +- compiler/pgates/pdriver.py | 17 +- compiler/pgates/pgate.py | 50 +-- compiler/pgates/pinv.py | 28 +- compiler/pgates/pinv_dec.py | 18 +- compiler/pgates/pinvbuf.py | 32 +- compiler/pgates/pnand2.py | 32 +- compiler/pgates/pnand3.py | 38 +- compiler/pgates/pnand4.py | 46 +-- compiler/pgates/pnor2.py | 32 +- compiler/pgates/precharge.py | 30 +- compiler/pgates/ptristate_inv.py | 20 +- compiler/pgates/ptx.py | 54 +-- compiler/pgates/pwrite_driver.py | 84 ++-- compiler/pgates/wordline_driver.py | 22 +- compiler/router/direction.py | 8 +- compiler/router/grid.py | 36 +- compiler/router/grid_cell.py | 12 +- compiler/router/grid_path.py | 46 +-- compiler/router/grid_utils.py | 24 +- compiler/router/pin_group.py | 6 +- compiler/router/router.py | 158 ++++---- compiler/router/router_tech.py | 28 +- compiler/router/signal_grid.py | 46 +-- compiler/router/signal_router.py | 24 +- compiler/router/supply_grid.py | 16 +- compiler/router/supply_grid_router.py | 62 +-- compiler/router/supply_tree_router.py | 40 +- compiler/router/tests/01_no_blockages_test.py | 4 +- compiler/router/tests/02_blockages_test.py | 6 +- .../router/tests/03_same_layer_pins_test.py | 4 +- .../router/tests/04_diff_layer_pins_test.py | 4 +- compiler/router/tests/05_two_nets_test.py | 4 +- compiler/router/tests/06_pin_location_test.py | 4 +- compiler/router/tests/07_big_test.py | 6 +- .../router/tests/08_expand_region_test.py | 6 +- compiler/router/tests/10_supply_grid_test.py | 4 +- compiler/router/tests/gds_cell.py | 2 +- compiler/router/tests/regress.py | 2 +- compiler/router/tests/testutils.py | 32 +- compiler/router/vector3d.py | 20 +- compiler/sram/sram.py | 16 +- compiler/sram/sram_1bank.py | 70 ++-- compiler/sram/sram_2bank.py | 54 +-- compiler/sram/sram_base.py | 82 ++-- compiler/sram/sram_config.py | 22 +- compiler/sram_factory.py | 6 +- compiler/tests/00_code_format_check_test.py | 4 +- compiler/tests/01_library_drc_test.py | 4 +- compiler/tests/03_contact_test.py | 10 +- compiler/tests/03_path_test.py | 2 +- compiler/tests/03_ptx_3finger_pmos_test.py | 2 +- compiler/tests/03_ptx_4finger_pmos_test.py | 2 +- compiler/tests/03_ptx_no_contacts_test.py | 2 +- compiler/tests/03_wire_test.py | 2 +- compiler/tests/04_and2_dec_test.py | 2 +- compiler/tests/04_and3_dec_test.py | 2 +- compiler/tests/04_and4_dec_test.py | 2 +- compiler/tests/04_column_mux_1rw_1r_test.py | 4 +- compiler/tests/04_dummy_pbitcell_test.py | 6 +- compiler/tests/04_pbitcell_test.py | 14 +- compiler/tests/04_pbuf_dec_8x_test.py | 2 +- compiler/tests/04_pdriver_test.py | 10 +- compiler/tests/04_pinv_10x_test.py | 2 +- compiler/tests/04_pinv_1x_beta_test.py | 2 +- compiler/tests/04_pinv_2x_test.py | 2 +- compiler/tests/04_pinv_dec_1x_test.py | 2 +- compiler/tests/04_pnand2_test.py | 4 +- compiler/tests/04_pnand3_test.py | 2 +- compiler/tests/04_pnand4_test.py | 2 +- compiler/tests/04_pnor2_test.py | 2 +- compiler/tests/04_precharge_1rw_1r_test.py | 4 +- compiler/tests/04_precharge_test.py | 6 +- compiler/tests/04_pwrite_driver_test.py | 2 +- compiler/tests/04_replica_pbitcell_test.py | 6 +- .../tests/05_bitcell_array_1rw_1r_test.py | 6 +- compiler/tests/05_bitcell_array_test.py | 2 +- compiler/tests/05_dummy_array_test.py | 4 +- compiler/tests/05_pbitcell_array_test.py | 4 +- .../06_hierarchical_decoder_1rw_1r_test.py | 6 +- .../06_hierarchical_decoder_pbitcell_test.py | 2 +- .../tests/06_hierarchical_decoder_test.py | 6 +- ...6_hierarchical_predecode2x4_1rw_1r_test.py | 2 +- ...hierarchical_predecode2x4_pbitcell_test.py | 2 +- ...6_hierarchical_predecode3x8_1rw_1r_test.py | 2 +- ...hierarchical_predecode3x8_pbitcell_test.py | 2 +- .../tests/07_column_mux_array_1rw_1r_test.py | 4 +- .../tests/08_precharge_array_1rw_1r_test.py | 4 +- .../09_sense_amp_array_spare_cols_test.py | 6 +- .../10_write_driver_array_spare_cols_test.py | 4 +- .../10_write_mask_and_array_1rw_1r_test.py | 2 +- compiler/tests/12_tri_gate_array_test.py | 6 +- compiler/tests/13_delay_chain_test.py | 2 +- .../14_replica_bitcell_array_1rw_1r_test.py | 6 +- .../tests/14_replica_bitcell_array_test.py | 4 +- .../tests/14_replica_column_1rw_1r_test.py | 6 +- compiler/tests/14_replica_column_test.py | 6 +- .../15_global_bitcell_array_1rw_1r_test.py | 2 +- .../tests/15_global_bitcell_array_test.py | 2 +- .../15_local_bitcell_array_1rw_1r_test.py | 2 +- .../tests/16_control_logic_multiport_test.py | 6 +- compiler/tests/16_control_logic_r_test.py | 2 +- compiler/tests/16_control_logic_rw_test.py | 4 +- compiler/tests/16_control_logic_w_test.py | 2 +- compiler/tests/18_port_address_1rw_1r_test.py | 6 +- compiler/tests/18_port_address_test.py | 4 +- compiler/tests/18_port_data_1rw_1r_test.py | 6 +- .../tests/18_port_data_spare_cols_test.py | 10 +- compiler/tests/18_port_data_test.py | 4 +- .../tests/18_port_data_wmask_1rw_1r_test.py | 2 +- compiler/tests/18_port_data_wmask_test.py | 2 +- compiler/tests/19_multi_bank_test.py | 4 +- compiler/tests/19_pmulti_bank_test.py | 4 +- compiler/tests/19_psingle_bank_test.py | 18 +- compiler/tests/19_single_bank_1rw_1r_test.py | 6 +- compiler/tests/19_single_bank_1w_1r_test.py | 6 +- .../tests/19_single_bank_global_bitline.py | 4 +- .../tests/19_single_bank_spare_cols_test.py | 4 +- compiler/tests/19_single_bank_test.py | 4 +- .../tests/19_single_bank_wmask_1rw_1r_test.py | 4 +- compiler/tests/19_single_bank_wmask_test.py | 4 +- .../tests/20_psram_1bank_2mux_1rw_1w_test.py | 6 +- .../tests/20_psram_1bank_2mux_1w_1r_test.py | 6 +- compiler/tests/20_psram_1bank_2mux_test.py | 8 +- .../tests/20_psram_1bank_4mux_1rw_1r_test.py | 6 +- ..._sram_1bank_2mux_1rw_1r_spare_cols_test.py | 6 +- .../tests/20_sram_1bank_2mux_1rw_1r_test.py | 6 +- ...0_sram_1bank_2mux_1w_1r_spare_cols_test.py | 8 +- .../tests/20_sram_1bank_2mux_1w_1r_test.py | 8 +- .../tests/20_sram_1bank_2mux_global_test.py | 2 +- compiler/tests/20_sram_1bank_2mux_test.py | 4 +- compiler/tests/20_sram_1bank_4mux_test.py | 2 +- .../tests/20_sram_1bank_8mux_1rw_1r_test.py | 4 +- compiler/tests/20_sram_1bank_8mux_test.py | 2 +- ...sram_1bank_nomux_1rw_1r_spare_cols_test.py | 6 +- .../tests/20_sram_1bank_nomux_1rw_1r_test.py | 6 +- compiler/tests/20_sram_1bank_nomux_test.py | 2 +- compiler/tests/20_sram_2bank_test.py | 2 +- compiler/tests/21_hspice_delay_test.py | 8 +- compiler/tests/21_hspice_setuphold_test.py | 6 +- compiler/tests/21_model_delay_test.py | 18 +- .../tests/21_ngspice_delay_extra_rows_test.py | 2 +- .../tests/21_ngspice_delay_global_test.py | 2 +- compiler/tests/21_ngspice_delay_test.py | 2 +- compiler/tests/21_ngspice_setuphold_test.py | 6 +- .../tests/22_psram_1bank_2mux_func_test.py | 8 +- .../tests/22_psram_1bank_4mux_func_test.py | 6 +- .../tests/22_psram_1bank_8mux_func_test.py | 8 +- .../tests/22_psram_1bank_nomux_func_test.py | 8 +- .../tests/22_sram_1bank_2mux_func_test.py | 8 +- .../22_sram_1bank_2mux_global_func_test.py | 8 +- .../22_sram_1bank_2mux_sparecols_func_test.py | 8 +- .../tests/22_sram_1bank_4mux_func_test.py | 6 +- .../tests/22_sram_1bank_8mux_func_test.py | 8 +- .../22_sram_1bank_nomux_1rw_1r_func_test.py | 10 +- .../tests/22_sram_1bank_nomux_func_test.py | 8 +- ...22_sram_1bank_nomux_sparecols_func_test.py | 8 +- .../22_sram_1bank_wmask_1rw_1r_func_test.py | 2 +- compiler/tests/22_sram_wmask_func_test.py | 4 +- .../tests/23_lib_sram_model_corners_test.py | 4 +- compiler/tests/23_lib_sram_model_test.py | 4 +- compiler/tests/23_lib_sram_prune_test.py | 2 +- compiler/tests/23_lib_sram_test.py | 2 +- compiler/tests/25_verilog_sram_test.py | 2 +- compiler/tests/26_hspice_pex_pinv_test.py | 2 +- compiler/tests/26_ngspice_pex_pinv_test.py | 2 +- compiler/tests/26_sram_pex_test.py | 8 +- compiler/tests/30_openram_back_end_test.py | 10 +- compiler/tests/30_openram_front_end_test.py | 8 +- compiler/tests/50_riscv_func_test.py | 8 +- compiler/tests/50_riscv_phys_test.py | 8 +- compiler/tests/testutils.py | 14 +- compiler/verify/__init__.py | 4 +- compiler/verify/assura.py | 6 +- compiler/verify/calibre.py | 4 +- compiler/verify/magic.py | 10 +- technology/freepdk45/__init__.py | 8 +- technology/freepdk45/tech/tech.py | 2 +- technology/scn3me_subm/__init__.py | 8 +- technology/scn3me_subm/tech/tech.py | 60 +-- technology/scn4m_subm/__init__.py | 8 +- technology/scn4m_subm/tech/tech.py | 40 +- 295 files changed, 2808 insertions(+), 2811 deletions(-) diff --git a/compiler/base/channel_route.py b/compiler/base/channel_route.py index 5ec955c1..5e86692e 100644 --- a/compiler/base/channel_route.py +++ b/compiler/base/channel_route.py @@ -17,7 +17,7 @@ class channel_net(): self.name = net_name self.pins = pins self.vertical = vertical - + # Keep track of the internval if vertical: self.min_value = min(i.by() for i in pins) @@ -25,34 +25,34 @@ class channel_net(): else: self.min_value = min(i.lx() for i in pins) self.max_value = max(i.rx() for i in pins) - + # Keep track of the conflicts self.conflicts = [] def __str__(self): return self.name - + def __repr__(self): return self.name - + def __lt__(self, other): return self.min_value < other.min_value def pin_overlap(self, pin1, pin2, pitch): """ Check for vertical or horizontal overlap of the two pins """ - + # FIXME: If the pins are not in a row, this may break. # However, a top pin shouldn't overlap another top pin, # for example, so the extra comparison *shouldn't* matter. - + # Pin 1 must be in the "BOTTOM" set x_overlap = pin1.by() < pin2.by() and abs(pin1.center().x - pin2.center().x) < pitch - + # Pin 1 must be in the "LEFT" set y_overlap = pin1.lx() < pin2.lx() and abs(pin1.center().y - pin2.center().y) < pitch overlaps = (not self.vertical and x_overlap) or (self.vertical and y_overlap) return overlaps - + def pins_overlap(self, other, pitch): """ Check all the pin pairs on two nets and return a pin @@ -73,8 +73,8 @@ class channel_net(): min_overlap = self.min_value >= other.min_value and self.min_value <= other.max_value max_overlap = self.max_value >= other.min_value and self.max_value <= other.max_value return min_overlap or max_overlap - - + + class channel_route(design.design): unique_id = 0 @@ -98,7 +98,7 @@ class channel_route(design.design): name = "cr_{0}".format(channel_route.unique_id) channel_route.unique_id += 1 super().__init__(name) - + self.netlist = netlist self.offset = offset self.layer_stack = layer_stack @@ -106,7 +106,7 @@ class channel_route(design.design): self.vertical = vertical # For debugging... self.parent = parent - + if not directions or directions == "pref": # Use the preferred layer directions if self.get_preferred_direction(layer_stack[0]) == "V": @@ -154,7 +154,7 @@ class channel_route(design.design): if pin in conflicts: g[other_pin].remove(pin) return g - + def route(self): # Create names for the nets for the graphs nets = [] @@ -180,7 +180,7 @@ class channel_route(design.design): except KeyError: hcg[net2.name] = set([net1.name]) - + # Initialize the vertical conflict graph (vcg) # and make a list of all pins vcg = collections.OrderedDict() @@ -204,12 +204,12 @@ class channel_route(design.design): # Skip yourself if net1.name == net2.name: continue - + if net1.pins_overlap(net2, pitch): vcg[net2.name].add(net1.name) # Check if there are any cycles net1 <---> net2 in the VCG - + # Some of the pins may be to the left/below the channel offset, # so adjust if this is the case @@ -226,7 +226,7 @@ class channel_route(design.design): while len(nets) > 0: current_offset_value = current_offset.y if self.vertical else current_offset.x - + # from pprint import pformat # print("VCG:\n", pformat(vcg)) # for name,net in vcg.items(): @@ -253,7 +253,7 @@ class channel_route(design.design): # Remove the net from other constriants in the VCG vcg = self.remove_net_from_graph(net.name, vcg) nets.remove(net) - + break else: # If we made a full pass and the offset didn't change... @@ -276,7 +276,7 @@ class channel_route(design.design): current_offset = vector(current_offset.x + self.horizontal_nonpref_pitch, real_channel_offset.y) else: current_offset = vector(real_channel_offset.x, current_offset.y + self.vertical_nonpref_pitch) - + # Return the size of the channel if self.vertical: self.width = current_offset.x + self.horizontal_nonpref_pitch - self.offset.x @@ -284,7 +284,7 @@ class channel_route(design.design): else: self.width = self.max_value + self.horizontal_nonpref_pitch - self.offset.x self.height = current_offset.y + self.vertical_nonpref_pitch - self.offset.y - + def get_layer_pitch(self, layer): """ Return the track pitch on a given layer """ try: @@ -307,10 +307,10 @@ class channel_route(design.design): """ max_x = max([pin.center().x for pin in pins]) min_x = min([pin.center().x for pin in pins]) - + # if we are less than a pitch, just create a non-preferred layer jog non_preferred_route = max_x - min_x <= pitch - + if non_preferred_route: half_layer_width = 0.5 * drc["minwidth_{0}".format(self.vertical_layer)] # Add the horizontal trunk on the vertical layer! @@ -324,7 +324,7 @@ class channel_route(design.design): pin_pos = pin.uc() else: pin_pos = pin.bc() - + # No bend needed here mid = vector(pin_pos.x, trunk_offset.y) self.add_path(self.vertical_layer, [pin_pos, mid]) @@ -361,10 +361,10 @@ class channel_route(design.design): """ max_y = max([pin.center().y for pin in pins]) min_y = min([pin.center().y for pin in pins]) - + # if we are less than a pitch, just create a non-preferred layer jog non_preferred_route = max_y - min_y <= pitch - + if non_preferred_route: half_layer_width = 0.5 * drc["minwidth_{0}".format(self.horizontal_layer)] # Add the vertical trunk on the horizontal layer! diff --git a/compiler/base/contact.py b/compiler/base/contact.py index a02e6066..1f38fc38 100644 --- a/compiler/base/contact.py +++ b/compiler/base/contact.py @@ -33,7 +33,7 @@ class contact(hierarchy_design.hierarchy_design): implant_type=None, well_type=None, name=""): # This will ignore the name parameter since # we can guarantee a unique name here - + super().__init__(name, name) debug.info(4, "create contact object {0}".format(name)) @@ -80,7 +80,7 @@ class contact(hierarchy_design.hierarchy_design): self.create_first_layer_enclosure() self.create_second_layer_enclosure() self.create_nitride_cut_enclosure() - + self.height = max(self.first_layer_position.y + self.first_layer_height, self.second_layer_position.y + self.second_layer_height) self.width = max(self.first_layer_position.x + self.first_layer_width, @@ -99,7 +99,7 @@ class contact(hierarchy_design.hierarchy_design): (first_layer, via_layer, second_layer) = self.layer_stack self.first_layer_name = first_layer self.second_layer_name = second_layer - + # Contacts will have unique per first layer if via_layer in tech.layer: self.via_layer_name = via_layer @@ -115,7 +115,7 @@ class contact(hierarchy_design.hierarchy_design): def setup_layout_constants(self): """ Determine the design rules for the enclosure layers """ - + self.contact_width = drc("minwidth_{0}". format(self.via_layer_name)) contact_to_contact = drc("{0}_to_{0}".format(self.via_layer_name)) self.contact_pitch = self.contact_width + contact_to_contact @@ -126,7 +126,7 @@ class contact(hierarchy_design.hierarchy_design): # DRC rules # The extend rule applies to asymmetric enclosures in one direction. # The enclosure rule applies to symmetric enclosure component. - + self.first_layer_minwidth = drc("minwidth_{0}".format(self.first_layer_name)) self.first_layer_enclosure = drc("{0}_enclose_{1}".format(self.first_layer_name, self.via_layer_name)) # If there's a different rule for active @@ -171,7 +171,7 @@ class contact(hierarchy_design.hierarchy_design): (self.second_layer_minwidth - self.contact_array_width) / 2) else: debug.error("Invalid secon layer direction: ".format(self.directions[1]), -1) - + def create_contact_array(self): """ Create the contact array at the origin""" # offset for the via array @@ -210,7 +210,7 @@ class contact(hierarchy_design.hierarchy_design): offset=self.second_layer_position - npc_enclose_offset, width=self.second_layer_width + 2 * npc_enclose_poly, height=self.second_layer_height + 2 * npc_enclose_poly) - + def create_first_layer_enclosure(self): # this is if the first and second layers are different self.first_layer_position = vector( @@ -269,12 +269,12 @@ class contact(hierarchy_design.hierarchy_design): offset=well_position, width=self.well_width, height=self.well_height) - + def analytical_power(self, corner, load): """ Get total power of a module """ return self.return_power() - + # Set up a static for each layer to be used for measurements for layer_stack in tech.layer_stacks: (layer1, via, layer2) = layer_stack @@ -295,7 +295,7 @@ if "nwell" in tech.layer: well_type="n") module = sys.modules[__name__] setattr(module, "nwell_contact", cont) - + if "pwell" in tech.layer: cont = factory.create(module_type="contact", layer_stack=tech.active_stack, diff --git a/compiler/base/custom_cell_properties.py b/compiler/base/custom_cell_properties.py index 43c84206..fc2445ab 100644 --- a/compiler/base/custom_cell_properties.py +++ b/compiler/base/custom_cell_properties.py @@ -15,7 +15,7 @@ class _pins: for k, v in pin_dict.items(): self.__dict__[k] = v - + class _cell: def __init__(self, pin_dict): pin_dict.update(self._default_power_pins()) @@ -29,24 +29,24 @@ class _cell: return {'vdd': 'vdd', 'gnd': 'gnd'} - + class _mirror_axis: def __init__(self, x, y): self.x = x self.y = y - + class _ptx: def __init__(self, model_is_subckt, bin_spice_models): self.model_is_subckt = model_is_subckt self.bin_spice_models = bin_spice_models - + class _pgate: def __init__(self, add_implants): self.add_implants = add_implants - + class _bitcell: def __init__(self, mirror, cell_s8_6t, cell_6t, cell_1rw1r, cell_1w1r): self.mirror = mirror @@ -110,25 +110,25 @@ class _dff: self.custom_type_list = custom_type_list self.clk_pin = clk_pin - + class _dff_buff: def __init__(self, use_custom_ports, custom_buff_ports, add_body_contacts): self.use_custom_ports = use_custom_ports self.buf_ports = custom_buff_ports self.add_body_contacts = add_body_contacts - + class _dff_buff_array: def __init__(self, use_custom_ports, add_body_contacts): self.use_custom_ports = use_custom_ports self.add_body_contacts = add_body_contacts - + class _bitcell_array: def __init__(self, use_custom_cell_arrangement): self.use_custom_cell_arrangement = use_custom_cell_arrangement - + class cell_properties(): """ This contains meta information about the custom designed cells. For @@ -142,14 +142,14 @@ class cell_properties(): self._ptx = _ptx(model_is_subckt=False, bin_spice_models=False) - + self._pgate = _pgate(add_implants=False) - + self._dff = _dff(use_custom_ports=False, custom_port_list=["D", "Q", "clk", "vdd", "gnd"], custom_type_list=["INPUT", "OUTPUT", "INPUT", "POWER", "GROUND"], clk_pin="clk") - + self._dff_buff = _dff_buff(use_custom_ports=False, custom_buff_ports=["D", "qint", "clk", "vdd", "gnd"], add_body_contacts=False) @@ -176,7 +176,7 @@ class cell_properties(): @property def ptx(self): return self._ptx - + @property def pgate(self): return self._pgate @@ -184,7 +184,7 @@ class cell_properties(): @property def dff(self): return self._dff - + @property def dff_buff(self): return self._dff_buff @@ -200,7 +200,7 @@ class cell_properties(): @property def sense_amp(self): return self._sense_amp - + @property def bitcell_array(self): return self._bitcell_array diff --git a/compiler/base/custom_layer_properties.py b/compiler/base/custom_layer_properties.py index 36e044c5..7f8e5993 100644 --- a/compiler/base/custom_layer_properties.py +++ b/compiler/base/custom_layer_properties.py @@ -6,7 +6,7 @@ # All rights reserved. # - + class _bank: def __init__(self, stack, pitch): # bank @@ -15,8 +15,8 @@ class _bank: # m2_stack, m3_pitch (sky130) self.stack = stack self.pitch = pitch - - + + class _hierarchical_decoder: def __init__(self, bus_layer, @@ -60,7 +60,7 @@ class _hierarchical_predecode: self.output_layer = output_layer self.vertical_supply = vertical_supply - + class _column_mux_array: def __init__(self, select_layer, @@ -74,7 +74,7 @@ class _column_mux_array: self.select_pitch= select_pitch self.bitline_layer = bitline_layer - + class _port_address: def __init__(self, supply_offset): @@ -82,7 +82,7 @@ class _port_address: # special supply offset self.supply_offset = supply_offset - + class _port_data: def __init__(self, channel_route_bitlines, @@ -94,7 +94,7 @@ class _port_data: # en_layer # m1 # m3 (sky130) - + # precharge_array # en_bar_layer # m1 @@ -110,7 +110,7 @@ class _replica_column: # even row check (sky130) self.even_rows = even_rows - + class _wordline_driver: def __init__(self, vertical_supply): @@ -122,14 +122,14 @@ class _wordline_driver: # vertical vdd/gnd (sky130) self.vertical_supply = vertical_supply - + class layer_properties(): """ This contains meta information about the module routing layers. These can be overriden in the tech.py file. """ def __init__(self): - + self._bank = _bank(stack="m1_stack", pitch="m2_pitch") @@ -138,7 +138,7 @@ class layer_properties(): input_layer="m1", output_layer="m3", vertical_supply=False) - + self._hierarchical_predecode = _hierarchical_predecode(bus_layer="m2", bus_directions="pref", bus_space_factor=1, @@ -156,13 +156,13 @@ class layer_properties(): enable_layer="m1") self._replica_column = _replica_column(even_rows=False) - + self._wordline_driver = _wordline_driver(vertical_supply=False) @property def bank(self): return self._bank - + @property def column_mux_array(self): return self._column_mux_array @@ -174,7 +174,7 @@ class layer_properties(): @property def hierarchical_predecode(self): return self._hierarchical_predecode - + @property def port_address(self): return self._port_address @@ -190,4 +190,4 @@ class layer_properties(): @property def wordline_driver(self): return self._wordline_driver - + diff --git a/compiler/base/delay_data.py b/compiler/base/delay_data.py index 97fe9867..5157de76 100644 --- a/compiler/base/delay_data.py +++ b/compiler/base/delay_data.py @@ -38,7 +38,7 @@ class delay_data(): assert isinstance(other, delay_data) return delay_data(other.delay + self.delay, self.slew) - + diff --git a/compiler/base/design.py b/compiler/base/design.py index 714eaf8b..79e85ab2 100644 --- a/compiler/base/design.py +++ b/compiler/base/design.py @@ -19,14 +19,14 @@ class design(hierarchy_design): some DRC/layer constants and analytical models for other modules to reuse. """ - + def __init__(self, name, cell_name=None): if not cell_name: cell_name = name super().__init__(name, cell_name) self.setup_multiport_constants() - + def check_pins(self): for pin_name in self.pins: pins = self.get_pins(pin_name) @@ -54,7 +54,7 @@ class design(hierarchy_design): match = re.search(r"minarea_(.*)", rule) if match: setattr(design, match.group(0), drc(match.group(0))) - + # Single layer spacing rules match = re.search(r"(.*)_to_(.*)", rule) if match and match.group(1) == match.group(2): @@ -65,7 +65,7 @@ class design(hierarchy_design): drc(match.group(0))) else: setattr(design, match.group(0), drc(match.group(0))) - + match = re.search(r"(.*)_enclose_(.*)", rule) if match: setattr(design, match.group(0), drc(match.group(0))) @@ -96,7 +96,7 @@ class design(hierarchy_design): design.well_enclose_active = max(design.pwell_enclose_active, design.nwell_enclose_active, design.active_space) - + # These are for debugging previous manual rules if False: print("poly_width", design.poly_width) @@ -129,7 +129,7 @@ class design(hierarchy_design): These are some layer constants used in many places in the compiler. """ - + from tech import layer_indices import tech for layer in layer_indices: @@ -145,17 +145,17 @@ class design(hierarchy_design): # Skip computing the pitch for active if layer == "active": continue - + # Add the pitch setattr(design, "{}_pitch".format(layer), design.compute_pitch(layer, True)) - + # Add the non-preferrd pitch (which has vias in the "wrong" way) setattr(design, "{}_nonpref_pitch".format(layer), design.compute_pitch(layer, False)) - + if False: from tech import preferred_directions print(preferred_directions) @@ -175,9 +175,9 @@ class design(hierarchy_design): import sys sys.exit(1) - @staticmethod + @staticmethod def compute_pitch(layer, preferred=True): - + """ This is the preferred direction pitch i.e. we take the minimum or maximum contact dimension @@ -197,7 +197,7 @@ class design(hierarchy_design): @staticmethod def get_preferred_direction(layer): return preferred_directions[layer] - + @staticmethod def compute_layer_pitch(layer_stack, preferred): @@ -230,7 +230,7 @@ class design(hierarchy_design): def setup_multiport_constants(self): - """ + """ These are contants and lists that aid multiport design. Ports are always in the order RW, W, R. Port indices start from 0 and increment. @@ -268,14 +268,14 @@ class design(hierarchy_design): self.read_ports.append(port_number) self.readonly_ports.append(port_number) port_number += 1 - + def analytical_power(self, corner, load): """ Get total power of a module """ total_module_power = self.return_power() for inst in self.insts: total_module_power += inst.mod.analytical_power(corner, load) return total_module_power - + design.setup_drc_constants() design.setup_layer_constants() - + diff --git a/compiler/base/geometry.py b/compiler/base/geometry.py index 2cb6e897..c8f6036f 100644 --- a/compiler/base/geometry.py +++ b/compiler/base/geometry.py @@ -153,7 +153,7 @@ class geometry: def center(self): """ Return the center coordinate """ return vector(self.cx(), self.cy()) - + class instance(geometry): """ @@ -271,9 +271,9 @@ class instance(geometry): p.transform(self.offset, self.mirror, self.rotate) new_pins.append(p) return new_pins - + def calculate_transform(self, node): - #set up the rotation matrix + #set up the rotation matrix angle = math.radians(float(node.rotate)) mRotate = np.array([[math.cos(angle),-math.sin(angle),0.0], [math.sin(angle),math.cos(angle),0.0], @@ -285,7 +285,7 @@ class instance(geometry): mTranslate = np.array([[1.0,0.0,translateX], [0.0,1.0,translateY], [0.0,0.0,1.0]]) - + #set up the scale matrix (handles mirror X) scaleX = 1.0 if(node.mirror == 'MX'): @@ -295,7 +295,7 @@ class instance(geometry): mScale = np.array([[scaleX,0.0,0.0], [0.0,scaleY,0.0], [0.0,0.0,1.0]]) - + return (mRotate, mScale, mTranslate) def apply_transform(self, mtransforms, uVector, vVector, origin): @@ -312,13 +312,13 @@ class instance(geometry): def apply_path_transform(self, path): uVector = np.array([[1.0],[0.0],[0.0]]) vVector = np.array([[0.0],[1.0],[0.0]]) - origin = np.array([[0.0],[0.0],[1.0]]) + origin = np.array([[0.0],[0.0],[1.0]]) while(path): instance = path.pop(-1) mtransforms = self.calculate_transform(instance) (uVector, vVector, origin) = self.apply_transform(mtransforms, uVector, vVector, origin) - + return (uVector, vVector, origin) def reverse_transformation_bitcell(self, cell_name): @@ -339,7 +339,7 @@ class instance(geometry): cell_paths.append(copy.copy(path)) inst_name = path[-1].name - + # get the row and col names from the path row = int(path[-1].name.split('_')[-2][1:]) col = int(path[-1].name.split('_')[-1][1:]) @@ -349,7 +349,7 @@ class instance(geometry): normalized_storage_nets = node.mod.get_normalized_storage_nets_offset() (normalized_bl_offsets, normalized_br_offsets, bl_names, br_names) = node.mod.get_normalized_bitline_offset() - + for offset in range(len(normalized_bl_offsets)): for port in range(len(bl_names)): cell_bl_meta.append([bl_names[offset], row, col, port]) @@ -369,18 +369,18 @@ class instance(geometry): Q_bar_y = -1 * Q_bar_y for pair in range(len(normalized_bl_offsets)): - normalized_bl_offsets[pair] = (normalized_bl_offsets[pair][0], + normalized_bl_offsets[pair] = (normalized_bl_offsets[pair][0], -1 * normalized_bl_offsets[pair][1]) for pair in range(len(normalized_br_offsets)): - normalized_br_offsets[pair] = (normalized_br_offsets[pair][0], + normalized_br_offsets[pair] = (normalized_br_offsets[pair][0], -1 * normalized_br_offsets[pair][1]) - - Q_offsets.append([Q_x, Q_y]) + + Q_offsets.append([Q_x, Q_y]) Q_bar_offsets.append([Q_bar_x, Q_bar_y]) - - + + bl_offsets.append(normalized_bl_offsets) br_offsets.append(normalized_br_offsets) @@ -408,7 +408,7 @@ class instance(geometry): """ override print function output """ return "( inst: " + self.name + " @" + str(self.offset) + " mod=" + self.mod.cell_name + " " + self.mirror + " R=" + str(self.rotate) + ")" - + class path(geometry): """Represents a Path""" diff --git a/compiler/base/graph_util.py b/compiler/base/graph_util.py index 6d4ee5da..d7afbf26 100644 --- a/compiler/base/graph_util.py +++ b/compiler/base/graph_util.py @@ -2,13 +2,13 @@ import copy from collections import defaultdict import debug - + class timing_graph(): """ Implements a directed graph Nodes are currently just Strings. """ - + def __init__(self): self.graph = defaultdict(set) self.all_paths = [] @@ -17,7 +17,7 @@ class timing_graph(): def add_edge(self, src_node, dest_node, edge_mod): """Adds edge to graph. Nodes added as well if they do not exist. Module which defines the edge must be provided for timing information.""" - + src_node = src_node.lower() dest_node = dest_node.lower() self.graph[src_node].add(dest_node) @@ -25,99 +25,99 @@ class timing_graph(): def add_node(self, node): """Add node to graph with no edges""" - + node = node.lower() if node not in self.graph: self.graph[node] = set() - + def remove_edges(self, node): """Helper function to remove edges, useful for removing vdd/gnd""" - + node = node.lower() self.graph[node] = set() - + def get_all_paths(self, src_node, dest_node, remove_rail_nodes=True, reduce_paths=True): """Traverse all paths from source to destination""" - + src_node = src_node.lower() dest_node = dest_node.lower() - + # Remove vdd and gnd by default # Will require edits if separate supplies are implemented. if remove_rail_nodes: # Names are also assumed. self.remove_edges('vdd') self.remove_edges('gnd') - - # Mark all the vertices as not visited + + # Mark all the vertices as not visited visited = set() - - # Create an array to store paths + + # Create an array to store paths path = [] self.all_paths = [] - - # Call the recursive helper function to print all paths + + # Call the recursive helper function to print all paths self.get_all_paths_util(src_node, dest_node, visited, path) debug.info(2, "Paths found={}".format(len(self.all_paths))) if reduce_paths: self.reduce_paths() - + return self.all_paths def reduce_paths(self): """ Remove any path that is a subset of another path """ - + self.all_paths = [p1 for p1 in self.all_paths if not any(set(p1)<=set(p2) for p2 in self.all_paths if p1 is not p2)] - + def get_all_paths_util(self, cur_node, dest_node, visited, path): """Recursive function to find all paths in a Depth First Search manner""" - - # Mark the current node as visited and store in path + + # Mark the current node as visited and store in path visited.add(cur_node) path.append(cur_node) - - # If current vertex is same as destination, then print - # current path[] + + # If current vertex is same as destination, then print + # current path[] if cur_node == dest_node: self.all_paths.append(copy.deepcopy(path)) else: - # If current vertex is not destination - # Recur for all the vertices adjacent to this vertex + # If current vertex is not destination + # Recur for all the vertices adjacent to this vertex for node in self.graph[cur_node]: if node not in visited: self.get_all_paths_util(node, dest_node, visited, path) - - # Remove current vertex from path[] and mark it as unvisited + + # Remove current vertex from path[] and mark it as unvisited path.pop() visited.remove(cur_node) def get_timing(self, path, corner, slew, load): """Returns the analytical delays in the input path""" - + if len(path) == 0: return [] - + delays = [] cur_slew = slew for i in range(len(path) - 1): - + path_edge_mod = self.edge_mods[(path[i], path[i + 1])] - + # On the output of the current stage, get COUT from all other mods connected cout = 0 for node in self.graph[path[i + 1]]: output_edge_mod = self.edge_mods[(path[i + 1], node)] cout+=output_edge_mod.get_cin() - # If at the last output, include the final output load + # If at the last output, include the final output load if i == len(path) - 2: cout += load - + delays.append(path_edge_mod.analytical_delay(corner, cur_slew, cout)) cur_slew = delays[-1].slew - + return delays - + def __str__(self): """ override print function output """ @@ -132,4 +132,4 @@ class timing_graph(): """ override print function output """ return str(self) - + diff --git a/compiler/base/hierarchy_design.py b/compiler/base/hierarchy_design.py index d453297a..271e39b8 100644 --- a/compiler/base/hierarchy_design.py +++ b/compiler/base/hierarchy_design.py @@ -56,7 +56,7 @@ class hierarchy_design(hierarchy_spice.spice, hierarchy_layout.layout): debug.error("Couldn't find instance {0}".format(inst.name), -1) inst_map = inst.mod.pin_map return inst_map - + def DRC_LVS(self, final_verification=False, force_check=False): """Checks both DRC and LVS for a module""" import verify @@ -93,7 +93,7 @@ class hierarchy_design(hierarchy_spice.spice, hierarchy_layout.layout): if OPTS.purge_temp: os.remove(tempspice) os.remove(tempgds) - + def DRC(self, final_verification=False): """Checks DRC for a module""" import verify @@ -137,19 +137,19 @@ class hierarchy_design(hierarchy_spice.spice, hierarchy_layout.layout): if OPTS.purge_temp: os.remove(tempspice) os.remove(tempgds) - + def init_graph_params(self): - """ + """ Initializes parameters relevant to the graph creation """ # Only initializes a set for checking instances which should not be added self.graph_inst_exclude = set() - + def build_graph(self, graph, inst_name, port_nets): """ Recursively create graph from instances in module. """ - + # Translate port names to external nets if len(port_nets) != len(self.pins): debug.error("Port length mismatch:\nExt nets={}, Ports={}".format(port_nets, @@ -163,7 +163,7 @@ class hierarchy_design(hierarchy_spice.spice, hierarchy_layout.layout): subinst_name = inst_name + '.X' + subinst.name subinst_ports = self.translate_nets(conns, port_dict, inst_name) subinst.mod.build_graph(graph, subinst_name, subinst_ports) - + def build_names(self, name_dict, inst_name, port_nets): """ Collects all the nets and the parent inst of that net. @@ -196,7 +196,7 @@ class hierarchy_design(hierarchy_spice.spice, hierarchy_layout.layout): else: converted_conns.append("{}.{}".format(inst_name, conn)) return converted_conns - + def add_graph_edges(self, graph, port_nets): """ For every input, adds an edge to every output. @@ -212,7 +212,7 @@ class hierarchy_design(hierarchy_spice.spice, hierarchy_layout.layout): for out in output_pins + inout_pins: if inp != out: # do not add self loops graph.add_edge(pin_dict[inp], pin_dict[out], self) - + def __str__(self): """ override print function output """ pins = ",".join(self.pins) @@ -232,4 +232,4 @@ class hierarchy_design(hierarchy_spice.spice, hierarchy_layout.layout): for i in self.insts: text+=str(i) + ",\n" return text - + diff --git a/compiler/base/hierarchy_layout.py b/compiler/base/hierarchy_layout.py index 040af129..8d76e2d2 100644 --- a/compiler/base/hierarchy_layout.py +++ b/compiler/base/hierarchy_layout.py @@ -67,13 +67,13 @@ class layout(): def offset_x_coordinates(self): """ This function is called after everything is placed to - shift the origin to the furthest left point. + shift the origin to the furthest left point. Y offset is unchanged. """ offset = self.find_lowest_coords() self.translate_all(offset.scale(1, 0)) return offset - + def get_gate_offset(self, x_offset, height, inv_num): """ Gets the base offset and y orientation of stacked rows of gates @@ -300,9 +300,9 @@ class layout(): tx_list.append(i) except AttributeError: pass - + return tx_list - + def get_pin(self, text): """ Return the pin or list of pins @@ -613,24 +613,24 @@ class layout(): next_id = 0 curr_stack = next(filter(lambda stack: stack[search_id] == cur_layer, layer_stacks), None) - + via = self.add_via_center(layers=curr_stack, size=size, offset=offset, directions=directions, implant_type=implant_type, well_type=well_type) - + if cur_layer != from_layer: self.add_min_area_rect_center(cur_layer, offset, via.mod.first_layer_width, via.mod.first_layer_height) - + cur_layer = curr_stack[next_id] return via - + def add_min_area_rect_center(self, layer, offset, @@ -644,14 +644,14 @@ class layout(): min_area = drc("minarea_{}".format(layer)) if min_area == 0: return - + min_width = drc("minwidth_{}".format(layer)) - + if preferred_directions[layer] == "V": height = max(min_area / width, min_width) else: width = max(min_area / height, min_width) - + self.add_rect_center(layer=layer, offset=offset, width=width, @@ -735,7 +735,7 @@ class layout(): height = boundary[1][1] - boundary[0][1] width = boundary[1][0] - boundary[0][0] - + for boundary_layer in boundary_layers: (layer_number, layer_purpose) = techlayer[boundary_layer] gds_layout.addBox(layerNumber=layer_number, @@ -887,7 +887,7 @@ class layout(): new_pin = pin_layout(names[i], [rect.ll(), rect.ur()], layer) - + pins[names[i]] = new_pin else: for i in range(len(names)): @@ -905,7 +905,7 @@ class layout(): new_pin = pin_layout(names[i], [rect.ll(), rect.ur()], layer) - + pins[names[i]] = new_pin return pins @@ -1043,7 +1043,7 @@ class layout(): cr = channel_route.channel_route(netlist, offset, layer_stack, directions, vertical=False, parent=self) self.add_inst(cr.name, cr) self.connect_inst([]) - + def add_boundary(self, ll=vector(0, 0), ur=None): """ Add boundary for debugging dimensions """ if OPTS.netlist_only: @@ -1108,7 +1108,7 @@ class layout(): width=xmax - xmin, height=ymax - ymin) return rect - + def copy_power_pins(self, inst, name, add_vias=True): """ This will copy a power pin if it is on the lowest power_grid layer. @@ -1167,7 +1167,7 @@ class layout(): bottom = ll.y right = ur.x top = ur.y - + pin_loc = pin.center() if side == "left": peri_pin_loc = vector(left, pin_loc.y) @@ -1185,14 +1185,14 @@ class layout(): self.add_via_stack_center(from_layer=pin.layer, to_layer=layer, offset=pin_loc) - + self.add_path(layer, [pin_loc, peri_pin_loc]) return self.add_layout_pin_rect_center(text=name, layer=layer, offset=peri_pin_loc) - + def add_power_ring(self, bbox): """ Create vdd and gnd power rings around an area of the bounding box diff --git a/compiler/base/hierarchy_spice.py b/compiler/base/hierarchy_spice.py index c1271ee7..d971492e 100644 --- a/compiler/base/hierarchy_spice.py +++ b/compiler/base/hierarchy_spice.py @@ -65,7 +65,7 @@ class spice(): self.comments = [] self.comments.append(comment) - + def add_pin(self, name, pin_type="INOUT"): """ Adds a pin to the pins list. Default type is INOUT signal. """ self.pins.append(name) @@ -84,7 +84,7 @@ class spice(): "Invalid signaltype for {0}: {1}".format(pin, pin_type)) self.add_pin(pin, pin_type) - + elif len(pin_type)==len(pin_list): for (pin, ptype) in zip(pin_list, pin_type): debug.check(ptype in self.valid_signal_types, @@ -106,7 +106,7 @@ class spice(): \n Module names={}\ ".format(self.name, self.pin_names, self.pins), 1) self.pin_type = {pin: type for pin, type in zip(self.pin_names, type_list)} - + def get_pin_type(self, name): """ Returns the type of the signal pin. """ pin_type = self.pin_type[name] @@ -120,7 +120,7 @@ class spice(): return "INOUT" else: return self.pin_type[name] - + def get_inputs(self): """ These use pin types to determine pin lists. These may be over-ridden by submodules that didn't use pin directions yet.""" @@ -184,7 +184,7 @@ class spice(): if check and (len(self.insts)!=len(self.conns)): insts_string=pformat(self.insts) conns_string=pformat(self.conns) - + debug.error("{0} : Not all instance pins ({1}) are connected ({2}).".format(self.name, len(self.insts), len(self.conns))) @@ -239,7 +239,7 @@ class spice(): # parses line into ports and remove subckt lvs_pins = subckt_line.split(" ")[2:] debug.check(lvs_pins == self.pins, "LVS and spice file pin mismatch.") - + def check_net_in_spice(self, net_name): """Checks if a net name exists in the current. Intended to be check nets in hand-made cells.""" # Remove spaces and lower case then add spaces. @@ -255,14 +255,14 @@ class spice(): if net_formatted in line: return True return False - + def do_nets_exist(self, nets): """For handmade cell, checks sp file contains the storage nodes.""" nets_match = True for net in nets: nets_match = nets_match and self.check_net_in_spice(net) return nets_match - + def contains(self, mod, modlist): for x in modlist: if x.name == mod.name: @@ -279,7 +279,7 @@ class spice(): return elif not self.spice: # If spice isn't defined, we dynamically generate one. - + # recursively write the modules for i in self.mods: if self.contains(i, usedMODS): @@ -298,10 +298,10 @@ class spice(): for pin in self.pins: sp.write("* {1:6}: {0} \n".format(pin, self.pin_type[pin])) - + for line in self.comments: sp.write("* {}\n".format(line)) - + # every instance must have a set of connections, even if it is empty. if len(self.insts) != len(self.conns): debug.error("{0} : Not all instance pins ({1}) are connected ({2}).".format(self.cell_name, @@ -343,7 +343,7 @@ class spice(): sp.write("\n".join(self.lvs)) else: sp.write("\n".join(self.spice)) - + sp.write("\n") def sp_write(self, spname): @@ -365,19 +365,19 @@ class spice(): self.sp_write_file(spfile, usedMODS, True) del usedMODS spfile.close() - + def analytical_delay(self, corner, slew, load=0.0): """Inform users undefined delay module while building new modules""" - + # FIXME: Slew is not used in the model right now. # Can be added heuristically as linear factor relative_cap = logical_effort.convert_farad_to_relative_c(load) stage_effort = self.get_stage_effort(relative_cap) - + # If it fails, then keep running with a valid object. if not stage_effort: return delay_data(0.0, 0.0) - + abs_delay = stage_effort.get_absolute_delay() corner_delay = self.apply_corners_analytically(abs_delay, corner) SLEW_APPROXIMATION = 0.1 @@ -392,16 +392,16 @@ class spice(): .format(self.__class__.__name__, self.cell_name)) return None - + def get_cin(self): """Returns input load in Femto-Farads. All values generated using relative capacitance function then converted based on tech file parameter.""" - + # Override this function within a module if a more accurate input capacitance is needed. # Input/outputs with differing capacitances is not implemented. relative_cap = self.input_load() return logical_effort.convert_relative_c_to_farad(relative_cap) - + def input_load(self): """Inform users undefined relative capacitance functions used for analytical delays.""" debug.warning("Design Class {0} input capacitance function needs to be defined" @@ -410,7 +410,7 @@ class spice(): .format(self.__class__.__name__, self.cell_name)) return 0 - + def cal_delay_with_rc(self, corner, r, c, slew, swing=0.5): """ Calculate the delay of a mosfet by @@ -420,7 +420,7 @@ class spice(): delay = swing_factor * r * c # c is in ff and delay is in fs delay = self.apply_corners_analytically(delay, corner) delay = delay * 0.001 # make the unit to ps - + # Output slew should be linear to input slew which is described # as 0.005* slew. @@ -439,7 +439,7 @@ class spice(): volt_mult = self.get_voltage_delay_factor(vdd) temp_mult = self.get_temp_delay_factor(temp) return delay * proc_mult * volt_mult * temp_mult - + def get_process_delay_factor(self, proc): """Returns delay increase estimate based off process Currently does +/-10 for fast/slow corners.""" @@ -452,13 +452,13 @@ class spice(): elif mos_proc == 'S': proc_factors.append(1.1) return proc_factors - + def get_voltage_delay_factor(self, voltage): """Returns delay increase due to voltage. Implemented as linear factor based off nominal voltage. """ return tech.spice["nom_supply_voltage"] / voltage - + def get_temp_delay_factor(self, temp): """Returns delay increase due to temperature (in C). Determines effect on threshold voltage and then linear factor is estimated. @@ -478,7 +478,7 @@ class spice(): def generate_rc_net(self, lump_num, wire_length, wire_width): return wire_spice_model(lump_num, wire_length, wire_width) - + def calc_dynamic_power(self, corner, c, freq, swing=1.0): """ Calculate dynamic power using effective capacitance, frequency, and corner (PVT) @@ -486,16 +486,16 @@ class spice(): proc, vdd, temp = corner net_vswing = vdd * swing power_dyn = c * vdd * net_vswing * freq - + # A pply process and temperature factors. # Roughly, process and Vdd affect the delay which affects the power. # No other estimations are currently used. Increased delay->slower freq.->less power proc_div = max(self.get_process_delay_factor(proc)) temp_div = self.get_temp_delay_factor(temp) power_dyn = power_dyn / (proc_div * temp_div) - + return power_dyn - + def return_power(self, dynamic=0.0, leakage=0.0): return power_data(dynamic, leakage) @@ -519,7 +519,7 @@ class spice(): if int_mod.is_net_alias(int_net, alias, alias_mod, exclusion_set): aliases.append(net) return aliases - + def is_net_alias(self, known_net, net_alias, mod, exclusion_set): """ Checks if the alias_net in input mod is the same as the input net for this mod (self). @@ -541,7 +541,7 @@ class spice(): return True mod_set.add(subinst.mod) return False - + def is_net_alias_name_check(self, parent_net, child_net, alias_net, mod): """ Utility function for checking single net alias. diff --git a/compiler/base/lef.py b/compiler/base/lef.py index af539742..7cd11a93 100644 --- a/compiler/base/lef.py +++ b/compiler/base/lef.py @@ -41,7 +41,7 @@ class lef: self.lef_write_obstructions() self.lef_write_footer() self.lef.close() - + def lef_write_header(self): """ Header of LEF file """ self.lef.write("VERSION 5.4 ;\n") @@ -51,7 +51,7 @@ class lef: self.lef.write("UNITS\n") self.lef.write(" DATABASE MICRONS {0} ;\n".format(self.lef_units)) self.lef.write("END UNITS\n") - + self.lef.write("{0}MACRO {1}\n".format(self.indent,self.name)) self.indent += " " self.lef.write("{0}CLASS BLOCK ;\n".format(self.indent)) @@ -59,25 +59,25 @@ class lef: round(self.width,self.round_grid), round(self.height,self.round_grid))) self.lef.write("{0}SYMMETRY X Y R90 ;\n".format(self.indent)) - + def lef_write_footer(self): self.lef.write("{0}END {1}\n".format(self.indent,self.name)) self.indent = self.indent[:-3] self.lef.write("END LIBRARY\n") - - + + def lef_write_pin(self, name): pin_dir = self.get_pin_dir(name) pin_type = self.get_pin_type(name) self.lef.write("{0}PIN {1}\n".format(self.indent,name)) self.indent += " " - + self.lef.write("{0}DIRECTION {1} ;\n".format(self.indent,pin_dir)) - + if pin_type in ["POWER","GROUND"]: self.lef.write("{0}USE {1} ; \n".format(self.indent,pin_type)) self.lef.write("{0}SHAPE ABUTMENT ; \n".format(self.indent)) - + self.lef.write("{0}PORT\n".format(self.indent)) self.indent += " " @@ -86,7 +86,7 @@ class lef: for pin in pin_list: self.lef.write("{0}LAYER {1} ;\n".format(self.indent,pin.layer)) self.lef_write_shape(pin.rect) - + # End the PORT self.indent = self.indent[:-3] self.lef.write("{0}END\n".format(self.indent)) @@ -94,7 +94,7 @@ class lef: # End the PIN self.indent = self.indent[:-3] self.lef.write("{0}END {1}\n".format(self.indent,name)) - + def lef_write_obstructions(self): """ Write all the obstructions on each layer """ self.lef.write("{0}OBS\n".format(self.indent)) @@ -111,16 +111,16 @@ class lef: self.lef.write("{0}END\n".format(self.indent)) def lef_write_shape(self, rect): - if len(rect) == 2: + if len(rect) == 2: """ Write a LEF rectangle """ - self.lef.write("{0}RECT ".format(self.indent)) + self.lef.write("{0}RECT ".format(self.indent)) for item in rect: # print(rect) self.lef.write(" {0} {1}".format(round(item[0],self.round_grid), round(item[1],self.round_grid))) self.lef.write(" ;\n") - else: + else: """ Write a LEF polygon """ - self.lef.write("{0}POLYGON ".format(self.indent)) + self.lef.write("{0}POLYGON ".format(self.indent)) for item in rect: self.lef.write(" {0} {1}".format(round(item[0],self.round_grid), round(item[1],self.round_grid))) # for i in range(0,len(rect)): diff --git a/compiler/base/pin_layout.py b/compiler/base/pin_layout.py index dac4e525..31a47671 100644 --- a/compiler/base/pin_layout.py +++ b/compiler/base/pin_layout.py @@ -33,7 +33,7 @@ class pin_layout: # These are the valid pin layers valid_layers = { x: layer[x] for x in layer_indices.keys()} - + # if it's a string, use the name if type(layer_name_pp) == str: self._layer = layer_name_pp @@ -378,7 +378,7 @@ class pin_layout: from tech import label_purpose except ImportError: label_purpose = purpose - + newLayout.addBox(layerNumber=layer_num, purposeNumber=pin_purpose, offsetInMicrons=self.ll(), diff --git a/compiler/base/route.py b/compiler/base/route.py index 4e3d8a60..d1caf612 100644 --- a/compiler/base/route.py +++ b/compiler/base/route.py @@ -14,12 +14,12 @@ from vector3d import vector3d from sram_factory import factory class route(design): - """ + """ Object route (used by the router module) Add a route of minimium metal width between a set of points. - The widths are the layer widths of the layer stack. + The widths are the layer widths of the layer stack. (Vias are in numer of vias.) - The wire must be completely rectilinear and the + The wire must be completely rectilinear and the z-dimension of the points refers to the layers. The points are the center of the wire. This can have non-preferred direction routing. @@ -45,12 +45,12 @@ class route(design): def setup_layers(self): (self.horiz_layer_name, self.via_layer, self.vert_layer_name) = self.layer_stack (self.horiz_layer_width, self.num_vias, self.vert_layer_width) = self.layer_widths - + if not self.vert_layer_width: self.vert_layer_width = drc("minwidth_{0}".format(self.vert_layer_name)) if not self.horiz_layer_width: self.horiz_layer_width = drc("minwidth_{0}".format(self.horiz_layer_name)) - + # offset this by 1/2 the via size self.c=factory.create(module_type="contact", layer_stack=self.layer_stack, @@ -58,7 +58,7 @@ class route(design): def create_wires(self): - """ + """ Add the wire segments of the route. """ @@ -67,7 +67,7 @@ class route(design): a, b = tee(iterable) next(b, None) return zip(a, b) - + plist = list(pairwise(self.path)) for p0,p1 in plist: if p0.z != p1.z: # via @@ -87,10 +87,10 @@ class route(design): self.draw_corner_wire(plist[0][0]) self.draw_corner_wire(plist[-1][1]) - + def get_layer_width(self, layer_zindex): """ - Return the layer width + Return the layer width """ if layer_zindex==0: return self.horiz_layer_width @@ -109,11 +109,11 @@ class route(design): return self.vert_layer_name else: debug.error("Incorrect layer zindex.",-1) - + def draw_wire(self, p0, p1): """ - This draws a straight wire with layer_minwidth + This draws a straight wire with layer_minwidth """ layer_width = self.get_layer_width(p0.z) @@ -145,8 +145,8 @@ class route(design): offset=vector(offset.x,offset.y), width=width, height=height) - - + + def draw_corner_wire(self, p0): """ This function adds the corner squares since the center line convention only draws to the center of the corner.""" diff --git a/compiler/base/vector.py b/compiler/base/vector.py index 582b9391..356ef42b 100644 --- a/compiler/base/vector.py +++ b/compiler/base/vector.py @@ -39,8 +39,8 @@ class vector(): return "v["+str(self.x)+","+str(self.y)+"]" def __setitem__(self, index, value): - """ - override setitem function + """ + override setitem function can set value by vector[index]=value """ if index==0: @@ -50,10 +50,10 @@ class vector(): else: self.x=float(value[0]) self.y=float(value[1]) - + def __getitem__(self, index): """ - override getitem function + override getitem function can get value by value=vector[index] """ if index==0: @@ -61,7 +61,7 @@ class vector(): elif index==1: return self.y else: - return self + return self def __add__(self, other): """ @@ -109,7 +109,7 @@ class vector(): """ Changes the coodrinate to match the grid settings """ - grid = tech.drc["grid"] + grid = tech.drc["grid"] # this gets the nearest integer value off_in_grid = int(round(round((offset / grid), 2), 0)) offset = off_in_grid * grid @@ -150,8 +150,8 @@ class vector(): Override round function """ return vector(int(round(self.x)),int(round(self.y))) - - + + def __eq__(self, other): """Override the default Equals behavior""" if isinstance(other, self.__class__): diff --git a/compiler/base/verilog.py b/compiler/base/verilog.py index aadf602c..636e3bd6 100644 --- a/compiler/base/verilog.py +++ b/compiler/base/verilog.py @@ -9,13 +9,13 @@ import debug import math class verilog: - """ + """ Create a behavioral Verilog file for simulation. This is inherited by the sram_base class. """ def __init__(self): pass - + def verilog_write(self,verilog_name): """ Write a behavioral Verilog model. """ self.vf = open(verilog_name, "w") @@ -67,7 +67,7 @@ class verilog: self.add_inputs_outputs(port) self.vf.write("\n") - + for port in self.all_ports: self.register_inputs(port) @@ -79,8 +79,8 @@ class verilog: self.add_write_block(port) if port in self.read_ports: self.add_read_block(port) - - self.vf.write("\n") + + self.vf.write("\n") self.vf.write("endmodule\n") self.vf.close() @@ -91,9 +91,9 @@ class verilog: """ self.add_regs(port) self.add_flops(port) - + def add_regs(self, port): - """ + """ Create the input regs for the given port. """ self.vf.write(" reg csb{0}_reg;\n".format(port)) @@ -107,7 +107,7 @@ class verilog: self.vf.write(" reg [DATA_WIDTH-1:0] din{0}_reg;\n".format(port)) if port in self.read_ports: self.vf.write(" reg [DATA_WIDTH-1:0] dout{0};\n".format(port)) - + def add_flops(self, port): """ Add the flop behavior logic for a port. @@ -125,7 +125,7 @@ class verilog: self.vf.write(" addr{0}_reg = addr{0};\n".format(port)) if port in self.read_ports: self.add_write_read_checks(port) - + if port in self.write_ports: self.vf.write(" din{0}_reg = din{0};\n".format(port)) if port in self.read_ports: @@ -150,7 +150,7 @@ class verilog: self.vf.write(" $display($time,\" Writing %m addr{0}=%b din{0}=%b\",addr{0}_reg,din{0}_reg);\n".format(port)) self.vf.write(" end\n\n") - + def add_inputs_outputs(self, port): """ @@ -203,7 +203,7 @@ class verilog: else: self.vf.write(" mem[addr{0}_reg] = din{0}_reg;\n".format(port)) self.vf.write(" end\n") - + def add_read_block(self, port): """ Add a read port block. @@ -231,12 +231,12 @@ class verilog: wport_control = "!csb{0} && !web{0}".format(wport) else: wport_control = "!csb{0}".format(wport) - + self.vf.write(" if ({1} && {3} && (addr{0} == addr{2}))\n".format(wport,wport_control,rport,rport_control)) self.vf.write(" $display($time,\" WARNING: Writing and reading addr{0}=%b and addr{1}=%b simultaneously!\",addr{0},addr{1});\n".format(wport,rport)) def add_write_read_checks(self, rport): - """ + """ Add a warning if we read from an address that we are currently writing. Can be fixed if we appropriately size the write drivers to do this . """ diff --git a/compiler/base/wire.py b/compiler/base/wire.py index 9c8dc4e6..67026a5b 100644 --- a/compiler/base/wire.py +++ b/compiler/base/wire.py @@ -58,13 +58,13 @@ class wire(wire_path): via_connect.first_layer_width) self.horiz_layer_contact_width = max(via_connect.second_layer_height, via_connect.first_layer_height) - + self.node_to_node = [drc("minwidth_" + str(self.horiz_layer_name)) + via_connect.width, drc("minwidth_" + str(self.horiz_layer_name)) + via_connect.height] self.pitch = self.compute_pitch(self.layer_stack) def compute_pitch(self, layer_stack): - + """ This is contact direction independent pitch, i.e. we take the maximum contact dimension @@ -79,13 +79,13 @@ class wire(wire_path): except AttributeError: contact1 = getattr(contact, layer2 + "_via") max_contact = max(contact1.width, contact1.height) - + layer1_space = drc("{0}_to_{0}".format(layer1)) layer2_space = drc("{0}_to_{0}".format(layer2)) pitch = max_contact + max(layer1_space, layer2_space) return pitch - + # create a 1x1 contact def create_vias(self): """ Add a via and corner square at every corner of the path.""" diff --git a/compiler/base/wire_path.py b/compiler/base/wire_path.py index 31d0ae78..b4f81363 100644 --- a/compiler/base/wire_path.py +++ b/compiler/base/wire_path.py @@ -15,7 +15,7 @@ def create_rectilinear_route(my_list): """ Add intermediate nodes if it isn't rectilinear. Also skip repeated nodes. Also, convert to vector if the aren't.""" pl = [snap_to_grid(x) for x in my_list] - + my_list = [] for index in range(len(pl) - 1): if pl[index] != pl[index + 1]: @@ -121,7 +121,7 @@ class wire_path(): """ width = layer_width - height = length + height = length if orientation == "horizontal": width = length diff --git a/compiler/base/wire_spice_model.py b/compiler/base/wire_spice_model.py index 5624b575..9a73134b 100644 --- a/compiler/base/wire_spice_model.py +++ b/compiler/base/wire_spice_model.py @@ -12,7 +12,7 @@ class wire_spice_model(): """ def __init__(self, lump_num, wire_length, wire_width): self.lump_num = lump_num # the number of segment the wire delay has - self.wire_c = self.cal_wire_c(wire_length, wire_width) # c in each segment + self.wire_c = self.cal_wire_c(wire_length, wire_width) # c in each segment self.wire_r = self.cal_wire_r(wire_length, wire_width) # r in each segment def cal_wire_c(self, wire_length, wire_width): @@ -36,7 +36,7 @@ class wire_spice_model(): swing_factor = abs(math.log(1-swing)) # time constant based on swing sum_factor = (1+self.lump_num) * self.lump_num * 0.5 # sum of the arithmetic sequence - delay = sum_factor * swing_factor * self.wire_r * self.wire_c + delay = sum_factor * swing_factor * self.wire_r * self.wire_c slew = delay * 2 + slew result= delay_data(delay, slew) return result diff --git a/compiler/bitcells/bitcell_1rw_1r.py b/compiler/bitcells/bitcell_1rw_1r.py index 597ce954..a22e511b 100644 --- a/compiler/bitcells/bitcell_1rw_1r.py +++ b/compiler/bitcells/bitcell_1rw_1r.py @@ -30,7 +30,7 @@ class bitcell_1rw_1r(bitcell_base.bitcell_base): type_list = ["OUTPUT", "OUTPUT", "OUTPUT", "OUTPUT", "INPUT", "INPUT", "POWER", "GROUND"] storage_nets = ['Q', 'Q_bar'] - + def __init__(self, name, cell_name=None): if not cell_name: cell_name = OPTS.bitcell_name @@ -45,7 +45,7 @@ class bitcell_1rw_1r(bitcell_base.bitcell_base): self.wl_names = [pin_names[4], pin_names[5]] def get_bitcell_pins(self, col, row): - """ + """ Creates a list of connections in the bitcell, indexed by column and row, for instance use in bitcell_array """ diff --git a/compiler/bitcells/bitcell_1w_1r.py b/compiler/bitcells/bitcell_1w_1r.py index acc84571..06a862e4 100644 --- a/compiler/bitcells/bitcell_1w_1r.py +++ b/compiler/bitcells/bitcell_1w_1r.py @@ -30,7 +30,7 @@ class bitcell_1w_1r(bitcell_base.bitcell_base): type_list = ["OUTPUT", "OUTPUT", "INPUT", "INPUT", "INPUT", "INPUT", "POWER", "GROUND"] storage_nets = ['Q', 'Q_bar'] - + def __init__(self, name, cell_name): if not cell_name: cell_name = OPTS.bitcell_name diff --git a/compiler/bitcells/bitcell_base.py b/compiler/bitcells/bitcell_base.py index 6d85fde0..f61805da 100644 --- a/compiler/bitcells/bitcell_base.py +++ b/compiler/bitcells/bitcell_base.py @@ -19,7 +19,7 @@ class bitcell_base(design.design): Base bitcell parameters to be over-riden. """ cell_size_layer = "boundary" - + def __init__(self, name, cell_name, hard_cell=True): design.design.__init__(self, name, cell_name) @@ -31,7 +31,7 @@ class bitcell_base(design.design): cell_name, GDS["unit"]) self.add_pin_types(self.type_list) - + def get_stage_effort(self, load): parasitic_delay = 1 # This accounts for bitline being drained @@ -61,13 +61,13 @@ class bitcell_base(design.design): def input_load(self): """ Return the relative capacitance of the access transistor gates """ - + # FIXME: This applies to bitline capacitances as well. # FIXME: sizing is not accurate with the handmade cell. # Change once cell widths are fixed. access_tx_cin = parameter["6T_access_size"] / drc["minwidth_tx"] return 2 * access_tx_cin - + def get_wl_cin(self): """Return the relative capacitance of the access transistor gates""" # This is a handmade cell so the value must be entered @@ -94,7 +94,7 @@ class bitcell_base(design.design): def get_storage_net_offset(self): """ - Gets the location of the storage net labels to add top level + Gets the location of the storage net labels to add top level labels for pex simulation. """ # If we generated the bitcell, we already know where Q and Q_bar are @@ -104,7 +104,7 @@ class bitcell_base(design.design): for text in self.gds.getTexts(layer["m1"]): if self.storage_nets[i] == text.textString.rstrip('\x00'): self.storage_net_offsets.append(text.coordinates[0]) - + for i in range(len(self.storage_net_offsets)): self.storage_net_offsets[i] = tuple([self.gds.info["units"][0] * x for x in self.storage_net_offsets[i]]) @@ -128,7 +128,7 @@ class bitcell_base(design.design): if bl_names[i] == text.textString.rstrip('\x00'): self.bl_offsets.append(text.coordinates[0]) found_bl.append(bl_names[i]) - + continue for i in range(len(br_names)): @@ -143,16 +143,16 @@ class bitcell_base(design.design): self.bl_offsets[i] = tuple([self.gds.info["units"][0] * x for x in self.bl_offsets[i]]) for i in range(len(self.br_offsets)): - self.br_offsets[i] = tuple([self.gds.info["units"][0] * x for x in self.br_offsets[i]]) + self.br_offsets[i] = tuple([self.gds.info["units"][0] * x for x in self.br_offsets[i]]) return(self.bl_offsets, self.br_offsets, found_bl, found_br) - def get_normalized_storage_nets_offset(self): + def get_normalized_storage_nets_offset(self): """ Convert storage net offset to be relative to the bottom left corner - of the bitcell. This is useful for making sense of offsets outside + of the bitcell. This is useful for making sense of offsets outside of the bitcell. - """ + """ if OPTS.bitcell is not "pbitcell": normalized_storage_net_offset = self.get_storage_net_offset() diff --git a/compiler/bitcells/col_cap_bitcell_1rw_1r.py b/compiler/bitcells/col_cap_bitcell_1rw_1r.py index a611965f..119d51f8 100644 --- a/compiler/bitcells/col_cap_bitcell_1rw_1r.py +++ b/compiler/bitcells/col_cap_bitcell_1rw_1r.py @@ -21,7 +21,7 @@ class col_cap_bitcell_1rw_1r(bitcell_base.bitcell_base): props.bitcell.cell_1rw1r.pin.vdd] type_list = ["OUTPUT", "OUTPUT", "OUTPUT", "OUTPUT", "POWER", "GROUND"] - + def __init__(self, name="col_cap_cell_1rw_1r"): # Ignore the name argument bitcell_base.bitcell_base.__init__(self, name) diff --git a/compiler/bitcells/dummy_bitcell.py b/compiler/bitcells/dummy_bitcell.py index e0af8754..2a3d74ae 100644 --- a/compiler/bitcells/dummy_bitcell.py +++ b/compiler/bitcells/dummy_bitcell.py @@ -24,7 +24,7 @@ class dummy_bitcell(bitcell_base.bitcell_base): props.bitcell.cell_6t.pin.vdd, props.bitcell.cell_6t.pin.gnd] type_list = ["OUTPUT", "OUTPUT", "INPUT", "POWER", "GROUND"] - + def __init__(self, name, cell_name=None): if not cell_name: cell_name = OPTS.dummy_bitcell_name diff --git a/compiler/bitcells/dummy_pbitcell.py b/compiler/bitcells/dummy_pbitcell.py index bdc98768..9b6078c7 100644 --- a/compiler/bitcells/dummy_pbitcell.py +++ b/compiler/bitcells/dummy_pbitcell.py @@ -22,49 +22,49 @@ class dummy_pbitcell(design.design): self.num_w_ports = OPTS.num_w_ports self.num_r_ports = OPTS.num_r_ports self.total_ports = self.num_rw_ports + self.num_w_ports + self.num_r_ports - + design.design.__init__(self, name, name) debug.info(1, "create a dummy bitcell using pbitcell with {0} rw ports, {1} w ports and {2} r ports".format(self.num_rw_ports, self.num_w_ports, self.num_r_ports)) - + self.create_netlist() self.create_layout() self.add_boundary() - + def create_netlist(self): self.add_pins() self.add_modules() self.create_modules() - + def create_layout(self): self.place_pbitcell() self.route_rbc_connections() self.DRC_LVS() - + def add_pins(self): for port in range(self.total_ports): self.add_pin("bl{}".format(port)) self.add_pin("br{}".format(port)) - + for port in range(self.total_ports): self.add_pin("wl{}".format(port)) - + self.add_pin("vdd") self.add_pin("gnd") - + def add_modules(self): self.prbc = factory.create(module_type="pbitcell", dummy_bitcell=True) self.add_mod(self.prbc) - + self.height = self.prbc.height self.width = self.prbc.width - + def create_modules(self): self.prbc_inst = self.add_inst(name="pbitcell", mod=self.prbc) - + temp = [] for port in range(self.total_ports): temp.append("bl{}".format(port)) @@ -74,10 +74,10 @@ class dummy_pbitcell(design.design): temp.append("vdd") temp.append("gnd") self.connect_inst(temp) - + def place_pbitcell(self): self.prbc_inst.place(offset=vector(0, 0)) - + def route_rbc_connections(self): for port in range(self.total_ports): self.copy_layout_pin(self.prbc_inst, "bl{}".format(port)) @@ -86,7 +86,7 @@ class dummy_pbitcell(design.design): self.copy_layout_pin(self.prbc_inst, "wl{}".format(port)) self.copy_layout_pin(self.prbc_inst, "vdd") self.copy_layout_pin(self.prbc_inst, "gnd") - + def get_wl_cin(self): """Return the relative capacitance of the access transistor gates""" #This module is made using a pbitcell. Get the cin from that module diff --git a/compiler/bitcells/pbitcell.py b/compiler/bitcells/pbitcell.py index 298be6d2..c836e083 100644 --- a/compiler/bitcells/pbitcell.py +++ b/compiler/bitcells/pbitcell.py @@ -26,7 +26,7 @@ class pbitcell(bitcell_base.bitcell_base): self.num_w_ports = OPTS.num_w_ports self.num_r_ports = OPTS.num_r_ports self.total_ports = self.num_rw_ports + self.num_w_ports + self.num_r_ports - + self.replica_bitcell = replica_bitcell self.dummy_bitcell = dummy_bitcell @@ -295,7 +295,7 @@ class pbitcell(bitcell_base.bitcell_base): self.width = -2 * self.leftmost_xpos self.height = self.topmost_ypos - self.botmost_ypos self.center_ypos = 0.5 * (self.topmost_ypos + self.botmost_ypos) - + def create_storage(self): """ Creates the crossed coupled inverters that act @@ -322,7 +322,7 @@ class pbitcell(bitcell_base.bitcell_base): self.connect_inst(["vdd", self.Q, self.Q_bar, "vdd"]) def place_storage(self): - """ + """ Places the transistors for the crossed coupled inverters in the bitcell """ @@ -406,7 +406,7 @@ class pbitcell(bitcell_base.bitcell_base): contact_offset_left_output = vector(self.inverter_nmos_left.get_pin("D").rc().x \ + 0.5 * contact.poly.height, self.cross_couple_upper_ypos) - + contact_offset_right_output = vector(self.inverter_nmos_right.get_pin("S").lc().x \ - 0.5*contact.poly.height, self.cross_couple_lower_ypos) @@ -421,8 +421,8 @@ class pbitcell(bitcell_base.bitcell_base): offset=self.gnd_position, width=self.width) self.add_power_pin("gnd", vector(0, gnd_ypos), directions=("H", "H")) - - + + vdd_ypos = self.inverter_nmos_ypos \ + self.inverter_nmos.active_height \ + self.inverter_gap \ @@ -433,7 +433,7 @@ class pbitcell(bitcell_base.bitcell_base): offset=self.vdd_position, width=self.width) self.add_power_pin("vdd", vector(0, vdd_ypos), directions=("H", "H")) - + def create_readwrite_ports(self): """ Creates read/write ports to the bit cell. A differential @@ -461,7 +461,7 @@ class pbitcell(bitcell_base.bitcell_base): if self.dummy_bitcell: bl_name += "_noconn" br_name += "_noconn" - + # add read/write transistors self.readwrite_nmos_left[k] = self.add_inst(name="readwrite_nmos_left{}".format(k), mod=self.readwrite_nmos) @@ -662,7 +662,7 @@ class pbitcell(bitcell_base.bitcell_base): if self.dummy_bitcell: bl_name += "_noconn" br_name += "_noconn" - + # add read-access transistors self.read_access_nmos_left[k] = self.add_inst(name="read_access_nmos_left{}".format(k), mod=self.read_nmos) @@ -897,7 +897,7 @@ class pbitcell(bitcell_base.bitcell_base): [self.inverter_pmos_right.get_pin("D").uc(), vdd_pos_right]) def route_readwrite_access(self): - """ + """ Routes read/write transistors to the storage component of the bitcell """ @@ -917,7 +917,7 @@ class pbitcell(bitcell_base.bitcell_base): [self.readwrite_nmos_right[k].get_pin("S").uc(), mid, Q_bar_pos]) def route_write_access(self): - """ + """ Routes read/write transistors to the storage component of the bitcell """ @@ -937,7 +937,7 @@ class pbitcell(bitcell_base.bitcell_base): [self.write_nmos_right[k].get_pin("S").uc(), mid, Q_bar_pos]) def route_read_access(self): - """ + """ Routes read access transistors to the storage component of the bitcell """ @@ -1016,7 +1016,7 @@ class pbitcell(bitcell_base.bitcell_base): offset=offset, width=well_width, height=well_height) - + # extend nwell to encompass inverter_pmos # calculate offset of the left pmos well if "nwell" in layer: @@ -1024,7 +1024,7 @@ class pbitcell(bitcell_base.bitcell_base): - self.nwell_enclose_active inverter_well_ypos = self.inverter_nmos_ypos + self.inverter_nmos.active_height \ + self.inverter_gap - self.nwell_enclose_active - + # calculate width of the two combined nwells # calculate height to encompass nimplant connected to vdd well_width = 2 * (self.inverter_nmos.active_width + 0.5 * self.inverter_to_inverter_spacing) \ @@ -1099,18 +1099,18 @@ class pbitcell(bitcell_base.bitcell_base): Q_bar_pos = self.inverter_pmos_right.get_pin("S").center() vdd_pos = self.inverter_pmos_right.get_pin("D").center() self.add_path("m1", [Q_bar_pos, vdd_pos]) - + def get_storage_net_names(self): """ Returns names of storage nodes in bitcell in [non-inverting, inverting] format. """ return self.storage_nets - + def get_bl_name(self, port=0): """Get bl name by port""" return "bl{}".format(port) - + def get_br_name(self, port=0): """Get bl name by port""" return "br{}".format(port) @@ -1119,7 +1119,7 @@ class pbitcell(bitcell_base.bitcell_base): """Get wl name by port""" debug.check(port < 2, "Two ports for bitcell_1rw_1r only.") return "wl{}".format(port) - + def get_stage_effort(self, load): parasitic_delay = 1 # This accounts for bitline being drained thought the access @@ -1128,7 +1128,7 @@ class pbitcell(bitcell_base.bitcell_base): # Assumes always a minimum sizes inverter. Could be # specified in the tech.py file. cin = 3 - + # Internal loads due to port configs are halved. # This is to account for the size already being halved # for stacked TXs, but internal loads do not see this size @@ -1144,10 +1144,10 @@ class pbitcell(bitcell_base.bitcell_base): load + read_port_load, parasitic_delay, False) - + def input_load(self): """ Return the relative capacitance of the access transistor gates """ - + # FIXME: This applies to bitline capacitances as well. # pbitcell uses the different sizing for the port access tx's. Not accounted for in this model. access_tx_cin = self.readwrite_nmos.get_cin() @@ -1155,10 +1155,10 @@ class pbitcell(bitcell_base.bitcell_base): def build_graph(self, graph, inst_name, port_nets): """Adds edges to graph for pbitcell. Only readwrite and read ports.""" - + if self.dummy_bitcell: return - + pin_dict = {pin: port for pin, port in zip(self.pins, port_nets)} # Edges added wl->bl, wl->br for every port except write ports rw_pin_names = zip(self.r_wl_names, self.r_bl_names, self.r_br_names) diff --git a/compiler/bitcells/replica_bitcell.py b/compiler/bitcells/replica_bitcell.py index 3f7a2930..53bcd16f 100644 --- a/compiler/bitcells/replica_bitcell.py +++ b/compiler/bitcells/replica_bitcell.py @@ -26,28 +26,28 @@ class replica_bitcell(bitcell_base.bitcell_base): props.bitcell.cell_6t.pin.vdd, props.bitcell.cell_6t.pin.gnd] type_list = ["OUTPUT", "OUTPUT", "INPUT", "POWER", "GROUND"] - + def __init__(self, name, cell_name=None): if not cell_name: cell_name = OPTS.replica_bitcell_name # Ignore the name argument super().__init__(name, cell_name) debug.info(2, "Create replica bitcell object") - + def get_stage_effort(self, load): parasitic_delay = 1 size = 0.5 #This accounts for bitline being drained thought the access TX and internal node cin = 3 #Assumes always a minimum sizes inverter. Could be specified in the tech.py file. read_port_load = 0.5 #min size NMOS gate load return logical_effort.logical_effort('bitline', size, cin, load+read_port_load, parasitic_delay, False) - + def input_load(self): """Return the relative capacitance of the access transistor gates""" - + # FIXME: This applies to bitline capacitances as well. access_tx_cin = parameter["6T_access_size"]/drc["minwidth_tx"] - return 2*access_tx_cin - + return 2*access_tx_cin + def analytical_power(self, corner, load): """Bitcell power in nW. Only characterizes leakage.""" from tech import spice @@ -56,6 +56,6 @@ class replica_bitcell(bitcell_base.bitcell_base): total_power = self.return_power(dynamic, leakage) return total_power - def build_graph(self, graph, inst_name, port_nets): + def build_graph(self, graph, inst_name, port_nets): """Adds edges based on inputs/outputs. Overrides base class function.""" self.add_graph_edges(graph, port_nets) diff --git a/compiler/bitcells/replica_bitcell_1rw_1r.py b/compiler/bitcells/replica_bitcell_1rw_1r.py index 8aed0f65..f2696e19 100644 --- a/compiler/bitcells/replica_bitcell_1rw_1r.py +++ b/compiler/bitcells/replica_bitcell_1rw_1r.py @@ -27,7 +27,7 @@ class replica_bitcell_1rw_1r(bitcell_base.bitcell_base): props.bitcell.cell_1rw1r.pin.vdd, props.bitcell.cell_1rw1r.pin.gnd] type_list = ["OUTPUT", "OUTPUT", "OUTPUT", "OUTPUT", "INPUT", "INPUT", "POWER", "GROUND"] - + def __init__(self, name, cell_name=None): if not cell_name: cell_name = OPTS.replica_bitcell_name @@ -40,10 +40,10 @@ class replica_bitcell_1rw_1r(bitcell_base.bitcell_base): cin = 3 #Assumes always a minimum sizes inverter. Could be specified in the tech.py file. read_port_load = 0.5 #min size NMOS gate load return logical_effort.logical_effort('bitline', size, cin, load+read_port_load, parasitic_delay, False) - + def input_load(self): """Return the relative capacitance of the access transistor gates""" - + # FIXME: This applies to bitline capacitances as well. # FIXME: sizing is not accurate with the handmade cell. Change once cell widths are fixed. access_tx_cin = parameter["6T_access_size"]/drc["minwidth_tx"] diff --git a/compiler/bitcells/replica_bitcell_1w_1r.py b/compiler/bitcells/replica_bitcell_1w_1r.py index 710336e1..248292ed 100644 --- a/compiler/bitcells/replica_bitcell_1w_1r.py +++ b/compiler/bitcells/replica_bitcell_1w_1r.py @@ -29,24 +29,24 @@ class replica_bitcell_1w_1r(bitcell_base.bitcell_base): props.bitcell.cell_1w1r.pin.vdd, props.bitcell.cell_1w1r.pin.gnd] type_list = ["OUTPUT", "OUTPUT", "INPUT", "INPUT", "INPUT", "INPUT", "POWER", "GROUND"] - + def __init__(self, name, cell_name=None): if not cell_name: cell_name = OPTS.replica_bitcell_name super().__init__(name, cell_name) debug.info(2, "Create replica bitcell 1w+1r object") - + def get_stage_effort(self, load): parasitic_delay = 1 size = 0.5 #This accounts for bitline being drained thought the access TX and internal node cin = 3 #Assumes always a minimum sizes inverter. Could be specified in the tech.py file. read_port_load = 0.5 #min size NMOS gate load return logical_effort.logical_effort('bitline', size, cin, load+read_port_load, parasitic_delay, False) - + def input_load(self): """Return the relative capacitance of the access transistor gates""" - + # FIXME: This applies to bitline capacitances as well. # FIXME: sizing is not accurate with the handmade cell. Change once cell widths are fixed. access_tx_cin = parameter["6T_access_size"]/drc["minwidth_tx"] diff --git a/compiler/bitcells/replica_pbitcell.py b/compiler/bitcells/replica_pbitcell.py index 03abcb25..04b072ba 100644 --- a/compiler/bitcells/replica_pbitcell.py +++ b/compiler/bitcells/replica_pbitcell.py @@ -22,49 +22,49 @@ class replica_pbitcell(design.design): self.num_w_ports = OPTS.num_w_ports self.num_r_ports = OPTS.num_r_ports self.total_ports = self.num_rw_ports + self.num_w_ports + self.num_r_ports - + design.design.__init__(self, name, name) debug.info(1, "create a replica bitcell using pbitcell with {0} rw ports, {1} w ports and {2} r ports".format(self.num_rw_ports, self.num_w_ports, self.num_r_ports)) - + self.create_netlist() self.create_layout() self.add_boundary() - + def create_netlist(self): self.add_pins() self.add_modules() self.create_modules() - + def create_layout(self): self.place_pbitcell() self.route_rbc_connections() self.DRC_LVS() - + def add_pins(self): for port in range(self.total_ports): self.add_pin("bl{}".format(port)) self.add_pin("br{}".format(port)) - + for port in range(self.total_ports): self.add_pin("wl{}".format(port)) - + self.add_pin("vdd") self.add_pin("gnd") - + def add_modules(self): self.prbc = factory.create(module_type="pbitcell", replica_bitcell=True) self.add_mod(self.prbc) - + self.height = self.prbc.height self.width = self.prbc.width - + def create_modules(self): self.prbc_inst = self.add_inst(name="pbitcell", mod=self.prbc) - + temp = [] for port in range(self.total_ports): temp.append("bl{}".format(port)) @@ -74,10 +74,10 @@ class replica_pbitcell(design.design): temp.append("vdd") temp.append("gnd") self.connect_inst(temp) - + def place_pbitcell(self): self.prbc_inst.place(offset=vector(0, 0)) - + def route_rbc_connections(self): for port in range(self.total_ports): self.copy_layout_pin(self.prbc_inst, "bl{}".format(port)) @@ -86,4 +86,4 @@ class replica_pbitcell(design.design): self.copy_layout_pin(self.prbc_inst, "wl{}".format(port)) self.copy_layout_pin(self.prbc_inst, "vdd") self.copy_layout_pin(self.prbc_inst, "gnd") - + diff --git a/compiler/characterizer/__init__.py b/compiler/characterizer/__init__.py index 93dd5bcb..d1f45575 100644 --- a/compiler/characterizer/__init__.py +++ b/compiler/characterizer/__init__.py @@ -30,10 +30,10 @@ if not OPTS.analytical_delay: else: (OPTS.spice_name,OPTS.spice_exe) = get_tool("spice",["hspice", "ngspice", "ngspice.exe", "xa"]) - # set the input dir for spice files if using ngspice + # 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 OPTS.spice_exe == "": debug.error("No recognizable spice version found. Unable to perform characterization.",1) else: diff --git a/compiler/characterizer/bit_polarity.py b/compiler/characterizer/bit_polarity.py index c14c167e..2cd8186a 100644 --- a/compiler/characterizer/bit_polarity.py +++ b/compiler/characterizer/bit_polarity.py @@ -11,4 +11,4 @@ from enum import Enum class bit_polarity(Enum): NONINVERTING = 0 INVERTING = 1 - + diff --git a/compiler/characterizer/charutils.py b/compiler/characterizer/charutils.py index fa49b1ed..e3813b36 100644 --- a/compiler/characterizer/charutils.py +++ b/compiler/characterizer/charutils.py @@ -9,7 +9,7 @@ import re import debug from globals import OPTS - + def relative_compare(value1,value2,error_tolerance=0.001): """ This is used to compare relative values for convergence. """ return (abs(value1 - value2) / abs(max(value1,value2)) <= error_tolerance) @@ -37,7 +37,7 @@ def parse_spice_list(filename, key): return convert_to_float(val.group(1)) else: return "Failed" - + def round_time(time,time_precision=3): # times are in ns, so this is how many digits of precision # 3 digits = 1ps @@ -58,10 +58,10 @@ def convert_to_float(number): """Converts a string into a (float) number; also converts units(m,u,n,p)""" if number == "Failed": return False - + # start out with a binary value float_value = False - try: + try: # checks if string is a float without letter units float_value = float(number) except ValueError: @@ -69,7 +69,7 @@ def convert_to_float(number): unit = re.search(r"(-?\d+\.?\d*)e(\-?\+?\d+)", number) if unit != None: float_value=float(unit.group(1)) * (10 ^ float(unit.group(2))) - + # see if it is in spice notation unit = re.search(r"(-?\d+\.?\d*)(m?u?n?p?f?)", number) if unit != None: diff --git a/compiler/characterizer/delay.py b/compiler/characterizer/delay.py index 6323a351..dfd845e9 100644 --- a/compiler/characterizer/delay.py +++ b/compiler/characterizer/delay.py @@ -51,7 +51,7 @@ class delay(simulation): self.set_corner(corner) self.create_signal_names() self.add_graph_exclusions() - + def create_measurement_names(self): """ Create measurement names. The names themselves currently define the type of measurement """ @@ -66,14 +66,14 @@ class delay(simulation): "disabled_write1_power"] # self.voltage_when_names = ["volt_bl", "volt_br"] # self.bitline_delay_names = ["delay_bl", "delay_br"] - + def create_measurement_objects(self): """ Create the measurements used for read and write ports """ - + self.read_meas_lists = self.create_read_port_measurement_objects() self.write_meas_lists = self.create_write_port_measurement_objects() self.check_meas_names(self.read_meas_lists + self.write_meas_lists) - + def check_meas_names(self, measures_lists): """ Given measurements (in 2d list), checks that their names are unique. @@ -86,7 +86,7 @@ class delay(simulation): debug.check(name not in name_set, ("SPICE measurements must have unique names. " "Duplicate name={}").format(name)) name_set.add(name) - + def create_read_port_measurement_objects(self): """Create the measurements used for read ports: delays, slews, powers""" @@ -99,19 +99,19 @@ class delay(simulation): self.delay_meas.append(delay_measure("delay_hl", self.clk_frmt, targ_name, "FALL", "FALL", measure_scale=1e9)) self.delay_meas[-1].meta_str = sram_op.READ_ZERO self.read_lib_meas+=self.delay_meas - + self.slew_meas = [] self.slew_meas.append(slew_measure("slew_lh", targ_name, "RISE", measure_scale=1e9)) self.slew_meas[-1].meta_str = sram_op.READ_ONE self.slew_meas.append(slew_measure("slew_hl", targ_name, "FALL", measure_scale=1e9)) self.slew_meas[-1].meta_str = sram_op.READ_ZERO self.read_lib_meas+=self.slew_meas - + self.read_lib_meas.append(power_measure("read1_power", "RISE", measure_scale=1e3)) self.read_lib_meas[-1].meta_str = sram_op.READ_ONE self.read_lib_meas.append(power_measure("read0_power", "FALL", measure_scale=1e3)) self.read_lib_meas[-1].meta_str = sram_op.READ_ZERO - + self.read_lib_meas.append(power_measure("disabled_read1_power", "RISE", measure_scale=1e3)) self.read_lib_meas[-1].meta_str = "disabled_read1" self.read_lib_meas.append(power_measure("disabled_read0_power", "FALL", measure_scale=1e3)) @@ -121,7 +121,7 @@ class delay(simulation): for obj in self.read_lib_meas: if obj.meta_str is sram_op.READ_ZERO: obj.meta_add_delay = True - + read_measures = [] read_measures.append(self.read_lib_meas) # Other measurements associated with the read port not included in the liberty file @@ -130,14 +130,14 @@ class delay(simulation): read_measures.append(self.create_read_bit_measures()) return read_measures - + def create_bitline_measurement_objects(self): """ Create the measurements used for bitline delay values. Due to unique error checking, these are separated from other measurements. These measurements are only associated with read values. """ - + self.bitline_volt_meas = [] self.bitline_volt_meas.append(voltage_at_measure("v_bl_READ_ZERO", self.bl_name)) @@ -145,7 +145,7 @@ class delay(simulation): self.bitline_volt_meas.append(voltage_at_measure("v_br_READ_ZERO", self.br_name)) self.bitline_volt_meas[-1].meta_str = sram_op.READ_ZERO - + self.bitline_volt_meas.append(voltage_at_measure("v_bl_READ_ONE", self.bl_name)) self.bitline_volt_meas[-1].meta_str = sram_op.READ_ONE @@ -153,17 +153,17 @@ class delay(simulation): self.br_name)) self.bitline_volt_meas[-1].meta_str = sram_op.READ_ONE return self.bitline_volt_meas - + def create_write_port_measurement_objects(self): """Create the measurements used for read ports: delays, slews, powers""" - + self.write_lib_meas = [] self.write_lib_meas.append(power_measure("write1_power", "RISE", measure_scale=1e3)) self.write_lib_meas[-1].meta_str = sram_op.WRITE_ONE self.write_lib_meas.append(power_measure("write0_power", "FALL", measure_scale=1e3)) self.write_lib_meas[-1].meta_str = sram_op.WRITE_ZERO - + self.write_lib_meas.append(power_measure("disabled_write1_power", "RISE", measure_scale=1e3)) self.write_lib_meas[-1].meta_str = "disabled_write1" self.write_lib_meas.append(power_measure("disabled_write0_power", "FALL", measure_scale=1e3)) @@ -173,17 +173,17 @@ class delay(simulation): write_measures.append(self.write_lib_meas) write_measures.append(self.create_write_bit_measures()) return write_measures - + def create_debug_measurement_objects(self): """Create debug measurement to help identify failures.""" - + self.dout_volt_meas = [] for meas in self.delay_meas: # Output voltage measures self.dout_volt_meas.append(voltage_at_measure("v_{}".format(meas.name), meas.targ_name_no_port)) self.dout_volt_meas[-1].meta_str = meas.meta_str - + if not OPTS.use_pex: self.sen_meas = delay_measure("delay_sen", self.clk_frmt, self.sen_name + "{}", "FALL", "RISE", measure_scale=1e9) else: @@ -193,10 +193,10 @@ class delay(simulation): self.sen_meas.meta_add_delay = True return self.dout_volt_meas + [self.sen_meas] - + def create_read_bit_measures(self): """ Adds bit measurements for read0 and read1 cycles """ - + self.read_bit_meas = {bit_polarity.NONINVERTING: [], bit_polarity.INVERTING: []} meas_cycles = (sram_op.READ_ZERO, sram_op.READ_ONE) for cycle in meas_cycles: @@ -210,7 +210,7 @@ class delay(simulation): def create_write_bit_measures(self): """ Adds bit measurements for write0 and write1 cycles """ - + self.write_bit_meas = {bit_polarity.NONINVERTING: [], bit_polarity.INVERTING: []} meas_cycles = (sram_op.WRITE_ZERO, sram_op.WRITE_ONE) for cycle in meas_cycles: @@ -221,13 +221,13 @@ class delay(simulation): self.write_bit_meas[polarity].append(meas) # Dictionary values are lists, reduce to a single list of measurements return [meas for meas_list in self.write_bit_meas.values() for meas in meas_list] - + def get_bit_measures(self, meas_tag, probe_address, probe_data): """ Creates measurements for the q/qbar of input bit position. meas_tag is a unique identifier for the measurement. """ - + bit_col = self.get_data_bit_column_number(probe_address, probe_data) bit_row = self.get_address_row_number(probe_address) (cell_name, cell_inst) = self.sram.get_cell_name(self.sram.name, bit_row, bit_col) @@ -241,24 +241,24 @@ class delay(simulation): bank_num = self.sram.get_bank_num(self.sram.name, bit_row, bit_col) q_name = "bitcell_Q_b{0}_r{1}_c{2}".format(bank_num, bit_row, bit_col) qbar_name = "bitcell_Q_bar_b{0}_r{1}_c{2}".format(bank_num, bit_row, bit_col) - + # Bit measures, measurements times to be defined later. The measurement names must be unique # but they is enforced externally. {} added to names to differentiate between ports allow the # measurements are independent of the ports q_meas = voltage_at_measure("v_q_{}".format(meas_tag), q_name) qbar_meas = voltage_at_measure("v_qbar_{}".format(meas_tag), qbar_name) - + return {bit_polarity.NONINVERTING: q_meas, bit_polarity.INVERTING: qbar_meas} - + def set_load_slew(self, load, slew): """ Set the load and slew """ - + self.load = load self.slew = slew - + def check_arguments(self): """Checks if arguments given for write_stimulus() meets requirements""" - + try: int(self.probe_address, 2) except ValueError: @@ -269,7 +269,7 @@ class delay(simulation): if not isinstance(self.probe_data, int) or self.probe_data>self.word_size or self.probe_data<0: debug.error("Given probe_data is not an integer to specify a data bit", 1) - + # Adding port options here which the characterizer cannot handle. Some may be added later like ROM if len(self.read_ports) == 0: debug.error("Characterizer does not currently support SRAMs without read ports.", 1) @@ -292,14 +292,14 @@ class delay(simulation): for port in self.read_ports: for i in range(self.word_size): self.sf.write("CD{0}{1} {2}{0}_{1} 0 {3}f\n".format(port, i, self.dout_name, self.load)) - + def write_delay_stimulus(self): - """ + """ 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() # obtains list of time-points for each rising clk edge @@ -316,7 +316,7 @@ class delay(simulation): self.stim.write_include(self.trim_sp_file) self.write_generic_stimulus() - + # generate data and addr signals self.sf.write("\n* Generation of data and address signals\n") self.gen_data() @@ -335,7 +335,7 @@ class delay(simulation): period=self.period, t_rise=self.slew, t_fall=self.slew) - + self.write_delay_measures() # run until the end of the cycle time @@ -344,7 +344,7 @@ class delay(simulation): self.sf.close() def write_power_stimulus(self, trim): - """ Creates a stimulus file to measure leakage power only. + """ Creates a stimulus file to measure leakage power only. This works on the *untrimmed netlist*. """ self.check_arguments() @@ -354,15 +354,15 @@ class delay(simulation): self.sf = open(temp_stim, "w") self.sf.write("* Power stimulus for period of {0}n\n\n".format(self.period)) self.stim = stimuli(self.sf, self.corner) - + # include UNTRIMMED files in stimulus file if trim: self.stim.write_include(self.trim_sp_file) else: self.stim.write_include(self.sim_sp_file) - + self.write_generic_stimulus() - + # generate data and addr signals self.sf.write("\n* Generation of data and address signals\n") for write_port in self.write_ports: @@ -384,20 +384,20 @@ class delay(simulation): self.sf.write("\n* Generation of global clock signal\n") for port in self.all_ports: self.stim.gen_constant(sig_name="CLK{0}".format(port), v_val=0) - + self.write_power_measures() # run until the end of the cycle time self.stim.write_control(2 * self.period) self.sf.close() - + def get_measure_variants(self, port, measure_obj, measure_type=None): """ Checks the measurement object and calls respective function for related measurement inputs. """ - + meas_type = type(measure_obj) if meas_type is delay_measure or meas_type is slew_measure: variant_tuple = self.get_delay_measure_variants(port, measure_obj) @@ -410,18 +410,18 @@ class delay(simulation): else: debug.error("Input function not defined for measurement type={}".format(meas_type)) # Removes port input from any object which does not use it. This shorthand only works if - # the measurement has port as the last input. Could be implemented by measurement type or + # the measurement has port as the last input. Could be implemented by measurement type or # remove entirely from measurement classes. if not measure_obj.has_port: variant_tuple = variant_tuple[:-1] return variant_tuple - + def get_delay_measure_variants(self, port, delay_obj): """ Get the measurement values that can either vary from simulation to simulation (vdd, address) or port to port (time delays) """ - + # Return value is intended to match the delay measure format: trig_td, targ_td, vdd, port # vdd is arguably constant as that is true for a single lib file. if delay_obj.meta_str == sram_op.READ_ZERO: @@ -431,50 +431,50 @@ class delay(simulation): meas_cycle_delay = self.cycle_times[self.measure_cycles[port][delay_obj.meta_str]] else: debug.error("Unrecognised delay Index={}".format(delay_obj.meta_str),1) - - # These measurements have there time further delayed to the neg. edge of the clock. - if delay_obj.meta_add_delay: + + # These measurements have there time further delayed to the neg. edge of the clock. + if delay_obj.meta_add_delay: meas_cycle_delay += self.period / 2 - + return (meas_cycle_delay, meas_cycle_delay, self.vdd_voltage, port) - + def get_power_measure_variants(self, port, power_obj, operation): """Get the measurement values that can either vary port to port (time delays)""" - + # Return value is intended to match the power measure format: t_initial, t_final, port t_initial = self.cycle_times[self.measure_cycles[port][power_obj.meta_str]] t_final = self.cycle_times[self.measure_cycles[port][power_obj.meta_str] + 1] - + return (t_initial, t_final, port) - + def get_volt_at_measure_variants(self, port, volt_meas): """ Get the measurement values that can either vary port to port (time delays) """ - + meas_cycle = self.cycle_times[self.measure_cycles[port][volt_meas.meta_str]] # Measurement occurs slightly into the next period so we know that the value # "stuck" after the end of the period -> current period start + 1.25*period at_time = meas_cycle + 1.25 * self.period - + return (at_time, port) - + def get_volt_when_measure_variants(self, port, volt_meas): """ Get the measurement values that can either vary port to port (time delays) """ - + # Only checking 0 value reads for now. t_trig = self.cycle_times[self.measure_cycles[port][sram_op.READ_ZERO]] return (t_trig, self.vdd_voltage, port) - + def write_delay_measures_read_port(self, port): """ Write the measure statements to quantify the delay and power results for a read port. """ - + # add measure statements for delays/slews for meas_list in self.read_meas_lists: for measure in meas_list: @@ -485,7 +485,7 @@ class delay(simulation): """ Write the measure statements to quantify the power results for a write port. """ - + # add measure statements for power for meas_list in self.write_meas_lists: for measure in meas_list: @@ -496,7 +496,7 @@ class delay(simulation): """ Write the measure statements to quantify the delay and power results for all targeted ports. """ - + self.sf.write("\n* Measure statements for delay and power\n") # Output some comments to aid where cycles start and @@ -508,14 +508,14 @@ class delay(simulation): for read_port in self.targ_read_ports: self.sf.write("* Read ports {}\n".format(read_port)) self.write_delay_measures_read_port(read_port) - + for write_port in self.targ_write_ports: self.sf.write("* Write ports {}\n".format(write_port)) self.write_delay_measures_write_port(write_port) - + def write_power_measures(self): """ - Write the measure statements to quantify the leakage power only. + Write the measure statements to quantify the leakage power only. """ self.sf.write("\n* Measure statements for idle leakage power\n") @@ -526,37 +526,37 @@ class delay(simulation): self.stim.gen_meas_power(meas_name="leakage_power", t_initial=t_initial, t_final=t_final) - + def find_feasible_period_one_port(self, port): """ Uses an initial period and finds a feasible period before we run the binary search algorithm to find min period. We check if the given clock period is valid and if it's not, we continue to double the period until we find a valid period to use as a - starting point. + starting point. """ debug.check(port in self.read_ports, "Characterizer requires a read port to determine a period.") - + feasible_period = float(tech.spice["feasible_period"]) time_out = 9 while True: time_out -= 1 if (time_out <= 0): debug.error("Timed out, could not find a feasible period.", 2) - + # Write ports are assumed non-critical to timing, so the first available is used self.targ_write_ports = [self.write_ports[0]] # Set target read port for simulation self.targ_read_ports = [port] - + debug.info(1, "Trying feasible period: {0}ns on Port {1}".format(feasible_period, port)) self.period = feasible_period (success, results)=self.run_delay_simulation() - + # Clear these target ports after simulation self.targ_write_ports = [] self.targ_read_ports = [] - + if not success: feasible_period = 2 * feasible_period continue @@ -570,7 +570,7 @@ class delay(simulation): delay_str, slew_str, port)) - + if success: debug.info(2, "Found feasible_period for port {0}: {1}ns".format(port, feasible_period)) self.period = feasible_period @@ -579,15 +579,15 @@ class delay(simulation): def find_feasible_period(self): """ - Loops through all read ports determining the feasible period and collecting + Loops through all read ports determining the feasible period and collecting delay information from each port. """ feasible_delays = [{} for i in self.all_ports] - + # Get initial feasible delays from first port feasible_delays[self.read_ports[0]] = self.find_feasible_period_one_port(self.read_ports[0]) previous_period = self.period - + # Loops through all the ports checks if the feasible period works. Everything restarts it if does not. # Write ports do not produce delays which is why they are not included here. i = 1 @@ -595,7 +595,7 @@ class delay(simulation): port = self.read_ports[i] # Only extract port values from the specified port, not the entire results. feasible_delays[port].update(self.find_feasible_period_one_port(port)) - # Function sets the period. Restart the entire process if period changes to collect accurate delays + # Function sets the period. Restart the entire process if period changes to collect accurate delays if self.period > previous_period: i = 0 else: @@ -603,7 +603,7 @@ class delay(simulation): previous_period = self.period debug.info(1, "Found feasible_period: {0}ns".format(self.period)) return feasible_delays - + def run_delay_simulation(self): """ This tries to simulate a period and checks if the result works. If @@ -611,9 +611,9 @@ class delay(simulation): works on the trimmed netlist by default, so powers do not include leakage of all cells. """ - + debug.check(self.period > 0, "Target simulation period non-positive") - + self.write_delay_stimulus() self.stim.run_sim() @@ -622,14 +622,14 @@ class delay(simulation): def check_measurements(self): """ Check the write and read measurements """ - + # Loop through all targeted ports and collect delays and powers. result = [{} for i in self.all_ports] for port in self.targ_write_ports: if not self.check_bit_measures(self.write_bit_meas, port): return(False, {}) - + debug.info(2, "Checking write values for port {}".format(port)) write_port_dict = {} for measure in self.write_lib_meas: @@ -638,38 +638,38 @@ class delay(simulation): if not check_dict_values_is_float(write_port_dict): debug.error("Failed to Measure Write Port Values:\n\t\t{0}".format(write_port_dict), 1) result[port].update(write_port_dict) - + for port in self.targ_read_ports: # First, check that the memory has the right values at the right times if not self.check_bit_measures(self.read_bit_meas, port): return(False, {}) - + debug.info(2, "Checking read delay values for port {}".format(port)) # Check sen timing, then bitlines, then general measurements. if not self.check_sen_measure(port): return (False, {}) - + if not self.check_read_debug_measures(port): return (False, {}) - + # Check timing for read ports. Power is only checked if it was read correctly read_port_dict = {} for measure in self.read_lib_meas: read_port_dict[measure.name] = measure.retrieve_measure(port=port) - + if not self.check_valid_delays(read_port_dict): return (False, {}) - + if not check_dict_values_is_float(read_port_dict): debug.error("Failed to Measure Read Port Values:\n\t\t{0}".format(read_port_dict), 1) - + result[port].update(read_port_dict) return (True, result) def check_sen_measure(self, port): """Checks that the sen occurred within a half-period""" - + sen_val = self.sen_meas.retrieve_measure(port=port) debug.info(2, "s_en delay={}ns".format(sen_val)) if self.sen_meas.meta_add_delay: @@ -677,13 +677,13 @@ class delay(simulation): else: max_delay = self.period return not (type(sen_val) != float or sen_val > max_delay) - + def check_read_debug_measures(self, port): """Debug measures that indicate special conditions.""" - + # Currently, only check if the opposite than intended value was read during # the read cycles i.e. neither of these measurements should pass. - # FIXME: these checks need to be re-done to be more robust against possible errors + # FIXME: these checks need to be re-done to be more robust against possible errors bl_vals = {} br_vals = {} for meas in self.bitline_volt_meas: @@ -710,14 +710,14 @@ class delay(simulation): dout_success = False debug.info(1, "Debug measurement failed. Value {}V was read on read 0 cycle.".format(val)) bl_success = self.check_bitline_meas(br_vals[sram_op.READ_ONE], bl_vals[sram_op.READ_ONE]) - - # If the bitlines have a correct value while the output does not then that is a + + # If the bitlines have a correct value while the output does not then that is a # sen error. FIXME: there are other checks that can be done to solidfy this conclusion. if not dout_success and bl_success: debug.error("Sense amp enable timing error. Increase the delay chain through the configuration file.", 1) - + return dout_success - + def check_bit_measures(self, bit_measures, port): """ Checks the measurements which represent the internal storage voltages @@ -748,28 +748,28 @@ class delay(simulation): debug.info(1, ("Wrong value detected on probe bit during read/write cycle. " "Check writes and control logic for bugs.\n measure={}, op={}, " "bit_storage={}, V(bit)={}").format(meas.name, meas_cycle.name, polarity.name, val)) - + return success - + def check_bitline_meas(self, v_discharged_bl, v_charged_bl): """ Checks the value of the discharging bitline. Confirms s_en timing errors. Returns true if the bitlines are at there expected value. """ # The inputs looks at discharge/charged bitline rather than left or right (bl/br) - # Performs two checks, discharging bitline is at least 10% away from vdd and there is a + # Performs two checks, discharging bitline is at least 10% away from vdd and there is a # 10% vdd difference between the bitlines. Both need to fail to be considered a s_en error. min_dicharge = v_discharged_bl < self.vdd_voltage * 0.9 min_diff = (v_charged_bl - v_discharged_bl) > self.vdd_voltage * 0.1 - + debug.info(1, "min_dicharge={}, min_diff={}".format(min_dicharge, min_diff)) return (min_dicharge and min_diff) - + def run_power_simulation(self): - """ + """ This simulates a disabled SRAM to get the leakage power when it is off. """ - + debug.info(1, "Performing leakage power simulations.") self.write_power_stimulus(trim=False) self.stim.run_sim() @@ -784,21 +784,21 @@ class delay(simulation): trim_leakage_power=parse_spice_list("timing", "leakage_power") debug.check(trim_leakage_power!="Failed", "Could not measure leakage power.") debug.info(1, "Leakage power of trimmed array is {0} mW".format(trim_leakage_power * 1e3)) - + # For debug, you sometimes want to inspect each simulation. # key=raw_input("press return to continue") return (leakage_power * 1e3, trim_leakage_power * 1e3) - + def check_valid_delays(self, result_dict): """ Check if the measurements are defined and if they are valid. """ - + # Hard coded names currently delay_hl = result_dict["delay_hl"] delay_lh = result_dict["delay_lh"] slew_hl = result_dict["slew_hl"] slew_lh = result_dict["slew_lh"] period_load_slew_str = "period {0} load {1} slew {2}".format(self.period, self.load, self.slew) - + # if it failed or the read was longer than a period if type(delay_hl)!=float or type(delay_lh)!=float or type(slew_lh)!=float or type(slew_hl)!=float: delays_str = "delay_hl={0} delay_lh={1}".format(delay_hl, delay_lh) @@ -807,11 +807,11 @@ class delay(simulation): delays_str, slews_str)) return False - + delays_str = "delay_hl={0} delay_lh={1}".format(delay_hl, delay_lh) slews_str = "slew_hl={0} slew_lh={1}".format(slew_hl, slew_lh) # high-to-low delays start at neg. clk edge, so they need to be less than half_period - half_period = self.period / 2 + half_period = self.period / 2 if abs(delay_hl)>half_period or abs(delay_lh)>self.period or abs(slew_hl)>half_period or abs(slew_lh)>self.period \ or delay_hl<0 or delay_lh<0 or slew_hl<0 or slew_lh<0: debug.info(2, "UNsuccessful simulation (in ns):\n\t\t{0}\n\t\t{1}\n\t\t{2}".format(period_load_slew_str, @@ -824,16 +824,16 @@ class delay(simulation): slews_str)) return True - + def find_min_period(self, feasible_delays): """ Determine a single minimum period for all ports. """ - + feasible_period = ub_period = self.period lb_period = 0.0 target_period = 0.5 * (ub_period + lb_period) - + # Find the minimum period for all ports. Start at one port and perform binary search then use that delay as a starting position. # For testing purposes, only checks read ports. for port in self.read_ports: @@ -841,15 +841,15 @@ class delay(simulation): # The min period of one port becomes the new lower bound. Reset the upper_bound. lb_period = target_period ub_period = feasible_period - + # Clear the target ports before leaving self.targ_read_ports = [] self.targ_write_ports = [] return target_period - + def find_min_period_one_port(self, feasible_delays, port, lb_period, ub_period, target_period): """ - Searches for the smallest period with output delays being within 5% of + Searches for the smallest period with output delays being within 5% of long period. For the current logic to characterize multiport, bounds are required as an input. """ @@ -857,7 +857,7 @@ class delay(simulation): # ub_period = self.period # lb_period = 0.0 # target_period = 0.5 * (ub_period + lb_period) - + # Binary search algorithm to find the min period (max frequency) of input port time_out = 25 # Write ports are assumed non-critical to timing, so the first available is used @@ -882,27 +882,27 @@ class delay(simulation): if relative_compare(ub_period, lb_period, error_tolerance=0.05): # ub_period is always feasible. return ub_period - + # Update target target_period = 0.5 * (ub_period + lb_period) # key=input("press return to continue") def try_period(self, feasible_delays): - """ + """ This tries to simulate a period and checks if the result works. If it does and the delay is within 5% still, it returns True. """ - + # Run Delay simulation but Power results not used. (success, results) = self.run_delay_simulation() if not success: return False - + # Check the values of target readwrite and read ports. Write ports do not produce delays in this current version for port in self.targ_read_ports: - # check that the delays and slews do not degrade with tested period. + # check that the delays and slews do not degrade with tested period. for dname in self.delay_meas_names: - + # FIXME: This is a hack solution to fix the min period search. The slew will always be based on the period when there # is a column mux. Therefore, the checks are skipped for this condition. This is hard to solve without changing the netlist. # Delays/slews based on the period will cause the min_period search to come to the wrong period. @@ -914,28 +914,28 @@ class delay(simulation): return False # key=raw_input("press return to continue") - + delay_str = ', '.join("{0}={1}ns".format(mname, results[port][mname]) for mname in self.delay_meas_names) debug.info(2, "Successful period {0}, Port {2}, {1}".format(self.period, delay_str, port)) return True - + def set_probe(self, probe_address, probe_data): - """ + """ Probe address and data can be set separately to utilize other functions in this characterizer besides analyze. """ - + self.probe_address = probe_address self.probe_data = probe_data self.bitline_column = self.get_data_bit_column_number(probe_address, probe_data) self.wordline_row = self.get_address_row_number(probe_address) self.prepare_netlist() - + def get_data_bit_column_number(self, probe_address, probe_data): """Calculates bitline column number of data bit under test using bit position and mux size""" - + if self.sram.col_addr_size>0: col_address = int(probe_address[0:self.sram.col_addr_size], 2) else: @@ -950,7 +950,7 @@ class delay(simulation): def prepare_netlist(self): """ Prepare a trimmed netlist and regular netlist. """ - + # Set up to trim the netlist here if that is enabled if OPTS.trim_netlist: self.trim_sp_file = "{}reduced.sp".format(OPTS.openram_temp) @@ -964,36 +964,36 @@ class delay(simulation): else: # The non-reduced netlist file when it is disabled self.trim_sp_file = "{}sram.sp".format(OPTS.openram_temp) - - # The non-reduced netlist file for power simulation + + # The non-reduced netlist file for power simulation self.sim_sp_file = "{}sram.sp".format(OPTS.openram_temp) # Make a copy in temp for debugging shutil.copy(self.sp_file, self.sim_sp_file) def analysis_init(self, probe_address, probe_data): """Sets values which are dependent on the data address/bit being tested.""" - + self.set_probe(probe_address, probe_data) self.create_graph() self.set_internal_spice_names() self.create_measurement_names() self.create_measurement_objects() - + def analyze(self, probe_address, probe_data, slews, loads): """ Main function to characterize an SRAM for a table. Computes both delay and power characterization. """ - + # Dict to hold all characterization values char_sram_data = {} self.analysis_init(probe_address, probe_data) - + self.load=max(loads) self.slew=max(slews) - + # 1) Find a feasible period and it's corresponding delays using the trimmed array. feasible_delays = self.find_feasible_period() - + # 2) Finds the minimum period without degrading the delays by X% self.set_load_slew(max(loads), max(slews)) min_period = self.find_min_period(feasible_delays) @@ -1008,25 +1008,25 @@ class delay(simulation): # 4) At the minimum period, measure the delay, slew and power for all slew/load pairs. self.period = min_period char_port_data = self.simulate_loads_and_slews(slews, loads, leakage_offset) - + # FIXME: low-to-high delays are altered to be independent of the period. This makes the lib results less accurate. self.alter_lh_char_data(char_port_data) - + return (char_sram_data, char_port_data) def alter_lh_char_data(self, char_port_data): """Copies high-to-low data to low-to-high data to make them consistent on the same clock edge.""" - + # This is basically a hack solution which should be removed/fixed later. for port in self.all_ports: char_port_data[port]['delay_lh'] = char_port_data[port]['delay_hl'] char_port_data[port]['slew_lh'] = char_port_data[port]['slew_hl'] - + def simulate_loads_and_slews(self, slews, loads, leakage_offset): """Simulate all specified output loads and input slews pairs of all ports""" - + measure_data = self.get_empty_measure_data_dict() - # Set the target simulation ports to all available ports. This make sims slower but failed sims exit anyways. + # Set the target simulation ports to all available ports. This make sims slower but failed sims exit anyways. self.targ_read_ports = self.read_ports self.targ_write_ports = self.write_ports for slew in slews: @@ -1045,12 +1045,12 @@ class delay(simulation): else: measure_data[port][mname].append(value) return measure_data - + def calculate_inverse_address(self): """Determine dummy test address based on probe address and column mux size.""" - + # The inverse address needs to share the same bitlines as the probe address as the trimming will remove all other bitlines - # This is only an issue when there is a column mux and the address maps to different bitlines. + # This is only an issue when there is a column mux and the address maps to different bitlines. column_addr = self.probe_address[:self.sram.col_addr_size] # do not invert this part inverse_address = "" for c in self.probe_address[self.sram.col_addr_size:]: # invert everything else @@ -1073,10 +1073,10 @@ class delay(simulation): data_ones = "1" * self.word_size data_zeros = "0" * self.word_size wmask_ones = "1" * self.num_wmasks - + if self.t_current == 0: self.add_noop_all_ports("Idle cycle (no positive clock edge)") - + self.add_write("W data 1 address {}".format(inverse_address), inverse_address, data_ones, @@ -1089,7 +1089,7 @@ class delay(simulation): wmask_ones, write_port) self.measure_cycles[write_port][sram_op.WRITE_ZERO] = len(self.cycle_times) - 1 - + self.add_noop_clock_one_port(write_port) self.measure_cycles[write_port]["disabled_write0"] = len(self.cycle_times) - 1 @@ -1102,7 +1102,7 @@ class delay(simulation): self.probe_address, read_port) self.measure_cycles[read_port][sram_op.READ_ZERO] = len(self.cycle_times) - 1 - + self.add_noop_clock_one_port(read_port) self.measure_cycles[read_port]["disabled_read0"] = len(self.cycle_times) - 1 @@ -1131,39 +1131,39 @@ class delay(simulation): self.add_read("R data 0 address {} to clear dout caps".format(inverse_address), inverse_address, read_port) - + self.add_read("R data 1 address {} to check W1 worked".format(self.probe_address), self.probe_address, read_port) self.measure_cycles[read_port][sram_op.READ_ONE] = len(self.cycle_times) - 1 - + self.add_noop_all_ports("Idle cycle (if read takes >1 cycle))") - + def get_available_port(self, get_read_port): - - """Returns the first accessible read or write port. """ + + """Returns the first accessible read or write port. """ if get_read_port and len(self.read_ports) > 0: return self.read_ports[0] elif not get_read_port and len(self.write_ports) > 0: return self.write_ports[0] return None - + def set_stimulus_variables(self): simulation.set_stimulus_variables(self) self.measure_cycles = [{} for port in self.all_ports] - + def create_test_cycles(self): """ Returns a list of key time-points [ns] of the waveform (each rising edge) of the cycles to do a timing evaluation. The last time is the end of the simulation and does not need a rising edge. """ - + # Using this requires setting at least one port to target for simulation. if len(self.targ_write_ports) == 0 or len(self.targ_read_ports) == 0: debug.error("Write and read port must be specified for characterization.", 1) self.set_stimulus_variables() - + # Get any available read/write port in case only a single write or read ports is being characterized. cur_read_port = self.get_available_port(get_read_port=True) cur_write_port = self.get_available_port(get_read_port=False) @@ -1171,7 +1171,7 @@ class delay(simulation): "Characterizer requires at least 1 read port") debug.check(cur_write_port != None, "Characterizer requires at least 1 write port") - + # Create test cycles for specified target ports. write_pos = 0 read_pos = 0 @@ -1179,7 +1179,7 @@ class delay(simulation): # Exit when all ports have been characterized if write_pos >= len(self.targ_write_ports) and read_pos >= len(self.targ_read_ports): break - + # Select new write and/or read ports for the next cycle. Use previous port if none remaining. if write_pos < len(self.targ_write_ports): cur_write_port = self.targ_write_ports[write_pos] @@ -1187,39 +1187,39 @@ class delay(simulation): if read_pos < len(self.targ_read_ports): cur_read_port = self.targ_read_ports[read_pos] read_pos+=1 - + # Add test cycle of read/write port pair. One port could have been used already, but the other has not. self.gen_test_cycles_one_port(cur_read_port, cur_write_port) def sum_delays(self, delays): """Adds the delays (delay_data objects) so the correct slew is maintained""" - + delay = delays[0] for i in range(1, len(delays)): delay+=delays[i] return delay - + def analytical_delay(self, slews, loads): - """ - Return the analytical model results for the SRAM. + """ + Return the analytical model results for the SRAM. """ if OPTS.num_rw_ports > 1 or OPTS.num_w_ports > 0 and OPTS.num_r_ports > 0: debug.warning("In analytical mode, all ports have the timing of the first read port.") - + # Probe set to 0th bit, does not matter for analytical delay. self.set_probe('0' * self.addr_size, 0) self.create_graph() self.set_internal_spice_names() self.create_measurement_names() - + port = self.read_ports[0] self.graph.get_all_paths('{}{}'.format("clk", port), '{}{}_{}'.format(self.dout_name, port, self.probe_data)) - + # Select the path with the bitline (bl) bl_name, br_name = self.get_bl_name(self.graph.all_paths, port) bl_path = [path for path in self.graph.all_paths if bl_name in path][0] - + # Set delay/power for slews and loads port_data = self.get_empty_measure_data_dict() power = self.analytical_power(slews, loads) @@ -1229,7 +1229,7 @@ class delay(simulation): for load in loads: # Calculate delay based on slew and load path_delays = self.graph.get_timing(bl_path, self.corner, slew, load) - + total_delay = self.sum_delays(path_delays) max_delay = max(max_delay, total_delay.delay) debug.info(1, @@ -1237,7 +1237,7 @@ class delay(simulation): load, total_delay.delay / 1e3, total_delay.slew / 1e3)) - + # Delay is only calculated on a single port and replicated for now. for port in self.all_ports: for mname in self.delay_meas_names + self.power_meas_names: @@ -1249,20 +1249,20 @@ class delay(simulation): port_data[port][mname].append(total_delay.slew / 1e3) else: debug.error("Measurement name not recognized: {}".format(mname), 1) - + # Estimate the period as double the delay with margin period_margin = 0.1 sram_data = {"min_period": (max_delay / 1e3) * 2 * period_margin, "leakage_power": power.leakage} - + debug.info(2, "SRAM Data:\n{}".format(sram_data)) debug.info(2, "Port Data:\n{}".format(port_data)) - + return (sram_data, port_data) def analytical_power(self, slews, loads): """Get the dynamic and leakage power from the SRAM""" - + # slews unused, only last load is used load = loads[-1] power = self.sram.analytical_power(self.corner, load) @@ -1272,21 +1272,21 @@ class delay(simulation): debug.info(1, "Dynamic Power: {0} mW".format(power.dynamic)) debug.info(1, "Leakage Power: {0} mW".format(power.leakage)) return power - + def gen_data(self): """ Generates the PWL data inputs for a simulation timing test. """ - + for write_port in self.write_ports: for i in range(self.word_size): sig_name="{0}{1}_{2} ".format(self.din_name, write_port, i) self.stim.gen_pwl(sig_name, self.cycle_times, self.data_values[write_port][i], self.period, self.slew, 0.05) def gen_addr(self): - """ - Generates the address inputs for a simulation timing test. + """ + Generates the address inputs for a simulation timing test. This alternates between all 1's and all 0's for the address. """ - + for port in self.all_ports: for i in range(self.addr_size): sig_name = "{0}{1}_{2}".format(self.addr_name, port, i) @@ -1294,15 +1294,15 @@ class delay(simulation): def gen_control(self): """ Generates the control signals """ - + for port in self.all_ports: self.stim.gen_pwl("CSB{0}".format(port), self.cycle_times, self.csb_values[port], self.period, self.slew, 0.05) if port in self.readwrite_ports: self.stim.gen_pwl("WEB{0}".format(port), self.cycle_times, self.web_values[port], self.period, self.slew, 0.05) - + def get_empty_measure_data_dict(self): """Make a dict of lists for each type of delay and power measurement to append results to""" - + measure_names = self.delay_meas_names + self.power_meas_names # Create list of dicts. List lengths is # of ports. Each dict maps the measurement names to lists. measure_data = [{mname: [] for mname in measure_names} for i in self.all_ports] diff --git a/compiler/characterizer/functional.py b/compiler/characterizer/functional.py index 44c6d278..4ec218fc 100644 --- a/compiler/characterizer/functional.py +++ b/compiler/characterizer/functional.py @@ -23,7 +23,7 @@ class functional(simulation): def __init__(self, sram, spfile, corner, cycles=15): super().__init__(sram, spfile, corner) - + # Seed the characterizer with a constant seed for unit tests if OPTS.is_unit_test: random.seed(12345) @@ -50,7 +50,7 @@ class functional(simulation): self.set_internal_spice_names() self.q_name, self.qbar_name = self.get_bit_name() debug.info(2, "q name={}\nqbar name={}".format(self.q_name, self.qbar_name)) - + # Number of checks can be changed self.num_cycles = cycles # This is to have ordered keys for random selection @@ -63,16 +63,16 @@ class functional(simulation): self.period = feasible_period # Generate a random sequence of reads and writes self.create_random_memory_sequence() - + # Run SPICE simulation self.write_functional_stimulus() self.stim.run_sim() - + # read dout values from SPICE simulation. If the values do not fall within the noise margins, return the error. (success, error) = self.read_stim_results() if not success: return (0, error) - + # Check read values with written values. If the values do not match, return an error. return self.check_stim_results() @@ -94,7 +94,7 @@ class functional(simulation): len(val), port, name)) - + def create_random_memory_sequence(self): if self.write_size: rw_ops = ["noop", "write", "partial_write", "read"] @@ -123,7 +123,7 @@ class functional(simulation): self.cycle_times.append(self.t_current) self.t_current += self.period self.check_lengths() - + # 2. Read at least once. For multiport, it is important that one # read cycle uses all RW and R port to read from the same # address simultaniously. This will test the viablilty of the @@ -138,7 +138,7 @@ class functional(simulation): self.cycle_times.append(self.t_current) self.t_current += self.period self.check_lengths() - + # 3. Perform a random sequence of writes and reads on random # ports, using random addresses and random words and random # write masks (if applicable) @@ -151,7 +151,7 @@ class functional(simulation): op = random.choice(w_ops) else: op = random.choice(r_ops) - + if op == "noop": self.add_noop_one_port(port) elif op == "write": @@ -191,10 +191,10 @@ class functional(simulation): comment = self.gen_cycle_comment("read", word, addr, "0" * self.num_wmasks, port, self.t_current) self.add_read_one_port(comment, addr, port) self.add_read_check(word, port) - + self.cycle_times.append(self.t_current) self.t_current += self.period - + # Last cycle idle needed to correctly measure the value on the second to last clock edge comment = self.gen_cycle_comment("noop", "0" * self.word_size, "0" * self.addr_size, "0" * self.num_wmasks, 0, self.t_current) self.add_noop_all_ports(comment) @@ -203,7 +203,7 @@ class functional(simulation): """ Create the masked data word """ # Start with the new word new_word = word - + # When the write mask's bits are 0, the old data values should appear in the new word # as to not overwrite the old values for bit in range(len(wmask)): @@ -211,9 +211,9 @@ class functional(simulation): lower = bit * self.write_size upper = lower + self.write_size - 1 new_word = new_word[:lower] + old_word[lower:upper + 1] + new_word[upper + 1:] - + return new_word - + def add_read_check(self, word, port): """ Add to the check array to ensure a read works. """ try: @@ -222,7 +222,7 @@ class functional(simulation): self.check = 0 self.read_check.append([word, "{0}{1}".format(self.dout_name, port), self.t_current + self.period, self.check]) self.check += 1 - + def read_stim_results(self): # Extract dout values from spice timing.lis for (word, dout_port, eo_period, check) in self.read_check: @@ -247,12 +247,12 @@ class functional(simulation): bit, value, eo_period) - + return (0, error) - - self.read_results.append([sp_read_value, dout_port, eo_period, check]) + + self.read_results.append([sp_read_value, dout_port, eo_period, check]) return (1, "SUCCESS") - + def check_stim_results(self): for i in range(len(self.read_check)): if self.read_check[i][0] != self.read_results[i][0]: @@ -307,14 +307,14 @@ class functional(simulation): random_value = random.randint(0, ((2 ** (self.addr_size - 1) - 1)) + (self.num_spare_rows * self.words_per_row)) addr_bits = self.convert_to_bin(random_value, True) return addr_bits - + def get_data(self): """ Gets an available address and corresponding word. """ # Used for write masks since they should be writing to previously written addresses addr = random.choice(list(self.stored_words.keys())) word = self.stored_words[addr] return (addr, word) - + def convert_to_bin(self, value, is_addr): """ Converts addr & word to usable binary values. """ new_value = str.replace(bin(value), "0b", "") @@ -324,10 +324,10 @@ class functional(simulation): expected_value = self.word_size + self.num_spare_cols for i in range(expected_value - len(new_value)): new_value = "0" + new_value - + # print("Binary Conversion: {} to {}".format(value, new_value)) return new_value - + def write_functional_stimulus(self): """ Writes SPICE stimulus. """ temp_stim = "{0}/stim.sp".format(OPTS.openram_temp) @@ -341,7 +341,7 @@ class functional(simulation): # Write Vdd/Gnd statements self.sf.write("\n* Global Power Supplies\n") self.stim.write_supply() - + # Instantiate the SRAM self.sf.write("\n* Instantiation of the SRAM\n") self.stim.inst_model(pins=self.pins, @@ -361,19 +361,19 @@ class functional(simulation): self.sf.write("* s_en: {}\n".format(self.sen_name)) self.sf.write("* q: {}\n".format(self.q_name)) self.sf.write("* qbar: {}\n".format(self.qbar_name)) - + # Write debug comments to stim file self.sf.write("\n\n* Sequence of operations\n") for comment in self.fn_cycle_comments: self.sf.write("*{}\n".format(comment)) - + # Generate data input bits self.sf.write("\n* Generation of data and address signals\n") for port in self.write_ports: for bit in range(self.word_size + self.num_spare_cols): sig_name="{0}{1}_{2} ".format(self.din_name, port, bit) self.stim.gen_pwl(sig_name, self.cycle_times, self.data_values[port][bit], self.period, self.slew, 0.05) - + # Generate address bits for port in self.all_ports: for bit in range(self.addr_size): @@ -384,7 +384,7 @@ class functional(simulation): self.sf.write("\n * Generation of control signals\n") for port in self.all_ports: self.stim.gen_pwl("CSB{}".format(port), self.cycle_times, self.csb_values[port], self.period, self.slew, 0.05) - + for port in self.readwrite_ports: self.stim.gen_pwl("WEB{}".format(port), self.cycle_times, self.web_values[port], self.period, self.slew, 0.05) @@ -417,7 +417,7 @@ class functional(simulation): period=self.period, t_rise=self.slew, t_fall=self.slew) - + # Generate dout value measurements self.sf.write("\n * Generation of dout measurements\n") for (word, dout_port, eo_period, check) in self.read_check: @@ -428,10 +428,10 @@ class functional(simulation): dout="{0}_{1}".format(dout_port, bit), t_intital=t_intital, t_final=t_final) - + self.stim.write_control(self.cycle_times[-1] + self.period) self.sf.close() - + #FIXME: Similar function to delay.py, refactor this def get_bit_name(self): """ Get a bit cell name """ @@ -444,4 +444,4 @@ class functional(simulation): return (q_name, qbar_name) - + diff --git a/compiler/characterizer/lib.py b/compiler/characterizer/lib.py index 96c464b7..e5628c5d 100644 --- a/compiler/characterizer/lib.py +++ b/compiler/characterizer/lib.py @@ -18,21 +18,21 @@ from globals import OPTS class lib: """ lib file generation.""" - + def __init__(self, out_dir, sram, sp_file, use_model=OPTS.analytical_delay): - + self.out_dir = out_dir self.sram = sram - self.sp_file = sp_file + self.sp_file = sp_file self.use_model = use_model self.set_port_indices() - + self.prepare_tables() - + self.create_corners() - + self.characterize_corners() - + def set_port_indices(self): """Copies port information set in the SRAM instance""" self.total_port_num = len(self.sram.all_ports) @@ -40,7 +40,7 @@ class lib: self.readwrite_ports = self.sram.readwrite_ports self.read_ports = self.sram.read_ports self.write_ports = self.sram.write_ports - + def prepare_tables(self): """ Determine the load/slews if they aren't specified in the config file. """ # These are the parameters to determine the table sizes @@ -48,12 +48,12 @@ class lib: self.load = tech.spice["dff_in_cap"] self.loads = self.load_scales * self.load debug.info(1, "Loads: {0}".format(self.loads)) - + self.slew_scales = np.array(OPTS.slew_scales) self.slew = tech.spice["rise_time"] self.slews = self.slew_scales * self.slew debug.info(1, "Slews: {0}".format(self.slews)) - + def create_corners(self): """ Create corners for characterization. """ # Get the corners from the options file @@ -71,7 +71,7 @@ class lib: min_process = "FF" nom_process = "TT" max_process = "SS" - + self.corners = [] self.lib_files = [] @@ -103,15 +103,15 @@ class lib: temp) self.corner_name = self.corner_name.replace(".","p") # Remove decimals lib_name = self.out_dir+"{}.lib".format(self.corner_name) - + # A corner is a tuple of PVT self.corners.append((proc, volt, temp)) self.lib_files.append(lib_name) - - + + def characterize_corners(self): """ Characterize the list of corners. """ - debug.info(1,"Characterizing corners: " + str(self.corners)) + debug.info(1,"Characterizing corners: " + str(self.corners)) for (self.corner,lib_name) in zip(self.corners,self.lib_files): debug.info(1,"Corner: " + str(self.corner)) (self.process, self.voltage, self.temperature) = self.corner @@ -121,7 +121,7 @@ class lib: self.characterize() self.lib.close() self.parse_info(self.corner,lib_name) - + def characterize(self): """ Characterize the current corner. """ @@ -130,8 +130,8 @@ class lib: self.compute_setup_hold() self.write_header() - - # Loop over all ports. + + # Loop over all ports. for port in self.all_ports: # set the read and write port as inputs. self.write_data_bus(port) @@ -143,7 +143,7 @@ class lib: self.write_clk_timing_power(port) self.write_footer() - + def write_footer(self): """ Write the footer """ self.lib.write(" }\n") #Closing brace for the cell @@ -154,13 +154,13 @@ class lib: self.lib.write("library ({0}_lib)".format(self.corner_name)) self.lib.write("{\n") self.lib.write(" delay_model : \"table_lookup\";\n") - + self.write_units() self.write_defaults() self.write_LUT_templates() self.lib.write(" default_operating_conditions : OC; \n") - + self.write_bus() self.lib.write("cell ({0})".format(self.sram.name)) @@ -182,7 +182,7 @@ class lib: control_str = 'csb0' #assume at least 1 port for i in range(1, self.total_port_num): control_str += ' & csb{0}'.format(i) - + # Leakage is included in dynamic when macro is enabled self.lib.write(" leakage_power () {\n") # 'when' condition unnecessary when cs pin does not turn power to devices @@ -190,15 +190,15 @@ class lib: self.lib.write(" value : {};\n".format(self.char_sram_results["leakage_power"])) self.lib.write(" }\n") self.lib.write(" cell_leakage_power : {};\n".format(self.char_sram_results["leakage_power"])) - - + + def write_units(self): """ Adds default units for time, voltage, current,... - Valid values are 1mV, 10mV, 100mV, and 1V. + Valid values are 1mV, 10mV, 100mV, and 1V. For time: Valid values are 1ps, 10ps, 100ps, and 1ns. - For power: Valid values are 1mW, 100uW (for 100mW), 10uW (for 10mW), + For power: Valid values are 1mW, 100uW (for 100mW), 10uW (for 10mW), 1uW (for 1mW), 100nW, 10nW, 1nW, 100pW, 10pW, and 1pW. - """ + """ self.lib.write(" time_unit : \"1ns\" ;\n") self.lib.write(" voltage_unit : \"1V\" ;\n") self.lib.write(" current_unit : \"1mA\" ;\n") @@ -214,7 +214,7 @@ class lib: def write_defaults(self): """ Adds default values for slew and capacitance.""" - + self.lib.write(" input_threshold_pct_fall : 50.0 ;\n") self.lib.write(" output_threshold_pct_fall : 50.0 ;\n") self.lib.write(" input_threshold_pct_rise : 50.0 ;\n") @@ -255,7 +255,7 @@ class lib: formatted_rows = list(map(self.create_list,split_values)) formatted_array = ",\\\n".join(formatted_rows) return formatted_array - + def write_index(self, number, values): """ Write the index """ quoted_string = self.create_list(values) @@ -267,10 +267,10 @@ class lib: # indent each newline plus extra spaces for word values indented_string = quoted_string.replace('\n', '\n' + indent +" ") self.lib.write("{0}values({1});\n".format(indent,indented_string)) - + def write_LUT_templates(self): """ Adds lookup_table format (A 1x1 lookup_table).""" - + Tran = ["CELL_TABLE"] for i in Tran: self.lib.write(" lu_table_template({0})".format(i)) @@ -278,8 +278,8 @@ class lib: self.lib.write(" variable_1 : input_net_transition;\n") self.lib.write(" variable_2 : total_output_net_capacitance;\n") self.write_index(1,self.slews) - # Dividing by 1000 to all cap values since output of .sp is in fF, - # and it needs to be in pF for Innovus. + # Dividing by 1000 to all cap values since output of .sp is in fF, + # and it needs to be in pF for Innovus. self.write_index(2,self.loads/1000) self.lib.write(" }\n\n") @@ -292,12 +292,12 @@ class lib: self.write_index(1,self.slews) self.write_index(2,self.slews) self.lib.write(" }\n\n") - + # self.lib.write(" lu_table_template(CLK_TRAN) {\n") # self.lib.write(" variable_1 : constrained_pin_transition;\n") # self.write_index(1,self.slews) # self.lib.write(" }\n\n") - + # self.lib.write(" lu_table_template(TRAN) {\n") # self.lib.write(" variable_1 : total_output_net_capacitance;\n") # self.write_index(1,self.slews) @@ -311,10 +311,10 @@ class lib: # #self.write_index(1,self.slews) # self.write_index(1,[self.slews[0]]) # self.lib.write(" }\n\n") - + def write_bus(self): """ Adds format of data and addr bus.""" - + self.lib.write("\n\n") self.lib.write(" type (data){\n") self.lib.write(" base_type : array;\n") @@ -378,11 +378,11 @@ class lib: self.lib.write(" direction : output; \n") # This is conservative, but limit to range that we characterized. self.lib.write(" max_capacitance : {0}; \n".format(max(self.loads)/1000)) - self.lib.write(" min_capacitance : {0}; \n".format(min(self.loads)/1000)) + self.lib.write(" min_capacitance : {0}; \n".format(min(self.loads)/1000)) self.lib.write(" memory_read(){ \n") self.lib.write(" address : addr{0}; \n".format(read_port)) self.lib.write(" }\n") - + self.lib.write(" pin(dout{0}[{1}:0]){{\n".format(read_port,self.sram.word_size-1)) self.lib.write(" timing(){ \n") @@ -402,7 +402,7 @@ class lib: self.write_values(self.char_port_results[read_port]["slew_hl"],len(self.loads)," ") self.lib.write(" }\n") # fall trans self.lib.write(" }\n") # timing - self.lib.write(" }\n") # pin + self.lib.write(" }\n") # pin self.lib.write(" }\n\n") # bus def write_data_bus_input(self, write_port): @@ -416,10 +416,10 @@ class lib: self.lib.write(" memory_write(){ \n") self.lib.write(" address : addr{0}; \n".format(write_port)) self.lib.write(" clocked_on : clk{0}; \n".format(write_port)) - self.lib.write(" }\n") + self.lib.write(" }\n") self.lib.write(" pin(din{0}[{1}:0]){{\n".format(write_port,self.sram.word_size-1)) self.write_FF_setuphold(write_port) - self.lib.write(" }\n") # pin + self.lib.write(" }\n") # pin self.lib.write(" }\n") #bus def write_data_bus(self, port): @@ -431,7 +431,7 @@ class lib: def write_addr_bus(self, port): """ Adds addr bus timing results.""" - + self.lib.write(" bus(addr{0}){{\n".format(port)) self.lib.write(" bus_type : addr; \n") self.lib.write(" direction : input; \n") @@ -439,9 +439,9 @@ class lib: self.lib.write(" max_transition : {0};\n".format(self.slews[-1])) self.lib.write(" pin(addr{0}[{1}:0])".format(port,self.sram.addr_size-1)) self.lib.write("{\n") - + self.write_FF_setuphold(port) - self.lib.write(" }\n") + self.lib.write(" }\n") self.lib.write(" }\n\n") def write_wmask_bus(self, port): @@ -465,7 +465,7 @@ class lib: ctrl_pin_names = ["csb{0}".format(port)] if port in self.readwrite_ports: ctrl_pin_names.append("web{0}".format(port)) - + for i in ctrl_pin_names: self.lib.write(" pin({0})".format(i)) self.lib.write("{\n") @@ -508,12 +508,12 @@ class lib: self.lib.write(" }\n") self.lib.write(" }\n") self.lib.write(" }\n\n") - + def add_clk_control_power(self, port): """Writes powers under the clock pin group for a specified port""" #Web added to read/write ports. Likely to change when control logic finished. web_name = "" - + if port in self.write_ports: if port in self.read_ports: web_name = " & !web{0}".format(port) @@ -556,7 +556,7 @@ class lib: self.lib.write(" values(\"{0:.6e}\");\n".format(read0_power)) self.lib.write(" }\n") self.lib.write(" }\n") - + # Disabled power. disabled_read1_power = np.mean(self.char_port_results[port]["disabled_read1_power"]) disabled_read0_power = np.mean(self.char_port_results[port]["disabled_read0_power"]) @@ -585,7 +585,7 @@ class lib: self.d = delay(self.sram, self.sp_file, self.corner) if self.use_model: char_results = self.d.analytical_delay(self.slews,self.loads) - self.char_sram_results, self.char_port_results = char_results + self.char_sram_results, self.char_port_results = char_results else: if (self.sram.num_spare_rows == 0): probe_address = "1" * self.sram.addr_size @@ -593,8 +593,8 @@ class lib: probe_address = "0" + "1" * (self.sram.addr_size - 1) probe_data = self.sram.word_size - 1 char_results = self.d.analyze(probe_address, probe_data, self.slews, self.loads) - self.char_sram_results, self.char_port_results = char_results - + self.char_sram_results, self.char_port_results = char_results + def compute_setup_hold(self): """ Do the analysis if we haven't characterized a FF yet """ # Do the analysis if we haven't characterized a FF yet @@ -604,8 +604,8 @@ class lib: self.times = self.sh.analytical_setuphold(self.slews,self.loads) else: self.times = self.sh.analyze(self.slews,self.slews) - - + + def parse_info(self,corner,lib_name): """ Copies important characterization data to datasheet.info to be added to datasheet """ if OPTS.is_unit_test: @@ -617,9 +617,9 @@ class lib: proc = subprocess.Popen(['git','rev-parse','HEAD'], cwd=os.path.abspath(os.environ.get("OPENRAM_HOME")) + '/', stdout=subprocess.PIPE) git_id = str(proc.stdout.read()) - + try: - git_id = git_id[2:-3] + git_id = git_id[2:-3] except: pass # check if git id is valid @@ -628,7 +628,7 @@ class lib: git_id = 'Failed to retruieve' datasheet = open(OPTS.openram_temp +'/datasheet.info', 'a+') - + current_time = datetime.date.today() # write static information to be parser later datasheet.write("{0},{1},{2},{3},{4},{5},{6},{7},{8},{9},{10},{11},{12},{13},{14},{15},{16},".format( @@ -654,10 +654,10 @@ class lib: # information of checks # run it only the first time datasheet.write("{0},{1},".format(self.sram.drc_errors, self.sram.lvs_errors)) - + # write area datasheet.write(str(self.sram.width * self.sram.height) + ',') - + # write timing information for all ports for port in self.all_ports: #din timings @@ -675,7 +675,7 @@ class lib: min(list(map(round_time,self.times["hold_times_HL"]))), max(list(map(round_time,self.times["hold_times_HL"]))) - + )) for port in self.all_ports: @@ -695,7 +695,7 @@ class lib: min(list(map(round_time,self.char_port_results[port]["slew_hl"]))), max(list(map(round_time,self.char_port_results[port]["slew_hl"]))) - + )) for port in self.all_ports: @@ -791,9 +791,9 @@ class lib: control_str = 'csb0' for i in range(1, self.total_port_num): control_str += ' & csb{0}'.format(i) - + datasheet.write("{0},{1},{2},".format('leak', control_str, self.char_sram_results["leakage_power"])) - + datasheet.write("END\n") datasheet.close() diff --git a/compiler/characterizer/logical_effort.py b/compiler/characterizer/logical_effort.py index 42ac8861..6656e5fd 100644 --- a/compiler/characterizer/logical_effort.py +++ b/compiler/characterizer/logical_effort.py @@ -17,7 +17,7 @@ class logical_effort(): min_inv_cin = 1+beta pinv=parameter["min_inv_para_delay"] tau = parameter['le_tau'] - + def __init__(self, name, size, cin, cout, parasitic, out_is_rise=True): self.name = name self.cin = cin @@ -26,31 +26,31 @@ class logical_effort(): self.electrical_effort = self.cout/self.cin self.parasitic_scale = parasitic self.is_rise = out_is_rise - + def __str__(self): return "Name={}, g={}, h={}, p={}*pinv, rise_delay={}".format(self.name, self.logical_effort, self.electrical_effort, self.parasitic_scale, self.is_rise - ) + ) def get_stage_effort(self): return self.logical_effort*self.electrical_effort - + def get_parasitic_delay(self): return logical_effort.pinv*self.parasitic_scale - + def get_stage_delay(self): return self.get_stage_effort()+self.get_parasitic_delay() def get_absolute_delay(self): return logical_effort.tau*self.get_stage_delay() - + def calculate_delays(stage_effort_list): """Convert stage effort objects to list of delay values""" return [stage.get_stage_delay() for stage in stage_effort_list] - + def calculate_relative_delay(stage_effort_list): """Calculates the total delay of a given delay path made of a list of logical effort objects.""" total_rise_delay, total_fall_delay = calculate_relative_rise_fall_delays(stage_effort_list) @@ -62,7 +62,7 @@ def calculate_absolute_delay(stage_effort_list): for stage in stage_effort_list: total_delay+=stage.get_absolute_delay() return total_delay - + def calculate_relative_rise_fall_delays(stage_effort_list): """Calculates the rise/fall delays of a given delay path made of a list of logical effort objects.""" debug.info(2, "Calculating rise/fall relative delays") @@ -74,11 +74,11 @@ def calculate_relative_rise_fall_delays(stage_effort_list): else: total_fall_delay += stage.get_stage_delay() return total_rise_delay, total_fall_delay - + def convert_farad_to_relative_c(c_farad): """Converts capacitance in Femto-Farads to relative capacitance.""" return c_farad*parameter['cap_relative_per_ff'] - + def convert_relative_c_to_farad(c_relative): """Converts capacitance in logical effort relative units to Femto-Farads.""" - return c_relative/parameter['cap_relative_per_ff'] \ No newline at end of file + return c_relative/parameter['cap_relative_per_ff'] \ No newline at end of file diff --git a/compiler/characterizer/measurements.py b/compiler/characterizer/measurements.py index 31da8ac5..7900dd2b 100644 --- a/compiler/characterizer/measurements.py +++ b/compiler/characterizer/measurements.py @@ -19,63 +19,63 @@ class spice_measurement(ABC): self.measure_scale = measure_scale self.has_port = has_port #Needed for error checking #Some meta values used externally. variables are added here for consistency accross the objects - self.meta_str = None + self.meta_str = None self.meta_add_delay = False @abstractmethod def get_measure_function(self): - return None - + return None + @abstractmethod def get_measure_values(self): return None - + def write_measure(self, stim_obj, input_tuple): measure_func = self.get_measure_function() if measure_func == None: debug.error("Did not set measure function",1) measure_vals = self.get_measure_values(*input_tuple) measure_func(stim_obj, *measure_vals) - + def retrieve_measure(self, port=None): self.port_error_check(port) if port != None: - value = parse_spice_list("timing", "{0}{1}".format(self.name.lower(), port)) + value = parse_spice_list("timing", "{0}{1}".format(self.name.lower(), port)) else: - value = parse_spice_list("timing", "{0}".format(self.name.lower())) - if type(value)!=float or self.measure_scale == None: + value = parse_spice_list("timing", "{0}".format(self.name.lower())) + if type(value)!=float or self.measure_scale == None: return value else: return value*self.measure_scale - + def port_error_check(self, port): if self.has_port and port == None: debug.error("Cannot retrieve measurement, port input was expected.",1) elif not self.has_port and port != None: debug.error("Unexpected port input received during measure retrieval.",1) - + class delay_measure(spice_measurement): """Generates a spice measurement for the delay of 50%-to-50% points of two signals.""" - + def __init__(self, measure_name, trig_name, targ_name, trig_dir_str, targ_dir_str,\ trig_vdd=0.5, targ_vdd=0.5, measure_scale=None, has_port=True): spice_measurement.__init__(self, measure_name, measure_scale, has_port) self.set_meas_constants(trig_name, targ_name, trig_dir_str, targ_dir_str, trig_vdd, targ_vdd) - + def get_measure_function(self): return stimuli.gen_meas_delay - + def set_meas_constants(self, trig_name, targ_name, trig_dir_str, targ_dir_str, trig_vdd, targ_vdd): """Set the constants for this measurement: signal names, directions, and trigger scales""" self.trig_dir_str = trig_dir_str self.targ_dir_str = targ_dir_str - self.trig_val_of_vdd = trig_vdd + self.trig_val_of_vdd = trig_vdd self.targ_val_of_vdd = targ_vdd self.trig_name_no_port = trig_name self.targ_name_no_port = targ_name - + #Time delays and ports are variant and needed as inputs when writing the measurement - - def get_measure_values(self, trig_td, targ_td, vdd_voltage, port=None): + + def get_measure_values(self, trig_td, targ_td, vdd_voltage, port=None): """Constructs inputs to stimulus measurement function. Variant values are inputs here.""" self.port_error_check(port) trig_val = self.trig_val_of_vdd * vdd_voltage @@ -90,74 +90,74 @@ class delay_measure(spice_measurement): meas_name = self.name trig_name = self.trig_name_no_port targ_name = self.targ_name_no_port - return (meas_name,trig_name,targ_name,trig_val,targ_val,self.trig_dir_str,self.targ_dir_str,trig_td,targ_td) + return (meas_name,trig_name,targ_name,trig_val,targ_val,self.trig_dir_str,self.targ_dir_str,trig_td,targ_td) + +class slew_measure(delay_measure): -class slew_measure(delay_measure): - def __init__(self, measure_name, signal_name, slew_dir_str, measure_scale=None, has_port=True): spice_measurement.__init__(self, measure_name, measure_scale, has_port) self.set_meas_constants(signal_name, slew_dir_str) - + def set_meas_constants(self, signal_name, slew_dir_str): """Set the values needed to generate a Spice measurement statement based on the name of the measurement.""" self.trig_dir_str = slew_dir_str self.targ_dir_str = slew_dir_str - + if slew_dir_str == "RISE": - self.trig_val_of_vdd = 0.1 + self.trig_val_of_vdd = 0.1 self.targ_val_of_vdd = 0.9 elif slew_dir_str == "FALL": - self.trig_val_of_vdd = 0.9 + self.trig_val_of_vdd = 0.9 self.targ_val_of_vdd = 0.1 else: debug.error("Unrecognised slew measurement direction={}".format(slew_dir_str),1) self.trig_name_no_port = signal_name self.targ_name_no_port = signal_name - - #Time delays and ports are variant and needed as inputs when writing the measurement - + + #Time delays and ports are variant and needed as inputs when writing the measurement + class power_measure(spice_measurement): """Generates a spice measurement for the average power between two time points.""" - + def __init__(self, measure_name, power_type="", measure_scale=None, has_port=True): spice_measurement.__init__(self, measure_name, measure_scale, has_port) self.set_meas_constants(power_type) - + def get_measure_function(self): return stimuli.gen_meas_power - + def set_meas_constants(self, power_type): """Sets values useful for power simulations. This value is only meta related to the lib file (rise/fall)""" #Not needed for power simulation self.power_type = power_type #Expected to be "RISE"/"FALL" - - def get_measure_values(self, t_initial, t_final, port=None): + + def get_measure_values(self, t_initial, t_final, port=None): """Constructs inputs to stimulus measurement function. Variant values are inputs here.""" self.port_error_check(port) if port != None: meas_name = "{}{}".format(self.name, port) else: meas_name = self.name - return (meas_name,t_initial,t_final) - -class voltage_when_measure(spice_measurement): + return (meas_name,t_initial,t_final) + +class voltage_when_measure(spice_measurement): """Generates a spice measurement to measure the voltage of a signal based on the voltage of another.""" - + def __init__(self, measure_name, trig_name, targ_name, trig_dir_str, trig_vdd, measure_scale=None, has_port=True): spice_measurement.__init__(self, measure_name, measure_scale, has_port) self.set_meas_constants(trig_name, targ_name, trig_dir_str, trig_vdd) - + def get_measure_function(self): return stimuli.gen_meas_find_voltage - + def set_meas_constants(self, trig_name, targ_name, trig_dir_str, trig_vdd): """Sets values useful for power simulations. This value is only meta related to the lib file (rise/fall)""" self.trig_dir_str = trig_dir_str - self.trig_val_of_vdd = trig_vdd + self.trig_val_of_vdd = trig_vdd self.trig_name_no_port = trig_name self.targ_name_no_port = targ_name - - def get_measure_values(self, trig_td, vdd_voltage, port=None): + + def get_measure_values(self, trig_td, vdd_voltage, port=None): """Constructs inputs to stimulus measurement function. Variant values are inputs here.""" self.port_error_check(port) if port != None: @@ -169,25 +169,25 @@ class voltage_when_measure(spice_measurement): meas_name = self.name trig_name = self.trig_name_no_port targ_name = self.targ_name_no_port - trig_voltage = self.trig_val_of_vdd*vdd_voltage + trig_voltage = self.trig_val_of_vdd*vdd_voltage return (meas_name,trig_name,targ_name,trig_voltage,self.trig_dir_str,trig_td) - -class voltage_at_measure(spice_measurement): + +class voltage_at_measure(spice_measurement): """Generates a spice measurement to measure the voltage at a specific time. The time is considered variant with different periods.""" - + def __init__(self, measure_name, targ_name, measure_scale=None, has_port=True): spice_measurement.__init__(self, measure_name, measure_scale, has_port) self.set_meas_constants(targ_name) - + def get_measure_function(self): return stimuli.gen_meas_find_voltage_at_time - + def set_meas_constants(self, targ_name): """Sets values useful for power simulations. This value is only meta related to the lib file (rise/fall)""" self.targ_name_no_port = targ_name - - def get_measure_values(self, time_at, port=None): + + def get_measure_values(self, time_at, port=None): """Constructs inputs to stimulus measurement function. Variant values are inputs here.""" self.port_error_check(port) if port != None: @@ -196,6 +196,6 @@ class voltage_at_measure(spice_measurement): targ_name = self.targ_name_no_port.format(port) else: meas_name = self.name - targ_name = self.targ_name_no_port - return (meas_name,targ_name,time_at) - + targ_name = self.targ_name_no_port + return (meas_name,targ_name,time_at) + diff --git a/compiler/characterizer/model_check.py b/compiler/characterizer/model_check.py index 52100001..794b3988 100644 --- a/compiler/characterizer/model_check.py +++ b/compiler/characterizer/model_check.py @@ -30,14 +30,14 @@ class model_check(delay): self.period = tech.spice["feasible_period"] self.create_data_names() self.custom_delaychain=custom_delaychain - + def create_data_names(self): self.wl_meas_name, self.wl_model_name = "wl_measures", "wl_model" self.sae_meas_name, self.sae_model_name = "sae_measures", "sae_model" self.wl_slew_name, self.sae_slew_name = "wl_slews", "sae_slews" self.bl_meas_name, self.bl_slew_name = "bl_measures", "bl_slews" self.power_name = "total_power" - + def create_measurement_names(self, port): """Create measurement names. The names themselves currently define the type of measurement""" #Create delay measurement names @@ -73,10 +73,10 @@ class model_check(delay): else: self.rbl_slew_meas_names = ["slew_rbl_gated_clk_bar"]+dc_slew_names self.sae_slew_meas_names = ["slew_replica_bl0", "slew_pre_sen"]+sen_driver_slew_names+["slew_sen"] - + self.bitline_meas_names = ["delay_wl_to_bl", "delay_bl_to_dout"] self.power_meas_names = ['read0_power'] - + def create_signal_names(self, port): """Creates list of the signal names used in the spice file along the wl and sen paths. Names are re-harded coded here; i.e. the names are hardcoded in most of OpenRAM and are @@ -90,7 +90,7 @@ class model_check(delay): if self.custom_delaychain: delay_chain_signal_names = [] else: - delay_chain_signal_names = ["Xsram.Xcontrol{}.Xreplica_bitline.Xdelay_chain.dout_{}".format('{}', stage) for stage in range(1,self.get_num_delay_stages())] + delay_chain_signal_names = ["Xsram.Xcontrol{}.Xreplica_bitline.Xdelay_chain.dout_{}".format('{}', stage) for stage in range(1,self.get_num_delay_stages())] if len(self.sram.all_ports) > 1: port_format = '{}' else: @@ -103,21 +103,21 @@ class model_check(delay): pre_delay_chain_names = ["Xsram.Xcontrol{}.gated_clk_bar".format('{}')] if port not in self.sram.readonly_ports: pre_delay_chain_names+= ["Xsram.Xcontrol{}.Xand2_rbl_in.zb_int".format('{}'), "Xsram.Xcontrol{}.rbl_in".format('{}')] - + self.rbl_en_signal_names = pre_delay_chain_names+\ delay_chain_signal_names+\ ["Xsram.Xcontrol{}.Xreplica_bitline.delayed_en".format('{}')] - - + + self.sae_signal_names = ["Xsram.Xcontrol{}.Xreplica_bitline.bl0_0".format('{}'), "Xsram.Xcontrol{}.pre_s_en".format('{}')]+\ sen_driver_signals+\ ["Xsram.s_en{}".format('{}')] - + dout_name = "{0}{1}_{2}".format(self.dout_name,"{}",self.probe_data) #Empty values are the port and probe data bit self.bl_signal_names = ["Xsram.Xbank0.wl{}_{}".format(port_format, self.wordline_row),\ "Xsram.Xbank0.bl{}_{}".format(port_format, self.bitline_column),\ dout_name] - + def create_measurement_objects(self): """Create the measurements used for read and write ports""" self.create_wordline_meas_objs() @@ -125,101 +125,101 @@ class model_check(delay): self.create_bl_meas_objs() self.create_power_meas_objs() self.all_measures = self.wl_meas_objs+self.sae_meas_objs+self.bl_meas_objs+self.power_meas_objs - + def create_power_meas_objs(self): """Create power measurement object. Only one.""" self.power_meas_objs = [] self.power_meas_objs.append(power_measure(self.power_meas_names[0], "FALL", measure_scale=1e3)) - + def create_wordline_meas_objs(self): """Create the measurements to measure the wordline path from the gated_clk_bar signal""" self.wl_meas_objs = [] trig_dir = "RISE" targ_dir = "FALL" - + for i in range(1, len(self.wl_signal_names)): - self.wl_meas_objs.append(delay_measure(self.wl_delay_meas_names[i-1], - self.wl_signal_names[i-1], - self.wl_signal_names[i], - trig_dir, - targ_dir, + self.wl_meas_objs.append(delay_measure(self.wl_delay_meas_names[i-1], + self.wl_signal_names[i-1], + self.wl_signal_names[i], + trig_dir, + targ_dir, measure_scale=1e9)) - self.wl_meas_objs.append(slew_measure(self.wl_slew_meas_names[i-1], - self.wl_signal_names[i-1], - trig_dir, + self.wl_meas_objs.append(slew_measure(self.wl_slew_meas_names[i-1], + self.wl_signal_names[i-1], + trig_dir, measure_scale=1e9)) temp_dir = trig_dir trig_dir = targ_dir targ_dir = temp_dir self.wl_meas_objs.append(slew_measure(self.wl_slew_meas_names[-1], self.wl_signal_names[-1], trig_dir, measure_scale=1e9)) - + def create_bl_meas_objs(self): """Create the measurements to measure the bitline to dout, static stages""" #Bitline has slightly different measurements, objects appends hardcoded. self.bl_meas_objs = [] trig_dir, targ_dir = "RISE", "FALL" #Only check read 0 - self.bl_meas_objs.append(delay_measure(self.bitline_meas_names[0], - self.bl_signal_names[0], - self.bl_signal_names[-1], - trig_dir, - targ_dir, + self.bl_meas_objs.append(delay_measure(self.bitline_meas_names[0], + self.bl_signal_names[0], + self.bl_signal_names[-1], + trig_dir, + targ_dir, measure_scale=1e9)) def create_sae_meas_objs(self): """Create the measurements to measure the sense amp enable path from the gated_clk_bar signal. The RBL splits this path into two.""" - + self.sae_meas_objs = [] trig_dir = "RISE" targ_dir = "FALL" #Add measurements from gated_clk_bar to RBL for i in range(1, len(self.rbl_en_signal_names)): - self.sae_meas_objs.append(delay_measure(self.rbl_delay_meas_names[i-1], - self.rbl_en_signal_names[i-1], - self.rbl_en_signal_names[i], - trig_dir, - targ_dir, + self.sae_meas_objs.append(delay_measure(self.rbl_delay_meas_names[i-1], + self.rbl_en_signal_names[i-1], + self.rbl_en_signal_names[i], + trig_dir, + targ_dir, measure_scale=1e9)) - self.sae_meas_objs.append(slew_measure(self.rbl_slew_meas_names[i-1], - self.rbl_en_signal_names[i-1], - trig_dir, + self.sae_meas_objs.append(slew_measure(self.rbl_slew_meas_names[i-1], + self.rbl_en_signal_names[i-1], + trig_dir, measure_scale=1e9)) temp_dir = trig_dir trig_dir = targ_dir targ_dir = temp_dir if self.custom_delaychain: #Hack for custom delay chains - self.sae_meas_objs[-2] = delay_measure(self.rbl_delay_meas_names[-1], - self.rbl_en_signal_names[-2], - self.rbl_en_signal_names[-1], - "RISE", - "RISE", + self.sae_meas_objs[-2] = delay_measure(self.rbl_delay_meas_names[-1], + self.rbl_en_signal_names[-2], + self.rbl_en_signal_names[-1], + "RISE", + "RISE", measure_scale=1e9) - self.sae_meas_objs.append(slew_measure(self.rbl_slew_meas_names[-1], - self.rbl_en_signal_names[-1], - trig_dir, + self.sae_meas_objs.append(slew_measure(self.rbl_slew_meas_names[-1], + self.rbl_en_signal_names[-1], + trig_dir, measure_scale=1e9)) - + #Add measurements from rbl_out to sae. Trigger directions do not invert from previous stage due to RBL. trig_dir = "FALL" targ_dir = "RISE" for i in range(1, len(self.sae_signal_names)): - self.sae_meas_objs.append(delay_measure(self.sae_delay_meas_names[i-1], - self.sae_signal_names[i-1], - self.sae_signal_names[i], - trig_dir, - targ_dir, + self.sae_meas_objs.append(delay_measure(self.sae_delay_meas_names[i-1], + self.sae_signal_names[i-1], + self.sae_signal_names[i], + trig_dir, + targ_dir, measure_scale=1e9)) - self.sae_meas_objs.append(slew_measure(self.sae_slew_meas_names[i-1], - self.sae_signal_names[i-1], - trig_dir, + self.sae_meas_objs.append(slew_measure(self.sae_slew_meas_names[i-1], + self.sae_signal_names[i-1], + trig_dir, measure_scale=1e9)) temp_dir = trig_dir trig_dir = targ_dir targ_dir = temp_dir - self.sae_meas_objs.append(slew_measure(self.sae_slew_meas_names[-1], - self.sae_signal_names[-1], - trig_dir, + self.sae_meas_objs.append(slew_measure(self.sae_slew_meas_names[-1], + self.sae_signal_names[-1], + trig_dir, measure_scale=1e9)) - + def write_delay_measures(self): """ Write the measure statements to quantify the delay and power results for all targeted ports. @@ -229,12 +229,12 @@ class model_check(delay): # Output some comments to aid where cycles start and what is happening for comment in self.cycle_comments: self.sf.write("* {}\n".format(comment)) - + for read_port in self.targ_read_ports: self.write_measures_read_port(read_port) def get_delay_measure_variants(self, port, measure_obj): - """Get the measurement values that can either vary from simulation to simulation (vdd, address) + """Get the measurement values that can either vary from simulation to simulation (vdd, address) or port to port (time delays)""" #Return value is intended to match the delay measure format: trig_td, targ_td, vdd, port #Assuming only read 0 for now @@ -246,15 +246,15 @@ class model_check(delay): return self.get_power_measure_variants(port, measure_obj, "read") else: debug.error("Measurement not recognized by the model checker.",1) - + def get_power_measure_variants(self, port, power_obj, operation): """Get the measurement values that can either vary port to port (time delays)""" #Return value is intended to match the power measure format: t_initial, t_final, port t_initial = self.cycle_times[self.measure_cycles[port]["read0"]] t_final = self.cycle_times[self.measure_cycles[port]["read0"]+1] - + return (t_initial, t_final, port) - + def write_measures_read_port(self, port): """ Write the measure statements for all nodes along the wordline path. @@ -263,16 +263,16 @@ class model_check(delay): for measure in self.all_measures: measure_variant_inp_tuple = self.get_delay_measure_variants(port, measure) measure.write_measure(self.stim, measure_variant_inp_tuple) - + def get_measurement_values(self, meas_objs, port): """Gets the delays and slews from a specified port from the spice output file and returns them as lists.""" - delay_meas_list = [] + delay_meas_list = [] slew_meas_list = [] power_meas_list=[] for measure in meas_objs: measure_value = measure.retrieve_measure(port=port) if type(measure_value) != float: - debug.error("Failed to Measure Value:\n\t\t{}={}".format(measure.name, measure_value),1) + debug.error("Failed to Measure Value:\n\t\t{}={}".format(measure.name, measure_value),1) if type(measure) is delay_measure: delay_meas_list.append(measure_value) elif type(measure)is slew_measure: @@ -282,7 +282,7 @@ class model_check(delay): else: debug.error("Measurement object not recognized.",1) return delay_meas_list, slew_meas_list,power_meas_list - + def run_delay_simulation(self): """ This tries to simulate a period and checks if the result works. If @@ -291,8 +291,8 @@ class model_check(delay): include leakage of all cells. """ #Sanity Check - debug.check(self.period > 0, "Target simulation period non-positive") - + debug.check(self.period > 0, "Target simulation period non-positive") + wl_delay_result = [[] for i in self.all_ports] wl_slew_result = [[] for i in self.all_ports] sae_delay_result = [[] for i in self.all_ports] @@ -304,44 +304,44 @@ class model_check(delay): self.write_delay_stimulus() self.stim.run_sim() #running sim prodoces spice output file. - + #Retrieve the results from the output file - for port in self.targ_read_ports: + for port in self.targ_read_ports: #Parse and check the voltage measurements wl_delay_result[port], wl_slew_result[port],_ = self.get_measurement_values(self.wl_meas_objs, port) sae_delay_result[port], sae_slew_result[port],_ = self.get_measurement_values(self.sae_meas_objs, port) bl_delay_result[port], bl_slew_result[port],_ = self.get_measurement_values(self.bl_meas_objs, port) _,__,power_result[port] = self.get_measurement_values(self.power_meas_objs, port) return (True,wl_delay_result, sae_delay_result, wl_slew_result, sae_slew_result, bl_delay_result, bl_slew_result, power_result) - + def get_model_delays(self, port): """Get model delays based on port. Currently assumes single RW port.""" return self.sram.control_logic_rw.get_wl_sen_delays() - + def get_num_delay_stages(self): """Gets the number of stages in the delay chain from the control logic""" return len(self.sram.control_logic_rw.replica_bitline.delay_fanout_list) - + def get_num_delay_fanout_list(self): """Gets the number of stages in the delay chain from the control logic""" return self.sram.control_logic_rw.replica_bitline.delay_fanout_list - + def get_num_delay_stage_fanout(self): """Gets fanout in each stage in the delay chain. Assumes each stage is the same""" return self.sram.control_logic_rw.replica_bitline.delay_fanout_list[0] - + def get_num_wl_en_driver_stages(self): """Gets the number of stages in the wl_en driver from the control logic""" return self.sram.control_logic_rw.wl_en_driver.num_stages - + def get_num_sen_driver_stages(self): """Gets the number of stages in the sen driver from the control logic""" return self.sram.control_logic_rw.s_en_driver.num_stages - + def get_num_wl_driver_stages(self): """Gets the number of stages in the wordline driver from the control logic""" - return self.sram.bank.wordline_driver.inv.num_stages - + return self.sram.bank.wordline_driver.inv.num_stages + def scale_delays(self, delay_list): """Takes in a list of measured delays and convert it to simple units to easily compare to model values.""" converted_values = [] @@ -350,12 +350,12 @@ class model_check(delay): for meas_value in delay_list: total+=meas_value average = total/len(delay_list) - + #Convert values for meas_value in delay_list: converted_values.append(meas_value/average) return converted_values - + def min_max_normalization(self, value_list): """Re-scales input values on a range from 0-1 where min(list)=0, max(list)=1""" scaled_values = [] @@ -364,14 +364,14 @@ class model_check(delay): for value in value_list: scaled_values.append((value-average)/(min_max_diff)) return scaled_values - - def calculate_error_l2_norm(self, list_a, list_b): + + def calculate_error_l2_norm(self, list_a, list_b): """Calculates error between two lists using the l2 norm""" error_list = [] for val_a, val_b in zip(list_a, list_b): error_list.append((val_a-val_b)**2) return error_list - + def compare_measured_and_model(self, measured_vals, model_vals): """First scales both inputs into similar ranges and then compares the error between both.""" scaled_meas = self.min_max_normalization(measured_vals) @@ -380,7 +380,7 @@ class model_check(delay): debug.info(1, "Scaled model:\n{}".format(scaled_model)) errors = self.calculate_error_l2_norm(scaled_meas, scaled_model) debug.info(1, "Errors:\n{}\n".format(errors)) - + def analyze(self, probe_address, probe_data, slews, loads, port): """Measures entire delay path along the wordline and sense amp enable and compare it to the model delays.""" self.load=max(loads) @@ -390,7 +390,7 @@ class model_check(delay): self.create_measurement_names(port) self.create_measurement_objects() data_dict = {} - + read_port = self.read_ports[0] #only test the first read port read_port = port self.targ_read_ports = [read_port] @@ -398,33 +398,33 @@ class model_check(delay): debug.info(1,"Model test: corner {}".format(self.corner)) (success, wl_delays, sae_delays, wl_slews, sae_slews, bl_delays, bl_slews, powers)=self.run_delay_simulation() debug.check(success, "Model measurements Failed: period={}".format(self.period)) - + debug.info(1,"Measured Wordline delays (ns):\n\t {}".format(wl_delays[read_port])) debug.info(1,"Measured Wordline slews:\n\t {}".format(wl_slews[read_port])) debug.info(1,"Measured SAE delays (ns):\n\t {}".format(sae_delays[read_port])) debug.info(1,"Measured SAE slews:\n\t {}".format(sae_slews[read_port])) debug.info(1,"Measured Bitline delays (ns):\n\t {}".format(bl_delays[read_port])) - + data_dict[self.wl_meas_name] = wl_delays[read_port] data_dict[self.sae_meas_name] = sae_delays[read_port] data_dict[self.wl_slew_name] = wl_slews[read_port] data_dict[self.sae_slew_name] = sae_slews[read_port] data_dict[self.bl_meas_name] = bl_delays[read_port] data_dict[self.power_name] = powers[read_port] - + if not OPTS.use_tech_delay_chain_size: #Model is not used in this case wl_model_delays, sae_model_delays = self.get_model_delays(read_port) debug.info(1,"Wordline model delays:\n\t {}".format(wl_model_delays)) debug.info(1,"SAE model delays:\n\t {}".format(sae_model_delays)) data_dict[self.wl_model_name] = wl_model_delays data_dict[self.sae_model_name] = sae_model_delays - + #Some evaluations of the model and measured values # debug.info(1, "Comparing wordline measurements and model.") # self.compare_measured_and_model(wl_delays[read_port], wl_model_delays) # debug.info(1, "Comparing SAE measurements and model") # self.compare_measured_and_model(sae_delays[read_port], sae_model_delays) - + return data_dict def get_all_signal_names(self): @@ -438,12 +438,12 @@ class model_check(delay): name_dict[self.bl_meas_name] = self.bitline_meas_names[0:1] name_dict[self.power_name] = self.power_meas_names #name_dict[self.wl_slew_name] = self.wl_slew_meas_names - + if not OPTS.use_tech_delay_chain_size: name_dict[self.wl_model_name] = name_dict["wl_measures"] #model uses same names as measured. name_dict[self.sae_model_name] = name_dict["sae_measures"] - + return name_dict - - - + + + diff --git a/compiler/characterizer/setup_hold.py b/compiler/characterizer/setup_hold.py index 8def076d..377ead67 100644 --- a/compiler/characterizer/setup_hold.py +++ b/compiler/characterizer/setup_hold.py @@ -31,7 +31,7 @@ class setup_hold(): self.set_corner(corner) - + def set_corner(self,corner): """ Set the corner values """ self.corner = corner @@ -60,9 +60,9 @@ class setup_hold(): self.write_clock() - self.write_measures(mode=mode, + self.write_measures(mode=mode, correct_value=correct_value) - + self.stim.write_control(4*self.period) @@ -102,14 +102,14 @@ class setup_hold(): data_values=[init_value, start_value, end_value], period=target_time, slew=self.constrained_input_slew, - setup=0) + setup=0) def write_clock(self): """ Create the clock signal for setup/hold analysis. First period initializes the FF while the second is used for characterization.""" - + self.stim.gen_pwl(sig_name="clk", - # initial clk edge is right after the 0 time to initialize a flop + # initial clk edge is right after the 0 time to initialize a flop # without using .IC on an internal node. # Return input to value after one period. # The second pulse is the characterization one at 2*period @@ -117,7 +117,7 @@ class setup_hold(): data_values=[0, 1, 0, 1], period=2*self.period, slew=self.constrained_input_slew, - setup=0) + setup=0) @@ -154,7 +154,7 @@ class setup_hold(): targ_dir=dout_rise_or_fall, 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 # at one period @@ -167,14 +167,14 @@ class setup_hold(): targ_dir=din_rise_or_fall, trig_td=1.2*self.period, targ_td=1.2*self.period) - + def bidir_search(self, correct_value, mode): """ This will perform a bidirectional search for either setup or hold times. It starts with the feasible priod and looks a half period beyond or before it - depending on whether we are doing setup or hold. + depending on whether we are doing setup or hold. """ # NOTE: The feasible bound is always feasible. This is why they are different for setup and hold. @@ -189,8 +189,8 @@ class setup_hold(): feasible_bound = 2.75*self.period # Initial check if reference feasible bound time passes for correct_value, if not, we can't start the search! - self.write_stimulus(mode=mode, - target_time=feasible_bound, + self.write_stimulus(mode=mode, + target_time=feasible_bound, correct_value=correct_value) self.stim.run_sim() ideal_clk_to_q = convert_to_float(parse_spice_list("timing", "clk2q_delay")) @@ -204,18 +204,18 @@ class setup_hold(): setuphold_time *= -1e9 else: setuphold_time *= 1e9 - + passing_setuphold_time = setuphold_time debug.info(2,"Checked initial {0} time {1}, data at {2}, clock at {3} ".format(mode, setuphold_time, feasible_bound, 2*self.period)) #raw_input("Press Enter to continue...") - + while True: target_time = (feasible_bound + infeasible_bound)/2 - self.write_stimulus(mode=mode, - target_time=target_time, + self.write_stimulus(mode=mode, + target_time=target_time, correct_value=correct_value) debug.info(2,"{0} value: {1} Target time: {2} Infeasible: {3} Feasible: {4}".format(mode, @@ -245,7 +245,7 @@ class setup_hold(): if relative_compare(feasible_bound, infeasible_bound, error_tolerance=0.001): debug.info(3,"CONVERGE {0} vs {1}".format(feasible_bound,infeasible_bound)) break - + debug.info(2,"Converged on {0} time {1}.".format(mode,passing_setuphold_time)) return passing_setuphold_time @@ -261,7 +261,7 @@ class setup_hold(): """Calculates the setup time for high-to-low transition for a DFF """ return self.bidir_search(0, "SETUP") - + def hold_LH_time(self): """Calculates the hold time for low-to-high transition for a DFF """ @@ -283,7 +283,7 @@ class setup_hold(): HL_setup = [] LH_hold = [] HL_hold = [] - + #For debugging, skips characterization and returns dummy values. # i = 1.0 # for self.related_input_slew in related_slews: @@ -293,15 +293,15 @@ class setup_hold(): # LH_hold.append(i+2.0) # HL_hold.append(i+3.0) # i+=4.0 - + # times = {"setup_times_LH": LH_setup, # "setup_times_HL": HL_setup, # "hold_times_LH": LH_hold, # "hold_times_HL": HL_hold # } # return times - - + + for self.related_input_slew in related_slews: for self.constrained_input_slew in constrained_slews: debug.info(1, "Clock slew: {0} Data slew: {1}".format(self.related_input_slew,self.constrained_input_slew)) @@ -317,7 +317,7 @@ class setup_hold(): HL_setup.append(HL_setup_time) LH_hold.append(LH_hold_time) HL_hold.append(HL_hold_time) - + times = {"setup_times_LH": LH_setup, "setup_times_HL": HL_setup, "hold_times_LH": LH_hold, @@ -332,7 +332,7 @@ class setup_hold(): HL_setup = [] LH_hold = [] HL_hold = [] - + for self.related_input_slew in related_slews: for self.constrained_input_slew in constrained_slews: # convert from ps to ns @@ -340,7 +340,7 @@ class setup_hold(): HL_setup.append(tech.spice["dff_setup"]/1e3) LH_hold.append(tech.spice["dff_hold"]/1e3) HL_hold.append(tech.spice["dff_hold"]/1e3) - + times = {"setup_times_LH": LH_setup, "setup_times_HL": HL_setup, "hold_times_LH": LH_hold, diff --git a/compiler/characterizer/simulation.py b/compiler/characterizer/simulation.py index 2edb42bf..af30df9b 100644 --- a/compiler/characterizer/simulation.py +++ b/compiler/characterizer/simulation.py @@ -17,7 +17,7 @@ class simulation(): def __init__(self, sram, spfile, corner): self.sram = sram - + self.name = self.sram.name self.word_size = self.sram.word_size self.addr_size = self.sram.addr_size @@ -28,7 +28,7 @@ class simulation(): else: self.num_spare_cols = self.sram.num_spare_cols self.sp_file = spfile - + self.all_ports = self.sram.all_ports self.readwrite_ports = self.sram.readwrite_ports self.read_ports = self.sram.read_ports @@ -53,7 +53,7 @@ class simulation(): self.v_high = self.vdd_voltage - tech.spice["nom_threshold"] self.v_low = tech.spice["nom_threshold"] self.gnd_voltage = 0 - + def create_signal_names(self): self.addr_name = "a" self.din_name = "din" @@ -66,12 +66,12 @@ class simulation(): "Number of pins generated for characterization \ do not match pins of SRAM\nsram.pins = {0}\npin_names = {1}".format(self.sram.pins, self.pins)) - + def set_stimulus_variables(self): # Clock signals self.cycle_times = [] self.t_current = 0 - + # control signals: only one cs_b for entire multiported sram, one we_b for each write port self.csb_values = {port: [] for port in self.all_ports} self.web_values = {port: [] for port in self.readwrite_ports} @@ -81,13 +81,13 @@ class simulation(): self.data_value = {port: [] for port in self.write_ports} self.wmask_value = {port: [] for port in self.write_ports} self.spare_wen_value = {port: [] for port in self.write_ports} - + # Three dimensional list to handle each addr and data bits for each port over the number of checks self.addr_values = {port: [[] for bit in range(self.addr_size)] for port in self.all_ports} self.data_values = {port: [[] for bit in range(self.word_size + self.num_spare_cols)] for port in self.write_ports} self.wmask_values = {port: [[] for bit in range(self.num_wmasks)] for port in self.write_ports} self.spare_wen_values = {port: [[] for bit in range(self.num_spare_cols)] for port in self.write_ports} - + # For generating comments in SPICE stimulus self.cycle_comments = [] self.fn_cycle_comments = [] @@ -104,13 +104,13 @@ class simulation(): web_val = 0 elif op != "noop": debug.error("Could not add control signals for port {0}. Command {1} not recognized".format(port, op), 1) - + # Append the values depending on the type of port self.csb_values[port].append(csb_val) # If port is in both lists, add rw control signal. Condition indicates its a RW port. if port in self.readwrite_ports: self.web_values[port].append(web_val) - + def add_data(self, data, port): """ Add the array of data values """ debug.check(len(data)==(self.word_size + self.num_spare_cols), "Invalid data word size.") @@ -129,7 +129,7 @@ class simulation(): def add_address(self, address, port): """ Add the array of address values """ debug.check(len(address)==self.addr_size, "Invalid address size.") - + self.addr_value[port].append(address) bit = self.addr_size - 1 for c in address: @@ -170,7 +170,7 @@ class simulation(): else: debug.error("Non-binary spare enable signal string", 1) bit -= 1 - + def add_write(self, comment, address, data, wmask, port): """ Add the control values for a write cycle. """ debug.check(port in self.write_ports, @@ -182,18 +182,18 @@ class simulation(): self.cycle_times.append(self.t_current) self.t_current += self.period - + self.add_control_one_port(port, "write") self.add_data(data, port) self.add_address(address, port) - self.add_wmask(wmask, port) + self.add_wmask(wmask, port) self.add_spare_wen("1" * self.num_spare_cols, port) - + #Add noops to all other ports. for unselected_port in self.all_ports: if unselected_port != port: self.add_noop_one_port(unselected_port) - + def add_read(self, comment, address, port): """ Add the control values for a read cycle. """ debug.check(port in self.read_ports, @@ -206,8 +206,8 @@ class simulation(): self.cycle_times.append(self.t_current) self.t_current += self.period self.add_control_one_port(port, "read") - self.add_address(address, port) - + self.add_address(address, port) + # If the port is also a readwrite then add # the same value as previous cycle if port in self.write_ports: @@ -220,7 +220,7 @@ class simulation(): except: self.add_wmask("0" * self.num_wmasks, port) self.add_spare_wen("0" * self.num_spare_cols, port) - + #Add noops to all other ports. for unselected_port in self.all_ports: if unselected_port != port: @@ -234,7 +234,7 @@ class simulation(): self.cycle_times.append(self.t_current) self.t_current += self.period - + for port in self.all_ports: self.add_noop_one_port(port) @@ -251,7 +251,7 @@ class simulation(): self.add_address(address, port) self.add_wmask(wmask, port) self.add_spare_wen("1" * self.num_spare_cols, port) - + def add_read_one_port(self, comment, address, port): """ Add the control values for a read cycle. Does not increment the period. """ debug.check(port in self.read_ports, @@ -259,7 +259,7 @@ class simulation(): self.read_ports)) debug.info(2, comment) self.fn_cycle_comments.append(comment) - + self.add_control_one_port(port, "read") self.add_address(address, port) @@ -275,16 +275,16 @@ class simulation(): except: self.add_wmask("0" * self.num_wmasks, port) self.add_spare_wen("0" * self.num_spare_cols, port) - + def add_noop_one_port(self, port): - """ Add the control values for a noop to a single port. Does not increment the period. """ + """ Add the control values for a noop to a single port. Does not increment the period. """ self.add_control_one_port(port, "noop") - + try: self.add_address(self.addr_value[port][-1], port) except: self.add_address("0" * self.addr_size, port) - + # If the port is also a readwrite then add # the same value as previous cycle if port in self.write_ports: @@ -297,7 +297,7 @@ class simulation(): except: self.add_wmask("0" * self.num_wmasks, port) self.add_spare_wen("0" * self.num_spare_cols, port) - + def add_noop_clock_one_port(self, port): """ Add the control values for a noop to a single port. Increments the period. """ debug.info(2, 'Clock only on port {}'.format(port)) @@ -324,7 +324,7 @@ class simulation(): time, time_spacing, comment)) - + def gen_cycle_comment(self, op, word, addr, wmask, port, t_current): if op == "noop": str = "\tIdle during cycle {0} ({1}ns - {2}ns)" @@ -355,22 +355,22 @@ class simulation(): int(t_current / self.period), t_current, t_current + self.period) - + return comment - + def gen_pin_names(self, port_signal_names, port_info, abits, dbits): """Creates the pins names of the SRAM based on the no. of ports.""" - # This may seem redundant as the pin names are already defined in the sram. However, it is difficult - # to extract the functionality from the names, so they are recreated. As the order is static, changing + # This may seem redundant as the pin names are already defined in the sram. However, it is difficult + # to extract the functionality from the names, so they are recreated. As the order is static, changing # the order of the pin names will cause issues here. pin_names = [] (addr_name, din_name, dout_name) = port_signal_names (total_ports, write_index, read_index) = port_info - + for write_input in write_index: for i in range(dbits): pin_names.append("{0}{1}_{2}".format(din_name, write_input, i)) - + for port in range(total_ports): for i in range(abits): pin_names.append("{0}{1}_{2}".format(addr_name, port, i)) @@ -389,25 +389,25 @@ class simulation(): for port in write_index: for bit in range(self.num_wmasks): pin_names.append("WMASK{0}_{1}".format(port, bit)) - + if self.num_spare_cols: for port in write_index: for bit in range(self.num_spare_cols): pin_names.append("SPARE_WEN{0}_{1}".format(port, bit)) - + for read_output in read_index: for i in range(dbits): pin_names.append("{0}{1}_{2}".format(dout_name, read_output, i)) - + pin_names.append("{0}".format("vdd")) pin_names.append("{0}".format("gnd")) return pin_names - + def add_graph_exclusions(self): """ Exclude portions of SRAM from timing graph which are not relevant """ - + # other initializations can only be done during analysis when a bit has been selected # for testing. self.sram.bank.graph_exclude_precharge() @@ -415,29 +415,29 @@ class simulation(): self.sram.graph_exclude_data_dff() self.sram.graph_exclude_ctrl_dffs() self.sram.bank.bitcell_array.graph_exclude_replica_col_bits() - + def set_internal_spice_names(self): """ Sets important names for characterization such as Sense amp enable and internal bit nets. """ - + port = self.read_ports[0] if not OPTS.use_pex: self.graph.get_all_paths('{}{}'.format("clk", port), '{}{}_{}'.format(self.dout_name, port, self.probe_data)) - + sen_with_port = self.get_sen_name(self.graph.all_paths) if sen_with_port.endswith(str(port)): self.sen_name = sen_with_port[:-len(str(port))] else: self.sen_name = sen_with_port debug.warning("Error occurred while determining SEN name. Can cause faults in simulation.") - + debug.info(2, "s_en name = {}".format(self.sen_name)) - + bl_name_port, br_name_port = self.get_bl_name(self.graph.all_paths, port) port_pos = -1 - len(str(self.probe_data)) - len(str(port)) - + if bl_name_port.endswith(str(port) + "_" + str(self.probe_data)): self.bl_name = bl_name_port[:port_pos] + "{}" + bl_name_port[port_pos + len(str(port)):] elif not bl_name_port[port_pos].isdigit(): # single port SRAM case, bl will not be numbered eg bl_0 @@ -445,7 +445,7 @@ class simulation(): else: self.bl_name = bl_name_port debug.warning("Error occurred while determining bitline names. Can cause faults in simulation.") - + if br_name_port.endswith(str(port) + "_" + str(self.probe_data)): self.br_name = br_name_port[:port_pos] + "{}" + br_name_port[port_pos + len(str(port)):] elif not br_name_port[port_pos].isdigit(): # single port SRAM case, bl will not be numbered eg bl_0 @@ -457,22 +457,22 @@ class simulation(): else: self.graph.get_all_paths('{}{}'.format("clk", port), '{}{}_{}'.format(self.dout_name, port, self.probe_data)) - + self.sen_name = self.get_sen_name(self.graph.all_paths) debug.info(2, "s_en name = {}".format(self.sen_name)) - + self.bl_name = "bl{0}_{1}".format(port, OPTS.word_size - 1) self.br_name = "br{0}_{1}".format(port, OPTS.word_size - 1) debug.info(2, "bl name={}, br name={}".format(self.bl_name, self.br_name)) - + def get_sen_name(self, paths, assumed_port=None): """ Gets the signal name associated with the sense amp enable from input paths. Only expects a single path to contain the sen signal name. """ - + sa_mods = factory.get_mods(OPTS.sense_amp) - # Any sense amp instantiated should be identical, any change to that + # Any sense amp instantiated should be identical, any change to that # will require some identification to determine the mod desired. debug.check(len(sa_mods) == 1, "Only expected one type of Sense Amp. Cannot perform s_en checks.") enable_name = sa_mods[0].get_enable_name() @@ -480,15 +480,15 @@ class simulation(): if OPTS.use_pex: sen_name = sen_name.split('.')[-1] return sen_name - + def create_graph(self): """ Creates timing graph to generate the timing paths for the SRAM output. """ - + self.sram.clear_exclude_bits() # Removes previous bit exclusions self.sram.graph_exclude_bits(self.wordline_row, self.bitline_column) - + # Generate new graph every analysis as edges might change depending on test bit self.graph = graph_util.timing_graph() self.sram_instance_name = "X{}".format(self.sram.name) @@ -498,14 +498,14 @@ class simulation(): """ Gets the mods as a set which should be excluded while searching for name. """ - + # Exclude the RBL as it contains bitcells which are not in the main bitcell array # so it makes the search awkward return set(factory.get_mods(OPTS.replica_bitline)) - + def get_alias_in_path(self, paths, internal_net, mod, exclusion_set=None): """ - Finds a single alias for the internal_net in given paths. + Finds a single alias for the internal_net in given paths. More or less hits cause an error """ net_found = False @@ -520,7 +520,7 @@ class simulation(): net_found = True if not net_found: debug.error("Could not find {} net in timing paths.".format(internal_net), 1) - + return path_net_name def get_bl_name(self, paths, port): @@ -530,7 +530,7 @@ class simulation(): cell_mod = factory.create(module_type=OPTS.bitcell) cell_bl = cell_mod.get_bl_name(port) cell_br = cell_mod.get_br_name(port) - + bl_names = [] exclude_set = self.get_bl_name_search_exclusions() for int_net in [cell_bl, cell_br]: @@ -540,5 +540,5 @@ class simulation(): bl_names[i] = bl_names[i].split('.')[-1] return bl_names[0], bl_names[1] - - + + diff --git a/compiler/characterizer/stimuli.py b/compiler/characterizer/stimuli.py index 0c528365..a312fc6d 100644 --- a/compiler/characterizer/stimuli.py +++ b/compiler/characterizer/stimuli.py @@ -31,7 +31,7 @@ class stimuli(): self.tx_length = tech.drc["minlength_channel"] self.sf = stim_file - + (self.process, self.voltage, self.temperature) = corner found = False self.device_libraries = [] @@ -48,10 +48,10 @@ class stimuli(): pass if not found: debug.error("Must define either fet_libraries or fet_models.", -1) - + def inst_model(self, pins, model_name): """ Function to instantiate a generic model with a set of pins """ - + if OPTS.use_pex: self.inst_pex_model(pins, model_name) else: @@ -59,7 +59,7 @@ class stimuli(): for pin in pins: self.sf.write("{0} ".format(pin)) self.sf.write("{0}\n".format(model_name)) - + def inst_pex_model(self, pins, model_name): self.sf.write("X{0} ".format(model_name)) for pin in pins: @@ -99,7 +99,7 @@ class stimuli(): def create_buffer(self, buffer_name, size=[1, 3], beta=2.5): """ Generates buffer for top level signals (only for sim - purposes). Size is pair for PMOS, NMOS width multiple. + purposes). Size is pair for PMOS, NMOS width multiple. """ self.sf.write(".SUBCKT test_{2} in out {0} {1}\n".format(self.vdd_name, @@ -124,23 +124,23 @@ class stimuli(): self.sf.write(".ENDS test_{0}\n\n".format(buffer_name)) def gen_pulse(self, sig_name, v1, v2, offset, period, t_rise, t_fall): - """ + """ Generates a periodic signal with 50% duty cycle and slew rates. Period is measured from 50% to 50%. """ self.sf.write("* PULSE: period={0}\n".format(period)) pulse_string="V{0} {0} 0 PULSE ({1} {2} {3}n {4}n {5}n {6}n {7}n)\n" - self.sf.write(pulse_string.format(sig_name, + self.sf.write(pulse_string.format(sig_name, v1, v2, offset, t_rise, - t_fall, + t_fall, 0.5*period-0.5*t_rise-0.5*t_fall, period)) def gen_pwl(self, sig_name, clk_times, data_values, period, slew, setup): - """ + """ Generate a PWL stimulus given a signal name and data values at each period. Automatically creates slews and ensures each data occurs a setup before the clock edge. The first clk_time should be 0 and is the initial time that corresponds @@ -152,7 +152,7 @@ class stimuli(): str.format(len(clk_times), len(data_values), sig_name)) - + # shift signal times earlier for setup time times = np.array(clk_times) - setup * period values = np.array(data_values) * self.voltage @@ -185,7 +185,7 @@ class stimuli(): return 1 else: debug.error("Invalid value to get an inverse of: {0}".format(value)) - + def gen_meas_delay(self, 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={4}n TARG v({5}) VAL={6} {7}=1 TD={8}n\n\n" @@ -198,7 +198,7 @@ class stimuli(): targ_val, targ_dir, targ_td)) - + def gen_meas_find_voltage(self, meas_name, trig_name, targ_name, trig_val, trig_dir, trig_td): """ Creates the .meas statement for the measurement of delay """ measure_string=".meas tran {0} FIND v({1}) WHEN v({2})={3}v {4}=1 TD={5}n \n\n" @@ -208,7 +208,7 @@ class stimuli(): trig_val, trig_dir, trig_td)) - + def gen_meas_find_voltage_at_time(self, meas_name, targ_name, time_at): """ Creates the .meas statement for voltage at time""" measure_string=".meas tran {0} FIND v({1}) AT={2}n \n\n" @@ -227,15 +227,15 @@ class stimuli(): power_exp, t_initial, t_final)) - + def gen_meas_value(self, meas_name, dout, t_intital, t_final): measure_string=".meas tran {0} AVG v({1}) FROM={2}n TO={3}n\n\n".format(meas_name, dout, t_intital, t_final) self.sf.write(measure_string) def write_control(self, end_time, runlvl=4): """ Write the control cards to run and end the simulation """ - - # These are guesses... + + # These are guesses... if runlvl==1: reltol = 0.02 # 2% elif runlvl==2: @@ -245,7 +245,7 @@ class stimuli(): else: reltol = 0.001 # 0.1% timestep = 10 # ps, was 5ps but ngspice was complaining the timestep was too small in certain tests. - + # UIC is needed for ngspice to converge self.sf.write(".TRAN {0}p {1}n UIC\n".format(timestep, end_time)) self.sf.write(".TEMP {}\n".format(self.temperature)) @@ -281,9 +281,9 @@ class stimuli(): self.sf.write(".lib \"{0}\" {1}\n".format(item[0], item[1])) else: debug.error("Could not find spice library: {0}\nSet SPICE_MODEL_DIR to over-ride path.\n".format(item[0])) - + includes = self.device_models + [circuit] - + for item in list(includes): if os.path.isfile(item): self.sf.write(".include \"{0}\"\n".format(item)) @@ -305,7 +305,7 @@ class stimuli(): import datetime start_time = datetime.datetime.now() debug.check(OPTS.spice_exe != "", "No spice simulator has been found.") - + 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") @@ -340,13 +340,13 @@ class stimuli(): spice_stdout = open("{0}spice_stdout.log".format(OPTS.openram_temp), 'w') spice_stderr = open("{0}spice_stderr.log".format(OPTS.openram_temp), 'w') - + debug.info(3, cmd) retcode = subprocess.call(cmd, stdout=spice_stdout, stderr=spice_stderr, shell=True) spice_stdout.close() spice_stderr.close() - + if (retcode > valid_retcode): debug.error("Spice simulation error: " + cmd, -1) else: @@ -354,4 +354,4 @@ class stimuli(): delta_time = round((end_time - start_time).total_seconds(), 1) debug.info(2, "*** Spice: {} seconds".format(delta_time)) - + diff --git a/compiler/characterizer/trim_spice.py b/compiler/characterizer/trim_spice.py index d20dfe42..11c1216f 100644 --- a/compiler/characterizer/trim_spice.py +++ b/compiler/characterizer/trim_spice.py @@ -11,33 +11,33 @@ import re class trim_spice(): """ - A utility to trim redundant parts of an SRAM spice netlist. + A utility to trim redundant parts of an SRAM spice netlist. Input is an SRAM spice file. Output is an equivalent netlist that works for a single address and range of data bits. """ def __init__(self, spfile, reduced_spfile): self.sp_file = spfile - self.reduced_spfile = reduced_spfile + self.reduced_spfile = reduced_spfile debug.info(1,"Trimming non-critical cells to speed-up characterization: {}.".format(reduced_spfile)) - + # Load the file into a buffer for performance sp = open(self.sp_file, "r") self.spice = sp.readlines() sp.close() for i in range(len(self.spice)): self.spice[i] = self.spice[i].rstrip(" \n") - + self.sp_buffer = self.spice def set_configuration(self, banks, rows, columns, word_size): """ Set the configuration of SRAM sizes that we are simulating. - Need the: number of banks, number of rows in each bank, number of + Need the: number of banks, number of rows in each bank, number of columns in each bank, and data word size.""" self.num_banks = banks - self.num_rows = rows + self.num_rows = rows self.num_columns = columns self.word_size = word_size @@ -80,8 +80,8 @@ class trim_spice(): 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.") - - + + wl_regex = r"wl\d*_{}".format(wl_address) bl_regex = r"bl\d*_{}".format(int(self.words_per_row*data_bit + col_address)) self.remove_insts("bitcell_array",[wl_regex,bl_regex]) @@ -92,7 +92,7 @@ class trim_spice(): # 3. Keep column muxes basd on BL self.remove_insts("column_mux_array",[bl_regex]) - + # 4. Keep write driver based on DATA data_regex = r"data_{}".format(data_bit) self.remove_insts("write_driver_array",[data_regex]) @@ -100,18 +100,18 @@ class trim_spice(): # 5. Keep wordline driver based on WL # Need to keep the gater too #self.remove_insts("wordline_driver",wl_regex) - + # 6. Keep precharges based on BL self.remove_insts("precharge_array",[bl_regex]) - + # Everything else isn't worth removing. :) - + # Finally, write out the buffer as the new reduced file sp = open(self.reduced_spfile, "w") sp.write("\n".join(self.sp_buffer)) sp.close() - + def remove_insts(self, subckt_name, keep_inst_list): """This will remove all of the instances in the list from the named subckt that DO NOT contain a term in the list. It just does a @@ -121,7 +121,7 @@ class trim_spice(): removed_insts = 0 #Expects keep_inst_list are regex patterns. Compile them here. compiled_patterns = [re.compile(pattern) for pattern in keep_inst_list] - + start_name = ".SUBCKT {}".format(subckt_name) end_name = ".ENDS {}".format(subckt_name) diff --git a/compiler/custom/and2_dec.py b/compiler/custom/and2_dec.py index e6f314c4..258ad0c7 100644 --- a/compiler/custom/and2_dec.py +++ b/compiler/custom/and2_dec.py @@ -18,18 +18,18 @@ class and2_dec(design.design): This is an AND with configurable drive strength. """ def __init__(self, name, size=1, height=None, add_wells=True): - + design.design.__init__(self, name) - + debug.info(1, "Creating and2_dec {}".format(name)) self.add_comment("size: {}".format(size)) self.size = size self.height = height - + self.create_netlist() if not OPTS.netlist_only: self.create_layout() - + def create_netlist(self): self.add_pins() self.create_modules() @@ -38,14 +38,14 @@ class and2_dec(design.design): def create_modules(self): self.nand = factory.create(module_type="nand2_dec", height=self.height) - + self.inv = factory.create(module_type="inv_dec", height=self.height, size=self.size) - + self.add_mod(self.nand) self.add_mod(self.inv) - + def create_layout(self): if "li" in layer: @@ -54,14 +54,14 @@ class and2_dec(design.design): self.route_layer = "m1" self.width = self.nand.width + self.inv.width self.height = self.nand.height - + self.place_insts() self.add_wires() self.add_layout_pins() self.route_supply_rails() self.add_boundary() self.DRC_LVS() - + def add_pins(self): self.add_pin("A", "INPUT") self.add_pin("B", "INPUT") @@ -73,7 +73,7 @@ class and2_dec(design.design): self.nand_inst = self.add_inst(name="pand2_dec_nand", mod=self.nand) self.connect_inst(["A", "B", "zb_int", "vdd", "gnd"]) - + self.inv_inst = self.add_inst(name="pand2_dec_inv", mod=self.inv) self.connect_inst(["zb_int", "Z", "vdd", "gnd"]) @@ -100,7 +100,7 @@ class and2_dec(design.design): layer=self.route_layer, offset=vector(0.5 * self.width, self.height), width=self.width) - + def add_wires(self): # nand Z to inv A z1_pin = self.nand_inst.get_pin("Z") @@ -111,7 +111,7 @@ class and2_dec(design.design): mid1_point = vector(z1_pin.cx(), a2_pin.cy()) self.add_path(self.route_layer, [z1_pin.center(), mid1_point, a2_pin.center()]) - + def add_layout_pins(self): pin = self.inv_inst.get_pin("Z") self.add_layout_pin_rect_center(text="Z", @@ -127,7 +127,7 @@ class and2_dec(design.design): offset=pin.center(), width=pin.width(), height=pin.height()) - + def get_stage_efforts(self, external_cout, inp_is_rise=False): """Get the stage efforts of the A or B -> Z path""" stage_effort_list = [] @@ -135,13 +135,13 @@ class and2_dec(design.design): stage1 = self.nand.get_stage_effort(stage1_cout, inp_is_rise) stage_effort_list.append(stage1) last_stage_is_rise = stage1.is_rise - + stage2 = self.inv.get_stage_effort(external_cout, last_stage_is_rise) stage_effort_list.append(stage2) - + return stage_effort_list def get_cin(self): """Return the relative input capacitance of a single input""" return self.nand.get_cin() - + diff --git a/compiler/custom/and3_dec.py b/compiler/custom/and3_dec.py index 207d545b..af8a1419 100644 --- a/compiler/custom/and3_dec.py +++ b/compiler/custom/and3_dec.py @@ -23,7 +23,7 @@ class and3_dec(design.design): self.add_comment("size: {}".format(size)) self.size = size self.height = height - + self.create_netlist() if not OPTS.netlist_only: self.create_layout() @@ -52,14 +52,14 @@ class and3_dec(design.design): self.width = self.nand.width + self.inv.width self.height = self.nand.height - + self.place_insts() self.add_wires() self.add_layout_pins() self.route_supply_rails() self.add_boundary() self.DRC_LVS() - + def add_pins(self): self.add_pin("A", "INPUT") self.add_pin("B", "INPUT") @@ -72,7 +72,7 @@ class and3_dec(design.design): self.nand_inst = self.add_inst(name="pand3_dec_nand", mod=self.nand) self.connect_inst(["A", "B", "C", "zb_int", "vdd", "gnd"]) - + self.inv_inst = self.add_inst(name="pand3_dec_inv", mod=self.inv) self.connect_inst(["zb_int", "Z", "vdd", "gnd"]) @@ -99,7 +99,7 @@ class and3_dec(design.design): layer=self.route_layer, offset=vector(0.5 * self.width, self.height), width=self.width) - + def add_wires(self): # nand Z to inv A z1_pin = self.nand_inst.get_pin("Z") @@ -136,7 +136,7 @@ class and3_dec(design.design): slew=nand_delay.slew, load=load) return nand_delay + inv_delay - + def get_stage_efforts(self, external_cout, inp_is_rise=False): """Get the stage efforts of the A or B -> Z path""" stage_effort_list = [] @@ -144,13 +144,13 @@ class and3_dec(design.design): stage1 = self.nand.get_stage_effort(stage1_cout, inp_is_rise) stage_effort_list.append(stage1) last_stage_is_rise = stage1.is_rise - + stage2 = self.inv.get_stage_effort(external_cout, last_stage_is_rise) stage_effort_list.append(stage2) - + return stage_effort_list def get_cin(self): """Return the relative input capacitance of a single input""" return self.nand.get_cin() - + diff --git a/compiler/custom/and4_dec.py b/compiler/custom/and4_dec.py index 211e4ce4..e7a8446e 100644 --- a/compiler/custom/and4_dec.py +++ b/compiler/custom/and4_dec.py @@ -18,14 +18,14 @@ class and4_dec(design.design): This is an AND with configurable drive strength. """ def __init__(self, name, size=1, height=None, add_wells=True): - + design.design.__init__(self, name) - + debug.info(1, "Creating and4_dec {}".format(name)) self.add_comment("size: {}".format(size)) self.size = size self.height = height - + self.create_netlist() if not OPTS.netlist_only: self.create_layout() @@ -61,7 +61,7 @@ class and4_dec(design.design): self.route_supply_rails() self.add_boundary() self.DRC_LVS() - + def add_pins(self): self.add_pin("A", "INPUT") self.add_pin("B", "INPUT") @@ -75,7 +75,7 @@ class and4_dec(design.design): self.nand_inst = self.add_inst(name="pand4_dec_nand", mod=self.nand) self.connect_inst(["A", "B", "C", "D", "zb_int", "vdd", "gnd"]) - + self.inv_inst = self.add_inst(name="pand4_dec_inv", mod=self.inv) self.connect_inst(["zb_int", "Z", "vdd", "gnd"]) @@ -102,7 +102,7 @@ class and4_dec(design.design): layer=self.route_layer, offset=vector(0.5 * self.width, self.height), width=self.width) - + def add_wires(self): # nand Z to inv A z1_pin = self.nand_inst.get_pin("Z") @@ -139,7 +139,7 @@ class and4_dec(design.design): slew=nand_delay.slew, load=load) return nand_delay + inv_delay - + def get_stage_efforts(self, external_cout, inp_is_rise=False): """Get the stage efforts of the A or B -> Z path""" stage_effort_list = [] @@ -147,13 +147,13 @@ class and4_dec(design.design): stage1 = self.nand.get_stage_effort(stage1_cout, inp_is_rise) stage_effort_list.append(stage1) last_stage_is_rise = stage1.is_rise - + stage2 = self.inv.get_stage_effort(external_cout, last_stage_is_rise) stage_effort_list.append(stage2) - + return stage_effort_list def get_cin(self): """Return the relative input capacitance of a single input""" return self.nand.get_cin() - + diff --git a/compiler/custom/dff.py b/compiler/custom/dff.py index 07f7e990..c05c47ff 100644 --- a/compiler/custom/dff.py +++ b/compiler/custom/dff.py @@ -24,42 +24,42 @@ class dff(design.design): type_list = props.dff.custom_type_list clk_pin = props.dff.clk_pin cell_size_layer = "boundary" - + def __init__(self, name="dff"): design.design.__init__(self, name) (width, height) = utils.get_libcell_size(name, GDS["unit"], layer[self.cell_size_layer]) - + pin_map = utils.get_libcell_pins(self.pin_names, name, GDS["unit"]) - + self.width = width self.height = height self.pin_map = pin_map self.add_pin_types(self.type_list) - + def analytical_power(self, corner, load): """Returns dynamic and leakage power. Results in nW""" c_eff = self.calculate_effective_capacitance(load) freq = spice["default_event_frequency"] power_dyn = self.calc_dynamic_power(corner, c_eff, freq) power_leak = spice["dff_leakage"] - + total_power = self.return_power(power_dyn, power_leak) return total_power - + def calculate_effective_capacitance(self, load): """Computes effective capacitance. Results in fF""" from tech import parameter c_load = load c_para = spice["dff_out_cap"]#ff transition_prob = 0.5 - return transition_prob*(c_load + c_para) + return transition_prob*(c_load + c_para) def build_graph(self, graph, inst_name, port_nets): """Adds edges based on inputs/outputs. Overrides base class function.""" self.add_graph_edges(graph, port_nets) - + diff --git a/compiler/custom/inv_dec.py b/compiler/custom/inv_dec.py index 46138edd..4fb76f7f 100644 --- a/compiler/custom/inv_dec.py +++ b/compiler/custom/inv_dec.py @@ -16,18 +16,18 @@ class inv_dec(design.design): """ INV for address decoders. """ - + pin_names = ["A", "Z", "vdd", "gnd"] type_list = ["INPUT", "OUTPUT", "POWER", "GROUND"] cell_size_layer = "boundary" - + def __init__(self, name="inv_dec", height=None): design.design.__init__(self, name) (width, height) = utils.get_libcell_size(name, GDS["unit"], layer[self.cell_size_layer]) - + pin_map = utils.get_libcell_pins(self.pin_names, name, GDS["unit"]) @@ -43,10 +43,10 @@ class inv_dec(design.design): freq = spice["default_event_frequency"] power_dyn = self.calc_dynamic_power(corner, c_eff, freq) power_leak = spice["inv_leakage"] - + total_power = self.return_power(power_dyn, power_leak) return total_power - + def calculate_effective_capacitance(self, load): """Computes effective capacitance. Results in fF""" c_load = load @@ -61,7 +61,7 @@ class inv_dec(design.design): units relative to the minimum width of a transistor """ return self.nmos_size + self.pmos_size - + def get_stage_effort(self, cout, inp_is_rise=True): """ Returns an object representing the parameters for delay in tau units. diff --git a/compiler/custom/nand2_dec.py b/compiler/custom/nand2_dec.py index a9a1a7c0..8a72bc5d 100644 --- a/compiler/custom/nand2_dec.py +++ b/compiler/custom/nand2_dec.py @@ -15,18 +15,18 @@ class nand2_dec(design.design): """ 2-input NAND decoder for address decoders. """ - + pin_names = ["A", "B", "Z", "vdd", "gnd"] type_list = ["INPUT", "INPUT", "OUTPUT", "POWER", "GROUND"] cell_size_layer = "boundary" - + def __init__(self, name="nand2_dec", height=None): design.design.__init__(self, name) (width, height) = utils.get_libcell_size(name, GDS["unit"], layer[self.cell_size_layer]) - + pin_map = utils.get_libcell_pins(self.pin_names, name, GDS["unit"]) @@ -43,17 +43,17 @@ class nand2_dec(design.design): self.pmos_size = parameter["beta"] * size self.nmos_width = self.nmos_size * drc("minwidth_tx") self.pmos_width = self.pmos_size * drc("minwidth_tx") - + def analytical_power(self, corner, load): """Returns dynamic and leakage power. Results in nW""" c_eff = self.calculate_effective_capacitance(load) freq = spice["default_event_frequency"] power_dyn = self.calc_dynamic_power(corner, c_eff, freq) power_leak = spice["nand2_leakage"] - + total_power = self.return_power(power_dyn, power_leak) return total_power - + def calculate_effective_capacitance(self, load): """Computes effective capacitance. Results in fF""" c_load = load @@ -65,7 +65,7 @@ class nand2_dec(design.design): def input_load(self): """Return the relative input capacitance of a single input""" return self.nmos_size + self.pmos_size - + def get_stage_effort(self, cout, inp_is_rise=True): """ Returns an object representing the parameters for delay in tau units. @@ -86,4 +86,4 @@ class nand2_dec(design.design): Overrides base class function. """ self.add_graph_edges(graph, port_nets) - + diff --git a/compiler/custom/nand3_dec.py b/compiler/custom/nand3_dec.py index 3b19b35f..621626fc 100644 --- a/compiler/custom/nand3_dec.py +++ b/compiler/custom/nand3_dec.py @@ -15,18 +15,18 @@ class nand3_dec(design.design): """ 3-input NAND decoder for address decoders. """ - + pin_names = ["A", "B", "C", "Z", "vdd", "gnd"] type_list = ["INPUT", "INPUT", "INPUT", "OUTPUT", "POWER", "GROUND"] cell_size_layer = "boundary" - + def __init__(self, name="nand3_dec", height=None): design.design.__init__(self, name) (width, height) = utils.get_libcell_size(name, GDS["unit"], layer[self.cell_size_layer]) - + pin_map = utils.get_libcell_pins(self.pin_names, name, GDS["unit"]) @@ -43,17 +43,17 @@ class nand3_dec(design.design): self.pmos_size = parameter["beta"] * size self.nmos_width = self.nmos_size * drc("minwidth_tx") self.pmos_width = self.pmos_size * drc("minwidth_tx") - + def analytical_power(self, corner, load): """Returns dynamic and leakage power. Results in nW""" c_eff = self.calculate_effective_capacitance(load) freq = spice["default_event_frequency"] power_dyn = self.calc_dynamic_power(corner, c_eff, freq) power_leak = spice["nand3_leakage"] - + total_power = self.return_power(power_dyn, power_leak) return total_power - + def calculate_effective_capacitance(self, load): """Computes effective capacitance. Results in fF""" c_load = load @@ -65,7 +65,7 @@ class nand3_dec(design.design): def input_load(self): """Return the relative input capacitance of a single input""" return self.nmos_size + self.pmos_size - + def get_stage_effort(self, cout, inp_is_rise=True): """ Returns an object representing the parameters for delay in tau units. @@ -86,4 +86,4 @@ class nand3_dec(design.design): Overrides base class function. """ self.add_graph_edges(graph, port_nets) - + diff --git a/compiler/custom/nand4_dec.py b/compiler/custom/nand4_dec.py index da575fd5..c63239e8 100644 --- a/compiler/custom/nand4_dec.py +++ b/compiler/custom/nand4_dec.py @@ -15,22 +15,22 @@ class nand4_dec(design.design): """ 2-input NAND decoder for address decoders. """ - + pin_names = ["A", "B", "C", "D", "Z", "vdd", "gnd"] type_list = ["INPUT", "INPUT", "INPUT", "INPUT", "OUTPUT", "POWER", "GROUND"] cell_size_layer = "boundary" - + def __init__(self, name="nand4_dec", height=None): design.design.__init__(self, name) (width, height) = utils.get_libcell_size(name, GDS["unit"], layer[self.cell_size_layer]) - + pin_map = utils.get_libcell_pins(self.pin_names, name, GDS["unit"]) - + self.width = width self.height = height self.pin_map = pin_map @@ -43,17 +43,17 @@ class nand4_dec(design.design): self.pmos_size = parameter["beta"] * size self.nmos_width = self.nmos_size * drc("minwidth_tx") self.pmos_width = self.pmos_size * drc("minwidth_tx") - + def analytical_power(self, corner, load): """Returns dynamic and leakage power. Results in nW""" c_eff = self.calculate_effective_capacitance(load) freq = spice["default_event_frequency"] power_dyn = self.calc_dynamic_power(corner, c_eff, freq) power_leak = spice["nand4_leakage"] - + total_power = self.return_power(power_dyn, power_leak) return total_power - + def calculate_effective_capacitance(self, load): """Computes effective capacitance. Results in fF""" c_load = load @@ -65,7 +65,7 @@ class nand4_dec(design.design): def input_load(self): """Return the relative input capacitance of a single input""" return self.nmos_size + self.pmos_size - + def get_stage_effort(self, cout, inp_is_rise=True): """ Returns an object representing the parameters for delay in tau units. @@ -86,4 +86,4 @@ class nand4_dec(design.design): Overrides base class function. """ self.add_graph_edges(graph, port_nets) - + diff --git a/compiler/custom/tri_gate.py b/compiler/custom/tri_gate.py index bc59fa1c..81c7816f 100644 --- a/compiler/custom/tri_gate.py +++ b/compiler/custom/tri_gate.py @@ -15,7 +15,7 @@ class tri_gate(design.design): """ This module implements the tri gate cell used in the design forS bit-line isolation. It is a hand-made cell, so the layout and - netlist should be available in the technology library. + netlist should be available in the technology library. """ pin_names = ["in", "out", "en", "en_bar", "vdd", "gnd"] @@ -23,7 +23,7 @@ class tri_gate(design.design): cell_size_layer = "boundary" unique_id = 1 - + def __init__(self, name=""): if name=="": name = "tri{0}".format(tri_gate.unique_id) @@ -34,7 +34,7 @@ class tri_gate(design.design): (width, height) = utils.get_libcell_size(name, GDS["unit"], layer[self.cell_size_layer]) - + pin_map = utils.get_libcell_pins(self.pin_names, name, GDS["unit"]) @@ -47,12 +47,12 @@ class tri_gate(design.design): def analytical_power(self, corner, load): """Returns dynamic and leakage power. Results in nW""" #Power in this module currently not defined. Returns 0 nW (leakage and dynamic). - total_power = self.return_power() + total_power = self.return_power() return total_power def get_cin(self): return 9*spice["min_tx_gate_c"] - def build_graph(self, graph, inst_name, port_nets): + def build_graph(self, graph, inst_name, port_nets): """Adds edges based on inputs/outputs. Overrides base class function.""" - self.add_graph_edges(graph, port_nets) + self.add_graph_edges(graph, port_nets) diff --git a/compiler/custom/write_driver.py b/compiler/custom/write_driver.py index 62b1387e..ca86cf25 100644 --- a/compiler/custom/write_driver.py +++ b/compiler/custom/write_driver.py @@ -14,7 +14,7 @@ from tech import cell_properties as props class write_driver(design.design): """ - Tristate write driver to be active during write operations only. + Tristate write driver to be active during write operations only. This module implements the write driver cell used in the design. It is a hand-made cell, so the layout and netlist should be available in the technology library. @@ -37,7 +37,7 @@ class write_driver(design.design): (width, height) = utils.get_libcell_size(name, GDS["unit"], layer[self.cell_size_layer]) - + pin_map = utils.get_libcell_pins(self.pin_names, name, GDS["unit"]) @@ -66,6 +66,6 @@ class write_driver(design.design): # This is approximated from SCMOS. It has roughly 5 3x transistor gates. return 5*3 - def build_graph(self, graph, inst_name, port_nets): + def build_graph(self, graph, inst_name, port_nets): """Adds edges based on inputs/outputs. Overrides base class function.""" - self.add_graph_edges(graph, port_nets) + self.add_graph_edges(graph, port_nets) diff --git a/compiler/datasheet/add_db.py b/compiler/datasheet/add_db.py index 9514cf1b..2ad546a9 100644 --- a/compiler/datasheet/add_db.py +++ b/compiler/datasheet/add_db.py @@ -25,16 +25,16 @@ def parse_html(file, comment): end_tag = comment+'-->' with open(file, 'r') as f: - + file_string = f.read() with open(file, 'w') as f: file_string = file_string.replace(start_tag,"") file_string = file_string.replace(end_tag,"") - + f.write(file_string) - + def uncomment(comments): comment_files = [] for datasheet in datasheet_list: diff --git a/compiler/datasheet/datasheet_gen.py b/compiler/datasheet/datasheet_gen.py index 02ecc5d4..becb11d9 100644 --- a/compiler/datasheet/datasheet_gen.py +++ b/compiler/datasheet/datasheet_gen.py @@ -112,7 +112,7 @@ def parse_characterizer_csv(f, pages): DATETIME = row[col] col += 1 - + ANALYTICAL_MODEL = row[col] col += 1 @@ -121,7 +121,7 @@ def parse_characterizer_csv(f, pages): LVS = row[col] col += 1 - + AREA = row[col] col += 1 @@ -565,7 +565,7 @@ def parse_characterizer_csv(f, pages): for element in row[col_start:col-1]: sheet.description.append(str(element)) break - # parse initial power and leakage information + # parse initial power and leakage information while(True): start = col if(row[col].startswith('power')): diff --git a/compiler/drc/design_rules.py b/compiler/drc/design_rules.py index b194d082..afbf3c96 100644 --- a/compiler/drc/design_rules.py +++ b/compiler/drc/design_rules.py @@ -46,7 +46,7 @@ class design_rules(dict): def keys(self): return self.rules.keys() - + def add_layer(self, name, width, spacing, area=0): # Minimum width self.add("minwidth_{}".format(name), width) @@ -54,7 +54,7 @@ class design_rules(dict): self.add("{0}_to_{0}".format(name), spacing) # Minimum area self.add("minarea_{}".format(name), area) - + def add_enclosure(self, name, layer, enclosure, extension=None): self.add("{0}_enclose_{1}".format(name, layer), enclosure) # Reserved for asymmetric enclosures @@ -62,4 +62,4 @@ class design_rules(dict): self.add("{0}_extend_{1}".format(name, layer), extension) else: self.add("{0}_extend_{1}".format(name, layer), enclosure) - + diff --git a/compiler/drc/drc_lut.py b/compiler/drc/drc_lut.py index 8a7b49d2..086e355e 100644 --- a/compiler/drc/drc_lut.py +++ b/compiler/drc/drc_lut.py @@ -44,7 +44,7 @@ class drc_lut(): if k1 < k2: return False return True - - - + + + diff --git a/compiler/drc/drc_value.py b/compiler/drc/drc_value.py index aa957d1b..07425ec5 100644 --- a/compiler/drc/drc_value.py +++ b/compiler/drc/drc_value.py @@ -19,7 +19,7 @@ class drc_value(): Return the value. """ return self.value - - - + + + diff --git a/compiler/gdsMill/gdsMill/gdsStreamer.py b/compiler/gdsMill/gdsMill/gdsStreamer.py index 7c9daacc..3d1e98d5 100644 --- a/compiler/gdsMill/gdsMill/gdsStreamer.py +++ b/compiler/gdsMill/gdsMill/gdsStreamer.py @@ -6,7 +6,7 @@ class GdsStreamer: """ def __init__(self, workingDirectory = "."): self.workingDirectory = os.path.abspath(workingDirectory) - + def createStreamOutTemplate(self, sourceLibraryName, sourceCellName, gdsDestinationPath): templateFile = open(self.workingDirectory+"/partStreamOut.tmpl","w") templateFile.write("streamOutKeys = list(nil\n") @@ -70,7 +70,7 @@ class GdsStreamer: templateFile = open(self.workingDirectory+"/partStreamIn.tmpl","w") templateFile.write("streamInKeys = list(nil\n") templateFile.write("'runDir \".\"\n") - templateFile.write("'inFile \""+inputGdsPath+"\"\n") + templateFile.write("'inFile \""+inputGdsPath+"\"\n") templateFile.write("'primaryCell \"\"\n") templateFile.write("'libName \""+sourceLibraryName+"\"\n") templateFile.write("'techFileName \"\"\n") @@ -88,7 +88,7 @@ class GdsStreamer: templateFile.write("'convertNode \"ignore\"\n") templateFile.write("'keepPcell nil\n") templateFile.write("'replaceBusBitChar nil\n") - templateFile.write("'skipUndefinedLPP nil\n") + templateFile.write("'skipUndefinedLPP nil\n") templateFile.write("'ignoreBox nil\n") templateFile.write("'mergeUndefPurposToDrawing nil\n") templateFile.write("'reportPrecision nil\n") @@ -109,10 +109,10 @@ class GdsStreamer: templateFile.write("'propSeparator \",\"\n") templateFile.write("'userSkillFile \"\"\n") templateFile.write("'rodDir \"\"\n") - templateFile.write("'refLibOrder \"\"\n") + templateFile.write("'refLibOrder \"\"\n") templateFile.write(")\n") templateFile.close() - + def streamFromCadence(self, cadenceLibraryContainerPath, libraryName, cellName, outputPath): #change into the cadence directory outputPath = os.path.abspath(outputPath) @@ -132,7 +132,7 @@ class GdsStreamer: os.remove(self.workingDirectory+"/partStreamOut.tmpl") #and go back to whever it was we started from os.chdir(currentPath) - + def streamToCadence(self,cadenceLibraryContainerPath, libraryName, inputPath): #change into the cadence directory inputPath = os.path.abspath(inputPath) diff --git a/compiler/gdsMill/gdsMill/pdfLayout.py b/compiler/gdsMill/gdsMill/pdfLayout.py index 9e5ba3e8..a8996f38 100644 --- a/compiler/gdsMill/gdsMill/pdfLayout.py +++ b/compiler/gdsMill/gdsMill/pdfLayout.py @@ -11,19 +11,19 @@ class pdfLayout: self.layout = theLayout self.layerColors=dict() self.scale = 1.0 - + def setScale(self,newScale): self.scale = float(newScale) - + def hexToRgb(self,hexColor): """ Takes a hexadecimal color string i.e. "#219E1C" and converts it to an rgb float triplet ranging 0->1 """ red = int(hexColor[1:3],16) green = int(hexColor[3:5],16) - blue = int(hexColor[5:7],16) + blue = int(hexColor[5:7],16) return (float(red)/255,float(green)/255,float(blue)/255) - + def randomHexColor(self): """ Generates a random color in hex using the format #ABC123 @@ -50,26 +50,26 @@ class pdfLayout: xyPoint = tMatrix * xyPoint xyCoordinates += [(xyPoint[0],xyPoint[1])] return xyCoordinates - + def drawBoundary(self,boundary,origin,uVector,vVector): #get the coordinates in the correct coordinate space coordinates = self.transformCoordinates(boundary.coordinates,origin,uVector,vVector) - #method to draw a boundary with an XY offset + #method to draw a boundary with an XY offset x=(coordinates[0][0])/self.scale y=(coordinates[0][1])/self.scale shape = pyx.path.path(pyx.path.moveto(x, y)) for index in range(1,len(coordinates)): x=(coordinates[index][0])/self.scale - y=(coordinates[index][1])/self.scale - shape.append(pyx.path.lineto(x,y)) + y=(coordinates[index][1])/self.scale + shape.append(pyx.path.lineto(x,y)) self.canvas.stroke(shape, [pyx.style.linewidth.thick]) if(boundary.drawingLayer in self.layerColors): layerColor = self.hexToRgb(self.layerColors[boundary.drawingLayer]) self.canvas.fill(shape, [pyx.color.rgb(layerColor[0],layerColor[1],layerColor[2]), pyx.color.transparency(0.5)]) - - def drawPath(self,path,origin,uVector,vVector): - #method to draw a path with an XY offset - boundaryCoordinates = self.transformCoordinates(path.equivalentBoundaryCoordinates(),origin,uVector,vVector) + + def drawPath(self,path,origin,uVector,vVector): + #method to draw a path with an XY offset + boundaryCoordinates = self.transformCoordinates(path.equivalentBoundaryCoordinates(),origin,uVector,vVector) shape = pyx.path.path(pyx.path.moveto((boundaryCoordinates[0][0])/self.scale,(boundaryCoordinates[0][1])/self.scale)) for coordinate in boundaryCoordinates[1::]: shape.append(pyx.path.lineto((coordinate[0])/self.scale,(coordinate[1])/self.scale)) @@ -77,7 +77,7 @@ class pdfLayout: if(path.drawingLayer in self.layerColors): layerColor = self.hexToRgb(self.layerColors[path.drawingLayer]) self.canvas.fill(shape, [pyx.color.rgb(layerColor[0],layerColor[1],layerColor[2]), pyx.color.transparency(0.5)]) - + def drawLayout(self): #use the layout xyTree and structureList #to draw ONLY the geometry in each structure @@ -89,6 +89,6 @@ class pdfLayout: self.drawBoundary(boundary,element[1],element[2], element[3]) for path in structureToDraw.paths: self.drawPath(path,element[1],element[2], element[3]) - + def writeToFile(self,filename): self.canvas.writePDFfile(filename) diff --git a/compiler/gdsMill/pyx/bbox.py b/compiler/gdsMill/pyx/bbox.py index d00383d8..089823c7 100644 --- a/compiler/gdsMill/pyx/bbox.py +++ b/compiler/gdsMill/pyx/bbox.py @@ -28,7 +28,7 @@ import unit # class bbox_pt: - + """class for bounding boxes This variant requires points in the constructor, and is used for internal diff --git a/compiler/gdsMill/pyx/canvas.py b/compiler/gdsMill/pyx/canvas.py index 6110af17..bdd89d78 100644 --- a/compiler/gdsMill/pyx/canvas.py +++ b/compiler/gdsMill/pyx/canvas.py @@ -47,7 +47,7 @@ class canvasitem: - the PS code corresponding to the canvasitem has to be written in the stream file, which provides a write(string) method - writer is the PSwriter used for the output - - context is an instance of pswriter.context which is used for keeping + - context is an instance of pswriter.context which is used for keeping track of the graphics state (current linewidth, colorspace and font)) - registry is used for tracking resources needed by the canvasitem - bbox has to be updated to include the bounding box of the canvasitem @@ -63,7 +63,7 @@ class canvasitem: - writer is the PDFwriter used for the output, which contains properties like whether streamcompression is used - context is an instance of pdfwriter.context which is used for keeping - track of the graphics state, in particular for the emulation of PS + track of the graphics state, in particular for the emulation of PS behaviour regarding fill and stroke styles, for keeping track of the currently selected font as well as of text regions. - registry is used for tracking resources needed by the canvasitem @@ -145,8 +145,8 @@ class _canvas(canvasitem): attr.checkattrs(attrs, [trafo.trafo_pt, clip, style.strokestyle, style.fillstyle]) # We have to reverse the trafos such that the PostScript concat operators # are in the right order. Correspondingly, we below multiply the current self.trafo - # from the right. - # Note that while for the stroke and fill styles the order doesn't matter at all, + # from the right. + # Note that while for the stroke and fill styles the order doesn't matter at all, # this is not true for the clip operation. attrs = attrs[:] attrs.reverse() diff --git a/compiler/gdsMill/pyx/deformer.py b/compiler/gdsMill/pyx/deformer.py index fdde6b67..21289617 100644 --- a/compiler/gdsMill/pyx/deformer.py +++ b/compiler/gdsMill/pyx/deformer.py @@ -1188,7 +1188,7 @@ class parallel(deformer): # <<< intsparams = np[nsp_i][nspitem_i].intersect(np[nsp_j][nspitem_j], epsilon) if intsparams: for intsparam_i, intsparam_j in intsparams: - if ( (abs(intsparam_i) < epsilon and abs(1-intsparam_j) < epsilon) or + if ( (abs(intsparam_i) < epsilon and abs(1-intsparam_j) < epsilon) or (abs(intsparam_j) < epsilon and abs(1-intsparam_i) < epsilon) ): continue npp_i = normpath.normpathparam(np, nsp_i, float(nspitem_i)+intsparam_i) diff --git a/compiler/gdsMill/pyx/dvifile.py b/compiler/gdsMill/pyx/dvifile.py index 06248c89..578a8a0e 100644 --- a/compiler/gdsMill/pyx/dvifile.py +++ b/compiler/gdsMill/pyx/dvifile.py @@ -467,7 +467,7 @@ class font: return fontinfo def __str__(self): - return "font %s designed at %g TeX pts used at %g TeX pts" % (self.name, + return "font %s designed at %g TeX pts used at %g TeX pts" % (self.name, 16.0*self.d/16777216L, 16.0*self.q/16777216L) __repr__ = __str__ @@ -510,7 +510,7 @@ class font: def _convert_tfm_to_ds(self, length): return (16*long(round(length*float(self.q)*self.tfmconv))/16777216) * self.pyxconv * 1000 / self.getsize_pt() - + def _convert_tfm_to_pt(self, length): return (16*long(round(length*float(self.q)*self.tfmconv))/16777216) * self.pyxconv @@ -528,7 +528,7 @@ class font: def getitalic_dvi(self, charcode): return self._convert_tfm_to_dvi(self.tfmfile.italic[self.tfmfile.char_info[charcode].italic_index]) - # routines returning lengths as integers in design size (AFM) units + # routines returning lengths as integers in design size (AFM) units def getwidth_ds(self, charcode): return self._convert_tfm_to_ds(self.tfmfile.width[self.tfmfile.char_info[charcode].width_index]) @@ -767,7 +767,7 @@ class dvifile: if fontslant is not None: fontslant = float(fontslant) - # XXX we currently misuse use self.activefont as metric + # XXX we currently misuse use self.activefont as metric font = type1font.font(fontbasefontname, fontfilename, fontencoding, fontslant, self.activefont) self.activetext = type1font.text_pt(self.pos[_POS_H] * self.pyxconv, -self.pos[_POS_V] * self.pyxconv, font) @@ -973,14 +973,14 @@ class dvifile: den = afile.readuint32() self.mag = afile.readuint32() - # For the interpretation of the lengths in dvi and tfm files, + # For the interpretation of the lengths in dvi and tfm files, # three conversion factors are relevant: # - self.tfmconv: tfm units -> dvi units # - self.pyxconv: dvi units -> (PostScript) points # - self.conv: dvi units -> pixels self.tfmconv = (25400000.0/num)*(den/473628672.0)/16.0 - # calculate conv as described in the DVIType docu using + # calculate conv as described in the DVIType docu using # a given resolution in dpi self.resolution = 300.0 self.conv = (num/254000.0)*(self.resolution/den) diff --git a/compiler/gdsMill/pyx/epsfile.py b/compiler/gdsMill/pyx/epsfile.py index b008d68f..4e74d891 100644 --- a/compiler/gdsMill/pyx/epsfile.py +++ b/compiler/gdsMill/pyx/epsfile.py @@ -319,7 +319,7 @@ class epsfile(canvas.canvasitem): try: epsfile=open(self.filename,"rb") except: - raise IOError, "cannot open EPS file '%s'" % self.filename + raise IOError, "cannot open EPS file '%s'" % self.filename file.write("BeginEPSF\n") @@ -330,7 +330,7 @@ class epsfile(canvas.canvasitem): self.trafo.processPS(file, writer, context, registry, bbox) file.write("%%%%BeginDocument: %s\n" % self.filename) - file.write(epsfile.read()) + file.write(epsfile.read()) file.write("%%EndDocument\n") file.write("EndEPSF\n") diff --git a/compiler/gdsMill/pyx/mathutils.py b/compiler/gdsMill/pyx/mathutils.py index 1b47af12..9250ddf1 100644 --- a/compiler/gdsMill/pyx/mathutils.py +++ b/compiler/gdsMill/pyx/mathutils.py @@ -166,4 +166,4 @@ def realpolyroots(*cs): # else: # rs.append(r) # return rs -# +# diff --git a/compiler/gdsMill/pyx/path.py b/compiler/gdsMill/pyx/path.py index 6352ac59..e12b1aaf 100644 --- a/compiler/gdsMill/pyx/path.py +++ b/compiler/gdsMill/pyx/path.py @@ -710,9 +710,9 @@ class arct_pt(pathitem): # Negative (positive) angles alpha corresponds to a turn to the right (left) # as seen from currentpoint. if dx1*dy2-dy1*dx2 > 0: - alpha = acos(dx1*dx2+dy1*dy2) + alpha = acos(dx1*dx2+dy1*dy2) else: - alpha = -acos(dx1*dx2+dy1*dy2) + alpha = -acos(dx1*dx2+dy1*dy2) try: # two tangent points @@ -744,7 +744,7 @@ class arct_pt(pathitem): return [line, arcn_pt(mx_pt, my_pt, self.r_pt, phi-deltaphi, phi+deltaphi)] except ZeroDivisionError: - # in the degenerate case, we just return a line as specified by the PS + # in the degenerate case, we just return a line as specified by the PS # language reference return [lineto_pt(self.x1_pt, self.y1_pt)] diff --git a/compiler/gdsMill/pyx/pattern.py b/compiler/gdsMill/pyx/pattern.py index a2b0cc1a..e4bed253 100644 --- a/compiler/gdsMill/pyx/pattern.py +++ b/compiler/gdsMill/pyx/pattern.py @@ -48,7 +48,7 @@ class pattern(canvas._canvas, attr.exclusiveattr, style.fillstyle): self.patternbbox = bbox self.patterntrafo = trafo - def __call__(self, painttype=_marker, tilingtype=_marker, xstep=_marker, ystep=_marker, + def __call__(self, painttype=_marker, tilingtype=_marker, xstep=_marker, ystep=_marker, bbox=_marker, trafo=_marker): if painttype is _marker: painttype = self.painttype diff --git a/compiler/gdsMill/pyx/trafo.py b/compiler/gdsMill/pyx/trafo.py index b9509502..d68177a7 100644 --- a/compiler/gdsMill/pyx/trafo.py +++ b/compiler/gdsMill/pyx/trafo.py @@ -38,7 +38,7 @@ def set(epsilon=None): def _rmatrix(angle): phi = math.pi*angle/180.0 - return ((math.cos(phi), -math.sin(phi)), + return ((math.cos(phi), -math.sin(phi)), (math.sin(phi), math.cos(phi))) def _rvector(angle, x, y): @@ -198,7 +198,7 @@ class trafo(trafo_pt): epsilon=epsilon) # -# some standard transformations +# some standard transformations # class mirror(trafo): @@ -219,7 +219,7 @@ class rotate_pt(trafo_pt): class rotate(trafo_pt): def __init__(self, angle, x=None, y=None, epsilon=_marker): - vector = 0, 0 + vector = 0, 0 if x is not None or y is not None: if x is None or y is None: raise TrafoException("either specify both x and y or none of them") diff --git a/compiler/gdsMill/pyx/unit.py b/compiler/gdsMill/pyx/unit.py index 932eaabb..d1b937c3 100644 --- a/compiler/gdsMill/pyx/unit.py +++ b/compiler/gdsMill/pyx/unit.py @@ -26,7 +26,7 @@ scale = { 't':1, 'u':1, 'v':1, 'w':1, 'x':1 } _default_unit = "cm" -_m = { +_m = { 'm' : 1, 'cm': 0.01, 'mm': 0.001, @@ -51,7 +51,7 @@ def set(uscale=None, vscale=None, wscale=None, xscale=None, defaultunit=None): def _convert_to(l, dest_unit="m"): if type(l) in (types.IntType, types.LongType, types.FloatType): return l * _m[_default_unit] * scale['u'] / _m[dest_unit] - elif not isinstance(l, length): + elif not isinstance(l, length): l = length(l) # convert to length instance if necessary return (l.t + l.u*scale['u'] + l.v*scale['v'] + l.w*scale['w'] + l.x*scale['x']) / _m[dest_unit] diff --git a/compiler/globals.py b/compiler/globals.py index cc28c397..458ec04e 100644 --- a/compiler/globals.py +++ b/compiler/globals.py @@ -144,18 +144,18 @@ def check_versions(): minor_required = 5 if not (major_python_version == major_required and minor_python_version >= minor_required): debug.error("Python {0}.{1} or greater is required.".format(major_required,minor_required),-1) - + # FIXME: Check versions of other tools here?? # or, this could be done in each module (e.g. verify, characterizer, etc.) global OPTS - + try: import coverage OPTS.coverage = 1 except: OPTS.coverage = 0 - + def init_openram(config_file, is_unit_test=True): """ Initialize the technology, paths, simulators, etc. """ @@ -164,7 +164,7 @@ def init_openram(config_file, is_unit_test=True): debug.info(1, "Initializing OpenRAM...") setup_paths() - + read_config(config_file, is_unit_test) import_tech() @@ -200,7 +200,7 @@ def init_openram(config_file, is_unit_test=True): if not CHECKPOINT_OPTS: CHECKPOINT_OPTS = copy.copy(OPTS) - + def setup_bitcell(): """ Determine the correct custom or parameterized bitcell for the design. @@ -209,7 +209,7 @@ def setup_bitcell(): # and the user didn't over-ride the bitcell manually, # figure out the right bitcell to use if (OPTS.bitcell == "bitcell"): - + if (OPTS.num_rw_ports == 1 and OPTS.num_w_ports == 0 and OPTS.num_r_ports == 0): OPTS.bitcell = "bitcell" OPTS.bitcell_name = "cell_6t" @@ -226,13 +226,13 @@ def setup_bitcell(): OPTS.bitcell_suffix = "_" + ports OPTS.bitcell = "bitcell" + OPTS.bitcell_suffix OPTS.bitcell_name = "cell" + OPTS.bitcell_suffix - + OPTS.dummy_bitcell = "dummy_" + OPTS.bitcell OPTS.dummy_bitcell_name = "dummy_" + OPTS.bitcell_name OPTS.replica_bitcell = "replica_" + OPTS.bitcell OPTS.replica_bitcell_name = "replica_" + OPTS.bitcell_name - + # See if bitcell exists try: __import__(OPTS.bitcell) @@ -276,7 +276,7 @@ def get_tool(tool_type, preferences, default_name=None): else: return(None, "") - + def read_config(config_file, is_unit_test=True): """ Read the configuration file that defines a few parameters. The @@ -289,14 +289,14 @@ def read_config(config_file, is_unit_test=True): # it is already not an abs path, make it one if not os.path.isabs(config_file): config_file = os.getcwd() + "/" + config_file - + # Make it a python file if the base name was only given config_file = re.sub(r'\.py$', "", config_file) - - + + # Expand the user if it is used config_file = os.path.expanduser(config_file) - + OPTS.config_file = config_file + ".py" # Add the path to the system path # so we can import things in the other directory @@ -335,7 +335,7 @@ def read_config(config_file, is_unit_test=True): # If we are only generating a netlist, we can't do DRC/LVS if OPTS.netlist_only: OPTS.check_lvsdrc = False - + # If config didn't set output name, make a reasonable default. if (OPTS.output_name == ""): ports = "" @@ -350,7 +350,7 @@ def read_config(config_file, is_unit_test=True): ports, OPTS.tech_name) - + def end_openram(): """ Clean up openram for a proper exit """ cleanup_paths() @@ -360,8 +360,8 @@ def end_openram(): verify.print_drc_stats() verify.print_lvs_stats() verify.print_pex_stats() - - + + def cleanup_paths(): """ We should clean up the temp directory after execution. @@ -383,8 +383,8 @@ def cleanup_paths(): os.remove(i) else: shutil.rmtree(i) - - + + def setup_paths(): """ Set up the non-tech related paths. """ debug.info(2, "Setting up paths...") @@ -407,7 +407,7 @@ def setup_paths(): debug.check(os.path.isdir(full_path), "$OPENRAM_HOME/{0} does not exist: {1}".format(subdir, full_path)) if "__pycache__" not in full_path: - sys.path.append("{0}".format(full_path)) + sys.path.append("{0}".format(full_path)) if not OPTS.openram_temp.endswith('/'): OPTS.openram_temp += "/" @@ -420,9 +420,9 @@ def is_exe(fpath): def find_exe(check_exe): - """ + """ Check if the binary exists in any path dir - and return the full path. + and return the full path. """ # Check if the preferred spice option exists in the path for path in os.environ["PATH"].split(os.pathsep): @@ -444,7 +444,7 @@ def init_paths(): except OSError as e: if e.errno == 17: # errno.EEXIST os.chmod(OPTS.openram_temp, 0o750) - + # Don't delete the output dir, it may have other files! # make the directory if it doesn't exist try: @@ -455,7 +455,7 @@ def init_paths(): except: debug.error("Unable to make output directory.", -1) - + def set_default_corner(): """ Set the default corner. """ @@ -466,13 +466,13 @@ def set_default_corner(): OPTS.process_corners = ["TT"] else: OPTS.process_corners = tech.spice["fet_models"].keys() - + if (OPTS.supply_voltages == ""): if OPTS.nominal_corner_only: OPTS.supply_voltages = [tech.spice["supply_voltages"][1]] else: OPTS.supply_voltages = tech.spice["supply_voltages"] - + if (OPTS.temperatures == ""): if OPTS.nominal_corner_only: OPTS.temperatures = [tech.spice["temperatures"][1]] @@ -486,8 +486,8 @@ def set_default_corner(): # Load scales are fanout multiples of the default spice input slew if (OPTS.slew_scales == ""): OPTS.slew_scales = [0.25, 1, 8] - - + + def import_tech(): """ Dynamically adds the tech directory to the path and imports it. """ global OPTS @@ -508,7 +508,7 @@ def import_tech(): sys.path.append(tech_path) debug.info(1, "Adding technology path: {}".format(tech_path)) - # Import the tech + # Import the tech try: tech_mod = __import__(OPTS.tech_name) except ImportError: @@ -533,7 +533,7 @@ def import_tech(): def print_time(name, now_time, last_time=None, indentation=2): """ Print a statement about the time delta. """ global OPTS - + # Don't print during testing if not OPTS.is_unit_test or OPTS.debug_level > 0: if last_time: @@ -544,12 +544,12 @@ def print_time(name, now_time, last_time=None, indentation=2): def report_status(): - """ + """ Check for valid arguments and report the - info about the SRAM being generated + info about the SRAM being generated """ global OPTS - + # Check if all arguments are integers for bits, size, banks if type(OPTS.word_size) != int: debug.error("{0} is not an integer in config file.".format(OPTS.word_size)) @@ -557,7 +557,7 @@ def report_status(): debug.error("{0} is not an integer in config file.".format(OPTS.sram_size)) if type(OPTS.write_size) is not int and OPTS.write_size is not None: debug.error("{0} is not an integer in config file.".format(OPTS.write_size)) - + # If a write mask is specified by the user, the mask write size should be the same as # the word size so that an entire word is written at once. if OPTS.write_size is not None: @@ -589,10 +589,10 @@ def report_status(): if OPTS.netlist_only: debug.print_raw("Netlist only mode (no physical design is being done, netlist_only=False to disable).") - + if not OPTS.route_supplies: debug.print_raw("Design supply routing skipped. Supplies will have multiple must-connect pins. (route_supplies=True to enable supply routing).") - + if not OPTS.inline_lvsdrc: debug.print_raw("DRC/LVS/PEX is only run on the top-level design to save run-time (inline_lvsdrc=True to do inline checking).") diff --git a/compiler/modules/bank.py b/compiler/modules/bank.py index bede24a1..3bd3a2e9 100644 --- a/compiler/modules/bank.py +++ b/compiler/modules/bank.py @@ -31,16 +31,16 @@ class bank(design.design): self.num_wmasks = int(ceil(self.word_size / self.write_size)) else: self.num_wmasks = 0 - + if not self.num_spare_cols: self.num_spare_cols = 0 - + if name == "": name = "bank_{0}_{1}".format(self.word_size, self.num_words) super().__init__(name) debug.info(2, "create sram of size {0} with {1} words".format(self.word_size, self.num_words)) - + # The local control signals are gated when we have bank select logic, # so this prefix will be added to all of the input signals to create # the internal gated signals. @@ -62,12 +62,12 @@ class bank(design.design): self.add_modules() self.add_pins() # Must create the replica bitcell array first self.create_instances() - + def create_layout(self): self.place_instances() self.setup_routing_constraints() self.route_layout() - + # Can remove the following, but it helps for debug! # self.add_lvs_correspondence_points() @@ -110,13 +110,13 @@ class bank(design.design): self.add_pin("wl_en{0}".format(port), "INPUT") self.add_pin("vdd", "POWER") self.add_pin("gnd", "GROUND") - + def route_layout(self): """ Create routing amoung the modules """ self.route_central_bus() self.route_unused_wordlines() - + for port in self.all_ports: self.route_bitlines(port) self.route_rbl(port) @@ -125,7 +125,7 @@ class bank(design.design): self.route_control_lines(port) if self.num_banks > 1: self.route_bank_select(port) - + self.route_supplies() def route_rbl(self, port): @@ -149,7 +149,7 @@ class bank(design.design): layer="m3", start=left_right_offset, end=pin_offset) - + def route_bitlines(self, port): """ Route the bitlines depending on the port type rw, w, or r. """ @@ -158,7 +158,7 @@ class bank(design.design): if port in self.read_ports: self.route_port_data_out(port) self.route_port_data_to_bitcell_array(port) - + def create_instances(self): """ Create the instances of the netlist. """ @@ -185,7 +185,7 @@ class bank(design.design): # The port data write/sense/precharge/mux is placed on the top and mirrored on the X-axis. self.bitcell_array_top = self.bitcell_array.height self.bitcell_array_right = self.bitcell_array.width - + # These are the offsets of the main array (excluding dummy and replica rows/cols) self.main_bitcell_array_top = self.bitcell_array.get_main_array_top() # Just past the dummy column @@ -213,7 +213,7 @@ class bank(design.design): """ port = 0 - + # UPPER RIGHT QUADRANT # Bitcell array is placed at (0,0) self.bitcell_array_offset = vector(0, 0) @@ -258,14 +258,14 @@ class bank(design.design): """ port=1 - + # LOWER LEFT QUADRANT # Bitcell array is placed at (0,0) # UPPER LEFT QUADRANT # Above the bitcell array self.port_data_offsets[port] = vector(0, self.bitcell_array_top) - + # LOWER RIGHT QUADRANT # To the right of the bitcell array x_offset = self.bitcell_array_right + self.port_address[port].width + self.m2_gap @@ -294,12 +294,12 @@ class bank(design.design): else: y_offset = self.port_address_offsets[port].y self.bank_select_offsets[port] = vector(x_offset, y_offset) - + def place_instances(self): """ Place the instances. """ self.compute_instance_offsets() - + self.place_bitcell_array(self.bitcell_array_offset) self.place_port_data(self.port_data_offsets) @@ -308,7 +308,7 @@ class bank(design.design): self.place_column_decoder(self.column_decoder_offsets) self.place_bank_select(self.bank_select_offsets) - + def compute_sizes(self): """ Computes the required sizes to create the bank """ @@ -351,7 +351,7 @@ class bank(design.design): self.control_signals.append(["gated_" + str for str in self.input_control_signals[port]]) else: self.control_signals.append(self.input_control_signals[port]) - + # The central bus is the column address (one hot) and row address (binary) if self.col_addr_size>0: @@ -379,7 +379,7 @@ class bank(design.design): local_array_size = OPTS.local_array_size except AttributeError: local_array_size = 0 - + if local_array_size > 0: # Find the even multiple that satisfies the fanout with equal sized local arrays total_cols = self.num_cols + self.num_spare_cols @@ -406,11 +406,11 @@ class bank(design.design): bit_offsets=self.bit_offsets) self.port_data.append(temp_pre) self.add_mod(self.port_data[port]) - + if(self.num_banks > 1): self.bank_select = factory.create(module_type="bank_select") self.add_mod(self.bank_select) - + def create_bitcell_array(self): """ Creating Bitcell Array """ self.bitcell_array_inst=self.add_inst(name="bitcell_array", @@ -426,12 +426,12 @@ class bank(design.design): temp.extend(self.bitcell_array.get_wordline_names()) if len(self.all_ports) > 1: temp.append("rbl_wl1") - + temp.append("vdd") temp.append("gnd") self.connect_inst(temp) - + def place_bitcell_array(self, offset): """ Placing Bitcell Array """ self.bitcell_array_inst.place(offset) @@ -470,7 +470,7 @@ class bank(design.design): def place_port_data(self, offsets): """ Placing Port Data """ - + for port in self.all_ports: # Top one is unflipped, bottom is flipped along X direction if port % 2 == 1: @@ -481,7 +481,7 @@ class bank(design.design): def create_port_address(self): """ Create the hierarchical row decoder """ - + self.port_address_inst = [None] * len(self.all_ports) for port in self.all_ports: self.port_address_inst[port] = self.add_inst(name="port_address{}".format(port), @@ -496,32 +496,32 @@ class bank(design.design): temp.append("rbl_wl{}".format(port)) temp.extend(["vdd", "gnd"]) self.connect_inst(temp) - + def place_port_address(self, offsets): """ Place the hierarchical row decoder """ debug.check(len(offsets)>=len(self.all_ports), "Insufficient offsets to place row decoder array.") - + # The address and control bus will be in between decoder and the main memory array # This bus will route address bits to the decoder input and column mux inputs. # The wires are actually routed after we placed the stuff on both sides. # The predecoder is below the x-axis and the main decoder is above the x-axis # The address flop and decoder are aligned in the x coord. - + for port in self.all_ports: if port % 2: mirror = "MY" else: mirror = "R0" self.port_address_inst[port].place(offset=offsets[port], mirror=mirror) - + def create_column_decoder(self): """ Create a 2:4 or 3:8 column address decoder. """ self.dff =factory.create(module_type="dff") - + if self.col_addr_size == 0: return elif self.col_addr_size == 1: @@ -541,7 +541,7 @@ class bank(design.design): # No error checking before? debug.error("Invalid column decoder?", -1) self.add_mod(self.column_decoder) - + self.column_decoder_inst = [None] * len(self.all_ports) for port in self.all_ports: self.column_decoder_inst[port] = self.add_inst(name="col_address_decoder{}".format(port), @@ -554,14 +554,14 @@ class bank(design.design): temp.append("sel{0}_{1}".format(port, bit)) temp.extend(["vdd", "gnd"]) self.connect_inst(temp) - + def place_column_decoder(self, offsets): """ Place a 2:4 or 3:8 column address decoder. """ if self.col_addr_size == 0: return - + debug.check(len(offsets)>=len(self.all_ports), "Insufficient offsets to place column decoder.") @@ -571,7 +571,7 @@ class bank(design.design): else: mirror = "R0" self.column_decoder_inst[port].place(offset=offsets[port], mirror=mirror) - + def create_bank_select(self): """ Create the bank select logic. """ @@ -582,7 +582,7 @@ class bank(design.design): for port in self.all_ports: self.bank_select_inst[port] = self.add_inst(name="bank_select{}".format(port), mod=self.bank_select) - + temp = [] temp.extend(self.input_control_signals[port]) temp.append("bank_sel{}".format(port)) @@ -601,7 +601,7 @@ class bank(design.design): for port in self.all_ports: self.bank_select_inst[port].place(offsets[port]) - + def route_supplies(self): """ Propagate all vdd/gnd pins up to this level for all modules """ # Copy only the power pins already on the power layer @@ -624,7 +624,7 @@ class bank(design.design): def route_bank_select(self, port): """ Route the bank select logic. """ - + if self.port_id[port] == "rw": bank_sel_signals = ["clk_buf", "w_en", "s_en", "p_en_bar", "bank_sel"] gated_bank_sel_signals = ["gated_clk_buf", "gated_w_en", "gated_s_en", "gated_p_en_bar"] @@ -634,11 +634,11 @@ class bank(design.design): else: bank_sel_signals = ["clk_buf", "s_en", "p_en_bar", "bank_sel"] gated_bank_sel_signals = ["gated_clk_buf", "gated_s_en", "gated_p_en_bar"] - + copy_control_signals = self.input_control_signals[port] + ["bank_sel{}".format(port)] for signal in range(len(copy_control_signals)): self.copy_layout_pin(self.bank_select_inst[port], bank_sel_signals[signal], copy_control_signals[signal]) - + for signal in range(len(gated_bank_sel_signals)): # Connect the inverter output to the central bus out_pos = self.bank_select_inst[port].get_pin(gated_bank_sel_signals[signal]).rc() @@ -651,7 +651,7 @@ class bank(design.design): offset=out_pos) self.add_via_center(layers=self.m2_stack, offset=out_pos) - + def setup_routing_constraints(self): """ After the modules are instantiated, find the dimensions for the @@ -660,7 +660,7 @@ class bank(design.design): self.max_y_offset = max([x.uy() for x in self.insts]) + 3 * self.m1_width self.min_y_offset = min([x.by() for x in self.insts]) - + self.max_x_offset = max([x.rx() for x in self.insts]) + 3 * self.m1_width self.min_x_offset = min([x.lx() for x in self.insts]) @@ -668,7 +668,7 @@ class bank(design.design): ur = vector(self.max_x_offset, self.max_y_offset) ll = vector(self.min_x_offset, self.min_y_offset) self.core_bbox = [ll, ur] - + self.height = ur.y - ll.y self.width = ur.x - ll.x @@ -692,7 +692,7 @@ class bank(design.design): vertical=True, make_pins=(self.num_banks==1), pitch=self.m3_pitch) - + # Port 1 if len(self.all_ports)==2: # The other control bus is routed up to two pitches above the bitcell array @@ -731,12 +731,12 @@ class bank(design.design): inst1_br_name=inst1_br_name, inst2_bl_name=inst2_bl_name, inst2_br_name=inst2_br_name) - + # Connect the replica bitlines for (array_name, data_name) in zip(["rbl_bl_{0}_{0}".format(port), "rbl_br_{0}_{0}".format(port)], ["rbl_bl", "rbl_br"]): self.connect_bitline(inst1, inst2, array_name, data_name) - + def route_port_data_out(self, port): """ Add pins for the port data out """ @@ -747,7 +747,7 @@ class bank(design.design): offset=data_pin.center(), height=data_pin.height(), width=data_pin.width()) - + def route_port_address_in(self, port): """ Routes the row decoder inputs and supplies """ @@ -771,19 +771,19 @@ class bank(design.design): wmask_name = "bank_wmask_{}".format(row) bank_wmask_name = "bank_wmask{0}_{1}".format(port, row) self.copy_layout_pin(self.port_data_inst[port], wmask_name, bank_wmask_name) - + for col in range(self.num_spare_cols): sparecol_name = "bank_spare_wen{}".format(col) bank_sparecol_name = "bank_spare_wen{0}_{1}".format(port, col) self.copy_layout_pin(self.port_data_inst[port], sparecol_name, bank_sparecol_name) - + def channel_route_bitlines(self, inst1, inst2, num_bits, inst1_bl_name="bl_{}", inst1_br_name="br_{}", inst2_bl_name="bl_{}", inst2_br_name="br_{}"): """ Route the bl and br of two modules using the channel router. """ - + # determine top and bottom automatically. # since they don't overlap, we can just check the bottom y coordinate. if inst1.by() < inst2.by(): @@ -801,14 +801,14 @@ class bank(design.design): top_names = [top_inst.get_pin(top_bl_name.format(bit)), top_inst.get_pin(top_br_name.format(bit))] route_map = list(zip(bottom_names, top_names)) self.create_horizontal_channel_route(route_map, offset, self.m1_stack) - + def connect_bitline(self, inst1, inst2, inst1_name, inst2_name): """ Connect two pins of two modules. This assumes that they have sufficient space to create a jog in the middle between the two modules (if needed). """ - + # determine top and bottom automatically. # since they don't overlap, we can just check the bottom y coordinate. if inst1.by() < inst2.by(): @@ -821,17 +821,17 @@ class bank(design.design): bottom_pin = bottom_inst.get_pin(bottom_name) top_pin = top_inst.get_pin(top_name) debug.check(bottom_pin.layer == top_pin.layer, "Pin layers do not match.") - + bottom_loc = bottom_pin.uc() top_loc = top_pin.bc() - + yoffset = 0.5 * (top_loc.y + bottom_loc.y) self.add_path(top_pin.layer, [bottom_loc, vector(bottom_loc.x, yoffset), vector(top_loc.x, yoffset), top_loc]) - + def connect_bitlines(self, inst1, inst2, inst1_bl_name, inst1_br_name, inst2_bl_name, inst2_br_name): @@ -847,12 +847,12 @@ class bank(design.design): """ Connect Wordline driver to bitcell array wordline """ self.route_port_address_in(port) - + if port % 2: self.route_port_address_out(port, "right") else: self.route_port_address_out(port, "left") - + def route_port_address_out(self, port, side="left"): """ Connecting Wordline driver output to Bitcell WL connection """ @@ -866,7 +866,7 @@ class bank(design.design): else: driver_wl_pos = driver_wl_pin.lc() bitcell_wl_pin = self.bitcell_array_inst.get_pin(array_name) - + if side == "left": bitcell_wl_pos = bitcell_wl_pin.lc() port_address_pos = self.port_address_inst[port].rx() @@ -875,7 +875,7 @@ class bank(design.design): bitcell_wl_pos = bitcell_wl_pin.rc() port_address_pos = self.port_address_inst[port].lx() bitcell_array_pos = self.bitcell_array_inst.rx() - + mid1 = driver_wl_pos.scale(0, 1) + vector(0.5 * port_address_pos + 0.5 * bitcell_array_pos, 0) mid2 = mid1.scale(1, 0) + bitcell_wl_pos.scale(0, 1) if driver_wl_pin.layer != bitcell_wl_pin.layer: @@ -886,7 +886,7 @@ class bank(design.design): self.add_path(bitcell_wl_pin.layer, [mid2, bitcell_wl_pos]) else: self.add_path(bitcell_wl_pin.layer, [driver_wl_pos, mid1, mid2, bitcell_wl_pos]) - + def route_port_address_right(self, port): """ Connecting Wordline driver output to Bitcell WL connection """ @@ -906,7 +906,7 @@ class bank(design.design): to_layer=bitcell_wl_pin.layer, offset=mid2) self.add_path(bitcell_wl_pin.layer, [mid2, bitcell_wl_pos]) - + def route_column_address_lines(self, port): """ Connecting the select lines of column mux to the address bus """ if not self.col_addr_size>0: @@ -914,15 +914,15 @@ class bank(design.design): stack = getattr(self, layer_props.bank.stack) pitch = getattr(self, layer_props.bank.pitch) - + if self.col_addr_size == 1: - + # Connect to sel[0] and sel[1] decode_names = ["Zb", "Z"] - + # The Address LSB self.copy_layout_pin(self.column_decoder_inst[port], "A", "addr{}_0".format(port)) - + elif self.col_addr_size > 1: decode_names = [] for i in range(self.num_col_addr_lines): @@ -942,7 +942,7 @@ class bank(design.design): sel_names = ["sel_{}".format(x) for x in range(self.num_col_addr_lines)] column_mux_pins = [self.port_data_inst[port].get_pin(x) for x in sel_names] - + route_map = list(zip(decode_pins, column_mux_pins)) self.create_vertical_channel_route(route_map, offset, @@ -964,7 +964,7 @@ class bank(design.design): # self.add_label(text=wl_name, # layer="m1", # offset=wl_pin.center()) - + # # Add the bitline names # for i in range(self.num_cols): # bl_name = "bl_{}".format(i) @@ -1025,10 +1025,10 @@ class bank(design.design): # Add a path to connect to the array self.add_path(pin_layer, [left_loc, left_pin_loc]) self.add_path(pin_layer, [right_loc, right_pin_loc]) - + def route_control_lines(self, port): """ Route the control lines of the entire bank """ - + # Make a list of tuples that we will connect. # From control signal to the module pin # Connection from the central bus to the main control block crosses @@ -1040,7 +1040,7 @@ class bank(design.design): if port in self.write_ports: connection.append((self.prefix + "w_en{}".format(port), self.port_data_inst[port].get_pin("w_en"))) - + if port in self.read_ports: connection.append((self.prefix + "s_en{}".format(port), self.port_data_inst[port].get_pin("s_en"))) @@ -1057,7 +1057,7 @@ class bank(design.design): self.add_via_stack_center(from_layer=pin.layer, to_layer="m2", offset=control_pos) - + # clk to wordline_driver control_signal = self.prefix + "wl_en{}".format(port) if port % 2: @@ -1081,7 +1081,7 @@ class bank(design.design): for port in self.read_ports: if self.port_data[port]: self.port_data[port].graph_exclude_precharge() - + def get_cell_name(self, inst_name, row, col): """ Gets the spice name of the target bitcell. @@ -1097,8 +1097,8 @@ class bank(design.design): self.bitcell_array.graph_exclude_bits(targ_row, targ_col) def clear_exclude_bits(self): - """ + """ Clears the bit exclusions """ self.bitcell_array.clear_exclude_bits() - + diff --git a/compiler/modules/bank_select.py b/compiler/modules/bank_select.py index 8a776d30..aa80a875 100644 --- a/compiler/modules/bank_select.py +++ b/compiler/modules/bank_select.py @@ -27,7 +27,7 @@ class bank_select(design.design): super().__init__(name) self.port = port - + self.create_netlist() if not OPTS.netlist_only: self.create_layout() @@ -36,7 +36,7 @@ class bank_select(design.design): self.add_pins() self.add_modules() self.create_instances() - + def create_layout(self): self.calculate_module_offsets() self.place_instances() @@ -44,12 +44,12 @@ class bank_select(design.design): self.height = max([x.uy() for x in self.inv_inst]) + self.m1_width self.width = max([x.rx() for x in self.inv_inst]) - + self.add_boundary() self.DRC_LVS() def add_pins(self): - + # Number of control lines in the bus if self.port == "rw": self.num_control_lines = 4 @@ -86,7 +86,7 @@ class bank_select(design.design): self.nor2 = factory.create(module_type="pnor2", height=height) self.add_mod(self.nor2) - + self.inv4x_nor = factory.create(module_type="pinv", height=height, size=4) self.add_mod(self.inv4x_nor) @@ -94,15 +94,15 @@ class bank_select(design.design): self.add_mod(self.nand2) def calculate_module_offsets(self): - + self.xoffset_nand = self.inv4x.width + 3 * self.m2_pitch + drc("pwell_to_nwell") self.xoffset_nor = self.inv4x.width + 3 * self.m2_pitch + drc("pwell_to_nwell") self.xoffset_bank_sel_inv = 0 self.xoffset_inputs = 0 self.yoffset_maxpoint = self.num_control_lines * self.inv4x.height - + def create_instances(self): - + self.bank_sel_inv=self.add_inst(name="bank_sel_inv", mod=self.inv_sel) self.connect_inst(["bank_sel", "bank_sel_bar", "vdd", "gnd"]) @@ -119,7 +119,7 @@ class bank_select(design.design): # These require OR (nor2+inv) gates since they are active low. # (writes occur on clk low) if input_name in ("clk_buf"): - + self.logic_inst.append(self.add_inst(name=name_nor, mod=self.nor2)) self.connect_inst([input_name, @@ -127,7 +127,7 @@ class bank_select(design.design): gated_name + "_temp_bar", "vdd", "gnd"]) - + # They all get inverters on the output self.inv_inst.append(self.add_inst(name=name_inv, mod=self.inv4x_nor)) @@ -135,7 +135,7 @@ class bank_select(design.design): gated_name, "vdd", "gnd"]) - + # the rest are AND (nand2+inv) gates else: self.logic_inst.append(self.add_inst(name=name_nand, @@ -155,7 +155,7 @@ class bank_select(design.design): "gnd"]) def place_instances(self): - + # bank select inverter self.bank_select_inv_position = vector(self.xoffset_bank_sel_inv, 0) @@ -166,27 +166,27 @@ class bank_select(design.design): logic_inst = self.logic_inst[i] inv_inst = self.inv_inst[i] - + input_name = self.input_control_signals[i] if i == 0: y_offset = 0 else: y_offset = self.inv4x_nor.height + self.inv4x.height * (i - 1) - + if i % 2: y_offset += self.inv4x.height mirror = "MX" else: mirror = "" - + # These require OR (nor2+inv) gates since they are active low. # (writes occur on clk low) if input_name in ("clk_buf"): - + logic_inst.place(offset=[self.xoffset_nor, y_offset], mirror=mirror) - + # the rest are AND (nand2+inv) gates else: logic_inst.place(offset=[self.xoffset_nand, y_offset], @@ -197,7 +197,7 @@ class bank_select(design.design): mirror=mirror) def route_instances(self): - + # bank_sel is vertical wire bank_sel_inv_pin = self.bank_sel_inv.get_pin("A") xoffset_bank_sel = bank_sel_inv_pin.lx() @@ -227,19 +227,19 @@ class bank_select(design.design): height=self.inv4x.height) self.add_via_center(layers=self.m1_stack, offset=bank_sel_bar_pin.rc()) - + for i in range(self.num_control_lines): logic_inst = self.logic_inst[i] inv_inst = self.inv_inst[i] - + input_name = self.input_control_signals[i] gated_name = self.control_signals[i] if input_name in ("clk_buf"): xoffset_bank_signal = xoffset_bank_sel_bar else: xoffset_bank_signal = xoffset_bank_sel - + # Connect the logic output to inverter input out_pin = logic_inst.get_pin("Z") out_pos = out_pin.center() @@ -248,7 +248,7 @@ class bank_select(design.design): mid1_pos = vector(0.5 * (out_pos.x + in_pos.x), out_pos.y) mid2_pos = vector(0.5 * (out_pos.x + in_pos.x), in_pos.y) self.add_path("m1", [out_pos, mid1_pos, mid2_pos, in_pos]) - + # Connect the logic B input to bank_sel / bank_sel_bar logic_pin = logic_inst.get_pin("B") logic_pos = logic_pin.center() @@ -304,7 +304,7 @@ class bank_select(design.design): self.add_layout_pin_rect_center(text=n, layer="m3", offset=pin_pos) - + # Add vdd/gnd supply rails gnd_pin = self.inv_inst[num].get_pin("gnd") left_gnd_pos = vector(0, gnd_pin.cy()) @@ -312,7 +312,7 @@ class bank_select(design.design): layer="m1", start=left_gnd_pos, end=gnd_pin.rc()) - + vdd_pin = self.inv_inst[num].get_pin("vdd") left_vdd_pos = vector(0, vdd_pin.cy()) self.add_layout_pin_segment_center(text="vdd", diff --git a/compiler/modules/bitcell_array.py b/compiler/modules/bitcell_array.py index 65470726..f586e9ed 100644 --- a/compiler/modules/bitcell_array.py +++ b/compiler/modules/bitcell_array.py @@ -25,11 +25,11 @@ class bitcell_array(bitcell_base_array): # This will create a default set of bitline/wordline names self.create_all_bitline_names() self.create_all_wordline_names() - + self.create_netlist() if not OPTS.netlist_only: self.create_layout() - + # We don't offset this because we need to align # the replica bitcell in the control logic # self.offset_all_coordinates() diff --git a/compiler/modules/bitcell_base_array.py b/compiler/modules/bitcell_base_array.py index 6ceff7ca..86ee5d43 100644 --- a/compiler/modules/bitcell_base_array.py +++ b/compiler/modules/bitcell_base_array.py @@ -47,11 +47,11 @@ class bitcell_base_array(design.design): "br_{0}_{1}".format(port, col)]) # Make a flat list too self.all_bitline_names = [x for sl in zip(*self.bitline_names) for x in sl] - + def create_all_wordline_names(self, row_size=None): if row_size == None: row_size = self.row_size - + for row in range(row_size): for port in self.all_ports: self.wordline_names[port].append("wl_{0}_{1}".format(port, row)) @@ -69,7 +69,7 @@ class bitcell_base_array(design.design): def get_bitcell_pins(self, row, col): """ Creates a list of connections in the bitcell, - indexed by column and row, for instance use in bitcell_array + indexed by column and row, for instance use in bitcell_array """ bitcell_pins = [] for port in self.all_ports: @@ -81,7 +81,7 @@ class bitcell_base_array(design.design): return bitcell_pins def get_rbl_wordline_names(self, port=None): - """ + """ Return the WL for the given RBL port. """ if port == None: @@ -102,7 +102,7 @@ class bitcell_base_array(design.design): return self.all_bitline_names else: return self.bitline_names[port] - + def get_all_bitline_names(self, port=None): """ Return ALL the bitline names (including rbl) """ temp = [] @@ -121,7 +121,7 @@ class bitcell_base_array(design.design): return self.all_wordline_names else: return self.wordline_names[port] - + def get_all_wordline_names(self, port=None): """ Return all the wordline names """ temp = [] @@ -133,7 +133,7 @@ class bitcell_base_array(design.design): if len(self.all_ports) > 1: temp.extend(self.get_rbl_wordline_names(1)) return temp - + def add_layout_pins(self): """ Add the layout pins """ bitline_names = self.cell.get_all_bitline_names() @@ -161,7 +161,7 @@ class bitcell_base_array(design.design): offset=wl_pin.ll().scale(0, 1), width=self.width, height=wl_pin.height()) - + # Copy a vdd/gnd layout pin from every cell for row in range(self.row_size): for col in range(self.column_size): diff --git a/compiler/modules/col_cap_array.py b/compiler/modules/col_cap_array.py index 24ecc640..8aaff142 100644 --- a/compiler/modules/col_cap_array.py +++ b/compiler/modules/col_cap_array.py @@ -34,7 +34,7 @@ class col_cap_array(bitcell_base_array): if not end_caps_enabled: self.create_all_wordline_names() self.create_all_bitline_names() - + self.add_modules() self.add_pins() self.create_instances() diff --git a/compiler/modules/column_mux_array.py b/compiler/modules/column_mux_array.py index 61c71672..2f1ee56e 100644 --- a/compiler/modules/column_mux_array.py +++ b/compiler/modules/column_mux_array.py @@ -46,7 +46,7 @@ class column_mux_array(design.design): # self.sel_layer = "m1" # self.sel_pitch = self.m2_pitch # self.bitline_layer = "m2" - + if preferred_directions[self.sel_layer] == "V": self.via_directions = ("H", "H") else: @@ -125,7 +125,7 @@ class column_mux_array(design.design): # Default to single spaced columns if not self.offsets: self.offsets = [n * self.mux.width for n in range(self.columns)] - + # For every column, add a pass gate for col_num, xoffset in enumerate(self.offsets[0:self.columns]): if cell_props.bitcell.mirror.y and (col_num + self.column_offset) % 2: @@ -209,7 +209,7 @@ class column_mux_array(design.design): br_offset_end = self.mux_inst[j + self.words_per_row - 1].get_pin("br_out").bc() bl_out_offset_end = bl_offset_end - vector(0, (self.words_per_row + 1) * self.sel_pitch) br_out_offset_end = br_offset_end - vector(0, (self.words_per_row + 2) * self.sel_pitch) - + self.add_path(self.sel_layer, [bl_out_offset_begin, bl_out_offset_end]) self.add_path(self.sel_layer, [br_out_offset_begin, br_out_offset_end]) diff --git a/compiler/modules/control_logic.py b/compiler/modules/control_logic.py index 7f9035d9..b0620a38 100644 --- a/compiler/modules/control_logic.py +++ b/compiler/modules/control_logic.py @@ -28,7 +28,7 @@ class control_logic(design.design): self.add_comment("num_rows: {0}".format(num_rows)) self.add_comment("words_per_row: {0}".format(words_per_row)) self.add_comment("word_size {0}".format(word_size)) - + self.sram=sram self.num_rows = num_rows self.words_per_row = words_per_row @@ -42,21 +42,21 @@ class control_logic(design.design): self.num_cols = word_size * words_per_row + self.num_spare_cols self.num_words = num_rows * words_per_row - + self.enable_delay_chain_resizing = False self.inv_parasitic_delay = logical_effort.logical_effort.pinv - + # Determines how much larger the sen delay should be. Accounts for possible error in model. # FIXME: This should be made a parameter self.wl_timing_tolerance = 1 self.wl_stage_efforts = None self.sen_stage_efforts = None - + if self.port_type == "rw": self.num_control_signals = 2 else: self.num_control_signals = 1 - + self.create_netlist() if not OPTS.netlist_only: self.create_layout() @@ -66,7 +66,7 @@ class control_logic(design.design): self.add_pins() self.add_modules() self.create_instances() - + def create_layout(self): """ Create layout and route between modules """ self.place_instances() @@ -84,16 +84,16 @@ class control_logic(design.design): def add_modules(self): """ Add all the required modules """ - + self.dff = factory.create(module_type="dff_buf") dff_height = self.dff.height - + self.ctrl_dff_array = factory.create(module_type="dff_buf_array", rows=self.num_control_signals, columns=1) - + self.add_mod(self.ctrl_dff_array) - + self.and2 = factory.create(module_type="pand2", size=12, height=dff_height) @@ -103,7 +103,7 @@ class control_logic(design.design): size=self.num_cols, height=dff_height) self.add_mod(self.rbl_driver) - + # clk_buf drives a flop for every address addr_flops = math.log(self.num_words, 2) + math.log(self.words_per_row, 2) # plus data flops and control flops @@ -114,13 +114,13 @@ class control_logic(design.design): self.clk_buf_driver = factory.create(module_type="pdriver", fanout=clock_fanout, height=dff_height) - + self.add_mod(self.clk_buf_driver) # We will use the maximum since this same value is used to size the wl_en # and the p_en_bar drivers # max_fanout = max(self.num_rows, self.num_cols) - + # wl_en drives every row in the bank self.wl_en_driver = factory.create(module_type="pdriver", fanout=self.num_rows, @@ -144,7 +144,7 @@ class control_logic(design.design): size=1, height=dff_height) self.add_mod(self.inv) - + # p_en_bar drives every column in the bitcell array # but it is sized the same as the wl_en driver with # prepended 3 inverter stages to guarantee it is slower and odd polarity @@ -183,14 +183,14 @@ class control_logic(design.design): # Fanout can be varied as well but is a little more complicated but potentially optimal. debug.info(1, "Setting delay chain to {} stages with {} fanout to match {} delay".format(delay_stages, delay_fanout, required_delay)) return (delay_stages, delay_fanout) - + def get_dynamic_delay_fanout_list(self, previous_stages, previous_fanout): """Determine the size of the delay chain used for the Sense Amp Enable using path delays""" previous_delay_per_stage = previous_fanout + 1 + self.inv_parasitic_delay previous_delay_chain_delay = previous_delay_per_stage * previous_stages debug.info(2, "Previous delay chain produced {} delay units".format(previous_delay_chain_delay)) - + fanout_rise = fanout_fall = 2 # This can be anything >=2 # The delay chain uses minimum sized inverters. There are (fanout+1)*stages inverters and each # inverter adds 1 unit of delay (due to minimum size). This also depends on the pinv value @@ -201,7 +201,7 @@ class control_logic(design.design): debug.info(2, "Required delays from chain: fall={}, rise={}".format(required_delay_fall, required_delay_rise)) - + # If the fanout is different between rise/fall by this amount. Stage algorithm is made more pessimistic. WARNING_FANOUT_DIFF = 5 stages_close = False @@ -218,7 +218,7 @@ class control_logic(design.design): stages_close = True safe_fanout_rise = fanout_rise safe_fanout_fall = fanout_fall - + if stages_fall == stages_rise: break elif abs(stages_fall - stages_rise) == 1 and WARNING_FANOUT_DIFF < abs(fanout_fall - fanout_rise): @@ -232,14 +232,14 @@ class control_logic(design.design): fanout_fall+=1 else: fanout_rise+=1 - + total_stages = max(stages_fall, stages_rise) * 2 debug.info(1, "New Delay chain: stages={}, fanout_rise={}, fanout_fall={}".format(total_stages, fanout_rise, fanout_fall)) - + # Creates interleaved fanout list of rise/fall delays. Assumes fall is the first stage. stage_list = [fanout_fall if i % 2==0 else fanout_rise for i in range(total_stages)] return stage_list - + def calculate_stages_with_fixed_fanout(self, required_delay, fanout): from math import ceil # Delay being negative is not an error. It implies that any amount of stages would have a negative effect on the overall delay @@ -249,7 +249,7 @@ class control_logic(design.design): delay_per_stage = fanout + 1 + self.inv_parasitic_delay delay_stages = ceil(required_delay / delay_per_stage) return delay_stages - + def setup_signal_busses(self): """ Setup bus names, determine the size of the busses etc """ @@ -265,7 +265,7 @@ class control_logic(design.design): self.dff_output_list = ["cs_bar", "cs", "we_bar", "we"] else: self.dff_output_list = ["cs_bar", "cs"] - + # list of output control signals (for making a vertical bus) if self.port_type == "rw": self.internal_bus_list = ["rbl_bl_delay_bar", "rbl_bl_delay", "gated_clk_bar", "gated_clk_buf", "we", "we_bar", "clk_buf", "cs"] @@ -275,7 +275,7 @@ class control_logic(design.design): self.internal_bus_list = ["rbl_bl_delay_bar", "rbl_bl_delay", "gated_clk_bar", "gated_clk_buf", "clk_buf", "cs"] # leave space for the bus plus one extra space self.internal_bus_width = (len(self.internal_bus_list) + 1) * self.m2_pitch - + # Outputs to the bank if self.port_type == "rw": self.output_list = ["s_en", "w_en"] @@ -286,14 +286,14 @@ class control_logic(design.design): self.output_list.append("p_en_bar") self.output_list.append("wl_en") self.output_list.append("clk_buf") - + self.supply_list = ["vdd", "gnd"] def route_rails(self): """ Add the input signal inverted tracks """ height = self.control_logic_center.y - self.m2_pitch offset = vector(self.ctrl_dff_array.width, 0) - + self.input_bus = self.create_vertical_bus("m2", offset, self.internal_bus_list, @@ -325,7 +325,7 @@ class control_logic(design.design): # All of the control logic is placed to the right of the DFFs and bus self.control_x_offset = self.ctrl_dff_array.width + self.internal_bus_width - + row = 0 # Add the logic on the right of the bus self.place_clk_buf_row(row) @@ -396,7 +396,7 @@ class control_logic(design.design): # Add to the right of the control rows and routing channel offset = vector(self.delay_chain.width, y_off) self.delay_inst.place(offset, mirror="MY") - + def route_delay(self): out_pos = self.delay_inst.get_pin("out").bc() @@ -408,21 +408,21 @@ class control_logic(design.design): self.add_wire(self.m1_stack, [out_pos, mid1, in_pos]) self.add_via_center(layers=self.m1_stack, offset=in_pos) - + # Input from RBL goes to the delay line for futher delay self.copy_layout_pin(self.delay_inst, "in", "rbl_bl") - + def create_clk_buf_row(self): """ Create the multistage and gated clock buffer """ self.clk_buf_inst = self.add_inst(name="clkbuf", mod=self.clk_buf_driver) self.connect_inst(["clk", "clk_buf", "vdd", "gnd"]) - + def place_clk_buf_row(self, row): x_offset = self.control_x_offset - + x_offset = self.place_util(self.clk_buf_inst, x_offset, row) - + self.row_end_inst.append(self.clk_buf_inst) def route_clk_buf(self): @@ -443,17 +443,17 @@ class control_logic(design.design): self.clk_bar_inst = self.add_inst(name="inv_clk_bar", mod=self.inv) self.connect_inst(["clk_buf", "clk_bar", "vdd", "gnd"]) - + self.gated_clk_bar_inst = self.add_inst(name="and2_gated_clk_bar", mod=self.and2) self.connect_inst(["clk_bar", "cs", "gated_clk_bar", "vdd", "gnd"]) def place_gated_clk_bar_row(self, row): x_offset = self.control_x_offset - + x_offset = self.place_util(self.clk_bar_inst, x_offset, row) x_offset = self.place_util(self.gated_clk_bar_inst, x_offset, row) - + self.row_end_inst.append(self.gated_clk_bar_inst) def route_gated_clk_bar(self): @@ -468,7 +468,7 @@ class control_logic(design.design): self.add_via_stack_center(from_layer=out_pin.layer, to_layer=in_pin.layer, offset=in_pos) - + # This is the second gate over, so it needs to be on M3 clkbuf_map = zip(["B"], ["cs"]) @@ -495,9 +495,9 @@ class control_logic(design.design): x_offset = self.control_x_offset x_offset = self.place_util(self.gated_clk_buf_inst, x_offset, row) - + self.row_end_inst.append(self.gated_clk_buf_inst) - + def route_gated_clk_buf(self): clkbuf_map = zip(["A", "B"], ["clk_buf", "cs"]) self.connect_vertical_bus(clkbuf_map, @@ -514,7 +514,7 @@ class control_logic(design.design): self.add_via_stack_center(from_layer=z_pin.layer, to_layer="m2", offset=z_pin.center()) - + def create_wlen_row(self): # input pre_p_en, output: wl_en self.wl_en_inst=self.add_inst(name="buf_wl_en", @@ -531,7 +531,7 @@ class control_logic(design.design): def route_wlen(self): wlen_map = zip(["A"], ["gated_clk_bar"]) self.connect_vertical_bus(wlen_map, self.wl_en_inst, self.input_bus) - + self.connect_output(self.wl_en_inst, "Z", "wl_en") def create_pen_row(self): @@ -544,7 +544,7 @@ class control_logic(design.design): self.p_en_bar_driver_inst=self.add_inst(name="buf_p_en_bar", mod=self.p_en_bar_driver) self.connect_inst(["p_en_bar_unbuf", "p_en_bar", "vdd", "gnd"]) - + def place_pen_row(self, row): x_offset = self.control_x_offset @@ -568,7 +568,7 @@ class control_logic(design.design): offset=in_pin.center()) self.connect_output(self.p_en_bar_driver_inst, "Z", "p_en_bar") - + def create_sen_row(self): """ Create the sense enable buffer. """ if self.port_type=="rw": @@ -582,24 +582,24 @@ class control_logic(design.design): # we also must wait until the bitline has been discharged enough for proper sensing # hence we use rbl_bl_delay as well. self.connect_inst(["rbl_bl_delay", "gated_clk_bar", input_name, "s_en", "vdd", "gnd"]) - + def place_sen_row(self, row): x_offset = self.control_x_offset x_offset = self.place_util(self.s_en_gate_inst, x_offset, row) - + self.row_end_inst.append(self.s_en_gate_inst) - + def route_sen(self): if self.port_type=="rw": input_name = "we_bar" else: input_name = "cs" - + sen_map = zip(["A", "B", "C"], ["rbl_bl_delay", "gated_clk_bar", input_name]) self.connect_vertical_bus(sen_map, self.s_en_gate_inst, self.input_bus) - + self.connect_output(self.s_en_gate_inst, "Z", "s_en") def create_rbl_delay_row(self): @@ -612,15 +612,15 @@ class control_logic(design.design): x_offset = self.control_x_offset x_offset = self.place_util(self.rbl_bl_delay_inv_inst, x_offset, row) - + self.row_end_inst.append(self.rbl_bl_delay_inv_inst) - + def route_rbl_delay(self): # Connect from delay line # Connect to rail self.route_output_to_bus_jogged(self.rbl_bl_delay_inv_inst, "rbl_bl_delay_bar") - + rbl_map = zip(["A"], ["rbl_bl_delay"]) self.connect_vertical_bus(rbl_map, self.rbl_bl_delay_inv_inst, self.input_bus) @@ -638,26 +638,26 @@ class control_logic(design.design): mod=self.wen_and) # Only drive the writes in the second half of the clock cycle during a write operation. self.connect_inst([input_name, "rbl_bl_delay_bar", "gated_clk_bar", "w_en", "vdd", "gnd"]) - + def place_wen_row(self, row): x_offset = self.control_x_offset x_offset = self.place_util(self.w_en_gate_inst, x_offset, row) - + self.row_end_inst.append(self.w_en_gate_inst) - + def route_wen(self): if self.port_type == "rw": input_name = "we" else: # No we for write-only reports, so use cs input_name = "cs" - + wen_map = zip(["A", "B", "C"], [input_name, "rbl_bl_delay_bar", "gated_clk_bar"]) self.connect_vertical_bus(wen_map, self.w_en_gate_inst, self.input_bus) self.connect_output(self.w_en_gate_inst, "Z", "w_en") - + def create_dffs(self): self.ctrl_dff_inst=self.add_inst(name="ctrl_dffs", mod=self.ctrl_dff_array) @@ -669,7 +669,7 @@ class control_logic(design.design): def place_dffs(self): self.ctrl_dff_inst.place(vector(0, 0)) - + def route_dffs(self): if self.port_type == "rw": dff_out_map = zip(["dout_bar_0", "dout_bar_1", "dout_1"], ["cs", "we", "we_bar"]) @@ -678,7 +678,7 @@ class control_logic(design.design): else: dff_out_map = zip(["dout_bar_0"], ["cs"]) self.connect_vertical_bus(dff_out_map, self.ctrl_dff_inst, self.input_bus, self.m2_stack[::-1]) - + # Connect the clock rail to the other clock rail # by routing in the supply rail track to avoid channel conflicts in_pos = self.ctrl_dff_inst.get_pin("clk").uc() @@ -691,7 +691,7 @@ class control_logic(design.design): self.copy_layout_pin(self.ctrl_dff_inst, "din_0", "csb") if (self.port_type == "rw"): self.copy_layout_pin(self.ctrl_dff_inst, "din_1", "web") - + def get_offset(self, row): """ Compute the y-offset and mirroring """ y_off = row * self.and2.height @@ -702,14 +702,14 @@ class control_logic(design.design): mirror="R0" return (y_off, mirror) - + def connect_output(self, inst, pin_name, out_name): """ Create an output pin on the right side from the pin of a given instance. """ - + out_pin = inst.get_pin(pin_name) out_pos = out_pin.center() right_pos = out_pos + vector(self.width - out_pin.cx(), 0) - + self.add_via_stack_center(from_layer=out_pin.layer, to_layer="m2", offset=out_pos) @@ -722,7 +722,7 @@ class control_logic(design.design): """ Add vdd and gnd to the instance cells """ supply_layer = self.dff.get_pin("vdd").layer - + max_row_x_loc = max([inst.rx() for inst in self.row_end_inst]) for inst in self.row_end_inst: pins = inst.get_pins("vdd") @@ -740,13 +740,13 @@ class control_logic(design.design): pin_loc = vector(max_row_x_loc, pin.rc().y) self.add_power_pin("gnd", pin_loc, start_layer=pin.layer) self.add_path(supply_layer, [row_loc, pin_loc]) - + self.copy_layout_pin(self.delay_inst, "gnd") self.copy_layout_pin(self.delay_inst, "vdd") self.copy_layout_pin(self.ctrl_dff_inst, "gnd") self.copy_layout_pin(self.ctrl_dff_inst, "vdd") - + def add_lvs_correspondence_points(self): """ This adds some points for easier debugging if LVS goes wrong. These should probably be turned off by default though, since extraction @@ -772,10 +772,10 @@ class control_logic(design.design): offset=pin.ll(), height=pin.height(), width=pin.width()) - + def graph_exclude_dffs(self): """Exclude dffs from graph as they do not represent critical path""" - + self.graph_inst_exclude.add(self.ctrl_dff_inst) if self.port_type=="rw" or self.port_type=="w": self.graph_inst_exclude.add(self.w_en_gate_inst) @@ -799,4 +799,4 @@ class control_logic(design.design): self.add_via_stack_center(from_layer=out_pin.layer, to_layer="m2", offset=out_pos) - + diff --git a/compiler/modules/custom_cell.py b/compiler/modules/custom_cell.py index 2591de76..11312cd4 100644 --- a/compiler/modules/custom_cell.py +++ b/compiler/modules/custom_cell.py @@ -126,13 +126,13 @@ class custom_cell(design.design): if w == self.write_size: w = 0 windex+=1 - + elif self.num_spare_cols and not self.write_size: self.connect_inst([self.data_name + "_{0}".format(index), self.get_bl_name() + "_{0}".format(index), self.get_br_name() + "_{0}".format(index), self.en_name + "_{0}".format(0), "vdd", "gnd"]) - + else: self.connect_inst([self.data_name + "_{0}".format(index), self.get_bl_name() + "_{0}".format(index), @@ -177,13 +177,13 @@ class custom_cell(design.design): for i in range(self.num_spare_cols): index = self.word_size + i xoffset = (self.columns + i) * self.driver_spacing - + if cell_properties.bitcell.mirror.y and (i + self.column_offset) % 2: mirror = "MY" xoffset = xoffset + self.driver.width else: mirror = "" - + base = vector(xoffset, 0) self.driver_insts[index].place(offset=base, mirror=mirror) @@ -233,14 +233,14 @@ class custom_cell(design.design): offset=en_pin.ll(), width=wmask_en_len - en_gap, height=en_pin.height()) - + for i in range(self.num_spare_cols): inst = self.driver_insts[self.word_size + i] en_pin = inst.get_pin(inst.mod.en_name) self.add_layout_pin(text=self.en_name + "_{0}".format(i + self.num_wmasks), layer="m1", offset=en_pin.lr() + vector(-drc("minwidth_m1"),0)) - + elif self.num_spare_cols and not self.write_size: # shorten enable rail to accomodate those for spare write drivers inst = self.driver_insts[0] diff --git a/compiler/modules/delay_chain.py b/compiler/modules/delay_chain.py index 30126b63..fa6df322 100644 --- a/compiler/modules/delay_chain.py +++ b/compiler/modules/delay_chain.py @@ -24,14 +24,14 @@ class delay_chain(design.design): super().__init__(name) debug.info(1, "creating delay chain {0}".format(str(fanout_list))) self.add_comment("fanouts: {0}".format(str(fanout_list))) - + # Two fanouts are needed so that we can route the vdd/gnd connections for f in fanout_list: debug.check(f>=2, "Must have >=2 fanouts for each stage.") # number of inverters including any fanout loads. self.fanout_list = fanout_list - + self.create_netlist() if not OPTS.netlist_only: self.create_layout() @@ -40,7 +40,7 @@ class delay_chain(design.design): self.add_modules() self.add_pins() self.create_inverters() - + def create_layout(self): # Each stage is a a row self.height = len(self.fanout_list) * self.inv.height @@ -53,7 +53,7 @@ class delay_chain(design.design): self.add_layout_pins() self.add_boundary() self.DRC_LVS() - + def add_pins(self): """ Add the pins of the delay chain""" self.add_pin("in", "INPUT") @@ -86,7 +86,7 @@ class delay_chain(design.design): else: stagein_name = "dout_{}".format(stage_num) self.connect_inst([stagein_name, stageout_name, "vdd", "gnd"]) - + # Now add the dummy loads to the right self.load_inst_map[cur_driver]=[] for i in range(fanout_size): @@ -95,7 +95,7 @@ class delay_chain(design.design): # Fanout stage is always driven by driver and output is disconnected disconnect_name = "n_{0}_{1}".format(stage_num, i) self.connect_inst([stageout_name, disconnect_name, "vdd", "gnd"]) - + # Keep track of all the loads to connect their inputs as a load self.load_inst_map[cur_driver].append(cur_load) @@ -108,19 +108,19 @@ class delay_chain(design.design): else: inv_mirror = "R0" inv_offset = vector(0, stage_num * self.inv.height) - + # Add the inverter cur_driver=self.driver_inst_list[stage_num] cur_driver.place(offset=inv_offset, mirror=inv_mirror) - + # Now add the dummy loads to the right load_list = self.load_inst_map[cur_driver] for i in range(fanout_size): inv_offset += vector(self.inv.width, 0) load_list[i].place(offset=inv_offset, mirror=inv_mirror) - + def add_route(self, pin1, pin2): """ This guarantees that we route from the top to bottom row correctly. """ pin1_pos = pin1.center() @@ -131,7 +131,7 @@ class delay_chain(design.design): mid_point = vector(pin2_pos.x, 0.5 * (pin1_pos.y + pin2_pos.y)) # Written this way to guarantee it goes right first if we are switching rows self.add_path("m2", [pin1_pos, vector(pin1_pos.x, mid_point.y), mid_point, vector(mid_point.x, pin2_pos.y), pin2_pos]) - + def route_inverters(self): """ Add metal routing for each of the fanout stages """ @@ -180,12 +180,12 @@ class delay_chain(design.design): self.add_power_pin(pin_name, pin.rc() - vector(self.m1_pitch, 0), start_layer=pin.layer) - + pin = load_list[-2].get_pin(pin_name) self.add_power_pin(pin_name, pin.rc() - vector(self.m1_pitch, 0), start_layer=pin.layer) - + def add_layout_pins(self): # input is A pin of first inverter diff --git a/compiler/modules/dff_array.py b/compiler/modules/dff_array.py index cb82443b..0cbe8fe5 100644 --- a/compiler/modules/dff_array.py +++ b/compiler/modules/dff_array.py @@ -27,7 +27,7 @@ class dff_array(design.design): super().__init__(name) debug.info(1, "Creating {0} rows={1} cols={2}".format(self.name, self.rows, self.columns)) self.add_comment("rows: {0} cols: {1}".format(rows, columns)) - + self.create_netlist() if not OPTS.netlist_only: self.create_layout() @@ -36,11 +36,11 @@ class dff_array(design.design): self.add_modules() self.add_pins() self.create_dff_array() - + def create_layout(self): self.width = self.columns * self.dff.width self.height = self.rows * self.dff.height - + self.place_dff_array() self.add_layout_pins() self.add_boundary() @@ -49,7 +49,7 @@ class dff_array(design.design): def add_modules(self): self.dff = factory.create(module_type="dff") self.add_mod(self.dff) - + def add_pins(self): for row in range(self.rows): for col in range(self.columns): @@ -86,7 +86,7 @@ class dff_array(design.design): mirror = "MX" self.dff_insts[row, col].place(offset=base, mirror=mirror) - + def get_din_name(self, row, col): if self.columns == 1: din_name = "din_{0}".format(row) @@ -96,7 +96,7 @@ class dff_array(design.design): din_name = "din_{0}_{1}".format(row, col) return din_name - + def get_dout_name(self, row, col): if self.columns == 1: dout_name = "dout_{0}".format(row) @@ -106,7 +106,7 @@ class dff_array(design.design): dout_name = "dout_{0}_{1}".format(row, col) return dout_name - + def add_layout_pins(self): for row in range(self.rows): for col in range(self.columns): @@ -117,7 +117,7 @@ class dff_array(design.design): # Continous gnd rail along with label. gnd_pin=self.dff_insts[row, col].get_pin("gnd") self.add_power_pin("gnd", gnd_pin.center(), start_layer=gnd_pin.layer) - + for row in range(self.rows): for col in range(self.columns): din_pin = self.dff_insts[row, col].get_pin("D") diff --git a/compiler/modules/dff_buf.py b/compiler/modules/dff_buf.py index 1290bf12..32d07958 100644 --- a/compiler/modules/dff_buf.py +++ b/compiler/modules/dff_buf.py @@ -21,7 +21,7 @@ class dff_buf(design.design): and qbar. This is to enable driving large fanout loads. """ unique_id = 1 - + def __init__(self, inv1_size=2, inv2_size=4, name=""): if name=="": @@ -30,7 +30,7 @@ class dff_buf(design.design): super().__init__(name) debug.info(1, "Creating {}".format(self.name)) self.add_comment("inv1: {0} inv2: {1}".format(inv1_size, inv2_size)) - + # This is specifically for SCMOS where the DFF vdd/gnd rails are more than min width. # This causes a DRC in the pinv which assumes min width rails. This ensures the output # contact does not violate spacing to the rail in the NMOS. @@ -39,7 +39,7 @@ class dff_buf(design.design): self.inv1_size=inv1_size self.inv2_size=inv2_size - + self.create_netlist() if not OPTS.netlist_only: self.create_layout() @@ -57,7 +57,7 @@ class dff_buf(design.design): self.add_layout_pins() self.add_boundary() self.DRC_LVS() - + def add_modules(self): self.dff = factory.create(module_type="dff") self.add_mod(self.dff) @@ -71,7 +71,7 @@ class dff_buf(design.design): size=self.inv2_size, height=self.dff.height) self.add_mod(self.inv2) - + def add_pins(self): self.add_pin("D", "INPUT") self.add_pin("Q", "OUTPUT") @@ -93,7 +93,7 @@ class dff_buf(design.design): self.inv1_inst=self.add_inst(name="dff_buf_inv1", mod=self.inv1) self.connect_inst(["qint", "Qb", "vdd", "gnd"]) - + self.inv2_inst=self.add_inst(name="dff_buf_inv2", mod=self.inv2) self.connect_inst(["Qb", "Q", "vdd", "gnd"]) @@ -119,16 +119,16 @@ class dff_buf(design.design): except AttributeError: pass self.inv1_inst.place(vector(self.dff_inst.rx() + well_spacing + self.well_extend_active, 0)) - + # Add INV2 to the right self.inv2_inst.place(vector(self.inv1_inst.rx(), 0)) - + def route_wires(self): if "li" in layer: self.route_layer = "li" else: self.route_layer = "m1" - + # Route dff q to inv1 a q_pin = self.dff_inst.get_pin("Q") a1_pin = self.inv1_inst.get_pin("A") @@ -143,7 +143,7 @@ class dff_buf(design.design): a2_pin = self.inv2_inst.get_pin("A") self.mid_qb_pos = vector(0.5 * (z1_pin.cx() + a2_pin.cx()), z1_pin.cy()) self.add_zjog(z1_pin.layer, z1_pin.center(), a2_pin.center()) - + def add_layout_pins(self): # Continous vdd rail along with label. @@ -161,7 +161,7 @@ class dff_buf(design.design): offset=gnd_pin.ll(), width=self.width, height=vdd_pin.height()) - + clk_pin = self.dff_inst.get_pin("clk") self.add_layout_pin(text="clk", layer=clk_pin.layer, diff --git a/compiler/modules/dff_buf_array.py b/compiler/modules/dff_buf_array.py index d6382973..2d885ccc 100644 --- a/compiler/modules/dff_buf_array.py +++ b/compiler/modules/dff_buf_array.py @@ -19,7 +19,7 @@ class dff_buf_array(design.design): Unlike the data flops, these are never spaced out. """ unique_id = 1 - + def __init__(self, rows, columns, inv1_size=2, inv2_size=4, name=""): self.rows = rows self.columns = columns @@ -31,10 +31,10 @@ class dff_buf_array(design.design): debug.info(1, "Creating {}".format(self.name)) self.add_comment("rows: {0} cols: {1}".format(rows, columns)) self.add_comment("inv1: {0} inv2: {1}".format(inv1_size, inv2_size)) - + self.inv1_size = inv1_size self.inv2_size = inv2_size - + self.create_netlist() if not OPTS.netlist_only: self.create_layout() @@ -110,7 +110,7 @@ class dff_buf_array(design.design): pass dff_pitch = self.dff.width + well_spacing + self.well_extend_active - + for row in range(self.rows): for col in range(self.columns): # name = "Xdff_r{0}_c{1}".format(row, col) @@ -122,7 +122,7 @@ class dff_buf_array(design.design): mirror = "MX" self.dff_insts[row, col].place(offset=base, mirror=mirror) - + def get_din_name(self, row, col): if self.columns == 1: din_name = "din_{0}".format(row) @@ -132,7 +132,7 @@ class dff_buf_array(design.design): din_name = "din_{0}_{1}".format(row, col) return din_name - + def get_dout_name(self, row, col): if self.columns == 1: dout_name = "dout_{0}".format(row) @@ -142,7 +142,7 @@ class dff_buf_array(design.design): dout_name = "dout_{0}_{1}".format(row, col) return dout_name - + def get_dout_bar_name(self, row, col): if self.columns == 1: dout_bar_name = "dout_bar_{0}".format(row) @@ -158,11 +158,11 @@ class dff_buf_array(design.design): vdd0_pin=self.dff_insts[row, 0].get_pin("vdd") vddn_pin=self.dff_insts[row, self.columns - 1].get_pin("vdd") self.add_path(vdd0_pin.layer, [vdd0_pin.lc(), vddn_pin.rc()], width=vdd0_pin.height()) - + gnd0_pin=self.dff_insts[row, 0].get_pin("gnd") gndn_pin=self.dff_insts[row, self.columns - 1].get_pin("gnd") self.add_path(gnd0_pin.layer, [gnd0_pin.lc(), gndn_pin.rc()], width=gnd0_pin.height()) - + for row in range(self.rows): for col in range(self.columns): # Continous vdd rail along with label. @@ -172,9 +172,9 @@ class dff_buf_array(design.design): # Continous gnd rail along with label. gnd_pin=self.dff_insts[row, col].get_pin("gnd") self.add_power_pin("gnd", gnd_pin.lc(), start_layer=gnd_pin.layer) - + def add_layout_pins(self): - + for row in range(self.rows): for col in range(self.columns): din_pin = self.dff_insts[row, col].get_pin("D") @@ -200,7 +200,7 @@ class dff_buf_array(design.design): offset=dout_bar_pin.ll(), width=dout_bar_pin.width(), height=dout_bar_pin.height()) - + # Create vertical spines to a single horizontal rail clk_pin = self.dff_insts[0, 0].get_pin("clk") clk_ypos = 2 * self.m3_pitch + self.m3_width diff --git a/compiler/modules/dff_inv.py b/compiler/modules/dff_inv.py index 8f50f9e8..ffd02025 100644 --- a/compiler/modules/dff_inv.py +++ b/compiler/modules/dff_inv.py @@ -19,7 +19,7 @@ class dff_inv(design.design): do not have Qbar, so this will create it. """ unique_id = 1 - + def __init__(self, inv_size=2, name=""): if name=="": @@ -30,7 +30,7 @@ class dff_inv(design.design): self.add_comment("inv: {0}".format(inv_size)) self.inv_size = inv_size - + # This is specifically for SCMOS where the DFF vdd/gnd rails are more than min width. # This causes a DRC in the pinv which assumes min width rails. This ensures the output # contact does not violate spacing to the rail in the NMOS. @@ -44,7 +44,7 @@ class dff_inv(design.design): self.add_pins() self.add_modules() self.create_modules() - + def create_layout(self): self.width = self.dff.width + self.inv1.width self.height = self.dff.height @@ -52,10 +52,10 @@ class dff_inv(design.design): self.place_modules() self.add_wires() self.add_layout_pins() - + self.add_boundary() self.DRC_LVS() - + def add_pins(self): self.add_pin("D") self.add_pin("Q") @@ -67,7 +67,7 @@ class dff_inv(design.design): def add_modules(self): self.dff = dff_inv.dff_inv(self.inv_size) self.add_mod(self.dff) - + self.inv1 = factory.create(module_type="pinv", size=self.inv_size, height=self.dff.height) @@ -88,8 +88,8 @@ class dff_inv(design.design): # Place the INV1 to the right self.inv1_inst.place(vector(self.dff_inst.rx(),0)) - - + + def add_wires(self): # Route dff q to inv1 a q_pin = self.dff_inst.get_pin("Q") @@ -106,7 +106,7 @@ class dff_inv(design.design): self.add_via_center(layers=self.m1_stack, offset=a1_pin.center()) - + def add_layout_pins(self): # Continous vdd rail along with label. @@ -124,7 +124,7 @@ class dff_inv(design.design): offset=gnd_pin.ll(), width=self.width, height=vdd_pin.height()) - + clk_pin = self.dff_inst.get_pin("clk") self.add_layout_pin(text="clk", layer=clk_pin.layer, diff --git a/compiler/modules/dff_inv_array.py b/compiler/modules/dff_inv_array.py index 1687e043..59fdfade 100644 --- a/compiler/modules/dff_inv_array.py +++ b/compiler/modules/dff_inv_array.py @@ -19,7 +19,7 @@ class dff_inv_array(design.design): Unlike the data flops, these are never spaced out. """ unique_id = 1 - + def __init__(self, rows, columns, inv_size=2, name=""): self.rows = rows self.columns = columns @@ -31,9 +31,9 @@ class dff_inv_array(design.design): debug.info(1, "Creating {}".format(self.name)) self.add_comment("rows: {0} cols: {1}".format(rows, columns)) self.add_comment("inv1: {0}".format(inv1_size)) - + self.inv_size = inv_size - + self.create_netlist() if not OPTS.netlist_only: self.create_layout() @@ -42,7 +42,7 @@ class dff_inv_array(design.design): self.add_pins() self.add_modules() self.create_dff_array() - + def create_layout(self): self.width = self.columns * self.dff.width self.height = self.rows * self.dff.height @@ -53,14 +53,14 @@ class dff_inv_array(design.design): self.DRC_LVS() def add_modules(self): - self.dff = factory.create(module_type="dff") + self.dff = factory.create(module_type="dff") self.add_mod(self.dff) def add_pins(self): - for row in range(self.rows): + for row in range(self.rows): for col in range(self.columns): self.add_pin(self.get_din_name(row,col), "INPUT") - for row in range(self.rows): + for row in range(self.rows): for col in range(self.columns): self.add_pin(self.get_dout_name(row,col), "OUTPUT") self.add_pin(self.get_dout_bar_name(row,col), "OUTPUT") @@ -70,20 +70,20 @@ class dff_inv_array(design.design): def create_dff_array(self): self.dff_insts={} - for row in range(self.rows): + for row in range(self.rows): for col in range(self.columns): name = "Xdff_r{0}_c{1}".format(row,col) self.dff_insts[row,col]=self.add_inst(name=name, mod=self.dff) self.connect_inst([self.get_din_name(row,col), self.get_dout_name(row,col), - self.get_dout_bar_name(row,col), + self.get_dout_bar_name(row,col), "clk", "vdd", "gnd"]) def place_dff_array(self): - for row in range(self.rows): + for row in range(self.rows): for col in range(self.columns): name = "Xdff_r{0}_c{1}".format(row,col) if (row % 2 == 0): @@ -92,9 +92,9 @@ class dff_inv_array(design.design): else: base = vector(col*self.dff.width,(row+1)*self.dff.height) mirror = "MX" - self.dff_insts[row,col].place(offset=base, + self.dff_insts[row,col].place(offset=base, mirror=mirror) - + def get_din_name(self, row, col): if self.columns == 1: din_name = "din_{0}".format(row) @@ -104,7 +104,7 @@ class dff_inv_array(design.design): din_name = "din_{0}_{1}".format(row,col) return din_name - + def get_dout_name(self, row, col): if self.columns == 1: dout_name = "dout_{0}".format(row) @@ -114,7 +114,7 @@ class dff_inv_array(design.design): dout_name = "dout_{0}_{1}".format(row,col) return dout_name - + def get_dout_bar_name(self, row, col): if self.columns == 1: dout_bar_name = "dout_bar_{0}".format(row) @@ -124,10 +124,10 @@ class dff_inv_array(design.design): dout_bar_name = "dout_bar_{0}_{1}".format(row,col) return dout_bar_name - + def add_layout_pins(self): for row in range(self.rows): - for col in range(self.columns): + for col in range(self.columns): # Adds power pin on left of row vdd_pin=self.dff_insts[row,col].get_pin("vdd") self.add_power_pin("vdd", vdd_pin.lc()) @@ -135,10 +135,10 @@ class dff_inv_array(design.design): # Adds gnd pin on left of row gnd_pin=self.dff_insts[row,col].get_pin("gnd") self.add_power_pin("gnd", gnd_pin.lc()) - - for row in range(self.rows): - for col in range(self.columns): + + for row in range(self.rows): + for col in range(self.columns): din_pin = self.dff_insts[row,col].get_pin("D") debug.check(din_pin.layer=="m2","DFF D pin not on metal2") self.add_layout_pin(text=self.get_din_name(row,col), @@ -163,7 +163,7 @@ class dff_inv_array(design.design): width=dout_bar_pin.width(), height=dout_bar_pin.height()) - + # Create vertical spines to a single horizontal rail clk_pin = self.dff_insts[0,0].get_pin("clk") clk_ypos = 2*self.m3_pitch+self.m3_width @@ -188,4 +188,4 @@ class dff_inv_array(design.design): height=self.height) # Drop a via to the M3 pin self.add_via_center(layers=self.m2_stack, - offset=vector(clk_pin.cx(),clk_ypos)) + offset=vector(clk_pin.cx(),clk_ypos)) diff --git a/compiler/modules/dummy_array.py b/compiler/modules/dummy_array.py index 465fb9d8..6368f9c8 100644 --- a/compiler/modules/dummy_array.py +++ b/compiler/modules/dummy_array.py @@ -1,6 +1,6 @@ # See LICENSE for licensing information. # -# Copyright (c) 2016-2019 Regents of the University of California +# Copyright (c) 2016-2019 Regents of the University of California # All rights reserved. # from bitcell_base_array import bitcell_base_array @@ -20,13 +20,13 @@ class dummy_array(bitcell_base_array): self.create_netlist() if not OPTS.netlist_only: self.create_layout() - + def create_netlist(self): """ Create and connect the netlist """ # This will create a default set of bitline/wordline names self.create_all_bitline_names() self.create_all_wordline_names() - + self.add_modules() self.add_pins() self.create_instances() @@ -38,16 +38,16 @@ class dummy_array(bitcell_base_array): self.add_layout_pins() self.add_boundary() - + self.DRC_LVS() def add_modules(self): """ Add the modules used in this design """ - + self.dummy_cell = factory.create(module_type="dummy_{}".format(OPTS.bitcell)) self.cell = factory.create(module_type="bitcell") self.add_mod(self.dummy_cell) - + def create_instances(self): """ Create the module instances used in this design """ self.cell_inst = {} @@ -67,7 +67,7 @@ class dummy_array(bitcell_base_array): self.add_pin(wl_name, "INPUT") self.add_pin("vdd", "POWER") self.add_pin("gnd", "GROUND") - + def add_layout_pins(self): """ Add the layout pins """ @@ -86,7 +86,7 @@ class dummy_array(bitcell_base_array): offset=br_pin.ll().scale(1, 0), width=br_pin.width(), height=self.height) - + wl_names = self.cell.get_all_wl_names() for row in range(self.row_size): for port in self.all_ports: @@ -104,7 +104,7 @@ class dummy_array(bitcell_base_array): inst = self.cell_inst[row, col] for pin_name in ["vdd", "gnd"]: self.copy_layout_pin(inst, pin_name) - + def input_load(self): # FIXME: This appears to be old code from previous characterization. Needs to be updated. wl_wire = self.gen_wl_wire() diff --git a/compiler/modules/global_bitcell_array.py b/compiler/modules/global_bitcell_array.py index 4cb384b6..2ff8bb77 100644 --- a/compiler/modules/global_bitcell_array.py +++ b/compiler/modules/global_bitcell_array.py @@ -27,11 +27,11 @@ class global_bitcell_array(bitcell_base_array.bitcell_base_array): debug.check(len(self.all_ports)<=2, "Only support dual port or less in global bitcell array.") self.rbl = [1, 1 if len(self.all_ports)>1 else 0] - + self.create_netlist() if not OPTS.netlist_only: self.create_layout() - + def create_netlist(self): """ Create and connect the netlist """ self.add_modules() @@ -43,11 +43,11 @@ class global_bitcell_array(bitcell_base_array.bitcell_base_array): self.place() self.route() - + self.add_layout_pins() self.add_boundary() - + self.DRC_LVS() def add_modules(self): @@ -88,7 +88,7 @@ class global_bitcell_array(bitcell_base_array.bitcell_base_array): rows=self.row_size, cols=cols, rbl=self.rbl) - + self.add_mod(la) self.local_mods.append(la) @@ -108,7 +108,7 @@ class global_bitcell_array(bitcell_base_array.bitcell_base_array): self.rbl_bitline_names[0].append("rbl_bl_{}_0".format(port)) for port in self.all_ports: self.rbl_bitline_names[0].append("rbl_br_{}_0".format(port)) - + for col in range(self.column_size): for port in self.all_ports: self.bitline_names[port].append("bl_{0}_{1}".format(port, col)) @@ -120,7 +120,7 @@ class global_bitcell_array(bitcell_base_array.bitcell_base_array): self.rbl_bitline_names[1].append("rbl_bl_{}_1".format(port)) for port in self.all_ports: self.rbl_bitline_names[1].append("rbl_br_{}_1".format(port)) - + # Make a flat list too self.all_bitline_names = [x for sl in zip(*self.bitline_names) for x in sl] # Make a flat list too @@ -130,19 +130,19 @@ class global_bitcell_array(bitcell_base_array.bitcell_base_array): self.add_pin_list(self.all_bitline_names, "INOUT") if len(self.all_ports) > 1: self.add_pin_list(self.rbl_bitline_names[1], "INOUT") - + def add_wordline_pins(self): self.rbl_wordline_names = [[] for x in self.all_ports] - + self.wordline_names = [[] for x in self.all_ports] for bit in self.all_ports: for port in self.all_ports: self.rbl_wordline_names[port].append("rbl_wl_{0}_{1}".format(port, bit)) - + self.all_rbl_wordline_names = [x for sl in zip(*self.rbl_wordline_names) for x in sl] - + # Regular WLs for row in range(self.row_size): for port in self.all_ports: @@ -163,11 +163,11 @@ class global_bitcell_array(bitcell_base_array.bitcell_base_array): name = "la_{0}".format(col) self.local_insts.append(self.add_inst(name=name, mod=mod)) - + temp = [] if col == 0: temp.extend(self.get_rbl_bitline_names(0)) - + port_inouts = [x for x in mod.get_inouts() if x.startswith("bl") or x.startswith("br")] for pin_name in port_inouts: # Offset of the last underscore that defines the bit number @@ -180,18 +180,18 @@ class global_bitcell_array(bitcell_base_array.bitcell_base_array): # Strip the bit and add the new one new_name = "{0}_{1}".format(base_name, col + col_value) temp.append(new_name) - + if len(self.all_ports) > 1 and mod == self.local_mods[-1]: temp.extend(self.get_rbl_bitline_names(1)) for port in self.all_ports: port_inputs = [x for x in mod.get_inputs() if "wl_{}".format(port) in x] temp.extend(port_inputs) - + temp.append("vdd") temp.append("gnd") self.connect_inst(temp) - + def place(self): offset = vector(0, 0) for inst in self.local_insts: @@ -204,7 +204,7 @@ class global_bitcell_array(bitcell_base_array.bitcell_base_array): def route(self): pass - + def add_layout_pins(self): # Regular bitlines @@ -230,11 +230,11 @@ class global_bitcell_array(bitcell_base_array.bitcell_base_array): layer=left_pin.layer, start=left_pin.lc(), end=right_pin.rc()) - + # Replica bitlines self.copy_layout_pin(self.local_insts[0], "rbl_bl_0_0") self.copy_layout_pin(self.local_insts[0], "rbl_br_0_0") - + if len(self.all_ports) > 1: self.copy_layout_pin(self.local_insts[0], "rbl_bl_1_0") self.copy_layout_pin(self.local_insts[0], "rbl_br_1_0") @@ -269,10 +269,10 @@ class global_bitcell_array(bitcell_base_array.bitcell_base_array): return offsets def graph_exclude_bits(self, targ_row, targ_col): - """ - Excludes bits in column from being added to graph except target """ - + Excludes bits in column from being added to graph except target + """ + # This must find which local array includes the specified column # Find the summation of columns that is large and take the one before for i, col in enumerate(self.col_offsets): @@ -303,7 +303,7 @@ class global_bitcell_array(bitcell_base_array.bitcell_base_array): def get_cell_name(self, inst_name, row, col): """Gets the spice name of the target bitcell.""" - + # This must find which local array includes the specified column # Find the summation of columns that is large and take the one before for i, local_col in enumerate(self.col_offsets): @@ -321,9 +321,9 @@ class global_bitcell_array(bitcell_base_array.bitcell_base_array): local_col = col - self.col_offsets[i - 1] return local_array.get_cell_name(inst_name + '.x' + local_inst.name, row, local_col) - + def clear_exclude_bits(self): - """ + """ Clears the bit exclusions """ for mod in self.local_mods: @@ -331,6 +331,6 @@ class global_bitcell_array(bitcell_base_array.bitcell_base_array): def graph_exclude_dffs(self): """Exclude dffs from graph as they do not represent critical path""" - + self.graph_inst_exclude.add(self.ctrl_dff_inst) - + diff --git a/compiler/modules/hierarchical_decoder.py b/compiler/modules/hierarchical_decoder.py index a5a63fc8..c121f53a 100644 --- a/compiler/modules/hierarchical_decoder.py +++ b/compiler/modules/hierarchical_decoder.py @@ -22,14 +22,14 @@ class hierarchical_decoder(design.design): super().__init__(name) self.AND_FORMAT = "DEC_AND_{0}" - + self.pre2x4_inst = [] self.pre3x8_inst = [] self.pre4x16_inst = [] b = factory.create(module_type="bitcell") self.cell_height = b.height - + self.num_outputs = num_outputs self.num_inputs = math.ceil(math.log(self.num_outputs, 2)) (self.no_of_pre2x4, self.no_of_pre3x8, self.no_of_pre4x16)=self.determine_predecodes(self.num_inputs) @@ -37,7 +37,7 @@ class hierarchical_decoder(design.design): self.create_netlist() if not OPTS.netlist_only: self.create_layout() - + def create_netlist(self): self.add_modules() self.setup_netlist_constants() @@ -49,33 +49,33 @@ class hierarchical_decoder(design.design): self.setup_layout_constants() self.place_pre_decoder() self.place_row_decoder() - + self.height = max(self.predecoder_height, self.row_decoder_height) + self.bus_space - + self.route_inputs() self.route_outputs() self.route_decoder_bus() self.route_vdd_gnd() - + self.offset_x_coordinates() - + self.width = self.and_inst[0].rx() + 0.5 * self.m1_width - + self.add_boundary() self.DRC_LVS() - + def add_modules(self): self.and2 = factory.create(module_type="and2_dec", height=self.cell_height) self.add_mod(self.and2) - + self.and3 = factory.create(module_type="and3_dec", height=self.cell_height) self.add_mod(self.and3) # TBD # self.and4 = factory.create(module_type="and4_dec") # self.add_mod(self.and4) - + self.add_decoders() def add_decoders(self): @@ -83,7 +83,7 @@ class hierarchical_decoder(design.design): self.pre2_4 = factory.create(module_type="hierarchical_predecode2x4", height=self.cell_height) self.add_mod(self.pre2_4) - + self.pre3_8 = factory.create(module_type="hierarchical_predecode3x8", height=self.cell_height) self.add_mod(self.pre3_8) @@ -91,11 +91,11 @@ class hierarchical_decoder(design.design): self.pre4_16 = factory.create(module_type="hierarchical_predecode4x16", height=self.cell_height) self.add_mod(self.pre4_16) - + def determine_predecodes(self, num_inputs): - """ + """ Determines the number of 2:4, 3:8 and 4:16 pre-decoders - needed based on the number of inputs + needed based on the number of inputs """ if (num_inputs == 2): return (1, 0, 0) @@ -151,7 +151,7 @@ class hierarchical_decoder(design.design): lines.append(index) index = index + 1 self.predec_groups.append(lines) - + def setup_layout_constants(self): """ Calculate the overall dimensions of the hierarchical decoder """ @@ -190,7 +190,7 @@ class hierarchical_decoder(design.design): self.input_layer = layer_props.hierarchical_decoder.input_layer self.output_layer = layer_props.hierarchical_decoder.output_layer self.output_layer_pitch = getattr(self, self.output_layer + "_pitch") - + # Two extra pitches between modules on left and right self.internal_routing_width = self.total_number_of_predecoder_outputs * self.bus_pitch + self.bus_pitch self.row_decoder_height = self.and2.height * self.num_outputs @@ -215,7 +215,7 @@ class hierarchical_decoder(design.design): offset=input_offset, names=input_bus_names, length=self.predecoder_height) - + self.route_input_to_predecodes() def route_input_to_predecodes(self): @@ -231,13 +231,13 @@ class hierarchical_decoder(design.design): decoder_offset = decoder_pin.center() input_offset = input_pos.scale(1, 0) + decoder_offset.scale(0, 1) - + self.route_input_bus(decoder_offset, input_offset) - + for pre_num in range(self.no_of_pre3x8): for i in range(3): index = pre_num * 3 + i + self.no_of_pre2x4 * 2 - + input_pos = self.input_bus["addr_{}".format(index)].center() in_name = "in_{}".format(i) @@ -245,13 +245,13 @@ class hierarchical_decoder(design.design): decoder_offset = decoder_pin.center() input_offset = input_pos.scale(1, 0) + decoder_offset.scale(0, 1) - + self.route_input_bus(decoder_offset, input_offset) for pre_num in range(self.no_of_pre4x16): for i in range(4): index = pre_num * 4 + i + self.no_of_pre3x8 * 3 + self.no_of_pre2x4 * 2 - + input_pos = self.input_bus["addr_{}".format(index)].center() in_name = "in_{}".format(i) @@ -259,15 +259,15 @@ class hierarchical_decoder(design.design): decoder_offset = decoder_pin.center() input_offset = input_pos.scale(1, 0) + decoder_offset.scale(0, 1) - + self.route_input_bus(decoder_offset, input_offset) - + def route_input_bus(self, input_offset, output_offset): """ Route a vertical M2 coordinate to another vertical M2 coordinate to the predecode inputs """ - + self.add_via_stack_center(from_layer=self.bus_layer, to_layer=self.input_layer, offset=input_offset) @@ -276,10 +276,10 @@ class hierarchical_decoder(design.design): offset=output_offset, directions=self.bus_directions) self.add_path(self.input_layer, [input_offset, output_offset]) - + def add_pins(self): """ Add the module pins """ - + for i in range(self.num_inputs): self.add_pin("addr_{0}".format(i), "INPUT") @@ -290,10 +290,10 @@ class hierarchical_decoder(design.design): def create_pre_decoder(self): """ Creates pre-decoder and places labels input address [A] """ - + for i in range(self.no_of_pre2x4): self.create_pre2x4(i) - + for i in range(self.no_of_pre3x8): self.create_pre3x8(i) @@ -302,7 +302,7 @@ class hierarchical_decoder(design.design): def create_pre2x4(self, num): """ Add a 2x4 predecoder to the left of the origin """ - + if (self.num_inputs == 2): index_off1 = index_off2 = 0 else: @@ -355,19 +355,19 @@ class hierarchical_decoder(design.design): self.pre4x16_inst.append(self.add_inst(name="pre4x16_{0}".format(num), mod=self.pre4_16)) self.connect_inst(pins) - + def place_pre_decoder(self): """ Creates pre-decoder and places labels input address [A] """ - + for i in range(self.no_of_pre2x4): self.place_pre2x4(i) - + for i in range(self.no_of_pre3x8): self.place_pre3x8(i) for i in range(self.no_of_pre4x16): self.place_pre4x16(i) - + self.predecode_height = 0 if self.no_of_pre2x4 > 0: self.predecode_height = self.pre2x4_inst[-1].uy() @@ -378,10 +378,10 @@ class hierarchical_decoder(design.design): def place_pre2x4(self, num): """ Place 2x4 predecoder to the left of the origin """ - + base= vector(-self.pre2_4.width, num * (self.pre2_4.height + self.predecoder_spacing)) self.pre2x4_inst[num].place(base) - + def place_pre3x8(self, num): """ Place 3x8 predecoder to the left of the origin and above any 2x4 decoders """ height = self.no_of_pre2x4 * (self.pre2_4.height + self.predecoder_spacing) \ @@ -396,7 +396,7 @@ class hierarchical_decoder(design.design): + num * (self.pre4_16.height + self.predecoder_spacing) offset = vector(-self.pre4_16.width, height) self.pre4x16_inst[num].place(offset) - + def create_row_decoder(self): """ Create the row-decoder by placing AND2/AND3 and Inverters and add the primary decoder output pins. """ @@ -407,7 +407,7 @@ class hierarchical_decoder(design.design): """ Add a column of AND gates for final decode """ self.and_inst = [] - + # Row Decoder AND GATE array for address inputs <5. if (self.num_inputs == 4 or self.num_inputs == 5): for i in range(len(self.predec_groups[0])): @@ -435,7 +435,7 @@ class hierarchical_decoder(design.design): name = self.AND_FORMAT.format(output) self.and_inst.append(self.add_inst(name=name, mod=self.and3)) - + pins = ["out_{0}".format(i), "out_{0}".format(j + len(self.predec_groups[0])), "out_{0}".format(k + len(self.predec_groups[0]) + len(self.predec_groups[1])), @@ -456,7 +456,7 @@ class hierarchical_decoder(design.design): Add a column of AND gates for final decode. This may have more than one decoder per row to match the bitcell height. """ - + # Row Decoder AND GATE array for address inputs <5. if (self.num_inputs == 4 or self.num_inputs == 5): self.place_and_array(and_mod=self.and2) @@ -489,7 +489,7 @@ class hierarchical_decoder(design.design): for row in range(self.num_outputs): and_inst = self.and_inst[row] self.copy_layout_pin(and_inst, "Z", "decode_{0}".format(row)) - + def route_decoder_bus(self): """ Creates vertical metal 2 bus to connect predecoder and decoder stages. @@ -522,7 +522,7 @@ class hierarchical_decoder(design.design): x_offset = self.pre2x4_inst[pre_num].rx() + self.output_layer_pitch y_offset = self.pre2x4_inst[pre_num].by() + i * self.cell_height self.route_predecode_bus_inputs(predecode_name, pin, x_offset, y_offset) - + # FIXME: convert to connect_bus for pre_num in range(self.no_of_pre3x8): for i in range(8): @@ -542,7 +542,7 @@ class hierarchical_decoder(design.design): x_offset = self.pre4x16_inst[pre_num].rx() + self.output_layer_pitch y_offset = self.pre4x16_inst[pre_num].by() + i * self.cell_height self.route_predecode_bus_inputs(predecode_name, pin, x_offset, y_offset) - + def route_bus_to_decoder(self): """ Use the self.predec_groups to determine the connections to the decoder AND gates. @@ -555,7 +555,7 @@ class hierarchical_decoder(design.design): and the 128th AND3 is connected to [3,7,15] """ output_index = 0 - + if (self.num_inputs == 4 or self.num_inputs == 5): for index_B in self.predec_groups[1]: for index_A in self.predec_groups[0]: @@ -596,7 +596,7 @@ class hierarchical_decoder(design.design): Add a pin for each row of vdd/gnd which are must-connects next level up. """ - + if layer_props.hierarchical_decoder.vertical_supply: for n in ["vdd", "gnd"]: pins = self.and_inst[0].get_pins(n) @@ -636,7 +636,7 @@ class hierarchical_decoder(design.design): for pre in self.pre2x4_inst + self.pre3x8_inst + self.pre4x16_inst: for pin_name in ["vdd", "gnd"]: self.copy_layout_pin(pre, pin_name) - + def route_predecode_bus_outputs(self, rail_name, pin, row): """ Connect the routing rail to the given metal1 pin @@ -646,17 +646,17 @@ class hierarchical_decoder(design.design): pin_pos = pin.center() rail_pos = vector(self.predecode_bus[rail_name].cx(), pin_pos.y) self.add_path(self.input_layer, [rail_pos, pin_pos]) - + self.add_via_stack_center(from_layer=self.bus_layer, to_layer=self.input_layer, offset=rail_pos, directions=self.bus_directions) - + self.add_via_stack_center(from_layer=pin.layer, to_layer=self.input_layer, offset=pin_pos, directions=("H", "H")) - + def route_predecode_bus_inputs(self, rail_name, pin, x_offset, y_offset): """ Connect the routing rail to the given metal1 pin using a jog diff --git a/compiler/modules/hierarchical_predecode.py b/compiler/modules/hierarchical_predecode.py index 3c19910f..ea1f1215 100644 --- a/compiler/modules/hierarchical_predecode.py +++ b/compiler/modules/hierarchical_predecode.py @@ -31,10 +31,10 @@ class hierarchical_predecode(design.design): # If we are pitch matched to the bitcell, it's a predecoder # otherwise it's a column decoder (out of pgates) self.column_decoder = (height != b.height) - + self.number_of_outputs = int(math.pow(2, self.number_of_inputs)) super().__init__(name) - + def add_pins(self): for k in range(self.number_of_inputs): self.add_pin("in_{0}".format(k), "INPUT") @@ -48,7 +48,7 @@ class hierarchical_predecode(design.design): debug.check(self.number_of_inputs <= 4, "Invalid number of predecode inputs: {}".format(self.number_of_inputs)) - + if self.column_decoder: and_type = "pand{}".format(self.number_of_inputs) inv_type = "pinv" @@ -79,7 +79,7 @@ class hierarchical_predecode(design.design): self.route() self.add_boundary() self.DRC_LVS() - + def setup_layout_constraints(self): # Inputs to cells are on input layer @@ -92,7 +92,7 @@ class hierarchical_predecode(design.design): self.input_layer = layer_props.hierarchical_predecode.input_layer self.output_layer = layer_props.hierarchical_predecode.output_layer self.output_layer_pitch = getattr(self, self.output_layer + "_pitch") - + self.height = self.number_of_outputs * self.and_mod.height # x offset for input inverters @@ -139,7 +139,7 @@ class hierarchical_predecode(design.design): def place_input_inverters(self): """ Place the input inverters to invert input signals for the decode stage. """ for inv_num in range(self.number_of_inputs): - + if (inv_num % 2 == 0): y_off = inv_num * (self.inv.height) mirror = "R0" @@ -149,7 +149,7 @@ class hierarchical_predecode(design.design): offset = vector(self.x_off_inv_1, y_off) self.inv_inst[inv_num].place(offset=offset, mirror=mirror) - + def create_and_array(self, connections): """ Create the AND stage for the decodes """ self.and_inst = [] @@ -196,7 +196,7 @@ class hierarchical_predecode(design.design): pin = top_and_gate.get_pin("D") else: debug.error("Too many inputs for predecoder.", -1) - + y_offset = pin.cy() in_pin = "in_{}".format(num) a_pin = "A_{}".format(num) @@ -222,7 +222,7 @@ class hierarchical_predecode(design.design): offset=z_pin.ll(), height=z_pin.height(), width=z_pin.width()) - + def route_input_inverters(self): """ Route all conections of the inputs inverters [Inputs, outputs, vdd, gnd] @@ -232,7 +232,7 @@ class hierarchical_predecode(design.design): in_pin = "in_{}".format(inv_num) inv_out_pin = self.inv_inst[inv_num].get_pin("Z") - + # add output so that it is just below the vdd or gnd rail # since this is where the p/n devices are and there are no # pins in the and gates. @@ -241,7 +241,7 @@ class hierarchical_predecode(design.design): right_pos = inv_out_pos + vector(self.inv.width - self.inv.get_pin("Z").rx(), 0) rail_pos = vector(self.decode_rails[out_pin].cx(), y_offset) self.add_path(self.output_layer, [inv_out_pos, right_pos, vector(right_pos.x, y_offset), rail_pos]) - + self.add_via_stack_center(from_layer=inv_out_pin.layer, to_layer=self.output_layer, offset=inv_out_pos) @@ -249,7 +249,7 @@ class hierarchical_predecode(design.design): to_layer=self.bus_layer, offset=rail_pos, directions=self.bus_directions) - + # route input pin = self.inv_inst[inv_num].get_pin("A") inv_in_pos = pin.center() @@ -267,11 +267,11 @@ class hierarchical_predecode(design.design): offset=in_pos, height=via.mod.second_layer_height, width=via.mod.second_layer_width) - + if layer_props.hierarchical_predecode.vertical_supply: below_rail = vector(self.decode_rails[out_pin].cx(), y_offset - (self.cell_height / 2)) self.add_path(self.bus_layer, [rail_pos, below_rail], width=self.li_width + self.m1_enclose_mcon * 2) - + def route_and_to_rails(self): # This 2D array defines the connection mapping and_input_line_combination = self.get_and_input_line_combination() @@ -302,7 +302,7 @@ class hierarchical_predecode(design.design): direction = None else: direction = ("H", "H") - + self.add_via_stack_center(from_layer=pin.layer, to_layer=self.input_layer, offset=pin_pos, @@ -334,7 +334,7 @@ class hierarchical_predecode(design.design): self.add_power_pin(name=n, loc=pin.uc(), start_layer=pin.layer) - + # In other techs, we are using standard cell decoder cells with horizontal power else: for num in range(0, self.number_of_outputs): @@ -354,6 +354,6 @@ class hierarchical_predecode(design.design): self.add_power_pin(name=n, loc=pin_pos, start_layer=and_pin.layer) - + diff --git a/compiler/modules/hierarchical_predecode3x8.py b/compiler/modules/hierarchical_predecode3x8.py index 7513ed7c..0bbfd1e0 100644 --- a/compiler/modules/hierarchical_predecode3x8.py +++ b/compiler/modules/hierarchical_predecode3x8.py @@ -25,9 +25,9 @@ class hierarchical_predecode3x8(hierarchical_predecode): self.add_modules() self.create_input_inverters() connections=[["inbar_0", "inbar_1", "inbar_2", "out_0", "vdd", "gnd"], - ["in_0", "inbar_1", "inbar_2", "out_1", "vdd", "gnd"], + ["in_0", "inbar_1", "inbar_2", "out_1", "vdd", "gnd"], ["inbar_0", "in_1", "inbar_2", "out_2", "vdd", "gnd"], - ["in_0", "in_1", "inbar_2", "out_3", "vdd", "gnd"], + ["in_0", "in_1", "inbar_2", "out_3", "vdd", "gnd"], ["inbar_0", "inbar_1", "in_2", "out_4", "vdd", "gnd"], ["in_0", "inbar_1", "in_2", "out_5", "vdd", "gnd"], ["inbar_0", "in_1", "in_2", "out_6", "vdd", "gnd"], @@ -41,7 +41,7 @@ class hierarchical_predecode3x8(hierarchical_predecode): ["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", "Abar_1", "A_2"], + ["Abar_0", "A_1", "A_2"], ["A_0", "A_1", "A_2"]] return combination diff --git a/compiler/modules/hierarchical_predecode4x16.py b/compiler/modules/hierarchical_predecode4x16.py index 93dbc4ea..24a1b79f 100644 --- a/compiler/modules/hierarchical_predecode4x16.py +++ b/compiler/modules/hierarchical_predecode4x16.py @@ -25,17 +25,17 @@ class hierarchical_predecode4x16(hierarchical_predecode): self.add_modules() self.create_input_inverters() connections=[["inbar_0", "inbar_1", "inbar_2", "inbar_3", "out_0", "vdd", "gnd"], - ["in_0", "inbar_1", "inbar_2", "inbar_3", "out_1", "vdd", "gnd"], + ["in_0", "inbar_1", "inbar_2", "inbar_3", "out_1", "vdd", "gnd"], ["inbar_0", "in_1", "inbar_2", "inbar_3", "out_2", "vdd", "gnd"], - ["in_0", "in_1", "inbar_2", "inbar_3", "out_3", "vdd", "gnd"], + ["in_0", "in_1", "inbar_2", "inbar_3", "out_3", "vdd", "gnd"], ["inbar_0", "inbar_1", "in_2", "inbar_3", "out_4", "vdd", "gnd"], ["in_0", "inbar_1", "in_2", "inbar_3", "out_5", "vdd", "gnd"], ["inbar_0", "in_1", "in_2", "inbar_3", "out_6", "vdd", "gnd"], ["in_0", "in_1", "in_2", "inbar_3", "out_7", "vdd", "gnd"], ["inbar_0", "inbar_1", "inbar_2", "in_3", "out_8", "vdd", "gnd"], - ["in_0", "inbar_1", "inbar_2", "in_3", "out_9", "vdd", "gnd"], + ["in_0", "inbar_1", "inbar_2", "in_3", "out_9", "vdd", "gnd"], ["inbar_0", "in_1", "inbar_2", "in_3", "out_10", "vdd", "gnd"], - ["in_0", "in_1", "inbar_2", "in_3", "out_11", "vdd", "gnd"], + ["in_0", "in_1", "inbar_2", "in_3", "out_11", "vdd", "gnd"], ["inbar_0", "inbar_1", "in_2", "in_3", "out_12", "vdd", "gnd"], ["in_0", "inbar_1", "in_2", "in_3", "out_13", "vdd", "gnd"], ["inbar_0", "in_1", "in_2", "in_3", "out_14", "vdd", "gnd"], @@ -50,15 +50,15 @@ class hierarchical_predecode4x16(hierarchical_predecode): ["Abar_0", "A_1", "Abar_2", "Abar_3"], ["A_0", "A_1", "Abar_2", "Abar_3"], ["Abar_0", "Abar_1", "A_2" , "Abar_3"], - ["A_0", "Abar_1", "A_2" , "Abar_3"], - ["Abar_0", "A_1", "A_2" , "Abar_3"], + ["A_0", "Abar_1", "A_2" , "Abar_3"], + ["Abar_0", "A_1", "A_2" , "Abar_3"], ["A_0", "A_1", "A_2" , "Abar_3"], ["Abar_0", "Abar_1", "Abar_2", "A_3"], ["A_0", "Abar_1", "Abar_2", "A_3"], ["Abar_0", "A_1", "Abar_2", "A_3"], ["A_0", "A_1", "Abar_2", "A_3"], ["Abar_0", "Abar_1", "A_2", "A_3"], - ["A_0", "Abar_1", "A_2", "A_3"], - ["Abar_0", "A_1", "A_2", "A_3"], + ["A_0", "Abar_1", "A_2", "A_3"], + ["Abar_0", "A_1", "A_2", "A_3"], ["A_0", "A_1", "A_2", "A_3"]] return combination diff --git a/compiler/modules/local_bitcell_array.py b/compiler/modules/local_bitcell_array.py index c07b4f1b..b4702b2c 100644 --- a/compiler/modules/local_bitcell_array.py +++ b/compiler/modules/local_bitcell_array.py @@ -32,9 +32,9 @@ class local_bitcell_array(bitcell_base_array.bitcell_base_array): self.rbl = rbl self.left_rbl = left_rbl self.right_rbl = right_rbl - + debug.check(len(self.all_ports) < 3, "Local bitcell array only supports dual port or less.") - + self.create_netlist() if not OPTS.netlist_only: self.create_layout() @@ -42,7 +42,7 @@ class local_bitcell_array(bitcell_base_array.bitcell_base_array): # We don't offset this because we need to align # the replica bitcell in the control logic # self.offset_all_coordinates() - + def create_netlist(self): """ Create and connect the netlist """ self.add_modules() @@ -56,7 +56,7 @@ class local_bitcell_array(bitcell_base_array.bitcell_base_array): self.add_layout_pins() self.route() - + self.add_boundary() self.DRC_LVS() @@ -78,7 +78,7 @@ class local_bitcell_array(bitcell_base_array.bitcell_base_array): rows=self.rows + 1, cols=self.cols) self.add_mod(self.wl_array) - + def add_pins(self): # Outputs from the wordline driver (by port) self.driver_wordline_outputs = [] @@ -87,18 +87,18 @@ class local_bitcell_array(bitcell_base_array.bitcell_base_array): self.wordline_names = self.bitcell_array.wordline_names self.all_wordline_names = self.bitcell_array.all_wordline_names - + self.bitline_names = self.bitcell_array.bitline_names self.all_bitline_names = self.bitcell_array.all_bitline_names self.rbl_wordline_names = self.bitcell_array.rbl_wordline_names self.all_rbl_wordline_names = self.bitcell_array.all_rbl_wordline_names - + self.rbl_bitline_names = self.bitcell_array.rbl_bitline_names self.all_rbl_bitline_names = self.bitcell_array.all_rbl_bitline_names - + self.all_array_wordline_inputs = [x + "i" for x in self.bitcell_array.get_all_wordline_names()] - + # Arrays are always: # bit lines (left to right) # word lines (bottom to top) @@ -133,10 +133,10 @@ class local_bitcell_array(bitcell_base_array.bitcell_base_array): else: temp += self.get_wordline_names(port)[::-1] self.driver_wordline_outputs.append([x + "i" for x in temp]) - + temp += self.driver_wordline_outputs[-1] temp += ["vdd", "gnd"] - + self.connect_inst(temp) self.bitcell_array_inst = self.add_inst(name="array", @@ -180,7 +180,7 @@ class local_bitcell_array(bitcell_base_array.bitcell_base_array): for x in self.get_inouts(): self.copy_layout_pin(self.bitcell_array_inst, x) - + supply_insts = [*self.wl_insts, self.bitcell_array_inst] for pin_name in ["vdd", "gnd"]: for inst in supply_insts: @@ -189,7 +189,7 @@ class local_bitcell_array(bitcell_base_array.bitcell_base_array): self.add_power_pin(name=pin_name, loc=pin.center(), start_layer=pin.layer) - + def route(self): # Route the global wordlines @@ -198,27 +198,27 @@ class local_bitcell_array(bitcell_base_array.bitcell_base_array): wordline_names = [self.get_rbl_wordline_names(port)[port]] + self.get_wordline_names(port) else: wordline_names = [self.get_rbl_wordline_names(port)[port]] + self.get_wordline_names(port)[::-1] - + wordline_pins = self.wl_array.get_inputs() for (wl_name, in_pin_name) in zip(wordline_names, wordline_pins): # wl_pin = self.bitcell_array_inst.get_pin(wl_name) in_pin = self.wl_insts[port].get_pin(in_pin_name) - + y_offset = in_pin.cy() if port == 0: y_offset -= 2 * self.m3_pitch else: y_offset += 2 * self.m3_pitch - + self.add_layout_pin_segment_center(text=wl_name, layer="m3", start=vector(self.wl_insts[port].lx(), y_offset), end=vector(self.wl_insts[port].lx() + self.wl_array.width, y_offset)) - + mid = vector(in_pin.cx(), y_offset) self.add_path("m2", [in_pin.center(), mid]) - + self.add_via_stack_center(from_layer=in_pin.layer, to_layer="m2", offset=in_pin.center()) @@ -228,7 +228,7 @@ class local_bitcell_array(bitcell_base_array.bitcell_base_array): # Route the buffers for port in self.all_ports: driver_outputs = self.driver_wordline_outputs[port] - + for (driver_name, net_name) in zip(self.wl_insts[port].mod.get_outputs(), driver_outputs): array_name = net_name[:-1] out_pin = self.wl_insts[port].get_pin(driver_name) @@ -242,7 +242,7 @@ class local_bitcell_array(bitcell_base_array.bitcell_base_array): mid_loc = vector(self.wl_insts[port].lx() - 1.5 * self.m3_pitch, out_loc.y) in_loc = in_pin.rc() self.add_path(out_pin.layer, [out_loc, mid_loc, in_loc]) - + def get_main_array_top(self): return self.bitcell_array_inst.by() + self.bitcell_array.get_main_array_top() @@ -262,13 +262,13 @@ class local_bitcell_array(bitcell_base_array.bitcell_base_array): # must add the offset of the instance offsets = [self.bitcell_array_inst.lx() + x for x in self.bitcell_array.get_column_offsets()] return offsets - + def graph_exclude_bits(self, targ_row=None, targ_col=None): """ Excludes bits in column from being added to graph except target """ self.bitcell_array.graph_exclude_bits(targ_row, targ_col) - + def graph_exclude_replica_col_bits(self): """ Exclude all but replica in the local array. @@ -281,8 +281,8 @@ class local_bitcell_array(bitcell_base_array.bitcell_base_array): return self.bitcell_array.get_cell_name(inst_name + '.x' + self.bitcell_array_inst.name, row, col) def clear_exclude_bits(self): - """ + """ Clears the bit exclusions """ self.bitcell_array.clear_exclude_bits() - + diff --git a/compiler/modules/multibank.py b/compiler/modules/multibank.py index 48bf5f1f..20012427 100644 --- a/compiler/modules/multibank.py +++ b/compiler/modules/multibank.py @@ -19,9 +19,9 @@ from globals import OPTS class multibank(design.design): """ Dynamically generated a single bank including bitcell array, - hierarchical_decoder, precharge, (optional column_mux and column decoder), + hierarchical_decoder, precharge, (optional column_mux and column decoder), write driver and sense amplifiers. - This module includes the tristate and bank select logic. + This module includes the tristate and bank select logic. """ def __init__(self, name, word_size, num_words, words_per_row, num_banks=1): @@ -41,7 +41,7 @@ class multibank(design.design): self.prefix="gated_" else: self.prefix="" - + self.compute_sizes() self.add_pins() self.add_modules() @@ -50,16 +50,16 @@ class multibank(design.design): # FIXME: Move this to the add modules function self.add_bank_select() - + self.route_layout() - + # Can remove the following, but it helps for debug! - self.add_lvs_correspondence_points() + self.add_lvs_correspondence_points() # Remember the bank center for further placement self.bank_center=self.offset_all_coordinates().scale(-1,-1) - + self.DRC_LVS() def add_pins(self): @@ -91,23 +91,23 @@ class multibank(design.design): #self.route_tri_gate_out() self.route_sense_amp_out() self.route_wordline_driver() - self.route_write_driver() + self.route_write_driver() self.route_row_decoder() self.route_column_address_lines() self.route_control_lines() self.add_control_pins() if self.num_banks > 1: - self.route_bank_select() - + self.route_bank_select() + self.route_supplies() - + def create_instances(self): """ Add modules. The order should not matter! """ # Above the bitcell array self.add_bitcell_array() self.add_precharge_array() - + # Below the bitcell array self.add_column_mux_array() self.add_sense_amp_array() @@ -120,7 +120,7 @@ class multibank(design.design): self.add_wordline_driver() self.add_column_decoder() - + def compute_sizes(self): """ Computes the required sizes to create the bank """ @@ -139,7 +139,7 @@ class multibank(design.design): self.supply_rail_width = 4*self.m2_width # FIXME: This spacing should be width dependent... self.supply_rail_pitch = self.supply_rail_width + 4*self.m2_space - + # Number of control lines in the bus self.num_control_lines = 6 # The order of the control signals on the control bus: @@ -153,7 +153,7 @@ class multibank(design.design): if self.col_addr_size>0: self.num_col_addr_lines = 2**self.col_addr_size else: - self.num_col_addr_lines = 0 + self.num_col_addr_lines = 0 # The width of this bus is needed to place other modules (e.g. decoder) # A width on each side too @@ -169,7 +169,7 @@ class multibank(design.design): """ Add all the modules using the class loader """ self.tri = self.mod_tri_gate() self.bitcell = self.mod_bitcell() - + self.bitcell_array = self.mod_bitcell_array(cols=self.num_cols, rows=self.num_rows) self.add_mod(self.bitcell_array) @@ -178,12 +178,12 @@ class multibank(design.design): self.add_mod(self.precharge_array) if self.col_addr_size > 0: - self.column_mux_array = self.mod_column_mux_array(columns=self.num_cols, + self.column_mux_array = self.mod_column_mux_array(columns=self.num_cols, word_size=self.word_size) self.add_mod(self.column_mux_array) - self.sense_amp_array = self.mod_sense_amp_array(word_size=self.word_size, + self.sense_amp_array = self.mod_sense_amp_array(word_size=self.word_size, words_per_row=self.words_per_row) self.add_mod(self.sense_amp_array) @@ -199,8 +199,8 @@ class multibank(design.design): self.row_decoder = self.mod_decoder(rows=self.num_rows) self.add_mod(self.row_decoder) - - self.tri_gate_array = self.mod_tri_gate_array(columns=self.num_cols, + + self.tri_gate_array = self.mod_tri_gate_array(columns=self.num_cols, word_size=self.word_size) self.add_mod(self.tri_gate_array) @@ -213,12 +213,12 @@ class multibank(design.design): if(self.num_banks > 1): self.bank_select = self.mod_bank_select() self.add_mod(self.bank_select) - + def add_bitcell_array(self): """ Adding Bitcell Array """ - self.bitcell_array_inst=self.add_inst(name="bitcell_array", + self.bitcell_array_inst=self.add_inst(name="bitcell_array", mod=self.bitcell_array, offset=vector(0,0)) temp = [] @@ -238,7 +238,7 @@ class multibank(design.design): # The enclosure is for the well and the spacing is to the bitcell wells y_offset = self.bitcell_array.height + self.m2_gap self.precharge_array_inst=self.add_inst(name="precharge_array", - mod=self.precharge_array, + mod=self.precharge_array, offset=vector(0,y_offset)) temp = [] for i in range(self.num_cols): @@ -255,7 +255,7 @@ class multibank(design.design): self.column_mux_height = 0 return - y_offset = self.column_mux_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)) @@ -287,7 +287,7 @@ class multibank(design.design): else: temp.append("bl_out_{0}".format(i)) temp.append("br_out_{0}".format(i)) - + temp.extend([self.prefix+"s_en", "vdd", "gnd"]) self.connect_inst(temp) @@ -295,16 +295,16 @@ class multibank(design.design): """ Adding Write Driver """ y_offset = self.sense_amp_array.height + self.column_mux_height \ - + self.m2_gap + self.write_driver_array.height - self.write_driver_array_inst=self.add_inst(name="write_driver_array", - mod=self.write_driver_array, + + self.m2_gap + self.write_driver_array.height + self.write_driver_array_inst=self.add_inst(name="write_driver_array", + mod=self.write_driver_array, offset=vector(0,y_offset).scale(-1,-1)) temp = [] for i in range(self.word_size): temp.append("bank_din_{0}".format(i)) - for i in range(self.word_size): - if (self.words_per_row == 1): + for i in range(self.word_size): + if (self.words_per_row == 1): temp.append("bl_{0}".format(i)) temp.append("br_{0}".format(i)) else: @@ -317,10 +317,10 @@ class multibank(design.design): """ data tri gate to drive the data bus """ y_offset = self.sense_amp_array.height+self.column_mux_height \ + self.m2_gap + self.tri_gate_array.height - self.tri_gate_array_inst=self.add_inst(name="tri_gate_array", - mod=self.tri_gate_array, + self.tri_gate_array_inst=self.add_inst(name="tri_gate_array", + mod=self.tri_gate_array, offset=vector(0,y_offset).scale(-1,-1)) - + temp = [] for i in range(self.word_size): temp.append("sa_out_{0}".format(i)) @@ -332,16 +332,16 @@ class multibank(design.design): def add_row_decoder(self): """ Add the hierarchical row decoder """ - - # The address and control bus will be in between decoder and the main memory array - # This bus will route address bits to the decoder input and column mux inputs. + + # The address and control bus will be in between decoder and the main memory array + # This bus will route address bits to the decoder input and column mux inputs. # The wires are actually routed after we placed the stuff on both sides. # The predecoder is below the x-axis and the main decoder is above the x-axis # The address flop and decoder are aligned in the x coord. - + x_offset = -(self.row_decoder.width + self.central_bus_width + self.wordline_driver.width) - self.row_decoder_inst=self.add_inst(name="row_decoder", - mod=self.row_decoder, + self.row_decoder_inst=self.add_inst(name="row_decoder", + mod=self.row_decoder, offset=vector(x_offset,0)) temp = [] @@ -357,8 +357,8 @@ class multibank(design.design): # The wordline driver is placed to the right of the main decoder width. x_offset = -(self.central_bus_width + self.wordline_driver.width) + self.m2_pitch - self.wordline_driver_inst=self.add_inst(name="wordline_driver", - mod=self.wordline_driver, + self.wordline_driver_inst=self.add_inst(name="wordline_driver", + mod=self.wordline_driver, offset=vector(x_offset,0)) temp = [] @@ -371,16 +371,16 @@ class multibank(design.design): temp.append("gnd") self.connect_inst(temp) - + def add_column_decoder_module(self): - """ + """ Create a 2:4 or 3:8 column address decoder. """ # Place the col decoder right aligned with row decoder x_off = -(self.central_bus_width + self.wordline_driver.width + self.col_decoder.width) y_off = -(self.col_decoder.height + 2*drc("well_to_well")) - self.col_decoder_inst=self.add_inst(name="col_address_decoder", - mod=self.col_decoder, + self.col_decoder_inst=self.add_inst(name="col_address_decoder", + mod=self.col_decoder, offset=vector(x_off,y_off)) temp = [] @@ -390,9 +390,9 @@ class multibank(design.design): temp.append("sel_{0}".format(j)) temp.extend(["vdd", "gnd"]) self.connect_inst(temp) - + def add_column_decoder(self): - """ + """ Create a decoder to decode column select lines. This could be an inverter/buffer for 1:2, 2:4 decoder, or 3:8 decoder. """ @@ -408,7 +408,7 @@ class multibank(design.design): else: # No error checking before? debug.error("Invalid column decoder?",-1) - + self.add_column_decoder_module() @@ -417,7 +417,7 @@ class multibank(design.design): if not self.num_banks > 1: return - + x_off = -(self.row_decoder.width + self.central_bus_width + self.wordline_driver.width) if self.col_addr_size > 0: y_off = min(self.col_decoder_inst.by(), self.col_mux_array_inst.by()) @@ -441,7 +441,7 @@ class multibank(design.design): for inst in self.insts: self.copy_power_pins(inst,"vdd") self.copy_power_pins(inst,"gnd") - + def route_bank_select(self): """ Route the bank select logic. """ for input_name in self.input_control_signals+["bank_sel"]: @@ -461,8 +461,8 @@ class multibank(design.design): self.add_via_center(layers=self.m2_stack, offset=out_pos, rotate=90) - - + + def setup_layout_constraints(self): """ After the modules are instantiated, find the dimensions for the control bus, power ring, etc. """ @@ -472,36 +472,36 @@ class multibank(design.design): #driver. # Leave room for the output below the tri gate. #tri_gate_min_y_offset = self.tri_gate_array_inst.by() - 3*self.m2_pitch - write_driver_min_y_offset = self.write_driver_array_inst.by() - 3*self.m2_pitch + write_driver_min_y_offset = self.write_driver_array_inst.by() - 3*self.m2_pitch row_decoder_min_y_offset = self.row_decoder_inst.by() if self.col_addr_size > 0: col_decoder_min_y_offset = self.col_decoder_inst.by() else: col_decoder_min_y_offset = row_decoder_min_y_offset - + if self.num_banks>1: # The control gating logic is below the decoder # Min of the control gating logic and tri gate. self.min_y_offset = min(col_decoder_min_y_offset - self.bank_select.height, write_driver_min_y_offset) else: - # Just the min of the decoder logic logic and tri gate. + # Just the min of the decoder logic logic and tri gate. self.min_y_offset = min(col_decoder_min_y_offset, write_driver_min_y_offset) # The max point is always the top of the precharge bitlines # Add a vdd and gnd power rail above the array self.max_y_offset = self.precharge_array_inst.uy() + 3*self.m1_width self.max_x_offset = self.bitcell_array_inst.ur().x + 3*self.m1_width - self.min_x_offset = self.row_decoder_inst.lx() - + self.min_x_offset = self.row_decoder_inst.lx() + # # Create the core bbox for the power rings ur = vector(self.max_x_offset, self.max_y_offset) ll = vector(self.min_x_offset, self.min_y_offset) self.core_bbox = [ll, ur] - + self.height = ur.y - ll.y self.width = ur.x - ll.x - - + + def route_central_bus(self): """ Create the address, supply, and control signal central bus lines. """ @@ -509,7 +509,7 @@ class multibank(design.design): # Overall central bus width. It includes all the column mux lines, # and control lines. # The bank is at (0,0), so this is to the left of the y-axis. - # 2 pitches on the right for vias/jogs to access the inputs + # 2 pitches on the right for vias/jogs to access the inputs control_bus_offset = vector(-self.m2_pitch * self.num_control_lines - self.m2_width, 0) control_bus_length = self.bitcell_array_inst.uy() self.bus_xoffset = self.create_vertical_bus(layer="m2", @@ -542,7 +542,7 @@ class multibank(design.design): # Only do this if we have a column mux! if self.col_addr_size==0: return - + for i in range(self.num_cols): col_mux_bl = self.col_mux_array_inst.get_pin("bl_{}".format(i)).uc() col_mux_br = self.col_mux_array_inst.get_pin("br_{}".format(i)).uc() @@ -554,7 +554,7 @@ class multibank(design.design): vector(bitcell_bl.x,yoffset), bitcell_bl]) self.add_path("m2",[col_mux_br, vector(col_mux_br.x,yoffset), vector(bitcell_br.x,yoffset), bitcell_br]) - + def route_sense_amp_to_col_mux_or_bitcell_array(self): """ Routing of BL and BR between sense_amp and column mux or bitcell array """ @@ -570,19 +570,19 @@ class multibank(design.design): # Sense amp is directly connected to the bitcell array connect_bl = self.bitcell_array_inst.get_pin("bl_{}".format(i)).bc() connect_br = self.bitcell_array_inst.get_pin("br_{}".format(i)).bc() - - + + yoffset = 0.5*(sense_amp_bl.y+connect_bl.y) self.add_path("m2",[sense_amp_bl, vector(sense_amp_bl.x,yoffset), vector(connect_bl.x,yoffset), connect_bl]) self.add_path("m2",[sense_amp_br, vector(sense_amp_br.x,yoffset), vector(connect_br.x,yoffset), connect_br]) - + def route_sense_amp_to_trigate(self): """ Routing of sense amp output to tri_gate input """ for i in range(self.word_size): - # Connection of data_out of sense amp to data_in + # Connection of data_out of sense amp to data_in tri_gate_in = self.tri_gate_array_inst.get_pin("in_{}".format(i)).lc() sa_data_out = self.sense_amp_array_inst.get_pin("data_{}".format(i)).bc() @@ -597,17 +597,17 @@ class multibank(design.design): for i in range(self.word_size): data_pin = self.sense_amp_array_inst.get_pin("data_{}".format(i)) self.add_layout_pin_rect_center(text="dout_{}".format(i), - layer=data_pin.layer, + layer=data_pin.layer, offset=data_pin.center(), height=data_pin.height(), width=data_pin.width()), - + def route_tri_gate_out(self): """ Metal 3 routing of tri_gate output data """ for i in range(self.word_size): data_pin = self.tri_gate_array_inst.get_pin("out_{}".format(i)) self.add_layout_pin_rect_center(text="dout_{}".format(i), - layer=data_pin.layer, + layer=data_pin.layer, offset=data_pin.center(), height=data_pin.height(), width=data_pin.width()), @@ -622,21 +622,21 @@ class multibank(design.design): decoder_name = "a_{}".format(i) addr_name = "a_{}".format(addr_idx) self.copy_layout_pin(self.row_decoder_inst, decoder_name, addr_name) - - + + def route_write_driver(self): """ Connecting write driver """ - + for i in range(self.word_size): - data_name = "data_{}".format(i) + data_name = "data_{}".format(i) din_name = "bank_din_{}".format(i) self.copy_layout_pin(self.write_driver_array_inst, data_name, din_name) - - + + def route_wordline_driver(self): """ Connecting Wordline driver output to Bitcell WL connection """ - + # we don't care about bends after connecting to the input pin, so let the path code decide. for i in range(self.num_rows): # The pre/post is to access the pin from "outside" the cell to avoid DRCs @@ -653,23 +653,23 @@ class multibank(design.design): mid2 = driver_wl_pos.scale(0.5,0)+bitcell_wl_pos.scale(0.5,1) self.add_path("m1", [driver_wl_pos, mid1, mid2, bitcell_wl_pos]) - + def route_column_address_lines(self): """ Connecting the select lines of column mux to the address bus """ if not self.col_addr_size>0: return - + if self.col_addr_size == 1: - + # Connect to sel[0] and sel[1] decode_names = ["Zb", "Z"] - + # The Address LSB - self.copy_layout_pin(self.col_decoder_inst, "A", "a[0]") - + self.copy_layout_pin(self.col_decoder_inst, "A", "a[0]") + elif self.col_addr_size > 1: decode_names = [] for i in range(self.num_col_addr_lines): @@ -679,7 +679,7 @@ class multibank(design.design): decoder_name = "in_{}".format(i) addr_name = "a_{}".format(i) self.copy_layout_pin(self.col_decoder_inst, decoder_name, addr_name) - + # This will do a quick "river route" on two layers. # When above the top select line it will offset "inward" again to prevent conflicts. @@ -688,7 +688,7 @@ class multibank(design.design): for (decode_name,i) in zip(decode_names,range(self.num_col_addr_lines)): mux_name = "sel_{}".format(i) mux_addr_pos = self.col_mux_array_inst.get_pin(mux_name).lc() - + decode_out_pos = self.col_decoder_inst.get_pin(decode_name).center() # To get to the edge of the decoder and one track out @@ -700,13 +700,13 @@ class multibank(design.design): mid2_pos = vector(mid1_pos.x,mux_addr_pos.y) #self.add_wire(self.m1_stack,[decode_out_pos, mid1_pos, mid2_pos, mux_addr_pos]) self.add_path("m1",[decode_out_pos, mid1_pos, mid2_pos, mux_addr_pos]) - - + + def add_lvs_correspondence_points(self): - """ This adds some points for easier debugging if LVS goes wrong. + """ This adds some points for easier debugging if LVS goes wrong. These should probably be turned off by default though, since extraction will show these as ports in the extracted netlist. """ @@ -715,9 +715,9 @@ class multibank(design.design): wl_name = "wl_{}".format(i) wl_pin = self.bitcell_array_inst.get_pin(wl_name) self.add_label(text=wl_name, - layer="m1", + layer="m1", offset=wl_pin.center()) - + # Add the bitline names for i in range(self.num_cols): bl_name = "bl_{}".format(i) @@ -725,35 +725,35 @@ class multibank(design.design): bl_pin = self.bitcell_array_inst.get_pin(bl_name) br_pin = self.bitcell_array_inst.get_pin(br_name) self.add_label(text=bl_name, - layer="m2", + layer="m2", offset=bl_pin.center()) self.add_label(text=br_name, - layer="m2", + layer="m2", offset=br_pin.center()) - # # Add the data output names to the sense amp output + # # Add the data output names to the sense amp output # for i in range(self.word_size): # data_name = "data_{}".format(i) # data_pin = self.sense_amp_array_inst.get_pin(data_name) # self.add_label(text="sa_out_{}".format(i), - # layer="m2", + # layer="m2", # offset=data_pin.center()) # Add labels on the decoder for i in range(self.word_size): data_name = "dec_out_{}".format(i) - pin_name = "in_{}".format(i) + pin_name = "in_{}".format(i) data_pin = self.wordline_driver_inst.get_pin(pin_name) self.add_label(text=data_name, - layer="m1", + layer="m1", offset=data_pin.center()) - - + + def route_control_lines(self): """ Route the control lines of the entire bank """ - + # Make a list of tuples that we will connect. - # From control signal to the module pin + # From control signal to the module pin # Connection from the central bus to the main control block crosses # pre-decoder and this connection is in metal3 connection = [] @@ -762,7 +762,7 @@ class multibank(design.design): connection.append((self.prefix+"clk_buf_bar", self.precharge_array_inst.get_pin("en").lc())) connection.append((self.prefix+"w_en", self.write_driver_array_inst.get_pin("en").lc())) connection.append((self.prefix+"s_en", self.sense_amp_array_inst.get_pin("en").lc())) - + for (control_signal, pin_pos) in connection: control_pos = vector(self.bus_xoffset[control_signal].x ,pin_pos.y) self.add_path("m1", [control_pos, pin_pos]) @@ -781,7 +781,7 @@ class multibank(design.design): self.add_via_center(layers=self.m1_stack, offset=control_via_pos, rotate=90) - + def add_control_pins(self): """ Add the control signal input pins """ @@ -791,15 +791,15 @@ class multibank(design.design): if self.num_banks > 1: # it's not an input pin if we have multiple banks self.add_label_pin(text=ctrl, - layer="m2", - offset=vector(x_offset, self.min_y_offset), - width=self.m2_width, + layer="m2", + offset=vector(x_offset, self.min_y_offset), + width=self.m2_width, height=self.max_y_offset-self.min_y_offset) else: self.add_layout_pin(text=ctrl, - layer="m2", - offset=vector(x_offset, self.min_y_offset), - width=self.m2_width, + layer="m2", + offset=vector(x_offset, self.min_y_offset), + width=self.m2_width, height=self.max_y_offset-self.min_y_offset) @@ -815,8 +815,8 @@ class multibank(design.design): self.add_via(layers=self.m2_stack, offset=in_pin + self.m2m3_via_offset, rotate=90) - - + + def connect_rail_from_left(self,inst, pin, rail): """ Helper routine to connect an unrotated/mirrored oriented instance to the rails """ in_pin = inst.get_pin(pin).rc() diff --git a/compiler/modules/orig_bitcell_array.py b/compiler/modules/orig_bitcell_array.py index 97b681e9..cf982ce5 100644 --- a/compiler/modules/orig_bitcell_array.py +++ b/compiler/modules/orig_bitcell_array.py @@ -27,7 +27,7 @@ class bitcell_array(bitcell_base_array): # We don't offset this because we need to align # the replica bitcell in the control logic # self.offset_all_coordinates() - + def create_netlist(self): """ Create and connect the netlist """ self.add_modules() @@ -41,7 +41,7 @@ class bitcell_array(bitcell_base_array): self.add_layout_pins() self.add_boundary() - + self.DRC_LVS() def add_modules(self): @@ -58,20 +58,20 @@ class bitcell_array(bitcell_base_array): self.cell_inst[row, col]=self.add_inst(name=name, mod=self.cell) self.connect_inst(self.get_bitcell_pins(col, row)) - + def analytical_power(self, corner, load): """Power of Bitcell array and bitline in nW.""" - + # Dynamic Power from Bitline bl_wire = self.gen_bl_wire() cell_load = 2 * bl_wire.return_input_cap() bl_swing = OPTS.rbl_delay_percentage freq = spice["default_event_frequency"] bitline_dynamic = self.calc_dynamic_power(corner, cell_load, freq, swing=bl_swing) - + # Calculate the bitcell power which currently only includes leakage cell_power = self.cell.analytical_power(corner, load) - + # Leakage power grows with entire array and bitlines. total_power = self.return_power(cell_power.dynamic + bitline_dynamic * self.column_size, cell_power.leakage * self.column_size * self.row_size) @@ -102,7 +102,7 @@ class bitcell_array(bitcell_base_array): bitcell_wl_cin = self.cell.get_wl_cin() total_cin = bitcell_wl_cin * self.column_size return total_cin - + def graph_exclude_bits(self, targ_row, targ_col): """Excludes bits in column from being added to graph except target""" # Function is not robust with column mux configurations @@ -111,7 +111,7 @@ class bitcell_array(bitcell_base_array): if row == targ_row and col == targ_col: continue self.graph_inst_exclude.add(self.cell_inst[row, col]) - + def get_cell_name(self, inst_name, row, col): """Gets the spice name of the target bitcell.""" return inst_name + '.x' + self.cell_inst[row, col].name, self.cell_inst[row, col] diff --git a/compiler/modules/port_address.py b/compiler/modules/port_address.py index 14d0b833..48140995 100644 --- a/compiler/modules/port_address.py +++ b/compiler/modules/port_address.py @@ -19,12 +19,12 @@ class port_address(design.design): """ def __init__(self, cols, rows, port, name=""): - + self.num_cols = cols self.num_rows = rows self.port = port self.addr_size = ceil(log(self.num_rows, 2)) - + if name == "": name = "port_address_{0}_{1}".format(cols, rows) super().__init__(name) @@ -42,7 +42,7 @@ class port_address(design.design): self.create_row_decoder() self.create_wordline_driver() self.create_rbl_driver() - + def create_layout(self): if "li" in layer: self.route_layer = "li" @@ -57,23 +57,23 @@ class port_address(design.design): for bit in range(self.addr_size): self.add_pin("addr_{0}".format(bit), "INPUT") - + self.add_pin("wl_en", "INPUT") for bit in range(self.num_rows): self.add_pin("wl_{0}".format(bit), "OUTPUT") - + self.add_pin("rbl_wl", "OUTPUT") - + self.add_pin("vdd", "POWER") self.add_pin("gnd", "GROUND") - + def route_layout(self): """ Create routing amoung the modules """ self.route_pins() self.route_internal() self.route_supplies() - + def route_supplies(self): """ Propagate all vdd/gnd pins up to this level for all modules """ for inst in [self.wordline_driver_array_inst, self.row_decoder_inst]: @@ -85,7 +85,7 @@ class port_address(design.design): self.add_power_pin("vdd", rbl_vdd_pin.center()) else: self.add_power_pin("vdd", rbl_vdd_pin.lc()) - + def route_pins(self): for row in range(self.addr_size): decoder_name = "addr_{}".format(row) @@ -96,7 +96,7 @@ class port_address(design.design): self.copy_layout_pin(self.wordline_driver_array_inst, driver_name) self.copy_layout_pin(self.rbl_driver_inst, "Z", "rbl_wl") - + def route_internal(self): for row in range(self.num_rows): # The pre/post is to access the pin from "outside" the cell to avoid DRCs @@ -133,13 +133,13 @@ class port_address(design.design): self.add_layout_pin_rect_center(text="wl_en", layer=en_pin.layer, offset=rbl_in_pos) - + def add_modules(self): self.row_decoder = factory.create(module_type="decoder", num_outputs=self.num_rows) self.add_mod(self.row_decoder) - + self.wordline_driver_array = factory.create(module_type="wordline_driver_array", rows=self.num_rows, cols=self.num_cols) @@ -165,12 +165,12 @@ class port_address(design.design): self.rbl_driver = factory.create(module_type="buf_dec", size=driver_size, height=b.height) - + self.add_mod(self.rbl_driver) - + def create_row_decoder(self): """ Create the hierarchical row decoder """ - + self.row_decoder_inst = self.add_inst(name="row_decoder", mod=self.row_decoder) @@ -187,7 +187,7 @@ class port_address(design.design): self.rbl_driver_inst = self.add_inst(name="rbl_driver", mod=self.rbl_driver) - + temp = [] temp.append("wl_en") temp.append("rbl_wl") @@ -197,7 +197,7 @@ class port_address(design.design): def create_wordline_driver(self): """ Create the Wordline Driver """ - + self.wordline_driver_array_inst = self.add_inst(name="wordline_driver", mod=self.wordline_driver_array) @@ -231,7 +231,7 @@ class port_address(design.design): rbl_driver_offset = vector(x_offset, self.wordline_driver_array.height) self.rbl_driver_inst.place(rbl_driver_offset) - + # Pass this up self.predecoder_height = self.row_decoder.predecoder_height diff --git a/compiler/modules/port_data.py b/compiler/modules/port_data.py index 636f4b44..9848341e 100644 --- a/compiler/modules/port_data.py +++ b/compiler/modules/port_data.py @@ -39,7 +39,7 @@ class port_data(design.design): self.bit_offsets.append(i * bitcell.width) else: self.bit_offsets = bit_offsets - + if name == "": name = "port_data_{0}".format(self.port) super().__init__(name) @@ -189,7 +189,7 @@ class port_data(design.design): # Precharge will be shifted left if needed # Column offset is set to port so extra column can be on left or right # and mirroring happens correctly - + # Used for names/dimensions only self.cell = factory.create(module_type="bitcell") @@ -295,7 +295,7 @@ class port_data(design.design): for bit in range(self.num_cols): temp.append("bl_{0}".format(bit)) temp.append("br_{0}".format(bit)) - + for bit in range(self.num_spare_cols): temp.append("sparebl_{0}".format(bit)) temp.append("sparebr_{0}".format(bit)) @@ -352,12 +352,12 @@ class port_data(design.design): else: temp.append("bl_out_{0}".format(bit)) temp.append("br_out_{0}".format(bit)) - + for bit in range(self.num_spare_cols): temp.append("dout_{}".format(self.word_size + bit)) temp.append("sparebl_{0}".format(bit)) - temp.append("sparebr_{0}".format(bit)) - + temp.append("sparebr_{0}".format(bit)) + temp.append("s_en") temp.extend(["vdd", "gnd"]) self.connect_inst(temp) @@ -561,26 +561,26 @@ class port_data(design.design): else: start_bit=0 - # spare cols connected to precharge array since they are read independently + # spare cols connected to precharge array since they are read independently if self.num_spare_cols and self.col_addr_size>0: if self.port==0: off = 1 else: off = 0 - + self.channel_route_bitlines(inst1=self.column_mux_array_inst, inst1_bls_template="{inst}_out_{bit}", inst2=inst2, num_bits=self.word_size, inst1_start_bit=start_bit) - + self.channel_route_bitlines(inst1=self.precharge_array_inst, inst1_bls_template="{inst}_{bit}", inst2=inst2, num_bits=self.num_spare_cols, inst1_start_bit=self.num_cols + off, inst2_start_bit=self.word_size) - + elif layer_props.port_data.channel_route_bitlines: self.channel_route_bitlines(inst1=inst1, inst1_bls_template=inst1_bls_templ, @@ -595,7 +595,7 @@ class port_data(design.design): inst2=inst2, num_bits=self.word_size, inst1_start_bit=start_bit) - + def route_write_driver_to_column_mux_or_precharge_array(self, port): """ Routing of BL and BR between sense_amp and column mux or precharge array """ inst2 = self.write_driver_array_inst @@ -619,19 +619,19 @@ class port_data(design.design): else: off = 0 - # Channel route spare columns' bitlines + # Channel route spare columns' bitlines if self.num_spare_cols and self.col_addr_size>0: if self.port==0: off = 1 else: off = 0 - + self.channel_route_bitlines(inst1=self.column_mux_array_inst, inst1_bls_template="{inst}_out_{bit}", inst2=inst2, num_bits=self.word_size, inst1_start_bit=start_bit) - + self.channel_route_bitlines(inst1=self.precharge_array_inst, inst1_bls_template="{inst}_{bit}", inst2=inst2, @@ -689,7 +689,7 @@ class port_data(design.design): "br_{}".format(bit)) else: debug.error("Didn't find precharge array.") - + # Copy bitlines of spare columns for bit in range(self.num_spare_cols): if self.precharge_array_inst: diff --git a/compiler/modules/precharge_array.py b/compiler/modules/precharge_array.py index 7f101ac9..a9cf2824 100644 --- a/compiler/modules/precharge_array.py +++ b/compiler/modules/precharge_array.py @@ -23,7 +23,7 @@ class precharge_array(design.design): super().__init__(name) debug.info(1, "Creating {0}".format(self.name)) self.add_comment("cols: {0} size: {1} bl: {2} br: {3}".format(columns, size, bitcell_bl, bitcell_br)) - + self.columns = columns self.offsets = offsets self.size = size @@ -35,7 +35,7 @@ class precharge_array(design.design): self.en_bar_layer = "m3" else: self.en_bar_layer = "m1" - + self.create_netlist() if not OPTS.netlist_only: self.create_layout() @@ -61,10 +61,10 @@ class precharge_array(design.design): self.add_modules() self.add_pins() self.create_insts() - + def create_layout(self): self.place_insts() - + self.width = self.offsets[-1] + self.pc_cell.width self.height = self.pc_cell.height @@ -94,12 +94,12 @@ class precharge_array(design.design): to_layer=self.en_bar_layer, offset=inst.get_pin("en_bar").center()) self.copy_layout_pin(inst, "vdd") - + for i in range(len(self.local_insts)): inst = self.local_insts[i] self.copy_layout_pin(inst, "bl", "bl_{0}".format(i)) self.copy_layout_pin(inst, "br", "br_{0}".format(i)) - + def create_insts(self): """Creates a precharge array by horizontally tiling the precharge cell""" self.local_insts = [] @@ -114,7 +114,7 @@ class precharge_array(design.design): def place_insts(self): """ Places precharge array by horizontally tiling the precharge cell""" - + # Default to single spaced columns if not self.offsets: self.offsets = [n * self.pc_cell.width for n in range(self.columns)] @@ -130,4 +130,4 @@ class precharge_array(design.design): offset = vector(tempx, 0) self.local_insts[i].place(offset=offset, mirror=mirror) - + diff --git a/compiler/modules/replica_bitcell_array.py b/compiler/modules/replica_bitcell_array.py index 12c1706e..5c354c97 100644 --- a/compiler/modules/replica_bitcell_array.py +++ b/compiler/modules/replica_bitcell_array.py @@ -52,7 +52,7 @@ class replica_bitcell_array(bitcell_base_array): else: self.right_rbl=[1] if len(self.all_ports) > 1 else [] self.rbls = self.left_rbl + self.right_rbl - + debug.check(sum(self.rbl) == len(self.all_ports), "Invalid number of RBLs for port configuration.") debug.check(sum(self.rbl) >= len(self.left_rbl) + len(self.right_rbl), @@ -80,7 +80,7 @@ class replica_bitcell_array(bitcell_base_array): # We don't offset this because we need to align # the replica bitcell in the control logic # self.offset_all_coordinates() - + def create_netlist(self): """ Create and connect the netlist """ self.add_modules() @@ -119,7 +119,7 @@ class replica_bitcell_array(bitcell_base_array): # Replica bitlines self.replica_columns = {} - + for port in self.all_ports: if port in self.left_rbl: # We will always have self.rbl[0] rows of replica wordlines below @@ -127,17 +127,17 @@ class replica_bitcell_array(bitcell_base_array): # These go from the top (where the bitcell array starts ) down replica_bit = self.rbl[0] - port elif port in self.right_rbl: - + # We will always have self.rbl[0] rows of replica wordlines below # the array. # These go from the bottom up replica_bit = self.rbl[0] + self.row_size + port else: continue - + # If we have an odd numer on the bottom column_offset = self.rbl[0] + 1 - + self.replica_columns[port] = factory.create(module_type="replica_column", rows=self.row_size, rbl=self.rbl, @@ -213,7 +213,7 @@ class replica_bitcell_array(bitcell_base_array): # # vdd # gnd - + self.add_bitline_pins() self.add_wordline_pins() self.add_pin("vdd", "POWER") @@ -238,13 +238,13 @@ class replica_bitcell_array(bitcell_base_array): self.add_pin_list(self.all_bitline_names, "INOUT") for port in self.right_rbl: self.add_pin_list(self.rbl_bitline_names[port], "INOUT") - + def add_wordline_pins(self): try: end_caps_enabled = cell_properties.bitcell.end_caps except AttributeError: end_caps_enabled = False - + # Wordlines to ground self.gnd_wordline_names = [] @@ -259,7 +259,7 @@ class replica_bitcell_array(bitcell_base_array): self.wordline_names = self.bitcell_array.wordline_names self.all_wordline_names = self.bitcell_array.all_wordline_names - + # All wordlines including dummy and RBL self.replica_array_wordline_names = [] self.replica_array_wordline_names.extend(["gnd"] * len(self.col_cap_top.get_wordline_names())) @@ -297,7 +297,7 @@ class replica_bitcell_array(bitcell_base_array): self.connect_inst(self.rbl_bitline_names[port] + self.replica_array_wordline_names + self.supplies) else: self.replica_col_insts.append(None) - + # Dummy rows under the bitcell array (connected with with the replica cell wl) self.dummy_row_replica_insts = [] # Note, this is the number of left and right even if we aren't adding the columns to this bitcell array! @@ -347,7 +347,7 @@ class replica_bitcell_array(bitcell_base_array): self.bitcell_array_inst.place(offset=self.unused_offset) self.add_replica_columns() - + self.add_end_caps() @@ -359,7 +359,7 @@ class replica_bitcell_array(bitcell_base_array): self.add_layout_pins() self.route_unused_wordlines() - + self.add_boundary() self.DRC_LVS() @@ -419,7 +419,7 @@ class replica_bitcell_array(bitcell_base_array): dummy_offset = self.bitcell_offset.scale(0, bit + bit % 2) + self.bitcell_array_inst.ul() self.dummy_row_replica_insts[self.rbl[0] + bit].place(offset=dummy_offset, mirror="MX" if bit % 2 else "R0") - + def add_end_caps(self): """ Add dummy cells or end caps around the array """ try: @@ -465,7 +465,7 @@ class replica_bitcell_array(bitcell_base_array): def add_layout_pins(self): """ Add the layout pins """ - + #All wordlines #Main array wl and bl/br @@ -514,7 +514,7 @@ class replica_bitcell_array(bitcell_base_array): # vdd/gnd are only connected in the perimeter cells # replica column should only have a vdd/gnd in the dummy cell on top/bottom supply_insts = self.dummy_col_insts + self.dummy_row_insts - + for pin_name in self.supplies: for inst in supply_insts: pin_list = inst.get_pins(pin_name) @@ -560,7 +560,7 @@ class replica_bitcell_array(bitcell_base_array): def ground_pin(self, inst, name): pin = inst.get_pin(name) pin_layer = pin.layer - + left_pin_loc = vector(self.dummy_col_insts[0].lx(), pin.cy()) right_pin_loc = vector(self.dummy_col_insts[1].rx(), pin.cy()) @@ -573,7 +573,7 @@ class replica_bitcell_array(bitcell_base_array): # Add a path to connect to the array self.add_path(pin_layer, [left_loc, left_pin_loc]) self.add_path(pin_layer, [right_loc, right_pin_loc]) - + def gen_bl_wire(self): if OPTS.netlist_only: height = 0 @@ -605,7 +605,7 @@ class replica_bitcell_array(bitcell_base_array): return self.bitcell_array.get_cell_name(inst_name + '.x' + self.bitcell_array_inst.name, row, col) def clear_exclude_bits(self): - """ + """ Clears the bit exclusions """ self.bitcell_array.init_graph_params() diff --git a/compiler/modules/replica_column.py b/compiler/modules/replica_column.py index 5a33a6d0..3788909c 100644 --- a/compiler/modules/replica_column.py +++ b/compiler/modules/replica_column.py @@ -35,7 +35,7 @@ class replica_column(bitcell_base_array): self.total_size += 2 except AttributeError: self.total_size += 2 - + self.column_offset = column_offset debug.check(replica_bit != 0 and replica_bit != rows, @@ -96,7 +96,7 @@ class replica_column(bitcell_base_array): end_caps_enabled = cell_properties.bitcell.end_caps except AttributeError: end_caps_enabled = False - + for row in range(self.total_size): name="rbc_{0}".format(row) # Top/bottom cell are always dummy cells. @@ -197,7 +197,7 @@ class replica_column(bitcell_base_array): self.copy_power_pins(inst, pin_name) else: self.copy_layout_pin(inst, pin_name) - + def get_bitline_names(self, port=None): if port == None: return self.all_bitline_names @@ -205,9 +205,9 @@ class replica_column(bitcell_base_array): return self.bitline_names[port] def get_bitcell_pins(self, row, col): - """ + """ Creates a list of connections in the bitcell, - indexed by column and row, for instance use in bitcell_array + indexed by column and row, for instance use in bitcell_array """ bitcell_pins = [] for port in self.all_ports: @@ -219,7 +219,7 @@ class replica_column(bitcell_base_array): return bitcell_pins def get_bitcell_pins_col_cap(self, row, col): - """ + """ Creates a list of connections in the bitcell, indexed by column and row, for instance use in bitcell_array """ @@ -242,4 +242,4 @@ class replica_column(bitcell_base_array): if row != self.replica_bit: self.graph_inst_exclude.add(cell) - + diff --git a/compiler/modules/sense_amp.py b/compiler/modules/sense_amp.py index 21353f4c..dac6baac 100644 --- a/compiler/modules/sense_amp.py +++ b/compiler/modules/sense_amp.py @@ -36,16 +36,16 @@ class sense_amp(design.design): (width, height) = utils.get_libcell_size(name, GDS["unit"], layer[self.cell_size_layer]) - + pin_map = utils.get_libcell_pins(self.pin_names, name, GDS["unit"]) - + self.width = width self.height = height self.pin_map = pin_map self.add_pin_types(self.type_list) - + def get_bl_names(self): return props.sense_amp.pin.bl @@ -61,16 +61,16 @@ class sense_amp(design.design): return props.sense_amp.pin.en def get_cin(self): - + # FIXME: This input load will be applied to both the s_en timing and bitline timing. - + # Input load for the bitlines which are connected to the source/drain of a TX. Not the selects. from tech import spice # Default is 8x. Per Samira and Hodges-Jackson book: # "Column-mux transistors driven by the decoder must be sized for optimal speed" bitline_pmos_size = 8 # FIXME: This should be set somewhere and referenced. Probably in tech file. return spice["min_tx_drain_c"] * bitline_pmos_size # ff - + def get_stage_effort(self, load): # Delay of the sense amp will depend on the size of the amp and the output load. parasitic_delay = 1 @@ -84,14 +84,14 @@ class sense_amp(design.design): # Power in this module currently not defined. Returns 0 nW (leakage and dynamic). total_power = self.return_power() return total_power - + def get_enable_name(self): """Returns name used for enable net""" # FIXME: A better programmatic solution to designate pins enable_name = self.en_name debug.check(enable_name in self.pin_names, "Enable name {} not found in pin list".format(enable_name)) return enable_name - + def build_graph(self, graph, inst_name, port_nets): """Adds edges based on inputs/outputs. Overrides base class function.""" self.add_graph_edges(graph, port_nets) diff --git a/compiler/modules/sense_amp_array.py b/compiler/modules/sense_amp_array.py index a46ccebf..f7f08bf2 100644 --- a/compiler/modules/sense_amp_array.py +++ b/compiler/modules/sense_amp_array.py @@ -34,7 +34,7 @@ class sense_amp_array(design.design): self.num_spare_cols = 0 else: self.num_spare_cols = num_spare_cols - + self.column_offset = column_offset self.row_size = self.word_size * self.words_per_row @@ -71,13 +71,13 @@ class sense_amp_array(design.design): def create_layout(self): self.place_sense_amp_array() - + self.height = self.amp.height self.width = self.local_insts[-1].rx() self.add_layout_pins() self.route_rails() - + self.add_boundary() self.DRC_LVS() @@ -115,7 +115,7 @@ class sense_amp_array(design.design): self.amp_spacing = self.bitcell.width else: self.amp_spacing = self.amp.width - + if not self.offsets: self.offsets = [] for i in range(self.num_cols + self.num_spare_cols): @@ -130,7 +130,7 @@ class sense_amp_array(design.design): amp_position = vector(xoffset, 0) self.local_insts[i].place(offset=amp_position, mirror=mirror) - + # place spare sense amps (will share the same enable as regular sense amps) for i, xoffset in enumerate(self.offsets[self.num_cols:]): index = self.word_size + i diff --git a/compiler/modules/tri_gate_array.py b/compiler/modules/tri_gate_array.py index c329a04b..432d3a44 100644 --- a/compiler/modules/tri_gate_array.py +++ b/compiler/modules/tri_gate_array.py @@ -25,7 +25,7 @@ class tri_gate_array(design.design): self.columns = columns self.word_size = word_size self.words_per_row = int(self.columns / self.word_size) - + self.create_netlist() if not OPTS.netlist_only: self.create_layout() @@ -34,7 +34,7 @@ class tri_gate_array(design.design): self.add_modules() self.add_pins() self.create_array() - + def create_layout(self): self.width = (self.columns / self.words_per_row) * self.tri.width self.height = self.tri.height @@ -47,7 +47,7 @@ class tri_gate_array(design.design): def add_modules(self): self.tri = factory.create(module_type="tri_gate") self.add_mod(self.tri) - + def add_pins(self): """create the name of pins depend on the word size""" for i in range(self.word_size): @@ -74,10 +74,10 @@ class tri_gate_array(design.design): for i in range(0,self.columns,self.words_per_row): base = vector(i*self.tri.width, 0) self.tri_inst[i].place(base) - + def add_layout_pins(self): - + for i in range(0,self.columns,self.words_per_row): index = int(i/self.words_per_row) @@ -105,7 +105,7 @@ class tri_gate_array(design.design): self.add_layout_pin_rect_center(text=n, layer="m3", offset=pin_pos) - + width = self.tri.width * self.columns - (self.words_per_row - 1) * self.tri.width en_pin = self.tri_inst[0].get_pin("en") @@ -114,7 +114,7 @@ class tri_gate_array(design.design): offset=en_pin.ll().scale(0, 1), width=width, height=drc("minwidth_m1")) - + enbar_pin = self.tri_inst[0].get_pin("en_bar") self.add_layout_pin(text="en_bar", layer="m1", diff --git a/compiler/modules/wordline_buffer_array.py b/compiler/modules/wordline_buffer_array.py index 3b83b5eb..90703bc1 100644 --- a/compiler/modules/wordline_buffer_array.py +++ b/compiler/modules/wordline_buffer_array.py @@ -23,7 +23,7 @@ class wordline_buffer_array(design.design): design.design.__init__(self, name) debug.info(1, "Creating {0}".format(self.name)) self.add_comment("rows: {0} cols: {1}".format(rows, cols)) - + self.rows = rows self.cols = cols @@ -35,7 +35,7 @@ class wordline_buffer_array(design.design): self.add_modules() self.add_pins() self.create_drivers() - + def create_layout(self): if "li" in layer: self.route_layer = "li" @@ -47,7 +47,7 @@ class wordline_buffer_array(design.design): self.offset_all_coordinates() self.add_boundary() self.DRC_LVS() - + def add_pins(self): # inputs to wordline_driver. for i in range(self.rows): @@ -60,12 +60,12 @@ class wordline_buffer_array(design.design): def add_modules(self): b = factory.create(module_type="bitcell") - + self.wl_driver = factory.create(module_type="inv_dec", size=self.cols, height=b.height) self.add_mod(self.wl_driver) - + def route_vdd_gnd(self): """ Add a pin for each row of vdd/gnd which @@ -84,7 +84,7 @@ class wordline_buffer_array(design.design): xoffset_list = [self.wld_inst[0].rx()] for num in range(self.rows): # this will result in duplicate polygons for rails, but who cares - + # use the inverter offset even though it will be the and's too (gate_offset, y_dir) = self.get_gate_offset(0, self.wl_driver.height, @@ -92,12 +92,12 @@ class wordline_buffer_array(design.design): # Route both supplies for name in ["vdd", "gnd"]: supply_pin = self.wld_inst[num].get_pin(name) - + # Add pins in two locations for xoffset in xoffset_list: pin_pos = vector(xoffset, supply_pin.cy()) self.add_power_pin(name, pin_pos) - + def create_drivers(self): self.wld_inst = [] for row in range(self.rows): @@ -119,7 +119,7 @@ class wordline_buffer_array(design.design): inst_mirror = "MX" offset = [0, y_offset] - + self.wld_inst[row].place(offset=offset, mirror=inst_mirror) diff --git a/compiler/modules/wordline_driver_array.py b/compiler/modules/wordline_driver_array.py index c8d22260..a310a26f 100644 --- a/compiler/modules/wordline_driver_array.py +++ b/compiler/modules/wordline_driver_array.py @@ -24,7 +24,7 @@ class wordline_driver_array(design.design): super().__init__(name) debug.info(1, "Creating {0}".format(self.name)) self.add_comment("rows: {0} cols: {1}".format(rows, cols)) - + self.rows = rows self.cols = cols @@ -36,7 +36,7 @@ class wordline_driver_array(design.design): self.add_modules() self.add_pins() self.create_drivers() - + def create_layout(self): if "li" in layer: self.route_layer = "li" @@ -48,7 +48,7 @@ class wordline_driver_array(design.design): self.offset_x_coordinates() self.add_boundary() self.DRC_LVS() - + def add_pins(self): # inputs to wordline_driver. for i in range(self.rows): @@ -61,12 +61,12 @@ class wordline_driver_array(design.design): self.add_pin("gnd", "GROUND") def add_modules(self): - + self.wl_driver = factory.create(module_type="wordline_driver", cols=self.cols) - + self.add_mod(self.wl_driver) - + def route_vdd_gnd(self): """ Add a pin for each row of vdd/gnd which @@ -85,7 +85,7 @@ class wordline_driver_array(design.design): xoffset_list = [self.wld_inst[0].rx()] for num in range(self.rows): # this will result in duplicate polygons for rails, but who cares - + # use the inverter offset even though it will be the and's too (gate_offset, y_dir) = self.get_gate_offset(0, self.wl_driver.height, @@ -93,12 +93,12 @@ class wordline_driver_array(design.design): # Route both supplies for name in ["vdd", "gnd"]: supply_pin = self.wld_inst[num].get_pin(name) - + # Add pins in two locations for xoffset in xoffset_list: pin_pos = vector(xoffset, supply_pin.cy()) self.add_power_pin(name, pin_pos) - + def create_drivers(self): self.wld_inst = [] for row in range(self.rows): @@ -123,7 +123,7 @@ class wordline_driver_array(design.design): inst_mirror = "R0" and2_offset = [self.wl_driver.width, y_offset] - + # add and2 self.wld_inst[row].place(offset=and2_offset, mirror=inst_mirror) @@ -143,7 +143,7 @@ class wordline_driver_array(design.design): layer="m2", offset=en_bottom_pos, height=self.height) - + for row in range(self.rows): and_inst = self.wld_inst[row] @@ -152,7 +152,7 @@ class wordline_driver_array(design.design): self.add_via_stack_center(from_layer=b_pin.layer, to_layer="m2", offset=b_pin.center()) - + # connect the decoder input pin to and2 A self.copy_layout_pin(and_inst, "A", "in_{0}".format(row)) diff --git a/compiler/modules/write_driver_array.py b/compiler/modules/write_driver_array.py index a2458f42..6806f034 100644 --- a/compiler/modules/write_driver_array.py +++ b/compiler/modules/write_driver_array.py @@ -121,13 +121,13 @@ class write_driver_array(design.design): if w == self.write_size: w = 0 windex+=1 - + elif self.num_spare_cols and not self.write_size: self.connect_inst([self.data_name + "_{0}".format(index), self.get_bl_name() + "_{0}".format(index), self.get_br_name() + "_{0}".format(index), self.en_name + "_{0}".format(0), "vdd", "gnd"]) - + else: self.connect_inst([self.data_name + "_{0}".format(index), self.get_bl_name() + "_{0}".format(index), @@ -173,13 +173,13 @@ class write_driver_array(design.design): # place spare write drivers (if spare columns are specified) for i, xoffset in enumerate(self.offsets[self.columns:]): index = self.word_size + i - + if cell_properties.bitcell.mirror.y and (index + self.column_offset) % 2: mirror = "MY" xoffset = xoffset + self.driver.width else: mirror = "" - + base = vector(xoffset, 0) self.driver_insts[index].place(offset=base, mirror=mirror) @@ -229,14 +229,14 @@ class write_driver_array(design.design): offset=en_pin.ll(), width=wmask_en_len - en_gap, height=en_pin.height()) - + for i in range(self.num_spare_cols): inst = self.driver_insts[self.word_size + i] en_pin = inst.get_pin(inst.mod.en_name) self.add_layout_pin(text=self.en_name + "_{0}".format(i + self.num_wmasks), layer="m1", offset=en_pin.lr() + vector(-drc("minwidth_m1"),0)) - + elif self.num_spare_cols and not self.write_size: # shorten enable rail to accomodate those for spare write drivers left_inst = self.driver_insts[0] diff --git a/compiler/modules/write_mask_and_array.py b/compiler/modules/write_mask_and_array.py index 94446755..db8c4e1d 100644 --- a/compiler/modules/write_mask_and_array.py +++ b/compiler/modules/write_mask_and_array.py @@ -96,7 +96,7 @@ class write_mask_and_array(design.design): self.offsets = [] for i in range(self.columns): self.offsets.append(i * self.driver_spacing) - + self.width = self.offsets[-1] + self.driver_spacing self.height = self.and2.height @@ -128,7 +128,7 @@ class write_mask_and_array(design.design): layer="m2", offset=in_pos) self.add_path(a_pin.layer, [in_pos, a_pos]) - + # Copy remaining layout pins self.copy_layout_pin(self.and2_insts[i], "Z", "wmask_out_{0}".format(i)) diff --git a/compiler/openram.py b/compiler/openram.py index f046fdb1..25587f6c 100755 --- a/compiler/openram.py +++ b/compiler/openram.py @@ -64,7 +64,7 @@ output_extensions = ["lvs", "sp", "v", "lib", "py", "html", "log"] # Only output lef/gds if back-end if not OPTS.netlist_only: output_extensions.extend(["lef", "gds"]) - + output_files = ["{0}{1}.{2}".format(OPTS.output_path, OPTS.output_name, x) for x in output_extensions] diff --git a/compiler/options.py b/compiler/options.py index 0f94be2b..1a0d1804 100644 --- a/compiler/options.py +++ b/compiler/options.py @@ -33,7 +33,7 @@ class options(optparse.Values): # By default, use local arrays with a max fanout of 16 #local_array_size = 16 - + # Write mask size, default will be overwritten with word_size if not user specified write_size = None @@ -140,7 +140,7 @@ class options(optparse.Values): # Route the input/output pins to the perimeter perimeter_pins = False - + purge_temp = True # These are the default modules that can be over-riden diff --git a/compiler/pgates/column_mux.py b/compiler/pgates/column_mux.py index 18092b4d..844fd00a 100644 --- a/compiler/pgates/column_mux.py +++ b/compiler/pgates/column_mux.py @@ -110,7 +110,7 @@ class column_mux(pgate.pgate): layer=self.pin_layer, offset=br_pos, height=self.pin_height) - + def place_ptx(self): """ Create the two pass gate NMOS transistors to switch the bitlines""" @@ -126,7 +126,7 @@ class column_mux(pgate.pgate): if cell_props.pgate.add_implants: self.extend_implants() - + def connect_poly(self): """ Connect the poly gate of the two pass transistors """ @@ -197,7 +197,7 @@ class column_mux(pgate.pgate): + nmos_lower_d_pin.uc().scale(1, 0.5) self.add_path(self.col_mux_stack[2], [br_pin.bc(), mid1, mid2, nmos_lower_d_pin.center()]) - + def extend_implants(self): """ Add top-to-bottom implants for adjacency issues in s8. @@ -210,7 +210,7 @@ class column_mux(pgate.pgate): ll, ur.x - ll.x, ur.y - ll.y) - + def add_pn_wells(self): """ Add a well and implant over the whole cell. Also, add the diff --git a/compiler/pgates/pand2.py b/compiler/pgates/pand2.py index 21241056..a6efc93b 100644 --- a/compiler/pgates/pand2.py +++ b/compiler/pgates/pand2.py @@ -38,7 +38,7 @@ class pand2(pgate.pgate): size_list=[self.size], height=self.height, add_wells=self.add_wells) - + self.add_mod(self.nand) self.add_mod(self.inv) @@ -48,14 +48,14 @@ class pand2(pgate.pgate): self.width = max(self.nand.width, self.inv.width) else: self.width = self.nand.width + self.inv.width - + self.place_insts() self.add_wires() self.add_layout_pins() self.route_supply_rails() self.add_boundary() self.DRC_LVS() - + def add_pins(self): self.add_pin("A", "INPUT") self.add_pin("B", "INPUT") @@ -67,7 +67,7 @@ class pand2(pgate.pgate): self.nand_inst = self.add_inst(name="pand2_nand", mod=self.nand) self.connect_inst(["A", "B", "zb_int", "vdd", "gnd"]) - + self.inv_inst = self.add_inst(name="pand2_inv", mod=self.inv) self.connect_inst(["zb_int", "Z", "vdd", "gnd"]) @@ -98,7 +98,7 @@ class pand2(pgate.pgate): layer=self.route_layer, offset=vector(0.5 * self.width, self.height), width=self.width) - + if self.vertical: # Shared between two gates y_offset = 0.5 * self.height @@ -108,7 +108,7 @@ class pand2(pgate.pgate): layer=self.route_layer, offset=vector(0.5 * self.width, y_offset), width=self.width) - + def add_wires(self): # nand Z to inv A z1_pin = self.nand_inst.get_pin("Z") @@ -130,7 +130,7 @@ class pand2(pgate.pgate): mid1_point = vector(z1_pin.cx(), a2_pin.cy()) self.add_path(route_layer, [z1_pin.center(), mid1_point, a2_pin.center()]) - + def add_layout_pins(self): pin = self.inv_inst.get_pin("Z") self.add_layout_pin_rect_center(text="Z", @@ -146,4 +146,3 @@ class pand2(pgate.pgate): offset=pin.center(), width=pin.width(), height=pin.height()) - \ No newline at end of file diff --git a/compiler/pgates/pand3.py b/compiler/pgates/pand3.py index 63d1cd0f..c99a303d 100644 --- a/compiler/pgates/pand3.py +++ b/compiler/pgates/pand3.py @@ -21,7 +21,7 @@ class pand3(pgate.pgate): self.vertical = vertical self.size = size - + # Creates the netlist and layout super().__init__(name, height, add_wells) @@ -59,7 +59,7 @@ class pand3(pgate.pgate): self.route_supply_rails() self.add_boundary() self.DRC_LVS() - + def add_pins(self): self.add_pin("A", "INPUT") self.add_pin("B", "INPUT") @@ -72,7 +72,7 @@ class pand3(pgate.pgate): self.nand_inst = self.add_inst(name="pand3_nand", mod=self.nand) self.connect_inst(["A", "B", "C", "zb_int", "vdd", "gnd"]) - + self.inv_inst = self.add_inst(name="pand3_inv", mod=self.inv) self.connect_inst(["zb_int", "Z", "vdd", "gnd"]) @@ -103,7 +103,7 @@ class pand3(pgate.pgate): layer=self.route_layer, offset=vector(0.5 * self.width, self.height), width=self.width) - + if self.vertical: # Shared between two gates y_offset = 0.5 * self.height @@ -113,7 +113,7 @@ class pand3(pgate.pgate): layer=self.route_layer, offset=vector(0.5 * self.width, y_offset), width=self.width) - + def add_wires(self): # nand Z to inv A z1_pin = self.nand_inst.get_pin("Z") @@ -161,4 +161,3 @@ class pand3(pgate.pgate): slew=nand_delay.slew, load=load) return nand_delay + inv_delay - \ No newline at end of file diff --git a/compiler/pgates/pand4.py b/compiler/pgates/pand4.py index 021ccf6c..e353f017 100644 --- a/compiler/pgates/pand4.py +++ b/compiler/pgates/pand4.py @@ -21,7 +21,7 @@ class pand4(pgate.pgate): self.vertical = vertical self.size = size - + # Creates the netlist and layout super().__init__(name, height, add_wells) @@ -59,7 +59,7 @@ class pand4(pgate.pgate): self.route_supply_rails() self.add_boundary() self.DRC_LVS() - + def add_pins(self): self.add_pin("A", "INPUT") self.add_pin("B", "INPUT") @@ -73,7 +73,7 @@ class pand4(pgate.pgate): self.nand_inst = self.add_inst(name="pand4_nand", mod=self.nand) self.connect_inst(["A", "B", "C", "D", "zb_int", "vdd", "gnd"]) - + self.inv_inst = self.add_inst(name="pand4_inv", mod=self.inv) self.connect_inst(["zb_int", "Z", "vdd", "gnd"]) @@ -104,7 +104,7 @@ class pand4(pgate.pgate): layer=self.route_layer, offset=vector(0.5 * self.width, self.height), width=self.width) - + if self.vertical: # Shared between two gates y_offset = 0.5 * self.height @@ -114,7 +114,7 @@ class pand4(pgate.pgate): layer=self.route_layer, offset=vector(0.5 * self.width, y_offset), width=self.width) - + def add_wires(self): # nand Z to inv A z1_pin = self.nand_inst.get_pin("Z") @@ -162,4 +162,4 @@ class pand4(pgate.pgate): slew=nand_delay.slew, load=load) return nand_delay + inv_delay - + diff --git a/compiler/pgates/pbuf.py b/compiler/pgates/pbuf.py index c2398d5f..4b6eee99 100644 --- a/compiler/pgates/pbuf.py +++ b/compiler/pgates/pbuf.py @@ -16,7 +16,7 @@ class pbuf(pgate.pgate): This is a simple buffer used for driving loads. """ def __init__(self, name, size=4, height=None): - + debug.info(1, "creating {0} with size of {1}".format(name, size)) self.add_comment("size: {}".format(size)) @@ -39,7 +39,7 @@ class pbuf(pgate.pgate): self.add_layout_pins() self.route_supply_rails() self.add_boundary() - + def add_pins(self): self.add_pin("A", "INPUT") self.add_pin("Z", "OUTPUT") @@ -53,7 +53,7 @@ class pbuf(pgate.pgate): size=input_size, height=self.height) self.add_mod(self.inv1) - + self.inv2 = factory.create(module_type="pinv", size=self.size, height=self.height, @@ -64,7 +64,7 @@ class pbuf(pgate.pgate): self.inv1_inst = self.add_inst(name="buf_inv1", mod=self.inv1) self.connect_inst(["A", "zb_int", "vdd", "gnd"]) - + self.inv2_inst = self.add_inst(name="buf_inv2", mod=self.inv2) self.connect_inst(["zb_int", "Z", "vdd", "gnd"]) @@ -75,13 +75,13 @@ class pbuf(pgate.pgate): # Add INV2 to the right self.inv2_inst.place(vector(self.inv1_inst.rx(), 0)) - + def add_wires(self): # inv1 Z to inv2 A z1_pin = self.inv1_inst.get_pin("Z") a2_pin = self.inv2_inst.get_pin("A") self.add_zjog(self.route_layer, z1_pin.center(), a2_pin.center()) - + def add_layout_pins(self): z_pin = self.inv2_inst.get_pin("Z") self.add_layout_pin_rect_center(text="Z", @@ -96,4 +96,4 @@ class pbuf(pgate.pgate): offset=a_pin.center(), width=a_pin.width(), height=a_pin.height()) - + diff --git a/compiler/pgates/pbuf_dec.py b/compiler/pgates/pbuf_dec.py index e5018b62..310f8c05 100644 --- a/compiler/pgates/pbuf_dec.py +++ b/compiler/pgates/pbuf_dec.py @@ -16,7 +16,7 @@ class pbuf_dec(pgate.pgate): This is a simple buffer used for driving wordlines. """ def __init__(self, name, size=4, height=None): - + debug.info(1, "creating {0} with size of {1}".format(name, size)) self.add_comment("size: {}".format(size)) @@ -39,7 +39,7 @@ class pbuf_dec(pgate.pgate): self.add_layout_pins() self.route_supply_rails() self.add_boundary() - + def add_pins(self): self.add_pin("A", "INPUT") self.add_pin("Z", "OUTPUT") @@ -53,7 +53,7 @@ class pbuf_dec(pgate.pgate): size=input_size, height=self.height) self.add_mod(self.inv1) - + self.inv2 = factory.create(module_type="pinv_dec", size=self.size, height=self.height) @@ -63,7 +63,7 @@ class pbuf_dec(pgate.pgate): self.inv1_inst = self.add_inst(name="buf_inv1", mod=self.inv1) self.connect_inst(["A", "zb_int", "vdd", "gnd"]) - + self.inv2_inst = self.add_inst(name="buf_inv2", mod=self.inv2) self.connect_inst(["zb_int", "Z", "vdd", "gnd"]) @@ -74,7 +74,7 @@ class pbuf_dec(pgate.pgate): # Add INV2 to the right self.inv2_inst.place(vector(self.inv1_inst.rx(), 0)) - + def add_wires(self): # inv1 Z to inv2 A z1_pin = self.inv1_inst.get_pin("Z") @@ -105,7 +105,7 @@ class pbuf_dec(pgate.pgate): offset=a_pin.center(), width=a_pin.width(), height=a_pin.height()) - + def get_stage_efforts(self, external_cout, inp_is_rise=False): """Get the stage efforts of the A -> Z path""" stage_effort_list = [] @@ -113,10 +113,10 @@ class pbuf_dec(pgate.pgate): stage1 = self.inv1.get_stage_effort(stage1_cout, inp_is_rise) stage_effort_list.append(stage1) last_stage_is_rise = stage1.is_rise - + stage2 = self.inv2.get_stage_effort(external_cout, last_stage_is_rise) stage_effort_list.append(stage2) - + return stage_effort_list def get_cin(self): diff --git a/compiler/pgates/pdriver.py b/compiler/pgates/pdriver.py index e48f9f6c..2c74be56 100644 --- a/compiler/pgates/pdriver.py +++ b/compiler/pgates/pdriver.py @@ -16,7 +16,7 @@ class pdriver(pgate.pgate): This instantiates an even or odd number of inverters sized for driving a load. """ - + def __init__(self, name, inverting=False, fanout=0, size_list=None, height=None, add_wells=True): debug.info(1, "creating pdriver {}".format(name)) @@ -33,10 +33,10 @@ class pdriver(pgate.pgate): debug.error("Cannot specify both size_list and fanout.", -1) if self.size_list and self.inverting: debug.error("Cannot specify both size_list and inverting.", -1) - + # Creates the netlist and layout super().__init__(name, height, add_wells) - + def compute_sizes(self): # size_list specified if self.size_list: @@ -78,7 +78,7 @@ class pdriver(pgate.pgate): self.extend_wells() self.route_supply_rails() self.add_boundary() - + def add_pins(self): self.add_pin("A", "INPUT") self.add_pin("Z", "OUTPUT") @@ -96,7 +96,7 @@ class pdriver(pgate.pgate): add_well=False self.inv_list.append(temp_inv) self.add_mod(temp_inv) - + def create_insts(self): self.inv_inst_list = [] for x in range(1, self.num_stages + 1): @@ -110,7 +110,7 @@ class pdriver(pgate.pgate): self.connect_inst(["A", "Z", "vdd", "gnd"]) else: self.connect_inst(["A", zbx_int, "vdd", "gnd"]) - + # Create last inverter elif x == self.num_stages: zbn_int = "Zb{}_int".format(x - 1) @@ -127,7 +127,7 @@ class pdriver(pgate.pgate): mod=self.inv_list[x - 1]) self.inv_inst_list.append(inst) self.connect_inst([zbx_int, zbn_int, "vdd", "gnd"]) - + def place_modules(self): # Add the first inverter at the origin self.inv_inst_list[0].place(vector(0, 0)) @@ -136,7 +136,7 @@ class pdriver(pgate.pgate): for x in range(1, len(self.inv_inst_list)): loc = vector(self.inv_inst_list[x - 1].rx(), 0) self.inv_inst_list[x].place(loc) - + def route_wires(self): z_inst_list = [] a_inst_list = [] @@ -168,4 +168,3 @@ class pdriver(pgate.pgate): def get_sizes(self): """ Return the relative sizes of the buffers """ return self.size_list - \ No newline at end of file diff --git a/compiler/pgates/pgate.py b/compiler/pgates/pgate.py index 468f367e..bb057726 100644 --- a/compiler/pgates/pgate.py +++ b/compiler/pgates/pgate.py @@ -17,7 +17,7 @@ from tech import cell_properties as cell_props if cell_props.ptx.bin_spice_models: from tech import nmos_bins, pmos_bins - + class pgate(design.design): """ This is a module that implements some shared @@ -34,7 +34,7 @@ class pgate(design.design): # By default, something simple self.height = 14 * self.m1_pitch self.add_wells = add_wells - + if "li" in layer: self.route_layer = "li" else: @@ -50,10 +50,10 @@ class pgate(design.design): contact_to_vdd_rail_space = 0.5 * self.route_layer_width + self.route_layer_space # This is a poly-to-poly of a flipped cell poly_to_poly_gate_space = self.poly_extend_active + 0.5 * self.poly_space - + self.top_bottom_space = max(contact_to_vdd_rail_space, poly_to_poly_gate_space) - + self.create_netlist() if not OPTS.netlist_only: self.create_layout() @@ -63,7 +63,7 @@ class pgate(design.design): def create_netlist(self): """ Pure virtual function """ debug.error("Must over-ride create_netlist.", -1) - + def create_layout(self): """ Pure virtual function """ debug.error("Must over-ride create_layout.", -1) @@ -71,10 +71,10 @@ class pgate(design.design): def connect_pin_to_rail(self, inst, pin_name, supply_name): """ Connects a ptx pin to a supply rail. """ supply_pin = self.get_pin(supply_name) - + source_pins = inst.get_pins(pin_name) for source_pin in source_pins: - + if supply_name == "gnd": height = supply_pin.by() - source_pin.by() elif supply_name == "vdd": @@ -87,7 +87,7 @@ class pgate(design.design): offset=source_pin.ll(), height=height, width=source_pin.width()) - + def route_input_gate(self, pmos_inst, nmos_inst, ypos, name, position="left", directions=None): """ Route the input gate to the left side of the cell for access. @@ -103,7 +103,7 @@ class pgate(design.design): self.gds_write("unaliged_gates.gds") debug.check(nmos_gate_pin.ll().x == pmos_gate_pin.ll().x, "Connecting unaligned gates not supported. See unaligned_gates.gds.") - + # Pick point on the left of NMOS and up to PMOS nmos_gate_pos = nmos_gate_pin.ul() + vector(0.5 * self.poly_width, 0) pmos_gate_pos = vector(nmos_gate_pos.x, pmos_gate_pin.bc().y) @@ -114,7 +114,7 @@ class pgate(design.design): # Center is completely symmetric. contact_width = contact.poly_contact.width - + if position == "center": contact_offset = left_gate_offset \ + vector(0.5 * self.poly_width, 0) @@ -158,7 +158,7 @@ class pgate(design.design): self.nwell_yoffset = 0.48 * self.height full_height = self.height + 0.5 * self.m1_width - + # FIXME: float rounding problem if "nwell" in layer: # Add a rail width to extend the well to the top of the rail @@ -197,13 +197,13 @@ class pgate(design.design): def add_nwell_contact(self, pmos, pmos_pos): """ Add an nwell contact next to the given pmos device. """ - + layer_stack = self.active_stack - + # To the right a spacing away from the pmos right active edge contact_xoffset = pmos_pos.x + pmos.active_width \ + self.active_space - + # 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. @@ -219,12 +219,12 @@ class pgate(design.design): implant_type="n", well_type="n", directions=("V", "V")) - + self.add_rect_center(layer=self.route_layer, 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 @@ -257,7 +257,7 @@ class pgate(design.design): rightx = None else: rightx = self.width - + nmos_insts = self.get_tx_insts("nmos") if len(nmos_insts) > 0: self.add_enclosure(nmos_insts, @@ -266,7 +266,7 @@ class pgate(design.design): leftx=0, rightx=rightx, boty=0) - + pmos_insts = self.get_tx_insts("pmos") if len(pmos_insts) > 0: self.add_enclosure(pmos_insts, @@ -275,7 +275,7 @@ class pgate(design.design): leftx=0, rightx=rightx, topy=self.height) - + try: ntap_insts = [self.nwell_contact] self.add_enclosure(ntap_insts, @@ -294,7 +294,7 @@ class pgate(design.design): boty=0) except AttributeError: pass - + def add_pwell_contact(self, nmos, nmos_pos): """ Add an pwell contact next to the given nmos device. """ @@ -318,7 +318,7 @@ class pgate(design.design): implant_type="p", well_type="p", directions=("V", "V")) - + self.add_rect_center(layer=self.route_layer, offset=contact_offset.scale(1, 0.5), width=self.pwell_contact.mod.second_layer_width, @@ -343,14 +343,14 @@ class pgate(design.design): # offset=implant_offset, # width=implant_width, # height=implant_height) - + def route_supply_rails(self): """ Add vdd/gnd rails to the top and bottom. """ self.add_layout_pin_rect_center(text="gnd", layer=self.route_layer, offset=vector(0.5 * self.width, 0), width=self.width) - + self.add_layout_pin_rect_center(text="vdd", layer=self.route_layer, offset=vector(0.5 * self.width, self.height), @@ -368,7 +368,7 @@ class pgate(design.design): max_active_xoffset = self.find_highest_layer_coords("active").x max_route_xoffset = self.find_highest_layer_coords(self.route_layer).x + 0.5 * self.m1_space width = max(max_active_xoffset, max_route_xoffset) - + self.width = width @staticmethod @@ -379,7 +379,7 @@ class pgate(design.design): # Find all of the relavent scaled bins and multiples scaled_bins = pgate.scaled_bins(tx_type, target_width) - + for (scaled_width, multiple) in scaled_bins: if abs(target_width - scaled_width) / target_width <= 1 - OPTS.accuracy_requirement: break diff --git a/compiler/pgates/pinv.py b/compiler/pgates/pinv.py index 2546f833..eff1337b 100644 --- a/compiler/pgates/pinv.py +++ b/compiler/pgates/pinv.py @@ -44,7 +44,7 @@ class pinv(pgate.pgate): self.nmos_size = size self.pmos_size = beta * size self.beta = beta - + super().__init__(name, height, add_wells) def create_netlist(self): @@ -53,7 +53,7 @@ class pinv(pgate.pgate): self.determine_tx_mults() self.add_ptx() self.create_ptx() - + def create_layout(self): """ Calls all functions related to the generation of the layout """ self.place_ptx() @@ -70,7 +70,7 @@ class pinv(pgate.pgate): self.route_supply_rails() self.connect_rails() self.add_boundary() - + def add_pins(self): """ Adds pins for spice netlist """ pin_list = ["A", "Z", "vdd", "gnd"] @@ -92,7 +92,7 @@ class pinv(pgate.pgate): (self.nmos_width, self.tx_mults) = pgate.pgate.best_bin("nmos", self.nmos_width) (self.pmos_width, self.tx_mults) = pgate.pgate.best_bin("pmos", self.pmos_width) return - + # Do a quick sanity check and bail if unlikely feasible height # Sanity check. can we make an inverter in the height # with minimum tx sizes? @@ -108,7 +108,7 @@ class pinv(pgate.pgate): # rotated m1 pitch or poly to active spacing min_channel = max(contact.poly_contact.width + self.m1_space, contact.poly_contact.width + 2 * self.poly_to_active) - + total_height = tx_height + min_channel + 2 * self.top_bottom_space # debug.check(self.height > total_height, # "Cell height {0} too small for simple min height {1}.".format(self.height, @@ -208,7 +208,7 @@ class pinv(pgate.pgate): connect_poly=True, connect_drain_active=True) self.add_mod(self.nmos) - + self.pmos = factory.create(module_type="ptx", width=self.pmos_width, mults=self.tx_mults, @@ -218,12 +218,12 @@ class pinv(pgate.pgate): connect_poly=True, connect_drain_active=True) self.add_mod(self.pmos) - + def create_ptx(self): """ Create the PMOS and NMOS netlist. """ - + self.pmos_inst = self.add_inst(name="pinv_pmos", mod=self.pmos) self.connect_inst(["Z", "A", "vdd", "vdd"]) @@ -237,7 +237,7 @@ class pinv(pgate.pgate): Place PMOS and NMOS to the layout at the upper-most and lowest position to provide maximum routing in channel """ - + # place PMOS so it is half a poly spacing down from the top self.pmos_pos = self.pmos.active_offset.scale(1, 0) \ + vector(0, @@ -259,7 +259,7 @@ class pinv(pgate.pgate): Route the output (drains) together. Optionally, routes output to edge. """ - + # Get the drain pins nmos_drain_pin = self.nmos_inst.get_pin("D") pmos_drain_pin = self.pmos_inst.get_pin("D") @@ -291,17 +291,17 @@ class pinv(pgate.pgate): self.connect_pin_to_rail(self.nmos_inst, "S", "gnd") self.connect_pin_to_rail(self.pmos_inst, "S", "vdd") - + def analytical_power(self, corner, load): """Returns dynamic and leakage power. Results in nW""" c_eff = self.calculate_effective_capacitance(load) freq = spice["default_event_frequency"] power_dyn = self.calc_dynamic_power(corner, c_eff, freq) power_leak = spice["inv_leakage"] - + total_power = self.return_power(power_dyn, power_leak) return total_power - + def calculate_effective_capacitance(self, load): """Computes effective capacitance. Results in fF""" c_load = load @@ -316,7 +316,7 @@ class pinv(pgate.pgate): units relative to the minimum width of a transistor """ return self.nmos_size + self.pmos_size - + def get_stage_effort(self, cout, inp_is_rise=True): """ Returns an object representing the parameters for delay in tau units. diff --git a/compiler/pgates/pinv_dec.py b/compiler/pgates/pinv_dec.py index b8fc8fe0..1a078a3c 100644 --- a/compiler/pgates/pinv_dec.py +++ b/compiler/pgates/pinv_dec.py @@ -38,7 +38,7 @@ class pinv_dec(pinv.pinv): self.supply_layer = "m1" else: self.supply_layer = "m2" - + super().__init__(name, size, beta, self.cell_height, add_wells) def determine_tx_mults(self): @@ -54,7 +54,7 @@ class pinv_dec(pinv.pinv): if cell_props.ptx.bin_spice_models: self.nmos_width = self.nearest_bin("nmos", self.nmos_width) self.pmos_width = self.nearest_bin("pmos", self.pmos_width) - + # Over-ride the route input gate to call the horizontal version. # Other top-level netlist and layout functions are not changed. def route_input_gate(self, pmos_inst, nmos_inst, ypos, name, position="left", directions=None): @@ -71,7 +71,7 @@ class pinv_dec(pinv.pinv): self.gds_write("unaliged_gates.gds") debug.check(nmos_gate_pin.ll().y == pmos_gate_pin.ll().y, "Connecting unaligned gates not supported. See unaligned_gates.gds.") - + # Pick point on the left of NMOS and up to PMOS nmos_gate_pos = nmos_gate_pin.rc() pmos_gate_pos = pmos_gate_pin.lc() @@ -86,7 +86,7 @@ class pinv_dec(pinv.pinv): offset=contact_offset, directions=directions) self.add_path("poly", [contact_offset, nmos_gate_pin.lc()]) - + self.add_layout_pin_rect_center(text=name, layer=self.route_layer, offset=contact_offset, @@ -143,7 +143,7 @@ class pinv_dec(pinv.pinv): if cell_props.pgate.add_implants: self.extend_implants() - + def extend_implants(self): """ Add top-to-bottom implants for adjacency issues in s8. @@ -165,13 +165,13 @@ class pinv_dec(pinv.pinv): ll, ur.x - ll.x, ur.y - ll.y) - + def route_outputs(self): """ Route the output (drains) together. Optionally, routes output to edge. """ - + # Get the drain pin nmos_drain_pin = self.nmos_inst.get_pin("D") @@ -225,7 +225,7 @@ class pinv_dec(pinv.pinv): self.supply_layer, start=bottom_pos, end=top_pos) - + def connect_rails(self): """ Connect the nmos and pmos to its respective power rails """ @@ -238,4 +238,4 @@ class pinv_dec(pinv.pinv): self.add_via_stack_center(offset=source_pos, from_layer=self.route_layer, to_layer=self.supply_layer) - + diff --git a/compiler/pgates/pinvbuf.py b/compiler/pgates/pinvbuf.py index 497bd3df..7d0deb16 100644 --- a/compiler/pgates/pinvbuf.py +++ b/compiler/pgates/pinvbuf.py @@ -24,7 +24,7 @@ class pinvbuf(pgate.pgate): self.stage_effort = 4 self.row_height = height # FIXME: Change the number of stages to support high drives. - + # stage effort of 4 or less # The pinvbuf has a FO of 2 for the first stage, so the second stage # should be sized "half" to prevent loading of the first stage @@ -43,14 +43,14 @@ class pinvbuf(pgate.pgate): self.width = 2 * self.inv1.width + self.inv2.width self.height = 2 * self.inv1.height - + self.place_modules() self.route_wires() self.add_layout_pins() self.add_boundary() - + self.offset_all_coordinates() - + def add_pins(self): self.add_pin("A") self.add_pin("Zb") @@ -59,14 +59,14 @@ class pinvbuf(pgate.pgate): self.add_pin("gnd") def add_modules(self): - + # Shield the cap, but have at least a stage effort of 4 input_size = max(1, int(self.predriver_size / self.stage_effort)) self.inv = factory.create(module_type="pinv", size=input_size, height=self.row_height) self.add_mod(self.inv) - + self.inv1 = factory.create(module_type="pinv", size=self.predriver_size, height=self.row_height) @@ -82,11 +82,11 @@ class pinvbuf(pgate.pgate): self.inv1_inst = self.add_inst(name="buf_inv1", mod=self.inv) self.connect_inst(["A", "zb_int", "vdd", "gnd"]) - + self.inv2_inst = self.add_inst(name="buf_inv2", mod=self.inv1) self.connect_inst(["zb_int", "z_int", "vdd", "gnd"]) - + self.inv3_inst = self.add_inst(name="buf_inv3", mod=self.inv2) self.connect_inst(["z_int", "Zb", "vdd", "gnd"]) @@ -101,7 +101,7 @@ class pinvbuf(pgate.pgate): # Add INV2 to the right of INV1 self.inv2_inst.place(vector(self.inv1_inst.rx(), 0)) - + # Add INV3 to the right of INV2 self.inv3_inst.place(vector(self.inv2_inst.rx(), 0)) @@ -109,13 +109,13 @@ class pinvbuf(pgate.pgate): self.inv4_inst.place(offset=vector(self.inv2_inst.rx(), 2 * self.inv2.height), mirror="MX") - + def route_wires(self): if "li" in layer: route_stack = self.li_stack else: route_stack = self.m1_stack - + # inv1 Z to inv2 A z1_pin = self.inv1_inst.get_pin("Z") a2_pin = self.inv2_inst.get_pin("A") @@ -124,7 +124,7 @@ class pinvbuf(pgate.pgate): self.add_via_stack_center(from_layer=z1_pin.layer, to_layer=a2_pin.layer, offset=a2_pin.center()) - + # inv2 Z to inv3 A z2_pin = self.inv2_inst.get_pin("Z") a3_pin = self.inv3_inst.get_pin("A") @@ -143,7 +143,7 @@ class pinvbuf(pgate.pgate): self.add_via_stack_center(from_layer=z1_pin.layer, to_layer=route_stack[2], offset=z1_pin.center()) - + def add_layout_pins(self): # Continous vdd rail along with label. @@ -161,7 +161,7 @@ class pinvbuf(pgate.pgate): offset=gnd_pin.ll().scale(0, 1), width=self.width, height=gnd_pin.height()) - + # Continous gnd rail along with label. gnd_pin = self.inv1_inst.get_pin("gnd") self.add_layout_pin(text="gnd", @@ -169,7 +169,7 @@ class pinvbuf(pgate.pgate): offset=gnd_pin.ll().scale(0, 1), width=self.width, height=vdd_pin.height()) - + z_pin = self.inv4_inst.get_pin("Z") self.add_layout_pin_rect_center(text="Z", layer=z_pin.layer, @@ -179,7 +179,7 @@ class pinvbuf(pgate.pgate): self.add_layout_pin_rect_center(text="Zb", layer=zb_pin.layer, offset=zb_pin.center()) - + a_pin = self.inv1_inst.get_pin("A") self.add_layout_pin_rect_center(text="A", layer=a_pin.layer, diff --git a/compiler/pgates/pnand2.py b/compiler/pgates/pnand2.py index b2dead7e..b2fe7bae 100644 --- a/compiler/pgates/pnand2.py +++ b/compiler/pgates/pnand2.py @@ -41,15 +41,15 @@ class pnand2(pgate.pgate): if cell_props.ptx.bin_spice_models: self.nmos_width = self.nearest_bin("nmos", self.nmos_width) self.pmos_width = self.nearest_bin("pmos", self.pmos_width) - + # Creates the netlist and layout super().__init__(name, height, add_wells) - + def create_netlist(self): self.add_pins() self.add_ptx() self.create_ptx() - + def create_layout(self): """ Calls all functions related to the generation of the layout """ @@ -64,7 +64,7 @@ class pnand2(pgate.pgate): self.extend_wells() self.route_inputs() self.add_boundary() - + def add_pins(self): """ Adds pins for spice netlist """ pin_list = ["A", "B", "Z", "vdd", "gnd"] @@ -80,7 +80,7 @@ class pnand2(pgate.pgate): add_source_contact=self.route_layer, add_drain_contact="active") self.add_mod(self.nmos_left) - + self.nmos_right = factory.create(module_type="ptx", width=self.nmos_width, mults=self.tx_mults, @@ -104,7 +104,7 @@ class pnand2(pgate.pgate): add_source_contact=self.route_layer, add_drain_contact=self.route_layer) self.add_mod(self.pmos_right) - + def setup_layout_constants(self): """ Pre-compute some handy layout parameters. """ @@ -163,7 +163,7 @@ class pnand2(pgate.pgate): self.add_nwell_contact(self.pmos_right, self.pmos2_pos) self.add_pwell_contact(self.nmos_left, self.nmos2_pos) - + def connect_rails(self): """ Connect the nmos and pmos to its respective power rails """ @@ -188,13 +188,13 @@ class pnand2(pgate.pgate): self.inputA_yoffset = max(active_contact_to_poly_contact, active_to_poly_contact, active_to_poly_contact2) - + apin = self.route_input_gate(self.pmos1_inst, self.nmos1_inst, self.inputA_yoffset, "A", position="center") - + self.inputB_yoffset = self.inputA_yoffset + 2 * self.m3_pitch # # active contact metal to poly contact metal spacing # active_contact_to_poly_contact = self.output_yoffset - self.route_layer_space - 0.5 * contact.poly_contact.second_layer_height @@ -217,7 +217,7 @@ class pnand2(pgate.pgate): def route_output(self): """ Route the Z output """ - + # One routing track layer below the PMOS contacts route_layer_offset = 0.5 * contact.poly_contact.second_layer_height + self.route_layer_space self.output_yoffset = self.pmos1_inst.get_pin("D").by() - route_layer_offset @@ -229,7 +229,7 @@ class pnand2(pgate.pgate): # NMOS2 drain nmos_pin = self.nmos2_inst.get_pin("D") bottom_pin_offset = nmos_pin.uc() - + # Output pin out_offset = vector(nmos_pin.cx() + self.route_layer_pitch, self.output_yoffset) @@ -249,7 +249,7 @@ class pnand2(pgate.pgate): # offset=nmos_pin.center()) # self.add_via_center(layers=self.m1_stack, # offset=out_offset) - + # # PMOS1 to mid-drain to NMOS2 drain # self.add_path("m2", # [top_pin_offset, mid1_offset, out_offset, @@ -266,7 +266,7 @@ class pnand2(pgate.pgate): # Bottom transistors self.add_path(self.route_layer, [out_offset, bottom_mid_offset, bottom_pin_offset]) - + # This extends the output to the edge of the cell self.add_layout_pin_rect_center(text="Z", layer=self.route_layer, @@ -278,10 +278,10 @@ class pnand2(pgate.pgate): freq = spice["default_event_frequency"] power_dyn = self.calc_dynamic_power(corner, c_eff, freq) power_leak = spice["nand2_leakage"] - + total_power = self.return_power(power_dyn, power_leak) return total_power - + def calculate_effective_capacitance(self, load): """Computes effective capacitance. Results in fF""" c_load = load @@ -293,7 +293,7 @@ class pnand2(pgate.pgate): def input_load(self): """Return the relative input capacitance of a single input""" return self.nmos_size + self.pmos_size - + def get_stage_effort(self, cout, inp_is_rise=True): """ Returns an object representing the parameters for delay in tau units. diff --git a/compiler/pgates/pnand3.py b/compiler/pgates/pnand3.py index de7e3e68..24396cd4 100644 --- a/compiler/pgates/pnand3.py +++ b/compiler/pgates/pnand3.py @@ -47,7 +47,7 @@ class pnand3(pgate.pgate): # Creates the netlist and layout super().__init__(name, height, add_wells) - + def add_pins(self): """ Adds pins for spice netlist """ pin_list = ["A", "B", "C", "Z", "vdd", "gnd"] @@ -58,7 +58,7 @@ class pnand3(pgate.pgate): self.add_pins() self.add_ptx() self.create_ptx() - + def create_layout(self): """ Calls all functions related to the generation of the layout """ @@ -73,7 +73,7 @@ class pnand3(pgate.pgate): self.connect_rails() self.extend_wells() self.add_boundary() - + def add_ptx(self): """ Create the PMOS and NMOS transistors. """ self.nmos_center = factory.create(module_type="ptx", @@ -99,7 +99,7 @@ class pnand3(pgate.pgate): add_source_contact=self.route_layer, add_drain_contact="active") self.add_mod(self.nmos_left) - + self.pmos_left = factory.create(module_type="ptx", width=self.pmos_width, mults=self.tx_mults, @@ -123,13 +123,13 @@ class pnand3(pgate.pgate): add_source_contact=self.route_layer, add_drain_contact=self.route_layer) self.add_mod(self.pmos_right) - + def setup_layout_constants(self): """ Pre-compute some handy layout parameters. """ - + # Compute the overlap of the source and drain pins self.ptx_offset = self.pmos_left.get_pin("D").center() - self.pmos_left.get_pin("S").center() - + # This is the extra space needed to ensure DRC rules # to the active contacts nmos = factory.create(module_type="ptx", tx_type="nmos") @@ -150,7 +150,7 @@ class pnand3(pgate.pgate): self.pmos3_inst = self.add_inst(name="pnand3_pmos3", mod=self.pmos_right) self.connect_inst(["Z", "C", "vdd", "vdd"]) - + self.nmos1_inst = self.add_inst(name="pnand3_nmos1", mod=self.nmos_left) self.connect_inst(["Z", "C", "net1", "gnd"]) @@ -158,7 +158,7 @@ class pnand3(pgate.pgate): self.nmos2_inst = self.add_inst(name="pnand3_nmos2", mod=self.nmos_center) self.connect_inst(["net1", "B", "net2", "gnd"]) - + self.nmos3_inst = self.add_inst(name="pnand3_nmos3", mod=self.nmos_right) self.connect_inst(["net2", "A", "gnd", "gnd"]) @@ -178,14 +178,14 @@ class pnand3(pgate.pgate): self.pmos3_pos = pmos2_pos + self.ptx_offset self.pmos3_inst.place(self.pmos3_pos) - + nmos1_pos = vector(self.pmos_left.active_offset.x, self.top_bottom_space) self.nmos1_inst.place(nmos1_pos) nmos2_pos = nmos1_pos + self.ptx_offset self.nmos2_inst.place(nmos2_pos) - + self.nmos3_pos = nmos2_pos + self.ptx_offset self.nmos3_inst.place(self.nmos3_pos) @@ -225,7 +225,7 @@ class pnand3(pgate.pgate): self.inputA_yoffset = max(active_contact_to_poly_contact, active_to_poly_contact, active_to_poly_contact2) - + apin = self.route_input_gate(self.pmos1_inst, self.nmos1_inst, self.inputA_yoffset, @@ -248,7 +248,7 @@ class pnand3(pgate.pgate): if cell_props.pgate.add_implants: self.add_enclosure([apin, bpin, cpin], "npc", drc("npc_enclose_poly")) - + def route_output(self): """ Route the Z output """ @@ -272,7 +272,7 @@ class pnand3(pgate.pgate): # self.add_via_center(layers=self.m1_stack, # offset=nmos3_pin.center(), # directions=("V", "V")) - + # # Route in the A input track (top track) # mid_offset = vector(nmos3_pin.center().x, self.inputA_yoffset) # self.add_path("m1", [pmos1_pin.center(), mid_offset, nmos3_pin.uc()]) @@ -284,7 +284,7 @@ class pnand3(pgate.pgate): top_left_pin_offset = pmos1_pin.center() top_right_pin_offset = pmos3_pin.center() bottom_pin_offset = nmos3_pin.center() - + # PMOS1 to output self.add_path(self.route_layer, [top_left_pin_offset, vector(top_left_pin_offset.x, out_offset.y), @@ -300,7 +300,7 @@ class pnand3(pgate.pgate): width=nmos3_pin.height()) mid3_offset = vector(out_offset.x, nmos3_pin.by()) self.add_path(self.route_layer, [mid3_offset, out_offset]) - + self.add_layout_pin_rect_center(text="Z", layer=self.route_layer, offset=out_offset) @@ -311,10 +311,10 @@ class pnand3(pgate.pgate): freq = spice["default_event_frequency"] power_dyn = self.calc_dynamic_power(corner, c_eff, freq) power_leak = spice["nand3_leakage"] - + total_power = self.return_power(power_dyn, power_leak) return total_power - + def calculate_effective_capacitance(self, load): """Computes effective capacitance. Results in fF""" c_load = load @@ -326,7 +326,7 @@ class pnand3(pgate.pgate): def input_load(self): """Return the relative input capacitance of a single input""" return self.nmos_size + self.pmos_size - + def get_stage_effort(self, cout, inp_is_rise=True): """ Returns an object representing the parameters for delay in tau units. diff --git a/compiler/pgates/pnand4.py b/compiler/pgates/pnand4.py index a71f2f52..b9fe71e3 100644 --- a/compiler/pgates/pnand4.py +++ b/compiler/pgates/pnand4.py @@ -47,7 +47,7 @@ class pnand4(pgate.pgate): # Creates the netlist and layout super().__init__(name, height, add_wells) - + def add_pins(self): """ Adds pins for spice netlist """ pin_list = ["A", "B", "C", "D", "Z", "vdd", "gnd"] @@ -58,7 +58,7 @@ class pnand4(pgate.pgate): self.add_pins() self.add_ptx() self.create_ptx() - + def create_layout(self): """ Calls all functions related to the generation of the layout """ @@ -73,7 +73,7 @@ class pnand4(pgate.pgate): self.connect_rails() self.extend_wells() self.add_boundary() - + def add_ptx(self): """ Create the PMOS and NMOS transistors. """ self.nmos_center = factory.create(module_type="ptx", @@ -99,7 +99,7 @@ class pnand4(pgate.pgate): add_source_contact=self.route_layer, add_drain_contact="active") self.add_mod(self.nmos_left) - + self.pmos_left = factory.create(module_type="ptx", width=self.pmos_width, mults=self.tx_mults, @@ -123,13 +123,13 @@ class pnand4(pgate.pgate): add_source_contact=self.route_layer, add_drain_contact=self.route_layer) self.add_mod(self.pmos_right) - + def setup_layout_constants(self): """ Pre-compute some handy layout parameters. """ - + # Compute the overlap of the source and drain pins self.ptx_offset = self.pmos_left.get_pin("D").center() - self.pmos_left.get_pin("S").center() - + # This is the extra space needed to ensure DRC rules # to the active contacts nmos = factory.create(module_type="ptx", tx_type="nmos") @@ -154,7 +154,7 @@ class pnand4(pgate.pgate): self.pmos4_inst = self.add_inst(name="pnand4_pmos4", mod=self.pmos_right) self.connect_inst(["Z", "D", "vdd", "vdd"]) - + self.nmos1_inst = self.add_inst(name="pnand4_nmos1", mod=self.nmos_left) self.connect_inst(["Z", "D", "net1", "gnd"]) @@ -162,7 +162,7 @@ class pnand4(pgate.pgate): self.nmos2_inst = self.add_inst(name="pnand4_nmos2", mod=self.nmos_center) self.connect_inst(["net1", "C", "net2", "gnd"]) - + self.nmos3_inst = self.add_inst(name="pnand4_nmos3", mod=self.nmos_center) self.connect_inst(["net2", "B", "net3", "gnd"]) @@ -170,7 +170,7 @@ class pnand4(pgate.pgate): self.nmos4_inst = self.add_inst(name="pnand4_nmos4", mod=self.nmos_right) self.connect_inst(["net3", "A", "gnd", "gnd"]) - + def place_ptx(self): """ Place the PMOS and NMOS in the layout at the upper-most @@ -186,7 +186,7 @@ class pnand4(pgate.pgate): pmos3_pos = pmos2_pos + self.ptx_offset self.pmos3_inst.place(pmos3_pos) - + self.pmos4_pos = pmos3_pos + self.ptx_offset self.pmos4_inst.place(self.pmos4_pos) @@ -196,13 +196,13 @@ class pnand4(pgate.pgate): nmos2_pos = nmos1_pos + self.ptx_offset self.nmos2_inst.place(nmos2_pos) - + nmos3_pos = nmos2_pos + self.ptx_offset self.nmos3_inst.place(nmos3_pos) self.nmos4_pos = nmos3_pos + self.ptx_offset self.nmos4_inst.place(self.nmos4_pos) - + def add_well_contacts(self): """ Add n/p well taps to the layout and connect to supplies """ @@ -221,7 +221,7 @@ class pnand4(pgate.pgate): self.connect_pin_to_rail(self.pmos2_inst, "D", "vdd") self.connect_pin_to_rail(self.pmos4_inst, "D", "vdd") - + def route_inputs(self): """ Route the A and B and C inputs """ @@ -240,7 +240,7 @@ class pnand4(pgate.pgate): self.inputA_yoffset = max(active_contact_to_poly_contact, active_to_poly_contact, active_to_poly_contact2) - + apin = self.route_input_gate(self.pmos1_inst, self.nmos1_inst, self.inputA_yoffset, @@ -267,10 +267,10 @@ class pnand4(pgate.pgate): self.inputD_yoffset, "D", position="right") - + if cell_props.pgate.add_implants: self.add_enclosure([apin, bpin, cpin, dpin], "npc", drc("npc_enclose_poly")) - + def route_output(self): """ Route the Z output """ @@ -294,7 +294,7 @@ class pnand4(pgate.pgate): # self.add_via_center(layers=self.m1_stack, # offset=nmos3_pin.center(), # directions=("V", "V")) - + # # Route in the A input track (top track) # mid_offset = vector(nmos3_pin.center().x, self.inputA_yoffset) # self.add_path("m1", [pmos1_pin.center(), mid_offset, nmos3_pin.uc()]) @@ -306,7 +306,7 @@ class pnand4(pgate.pgate): top_left_pin_offset = pmos1_pin.center() top_right_pin_offset = pmos3_pin.center() bottom_pin_offset = nmos4_pin.center() - + # PMOS1 to output self.add_path(self.route_layer, [top_left_pin_offset, vector(top_left_pin_offset.x, out_offset.y), @@ -322,7 +322,7 @@ class pnand4(pgate.pgate): width=nmos4_pin.height()) mid3_offset = vector(out_offset.x, nmos4_pin.by()) self.add_path(self.route_layer, [mid3_offset, out_offset]) - + self.add_layout_pin_rect_center(text="Z", layer=self.route_layer, offset=out_offset) @@ -333,10 +333,10 @@ class pnand4(pgate.pgate): freq = spice["default_event_frequency"] power_dyn = self.calc_dynamic_power(corner, c_eff, freq) power_leak = spice["nand4_leakage"] - + total_power = self.return_power(power_dyn, power_leak) return total_power - + def calculate_effective_capacitance(self, load): """Computes effective capacitance. Results in fF""" c_load = load @@ -348,7 +348,7 @@ class pnand4(pgate.pgate): def input_load(self): """Return the relative input capacitance of a single input""" return self.nmos_size + self.pmos_size - + def get_stage_effort(self, cout, inp_is_rise=True): """ Returns an object representing the parameters for delay in tau units. diff --git a/compiler/pgates/pnor2.py b/compiler/pgates/pnor2.py index 3a17be30..70617d0a 100644 --- a/compiler/pgates/pnor2.py +++ b/compiler/pgates/pnor2.py @@ -42,15 +42,15 @@ class pnor2(pgate.pgate): # Creates the netlist and layout super().__init__(name, height, add_wells) - + def create_netlist(self): self.add_pins() self.add_ptx() self.create_ptx() - + def create_layout(self): """ Calls all functions related to the generation of the layout """ - + self.setup_layout_constants() self.place_ptx() if self.add_wells: @@ -86,7 +86,7 @@ class pnor2(pgate.pgate): add_source_contact=self.route_layer, add_drain_contact=self.route_layer) self.add_mod(self.nmos_right) - + self.pmos_left = factory.create(module_type="ptx", width=self.pmos_width, mults=self.tx_mults, @@ -102,7 +102,7 @@ class pnor2(pgate.pgate): add_source_contact="active", add_drain_contact=self.route_layer) self.add_mod(self.pmos_right) - + def setup_layout_constants(self): """ Pre-compute some handy layout parameters. """ @@ -118,7 +118,7 @@ class pnor2(pgate.pgate): + 0.5 * self.nwell_enclose_active self.well_width = self.width + 2 * self.nwell_enclose_active # Height is an input parameter, so it is not recomputed. - + def create_ptx(self): """ Add PMOS and NMOS to the layout at the upper-most and lowest position @@ -140,7 +140,7 @@ class pnor2(pgate.pgate): self.nmos2_inst = self.add_inst(name="pnor2_nmos2", mod=self.nmos_right) self.connect_inst(["Z", "B", "gnd", "gnd"]) - + def place_ptx(self): """ Add PMOS and NMOS to the layout at the upper-most and lowest position @@ -163,10 +163,10 @@ class pnor2(pgate.pgate): self.pmos2_pos = pmos1_pos + self.overlap_offset self.pmos2_inst.place(self.pmos2_pos) - + nmos1_pos = vector(self.pmos_right.active_offset.x, self.top_bottom_space) self.nmos1_inst.place(nmos1_pos) - + self.nmos2_pos = nmos1_pos + self.overlap_offset self.nmos2_inst.place(self.nmos2_pos) @@ -175,7 +175,7 @@ class pnor2(pgate.pgate): self.add_nwell_contact(self.pmos_right, self.pmos2_pos) self.add_pwell_contact(self.nmos_right, self.nmos2_pos) - + def connect_rails(self): """ Connect the nmos and pmos to its respective power rails """ @@ -193,14 +193,14 @@ class pnor2(pgate.pgate): bottom_pin_offset = nmos_pin.uy() self.inputB_yoffset = bottom_pin_offset + self.m1_nonpref_pitch self.inputA_yoffset = self.inputB_yoffset + self.m1_nonpref_pitch - + bpin = self.route_input_gate(self.pmos2_inst, self.nmos2_inst, self.inputB_yoffset, "B", position="right", directions=("V", "V")) - + # This will help with the wells and the input/output placement apin = self.route_input_gate(self.pmos1_inst, self.nmos1_inst, @@ -227,7 +227,7 @@ class pnor2(pgate.pgate): # offset=pmos_pin.center()) # m1m2_contact = self.add_via_center(layers=self.m1_stack, # offset=nmos_pin.center()) - + mid1_offset = vector(nmos_pin.center().x, self.output_yoffset) mid2_offset = vector(pmos_pin.center().x, self.output_yoffset) @@ -244,10 +244,10 @@ class pnor2(pgate.pgate): freq = spice["default_event_frequency"] power_dyn = self.calc_dynamic_power(corner, c_eff, freq) power_leak = spice["nor2_leakage"] - + total_power = self.return_power(power_dyn, power_leak) return total_power - + def calculate_effective_capacitance(self, load): """Computes effective capacitance. Results in fF""" c_load = load @@ -255,7 +255,7 @@ class pnor2(pgate.pgate): c_para = spice["min_tx_drain_c"] * (self.nmos_size / parameter["min_tx_size"]) transition_prob = 0.1875 return transition_prob * (c_load + c_para) - + def build_graph(self, graph, inst_name, port_nets): """Adds edges based on inputs/outputs. Overrides base class function.""" self.add_graph_edges(graph, port_nets) diff --git a/compiler/pgates/precharge.py b/compiler/pgates/precharge.py index feb9eca6..d3599902 100644 --- a/compiler/pgates/precharge.py +++ b/compiler/pgates/precharge.py @@ -42,7 +42,7 @@ class precharge(design.design): else: self.bitline_layer = "m2" self.en_layer = "m1" - + # Creates the netlist and layout # Since it has variable height, it is not a pgate. self.create_netlist() @@ -60,7 +60,7 @@ class precharge(design.design): self.add_pins() self.add_ptx() self.create_ptx() - + def create_layout(self): self.place_ptx() @@ -71,7 +71,7 @@ class precharge(design.design): self.route_bitlines() self.connect_to_bitlines() self.add_boundary() - + def add_pins(self): self.add_pin_list(["bl", "br", "en_bar", "vdd"], ["OUTPUT", "OUTPUT", "INPUT", "POWER"]) @@ -92,7 +92,7 @@ class precharge(design.design): """ Adds a vdd rail at the top of the cell """ - + # Adds the rail across the width of the cell vdd_position = vector(0.5 * self.width, self.height) layer_width = drc("minwidth_" + self.en_layer) @@ -102,11 +102,11 @@ class precharge(design.design): height=layer_width) pmos_pin = self.upper_pmos2_inst.get_pin("S") - + # center of vdd rail pmos_vdd_pos = vector(pmos_pin.cx(), vdd_position.y) self.add_path(self.en_layer, [pmos_pin.center(), pmos_vdd_pos]) - + self.add_power_pin("vdd", self.well_contact_pos, directions=("V", "V")) @@ -115,7 +115,7 @@ class precharge(design.design): to_layer=self.en_layer, offset=pmos_pin.center(), directions=("V", "V")) - + def create_ptx(self): """ Create both the upper_pmos and lower_pmos to the module @@ -132,7 +132,7 @@ class precharge(design.design): self.upper_pmos2_inst = self.add_inst(name="upper_pmos2", mod=self.pmos) self.connect_inst(["br", "en_bar", "vdd", "vdd"]) - + def place_ptx(self): """ Place both the upper_pmos and lower_pmos to the module @@ -143,7 +143,7 @@ class precharge(design.design): # Compute the other pmos2 location, # but determining offset to overlap the source and drain pins overlap_offset = self.pmos.get_pin("D").ll() - self.pmos.get_pin("S").ll() - + # adds the lower pmos to layout self.lower_pmos_position = vector(self.well_enclose_active + 0.5 * self.m1_width, self.initial_yoffset) @@ -157,7 +157,7 @@ class precharge(design.design): # Second pmos to the right of the first upper_pmos2_pos = self.upper_pmos1_pos + overlap_offset self.upper_pmos2_inst.place(upper_pmos2_pos) - + def connect_poly(self): """ Connects the upper and lower pmos together @@ -202,12 +202,12 @@ class precharge(design.design): layer=self.en_layer, start=offset.scale(0, 1), end=offset.scale(0, 1) + vector(self.width, 0)) - + def place_nwell_and_contact(self): """ Adds a nwell tap to connect to the vdd rail """ - + # adds the contact from active to metal1 offset_height = self.upper_pmos1_inst.uy() + \ contact.active_contact.height + \ @@ -245,7 +245,7 @@ class precharge(design.design): layer=self.bitline_layer, start=pin_pos, end=top_pos) - + # adds the BR self.br_xoffset = self.width - layer_pitch top_pos = vector(self.br_xoffset, self.height) @@ -265,7 +265,7 @@ class precharge(design.design): self.bl_xoffset) self.connect_pmos(self.lower_pmos_inst.get_pin("D"), self.br_xoffset) - + self.connect_pmos(self.upper_pmos1_inst.get_pin("S"), self.bl_xoffset) self.connect_pmos(self.upper_pmos2_inst.get_pin("D"), @@ -301,4 +301,4 @@ class precharge(design.design): self.add_path(self.bitline_layer, [left_pos, right_pos], width=pmos_pin.height()) - + diff --git a/compiler/pgates/ptristate_inv.py b/compiler/pgates/ptristate_inv.py index affc157e..d3b096eb 100644 --- a/compiler/pgates/ptristate_inv.py +++ b/compiler/pgates/ptristate_inv.py @@ -36,7 +36,7 @@ class ptristate_inv(pgate.pgate): self.nmos_width = self.nmos_size * drc("minwidth_tx") self.pmos_width = self.pmos_size * drc("minwidth_tx") - + # Creates the netlist and layout super().__init__(name, height) @@ -45,7 +45,7 @@ class ptristate_inv(pgate.pgate): self.add_pins() self.add_ptx() self.create_ptx() - + def create_layout(self): """ Calls all functions related to the generation of the layout """ self.setup_layout_constants() @@ -57,7 +57,7 @@ class ptristate_inv(pgate.pgate): self.route_inputs() self.route_outputs() self.add_boundary() - + def add_pins(self): """ Adds pins for spice netlist """ self.add_pin_list(["in", "out", "en", "en_bar", "vdd", "gnd"]) @@ -78,7 +78,7 @@ class ptristate_inv(pgate.pgate): # Add an extra space because we route the output on the right of the S/D self.width = self.well_width + 0.5 * self.m1_space # Height is an input parameter, so it is not recomputed. - + def add_ptx(self): """ Create the PMOS and NMOS transistors. """ self.nmos = factory.create(module_type="ptx", @@ -86,13 +86,13 @@ class ptristate_inv(pgate.pgate): mults=1, tx_type="nmos") self.add_mod(self.nmos) - + self.pmos = factory.create(module_type="ptx", width=self.pmos_width, mults=1, tx_type="pmos") self.add_mod(self.pmos) - + def route_supply_rails(self): """ Add vdd/gnd rails to the top and bottom. """ self.add_layout_pin_rect_center(text="gnd", @@ -151,13 +151,13 @@ class ptristate_inv(pgate.pgate): # Output position will be in between the PMOS and NMOS self.output_pos = vector(0, 0.5 * (pmos_yoff + nmos_yoff + self.nmos.height)) - + # This will help with the wells self.well_pos = vector(0, self.nmos1_inst.uy()) def route_inputs(self): """ Route the gates """ - + self.route_input_gate(self.pmos1_inst, self.nmos1_inst, self.output_pos.y, @@ -181,7 +181,7 @@ class ptristate_inv(pgate.pgate): height=pmos_drain_pos.y - nmos_drain_pos.y) def add_well_contacts(self): - """ + """ Add n/p well taps to the layout and connect to supplies AFTER the wells are created """ @@ -206,7 +206,7 @@ class ptristate_inv(pgate.pgate): self.connect_pin_to_rail(self.nmos1_inst, "S", "gnd") self.connect_pin_to_rail(self.pmos1_inst, "S", "vdd") - + def analytical_power(self, corner, load): """Returns dynamic and leakage power. Results in nW""" # Power in this module currently not defined. diff --git a/compiler/pgates/ptx.py b/compiler/pgates/ptx.py index e445cbcd..6b828cf9 100644 --- a/compiler/pgates/ptx.py +++ b/compiler/pgates/ptx.py @@ -28,7 +28,7 @@ class ptx(design.design): ll, ur, width and height refer to the active area. Wells and poly may extend beyond this. - + """ def __init__(self, name="", @@ -91,7 +91,7 @@ class ptx(design.design): self.route_layer_width = drc("minwidth_{}".format(self.route_layer)) self.route_layer_space = drc("{0}_to_{0}".format(self.route_layer)) - + # Since it has variable height, it is not a pgate. self.create_netlist() # We must always create ptx layout for pbitcell @@ -104,7 +104,7 @@ class ptx(design.design): # (0,0) will be the corner of the active area (not the larger well) self.translate_all(self.active_offset) - + def create_layout(self): """Calls all functions related to the generation of the layout""" self.setup_layout_constants() @@ -166,7 +166,7 @@ class ptx(design.design): self.mults, self.tx_width, drc("minwidth_poly")) - + def setup_layout_constants(self): """ Pre-compute some handy layout parameters. @@ -184,7 +184,7 @@ class ptx(design.design): self.well_type = "n" else: self.error("Invalid transitor type.", -1) - + # This is not actually instantiated but used for calculations self.active_contact = factory.create(module_type="contact", layer_stack=self.active_stack, @@ -194,7 +194,7 @@ class ptx(design.design): # This is the extra poly spacing due to the poly contact to poly contact pitch # of contacted gates extra_poly_contact_width = contact.poly_contact.width - self.poly_width - + # This is the spacing between S/D contacts # This is the spacing between the poly gates self.min_poly_pitch = self.poly_space + self.poly_width @@ -205,7 +205,7 @@ class ptx(design.design): self.contact_pitch) self.end_to_contact = 0.5 * self.active_contact.width - + # Active width is determined by enclosure on both ends and contacted pitch, # at least one poly and n-1 poly pitches self.active_width = 2 * self.end_to_contact + self.active_contact.width \ @@ -216,7 +216,7 @@ class ptx(design.design): # Poly height must include poly extension over active self.poly_height = self.tx_width + 2 * self.poly_extend_active - + self.active_offset = vector([self.well_enclose_active] * 2) # Well enclosure of active, ensure minwidth as well @@ -230,7 +230,7 @@ class ptx(design.design): else: self.well_height = self.height self.well_width = self.width - + # We are going to shift the 0,0, so include that in the width and height self.height = self.active_height self.width = self.active_width @@ -238,7 +238,7 @@ class ptx(design.design): # This is the center of the first active contact offset (centered vertically) self.contact_offset = self.active_offset + vector(0.5 * self.active_contact.width, 0.5 * self.active_height) - + # Min area results are just flagged for now. debug.check(self.active_width * self.active_height >= self.minarea_active, "Minimum active area violated.") @@ -286,7 +286,7 @@ class ptx(design.design): """ Connect each contact up/down to a source or drain pin """ - + if len(positions) <= 1: return @@ -325,11 +325,11 @@ class ptx(design.design): # poly is one contacted spacing from the end and down an extension poly_offset = self.contact_offset \ + vector(0.5 * self.active_contact.width + 0.5 * self.poly_width + self.active_contact_to_gate, 0) - + # poly_positions are the bottom center of the poly gates self.poly_positions = [] self.poly_gates = [] - + # It is important that these are from left to right, # so that the pins are in the right # order for the accessors @@ -347,12 +347,12 @@ class ptx(design.design): width=self.poly_width) self.poly_positions.append(poly_offset) self.poly_gates.append(gate) - + poly_offset = poly_offset + vector(self.poly_pitch, 0) if self.connect_poly: self.connect_fingered_poly(self.poly_positions) - + def add_active(self): """ Adding the diffusion (active region = diffusion region) @@ -388,7 +388,7 @@ class ptx(design.design): width=self.well_width, height=self.well_height) setattr(self, well_name, well) - + if "vtg" in layer: self.add_rect(layer="vtg", offset=well_ll, @@ -412,7 +412,7 @@ class ptx(design.design): # Keep a list of the source/drain contacts self.source_contacts = [] self.drain_contacts = [] - + # First one is always a SOURCE label = "S" pos = self.contact_offset @@ -437,7 +437,7 @@ class ptx(design.design): else: label = "S" source_positions.append(pos) - + if (label=="S" and self.add_source_contact): contact = self.add_diff_contact(label, pos) self.source_contacts.append(contact) @@ -469,16 +469,16 @@ class ptx(design.design): self.add_layout_pin_rect_center(text=label, layer="active", offset=pos) - + if self.connect_source_active: self.connect_fingered_active(source_positions, "S", top=(self.tx_type=="pmos")) if self.connect_drain_active: self.connect_fingered_active(drain_positions, "D", top=(self.tx_type=="nmos")) - + def get_stage_effort(self, cout): """Returns an object representing the parameters for delay in tau units.""" - + # FIXME: Using the same definition as the pinv.py. parasitic_delay = 1 size = self.mults * self.tx_width / drc("minwidth_tx") @@ -487,12 +487,12 @@ class ptx(design.design): self.input_load(), cout, parasitic_delay) - + def input_load(self): """ Returns the relative gate cin of the tx """ - + # FIXME: this will be applied for the loads of the drain/source return self.mults * self.tx_width / drc("minwidth_tx") @@ -518,10 +518,10 @@ class ptx(design.design): pin_width = via.mod.second_layer_width else: via = None - + pin_height = None pin_width = None - + # Source drain vias are all vertical self.add_layout_pin_rect_center(text=label, layer=layer, @@ -530,7 +530,7 @@ class ptx(design.design): height=pin_height) return(via) - + def get_cin(self): """Returns the relative gate cin of the tx""" return self.tx_width / drc("minwidth_tx") @@ -541,4 +541,4 @@ class ptx(design.design): Overrides base class function. """ self.add_graph_edges(graph, port_nets) - + diff --git a/compiler/pgates/pwrite_driver.py b/compiler/pgates/pwrite_driver.py index 6ae448f9..26c49d2f 100644 --- a/compiler/pgates/pwrite_driver.py +++ b/compiler/pgates/pwrite_driver.py @@ -16,7 +16,7 @@ from sram_factory import factory class pwrite_driver(design.design): """ The pwrite_driver is two tristate inverters that drive the bitlines. - The data input is first inverted before one tristate. + The data input is first inverted before one tristate. The inverted enable is also generated to control one tristate. """ def __init__(self, name, size=0): @@ -53,7 +53,7 @@ class pwrite_driver(design.design): self.route_wires() self.route_supplies() self.add_boundary() - + def add_pins(self): self.add_pin("din", "INPUT") self.add_pin("bl", "OUTPUT") @@ -75,7 +75,7 @@ class pwrite_driver(design.design): #self.add_mod(self.tbuf) #debug.check(self.tbuf.width 0: return self.min_cost - - + + def get_type(self): type_string = "" - + if self.blocked: type_string += "X" @@ -52,5 +52,5 @@ class grid_cell: if type_string != "": return type_string - + return None diff --git a/compiler/router/grid_path.py b/compiler/router/grid_path.py index e4e0995d..6232b411 100644 --- a/compiler/router/grid_path.py +++ b/compiler/router/grid_path.py @@ -14,13 +14,13 @@ from direction import direction class grid_path: """ - A grid path is a list of lists of grid cells. + A grid path is a list of lists of grid cells. It can have a width that is more than one cell. All of the sublists will be the same dimension. Cells should be continguous. It can have a name to define pin shapes as well. """ - + def __init__(self, items=[], name=""): self.name = name if items: @@ -36,22 +36,22 @@ class grid_path: return p def __setitem__(self, index, value): - """ - override setitem function + """ + override setitem function can set value by pathinstance[index]=value """ self.pathlist[index]=value def __getitem__(self, index): """ - override getitem function + override getitem function can get value by value=pathinstance[index] """ return self.pathlist[index] def __contains__(self, key): - """ - Determine if cell exists in this path + """ + Determine if cell exists in this path """ # FIXME: Could maintain a hash to make in O(1) for sublist in self.pathlist: @@ -63,13 +63,13 @@ class grid_path: def __add__(self, items): """ - Override add to do append + Override add to do append """ return self.pathlist.extend(items) def __len__(self): return len(self.pathlist) - + def trim_last(self): """ Drop the last item @@ -83,7 +83,7 @@ class grid_path: """ if len(self.pathlist)>0: self.pathlist.pop(0) - + def append(self,item): """ Append the list of items to the cells @@ -95,7 +95,7 @@ class grid_path: Extend the list of items to the cells """ self.pathlist.extend(item) - + def set_path(self,value=True): for sublist in self.pathlist: for p in sublist: @@ -124,9 +124,9 @@ class grid_path: for sublist in self.pathlist: newset.update(sublist[start_index:end_index]) return newset - + def cost(self): - """ + """ The cost of the path is the length plus a penalty for the number of vias. We assume that non-preferred direction is penalized. This cost only works with 1 wide tracks. @@ -151,9 +151,9 @@ class grid_path: elif p0.x != p1.x and p0.z==1: # horizontal on vertical layer cost += grid.NONPREFERRED_COST elif p0.y != p1.y and p0.z==0: # vertical on horizontal layer - cost += grid.NONPREFERRED_COST + cost += grid.NONPREFERRED_COST else: - cost += grid.PREFERRED_COST + cost += grid.PREFERRED_COST return cost @@ -173,7 +173,7 @@ class grid_path: n = self.neighbor(d) if n: neighbors.append(n) - + return neighbors def neighbor(self, d): @@ -185,20 +185,20 @@ class grid_path: return None elif newwave[0].z>1 or newwave[0].z<0: return None - + return newwave - - + + def set_layer(self, zindex): new_pathlist = [vector3d(item.x, item.y, zindex) for wave in self.pathlist for item in wave] self.pathlist = new_pathlist - - + + def overlap(self, other): """ Return the overlap waves ignoring different layers """ - + my_zindex = self.pathlist[0][0].z other_flat_cells = [vector3d(item.x,item.y,my_zindex) for wave in other.pathlist for item in wave] # This keeps the wave structure of the self layer @@ -216,4 +216,4 @@ class grid_path: ur = shared_waves[-1][-1] return [ll,ur] return None - + diff --git a/compiler/router/grid_utils.py b/compiler/router/grid_utils.py index a9a4c08d..30518793 100644 --- a/compiler/router/grid_utils.py +++ b/compiler/router/grid_utils.py @@ -20,22 +20,22 @@ def increment_set(curset, direct): Return the cells incremented in given direction """ offset = direction.get_offset(direct) - + newset = set() for c in curset: newc = c+offset newset.add(newc) - + return newset def remove_border(curset, direct): - """ + """ Remove the cells on a given border. """ border = get_border(curset, direct) curset.difference_update(border) - + def get_upper_right(curset): ur = None @@ -55,7 +55,7 @@ def get_border( curset, direct): """ Return the furthest cell(s) in a given direction. """ - + # find direction-most cell(s) maxc = [] if direct==direction.NORTH: @@ -94,7 +94,7 @@ def expand_border(curset, direct): border_set = get_border(curset, direct) next_border_set = increment_set(border_set, direct) return next_border_set - + def expand_borders(curset): """ Return the expansions in planar directions. @@ -103,7 +103,7 @@ def expand_borders(curset): south_set=expand_border(curset,direction.SOUTH) east_set=expand_border(curset,direction.EAST) west_set=expand_border(curset,direction.WEST) - + return(north_set, east_set, south_set, west_set) def inflate_cell(cell, distance): @@ -111,7 +111,7 @@ def inflate_cell(cell, distance): Expand the current cell in all directions and return the set. """ newset = set(cell) - + if distance==0: return(newset) @@ -119,7 +119,7 @@ def inflate_cell(cell, distance): for offset in direction.all_offsets(): # FIXME: If distance is large this will be inefficient, but it is like 1 or 2 newset.update(inflate_cell(cell+offset,distance-1)) - + return newset def inflate_set(curset, distance): @@ -128,7 +128,7 @@ def inflate_set(curset, distance): """ if distance<=0: return curset - + newset = curset.copy() # Add all my neighbors for c in curset: @@ -149,7 +149,7 @@ def flatten_set(curset): return newset - + def distance_set(coord, curset): """ Return the distance from a coordinate to any item in the set @@ -159,4 +159,4 @@ def distance_set(coord, curset): min_dist = min(coord.euclidean_distance(c), min_dist) return min_dist - + diff --git a/compiler/router/pin_group.py b/compiler/router/pin_group.py index 7f30226a..5ba87dc9 100644 --- a/compiler/router/pin_group.py +++ b/compiler/router/pin_group.py @@ -153,7 +153,7 @@ class pin_group: debug.check(len(new_pin_list) > 0, "Did not find any enclosures.") - + return new_pin_list def compute_connector(self, pin, enclosure): @@ -198,7 +198,7 @@ class pin_group: return p def find_above_connector(self, pin, enclosures): - """ + """ Find the enclosure that is to above the pin and make a connector to it's upper edge. """ @@ -662,7 +662,7 @@ class pin_group: if len(self.grids) < 0: debug.error("Did not find any unblocked grids: {}".format(str(self.pins))) self.router.write_debug_gds("blocked_pin.gds") - + # Remember the secondary grids for removing adjacent pins self.secondary_grids = partial_set diff --git a/compiler/router/router.py b/compiler/router/router.py index ba678215..a6df4f0b 100644 --- a/compiler/router/router.py +++ b/compiler/router/router.py @@ -34,7 +34,7 @@ class router(router_tech): considered. """ router_tech.__init__(self, layers, rail_track_width) - + self.cell = design # If didn't specify a gds blockage file, write it out to read the gds @@ -50,7 +50,7 @@ class router(router_tech): self.reader.loadFromFile(gds_filename) self.top_name = self.layout.rootStructureName # print_time("GDS read",datetime.now(), start_time) - + # The pin data structures # A map of pin names to a set of pin_layout structures # (i.e. pins with a given label) @@ -60,18 +60,18 @@ class router(router_tech): # (They will be blocked when we are routing other # nets based on their name.) self.all_pins = set() - + # The labeled pins above categorized into pin groups # that are touching/connected. self.pin_groups = {} - + # The blockage data structures # A list of metal shapes (using the same pin_layout structure) # that are not pins but blockages. self.blockages = [] # The corresponding set of blocked grids for above pin shapes self.blocked_grids = set() - + # The routed data structures # A list of paths that have been "routed" self.paths = [] @@ -95,18 +95,18 @@ class router(router_tech): self.pin_groups = {} # DO NOT clear the blockages as these don't change self.rg.reinit() - + def set_top(self, top_name): """ If we want to route something besides the top-level cell.""" self.top_name = top_name - + def is_wave(self, path): """ Determines if this is a multi-track width wave (True) # or a normal route (False) """ return len(path[0]) > 1 - + def retrieve_pins(self, pin_name): """ Retrieve the pin shapes on metal 3 from the layout. @@ -142,7 +142,7 @@ class router(router_tech): debug.info(1, "Finding blockages.") for lpp in [self.vert_lpp, self.horiz_lpp]: self.retrieve_blockages(lpp) - + def find_pins_and_blockages(self, pin_list): """ Find the pins and blockages in the design @@ -155,7 +155,7 @@ class router(router_tech): for pin_name in pin_list: self.retrieve_pins(pin_name) print_time("Retrieving pins", datetime.now(), start_time, 4) - + start_time = datetime.now() for pin_name in pin_list: self.analyze_pins(pin_name) @@ -171,7 +171,7 @@ class router(router_tech): start_time = datetime.now() self.convert_blockages() print_time("Converting blockages", datetime.now(), start_time, 4) - + # This will convert the pins to grid units # It must be done after blockages to ensure no DRCs # between expanded pins and blocked grids @@ -195,7 +195,7 @@ class router(router_tech): start_time = datetime.now() self.separate_adjacent_pins(0) print_time("Separating adjacent pins", datetime.now(), start_time, 4) - + # Enclose the continguous grid units in a metal # rectangle to fix some DRCs start_time = datetime.now() @@ -208,15 +208,15 @@ class router(router_tech): # def combine_adjacent_pins(self, pin_name): # """ # Find pins that have adjacent routing tracks and merge them into a - # single pin_group. The pins themselves may not be touching, but + # single pin_group. The pins themselves may not be touching, but # enclose_pins in the next step will ensure they are touching. - # """ - # debug.info(1,"Combining adjacent pins for {}.".format(pin_name)) + # """ + # debug.info(1,"Combining adjacent pins for {}.".format(pin_name)) # # Find all adjacencies # adjacent_pins = {} # for index1,pg1 in enumerate(self.pin_groups[pin_name]): # for index2,pg2 in enumerate(self.pin_groups[pin_name]): - # # Cannot combine with yourself, also don't repeat + # # Cannot combine with yourself, also don't repeat # if index1<=index2: # continue # # Combine if at least 1 grid cell is adjacent @@ -228,7 +228,7 @@ class router(router_tech): # # Make a list of indices to ensure every group gets in the new set # all_indices = set([x for x in range(len(self.pin_groups[pin_name]))]) - + # # Now reconstruct the new groups # new_pin_groups = [] # for index1,index2_set in adjacent_pins.items(): @@ -251,18 +251,18 @@ class router(router_tech): # for index in all_indices: # new_pin_groups.append(self.pin_groups[pin_name][index]) - # old_size = len(self.pin_groups[pin_name]) + # old_size = len(self.pin_groups[pin_name]) # # Use the new pin group! # self.pin_groups[pin_name] = new_pin_groups # removed_pairs = old_size - len(new_pin_groups) # debug.info(1, # "Combined {0} pin groups for {1}".format(removed_pairs,pin_name)) - + # return removed_pairs - + def separate_adjacent_pins(self, separation): """ - This will try to separate all grid pins by the supplied + This will try to separate all grid pins by the supplied number of separation tracks (default is to prevent adjacency). """ # Commented out to debug with SCMOS @@ -277,7 +277,7 @@ class router(router_tech): if i > j: return self.separate_adjacent_pin(pin_name1, pin_name2, separation) - + def separate_adjacent_pin(self, pin_name1, pin_name2, separation): """ Go through all of the pin groups and check if any other pin group is @@ -300,7 +300,7 @@ class router(router_tech): index2, adj_grids)) self.remove_adjacent_grid(pg1, pg2, adj_grids) - + debug.info(1, "Removed {} adjacent grids.".format(removed_grids)) def remove_adjacent_grid(self, pg1, pg2, adj_grids): @@ -316,9 +316,9 @@ class router(router_tech): else: bigger = pg2 smaller = pg1 - + for adj in adj_grids: - + # If the adjacent grids are a subset of the secondary # grids (i.e. not necessary) remove them from each @@ -353,7 +353,7 @@ class router(router_tech): Names is a list of pins to add as a blockage. """ debug.info(3, "Preparing blockages.") - + # Start fresh. Not the best for run-time, but simpler. self.clear_blockages() # This adds the initial blockges of the design @@ -363,7 +363,7 @@ class router(router_tech): # Block all of the supply rails # (some will be unblocked if they're a target) self.set_supply_rail_blocked(True) - + # Block all of the pin components # (some will be unblocked if they're a source/target) # Also block the previous routes @@ -382,7 +382,7 @@ class router(router_tech): # route over them blockage_grids = {y for x in self.pin_groups[pin_name] for y in x.grids} self.set_blockages(blockage_grids, False) - + def convert_shape_to_units(self, shape): """ Scale a shape (two vector list) to user units @@ -391,7 +391,7 @@ class router(router_tech): ll = shape[0].scale(unit_factor) ur = shape[1].scale(unit_factor) return [ll, ur] - + def min_max_coord(self, coord): """ Find the lowest and highest corner of a Rectangle @@ -424,7 +424,7 @@ class router(router_tech): """ debug.info(3, "Clearing all blockages") self.rg.clear_blockages() - + def set_blockages(self, blockages, value=True): """ Flag the blockages in the grid """ self.rg.set_blocked(blockages, value) @@ -448,7 +448,7 @@ class router(router_tech): zlayer = self.get_zindex(blockage.lpp) blockage_tracks = self.get_blockage_tracks(ll, ur, zlayer) return blockage_tracks - + def convert_blockages(self): """ Convert blockages to grid tracks. """ debug.info(1, "Converting blockages.") @@ -456,7 +456,7 @@ class router(router_tech): debug.info(3, "Converting blockage {}".format(str(blockage))) blockage_list = self.convert_blockage(blockage) self.blocked_grids.update(blockage_list) - + def retrieve_blockages(self, lpp): """ Recursive find boundaries as blockages to the routing grid. @@ -470,14 +470,14 @@ class router(router_tech): new_pin = pin_layout("blockage{}".format(len(self.blockages)), rect, lpp) - + # If there is a rectangle that is the same in the pins, # it isn't a blockage! if new_pin not in self.all_pins: self.blockages.append(new_pin) def convert_point_to_units(self, p): - """ + """ Convert a path set of tracks to center line path. """ pt = vector3d(p) @@ -489,7 +489,7 @@ class router(router_tech): Convert a wave to a set of center points """ return [self.convert_point_to_units(i) for i in wave] - + def convert_blockage_to_tracks(self, shape): """ Convert a rectangular blockage shape into track units. @@ -518,7 +518,7 @@ class router(router_tech): """ (ll, ur) = pin.rect debug.info(3, "Converting pin [ {0} , {1} ]".format(ll, ur)) - + # scale the size bigger to include neaby tracks ll = ll.scale(self.track_factor).floor() ur = ur.scale(self.track_factor).ceil() @@ -561,7 +561,7 @@ class router(router_tech): max_overlap = max(overlap_rect) if max_overlap > 0: any_overlap.update([coord]) - + return any_overlap def get_best_offgrid_pin(self, pin, insufficient_list): @@ -580,14 +580,14 @@ class router(router_tech): if min_overlap > best_overlap: best_overlap = min_overlap best_coord = coord - + return set([best_coord]) - + def get_furthest_offgrid_pin(self, pin, insufficient_list): """ Get a grid cell that is the furthest from the blocked grids. """ - + # Find the coordinate with the most overlap best_coord = None best_dist = math.inf @@ -596,7 +596,7 @@ class router(router_tech): if min_dist < best_dist: best_dist = min_dist best_coord = coord - + return set([best_coord]) def get_nearest_offgrid_pin(self, pin, insufficient_list): @@ -613,9 +613,9 @@ class router(router_tech): if min_dist < best_dist: best_dist = min_dist best_coord = coord - + return set([best_coord]) - + def convert_pin_coord_to_tracks(self, pin, coord): """ Return all tracks that an inflated pin overlaps @@ -629,7 +629,7 @@ class router(router_tech): inflated_pin = pin_layout(pin.name, pin.inflate(0.5 * self.track_space), pin.layer) - + overlap_length = pin.overlap_length(track_pin) debug.info(4,"Check overlap: {0} {1} . {2} = {3}".format(coord, pin.rect, @@ -647,7 +647,7 @@ class router(router_tech): return (coord, None) # If it overlaps with the inflated pin, it is partial elif inflated_overlap_length == math.inf or inflated_overlap_length > 0: - debug.info(4," Partial overlap: {0} >? {1}".format(inflated_overlap_length, 0)) + debug.info(4," Partial overlap: {0} >? {1}".format(inflated_overlap_length, 0)) return (None, coord) else: debug.info(4, " No overlap: {0} {1}".format(overlap_length, 0)) @@ -662,7 +662,7 @@ class router(router_tech): x = track.x * self.track_width - 0.5 * self.track_width + 0.5 * self.track_space y = track.y * self.track_width - 0.5 * self.track_width + 0.5 * self.track_space ll = snap_to_grid(vector(x,y)) - + # calculate upper right x = track.x * self.track_width + 0.5 * self.track_width - 0.5 * self.track_space y = track.y * self.track_width + 0.5 * self.track_width - 0.5 * self.track_space @@ -702,7 +702,7 @@ class router(router_tech): ur = snap_to_grid(ll + vector(self.track_width, self.track_width)) return [ll, ur] - + def convert_track_to_inflated_pin(self, track): """ Convert a grid point into a rectangle shape @@ -712,7 +712,7 @@ class router(router_tech): x = track.x*self.track_width - 0.5*self.track_width - 0.5*self.track_space y = track.y*self.track_width - 0.5*self.track_width - 0.5*self.track_space ll = snap_to_grid(vector(x,y)) - + # calculate upper right x = track.x*self.track_width + 0.5*self.track_width + 0.5*self.track_space y = track.y*self.track_width + 0.5*self.track_width + 0.5*self.track_space @@ -720,13 +720,13 @@ class router(router_tech): p = pin_layout("", [ll, ur], self.get_layer(track[2])) return p - + def analyze_pins(self, pin_name): """ Analyze the shapes of a pin and combine them into pin_groups which are connected. """ - debug.info(2, "Analyzing pin groups for {}.".format(pin_name)) + debug.info(2, "Analyzing pin groups for {}.".format(pin_name)) pin_set = self.pins[pin_name] # This will be a list of pin tuples that overlap @@ -773,13 +773,13 @@ class router(router_tech): for pin in pin_list: group_id[pin] = gid gid += 1 - + for p in overlap_list: (p1, p2) = p for pin in pin_list: if group_id[pin] == group_id[p2]: group_id[pin] = group_id[p1] - + # For each pin add it to it's group group_map = {} for pin in pin_list: @@ -792,7 +792,7 @@ class router(router_tech): group_map[gid].pins.add(pin) self.pin_groups[pin_name] = list(group_map.values()) - + def convert_pins(self, pin_name): """ Convert the pin groups into pin tracks and blockage tracks. @@ -800,7 +800,7 @@ class router(router_tech): debug.info(1, "Converting pins for {}.".format(pin_name)) for pg in self.pin_groups[pin_name]: pg.convert_pin() - + def enclose_pins(self): """ This will find the biggest rectangle enclosing some grid squares and @@ -828,22 +828,22 @@ class router(router_tech): """ for i in range(self.num_pin_components(pin_name)): self.add_pin_component_target(pin_name, i) - + def num_pin_components(self, pin_name): """ This returns how many disconnected pin components there are. """ return len(self.pin_groups[pin_name]) - + def add_pin_component_source(self, pin_name, index): """ - This will mark only the pin tracks + This will mark only the pin tracks from the indexed pin component as a source. It also unsets it as a blockage. """ debug.check(index 1: newpath.append(path[-1]) return newpath - + def run_router(self, detour_scale): """ This assumes the blockages, source, and target are all set up. @@ -1002,7 +1002,7 @@ class router(router_tech): if v.source and v.target: debug.error("Grid cell is source and target! {}".format(k)) return False - + # returns the path in tracks (path, cost) = self.rg.route(detour_scale) if path: @@ -1010,7 +1010,7 @@ class router(router_tech): self.paths.append(path) self.add_route(path) - + path_set = grid_utils.flatten_set(path) self.path_blockages.append(path_set) else: @@ -1067,7 +1067,7 @@ class router(router_tech): width=shape[1].x-shape[0].x, height=shape[1].y-shape[0].y) t = self.rg.map[g].get_type() - + # midpoint offset off = vector((shape[1].x+shape[0].x)/2, (shape[1].y+shape[0].y)/2) @@ -1094,7 +1094,7 @@ class router(router_tech): self.cell.add_label(text=str(t), layer="text", offset=type_off) - + self.cell.add_label(text="{0},{1}".format(g[0], g[1]), layer="text", offset=shape[0], @@ -1107,7 +1107,7 @@ class router(router_tech): debug.info(0, "Erasing router info") layer_num = techlayer["text"] self.cell.objs = [x for x in self.cell.objs if x.layerNumber != layer_num] - + def add_router_info(self): """ Write the routing grid and router cost, blockage, pins on @@ -1120,12 +1120,12 @@ class router(router_tech): show_blockage_grids = False show_enclosures = False show_all_grids = True - + if show_all_grids: self.rg.add_all_grids() for g in self.rg.map: self.annotate_grid(g) - + if show_blockages: # Display the inflated blockage for blockage in self.blockages: @@ -1156,7 +1156,7 @@ class router(router_tech): width=pin.width(), height=pin.height()) - + # FIXME: This should be replaced with vector.snap_to_grid at some point def snap_to_grid(offset): """ diff --git a/compiler/router/router_tech.py b/compiler/router/router_tech.py index 27156eeb..2cf31020 100644 --- a/compiler/router/router_tech.py +++ b/compiler/router/router_tech.py @@ -27,10 +27,10 @@ class router_tech: if len(self.layers) == 1: self.horiz_layer_name = self.vert_layer_name = self.layers[0] self.horiz_lpp = self.vert_lpp = layer[self.layers[0]] - + (self.vert_layer_minwidth, self.vert_layer_spacing) = self.get_supply_layer_width_space(1) (self.horiz_layer_minwidth, self.horiz_layer_spacing) = self.get_supply_layer_width_space(0) - + self.horiz_track_width = self.horiz_layer_minwidth + self.horiz_layer_spacing self.vert_track_width = self.vert_layer_minwidth + self.vert_layer_spacing else: @@ -40,7 +40,7 @@ class router_tech: # routing self.horiz_layer_name = None self.vert_layer_name = None - + if preferred_directions[try_horiz_layer] == "H": self.horiz_layer_name = try_horiz_layer else: @@ -59,17 +59,17 @@ class router_tech: self.horiz_lpp = layer[self.horiz_layer_name] self.vert_lpp = layer[self.vert_layer_name] - + (self.vert_layer_minwidth, self.vert_layer_spacing) = self.get_supply_layer_width_space(1) (self.horiz_layer_minwidth, self.horiz_layer_spacing) = self.get_supply_layer_width_space(0) - + # For supplies, we will make the wire wider than the vias self.vert_layer_minwidth = max(self.vert_layer_minwidth, max_via_size) self.horiz_layer_minwidth = max(self.horiz_layer_minwidth, max_via_size) - + self.horiz_track_width = self.horiz_layer_minwidth + self.horiz_layer_spacing self.vert_track_width = self.vert_layer_minwidth + self.vert_layer_spacing - + # We'll keep horizontal and vertical tracks the same for simplicity. self.track_width = max(self.horiz_track_width,self.vert_track_width) debug.info(1,"Track width: {:.3f}".format(self.track_width)) @@ -77,14 +77,14 @@ class router_tech: debug.info(1,"Track space: {:.3f}".format(self.track_space)) self.track_wire = self.track_width - self.track_space debug.info(1,"Track wire width: {:.3f}".format(self.track_wire)) - + self.track_widths = vector([self.track_width] * 2) self.track_factor = vector([1/self.track_width] * 2) debug.info(2,"Track factor: {}".format(self.track_factor)) - + # When we actually create the routes, make them the width of the track (minus 1/2 spacing on each side) self.layer_widths = [self.track_wire, 1, self.track_wire] - + def same_lpp(self, lpp1, lpp2): """ Check if the layers and purposes are the same. @@ -92,7 +92,7 @@ class router_tech: """ if lpp1[1] == None or lpp2[1] == None: return lpp1[0] == lpp2[0] - + return lpp1[0] == lpp2[0] and lpp1[1] == lpp2[1] def get_zindex(self, lpp): @@ -120,12 +120,12 @@ class router_tech: layer_name = self.horiz_layer_name else: debug.error("Invalid zindex for track", -1) - + min_wire_width = drc("minwidth_{0}".format(layer_name), 0, math.inf) - + min_width = drc("minwidth_{0}".format(layer_name), self.rail_track_width*min_wire_width, math.inf) min_spacing = drc(str(layer_name)+"_to_"+str(layer_name), self.rail_track_width*min_wire_width, math.inf) return (min_width,min_spacing) - + diff --git a/compiler/router/signal_grid.py b/compiler/router/signal_grid.py index cb012a5e..4cddaa5f 100644 --- a/compiler/router/signal_grid.py +++ b/compiler/router/signal_grid.py @@ -22,7 +22,7 @@ class signal_grid(grid): def __init__(self, ll, ur, track_factor): """ Create a routing map of width x height cells and 2 in the z-axis. """ grid.__init__(self, ll, ur, track_factor) - + # priority queue for the maze routing self.q = [] @@ -32,12 +32,12 @@ class signal_grid(grid): # Reset all the cells in the map for p in self.map.values(): p.reset() - + # clear source and target pins self.source=[] self.target=[] - - # Clear the queue + + # Clear the queue while len(self.q)>0: heappop(self.q) self.counter = 0 @@ -60,14 +60,14 @@ class signal_grid(grid): heappush(self.q,(cost,self.counter,grid_path([vector3d(s)]))) self.counter+=1 - + def route(self,detour_scale): """ This does the A* maze routing with preferred direction routing. This only works for 1 track wide routes! """ - - # We set a cost bound of the HPWL for run-time. This can be + + # We set a cost bound of the HPWL for run-time. This can be # over-ridden if the route fails due to pruning a feasible solution. any_source_element = next(iter(self.source)) cost_bound = detour_scale*self.cost_to_target(any_source_element)*grid.PREFERRED_COST @@ -76,28 +76,28 @@ class signal_grid(grid): for s in self.source: if self.is_target(s): return((grid_path([vector3d(s)]),0)) - + # Make sure the queue is empty if we run another route while len(self.q)>0: heappop(self.q) - + # Put the source items into the queue self.init_queue() cheapest_path = None cheapest_cost = None - + # Keep expanding and adding to the priority queue until we are done while len(self.q)>0: # should we keep the path in the queue as well or just the final node? (cost,count,curpath) = heappop(self.q) debug.info(3,"Queue size: size=" + str(len(self.q)) + " " + str(cost)) debug.info(4,"Expanding: cost=" + str(cost) + " " + str(curpath)) - + # expand the last element neighbors = self.expand_dirs(curpath) debug.info(4,"Neighbors: " + str(neighbors)) - + for n in neighbors: # make a new copy of the path to not update the old ones newpath = deepcopy(curpath) @@ -134,10 +134,10 @@ class signal_grid(grid): but not expanding to blocked cells. Expands in all directions regardless of preferred directions. """ - - # Expand all directions. + + # Expand all directions. neighbors = curpath.expand_dirs() - + # Filter the blocked ones unblocked_neighbors = [x for x in neighbors if not self.is_blocked(x)] @@ -145,9 +145,9 @@ class signal_grid(grid): def hpwl(self, src, dest): - """ + """ Return half perimeter wire length from point to another. - Either point can have positive or negative coordinates. + Either point can have positive or negative coordinates. Include the via penalty if there is one. """ hpwl = abs(src.x-dest.x) @@ -155,10 +155,10 @@ class signal_grid(grid): if src.x!=dest.x and src.y!=dest.y: hpwl += grid.VIA_COST return hpwl - + def cost_to_target(self,source): """ - Find the cheapest HPWL distance to any target point ignoring + Find the cheapest HPWL distance to any target point ignoring blockages for A* search. """ any_target_element = next(iter(self.target)) @@ -170,8 +170,8 @@ class signal_grid(grid): def get_inertia(self,p0,p1): - """ - Sets the direction based on the previous direction we came from. + """ + Sets the direction based on the previous direction we came from. """ # direction (index) of movement if p0.x==p1.x: @@ -182,5 +182,5 @@ class signal_grid(grid): # z direction return 2 - - + + diff --git a/compiler/router/signal_router.py b/compiler/router/signal_router.py index 9390deaf..5d9b52bc 100644 --- a/compiler/router/signal_router.py +++ b/compiler/router/signal_router.py @@ -29,7 +29,7 @@ class signal_router(router): def create_routing_grid(self): - """ + """ Create a sprase routing grid with A* expansion functions. """ # We will add a halo around the boundary @@ -39,19 +39,19 @@ class signal_router(router): import signal_grid self.rg = signal_grid.signal_grid(self.ll, self.ur, self.track_width) - + def route(self, src, dest, detour_scale=5): - """ + """ Route a single source-destination net and return - the simplified rectilinear path. Cost factor is how sub-optimal to explore for a feasible route. + the simplified rectilinear path. Cost factor is how sub-optimal to explore for a feasible route. This is used to speed up the routing when there is not much detouring needed. """ debug.info(1,"Running signal router from {0} to {1}...".format(src,dest)) self.pins[src] = [] self.pins[dest] = [] - + # Clear the pins if we have previously routed if (hasattr(self,'rg')): self.clear_pins() @@ -63,13 +63,13 @@ class signal_router(router): # Get the pin shapes self.find_pins_and_blockages([src, dest]) - + # Block everything self.prepare_blockages() # Clear the pins we are routing self.set_blockages(self.pin_components[src],False) - self.set_blockages(self.pin_components[dest],False) - + self.set_blockages(self.pin_components[dest],False) + # Now add the src/tgt if they are not blocked by other shapes self.add_source(src) self.add_target(dest) @@ -77,12 +77,12 @@ class signal_router(router): if not self.run_router(detour_scale=detour_scale): self.write_debug_gds(stop_program=False) return False - - self.write_debug_gds(stop_program=False) + + self.write_debug_gds(stop_program=False) return True - - + + diff --git a/compiler/router/supply_grid.py b/compiler/router/supply_grid.py index 98c6f031..f4c31bff 100644 --- a/compiler/router/supply_grid.py +++ b/compiler/router/supply_grid.py @@ -24,7 +24,7 @@ class supply_grid(signal_grid): def __init__(self, ll, ur, track_width): """ Create a routing map of width x height cells and 2 in the z-axis. """ signal_grid.__init__(self, ll, ur, track_width) - + def reinit(self): """ Reinitialize everything for a new route. """ self.source = set() @@ -32,10 +32,10 @@ class supply_grid(signal_grid): # Reset all the cells in the map for p in self.map.values(): p.reset() - + def find_start_wave(self, wave, direct): - """ + """ Finds the first loc starting at loc and up that is open. Returns None if it reaches max size first. """ @@ -54,10 +54,10 @@ class supply_grid(signal_grid): # Return a start if it isn't blocked if not self.is_wave_blocked(wave): return wave - + return wave - - + + def is_wave_blocked(self, wave): """ Checks if any of the locations are blocked @@ -68,7 +68,7 @@ class supply_grid(signal_grid): else: return False - + def probe(self, wave, direct): """ Expand the wave until there is a blockage and return @@ -83,4 +83,4 @@ class supply_grid(signal_grid): return wave_path - + diff --git a/compiler/router/supply_grid_router.py b/compiler/router/supply_grid_router.py index cd7b6b7b..21369003 100644 --- a/compiler/router/supply_grid_router.py +++ b/compiler/router/supply_grid_router.py @@ -29,7 +29,7 @@ class supply_grid_router(router): # Power rail width in minimum wire widths self.rail_track_width = 3 - + router.__init__(self, layers, design, gds_filename, self.rail_track_width) # The list of supply rails (grid sets) that may be routed @@ -38,9 +38,9 @@ class supply_grid_router(router): self.supply_rail_tracks = {} print_time("Init supply router", datetime.now(), start_time, 3) - + def create_routing_grid(self): - """ + """ Create a sprase routing grid with A* expansion functions. """ size = self.ur - self.ll @@ -48,7 +48,7 @@ class supply_grid_router(router): import supply_grid self.rg = supply_grid.supply_grid(self.ll, self.ur, self.track_width) - + def route(self, vdd_name="vdd", gnd_name="gnd"): """ Add power supply rails and connect all pins to these rails. @@ -76,18 +76,18 @@ class supply_grid_router(router): self.prepare_blockages(self.gnd_name) # Determine the rail locations self.route_supply_rails(self.gnd_name, 0) - + # Block everything self.prepare_blockages(self.vdd_name) # Determine the rail locations self.route_supply_rails(self.vdd_name, 1) print_time("Routing supply rails", datetime.now(), start_time, 3) - + start_time = datetime.now() self.route_simple_overlaps(vdd_name) self.route_simple_overlaps(gnd_name) print_time("Simple overlap routing", datetime.now(), start_time, 3) - + # Route the supply pins to the supply rails # Route vdd first since we want it to be shorter start_time = datetime.now() @@ -101,7 +101,7 @@ class supply_grid_router(router): return False if not self.check_all_routed(gnd_name): return False - + return True def check_all_routed(self, pin_name): @@ -111,7 +111,7 @@ class supply_grid_router(router): for pg in self.pin_groups[pin_name]: if not pg.is_routed(): return False - + def route_simple_overlaps(self, pin_name): """ This checks for simple cases where a pin component already overlaps a supply rail. @@ -125,20 +125,20 @@ class supply_grid_router(router): for pg in self.pin_groups[pin_name]: if pg.is_routed(): continue - + # First, check if we just overlap, if so, we are done. overlap_grids = wire_tracks & pg.grids if len(overlap_grids)>0: routed_count += 1 pg.set_routed() continue - + # Else, if we overlap some of the space track, we can patch it with an enclosure # pg.create_simple_overlap_enclosure(pg.grids) # pg.add_enclosure(self.cell) debug.info(1, "Routed {} simple overlap pins".format(routed_count)) - + def finalize_supply_rails(self, name): """ Determine which supply rails overlap and can accomodate a via. @@ -164,7 +164,7 @@ class supply_grid_router(router): # Never compare to yourself if i1==i2: continue - + # Only consider r2 vertical rails e = next(iter(r2)) if e.z==0: @@ -179,7 +179,7 @@ class supply_grid_router(router): debug.info(3, "Via overlap {0} {1}".format(len(overlap),overlap)) connections.update([i1, i2]) via_areas.append(overlap) - + # Go through and add the vias at the center of the intersection for area in via_areas: ll = grid_utils.get_lower_left(area) @@ -190,7 +190,7 @@ class supply_grid_router(router): # Determien which indices were not connected to anything above missing_indices = set([x for x in range(len(self.supply_rails[name]))]) missing_indices.difference_update(connections) - + # Go through and remove those disconnected indices # (No via was added, so that doesn't need to be removed) for rail_index in sorted(missing_indices, reverse=True): @@ -202,7 +202,7 @@ class supply_grid_router(router): # Make the supply rails into a big giant set of grids for easy blockages. # Must be done after we determine which ones are connected. self.create_supply_track_set(name) - + def add_supply_rails(self, name): """ Add the shapes that represent the routed supply rails. @@ -211,7 +211,7 @@ class supply_grid_router(router): """ for rail in self.supply_rails[name]: ll = grid_utils.get_lower_left(rail) - ur = grid_utils.get_upper_right(rail) + ur = grid_utils.get_upper_right(rail) z = ll.z pin = self.compute_pin_enclosure(ll, ur, z, name) debug.info(3, "Adding supply rail {0} {1}->{2} {3}".format(name, ll, ur, pin)) @@ -229,12 +229,12 @@ class supply_grid_router(router): """ self.supply_rails[name]=[] - + max_yoffset = self.rg.ur.y max_xoffset = self.rg.ur.x min_yoffset = self.rg.ll.y min_xoffset = self.rg.ll.x - + # Horizontal supply rails start_offset = min_yoffset + supply_number for offset in range(start_offset, max_yoffset, 2): @@ -272,19 +272,19 @@ class supply_grid_router(router): """ # Sweep to find an initial unblocked valid wave start_wave = self.rg.find_start_wave(seed_wave, direct) - + # This means there were no more unblocked grids in the row/col if not start_wave: return None wave_path = self.probe_supply_rail(name, start_wave, direct) - + self.approve_supply_rail(name, wave_path) # Return the rail whether we approved it or not, # as it will be used to find the next start location return wave_path - + def probe_supply_rail(self, name, start_wave, direct): """ This finds the first valid starting location and routes a supply rail @@ -308,7 +308,7 @@ class supply_grid_router(router): wave_path.trim_first() wave_path.trim_last() - + return wave_path def approve_supply_rail(self, name, wave_path): @@ -321,7 +321,7 @@ class supply_grid_router(router): grid_set = wave_path.get_grids() self.supply_rails[name].append(grid_set) return True - + return False def route_supply_rails(self, name, supply_number): @@ -333,7 +333,7 @@ class supply_grid_router(router): # Compute the grid locations of the supply rails self.compute_supply_rails(name, supply_number) - + # Add the supply rail vias (and prune disconnected rails) self.finalize_supply_rails(name) @@ -348,7 +348,7 @@ class supply_grid_router(router): for rail in self.supply_rails[pin_name]: rail_set.update(rail) self.supply_rail_tracks[pin_name] = rail_set - + def route_pins_to_rails(self, pin_name): """ This will route each of the remaining pin components to the supply rails. @@ -362,7 +362,7 @@ class supply_grid_router(router): for index, pg in enumerate(self.pin_groups[pin_name]): if pg.is_routed(): continue - + debug.info(3, "Routing component {0} {1}".format(pin_name, index)) # Clear everything in the routing grid. @@ -371,7 +371,7 @@ class supply_grid_router(router): # This is inefficient since it is non-incremental, but it was # easier to debug. self.prepare_blockages(pin_name) - + # Add the single component of the pin as the source # which unmarks it as a blockage too self.add_pin_component_source(pin_name, index) @@ -383,7 +383,7 @@ class supply_grid_router(router): # Actually run the A* router if not self.run_router(detour_scale=5): self.write_debug_gds("debug_route.gds", False) - + # if index==3 and pin_name=="vdd": # self.write_debug_gds("route.gds",False) @@ -396,7 +396,7 @@ class supply_grid_router(router): self.rg.set_target(self.supply_rail_tracks[pin_name]) # But unblock all the rail tracks including the space self.rg.set_blocked(self.supply_rail_tracks[pin_name], False) - + def set_supply_rail_blocked(self, value=True): """ Add the supply rails of given name as a routing target. @@ -404,4 +404,4 @@ class supply_grid_router(router): debug.info(4, "Blocking supply rail") for rail_name in self.supply_rail_tracks: self.rg.set_blocked(self.supply_rail_tracks[rail_name]) - + diff --git a/compiler/router/supply_tree_router.py b/compiler/router/supply_tree_router.py index 7def03e0..9d98c2b0 100644 --- a/compiler/router/supply_tree_router.py +++ b/compiler/router/supply_tree_router.py @@ -13,7 +13,7 @@ from globals import OPTS,print_time from contact import contact from pin_group import pin_group from pin_layout import pin_layout -from vector3d import vector3d +from vector3d import vector3d from router import router from direction import direction from datetime import datetime @@ -33,12 +33,12 @@ class supply_tree_router(router): """ # Power rail width in minimum wire widths self.rail_track_width = 3 - + router.__init__(self, layers, design, gds_filename, self.rail_track_width) - + def create_routing_grid(self): - """ + """ Create a sprase routing grid with A* expansion functions. """ size = self.ur - self.ll @@ -46,9 +46,9 @@ class supply_tree_router(router): import supply_grid self.rg = supply_grid.supply_grid(self.ll, self.ur, self.track_width) - + def route(self, vdd_name="vdd", gnd_name="gnd"): - """ + """ Route the two nets in a single layer) """ debug.info(1,"Running supply router on {0} and {1}...".format(vdd_name, gnd_name)) @@ -82,19 +82,19 @@ class supply_tree_router(router): self.route_pins(gnd_name) print_time("Maze routing supplies",datetime.now(), start_time, 3) - #self.write_debug_gds("final.gds",False) + #self.write_debug_gds("final.gds",False) # Did we route everything?? if not self.check_all_routed(vdd_name): return False if not self.check_all_routed(gnd_name): return False - + return True def check_all_routed(self, pin_name): - """ + """ Check that all pin groups are routed. """ for pg in self.pin_groups[pin_name]: @@ -107,7 +107,7 @@ class supply_tree_router(router): Names is a list of pins to add as a blockage. """ debug.info(3,"Preparing blockages.") - + # Start fresh. Not the best for run-time, but simpler. self.clear_blockages() # This adds the initial blockges of the design @@ -131,9 +131,9 @@ class supply_tree_router(router): # route over them blockage_grids = {y for x in self.pin_groups[pin_name] for y in x.grids} self.set_blockages(blockage_grids,False) - - + + def route_pins(self, pin_name): """ This will route each of the remaining pin components to the other pins. @@ -147,7 +147,7 @@ class supply_tree_router(router): for index,pg in enumerate(self.pin_groups[pin_name]): if pg.is_routed(): continue - + debug.info(1,"Routing component {0} {1}".format(pin_name, index)) # Clear everything in the routing grid. @@ -156,11 +156,11 @@ class supply_tree_router(router): # This is inefficient since it is non-incremental, but it was # easier to debug. self.prepare_blockages(pin_name) - + # Add the single component of the pin as the source # which unmarks it as a blockage too self.add_pin_component_source(pin_name,index) - + # Marks all pin components except index as target self.add_pin_component_target_except(pin_name,index) # Add the prevous paths as a target too @@ -179,15 +179,15 @@ class supply_tree_router(router): import pdb; pdb.set_trace() if index==1: self.write_debug_gds("debug{}.gds".format(pin_name),False) - + # Actually run the A* router if not self.run_router(detour_scale=5): self.write_debug_gds("debug_route.gds",True) - + #if index==3 and pin_name=="vdd": # self.write_debug_gds("route.gds",False) - - - + + + diff --git a/compiler/router/tests/01_no_blockages_test.py b/compiler/router/tests/01_no_blockages_test.py index 4a673c24..1210c064 100644 --- a/compiler/router/tests/01_no_blockages_test.py +++ b/compiler/router/tests/01_no_blockages_test.py @@ -43,14 +43,14 @@ class no_blockages_test(openram_test): mod=cell, offset=[0,0]) self.connect_inst([]) - + layer_stack =("metal1","via1","metal2") r=router(layer_stack,self,gds_file) self.assertTrue(r.route(src="A",dest="B")) r=routing("01_no_blockages_test_{0}".format(OPTS.tech_name)) self.local_drc_check(r) - + # fails if there are any DRC errors on any cells globals.end_openram() diff --git a/compiler/router/tests/02_blockages_test.py b/compiler/router/tests/02_blockages_test.py index e317b642..056cb3f7 100644 --- a/compiler/router/tests/02_blockages_test.py +++ b/compiler/router/tests/02_blockages_test.py @@ -43,19 +43,19 @@ class blockages_test(openram_test): mod=cell, offset=[0,0]) self.connect_inst([]) - + layer_stack =("metal1","via1","metal2") r=router(layer_stack,self,gds_file) self.assertTrue(r.route(src="A",dest="B")) r=routing("02_blockages_test_{0}".format(OPTS.tech_name)) self.local_drc_check(r) - + # fails if there are any DRC errors on any cells globals.end_openram() - + # instantiate a copy of the class to actually run the test diff --git a/compiler/router/tests/03_same_layer_pins_test.py b/compiler/router/tests/03_same_layer_pins_test.py index 10a3544a..a79112d8 100644 --- a/compiler/router/tests/03_same_layer_pins_test.py +++ b/compiler/router/tests/03_same_layer_pins_test.py @@ -42,14 +42,14 @@ class same_layer_pins_test(openram_test): mod=cell, offset=[0,0]) self.connect_inst([]) - + layer_stack =("metal1","via1","metal2") r=router(layer_stack,self,gds_file) self.assertTrue(r.route(src="A",dest="B")) r = routing("03_same_layer_pins_test_{0}".format(OPTS.tech_name)) self.local_drc_check(r) - + # fails if there are any DRC errors on any cells globals.end_openram() diff --git a/compiler/router/tests/04_diff_layer_pins_test.py b/compiler/router/tests/04_diff_layer_pins_test.py index 8966d2e4..a0eba961 100644 --- a/compiler/router/tests/04_diff_layer_pins_test.py +++ b/compiler/router/tests/04_diff_layer_pins_test.py @@ -44,14 +44,14 @@ class diff_layer_pins_test(openram_test): mod=cell, offset=[0,0]) self.connect_inst([]) - + layer_stack =("metal1","via1","metal2") r=router(layer_stack,self,gds_file) self.assertTrue(r.route(src="A",dest="B")) r = routing("04_diff_layer_pins_test_{0}".format(OPTS.tech_name)) self.local_drc_check(r) - + # fails if there are any DRC errors on any cells globals.end_openram() diff --git a/compiler/router/tests/05_two_nets_test.py b/compiler/router/tests/05_two_nets_test.py index ebf84745..962af07e 100644 --- a/compiler/router/tests/05_two_nets_test.py +++ b/compiler/router/tests/05_two_nets_test.py @@ -44,7 +44,7 @@ class two_nets_test(openram_test): mod=cell, offset=[0,0]) self.connect_inst([]) - + layer_stack =("metal1","via1","metal2") r=router(layer_stack,self,gds_file) self.assertTrue(r.route(src="A",dest="B")) @@ -52,7 +52,7 @@ class two_nets_test(openram_test): r = routing("05_two_nets_test_{0}".format(OPTS.tech_name)) self.local_drc_check(r) - + # fails if there are any DRC errors on any cells globals.end_openram() diff --git a/compiler/router/tests/06_pin_location_test.py b/compiler/router/tests/06_pin_location_test.py index a035cc59..cb8d56d1 100644 --- a/compiler/router/tests/06_pin_location_test.py +++ b/compiler/router/tests/06_pin_location_test.py @@ -43,7 +43,7 @@ class pin_location_test(openram_test): mod=cell, offset=[0,0]) self.connect_inst([]) - + layer_stack =("metal1","via1","metal2") r=router(layer_stack,self,gds_file) # these are user coordinates and layers @@ -61,7 +61,7 @@ class pin_location_test(openram_test): # fails if there are any DRC errors on any cells globals.end_openram() - + # instantiate a copy of the class to actually run the test diff --git a/compiler/router/tests/07_big_test.py b/compiler/router/tests/07_big_test.py index 5410dcbf..d6da2488 100644 --- a/compiler/router/tests/07_big_test.py +++ b/compiler/router/tests/07_big_test.py @@ -43,7 +43,7 @@ class big_test(openram_test): mod=cell, offset=[0,0]) self.connect_inst([]) - + layer_stack =("metal1","via1","metal2") r=router(layer_stack,self,gds_file) connections=[('out_0_2', 'a_0_0'), @@ -76,10 +76,10 @@ class big_test(openram_test): self.local_drc_check(r) else: debug.warning("This test does not support technology {0}".format(OPTS.tech_name)) - + # fails if there are any DRC errors on any cells globals.end_openram() - + # instantiate a copy of the class to actually run the test diff --git a/compiler/router/tests/08_expand_region_test.py b/compiler/router/tests/08_expand_region_test.py index ab4bce59..3f2975f9 100644 --- a/compiler/router/tests/08_expand_region_test.py +++ b/compiler/router/tests/08_expand_region_test.py @@ -43,17 +43,17 @@ class expand_region_test(openram_test): mod=cell, offset=[0,0]) self.connect_inst([]) - + layer_stack =("metal1","via1","metal2") r=router(layer_stack,self,gds_file) - # This should be infeasible because it is blocked without a detour. + # This should be infeasible because it is blocked without a detour. self.assertFalse(r.route(src="A",dest="B",detour_scale=1)) # This should be feasible because we allow it to detour self.assertTrue(r.route(src="A",dest="B",detour_scale=3)) r = routing("08_expand_region_test_{0}".format(OPTS.tech_name)) self.local_drc_check(r) - + # fails if there are any DRC errors on any cells globals.end_openram() diff --git a/compiler/router/tests/10_supply_grid_test.py b/compiler/router/tests/10_supply_grid_test.py index 73e41b86..5824a7f4 100644 --- a/compiler/router/tests/10_supply_grid_test.py +++ b/compiler/router/tests/10_supply_grid_test.py @@ -38,13 +38,13 @@ class no_blockages_test(openram_test): c = sram_config(word_size=4, num_words=32, num_banks=1) - + c.words_per_row=1 sram = sram(c, "sram1") cell = sram.s self.local_check(cell,True) - + # fails if there are any DRC errors on any cells globals.end_openram() diff --git a/compiler/router/tests/gds_cell.py b/compiler/router/tests/gds_cell.py index b93b512a..07eac4bc 100644 --- a/compiler/router/tests/gds_cell.py +++ b/compiler/router/tests/gds_cell.py @@ -14,7 +14,7 @@ class gds_cell(design): self.name = name self.gds_file = gds_file self.sp_file = None - + design.__init__(self, name) # The dimensions will not be defined, so do this... diff --git a/compiler/router/tests/regress.py b/compiler/router/tests/regress.py index db21bbd9..63b4dd0d 100644 --- a/compiler/router/tests/regress.py +++ b/compiler/router/tests/regress.py @@ -41,6 +41,6 @@ test_result = test_runner.run(suite) import verify verify.print_drc_stats() verify.print_lvs_stats() -verify.print_pex_stats() +verify.print_pex_stats() sys.exit(not test_result.wasSuccessful()) diff --git a/compiler/router/tests/testutils.py b/compiler/router/tests/testutils.py index c90046f3..c6e91459 100644 --- a/compiler/router/tests/testutils.py +++ b/compiler/router/tests/testutils.py @@ -13,7 +13,7 @@ import debug class openram_test(unittest.TestCase): """ Base unit test that we have some shared classes in. """ - + def local_drc_check(self, w): self.reset() @@ -28,11 +28,11 @@ class openram_test(unittest.TestCase): if OPTS.purge_temp: self.cleanup() - + def local_check(self, a, final_verification=False): self.reset() - + tempspice = OPTS.openram_temp + "temp.sp" tempgds = OPTS.openram_temp + "temp.gds" @@ -44,7 +44,7 @@ class openram_test(unittest.TestCase): if result != 0: self.fail("DRC failed: {}".format(a.name)) - + result=verify.run_lvs(a.name, tempgds, tempspice, final_verification) if result != 0: self.fail("LVS mismatch: {}".format(a.name)) @@ -58,10 +58,10 @@ class openram_test(unittest.TestCase): for f in files: # Only remove the files if os.path.isfile(f): - os.remove(f) + os.remove(f) def reset(self): - """ + """ Reset everything after each test. """ # Reset the static duplicate name checker for unit tests. @@ -89,7 +89,7 @@ class openram_test(unittest.TestCase): data_string=pprint.pformat(data) debug.error("Results exceeded {:.1f}% tolerance compared to golden results:\n".format(error_tolerance*100)+data_string) return data_matches - + def isclose(self,key,value,actual_value,error_tolerance=1e-2): @@ -105,7 +105,7 @@ class openram_test(unittest.TestCase): return False def relative_diff(self, value1, value2): - """ Compute the relative difference of two values and normalize to the largest. + """ Compute the relative difference of two values and normalize to the largest. If largest value is 0, just return the difference.""" # Edge case to avoid divide by zero @@ -121,7 +121,7 @@ class openram_test(unittest.TestCase): # Edge case where greater is a zero if norm_value == 0: min_value = abs(min(value1, value2)) - + return abs(value1 - value2) / norm_value @@ -135,15 +135,15 @@ class openram_test(unittest.TestCase): """Compare two files. Arguments: - + filename1 -- First file name - + filename2 -- Second file name Return value: - + True if the files are the same, False otherwise. - + """ import re import debug @@ -176,7 +176,7 @@ class openram_test(unittest.TestCase): debug.info(3,"line1_floats: "+str(line1_floats)) debug.info(3,"line2_floats: "+str(line2_floats)) - + # 2. Remove the floats from the string for f in line1_floats: line1=line1.replace(f,"",1) @@ -188,7 +188,7 @@ class openram_test(unittest.TestCase): # 3. Convert to floats rather than strings line1_floats = [float(x) for x in line1_floats] line2_floats = [float(x) for x in line1_floats] - + # 4. Check if remaining string matches if line1 != line2: if mismatches==0: @@ -252,7 +252,7 @@ def header(filename, technology): import getpass if getpass.getuser() == "gitlab-runner": return - + tst = "Running Test for:" print("\n") print(" ______________________________________________________________________________ ") diff --git a/compiler/router/vector3d.py b/compiler/router/vector3d.py index 066f843f..46279099 100644 --- a/compiler/router/vector3d.py +++ b/compiler/router/vector3d.py @@ -28,7 +28,7 @@ class vector3d(): self.y = y self.z = z self._hash = hash((self.x,self.y,self.z)) - + def __str__(self): """ override print function output """ return "v3d["+str(self.x)+", "+str(self.y)+", "+str(self.z)+"]" @@ -38,8 +38,8 @@ class vector3d(): return "v3d["+str(self.x)+", "+str(self.y)+", "+str(self.z)+"]" def __setitem__(self, index, value): - """ - override setitem function + """ + override setitem function can set value by vector3d[index]=value """ if index==0: @@ -51,11 +51,11 @@ class vector3d(): else: self.x=value[0] self.y=value[1] - self.z=value[2] + self.z=value[2] def __getitem__(self, index): """ - override getitem function + override getitem function can get value by value=vector3d[index] """ if index==0: @@ -65,7 +65,7 @@ class vector3d(): elif index==2: return self.z else: - return self + return self def __add__(self, other): """ @@ -142,7 +142,7 @@ class vector3d(): Override round function """ return vector3d(int(round(self.x)),int(round(self.y)), self.z) - + def __eq__(self, other): """Override the default Equals behavior""" if isinstance(other, self.__class__): @@ -157,7 +157,7 @@ class vector3d(): if self.x==other.x and self.y 1: port = 1 - + # Add the col address flops below the bank to the right of the control logic x_offset = self.control_logic_insts[port].lx() - 2 * self.dff.width # Place it a data bus below the x-axis, but at least as high as the control logic to not block @@ -215,7 +215,7 @@ class sram_1bank(sram_base): x_offset = self.col_addr_dff_insts[port].lx() else: self.col_addr_pos[port] = vector(x_offset, y_offset) - + if port in self.write_ports: # Add spare write enable flops to the right of the data flops since the spare # columns will be on the left @@ -248,7 +248,7 @@ class sram_1bank(sram_base): highest_coord = self.find_highest_coords() lowest_coord = self.find_lowest_coords() bbox = [lowest_coord, highest_coord] - + for port in self.all_ports: # Depending on the port, use the bottom/top or left/right sides # Port 0 is left/bottom @@ -296,7 +296,7 @@ class sram_1bank(sram_base): self.copy_layout_pin(self.data_dff_insts[port], "din_{}".format(bit), "din{0}[{1}]".format(port, bit)) - + # Data output pins go to BOTTOM/TOP if port in self.readwrite_ports and OPTS.perimeter_pins: for bit in range(self.word_size + self.num_spare_cols): @@ -319,8 +319,8 @@ class sram_1bank(sram_base): self.copy_layout_pin(self.bank_inst, "dout{0}_{1}".format(port, bit), "dout{0}[{1}]".format(port, bit)) - - + + # Lower address bits go to BOTTOM/TOP for bit in range(self.col_addr_size): @@ -333,7 +333,7 @@ class sram_1bank(sram_base): self.copy_layout_pin(self.col_addr_dff_insts[port], "din_{}".format(bit), "addr{0}[{1}]".format(port, bit)) - + # Upper address bits go to LEFT/RIGHT for bit in range(self.row_addr_size): if OPTS.perimeter_pins: @@ -345,7 +345,7 @@ class sram_1bank(sram_base): self.copy_layout_pin(self.row_addr_dff_insts[port], "din_{}".format(bit), "addr{0}[{1}]".format(port, bit + self.col_addr_size)) - + # Write mask pins go to BOTTOM/TOP if port in self.write_ports: if self.write_size: @@ -379,20 +379,20 @@ class sram_1bank(sram_base): self.add_layout_pins() self.route_clk() - + self.route_control_logic() - + self.route_row_addr_dff() def route_dffs(self, add_routes=True): - + for port in self.all_ports: self.route_dff(port, add_routes) def route_dff(self, port, add_routes): route_map = [] - + # column mux dff is routed on it's own since it is to the far end # decoder inputs are min pitch M2, so need to use lower layer stack if self.col_addr_size > 0: @@ -408,7 +408,7 @@ class sram_1bank(sram_base): else: offset = vector(0, self.bank.height + 2 * self.m1_space) - + cr = channel_route.channel_route(netlist=route_map, offset=offset, layer_stack=self.m1_stack, @@ -420,7 +420,7 @@ class sram_1bank(sram_base): self.col_addr_bus_size[port] = cr.height route_map = [] - + # wmask dff if self.num_wmasks > 0 and port in self.write_ports: dff_names = ["dout_{}".format(x) for x in range(self.num_wmasks)] @@ -436,7 +436,7 @@ class sram_1bank(sram_base): bank_names = ["din{0}_{1}".format(port, x) for x in range(self.word_size + self.num_spare_cols)] bank_pins = [self.bank_inst.get_pin(x) for x in bank_names] route_map.extend(list(zip(bank_pins, dff_pins))) - + if port in self.readwrite_ports and OPTS.perimeter_pins: # outputs from sense amp # These are the output pins which had their pin placed on the perimeter, so route from the @@ -454,14 +454,14 @@ class sram_1bank(sram_base): bank_names = ["bank_spare_wen{0}_{1}".format(port, x) for x in range(self.num_spare_cols)] bank_pins = [self.bank_inst.get_pin(x) for x in bank_names] route_map.extend(list(zip(bank_pins, dff_pins))) - + if len(route_map) > 0: - + if self.num_wmasks > 0 and port in self.write_ports: layer_stack = self.m3_stack else: layer_stack = self.m1_stack - + if port == 0: offset = vector(self.control_logic_insts[port].rx() + self.dff.width, - self.data_bus_size[port] + 2 * self.m1_pitch) @@ -486,7 +486,7 @@ class sram_1bank(sram_base): self.connect_inst([]) else: self.data_bus_size[port] = max(cr.height, self.col_addr_bus_size[port]) + self.data_bus_gap - + def route_clk(self): """ Route the clock network """ @@ -497,7 +497,7 @@ class sram_1bank(sram_base): # are clk_buf and clk_buf_bar control_clk_buf_pin = self.control_logic_insts[port].get_pin("clk_buf") control_clk_buf_pos = control_clk_buf_pin.center() - + # This uses a metal2 track to the right (for port0) of the control/row addr DFF # to route vertically. For port1, it is to the left. row_addr_clk_pin = self.row_addr_dff_insts[port].get_pin("clk") @@ -518,11 +518,11 @@ class sram_1bank(sram_base): self.add_via_stack_center(from_layer=control_clk_buf_pin.layer, to_layer="m2", offset=clk_steiner_pos) - + # Note, the via to the control logic is taken care of above self.add_wire(self.m2_stack[::-1], [row_addr_clk_pos, mid1_pos, clk_steiner_pos]) - + if self.col_addr_dff: dff_clk_pin = self.col_addr_dff_insts[port].get_pin("clk") dff_clk_pos = dff_clk_pin.center() @@ -567,9 +567,9 @@ class sram_1bank(sram_base): self.add_via_stack_center(from_layer=dest_pin.layer, to_layer="m2", offset=dest_pin.center()) - + def route_row_addr_dff(self): - """ + """ Connect the output of the row flops to the bank pins """ for port in self.all_ports: @@ -602,7 +602,7 @@ class sram_1bank(sram_base): self.add_label(text=n, layer=pin.layer, offset=pin.center()) - + def graph_exclude_data_dff(self): """ Removes data dff and wmask dff (if applicable) from search graph. @@ -616,7 +616,7 @@ class sram_1bank(sram_base): if self.num_spare_cols: for inst in self.spare_wen_dff_insts: self.graph_inst_exclude.add(inst) - + def graph_exclude_addr_dff(self): """ Removes data dff from search graph. @@ -624,7 +624,7 @@ class sram_1bank(sram_base): # Address is considered not part of the critical path, subjectively removed for inst in self.row_addr_dff_insts: self.graph_inst_exclude.add(inst) - + if self.col_addr_dff: for inst in self.col_addr_dff_insts: self.graph_inst_exclude.add(inst) @@ -636,7 +636,7 @@ class sram_1bank(sram_base): # Insts located in control logic, exclusion function called here for inst in self.control_logic_insts: inst.mod.graph_exclude_dffs() - + def get_cell_name(self, inst_name, row, col): """ Gets the spice name of the target bitcell. @@ -645,6 +645,6 @@ class sram_1bank(sram_base): if inst_name.find("x") != 0: inst_name = "x" + inst_name return self.bank_inst.mod.get_cell_name(inst_name + ".x" + self.bank_inst.name, row, col) - + def get_bank_num(self, inst_name, row, col): return 0 diff --git a/compiler/sram/sram_2bank.py b/compiler/sram/sram_2bank.py index dace1ed9..c23008b1 100644 --- a/compiler/sram/sram_2bank.py +++ b/compiler/sram/sram_2bank.py @@ -32,11 +32,11 @@ class sram_2bank(sram_base): # In 2 bank SRAM, the height is determined by the control bus which is higher than the msb address self.vertical_bus_height = self.bank.height + 2*self.bank_to_bus_distance + self.data_bus_height + self.control_bus_height # The address bus extends down through the power rails, but control and bank_sel bus don't - self.addr_bus_height = self.vertical_bus_height - + self.addr_bus_height = self.vertical_bus_height + self.vertical_bus_offset = vector(self.bank.width + self.bank_to_bus_distance, 0) self.data_bus_offset = vector(0, self.bank.height + self.bank_to_bus_distance) - self.supply_bus_offset = vector(0, self.data_bus_offset.y + self.data_bus_height) + self.supply_bus_offset = vector(0, self.data_bus_offset.y + self.data_bus_height) self.control_bus_offset = vector(0, self.supply_bus_offset.y + self.supply_bus_height) self.bank_sel_bus_offset = self.vertical_bus_offset + vector(self.m2_pitch*self.control_size,0) self.addr_bus_offset = self.bank_sel_bus_offset.scale(1,0) + vector(self.m2_pitch*self.num_banks,0) @@ -49,14 +49,14 @@ class sram_2bank(sram_base): self.msb_address_position = vector(self.bank_inst[1].lx() + 3*self.supply_rail_pitch, self.supply_bus_offset.y + self.supply_bus_height \ + 2*self.m1_pitch + self.msb_address.width) - + def add_modules(self): """ Adds the modules and the buses to the top level """ self.compute_bus_sizes() self.add_banks() - + self.compute_bank_offsets() self.add_busses() @@ -90,7 +90,7 @@ class sram_2bank(sram_base): rotate=270) self.msb_bank_sel_addr = "addr[{}]".format(self.addr_size-1) self.connect_inst([self.msb_bank_sel_addr,"bank_sel[1]","bank_sel[0]","clk_buf", "vdd", "gnd"]) - + def route_shared_banks(self): """ Route the shared signals for two and four bank configurations. """ @@ -98,7 +98,7 @@ class sram_2bank(sram_base): # create the input control pins for n in self.control_logic_inputs + ["clk"]: self.copy_layout_pin(self.control_logic_inst, n) - + # connect the control logic to the control bus for n in self.control_logic_outputs + ["vdd", "gnd"]: pins = self.control_logic_inst.get_pins(n) @@ -109,7 +109,7 @@ class sram_2bank(sram_base): rail_pos = vector(pin_pos.x,self.horz_control_bus_positions[n].y) self.add_path("m2",[pin_pos,rail_pos]) self.add_via_center(self.m1_stack,rail_pos) - + # connect the control logic cross bar for n in self.control_logic_outputs: cross_pos = vector(self.vert_control_bus_positions[n].x,self.horz_control_bus_positions[n].y) @@ -125,7 +125,7 @@ class sram_2bank(sram_base): def route_single_msb_address(self): """ Route one MSB address bit for 2-bank SRAM """ - + # connect the bank MSB flop supplies vdd_pins = self.msb_address_inst.get_pins("vdd") for vdd_pin in vdd_pins: @@ -133,11 +133,11 @@ class sram_2bank(sram_base): vdd_pos = vdd_pin.bc() down_pos = vdd_pos - vector(0,self.m1_pitch) rail_pos = vector(vdd_pos.x,self.horz_control_bus_positions["vdd"].y) - self.add_path("m1",[vdd_pos,down_pos]) - self.add_via_center(self.m1_stack,down_pos,rotate=90) + self.add_path("m1",[vdd_pos,down_pos]) + self.add_via_center(self.m1_stack,down_pos,rotate=90) self.add_path("m2",[down_pos,rail_pos]) self.add_via_center(self.m1_stack,rail_pos) - + gnd_pins = self.msb_address_inst.get_pins("gnd") # Only add the ground connection to the lowest metal2 rail in the flop array # FIXME: SCMOS doesn't have a vertical rail in the cell, or we could use those @@ -149,9 +149,9 @@ class sram_2bank(sram_base): gnd_pos = gnd_pin.ur() rail_pos = vector(gnd_pos.x,self.horz_control_bus_positions["gnd"].y) self.add_path("m2",[gnd_pos,rail_pos]) - self.add_via_center(self.m1_stack,rail_pos) - - # connect the MSB flop to the address input bus + self.add_via_center(self.m1_stack,rail_pos) + + # connect the MSB flop to the address input bus msb_pins = self.msb_address_inst.get_pins("din[0]") for msb_pin in msb_pins: if msb_pin.layer == "m3": @@ -170,7 +170,7 @@ class sram_2bank(sram_base): self.add_path("m2",[msb_out_pos,out_extend_right_pos,out_extend_up_pos]) self.add_wire(("m3","via2","m2"),[out_extend_right_pos,out_extend_up_pos,rail_pos]) self.add_via_center(self.m2_stack,rail_pos) - + # Connect the output to select 1 msb_out_pin = self.msb_address_inst.get_pin("dout[0]") msb_out_pos = msb_out_pin.rc() @@ -180,21 +180,21 @@ class sram_2bank(sram_base): self.add_path("m2",[msb_out_pos,out_extend_right_pos,out_extend_down_pos]) self.add_wire(("m3","via2","m2"),[out_extend_right_pos,out_extend_down_pos,rail_pos]) self.add_via_center(self.m2_stack,rail_pos) - + # Connect clk clk_pin = self.msb_address_inst.get_pin("clk") clk_pos = clk_pin.bc() rail_pos = self.horz_control_bus_positions["clk_buf"] bend_pos = vector(clk_pos.x,self.horz_control_bus_positions["clk_buf"].y) self.add_path("m1",[clk_pos,bend_pos,rail_pos]) - - + + def route(self): """ Route all of the signals for the two bank SRAM. """ self.route_shared_banks() - + # connect the horizontal control bus to the vertical bus # connect the data output to the data bus for n in self.data_bus_names: @@ -220,21 +220,21 @@ class sram_2bank(sram_base): self.add_via_center(self.m2_stack,rail_pos) - + def add_lvs_correspondence_points(self): - """ - This adds some points for easier debugging if LVS goes wrong. + """ + This adds some points for easier debugging if LVS goes wrong. These should probably be turned off by default though, since extraction will show these as ports in the extracted netlist. """ - + if self.num_banks==1: return - + for n in self.control_bus_names: self.add_label(text=n, - layer="m2", + layer="m2", offset=self.vert_control_bus_positions[n]) for n in self.bank_sel_bus_names: self.add_label(text=n, - layer="m2", + layer="m2", offset=self.vert_control_bus_positions[n]) diff --git a/compiler/sram/sram_base.py b/compiler/sram/sram_base.py index 351619bf..455d2b94 100644 --- a/compiler/sram/sram_base.py +++ b/compiler/sram/sram_base.py @@ -26,7 +26,7 @@ class sram_base(design, verilog, lef): design.__init__(self, name) lef.__init__(self, ["m1", "m2", "m3", "m4"]) verilog.__init__(self) - + self.sram_config = sram_config sram_config.set_local_config(self) @@ -46,7 +46,7 @@ class sram_base(design, verilog, lef): for port in self.write_ports: for bit in range(self.word_size + self.num_spare_cols): self.add_pin("din{0}[{1}]".format(port, bit), "INPUT") - + for port in self.all_ports: for bit in range(self.addr_size): self.add_pin("addr{0}[{1}]".format(port, bit), "INPUT") @@ -64,7 +64,7 @@ class sram_base(design, verilog, lef): else: self.control_logic_inputs.append(self.control_logic_r.get_inputs()) self.control_logic_outputs.append(self.control_logic_r.get_outputs()) - + for port in self.all_ports: self.add_pin("csb{}".format(port), "INPUT") for port in self.readwrite_ports: @@ -80,7 +80,7 @@ class sram_base(design, verilog, lef): for port in self.read_ports: for bit in range(self.word_size + self.num_spare_cols): self.add_pin("dout{0}[{1}]".format(port, bit), "OUTPUT") - + self.add_pin("vdd", "POWER") self.add_pin("gnd", "GROUND") @@ -89,7 +89,7 @@ class sram_base(design, verilog, lef): Add pex labels at the sram level for spice analysis """ - + # add pex labels for bitcells for bank_num in range(len(self.bank_insts)): @@ -103,13 +103,13 @@ class sram_base(design, verilog, lef): br_offsets = pex_data[4] bl_meta = pex_data[5] br_meta = pex_data[6] - + bl = [] br = [] storage_layer_name = "m1" bitline_layer_name = self.bitcell.get_pin("bl").layer - + for cell in range(len(bank_offset)): Q = [bank_offset[cell][0] + Q_offset[cell][0], bank_offset[cell][1] + Q_offset[cell][1]] @@ -166,21 +166,21 @@ class sram_base(design, verilog, lef): def create_netlist(self): """ Netlist creation """ - + start_time = datetime.datetime.now() - + # Must create the control logic before pins to get the pins self.add_modules() self.add_pins() self.create_modules() - + # This is for the lib file if we don't create layout self.width=0 self.height=0 - + if not OPTS.is_unit_test: print_time("Submodules", datetime.datetime.now(), start_time) - + def create_layout(self): """ Layout creation """ start_time = datetime.datetime.now() @@ -195,7 +195,7 @@ class sram_base(design, verilog, lef): print_time("Routing", datetime.datetime.now(), start_time) self.add_lvs_correspondence_points() - + self.offset_all_coordinates() highest_coord = self.find_highest_coords() @@ -214,7 +214,7 @@ class sram_base(design, verilog, lef): def create_modules(self): debug.error("Must override pure virtual function.", -1) - + def route_supplies(self): """ Route the supply grid and connect the pins to them. """ @@ -244,10 +244,10 @@ class sram_base(design, verilog, lef): from supply_grid_router import supply_grid_router as router rtr=router(grid_stack, self) rtr.route() - + def compute_bus_sizes(self): """ Compute the independent bus widths shared between two and four bank SRAMs """ - + # address size + control signals + one-hot bank select signals self.num_vertical_line = self.addr_size + self.control_size + log(self.num_banks, 2) + 1 # data bus size @@ -255,20 +255,20 @@ class sram_base(design, verilog, lef): self.vertical_bus_width = self.m2_pitch * self.num_vertical_line # vertical bus height depends on 2 or 4 banks - + self.data_bus_height = self.m3_pitch * self.num_horizontal_line self.data_bus_width = 2 * (self.bank.width + self.bank_to_bus_distance) + self.vertical_bus_width - + self.control_bus_height = self.m1_pitch * (self.control_size + 2) self.control_bus_width = self.bank.width + self.bank_to_bus_distance + self.vertical_bus_width - + self.supply_bus_height = self.m1_pitch * 2 # 2 for vdd/gnd placed with control bus self.supply_bus_width = self.data_bus_width # Sanity check to ensure we can fit the control logic above a single bank (0.9 is a hack really) debug.check(self.bank.width + self.vertical_bus_width > 0.9 * self.control_logic.width, "Bank is too small compared to control logic.") - + def add_busses(self): """ Add the horizontal and vertical busses """ # Vertical bus @@ -304,7 +304,7 @@ class sram_base(design, verilog, lef): offset=self.bank_sel_bus_offset, names=self.bank_sel_bus_names, length=self.vertical_bus_height)) - + # Horizontal data bus self.data_bus_names = ["DATA{0}[{1}]".format(port, i) for i in range(self.word_size)] self.data_bus_positions = self.create_horizontal_pin_bus(layer="m3", @@ -333,7 +333,7 @@ class sram_base(design, verilog, lef): offset=self.control_bus_offset, names=self.control_bus_names[port], length=self.control_bus_width)) - + def add_multi_bank_modules(self): """ Create the multibank address flops and bank decoder """ from dff_buf_array import dff_buf_array @@ -345,7 +345,7 @@ class sram_base(design, verilog, lef): if self.num_banks>2: self.msb_decoder = self.bank.decoder.pre2_4 self.add_mod(self.msb_decoder) - + def add_modules(self): self.bitcell = factory.create(module_type=OPTS.bitcell) self.dff = factory.create(module_type="dff") @@ -370,7 +370,7 @@ class sram_base(design, verilog, lef): if self.num_spare_cols: self.spare_wen_dff = factory.create("dff_array", module_name="spare_wen_dff", rows=1, columns=self.num_spare_cols) self.add_mod(self.spare_wen_dff) - + # Create the bank module (up to four are instantiated) self.bank = factory.create("bank", sram_config=self.sram_config, module_name="bank") self.add_mod(self.bank) @@ -383,7 +383,7 @@ class sram_base(design, verilog, lef): c = reload(__import__(OPTS.control_logic)) self.mod_control_logic = getattr(c, OPTS.control_logic) - + # Create the control logic module for each port type if len(self.readwrite_ports)>0: self.control_logic_rw = self.mod_control_logic(num_rows=self.num_rows, @@ -470,7 +470,7 @@ class sram_base(design, verilog, lef): bank_mirror = "MY" else: bank_mirror = "R0" - + bank_inst.place(offset=position, mirror=bank_mirror, rotate=bank_rotation) @@ -483,7 +483,7 @@ class sram_base(design, verilog, lef): for port in self.all_ports: insts.append(self.add_inst(name="row_address{}".format(port), mod=self.row_addr_dff)) - + # inputs, outputs/output/bar inputs = [] outputs = [] @@ -492,16 +492,16 @@ class sram_base(design, verilog, lef): outputs.append("a{}[{}]".format(port, bit + self.col_addr_size)) self.connect_inst(inputs + outputs + ["clk_buf{}".format(port), "vdd", "gnd"]) - + return insts - + def create_col_addr_dff(self): """ Add and place all address flops for the column decoder """ insts = [] for port in self.all_ports: insts.append(self.add_inst(name="col_address{}".format(port), mod=self.col_addr_dff)) - + # inputs, outputs/output/bar inputs = [] outputs = [] @@ -510,7 +510,7 @@ class sram_base(design, verilog, lef): outputs.append("a{}[{}]".format(port, bit)) self.connect_inst(inputs + outputs + ["clk_buf{}".format(port), "vdd", "gnd"]) - + return insts def create_data_dff(self): @@ -523,7 +523,7 @@ class sram_base(design, verilog, lef): else: insts.append(None) continue - + # inputs, outputs/output/bar inputs = [] outputs = [] @@ -532,7 +532,7 @@ class sram_base(design, verilog, lef): outputs.append("bank_din{}[{}]".format(port, bit)) self.connect_inst(inputs + outputs + ["clk_buf{}".format(port), "vdd", "gnd"]) - + return insts def create_wmask_dff(self): @@ -556,7 +556,7 @@ class sram_base(design, verilog, lef): self.connect_inst(inputs + outputs + ["clk_buf{}".format(port), "vdd", "gnd"]) return insts - + def create_spare_wen_dff(self): """ Add all spare write enable flops """ insts = [] @@ -578,7 +578,7 @@ class sram_base(design, verilog, lef): self.connect_inst(inputs + outputs + ["clk_buf{}".format(port), "vdd", "gnd"]) return insts - + def create_control_logic(self): """ Add control logic instances """ @@ -590,7 +590,7 @@ class sram_base(design, verilog, lef): mod = self.control_logic_w else: mod = self.control_logic_r - + insts.append(self.add_inst(name="control{}".format(port), mod=mod)) # Inputs @@ -608,9 +608,9 @@ class sram_base(design, verilog, lef): temp.append("p_en_bar{}".format(port)) temp.extend(["wl_en{}".format(port), "clk_buf{}".format(port), "vdd", "gnd"]) self.connect_inst(temp) - + return insts - + def sp_write(self, sp_name, lvs_netlist=False): # Write the entire spice of the object to the file ############################################################ @@ -626,7 +626,7 @@ class sram_base(design, verilog, lef): sp.write("* Column mux: {}:1\n".format(self.words_per_row)) sp.write("**************************************************\n") # This causes unit test mismatch - + # sp.write("* Created: {0}\n".format(datetime.datetime.now())) # sp.write("* User: {0}\n".format(getpass.getuser())) # sp.write(".global {0} {1}\n".format(spice["vdd_name"], @@ -644,9 +644,9 @@ class sram_base(design, verilog, lef): Excludes bits in column from being added to graph except target """ self.bank.graph_exclude_bits(targ_row, targ_col) - + def clear_exclude_bits(self): - """ + """ Clears the bit exclusions """ self.bank.clear_exclude_bits() diff --git a/compiler/sram/sram_config.py b/compiler/sram/sram_config.py index 7544e946..28bdfe8d 100644 --- a/compiler/sram/sram_config.py +++ b/compiler/sram/sram_config.py @@ -13,7 +13,7 @@ from sram_factory import factory class sram_config: """ This is a structure that is used to hold the SRAM configuration options. """ - + def __init__(self, word_size, num_words, write_size=None, num_banks=1, words_per_row=None, num_spare_rows=0, num_spare_cols=0): self.word_size = word_size self.num_words = num_words @@ -29,7 +29,7 @@ class sram_config: def set_local_config(self, module): """ Copy all of the member variables to the given module for convenience """ - + members = [attr for attr in dir(self) if not callable(getattr(self, attr)) and not attr.startswith("__")] # Copy all the variables to the local module @@ -40,13 +40,13 @@ class sram_config: """ Computes the organization of the memory using bitcell size by trying to make it square.""" bitcell = factory.create(module_type=OPTS.bitcell, cell_name=OPTS.bitcell_name) - + debug.check(self.num_banks in [1, 2, 4], "Valid number of banks are 1 , 2 and 4.") self.num_words_per_bank = self.num_words / self.num_banks self.num_bits_per_bank = self.word_size * self.num_words_per_bank - + # If this was hard coded, don't dynamically compute it! if not self.words_per_row: # Compute the area of the bitcells and estimate a square bank (excluding auxiliary circuitry) @@ -64,18 +64,18 @@ class sram_config: self.recompute_sizes() def recompute_sizes(self): - """ - Calculate the auxiliary values assuming fixed number of words per row. - This can be called multiple times from the unit test when we reconfigure an + """ + Calculate the auxiliary values assuming fixed number of words per row. + This can be called multiple times from the unit test when we reconfigure an SRAM for testing. """ debug.info(1, "Recomputing with words per row: {}".format(self.words_per_row)) - + # If the banks changed self.num_words_per_bank = self.num_words / self.num_banks self.num_bits_per_bank = self.word_size * self.num_words_per_bank - + # Fix the number of columns and rows self.num_cols = int(self.words_per_row * self.word_size) self.num_rows_temp = int(self.num_words_per_bank / self.words_per_row) @@ -116,11 +116,11 @@ class sram_config: debug.check(tentative_num_rows * words_per_row <= 4096, "Number of words exceeds 2048") return int(words_per_row * tentative_num_rows / 512) - + # Recompute the words per row given a hard min if (not OPTS.is_unit_test and tentative_num_rows < 16): debug.check(tentative_num_rows * words_per_row >= 16, "Minimum number of rows is 16, but given {0}".format(tentative_num_rows)) return int(words_per_row * tentative_num_rows / 16) - + return words_per_row diff --git a/compiler/sram_factory.py b/compiler/sram_factory.py index 4f8dcc5c..3680e5d5 100644 --- a/compiler/sram_factory.py +++ b/compiler/sram_factory.py @@ -79,7 +79,7 @@ class sram_factory: user_module_type, um_overridden = self.get_usermodule_type(module_type) # print(module_type, tech_module_type, tm_overridden) # print(module_type, user_module_type, um_overridden) - + # overridden user modules have priority if um_overridden: real_module_type = user_module_type @@ -102,7 +102,7 @@ class sram_factory: self.modules[real_module_type] = mod self.module_indices[real_module_type] = 0 self.objects[real_module_type] = [] - + # Either retreive a previous object or create a new one for obj in self.objects[real_module_type]: (obj_kwargs, obj_item) = obj @@ -150,6 +150,6 @@ class sram_factory: mods = [] return mods - + # Make a factory factory = sram_factory() diff --git a/compiler/tests/00_code_format_check_test.py b/compiler/tests/00_code_format_check_test.py index 571f4be7..834cbace 100755 --- a/compiler/tests/00_code_format_check_test.py +++ b/compiler/tests/00_code_format_check_test.py @@ -27,7 +27,7 @@ class code_format_test(openram_test): if re.search("gdsMill", code): continue errors += check_file_format_tab(code) - errors += check_file_format_carriage(code) + errors += check_file_format_carriage(code) for code in source_codes: if re.search("gdsMill", code): @@ -79,7 +79,7 @@ def check_file_format_tab(file_name): def check_file_format_carriage(file_name): """ - Check if file contains carriage returns at the end of lines + Check if file contains carriage returns at the end of lines and return the number of carriage return lines. """ diff --git a/compiler/tests/01_library_drc_test.py b/compiler/tests/01_library_drc_test.py index 8b254bbc..dbdb1cd2 100755 --- a/compiler/tests/01_library_drc_test.py +++ b/compiler/tests/01_library_drc_test.py @@ -25,7 +25,7 @@ class library_drc_test(openram_test): drc_errors = 0 debug.info(1, "\nPerforming DRC on: " + ", ".join(allnames)) for f in allnames: - gds_name = "{0}/{1}.gds".format(gds_dir, f) + gds_name = "{0}/{1}.gds".format(gds_dir, f) if not os.path.isfile(gds_name): drc_errors += 1 debug.error("Missing GDS file: {}".format(gds_name)) @@ -43,7 +43,7 @@ def setup_files(): gds_files = list(filter(nametest.search, files)) tempnames = gds_files - + # remove the .gds and .sp suffixes for i in range(len(tempnames)): gds_files[i] = re.sub('\.gds$', '', tempnames[i]) diff --git a/compiler/tests/03_contact_test.py b/compiler/tests/03_contact_test.py index d2f0c7f6..7a43d0e4 100755 --- a/compiler/tests/03_contact_test.py +++ b/compiler/tests/03_contact_test.py @@ -32,7 +32,7 @@ class contact_test(openram_test): debug.info(2, "1 x 1 {} test".format(stack_name)) c = factory.create(module_type="contact", layer_stack=layer_stack, dimensions=(1, 1), directions=("H", "H")) self.local_drc_check(c) - + # Check single 1 x 1 contact" debug.info(2, "1 x 1 {} test".format(stack_name)) c = factory.create(module_type="contact", layer_stack=layer_stack, dimensions=(1, 1), directions=("H","V")) @@ -51,7 +51,7 @@ class contact_test(openram_test): # Only do multiple contacts for BEOL for layer_stack in beol_stacks: stack_name = ":".join(map(str, layer_stack)) - + # check vertical array with one in the middle and two ends debug.info(2, "1 x 3 {} test".format(stack_name)) c = factory.create(module_type="contact", layer_stack=layer_stack, dimensions=(1, 3)) @@ -71,7 +71,7 @@ class contact_test(openram_test): # check vertical array with one in the middle and two ends layer_stack = active_stack stack_name = ":".join(map(str, layer_stack)) - + debug.info(2, "1 x 1 {} nwell".format(stack_name)) c = factory.create(module_type="contact", layer_stack=layer_stack, @@ -85,9 +85,9 @@ class contact_test(openram_test): implant_type="p", well_type="p") self.local_drc_check(c) - + globals.end_openram() - + # run the test from the command line diff --git a/compiler/tests/03_path_test.py b/compiler/tests/03_path_test.py index 94e7821a..306bf4e1 100755 --- a/compiler/tests/03_path_test.py +++ b/compiler/tests/03_path_test.py @@ -87,7 +87,7 @@ class path_test(openram_test): self.local_drc_check(w) globals.end_openram() - + # run the test from the command line diff --git a/compiler/tests/03_ptx_3finger_pmos_test.py b/compiler/tests/03_ptx_3finger_pmos_test.py index ccb8b586..0f0edb9c 100755 --- a/compiler/tests/03_ptx_3finger_pmos_test.py +++ b/compiler/tests/03_ptx_3finger_pmos_test.py @@ -33,7 +33,7 @@ class ptx_3finger_pmos_test(openram_test): self.local_drc_check(fet) globals.end_openram() - + # run the test from the command line if __name__ == "__main__": diff --git a/compiler/tests/03_ptx_4finger_pmos_test.py b/compiler/tests/03_ptx_4finger_pmos_test.py index 0bcdf909..9fae372e 100755 --- a/compiler/tests/03_ptx_4finger_pmos_test.py +++ b/compiler/tests/03_ptx_4finger_pmos_test.py @@ -33,7 +33,7 @@ class ptx_test(openram_test): self.local_drc_check(fet) globals.end_openram() - + # run the test from the command line if __name__ == "__main__": diff --git a/compiler/tests/03_ptx_no_contacts_test.py b/compiler/tests/03_ptx_no_contacts_test.py index ff39da79..58611ca8 100755 --- a/compiler/tests/03_ptx_no_contacts_test.py +++ b/compiler/tests/03_ptx_no_contacts_test.py @@ -48,7 +48,7 @@ class ptx_no_contacts_test(openram_test): series_devices=True, tx_type="nmos") self.local_drc_check(fet) - + globals.end_openram() diff --git a/compiler/tests/03_wire_test.py b/compiler/tests/03_wire_test.py index 61e21985..6e036c08 100755 --- a/compiler/tests/03_wire_test.py +++ b/compiler/tests/03_wire_test.py @@ -51,7 +51,7 @@ class wire_test(openram_test): self.local_drc_check(w) globals.end_openram() - + # run the test from the command line if __name__ == "__main__": diff --git a/compiler/tests/04_and2_dec_test.py b/compiler/tests/04_and2_dec_test.py index 97ac5749..de215ffe 100755 --- a/compiler/tests/04_and2_dec_test.py +++ b/compiler/tests/04_and2_dec_test.py @@ -27,7 +27,7 @@ class and2_dec_test(openram_test): OPTS.num_r_ports = 1 OPTS.num_w_ports = 0 globals.setup_bitcell() - + debug.info(2, "Testing and2_dec gate") a = factory.create(module_type="and2_dec") self.local_check(a) diff --git a/compiler/tests/04_and3_dec_test.py b/compiler/tests/04_and3_dec_test.py index ec83335b..51a310fd 100755 --- a/compiler/tests/04_and3_dec_test.py +++ b/compiler/tests/04_and3_dec_test.py @@ -27,7 +27,7 @@ class and3_dec_test(openram_test): OPTS.num_r_ports = 1 OPTS.num_w_ports = 0 globals.setup_bitcell() - + debug.info(2, "Testing and3_dec gate") a = factory.create(module_type="and3_dec") self.local_check(a) diff --git a/compiler/tests/04_and4_dec_test.py b/compiler/tests/04_and4_dec_test.py index aa163160..496cf69f 100755 --- a/compiler/tests/04_and4_dec_test.py +++ b/compiler/tests/04_and4_dec_test.py @@ -29,7 +29,7 @@ class and4_dec_test(openram_test): OPTS.num_r_ports = 1 OPTS.num_w_ports = 0 globals.setup_bitcell() - + debug.info(2, "Testing and4_dec gate") a = factory.create(module_type="and4_dec") self.local_check(a) diff --git a/compiler/tests/04_column_mux_1rw_1r_test.py b/compiler/tests/04_column_mux_1rw_1r_test.py index 7825e081..1e066181 100755 --- a/compiler/tests/04_column_mux_1rw_1r_test.py +++ b/compiler/tests/04_column_mux_1rw_1r_test.py @@ -26,7 +26,7 @@ class column_mux_1rw_1r_test(openram_test): OPTS.num_r_ports = 1 OPTS.num_w_ports = 0 globals.setup_bitcell() - + debug.info(2, "Checking column mux port 0") tx = factory.create(module_type="column_mux", tx_size=8, bitcell_bl="bl0", bitcell_br="br0") self.local_check(tx) @@ -34,7 +34,7 @@ class column_mux_1rw_1r_test(openram_test): debug.info(2, "Checking column mux port 1") tx = factory.create(module_type="column_mux", tx_size=8, bitcell_bl="bl1", bitcell_br="br1") self.local_check(tx) - + globals.end_openram() # run the test from the command line diff --git a/compiler/tests/04_dummy_pbitcell_test.py b/compiler/tests/04_dummy_pbitcell_test.py index b39e48ea..f92d2c91 100755 --- a/compiler/tests/04_dummy_pbitcell_test.py +++ b/compiler/tests/04_dummy_pbitcell_test.py @@ -21,7 +21,7 @@ class replica_pbitcell_test(openram_test): config_file = "{}/tests/configs/config".format(os.getenv("OPENRAM_HOME")) globals.init_openram(config_file) import dummy_pbitcell - + OPTS.bitcell = "pbitcell" OPTS.num_rw_ports = 1 OPTS.num_r_ports = 0 @@ -31,7 +31,7 @@ class replica_pbitcell_test(openram_test): debug.info(2, "Checking dummy bitcell using pbitcell (small cell)") tx = dummy_pbitcell.dummy_pbitcell(name="rpbc") self.local_check(tx) - + OPTS.num_rw_ports = 1 OPTS.num_r_ports = 1 OPTS.num_w_ports = 1 @@ -42,7 +42,7 @@ class replica_pbitcell_test(openram_test): self.local_check(tx) globals.end_openram() - + # run the test from the command line if __name__ == "__main__": (OPTS, args) = globals.parse_args() diff --git a/compiler/tests/04_pbitcell_test.py b/compiler/tests/04_pbitcell_test.py index 450c0263..74880a2f 100755 --- a/compiler/tests/04_pbitcell_test.py +++ b/compiler/tests/04_pbitcell_test.py @@ -37,7 +37,7 @@ class pbitcell_test(openram_test): debug.info(2, "Bitcell with 0 read/write ports") tx = factory.create(module_type="pbitcell") self.local_check(tx) - + OPTS.num_rw_ports=1 OPTS.num_w_ports=0 OPTS.num_r_ports=1 @@ -45,7 +45,7 @@ class pbitcell_test(openram_test): debug.info(2, "Bitcell with 0 write ports") tx = factory.create(module_type="pbitcell") self.local_check(tx) - + OPTS.num_rw_ports=1 OPTS.num_w_ports=1 OPTS.num_r_ports=0 @@ -53,7 +53,7 @@ class pbitcell_test(openram_test): debug.info(2, "Bitcell with 0 read ports") tx = factory.create(module_type="pbitcell") self.local_check(tx) - + OPTS.num_rw_ports=1 OPTS.num_w_ports=0 OPTS.num_r_ports=0 @@ -69,7 +69,7 @@ class pbitcell_test(openram_test): debug.info(2, "Bitcell with 2 of each port: read/write, write, and read") tx = factory.create(module_type="pbitcell") self.local_check(tx) - + OPTS.num_rw_ports=0 OPTS.num_w_ports=2 OPTS.num_r_ports=2 @@ -77,7 +77,7 @@ class pbitcell_test(openram_test): debug.info(2, "Bitcell with 0 read/write ports") tx = factory.create(module_type="pbitcell") self.local_check(tx) - + OPTS.num_rw_ports=2 OPTS.num_w_ports=0 OPTS.num_r_ports=2 @@ -85,7 +85,7 @@ class pbitcell_test(openram_test): debug.info(2, "Bitcell with 0 write ports") tx = factory.create(module_type="pbitcell") self.local_check(tx) - + OPTS.num_rw_ports=2 OPTS.num_w_ports=2 OPTS.num_r_ports=0 @@ -93,7 +93,7 @@ class pbitcell_test(openram_test): debug.info(2, "Bitcell with 0 read ports") tx = factory.create(module_type="pbitcell") self.local_check(tx) - + OPTS.num_rw_ports=2 OPTS.num_w_ports=0 OPTS.num_r_ports=0 diff --git a/compiler/tests/04_pbuf_dec_8x_test.py b/compiler/tests/04_pbuf_dec_8x_test.py index ad1665fe..6a7bd62a 100755 --- a/compiler/tests/04_pbuf_dec_8x_test.py +++ b/compiler/tests/04_pbuf_dec_8x_test.py @@ -25,7 +25,7 @@ class pbuf_dec_test(openram_test): OPTS.num_r_ports = 1 OPTS.num_w_ports = 0 globals.setup_bitcell() - + debug.info(2, "Checking 8x size decoder buffer") a = factory.create(module_type="pbuf_dec", size=8) self.local_check(a) diff --git a/compiler/tests/04_pdriver_test.py b/compiler/tests/04_pdriver_test.py index 41af86f6..d1d3dad4 100755 --- a/compiler/tests/04_pdriver_test.py +++ b/compiler/tests/04_pdriver_test.py @@ -25,19 +25,19 @@ class pdriver_test(openram_test): # a tests the error message for specifying conflicting conditions #a = pdriver.pdriver(fanout = 4,size_list = [1,2,4,8]) #self.local_check(a) - + b = factory.create(module_type="pdriver", size_list = [1,2,4,8]) self.local_check(b) - + c = factory.create(module_type="pdriver", fanout = 50) self.local_check(c) - + d = factory.create(module_type="pdriver", fanout = 50, inverting = True) self.local_check(d) - + e = factory.create(module_type="pdriver", fanout = 64) self.local_check(e) - + f = factory.create(module_type="pdriver", fanout = 64, inverting = True) self.local_check(f) diff --git a/compiler/tests/04_pinv_10x_test.py b/compiler/tests/04_pinv_10x_test.py index ae3f480b..f8452460 100755 --- a/compiler/tests/04_pinv_10x_test.py +++ b/compiler/tests/04_pinv_10x_test.py @@ -25,7 +25,7 @@ class pinv_test(openram_test): tx = factory.create(module_type="pinv", size=8) self.local_check(tx) - globals.end_openram() + globals.end_openram() # run the test from the command line diff --git a/compiler/tests/04_pinv_1x_beta_test.py b/compiler/tests/04_pinv_1x_beta_test.py index 0b8c055a..45a6d37c 100755 --- a/compiler/tests/04_pinv_1x_beta_test.py +++ b/compiler/tests/04_pinv_1x_beta_test.py @@ -25,7 +25,7 @@ class pinv_test(openram_test): tx = factory.create(module_type="pinv", size=1, beta=3) self.local_check(tx) - globals.end_openram() + globals.end_openram() # run the test from the command line if __name__ == "__main__": diff --git a/compiler/tests/04_pinv_2x_test.py b/compiler/tests/04_pinv_2x_test.py index 0a0e63ec..374279a1 100755 --- a/compiler/tests/04_pinv_2x_test.py +++ b/compiler/tests/04_pinv_2x_test.py @@ -25,7 +25,7 @@ class pinv_test(openram_test): tx = factory.create(module_type="pinv", size=2) self.local_check(tx) - globals.end_openram() + globals.end_openram() # run the test from the command line diff --git a/compiler/tests/04_pinv_dec_1x_test.py b/compiler/tests/04_pinv_dec_1x_test.py index 92772616..18f5e907 100755 --- a/compiler/tests/04_pinv_dec_1x_test.py +++ b/compiler/tests/04_pinv_dec_1x_test.py @@ -25,7 +25,7 @@ class pinv_dec_1x_test(openram_test): OPTS.num_r_ports = 1 OPTS.num_w_ports = 0 globals.setup_bitcell() - + debug.info(2, "Checking 1x size decoder inverter") tx = factory.create(module_type="pinv_dec", size=1) self.local_check(tx) diff --git a/compiler/tests/04_pnand2_test.py b/compiler/tests/04_pnand2_test.py index ae0668ae..04106f03 100755 --- a/compiler/tests/04_pnand2_test.py +++ b/compiler/tests/04_pnand2_test.py @@ -29,9 +29,9 @@ class pnand2_test(openram_test): # tx = factory.create(module_type="pnand2", size=1, add_wells=False) # # Only DRC because well contacts will fail LVS # self.local_drc_check(tx) - + globals.end_openram() - + # run the test from the command line if __name__ == "__main__": diff --git a/compiler/tests/04_pnand3_test.py b/compiler/tests/04_pnand3_test.py index c03e32d6..0a327e86 100755 --- a/compiler/tests/04_pnand3_test.py +++ b/compiler/tests/04_pnand3_test.py @@ -31,7 +31,7 @@ class pnand3_test(openram_test): # self.local_drc_check(tx) globals.end_openram() - + # run the test from the command line if __name__ == "__main__": diff --git a/compiler/tests/04_pnand4_test.py b/compiler/tests/04_pnand4_test.py index 8eb1b4ba..f90a4ecc 100755 --- a/compiler/tests/04_pnand4_test.py +++ b/compiler/tests/04_pnand4_test.py @@ -27,7 +27,7 @@ class pnand4_test(openram_test): self.local_check(tx) globals.end_openram() - + # run the test from the command line if __name__ == "__main__": diff --git a/compiler/tests/04_pnor2_test.py b/compiler/tests/04_pnor2_test.py index ea0d6dbc..fd6ecab2 100755 --- a/compiler/tests/04_pnor2_test.py +++ b/compiler/tests/04_pnor2_test.py @@ -26,7 +26,7 @@ class pnor2_test(openram_test): self.local_check(tx) globals.end_openram() - + # run the test from the command line if __name__ == "__main__": (OPTS, args) = globals.parse_args() diff --git a/compiler/tests/04_precharge_1rw_1r_test.py b/compiler/tests/04_precharge_1rw_1r_test.py index 4765c77c..ea452e38 100755 --- a/compiler/tests/04_precharge_1rw_1r_test.py +++ b/compiler/tests/04_precharge_1rw_1r_test.py @@ -21,7 +21,7 @@ class precharge_test(openram_test): def runTest(self): config_file = "{}/tests/configs/config".format(os.getenv("OPENRAM_HOME")) globals.init_openram(config_file) - + # check precharge array in multi-port OPTS.num_rw_ports = 1 OPTS.num_r_ports = 1 @@ -38,7 +38,7 @@ class precharge_test(openram_test): self.local_check(tx) globals.end_openram() - + # run the test from the command line if __name__ == "__main__": (OPTS, args) = globals.parse_args() diff --git a/compiler/tests/04_precharge_test.py b/compiler/tests/04_precharge_test.py index 76d433a8..e66329b5 100755 --- a/compiler/tests/04_precharge_test.py +++ b/compiler/tests/04_precharge_test.py @@ -21,14 +21,14 @@ class precharge_test(openram_test): def runTest(self): config_file = "{}/tests/configs/config".format(os.getenv("OPENRAM_HOME")) globals.init_openram(config_file) - + # check precharge in single port debug.info(2, "Checking precharge for handmade bitcell") tx = factory.create(module_type="precharge", size=1) self.local_check(tx) - + globals.end_openram() - + # run the test from the command line if __name__ == "__main__": (OPTS, args) = globals.parse_args() diff --git a/compiler/tests/04_pwrite_driver_test.py b/compiler/tests/04_pwrite_driver_test.py index 5e1bf621..3ebca3ab 100755 --- a/compiler/tests/04_pwrite_driver_test.py +++ b/compiler/tests/04_pwrite_driver_test.py @@ -26,7 +26,7 @@ class pwrite_driver_test(openram_test): tx = factory.create(module_type="pwrite_driver", size=1) self.local_check(tx) - globals.end_openram() + globals.end_openram() # run the test from the command line if __name__ == "__main__": diff --git a/compiler/tests/04_replica_pbitcell_test.py b/compiler/tests/04_replica_pbitcell_test.py index 77336c61..64159906 100755 --- a/compiler/tests/04_replica_pbitcell_test.py +++ b/compiler/tests/04_replica_pbitcell_test.py @@ -21,7 +21,7 @@ class replica_pbitcell_test(openram_test): config_file = "{}/tests/configs/config".format(os.getenv("OPENRAM_HOME")) globals.init_openram(config_file) import replica_pbitcell - + OPTS.bitcell = "pbitcell" OPTS.num_rw_ports = 1 OPTS.num_r_ports = 0 @@ -31,7 +31,7 @@ class replica_pbitcell_test(openram_test): debug.info(2, "Checking replica bitcell using pbitcell (small cell)") tx = replica_pbitcell.replica_pbitcell(name="rpbc") self.local_check(tx) - + OPTS.num_rw_ports = 1 OPTS.num_r_ports = 1 OPTS.num_w_ports = 1 @@ -42,7 +42,7 @@ class replica_pbitcell_test(openram_test): self.local_check(tx) globals.end_openram() - + # run the test from the command line if __name__ == "__main__": (OPTS, args) = globals.parse_args() diff --git a/compiler/tests/05_bitcell_array_1rw_1r_test.py b/compiler/tests/05_bitcell_array_1rw_1r_test.py index 0e7d5665..a1b7a3eb 100755 --- a/compiler/tests/05_bitcell_array_1rw_1r_test.py +++ b/compiler/tests/05_bitcell_array_1rw_1r_test.py @@ -22,16 +22,16 @@ class bitcell_array_1rw_1r_test(openram_test): def runTest(self): config_file = "{}/tests/configs/config".format(os.getenv("OPENRAM_HOME")) globals.init_openram(config_file) - + OPTS.num_rw_ports = 1 OPTS.num_r_ports = 1 OPTS.num_w_ports = 0 globals.setup_bitcell() - + debug.info(2, "Testing 4x4 array for cell_1rw_1r") a = factory.create(module_type="bitcell_array", cols=4, rows=4) self.local_check(a) - + globals.end_openram() # run the test from the command line diff --git a/compiler/tests/05_bitcell_array_test.py b/compiler/tests/05_bitcell_array_test.py index ed4b8298..9726a4ea 100755 --- a/compiler/tests/05_bitcell_array_test.py +++ b/compiler/tests/05_bitcell_array_test.py @@ -26,7 +26,7 @@ class array_test(openram_test): debug.info(2, "Testing 8x8 array for 6t_cell") a = factory.create(module_type="bitcell_array", cols=8, rows=8) self.local_check(a) - + globals.end_openram() # run the test from the command line diff --git a/compiler/tests/05_dummy_array_test.py b/compiler/tests/05_dummy_array_test.py index 97ec8db5..512b6ce0 100755 --- a/compiler/tests/05_dummy_array_test.py +++ b/compiler/tests/05_dummy_array_test.py @@ -1,7 +1,7 @@ #!/usr/bin/env python3 # See LICENSE for licensing information. # -# Copyright (c) 2016-2019 Regents of the University of California +# Copyright (c) 2016-2019 Regents of the University of California # All rights reserved. # import unittest @@ -26,7 +26,7 @@ class dummy_row_test(openram_test): debug.info(2, "Testing dummy column for 6t_cell") a = factory.create(module_type="dummy_array", rows=4, cols=1) self.local_check(a) - + globals.end_openram() # run the test from the command line diff --git a/compiler/tests/05_pbitcell_array_test.py b/compiler/tests/05_pbitcell_array_test.py index 6c5e4729..797f27b1 100755 --- a/compiler/tests/05_pbitcell_array_test.py +++ b/compiler/tests/05_pbitcell_array_test.py @@ -29,7 +29,7 @@ class pbitcell_array_test(openram_test): OPTS.num_w_ports = 2 a = factory.create(module_type="bitcell_array", cols=4, rows=4) self.local_check(a) - + debug.info(2, "Testing 4x4 array for multiport bitcell, with write ports at the edge of the bit cell") OPTS.bitcell = "pbitcell" OPTS.num_rw_ports = 2 @@ -37,7 +37,7 @@ class pbitcell_array_test(openram_test): OPTS.num_w_ports = 2 a = factory.create(module_type="bitcell_array", cols=4, rows=4) self.local_check(a) - + debug.info(2, "Testing 4x4 array for multiport bitcell, with read/write ports at the edge of the bit cell") OPTS.bitcell = "pbitcell" OPTS.num_rw_ports = 2 diff --git a/compiler/tests/06_hierarchical_decoder_1rw_1r_test.py b/compiler/tests/06_hierarchical_decoder_1rw_1r_test.py index 844160a6..d7e268f8 100755 --- a/compiler/tests/06_hierarchical_decoder_1rw_1r_test.py +++ b/compiler/tests/06_hierarchical_decoder_1rw_1r_test.py @@ -27,7 +27,7 @@ class hierarchical_decoder_1rw_1r_test(openram_test): OPTS.num_r_ports = 1 OPTS.num_w_ports = 0 globals.setup_bitcell() - + # Checks 2x4 and 2-input NAND decoder debug.info(1, "Testing 16 row sample for hierarchical_decoder") a = factory.create(module_type="hierarchical_decoder", num_outputs=16) @@ -57,9 +57,9 @@ class hierarchical_decoder_1rw_1r_test(openram_test): debug.info(1, "Testing 512 row sample for hierarchical_decoder") a = factory.create(module_type="hierarchical_decoder", num_outputs=512) self.local_check(a) - + globals.end_openram() - + # run the test from the command line if __name__ == "__main__": (OPTS, args) = globals.parse_args() diff --git a/compiler/tests/06_hierarchical_decoder_pbitcell_test.py b/compiler/tests/06_hierarchical_decoder_pbitcell_test.py index e1605067..efa05708 100755 --- a/compiler/tests/06_hierarchical_decoder_pbitcell_test.py +++ b/compiler/tests/06_hierarchical_decoder_pbitcell_test.py @@ -25,7 +25,7 @@ class hierarchical_decoder_pbitcell_test(openram_test): OPTS.num_w_ports = 0 OPTS.num_r_ports = 0 globals.setup_bitcell() - + factory.reset() debug.info(1, "Testing 16 row sample for hierarchical_decoder (multi-port case)") a = factory.create(module_type="hierarchical_decoder", num_outputs=16) diff --git a/compiler/tests/06_hierarchical_decoder_test.py b/compiler/tests/06_hierarchical_decoder_test.py index 027daf98..083e5f3f 100755 --- a/compiler/tests/06_hierarchical_decoder_test.py +++ b/compiler/tests/06_hierarchical_decoder_test.py @@ -26,7 +26,7 @@ class hierarchical_decoder_test(openram_test): OPTS.num_r_ports = 1 OPTS.num_w_ports = 0 globals.setup_bitcell() - + # Checks 2x4 and 2-input NAND decoder debug.info(1, "Testing 16 row sample for hierarchical_decoder") a = factory.create(module_type="hierarchical_decoder", num_outputs=16) @@ -61,9 +61,9 @@ class hierarchical_decoder_test(openram_test): debug.info(1, "Testing 4096 row sample for hierarchical_decoder") a = factory.create(module_type="hierarchical_decoder", num_outputs=4096) self.local_check(a) - + globals.end_openram() - + # run the test from the command line if __name__ == "__main__": (OPTS, args) = globals.parse_args() diff --git a/compiler/tests/06_hierarchical_predecode2x4_1rw_1r_test.py b/compiler/tests/06_hierarchical_predecode2x4_1rw_1r_test.py index a3ae2ed2..fbcf15f4 100755 --- a/compiler/tests/06_hierarchical_predecode2x4_1rw_1r_test.py +++ b/compiler/tests/06_hierarchical_predecode2x4_1rw_1r_test.py @@ -26,7 +26,7 @@ class hierarchical_predecode2x4_1rw_1r_test(openram_test): OPTS.num_r_ports = 1 OPTS.num_w_ports = 0 globals.setup_bitcell() - + debug.info(1, "Testing sample for hierarchy_predecode2x4") a = factory.create(module_type="hierarchical_predecode2x4") self.local_check(a) diff --git a/compiler/tests/06_hierarchical_predecode2x4_pbitcell_test.py b/compiler/tests/06_hierarchical_predecode2x4_pbitcell_test.py index 0f70ddb1..f8825c23 100755 --- a/compiler/tests/06_hierarchical_predecode2x4_pbitcell_test.py +++ b/compiler/tests/06_hierarchical_predecode2x4_pbitcell_test.py @@ -26,7 +26,7 @@ class hierarchical_predecode2x4_pbitcell_test(openram_test): OPTS.num_w_ports = 0 OPTS.num_r_ports = 0 globals.setup_bitcell() - + debug.info(1, "Testing sample for hierarchy_predecode2x4 (multi-port case)") a = factory.create(module_type="hierarchical_predecode2x4") self.local_check(a) diff --git a/compiler/tests/06_hierarchical_predecode3x8_1rw_1r_test.py b/compiler/tests/06_hierarchical_predecode3x8_1rw_1r_test.py index c0653243..2e7361a8 100755 --- a/compiler/tests/06_hierarchical_predecode3x8_1rw_1r_test.py +++ b/compiler/tests/06_hierarchical_predecode3x8_1rw_1r_test.py @@ -27,7 +27,7 @@ class hierarchical_predecode3x8_1rw_1r_test(openram_test): OPTS.num_r_ports = 1 OPTS.num_w_ports = 0 globals.setup_bitcell() - + debug.info(1, "Testing sample for hierarchy_predecode3x8") a = factory.create(module_type="hierarchical_predecode3x8") self.local_check(a) diff --git a/compiler/tests/06_hierarchical_predecode3x8_pbitcell_test.py b/compiler/tests/06_hierarchical_predecode3x8_pbitcell_test.py index 9170d5c0..87f845ae 100755 --- a/compiler/tests/06_hierarchical_predecode3x8_pbitcell_test.py +++ b/compiler/tests/06_hierarchical_predecode3x8_pbitcell_test.py @@ -26,7 +26,7 @@ class hierarchical_predecode3x8_pbitcell_test(openram_test): OPTS.num_w_ports = 0 OPTS.num_r_ports = 0 globals.setup_bitcell() - + debug.info(1, "Testing sample for hierarchy_predecode3x8 (multi-port case)") a = factory.create(module_type="hierarchical_predecode3x8") self.local_check(a) diff --git a/compiler/tests/07_column_mux_array_1rw_1r_test.py b/compiler/tests/07_column_mux_array_1rw_1r_test.py index 10c96092..5e23d7ce 100755 --- a/compiler/tests/07_column_mux_array_1rw_1r_test.py +++ b/compiler/tests/07_column_mux_array_1rw_1r_test.py @@ -25,7 +25,7 @@ class column_mux_test(openram_test): OPTS.num_r_ports = 1 OPTS.num_w_ports = 0 globals.setup_bitcell() - + debug.info(1, "Testing sample for 2-way column_mux_array port 0") a = factory.create(module_type="column_mux_array", columns=8, word_size=4, bitcell_bl="bl0", bitcell_br="br0") self.local_check(a) @@ -49,7 +49,7 @@ class column_mux_test(openram_test): debug.info(1, "Testing sample for 8-way column_mux_array port 1") a = factory.create(module_type="column_mux_array", columns=16, word_size=2, bitcell_bl="bl1", bitcell_br="br1") self.local_check(a) - + globals.end_openram() diff --git a/compiler/tests/08_precharge_array_1rw_1r_test.py b/compiler/tests/08_precharge_array_1rw_1r_test.py index c5efb59b..d76e0ee7 100755 --- a/compiler/tests/08_precharge_array_1rw_1r_test.py +++ b/compiler/tests/08_precharge_array_1rw_1r_test.py @@ -20,7 +20,7 @@ class precharge_1rw_1r_test(openram_test): def runTest(self): config_file = "{}/tests/configs/config".format(os.getenv("OPENRAM_HOME")) globals.init_openram(config_file) - + # check precharge array in multi-port OPTS.num_rw_ports = 1 OPTS.num_r_ports = 1 @@ -35,7 +35,7 @@ class precharge_1rw_1r_test(openram_test): debug.info(2, "Checking 3 column precharge array for 1RW/1R bitcell (port 1)") pc = factory.create(module_type="precharge_array", columns=3, bitcell_bl="bl0", bitcell_br="br0", column_offset=1) self.local_check(pc) - + globals.end_openram() # run the test from the command line diff --git a/compiler/tests/09_sense_amp_array_spare_cols_test.py b/compiler/tests/09_sense_amp_array_spare_cols_test.py index d8da1dc5..052aea1e 100755 --- a/compiler/tests/09_sense_amp_array_spare_cols_test.py +++ b/compiler/tests/09_sense_amp_array_spare_cols_test.py @@ -29,7 +29,7 @@ class sense_amp_array_spare_cols_test(openram_test): debug.info(2, "Testing sense_amp_array for word_size=4, words_per_row=4 and num_spare_cols=2") a = factory.create(module_type="sense_amp_array", word_size=4, words_per_row=4, num_spare_cols=2) self.local_check(a) - + # check sense amp array for multi-port OPTS.bitcell = "pbitcell" OPTS.num_rw_ports = 1 @@ -44,9 +44,9 @@ class sense_amp_array_spare_cols_test(openram_test): debug.info(2, "Testing sense_amp_array for word_size=4, words_per_row=4, num_spare_cols=3 (multi-port case)") a = factory.create(module_type="sense_amp_array", word_size=4, words_per_row=4, num_spare_cols=3) self.local_check(a) - + globals.end_openram() - + # run the test from the command line if __name__ == "__main__": (OPTS, args) = globals.parse_args() diff --git a/compiler/tests/10_write_driver_array_spare_cols_test.py b/compiler/tests/10_write_driver_array_spare_cols_test.py index 8b1256d0..fde478ee 100755 --- a/compiler/tests/10_write_driver_array_spare_cols_test.py +++ b/compiler/tests/10_write_driver_array_spare_cols_test.py @@ -29,7 +29,7 @@ class write_driver_array_spare_cols_test(openram_test): debug.info(2, "Testing write_driver_array for columns=16, word_size=8 and num_spare_cols=3") a = factory.create(module_type="write_driver_array", columns=16, word_size=8, num_spare_cols=3) self.local_check(a) - + # check write driver array for multi-port OPTS.bitcell = "pbitcell" OPTS.num_rw_ports = 1 @@ -44,7 +44,7 @@ class write_driver_array_spare_cols_test(openram_test): debug.info(2, "Testing write_driver_array for columns=16, word_size=8 (multi-port case and num_spare_cols=3") a = factory.create(module_type="write_driver_array", columns=16, word_size=8, num_spare_cols=3) self.local_check(a) - + globals.end_openram() # run the test from the command line diff --git a/compiler/tests/10_write_mask_and_array_1rw_1r_test.py b/compiler/tests/10_write_mask_and_array_1rw_1r_test.py index 73988db9..1331747d 100755 --- a/compiler/tests/10_write_mask_and_array_1rw_1r_test.py +++ b/compiler/tests/10_write_mask_and_array_1rw_1r_test.py @@ -27,7 +27,7 @@ class write_mask_and_array_test(openram_test): OPTS.num_r_ports = 1 OPTS.num_w_ports = 0 globals.setup_bitcell() - + debug.info(2, "Testing write_mask_and_array for columns=8, word_size=8, write_size=4") a = factory.create(module_type="write_mask_and_array", columns=8, word_size=8, write_size=4) self.local_check(a) diff --git a/compiler/tests/12_tri_gate_array_test.py b/compiler/tests/12_tri_gate_array_test.py index 813feda0..24c00ecb 100755 --- a/compiler/tests/12_tri_gate_array_test.py +++ b/compiler/tests/12_tri_gate_array_test.py @@ -24,13 +24,13 @@ class tri_gate_array_test(openram_test): debug.info(1, "Testing tri_gate_array for columns=8, word_size=8") a = factory.create(module_type="tri_gate_array", columns=8, word_size=8) self.local_check(a) - + debug.info(1, "Testing tri_gate_array for columns=16, word_size=8") a = factory.create(module_type="tri_gate_array", columns=16, word_size=8) self.local_check(a) - + globals.end_openram() - + # run the test from the command line if __name__ == "__main__": (OPTS, args) = globals.parse_args() diff --git a/compiler/tests/13_delay_chain_test.py b/compiler/tests/13_delay_chain_test.py index 4b893a8a..6930a077 100755 --- a/compiler/tests/13_delay_chain_test.py +++ b/compiler/tests/13_delay_chain_test.py @@ -26,7 +26,7 @@ class delay_chain_test(openram_test): self.local_check(a) globals.end_openram() - + # run the test from the command line if __name__ == "__main__": (OPTS, args) = globals.parse_args() diff --git a/compiler/tests/14_replica_bitcell_array_1rw_1r_test.py b/compiler/tests/14_replica_bitcell_array_1rw_1r_test.py index 65bc7848..54181058 100755 --- a/compiler/tests/14_replica_bitcell_array_1rw_1r_test.py +++ b/compiler/tests/14_replica_bitcell_array_1rw_1r_test.py @@ -23,7 +23,7 @@ class replica_bitcell_array_1rw_1r_test(openram_test): OPTS.num_r_ports = 1 OPTS.num_w_ports = 0 globals.setup_bitcell() - + debug.info(2, "Testing 4x4 non-replica array for cell_1rw_1r") a = factory.create(module_type="replica_bitcell_array", cols=4, @@ -38,7 +38,7 @@ class replica_bitcell_array_1rw_1r_test(openram_test): rbl=[1, 1], left_rbl=[0]) self.local_check(a) - + debug.info(2, "Testing 4x4 array left and right replica for cell_1rw_1r") a = factory.create(module_type="replica_bitcell_array", cols=4, @@ -48,7 +48,7 @@ class replica_bitcell_array_1rw_1r_test(openram_test): right_rbl=[1]) self.local_check(a) - + # Sky 130 has restrictions on the symmetries if OPTS.tech_name != "sky130": debug.info(2, "Testing 4x4 array right only replica for cell_1rw_1r") diff --git a/compiler/tests/14_replica_bitcell_array_test.py b/compiler/tests/14_replica_bitcell_array_test.py index 22b3a926..d9cf7ac6 100755 --- a/compiler/tests/14_replica_bitcell_array_test.py +++ b/compiler/tests/14_replica_bitcell_array_test.py @@ -1,7 +1,7 @@ #!/usr/bin/env python3 # See LICENSE for licensing information. # -# Copyright (c) 2016-2019 Regents of the University of California +# Copyright (c) 2016-2019 Regents of the University of California # All rights reserved. # import unittest @@ -27,7 +27,7 @@ class replica_bitcell_array_test(openram_test): debug.info(2, "Testing 4x4 array for bitcell") a = factory.create(module_type="replica_bitcell_array", cols=4, rows=4, rbl=[1, 0]) self.local_check(a) - + globals.end_openram() # run the test from the command line diff --git a/compiler/tests/14_replica_column_1rw_1r_test.py b/compiler/tests/14_replica_column_1rw_1r_test.py index 335666d7..f98543a3 100755 --- a/compiler/tests/14_replica_column_1rw_1r_test.py +++ b/compiler/tests/14_replica_column_1rw_1r_test.py @@ -1,7 +1,7 @@ #!/usr/bin/env python3 # See LICENSE for licensing information. # -# Copyright (c) 2016-2019 Regents of the University of California +# Copyright (c) 2016-2019 Regents of the University of California # All rights reserved. # import unittest @@ -31,11 +31,11 @@ class replica_column_test(openram_test): debug.info(2, "Testing replica column for 6t_cell") a = factory.create(module_type="replica_column", rows=4, rbl=[1, 1], replica_bit=6) self.local_check(a) - + debug.info(2, "Testing replica column for 6t_cell") a = factory.create(module_type="replica_column", rows=4, rbl=[2, 0], replica_bit=2) self.local_check(a) - + globals.end_openram() # run the test from the command line diff --git a/compiler/tests/14_replica_column_test.py b/compiler/tests/14_replica_column_test.py index 5cc620cb..8ac5eea9 100755 --- a/compiler/tests/14_replica_column_test.py +++ b/compiler/tests/14_replica_column_test.py @@ -1,7 +1,7 @@ #!/usr/bin/env python3 # See LICENSE for licensing information. # -# Copyright (c) 2016-2019 Regents of the University of California +# Copyright (c) 2016-2019 Regents of the University of California # All rights reserved. # import unittest @@ -28,12 +28,12 @@ class replica_column_test(openram_test): globals.setup_bitcell() a = factory.create(module_type="replica_column", rows=4, rbl=[1, 1], replica_bit=6) self.local_check(a) - + debug.info(2, "Testing replica column for cell_1rw_1r") globals.setup_bitcell() a = factory.create(module_type="replica_column", rows=4, rbl=[2, 0], replica_bit=2) self.local_check(a) - + globals.end_openram() # run the test from the command line diff --git a/compiler/tests/15_global_bitcell_array_1rw_1r_test.py b/compiler/tests/15_global_bitcell_array_1rw_1r_test.py index dd17d82e..15fc4821 100755 --- a/compiler/tests/15_global_bitcell_array_1rw_1r_test.py +++ b/compiler/tests/15_global_bitcell_array_1rw_1r_test.py @@ -34,7 +34,7 @@ class global_bitcell_array_test(openram_test): # debug.info(2, "Testing 4x4 local bitcell array for 6t_cell with replica column") # a = factory.create(module_type="local_bitcell_array", cols=4, left_rbl=1, rows=4, ports=[0]) # self.local_check(a) - + globals.end_openram() diff --git a/compiler/tests/15_global_bitcell_array_test.py b/compiler/tests/15_global_bitcell_array_test.py index ed7e282a..e53e98ee 100755 --- a/compiler/tests/15_global_bitcell_array_test.py +++ b/compiler/tests/15_global_bitcell_array_test.py @@ -29,7 +29,7 @@ class global_bitcell_array_test(openram_test): debug.info(2, "Testing 2 x 4x4 global bitcell array for 6t_cell") a = factory.create(module_type="global_bitcell_array", cols=[10, 6], rows=4) self.local_check(a) - + globals.end_openram() diff --git a/compiler/tests/15_local_bitcell_array_1rw_1r_test.py b/compiler/tests/15_local_bitcell_array_1rw_1r_test.py index 01a5c8ee..4d3469b3 100755 --- a/compiler/tests/15_local_bitcell_array_1rw_1r_test.py +++ b/compiler/tests/15_local_bitcell_array_1rw_1r_test.py @@ -34,7 +34,7 @@ class local_bitcell_array_1rw_1r_test(openram_test): debug.info(2, "Testing 4x4 local bitcell array for cell_1rw_1r with replica column") a = factory.create(module_type="local_bitcell_array", cols=4, rows=4, rbl=[1, 1], right_rbl=[1]) self.local_check(a) - + debug.info(2, "Testing 4x4 local bitcell array for cell_1rw_1r with replica column") a = factory.create(module_type="local_bitcell_array", cols=4, rows=4, rbl=[1, 1], left_rbl=[0]) self.local_check(a) diff --git a/compiler/tests/16_control_logic_multiport_test.py b/compiler/tests/16_control_logic_multiport_test.py index 919e2335..a660ff55 100755 --- a/compiler/tests/16_control_logic_multiport_test.py +++ b/compiler/tests/16_control_logic_multiport_test.py @@ -37,13 +37,13 @@ class control_logic_test(openram_test): debug.info(1, "Testing sample for control_logic for multiport, only write control logic") a = factory.create(module_type="control_logic", num_rows=128, words_per_row=1, word_size=8, port_type="rw") self.local_check(a) - + # OPTS.num_rw_ports = 0 # OPTS.num_w_ports = 1 debug.info(1, "Testing sample for control_logic for multiport, only write control logic") a = factory.create(module_type="control_logic", num_rows=128, words_per_row=1, word_size=8, port_type="w") self.local_check(a) - + # OPTS.num_w_ports = 0 # OPTS.num_r_ports = 1 debug.info(1, "Testing sample for control_logic for multiport, only read control logic") @@ -51,7 +51,7 @@ class control_logic_test(openram_test): self.local_check(a) globals.end_openram() - + # run the test from the command line if __name__ == "__main__": (OPTS, args) = globals.parse_args() diff --git a/compiler/tests/16_control_logic_r_test.py b/compiler/tests/16_control_logic_r_test.py index b695f9c9..95d10a2d 100755 --- a/compiler/tests/16_control_logic_r_test.py +++ b/compiler/tests/16_control_logic_r_test.py @@ -27,7 +27,7 @@ class control_logic_test(openram_test): self.local_check(a) globals.end_openram() - + # run the test from the command line if __name__ == "__main__": (OPTS, args) = globals.parse_args() diff --git a/compiler/tests/16_control_logic_rw_test.py b/compiler/tests/16_control_logic_rw_test.py index 8d12085f..a77f55b8 100755 --- a/compiler/tests/16_control_logic_rw_test.py +++ b/compiler/tests/16_control_logic_rw_test.py @@ -25,9 +25,9 @@ class control_logic_test(openram_test): debug.info(1, "Testing sample for control_logic_rw") a = factory.create(module_type="control_logic", num_rows=128, words_per_row=1, word_size=32) self.local_check(a) - + globals.end_openram() - + # run the test from the command line if __name__ == "__main__": (OPTS, args) = globals.parse_args() diff --git a/compiler/tests/16_control_logic_w_test.py b/compiler/tests/16_control_logic_w_test.py index 8407d1e8..3bc9f545 100755 --- a/compiler/tests/16_control_logic_w_test.py +++ b/compiler/tests/16_control_logic_w_test.py @@ -26,7 +26,7 @@ class control_logic_test(openram_test): self.local_check(a) globals.end_openram() - + # run the test from the command line if __name__ == "__main__": (OPTS, args) = globals.parse_args() diff --git a/compiler/tests/18_port_address_1rw_1r_test.py b/compiler/tests/18_port_address_1rw_1r_test.py index 42a46614..3b8da0b7 100755 --- a/compiler/tests/18_port_address_1rw_1r_test.py +++ b/compiler/tests/18_port_address_1rw_1r_test.py @@ -25,7 +25,7 @@ class port_address_1rw_1r_test(openram_test): OPTS.num_r_ports = 1 OPTS.num_w_ports = 0 globals.setup_bitcell() - + debug.info(1, "Port address 16 rows") a = factory.create("port_address", cols=16, rows=16, port=0) self.local_check(a) @@ -33,9 +33,9 @@ class port_address_1rw_1r_test(openram_test): debug.info(1, "Port address 256 rows") a = factory.create("port_address", cols=256, rows=256, port=1) self.local_check(a) - + globals.end_openram() - + # run the test from the command line if __name__ == "__main__": (OPTS, args) = globals.parse_args() diff --git a/compiler/tests/18_port_address_test.py b/compiler/tests/18_port_address_test.py index 94feedb2..a3cb9bd9 100755 --- a/compiler/tests/18_port_address_test.py +++ b/compiler/tests/18_port_address_test.py @@ -23,13 +23,13 @@ class port_address_test(openram_test): debug.info(1, "Port address 16 rows") a = factory.create("port_address", cols=16, rows=16, port=0) self.local_check(a) - + debug.info(1, "Port address 512 rows") a = factory.create("port_address", cols=256, rows=512, port=0) self.local_check(a) globals.end_openram() - + # run the test from the command line if __name__ == "__main__": (OPTS, args) = globals.parse_args() diff --git a/compiler/tests/18_port_data_1rw_1r_test.py b/compiler/tests/18_port_data_1rw_1r_test.py index 3a7687d6..e8205c1a 100755 --- a/compiler/tests/18_port_data_1rw_1r_test.py +++ b/compiler/tests/18_port_data_1rw_1r_test.py @@ -25,7 +25,7 @@ class port_data_1rw_1r_test(openram_test): OPTS.num_r_ports = 1 OPTS.num_w_ports = 0 globals.setup_bitcell() - + c = sram_config(word_size=4, num_words=16) @@ -68,9 +68,9 @@ class port_data_1rw_1r_test(openram_test): self.local_check(a) a = factory.create("port_data", sram_config=c, port=1) self.local_check(a) - + globals.end_openram() - + # run the test from the command line if __name__ == "__main__": (OPTS, args) = globals.parse_args() diff --git a/compiler/tests/18_port_data_spare_cols_test.py b/compiler/tests/18_port_data_spare_cols_test.py index 8c08ad0a..953199d6 100755 --- a/compiler/tests/18_port_data_spare_cols_test.py +++ b/compiler/tests/18_port_data_spare_cols_test.py @@ -57,12 +57,12 @@ class port_data_spare_cols_test(openram_test): debug.info(1, "Eight way column mux") a = factory.create("port_data", sram_config=c, port=0) self.local_check(a) - + OPTS.bitcell = "bitcell_1w_1r" OPTS.num_rw_ports = 0 OPTS.num_r_ports = 1 OPTS.num_w_ports = 1 - + c.num_words=16 c.words_per_row=1 factory.reset() @@ -72,7 +72,7 @@ class port_data_spare_cols_test(openram_test): self.local_check(a) a = factory.create("port_data", sram_config=c, port=1) self.local_check(a) - + c.num_words=32 c.words_per_row=2 factory.reset() @@ -103,9 +103,9 @@ class port_data_spare_cols_test(openram_test): self.local_check(a) a = factory.create("port_data", sram_config=c, port=1) self.local_check(a) - + globals.end_openram() - + # run the test from the command line if __name__ == "__main__": (OPTS, args) = globals.parse_args() diff --git a/compiler/tests/18_port_data_test.py b/compiler/tests/18_port_data_test.py index 57e19846..ae305cea 100755 --- a/compiler/tests/18_port_data_test.py +++ b/compiler/tests/18_port_data_test.py @@ -54,9 +54,9 @@ class port_data_test(openram_test): debug.info(1, "Eight way column mux") a = factory.create("port_data", sram_config=c, port=0) self.local_check(a) - + globals.end_openram() - + # run the test from the command line if __name__ == "__main__": (OPTS, args) = globals.parse_args() diff --git a/compiler/tests/18_port_data_wmask_1rw_1r_test.py b/compiler/tests/18_port_data_wmask_1rw_1r_test.py index c4e422d2..1f56bd62 100755 --- a/compiler/tests/18_port_data_wmask_1rw_1r_test.py +++ b/compiler/tests/18_port_data_wmask_1rw_1r_test.py @@ -66,7 +66,7 @@ class port_data_wmask_1rw_1r_test(openram_test): OPTS.num_r_ports = 1 OPTS.num_w_ports = 1 globals.setup_bitcell() - + c.num_words = 16 c.words_per_row = 1 factory.reset() diff --git a/compiler/tests/18_port_data_wmask_test.py b/compiler/tests/18_port_data_wmask_test.py index b01460ed..a7fecb8a 100755 --- a/compiler/tests/18_port_data_wmask_test.py +++ b/compiler/tests/18_port_data_wmask_test.py @@ -61,7 +61,7 @@ class port_data_wmask_test(openram_test): OPTS.num_r_ports = 1 OPTS.num_w_ports = 1 globals.setup_bitcell() - + c.num_words = 16 c.words_per_row = 1 factory.reset() diff --git a/compiler/tests/19_multi_bank_test.py b/compiler/tests/19_multi_bank_test.py index f4c622c7..c2782954 100755 --- a/compiler/tests/19_multi_bank_test.py +++ b/compiler/tests/19_multi_bank_test.py @@ -58,9 +58,9 @@ class multi_bank_test(openram_test): debug.info(1, "Eight way column mux") a = factory.create("bank", sram_config=c) self.local_check(a) - + globals.end_openram() - + # run the test from the command line if __name__ == "__main__": (OPTS, args) = globals.parse_args() diff --git a/compiler/tests/19_pmulti_bank_test.py b/compiler/tests/19_pmulti_bank_test.py index 7c3da444..0e736973 100755 --- a/compiler/tests/19_pmulti_bank_test.py +++ b/compiler/tests/19_pmulti_bank_test.py @@ -63,9 +63,9 @@ class multi_bank_test(openram_test): debug.info(1, "Eight way column mux") a = factory.create("bank", sram_config=c) self.local_check(a) - + globals.end_openram() - + # run the test from the command line if __name__ == "__main__": (OPTS, args) = globals.parse_args() diff --git a/compiler/tests/19_psingle_bank_test.py b/compiler/tests/19_psingle_bank_test.py index 8c6ddb12..d666155d 100755 --- a/compiler/tests/19_psingle_bank_test.py +++ b/compiler/tests/19_psingle_bank_test.py @@ -22,25 +22,25 @@ class psingle_bank_test(openram_test): config_file = "{}/tests/configs/config".format(os.getenv("OPENRAM_HOME")) globals.init_openram(config_file) from sram_config import sram_config - + OPTS.bitcell = "pbitcell" OPTS.replica_bitcell="replica_pbitcell" OPTS.dummy_bitcell="dummy_pbitcell" - + OPTS.num_rw_ports = 1 OPTS.num_w_ports = 0 OPTS.num_r_ports = 0 - + c = sram_config(word_size=4, num_words=16) - + c.words_per_row=1 factory.reset() c.recompute_sizes() debug.info(1, "No column mux") a = factory.create(module_type="bank", sram_config=c) self.local_check(a) - + c.num_words=32 c.words_per_row=2 factory.reset() @@ -48,7 +48,7 @@ class psingle_bank_test(openram_test): debug.info(1, "Two way column mux") a = factory.create(module_type="bank", sram_config=c) self.local_check(a) - + c.num_words=64 c.words_per_row=4 factory.reset() @@ -56,7 +56,7 @@ class psingle_bank_test(openram_test): debug.info(1, "Four way column mux") a = factory.create(module_type="bank", sram_config=c) self.local_check(a) - + c.word_size=2 c.num_words=128 c.words_per_row=8 @@ -65,9 +65,9 @@ class psingle_bank_test(openram_test): debug.info(1, "Four way column mux") a = factory.create(module_type="bank", sram_config=c) self.local_check(a) - + globals.end_openram() - + # run the test from the command line if __name__ == "__main__": (OPTS, args) = globals.parse_args() diff --git a/compiler/tests/19_single_bank_1rw_1r_test.py b/compiler/tests/19_single_bank_1rw_1r_test.py index b60e7c98..2390482a 100755 --- a/compiler/tests/19_single_bank_1rw_1r_test.py +++ b/compiler/tests/19_single_bank_1rw_1r_test.py @@ -27,7 +27,7 @@ class single_bank_1rw_1r_test(openram_test): OPTS.num_r_ports = 1 OPTS.num_w_ports = 0 globals.setup_bitcell() - + c = sram_config(word_size=4, num_words=16) @@ -62,9 +62,9 @@ class single_bank_1rw_1r_test(openram_test): debug.info(1, "Eight way column mux") a = factory.create(module_type="bank", sram_config=c) self.local_check(a) - + globals.end_openram() - + # run the test from the command line if __name__ == "__main__": (OPTS, args) = globals.parse_args() diff --git a/compiler/tests/19_single_bank_1w_1r_test.py b/compiler/tests/19_single_bank_1w_1r_test.py index e3a2d886..02846cfd 100755 --- a/compiler/tests/19_single_bank_1w_1r_test.py +++ b/compiler/tests/19_single_bank_1w_1r_test.py @@ -26,7 +26,7 @@ class single_bank_1w_1r_test(openram_test): OPTS.num_r_ports = 1 OPTS.num_w_ports = 1 globals.setup_bitcell() - + c = sram_config(word_size=4, num_words=16) @@ -61,9 +61,9 @@ class single_bank_1w_1r_test(openram_test): debug.info(1, "Eight way column mux") a = factory.create(module_type="bank", sram_config=c) self.local_check(a) - + globals.end_openram() - + # run the test from the command line if __name__ == "__main__": (OPTS, args) = globals.parse_args() diff --git a/compiler/tests/19_single_bank_global_bitline.py b/compiler/tests/19_single_bank_global_bitline.py index ffaea6e6..60568fda 100755 --- a/compiler/tests/19_single_bank_global_bitline.py +++ b/compiler/tests/19_single_bank_global_bitline.py @@ -63,9 +63,9 @@ class single_bank_1rw_1r_test(openram_test): debug.info(1, "Eight way column mux") a = factory.create(module_type="bank", sram_config=c) self.local_check(a) - + globals.end_openram() - + # run the test from the command line if __name__ == "__main__": (OPTS, args) = globals.parse_args() diff --git a/compiler/tests/19_single_bank_spare_cols_test.py b/compiler/tests/19_single_bank_spare_cols_test.py index 52eeea52..78c8f497 100755 --- a/compiler/tests/19_single_bank_spare_cols_test.py +++ b/compiler/tests/19_single_bank_spare_cols_test.py @@ -57,9 +57,9 @@ class single_bank_spare_cols_test(openram_test): debug.info(1, "Eight way column mux") a = factory.create("bank", sram_config=c) self.local_check(a) - + globals.end_openram() - + # run the test from the command line if __name__ == "__main__": (OPTS, args) = globals.parse_args() diff --git a/compiler/tests/19_single_bank_test.py b/compiler/tests/19_single_bank_test.py index 6cff481b..e7d4c328 100755 --- a/compiler/tests/19_single_bank_test.py +++ b/compiler/tests/19_single_bank_test.py @@ -56,9 +56,9 @@ class single_bank_test(openram_test): debug.info(1, "Eight way column mux") a = factory.create("bank", sram_config=c) self.local_check(a) - + globals.end_openram() - + # run the test from the command line if __name__ == "__main__": (OPTS, args) = globals.parse_args() diff --git a/compiler/tests/19_single_bank_wmask_1rw_1r_test.py b/compiler/tests/19_single_bank_wmask_1rw_1r_test.py index ddb97905..0137ad61 100755 --- a/compiler/tests/19_single_bank_wmask_1rw_1r_test.py +++ b/compiler/tests/19_single_bank_wmask_1rw_1r_test.py @@ -62,9 +62,9 @@ class single_bank_wmask_1rw_1r_test(openram_test): debug.info(1, "Eight way column mux") a = factory.create("bank", sram_config=c) self.local_check(a) - + globals.end_openram() - + # run the test from the command line if __name__ == "__main__": (OPTS, args) = globals.parse_args() diff --git a/compiler/tests/19_single_bank_wmask_test.py b/compiler/tests/19_single_bank_wmask_test.py index 50567ebb..e36bd2df 100755 --- a/compiler/tests/19_single_bank_wmask_test.py +++ b/compiler/tests/19_single_bank_wmask_test.py @@ -58,9 +58,9 @@ class single_bank_wmask_test(openram_test): debug.info(1, "Eight way column mux") a = factory.create("bank", sram_config=c) self.local_check(a) - + globals.end_openram() - + # run the test from the command line if __name__ == "__main__": (OPTS, args) = globals.parse_args() diff --git a/compiler/tests/20_psram_1bank_2mux_1rw_1w_test.py b/compiler/tests/20_psram_1bank_2mux_1rw_1w_test.py index f521851b..5d99ea06 100755 --- a/compiler/tests/20_psram_1bank_2mux_1rw_1w_test.py +++ b/compiler/tests/20_psram_1bank_2mux_1rw_1w_test.py @@ -28,7 +28,7 @@ class psram_1bank_2mux_1rw_1w_test(openram_test): OPTS.num_w_ports = 1 OPTS.num_r_ports = 0 globals.setup_bitcell() - + c = sram_config(word_size=4, num_words=32, num_banks=1) @@ -46,9 +46,9 @@ class psram_1bank_2mux_1rw_1w_test(openram_test): c.num_banks)) a = factory.create(module_type="sram", sram_config=c) self.local_check(a, final_verification=True) - + globals.end_openram() - + # run the test from the command line if __name__ == "__main__": (OPTS, args) = globals.parse_args() diff --git a/compiler/tests/20_psram_1bank_2mux_1w_1r_test.py b/compiler/tests/20_psram_1bank_2mux_1w_1r_test.py index 35912823..49b84cbe 100755 --- a/compiler/tests/20_psram_1bank_2mux_1w_1r_test.py +++ b/compiler/tests/20_psram_1bank_2mux_1w_1r_test.py @@ -28,7 +28,7 @@ class psram_1bank_2mux_1w_1r_test(openram_test): OPTS.num_w_ports = 1 OPTS.num_r_ports = 1 globals.setup_bitcell() - + c = sram_config(word_size=4, num_words=32, num_banks=1) @@ -44,9 +44,9 @@ class psram_1bank_2mux_1w_1r_test(openram_test): c.num_banks)) a = factory.create(module_type="sram", sram_config=c) self.local_check(a, final_verification=True) - + globals.end_openram() - + # run the test from the command line if __name__ == "__main__": (OPTS, args) = globals.parse_args() diff --git a/compiler/tests/20_psram_1bank_2mux_test.py b/compiler/tests/20_psram_1bank_2mux_test.py index 92403cd1..421b08be 100755 --- a/compiler/tests/20_psram_1bank_2mux_test.py +++ b/compiler/tests/20_psram_1bank_2mux_test.py @@ -22,13 +22,13 @@ class psram_1bank_2mux_test(openram_test): config_file = "{}/tests/configs/config".format(os.getenv("OPENRAM_HOME")) globals.init_openram(config_file) from sram_config import sram_config - + OPTS.bitcell = "pbitcell" OPTS.num_rw_ports = 1 OPTS.num_w_ports = 0 OPTS.num_r_ports = 0 globals.setup_bitcell() - + c = sram_config(word_size=4, num_words=32, num_banks=1) @@ -46,9 +46,9 @@ class psram_1bank_2mux_test(openram_test): c.num_banks)) a = factory.create(module_type="sram", sram_config=c) self.local_check(a, final_verification=True) - + globals.end_openram() - + # run the test from the command line if __name__ == "__main__": (OPTS, args) = globals.parse_args() diff --git a/compiler/tests/20_psram_1bank_4mux_1rw_1r_test.py b/compiler/tests/20_psram_1bank_4mux_1rw_1r_test.py index ecbd0863..519517e7 100755 --- a/compiler/tests/20_psram_1bank_4mux_1rw_1r_test.py +++ b/compiler/tests/20_psram_1bank_4mux_1rw_1r_test.py @@ -27,7 +27,7 @@ class psram_1bank_4mux_1rw_1r_test(openram_test): OPTS.num_w_ports = 0 OPTS.num_r_ports = 1 globals.setup_bitcell() - + c = sram_config(word_size=4, num_words=64, num_banks=1) @@ -45,9 +45,9 @@ class psram_1bank_4mux_1rw_1r_test(openram_test): c.num_banks)) a = factory.create(module_type="sram", sram_config=c) self.local_check(a, final_verification=True) - + globals.end_openram() - + # run the test from the command line if __name__ == "__main__": (OPTS, args) = globals.parse_args() diff --git a/compiler/tests/20_sram_1bank_2mux_1rw_1r_spare_cols_test.py b/compiler/tests/20_sram_1bank_2mux_1rw_1r_spare_cols_test.py index 6adb3e8e..fe8d42ab 100755 --- a/compiler/tests/20_sram_1bank_2mux_1rw_1r_spare_cols_test.py +++ b/compiler/tests/20_sram_1bank_2mux_1rw_1r_spare_cols_test.py @@ -21,12 +21,12 @@ class sram_1bank_2mux_1rw_1r_spare_cols_test(openram_test): config_file = "{}/tests/configs/config".format(os.getenv("OPENRAM_HOME")) globals.init_openram(config_file) from sram_config import sram_config - + OPTS.num_rw_ports = 1 OPTS.num_r_ports = 1 OPTS.num_w_ports = 0 globals.setup_bitcell() - + c = sram_config(word_size=4, num_words=32, num_spare_cols=3, @@ -48,7 +48,7 @@ class sram_1bank_2mux_1rw_1r_spare_cols_test(openram_test): self.local_check(a, final_verification=True) globals.end_openram() - + # run the test from the command line if __name__ == "__main__": (OPTS, args) = globals.parse_args() diff --git a/compiler/tests/20_sram_1bank_2mux_1rw_1r_test.py b/compiler/tests/20_sram_1bank_2mux_1rw_1r_test.py index 0a2b7d32..9d2dc853 100755 --- a/compiler/tests/20_sram_1bank_2mux_1rw_1r_test.py +++ b/compiler/tests/20_sram_1bank_2mux_1rw_1r_test.py @@ -21,12 +21,12 @@ class sram_1bank_2mux_1rw_1r_test(openram_test): config_file = "{}/tests/configs/config".format(os.getenv("OPENRAM_HOME")) globals.init_openram(config_file) from sram_config import sram_config - + OPTS.num_rw_ports = 1 OPTS.num_r_ports = 1 OPTS.num_w_ports = 0 globals.setup_bitcell() - + c = sram_config(word_size=4, num_words=32, num_banks=1) @@ -46,7 +46,7 @@ class sram_1bank_2mux_1rw_1r_test(openram_test): self.local_check(a, final_verification=True) globals.end_openram() - + # run the test from the command line if __name__ == "__main__": (OPTS, args) = globals.parse_args() diff --git a/compiler/tests/20_sram_1bank_2mux_1w_1r_spare_cols_test.py b/compiler/tests/20_sram_1bank_2mux_1w_1r_spare_cols_test.py index 987a297e..40c208ee 100755 --- a/compiler/tests/20_sram_1bank_2mux_1w_1r_spare_cols_test.py +++ b/compiler/tests/20_sram_1bank_2mux_1w_1r_spare_cols_test.py @@ -22,12 +22,12 @@ class sram_1bank_2mux_1w_1r_spare_cols_test(openram_test): config_file = "{}/tests/configs/config".format(os.getenv("OPENRAM_HOME")) globals.init_openram(config_file) from sram_config import sram_config - + OPTS.num_rw_ports = 0 OPTS.num_w_ports = 1 OPTS.num_r_ports = 1 globals.setup_bitcell() - + c = sram_config(word_size=4, num_words=32, num_spare_cols=3, @@ -47,9 +47,9 @@ class sram_1bank_2mux_1w_1r_spare_cols_test(openram_test): c.num_banks)) a = factory.create(module_type="sram", sram_config=c) self.local_check(a, final_verification=True) - + globals.end_openram() - + # run the test from the command line if __name__ == "__main__": (OPTS, args) = globals.parse_args() diff --git a/compiler/tests/20_sram_1bank_2mux_1w_1r_test.py b/compiler/tests/20_sram_1bank_2mux_1w_1r_test.py index 2c4e29e6..754ceed3 100755 --- a/compiler/tests/20_sram_1bank_2mux_1w_1r_test.py +++ b/compiler/tests/20_sram_1bank_2mux_1w_1r_test.py @@ -22,12 +22,12 @@ class psram_1bank_2mux_1w_1r_test(openram_test): config_file = "{}/tests/configs/config".format(os.getenv("OPENRAM_HOME")) globals.init_openram(config_file) from sram_config import sram_config - + OPTS.num_rw_ports = 0 OPTS.num_w_ports = 1 OPTS.num_r_ports = 1 globals.setup_bitcell() - + c = sram_config(word_size=4, num_words=32, num_banks=1) @@ -45,9 +45,9 @@ class psram_1bank_2mux_1w_1r_test(openram_test): c.num_banks)) a = factory.create(module_type="sram", sram_config=c) self.local_check(a, final_verification=True) - + globals.end_openram() - + # run the test from the command line if __name__ == "__main__": (OPTS, args) = globals.parse_args() diff --git a/compiler/tests/20_sram_1bank_2mux_global_test.py b/compiler/tests/20_sram_1bank_2mux_global_test.py index 4020dff9..cb8571da 100755 --- a/compiler/tests/20_sram_1bank_2mux_global_test.py +++ b/compiler/tests/20_sram_1bank_2mux_global_test.py @@ -44,7 +44,7 @@ class sram_1bank_2mux_global_test(openram_test): self.local_check(a, final_verification=True) globals.end_openram() - + # run the test from the command line if __name__ == "__main__": (OPTS, args) = globals.parse_args() diff --git a/compiler/tests/20_sram_1bank_2mux_test.py b/compiler/tests/20_sram_1bank_2mux_test.py index 582f5217..536ba683 100755 --- a/compiler/tests/20_sram_1bank_2mux_test.py +++ b/compiler/tests/20_sram_1bank_2mux_test.py @@ -39,9 +39,9 @@ class sram_1bank_2mux_test(openram_test): c.num_banks)) a = factory.create(module_type="sram", sram_config=c) self.local_check(a, final_verification=True) - + globals.end_openram() - + # run the test from the command line if __name__ == "__main__": (OPTS, args) = globals.parse_args() diff --git a/compiler/tests/20_sram_1bank_4mux_test.py b/compiler/tests/20_sram_1bank_4mux_test.py index e38ef7c4..e27fca71 100755 --- a/compiler/tests/20_sram_1bank_4mux_test.py +++ b/compiler/tests/20_sram_1bank_4mux_test.py @@ -41,7 +41,7 @@ class sram_1bank_4mux_test(openram_test): self.local_check(a, final_verification=True) globals.end_openram() - + # run the test from the command line if __name__ == "__main__": (OPTS, args) = globals.parse_args() diff --git a/compiler/tests/20_sram_1bank_8mux_1rw_1r_test.py b/compiler/tests/20_sram_1bank_8mux_1rw_1r_test.py index 1e4df34d..07be8e37 100755 --- a/compiler/tests/20_sram_1bank_8mux_1rw_1r_test.py +++ b/compiler/tests/20_sram_1bank_8mux_1rw_1r_test.py @@ -26,7 +26,7 @@ class sram_1bank_8mux_1rw_1r_test(openram_test): OPTS.num_r_ports = 1 OPTS.num_w_ports = 0 globals.setup_bitcell() - + c = sram_config(word_size=2, num_words=128, num_banks=1) @@ -46,7 +46,7 @@ class sram_1bank_8mux_1rw_1r_test(openram_test): self.local_check(a, final_verification=True) globals.end_openram() - + # run the test from the command line if __name__ == "__main__": (OPTS, args) = globals.parse_args() diff --git a/compiler/tests/20_sram_1bank_8mux_test.py b/compiler/tests/20_sram_1bank_8mux_test.py index dfdcd5b7..501fbe3d 100755 --- a/compiler/tests/20_sram_1bank_8mux_test.py +++ b/compiler/tests/20_sram_1bank_8mux_test.py @@ -41,7 +41,7 @@ class sram_1bank_8mux_test(openram_test): self.local_check(a, final_verification=True) globals.end_openram() - + # run the test from the command line if __name__ == "__main__": (OPTS, args) = globals.parse_args() diff --git a/compiler/tests/20_sram_1bank_nomux_1rw_1r_spare_cols_test.py b/compiler/tests/20_sram_1bank_nomux_1rw_1r_spare_cols_test.py index dbeca8aa..e68f2401 100755 --- a/compiler/tests/20_sram_1bank_nomux_1rw_1r_spare_cols_test.py +++ b/compiler/tests/20_sram_1bank_nomux_1rw_1r_spare_cols_test.py @@ -21,12 +21,12 @@ class sram_1bank_nomux_1rw_1r_spare_cols_test(openram_test): config_file = "{}/tests/configs/config".format(os.getenv("OPENRAM_HOME")) globals.init_openram(config_file) from sram_config import sram_config - + OPTS.num_rw_ports = 1 OPTS.num_r_ports = 1 OPTS.num_w_ports = 0 globals.setup_bitcell() - + c = sram_config(word_size=4, num_words=16, num_spare_cols=4, @@ -48,7 +48,7 @@ class sram_1bank_nomux_1rw_1r_spare_cols_test(openram_test): self.local_check(a, final_verification=True) globals.end_openram() - + # run the test from the command line if __name__ == "__main__": (OPTS, args) = globals.parse_args() diff --git a/compiler/tests/20_sram_1bank_nomux_1rw_1r_test.py b/compiler/tests/20_sram_1bank_nomux_1rw_1r_test.py index a516b4f0..95544297 100755 --- a/compiler/tests/20_sram_1bank_nomux_1rw_1r_test.py +++ b/compiler/tests/20_sram_1bank_nomux_1rw_1r_test.py @@ -21,12 +21,12 @@ class sram_1bank_nomux_1rw_1r_test(openram_test): config_file = "{}/tests/configs/config".format(os.getenv("OPENRAM_HOME")) globals.init_openram(config_file) from sram_config import sram_config - + OPTS.num_rw_ports = 1 OPTS.num_r_ports = 1 OPTS.num_w_ports = 0 globals.setup_bitcell() - + c = sram_config(word_size=4, num_words=16, num_banks=1) @@ -46,7 +46,7 @@ class sram_1bank_nomux_1rw_1r_test(openram_test): self.local_check(a, final_verification=True) globals.end_openram() - + # run the test from the command line if __name__ == "__main__": (OPTS, args) = globals.parse_args() diff --git a/compiler/tests/20_sram_1bank_nomux_test.py b/compiler/tests/20_sram_1bank_nomux_test.py index c79d8552..44d583b7 100755 --- a/compiler/tests/20_sram_1bank_nomux_test.py +++ b/compiler/tests/20_sram_1bank_nomux_test.py @@ -41,7 +41,7 @@ class sram_1bank_nomux_test(openram_test): self.local_check(a, final_verification=True) globals.end_openram() - + # run the test from the command line if __name__ == "__main__": (OPTS, args) = globals.parse_args() diff --git a/compiler/tests/20_sram_2bank_test.py b/compiler/tests/20_sram_2bank_test.py index 5fd4bf29..53f87eba 100755 --- a/compiler/tests/20_sram_2bank_test.py +++ b/compiler/tests/20_sram_2bank_test.py @@ -91,7 +91,7 @@ class sram_2bank_test(openram_test): self.local_check(a, final_verification=True) globals.end_openram() - + # run the test from the command line if __name__ == "__main__": (OPTS, args) = globals.parse_args() diff --git a/compiler/tests/21_hspice_delay_test.py b/compiler/tests/21_hspice_delay_test.py index a602f9d2..779118cf 100755 --- a/compiler/tests/21_hspice_delay_test.py +++ b/compiler/tests/21_hspice_delay_test.py @@ -23,7 +23,7 @@ class timing_sram_test(openram_test): OPTS.spice_name="hspice" OPTS.analytical_delay = False OPTS.netlist_only = True - + # This is a hack to reload the characterizer __init__ with the spice version from importlib import reload import characterizer @@ -44,7 +44,7 @@ class timing_sram_test(openram_test): s = factory.create(module_type="sram", sram_config=c) #import sys #sys.exit(1) - + tempspice = OPTS.openram_temp + "temp.sp" s.sp_write(tempspice) @@ -96,9 +96,9 @@ class timing_sram_test(openram_test): self.assertTrue(len(data.keys())==len(golden_data.keys())) self.assertTrue(self.check_golden_data(data,golden_data,0.25)) - + globals.end_openram() - + # run the test from the command line if __name__ == "__main__": (OPTS, args) = globals.parse_args() diff --git a/compiler/tests/21_hspice_setuphold_test.py b/compiler/tests/21_hspice_setuphold_test.py index 1844fd39..f07b70f1 100755 --- a/compiler/tests/21_hspice_setuphold_test.py +++ b/compiler/tests/21_hspice_setuphold_test.py @@ -23,7 +23,7 @@ class timing_setup_test(openram_test): OPTS.spice_name="hspice" OPTS.analytical_delay = False OPTS.netlist_only = True - + # This is a hack to reload the characterizer __init__ with the spice version from importlib import reload import characterizer @@ -32,7 +32,7 @@ class timing_setup_test(openram_test): import sram import tech slews = [tech.spice["rise_time"]*2] - + corner = (OPTS.process_corners[0], OPTS.supply_voltages[0], OPTS.temperatures[0]) sh = setup_hold(corner) data = sh.analyze(slews,slews) @@ -56,7 +56,7 @@ class timing_setup_test(openram_test): self.assertTrue(self.check_golden_data(data,golden_data,0.25)) globals.end_openram() - + # run the test from the command line if __name__ == "__main__": (OPTS, args) = globals.parse_args() diff --git a/compiler/tests/21_model_delay_test.py b/compiler/tests/21_model_delay_test.py index e21d658e..a570c3ed 100755 --- a/compiler/tests/21_model_delay_test.py +++ b/compiler/tests/21_model_delay_test.py @@ -18,13 +18,13 @@ import debug # @unittest.skip("SKIPPING 21_model_delay_test") class model_delay_test(openram_test): """ Compare the accuracy of the analytical model with a spice simulation. """ - + def runTest(self): config_file = "{}/tests/configs/config".format(os.getenv("OPENRAM_HOME")) globals.init_openram(config_file) OPTS.analytical_delay = False OPTS.netlist_only = True - + # This is a hack to reload the characterizer __init__ with the spice version from importlib import reload import characterizer @@ -52,35 +52,35 @@ class model_delay_test(openram_test): import tech loads = [tech.spice["dff_in_cap"]*4] slews = [tech.spice["rise_time"]*2] - + # Run a spice characterization spice_data, port_data = d.analyze(probe_address, probe_data, slews, loads) spice_data.update(port_data[0]) - + # Run analytical characterization model_data, port_data = d.analytical_delay(slews, loads) model_data.update(port_data[0]) - + # Only compare the delays spice_delays = {key:value for key, value in spice_data.items() if 'delay' in key} model_delays = {key:value for key, value in model_data.items() if 'delay' in key} debug.info(1,"Spice Delays={}".format(spice_delays)) debug.info(1,"Model Delays={}".format(model_delays)) - + if OPTS.tech_name == "freepdk45": error_tolerance = 0.25 elif OPTS.tech_name == "scn4m_subm": error_tolerance = 0.25 else: self.assertTrue(False) # other techs fail - + # Check if no too many or too few results self.assertTrue(len(spice_delays.keys())==len(model_delays.keys())) self.assertTrue(self.check_golden_data(spice_delays,model_delays,error_tolerance)) - + globals.end_openram() - + # run the test from the command line if __name__ == "__main__": (OPTS, args) = globals.parse_args() diff --git a/compiler/tests/21_ngspice_delay_extra_rows_test.py b/compiler/tests/21_ngspice_delay_extra_rows_test.py index 22812d52..43b64154 100755 --- a/compiler/tests/21_ngspice_delay_extra_rows_test.py +++ b/compiler/tests/21_ngspice_delay_extra_rows_test.py @@ -90,7 +90,7 @@ class timing_sram_test(openram_test): # Check if no too many or too few results self.assertTrue(len(data.keys())==len(golden_data.keys())) - + self.assertTrue(self.check_golden_data(data,golden_data,0.25)) globals.end_openram() diff --git a/compiler/tests/21_ngspice_delay_global_test.py b/compiler/tests/21_ngspice_delay_global_test.py index ac463883..d4cbfafa 100755 --- a/compiler/tests/21_ngspice_delay_global_test.py +++ b/compiler/tests/21_ngspice_delay_global_test.py @@ -97,7 +97,7 @@ class timing_sram_test(openram_test): # Check if no too many or too few results self.assertTrue(len(data.keys())==len(golden_data.keys())) - + self.assertTrue(self.check_golden_data(data,golden_data,0.25)) globals.end_openram() diff --git a/compiler/tests/21_ngspice_delay_test.py b/compiler/tests/21_ngspice_delay_test.py index 92b8eac0..81388ccd 100755 --- a/compiler/tests/21_ngspice_delay_test.py +++ b/compiler/tests/21_ngspice_delay_test.py @@ -89,7 +89,7 @@ class timing_sram_test(openram_test): # Check if no too many or too few results self.assertTrue(len(data.keys())==len(golden_data.keys())) - + self.assertTrue(self.check_golden_data(data,golden_data,0.25)) globals.end_openram() diff --git a/compiler/tests/21_ngspice_setuphold_test.py b/compiler/tests/21_ngspice_setuphold_test.py index 246bdff9..84ce882b 100755 --- a/compiler/tests/21_ngspice_setuphold_test.py +++ b/compiler/tests/21_ngspice_setuphold_test.py @@ -23,7 +23,7 @@ class timing_setup_test(openram_test): OPTS.spice_name="ngspice" OPTS.analytical_delay = False OPTS.netlist_only = True - + # This is a hack to reload the characterizer __init__ with the spice version from importlib import reload import characterizer @@ -32,7 +32,7 @@ class timing_setup_test(openram_test): import sram import tech slews = [tech.spice["rise_time"]*2] - + corner = (OPTS.process_corners[0], OPTS.supply_voltages[0], OPTS.temperatures[0]) sh = setup_hold(corner) data = sh.analyze(slews,slews) @@ -54,7 +54,7 @@ class timing_setup_test(openram_test): self.assertTrue(len(data.keys())==len(golden_data.keys())) self.assertTrue(self.check_golden_data(data,golden_data,0.25)) - + reload(characterizer) globals.end_openram() diff --git a/compiler/tests/22_psram_1bank_2mux_func_test.py b/compiler/tests/22_psram_1bank_2mux_func_test.py index 5e4040d6..3876e69b 100755 --- a/compiler/tests/22_psram_1bank_2mux_func_test.py +++ b/compiler/tests/22_psram_1bank_2mux_func_test.py @@ -32,7 +32,7 @@ class psram_1bank_2mux_func_test(openram_test): OPTS.num_rw_ports = 1 OPTS.num_r_ports = 0 OPTS.num_w_ports = 1 - + # This is a hack to reload the characterizer __init__ with the spice version from importlib import reload import characterizer @@ -55,14 +55,14 @@ class psram_1bank_2mux_func_test(openram_test): s = factory.create(module_type="sram", sram_config=c) tempspice = OPTS.openram_temp + "sram.sp" s.sp_write(tempspice) - + corner = (OPTS.process_corners[0], OPTS.supply_voltages[0], OPTS.temperatures[0]) f = functional(s.s, tempspice, corner) (fail, error) = f.run() self.assertTrue(fail, error) - + globals.end_openram() - + # run the test from the command line if __name__ == "__main__": (OPTS, args) = globals.parse_args() diff --git a/compiler/tests/22_psram_1bank_4mux_func_test.py b/compiler/tests/22_psram_1bank_4mux_func_test.py index 2c51f2f3..5f745114 100755 --- a/compiler/tests/22_psram_1bank_4mux_func_test.py +++ b/compiler/tests/22_psram_1bank_4mux_func_test.py @@ -33,7 +33,7 @@ class psram_1bank_4mux_func_test(openram_test): OPTS.num_rw_ports = 1 OPTS.num_r_ports = 0 OPTS.num_w_ports = 1 - + # This is a hack to reload the characterizer __init__ with the spice version from importlib import reload import characterizer @@ -56,14 +56,14 @@ class psram_1bank_4mux_func_test(openram_test): s = factory.create(module_type="sram", sram_config=c) tempspice = OPTS.openram_temp + "sram.sp" s.sp_write(tempspice) - + corner = (OPTS.process_corners[0], OPTS.supply_voltages[0], OPTS.temperatures[0]) f = functional(s.s, tempspice, corner) (fail, error) = f.run() self.assertTrue(fail, error) globals.end_openram() - + # run the test from the command line if __name__ == "__main__": (OPTS, args) = globals.parse_args() diff --git a/compiler/tests/22_psram_1bank_8mux_func_test.py b/compiler/tests/22_psram_1bank_8mux_func_test.py index 447b7512..345e50e0 100755 --- a/compiler/tests/22_psram_1bank_8mux_func_test.py +++ b/compiler/tests/22_psram_1bank_8mux_func_test.py @@ -33,7 +33,7 @@ class psram_1bank_8mux_func_test(openram_test): OPTS.num_rw_ports = 1 OPTS.num_r_ports = 0 OPTS.num_w_ports = 1 - + # This is a hack to reload the characterizer __init__ with the spice version from importlib import reload import characterizer @@ -56,14 +56,14 @@ class psram_1bank_8mux_func_test(openram_test): s = factory.create(module_type="sram", sram_config=c) tempspice = OPTS.openram_temp + "sram.sp" s.sp_write(tempspice) - + corner = (OPTS.process_corners[0], OPTS.supply_voltages[0], OPTS.temperatures[0]) f = functional(s.s, tempspice, corner) (fail, error) = f.run() self.assertTrue(fail, error) - + globals.end_openram() - + # run the test from the command line if __name__ == "__main__": (OPTS, args) = globals.parse_args() diff --git a/compiler/tests/22_psram_1bank_nomux_func_test.py b/compiler/tests/22_psram_1bank_nomux_func_test.py index 5f2e81c8..3fe522ea 100755 --- a/compiler/tests/22_psram_1bank_nomux_func_test.py +++ b/compiler/tests/22_psram_1bank_nomux_func_test.py @@ -32,7 +32,7 @@ class psram_1bank_nomux_func_test(openram_test): OPTS.num_rw_ports = 1 OPTS.num_r_ports = 0 OPTS.num_w_ports = 1 - + # This is a hack to reload the characterizer __init__ with the spice version from importlib import reload import characterizer @@ -55,14 +55,14 @@ class psram_1bank_nomux_func_test(openram_test): s = factory.create(module_type="sram", sram_config=c) tempspice = OPTS.openram_temp + "sram.sp" s.sp_write(tempspice) - + corner = (OPTS.process_corners[0], OPTS.supply_voltages[0], OPTS.temperatures[0]) f = functional(s.s, tempspice, corner) (fail, error) = f.run() self.assertTrue(fail, error) - + globals.end_openram() - + # run the test from the command line if __name__ == "__main__": (OPTS, args) = globals.parse_args() diff --git a/compiler/tests/22_sram_1bank_2mux_func_test.py b/compiler/tests/22_sram_1bank_2mux_func_test.py index 20ac52f0..3c48787f 100755 --- a/compiler/tests/22_sram_1bank_2mux_func_test.py +++ b/compiler/tests/22_sram_1bank_2mux_func_test.py @@ -25,7 +25,7 @@ class sram_1bank_2mux_func_test(openram_test): OPTS.analytical_delay = False OPTS.netlist_only = True OPTS.trim_netlist = False - + # This is a hack to reload the characterizer __init__ with the spice version from importlib import reload import characterizer @@ -45,14 +45,14 @@ class sram_1bank_2mux_func_test(openram_test): s = factory.create(module_type="sram", sram_config=c) tempspice = OPTS.openram_temp + "sram.sp" s.sp_write(tempspice) - + corner = (OPTS.process_corners[0], OPTS.supply_voltages[0], OPTS.temperatures[0]) f = functional(s.s, tempspice, corner) (fail, error) = f.run() self.assertTrue(fail, error) - + globals.end_openram() - + # run the test from the command line if __name__ == "__main__": (OPTS, args) = globals.parse_args() diff --git a/compiler/tests/22_sram_1bank_2mux_global_func_test.py b/compiler/tests/22_sram_1bank_2mux_global_func_test.py index e5b8853a..e012bf23 100755 --- a/compiler/tests/22_sram_1bank_2mux_global_func_test.py +++ b/compiler/tests/22_sram_1bank_2mux_global_func_test.py @@ -25,7 +25,7 @@ class sram_1bank_2mux_func_test(openram_test): OPTS.analytical_delay = False OPTS.netlist_only = True OPTS.trim_netlist = False - + # This is a hack to reload the characterizer __init__ with the spice version from importlib import reload import characterizer @@ -47,14 +47,14 @@ class sram_1bank_2mux_func_test(openram_test): s = factory.create(module_type="sram", sram_config=c) tempspice = OPTS.openram_temp + "sram.sp" s.sp_write(tempspice) - + corner = (OPTS.process_corners[0], OPTS.supply_voltages[0], OPTS.temperatures[0]) f = functional(s.s, tempspice, corner) (fail, error) = f.run() self.assertTrue(fail, error) - + globals.end_openram() - + # run the test from the command line if __name__ == "__main__": (OPTS, args) = globals.parse_args() diff --git a/compiler/tests/22_sram_1bank_2mux_sparecols_func_test.py b/compiler/tests/22_sram_1bank_2mux_sparecols_func_test.py index a09ab17e..1ce68a54 100755 --- a/compiler/tests/22_sram_1bank_2mux_sparecols_func_test.py +++ b/compiler/tests/22_sram_1bank_2mux_sparecols_func_test.py @@ -25,7 +25,7 @@ class sram_1bank_2mux_sparecols_func_test(openram_test): OPTS.analytical_delay = False OPTS.netlist_only = True OPTS.trim_netlist = False - + # This is a hack to reload the characterizer __init__ with the spice version from importlib import reload import characterizer @@ -47,14 +47,14 @@ class sram_1bank_2mux_sparecols_func_test(openram_test): s = factory.create(module_type="sram", sram_config=c) tempspice = OPTS.openram_temp + "sram.sp" s.sp_write(tempspice) - + corner = (OPTS.process_corners[0], OPTS.supply_voltages[0], OPTS.temperatures[0]) f = functional(s.s, tempspice, corner) (fail, error) = f.run() self.assertTrue(fail, error) - + globals.end_openram() - + # run the test from the command line if __name__ == "__main__": (OPTS, args) = globals.parse_args() diff --git a/compiler/tests/22_sram_1bank_4mux_func_test.py b/compiler/tests/22_sram_1bank_4mux_func_test.py index baa25906..ee7795c0 100755 --- a/compiler/tests/22_sram_1bank_4mux_func_test.py +++ b/compiler/tests/22_sram_1bank_4mux_func_test.py @@ -25,7 +25,7 @@ class sram_1bank_4mux_func_test(openram_test): OPTS.analytical_delay = False OPTS.netlist_only = True OPTS.trim_netlist = False - + # This is a hack to reload the characterizer __init__ with the spice version from importlib import reload import characterizer @@ -45,14 +45,14 @@ class sram_1bank_4mux_func_test(openram_test): s = factory.create(module_type="sram", sram_config=c) tempspice = OPTS.openram_temp + "sram.sp" s.sp_write(tempspice) - + corner = (OPTS.process_corners[0], OPTS.supply_voltages[0], OPTS.temperatures[0]) f = functional(s.s, tempspice, corner) (fail, error) = f.run() self.assertTrue(fail, error) globals.end_openram() - + # run the test from the command line if __name__ == "__main__": (OPTS, args) = globals.parse_args() diff --git a/compiler/tests/22_sram_1bank_8mux_func_test.py b/compiler/tests/22_sram_1bank_8mux_func_test.py index d9cd794a..7600b7c0 100755 --- a/compiler/tests/22_sram_1bank_8mux_func_test.py +++ b/compiler/tests/22_sram_1bank_8mux_func_test.py @@ -25,7 +25,7 @@ class sram_1bank_8mux_func_test(openram_test): OPTS.analytical_delay = False OPTS.netlist_only = True OPTS.trim_netlist = False - + # This is a hack to reload the characterizer __init__ with the spice version from importlib import reload import characterizer @@ -48,14 +48,14 @@ class sram_1bank_8mux_func_test(openram_test): s = factory.create(module_type="sram", sram_config=c) tempspice = OPTS.openram_temp + "sram.sp" s.sp_write(tempspice) - + corner = (OPTS.process_corners[0], OPTS.supply_voltages[0], OPTS.temperatures[0]) f = functional(s.s, tempspice, corner) (fail, error) = f.run() self.assertTrue(fail, error) - + globals.end_openram() - + # run the test from the command line if __name__ == "__main__": (OPTS, args) = globals.parse_args() diff --git a/compiler/tests/22_sram_1bank_nomux_1rw_1r_func_test.py b/compiler/tests/22_sram_1bank_nomux_1rw_1r_func_test.py index 50906e62..513f74b2 100755 --- a/compiler/tests/22_sram_1bank_nomux_1rw_1r_func_test.py +++ b/compiler/tests/22_sram_1bank_nomux_1rw_1r_func_test.py @@ -15,7 +15,7 @@ from globals import OPTS from sram_factory import factory import debug - + #@unittest.skip("SKIPPING 22_sram_1rw_1r_1bank_nomux_func_test") class psram_1bank_nomux_func_test(openram_test): @@ -29,7 +29,7 @@ class psram_1bank_nomux_func_test(openram_test): OPTS.num_w_ports = 0 OPTS.num_r_ports = 1 globals.setup_bitcell() - + # This is a hack to reload the characterizer __init__ with the spice version from importlib import reload import characterizer @@ -49,14 +49,14 @@ class psram_1bank_nomux_func_test(openram_test): s = factory.create(module_type="sram", sram_config=c) tempspice = OPTS.openram_temp + "sram.sp" s.sp_write(tempspice) - + corner = (OPTS.process_corners[0], OPTS.supply_voltages[0], OPTS.temperatures[0]) f = functional(s.s, tempspice, corner) (fail, error) = f.run() self.assertTrue(fail, error) - + globals.end_openram() - + # instantiate a copy of the class to actually run the test if __name__ == "__main__": (OPTS, args) = globals.parse_args() diff --git a/compiler/tests/22_sram_1bank_nomux_func_test.py b/compiler/tests/22_sram_1bank_nomux_func_test.py index 0af55ec2..27dfc4e5 100755 --- a/compiler/tests/22_sram_1bank_nomux_func_test.py +++ b/compiler/tests/22_sram_1bank_nomux_func_test.py @@ -24,7 +24,7 @@ class sram_1bank_nomux_func_test(openram_test): globals.init_openram(config_file) OPTS.analytical_delay = False OPTS.netlist_only = True - + # This is a hack to reload the characterizer __init__ with the spice version from importlib import reload import characterizer @@ -44,14 +44,14 @@ class sram_1bank_nomux_func_test(openram_test): s = factory.create(module_type="sram", sram_config=c) tempspice = OPTS.openram_temp + "sram.sp" s.sp_write(tempspice) - + corner = (OPTS.process_corners[0], OPTS.supply_voltages[0], OPTS.temperatures[0]) f = functional(s.s, tempspice, corner) (fail, error) = f.run() self.assertTrue(fail, error) - + globals.end_openram() - + # run the test from the command line if __name__ == "__main__": (OPTS, args) = globals.parse_args() diff --git a/compiler/tests/22_sram_1bank_nomux_sparecols_func_test.py b/compiler/tests/22_sram_1bank_nomux_sparecols_func_test.py index dbb9d7b2..0df39226 100755 --- a/compiler/tests/22_sram_1bank_nomux_sparecols_func_test.py +++ b/compiler/tests/22_sram_1bank_nomux_sparecols_func_test.py @@ -24,7 +24,7 @@ class sram_1bank_nomux_sparecols_func_test(openram_test): globals.init_openram(config_file) OPTS.analytical_delay = False OPTS.netlist_only = True - + # This is a hack to reload the characterizer __init__ with the spice version from importlib import reload import characterizer @@ -45,14 +45,14 @@ class sram_1bank_nomux_sparecols_func_test(openram_test): s = factory.create(module_type="sram", sram_config=c) tempspice = OPTS.openram_temp + "sram.sp" s.sp_write(tempspice) - + corner = (OPTS.process_corners[0], OPTS.supply_voltages[0], OPTS.temperatures[0]) f = functional(s.s, tempspice, corner) (fail, error) = f.run() self.assertTrue(fail, error) - + globals.end_openram() - + # run the test from the command line if __name__ == "__main__": (OPTS, args) = globals.parse_args() diff --git a/compiler/tests/22_sram_1bank_wmask_1rw_1r_func_test.py b/compiler/tests/22_sram_1bank_wmask_1rw_1r_func_test.py index 7ab35824..806c7b46 100755 --- a/compiler/tests/22_sram_1bank_wmask_1rw_1r_func_test.py +++ b/compiler/tests/22_sram_1bank_wmask_1rw_1r_func_test.py @@ -30,7 +30,7 @@ class sram_wmask_1w_1r_func_test(openram_test): OPTS.num_w_ports = 0 OPTS.num_r_ports = 1 globals.setup_bitcell() - + # This is a hack to reload the characterizer __init__ with the spice version from importlib import reload import characterizer diff --git a/compiler/tests/22_sram_wmask_func_test.py b/compiler/tests/22_sram_wmask_func_test.py index b59c3b95..dd3ac8d7 100755 --- a/compiler/tests/22_sram_wmask_func_test.py +++ b/compiler/tests/22_sram_wmask_func_test.py @@ -25,7 +25,7 @@ class sram_wmask_func_test(openram_test): OPTS.analytical_delay = False OPTS.netlist_only = True OPTS.trim_netlist = False - + # This is a hack to reload the characterizer __init__ with the spice version from importlib import reload import characterizer @@ -54,7 +54,7 @@ class sram_wmask_func_test(openram_test): self.assertTrue(fail, error) globals.end_openram() - + # run the test from the command line if __name__ == "__main__": (OPTS, args) = globals.parse_args() diff --git a/compiler/tests/23_lib_sram_model_corners_test.py b/compiler/tests/23_lib_sram_model_corners_test.py index 84de2b3f..2b5d9234 100755 --- a/compiler/tests/23_lib_sram_model_corners_test.py +++ b/compiler/tests/23_lib_sram_model_corners_test.py @@ -48,7 +48,7 @@ class lib_model_corners_lib_test(openram_test): OPTS.process_corners = ["TT", "SS", "FF"] OPTS.supply_voltages = [1.0] OPTS.temperatures = [25] - + lib(out_dir=OPTS.openram_temp, sram=s.s, sp_file=tempspice, use_model=True) # get all of the .lib files generated @@ -62,7 +62,7 @@ class lib_model_corners_lib_test(openram_test): libname = "{0}/{1}".format(OPTS.openram_temp,filename) golden = "{0}/golden/{1}".format(os.path.dirname(os.path.realpath(__file__)),newname) self.assertTrue(self.isapproxdiff(libname,golden,0.15)) - + globals.end_openram() # run the test from the command line diff --git a/compiler/tests/23_lib_sram_model_test.py b/compiler/tests/23_lib_sram_model_test.py index 1ea8fc9e..c502b892 100755 --- a/compiler/tests/23_lib_sram_model_test.py +++ b/compiler/tests/23_lib_sram_model_test.py @@ -22,7 +22,7 @@ class lib_sram_model_test(openram_test): globals.init_openram(config_file) OPTS.nominal_corner_only = False OPTS.netlist_only = True - + from characterizer import lib from sram import sram from sram_config import sram_config @@ -52,7 +52,7 @@ class lib_sram_model_test(openram_test): libname = "{0}/{1}".format(OPTS.openram_temp,filename) golden = "{0}/golden/{1}".format(os.path.dirname(os.path.realpath(__file__)),newname) self.assertTrue(self.isapproxdiff(libname,golden,0.15)) - + globals.end_openram() # run the test from the command line diff --git a/compiler/tests/23_lib_sram_prune_test.py b/compiler/tests/23_lib_sram_prune_test.py index e9c727c6..6021147c 100755 --- a/compiler/tests/23_lib_sram_prune_test.py +++ b/compiler/tests/23_lib_sram_prune_test.py @@ -64,7 +64,7 @@ class lib_sram_prune_test(openram_test): reload(characterizer) globals.end_openram() - + # run the test from the command line if __name__ == "__main__": (OPTS, args) = globals.parse_args() diff --git a/compiler/tests/23_lib_sram_test.py b/compiler/tests/23_lib_sram_test.py index 91f410c3..b370db8f 100755 --- a/compiler/tests/23_lib_sram_test.py +++ b/compiler/tests/23_lib_sram_test.py @@ -62,7 +62,7 @@ class lib_test(openram_test): reload(characterizer) globals.end_openram() - + # run the test from the command line if __name__ == "__main__": (OPTS, args) = globals.parse_args() diff --git a/compiler/tests/25_verilog_sram_test.py b/compiler/tests/25_verilog_sram_test.py index 120974ff..0d3be92a 100755 --- a/compiler/tests/25_verilog_sram_test.py +++ b/compiler/tests/25_verilog_sram_test.py @@ -44,7 +44,7 @@ class verilog_test(openram_test): self.assertTrue(self.isdiff(vname,golden)) globals.end_openram() - + # run the test from the command line if __name__ == "__main__": (OPTS, args) = globals.parse_args() diff --git a/compiler/tests/26_hspice_pex_pinv_test.py b/compiler/tests/26_hspice_pex_pinv_test.py index 96b2d108..660469b1 100755 --- a/compiler/tests/26_hspice_pex_pinv_test.py +++ b/compiler/tests/26_hspice_pex_pinv_test.py @@ -36,7 +36,7 @@ class hspice_pex_pinv_test(openram_test): # generate the pinv prev_purge_value = OPTS.purge_temp # force set purge to false to save the sp file - OPTS.purge_temp = False + OPTS.purge_temp = False debug.info(2, "Checking 1x size inverter") tx = pinv.pinv(name="pinv", size=1) tempgds = "{0}{1}.gds".format(OPTS.openram_temp, tx.name) diff --git a/compiler/tests/26_ngspice_pex_pinv_test.py b/compiler/tests/26_ngspice_pex_pinv_test.py index e5dbe5db..67413bae 100755 --- a/compiler/tests/26_ngspice_pex_pinv_test.py +++ b/compiler/tests/26_ngspice_pex_pinv_test.py @@ -50,7 +50,7 @@ class ngspice_pex_pinv_test(openram_test): # now generate its pex file pex_file = self.run_pex(tx) - # restore the old purge value + # restore the old purge value OPTS.purge_temp = prev_purge_value # generate simulation for pex, make sure the simulation is successful pex_delay = self.simulate_delay(test_module=pex_file, diff --git a/compiler/tests/26_sram_pex_test.py b/compiler/tests/26_sram_pex_test.py index 5a3253de..9ba50148 100755 --- a/compiler/tests/26_sram_pex_test.py +++ b/compiler/tests/26_sram_pex_test.py @@ -24,7 +24,7 @@ class sram_pex_test(openram_test): globals.init_openram(config_file) OPTS.analytical_delay = False OPTS.use_pex = True - + # This is a hack to reload the characterizer __init__ with the spice version from importlib import reload import characterizer @@ -43,14 +43,14 @@ class sram_pex_test(openram_test): c.num_banks)) s = factory.create(module_type="sram", sram_config=c) tempspice = self.run_pex(s) - + corner = (OPTS.process_corners[0], OPTS.supply_voltages[0], OPTS.temperatures[0]) f = functional(s.s, tempspice, corner) (fail, error) = f.run() self.assertTrue(fail, error) - + globals.end_openram() - + # run the test from the command line if __name__ == "__main__": (OPTS, args) = globals.parse_args() diff --git a/compiler/tests/30_openram_back_end_test.py b/compiler/tests/30_openram_back_end_test.py index 591d03ac..85d52750 100755 --- a/compiler/tests/30_openram_back_end_test.py +++ b/compiler/tests/30_openram_back_end_test.py @@ -45,7 +45,7 @@ class openram_back_end_test(openram_test): if OPTS.spice_name: options += " -s {}".format(OPTS.spice_name) - + # Always perform code coverage if OPTS.coverage == 0: debug.warning("Failed to find coverage installation. This can be installed with pip3 install coverage") @@ -61,7 +61,7 @@ class openram_back_end_test(openram_test): out_path) debug.info(1, cmd) os.system(cmd) - + # assert an error until we actually check a resul for extension in ["gds", "v", "lef", "sp"]: filename = "{0}/{1}.{2}".format(out_path, out_file, extension) @@ -72,12 +72,12 @@ class openram_back_end_test(openram_test): import glob files = glob.glob('{0}/*.lib'.format(out_path)) self.assertTrue(len(files)>0) - + # Make sure there is any .html file if os.path.exists(out_path): datasheets = glob.glob('{0}/*html'.format(out_path)) self.assertTrue(len(datasheets)>0) - + # grep any errors from the output output_log = open("{0}/output.log".format(out_path), "r") output = output_log.read() @@ -90,7 +90,7 @@ class openram_back_end_test(openram_test): if os.path.exists(out_path): shutil.rmtree(out_path, ignore_errors=True) self.assertEqual(os.path.exists(out_path), False) - + globals.end_openram() # run the test from the command line diff --git a/compiler/tests/30_openram_front_end_test.py b/compiler/tests/30_openram_front_end_test.py index 127df6c2..9a412ada 100755 --- a/compiler/tests/30_openram_front_end_test.py +++ b/compiler/tests/30_openram_front_end_test.py @@ -45,7 +45,7 @@ class openram_front_end_test(openram_test): if OPTS.spice_name: options += " -s {}".format(OPTS.spice_name) - + # Always perform code coverage if OPTS.coverage == 0: debug.warning("Failed to find coverage installation. This can be installed with pip3 install coverage") @@ -61,7 +61,7 @@ class openram_front_end_test(openram_test): out_path) debug.info(1, cmd) os.system(cmd) - + # assert an error until we actually check a result for extension in ["v", "lef", "sp", "gds"]: filename = "{0}/{1}.{2}".format(out_path, out_file, extension) @@ -72,12 +72,12 @@ class openram_front_end_test(openram_test): import glob files = glob.glob('{0}/*.lib'.format(out_path)) self.assertTrue(len(files)>0) - + # Make sure there is any .html file if os.path.exists(out_path): datasheets = glob.glob('{0}/*html'.format(out_path)) self.assertTrue(len(datasheets)>0) - + # grep any errors from the output output_log = open("{0}/output.log".format(out_path), "r") output = output_log.read() diff --git a/compiler/tests/50_riscv_func_test.py b/compiler/tests/50_riscv_func_test.py index 0d9825e6..26af9106 100755 --- a/compiler/tests/50_riscv_func_test.py +++ b/compiler/tests/50_riscv_func_test.py @@ -30,7 +30,7 @@ class riscv_func_test(openram_test): OPTS.num_w_ports = 0 OPTS.num_r_ports = 1 globals.setup_bitcell() - + # This is a hack to reload the characterizer __init__ with the spice version from importlib import reload import characterizer @@ -51,14 +51,14 @@ class riscv_func_test(openram_test): s = factory.create(module_type="sram", sram_config=c) tempspice = OPTS.openram_temp + "sram.sp" s.sp_write(tempspice) - + corner = (OPTS.process_corners[0], OPTS.supply_voltages[0], OPTS.temperatures[0]) f = functional(s.s, tempspice, corner) (fail, error) = f.run() self.assertTrue(fail, error) - + globals.end_openram() - + # instantiate a copy of the class to actually run the test if __name__ == "__main__": (OPTS, args) = globals.parse_args() diff --git a/compiler/tests/50_riscv_phys_test.py b/compiler/tests/50_riscv_phys_test.py index 724131dd..5f3d7d59 100755 --- a/compiler/tests/50_riscv_phys_test.py +++ b/compiler/tests/50_riscv_phys_test.py @@ -23,7 +23,7 @@ class riscv_phys_test(openram_test): config_file = "{}/tests/configs/config".format(os.getenv("OPENRAM_HOME")) globals.init_openram(config_file) from sram_config import sram_config - + OPTS.num_rw_ports = 1 OPTS.num_r_ports = 1 OPTS.num_w_ports = 0 @@ -31,7 +31,7 @@ class riscv_phys_test(openram_test): globals.setup_bitcell() OPTS.route_supplies = False OPTS.perimeter_pins = False - + c = sram_config(word_size=32, write_size=8, num_words=256, @@ -50,9 +50,9 @@ class riscv_phys_test(openram_test): c.num_banks)) a = factory.create(module_type="sram", sram_config=c) self.local_check(a, final_verification=True) - + globals.end_openram() - + # instantiate a copy of the class to actually run the test if __name__ == "__main__": (OPTS, args) = globals.parse_args() diff --git a/compiler/tests/testutils.py b/compiler/tests/testutils.py index 9188a4f9..0ab7b8a8 100644 --- a/compiler/tests/testutils.py +++ b/compiler/tests/testutils.py @@ -50,7 +50,7 @@ class openram_test(unittest.TestCase): # We can still run LVS even if DRC fails in Magic OR Calibre lvs_result=verify.run_lvs(a.name, tempgds, tempspice, final_verification=final_verification) - + # Only allow DRC to fail and LVS to pass if we are using magic if lvs_result == 0 and drc_result != 0: # import shutil @@ -64,7 +64,7 @@ class openram_test(unittest.TestCase): # debug.info(0,"Archiving failed files to {}.zip".format(zip_file)) # shutil.make_archive(zip_file, 'zip', OPTS.openram_temp) self.fail("DRC failed: {}".format(a.name)) - + if lvs_result != 0: # import shutil # zip_file = "/tmp/{0}_{1}".format(a.name, os.getpid()) @@ -82,7 +82,7 @@ class openram_test(unittest.TestCase): output = OPTS.openram_temp + a.name + ".pex.netlist" tempspice = "{0}{1}.sp".format(OPTS.openram_temp, a.name) tempgds = "{0}{1}.gds".format(OPTS.openram_temp, a.name) - + a.gds_write(tempgds) import verify @@ -300,7 +300,7 @@ class openram_test(unittest.TestCase): def dbg(): import pdb; pdb.set_trace() - + def header(filename, technology): # Skip the header for gitlab regression import getpass @@ -318,14 +318,14 @@ def header(filename, technology): print("|=========" + OPTS.openram_temp.center(60) + "=========|") print("|==============================================================================|") - + def debugTestRunner(post_mortem=None): """unittest runner doing post mortem debugging on failing tests""" import pdb import traceback if post_mortem is None and not OPTS.purge_temp: post_mortem = pdb.post_mortem - + class DebugTestResult(unittest.TextTestResult): def addError(self, test, err): # called before tearDown() @@ -333,7 +333,7 @@ def debugTestRunner(post_mortem=None): if post_mortem: post_mortem(err[2]) super(DebugTestResult, self).addError(test, err) - + def addFailure(self, test, err): traceback.print_exception(*err) if post_mortem: diff --git a/compiler/verify/__init__.py b/compiler/verify/__init__.py index 4d9eb151..4bcf93cc 100644 --- a/compiler/verify/__init__.py +++ b/compiler/verify/__init__.py @@ -6,7 +6,7 @@ # All rights reserved. # """ -This is a module that will import the correct DRC/LVS/PEX +This is a module that will import the correct DRC/LVS/PEX module based on what tools are found. It is a layer of indirection to enable multiple verification tool support. @@ -77,4 +77,4 @@ if OPTS.tech_name == "sky130": from .magic import filter_gds else: debug.warning("Did not find Magic.") - + diff --git a/compiler/verify/assura.py b/compiler/verify/assura.py index d1d6146f..439f833d 100644 --- a/compiler/verify/assura.py +++ b/compiler/verify/assura.py @@ -43,7 +43,7 @@ def run_drc(name, gds_name, final_verification=False): global num_drc_runs num_drc_runs += 1 - + from tech import drc drc_rules = drc["drc_rules"] drc_runset = OPTS.openram_temp + name + ".rsf" @@ -106,7 +106,7 @@ def run_lvs(name, gds_name, sp_name, final_verification=False): global num_lvs_runs num_lvs_runs += 1 - + from tech import drc lvs_rules = drc["lvs_rules"] lvs_runset = OPTS.openram_temp + name + ".rsf" @@ -192,7 +192,7 @@ def run_pex(name, gds_name, sp_name, output=None, final_verification=False): global num_pex_runs num_pex_runs += 1 - + def print_drc_stats(): debug.info(1,"DRC runs: {0}".format(num_drc_runs)) def print_lvs_stats(): diff --git a/compiler/verify/calibre.py b/compiler/verify/calibre.py index d51e71b6..6970b271 100644 --- a/compiler/verify/calibre.py +++ b/compiler/verify/calibre.py @@ -202,7 +202,7 @@ def run_drc(cell_name, gds_name, extract=False, final_verification=False): if not os.path.isfile(OPTS.openram_temp + os.path.basename(gds_name)): shutil.copy(gds_name, OPTS.openram_temp + os.path.basename(gds_name)) - + (outfile, errfile, resultsfile) = run_script(cell_name, "drc") # check the result for these lines in the summary: @@ -335,7 +335,7 @@ def run_pex(cell_name, gds_name, sp_name, output=None, final_verification=False) shutil.copy(gds_name, OPTS.openram_temp) if not os.path.isfile(OPTS.openram_temp + os.path.basename(sp_name)): shutil.copy(sp_name, OPTS.openram_temp) - + (outfile, errfile, resultsfile) = run_script(cell_name, "pex") diff --git a/compiler/verify/magic.py b/compiler/verify/magic.py index ece741cd..6a559b3d 100644 --- a/compiler/verify/magic.py +++ b/compiler/verify/magic.py @@ -43,7 +43,7 @@ def filter_gds(cell_name, input_gds, output_gds): shutil.copy(magic_file, OPTS.openram_temp) else: debug.warning("Could not locate .magicrc file: {}".format(magic_file)) - + run_file = OPTS.openram_temp + "run_filter.sh" f = open(run_file, "w") @@ -65,7 +65,7 @@ def filter_gds(cell_name, input_gds, output_gds): (outfile, errfile, resultsfile) = run_script(cell_name, "filter") - + def write_magic_script(cell_name, extract=False, final_verification=False): """ Write a magic script to perform DRC and optionally extraction. """ @@ -488,14 +488,14 @@ def correct_port(name, output_file_name, ref_file_name): output_file.write(part2) output_file.close() - + def print_drc_stats(): debug.info(1, "DRC runs: {0}".format(num_drc_runs)) - + def print_lvs_stats(): debug.info(1, "LVS runs: {0}".format(num_lvs_runs)) - + def print_pex_stats(): debug.info(1, "PEX runs: {0}".format(num_pex_runs)) diff --git a/technology/freepdk45/__init__.py b/technology/freepdk45/__init__.py index 363df6f4..7e6943b4 100644 --- a/technology/freepdk45/__init__.py +++ b/technology/freepdk45/__init__.py @@ -20,10 +20,10 @@ TECHNOLOGY = "freepdk45" # FreePDK45 paths PDK_DIR=os.path.abspath(os.environ.get("FREEPDK45")) -os.environ["PDK_DIR"] = PDK_DIR -os.environ["SYSTEM_CDS_LIB_DIR"] = "{0}/ncsu_basekit/cdssetup".format(PDK_DIR) -os.environ["CDS_SITE"] = PDK_DIR -os.environ["MGC_TMPDIR"] = "/tmp" +os.environ["PDK_DIR"] = PDK_DIR +os.environ["SYSTEM_CDS_LIB_DIR"] = "{0}/ncsu_basekit/cdssetup".format(PDK_DIR) +os.environ["CDS_SITE"] = PDK_DIR +os.environ["MGC_TMPDIR"] = "/tmp" ########################### #OpenRAM Paths diff --git a/technology/freepdk45/tech/tech.py b/technology/freepdk45/tech/tech.py index 7aeb3e21..0feb1cd9 100644 --- a/technology/freepdk45/tech/tech.py +++ b/technology/freepdk45/tech/tech.py @@ -45,7 +45,7 @@ layer_properties = layer_properties() ################################################### GDS = {} -# gds units +# gds units # From http://www.cnf.cornell.edu/cnf_spie9.html: "The first #is the size of a database unit in user units. The second is the size #of a database unit in meters. For example, if your library was diff --git a/technology/scn3me_subm/__init__.py b/technology/scn3me_subm/__init__.py index 6b08d0b9..e80abc5d 100644 --- a/technology/scn3me_subm/__init__.py +++ b/technology/scn3me_subm/__init__.py @@ -20,14 +20,14 @@ TECHNOLOGY = "scn3me_subm" # CDK paths # os.environ["CDK_DIR"] = CDK_DIR #PDK path -# os.environ["SYSTEM_CDS_LIB_DIR"] = "{0}/cdssetup".format(CDK_DIR) -# os.environ["CDS_SITE"] = CDK_DIR -os.environ["MGC_TMPDIR"] = "/tmp" +# os.environ["SYSTEM_CDS_LIB_DIR"] = "{0}/cdssetup".format(CDK_DIR) +# os.environ["CDS_SITE"] = CDK_DIR +os.environ["MGC_TMPDIR"] = "/tmp" ########################### # OpenRAM Paths - + try: DRCLVS_HOME = os.path.abspath(os.environ.get("DRCLVS_HOME")) except: diff --git a/technology/scn3me_subm/tech/tech.py b/technology/scn3me_subm/tech/tech.py index 9e6f370b..0bd12162 100755 --- a/technology/scn3me_subm/tech/tech.py +++ b/technology/scn3me_subm/tech/tech.py @@ -33,7 +33,7 @@ GDS={} #1, since you use more than 1 database unit per user unit. To #calculate the size of a user unit in meters, divide the second number #by the first." -GDS["unit"]=(0.001,1e-6) +GDS["unit"]=(0.001,1e-6) # default label zoom GDS["zoom"] = 0.5 @@ -43,7 +43,7 @@ GDS["zoom"] = 0.5 ################################################### # create the GDS layer map -layer={} +layer={} layer["vtg"] = (-1, 0) layer["vth"] = (-1, 0) layer["contact"] = (47, 0) @@ -75,7 +75,7 @@ _lambda_ = 0.3 #technology parameter parameter={} parameter["min_tx_size"] = 4*_lambda_ -parameter["beta"] = 2 +parameter["beta"] = 2 parameter["6T_inv_nmos_size"] = 8*_lambda_ parameter["6T_inv_pmos_size"] = 3*_lambda_ @@ -97,29 +97,29 @@ drc["drc_rules"]=drclvs_home+"/calibreDRC_scn3me_subm.rul" drc["lvs_rules"]=drclvs_home+"/calibreLVS_scn3me_subm.rul" drc["layer_map"]=os.environ.get("OPENRAM_TECH")+"/scn3me_subm/layers.map" - + # minwidth_tx with contact (no dog bone transistors) drc["minwidth_tx"] = 4*_lambda_ drc["minlength_channel"] = 2*_lambda_ -# 1.3 Minimum spacing between wells of same type (if both are drawn) +# 1.3 Minimum spacing between wells of same type (if both are drawn) drc["well_to_well"] = 6*_lambda_ -# 1.4 Minimum spacing between wells of different type (if both are drawn) +# 1.4 Minimum spacing between wells of different type (if both are drawn) drc["pwell_to_nwell"] = 0 -# 1.1 Minimum width +# 1.1 Minimum width drc["minwidth_well"] = 12*_lambda_ -# 3.1 Minimum width +# 3.1 Minimum width drc["minwidth_poly"] = 2*_lambda_ # 3.2 Minimum spacing over active drc["poly_to_poly"] = 3*_lambda_ -# 3.3 Minimum gate extension of active +# 3.3 Minimum gate extension of active drc["poly_extend_active"] = 2*_lambda_ # 5.5.b Minimum spacing between poly contact and other poly (alternative rules) drc["poly_to_polycontact"] = 4*_lambda_ # ?? drc["active_enclosure_gate"] = 0.0 -# 3.5 Minimum field poly to active +# 3.5 Minimum field poly to active drc["poly_to_active"] = _lambda_ # 3.2.a Minimum spacing over field poly drc["poly_to_field_poly"] = 3*_lambda_ @@ -128,22 +128,22 @@ drc["minarea_poly"] = 0.0 # ?? drc["active_to_body_active"] = 4*_lambda_ # Fix me -# 2.1 Minimum width +# 2.1 Minimum width drc["minwidth_active"] = 3*_lambda_ # 2.2 Minimum spacing drc["active_to_active"] = 3*_lambda_ -# 2.3 Source/drain active to well edge +# 2.3 Source/drain active to well edge drc["well_enclosure_active"] = 6*_lambda_ # Reserved for asymmetric enclosures drc["well_extend_active"] = 6*_lambda_ # Not a rule drc["minarea_active"] = 0.0 -# 4.1 Minimum select spacing to channel of transistor to ensure adequate source/drain width +# 4.1 Minimum select spacing to channel of transistor to ensure adequate source/drain width drc["implant_to_channel"] = 3*_lambda_ # 4.2 Minimum select overlap of active drc["implant_enclosure_active"] = 2*_lambda_ -# 4.3 Minimum select overlap of contact +# 4.3 Minimum select overlap of contact drc["implant_enclosure_contact"] = _lambda_ # Not a rule drc["implant_to_contact"] = 0 @@ -155,12 +155,12 @@ drc["minwidth_implant"] = 0 # 6.1 Exact contact size drc["minwidth_contact"] = 2*_lambda_ # 5.3 Minimum contact spacing -drc["contact_to_contact"] = 3*_lambda_ -# 6.2.b Minimum active overlap +drc["contact_to_contact"] = 3*_lambda_ +# 6.2.b Minimum active overlap drc["active_enclosure_contact"] = _lambda_ # Reserved for asymmetric enclosure drc["active_extend_contact"] = _lambda_ -# 5.2.b Minimum poly overlap +# 5.2.b Minimum poly overlap drc["poly_enclosure_contact"] = _lambda_ # Reserved for asymmetric enclosures drc["poly_extend_contact"] = _lambda_ @@ -168,32 +168,32 @@ drc["poly_extend_contact"] = _lambda_ drc["contact_to_gate"] = 2*_lambda_ # 5.4 Minimum spacing to gate of transistor drc["contact_to_poly"] = 2*_lambda_ - -# 7.1 Minimum width + +# 7.1 Minimum width drc["minwidth_metal1"] = 3*_lambda_ -# 7.2 Minimum spacing +# 7.2 Minimum spacing drc["metal1_to_metal1"] = 3*_lambda_ -# 7.3 Minimum overlap of any contact +# 7.3 Minimum overlap of any contact drc["metal1_enclosure_contact"] = _lambda_ # Reserved for asymmetric enclosure drc["metal1_extend_contact"] = _lambda_ -# 8.3 Minimum overlap by metal1 -drc["metal1_enclosure_via1"] = _lambda_ +# 8.3 Minimum overlap by metal1 +drc["metal1_enclosure_via1"] = _lambda_ # Reserve for asymmetric enclosures drc["metal1_extend_via1"] = _lambda_ # Not a rule drc["minarea_metal1"] = 0 -# 8.1 Exact size +# 8.1 Exact size drc["minwidth_via1"] = 2*_lambda_ -# 8.2 Minimum via1 spacing +# 8.2 Minimum via1 spacing drc["via1_to_via1"] = 3*_lambda_ # 9.1 Minimum width drc["minwidth_metal2"] = 3*_lambda_ -# 9.2 Minimum spacing +# 9.2 Minimum spacing drc["metal2_to_metal2"] = 3*_lambda_ -# 9.3 Minimum overlap of via1 +# 9.3 Minimum overlap of via1 drc["metal2_extend_via1"] = _lambda_ # Reserved for asymmetric enclosures drc["metal2_enclosure_via1"] = _lambda_ @@ -237,14 +237,14 @@ SPICE_MODEL_DIR=os.environ.get("SPICE_MODEL_DIR") spice["fet_models"] = { "TT" : [SPICE_MODEL_DIR+"/nom/pmos.sp",SPICE_MODEL_DIR+"/nom/nmos.sp"], "FF" : [SPICE_MODEL_DIR+"/ff/pmos.sp",SPICE_MODEL_DIR+"/ff/nmos.sp"], "FS" : [SPICE_MODEL_DIR+"/ff/pmos.sp",SPICE_MODEL_DIR+"/ss/nmos.sp"], - "SF" : [SPICE_MODEL_DIR+"/ss/pmos.sp",SPICE_MODEL_DIR+"/ff/nmos.sp"], + "SF" : [SPICE_MODEL_DIR+"/ss/pmos.sp",SPICE_MODEL_DIR+"/ff/nmos.sp"], "SS" : [SPICE_MODEL_DIR+"/ss/pmos.sp",SPICE_MODEL_DIR+"/ss/nmos.sp"], "ST" : [SPICE_MODEL_DIR+"/ss/pmos.sp",SPICE_MODEL_DIR+"/nom/nmos.sp"], "TS" : [SPICE_MODEL_DIR+"/nom/pmos.sp",SPICE_MODEL_DIR+"/ss/nmos.sp"], "FT" : [SPICE_MODEL_DIR+"/ff/pmos.sp",SPICE_MODEL_DIR+"/nom/nmos.sp"], "TF" : [SPICE_MODEL_DIR+"/nom/pmos.sp",SPICE_MODEL_DIR+"/ff/nmos.sp"], } - + #spice stimulus related variables spice["feasible_period"] = 10 # estimated feasible period in ns @@ -278,7 +278,7 @@ spice["dff_leakage"] = 1 # Leakage power of flop in nW spice["default_event_frequency"] = 100 # Default event activity of every gate. MHz #Logical Effort relative values for the Handmade cells -parameter["le_tau"] = 23 #In pico-seconds. +parameter["le_tau"] = 23 #In pico-seconds. parameter["min_inv_para_delay"] = 0.73 #In relative delay units parameter["cap_relative_per_ff"] = 0.91 #Units of Relative Capacitance/ Femto-Farad parameter["dff_clk_cin"] = 27.5 #In relative capacitance units diff --git a/technology/scn4m_subm/__init__.py b/technology/scn4m_subm/__init__.py index 5fbd8c08..bebe9702 100644 --- a/technology/scn4m_subm/__init__.py +++ b/technology/scn4m_subm/__init__.py @@ -20,14 +20,14 @@ TECHNOLOGY = "scn4m_subm" # CDK paths # os.environ["CDK_DIR"] = CDK_DIR #PDK path -# os.environ["SYSTEM_CDS_LIB_DIR"] = "{0}/cdssetup".format(CDK_DIR) -# os.environ["CDS_SITE"] = CDK_DIR -os.environ["MGC_TMPDIR"] = "/tmp" +# os.environ["SYSTEM_CDS_LIB_DIR"] = "{0}/cdssetup".format(CDK_DIR) +# os.environ["CDS_SITE"] = CDK_DIR +os.environ["MGC_TMPDIR"] = "/tmp" ########################### # OpenRAM Paths - + try: DRCLVS_HOME = os.path.abspath(os.environ.get("DRCLVS_HOME")) except: diff --git a/technology/scn4m_subm/tech/tech.py b/technology/scn4m_subm/tech/tech.py index f9a99a86..0bea4035 100644 --- a/technology/scn4m_subm/tech/tech.py +++ b/technology/scn4m_subm/tech/tech.py @@ -52,7 +52,7 @@ GDS={} #1, since you use more than 1 database unit per user unit. To #calculate the size of a user unit in meters, divide the second number #by the first." -GDS["unit"]=(0.001,1e-6) +GDS["unit"]=(0.001,1e-6) # default label zoom GDS["zoom"] = 0.5 @@ -129,7 +129,7 @@ _lambda_ = 0.2 #technology parameter parameter={} parameter["min_tx_size"] = 4*_lambda_ -parameter["beta"] = 2 +parameter["beta"] = 2 # These 6T sizes are used in the parameterized bitcell. parameter["6T_inv_nmos_size"] = 8*_lambda_ @@ -147,7 +147,7 @@ drc["grid"]=0.5*_lambda_ drc["drc_rules"]=None #drclvs_home+"/calibreDRC_scn3me_subm.rul" drc["lvs_rules"]=None #drclvs_home+"/calibreLVS_scn3me_subm.rul" drc["layer_map"]=os.environ.get("OPENRAM_TECH")+"/scn3me_subm/layers.map" - + # minwidth_tx with contact (no dog bone transistors) drc["minwidth_tx"] = 4*_lambda_ drc["minlength_channel"] = 2*_lambda_ @@ -163,29 +163,29 @@ drc.add_layer("pwell", width = 12*_lambda_, spacing = 6*_lambda_) -# 3.1 Minimum width +# 3.1 Minimum width # 3.2 Minimum spacing over active drc.add_layer("poly", width = 2*_lambda_, spacing = 3*_lambda_) -# 3.3 Minimum gate extension of active +# 3.3 Minimum gate extension of active drc["poly_extend_active"] = 2*_lambda_ # 5.5.b Minimum spacing between poly contact and other poly (alternative rules) drc["poly_to_contact"] = 4*_lambda_ # ?? drc["active_enclose_gate"] = 0.0 -# 3.5 Minimum field poly to active +# 3.5 Minimum field poly to active drc["poly_to_active"] = _lambda_ # 3.2.a Minimum spacing over field poly drc["poly_to_field_poly"] = 3*_lambda_ -# 2.1 Minimum width +# 2.1 Minimum width # 2.2 Minimum spacing drc.add_layer("active", width = 3*_lambda_, spacing = 4*_lambda_) -# 2.3 Source/drain active to well edge +# 2.3 Source/drain active to well edge drc.add_enclosure("nwell", layer = "active", enclosure = 6*_lambda_) @@ -193,13 +193,13 @@ drc.add_enclosure("pwell", layer = "active", enclosure = 6*_lambda_) -# 4.1 Minimum select spacing to channel of transistor to ensure adequate source/drain width +# 4.1 Minimum select spacing to channel of transistor to ensure adequate source/drain width drc["implant_to_channel"] = 3*_lambda_ # 4.2 Minimum select overlap of active drc.add_enclosure("implant", layer = "active", enclosure = 2*_lambda_) -# 4.3 Minimum select overlap of contact +# 4.3 Minimum select overlap of contact drc.add_enclosure("implant", layer = "contact", enclosure = _lambda_) @@ -232,7 +232,7 @@ drc["poly_contact_to_gate"] = 2*_lambda_ drc.add_layer("poly_contact", width = 2*_lambda_, spacing = 3*_lambda_) -# 5.2.b Minimum poly overlap +# 5.2.b Minimum poly overlap drc.add_enclosure("poly", layer = "poly_contact", enclosure = _lambda_) @@ -241,12 +241,12 @@ drc["poly_contact_to_gate"] = 2*_lambda_ # 5.4 Minimum spacing to gate of transistor drc["poly_contact_to_poly"] = 2*_lambda_ -# 7.1 Minimum width -# 7.2 Minimum spacing +# 7.1 Minimum width +# 7.2 Minimum spacing drc.add_layer("m1", width = 3*_lambda_, spacing = 3*_lambda_) -# 7.3 Minimum overlap of any contact +# 7.3 Minimum overlap of any contact drc.add_enclosure("m1", layer = "poly_contact", enclosure = _lambda_) @@ -258,18 +258,18 @@ drc.add_enclosure("m1", layer = "via1", enclosure = _lambda_) -# 8.1 Exact size -# 8.2 Minimum via1 spacing +# 8.1 Exact size +# 8.2 Minimum via1 spacing drc.add_layer("via1", width = 2*_lambda_, spacing = 3*_lambda_) # 9.1 Minimum width -# 9.2 Minimum spacing +# 9.2 Minimum spacing drc.add_layer("m2", width = 3*_lambda_, spacing = 3*_lambda_) -# 9.3 Minimum overlap of via1 +# 9.3 Minimum overlap of via1 drc.add_enclosure("m2", layer = "via1", enclosure = _lambda_) @@ -337,7 +337,7 @@ spice["fet_models"] = {"TT": [SPICE_MODEL_DIR + "/nom/pmos.sp", SPICE_MODEL_DIR "FT": [SPICE_MODEL_DIR + "/ff/pmos.sp", SPICE_MODEL_DIR + "/nom/nmos.sp"], "TF": [SPICE_MODEL_DIR + "/nom/pmos.sp", SPICE_MODEL_DIR + "/ff/nmos.sp"], } - + #spice stimulus related variables spice["feasible_period"] = 10 # estimated feasible period in ns @@ -371,7 +371,7 @@ spice["dff_leakage"] = 1 # Leakage power of flop in nW spice["default_event_frequency"] = 100 # Default event activity of every gate. MHz #Logical Effort relative values for the Handmade cells -parameter["le_tau"] = 18.17 #In pico-seconds. +parameter["le_tau"] = 18.17 #In pico-seconds. parameter["min_inv_para_delay"] = 2.07 #In relative delay units parameter["cap_relative_per_ff"] = .91 #Units of Relative Capacitance/ Femto-Farad parameter["dff_clk_cin"] = 27.5 #In relative capacitance units From cb3e9517bba77cb8dc92e4e73ca14b7d78f475ec Mon Sep 17 00:00:00 2001 From: mrg Date: Tue, 3 Nov 2020 07:06:01 -0800 Subject: [PATCH 33/67] Use cell_properties to override cell names --- compiler/base/design.py | 10 +- compiler/custom/dff.py | 3 +- compiler/modules/custom_cell.py | 271 ------------------------------ compiler/modules/dff_buf.py | 3 +- compiler/tests/04_dff_buf_test.py | 4 +- 5 files changed, 12 insertions(+), 279 deletions(-) delete mode 100644 compiler/modules/custom_cell.py diff --git a/compiler/base/design.py b/compiler/base/design.py index 79e85ab2..93169f6a 100644 --- a/compiler/base/design.py +++ b/compiler/base/design.py @@ -9,19 +9,25 @@ from hierarchy_design import hierarchy_design from utils import round_to_grid import contact from tech import preferred_directions +from tech import cell_properties as props from globals import OPTS import re +import debug class design(hierarchy_design): """ This is the same as the hierarchy_design class except it contains some DRC/layer constants and analytical models for other modules to reuse. - """ def __init__(self, name, cell_name=None): - if not cell_name: + # This allows us to use different GDS/spice circuits for hard cells instead of the default ones + # Except bitcell names are generated automatically by the globals.py setup_bitcells routines + # depending on the number of ports. + if name in props.names: + cell_name = props.names[name] + elif not cell_name: cell_name = name super().__init__(name, cell_name) diff --git a/compiler/custom/dff.py b/compiler/custom/dff.py index c05c47ff..2336ec74 100644 --- a/compiler/custom/dff.py +++ b/compiler/custom/dff.py @@ -6,7 +6,7 @@ # All rights reserved. # import design -from tech import GDS, layer, spice, parameter +from tech import GDS, layer, spice from tech import cell_properties as props import utils @@ -53,7 +53,6 @@ class dff(design.design): def calculate_effective_capacitance(self, load): """Computes effective capacitance. Results in fF""" - from tech import parameter c_load = load c_para = spice["dff_out_cap"]#ff transition_prob = 0.5 diff --git a/compiler/modules/custom_cell.py b/compiler/modules/custom_cell.py deleted file mode 100644 index 11312cd4..00000000 --- a/compiler/modules/custom_cell.py +++ /dev/null @@ -1,271 +0,0 @@ -# See LICENSE for licensing information. -# -# Copyright (c) 2016-2019 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) -# All rights reserved. -# -import design -import debug -from tech import drc -from sram_factory import factory -from vector import vector -from globals import OPTS - - -class custom_cell(design.design): - """ - Array of tristate drivers to write to the bitlines through the column mux. - Dynamically generated write driver array of all bitlines. - """ - - def __init__(self, name, pins, mod): - - design.design.__init__(self, name) - debug.info(1, "Creating {0}".format(self.name)) - self.add_comment("columns: {0}".format(columns)) - self.add_comment("word_size {0}".format(word_size)) - - self.columns = columns - self.word_size = word_size - self.write_size = write_size - self.column_offset = column_offset - self.words_per_row = int(columns / word_size) - if not num_spare_cols: - self.num_spare_cols = 0 - else: - self.num_spare_cols = num_spare_cols - - if self.write_size: - self.num_wmasks = int(self.word_size / self.write_size) - - self.create_netlist() - if not OPTS.netlist_only: - self.create_layout() - - def get_bl_name(self): - bl_name = "bl" - return bl_name - - def get_br_name(self): - br_name = "br" - return br_name - - @property - def data_name(self): - return "data" - - @property - def en_name(self): - return "en" - - def create_netlist(self): - self.add_modules() - self.add_pins() - self.create_write_array() - - def create_layout(self): - - if self.bitcell.width > self.driver.width: - self.width = (self.columns + self.num_spare_cols) * self.bitcell.width - self.width_regular_cols = self.columns * self.bitcell.width - self.single_col_width = self.bitcell.width - else: - self.width = (self.columns + self.num_spare_cols) * self.driver.width - self.width_regular_cols = self.columns * self.driver.width - self.single_col_width = self.driver.width - self.height = self.driver.height - - self.place_write_array() - self.add_layout_pins() - self.add_boundary() - self.DRC_LVS() - - def add_pins(self): - for i in range(self.word_size + self.num_spare_cols): - self.add_pin(self.data_name + "_{0}".format(i), "INPUT") - for i in range(self.word_size + self.num_spare_cols): - self.add_pin(self.get_bl_name() + "_{0}".format(i), "OUTPUT") - self.add_pin(self.get_br_name() + "_{0}".format(i), "OUTPUT") - if self.write_size: - for i in range(self.num_wmasks + self.num_spare_cols): - self.add_pin(self.en_name + "_{0}".format(i), "INPUT") - elif self.num_spare_cols and not self.write_size: - for i in range(self.num_spare_cols + 1): - self.add_pin(self.en_name + "_{0}".format(i), "INPUT") - else: - self.add_pin(self.en_name, "INPUT") - self.add_pin("vdd", "POWER") - self.add_pin("gnd", "GROUND") - - def add_modules(self): - self.driver = factory.create(module_type="write_driver") - self.add_mod(self.driver) - - # This is just used for measurements, - # so don't add the module - self.bitcell = factory.create(module_type="bitcell") - - def create_write_array(self): - self.driver_insts = {} - w = 0 - windex=0 - for i in range(0, self.columns, self.words_per_row): - name = "write_driver{}".format(i) - index = int(i / self.words_per_row) - self.driver_insts[index]=self.add_inst(name=name, - mod=self.driver) - - if self.write_size: - self.connect_inst([self.data_name + "_{0}".format(index), - self.get_bl_name() + "_{0}".format(index), - self.get_br_name() + "_{0}".format(index), - self.en_name + "_{0}".format(windex), "vdd", "gnd"]) - w+=1 - # when w equals write size, the next en pin can be connected since we are now at the next wmask bit - if w == self.write_size: - w = 0 - windex+=1 - - elif self.num_spare_cols and not self.write_size: - self.connect_inst([self.data_name + "_{0}".format(index), - self.get_bl_name() + "_{0}".format(index), - self.get_br_name() + "_{0}".format(index), - self.en_name + "_{0}".format(0), "vdd", "gnd"]) - - else: - self.connect_inst([self.data_name + "_{0}".format(index), - self.get_bl_name() + "_{0}".format(index), - self.get_br_name() + "_{0}".format(index), - self.en_name, "vdd", "gnd"]) - - for i in range(self.num_spare_cols): - index = self.word_size + i - if self.write_size: - offset = self.num_wmasks - else: - offset = 1 - name = "write_driver{}".format(self.columns + i) - self.driver_insts[index]=self.add_inst(name=name, - mod=self.driver) - - self.connect_inst([self.data_name + "_{0}".format(index), - self.get_bl_name() + "_{0}".format(index), - self.get_br_name() + "_{0}".format(index), - self.en_name + "_{0}".format(i + offset), "vdd", "gnd"]) - - def place_write_array(self): - from tech import cell_properties - if self.bitcell.width > self.driver.width: - self.driver_spacing = self.bitcell.width - else: - self.driver_spacing = self.driver.width - for i in range(0, self.columns, self.words_per_row): - index = int(i / self.words_per_row) - xoffset = i * self.driver_spacing - - if cell_properties.bitcell.mirror.y and (i + self.column_offset) % 2: - mirror = "MY" - xoffset = xoffset + self.driver.width - else: - mirror = "" - - base = vector(xoffset, 0) - self.driver_insts[index].place(offset=base, mirror=mirror) - - # place spare write drivers (if spare columns are specified) - for i in range(self.num_spare_cols): - index = self.word_size + i - xoffset = (self.columns + i) * self.driver_spacing - - if cell_properties.bitcell.mirror.y and (i + self.column_offset) % 2: - mirror = "MY" - xoffset = xoffset + self.driver.width - else: - mirror = "" - - base = vector(xoffset, 0) - self.driver_insts[index].place(offset=base, mirror=mirror) - - def add_layout_pins(self): - for i in range(self.word_size + self.num_spare_cols): - inst = self.driver_insts[i] - din_pin = inst.get_pin(inst.mod.din_name) - self.add_layout_pin(text=self.data_name + "_{0}".format(i), - layer=din_pin.layer, - offset=din_pin.ll(), - width=din_pin.width(), - height=din_pin.height()) - bl_pin = inst.get_pin(inst.mod.get_bl_names()) - self.add_layout_pin(text=self.get_bl_name() + "_{0}".format(i), - layer=bl_pin.layer, - offset=bl_pin.ll(), - width=bl_pin.width(), - height=bl_pin.height()) - - br_pin = inst.get_pin(inst.mod.get_br_names()) - self.add_layout_pin(text=self.get_br_name() + "_{0}".format(i), - layer=br_pin.layer, - offset=br_pin.ll(), - width=br_pin.width(), - height=br_pin.height()) - - for n in ["vdd", "gnd"]: - pin_list = self.driver_insts[i].get_pins(n) - for pin in pin_list: - self.add_power_pin(name=n, - loc=pin.center(), - directions=("V", "V"), - start_layer=pin.layer) - if self.write_size: - for bit in range(self.num_wmasks): - inst = self.driver_insts[bit * self.write_size] - en_pin = inst.get_pin(inst.mod.en_name) - # Determine width of wmask modified en_pin with/without col mux - wmask_en_len = self.words_per_row * (self.write_size * self.driver_spacing) - if (self.words_per_row == 1): - en_gap = self.driver_spacing - en_pin.width() - else: - en_gap = self.driver_spacing - - self.add_layout_pin(text=self.en_name + "_{0}".format(bit), - layer=en_pin.layer, - offset=en_pin.ll(), - width=wmask_en_len - en_gap, - height=en_pin.height()) - - for i in range(self.num_spare_cols): - inst = self.driver_insts[self.word_size + i] - en_pin = inst.get_pin(inst.mod.en_name) - self.add_layout_pin(text=self.en_name + "_{0}".format(i + self.num_wmasks), - layer="m1", - offset=en_pin.lr() + vector(-drc("minwidth_m1"),0)) - - elif self.num_spare_cols and not self.write_size: - # shorten enable rail to accomodate those for spare write drivers - inst = self.driver_insts[0] - en_pin = inst.get_pin(inst.mod.en_name) - self.add_layout_pin(text=self.en_name + "_{0}".format(0), - layer="m1", - offset=en_pin.ll(), - width=self.width_regular_cols - self.words_per_row * en_pin.width()) - - # individual enables for every spare write driver - for i in range(self.num_spare_cols): - inst = self.driver_insts[self.word_size + i] - en_pin = inst.get_pin(inst.mod.en_name) - self.add_layout_pin(text=self.en_name + "_{0}".format(i + 1), - layer="m1", - offset=en_pin.lr() + vector(-drc("minwidth_m1"),0)) - - else: - inst = self.driver_insts[0] - self.add_layout_pin(text=self.en_name, - layer="m1", - offset=inst.get_pin(inst.mod.en_name).ll().scale(0, 1), - width=self.width) - - def get_w_en_cin(self): - """Get the relative capacitance of all the enable connections in the bank""" - # The enable is connected to a nand2 for every row. - return self.driver.get_w_en_cin() * len(self.driver_insts) diff --git a/compiler/modules/dff_buf.py b/compiler/modules/dff_buf.py index 32d07958..b218a9bb 100644 --- a/compiler/modules/dff_buf.py +++ b/compiler/modules/dff_buf.py @@ -7,7 +7,7 @@ # import debug import design -from tech import parameter, layer +from tech import layer from tech import cell_properties as props from vector import vector from globals import OPTS @@ -23,7 +23,6 @@ class dff_buf(design.design): unique_id = 1 def __init__(self, inv1_size=2, inv2_size=4, name=""): - if name=="": name = "dff_buf_{0}".format(dff_buf.unique_id) dff_buf.unique_id += 1 diff --git a/compiler/tests/04_dff_buf_test.py b/compiler/tests/04_dff_buf_test.py index 070cdb56..748e38a0 100755 --- a/compiler/tests/04_dff_buf_test.py +++ b/compiler/tests/04_dff_buf_test.py @@ -8,19 +8,19 @@ # import unittest from testutils import * -import sys,os +import sys, os sys.path.append(os.getenv("OPENRAM_HOME")) import globals from globals import OPTS from sram_factory import factory import debug + class dff_buf_test(openram_test): def runTest(self): config_file = "{}/tests/configs/config".format(os.getenv("OPENRAM_HOME")) globals.init_openram(config_file) - debug.info(2, "Testing dff_buf 4x 8x") a = factory.create(module_type="dff_buf", inv1_size=4, inv2_size=8) self.local_check(a) From 87419bd640505ddf496fed07a968346cd5b44088 Mon Sep 17 00:00:00 2001 From: mrg Date: Tue, 3 Nov 2020 11:30:40 -0800 Subject: [PATCH 34/67] Fix bitcell and pbitcell with different cell names --- compiler/bitcells/bitcell_1w_1r.py | 4 ++-- compiler/bitcells/dummy_pbitcell.py | 6 ++++-- compiler/bitcells/pbitcell.py | 6 ++++-- compiler/bitcells/replica_pbitcell.py | 6 ++++-- compiler/globals.py | 14 +++++++++++++- compiler/tests/18_port_data_spare_cols_test.py | 7 ++++--- compiler/tests/19_psingle_bank_test.py | 7 ++++--- compiler/tests/19_single_bank_1w_1r_test.py | 3 ++- compiler/tests/19_single_bank_test.py | 3 ++- compiler/tests/20_psram_1bank_2mux_1rw_1w_test.py | 4 ++-- .../tests/20_psram_1bank_2mux_1rw_1w_wmask_test.py | 6 ++---- compiler/tests/20_psram_1bank_2mux_1w_1r_test.py | 4 ++-- compiler/tests/20_psram_1bank_2mux_test.py | 4 ++-- compiler/tests/20_psram_1bank_4mux_1rw_1r_test.py | 3 ++- .../20_sram_1bank_2mux_1rw_1r_spare_cols_test.py | 3 ++- compiler/tests/20_sram_1bank_2mux_1rw_1r_test.py | 3 ++- .../20_sram_1bank_2mux_1w_1r_spare_cols_test.py | 4 ++-- compiler/tests/20_sram_1bank_2mux_1w_1r_test.py | 4 ++-- compiler/tests/20_sram_1bank_2mux_global_test.py | 1 - compiler/tests/20_sram_1bank_2mux_test.py | 4 ++-- .../20_sram_1bank_2mux_wmask_spare_cols_test.py | 3 +-- compiler/tests/20_sram_1bank_2mux_wmask_test.py | 2 -- .../tests/20_sram_1bank_32b_1024_wmask_test.py | 1 - compiler/tests/20_sram_1bank_4mux_test.py | 4 ++-- compiler/tests/20_sram_1bank_8mux_1rw_1r_test.py | 3 ++- compiler/tests/20_sram_1bank_8mux_test.py | 4 ++-- .../20_sram_1bank_nomux_1rw_1r_spare_cols_test.py | 3 ++- compiler/tests/20_sram_1bank_nomux_1rw_1r_test.py | 3 ++- .../tests/20_sram_1bank_nomux_spare_cols_test.py | 2 -- compiler/tests/20_sram_1bank_nomux_test.py | 4 ++-- .../20_sram_1bank_nomux_wmask_sparecols_test.py | 1 - compiler/tests/20_sram_1bank_nomux_wmask_test.py | 2 -- compiler/tests/20_sram_2bank_test.py | 3 ++- technology/scn4m_subm/tech/setup.tcl | 4 ++++ 34 files changed, 78 insertions(+), 57 deletions(-) diff --git a/compiler/bitcells/bitcell_1w_1r.py b/compiler/bitcells/bitcell_1w_1r.py index 06a862e4..02b6e768 100644 --- a/compiler/bitcells/bitcell_1w_1r.py +++ b/compiler/bitcells/bitcell_1w_1r.py @@ -31,10 +31,10 @@ class bitcell_1w_1r(bitcell_base.bitcell_base): "INPUT", "INPUT", "POWER", "GROUND"] storage_nets = ['Q', 'Q_bar'] - def __init__(self, name, cell_name): + def __init__(self, name, cell_name=None): if not cell_name: cell_name = OPTS.bitcell_name - super().__init__(self, name, cell_name) + super().__init__(name, cell_name) debug.info(2, "Create bitcell with 1W and 1R Port") self.nets_match = self.do_nets_exist(self.storage_nets) diff --git a/compiler/bitcells/dummy_pbitcell.py b/compiler/bitcells/dummy_pbitcell.py index 9b6078c7..4ece44c4 100644 --- a/compiler/bitcells/dummy_pbitcell.py +++ b/compiler/bitcells/dummy_pbitcell.py @@ -17,13 +17,15 @@ class dummy_pbitcell(design.design): Creates a replica bitcell using pbitcell """ - def __init__(self, name): + def __init__(self, name, cell_name=None): + if not cell_name: + cell_name = name self.num_rw_ports = OPTS.num_rw_ports self.num_w_ports = OPTS.num_w_ports self.num_r_ports = OPTS.num_r_ports self.total_ports = self.num_rw_ports + self.num_w_ports + self.num_r_ports - design.design.__init__(self, name, name) + design.design.__init__(self, name, cell_name) debug.info(1, "create a dummy bitcell using pbitcell with {0} rw ports, {1} w ports and {2} r ports".format(self.num_rw_ports, self.num_w_ports, self.num_r_ports)) diff --git a/compiler/bitcells/pbitcell.py b/compiler/bitcells/pbitcell.py index c836e083..e2cdd032 100644 --- a/compiler/bitcells/pbitcell.py +++ b/compiler/bitcells/pbitcell.py @@ -21,7 +21,9 @@ class pbitcell(bitcell_base.bitcell_base): with a variable number of read/write, write, and read ports """ - def __init__(self, name, replica_bitcell=False, dummy_bitcell=False): + def __init__(self, name, cell_name=None, replica_bitcell=False, dummy_bitcell=False): + if not cell_name: + cell_name = name self.num_rw_ports = OPTS.num_rw_ports self.num_w_ports = OPTS.num_w_ports self.num_r_ports = OPTS.num_r_ports @@ -30,7 +32,7 @@ class pbitcell(bitcell_base.bitcell_base): self.replica_bitcell = replica_bitcell self.dummy_bitcell = dummy_bitcell - bitcell_base.bitcell_base.__init__(self, name, name, hard_cell=False) + bitcell_base.bitcell_base.__init__(self, name, cell_name, hard_cell=False) fmt_str = "{0} rw ports, {1} w ports and {2} r ports" info_string = fmt_str.format(self.num_rw_ports, self.num_w_ports, diff --git a/compiler/bitcells/replica_pbitcell.py b/compiler/bitcells/replica_pbitcell.py index 04b072ba..710cf81d 100644 --- a/compiler/bitcells/replica_pbitcell.py +++ b/compiler/bitcells/replica_pbitcell.py @@ -17,13 +17,15 @@ class replica_pbitcell(design.design): Creates a replica bitcell using pbitcell """ - def __init__(self, name): + def __init__(self, name, cell_name=None): + if not cell_name: + cell_name = name self.num_rw_ports = OPTS.num_rw_ports self.num_w_ports = OPTS.num_w_ports self.num_r_ports = OPTS.num_r_ports self.total_ports = self.num_rw_ports + self.num_w_ports + self.num_r_ports - design.design.__init__(self, name, name) + design.design.__init__(self, name, cell_name) debug.info(1, "create a replica bitcell using pbitcell with {0} rw ports, {1} w ports and {2} r ports".format(self.num_rw_ports, self.num_w_ports, self.num_r_ports)) diff --git a/compiler/globals.py b/compiler/globals.py index 458ec04e..9e05efcb 100644 --- a/compiler/globals.py +++ b/compiler/globals.py @@ -232,7 +232,14 @@ def setup_bitcell(): OPTS.replica_bitcell = "replica_" + OPTS.bitcell OPTS.replica_bitcell_name = "replica_" + OPTS.bitcell_name - + elif (OPTS.bitcell == "pbitcell"): + OPTS.bitcell = "pbitcell" + OPTS.bitcell_name = "pbitcell" + OPTS.dummy_bitcell = "dummy_pbitcell" + OPTS.dummy_bitcell_name = "dummy_pbitcell" + OPTS.replica_bitcell = "replica_pbitcell" + OPTS.replica_bitcell_name = "replica_pbitcell" + # See if bitcell exists try: __import__(OPTS.bitcell) @@ -241,6 +248,11 @@ def setup_bitcell(): # or its custom replica bitcell # Use the pbitcell (and give a warning if not in unit test mode) OPTS.bitcell = "pbitcell" + OPTS.bitcell_name = "pbitcell" + OPTS.dummy_bitcell = "dummy_pbitcell" + OPTS.dummy_bitcell_name = "dummy_pbitcell" + OPTS.replica_bitcell = "replica_pbitcell" + OPTS.replica_bitcell_name = "replica_pbitcell" if not OPTS.is_unit_test: debug.warning("Using the parameterized bitcell which may have suboptimal density.") debug.info(1, "Using bitcell: {}".format(OPTS.bitcell)) diff --git a/compiler/tests/18_port_data_spare_cols_test.py b/compiler/tests/18_port_data_spare_cols_test.py index 953199d6..0ec87d5f 100755 --- a/compiler/tests/18_port_data_spare_cols_test.py +++ b/compiler/tests/18_port_data_spare_cols_test.py @@ -6,13 +6,14 @@ # import unittest from testutils import * -import sys,os +import sys, os sys.path.append(os.getenv("OPENRAM_HOME")) import globals from globals import OPTS from sram_factory import factory import debug + class port_data_spare_cols_test(openram_test): def runTest(self): @@ -58,11 +59,11 @@ class port_data_spare_cols_test(openram_test): a = factory.create("port_data", sram_config=c, port=0) self.local_check(a) - OPTS.bitcell = "bitcell_1w_1r" OPTS.num_rw_ports = 0 OPTS.num_r_ports = 1 OPTS.num_w_ports = 1 - + globals.setup_bitcell() + c.num_words=16 c.words_per_row=1 factory.reset() diff --git a/compiler/tests/19_psingle_bank_test.py b/compiler/tests/19_psingle_bank_test.py index d666155d..5c6bc418 100755 --- a/compiler/tests/19_psingle_bank_test.py +++ b/compiler/tests/19_psingle_bank_test.py @@ -8,14 +8,14 @@ # import unittest from testutils import * -import sys,os +import sys, os sys.path.append(os.getenv("OPENRAM_HOME")) import globals from globals import OPTS from sram_factory import factory import debug -#@unittest.skip("SKIPPING 19_psingle_bank_test") + class psingle_bank_test(openram_test): def runTest(self): @@ -30,7 +30,8 @@ class psingle_bank_test(openram_test): OPTS.num_rw_ports = 1 OPTS.num_w_ports = 0 OPTS.num_r_ports = 0 - + globals.setup_bitcell() + c = sram_config(word_size=4, num_words=16) diff --git a/compiler/tests/19_single_bank_1w_1r_test.py b/compiler/tests/19_single_bank_1w_1r_test.py index 02846cfd..1eef7c93 100755 --- a/compiler/tests/19_single_bank_1w_1r_test.py +++ b/compiler/tests/19_single_bank_1w_1r_test.py @@ -8,13 +8,14 @@ # import unittest from testutils import * -import sys,os +import sys, os sys.path.append(os.getenv("OPENRAM_HOME")) import globals from globals import OPTS from sram_factory import factory import debug + class single_bank_1w_1r_test(openram_test): def runTest(self): diff --git a/compiler/tests/19_single_bank_test.py b/compiler/tests/19_single_bank_test.py index e7d4c328..db6776e3 100755 --- a/compiler/tests/19_single_bank_test.py +++ b/compiler/tests/19_single_bank_test.py @@ -8,13 +8,14 @@ # import unittest from testutils import * -import sys,os +import sys, os sys.path.append(os.getenv("OPENRAM_HOME")) import globals from globals import OPTS from sram_factory import factory import debug + class single_bank_test(openram_test): def runTest(self): diff --git a/compiler/tests/20_psram_1bank_2mux_1rw_1w_test.py b/compiler/tests/20_psram_1bank_2mux_1rw_1w_test.py index 5d99ea06..1ba44598 100755 --- a/compiler/tests/20_psram_1bank_2mux_1rw_1w_test.py +++ b/compiler/tests/20_psram_1bank_2mux_1rw_1w_test.py @@ -8,14 +8,14 @@ # import unittest from testutils import * -import sys,os +import sys, os sys.path.append(os.getenv("OPENRAM_HOME")) import globals from globals import OPTS from sram_factory import factory import debug -#@unittest.skip("SKIPPING 20_psram_1bank_test, multiport layout not complete") + class psram_1bank_2mux_1rw_1w_test(openram_test): def runTest(self): diff --git a/compiler/tests/20_psram_1bank_2mux_1rw_1w_wmask_test.py b/compiler/tests/20_psram_1bank_2mux_1rw_1w_wmask_test.py index 0d236bc2..23b2d490 100755 --- a/compiler/tests/20_psram_1bank_2mux_1rw_1w_wmask_test.py +++ b/compiler/tests/20_psram_1bank_2mux_1rw_1w_wmask_test.py @@ -9,7 +9,6 @@ import unittest from testutils import * import sys, os - sys.path.append(os.getenv("OPENRAM_HOME")) import globals from globals import OPTS @@ -26,12 +25,11 @@ class psram_1bank_2mux_1rw_1w_wmask_test(openram_test): from sram_config import sram_config OPTS.bitcell = "pbitcell" - OPTS.replica_bitcell = "replica_pbitcell" - OPTS.dummy_bitcell = "dummy_pbitcell" OPTS.num_rw_ports = 1 OPTS.num_w_ports = 1 OPTS.num_r_ports = 0 - + globals.setup_bitcell() + c = sram_config(word_size=8, write_size=4, num_words=32, diff --git a/compiler/tests/20_psram_1bank_2mux_1w_1r_test.py b/compiler/tests/20_psram_1bank_2mux_1w_1r_test.py index 49b84cbe..1e82ea4f 100755 --- a/compiler/tests/20_psram_1bank_2mux_1w_1r_test.py +++ b/compiler/tests/20_psram_1bank_2mux_1w_1r_test.py @@ -8,14 +8,14 @@ # import unittest from testutils import * -import sys,os +import sys, os sys.path.append(os.getenv("OPENRAM_HOME")) import globals from globals import OPTS from sram_factory import factory import debug -#@unittest.skip("SKIPPING 20_psram_1bank_2mux_1w_1r_test, odd supply routing error") + class psram_1bank_2mux_1w_1r_test(openram_test): def runTest(self): diff --git a/compiler/tests/20_psram_1bank_2mux_test.py b/compiler/tests/20_psram_1bank_2mux_test.py index 421b08be..7ce30ecf 100755 --- a/compiler/tests/20_psram_1bank_2mux_test.py +++ b/compiler/tests/20_psram_1bank_2mux_test.py @@ -8,14 +8,14 @@ # import unittest from testutils import * -import sys,os +import sys, os sys.path.append(os.getenv("OPENRAM_HOME")) import globals from globals import OPTS from sram_factory import factory import debug -#@unittest.skip("SKIPPING 20_psram_1bank_2mux_test, wide metal supply routing error") + class psram_1bank_2mux_test(openram_test): def runTest(self): diff --git a/compiler/tests/20_psram_1bank_4mux_1rw_1r_test.py b/compiler/tests/20_psram_1bank_4mux_1rw_1r_test.py index 519517e7..45de93e5 100755 --- a/compiler/tests/20_psram_1bank_4mux_1rw_1r_test.py +++ b/compiler/tests/20_psram_1bank_4mux_1rw_1r_test.py @@ -8,13 +8,14 @@ # import unittest from testutils import * -import sys,os +import sys, os sys.path.append(os.getenv("OPENRAM_HOME")) import globals from globals import OPTS from sram_factory import factory import debug + class psram_1bank_4mux_1rw_1r_test(openram_test): def runTest(self): diff --git a/compiler/tests/20_sram_1bank_2mux_1rw_1r_spare_cols_test.py b/compiler/tests/20_sram_1bank_2mux_1rw_1r_spare_cols_test.py index fe8d42ab..8887ca5b 100755 --- a/compiler/tests/20_sram_1bank_2mux_1rw_1r_spare_cols_test.py +++ b/compiler/tests/20_sram_1bank_2mux_1rw_1r_spare_cols_test.py @@ -8,13 +8,14 @@ # import unittest from testutils import * -import sys,os +import sys, os sys.path.append(os.getenv("OPENRAM_HOME")) import globals from globals import OPTS from sram_factory import factory import debug + class sram_1bank_2mux_1rw_1r_spare_cols_test(openram_test): def runTest(self): diff --git a/compiler/tests/20_sram_1bank_2mux_1rw_1r_test.py b/compiler/tests/20_sram_1bank_2mux_1rw_1r_test.py index 9d2dc853..bac2fd5f 100755 --- a/compiler/tests/20_sram_1bank_2mux_1rw_1r_test.py +++ b/compiler/tests/20_sram_1bank_2mux_1rw_1r_test.py @@ -8,13 +8,14 @@ # import unittest from testutils import * -import sys,os +import sys, os sys.path.append(os.getenv("OPENRAM_HOME")) import globals from globals import OPTS from sram_factory import factory import debug + class sram_1bank_2mux_1rw_1r_test(openram_test): def runTest(self): diff --git a/compiler/tests/20_sram_1bank_2mux_1w_1r_spare_cols_test.py b/compiler/tests/20_sram_1bank_2mux_1w_1r_spare_cols_test.py index 40c208ee..83c8cc75 100755 --- a/compiler/tests/20_sram_1bank_2mux_1w_1r_spare_cols_test.py +++ b/compiler/tests/20_sram_1bank_2mux_1w_1r_spare_cols_test.py @@ -8,14 +8,14 @@ # import unittest from testutils import * -import sys,os +import sys, os sys.path.append(os.getenv("OPENRAM_HOME")) import globals from globals import OPTS from sram_factory import factory import debug -#@unittest.skip("SKIPPING 20_sram_1bank_2mux_1w_1r_spare_cols_test, odd supply routing error") + class sram_1bank_2mux_1w_1r_spare_cols_test(openram_test): def runTest(self): diff --git a/compiler/tests/20_sram_1bank_2mux_1w_1r_test.py b/compiler/tests/20_sram_1bank_2mux_1w_1r_test.py index 754ceed3..53dc4a8d 100755 --- a/compiler/tests/20_sram_1bank_2mux_1w_1r_test.py +++ b/compiler/tests/20_sram_1bank_2mux_1w_1r_test.py @@ -8,14 +8,14 @@ # import unittest from testutils import * -import sys,os +import sys, os sys.path.append(os.getenv("OPENRAM_HOME")) import globals from globals import OPTS from sram_factory import factory import debug -#@unittest.skip("SKIPPING 20_psram_1bank_2mux_1w_1r_test, odd supply routing error") + class psram_1bank_2mux_1w_1r_test(openram_test): def runTest(self): diff --git a/compiler/tests/20_sram_1bank_2mux_global_test.py b/compiler/tests/20_sram_1bank_2mux_global_test.py index cb8571da..93caeb86 100755 --- a/compiler/tests/20_sram_1bank_2mux_global_test.py +++ b/compiler/tests/20_sram_1bank_2mux_global_test.py @@ -16,7 +16,6 @@ from sram_factory import factory import debug -#@unittest.skip("SKIPPING 20_sram_1bank_4mux_test") class sram_1bank_2mux_global_test(openram_test): def runTest(self): diff --git a/compiler/tests/20_sram_1bank_2mux_test.py b/compiler/tests/20_sram_1bank_2mux_test.py index 536ba683..2ce4704b 100755 --- a/compiler/tests/20_sram_1bank_2mux_test.py +++ b/compiler/tests/20_sram_1bank_2mux_test.py @@ -8,14 +8,14 @@ # import unittest from testutils import * -import sys,os +import sys, os sys.path.append(os.getenv("OPENRAM_HOME")) import globals from globals import OPTS from sram_factory import factory import debug -#@unittest.skip("SKIPPING 20_sram_1bank_2mux_test") + class sram_1bank_2mux_test(openram_test): def runTest(self): diff --git a/compiler/tests/20_sram_1bank_2mux_wmask_spare_cols_test.py b/compiler/tests/20_sram_1bank_2mux_wmask_spare_cols_test.py index 0488b93e..6a513288 100755 --- a/compiler/tests/20_sram_1bank_2mux_wmask_spare_cols_test.py +++ b/compiler/tests/20_sram_1bank_2mux_wmask_spare_cols_test.py @@ -9,14 +9,13 @@ import unittest from testutils import * import sys, os - sys.path.append(os.getenv("OPENRAM_HOME")) import globals from globals import OPTS from sram_factory import factory import debug -# @unittest.skip("SKIPPING 20_sram_1bank_2mux_wmask_spare_cols_test") + class sram_1bank_2mux_wmask_spare_cols_test(openram_test): def runTest(self): diff --git a/compiler/tests/20_sram_1bank_2mux_wmask_test.py b/compiler/tests/20_sram_1bank_2mux_wmask_test.py index 50bd41dc..fc7f2a8d 100755 --- a/compiler/tests/20_sram_1bank_2mux_wmask_test.py +++ b/compiler/tests/20_sram_1bank_2mux_wmask_test.py @@ -9,7 +9,6 @@ import unittest from testutils import * import sys, os - sys.path.append(os.getenv("OPENRAM_HOME")) import globals from globals import OPTS @@ -17,7 +16,6 @@ from sram_factory import factory import debug -# @unittest.skip("SKIPPING 20_sram_1bank_2mux_wmask_test") class sram_1bank_2mux_wmask_test(openram_test): def runTest(self): diff --git a/compiler/tests/20_sram_1bank_32b_1024_wmask_test.py b/compiler/tests/20_sram_1bank_32b_1024_wmask_test.py index 05cb7c0d..7717242f 100755 --- a/compiler/tests/20_sram_1bank_32b_1024_wmask_test.py +++ b/compiler/tests/20_sram_1bank_32b_1024_wmask_test.py @@ -9,7 +9,6 @@ import unittest from testutils import * import sys, os - sys.path.append(os.getenv("OPENRAM_HOME")) import globals from globals import OPTS diff --git a/compiler/tests/20_sram_1bank_4mux_test.py b/compiler/tests/20_sram_1bank_4mux_test.py index e27fca71..f4791105 100755 --- a/compiler/tests/20_sram_1bank_4mux_test.py +++ b/compiler/tests/20_sram_1bank_4mux_test.py @@ -8,14 +8,14 @@ # import unittest from testutils import * -import sys,os +import sys, os sys.path.append(os.getenv("OPENRAM_HOME")) import globals from globals import OPTS from sram_factory import factory import debug -#@unittest.skip("SKIPPING 20_sram_1bank_4mux_test") + class sram_1bank_4mux_test(openram_test): def runTest(self): diff --git a/compiler/tests/20_sram_1bank_8mux_1rw_1r_test.py b/compiler/tests/20_sram_1bank_8mux_1rw_1r_test.py index 07be8e37..167602d7 100755 --- a/compiler/tests/20_sram_1bank_8mux_1rw_1r_test.py +++ b/compiler/tests/20_sram_1bank_8mux_1rw_1r_test.py @@ -8,13 +8,14 @@ # import unittest from testutils import * -import sys,os +import sys, os sys.path.append(os.getenv("OPENRAM_HOME")) import globals from globals import OPTS from sram_factory import factory import debug + class sram_1bank_8mux_1rw_1r_test(openram_test): def runTest(self): diff --git a/compiler/tests/20_sram_1bank_8mux_test.py b/compiler/tests/20_sram_1bank_8mux_test.py index 501fbe3d..5d65e02a 100755 --- a/compiler/tests/20_sram_1bank_8mux_test.py +++ b/compiler/tests/20_sram_1bank_8mux_test.py @@ -8,14 +8,14 @@ # import unittest from testutils import * -import sys,os +import sys, os sys.path.append(os.getenv("OPENRAM_HOME")) import globals from globals import OPTS from sram_factory import factory import debug -#@unittest.skip("SKIPPING 20_sram_1bank_8mux_test") + class sram_1bank_8mux_test(openram_test): def runTest(self): diff --git a/compiler/tests/20_sram_1bank_nomux_1rw_1r_spare_cols_test.py b/compiler/tests/20_sram_1bank_nomux_1rw_1r_spare_cols_test.py index e68f2401..4175f01d 100755 --- a/compiler/tests/20_sram_1bank_nomux_1rw_1r_spare_cols_test.py +++ b/compiler/tests/20_sram_1bank_nomux_1rw_1r_spare_cols_test.py @@ -8,13 +8,14 @@ # import unittest from testutils import * -import sys,os +import sys, os sys.path.append(os.getenv("OPENRAM_HOME")) import globals from globals import OPTS from sram_factory import factory import debug + class sram_1bank_nomux_1rw_1r_spare_cols_test(openram_test): def runTest(self): diff --git a/compiler/tests/20_sram_1bank_nomux_1rw_1r_test.py b/compiler/tests/20_sram_1bank_nomux_1rw_1r_test.py index 95544297..81b13c0e 100755 --- a/compiler/tests/20_sram_1bank_nomux_1rw_1r_test.py +++ b/compiler/tests/20_sram_1bank_nomux_1rw_1r_test.py @@ -8,13 +8,14 @@ # import unittest from testutils import * -import sys,os +import sys, os sys.path.append(os.getenv("OPENRAM_HOME")) import globals from globals import OPTS from sram_factory import factory import debug + class sram_1bank_nomux_1rw_1r_test(openram_test): def runTest(self): diff --git a/compiler/tests/20_sram_1bank_nomux_spare_cols_test.py b/compiler/tests/20_sram_1bank_nomux_spare_cols_test.py index 135518e3..410fedea 100755 --- a/compiler/tests/20_sram_1bank_nomux_spare_cols_test.py +++ b/compiler/tests/20_sram_1bank_nomux_spare_cols_test.py @@ -9,7 +9,6 @@ import unittest from testutils import * import sys, os - sys.path.append(os.getenv("OPENRAM_HOME")) import globals from globals import OPTS @@ -17,7 +16,6 @@ from sram_factory import factory import debug -# @unittest.skip("SKIPPING 20_sram_1bank_nomux_spare_cols_test") class sram_1bank_nomux_spare_cols_test(openram_test): def runTest(self): diff --git a/compiler/tests/20_sram_1bank_nomux_test.py b/compiler/tests/20_sram_1bank_nomux_test.py index 44d583b7..524172bd 100755 --- a/compiler/tests/20_sram_1bank_nomux_test.py +++ b/compiler/tests/20_sram_1bank_nomux_test.py @@ -8,14 +8,14 @@ # import unittest from testutils import * -import sys,os +import sys, os sys.path.append(os.getenv("OPENRAM_HOME")) import globals from globals import OPTS from sram_factory import factory import debug -#@unittest.skip("SKIPPING 20_sram_1bank_nomux_test") + class sram_1bank_nomux_test(openram_test): def runTest(self): diff --git a/compiler/tests/20_sram_1bank_nomux_wmask_sparecols_test.py b/compiler/tests/20_sram_1bank_nomux_wmask_sparecols_test.py index e22122bd..4d2e2c4a 100755 --- a/compiler/tests/20_sram_1bank_nomux_wmask_sparecols_test.py +++ b/compiler/tests/20_sram_1bank_nomux_wmask_sparecols_test.py @@ -9,7 +9,6 @@ import unittest from testutils import * import sys, os - sys.path.append(os.getenv("OPENRAM_HOME")) import globals from globals import OPTS diff --git a/compiler/tests/20_sram_1bank_nomux_wmask_test.py b/compiler/tests/20_sram_1bank_nomux_wmask_test.py index 24d7c97d..01282521 100755 --- a/compiler/tests/20_sram_1bank_nomux_wmask_test.py +++ b/compiler/tests/20_sram_1bank_nomux_wmask_test.py @@ -9,7 +9,6 @@ import unittest from testutils import * import sys, os - sys.path.append(os.getenv("OPENRAM_HOME")) import globals from globals import OPTS @@ -17,7 +16,6 @@ from sram_factory import factory import debug -# @unittest.skip("SKIPPING 20_sram_1bank_nomux_wmask_test") class sram_1bank_nomux_wmask_test(openram_test): def runTest(self): diff --git a/compiler/tests/20_sram_2bank_test.py b/compiler/tests/20_sram_2bank_test.py index 53f87eba..a6cb3e1a 100755 --- a/compiler/tests/20_sram_2bank_test.py +++ b/compiler/tests/20_sram_2bank_test.py @@ -8,13 +8,14 @@ # import unittest from testutils import * -import sys,os +import sys, os sys.path.append(os.getenv("OPENRAM_HOME")) import globals from globals import OPTS from sram_factory import factory import debug + @unittest.skip("Multibank is not working yet.") class sram_2bank_test(openram_test): diff --git a/technology/scn4m_subm/tech/setup.tcl b/technology/scn4m_subm/tech/setup.tcl index 40de5ac1..968c5c01 100644 --- a/technology/scn4m_subm/tech/setup.tcl +++ b/technology/scn4m_subm/tech/setup.tcl @@ -9,9 +9,13 @@ flatten class {-circuit1 dummy_cell_1w_1r} flatten class {-circuit1 dummy_pbitcell} flatten class {-circuit1 dummy_pbitcell_0} flatten class {-circuit1 dummy_pbitcell_1} +flatten class {-circuit1 dummy_pbitcell_2} +flatten class {-circuit1 dummy_pbitcell_3} flatten class {-circuit1 pbitcell} flatten class {-circuit1 pbitcell_0} flatten class {-circuit1 pbitcell_1} +flatten class {-circuit1 pbitcell_2} +flatten class {-circuit1 pbitcell_3} property {-circuit1 nfet} remove as ad ps pd property {-circuit1 pfet} remove as ad ps pd property {-circuit2 n} remove as ad ps pd From 1890385be1f115576b31277baf2104a194c8213c Mon Sep 17 00:00:00 2001 From: mrg Date: Tue, 3 Nov 2020 11:58:25 -0800 Subject: [PATCH 35/67] Use custom cells when needed. --- compiler/base/hierarchy_design.py | 2 +- compiler/base/hierarchy_layout.py | 1 + compiler/custom/dff.py | 6 +++--- compiler/custom/inv_dec.py | 7 +++---- compiler/custom/nand2_dec.py | 6 +++--- compiler/custom/nand3_dec.py | 6 +++--- compiler/custom/nand4_dec.py | 6 +++--- compiler/{modules => custom}/sense_amp.py | 4 ++-- compiler/custom/tri_gate.py | 6 +++--- compiler/custom/write_driver.py | 6 +++--- compiler/{custom => modules}/and2_dec.py | 0 compiler/{custom => modules}/and3_dec.py | 0 compiler/{custom => modules}/and4_dec.py | 0 13 files changed, 25 insertions(+), 25 deletions(-) rename compiler/{modules => custom}/sense_amp.py (96%) rename compiler/{custom => modules}/and2_dec.py (100%) rename compiler/{custom => modules}/and3_dec.py (100%) rename compiler/{custom => modules}/and4_dec.py (100%) diff --git a/compiler/base/hierarchy_design.py b/compiler/base/hierarchy_design.py index 271e39b8..28954834 100644 --- a/compiler/base/hierarchy_design.py +++ b/compiler/base/hierarchy_design.py @@ -33,7 +33,7 @@ class hierarchy_design(hierarchy_spice.spice, hierarchy_layout.layout): lvs_dir = OPTS.openram_tech + lvs_subdir + "/" if os.path.exists(lvs_dir): - self.lvs_file = lvs_dir + name + ".sp" + self.lvs_file = lvs_dir + cell_name + ".sp" else: self.lvs_file = self.sp_file diff --git a/compiler/base/hierarchy_layout.py b/compiler/base/hierarchy_layout.py index 8d76e2d2..67482f61 100644 --- a/compiler/base/hierarchy_layout.py +++ b/compiler/base/hierarchy_layout.py @@ -13,6 +13,7 @@ from tech import drc, GDS from tech import layer as techlayer from tech import layer_indices from tech import layer_stacks +from tech import preferred_directions import os from globals import OPTS from vector import vector diff --git a/compiler/custom/dff.py b/compiler/custom/dff.py index 2336ec74..38e3bd75 100644 --- a/compiler/custom/dff.py +++ b/compiler/custom/dff.py @@ -26,14 +26,14 @@ class dff(design.design): cell_size_layer = "boundary" def __init__(self, name="dff"): - design.design.__init__(self, name) + super().__init__(name) - (width, height) = utils.get_libcell_size(name, + (width, height) = utils.get_libcell_size(self.cell_name, GDS["unit"], layer[self.cell_size_layer]) pin_map = utils.get_libcell_pins(self.pin_names, - name, + self.cell_name, GDS["unit"]) self.width = width diff --git a/compiler/custom/inv_dec.py b/compiler/custom/inv_dec.py index 4fb76f7f..b150a38e 100644 --- a/compiler/custom/inv_dec.py +++ b/compiler/custom/inv_dec.py @@ -9,7 +9,6 @@ import design from tech import GDS, layer, spice, parameter import logical_effort import utils -import debug class inv_dec(design.design): @@ -22,14 +21,14 @@ class inv_dec(design.design): cell_size_layer = "boundary" def __init__(self, name="inv_dec", height=None): - design.design.__init__(self, name) + super().__init__(name) - (width, height) = utils.get_libcell_size(name, + (width, height) = utils.get_libcell_size(self.cell_name, GDS["unit"], layer[self.cell_size_layer]) pin_map = utils.get_libcell_pins(self.pin_names, - name, + self.cell_name, GDS["unit"]) self.width = width diff --git a/compiler/custom/nand2_dec.py b/compiler/custom/nand2_dec.py index 8a72bc5d..efec63b6 100644 --- a/compiler/custom/nand2_dec.py +++ b/compiler/custom/nand2_dec.py @@ -21,14 +21,14 @@ class nand2_dec(design.design): cell_size_layer = "boundary" def __init__(self, name="nand2_dec", height=None): - design.design.__init__(self, name) + super().__init__(name) - (width, height) = utils.get_libcell_size(name, + (width, height) = utils.get_libcell_size(self.cell_name, GDS["unit"], layer[self.cell_size_layer]) pin_map = utils.get_libcell_pins(self.pin_names, - name, + self.cell_name, GDS["unit"]) self.width = width diff --git a/compiler/custom/nand3_dec.py b/compiler/custom/nand3_dec.py index 621626fc..3fc2b949 100644 --- a/compiler/custom/nand3_dec.py +++ b/compiler/custom/nand3_dec.py @@ -21,14 +21,14 @@ class nand3_dec(design.design): cell_size_layer = "boundary" def __init__(self, name="nand3_dec", height=None): - design.design.__init__(self, name) + super().__init__(name) - (width, height) = utils.get_libcell_size(name, + (width, height) = utils.get_libcell_size(self.cell_name, GDS["unit"], layer[self.cell_size_layer]) pin_map = utils.get_libcell_pins(self.pin_names, - name, + self.cell_name, GDS["unit"]) self.width = width diff --git a/compiler/custom/nand4_dec.py b/compiler/custom/nand4_dec.py index c63239e8..abcfd2f3 100644 --- a/compiler/custom/nand4_dec.py +++ b/compiler/custom/nand4_dec.py @@ -21,14 +21,14 @@ class nand4_dec(design.design): cell_size_layer = "boundary" def __init__(self, name="nand4_dec", height=None): - design.design.__init__(self, name) + super().__init__(name) - (width, height) = utils.get_libcell_size(name, + (width, height) = utils.get_libcell_size(self.cell_name, GDS["unit"], layer[self.cell_size_layer]) pin_map = utils.get_libcell_pins(self.pin_names, - name, + self.cell_name, GDS["unit"]) self.width = width diff --git a/compiler/modules/sense_amp.py b/compiler/custom/sense_amp.py similarity index 96% rename from compiler/modules/sense_amp.py rename to compiler/custom/sense_amp.py index dac6baac..4e84b7fe 100644 --- a/compiler/modules/sense_amp.py +++ b/compiler/custom/sense_amp.py @@ -33,12 +33,12 @@ class sense_amp(design.design): super().__init__(name) debug.info(2, "Create sense_amp") - (width, height) = utils.get_libcell_size(name, + (width, height) = utils.get_libcell_size(self.cell_name, GDS["unit"], layer[self.cell_size_layer]) pin_map = utils.get_libcell_pins(self.pin_names, - name, + self.cell_name, GDS["unit"]) self.width = width diff --git a/compiler/custom/tri_gate.py b/compiler/custom/tri_gate.py index 81c7816f..476cc886 100644 --- a/compiler/custom/tri_gate.py +++ b/compiler/custom/tri_gate.py @@ -28,15 +28,15 @@ class tri_gate(design.design): if name=="": name = "tri{0}".format(tri_gate.unique_id) tri_gate.unique_id += 1 - design.design.__init__(self, name) + super().__init__(self, name) debug.info(2, "Create tri_gate") - (width, height) = utils.get_libcell_size(name, + (width, height) = utils.get_libcell_size(self.cell_name, GDS["unit"], layer[self.cell_size_layer]) pin_map = utils.get_libcell_pins(self.pin_names, - name, + self.cell_name, GDS["unit"]) self.width = width diff --git a/compiler/custom/write_driver.py b/compiler/custom/write_driver.py index ca86cf25..41375ab3 100644 --- a/compiler/custom/write_driver.py +++ b/compiler/custom/write_driver.py @@ -31,15 +31,15 @@ class write_driver(design.design): cell_size_layer = "boundary" def __init__(self, name): - design.design.__init__(self, name) + super().__init__(name) debug.info(2, "Create write_driver") - (width, height) = utils.get_libcell_size(name, + (width, height) = utils.get_libcell_size(self.cell_name, GDS["unit"], layer[self.cell_size_layer]) pin_map = utils.get_libcell_pins(self.pin_names, - name, + self.cell_name, GDS["unit"]) self.width = width diff --git a/compiler/custom/and2_dec.py b/compiler/modules/and2_dec.py similarity index 100% rename from compiler/custom/and2_dec.py rename to compiler/modules/and2_dec.py diff --git a/compiler/custom/and3_dec.py b/compiler/modules/and3_dec.py similarity index 100% rename from compiler/custom/and3_dec.py rename to compiler/modules/and3_dec.py diff --git a/compiler/custom/and4_dec.py b/compiler/modules/and4_dec.py similarity index 100% rename from compiler/custom/and4_dec.py rename to compiler/modules/and4_dec.py From a128e0501ec7fe29e9dd438c0e32af80e617463f Mon Sep 17 00:00:00 2001 From: mrg Date: Tue, 3 Nov 2020 12:10:18 -0800 Subject: [PATCH 36/67] Use cell_name in col and row caps too. --- compiler/bitcells/col_cap_bitcell_1rw_1r.py | 6 ++++-- compiler/bitcells/row_cap_bitcell_1rw_1r.py | 7 ++++--- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/compiler/bitcells/col_cap_bitcell_1rw_1r.py b/compiler/bitcells/col_cap_bitcell_1rw_1r.py index 119d51f8..1f2a30d0 100644 --- a/compiler/bitcells/col_cap_bitcell_1rw_1r.py +++ b/compiler/bitcells/col_cap_bitcell_1rw_1r.py @@ -22,9 +22,11 @@ class col_cap_bitcell_1rw_1r(bitcell_base.bitcell_base): type_list = ["OUTPUT", "OUTPUT", "OUTPUT", "OUTPUT", "POWER", "GROUND"] - def __init__(self, name="col_cap_cell_1rw_1r"): + def __init__(self, name="col_cap_cell_1rw_1r", cell_name=None): + if not cell_name: + cell_name = name # Ignore the name argument - bitcell_base.bitcell_base.__init__(self, name) + bitcell_base.bitcell_base.__init__(self, name, cell_name) debug.info(2, "Create col_cap bitcell 1rw+1r object") self.no_instances = True diff --git a/compiler/bitcells/row_cap_bitcell_1rw_1r.py b/compiler/bitcells/row_cap_bitcell_1rw_1r.py index fbe08a54..17de5d34 100644 --- a/compiler/bitcells/row_cap_bitcell_1rw_1r.py +++ b/compiler/bitcells/row_cap_bitcell_1rw_1r.py @@ -22,9 +22,10 @@ class row_cap_bitcell_1rw_1r(bitcell_base.bitcell_base): props.bitcell.cell_1rw1r.pin.gnd] type_list = ["INPUT", "INPUT", "GROUND"] - def __init__(self, name="row_cap_cell_1rw_1r"): - # Ignore the name argument - bitcell_base.bitcell_base.__init__(self, name) + def __init__(self, name="row_cap_cell_1rw_1r", cell_name=None): + if not cell_name: + cell_name = name + bitcell_base.bitcell_base.__init__(self, name, cell_name) debug.info(2, "Create row_cap bitcell 1rw+1r object") self.no_instances = True From 29ac541b28787a826a90c485a13f5c58d98a77f7 Mon Sep 17 00:00:00 2001 From: mrg Date: Tue, 3 Nov 2020 13:18:46 -0800 Subject: [PATCH 37/67] Refactor dynamic cell name to utilize base class --- compiler/base/custom_cell_properties.py | 9 +++++++++ compiler/bitcells/bitcell.py | 7 ++----- compiler/bitcells/bitcell_1rw_1r.py | 7 ++----- compiler/bitcells/bitcell_1w_1r.py | 7 ++----- compiler/bitcells/bitcell_base.py | 8 ++++---- compiler/bitcells/dummy_bitcell.py | 7 ++----- compiler/bitcells/dummy_bitcell_1rw_1r.py | 7 ++----- compiler/bitcells/dummy_bitcell_1w_1r.py | 7 ++----- compiler/bitcells/dummy_pbitcell.py | 4 +--- compiler/bitcells/pbitcell.py | 6 ++---- compiler/bitcells/replica_bitcell.py | 10 ++-------- compiler/bitcells/replica_bitcell_1rw_1r.py | 7 ++----- compiler/bitcells/replica_bitcell_1w_1r.py | 10 ++-------- compiler/bitcells/row_cap_bitcell_1rw_1r.py | 1 - compiler/globals.py | 16 ++-------------- compiler/sram/sram_config.py | 2 +- compiler/tests/00_code_format_check_test.py | 2 +- compiler/tests/01_library_drc_test.py | 2 +- compiler/tests/02_library_lvs_test.py | 2 +- compiler/tests/03_contact_test.py | 2 +- compiler/tests/03_path_test.py | 2 +- compiler/tests/03_ptx_1finger_nmos_test.py | 2 +- compiler/tests/03_ptx_1finger_pmos_test.py | 2 +- compiler/tests/03_ptx_3finger_nmos_test.py | 2 +- compiler/tests/03_ptx_3finger_pmos_test.py | 2 +- compiler/tests/03_ptx_4finger_nmos_test.py | 2 +- compiler/tests/03_ptx_4finger_pmos_test.py | 2 +- compiler/tests/03_ptx_no_contacts_test.py | 2 +- compiler/tests/04_and2_dec_test.py | 3 ++- compiler/tests/04_and3_dec_test.py | 2 +- compiler/tests/04_dummy_pbitcell_test.py | 2 +- compiler/tests/04_pbitcell_test.py | 2 +- compiler/tests/04_pbuf_dec_8x_test.py | 2 +- compiler/tests/04_pbuf_test.py | 2 +- compiler/tests/04_pdriver_test.py | 2 +- compiler/tests/04_pinv_100x_test.py | 2 +- compiler/tests/04_pinv_10x_test.py | 2 +- compiler/tests/04_pinv_1x_beta_test.py | 2 +- compiler/tests/04_pinv_1x_test.py | 2 +- compiler/tests/04_pinv_2x_test.py | 2 +- compiler/tests/04_pinv_dec_1x_test.py | 3 ++- compiler/tests/04_pinvbuf_test.py | 2 +- compiler/tests/04_pnand2_test.py | 2 +- compiler/tests/04_pnand3_test.py | 2 +- compiler/tests/04_pnor2_test.py | 2 +- compiler/tests/04_precharge_1rw_1r_test.py | 2 +- compiler/tests/04_precharge_pbitcell_test.py | 2 +- compiler/tests/04_precharge_test.py | 2 +- compiler/tests/04_replica_pbitcell_test.py | 2 +- compiler/tests/04_wordline_driver_test.py | 2 +- compiler/tests/05_bitcell_array_1rw_1r_test.py | 3 +-- compiler/tests/05_bitcell_array_test.py | 2 +- compiler/tests/05_dummy_array_test.py | 2 +- compiler/tests/05_pbitcell_array_test.py | 2 +- .../tests/06_hierarchical_decoder_1rw_1r_test.py | 2 +- .../06_hierarchical_decoder_pbitcell_test.py | 3 ++- .../06_hierarchical_predecode2x4_1rw_1r_test.py | 2 +- ...06_hierarchical_predecode2x4_pbitcell_test.py | 3 ++- .../tests/06_hierarchical_predecode2x4_test.py | 2 +- .../06_hierarchical_predecode3x8_1rw_1r_test.py | 2 +- ...06_hierarchical_predecode3x8_pbitcell_test.py | 3 ++- .../tests/06_hierarchical_predecode3x8_test.py | 2 +- .../tests/06_hierarchical_predecode4x16_test.py | 1 - compiler/tests/08_precharge_array_1rw_1r_test.py | 3 ++- compiler/tests/08_precharge_array_test.py | 2 +- compiler/tests/08_wordline_buffer_array_test.py | 2 +- .../08_wordline_driver_array_1rw_1r_test.py | 2 +- .../08_wordline_driver_array_pbitcell_test.py | 2 +- compiler/tests/08_wordline_driver_array_test.py | 2 +- compiler/tests/09_sense_amp_array_1rw_1r_test.py | 3 ++- .../tests/09_sense_amp_array_spare_cols_test.py | 2 +- compiler/tests/09_sense_amp_array_test.py | 2 +- .../tests/10_write_driver_array_1rw_1r_test.py | 3 ++- .../tests/10_write_driver_array_pbitcell_test.py | 2 +- .../10_write_driver_array_spare_cols_test.py | 2 +- compiler/tests/10_write_driver_array_test.py | 2 +- .../tests/10_write_mask_and_array_1rw_1r_test.py | 1 - compiler/tests/11_dff_array_test.py | 2 +- compiler/tests/11_dff_buf_array_test.py | 2 +- compiler/tests/12_tri_gate_array_test.py | 2 +- compiler/tests/13_delay_chain_test.py | 2 +- .../14_replica_bitcell_array_1rw_1r_test.py | 3 ++- compiler/tests/14_replica_bitcell_array_test.py | 2 +- compiler/tests/14_replica_column_1rw_1r_test.py | 3 ++- compiler/tests/14_replica_column_test.py | 2 -- compiler/tests/14_replica_pbitcell_array_test.py | 2 +- .../tests/16_control_logic_multiport_test.py | 2 +- compiler/tests/16_control_logic_w_test.py | 2 +- compiler/tests/18_port_address_1rw_1r_test.py | 2 +- compiler/tests/18_port_address_test.py | 2 +- compiler/tests/18_port_data_1rw_1r_test.py | 2 +- compiler/tests/18_port_data_test.py | 2 +- compiler/tests/18_port_data_wmask_1rw_1r_test.py | 1 - compiler/tests/19_bank_select_pbitcell_test.py | 2 +- compiler/tests/19_bank_select_test.py | 2 +- compiler/tests/19_multi_bank_test.py | 2 +- compiler/tests/19_pmulti_bank_test.py | 2 +- compiler/tests/19_single_bank_spare_cols_test.py | 2 +- .../tests/19_single_bank_wmask_1rw_1r_test.py | 3 ++- compiler/tests/19_single_bank_wmask_test.py | 2 +- .../20_psram_1bank_2mux_1rw_1w_wmask_test.py | 1 - compiler/tests/21_hspice_delay_test.py | 2 +- compiler/tests/21_hspice_setuphold_test.py | 2 +- compiler/tests/21_model_delay_test.py | 2 +- .../tests/21_ngspice_delay_extra_rows_test.py | 2 +- compiler/tests/21_ngspice_delay_global_test.py | 2 +- compiler/tests/21_ngspice_delay_test.py | 2 +- compiler/tests/21_ngspice_setuphold_test.py | 2 +- .../22_sram_1bank_nomux_1rw_1r_func_test.py | 1 - .../22_sram_1bank_wmask_1rw_1r_func_test.py | 2 -- compiler/tests/23_lib_sram_model_corners_test.py | 2 +- compiler/tests/23_lib_sram_model_test.py | 2 +- compiler/tests/23_lib_sram_prune_test.py | 2 +- compiler/tests/23_lib_sram_test.py | 2 +- compiler/tests/24_lef_sram_test.py | 2 +- compiler/tests/25_verilog_sram_test.py | 2 +- compiler/tests/26_ngspice_pex_pinv_test.py | 2 +- compiler/tests/30_openram_back_end_test.py | 2 +- compiler/tests/30_openram_front_end_test.py | 2 +- technology/scn4m_subm/tech/tech.py | 2 +- 120 files changed, 145 insertions(+), 185 deletions(-) diff --git a/compiler/base/custom_cell_properties.py b/compiler/base/custom_cell_properties.py index fc2445ab..92e11fb9 100644 --- a/compiler/base/custom_cell_properties.py +++ b/compiler/base/custom_cell_properties.py @@ -137,6 +137,15 @@ class cell_properties(): """ def __init__(self): self.names = {} + self.names["bitcell"] = "cell_6t" + self.names["bitcell_1rw_1r"] = "cell_1rw_1r" + self.names["bitcell_1r_1w"] = "cell_1r_1w" + self.names["dummy_bitcell"] = "dummy_cell_6t" + self.names["dummy_bitcell_1rw_1r"] = "dummy_cell_1rw_1r" + self.names["dummy_bitcell_1r_1w"] = "dummy_cell_1r_1w" + self.names["replica_bitcell"] = "replica_cell_6t" + self.names["replica_bitcell_1rw_1r"] = "replica_cell_1rw_1r" + self.names["replica_bitcell_1r_1w"] = "replica_cell_1r_1w" self._bitcell = _bitcell._default() diff --git a/compiler/bitcells/bitcell.py b/compiler/bitcells/bitcell.py index fb5e4929..b2a96356 100644 --- a/compiler/bitcells/bitcell.py +++ b/compiler/bitcells/bitcell.py @@ -7,7 +7,6 @@ # import debug from tech import cell_properties as props -from globals import OPTS import bitcell_base @@ -27,10 +26,8 @@ class bitcell(bitcell_base.bitcell_base): type_list = ["OUTPUT", "OUTPUT", "INPUT", "POWER", "GROUND"] storage_nets = ['Q', 'Q_bar'] - def __init__(self, name, cell_name=None): - if not cell_name: - cell_name = OPTS.bitcell_name - super().__init__(name, cell_name) + def __init__(self, name): + super().__init__(name) debug.info(2, "Create bitcell") self.nets_match = self.do_nets_exist(self.storage_nets) diff --git a/compiler/bitcells/bitcell_1rw_1r.py b/compiler/bitcells/bitcell_1rw_1r.py index a22e511b..9c1d3425 100644 --- a/compiler/bitcells/bitcell_1rw_1r.py +++ b/compiler/bitcells/bitcell_1rw_1r.py @@ -8,7 +8,6 @@ import debug from tech import cell_properties as props import bitcell_base -from globals import OPTS class bitcell_1rw_1r(bitcell_base.bitcell_base): @@ -31,10 +30,8 @@ class bitcell_1rw_1r(bitcell_base.bitcell_base): "INPUT", "INPUT", "POWER", "GROUND"] storage_nets = ['Q', 'Q_bar'] - def __init__(self, name, cell_name=None): - if not cell_name: - cell_name = OPTS.bitcell_name - super().__init__(name, cell_name) + def __init__(self, name): + super().__init__(name) debug.info(2, "Create bitcell with 1RW and 1R Port") self.nets_match = self.do_nets_exist(self.storage_nets) diff --git a/compiler/bitcells/bitcell_1w_1r.py b/compiler/bitcells/bitcell_1w_1r.py index 02b6e768..64a629a2 100644 --- a/compiler/bitcells/bitcell_1w_1r.py +++ b/compiler/bitcells/bitcell_1w_1r.py @@ -8,7 +8,6 @@ import debug from tech import cell_properties as props import bitcell_base -from globals import OPTS class bitcell_1w_1r(bitcell_base.bitcell_base): @@ -31,10 +30,8 @@ class bitcell_1w_1r(bitcell_base.bitcell_base): "INPUT", "INPUT", "POWER", "GROUND"] storage_nets = ['Q', 'Q_bar'] - def __init__(self, name, cell_name=None): - if not cell_name: - cell_name = OPTS.bitcell_name - super().__init__(name, cell_name) + def __init__(self, name): + super().__init__(name) debug.info(2, "Create bitcell with 1W and 1R Port") self.nets_match = self.do_nets_exist(self.storage_nets) diff --git a/compiler/bitcells/bitcell_base.py b/compiler/bitcells/bitcell_base.py index f61805da..5ae468b2 100644 --- a/compiler/bitcells/bitcell_base.py +++ b/compiler/bitcells/bitcell_base.py @@ -20,15 +20,15 @@ class bitcell_base(design.design): """ cell_size_layer = "boundary" - def __init__(self, name, cell_name, hard_cell=True): - design.design.__init__(self, name, cell_name) + def __init__(self, name, hard_cell=True): + design.design.__init__(self, name) if hard_cell: - (self.width, self.height) = utils.get_libcell_size(cell_name, + (self.width, self.height) = utils.get_libcell_size(self.cell_name, GDS["unit"], layer[self.cell_size_layer]) self.pin_map = utils.get_libcell_pins(self.pin_names, - cell_name, + self.cell_name, GDS["unit"]) self.add_pin_types(self.type_list) diff --git a/compiler/bitcells/dummy_bitcell.py b/compiler/bitcells/dummy_bitcell.py index 2a3d74ae..679509db 100644 --- a/compiler/bitcells/dummy_bitcell.py +++ b/compiler/bitcells/dummy_bitcell.py @@ -8,7 +8,6 @@ import debug from tech import cell_properties as props import bitcell_base -from globals import OPTS class dummy_bitcell(bitcell_base.bitcell_base): @@ -25,10 +24,8 @@ class dummy_bitcell(bitcell_base.bitcell_base): props.bitcell.cell_6t.pin.gnd] type_list = ["OUTPUT", "OUTPUT", "INPUT", "POWER", "GROUND"] - def __init__(self, name, cell_name=None): - if not cell_name: - cell_name = OPTS.dummy_bitcell_name - super().__init__(name, cell_name) + def __init__(self, name): + super().__init__(name) debug.info(2, "Create dummy bitcell") diff --git a/compiler/bitcells/dummy_bitcell_1rw_1r.py b/compiler/bitcells/dummy_bitcell_1rw_1r.py index 0fb92103..8d8a68d2 100644 --- a/compiler/bitcells/dummy_bitcell_1rw_1r.py +++ b/compiler/bitcells/dummy_bitcell_1rw_1r.py @@ -8,7 +8,6 @@ import debug from tech import cell_properties as props import bitcell_base -from globals import OPTS class dummy_bitcell_1rw_1r(bitcell_base.bitcell_base): @@ -29,10 +28,8 @@ class dummy_bitcell_1rw_1r(bitcell_base.bitcell_base): type_list = ["OUTPUT", "OUTPUT", "OUTPUT", "OUTPUT", "INPUT", "INPUT", "POWER", "GROUND"] - def __init__(self, name, cell_name=None): - if not cell_name: - cell_name = OPTS.dummy_bitcell_name - super().__init__(name, cell_name) + def __init__(self, name): + super().__init__(name) debug.info(2, "Create dummy bitcell 1rw+1r object") diff --git a/compiler/bitcells/dummy_bitcell_1w_1r.py b/compiler/bitcells/dummy_bitcell_1w_1r.py index 1f3fb754..60d87728 100644 --- a/compiler/bitcells/dummy_bitcell_1w_1r.py +++ b/compiler/bitcells/dummy_bitcell_1w_1r.py @@ -8,7 +8,6 @@ import debug from tech import cell_properties as props import bitcell_base -from globals import OPTS class dummy_bitcell_1w_1r(bitcell_base.bitcell_base): @@ -29,10 +28,8 @@ class dummy_bitcell_1w_1r(bitcell_base.bitcell_base): type_list = ["OUTPUT", "OUTPUT", "INPUT", "INPUT", "INPUT", "INPUT", "POWER", "GROUND"] - def __init__(self, name, cell_name=None): - if not cell_name: - cell_name = OPTS.dummy_bitcell_name - super().__init__(name, cell_name) + def __init__(self, name): + super().__init__(name) debug.info(2, "Create dummy bitcell 1w+1r object") diff --git a/compiler/bitcells/dummy_pbitcell.py b/compiler/bitcells/dummy_pbitcell.py index 4ece44c4..323f2bc3 100644 --- a/compiler/bitcells/dummy_pbitcell.py +++ b/compiler/bitcells/dummy_pbitcell.py @@ -18,14 +18,12 @@ class dummy_pbitcell(design.design): """ def __init__(self, name, cell_name=None): - if not cell_name: - cell_name = name self.num_rw_ports = OPTS.num_rw_ports self.num_w_ports = OPTS.num_w_ports self.num_r_ports = OPTS.num_r_ports self.total_ports = self.num_rw_ports + self.num_w_ports + self.num_r_ports - design.design.__init__(self, name, cell_name) + design.design.__init__(self, name) debug.info(1, "create a dummy bitcell using pbitcell with {0} rw ports, {1} w ports and {2} r ports".format(self.num_rw_ports, self.num_w_ports, self.num_r_ports)) diff --git a/compiler/bitcells/pbitcell.py b/compiler/bitcells/pbitcell.py index e2cdd032..120bb48e 100644 --- a/compiler/bitcells/pbitcell.py +++ b/compiler/bitcells/pbitcell.py @@ -21,9 +21,7 @@ class pbitcell(bitcell_base.bitcell_base): with a variable number of read/write, write, and read ports """ - def __init__(self, name, cell_name=None, replica_bitcell=False, dummy_bitcell=False): - if not cell_name: - cell_name = name + def __init__(self, name, replica_bitcell=False, dummy_bitcell=False): self.num_rw_ports = OPTS.num_rw_ports self.num_w_ports = OPTS.num_w_ports self.num_r_ports = OPTS.num_r_ports @@ -32,7 +30,7 @@ class pbitcell(bitcell_base.bitcell_base): self.replica_bitcell = replica_bitcell self.dummy_bitcell = dummy_bitcell - bitcell_base.bitcell_base.__init__(self, name, cell_name, hard_cell=False) + bitcell_base.bitcell_base.__init__(self, name, hard_cell=False) fmt_str = "{0} rw ports, {1} w ports and {2} r ports" info_string = fmt_str.format(self.num_rw_ports, self.num_w_ports, diff --git a/compiler/bitcells/replica_bitcell.py b/compiler/bitcells/replica_bitcell.py index 53bcd16f..bc233056 100644 --- a/compiler/bitcells/replica_bitcell.py +++ b/compiler/bitcells/replica_bitcell.py @@ -6,11 +6,8 @@ # All rights reserved. # import debug -import utils import bitcell_base -from tech import GDS, layer from tech import cell_properties as props -from globals import OPTS class replica_bitcell(bitcell_base.bitcell_base): @@ -27,11 +24,8 @@ class replica_bitcell(bitcell_base.bitcell_base): props.bitcell.cell_6t.pin.gnd] type_list = ["OUTPUT", "OUTPUT", "INPUT", "POWER", "GROUND"] - def __init__(self, name, cell_name=None): - if not cell_name: - cell_name = OPTS.replica_bitcell_name - # Ignore the name argument - super().__init__(name, cell_name) + def __init__(self, name): + super().__init__(name) debug.info(2, "Create replica bitcell object") def get_stage_effort(self, load): diff --git a/compiler/bitcells/replica_bitcell_1rw_1r.py b/compiler/bitcells/replica_bitcell_1rw_1r.py index f2696e19..fd3ae27a 100644 --- a/compiler/bitcells/replica_bitcell_1rw_1r.py +++ b/compiler/bitcells/replica_bitcell_1rw_1r.py @@ -8,7 +8,6 @@ import debug import bitcell_base from tech import cell_properties as props -from globals import OPTS class replica_bitcell_1rw_1r(bitcell_base.bitcell_base): @@ -28,10 +27,8 @@ class replica_bitcell_1rw_1r(bitcell_base.bitcell_base): props.bitcell.cell_1rw1r.pin.gnd] type_list = ["OUTPUT", "OUTPUT", "OUTPUT", "OUTPUT", "INPUT", "INPUT", "POWER", "GROUND"] - def __init__(self, name, cell_name=None): - if not cell_name: - cell_name = OPTS.replica_bitcell_name - super().__init__(name, cell_name) + def __init__(self, name): + super().__init__(name) debug.info(2, "Create replica bitcell 1rw+1r object") def get_stage_effort(self, load): diff --git a/compiler/bitcells/replica_bitcell_1w_1r.py b/compiler/bitcells/replica_bitcell_1w_1r.py index 248292ed..4f09ed4f 100644 --- a/compiler/bitcells/replica_bitcell_1w_1r.py +++ b/compiler/bitcells/replica_bitcell_1w_1r.py @@ -8,9 +8,6 @@ import debug import bitcell_base from tech import cell_properties as props -from globals import OPTS -from tech import GDS, layer -import utils class replica_bitcell_1w_1r(bitcell_base.bitcell_base): @@ -30,13 +27,10 @@ class replica_bitcell_1w_1r(bitcell_base.bitcell_base): props.bitcell.cell_1w1r.pin.gnd] type_list = ["OUTPUT", "OUTPUT", "INPUT", "INPUT", "INPUT", "INPUT", "POWER", "GROUND"] - def __init__(self, name, cell_name=None): - if not cell_name: - cell_name = OPTS.replica_bitcell_name - super().__init__(name, cell_name) + def __init__(self, name): + super().__init__(name) debug.info(2, "Create replica bitcell 1w+1r object") - def get_stage_effort(self, load): parasitic_delay = 1 size = 0.5 #This accounts for bitline being drained thought the access TX and internal node diff --git a/compiler/bitcells/row_cap_bitcell_1rw_1r.py b/compiler/bitcells/row_cap_bitcell_1rw_1r.py index fbe08a54..8cf44a1e 100644 --- a/compiler/bitcells/row_cap_bitcell_1rw_1r.py +++ b/compiler/bitcells/row_cap_bitcell_1rw_1r.py @@ -23,7 +23,6 @@ class row_cap_bitcell_1rw_1r(bitcell_base.bitcell_base): type_list = ["INPUT", "INPUT", "GROUND"] def __init__(self, name="row_cap_cell_1rw_1r"): - # Ignore the name argument bitcell_base.bitcell_base.__init__(self, name) debug.info(2, "Create row_cap bitcell 1rw+1r object") diff --git a/compiler/globals.py b/compiler/globals.py index 9e05efcb..32137437 100644 --- a/compiler/globals.py +++ b/compiler/globals.py @@ -208,11 +208,9 @@ def setup_bitcell(): # If we have non-1rw ports, # and the user didn't over-ride the bitcell manually, # figure out the right bitcell to use - if (OPTS.bitcell == "bitcell"): - + if OPTS.bitcell == "bitcell": if (OPTS.num_rw_ports == 1 and OPTS.num_w_ports == 0 and OPTS.num_r_ports == 0): OPTS.bitcell = "bitcell" - OPTS.bitcell_name = "cell_6t" else: ports = "" if OPTS.num_rw_ports > 0: @@ -225,20 +223,13 @@ def setup_bitcell(): if ports != "": OPTS.bitcell_suffix = "_" + ports OPTS.bitcell = "bitcell" + OPTS.bitcell_suffix - OPTS.bitcell_name = "cell" + OPTS.bitcell_suffix OPTS.dummy_bitcell = "dummy_" + OPTS.bitcell - OPTS.dummy_bitcell_name = "dummy_" + OPTS.bitcell_name - OPTS.replica_bitcell = "replica_" + OPTS.bitcell - OPTS.replica_bitcell_name = "replica_" + OPTS.bitcell_name - elif (OPTS.bitcell == "pbitcell"): + elif OPTS.bitcell == "pbitcell": OPTS.bitcell = "pbitcell" - OPTS.bitcell_name = "pbitcell" OPTS.dummy_bitcell = "dummy_pbitcell" - OPTS.dummy_bitcell_name = "dummy_pbitcell" OPTS.replica_bitcell = "replica_pbitcell" - OPTS.replica_bitcell_name = "replica_pbitcell" # See if bitcell exists try: @@ -248,11 +239,8 @@ def setup_bitcell(): # or its custom replica bitcell # Use the pbitcell (and give a warning if not in unit test mode) OPTS.bitcell = "pbitcell" - OPTS.bitcell_name = "pbitcell" OPTS.dummy_bitcell = "dummy_pbitcell" - OPTS.dummy_bitcell_name = "dummy_pbitcell" OPTS.replica_bitcell = "replica_pbitcell" - OPTS.replica_bitcell_name = "replica_pbitcell" if not OPTS.is_unit_test: debug.warning("Using the parameterized bitcell which may have suboptimal density.") debug.info(1, "Using bitcell: {}".format(OPTS.bitcell)) diff --git a/compiler/sram/sram_config.py b/compiler/sram/sram_config.py index 28bdfe8d..52393713 100644 --- a/compiler/sram/sram_config.py +++ b/compiler/sram/sram_config.py @@ -39,7 +39,7 @@ class sram_config: def compute_sizes(self): """ Computes the organization of the memory using bitcell size by trying to make it square.""" - bitcell = factory.create(module_type=OPTS.bitcell, cell_name=OPTS.bitcell_name) + bitcell = factory.create(module_type=OPTS.bitcell) debug.check(self.num_banks in [1, 2, 4], "Valid number of banks are 1 , 2 and 4.") diff --git a/compiler/tests/00_code_format_check_test.py b/compiler/tests/00_code_format_check_test.py index 834cbace..c66cfab9 100755 --- a/compiler/tests/00_code_format_check_test.py +++ b/compiler/tests/00_code_format_check_test.py @@ -9,7 +9,7 @@ import unittest from testutils import * -import sys,os,re +import sys, os,re sys.path.append(os.getenv("OPENRAM_HOME")) import globals import debug diff --git a/compiler/tests/01_library_drc_test.py b/compiler/tests/01_library_drc_test.py index dbdb1cd2..53d50386 100755 --- a/compiler/tests/01_library_drc_test.py +++ b/compiler/tests/01_library_drc_test.py @@ -8,7 +8,7 @@ # import unittest from testutils import * -import sys,os,re +import sys, os,re #sys.path.append(os.getenv("OPENRAM_HOME")) import globals from globals import OPTS diff --git a/compiler/tests/02_library_lvs_test.py b/compiler/tests/02_library_lvs_test.py index ed15770d..353c1f88 100755 --- a/compiler/tests/02_library_lvs_test.py +++ b/compiler/tests/02_library_lvs_test.py @@ -8,7 +8,7 @@ # import unittest from testutils import * -import sys,os,re +import sys, os,re sys.path.append(os.getenv("OPENRAM_HOME")) import globals from globals import OPTS diff --git a/compiler/tests/03_contact_test.py b/compiler/tests/03_contact_test.py index 7a43d0e4..e57fc7f4 100755 --- a/compiler/tests/03_contact_test.py +++ b/compiler/tests/03_contact_test.py @@ -8,7 +8,7 @@ # import unittest from testutils import * -import sys,os +import sys, os sys.path.append(os.getenv("OPENRAM_HOME")) import globals from globals import OPTS diff --git a/compiler/tests/03_path_test.py b/compiler/tests/03_path_test.py index 306bf4e1..a0120c33 100755 --- a/compiler/tests/03_path_test.py +++ b/compiler/tests/03_path_test.py @@ -8,7 +8,7 @@ # import unittest from testutils import * -import sys,os +import sys, os sys.path.append(os.getenv("OPENRAM_HOME")) import globals from globals import OPTS diff --git a/compiler/tests/03_ptx_1finger_nmos_test.py b/compiler/tests/03_ptx_1finger_nmos_test.py index 0774af4a..f14e4d10 100755 --- a/compiler/tests/03_ptx_1finger_nmos_test.py +++ b/compiler/tests/03_ptx_1finger_nmos_test.py @@ -8,7 +8,7 @@ # import unittest from testutils import * -import sys,os +import sys, os sys.path.append(os.getenv("OPENRAM_HOME")) import globals from globals import OPTS diff --git a/compiler/tests/03_ptx_1finger_pmos_test.py b/compiler/tests/03_ptx_1finger_pmos_test.py index 3bf3e293..34fcd3ae 100755 --- a/compiler/tests/03_ptx_1finger_pmos_test.py +++ b/compiler/tests/03_ptx_1finger_pmos_test.py @@ -8,7 +8,7 @@ # import unittest from testutils import * -import sys,os +import sys, os sys.path.append(os.getenv("OPENRAM_HOME")) import globals from globals import OPTS diff --git a/compiler/tests/03_ptx_3finger_nmos_test.py b/compiler/tests/03_ptx_3finger_nmos_test.py index 0b24ffd5..8e8eacb9 100755 --- a/compiler/tests/03_ptx_3finger_nmos_test.py +++ b/compiler/tests/03_ptx_3finger_nmos_test.py @@ -8,7 +8,7 @@ # import unittest from testutils import * -import sys,os +import sys, os sys.path.append(os.getenv("OPENRAM_HOME")) import globals from globals import OPTS diff --git a/compiler/tests/03_ptx_3finger_pmos_test.py b/compiler/tests/03_ptx_3finger_pmos_test.py index 0f0edb9c..44d862c2 100755 --- a/compiler/tests/03_ptx_3finger_pmos_test.py +++ b/compiler/tests/03_ptx_3finger_pmos_test.py @@ -8,7 +8,7 @@ # import unittest from testutils import * -import sys,os +import sys, os sys.path.append(os.getenv("OPENRAM_HOME")) import globals from globals import OPTS diff --git a/compiler/tests/03_ptx_4finger_nmos_test.py b/compiler/tests/03_ptx_4finger_nmos_test.py index f7f3db78..4dc2c089 100755 --- a/compiler/tests/03_ptx_4finger_nmos_test.py +++ b/compiler/tests/03_ptx_4finger_nmos_test.py @@ -8,7 +8,7 @@ # import unittest from testutils import * -import sys,os +import sys, os sys.path.append(os.getenv("OPENRAM_HOME")) import globals from globals import OPTS diff --git a/compiler/tests/03_ptx_4finger_pmos_test.py b/compiler/tests/03_ptx_4finger_pmos_test.py index 9fae372e..66428404 100755 --- a/compiler/tests/03_ptx_4finger_pmos_test.py +++ b/compiler/tests/03_ptx_4finger_pmos_test.py @@ -8,7 +8,7 @@ # import unittest from testutils import * -import sys,os +import sys, os sys.path.append(os.getenv("OPENRAM_HOME")) import globals from globals import OPTS diff --git a/compiler/tests/03_ptx_no_contacts_test.py b/compiler/tests/03_ptx_no_contacts_test.py index 58611ca8..d129669b 100755 --- a/compiler/tests/03_ptx_no_contacts_test.py +++ b/compiler/tests/03_ptx_no_contacts_test.py @@ -8,7 +8,7 @@ # import unittest from testutils import * -import sys,os +import sys, os sys.path.append(os.getenv("OPENRAM_HOME")) import globals from globals import OPTS diff --git a/compiler/tests/04_and2_dec_test.py b/compiler/tests/04_and2_dec_test.py index de215ffe..f21f848a 100755 --- a/compiler/tests/04_and2_dec_test.py +++ b/compiler/tests/04_and2_dec_test.py @@ -8,13 +8,14 @@ # import unittest from testutils import * -import sys,os +import sys, os sys.path.append(os.getenv("OPENRAM_HOME")) import globals from globals import OPTS from sram_factory import factory import debug + class and2_dec_test(openram_test): def runTest(self): diff --git a/compiler/tests/04_and3_dec_test.py b/compiler/tests/04_and3_dec_test.py index 51a310fd..5a53fc30 100755 --- a/compiler/tests/04_and3_dec_test.py +++ b/compiler/tests/04_and3_dec_test.py @@ -8,7 +8,7 @@ # import unittest from testutils import * -import sys,os +import sys, os sys.path.append(os.getenv("OPENRAM_HOME")) import globals from globals import OPTS diff --git a/compiler/tests/04_dummy_pbitcell_test.py b/compiler/tests/04_dummy_pbitcell_test.py index f92d2c91..6ea91a72 100755 --- a/compiler/tests/04_dummy_pbitcell_test.py +++ b/compiler/tests/04_dummy_pbitcell_test.py @@ -8,7 +8,7 @@ # import unittest from testutils import * -import sys,os +import sys, os sys.path.append(os.getenv("OPENRAM_HOME")) import globals from globals import OPTS diff --git a/compiler/tests/04_pbitcell_test.py b/compiler/tests/04_pbitcell_test.py index 74880a2f..ec8fb4f2 100755 --- a/compiler/tests/04_pbitcell_test.py +++ b/compiler/tests/04_pbitcell_test.py @@ -8,7 +8,7 @@ # import unittest from testutils import * -import sys,os +import sys, os sys.path.append(os.getenv("OPENRAM_HOME")) import globals from globals import OPTS diff --git a/compiler/tests/04_pbuf_dec_8x_test.py b/compiler/tests/04_pbuf_dec_8x_test.py index 6a7bd62a..9081b336 100755 --- a/compiler/tests/04_pbuf_dec_8x_test.py +++ b/compiler/tests/04_pbuf_dec_8x_test.py @@ -8,7 +8,7 @@ # import unittest from testutils import * -import sys,os +import sys, os sys.path.append(os.getenv("OPENRAM_HOME")) import globals from globals import OPTS diff --git a/compiler/tests/04_pbuf_test.py b/compiler/tests/04_pbuf_test.py index 7ed92ab8..b3f55749 100755 --- a/compiler/tests/04_pbuf_test.py +++ b/compiler/tests/04_pbuf_test.py @@ -8,7 +8,7 @@ # import unittest from testutils import * -import sys,os +import sys, os sys.path.append(os.getenv("OPENRAM_HOME")) import globals from globals import OPTS diff --git a/compiler/tests/04_pdriver_test.py b/compiler/tests/04_pdriver_test.py index d1d3dad4..3e1a27c2 100755 --- a/compiler/tests/04_pdriver_test.py +++ b/compiler/tests/04_pdriver_test.py @@ -8,7 +8,7 @@ # import unittest from testutils import * -import sys,os +import sys, os sys.path.append(os.getenv("OPENRAM_HOME")) import globals from globals import OPTS diff --git a/compiler/tests/04_pinv_100x_test.py b/compiler/tests/04_pinv_100x_test.py index 91b55d5d..89924710 100755 --- a/compiler/tests/04_pinv_100x_test.py +++ b/compiler/tests/04_pinv_100x_test.py @@ -8,7 +8,7 @@ # import unittest from testutils import * -import sys,os +import sys, os sys.path.append(os.getenv("OPENRAM_HOME")) import globals from globals import OPTS diff --git a/compiler/tests/04_pinv_10x_test.py b/compiler/tests/04_pinv_10x_test.py index f8452460..7ebe88c1 100755 --- a/compiler/tests/04_pinv_10x_test.py +++ b/compiler/tests/04_pinv_10x_test.py @@ -8,7 +8,7 @@ # import unittest from testutils import * -import sys,os +import sys, os sys.path.append(os.getenv("OPENRAM_HOME")) import globals from globals import OPTS diff --git a/compiler/tests/04_pinv_1x_beta_test.py b/compiler/tests/04_pinv_1x_beta_test.py index 45a6d37c..edae1047 100755 --- a/compiler/tests/04_pinv_1x_beta_test.py +++ b/compiler/tests/04_pinv_1x_beta_test.py @@ -8,7 +8,7 @@ # import unittest from testutils import * -import sys,os +import sys, os sys.path.append(os.getenv("OPENRAM_HOME")) import globals from globals import OPTS diff --git a/compiler/tests/04_pinv_1x_test.py b/compiler/tests/04_pinv_1x_test.py index 39704975..4ac637e2 100755 --- a/compiler/tests/04_pinv_1x_test.py +++ b/compiler/tests/04_pinv_1x_test.py @@ -8,7 +8,7 @@ # import unittest from testutils import * -import sys,os +import sys, os sys.path.append(os.getenv("OPENRAM_HOME")) import globals from globals import OPTS diff --git a/compiler/tests/04_pinv_2x_test.py b/compiler/tests/04_pinv_2x_test.py index 374279a1..4022b510 100755 --- a/compiler/tests/04_pinv_2x_test.py +++ b/compiler/tests/04_pinv_2x_test.py @@ -8,7 +8,7 @@ # import unittest from testutils import * -import sys,os +import sys, os sys.path.append(os.getenv("OPENRAM_HOME")) import globals from globals import OPTS diff --git a/compiler/tests/04_pinv_dec_1x_test.py b/compiler/tests/04_pinv_dec_1x_test.py index 18f5e907..e683eab3 100755 --- a/compiler/tests/04_pinv_dec_1x_test.py +++ b/compiler/tests/04_pinv_dec_1x_test.py @@ -8,13 +8,14 @@ # import unittest from testutils import * -import sys,os +import sys, os sys.path.append(os.getenv("OPENRAM_HOME")) import globals from globals import OPTS from sram_factory import factory import debug + class pinv_dec_1x_test(openram_test): def runTest(self): diff --git a/compiler/tests/04_pinvbuf_test.py b/compiler/tests/04_pinvbuf_test.py index df7645d1..02f1bf3d 100755 --- a/compiler/tests/04_pinvbuf_test.py +++ b/compiler/tests/04_pinvbuf_test.py @@ -8,7 +8,7 @@ # import unittest from testutils import * -import sys,os +import sys, os sys.path.append(os.getenv("OPENRAM_HOME")) import globals from globals import OPTS diff --git a/compiler/tests/04_pnand2_test.py b/compiler/tests/04_pnand2_test.py index 04106f03..c5695a6f 100755 --- a/compiler/tests/04_pnand2_test.py +++ b/compiler/tests/04_pnand2_test.py @@ -8,7 +8,7 @@ # import unittest from testutils import * -import sys,os +import sys, os sys.path.append(os.getenv("OPENRAM_HOME")) import globals from globals import OPTS diff --git a/compiler/tests/04_pnand3_test.py b/compiler/tests/04_pnand3_test.py index 0a327e86..4ea74269 100755 --- a/compiler/tests/04_pnand3_test.py +++ b/compiler/tests/04_pnand3_test.py @@ -8,7 +8,7 @@ # import unittest from testutils import * -import sys,os +import sys, os sys.path.append(os.getenv("OPENRAM_HOME")) import globals from globals import OPTS diff --git a/compiler/tests/04_pnor2_test.py b/compiler/tests/04_pnor2_test.py index fd6ecab2..85f1930b 100755 --- a/compiler/tests/04_pnor2_test.py +++ b/compiler/tests/04_pnor2_test.py @@ -8,7 +8,7 @@ # import unittest from testutils import * -import sys,os +import sys, os sys.path.append(os.getenv("OPENRAM_HOME")) import globals from globals import OPTS diff --git a/compiler/tests/04_precharge_1rw_1r_test.py b/compiler/tests/04_precharge_1rw_1r_test.py index ea452e38..7b58ac2e 100755 --- a/compiler/tests/04_precharge_1rw_1r_test.py +++ b/compiler/tests/04_precharge_1rw_1r_test.py @@ -8,7 +8,7 @@ # import unittest from testutils import * -import sys,os +import sys, os sys.path.append(os.getenv("OPENRAM_HOME")) import globals from globals import OPTS diff --git a/compiler/tests/04_precharge_pbitcell_test.py b/compiler/tests/04_precharge_pbitcell_test.py index 3eb7628d..03638d8a 100755 --- a/compiler/tests/04_precharge_pbitcell_test.py +++ b/compiler/tests/04_precharge_pbitcell_test.py @@ -8,7 +8,7 @@ # import unittest from testutils import * -import sys,os +import sys, os sys.path.append(os.getenv("OPENRAM_HOME")) import globals from globals import OPTS diff --git a/compiler/tests/04_precharge_test.py b/compiler/tests/04_precharge_test.py index e66329b5..33cc6a80 100755 --- a/compiler/tests/04_precharge_test.py +++ b/compiler/tests/04_precharge_test.py @@ -8,7 +8,7 @@ # import unittest from testutils import * -import sys,os +import sys, os sys.path.append(os.getenv("OPENRAM_HOME")) import globals from globals import OPTS diff --git a/compiler/tests/04_replica_pbitcell_test.py b/compiler/tests/04_replica_pbitcell_test.py index 64159906..4aee5a36 100755 --- a/compiler/tests/04_replica_pbitcell_test.py +++ b/compiler/tests/04_replica_pbitcell_test.py @@ -8,7 +8,7 @@ # import unittest from testutils import * -import sys,os +import sys, os sys.path.append(os.getenv("OPENRAM_HOME")) import globals from globals import OPTS diff --git a/compiler/tests/04_wordline_driver_test.py b/compiler/tests/04_wordline_driver_test.py index 74cfb7a7..7ce53d22 100755 --- a/compiler/tests/04_wordline_driver_test.py +++ b/compiler/tests/04_wordline_driver_test.py @@ -8,7 +8,7 @@ # import unittest from testutils import * -import sys,os +import sys, os sys.path.append(os.getenv("OPENRAM_HOME")) import globals from globals import OPTS diff --git a/compiler/tests/05_bitcell_array_1rw_1r_test.py b/compiler/tests/05_bitcell_array_1rw_1r_test.py index a1b7a3eb..32207ab5 100755 --- a/compiler/tests/05_bitcell_array_1rw_1r_test.py +++ b/compiler/tests/05_bitcell_array_1rw_1r_test.py @@ -8,14 +8,13 @@ # import unittest from testutils import * -import sys,os +import sys, os sys.path.append(os.getenv("OPENRAM_HOME")) import globals from globals import OPTS from sram_factory import factory import debug -#@unittest.skip("SKIPPING 05_bitcell_1rw_1r_array_test") class bitcell_array_1rw_1r_test(openram_test): diff --git a/compiler/tests/05_bitcell_array_test.py b/compiler/tests/05_bitcell_array_test.py index 9726a4ea..95a0d1fb 100755 --- a/compiler/tests/05_bitcell_array_test.py +++ b/compiler/tests/05_bitcell_array_test.py @@ -8,7 +8,7 @@ # import unittest from testutils import * -import sys,os +import sys, os sys.path.append(os.getenv("OPENRAM_HOME")) import globals from globals import OPTS diff --git a/compiler/tests/05_dummy_array_test.py b/compiler/tests/05_dummy_array_test.py index 512b6ce0..98db9fdc 100755 --- a/compiler/tests/05_dummy_array_test.py +++ b/compiler/tests/05_dummy_array_test.py @@ -6,7 +6,7 @@ # import unittest from testutils import * -import sys,os +import sys, os sys.path.append(os.getenv("OPENRAM_HOME")) import globals from globals import OPTS diff --git a/compiler/tests/05_pbitcell_array_test.py b/compiler/tests/05_pbitcell_array_test.py index 797f27b1..09e607f3 100755 --- a/compiler/tests/05_pbitcell_array_test.py +++ b/compiler/tests/05_pbitcell_array_test.py @@ -8,7 +8,7 @@ # import unittest from testutils import * -import sys,os +import sys, os sys.path.append(os.getenv("OPENRAM_HOME")) import globals from globals import OPTS diff --git a/compiler/tests/06_hierarchical_decoder_1rw_1r_test.py b/compiler/tests/06_hierarchical_decoder_1rw_1r_test.py index d7e268f8..1e474e4c 100755 --- a/compiler/tests/06_hierarchical_decoder_1rw_1r_test.py +++ b/compiler/tests/06_hierarchical_decoder_1rw_1r_test.py @@ -8,7 +8,7 @@ # import unittest from testutils import * -import sys,os +import sys, os sys.path.append(os.getenv("OPENRAM_HOME")) import globals from globals import OPTS diff --git a/compiler/tests/06_hierarchical_decoder_pbitcell_test.py b/compiler/tests/06_hierarchical_decoder_pbitcell_test.py index efa05708..f25462e2 100755 --- a/compiler/tests/06_hierarchical_decoder_pbitcell_test.py +++ b/compiler/tests/06_hierarchical_decoder_pbitcell_test.py @@ -8,13 +8,14 @@ # import unittest from testutils import * -import sys,os +import sys, os sys.path.append(os.getenv("OPENRAM_HOME")) import globals from globals import OPTS from sram_factory import factory import debug + class hierarchical_decoder_pbitcell_test(openram_test): def runTest(self): diff --git a/compiler/tests/06_hierarchical_predecode2x4_1rw_1r_test.py b/compiler/tests/06_hierarchical_predecode2x4_1rw_1r_test.py index fbcf15f4..9bb32283 100755 --- a/compiler/tests/06_hierarchical_predecode2x4_1rw_1r_test.py +++ b/compiler/tests/06_hierarchical_predecode2x4_1rw_1r_test.py @@ -8,7 +8,7 @@ # import unittest from testutils import * -import sys,os +import sys, os sys.path.append(os.getenv("OPENRAM_HOME")) import globals from globals import OPTS diff --git a/compiler/tests/06_hierarchical_predecode2x4_pbitcell_test.py b/compiler/tests/06_hierarchical_predecode2x4_pbitcell_test.py index f8825c23..dff3378d 100755 --- a/compiler/tests/06_hierarchical_predecode2x4_pbitcell_test.py +++ b/compiler/tests/06_hierarchical_predecode2x4_pbitcell_test.py @@ -8,13 +8,14 @@ # import unittest from testutils import * -import sys,os +import sys, os sys.path.append(os.getenv("OPENRAM_HOME")) import globals from globals import OPTS from sram_factory import factory import debug + class hierarchical_predecode2x4_pbitcell_test(openram_test): def runTest(self): diff --git a/compiler/tests/06_hierarchical_predecode2x4_test.py b/compiler/tests/06_hierarchical_predecode2x4_test.py index c2b51f10..56ffbc20 100755 --- a/compiler/tests/06_hierarchical_predecode2x4_test.py +++ b/compiler/tests/06_hierarchical_predecode2x4_test.py @@ -8,7 +8,7 @@ # import unittest from testutils import * -import sys,os +import sys, os sys.path.append(os.getenv("OPENRAM_HOME")) import globals from globals import OPTS diff --git a/compiler/tests/06_hierarchical_predecode3x8_1rw_1r_test.py b/compiler/tests/06_hierarchical_predecode3x8_1rw_1r_test.py index 2e7361a8..5afa3df3 100755 --- a/compiler/tests/06_hierarchical_predecode3x8_1rw_1r_test.py +++ b/compiler/tests/06_hierarchical_predecode3x8_1rw_1r_test.py @@ -8,7 +8,7 @@ # import unittest from testutils import * -import sys,os +import sys, os sys.path.append(os.getenv("OPENRAM_HOME")) import globals from globals import OPTS diff --git a/compiler/tests/06_hierarchical_predecode3x8_pbitcell_test.py b/compiler/tests/06_hierarchical_predecode3x8_pbitcell_test.py index 87f845ae..3640d422 100755 --- a/compiler/tests/06_hierarchical_predecode3x8_pbitcell_test.py +++ b/compiler/tests/06_hierarchical_predecode3x8_pbitcell_test.py @@ -8,13 +8,14 @@ # import unittest from testutils import * -import sys,os +import sys, os sys.path.append(os.getenv("OPENRAM_HOME")) import globals from globals import OPTS from sram_factory import factory import debug + class hierarchical_predecode3x8_pbitcell_test(openram_test): def runTest(self): diff --git a/compiler/tests/06_hierarchical_predecode3x8_test.py b/compiler/tests/06_hierarchical_predecode3x8_test.py index c1471a40..f51f81d6 100755 --- a/compiler/tests/06_hierarchical_predecode3x8_test.py +++ b/compiler/tests/06_hierarchical_predecode3x8_test.py @@ -8,7 +8,7 @@ # import unittest from testutils import * -import sys,os +import sys, os sys.path.append(os.getenv("OPENRAM_HOME")) import globals from globals import OPTS diff --git a/compiler/tests/06_hierarchical_predecode4x16_test.py b/compiler/tests/06_hierarchical_predecode4x16_test.py index 3ea60c5d..964de073 100755 --- a/compiler/tests/06_hierarchical_predecode4x16_test.py +++ b/compiler/tests/06_hierarchical_predecode4x16_test.py @@ -16,7 +16,6 @@ from sram_factory import factory import debug -# @unittest.skip("SKIPPING hierarchical_predecode4x16_test") class hierarchical_predecode4x16_test(openram_test): def runTest(self): diff --git a/compiler/tests/08_precharge_array_1rw_1r_test.py b/compiler/tests/08_precharge_array_1rw_1r_test.py index d76e0ee7..c0935e6f 100755 --- a/compiler/tests/08_precharge_array_1rw_1r_test.py +++ b/compiler/tests/08_precharge_array_1rw_1r_test.py @@ -8,13 +8,14 @@ # import unittest from testutils import * -import sys,os +import sys, os sys.path.append(os.getenv("OPENRAM_HOME")) import globals from globals import OPTS from sram_factory import factory import debug + class precharge_1rw_1r_test(openram_test): def runTest(self): diff --git a/compiler/tests/08_precharge_array_test.py b/compiler/tests/08_precharge_array_test.py index 47843ca3..c410a476 100755 --- a/compiler/tests/08_precharge_array_test.py +++ b/compiler/tests/08_precharge_array_test.py @@ -8,7 +8,7 @@ # import unittest from testutils import * -import sys,os +import sys, os sys.path.append(os.getenv("OPENRAM_HOME")) import globals from globals import OPTS diff --git a/compiler/tests/08_wordline_buffer_array_test.py b/compiler/tests/08_wordline_buffer_array_test.py index a753a21a..50eab534 100755 --- a/compiler/tests/08_wordline_buffer_array_test.py +++ b/compiler/tests/08_wordline_buffer_array_test.py @@ -8,7 +8,7 @@ # import unittest from testutils import * -import sys,os +import sys, os sys.path.append(os.getenv("OPENRAM_HOME")) import globals from globals import OPTS diff --git a/compiler/tests/08_wordline_driver_array_1rw_1r_test.py b/compiler/tests/08_wordline_driver_array_1rw_1r_test.py index cf1810d8..f4a3af42 100755 --- a/compiler/tests/08_wordline_driver_array_1rw_1r_test.py +++ b/compiler/tests/08_wordline_driver_array_1rw_1r_test.py @@ -8,7 +8,7 @@ # import unittest from testutils import * -import sys,os +import sys, os sys.path.append(os.getenv("OPENRAM_HOME")) import globals from globals import OPTS diff --git a/compiler/tests/08_wordline_driver_array_pbitcell_test.py b/compiler/tests/08_wordline_driver_array_pbitcell_test.py index 267aaddf..0f31c688 100755 --- a/compiler/tests/08_wordline_driver_array_pbitcell_test.py +++ b/compiler/tests/08_wordline_driver_array_pbitcell_test.py @@ -8,7 +8,7 @@ # import unittest from testutils import * -import sys,os +import sys, os sys.path.append(os.getenv("OPENRAM_HOME")) import globals from globals import OPTS diff --git a/compiler/tests/08_wordline_driver_array_test.py b/compiler/tests/08_wordline_driver_array_test.py index 3491cc4f..f433ed91 100755 --- a/compiler/tests/08_wordline_driver_array_test.py +++ b/compiler/tests/08_wordline_driver_array_test.py @@ -8,7 +8,7 @@ # import unittest from testutils import * -import sys,os +import sys, os sys.path.append(os.getenv("OPENRAM_HOME")) import globals from globals import OPTS diff --git a/compiler/tests/09_sense_amp_array_1rw_1r_test.py b/compiler/tests/09_sense_amp_array_1rw_1r_test.py index a8ed4d2f..9c48d8d5 100755 --- a/compiler/tests/09_sense_amp_array_1rw_1r_test.py +++ b/compiler/tests/09_sense_amp_array_1rw_1r_test.py @@ -8,13 +8,14 @@ # import unittest from testutils import * -import sys,os +import sys, os sys.path.append(os.getenv("OPENRAM_HOME")) import globals from globals import OPTS from sram_factory import factory import debug + class sense_amp_test(openram_test): def runTest(self): diff --git a/compiler/tests/09_sense_amp_array_spare_cols_test.py b/compiler/tests/09_sense_amp_array_spare_cols_test.py index 052aea1e..f9c0a670 100755 --- a/compiler/tests/09_sense_amp_array_spare_cols_test.py +++ b/compiler/tests/09_sense_amp_array_spare_cols_test.py @@ -8,7 +8,7 @@ # import unittest from testutils import * -import sys,os +import sys, os sys.path.append(os.getenv("OPENRAM_HOME")) import globals from globals import OPTS diff --git a/compiler/tests/09_sense_amp_array_test.py b/compiler/tests/09_sense_amp_array_test.py index c71a75e8..2625ac84 100755 --- a/compiler/tests/09_sense_amp_array_test.py +++ b/compiler/tests/09_sense_amp_array_test.py @@ -8,7 +8,7 @@ # import unittest from testutils import * -import sys,os +import sys, os sys.path.append(os.getenv("OPENRAM_HOME")) import globals from globals import OPTS diff --git a/compiler/tests/10_write_driver_array_1rw_1r_test.py b/compiler/tests/10_write_driver_array_1rw_1r_test.py index 4acbf053..fcf3d32b 100755 --- a/compiler/tests/10_write_driver_array_1rw_1r_test.py +++ b/compiler/tests/10_write_driver_array_1rw_1r_test.py @@ -8,13 +8,14 @@ # import unittest from testutils import * -import sys,os +import sys, os sys.path.append(os.getenv("OPENRAM_HOME")) import globals from globals import OPTS from sram_factory import factory import debug + class write_driver_test(openram_test): def runTest(self): diff --git a/compiler/tests/10_write_driver_array_pbitcell_test.py b/compiler/tests/10_write_driver_array_pbitcell_test.py index 397b3762..7a8e4aad 100755 --- a/compiler/tests/10_write_driver_array_pbitcell_test.py +++ b/compiler/tests/10_write_driver_array_pbitcell_test.py @@ -8,7 +8,7 @@ # import unittest from testutils import * -import sys,os +import sys, os sys.path.append(os.getenv("OPENRAM_HOME")) import globals from globals import OPTS diff --git a/compiler/tests/10_write_driver_array_spare_cols_test.py b/compiler/tests/10_write_driver_array_spare_cols_test.py index fde478ee..0175057a 100755 --- a/compiler/tests/10_write_driver_array_spare_cols_test.py +++ b/compiler/tests/10_write_driver_array_spare_cols_test.py @@ -8,7 +8,7 @@ # import unittest from testutils import * -import sys,os +import sys, os sys.path.append(os.getenv("OPENRAM_HOME")) import globals from globals import OPTS diff --git a/compiler/tests/10_write_driver_array_test.py b/compiler/tests/10_write_driver_array_test.py index 8db26a5a..08365d34 100755 --- a/compiler/tests/10_write_driver_array_test.py +++ b/compiler/tests/10_write_driver_array_test.py @@ -8,7 +8,7 @@ # import unittest from testutils import * -import sys,os +import sys, os sys.path.append(os.getenv("OPENRAM_HOME")) import globals from globals import OPTS diff --git a/compiler/tests/10_write_mask_and_array_1rw_1r_test.py b/compiler/tests/10_write_mask_and_array_1rw_1r_test.py index 1331747d..d2a998df 100755 --- a/compiler/tests/10_write_mask_and_array_1rw_1r_test.py +++ b/compiler/tests/10_write_mask_and_array_1rw_1r_test.py @@ -9,7 +9,6 @@ import unittest from testutils import * import sys, os - sys.path.append(os.getenv("OPENRAM_HOME")) import globals from globals import OPTS diff --git a/compiler/tests/11_dff_array_test.py b/compiler/tests/11_dff_array_test.py index 9d8798c5..ca3032be 100755 --- a/compiler/tests/11_dff_array_test.py +++ b/compiler/tests/11_dff_array_test.py @@ -8,7 +8,7 @@ # import unittest from testutils import * -import sys,os +import sys, os sys.path.append(os.getenv("OPENRAM_HOME")) import globals from globals import OPTS diff --git a/compiler/tests/11_dff_buf_array_test.py b/compiler/tests/11_dff_buf_array_test.py index 6eb338a5..6121a545 100755 --- a/compiler/tests/11_dff_buf_array_test.py +++ b/compiler/tests/11_dff_buf_array_test.py @@ -8,7 +8,7 @@ # import unittest from testutils import * -import sys,os +import sys, os sys.path.append(os.getenv("OPENRAM_HOME")) import globals from globals import OPTS diff --git a/compiler/tests/12_tri_gate_array_test.py b/compiler/tests/12_tri_gate_array_test.py index 24c00ecb..3bd5fa7c 100755 --- a/compiler/tests/12_tri_gate_array_test.py +++ b/compiler/tests/12_tri_gate_array_test.py @@ -8,7 +8,7 @@ # import unittest from testutils import * -import sys,os +import sys, os sys.path.append(os.getenv("OPENRAM_HOME")) import globals from globals import OPTS diff --git a/compiler/tests/13_delay_chain_test.py b/compiler/tests/13_delay_chain_test.py index 6930a077..d8d2041f 100755 --- a/compiler/tests/13_delay_chain_test.py +++ b/compiler/tests/13_delay_chain_test.py @@ -8,7 +8,7 @@ # import unittest from testutils import * -import sys,os +import sys, os sys.path.append(os.getenv("OPENRAM_HOME")) import globals from globals import OPTS diff --git a/compiler/tests/14_replica_bitcell_array_1rw_1r_test.py b/compiler/tests/14_replica_bitcell_array_1rw_1r_test.py index 54181058..cf66692e 100755 --- a/compiler/tests/14_replica_bitcell_array_1rw_1r_test.py +++ b/compiler/tests/14_replica_bitcell_array_1rw_1r_test.py @@ -6,13 +6,14 @@ # import unittest from testutils import * -import sys,os +import sys, os sys.path.append(os.getenv("OPENRAM_HOME")) import globals from globals import OPTS from sram_factory import factory import debug + class replica_bitcell_array_1rw_1r_test(openram_test): def runTest(self): diff --git a/compiler/tests/14_replica_bitcell_array_test.py b/compiler/tests/14_replica_bitcell_array_test.py index d9cf7ac6..98ee0a43 100755 --- a/compiler/tests/14_replica_bitcell_array_test.py +++ b/compiler/tests/14_replica_bitcell_array_test.py @@ -6,7 +6,7 @@ # import unittest from testutils import * -import sys,os +import sys, os sys.path.append(os.getenv("OPENRAM_HOME")) import globals from globals import OPTS diff --git a/compiler/tests/14_replica_column_1rw_1r_test.py b/compiler/tests/14_replica_column_1rw_1r_test.py index f98543a3..d197a234 100755 --- a/compiler/tests/14_replica_column_1rw_1r_test.py +++ b/compiler/tests/14_replica_column_1rw_1r_test.py @@ -6,13 +6,14 @@ # import unittest from testutils import * -import sys,os +import sys, os sys.path.append(os.getenv("OPENRAM_HOME")) import globals from globals import OPTS from sram_factory import factory import debug + class replica_column_test(openram_test): def runTest(self): diff --git a/compiler/tests/14_replica_column_test.py b/compiler/tests/14_replica_column_test.py index 8ac5eea9..4701cdca 100755 --- a/compiler/tests/14_replica_column_test.py +++ b/compiler/tests/14_replica_column_test.py @@ -25,12 +25,10 @@ class replica_column_test(openram_test): self.local_check(a) debug.info(2, "Testing replica column for cell_1rw_1r") - globals.setup_bitcell() a = factory.create(module_type="replica_column", rows=4, rbl=[1, 1], replica_bit=6) self.local_check(a) debug.info(2, "Testing replica column for cell_1rw_1r") - globals.setup_bitcell() a = factory.create(module_type="replica_column", rows=4, rbl=[2, 0], replica_bit=2) self.local_check(a) diff --git a/compiler/tests/14_replica_pbitcell_array_test.py b/compiler/tests/14_replica_pbitcell_array_test.py index 1cd2d9fc..617b7a3f 100755 --- a/compiler/tests/14_replica_pbitcell_array_test.py +++ b/compiler/tests/14_replica_pbitcell_array_test.py @@ -6,7 +6,7 @@ # import unittest from testutils import * -import sys,os +import sys, os sys.path.append(os.getenv("OPENRAM_HOME")) import globals from globals import OPTS diff --git a/compiler/tests/16_control_logic_multiport_test.py b/compiler/tests/16_control_logic_multiport_test.py index a660ff55..003807f6 100755 --- a/compiler/tests/16_control_logic_multiport_test.py +++ b/compiler/tests/16_control_logic_multiport_test.py @@ -12,7 +12,7 @@ Run a regression test on a control_logic import unittest from testutils import header,openram_test -import sys,os +import sys, os sys.path.append(os.path.join(sys.path[0],"..")) import globals from globals import OPTS diff --git a/compiler/tests/16_control_logic_w_test.py b/compiler/tests/16_control_logic_w_test.py index 3bc9f545..2e5656f4 100755 --- a/compiler/tests/16_control_logic_w_test.py +++ b/compiler/tests/16_control_logic_w_test.py @@ -8,7 +8,7 @@ # import unittest from testutils import * -import sys,os +import sys, os sys.path.append(os.getenv("OPENRAM_HOME")) import globals from globals import OPTS diff --git a/compiler/tests/18_port_address_1rw_1r_test.py b/compiler/tests/18_port_address_1rw_1r_test.py index 3b8da0b7..51fa5078 100755 --- a/compiler/tests/18_port_address_1rw_1r_test.py +++ b/compiler/tests/18_port_address_1rw_1r_test.py @@ -6,7 +6,7 @@ # import unittest from testutils import * -import sys,os +import sys, os sys.path.append(os.getenv("OPENRAM_HOME")) import globals from globals import OPTS diff --git a/compiler/tests/18_port_address_test.py b/compiler/tests/18_port_address_test.py index a3cb9bd9..34a59a19 100755 --- a/compiler/tests/18_port_address_test.py +++ b/compiler/tests/18_port_address_test.py @@ -6,7 +6,7 @@ # import unittest from testutils import * -import sys,os +import sys, os sys.path.append(os.getenv("OPENRAM_HOME")) import globals from globals import OPTS diff --git a/compiler/tests/18_port_data_1rw_1r_test.py b/compiler/tests/18_port_data_1rw_1r_test.py index e8205c1a..409d6dfd 100755 --- a/compiler/tests/18_port_data_1rw_1r_test.py +++ b/compiler/tests/18_port_data_1rw_1r_test.py @@ -6,7 +6,7 @@ # import unittest from testutils import * -import sys,os +import sys, os sys.path.append(os.getenv("OPENRAM_HOME")) import globals from globals import OPTS diff --git a/compiler/tests/18_port_data_test.py b/compiler/tests/18_port_data_test.py index ae305cea..069e9db3 100755 --- a/compiler/tests/18_port_data_test.py +++ b/compiler/tests/18_port_data_test.py @@ -6,7 +6,7 @@ # import unittest from testutils import * -import sys,os +import sys, os sys.path.append(os.getenv("OPENRAM_HOME")) import globals from globals import OPTS diff --git a/compiler/tests/18_port_data_wmask_1rw_1r_test.py b/compiler/tests/18_port_data_wmask_1rw_1r_test.py index 1f56bd62..8502576f 100755 --- a/compiler/tests/18_port_data_wmask_1rw_1r_test.py +++ b/compiler/tests/18_port_data_wmask_1rw_1r_test.py @@ -7,7 +7,6 @@ import unittest from testutils import * import sys, os - sys.path.append(os.getenv("OPENRAM_HOME")) import globals from globals import OPTS diff --git a/compiler/tests/19_bank_select_pbitcell_test.py b/compiler/tests/19_bank_select_pbitcell_test.py index 6bf5929e..0b2d9a36 100755 --- a/compiler/tests/19_bank_select_pbitcell_test.py +++ b/compiler/tests/19_bank_select_pbitcell_test.py @@ -8,7 +8,7 @@ # import unittest from testutils import * -import sys,os +import sys, os sys.path.append(os.getenv("OPENRAM_HOME")) import globals from globals import OPTS diff --git a/compiler/tests/19_bank_select_test.py b/compiler/tests/19_bank_select_test.py index afec4c3c..becb0fe9 100755 --- a/compiler/tests/19_bank_select_test.py +++ b/compiler/tests/19_bank_select_test.py @@ -8,7 +8,7 @@ # import unittest from testutils import * -import sys,os +import sys, os sys.path.append(os.getenv("OPENRAM_HOME")) import globals from globals import OPTS diff --git a/compiler/tests/19_multi_bank_test.py b/compiler/tests/19_multi_bank_test.py index c2782954..6d9f4436 100755 --- a/compiler/tests/19_multi_bank_test.py +++ b/compiler/tests/19_multi_bank_test.py @@ -8,7 +8,7 @@ # import unittest from testutils import * -import sys,os +import sys, os sys.path.append(os.getenv("OPENRAM_HOME")) import globals from globals import OPTS diff --git a/compiler/tests/19_pmulti_bank_test.py b/compiler/tests/19_pmulti_bank_test.py index 0e736973..758ad58c 100755 --- a/compiler/tests/19_pmulti_bank_test.py +++ b/compiler/tests/19_pmulti_bank_test.py @@ -8,7 +8,7 @@ # import unittest from testutils import * -import sys,os +import sys, os sys.path.append(os.getenv("OPENRAM_HOME")) import globals from globals import OPTS diff --git a/compiler/tests/19_single_bank_spare_cols_test.py b/compiler/tests/19_single_bank_spare_cols_test.py index 78c8f497..5fcf9a41 100755 --- a/compiler/tests/19_single_bank_spare_cols_test.py +++ b/compiler/tests/19_single_bank_spare_cols_test.py @@ -8,7 +8,7 @@ # import unittest from testutils import * -import sys,os +import sys, os sys.path.append(os.getenv("OPENRAM_HOME")) import globals from globals import OPTS diff --git a/compiler/tests/19_single_bank_wmask_1rw_1r_test.py b/compiler/tests/19_single_bank_wmask_1rw_1r_test.py index 0137ad61..d494972d 100755 --- a/compiler/tests/19_single_bank_wmask_1rw_1r_test.py +++ b/compiler/tests/19_single_bank_wmask_1rw_1r_test.py @@ -8,13 +8,14 @@ # import unittest from testutils import * -import sys,os +import sys, os sys.path.append(os.getenv("OPENRAM_HOME")) import globals from globals import OPTS from sram_factory import factory import debug + class single_bank_wmask_1rw_1r_test(openram_test): def runTest(self): diff --git a/compiler/tests/19_single_bank_wmask_test.py b/compiler/tests/19_single_bank_wmask_test.py index e36bd2df..60b0570d 100755 --- a/compiler/tests/19_single_bank_wmask_test.py +++ b/compiler/tests/19_single_bank_wmask_test.py @@ -8,7 +8,7 @@ # import unittest from testutils import * -import sys,os +import sys, os sys.path.append(os.getenv("OPENRAM_HOME")) import globals from globals import OPTS diff --git a/compiler/tests/20_psram_1bank_2mux_1rw_1w_wmask_test.py b/compiler/tests/20_psram_1bank_2mux_1rw_1w_wmask_test.py index 23b2d490..896b2a13 100755 --- a/compiler/tests/20_psram_1bank_2mux_1rw_1w_wmask_test.py +++ b/compiler/tests/20_psram_1bank_2mux_1rw_1w_wmask_test.py @@ -16,7 +16,6 @@ from sram_factory import factory import debug -# @unittest.skip("SKIPPING psram_1bank_2mux_1rw_1w_wmask_test, multiport layout not complete") class psram_1bank_2mux_1rw_1w_wmask_test(openram_test): def runTest(self): diff --git a/compiler/tests/21_hspice_delay_test.py b/compiler/tests/21_hspice_delay_test.py index 779118cf..f7af5152 100755 --- a/compiler/tests/21_hspice_delay_test.py +++ b/compiler/tests/21_hspice_delay_test.py @@ -8,7 +8,7 @@ # import unittest from testutils import * -import sys,os +import sys, os sys.path.append(os.getenv("OPENRAM_HOME")) import globals from globals import OPTS diff --git a/compiler/tests/21_hspice_setuphold_test.py b/compiler/tests/21_hspice_setuphold_test.py index f07b70f1..e9ab660d 100755 --- a/compiler/tests/21_hspice_setuphold_test.py +++ b/compiler/tests/21_hspice_setuphold_test.py @@ -8,7 +8,7 @@ # import unittest from testutils import * -import sys,os +import sys, os sys.path.append(os.getenv("OPENRAM_HOME")) import globals from globals import OPTS diff --git a/compiler/tests/21_model_delay_test.py b/compiler/tests/21_model_delay_test.py index a570c3ed..e711c7ca 100755 --- a/compiler/tests/21_model_delay_test.py +++ b/compiler/tests/21_model_delay_test.py @@ -8,7 +8,7 @@ # import unittest from testutils import * -import sys,os +import sys, os sys.path.append(os.getenv("OPENRAM_HOME")) import globals from globals import OPTS diff --git a/compiler/tests/21_ngspice_delay_extra_rows_test.py b/compiler/tests/21_ngspice_delay_extra_rows_test.py index 43b64154..73b7fe0a 100755 --- a/compiler/tests/21_ngspice_delay_extra_rows_test.py +++ b/compiler/tests/21_ngspice_delay_extra_rows_test.py @@ -8,7 +8,7 @@ # import unittest from testutils import * -import sys,os +import sys, os sys.path.append(os.getenv("OPENRAM_HOME")) import globals from globals import OPTS diff --git a/compiler/tests/21_ngspice_delay_global_test.py b/compiler/tests/21_ngspice_delay_global_test.py index d4cbfafa..3cabb312 100755 --- a/compiler/tests/21_ngspice_delay_global_test.py +++ b/compiler/tests/21_ngspice_delay_global_test.py @@ -8,7 +8,7 @@ # import unittest from testutils import * -import sys,os +import sys, os sys.path.append(os.getenv("OPENRAM_HOME")) import globals from globals import OPTS diff --git a/compiler/tests/21_ngspice_delay_test.py b/compiler/tests/21_ngspice_delay_test.py index 81388ccd..d283482a 100755 --- a/compiler/tests/21_ngspice_delay_test.py +++ b/compiler/tests/21_ngspice_delay_test.py @@ -8,7 +8,7 @@ # import unittest from testutils import * -import sys,os +import sys, os sys.path.append(os.getenv("OPENRAM_HOME")) import globals from globals import OPTS diff --git a/compiler/tests/21_ngspice_setuphold_test.py b/compiler/tests/21_ngspice_setuphold_test.py index 84ce882b..36a7b5e8 100755 --- a/compiler/tests/21_ngspice_setuphold_test.py +++ b/compiler/tests/21_ngspice_setuphold_test.py @@ -8,7 +8,7 @@ # import unittest from testutils import * -import sys,os +import sys, os sys.path.append(os.getenv("OPENRAM_HOME")) import globals from globals import OPTS diff --git a/compiler/tests/22_sram_1bank_nomux_1rw_1r_func_test.py b/compiler/tests/22_sram_1bank_nomux_1rw_1r_func_test.py index 513f74b2..fbeb08c5 100755 --- a/compiler/tests/22_sram_1bank_nomux_1rw_1r_func_test.py +++ b/compiler/tests/22_sram_1bank_nomux_1rw_1r_func_test.py @@ -16,7 +16,6 @@ from sram_factory import factory import debug -#@unittest.skip("SKIPPING 22_sram_1rw_1r_1bank_nomux_func_test") class psram_1bank_nomux_func_test(openram_test): def runTest(self): diff --git a/compiler/tests/22_sram_1bank_wmask_1rw_1r_func_test.py b/compiler/tests/22_sram_1bank_wmask_1rw_1r_func_test.py index 806c7b46..f5573ae2 100755 --- a/compiler/tests/22_sram_1bank_wmask_1rw_1r_func_test.py +++ b/compiler/tests/22_sram_1bank_wmask_1rw_1r_func_test.py @@ -9,7 +9,6 @@ import unittest from testutils import * import sys, os - sys.path.append(os.getenv("OPENRAM_HOME")) import globals from globals import OPTS @@ -17,7 +16,6 @@ from sram_factory import factory import debug -# @unittest.skip("SKIPPING sram_wmask_1w_1r_func_test") class sram_wmask_1w_1r_func_test(openram_test): def runTest(self): diff --git a/compiler/tests/23_lib_sram_model_corners_test.py b/compiler/tests/23_lib_sram_model_corners_test.py index 2b5d9234..781ea79b 100755 --- a/compiler/tests/23_lib_sram_model_corners_test.py +++ b/compiler/tests/23_lib_sram_model_corners_test.py @@ -8,7 +8,7 @@ # import unittest from testutils import * -import sys,os,re +import sys, os,re sys.path.append(os.getenv("OPENRAM_HOME")) import globals from globals import OPTS diff --git a/compiler/tests/23_lib_sram_model_test.py b/compiler/tests/23_lib_sram_model_test.py index c502b892..c3dcc11a 100755 --- a/compiler/tests/23_lib_sram_model_test.py +++ b/compiler/tests/23_lib_sram_model_test.py @@ -8,7 +8,7 @@ # import unittest from testutils import * -import sys,os,re +import sys, os,re sys.path.append(os.getenv("OPENRAM_HOME")) import globals from globals import OPTS diff --git a/compiler/tests/23_lib_sram_prune_test.py b/compiler/tests/23_lib_sram_prune_test.py index 6021147c..58dc6e93 100755 --- a/compiler/tests/23_lib_sram_prune_test.py +++ b/compiler/tests/23_lib_sram_prune_test.py @@ -8,7 +8,7 @@ # import unittest from testutils import * -import sys,os,re +import sys, os,re sys.path.append(os.getenv("OPENRAM_HOME")) import globals from globals import OPTS diff --git a/compiler/tests/23_lib_sram_test.py b/compiler/tests/23_lib_sram_test.py index b370db8f..4b9e78d5 100755 --- a/compiler/tests/23_lib_sram_test.py +++ b/compiler/tests/23_lib_sram_test.py @@ -8,7 +8,7 @@ # import unittest from testutils import * -import sys,os,re +import sys, os,re sys.path.append(os.getenv("OPENRAM_HOME")) import globals from globals import OPTS diff --git a/compiler/tests/24_lef_sram_test.py b/compiler/tests/24_lef_sram_test.py index 14ad551f..2178bee8 100755 --- a/compiler/tests/24_lef_sram_test.py +++ b/compiler/tests/24_lef_sram_test.py @@ -8,7 +8,7 @@ # import unittest from testutils import * -import sys,os +import sys, os sys.path.append(os.getenv("OPENRAM_HOME")) import globals from globals import OPTS diff --git a/compiler/tests/25_verilog_sram_test.py b/compiler/tests/25_verilog_sram_test.py index 0d3be92a..cf6fb9c9 100755 --- a/compiler/tests/25_verilog_sram_test.py +++ b/compiler/tests/25_verilog_sram_test.py @@ -8,7 +8,7 @@ # import unittest from testutils import * -import sys,os +import sys, os sys.path.append(os.getenv("OPENRAM_HOME")) import globals from globals import OPTS diff --git a/compiler/tests/26_ngspice_pex_pinv_test.py b/compiler/tests/26_ngspice_pex_pinv_test.py index 67413bae..890ecb8b 100755 --- a/compiler/tests/26_ngspice_pex_pinv_test.py +++ b/compiler/tests/26_ngspice_pex_pinv_test.py @@ -10,7 +10,7 @@ with Ngspice. """ import unittest from testutils import header,openram_test -import sys,os +import sys, os sys.path.append(os.path.join(sys.path[0],"..")) import globals from globals import OPTS diff --git a/compiler/tests/30_openram_back_end_test.py b/compiler/tests/30_openram_back_end_test.py index 85d52750..01c62a10 100755 --- a/compiler/tests/30_openram_back_end_test.py +++ b/compiler/tests/30_openram_back_end_test.py @@ -8,7 +8,7 @@ # import unittest from testutils import * -import sys,os,re,shutil +import sys, os,re,shutil sys.path.append(os.getenv("OPENRAM_HOME")) import globals from globals import OPTS diff --git a/compiler/tests/30_openram_front_end_test.py b/compiler/tests/30_openram_front_end_test.py index 9a412ada..88d673b6 100755 --- a/compiler/tests/30_openram_front_end_test.py +++ b/compiler/tests/30_openram_front_end_test.py @@ -8,7 +8,7 @@ # import unittest from testutils import * -import sys,os,re,shutil +import sys, os,re,shutil sys.path.append(os.getenv("OPENRAM_HOME")) import globals from globals import OPTS diff --git a/technology/scn4m_subm/tech/tech.py b/technology/scn4m_subm/tech/tech.py index 0bea4035..8ddbd9b0 100644 --- a/technology/scn4m_subm/tech/tech.py +++ b/technology/scn4m_subm/tech/tech.py @@ -32,7 +32,7 @@ tech_modules = module_type() cell_properties = cell_properties() cell_properties.bitcell.mirror.x = True cell_properties.bitcell.mirror.y = False - +cell_properties.names["bitcell"] = "mycell" ################################################### # Custom cell properties ################################################### From 1de545fc8e48b56480661b18f48dbd93b5acdba7 Mon Sep 17 00:00:00 2001 From: mrg Date: Tue, 3 Nov 2020 13:32:15 -0800 Subject: [PATCH 38/67] Fix row and col cap custom names by adding default. --- compiler/base/custom_cell_properties.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/compiler/base/custom_cell_properties.py b/compiler/base/custom_cell_properties.py index 92e11fb9..7d903a14 100644 --- a/compiler/base/custom_cell_properties.py +++ b/compiler/base/custom_cell_properties.py @@ -146,6 +146,12 @@ class cell_properties(): self.names["replica_bitcell"] = "replica_cell_6t" self.names["replica_bitcell_1rw_1r"] = "replica_cell_1rw_1r" self.names["replica_bitcell_1r_1w"] = "replica_cell_1r_1w" + self.names["col_cap_bitcell_6t"] = "col_cap_cell_6t" + self.names["col_cap_bitcell_1rw_1r"] = "col_cap_cell_1rw_1r" + self.names["col_cap_bitcell_1r_1w"] = "col_cap_cell_1r_1w" + self.names["row_cap_bitcell_6t"] = "row_cap_cell_6t" + self.names["row_cap_bitcell_1rw_1r"] = "row_cap_cell_1rw_1r" + self.names["row_cap_bitcell_1r_1w"] = "row_cap_cell_1r_1w" self._bitcell = _bitcell._default() From fb9956fe96835bd6bee88b7216f5870fcf1edb93 Mon Sep 17 00:00:00 2001 From: mrg Date: Tue, 3 Nov 2020 13:50:45 -0800 Subject: [PATCH 39/67] Fix missing include --- compiler/bitcells/replica_bitcell.py | 1 + compiler/bitcells/replica_bitcell_1rw_1r.py | 1 + 2 files changed, 2 insertions(+) diff --git a/compiler/bitcells/replica_bitcell.py b/compiler/bitcells/replica_bitcell.py index bc233056..7ce9d433 100644 --- a/compiler/bitcells/replica_bitcell.py +++ b/compiler/bitcells/replica_bitcell.py @@ -8,6 +8,7 @@ import debug import bitcell_base from tech import cell_properties as props +from tech import parameter class replica_bitcell(bitcell_base.bitcell_base): diff --git a/compiler/bitcells/replica_bitcell_1rw_1r.py b/compiler/bitcells/replica_bitcell_1rw_1r.py index fd3ae27a..60e160c3 100644 --- a/compiler/bitcells/replica_bitcell_1rw_1r.py +++ b/compiler/bitcells/replica_bitcell_1rw_1r.py @@ -8,6 +8,7 @@ import debug import bitcell_base from tech import cell_properties as props +from tech import parameter class replica_bitcell_1rw_1r(bitcell_base.bitcell_base): From 2f12c77668b9b51acbb02f1a3bc6333ee8db0841 Mon Sep 17 00:00:00 2001 From: mrg Date: Tue, 3 Nov 2020 14:42:56 -0800 Subject: [PATCH 40/67] Create single port memory config examples. --- ...e.py => riscv-scn4m_subm-16kbyte-1rw1r.py} | 0 ...te.py => riscv-scn4m_subm-1kbyte-1rw1r.py} | 0 ...te.py => riscv-scn4m_subm-2kbyte-1rw1r.py} | 0 ...te.py => riscv-scn4m_subm-4kbyte-1rw1r.py} | 0 ...te.py => riscv-scn4m_subm-8kbyte-1rw1r.py} | 0 .../riscv-sky130-1kbyte-1rw.py | 26 +++++++++++++++++++ ...1kbyte.py => riscv-sky130-1kbyte-1rw1r.py} | 2 +- .../riscv-sky130-2kbyte-1rw.py | 26 +++++++++++++++++++ ...2kbyte.py => riscv-sky130-2kbyte-1rw1r.py} | 2 +- .../riscv-sky130-4kbyte-1rw.py | 26 +++++++++++++++++++ ...4kbyte.py => riscv-sky130-4kbyte-1rw1r.py} | 2 +- 11 files changed, 81 insertions(+), 3 deletions(-) rename compiler/example_configs/{riscv-scn4m_subm-16kbyte.py => riscv-scn4m_subm-16kbyte-1rw1r.py} (100%) rename compiler/example_configs/{riscv-scn4m_subm-1kbyte.py => riscv-scn4m_subm-1kbyte-1rw1r.py} (100%) rename compiler/example_configs/{riscv-scn4m_subm-2kbyte.py => riscv-scn4m_subm-2kbyte-1rw1r.py} (100%) rename compiler/example_configs/{riscv-scn4m_subm-4kbyte.py => riscv-scn4m_subm-4kbyte-1rw1r.py} (100%) rename compiler/example_configs/{riscv-scn4m_subm-8kbyte.py => riscv-scn4m_subm-8kbyte-1rw1r.py} (100%) create mode 100644 compiler/example_configs/riscv-sky130-1kbyte-1rw.py rename compiler/example_configs/{riscv-sky130-1kbyte.py => riscv-sky130-1kbyte-1rw1r.py} (97%) create mode 100644 compiler/example_configs/riscv-sky130-2kbyte-1rw.py rename compiler/example_configs/{riscv-sky130-2kbyte.py => riscv-sky130-2kbyte-1rw1r.py} (97%) create mode 100644 compiler/example_configs/riscv-sky130-4kbyte-1rw.py rename compiler/example_configs/{riscv-sky130-4kbyte.py => riscv-sky130-4kbyte-1rw1r.py} (97%) diff --git a/compiler/example_configs/riscv-scn4m_subm-16kbyte.py b/compiler/example_configs/riscv-scn4m_subm-16kbyte-1rw1r.py similarity index 100% rename from compiler/example_configs/riscv-scn4m_subm-16kbyte.py rename to compiler/example_configs/riscv-scn4m_subm-16kbyte-1rw1r.py diff --git a/compiler/example_configs/riscv-scn4m_subm-1kbyte.py b/compiler/example_configs/riscv-scn4m_subm-1kbyte-1rw1r.py similarity index 100% rename from compiler/example_configs/riscv-scn4m_subm-1kbyte.py rename to compiler/example_configs/riscv-scn4m_subm-1kbyte-1rw1r.py diff --git a/compiler/example_configs/riscv-scn4m_subm-2kbyte.py b/compiler/example_configs/riscv-scn4m_subm-2kbyte-1rw1r.py similarity index 100% rename from compiler/example_configs/riscv-scn4m_subm-2kbyte.py rename to compiler/example_configs/riscv-scn4m_subm-2kbyte-1rw1r.py diff --git a/compiler/example_configs/riscv-scn4m_subm-4kbyte.py b/compiler/example_configs/riscv-scn4m_subm-4kbyte-1rw1r.py similarity index 100% rename from compiler/example_configs/riscv-scn4m_subm-4kbyte.py rename to compiler/example_configs/riscv-scn4m_subm-4kbyte-1rw1r.py diff --git a/compiler/example_configs/riscv-scn4m_subm-8kbyte.py b/compiler/example_configs/riscv-scn4m_subm-8kbyte-1rw1r.py similarity index 100% rename from compiler/example_configs/riscv-scn4m_subm-8kbyte.py rename to compiler/example_configs/riscv-scn4m_subm-8kbyte-1rw1r.py diff --git a/compiler/example_configs/riscv-sky130-1kbyte-1rw.py b/compiler/example_configs/riscv-sky130-1kbyte-1rw.py new file mode 100644 index 00000000..7d68dbd1 --- /dev/null +++ b/compiler/example_configs/riscv-sky130-1kbyte-1rw.py @@ -0,0 +1,26 @@ +word_size = 32 +num_words = 256 +write_size = 8 + +local_array_size = 16 + +num_rw_ports = 1 +num_r_ports = 0 +num_w_ports = 0 + +tech_name = "sky130" +nominal_corner_only = True + +route_supplies = False +check_lvsdrc = True +perimeter_pins = False +#netlist_only = True +#analytical_delay = False +output_path = "macros/sram_1rw_{0}_{1}_{2}_{3}".format(word_size, + num_words, + write_size, + tech_name) +output_name = "sram_1rw_{0}_{1}_{2}_{3}".format(word_size, + num_words, + write_size, + tech_name) diff --git a/compiler/example_configs/riscv-sky130-1kbyte.py b/compiler/example_configs/riscv-sky130-1kbyte-1rw1r.py similarity index 97% rename from compiler/example_configs/riscv-sky130-1kbyte.py rename to compiler/example_configs/riscv-sky130-1kbyte-1rw1r.py index 85e20d3a..f33ad55a 100644 --- a/compiler/example_configs/riscv-sky130-1kbyte.py +++ b/compiler/example_configs/riscv-sky130-1kbyte-1rw1r.py @@ -11,7 +11,7 @@ num_w_ports = 0 tech_name = "sky130" nominal_corner_only = True -route_supplies = True +route_supplies = False check_lvsdrc = True perimeter_pins = False #netlist_only = True diff --git a/compiler/example_configs/riscv-sky130-2kbyte-1rw.py b/compiler/example_configs/riscv-sky130-2kbyte-1rw.py new file mode 100644 index 00000000..482eebc5 --- /dev/null +++ b/compiler/example_configs/riscv-sky130-2kbyte-1rw.py @@ -0,0 +1,26 @@ +word_size = 32 +num_words = 512 +write_size = 8 + +local_array_size = 16 + +num_rw_ports = 1 +num_r_ports = 0 +num_w_ports = 0 + +tech_name = "sky130" +nominal_corner_only = True + +route_supplies = False +check_lvsdrc = True +perimeter_pins = False +#netlist_only = True +#analytical_delay = False +output_path = "macros/sram_1rw_{0}_{1}_{2}_{3}".format(word_size, + num_words, + write_size, + tech_name) +output_name = "sram_1rw_{0}_{1}_{2}_{3}".format(word_size, + num_words, + write_size, + tech_name) diff --git a/compiler/example_configs/riscv-sky130-2kbyte.py b/compiler/example_configs/riscv-sky130-2kbyte-1rw1r.py similarity index 97% rename from compiler/example_configs/riscv-sky130-2kbyte.py rename to compiler/example_configs/riscv-sky130-2kbyte-1rw1r.py index 3a25b906..c2a90a36 100644 --- a/compiler/example_configs/riscv-sky130-2kbyte.py +++ b/compiler/example_configs/riscv-sky130-2kbyte-1rw1r.py @@ -11,7 +11,7 @@ num_w_ports = 0 tech_name = "sky130" nominal_corner_only = True -route_supplies = True +route_supplies = False check_lvsdrc = True perimeter_pins = False #netlist_only = True diff --git a/compiler/example_configs/riscv-sky130-4kbyte-1rw.py b/compiler/example_configs/riscv-sky130-4kbyte-1rw.py new file mode 100644 index 00000000..9e11116e --- /dev/null +++ b/compiler/example_configs/riscv-sky130-4kbyte-1rw.py @@ -0,0 +1,26 @@ +word_size = 32 +num_words = 1024 +write_size = 8 + +local_array_size = 16 + +num_rw_ports = 1 +num_r_ports = 0 +num_w_ports = 0 + +tech_name = "sky130" +nominal_corner_only = True + +route_supplies = False +check_lvsdrc = True +perimeter_pins = False +#netlist_only = True +#analytical_delay = False +output_path = "macros/sram_1rw_{0}_{1}_{2}_{3}".format(word_size, + num_words, + write_size, + tech_name) +output_name = "sram_1rw_{0}_{1}_{2}_{3}".format(word_size, + num_words, + write_size, + tech_name) diff --git a/compiler/example_configs/riscv-sky130-4kbyte.py b/compiler/example_configs/riscv-sky130-4kbyte-1rw1r.py similarity index 97% rename from compiler/example_configs/riscv-sky130-4kbyte.py rename to compiler/example_configs/riscv-sky130-4kbyte-1rw1r.py index 13bdb629..2da1c708 100644 --- a/compiler/example_configs/riscv-sky130-4kbyte.py +++ b/compiler/example_configs/riscv-sky130-4kbyte-1rw1r.py @@ -11,7 +11,7 @@ num_w_ports = 0 tech_name = "sky130" nominal_corner_only = True -route_supplies = True +route_supplies = False check_lvsdrc = True perimeter_pins = False #netlist_only = True From 29f4ee492b9542898b4d5f6d645d40703c32bfcb Mon Sep 17 00:00:00 2001 From: mrg Date: Tue, 3 Nov 2020 15:24:44 -0800 Subject: [PATCH 41/67] Fix missing imports in replica bitcells. --- compiler/bitcells/replica_bitcell.py | 17 +++++++++-------- compiler/bitcells/replica_bitcell_1rw_1r.py | 19 ++++++++++--------- compiler/bitcells/replica_bitcell_1w_1r.py | 20 +++++++++++--------- 3 files changed, 30 insertions(+), 26 deletions(-) diff --git a/compiler/bitcells/replica_bitcell.py b/compiler/bitcells/replica_bitcell.py index 7ce9d433..74e121ee 100644 --- a/compiler/bitcells/replica_bitcell.py +++ b/compiler/bitcells/replica_bitcell.py @@ -8,7 +8,8 @@ import debug import bitcell_base from tech import cell_properties as props -from tech import parameter +from tech import parameter, drc +import logical_effort class replica_bitcell(bitcell_base.bitcell_base): @@ -31,23 +32,23 @@ class replica_bitcell(bitcell_base.bitcell_base): def get_stage_effort(self, load): parasitic_delay = 1 - size = 0.5 #This accounts for bitline being drained thought the access TX and internal node - cin = 3 #Assumes always a minimum sizes inverter. Could be specified in the tech.py file. - read_port_load = 0.5 #min size NMOS gate load - return logical_effort.logical_effort('bitline', size, cin, load+read_port_load, parasitic_delay, False) + size = 0.5 # This accounts for bitline being drained thought the access TX and internal node + cin = 3 # Assumes always a minimum sizes inverter. Could be specified in the tech.py file. + read_port_load = 0.5 # min size NMOS gate load + return logical_effort.logical_effort('bitline', size, cin, load + read_port_load, parasitic_delay, False) def input_load(self): """Return the relative capacitance of the access transistor gates""" # FIXME: This applies to bitline capacitances as well. - access_tx_cin = parameter["6T_access_size"]/drc["minwidth_tx"] - return 2*access_tx_cin + access_tx_cin = parameter["6T_access_size"] / drc["minwidth_tx"] + return 2 * access_tx_cin def analytical_power(self, corner, load): """Bitcell power in nW. Only characterizes leakage.""" from tech import spice leakage = spice["bitcell_leakage"] - dynamic = 0 #temporary + dynamic = 0 # FIXME total_power = self.return_power(dynamic, leakage) return total_power diff --git a/compiler/bitcells/replica_bitcell_1rw_1r.py b/compiler/bitcells/replica_bitcell_1rw_1r.py index 60e160c3..9dc9aac9 100644 --- a/compiler/bitcells/replica_bitcell_1rw_1r.py +++ b/compiler/bitcells/replica_bitcell_1rw_1r.py @@ -8,7 +8,8 @@ import debug import bitcell_base from tech import cell_properties as props -from tech import parameter +from tech import parameter, drc +import logical_effort class replica_bitcell_1rw_1r(bitcell_base.bitcell_base): @@ -34,25 +35,25 @@ class replica_bitcell_1rw_1r(bitcell_base.bitcell_base): def get_stage_effort(self, load): parasitic_delay = 1 - size = 0.5 #This accounts for bitline being drained thought the access TX and internal node - cin = 3 #Assumes always a minimum sizes inverter. Could be specified in the tech.py file. - read_port_load = 0.5 #min size NMOS gate load - return logical_effort.logical_effort('bitline', size, cin, load+read_port_load, parasitic_delay, False) + size = 0.5 # This accounts for bitline being drained thought the access TX and internal node + cin = 3 # Assumes always a minimum sizes inverter. Could be specified in the tech.py file. + read_port_load = 0.5 # min size NMOS gate load + return logical_effort.logical_effort('bitline', size, cin, load + read_port_load, parasitic_delay, False) def input_load(self): """Return the relative capacitance of the access transistor gates""" # FIXME: This applies to bitline capacitances as well. # FIXME: sizing is not accurate with the handmade cell. Change once cell widths are fixed. - access_tx_cin = parameter["6T_access_size"]/drc["minwidth_tx"] - return 2*access_tx_cin + access_tx_cin = parameter["6T_access_size"] / drc["minwidth_tx"] + return 2 * access_tx_cin def build_graph(self, graph, inst_name, port_nets): """Adds edges to graph. Multiport bitcell timing graph is too complex to use the add_graph_edges function.""" - pin_dict = {pin:port for pin,port in zip(self.pins, port_nets)} + pin_dict = {pin: port for pin, port in zip(self.pins, port_nets)} pins = props.bitcell.cell_1rw1r.pin - #Edges hardcoded here. Essentially wl->bl/br for both ports. + # Edges hardcoded here. Essentially wl->bl/br for both ports. # Port 0 edges graph.add_edge(pin_dict[pins.wl0], pin_dict[pins.bl0], self) graph.add_edge(pin_dict[pins.wl0], pin_dict[pins.br0], self) diff --git a/compiler/bitcells/replica_bitcell_1w_1r.py b/compiler/bitcells/replica_bitcell_1w_1r.py index 4f09ed4f..59fa4676 100644 --- a/compiler/bitcells/replica_bitcell_1w_1r.py +++ b/compiler/bitcells/replica_bitcell_1w_1r.py @@ -8,6 +8,8 @@ import debug import bitcell_base from tech import cell_properties as props +from tech import parameter, drc +import logical_effort class replica_bitcell_1w_1r(bitcell_base.bitcell_base): @@ -33,26 +35,26 @@ class replica_bitcell_1w_1r(bitcell_base.bitcell_base): def get_stage_effort(self, load): parasitic_delay = 1 - size = 0.5 #This accounts for bitline being drained thought the access TX and internal node - cin = 3 #Assumes always a minimum sizes inverter. Could be specified in the tech.py file. - read_port_load = 0.5 #min size NMOS gate load - return logical_effort.logical_effort('bitline', size, cin, load+read_port_load, parasitic_delay, False) + size = 0.5 # This accounts for bitline being drained thought the access TX and internal node + cin = 3 # Assumes always a minimum sizes inverter. Could be specified in the tech.py file. + read_port_load = 0.5 # min size NMOS gate load + return logical_effort.logical_effort('bitline', size, cin, load + read_port_load, parasitic_delay, False) def input_load(self): """Return the relative capacitance of the access transistor gates""" # FIXME: This applies to bitline capacitances as well. # FIXME: sizing is not accurate with the handmade cell. Change once cell widths are fixed. - access_tx_cin = parameter["6T_access_size"]/drc["minwidth_tx"] - return 2*access_tx_cin + access_tx_cin = parameter["6T_access_size"] / drc["minwidth_tx"] + return 2 * access_tx_cin def build_graph(self, graph, inst_name, port_nets): """Adds edges to graph. Multiport bitcell timing graph is too complex to use the add_graph_edges function.""" - debug.info(1,'Adding edges for {}'.format(inst_name)) - pin_dict = {pin:port for pin,port in zip(self.pins, port_nets)} + debug.info(1, 'Adding edges for {}'.format(inst_name)) + pin_dict = {pin: port for pin, port in zip(self.pins, port_nets)} pins = props.bitcell.cell_1w1r.pin - #Edges hardcoded here. Essentially wl->bl/br for the read port. + # Edges hardcoded here. Essentially wl->bl/br for the read port. # Port 1 edges graph.add_edge(pin_dict[pins.wl1], pin_dict[pins.bl1], self) graph.add_edge(pin_dict[pins.wl1], pin_dict[pins.br1], self) From 6335bc37849ea906e5b2d37cc205535b2fe88b22 Mon Sep 17 00:00:00 2001 From: mrg Date: Tue, 3 Nov 2020 15:46:46 -0800 Subject: [PATCH 42/67] Do not drop to pdb shell when verbose --- compiler/debug.py | 6 ------ 1 file changed, 6 deletions(-) diff --git a/compiler/debug.py b/compiler/debug.py index f07471cc..15876f22 100644 --- a/compiler/debug.py +++ b/compiler/debug.py @@ -26,9 +26,6 @@ def check(check, str): log("ERROR: file {0}: line {1}: {2}\n".format( os.path.basename(filename), line_number, str)) - if globals.OPTS.debug_level > 0: - import pdb - pdb.set_trace() assert 0 @@ -40,9 +37,6 @@ def error(str, return_value=0): log("ERROR: file {0}: line {1}: {2}\n".format( os.path.basename(filename), line_number, str)) - if globals.OPTS.debug_level > 0 and return_value != 0: - import pdb - pdb.set_trace() assert return_value == 0 From 45cdecdea9c5368f419e7bdcbd78a669ce88a47a Mon Sep 17 00:00:00 2001 From: mrg Date: Tue, 3 Nov 2020 15:47:04 -0800 Subject: [PATCH 43/67] Improve error message about missing DRC/LVS tools. --- compiler/globals.py | 7 +++---- compiler/verify/__init__.py | 10 ++++++---- 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/compiler/globals.py b/compiler/globals.py index 32137437..5d553175 100644 --- a/compiler/globals.py +++ b/compiler/globals.py @@ -257,8 +257,8 @@ def get_tool(tool_type, preferences, default_name=None): if default_name: exe_name = find_exe(default_name) if exe_name == None: - debug.error("{0} not found. Cannot find {1} tool.".format(default_name, - tool_type), + debug.error("{0} not found. Cannot find {1} tool.".format(default_name, tool_type) + + "Disable DRC/LVS with check_lvsdrc=False to ignore.", 2) else: debug.info(1, "Using {0}: {1}".format(tool_type, exe_name)) @@ -271,8 +271,7 @@ def get_tool(tool_type, preferences, default_name=None): return(name, exe_name) else: debug.info(1, - "Could not find {0}, trying next {1} tool.".format(name, - tool_type)) + "Could not find {0}, trying next {1} tool.".format(name, tool_type)) else: return(None, "") diff --git a/compiler/verify/__init__.py b/compiler/verify/__init__.py index 4bcf93cc..8da102aa 100644 --- a/compiler/verify/__init__.py +++ b/compiler/verify/__init__.py @@ -15,7 +15,6 @@ run_pex, repsectively. If there is an error, they should abort and report the er If not, OpenRAM will continue as if nothing happened! """ -import os import debug from globals import OPTS from globals import get_tool @@ -49,7 +48,8 @@ elif "assura"==OPTS.drc_exe[0]: elif "magic"==OPTS.drc_exe[0]: from .magic import run_drc, print_drc_stats else: - debug.warning("Did not find a supported DRC tool.") + debug.error("Did not find a supported DRC tool." + + "Disable DRC/LVS with check_lvsdrc=False to ignore.", 2) if not OPTS.lvs_exe: from .none import run_lvs, print_lvs_stats @@ -60,7 +60,8 @@ elif "assura"==OPTS.lvs_exe[0]: elif "netgen"==OPTS.lvs_exe[0]: from .magic import run_lvs, print_lvs_stats else: - debug.warning("Did not find a supported LVS tool.") + debug.warning("Did not find a supported LVS tool." + + "Disable DRC/LVS with check_lvsdrc=False to ignore.", 2) if not OPTS.pex_exe: @@ -70,7 +71,8 @@ elif "calibre"==OPTS.pex_exe[0]: elif "magic"==OPTS.pex_exe[0]: from .magic import run_pex,print_pex_stats else: - debug.warning("Did not find a supported PEX tool.") + debug.warning("Did not find a supported PEX tool." + + "Disable DRC/LVS with check_lvsdrc=False to ignore.", 2) if OPTS.tech_name == "sky130": if OPTS.magic_exe and "magic"==OPTS.magic_exe[0]: From 423e2c165f2d94bb95dc40bf582ee73115516c67 Mon Sep 17 00:00:00 2001 From: mrg Date: Tue, 3 Nov 2020 16:38:55 -0800 Subject: [PATCH 44/67] Remove test cell in scn4m_subm tech.py --- technology/scn4m_subm/tech/tech.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/technology/scn4m_subm/tech/tech.py b/technology/scn4m_subm/tech/tech.py index 8ddbd9b0..0bea4035 100644 --- a/technology/scn4m_subm/tech/tech.py +++ b/technology/scn4m_subm/tech/tech.py @@ -32,7 +32,7 @@ tech_modules = module_type() cell_properties = cell_properties() cell_properties.bitcell.mirror.x = True cell_properties.bitcell.mirror.y = False -cell_properties.names["bitcell"] = "mycell" + ################################################### # Custom cell properties ################################################### From 3315fe32bacb1c24b71553fefc12f0d368f4c097 Mon Sep 17 00:00:00 2001 From: mrg Date: Tue, 3 Nov 2020 16:49:49 -0800 Subject: [PATCH 45/67] Improve nominal corner message --- compiler/globals.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/compiler/globals.py b/compiler/globals.py index 5d553175..216a6a34 100644 --- a/compiler/globals.py +++ b/compiler/globals.py @@ -606,4 +606,4 @@ def report_status(): if OPTS.trim_netlist: debug.print_raw("Trimming netlist to speed up characterization (trim_netlist=False to disable).") if OPTS.nominal_corner_only: - debug.print_raw("Only characterizing nominal corner.") + debug.print_raw("Only generating nominal corner timing.") From 844b850b74eb182bf5805ffd1a4182c6e625063c Mon Sep 17 00:00:00 2001 From: Matt Guthaus Date: Tue, 3 Nov 2020 17:14:45 -0800 Subject: [PATCH 46/67] Fix typo in 1w_1r bitcell --- compiler/base/custom_cell_properties.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/compiler/base/custom_cell_properties.py b/compiler/base/custom_cell_properties.py index 7d903a14..c592665a 100644 --- a/compiler/base/custom_cell_properties.py +++ b/compiler/base/custom_cell_properties.py @@ -139,19 +139,19 @@ class cell_properties(): self.names = {} self.names["bitcell"] = "cell_6t" self.names["bitcell_1rw_1r"] = "cell_1rw_1r" - self.names["bitcell_1r_1w"] = "cell_1r_1w" + self.names["bitcell_1w_1r"] = "cell_1w_1r" self.names["dummy_bitcell"] = "dummy_cell_6t" self.names["dummy_bitcell_1rw_1r"] = "dummy_cell_1rw_1r" - self.names["dummy_bitcell_1r_1w"] = "dummy_cell_1r_1w" + self.names["dummy_bitcell_1w_1r"] = "dummy_cell_1w_1r" self.names["replica_bitcell"] = "replica_cell_6t" self.names["replica_bitcell_1rw_1r"] = "replica_cell_1rw_1r" - self.names["replica_bitcell_1r_1w"] = "replica_cell_1r_1w" + self.names["replica_bitcell_1w_1r"] = "replica_cell_1w_1r" self.names["col_cap_bitcell_6t"] = "col_cap_cell_6t" self.names["col_cap_bitcell_1rw_1r"] = "col_cap_cell_1rw_1r" - self.names["col_cap_bitcell_1r_1w"] = "col_cap_cell_1r_1w" + self.names["col_cap_bitcell_1w_1r"] = "col_cap_cell_1w_1r" self.names["row_cap_bitcell_6t"] = "row_cap_cell_6t" self.names["row_cap_bitcell_1rw_1r"] = "row_cap_cell_1rw_1r" - self.names["row_cap_bitcell_1r_1w"] = "row_cap_cell_1r_1w" + self.names["row_cap_bitcell_1w_1r"] = "row_cap_cell_1w_1r" self._bitcell = _bitcell._default() From 6e12d4d46cd38dd0f7873a9e111f351ace03b469 Mon Sep 17 00:00:00 2001 From: mrg Date: Wed, 4 Nov 2020 06:57:51 -0800 Subject: [PATCH 47/67] Skip tri gate array test --- compiler/tests/12_tri_gate_array_test.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/compiler/tests/12_tri_gate_array_test.py b/compiler/tests/12_tri_gate_array_test.py index 3bd5fa7c..77aef0ca 100755 --- a/compiler/tests/12_tri_gate_array_test.py +++ b/compiler/tests/12_tri_gate_array_test.py @@ -15,6 +15,8 @@ from globals import OPTS from sram_factory import factory import debug + +@unittest.skip("SKIPPING 12_tri_gate_array_test") class tri_gate_array_test(openram_test): def runTest(self): From 9a38f7a5f481bc24582b9ea19a87c183e935042c Mon Sep 17 00:00:00 2001 From: mrg Date: Wed, 4 Nov 2020 10:50:53 -0800 Subject: [PATCH 48/67] Enable gds readonly in Magic DRC/LVS --- compiler/verify/magic.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/compiler/verify/magic.py b/compiler/verify/magic.py index 6a559b3d..616818af 100644 --- a/compiler/verify/magic.py +++ b/compiler/verify/magic.py @@ -77,8 +77,7 @@ def write_magic_script(cell_name, extract=False, final_verification=False): f.write("{} -dnull -noconsole << EOF\n".format(OPTS.drc_exe[1])) f.write("gds polygon subcell true\n") f.write("gds warning default\n") - # This causes substrate contacts to not be extracted - f.write("# gds readonly true\n") + f.write("gds readonly true\n") f.write("gds read {}.gds\n".format(cell_name)) f.write("load {}\n".format(cell_name)) # Flatten the cell to get rid of DRCs spanning multiple layers From ce7be7466f5946a19bd0319b929689dce81391e8 Mon Sep 17 00:00:00 2001 From: mrg Date: Thu, 5 Nov 2020 13:11:36 -0800 Subject: [PATCH 49/67] Model as subckt for Magic too --- compiler/pgates/ptx.py | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/compiler/pgates/ptx.py b/compiler/pgates/ptx.py index 6b828cf9..ae32e557 100644 --- a/compiler/pgates/ptx.py +++ b/compiler/pgates/ptx.py @@ -157,10 +157,17 @@ class ptx(design.design): # self.tx_width, # drc("minwidth_poly")) # TEMP FIX: Use old device names if using Calibre. + self.lvs_device = "M{{0}} {{1}} {0} m={1} w={2} l={3} mult={1}".format("nshort" if self.tx_type == "nmos" else "pshort", self.mults, self.tx_width, drc("minwidth_poly")) + elif cell_props.ptx.model_is_subckt: + # sky130 requires mult parameter too + self.lvs_device = "X{{0}} {{1}} {0} m={1} w={2}u l={3}u".format(spice[self.tx_type], + self.mults, + self.tx_width, + drc("minwidth_poly")) else: self.lvs_device = "M{{0}} {{1}} {0} m={1} w={2}u l={3}u ".format(spice[self.tx_type], self.mults, From a52aac5f31469d105c91cc994390f6f3dcca04df Mon Sep 17 00:00:00 2001 From: mrg Date: Thu, 5 Nov 2020 13:12:08 -0800 Subject: [PATCH 50/67] Add gds flatten option for Magic --- compiler/verify/magic.py | 1 + 1 file changed, 1 insertion(+) diff --git a/compiler/verify/magic.py b/compiler/verify/magic.py index 616818af..245d1408 100644 --- a/compiler/verify/magic.py +++ b/compiler/verify/magic.py @@ -77,6 +77,7 @@ def write_magic_script(cell_name, extract=False, final_verification=False): f.write("{} -dnull -noconsole << EOF\n".format(OPTS.drc_exe[1])) f.write("gds polygon subcell true\n") f.write("gds warning default\n") + f.write("gds flatten true\n") f.write("gds readonly true\n") f.write("gds read {}.gds\n".format(cell_name)) f.write("load {}\n".format(cell_name)) From 2c76a2680fb79f5285826990ef83a2bba15674c9 Mon Sep 17 00:00:00 2001 From: mrg Date: Thu, 5 Nov 2020 13:12:26 -0800 Subject: [PATCH 51/67] Adjust openram options. Remove option -d (dontpurge) and replace with keeptemp Add option -d (debug) to drop into pdb. Add option -k (--keeptemp) to keep temp files --- compiler/base/hierarchy_design.py | 6 +++--- compiler/characterizer/stimuli.py | 2 +- compiler/debug.py | 2 +- compiler/globals.py | 23 +++++++++++++-------- compiler/options.py | 8 +++++-- compiler/router/tests/testutils.py | 4 ++-- compiler/tests/05_bitcell_array_test.py | 1 - compiler/tests/26_hspice_pex_pinv_test.py | 6 +++--- compiler/tests/26_ngspice_pex_pinv_test.py | 8 +++---- compiler/tests/30_openram_back_end_test.py | 4 ++-- compiler/tests/30_openram_front_end_test.py | 4 ++-- compiler/tests/testutils.py | 10 ++++----- 12 files changed, 43 insertions(+), 35 deletions(-) diff --git a/compiler/base/hierarchy_design.py b/compiler/base/hierarchy_design.py index 28954834..5404838a 100644 --- a/compiler/base/hierarchy_design.py +++ b/compiler/base/hierarchy_design.py @@ -90,7 +90,7 @@ class hierarchy_design(hierarchy_spice.spice, hierarchy_layout.layout): "LVS failed for {0} with {1} errors(s)".format(self.cell_name, self.lvs_errors)) - if OPTS.purge_temp: + if not OPTS.keep_temp: os.remove(tempspice) os.remove(tempgds) @@ -112,7 +112,7 @@ class hierarchy_design(hierarchy_spice.spice, hierarchy_layout.layout): "DRC failed for {0} with {1} error(s)".format(self.cell_name, num_errors)) - if OPTS.purge_temp: + if not OPTS.keep_temp: os.remove(tempgds) def LVS(self, final_verification=False): @@ -134,7 +134,7 @@ class hierarchy_design(hierarchy_spice.spice, hierarchy_layout.layout): debug.check(num_errors == 0, "LVS failed for {0} with {1} error(s)".format(self.cell_name, num_errors)) - if OPTS.purge_temp: + if not OPTS.keep_temp: os.remove(tempspice) os.remove(tempgds) diff --git a/compiler/characterizer/stimuli.py b/compiler/characterizer/stimuli.py index a312fc6d..a354e353 100644 --- a/compiler/characterizer/stimuli.py +++ b/compiler/characterizer/stimuli.py @@ -260,7 +260,7 @@ class stimuli(): # create plots for all signals self.sf.write("* probe is used for hspice/xa, while plot is used in ngspice\n") - if OPTS.debug_level>0: + if OPTS.verbose_level>0: if OPTS.spice_name in ["hspice", "xa"]: self.sf.write(".probe V(*)\n") else: diff --git a/compiler/debug.py b/compiler/debug.py index 15876f22..5a2d2893 100644 --- a/compiler/debug.py +++ b/compiler/debug.py @@ -90,7 +90,7 @@ log.create_file = True def info(lev, str): from globals import OPTS - if (OPTS.debug_level >= lev): + if (OPTS.verbose_level >= lev): frm = inspect.stack()[1] mod = inspect.getmodule(frm[0]) # classname = frm.f_globals['__name__'] diff --git a/compiler/globals.py b/compiler/globals.py index 216a6a34..e3d2ea5e 100644 --- a/compiler/globals.py +++ b/compiler/globals.py @@ -63,7 +63,7 @@ def parse_args(): optparse.make_option("-v", "--verbose", action="count", - dest="debug_level", + dest="verbose_level", help="Increase the verbosity level"), optparse.make_option("-t", "--tech", @@ -83,11 +83,16 @@ def parse_args(): action="store_false", dest="analytical_delay", help="Perform characterization to calculate delays (default is analytical models)"), + optparse.make_option("-k", + "--keeptemp", + action="store_true", + dest="keep_temp", + help="Keep the contents of the temp directory after a successful run"), 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") + "--debug", + action="store_true", + dest="debug", + help="Run in debug mode to drop to pdb on failure") # -h --help is implicit. } @@ -366,7 +371,7 @@ def cleanup_paths(): We should clean up the temp directory after execution. """ global OPTS - if not OPTS.purge_temp: + if OPTS.keep_temp: debug.info(0, "Preserving temp directory: {}".format(OPTS.openram_temp)) return @@ -534,12 +539,12 @@ def print_time(name, now_time, last_time=None, indentation=2): global OPTS # Don't print during testing - if not OPTS.is_unit_test or OPTS.debug_level > 0: + if not OPTS.is_unit_test or OPTS.verbose_level > 0: if last_time: - time = str(round((now_time-last_time).total_seconds(),1)) + " seconds" + time = str(round((now_time - last_time).total_seconds(), 1)) + " seconds" else: time = now_time.strftime('%m/%d/%Y %H:%M:%S') - debug.print_raw("{0} {1}: {2}".format("*"*indentation, name, time)) + debug.print_raw("{0} {1}: {2}".format("*" * indentation, name, time)) def report_status(): diff --git a/compiler/options.py b/compiler/options.py index 1a0d1804..89a801b6 100644 --- a/compiler/options.py +++ b/compiler/options.py @@ -80,7 +80,10 @@ class options(optparse.Values): os.getpid()) # This is the verbosity level to control debug information. 0 is none, 1 # is minimal, etc. - debug_level = 0 + verbose_level = 0 + # Drop to pdb on failure? + debug = False + ################### # Run-time vs accuracy options. @@ -141,7 +144,8 @@ class options(optparse.Values): # Route the input/output pins to the perimeter perimeter_pins = False - purge_temp = True + keep_temp = False + # These are the default modules that can be over-riden bitcell_suffix = "" diff --git a/compiler/router/tests/testutils.py b/compiler/router/tests/testutils.py index c6e91459..1f43db91 100644 --- a/compiler/router/tests/testutils.py +++ b/compiler/router/tests/testutils.py @@ -26,7 +26,7 @@ class openram_test(unittest.TestCase): if result != 0: self.fail("DRC failed: {}".format(w.name)) - if OPTS.purge_temp: + if not OPTS.keep_temp: self.cleanup() def local_check(self, a, final_verification=False): @@ -49,7 +49,7 @@ class openram_test(unittest.TestCase): if result != 0: self.fail("LVS mismatch: {}".format(a.name)) - if OPTS.purge_temp: + if not OPTS.keep_temp: self.cleanup() def cleanup(self): diff --git a/compiler/tests/05_bitcell_array_test.py b/compiler/tests/05_bitcell_array_test.py index 95a0d1fb..218cc734 100755 --- a/compiler/tests/05_bitcell_array_test.py +++ b/compiler/tests/05_bitcell_array_test.py @@ -15,7 +15,6 @@ from globals import OPTS from sram_factory import factory import debug -#@unittest.skip("SKIPPING 05_array_test") class array_test(openram_test): diff --git a/compiler/tests/26_hspice_pex_pinv_test.py b/compiler/tests/26_hspice_pex_pinv_test.py index 660469b1..74f1ae9c 100755 --- a/compiler/tests/26_hspice_pex_pinv_test.py +++ b/compiler/tests/26_hspice_pex_pinv_test.py @@ -34,9 +34,9 @@ class hspice_pex_pinv_test(openram_test): reload(characterizer) # generate the pinv - prev_purge_value = OPTS.purge_temp + prev_keep_value = OPTS.keep_temp # force set purge to false to save the sp file - OPTS.purge_temp = False + OPTS.keep_temp = True debug.info(2, "Checking 1x size inverter") tx = pinv.pinv(name="pinv", size=1) tempgds = "{0}{1}.gds".format(OPTS.openram_temp, tx.name) @@ -52,7 +52,7 @@ class hspice_pex_pinv_test(openram_test): # now generate its pex file pex_file = self.run_pex(tx) - OPTS.purge_temp = prev_purge_value # restore the old purge value + OPTS.keep_temp = prev_keep_value # restore the old keep # generate simulation for pex, make sure the simulation is successful pex_delay = self.simulate_delay(test_module=pex_file, top_level_name=tx.name) diff --git a/compiler/tests/26_ngspice_pex_pinv_test.py b/compiler/tests/26_ngspice_pex_pinv_test.py index 890ecb8b..7e3800ec 100755 --- a/compiler/tests/26_ngspice_pex_pinv_test.py +++ b/compiler/tests/26_ngspice_pex_pinv_test.py @@ -33,8 +33,8 @@ class ngspice_pex_pinv_test(openram_test): reload(characterizer) # generate the pinv module - prev_purge_value = OPTS.purge_temp - OPTS.purge_temp = False # force set purge to false to save the sp file + prev_keep_value = OPTS.keep_temp + OPTS.keep_temp = True # force set keep to true to save the sp file debug.info(2, "Checking 1x size inverter") tx = pinv.pinv(name="pinv", size=1) tempgds = "{0}{1}.gds".format(OPTS.openram_temp, tx.name) @@ -50,8 +50,8 @@ class ngspice_pex_pinv_test(openram_test): # now generate its pex file pex_file = self.run_pex(tx) - # restore the old purge value - OPTS.purge_temp = prev_purge_value + # restore the old keep value + OPTS.keep_temp = prev_keep_value # generate simulation for pex, make sure the simulation is successful pex_delay = self.simulate_delay(test_module=pex_file, top_level_name=tx.name) diff --git a/compiler/tests/30_openram_back_end_test.py b/compiler/tests/30_openram_back_end_test.py index 01c62a10..5df0b55a 100755 --- a/compiler/tests/30_openram_back_end_test.py +++ b/compiler/tests/30_openram_back_end_test.py @@ -40,7 +40,7 @@ class openram_back_end_test(openram_test): # specify the same verbosity for the system call options = "" - for i in range(OPTS.debug_level): + for i in range(OPTS.verbose_level): options += " -v" if OPTS.spice_name: @@ -86,7 +86,7 @@ class openram_back_end_test(openram_test): self.assertEqual(len(re.findall('WARNING', output)), 0) # now clean up the directory - if OPTS.purge_temp: + if not OPTS.keep_temp: if os.path.exists(out_path): shutil.rmtree(out_path, ignore_errors=True) self.assertEqual(os.path.exists(out_path), False) diff --git a/compiler/tests/30_openram_front_end_test.py b/compiler/tests/30_openram_front_end_test.py index 88d673b6..befbe850 100755 --- a/compiler/tests/30_openram_front_end_test.py +++ b/compiler/tests/30_openram_front_end_test.py @@ -40,7 +40,7 @@ class openram_front_end_test(openram_test): # specify the same verbosity for the system call options = "" - for i in range(OPTS.debug_level): + for i in range(OPTS.verbose_level): options += " -v" if OPTS.spice_name: @@ -86,7 +86,7 @@ class openram_front_end_test(openram_test): self.assertEqual(len(re.findall('WARNING', output)), 0) # now clean up the directory - if OPTS.purge_temp: + if not OPTS.keep_temp: if os.path.exists(out_path): shutil.rmtree(out_path, ignore_errors=True) self.assertEqual(os.path.exists(out_path), False) diff --git a/compiler/tests/testutils.py b/compiler/tests/testutils.py index 0ab7b8a8..e63b457d 100644 --- a/compiler/tests/testutils.py +++ b/compiler/tests/testutils.py @@ -10,6 +10,8 @@ import sys, os, glob sys.path.append(os.getenv("OPENRAM_HOME")) from globals import OPTS import debug +import pdb +import traceback class openram_test(unittest.TestCase): @@ -27,7 +29,7 @@ class openram_test(unittest.TestCase): if result != 0: self.fail("DRC failed: {}".format(w.name)) - if OPTS.purge_temp: + if not OPTS.keep_temp: self.cleanup() def local_check(self, a, final_verification=False): @@ -74,7 +76,7 @@ class openram_test(unittest.TestCase): # For debug... # import pdb; pdb.set_trace() - if OPTS.purge_temp: + if not OPTS.keep_temp: self.cleanup() def run_pex(self, a, output=None): @@ -321,9 +323,7 @@ def header(filename, technology): def debugTestRunner(post_mortem=None): """unittest runner doing post mortem debugging on failing tests""" - import pdb - import traceback - if post_mortem is None and not OPTS.purge_temp: + if post_mortem is None and OPTS.debug: post_mortem = pdb.post_mortem class DebugTestResult(unittest.TextTestResult): From 681b3a91aa4f888f9543dc41c9b3a5fb8e679c79 Mon Sep 17 00:00:00 2001 From: mrg Date: Thu, 5 Nov 2020 13:20:54 -0800 Subject: [PATCH 52/67] Drop to debug in debug module when -d --- compiler/debug.py | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/compiler/debug.py b/compiler/debug.py index 5a2d2893..bf44de95 100644 --- a/compiler/debug.py +++ b/compiler/debug.py @@ -16,6 +16,9 @@ import sys # 2 = verbose # n = custom setting +import globals +import pdb + def check(check, str): if not check: @@ -26,6 +29,9 @@ def check(check, str): log("ERROR: file {0}: line {1}: {2}\n".format( os.path.basename(filename), line_number, str)) + if globals.OPTS.debug: + pdb.set_trace() + assert 0 @@ -37,6 +43,9 @@ def error(str, return_value=0): log("ERROR: file {0}: line {1}: {2}\n".format( os.path.basename(filename), line_number, str)) + if globals.OPTS.debug: + pdb.set_trace() + assert return_value == 0 From 0118b73eecbf75bafae94bdaec2ba3cca5bde872 Mon Sep 17 00:00:00 2001 From: mrg Date: Thu, 5 Nov 2020 14:31:53 -0800 Subject: [PATCH 53/67] Cleanup imports --- compiler/debug.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/compiler/debug.py b/compiler/debug.py index bf44de95..49e69204 100644 --- a/compiler/debug.py +++ b/compiler/debug.py @@ -9,6 +9,7 @@ import os import inspect import globals import sys +import pdb # the debug levels: # 0 = minimum output (default) @@ -16,8 +17,6 @@ import sys # 2 = verbose # n = custom setting -import globals -import pdb def check(check, str): From a40716dd48190045b0f36d2dd34ca002ac2be626 Mon Sep 17 00:00:00 2001 From: mrg Date: Thu, 5 Nov 2020 14:32:08 -0800 Subject: [PATCH 54/67] Cleanup imports --- compiler/debug.py | 1 - 1 file changed, 1 deletion(-) diff --git a/compiler/debug.py b/compiler/debug.py index 49e69204..3d51a227 100644 --- a/compiler/debug.py +++ b/compiler/debug.py @@ -18,7 +18,6 @@ import pdb # n = custom setting - def check(check, str): if not check: (frame, filename, line_number, function_name, lines, From 18d2987805835a20ad3e7f072ccdddaa2467a17c Mon Sep 17 00:00:00 2001 From: mrg Date: Thu, 5 Nov 2020 16:30:15 -0800 Subject: [PATCH 55/67] Cleanup --- compiler/globals.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/compiler/globals.py b/compiler/globals.py index e3d2ea5e..d93ac776 100644 --- a/compiler/globals.py +++ b/compiler/globals.py @@ -148,7 +148,7 @@ def check_versions(): major_required = 3 minor_required = 5 if not (major_python_version == major_required and minor_python_version >= minor_required): - debug.error("Python {0}.{1} or greater is required.".format(major_required,minor_required),-1) + debug.error("Python {0}.{1} or greater is required.".format(major_required, minor_required), -1) # FIXME: Check versions of other tools here?? # or, this could be done in each module (e.g. verify, characterizer, etc.) @@ -157,7 +157,7 @@ def check_versions(): try: import coverage OPTS.coverage = 1 - except: + except ModuleNotFoundError: OPTS.coverage = 0 From 8be1436d51c6004e29f6b8486eb51574fc2e7dbc Mon Sep 17 00:00:00 2001 From: mrg Date: Thu, 5 Nov 2020 16:55:08 -0800 Subject: [PATCH 56/67] Use OPTS.bitcell everywhere --- compiler/modules/bitcell_array.py | 2 +- compiler/modules/bitcell_base_array.py | 3 ++- compiler/modules/col_cap_array.py | 2 +- compiler/modules/dummy_array.py | 4 ++-- compiler/modules/hierarchical_decoder.py | 2 +- compiler/modules/hierarchical_predecode.py | 2 +- compiler/modules/local_bitcell_array.py | 2 +- compiler/modules/orig_bitcell_array.py | 2 +- compiler/modules/port_address.py | 2 +- compiler/modules/port_data.py | 6 +++--- compiler/modules/replica_bitcell_array.py | 2 +- compiler/modules/replica_column.py | 2 +- compiler/modules/row_cap_array.py | 2 +- compiler/modules/sense_amp_array.py | 2 +- compiler/modules/wordline_buffer_array.py | 2 +- compiler/modules/write_driver_array.py | 2 +- compiler/modules/write_mask_and_array.py | 2 +- 17 files changed, 21 insertions(+), 20 deletions(-) diff --git a/compiler/modules/bitcell_array.py b/compiler/modules/bitcell_array.py index f586e9ed..10abe1e2 100644 --- a/compiler/modules/bitcell_array.py +++ b/compiler/modules/bitcell_array.py @@ -52,7 +52,7 @@ class bitcell_array(bitcell_base_array): def add_modules(self): """ Add the modules used in this design """ - self.cell = factory.create(module_type="bitcell") + self.cell = factory.create(module_type=OPTS.bitcell) self.add_mod(self.cell) def create_instances(self): diff --git a/compiler/modules/bitcell_base_array.py b/compiler/modules/bitcell_base_array.py index 86ee5d43..b1ee88a4 100644 --- a/compiler/modules/bitcell_base_array.py +++ b/compiler/modules/bitcell_base_array.py @@ -9,6 +9,7 @@ import debug import design from tech import cell_properties from sram_factory import factory +from globals import OPTS class bitcell_base_array(design.design): @@ -24,7 +25,7 @@ class bitcell_base_array(design.design): self.column_offset = column_offset # Bitcell for port names only - self.cell = factory.create(module_type="bitcell") + self.cell = factory.create(module_type=OPTS.bitcell) self.wordline_names = [[] for port in self.all_ports] self.all_wordline_names = [] diff --git a/compiler/modules/col_cap_array.py b/compiler/modules/col_cap_array.py index 8aaff142..ffbf6413 100644 --- a/compiler/modules/col_cap_array.py +++ b/compiler/modules/col_cap_array.py @@ -51,7 +51,7 @@ class col_cap_array(bitcell_base_array): self.dummy_cell = factory.create(module_type="col_cap_{}".format(OPTS.bitcell)) self.add_mod(self.dummy_cell) - self.cell = factory.create(module_type="bitcell") + self.cell = factory.create(module_type=OPTS.bitcell) def create_instances(self): """ Create the module instances used in this design """ diff --git a/compiler/modules/dummy_array.py b/compiler/modules/dummy_array.py index 6368f9c8..51b423ae 100644 --- a/compiler/modules/dummy_array.py +++ b/compiler/modules/dummy_array.py @@ -44,8 +44,8 @@ class dummy_array(bitcell_base_array): def add_modules(self): """ Add the modules used in this design """ - self.dummy_cell = factory.create(module_type="dummy_{}".format(OPTS.bitcell)) - self.cell = factory.create(module_type="bitcell") + self.dummy_cell = factory.create(module_type=OPTS.dummy_bitcell) + self.cell = factory.create(module_type=OPTS.bitcell) self.add_mod(self.dummy_cell) def create_instances(self): diff --git a/compiler/modules/hierarchical_decoder.py b/compiler/modules/hierarchical_decoder.py index c121f53a..372e9792 100644 --- a/compiler/modules/hierarchical_decoder.py +++ b/compiler/modules/hierarchical_decoder.py @@ -27,7 +27,7 @@ class hierarchical_decoder(design.design): self.pre3x8_inst = [] self.pre4x16_inst = [] - b = factory.create(module_type="bitcell") + b = factory.create(module_type=OPTS.bitcell) self.cell_height = b.height self.num_outputs = num_outputs diff --git a/compiler/modules/hierarchical_predecode.py b/compiler/modules/hierarchical_predecode.py index ea1f1215..9b5cab65 100644 --- a/compiler/modules/hierarchical_predecode.py +++ b/compiler/modules/hierarchical_predecode.py @@ -21,7 +21,7 @@ class hierarchical_predecode(design.design): def __init__(self, name, input_number, height=None): self.number_of_inputs = input_number - b = factory.create(module_type="bitcell") + b = factory.create(module_type=OPTS.bitcell) if not height: self.cell_height = b.height diff --git a/compiler/modules/local_bitcell_array.py b/compiler/modules/local_bitcell_array.py index b4702b2c..5ff91268 100644 --- a/compiler/modules/local_bitcell_array.py +++ b/compiler/modules/local_bitcell_array.py @@ -64,7 +64,7 @@ class local_bitcell_array(bitcell_base_array.bitcell_base_array): def add_modules(self): """ Add the modules used in this design """ # This is just used for names - self.cell = factory.create(module_type="bitcell") + self.cell = factory.create(module_type=OPTS.bitcell) self.bitcell_array = factory.create(module_type="replica_bitcell_array", cols=self.cols, diff --git a/compiler/modules/orig_bitcell_array.py b/compiler/modules/orig_bitcell_array.py index cf982ce5..3391a470 100644 --- a/compiler/modules/orig_bitcell_array.py +++ b/compiler/modules/orig_bitcell_array.py @@ -46,7 +46,7 @@ class bitcell_array(bitcell_base_array): def add_modules(self): """ Add the modules used in this design """ - self.cell = factory.create(module_type="bitcell") + self.cell = factory.create(module_type=OPTS.bitcell) self.add_mod(self.cell) def create_instances(self): diff --git a/compiler/modules/port_address.py b/compiler/modules/port_address.py index 48140995..77768605 100644 --- a/compiler/modules/port_address.py +++ b/compiler/modules/port_address.py @@ -155,7 +155,7 @@ class port_address(design.design): # The polarity must be switched if we have a hierarchical wordline # to compensate for the local array inverters - b = factory.create(module_type="bitcell") + b = factory.create(module_type=OPTS.bitcell) if local_array_size > 0: self.rbl_driver = factory.create(module_type="inv_dec", diff --git a/compiler/modules/port_data.py b/compiler/modules/port_data.py index 9848341e..8fb5a8fe 100644 --- a/compiler/modules/port_data.py +++ b/compiler/modules/port_data.py @@ -33,7 +33,7 @@ class port_data(design.design): self.num_spare_cols = 0 if not bit_offsets: - bitcell = factory.create(module_type="bitcell") + bitcell = factory.create(module_type=OPTS.bitcell) self.bit_offsets = [] for i in range(self.num_cols + self.num_spare_cols): self.bit_offsets.append(i * bitcell.width) @@ -191,7 +191,7 @@ class port_data(design.design): # and mirroring happens correctly # Used for names/dimensions only - self.cell = factory.create(module_type="bitcell") + self.cell = factory.create(module_type=OPTS.bitcell) if self.port == 0: # Append an offset on the left @@ -270,7 +270,7 @@ class port_data(design.design): # create arrays of bitline and bitline_bar names for read, # write, or all ports - self.bitcell = factory.create(module_type="bitcell") + self.bitcell = factory.create(module_type=OPTS.bitcell) self.bl_names = self.bitcell.get_all_bl_names() self.br_names = self.bitcell.get_all_br_names() self.wl_names = self.bitcell.get_all_wl_names() diff --git a/compiler/modules/replica_bitcell_array.py b/compiler/modules/replica_bitcell_array.py index 5c354c97..cc6373db 100644 --- a/compiler/modules/replica_bitcell_array.py +++ b/compiler/modules/replica_bitcell_array.py @@ -281,7 +281,7 @@ class replica_bitcell_array(bitcell_base_array): self.supplies = ["vdd", "gnd"] # Used for names/dimensions only - self.cell = factory.create(module_type="bitcell") + self.cell = factory.create(module_type=OPTS.bitcell) # Main array self.bitcell_array_inst=self.add_inst(name="bitcell_array", diff --git a/compiler/modules/replica_column.py b/compiler/modules/replica_column.py index 3788909c..ad6e63dc 100644 --- a/compiler/modules/replica_column.py +++ b/compiler/modules/replica_column.py @@ -88,7 +88,7 @@ class replica_column(bitcell_base_array): self.edge_cell = factory.create(module_type=edge_module_type + "_" + OPTS.bitcell) self.add_mod(self.edge_cell) # Used for pin names only - self.cell = factory.create(module_type="bitcell") + self.cell = factory.create(module_type=OPTS.bitcell) def create_instances(self): self.cell_inst = {} diff --git a/compiler/modules/row_cap_array.py b/compiler/modules/row_cap_array.py index f327aecf..1995b45c 100644 --- a/compiler/modules/row_cap_array.py +++ b/compiler/modules/row_cap_array.py @@ -43,7 +43,7 @@ class row_cap_array(bitcell_base_array): self.dummy_cell = factory.create(module_type="row_cap_{}".format(OPTS.bitcell)) self.add_mod(self.dummy_cell) - self.cell = factory.create(module_type="bitcell") + self.cell = factory.create(module_type=OPTS.bitcell) def create_instances(self): """ Create the module instances used in this design """ diff --git a/compiler/modules/sense_amp_array.py b/compiler/modules/sense_amp_array.py index f7f08bf2..ce4e6911 100644 --- a/compiler/modules/sense_amp_array.py +++ b/compiler/modules/sense_amp_array.py @@ -97,7 +97,7 @@ class sense_amp_array(design.design): # This is just used for measurements, # so don't add the module - self.bitcell = factory.create(module_type="bitcell") + self.bitcell = factory.create(module_type=OPTS.bitcell) def create_sense_amp_array(self): self.local_insts = [] diff --git a/compiler/modules/wordline_buffer_array.py b/compiler/modules/wordline_buffer_array.py index 90703bc1..d3132861 100644 --- a/compiler/modules/wordline_buffer_array.py +++ b/compiler/modules/wordline_buffer_array.py @@ -59,7 +59,7 @@ class wordline_buffer_array(design.design): self.add_pin("gnd", "GROUND") def add_modules(self): - b = factory.create(module_type="bitcell") + b = factory.create(module_type=OPTS.bitcell) self.wl_driver = factory.create(module_type="inv_dec", size=self.cols, diff --git a/compiler/modules/write_driver_array.py b/compiler/modules/write_driver_array.py index 6806f034..aa0a4e29 100644 --- a/compiler/modules/write_driver_array.py +++ b/compiler/modules/write_driver_array.py @@ -99,7 +99,7 @@ class write_driver_array(design.design): # This is just used for measurements, # so don't add the module - self.bitcell = factory.create(module_type="bitcell") + self.bitcell = factory.create(module_type=OPTS.bitcell) def create_write_array(self): self.driver_insts = [] diff --git a/compiler/modules/write_mask_and_array.py b/compiler/modules/write_mask_and_array.py index db8c4e1d..ae5d8550 100644 --- a/compiler/modules/write_mask_and_array.py +++ b/compiler/modules/write_mask_and_array.py @@ -81,7 +81,7 @@ class write_mask_and_array(design.design): # This ensures the write mask AND array will be directly under the corresponding write driver enable wire. # This is just used for measurements, so don't add the module - self.bitcell = factory.create(module_type="bitcell") + self.bitcell = factory.create(module_type=OPTS.bitcell) self.driver = factory.create(module_type="write_driver") if self.bitcell.width > self.driver.width: self.driver_spacing = self.bitcell.width From 493c9125f1aaa3c7050ac0537bc0bdca0227ee6f Mon Sep 17 00:00:00 2001 From: mrg Date: Fri, 6 Nov 2020 11:09:50 -0800 Subject: [PATCH 57/67] Read different modules overrides for different num ports --- compiler/globals.py | 2 +- compiler/pgates/column_mux.py | 3 ++- compiler/pgates/pinv_dec.py | 2 +- compiler/pgates/precharge.py | 2 +- compiler/pgates/pwrite_driver.py | 6 +++--- compiler/pgates/wordline_driver.py | 2 +- compiler/sram_factory.py | 6 ++++++ 7 files changed, 15 insertions(+), 8 deletions(-) diff --git a/compiler/globals.py b/compiler/globals.py index d93ac776..23bb5bfb 100644 --- a/compiler/globals.py +++ b/compiler/globals.py @@ -314,7 +314,7 @@ def read_config(config_file, is_unit_test=True): try: config = importlib.import_module(module_name) except: - debug.error("Unable to read configuration file: {0}".format(config_file),2) + debug.error("Unable to read configuration file: {0}".format(config_file), 2) OPTS.overridden = {} for k, v in config.__dict__.items(): diff --git a/compiler/pgates/column_mux.py b/compiler/pgates/column_mux.py index 844fd00a..cf08aa71 100644 --- a/compiler/pgates/column_mux.py +++ b/compiler/pgates/column_mux.py @@ -11,6 +11,7 @@ from tech import drc, layer from vector import vector from sram_factory import factory from tech import cell_properties as cell_props +from globals import OPTS class column_mux(pgate.pgate): @@ -64,7 +65,7 @@ class column_mux(pgate.pgate): self.add_pn_wells() def add_ptx(self): - self.bitcell = factory.create(module_type="bitcell") + self.bitcell = factory.create(module_type=OPTS.bitcell) # Adds nmos_lower,nmos_upper to the module self.ptx_width = self.tx_size * drc("minwidth_tx") diff --git a/compiler/pgates/pinv_dec.py b/compiler/pgates/pinv_dec.py index 1a078a3c..b355b28f 100644 --- a/compiler/pgates/pinv_dec.py +++ b/compiler/pgates/pinv_dec.py @@ -27,7 +27,7 @@ class pinv_dec(pinv.pinv): "creating pinv_dec structure {0} with size of {1}".format(name, size)) if not height: - b = factory.create(module_type="bitcell") + b = factory.create(module_type=OPTS.bitcell) self.cell_height = b.height else: self.cell_height = height diff --git a/compiler/pgates/precharge.py b/compiler/pgates/precharge.py index d3599902..545b6ae8 100644 --- a/compiler/pgates/precharge.py +++ b/compiler/pgates/precharge.py @@ -26,7 +26,7 @@ class precharge(design.design): debug.info(2, "creating precharge cell {0}".format(name)) super().__init__(name) - self.bitcell = factory.create(module_type="bitcell") + self.bitcell = factory.create(module_type=OPTS.bitcell) self.beta = parameter["beta"] self.ptx_width = self.beta * parameter["min_tx_size"] self.ptx_mults = 1 diff --git a/compiler/pgates/pwrite_driver.py b/compiler/pgates/pwrite_driver.py index 26c49d2f..674d8283 100644 --- a/compiler/pgates/pwrite_driver.py +++ b/compiler/pgates/pwrite_driver.py @@ -25,15 +25,15 @@ class pwrite_driver(design.design): super().__init__(name) self.size = size self.beta = parameter["beta"] - self.pmos_width = self.beta*self.size*parameter["min_tx_size"] - self.nmos_width = self.size*parameter["min_tx_size"] + self.pmos_width = self.beta * self.size * parameter["min_tx_size"] + self.nmos_width = self.size * parameter["min_tx_size"] # The tech M2 pitch is based on old via orientations self.m2_pitch = self.m2_space + self.m2_width # Width is matched to the bitcell, # Height will be variable - self.bitcell = factory.create(module_type="bitcell") + self.bitcell = factory.create(module_type=OPTS.bitcell) self.width = self.bitcell.width # Creates the netlist and layout diff --git a/compiler/pgates/wordline_driver.py b/compiler/pgates/wordline_driver.py index b5e8478d..4c66d0b1 100644 --- a/compiler/pgates/wordline_driver.py +++ b/compiler/pgates/wordline_driver.py @@ -25,7 +25,7 @@ class wordline_driver(design.design): super().__init__(name) if height is None: - b = factory.create(module_type="bitcell") + b = factory.create(module_type=OPTS.bitcell) self.height = b.height else: self.height = height diff --git a/compiler/sram_factory.py b/compiler/sram_factory.py index 3680e5d5..dd13b7a0 100644 --- a/compiler/sram_factory.py +++ b/compiler/sram_factory.py @@ -7,6 +7,7 @@ # from globals import OPTS + class sram_factory: """ This is a factory pattern to create modules for usage in an SRAM. @@ -39,6 +40,11 @@ class sram_factory: try: from tech import tech_modules real_module_type = tech_modules[module_type] + # If we are given a list of modules, it is indexed by number of ports starting from 1 + if type(real_module_type) is list: + # For now we will just index by the number of ports (except can't have 0 ports) + num_ports = OPTS.num_rw_ports + OPTS.num_r_ports + OPTS.num_w_ports + real_module_type = real_module_type[num_ports - 1] overridden = tech_modules.is_overridden(module_type) except ImportError: # If they didn't define these, then don't use the option types. From 147649e142d0a56548eb5b6cd8c67094336f5466 Mon Sep 17 00:00:00 2001 From: mrg Date: Fri, 6 Nov 2020 12:21:30 -0800 Subject: [PATCH 58/67] Why was single port decoder test a dual port? --- compiler/tests/06_hierarchical_decoder_test.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/compiler/tests/06_hierarchical_decoder_test.py b/compiler/tests/06_hierarchical_decoder_test.py index 083e5f3f..f0c2315d 100755 --- a/compiler/tests/06_hierarchical_decoder_test.py +++ b/compiler/tests/06_hierarchical_decoder_test.py @@ -23,7 +23,7 @@ class hierarchical_decoder_test(openram_test): globals.init_openram(config_file) OPTS.num_rw_ports = 1 - OPTS.num_r_ports = 1 + OPTS.num_r_ports = 0 OPTS.num_w_ports = 0 globals.setup_bitcell() From 2da9c307dbdad87bfb29d61b5e2e6c600c3250d1 Mon Sep 17 00:00:00 2001 From: mrg Date: Fri, 6 Nov 2020 13:50:04 -0800 Subject: [PATCH 59/67] Disable 4x16 decoder test for now --- compiler/tests/06_hierarchical_decoder_test.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/compiler/tests/06_hierarchical_decoder_test.py b/compiler/tests/06_hierarchical_decoder_test.py index f0c2315d..d9788e93 100755 --- a/compiler/tests/06_hierarchical_decoder_test.py +++ b/compiler/tests/06_hierarchical_decoder_test.py @@ -58,9 +58,9 @@ class hierarchical_decoder_test(openram_test): self.local_check(a) # Checks 3 x 4x16 and 4-input NAND decoder - debug.info(1, "Testing 4096 row sample for hierarchical_decoder") - a = factory.create(module_type="hierarchical_decoder", num_outputs=4096) - self.local_check(a) + # debug.info(1, "Testing 4096 row sample for hierarchical_decoder") + # a = factory.create(module_type="hierarchical_decoder", num_outputs=4096) + # self.local_check(a) globals.end_openram() From 66633a843bb1e8d113339be036e5b5fab0e07866 Mon Sep 17 00:00:00 2001 From: mrg Date: Mon, 9 Nov 2020 09:10:43 -0800 Subject: [PATCH 60/67] Add PDK layer names to tech file --- compiler/base/lef.py | 53 +- compiler/tests/24_lef_sram_test.py | 10 +- compiler/tests/25_verilog_sram_test.py | 5 +- .../tests/golden/sram_2_16_1_freepdk45.lef | 14060 ++++++++++------ .../tests/golden/sram_2_16_1_scn4m_subm.lef | 12600 ++++++++------ technology/freepdk45/tech/tech.py | 225 +- technology/scn4m_subm/tech/tech.py | 20 + 7 files changed, 15779 insertions(+), 11194 deletions(-) diff --git a/compiler/base/lef.py b/compiler/base/lef.py index 7cd11a93..97d32d0a 100644 --- a/compiler/base/lef.py +++ b/compiler/base/lef.py @@ -5,14 +5,9 @@ # (acting for and on behalf of Oklahoma State University) # All rights reserved. # -import gdsMill -import tech -import globals -import math import debug -import datetime -from collections import defaultdict -import pdb +from tech import layer_names + class lef: """ @@ -20,13 +15,13 @@ class lef: and write them to LEF file. This is inherited by the sram_base class. """ - def __init__(self,layers): + def __init__(self, layers): # LEF db units per micron self.lef_units = 2000 # These are the layers of the obstructions self.lef_layers = layers # Round to ensure float values are divisible by 0.0025 (the manufacturing grid) - self.round_grid = 4; + self.round_grid = 4 def lef_write(self, lef_name): """Write the entire lef of the object to the file.""" @@ -34,7 +29,7 @@ class lef: self.indent = "" # To maintain the indent level easily - self.lef = open(lef_name,"w") + self.lef = open(lef_name, "w") self.lef_write_header() for pin in self.pins: self.lef_write_pin(pin) @@ -52,30 +47,29 @@ class lef: self.lef.write(" DATABASE MICRONS {0} ;\n".format(self.lef_units)) self.lef.write("END UNITS\n") - self.lef.write("{0}MACRO {1}\n".format(self.indent,self.name)) + self.lef.write("{0}MACRO {1}\n".format(self.indent, self.name)) self.indent += " " self.lef.write("{0}CLASS BLOCK ;\n".format(self.indent)) self.lef.write("{0}SIZE {1} BY {2} ;\n" .format(self.indent, - round(self.width,self.round_grid), - round(self.height,self.round_grid))) + round(self.width, self.round_grid), + round(self.height, self.round_grid))) self.lef.write("{0}SYMMETRY X Y R90 ;\n".format(self.indent)) def lef_write_footer(self): - self.lef.write("{0}END {1}\n".format(self.indent,self.name)) + self.lef.write("{0}END {1}\n".format(self.indent, self.name)) self.indent = self.indent[:-3] self.lef.write("END LIBRARY\n") - def lef_write_pin(self, name): pin_dir = self.get_pin_dir(name) pin_type = self.get_pin_type(name) - self.lef.write("{0}PIN {1}\n".format(self.indent,name)) + self.lef.write("{0}PIN {1}\n".format(self.indent, name)) self.indent += " " - self.lef.write("{0}DIRECTION {1} ;\n".format(self.indent,pin_dir)) + self.lef.write("{0}DIRECTION {1} ;\n".format(self.indent, pin_dir)) - if pin_type in ["POWER","GROUND"]: - self.lef.write("{0}USE {1} ; \n".format(self.indent,pin_type)) + if pin_type in ["POWER", "GROUND"]: + self.lef.write("{0}USE {1} ; \n".format(self.indent, pin_type)) self.lef.write("{0}SHAPE ABUTMENT ; \n".format(self.indent)) self.lef.write("{0}PORT\n".format(self.indent)) @@ -84,7 +78,7 @@ class lef: # We could sort these together to minimize different layer sections, but meh. pin_list = self.get_pins(name) for pin in pin_list: - self.lef.write("{0}LAYER {1} ;\n".format(self.indent,pin.layer)) + self.lef.write("{0}LAYER {1} ;\n".format(self.indent, layer_names[pin.layer])) self.lef_write_shape(pin.rect) # End the PORT @@ -93,19 +87,16 @@ class lef: # End the PIN self.indent = self.indent[:-3] - self.lef.write("{0}END {1}\n".format(self.indent,name)) + self.lef.write("{0}END {1}\n".format(self.indent, name)) def lef_write_obstructions(self): """ Write all the obstructions on each layer """ self.lef.write("{0}OBS\n".format(self.indent)) for layer in self.lef_layers: - self.lef.write("{0}LAYER {1} ;\n".format(self.indent,layer)) + self.lef.write("{0}LAYER {1} ;\n".format(self.indent, layer_names[layer])) self.indent += " " - # pdb.set_trace() - blockages = self.get_blockages(layer,True) + blockages = self.get_blockages(layer, True) for b in blockages: - # if len(b) > 2: - # print(b) self.lef_write_shape(b) self.indent = self.indent[:-3] self.lef.write("{0}END\n".format(self.indent)) @@ -116,13 +107,19 @@ class lef: self.lef.write("{0}RECT ".format(self.indent)) for item in rect: # print(rect) - self.lef.write(" {0} {1}".format(round(item[0],self.round_grid), round(item[1],self.round_grid))) + self.lef.write(" {0} {1}".format(round(item[0], + self.round_grid), + round(item[1], + self.round_grid))) self.lef.write(" ;\n") else: """ Write a LEF polygon """ self.lef.write("{0}POLYGON ".format(self.indent)) for item in rect: - self.lef.write(" {0} {1}".format(round(item[0],self.round_grid), round(item[1],self.round_grid))) + self.lef.write(" {0} {1}".format(round(item[0], + self.round_grid), + round(item[1], + self.round_grid))) # for i in range(0,len(rect)): # self.lef.write(" {0} {1}".format(round(rect[i][0],self.round_grid), round(rect[i][1],self.round_grid))) self.lef.write(" ;\n") diff --git a/compiler/tests/24_lef_sram_test.py b/compiler/tests/24_lef_sram_test.py index 2178bee8..33c0120d 100755 --- a/compiler/tests/24_lef_sram_test.py +++ b/compiler/tests/24_lef_sram_test.py @@ -14,13 +14,15 @@ import globals from globals import OPTS import debug -@unittest.skip("SKIPPING 24_lef_sram_test") + +# @unittest.skip("SKIPPING 24_lef_sram_test") class lef_test(openram_test): def runTest(self): config_file = "{}/tests/configs/config".format(os.getenv("OPENRAM_HOME")) globals.init_openram(config_file) - + OPTS.route_supplies=False + OPTS.check_lvsdrc=False from sram import sram from sram_config import sram_config c = sram_config(word_size=2, @@ -41,8 +43,8 @@ class lef_test(openram_test): s.lef_write(lefname) # let's diff the result with a golden model - golden = "{0}/golden/{1}".format(os.path.dirname(os.path.realpath(__file__)),leffile) - self.assertTrue(self.isdiff(lefname,golden)) + golden = "{0}/golden/{1}".format(os.path.dirname(os.path.realpath(__file__)), leffile) + self.assertTrue(self.isdiff(lefname, golden)) globals.end_openram() diff --git a/compiler/tests/25_verilog_sram_test.py b/compiler/tests/25_verilog_sram_test.py index cf6fb9c9..8b487ea7 100755 --- a/compiler/tests/25_verilog_sram_test.py +++ b/compiler/tests/25_verilog_sram_test.py @@ -14,6 +14,7 @@ import globals from globals import OPTS import debug + class verilog_test(openram_test): def runTest(self): @@ -40,8 +41,8 @@ class verilog_test(openram_test): # let's diff the result with a golden model - golden = "{0}/golden/{1}".format(os.path.dirname(os.path.realpath(__file__)),vfile) - self.assertTrue(self.isdiff(vname,golden)) + golden = "{0}/golden/{1}".format(os.path.dirname(os.path.realpath(__file__)), vfile) + self.assertTrue(self.isdiff(vname, golden)) globals.end_openram() diff --git a/compiler/tests/golden/sram_2_16_1_freepdk45.lef b/compiler/tests/golden/sram_2_16_1_freepdk45.lef index 15ad3a88..d66a7aae 100644 --- a/compiler/tests/golden/sram_2_16_1_freepdk45.lef +++ b/compiler/tests/golden/sram_2_16_1_freepdk45.lef @@ -3,100 +3,254 @@ NAMESCASESENSITIVE ON ; BUSBITCHARS "[]" ; DIVIDERCHAR "/" ; UNITS - dataBASE MICRONS 1000 ; + DATABASE MICRONS 2000 ; END UNITS -SITE MacroSite - CLASS Core ; - SIZE 12145.0 by 43967.5 ; -END MacroSite MACRO sram_2_16_1_freepdk45 CLASS BLOCK ; - SIZE 12145.0 BY 43967.5 ; + SIZE 23.88 BY 46.6 ; SYMMETRY X Y R90 ; - SITE MacroSite ; - PIN data[0] - DIRECTION INOUT ; + PIN din0[0] + DIRECTION INPUT ; PORT LAYER metal2 ; - RECT 10260.0 67.5 10330.0 207.5 ; + RECT 12.7725 1.0375 12.85 1.1725 ; END - END data[0] - PIN data[1] - DIRECTION INOUT ; + END din0[0] + PIN din0[1] + DIRECTION INPUT ; PORT LAYER metal2 ; - RECT 10965.0 67.5 11035.0 207.5 ; + RECT 15.6325 1.0375 15.71 1.1725 ; END - END data[1] - PIN addr[0] + END din0[1] + PIN addr0[0] DIRECTION INPUT ; PORT - LAYER metal3 ; - RECT 67.5 8370.0 837.5 8440.0 ; + LAYER metal2 ; + RECT 7.0525 37.7375 7.13 37.8725 ; END - END addr[0] - PIN addr[1] + END addr0[0] + PIN addr0[1] DIRECTION INPUT ; PORT - LAYER metal3 ; - RECT 67.5 7665.0 837.5 7735.0 ; + LAYER metal2 ; + RECT 7.0525 40.4775 7.13 40.6125 ; END - END addr[1] - PIN addr[2] + END addr0[1] + PIN addr0[2] DIRECTION INPUT ; PORT - LAYER metal3 ; - RECT 67.5 6960.0 837.5 7030.0 ; + LAYER metal2 ; + RECT 7.0525 42.6875 7.13 42.8225 ; END - END addr[2] - PIN addr[3] + END addr0[2] + PIN addr0[3] DIRECTION INPUT ; PORT - LAYER metal3 ; - RECT 67.5 6255.0 837.5 6325.0 ; + LAYER metal2 ; + RECT 7.0525 45.4275 7.13 45.5625 ; END - END addr[3] - PIN CSb + END addr0[3] + PIN csb0 DIRECTION INPUT ; PORT - LAYER metal3 ; - RECT -2987.5 23757.5 -2917.5 23897.5 ; + LAYER metal2 ; + RECT 0.245 1.0375 0.3225 1.1725 ; END - END CSb - PIN WEb + END csb0 + PIN web0 DIRECTION INPUT ; PORT - LAYER metal3 ; - RECT -2282.5 23757.5 -2212.5 23897.5 ; + LAYER metal2 ; + RECT 0.245 3.7775 0.3225 3.9125 ; END - END WEb - PIN OEb + END web0 + PIN clk0 DIRECTION INPUT ; PORT - LAYER metal3 ; - RECT -3692.5 23757.5 -3622.5 23897.5 ; + LAYER metal2 ; + RECT 6.155 1.1575 6.225 1.2275 ; END - END OEb - PIN clk - DIRECTION INPUT ; + END clk0 + PIN dout0[0] + DIRECTION OUTPUT ; PORT - LAYER metal1 ; - RECT -835.0 23757.5 -700.0 23947.5 ; + LAYER metal2 ; + RECT 21.375 12.825 21.445 13.2225 ; END - END clk + END dout0[0] + PIN dout0[1] + DIRECTION OUTPUT ; + PORT + LAYER metal2 ; + RECT 22.08 12.825 22.15 13.2225 ; + END + END dout0[1] PIN vdd DIRECTION INOUT ; USE POWER ; SHAPE ABUTMENT ; PORT - LAYER metal2 ; - RECT 452.5 67.5 732.5 44035.0 ; - LAYER metal2 ; - RECT 11932.5 67.5 12212.5 44035.0 ; - LAYER metal1 ; - RECT 67.5 452.5 12212.5 732.5 ; - LAYER metal1 ; - RECT 67.5 43755.0 12212.5 44035.0 ; + LAYER metal3 ; + RECT 21.655 45.5475 21.79 45.6825 ; + LAYER metal3 ; + RECT 8.12 39.1125 8.255 39.2475 ; + LAYER metal3 ; + RECT -0.0675 2.4125 0.0675 2.5475 ; + LAYER metal3 ; + RECT 23.065 24.0275 23.2 24.1625 ; + LAYER metal3 ; + RECT 20.95 45.5475 21.085 45.6825 ; + LAYER metal3 ; + RECT 2.125 36.3725 2.26 36.5075 ; + LAYER metal3 ; + RECT 18.6925 34.7875 18.8275 34.9225 ; + LAYER metal3 ; + RECT 9.46 17.2575 9.595 17.3925 ; + LAYER metal3 ; + RECT 8.12 44.0525 8.255 44.1875 ; + LAYER metal3 ; + RECT 23.065 40.1675 23.2 40.3025 ; + LAYER metal3 ; + RECT 17.1025 29.4075 17.2375 29.5425 ; + LAYER metal3 ; + RECT 21.0075 19.3325 21.0775 19.4675 ; + LAYER metal3 ; + RECT 18.6925 37.4775 18.8275 37.6125 ; + LAYER metal3 ; + RECT 17.1025 40.1675 17.2375 40.3025 ; + LAYER metal3 ; + RECT 0.75 32.7325 0.885 32.8675 ; + LAYER metal3 ; + RECT 17.915 21.3375 18.05 21.4725 ; + LAYER metal3 ; + RECT 18.6925 26.7175 18.8275 26.8525 ; + LAYER metal3 ; + RECT 23.065 34.7875 23.2 34.9225 ; + LAYER metal3 ; + RECT 18.6925 40.1675 18.8275 40.3025 ; + LAYER metal3 ; + RECT 2.125 32.7325 2.26 32.8675 ; + LAYER metal3 ; + RECT 16.7 2.4025 16.835 2.5375 ; + LAYER metal3 ; + RECT 9.46 2.4075 9.595 2.5425 ; + LAYER metal3 ; + RECT 23.065 26.7175 23.2 26.8525 ; + LAYER metal3 ; + RECT 22.3975 13.2925 22.4675 13.4275 ; + LAYER metal3 ; + RECT 11.0325 26.7175 11.1675 26.8525 ; + LAYER metal3 ; + RECT 20.245 29.4075 20.38 29.5425 ; + LAYER metal3 ; + RECT 20.245 37.4775 20.38 37.6125 ; + LAYER metal3 ; + RECT 11.0325 32.0975 11.1675 32.2325 ; + LAYER metal3 ; + RECT 21.7125 19.3325 21.7825 19.4675 ; + LAYER metal3 ; + RECT 20.245 40.1675 20.38 40.3025 ; + LAYER metal3 ; + RECT 17.1025 24.0275 17.2375 24.1625 ; + LAYER metal3 ; + RECT 12.56 32.0975 12.695 32.2325 ; + LAYER metal3 ; + RECT 22.2175 8.5075 22.2875 8.6425 ; + LAYER metal3 ; + RECT 21.6925 13.2925 21.7625 13.4275 ; + LAYER metal3 ; + RECT -0.0675 2.4025 0.0675 2.5375 ; + LAYER metal3 ; + RECT 2.125 29.0925 2.26 29.2275 ; + LAYER metal3 ; + RECT 17.1025 26.7175 17.2375 26.8525 ; + LAYER metal3 ; + RECT 12.56 34.7875 12.695 34.9225 ; + LAYER metal3 ; + RECT 23.065 45.5475 23.2 45.6825 ; + LAYER metal3 ; + RECT 20.245 32.0975 20.38 32.2325 ; + LAYER metal3 ; + RECT 13.84 2.4025 13.975 2.5375 ; + LAYER metal3 ; + RECT 22.36 45.5475 22.495 45.6825 ; + LAYER metal3 ; + RECT 20.245 34.7875 20.38 34.9225 ; + LAYER metal3 ; + RECT 20.245 21.3375 20.38 21.4725 ; + LAYER metal3 ; + RECT 2.125 21.8125 2.26 21.9475 ; + LAYER metal3 ; + RECT 17.1025 42.8575 17.2375 42.9925 ; + LAYER metal3 ; + RECT 20.245 42.8575 20.38 42.9925 ; + LAYER metal3 ; + RECT 18.6925 24.0275 18.8275 24.1625 ; + LAYER metal3 ; + RECT 8.12 44.0625 8.255 44.1975 ; + LAYER metal3 ; + RECT 18.6925 42.8575 18.8275 42.9925 ; + LAYER metal3 ; + RECT 20.95 21.3375 21.085 21.4725 ; + LAYER metal3 ; + RECT 22.4175 19.3325 22.4875 19.4675 ; + LAYER metal3 ; + RECT 17.1025 37.4775 17.2375 37.6125 ; + LAYER metal3 ; + RECT 23.065 42.8575 23.2 42.9925 ; + LAYER metal3 ; + RECT 21.655 21.3375 21.79 21.4725 ; + LAYER metal3 ; + RECT 18.6925 32.0975 18.8275 32.2325 ; + LAYER metal3 ; + RECT 20.245 45.5475 20.38 45.6825 ; + LAYER metal3 ; + RECT 17.1025 34.7875 17.2375 34.9225 ; + LAYER metal3 ; + RECT 2.125 25.4525 2.26 25.5875 ; + LAYER metal3 ; + RECT 8.12 39.1025 8.255 39.2375 ; + LAYER metal3 ; + RECT 23.065 37.4775 23.2 37.6125 ; + LAYER metal3 ; + RECT 0.75 29.0925 0.885 29.2275 ; + LAYER metal3 ; + RECT 20.245 24.0275 20.38 24.1625 ; + LAYER metal3 ; + RECT 9.46 12.3075 9.595 12.4425 ; + LAYER metal3 ; + RECT 11.0325 24.0275 11.1675 24.1625 ; + LAYER metal3 ; + RECT 23.065 21.3375 23.2 21.4725 ; + LAYER metal3 ; + RECT 23.065 29.4075 23.2 29.5425 ; + LAYER metal3 ; + RECT 9.46 7.3575 9.595 7.4925 ; + LAYER metal3 ; + RECT 0.75 21.8125 0.885 21.9475 ; + LAYER metal3 ; + RECT 0.75 25.4525 0.885 25.5875 ; + LAYER metal3 ; + RECT 22.36 21.3375 22.495 21.4725 ; + LAYER metal3 ; + RECT 11.0325 34.7875 11.1675 34.9225 ; + LAYER metal3 ; + RECT 17.1025 32.0975 17.2375 32.2325 ; + LAYER metal3 ; + RECT 12.56 24.0275 12.695 24.1625 ; + LAYER metal3 ; + RECT 18.6925 29.4075 18.8275 29.5425 ; + LAYER metal3 ; + RECT 21.5125 8.5075 21.5825 8.6425 ; + LAYER metal3 ; + RECT 12.56 26.7175 12.695 26.8525 ; + LAYER metal3 ; + RECT 20.245 26.7175 20.38 26.8525 ; + LAYER metal3 ; + RECT 0.75 36.3725 0.885 36.5075 ; + LAYER metal3 ; + RECT 23.065 32.0975 23.2 32.2325 ; END END vdd PIN gnd @@ -104,5544 +258,8274 @@ MACRO sram_2_16_1_freepdk45 USE GROUND ; SHAPE ABUTMENT ; PORT - LAYER metal2 ; - RECT 67.5 67.5 347.5 44035.0 ; - LAYER metal2 ; - RECT 11547.5 67.5 11827.5 44035.0 ; - LAYER metal1 ; - RECT 67.5 67.5 12212.5 347.5 ; - LAYER metal1 ; - RECT 67.5 43370.0 12212.5 43650.0 ; + LAYER metal3 ; + RECT 17.1025 22.6825 17.2375 22.8175 ; + LAYER metal3 ; + RECT 18.6925 33.4425 18.8275 33.5775 ; + LAYER metal3 ; + RECT 20.6025 44.2025 20.7375 44.3375 ; + LAYER metal3 ; + RECT 18.6925 44.2025 18.8275 44.3375 ; + LAYER metal3 ; + RECT 22.7175 30.7525 22.8525 30.8875 ; + LAYER metal3 ; + RECT 22.75 17.3275 22.82 17.4625 ; + LAYER metal3 ; + RECT 22.045 10.5575 22.115 10.6925 ; + LAYER metal3 ; + RECT 21.3075 44.2025 21.4425 44.3375 ; + LAYER metal3 ; + RECT 22.7175 36.1325 22.8525 36.2675 ; + LAYER metal3 ; + RECT 19.8975 30.7525 20.0325 30.8875 ; + LAYER metal3 ; + RECT 18.6925 30.7525 18.8275 30.8875 ; + LAYER metal3 ; + RECT 21.3075 19.9925 21.4425 20.1275 ; + LAYER metal3 ; + RECT 19.8975 44.2025 20.0325 44.3375 ; + LAYER metal3 ; + RECT 19.8975 38.8225 20.0325 38.9575 ; + LAYER metal3 ; + RECT 9.46 -0.0675 9.595 0.0675 ; + LAYER metal3 ; + RECT 9.46 9.8325 9.595 9.9675 ; + LAYER metal3 ; + RECT 19.8975 41.5125 20.0325 41.6475 ; + LAYER metal3 ; + RECT 19.8975 25.3725 20.0325 25.5075 ; + LAYER metal3 ; + RECT 23.6175 20.165 23.7525 20.235 ; + LAYER metal3 ; + RECT 19.8975 19.9925 20.0325 20.1275 ; + LAYER metal3 ; + RECT 17.1025 33.4425 17.2375 33.5775 ; + LAYER metal3 ; + RECT 17.1025 44.2025 17.2375 44.3375 ; + LAYER metal3 ; + RECT 22.0125 19.9925 22.1475 20.1275 ; + LAYER metal3 ; + RECT 18.6925 22.6825 18.8275 22.8175 ; + LAYER metal3 ; + RECT 22.0125 44.2025 22.1475 44.3375 ; + LAYER metal3 ; + RECT 13.89 -0.0675 14.025 0.0675 ; + LAYER metal3 ; + RECT 19.8975 36.1325 20.0325 36.2675 ; + LAYER metal3 ; + RECT 17.1025 41.5125 17.2375 41.6475 ; + LAYER metal3 ; + RECT 0.75 30.9125 0.885 31.0475 ; + LAYER metal3 ; + RECT 22.7175 28.0625 22.8525 28.1975 ; + LAYER metal3 ; + RECT 18.6925 28.0625 18.8275 28.1975 ; + LAYER metal3 ; + RECT 0.75 19.9925 0.885 20.1275 ; + LAYER metal3 ; + RECT 11.0325 25.3725 11.1675 25.5075 ; + LAYER metal3 ; + RECT 12.56 28.0625 12.695 28.1975 ; + LAYER metal3 ; + RECT 17.1025 38.8225 17.2375 38.9575 ; + LAYER metal3 ; + RECT 9.46 19.7325 9.595 19.8675 ; + LAYER metal3 ; + RECT 23.6175 44.375 23.7525 44.445 ; + LAYER metal3 ; + RECT 9.46 14.7825 9.595 14.9175 ; + LAYER metal3 ; + RECT 0.75 34.5525 0.885 34.6875 ; + LAYER metal3 ; + RECT 12.56 22.6825 12.695 22.8175 ; + LAYER metal3 ; + RECT 17.1025 28.0625 17.2375 28.1975 ; + LAYER metal3 ; + RECT 19.8975 22.6825 20.0325 22.8175 ; + LAYER metal3 ; + RECT 12.56 30.7525 12.695 30.8875 ; + LAYER metal3 ; + RECT 21.34 10.5575 21.41 10.6925 ; + LAYER metal3 ; + RECT 22.7175 33.4425 22.8525 33.5775 ; + LAYER metal3 ; + RECT 12.56 33.4425 12.695 33.5775 ; + LAYER metal3 ; + RECT 22.7175 19.9925 22.8525 20.1275 ; + LAYER metal3 ; + RECT 22.7175 41.5125 22.8525 41.6475 ; + LAYER metal3 ; + RECT 16.75 -0.0675 16.885 0.0675 ; + LAYER metal3 ; + RECT 11.0325 22.6825 11.1675 22.8175 ; + LAYER metal3 ; + RECT 19.8975 28.0625 20.0325 28.1975 ; + LAYER metal3 ; + RECT 2.125 19.9925 2.26 20.1275 ; + LAYER metal3 ; + RECT 17.1025 30.7525 17.2375 30.8875 ; + LAYER metal3 ; + RECT 18.6925 38.8225 18.8275 38.9575 ; + LAYER metal3 ; + RECT 12.56 36.1325 12.695 36.2675 ; + LAYER metal3 ; + RECT 17.1025 36.1325 17.2375 36.2675 ; + LAYER metal3 ; + RECT 11.0325 28.0625 11.1675 28.1975 ; + LAYER metal3 ; + RECT 11.0325 36.1325 11.1675 36.2675 ; + LAYER metal3 ; + RECT 19.7025 44.375 19.8375 44.445 ; + LAYER metal3 ; + RECT 18.6925 25.3725 18.8275 25.5075 ; + LAYER metal3 ; + RECT 8.17 41.5825 8.305 41.7175 ; + LAYER metal3 ; + RECT 20.6025 19.9925 20.7375 20.1275 ; + LAYER metal3 ; + RECT 0.75 23.6325 0.885 23.7675 ; + LAYER metal3 ; + RECT 2.125 34.5525 2.26 34.6875 ; + LAYER metal3 ; + RECT 22.7175 38.8225 22.8525 38.9575 ; + LAYER metal3 ; + RECT 18.6925 36.1325 18.8275 36.2675 ; + LAYER metal3 ; + RECT -0.0675 -0.0675 0.0675 0.0675 ; + LAYER metal3 ; + RECT 8.17 36.6325 8.305 36.7675 ; + LAYER metal3 ; + RECT 2.125 23.6325 2.26 23.7675 ; + LAYER metal3 ; + RECT -0.0675 4.8825 0.0675 5.0175 ; + LAYER metal3 ; + RECT 18.6925 41.5125 18.8275 41.6475 ; + LAYER metal3 ; + RECT 0.75 27.2725 0.885 27.4075 ; + LAYER metal3 ; + RECT 11.0325 33.4425 11.1675 33.5775 ; + LAYER metal3 ; + RECT 22.045 17.3275 22.115 17.4625 ; + LAYER metal3 ; + RECT 22.7175 22.6825 22.8525 22.8175 ; + LAYER metal3 ; + RECT 19.7025 20.165 19.8375 20.235 ; + LAYER metal3 ; + RECT 17.1025 25.3725 17.2375 25.5075 ; + LAYER metal3 ; + RECT 8.17 46.5325 8.305 46.6675 ; + LAYER metal3 ; + RECT 2.125 30.9125 2.26 31.0475 ; + LAYER metal3 ; + RECT 12.56 25.3725 12.695 25.5075 ; + LAYER metal3 ; + RECT 11.0325 30.7525 11.1675 30.8875 ; + LAYER metal3 ; + RECT 19.8975 33.4425 20.0325 33.5775 ; + LAYER metal3 ; + RECT 22.7175 25.3725 22.8525 25.5075 ; + LAYER metal3 ; + RECT 9.46 4.8825 9.595 5.0175 ; + LAYER metal3 ; + RECT 2.125 27.2725 2.26 27.4075 ; + LAYER metal3 ; + RECT 22.7175 44.2025 22.8525 44.3375 ; END END gnd OBS LAYER metal1 ; - RECT 4657.5 20522.5 4722.5 20587.5 ; - RECT 4657.5 20250.0 4722.5 20315.0 ; - RECT 4587.5 20522.5 4690.0 20587.5 ; - RECT 4657.5 20282.5 4722.5 20555.0 ; - RECT 4690.0 20250.0 4792.5 20315.0 ; - RECT 8435.0 20522.5 8500.0 20587.5 ; - RECT 8435.0 20035.0 8500.0 20100.0 ; - RECT 7082.5 20522.5 8467.5 20587.5 ; - RECT 8435.0 20067.5 8500.0 20555.0 ; - RECT 8467.5 20035.0 9852.5 20100.0 ; - RECT 4657.5 21957.5 4722.5 22022.5 ; - RECT 4657.5 22230.0 4722.5 22295.0 ; - RECT 4587.5 21957.5 4690.0 22022.5 ; - RECT 4657.5 21990.0 4722.5 22262.5 ; - RECT 4690.0 22230.0 4792.5 22295.0 ; - RECT 8435.0 21957.5 8500.0 22022.5 ; - RECT 8435.0 22445.0 8500.0 22510.0 ; - RECT 7082.5 21957.5 8467.5 22022.5 ; - RECT 8435.0 21990.0 8500.0 22477.5 ; - RECT 8467.5 22445.0 9852.5 22510.0 ; - RECT 4657.5 23212.5 4722.5 23277.5 ; - RECT 4657.5 22940.0 4722.5 23005.0 ; - RECT 4587.5 23212.5 4690.0 23277.5 ; - RECT 4657.5 22972.5 4722.5 23245.0 ; - RECT 4690.0 22940.0 4792.5 23005.0 ; - RECT 8435.0 23212.5 8500.0 23277.5 ; - RECT 8435.0 22725.0 8500.0 22790.0 ; - RECT 7082.5 23212.5 8467.5 23277.5 ; - RECT 8435.0 22757.5 8500.0 23245.0 ; - RECT 8467.5 22725.0 9852.5 22790.0 ; - RECT 4657.5 24647.5 4722.5 24712.5 ; - RECT 4657.5 24920.0 4722.5 24985.0 ; - RECT 4587.5 24647.5 4690.0 24712.5 ; - RECT 4657.5 24680.0 4722.5 24952.5 ; - RECT 4690.0 24920.0 4792.5 24985.0 ; - RECT 8435.0 24647.5 8500.0 24712.5 ; - RECT 8435.0 25135.0 8500.0 25200.0 ; - RECT 7082.5 24647.5 8467.5 24712.5 ; - RECT 8435.0 24680.0 8500.0 25167.5 ; - RECT 8467.5 25135.0 9852.5 25200.0 ; - RECT 4657.5 25902.5 4722.5 25967.5 ; - RECT 4657.5 25630.0 4722.5 25695.0 ; - RECT 4587.5 25902.5 4690.0 25967.5 ; - RECT 4657.5 25662.5 4722.5 25935.0 ; - RECT 4690.0 25630.0 4792.5 25695.0 ; - RECT 8435.0 25902.5 8500.0 25967.5 ; - RECT 8435.0 25415.0 8500.0 25480.0 ; - RECT 7082.5 25902.5 8467.5 25967.5 ; - RECT 8435.0 25447.5 8500.0 25935.0 ; - RECT 8467.5 25415.0 9852.5 25480.0 ; - RECT 4657.5 27337.5 4722.5 27402.5 ; - RECT 4657.5 27610.0 4722.5 27675.0 ; - RECT 4587.5 27337.5 4690.0 27402.5 ; - RECT 4657.5 27370.0 4722.5 27642.5 ; - RECT 4690.0 27610.0 4792.5 27675.0 ; - RECT 8435.0 27337.5 8500.0 27402.5 ; - RECT 8435.0 27825.0 8500.0 27890.0 ; - RECT 7082.5 27337.5 8467.5 27402.5 ; - RECT 8435.0 27370.0 8500.0 27857.5 ; - RECT 8467.5 27825.0 9852.5 27890.0 ; - RECT 4657.5 28592.5 4722.5 28657.5 ; - RECT 4657.5 28320.0 4722.5 28385.0 ; - RECT 4587.5 28592.5 4690.0 28657.5 ; - RECT 4657.5 28352.5 4722.5 28625.0 ; - RECT 4690.0 28320.0 4792.5 28385.0 ; - RECT 8435.0 28592.5 8500.0 28657.5 ; - RECT 8435.0 28105.0 8500.0 28170.0 ; - RECT 7082.5 28592.5 8467.5 28657.5 ; - RECT 8435.0 28137.5 8500.0 28625.0 ; - RECT 8467.5 28105.0 9852.5 28170.0 ; - RECT 4657.5 30027.5 4722.5 30092.5 ; - RECT 4657.5 30300.0 4722.5 30365.0 ; - RECT 4587.5 30027.5 4690.0 30092.5 ; - RECT 4657.5 30060.0 4722.5 30332.5 ; - RECT 4690.0 30300.0 4792.5 30365.0 ; - RECT 8435.0 30027.5 8500.0 30092.5 ; - RECT 8435.0 30515.0 8500.0 30580.0 ; - RECT 7082.5 30027.5 8467.5 30092.5 ; - RECT 8435.0 30060.0 8500.0 30547.5 ; - RECT 8467.5 30515.0 9852.5 30580.0 ; - RECT 4657.5 31282.5 4722.5 31347.5 ; - RECT 4657.5 31010.0 4722.5 31075.0 ; - RECT 4587.5 31282.5 4690.0 31347.5 ; - RECT 4657.5 31042.5 4722.5 31315.0 ; - RECT 4690.0 31010.0 4792.5 31075.0 ; - RECT 8435.0 31282.5 8500.0 31347.5 ; - RECT 8435.0 30795.0 8500.0 30860.0 ; - RECT 7082.5 31282.5 8467.5 31347.5 ; - RECT 8435.0 30827.5 8500.0 31315.0 ; - RECT 8467.5 30795.0 9852.5 30860.0 ; - RECT 4657.5 32717.5 4722.5 32782.5 ; - RECT 4657.5 32990.0 4722.5 33055.0 ; - RECT 4587.5 32717.5 4690.0 32782.5 ; - RECT 4657.5 32750.0 4722.5 33022.5 ; - RECT 4690.0 32990.0 4792.5 33055.0 ; - RECT 8435.0 32717.5 8500.0 32782.5 ; - RECT 8435.0 33205.0 8500.0 33270.0 ; - RECT 7082.5 32717.5 8467.5 32782.5 ; - RECT 8435.0 32750.0 8500.0 33237.5 ; - RECT 8467.5 33205.0 9852.5 33270.0 ; - RECT 4657.5 33972.5 4722.5 34037.5 ; - RECT 4657.5 33700.0 4722.5 33765.0 ; - RECT 4587.5 33972.5 4690.0 34037.5 ; - RECT 4657.5 33732.5 4722.5 34005.0 ; - RECT 4690.0 33700.0 4792.5 33765.0 ; - RECT 8435.0 33972.5 8500.0 34037.5 ; - RECT 8435.0 33485.0 8500.0 33550.0 ; - RECT 7082.5 33972.5 8467.5 34037.5 ; - RECT 8435.0 33517.5 8500.0 34005.0 ; - RECT 8467.5 33485.0 9852.5 33550.0 ; - RECT 4657.5 35407.5 4722.5 35472.5 ; - RECT 4657.5 35680.0 4722.5 35745.0 ; - RECT 4587.5 35407.5 4690.0 35472.5 ; - RECT 4657.5 35440.0 4722.5 35712.5 ; - RECT 4690.0 35680.0 4792.5 35745.0 ; - RECT 8435.0 35407.5 8500.0 35472.5 ; - RECT 8435.0 35895.0 8500.0 35960.0 ; - RECT 7082.5 35407.5 8467.5 35472.5 ; - RECT 8435.0 35440.0 8500.0 35927.5 ; - RECT 8467.5 35895.0 9852.5 35960.0 ; - RECT 4657.5 36662.5 4722.5 36727.5 ; - RECT 4657.5 36390.0 4722.5 36455.0 ; - RECT 4587.5 36662.5 4690.0 36727.5 ; - RECT 4657.5 36422.5 4722.5 36695.0 ; - RECT 4690.0 36390.0 4792.5 36455.0 ; - RECT 8435.0 36662.5 8500.0 36727.5 ; - RECT 8435.0 36175.0 8500.0 36240.0 ; - RECT 7082.5 36662.5 8467.5 36727.5 ; - RECT 8435.0 36207.5 8500.0 36695.0 ; - RECT 8467.5 36175.0 9852.5 36240.0 ; - RECT 4657.5 38097.5 4722.5 38162.5 ; - RECT 4657.5 38370.0 4722.5 38435.0 ; - RECT 4587.5 38097.5 4690.0 38162.5 ; - RECT 4657.5 38130.0 4722.5 38402.5 ; - RECT 4690.0 38370.0 4792.5 38435.0 ; - RECT 8435.0 38097.5 8500.0 38162.5 ; - RECT 8435.0 38585.0 8500.0 38650.0 ; - RECT 7082.5 38097.5 8467.5 38162.5 ; - RECT 8435.0 38130.0 8500.0 38617.5 ; - RECT 8467.5 38585.0 9852.5 38650.0 ; - RECT 4657.5 39352.5 4722.5 39417.5 ; - RECT 4657.5 39080.0 4722.5 39145.0 ; - RECT 4587.5 39352.5 4690.0 39417.5 ; - RECT 4657.5 39112.5 4722.5 39385.0 ; - RECT 4690.0 39080.0 4792.5 39145.0 ; - RECT 8435.0 39352.5 8500.0 39417.5 ; - RECT 8435.0 38865.0 8500.0 38930.0 ; - RECT 7082.5 39352.5 8467.5 39417.5 ; - RECT 8435.0 38897.5 8500.0 39385.0 ; - RECT 8467.5 38865.0 9852.5 38930.0 ; - RECT 4657.5 40787.5 4722.5 40852.5 ; - RECT 4657.5 41060.0 4722.5 41125.0 ; - RECT 4587.5 40787.5 4690.0 40852.5 ; - RECT 4657.5 40820.0 4722.5 41092.5 ; - RECT 4690.0 41060.0 4792.5 41125.0 ; - RECT 8435.0 40787.5 8500.0 40852.5 ; - RECT 8435.0 41275.0 8500.0 41340.0 ; - RECT 7082.5 40787.5 8467.5 40852.5 ; - RECT 8435.0 40820.0 8500.0 41307.5 ; - RECT 8467.5 41275.0 9852.5 41340.0 ; - RECT 7277.5 9340.0 7620.0 9405.0 ; - RECT 7002.5 10685.0 7825.0 10750.0 ; - RECT 7277.5 14720.0 8030.0 14785.0 ; - RECT 7002.5 16065.0 8235.0 16130.0 ; - RECT 207.5 9135.0 7277.5 9200.0 ; - RECT 207.5 11825.0 7277.5 11890.0 ; - RECT 207.5 14515.0 7277.5 14580.0 ; - RECT 207.5 17205.0 7277.5 17270.0 ; - RECT 592.5 10480.0 7277.5 10545.0 ; - RECT 592.5 13170.0 7277.5 13235.0 ; - RECT 592.5 15860.0 7277.5 15925.0 ; - RECT 592.5 18550.0 7277.5 18615.0 ; - RECT 7277.5 8372.5 7620.0 8437.5 ; - RECT 7277.5 7667.5 7825.0 7732.5 ; - RECT 7277.5 6962.5 8030.0 7027.5 ; - RECT 7277.5 6257.5 8235.0 6322.5 ; - RECT 207.5 8725.0 837.5 8790.0 ; - RECT 207.5 8020.0 837.5 8085.0 ; - RECT 207.5 7315.0 837.5 7380.0 ; - RECT 207.5 6610.0 837.5 6675.0 ; - RECT 207.5 5905.0 837.5 5970.0 ; - RECT 4047.5 5700.0 4112.5 5765.0 ; - RECT 4047.5 5732.5 4112.5 5937.5 ; - RECT 592.5 5700.0 4080.0 5765.0 ; - RECT 7007.5 5700.0 7072.5 5765.0 ; - RECT 7007.5 5732.5 7072.5 5937.5 ; - RECT 592.5 5700.0 7040.0 5765.0 ; - RECT 2057.5 5700.0 2122.5 5765.0 ; - RECT 2057.5 5732.5 2122.5 5937.5 ; - RECT 592.5 5700.0 2090.0 5765.0 ; - RECT 5017.5 5700.0 5082.5 5765.0 ; - RECT 5017.5 5732.5 5082.5 5937.5 ; - RECT 592.5 5700.0 5050.0 5765.0 ; - RECT 9055.0 4632.5 9942.5 4697.5 ; - RECT 8645.0 2447.5 9942.5 2512.5 ; - RECT 8850.0 3995.0 9942.5 4060.0 ; - RECT 9055.0 42425.0 9942.5 42490.0 ; - RECT 9260.0 11135.0 9942.5 11200.0 ; - RECT 9465.0 15160.0 9942.5 15225.0 ; - RECT 1042.5 8930.0 1107.5 8995.0 ; - RECT 1042.5 8757.5 1107.5 8962.5 ; - RECT 1075.0 8930.0 8440.0 8995.0 ; - RECT 5022.5 41620.0 8505.0 41685.0 ; - RECT 9942.5 43110.0 12072.5 43175.0 ; - RECT 9942.5 19732.5 12072.5 19797.5 ; - RECT 9942.5 11265.0 12072.5 11330.0 ; - RECT 9942.5 7637.5 12072.5 7702.5 ; - RECT 9942.5 10597.5 12072.5 10662.5 ; - RECT 9942.5 5647.5 12072.5 5712.5 ; - RECT 9942.5 8607.5 12072.5 8672.5 ; - RECT 9942.5 2577.5 12072.5 2642.5 ; - RECT 592.5 21240.0 12072.5 21305.0 ; - RECT 592.5 23930.0 12072.5 23995.0 ; - RECT 592.5 26620.0 12072.5 26685.0 ; - RECT 592.5 29310.0 12072.5 29375.0 ; - RECT 592.5 32000.0 12072.5 32065.0 ; - RECT 592.5 34690.0 12072.5 34755.0 ; - RECT 592.5 37380.0 12072.5 37445.0 ; - RECT 592.5 40070.0 12072.5 40135.0 ; - RECT 9942.5 3865.0 11827.5 3930.0 ; - RECT 9942.5 15290.0 11827.5 15355.0 ; - RECT 9942.5 4792.5 11827.5 4857.5 ; - RECT 9942.5 12067.5 11827.5 12132.5 ; - RECT 207.5 19895.0 5247.5 19960.0 ; - RECT 207.5 22585.0 5247.5 22650.0 ; - RECT 207.5 25275.0 5247.5 25340.0 ; - RECT 207.5 27965.0 5247.5 28030.0 ; - RECT 207.5 30655.0 5247.5 30720.0 ; - RECT 207.5 33345.0 5247.5 33410.0 ; - RECT 207.5 36035.0 5247.5 36100.0 ; - RECT 207.5 38725.0 5247.5 38790.0 ; - RECT 207.5 41415.0 5247.5 41480.0 ; - RECT 9942.5 19927.5 10647.5 21272.5 ; - RECT 9942.5 22617.5 10647.5 21272.5 ; - RECT 9942.5 22617.5 10647.5 23962.5 ; - RECT 9942.5 25307.5 10647.5 23962.5 ; - RECT 9942.5 25307.5 10647.5 26652.5 ; - RECT 9942.5 27997.5 10647.5 26652.5 ; - RECT 9942.5 27997.5 10647.5 29342.5 ; - RECT 9942.5 30687.5 10647.5 29342.5 ; - RECT 9942.5 30687.5 10647.5 32032.5 ; - RECT 9942.5 33377.5 10647.5 32032.5 ; - RECT 9942.5 33377.5 10647.5 34722.5 ; - RECT 9942.5 36067.5 10647.5 34722.5 ; - RECT 9942.5 36067.5 10647.5 37412.5 ; - RECT 9942.5 38757.5 10647.5 37412.5 ; - RECT 9942.5 38757.5 10647.5 40102.5 ; - RECT 9942.5 41447.5 10647.5 40102.5 ; - RECT 10647.5 19927.5 11352.5 21272.5 ; - RECT 10647.5 22617.5 11352.5 21272.5 ; - RECT 10647.5 22617.5 11352.5 23962.5 ; - RECT 10647.5 25307.5 11352.5 23962.5 ; - RECT 10647.5 25307.5 11352.5 26652.5 ; - RECT 10647.5 27997.5 11352.5 26652.5 ; - RECT 10647.5 27997.5 11352.5 29342.5 ; - RECT 10647.5 30687.5 11352.5 29342.5 ; - RECT 10647.5 30687.5 11352.5 32032.5 ; - RECT 10647.5 33377.5 11352.5 32032.5 ; - RECT 10647.5 33377.5 11352.5 34722.5 ; - RECT 10647.5 36067.5 11352.5 34722.5 ; - RECT 10647.5 36067.5 11352.5 37412.5 ; - RECT 10647.5 38757.5 11352.5 37412.5 ; - RECT 10647.5 38757.5 11352.5 40102.5 ; - RECT 10647.5 41447.5 11352.5 40102.5 ; - RECT 9852.5 20035.0 11442.5 20100.0 ; - RECT 9852.5 22445.0 11442.5 22510.0 ; - RECT 9852.5 22725.0 11442.5 22790.0 ; - RECT 9852.5 25135.0 11442.5 25200.0 ; - RECT 9852.5 25415.0 11442.5 25480.0 ; - RECT 9852.5 27825.0 11442.5 27890.0 ; - RECT 9852.5 28105.0 11442.5 28170.0 ; - RECT 9852.5 30515.0 11442.5 30580.0 ; - RECT 9852.5 30795.0 11442.5 30860.0 ; - RECT 9852.5 33205.0 11442.5 33270.0 ; - RECT 9852.5 33485.0 11442.5 33550.0 ; - RECT 9852.5 35895.0 11442.5 35960.0 ; - RECT 9852.5 36175.0 11442.5 36240.0 ; - RECT 9852.5 38585.0 11442.5 38650.0 ; - RECT 9852.5 38865.0 11442.5 38930.0 ; - RECT 9852.5 41275.0 11442.5 41340.0 ; - RECT 9852.5 21240.0 11442.5 21305.0 ; - RECT 9852.5 23930.0 11442.5 23995.0 ; - RECT 9852.5 26620.0 11442.5 26685.0 ; - RECT 9852.5 29310.0 11442.5 29375.0 ; - RECT 9852.5 32000.0 11442.5 32065.0 ; - RECT 9852.5 34690.0 11442.5 34755.0 ; - RECT 9852.5 37380.0 11442.5 37445.0 ; - RECT 9852.5 40070.0 11442.5 40135.0 ; - RECT 9852.5 19895.0 11442.5 19960.0 ; - RECT 9852.5 22585.0 11442.5 22650.0 ; - RECT 9852.5 25275.0 11442.5 25340.0 ; - RECT 9852.5 27965.0 11442.5 28030.0 ; - RECT 9852.5 30655.0 11442.5 30720.0 ; - RECT 9852.5 33345.0 11442.5 33410.0 ; - RECT 9852.5 36035.0 11442.5 36100.0 ; - RECT 9852.5 38725.0 11442.5 38790.0 ; - RECT 9852.5 41415.0 11442.5 41480.0 ; - RECT 10295.0 42660.0 10360.0 43175.0 ; - RECT 10105.0 42130.0 10170.0 42265.0 ; - RECT 10295.0 42130.0 10360.0 42265.0 ; - RECT 10295.0 42130.0 10360.0 42265.0 ; - RECT 10105.0 42130.0 10170.0 42265.0 ; - RECT 10105.0 42660.0 10170.0 42795.0 ; - RECT 10295.0 42660.0 10360.0 42795.0 ; - RECT 10295.0 42660.0 10360.0 42795.0 ; - RECT 10105.0 42660.0 10170.0 42795.0 ; - RECT 10295.0 42660.0 10360.0 42795.0 ; - RECT 10485.0 42660.0 10550.0 42795.0 ; - RECT 10485.0 42660.0 10550.0 42795.0 ; - RECT 10295.0 42660.0 10360.0 42795.0 ; - RECT 10275.0 42425.0 10140.0 42490.0 ; - RECT 10295.0 42972.5 10360.0 43107.5 ; - RECT 10105.0 42130.0 10170.0 42265.0 ; - RECT 10295.0 42130.0 10360.0 42265.0 ; - RECT 10105.0 42660.0 10170.0 42795.0 ; - RECT 10485.0 42660.0 10550.0 42795.0 ; - RECT 9942.5 42425.0 10647.5 42490.0 ; - RECT 9942.5 43110.0 10647.5 43175.0 ; - RECT 11000.0 42660.0 11065.0 43175.0 ; - RECT 10810.0 42130.0 10875.0 42265.0 ; - RECT 11000.0 42130.0 11065.0 42265.0 ; - RECT 11000.0 42130.0 11065.0 42265.0 ; - RECT 10810.0 42130.0 10875.0 42265.0 ; - RECT 10810.0 42660.0 10875.0 42795.0 ; - RECT 11000.0 42660.0 11065.0 42795.0 ; - RECT 11000.0 42660.0 11065.0 42795.0 ; - RECT 10810.0 42660.0 10875.0 42795.0 ; - RECT 11000.0 42660.0 11065.0 42795.0 ; - RECT 11190.0 42660.0 11255.0 42795.0 ; - RECT 11190.0 42660.0 11255.0 42795.0 ; - RECT 11000.0 42660.0 11065.0 42795.0 ; - RECT 10980.0 42425.0 10845.0 42490.0 ; - RECT 11000.0 42972.5 11065.0 43107.5 ; - RECT 10810.0 42130.0 10875.0 42265.0 ; - RECT 11000.0 42130.0 11065.0 42265.0 ; - RECT 10810.0 42660.0 10875.0 42795.0 ; - RECT 11190.0 42660.0 11255.0 42795.0 ; - RECT 10647.5 42425.0 11352.5 42490.0 ; - RECT 10647.5 43110.0 11352.5 43175.0 ; - RECT 9942.5 42425.0 11352.5 42490.0 ; - RECT 9942.5 43110.0 11352.5 43175.0 ; - RECT 9942.5 15042.5 10647.5 19927.5 ; - RECT 10647.5 15042.5 11352.5 19927.5 ; - RECT 9942.5 15160.0 11352.5 15225.0 ; - RECT 9942.5 19732.5 11352.5 19797.5 ; - RECT 9942.5 15290.0 11352.5 15355.0 ; - RECT 9942.5 10867.5 10647.5 15042.5 ; - RECT 10647.5 10867.5 11352.5 15042.5 ; - RECT 9942.5 11135.0 11352.5 11200.0 ; - RECT 9942.5 11265.0 11352.5 11330.0 ; - RECT 9942.5 12067.5 11352.5 12132.5 ; - RECT 9942.5 4427.5 10647.5 10867.5 ; - RECT 11352.5 4427.5 10647.5 10867.5 ; - RECT 9942.5 4632.5 11352.5 4697.5 ; - RECT 9942.5 7637.5 11352.5 7702.5 ; - RECT 9942.5 10597.5 11352.5 10662.5 ; - RECT 9942.5 5647.5 11352.5 5712.5 ; - RECT 9942.5 8607.5 11352.5 8672.5 ; - RECT 9942.5 4792.5 11352.5 4857.5 ; - RECT 9942.5 4427.5 10647.5 1452.5 ; - RECT 10647.5 4427.5 11352.5 1452.5 ; - RECT 9942.5 4060.0 11352.5 3995.0 ; - RECT 9942.5 2512.5 11352.5 2447.5 ; - RECT 9942.5 2642.5 11352.5 2577.5 ; - RECT 9942.5 3930.0 11352.5 3865.0 ; - RECT 4077.5 20535.0 4142.5 20600.0 ; - RECT 4077.5 20522.5 4142.5 20587.5 ; - RECT 3860.0 20535.0 4110.0 20600.0 ; - RECT 4077.5 20555.0 4142.5 20567.5 ; - RECT 4110.0 20522.5 4357.5 20587.5 ; - RECT 4077.5 21945.0 4142.5 22010.0 ; - RECT 4077.5 21957.5 4142.5 22022.5 ; - RECT 3860.0 21945.0 4110.0 22010.0 ; - RECT 4077.5 21977.5 4142.5 21990.0 ; - RECT 4110.0 21957.5 4357.5 22022.5 ; - RECT 4077.5 23225.0 4142.5 23290.0 ; - RECT 4077.5 23212.5 4142.5 23277.5 ; - RECT 3860.0 23225.0 4110.0 23290.0 ; - RECT 4077.5 23245.0 4142.5 23257.5 ; - RECT 4110.0 23212.5 4357.5 23277.5 ; - RECT 4077.5 24635.0 4142.5 24700.0 ; - RECT 4077.5 24647.5 4142.5 24712.5 ; - RECT 3860.0 24635.0 4110.0 24700.0 ; - RECT 4077.5 24667.5 4142.5 24680.0 ; - RECT 4110.0 24647.5 4357.5 24712.5 ; - RECT 4077.5 25915.0 4142.5 25980.0 ; - RECT 4077.5 25902.5 4142.5 25967.5 ; - RECT 3860.0 25915.0 4110.0 25980.0 ; - RECT 4077.5 25935.0 4142.5 25947.5 ; - RECT 4110.0 25902.5 4357.5 25967.5 ; - RECT 4077.5 27325.0 4142.5 27390.0 ; - RECT 4077.5 27337.5 4142.5 27402.5 ; - RECT 3860.0 27325.0 4110.0 27390.0 ; - RECT 4077.5 27357.5 4142.5 27370.0 ; - RECT 4110.0 27337.5 4357.5 27402.5 ; - RECT 4077.5 28605.0 4142.5 28670.0 ; - RECT 4077.5 28592.5 4142.5 28657.5 ; - RECT 3860.0 28605.0 4110.0 28670.0 ; - RECT 4077.5 28625.0 4142.5 28637.5 ; - RECT 4110.0 28592.5 4357.5 28657.5 ; - RECT 4077.5 30015.0 4142.5 30080.0 ; - RECT 4077.5 30027.5 4142.5 30092.5 ; - RECT 3860.0 30015.0 4110.0 30080.0 ; - RECT 4077.5 30047.5 4142.5 30060.0 ; - RECT 4110.0 30027.5 4357.5 30092.5 ; - RECT 4077.5 31295.0 4142.5 31360.0 ; - RECT 4077.5 31282.5 4142.5 31347.5 ; - RECT 3860.0 31295.0 4110.0 31360.0 ; - RECT 4077.5 31315.0 4142.5 31327.5 ; - RECT 4110.0 31282.5 4357.5 31347.5 ; - RECT 4077.5 32705.0 4142.5 32770.0 ; - RECT 4077.5 32717.5 4142.5 32782.5 ; - RECT 3860.0 32705.0 4110.0 32770.0 ; - RECT 4077.5 32737.5 4142.5 32750.0 ; - RECT 4110.0 32717.5 4357.5 32782.5 ; - RECT 4077.5 33985.0 4142.5 34050.0 ; - RECT 4077.5 33972.5 4142.5 34037.5 ; - RECT 3860.0 33985.0 4110.0 34050.0 ; - RECT 4077.5 34005.0 4142.5 34017.5 ; - RECT 4110.0 33972.5 4357.5 34037.5 ; - RECT 4077.5 35395.0 4142.5 35460.0 ; - RECT 4077.5 35407.5 4142.5 35472.5 ; - RECT 3860.0 35395.0 4110.0 35460.0 ; - RECT 4077.5 35427.5 4142.5 35440.0 ; - RECT 4110.0 35407.5 4357.5 35472.5 ; - RECT 4077.5 36675.0 4142.5 36740.0 ; - RECT 4077.5 36662.5 4142.5 36727.5 ; - RECT 3860.0 36675.0 4110.0 36740.0 ; - RECT 4077.5 36695.0 4142.5 36707.5 ; - RECT 4110.0 36662.5 4357.5 36727.5 ; - RECT 4077.5 38085.0 4142.5 38150.0 ; - RECT 4077.5 38097.5 4142.5 38162.5 ; - RECT 3860.0 38085.0 4110.0 38150.0 ; - RECT 4077.5 38117.5 4142.5 38130.0 ; - RECT 4110.0 38097.5 4357.5 38162.5 ; - RECT 4077.5 39365.0 4142.5 39430.0 ; - RECT 4077.5 39352.5 4142.5 39417.5 ; - RECT 3860.0 39365.0 4110.0 39430.0 ; - RECT 4077.5 39385.0 4142.5 39397.5 ; - RECT 4110.0 39352.5 4357.5 39417.5 ; - RECT 4077.5 40775.0 4142.5 40840.0 ; - RECT 4077.5 40787.5 4142.5 40852.5 ; - RECT 3860.0 40775.0 4110.0 40840.0 ; - RECT 4077.5 40807.5 4142.5 40820.0 ; - RECT 4110.0 40787.5 4357.5 40852.5 ; - RECT 1947.5 9762.5 3312.5 9827.5 ; - RECT 2122.5 11197.5 3312.5 11262.5 ; - RECT 2297.5 12452.5 3312.5 12517.5 ; - RECT 2472.5 13887.5 3312.5 13952.5 ; - RECT 2647.5 15142.5 3312.5 15207.5 ; - RECT 2822.5 16577.5 3312.5 16642.5 ; - RECT 2997.5 17832.5 3312.5 17897.5 ; - RECT 3172.5 19267.5 3312.5 19332.5 ; - RECT 1947.5 20535.0 3372.5 20600.0 ; - RECT 2647.5 20320.0 3630.0 20385.0 ; - RECT 1947.5 21945.0 3372.5 22010.0 ; - RECT 2822.5 22160.0 3630.0 22225.0 ; - RECT 1947.5 23225.0 3372.5 23290.0 ; - RECT 2997.5 23010.0 3630.0 23075.0 ; - RECT 1947.5 24635.0 3372.5 24700.0 ; - RECT 3172.5 24850.0 3630.0 24915.0 ; - RECT 2122.5 25915.0 3372.5 25980.0 ; - RECT 2647.5 25700.0 3630.0 25765.0 ; - RECT 2122.5 27325.0 3372.5 27390.0 ; - RECT 2822.5 27540.0 3630.0 27605.0 ; - RECT 2122.5 28605.0 3372.5 28670.0 ; - RECT 2997.5 28390.0 3630.0 28455.0 ; - RECT 2122.5 30015.0 3372.5 30080.0 ; - RECT 3172.5 30230.0 3630.0 30295.0 ; - RECT 2297.5 31295.0 3372.5 31360.0 ; - RECT 2647.5 31080.0 3630.0 31145.0 ; - RECT 2297.5 32705.0 3372.5 32770.0 ; - RECT 2822.5 32920.0 3630.0 32985.0 ; - RECT 2297.5 33985.0 3372.5 34050.0 ; - RECT 2997.5 33770.0 3630.0 33835.0 ; - RECT 2297.5 35395.0 3372.5 35460.0 ; - RECT 3172.5 35610.0 3630.0 35675.0 ; - RECT 2472.5 36675.0 3372.5 36740.0 ; - RECT 2647.5 36460.0 3630.0 36525.0 ; - RECT 2472.5 38085.0 3372.5 38150.0 ; - RECT 2822.5 38300.0 3630.0 38365.0 ; - RECT 2472.5 39365.0 3372.5 39430.0 ; - RECT 2997.5 39150.0 3630.0 39215.0 ; - RECT 2472.5 40775.0 3372.5 40840.0 ; - RECT 3172.5 40990.0 3630.0 41055.0 ; - RECT 6135.0 9762.5 6070.0 9827.5 ; - RECT 6135.0 10285.0 6070.0 10350.0 ; - RECT 6372.5 9762.5 6102.5 9827.5 ; - RECT 6135.0 9795.0 6070.0 10317.5 ; - RECT 6102.5 10285.0 5857.5 10350.0 ; - RECT 7242.5 9762.5 6602.5 9827.5 ; - RECT 6135.0 11197.5 6070.0 11262.5 ; - RECT 6135.0 11630.0 6070.0 11695.0 ; - RECT 6372.5 11197.5 6102.5 11262.5 ; - RECT 6135.0 11230.0 6070.0 11662.5 ; - RECT 6102.5 11630.0 5582.5 11695.0 ; - RECT 6967.5 11197.5 6602.5 11262.5 ; - RECT 7242.5 11960.0 5307.5 12025.0 ; - RECT 6967.5 13305.0 5032.5 13370.0 ; - RECT 5857.5 9775.0 4732.5 9840.0 ; - RECT 5582.5 9560.0 4475.0 9625.0 ; - RECT 5307.5 11185.0 4732.5 11250.0 ; - RECT 5582.5 11400.0 4475.0 11465.0 ; - RECT 5857.5 12465.0 4732.5 12530.0 ; - RECT 5032.5 12250.0 4475.0 12315.0 ; - RECT 5307.5 13875.0 4732.5 13940.0 ; - RECT 5032.5 14090.0 4475.0 14155.0 ; - RECT 4027.5 9775.0 3962.5 9840.0 ; - RECT 4027.5 9762.5 3962.5 9827.5 ; - RECT 4245.0 9775.0 3995.0 9840.0 ; - RECT 4027.5 9795.0 3962.5 9807.5 ; - RECT 3995.0 9762.5 3747.5 9827.5 ; - RECT 4027.5 11185.0 3962.5 11250.0 ; - RECT 4027.5 11197.5 3962.5 11262.5 ; - RECT 4245.0 11185.0 3995.0 11250.0 ; - RECT 4027.5 11217.5 3962.5 11230.0 ; - RECT 3995.0 11197.5 3747.5 11262.5 ; - RECT 4027.5 12465.0 3962.5 12530.0 ; - RECT 4027.5 12452.5 3962.5 12517.5 ; - RECT 4245.0 12465.0 3995.0 12530.0 ; - RECT 4027.5 12485.0 3962.5 12497.5 ; - RECT 3995.0 12452.5 3747.5 12517.5 ; - RECT 4027.5 13875.0 3962.5 13940.0 ; - RECT 4027.5 13887.5 3962.5 13952.5 ; - RECT 4245.0 13875.0 3995.0 13940.0 ; - RECT 4027.5 13907.5 3962.5 13920.0 ; - RECT 3995.0 13887.5 3747.5 13952.5 ; - RECT 6300.0 10327.5 6235.0 10512.5 ; - RECT 6300.0 9167.5 6235.0 9352.5 ; - RECT 6660.0 9285.0 6595.0 9135.0 ; - RECT 6660.0 10170.0 6595.0 10545.0 ; - RECT 6470.0 9285.0 6405.0 10170.0 ; - RECT 6660.0 10170.0 6595.0 10305.0 ; - RECT 6470.0 10170.0 6405.0 10305.0 ; - RECT 6470.0 10170.0 6405.0 10305.0 ; - RECT 6660.0 10170.0 6595.0 10305.0 ; - RECT 6660.0 9285.0 6595.0 9420.0 ; - RECT 6470.0 9285.0 6405.0 9420.0 ; - RECT 6470.0 9285.0 6405.0 9420.0 ; - RECT 6660.0 9285.0 6595.0 9420.0 ; - RECT 6300.0 10260.0 6235.0 10395.0 ; - RECT 6300.0 9285.0 6235.0 9420.0 ; - RECT 6602.5 9727.5 6537.5 9862.5 ; - RECT 6602.5 9727.5 6537.5 9862.5 ; - RECT 6437.5 9762.5 6372.5 9827.5 ; - RECT 6727.5 10480.0 6167.5 10545.0 ; - RECT 6727.5 9135.0 6167.5 9200.0 ; - RECT 6300.0 10697.5 6235.0 10512.5 ; - RECT 6300.0 11857.5 6235.0 11672.5 ; - RECT 6660.0 11740.0 6595.0 11890.0 ; - RECT 6660.0 10855.0 6595.0 10480.0 ; - RECT 6470.0 11740.0 6405.0 10855.0 ; - RECT 6660.0 10855.0 6595.0 10720.0 ; - RECT 6470.0 10855.0 6405.0 10720.0 ; - RECT 6470.0 10855.0 6405.0 10720.0 ; - RECT 6660.0 10855.0 6595.0 10720.0 ; - RECT 6660.0 11740.0 6595.0 11605.0 ; - RECT 6470.0 11740.0 6405.0 11605.0 ; - RECT 6470.0 11740.0 6405.0 11605.0 ; - RECT 6660.0 11740.0 6595.0 11605.0 ; - RECT 6300.0 10765.0 6235.0 10630.0 ; - RECT 6300.0 11740.0 6235.0 11605.0 ; - RECT 6602.5 11297.5 6537.5 11162.5 ; - RECT 6602.5 11297.5 6537.5 11162.5 ; - RECT 6437.5 11262.5 6372.5 11197.5 ; - RECT 6727.5 10545.0 6167.5 10480.0 ; - RECT 6727.5 11890.0 6167.5 11825.0 ; - RECT 3445.0 10327.5 3380.0 10512.5 ; - RECT 3445.0 9167.5 3380.0 9352.5 ; - RECT 3805.0 9285.0 3740.0 9135.0 ; - RECT 3805.0 10170.0 3740.0 10545.0 ; - RECT 3615.0 9285.0 3550.0 10170.0 ; - RECT 3805.0 10170.0 3740.0 10305.0 ; - RECT 3615.0 10170.0 3550.0 10305.0 ; - RECT 3615.0 10170.0 3550.0 10305.0 ; - RECT 3805.0 10170.0 3740.0 10305.0 ; - RECT 3805.0 9285.0 3740.0 9420.0 ; - RECT 3615.0 9285.0 3550.0 9420.0 ; - RECT 3615.0 9285.0 3550.0 9420.0 ; - RECT 3805.0 9285.0 3740.0 9420.0 ; - RECT 3445.0 10260.0 3380.0 10395.0 ; - RECT 3445.0 9285.0 3380.0 9420.0 ; - RECT 3747.5 9727.5 3682.5 9862.5 ; - RECT 3747.5 9727.5 3682.5 9862.5 ; - RECT 3582.5 9762.5 3517.5 9827.5 ; - RECT 3872.5 10480.0 3312.5 10545.0 ; - RECT 3872.5 9135.0 3312.5 9200.0 ; - RECT 3445.0 10697.5 3380.0 10512.5 ; - RECT 3445.0 11857.5 3380.0 11672.5 ; - RECT 3805.0 11740.0 3740.0 11890.0 ; - RECT 3805.0 10855.0 3740.0 10480.0 ; - RECT 3615.0 11740.0 3550.0 10855.0 ; - RECT 3805.0 10855.0 3740.0 10720.0 ; - RECT 3615.0 10855.0 3550.0 10720.0 ; - RECT 3615.0 10855.0 3550.0 10720.0 ; - RECT 3805.0 10855.0 3740.0 10720.0 ; - RECT 3805.0 11740.0 3740.0 11605.0 ; - RECT 3615.0 11740.0 3550.0 11605.0 ; - RECT 3615.0 11740.0 3550.0 11605.0 ; - RECT 3805.0 11740.0 3740.0 11605.0 ; - RECT 3445.0 10765.0 3380.0 10630.0 ; - RECT 3445.0 11740.0 3380.0 11605.0 ; - RECT 3747.5 11297.5 3682.5 11162.5 ; - RECT 3747.5 11297.5 3682.5 11162.5 ; - RECT 3582.5 11262.5 3517.5 11197.5 ; - RECT 3872.5 10545.0 3312.5 10480.0 ; - RECT 3872.5 11890.0 3312.5 11825.0 ; - RECT 3445.0 13017.5 3380.0 13202.5 ; - RECT 3445.0 11857.5 3380.0 12042.5 ; - RECT 3805.0 11975.0 3740.0 11825.0 ; - RECT 3805.0 12860.0 3740.0 13235.0 ; - RECT 3615.0 11975.0 3550.0 12860.0 ; - RECT 3805.0 12860.0 3740.0 12995.0 ; - RECT 3615.0 12860.0 3550.0 12995.0 ; - RECT 3615.0 12860.0 3550.0 12995.0 ; - RECT 3805.0 12860.0 3740.0 12995.0 ; - RECT 3805.0 11975.0 3740.0 12110.0 ; - RECT 3615.0 11975.0 3550.0 12110.0 ; - RECT 3615.0 11975.0 3550.0 12110.0 ; - RECT 3805.0 11975.0 3740.0 12110.0 ; - RECT 3445.0 12950.0 3380.0 13085.0 ; - RECT 3445.0 11975.0 3380.0 12110.0 ; - RECT 3747.5 12417.5 3682.5 12552.5 ; - RECT 3747.5 12417.5 3682.5 12552.5 ; - RECT 3582.5 12452.5 3517.5 12517.5 ; - RECT 3872.5 13170.0 3312.5 13235.0 ; - RECT 3872.5 11825.0 3312.5 11890.0 ; - RECT 3445.0 13387.5 3380.0 13202.5 ; - RECT 3445.0 14547.5 3380.0 14362.5 ; - RECT 3805.0 14430.0 3740.0 14580.0 ; - RECT 3805.0 13545.0 3740.0 13170.0 ; - RECT 3615.0 14430.0 3550.0 13545.0 ; - RECT 3805.0 13545.0 3740.0 13410.0 ; - RECT 3615.0 13545.0 3550.0 13410.0 ; - RECT 3615.0 13545.0 3550.0 13410.0 ; - RECT 3805.0 13545.0 3740.0 13410.0 ; - RECT 3805.0 14430.0 3740.0 14295.0 ; - RECT 3615.0 14430.0 3550.0 14295.0 ; - RECT 3615.0 14430.0 3550.0 14295.0 ; - RECT 3805.0 14430.0 3740.0 14295.0 ; - RECT 3445.0 13455.0 3380.0 13320.0 ; - RECT 3445.0 14430.0 3380.0 14295.0 ; - RECT 3747.5 13987.5 3682.5 13852.5 ; - RECT 3747.5 13987.5 3682.5 13852.5 ; - RECT 3582.5 13952.5 3517.5 13887.5 ; - RECT 3872.5 13235.0 3312.5 13170.0 ; - RECT 3872.5 14580.0 3312.5 14515.0 ; - RECT 4725.0 9330.0 4660.0 9135.0 ; - RECT 4725.0 10170.0 4660.0 10545.0 ; - RECT 4345.0 10170.0 4280.0 10545.0 ; - RECT 4175.0 10327.5 4110.0 10512.5 ; - RECT 4175.0 9167.5 4110.0 9352.5 ; - RECT 4725.0 10170.0 4660.0 10305.0 ; - RECT 4535.0 10170.0 4470.0 10305.0 ; - RECT 4535.0 10170.0 4470.0 10305.0 ; - RECT 4725.0 10170.0 4660.0 10305.0 ; - RECT 4535.0 10170.0 4470.0 10305.0 ; - RECT 4345.0 10170.0 4280.0 10305.0 ; - RECT 4345.0 10170.0 4280.0 10305.0 ; - RECT 4535.0 10170.0 4470.0 10305.0 ; - RECT 4725.0 9330.0 4660.0 9465.0 ; - RECT 4535.0 9330.0 4470.0 9465.0 ; - RECT 4535.0 9330.0 4470.0 9465.0 ; - RECT 4725.0 9330.0 4660.0 9465.0 ; - RECT 4535.0 9330.0 4470.0 9465.0 ; - RECT 4345.0 9330.0 4280.0 9465.0 ; - RECT 4345.0 9330.0 4280.0 9465.0 ; - RECT 4535.0 9330.0 4470.0 9465.0 ; - RECT 4175.0 10260.0 4110.0 10395.0 ; - RECT 4175.0 9285.0 4110.0 9420.0 ; - RECT 4340.0 9560.0 4475.0 9625.0 ; - RECT 4597.5 9775.0 4732.5 9840.0 ; - RECT 4535.0 10170.0 4470.0 10305.0 ; - RECT 4345.0 9330.0 4280.0 9465.0 ; - RECT 4245.0 9775.0 4380.0 9840.0 ; - RECT 4732.5 9775.0 4597.5 9840.0 ; - RECT 4475.0 9560.0 4340.0 9625.0 ; - RECT 4380.0 9775.0 4245.0 9840.0 ; - RECT 4792.5 10480.0 3872.5 10545.0 ; - RECT 4792.5 9135.0 3872.5 9200.0 ; - RECT 4725.0 11695.0 4660.0 11890.0 ; - RECT 4725.0 10855.0 4660.0 10480.0 ; - RECT 4345.0 10855.0 4280.0 10480.0 ; - RECT 4175.0 10697.5 4110.0 10512.5 ; - RECT 4175.0 11857.5 4110.0 11672.5 ; - RECT 4725.0 10855.0 4660.0 10720.0 ; - RECT 4535.0 10855.0 4470.0 10720.0 ; - RECT 4535.0 10855.0 4470.0 10720.0 ; - RECT 4725.0 10855.0 4660.0 10720.0 ; - RECT 4535.0 10855.0 4470.0 10720.0 ; - RECT 4345.0 10855.0 4280.0 10720.0 ; - RECT 4345.0 10855.0 4280.0 10720.0 ; - RECT 4535.0 10855.0 4470.0 10720.0 ; - RECT 4725.0 11695.0 4660.0 11560.0 ; - RECT 4535.0 11695.0 4470.0 11560.0 ; - RECT 4535.0 11695.0 4470.0 11560.0 ; - RECT 4725.0 11695.0 4660.0 11560.0 ; - RECT 4535.0 11695.0 4470.0 11560.0 ; - RECT 4345.0 11695.0 4280.0 11560.0 ; - RECT 4345.0 11695.0 4280.0 11560.0 ; - RECT 4535.0 11695.0 4470.0 11560.0 ; - RECT 4175.0 10765.0 4110.0 10630.0 ; - RECT 4175.0 11740.0 4110.0 11605.0 ; - RECT 4340.0 11465.0 4475.0 11400.0 ; - RECT 4597.5 11250.0 4732.5 11185.0 ; - RECT 4535.0 10855.0 4470.0 10720.0 ; - RECT 4345.0 11695.0 4280.0 11560.0 ; - RECT 4245.0 11250.0 4380.0 11185.0 ; - RECT 4732.5 11250.0 4597.5 11185.0 ; - RECT 4475.0 11465.0 4340.0 11400.0 ; - RECT 4380.0 11250.0 4245.0 11185.0 ; - RECT 4792.5 10545.0 3872.5 10480.0 ; - RECT 4792.5 11890.0 3872.5 11825.0 ; - RECT 4725.0 12020.0 4660.0 11825.0 ; - RECT 4725.0 12860.0 4660.0 13235.0 ; - RECT 4345.0 12860.0 4280.0 13235.0 ; - RECT 4175.0 13017.5 4110.0 13202.5 ; - RECT 4175.0 11857.5 4110.0 12042.5 ; - RECT 4725.0 12860.0 4660.0 12995.0 ; - RECT 4535.0 12860.0 4470.0 12995.0 ; - RECT 4535.0 12860.0 4470.0 12995.0 ; - RECT 4725.0 12860.0 4660.0 12995.0 ; - RECT 4535.0 12860.0 4470.0 12995.0 ; - RECT 4345.0 12860.0 4280.0 12995.0 ; - RECT 4345.0 12860.0 4280.0 12995.0 ; - RECT 4535.0 12860.0 4470.0 12995.0 ; - RECT 4725.0 12020.0 4660.0 12155.0 ; - RECT 4535.0 12020.0 4470.0 12155.0 ; - RECT 4535.0 12020.0 4470.0 12155.0 ; - RECT 4725.0 12020.0 4660.0 12155.0 ; - RECT 4535.0 12020.0 4470.0 12155.0 ; - RECT 4345.0 12020.0 4280.0 12155.0 ; - RECT 4345.0 12020.0 4280.0 12155.0 ; - RECT 4535.0 12020.0 4470.0 12155.0 ; - RECT 4175.0 12950.0 4110.0 13085.0 ; - RECT 4175.0 11975.0 4110.0 12110.0 ; - RECT 4340.0 12250.0 4475.0 12315.0 ; - RECT 4597.5 12465.0 4732.5 12530.0 ; - RECT 4535.0 12860.0 4470.0 12995.0 ; - RECT 4345.0 12020.0 4280.0 12155.0 ; - RECT 4245.0 12465.0 4380.0 12530.0 ; - RECT 4732.5 12465.0 4597.5 12530.0 ; - RECT 4475.0 12250.0 4340.0 12315.0 ; - RECT 4380.0 12465.0 4245.0 12530.0 ; - RECT 4792.5 13170.0 3872.5 13235.0 ; - RECT 4792.5 11825.0 3872.5 11890.0 ; - RECT 4725.0 14385.0 4660.0 14580.0 ; - RECT 4725.0 13545.0 4660.0 13170.0 ; - RECT 4345.0 13545.0 4280.0 13170.0 ; - RECT 4175.0 13387.5 4110.0 13202.5 ; - RECT 4175.0 14547.5 4110.0 14362.5 ; - RECT 4725.0 13545.0 4660.0 13410.0 ; - RECT 4535.0 13545.0 4470.0 13410.0 ; - RECT 4535.0 13545.0 4470.0 13410.0 ; - RECT 4725.0 13545.0 4660.0 13410.0 ; - RECT 4535.0 13545.0 4470.0 13410.0 ; - RECT 4345.0 13545.0 4280.0 13410.0 ; - RECT 4345.0 13545.0 4280.0 13410.0 ; - RECT 4535.0 13545.0 4470.0 13410.0 ; - RECT 4725.0 14385.0 4660.0 14250.0 ; - RECT 4535.0 14385.0 4470.0 14250.0 ; - RECT 4535.0 14385.0 4470.0 14250.0 ; - RECT 4725.0 14385.0 4660.0 14250.0 ; - RECT 4535.0 14385.0 4470.0 14250.0 ; - RECT 4345.0 14385.0 4280.0 14250.0 ; - RECT 4345.0 14385.0 4280.0 14250.0 ; - RECT 4535.0 14385.0 4470.0 14250.0 ; - RECT 4175.0 13455.0 4110.0 13320.0 ; - RECT 4175.0 14430.0 4110.0 14295.0 ; - RECT 4340.0 14155.0 4475.0 14090.0 ; - RECT 4597.5 13940.0 4732.5 13875.0 ; - RECT 4535.0 13545.0 4470.0 13410.0 ; - RECT 4345.0 14385.0 4280.0 14250.0 ; - RECT 4245.0 13940.0 4380.0 13875.0 ; - RECT 4732.5 13940.0 4597.5 13875.0 ; - RECT 4475.0 14155.0 4340.0 14090.0 ; - RECT 4380.0 13940.0 4245.0 13875.0 ; - RECT 4792.5 13235.0 3872.5 13170.0 ; - RECT 4792.5 14580.0 3872.5 14515.0 ; - RECT 5790.0 10285.0 5925.0 10350.0 ; - RECT 7175.0 9762.5 7310.0 9827.5 ; - RECT 5515.0 11630.0 5650.0 11695.0 ; - RECT 6900.0 11197.5 7035.0 11262.5 ; - RECT 7175.0 11960.0 7310.0 12025.0 ; - RECT 5240.0 11960.0 5375.0 12025.0 ; - RECT 6900.0 13305.0 7035.0 13370.0 ; - RECT 4965.0 13305.0 5100.0 13370.0 ; - RECT 5790.0 9775.0 5925.0 9840.0 ; - RECT 5515.0 9560.0 5650.0 9625.0 ; - RECT 5240.0 11185.0 5375.0 11250.0 ; - RECT 5515.0 11400.0 5650.0 11465.0 ; - RECT 5790.0 12465.0 5925.0 12530.0 ; - RECT 4965.0 12250.0 5100.0 12315.0 ; - RECT 5240.0 13875.0 5375.0 13940.0 ; - RECT 4965.0 14090.0 5100.0 14155.0 ; - RECT 3517.5 9762.5 3312.5 9827.5 ; - RECT 3517.5 11197.5 3312.5 11262.5 ; - RECT 3517.5 12452.5 3312.5 12517.5 ; - RECT 3517.5 13887.5 3312.5 13952.5 ; - RECT 7277.5 10480.0 3312.5 10545.0 ; - RECT 7277.5 13170.0 3312.5 13235.0 ; - RECT 7277.5 9135.0 3312.5 9200.0 ; - RECT 7277.5 11825.0 3312.5 11890.0 ; - RECT 7277.5 14515.0 3312.5 14580.0 ; - RECT 6135.0 15142.5 6070.0 15207.5 ; - RECT 6135.0 15665.0 6070.0 15730.0 ; - RECT 6372.5 15142.5 6102.5 15207.5 ; - RECT 6135.0 15175.0 6070.0 15697.5 ; - RECT 6102.5 15665.0 5857.5 15730.0 ; - RECT 7242.5 15142.5 6602.5 15207.5 ; - RECT 6135.0 16577.5 6070.0 16642.5 ; - RECT 6135.0 17010.0 6070.0 17075.0 ; - RECT 6372.5 16577.5 6102.5 16642.5 ; - RECT 6135.0 16610.0 6070.0 17042.5 ; - RECT 6102.5 17010.0 5582.5 17075.0 ; - RECT 6967.5 16577.5 6602.5 16642.5 ; - RECT 7242.5 17340.0 5307.5 17405.0 ; - RECT 6967.5 18685.0 5032.5 18750.0 ; - RECT 5857.5 15155.0 4732.5 15220.0 ; - RECT 5582.5 14940.0 4475.0 15005.0 ; - RECT 5307.5 16565.0 4732.5 16630.0 ; - RECT 5582.5 16780.0 4475.0 16845.0 ; - RECT 5857.5 17845.0 4732.5 17910.0 ; - RECT 5032.5 17630.0 4475.0 17695.0 ; - RECT 5307.5 19255.0 4732.5 19320.0 ; - RECT 5032.5 19470.0 4475.0 19535.0 ; - RECT 4027.5 15155.0 3962.5 15220.0 ; - RECT 4027.5 15142.5 3962.5 15207.5 ; - RECT 4245.0 15155.0 3995.0 15220.0 ; - RECT 4027.5 15175.0 3962.5 15187.5 ; - RECT 3995.0 15142.5 3747.5 15207.5 ; - RECT 4027.5 16565.0 3962.5 16630.0 ; - RECT 4027.5 16577.5 3962.5 16642.5 ; - RECT 4245.0 16565.0 3995.0 16630.0 ; - RECT 4027.5 16597.5 3962.5 16610.0 ; - RECT 3995.0 16577.5 3747.5 16642.5 ; - RECT 4027.5 17845.0 3962.5 17910.0 ; - RECT 4027.5 17832.5 3962.5 17897.5 ; - RECT 4245.0 17845.0 3995.0 17910.0 ; - RECT 4027.5 17865.0 3962.5 17877.5 ; - RECT 3995.0 17832.5 3747.5 17897.5 ; - RECT 4027.5 19255.0 3962.5 19320.0 ; - RECT 4027.5 19267.5 3962.5 19332.5 ; - RECT 4245.0 19255.0 3995.0 19320.0 ; - RECT 4027.5 19287.5 3962.5 19300.0 ; - RECT 3995.0 19267.5 3747.5 19332.5 ; - RECT 6300.0 15707.5 6235.0 15892.5 ; - RECT 6300.0 14547.5 6235.0 14732.5 ; - RECT 6660.0 14665.0 6595.0 14515.0 ; - RECT 6660.0 15550.0 6595.0 15925.0 ; - RECT 6470.0 14665.0 6405.0 15550.0 ; - RECT 6660.0 15550.0 6595.0 15685.0 ; - RECT 6470.0 15550.0 6405.0 15685.0 ; - RECT 6470.0 15550.0 6405.0 15685.0 ; - RECT 6660.0 15550.0 6595.0 15685.0 ; - RECT 6660.0 14665.0 6595.0 14800.0 ; - RECT 6470.0 14665.0 6405.0 14800.0 ; - RECT 6470.0 14665.0 6405.0 14800.0 ; - RECT 6660.0 14665.0 6595.0 14800.0 ; - RECT 6300.0 15640.0 6235.0 15775.0 ; - RECT 6300.0 14665.0 6235.0 14800.0 ; - RECT 6602.5 15107.5 6537.5 15242.5 ; - RECT 6602.5 15107.5 6537.5 15242.5 ; - RECT 6437.5 15142.5 6372.5 15207.5 ; - RECT 6727.5 15860.0 6167.5 15925.0 ; - RECT 6727.5 14515.0 6167.5 14580.0 ; - RECT 6300.0 16077.5 6235.0 15892.5 ; - RECT 6300.0 17237.5 6235.0 17052.5 ; - RECT 6660.0 17120.0 6595.0 17270.0 ; - RECT 6660.0 16235.0 6595.0 15860.0 ; - RECT 6470.0 17120.0 6405.0 16235.0 ; - RECT 6660.0 16235.0 6595.0 16100.0 ; - RECT 6470.0 16235.0 6405.0 16100.0 ; - RECT 6470.0 16235.0 6405.0 16100.0 ; - RECT 6660.0 16235.0 6595.0 16100.0 ; - RECT 6660.0 17120.0 6595.0 16985.0 ; - RECT 6470.0 17120.0 6405.0 16985.0 ; - RECT 6470.0 17120.0 6405.0 16985.0 ; - RECT 6660.0 17120.0 6595.0 16985.0 ; - RECT 6300.0 16145.0 6235.0 16010.0 ; - RECT 6300.0 17120.0 6235.0 16985.0 ; - RECT 6602.5 16677.5 6537.5 16542.5 ; - RECT 6602.5 16677.5 6537.5 16542.5 ; - RECT 6437.5 16642.5 6372.5 16577.5 ; - RECT 6727.5 15925.0 6167.5 15860.0 ; - RECT 6727.5 17270.0 6167.5 17205.0 ; - RECT 3445.0 15707.5 3380.0 15892.5 ; - RECT 3445.0 14547.5 3380.0 14732.5 ; - RECT 3805.0 14665.0 3740.0 14515.0 ; - RECT 3805.0 15550.0 3740.0 15925.0 ; - RECT 3615.0 14665.0 3550.0 15550.0 ; - RECT 3805.0 15550.0 3740.0 15685.0 ; - RECT 3615.0 15550.0 3550.0 15685.0 ; - RECT 3615.0 15550.0 3550.0 15685.0 ; - RECT 3805.0 15550.0 3740.0 15685.0 ; - RECT 3805.0 14665.0 3740.0 14800.0 ; - RECT 3615.0 14665.0 3550.0 14800.0 ; - RECT 3615.0 14665.0 3550.0 14800.0 ; - RECT 3805.0 14665.0 3740.0 14800.0 ; - RECT 3445.0 15640.0 3380.0 15775.0 ; - RECT 3445.0 14665.0 3380.0 14800.0 ; - RECT 3747.5 15107.5 3682.5 15242.5 ; - RECT 3747.5 15107.5 3682.5 15242.5 ; - RECT 3582.5 15142.5 3517.5 15207.5 ; - RECT 3872.5 15860.0 3312.5 15925.0 ; - RECT 3872.5 14515.0 3312.5 14580.0 ; - RECT 3445.0 16077.5 3380.0 15892.5 ; - RECT 3445.0 17237.5 3380.0 17052.5 ; - RECT 3805.0 17120.0 3740.0 17270.0 ; - RECT 3805.0 16235.0 3740.0 15860.0 ; - RECT 3615.0 17120.0 3550.0 16235.0 ; - RECT 3805.0 16235.0 3740.0 16100.0 ; - RECT 3615.0 16235.0 3550.0 16100.0 ; - RECT 3615.0 16235.0 3550.0 16100.0 ; - RECT 3805.0 16235.0 3740.0 16100.0 ; - RECT 3805.0 17120.0 3740.0 16985.0 ; - RECT 3615.0 17120.0 3550.0 16985.0 ; - RECT 3615.0 17120.0 3550.0 16985.0 ; - RECT 3805.0 17120.0 3740.0 16985.0 ; - RECT 3445.0 16145.0 3380.0 16010.0 ; - RECT 3445.0 17120.0 3380.0 16985.0 ; - RECT 3747.5 16677.5 3682.5 16542.5 ; - RECT 3747.5 16677.5 3682.5 16542.5 ; - RECT 3582.5 16642.5 3517.5 16577.5 ; - RECT 3872.5 15925.0 3312.5 15860.0 ; - RECT 3872.5 17270.0 3312.5 17205.0 ; - RECT 3445.0 18397.5 3380.0 18582.5 ; - RECT 3445.0 17237.5 3380.0 17422.5 ; - RECT 3805.0 17355.0 3740.0 17205.0 ; - RECT 3805.0 18240.0 3740.0 18615.0 ; - RECT 3615.0 17355.0 3550.0 18240.0 ; - RECT 3805.0 18240.0 3740.0 18375.0 ; - RECT 3615.0 18240.0 3550.0 18375.0 ; - RECT 3615.0 18240.0 3550.0 18375.0 ; - RECT 3805.0 18240.0 3740.0 18375.0 ; - RECT 3805.0 17355.0 3740.0 17490.0 ; - RECT 3615.0 17355.0 3550.0 17490.0 ; - RECT 3615.0 17355.0 3550.0 17490.0 ; - RECT 3805.0 17355.0 3740.0 17490.0 ; - RECT 3445.0 18330.0 3380.0 18465.0 ; - RECT 3445.0 17355.0 3380.0 17490.0 ; - RECT 3747.5 17797.5 3682.5 17932.5 ; - RECT 3747.5 17797.5 3682.5 17932.5 ; - RECT 3582.5 17832.5 3517.5 17897.5 ; - RECT 3872.5 18550.0 3312.5 18615.0 ; - RECT 3872.5 17205.0 3312.5 17270.0 ; - RECT 3445.0 18767.5 3380.0 18582.5 ; - RECT 3445.0 19927.5 3380.0 19742.5 ; - RECT 3805.0 19810.0 3740.0 19960.0 ; - RECT 3805.0 18925.0 3740.0 18550.0 ; - RECT 3615.0 19810.0 3550.0 18925.0 ; - RECT 3805.0 18925.0 3740.0 18790.0 ; - RECT 3615.0 18925.0 3550.0 18790.0 ; - RECT 3615.0 18925.0 3550.0 18790.0 ; - RECT 3805.0 18925.0 3740.0 18790.0 ; - RECT 3805.0 19810.0 3740.0 19675.0 ; - RECT 3615.0 19810.0 3550.0 19675.0 ; - RECT 3615.0 19810.0 3550.0 19675.0 ; - RECT 3805.0 19810.0 3740.0 19675.0 ; - RECT 3445.0 18835.0 3380.0 18700.0 ; - RECT 3445.0 19810.0 3380.0 19675.0 ; - RECT 3747.5 19367.5 3682.5 19232.5 ; - RECT 3747.5 19367.5 3682.5 19232.5 ; - RECT 3582.5 19332.5 3517.5 19267.5 ; - RECT 3872.5 18615.0 3312.5 18550.0 ; - RECT 3872.5 19960.0 3312.5 19895.0 ; - RECT 4725.0 14710.0 4660.0 14515.0 ; - RECT 4725.0 15550.0 4660.0 15925.0 ; - RECT 4345.0 15550.0 4280.0 15925.0 ; - RECT 4175.0 15707.5 4110.0 15892.5 ; - RECT 4175.0 14547.5 4110.0 14732.5 ; - RECT 4725.0 15550.0 4660.0 15685.0 ; - RECT 4535.0 15550.0 4470.0 15685.0 ; - RECT 4535.0 15550.0 4470.0 15685.0 ; - RECT 4725.0 15550.0 4660.0 15685.0 ; - RECT 4535.0 15550.0 4470.0 15685.0 ; - RECT 4345.0 15550.0 4280.0 15685.0 ; - RECT 4345.0 15550.0 4280.0 15685.0 ; - RECT 4535.0 15550.0 4470.0 15685.0 ; - RECT 4725.0 14710.0 4660.0 14845.0 ; - RECT 4535.0 14710.0 4470.0 14845.0 ; - RECT 4535.0 14710.0 4470.0 14845.0 ; - RECT 4725.0 14710.0 4660.0 14845.0 ; - RECT 4535.0 14710.0 4470.0 14845.0 ; - RECT 4345.0 14710.0 4280.0 14845.0 ; - RECT 4345.0 14710.0 4280.0 14845.0 ; - RECT 4535.0 14710.0 4470.0 14845.0 ; - RECT 4175.0 15640.0 4110.0 15775.0 ; - RECT 4175.0 14665.0 4110.0 14800.0 ; - RECT 4340.0 14940.0 4475.0 15005.0 ; - RECT 4597.5 15155.0 4732.5 15220.0 ; - RECT 4535.0 15550.0 4470.0 15685.0 ; - RECT 4345.0 14710.0 4280.0 14845.0 ; - RECT 4245.0 15155.0 4380.0 15220.0 ; - RECT 4732.5 15155.0 4597.5 15220.0 ; - RECT 4475.0 14940.0 4340.0 15005.0 ; - RECT 4380.0 15155.0 4245.0 15220.0 ; - RECT 4792.5 15860.0 3872.5 15925.0 ; - RECT 4792.5 14515.0 3872.5 14580.0 ; - RECT 4725.0 17075.0 4660.0 17270.0 ; - RECT 4725.0 16235.0 4660.0 15860.0 ; - RECT 4345.0 16235.0 4280.0 15860.0 ; - RECT 4175.0 16077.5 4110.0 15892.5 ; - RECT 4175.0 17237.5 4110.0 17052.5 ; - RECT 4725.0 16235.0 4660.0 16100.0 ; - RECT 4535.0 16235.0 4470.0 16100.0 ; - RECT 4535.0 16235.0 4470.0 16100.0 ; - RECT 4725.0 16235.0 4660.0 16100.0 ; - RECT 4535.0 16235.0 4470.0 16100.0 ; - RECT 4345.0 16235.0 4280.0 16100.0 ; - RECT 4345.0 16235.0 4280.0 16100.0 ; - RECT 4535.0 16235.0 4470.0 16100.0 ; - RECT 4725.0 17075.0 4660.0 16940.0 ; - RECT 4535.0 17075.0 4470.0 16940.0 ; - RECT 4535.0 17075.0 4470.0 16940.0 ; - RECT 4725.0 17075.0 4660.0 16940.0 ; - RECT 4535.0 17075.0 4470.0 16940.0 ; - RECT 4345.0 17075.0 4280.0 16940.0 ; - RECT 4345.0 17075.0 4280.0 16940.0 ; - RECT 4535.0 17075.0 4470.0 16940.0 ; - RECT 4175.0 16145.0 4110.0 16010.0 ; - RECT 4175.0 17120.0 4110.0 16985.0 ; - RECT 4340.0 16845.0 4475.0 16780.0 ; - RECT 4597.5 16630.0 4732.5 16565.0 ; - RECT 4535.0 16235.0 4470.0 16100.0 ; - RECT 4345.0 17075.0 4280.0 16940.0 ; - RECT 4245.0 16630.0 4380.0 16565.0 ; - RECT 4732.5 16630.0 4597.5 16565.0 ; - RECT 4475.0 16845.0 4340.0 16780.0 ; - RECT 4380.0 16630.0 4245.0 16565.0 ; - RECT 4792.5 15925.0 3872.5 15860.0 ; - RECT 4792.5 17270.0 3872.5 17205.0 ; - RECT 4725.0 17400.0 4660.0 17205.0 ; - RECT 4725.0 18240.0 4660.0 18615.0 ; - RECT 4345.0 18240.0 4280.0 18615.0 ; - RECT 4175.0 18397.5 4110.0 18582.5 ; - RECT 4175.0 17237.5 4110.0 17422.5 ; - RECT 4725.0 18240.0 4660.0 18375.0 ; - RECT 4535.0 18240.0 4470.0 18375.0 ; - RECT 4535.0 18240.0 4470.0 18375.0 ; - RECT 4725.0 18240.0 4660.0 18375.0 ; - RECT 4535.0 18240.0 4470.0 18375.0 ; - RECT 4345.0 18240.0 4280.0 18375.0 ; - RECT 4345.0 18240.0 4280.0 18375.0 ; - RECT 4535.0 18240.0 4470.0 18375.0 ; - RECT 4725.0 17400.0 4660.0 17535.0 ; - RECT 4535.0 17400.0 4470.0 17535.0 ; - RECT 4535.0 17400.0 4470.0 17535.0 ; - RECT 4725.0 17400.0 4660.0 17535.0 ; - RECT 4535.0 17400.0 4470.0 17535.0 ; - RECT 4345.0 17400.0 4280.0 17535.0 ; - RECT 4345.0 17400.0 4280.0 17535.0 ; - RECT 4535.0 17400.0 4470.0 17535.0 ; - RECT 4175.0 18330.0 4110.0 18465.0 ; - RECT 4175.0 17355.0 4110.0 17490.0 ; - RECT 4340.0 17630.0 4475.0 17695.0 ; - RECT 4597.5 17845.0 4732.5 17910.0 ; - RECT 4535.0 18240.0 4470.0 18375.0 ; - RECT 4345.0 17400.0 4280.0 17535.0 ; - RECT 4245.0 17845.0 4380.0 17910.0 ; - RECT 4732.5 17845.0 4597.5 17910.0 ; - RECT 4475.0 17630.0 4340.0 17695.0 ; - RECT 4380.0 17845.0 4245.0 17910.0 ; - RECT 4792.5 18550.0 3872.5 18615.0 ; - RECT 4792.5 17205.0 3872.5 17270.0 ; - RECT 4725.0 19765.0 4660.0 19960.0 ; - RECT 4725.0 18925.0 4660.0 18550.0 ; - RECT 4345.0 18925.0 4280.0 18550.0 ; - RECT 4175.0 18767.5 4110.0 18582.5 ; - RECT 4175.0 19927.5 4110.0 19742.5 ; - RECT 4725.0 18925.0 4660.0 18790.0 ; - RECT 4535.0 18925.0 4470.0 18790.0 ; - RECT 4535.0 18925.0 4470.0 18790.0 ; - RECT 4725.0 18925.0 4660.0 18790.0 ; - RECT 4535.0 18925.0 4470.0 18790.0 ; - RECT 4345.0 18925.0 4280.0 18790.0 ; - RECT 4345.0 18925.0 4280.0 18790.0 ; - RECT 4535.0 18925.0 4470.0 18790.0 ; - RECT 4725.0 19765.0 4660.0 19630.0 ; - RECT 4535.0 19765.0 4470.0 19630.0 ; - RECT 4535.0 19765.0 4470.0 19630.0 ; - RECT 4725.0 19765.0 4660.0 19630.0 ; - RECT 4535.0 19765.0 4470.0 19630.0 ; - RECT 4345.0 19765.0 4280.0 19630.0 ; - RECT 4345.0 19765.0 4280.0 19630.0 ; - RECT 4535.0 19765.0 4470.0 19630.0 ; - RECT 4175.0 18835.0 4110.0 18700.0 ; - RECT 4175.0 19810.0 4110.0 19675.0 ; - RECT 4340.0 19535.0 4475.0 19470.0 ; - RECT 4597.5 19320.0 4732.5 19255.0 ; - RECT 4535.0 18925.0 4470.0 18790.0 ; - RECT 4345.0 19765.0 4280.0 19630.0 ; - RECT 4245.0 19320.0 4380.0 19255.0 ; - RECT 4732.5 19320.0 4597.5 19255.0 ; - RECT 4475.0 19535.0 4340.0 19470.0 ; - RECT 4380.0 19320.0 4245.0 19255.0 ; - RECT 4792.5 18615.0 3872.5 18550.0 ; - RECT 4792.5 19960.0 3872.5 19895.0 ; - RECT 5790.0 15665.0 5925.0 15730.0 ; - RECT 7175.0 15142.5 7310.0 15207.5 ; - RECT 5515.0 17010.0 5650.0 17075.0 ; - RECT 6900.0 16577.5 7035.0 16642.5 ; - RECT 7175.0 17340.0 7310.0 17405.0 ; - RECT 5240.0 17340.0 5375.0 17405.0 ; - RECT 6900.0 18685.0 7035.0 18750.0 ; - RECT 4965.0 18685.0 5100.0 18750.0 ; - RECT 5790.0 15155.0 5925.0 15220.0 ; - RECT 5515.0 14940.0 5650.0 15005.0 ; - RECT 5240.0 16565.0 5375.0 16630.0 ; - RECT 5515.0 16780.0 5650.0 16845.0 ; - RECT 5790.0 17845.0 5925.0 17910.0 ; - RECT 4965.0 17630.0 5100.0 17695.0 ; - RECT 5240.0 19255.0 5375.0 19320.0 ; - RECT 4965.0 19470.0 5100.0 19535.0 ; - RECT 3517.5 15142.5 3312.5 15207.5 ; - RECT 3517.5 16577.5 3312.5 16642.5 ; - RECT 3517.5 17832.5 3312.5 17897.5 ; - RECT 3517.5 19267.5 3312.5 19332.5 ; - RECT 7277.5 15860.0 3312.5 15925.0 ; - RECT 7277.5 18550.0 3312.5 18615.0 ; - RECT 7277.5 14515.0 3312.5 14580.0 ; - RECT 7277.5 17205.0 3312.5 17270.0 ; - RECT 7277.5 19895.0 3312.5 19960.0 ; - RECT 3380.0 20090.0 3445.0 19895.0 ; - RECT 3380.0 20930.0 3445.0 21305.0 ; - RECT 3760.0 20930.0 3825.0 21305.0 ; - RECT 3930.0 21087.5 3995.0 21272.5 ; - RECT 3930.0 19927.5 3995.0 20112.5 ; - RECT 3380.0 20930.0 3445.0 21065.0 ; - RECT 3570.0 20930.0 3635.0 21065.0 ; - RECT 3570.0 20930.0 3635.0 21065.0 ; - RECT 3380.0 20930.0 3445.0 21065.0 ; - RECT 3570.0 20930.0 3635.0 21065.0 ; - RECT 3760.0 20930.0 3825.0 21065.0 ; - RECT 3760.0 20930.0 3825.0 21065.0 ; - RECT 3570.0 20930.0 3635.0 21065.0 ; - RECT 3380.0 20090.0 3445.0 20225.0 ; - RECT 3570.0 20090.0 3635.0 20225.0 ; - RECT 3570.0 20090.0 3635.0 20225.0 ; - RECT 3380.0 20090.0 3445.0 20225.0 ; - RECT 3570.0 20090.0 3635.0 20225.0 ; - RECT 3760.0 20090.0 3825.0 20225.0 ; - RECT 3760.0 20090.0 3825.0 20225.0 ; - RECT 3570.0 20090.0 3635.0 20225.0 ; - RECT 3930.0 21020.0 3995.0 21155.0 ; - RECT 3930.0 20045.0 3995.0 20180.0 ; - RECT 3765.0 20320.0 3630.0 20385.0 ; - RECT 3507.5 20535.0 3372.5 20600.0 ; - RECT 3570.0 20930.0 3635.0 21065.0 ; - RECT 3760.0 20090.0 3825.0 20225.0 ; - RECT 3860.0 20535.0 3725.0 20600.0 ; - RECT 3372.5 20535.0 3507.5 20600.0 ; - RECT 3630.0 20320.0 3765.0 20385.0 ; - RECT 3725.0 20535.0 3860.0 20600.0 ; - RECT 3312.5 21240.0 4232.5 21305.0 ; - RECT 3312.5 19895.0 4232.5 19960.0 ; - RECT 3380.0 22455.0 3445.0 22650.0 ; - RECT 3380.0 21615.0 3445.0 21240.0 ; - RECT 3760.0 21615.0 3825.0 21240.0 ; - RECT 3930.0 21457.5 3995.0 21272.5 ; - RECT 3930.0 22617.5 3995.0 22432.5 ; - RECT 3380.0 21615.0 3445.0 21480.0 ; - RECT 3570.0 21615.0 3635.0 21480.0 ; - RECT 3570.0 21615.0 3635.0 21480.0 ; - RECT 3380.0 21615.0 3445.0 21480.0 ; - RECT 3570.0 21615.0 3635.0 21480.0 ; - RECT 3760.0 21615.0 3825.0 21480.0 ; - RECT 3760.0 21615.0 3825.0 21480.0 ; - RECT 3570.0 21615.0 3635.0 21480.0 ; - RECT 3380.0 22455.0 3445.0 22320.0 ; - RECT 3570.0 22455.0 3635.0 22320.0 ; - RECT 3570.0 22455.0 3635.0 22320.0 ; - RECT 3380.0 22455.0 3445.0 22320.0 ; - RECT 3570.0 22455.0 3635.0 22320.0 ; - RECT 3760.0 22455.0 3825.0 22320.0 ; - RECT 3760.0 22455.0 3825.0 22320.0 ; - RECT 3570.0 22455.0 3635.0 22320.0 ; - RECT 3930.0 21525.0 3995.0 21390.0 ; - RECT 3930.0 22500.0 3995.0 22365.0 ; - RECT 3765.0 22225.0 3630.0 22160.0 ; - RECT 3507.5 22010.0 3372.5 21945.0 ; - RECT 3570.0 21615.0 3635.0 21480.0 ; - RECT 3760.0 22455.0 3825.0 22320.0 ; - RECT 3860.0 22010.0 3725.0 21945.0 ; - RECT 3372.5 22010.0 3507.5 21945.0 ; - RECT 3630.0 22225.0 3765.0 22160.0 ; - RECT 3725.0 22010.0 3860.0 21945.0 ; - RECT 3312.5 21305.0 4232.5 21240.0 ; - RECT 3312.5 22650.0 4232.5 22585.0 ; - RECT 3380.0 22780.0 3445.0 22585.0 ; - RECT 3380.0 23620.0 3445.0 23995.0 ; - RECT 3760.0 23620.0 3825.0 23995.0 ; - RECT 3930.0 23777.5 3995.0 23962.5 ; - RECT 3930.0 22617.5 3995.0 22802.5 ; - RECT 3380.0 23620.0 3445.0 23755.0 ; - RECT 3570.0 23620.0 3635.0 23755.0 ; - RECT 3570.0 23620.0 3635.0 23755.0 ; - RECT 3380.0 23620.0 3445.0 23755.0 ; - RECT 3570.0 23620.0 3635.0 23755.0 ; - RECT 3760.0 23620.0 3825.0 23755.0 ; - RECT 3760.0 23620.0 3825.0 23755.0 ; - RECT 3570.0 23620.0 3635.0 23755.0 ; - RECT 3380.0 22780.0 3445.0 22915.0 ; - RECT 3570.0 22780.0 3635.0 22915.0 ; - RECT 3570.0 22780.0 3635.0 22915.0 ; - RECT 3380.0 22780.0 3445.0 22915.0 ; - RECT 3570.0 22780.0 3635.0 22915.0 ; - RECT 3760.0 22780.0 3825.0 22915.0 ; - RECT 3760.0 22780.0 3825.0 22915.0 ; - RECT 3570.0 22780.0 3635.0 22915.0 ; - RECT 3930.0 23710.0 3995.0 23845.0 ; - RECT 3930.0 22735.0 3995.0 22870.0 ; - RECT 3765.0 23010.0 3630.0 23075.0 ; - RECT 3507.5 23225.0 3372.5 23290.0 ; - RECT 3570.0 23620.0 3635.0 23755.0 ; - RECT 3760.0 22780.0 3825.0 22915.0 ; - RECT 3860.0 23225.0 3725.0 23290.0 ; - RECT 3372.5 23225.0 3507.5 23290.0 ; - RECT 3630.0 23010.0 3765.0 23075.0 ; - RECT 3725.0 23225.0 3860.0 23290.0 ; - RECT 3312.5 23930.0 4232.5 23995.0 ; - RECT 3312.5 22585.0 4232.5 22650.0 ; - RECT 3380.0 25145.0 3445.0 25340.0 ; - RECT 3380.0 24305.0 3445.0 23930.0 ; - RECT 3760.0 24305.0 3825.0 23930.0 ; - RECT 3930.0 24147.5 3995.0 23962.5 ; - RECT 3930.0 25307.5 3995.0 25122.5 ; - RECT 3380.0 24305.0 3445.0 24170.0 ; - RECT 3570.0 24305.0 3635.0 24170.0 ; - RECT 3570.0 24305.0 3635.0 24170.0 ; - RECT 3380.0 24305.0 3445.0 24170.0 ; - RECT 3570.0 24305.0 3635.0 24170.0 ; - RECT 3760.0 24305.0 3825.0 24170.0 ; - RECT 3760.0 24305.0 3825.0 24170.0 ; - RECT 3570.0 24305.0 3635.0 24170.0 ; - RECT 3380.0 25145.0 3445.0 25010.0 ; - RECT 3570.0 25145.0 3635.0 25010.0 ; - RECT 3570.0 25145.0 3635.0 25010.0 ; - RECT 3380.0 25145.0 3445.0 25010.0 ; - RECT 3570.0 25145.0 3635.0 25010.0 ; - RECT 3760.0 25145.0 3825.0 25010.0 ; - RECT 3760.0 25145.0 3825.0 25010.0 ; - RECT 3570.0 25145.0 3635.0 25010.0 ; - RECT 3930.0 24215.0 3995.0 24080.0 ; - RECT 3930.0 25190.0 3995.0 25055.0 ; - RECT 3765.0 24915.0 3630.0 24850.0 ; - RECT 3507.5 24700.0 3372.5 24635.0 ; - RECT 3570.0 24305.0 3635.0 24170.0 ; - RECT 3760.0 25145.0 3825.0 25010.0 ; - RECT 3860.0 24700.0 3725.0 24635.0 ; - RECT 3372.5 24700.0 3507.5 24635.0 ; - RECT 3630.0 24915.0 3765.0 24850.0 ; - RECT 3725.0 24700.0 3860.0 24635.0 ; - RECT 3312.5 23995.0 4232.5 23930.0 ; - RECT 3312.5 25340.0 4232.5 25275.0 ; - RECT 3380.0 25470.0 3445.0 25275.0 ; - RECT 3380.0 26310.0 3445.0 26685.0 ; - RECT 3760.0 26310.0 3825.0 26685.0 ; - RECT 3930.0 26467.5 3995.0 26652.5 ; - RECT 3930.0 25307.5 3995.0 25492.5 ; - RECT 3380.0 26310.0 3445.0 26445.0 ; - RECT 3570.0 26310.0 3635.0 26445.0 ; - RECT 3570.0 26310.0 3635.0 26445.0 ; - RECT 3380.0 26310.0 3445.0 26445.0 ; - RECT 3570.0 26310.0 3635.0 26445.0 ; - RECT 3760.0 26310.0 3825.0 26445.0 ; - RECT 3760.0 26310.0 3825.0 26445.0 ; - RECT 3570.0 26310.0 3635.0 26445.0 ; - RECT 3380.0 25470.0 3445.0 25605.0 ; - RECT 3570.0 25470.0 3635.0 25605.0 ; - RECT 3570.0 25470.0 3635.0 25605.0 ; - RECT 3380.0 25470.0 3445.0 25605.0 ; - RECT 3570.0 25470.0 3635.0 25605.0 ; - RECT 3760.0 25470.0 3825.0 25605.0 ; - RECT 3760.0 25470.0 3825.0 25605.0 ; - RECT 3570.0 25470.0 3635.0 25605.0 ; - RECT 3930.0 26400.0 3995.0 26535.0 ; - RECT 3930.0 25425.0 3995.0 25560.0 ; - RECT 3765.0 25700.0 3630.0 25765.0 ; - RECT 3507.5 25915.0 3372.5 25980.0 ; - RECT 3570.0 26310.0 3635.0 26445.0 ; - RECT 3760.0 25470.0 3825.0 25605.0 ; - RECT 3860.0 25915.0 3725.0 25980.0 ; - RECT 3372.5 25915.0 3507.5 25980.0 ; - RECT 3630.0 25700.0 3765.0 25765.0 ; - RECT 3725.0 25915.0 3860.0 25980.0 ; - RECT 3312.5 26620.0 4232.5 26685.0 ; - RECT 3312.5 25275.0 4232.5 25340.0 ; - RECT 3380.0 27835.0 3445.0 28030.0 ; - RECT 3380.0 26995.0 3445.0 26620.0 ; - RECT 3760.0 26995.0 3825.0 26620.0 ; - RECT 3930.0 26837.5 3995.0 26652.5 ; - RECT 3930.0 27997.5 3995.0 27812.5 ; - RECT 3380.0 26995.0 3445.0 26860.0 ; - RECT 3570.0 26995.0 3635.0 26860.0 ; - RECT 3570.0 26995.0 3635.0 26860.0 ; - RECT 3380.0 26995.0 3445.0 26860.0 ; - RECT 3570.0 26995.0 3635.0 26860.0 ; - RECT 3760.0 26995.0 3825.0 26860.0 ; - RECT 3760.0 26995.0 3825.0 26860.0 ; - RECT 3570.0 26995.0 3635.0 26860.0 ; - RECT 3380.0 27835.0 3445.0 27700.0 ; - RECT 3570.0 27835.0 3635.0 27700.0 ; - RECT 3570.0 27835.0 3635.0 27700.0 ; - RECT 3380.0 27835.0 3445.0 27700.0 ; - RECT 3570.0 27835.0 3635.0 27700.0 ; - RECT 3760.0 27835.0 3825.0 27700.0 ; - RECT 3760.0 27835.0 3825.0 27700.0 ; - RECT 3570.0 27835.0 3635.0 27700.0 ; - RECT 3930.0 26905.0 3995.0 26770.0 ; - RECT 3930.0 27880.0 3995.0 27745.0 ; - RECT 3765.0 27605.0 3630.0 27540.0 ; - RECT 3507.5 27390.0 3372.5 27325.0 ; - RECT 3570.0 26995.0 3635.0 26860.0 ; - RECT 3760.0 27835.0 3825.0 27700.0 ; - RECT 3860.0 27390.0 3725.0 27325.0 ; - RECT 3372.5 27390.0 3507.5 27325.0 ; - RECT 3630.0 27605.0 3765.0 27540.0 ; - RECT 3725.0 27390.0 3860.0 27325.0 ; - RECT 3312.5 26685.0 4232.5 26620.0 ; - RECT 3312.5 28030.0 4232.5 27965.0 ; - RECT 3380.0 28160.0 3445.0 27965.0 ; - RECT 3380.0 29000.0 3445.0 29375.0 ; - RECT 3760.0 29000.0 3825.0 29375.0 ; - RECT 3930.0 29157.5 3995.0 29342.5 ; - RECT 3930.0 27997.5 3995.0 28182.5 ; - RECT 3380.0 29000.0 3445.0 29135.0 ; - RECT 3570.0 29000.0 3635.0 29135.0 ; - RECT 3570.0 29000.0 3635.0 29135.0 ; - RECT 3380.0 29000.0 3445.0 29135.0 ; - RECT 3570.0 29000.0 3635.0 29135.0 ; - RECT 3760.0 29000.0 3825.0 29135.0 ; - RECT 3760.0 29000.0 3825.0 29135.0 ; - RECT 3570.0 29000.0 3635.0 29135.0 ; - RECT 3380.0 28160.0 3445.0 28295.0 ; - RECT 3570.0 28160.0 3635.0 28295.0 ; - RECT 3570.0 28160.0 3635.0 28295.0 ; - RECT 3380.0 28160.0 3445.0 28295.0 ; - RECT 3570.0 28160.0 3635.0 28295.0 ; - RECT 3760.0 28160.0 3825.0 28295.0 ; - RECT 3760.0 28160.0 3825.0 28295.0 ; - RECT 3570.0 28160.0 3635.0 28295.0 ; - RECT 3930.0 29090.0 3995.0 29225.0 ; - RECT 3930.0 28115.0 3995.0 28250.0 ; - RECT 3765.0 28390.0 3630.0 28455.0 ; - RECT 3507.5 28605.0 3372.5 28670.0 ; - RECT 3570.0 29000.0 3635.0 29135.0 ; - RECT 3760.0 28160.0 3825.0 28295.0 ; - RECT 3860.0 28605.0 3725.0 28670.0 ; - RECT 3372.5 28605.0 3507.5 28670.0 ; - RECT 3630.0 28390.0 3765.0 28455.0 ; - RECT 3725.0 28605.0 3860.0 28670.0 ; - RECT 3312.5 29310.0 4232.5 29375.0 ; - RECT 3312.5 27965.0 4232.5 28030.0 ; - RECT 3380.0 30525.0 3445.0 30720.0 ; - RECT 3380.0 29685.0 3445.0 29310.0 ; - RECT 3760.0 29685.0 3825.0 29310.0 ; - RECT 3930.0 29527.5 3995.0 29342.5 ; - RECT 3930.0 30687.5 3995.0 30502.5 ; - RECT 3380.0 29685.0 3445.0 29550.0 ; - RECT 3570.0 29685.0 3635.0 29550.0 ; - RECT 3570.0 29685.0 3635.0 29550.0 ; - RECT 3380.0 29685.0 3445.0 29550.0 ; - RECT 3570.0 29685.0 3635.0 29550.0 ; - RECT 3760.0 29685.0 3825.0 29550.0 ; - RECT 3760.0 29685.0 3825.0 29550.0 ; - RECT 3570.0 29685.0 3635.0 29550.0 ; - RECT 3380.0 30525.0 3445.0 30390.0 ; - RECT 3570.0 30525.0 3635.0 30390.0 ; - RECT 3570.0 30525.0 3635.0 30390.0 ; - RECT 3380.0 30525.0 3445.0 30390.0 ; - RECT 3570.0 30525.0 3635.0 30390.0 ; - RECT 3760.0 30525.0 3825.0 30390.0 ; - RECT 3760.0 30525.0 3825.0 30390.0 ; - RECT 3570.0 30525.0 3635.0 30390.0 ; - RECT 3930.0 29595.0 3995.0 29460.0 ; - RECT 3930.0 30570.0 3995.0 30435.0 ; - RECT 3765.0 30295.0 3630.0 30230.0 ; - RECT 3507.5 30080.0 3372.5 30015.0 ; - RECT 3570.0 29685.0 3635.0 29550.0 ; - RECT 3760.0 30525.0 3825.0 30390.0 ; - RECT 3860.0 30080.0 3725.0 30015.0 ; - RECT 3372.5 30080.0 3507.5 30015.0 ; - RECT 3630.0 30295.0 3765.0 30230.0 ; - RECT 3725.0 30080.0 3860.0 30015.0 ; - RECT 3312.5 29375.0 4232.5 29310.0 ; - RECT 3312.5 30720.0 4232.5 30655.0 ; - RECT 3380.0 30850.0 3445.0 30655.0 ; - RECT 3380.0 31690.0 3445.0 32065.0 ; - RECT 3760.0 31690.0 3825.0 32065.0 ; - RECT 3930.0 31847.5 3995.0 32032.5 ; - RECT 3930.0 30687.5 3995.0 30872.5 ; - RECT 3380.0 31690.0 3445.0 31825.0 ; - RECT 3570.0 31690.0 3635.0 31825.0 ; - RECT 3570.0 31690.0 3635.0 31825.0 ; - RECT 3380.0 31690.0 3445.0 31825.0 ; - RECT 3570.0 31690.0 3635.0 31825.0 ; - RECT 3760.0 31690.0 3825.0 31825.0 ; - RECT 3760.0 31690.0 3825.0 31825.0 ; - RECT 3570.0 31690.0 3635.0 31825.0 ; - RECT 3380.0 30850.0 3445.0 30985.0 ; - RECT 3570.0 30850.0 3635.0 30985.0 ; - RECT 3570.0 30850.0 3635.0 30985.0 ; - RECT 3380.0 30850.0 3445.0 30985.0 ; - RECT 3570.0 30850.0 3635.0 30985.0 ; - RECT 3760.0 30850.0 3825.0 30985.0 ; - RECT 3760.0 30850.0 3825.0 30985.0 ; - RECT 3570.0 30850.0 3635.0 30985.0 ; - RECT 3930.0 31780.0 3995.0 31915.0 ; - RECT 3930.0 30805.0 3995.0 30940.0 ; - RECT 3765.0 31080.0 3630.0 31145.0 ; - RECT 3507.5 31295.0 3372.5 31360.0 ; - RECT 3570.0 31690.0 3635.0 31825.0 ; - RECT 3760.0 30850.0 3825.0 30985.0 ; - RECT 3860.0 31295.0 3725.0 31360.0 ; - RECT 3372.5 31295.0 3507.5 31360.0 ; - RECT 3630.0 31080.0 3765.0 31145.0 ; - RECT 3725.0 31295.0 3860.0 31360.0 ; - RECT 3312.5 32000.0 4232.5 32065.0 ; - RECT 3312.5 30655.0 4232.5 30720.0 ; - RECT 3380.0 33215.0 3445.0 33410.0 ; - RECT 3380.0 32375.0 3445.0 32000.0 ; - RECT 3760.0 32375.0 3825.0 32000.0 ; - RECT 3930.0 32217.5 3995.0 32032.5 ; - RECT 3930.0 33377.5 3995.0 33192.5 ; - RECT 3380.0 32375.0 3445.0 32240.0 ; - RECT 3570.0 32375.0 3635.0 32240.0 ; - RECT 3570.0 32375.0 3635.0 32240.0 ; - RECT 3380.0 32375.0 3445.0 32240.0 ; - RECT 3570.0 32375.0 3635.0 32240.0 ; - RECT 3760.0 32375.0 3825.0 32240.0 ; - RECT 3760.0 32375.0 3825.0 32240.0 ; - RECT 3570.0 32375.0 3635.0 32240.0 ; - RECT 3380.0 33215.0 3445.0 33080.0 ; - RECT 3570.0 33215.0 3635.0 33080.0 ; - RECT 3570.0 33215.0 3635.0 33080.0 ; - RECT 3380.0 33215.0 3445.0 33080.0 ; - RECT 3570.0 33215.0 3635.0 33080.0 ; - RECT 3760.0 33215.0 3825.0 33080.0 ; - RECT 3760.0 33215.0 3825.0 33080.0 ; - RECT 3570.0 33215.0 3635.0 33080.0 ; - RECT 3930.0 32285.0 3995.0 32150.0 ; - RECT 3930.0 33260.0 3995.0 33125.0 ; - RECT 3765.0 32985.0 3630.0 32920.0 ; - RECT 3507.5 32770.0 3372.5 32705.0 ; - RECT 3570.0 32375.0 3635.0 32240.0 ; - RECT 3760.0 33215.0 3825.0 33080.0 ; - RECT 3860.0 32770.0 3725.0 32705.0 ; - RECT 3372.5 32770.0 3507.5 32705.0 ; - RECT 3630.0 32985.0 3765.0 32920.0 ; - RECT 3725.0 32770.0 3860.0 32705.0 ; - RECT 3312.5 32065.0 4232.5 32000.0 ; - RECT 3312.5 33410.0 4232.5 33345.0 ; - RECT 3380.0 33540.0 3445.0 33345.0 ; - RECT 3380.0 34380.0 3445.0 34755.0 ; - RECT 3760.0 34380.0 3825.0 34755.0 ; - RECT 3930.0 34537.5 3995.0 34722.5 ; - RECT 3930.0 33377.5 3995.0 33562.5 ; - RECT 3380.0 34380.0 3445.0 34515.0 ; - RECT 3570.0 34380.0 3635.0 34515.0 ; - RECT 3570.0 34380.0 3635.0 34515.0 ; - RECT 3380.0 34380.0 3445.0 34515.0 ; - RECT 3570.0 34380.0 3635.0 34515.0 ; - RECT 3760.0 34380.0 3825.0 34515.0 ; - RECT 3760.0 34380.0 3825.0 34515.0 ; - RECT 3570.0 34380.0 3635.0 34515.0 ; - RECT 3380.0 33540.0 3445.0 33675.0 ; - RECT 3570.0 33540.0 3635.0 33675.0 ; - RECT 3570.0 33540.0 3635.0 33675.0 ; - RECT 3380.0 33540.0 3445.0 33675.0 ; - RECT 3570.0 33540.0 3635.0 33675.0 ; - RECT 3760.0 33540.0 3825.0 33675.0 ; - RECT 3760.0 33540.0 3825.0 33675.0 ; - RECT 3570.0 33540.0 3635.0 33675.0 ; - RECT 3930.0 34470.0 3995.0 34605.0 ; - RECT 3930.0 33495.0 3995.0 33630.0 ; - RECT 3765.0 33770.0 3630.0 33835.0 ; - RECT 3507.5 33985.0 3372.5 34050.0 ; - RECT 3570.0 34380.0 3635.0 34515.0 ; - RECT 3760.0 33540.0 3825.0 33675.0 ; - RECT 3860.0 33985.0 3725.0 34050.0 ; - RECT 3372.5 33985.0 3507.5 34050.0 ; - RECT 3630.0 33770.0 3765.0 33835.0 ; - RECT 3725.0 33985.0 3860.0 34050.0 ; - RECT 3312.5 34690.0 4232.5 34755.0 ; - RECT 3312.5 33345.0 4232.5 33410.0 ; - RECT 3380.0 35905.0 3445.0 36100.0 ; - RECT 3380.0 35065.0 3445.0 34690.0 ; - RECT 3760.0 35065.0 3825.0 34690.0 ; - RECT 3930.0 34907.5 3995.0 34722.5 ; - RECT 3930.0 36067.5 3995.0 35882.5 ; - RECT 3380.0 35065.0 3445.0 34930.0 ; - RECT 3570.0 35065.0 3635.0 34930.0 ; - RECT 3570.0 35065.0 3635.0 34930.0 ; - RECT 3380.0 35065.0 3445.0 34930.0 ; - RECT 3570.0 35065.0 3635.0 34930.0 ; - RECT 3760.0 35065.0 3825.0 34930.0 ; - RECT 3760.0 35065.0 3825.0 34930.0 ; - RECT 3570.0 35065.0 3635.0 34930.0 ; - RECT 3380.0 35905.0 3445.0 35770.0 ; - RECT 3570.0 35905.0 3635.0 35770.0 ; - RECT 3570.0 35905.0 3635.0 35770.0 ; - RECT 3380.0 35905.0 3445.0 35770.0 ; - RECT 3570.0 35905.0 3635.0 35770.0 ; - RECT 3760.0 35905.0 3825.0 35770.0 ; - RECT 3760.0 35905.0 3825.0 35770.0 ; - RECT 3570.0 35905.0 3635.0 35770.0 ; - RECT 3930.0 34975.0 3995.0 34840.0 ; - RECT 3930.0 35950.0 3995.0 35815.0 ; - RECT 3765.0 35675.0 3630.0 35610.0 ; - RECT 3507.5 35460.0 3372.5 35395.0 ; - RECT 3570.0 35065.0 3635.0 34930.0 ; - RECT 3760.0 35905.0 3825.0 35770.0 ; - RECT 3860.0 35460.0 3725.0 35395.0 ; - RECT 3372.5 35460.0 3507.5 35395.0 ; - RECT 3630.0 35675.0 3765.0 35610.0 ; - RECT 3725.0 35460.0 3860.0 35395.0 ; - RECT 3312.5 34755.0 4232.5 34690.0 ; - RECT 3312.5 36100.0 4232.5 36035.0 ; - RECT 3380.0 36230.0 3445.0 36035.0 ; - RECT 3380.0 37070.0 3445.0 37445.0 ; - RECT 3760.0 37070.0 3825.0 37445.0 ; - RECT 3930.0 37227.5 3995.0 37412.5 ; - RECT 3930.0 36067.5 3995.0 36252.5 ; - RECT 3380.0 37070.0 3445.0 37205.0 ; - RECT 3570.0 37070.0 3635.0 37205.0 ; - RECT 3570.0 37070.0 3635.0 37205.0 ; - RECT 3380.0 37070.0 3445.0 37205.0 ; - RECT 3570.0 37070.0 3635.0 37205.0 ; - RECT 3760.0 37070.0 3825.0 37205.0 ; - RECT 3760.0 37070.0 3825.0 37205.0 ; - RECT 3570.0 37070.0 3635.0 37205.0 ; - RECT 3380.0 36230.0 3445.0 36365.0 ; - RECT 3570.0 36230.0 3635.0 36365.0 ; - RECT 3570.0 36230.0 3635.0 36365.0 ; - RECT 3380.0 36230.0 3445.0 36365.0 ; - RECT 3570.0 36230.0 3635.0 36365.0 ; - RECT 3760.0 36230.0 3825.0 36365.0 ; - RECT 3760.0 36230.0 3825.0 36365.0 ; - RECT 3570.0 36230.0 3635.0 36365.0 ; - RECT 3930.0 37160.0 3995.0 37295.0 ; - RECT 3930.0 36185.0 3995.0 36320.0 ; - RECT 3765.0 36460.0 3630.0 36525.0 ; - RECT 3507.5 36675.0 3372.5 36740.0 ; - RECT 3570.0 37070.0 3635.0 37205.0 ; - RECT 3760.0 36230.0 3825.0 36365.0 ; - RECT 3860.0 36675.0 3725.0 36740.0 ; - RECT 3372.5 36675.0 3507.5 36740.0 ; - RECT 3630.0 36460.0 3765.0 36525.0 ; - RECT 3725.0 36675.0 3860.0 36740.0 ; - RECT 3312.5 37380.0 4232.5 37445.0 ; - RECT 3312.5 36035.0 4232.5 36100.0 ; - RECT 3380.0 38595.0 3445.0 38790.0 ; - RECT 3380.0 37755.0 3445.0 37380.0 ; - RECT 3760.0 37755.0 3825.0 37380.0 ; - RECT 3930.0 37597.5 3995.0 37412.5 ; - RECT 3930.0 38757.5 3995.0 38572.5 ; - RECT 3380.0 37755.0 3445.0 37620.0 ; - RECT 3570.0 37755.0 3635.0 37620.0 ; - RECT 3570.0 37755.0 3635.0 37620.0 ; - RECT 3380.0 37755.0 3445.0 37620.0 ; - RECT 3570.0 37755.0 3635.0 37620.0 ; - RECT 3760.0 37755.0 3825.0 37620.0 ; - RECT 3760.0 37755.0 3825.0 37620.0 ; - RECT 3570.0 37755.0 3635.0 37620.0 ; - RECT 3380.0 38595.0 3445.0 38460.0 ; - RECT 3570.0 38595.0 3635.0 38460.0 ; - RECT 3570.0 38595.0 3635.0 38460.0 ; - RECT 3380.0 38595.0 3445.0 38460.0 ; - RECT 3570.0 38595.0 3635.0 38460.0 ; - RECT 3760.0 38595.0 3825.0 38460.0 ; - RECT 3760.0 38595.0 3825.0 38460.0 ; - RECT 3570.0 38595.0 3635.0 38460.0 ; - RECT 3930.0 37665.0 3995.0 37530.0 ; - RECT 3930.0 38640.0 3995.0 38505.0 ; - RECT 3765.0 38365.0 3630.0 38300.0 ; - RECT 3507.5 38150.0 3372.5 38085.0 ; - RECT 3570.0 37755.0 3635.0 37620.0 ; - RECT 3760.0 38595.0 3825.0 38460.0 ; - RECT 3860.0 38150.0 3725.0 38085.0 ; - RECT 3372.5 38150.0 3507.5 38085.0 ; - RECT 3630.0 38365.0 3765.0 38300.0 ; - RECT 3725.0 38150.0 3860.0 38085.0 ; - RECT 3312.5 37445.0 4232.5 37380.0 ; - RECT 3312.5 38790.0 4232.5 38725.0 ; - RECT 3380.0 38920.0 3445.0 38725.0 ; - RECT 3380.0 39760.0 3445.0 40135.0 ; - RECT 3760.0 39760.0 3825.0 40135.0 ; - RECT 3930.0 39917.5 3995.0 40102.5 ; - RECT 3930.0 38757.5 3995.0 38942.5 ; - RECT 3380.0 39760.0 3445.0 39895.0 ; - RECT 3570.0 39760.0 3635.0 39895.0 ; - RECT 3570.0 39760.0 3635.0 39895.0 ; - RECT 3380.0 39760.0 3445.0 39895.0 ; - RECT 3570.0 39760.0 3635.0 39895.0 ; - RECT 3760.0 39760.0 3825.0 39895.0 ; - RECT 3760.0 39760.0 3825.0 39895.0 ; - RECT 3570.0 39760.0 3635.0 39895.0 ; - RECT 3380.0 38920.0 3445.0 39055.0 ; - RECT 3570.0 38920.0 3635.0 39055.0 ; - RECT 3570.0 38920.0 3635.0 39055.0 ; - RECT 3380.0 38920.0 3445.0 39055.0 ; - RECT 3570.0 38920.0 3635.0 39055.0 ; - RECT 3760.0 38920.0 3825.0 39055.0 ; - RECT 3760.0 38920.0 3825.0 39055.0 ; - RECT 3570.0 38920.0 3635.0 39055.0 ; - RECT 3930.0 39850.0 3995.0 39985.0 ; - RECT 3930.0 38875.0 3995.0 39010.0 ; - RECT 3765.0 39150.0 3630.0 39215.0 ; - RECT 3507.5 39365.0 3372.5 39430.0 ; - RECT 3570.0 39760.0 3635.0 39895.0 ; - RECT 3760.0 38920.0 3825.0 39055.0 ; - RECT 3860.0 39365.0 3725.0 39430.0 ; - RECT 3372.5 39365.0 3507.5 39430.0 ; - RECT 3630.0 39150.0 3765.0 39215.0 ; - RECT 3725.0 39365.0 3860.0 39430.0 ; - RECT 3312.5 40070.0 4232.5 40135.0 ; - RECT 3312.5 38725.0 4232.5 38790.0 ; - RECT 3380.0 41285.0 3445.0 41480.0 ; - RECT 3380.0 40445.0 3445.0 40070.0 ; - RECT 3760.0 40445.0 3825.0 40070.0 ; - RECT 3930.0 40287.5 3995.0 40102.5 ; - RECT 3930.0 41447.5 3995.0 41262.5 ; - RECT 3380.0 40445.0 3445.0 40310.0 ; - RECT 3570.0 40445.0 3635.0 40310.0 ; - RECT 3570.0 40445.0 3635.0 40310.0 ; - RECT 3380.0 40445.0 3445.0 40310.0 ; - RECT 3570.0 40445.0 3635.0 40310.0 ; - RECT 3760.0 40445.0 3825.0 40310.0 ; - RECT 3760.0 40445.0 3825.0 40310.0 ; - RECT 3570.0 40445.0 3635.0 40310.0 ; - RECT 3380.0 41285.0 3445.0 41150.0 ; - RECT 3570.0 41285.0 3635.0 41150.0 ; - RECT 3570.0 41285.0 3635.0 41150.0 ; - RECT 3380.0 41285.0 3445.0 41150.0 ; - RECT 3570.0 41285.0 3635.0 41150.0 ; - RECT 3760.0 41285.0 3825.0 41150.0 ; - RECT 3760.0 41285.0 3825.0 41150.0 ; - RECT 3570.0 41285.0 3635.0 41150.0 ; - RECT 3930.0 40355.0 3995.0 40220.0 ; - RECT 3930.0 41330.0 3995.0 41195.0 ; - RECT 3765.0 41055.0 3630.0 40990.0 ; - RECT 3507.5 40840.0 3372.5 40775.0 ; - RECT 3570.0 40445.0 3635.0 40310.0 ; - RECT 3760.0 41285.0 3825.0 41150.0 ; - RECT 3860.0 40840.0 3725.0 40775.0 ; - RECT 3372.5 40840.0 3507.5 40775.0 ; - RECT 3630.0 41055.0 3765.0 40990.0 ; - RECT 3725.0 40840.0 3860.0 40775.0 ; - RECT 3312.5 40135.0 4232.5 40070.0 ; - RECT 3312.5 41480.0 4232.5 41415.0 ; - RECT 4660.0 21087.5 4725.0 21272.5 ; - RECT 4660.0 19927.5 4725.0 20112.5 ; - RECT 4300.0 20045.0 4365.0 19895.0 ; - RECT 4300.0 20930.0 4365.0 21305.0 ; - RECT 4490.0 20045.0 4555.0 20930.0 ; - RECT 4300.0 20930.0 4365.0 21065.0 ; - RECT 4490.0 20930.0 4555.0 21065.0 ; - RECT 4490.0 20930.0 4555.0 21065.0 ; - RECT 4300.0 20930.0 4365.0 21065.0 ; - RECT 4300.0 20045.0 4365.0 20180.0 ; - RECT 4490.0 20045.0 4555.0 20180.0 ; - RECT 4490.0 20045.0 4555.0 20180.0 ; - RECT 4300.0 20045.0 4365.0 20180.0 ; - RECT 4660.0 21020.0 4725.0 21155.0 ; - RECT 4660.0 20045.0 4725.0 20180.0 ; - RECT 4357.5 20487.5 4422.5 20622.5 ; - RECT 4357.5 20487.5 4422.5 20622.5 ; - RECT 4522.5 20522.5 4587.5 20587.5 ; - RECT 4232.5 21240.0 4792.5 21305.0 ; - RECT 4232.5 19895.0 4792.5 19960.0 ; - RECT 4660.0 21457.5 4725.0 21272.5 ; - RECT 4660.0 22617.5 4725.0 22432.5 ; - RECT 4300.0 22500.0 4365.0 22650.0 ; - RECT 4300.0 21615.0 4365.0 21240.0 ; - RECT 4490.0 22500.0 4555.0 21615.0 ; - RECT 4300.0 21615.0 4365.0 21480.0 ; - RECT 4490.0 21615.0 4555.0 21480.0 ; - RECT 4490.0 21615.0 4555.0 21480.0 ; - RECT 4300.0 21615.0 4365.0 21480.0 ; - RECT 4300.0 22500.0 4365.0 22365.0 ; - RECT 4490.0 22500.0 4555.0 22365.0 ; - RECT 4490.0 22500.0 4555.0 22365.0 ; - RECT 4300.0 22500.0 4365.0 22365.0 ; - RECT 4660.0 21525.0 4725.0 21390.0 ; - RECT 4660.0 22500.0 4725.0 22365.0 ; - RECT 4357.5 22057.5 4422.5 21922.5 ; - RECT 4357.5 22057.5 4422.5 21922.5 ; - RECT 4522.5 22022.5 4587.5 21957.5 ; - RECT 4232.5 21305.0 4792.5 21240.0 ; - RECT 4232.5 22650.0 4792.5 22585.0 ; - RECT 4660.0 23777.5 4725.0 23962.5 ; - RECT 4660.0 22617.5 4725.0 22802.5 ; - RECT 4300.0 22735.0 4365.0 22585.0 ; - RECT 4300.0 23620.0 4365.0 23995.0 ; - RECT 4490.0 22735.0 4555.0 23620.0 ; - RECT 4300.0 23620.0 4365.0 23755.0 ; - RECT 4490.0 23620.0 4555.0 23755.0 ; - RECT 4490.0 23620.0 4555.0 23755.0 ; - RECT 4300.0 23620.0 4365.0 23755.0 ; - RECT 4300.0 22735.0 4365.0 22870.0 ; - RECT 4490.0 22735.0 4555.0 22870.0 ; - RECT 4490.0 22735.0 4555.0 22870.0 ; - RECT 4300.0 22735.0 4365.0 22870.0 ; - RECT 4660.0 23710.0 4725.0 23845.0 ; - RECT 4660.0 22735.0 4725.0 22870.0 ; - RECT 4357.5 23177.5 4422.5 23312.5 ; - RECT 4357.5 23177.5 4422.5 23312.5 ; - RECT 4522.5 23212.5 4587.5 23277.5 ; - RECT 4232.5 23930.0 4792.5 23995.0 ; - RECT 4232.5 22585.0 4792.5 22650.0 ; - RECT 4660.0 24147.5 4725.0 23962.5 ; - RECT 4660.0 25307.5 4725.0 25122.5 ; - RECT 4300.0 25190.0 4365.0 25340.0 ; - RECT 4300.0 24305.0 4365.0 23930.0 ; - RECT 4490.0 25190.0 4555.0 24305.0 ; - RECT 4300.0 24305.0 4365.0 24170.0 ; - RECT 4490.0 24305.0 4555.0 24170.0 ; - RECT 4490.0 24305.0 4555.0 24170.0 ; - RECT 4300.0 24305.0 4365.0 24170.0 ; - RECT 4300.0 25190.0 4365.0 25055.0 ; - RECT 4490.0 25190.0 4555.0 25055.0 ; - RECT 4490.0 25190.0 4555.0 25055.0 ; - RECT 4300.0 25190.0 4365.0 25055.0 ; - RECT 4660.0 24215.0 4725.0 24080.0 ; - RECT 4660.0 25190.0 4725.0 25055.0 ; - RECT 4357.5 24747.5 4422.5 24612.5 ; - RECT 4357.5 24747.5 4422.5 24612.5 ; - RECT 4522.5 24712.5 4587.5 24647.5 ; - RECT 4232.5 23995.0 4792.5 23930.0 ; - RECT 4232.5 25340.0 4792.5 25275.0 ; - RECT 4660.0 26467.5 4725.0 26652.5 ; - RECT 4660.0 25307.5 4725.0 25492.5 ; - RECT 4300.0 25425.0 4365.0 25275.0 ; - RECT 4300.0 26310.0 4365.0 26685.0 ; - RECT 4490.0 25425.0 4555.0 26310.0 ; - RECT 4300.0 26310.0 4365.0 26445.0 ; - RECT 4490.0 26310.0 4555.0 26445.0 ; - RECT 4490.0 26310.0 4555.0 26445.0 ; - RECT 4300.0 26310.0 4365.0 26445.0 ; - RECT 4300.0 25425.0 4365.0 25560.0 ; - RECT 4490.0 25425.0 4555.0 25560.0 ; - RECT 4490.0 25425.0 4555.0 25560.0 ; - RECT 4300.0 25425.0 4365.0 25560.0 ; - RECT 4660.0 26400.0 4725.0 26535.0 ; - RECT 4660.0 25425.0 4725.0 25560.0 ; - RECT 4357.5 25867.5 4422.5 26002.5 ; - RECT 4357.5 25867.5 4422.5 26002.5 ; - RECT 4522.5 25902.5 4587.5 25967.5 ; - RECT 4232.5 26620.0 4792.5 26685.0 ; - RECT 4232.5 25275.0 4792.5 25340.0 ; - RECT 4660.0 26837.5 4725.0 26652.5 ; - RECT 4660.0 27997.5 4725.0 27812.5 ; - RECT 4300.0 27880.0 4365.0 28030.0 ; - RECT 4300.0 26995.0 4365.0 26620.0 ; - RECT 4490.0 27880.0 4555.0 26995.0 ; - RECT 4300.0 26995.0 4365.0 26860.0 ; - RECT 4490.0 26995.0 4555.0 26860.0 ; - RECT 4490.0 26995.0 4555.0 26860.0 ; - RECT 4300.0 26995.0 4365.0 26860.0 ; - RECT 4300.0 27880.0 4365.0 27745.0 ; - RECT 4490.0 27880.0 4555.0 27745.0 ; - RECT 4490.0 27880.0 4555.0 27745.0 ; - RECT 4300.0 27880.0 4365.0 27745.0 ; - RECT 4660.0 26905.0 4725.0 26770.0 ; - RECT 4660.0 27880.0 4725.0 27745.0 ; - RECT 4357.5 27437.5 4422.5 27302.5 ; - RECT 4357.5 27437.5 4422.5 27302.5 ; - RECT 4522.5 27402.5 4587.5 27337.5 ; - RECT 4232.5 26685.0 4792.5 26620.0 ; - RECT 4232.5 28030.0 4792.5 27965.0 ; - RECT 4660.0 29157.5 4725.0 29342.5 ; - RECT 4660.0 27997.5 4725.0 28182.5 ; - RECT 4300.0 28115.0 4365.0 27965.0 ; - RECT 4300.0 29000.0 4365.0 29375.0 ; - RECT 4490.0 28115.0 4555.0 29000.0 ; - RECT 4300.0 29000.0 4365.0 29135.0 ; - RECT 4490.0 29000.0 4555.0 29135.0 ; - RECT 4490.0 29000.0 4555.0 29135.0 ; - RECT 4300.0 29000.0 4365.0 29135.0 ; - RECT 4300.0 28115.0 4365.0 28250.0 ; - RECT 4490.0 28115.0 4555.0 28250.0 ; - RECT 4490.0 28115.0 4555.0 28250.0 ; - RECT 4300.0 28115.0 4365.0 28250.0 ; - RECT 4660.0 29090.0 4725.0 29225.0 ; - RECT 4660.0 28115.0 4725.0 28250.0 ; - RECT 4357.5 28557.5 4422.5 28692.5 ; - RECT 4357.5 28557.5 4422.5 28692.5 ; - RECT 4522.5 28592.5 4587.5 28657.5 ; - RECT 4232.5 29310.0 4792.5 29375.0 ; - RECT 4232.5 27965.0 4792.5 28030.0 ; - RECT 4660.0 29527.5 4725.0 29342.5 ; - RECT 4660.0 30687.5 4725.0 30502.5 ; - RECT 4300.0 30570.0 4365.0 30720.0 ; - RECT 4300.0 29685.0 4365.0 29310.0 ; - RECT 4490.0 30570.0 4555.0 29685.0 ; - RECT 4300.0 29685.0 4365.0 29550.0 ; - RECT 4490.0 29685.0 4555.0 29550.0 ; - RECT 4490.0 29685.0 4555.0 29550.0 ; - RECT 4300.0 29685.0 4365.0 29550.0 ; - RECT 4300.0 30570.0 4365.0 30435.0 ; - RECT 4490.0 30570.0 4555.0 30435.0 ; - RECT 4490.0 30570.0 4555.0 30435.0 ; - RECT 4300.0 30570.0 4365.0 30435.0 ; - RECT 4660.0 29595.0 4725.0 29460.0 ; - RECT 4660.0 30570.0 4725.0 30435.0 ; - RECT 4357.5 30127.5 4422.5 29992.5 ; - RECT 4357.5 30127.5 4422.5 29992.5 ; - RECT 4522.5 30092.5 4587.5 30027.5 ; - RECT 4232.5 29375.0 4792.5 29310.0 ; - RECT 4232.5 30720.0 4792.5 30655.0 ; - RECT 4660.0 31847.5 4725.0 32032.5 ; - RECT 4660.0 30687.5 4725.0 30872.5 ; - RECT 4300.0 30805.0 4365.0 30655.0 ; - RECT 4300.0 31690.0 4365.0 32065.0 ; - RECT 4490.0 30805.0 4555.0 31690.0 ; - RECT 4300.0 31690.0 4365.0 31825.0 ; - RECT 4490.0 31690.0 4555.0 31825.0 ; - RECT 4490.0 31690.0 4555.0 31825.0 ; - RECT 4300.0 31690.0 4365.0 31825.0 ; - RECT 4300.0 30805.0 4365.0 30940.0 ; - RECT 4490.0 30805.0 4555.0 30940.0 ; - RECT 4490.0 30805.0 4555.0 30940.0 ; - RECT 4300.0 30805.0 4365.0 30940.0 ; - RECT 4660.0 31780.0 4725.0 31915.0 ; - RECT 4660.0 30805.0 4725.0 30940.0 ; - RECT 4357.5 31247.5 4422.5 31382.5 ; - RECT 4357.5 31247.5 4422.5 31382.5 ; - RECT 4522.5 31282.5 4587.5 31347.5 ; - RECT 4232.5 32000.0 4792.5 32065.0 ; - RECT 4232.5 30655.0 4792.5 30720.0 ; - RECT 4660.0 32217.5 4725.0 32032.5 ; - RECT 4660.0 33377.5 4725.0 33192.5 ; - RECT 4300.0 33260.0 4365.0 33410.0 ; - RECT 4300.0 32375.0 4365.0 32000.0 ; - RECT 4490.0 33260.0 4555.0 32375.0 ; - RECT 4300.0 32375.0 4365.0 32240.0 ; - RECT 4490.0 32375.0 4555.0 32240.0 ; - RECT 4490.0 32375.0 4555.0 32240.0 ; - RECT 4300.0 32375.0 4365.0 32240.0 ; - RECT 4300.0 33260.0 4365.0 33125.0 ; - RECT 4490.0 33260.0 4555.0 33125.0 ; - RECT 4490.0 33260.0 4555.0 33125.0 ; - RECT 4300.0 33260.0 4365.0 33125.0 ; - RECT 4660.0 32285.0 4725.0 32150.0 ; - RECT 4660.0 33260.0 4725.0 33125.0 ; - RECT 4357.5 32817.5 4422.5 32682.5 ; - RECT 4357.5 32817.5 4422.5 32682.5 ; - RECT 4522.5 32782.5 4587.5 32717.5 ; - RECT 4232.5 32065.0 4792.5 32000.0 ; - RECT 4232.5 33410.0 4792.5 33345.0 ; - RECT 4660.0 34537.5 4725.0 34722.5 ; - RECT 4660.0 33377.5 4725.0 33562.5 ; - RECT 4300.0 33495.0 4365.0 33345.0 ; - RECT 4300.0 34380.0 4365.0 34755.0 ; - RECT 4490.0 33495.0 4555.0 34380.0 ; - RECT 4300.0 34380.0 4365.0 34515.0 ; - RECT 4490.0 34380.0 4555.0 34515.0 ; - RECT 4490.0 34380.0 4555.0 34515.0 ; - RECT 4300.0 34380.0 4365.0 34515.0 ; - RECT 4300.0 33495.0 4365.0 33630.0 ; - RECT 4490.0 33495.0 4555.0 33630.0 ; - RECT 4490.0 33495.0 4555.0 33630.0 ; - RECT 4300.0 33495.0 4365.0 33630.0 ; - RECT 4660.0 34470.0 4725.0 34605.0 ; - RECT 4660.0 33495.0 4725.0 33630.0 ; - RECT 4357.5 33937.5 4422.5 34072.5 ; - RECT 4357.5 33937.5 4422.5 34072.5 ; - RECT 4522.5 33972.5 4587.5 34037.5 ; - RECT 4232.5 34690.0 4792.5 34755.0 ; - RECT 4232.5 33345.0 4792.5 33410.0 ; - RECT 4660.0 34907.5 4725.0 34722.5 ; - RECT 4660.0 36067.5 4725.0 35882.5 ; - RECT 4300.0 35950.0 4365.0 36100.0 ; - RECT 4300.0 35065.0 4365.0 34690.0 ; - RECT 4490.0 35950.0 4555.0 35065.0 ; - RECT 4300.0 35065.0 4365.0 34930.0 ; - RECT 4490.0 35065.0 4555.0 34930.0 ; - RECT 4490.0 35065.0 4555.0 34930.0 ; - RECT 4300.0 35065.0 4365.0 34930.0 ; - RECT 4300.0 35950.0 4365.0 35815.0 ; - RECT 4490.0 35950.0 4555.0 35815.0 ; - RECT 4490.0 35950.0 4555.0 35815.0 ; - RECT 4300.0 35950.0 4365.0 35815.0 ; - RECT 4660.0 34975.0 4725.0 34840.0 ; - RECT 4660.0 35950.0 4725.0 35815.0 ; - RECT 4357.5 35507.5 4422.5 35372.5 ; - RECT 4357.5 35507.5 4422.5 35372.5 ; - RECT 4522.5 35472.5 4587.5 35407.5 ; - RECT 4232.5 34755.0 4792.5 34690.0 ; - RECT 4232.5 36100.0 4792.5 36035.0 ; - RECT 4660.0 37227.5 4725.0 37412.5 ; - RECT 4660.0 36067.5 4725.0 36252.5 ; - RECT 4300.0 36185.0 4365.0 36035.0 ; - RECT 4300.0 37070.0 4365.0 37445.0 ; - RECT 4490.0 36185.0 4555.0 37070.0 ; - RECT 4300.0 37070.0 4365.0 37205.0 ; - RECT 4490.0 37070.0 4555.0 37205.0 ; - RECT 4490.0 37070.0 4555.0 37205.0 ; - RECT 4300.0 37070.0 4365.0 37205.0 ; - RECT 4300.0 36185.0 4365.0 36320.0 ; - RECT 4490.0 36185.0 4555.0 36320.0 ; - RECT 4490.0 36185.0 4555.0 36320.0 ; - RECT 4300.0 36185.0 4365.0 36320.0 ; - RECT 4660.0 37160.0 4725.0 37295.0 ; - RECT 4660.0 36185.0 4725.0 36320.0 ; - RECT 4357.5 36627.5 4422.5 36762.5 ; - RECT 4357.5 36627.5 4422.5 36762.5 ; - RECT 4522.5 36662.5 4587.5 36727.5 ; - RECT 4232.5 37380.0 4792.5 37445.0 ; - RECT 4232.5 36035.0 4792.5 36100.0 ; - RECT 4660.0 37597.5 4725.0 37412.5 ; - RECT 4660.0 38757.5 4725.0 38572.5 ; - RECT 4300.0 38640.0 4365.0 38790.0 ; - RECT 4300.0 37755.0 4365.0 37380.0 ; - RECT 4490.0 38640.0 4555.0 37755.0 ; - RECT 4300.0 37755.0 4365.0 37620.0 ; - RECT 4490.0 37755.0 4555.0 37620.0 ; - RECT 4490.0 37755.0 4555.0 37620.0 ; - RECT 4300.0 37755.0 4365.0 37620.0 ; - RECT 4300.0 38640.0 4365.0 38505.0 ; - RECT 4490.0 38640.0 4555.0 38505.0 ; - RECT 4490.0 38640.0 4555.0 38505.0 ; - RECT 4300.0 38640.0 4365.0 38505.0 ; - RECT 4660.0 37665.0 4725.0 37530.0 ; - RECT 4660.0 38640.0 4725.0 38505.0 ; - RECT 4357.5 38197.5 4422.5 38062.5 ; - RECT 4357.5 38197.5 4422.5 38062.5 ; - RECT 4522.5 38162.5 4587.5 38097.5 ; - RECT 4232.5 37445.0 4792.5 37380.0 ; - RECT 4232.5 38790.0 4792.5 38725.0 ; - RECT 4660.0 39917.5 4725.0 40102.5 ; - RECT 4660.0 38757.5 4725.0 38942.5 ; - RECT 4300.0 38875.0 4365.0 38725.0 ; - RECT 4300.0 39760.0 4365.0 40135.0 ; - RECT 4490.0 38875.0 4555.0 39760.0 ; - RECT 4300.0 39760.0 4365.0 39895.0 ; - RECT 4490.0 39760.0 4555.0 39895.0 ; - RECT 4490.0 39760.0 4555.0 39895.0 ; - RECT 4300.0 39760.0 4365.0 39895.0 ; - RECT 4300.0 38875.0 4365.0 39010.0 ; - RECT 4490.0 38875.0 4555.0 39010.0 ; - RECT 4490.0 38875.0 4555.0 39010.0 ; - RECT 4300.0 38875.0 4365.0 39010.0 ; - RECT 4660.0 39850.0 4725.0 39985.0 ; - RECT 4660.0 38875.0 4725.0 39010.0 ; - RECT 4357.5 39317.5 4422.5 39452.5 ; - RECT 4357.5 39317.5 4422.5 39452.5 ; - RECT 4522.5 39352.5 4587.5 39417.5 ; - RECT 4232.5 40070.0 4792.5 40135.0 ; - RECT 4232.5 38725.0 4792.5 38790.0 ; - RECT 4660.0 40287.5 4725.0 40102.5 ; - RECT 4660.0 41447.5 4725.0 41262.5 ; - RECT 4300.0 41330.0 4365.0 41480.0 ; - RECT 4300.0 40445.0 4365.0 40070.0 ; - RECT 4490.0 41330.0 4555.0 40445.0 ; - RECT 4300.0 40445.0 4365.0 40310.0 ; - RECT 4490.0 40445.0 4555.0 40310.0 ; - RECT 4490.0 40445.0 4555.0 40310.0 ; - RECT 4300.0 40445.0 4365.0 40310.0 ; - RECT 4300.0 41330.0 4365.0 41195.0 ; - RECT 4490.0 41330.0 4555.0 41195.0 ; - RECT 4490.0 41330.0 4555.0 41195.0 ; - RECT 4300.0 41330.0 4365.0 41195.0 ; - RECT 4660.0 40355.0 4725.0 40220.0 ; - RECT 4660.0 41330.0 4725.0 41195.0 ; - RECT 4357.5 40887.5 4422.5 40752.5 ; - RECT 4357.5 40887.5 4422.5 40752.5 ; - RECT 4522.5 40852.5 4587.5 40787.5 ; - RECT 4232.5 40135.0 4792.5 40070.0 ; - RECT 4232.5 41480.0 4792.5 41415.0 ; - RECT 2015.0 9762.5 1880.0 9827.5 ; - RECT 2190.0 11197.5 2055.0 11262.5 ; - RECT 2365.0 12452.5 2230.0 12517.5 ; - RECT 2540.0 13887.5 2405.0 13952.5 ; - RECT 2715.0 15142.5 2580.0 15207.5 ; - RECT 2890.0 16577.5 2755.0 16642.5 ; - RECT 3065.0 17832.5 2930.0 17897.5 ; - RECT 3240.0 19267.5 3105.0 19332.5 ; - RECT 2015.0 20535.0 1880.0 20600.0 ; - RECT 2715.0 20320.0 2580.0 20385.0 ; - RECT 2015.0 21945.0 1880.0 22010.0 ; - RECT 2890.0 22160.0 2755.0 22225.0 ; - RECT 2015.0 23225.0 1880.0 23290.0 ; - RECT 3065.0 23010.0 2930.0 23075.0 ; - RECT 2015.0 24635.0 1880.0 24700.0 ; - RECT 3240.0 24850.0 3105.0 24915.0 ; - RECT 2190.0 25915.0 2055.0 25980.0 ; - RECT 2715.0 25700.0 2580.0 25765.0 ; - RECT 2190.0 27325.0 2055.0 27390.0 ; - RECT 2890.0 27540.0 2755.0 27605.0 ; - RECT 2190.0 28605.0 2055.0 28670.0 ; - RECT 3065.0 28390.0 2930.0 28455.0 ; - RECT 2190.0 30015.0 2055.0 30080.0 ; - RECT 3240.0 30230.0 3105.0 30295.0 ; - RECT 2365.0 31295.0 2230.0 31360.0 ; - RECT 2715.0 31080.0 2580.0 31145.0 ; - RECT 2365.0 32705.0 2230.0 32770.0 ; - RECT 2890.0 32920.0 2755.0 32985.0 ; - RECT 2365.0 33985.0 2230.0 34050.0 ; - RECT 3065.0 33770.0 2930.0 33835.0 ; - RECT 2365.0 35395.0 2230.0 35460.0 ; - RECT 3240.0 35610.0 3105.0 35675.0 ; - RECT 2540.0 36675.0 2405.0 36740.0 ; - RECT 2715.0 36460.0 2580.0 36525.0 ; - RECT 2540.0 38085.0 2405.0 38150.0 ; - RECT 2890.0 38300.0 2755.0 38365.0 ; - RECT 2540.0 39365.0 2405.0 39430.0 ; - RECT 3065.0 39150.0 2930.0 39215.0 ; - RECT 2540.0 40775.0 2405.0 40840.0 ; - RECT 3240.0 40990.0 3105.0 41055.0 ; - RECT 4522.5 20522.5 4587.5 20587.5 ; - RECT 4522.5 21957.5 4587.5 22022.5 ; - RECT 4522.5 23212.5 4587.5 23277.5 ; - RECT 4522.5 24647.5 4587.5 24712.5 ; - RECT 4522.5 25902.5 4587.5 25967.5 ; - RECT 4522.5 27337.5 4587.5 27402.5 ; - RECT 4522.5 28592.5 4587.5 28657.5 ; - RECT 4522.5 30027.5 4587.5 30092.5 ; - RECT 4522.5 31282.5 4587.5 31347.5 ; - RECT 4522.5 32717.5 4587.5 32782.5 ; - RECT 4522.5 33972.5 4587.5 34037.5 ; - RECT 4522.5 35407.5 4587.5 35472.5 ; - RECT 4522.5 36662.5 4587.5 36727.5 ; - RECT 4522.5 38097.5 4587.5 38162.5 ; - RECT 4522.5 39352.5 4587.5 39417.5 ; - RECT 4522.5 40787.5 4587.5 40852.5 ; - RECT 1912.5 10480.0 7277.5 10545.0 ; - RECT 1912.5 13170.0 7277.5 13235.0 ; - RECT 1912.5 15860.0 7277.5 15925.0 ; - RECT 1912.5 18550.0 7277.5 18615.0 ; - RECT 1912.5 21240.0 7277.5 21305.0 ; - RECT 1912.5 23930.0 7277.5 23995.0 ; - RECT 1912.5 26620.0 7277.5 26685.0 ; - RECT 1912.5 29310.0 7277.5 29375.0 ; - RECT 1912.5 32000.0 7277.5 32065.0 ; - RECT 1912.5 34690.0 7277.5 34755.0 ; - RECT 1912.5 37380.0 7277.5 37445.0 ; - RECT 1912.5 40070.0 7277.5 40135.0 ; - RECT 1912.5 9135.0 7277.5 9200.0 ; - RECT 1912.5 11825.0 7277.5 11890.0 ; - RECT 1912.5 14515.0 7277.5 14580.0 ; - RECT 1912.5 17205.0 7277.5 17270.0 ; - RECT 1912.5 19895.0 7277.5 19960.0 ; - RECT 1912.5 22585.0 7277.5 22650.0 ; - RECT 1912.5 25275.0 7277.5 25340.0 ; - RECT 1912.5 27965.0 7277.5 28030.0 ; - RECT 1912.5 30655.0 7277.5 30720.0 ; - RECT 1912.5 33345.0 7277.5 33410.0 ; - RECT 1912.5 36035.0 7277.5 36100.0 ; - RECT 1912.5 38725.0 7277.5 38790.0 ; - RECT 1912.5 41415.0 7277.5 41480.0 ; - RECT 5022.5 20522.5 5372.5 20587.5 ; - RECT 5537.5 20535.0 5602.5 20600.0 ; - RECT 5537.5 20522.5 5602.5 20587.5 ; - RECT 5537.5 20567.5 5602.5 20587.5 ; - RECT 5570.0 20535.0 5867.5 20600.0 ; - RECT 5867.5 20535.0 6002.5 20600.0 ; - RECT 6572.5 20535.0 6637.5 20600.0 ; - RECT 6572.5 20522.5 6637.5 20587.5 ; - RECT 6355.0 20535.0 6605.0 20600.0 ; - RECT 6572.5 20555.0 6637.5 20567.5 ; - RECT 6605.0 20522.5 6852.5 20587.5 ; - RECT 5022.5 21957.5 5372.5 22022.5 ; - RECT 5537.5 21945.0 5602.5 22010.0 ; - RECT 5537.5 21957.5 5602.5 22022.5 ; - RECT 5537.5 21977.5 5602.5 22022.5 ; - RECT 5570.0 21945.0 5867.5 22010.0 ; - RECT 5867.5 21945.0 6002.5 22010.0 ; - RECT 6572.5 21945.0 6637.5 22010.0 ; - RECT 6572.5 21957.5 6637.5 22022.5 ; - RECT 6355.0 21945.0 6605.0 22010.0 ; - RECT 6572.5 21977.5 6637.5 21990.0 ; - RECT 6605.0 21957.5 6852.5 22022.5 ; - RECT 5022.5 23212.5 5372.5 23277.5 ; - RECT 5537.5 23225.0 5602.5 23290.0 ; - RECT 5537.5 23212.5 5602.5 23277.5 ; - RECT 5537.5 23257.5 5602.5 23277.5 ; - RECT 5570.0 23225.0 5867.5 23290.0 ; - RECT 5867.5 23225.0 6002.5 23290.0 ; - RECT 6572.5 23225.0 6637.5 23290.0 ; - RECT 6572.5 23212.5 6637.5 23277.5 ; - RECT 6355.0 23225.0 6605.0 23290.0 ; - RECT 6572.5 23245.0 6637.5 23257.5 ; - RECT 6605.0 23212.5 6852.5 23277.5 ; - RECT 5022.5 24647.5 5372.5 24712.5 ; - RECT 5537.5 24635.0 5602.5 24700.0 ; - RECT 5537.5 24647.5 5602.5 24712.5 ; - RECT 5537.5 24667.5 5602.5 24712.5 ; - RECT 5570.0 24635.0 5867.5 24700.0 ; - RECT 5867.5 24635.0 6002.5 24700.0 ; - RECT 6572.5 24635.0 6637.5 24700.0 ; - RECT 6572.5 24647.5 6637.5 24712.5 ; - RECT 6355.0 24635.0 6605.0 24700.0 ; - RECT 6572.5 24667.5 6637.5 24680.0 ; - RECT 6605.0 24647.5 6852.5 24712.5 ; - RECT 5022.5 25902.5 5372.5 25967.5 ; - RECT 5537.5 25915.0 5602.5 25980.0 ; - RECT 5537.5 25902.5 5602.5 25967.5 ; - RECT 5537.5 25947.5 5602.5 25967.5 ; - RECT 5570.0 25915.0 5867.5 25980.0 ; - RECT 5867.5 25915.0 6002.5 25980.0 ; - RECT 6572.5 25915.0 6637.5 25980.0 ; - RECT 6572.5 25902.5 6637.5 25967.5 ; - RECT 6355.0 25915.0 6605.0 25980.0 ; - RECT 6572.5 25935.0 6637.5 25947.5 ; - RECT 6605.0 25902.5 6852.5 25967.5 ; - RECT 5022.5 27337.5 5372.5 27402.5 ; - RECT 5537.5 27325.0 5602.5 27390.0 ; - RECT 5537.5 27337.5 5602.5 27402.5 ; - RECT 5537.5 27357.5 5602.5 27402.5 ; - RECT 5570.0 27325.0 5867.5 27390.0 ; - RECT 5867.5 27325.0 6002.5 27390.0 ; - RECT 6572.5 27325.0 6637.5 27390.0 ; - RECT 6572.5 27337.5 6637.5 27402.5 ; - RECT 6355.0 27325.0 6605.0 27390.0 ; - RECT 6572.5 27357.5 6637.5 27370.0 ; - RECT 6605.0 27337.5 6852.5 27402.5 ; - RECT 5022.5 28592.5 5372.5 28657.5 ; - RECT 5537.5 28605.0 5602.5 28670.0 ; - RECT 5537.5 28592.5 5602.5 28657.5 ; - RECT 5537.5 28637.5 5602.5 28657.5 ; - RECT 5570.0 28605.0 5867.5 28670.0 ; - RECT 5867.5 28605.0 6002.5 28670.0 ; - RECT 6572.5 28605.0 6637.5 28670.0 ; - RECT 6572.5 28592.5 6637.5 28657.5 ; - RECT 6355.0 28605.0 6605.0 28670.0 ; - RECT 6572.5 28625.0 6637.5 28637.5 ; - RECT 6605.0 28592.5 6852.5 28657.5 ; - RECT 5022.5 30027.5 5372.5 30092.5 ; - RECT 5537.5 30015.0 5602.5 30080.0 ; - RECT 5537.5 30027.5 5602.5 30092.5 ; - RECT 5537.5 30047.5 5602.5 30092.5 ; - RECT 5570.0 30015.0 5867.5 30080.0 ; - RECT 5867.5 30015.0 6002.5 30080.0 ; - RECT 6572.5 30015.0 6637.5 30080.0 ; - RECT 6572.5 30027.5 6637.5 30092.5 ; - RECT 6355.0 30015.0 6605.0 30080.0 ; - RECT 6572.5 30047.5 6637.5 30060.0 ; - RECT 6605.0 30027.5 6852.5 30092.5 ; - RECT 5022.5 31282.5 5372.5 31347.5 ; - RECT 5537.5 31295.0 5602.5 31360.0 ; - RECT 5537.5 31282.5 5602.5 31347.5 ; - RECT 5537.5 31327.5 5602.5 31347.5 ; - RECT 5570.0 31295.0 5867.5 31360.0 ; - RECT 5867.5 31295.0 6002.5 31360.0 ; - RECT 6572.5 31295.0 6637.5 31360.0 ; - RECT 6572.5 31282.5 6637.5 31347.5 ; - RECT 6355.0 31295.0 6605.0 31360.0 ; - RECT 6572.5 31315.0 6637.5 31327.5 ; - RECT 6605.0 31282.5 6852.5 31347.5 ; - RECT 5022.5 32717.5 5372.5 32782.5 ; - RECT 5537.5 32705.0 5602.5 32770.0 ; - RECT 5537.5 32717.5 5602.5 32782.5 ; - RECT 5537.5 32737.5 5602.5 32782.5 ; - RECT 5570.0 32705.0 5867.5 32770.0 ; - RECT 5867.5 32705.0 6002.5 32770.0 ; - RECT 6572.5 32705.0 6637.5 32770.0 ; - RECT 6572.5 32717.5 6637.5 32782.5 ; - RECT 6355.0 32705.0 6605.0 32770.0 ; - RECT 6572.5 32737.5 6637.5 32750.0 ; - RECT 6605.0 32717.5 6852.5 32782.5 ; - RECT 5022.5 33972.5 5372.5 34037.5 ; - RECT 5537.5 33985.0 5602.5 34050.0 ; - RECT 5537.5 33972.5 5602.5 34037.5 ; - RECT 5537.5 34017.5 5602.5 34037.5 ; - RECT 5570.0 33985.0 5867.5 34050.0 ; - RECT 5867.5 33985.0 6002.5 34050.0 ; - RECT 6572.5 33985.0 6637.5 34050.0 ; - RECT 6572.5 33972.5 6637.5 34037.5 ; - RECT 6355.0 33985.0 6605.0 34050.0 ; - RECT 6572.5 34005.0 6637.5 34017.5 ; - RECT 6605.0 33972.5 6852.5 34037.5 ; - RECT 5022.5 35407.5 5372.5 35472.5 ; - RECT 5537.5 35395.0 5602.5 35460.0 ; - RECT 5537.5 35407.5 5602.5 35472.5 ; - RECT 5537.5 35427.5 5602.5 35472.5 ; - RECT 5570.0 35395.0 5867.5 35460.0 ; - RECT 5867.5 35395.0 6002.5 35460.0 ; - RECT 6572.5 35395.0 6637.5 35460.0 ; - RECT 6572.5 35407.5 6637.5 35472.5 ; - RECT 6355.0 35395.0 6605.0 35460.0 ; - RECT 6572.5 35427.5 6637.5 35440.0 ; - RECT 6605.0 35407.5 6852.5 35472.5 ; - RECT 5022.5 36662.5 5372.5 36727.5 ; - RECT 5537.5 36675.0 5602.5 36740.0 ; - RECT 5537.5 36662.5 5602.5 36727.5 ; - RECT 5537.5 36707.5 5602.5 36727.5 ; - RECT 5570.0 36675.0 5867.5 36740.0 ; - RECT 5867.5 36675.0 6002.5 36740.0 ; - RECT 6572.5 36675.0 6637.5 36740.0 ; - RECT 6572.5 36662.5 6637.5 36727.5 ; - RECT 6355.0 36675.0 6605.0 36740.0 ; - RECT 6572.5 36695.0 6637.5 36707.5 ; - RECT 6605.0 36662.5 6852.5 36727.5 ; - RECT 5022.5 38097.5 5372.5 38162.5 ; - RECT 5537.5 38085.0 5602.5 38150.0 ; - RECT 5537.5 38097.5 5602.5 38162.5 ; - RECT 5537.5 38117.5 5602.5 38162.5 ; - RECT 5570.0 38085.0 5867.5 38150.0 ; - RECT 5867.5 38085.0 6002.5 38150.0 ; - RECT 6572.5 38085.0 6637.5 38150.0 ; - RECT 6572.5 38097.5 6637.5 38162.5 ; - RECT 6355.0 38085.0 6605.0 38150.0 ; - RECT 6572.5 38117.5 6637.5 38130.0 ; - RECT 6605.0 38097.5 6852.5 38162.5 ; - RECT 5022.5 39352.5 5372.5 39417.5 ; - RECT 5537.5 39365.0 5602.5 39430.0 ; - RECT 5537.5 39352.5 5602.5 39417.5 ; - RECT 5537.5 39397.5 5602.5 39417.5 ; - RECT 5570.0 39365.0 5867.5 39430.0 ; - RECT 5867.5 39365.0 6002.5 39430.0 ; - RECT 6572.5 39365.0 6637.5 39430.0 ; - RECT 6572.5 39352.5 6637.5 39417.5 ; - RECT 6355.0 39365.0 6605.0 39430.0 ; - RECT 6572.5 39385.0 6637.5 39397.5 ; - RECT 6605.0 39352.5 6852.5 39417.5 ; - RECT 5022.5 40787.5 5372.5 40852.5 ; - RECT 5537.5 40775.0 5602.5 40840.0 ; - RECT 5537.5 40787.5 5602.5 40852.5 ; - RECT 5537.5 40807.5 5602.5 40852.5 ; - RECT 5570.0 40775.0 5867.5 40840.0 ; - RECT 5867.5 40775.0 6002.5 40840.0 ; - RECT 6572.5 40775.0 6637.5 40840.0 ; - RECT 6572.5 40787.5 6637.5 40852.5 ; - RECT 6355.0 40775.0 6605.0 40840.0 ; - RECT 6572.5 40807.5 6637.5 40820.0 ; - RECT 6605.0 40787.5 6852.5 40852.5 ; - RECT 5675.0 21087.5 5740.0 21272.5 ; - RECT 5675.0 19927.5 5740.0 20112.5 ; - RECT 5315.0 20045.0 5380.0 19895.0 ; - RECT 5315.0 20930.0 5380.0 21305.0 ; - RECT 5505.0 20045.0 5570.0 20930.0 ; - RECT 5315.0 20930.0 5380.0 21065.0 ; - RECT 5505.0 20930.0 5570.0 21065.0 ; - RECT 5505.0 20930.0 5570.0 21065.0 ; - RECT 5315.0 20930.0 5380.0 21065.0 ; - RECT 5315.0 20045.0 5380.0 20180.0 ; - RECT 5505.0 20045.0 5570.0 20180.0 ; - RECT 5505.0 20045.0 5570.0 20180.0 ; - RECT 5315.0 20045.0 5380.0 20180.0 ; - RECT 5675.0 21020.0 5740.0 21155.0 ; - RECT 5675.0 20045.0 5740.0 20180.0 ; - RECT 5372.5 20487.5 5437.5 20622.5 ; - RECT 5372.5 20487.5 5437.5 20622.5 ; - RECT 5537.5 20522.5 5602.5 20587.5 ; - RECT 5247.5 21240.0 5807.5 21305.0 ; - RECT 5247.5 19895.0 5807.5 19960.0 ; - RECT 5875.0 20090.0 5940.0 19895.0 ; - RECT 5875.0 20930.0 5940.0 21305.0 ; - RECT 6255.0 20930.0 6320.0 21305.0 ; - RECT 6425.0 21087.5 6490.0 21272.5 ; - RECT 6425.0 19927.5 6490.0 20112.5 ; - RECT 5875.0 20930.0 5940.0 21065.0 ; - RECT 6065.0 20930.0 6130.0 21065.0 ; - RECT 6065.0 20930.0 6130.0 21065.0 ; - RECT 5875.0 20930.0 5940.0 21065.0 ; - RECT 6065.0 20930.0 6130.0 21065.0 ; - RECT 6255.0 20930.0 6320.0 21065.0 ; - RECT 6255.0 20930.0 6320.0 21065.0 ; - RECT 6065.0 20930.0 6130.0 21065.0 ; - RECT 5875.0 20090.0 5940.0 20225.0 ; - RECT 6065.0 20090.0 6130.0 20225.0 ; - RECT 6065.0 20090.0 6130.0 20225.0 ; - RECT 5875.0 20090.0 5940.0 20225.0 ; - RECT 6065.0 20090.0 6130.0 20225.0 ; - RECT 6255.0 20090.0 6320.0 20225.0 ; - RECT 6255.0 20090.0 6320.0 20225.0 ; - RECT 6065.0 20090.0 6130.0 20225.0 ; - RECT 6425.0 21020.0 6490.0 21155.0 ; - RECT 6425.0 20045.0 6490.0 20180.0 ; - RECT 6260.0 20320.0 6125.0 20385.0 ; - RECT 6002.5 20535.0 5867.5 20600.0 ; - RECT 6065.0 20930.0 6130.0 21065.0 ; - RECT 6255.0 20090.0 6320.0 20225.0 ; - RECT 6355.0 20535.0 6220.0 20600.0 ; - RECT 5867.5 20535.0 6002.5 20600.0 ; - RECT 6125.0 20320.0 6260.0 20385.0 ; - RECT 6220.0 20535.0 6355.0 20600.0 ; - RECT 5807.5 21240.0 6727.5 21305.0 ; - RECT 5807.5 19895.0 6727.5 19960.0 ; - RECT 7155.0 21087.5 7220.0 21272.5 ; - RECT 7155.0 19927.5 7220.0 20112.5 ; - RECT 6795.0 20045.0 6860.0 19895.0 ; - RECT 6795.0 20930.0 6860.0 21305.0 ; - RECT 6985.0 20045.0 7050.0 20930.0 ; - RECT 6795.0 20930.0 6860.0 21065.0 ; - RECT 6985.0 20930.0 7050.0 21065.0 ; - RECT 6985.0 20930.0 7050.0 21065.0 ; - RECT 6795.0 20930.0 6860.0 21065.0 ; - RECT 6795.0 20045.0 6860.0 20180.0 ; - RECT 6985.0 20045.0 7050.0 20180.0 ; - RECT 6985.0 20045.0 7050.0 20180.0 ; - RECT 6795.0 20045.0 6860.0 20180.0 ; - RECT 7155.0 21020.0 7220.0 21155.0 ; - RECT 7155.0 20045.0 7220.0 20180.0 ; - RECT 6852.5 20487.5 6917.5 20622.5 ; - RECT 6852.5 20487.5 6917.5 20622.5 ; - RECT 7017.5 20522.5 7082.5 20587.5 ; - RECT 6727.5 21240.0 7287.5 21305.0 ; - RECT 6727.5 19895.0 7287.5 19960.0 ; - RECT 4990.0 20487.5 5055.0 20622.5 ; - RECT 5130.0 20215.0 5195.0 20350.0 ; - RECT 6125.0 20320.0 5990.0 20385.0 ; - RECT 5675.0 21457.5 5740.0 21272.5 ; - RECT 5675.0 22617.5 5740.0 22432.5 ; - RECT 5315.0 22500.0 5380.0 22650.0 ; - RECT 5315.0 21615.0 5380.0 21240.0 ; - RECT 5505.0 22500.0 5570.0 21615.0 ; - RECT 5315.0 21615.0 5380.0 21480.0 ; - RECT 5505.0 21615.0 5570.0 21480.0 ; - RECT 5505.0 21615.0 5570.0 21480.0 ; - RECT 5315.0 21615.0 5380.0 21480.0 ; - RECT 5315.0 22500.0 5380.0 22365.0 ; - RECT 5505.0 22500.0 5570.0 22365.0 ; - RECT 5505.0 22500.0 5570.0 22365.0 ; - RECT 5315.0 22500.0 5380.0 22365.0 ; - RECT 5675.0 21525.0 5740.0 21390.0 ; - RECT 5675.0 22500.0 5740.0 22365.0 ; - RECT 5372.5 22057.5 5437.5 21922.5 ; - RECT 5372.5 22057.5 5437.5 21922.5 ; - RECT 5537.5 22022.5 5602.5 21957.5 ; - RECT 5247.5 21305.0 5807.5 21240.0 ; - RECT 5247.5 22650.0 5807.5 22585.0 ; - RECT 5875.0 22455.0 5940.0 22650.0 ; - RECT 5875.0 21615.0 5940.0 21240.0 ; - RECT 6255.0 21615.0 6320.0 21240.0 ; - RECT 6425.0 21457.5 6490.0 21272.5 ; - RECT 6425.0 22617.5 6490.0 22432.5 ; - RECT 5875.0 21615.0 5940.0 21480.0 ; - RECT 6065.0 21615.0 6130.0 21480.0 ; - RECT 6065.0 21615.0 6130.0 21480.0 ; - RECT 5875.0 21615.0 5940.0 21480.0 ; - RECT 6065.0 21615.0 6130.0 21480.0 ; - RECT 6255.0 21615.0 6320.0 21480.0 ; - RECT 6255.0 21615.0 6320.0 21480.0 ; - RECT 6065.0 21615.0 6130.0 21480.0 ; - RECT 5875.0 22455.0 5940.0 22320.0 ; - RECT 6065.0 22455.0 6130.0 22320.0 ; - RECT 6065.0 22455.0 6130.0 22320.0 ; - RECT 5875.0 22455.0 5940.0 22320.0 ; - RECT 6065.0 22455.0 6130.0 22320.0 ; - RECT 6255.0 22455.0 6320.0 22320.0 ; - RECT 6255.0 22455.0 6320.0 22320.0 ; - RECT 6065.0 22455.0 6130.0 22320.0 ; - RECT 6425.0 21525.0 6490.0 21390.0 ; - RECT 6425.0 22500.0 6490.0 22365.0 ; - RECT 6260.0 22225.0 6125.0 22160.0 ; - RECT 6002.5 22010.0 5867.5 21945.0 ; - RECT 6065.0 21615.0 6130.0 21480.0 ; - RECT 6255.0 22455.0 6320.0 22320.0 ; - RECT 6355.0 22010.0 6220.0 21945.0 ; - RECT 5867.5 22010.0 6002.5 21945.0 ; - RECT 6125.0 22225.0 6260.0 22160.0 ; - RECT 6220.0 22010.0 6355.0 21945.0 ; - RECT 5807.5 21305.0 6727.5 21240.0 ; - RECT 5807.5 22650.0 6727.5 22585.0 ; - RECT 7155.0 21457.5 7220.0 21272.5 ; - RECT 7155.0 22617.5 7220.0 22432.5 ; - RECT 6795.0 22500.0 6860.0 22650.0 ; - RECT 6795.0 21615.0 6860.0 21240.0 ; - RECT 6985.0 22500.0 7050.0 21615.0 ; - RECT 6795.0 21615.0 6860.0 21480.0 ; - RECT 6985.0 21615.0 7050.0 21480.0 ; - RECT 6985.0 21615.0 7050.0 21480.0 ; - RECT 6795.0 21615.0 6860.0 21480.0 ; - RECT 6795.0 22500.0 6860.0 22365.0 ; - RECT 6985.0 22500.0 7050.0 22365.0 ; - RECT 6985.0 22500.0 7050.0 22365.0 ; - RECT 6795.0 22500.0 6860.0 22365.0 ; - RECT 7155.0 21525.0 7220.0 21390.0 ; - RECT 7155.0 22500.0 7220.0 22365.0 ; - RECT 6852.5 22057.5 6917.5 21922.5 ; - RECT 6852.5 22057.5 6917.5 21922.5 ; - RECT 7017.5 22022.5 7082.5 21957.5 ; - RECT 6727.5 21305.0 7287.5 21240.0 ; - RECT 6727.5 22650.0 7287.5 22585.0 ; - RECT 4990.0 21922.5 5055.0 22057.5 ; - RECT 5130.0 22195.0 5195.0 22330.0 ; - RECT 6125.0 22160.0 5990.0 22225.0 ; - RECT 5675.0 23777.5 5740.0 23962.5 ; - RECT 5675.0 22617.5 5740.0 22802.5 ; - RECT 5315.0 22735.0 5380.0 22585.0 ; - RECT 5315.0 23620.0 5380.0 23995.0 ; - RECT 5505.0 22735.0 5570.0 23620.0 ; - RECT 5315.0 23620.0 5380.0 23755.0 ; - RECT 5505.0 23620.0 5570.0 23755.0 ; - RECT 5505.0 23620.0 5570.0 23755.0 ; - RECT 5315.0 23620.0 5380.0 23755.0 ; - RECT 5315.0 22735.0 5380.0 22870.0 ; - RECT 5505.0 22735.0 5570.0 22870.0 ; - RECT 5505.0 22735.0 5570.0 22870.0 ; - RECT 5315.0 22735.0 5380.0 22870.0 ; - RECT 5675.0 23710.0 5740.0 23845.0 ; - RECT 5675.0 22735.0 5740.0 22870.0 ; - RECT 5372.5 23177.5 5437.5 23312.5 ; - RECT 5372.5 23177.5 5437.5 23312.5 ; - RECT 5537.5 23212.5 5602.5 23277.5 ; - RECT 5247.5 23930.0 5807.5 23995.0 ; - RECT 5247.5 22585.0 5807.5 22650.0 ; - RECT 5875.0 22780.0 5940.0 22585.0 ; - RECT 5875.0 23620.0 5940.0 23995.0 ; - RECT 6255.0 23620.0 6320.0 23995.0 ; - RECT 6425.0 23777.5 6490.0 23962.5 ; - RECT 6425.0 22617.5 6490.0 22802.5 ; - RECT 5875.0 23620.0 5940.0 23755.0 ; - RECT 6065.0 23620.0 6130.0 23755.0 ; - RECT 6065.0 23620.0 6130.0 23755.0 ; - RECT 5875.0 23620.0 5940.0 23755.0 ; - RECT 6065.0 23620.0 6130.0 23755.0 ; - RECT 6255.0 23620.0 6320.0 23755.0 ; - RECT 6255.0 23620.0 6320.0 23755.0 ; - RECT 6065.0 23620.0 6130.0 23755.0 ; - RECT 5875.0 22780.0 5940.0 22915.0 ; - RECT 6065.0 22780.0 6130.0 22915.0 ; - RECT 6065.0 22780.0 6130.0 22915.0 ; - RECT 5875.0 22780.0 5940.0 22915.0 ; - RECT 6065.0 22780.0 6130.0 22915.0 ; - RECT 6255.0 22780.0 6320.0 22915.0 ; - RECT 6255.0 22780.0 6320.0 22915.0 ; - RECT 6065.0 22780.0 6130.0 22915.0 ; - RECT 6425.0 23710.0 6490.0 23845.0 ; - RECT 6425.0 22735.0 6490.0 22870.0 ; - RECT 6260.0 23010.0 6125.0 23075.0 ; - RECT 6002.5 23225.0 5867.5 23290.0 ; - RECT 6065.0 23620.0 6130.0 23755.0 ; - RECT 6255.0 22780.0 6320.0 22915.0 ; - RECT 6355.0 23225.0 6220.0 23290.0 ; - RECT 5867.5 23225.0 6002.5 23290.0 ; - RECT 6125.0 23010.0 6260.0 23075.0 ; - RECT 6220.0 23225.0 6355.0 23290.0 ; - RECT 5807.5 23930.0 6727.5 23995.0 ; - RECT 5807.5 22585.0 6727.5 22650.0 ; - RECT 7155.0 23777.5 7220.0 23962.5 ; - RECT 7155.0 22617.5 7220.0 22802.5 ; - RECT 6795.0 22735.0 6860.0 22585.0 ; - RECT 6795.0 23620.0 6860.0 23995.0 ; - RECT 6985.0 22735.0 7050.0 23620.0 ; - RECT 6795.0 23620.0 6860.0 23755.0 ; - RECT 6985.0 23620.0 7050.0 23755.0 ; - RECT 6985.0 23620.0 7050.0 23755.0 ; - RECT 6795.0 23620.0 6860.0 23755.0 ; - RECT 6795.0 22735.0 6860.0 22870.0 ; - RECT 6985.0 22735.0 7050.0 22870.0 ; - RECT 6985.0 22735.0 7050.0 22870.0 ; - RECT 6795.0 22735.0 6860.0 22870.0 ; - RECT 7155.0 23710.0 7220.0 23845.0 ; - RECT 7155.0 22735.0 7220.0 22870.0 ; - RECT 6852.5 23177.5 6917.5 23312.5 ; - RECT 6852.5 23177.5 6917.5 23312.5 ; - RECT 7017.5 23212.5 7082.5 23277.5 ; - RECT 6727.5 23930.0 7287.5 23995.0 ; - RECT 6727.5 22585.0 7287.5 22650.0 ; - RECT 4990.0 23177.5 5055.0 23312.5 ; - RECT 5130.0 22905.0 5195.0 23040.0 ; - RECT 6125.0 23010.0 5990.0 23075.0 ; - RECT 5675.0 24147.5 5740.0 23962.5 ; - RECT 5675.0 25307.5 5740.0 25122.5 ; - RECT 5315.0 25190.0 5380.0 25340.0 ; - RECT 5315.0 24305.0 5380.0 23930.0 ; - RECT 5505.0 25190.0 5570.0 24305.0 ; - RECT 5315.0 24305.0 5380.0 24170.0 ; - RECT 5505.0 24305.0 5570.0 24170.0 ; - RECT 5505.0 24305.0 5570.0 24170.0 ; - RECT 5315.0 24305.0 5380.0 24170.0 ; - RECT 5315.0 25190.0 5380.0 25055.0 ; - RECT 5505.0 25190.0 5570.0 25055.0 ; - RECT 5505.0 25190.0 5570.0 25055.0 ; - RECT 5315.0 25190.0 5380.0 25055.0 ; - RECT 5675.0 24215.0 5740.0 24080.0 ; - RECT 5675.0 25190.0 5740.0 25055.0 ; - RECT 5372.5 24747.5 5437.5 24612.5 ; - RECT 5372.5 24747.5 5437.5 24612.5 ; - RECT 5537.5 24712.5 5602.5 24647.5 ; - RECT 5247.5 23995.0 5807.5 23930.0 ; - RECT 5247.5 25340.0 5807.5 25275.0 ; - RECT 5875.0 25145.0 5940.0 25340.0 ; - RECT 5875.0 24305.0 5940.0 23930.0 ; - RECT 6255.0 24305.0 6320.0 23930.0 ; - RECT 6425.0 24147.5 6490.0 23962.5 ; - RECT 6425.0 25307.5 6490.0 25122.5 ; - RECT 5875.0 24305.0 5940.0 24170.0 ; - RECT 6065.0 24305.0 6130.0 24170.0 ; - RECT 6065.0 24305.0 6130.0 24170.0 ; - RECT 5875.0 24305.0 5940.0 24170.0 ; - RECT 6065.0 24305.0 6130.0 24170.0 ; - RECT 6255.0 24305.0 6320.0 24170.0 ; - RECT 6255.0 24305.0 6320.0 24170.0 ; - RECT 6065.0 24305.0 6130.0 24170.0 ; - RECT 5875.0 25145.0 5940.0 25010.0 ; - RECT 6065.0 25145.0 6130.0 25010.0 ; - RECT 6065.0 25145.0 6130.0 25010.0 ; - RECT 5875.0 25145.0 5940.0 25010.0 ; - RECT 6065.0 25145.0 6130.0 25010.0 ; - RECT 6255.0 25145.0 6320.0 25010.0 ; - RECT 6255.0 25145.0 6320.0 25010.0 ; - RECT 6065.0 25145.0 6130.0 25010.0 ; - RECT 6425.0 24215.0 6490.0 24080.0 ; - RECT 6425.0 25190.0 6490.0 25055.0 ; - RECT 6260.0 24915.0 6125.0 24850.0 ; - RECT 6002.5 24700.0 5867.5 24635.0 ; - RECT 6065.0 24305.0 6130.0 24170.0 ; - RECT 6255.0 25145.0 6320.0 25010.0 ; - RECT 6355.0 24700.0 6220.0 24635.0 ; - RECT 5867.5 24700.0 6002.5 24635.0 ; - RECT 6125.0 24915.0 6260.0 24850.0 ; - RECT 6220.0 24700.0 6355.0 24635.0 ; - RECT 5807.5 23995.0 6727.5 23930.0 ; - RECT 5807.5 25340.0 6727.5 25275.0 ; - RECT 7155.0 24147.5 7220.0 23962.5 ; - RECT 7155.0 25307.5 7220.0 25122.5 ; - RECT 6795.0 25190.0 6860.0 25340.0 ; - RECT 6795.0 24305.0 6860.0 23930.0 ; - RECT 6985.0 25190.0 7050.0 24305.0 ; - RECT 6795.0 24305.0 6860.0 24170.0 ; - RECT 6985.0 24305.0 7050.0 24170.0 ; - RECT 6985.0 24305.0 7050.0 24170.0 ; - RECT 6795.0 24305.0 6860.0 24170.0 ; - RECT 6795.0 25190.0 6860.0 25055.0 ; - RECT 6985.0 25190.0 7050.0 25055.0 ; - RECT 6985.0 25190.0 7050.0 25055.0 ; - RECT 6795.0 25190.0 6860.0 25055.0 ; - RECT 7155.0 24215.0 7220.0 24080.0 ; - RECT 7155.0 25190.0 7220.0 25055.0 ; - RECT 6852.5 24747.5 6917.5 24612.5 ; - RECT 6852.5 24747.5 6917.5 24612.5 ; - RECT 7017.5 24712.5 7082.5 24647.5 ; - RECT 6727.5 23995.0 7287.5 23930.0 ; - RECT 6727.5 25340.0 7287.5 25275.0 ; - RECT 4990.0 24612.5 5055.0 24747.5 ; - RECT 5130.0 24885.0 5195.0 25020.0 ; - RECT 6125.0 24850.0 5990.0 24915.0 ; - RECT 5675.0 26467.5 5740.0 26652.5 ; - RECT 5675.0 25307.5 5740.0 25492.5 ; - RECT 5315.0 25425.0 5380.0 25275.0 ; - RECT 5315.0 26310.0 5380.0 26685.0 ; - RECT 5505.0 25425.0 5570.0 26310.0 ; - RECT 5315.0 26310.0 5380.0 26445.0 ; - RECT 5505.0 26310.0 5570.0 26445.0 ; - RECT 5505.0 26310.0 5570.0 26445.0 ; - RECT 5315.0 26310.0 5380.0 26445.0 ; - RECT 5315.0 25425.0 5380.0 25560.0 ; - RECT 5505.0 25425.0 5570.0 25560.0 ; - RECT 5505.0 25425.0 5570.0 25560.0 ; - RECT 5315.0 25425.0 5380.0 25560.0 ; - RECT 5675.0 26400.0 5740.0 26535.0 ; - RECT 5675.0 25425.0 5740.0 25560.0 ; - RECT 5372.5 25867.5 5437.5 26002.5 ; - RECT 5372.5 25867.5 5437.5 26002.5 ; - RECT 5537.5 25902.5 5602.5 25967.5 ; - RECT 5247.5 26620.0 5807.5 26685.0 ; - RECT 5247.5 25275.0 5807.5 25340.0 ; - RECT 5875.0 25470.0 5940.0 25275.0 ; - RECT 5875.0 26310.0 5940.0 26685.0 ; - RECT 6255.0 26310.0 6320.0 26685.0 ; - RECT 6425.0 26467.5 6490.0 26652.5 ; - RECT 6425.0 25307.5 6490.0 25492.5 ; - RECT 5875.0 26310.0 5940.0 26445.0 ; - RECT 6065.0 26310.0 6130.0 26445.0 ; - RECT 6065.0 26310.0 6130.0 26445.0 ; - RECT 5875.0 26310.0 5940.0 26445.0 ; - RECT 6065.0 26310.0 6130.0 26445.0 ; - RECT 6255.0 26310.0 6320.0 26445.0 ; - RECT 6255.0 26310.0 6320.0 26445.0 ; - RECT 6065.0 26310.0 6130.0 26445.0 ; - RECT 5875.0 25470.0 5940.0 25605.0 ; - RECT 6065.0 25470.0 6130.0 25605.0 ; - RECT 6065.0 25470.0 6130.0 25605.0 ; - RECT 5875.0 25470.0 5940.0 25605.0 ; - RECT 6065.0 25470.0 6130.0 25605.0 ; - RECT 6255.0 25470.0 6320.0 25605.0 ; - RECT 6255.0 25470.0 6320.0 25605.0 ; - RECT 6065.0 25470.0 6130.0 25605.0 ; - RECT 6425.0 26400.0 6490.0 26535.0 ; - RECT 6425.0 25425.0 6490.0 25560.0 ; - RECT 6260.0 25700.0 6125.0 25765.0 ; - RECT 6002.5 25915.0 5867.5 25980.0 ; - RECT 6065.0 26310.0 6130.0 26445.0 ; - RECT 6255.0 25470.0 6320.0 25605.0 ; - RECT 6355.0 25915.0 6220.0 25980.0 ; - RECT 5867.5 25915.0 6002.5 25980.0 ; - RECT 6125.0 25700.0 6260.0 25765.0 ; - RECT 6220.0 25915.0 6355.0 25980.0 ; - RECT 5807.5 26620.0 6727.5 26685.0 ; - RECT 5807.5 25275.0 6727.5 25340.0 ; - RECT 7155.0 26467.5 7220.0 26652.5 ; - RECT 7155.0 25307.5 7220.0 25492.5 ; - RECT 6795.0 25425.0 6860.0 25275.0 ; - RECT 6795.0 26310.0 6860.0 26685.0 ; - RECT 6985.0 25425.0 7050.0 26310.0 ; - RECT 6795.0 26310.0 6860.0 26445.0 ; - RECT 6985.0 26310.0 7050.0 26445.0 ; - RECT 6985.0 26310.0 7050.0 26445.0 ; - RECT 6795.0 26310.0 6860.0 26445.0 ; - RECT 6795.0 25425.0 6860.0 25560.0 ; - RECT 6985.0 25425.0 7050.0 25560.0 ; - RECT 6985.0 25425.0 7050.0 25560.0 ; - RECT 6795.0 25425.0 6860.0 25560.0 ; - RECT 7155.0 26400.0 7220.0 26535.0 ; - RECT 7155.0 25425.0 7220.0 25560.0 ; - RECT 6852.5 25867.5 6917.5 26002.5 ; - RECT 6852.5 25867.5 6917.5 26002.5 ; - RECT 7017.5 25902.5 7082.5 25967.5 ; - RECT 6727.5 26620.0 7287.5 26685.0 ; - RECT 6727.5 25275.0 7287.5 25340.0 ; - RECT 4990.0 25867.5 5055.0 26002.5 ; - RECT 5130.0 25595.0 5195.0 25730.0 ; - RECT 6125.0 25700.0 5990.0 25765.0 ; - RECT 5675.0 26837.5 5740.0 26652.5 ; - RECT 5675.0 27997.5 5740.0 27812.5 ; - RECT 5315.0 27880.0 5380.0 28030.0 ; - RECT 5315.0 26995.0 5380.0 26620.0 ; - RECT 5505.0 27880.0 5570.0 26995.0 ; - RECT 5315.0 26995.0 5380.0 26860.0 ; - RECT 5505.0 26995.0 5570.0 26860.0 ; - RECT 5505.0 26995.0 5570.0 26860.0 ; - RECT 5315.0 26995.0 5380.0 26860.0 ; - RECT 5315.0 27880.0 5380.0 27745.0 ; - RECT 5505.0 27880.0 5570.0 27745.0 ; - RECT 5505.0 27880.0 5570.0 27745.0 ; - RECT 5315.0 27880.0 5380.0 27745.0 ; - RECT 5675.0 26905.0 5740.0 26770.0 ; - RECT 5675.0 27880.0 5740.0 27745.0 ; - RECT 5372.5 27437.5 5437.5 27302.5 ; - RECT 5372.5 27437.5 5437.5 27302.5 ; - RECT 5537.5 27402.5 5602.5 27337.5 ; - RECT 5247.5 26685.0 5807.5 26620.0 ; - RECT 5247.5 28030.0 5807.5 27965.0 ; - RECT 5875.0 27835.0 5940.0 28030.0 ; - RECT 5875.0 26995.0 5940.0 26620.0 ; - RECT 6255.0 26995.0 6320.0 26620.0 ; - RECT 6425.0 26837.5 6490.0 26652.5 ; - RECT 6425.0 27997.5 6490.0 27812.5 ; - RECT 5875.0 26995.0 5940.0 26860.0 ; - RECT 6065.0 26995.0 6130.0 26860.0 ; - RECT 6065.0 26995.0 6130.0 26860.0 ; - RECT 5875.0 26995.0 5940.0 26860.0 ; - RECT 6065.0 26995.0 6130.0 26860.0 ; - RECT 6255.0 26995.0 6320.0 26860.0 ; - RECT 6255.0 26995.0 6320.0 26860.0 ; - RECT 6065.0 26995.0 6130.0 26860.0 ; - RECT 5875.0 27835.0 5940.0 27700.0 ; - RECT 6065.0 27835.0 6130.0 27700.0 ; - RECT 6065.0 27835.0 6130.0 27700.0 ; - RECT 5875.0 27835.0 5940.0 27700.0 ; - RECT 6065.0 27835.0 6130.0 27700.0 ; - RECT 6255.0 27835.0 6320.0 27700.0 ; - RECT 6255.0 27835.0 6320.0 27700.0 ; - RECT 6065.0 27835.0 6130.0 27700.0 ; - RECT 6425.0 26905.0 6490.0 26770.0 ; - RECT 6425.0 27880.0 6490.0 27745.0 ; - RECT 6260.0 27605.0 6125.0 27540.0 ; - RECT 6002.5 27390.0 5867.5 27325.0 ; - RECT 6065.0 26995.0 6130.0 26860.0 ; - RECT 6255.0 27835.0 6320.0 27700.0 ; - RECT 6355.0 27390.0 6220.0 27325.0 ; - RECT 5867.5 27390.0 6002.5 27325.0 ; - RECT 6125.0 27605.0 6260.0 27540.0 ; - RECT 6220.0 27390.0 6355.0 27325.0 ; - RECT 5807.5 26685.0 6727.5 26620.0 ; - RECT 5807.5 28030.0 6727.5 27965.0 ; - RECT 7155.0 26837.5 7220.0 26652.5 ; - RECT 7155.0 27997.5 7220.0 27812.5 ; - RECT 6795.0 27880.0 6860.0 28030.0 ; - RECT 6795.0 26995.0 6860.0 26620.0 ; - RECT 6985.0 27880.0 7050.0 26995.0 ; - RECT 6795.0 26995.0 6860.0 26860.0 ; - RECT 6985.0 26995.0 7050.0 26860.0 ; - RECT 6985.0 26995.0 7050.0 26860.0 ; - RECT 6795.0 26995.0 6860.0 26860.0 ; - RECT 6795.0 27880.0 6860.0 27745.0 ; - RECT 6985.0 27880.0 7050.0 27745.0 ; - RECT 6985.0 27880.0 7050.0 27745.0 ; - RECT 6795.0 27880.0 6860.0 27745.0 ; - RECT 7155.0 26905.0 7220.0 26770.0 ; - RECT 7155.0 27880.0 7220.0 27745.0 ; - RECT 6852.5 27437.5 6917.5 27302.5 ; - RECT 6852.5 27437.5 6917.5 27302.5 ; - RECT 7017.5 27402.5 7082.5 27337.5 ; - RECT 6727.5 26685.0 7287.5 26620.0 ; - RECT 6727.5 28030.0 7287.5 27965.0 ; - RECT 4990.0 27302.5 5055.0 27437.5 ; - RECT 5130.0 27575.0 5195.0 27710.0 ; - RECT 6125.0 27540.0 5990.0 27605.0 ; - RECT 5675.0 29157.5 5740.0 29342.5 ; - RECT 5675.0 27997.5 5740.0 28182.5 ; - RECT 5315.0 28115.0 5380.0 27965.0 ; - RECT 5315.0 29000.0 5380.0 29375.0 ; - RECT 5505.0 28115.0 5570.0 29000.0 ; - RECT 5315.0 29000.0 5380.0 29135.0 ; - RECT 5505.0 29000.0 5570.0 29135.0 ; - RECT 5505.0 29000.0 5570.0 29135.0 ; - RECT 5315.0 29000.0 5380.0 29135.0 ; - RECT 5315.0 28115.0 5380.0 28250.0 ; - RECT 5505.0 28115.0 5570.0 28250.0 ; - RECT 5505.0 28115.0 5570.0 28250.0 ; - RECT 5315.0 28115.0 5380.0 28250.0 ; - RECT 5675.0 29090.0 5740.0 29225.0 ; - RECT 5675.0 28115.0 5740.0 28250.0 ; - RECT 5372.5 28557.5 5437.5 28692.5 ; - RECT 5372.5 28557.5 5437.5 28692.5 ; - RECT 5537.5 28592.5 5602.5 28657.5 ; - RECT 5247.5 29310.0 5807.5 29375.0 ; - RECT 5247.5 27965.0 5807.5 28030.0 ; - RECT 5875.0 28160.0 5940.0 27965.0 ; - RECT 5875.0 29000.0 5940.0 29375.0 ; - RECT 6255.0 29000.0 6320.0 29375.0 ; - RECT 6425.0 29157.5 6490.0 29342.5 ; - RECT 6425.0 27997.5 6490.0 28182.5 ; - RECT 5875.0 29000.0 5940.0 29135.0 ; - RECT 6065.0 29000.0 6130.0 29135.0 ; - RECT 6065.0 29000.0 6130.0 29135.0 ; - RECT 5875.0 29000.0 5940.0 29135.0 ; - RECT 6065.0 29000.0 6130.0 29135.0 ; - RECT 6255.0 29000.0 6320.0 29135.0 ; - RECT 6255.0 29000.0 6320.0 29135.0 ; - RECT 6065.0 29000.0 6130.0 29135.0 ; - RECT 5875.0 28160.0 5940.0 28295.0 ; - RECT 6065.0 28160.0 6130.0 28295.0 ; - RECT 6065.0 28160.0 6130.0 28295.0 ; - RECT 5875.0 28160.0 5940.0 28295.0 ; - RECT 6065.0 28160.0 6130.0 28295.0 ; - RECT 6255.0 28160.0 6320.0 28295.0 ; - RECT 6255.0 28160.0 6320.0 28295.0 ; - RECT 6065.0 28160.0 6130.0 28295.0 ; - RECT 6425.0 29090.0 6490.0 29225.0 ; - RECT 6425.0 28115.0 6490.0 28250.0 ; - RECT 6260.0 28390.0 6125.0 28455.0 ; - RECT 6002.5 28605.0 5867.5 28670.0 ; - RECT 6065.0 29000.0 6130.0 29135.0 ; - RECT 6255.0 28160.0 6320.0 28295.0 ; - RECT 6355.0 28605.0 6220.0 28670.0 ; - RECT 5867.5 28605.0 6002.5 28670.0 ; - RECT 6125.0 28390.0 6260.0 28455.0 ; - RECT 6220.0 28605.0 6355.0 28670.0 ; - RECT 5807.5 29310.0 6727.5 29375.0 ; - RECT 5807.5 27965.0 6727.5 28030.0 ; - RECT 7155.0 29157.5 7220.0 29342.5 ; - RECT 7155.0 27997.5 7220.0 28182.5 ; - RECT 6795.0 28115.0 6860.0 27965.0 ; - RECT 6795.0 29000.0 6860.0 29375.0 ; - RECT 6985.0 28115.0 7050.0 29000.0 ; - RECT 6795.0 29000.0 6860.0 29135.0 ; - RECT 6985.0 29000.0 7050.0 29135.0 ; - RECT 6985.0 29000.0 7050.0 29135.0 ; - RECT 6795.0 29000.0 6860.0 29135.0 ; - RECT 6795.0 28115.0 6860.0 28250.0 ; - RECT 6985.0 28115.0 7050.0 28250.0 ; - RECT 6985.0 28115.0 7050.0 28250.0 ; - RECT 6795.0 28115.0 6860.0 28250.0 ; - RECT 7155.0 29090.0 7220.0 29225.0 ; - RECT 7155.0 28115.0 7220.0 28250.0 ; - RECT 6852.5 28557.5 6917.5 28692.5 ; - RECT 6852.5 28557.5 6917.5 28692.5 ; - RECT 7017.5 28592.5 7082.5 28657.5 ; - RECT 6727.5 29310.0 7287.5 29375.0 ; - RECT 6727.5 27965.0 7287.5 28030.0 ; - RECT 4990.0 28557.5 5055.0 28692.5 ; - RECT 5130.0 28285.0 5195.0 28420.0 ; - RECT 6125.0 28390.0 5990.0 28455.0 ; - RECT 5675.0 29527.5 5740.0 29342.5 ; - RECT 5675.0 30687.5 5740.0 30502.5 ; - RECT 5315.0 30570.0 5380.0 30720.0 ; - RECT 5315.0 29685.0 5380.0 29310.0 ; - RECT 5505.0 30570.0 5570.0 29685.0 ; - RECT 5315.0 29685.0 5380.0 29550.0 ; - RECT 5505.0 29685.0 5570.0 29550.0 ; - RECT 5505.0 29685.0 5570.0 29550.0 ; - RECT 5315.0 29685.0 5380.0 29550.0 ; - RECT 5315.0 30570.0 5380.0 30435.0 ; - RECT 5505.0 30570.0 5570.0 30435.0 ; - RECT 5505.0 30570.0 5570.0 30435.0 ; - RECT 5315.0 30570.0 5380.0 30435.0 ; - RECT 5675.0 29595.0 5740.0 29460.0 ; - RECT 5675.0 30570.0 5740.0 30435.0 ; - RECT 5372.5 30127.5 5437.5 29992.5 ; - RECT 5372.5 30127.5 5437.5 29992.5 ; - RECT 5537.5 30092.5 5602.5 30027.5 ; - RECT 5247.5 29375.0 5807.5 29310.0 ; - RECT 5247.5 30720.0 5807.5 30655.0 ; - RECT 5875.0 30525.0 5940.0 30720.0 ; - RECT 5875.0 29685.0 5940.0 29310.0 ; - RECT 6255.0 29685.0 6320.0 29310.0 ; - RECT 6425.0 29527.5 6490.0 29342.5 ; - RECT 6425.0 30687.5 6490.0 30502.5 ; - RECT 5875.0 29685.0 5940.0 29550.0 ; - RECT 6065.0 29685.0 6130.0 29550.0 ; - RECT 6065.0 29685.0 6130.0 29550.0 ; - RECT 5875.0 29685.0 5940.0 29550.0 ; - RECT 6065.0 29685.0 6130.0 29550.0 ; - RECT 6255.0 29685.0 6320.0 29550.0 ; - RECT 6255.0 29685.0 6320.0 29550.0 ; - RECT 6065.0 29685.0 6130.0 29550.0 ; - RECT 5875.0 30525.0 5940.0 30390.0 ; - RECT 6065.0 30525.0 6130.0 30390.0 ; - RECT 6065.0 30525.0 6130.0 30390.0 ; - RECT 5875.0 30525.0 5940.0 30390.0 ; - RECT 6065.0 30525.0 6130.0 30390.0 ; - RECT 6255.0 30525.0 6320.0 30390.0 ; - RECT 6255.0 30525.0 6320.0 30390.0 ; - RECT 6065.0 30525.0 6130.0 30390.0 ; - RECT 6425.0 29595.0 6490.0 29460.0 ; - RECT 6425.0 30570.0 6490.0 30435.0 ; - RECT 6260.0 30295.0 6125.0 30230.0 ; - RECT 6002.5 30080.0 5867.5 30015.0 ; - RECT 6065.0 29685.0 6130.0 29550.0 ; - RECT 6255.0 30525.0 6320.0 30390.0 ; - RECT 6355.0 30080.0 6220.0 30015.0 ; - RECT 5867.5 30080.0 6002.5 30015.0 ; - RECT 6125.0 30295.0 6260.0 30230.0 ; - RECT 6220.0 30080.0 6355.0 30015.0 ; - RECT 5807.5 29375.0 6727.5 29310.0 ; - RECT 5807.5 30720.0 6727.5 30655.0 ; - RECT 7155.0 29527.5 7220.0 29342.5 ; - RECT 7155.0 30687.5 7220.0 30502.5 ; - RECT 6795.0 30570.0 6860.0 30720.0 ; - RECT 6795.0 29685.0 6860.0 29310.0 ; - RECT 6985.0 30570.0 7050.0 29685.0 ; - RECT 6795.0 29685.0 6860.0 29550.0 ; - RECT 6985.0 29685.0 7050.0 29550.0 ; - RECT 6985.0 29685.0 7050.0 29550.0 ; - RECT 6795.0 29685.0 6860.0 29550.0 ; - RECT 6795.0 30570.0 6860.0 30435.0 ; - RECT 6985.0 30570.0 7050.0 30435.0 ; - RECT 6985.0 30570.0 7050.0 30435.0 ; - RECT 6795.0 30570.0 6860.0 30435.0 ; - RECT 7155.0 29595.0 7220.0 29460.0 ; - RECT 7155.0 30570.0 7220.0 30435.0 ; - RECT 6852.5 30127.5 6917.5 29992.5 ; - RECT 6852.5 30127.5 6917.5 29992.5 ; - RECT 7017.5 30092.5 7082.5 30027.5 ; - RECT 6727.5 29375.0 7287.5 29310.0 ; - RECT 6727.5 30720.0 7287.5 30655.0 ; - RECT 4990.0 29992.5 5055.0 30127.5 ; - RECT 5130.0 30265.0 5195.0 30400.0 ; - RECT 6125.0 30230.0 5990.0 30295.0 ; - RECT 5675.0 31847.5 5740.0 32032.5 ; - RECT 5675.0 30687.5 5740.0 30872.5 ; - RECT 5315.0 30805.0 5380.0 30655.0 ; - RECT 5315.0 31690.0 5380.0 32065.0 ; - RECT 5505.0 30805.0 5570.0 31690.0 ; - RECT 5315.0 31690.0 5380.0 31825.0 ; - RECT 5505.0 31690.0 5570.0 31825.0 ; - RECT 5505.0 31690.0 5570.0 31825.0 ; - RECT 5315.0 31690.0 5380.0 31825.0 ; - RECT 5315.0 30805.0 5380.0 30940.0 ; - RECT 5505.0 30805.0 5570.0 30940.0 ; - RECT 5505.0 30805.0 5570.0 30940.0 ; - RECT 5315.0 30805.0 5380.0 30940.0 ; - RECT 5675.0 31780.0 5740.0 31915.0 ; - RECT 5675.0 30805.0 5740.0 30940.0 ; - RECT 5372.5 31247.5 5437.5 31382.5 ; - RECT 5372.5 31247.5 5437.5 31382.5 ; - RECT 5537.5 31282.5 5602.5 31347.5 ; - RECT 5247.5 32000.0 5807.5 32065.0 ; - RECT 5247.5 30655.0 5807.5 30720.0 ; - RECT 5875.0 30850.0 5940.0 30655.0 ; - RECT 5875.0 31690.0 5940.0 32065.0 ; - RECT 6255.0 31690.0 6320.0 32065.0 ; - RECT 6425.0 31847.5 6490.0 32032.5 ; - RECT 6425.0 30687.5 6490.0 30872.5 ; - RECT 5875.0 31690.0 5940.0 31825.0 ; - RECT 6065.0 31690.0 6130.0 31825.0 ; - RECT 6065.0 31690.0 6130.0 31825.0 ; - RECT 5875.0 31690.0 5940.0 31825.0 ; - RECT 6065.0 31690.0 6130.0 31825.0 ; - RECT 6255.0 31690.0 6320.0 31825.0 ; - RECT 6255.0 31690.0 6320.0 31825.0 ; - RECT 6065.0 31690.0 6130.0 31825.0 ; - RECT 5875.0 30850.0 5940.0 30985.0 ; - RECT 6065.0 30850.0 6130.0 30985.0 ; - RECT 6065.0 30850.0 6130.0 30985.0 ; - RECT 5875.0 30850.0 5940.0 30985.0 ; - RECT 6065.0 30850.0 6130.0 30985.0 ; - RECT 6255.0 30850.0 6320.0 30985.0 ; - RECT 6255.0 30850.0 6320.0 30985.0 ; - RECT 6065.0 30850.0 6130.0 30985.0 ; - RECT 6425.0 31780.0 6490.0 31915.0 ; - RECT 6425.0 30805.0 6490.0 30940.0 ; - RECT 6260.0 31080.0 6125.0 31145.0 ; - RECT 6002.5 31295.0 5867.5 31360.0 ; - RECT 6065.0 31690.0 6130.0 31825.0 ; - RECT 6255.0 30850.0 6320.0 30985.0 ; - RECT 6355.0 31295.0 6220.0 31360.0 ; - RECT 5867.5 31295.0 6002.5 31360.0 ; - RECT 6125.0 31080.0 6260.0 31145.0 ; - RECT 6220.0 31295.0 6355.0 31360.0 ; - RECT 5807.5 32000.0 6727.5 32065.0 ; - RECT 5807.5 30655.0 6727.5 30720.0 ; - RECT 7155.0 31847.5 7220.0 32032.5 ; - RECT 7155.0 30687.5 7220.0 30872.5 ; - RECT 6795.0 30805.0 6860.0 30655.0 ; - RECT 6795.0 31690.0 6860.0 32065.0 ; - RECT 6985.0 30805.0 7050.0 31690.0 ; - RECT 6795.0 31690.0 6860.0 31825.0 ; - RECT 6985.0 31690.0 7050.0 31825.0 ; - RECT 6985.0 31690.0 7050.0 31825.0 ; - RECT 6795.0 31690.0 6860.0 31825.0 ; - RECT 6795.0 30805.0 6860.0 30940.0 ; - RECT 6985.0 30805.0 7050.0 30940.0 ; - RECT 6985.0 30805.0 7050.0 30940.0 ; - RECT 6795.0 30805.0 6860.0 30940.0 ; - RECT 7155.0 31780.0 7220.0 31915.0 ; - RECT 7155.0 30805.0 7220.0 30940.0 ; - RECT 6852.5 31247.5 6917.5 31382.5 ; - RECT 6852.5 31247.5 6917.5 31382.5 ; - RECT 7017.5 31282.5 7082.5 31347.5 ; - RECT 6727.5 32000.0 7287.5 32065.0 ; - RECT 6727.5 30655.0 7287.5 30720.0 ; - RECT 4990.0 31247.5 5055.0 31382.5 ; - RECT 5130.0 30975.0 5195.0 31110.0 ; - RECT 6125.0 31080.0 5990.0 31145.0 ; - RECT 5675.0 32217.5 5740.0 32032.5 ; - RECT 5675.0 33377.5 5740.0 33192.5 ; - RECT 5315.0 33260.0 5380.0 33410.0 ; - RECT 5315.0 32375.0 5380.0 32000.0 ; - RECT 5505.0 33260.0 5570.0 32375.0 ; - RECT 5315.0 32375.0 5380.0 32240.0 ; - RECT 5505.0 32375.0 5570.0 32240.0 ; - RECT 5505.0 32375.0 5570.0 32240.0 ; - RECT 5315.0 32375.0 5380.0 32240.0 ; - RECT 5315.0 33260.0 5380.0 33125.0 ; - RECT 5505.0 33260.0 5570.0 33125.0 ; - RECT 5505.0 33260.0 5570.0 33125.0 ; - RECT 5315.0 33260.0 5380.0 33125.0 ; - RECT 5675.0 32285.0 5740.0 32150.0 ; - RECT 5675.0 33260.0 5740.0 33125.0 ; - RECT 5372.5 32817.5 5437.5 32682.5 ; - RECT 5372.5 32817.5 5437.5 32682.5 ; - RECT 5537.5 32782.5 5602.5 32717.5 ; - RECT 5247.5 32065.0 5807.5 32000.0 ; - RECT 5247.5 33410.0 5807.5 33345.0 ; - RECT 5875.0 33215.0 5940.0 33410.0 ; - RECT 5875.0 32375.0 5940.0 32000.0 ; - RECT 6255.0 32375.0 6320.0 32000.0 ; - RECT 6425.0 32217.5 6490.0 32032.5 ; - RECT 6425.0 33377.5 6490.0 33192.5 ; - RECT 5875.0 32375.0 5940.0 32240.0 ; - RECT 6065.0 32375.0 6130.0 32240.0 ; - RECT 6065.0 32375.0 6130.0 32240.0 ; - RECT 5875.0 32375.0 5940.0 32240.0 ; - RECT 6065.0 32375.0 6130.0 32240.0 ; - RECT 6255.0 32375.0 6320.0 32240.0 ; - RECT 6255.0 32375.0 6320.0 32240.0 ; - RECT 6065.0 32375.0 6130.0 32240.0 ; - RECT 5875.0 33215.0 5940.0 33080.0 ; - RECT 6065.0 33215.0 6130.0 33080.0 ; - RECT 6065.0 33215.0 6130.0 33080.0 ; - RECT 5875.0 33215.0 5940.0 33080.0 ; - RECT 6065.0 33215.0 6130.0 33080.0 ; - RECT 6255.0 33215.0 6320.0 33080.0 ; - RECT 6255.0 33215.0 6320.0 33080.0 ; - RECT 6065.0 33215.0 6130.0 33080.0 ; - RECT 6425.0 32285.0 6490.0 32150.0 ; - RECT 6425.0 33260.0 6490.0 33125.0 ; - RECT 6260.0 32985.0 6125.0 32920.0 ; - RECT 6002.5 32770.0 5867.5 32705.0 ; - RECT 6065.0 32375.0 6130.0 32240.0 ; - RECT 6255.0 33215.0 6320.0 33080.0 ; - RECT 6355.0 32770.0 6220.0 32705.0 ; - RECT 5867.5 32770.0 6002.5 32705.0 ; - RECT 6125.0 32985.0 6260.0 32920.0 ; - RECT 6220.0 32770.0 6355.0 32705.0 ; - RECT 5807.5 32065.0 6727.5 32000.0 ; - RECT 5807.5 33410.0 6727.5 33345.0 ; - RECT 7155.0 32217.5 7220.0 32032.5 ; - RECT 7155.0 33377.5 7220.0 33192.5 ; - RECT 6795.0 33260.0 6860.0 33410.0 ; - RECT 6795.0 32375.0 6860.0 32000.0 ; - RECT 6985.0 33260.0 7050.0 32375.0 ; - RECT 6795.0 32375.0 6860.0 32240.0 ; - RECT 6985.0 32375.0 7050.0 32240.0 ; - RECT 6985.0 32375.0 7050.0 32240.0 ; - RECT 6795.0 32375.0 6860.0 32240.0 ; - RECT 6795.0 33260.0 6860.0 33125.0 ; - RECT 6985.0 33260.0 7050.0 33125.0 ; - RECT 6985.0 33260.0 7050.0 33125.0 ; - RECT 6795.0 33260.0 6860.0 33125.0 ; - RECT 7155.0 32285.0 7220.0 32150.0 ; - RECT 7155.0 33260.0 7220.0 33125.0 ; - RECT 6852.5 32817.5 6917.5 32682.5 ; - RECT 6852.5 32817.5 6917.5 32682.5 ; - RECT 7017.5 32782.5 7082.5 32717.5 ; - RECT 6727.5 32065.0 7287.5 32000.0 ; - RECT 6727.5 33410.0 7287.5 33345.0 ; - RECT 4990.0 32682.5 5055.0 32817.5 ; - RECT 5130.0 32955.0 5195.0 33090.0 ; - RECT 6125.0 32920.0 5990.0 32985.0 ; - RECT 5675.0 34537.5 5740.0 34722.5 ; - RECT 5675.0 33377.5 5740.0 33562.5 ; - RECT 5315.0 33495.0 5380.0 33345.0 ; - RECT 5315.0 34380.0 5380.0 34755.0 ; - RECT 5505.0 33495.0 5570.0 34380.0 ; - RECT 5315.0 34380.0 5380.0 34515.0 ; - RECT 5505.0 34380.0 5570.0 34515.0 ; - RECT 5505.0 34380.0 5570.0 34515.0 ; - RECT 5315.0 34380.0 5380.0 34515.0 ; - RECT 5315.0 33495.0 5380.0 33630.0 ; - RECT 5505.0 33495.0 5570.0 33630.0 ; - RECT 5505.0 33495.0 5570.0 33630.0 ; - RECT 5315.0 33495.0 5380.0 33630.0 ; - RECT 5675.0 34470.0 5740.0 34605.0 ; - RECT 5675.0 33495.0 5740.0 33630.0 ; - RECT 5372.5 33937.5 5437.5 34072.5 ; - RECT 5372.5 33937.5 5437.5 34072.5 ; - RECT 5537.5 33972.5 5602.5 34037.5 ; - RECT 5247.5 34690.0 5807.5 34755.0 ; - RECT 5247.5 33345.0 5807.5 33410.0 ; - RECT 5875.0 33540.0 5940.0 33345.0 ; - RECT 5875.0 34380.0 5940.0 34755.0 ; - RECT 6255.0 34380.0 6320.0 34755.0 ; - RECT 6425.0 34537.5 6490.0 34722.5 ; - RECT 6425.0 33377.5 6490.0 33562.5 ; - RECT 5875.0 34380.0 5940.0 34515.0 ; - RECT 6065.0 34380.0 6130.0 34515.0 ; - RECT 6065.0 34380.0 6130.0 34515.0 ; - RECT 5875.0 34380.0 5940.0 34515.0 ; - RECT 6065.0 34380.0 6130.0 34515.0 ; - RECT 6255.0 34380.0 6320.0 34515.0 ; - RECT 6255.0 34380.0 6320.0 34515.0 ; - RECT 6065.0 34380.0 6130.0 34515.0 ; - RECT 5875.0 33540.0 5940.0 33675.0 ; - RECT 6065.0 33540.0 6130.0 33675.0 ; - RECT 6065.0 33540.0 6130.0 33675.0 ; - RECT 5875.0 33540.0 5940.0 33675.0 ; - RECT 6065.0 33540.0 6130.0 33675.0 ; - RECT 6255.0 33540.0 6320.0 33675.0 ; - RECT 6255.0 33540.0 6320.0 33675.0 ; - RECT 6065.0 33540.0 6130.0 33675.0 ; - RECT 6425.0 34470.0 6490.0 34605.0 ; - RECT 6425.0 33495.0 6490.0 33630.0 ; - RECT 6260.0 33770.0 6125.0 33835.0 ; - RECT 6002.5 33985.0 5867.5 34050.0 ; - RECT 6065.0 34380.0 6130.0 34515.0 ; - RECT 6255.0 33540.0 6320.0 33675.0 ; - RECT 6355.0 33985.0 6220.0 34050.0 ; - RECT 5867.5 33985.0 6002.5 34050.0 ; - RECT 6125.0 33770.0 6260.0 33835.0 ; - RECT 6220.0 33985.0 6355.0 34050.0 ; - RECT 5807.5 34690.0 6727.5 34755.0 ; - RECT 5807.5 33345.0 6727.5 33410.0 ; - RECT 7155.0 34537.5 7220.0 34722.5 ; - RECT 7155.0 33377.5 7220.0 33562.5 ; - RECT 6795.0 33495.0 6860.0 33345.0 ; - RECT 6795.0 34380.0 6860.0 34755.0 ; - RECT 6985.0 33495.0 7050.0 34380.0 ; - RECT 6795.0 34380.0 6860.0 34515.0 ; - RECT 6985.0 34380.0 7050.0 34515.0 ; - RECT 6985.0 34380.0 7050.0 34515.0 ; - RECT 6795.0 34380.0 6860.0 34515.0 ; - RECT 6795.0 33495.0 6860.0 33630.0 ; - RECT 6985.0 33495.0 7050.0 33630.0 ; - RECT 6985.0 33495.0 7050.0 33630.0 ; - RECT 6795.0 33495.0 6860.0 33630.0 ; - RECT 7155.0 34470.0 7220.0 34605.0 ; - RECT 7155.0 33495.0 7220.0 33630.0 ; - RECT 6852.5 33937.5 6917.5 34072.5 ; - RECT 6852.5 33937.5 6917.5 34072.5 ; - RECT 7017.5 33972.5 7082.5 34037.5 ; - RECT 6727.5 34690.0 7287.5 34755.0 ; - RECT 6727.5 33345.0 7287.5 33410.0 ; - RECT 4990.0 33937.5 5055.0 34072.5 ; - RECT 5130.0 33665.0 5195.0 33800.0 ; - RECT 6125.0 33770.0 5990.0 33835.0 ; - RECT 5675.0 34907.5 5740.0 34722.5 ; - RECT 5675.0 36067.5 5740.0 35882.5 ; - RECT 5315.0 35950.0 5380.0 36100.0 ; - RECT 5315.0 35065.0 5380.0 34690.0 ; - RECT 5505.0 35950.0 5570.0 35065.0 ; - RECT 5315.0 35065.0 5380.0 34930.0 ; - RECT 5505.0 35065.0 5570.0 34930.0 ; - RECT 5505.0 35065.0 5570.0 34930.0 ; - RECT 5315.0 35065.0 5380.0 34930.0 ; - RECT 5315.0 35950.0 5380.0 35815.0 ; - RECT 5505.0 35950.0 5570.0 35815.0 ; - RECT 5505.0 35950.0 5570.0 35815.0 ; - RECT 5315.0 35950.0 5380.0 35815.0 ; - RECT 5675.0 34975.0 5740.0 34840.0 ; - RECT 5675.0 35950.0 5740.0 35815.0 ; - RECT 5372.5 35507.5 5437.5 35372.5 ; - RECT 5372.5 35507.5 5437.5 35372.5 ; - RECT 5537.5 35472.5 5602.5 35407.5 ; - RECT 5247.5 34755.0 5807.5 34690.0 ; - RECT 5247.5 36100.0 5807.5 36035.0 ; - RECT 5875.0 35905.0 5940.0 36100.0 ; - RECT 5875.0 35065.0 5940.0 34690.0 ; - RECT 6255.0 35065.0 6320.0 34690.0 ; - RECT 6425.0 34907.5 6490.0 34722.5 ; - RECT 6425.0 36067.5 6490.0 35882.5 ; - RECT 5875.0 35065.0 5940.0 34930.0 ; - RECT 6065.0 35065.0 6130.0 34930.0 ; - RECT 6065.0 35065.0 6130.0 34930.0 ; - RECT 5875.0 35065.0 5940.0 34930.0 ; - RECT 6065.0 35065.0 6130.0 34930.0 ; - RECT 6255.0 35065.0 6320.0 34930.0 ; - RECT 6255.0 35065.0 6320.0 34930.0 ; - RECT 6065.0 35065.0 6130.0 34930.0 ; - RECT 5875.0 35905.0 5940.0 35770.0 ; - RECT 6065.0 35905.0 6130.0 35770.0 ; - RECT 6065.0 35905.0 6130.0 35770.0 ; - RECT 5875.0 35905.0 5940.0 35770.0 ; - RECT 6065.0 35905.0 6130.0 35770.0 ; - RECT 6255.0 35905.0 6320.0 35770.0 ; - RECT 6255.0 35905.0 6320.0 35770.0 ; - RECT 6065.0 35905.0 6130.0 35770.0 ; - RECT 6425.0 34975.0 6490.0 34840.0 ; - RECT 6425.0 35950.0 6490.0 35815.0 ; - RECT 6260.0 35675.0 6125.0 35610.0 ; - RECT 6002.5 35460.0 5867.5 35395.0 ; - RECT 6065.0 35065.0 6130.0 34930.0 ; - RECT 6255.0 35905.0 6320.0 35770.0 ; - RECT 6355.0 35460.0 6220.0 35395.0 ; - RECT 5867.5 35460.0 6002.5 35395.0 ; - RECT 6125.0 35675.0 6260.0 35610.0 ; - RECT 6220.0 35460.0 6355.0 35395.0 ; - RECT 5807.5 34755.0 6727.5 34690.0 ; - RECT 5807.5 36100.0 6727.5 36035.0 ; - RECT 7155.0 34907.5 7220.0 34722.5 ; - RECT 7155.0 36067.5 7220.0 35882.5 ; - RECT 6795.0 35950.0 6860.0 36100.0 ; - RECT 6795.0 35065.0 6860.0 34690.0 ; - RECT 6985.0 35950.0 7050.0 35065.0 ; - RECT 6795.0 35065.0 6860.0 34930.0 ; - RECT 6985.0 35065.0 7050.0 34930.0 ; - RECT 6985.0 35065.0 7050.0 34930.0 ; - RECT 6795.0 35065.0 6860.0 34930.0 ; - RECT 6795.0 35950.0 6860.0 35815.0 ; - RECT 6985.0 35950.0 7050.0 35815.0 ; - RECT 6985.0 35950.0 7050.0 35815.0 ; - RECT 6795.0 35950.0 6860.0 35815.0 ; - RECT 7155.0 34975.0 7220.0 34840.0 ; - RECT 7155.0 35950.0 7220.0 35815.0 ; - RECT 6852.5 35507.5 6917.5 35372.5 ; - RECT 6852.5 35507.5 6917.5 35372.5 ; - RECT 7017.5 35472.5 7082.5 35407.5 ; - RECT 6727.5 34755.0 7287.5 34690.0 ; - RECT 6727.5 36100.0 7287.5 36035.0 ; - RECT 4990.0 35372.5 5055.0 35507.5 ; - RECT 5130.0 35645.0 5195.0 35780.0 ; - RECT 6125.0 35610.0 5990.0 35675.0 ; - RECT 5675.0 37227.5 5740.0 37412.5 ; - RECT 5675.0 36067.5 5740.0 36252.5 ; - RECT 5315.0 36185.0 5380.0 36035.0 ; - RECT 5315.0 37070.0 5380.0 37445.0 ; - RECT 5505.0 36185.0 5570.0 37070.0 ; - RECT 5315.0 37070.0 5380.0 37205.0 ; - RECT 5505.0 37070.0 5570.0 37205.0 ; - RECT 5505.0 37070.0 5570.0 37205.0 ; - RECT 5315.0 37070.0 5380.0 37205.0 ; - RECT 5315.0 36185.0 5380.0 36320.0 ; - RECT 5505.0 36185.0 5570.0 36320.0 ; - RECT 5505.0 36185.0 5570.0 36320.0 ; - RECT 5315.0 36185.0 5380.0 36320.0 ; - RECT 5675.0 37160.0 5740.0 37295.0 ; - RECT 5675.0 36185.0 5740.0 36320.0 ; - RECT 5372.5 36627.5 5437.5 36762.5 ; - RECT 5372.5 36627.5 5437.5 36762.5 ; - RECT 5537.5 36662.5 5602.5 36727.5 ; - RECT 5247.5 37380.0 5807.5 37445.0 ; - RECT 5247.5 36035.0 5807.5 36100.0 ; - RECT 5875.0 36230.0 5940.0 36035.0 ; - RECT 5875.0 37070.0 5940.0 37445.0 ; - RECT 6255.0 37070.0 6320.0 37445.0 ; - RECT 6425.0 37227.5 6490.0 37412.5 ; - RECT 6425.0 36067.5 6490.0 36252.5 ; - RECT 5875.0 37070.0 5940.0 37205.0 ; - RECT 6065.0 37070.0 6130.0 37205.0 ; - RECT 6065.0 37070.0 6130.0 37205.0 ; - RECT 5875.0 37070.0 5940.0 37205.0 ; - RECT 6065.0 37070.0 6130.0 37205.0 ; - RECT 6255.0 37070.0 6320.0 37205.0 ; - RECT 6255.0 37070.0 6320.0 37205.0 ; - RECT 6065.0 37070.0 6130.0 37205.0 ; - RECT 5875.0 36230.0 5940.0 36365.0 ; - RECT 6065.0 36230.0 6130.0 36365.0 ; - RECT 6065.0 36230.0 6130.0 36365.0 ; - RECT 5875.0 36230.0 5940.0 36365.0 ; - RECT 6065.0 36230.0 6130.0 36365.0 ; - RECT 6255.0 36230.0 6320.0 36365.0 ; - RECT 6255.0 36230.0 6320.0 36365.0 ; - RECT 6065.0 36230.0 6130.0 36365.0 ; - RECT 6425.0 37160.0 6490.0 37295.0 ; - RECT 6425.0 36185.0 6490.0 36320.0 ; - RECT 6260.0 36460.0 6125.0 36525.0 ; - RECT 6002.5 36675.0 5867.5 36740.0 ; - RECT 6065.0 37070.0 6130.0 37205.0 ; - RECT 6255.0 36230.0 6320.0 36365.0 ; - RECT 6355.0 36675.0 6220.0 36740.0 ; - RECT 5867.5 36675.0 6002.5 36740.0 ; - RECT 6125.0 36460.0 6260.0 36525.0 ; - RECT 6220.0 36675.0 6355.0 36740.0 ; - RECT 5807.5 37380.0 6727.5 37445.0 ; - RECT 5807.5 36035.0 6727.5 36100.0 ; - RECT 7155.0 37227.5 7220.0 37412.5 ; - RECT 7155.0 36067.5 7220.0 36252.5 ; - RECT 6795.0 36185.0 6860.0 36035.0 ; - RECT 6795.0 37070.0 6860.0 37445.0 ; - RECT 6985.0 36185.0 7050.0 37070.0 ; - RECT 6795.0 37070.0 6860.0 37205.0 ; - RECT 6985.0 37070.0 7050.0 37205.0 ; - RECT 6985.0 37070.0 7050.0 37205.0 ; - RECT 6795.0 37070.0 6860.0 37205.0 ; - RECT 6795.0 36185.0 6860.0 36320.0 ; - RECT 6985.0 36185.0 7050.0 36320.0 ; - RECT 6985.0 36185.0 7050.0 36320.0 ; - RECT 6795.0 36185.0 6860.0 36320.0 ; - RECT 7155.0 37160.0 7220.0 37295.0 ; - RECT 7155.0 36185.0 7220.0 36320.0 ; - RECT 6852.5 36627.5 6917.5 36762.5 ; - RECT 6852.5 36627.5 6917.5 36762.5 ; - RECT 7017.5 36662.5 7082.5 36727.5 ; - RECT 6727.5 37380.0 7287.5 37445.0 ; - RECT 6727.5 36035.0 7287.5 36100.0 ; - RECT 4990.0 36627.5 5055.0 36762.5 ; - RECT 5130.0 36355.0 5195.0 36490.0 ; - RECT 6125.0 36460.0 5990.0 36525.0 ; - RECT 5675.0 37597.5 5740.0 37412.5 ; - RECT 5675.0 38757.5 5740.0 38572.5 ; - RECT 5315.0 38640.0 5380.0 38790.0 ; - RECT 5315.0 37755.0 5380.0 37380.0 ; - RECT 5505.0 38640.0 5570.0 37755.0 ; - RECT 5315.0 37755.0 5380.0 37620.0 ; - RECT 5505.0 37755.0 5570.0 37620.0 ; - RECT 5505.0 37755.0 5570.0 37620.0 ; - RECT 5315.0 37755.0 5380.0 37620.0 ; - RECT 5315.0 38640.0 5380.0 38505.0 ; - RECT 5505.0 38640.0 5570.0 38505.0 ; - RECT 5505.0 38640.0 5570.0 38505.0 ; - RECT 5315.0 38640.0 5380.0 38505.0 ; - RECT 5675.0 37665.0 5740.0 37530.0 ; - RECT 5675.0 38640.0 5740.0 38505.0 ; - RECT 5372.5 38197.5 5437.5 38062.5 ; - RECT 5372.5 38197.5 5437.5 38062.5 ; - RECT 5537.5 38162.5 5602.5 38097.5 ; - RECT 5247.5 37445.0 5807.5 37380.0 ; - RECT 5247.5 38790.0 5807.5 38725.0 ; - RECT 5875.0 38595.0 5940.0 38790.0 ; - RECT 5875.0 37755.0 5940.0 37380.0 ; - RECT 6255.0 37755.0 6320.0 37380.0 ; - RECT 6425.0 37597.5 6490.0 37412.5 ; - RECT 6425.0 38757.5 6490.0 38572.5 ; - RECT 5875.0 37755.0 5940.0 37620.0 ; - RECT 6065.0 37755.0 6130.0 37620.0 ; - RECT 6065.0 37755.0 6130.0 37620.0 ; - RECT 5875.0 37755.0 5940.0 37620.0 ; - RECT 6065.0 37755.0 6130.0 37620.0 ; - RECT 6255.0 37755.0 6320.0 37620.0 ; - RECT 6255.0 37755.0 6320.0 37620.0 ; - RECT 6065.0 37755.0 6130.0 37620.0 ; - RECT 5875.0 38595.0 5940.0 38460.0 ; - RECT 6065.0 38595.0 6130.0 38460.0 ; - RECT 6065.0 38595.0 6130.0 38460.0 ; - RECT 5875.0 38595.0 5940.0 38460.0 ; - RECT 6065.0 38595.0 6130.0 38460.0 ; - RECT 6255.0 38595.0 6320.0 38460.0 ; - RECT 6255.0 38595.0 6320.0 38460.0 ; - RECT 6065.0 38595.0 6130.0 38460.0 ; - RECT 6425.0 37665.0 6490.0 37530.0 ; - RECT 6425.0 38640.0 6490.0 38505.0 ; - RECT 6260.0 38365.0 6125.0 38300.0 ; - RECT 6002.5 38150.0 5867.5 38085.0 ; - RECT 6065.0 37755.0 6130.0 37620.0 ; - RECT 6255.0 38595.0 6320.0 38460.0 ; - RECT 6355.0 38150.0 6220.0 38085.0 ; - RECT 5867.5 38150.0 6002.5 38085.0 ; - RECT 6125.0 38365.0 6260.0 38300.0 ; - RECT 6220.0 38150.0 6355.0 38085.0 ; - RECT 5807.5 37445.0 6727.5 37380.0 ; - RECT 5807.5 38790.0 6727.5 38725.0 ; - RECT 7155.0 37597.5 7220.0 37412.5 ; - RECT 7155.0 38757.5 7220.0 38572.5 ; - RECT 6795.0 38640.0 6860.0 38790.0 ; - RECT 6795.0 37755.0 6860.0 37380.0 ; - RECT 6985.0 38640.0 7050.0 37755.0 ; - RECT 6795.0 37755.0 6860.0 37620.0 ; - RECT 6985.0 37755.0 7050.0 37620.0 ; - RECT 6985.0 37755.0 7050.0 37620.0 ; - RECT 6795.0 37755.0 6860.0 37620.0 ; - RECT 6795.0 38640.0 6860.0 38505.0 ; - RECT 6985.0 38640.0 7050.0 38505.0 ; - RECT 6985.0 38640.0 7050.0 38505.0 ; - RECT 6795.0 38640.0 6860.0 38505.0 ; - RECT 7155.0 37665.0 7220.0 37530.0 ; - RECT 7155.0 38640.0 7220.0 38505.0 ; - RECT 6852.5 38197.5 6917.5 38062.5 ; - RECT 6852.5 38197.5 6917.5 38062.5 ; - RECT 7017.5 38162.5 7082.5 38097.5 ; - RECT 6727.5 37445.0 7287.5 37380.0 ; - RECT 6727.5 38790.0 7287.5 38725.0 ; - RECT 4990.0 38062.5 5055.0 38197.5 ; - RECT 5130.0 38335.0 5195.0 38470.0 ; - RECT 6125.0 38300.0 5990.0 38365.0 ; - RECT 5675.0 39917.5 5740.0 40102.5 ; - RECT 5675.0 38757.5 5740.0 38942.5 ; - RECT 5315.0 38875.0 5380.0 38725.0 ; - RECT 5315.0 39760.0 5380.0 40135.0 ; - RECT 5505.0 38875.0 5570.0 39760.0 ; - RECT 5315.0 39760.0 5380.0 39895.0 ; - RECT 5505.0 39760.0 5570.0 39895.0 ; - RECT 5505.0 39760.0 5570.0 39895.0 ; - RECT 5315.0 39760.0 5380.0 39895.0 ; - RECT 5315.0 38875.0 5380.0 39010.0 ; - RECT 5505.0 38875.0 5570.0 39010.0 ; - RECT 5505.0 38875.0 5570.0 39010.0 ; - RECT 5315.0 38875.0 5380.0 39010.0 ; - RECT 5675.0 39850.0 5740.0 39985.0 ; - RECT 5675.0 38875.0 5740.0 39010.0 ; - RECT 5372.5 39317.5 5437.5 39452.5 ; - RECT 5372.5 39317.5 5437.5 39452.5 ; - RECT 5537.5 39352.5 5602.5 39417.5 ; - RECT 5247.5 40070.0 5807.5 40135.0 ; - RECT 5247.5 38725.0 5807.5 38790.0 ; - RECT 5875.0 38920.0 5940.0 38725.0 ; - RECT 5875.0 39760.0 5940.0 40135.0 ; - RECT 6255.0 39760.0 6320.0 40135.0 ; - RECT 6425.0 39917.5 6490.0 40102.5 ; - RECT 6425.0 38757.5 6490.0 38942.5 ; - RECT 5875.0 39760.0 5940.0 39895.0 ; - RECT 6065.0 39760.0 6130.0 39895.0 ; - RECT 6065.0 39760.0 6130.0 39895.0 ; - RECT 5875.0 39760.0 5940.0 39895.0 ; - RECT 6065.0 39760.0 6130.0 39895.0 ; - RECT 6255.0 39760.0 6320.0 39895.0 ; - RECT 6255.0 39760.0 6320.0 39895.0 ; - RECT 6065.0 39760.0 6130.0 39895.0 ; - RECT 5875.0 38920.0 5940.0 39055.0 ; - RECT 6065.0 38920.0 6130.0 39055.0 ; - RECT 6065.0 38920.0 6130.0 39055.0 ; - RECT 5875.0 38920.0 5940.0 39055.0 ; - RECT 6065.0 38920.0 6130.0 39055.0 ; - RECT 6255.0 38920.0 6320.0 39055.0 ; - RECT 6255.0 38920.0 6320.0 39055.0 ; - RECT 6065.0 38920.0 6130.0 39055.0 ; - RECT 6425.0 39850.0 6490.0 39985.0 ; - RECT 6425.0 38875.0 6490.0 39010.0 ; - RECT 6260.0 39150.0 6125.0 39215.0 ; - RECT 6002.5 39365.0 5867.5 39430.0 ; - RECT 6065.0 39760.0 6130.0 39895.0 ; - RECT 6255.0 38920.0 6320.0 39055.0 ; - RECT 6355.0 39365.0 6220.0 39430.0 ; - RECT 5867.5 39365.0 6002.5 39430.0 ; - RECT 6125.0 39150.0 6260.0 39215.0 ; - RECT 6220.0 39365.0 6355.0 39430.0 ; - RECT 5807.5 40070.0 6727.5 40135.0 ; - RECT 5807.5 38725.0 6727.5 38790.0 ; - RECT 7155.0 39917.5 7220.0 40102.5 ; - RECT 7155.0 38757.5 7220.0 38942.5 ; - RECT 6795.0 38875.0 6860.0 38725.0 ; - RECT 6795.0 39760.0 6860.0 40135.0 ; - RECT 6985.0 38875.0 7050.0 39760.0 ; - RECT 6795.0 39760.0 6860.0 39895.0 ; - RECT 6985.0 39760.0 7050.0 39895.0 ; - RECT 6985.0 39760.0 7050.0 39895.0 ; - RECT 6795.0 39760.0 6860.0 39895.0 ; - RECT 6795.0 38875.0 6860.0 39010.0 ; - RECT 6985.0 38875.0 7050.0 39010.0 ; - RECT 6985.0 38875.0 7050.0 39010.0 ; - RECT 6795.0 38875.0 6860.0 39010.0 ; - RECT 7155.0 39850.0 7220.0 39985.0 ; - RECT 7155.0 38875.0 7220.0 39010.0 ; - RECT 6852.5 39317.5 6917.5 39452.5 ; - RECT 6852.5 39317.5 6917.5 39452.5 ; - RECT 7017.5 39352.5 7082.5 39417.5 ; - RECT 6727.5 40070.0 7287.5 40135.0 ; - RECT 6727.5 38725.0 7287.5 38790.0 ; - RECT 4990.0 39317.5 5055.0 39452.5 ; - RECT 5130.0 39045.0 5195.0 39180.0 ; - RECT 6125.0 39150.0 5990.0 39215.0 ; - RECT 5675.0 40287.5 5740.0 40102.5 ; - RECT 5675.0 41447.5 5740.0 41262.5 ; - RECT 5315.0 41330.0 5380.0 41480.0 ; - RECT 5315.0 40445.0 5380.0 40070.0 ; - RECT 5505.0 41330.0 5570.0 40445.0 ; - RECT 5315.0 40445.0 5380.0 40310.0 ; - RECT 5505.0 40445.0 5570.0 40310.0 ; - RECT 5505.0 40445.0 5570.0 40310.0 ; - RECT 5315.0 40445.0 5380.0 40310.0 ; - RECT 5315.0 41330.0 5380.0 41195.0 ; - RECT 5505.0 41330.0 5570.0 41195.0 ; - RECT 5505.0 41330.0 5570.0 41195.0 ; - RECT 5315.0 41330.0 5380.0 41195.0 ; - RECT 5675.0 40355.0 5740.0 40220.0 ; - RECT 5675.0 41330.0 5740.0 41195.0 ; - RECT 5372.5 40887.5 5437.5 40752.5 ; - RECT 5372.5 40887.5 5437.5 40752.5 ; - RECT 5537.5 40852.5 5602.5 40787.5 ; - RECT 5247.5 40135.0 5807.5 40070.0 ; - RECT 5247.5 41480.0 5807.5 41415.0 ; - RECT 5875.0 41285.0 5940.0 41480.0 ; - RECT 5875.0 40445.0 5940.0 40070.0 ; - RECT 6255.0 40445.0 6320.0 40070.0 ; - RECT 6425.0 40287.5 6490.0 40102.5 ; - RECT 6425.0 41447.5 6490.0 41262.5 ; - RECT 5875.0 40445.0 5940.0 40310.0 ; - RECT 6065.0 40445.0 6130.0 40310.0 ; - RECT 6065.0 40445.0 6130.0 40310.0 ; - RECT 5875.0 40445.0 5940.0 40310.0 ; - RECT 6065.0 40445.0 6130.0 40310.0 ; - RECT 6255.0 40445.0 6320.0 40310.0 ; - RECT 6255.0 40445.0 6320.0 40310.0 ; - RECT 6065.0 40445.0 6130.0 40310.0 ; - RECT 5875.0 41285.0 5940.0 41150.0 ; - RECT 6065.0 41285.0 6130.0 41150.0 ; - RECT 6065.0 41285.0 6130.0 41150.0 ; - RECT 5875.0 41285.0 5940.0 41150.0 ; - RECT 6065.0 41285.0 6130.0 41150.0 ; - RECT 6255.0 41285.0 6320.0 41150.0 ; - RECT 6255.0 41285.0 6320.0 41150.0 ; - RECT 6065.0 41285.0 6130.0 41150.0 ; - RECT 6425.0 40355.0 6490.0 40220.0 ; - RECT 6425.0 41330.0 6490.0 41195.0 ; - RECT 6260.0 41055.0 6125.0 40990.0 ; - RECT 6002.5 40840.0 5867.5 40775.0 ; - RECT 6065.0 40445.0 6130.0 40310.0 ; - RECT 6255.0 41285.0 6320.0 41150.0 ; - RECT 6355.0 40840.0 6220.0 40775.0 ; - RECT 5867.5 40840.0 6002.5 40775.0 ; - RECT 6125.0 41055.0 6260.0 40990.0 ; - RECT 6220.0 40840.0 6355.0 40775.0 ; - RECT 5807.5 40135.0 6727.5 40070.0 ; - RECT 5807.5 41480.0 6727.5 41415.0 ; - RECT 7155.0 40287.5 7220.0 40102.5 ; - RECT 7155.0 41447.5 7220.0 41262.5 ; - RECT 6795.0 41330.0 6860.0 41480.0 ; - RECT 6795.0 40445.0 6860.0 40070.0 ; - RECT 6985.0 41330.0 7050.0 40445.0 ; - RECT 6795.0 40445.0 6860.0 40310.0 ; - RECT 6985.0 40445.0 7050.0 40310.0 ; - RECT 6985.0 40445.0 7050.0 40310.0 ; - RECT 6795.0 40445.0 6860.0 40310.0 ; - RECT 6795.0 41330.0 6860.0 41195.0 ; - RECT 6985.0 41330.0 7050.0 41195.0 ; - RECT 6985.0 41330.0 7050.0 41195.0 ; - RECT 6795.0 41330.0 6860.0 41195.0 ; - RECT 7155.0 40355.0 7220.0 40220.0 ; - RECT 7155.0 41330.0 7220.0 41195.0 ; - RECT 6852.5 40887.5 6917.5 40752.5 ; - RECT 6852.5 40887.5 6917.5 40752.5 ; - RECT 7017.5 40852.5 7082.5 40787.5 ; - RECT 6727.5 40135.0 7287.5 40070.0 ; - RECT 6727.5 41480.0 7287.5 41415.0 ; - RECT 4990.0 40752.5 5055.0 40887.5 ; - RECT 5130.0 41025.0 5195.0 41160.0 ; - RECT 6125.0 40990.0 5990.0 41055.0 ; - RECT 4792.5 20250.0 5162.5 20315.0 ; - RECT 4792.5 22230.0 5162.5 22295.0 ; - RECT 4792.5 22940.0 5162.5 23005.0 ; - RECT 4792.5 24920.0 5162.5 24985.0 ; - RECT 4792.5 25630.0 5162.5 25695.0 ; - RECT 4792.5 27610.0 5162.5 27675.0 ; - RECT 4792.5 28320.0 5162.5 28385.0 ; - RECT 4792.5 30300.0 5162.5 30365.0 ; - RECT 4792.5 31010.0 5162.5 31075.0 ; - RECT 4792.5 32990.0 5162.5 33055.0 ; - RECT 4792.5 33700.0 5162.5 33765.0 ; - RECT 4792.5 35680.0 5162.5 35745.0 ; - RECT 4792.5 36390.0 5162.5 36455.0 ; - RECT 4792.5 38370.0 5162.5 38435.0 ; - RECT 4792.5 39080.0 5162.5 39145.0 ; - RECT 4792.5 41060.0 5162.5 41125.0 ; - RECT 7017.5 20522.5 7082.5 20587.5 ; - RECT 7017.5 21957.5 7082.5 22022.5 ; - RECT 7017.5 23212.5 7082.5 23277.5 ; - RECT 7017.5 24647.5 7082.5 24712.5 ; - RECT 7017.5 25902.5 7082.5 25967.5 ; - RECT 7017.5 27337.5 7082.5 27402.5 ; - RECT 7017.5 28592.5 7082.5 28657.5 ; - RECT 7017.5 30027.5 7082.5 30092.5 ; - RECT 7017.5 31282.5 7082.5 31347.5 ; - RECT 7017.5 32717.5 7082.5 32782.5 ; - RECT 7017.5 33972.5 7082.5 34037.5 ; - RECT 7017.5 35407.5 7082.5 35472.5 ; - RECT 7017.5 36662.5 7082.5 36727.5 ; - RECT 7017.5 38097.5 7082.5 38162.5 ; - RECT 7017.5 39352.5 7082.5 39417.5 ; - RECT 7017.5 40787.5 7082.5 40852.5 ; - RECT 4792.5 21240.0 5247.5 21305.0 ; - RECT 4792.5 23930.0 5247.5 23995.0 ; - RECT 4792.5 26620.0 5247.5 26685.0 ; - RECT 4792.5 29310.0 5247.5 29375.0 ; - RECT 4792.5 32000.0 5247.5 32065.0 ; - RECT 4792.5 34690.0 5247.5 34755.0 ; - RECT 4792.5 37380.0 5247.5 37445.0 ; - RECT 4792.5 40070.0 5247.5 40135.0 ; - RECT 4792.5 19895.0 5247.5 19960.0 ; - RECT 4792.5 22585.0 5247.5 22650.0 ; - RECT 4792.5 25275.0 5247.5 25340.0 ; - RECT 4792.5 27965.0 5247.5 28030.0 ; - RECT 4792.5 30655.0 5247.5 30720.0 ; - RECT 4792.5 33345.0 5247.5 33410.0 ; - RECT 4792.5 36035.0 5247.5 36100.0 ; - RECT 4792.5 38725.0 5247.5 38790.0 ; - RECT 4792.5 41415.0 5247.5 41480.0 ; - RECT 837.5 8757.5 7277.5 8052.5 ; - RECT 837.5 7347.5 7277.5 8052.5 ; - RECT 837.5 7347.5 7277.5 6642.5 ; - RECT 837.5 5937.5 7277.5 6642.5 ; - RECT 1042.5 8757.5 1107.5 5937.5 ; - RECT 4047.5 8757.5 4112.5 5937.5 ; - RECT 7007.5 8757.5 7072.5 5937.5 ; - RECT 2057.5 8757.5 2122.5 5937.5 ; - RECT 5017.5 8757.5 5082.5 5937.5 ; - RECT 1202.5 8757.5 1267.5 5937.5 ; - RECT 35.0 -3.5527136788e-12 380.0 415.0 ; - RECT 35.0 43302.5 380.0 43717.5 ; - RECT 11515.0 -3.5527136788e-12 11860.0 415.0 ; - RECT 11515.0 43302.5 11860.0 43717.5 ; - RECT 420.0 385.0 765.0 800.0 ; - RECT 420.0 43687.5 765.0 44102.5 ; - RECT 11900.0 385.0 12245.0 800.0 ; - RECT 11900.0 43687.5 12245.0 44102.5 ; - RECT 7277.5 9340.0 7142.5 9405.0 ; - RECT 7687.5 9340.0 7552.5 9405.0 ; - RECT 7002.5 10685.0 6867.5 10750.0 ; - RECT 7892.5 10685.0 7757.5 10750.0 ; - RECT 7277.5 14720.0 7142.5 14785.0 ; - RECT 8097.5 14720.0 7962.5 14785.0 ; - RECT 7002.5 16065.0 6867.5 16130.0 ; - RECT 8302.5 16065.0 8167.5 16130.0 ; - RECT 415.0 9135.0 -8.881784197e-13 9200.0 ; - RECT 415.0 11825.0 -8.881784197e-13 11890.0 ; - RECT 415.0 14515.0 -8.881784197e-13 14580.0 ; - RECT 415.0 17205.0 -8.881784197e-13 17270.0 ; - RECT 800.0 10480.0 385.0 10545.0 ; - RECT 800.0 13170.0 385.0 13235.0 ; - RECT 800.0 15860.0 385.0 15925.0 ; - RECT 800.0 18550.0 385.0 18615.0 ; - RECT 7345.0 8372.5 7210.0 8437.5 ; - RECT 7687.5 8372.5 7552.5 8437.5 ; - RECT 7345.0 7667.5 7210.0 7732.5 ; - RECT 7892.5 7667.5 7757.5 7732.5 ; - RECT 7345.0 6962.5 7210.0 7027.5 ; - RECT 8097.5 6962.5 7962.5 7027.5 ; - RECT 7345.0 6257.5 7210.0 6322.5 ; - RECT 8302.5 6257.5 8167.5 6322.5 ; - RECT 972.5 8725.0 837.5 8790.0 ; - RECT 415.0 8725.0 -8.881784197e-13 8790.0 ; - RECT 972.5 8020.0 837.5 8085.0 ; - RECT 415.0 8020.0 -8.881784197e-13 8085.0 ; - RECT 972.5 7315.0 837.5 7380.0 ; - RECT 415.0 7315.0 -8.881784197e-13 7380.0 ; - RECT 972.5 6610.0 837.5 6675.0 ; - RECT 415.0 6610.0 -8.881784197e-13 6675.0 ; - RECT 972.5 5905.0 837.5 5970.0 ; - RECT 415.0 5905.0 -8.881784197e-13 5970.0 ; - RECT 800.0 5700.0 385.0 5765.0 ; - RECT 800.0 5700.0 385.0 5765.0 ; - RECT 800.0 5700.0 385.0 5765.0 ; - RECT 800.0 5700.0 385.0 5765.0 ; - RECT 9122.5 4632.5 8987.5 4697.5 ; - RECT 8712.5 2447.5 8577.5 2512.5 ; - RECT 8917.5 3995.0 8782.5 4060.0 ; - RECT 9122.5 42425.0 8987.5 42490.0 ; - RECT 9327.5 11135.0 9192.5 11200.0 ; - RECT 9532.5 15160.0 9397.5 15225.0 ; - RECT 8507.5 8930.0 8372.5 8995.0 ; - RECT 5090.0 41620.0 4955.0 41685.0 ; - RECT 8507.5 41620.0 8372.5 41685.0 ; - RECT 12280.0 43110.0 11865.0 43175.0 ; - RECT 12280.0 19732.5 11865.0 19797.5 ; - RECT 12280.0 11265.0 11865.0 11330.0 ; - RECT 12280.0 7637.5 11865.0 7702.5 ; - RECT 12280.0 10597.5 11865.0 10662.5 ; - RECT 12280.0 5647.5 11865.0 5712.5 ; - RECT 12280.0 8607.5 11865.0 8672.5 ; - RECT 12280.0 2577.5 11865.0 2642.5 ; - RECT 800.0 21240.0 385.0 21305.0 ; - RECT 12280.0 21240.0 11865.0 21305.0 ; - RECT 800.0 23930.0 385.0 23995.0 ; - RECT 12280.0 23930.0 11865.0 23995.0 ; - RECT 800.0 26620.0 385.0 26685.0 ; - RECT 12280.0 26620.0 11865.0 26685.0 ; - RECT 800.0 29310.0 385.0 29375.0 ; - RECT 12280.0 29310.0 11865.0 29375.0 ; - RECT 800.0 32000.0 385.0 32065.0 ; - RECT 12280.0 32000.0 11865.0 32065.0 ; - RECT 800.0 34690.0 385.0 34755.0 ; - RECT 12280.0 34690.0 11865.0 34755.0 ; - RECT 800.0 37380.0 385.0 37445.0 ; - RECT 12280.0 37380.0 11865.0 37445.0 ; - RECT 800.0 40070.0 385.0 40135.0 ; - RECT 12280.0 40070.0 11865.0 40135.0 ; - RECT 11895.0 3865.0 11480.0 3930.0 ; - RECT 11895.0 15290.0 11480.0 15355.0 ; - RECT 11895.0 4792.5 11480.0 4857.5 ; - RECT 11895.0 12067.5 11480.0 12132.5 ; - RECT 415.0 19895.0 -8.881784197e-13 19960.0 ; - RECT 415.0 22585.0 -8.881784197e-13 22650.0 ; - RECT 415.0 25275.0 -8.881784197e-13 25340.0 ; - RECT 415.0 27965.0 -8.881784197e-13 28030.0 ; - RECT 415.0 30655.0 -8.881784197e-13 30720.0 ; - RECT 415.0 33345.0 -8.881784197e-13 33410.0 ; - RECT 415.0 36035.0 -8.881784197e-13 36100.0 ; - RECT 415.0 38725.0 -8.881784197e-13 38790.0 ; - RECT 415.0 41415.0 -8.881784197e-13 41480.0 ; - RECT 67.5 452.5 12212.5 732.5 ; - RECT 67.5 43755.0 12212.5 44035.0 ; - RECT 67.5 67.5 12212.5 347.5 ; - RECT 67.5 43370.0 12212.5 43650.0 ; - RECT -720.0 24047.5 -785.0 24112.5 ; - RECT -752.5 24047.5 -767.5 24112.5 ; - RECT -720.0 24080.0 -785.0 24665.0 ; - RECT -720.0 25210.0 -785.0 25605.0 ; - RECT -720.0 26530.0 -785.0 27115.0 ; - RECT -1517.5 26967.5 -1895.0 27032.5 ; - RECT -1517.5 29927.5 -1895.0 29992.5 ; - RECT -1517.5 24977.5 -1895.0 25042.5 ; - RECT -1517.5 27937.5 -1895.0 28002.5 ; - RECT -735.0 24047.5 -800.0 24112.5 ; - RECT -720.0 25177.5 -785.0 25242.5 ; - RECT -2170.0 35862.5 -2235.0 36627.5 ; - RECT -720.0 29212.5 -785.0 30642.5 ; - RECT -1690.0 23962.5 -1895.0 24027.5 ; - RECT -2212.5 30642.5 -2277.5 32580.0 ; - RECT -2427.5 31052.5 -2492.5 32837.5 ; - RECT -795.0 32077.5 -860.0 32647.5 ; - RECT -655.0 31872.5 -720.0 32837.5 ; - RECT -515.0 31257.5 -580.0 33027.5 ; - RECT -795.0 33587.5 -860.0 33652.5 ; - RECT -795.0 33122.5 -860.0 33620.0 ; - RECT -767.5 33587.5 -827.5 33652.5 ; - RECT -700.0 33752.5 -765.0 33817.5 ; - RECT -732.5 33752.5 -767.5 33817.5 ; - RECT -700.0 33785.0 -765.0 37325.0 ; - RECT -3485.0 32077.5 -3550.0 33207.5 ; - RECT -3345.0 31257.5 -3410.0 33397.5 ; - RECT -3205.0 31462.5 -3270.0 33587.5 ; - RECT -3485.0 34147.5 -3550.0 34212.5 ; - RECT -3485.0 33682.5 -3550.0 34180.0 ; - RECT -3457.5 34147.5 -3517.5 34212.5 ; - RECT -3425.0 34345.0 -3490.0 34740.0 ; - RECT -3425.0 34905.0 -3490.0 35300.0 ; - RECT -2170.0 35830.0 -2235.0 35895.0 ; - RECT -2202.5 35830.0 -2235.0 35895.0 ; - RECT -2170.0 35737.5 -2235.0 35862.5 ; - RECT -2170.0 35145.0 -2235.0 35540.0 ; - RECT -2212.5 33002.5 -2277.5 33372.5 ; - RECT -2157.5 34077.5 -2222.5 34517.5 ; - RECT -3425.0 35465.0 -3490.0 35702.5 ; - RECT -2170.0 34742.5 -2235.0 34980.0 ; - RECT -107.5 23757.5 -172.5 35862.5 ; - RECT -107.5 30847.5 -172.5 32452.5 ; - RECT -1452.5 23757.5 -1517.5 35862.5 ; - RECT -1452.5 31667.5 -1517.5 32452.5 ; - RECT -2797.5 32452.5 -2862.5 35862.5 ; - RECT -2797.5 30847.5 -2862.5 32452.5 ; - RECT -4142.5 32452.5 -4207.5 35862.5 ; - RECT -4142.5 31667.5 -4207.5 32452.5 ; - RECT -4142.5 35830.0 -4207.5 35895.0 ; - RECT -4142.5 35657.5 -4207.5 35862.5 ; - RECT -4175.0 35830.0 -4220.0 35895.0 ; - RECT -4010.0 23757.5 -3305.0 30197.5 ; - RECT -2600.0 23757.5 -3305.0 30197.5 ; - RECT -2600.0 23757.5 -1895.0 30197.5 ; - RECT -4010.0 23962.5 -1895.0 24027.5 ; - RECT -4010.0 26967.5 -1895.0 27032.5 ; - RECT -4010.0 29927.5 -1895.0 29992.5 ; - RECT -4010.0 24977.5 -1895.0 25042.5 ; - RECT -4010.0 27937.5 -1895.0 28002.5 ; - RECT -4010.0 24122.5 -1895.0 24187.5 ; - RECT -1300.0 24375.0 -1485.0 24440.0 ; - RECT -140.0 24375.0 -325.0 24440.0 ; - RECT -1342.5 23825.0 -1517.5 24270.0 ; - RECT -257.5 24015.0 -1142.5 24080.0 ; - RECT -1210.0 23825.0 -1375.0 23890.0 ; - RECT -1210.0 24205.0 -1375.0 24270.0 ; - RECT -1142.5 23825.0 -1277.5 23890.0 ; - RECT -1142.5 24205.0 -1277.5 24270.0 ; - RECT -1142.5 24015.0 -1277.5 24080.0 ; - RECT -1142.5 24015.0 -1277.5 24080.0 ; - RECT -1342.5 23825.0 -1407.5 24270.0 ; - RECT -160.0 23825.0 -325.0 23890.0 ; - RECT -160.0 24205.0 -325.0 24270.0 ; - RECT -257.5 23825.0 -392.5 23890.0 ; - RECT -257.5 24205.0 -392.5 24270.0 ; - RECT -257.5 24015.0 -392.5 24080.0 ; - RECT -257.5 24015.0 -392.5 24080.0 ; - RECT -127.5 23825.0 -192.5 24270.0 ; - RECT -1232.5 24375.0 -1367.5 24440.0 ; - RECT -257.5 24375.0 -392.5 24440.0 ; - RECT -700.0 23882.5 -835.0 23947.5 ; - RECT -700.0 23882.5 -835.0 23947.5 ; - RECT -735.0 24047.5 -800.0 24112.5 ; - RECT -1452.5 23757.5 -1517.5 24507.5 ; - RECT -107.5 23757.5 -172.5 24507.5 ; - RECT -1300.0 25315.0 -1485.0 25380.0 ; - RECT -140.0 25315.0 -325.0 25380.0 ; - RECT -1297.5 24575.0 -1517.5 25020.0 ; - RECT -472.5 25145.0 -967.5 25210.0 ; - RECT -1165.0 24575.0 -1330.0 24640.0 ; - RECT -1165.0 24955.0 -1330.0 25020.0 ; - RECT -1000.0 24765.0 -1165.0 24830.0 ; - RECT -1000.0 25145.0 -1165.0 25210.0 ; - RECT -1097.5 24575.0 -1232.5 24640.0 ; - RECT -1097.5 24955.0 -1232.5 25020.0 ; - RECT -1097.5 24765.0 -1232.5 24830.0 ; - RECT -1097.5 25145.0 -1232.5 25210.0 ; - RECT -967.5 24765.0 -1032.5 25210.0 ; - RECT -1297.5 24575.0 -1362.5 25020.0 ; - RECT -175.0 24575.0 -340.0 24640.0 ; - RECT -175.0 24955.0 -340.0 25020.0 ; - RECT -340.0 24765.0 -505.0 24830.0 ; - RECT -340.0 25145.0 -505.0 25210.0 ; - RECT -272.5 24575.0 -407.5 24640.0 ; - RECT -272.5 24955.0 -407.5 25020.0 ; - RECT -272.5 24765.0 -407.5 24830.0 ; - RECT -272.5 25145.0 -407.5 25210.0 ; - RECT -472.5 24765.0 -537.5 25210.0 ; - RECT -142.5 24575.0 -207.5 25020.0 ; - RECT -1232.5 25315.0 -1367.5 25380.0 ; - RECT -257.5 25315.0 -392.5 25380.0 ; - RECT -685.0 24632.5 -820.0 24697.5 ; - RECT -685.0 24632.5 -820.0 24697.5 ; - RECT -720.0 25177.5 -785.0 25242.5 ; - RECT -1452.5 24507.5 -1517.5 25447.5 ; - RECT -107.5 24507.5 -172.5 25447.5 ; - RECT -1300.0 26825.0 -1485.0 26890.0 ; - RECT -140.0 26825.0 -325.0 26890.0 ; - RECT -1297.5 25515.0 -1517.5 26720.0 ; - RECT -472.5 26465.0 -967.5 26530.0 ; - RECT -1165.0 25515.0 -1330.0 25580.0 ; - RECT -1165.0 25895.0 -1330.0 25960.0 ; - RECT -1165.0 26275.0 -1330.0 26340.0 ; - RECT -1165.0 26655.0 -1330.0 26720.0 ; - RECT -1000.0 25705.0 -1165.0 25770.0 ; - RECT -1000.0 26085.0 -1165.0 26150.0 ; - RECT -1000.0 26465.0 -1165.0 26530.0 ; - RECT -1097.5 25515.0 -1232.5 25580.0 ; - RECT -1097.5 25895.0 -1232.5 25960.0 ; - RECT -1097.5 26275.0 -1232.5 26340.0 ; - RECT -1097.5 26655.0 -1232.5 26720.0 ; - RECT -1097.5 25705.0 -1232.5 25770.0 ; - RECT -1097.5 26085.0 -1232.5 26150.0 ; - RECT -1097.5 26465.0 -1232.5 26530.0 ; - RECT -967.5 25705.0 -1032.5 26530.0 ; - RECT -1297.5 25515.0 -1362.5 26720.0 ; - RECT -175.0 25515.0 -340.0 25580.0 ; - RECT -175.0 25895.0 -340.0 25960.0 ; - RECT -175.0 26275.0 -340.0 26340.0 ; - RECT -175.0 26655.0 -340.0 26720.0 ; - RECT -340.0 25705.0 -505.0 25770.0 ; - RECT -340.0 26085.0 -505.0 26150.0 ; - RECT -340.0 26465.0 -505.0 26530.0 ; - RECT -272.5 25515.0 -407.5 25580.0 ; - RECT -272.5 25895.0 -407.5 25960.0 ; - RECT -272.5 26275.0 -407.5 26340.0 ; - RECT -272.5 26655.0 -407.5 26720.0 ; - RECT -272.5 25705.0 -407.5 25770.0 ; - RECT -272.5 26085.0 -407.5 26150.0 ; - RECT -272.5 26465.0 -407.5 26530.0 ; - RECT -472.5 25705.0 -537.5 26530.0 ; - RECT -142.5 25515.0 -207.5 26720.0 ; - RECT -1232.5 26825.0 -1367.5 26890.0 ; - RECT -257.5 26825.0 -392.5 26890.0 ; - RECT -685.0 25572.5 -820.0 25637.5 ; - RECT -685.0 25572.5 -820.0 25637.5 ; - RECT -720.0 26497.5 -785.0 26562.5 ; - RECT -1452.5 25447.5 -1517.5 26957.5 ; - RECT -107.5 25447.5 -172.5 26957.5 ; - RECT -1300.0 29475.0 -1485.0 29540.0 ; - RECT -140.0 29475.0 -325.0 29540.0 ; - RECT -1297.5 27025.0 -1517.5 29370.0 ; - RECT -472.5 29115.0 -967.5 29180.0 ; - RECT -1165.0 27025.0 -1330.0 27090.0 ; - RECT -1165.0 27405.0 -1330.0 27470.0 ; - RECT -1165.0 27785.0 -1330.0 27850.0 ; - RECT -1165.0 28165.0 -1330.0 28230.0 ; - RECT -1165.0 28545.0 -1330.0 28610.0 ; - RECT -1165.0 28925.0 -1330.0 28990.0 ; - RECT -1165.0 29305.0 -1330.0 29370.0 ; - RECT -1000.0 27215.0 -1165.0 27280.0 ; - RECT -1000.0 27595.0 -1165.0 27660.0 ; - RECT -1000.0 27975.0 -1165.0 28040.0 ; - RECT -1000.0 28355.0 -1165.0 28420.0 ; - RECT -1000.0 28735.0 -1165.0 28800.0 ; - RECT -1000.0 29115.0 -1165.0 29180.0 ; - RECT -1097.5 27025.0 -1232.5 27090.0 ; - RECT -1097.5 27405.0 -1232.5 27470.0 ; - RECT -1097.5 27785.0 -1232.5 27850.0 ; - RECT -1097.5 28165.0 -1232.5 28230.0 ; - RECT -1097.5 28545.0 -1232.5 28610.0 ; - RECT -1097.5 28925.0 -1232.5 28990.0 ; - RECT -1097.5 29305.0 -1232.5 29370.0 ; - RECT -1097.5 27215.0 -1232.5 27280.0 ; - RECT -1097.5 27595.0 -1232.5 27660.0 ; - RECT -1097.5 27975.0 -1232.5 28040.0 ; - RECT -1097.5 28355.0 -1232.5 28420.0 ; - RECT -1097.5 28735.0 -1232.5 28800.0 ; - RECT -1097.5 29115.0 -1232.5 29180.0 ; - RECT -967.5 27215.0 -1032.5 29180.0 ; - RECT -1297.5 27025.0 -1362.5 29370.0 ; - RECT -175.0 27025.0 -340.0 27090.0 ; - RECT -175.0 27405.0 -340.0 27470.0 ; - RECT -175.0 27785.0 -340.0 27850.0 ; - RECT -175.0 28165.0 -340.0 28230.0 ; - RECT -175.0 28545.0 -340.0 28610.0 ; - RECT -175.0 28925.0 -340.0 28990.0 ; - RECT -175.0 29305.0 -340.0 29370.0 ; - RECT -340.0 27215.0 -505.0 27280.0 ; - RECT -340.0 27595.0 -505.0 27660.0 ; - RECT -340.0 27975.0 -505.0 28040.0 ; - RECT -340.0 28355.0 -505.0 28420.0 ; - RECT -340.0 28735.0 -505.0 28800.0 ; - RECT -340.0 29115.0 -505.0 29180.0 ; - RECT -272.5 27025.0 -407.5 27090.0 ; - RECT -272.5 27405.0 -407.5 27470.0 ; - RECT -272.5 27785.0 -407.5 27850.0 ; - RECT -272.5 28165.0 -407.5 28230.0 ; - RECT -272.5 28545.0 -407.5 28610.0 ; - RECT -272.5 28925.0 -407.5 28990.0 ; - RECT -272.5 29305.0 -407.5 29370.0 ; - RECT -272.5 27215.0 -407.5 27280.0 ; - RECT -272.5 27595.0 -407.5 27660.0 ; - RECT -272.5 27975.0 -407.5 28040.0 ; - RECT -272.5 28355.0 -407.5 28420.0 ; - RECT -272.5 28735.0 -407.5 28800.0 ; - RECT -272.5 29115.0 -407.5 29180.0 ; - RECT -472.5 27215.0 -537.5 29180.0 ; - RECT -142.5 27025.0 -207.5 29370.0 ; - RECT -1232.5 29475.0 -1367.5 29540.0 ; - RECT -257.5 29475.0 -392.5 29540.0 ; - RECT -685.0 27082.5 -820.0 27147.5 ; - RECT -685.0 27082.5 -820.0 27147.5 ; - RECT -720.0 29147.5 -785.0 29212.5 ; - RECT -1452.5 26957.5 -1517.5 29607.5 ; - RECT -107.5 26957.5 -172.5 29607.5 ; - RECT -302.5 32520.0 -107.5 32585.0 ; - RECT -1142.5 32520.0 -1517.5 32585.0 ; - RECT -1142.5 32900.0 -1517.5 32965.0 ; - RECT -1300.0 33260.0 -1485.0 33325.0 ; - RECT -140.0 33260.0 -325.0 33325.0 ; - RECT -1142.5 32520.0 -1277.5 32585.0 ; - RECT -1142.5 32710.0 -1277.5 32775.0 ; - RECT -1142.5 32710.0 -1277.5 32775.0 ; - RECT -1142.5 32520.0 -1277.5 32585.0 ; - RECT -1142.5 32710.0 -1277.5 32775.0 ; - RECT -1142.5 32900.0 -1277.5 32965.0 ; - RECT -1142.5 32900.0 -1277.5 32965.0 ; - RECT -1142.5 32710.0 -1277.5 32775.0 ; - RECT -1142.5 32900.0 -1277.5 32965.0 ; - RECT -1142.5 33090.0 -1277.5 33155.0 ; - RECT -1142.5 33090.0 -1277.5 33155.0 ; - RECT -1142.5 32900.0 -1277.5 32965.0 ; - RECT -302.5 32520.0 -437.5 32585.0 ; - RECT -302.5 32710.0 -437.5 32775.0 ; - RECT -302.5 32710.0 -437.5 32775.0 ; - RECT -302.5 32520.0 -437.5 32585.0 ; - RECT -302.5 32710.0 -437.5 32775.0 ; - RECT -302.5 32900.0 -437.5 32965.0 ; - RECT -302.5 32900.0 -437.5 32965.0 ; - RECT -302.5 32710.0 -437.5 32775.0 ; - RECT -302.5 32900.0 -437.5 32965.0 ; - RECT -302.5 33090.0 -437.5 33155.0 ; - RECT -302.5 33090.0 -437.5 33155.0 ; - RECT -302.5 32900.0 -437.5 32965.0 ; - RECT -1232.5 33260.0 -1367.5 33325.0 ; - RECT -257.5 33260.0 -392.5 33325.0 ; - RECT -515.0 33095.0 -580.0 32960.0 ; - RECT -655.0 32905.0 -720.0 32770.0 ; - RECT -795.0 32715.0 -860.0 32580.0 ; - RECT -1142.5 32710.0 -1277.5 32775.0 ; - RECT -1142.5 33090.0 -1277.5 33155.0 ; - RECT -302.5 33090.0 -437.5 33155.0 ; - RECT -760.0 33090.0 -895.0 33155.0 ; - RECT -795.0 32580.0 -860.0 32715.0 ; - RECT -655.0 32770.0 -720.0 32905.0 ; - RECT -515.0 32960.0 -580.0 33095.0 ; - RECT -760.0 33090.0 -895.0 33155.0 ; - RECT -1452.5 32452.5 -1517.5 33462.5 ; - RECT -107.5 32452.5 -172.5 33462.5 ; - RECT -1300.0 33890.0 -1485.0 33955.0 ; - RECT -140.0 33890.0 -325.0 33955.0 ; - RECT -257.5 33530.0 -107.5 33595.0 ; - RECT -1142.5 33530.0 -1517.5 33595.0 ; - RECT -257.5 33720.0 -1142.5 33785.0 ; - RECT -1142.5 33530.0 -1277.5 33595.0 ; - RECT -1142.5 33720.0 -1277.5 33785.0 ; - RECT -1142.5 33720.0 -1277.5 33785.0 ; - RECT -1142.5 33530.0 -1277.5 33595.0 ; - RECT -257.5 33530.0 -392.5 33595.0 ; - RECT -257.5 33720.0 -392.5 33785.0 ; - RECT -257.5 33720.0 -392.5 33785.0 ; - RECT -257.5 33530.0 -392.5 33595.0 ; - RECT -1232.5 33890.0 -1367.5 33955.0 ; - RECT -257.5 33890.0 -392.5 33955.0 ; - RECT -700.0 33587.5 -835.0 33652.5 ; - RECT -700.0 33587.5 -835.0 33652.5 ; - RECT -735.0 33752.5 -800.0 33817.5 ; - RECT -1452.5 33462.5 -1517.5 34022.5 ; - RECT -107.5 33462.5 -172.5 34022.5 ; - RECT -2712.5 32520.0 -2862.5 32585.0 ; - RECT -2712.5 32900.0 -2862.5 32965.0 ; - RECT -1895.0 32520.0 -1452.5 32585.0 ; - RECT -1670.0 33070.0 -1485.0 33135.0 ; - RECT -2830.0 33070.0 -2645.0 33135.0 ; - RECT -1895.0 32520.0 -1760.0 32585.0 ; - RECT -1895.0 32710.0 -1760.0 32775.0 ; - RECT -1895.0 32710.0 -1760.0 32775.0 ; - RECT -1895.0 32520.0 -1760.0 32585.0 ; - RECT -1895.0 32710.0 -1760.0 32775.0 ; - RECT -1895.0 32900.0 -1760.0 32965.0 ; - RECT -1895.0 32900.0 -1760.0 32965.0 ; - RECT -1895.0 32710.0 -1760.0 32775.0 ; - RECT -2712.5 32520.0 -2577.5 32585.0 ; - RECT -2712.5 32710.0 -2577.5 32775.0 ; - RECT -2712.5 32710.0 -2577.5 32775.0 ; - RECT -2712.5 32520.0 -2577.5 32585.0 ; - RECT -2712.5 32710.0 -2577.5 32775.0 ; - RECT -2712.5 32900.0 -2577.5 32965.0 ; - RECT -2712.5 32900.0 -2577.5 32965.0 ; - RECT -2712.5 32710.0 -2577.5 32775.0 ; - RECT -1737.5 33070.0 -1602.5 33135.0 ; - RECT -2712.5 33070.0 -2577.5 33135.0 ; - RECT -2492.5 32905.0 -2427.5 32770.0 ; - RECT -2277.5 32647.5 -2212.5 32512.5 ; - RECT -1895.0 32900.0 -1760.0 32965.0 ; - RECT -2677.5 32810.0 -2612.5 32675.0 ; - RECT -2277.5 33070.0 -2212.5 32935.0 ; - RECT -2277.5 32512.5 -2212.5 32647.5 ; - RECT -2492.5 32770.0 -2427.5 32905.0 ; - RECT -2277.5 32935.0 -2212.5 33070.0 ; - RECT -1517.5 32452.5 -1452.5 33372.5 ; - RECT -2862.5 32452.5 -2797.5 33372.5 ; - RECT -2667.5 33665.0 -2862.5 33730.0 ; - RECT -1827.5 33665.0 -1452.5 33730.0 ; - RECT -1827.5 34045.0 -1452.5 34110.0 ; - RECT -1670.0 34215.0 -1485.0 34280.0 ; - RECT -2830.0 34215.0 -2645.0 34280.0 ; - RECT -1827.5 33665.0 -1692.5 33730.0 ; - RECT -1827.5 33855.0 -1692.5 33920.0 ; - RECT -1827.5 33855.0 -1692.5 33920.0 ; - RECT -1827.5 33665.0 -1692.5 33730.0 ; - RECT -1827.5 33855.0 -1692.5 33920.0 ; - RECT -1827.5 34045.0 -1692.5 34110.0 ; - RECT -1827.5 34045.0 -1692.5 34110.0 ; - RECT -1827.5 33855.0 -1692.5 33920.0 ; - RECT -2667.5 33665.0 -2532.5 33730.0 ; - RECT -2667.5 33855.0 -2532.5 33920.0 ; - RECT -2667.5 33855.0 -2532.5 33920.0 ; - RECT -2667.5 33665.0 -2532.5 33730.0 ; - RECT -2667.5 33855.0 -2532.5 33920.0 ; - RECT -2667.5 34045.0 -2532.5 34110.0 ; - RECT -2667.5 34045.0 -2532.5 34110.0 ; - RECT -2667.5 33855.0 -2532.5 33920.0 ; - RECT -1737.5 34215.0 -1602.5 34280.0 ; - RECT -2712.5 34215.0 -2577.5 34280.0 ; - RECT -2437.5 34050.0 -2372.5 33915.0 ; - RECT -2222.5 33792.5 -2157.5 33657.5 ; - RECT -1827.5 33855.0 -1692.5 33920.0 ; - RECT -2667.5 34045.0 -2532.5 34110.0 ; - RECT -2222.5 34145.0 -2157.5 34010.0 ; - RECT -2222.5 33657.5 -2157.5 33792.5 ; - RECT -2437.5 33915.0 -2372.5 34050.0 ; - RECT -2222.5 34010.0 -2157.5 34145.0 ; - RECT -1517.5 33597.5 -1452.5 34517.5 ; - RECT -2862.5 33597.5 -2797.5 34517.5 ; - RECT -1670.0 34875.0 -1485.0 34810.0 ; - RECT -2830.0 34875.0 -2645.0 34810.0 ; - RECT -2712.5 35235.0 -2862.5 35170.0 ; - RECT -1827.5 35235.0 -1452.5 35170.0 ; - RECT -2712.5 35045.0 -1827.5 34980.0 ; - RECT -1827.5 35235.0 -1692.5 35170.0 ; - RECT -1827.5 35045.0 -1692.5 34980.0 ; - RECT -1827.5 35045.0 -1692.5 34980.0 ; - RECT -1827.5 35235.0 -1692.5 35170.0 ; - RECT -2712.5 35235.0 -2577.5 35170.0 ; - RECT -2712.5 35045.0 -2577.5 34980.0 ; - RECT -2712.5 35045.0 -2577.5 34980.0 ; - RECT -2712.5 35235.0 -2577.5 35170.0 ; - RECT -1737.5 34875.0 -1602.5 34810.0 ; - RECT -2712.5 34875.0 -2577.5 34810.0 ; - RECT -2270.0 35177.5 -2135.0 35112.5 ; - RECT -2270.0 35177.5 -2135.0 35112.5 ; - RECT -2235.0 35012.5 -2170.0 34947.5 ; - RECT -1517.5 35302.5 -1452.5 34742.5 ; - RECT -2862.5 35302.5 -2797.5 34742.5 ; - RECT -1670.0 35435.0 -1485.0 35370.0 ; - RECT -2830.0 35435.0 -2645.0 35370.0 ; - RECT -2712.5 35795.0 -2862.5 35730.0 ; - RECT -1827.5 35795.0 -1452.5 35730.0 ; - RECT -2712.5 35605.0 -1827.5 35540.0 ; - RECT -1827.5 35795.0 -1692.5 35730.0 ; - RECT -1827.5 35605.0 -1692.5 35540.0 ; - RECT -1827.5 35605.0 -1692.5 35540.0 ; - RECT -1827.5 35795.0 -1692.5 35730.0 ; - RECT -2712.5 35795.0 -2577.5 35730.0 ; - RECT -2712.5 35605.0 -2577.5 35540.0 ; - RECT -2712.5 35605.0 -2577.5 35540.0 ; - RECT -2712.5 35795.0 -2577.5 35730.0 ; - RECT -1737.5 35435.0 -1602.5 35370.0 ; - RECT -2712.5 35435.0 -2577.5 35370.0 ; - RECT -2270.0 35737.5 -2135.0 35672.5 ; - RECT -2270.0 35737.5 -2135.0 35672.5 ; - RECT -2235.0 35572.5 -2170.0 35507.5 ; - RECT -1517.5 35862.5 -1452.5 35302.5 ; - RECT -2862.5 35862.5 -2797.5 35302.5 ; - RECT -2992.5 33080.0 -2797.5 33145.0 ; - RECT -3832.5 33080.0 -4207.5 33145.0 ; - RECT -3832.5 33460.0 -4207.5 33525.0 ; - RECT -3990.0 33820.0 -4175.0 33885.0 ; - RECT -2830.0 33820.0 -3015.0 33885.0 ; - RECT -3832.5 33080.0 -3967.5 33145.0 ; - RECT -3832.5 33270.0 -3967.5 33335.0 ; - RECT -3832.5 33270.0 -3967.5 33335.0 ; - RECT -3832.5 33080.0 -3967.5 33145.0 ; - RECT -3832.5 33270.0 -3967.5 33335.0 ; - RECT -3832.5 33460.0 -3967.5 33525.0 ; - RECT -3832.5 33460.0 -3967.5 33525.0 ; - RECT -3832.5 33270.0 -3967.5 33335.0 ; - RECT -3832.5 33460.0 -3967.5 33525.0 ; - RECT -3832.5 33650.0 -3967.5 33715.0 ; - RECT -3832.5 33650.0 -3967.5 33715.0 ; - RECT -3832.5 33460.0 -3967.5 33525.0 ; - RECT -2992.5 33080.0 -3127.5 33145.0 ; - RECT -2992.5 33270.0 -3127.5 33335.0 ; - RECT -2992.5 33270.0 -3127.5 33335.0 ; - RECT -2992.5 33080.0 -3127.5 33145.0 ; - RECT -2992.5 33270.0 -3127.5 33335.0 ; - RECT -2992.5 33460.0 -3127.5 33525.0 ; - RECT -2992.5 33460.0 -3127.5 33525.0 ; - RECT -2992.5 33270.0 -3127.5 33335.0 ; - RECT -2992.5 33460.0 -3127.5 33525.0 ; - RECT -2992.5 33650.0 -3127.5 33715.0 ; - RECT -2992.5 33650.0 -3127.5 33715.0 ; - RECT -2992.5 33460.0 -3127.5 33525.0 ; - RECT -3922.5 33820.0 -4057.5 33885.0 ; - RECT -2947.5 33820.0 -3082.5 33885.0 ; - RECT -3205.0 33655.0 -3270.0 33520.0 ; - RECT -3345.0 33465.0 -3410.0 33330.0 ; - RECT -3485.0 33275.0 -3550.0 33140.0 ; - RECT -3832.5 33270.0 -3967.5 33335.0 ; - RECT -3832.5 33650.0 -3967.5 33715.0 ; - RECT -2992.5 33650.0 -3127.5 33715.0 ; - RECT -3450.0 33650.0 -3585.0 33715.0 ; - RECT -3485.0 33140.0 -3550.0 33275.0 ; - RECT -3345.0 33330.0 -3410.0 33465.0 ; - RECT -3205.0 33520.0 -3270.0 33655.0 ; - RECT -3450.0 33650.0 -3585.0 33715.0 ; - RECT -4142.5 33012.5 -4207.5 34022.5 ; - RECT -2797.5 33012.5 -2862.5 34022.5 ; - RECT -3990.0 34450.0 -4175.0 34515.0 ; - RECT -2830.0 34450.0 -3015.0 34515.0 ; - RECT -2947.5 34090.0 -2797.5 34155.0 ; - RECT -3832.5 34090.0 -4207.5 34155.0 ; - RECT -2947.5 34280.0 -3832.5 34345.0 ; - RECT -3832.5 34090.0 -3967.5 34155.0 ; - RECT -3832.5 34280.0 -3967.5 34345.0 ; - RECT -3832.5 34280.0 -3967.5 34345.0 ; - RECT -3832.5 34090.0 -3967.5 34155.0 ; - RECT -2947.5 34090.0 -3082.5 34155.0 ; - RECT -2947.5 34280.0 -3082.5 34345.0 ; - RECT -2947.5 34280.0 -3082.5 34345.0 ; - RECT -2947.5 34090.0 -3082.5 34155.0 ; - RECT -3922.5 34450.0 -4057.5 34515.0 ; - RECT -2947.5 34450.0 -3082.5 34515.0 ; - RECT -3390.0 34147.5 -3525.0 34212.5 ; - RECT -3390.0 34147.5 -3525.0 34212.5 ; - RECT -3425.0 34312.5 -3490.0 34377.5 ; - RECT -4142.5 34022.5 -4207.5 34582.5 ; - RECT -2797.5 34022.5 -2862.5 34582.5 ; - RECT -3990.0 35010.0 -4175.0 35075.0 ; - RECT -2830.0 35010.0 -3015.0 35075.0 ; - RECT -2947.5 34650.0 -2797.5 34715.0 ; - RECT -3832.5 34650.0 -4207.5 34715.0 ; - RECT -2947.5 34840.0 -3832.5 34905.0 ; - RECT -3832.5 34650.0 -3967.5 34715.0 ; - RECT -3832.5 34840.0 -3967.5 34905.0 ; - RECT -3832.5 34840.0 -3967.5 34905.0 ; - RECT -3832.5 34650.0 -3967.5 34715.0 ; - RECT -2947.5 34650.0 -3082.5 34715.0 ; - RECT -2947.5 34840.0 -3082.5 34905.0 ; - RECT -2947.5 34840.0 -3082.5 34905.0 ; - RECT -2947.5 34650.0 -3082.5 34715.0 ; - RECT -3922.5 35010.0 -4057.5 35075.0 ; - RECT -2947.5 35010.0 -3082.5 35075.0 ; - RECT -3390.0 34707.5 -3525.0 34772.5 ; - RECT -3390.0 34707.5 -3525.0 34772.5 ; - RECT -3425.0 34872.5 -3490.0 34937.5 ; - RECT -4142.5 34582.5 -4207.5 35142.5 ; - RECT -2797.5 34582.5 -2862.5 35142.5 ; - RECT -3990.0 35570.0 -4175.0 35635.0 ; - RECT -2830.0 35570.0 -3015.0 35635.0 ; - RECT -2947.5 35210.0 -2797.5 35275.0 ; - RECT -3832.5 35210.0 -4207.5 35275.0 ; - RECT -2947.5 35400.0 -3832.5 35465.0 ; - RECT -3832.5 35210.0 -3967.5 35275.0 ; - RECT -3832.5 35400.0 -3967.5 35465.0 ; - RECT -3832.5 35400.0 -3967.5 35465.0 ; - RECT -3832.5 35210.0 -3967.5 35275.0 ; - RECT -2947.5 35210.0 -3082.5 35275.0 ; - RECT -2947.5 35400.0 -3082.5 35465.0 ; - RECT -2947.5 35400.0 -3082.5 35465.0 ; - RECT -2947.5 35210.0 -3082.5 35275.0 ; - RECT -3922.5 35570.0 -4057.5 35635.0 ; - RECT -2947.5 35570.0 -3082.5 35635.0 ; - RECT -3390.0 35267.5 -3525.0 35332.5 ; - RECT -3390.0 35267.5 -3525.0 35332.5 ; - RECT -3425.0 35432.5 -3490.0 35497.5 ; - RECT -4142.5 35142.5 -4207.5 35702.5 ; - RECT -2797.5 35142.5 -2862.5 35702.5 ; - RECT -2797.5 42745.0 -2862.5 44172.5 ; - RECT -2862.5 38435.0 -3150.0 38500.0 ; - RECT -2862.5 40845.0 -3150.0 40910.0 ; - RECT -2862.5 41125.0 -3150.0 41190.0 ; - RECT -2862.5 43535.0 -3150.0 43600.0 ; - RECT -2797.5 36390.0 -3240.0 36455.0 ; - RECT -3240.0 36390.0 -3945.0 36455.0 ; - RECT -4155.0 39640.0 -3240.0 39705.0 ; - RECT -4155.0 42330.0 -3240.0 42395.0 ; - RECT -4155.0 36950.0 -3240.0 37015.0 ; - RECT -2170.0 37962.5 -2235.0 38662.5 ; - RECT -2170.0 38155.0 -2235.0 38220.0 ; - RECT -2170.0 37962.5 -2235.0 38187.5 ; - RECT -2202.5 38155.0 -3150.0 38220.0 ; - RECT -1485.0 38025.0 -1710.0 38090.0 ; - RECT -1745.0 37155.0 -1810.0 37220.0 ; - RECT -2170.0 37155.0 -2235.0 37220.0 ; - RECT -1745.0 37187.5 -1810.0 37835.0 ; - RECT -1777.5 37155.0 -2202.5 37220.0 ; - RECT -2170.0 36857.5 -2235.0 37187.5 ; - RECT -2202.5 37155.0 -3002.5 37220.0 ; - RECT -3002.5 36557.5 -3425.0 36622.5 ; - RECT -2135.0 36792.5 -2270.0 36857.5 ; - RECT -2170.0 38662.5 -2235.0 38867.5 ; - RECT -1670.0 36555.0 -1485.0 36490.0 ; - RECT -2830.0 36555.0 -2645.0 36490.0 ; - RECT -2712.5 36915.0 -2862.5 36850.0 ; - RECT -1827.5 36915.0 -1452.5 36850.0 ; - RECT -2712.5 36725.0 -1827.5 36660.0 ; - RECT -1827.5 36915.0 -1692.5 36850.0 ; - RECT -1827.5 36725.0 -1692.5 36660.0 ; - RECT -1827.5 36725.0 -1692.5 36660.0 ; - RECT -1827.5 36915.0 -1692.5 36850.0 ; - RECT -2712.5 36915.0 -2577.5 36850.0 ; - RECT -2712.5 36725.0 -2577.5 36660.0 ; - RECT -2712.5 36725.0 -2577.5 36660.0 ; - RECT -2712.5 36915.0 -2577.5 36850.0 ; - RECT -1737.5 36555.0 -1602.5 36490.0 ; - RECT -2712.5 36555.0 -2577.5 36490.0 ; - RECT -2270.0 36857.5 -2135.0 36792.5 ; - RECT -2270.0 36857.5 -2135.0 36792.5 ; - RECT -2235.0 36692.5 -2170.0 36627.5 ; - RECT -1517.5 36982.5 -1452.5 36422.5 ; - RECT -2862.5 36982.5 -2797.5 36422.5 ; - RECT -1845.0 37835.0 -1710.0 37900.0 ; - RECT -1845.0 38025.0 -1710.0 38090.0 ; - RECT -1845.0 38025.0 -1710.0 38090.0 ; - RECT -1845.0 37835.0 -1710.0 37900.0 ; - RECT -2862.5 42680.0 -2797.5 42745.0 ; - RECT -172.5 42680.0 -107.5 42745.0 ; - RECT -2862.5 42582.5 -2797.5 42712.5 ; - RECT -2830.0 42680.0 -140.0 42745.0 ; - RECT -172.5 42582.5 -107.5 42712.5 ; - RECT -1300.0 39090.0 -1485.0 39155.0 ; - RECT -140.0 39090.0 -325.0 39155.0 ; - RECT -257.5 38730.0 -107.5 38795.0 ; - RECT -1142.5 38730.0 -1517.5 38795.0 ; - RECT -257.5 38920.0 -1142.5 38985.0 ; - RECT -1142.5 38730.0 -1277.5 38795.0 ; - RECT -1142.5 38920.0 -1277.5 38985.0 ; - RECT -1142.5 38920.0 -1277.5 38985.0 ; - RECT -1142.5 38730.0 -1277.5 38795.0 ; - RECT -257.5 38730.0 -392.5 38795.0 ; - RECT -257.5 38920.0 -392.5 38985.0 ; - RECT -257.5 38920.0 -392.5 38985.0 ; - RECT -257.5 38730.0 -392.5 38795.0 ; - RECT -1232.5 39090.0 -1367.5 39155.0 ; - RECT -257.5 39090.0 -392.5 39155.0 ; - RECT -700.0 38787.5 -835.0 38852.5 ; - RECT -700.0 38787.5 -835.0 38852.5 ; - RECT -735.0 38952.5 -800.0 39017.5 ; - RECT -1452.5 38662.5 -1517.5 39222.5 ; - RECT -107.5 38662.5 -172.5 39222.5 ; - RECT -1300.0 39650.0 -1485.0 39715.0 ; - RECT -140.0 39650.0 -325.0 39715.0 ; - RECT -257.5 39290.0 -107.5 39355.0 ; - RECT -1142.5 39290.0 -1517.5 39355.0 ; - RECT -257.5 39480.0 -1142.5 39545.0 ; - RECT -1142.5 39290.0 -1277.5 39355.0 ; - RECT -1142.5 39480.0 -1277.5 39545.0 ; - RECT -1142.5 39480.0 -1277.5 39545.0 ; - RECT -1142.5 39290.0 -1277.5 39355.0 ; - RECT -257.5 39290.0 -392.5 39355.0 ; - RECT -257.5 39480.0 -392.5 39545.0 ; - RECT -257.5 39480.0 -392.5 39545.0 ; - RECT -257.5 39290.0 -392.5 39355.0 ; - RECT -1232.5 39650.0 -1367.5 39715.0 ; - RECT -257.5 39650.0 -392.5 39715.0 ; - RECT -700.0 39347.5 -835.0 39412.5 ; - RECT -700.0 39347.5 -835.0 39412.5 ; - RECT -735.0 39512.5 -800.0 39577.5 ; - RECT -1452.5 39222.5 -1517.5 39782.5 ; - RECT -107.5 39222.5 -172.5 39782.5 ; - RECT -835.0 39347.5 -700.0 39412.5 ; - RECT -1300.0 40210.0 -1485.0 40275.0 ; - RECT -140.0 40210.0 -325.0 40275.0 ; - RECT -257.5 39850.0 -107.5 39915.0 ; - RECT -1142.5 39850.0 -1517.5 39915.0 ; - RECT -257.5 40040.0 -1142.5 40105.0 ; - RECT -1142.5 39850.0 -1277.5 39915.0 ; - RECT -1142.5 40040.0 -1277.5 40105.0 ; - RECT -1142.5 40040.0 -1277.5 40105.0 ; - RECT -1142.5 39850.0 -1277.5 39915.0 ; - RECT -257.5 39850.0 -392.5 39915.0 ; - RECT -257.5 40040.0 -392.5 40105.0 ; - RECT -257.5 40040.0 -392.5 40105.0 ; - RECT -257.5 39850.0 -392.5 39915.0 ; - RECT -1232.5 40210.0 -1367.5 40275.0 ; - RECT -257.5 40210.0 -392.5 40275.0 ; - RECT -700.0 39907.5 -835.0 39972.5 ; - RECT -700.0 39907.5 -835.0 39972.5 ; - RECT -735.0 40072.5 -800.0 40137.5 ; - RECT -1452.5 39782.5 -1517.5 40342.5 ; - RECT -107.5 39782.5 -172.5 40342.5 ; - RECT -835.0 39907.5 -700.0 39972.5 ; - RECT -1300.0 40770.0 -1485.0 40835.0 ; - RECT -140.0 40770.0 -325.0 40835.0 ; - RECT -257.5 40410.0 -107.5 40475.0 ; - RECT -1142.5 40410.0 -1517.5 40475.0 ; - RECT -257.5 40600.0 -1142.5 40665.0 ; - RECT -1142.5 40410.0 -1277.5 40475.0 ; - RECT -1142.5 40600.0 -1277.5 40665.0 ; - RECT -1142.5 40600.0 -1277.5 40665.0 ; - RECT -1142.5 40410.0 -1277.5 40475.0 ; - RECT -257.5 40410.0 -392.5 40475.0 ; - RECT -257.5 40600.0 -392.5 40665.0 ; - RECT -257.5 40600.0 -392.5 40665.0 ; - RECT -257.5 40410.0 -392.5 40475.0 ; - RECT -1232.5 40770.0 -1367.5 40835.0 ; - RECT -257.5 40770.0 -392.5 40835.0 ; - RECT -700.0 40467.5 -835.0 40532.5 ; - RECT -700.0 40467.5 -835.0 40532.5 ; - RECT -735.0 40632.5 -800.0 40697.5 ; - RECT -1452.5 40342.5 -1517.5 40902.5 ; - RECT -107.5 40342.5 -172.5 40902.5 ; - RECT -835.0 40467.5 -700.0 40532.5 ; - RECT -1300.0 41330.0 -1485.0 41395.0 ; - RECT -140.0 41330.0 -325.0 41395.0 ; - RECT -257.5 40970.0 -107.5 41035.0 ; - RECT -1142.5 40970.0 -1517.5 41035.0 ; - RECT -257.5 41160.0 -1142.5 41225.0 ; - RECT -1142.5 40970.0 -1277.5 41035.0 ; - RECT -1142.5 41160.0 -1277.5 41225.0 ; - RECT -1142.5 41160.0 -1277.5 41225.0 ; - RECT -1142.5 40970.0 -1277.5 41035.0 ; - RECT -257.5 40970.0 -392.5 41035.0 ; - RECT -257.5 41160.0 -392.5 41225.0 ; - RECT -257.5 41160.0 -392.5 41225.0 ; - RECT -257.5 40970.0 -392.5 41035.0 ; - RECT -1232.5 41330.0 -1367.5 41395.0 ; - RECT -257.5 41330.0 -392.5 41395.0 ; - RECT -700.0 41027.5 -835.0 41092.5 ; - RECT -700.0 41027.5 -835.0 41092.5 ; - RECT -735.0 41192.5 -800.0 41257.5 ; - RECT -1452.5 40902.5 -1517.5 41462.5 ; - RECT -107.5 40902.5 -172.5 41462.5 ; - RECT -835.0 41027.5 -700.0 41092.5 ; - RECT -1300.0 41890.0 -1485.0 41955.0 ; - RECT -140.0 41890.0 -325.0 41955.0 ; - RECT -257.5 41530.0 -107.5 41595.0 ; - RECT -1142.5 41530.0 -1517.5 41595.0 ; - RECT -257.5 41720.0 -1142.5 41785.0 ; - RECT -1142.5 41530.0 -1277.5 41595.0 ; - RECT -1142.5 41720.0 -1277.5 41785.0 ; - RECT -1142.5 41720.0 -1277.5 41785.0 ; - RECT -1142.5 41530.0 -1277.5 41595.0 ; - RECT -257.5 41530.0 -392.5 41595.0 ; - RECT -257.5 41720.0 -392.5 41785.0 ; - RECT -257.5 41720.0 -392.5 41785.0 ; - RECT -257.5 41530.0 -392.5 41595.0 ; - RECT -1232.5 41890.0 -1367.5 41955.0 ; - RECT -257.5 41890.0 -392.5 41955.0 ; - RECT -700.0 41587.5 -835.0 41652.5 ; - RECT -700.0 41587.5 -835.0 41652.5 ; - RECT -735.0 41752.5 -800.0 41817.5 ; - RECT -1452.5 41462.5 -1517.5 42022.5 ; - RECT -107.5 41462.5 -172.5 42022.5 ; - RECT -835.0 41587.5 -700.0 41652.5 ; - RECT -1300.0 42450.0 -1485.0 42515.0 ; - RECT -140.0 42450.0 -325.0 42515.0 ; - RECT -257.5 42090.0 -107.5 42155.0 ; - RECT -1142.5 42090.0 -1517.5 42155.0 ; - RECT -257.5 42280.0 -1142.5 42345.0 ; - RECT -1142.5 42090.0 -1277.5 42155.0 ; - RECT -1142.5 42280.0 -1277.5 42345.0 ; - RECT -1142.5 42280.0 -1277.5 42345.0 ; - RECT -1142.5 42090.0 -1277.5 42155.0 ; - RECT -257.5 42090.0 -392.5 42155.0 ; - RECT -257.5 42280.0 -392.5 42345.0 ; - RECT -257.5 42280.0 -392.5 42345.0 ; - RECT -257.5 42090.0 -392.5 42155.0 ; - RECT -1232.5 42450.0 -1367.5 42515.0 ; - RECT -257.5 42450.0 -392.5 42515.0 ; - RECT -700.0 42147.5 -835.0 42212.5 ; - RECT -700.0 42147.5 -835.0 42212.5 ; - RECT -735.0 42312.5 -800.0 42377.5 ; - RECT -1452.5 42022.5 -1517.5 42582.5 ; - RECT -107.5 42022.5 -172.5 42582.5 ; - RECT -835.0 42147.5 -700.0 42212.5 ; - RECT -1670.0 41595.0 -1485.0 41530.0 ; - RECT -2830.0 41595.0 -2645.0 41530.0 ; - RECT -2712.5 41955.0 -2862.5 41890.0 ; - RECT -1827.5 41955.0 -1452.5 41890.0 ; - RECT -2712.5 41765.0 -1827.5 41700.0 ; - RECT -1827.5 41955.0 -1692.5 41890.0 ; - RECT -1827.5 41765.0 -1692.5 41700.0 ; - RECT -1827.5 41765.0 -1692.5 41700.0 ; - RECT -1827.5 41955.0 -1692.5 41890.0 ; - RECT -2712.5 41955.0 -2577.5 41890.0 ; - RECT -2712.5 41765.0 -2577.5 41700.0 ; - RECT -2712.5 41765.0 -2577.5 41700.0 ; - RECT -2712.5 41955.0 -2577.5 41890.0 ; - RECT -1737.5 41595.0 -1602.5 41530.0 ; - RECT -2712.5 41595.0 -2577.5 41530.0 ; - RECT -2270.0 41897.5 -2135.0 41832.5 ; - RECT -2270.0 41897.5 -2135.0 41832.5 ; - RECT -2235.0 41732.5 -2170.0 41667.5 ; - RECT -1517.5 42022.5 -1452.5 41462.5 ; - RECT -2862.5 42022.5 -2797.5 41462.5 ; - RECT -2270.0 41832.5 -2135.0 41897.5 ; - RECT -1670.0 41035.0 -1485.0 40970.0 ; - RECT -2830.0 41035.0 -2645.0 40970.0 ; - RECT -2712.5 41395.0 -2862.5 41330.0 ; - RECT -1827.5 41395.0 -1452.5 41330.0 ; - RECT -2712.5 41205.0 -1827.5 41140.0 ; - RECT -1827.5 41395.0 -1692.5 41330.0 ; - RECT -1827.5 41205.0 -1692.5 41140.0 ; - RECT -1827.5 41205.0 -1692.5 41140.0 ; - RECT -1827.5 41395.0 -1692.5 41330.0 ; - RECT -2712.5 41395.0 -2577.5 41330.0 ; - RECT -2712.5 41205.0 -2577.5 41140.0 ; - RECT -2712.5 41205.0 -2577.5 41140.0 ; - RECT -2712.5 41395.0 -2577.5 41330.0 ; - RECT -1737.5 41035.0 -1602.5 40970.0 ; - RECT -2712.5 41035.0 -2577.5 40970.0 ; - RECT -2270.0 41337.5 -2135.0 41272.5 ; - RECT -2270.0 41337.5 -2135.0 41272.5 ; - RECT -2235.0 41172.5 -2170.0 41107.5 ; - RECT -1517.5 41462.5 -1452.5 40902.5 ; - RECT -2862.5 41462.5 -2797.5 40902.5 ; - RECT -2270.0 41272.5 -2135.0 41337.5 ; - RECT -1670.0 40475.0 -1485.0 40410.0 ; - RECT -2830.0 40475.0 -2645.0 40410.0 ; - RECT -2712.5 40835.0 -2862.5 40770.0 ; - RECT -1827.5 40835.0 -1452.5 40770.0 ; - RECT -2712.5 40645.0 -1827.5 40580.0 ; - RECT -1827.5 40835.0 -1692.5 40770.0 ; - RECT -1827.5 40645.0 -1692.5 40580.0 ; - RECT -1827.5 40645.0 -1692.5 40580.0 ; - RECT -1827.5 40835.0 -1692.5 40770.0 ; - RECT -2712.5 40835.0 -2577.5 40770.0 ; - RECT -2712.5 40645.0 -2577.5 40580.0 ; - RECT -2712.5 40645.0 -2577.5 40580.0 ; - RECT -2712.5 40835.0 -2577.5 40770.0 ; - RECT -1737.5 40475.0 -1602.5 40410.0 ; - RECT -2712.5 40475.0 -2577.5 40410.0 ; - RECT -2270.0 40777.5 -2135.0 40712.5 ; - RECT -2270.0 40777.5 -2135.0 40712.5 ; - RECT -2235.0 40612.5 -2170.0 40547.5 ; - RECT -1517.5 40902.5 -1452.5 40342.5 ; - RECT -2862.5 40902.5 -2797.5 40342.5 ; - RECT -2270.0 40712.5 -2135.0 40777.5 ; - RECT -1670.0 39915.0 -1485.0 39850.0 ; - RECT -2830.0 39915.0 -2645.0 39850.0 ; - RECT -2712.5 40275.0 -2862.5 40210.0 ; - RECT -1827.5 40275.0 -1452.5 40210.0 ; - RECT -2712.5 40085.0 -1827.5 40020.0 ; - RECT -1827.5 40275.0 -1692.5 40210.0 ; - RECT -1827.5 40085.0 -1692.5 40020.0 ; - RECT -1827.5 40085.0 -1692.5 40020.0 ; - RECT -1827.5 40275.0 -1692.5 40210.0 ; - RECT -2712.5 40275.0 -2577.5 40210.0 ; - RECT -2712.5 40085.0 -2577.5 40020.0 ; - RECT -2712.5 40085.0 -2577.5 40020.0 ; - RECT -2712.5 40275.0 -2577.5 40210.0 ; - RECT -1737.5 39915.0 -1602.5 39850.0 ; - RECT -2712.5 39915.0 -2577.5 39850.0 ; - RECT -2270.0 40217.5 -2135.0 40152.5 ; - RECT -2270.0 40217.5 -2135.0 40152.5 ; - RECT -2235.0 40052.5 -2170.0 39987.5 ; - RECT -1517.5 40342.5 -1452.5 39782.5 ; - RECT -2862.5 40342.5 -2797.5 39782.5 ; - RECT -2270.0 40152.5 -2135.0 40217.5 ; - RECT -1670.0 39355.0 -1485.0 39290.0 ; - RECT -2830.0 39355.0 -2645.0 39290.0 ; - RECT -2712.5 39715.0 -2862.5 39650.0 ; - RECT -1827.5 39715.0 -1452.5 39650.0 ; - RECT -2712.5 39525.0 -1827.5 39460.0 ; - RECT -1827.5 39715.0 -1692.5 39650.0 ; - RECT -1827.5 39525.0 -1692.5 39460.0 ; - RECT -1827.5 39525.0 -1692.5 39460.0 ; - RECT -1827.5 39715.0 -1692.5 39650.0 ; - RECT -2712.5 39715.0 -2577.5 39650.0 ; - RECT -2712.5 39525.0 -2577.5 39460.0 ; - RECT -2712.5 39525.0 -2577.5 39460.0 ; - RECT -2712.5 39715.0 -2577.5 39650.0 ; - RECT -1737.5 39355.0 -1602.5 39290.0 ; - RECT -2712.5 39355.0 -2577.5 39290.0 ; - RECT -2270.0 39657.5 -2135.0 39592.5 ; - RECT -2270.0 39657.5 -2135.0 39592.5 ; - RECT -2235.0 39492.5 -2170.0 39427.5 ; - RECT -1517.5 39782.5 -1452.5 39222.5 ; - RECT -2862.5 39782.5 -2797.5 39222.5 ; - RECT -2270.0 39592.5 -2135.0 39657.5 ; - RECT -1670.0 38795.0 -1485.0 38730.0 ; - RECT -2830.0 38795.0 -2645.0 38730.0 ; - RECT -2712.5 39155.0 -2862.5 39090.0 ; - RECT -1827.5 39155.0 -1452.5 39090.0 ; - RECT -2712.5 38965.0 -1827.5 38900.0 ; - RECT -1827.5 39155.0 -1692.5 39090.0 ; - RECT -1827.5 38965.0 -1692.5 38900.0 ; - RECT -1827.5 38965.0 -1692.5 38900.0 ; - RECT -1827.5 39155.0 -1692.5 39090.0 ; - RECT -2712.5 39155.0 -2577.5 39090.0 ; - RECT -2712.5 38965.0 -2577.5 38900.0 ; - RECT -2712.5 38965.0 -2577.5 38900.0 ; - RECT -2712.5 39155.0 -2577.5 39090.0 ; - RECT -1737.5 38795.0 -1602.5 38730.0 ; - RECT -2712.5 38795.0 -2577.5 38730.0 ; - RECT -2270.0 39097.5 -2135.0 39032.5 ; - RECT -2270.0 39097.5 -2135.0 39032.5 ; - RECT -2235.0 38932.5 -2170.0 38867.5 ; - RECT -1517.5 39222.5 -1452.5 38662.5 ; - RECT -2862.5 39222.5 -2797.5 38662.5 ; - RECT -2270.0 39032.5 -2135.0 39097.5 ; - RECT -835.0 38952.5 -700.0 39017.5 ; - RECT -835.0 40632.5 -700.0 40697.5 ; - RECT -835.0 42312.5 -700.0 42377.5 ; - RECT -2270.0 40547.5 -2135.0 40612.5 ; - RECT -835.0 38787.5 -700.0 38852.5 ; - RECT -2235.0 38662.5 -2170.0 38867.5 ; - RECT -1517.5 38662.5 -1452.5 42582.5 ; - RECT -2862.5 38662.5 -2797.5 42582.5 ; - RECT -172.5 38662.5 -107.5 42582.5 ; - RECT -3240.0 38327.5 -3950.0 36982.5 ; - RECT -3240.0 38327.5 -3945.0 39672.5 ; - RECT -3240.0 41017.5 -3945.0 39672.5 ; - RECT -3240.0 41017.5 -3945.0 42362.5 ; - RECT -3240.0 43707.5 -3945.0 42362.5 ; - RECT -3150.0 38435.0 -4035.0 38500.0 ; - RECT -3150.0 40845.0 -4035.0 40910.0 ; - RECT -3150.0 41125.0 -4035.0 41190.0 ; - RECT -3150.0 43535.0 -4035.0 43600.0 ; - RECT -3150.0 39640.0 -4035.0 39705.0 ; - RECT -3150.0 42330.0 -4035.0 42395.0 ; - RECT -3150.0 38295.0 -4035.0 38360.0 ; - RECT -3150.0 40985.0 -4035.0 41050.0 ; - RECT -3150.0 43675.0 -4035.0 43740.0 ; - RECT -2830.0 38400.0 -2895.0 38535.0 ; - RECT -2830.0 40810.0 -2895.0 40945.0 ; - RECT -2830.0 41090.0 -2895.0 41225.0 ; - RECT -2830.0 43500.0 -2895.0 43635.0 ; - RECT -2832.5 38662.5 -2897.5 38797.5 ; - RECT -2797.5 36287.5 -2862.5 36422.5 ; - RECT -3307.5 36390.0 -3172.5 36455.0 ; - RECT -4012.5 36390.0 -3877.5 36455.0 ; - RECT -2170.0 37895.0 -2235.0 38030.0 ; - RECT -3070.0 37155.0 -2935.0 37220.0 ; - RECT -3070.0 36557.5 -2935.0 36622.5 ; - RECT -3492.5 36557.5 -3357.5 36622.5 ; - RECT -700.0 35862.5 -765.0 38787.5 ; - RECT -2170.0 35862.5 -2235.0 36627.5 ; - RECT -4155.0 35862.5 -4220.0 43795.0 ; - RECT -1452.5 35862.5 -1517.5 38662.5 ; - RECT -2797.5 35862.5 -2862.5 36422.5 ; - RECT -107.5 35862.5 -172.5 38662.5 ; - RECT -720.0 30710.0 -785.0 30575.0 ; - RECT -720.0 26630.0 -785.0 26495.0 ; - RECT -1657.5 24062.5 -1722.5 23927.5 ; - RECT -2212.5 30710.0 -2277.5 30575.0 ; - RECT -2427.5 31120.0 -2492.5 30985.0 ; - RECT -2157.5 33657.5 -2222.5 33522.5 ; - RECT -2372.5 33915.0 -2437.5 33780.0 ; - RECT -795.0 32145.0 -860.0 32010.0 ; - RECT -655.0 31940.0 -720.0 31805.0 ; - RECT -515.0 31325.0 -580.0 31190.0 ; - RECT -3485.0 32145.0 -3550.0 32010.0 ; - RECT -3345.0 31325.0 -3410.0 31190.0 ; - RECT -3205.0 31530.0 -3270.0 31395.0 ; - RECT -2177.5 33340.0 -2312.5 33405.0 ; - RECT -2122.5 34485.0 -2257.5 34550.0 ; - RECT -3390.0 35670.0 -3525.0 35735.0 ; - RECT -2135.0 34710.0 -2270.0 34775.0 ; - RECT -107.5 30915.0 -172.5 30780.0 ; - RECT -1452.5 31735.0 -1517.5 31600.0 ; - RECT -2797.5 30915.0 -2862.5 30780.0 ; - RECT -4142.5 31735.0 -4207.5 31600.0 ; - RECT -700.0 23757.5 -835.0 23947.5 ; - RECT -1452.5 23757.5 -1517.5 23822.5 ; - RECT -107.5 23757.5 -172.5 23822.5 ; + RECT 21.53 23.3975 21.595 23.5325 ; + RECT 22.045 23.3975 22.115 23.5325 ; + RECT 21.425 23.2325 21.595 23.2975 ; + RECT 21.285 22.8575 22.17 22.9225 ; + RECT 21.34 23.8625 21.41 24.0625 ; + RECT 22.045 23.8625 22.11 23.9975 ; + RECT 21.5975 23.0075 21.6625 23.1425 ; + RECT 21.78 23.0075 21.845 23.1425 ; + RECT 22.045 23.3975 22.11 23.5325 ; + RECT 22.0125 22.7175 22.1475 22.7825 ; + RECT 21.7725 23.5975 21.9075 23.6625 ; + RECT 21.995 22.86 22.0475 22.9225 ; + RECT 21.5475 23.7475 21.6825 23.8125 ; + RECT 21.425 23.0075 21.495 23.2975 ; + RECT 21.53 23.2325 21.595 23.9725 ; + RECT 22.045 23.8625 22.115 24.0625 ; + RECT 21.965 23.0075 22.03 23.1425 ; + RECT 21.29 22.86 21.3425 22.9225 ; + RECT 21.285 24.0625 22.17 24.1275 ; + RECT 21.3425 23.5 21.4075 23.635 ; + RECT 21.66 22.7175 21.795 22.7825 ; + RECT 21.965 23.0075 22.035 23.2975 ; + RECT 21.6425 22.8575 21.7775 22.9225 ; + RECT 21.345 23.8625 21.41 23.9975 ; + RECT 21.86 23.2325 22.035 23.2975 ; + RECT 21.86 23.8625 21.925 23.9975 ; + RECT 21.285 22.7175 22.17 22.7825 ; + RECT 22.0475 23.5 22.1125 23.635 ; + RECT 21.34 23.3975 21.41 23.5325 ; + RECT 21.61 23.0075 21.675 23.1425 ; + RECT 21.86 23.3975 21.925 23.5325 ; + RECT 21.7925 23.0075 21.8575 23.1425 ; + RECT 21.345 23.3975 21.41 23.5325 ; + RECT 21.53 23.8625 21.595 23.9975 ; + RECT 21.86 23.2325 21.925 23.8625 ; + RECT 21.3075 22.7175 21.4425 22.7825 ; + RECT 21.425 23.0075 21.49 23.1425 ; + RECT 21.53 24.7925 21.595 24.6575 ; + RECT 22.045 24.7925 22.115 24.6575 ; + RECT 21.425 24.9575 21.595 24.8925 ; + RECT 21.285 25.3325 22.17 25.2675 ; + RECT 21.34 24.3275 21.41 24.1275 ; + RECT 22.045 24.3275 22.11 24.1925 ; + RECT 21.5975 25.1825 21.6625 25.0475 ; + RECT 21.78 25.1825 21.845 25.0475 ; + RECT 22.045 24.7925 22.11 24.6575 ; + RECT 22.0125 25.4725 22.1475 25.4075 ; + RECT 21.7725 24.5925 21.9075 24.5275 ; + RECT 21.995 25.33 22.0475 25.2675 ; + RECT 21.5475 24.4425 21.6825 24.3775 ; + RECT 21.425 25.1825 21.495 24.8925 ; + RECT 21.53 24.9575 21.595 24.2175 ; + RECT 22.045 24.3275 22.115 24.1275 ; + RECT 21.965 25.1825 22.03 25.0475 ; + RECT 21.29 25.33 21.3425 25.2675 ; + RECT 21.285 24.1275 22.17 24.0625 ; + RECT 21.3425 24.69 21.4075 24.555 ; + RECT 21.66 25.4725 21.795 25.4075 ; + RECT 21.965 25.1825 22.035 24.8925 ; + RECT 21.6425 25.3325 21.7775 25.2675 ; + RECT 21.345 24.3275 21.41 24.1925 ; + RECT 21.86 24.9575 22.035 24.8925 ; + RECT 21.86 24.3275 21.925 24.1925 ; + RECT 21.285 25.4725 22.17 25.4075 ; + RECT 22.0475 24.69 22.1125 24.555 ; + RECT 21.34 24.7925 21.41 24.6575 ; + RECT 21.61 25.1825 21.675 25.0475 ; + RECT 21.86 24.7925 21.925 24.6575 ; + RECT 21.7925 25.1825 21.8575 25.0475 ; + RECT 21.345 24.7925 21.41 24.6575 ; + RECT 21.53 24.3275 21.595 24.1925 ; + RECT 21.86 24.9575 21.925 24.3275 ; + RECT 21.3075 25.4725 21.4425 25.4075 ; + RECT 21.425 25.1825 21.49 25.0475 ; + RECT 21.53 26.0875 21.595 26.2225 ; + RECT 22.045 26.0875 22.115 26.2225 ; + RECT 21.425 25.9225 21.595 25.9875 ; + RECT 21.285 25.5475 22.17 25.6125 ; + RECT 21.34 26.5525 21.41 26.7525 ; + RECT 22.045 26.5525 22.11 26.6875 ; + RECT 21.5975 25.6975 21.6625 25.8325 ; + RECT 21.78 25.6975 21.845 25.8325 ; + RECT 22.045 26.0875 22.11 26.2225 ; + RECT 22.0125 25.4075 22.1475 25.4725 ; + RECT 21.7725 26.2875 21.9075 26.3525 ; + RECT 21.995 25.55 22.0475 25.6125 ; + RECT 21.5475 26.4375 21.6825 26.5025 ; + RECT 21.425 25.6975 21.495 25.9875 ; + RECT 21.53 25.9225 21.595 26.6625 ; + RECT 22.045 26.5525 22.115 26.7525 ; + RECT 21.965 25.6975 22.03 25.8325 ; + RECT 21.29 25.55 21.3425 25.6125 ; + RECT 21.285 26.7525 22.17 26.8175 ; + RECT 21.3425 26.19 21.4075 26.325 ; + RECT 21.66 25.4075 21.795 25.4725 ; + RECT 21.965 25.6975 22.035 25.9875 ; + RECT 21.6425 25.5475 21.7775 25.6125 ; + RECT 21.345 26.5525 21.41 26.6875 ; + RECT 21.86 25.9225 22.035 25.9875 ; + RECT 21.86 26.5525 21.925 26.6875 ; + RECT 21.285 25.4075 22.17 25.4725 ; + RECT 22.0475 26.19 22.1125 26.325 ; + RECT 21.34 26.0875 21.41 26.2225 ; + RECT 21.61 25.6975 21.675 25.8325 ; + RECT 21.86 26.0875 21.925 26.2225 ; + RECT 21.7925 25.6975 21.8575 25.8325 ; + RECT 21.345 26.0875 21.41 26.2225 ; + RECT 21.53 26.5525 21.595 26.6875 ; + RECT 21.86 25.9225 21.925 26.5525 ; + RECT 21.3075 25.4075 21.4425 25.4725 ; + RECT 21.425 25.6975 21.49 25.8325 ; + RECT 21.53 27.4825 21.595 27.3475 ; + RECT 22.045 27.4825 22.115 27.3475 ; + RECT 21.425 27.6475 21.595 27.5825 ; + RECT 21.285 28.0225 22.17 27.9575 ; + RECT 21.34 27.0175 21.41 26.8175 ; + RECT 22.045 27.0175 22.11 26.8825 ; + RECT 21.5975 27.8725 21.6625 27.7375 ; + RECT 21.78 27.8725 21.845 27.7375 ; + RECT 22.045 27.4825 22.11 27.3475 ; + RECT 22.0125 28.1625 22.1475 28.0975 ; + RECT 21.7725 27.2825 21.9075 27.2175 ; + RECT 21.995 28.02 22.0475 27.9575 ; + RECT 21.5475 27.1325 21.6825 27.0675 ; + RECT 21.425 27.8725 21.495 27.5825 ; + RECT 21.53 27.6475 21.595 26.9075 ; + RECT 22.045 27.0175 22.115 26.8175 ; + RECT 21.965 27.8725 22.03 27.7375 ; + RECT 21.29 28.02 21.3425 27.9575 ; + RECT 21.285 26.8175 22.17 26.7525 ; + RECT 21.3425 27.38 21.4075 27.245 ; + RECT 21.66 28.1625 21.795 28.0975 ; + RECT 21.965 27.8725 22.035 27.5825 ; + RECT 21.6425 28.0225 21.7775 27.9575 ; + RECT 21.345 27.0175 21.41 26.8825 ; + RECT 21.86 27.6475 22.035 27.5825 ; + RECT 21.86 27.0175 21.925 26.8825 ; + RECT 21.285 28.1625 22.17 28.0975 ; + RECT 22.0475 27.38 22.1125 27.245 ; + RECT 21.34 27.4825 21.41 27.3475 ; + RECT 21.61 27.8725 21.675 27.7375 ; + RECT 21.86 27.4825 21.925 27.3475 ; + RECT 21.7925 27.8725 21.8575 27.7375 ; + RECT 21.345 27.4825 21.41 27.3475 ; + RECT 21.53 27.0175 21.595 26.8825 ; + RECT 21.86 27.6475 21.925 27.0175 ; + RECT 21.3075 28.1625 21.4425 28.0975 ; + RECT 21.425 27.8725 21.49 27.7375 ; + RECT 21.53 28.7775 21.595 28.9125 ; + RECT 22.045 28.7775 22.115 28.9125 ; + RECT 21.425 28.6125 21.595 28.6775 ; + RECT 21.285 28.2375 22.17 28.3025 ; + RECT 21.34 29.2425 21.41 29.4425 ; + RECT 22.045 29.2425 22.11 29.3775 ; + RECT 21.5975 28.3875 21.6625 28.5225 ; + RECT 21.78 28.3875 21.845 28.5225 ; + RECT 22.045 28.7775 22.11 28.9125 ; + RECT 22.0125 28.0975 22.1475 28.1625 ; + RECT 21.7725 28.9775 21.9075 29.0425 ; + RECT 21.995 28.24 22.0475 28.3025 ; + RECT 21.5475 29.1275 21.6825 29.1925 ; + RECT 21.425 28.3875 21.495 28.6775 ; + RECT 21.53 28.6125 21.595 29.3525 ; + RECT 22.045 29.2425 22.115 29.4425 ; + RECT 21.965 28.3875 22.03 28.5225 ; + RECT 21.29 28.24 21.3425 28.3025 ; + RECT 21.285 29.4425 22.17 29.5075 ; + RECT 21.3425 28.88 21.4075 29.015 ; + RECT 21.66 28.0975 21.795 28.1625 ; + RECT 21.965 28.3875 22.035 28.6775 ; + RECT 21.6425 28.2375 21.7775 28.3025 ; + RECT 21.345 29.2425 21.41 29.3775 ; + RECT 21.86 28.6125 22.035 28.6775 ; + RECT 21.86 29.2425 21.925 29.3775 ; + RECT 21.285 28.0975 22.17 28.1625 ; + RECT 22.0475 28.88 22.1125 29.015 ; + RECT 21.34 28.7775 21.41 28.9125 ; + RECT 21.61 28.3875 21.675 28.5225 ; + RECT 21.86 28.7775 21.925 28.9125 ; + RECT 21.7925 28.3875 21.8575 28.5225 ; + RECT 21.345 28.7775 21.41 28.9125 ; + RECT 21.53 29.2425 21.595 29.3775 ; + RECT 21.86 28.6125 21.925 29.2425 ; + RECT 21.3075 28.0975 21.4425 28.1625 ; + RECT 21.425 28.3875 21.49 28.5225 ; + RECT 21.53 30.1725 21.595 30.0375 ; + RECT 22.045 30.1725 22.115 30.0375 ; + RECT 21.425 30.3375 21.595 30.2725 ; + RECT 21.285 30.7125 22.17 30.6475 ; + RECT 21.34 29.7075 21.41 29.5075 ; + RECT 22.045 29.7075 22.11 29.5725 ; + RECT 21.5975 30.5625 21.6625 30.4275 ; + RECT 21.78 30.5625 21.845 30.4275 ; + RECT 22.045 30.1725 22.11 30.0375 ; + RECT 22.0125 30.8525 22.1475 30.7875 ; + RECT 21.7725 29.9725 21.9075 29.9075 ; + RECT 21.995 30.71 22.0475 30.6475 ; + RECT 21.5475 29.8225 21.6825 29.7575 ; + RECT 21.425 30.5625 21.495 30.2725 ; + RECT 21.53 30.3375 21.595 29.5975 ; + RECT 22.045 29.7075 22.115 29.5075 ; + RECT 21.965 30.5625 22.03 30.4275 ; + RECT 21.29 30.71 21.3425 30.6475 ; + RECT 21.285 29.5075 22.17 29.4425 ; + RECT 21.3425 30.07 21.4075 29.935 ; + RECT 21.66 30.8525 21.795 30.7875 ; + RECT 21.965 30.5625 22.035 30.2725 ; + RECT 21.6425 30.7125 21.7775 30.6475 ; + RECT 21.345 29.7075 21.41 29.5725 ; + RECT 21.86 30.3375 22.035 30.2725 ; + RECT 21.86 29.7075 21.925 29.5725 ; + RECT 21.285 30.8525 22.17 30.7875 ; + RECT 22.0475 30.07 22.1125 29.935 ; + RECT 21.34 30.1725 21.41 30.0375 ; + RECT 21.61 30.5625 21.675 30.4275 ; + RECT 21.86 30.1725 21.925 30.0375 ; + RECT 21.7925 30.5625 21.8575 30.4275 ; + RECT 21.345 30.1725 21.41 30.0375 ; + RECT 21.53 29.7075 21.595 29.5725 ; + RECT 21.86 30.3375 21.925 29.7075 ; + RECT 21.3075 30.8525 21.4425 30.7875 ; + RECT 21.425 30.5625 21.49 30.4275 ; + RECT 21.53 31.4675 21.595 31.6025 ; + RECT 22.045 31.4675 22.115 31.6025 ; + RECT 21.425 31.3025 21.595 31.3675 ; + RECT 21.285 30.9275 22.17 30.9925 ; + RECT 21.34 31.9325 21.41 32.1325 ; + RECT 22.045 31.9325 22.11 32.0675 ; + RECT 21.5975 31.0775 21.6625 31.2125 ; + RECT 21.78 31.0775 21.845 31.2125 ; + RECT 22.045 31.4675 22.11 31.6025 ; + RECT 22.0125 30.7875 22.1475 30.8525 ; + RECT 21.7725 31.6675 21.9075 31.7325 ; + RECT 21.995 30.93 22.0475 30.9925 ; + RECT 21.5475 31.8175 21.6825 31.8825 ; + RECT 21.425 31.0775 21.495 31.3675 ; + RECT 21.53 31.3025 21.595 32.0425 ; + RECT 22.045 31.9325 22.115 32.1325 ; + RECT 21.965 31.0775 22.03 31.2125 ; + RECT 21.29 30.93 21.3425 30.9925 ; + RECT 21.285 32.1325 22.17 32.1975 ; + RECT 21.3425 31.57 21.4075 31.705 ; + RECT 21.66 30.7875 21.795 30.8525 ; + RECT 21.965 31.0775 22.035 31.3675 ; + RECT 21.6425 30.9275 21.7775 30.9925 ; + RECT 21.345 31.9325 21.41 32.0675 ; + RECT 21.86 31.3025 22.035 31.3675 ; + RECT 21.86 31.9325 21.925 32.0675 ; + RECT 21.285 30.7875 22.17 30.8525 ; + RECT 22.0475 31.57 22.1125 31.705 ; + RECT 21.34 31.4675 21.41 31.6025 ; + RECT 21.61 31.0775 21.675 31.2125 ; + RECT 21.86 31.4675 21.925 31.6025 ; + RECT 21.7925 31.0775 21.8575 31.2125 ; + RECT 21.345 31.4675 21.41 31.6025 ; + RECT 21.53 31.9325 21.595 32.0675 ; + RECT 21.86 31.3025 21.925 31.9325 ; + RECT 21.3075 30.7875 21.4425 30.8525 ; + RECT 21.425 31.0775 21.49 31.2125 ; + RECT 21.53 32.8625 21.595 32.7275 ; + RECT 22.045 32.8625 22.115 32.7275 ; + RECT 21.425 33.0275 21.595 32.9625 ; + RECT 21.285 33.4025 22.17 33.3375 ; + RECT 21.34 32.3975 21.41 32.1975 ; + RECT 22.045 32.3975 22.11 32.2625 ; + RECT 21.5975 33.2525 21.6625 33.1175 ; + RECT 21.78 33.2525 21.845 33.1175 ; + RECT 22.045 32.8625 22.11 32.7275 ; + RECT 22.0125 33.5425 22.1475 33.4775 ; + RECT 21.7725 32.6625 21.9075 32.5975 ; + RECT 21.995 33.4 22.0475 33.3375 ; + RECT 21.5475 32.5125 21.6825 32.4475 ; + RECT 21.425 33.2525 21.495 32.9625 ; + RECT 21.53 33.0275 21.595 32.2875 ; + RECT 22.045 32.3975 22.115 32.1975 ; + RECT 21.965 33.2525 22.03 33.1175 ; + RECT 21.29 33.4 21.3425 33.3375 ; + RECT 21.285 32.1975 22.17 32.1325 ; + RECT 21.3425 32.76 21.4075 32.625 ; + RECT 21.66 33.5425 21.795 33.4775 ; + RECT 21.965 33.2525 22.035 32.9625 ; + RECT 21.6425 33.4025 21.7775 33.3375 ; + RECT 21.345 32.3975 21.41 32.2625 ; + RECT 21.86 33.0275 22.035 32.9625 ; + RECT 21.86 32.3975 21.925 32.2625 ; + RECT 21.285 33.5425 22.17 33.4775 ; + RECT 22.0475 32.76 22.1125 32.625 ; + RECT 21.34 32.8625 21.41 32.7275 ; + RECT 21.61 33.2525 21.675 33.1175 ; + RECT 21.86 32.8625 21.925 32.7275 ; + RECT 21.7925 33.2525 21.8575 33.1175 ; + RECT 21.345 32.8625 21.41 32.7275 ; + RECT 21.53 32.3975 21.595 32.2625 ; + RECT 21.86 33.0275 21.925 32.3975 ; + RECT 21.3075 33.5425 21.4425 33.4775 ; + RECT 21.425 33.2525 21.49 33.1175 ; + RECT 21.53 34.1575 21.595 34.2925 ; + RECT 22.045 34.1575 22.115 34.2925 ; + RECT 21.425 33.9925 21.595 34.0575 ; + RECT 21.285 33.6175 22.17 33.6825 ; + RECT 21.34 34.6225 21.41 34.8225 ; + RECT 22.045 34.6225 22.11 34.7575 ; + RECT 21.5975 33.7675 21.6625 33.9025 ; + RECT 21.78 33.7675 21.845 33.9025 ; + RECT 22.045 34.1575 22.11 34.2925 ; + RECT 22.0125 33.4775 22.1475 33.5425 ; + RECT 21.7725 34.3575 21.9075 34.4225 ; + RECT 21.995 33.62 22.0475 33.6825 ; + RECT 21.5475 34.5075 21.6825 34.5725 ; + RECT 21.425 33.7675 21.495 34.0575 ; + RECT 21.53 33.9925 21.595 34.7325 ; + RECT 22.045 34.6225 22.115 34.8225 ; + RECT 21.965 33.7675 22.03 33.9025 ; + RECT 21.29 33.62 21.3425 33.6825 ; + RECT 21.285 34.8225 22.17 34.8875 ; + RECT 21.3425 34.26 21.4075 34.395 ; + RECT 21.66 33.4775 21.795 33.5425 ; + RECT 21.965 33.7675 22.035 34.0575 ; + RECT 21.6425 33.6175 21.7775 33.6825 ; + RECT 21.345 34.6225 21.41 34.7575 ; + RECT 21.86 33.9925 22.035 34.0575 ; + RECT 21.86 34.6225 21.925 34.7575 ; + RECT 21.285 33.4775 22.17 33.5425 ; + RECT 22.0475 34.26 22.1125 34.395 ; + RECT 21.34 34.1575 21.41 34.2925 ; + RECT 21.61 33.7675 21.675 33.9025 ; + RECT 21.86 34.1575 21.925 34.2925 ; + RECT 21.7925 33.7675 21.8575 33.9025 ; + RECT 21.345 34.1575 21.41 34.2925 ; + RECT 21.53 34.6225 21.595 34.7575 ; + RECT 21.86 33.9925 21.925 34.6225 ; + RECT 21.3075 33.4775 21.4425 33.5425 ; + RECT 21.425 33.7675 21.49 33.9025 ; + RECT 21.53 35.5525 21.595 35.4175 ; + RECT 22.045 35.5525 22.115 35.4175 ; + RECT 21.425 35.7175 21.595 35.6525 ; + RECT 21.285 36.0925 22.17 36.0275 ; + RECT 21.34 35.0875 21.41 34.8875 ; + RECT 22.045 35.0875 22.11 34.9525 ; + RECT 21.5975 35.9425 21.6625 35.8075 ; + RECT 21.78 35.9425 21.845 35.8075 ; + RECT 22.045 35.5525 22.11 35.4175 ; + RECT 22.0125 36.2325 22.1475 36.1675 ; + RECT 21.7725 35.3525 21.9075 35.2875 ; + RECT 21.995 36.09 22.0475 36.0275 ; + RECT 21.5475 35.2025 21.6825 35.1375 ; + RECT 21.425 35.9425 21.495 35.6525 ; + RECT 21.53 35.7175 21.595 34.9775 ; + RECT 22.045 35.0875 22.115 34.8875 ; + RECT 21.965 35.9425 22.03 35.8075 ; + RECT 21.29 36.09 21.3425 36.0275 ; + RECT 21.285 34.8875 22.17 34.8225 ; + RECT 21.3425 35.45 21.4075 35.315 ; + RECT 21.66 36.2325 21.795 36.1675 ; + RECT 21.965 35.9425 22.035 35.6525 ; + RECT 21.6425 36.0925 21.7775 36.0275 ; + RECT 21.345 35.0875 21.41 34.9525 ; + RECT 21.86 35.7175 22.035 35.6525 ; + RECT 21.86 35.0875 21.925 34.9525 ; + RECT 21.285 36.2325 22.17 36.1675 ; + RECT 22.0475 35.45 22.1125 35.315 ; + RECT 21.34 35.5525 21.41 35.4175 ; + RECT 21.61 35.9425 21.675 35.8075 ; + RECT 21.86 35.5525 21.925 35.4175 ; + RECT 21.7925 35.9425 21.8575 35.8075 ; + RECT 21.345 35.5525 21.41 35.4175 ; + RECT 21.53 35.0875 21.595 34.9525 ; + RECT 21.86 35.7175 21.925 35.0875 ; + RECT 21.3075 36.2325 21.4425 36.1675 ; + RECT 21.425 35.9425 21.49 35.8075 ; + RECT 21.53 36.8475 21.595 36.9825 ; + RECT 22.045 36.8475 22.115 36.9825 ; + RECT 21.425 36.6825 21.595 36.7475 ; + RECT 21.285 36.3075 22.17 36.3725 ; + RECT 21.34 37.3125 21.41 37.5125 ; + RECT 22.045 37.3125 22.11 37.4475 ; + RECT 21.5975 36.4575 21.6625 36.5925 ; + RECT 21.78 36.4575 21.845 36.5925 ; + RECT 22.045 36.8475 22.11 36.9825 ; + RECT 22.0125 36.1675 22.1475 36.2325 ; + RECT 21.7725 37.0475 21.9075 37.1125 ; + RECT 21.995 36.31 22.0475 36.3725 ; + RECT 21.5475 37.1975 21.6825 37.2625 ; + RECT 21.425 36.4575 21.495 36.7475 ; + RECT 21.53 36.6825 21.595 37.4225 ; + RECT 22.045 37.3125 22.115 37.5125 ; + RECT 21.965 36.4575 22.03 36.5925 ; + RECT 21.29 36.31 21.3425 36.3725 ; + RECT 21.285 37.5125 22.17 37.5775 ; + RECT 21.3425 36.95 21.4075 37.085 ; + RECT 21.66 36.1675 21.795 36.2325 ; + RECT 21.965 36.4575 22.035 36.7475 ; + RECT 21.6425 36.3075 21.7775 36.3725 ; + RECT 21.345 37.3125 21.41 37.4475 ; + RECT 21.86 36.6825 22.035 36.7475 ; + RECT 21.86 37.3125 21.925 37.4475 ; + RECT 21.285 36.1675 22.17 36.2325 ; + RECT 22.0475 36.95 22.1125 37.085 ; + RECT 21.34 36.8475 21.41 36.9825 ; + RECT 21.61 36.4575 21.675 36.5925 ; + RECT 21.86 36.8475 21.925 36.9825 ; + RECT 21.7925 36.4575 21.8575 36.5925 ; + RECT 21.345 36.8475 21.41 36.9825 ; + RECT 21.53 37.3125 21.595 37.4475 ; + RECT 21.86 36.6825 21.925 37.3125 ; + RECT 21.3075 36.1675 21.4425 36.2325 ; + RECT 21.425 36.4575 21.49 36.5925 ; + RECT 21.53 38.2425 21.595 38.1075 ; + RECT 22.045 38.2425 22.115 38.1075 ; + RECT 21.425 38.4075 21.595 38.3425 ; + RECT 21.285 38.7825 22.17 38.7175 ; + RECT 21.34 37.7775 21.41 37.5775 ; + RECT 22.045 37.7775 22.11 37.6425 ; + RECT 21.5975 38.6325 21.6625 38.4975 ; + RECT 21.78 38.6325 21.845 38.4975 ; + RECT 22.045 38.2425 22.11 38.1075 ; + RECT 22.0125 38.9225 22.1475 38.8575 ; + RECT 21.7725 38.0425 21.9075 37.9775 ; + RECT 21.995 38.78 22.0475 38.7175 ; + RECT 21.5475 37.8925 21.6825 37.8275 ; + RECT 21.425 38.6325 21.495 38.3425 ; + RECT 21.53 38.4075 21.595 37.6675 ; + RECT 22.045 37.7775 22.115 37.5775 ; + RECT 21.965 38.6325 22.03 38.4975 ; + RECT 21.29 38.78 21.3425 38.7175 ; + RECT 21.285 37.5775 22.17 37.5125 ; + RECT 21.3425 38.14 21.4075 38.005 ; + RECT 21.66 38.9225 21.795 38.8575 ; + RECT 21.965 38.6325 22.035 38.3425 ; + RECT 21.6425 38.7825 21.7775 38.7175 ; + RECT 21.345 37.7775 21.41 37.6425 ; + RECT 21.86 38.4075 22.035 38.3425 ; + RECT 21.86 37.7775 21.925 37.6425 ; + RECT 21.285 38.9225 22.17 38.8575 ; + RECT 22.0475 38.14 22.1125 38.005 ; + RECT 21.34 38.2425 21.41 38.1075 ; + RECT 21.61 38.6325 21.675 38.4975 ; + RECT 21.86 38.2425 21.925 38.1075 ; + RECT 21.7925 38.6325 21.8575 38.4975 ; + RECT 21.345 38.2425 21.41 38.1075 ; + RECT 21.53 37.7775 21.595 37.6425 ; + RECT 21.86 38.4075 21.925 37.7775 ; + RECT 21.3075 38.9225 21.4425 38.8575 ; + RECT 21.425 38.6325 21.49 38.4975 ; + RECT 21.53 39.5375 21.595 39.6725 ; + RECT 22.045 39.5375 22.115 39.6725 ; + RECT 21.425 39.3725 21.595 39.4375 ; + RECT 21.285 38.9975 22.17 39.0625 ; + RECT 21.34 40.0025 21.41 40.2025 ; + RECT 22.045 40.0025 22.11 40.1375 ; + RECT 21.5975 39.1475 21.6625 39.2825 ; + RECT 21.78 39.1475 21.845 39.2825 ; + RECT 22.045 39.5375 22.11 39.6725 ; + RECT 22.0125 38.8575 22.1475 38.9225 ; + RECT 21.7725 39.7375 21.9075 39.8025 ; + RECT 21.995 39.0 22.0475 39.0625 ; + RECT 21.5475 39.8875 21.6825 39.9525 ; + RECT 21.425 39.1475 21.495 39.4375 ; + RECT 21.53 39.3725 21.595 40.1125 ; + RECT 22.045 40.0025 22.115 40.2025 ; + RECT 21.965 39.1475 22.03 39.2825 ; + RECT 21.29 39.0 21.3425 39.0625 ; + RECT 21.285 40.2025 22.17 40.2675 ; + RECT 21.3425 39.64 21.4075 39.775 ; + RECT 21.66 38.8575 21.795 38.9225 ; + RECT 21.965 39.1475 22.035 39.4375 ; + RECT 21.6425 38.9975 21.7775 39.0625 ; + RECT 21.345 40.0025 21.41 40.1375 ; + RECT 21.86 39.3725 22.035 39.4375 ; + RECT 21.86 40.0025 21.925 40.1375 ; + RECT 21.285 38.8575 22.17 38.9225 ; + RECT 22.0475 39.64 22.1125 39.775 ; + RECT 21.34 39.5375 21.41 39.6725 ; + RECT 21.61 39.1475 21.675 39.2825 ; + RECT 21.86 39.5375 21.925 39.6725 ; + RECT 21.7925 39.1475 21.8575 39.2825 ; + RECT 21.345 39.5375 21.41 39.6725 ; + RECT 21.53 40.0025 21.595 40.1375 ; + RECT 21.86 39.3725 21.925 40.0025 ; + RECT 21.3075 38.8575 21.4425 38.9225 ; + RECT 21.425 39.1475 21.49 39.2825 ; + RECT 21.53 40.9325 21.595 40.7975 ; + RECT 22.045 40.9325 22.115 40.7975 ; + RECT 21.425 41.0975 21.595 41.0325 ; + RECT 21.285 41.4725 22.17 41.4075 ; + RECT 21.34 40.4675 21.41 40.2675 ; + RECT 22.045 40.4675 22.11 40.3325 ; + RECT 21.5975 41.3225 21.6625 41.1875 ; + RECT 21.78 41.3225 21.845 41.1875 ; + RECT 22.045 40.9325 22.11 40.7975 ; + RECT 22.0125 41.6125 22.1475 41.5475 ; + RECT 21.7725 40.7325 21.9075 40.6675 ; + RECT 21.995 41.47 22.0475 41.4075 ; + RECT 21.5475 40.5825 21.6825 40.5175 ; + RECT 21.425 41.3225 21.495 41.0325 ; + RECT 21.53 41.0975 21.595 40.3575 ; + RECT 22.045 40.4675 22.115 40.2675 ; + RECT 21.965 41.3225 22.03 41.1875 ; + RECT 21.29 41.47 21.3425 41.4075 ; + RECT 21.285 40.2675 22.17 40.2025 ; + RECT 21.3425 40.83 21.4075 40.695 ; + RECT 21.66 41.6125 21.795 41.5475 ; + RECT 21.965 41.3225 22.035 41.0325 ; + RECT 21.6425 41.4725 21.7775 41.4075 ; + RECT 21.345 40.4675 21.41 40.3325 ; + RECT 21.86 41.0975 22.035 41.0325 ; + RECT 21.86 40.4675 21.925 40.3325 ; + RECT 21.285 41.6125 22.17 41.5475 ; + RECT 22.0475 40.83 22.1125 40.695 ; + RECT 21.34 40.9325 21.41 40.7975 ; + RECT 21.61 41.3225 21.675 41.1875 ; + RECT 21.86 40.9325 21.925 40.7975 ; + RECT 21.7925 41.3225 21.8575 41.1875 ; + RECT 21.345 40.9325 21.41 40.7975 ; + RECT 21.53 40.4675 21.595 40.3325 ; + RECT 21.86 41.0975 21.925 40.4675 ; + RECT 21.3075 41.6125 21.4425 41.5475 ; + RECT 21.425 41.3225 21.49 41.1875 ; + RECT 21.53 42.2275 21.595 42.3625 ; + RECT 22.045 42.2275 22.115 42.3625 ; + RECT 21.425 42.0625 21.595 42.1275 ; + RECT 21.285 41.6875 22.17 41.7525 ; + RECT 21.34 42.6925 21.41 42.8925 ; + RECT 22.045 42.6925 22.11 42.8275 ; + RECT 21.5975 41.8375 21.6625 41.9725 ; + RECT 21.78 41.8375 21.845 41.9725 ; + RECT 22.045 42.2275 22.11 42.3625 ; + RECT 22.0125 41.5475 22.1475 41.6125 ; + RECT 21.7725 42.4275 21.9075 42.4925 ; + RECT 21.995 41.69 22.0475 41.7525 ; + RECT 21.5475 42.5775 21.6825 42.6425 ; + RECT 21.425 41.8375 21.495 42.1275 ; + RECT 21.53 42.0625 21.595 42.8025 ; + RECT 22.045 42.6925 22.115 42.8925 ; + RECT 21.965 41.8375 22.03 41.9725 ; + RECT 21.29 41.69 21.3425 41.7525 ; + RECT 21.285 42.8925 22.17 42.9575 ; + RECT 21.3425 42.33 21.4075 42.465 ; + RECT 21.66 41.5475 21.795 41.6125 ; + RECT 21.965 41.8375 22.035 42.1275 ; + RECT 21.6425 41.6875 21.7775 41.7525 ; + RECT 21.345 42.6925 21.41 42.8275 ; + RECT 21.86 42.0625 22.035 42.1275 ; + RECT 21.86 42.6925 21.925 42.8275 ; + RECT 21.285 41.5475 22.17 41.6125 ; + RECT 22.0475 42.33 22.1125 42.465 ; + RECT 21.34 42.2275 21.41 42.3625 ; + RECT 21.61 41.8375 21.675 41.9725 ; + RECT 21.86 42.2275 21.925 42.3625 ; + RECT 21.7925 41.8375 21.8575 41.9725 ; + RECT 21.345 42.2275 21.41 42.3625 ; + RECT 21.53 42.6925 21.595 42.8275 ; + RECT 21.86 42.0625 21.925 42.6925 ; + RECT 21.3075 41.5475 21.4425 41.6125 ; + RECT 21.425 41.8375 21.49 41.9725 ; + RECT 21.53 43.6225 21.595 43.4875 ; + RECT 22.045 43.6225 22.115 43.4875 ; + RECT 21.425 43.7875 21.595 43.7225 ; + RECT 21.285 44.1625 22.17 44.0975 ; + RECT 21.34 43.1575 21.41 42.9575 ; + RECT 22.045 43.1575 22.11 43.0225 ; + RECT 21.5975 44.0125 21.6625 43.8775 ; + RECT 21.78 44.0125 21.845 43.8775 ; + RECT 22.045 43.6225 22.11 43.4875 ; + RECT 22.0125 44.3025 22.1475 44.2375 ; + RECT 21.7725 43.4225 21.9075 43.3575 ; + RECT 21.995 44.16 22.0475 44.0975 ; + RECT 21.5475 43.2725 21.6825 43.2075 ; + RECT 21.425 44.0125 21.495 43.7225 ; + RECT 21.53 43.7875 21.595 43.0475 ; + RECT 22.045 43.1575 22.115 42.9575 ; + RECT 21.965 44.0125 22.03 43.8775 ; + RECT 21.29 44.16 21.3425 44.0975 ; + RECT 21.285 42.9575 22.17 42.8925 ; + RECT 21.3425 43.52 21.4075 43.385 ; + RECT 21.66 44.3025 21.795 44.2375 ; + RECT 21.965 44.0125 22.035 43.7225 ; + RECT 21.6425 44.1625 21.7775 44.0975 ; + RECT 21.345 43.1575 21.41 43.0225 ; + RECT 21.86 43.7875 22.035 43.7225 ; + RECT 21.86 43.1575 21.925 43.0225 ; + RECT 21.285 44.3025 22.17 44.2375 ; + RECT 22.0475 43.52 22.1125 43.385 ; + RECT 21.34 43.6225 21.41 43.4875 ; + RECT 21.61 44.0125 21.675 43.8775 ; + RECT 21.86 43.6225 21.925 43.4875 ; + RECT 21.7925 44.0125 21.8575 43.8775 ; + RECT 21.345 43.6225 21.41 43.4875 ; + RECT 21.53 43.1575 21.595 43.0225 ; + RECT 21.86 43.7875 21.925 43.1575 ; + RECT 21.3075 44.3025 21.4425 44.2375 ; + RECT 21.425 44.0125 21.49 43.8775 ; + RECT 22.235 23.3975 22.3 23.5325 ; + RECT 22.75 23.3975 22.82 23.5325 ; + RECT 22.13 23.2325 22.3 23.2975 ; + RECT 21.99 22.8575 22.875 22.9225 ; + RECT 22.045 23.8625 22.115 24.0625 ; + RECT 22.75 23.8625 22.815 23.9975 ; + RECT 22.3025 23.0075 22.3675 23.1425 ; + RECT 22.485 23.0075 22.55 23.1425 ; + RECT 22.75 23.3975 22.815 23.5325 ; + RECT 22.7175 22.7175 22.8525 22.7825 ; + RECT 22.4775 23.5975 22.6125 23.6625 ; + RECT 22.7 22.86 22.7525 22.9225 ; + RECT 22.2525 23.7475 22.3875 23.8125 ; + RECT 22.13 23.0075 22.2 23.2975 ; + RECT 22.235 23.2325 22.3 23.9725 ; + RECT 22.75 23.8625 22.82 24.0625 ; + RECT 22.67 23.0075 22.735 23.1425 ; + RECT 21.995 22.86 22.0475 22.9225 ; + RECT 21.99 24.0625 22.875 24.1275 ; + RECT 22.0475 23.5 22.1125 23.635 ; + RECT 22.365 22.7175 22.5 22.7825 ; + RECT 22.67 23.0075 22.74 23.2975 ; + RECT 22.3475 22.8575 22.4825 22.9225 ; + RECT 22.05 23.8625 22.115 23.9975 ; + RECT 22.565 23.2325 22.74 23.2975 ; + RECT 22.565 23.8625 22.63 23.9975 ; + RECT 21.99 22.7175 22.875 22.7825 ; + RECT 22.7525 23.5 22.8175 23.635 ; + RECT 22.045 23.3975 22.115 23.5325 ; + RECT 22.315 23.0075 22.38 23.1425 ; + RECT 22.565 23.3975 22.63 23.5325 ; + RECT 22.4975 23.0075 22.5625 23.1425 ; + RECT 22.05 23.3975 22.115 23.5325 ; + RECT 22.235 23.8625 22.3 23.9975 ; + RECT 22.565 23.2325 22.63 23.8625 ; + RECT 22.0125 22.7175 22.1475 22.7825 ; + RECT 22.13 23.0075 22.195 23.1425 ; + RECT 22.235 24.7925 22.3 24.6575 ; + RECT 22.75 24.7925 22.82 24.6575 ; + RECT 22.13 24.9575 22.3 24.8925 ; + RECT 21.99 25.3325 22.875 25.2675 ; + RECT 22.045 24.3275 22.115 24.1275 ; + RECT 22.75 24.3275 22.815 24.1925 ; + RECT 22.3025 25.1825 22.3675 25.0475 ; + RECT 22.485 25.1825 22.55 25.0475 ; + RECT 22.75 24.7925 22.815 24.6575 ; + RECT 22.7175 25.4725 22.8525 25.4075 ; + RECT 22.4775 24.5925 22.6125 24.5275 ; + RECT 22.7 25.33 22.7525 25.2675 ; + RECT 22.2525 24.4425 22.3875 24.3775 ; + RECT 22.13 25.1825 22.2 24.8925 ; + RECT 22.235 24.9575 22.3 24.2175 ; + RECT 22.75 24.3275 22.82 24.1275 ; + RECT 22.67 25.1825 22.735 25.0475 ; + RECT 21.995 25.33 22.0475 25.2675 ; + RECT 21.99 24.1275 22.875 24.0625 ; + RECT 22.0475 24.69 22.1125 24.555 ; + RECT 22.365 25.4725 22.5 25.4075 ; + RECT 22.67 25.1825 22.74 24.8925 ; + RECT 22.3475 25.3325 22.4825 25.2675 ; + RECT 22.05 24.3275 22.115 24.1925 ; + RECT 22.565 24.9575 22.74 24.8925 ; + RECT 22.565 24.3275 22.63 24.1925 ; + RECT 21.99 25.4725 22.875 25.4075 ; + RECT 22.7525 24.69 22.8175 24.555 ; + RECT 22.045 24.7925 22.115 24.6575 ; + RECT 22.315 25.1825 22.38 25.0475 ; + RECT 22.565 24.7925 22.63 24.6575 ; + RECT 22.4975 25.1825 22.5625 25.0475 ; + RECT 22.05 24.7925 22.115 24.6575 ; + RECT 22.235 24.3275 22.3 24.1925 ; + RECT 22.565 24.9575 22.63 24.3275 ; + RECT 22.0125 25.4725 22.1475 25.4075 ; + RECT 22.13 25.1825 22.195 25.0475 ; + RECT 22.235 26.0875 22.3 26.2225 ; + RECT 22.75 26.0875 22.82 26.2225 ; + RECT 22.13 25.9225 22.3 25.9875 ; + RECT 21.99 25.5475 22.875 25.6125 ; + RECT 22.045 26.5525 22.115 26.7525 ; + RECT 22.75 26.5525 22.815 26.6875 ; + RECT 22.3025 25.6975 22.3675 25.8325 ; + RECT 22.485 25.6975 22.55 25.8325 ; + RECT 22.75 26.0875 22.815 26.2225 ; + RECT 22.7175 25.4075 22.8525 25.4725 ; + RECT 22.4775 26.2875 22.6125 26.3525 ; + RECT 22.7 25.55 22.7525 25.6125 ; + RECT 22.2525 26.4375 22.3875 26.5025 ; + RECT 22.13 25.6975 22.2 25.9875 ; + RECT 22.235 25.9225 22.3 26.6625 ; + RECT 22.75 26.5525 22.82 26.7525 ; + RECT 22.67 25.6975 22.735 25.8325 ; + RECT 21.995 25.55 22.0475 25.6125 ; + RECT 21.99 26.7525 22.875 26.8175 ; + RECT 22.0475 26.19 22.1125 26.325 ; + RECT 22.365 25.4075 22.5 25.4725 ; + RECT 22.67 25.6975 22.74 25.9875 ; + RECT 22.3475 25.5475 22.4825 25.6125 ; + RECT 22.05 26.5525 22.115 26.6875 ; + RECT 22.565 25.9225 22.74 25.9875 ; + RECT 22.565 26.5525 22.63 26.6875 ; + RECT 21.99 25.4075 22.875 25.4725 ; + RECT 22.7525 26.19 22.8175 26.325 ; + RECT 22.045 26.0875 22.115 26.2225 ; + RECT 22.315 25.6975 22.38 25.8325 ; + RECT 22.565 26.0875 22.63 26.2225 ; + RECT 22.4975 25.6975 22.5625 25.8325 ; + RECT 22.05 26.0875 22.115 26.2225 ; + RECT 22.235 26.5525 22.3 26.6875 ; + RECT 22.565 25.9225 22.63 26.5525 ; + RECT 22.0125 25.4075 22.1475 25.4725 ; + RECT 22.13 25.6975 22.195 25.8325 ; + RECT 22.235 27.4825 22.3 27.3475 ; + RECT 22.75 27.4825 22.82 27.3475 ; + RECT 22.13 27.6475 22.3 27.5825 ; + RECT 21.99 28.0225 22.875 27.9575 ; + RECT 22.045 27.0175 22.115 26.8175 ; + RECT 22.75 27.0175 22.815 26.8825 ; + RECT 22.3025 27.8725 22.3675 27.7375 ; + RECT 22.485 27.8725 22.55 27.7375 ; + RECT 22.75 27.4825 22.815 27.3475 ; + RECT 22.7175 28.1625 22.8525 28.0975 ; + RECT 22.4775 27.2825 22.6125 27.2175 ; + RECT 22.7 28.02 22.7525 27.9575 ; + RECT 22.2525 27.1325 22.3875 27.0675 ; + RECT 22.13 27.8725 22.2 27.5825 ; + RECT 22.235 27.6475 22.3 26.9075 ; + RECT 22.75 27.0175 22.82 26.8175 ; + RECT 22.67 27.8725 22.735 27.7375 ; + RECT 21.995 28.02 22.0475 27.9575 ; + RECT 21.99 26.8175 22.875 26.7525 ; + RECT 22.0475 27.38 22.1125 27.245 ; + RECT 22.365 28.1625 22.5 28.0975 ; + RECT 22.67 27.8725 22.74 27.5825 ; + RECT 22.3475 28.0225 22.4825 27.9575 ; + RECT 22.05 27.0175 22.115 26.8825 ; + RECT 22.565 27.6475 22.74 27.5825 ; + RECT 22.565 27.0175 22.63 26.8825 ; + RECT 21.99 28.1625 22.875 28.0975 ; + RECT 22.7525 27.38 22.8175 27.245 ; + RECT 22.045 27.4825 22.115 27.3475 ; + RECT 22.315 27.8725 22.38 27.7375 ; + RECT 22.565 27.4825 22.63 27.3475 ; + RECT 22.4975 27.8725 22.5625 27.7375 ; + RECT 22.05 27.4825 22.115 27.3475 ; + RECT 22.235 27.0175 22.3 26.8825 ; + RECT 22.565 27.6475 22.63 27.0175 ; + RECT 22.0125 28.1625 22.1475 28.0975 ; + RECT 22.13 27.8725 22.195 27.7375 ; + RECT 22.235 28.7775 22.3 28.9125 ; + RECT 22.75 28.7775 22.82 28.9125 ; + RECT 22.13 28.6125 22.3 28.6775 ; + RECT 21.99 28.2375 22.875 28.3025 ; + RECT 22.045 29.2425 22.115 29.4425 ; + RECT 22.75 29.2425 22.815 29.3775 ; + RECT 22.3025 28.3875 22.3675 28.5225 ; + RECT 22.485 28.3875 22.55 28.5225 ; + RECT 22.75 28.7775 22.815 28.9125 ; + RECT 22.7175 28.0975 22.8525 28.1625 ; + RECT 22.4775 28.9775 22.6125 29.0425 ; + RECT 22.7 28.24 22.7525 28.3025 ; + RECT 22.2525 29.1275 22.3875 29.1925 ; + RECT 22.13 28.3875 22.2 28.6775 ; + RECT 22.235 28.6125 22.3 29.3525 ; + RECT 22.75 29.2425 22.82 29.4425 ; + RECT 22.67 28.3875 22.735 28.5225 ; + RECT 21.995 28.24 22.0475 28.3025 ; + RECT 21.99 29.4425 22.875 29.5075 ; + RECT 22.0475 28.88 22.1125 29.015 ; + RECT 22.365 28.0975 22.5 28.1625 ; + RECT 22.67 28.3875 22.74 28.6775 ; + RECT 22.3475 28.2375 22.4825 28.3025 ; + RECT 22.05 29.2425 22.115 29.3775 ; + RECT 22.565 28.6125 22.74 28.6775 ; + RECT 22.565 29.2425 22.63 29.3775 ; + RECT 21.99 28.0975 22.875 28.1625 ; + RECT 22.7525 28.88 22.8175 29.015 ; + RECT 22.045 28.7775 22.115 28.9125 ; + RECT 22.315 28.3875 22.38 28.5225 ; + RECT 22.565 28.7775 22.63 28.9125 ; + RECT 22.4975 28.3875 22.5625 28.5225 ; + RECT 22.05 28.7775 22.115 28.9125 ; + RECT 22.235 29.2425 22.3 29.3775 ; + RECT 22.565 28.6125 22.63 29.2425 ; + RECT 22.0125 28.0975 22.1475 28.1625 ; + RECT 22.13 28.3875 22.195 28.5225 ; + RECT 22.235 30.1725 22.3 30.0375 ; + RECT 22.75 30.1725 22.82 30.0375 ; + RECT 22.13 30.3375 22.3 30.2725 ; + RECT 21.99 30.7125 22.875 30.6475 ; + RECT 22.045 29.7075 22.115 29.5075 ; + RECT 22.75 29.7075 22.815 29.5725 ; + RECT 22.3025 30.5625 22.3675 30.4275 ; + RECT 22.485 30.5625 22.55 30.4275 ; + RECT 22.75 30.1725 22.815 30.0375 ; + RECT 22.7175 30.8525 22.8525 30.7875 ; + RECT 22.4775 29.9725 22.6125 29.9075 ; + RECT 22.7 30.71 22.7525 30.6475 ; + RECT 22.2525 29.8225 22.3875 29.7575 ; + RECT 22.13 30.5625 22.2 30.2725 ; + RECT 22.235 30.3375 22.3 29.5975 ; + RECT 22.75 29.7075 22.82 29.5075 ; + RECT 22.67 30.5625 22.735 30.4275 ; + RECT 21.995 30.71 22.0475 30.6475 ; + RECT 21.99 29.5075 22.875 29.4425 ; + RECT 22.0475 30.07 22.1125 29.935 ; + RECT 22.365 30.8525 22.5 30.7875 ; + RECT 22.67 30.5625 22.74 30.2725 ; + RECT 22.3475 30.7125 22.4825 30.6475 ; + RECT 22.05 29.7075 22.115 29.5725 ; + RECT 22.565 30.3375 22.74 30.2725 ; + RECT 22.565 29.7075 22.63 29.5725 ; + RECT 21.99 30.8525 22.875 30.7875 ; + RECT 22.7525 30.07 22.8175 29.935 ; + RECT 22.045 30.1725 22.115 30.0375 ; + RECT 22.315 30.5625 22.38 30.4275 ; + RECT 22.565 30.1725 22.63 30.0375 ; + RECT 22.4975 30.5625 22.5625 30.4275 ; + RECT 22.05 30.1725 22.115 30.0375 ; + RECT 22.235 29.7075 22.3 29.5725 ; + RECT 22.565 30.3375 22.63 29.7075 ; + RECT 22.0125 30.8525 22.1475 30.7875 ; + RECT 22.13 30.5625 22.195 30.4275 ; + RECT 22.235 31.4675 22.3 31.6025 ; + RECT 22.75 31.4675 22.82 31.6025 ; + RECT 22.13 31.3025 22.3 31.3675 ; + RECT 21.99 30.9275 22.875 30.9925 ; + RECT 22.045 31.9325 22.115 32.1325 ; + RECT 22.75 31.9325 22.815 32.0675 ; + RECT 22.3025 31.0775 22.3675 31.2125 ; + RECT 22.485 31.0775 22.55 31.2125 ; + RECT 22.75 31.4675 22.815 31.6025 ; + RECT 22.7175 30.7875 22.8525 30.8525 ; + RECT 22.4775 31.6675 22.6125 31.7325 ; + RECT 22.7 30.93 22.7525 30.9925 ; + RECT 22.2525 31.8175 22.3875 31.8825 ; + RECT 22.13 31.0775 22.2 31.3675 ; + RECT 22.235 31.3025 22.3 32.0425 ; + RECT 22.75 31.9325 22.82 32.1325 ; + RECT 22.67 31.0775 22.735 31.2125 ; + RECT 21.995 30.93 22.0475 30.9925 ; + RECT 21.99 32.1325 22.875 32.1975 ; + RECT 22.0475 31.57 22.1125 31.705 ; + RECT 22.365 30.7875 22.5 30.8525 ; + RECT 22.67 31.0775 22.74 31.3675 ; + RECT 22.3475 30.9275 22.4825 30.9925 ; + RECT 22.05 31.9325 22.115 32.0675 ; + RECT 22.565 31.3025 22.74 31.3675 ; + RECT 22.565 31.9325 22.63 32.0675 ; + RECT 21.99 30.7875 22.875 30.8525 ; + RECT 22.7525 31.57 22.8175 31.705 ; + RECT 22.045 31.4675 22.115 31.6025 ; + RECT 22.315 31.0775 22.38 31.2125 ; + RECT 22.565 31.4675 22.63 31.6025 ; + RECT 22.4975 31.0775 22.5625 31.2125 ; + RECT 22.05 31.4675 22.115 31.6025 ; + RECT 22.235 31.9325 22.3 32.0675 ; + RECT 22.565 31.3025 22.63 31.9325 ; + RECT 22.0125 30.7875 22.1475 30.8525 ; + RECT 22.13 31.0775 22.195 31.2125 ; + RECT 22.235 32.8625 22.3 32.7275 ; + RECT 22.75 32.8625 22.82 32.7275 ; + RECT 22.13 33.0275 22.3 32.9625 ; + RECT 21.99 33.4025 22.875 33.3375 ; + RECT 22.045 32.3975 22.115 32.1975 ; + RECT 22.75 32.3975 22.815 32.2625 ; + RECT 22.3025 33.2525 22.3675 33.1175 ; + RECT 22.485 33.2525 22.55 33.1175 ; + RECT 22.75 32.8625 22.815 32.7275 ; + RECT 22.7175 33.5425 22.8525 33.4775 ; + RECT 22.4775 32.6625 22.6125 32.5975 ; + RECT 22.7 33.4 22.7525 33.3375 ; + RECT 22.2525 32.5125 22.3875 32.4475 ; + RECT 22.13 33.2525 22.2 32.9625 ; + RECT 22.235 33.0275 22.3 32.2875 ; + RECT 22.75 32.3975 22.82 32.1975 ; + RECT 22.67 33.2525 22.735 33.1175 ; + RECT 21.995 33.4 22.0475 33.3375 ; + RECT 21.99 32.1975 22.875 32.1325 ; + RECT 22.0475 32.76 22.1125 32.625 ; + RECT 22.365 33.5425 22.5 33.4775 ; + RECT 22.67 33.2525 22.74 32.9625 ; + RECT 22.3475 33.4025 22.4825 33.3375 ; + RECT 22.05 32.3975 22.115 32.2625 ; + RECT 22.565 33.0275 22.74 32.9625 ; + RECT 22.565 32.3975 22.63 32.2625 ; + RECT 21.99 33.5425 22.875 33.4775 ; + RECT 22.7525 32.76 22.8175 32.625 ; + RECT 22.045 32.8625 22.115 32.7275 ; + RECT 22.315 33.2525 22.38 33.1175 ; + RECT 22.565 32.8625 22.63 32.7275 ; + RECT 22.4975 33.2525 22.5625 33.1175 ; + RECT 22.05 32.8625 22.115 32.7275 ; + RECT 22.235 32.3975 22.3 32.2625 ; + RECT 22.565 33.0275 22.63 32.3975 ; + RECT 22.0125 33.5425 22.1475 33.4775 ; + RECT 22.13 33.2525 22.195 33.1175 ; + RECT 22.235 34.1575 22.3 34.2925 ; + RECT 22.75 34.1575 22.82 34.2925 ; + RECT 22.13 33.9925 22.3 34.0575 ; + RECT 21.99 33.6175 22.875 33.6825 ; + RECT 22.045 34.6225 22.115 34.8225 ; + RECT 22.75 34.6225 22.815 34.7575 ; + RECT 22.3025 33.7675 22.3675 33.9025 ; + RECT 22.485 33.7675 22.55 33.9025 ; + RECT 22.75 34.1575 22.815 34.2925 ; + RECT 22.7175 33.4775 22.8525 33.5425 ; + RECT 22.4775 34.3575 22.6125 34.4225 ; + RECT 22.7 33.62 22.7525 33.6825 ; + RECT 22.2525 34.5075 22.3875 34.5725 ; + RECT 22.13 33.7675 22.2 34.0575 ; + RECT 22.235 33.9925 22.3 34.7325 ; + RECT 22.75 34.6225 22.82 34.8225 ; + RECT 22.67 33.7675 22.735 33.9025 ; + RECT 21.995 33.62 22.0475 33.6825 ; + RECT 21.99 34.8225 22.875 34.8875 ; + RECT 22.0475 34.26 22.1125 34.395 ; + RECT 22.365 33.4775 22.5 33.5425 ; + RECT 22.67 33.7675 22.74 34.0575 ; + RECT 22.3475 33.6175 22.4825 33.6825 ; + RECT 22.05 34.6225 22.115 34.7575 ; + RECT 22.565 33.9925 22.74 34.0575 ; + RECT 22.565 34.6225 22.63 34.7575 ; + RECT 21.99 33.4775 22.875 33.5425 ; + RECT 22.7525 34.26 22.8175 34.395 ; + RECT 22.045 34.1575 22.115 34.2925 ; + RECT 22.315 33.7675 22.38 33.9025 ; + RECT 22.565 34.1575 22.63 34.2925 ; + RECT 22.4975 33.7675 22.5625 33.9025 ; + RECT 22.05 34.1575 22.115 34.2925 ; + RECT 22.235 34.6225 22.3 34.7575 ; + RECT 22.565 33.9925 22.63 34.6225 ; + RECT 22.0125 33.4775 22.1475 33.5425 ; + RECT 22.13 33.7675 22.195 33.9025 ; + RECT 22.235 35.5525 22.3 35.4175 ; + RECT 22.75 35.5525 22.82 35.4175 ; + RECT 22.13 35.7175 22.3 35.6525 ; + RECT 21.99 36.0925 22.875 36.0275 ; + RECT 22.045 35.0875 22.115 34.8875 ; + RECT 22.75 35.0875 22.815 34.9525 ; + RECT 22.3025 35.9425 22.3675 35.8075 ; + RECT 22.485 35.9425 22.55 35.8075 ; + RECT 22.75 35.5525 22.815 35.4175 ; + RECT 22.7175 36.2325 22.8525 36.1675 ; + RECT 22.4775 35.3525 22.6125 35.2875 ; + RECT 22.7 36.09 22.7525 36.0275 ; + RECT 22.2525 35.2025 22.3875 35.1375 ; + RECT 22.13 35.9425 22.2 35.6525 ; + RECT 22.235 35.7175 22.3 34.9775 ; + RECT 22.75 35.0875 22.82 34.8875 ; + RECT 22.67 35.9425 22.735 35.8075 ; + RECT 21.995 36.09 22.0475 36.0275 ; + RECT 21.99 34.8875 22.875 34.8225 ; + RECT 22.0475 35.45 22.1125 35.315 ; + RECT 22.365 36.2325 22.5 36.1675 ; + RECT 22.67 35.9425 22.74 35.6525 ; + RECT 22.3475 36.0925 22.4825 36.0275 ; + RECT 22.05 35.0875 22.115 34.9525 ; + RECT 22.565 35.7175 22.74 35.6525 ; + RECT 22.565 35.0875 22.63 34.9525 ; + RECT 21.99 36.2325 22.875 36.1675 ; + RECT 22.7525 35.45 22.8175 35.315 ; + RECT 22.045 35.5525 22.115 35.4175 ; + RECT 22.315 35.9425 22.38 35.8075 ; + RECT 22.565 35.5525 22.63 35.4175 ; + RECT 22.4975 35.9425 22.5625 35.8075 ; + RECT 22.05 35.5525 22.115 35.4175 ; + RECT 22.235 35.0875 22.3 34.9525 ; + RECT 22.565 35.7175 22.63 35.0875 ; + RECT 22.0125 36.2325 22.1475 36.1675 ; + RECT 22.13 35.9425 22.195 35.8075 ; + RECT 22.235 36.8475 22.3 36.9825 ; + RECT 22.75 36.8475 22.82 36.9825 ; + RECT 22.13 36.6825 22.3 36.7475 ; + RECT 21.99 36.3075 22.875 36.3725 ; + RECT 22.045 37.3125 22.115 37.5125 ; + RECT 22.75 37.3125 22.815 37.4475 ; + RECT 22.3025 36.4575 22.3675 36.5925 ; + RECT 22.485 36.4575 22.55 36.5925 ; + RECT 22.75 36.8475 22.815 36.9825 ; + RECT 22.7175 36.1675 22.8525 36.2325 ; + RECT 22.4775 37.0475 22.6125 37.1125 ; + RECT 22.7 36.31 22.7525 36.3725 ; + RECT 22.2525 37.1975 22.3875 37.2625 ; + RECT 22.13 36.4575 22.2 36.7475 ; + RECT 22.235 36.6825 22.3 37.4225 ; + RECT 22.75 37.3125 22.82 37.5125 ; + RECT 22.67 36.4575 22.735 36.5925 ; + RECT 21.995 36.31 22.0475 36.3725 ; + RECT 21.99 37.5125 22.875 37.5775 ; + RECT 22.0475 36.95 22.1125 37.085 ; + RECT 22.365 36.1675 22.5 36.2325 ; + RECT 22.67 36.4575 22.74 36.7475 ; + RECT 22.3475 36.3075 22.4825 36.3725 ; + RECT 22.05 37.3125 22.115 37.4475 ; + RECT 22.565 36.6825 22.74 36.7475 ; + RECT 22.565 37.3125 22.63 37.4475 ; + RECT 21.99 36.1675 22.875 36.2325 ; + RECT 22.7525 36.95 22.8175 37.085 ; + RECT 22.045 36.8475 22.115 36.9825 ; + RECT 22.315 36.4575 22.38 36.5925 ; + RECT 22.565 36.8475 22.63 36.9825 ; + RECT 22.4975 36.4575 22.5625 36.5925 ; + RECT 22.05 36.8475 22.115 36.9825 ; + RECT 22.235 37.3125 22.3 37.4475 ; + RECT 22.565 36.6825 22.63 37.3125 ; + RECT 22.0125 36.1675 22.1475 36.2325 ; + RECT 22.13 36.4575 22.195 36.5925 ; + RECT 22.235 38.2425 22.3 38.1075 ; + RECT 22.75 38.2425 22.82 38.1075 ; + RECT 22.13 38.4075 22.3 38.3425 ; + RECT 21.99 38.7825 22.875 38.7175 ; + RECT 22.045 37.7775 22.115 37.5775 ; + RECT 22.75 37.7775 22.815 37.6425 ; + RECT 22.3025 38.6325 22.3675 38.4975 ; + RECT 22.485 38.6325 22.55 38.4975 ; + RECT 22.75 38.2425 22.815 38.1075 ; + RECT 22.7175 38.9225 22.8525 38.8575 ; + RECT 22.4775 38.0425 22.6125 37.9775 ; + RECT 22.7 38.78 22.7525 38.7175 ; + RECT 22.2525 37.8925 22.3875 37.8275 ; + RECT 22.13 38.6325 22.2 38.3425 ; + RECT 22.235 38.4075 22.3 37.6675 ; + RECT 22.75 37.7775 22.82 37.5775 ; + RECT 22.67 38.6325 22.735 38.4975 ; + RECT 21.995 38.78 22.0475 38.7175 ; + RECT 21.99 37.5775 22.875 37.5125 ; + RECT 22.0475 38.14 22.1125 38.005 ; + RECT 22.365 38.9225 22.5 38.8575 ; + RECT 22.67 38.6325 22.74 38.3425 ; + RECT 22.3475 38.7825 22.4825 38.7175 ; + RECT 22.05 37.7775 22.115 37.6425 ; + RECT 22.565 38.4075 22.74 38.3425 ; + RECT 22.565 37.7775 22.63 37.6425 ; + RECT 21.99 38.9225 22.875 38.8575 ; + RECT 22.7525 38.14 22.8175 38.005 ; + RECT 22.045 38.2425 22.115 38.1075 ; + RECT 22.315 38.6325 22.38 38.4975 ; + RECT 22.565 38.2425 22.63 38.1075 ; + RECT 22.4975 38.6325 22.5625 38.4975 ; + RECT 22.05 38.2425 22.115 38.1075 ; + RECT 22.235 37.7775 22.3 37.6425 ; + RECT 22.565 38.4075 22.63 37.7775 ; + RECT 22.0125 38.9225 22.1475 38.8575 ; + RECT 22.13 38.6325 22.195 38.4975 ; + RECT 22.235 39.5375 22.3 39.6725 ; + RECT 22.75 39.5375 22.82 39.6725 ; + RECT 22.13 39.3725 22.3 39.4375 ; + RECT 21.99 38.9975 22.875 39.0625 ; + RECT 22.045 40.0025 22.115 40.2025 ; + RECT 22.75 40.0025 22.815 40.1375 ; + RECT 22.3025 39.1475 22.3675 39.2825 ; + RECT 22.485 39.1475 22.55 39.2825 ; + RECT 22.75 39.5375 22.815 39.6725 ; + RECT 22.7175 38.8575 22.8525 38.9225 ; + RECT 22.4775 39.7375 22.6125 39.8025 ; + RECT 22.7 39.0 22.7525 39.0625 ; + RECT 22.2525 39.8875 22.3875 39.9525 ; + RECT 22.13 39.1475 22.2 39.4375 ; + RECT 22.235 39.3725 22.3 40.1125 ; + RECT 22.75 40.0025 22.82 40.2025 ; + RECT 22.67 39.1475 22.735 39.2825 ; + RECT 21.995 39.0 22.0475 39.0625 ; + RECT 21.99 40.2025 22.875 40.2675 ; + RECT 22.0475 39.64 22.1125 39.775 ; + RECT 22.365 38.8575 22.5 38.9225 ; + RECT 22.67 39.1475 22.74 39.4375 ; + RECT 22.3475 38.9975 22.4825 39.0625 ; + RECT 22.05 40.0025 22.115 40.1375 ; + RECT 22.565 39.3725 22.74 39.4375 ; + RECT 22.565 40.0025 22.63 40.1375 ; + RECT 21.99 38.8575 22.875 38.9225 ; + RECT 22.7525 39.64 22.8175 39.775 ; + RECT 22.045 39.5375 22.115 39.6725 ; + RECT 22.315 39.1475 22.38 39.2825 ; + RECT 22.565 39.5375 22.63 39.6725 ; + RECT 22.4975 39.1475 22.5625 39.2825 ; + RECT 22.05 39.5375 22.115 39.6725 ; + RECT 22.235 40.0025 22.3 40.1375 ; + RECT 22.565 39.3725 22.63 40.0025 ; + RECT 22.0125 38.8575 22.1475 38.9225 ; + RECT 22.13 39.1475 22.195 39.2825 ; + RECT 22.235 40.9325 22.3 40.7975 ; + RECT 22.75 40.9325 22.82 40.7975 ; + RECT 22.13 41.0975 22.3 41.0325 ; + RECT 21.99 41.4725 22.875 41.4075 ; + RECT 22.045 40.4675 22.115 40.2675 ; + RECT 22.75 40.4675 22.815 40.3325 ; + RECT 22.3025 41.3225 22.3675 41.1875 ; + RECT 22.485 41.3225 22.55 41.1875 ; + RECT 22.75 40.9325 22.815 40.7975 ; + RECT 22.7175 41.6125 22.8525 41.5475 ; + RECT 22.4775 40.7325 22.6125 40.6675 ; + RECT 22.7 41.47 22.7525 41.4075 ; + RECT 22.2525 40.5825 22.3875 40.5175 ; + RECT 22.13 41.3225 22.2 41.0325 ; + RECT 22.235 41.0975 22.3 40.3575 ; + RECT 22.75 40.4675 22.82 40.2675 ; + RECT 22.67 41.3225 22.735 41.1875 ; + RECT 21.995 41.47 22.0475 41.4075 ; + RECT 21.99 40.2675 22.875 40.2025 ; + RECT 22.0475 40.83 22.1125 40.695 ; + RECT 22.365 41.6125 22.5 41.5475 ; + RECT 22.67 41.3225 22.74 41.0325 ; + RECT 22.3475 41.4725 22.4825 41.4075 ; + RECT 22.05 40.4675 22.115 40.3325 ; + RECT 22.565 41.0975 22.74 41.0325 ; + RECT 22.565 40.4675 22.63 40.3325 ; + RECT 21.99 41.6125 22.875 41.5475 ; + RECT 22.7525 40.83 22.8175 40.695 ; + RECT 22.045 40.9325 22.115 40.7975 ; + RECT 22.315 41.3225 22.38 41.1875 ; + RECT 22.565 40.9325 22.63 40.7975 ; + RECT 22.4975 41.3225 22.5625 41.1875 ; + RECT 22.05 40.9325 22.115 40.7975 ; + RECT 22.235 40.4675 22.3 40.3325 ; + RECT 22.565 41.0975 22.63 40.4675 ; + RECT 22.0125 41.6125 22.1475 41.5475 ; + RECT 22.13 41.3225 22.195 41.1875 ; + RECT 22.235 42.2275 22.3 42.3625 ; + RECT 22.75 42.2275 22.82 42.3625 ; + RECT 22.13 42.0625 22.3 42.1275 ; + RECT 21.99 41.6875 22.875 41.7525 ; + RECT 22.045 42.6925 22.115 42.8925 ; + RECT 22.75 42.6925 22.815 42.8275 ; + RECT 22.3025 41.8375 22.3675 41.9725 ; + RECT 22.485 41.8375 22.55 41.9725 ; + RECT 22.75 42.2275 22.815 42.3625 ; + RECT 22.7175 41.5475 22.8525 41.6125 ; + RECT 22.4775 42.4275 22.6125 42.4925 ; + RECT 22.7 41.69 22.7525 41.7525 ; + RECT 22.2525 42.5775 22.3875 42.6425 ; + RECT 22.13 41.8375 22.2 42.1275 ; + RECT 22.235 42.0625 22.3 42.8025 ; + RECT 22.75 42.6925 22.82 42.8925 ; + RECT 22.67 41.8375 22.735 41.9725 ; + RECT 21.995 41.69 22.0475 41.7525 ; + RECT 21.99 42.8925 22.875 42.9575 ; + RECT 22.0475 42.33 22.1125 42.465 ; + RECT 22.365 41.5475 22.5 41.6125 ; + RECT 22.67 41.8375 22.74 42.1275 ; + RECT 22.3475 41.6875 22.4825 41.7525 ; + RECT 22.05 42.6925 22.115 42.8275 ; + RECT 22.565 42.0625 22.74 42.1275 ; + RECT 22.565 42.6925 22.63 42.8275 ; + RECT 21.99 41.5475 22.875 41.6125 ; + RECT 22.7525 42.33 22.8175 42.465 ; + RECT 22.045 42.2275 22.115 42.3625 ; + RECT 22.315 41.8375 22.38 41.9725 ; + RECT 22.565 42.2275 22.63 42.3625 ; + RECT 22.4975 41.8375 22.5625 41.9725 ; + RECT 22.05 42.2275 22.115 42.3625 ; + RECT 22.235 42.6925 22.3 42.8275 ; + RECT 22.565 42.0625 22.63 42.6925 ; + RECT 22.0125 41.5475 22.1475 41.6125 ; + RECT 22.13 41.8375 22.195 41.9725 ; + RECT 22.235 43.6225 22.3 43.4875 ; + RECT 22.75 43.6225 22.82 43.4875 ; + RECT 22.13 43.7875 22.3 43.7225 ; + RECT 21.99 44.1625 22.875 44.0975 ; + RECT 22.045 43.1575 22.115 42.9575 ; + RECT 22.75 43.1575 22.815 43.0225 ; + RECT 22.3025 44.0125 22.3675 43.8775 ; + RECT 22.485 44.0125 22.55 43.8775 ; + RECT 22.75 43.6225 22.815 43.4875 ; + RECT 22.7175 44.3025 22.8525 44.2375 ; + RECT 22.4775 43.4225 22.6125 43.3575 ; + RECT 22.7 44.16 22.7525 44.0975 ; + RECT 22.2525 43.2725 22.3875 43.2075 ; + RECT 22.13 44.0125 22.2 43.7225 ; + RECT 22.235 43.7875 22.3 43.0475 ; + RECT 22.75 43.1575 22.82 42.9575 ; + RECT 22.67 44.0125 22.735 43.8775 ; + RECT 21.995 44.16 22.0475 44.0975 ; + RECT 21.99 42.9575 22.875 42.8925 ; + RECT 22.0475 43.52 22.1125 43.385 ; + RECT 22.365 44.3025 22.5 44.2375 ; + RECT 22.67 44.0125 22.74 43.7225 ; + RECT 22.3475 44.1625 22.4825 44.0975 ; + RECT 22.05 43.1575 22.115 43.0225 ; + RECT 22.565 43.7875 22.74 43.7225 ; + RECT 22.565 43.1575 22.63 43.0225 ; + RECT 21.99 44.3025 22.875 44.2375 ; + RECT 22.7525 43.52 22.8175 43.385 ; + RECT 22.045 43.6225 22.115 43.4875 ; + RECT 22.315 44.0125 22.38 43.8775 ; + RECT 22.565 43.6225 22.63 43.4875 ; + RECT 22.4975 44.0125 22.5625 43.8775 ; + RECT 22.05 43.6225 22.115 43.4875 ; + RECT 22.235 43.1575 22.3 43.0225 ; + RECT 22.565 43.7875 22.63 43.1575 ; + RECT 22.0125 44.3025 22.1475 44.2375 ; + RECT 22.13 44.0125 22.195 43.8775 ; + RECT 21.375 22.8575 22.785 22.9225 ; + RECT 21.375 25.2675 22.785 25.3325 ; + RECT 21.375 25.5475 22.785 25.6125 ; + RECT 21.375 27.9575 22.785 28.0225 ; + RECT 21.375 28.2375 22.785 28.3025 ; + RECT 21.375 30.6475 22.785 30.7125 ; + RECT 21.375 30.9275 22.785 30.9925 ; + RECT 21.375 33.3375 22.785 33.4025 ; + RECT 21.375 33.6175 22.785 33.6825 ; + RECT 21.375 36.0275 22.785 36.0925 ; + RECT 21.375 36.3075 22.785 36.3725 ; + RECT 21.375 38.7175 22.785 38.7825 ; + RECT 21.375 38.9975 22.785 39.0625 ; + RECT 21.375 41.4075 22.785 41.4725 ; + RECT 21.375 41.6875 22.785 41.7525 ; + RECT 21.375 44.0975 22.785 44.1625 ; + RECT 20.825 20.7075 20.89 20.8425 ; + RECT 21.34 20.7075 21.41 20.8425 ; + RECT 20.72 20.5425 20.89 20.6075 ; + RECT 20.58 20.1675 21.465 20.2325 ; + RECT 20.635 21.1725 20.705 21.3725 ; + RECT 21.34 21.1725 21.405 21.3075 ; + RECT 20.8925 20.3175 20.9575 20.4525 ; + RECT 21.075 20.3175 21.14 20.4525 ; + RECT 21.34 20.7075 21.405 20.8425 ; + RECT 21.3075 20.0275 21.4425 20.0925 ; + RECT 21.0675 20.9075 21.2025 20.9725 ; + RECT 21.29 20.17 21.3425 20.2325 ; + RECT 20.8425 21.0575 20.9775 21.1225 ; + RECT 20.72 20.3175 20.79 20.6075 ; + RECT 20.825 20.5425 20.89 21.2825 ; + RECT 21.34 21.1725 21.41 21.3725 ; + RECT 21.26 20.3175 21.325 20.4525 ; + RECT 20.585 20.17 20.6375 20.2325 ; + RECT 20.58 21.3725 21.465 21.4375 ; + RECT 20.6375 20.81 20.7025 20.945 ; + RECT 20.955 20.0275 21.09 20.0925 ; + RECT 21.26 20.3175 21.33 20.6075 ; + RECT 20.9375 20.1675 21.0725 20.2325 ; + RECT 20.64 21.1725 20.705 21.3075 ; + RECT 21.155 20.5425 21.33 20.6075 ; + RECT 21.155 21.1725 21.22 21.3075 ; + RECT 20.58 20.0275 21.465 20.0925 ; + RECT 21.3425 20.81 21.4075 20.945 ; + RECT 20.635 20.7075 20.705 20.8425 ; + RECT 20.905 20.3175 20.97 20.4525 ; + RECT 21.155 20.7075 21.22 20.8425 ; + RECT 21.0875 20.3175 21.1525 20.4525 ; + RECT 20.64 20.7075 20.705 20.8425 ; + RECT 20.825 21.1725 20.89 21.3075 ; + RECT 21.155 20.5425 21.22 21.1725 ; + RECT 20.6025 20.0275 20.7375 20.0925 ; + RECT 20.72 20.3175 20.785 20.4525 ; + RECT 20.825 22.1025 20.89 21.9675 ; + RECT 20.72 22.2675 20.89 22.2025 ; + RECT 21.34 22.1025 21.41 21.9675 ; + RECT 20.58 22.6425 21.465 22.5775 ; + RECT 20.635 21.6375 20.705 21.4375 ; + RECT 21.34 21.6375 21.405 21.5025 ; + RECT 20.8925 22.4925 20.9575 22.3575 ; + RECT 21.075 22.4925 21.14 22.3575 ; + RECT 21.34 22.1025 21.405 21.9675 ; + RECT 21.3075 22.7825 21.4425 22.7175 ; + RECT 21.0675 21.9025 21.2025 21.8375 ; + RECT 21.29 22.64 21.3425 22.5775 ; + RECT 20.8425 21.7525 20.9775 21.6875 ; + RECT 20.72 22.4925 20.79 22.2025 ; + RECT 20.825 22.2675 20.89 21.5275 ; + RECT 21.34 21.6375 21.41 21.4375 ; + RECT 20.585 22.64 20.6375 22.5775 ; + RECT 20.58 21.4375 21.465 21.3725 ; + RECT 21.26 22.4925 21.325 22.3575 ; + RECT 20.6375 22.0 20.7025 21.865 ; + RECT 21.26 22.4925 21.33 22.2025 ; + RECT 20.955 22.7825 21.09 22.7175 ; + RECT 20.9375 22.6425 21.0725 22.5775 ; + RECT 21.155 22.2675 21.33 22.2025 ; + RECT 20.64 21.6375 20.705 21.5025 ; + RECT 20.58 22.7825 21.465 22.7175 ; + RECT 21.3425 22.0 21.4075 21.865 ; + RECT 20.635 22.1025 20.705 21.9675 ; + RECT 20.905 22.4925 20.97 22.3575 ; + RECT 21.155 22.1025 21.22 21.9675 ; + RECT 21.0875 22.4925 21.1525 22.3575 ; + RECT 20.64 22.1025 20.705 21.9675 ; + RECT 21.155 21.6375 21.22 21.425 ; + RECT 20.825 21.6375 20.89 21.5025 ; + RECT 21.155 22.2675 21.22 21.6375 ; + RECT 20.6025 22.7825 20.7375 22.7175 ; + RECT 20.72 22.4925 20.785 22.3575 ; + RECT 20.825 23.3975 20.89 23.5325 ; + RECT 20.72 23.2325 20.89 23.2975 ; + RECT 21.34 23.3975 21.41 23.5325 ; + RECT 20.58 22.8575 21.465 22.9225 ; + RECT 20.635 23.8625 20.705 24.0625 ; + RECT 21.34 23.8625 21.405 23.9975 ; + RECT 20.8925 23.0075 20.9575 23.1425 ; + RECT 21.075 23.0075 21.14 23.1425 ; + RECT 21.34 23.3975 21.405 23.5325 ; + RECT 21.3075 22.7175 21.4425 22.7825 ; + RECT 21.0675 23.5975 21.2025 23.6625 ; + RECT 21.29 22.86 21.3425 22.9225 ; + RECT 20.8425 23.7475 20.9775 23.8125 ; + RECT 20.72 23.0075 20.79 23.2975 ; + RECT 20.825 23.2325 20.89 23.9725 ; + RECT 21.34 23.8625 21.41 24.0625 ; + RECT 20.585 22.86 20.6375 22.9225 ; + RECT 20.58 24.0625 21.465 24.1275 ; + RECT 21.26 23.0075 21.325 23.1425 ; + RECT 20.6375 23.5 20.7025 23.635 ; + RECT 21.26 23.0075 21.33 23.2975 ; + RECT 20.955 22.7175 21.09 22.7825 ; + RECT 20.9375 22.8575 21.0725 22.9225 ; + RECT 21.155 23.2325 21.33 23.2975 ; + RECT 20.64 23.8625 20.705 23.9975 ; + RECT 20.58 22.7175 21.465 22.7825 ; + RECT 21.3425 23.5 21.4075 23.635 ; + RECT 20.635 23.3975 20.705 23.5325 ; + RECT 20.905 23.0075 20.97 23.1425 ; + RECT 21.155 23.3975 21.22 23.5325 ; + RECT 21.0875 23.0075 21.1525 23.1425 ; + RECT 20.64 23.3975 20.705 23.5325 ; + RECT 21.155 23.8625 21.22 24.075 ; + RECT 20.825 23.8625 20.89 23.9975 ; + RECT 21.155 23.2325 21.22 23.8625 ; + RECT 20.6025 22.7175 20.7375 22.7825 ; + RECT 20.72 23.0075 20.785 23.1425 ; + RECT 20.825 24.7925 20.89 24.6575 ; + RECT 20.72 24.9575 20.89 24.8925 ; + RECT 21.34 24.7925 21.41 24.6575 ; + RECT 20.58 25.3325 21.465 25.2675 ; + RECT 20.635 24.3275 20.705 24.1275 ; + RECT 21.34 24.3275 21.405 24.1925 ; + RECT 20.8925 25.1825 20.9575 25.0475 ; + RECT 21.075 25.1825 21.14 25.0475 ; + RECT 21.34 24.7925 21.405 24.6575 ; + RECT 21.3075 25.4725 21.4425 25.4075 ; + RECT 21.0675 24.5925 21.2025 24.5275 ; + RECT 21.29 25.33 21.3425 25.2675 ; + RECT 20.8425 24.4425 20.9775 24.3775 ; + RECT 20.72 25.1825 20.79 24.8925 ; + RECT 20.825 24.9575 20.89 24.2175 ; + RECT 21.34 24.3275 21.41 24.1275 ; + RECT 20.585 25.33 20.6375 25.2675 ; + RECT 20.58 24.1275 21.465 24.0625 ; + RECT 21.26 25.1825 21.325 25.0475 ; + RECT 20.6375 24.69 20.7025 24.555 ; + RECT 21.26 25.1825 21.33 24.8925 ; + RECT 20.955 25.4725 21.09 25.4075 ; + RECT 20.9375 25.3325 21.0725 25.2675 ; + RECT 21.155 24.9575 21.33 24.8925 ; + RECT 20.64 24.3275 20.705 24.1925 ; + RECT 20.58 25.4725 21.465 25.4075 ; + RECT 21.3425 24.69 21.4075 24.555 ; + RECT 20.635 24.7925 20.705 24.6575 ; + RECT 20.905 25.1825 20.97 25.0475 ; + RECT 21.155 24.7925 21.22 24.6575 ; + RECT 21.0875 25.1825 21.1525 25.0475 ; + RECT 20.64 24.7925 20.705 24.6575 ; + RECT 21.155 24.3275 21.22 24.115 ; + RECT 20.825 24.3275 20.89 24.1925 ; + RECT 21.155 24.9575 21.22 24.3275 ; + RECT 20.6025 25.4725 20.7375 25.4075 ; + RECT 20.72 25.1825 20.785 25.0475 ; + RECT 20.825 26.0875 20.89 26.2225 ; + RECT 20.72 25.9225 20.89 25.9875 ; + RECT 21.34 26.0875 21.41 26.2225 ; + RECT 20.58 25.5475 21.465 25.6125 ; + RECT 20.635 26.5525 20.705 26.7525 ; + RECT 21.34 26.5525 21.405 26.6875 ; + RECT 20.8925 25.6975 20.9575 25.8325 ; + RECT 21.075 25.6975 21.14 25.8325 ; + RECT 21.34 26.0875 21.405 26.2225 ; + RECT 21.3075 25.4075 21.4425 25.4725 ; + RECT 21.0675 26.2875 21.2025 26.3525 ; + RECT 21.29 25.55 21.3425 25.6125 ; + RECT 20.8425 26.4375 20.9775 26.5025 ; + RECT 20.72 25.6975 20.79 25.9875 ; + RECT 20.825 25.9225 20.89 26.6625 ; + RECT 21.34 26.5525 21.41 26.7525 ; + RECT 20.585 25.55 20.6375 25.6125 ; + RECT 20.58 26.7525 21.465 26.8175 ; + RECT 21.26 25.6975 21.325 25.8325 ; + RECT 20.6375 26.19 20.7025 26.325 ; + RECT 21.26 25.6975 21.33 25.9875 ; + RECT 20.955 25.4075 21.09 25.4725 ; + RECT 20.9375 25.5475 21.0725 25.6125 ; + RECT 21.155 25.9225 21.33 25.9875 ; + RECT 20.64 26.5525 20.705 26.6875 ; + RECT 20.58 25.4075 21.465 25.4725 ; + RECT 21.3425 26.19 21.4075 26.325 ; + RECT 20.635 26.0875 20.705 26.2225 ; + RECT 20.905 25.6975 20.97 25.8325 ; + RECT 21.155 26.0875 21.22 26.2225 ; + RECT 21.0875 25.6975 21.1525 25.8325 ; + RECT 20.64 26.0875 20.705 26.2225 ; + RECT 21.155 26.5525 21.22 26.765 ; + RECT 20.825 26.5525 20.89 26.6875 ; + RECT 21.155 25.9225 21.22 26.5525 ; + RECT 20.6025 25.4075 20.7375 25.4725 ; + RECT 20.72 25.6975 20.785 25.8325 ; + RECT 20.825 27.4825 20.89 27.3475 ; + RECT 20.72 27.6475 20.89 27.5825 ; + RECT 21.34 27.4825 21.41 27.3475 ; + RECT 20.58 28.0225 21.465 27.9575 ; + RECT 20.635 27.0175 20.705 26.8175 ; + RECT 21.34 27.0175 21.405 26.8825 ; + RECT 20.8925 27.8725 20.9575 27.7375 ; + RECT 21.075 27.8725 21.14 27.7375 ; + RECT 21.34 27.4825 21.405 27.3475 ; + RECT 21.3075 28.1625 21.4425 28.0975 ; + RECT 21.0675 27.2825 21.2025 27.2175 ; + RECT 21.29 28.02 21.3425 27.9575 ; + RECT 20.8425 27.1325 20.9775 27.0675 ; + RECT 20.72 27.8725 20.79 27.5825 ; + RECT 20.825 27.6475 20.89 26.9075 ; + RECT 21.34 27.0175 21.41 26.8175 ; + RECT 20.585 28.02 20.6375 27.9575 ; + RECT 20.58 26.8175 21.465 26.7525 ; + RECT 21.26 27.8725 21.325 27.7375 ; + RECT 20.6375 27.38 20.7025 27.245 ; + RECT 21.26 27.8725 21.33 27.5825 ; + RECT 20.955 28.1625 21.09 28.0975 ; + RECT 20.9375 28.0225 21.0725 27.9575 ; + RECT 21.155 27.6475 21.33 27.5825 ; + RECT 20.64 27.0175 20.705 26.8825 ; + RECT 20.58 28.1625 21.465 28.0975 ; + RECT 21.3425 27.38 21.4075 27.245 ; + RECT 20.635 27.4825 20.705 27.3475 ; + RECT 20.905 27.8725 20.97 27.7375 ; + RECT 21.155 27.4825 21.22 27.3475 ; + RECT 21.0875 27.8725 21.1525 27.7375 ; + RECT 20.64 27.4825 20.705 27.3475 ; + RECT 21.155 27.0175 21.22 26.805 ; + RECT 20.825 27.0175 20.89 26.8825 ; + RECT 21.155 27.6475 21.22 27.0175 ; + RECT 20.6025 28.1625 20.7375 28.0975 ; + RECT 20.72 27.8725 20.785 27.7375 ; + RECT 20.825 28.7775 20.89 28.9125 ; + RECT 20.72 28.6125 20.89 28.6775 ; + RECT 21.34 28.7775 21.41 28.9125 ; + RECT 20.58 28.2375 21.465 28.3025 ; + RECT 20.635 29.2425 20.705 29.4425 ; + RECT 21.34 29.2425 21.405 29.3775 ; + RECT 20.8925 28.3875 20.9575 28.5225 ; + RECT 21.075 28.3875 21.14 28.5225 ; + RECT 21.34 28.7775 21.405 28.9125 ; + RECT 21.3075 28.0975 21.4425 28.1625 ; + RECT 21.0675 28.9775 21.2025 29.0425 ; + RECT 21.29 28.24 21.3425 28.3025 ; + RECT 20.8425 29.1275 20.9775 29.1925 ; + RECT 20.72 28.3875 20.79 28.6775 ; + RECT 20.825 28.6125 20.89 29.3525 ; + RECT 21.34 29.2425 21.41 29.4425 ; + RECT 20.585 28.24 20.6375 28.3025 ; + RECT 20.58 29.4425 21.465 29.5075 ; + RECT 21.26 28.3875 21.325 28.5225 ; + RECT 20.6375 28.88 20.7025 29.015 ; + RECT 21.26 28.3875 21.33 28.6775 ; + RECT 20.955 28.0975 21.09 28.1625 ; + RECT 20.9375 28.2375 21.0725 28.3025 ; + RECT 21.155 28.6125 21.33 28.6775 ; + RECT 20.64 29.2425 20.705 29.3775 ; + RECT 20.58 28.0975 21.465 28.1625 ; + RECT 21.3425 28.88 21.4075 29.015 ; + RECT 20.635 28.7775 20.705 28.9125 ; + RECT 20.905 28.3875 20.97 28.5225 ; + RECT 21.155 28.7775 21.22 28.9125 ; + RECT 21.0875 28.3875 21.1525 28.5225 ; + RECT 20.64 28.7775 20.705 28.9125 ; + RECT 21.155 29.2425 21.22 29.455 ; + RECT 20.825 29.2425 20.89 29.3775 ; + RECT 21.155 28.6125 21.22 29.2425 ; + RECT 20.6025 28.0975 20.7375 28.1625 ; + RECT 20.72 28.3875 20.785 28.5225 ; + RECT 20.825 30.1725 20.89 30.0375 ; + RECT 20.72 30.3375 20.89 30.2725 ; + RECT 21.34 30.1725 21.41 30.0375 ; + RECT 20.58 30.7125 21.465 30.6475 ; + RECT 20.635 29.7075 20.705 29.5075 ; + RECT 21.34 29.7075 21.405 29.5725 ; + RECT 20.8925 30.5625 20.9575 30.4275 ; + RECT 21.075 30.5625 21.14 30.4275 ; + RECT 21.34 30.1725 21.405 30.0375 ; + RECT 21.3075 30.8525 21.4425 30.7875 ; + RECT 21.0675 29.9725 21.2025 29.9075 ; + RECT 21.29 30.71 21.3425 30.6475 ; + RECT 20.8425 29.8225 20.9775 29.7575 ; + RECT 20.72 30.5625 20.79 30.2725 ; + RECT 20.825 30.3375 20.89 29.5975 ; + RECT 21.34 29.7075 21.41 29.5075 ; + RECT 20.585 30.71 20.6375 30.6475 ; + RECT 20.58 29.5075 21.465 29.4425 ; + RECT 21.26 30.5625 21.325 30.4275 ; + RECT 20.6375 30.07 20.7025 29.935 ; + RECT 21.26 30.5625 21.33 30.2725 ; + RECT 20.955 30.8525 21.09 30.7875 ; + RECT 20.9375 30.7125 21.0725 30.6475 ; + RECT 21.155 30.3375 21.33 30.2725 ; + RECT 20.64 29.7075 20.705 29.5725 ; + RECT 20.58 30.8525 21.465 30.7875 ; + RECT 21.3425 30.07 21.4075 29.935 ; + RECT 20.635 30.1725 20.705 30.0375 ; + RECT 20.905 30.5625 20.97 30.4275 ; + RECT 21.155 30.1725 21.22 30.0375 ; + RECT 21.0875 30.5625 21.1525 30.4275 ; + RECT 20.64 30.1725 20.705 30.0375 ; + RECT 21.155 29.7075 21.22 29.495 ; + RECT 20.825 29.7075 20.89 29.5725 ; + RECT 21.155 30.3375 21.22 29.7075 ; + RECT 20.6025 30.8525 20.7375 30.7875 ; + RECT 20.72 30.5625 20.785 30.4275 ; + RECT 20.825 31.4675 20.89 31.6025 ; + RECT 20.72 31.3025 20.89 31.3675 ; + RECT 21.34 31.4675 21.41 31.6025 ; + RECT 20.58 30.9275 21.465 30.9925 ; + RECT 20.635 31.9325 20.705 32.1325 ; + RECT 21.34 31.9325 21.405 32.0675 ; + RECT 20.8925 31.0775 20.9575 31.2125 ; + RECT 21.075 31.0775 21.14 31.2125 ; + RECT 21.34 31.4675 21.405 31.6025 ; + RECT 21.3075 30.7875 21.4425 30.8525 ; + RECT 21.0675 31.6675 21.2025 31.7325 ; + RECT 21.29 30.93 21.3425 30.9925 ; + RECT 20.8425 31.8175 20.9775 31.8825 ; + RECT 20.72 31.0775 20.79 31.3675 ; + RECT 20.825 31.3025 20.89 32.0425 ; + RECT 21.34 31.9325 21.41 32.1325 ; + RECT 20.585 30.93 20.6375 30.9925 ; + RECT 20.58 32.1325 21.465 32.1975 ; + RECT 21.26 31.0775 21.325 31.2125 ; + RECT 20.6375 31.57 20.7025 31.705 ; + RECT 21.26 31.0775 21.33 31.3675 ; + RECT 20.955 30.7875 21.09 30.8525 ; + RECT 20.9375 30.9275 21.0725 30.9925 ; + RECT 21.155 31.3025 21.33 31.3675 ; + RECT 20.64 31.9325 20.705 32.0675 ; + RECT 20.58 30.7875 21.465 30.8525 ; + RECT 21.3425 31.57 21.4075 31.705 ; + RECT 20.635 31.4675 20.705 31.6025 ; + RECT 20.905 31.0775 20.97 31.2125 ; + RECT 21.155 31.4675 21.22 31.6025 ; + RECT 21.0875 31.0775 21.1525 31.2125 ; + RECT 20.64 31.4675 20.705 31.6025 ; + RECT 21.155 31.9325 21.22 32.145 ; + RECT 20.825 31.9325 20.89 32.0675 ; + RECT 21.155 31.3025 21.22 31.9325 ; + RECT 20.6025 30.7875 20.7375 30.8525 ; + RECT 20.72 31.0775 20.785 31.2125 ; + RECT 20.825 32.8625 20.89 32.7275 ; + RECT 20.72 33.0275 20.89 32.9625 ; + RECT 21.34 32.8625 21.41 32.7275 ; + RECT 20.58 33.4025 21.465 33.3375 ; + RECT 20.635 32.3975 20.705 32.1975 ; + RECT 21.34 32.3975 21.405 32.2625 ; + RECT 20.8925 33.2525 20.9575 33.1175 ; + RECT 21.075 33.2525 21.14 33.1175 ; + RECT 21.34 32.8625 21.405 32.7275 ; + RECT 21.3075 33.5425 21.4425 33.4775 ; + RECT 21.0675 32.6625 21.2025 32.5975 ; + RECT 21.29 33.4 21.3425 33.3375 ; + RECT 20.8425 32.5125 20.9775 32.4475 ; + RECT 20.72 33.2525 20.79 32.9625 ; + RECT 20.825 33.0275 20.89 32.2875 ; + RECT 21.34 32.3975 21.41 32.1975 ; + RECT 20.585 33.4 20.6375 33.3375 ; + RECT 20.58 32.1975 21.465 32.1325 ; + RECT 21.26 33.2525 21.325 33.1175 ; + RECT 20.6375 32.76 20.7025 32.625 ; + RECT 21.26 33.2525 21.33 32.9625 ; + RECT 20.955 33.5425 21.09 33.4775 ; + RECT 20.9375 33.4025 21.0725 33.3375 ; + RECT 21.155 33.0275 21.33 32.9625 ; + RECT 20.64 32.3975 20.705 32.2625 ; + RECT 20.58 33.5425 21.465 33.4775 ; + RECT 21.3425 32.76 21.4075 32.625 ; + RECT 20.635 32.8625 20.705 32.7275 ; + RECT 20.905 33.2525 20.97 33.1175 ; + RECT 21.155 32.8625 21.22 32.7275 ; + RECT 21.0875 33.2525 21.1525 33.1175 ; + RECT 20.64 32.8625 20.705 32.7275 ; + RECT 21.155 32.3975 21.22 32.185 ; + RECT 20.825 32.3975 20.89 32.2625 ; + RECT 21.155 33.0275 21.22 32.3975 ; + RECT 20.6025 33.5425 20.7375 33.4775 ; + RECT 20.72 33.2525 20.785 33.1175 ; + RECT 20.825 34.1575 20.89 34.2925 ; + RECT 20.72 33.9925 20.89 34.0575 ; + RECT 21.34 34.1575 21.41 34.2925 ; + RECT 20.58 33.6175 21.465 33.6825 ; + RECT 20.635 34.6225 20.705 34.8225 ; + RECT 21.34 34.6225 21.405 34.7575 ; + RECT 20.8925 33.7675 20.9575 33.9025 ; + RECT 21.075 33.7675 21.14 33.9025 ; + RECT 21.34 34.1575 21.405 34.2925 ; + RECT 21.3075 33.4775 21.4425 33.5425 ; + RECT 21.0675 34.3575 21.2025 34.4225 ; + RECT 21.29 33.62 21.3425 33.6825 ; + RECT 20.8425 34.5075 20.9775 34.5725 ; + RECT 20.72 33.7675 20.79 34.0575 ; + RECT 20.825 33.9925 20.89 34.7325 ; + RECT 21.34 34.6225 21.41 34.8225 ; + RECT 20.585 33.62 20.6375 33.6825 ; + RECT 20.58 34.8225 21.465 34.8875 ; + RECT 21.26 33.7675 21.325 33.9025 ; + RECT 20.6375 34.26 20.7025 34.395 ; + RECT 21.26 33.7675 21.33 34.0575 ; + RECT 20.955 33.4775 21.09 33.5425 ; + RECT 20.9375 33.6175 21.0725 33.6825 ; + RECT 21.155 33.9925 21.33 34.0575 ; + RECT 20.64 34.6225 20.705 34.7575 ; + RECT 20.58 33.4775 21.465 33.5425 ; + RECT 21.3425 34.26 21.4075 34.395 ; + RECT 20.635 34.1575 20.705 34.2925 ; + RECT 20.905 33.7675 20.97 33.9025 ; + RECT 21.155 34.1575 21.22 34.2925 ; + RECT 21.0875 33.7675 21.1525 33.9025 ; + RECT 20.64 34.1575 20.705 34.2925 ; + RECT 21.155 34.6225 21.22 34.835 ; + RECT 20.825 34.6225 20.89 34.7575 ; + RECT 21.155 33.9925 21.22 34.6225 ; + RECT 20.6025 33.4775 20.7375 33.5425 ; + RECT 20.72 33.7675 20.785 33.9025 ; + RECT 20.825 35.5525 20.89 35.4175 ; + RECT 20.72 35.7175 20.89 35.6525 ; + RECT 21.34 35.5525 21.41 35.4175 ; + RECT 20.58 36.0925 21.465 36.0275 ; + RECT 20.635 35.0875 20.705 34.8875 ; + RECT 21.34 35.0875 21.405 34.9525 ; + RECT 20.8925 35.9425 20.9575 35.8075 ; + RECT 21.075 35.9425 21.14 35.8075 ; + RECT 21.34 35.5525 21.405 35.4175 ; + RECT 21.3075 36.2325 21.4425 36.1675 ; + RECT 21.0675 35.3525 21.2025 35.2875 ; + RECT 21.29 36.09 21.3425 36.0275 ; + RECT 20.8425 35.2025 20.9775 35.1375 ; + RECT 20.72 35.9425 20.79 35.6525 ; + RECT 20.825 35.7175 20.89 34.9775 ; + RECT 21.34 35.0875 21.41 34.8875 ; + RECT 20.585 36.09 20.6375 36.0275 ; + RECT 20.58 34.8875 21.465 34.8225 ; + RECT 21.26 35.9425 21.325 35.8075 ; + RECT 20.6375 35.45 20.7025 35.315 ; + RECT 21.26 35.9425 21.33 35.6525 ; + RECT 20.955 36.2325 21.09 36.1675 ; + RECT 20.9375 36.0925 21.0725 36.0275 ; + RECT 21.155 35.7175 21.33 35.6525 ; + RECT 20.64 35.0875 20.705 34.9525 ; + RECT 20.58 36.2325 21.465 36.1675 ; + RECT 21.3425 35.45 21.4075 35.315 ; + RECT 20.635 35.5525 20.705 35.4175 ; + RECT 20.905 35.9425 20.97 35.8075 ; + RECT 21.155 35.5525 21.22 35.4175 ; + RECT 21.0875 35.9425 21.1525 35.8075 ; + RECT 20.64 35.5525 20.705 35.4175 ; + RECT 21.155 35.0875 21.22 34.875 ; + RECT 20.825 35.0875 20.89 34.9525 ; + RECT 21.155 35.7175 21.22 35.0875 ; + RECT 20.6025 36.2325 20.7375 36.1675 ; + RECT 20.72 35.9425 20.785 35.8075 ; + RECT 20.825 36.8475 20.89 36.9825 ; + RECT 20.72 36.6825 20.89 36.7475 ; + RECT 21.34 36.8475 21.41 36.9825 ; + RECT 20.58 36.3075 21.465 36.3725 ; + RECT 20.635 37.3125 20.705 37.5125 ; + RECT 21.34 37.3125 21.405 37.4475 ; + RECT 20.8925 36.4575 20.9575 36.5925 ; + RECT 21.075 36.4575 21.14 36.5925 ; + RECT 21.34 36.8475 21.405 36.9825 ; + RECT 21.3075 36.1675 21.4425 36.2325 ; + RECT 21.0675 37.0475 21.2025 37.1125 ; + RECT 21.29 36.31 21.3425 36.3725 ; + RECT 20.8425 37.1975 20.9775 37.2625 ; + RECT 20.72 36.4575 20.79 36.7475 ; + RECT 20.825 36.6825 20.89 37.4225 ; + RECT 21.34 37.3125 21.41 37.5125 ; + RECT 20.585 36.31 20.6375 36.3725 ; + RECT 20.58 37.5125 21.465 37.5775 ; + RECT 21.26 36.4575 21.325 36.5925 ; + RECT 20.6375 36.95 20.7025 37.085 ; + RECT 21.26 36.4575 21.33 36.7475 ; + RECT 20.955 36.1675 21.09 36.2325 ; + RECT 20.9375 36.3075 21.0725 36.3725 ; + RECT 21.155 36.6825 21.33 36.7475 ; + RECT 20.64 37.3125 20.705 37.4475 ; + RECT 20.58 36.1675 21.465 36.2325 ; + RECT 21.3425 36.95 21.4075 37.085 ; + RECT 20.635 36.8475 20.705 36.9825 ; + RECT 20.905 36.4575 20.97 36.5925 ; + RECT 21.155 36.8475 21.22 36.9825 ; + RECT 21.0875 36.4575 21.1525 36.5925 ; + RECT 20.64 36.8475 20.705 36.9825 ; + RECT 21.155 37.3125 21.22 37.525 ; + RECT 20.825 37.3125 20.89 37.4475 ; + RECT 21.155 36.6825 21.22 37.3125 ; + RECT 20.6025 36.1675 20.7375 36.2325 ; + RECT 20.72 36.4575 20.785 36.5925 ; + RECT 20.825 38.2425 20.89 38.1075 ; + RECT 20.72 38.4075 20.89 38.3425 ; + RECT 21.34 38.2425 21.41 38.1075 ; + RECT 20.58 38.7825 21.465 38.7175 ; + RECT 20.635 37.7775 20.705 37.5775 ; + RECT 21.34 37.7775 21.405 37.6425 ; + RECT 20.8925 38.6325 20.9575 38.4975 ; + RECT 21.075 38.6325 21.14 38.4975 ; + RECT 21.34 38.2425 21.405 38.1075 ; + RECT 21.3075 38.9225 21.4425 38.8575 ; + RECT 21.0675 38.0425 21.2025 37.9775 ; + RECT 21.29 38.78 21.3425 38.7175 ; + RECT 20.8425 37.8925 20.9775 37.8275 ; + RECT 20.72 38.6325 20.79 38.3425 ; + RECT 20.825 38.4075 20.89 37.6675 ; + RECT 21.34 37.7775 21.41 37.5775 ; + RECT 20.585 38.78 20.6375 38.7175 ; + RECT 20.58 37.5775 21.465 37.5125 ; + RECT 21.26 38.6325 21.325 38.4975 ; + RECT 20.6375 38.14 20.7025 38.005 ; + RECT 21.26 38.6325 21.33 38.3425 ; + RECT 20.955 38.9225 21.09 38.8575 ; + RECT 20.9375 38.7825 21.0725 38.7175 ; + RECT 21.155 38.4075 21.33 38.3425 ; + RECT 20.64 37.7775 20.705 37.6425 ; + RECT 20.58 38.9225 21.465 38.8575 ; + RECT 21.3425 38.14 21.4075 38.005 ; + RECT 20.635 38.2425 20.705 38.1075 ; + RECT 20.905 38.6325 20.97 38.4975 ; + RECT 21.155 38.2425 21.22 38.1075 ; + RECT 21.0875 38.6325 21.1525 38.4975 ; + RECT 20.64 38.2425 20.705 38.1075 ; + RECT 21.155 37.7775 21.22 37.565 ; + RECT 20.825 37.7775 20.89 37.6425 ; + RECT 21.155 38.4075 21.22 37.7775 ; + RECT 20.6025 38.9225 20.7375 38.8575 ; + RECT 20.72 38.6325 20.785 38.4975 ; + RECT 20.825 39.5375 20.89 39.6725 ; + RECT 20.72 39.3725 20.89 39.4375 ; + RECT 21.34 39.5375 21.41 39.6725 ; + RECT 20.58 38.9975 21.465 39.0625 ; + RECT 20.635 40.0025 20.705 40.2025 ; + RECT 21.34 40.0025 21.405 40.1375 ; + RECT 20.8925 39.1475 20.9575 39.2825 ; + RECT 21.075 39.1475 21.14 39.2825 ; + RECT 21.34 39.5375 21.405 39.6725 ; + RECT 21.3075 38.8575 21.4425 38.9225 ; + RECT 21.0675 39.7375 21.2025 39.8025 ; + RECT 21.29 39.0 21.3425 39.0625 ; + RECT 20.8425 39.8875 20.9775 39.9525 ; + RECT 20.72 39.1475 20.79 39.4375 ; + RECT 20.825 39.3725 20.89 40.1125 ; + RECT 21.34 40.0025 21.41 40.2025 ; + RECT 20.585 39.0 20.6375 39.0625 ; + RECT 20.58 40.2025 21.465 40.2675 ; + RECT 21.26 39.1475 21.325 39.2825 ; + RECT 20.6375 39.64 20.7025 39.775 ; + RECT 21.26 39.1475 21.33 39.4375 ; + RECT 20.955 38.8575 21.09 38.9225 ; + RECT 20.9375 38.9975 21.0725 39.0625 ; + RECT 21.155 39.3725 21.33 39.4375 ; + RECT 20.64 40.0025 20.705 40.1375 ; + RECT 20.58 38.8575 21.465 38.9225 ; + RECT 21.3425 39.64 21.4075 39.775 ; + RECT 20.635 39.5375 20.705 39.6725 ; + RECT 20.905 39.1475 20.97 39.2825 ; + RECT 21.155 39.5375 21.22 39.6725 ; + RECT 21.0875 39.1475 21.1525 39.2825 ; + RECT 20.64 39.5375 20.705 39.6725 ; + RECT 21.155 40.0025 21.22 40.215 ; + RECT 20.825 40.0025 20.89 40.1375 ; + RECT 21.155 39.3725 21.22 40.0025 ; + RECT 20.6025 38.8575 20.7375 38.9225 ; + RECT 20.72 39.1475 20.785 39.2825 ; + RECT 20.825 40.9325 20.89 40.7975 ; + RECT 20.72 41.0975 20.89 41.0325 ; + RECT 21.34 40.9325 21.41 40.7975 ; + RECT 20.58 41.4725 21.465 41.4075 ; + RECT 20.635 40.4675 20.705 40.2675 ; + RECT 21.34 40.4675 21.405 40.3325 ; + RECT 20.8925 41.3225 20.9575 41.1875 ; + RECT 21.075 41.3225 21.14 41.1875 ; + RECT 21.34 40.9325 21.405 40.7975 ; + RECT 21.3075 41.6125 21.4425 41.5475 ; + RECT 21.0675 40.7325 21.2025 40.6675 ; + RECT 21.29 41.47 21.3425 41.4075 ; + RECT 20.8425 40.5825 20.9775 40.5175 ; + RECT 20.72 41.3225 20.79 41.0325 ; + RECT 20.825 41.0975 20.89 40.3575 ; + RECT 21.34 40.4675 21.41 40.2675 ; + RECT 20.585 41.47 20.6375 41.4075 ; + RECT 20.58 40.2675 21.465 40.2025 ; + RECT 21.26 41.3225 21.325 41.1875 ; + RECT 20.6375 40.83 20.7025 40.695 ; + RECT 21.26 41.3225 21.33 41.0325 ; + RECT 20.955 41.6125 21.09 41.5475 ; + RECT 20.9375 41.4725 21.0725 41.4075 ; + RECT 21.155 41.0975 21.33 41.0325 ; + RECT 20.64 40.4675 20.705 40.3325 ; + RECT 20.58 41.6125 21.465 41.5475 ; + RECT 21.3425 40.83 21.4075 40.695 ; + RECT 20.635 40.9325 20.705 40.7975 ; + RECT 20.905 41.3225 20.97 41.1875 ; + RECT 21.155 40.9325 21.22 40.7975 ; + RECT 21.0875 41.3225 21.1525 41.1875 ; + RECT 20.64 40.9325 20.705 40.7975 ; + RECT 21.155 40.4675 21.22 40.255 ; + RECT 20.825 40.4675 20.89 40.3325 ; + RECT 21.155 41.0975 21.22 40.4675 ; + RECT 20.6025 41.6125 20.7375 41.5475 ; + RECT 20.72 41.3225 20.785 41.1875 ; + RECT 20.825 42.2275 20.89 42.3625 ; + RECT 20.72 42.0625 20.89 42.1275 ; + RECT 21.34 42.2275 21.41 42.3625 ; + RECT 20.58 41.6875 21.465 41.7525 ; + RECT 20.635 42.6925 20.705 42.8925 ; + RECT 21.34 42.6925 21.405 42.8275 ; + RECT 20.8925 41.8375 20.9575 41.9725 ; + RECT 21.075 41.8375 21.14 41.9725 ; + RECT 21.34 42.2275 21.405 42.3625 ; + RECT 21.3075 41.5475 21.4425 41.6125 ; + RECT 21.0675 42.4275 21.2025 42.4925 ; + RECT 21.29 41.69 21.3425 41.7525 ; + RECT 20.8425 42.5775 20.9775 42.6425 ; + RECT 20.72 41.8375 20.79 42.1275 ; + RECT 20.825 42.0625 20.89 42.8025 ; + RECT 21.34 42.6925 21.41 42.8925 ; + RECT 20.585 41.69 20.6375 41.7525 ; + RECT 20.58 42.8925 21.465 42.9575 ; + RECT 21.26 41.8375 21.325 41.9725 ; + RECT 20.6375 42.33 20.7025 42.465 ; + RECT 21.26 41.8375 21.33 42.1275 ; + RECT 20.955 41.5475 21.09 41.6125 ; + RECT 20.9375 41.6875 21.0725 41.7525 ; + RECT 21.155 42.0625 21.33 42.1275 ; + RECT 20.64 42.6925 20.705 42.8275 ; + RECT 20.58 41.5475 21.465 41.6125 ; + RECT 21.3425 42.33 21.4075 42.465 ; + RECT 20.635 42.2275 20.705 42.3625 ; + RECT 20.905 41.8375 20.97 41.9725 ; + RECT 21.155 42.2275 21.22 42.3625 ; + RECT 21.0875 41.8375 21.1525 41.9725 ; + RECT 20.64 42.2275 20.705 42.3625 ; + RECT 21.155 42.6925 21.22 42.905 ; + RECT 20.825 42.6925 20.89 42.8275 ; + RECT 21.155 42.0625 21.22 42.6925 ; + RECT 20.6025 41.5475 20.7375 41.6125 ; + RECT 20.72 41.8375 20.785 41.9725 ; + RECT 20.825 43.6225 20.89 43.4875 ; + RECT 20.72 43.7875 20.89 43.7225 ; + RECT 21.34 43.6225 21.41 43.4875 ; + RECT 20.58 44.1625 21.465 44.0975 ; + RECT 20.635 43.1575 20.705 42.9575 ; + RECT 21.34 43.1575 21.405 43.0225 ; + RECT 20.8925 44.0125 20.9575 43.8775 ; + RECT 21.075 44.0125 21.14 43.8775 ; + RECT 21.34 43.6225 21.405 43.4875 ; + RECT 21.3075 44.3025 21.4425 44.2375 ; + RECT 21.0675 43.4225 21.2025 43.3575 ; + RECT 21.29 44.16 21.3425 44.0975 ; + RECT 20.8425 43.2725 20.9775 43.2075 ; + RECT 20.72 44.0125 20.79 43.7225 ; + RECT 20.825 43.7875 20.89 43.0475 ; + RECT 21.34 43.1575 21.41 42.9575 ; + RECT 20.585 44.16 20.6375 44.0975 ; + RECT 20.58 42.9575 21.465 42.8925 ; + RECT 21.26 44.0125 21.325 43.8775 ; + RECT 20.6375 43.52 20.7025 43.385 ; + RECT 21.26 44.0125 21.33 43.7225 ; + RECT 20.955 44.3025 21.09 44.2375 ; + RECT 20.9375 44.1625 21.0725 44.0975 ; + RECT 21.155 43.7875 21.33 43.7225 ; + RECT 20.64 43.1575 20.705 43.0225 ; + RECT 20.58 44.3025 21.465 44.2375 ; + RECT 21.3425 43.52 21.4075 43.385 ; + RECT 20.635 43.6225 20.705 43.4875 ; + RECT 20.905 44.0125 20.97 43.8775 ; + RECT 21.155 43.6225 21.22 43.4875 ; + RECT 21.0875 44.0125 21.1525 43.8775 ; + RECT 20.64 43.6225 20.705 43.4875 ; + RECT 21.155 43.1575 21.22 42.945 ; + RECT 20.825 43.1575 20.89 43.0225 ; + RECT 21.155 43.7875 21.22 43.1575 ; + RECT 20.6025 44.3025 20.7375 44.2375 ; + RECT 20.72 44.0125 20.785 43.8775 ; + RECT 20.825 44.9175 20.89 45.0525 ; + RECT 21.34 44.9175 21.41 45.0525 ; + RECT 20.72 44.7525 20.89 44.8175 ; + RECT 20.58 44.3775 21.465 44.4425 ; + RECT 20.635 45.3825 20.705 45.5825 ; + RECT 21.34 45.3825 21.405 45.5175 ; + RECT 20.8925 44.5275 20.9575 44.6625 ; + RECT 21.075 44.5275 21.14 44.6625 ; + RECT 21.34 44.9175 21.405 45.0525 ; + RECT 21.3075 44.2375 21.4425 44.3025 ; + RECT 21.0675 45.1175 21.2025 45.1825 ; + RECT 21.29 44.38 21.3425 44.4425 ; + RECT 20.8425 45.2675 20.9775 45.3325 ; + RECT 20.72 44.5275 20.79 44.8175 ; + RECT 20.825 44.7525 20.89 45.4925 ; + RECT 21.34 45.3825 21.41 45.5825 ; + RECT 21.26 44.5275 21.325 44.6625 ; + RECT 20.585 44.38 20.6375 44.4425 ; + RECT 20.58 45.5825 21.465 45.6475 ; + RECT 20.6375 45.02 20.7025 45.155 ; + RECT 20.955 44.2375 21.09 44.3025 ; + RECT 21.26 44.5275 21.33 44.8175 ; + RECT 20.9375 44.3775 21.0725 44.4425 ; + RECT 20.64 45.3825 20.705 45.5175 ; + RECT 21.155 44.7525 21.33 44.8175 ; + RECT 21.155 45.3825 21.22 45.5175 ; + RECT 20.58 44.2375 21.465 44.3025 ; + RECT 21.3425 45.02 21.4075 45.155 ; + RECT 20.635 44.9175 20.705 45.0525 ; + RECT 20.905 44.5275 20.97 44.6625 ; + RECT 21.155 44.9175 21.22 45.0525 ; + RECT 21.0875 44.5275 21.1525 44.6625 ; + RECT 20.64 44.9175 20.705 45.0525 ; + RECT 20.825 45.3825 20.89 45.5175 ; + RECT 21.155 44.7525 21.22 45.3825 ; + RECT 20.6025 44.2375 20.7375 44.3025 ; + RECT 20.72 44.5275 20.785 44.6625 ; + RECT 20.67 20.1675 21.375 20.2325 ; + RECT 20.67 22.5775 21.375 22.6425 ; + RECT 20.67 22.8575 21.375 22.9225 ; + RECT 20.67 25.2675 21.375 25.3325 ; + RECT 20.67 25.5475 21.375 25.6125 ; + RECT 20.67 27.9575 21.375 28.0225 ; + RECT 20.67 28.2375 21.375 28.3025 ; + RECT 20.67 30.6475 21.375 30.7125 ; + RECT 20.67 30.9275 21.375 30.9925 ; + RECT 20.67 33.3375 21.375 33.4025 ; + RECT 20.67 33.6175 21.375 33.6825 ; + RECT 20.67 36.0275 21.375 36.0925 ; + RECT 20.67 36.3075 21.375 36.3725 ; + RECT 20.67 38.7175 21.375 38.7825 ; + RECT 20.67 38.9975 21.375 39.0625 ; + RECT 20.67 41.4075 21.375 41.4725 ; + RECT 20.67 41.6875 21.375 41.7525 ; + RECT 20.67 44.0975 21.375 44.1625 ; + RECT 20.67 44.3775 21.375 44.4425 ; + RECT 21.53 22.1025 21.595 21.9675 ; + RECT 22.045 22.1025 22.115 21.9675 ; + RECT 21.425 22.2675 21.595 22.2025 ; + RECT 21.285 22.6425 22.17 22.5775 ; + RECT 21.34 21.6375 21.41 21.4375 ; + RECT 22.045 21.6375 22.11 21.5025 ; + RECT 21.5975 22.4925 21.6625 22.3575 ; + RECT 21.78 22.4925 21.845 22.3575 ; + RECT 22.045 22.1025 22.11 21.9675 ; + RECT 22.0125 22.7825 22.1475 22.7175 ; + RECT 21.7725 21.9025 21.9075 21.8375 ; + RECT 21.995 22.64 22.0475 22.5775 ; + RECT 21.5475 21.7525 21.6825 21.6875 ; + RECT 21.425 22.4925 21.495 22.2025 ; + RECT 21.53 22.2675 21.595 21.5275 ; + RECT 22.045 21.6375 22.115 21.4375 ; + RECT 21.965 22.4925 22.03 22.3575 ; + RECT 21.29 22.64 21.3425 22.5775 ; + RECT 21.285 21.4375 22.17 21.3725 ; + RECT 21.3425 22.0 21.4075 21.865 ; + RECT 21.66 22.7825 21.795 22.7175 ; + RECT 21.965 22.4925 22.035 22.2025 ; + RECT 21.6425 22.6425 21.7775 22.5775 ; + RECT 21.345 21.6375 21.41 21.5025 ; + RECT 21.86 22.2675 22.035 22.2025 ; + RECT 21.86 21.6375 21.925 21.5025 ; + RECT 21.285 22.7825 22.17 22.7175 ; + RECT 22.0475 22.0 22.1125 21.865 ; + RECT 21.34 22.1025 21.41 21.9675 ; + RECT 21.61 22.4925 21.675 22.3575 ; + RECT 21.86 22.1025 21.925 21.9675 ; + RECT 21.7925 22.4925 21.8575 22.3575 ; + RECT 21.345 22.1025 21.41 21.9675 ; + RECT 21.53 21.6375 21.595 21.5025 ; + RECT 21.86 22.2675 21.925 21.6375 ; + RECT 21.3075 22.7825 21.4425 22.7175 ; + RECT 21.425 22.4925 21.49 22.3575 ; + RECT 22.235 22.1025 22.3 21.9675 ; + RECT 22.75 22.1025 22.82 21.9675 ; + RECT 22.13 22.2675 22.3 22.2025 ; + RECT 21.99 22.6425 22.875 22.5775 ; + RECT 22.045 21.6375 22.115 21.4375 ; + RECT 22.75 21.6375 22.815 21.5025 ; + RECT 22.3025 22.4925 22.3675 22.3575 ; + RECT 22.485 22.4925 22.55 22.3575 ; + RECT 22.75 22.1025 22.815 21.9675 ; + RECT 22.7175 22.7825 22.8525 22.7175 ; + RECT 22.4775 21.9025 22.6125 21.8375 ; + RECT 22.7 22.64 22.7525 22.5775 ; + RECT 22.2525 21.7525 22.3875 21.6875 ; + RECT 22.13 22.4925 22.2 22.2025 ; + RECT 22.235 22.2675 22.3 21.5275 ; + RECT 22.75 21.6375 22.82 21.4375 ; + RECT 22.67 22.4925 22.735 22.3575 ; + RECT 21.995 22.64 22.0475 22.5775 ; + RECT 21.99 21.4375 22.875 21.3725 ; + RECT 22.0475 22.0 22.1125 21.865 ; + RECT 22.365 22.7825 22.5 22.7175 ; + RECT 22.67 22.4925 22.74 22.2025 ; + RECT 22.3475 22.6425 22.4825 22.5775 ; + RECT 22.05 21.6375 22.115 21.5025 ; + RECT 22.565 22.2675 22.74 22.2025 ; + RECT 22.565 21.6375 22.63 21.5025 ; + RECT 21.99 22.7825 22.875 22.7175 ; + RECT 22.7525 22.0 22.8175 21.865 ; + RECT 22.045 22.1025 22.115 21.9675 ; + RECT 22.315 22.4925 22.38 22.3575 ; + RECT 22.565 22.1025 22.63 21.9675 ; + RECT 22.4975 22.4925 22.5625 22.3575 ; + RECT 22.05 22.1025 22.115 21.9675 ; + RECT 22.235 21.6375 22.3 21.5025 ; + RECT 22.565 22.2675 22.63 21.6375 ; + RECT 22.0125 22.7825 22.1475 22.7175 ; + RECT 22.13 22.4925 22.195 22.3575 ; + RECT 21.375 22.6425 22.785 22.5775 ; + RECT 21.53 20.7075 21.595 20.8425 ; + RECT 22.045 20.7075 22.115 20.8425 ; + RECT 21.425 20.5425 21.595 20.6075 ; + RECT 21.285 20.1675 22.17 20.2325 ; + RECT 21.34 21.1725 21.41 21.3725 ; + RECT 22.045 21.1725 22.11 21.3075 ; + RECT 21.5975 20.3175 21.6625 20.4525 ; + RECT 21.78 20.3175 21.845 20.4525 ; + RECT 22.045 20.7075 22.11 20.8425 ; + RECT 22.0125 20.0275 22.1475 20.0925 ; + RECT 21.7725 20.9075 21.9075 20.9725 ; + RECT 21.995 20.17 22.0475 20.2325 ; + RECT 21.5475 21.0575 21.6825 21.1225 ; + RECT 21.425 20.3175 21.495 20.6075 ; + RECT 21.53 20.5425 21.595 21.2825 ; + RECT 22.045 21.1725 22.115 21.3725 ; + RECT 21.965 20.3175 22.03 20.4525 ; + RECT 21.29 20.17 21.3425 20.2325 ; + RECT 21.285 21.3725 22.17 21.4375 ; + RECT 21.3425 20.81 21.4075 20.945 ; + RECT 21.66 20.0275 21.795 20.0925 ; + RECT 21.965 20.3175 22.035 20.6075 ; + RECT 21.6425 20.1675 21.7775 20.2325 ; + RECT 21.345 21.1725 21.41 21.3075 ; + RECT 21.86 20.5425 22.035 20.6075 ; + RECT 21.86 21.1725 21.925 21.3075 ; + RECT 21.285 20.0275 22.17 20.0925 ; + RECT 22.0475 20.81 22.1125 20.945 ; + RECT 21.34 20.7075 21.41 20.8425 ; + RECT 21.61 20.3175 21.675 20.4525 ; + RECT 21.86 20.7075 21.925 20.8425 ; + RECT 21.7925 20.3175 21.8575 20.4525 ; + RECT 21.345 20.7075 21.41 20.8425 ; + RECT 21.53 21.1725 21.595 21.3075 ; + RECT 21.86 20.5425 21.925 21.1725 ; + RECT 21.3075 20.0275 21.4425 20.0925 ; + RECT 21.425 20.3175 21.49 20.4525 ; + RECT 22.235 20.7075 22.3 20.8425 ; + RECT 22.75 20.7075 22.82 20.8425 ; + RECT 22.13 20.5425 22.3 20.6075 ; + RECT 21.99 20.1675 22.875 20.2325 ; + RECT 22.045 21.1725 22.115 21.3725 ; + RECT 22.75 21.1725 22.815 21.3075 ; + RECT 22.3025 20.3175 22.3675 20.4525 ; + RECT 22.485 20.3175 22.55 20.4525 ; + RECT 22.75 20.7075 22.815 20.8425 ; + RECT 22.7175 20.0275 22.8525 20.0925 ; + RECT 22.4775 20.9075 22.6125 20.9725 ; + RECT 22.7 20.17 22.7525 20.2325 ; + RECT 22.2525 21.0575 22.3875 21.1225 ; + RECT 22.13 20.3175 22.2 20.6075 ; + RECT 22.235 20.5425 22.3 21.2825 ; + RECT 22.75 21.1725 22.82 21.3725 ; + RECT 22.67 20.3175 22.735 20.4525 ; + RECT 21.995 20.17 22.0475 20.2325 ; + RECT 21.99 21.3725 22.875 21.4375 ; + RECT 22.0475 20.81 22.1125 20.945 ; + RECT 22.365 20.0275 22.5 20.0925 ; + RECT 22.67 20.3175 22.74 20.6075 ; + RECT 22.3475 20.1675 22.4825 20.2325 ; + RECT 22.05 21.1725 22.115 21.3075 ; + RECT 22.565 20.5425 22.74 20.6075 ; + RECT 22.565 21.1725 22.63 21.3075 ; + RECT 21.99 20.0275 22.875 20.0925 ; + RECT 22.7525 20.81 22.8175 20.945 ; + RECT 22.045 20.7075 22.115 20.8425 ; + RECT 22.315 20.3175 22.38 20.4525 ; + RECT 22.565 20.7075 22.63 20.8425 ; + RECT 22.4975 20.3175 22.5625 20.4525 ; + RECT 22.05 20.7075 22.115 20.8425 ; + RECT 22.235 21.1725 22.3 21.3075 ; + RECT 22.565 20.5425 22.63 21.1725 ; + RECT 22.0125 20.0275 22.1475 20.0925 ; + RECT 22.13 20.3175 22.195 20.4525 ; + RECT 21.375 20.1675 22.785 20.2325 ; + RECT 21.53 44.9175 21.595 45.0525 ; + RECT 22.045 44.9175 22.115 45.0525 ; + RECT 21.425 44.7525 21.595 44.8175 ; + RECT 21.285 44.3775 22.17 44.4425 ; + RECT 21.34 45.3825 21.41 45.5825 ; + RECT 22.045 45.3825 22.11 45.5175 ; + RECT 21.5975 44.5275 21.6625 44.6625 ; + RECT 21.78 44.5275 21.845 44.6625 ; + RECT 22.045 44.9175 22.11 45.0525 ; + RECT 22.0125 44.2375 22.1475 44.3025 ; + RECT 21.7725 45.1175 21.9075 45.1825 ; + RECT 21.995 44.38 22.0475 44.4425 ; + RECT 21.5475 45.2675 21.6825 45.3325 ; + RECT 21.425 44.5275 21.495 44.8175 ; + RECT 21.53 44.7525 21.595 45.4925 ; + RECT 22.045 45.3825 22.115 45.5825 ; + RECT 21.965 44.5275 22.03 44.6625 ; + RECT 21.29 44.38 21.3425 44.4425 ; + RECT 21.285 45.5825 22.17 45.6475 ; + RECT 21.3425 45.02 21.4075 45.155 ; + RECT 21.66 44.2375 21.795 44.3025 ; + RECT 21.965 44.5275 22.035 44.8175 ; + RECT 21.6425 44.3775 21.7775 44.4425 ; + RECT 21.345 45.3825 21.41 45.5175 ; + RECT 21.86 44.7525 22.035 44.8175 ; + RECT 21.86 45.3825 21.925 45.5175 ; + RECT 21.285 44.2375 22.17 44.3025 ; + RECT 22.0475 45.02 22.1125 45.155 ; + RECT 21.34 44.9175 21.41 45.0525 ; + RECT 21.61 44.5275 21.675 44.6625 ; + RECT 21.86 44.9175 21.925 45.0525 ; + RECT 21.7925 44.5275 21.8575 44.6625 ; + RECT 21.345 44.9175 21.41 45.0525 ; + RECT 21.53 45.3825 21.595 45.5175 ; + RECT 21.86 44.7525 21.925 45.3825 ; + RECT 21.3075 44.2375 21.4425 44.3025 ; + RECT 21.425 44.5275 21.49 44.6625 ; + RECT 22.235 44.9175 22.3 45.0525 ; + RECT 22.75 44.9175 22.82 45.0525 ; + RECT 22.13 44.7525 22.3 44.8175 ; + RECT 21.99 44.3775 22.875 44.4425 ; + RECT 22.045 45.3825 22.115 45.5825 ; + RECT 22.75 45.3825 22.815 45.5175 ; + RECT 22.3025 44.5275 22.3675 44.6625 ; + RECT 22.485 44.5275 22.55 44.6625 ; + RECT 22.75 44.9175 22.815 45.0525 ; + RECT 22.7175 44.2375 22.8525 44.3025 ; + RECT 22.4775 45.1175 22.6125 45.1825 ; + RECT 22.7 44.38 22.7525 44.4425 ; + RECT 22.2525 45.2675 22.3875 45.3325 ; + RECT 22.13 44.5275 22.2 44.8175 ; + RECT 22.235 44.7525 22.3 45.4925 ; + RECT 22.75 45.3825 22.82 45.5825 ; + RECT 22.67 44.5275 22.735 44.6625 ; + RECT 21.995 44.38 22.0475 44.4425 ; + RECT 21.99 45.5825 22.875 45.6475 ; + RECT 22.0475 45.02 22.1125 45.155 ; + RECT 22.365 44.2375 22.5 44.3025 ; + RECT 22.67 44.5275 22.74 44.8175 ; + RECT 22.3475 44.3775 22.4825 44.4425 ; + RECT 22.05 45.3825 22.115 45.5175 ; + RECT 22.565 44.7525 22.74 44.8175 ; + RECT 22.565 45.3825 22.63 45.5175 ; + RECT 21.99 44.2375 22.875 44.3025 ; + RECT 22.7525 45.02 22.8175 45.155 ; + RECT 22.045 44.9175 22.115 45.0525 ; + RECT 22.315 44.5275 22.38 44.6625 ; + RECT 22.565 44.9175 22.63 45.0525 ; + RECT 22.4975 44.5275 22.5625 44.6625 ; + RECT 22.05 44.9175 22.115 45.0525 ; + RECT 22.235 45.3825 22.3 45.5175 ; + RECT 22.565 44.7525 22.63 45.3825 ; + RECT 22.0125 44.2375 22.1475 44.3025 ; + RECT 22.13 44.5275 22.195 44.6625 ; + RECT 21.375 44.3775 22.785 44.4425 ; + RECT 20.12 20.7075 20.185 20.8425 ; + RECT 20.635 20.7075 20.705 20.8425 ; + RECT 20.015 20.5425 20.185 20.6075 ; + RECT 19.875 20.1675 20.76 20.2325 ; + RECT 19.93 21.1725 20.0 21.3725 ; + RECT 20.635 21.1725 20.7 21.3075 ; + RECT 20.1875 20.3175 20.2525 20.4525 ; + RECT 20.37 20.3175 20.435 20.4525 ; + RECT 20.635 20.7075 20.7 20.8425 ; + RECT 20.6025 20.0275 20.7375 20.0925 ; + RECT 20.3625 20.9075 20.4975 20.9725 ; + RECT 20.585 20.17 20.6375 20.2325 ; + RECT 20.1375 21.0575 20.2725 21.1225 ; + RECT 20.015 20.3175 20.085 20.6075 ; + RECT 20.12 20.5425 20.185 21.2825 ; + RECT 20.635 21.1725 20.705 21.3725 ; + RECT 20.555 20.3175 20.62 20.4525 ; + RECT 19.88 20.17 19.9325 20.2325 ; + RECT 19.875 21.3725 20.76 21.4375 ; + RECT 19.9325 20.81 19.9975 20.945 ; + RECT 20.25 20.0275 20.385 20.0925 ; + RECT 20.555 20.3175 20.625 20.6075 ; + RECT 20.2325 20.1675 20.3675 20.2325 ; + RECT 19.935 21.1725 20.0 21.3075 ; + RECT 20.45 20.5425 20.625 20.6075 ; + RECT 20.45 21.1725 20.515 21.3075 ; + RECT 19.875 20.0275 20.76 20.0925 ; + RECT 20.6375 20.81 20.7025 20.945 ; + RECT 19.93 20.7075 20.0 20.8425 ; + RECT 20.2 20.3175 20.265 20.4525 ; + RECT 20.45 20.7075 20.515 20.8425 ; + RECT 20.3825 20.3175 20.4475 20.4525 ; + RECT 19.935 20.7075 20.0 20.8425 ; + RECT 20.12 21.1725 20.185 21.3075 ; + RECT 20.45 20.5425 20.515 21.1725 ; + RECT 19.8975 20.0275 20.0325 20.0925 ; + RECT 20.015 20.3175 20.08 20.4525 ; + RECT 20.12 22.1025 20.185 21.9675 ; + RECT 20.635 22.1025 20.705 21.9675 ; + RECT 20.015 22.2675 20.185 22.2025 ; + RECT 19.875 22.6425 20.76 22.5775 ; + RECT 19.93 21.6375 20.0 21.4375 ; + RECT 20.635 21.6375 20.7 21.5025 ; + RECT 20.1875 22.4925 20.2525 22.3575 ; + RECT 20.37 22.4925 20.435 22.3575 ; + RECT 20.635 22.1025 20.7 21.9675 ; + RECT 20.6025 22.7825 20.7375 22.7175 ; + RECT 20.3625 21.9025 20.4975 21.8375 ; + RECT 20.585 22.64 20.6375 22.5775 ; + RECT 20.1375 21.7525 20.2725 21.6875 ; + RECT 20.015 22.4925 20.085 22.2025 ; + RECT 20.12 22.2675 20.185 21.5275 ; + RECT 20.635 21.6375 20.705 21.4375 ; + RECT 20.555 22.4925 20.62 22.3575 ; + RECT 19.88 22.64 19.9325 22.5775 ; + RECT 19.875 21.4375 20.76 21.3725 ; + RECT 19.9325 22.0 19.9975 21.865 ; + RECT 20.25 22.7825 20.385 22.7175 ; + RECT 20.555 22.4925 20.625 22.2025 ; + RECT 20.2325 22.6425 20.3675 22.5775 ; + RECT 19.935 21.6375 20.0 21.5025 ; + RECT 20.45 22.2675 20.625 22.2025 ; + RECT 20.45 21.6375 20.515 21.5025 ; + RECT 19.875 22.7825 20.76 22.7175 ; + RECT 20.6375 22.0 20.7025 21.865 ; + RECT 19.93 22.1025 20.0 21.9675 ; + RECT 20.2 22.4925 20.265 22.3575 ; + RECT 20.45 22.1025 20.515 21.9675 ; + RECT 20.3825 22.4925 20.4475 22.3575 ; + RECT 19.935 22.1025 20.0 21.9675 ; + RECT 20.12 21.6375 20.185 21.5025 ; + RECT 20.45 22.2675 20.515 21.6375 ; + RECT 19.8975 22.7825 20.0325 22.7175 ; + RECT 20.015 22.4925 20.08 22.3575 ; + RECT 20.12 23.3975 20.185 23.5325 ; + RECT 20.635 23.3975 20.705 23.5325 ; + RECT 20.015 23.2325 20.185 23.2975 ; + RECT 19.875 22.8575 20.76 22.9225 ; + RECT 19.93 23.8625 20.0 24.0625 ; + RECT 20.635 23.8625 20.7 23.9975 ; + RECT 20.1875 23.0075 20.2525 23.1425 ; + RECT 20.37 23.0075 20.435 23.1425 ; + RECT 20.635 23.3975 20.7 23.5325 ; + RECT 20.6025 22.7175 20.7375 22.7825 ; + RECT 20.3625 23.5975 20.4975 23.6625 ; + RECT 20.585 22.86 20.6375 22.9225 ; + RECT 20.1375 23.7475 20.2725 23.8125 ; + RECT 20.015 23.0075 20.085 23.2975 ; + RECT 20.12 23.2325 20.185 23.9725 ; + RECT 20.635 23.8625 20.705 24.0625 ; + RECT 20.555 23.0075 20.62 23.1425 ; + RECT 19.88 22.86 19.9325 22.9225 ; + RECT 19.875 24.0625 20.76 24.1275 ; + RECT 19.9325 23.5 19.9975 23.635 ; + RECT 20.25 22.7175 20.385 22.7825 ; + RECT 20.555 23.0075 20.625 23.2975 ; + RECT 20.2325 22.8575 20.3675 22.9225 ; + RECT 19.935 23.8625 20.0 23.9975 ; + RECT 20.45 23.2325 20.625 23.2975 ; + RECT 20.45 23.8625 20.515 23.9975 ; + RECT 19.875 22.7175 20.76 22.7825 ; + RECT 20.6375 23.5 20.7025 23.635 ; + RECT 19.93 23.3975 20.0 23.5325 ; + RECT 20.2 23.0075 20.265 23.1425 ; + RECT 20.45 23.3975 20.515 23.5325 ; + RECT 20.3825 23.0075 20.4475 23.1425 ; + RECT 19.935 23.3975 20.0 23.5325 ; + RECT 20.12 23.8625 20.185 23.9975 ; + RECT 20.45 23.2325 20.515 23.8625 ; + RECT 19.8975 22.7175 20.0325 22.7825 ; + RECT 20.015 23.0075 20.08 23.1425 ; + RECT 20.12 24.7925 20.185 24.6575 ; + RECT 20.635 24.7925 20.705 24.6575 ; + RECT 20.015 24.9575 20.185 24.8925 ; + RECT 19.875 25.3325 20.76 25.2675 ; + RECT 19.93 24.3275 20.0 24.1275 ; + RECT 20.635 24.3275 20.7 24.1925 ; + RECT 20.1875 25.1825 20.2525 25.0475 ; + RECT 20.37 25.1825 20.435 25.0475 ; + RECT 20.635 24.7925 20.7 24.6575 ; + RECT 20.6025 25.4725 20.7375 25.4075 ; + RECT 20.3625 24.5925 20.4975 24.5275 ; + RECT 20.585 25.33 20.6375 25.2675 ; + RECT 20.1375 24.4425 20.2725 24.3775 ; + RECT 20.015 25.1825 20.085 24.8925 ; + RECT 20.12 24.9575 20.185 24.2175 ; + RECT 20.635 24.3275 20.705 24.1275 ; + RECT 20.555 25.1825 20.62 25.0475 ; + RECT 19.88 25.33 19.9325 25.2675 ; + RECT 19.875 24.1275 20.76 24.0625 ; + RECT 19.9325 24.69 19.9975 24.555 ; + RECT 20.25 25.4725 20.385 25.4075 ; + RECT 20.555 25.1825 20.625 24.8925 ; + RECT 20.2325 25.3325 20.3675 25.2675 ; + RECT 19.935 24.3275 20.0 24.1925 ; + RECT 20.45 24.9575 20.625 24.8925 ; + RECT 20.45 24.3275 20.515 24.1925 ; + RECT 19.875 25.4725 20.76 25.4075 ; + RECT 20.6375 24.69 20.7025 24.555 ; + RECT 19.93 24.7925 20.0 24.6575 ; + RECT 20.2 25.1825 20.265 25.0475 ; + RECT 20.45 24.7925 20.515 24.6575 ; + RECT 20.3825 25.1825 20.4475 25.0475 ; + RECT 19.935 24.7925 20.0 24.6575 ; + RECT 20.12 24.3275 20.185 24.1925 ; + RECT 20.45 24.9575 20.515 24.3275 ; + RECT 19.8975 25.4725 20.0325 25.4075 ; + RECT 20.015 25.1825 20.08 25.0475 ; + RECT 20.12 26.0875 20.185 26.2225 ; + RECT 20.635 26.0875 20.705 26.2225 ; + RECT 20.015 25.9225 20.185 25.9875 ; + RECT 19.875 25.5475 20.76 25.6125 ; + RECT 19.93 26.5525 20.0 26.7525 ; + RECT 20.635 26.5525 20.7 26.6875 ; + RECT 20.1875 25.6975 20.2525 25.8325 ; + RECT 20.37 25.6975 20.435 25.8325 ; + RECT 20.635 26.0875 20.7 26.2225 ; + RECT 20.6025 25.4075 20.7375 25.4725 ; + RECT 20.3625 26.2875 20.4975 26.3525 ; + RECT 20.585 25.55 20.6375 25.6125 ; + RECT 20.1375 26.4375 20.2725 26.5025 ; + RECT 20.015 25.6975 20.085 25.9875 ; + RECT 20.12 25.9225 20.185 26.6625 ; + RECT 20.635 26.5525 20.705 26.7525 ; + RECT 20.555 25.6975 20.62 25.8325 ; + RECT 19.88 25.55 19.9325 25.6125 ; + RECT 19.875 26.7525 20.76 26.8175 ; + RECT 19.9325 26.19 19.9975 26.325 ; + RECT 20.25 25.4075 20.385 25.4725 ; + RECT 20.555 25.6975 20.625 25.9875 ; + RECT 20.2325 25.5475 20.3675 25.6125 ; + RECT 19.935 26.5525 20.0 26.6875 ; + RECT 20.45 25.9225 20.625 25.9875 ; + RECT 20.45 26.5525 20.515 26.6875 ; + RECT 19.875 25.4075 20.76 25.4725 ; + RECT 20.6375 26.19 20.7025 26.325 ; + RECT 19.93 26.0875 20.0 26.2225 ; + RECT 20.2 25.6975 20.265 25.8325 ; + RECT 20.45 26.0875 20.515 26.2225 ; + RECT 20.3825 25.6975 20.4475 25.8325 ; + RECT 19.935 26.0875 20.0 26.2225 ; + RECT 20.12 26.5525 20.185 26.6875 ; + RECT 20.45 25.9225 20.515 26.5525 ; + RECT 19.8975 25.4075 20.0325 25.4725 ; + RECT 20.015 25.6975 20.08 25.8325 ; + RECT 20.12 27.4825 20.185 27.3475 ; + RECT 20.635 27.4825 20.705 27.3475 ; + RECT 20.015 27.6475 20.185 27.5825 ; + RECT 19.875 28.0225 20.76 27.9575 ; + RECT 19.93 27.0175 20.0 26.8175 ; + RECT 20.635 27.0175 20.7 26.8825 ; + RECT 20.1875 27.8725 20.2525 27.7375 ; + RECT 20.37 27.8725 20.435 27.7375 ; + RECT 20.635 27.4825 20.7 27.3475 ; + RECT 20.6025 28.1625 20.7375 28.0975 ; + RECT 20.3625 27.2825 20.4975 27.2175 ; + RECT 20.585 28.02 20.6375 27.9575 ; + RECT 20.1375 27.1325 20.2725 27.0675 ; + RECT 20.015 27.8725 20.085 27.5825 ; + RECT 20.12 27.6475 20.185 26.9075 ; + RECT 20.635 27.0175 20.705 26.8175 ; + RECT 20.555 27.8725 20.62 27.7375 ; + RECT 19.88 28.02 19.9325 27.9575 ; + RECT 19.875 26.8175 20.76 26.7525 ; + RECT 19.9325 27.38 19.9975 27.245 ; + RECT 20.25 28.1625 20.385 28.0975 ; + RECT 20.555 27.8725 20.625 27.5825 ; + RECT 20.2325 28.0225 20.3675 27.9575 ; + RECT 19.935 27.0175 20.0 26.8825 ; + RECT 20.45 27.6475 20.625 27.5825 ; + RECT 20.45 27.0175 20.515 26.8825 ; + RECT 19.875 28.1625 20.76 28.0975 ; + RECT 20.6375 27.38 20.7025 27.245 ; + RECT 19.93 27.4825 20.0 27.3475 ; + RECT 20.2 27.8725 20.265 27.7375 ; + RECT 20.45 27.4825 20.515 27.3475 ; + RECT 20.3825 27.8725 20.4475 27.7375 ; + RECT 19.935 27.4825 20.0 27.3475 ; + RECT 20.12 27.0175 20.185 26.8825 ; + RECT 20.45 27.6475 20.515 27.0175 ; + RECT 19.8975 28.1625 20.0325 28.0975 ; + RECT 20.015 27.8725 20.08 27.7375 ; + RECT 20.12 28.7775 20.185 28.9125 ; + RECT 20.635 28.7775 20.705 28.9125 ; + RECT 20.015 28.6125 20.185 28.6775 ; + RECT 19.875 28.2375 20.76 28.3025 ; + RECT 19.93 29.2425 20.0 29.4425 ; + RECT 20.635 29.2425 20.7 29.3775 ; + RECT 20.1875 28.3875 20.2525 28.5225 ; + RECT 20.37 28.3875 20.435 28.5225 ; + RECT 20.635 28.7775 20.7 28.9125 ; + RECT 20.6025 28.0975 20.7375 28.1625 ; + RECT 20.3625 28.9775 20.4975 29.0425 ; + RECT 20.585 28.24 20.6375 28.3025 ; + RECT 20.1375 29.1275 20.2725 29.1925 ; + RECT 20.015 28.3875 20.085 28.6775 ; + RECT 20.12 28.6125 20.185 29.3525 ; + RECT 20.635 29.2425 20.705 29.4425 ; + RECT 20.555 28.3875 20.62 28.5225 ; + RECT 19.88 28.24 19.9325 28.3025 ; + RECT 19.875 29.4425 20.76 29.5075 ; + RECT 19.9325 28.88 19.9975 29.015 ; + RECT 20.25 28.0975 20.385 28.1625 ; + RECT 20.555 28.3875 20.625 28.6775 ; + RECT 20.2325 28.2375 20.3675 28.3025 ; + RECT 19.935 29.2425 20.0 29.3775 ; + RECT 20.45 28.6125 20.625 28.6775 ; + RECT 20.45 29.2425 20.515 29.3775 ; + RECT 19.875 28.0975 20.76 28.1625 ; + RECT 20.6375 28.88 20.7025 29.015 ; + RECT 19.93 28.7775 20.0 28.9125 ; + RECT 20.2 28.3875 20.265 28.5225 ; + RECT 20.45 28.7775 20.515 28.9125 ; + RECT 20.3825 28.3875 20.4475 28.5225 ; + RECT 19.935 28.7775 20.0 28.9125 ; + RECT 20.12 29.2425 20.185 29.3775 ; + RECT 20.45 28.6125 20.515 29.2425 ; + RECT 19.8975 28.0975 20.0325 28.1625 ; + RECT 20.015 28.3875 20.08 28.5225 ; + RECT 20.12 30.1725 20.185 30.0375 ; + RECT 20.635 30.1725 20.705 30.0375 ; + RECT 20.015 30.3375 20.185 30.2725 ; + RECT 19.875 30.7125 20.76 30.6475 ; + RECT 19.93 29.7075 20.0 29.5075 ; + RECT 20.635 29.7075 20.7 29.5725 ; + RECT 20.1875 30.5625 20.2525 30.4275 ; + RECT 20.37 30.5625 20.435 30.4275 ; + RECT 20.635 30.1725 20.7 30.0375 ; + RECT 20.6025 30.8525 20.7375 30.7875 ; + RECT 20.3625 29.9725 20.4975 29.9075 ; + RECT 20.585 30.71 20.6375 30.6475 ; + RECT 20.1375 29.8225 20.2725 29.7575 ; + RECT 20.015 30.5625 20.085 30.2725 ; + RECT 20.12 30.3375 20.185 29.5975 ; + RECT 20.635 29.7075 20.705 29.5075 ; + RECT 20.555 30.5625 20.62 30.4275 ; + RECT 19.88 30.71 19.9325 30.6475 ; + RECT 19.875 29.5075 20.76 29.4425 ; + RECT 19.9325 30.07 19.9975 29.935 ; + RECT 20.25 30.8525 20.385 30.7875 ; + RECT 20.555 30.5625 20.625 30.2725 ; + RECT 20.2325 30.7125 20.3675 30.6475 ; + RECT 19.935 29.7075 20.0 29.5725 ; + RECT 20.45 30.3375 20.625 30.2725 ; + RECT 20.45 29.7075 20.515 29.5725 ; + RECT 19.875 30.8525 20.76 30.7875 ; + RECT 20.6375 30.07 20.7025 29.935 ; + RECT 19.93 30.1725 20.0 30.0375 ; + RECT 20.2 30.5625 20.265 30.4275 ; + RECT 20.45 30.1725 20.515 30.0375 ; + RECT 20.3825 30.5625 20.4475 30.4275 ; + RECT 19.935 30.1725 20.0 30.0375 ; + RECT 20.12 29.7075 20.185 29.5725 ; + RECT 20.45 30.3375 20.515 29.7075 ; + RECT 19.8975 30.8525 20.0325 30.7875 ; + RECT 20.015 30.5625 20.08 30.4275 ; + RECT 20.12 31.4675 20.185 31.6025 ; + RECT 20.635 31.4675 20.705 31.6025 ; + RECT 20.015 31.3025 20.185 31.3675 ; + RECT 19.875 30.9275 20.76 30.9925 ; + RECT 19.93 31.9325 20.0 32.1325 ; + RECT 20.635 31.9325 20.7 32.0675 ; + RECT 20.1875 31.0775 20.2525 31.2125 ; + RECT 20.37 31.0775 20.435 31.2125 ; + RECT 20.635 31.4675 20.7 31.6025 ; + RECT 20.6025 30.7875 20.7375 30.8525 ; + RECT 20.3625 31.6675 20.4975 31.7325 ; + RECT 20.585 30.93 20.6375 30.9925 ; + RECT 20.1375 31.8175 20.2725 31.8825 ; + RECT 20.015 31.0775 20.085 31.3675 ; + RECT 20.12 31.3025 20.185 32.0425 ; + RECT 20.635 31.9325 20.705 32.1325 ; + RECT 20.555 31.0775 20.62 31.2125 ; + RECT 19.88 30.93 19.9325 30.9925 ; + RECT 19.875 32.1325 20.76 32.1975 ; + RECT 19.9325 31.57 19.9975 31.705 ; + RECT 20.25 30.7875 20.385 30.8525 ; + RECT 20.555 31.0775 20.625 31.3675 ; + RECT 20.2325 30.9275 20.3675 30.9925 ; + RECT 19.935 31.9325 20.0 32.0675 ; + RECT 20.45 31.3025 20.625 31.3675 ; + RECT 20.45 31.9325 20.515 32.0675 ; + RECT 19.875 30.7875 20.76 30.8525 ; + RECT 20.6375 31.57 20.7025 31.705 ; + RECT 19.93 31.4675 20.0 31.6025 ; + RECT 20.2 31.0775 20.265 31.2125 ; + RECT 20.45 31.4675 20.515 31.6025 ; + RECT 20.3825 31.0775 20.4475 31.2125 ; + RECT 19.935 31.4675 20.0 31.6025 ; + RECT 20.12 31.9325 20.185 32.0675 ; + RECT 20.45 31.3025 20.515 31.9325 ; + RECT 19.8975 30.7875 20.0325 30.8525 ; + RECT 20.015 31.0775 20.08 31.2125 ; + RECT 20.12 32.8625 20.185 32.7275 ; + RECT 20.635 32.8625 20.705 32.7275 ; + RECT 20.015 33.0275 20.185 32.9625 ; + RECT 19.875 33.4025 20.76 33.3375 ; + RECT 19.93 32.3975 20.0 32.1975 ; + RECT 20.635 32.3975 20.7 32.2625 ; + RECT 20.1875 33.2525 20.2525 33.1175 ; + RECT 20.37 33.2525 20.435 33.1175 ; + RECT 20.635 32.8625 20.7 32.7275 ; + RECT 20.6025 33.5425 20.7375 33.4775 ; + RECT 20.3625 32.6625 20.4975 32.5975 ; + RECT 20.585 33.4 20.6375 33.3375 ; + RECT 20.1375 32.5125 20.2725 32.4475 ; + RECT 20.015 33.2525 20.085 32.9625 ; + RECT 20.12 33.0275 20.185 32.2875 ; + RECT 20.635 32.3975 20.705 32.1975 ; + RECT 20.555 33.2525 20.62 33.1175 ; + RECT 19.88 33.4 19.9325 33.3375 ; + RECT 19.875 32.1975 20.76 32.1325 ; + RECT 19.9325 32.76 19.9975 32.625 ; + RECT 20.25 33.5425 20.385 33.4775 ; + RECT 20.555 33.2525 20.625 32.9625 ; + RECT 20.2325 33.4025 20.3675 33.3375 ; + RECT 19.935 32.3975 20.0 32.2625 ; + RECT 20.45 33.0275 20.625 32.9625 ; + RECT 20.45 32.3975 20.515 32.2625 ; + RECT 19.875 33.5425 20.76 33.4775 ; + RECT 20.6375 32.76 20.7025 32.625 ; + RECT 19.93 32.8625 20.0 32.7275 ; + RECT 20.2 33.2525 20.265 33.1175 ; + RECT 20.45 32.8625 20.515 32.7275 ; + RECT 20.3825 33.2525 20.4475 33.1175 ; + RECT 19.935 32.8625 20.0 32.7275 ; + RECT 20.12 32.3975 20.185 32.2625 ; + RECT 20.45 33.0275 20.515 32.3975 ; + RECT 19.8975 33.5425 20.0325 33.4775 ; + RECT 20.015 33.2525 20.08 33.1175 ; + RECT 20.12 34.1575 20.185 34.2925 ; + RECT 20.635 34.1575 20.705 34.2925 ; + RECT 20.015 33.9925 20.185 34.0575 ; + RECT 19.875 33.6175 20.76 33.6825 ; + RECT 19.93 34.6225 20.0 34.8225 ; + RECT 20.635 34.6225 20.7 34.7575 ; + RECT 20.1875 33.7675 20.2525 33.9025 ; + RECT 20.37 33.7675 20.435 33.9025 ; + RECT 20.635 34.1575 20.7 34.2925 ; + RECT 20.6025 33.4775 20.7375 33.5425 ; + RECT 20.3625 34.3575 20.4975 34.4225 ; + RECT 20.585 33.62 20.6375 33.6825 ; + RECT 20.1375 34.5075 20.2725 34.5725 ; + RECT 20.015 33.7675 20.085 34.0575 ; + RECT 20.12 33.9925 20.185 34.7325 ; + RECT 20.635 34.6225 20.705 34.8225 ; + RECT 20.555 33.7675 20.62 33.9025 ; + RECT 19.88 33.62 19.9325 33.6825 ; + RECT 19.875 34.8225 20.76 34.8875 ; + RECT 19.9325 34.26 19.9975 34.395 ; + RECT 20.25 33.4775 20.385 33.5425 ; + RECT 20.555 33.7675 20.625 34.0575 ; + RECT 20.2325 33.6175 20.3675 33.6825 ; + RECT 19.935 34.6225 20.0 34.7575 ; + RECT 20.45 33.9925 20.625 34.0575 ; + RECT 20.45 34.6225 20.515 34.7575 ; + RECT 19.875 33.4775 20.76 33.5425 ; + RECT 20.6375 34.26 20.7025 34.395 ; + RECT 19.93 34.1575 20.0 34.2925 ; + RECT 20.2 33.7675 20.265 33.9025 ; + RECT 20.45 34.1575 20.515 34.2925 ; + RECT 20.3825 33.7675 20.4475 33.9025 ; + RECT 19.935 34.1575 20.0 34.2925 ; + RECT 20.12 34.6225 20.185 34.7575 ; + RECT 20.45 33.9925 20.515 34.6225 ; + RECT 19.8975 33.4775 20.0325 33.5425 ; + RECT 20.015 33.7675 20.08 33.9025 ; + RECT 20.12 35.5525 20.185 35.4175 ; + RECT 20.635 35.5525 20.705 35.4175 ; + RECT 20.015 35.7175 20.185 35.6525 ; + RECT 19.875 36.0925 20.76 36.0275 ; + RECT 19.93 35.0875 20.0 34.8875 ; + RECT 20.635 35.0875 20.7 34.9525 ; + RECT 20.1875 35.9425 20.2525 35.8075 ; + RECT 20.37 35.9425 20.435 35.8075 ; + RECT 20.635 35.5525 20.7 35.4175 ; + RECT 20.6025 36.2325 20.7375 36.1675 ; + RECT 20.3625 35.3525 20.4975 35.2875 ; + RECT 20.585 36.09 20.6375 36.0275 ; + RECT 20.1375 35.2025 20.2725 35.1375 ; + RECT 20.015 35.9425 20.085 35.6525 ; + RECT 20.12 35.7175 20.185 34.9775 ; + RECT 20.635 35.0875 20.705 34.8875 ; + RECT 20.555 35.9425 20.62 35.8075 ; + RECT 19.88 36.09 19.9325 36.0275 ; + RECT 19.875 34.8875 20.76 34.8225 ; + RECT 19.9325 35.45 19.9975 35.315 ; + RECT 20.25 36.2325 20.385 36.1675 ; + RECT 20.555 35.9425 20.625 35.6525 ; + RECT 20.2325 36.0925 20.3675 36.0275 ; + RECT 19.935 35.0875 20.0 34.9525 ; + RECT 20.45 35.7175 20.625 35.6525 ; + RECT 20.45 35.0875 20.515 34.9525 ; + RECT 19.875 36.2325 20.76 36.1675 ; + RECT 20.6375 35.45 20.7025 35.315 ; + RECT 19.93 35.5525 20.0 35.4175 ; + RECT 20.2 35.9425 20.265 35.8075 ; + RECT 20.45 35.5525 20.515 35.4175 ; + RECT 20.3825 35.9425 20.4475 35.8075 ; + RECT 19.935 35.5525 20.0 35.4175 ; + RECT 20.12 35.0875 20.185 34.9525 ; + RECT 20.45 35.7175 20.515 35.0875 ; + RECT 19.8975 36.2325 20.0325 36.1675 ; + RECT 20.015 35.9425 20.08 35.8075 ; + RECT 20.12 36.8475 20.185 36.9825 ; + RECT 20.635 36.8475 20.705 36.9825 ; + RECT 20.015 36.6825 20.185 36.7475 ; + RECT 19.875 36.3075 20.76 36.3725 ; + RECT 19.93 37.3125 20.0 37.5125 ; + RECT 20.635 37.3125 20.7 37.4475 ; + RECT 20.1875 36.4575 20.2525 36.5925 ; + RECT 20.37 36.4575 20.435 36.5925 ; + RECT 20.635 36.8475 20.7 36.9825 ; + RECT 20.6025 36.1675 20.7375 36.2325 ; + RECT 20.3625 37.0475 20.4975 37.1125 ; + RECT 20.585 36.31 20.6375 36.3725 ; + RECT 20.1375 37.1975 20.2725 37.2625 ; + RECT 20.015 36.4575 20.085 36.7475 ; + RECT 20.12 36.6825 20.185 37.4225 ; + RECT 20.635 37.3125 20.705 37.5125 ; + RECT 20.555 36.4575 20.62 36.5925 ; + RECT 19.88 36.31 19.9325 36.3725 ; + RECT 19.875 37.5125 20.76 37.5775 ; + RECT 19.9325 36.95 19.9975 37.085 ; + RECT 20.25 36.1675 20.385 36.2325 ; + RECT 20.555 36.4575 20.625 36.7475 ; + RECT 20.2325 36.3075 20.3675 36.3725 ; + RECT 19.935 37.3125 20.0 37.4475 ; + RECT 20.45 36.6825 20.625 36.7475 ; + RECT 20.45 37.3125 20.515 37.4475 ; + RECT 19.875 36.1675 20.76 36.2325 ; + RECT 20.6375 36.95 20.7025 37.085 ; + RECT 19.93 36.8475 20.0 36.9825 ; + RECT 20.2 36.4575 20.265 36.5925 ; + RECT 20.45 36.8475 20.515 36.9825 ; + RECT 20.3825 36.4575 20.4475 36.5925 ; + RECT 19.935 36.8475 20.0 36.9825 ; + RECT 20.12 37.3125 20.185 37.4475 ; + RECT 20.45 36.6825 20.515 37.3125 ; + RECT 19.8975 36.1675 20.0325 36.2325 ; + RECT 20.015 36.4575 20.08 36.5925 ; + RECT 20.12 38.2425 20.185 38.1075 ; + RECT 20.635 38.2425 20.705 38.1075 ; + RECT 20.015 38.4075 20.185 38.3425 ; + RECT 19.875 38.7825 20.76 38.7175 ; + RECT 19.93 37.7775 20.0 37.5775 ; + RECT 20.635 37.7775 20.7 37.6425 ; + RECT 20.1875 38.6325 20.2525 38.4975 ; + RECT 20.37 38.6325 20.435 38.4975 ; + RECT 20.635 38.2425 20.7 38.1075 ; + RECT 20.6025 38.9225 20.7375 38.8575 ; + RECT 20.3625 38.0425 20.4975 37.9775 ; + RECT 20.585 38.78 20.6375 38.7175 ; + RECT 20.1375 37.8925 20.2725 37.8275 ; + RECT 20.015 38.6325 20.085 38.3425 ; + RECT 20.12 38.4075 20.185 37.6675 ; + RECT 20.635 37.7775 20.705 37.5775 ; + RECT 20.555 38.6325 20.62 38.4975 ; + RECT 19.88 38.78 19.9325 38.7175 ; + RECT 19.875 37.5775 20.76 37.5125 ; + RECT 19.9325 38.14 19.9975 38.005 ; + RECT 20.25 38.9225 20.385 38.8575 ; + RECT 20.555 38.6325 20.625 38.3425 ; + RECT 20.2325 38.7825 20.3675 38.7175 ; + RECT 19.935 37.7775 20.0 37.6425 ; + RECT 20.45 38.4075 20.625 38.3425 ; + RECT 20.45 37.7775 20.515 37.6425 ; + RECT 19.875 38.9225 20.76 38.8575 ; + RECT 20.6375 38.14 20.7025 38.005 ; + RECT 19.93 38.2425 20.0 38.1075 ; + RECT 20.2 38.6325 20.265 38.4975 ; + RECT 20.45 38.2425 20.515 38.1075 ; + RECT 20.3825 38.6325 20.4475 38.4975 ; + RECT 19.935 38.2425 20.0 38.1075 ; + RECT 20.12 37.7775 20.185 37.6425 ; + RECT 20.45 38.4075 20.515 37.7775 ; + RECT 19.8975 38.9225 20.0325 38.8575 ; + RECT 20.015 38.6325 20.08 38.4975 ; + RECT 20.12 39.5375 20.185 39.6725 ; + RECT 20.635 39.5375 20.705 39.6725 ; + RECT 20.015 39.3725 20.185 39.4375 ; + RECT 19.875 38.9975 20.76 39.0625 ; + RECT 19.93 40.0025 20.0 40.2025 ; + RECT 20.635 40.0025 20.7 40.1375 ; + RECT 20.1875 39.1475 20.2525 39.2825 ; + RECT 20.37 39.1475 20.435 39.2825 ; + RECT 20.635 39.5375 20.7 39.6725 ; + RECT 20.6025 38.8575 20.7375 38.9225 ; + RECT 20.3625 39.7375 20.4975 39.8025 ; + RECT 20.585 39.0 20.6375 39.0625 ; + RECT 20.1375 39.8875 20.2725 39.9525 ; + RECT 20.015 39.1475 20.085 39.4375 ; + RECT 20.12 39.3725 20.185 40.1125 ; + RECT 20.635 40.0025 20.705 40.2025 ; + RECT 20.555 39.1475 20.62 39.2825 ; + RECT 19.88 39.0 19.9325 39.0625 ; + RECT 19.875 40.2025 20.76 40.2675 ; + RECT 19.9325 39.64 19.9975 39.775 ; + RECT 20.25 38.8575 20.385 38.9225 ; + RECT 20.555 39.1475 20.625 39.4375 ; + RECT 20.2325 38.9975 20.3675 39.0625 ; + RECT 19.935 40.0025 20.0 40.1375 ; + RECT 20.45 39.3725 20.625 39.4375 ; + RECT 20.45 40.0025 20.515 40.1375 ; + RECT 19.875 38.8575 20.76 38.9225 ; + RECT 20.6375 39.64 20.7025 39.775 ; + RECT 19.93 39.5375 20.0 39.6725 ; + RECT 20.2 39.1475 20.265 39.2825 ; + RECT 20.45 39.5375 20.515 39.6725 ; + RECT 20.3825 39.1475 20.4475 39.2825 ; + RECT 19.935 39.5375 20.0 39.6725 ; + RECT 20.12 40.0025 20.185 40.1375 ; + RECT 20.45 39.3725 20.515 40.0025 ; + RECT 19.8975 38.8575 20.0325 38.9225 ; + RECT 20.015 39.1475 20.08 39.2825 ; + RECT 20.12 40.9325 20.185 40.7975 ; + RECT 20.635 40.9325 20.705 40.7975 ; + RECT 20.015 41.0975 20.185 41.0325 ; + RECT 19.875 41.4725 20.76 41.4075 ; + RECT 19.93 40.4675 20.0 40.2675 ; + RECT 20.635 40.4675 20.7 40.3325 ; + RECT 20.1875 41.3225 20.2525 41.1875 ; + RECT 20.37 41.3225 20.435 41.1875 ; + RECT 20.635 40.9325 20.7 40.7975 ; + RECT 20.6025 41.6125 20.7375 41.5475 ; + RECT 20.3625 40.7325 20.4975 40.6675 ; + RECT 20.585 41.47 20.6375 41.4075 ; + RECT 20.1375 40.5825 20.2725 40.5175 ; + RECT 20.015 41.3225 20.085 41.0325 ; + RECT 20.12 41.0975 20.185 40.3575 ; + RECT 20.635 40.4675 20.705 40.2675 ; + RECT 20.555 41.3225 20.62 41.1875 ; + RECT 19.88 41.47 19.9325 41.4075 ; + RECT 19.875 40.2675 20.76 40.2025 ; + RECT 19.9325 40.83 19.9975 40.695 ; + RECT 20.25 41.6125 20.385 41.5475 ; + RECT 20.555 41.3225 20.625 41.0325 ; + RECT 20.2325 41.4725 20.3675 41.4075 ; + RECT 19.935 40.4675 20.0 40.3325 ; + RECT 20.45 41.0975 20.625 41.0325 ; + RECT 20.45 40.4675 20.515 40.3325 ; + RECT 19.875 41.6125 20.76 41.5475 ; + RECT 20.6375 40.83 20.7025 40.695 ; + RECT 19.93 40.9325 20.0 40.7975 ; + RECT 20.2 41.3225 20.265 41.1875 ; + RECT 20.45 40.9325 20.515 40.7975 ; + RECT 20.3825 41.3225 20.4475 41.1875 ; + RECT 19.935 40.9325 20.0 40.7975 ; + RECT 20.12 40.4675 20.185 40.3325 ; + RECT 20.45 41.0975 20.515 40.4675 ; + RECT 19.8975 41.6125 20.0325 41.5475 ; + RECT 20.015 41.3225 20.08 41.1875 ; + RECT 20.12 42.2275 20.185 42.3625 ; + RECT 20.635 42.2275 20.705 42.3625 ; + RECT 20.015 42.0625 20.185 42.1275 ; + RECT 19.875 41.6875 20.76 41.7525 ; + RECT 19.93 42.6925 20.0 42.8925 ; + RECT 20.635 42.6925 20.7 42.8275 ; + RECT 20.1875 41.8375 20.2525 41.9725 ; + RECT 20.37 41.8375 20.435 41.9725 ; + RECT 20.635 42.2275 20.7 42.3625 ; + RECT 20.6025 41.5475 20.7375 41.6125 ; + RECT 20.3625 42.4275 20.4975 42.4925 ; + RECT 20.585 41.69 20.6375 41.7525 ; + RECT 20.1375 42.5775 20.2725 42.6425 ; + RECT 20.015 41.8375 20.085 42.1275 ; + RECT 20.12 42.0625 20.185 42.8025 ; + RECT 20.635 42.6925 20.705 42.8925 ; + RECT 20.555 41.8375 20.62 41.9725 ; + RECT 19.88 41.69 19.9325 41.7525 ; + RECT 19.875 42.8925 20.76 42.9575 ; + RECT 19.9325 42.33 19.9975 42.465 ; + RECT 20.25 41.5475 20.385 41.6125 ; + RECT 20.555 41.8375 20.625 42.1275 ; + RECT 20.2325 41.6875 20.3675 41.7525 ; + RECT 19.935 42.6925 20.0 42.8275 ; + RECT 20.45 42.0625 20.625 42.1275 ; + RECT 20.45 42.6925 20.515 42.8275 ; + RECT 19.875 41.5475 20.76 41.6125 ; + RECT 20.6375 42.33 20.7025 42.465 ; + RECT 19.93 42.2275 20.0 42.3625 ; + RECT 20.2 41.8375 20.265 41.9725 ; + RECT 20.45 42.2275 20.515 42.3625 ; + RECT 20.3825 41.8375 20.4475 41.9725 ; + RECT 19.935 42.2275 20.0 42.3625 ; + RECT 20.12 42.6925 20.185 42.8275 ; + RECT 20.45 42.0625 20.515 42.6925 ; + RECT 19.8975 41.5475 20.0325 41.6125 ; + RECT 20.015 41.8375 20.08 41.9725 ; + RECT 20.12 43.6225 20.185 43.4875 ; + RECT 20.635 43.6225 20.705 43.4875 ; + RECT 20.015 43.7875 20.185 43.7225 ; + RECT 19.875 44.1625 20.76 44.0975 ; + RECT 19.93 43.1575 20.0 42.9575 ; + RECT 20.635 43.1575 20.7 43.0225 ; + RECT 20.1875 44.0125 20.2525 43.8775 ; + RECT 20.37 44.0125 20.435 43.8775 ; + RECT 20.635 43.6225 20.7 43.4875 ; + RECT 20.6025 44.3025 20.7375 44.2375 ; + RECT 20.3625 43.4225 20.4975 43.3575 ; + RECT 20.585 44.16 20.6375 44.0975 ; + RECT 20.1375 43.2725 20.2725 43.2075 ; + RECT 20.015 44.0125 20.085 43.7225 ; + RECT 20.12 43.7875 20.185 43.0475 ; + RECT 20.635 43.1575 20.705 42.9575 ; + RECT 20.555 44.0125 20.62 43.8775 ; + RECT 19.88 44.16 19.9325 44.0975 ; + RECT 19.875 42.9575 20.76 42.8925 ; + RECT 19.9325 43.52 19.9975 43.385 ; + RECT 20.25 44.3025 20.385 44.2375 ; + RECT 20.555 44.0125 20.625 43.7225 ; + RECT 20.2325 44.1625 20.3675 44.0975 ; + RECT 19.935 43.1575 20.0 43.0225 ; + RECT 20.45 43.7875 20.625 43.7225 ; + RECT 20.45 43.1575 20.515 43.0225 ; + RECT 19.875 44.3025 20.76 44.2375 ; + RECT 20.6375 43.52 20.7025 43.385 ; + RECT 19.93 43.6225 20.0 43.4875 ; + RECT 20.2 44.0125 20.265 43.8775 ; + RECT 20.45 43.6225 20.515 43.4875 ; + RECT 20.3825 44.0125 20.4475 43.8775 ; + RECT 19.935 43.6225 20.0 43.4875 ; + RECT 20.12 43.1575 20.185 43.0225 ; + RECT 20.45 43.7875 20.515 43.1575 ; + RECT 19.8975 44.3025 20.0325 44.2375 ; + RECT 20.015 44.0125 20.08 43.8775 ; + RECT 20.12 44.9175 20.185 45.0525 ; + RECT 20.635 44.9175 20.705 45.0525 ; + RECT 20.015 44.7525 20.185 44.8175 ; + RECT 19.875 44.3775 20.76 44.4425 ; + RECT 19.93 45.3825 20.0 45.5825 ; + RECT 20.635 45.3825 20.7 45.5175 ; + RECT 20.1875 44.5275 20.2525 44.6625 ; + RECT 20.37 44.5275 20.435 44.6625 ; + RECT 20.635 44.9175 20.7 45.0525 ; + RECT 20.6025 44.2375 20.7375 44.3025 ; + RECT 20.3625 45.1175 20.4975 45.1825 ; + RECT 20.585 44.38 20.6375 44.4425 ; + RECT 20.1375 45.2675 20.2725 45.3325 ; + RECT 20.015 44.5275 20.085 44.8175 ; + RECT 20.12 44.7525 20.185 45.4925 ; + RECT 20.635 45.3825 20.705 45.5825 ; + RECT 20.555 44.5275 20.62 44.6625 ; + RECT 19.88 44.38 19.9325 44.4425 ; + RECT 19.875 45.5825 20.76 45.6475 ; + RECT 19.9325 45.02 19.9975 45.155 ; + RECT 20.25 44.2375 20.385 44.3025 ; + RECT 20.555 44.5275 20.625 44.8175 ; + RECT 20.2325 44.3775 20.3675 44.4425 ; + RECT 19.935 45.3825 20.0 45.5175 ; + RECT 20.45 44.7525 20.625 44.8175 ; + RECT 20.45 45.3825 20.515 45.5175 ; + RECT 19.875 44.2375 20.76 44.3025 ; + RECT 20.6375 45.02 20.7025 45.155 ; + RECT 19.93 44.9175 20.0 45.0525 ; + RECT 20.2 44.5275 20.265 44.6625 ; + RECT 20.45 44.9175 20.515 45.0525 ; + RECT 20.3825 44.5275 20.4475 44.6625 ; + RECT 19.935 44.9175 20.0 45.0525 ; + RECT 20.12 45.3825 20.185 45.5175 ; + RECT 20.45 44.7525 20.515 45.3825 ; + RECT 19.8975 44.2375 20.0325 44.3025 ; + RECT 20.015 44.5275 20.08 44.6625 ; + RECT 19.965 20.1675 20.67 20.2325 ; + RECT 19.965 22.5775 20.67 22.6425 ; + RECT 19.965 22.8575 20.67 22.9225 ; + RECT 19.965 25.2675 20.67 25.3325 ; + RECT 19.965 25.5475 20.67 25.6125 ; + RECT 19.965 27.9575 20.67 28.0225 ; + RECT 19.965 28.2375 20.67 28.3025 ; + RECT 19.965 30.6475 20.67 30.7125 ; + RECT 19.965 30.9275 20.67 30.9925 ; + RECT 19.965 33.3375 20.67 33.4025 ; + RECT 19.965 33.6175 20.67 33.6825 ; + RECT 19.965 36.0275 20.67 36.0925 ; + RECT 19.965 36.3075 20.67 36.3725 ; + RECT 19.965 38.7175 20.67 38.7825 ; + RECT 19.965 38.9975 20.67 39.0625 ; + RECT 19.965 41.4075 20.67 41.4725 ; + RECT 19.965 41.6875 20.67 41.7525 ; + RECT 19.965 44.0975 20.67 44.1625 ; + RECT 19.965 44.3775 20.67 44.4425 ; + RECT 22.94 20.7075 23.005 20.8425 ; + RECT 23.455 20.7075 23.525 20.8425 ; + RECT 22.835 20.5425 23.005 20.6075 ; + RECT 22.695 20.1675 23.58 20.2325 ; + RECT 22.75 21.1725 22.82 21.3725 ; + RECT 23.455 21.1725 23.52 21.3075 ; + RECT 23.0075 20.3175 23.0725 20.4525 ; + RECT 23.19 20.3175 23.255 20.4525 ; + RECT 23.455 20.7075 23.52 20.8425 ; + RECT 23.4225 20.0275 23.5575 20.0925 ; + RECT 23.1825 20.9075 23.3175 20.9725 ; + RECT 23.405 20.17 23.4575 20.2325 ; + RECT 22.9575 21.0575 23.0925 21.1225 ; + RECT 22.835 20.3175 22.905 20.6075 ; + RECT 22.94 20.5425 23.005 21.2825 ; + RECT 23.455 21.1725 23.525 21.3725 ; + RECT 23.375 20.3175 23.44 20.4525 ; + RECT 22.7 20.17 22.7525 20.2325 ; + RECT 22.695 21.3725 23.58 21.4375 ; + RECT 22.7525 20.81 22.8175 20.945 ; + RECT 23.07 20.0275 23.205 20.0925 ; + RECT 23.375 20.3175 23.445 20.6075 ; + RECT 23.0525 20.1675 23.1875 20.2325 ; + RECT 22.755 21.1725 22.82 21.3075 ; + RECT 23.27 20.5425 23.445 20.6075 ; + RECT 23.27 21.1725 23.335 21.3075 ; + RECT 22.695 20.0275 23.58 20.0925 ; + RECT 23.4575 20.81 23.5225 20.945 ; + RECT 22.75 20.7075 22.82 20.8425 ; + RECT 23.02 20.3175 23.085 20.4525 ; + RECT 23.27 20.7075 23.335 20.8425 ; + RECT 23.2025 20.3175 23.2675 20.4525 ; + RECT 22.755 20.7075 22.82 20.8425 ; + RECT 22.94 21.1725 23.005 21.3075 ; + RECT 23.27 20.5425 23.335 21.1725 ; + RECT 22.7175 20.0275 22.8525 20.0925 ; + RECT 22.835 20.3175 22.9 20.4525 ; + RECT 22.94 22.1025 23.005 21.9675 ; + RECT 23.455 22.1025 23.525 21.9675 ; + RECT 22.835 22.2675 23.005 22.2025 ; + RECT 22.695 22.6425 23.58 22.5775 ; + RECT 22.75 21.6375 22.82 21.4375 ; + RECT 23.455 21.6375 23.52 21.5025 ; + RECT 23.0075 22.4925 23.0725 22.3575 ; + RECT 23.19 22.4925 23.255 22.3575 ; + RECT 23.455 22.1025 23.52 21.9675 ; + RECT 23.4225 22.7825 23.5575 22.7175 ; + RECT 23.1825 21.9025 23.3175 21.8375 ; + RECT 23.405 22.64 23.4575 22.5775 ; + RECT 22.9575 21.7525 23.0925 21.6875 ; + RECT 22.835 22.4925 22.905 22.2025 ; + RECT 22.94 22.2675 23.005 21.5275 ; + RECT 23.455 21.6375 23.525 21.4375 ; + RECT 23.375 22.4925 23.44 22.3575 ; + RECT 22.7 22.64 22.7525 22.5775 ; + RECT 22.695 21.4375 23.58 21.3725 ; + RECT 22.7525 22.0 22.8175 21.865 ; + RECT 23.07 22.7825 23.205 22.7175 ; + RECT 23.375 22.4925 23.445 22.2025 ; + RECT 23.0525 22.6425 23.1875 22.5775 ; + RECT 22.755 21.6375 22.82 21.5025 ; + RECT 23.27 22.2675 23.445 22.2025 ; + RECT 23.27 21.6375 23.335 21.5025 ; + RECT 22.695 22.7825 23.58 22.7175 ; + RECT 23.4575 22.0 23.5225 21.865 ; + RECT 22.75 22.1025 22.82 21.9675 ; + RECT 23.02 22.4925 23.085 22.3575 ; + RECT 23.27 22.1025 23.335 21.9675 ; + RECT 23.2025 22.4925 23.2675 22.3575 ; + RECT 22.755 22.1025 22.82 21.9675 ; + RECT 22.94 21.6375 23.005 21.5025 ; + RECT 23.27 22.2675 23.335 21.6375 ; + RECT 22.7175 22.7825 22.8525 22.7175 ; + RECT 22.835 22.4925 22.9 22.3575 ; + RECT 22.94 23.3975 23.005 23.5325 ; + RECT 23.455 23.3975 23.525 23.5325 ; + RECT 22.835 23.2325 23.005 23.2975 ; + RECT 22.695 22.8575 23.58 22.9225 ; + RECT 22.75 23.8625 22.82 24.0625 ; + RECT 23.455 23.8625 23.52 23.9975 ; + RECT 23.0075 23.0075 23.0725 23.1425 ; + RECT 23.19 23.0075 23.255 23.1425 ; + RECT 23.455 23.3975 23.52 23.5325 ; + RECT 23.4225 22.7175 23.5575 22.7825 ; + RECT 23.1825 23.5975 23.3175 23.6625 ; + RECT 23.405 22.86 23.4575 22.9225 ; + RECT 22.9575 23.7475 23.0925 23.8125 ; + RECT 22.835 23.0075 22.905 23.2975 ; + RECT 22.94 23.2325 23.005 23.9725 ; + RECT 23.455 23.8625 23.525 24.0625 ; + RECT 23.375 23.0075 23.44 23.1425 ; + RECT 22.7 22.86 22.7525 22.9225 ; + RECT 22.695 24.0625 23.58 24.1275 ; + RECT 22.7525 23.5 22.8175 23.635 ; + RECT 23.07 22.7175 23.205 22.7825 ; + RECT 23.375 23.0075 23.445 23.2975 ; + RECT 23.0525 22.8575 23.1875 22.9225 ; + RECT 22.755 23.8625 22.82 23.9975 ; + RECT 23.27 23.2325 23.445 23.2975 ; + RECT 23.27 23.8625 23.335 23.9975 ; + RECT 22.695 22.7175 23.58 22.7825 ; + RECT 23.4575 23.5 23.5225 23.635 ; + RECT 22.75 23.3975 22.82 23.5325 ; + RECT 23.02 23.0075 23.085 23.1425 ; + RECT 23.27 23.3975 23.335 23.5325 ; + RECT 23.2025 23.0075 23.2675 23.1425 ; + RECT 22.755 23.3975 22.82 23.5325 ; + RECT 22.94 23.8625 23.005 23.9975 ; + RECT 23.27 23.2325 23.335 23.8625 ; + RECT 22.7175 22.7175 22.8525 22.7825 ; + RECT 22.835 23.0075 22.9 23.1425 ; + RECT 22.94 24.7925 23.005 24.6575 ; + RECT 23.455 24.7925 23.525 24.6575 ; + RECT 22.835 24.9575 23.005 24.8925 ; + RECT 22.695 25.3325 23.58 25.2675 ; + RECT 22.75 24.3275 22.82 24.1275 ; + RECT 23.455 24.3275 23.52 24.1925 ; + RECT 23.0075 25.1825 23.0725 25.0475 ; + RECT 23.19 25.1825 23.255 25.0475 ; + RECT 23.455 24.7925 23.52 24.6575 ; + RECT 23.4225 25.4725 23.5575 25.4075 ; + RECT 23.1825 24.5925 23.3175 24.5275 ; + RECT 23.405 25.33 23.4575 25.2675 ; + RECT 22.9575 24.4425 23.0925 24.3775 ; + RECT 22.835 25.1825 22.905 24.8925 ; + RECT 22.94 24.9575 23.005 24.2175 ; + RECT 23.455 24.3275 23.525 24.1275 ; + RECT 23.375 25.1825 23.44 25.0475 ; + RECT 22.7 25.33 22.7525 25.2675 ; + RECT 22.695 24.1275 23.58 24.0625 ; + RECT 22.7525 24.69 22.8175 24.555 ; + RECT 23.07 25.4725 23.205 25.4075 ; + RECT 23.375 25.1825 23.445 24.8925 ; + RECT 23.0525 25.3325 23.1875 25.2675 ; + RECT 22.755 24.3275 22.82 24.1925 ; + RECT 23.27 24.9575 23.445 24.8925 ; + RECT 23.27 24.3275 23.335 24.1925 ; + RECT 22.695 25.4725 23.58 25.4075 ; + RECT 23.4575 24.69 23.5225 24.555 ; + RECT 22.75 24.7925 22.82 24.6575 ; + RECT 23.02 25.1825 23.085 25.0475 ; + RECT 23.27 24.7925 23.335 24.6575 ; + RECT 23.2025 25.1825 23.2675 25.0475 ; + RECT 22.755 24.7925 22.82 24.6575 ; + RECT 22.94 24.3275 23.005 24.1925 ; + RECT 23.27 24.9575 23.335 24.3275 ; + RECT 22.7175 25.4725 22.8525 25.4075 ; + RECT 22.835 25.1825 22.9 25.0475 ; + RECT 22.94 26.0875 23.005 26.2225 ; + RECT 23.455 26.0875 23.525 26.2225 ; + RECT 22.835 25.9225 23.005 25.9875 ; + RECT 22.695 25.5475 23.58 25.6125 ; + RECT 22.75 26.5525 22.82 26.7525 ; + RECT 23.455 26.5525 23.52 26.6875 ; + RECT 23.0075 25.6975 23.0725 25.8325 ; + RECT 23.19 25.6975 23.255 25.8325 ; + RECT 23.455 26.0875 23.52 26.2225 ; + RECT 23.4225 25.4075 23.5575 25.4725 ; + RECT 23.1825 26.2875 23.3175 26.3525 ; + RECT 23.405 25.55 23.4575 25.6125 ; + RECT 22.9575 26.4375 23.0925 26.5025 ; + RECT 22.835 25.6975 22.905 25.9875 ; + RECT 22.94 25.9225 23.005 26.6625 ; + RECT 23.455 26.5525 23.525 26.7525 ; + RECT 23.375 25.6975 23.44 25.8325 ; + RECT 22.7 25.55 22.7525 25.6125 ; + RECT 22.695 26.7525 23.58 26.8175 ; + RECT 22.7525 26.19 22.8175 26.325 ; + RECT 23.07 25.4075 23.205 25.4725 ; + RECT 23.375 25.6975 23.445 25.9875 ; + RECT 23.0525 25.5475 23.1875 25.6125 ; + RECT 22.755 26.5525 22.82 26.6875 ; + RECT 23.27 25.9225 23.445 25.9875 ; + RECT 23.27 26.5525 23.335 26.6875 ; + RECT 22.695 25.4075 23.58 25.4725 ; + RECT 23.4575 26.19 23.5225 26.325 ; + RECT 22.75 26.0875 22.82 26.2225 ; + RECT 23.02 25.6975 23.085 25.8325 ; + RECT 23.27 26.0875 23.335 26.2225 ; + RECT 23.2025 25.6975 23.2675 25.8325 ; + RECT 22.755 26.0875 22.82 26.2225 ; + RECT 22.94 26.5525 23.005 26.6875 ; + RECT 23.27 25.9225 23.335 26.5525 ; + RECT 22.7175 25.4075 22.8525 25.4725 ; + RECT 22.835 25.6975 22.9 25.8325 ; + RECT 22.94 27.4825 23.005 27.3475 ; + RECT 23.455 27.4825 23.525 27.3475 ; + RECT 22.835 27.6475 23.005 27.5825 ; + RECT 22.695 28.0225 23.58 27.9575 ; + RECT 22.75 27.0175 22.82 26.8175 ; + RECT 23.455 27.0175 23.52 26.8825 ; + RECT 23.0075 27.8725 23.0725 27.7375 ; + RECT 23.19 27.8725 23.255 27.7375 ; + RECT 23.455 27.4825 23.52 27.3475 ; + RECT 23.4225 28.1625 23.5575 28.0975 ; + RECT 23.1825 27.2825 23.3175 27.2175 ; + RECT 23.405 28.02 23.4575 27.9575 ; + RECT 22.9575 27.1325 23.0925 27.0675 ; + RECT 22.835 27.8725 22.905 27.5825 ; + RECT 22.94 27.6475 23.005 26.9075 ; + RECT 23.455 27.0175 23.525 26.8175 ; + RECT 23.375 27.8725 23.44 27.7375 ; + RECT 22.7 28.02 22.7525 27.9575 ; + RECT 22.695 26.8175 23.58 26.7525 ; + RECT 22.7525 27.38 22.8175 27.245 ; + RECT 23.07 28.1625 23.205 28.0975 ; + RECT 23.375 27.8725 23.445 27.5825 ; + RECT 23.0525 28.0225 23.1875 27.9575 ; + RECT 22.755 27.0175 22.82 26.8825 ; + RECT 23.27 27.6475 23.445 27.5825 ; + RECT 23.27 27.0175 23.335 26.8825 ; + RECT 22.695 28.1625 23.58 28.0975 ; + RECT 23.4575 27.38 23.5225 27.245 ; + RECT 22.75 27.4825 22.82 27.3475 ; + RECT 23.02 27.8725 23.085 27.7375 ; + RECT 23.27 27.4825 23.335 27.3475 ; + RECT 23.2025 27.8725 23.2675 27.7375 ; + RECT 22.755 27.4825 22.82 27.3475 ; + RECT 22.94 27.0175 23.005 26.8825 ; + RECT 23.27 27.6475 23.335 27.0175 ; + RECT 22.7175 28.1625 22.8525 28.0975 ; + RECT 22.835 27.8725 22.9 27.7375 ; + RECT 22.94 28.7775 23.005 28.9125 ; + RECT 23.455 28.7775 23.525 28.9125 ; + RECT 22.835 28.6125 23.005 28.6775 ; + RECT 22.695 28.2375 23.58 28.3025 ; + RECT 22.75 29.2425 22.82 29.4425 ; + RECT 23.455 29.2425 23.52 29.3775 ; + RECT 23.0075 28.3875 23.0725 28.5225 ; + RECT 23.19 28.3875 23.255 28.5225 ; + RECT 23.455 28.7775 23.52 28.9125 ; + RECT 23.4225 28.0975 23.5575 28.1625 ; + RECT 23.1825 28.9775 23.3175 29.0425 ; + RECT 23.405 28.24 23.4575 28.3025 ; + RECT 22.9575 29.1275 23.0925 29.1925 ; + RECT 22.835 28.3875 22.905 28.6775 ; + RECT 22.94 28.6125 23.005 29.3525 ; + RECT 23.455 29.2425 23.525 29.4425 ; + RECT 23.375 28.3875 23.44 28.5225 ; + RECT 22.7 28.24 22.7525 28.3025 ; + RECT 22.695 29.4425 23.58 29.5075 ; + RECT 22.7525 28.88 22.8175 29.015 ; + RECT 23.07 28.0975 23.205 28.1625 ; + RECT 23.375 28.3875 23.445 28.6775 ; + RECT 23.0525 28.2375 23.1875 28.3025 ; + RECT 22.755 29.2425 22.82 29.3775 ; + RECT 23.27 28.6125 23.445 28.6775 ; + RECT 23.27 29.2425 23.335 29.3775 ; + RECT 22.695 28.0975 23.58 28.1625 ; + RECT 23.4575 28.88 23.5225 29.015 ; + RECT 22.75 28.7775 22.82 28.9125 ; + RECT 23.02 28.3875 23.085 28.5225 ; + RECT 23.27 28.7775 23.335 28.9125 ; + RECT 23.2025 28.3875 23.2675 28.5225 ; + RECT 22.755 28.7775 22.82 28.9125 ; + RECT 22.94 29.2425 23.005 29.3775 ; + RECT 23.27 28.6125 23.335 29.2425 ; + RECT 22.7175 28.0975 22.8525 28.1625 ; + RECT 22.835 28.3875 22.9 28.5225 ; + RECT 22.94 30.1725 23.005 30.0375 ; + RECT 23.455 30.1725 23.525 30.0375 ; + RECT 22.835 30.3375 23.005 30.2725 ; + RECT 22.695 30.7125 23.58 30.6475 ; + RECT 22.75 29.7075 22.82 29.5075 ; + RECT 23.455 29.7075 23.52 29.5725 ; + RECT 23.0075 30.5625 23.0725 30.4275 ; + RECT 23.19 30.5625 23.255 30.4275 ; + RECT 23.455 30.1725 23.52 30.0375 ; + RECT 23.4225 30.8525 23.5575 30.7875 ; + RECT 23.1825 29.9725 23.3175 29.9075 ; + RECT 23.405 30.71 23.4575 30.6475 ; + RECT 22.9575 29.8225 23.0925 29.7575 ; + RECT 22.835 30.5625 22.905 30.2725 ; + RECT 22.94 30.3375 23.005 29.5975 ; + RECT 23.455 29.7075 23.525 29.5075 ; + RECT 23.375 30.5625 23.44 30.4275 ; + RECT 22.7 30.71 22.7525 30.6475 ; + RECT 22.695 29.5075 23.58 29.4425 ; + RECT 22.7525 30.07 22.8175 29.935 ; + RECT 23.07 30.8525 23.205 30.7875 ; + RECT 23.375 30.5625 23.445 30.2725 ; + RECT 23.0525 30.7125 23.1875 30.6475 ; + RECT 22.755 29.7075 22.82 29.5725 ; + RECT 23.27 30.3375 23.445 30.2725 ; + RECT 23.27 29.7075 23.335 29.5725 ; + RECT 22.695 30.8525 23.58 30.7875 ; + RECT 23.4575 30.07 23.5225 29.935 ; + RECT 22.75 30.1725 22.82 30.0375 ; + RECT 23.02 30.5625 23.085 30.4275 ; + RECT 23.27 30.1725 23.335 30.0375 ; + RECT 23.2025 30.5625 23.2675 30.4275 ; + RECT 22.755 30.1725 22.82 30.0375 ; + RECT 22.94 29.7075 23.005 29.5725 ; + RECT 23.27 30.3375 23.335 29.7075 ; + RECT 22.7175 30.8525 22.8525 30.7875 ; + RECT 22.835 30.5625 22.9 30.4275 ; + RECT 22.94 31.4675 23.005 31.6025 ; + RECT 23.455 31.4675 23.525 31.6025 ; + RECT 22.835 31.3025 23.005 31.3675 ; + RECT 22.695 30.9275 23.58 30.9925 ; + RECT 22.75 31.9325 22.82 32.1325 ; + RECT 23.455 31.9325 23.52 32.0675 ; + RECT 23.0075 31.0775 23.0725 31.2125 ; + RECT 23.19 31.0775 23.255 31.2125 ; + RECT 23.455 31.4675 23.52 31.6025 ; + RECT 23.4225 30.7875 23.5575 30.8525 ; + RECT 23.1825 31.6675 23.3175 31.7325 ; + RECT 23.405 30.93 23.4575 30.9925 ; + RECT 22.9575 31.8175 23.0925 31.8825 ; + RECT 22.835 31.0775 22.905 31.3675 ; + RECT 22.94 31.3025 23.005 32.0425 ; + RECT 23.455 31.9325 23.525 32.1325 ; + RECT 23.375 31.0775 23.44 31.2125 ; + RECT 22.7 30.93 22.7525 30.9925 ; + RECT 22.695 32.1325 23.58 32.1975 ; + RECT 22.7525 31.57 22.8175 31.705 ; + RECT 23.07 30.7875 23.205 30.8525 ; + RECT 23.375 31.0775 23.445 31.3675 ; + RECT 23.0525 30.9275 23.1875 30.9925 ; + RECT 22.755 31.9325 22.82 32.0675 ; + RECT 23.27 31.3025 23.445 31.3675 ; + RECT 23.27 31.9325 23.335 32.0675 ; + RECT 22.695 30.7875 23.58 30.8525 ; + RECT 23.4575 31.57 23.5225 31.705 ; + RECT 22.75 31.4675 22.82 31.6025 ; + RECT 23.02 31.0775 23.085 31.2125 ; + RECT 23.27 31.4675 23.335 31.6025 ; + RECT 23.2025 31.0775 23.2675 31.2125 ; + RECT 22.755 31.4675 22.82 31.6025 ; + RECT 22.94 31.9325 23.005 32.0675 ; + RECT 23.27 31.3025 23.335 31.9325 ; + RECT 22.7175 30.7875 22.8525 30.8525 ; + RECT 22.835 31.0775 22.9 31.2125 ; + RECT 22.94 32.8625 23.005 32.7275 ; + RECT 23.455 32.8625 23.525 32.7275 ; + RECT 22.835 33.0275 23.005 32.9625 ; + RECT 22.695 33.4025 23.58 33.3375 ; + RECT 22.75 32.3975 22.82 32.1975 ; + RECT 23.455 32.3975 23.52 32.2625 ; + RECT 23.0075 33.2525 23.0725 33.1175 ; + RECT 23.19 33.2525 23.255 33.1175 ; + RECT 23.455 32.8625 23.52 32.7275 ; + RECT 23.4225 33.5425 23.5575 33.4775 ; + RECT 23.1825 32.6625 23.3175 32.5975 ; + RECT 23.405 33.4 23.4575 33.3375 ; + RECT 22.9575 32.5125 23.0925 32.4475 ; + RECT 22.835 33.2525 22.905 32.9625 ; + RECT 22.94 33.0275 23.005 32.2875 ; + RECT 23.455 32.3975 23.525 32.1975 ; + RECT 23.375 33.2525 23.44 33.1175 ; + RECT 22.7 33.4 22.7525 33.3375 ; + RECT 22.695 32.1975 23.58 32.1325 ; + RECT 22.7525 32.76 22.8175 32.625 ; + RECT 23.07 33.5425 23.205 33.4775 ; + RECT 23.375 33.2525 23.445 32.9625 ; + RECT 23.0525 33.4025 23.1875 33.3375 ; + RECT 22.755 32.3975 22.82 32.2625 ; + RECT 23.27 33.0275 23.445 32.9625 ; + RECT 23.27 32.3975 23.335 32.2625 ; + RECT 22.695 33.5425 23.58 33.4775 ; + RECT 23.4575 32.76 23.5225 32.625 ; + RECT 22.75 32.8625 22.82 32.7275 ; + RECT 23.02 33.2525 23.085 33.1175 ; + RECT 23.27 32.8625 23.335 32.7275 ; + RECT 23.2025 33.2525 23.2675 33.1175 ; + RECT 22.755 32.8625 22.82 32.7275 ; + RECT 22.94 32.3975 23.005 32.2625 ; + RECT 23.27 33.0275 23.335 32.3975 ; + RECT 22.7175 33.5425 22.8525 33.4775 ; + RECT 22.835 33.2525 22.9 33.1175 ; + RECT 22.94 34.1575 23.005 34.2925 ; + RECT 23.455 34.1575 23.525 34.2925 ; + RECT 22.835 33.9925 23.005 34.0575 ; + RECT 22.695 33.6175 23.58 33.6825 ; + RECT 22.75 34.6225 22.82 34.8225 ; + RECT 23.455 34.6225 23.52 34.7575 ; + RECT 23.0075 33.7675 23.0725 33.9025 ; + RECT 23.19 33.7675 23.255 33.9025 ; + RECT 23.455 34.1575 23.52 34.2925 ; + RECT 23.4225 33.4775 23.5575 33.5425 ; + RECT 23.1825 34.3575 23.3175 34.4225 ; + RECT 23.405 33.62 23.4575 33.6825 ; + RECT 22.9575 34.5075 23.0925 34.5725 ; + RECT 22.835 33.7675 22.905 34.0575 ; + RECT 22.94 33.9925 23.005 34.7325 ; + RECT 23.455 34.6225 23.525 34.8225 ; + RECT 23.375 33.7675 23.44 33.9025 ; + RECT 22.7 33.62 22.7525 33.6825 ; + RECT 22.695 34.8225 23.58 34.8875 ; + RECT 22.7525 34.26 22.8175 34.395 ; + RECT 23.07 33.4775 23.205 33.5425 ; + RECT 23.375 33.7675 23.445 34.0575 ; + RECT 23.0525 33.6175 23.1875 33.6825 ; + RECT 22.755 34.6225 22.82 34.7575 ; + RECT 23.27 33.9925 23.445 34.0575 ; + RECT 23.27 34.6225 23.335 34.7575 ; + RECT 22.695 33.4775 23.58 33.5425 ; + RECT 23.4575 34.26 23.5225 34.395 ; + RECT 22.75 34.1575 22.82 34.2925 ; + RECT 23.02 33.7675 23.085 33.9025 ; + RECT 23.27 34.1575 23.335 34.2925 ; + RECT 23.2025 33.7675 23.2675 33.9025 ; + RECT 22.755 34.1575 22.82 34.2925 ; + RECT 22.94 34.6225 23.005 34.7575 ; + RECT 23.27 33.9925 23.335 34.6225 ; + RECT 22.7175 33.4775 22.8525 33.5425 ; + RECT 22.835 33.7675 22.9 33.9025 ; + RECT 22.94 35.5525 23.005 35.4175 ; + RECT 23.455 35.5525 23.525 35.4175 ; + RECT 22.835 35.7175 23.005 35.6525 ; + RECT 22.695 36.0925 23.58 36.0275 ; + RECT 22.75 35.0875 22.82 34.8875 ; + RECT 23.455 35.0875 23.52 34.9525 ; + RECT 23.0075 35.9425 23.0725 35.8075 ; + RECT 23.19 35.9425 23.255 35.8075 ; + RECT 23.455 35.5525 23.52 35.4175 ; + RECT 23.4225 36.2325 23.5575 36.1675 ; + RECT 23.1825 35.3525 23.3175 35.2875 ; + RECT 23.405 36.09 23.4575 36.0275 ; + RECT 22.9575 35.2025 23.0925 35.1375 ; + RECT 22.835 35.9425 22.905 35.6525 ; + RECT 22.94 35.7175 23.005 34.9775 ; + RECT 23.455 35.0875 23.525 34.8875 ; + RECT 23.375 35.9425 23.44 35.8075 ; + RECT 22.7 36.09 22.7525 36.0275 ; + RECT 22.695 34.8875 23.58 34.8225 ; + RECT 22.7525 35.45 22.8175 35.315 ; + RECT 23.07 36.2325 23.205 36.1675 ; + RECT 23.375 35.9425 23.445 35.6525 ; + RECT 23.0525 36.0925 23.1875 36.0275 ; + RECT 22.755 35.0875 22.82 34.9525 ; + RECT 23.27 35.7175 23.445 35.6525 ; + RECT 23.27 35.0875 23.335 34.9525 ; + RECT 22.695 36.2325 23.58 36.1675 ; + RECT 23.4575 35.45 23.5225 35.315 ; + RECT 22.75 35.5525 22.82 35.4175 ; + RECT 23.02 35.9425 23.085 35.8075 ; + RECT 23.27 35.5525 23.335 35.4175 ; + RECT 23.2025 35.9425 23.2675 35.8075 ; + RECT 22.755 35.5525 22.82 35.4175 ; + RECT 22.94 35.0875 23.005 34.9525 ; + RECT 23.27 35.7175 23.335 35.0875 ; + RECT 22.7175 36.2325 22.8525 36.1675 ; + RECT 22.835 35.9425 22.9 35.8075 ; + RECT 22.94 36.8475 23.005 36.9825 ; + RECT 23.455 36.8475 23.525 36.9825 ; + RECT 22.835 36.6825 23.005 36.7475 ; + RECT 22.695 36.3075 23.58 36.3725 ; + RECT 22.75 37.3125 22.82 37.5125 ; + RECT 23.455 37.3125 23.52 37.4475 ; + RECT 23.0075 36.4575 23.0725 36.5925 ; + RECT 23.19 36.4575 23.255 36.5925 ; + RECT 23.455 36.8475 23.52 36.9825 ; + RECT 23.4225 36.1675 23.5575 36.2325 ; + RECT 23.1825 37.0475 23.3175 37.1125 ; + RECT 23.405 36.31 23.4575 36.3725 ; + RECT 22.9575 37.1975 23.0925 37.2625 ; + RECT 22.835 36.4575 22.905 36.7475 ; + RECT 22.94 36.6825 23.005 37.4225 ; + RECT 23.455 37.3125 23.525 37.5125 ; + RECT 23.375 36.4575 23.44 36.5925 ; + RECT 22.7 36.31 22.7525 36.3725 ; + RECT 22.695 37.5125 23.58 37.5775 ; + RECT 22.7525 36.95 22.8175 37.085 ; + RECT 23.07 36.1675 23.205 36.2325 ; + RECT 23.375 36.4575 23.445 36.7475 ; + RECT 23.0525 36.3075 23.1875 36.3725 ; + RECT 22.755 37.3125 22.82 37.4475 ; + RECT 23.27 36.6825 23.445 36.7475 ; + RECT 23.27 37.3125 23.335 37.4475 ; + RECT 22.695 36.1675 23.58 36.2325 ; + RECT 23.4575 36.95 23.5225 37.085 ; + RECT 22.75 36.8475 22.82 36.9825 ; + RECT 23.02 36.4575 23.085 36.5925 ; + RECT 23.27 36.8475 23.335 36.9825 ; + RECT 23.2025 36.4575 23.2675 36.5925 ; + RECT 22.755 36.8475 22.82 36.9825 ; + RECT 22.94 37.3125 23.005 37.4475 ; + RECT 23.27 36.6825 23.335 37.3125 ; + RECT 22.7175 36.1675 22.8525 36.2325 ; + RECT 22.835 36.4575 22.9 36.5925 ; + RECT 22.94 38.2425 23.005 38.1075 ; + RECT 23.455 38.2425 23.525 38.1075 ; + RECT 22.835 38.4075 23.005 38.3425 ; + RECT 22.695 38.7825 23.58 38.7175 ; + RECT 22.75 37.7775 22.82 37.5775 ; + RECT 23.455 37.7775 23.52 37.6425 ; + RECT 23.0075 38.6325 23.0725 38.4975 ; + RECT 23.19 38.6325 23.255 38.4975 ; + RECT 23.455 38.2425 23.52 38.1075 ; + RECT 23.4225 38.9225 23.5575 38.8575 ; + RECT 23.1825 38.0425 23.3175 37.9775 ; + RECT 23.405 38.78 23.4575 38.7175 ; + RECT 22.9575 37.8925 23.0925 37.8275 ; + RECT 22.835 38.6325 22.905 38.3425 ; + RECT 22.94 38.4075 23.005 37.6675 ; + RECT 23.455 37.7775 23.525 37.5775 ; + RECT 23.375 38.6325 23.44 38.4975 ; + RECT 22.7 38.78 22.7525 38.7175 ; + RECT 22.695 37.5775 23.58 37.5125 ; + RECT 22.7525 38.14 22.8175 38.005 ; + RECT 23.07 38.9225 23.205 38.8575 ; + RECT 23.375 38.6325 23.445 38.3425 ; + RECT 23.0525 38.7825 23.1875 38.7175 ; + RECT 22.755 37.7775 22.82 37.6425 ; + RECT 23.27 38.4075 23.445 38.3425 ; + RECT 23.27 37.7775 23.335 37.6425 ; + RECT 22.695 38.9225 23.58 38.8575 ; + RECT 23.4575 38.14 23.5225 38.005 ; + RECT 22.75 38.2425 22.82 38.1075 ; + RECT 23.02 38.6325 23.085 38.4975 ; + RECT 23.27 38.2425 23.335 38.1075 ; + RECT 23.2025 38.6325 23.2675 38.4975 ; + RECT 22.755 38.2425 22.82 38.1075 ; + RECT 22.94 37.7775 23.005 37.6425 ; + RECT 23.27 38.4075 23.335 37.7775 ; + RECT 22.7175 38.9225 22.8525 38.8575 ; + RECT 22.835 38.6325 22.9 38.4975 ; + RECT 22.94 39.5375 23.005 39.6725 ; + RECT 23.455 39.5375 23.525 39.6725 ; + RECT 22.835 39.3725 23.005 39.4375 ; + RECT 22.695 38.9975 23.58 39.0625 ; + RECT 22.75 40.0025 22.82 40.2025 ; + RECT 23.455 40.0025 23.52 40.1375 ; + RECT 23.0075 39.1475 23.0725 39.2825 ; + RECT 23.19 39.1475 23.255 39.2825 ; + RECT 23.455 39.5375 23.52 39.6725 ; + RECT 23.4225 38.8575 23.5575 38.9225 ; + RECT 23.1825 39.7375 23.3175 39.8025 ; + RECT 23.405 39.0 23.4575 39.0625 ; + RECT 22.9575 39.8875 23.0925 39.9525 ; + RECT 22.835 39.1475 22.905 39.4375 ; + RECT 22.94 39.3725 23.005 40.1125 ; + RECT 23.455 40.0025 23.525 40.2025 ; + RECT 23.375 39.1475 23.44 39.2825 ; + RECT 22.7 39.0 22.7525 39.0625 ; + RECT 22.695 40.2025 23.58 40.2675 ; + RECT 22.7525 39.64 22.8175 39.775 ; + RECT 23.07 38.8575 23.205 38.9225 ; + RECT 23.375 39.1475 23.445 39.4375 ; + RECT 23.0525 38.9975 23.1875 39.0625 ; + RECT 22.755 40.0025 22.82 40.1375 ; + RECT 23.27 39.3725 23.445 39.4375 ; + RECT 23.27 40.0025 23.335 40.1375 ; + RECT 22.695 38.8575 23.58 38.9225 ; + RECT 23.4575 39.64 23.5225 39.775 ; + RECT 22.75 39.5375 22.82 39.6725 ; + RECT 23.02 39.1475 23.085 39.2825 ; + RECT 23.27 39.5375 23.335 39.6725 ; + RECT 23.2025 39.1475 23.2675 39.2825 ; + RECT 22.755 39.5375 22.82 39.6725 ; + RECT 22.94 40.0025 23.005 40.1375 ; + RECT 23.27 39.3725 23.335 40.0025 ; + RECT 22.7175 38.8575 22.8525 38.9225 ; + RECT 22.835 39.1475 22.9 39.2825 ; + RECT 22.94 40.9325 23.005 40.7975 ; + RECT 23.455 40.9325 23.525 40.7975 ; + RECT 22.835 41.0975 23.005 41.0325 ; + RECT 22.695 41.4725 23.58 41.4075 ; + RECT 22.75 40.4675 22.82 40.2675 ; + RECT 23.455 40.4675 23.52 40.3325 ; + RECT 23.0075 41.3225 23.0725 41.1875 ; + RECT 23.19 41.3225 23.255 41.1875 ; + RECT 23.455 40.9325 23.52 40.7975 ; + RECT 23.4225 41.6125 23.5575 41.5475 ; + RECT 23.1825 40.7325 23.3175 40.6675 ; + RECT 23.405 41.47 23.4575 41.4075 ; + RECT 22.9575 40.5825 23.0925 40.5175 ; + RECT 22.835 41.3225 22.905 41.0325 ; + RECT 22.94 41.0975 23.005 40.3575 ; + RECT 23.455 40.4675 23.525 40.2675 ; + RECT 23.375 41.3225 23.44 41.1875 ; + RECT 22.7 41.47 22.7525 41.4075 ; + RECT 22.695 40.2675 23.58 40.2025 ; + RECT 22.7525 40.83 22.8175 40.695 ; + RECT 23.07 41.6125 23.205 41.5475 ; + RECT 23.375 41.3225 23.445 41.0325 ; + RECT 23.0525 41.4725 23.1875 41.4075 ; + RECT 22.755 40.4675 22.82 40.3325 ; + RECT 23.27 41.0975 23.445 41.0325 ; + RECT 23.27 40.4675 23.335 40.3325 ; + RECT 22.695 41.6125 23.58 41.5475 ; + RECT 23.4575 40.83 23.5225 40.695 ; + RECT 22.75 40.9325 22.82 40.7975 ; + RECT 23.02 41.3225 23.085 41.1875 ; + RECT 23.27 40.9325 23.335 40.7975 ; + RECT 23.2025 41.3225 23.2675 41.1875 ; + RECT 22.755 40.9325 22.82 40.7975 ; + RECT 22.94 40.4675 23.005 40.3325 ; + RECT 23.27 41.0975 23.335 40.4675 ; + RECT 22.7175 41.6125 22.8525 41.5475 ; + RECT 22.835 41.3225 22.9 41.1875 ; + RECT 22.94 42.2275 23.005 42.3625 ; + RECT 23.455 42.2275 23.525 42.3625 ; + RECT 22.835 42.0625 23.005 42.1275 ; + RECT 22.695 41.6875 23.58 41.7525 ; + RECT 22.75 42.6925 22.82 42.8925 ; + RECT 23.455 42.6925 23.52 42.8275 ; + RECT 23.0075 41.8375 23.0725 41.9725 ; + RECT 23.19 41.8375 23.255 41.9725 ; + RECT 23.455 42.2275 23.52 42.3625 ; + RECT 23.4225 41.5475 23.5575 41.6125 ; + RECT 23.1825 42.4275 23.3175 42.4925 ; + RECT 23.405 41.69 23.4575 41.7525 ; + RECT 22.9575 42.5775 23.0925 42.6425 ; + RECT 22.835 41.8375 22.905 42.1275 ; + RECT 22.94 42.0625 23.005 42.8025 ; + RECT 23.455 42.6925 23.525 42.8925 ; + RECT 23.375 41.8375 23.44 41.9725 ; + RECT 22.7 41.69 22.7525 41.7525 ; + RECT 22.695 42.8925 23.58 42.9575 ; + RECT 22.7525 42.33 22.8175 42.465 ; + RECT 23.07 41.5475 23.205 41.6125 ; + RECT 23.375 41.8375 23.445 42.1275 ; + RECT 23.0525 41.6875 23.1875 41.7525 ; + RECT 22.755 42.6925 22.82 42.8275 ; + RECT 23.27 42.0625 23.445 42.1275 ; + RECT 23.27 42.6925 23.335 42.8275 ; + RECT 22.695 41.5475 23.58 41.6125 ; + RECT 23.4575 42.33 23.5225 42.465 ; + RECT 22.75 42.2275 22.82 42.3625 ; + RECT 23.02 41.8375 23.085 41.9725 ; + RECT 23.27 42.2275 23.335 42.3625 ; + RECT 23.2025 41.8375 23.2675 41.9725 ; + RECT 22.755 42.2275 22.82 42.3625 ; + RECT 22.94 42.6925 23.005 42.8275 ; + RECT 23.27 42.0625 23.335 42.6925 ; + RECT 22.7175 41.5475 22.8525 41.6125 ; + RECT 22.835 41.8375 22.9 41.9725 ; + RECT 22.94 43.6225 23.005 43.4875 ; + RECT 23.455 43.6225 23.525 43.4875 ; + RECT 22.835 43.7875 23.005 43.7225 ; + RECT 22.695 44.1625 23.58 44.0975 ; + RECT 22.75 43.1575 22.82 42.9575 ; + RECT 23.455 43.1575 23.52 43.0225 ; + RECT 23.0075 44.0125 23.0725 43.8775 ; + RECT 23.19 44.0125 23.255 43.8775 ; + RECT 23.455 43.6225 23.52 43.4875 ; + RECT 23.4225 44.3025 23.5575 44.2375 ; + RECT 23.1825 43.4225 23.3175 43.3575 ; + RECT 23.405 44.16 23.4575 44.0975 ; + RECT 22.9575 43.2725 23.0925 43.2075 ; + RECT 22.835 44.0125 22.905 43.7225 ; + RECT 22.94 43.7875 23.005 43.0475 ; + RECT 23.455 43.1575 23.525 42.9575 ; + RECT 23.375 44.0125 23.44 43.8775 ; + RECT 22.7 44.16 22.7525 44.0975 ; + RECT 22.695 42.9575 23.58 42.8925 ; + RECT 22.7525 43.52 22.8175 43.385 ; + RECT 23.07 44.3025 23.205 44.2375 ; + RECT 23.375 44.0125 23.445 43.7225 ; + RECT 23.0525 44.1625 23.1875 44.0975 ; + RECT 22.755 43.1575 22.82 43.0225 ; + RECT 23.27 43.7875 23.445 43.7225 ; + RECT 23.27 43.1575 23.335 43.0225 ; + RECT 22.695 44.3025 23.58 44.2375 ; + RECT 23.4575 43.52 23.5225 43.385 ; + RECT 22.75 43.6225 22.82 43.4875 ; + RECT 23.02 44.0125 23.085 43.8775 ; + RECT 23.27 43.6225 23.335 43.4875 ; + RECT 23.2025 44.0125 23.2675 43.8775 ; + RECT 22.755 43.6225 22.82 43.4875 ; + RECT 22.94 43.1575 23.005 43.0225 ; + RECT 23.27 43.7875 23.335 43.1575 ; + RECT 22.7175 44.3025 22.8525 44.2375 ; + RECT 22.835 44.0125 22.9 43.8775 ; + RECT 22.94 44.9175 23.005 45.0525 ; + RECT 23.455 44.9175 23.525 45.0525 ; + RECT 22.835 44.7525 23.005 44.8175 ; + RECT 22.695 44.3775 23.58 44.4425 ; + RECT 22.75 45.3825 22.82 45.5825 ; + RECT 23.455 45.3825 23.52 45.5175 ; + RECT 23.0075 44.5275 23.0725 44.6625 ; + RECT 23.19 44.5275 23.255 44.6625 ; + RECT 23.455 44.9175 23.52 45.0525 ; + RECT 23.4225 44.2375 23.5575 44.3025 ; + RECT 23.1825 45.1175 23.3175 45.1825 ; + RECT 23.405 44.38 23.4575 44.4425 ; + RECT 22.9575 45.2675 23.0925 45.3325 ; + RECT 22.835 44.5275 22.905 44.8175 ; + RECT 22.94 44.7525 23.005 45.4925 ; + RECT 23.455 45.3825 23.525 45.5825 ; + RECT 23.375 44.5275 23.44 44.6625 ; + RECT 22.7 44.38 22.7525 44.4425 ; + RECT 22.695 45.5825 23.58 45.6475 ; + RECT 22.7525 45.02 22.8175 45.155 ; + RECT 23.07 44.2375 23.205 44.3025 ; + RECT 23.375 44.5275 23.445 44.8175 ; + RECT 23.0525 44.3775 23.1875 44.4425 ; + RECT 22.755 45.3825 22.82 45.5175 ; + RECT 23.27 44.7525 23.445 44.8175 ; + RECT 23.27 45.3825 23.335 45.5175 ; + RECT 22.695 44.2375 23.58 44.3025 ; + RECT 23.4575 45.02 23.5225 45.155 ; + RECT 22.75 44.9175 22.82 45.0525 ; + RECT 23.02 44.5275 23.085 44.6625 ; + RECT 23.27 44.9175 23.335 45.0525 ; + RECT 23.2025 44.5275 23.2675 44.6625 ; + RECT 22.755 44.9175 22.82 45.0525 ; + RECT 22.94 45.3825 23.005 45.5175 ; + RECT 23.27 44.7525 23.335 45.3825 ; + RECT 22.7175 44.2375 22.8525 44.3025 ; + RECT 22.835 44.5275 22.9 44.6625 ; + RECT 22.785 20.1675 23.49 20.2325 ; + RECT 22.785 22.5775 23.49 22.6425 ; + RECT 22.785 22.8575 23.49 22.9225 ; + RECT 22.785 25.2675 23.49 25.3325 ; + RECT 22.785 25.5475 23.49 25.6125 ; + RECT 22.785 27.9575 23.49 28.0225 ; + RECT 22.785 28.2375 23.49 28.3025 ; + RECT 22.785 30.6475 23.49 30.7125 ; + RECT 22.785 30.9275 23.49 30.9925 ; + RECT 22.785 33.3375 23.49 33.4025 ; + RECT 22.785 33.6175 23.49 33.6825 ; + RECT 22.785 36.0275 23.49 36.0925 ; + RECT 22.785 36.3075 23.49 36.3725 ; + RECT 22.785 38.7175 23.49 38.7825 ; + RECT 22.785 38.9975 23.49 39.0625 ; + RECT 22.785 41.4075 23.49 41.4725 ; + RECT 22.785 41.6875 23.49 41.7525 ; + RECT 22.785 44.0975 23.49 44.1625 ; + RECT 22.785 44.3775 23.49 44.4425 ; + RECT 19.77 22.5775 23.685 22.6425 ; + RECT 19.77 22.8575 23.685 22.9225 ; + RECT 19.77 25.2675 23.685 25.3325 ; + RECT 19.77 25.5475 23.685 25.6125 ; + RECT 19.77 27.9575 23.685 28.0225 ; + RECT 19.77 28.2375 23.685 28.3025 ; + RECT 19.77 30.6475 23.685 30.7125 ; + RECT 19.77 30.9275 23.685 30.9925 ; + RECT 19.77 33.3375 23.685 33.4025 ; + RECT 19.77 33.6175 23.685 33.6825 ; + RECT 19.77 36.0275 23.685 36.0925 ; + RECT 19.77 36.3075 23.685 36.3725 ; + RECT 19.77 38.7175 23.685 38.7825 ; + RECT 19.77 38.9975 23.685 39.0625 ; + RECT 19.77 41.4075 23.685 41.4725 ; + RECT 19.77 41.6875 23.685 41.7525 ; + RECT 19.77 44.0975 23.685 44.1625 ; + RECT 21.01 18.5025 21.075 18.6375 ; + RECT 20.795 18.5025 20.86 18.6375 ; + RECT 21.01 19.0525 21.075 19.1875 ; + RECT 20.795 19.0525 20.86 19.1875 ; + RECT 21.225 19.0525 21.29 19.1875 ; + RECT 21.01 19.0525 21.075 19.1875 ; + RECT 20.67 18.17 21.375 18.235 ; + RECT 21.715 18.5025 21.78 18.6375 ; + RECT 21.5 18.5025 21.565 18.6375 ; + RECT 21.715 19.0525 21.78 19.1875 ; + RECT 21.5 19.0525 21.565 19.1875 ; + RECT 21.93 19.0525 21.995 19.1875 ; + RECT 21.715 19.0525 21.78 19.1875 ; + RECT 21.375 18.17 22.08 18.235 ; + RECT 22.42 18.5025 22.485 18.6375 ; + RECT 22.205 18.5025 22.27 18.6375 ; + RECT 22.42 19.0525 22.485 19.1875 ; + RECT 22.205 19.0525 22.27 19.1875 ; + RECT 22.635 19.0525 22.7 19.1875 ; + RECT 22.42 19.0525 22.485 19.1875 ; + RECT 22.08 18.17 22.785 18.235 ; + RECT 19.77 18.17 22.785 18.235 ; + RECT 21.8825 14.545 21.9475 15.24 ; + RECT 21.3775 13.1525 22.005 13.2225 ; + RECT 21.5075 16.5225 21.5725 16.7975 ; + RECT 21.7925 16.98 21.8575 17.255 ; + RECT 21.7925 17.3975 22.115 17.4625 ; + RECT 21.5025 14.135 21.5675 14.27 ; + RECT 21.5075 16.3575 21.7975 16.4225 ; + RECT 22.0325 17.3275 22.0475 17.3975 ; + RECT 21.66 13.2925 21.795 13.3575 ; + RECT 21.6075 16.98 21.6725 17.255 ; + RECT 21.695 14.2025 21.76 14.4 ; + RECT 21.3775 13.0875 21.4425 13.2225 ; + RECT 21.9675 17.0975 22.0325 17.2325 ; + RECT 21.5075 14.4 21.5725 15.4975 ; + RECT 21.8825 15.66 21.9475 16.5225 ; + RECT 21.9675 17.2325 22.0325 17.4625 ; + RECT 21.605 17.5275 21.67 17.5925 ; + RECT 21.6375 16.1225 21.7025 16.2575 ; + RECT 21.695 15.435 21.76 15.57 ; + RECT 21.5075 15.66 21.5725 16.5275 ; + RECT 21.6975 16.5225 21.7625 16.7975 ; + RECT 21.6575 16.74 21.7275 17.0675 ; + RECT 21.34 17.5275 22.115 17.5925 ; + RECT 21.5075 15.4975 21.5725 16.0525 ; + RECT 21.6925 13.575 21.7575 14.27 ; + RECT 21.665 17.5275 21.8 17.5925 ; + RECT 21.5075 14.335 22.005 14.4 ; + RECT 21.6975 14.545 21.7625 15.24 ; + RECT 21.6975 15.175 21.7625 15.37 ; + RECT 21.695 13.2925 21.76 13.4275 ; + RECT 21.8825 15.305 21.9475 15.5 ; + RECT 21.6575 16.1575 21.9475 16.2225 ; + RECT 21.6925 15.4975 21.7575 16.0525 ; + RECT 21.885 14.545 21.95 14.68 ; + RECT 21.8825 16.5225 21.9475 16.7975 ; + RECT 21.7925 17.245 21.8575 17.3975 ; + RECT 22.0475 17.3275 22.1125 17.4625 ; + RECT 21.7525 16.3225 21.8175 16.4575 ; + RECT 21.6975 15.305 21.9475 15.37 ; + RECT 21.5075 13.575 21.5725 14.27 ; + RECT 21.6975 15.4975 21.7625 16.0525 ; + RECT 21.94 13.1525 22.005 14.4 ; + RECT 21.8825 15.4975 21.9475 16.0525 ; + RECT 21.6925 16.5225 21.7575 16.7975 ; + RECT 22.5875 14.545 22.6525 15.24 ; + RECT 22.0825 13.1525 22.71 13.2225 ; + RECT 22.2125 16.5225 22.2775 16.7975 ; + RECT 22.4975 16.98 22.5625 17.255 ; + RECT 22.4975 17.3975 22.82 17.4625 ; + RECT 22.2075 14.135 22.2725 14.27 ; + RECT 22.2125 16.3575 22.5025 16.4225 ; + RECT 22.7375 17.3275 22.7525 17.3975 ; + RECT 22.365 13.2925 22.5 13.3575 ; + RECT 22.3125 16.98 22.3775 17.255 ; + RECT 22.4 14.2025 22.465 14.4 ; + RECT 22.0825 13.0875 22.1475 13.2225 ; + RECT 22.6725 17.0975 22.7375 17.2325 ; + RECT 22.2125 14.4 22.2775 15.4975 ; + RECT 22.5875 15.66 22.6525 16.5225 ; + RECT 22.6725 17.2325 22.7375 17.4625 ; + RECT 22.31 17.5275 22.375 17.5925 ; + RECT 22.3425 16.1225 22.4075 16.2575 ; + RECT 22.4 15.435 22.465 15.57 ; + RECT 22.2125 15.66 22.2775 16.5275 ; + RECT 22.4025 16.5225 22.4675 16.7975 ; + RECT 22.3625 16.74 22.4325 17.0675 ; + RECT 22.045 17.5275 22.82 17.5925 ; + RECT 22.2125 15.4975 22.2775 16.0525 ; + RECT 22.3975 13.575 22.4625 14.27 ; + RECT 22.37 17.5275 22.505 17.5925 ; + RECT 22.2125 14.335 22.71 14.4 ; + RECT 22.4025 14.545 22.4675 15.24 ; + RECT 22.4025 15.175 22.4675 15.37 ; + RECT 22.4 13.2925 22.465 13.4275 ; + RECT 22.5875 15.305 22.6525 15.5 ; + RECT 22.3625 16.1575 22.6525 16.2225 ; + RECT 22.3975 15.4975 22.4625 16.0525 ; + RECT 22.59 14.545 22.655 14.68 ; + RECT 22.5875 16.5225 22.6525 16.7975 ; + RECT 22.4975 17.245 22.5625 17.3975 ; + RECT 22.7525 17.3275 22.8175 17.4625 ; + RECT 22.4575 16.3225 22.5225 16.4575 ; + RECT 22.4025 15.305 22.6525 15.37 ; + RECT 22.2125 13.575 22.2775 14.27 ; + RECT 22.4025 15.4975 22.4675 16.0525 ; + RECT 22.645 13.1525 22.71 14.4 ; + RECT 22.5875 15.4975 22.6525 16.0525 ; + RECT 22.3975 16.5225 22.4625 16.7975 ; + RECT 19.77 17.5275 22.785 17.5925 ; + RECT 21.6575 9.7225 21.82 9.7875 ; + RECT 22.025 9.88 22.0475 10.015 ; + RECT 21.41 9.515 21.42 9.65 ; + RECT 21.42 9.515 21.485 9.65 ; + RECT 21.42 8.6075 21.485 8.825 ; + RECT 21.42 8.5425 22.01 8.6075 ; + RECT 22.0475 9.31 22.1125 9.445 ; + RECT 21.795 11.4275 21.86 11.8075 ; + RECT 21.945 9.515 22.01 9.65 ; + RECT 21.605 9.515 21.67 9.65 ; + RECT 21.42 8.825 21.485 9.24 ; + RECT 21.795 11.0125 21.86 11.4275 ; + RECT 22.0275 11.8075 22.0475 11.9425 ; + RECT 21.795 10.395 21.86 10.81 ; + RECT 21.795 11.8075 21.86 11.9425 ; + RECT 21.7925 9.88 21.8575 10.015 ; + RECT 21.4775 8.2825 21.6125 8.3475 ; + RECT 21.5275 12.0175 21.5925 12.1525 ; + RECT 21.3425 10.8425 21.4075 10.9775 ; + RECT 21.4025 9.88 21.415 10.015 ; + RECT 21.4825 10.795 21.5475 10.93 ; + RECT 21.47 10.795 21.485 10.93 ; + RECT 22.0475 9.515 22.1125 9.65 ; + RECT 21.6225 11.485 21.6875 11.62 ; + RECT 21.96 9.88 22.025 10.015 ; + RECT 21.755 9.5975 21.82 9.7225 ; + RECT 21.42 11.8075 21.485 11.9425 ; + RECT 21.3425 11.8075 21.4075 11.9425 ; + RECT 21.5825 8.28 21.7175 8.345 ; + RECT 21.41 9.88 21.42 10.015 ; + RECT 21.525 12.0175 21.86 12.0825 ; + RECT 21.42 9.88 21.485 10.015 ; + RECT 21.34 9.345 22.115 9.41 ; + RECT 21.645 8.6925 21.78 8.7575 ; + RECT 21.7925 10.395 21.8575 10.53 ; + RECT 21.6575 9.7225 21.7225 10.32 ; + RECT 21.6775 8.6075 21.7425 8.7575 ; + RECT 21.6225 9.515 21.6875 9.65 ; + RECT 21.9625 11.8075 22.0275 11.9425 ; + RECT 21.7625 9.515 21.8275 9.65 ; + RECT 21.795 11.9425 21.86 12.0175 ; + RECT 21.56 11.485 21.625 11.62 ; + RECT 21.48 8.5425 21.615 8.6075 ; + RECT 21.6575 10.235 21.7225 10.37 ; + RECT 21.42 8.4125 22.01 8.4775 ; + RECT 21.42 10.395 21.485 10.81 ; + RECT 21.4025 9.515 21.415 9.65 ; + RECT 21.945 8.6075 22.01 8.825 ; + RECT 21.6225 9.105 21.6875 9.24 ; + RECT 21.7625 9.105 21.8275 9.24 ; + RECT 22.0475 11.8075 22.1125 11.9425 ; + RECT 21.795 9.88 21.86 10.015 ; + RECT 21.945 8.825 22.01 9.24 ; + RECT 21.605 8.825 21.67 9.24 ; + RECT 21.41 11.8075 21.42 11.9425 ; + RECT 21.3425 9.515 21.4075 9.65 ; + RECT 21.3425 9.31 21.4075 9.445 ; + RECT 21.42 11.0125 21.485 11.4275 ; + RECT 21.42 10.81 21.485 11.0125 ; + RECT 21.4075 10.8425 21.55 10.9775 ; + RECT 21.76 9.515 21.825 9.65 ; + RECT 21.4025 11.8075 21.415 11.9425 ; + RECT 22.0475 9.88 22.1125 10.015 ; + RECT 22.005 9.515 22.0475 9.65 ; + RECT 21.3425 9.88 21.4075 10.015 ; + RECT 21.76 8.825 21.825 9.24 ; + RECT 22.3625 9.7225 22.525 9.7875 ; + RECT 22.73 9.88 22.7525 10.015 ; + RECT 22.115 9.515 22.125 9.65 ; + RECT 22.125 9.515 22.19 9.65 ; + RECT 22.125 8.6075 22.19 8.825 ; + RECT 22.125 8.5425 22.715 8.6075 ; + RECT 22.7525 9.31 22.8175 9.445 ; + RECT 22.5 11.4275 22.565 11.8075 ; + RECT 22.65 9.515 22.715 9.65 ; + RECT 22.31 9.515 22.375 9.65 ; + RECT 22.125 8.825 22.19 9.24 ; + RECT 22.5 11.0125 22.565 11.4275 ; + RECT 22.7325 11.8075 22.7525 11.9425 ; + RECT 22.5 10.395 22.565 10.81 ; + RECT 22.5 11.8075 22.565 11.9425 ; + RECT 22.4975 9.88 22.5625 10.015 ; + RECT 22.1825 8.2825 22.3175 8.3475 ; + RECT 22.2325 12.0175 22.2975 12.1525 ; + RECT 22.0475 10.8425 22.1125 10.9775 ; + RECT 22.1075 9.88 22.12 10.015 ; + RECT 22.1875 10.795 22.2525 10.93 ; + RECT 22.175 10.795 22.19 10.93 ; + RECT 22.7525 9.515 22.8175 9.65 ; + RECT 22.3275 11.485 22.3925 11.62 ; + RECT 22.665 9.88 22.73 10.015 ; + RECT 22.46 9.5975 22.525 9.7225 ; + RECT 22.125 11.8075 22.19 11.9425 ; + RECT 22.0475 11.8075 22.1125 11.9425 ; + RECT 22.2875 8.28 22.4225 8.345 ; + RECT 22.115 9.88 22.125 10.015 ; + RECT 22.23 12.0175 22.565 12.0825 ; + RECT 22.125 9.88 22.19 10.015 ; + RECT 22.045 9.345 22.82 9.41 ; + RECT 22.35 8.6925 22.485 8.7575 ; + RECT 22.4975 10.395 22.5625 10.53 ; + RECT 22.3625 9.7225 22.4275 10.32 ; + RECT 22.3825 8.6075 22.4475 8.7575 ; + RECT 22.3275 9.515 22.3925 9.65 ; + RECT 22.6675 11.8075 22.7325 11.9425 ; + RECT 22.4675 9.515 22.5325 9.65 ; + RECT 22.5 11.9425 22.565 12.0175 ; + RECT 22.265 11.485 22.33 11.62 ; + RECT 22.185 8.5425 22.32 8.6075 ; + RECT 22.3625 10.235 22.4275 10.37 ; + RECT 22.125 8.4125 22.715 8.4775 ; + RECT 22.125 10.395 22.19 10.81 ; + RECT 22.1075 9.515 22.12 9.65 ; + RECT 22.65 8.6075 22.715 8.825 ; + RECT 22.3275 9.105 22.3925 9.24 ; + RECT 22.4675 9.105 22.5325 9.24 ; + RECT 22.7525 11.8075 22.8175 11.9425 ; + RECT 22.5 9.88 22.565 10.015 ; + RECT 22.65 8.825 22.715 9.24 ; + RECT 22.31 8.825 22.375 9.24 ; + RECT 22.115 11.8075 22.125 11.9425 ; + RECT 22.0475 9.515 22.1125 9.65 ; + RECT 22.0475 9.31 22.1125 9.445 ; + RECT 22.125 11.0125 22.19 11.4275 ; + RECT 22.125 10.81 22.19 11.0125 ; + RECT 22.1125 10.8425 22.255 10.9775 ; + RECT 22.465 9.515 22.53 9.65 ; + RECT 22.1075 11.8075 22.12 11.9425 ; + RECT 22.7525 9.88 22.8175 10.015 ; + RECT 22.71 9.515 22.7525 9.65 ; + RECT 22.0475 9.88 22.1125 10.015 ; + RECT 22.465 8.825 22.53 9.24 ; + RECT 19.77 8.4125 22.785 8.4775 ; + RECT 19.77 17.5925 22.785 17.5275 ; + RECT 19.77 18.235 22.785 18.17 ; + RECT 19.77 8.4775 22.785 8.4125 ; + RECT 11.4775 23.7675 11.5425 23.9025 ; + RECT 11.2625 23.7675 11.3275 23.9025 ; + RECT 11.4775 22.8525 11.5425 22.9875 ; + RECT 11.2625 22.8525 11.3275 22.9875 ; + RECT 11.2425 23.345 11.3775 23.41 ; + RECT 11.51 23.345 11.575 23.41 ; + RECT 11.17 24.0625 11.8575 24.1275 ; + RECT 11.17 22.7175 11.8575 22.7825 ; + RECT 11.4775 24.4225 11.5425 24.2875 ; + RECT 11.2625 24.4225 11.3275 24.2875 ; + RECT 11.4775 25.3375 11.5425 25.2025 ; + RECT 11.2625 25.3375 11.3275 25.2025 ; + RECT 11.2425 24.845 11.3775 24.78 ; + RECT 11.51 24.845 11.575 24.78 ; + RECT 11.17 24.1275 11.8575 24.0625 ; + RECT 11.17 25.4725 11.8575 25.4075 ; + RECT 13.005 23.7675 13.07 23.9025 ; + RECT 12.79 23.7675 12.855 23.9025 ; + RECT 13.22 23.7675 13.285 23.9025 ; + RECT 13.005 23.7675 13.07 23.9025 ; + RECT 12.79 22.8975 12.855 23.0325 ; + RECT 13.22 22.8975 13.285 23.0325 ; + RECT 12.8625 23.145 12.9975 23.21 ; + RECT 13.0775 23.425 13.2125 23.49 ; + RECT 13.35 23.6375 13.415 23.7025 ; + RECT 12.6975 24.0625 13.6 24.1275 ; + RECT 12.6975 22.7175 13.6 22.7825 ; + RECT 13.9075 23.7675 13.9725 23.9025 ; + RECT 13.6925 23.7675 13.7575 23.9025 ; + RECT 13.9075 22.8525 13.9725 22.9875 ; + RECT 13.6925 22.8525 13.7575 22.9875 ; + RECT 13.6725 23.345 13.8075 23.41 ; + RECT 13.94 23.345 14.005 23.41 ; + RECT 13.6 24.0625 14.2875 24.1275 ; + RECT 13.6 22.7175 14.2875 22.7825 ; + RECT 12.8625 23.145 12.9975 23.21 ; + RECT 13.0775 23.425 13.2125 23.49 ; + RECT 13.94 23.345 14.005 23.41 ; + RECT 12.6975 24.0625 14.2875 24.1275 ; + RECT 12.6975 22.7175 14.2875 22.7825 ; + RECT 13.005 24.4225 13.07 24.2875 ; + RECT 12.79 24.4225 12.855 24.2875 ; + RECT 13.22 24.4225 13.285 24.2875 ; + RECT 13.005 24.4225 13.07 24.2875 ; + RECT 12.79 25.2925 12.855 25.1575 ; + RECT 13.22 25.2925 13.285 25.1575 ; + RECT 12.8625 25.045 12.9975 24.98 ; + RECT 13.0775 24.765 13.2125 24.7 ; + RECT 13.35 24.5525 13.415 24.4875 ; + RECT 12.6975 24.1275 13.6 24.0625 ; + RECT 12.6975 25.4725 13.6 25.4075 ; + RECT 13.9075 24.4225 13.9725 24.2875 ; + RECT 13.6925 24.4225 13.7575 24.2875 ; + RECT 13.9075 25.3375 13.9725 25.2025 ; + RECT 13.6925 25.3375 13.7575 25.2025 ; + RECT 13.6725 24.845 13.8075 24.78 ; + RECT 13.94 24.845 14.005 24.78 ; + RECT 13.6 24.1275 14.2875 24.0625 ; + RECT 13.6 25.4725 14.2875 25.4075 ; + RECT 12.8625 25.045 12.9975 24.98 ; + RECT 13.0775 24.765 13.2125 24.7 ; + RECT 13.94 24.845 14.005 24.78 ; + RECT 12.6975 24.1275 14.2875 24.0625 ; + RECT 12.6975 25.4725 14.2875 25.4075 ; + RECT 13.005 26.4575 13.07 26.5925 ; + RECT 12.79 26.4575 12.855 26.5925 ; + RECT 13.22 26.4575 13.285 26.5925 ; + RECT 13.005 26.4575 13.07 26.5925 ; + RECT 12.79 25.5875 12.855 25.7225 ; + RECT 13.22 25.5875 13.285 25.7225 ; + RECT 12.8625 25.835 12.9975 25.9 ; + RECT 13.0775 26.115 13.2125 26.18 ; + RECT 13.35 26.3275 13.415 26.3925 ; + RECT 12.6975 26.7525 13.6 26.8175 ; + RECT 12.6975 25.4075 13.6 25.4725 ; + RECT 13.9075 26.4575 13.9725 26.5925 ; + RECT 13.6925 26.4575 13.7575 26.5925 ; + RECT 13.9075 25.5425 13.9725 25.6775 ; + RECT 13.6925 25.5425 13.7575 25.6775 ; + RECT 13.6725 26.035 13.8075 26.1 ; + RECT 13.94 26.035 14.005 26.1 ; + RECT 13.6 26.7525 14.2875 26.8175 ; + RECT 13.6 25.4075 14.2875 25.4725 ; + RECT 12.8625 25.835 12.9975 25.9 ; + RECT 13.0775 26.115 13.2125 26.18 ; + RECT 13.94 26.035 14.005 26.1 ; + RECT 12.6975 26.7525 14.2875 26.8175 ; + RECT 12.6975 25.4075 14.2875 25.4725 ; + RECT 13.005 27.1125 13.07 26.9775 ; + RECT 12.79 27.1125 12.855 26.9775 ; + RECT 13.22 27.1125 13.285 26.9775 ; + RECT 13.005 27.1125 13.07 26.9775 ; + RECT 12.79 27.9825 12.855 27.8475 ; + RECT 13.22 27.9825 13.285 27.8475 ; + RECT 12.8625 27.735 12.9975 27.67 ; + RECT 13.0775 27.455 13.2125 27.39 ; + RECT 13.35 27.2425 13.415 27.1775 ; + RECT 12.6975 26.8175 13.6 26.7525 ; + RECT 12.6975 28.1625 13.6 28.0975 ; + RECT 13.9075 27.1125 13.9725 26.9775 ; + RECT 13.6925 27.1125 13.7575 26.9775 ; + RECT 13.9075 28.0275 13.9725 27.8925 ; + RECT 13.6925 28.0275 13.7575 27.8925 ; + RECT 13.6725 27.535 13.8075 27.47 ; + RECT 13.94 27.535 14.005 27.47 ; + RECT 13.6 26.8175 14.2875 26.7525 ; + RECT 13.6 28.1625 14.2875 28.0975 ; + RECT 12.8625 27.735 12.9975 27.67 ; + RECT 13.0775 27.455 13.2125 27.39 ; + RECT 13.94 27.535 14.005 27.47 ; + RECT 12.6975 26.8175 14.2875 26.7525 ; + RECT 12.6975 28.1625 14.2875 28.0975 ; + RECT 13.94 23.345 14.005 23.41 ; + RECT 13.94 24.78 14.005 24.845 ; + RECT 13.94 26.035 14.005 26.1 ; + RECT 13.94 27.47 14.005 27.535 ; + RECT 11.4775 31.8375 11.5425 31.9725 ; + RECT 11.2625 31.8375 11.3275 31.9725 ; + RECT 11.4775 30.9225 11.5425 31.0575 ; + RECT 11.2625 30.9225 11.3275 31.0575 ; + RECT 11.2425 31.415 11.3775 31.48 ; + RECT 11.51 31.415 11.575 31.48 ; + RECT 11.17 32.1325 11.8575 32.1975 ; + RECT 11.17 30.7875 11.8575 30.8525 ; + RECT 11.4775 32.4925 11.5425 32.3575 ; + RECT 11.2625 32.4925 11.3275 32.3575 ; + RECT 11.4775 33.4075 11.5425 33.2725 ; + RECT 11.2625 33.4075 11.3275 33.2725 ; + RECT 11.2425 32.915 11.3775 32.85 ; + RECT 11.51 32.915 11.575 32.85 ; + RECT 11.17 32.1975 11.8575 32.1325 ; + RECT 11.17 33.5425 11.8575 33.4775 ; + RECT 13.005 31.8375 13.07 31.9725 ; + RECT 12.79 31.8375 12.855 31.9725 ; + RECT 13.22 31.8375 13.285 31.9725 ; + RECT 13.005 31.8375 13.07 31.9725 ; + RECT 12.79 30.9675 12.855 31.1025 ; + RECT 13.22 30.9675 13.285 31.1025 ; + RECT 12.8625 31.215 12.9975 31.28 ; + RECT 13.0775 31.495 13.2125 31.56 ; + RECT 13.35 31.7075 13.415 31.7725 ; + RECT 12.6975 32.1325 13.6 32.1975 ; + RECT 12.6975 30.7875 13.6 30.8525 ; + RECT 13.9075 31.8375 13.9725 31.9725 ; + RECT 13.6925 31.8375 13.7575 31.9725 ; + RECT 13.9075 30.9225 13.9725 31.0575 ; + RECT 13.6925 30.9225 13.7575 31.0575 ; + RECT 13.6725 31.415 13.8075 31.48 ; + RECT 13.94 31.415 14.005 31.48 ; + RECT 13.6 32.1325 14.2875 32.1975 ; + RECT 13.6 30.7875 14.2875 30.8525 ; + RECT 12.8625 31.215 12.9975 31.28 ; + RECT 13.0775 31.495 13.2125 31.56 ; + RECT 13.94 31.415 14.005 31.48 ; + RECT 12.6975 32.1325 14.2875 32.1975 ; + RECT 12.6975 30.7875 14.2875 30.8525 ; + RECT 13.005 32.4925 13.07 32.3575 ; + RECT 12.79 32.4925 12.855 32.3575 ; + RECT 13.22 32.4925 13.285 32.3575 ; + RECT 13.005 32.4925 13.07 32.3575 ; + RECT 12.79 33.3625 12.855 33.2275 ; + RECT 13.22 33.3625 13.285 33.2275 ; + RECT 12.8625 33.115 12.9975 33.05 ; + RECT 13.0775 32.835 13.2125 32.77 ; + RECT 13.35 32.6225 13.415 32.5575 ; + RECT 12.6975 32.1975 13.6 32.1325 ; + RECT 12.6975 33.5425 13.6 33.4775 ; + RECT 13.9075 32.4925 13.9725 32.3575 ; + RECT 13.6925 32.4925 13.7575 32.3575 ; + RECT 13.9075 33.4075 13.9725 33.2725 ; + RECT 13.6925 33.4075 13.7575 33.2725 ; + RECT 13.6725 32.915 13.8075 32.85 ; + RECT 13.94 32.915 14.005 32.85 ; + RECT 13.6 32.1975 14.2875 32.1325 ; + RECT 13.6 33.5425 14.2875 33.4775 ; + RECT 12.8625 33.115 12.9975 33.05 ; + RECT 13.0775 32.835 13.2125 32.77 ; + RECT 13.94 32.915 14.005 32.85 ; + RECT 12.6975 32.1975 14.2875 32.1325 ; + RECT 12.6975 33.5425 14.2875 33.4775 ; + RECT 13.005 34.5275 13.07 34.6625 ; + RECT 12.79 34.5275 12.855 34.6625 ; + RECT 13.22 34.5275 13.285 34.6625 ; + RECT 13.005 34.5275 13.07 34.6625 ; + RECT 12.79 33.6575 12.855 33.7925 ; + RECT 13.22 33.6575 13.285 33.7925 ; + RECT 12.8625 33.905 12.9975 33.97 ; + RECT 13.0775 34.185 13.2125 34.25 ; + RECT 13.35 34.3975 13.415 34.4625 ; + RECT 12.6975 34.8225 13.6 34.8875 ; + RECT 12.6975 33.4775 13.6 33.5425 ; + RECT 13.9075 34.5275 13.9725 34.6625 ; + RECT 13.6925 34.5275 13.7575 34.6625 ; + RECT 13.9075 33.6125 13.9725 33.7475 ; + RECT 13.6925 33.6125 13.7575 33.7475 ; + RECT 13.6725 34.105 13.8075 34.17 ; + RECT 13.94 34.105 14.005 34.17 ; + RECT 13.6 34.8225 14.2875 34.8875 ; + RECT 13.6 33.4775 14.2875 33.5425 ; + RECT 12.8625 33.905 12.9975 33.97 ; + RECT 13.0775 34.185 13.2125 34.25 ; + RECT 13.94 34.105 14.005 34.17 ; + RECT 12.6975 34.8225 14.2875 34.8875 ; + RECT 12.6975 33.4775 14.2875 33.5425 ; + RECT 13.005 35.1825 13.07 35.0475 ; + RECT 12.79 35.1825 12.855 35.0475 ; + RECT 13.22 35.1825 13.285 35.0475 ; + RECT 13.005 35.1825 13.07 35.0475 ; + RECT 12.79 36.0525 12.855 35.9175 ; + RECT 13.22 36.0525 13.285 35.9175 ; + RECT 12.8625 35.805 12.9975 35.74 ; + RECT 13.0775 35.525 13.2125 35.46 ; + RECT 13.35 35.3125 13.415 35.2475 ; + RECT 12.6975 34.8875 13.6 34.8225 ; + RECT 12.6975 36.2325 13.6 36.1675 ; + RECT 13.9075 35.1825 13.9725 35.0475 ; + RECT 13.6925 35.1825 13.7575 35.0475 ; + RECT 13.9075 36.0975 13.9725 35.9625 ; + RECT 13.6925 36.0975 13.7575 35.9625 ; + RECT 13.6725 35.605 13.8075 35.54 ; + RECT 13.94 35.605 14.005 35.54 ; + RECT 13.6 34.8875 14.2875 34.8225 ; + RECT 13.6 36.2325 14.2875 36.1675 ; + RECT 12.8625 35.805 12.9975 35.74 ; + RECT 13.0775 35.525 13.2125 35.46 ; + RECT 13.94 35.605 14.005 35.54 ; + RECT 12.6975 34.8875 14.2875 34.8225 ; + RECT 12.6975 36.2325 14.2875 36.1675 ; + RECT 13.94 31.415 14.005 31.48 ; + RECT 13.94 32.85 14.005 32.915 ; + RECT 13.94 34.105 14.005 34.17 ; + RECT 13.94 35.54 14.005 35.605 ; + RECT 15.855 23.7675 15.92 23.9025 ; + RECT 15.64 23.7675 15.705 23.9025 ; + RECT 16.07 23.7675 16.135 23.9025 ; + RECT 15.855 23.7675 15.92 23.9025 ; + RECT 15.64 22.8975 15.705 23.0325 ; + RECT 16.07 22.8975 16.135 23.0325 ; + RECT 15.7125 23.145 15.8475 23.21 ; + RECT 15.9275 23.425 16.0625 23.49 ; + RECT 16.2 23.6375 16.265 23.7025 ; + RECT 15.5475 24.0625 16.45 24.1275 ; + RECT 15.5475 22.7175 16.45 22.7825 ; + RECT 16.7575 23.7675 16.8225 23.9025 ; + RECT 16.5425 23.7675 16.6075 23.9025 ; + RECT 16.7575 22.8525 16.8225 22.9875 ; + RECT 16.5425 22.8525 16.6075 22.9875 ; + RECT 16.5225 23.345 16.6575 23.41 ; + RECT 16.79 23.345 16.855 23.41 ; + RECT 16.45 24.0625 17.1375 24.1275 ; + RECT 16.45 22.7175 17.1375 22.7825 ; + RECT 15.7125 23.145 15.8475 23.21 ; + RECT 15.9275 23.425 16.0625 23.49 ; + RECT 16.79 23.345 16.855 23.41 ; + RECT 15.5475 24.0625 17.1375 24.1275 ; + RECT 15.5475 22.7175 17.1375 22.7825 ; + RECT 15.855 24.4225 15.92 24.2875 ; + RECT 15.64 24.4225 15.705 24.2875 ; + RECT 16.07 24.4225 16.135 24.2875 ; + RECT 15.855 24.4225 15.92 24.2875 ; + RECT 15.64 25.2925 15.705 25.1575 ; + RECT 16.07 25.2925 16.135 25.1575 ; + RECT 15.7125 25.045 15.8475 24.98 ; + RECT 15.9275 24.765 16.0625 24.7 ; + RECT 16.2 24.5525 16.265 24.4875 ; + RECT 15.5475 24.1275 16.45 24.0625 ; + RECT 15.5475 25.4725 16.45 25.4075 ; + RECT 16.7575 24.4225 16.8225 24.2875 ; + RECT 16.5425 24.4225 16.6075 24.2875 ; + RECT 16.7575 25.3375 16.8225 25.2025 ; + RECT 16.5425 25.3375 16.6075 25.2025 ; + RECT 16.5225 24.845 16.6575 24.78 ; + RECT 16.79 24.845 16.855 24.78 ; + RECT 16.45 24.1275 17.1375 24.0625 ; + RECT 16.45 25.4725 17.1375 25.4075 ; + RECT 15.7125 25.045 15.8475 24.98 ; + RECT 15.9275 24.765 16.0625 24.7 ; + RECT 16.79 24.845 16.855 24.78 ; + RECT 15.5475 24.1275 17.1375 24.0625 ; + RECT 15.5475 25.4725 17.1375 25.4075 ; + RECT 15.855 26.4575 15.92 26.5925 ; + RECT 15.64 26.4575 15.705 26.5925 ; + RECT 16.07 26.4575 16.135 26.5925 ; + RECT 15.855 26.4575 15.92 26.5925 ; + RECT 15.64 25.5875 15.705 25.7225 ; + RECT 16.07 25.5875 16.135 25.7225 ; + RECT 15.7125 25.835 15.8475 25.9 ; + RECT 15.9275 26.115 16.0625 26.18 ; + RECT 16.2 26.3275 16.265 26.3925 ; + RECT 15.5475 26.7525 16.45 26.8175 ; + RECT 15.5475 25.4075 16.45 25.4725 ; + RECT 16.7575 26.4575 16.8225 26.5925 ; + RECT 16.5425 26.4575 16.6075 26.5925 ; + RECT 16.7575 25.5425 16.8225 25.6775 ; + RECT 16.5425 25.5425 16.6075 25.6775 ; + RECT 16.5225 26.035 16.6575 26.1 ; + RECT 16.79 26.035 16.855 26.1 ; + RECT 16.45 26.7525 17.1375 26.8175 ; + RECT 16.45 25.4075 17.1375 25.4725 ; + RECT 15.7125 25.835 15.8475 25.9 ; + RECT 15.9275 26.115 16.0625 26.18 ; + RECT 16.79 26.035 16.855 26.1 ; + RECT 15.5475 26.7525 17.1375 26.8175 ; + RECT 15.5475 25.4075 17.1375 25.4725 ; + RECT 15.855 27.1125 15.92 26.9775 ; + RECT 15.64 27.1125 15.705 26.9775 ; + RECT 16.07 27.1125 16.135 26.9775 ; + RECT 15.855 27.1125 15.92 26.9775 ; + RECT 15.64 27.9825 15.705 27.8475 ; + RECT 16.07 27.9825 16.135 27.8475 ; + RECT 15.7125 27.735 15.8475 27.67 ; + RECT 15.9275 27.455 16.0625 27.39 ; + RECT 16.2 27.2425 16.265 27.1775 ; + RECT 15.5475 26.8175 16.45 26.7525 ; + RECT 15.5475 28.1625 16.45 28.0975 ; + RECT 16.7575 27.1125 16.8225 26.9775 ; + RECT 16.5425 27.1125 16.6075 26.9775 ; + RECT 16.7575 28.0275 16.8225 27.8925 ; + RECT 16.5425 28.0275 16.6075 27.8925 ; + RECT 16.5225 27.535 16.6575 27.47 ; + RECT 16.79 27.535 16.855 27.47 ; + RECT 16.45 26.8175 17.1375 26.7525 ; + RECT 16.45 28.1625 17.1375 28.0975 ; + RECT 15.7125 27.735 15.8475 27.67 ; + RECT 15.9275 27.455 16.0625 27.39 ; + RECT 16.79 27.535 16.855 27.47 ; + RECT 15.5475 26.8175 17.1375 26.7525 ; + RECT 15.5475 28.1625 17.1375 28.0975 ; + RECT 15.855 29.1475 15.92 29.2825 ; + RECT 15.64 29.1475 15.705 29.2825 ; + RECT 16.07 29.1475 16.135 29.2825 ; + RECT 15.855 29.1475 15.92 29.2825 ; + RECT 15.64 28.2775 15.705 28.4125 ; + RECT 16.07 28.2775 16.135 28.4125 ; + RECT 15.7125 28.525 15.8475 28.59 ; + RECT 15.9275 28.805 16.0625 28.87 ; + RECT 16.2 29.0175 16.265 29.0825 ; + RECT 15.5475 29.4425 16.45 29.5075 ; + RECT 15.5475 28.0975 16.45 28.1625 ; + RECT 16.7575 29.1475 16.8225 29.2825 ; + RECT 16.5425 29.1475 16.6075 29.2825 ; + RECT 16.7575 28.2325 16.8225 28.3675 ; + RECT 16.5425 28.2325 16.6075 28.3675 ; + RECT 16.5225 28.725 16.6575 28.79 ; + RECT 16.79 28.725 16.855 28.79 ; + RECT 16.45 29.4425 17.1375 29.5075 ; + RECT 16.45 28.0975 17.1375 28.1625 ; + RECT 15.7125 28.525 15.8475 28.59 ; + RECT 15.9275 28.805 16.0625 28.87 ; + RECT 16.79 28.725 16.855 28.79 ; + RECT 15.5475 29.4425 17.1375 29.5075 ; + RECT 15.5475 28.0975 17.1375 28.1625 ; + RECT 15.855 29.8025 15.92 29.6675 ; + RECT 15.64 29.8025 15.705 29.6675 ; + RECT 16.07 29.8025 16.135 29.6675 ; + RECT 15.855 29.8025 15.92 29.6675 ; + RECT 15.64 30.6725 15.705 30.5375 ; + RECT 16.07 30.6725 16.135 30.5375 ; + RECT 15.7125 30.425 15.8475 30.36 ; + RECT 15.9275 30.145 16.0625 30.08 ; + RECT 16.2 29.9325 16.265 29.8675 ; + RECT 15.5475 29.5075 16.45 29.4425 ; + RECT 15.5475 30.8525 16.45 30.7875 ; + RECT 16.7575 29.8025 16.8225 29.6675 ; + RECT 16.5425 29.8025 16.6075 29.6675 ; + RECT 16.7575 30.7175 16.8225 30.5825 ; + RECT 16.5425 30.7175 16.6075 30.5825 ; + RECT 16.5225 30.225 16.6575 30.16 ; + RECT 16.79 30.225 16.855 30.16 ; + RECT 16.45 29.5075 17.1375 29.4425 ; + RECT 16.45 30.8525 17.1375 30.7875 ; + RECT 15.7125 30.425 15.8475 30.36 ; + RECT 15.9275 30.145 16.0625 30.08 ; + RECT 16.79 30.225 16.855 30.16 ; + RECT 15.5475 29.5075 17.1375 29.4425 ; + RECT 15.5475 30.8525 17.1375 30.7875 ; + RECT 15.855 31.8375 15.92 31.9725 ; + RECT 15.64 31.8375 15.705 31.9725 ; + RECT 16.07 31.8375 16.135 31.9725 ; + RECT 15.855 31.8375 15.92 31.9725 ; + RECT 15.64 30.9675 15.705 31.1025 ; + RECT 16.07 30.9675 16.135 31.1025 ; + RECT 15.7125 31.215 15.8475 31.28 ; + RECT 15.9275 31.495 16.0625 31.56 ; + RECT 16.2 31.7075 16.265 31.7725 ; + RECT 15.5475 32.1325 16.45 32.1975 ; + RECT 15.5475 30.7875 16.45 30.8525 ; + RECT 16.7575 31.8375 16.8225 31.9725 ; + RECT 16.5425 31.8375 16.6075 31.9725 ; + RECT 16.7575 30.9225 16.8225 31.0575 ; + RECT 16.5425 30.9225 16.6075 31.0575 ; + RECT 16.5225 31.415 16.6575 31.48 ; + RECT 16.79 31.415 16.855 31.48 ; + RECT 16.45 32.1325 17.1375 32.1975 ; + RECT 16.45 30.7875 17.1375 30.8525 ; + RECT 15.7125 31.215 15.8475 31.28 ; + RECT 15.9275 31.495 16.0625 31.56 ; + RECT 16.79 31.415 16.855 31.48 ; + RECT 15.5475 32.1325 17.1375 32.1975 ; + RECT 15.5475 30.7875 17.1375 30.8525 ; + RECT 15.855 32.4925 15.92 32.3575 ; + RECT 15.64 32.4925 15.705 32.3575 ; + RECT 16.07 32.4925 16.135 32.3575 ; + RECT 15.855 32.4925 15.92 32.3575 ; + RECT 15.64 33.3625 15.705 33.2275 ; + RECT 16.07 33.3625 16.135 33.2275 ; + RECT 15.7125 33.115 15.8475 33.05 ; + RECT 15.9275 32.835 16.0625 32.77 ; + RECT 16.2 32.6225 16.265 32.5575 ; + RECT 15.5475 32.1975 16.45 32.1325 ; + RECT 15.5475 33.5425 16.45 33.4775 ; + RECT 16.7575 32.4925 16.8225 32.3575 ; + RECT 16.5425 32.4925 16.6075 32.3575 ; + RECT 16.7575 33.4075 16.8225 33.2725 ; + RECT 16.5425 33.4075 16.6075 33.2725 ; + RECT 16.5225 32.915 16.6575 32.85 ; + RECT 16.79 32.915 16.855 32.85 ; + RECT 16.45 32.1975 17.1375 32.1325 ; + RECT 16.45 33.5425 17.1375 33.4775 ; + RECT 15.7125 33.115 15.8475 33.05 ; + RECT 15.9275 32.835 16.0625 32.77 ; + RECT 16.79 32.915 16.855 32.85 ; + RECT 15.5475 32.1975 17.1375 32.1325 ; + RECT 15.5475 33.5425 17.1375 33.4775 ; + RECT 15.855 34.5275 15.92 34.6625 ; + RECT 15.64 34.5275 15.705 34.6625 ; + RECT 16.07 34.5275 16.135 34.6625 ; + RECT 15.855 34.5275 15.92 34.6625 ; + RECT 15.64 33.6575 15.705 33.7925 ; + RECT 16.07 33.6575 16.135 33.7925 ; + RECT 15.7125 33.905 15.8475 33.97 ; + RECT 15.9275 34.185 16.0625 34.25 ; + RECT 16.2 34.3975 16.265 34.4625 ; + RECT 15.5475 34.8225 16.45 34.8875 ; + RECT 15.5475 33.4775 16.45 33.5425 ; + RECT 16.7575 34.5275 16.8225 34.6625 ; + RECT 16.5425 34.5275 16.6075 34.6625 ; + RECT 16.7575 33.6125 16.8225 33.7475 ; + RECT 16.5425 33.6125 16.6075 33.7475 ; + RECT 16.5225 34.105 16.6575 34.17 ; + RECT 16.79 34.105 16.855 34.17 ; + RECT 16.45 34.8225 17.1375 34.8875 ; + RECT 16.45 33.4775 17.1375 33.5425 ; + RECT 15.7125 33.905 15.8475 33.97 ; + RECT 15.9275 34.185 16.0625 34.25 ; + RECT 16.79 34.105 16.855 34.17 ; + RECT 15.5475 34.8225 17.1375 34.8875 ; + RECT 15.5475 33.4775 17.1375 33.5425 ; + RECT 15.855 35.1825 15.92 35.0475 ; + RECT 15.64 35.1825 15.705 35.0475 ; + RECT 16.07 35.1825 16.135 35.0475 ; + RECT 15.855 35.1825 15.92 35.0475 ; + RECT 15.64 36.0525 15.705 35.9175 ; + RECT 16.07 36.0525 16.135 35.9175 ; + RECT 15.7125 35.805 15.8475 35.74 ; + RECT 15.9275 35.525 16.0625 35.46 ; + RECT 16.2 35.3125 16.265 35.2475 ; + RECT 15.5475 34.8875 16.45 34.8225 ; + RECT 15.5475 36.2325 16.45 36.1675 ; + RECT 16.7575 35.1825 16.8225 35.0475 ; + RECT 16.5425 35.1825 16.6075 35.0475 ; + RECT 16.7575 36.0975 16.8225 35.9625 ; + RECT 16.5425 36.0975 16.6075 35.9625 ; + RECT 16.5225 35.605 16.6575 35.54 ; + RECT 16.79 35.605 16.855 35.54 ; + RECT 16.45 34.8875 17.1375 34.8225 ; + RECT 16.45 36.2325 17.1375 36.1675 ; + RECT 15.7125 35.805 15.8475 35.74 ; + RECT 15.9275 35.525 16.0625 35.46 ; + RECT 16.79 35.605 16.855 35.54 ; + RECT 15.5475 34.8875 17.1375 34.8225 ; + RECT 15.5475 36.2325 17.1375 36.1675 ; + RECT 15.855 37.2175 15.92 37.3525 ; + RECT 15.64 37.2175 15.705 37.3525 ; + RECT 16.07 37.2175 16.135 37.3525 ; + RECT 15.855 37.2175 15.92 37.3525 ; + RECT 15.64 36.3475 15.705 36.4825 ; + RECT 16.07 36.3475 16.135 36.4825 ; + RECT 15.7125 36.595 15.8475 36.66 ; + RECT 15.9275 36.875 16.0625 36.94 ; + RECT 16.2 37.0875 16.265 37.1525 ; + RECT 15.5475 37.5125 16.45 37.5775 ; + RECT 15.5475 36.1675 16.45 36.2325 ; + RECT 16.7575 37.2175 16.8225 37.3525 ; + RECT 16.5425 37.2175 16.6075 37.3525 ; + RECT 16.7575 36.3025 16.8225 36.4375 ; + RECT 16.5425 36.3025 16.6075 36.4375 ; + RECT 16.5225 36.795 16.6575 36.86 ; + RECT 16.79 36.795 16.855 36.86 ; + RECT 16.45 37.5125 17.1375 37.5775 ; + RECT 16.45 36.1675 17.1375 36.2325 ; + RECT 15.7125 36.595 15.8475 36.66 ; + RECT 15.9275 36.875 16.0625 36.94 ; + RECT 16.79 36.795 16.855 36.86 ; + RECT 15.5475 37.5125 17.1375 37.5775 ; + RECT 15.5475 36.1675 17.1375 36.2325 ; + RECT 15.855 37.8725 15.92 37.7375 ; + RECT 15.64 37.8725 15.705 37.7375 ; + RECT 16.07 37.8725 16.135 37.7375 ; + RECT 15.855 37.8725 15.92 37.7375 ; + RECT 15.64 38.7425 15.705 38.6075 ; + RECT 16.07 38.7425 16.135 38.6075 ; + RECT 15.7125 38.495 15.8475 38.43 ; + RECT 15.9275 38.215 16.0625 38.15 ; + RECT 16.2 38.0025 16.265 37.9375 ; + RECT 15.5475 37.5775 16.45 37.5125 ; + RECT 15.5475 38.9225 16.45 38.8575 ; + RECT 16.7575 37.8725 16.8225 37.7375 ; + RECT 16.5425 37.8725 16.6075 37.7375 ; + RECT 16.7575 38.7875 16.8225 38.6525 ; + RECT 16.5425 38.7875 16.6075 38.6525 ; + RECT 16.5225 38.295 16.6575 38.23 ; + RECT 16.79 38.295 16.855 38.23 ; + RECT 16.45 37.5775 17.1375 37.5125 ; + RECT 16.45 38.9225 17.1375 38.8575 ; + RECT 15.7125 38.495 15.8475 38.43 ; + RECT 15.9275 38.215 16.0625 38.15 ; + RECT 16.79 38.295 16.855 38.23 ; + RECT 15.5475 37.5775 17.1375 37.5125 ; + RECT 15.5475 38.9225 17.1375 38.8575 ; + RECT 15.855 39.9075 15.92 40.0425 ; + RECT 15.64 39.9075 15.705 40.0425 ; + RECT 16.07 39.9075 16.135 40.0425 ; + RECT 15.855 39.9075 15.92 40.0425 ; + RECT 15.64 39.0375 15.705 39.1725 ; + RECT 16.07 39.0375 16.135 39.1725 ; + RECT 15.7125 39.285 15.8475 39.35 ; + RECT 15.9275 39.565 16.0625 39.63 ; + RECT 16.2 39.7775 16.265 39.8425 ; + RECT 15.5475 40.2025 16.45 40.2675 ; + RECT 15.5475 38.8575 16.45 38.9225 ; + RECT 16.7575 39.9075 16.8225 40.0425 ; + RECT 16.5425 39.9075 16.6075 40.0425 ; + RECT 16.7575 38.9925 16.8225 39.1275 ; + RECT 16.5425 38.9925 16.6075 39.1275 ; + RECT 16.5225 39.485 16.6575 39.55 ; + RECT 16.79 39.485 16.855 39.55 ; + RECT 16.45 40.2025 17.1375 40.2675 ; + RECT 16.45 38.8575 17.1375 38.9225 ; + RECT 15.7125 39.285 15.8475 39.35 ; + RECT 15.9275 39.565 16.0625 39.63 ; + RECT 16.79 39.485 16.855 39.55 ; + RECT 15.5475 40.2025 17.1375 40.2675 ; + RECT 15.5475 38.8575 17.1375 38.9225 ; + RECT 15.855 40.5625 15.92 40.4275 ; + RECT 15.64 40.5625 15.705 40.4275 ; + RECT 16.07 40.5625 16.135 40.4275 ; + RECT 15.855 40.5625 15.92 40.4275 ; + RECT 15.64 41.4325 15.705 41.2975 ; + RECT 16.07 41.4325 16.135 41.2975 ; + RECT 15.7125 41.185 15.8475 41.12 ; + RECT 15.9275 40.905 16.0625 40.84 ; + RECT 16.2 40.6925 16.265 40.6275 ; + RECT 15.5475 40.2675 16.45 40.2025 ; + RECT 15.5475 41.6125 16.45 41.5475 ; + RECT 16.7575 40.5625 16.8225 40.4275 ; + RECT 16.5425 40.5625 16.6075 40.4275 ; + RECT 16.7575 41.4775 16.8225 41.3425 ; + RECT 16.5425 41.4775 16.6075 41.3425 ; + RECT 16.5225 40.985 16.6575 40.92 ; + RECT 16.79 40.985 16.855 40.92 ; + RECT 16.45 40.2675 17.1375 40.2025 ; + RECT 16.45 41.6125 17.1375 41.5475 ; + RECT 15.7125 41.185 15.8475 41.12 ; + RECT 15.9275 40.905 16.0625 40.84 ; + RECT 16.79 40.985 16.855 40.92 ; + RECT 15.5475 40.2675 17.1375 40.2025 ; + RECT 15.5475 41.6125 17.1375 41.5475 ; + RECT 15.855 42.5975 15.92 42.7325 ; + RECT 15.64 42.5975 15.705 42.7325 ; + RECT 16.07 42.5975 16.135 42.7325 ; + RECT 15.855 42.5975 15.92 42.7325 ; + RECT 15.64 41.7275 15.705 41.8625 ; + RECT 16.07 41.7275 16.135 41.8625 ; + RECT 15.7125 41.975 15.8475 42.04 ; + RECT 15.9275 42.255 16.0625 42.32 ; + RECT 16.2 42.4675 16.265 42.5325 ; + RECT 15.5475 42.8925 16.45 42.9575 ; + RECT 15.5475 41.5475 16.45 41.6125 ; + RECT 16.7575 42.5975 16.8225 42.7325 ; + RECT 16.5425 42.5975 16.6075 42.7325 ; + RECT 16.7575 41.6825 16.8225 41.8175 ; + RECT 16.5425 41.6825 16.6075 41.8175 ; + RECT 16.5225 42.175 16.6575 42.24 ; + RECT 16.79 42.175 16.855 42.24 ; + RECT 16.45 42.8925 17.1375 42.9575 ; + RECT 16.45 41.5475 17.1375 41.6125 ; + RECT 15.7125 41.975 15.8475 42.04 ; + RECT 15.9275 42.255 16.0625 42.32 ; + RECT 16.79 42.175 16.855 42.24 ; + RECT 15.5475 42.8925 17.1375 42.9575 ; + RECT 15.5475 41.5475 17.1375 41.6125 ; + RECT 15.855 43.2525 15.92 43.1175 ; + RECT 15.64 43.2525 15.705 43.1175 ; + RECT 16.07 43.2525 16.135 43.1175 ; + RECT 15.855 43.2525 15.92 43.1175 ; + RECT 15.64 44.1225 15.705 43.9875 ; + RECT 16.07 44.1225 16.135 43.9875 ; + RECT 15.7125 43.875 15.8475 43.81 ; + RECT 15.9275 43.595 16.0625 43.53 ; + RECT 16.2 43.3825 16.265 43.3175 ; + RECT 15.5475 42.9575 16.45 42.8925 ; + RECT 15.5475 44.3025 16.45 44.2375 ; + RECT 16.7575 43.2525 16.8225 43.1175 ; + RECT 16.5425 43.2525 16.6075 43.1175 ; + RECT 16.7575 44.1675 16.8225 44.0325 ; + RECT 16.5425 44.1675 16.6075 44.0325 ; + RECT 16.5225 43.675 16.6575 43.61 ; + RECT 16.79 43.675 16.855 43.61 ; + RECT 16.45 42.9575 17.1375 42.8925 ; + RECT 16.45 44.3025 17.1375 44.2375 ; + RECT 15.7125 43.875 15.8475 43.81 ; + RECT 15.9275 43.595 16.0625 43.53 ; + RECT 16.79 43.675 16.855 43.61 ; + RECT 15.5475 42.9575 17.1375 42.8925 ; + RECT 15.5475 44.3025 17.1375 44.2375 ; + RECT 16.79 23.345 16.855 23.41 ; + RECT 16.79 24.78 16.855 24.845 ; + RECT 16.79 26.035 16.855 26.1 ; + RECT 16.79 27.47 16.855 27.535 ; + RECT 16.79 28.725 16.855 28.79 ; + RECT 16.79 30.16 16.855 30.225 ; + RECT 16.79 31.415 16.855 31.48 ; + RECT 16.79 32.85 16.855 32.915 ; + RECT 16.79 34.105 16.855 34.17 ; + RECT 16.79 35.54 16.855 35.605 ; + RECT 16.79 36.795 16.855 36.86 ; + RECT 16.79 38.23 16.855 38.295 ; + RECT 16.79 39.485 16.855 39.55 ; + RECT 16.79 40.92 16.855 40.985 ; + RECT 16.79 42.175 16.855 42.24 ; + RECT 16.79 43.61 16.855 43.675 ; + RECT 17.4775 23.7675 17.5425 23.9025 ; + RECT 17.2625 23.7675 17.3275 23.9025 ; + RECT 17.6925 23.7675 17.7575 23.9025 ; + RECT 17.4775 23.7675 17.5425 23.9025 ; + RECT 17.2625 22.8975 17.3275 23.0325 ; + RECT 17.6925 22.8975 17.7575 23.0325 ; + RECT 17.335 23.145 17.47 23.21 ; + RECT 17.55 23.425 17.685 23.49 ; + RECT 17.8225 23.6375 17.8875 23.7025 ; + RECT 17.17 24.0625 18.0725 24.1275 ; + RECT 17.17 22.7175 18.0725 22.7825 ; + RECT 18.38 23.7675 18.445 23.9025 ; + RECT 18.165 23.7675 18.23 23.9025 ; + RECT 18.38 22.8525 18.445 22.9875 ; + RECT 18.165 22.8525 18.23 22.9875 ; + RECT 18.145 23.345 18.28 23.41 ; + RECT 18.4125 23.345 18.4775 23.41 ; + RECT 18.0725 24.0625 18.76 24.1275 ; + RECT 18.0725 22.7175 18.76 22.7825 ; + RECT 17.335 23.145 17.47 23.21 ; + RECT 17.55 23.425 17.685 23.49 ; + RECT 18.4125 23.345 18.4775 23.41 ; + RECT 17.17 24.0625 18.76 24.1275 ; + RECT 17.17 22.7175 18.76 22.7825 ; + RECT 17.4775 24.4225 17.5425 24.2875 ; + RECT 17.2625 24.4225 17.3275 24.2875 ; + RECT 17.6925 24.4225 17.7575 24.2875 ; + RECT 17.4775 24.4225 17.5425 24.2875 ; + RECT 17.2625 25.2925 17.3275 25.1575 ; + RECT 17.6925 25.2925 17.7575 25.1575 ; + RECT 17.335 25.045 17.47 24.98 ; + RECT 17.55 24.765 17.685 24.7 ; + RECT 17.8225 24.5525 17.8875 24.4875 ; + RECT 17.17 24.1275 18.0725 24.0625 ; + RECT 17.17 25.4725 18.0725 25.4075 ; + RECT 18.38 24.4225 18.445 24.2875 ; + RECT 18.165 24.4225 18.23 24.2875 ; + RECT 18.38 25.3375 18.445 25.2025 ; + RECT 18.165 25.3375 18.23 25.2025 ; + RECT 18.145 24.845 18.28 24.78 ; + RECT 18.4125 24.845 18.4775 24.78 ; + RECT 18.0725 24.1275 18.76 24.0625 ; + RECT 18.0725 25.4725 18.76 25.4075 ; + RECT 17.335 25.045 17.47 24.98 ; + RECT 17.55 24.765 17.685 24.7 ; + RECT 18.4125 24.845 18.4775 24.78 ; + RECT 17.17 24.1275 18.76 24.0625 ; + RECT 17.17 25.4725 18.76 25.4075 ; + RECT 17.4775 26.4575 17.5425 26.5925 ; + RECT 17.2625 26.4575 17.3275 26.5925 ; + RECT 17.6925 26.4575 17.7575 26.5925 ; + RECT 17.4775 26.4575 17.5425 26.5925 ; + RECT 17.2625 25.5875 17.3275 25.7225 ; + RECT 17.6925 25.5875 17.7575 25.7225 ; + RECT 17.335 25.835 17.47 25.9 ; + RECT 17.55 26.115 17.685 26.18 ; + RECT 17.8225 26.3275 17.8875 26.3925 ; + RECT 17.17 26.7525 18.0725 26.8175 ; + RECT 17.17 25.4075 18.0725 25.4725 ; + RECT 18.38 26.4575 18.445 26.5925 ; + RECT 18.165 26.4575 18.23 26.5925 ; + RECT 18.38 25.5425 18.445 25.6775 ; + RECT 18.165 25.5425 18.23 25.6775 ; + RECT 18.145 26.035 18.28 26.1 ; + RECT 18.4125 26.035 18.4775 26.1 ; + RECT 18.0725 26.7525 18.76 26.8175 ; + RECT 18.0725 25.4075 18.76 25.4725 ; + RECT 17.335 25.835 17.47 25.9 ; + RECT 17.55 26.115 17.685 26.18 ; + RECT 18.4125 26.035 18.4775 26.1 ; + RECT 17.17 26.7525 18.76 26.8175 ; + RECT 17.17 25.4075 18.76 25.4725 ; + RECT 17.4775 27.1125 17.5425 26.9775 ; + RECT 17.2625 27.1125 17.3275 26.9775 ; + RECT 17.6925 27.1125 17.7575 26.9775 ; + RECT 17.4775 27.1125 17.5425 26.9775 ; + RECT 17.2625 27.9825 17.3275 27.8475 ; + RECT 17.6925 27.9825 17.7575 27.8475 ; + RECT 17.335 27.735 17.47 27.67 ; + RECT 17.55 27.455 17.685 27.39 ; + RECT 17.8225 27.2425 17.8875 27.1775 ; + RECT 17.17 26.8175 18.0725 26.7525 ; + RECT 17.17 28.1625 18.0725 28.0975 ; + RECT 18.38 27.1125 18.445 26.9775 ; + RECT 18.165 27.1125 18.23 26.9775 ; + RECT 18.38 28.0275 18.445 27.8925 ; + RECT 18.165 28.0275 18.23 27.8925 ; + RECT 18.145 27.535 18.28 27.47 ; + RECT 18.4125 27.535 18.4775 27.47 ; + RECT 18.0725 26.8175 18.76 26.7525 ; + RECT 18.0725 28.1625 18.76 28.0975 ; + RECT 17.335 27.735 17.47 27.67 ; + RECT 17.55 27.455 17.685 27.39 ; + RECT 18.4125 27.535 18.4775 27.47 ; + RECT 17.17 26.8175 18.76 26.7525 ; + RECT 17.17 28.1625 18.76 28.0975 ; + RECT 17.4775 29.1475 17.5425 29.2825 ; + RECT 17.2625 29.1475 17.3275 29.2825 ; + RECT 17.6925 29.1475 17.7575 29.2825 ; + RECT 17.4775 29.1475 17.5425 29.2825 ; + RECT 17.2625 28.2775 17.3275 28.4125 ; + RECT 17.6925 28.2775 17.7575 28.4125 ; + RECT 17.335 28.525 17.47 28.59 ; + RECT 17.55 28.805 17.685 28.87 ; + RECT 17.8225 29.0175 17.8875 29.0825 ; + RECT 17.17 29.4425 18.0725 29.5075 ; + RECT 17.17 28.0975 18.0725 28.1625 ; + RECT 18.38 29.1475 18.445 29.2825 ; + RECT 18.165 29.1475 18.23 29.2825 ; + RECT 18.38 28.2325 18.445 28.3675 ; + RECT 18.165 28.2325 18.23 28.3675 ; + RECT 18.145 28.725 18.28 28.79 ; + RECT 18.4125 28.725 18.4775 28.79 ; + RECT 18.0725 29.4425 18.76 29.5075 ; + RECT 18.0725 28.0975 18.76 28.1625 ; + RECT 17.335 28.525 17.47 28.59 ; + RECT 17.55 28.805 17.685 28.87 ; + RECT 18.4125 28.725 18.4775 28.79 ; + RECT 17.17 29.4425 18.76 29.5075 ; + RECT 17.17 28.0975 18.76 28.1625 ; + RECT 17.4775 29.8025 17.5425 29.6675 ; + RECT 17.2625 29.8025 17.3275 29.6675 ; + RECT 17.6925 29.8025 17.7575 29.6675 ; + RECT 17.4775 29.8025 17.5425 29.6675 ; + RECT 17.2625 30.6725 17.3275 30.5375 ; + RECT 17.6925 30.6725 17.7575 30.5375 ; + RECT 17.335 30.425 17.47 30.36 ; + RECT 17.55 30.145 17.685 30.08 ; + RECT 17.8225 29.9325 17.8875 29.8675 ; + RECT 17.17 29.5075 18.0725 29.4425 ; + RECT 17.17 30.8525 18.0725 30.7875 ; + RECT 18.38 29.8025 18.445 29.6675 ; + RECT 18.165 29.8025 18.23 29.6675 ; + RECT 18.38 30.7175 18.445 30.5825 ; + RECT 18.165 30.7175 18.23 30.5825 ; + RECT 18.145 30.225 18.28 30.16 ; + RECT 18.4125 30.225 18.4775 30.16 ; + RECT 18.0725 29.5075 18.76 29.4425 ; + RECT 18.0725 30.8525 18.76 30.7875 ; + RECT 17.335 30.425 17.47 30.36 ; + RECT 17.55 30.145 17.685 30.08 ; + RECT 18.4125 30.225 18.4775 30.16 ; + RECT 17.17 29.5075 18.76 29.4425 ; + RECT 17.17 30.8525 18.76 30.7875 ; + RECT 17.4775 31.8375 17.5425 31.9725 ; + RECT 17.2625 31.8375 17.3275 31.9725 ; + RECT 17.6925 31.8375 17.7575 31.9725 ; + RECT 17.4775 31.8375 17.5425 31.9725 ; + RECT 17.2625 30.9675 17.3275 31.1025 ; + RECT 17.6925 30.9675 17.7575 31.1025 ; + RECT 17.335 31.215 17.47 31.28 ; + RECT 17.55 31.495 17.685 31.56 ; + RECT 17.8225 31.7075 17.8875 31.7725 ; + RECT 17.17 32.1325 18.0725 32.1975 ; + RECT 17.17 30.7875 18.0725 30.8525 ; + RECT 18.38 31.8375 18.445 31.9725 ; + RECT 18.165 31.8375 18.23 31.9725 ; + RECT 18.38 30.9225 18.445 31.0575 ; + RECT 18.165 30.9225 18.23 31.0575 ; + RECT 18.145 31.415 18.28 31.48 ; + RECT 18.4125 31.415 18.4775 31.48 ; + RECT 18.0725 32.1325 18.76 32.1975 ; + RECT 18.0725 30.7875 18.76 30.8525 ; + RECT 17.335 31.215 17.47 31.28 ; + RECT 17.55 31.495 17.685 31.56 ; + RECT 18.4125 31.415 18.4775 31.48 ; + RECT 17.17 32.1325 18.76 32.1975 ; + RECT 17.17 30.7875 18.76 30.8525 ; + RECT 17.4775 32.4925 17.5425 32.3575 ; + RECT 17.2625 32.4925 17.3275 32.3575 ; + RECT 17.6925 32.4925 17.7575 32.3575 ; + RECT 17.4775 32.4925 17.5425 32.3575 ; + RECT 17.2625 33.3625 17.3275 33.2275 ; + RECT 17.6925 33.3625 17.7575 33.2275 ; + RECT 17.335 33.115 17.47 33.05 ; + RECT 17.55 32.835 17.685 32.77 ; + RECT 17.8225 32.6225 17.8875 32.5575 ; + RECT 17.17 32.1975 18.0725 32.1325 ; + RECT 17.17 33.5425 18.0725 33.4775 ; + RECT 18.38 32.4925 18.445 32.3575 ; + RECT 18.165 32.4925 18.23 32.3575 ; + RECT 18.38 33.4075 18.445 33.2725 ; + RECT 18.165 33.4075 18.23 33.2725 ; + RECT 18.145 32.915 18.28 32.85 ; + RECT 18.4125 32.915 18.4775 32.85 ; + RECT 18.0725 32.1975 18.76 32.1325 ; + RECT 18.0725 33.5425 18.76 33.4775 ; + RECT 17.335 33.115 17.47 33.05 ; + RECT 17.55 32.835 17.685 32.77 ; + RECT 18.4125 32.915 18.4775 32.85 ; + RECT 17.17 32.1975 18.76 32.1325 ; + RECT 17.17 33.5425 18.76 33.4775 ; + RECT 17.4775 34.5275 17.5425 34.6625 ; + RECT 17.2625 34.5275 17.3275 34.6625 ; + RECT 17.6925 34.5275 17.7575 34.6625 ; + RECT 17.4775 34.5275 17.5425 34.6625 ; + RECT 17.2625 33.6575 17.3275 33.7925 ; + RECT 17.6925 33.6575 17.7575 33.7925 ; + RECT 17.335 33.905 17.47 33.97 ; + RECT 17.55 34.185 17.685 34.25 ; + RECT 17.8225 34.3975 17.8875 34.4625 ; + RECT 17.17 34.8225 18.0725 34.8875 ; + RECT 17.17 33.4775 18.0725 33.5425 ; + RECT 18.38 34.5275 18.445 34.6625 ; + RECT 18.165 34.5275 18.23 34.6625 ; + RECT 18.38 33.6125 18.445 33.7475 ; + RECT 18.165 33.6125 18.23 33.7475 ; + RECT 18.145 34.105 18.28 34.17 ; + RECT 18.4125 34.105 18.4775 34.17 ; + RECT 18.0725 34.8225 18.76 34.8875 ; + RECT 18.0725 33.4775 18.76 33.5425 ; + RECT 17.335 33.905 17.47 33.97 ; + RECT 17.55 34.185 17.685 34.25 ; + RECT 18.4125 34.105 18.4775 34.17 ; + RECT 17.17 34.8225 18.76 34.8875 ; + RECT 17.17 33.4775 18.76 33.5425 ; + RECT 17.4775 35.1825 17.5425 35.0475 ; + RECT 17.2625 35.1825 17.3275 35.0475 ; + RECT 17.6925 35.1825 17.7575 35.0475 ; + RECT 17.4775 35.1825 17.5425 35.0475 ; + RECT 17.2625 36.0525 17.3275 35.9175 ; + RECT 17.6925 36.0525 17.7575 35.9175 ; + RECT 17.335 35.805 17.47 35.74 ; + RECT 17.55 35.525 17.685 35.46 ; + RECT 17.8225 35.3125 17.8875 35.2475 ; + RECT 17.17 34.8875 18.0725 34.8225 ; + RECT 17.17 36.2325 18.0725 36.1675 ; + RECT 18.38 35.1825 18.445 35.0475 ; + RECT 18.165 35.1825 18.23 35.0475 ; + RECT 18.38 36.0975 18.445 35.9625 ; + RECT 18.165 36.0975 18.23 35.9625 ; + RECT 18.145 35.605 18.28 35.54 ; + RECT 18.4125 35.605 18.4775 35.54 ; + RECT 18.0725 34.8875 18.76 34.8225 ; + RECT 18.0725 36.2325 18.76 36.1675 ; + RECT 17.335 35.805 17.47 35.74 ; + RECT 17.55 35.525 17.685 35.46 ; + RECT 18.4125 35.605 18.4775 35.54 ; + RECT 17.17 34.8875 18.76 34.8225 ; + RECT 17.17 36.2325 18.76 36.1675 ; + RECT 17.4775 37.2175 17.5425 37.3525 ; + RECT 17.2625 37.2175 17.3275 37.3525 ; + RECT 17.6925 37.2175 17.7575 37.3525 ; + RECT 17.4775 37.2175 17.5425 37.3525 ; + RECT 17.2625 36.3475 17.3275 36.4825 ; + RECT 17.6925 36.3475 17.7575 36.4825 ; + RECT 17.335 36.595 17.47 36.66 ; + RECT 17.55 36.875 17.685 36.94 ; + RECT 17.8225 37.0875 17.8875 37.1525 ; + RECT 17.17 37.5125 18.0725 37.5775 ; + RECT 17.17 36.1675 18.0725 36.2325 ; + RECT 18.38 37.2175 18.445 37.3525 ; + RECT 18.165 37.2175 18.23 37.3525 ; + RECT 18.38 36.3025 18.445 36.4375 ; + RECT 18.165 36.3025 18.23 36.4375 ; + RECT 18.145 36.795 18.28 36.86 ; + RECT 18.4125 36.795 18.4775 36.86 ; + RECT 18.0725 37.5125 18.76 37.5775 ; + RECT 18.0725 36.1675 18.76 36.2325 ; + RECT 17.335 36.595 17.47 36.66 ; + RECT 17.55 36.875 17.685 36.94 ; + RECT 18.4125 36.795 18.4775 36.86 ; + RECT 17.17 37.5125 18.76 37.5775 ; + RECT 17.17 36.1675 18.76 36.2325 ; + RECT 17.4775 37.8725 17.5425 37.7375 ; + RECT 17.2625 37.8725 17.3275 37.7375 ; + RECT 17.6925 37.8725 17.7575 37.7375 ; + RECT 17.4775 37.8725 17.5425 37.7375 ; + RECT 17.2625 38.7425 17.3275 38.6075 ; + RECT 17.6925 38.7425 17.7575 38.6075 ; + RECT 17.335 38.495 17.47 38.43 ; + RECT 17.55 38.215 17.685 38.15 ; + RECT 17.8225 38.0025 17.8875 37.9375 ; + RECT 17.17 37.5775 18.0725 37.5125 ; + RECT 17.17 38.9225 18.0725 38.8575 ; + RECT 18.38 37.8725 18.445 37.7375 ; + RECT 18.165 37.8725 18.23 37.7375 ; + RECT 18.38 38.7875 18.445 38.6525 ; + RECT 18.165 38.7875 18.23 38.6525 ; + RECT 18.145 38.295 18.28 38.23 ; + RECT 18.4125 38.295 18.4775 38.23 ; + RECT 18.0725 37.5775 18.76 37.5125 ; + RECT 18.0725 38.9225 18.76 38.8575 ; + RECT 17.335 38.495 17.47 38.43 ; + RECT 17.55 38.215 17.685 38.15 ; + RECT 18.4125 38.295 18.4775 38.23 ; + RECT 17.17 37.5775 18.76 37.5125 ; + RECT 17.17 38.9225 18.76 38.8575 ; + RECT 17.4775 39.9075 17.5425 40.0425 ; + RECT 17.2625 39.9075 17.3275 40.0425 ; + RECT 17.6925 39.9075 17.7575 40.0425 ; + RECT 17.4775 39.9075 17.5425 40.0425 ; + RECT 17.2625 39.0375 17.3275 39.1725 ; + RECT 17.6925 39.0375 17.7575 39.1725 ; + RECT 17.335 39.285 17.47 39.35 ; + RECT 17.55 39.565 17.685 39.63 ; + RECT 17.8225 39.7775 17.8875 39.8425 ; + RECT 17.17 40.2025 18.0725 40.2675 ; + RECT 17.17 38.8575 18.0725 38.9225 ; + RECT 18.38 39.9075 18.445 40.0425 ; + RECT 18.165 39.9075 18.23 40.0425 ; + RECT 18.38 38.9925 18.445 39.1275 ; + RECT 18.165 38.9925 18.23 39.1275 ; + RECT 18.145 39.485 18.28 39.55 ; + RECT 18.4125 39.485 18.4775 39.55 ; + RECT 18.0725 40.2025 18.76 40.2675 ; + RECT 18.0725 38.8575 18.76 38.9225 ; + RECT 17.335 39.285 17.47 39.35 ; + RECT 17.55 39.565 17.685 39.63 ; + RECT 18.4125 39.485 18.4775 39.55 ; + RECT 17.17 40.2025 18.76 40.2675 ; + RECT 17.17 38.8575 18.76 38.9225 ; + RECT 17.4775 40.5625 17.5425 40.4275 ; + RECT 17.2625 40.5625 17.3275 40.4275 ; + RECT 17.6925 40.5625 17.7575 40.4275 ; + RECT 17.4775 40.5625 17.5425 40.4275 ; + RECT 17.2625 41.4325 17.3275 41.2975 ; + RECT 17.6925 41.4325 17.7575 41.2975 ; + RECT 17.335 41.185 17.47 41.12 ; + RECT 17.55 40.905 17.685 40.84 ; + RECT 17.8225 40.6925 17.8875 40.6275 ; + RECT 17.17 40.2675 18.0725 40.2025 ; + RECT 17.17 41.6125 18.0725 41.5475 ; + RECT 18.38 40.5625 18.445 40.4275 ; + RECT 18.165 40.5625 18.23 40.4275 ; + RECT 18.38 41.4775 18.445 41.3425 ; + RECT 18.165 41.4775 18.23 41.3425 ; + RECT 18.145 40.985 18.28 40.92 ; + RECT 18.4125 40.985 18.4775 40.92 ; + RECT 18.0725 40.2675 18.76 40.2025 ; + RECT 18.0725 41.6125 18.76 41.5475 ; + RECT 17.335 41.185 17.47 41.12 ; + RECT 17.55 40.905 17.685 40.84 ; + RECT 18.4125 40.985 18.4775 40.92 ; + RECT 17.17 40.2675 18.76 40.2025 ; + RECT 17.17 41.6125 18.76 41.5475 ; + RECT 17.4775 42.5975 17.5425 42.7325 ; + RECT 17.2625 42.5975 17.3275 42.7325 ; + RECT 17.6925 42.5975 17.7575 42.7325 ; + RECT 17.4775 42.5975 17.5425 42.7325 ; + RECT 17.2625 41.7275 17.3275 41.8625 ; + RECT 17.6925 41.7275 17.7575 41.8625 ; + RECT 17.335 41.975 17.47 42.04 ; + RECT 17.55 42.255 17.685 42.32 ; + RECT 17.8225 42.4675 17.8875 42.5325 ; + RECT 17.17 42.8925 18.0725 42.9575 ; + RECT 17.17 41.5475 18.0725 41.6125 ; + RECT 18.38 42.5975 18.445 42.7325 ; + RECT 18.165 42.5975 18.23 42.7325 ; + RECT 18.38 41.6825 18.445 41.8175 ; + RECT 18.165 41.6825 18.23 41.8175 ; + RECT 18.145 42.175 18.28 42.24 ; + RECT 18.4125 42.175 18.4775 42.24 ; + RECT 18.0725 42.8925 18.76 42.9575 ; + RECT 18.0725 41.5475 18.76 41.6125 ; + RECT 17.335 41.975 17.47 42.04 ; + RECT 17.55 42.255 17.685 42.32 ; + RECT 18.4125 42.175 18.4775 42.24 ; + RECT 17.17 42.8925 18.76 42.9575 ; + RECT 17.17 41.5475 18.76 41.6125 ; + RECT 17.4775 43.2525 17.5425 43.1175 ; + RECT 17.2625 43.2525 17.3275 43.1175 ; + RECT 17.6925 43.2525 17.7575 43.1175 ; + RECT 17.4775 43.2525 17.5425 43.1175 ; + RECT 17.2625 44.1225 17.3275 43.9875 ; + RECT 17.6925 44.1225 17.7575 43.9875 ; + RECT 17.335 43.875 17.47 43.81 ; + RECT 17.55 43.595 17.685 43.53 ; + RECT 17.8225 43.3825 17.8875 43.3175 ; + RECT 17.17 42.9575 18.0725 42.8925 ; + RECT 17.17 44.3025 18.0725 44.2375 ; + RECT 18.38 43.2525 18.445 43.1175 ; + RECT 18.165 43.2525 18.23 43.1175 ; + RECT 18.38 44.1675 18.445 44.0325 ; + RECT 18.165 44.1675 18.23 44.0325 ; + RECT 18.145 43.675 18.28 43.61 ; + RECT 18.4125 43.675 18.4775 43.61 ; + RECT 18.0725 42.9575 18.76 42.8925 ; + RECT 18.0725 44.3025 18.76 44.2375 ; + RECT 17.335 43.875 17.47 43.81 ; + RECT 17.55 43.595 17.685 43.53 ; + RECT 18.4125 43.675 18.4775 43.61 ; + RECT 17.17 42.9575 18.76 42.8925 ; + RECT 17.17 44.3025 18.76 44.2375 ; + RECT 17.335 23.145 17.47 23.21 ; + RECT 17.335 24.98 17.47 25.045 ; + RECT 17.335 25.835 17.47 25.9 ; + RECT 17.335 27.67 17.47 27.735 ; + RECT 17.335 28.525 17.47 28.59 ; + RECT 17.335 30.36 17.47 30.425 ; + RECT 17.335 31.215 17.47 31.28 ; + RECT 17.335 33.05 17.47 33.115 ; + RECT 17.335 33.905 17.47 33.97 ; + RECT 17.335 35.74 17.47 35.805 ; + RECT 17.335 36.595 17.47 36.66 ; + RECT 17.335 38.43 17.47 38.495 ; + RECT 17.335 39.285 17.47 39.35 ; + RECT 17.335 41.12 17.47 41.185 ; + RECT 17.335 41.975 17.47 42.04 ; + RECT 17.335 43.81 17.47 43.875 ; + RECT 18.4125 23.345 18.4775 23.41 ; + RECT 18.4125 24.78 18.4775 24.845 ; + RECT 18.4125 26.035 18.4775 26.1 ; + RECT 18.4125 27.47 18.4775 27.535 ; + RECT 18.4125 28.725 18.4775 28.79 ; + RECT 18.4125 30.16 18.4775 30.225 ; + RECT 18.4125 31.415 18.4775 31.48 ; + RECT 18.4125 32.85 18.4775 32.915 ; + RECT 18.4125 34.105 18.4775 34.17 ; + RECT 18.4125 35.54 18.4775 35.605 ; + RECT 18.4125 36.795 18.4775 36.86 ; + RECT 18.4125 38.23 18.4775 38.295 ; + RECT 18.4125 39.485 18.4775 39.55 ; + RECT 18.4125 40.92 18.4775 40.985 ; + RECT 18.4125 42.175 18.4775 42.24 ; + RECT 18.4125 43.61 18.4775 43.675 ; + RECT 18.29 21.7325 18.355 21.5975 ; + RECT 18.075 21.7325 18.14 21.5975 ; + RECT 18.29 22.6475 18.355 22.5125 ; + RECT 18.075 22.6475 18.14 22.5125 ; + RECT 18.055 22.155 18.19 22.09 ; + RECT 18.3225 22.155 18.3875 22.09 ; + RECT 17.9825 21.4375 18.67 21.3725 ; + RECT 17.9825 22.7825 18.67 22.7175 ; + RECT 18.9775 21.7325 19.0425 21.5975 ; + RECT 18.7625 21.7325 18.8275 21.5975 ; + RECT 18.9775 22.6475 19.0425 22.5125 ; + RECT 18.7625 22.6475 18.8275 22.5125 ; + RECT 18.7425 22.155 18.8775 22.09 ; + RECT 19.01 22.155 19.075 22.09 ; + RECT 18.67 21.4375 19.135 21.3725 ; + RECT 18.67 22.7825 19.135 22.7175 ; + RECT 18.055 22.155 18.19 22.09 ; + RECT 19.01 22.155 19.075 22.09 ; + RECT 17.9825 21.4375 19.135 21.3725 ; + RECT 17.9825 22.7825 19.135 22.7175 ; + RECT 18.4125 23.345 18.4775 23.41 ; + RECT 18.4125 24.78 18.4775 24.845 ; + RECT 18.4125 26.035 18.4775 26.1 ; + RECT 18.4125 27.47 18.4775 27.535 ; + RECT 18.4125 28.725 18.4775 28.79 ; + RECT 18.4125 30.16 18.4775 30.225 ; + RECT 18.4125 31.415 18.4775 31.48 ; + RECT 18.4125 32.85 18.4775 32.915 ; + RECT 18.4125 34.105 18.4775 34.17 ; + RECT 18.4125 35.54 18.4775 35.605 ; + RECT 18.4125 36.795 18.4775 36.86 ; + RECT 18.4125 38.23 18.4775 38.295 ; + RECT 18.4125 39.485 18.4775 39.55 ; + RECT 18.4125 40.92 18.4775 40.985 ; + RECT 18.4125 42.175 18.4775 42.24 ; + RECT 18.4125 43.61 18.4775 43.675 ; + RECT 19.01 22.09 19.075 22.155 ; + RECT 0.0 -0.065 2.86 0.065 ; + POLYGON 1.8475 1.4425 1.8475 2.2675 2.3925 2.2675 2.3925 2.2025 1.9125 2.2025 1.9125 1.8575 2.1075 1.8575 2.1075 1.4425 1.8475 1.4425 ; + RECT 2.6325 1.0475 2.71 1.1825 ; + POLYGON 0.4175 0.335 0.4175 0.975 0.7175 0.975 0.7175 1.8625 0.6475 1.8625 0.6475 1.9275 0.7825 1.9275 0.7825 1.7975 1.3725 1.7975 1.3725 2.1475 1.4375 2.1475 1.4375 1.6575 1.7175 1.6575 1.7175 2.0725 1.7825 2.0725 1.7825 1.5925 1.3725 1.5925 1.3725 1.7325 0.7825 1.7325 0.7825 0.91 0.4825 0.91 0.4825 0.4 1.3725 0.4 1.3725 0.7925 1.4375 0.7925 1.4375 0.335 0.4175 0.335 ; + RECT 2.0475 0.5875 2.1125 0.8625 ; + POLYGON 0.5175 1.3825 0.5175 2.0575 1.1625 2.0575 1.1625 1.9225 1.0975 1.9225 1.0975 1.9925 0.5825 1.9925 0.5825 1.7975 0.6075 1.7975 0.6075 1.3825 0.5175 1.3825 ; + POLYGON 2.6425 0.2175 2.6425 0.9175 2.5375 0.9175 2.5375 0.9825 2.6425 0.9825 2.6425 1.6475 2.3125 1.6475 2.3125 1.7125 2.6425 1.7125 2.6425 2.2375 2.7075 2.2375 2.7075 0.2175 2.6425 0.2175 ; + POLYGON 1.7775 0.9275 1.7775 1.1425 1.5475 1.1425 1.5475 1.015 1.4125 1.015 1.4125 1.4625 1.1725 1.4625 1.1725 1.6675 1.3075 1.6675 1.3075 1.5275 1.4775 1.5275 1.4775 1.2075 1.9725 1.2075 1.9725 0.9925 2.1875 0.9925 2.1875 1.1925 2.3225 1.1925 2.3225 1.1275 2.2525 1.1275 2.2525 0.9275 1.7775 0.9275 ; + POLYGON 0.1675 1.2675 0.1675 2.405 0.1 2.405 0.1 2.535 2.86 2.535 2.86 2.405 2.5225 2.405 2.5225 1.9075 2.4575 1.9075 2.4575 2.405 1.6225 2.405 1.6225 1.7225 1.5575 1.7225 1.5575 2.405 1.0575 2.405 1.0575 2.2525 0.9225 2.2525 0.9225 2.405 0.2325 2.405 0.2325 1.2675 0.1675 1.2675 ; + RECT 2.6425 0.915 2.7075 1.1275 ; + POLYGON 2.1075 0.2275 2.1075 0.5025 2.2375 0.5025 2.2375 0.7625 2.3025 0.7625 2.3025 0.4375 2.1725 0.4375 2.1725 0.2275 2.1075 0.2275 ; + RECT 0.245 1.0375 0.3225 1.1725 ; + RECT 1.7775 0.9275 1.9725 1.2075 ; + POLYGON 0.3875 1.1175 0.3875 2.1875 1.2925 2.1875 1.2925 1.8625 1.2275 1.8625 1.2275 2.1225 0.4525 2.1225 0.4525 1.1825 0.5375 1.1825 0.5375 1.1175 0.3875 1.1175 ; + POLYGON 0.1 -0.065 0.1 0.065 0.1675 0.065 0.1675 0.845 0.2325 0.845 0.2325 0.065 0.9175 0.065 0.9175 0.235 1.0525 0.235 1.0525 0.065 1.5575 0.065 1.5575 0.7925 1.6225 0.7925 1.6225 0.065 1.9225 0.065 1.9225 0.4675 1.9875 0.4675 1.9875 0.065 2.4075 0.065 2.4075 0.9875 2.4725 0.9875 2.4725 0.065 2.76 0.065 2.76 -0.065 0.1 -0.065 ; + POLYGON 1.2175 0.685 1.2175 0.95 0.9425 0.95 0.9425 1.015 1.2175 1.015 1.2175 1.3975 1.2825 1.3975 1.2825 0.95 1.6125 0.95 1.6125 1.0775 1.6775 1.0775 1.6775 0.885 1.2825 0.885 1.2825 0.685 1.2175 0.685 ; + POLYGON 2.0525 1.0575 2.0525 1.3225 2.5025 1.3225 2.5025 1.5175 2.3025 1.5175 2.3025 1.5825 2.5675 1.5825 2.5675 1.0575 2.4025 1.0575 2.4025 1.1925 2.5025 1.1925 2.5025 1.2575 2.1175 1.2575 2.1175 1.0575 2.0525 1.0575 ; + RECT 2.3275 1.7775 2.3925 2.1275 ; + RECT 0.0 2.405 2.76 2.535 ; + POLYGON 0.5475 0.465 0.5475 0.845 0.6125 0.845 0.6125 0.53 1.2125 0.53 1.2125 0.465 0.5475 0.465 ; + POLYGON 2.1725 1.3875 2.1725 2.1375 2.2625 2.1375 2.2625 1.8625 2.2375 1.8625 2.2375 1.4525 2.4375 1.4525 2.4375 1.3875 2.1725 1.3875 ; + RECT 3.4475 2.0125 3.5125 2.1475 ; + RECT 3.2325 2.0125 3.2975 2.1475 ; + RECT 3.4475 0.1475 3.5125 0.2825 ; + RECT 3.2325 0.1475 3.2975 0.2825 ; + RECT 3.2125 1.115 3.3475 1.18 ; + RECT 3.48 1.115 3.545 1.18 ; + RECT 3.14 2.4425 3.8275 2.5075 ; + RECT 3.14 -0.0325 3.8275 0.0325 ; + RECT 4.165 2.0125 4.23 2.1475 ; + RECT 3.92 2.0125 3.985 2.1475 ; + RECT 4.41 2.0125 4.475 2.1475 ; + RECT 4.165 0.1475 4.23 0.2825 ; + RECT 3.92 0.1475 3.985 0.2825 ; + RECT 4.41 0.1475 4.475 0.2825 ; + RECT 3.9 1.115 4.035 1.18 ; + RECT 4.1975 1.115 4.2625 1.18 ; + RECT 3.8275 2.4425 4.79 2.5075 ; + RECT 3.8275 -0.0325 4.79 0.0325 ; + RECT 0.0 2.405 4.79 2.535 ; + RECT 0.0 -0.065 4.79 0.065 ; + RECT 0.0 5.015 2.86 4.885 ; + POLYGON 1.8475 3.5075 1.8475 2.6825 2.3925 2.6825 2.3925 2.7475 1.9125 2.7475 1.9125 3.0925 2.1075 3.0925 2.1075 3.5075 1.8475 3.5075 ; + RECT 2.6325 3.9025 2.71 3.7675 ; + POLYGON 0.4175 4.615 0.4175 3.975 0.7175 3.975 0.7175 3.0875 0.6475 3.0875 0.6475 3.0225 0.7825 3.0225 0.7825 3.1525 1.3725 3.1525 1.3725 2.8025 1.4375 2.8025 1.4375 3.2925 1.7175 3.2925 1.7175 2.8775 1.7825 2.8775 1.7825 3.3575 1.3725 3.3575 1.3725 3.2175 0.7825 3.2175 0.7825 4.04 0.4825 4.04 0.4825 4.55 1.3725 4.55 1.3725 4.1575 1.4375 4.1575 1.4375 4.615 0.4175 4.615 ; + RECT 2.0475 4.3625 2.1125 4.0875 ; + POLYGON 0.5175 3.5675 0.5175 2.8925 1.1625 2.8925 1.1625 3.0275 1.0975 3.0275 1.0975 2.9575 0.5825 2.9575 0.5825 3.1525 0.6075 3.1525 0.6075 3.5675 0.5175 3.5675 ; + POLYGON 2.6425 4.7325 2.6425 4.0325 2.5375 4.0325 2.5375 3.9675 2.6425 3.9675 2.6425 3.3025 2.3125 3.3025 2.3125 3.2375 2.6425 3.2375 2.6425 2.7125 2.7075 2.7125 2.7075 4.7325 2.6425 4.7325 ; + POLYGON 1.7775 4.0225 1.7775 3.8075 1.5475 3.8075 1.5475 3.935 1.4125 3.935 1.4125 3.4875 1.1725 3.4875 1.1725 3.2825 1.3075 3.2825 1.3075 3.4225 1.4775 3.4225 1.4775 3.7425 1.9725 3.7425 1.9725 3.9575 2.1875 3.9575 2.1875 3.7575 2.3225 3.7575 2.3225 3.8225 2.2525 3.8225 2.2525 4.0225 1.7775 4.0225 ; + POLYGON 0.1675 3.6825 0.1675 2.545 0.1 2.545 0.1 2.415 2.86 2.415 2.86 2.545 2.5225 2.545 2.5225 3.0425 2.4575 3.0425 2.4575 2.545 1.6225 2.545 1.6225 3.2275 1.5575 3.2275 1.5575 2.545 1.0575 2.545 1.0575 2.6975 0.9225 2.6975 0.9225 2.545 0.2325 2.545 0.2325 3.6825 0.1675 3.6825 ; + RECT 2.6425 4.035 2.7075 3.8225 ; + POLYGON 2.1075 4.7225 2.1075 4.4475 2.2375 4.4475 2.2375 4.1875 2.3025 4.1875 2.3025 4.5125 2.1725 4.5125 2.1725 4.7225 2.1075 4.7225 ; + RECT 0.245 3.9125 0.3225 3.7775 ; + RECT 1.7775 4.0225 1.9725 3.7425 ; + POLYGON 0.3875 3.8325 0.3875 2.7625 1.2925 2.7625 1.2925 3.0875 1.2275 3.0875 1.2275 2.8275 0.4525 2.8275 0.4525 3.7675 0.5375 3.7675 0.5375 3.8325 0.3875 3.8325 ; + POLYGON 0.1 5.015 0.1 4.885 0.1675 4.885 0.1675 4.105 0.2325 4.105 0.2325 4.885 0.9175 4.885 0.9175 4.715 1.0525 4.715 1.0525 4.885 1.5575 4.885 1.5575 4.1575 1.6225 4.1575 1.6225 4.885 1.9225 4.885 1.9225 4.4825 1.9875 4.4825 1.9875 4.885 2.4075 4.885 2.4075 3.9625 2.4725 3.9625 2.4725 4.885 2.76 4.885 2.76 5.015 0.1 5.015 ; + POLYGON 1.2175 4.265 1.2175 4.0 0.9425 4.0 0.9425 3.935 1.2175 3.935 1.2175 3.5525 1.2825 3.5525 1.2825 4.0 1.6125 4.0 1.6125 3.8725 1.6775 3.8725 1.6775 4.065 1.2825 4.065 1.2825 4.265 1.2175 4.265 ; + POLYGON 2.0525 3.8925 2.0525 3.6275 2.5025 3.6275 2.5025 3.4325 2.3025 3.4325 2.3025 3.3675 2.5675 3.3675 2.5675 3.8925 2.4025 3.8925 2.4025 3.7575 2.5025 3.7575 2.5025 3.6925 2.1175 3.6925 2.1175 3.8925 2.0525 3.8925 ; + RECT 2.3275 3.1725 2.3925 2.8225 ; + RECT 0.0 2.545 2.76 2.415 ; + POLYGON 0.5475 4.485 0.5475 4.105 0.6125 4.105 0.6125 4.42 1.2125 4.42 1.2125 4.485 0.5475 4.485 ; + POLYGON 2.1725 3.5625 2.1725 2.8125 2.2625 2.8125 2.2625 3.0875 2.2375 3.0875 2.2375 3.4975 2.4375 3.4975 2.4375 3.5625 2.1725 3.5625 ; + RECT 3.4475 2.9375 3.5125 2.8025 ; + RECT 3.2325 2.9375 3.2975 2.8025 ; + RECT 3.4475 4.8025 3.5125 4.6675 ; + RECT 3.2325 4.8025 3.2975 4.6675 ; + RECT 3.2125 3.835 3.3475 3.77 ; + RECT 3.48 3.835 3.545 3.77 ; + RECT 3.14 2.5075 3.8275 2.4425 ; + RECT 3.14 4.9825 3.8275 4.9175 ; + RECT 4.165 2.9375 4.23 2.8025 ; + RECT 3.92 2.9375 3.985 2.8025 ; + RECT 4.41 2.9375 4.475 2.8025 ; + RECT 4.165 4.8025 4.23 4.6675 ; + RECT 3.92 4.8025 3.985 4.6675 ; + RECT 4.41 4.8025 4.475 4.6675 ; + RECT 3.9 3.835 4.035 3.77 ; + RECT 4.1975 3.835 4.2625 3.77 ; + RECT 3.8275 2.5075 4.79 2.4425 ; + RECT 3.8275 4.9825 4.79 4.9175 ; + RECT 0.0 2.545 4.79 2.415 ; + RECT 0.0 5.015 4.79 4.885 ; + RECT 6.3575 2.1475 6.4225 2.2825 ; + RECT 6.1425 2.1475 6.2075 2.2825 ; + RECT 6.3575 0.1025 6.4225 0.2375 ; + RECT 6.1425 0.1025 6.2075 0.2375 ; + RECT 6.1225 1.16 6.2575 1.225 ; + RECT 6.39 1.16 6.455 1.225 ; + RECT 6.05 2.4425 6.7375 2.5075 ; + RECT 6.05 -0.0325 6.7375 0.0325 ; + RECT 7.045 2.0125 7.11 2.1475 ; + RECT 6.83 2.0125 6.895 2.1475 ; + RECT 7.045 0.1475 7.11 0.2825 ; + RECT 6.83 0.1475 6.895 0.2825 ; + RECT 6.81 1.115 6.945 1.18 ; + RECT 7.0775 1.115 7.1425 1.18 ; + RECT 6.7375 2.4425 7.2025 2.5075 ; + RECT 6.7375 -0.0325 7.2025 0.0325 ; + RECT 7.54 1.945 7.605 2.08 ; + RECT 7.785 1.945 7.85 2.08 ; + RECT 7.295 1.945 7.36 2.08 ; + RECT 7.54 0.17 7.605 0.305 ; + RECT 7.785 0.17 7.85 0.305 ; + RECT 7.295 0.17 7.36 0.305 ; + RECT 7.275 1.0925 7.41 1.1575 ; + RECT 7.5725 1.0925 7.6375 1.1575 ; + RECT 7.2025 2.4425 7.9425 2.5075 ; + RECT 7.2025 -0.0325 7.9425 0.0325 ; + RECT 8.28 1.7475 9.415 1.8125 ; + RECT 8.555 1.8775 8.62 2.0125 ; + RECT 8.035 1.8775 8.1 2.0125 ; + RECT 9.105 1.8775 9.17 2.0125 ; + RECT 8.28 0.3925 9.415 0.4575 ; + RECT 8.035 0.1925 8.1 0.3275 ; + RECT 9.105 0.1925 9.17 0.3275 ; + RECT 8.555 0.1925 8.62 0.3275 ; + RECT 8.015 1.07 8.15 1.135 ; + RECT 8.8475 1.07 8.9125 1.135 ; + RECT 7.9425 2.4425 9.5275 2.5075 ; + RECT 7.9425 -0.0325 9.5275 0.0325 ; + RECT 6.1225 1.16 6.2575 1.225 ; + RECT 8.8475 1.07 8.9125 1.135 ; + RECT 6.05 2.4425 9.5275 2.5075 ; + RECT 6.05 -0.0325 9.5275 0.0325 ; + RECT 6.3575 2.8025 6.4225 2.6675 ; + RECT 6.1425 2.8025 6.2075 2.6675 ; + RECT 6.3575 4.8475 6.4225 4.7125 ; + RECT 6.1425 4.8475 6.2075 4.7125 ; + RECT 6.1225 3.79 6.2575 3.725 ; + RECT 6.39 3.79 6.455 3.725 ; + RECT 6.05 2.5075 6.7375 2.4425 ; + RECT 6.05 4.9825 6.7375 4.9175 ; + RECT 7.045 2.8025 7.11 2.6675 ; + RECT 6.83 2.8025 6.895 2.6675 ; + RECT 7.26 2.8025 7.325 2.6675 ; + RECT 7.045 2.8025 7.11 2.6675 ; + RECT 6.83 4.8025 6.895 4.6675 ; + RECT 7.26 4.8025 7.325 4.6675 ; + RECT 6.9025 4.555 7.0375 4.49 ; + RECT 7.1175 4.275 7.2525 4.21 ; + RECT 7.39 2.9325 7.455 2.8675 ; + RECT 6.7375 2.5075 7.4875 2.4425 ; + RECT 6.7375 4.9825 7.4875 4.9175 ; + RECT 7.825 3.2025 8.44 3.1375 ; + RECT 8.1 3.0725 8.165 2.9375 ; + RECT 7.58 3.0725 7.645 2.9375 ; + RECT 8.62 3.0725 8.685 2.9375 ; + RECT 7.825 4.5575 8.44 4.4925 ; + RECT 7.58 4.7575 7.645 4.6225 ; + RECT 8.62 4.7575 8.685 4.6225 ; + RECT 8.1 4.7575 8.165 4.6225 ; + RECT 7.56 3.88 7.695 3.815 ; + RECT 8.1325 3.88 8.1975 3.815 ; + RECT 7.4875 2.5075 9.0 2.4425 ; + RECT 7.4875 4.9825 9.0 4.9175 ; + RECT 7.56 3.88 7.695 3.815 ; + RECT 8.1325 3.88 8.1975 3.815 ; + RECT 7.4875 2.5075 9.0 2.4425 ; + RECT 7.4875 4.9825 9.0 4.9175 ; + RECT 6.9025 4.555 7.0375 4.49 ; + RECT 7.1175 4.275 7.2525 4.21 ; + RECT 8.1325 3.88 8.1975 3.815 ; + RECT 6.7375 2.5075 9.0 2.4425 ; + RECT 6.7375 4.9825 9.0 4.9175 ; + RECT 6.3575 7.0975 6.4225 7.2325 ; + RECT 6.1425 7.0975 6.2075 7.2325 ; + RECT 6.5725 7.0975 6.6375 7.2325 ; + RECT 6.3575 7.0975 6.4225 7.2325 ; + RECT 6.1425 5.0975 6.2075 5.2325 ; + RECT 6.5725 5.0975 6.6375 5.2325 ; + RECT 6.215 5.345 6.35 5.41 ; + RECT 6.43 5.625 6.565 5.69 ; + RECT 6.7025 6.9675 6.7675 7.0325 ; + RECT 6.05 7.3925 6.8 7.4575 ; + RECT 6.05 4.9175 6.8 4.9825 ; + RECT 7.1375 6.6975 7.7525 6.7625 ; + RECT 7.4125 6.8275 7.4775 6.9625 ; + RECT 6.8925 6.8275 6.9575 6.9625 ; + RECT 7.9325 6.8275 7.9975 6.9625 ; + RECT 7.1375 5.3425 7.7525 5.4075 ; + RECT 6.8925 5.1425 6.9575 5.2775 ; + RECT 7.9325 5.1425 7.9975 5.2775 ; + RECT 7.4125 5.1425 7.4775 5.2775 ; + RECT 6.8725 6.02 7.0075 6.085 ; + RECT 7.445 6.02 7.51 6.085 ; + RECT 6.8 7.3925 8.3125 7.4575 ; + RECT 6.8 4.9175 8.3125 4.9825 ; + RECT 6.8725 6.02 7.0075 6.085 ; + RECT 7.445 6.02 7.51 6.085 ; + RECT 6.8 7.3925 8.3125 7.4575 ; + RECT 6.8 4.9175 8.3125 4.9825 ; + RECT 6.215 5.345 6.35 5.41 ; + RECT 6.43 5.625 6.565 5.69 ; + RECT 7.445 6.02 7.51 6.085 ; + RECT 6.05 7.3925 8.3125 7.4575 ; + RECT 6.05 4.9175 8.3125 4.9825 ; + RECT 6.3575 7.7525 6.4225 7.6175 ; + RECT 6.1425 7.7525 6.2075 7.6175 ; + RECT 6.3575 9.7975 6.4225 9.6625 ; + RECT 6.1425 9.7975 6.2075 9.6625 ; + RECT 6.1225 8.74 6.2575 8.675 ; + RECT 6.39 8.74 6.455 8.675 ; + RECT 6.05 7.4575 6.7375 7.3925 ; + RECT 6.05 9.9325 6.7375 9.8675 ; + RECT 7.045 7.7525 7.11 7.6175 ; + RECT 6.83 7.7525 6.895 7.6175 ; + RECT 7.045 9.7975 7.11 9.6625 ; + RECT 6.83 9.7975 6.895 9.6625 ; + RECT 6.81 8.74 6.945 8.675 ; + RECT 7.0775 8.74 7.1425 8.675 ; + RECT 6.7375 7.4575 7.2025 7.3925 ; + RECT 6.7375 9.9325 7.2025 9.8675 ; + RECT 7.51 7.8875 7.575 7.7525 ; + RECT 7.295 7.8875 7.36 7.7525 ; + RECT 7.51 9.7525 7.575 9.6175 ; + RECT 7.295 9.7525 7.36 9.6175 ; + RECT 7.275 8.785 7.41 8.72 ; + RECT 7.5425 8.785 7.6075 8.72 ; + RECT 7.2025 7.4575 7.6675 7.3925 ; + RECT 7.2025 9.9325 7.6675 9.8675 ; + RECT 8.005 7.955 8.07 7.82 ; + RECT 8.25 7.955 8.315 7.82 ; + RECT 7.76 7.955 7.825 7.82 ; + RECT 8.005 9.73 8.07 9.595 ; + RECT 8.25 9.73 8.315 9.595 ; + RECT 7.76 9.73 7.825 9.595 ; + RECT 7.74 8.8075 7.875 8.7425 ; + RECT 8.0375 8.8075 8.1025 8.7425 ; + RECT 7.6675 7.4575 8.4075 7.3925 ; + RECT 7.6675 9.9325 8.4075 9.8675 ; + RECT 6.1225 8.74 6.2575 8.675 ; + RECT 8.0375 8.8075 8.1025 8.7425 ; + RECT 6.05 7.4575 8.4075 7.3925 ; + RECT 6.05 9.9325 8.4075 9.8675 ; + RECT 6.3575 16.9975 6.4225 17.1325 ; + RECT 6.1425 16.9975 6.2075 17.1325 ; + RECT 6.3575 14.9525 6.4225 15.0875 ; + RECT 6.1425 14.9525 6.2075 15.0875 ; + RECT 6.1225 16.01 6.2575 16.075 ; + RECT 6.39 16.01 6.455 16.075 ; + RECT 6.05 17.2925 6.7375 17.3575 ; + RECT 6.05 14.8175 6.7375 14.8825 ; + RECT 6.3575 12.0475 6.4225 12.1825 ; + RECT 6.1425 12.0475 6.2075 12.1825 ; + RECT 6.5725 12.0475 6.6375 12.1825 ; + RECT 6.3575 12.0475 6.4225 12.1825 ; + RECT 6.7875 12.0475 6.8525 12.1825 ; + RECT 6.5725 12.0475 6.6375 12.1825 ; + RECT 6.1425 10.0475 6.2075 10.1825 ; + RECT 6.7875 10.0475 6.8525 10.1825 ; + RECT 6.1475 10.295 6.2825 10.36 ; + RECT 6.43 10.435 6.565 10.5 ; + RECT 6.7125 10.575 6.8475 10.64 ; + RECT 6.9175 11.9175 6.9825 11.9825 ; + RECT 6.05 12.3425 7.015 12.4075 ; + RECT 6.05 9.8675 7.015 9.9325 ; + RECT 7.3525 11.6025 7.9375 11.6675 ; + RECT 7.6275 11.7325 7.6925 11.8675 ; + RECT 7.1075 11.7325 7.1725 11.8675 ; + RECT 7.3525 10.3075 7.9375 10.3725 ; + RECT 7.6275 10.1075 7.6925 10.2425 ; + RECT 7.1075 10.1075 7.1725 10.2425 ; + RECT 7.0875 10.955 7.2225 11.02 ; + RECT 7.645 10.955 7.71 11.02 ; + RECT 7.015 12.3425 8.2525 12.4075 ; + RECT 7.015 9.8675 8.2525 9.9325 ; + RECT 7.0875 10.955 7.2225 11.02 ; + RECT 7.645 10.955 7.71 11.02 ; + RECT 7.015 12.3425 8.2525 12.4075 ; + RECT 7.015 9.8675 8.2525 9.9325 ; + RECT 6.1475 10.295 6.2825 10.36 ; + RECT 6.43 10.435 6.565 10.5 ; + RECT 6.7125 10.575 6.8475 10.64 ; + RECT 7.645 10.955 7.71 11.02 ; + RECT 6.05 12.3425 8.2525 12.4075 ; + RECT 6.05 9.8675 8.2525 9.9325 ; + RECT 6.3575 17.6525 6.4225 17.5175 ; + RECT 6.1425 17.6525 6.2075 17.5175 ; + RECT 6.5725 17.6525 6.6375 17.5175 ; + RECT 6.3575 17.6525 6.4225 17.5175 ; + RECT 6.7875 17.6525 6.8525 17.5175 ; + RECT 6.5725 17.6525 6.6375 17.5175 ; + RECT 6.1425 19.6525 6.2075 19.5175 ; + RECT 6.7875 19.6525 6.8525 19.5175 ; + RECT 6.1475 19.405 6.2825 19.34 ; + RECT 6.43 19.265 6.565 19.2 ; + RECT 6.7125 19.125 6.8475 19.06 ; + RECT 6.9175 17.7825 6.9825 17.7175 ; + RECT 6.05 17.3575 7.015 17.2925 ; + RECT 6.05 19.8325 7.015 19.7675 ; + RECT 7.3225 17.7875 7.3875 17.6525 ; + RECT 7.1075 17.7875 7.1725 17.6525 ; + RECT 7.3225 19.6525 7.3875 19.5175 ; + RECT 7.1075 19.6525 7.1725 19.5175 ; + RECT 7.0875 18.685 7.2225 18.62 ; + RECT 7.355 18.685 7.42 18.62 ; + RECT 7.015 17.3575 7.7025 17.2925 ; + RECT 7.015 19.8325 7.7025 19.7675 ; + RECT 7.0875 18.685 7.2225 18.62 ; + RECT 7.355 18.685 7.42 18.62 ; + RECT 7.015 17.3575 7.7025 17.2925 ; + RECT 7.015 19.8325 7.7025 19.7675 ; + RECT 6.1475 19.405 6.2825 19.34 ; + RECT 6.43 19.265 6.565 19.2 ; + RECT 6.7125 19.125 6.8475 19.06 ; + RECT 7.355 18.685 7.42 18.62 ; + RECT 6.05 17.3575 7.7025 17.2925 ; + RECT 6.05 19.8325 7.7025 19.7675 ; + RECT 3.13 21.5525 3.065 21.6875 ; + RECT 3.345 21.5525 3.28 21.6875 ; + RECT 3.13 20.1625 3.065 20.2975 ; + RECT 3.345 20.1625 3.28 20.2975 ; + RECT 3.365 20.8925 3.23 20.9575 ; + RECT 3.0975 20.8925 3.0325 20.9575 ; + RECT 3.4375 21.8475 2.75 21.9125 ; + RECT 3.4375 20.0275 2.75 20.0925 ; + RECT 2.4425 21.5525 2.3775 21.6875 ; + RECT 2.6575 21.5525 2.5925 21.6875 ; + RECT 2.4425 20.1625 2.3775 20.2975 ; + RECT 2.6575 20.1625 2.5925 20.2975 ; + RECT 2.6775 20.8925 2.5425 20.9575 ; + RECT 2.41 20.8925 2.345 20.9575 ; + RECT 2.75 21.8475 2.0625 21.9125 ; + RECT 2.75 20.0275 2.0625 20.0925 ; + RECT 1.755 21.5525 1.69 21.6875 ; + RECT 1.97 21.5525 1.905 21.6875 ; + RECT 1.755 20.1625 1.69 20.2975 ; + RECT 1.97 20.1625 1.905 20.2975 ; + RECT 1.99 20.8925 1.855 20.9575 ; + RECT 1.7225 20.8925 1.6575 20.9575 ; + RECT 2.0625 21.8475 1.375 21.9125 ; + RECT 2.0625 20.0275 1.375 20.0925 ; + RECT 1.0675 21.5525 1.0025 21.6875 ; + RECT 1.2825 21.5525 1.2175 21.6875 ; + RECT 1.0675 20.1625 1.0025 20.2975 ; + RECT 1.2825 20.1625 1.2175 20.2975 ; + RECT 1.3025 20.8925 1.1675 20.9575 ; + RECT 1.035 20.8925 0.97 20.9575 ; + RECT 1.375 21.8475 0.6875 21.9125 ; + RECT 1.375 20.0275 0.6875 20.0925 ; + RECT 0.38 21.5525 0.315 21.6875 ; + RECT 0.595 21.5525 0.53 21.6875 ; + RECT 0.38 20.1625 0.315 20.2975 ; + RECT 0.595 20.1625 0.53 20.2975 ; + RECT 0.615 20.8925 0.48 20.9575 ; + RECT 0.3475 20.8925 0.2825 20.9575 ; + RECT 0.6875 21.8475 0.0 21.9125 ; + RECT 0.6875 20.0275 0.0 20.0925 ; + RECT 3.13 22.2075 3.065 22.0725 ; + RECT 3.345 22.2075 3.28 22.0725 ; + RECT 3.13 23.5975 3.065 23.4625 ; + RECT 3.345 23.5975 3.28 23.4625 ; + RECT 3.365 22.8675 3.23 22.8025 ; + RECT 3.0975 22.8675 3.0325 22.8025 ; + RECT 3.4375 21.9125 2.75 21.8475 ; + RECT 3.4375 23.7325 2.75 23.6675 ; + RECT 2.4425 22.2075 2.3775 22.0725 ; + RECT 2.6575 22.2075 2.5925 22.0725 ; + RECT 2.4425 23.5975 2.3775 23.4625 ; + RECT 2.6575 23.5975 2.5925 23.4625 ; + RECT 2.6775 22.8675 2.5425 22.8025 ; + RECT 2.41 22.8675 2.345 22.8025 ; + RECT 2.75 21.9125 2.0625 21.8475 ; + RECT 2.75 23.7325 2.0625 23.6675 ; + RECT 1.755 22.2075 1.69 22.0725 ; + RECT 1.97 22.2075 1.905 22.0725 ; + RECT 1.755 23.5975 1.69 23.4625 ; + RECT 1.97 23.5975 1.905 23.4625 ; + RECT 1.99 22.8675 1.855 22.8025 ; + RECT 1.7225 22.8675 1.6575 22.8025 ; + RECT 2.0625 21.9125 1.375 21.8475 ; + RECT 2.0625 23.7325 1.375 23.6675 ; + RECT 1.0675 22.2075 1.0025 22.0725 ; + RECT 1.2825 22.2075 1.2175 22.0725 ; + RECT 1.0675 23.5975 1.0025 23.4625 ; + RECT 1.2825 23.5975 1.2175 23.4625 ; + RECT 1.3025 22.8675 1.1675 22.8025 ; + RECT 1.035 22.8675 0.97 22.8025 ; + RECT 1.375 21.9125 0.6875 21.8475 ; + RECT 1.375 23.7325 0.6875 23.6675 ; + RECT 0.38 22.2075 0.315 22.0725 ; + RECT 0.595 22.2075 0.53 22.0725 ; + RECT 0.38 23.5975 0.315 23.4625 ; + RECT 0.595 23.5975 0.53 23.4625 ; + RECT 0.615 22.8675 0.48 22.8025 ; + RECT 0.3475 22.8675 0.2825 22.8025 ; + RECT 0.6875 21.9125 0.0 21.8475 ; + RECT 0.6875 23.7325 0.0 23.6675 ; + RECT 3.13 25.1925 3.065 25.3275 ; + RECT 3.345 25.1925 3.28 25.3275 ; + RECT 3.13 23.8025 3.065 23.9375 ; + RECT 3.345 23.8025 3.28 23.9375 ; + RECT 3.365 24.5325 3.23 24.5975 ; + RECT 3.0975 24.5325 3.0325 24.5975 ; + RECT 3.4375 25.4875 2.75 25.5525 ; + RECT 3.4375 23.6675 2.75 23.7325 ; + RECT 2.4425 25.1925 2.3775 25.3275 ; + RECT 2.6575 25.1925 2.5925 25.3275 ; + RECT 2.4425 23.8025 2.3775 23.9375 ; + RECT 2.6575 23.8025 2.5925 23.9375 ; + RECT 2.6775 24.5325 2.5425 24.5975 ; + RECT 2.41 24.5325 2.345 24.5975 ; + RECT 2.75 25.4875 2.0625 25.5525 ; + RECT 2.75 23.6675 2.0625 23.7325 ; + RECT 1.755 25.1925 1.69 25.3275 ; + RECT 1.97 25.1925 1.905 25.3275 ; + RECT 1.755 23.8025 1.69 23.9375 ; + RECT 1.97 23.8025 1.905 23.9375 ; + RECT 1.99 24.5325 1.855 24.5975 ; + RECT 1.7225 24.5325 1.6575 24.5975 ; + RECT 2.0625 25.4875 1.375 25.5525 ; + RECT 2.0625 23.6675 1.375 23.7325 ; + RECT 1.0675 25.1925 1.0025 25.3275 ; + RECT 1.2825 25.1925 1.2175 25.3275 ; + RECT 1.0675 23.8025 1.0025 23.9375 ; + RECT 1.2825 23.8025 1.2175 23.9375 ; + RECT 1.3025 24.5325 1.1675 24.5975 ; + RECT 1.035 24.5325 0.97 24.5975 ; + RECT 1.375 25.4875 0.6875 25.5525 ; + RECT 1.375 23.6675 0.6875 23.7325 ; + RECT 0.38 25.1925 0.315 25.3275 ; + RECT 0.595 25.1925 0.53 25.3275 ; + RECT 0.38 23.8025 0.315 23.9375 ; + RECT 0.595 23.8025 0.53 23.9375 ; + RECT 0.615 24.5325 0.48 24.5975 ; + RECT 0.3475 24.5325 0.2825 24.5975 ; + RECT 0.6875 25.4875 0.0 25.5525 ; + RECT 0.6875 23.6675 0.0 23.7325 ; + RECT 3.13 25.8475 3.065 25.7125 ; + RECT 3.345 25.8475 3.28 25.7125 ; + RECT 3.13 27.2375 3.065 27.1025 ; + RECT 3.345 27.2375 3.28 27.1025 ; + RECT 3.365 26.5075 3.23 26.4425 ; + RECT 3.0975 26.5075 3.0325 26.4425 ; + RECT 3.4375 25.5525 2.75 25.4875 ; + RECT 3.4375 27.3725 2.75 27.3075 ; + RECT 2.4425 25.8475 2.3775 25.7125 ; + RECT 2.6575 25.8475 2.5925 25.7125 ; + RECT 2.4425 27.2375 2.3775 27.1025 ; + RECT 2.6575 27.2375 2.5925 27.1025 ; + RECT 2.6775 26.5075 2.5425 26.4425 ; + RECT 2.41 26.5075 2.345 26.4425 ; + RECT 2.75 25.5525 2.0625 25.4875 ; + RECT 2.75 27.3725 2.0625 27.3075 ; + RECT 1.755 25.8475 1.69 25.7125 ; + RECT 1.97 25.8475 1.905 25.7125 ; + RECT 1.755 27.2375 1.69 27.1025 ; + RECT 1.97 27.2375 1.905 27.1025 ; + RECT 1.99 26.5075 1.855 26.4425 ; + RECT 1.7225 26.5075 1.6575 26.4425 ; + RECT 2.0625 25.5525 1.375 25.4875 ; + RECT 2.0625 27.3725 1.375 27.3075 ; + RECT 1.0675 25.8475 1.0025 25.7125 ; + RECT 1.2825 25.8475 1.2175 25.7125 ; + RECT 1.0675 27.2375 1.0025 27.1025 ; + RECT 1.2825 27.2375 1.2175 27.1025 ; + RECT 1.3025 26.5075 1.1675 26.4425 ; + RECT 1.035 26.5075 0.97 26.4425 ; + RECT 1.375 25.5525 0.6875 25.4875 ; + RECT 1.375 27.3725 0.6875 27.3075 ; + RECT 0.38 25.8475 0.315 25.7125 ; + RECT 0.595 25.8475 0.53 25.7125 ; + RECT 0.38 27.2375 0.315 27.1025 ; + RECT 0.595 27.2375 0.53 27.1025 ; + RECT 0.615 26.5075 0.48 26.4425 ; + RECT 0.3475 26.5075 0.2825 26.4425 ; + RECT 0.6875 25.5525 0.0 25.4875 ; + RECT 0.6875 27.3725 0.0 27.3075 ; + RECT 3.13 28.8325 3.065 28.9675 ; + RECT 3.345 28.8325 3.28 28.9675 ; + RECT 3.13 27.4425 3.065 27.5775 ; + RECT 3.345 27.4425 3.28 27.5775 ; + RECT 3.365 28.1725 3.23 28.2375 ; + RECT 3.0975 28.1725 3.0325 28.2375 ; + RECT 3.4375 29.1275 2.75 29.1925 ; + RECT 3.4375 27.3075 2.75 27.3725 ; + RECT 2.4425 28.8325 2.3775 28.9675 ; + RECT 2.6575 28.8325 2.5925 28.9675 ; + RECT 2.4425 27.4425 2.3775 27.5775 ; + RECT 2.6575 27.4425 2.5925 27.5775 ; + RECT 2.6775 28.1725 2.5425 28.2375 ; + RECT 2.41 28.1725 2.345 28.2375 ; + RECT 2.75 29.1275 2.0625 29.1925 ; + RECT 2.75 27.3075 2.0625 27.3725 ; + RECT 1.755 28.8325 1.69 28.9675 ; + RECT 1.97 28.8325 1.905 28.9675 ; + RECT 1.755 27.4425 1.69 27.5775 ; + RECT 1.97 27.4425 1.905 27.5775 ; + RECT 1.99 28.1725 1.855 28.2375 ; + RECT 1.7225 28.1725 1.6575 28.2375 ; + RECT 2.0625 29.1275 1.375 29.1925 ; + RECT 2.0625 27.3075 1.375 27.3725 ; + RECT 1.0675 28.8325 1.0025 28.9675 ; + RECT 1.2825 28.8325 1.2175 28.9675 ; + RECT 1.0675 27.4425 1.0025 27.5775 ; + RECT 1.2825 27.4425 1.2175 27.5775 ; + RECT 1.3025 28.1725 1.1675 28.2375 ; + RECT 1.035 28.1725 0.97 28.2375 ; + RECT 1.375 29.1275 0.6875 29.1925 ; + RECT 1.375 27.3075 0.6875 27.3725 ; + RECT 0.38 28.8325 0.315 28.9675 ; + RECT 0.595 28.8325 0.53 28.9675 ; + RECT 0.38 27.4425 0.315 27.5775 ; + RECT 0.595 27.4425 0.53 27.5775 ; + RECT 0.615 28.1725 0.48 28.2375 ; + RECT 0.3475 28.1725 0.2825 28.2375 ; + RECT 0.6875 29.1275 0.0 29.1925 ; + RECT 0.6875 27.3075 0.0 27.3725 ; + RECT 3.13 29.4875 3.065 29.3525 ; + RECT 3.345 29.4875 3.28 29.3525 ; + RECT 3.13 30.8775 3.065 30.7425 ; + RECT 3.345 30.8775 3.28 30.7425 ; + RECT 3.365 30.1475 3.23 30.0825 ; + RECT 3.0975 30.1475 3.0325 30.0825 ; + RECT 3.4375 29.1925 2.75 29.1275 ; + RECT 3.4375 31.0125 2.75 30.9475 ; + RECT 2.4425 29.4875 2.3775 29.3525 ; + RECT 2.6575 29.4875 2.5925 29.3525 ; + RECT 2.4425 30.8775 2.3775 30.7425 ; + RECT 2.6575 30.8775 2.5925 30.7425 ; + RECT 2.6775 30.1475 2.5425 30.0825 ; + RECT 2.41 30.1475 2.345 30.0825 ; + RECT 2.75 29.1925 2.0625 29.1275 ; + RECT 2.75 31.0125 2.0625 30.9475 ; + RECT 1.755 29.4875 1.69 29.3525 ; + RECT 1.97 29.4875 1.905 29.3525 ; + RECT 1.755 30.8775 1.69 30.7425 ; + RECT 1.97 30.8775 1.905 30.7425 ; + RECT 1.99 30.1475 1.855 30.0825 ; + RECT 1.7225 30.1475 1.6575 30.0825 ; + RECT 2.0625 29.1925 1.375 29.1275 ; + RECT 2.0625 31.0125 1.375 30.9475 ; + RECT 1.0675 29.4875 1.0025 29.3525 ; + RECT 1.2825 29.4875 1.2175 29.3525 ; + RECT 1.0675 30.8775 1.0025 30.7425 ; + RECT 1.2825 30.8775 1.2175 30.7425 ; + RECT 1.3025 30.1475 1.1675 30.0825 ; + RECT 1.035 30.1475 0.97 30.0825 ; + RECT 1.375 29.1925 0.6875 29.1275 ; + RECT 1.375 31.0125 0.6875 30.9475 ; + RECT 0.38 29.4875 0.315 29.3525 ; + RECT 0.595 29.4875 0.53 29.3525 ; + RECT 0.38 30.8775 0.315 30.7425 ; + RECT 0.595 30.8775 0.53 30.7425 ; + RECT 0.615 30.1475 0.48 30.0825 ; + RECT 0.3475 30.1475 0.2825 30.0825 ; + RECT 0.6875 29.1925 0.0 29.1275 ; + RECT 0.6875 31.0125 0.0 30.9475 ; + RECT 3.13 32.4725 3.065 32.6075 ; + RECT 3.345 32.4725 3.28 32.6075 ; + RECT 3.13 31.0825 3.065 31.2175 ; + RECT 3.345 31.0825 3.28 31.2175 ; + RECT 3.365 31.8125 3.23 31.8775 ; + RECT 3.0975 31.8125 3.0325 31.8775 ; + RECT 3.4375 32.7675 2.75 32.8325 ; + RECT 3.4375 30.9475 2.75 31.0125 ; + RECT 2.4425 32.4725 2.3775 32.6075 ; + RECT 2.6575 32.4725 2.5925 32.6075 ; + RECT 2.4425 31.0825 2.3775 31.2175 ; + RECT 2.6575 31.0825 2.5925 31.2175 ; + RECT 2.6775 31.8125 2.5425 31.8775 ; + RECT 2.41 31.8125 2.345 31.8775 ; + RECT 2.75 32.7675 2.0625 32.8325 ; + RECT 2.75 30.9475 2.0625 31.0125 ; + RECT 1.755 32.4725 1.69 32.6075 ; + RECT 1.97 32.4725 1.905 32.6075 ; + RECT 1.755 31.0825 1.69 31.2175 ; + RECT 1.97 31.0825 1.905 31.2175 ; + RECT 1.99 31.8125 1.855 31.8775 ; + RECT 1.7225 31.8125 1.6575 31.8775 ; + RECT 2.0625 32.7675 1.375 32.8325 ; + RECT 2.0625 30.9475 1.375 31.0125 ; + RECT 1.0675 32.4725 1.0025 32.6075 ; + RECT 1.2825 32.4725 1.2175 32.6075 ; + RECT 1.0675 31.0825 1.0025 31.2175 ; + RECT 1.2825 31.0825 1.2175 31.2175 ; + RECT 1.3025 31.8125 1.1675 31.8775 ; + RECT 1.035 31.8125 0.97 31.8775 ; + RECT 1.375 32.7675 0.6875 32.8325 ; + RECT 1.375 30.9475 0.6875 31.0125 ; + RECT 0.38 32.4725 0.315 32.6075 ; + RECT 0.595 32.4725 0.53 32.6075 ; + RECT 0.38 31.0825 0.315 31.2175 ; + RECT 0.595 31.0825 0.53 31.2175 ; + RECT 0.615 31.8125 0.48 31.8775 ; + RECT 0.3475 31.8125 0.2825 31.8775 ; + RECT 0.6875 32.7675 0.0 32.8325 ; + RECT 0.6875 30.9475 0.0 31.0125 ; + RECT 3.13 33.1275 3.065 32.9925 ; + RECT 3.345 33.1275 3.28 32.9925 ; + RECT 3.13 34.5175 3.065 34.3825 ; + RECT 3.345 34.5175 3.28 34.3825 ; + RECT 3.365 33.7875 3.23 33.7225 ; + RECT 3.0975 33.7875 3.0325 33.7225 ; + RECT 3.4375 32.8325 2.75 32.7675 ; + RECT 3.4375 34.6525 2.75 34.5875 ; + RECT 2.4425 33.1275 2.3775 32.9925 ; + RECT 2.6575 33.1275 2.5925 32.9925 ; + RECT 2.4425 34.5175 2.3775 34.3825 ; + RECT 2.6575 34.5175 2.5925 34.3825 ; + RECT 2.6775 33.7875 2.5425 33.7225 ; + RECT 2.41 33.7875 2.345 33.7225 ; + RECT 2.75 32.8325 2.0625 32.7675 ; + RECT 2.75 34.6525 2.0625 34.5875 ; + RECT 1.755 33.1275 1.69 32.9925 ; + RECT 1.97 33.1275 1.905 32.9925 ; + RECT 1.755 34.5175 1.69 34.3825 ; + RECT 1.97 34.5175 1.905 34.3825 ; + RECT 1.99 33.7875 1.855 33.7225 ; + RECT 1.7225 33.7875 1.6575 33.7225 ; + RECT 2.0625 32.8325 1.375 32.7675 ; + RECT 2.0625 34.6525 1.375 34.5875 ; + RECT 1.0675 33.1275 1.0025 32.9925 ; + RECT 1.2825 33.1275 1.2175 32.9925 ; + RECT 1.0675 34.5175 1.0025 34.3825 ; + RECT 1.2825 34.5175 1.2175 34.3825 ; + RECT 1.3025 33.7875 1.1675 33.7225 ; + RECT 1.035 33.7875 0.97 33.7225 ; + RECT 1.375 32.8325 0.6875 32.7675 ; + RECT 1.375 34.6525 0.6875 34.5875 ; + RECT 0.38 33.1275 0.315 32.9925 ; + RECT 0.595 33.1275 0.53 32.9925 ; + RECT 0.38 34.5175 0.315 34.3825 ; + RECT 0.595 34.5175 0.53 34.3825 ; + RECT 0.615 33.7875 0.48 33.7225 ; + RECT 0.3475 33.7875 0.2825 33.7225 ; + RECT 0.6875 32.8325 0.0 32.7675 ; + RECT 0.6875 34.6525 0.0 34.5875 ; + RECT 3.13 36.1125 3.065 36.2475 ; + RECT 3.345 36.1125 3.28 36.2475 ; + RECT 3.13 34.7225 3.065 34.8575 ; + RECT 3.345 34.7225 3.28 34.8575 ; + RECT 3.365 35.4525 3.23 35.5175 ; + RECT 3.0975 35.4525 3.0325 35.5175 ; + RECT 3.4375 36.4075 2.75 36.4725 ; + RECT 3.4375 34.5875 2.75 34.6525 ; + RECT 2.4425 36.1125 2.3775 36.2475 ; + RECT 2.6575 36.1125 2.5925 36.2475 ; + RECT 2.4425 34.7225 2.3775 34.8575 ; + RECT 2.6575 34.7225 2.5925 34.8575 ; + RECT 2.6775 35.4525 2.5425 35.5175 ; + RECT 2.41 35.4525 2.345 35.5175 ; + RECT 2.75 36.4075 2.0625 36.4725 ; + RECT 2.75 34.5875 2.0625 34.6525 ; + RECT 1.755 36.1125 1.69 36.2475 ; + RECT 1.97 36.1125 1.905 36.2475 ; + RECT 1.755 34.7225 1.69 34.8575 ; + RECT 1.97 34.7225 1.905 34.8575 ; + RECT 1.99 35.4525 1.855 35.5175 ; + RECT 1.7225 35.4525 1.6575 35.5175 ; + RECT 2.0625 36.4075 1.375 36.4725 ; + RECT 2.0625 34.5875 1.375 34.6525 ; + RECT 1.0675 36.1125 1.0025 36.2475 ; + RECT 1.2825 36.1125 1.2175 36.2475 ; + RECT 1.0675 34.7225 1.0025 34.8575 ; + RECT 1.2825 34.7225 1.2175 34.8575 ; + RECT 1.3025 35.4525 1.1675 35.5175 ; + RECT 1.035 35.4525 0.97 35.5175 ; + RECT 1.375 36.4075 0.6875 36.4725 ; + RECT 1.375 34.5875 0.6875 34.6525 ; + RECT 0.38 36.1125 0.315 36.2475 ; + RECT 0.595 36.1125 0.53 36.2475 ; + RECT 0.38 34.7225 0.315 34.8575 ; + RECT 0.595 34.7225 0.53 34.8575 ; + RECT 0.615 35.4525 0.48 35.5175 ; + RECT 0.3475 35.4525 0.2825 35.5175 ; + RECT 0.6875 36.4075 0.0 36.4725 ; + RECT 0.6875 34.5875 0.0 34.6525 ; + RECT 6.3575 12.7025 6.4225 12.5675 ; + RECT 6.1425 12.7025 6.2075 12.5675 ; + RECT 6.5725 12.7025 6.6375 12.5675 ; + RECT 6.3575 12.7025 6.4225 12.5675 ; + RECT 6.1425 14.7025 6.2075 14.5675 ; + RECT 6.5725 14.7025 6.6375 14.5675 ; + RECT 6.215 14.455 6.35 14.39 ; + RECT 6.43 14.175 6.565 14.11 ; + RECT 6.7025 12.8325 6.7675 12.7675 ; + RECT 6.05 12.4075 6.9525 12.3425 ; + RECT 6.05 14.8825 6.9525 14.8175 ; + RECT 7.26 12.7025 7.325 12.5675 ; + RECT 7.045 12.7025 7.11 12.5675 ; + RECT 7.26 14.7475 7.325 14.6125 ; + RECT 7.045 14.7475 7.11 14.6125 ; + RECT 7.025 13.69 7.16 13.625 ; + RECT 7.2925 13.69 7.3575 13.625 ; + RECT 6.9525 12.4075 7.64 12.3425 ; + RECT 6.9525 14.8825 7.64 14.8175 ; + RECT 7.9475 12.7025 8.0125 12.5675 ; + RECT 7.7325 12.7025 7.7975 12.5675 ; + RECT 7.9475 14.7475 8.0125 14.6125 ; + RECT 7.7325 14.7475 7.7975 14.6125 ; + RECT 7.7125 13.69 7.8475 13.625 ; + RECT 7.98 13.69 8.045 13.625 ; + RECT 7.64 12.4075 8.105 12.3425 ; + RECT 7.64 14.8825 8.105 14.8175 ; + RECT 7.025 13.69 7.16 13.625 ; + RECT 7.98 13.69 8.045 13.625 ; + RECT 6.9525 12.4075 8.105 12.3425 ; + RECT 6.9525 14.8825 8.105 14.8175 ; + RECT 6.8075 36.635 9.6675 36.765 ; + POLYGON 8.655 38.1425 8.655 38.9675 9.2 38.9675 9.2 38.9025 8.72 38.9025 8.72 38.5575 8.915 38.5575 8.915 38.1425 8.655 38.1425 ; + RECT 9.44 37.7475 9.5175 37.8825 ; + POLYGON 7.225 37.035 7.225 37.675 7.525 37.675 7.525 38.5625 7.455 38.5625 7.455 38.6275 7.59 38.6275 7.59 38.4975 8.18 38.4975 8.18 38.8475 8.245 38.8475 8.245 38.3575 8.525 38.3575 8.525 38.7725 8.59 38.7725 8.59 38.2925 8.18 38.2925 8.18 38.4325 7.59 38.4325 7.59 37.61 7.29 37.61 7.29 37.1 8.18 37.1 8.18 37.4925 8.245 37.4925 8.245 37.035 7.225 37.035 ; + RECT 8.855 37.2875 8.92 37.5625 ; + POLYGON 7.325 38.0825 7.325 38.7575 7.97 38.7575 7.97 38.6225 7.905 38.6225 7.905 38.6925 7.39 38.6925 7.39 38.4975 7.415 38.4975 7.415 38.0825 7.325 38.0825 ; + POLYGON 9.45 36.9175 9.45 37.6175 9.345 37.6175 9.345 37.6825 9.45 37.6825 9.45 38.3475 9.12 38.3475 9.12 38.4125 9.45 38.4125 9.45 38.9375 9.515 38.9375 9.515 36.9175 9.45 36.9175 ; + POLYGON 8.585 37.6275 8.585 37.8425 8.355 37.8425 8.355 37.715 8.22 37.715 8.22 38.1625 7.98 38.1625 7.98 38.3675 8.115 38.3675 8.115 38.2275 8.285 38.2275 8.285 37.9075 8.78 37.9075 8.78 37.6925 8.995 37.6925 8.995 37.8925 9.13 37.8925 9.13 37.8275 9.06 37.8275 9.06 37.6275 8.585 37.6275 ; + POLYGON 6.975 37.9675 6.975 39.105 6.9075 39.105 6.9075 39.235 9.6675 39.235 9.6675 39.105 9.33 39.105 9.33 38.6075 9.265 38.6075 9.265 39.105 8.43 39.105 8.43 38.4225 8.365 38.4225 8.365 39.105 7.865 39.105 7.865 38.9525 7.73 38.9525 7.73 39.105 7.04 39.105 7.04 37.9675 6.975 37.9675 ; + RECT 9.45 37.615 9.515 37.8275 ; + POLYGON 8.915 36.9275 8.915 37.2025 9.045 37.2025 9.045 37.4625 9.11 37.4625 9.11 37.1375 8.98 37.1375 8.98 36.9275 8.915 36.9275 ; + RECT 7.0525 37.7375 7.13 37.8725 ; + RECT 8.585 37.6275 8.78 37.9075 ; + POLYGON 7.195 37.8175 7.195 38.8875 8.1 38.8875 8.1 38.5625 8.035 38.5625 8.035 38.8225 7.26 38.8225 7.26 37.8825 7.345 37.8825 7.345 37.8175 7.195 37.8175 ; + POLYGON 6.9075 36.635 6.9075 36.765 6.975 36.765 6.975 37.545 7.04 37.545 7.04 36.765 7.725 36.765 7.725 36.935 7.86 36.935 7.86 36.765 8.365 36.765 8.365 37.4925 8.43 37.4925 8.43 36.765 8.73 36.765 8.73 37.1675 8.795 37.1675 8.795 36.765 9.215 36.765 9.215 37.6875 9.28 37.6875 9.28 36.765 9.5675 36.765 9.5675 36.635 6.9075 36.635 ; + POLYGON 8.025 37.385 8.025 37.65 7.75 37.65 7.75 37.715 8.025 37.715 8.025 38.0975 8.09 38.0975 8.09 37.65 8.42 37.65 8.42 37.7775 8.485 37.7775 8.485 37.585 8.09 37.585 8.09 37.385 8.025 37.385 ; + POLYGON 8.86 37.7575 8.86 38.0225 9.31 38.0225 9.31 38.2175 9.11 38.2175 9.11 38.2825 9.375 38.2825 9.375 37.7575 9.21 37.7575 9.21 37.8925 9.31 37.8925 9.31 37.9575 8.925 37.9575 8.925 37.7575 8.86 37.7575 ; + RECT 9.135 38.4775 9.2 38.8275 ; + RECT 6.8075 39.105 9.5675 39.235 ; + POLYGON 7.355 37.165 7.355 37.545 7.42 37.545 7.42 37.23 8.02 37.23 8.02 37.165 7.355 37.165 ; + POLYGON 8.98 38.0875 8.98 38.8375 9.07 38.8375 9.07 38.5625 9.045 38.5625 9.045 38.1525 9.245 38.1525 9.245 38.0875 8.98 38.0875 ; + RECT 6.8075 41.715 9.6675 41.585 ; + POLYGON 8.655 40.2075 8.655 39.3825 9.2 39.3825 9.2 39.4475 8.72 39.4475 8.72 39.7925 8.915 39.7925 8.915 40.2075 8.655 40.2075 ; + RECT 9.44 40.6025 9.5175 40.4675 ; + POLYGON 7.225 41.315 7.225 40.675 7.525 40.675 7.525 39.7875 7.455 39.7875 7.455 39.7225 7.59 39.7225 7.59 39.8525 8.18 39.8525 8.18 39.5025 8.245 39.5025 8.245 39.9925 8.525 39.9925 8.525 39.5775 8.59 39.5775 8.59 40.0575 8.18 40.0575 8.18 39.9175 7.59 39.9175 7.59 40.74 7.29 40.74 7.29 41.25 8.18 41.25 8.18 40.8575 8.245 40.8575 8.245 41.315 7.225 41.315 ; + RECT 8.855 41.0625 8.92 40.7875 ; + POLYGON 7.325 40.2675 7.325 39.5925 7.97 39.5925 7.97 39.7275 7.905 39.7275 7.905 39.6575 7.39 39.6575 7.39 39.8525 7.415 39.8525 7.415 40.2675 7.325 40.2675 ; + POLYGON 9.45 41.4325 9.45 40.7325 9.345 40.7325 9.345 40.6675 9.45 40.6675 9.45 40.0025 9.12 40.0025 9.12 39.9375 9.45 39.9375 9.45 39.4125 9.515 39.4125 9.515 41.4325 9.45 41.4325 ; + POLYGON 8.585 40.7225 8.585 40.5075 8.355 40.5075 8.355 40.635 8.22 40.635 8.22 40.1875 7.98 40.1875 7.98 39.9825 8.115 39.9825 8.115 40.1225 8.285 40.1225 8.285 40.4425 8.78 40.4425 8.78 40.6575 8.995 40.6575 8.995 40.4575 9.13 40.4575 9.13 40.5225 9.06 40.5225 9.06 40.7225 8.585 40.7225 ; + POLYGON 6.975 40.3825 6.975 39.245 6.9075 39.245 6.9075 39.115 9.6675 39.115 9.6675 39.245 9.33 39.245 9.33 39.7425 9.265 39.7425 9.265 39.245 8.43 39.245 8.43 39.9275 8.365 39.9275 8.365 39.245 7.865 39.245 7.865 39.3975 7.73 39.3975 7.73 39.245 7.04 39.245 7.04 40.3825 6.975 40.3825 ; + RECT 9.45 40.735 9.515 40.5225 ; + POLYGON 8.915 41.4225 8.915 41.1475 9.045 41.1475 9.045 40.8875 9.11 40.8875 9.11 41.2125 8.98 41.2125 8.98 41.4225 8.915 41.4225 ; + RECT 7.0525 40.6125 7.13 40.4775 ; + RECT 8.585 40.7225 8.78 40.4425 ; + POLYGON 7.195 40.5325 7.195 39.4625 8.1 39.4625 8.1 39.7875 8.035 39.7875 8.035 39.5275 7.26 39.5275 7.26 40.4675 7.345 40.4675 7.345 40.5325 7.195 40.5325 ; + POLYGON 6.9075 41.715 6.9075 41.585 6.975 41.585 6.975 40.805 7.04 40.805 7.04 41.585 7.725 41.585 7.725 41.415 7.86 41.415 7.86 41.585 8.365 41.585 8.365 40.8575 8.43 40.8575 8.43 41.585 8.73 41.585 8.73 41.1825 8.795 41.1825 8.795 41.585 9.215 41.585 9.215 40.6625 9.28 40.6625 9.28 41.585 9.5675 41.585 9.5675 41.715 6.9075 41.715 ; + POLYGON 8.025 40.965 8.025 40.7 7.75 40.7 7.75 40.635 8.025 40.635 8.025 40.2525 8.09 40.2525 8.09 40.7 8.42 40.7 8.42 40.5725 8.485 40.5725 8.485 40.765 8.09 40.765 8.09 40.965 8.025 40.965 ; + POLYGON 8.86 40.5925 8.86 40.3275 9.31 40.3275 9.31 40.1325 9.11 40.1325 9.11 40.0675 9.375 40.0675 9.375 40.5925 9.21 40.5925 9.21 40.4575 9.31 40.4575 9.31 40.3925 8.925 40.3925 8.925 40.5925 8.86 40.5925 ; + RECT 9.135 39.8725 9.2 39.5225 ; + RECT 6.8075 39.245 9.5675 39.115 ; + POLYGON 7.355 41.185 7.355 40.805 7.42 40.805 7.42 41.12 8.02 41.12 8.02 41.185 7.355 41.185 ; + POLYGON 8.98 40.2625 8.98 39.5125 9.07 39.5125 9.07 39.7875 9.045 39.7875 9.045 40.1975 9.245 40.1975 9.245 40.2625 8.98 40.2625 ; + RECT 6.8075 41.585 9.6675 41.715 ; + POLYGON 8.655 43.0925 8.655 43.9175 9.2 43.9175 9.2 43.8525 8.72 43.8525 8.72 43.5075 8.915 43.5075 8.915 43.0925 8.655 43.0925 ; + RECT 9.44 42.6975 9.5175 42.8325 ; + POLYGON 7.225 41.985 7.225 42.625 7.525 42.625 7.525 43.5125 7.455 43.5125 7.455 43.5775 7.59 43.5775 7.59 43.4475 8.18 43.4475 8.18 43.7975 8.245 43.7975 8.245 43.3075 8.525 43.3075 8.525 43.7225 8.59 43.7225 8.59 43.2425 8.18 43.2425 8.18 43.3825 7.59 43.3825 7.59 42.56 7.29 42.56 7.29 42.05 8.18 42.05 8.18 42.4425 8.245 42.4425 8.245 41.985 7.225 41.985 ; + RECT 8.855 42.2375 8.92 42.5125 ; + POLYGON 7.325 43.0325 7.325 43.7075 7.97 43.7075 7.97 43.5725 7.905 43.5725 7.905 43.6425 7.39 43.6425 7.39 43.4475 7.415 43.4475 7.415 43.0325 7.325 43.0325 ; + POLYGON 9.45 41.8675 9.45 42.5675 9.345 42.5675 9.345 42.6325 9.45 42.6325 9.45 43.2975 9.12 43.2975 9.12 43.3625 9.45 43.3625 9.45 43.8875 9.515 43.8875 9.515 41.8675 9.45 41.8675 ; + POLYGON 8.585 42.5775 8.585 42.7925 8.355 42.7925 8.355 42.665 8.22 42.665 8.22 43.1125 7.98 43.1125 7.98 43.3175 8.115 43.3175 8.115 43.1775 8.285 43.1775 8.285 42.8575 8.78 42.8575 8.78 42.6425 8.995 42.6425 8.995 42.8425 9.13 42.8425 9.13 42.7775 9.06 42.7775 9.06 42.5775 8.585 42.5775 ; + POLYGON 6.975 42.9175 6.975 44.055 6.9075 44.055 6.9075 44.185 9.6675 44.185 9.6675 44.055 9.33 44.055 9.33 43.5575 9.265 43.5575 9.265 44.055 8.43 44.055 8.43 43.3725 8.365 43.3725 8.365 44.055 7.865 44.055 7.865 43.9025 7.73 43.9025 7.73 44.055 7.04 44.055 7.04 42.9175 6.975 42.9175 ; + RECT 9.45 42.565 9.515 42.7775 ; + POLYGON 8.915 41.8775 8.915 42.1525 9.045 42.1525 9.045 42.4125 9.11 42.4125 9.11 42.0875 8.98 42.0875 8.98 41.8775 8.915 41.8775 ; + RECT 7.0525 42.6875 7.13 42.8225 ; + RECT 8.585 42.5775 8.78 42.8575 ; + POLYGON 7.195 42.7675 7.195 43.8375 8.1 43.8375 8.1 43.5125 8.035 43.5125 8.035 43.7725 7.26 43.7725 7.26 42.8325 7.345 42.8325 7.345 42.7675 7.195 42.7675 ; + POLYGON 6.9075 41.585 6.9075 41.715 6.975 41.715 6.975 42.495 7.04 42.495 7.04 41.715 7.725 41.715 7.725 41.885 7.86 41.885 7.86 41.715 8.365 41.715 8.365 42.4425 8.43 42.4425 8.43 41.715 8.73 41.715 8.73 42.1175 8.795 42.1175 8.795 41.715 9.215 41.715 9.215 42.6375 9.28 42.6375 9.28 41.715 9.5675 41.715 9.5675 41.585 6.9075 41.585 ; + POLYGON 8.025 42.335 8.025 42.6 7.75 42.6 7.75 42.665 8.025 42.665 8.025 43.0475 8.09 43.0475 8.09 42.6 8.42 42.6 8.42 42.7275 8.485 42.7275 8.485 42.535 8.09 42.535 8.09 42.335 8.025 42.335 ; + POLYGON 8.86 42.7075 8.86 42.9725 9.31 42.9725 9.31 43.1675 9.11 43.1675 9.11 43.2325 9.375 43.2325 9.375 42.7075 9.21 42.7075 9.21 42.8425 9.31 42.8425 9.31 42.9075 8.925 42.9075 8.925 42.7075 8.86 42.7075 ; + RECT 9.135 43.4275 9.2 43.7775 ; + RECT 6.8075 44.055 9.5675 44.185 ; + POLYGON 7.355 42.115 7.355 42.495 7.42 42.495 7.42 42.18 8.02 42.18 8.02 42.115 7.355 42.115 ; + POLYGON 8.98 43.0375 8.98 43.7875 9.07 43.7875 9.07 43.5125 9.045 43.5125 9.045 43.1025 9.245 43.1025 9.245 43.0375 8.98 43.0375 ; + RECT 6.8075 46.665 9.6675 46.535 ; + POLYGON 8.655 45.1575 8.655 44.3325 9.2 44.3325 9.2 44.3975 8.72 44.3975 8.72 44.7425 8.915 44.7425 8.915 45.1575 8.655 45.1575 ; + RECT 9.44 45.5525 9.5175 45.4175 ; + POLYGON 7.225 46.265 7.225 45.625 7.525 45.625 7.525 44.7375 7.455 44.7375 7.455 44.6725 7.59 44.6725 7.59 44.8025 8.18 44.8025 8.18 44.4525 8.245 44.4525 8.245 44.9425 8.525 44.9425 8.525 44.5275 8.59 44.5275 8.59 45.0075 8.18 45.0075 8.18 44.8675 7.59 44.8675 7.59 45.69 7.29 45.69 7.29 46.2 8.18 46.2 8.18 45.8075 8.245 45.8075 8.245 46.265 7.225 46.265 ; + RECT 8.855 46.0125 8.92 45.7375 ; + POLYGON 7.325 45.2175 7.325 44.5425 7.97 44.5425 7.97 44.6775 7.905 44.6775 7.905 44.6075 7.39 44.6075 7.39 44.8025 7.415 44.8025 7.415 45.2175 7.325 45.2175 ; + POLYGON 9.45 46.3825 9.45 45.6825 9.345 45.6825 9.345 45.6175 9.45 45.6175 9.45 44.9525 9.12 44.9525 9.12 44.8875 9.45 44.8875 9.45 44.3625 9.515 44.3625 9.515 46.3825 9.45 46.3825 ; + POLYGON 8.585 45.6725 8.585 45.4575 8.355 45.4575 8.355 45.585 8.22 45.585 8.22 45.1375 7.98 45.1375 7.98 44.9325 8.115 44.9325 8.115 45.0725 8.285 45.0725 8.285 45.3925 8.78 45.3925 8.78 45.6075 8.995 45.6075 8.995 45.4075 9.13 45.4075 9.13 45.4725 9.06 45.4725 9.06 45.6725 8.585 45.6725 ; + POLYGON 6.975 45.3325 6.975 44.195 6.9075 44.195 6.9075 44.065 9.6675 44.065 9.6675 44.195 9.33 44.195 9.33 44.6925 9.265 44.6925 9.265 44.195 8.43 44.195 8.43 44.8775 8.365 44.8775 8.365 44.195 7.865 44.195 7.865 44.3475 7.73 44.3475 7.73 44.195 7.04 44.195 7.04 45.3325 6.975 45.3325 ; + RECT 9.45 45.685 9.515 45.4725 ; + POLYGON 8.915 46.3725 8.915 46.0975 9.045 46.0975 9.045 45.8375 9.11 45.8375 9.11 46.1625 8.98 46.1625 8.98 46.3725 8.915 46.3725 ; + RECT 7.0525 45.5625 7.13 45.4275 ; + RECT 8.585 45.6725 8.78 45.3925 ; + POLYGON 7.195 45.4825 7.195 44.4125 8.1 44.4125 8.1 44.7375 8.035 44.7375 8.035 44.4775 7.26 44.4775 7.26 45.4175 7.345 45.4175 7.345 45.4825 7.195 45.4825 ; + POLYGON 6.9075 46.665 6.9075 46.535 6.975 46.535 6.975 45.755 7.04 45.755 7.04 46.535 7.725 46.535 7.725 46.365 7.86 46.365 7.86 46.535 8.365 46.535 8.365 45.8075 8.43 45.8075 8.43 46.535 8.73 46.535 8.73 46.1325 8.795 46.1325 8.795 46.535 9.215 46.535 9.215 45.6125 9.28 45.6125 9.28 46.535 9.5675 46.535 9.5675 46.665 6.9075 46.665 ; + POLYGON 8.025 45.915 8.025 45.65 7.75 45.65 7.75 45.585 8.025 45.585 8.025 45.2025 8.09 45.2025 8.09 45.65 8.42 45.65 8.42 45.5225 8.485 45.5225 8.485 45.715 8.09 45.715 8.09 45.915 8.025 45.915 ; + POLYGON 8.86 45.5425 8.86 45.2775 9.31 45.2775 9.31 45.0825 9.11 45.0825 9.11 45.0175 9.375 45.0175 9.375 45.5425 9.21 45.5425 9.21 45.4075 9.31 45.4075 9.31 45.3425 8.925 45.3425 8.925 45.5425 8.86 45.5425 ; + RECT 9.135 44.8225 9.2 44.4725 ; + RECT 6.8075 44.195 9.5675 44.065 ; + POLYGON 7.355 46.135 7.355 45.755 7.42 45.755 7.42 46.07 8.02 46.07 8.02 46.135 7.355 46.135 ; + POLYGON 8.98 45.2125 8.98 44.4625 9.07 44.4625 9.07 44.7375 9.045 44.7375 9.045 45.1475 9.245 45.1475 9.245 45.2125 8.98 45.2125 ; + RECT 12.5275 -0.065 15.3875 0.065 ; + POLYGON 14.375 1.4425 14.375 2.2675 14.92 2.2675 14.92 2.2025 14.44 2.2025 14.44 1.8575 14.635 1.8575 14.635 1.4425 14.375 1.4425 ; + RECT 15.16 1.0475 15.2375 1.1825 ; + POLYGON 12.945 0.335 12.945 0.975 13.245 0.975 13.245 1.8625 13.175 1.8625 13.175 1.9275 13.31 1.9275 13.31 1.7975 13.9 1.7975 13.9 2.1475 13.965 2.1475 13.965 1.6575 14.245 1.6575 14.245 2.0725 14.31 2.0725 14.31 1.5925 13.9 1.5925 13.9 1.7325 13.31 1.7325 13.31 0.91 13.01 0.91 13.01 0.4 13.9 0.4 13.9 0.7925 13.965 0.7925 13.965 0.335 12.945 0.335 ; + RECT 14.575 0.5875 14.64 0.8625 ; + POLYGON 13.045 1.3825 13.045 2.0575 13.69 2.0575 13.69 1.9225 13.625 1.9225 13.625 1.9925 13.11 1.9925 13.11 1.7975 13.135 1.7975 13.135 1.3825 13.045 1.3825 ; + POLYGON 15.17 0.2175 15.17 0.9175 15.065 0.9175 15.065 0.9825 15.17 0.9825 15.17 1.6475 14.84 1.6475 14.84 1.7125 15.17 1.7125 15.17 2.2375 15.235 2.2375 15.235 0.2175 15.17 0.2175 ; + POLYGON 14.305 0.9275 14.305 1.1425 14.075 1.1425 14.075 1.015 13.94 1.015 13.94 1.4625 13.7 1.4625 13.7 1.6675 13.835 1.6675 13.835 1.5275 14.005 1.5275 14.005 1.2075 14.5 1.2075 14.5 0.9925 14.715 0.9925 14.715 1.1925 14.85 1.1925 14.85 1.1275 14.78 1.1275 14.78 0.9275 14.305 0.9275 ; + POLYGON 12.695 1.2675 12.695 2.405 12.6275 2.405 12.6275 2.535 15.3875 2.535 15.3875 2.405 15.05 2.405 15.05 1.9075 14.985 1.9075 14.985 2.405 14.15 2.405 14.15 1.7225 14.085 1.7225 14.085 2.405 13.585 2.405 13.585 2.2525 13.45 2.2525 13.45 2.405 12.76 2.405 12.76 1.2675 12.695 1.2675 ; + RECT 15.17 0.915 15.235 1.1275 ; + POLYGON 14.635 0.2275 14.635 0.5025 14.765 0.5025 14.765 0.7625 14.83 0.7625 14.83 0.4375 14.7 0.4375 14.7 0.2275 14.635 0.2275 ; + RECT 12.7725 1.0375 12.85 1.1725 ; + RECT 14.305 0.9275 14.5 1.2075 ; + POLYGON 12.915 1.1175 12.915 2.1875 13.82 2.1875 13.82 1.8625 13.755 1.8625 13.755 2.1225 12.98 2.1225 12.98 1.1825 13.065 1.1825 13.065 1.1175 12.915 1.1175 ; + POLYGON 12.6275 -0.065 12.6275 0.065 12.695 0.065 12.695 0.845 12.76 0.845 12.76 0.065 13.445 0.065 13.445 0.235 13.58 0.235 13.58 0.065 14.085 0.065 14.085 0.7925 14.15 0.7925 14.15 0.065 14.45 0.065 14.45 0.4675 14.515 0.4675 14.515 0.065 14.935 0.065 14.935 0.9875 15.0 0.9875 15.0 0.065 15.2875 0.065 15.2875 -0.065 12.6275 -0.065 ; + POLYGON 13.745 0.685 13.745 0.95 13.47 0.95 13.47 1.015 13.745 1.015 13.745 1.3975 13.81 1.3975 13.81 0.95 14.14 0.95 14.14 1.0775 14.205 1.0775 14.205 0.885 13.81 0.885 13.81 0.685 13.745 0.685 ; + POLYGON 14.58 1.0575 14.58 1.3225 15.03 1.3225 15.03 1.5175 14.83 1.5175 14.83 1.5825 15.095 1.5825 15.095 1.0575 14.93 1.0575 14.93 1.1925 15.03 1.1925 15.03 1.2575 14.645 1.2575 14.645 1.0575 14.58 1.0575 ; + RECT 14.855 1.7775 14.92 2.1275 ; + RECT 12.5275 2.405 15.2875 2.535 ; + POLYGON 13.075 0.465 13.075 0.845 13.14 0.845 13.14 0.53 13.74 0.53 13.74 0.465 13.075 0.465 ; + POLYGON 14.7 1.3875 14.7 2.1375 14.79 2.1375 14.79 1.8625 14.765 1.8625 14.765 1.4525 14.965 1.4525 14.965 1.3875 14.7 1.3875 ; + RECT 15.3875 -0.065 18.2475 0.065 ; + POLYGON 17.235 1.4425 17.235 2.2675 17.78 2.2675 17.78 2.2025 17.3 2.2025 17.3 1.8575 17.495 1.8575 17.495 1.4425 17.235 1.4425 ; + RECT 18.02 1.0475 18.0975 1.1825 ; + POLYGON 15.805 0.335 15.805 0.975 16.105 0.975 16.105 1.8625 16.035 1.8625 16.035 1.9275 16.17 1.9275 16.17 1.7975 16.76 1.7975 16.76 2.1475 16.825 2.1475 16.825 1.6575 17.105 1.6575 17.105 2.0725 17.17 2.0725 17.17 1.5925 16.76 1.5925 16.76 1.7325 16.17 1.7325 16.17 0.91 15.87 0.91 15.87 0.4 16.76 0.4 16.76 0.7925 16.825 0.7925 16.825 0.335 15.805 0.335 ; + RECT 17.435 0.5875 17.5 0.8625 ; + POLYGON 15.905 1.3825 15.905 2.0575 16.55 2.0575 16.55 1.9225 16.485 1.9225 16.485 1.9925 15.97 1.9925 15.97 1.7975 15.995 1.7975 15.995 1.3825 15.905 1.3825 ; + POLYGON 18.03 0.2175 18.03 0.9175 17.925 0.9175 17.925 0.9825 18.03 0.9825 18.03 1.6475 17.7 1.6475 17.7 1.7125 18.03 1.7125 18.03 2.2375 18.095 2.2375 18.095 0.2175 18.03 0.2175 ; + POLYGON 17.165 0.9275 17.165 1.1425 16.935 1.1425 16.935 1.015 16.8 1.015 16.8 1.4625 16.56 1.4625 16.56 1.6675 16.695 1.6675 16.695 1.5275 16.865 1.5275 16.865 1.2075 17.36 1.2075 17.36 0.9925 17.575 0.9925 17.575 1.1925 17.71 1.1925 17.71 1.1275 17.64 1.1275 17.64 0.9275 17.165 0.9275 ; + POLYGON 15.555 1.2675 15.555 2.405 15.4875 2.405 15.4875 2.535 18.2475 2.535 18.2475 2.405 17.91 2.405 17.91 1.9075 17.845 1.9075 17.845 2.405 17.01 2.405 17.01 1.7225 16.945 1.7225 16.945 2.405 16.445 2.405 16.445 2.2525 16.31 2.2525 16.31 2.405 15.62 2.405 15.62 1.2675 15.555 1.2675 ; + RECT 18.03 0.915 18.095 1.1275 ; + POLYGON 17.495 0.2275 17.495 0.5025 17.625 0.5025 17.625 0.7625 17.69 0.7625 17.69 0.4375 17.56 0.4375 17.56 0.2275 17.495 0.2275 ; + RECT 15.6325 1.0375 15.71 1.1725 ; + RECT 17.165 0.9275 17.36 1.2075 ; + POLYGON 15.775 1.1175 15.775 2.1875 16.68 2.1875 16.68 1.8625 16.615 1.8625 16.615 2.1225 15.84 2.1225 15.84 1.1825 15.925 1.1825 15.925 1.1175 15.775 1.1175 ; + POLYGON 15.4875 -0.065 15.4875 0.065 15.555 0.065 15.555 0.845 15.62 0.845 15.62 0.065 16.305 0.065 16.305 0.235 16.44 0.235 16.44 0.065 16.945 0.065 16.945 0.7925 17.01 0.7925 17.01 0.065 17.31 0.065 17.31 0.4675 17.375 0.4675 17.375 0.065 17.795 0.065 17.795 0.9875 17.86 0.9875 17.86 0.065 18.1475 0.065 18.1475 -0.065 15.4875 -0.065 ; + POLYGON 16.605 0.685 16.605 0.95 16.33 0.95 16.33 1.015 16.605 1.015 16.605 1.3975 16.67 1.3975 16.67 0.95 17.0 0.95 17.0 1.0775 17.065 1.0775 17.065 0.885 16.67 0.885 16.67 0.685 16.605 0.685 ; + POLYGON 17.44 1.0575 17.44 1.3225 17.89 1.3225 17.89 1.5175 17.69 1.5175 17.69 1.5825 17.955 1.5825 17.955 1.0575 17.79 1.0575 17.79 1.1925 17.89 1.1925 17.89 1.2575 17.505 1.2575 17.505 1.0575 17.44 1.0575 ; + RECT 17.715 1.7775 17.78 2.1275 ; + RECT 15.3875 2.405 18.1475 2.535 ; + POLYGON 15.935 0.465 15.935 0.845 16.0 0.845 16.0 0.53 16.6 0.53 16.6 0.465 15.935 0.465 ; + POLYGON 17.56 1.3875 17.56 2.1375 17.65 2.1375 17.65 1.8625 17.625 1.8625 17.625 1.4525 17.825 1.4525 17.825 1.3875 17.56 1.3875 ; LAYER metal2 ; - RECT 9430.0 34537.5 9500.0 34742.5 ; - RECT 9225.0 35497.5 9295.0 35702.5 ; - RECT 8815.0 33167.5 8885.0 33372.5 ; - RECT 8610.0 34312.5 8680.0 34517.5 ; - RECT 9020.0 31872.5 9090.0 32077.5 ; - RECT 8405.0 30437.5 8475.0 30642.5 ; - RECT 557.5 31462.5 627.5 31667.5 ; - RECT -140.0 30812.5 207.5 30882.5 ; - RECT 8405.0 67.5 8475.0 44035.0 ; - RECT 8610.0 67.5 8680.0 44035.0 ; - RECT 8815.0 67.5 8885.0 44035.0 ; - RECT 9020.0 67.5 9090.0 44035.0 ; - RECT 9225.0 67.5 9295.0 44035.0 ; - RECT 9430.0 67.5 9500.0 44035.0 ; - RECT 7585.0 5527.5 7655.0 19927.5 ; - RECT 7790.0 5527.5 7860.0 19927.5 ; - RECT 7995.0 5527.5 8065.0 19927.5 ; - RECT 8200.0 5527.5 8270.0 19927.5 ; - RECT 10092.5 41602.5 10162.5 42007.5 ; - RECT 10427.5 41602.5 10497.5 42007.5 ; - RECT 10797.5 41602.5 10867.5 42007.5 ; - RECT 11132.5 41602.5 11202.5 42007.5 ; - RECT 10260.0 1277.5 10330.0 1347.5 ; - RECT 10085.0 1277.5 10295.0 1347.5 ; - RECT 10260.0 1312.5 10330.0 1452.5 ; - RECT 10965.0 1277.5 11035.0 1347.5 ; - RECT 10790.0 1277.5 11000.0 1347.5 ; - RECT 10965.0 1312.5 11035.0 1452.5 ; - RECT 4987.5 41447.5 5057.5 41652.5 ; - RECT 9942.5 19927.5 10647.5 21272.5 ; - RECT 9942.5 22617.5 10647.5 21272.5 ; - RECT 9942.5 22617.5 10647.5 23962.5 ; - RECT 9942.5 25307.5 10647.5 23962.5 ; - RECT 9942.5 25307.5 10647.5 26652.5 ; - RECT 9942.5 27997.5 10647.5 26652.5 ; - RECT 9942.5 27997.5 10647.5 29342.5 ; - RECT 9942.5 30687.5 10647.5 29342.5 ; - RECT 9942.5 30687.5 10647.5 32032.5 ; - RECT 9942.5 33377.5 10647.5 32032.5 ; - RECT 9942.5 33377.5 10647.5 34722.5 ; - RECT 9942.5 36067.5 10647.5 34722.5 ; - RECT 9942.5 36067.5 10647.5 37412.5 ; - RECT 9942.5 38757.5 10647.5 37412.5 ; - RECT 9942.5 38757.5 10647.5 40102.5 ; - RECT 9942.5 41447.5 10647.5 40102.5 ; - RECT 10647.5 19927.5 11352.5 21272.5 ; - RECT 10647.5 22617.5 11352.5 21272.5 ; - RECT 10647.5 22617.5 11352.5 23962.5 ; - RECT 10647.5 25307.5 11352.5 23962.5 ; - RECT 10647.5 25307.5 11352.5 26652.5 ; - RECT 10647.5 27997.5 11352.5 26652.5 ; - RECT 10647.5 27997.5 11352.5 29342.5 ; - RECT 10647.5 30687.5 11352.5 29342.5 ; - RECT 10647.5 30687.5 11352.5 32032.5 ; - RECT 10647.5 33377.5 11352.5 32032.5 ; - RECT 10647.5 33377.5 11352.5 34722.5 ; - RECT 10647.5 36067.5 11352.5 34722.5 ; - RECT 10647.5 36067.5 11352.5 37412.5 ; - RECT 10647.5 38757.5 11352.5 37412.5 ; - RECT 10647.5 38757.5 11352.5 40102.5 ; - RECT 10647.5 41447.5 11352.5 40102.5 ; - RECT 10092.5 19827.5 10162.5 41602.5 ; - RECT 10427.5 19827.5 10497.5 41602.5 ; - RECT 10797.5 19827.5 10867.5 41602.5 ; - RECT 11132.5 19827.5 11202.5 41602.5 ; - RECT 9907.5 19827.5 9977.5 41602.5 ; - RECT 10612.5 19827.5 10682.5 41602.5 ; - RECT 11317.5 19827.5 11387.5 41602.5 ; - RECT 10092.5 42130.0 10170.0 42265.0 ; - RECT 10295.0 42130.0 10497.5 42265.0 ; - RECT 10092.5 42660.0 10170.0 42795.0 ; - RECT 10427.5 42660.0 10550.0 42795.0 ; - RECT 10102.5 42130.0 10172.5 42265.0 ; - RECT 10292.5 42130.0 10362.5 42265.0 ; - RECT 10102.5 42660.0 10172.5 42795.0 ; - RECT 10482.5 42660.0 10552.5 42795.0 ; - RECT 10092.5 42007.5 10162.5 43175.0 ; - RECT 10427.5 42007.5 10497.5 43175.0 ; - RECT 10797.5 42130.0 10875.0 42265.0 ; - RECT 11000.0 42130.0 11202.5 42265.0 ; - RECT 10797.5 42660.0 10875.0 42795.0 ; - RECT 11132.5 42660.0 11255.0 42795.0 ; - RECT 10807.5 42130.0 10877.5 42265.0 ; - RECT 10997.5 42130.0 11067.5 42265.0 ; - RECT 10807.5 42660.0 10877.5 42795.0 ; - RECT 11187.5 42660.0 11257.5 42795.0 ; - RECT 10797.5 42007.5 10867.5 43175.0 ; - RECT 11132.5 42007.5 11202.5 43175.0 ; - RECT 10092.5 42007.5 10162.5 43175.0 ; - RECT 10427.5 42007.5 10497.5 43175.0 ; - RECT 10797.5 42007.5 10867.5 43175.0 ; - RECT 11132.5 42007.5 11202.5 43175.0 ; - RECT 9942.5 15042.5 10647.5 19927.5 ; - RECT 10647.5 15042.5 11352.5 19927.5 ; - RECT 10092.5 15042.5 10162.5 19927.5 ; - RECT 10427.5 15042.5 10497.5 19127.5 ; - RECT 10797.5 15042.5 10867.5 19927.5 ; - RECT 11132.5 15042.5 11202.5 19127.5 ; - RECT 9942.5 10867.5 10647.5 15042.5 ; - RECT 10647.5 10867.5 11352.5 15042.5 ; - RECT 10260.0 10867.5 10330.0 11007.5 ; - RECT 10965.0 10867.5 11035.0 11007.5 ; - RECT 10092.5 14742.5 10162.5 15042.5 ; - RECT 10427.5 12602.5 10497.5 15042.5 ; - RECT 10797.5 14742.5 10867.5 15042.5 ; - RECT 11132.5 12602.5 11202.5 15042.5 ; - RECT 9942.5 4427.5 10647.5 10867.5 ; - RECT 11352.5 4427.5 10647.5 10867.5 ; - RECT 10260.0 4427.5 10330.0 4572.5 ; - RECT 10965.0 4427.5 11035.0 4572.5 ; - RECT 10260.0 10597.5 10330.0 10867.5 ; - RECT 10105.0 10180.0 10175.0 10867.5 ; - RECT 10965.0 10597.5 11035.0 10867.5 ; - RECT 11120.0 10180.0 11190.0 10867.5 ; - RECT 9907.5 4427.5 9977.5 10867.5 ; - RECT 10612.5 4427.5 10682.5 10867.5 ; - RECT 11317.5 4427.5 11387.5 10867.5 ; - RECT 9942.5 4427.5 10647.5 1452.5 ; - RECT 10647.5 4427.5 11352.5 1452.5 ; - RECT 10260.0 1692.5 10330.0 1452.5 ; - RECT 10965.0 1692.5 11035.0 1452.5 ; - RECT 10260.0 4427.5 10330.0 4077.5 ; - RECT 10965.0 4427.5 11035.0 4077.5 ; - RECT 1912.5 9167.5 1982.5 41447.5 ; - RECT 2087.5 9167.5 2157.5 41447.5 ; - RECT 2262.5 9167.5 2332.5 41447.5 ; - RECT 2437.5 9167.5 2507.5 41447.5 ; - RECT 2612.5 9167.5 2682.5 41447.5 ; - RECT 2787.5 9167.5 2857.5 41447.5 ; - RECT 2962.5 9167.5 3032.5 41447.5 ; - RECT 3137.5 9167.5 3207.5 41447.5 ; - RECT 5342.5 9167.5 5272.5 14407.5 ; - RECT 5067.5 9167.5 4997.5 14407.5 ; - RECT 5892.5 9167.5 5822.5 14407.5 ; - RECT 5617.5 9167.5 5547.5 14407.5 ; - RECT 4537.5 9772.5 4467.5 9842.5 ; - RECT 4347.5 9772.5 4277.5 9842.5 ; - RECT 4537.5 9807.5 4467.5 10170.0 ; - RECT 4502.5 9772.5 4312.5 9842.5 ; - RECT 4347.5 9465.0 4277.5 9807.5 ; - RECT 4537.5 10170.0 4467.5 10305.0 ; - RECT 4347.5 9330.0 4277.5 9465.0 ; - RECT 4245.0 9772.5 4380.0 9842.5 ; - RECT 4537.5 11252.5 4467.5 11182.5 ; - RECT 4347.5 11252.5 4277.5 11182.5 ; - RECT 4537.5 11217.5 4467.5 10855.0 ; - RECT 4502.5 11252.5 4312.5 11182.5 ; - RECT 4347.5 11560.0 4277.5 11217.5 ; - RECT 4537.5 10855.0 4467.5 10720.0 ; - RECT 4347.5 11695.0 4277.5 11560.0 ; - RECT 4245.0 11252.5 4380.0 11182.5 ; - RECT 4537.5 12462.5 4467.5 12532.5 ; - RECT 4347.5 12462.5 4277.5 12532.5 ; - RECT 4537.5 12497.5 4467.5 12860.0 ; - RECT 4502.5 12462.5 4312.5 12532.5 ; - RECT 4347.5 12155.0 4277.5 12497.5 ; - RECT 4537.5 12860.0 4467.5 12995.0 ; - RECT 4347.5 12020.0 4277.5 12155.0 ; - RECT 4245.0 12462.5 4380.0 12532.5 ; - RECT 4537.5 13942.5 4467.5 13872.5 ; - RECT 4347.5 13942.5 4277.5 13872.5 ; - RECT 4537.5 13907.5 4467.5 13545.0 ; - RECT 4502.5 13942.5 4312.5 13872.5 ; - RECT 4347.5 14250.0 4277.5 13907.5 ; - RECT 4537.5 13545.0 4467.5 13410.0 ; - RECT 4347.5 14385.0 4277.5 14250.0 ; - RECT 4245.0 13942.5 4380.0 13872.5 ; - RECT 5790.0 10282.5 5925.0 10352.5 ; - RECT 7175.0 9760.0 7310.0 9830.0 ; - RECT 5515.0 11627.5 5650.0 11697.5 ; - RECT 6900.0 11195.0 7035.0 11265.0 ; - RECT 7175.0 11957.5 7310.0 12027.5 ; - RECT 5240.0 11957.5 5375.0 12027.5 ; - RECT 6900.0 13302.5 7035.0 13372.5 ; - RECT 4965.0 13302.5 5100.0 13372.5 ; - RECT 5790.0 9772.5 5925.0 9842.5 ; - RECT 5515.0 9557.5 5650.0 9627.5 ; - RECT 5240.0 11182.5 5375.0 11252.5 ; - RECT 5515.0 11397.5 5650.0 11467.5 ; - RECT 5790.0 12462.5 5925.0 12532.5 ; - RECT 4965.0 12247.5 5100.0 12317.5 ; - RECT 5240.0 13872.5 5375.0 13942.5 ; - RECT 4965.0 14087.5 5100.0 14157.5 ; - RECT 7277.5 9167.5 7207.5 14407.5 ; - RECT 7002.5 9167.5 6932.5 14407.5 ; - RECT 5342.5 14547.5 5272.5 19787.5 ; - RECT 5067.5 14547.5 4997.5 19787.5 ; - RECT 5892.5 14547.5 5822.5 19787.5 ; - RECT 5617.5 14547.5 5547.5 19787.5 ; - RECT 4537.5 15152.5 4467.5 15222.5 ; - RECT 4347.5 15152.5 4277.5 15222.5 ; - RECT 4537.5 15187.5 4467.5 15550.0 ; - RECT 4502.5 15152.5 4312.5 15222.5 ; - RECT 4347.5 14845.0 4277.5 15187.5 ; - RECT 4537.5 15550.0 4467.5 15685.0 ; - RECT 4347.5 14710.0 4277.5 14845.0 ; - RECT 4245.0 15152.5 4380.0 15222.5 ; - RECT 4537.5 16632.5 4467.5 16562.5 ; - RECT 4347.5 16632.5 4277.5 16562.5 ; - RECT 4537.5 16597.5 4467.5 16235.0 ; - RECT 4502.5 16632.5 4312.5 16562.5 ; - RECT 4347.5 16940.0 4277.5 16597.5 ; - RECT 4537.5 16235.0 4467.5 16100.0 ; - RECT 4347.5 17075.0 4277.5 16940.0 ; - RECT 4245.0 16632.5 4380.0 16562.5 ; - RECT 4537.5 17842.5 4467.5 17912.5 ; - RECT 4347.5 17842.5 4277.5 17912.5 ; - RECT 4537.5 17877.5 4467.5 18240.0 ; - RECT 4502.5 17842.5 4312.5 17912.5 ; - RECT 4347.5 17535.0 4277.5 17877.5 ; - RECT 4537.5 18240.0 4467.5 18375.0 ; - RECT 4347.5 17400.0 4277.5 17535.0 ; - RECT 4245.0 17842.5 4380.0 17912.5 ; - RECT 4537.5 19322.5 4467.5 19252.5 ; - RECT 4347.5 19322.5 4277.5 19252.5 ; - RECT 4537.5 19287.5 4467.5 18925.0 ; - RECT 4502.5 19322.5 4312.5 19252.5 ; - RECT 4347.5 19630.0 4277.5 19287.5 ; - RECT 4537.5 18925.0 4467.5 18790.0 ; - RECT 4347.5 19765.0 4277.5 19630.0 ; - RECT 4245.0 19322.5 4380.0 19252.5 ; - RECT 5790.0 15662.5 5925.0 15732.5 ; - RECT 7175.0 15140.0 7310.0 15210.0 ; - RECT 5515.0 17007.5 5650.0 17077.5 ; - RECT 6900.0 16575.0 7035.0 16645.0 ; - RECT 7175.0 17337.5 7310.0 17407.5 ; - RECT 5240.0 17337.5 5375.0 17407.5 ; - RECT 6900.0 18682.5 7035.0 18752.5 ; - RECT 4965.0 18682.5 5100.0 18752.5 ; - RECT 5790.0 15152.5 5925.0 15222.5 ; - RECT 5515.0 14937.5 5650.0 15007.5 ; - RECT 5240.0 16562.5 5375.0 16632.5 ; - RECT 5515.0 16777.5 5650.0 16847.5 ; - RECT 5790.0 17842.5 5925.0 17912.5 ; - RECT 4965.0 17627.5 5100.0 17697.5 ; - RECT 5240.0 19252.5 5375.0 19322.5 ; - RECT 4965.0 19467.5 5100.0 19537.5 ; - RECT 7277.5 14547.5 7207.5 19787.5 ; - RECT 7002.5 14547.5 6932.5 19787.5 ; - RECT 3567.5 20532.5 3637.5 20602.5 ; - RECT 3757.5 20532.5 3827.5 20602.5 ; - RECT 3567.5 20567.5 3637.5 20930.0 ; - RECT 3602.5 20532.5 3792.5 20602.5 ; - RECT 3757.5 20225.0 3827.5 20567.5 ; - RECT 3567.5 20930.0 3637.5 21065.0 ; - RECT 3757.5 20090.0 3827.5 20225.0 ; - RECT 3860.0 20532.5 3725.0 20602.5 ; - RECT 3567.5 22012.5 3637.5 21942.5 ; - RECT 3757.5 22012.5 3827.5 21942.5 ; - RECT 3567.5 21977.5 3637.5 21615.0 ; - RECT 3602.5 22012.5 3792.5 21942.5 ; - RECT 3757.5 22320.0 3827.5 21977.5 ; - RECT 3567.5 21615.0 3637.5 21480.0 ; - RECT 3757.5 22455.0 3827.5 22320.0 ; - RECT 3860.0 22012.5 3725.0 21942.5 ; - RECT 3567.5 23222.5 3637.5 23292.5 ; - RECT 3757.5 23222.5 3827.5 23292.5 ; - RECT 3567.5 23257.5 3637.5 23620.0 ; - RECT 3602.5 23222.5 3792.5 23292.5 ; - RECT 3757.5 22915.0 3827.5 23257.5 ; - RECT 3567.5 23620.0 3637.5 23755.0 ; - RECT 3757.5 22780.0 3827.5 22915.0 ; - RECT 3860.0 23222.5 3725.0 23292.5 ; - RECT 3567.5 24702.5 3637.5 24632.5 ; - RECT 3757.5 24702.5 3827.5 24632.5 ; - RECT 3567.5 24667.5 3637.5 24305.0 ; - RECT 3602.5 24702.5 3792.5 24632.5 ; - RECT 3757.5 25010.0 3827.5 24667.5 ; - RECT 3567.5 24305.0 3637.5 24170.0 ; - RECT 3757.5 25145.0 3827.5 25010.0 ; - RECT 3860.0 24702.5 3725.0 24632.5 ; - RECT 3567.5 25912.5 3637.5 25982.5 ; - RECT 3757.5 25912.5 3827.5 25982.5 ; - RECT 3567.5 25947.5 3637.5 26310.0 ; - RECT 3602.5 25912.5 3792.5 25982.5 ; - RECT 3757.5 25605.0 3827.5 25947.5 ; - RECT 3567.5 26310.0 3637.5 26445.0 ; - RECT 3757.5 25470.0 3827.5 25605.0 ; - RECT 3860.0 25912.5 3725.0 25982.5 ; - RECT 3567.5 27392.5 3637.5 27322.5 ; - RECT 3757.5 27392.5 3827.5 27322.5 ; - RECT 3567.5 27357.5 3637.5 26995.0 ; - RECT 3602.5 27392.5 3792.5 27322.5 ; - RECT 3757.5 27700.0 3827.5 27357.5 ; - RECT 3567.5 26995.0 3637.5 26860.0 ; - RECT 3757.5 27835.0 3827.5 27700.0 ; - RECT 3860.0 27392.5 3725.0 27322.5 ; - RECT 3567.5 28602.5 3637.5 28672.5 ; - RECT 3757.5 28602.5 3827.5 28672.5 ; - RECT 3567.5 28637.5 3637.5 29000.0 ; - RECT 3602.5 28602.5 3792.5 28672.5 ; - RECT 3757.5 28295.0 3827.5 28637.5 ; - RECT 3567.5 29000.0 3637.5 29135.0 ; - RECT 3757.5 28160.0 3827.5 28295.0 ; - RECT 3860.0 28602.5 3725.0 28672.5 ; - RECT 3567.5 30082.5 3637.5 30012.5 ; - RECT 3757.5 30082.5 3827.5 30012.5 ; - RECT 3567.5 30047.5 3637.5 29685.0 ; - RECT 3602.5 30082.5 3792.5 30012.5 ; - RECT 3757.5 30390.0 3827.5 30047.5 ; - RECT 3567.5 29685.0 3637.5 29550.0 ; - RECT 3757.5 30525.0 3827.5 30390.0 ; - RECT 3860.0 30082.5 3725.0 30012.5 ; - RECT 3567.5 31292.5 3637.5 31362.5 ; - RECT 3757.5 31292.5 3827.5 31362.5 ; - RECT 3567.5 31327.5 3637.5 31690.0 ; - RECT 3602.5 31292.5 3792.5 31362.5 ; - RECT 3757.5 30985.0 3827.5 31327.5 ; - RECT 3567.5 31690.0 3637.5 31825.0 ; - RECT 3757.5 30850.0 3827.5 30985.0 ; - RECT 3860.0 31292.5 3725.0 31362.5 ; - RECT 3567.5 32772.5 3637.5 32702.5 ; - RECT 3757.5 32772.5 3827.5 32702.5 ; - RECT 3567.5 32737.5 3637.5 32375.0 ; - RECT 3602.5 32772.5 3792.5 32702.5 ; - RECT 3757.5 33080.0 3827.5 32737.5 ; - RECT 3567.5 32375.0 3637.5 32240.0 ; - RECT 3757.5 33215.0 3827.5 33080.0 ; - RECT 3860.0 32772.5 3725.0 32702.5 ; - RECT 3567.5 33982.5 3637.5 34052.5 ; - RECT 3757.5 33982.5 3827.5 34052.5 ; - RECT 3567.5 34017.5 3637.5 34380.0 ; - RECT 3602.5 33982.5 3792.5 34052.5 ; - RECT 3757.5 33675.0 3827.5 34017.5 ; - RECT 3567.5 34380.0 3637.5 34515.0 ; - RECT 3757.5 33540.0 3827.5 33675.0 ; - RECT 3860.0 33982.5 3725.0 34052.5 ; - RECT 3567.5 35462.5 3637.5 35392.5 ; - RECT 3757.5 35462.5 3827.5 35392.5 ; - RECT 3567.5 35427.5 3637.5 35065.0 ; - RECT 3602.5 35462.5 3792.5 35392.5 ; - RECT 3757.5 35770.0 3827.5 35427.5 ; - RECT 3567.5 35065.0 3637.5 34930.0 ; - RECT 3757.5 35905.0 3827.5 35770.0 ; - RECT 3860.0 35462.5 3725.0 35392.5 ; - RECT 3567.5 36672.5 3637.5 36742.5 ; - RECT 3757.5 36672.5 3827.5 36742.5 ; - RECT 3567.5 36707.5 3637.5 37070.0 ; - RECT 3602.5 36672.5 3792.5 36742.5 ; - RECT 3757.5 36365.0 3827.5 36707.5 ; - RECT 3567.5 37070.0 3637.5 37205.0 ; - RECT 3757.5 36230.0 3827.5 36365.0 ; - RECT 3860.0 36672.5 3725.0 36742.5 ; - RECT 3567.5 38152.5 3637.5 38082.5 ; - RECT 3757.5 38152.5 3827.5 38082.5 ; - RECT 3567.5 38117.5 3637.5 37755.0 ; - RECT 3602.5 38152.5 3792.5 38082.5 ; - RECT 3757.5 38460.0 3827.5 38117.5 ; - RECT 3567.5 37755.0 3637.5 37620.0 ; - RECT 3757.5 38595.0 3827.5 38460.0 ; - RECT 3860.0 38152.5 3725.0 38082.5 ; - RECT 3567.5 39362.5 3637.5 39432.5 ; - RECT 3757.5 39362.5 3827.5 39432.5 ; - RECT 3567.5 39397.5 3637.5 39760.0 ; - RECT 3602.5 39362.5 3792.5 39432.5 ; - RECT 3757.5 39055.0 3827.5 39397.5 ; - RECT 3567.5 39760.0 3637.5 39895.0 ; - RECT 3757.5 38920.0 3827.5 39055.0 ; - RECT 3860.0 39362.5 3725.0 39432.5 ; - RECT 3567.5 40842.5 3637.5 40772.5 ; - RECT 3757.5 40842.5 3827.5 40772.5 ; - RECT 3567.5 40807.5 3637.5 40445.0 ; - RECT 3602.5 40842.5 3792.5 40772.5 ; - RECT 3757.5 41150.0 3827.5 40807.5 ; - RECT 3567.5 40445.0 3637.5 40310.0 ; - RECT 3757.5 41285.0 3827.5 41150.0 ; - RECT 3860.0 40842.5 3725.0 40772.5 ; - RECT 2015.0 9760.0 1880.0 9830.0 ; - RECT 2190.0 11195.0 2055.0 11265.0 ; - RECT 2365.0 12450.0 2230.0 12520.0 ; - RECT 2540.0 13885.0 2405.0 13955.0 ; - RECT 2715.0 15140.0 2580.0 15210.0 ; - RECT 2890.0 16575.0 2755.0 16645.0 ; - RECT 3065.0 17830.0 2930.0 17900.0 ; - RECT 3240.0 19265.0 3105.0 19335.0 ; - RECT 2015.0 20532.5 1880.0 20602.5 ; - RECT 2715.0 20317.5 2580.0 20387.5 ; - RECT 2015.0 21942.5 1880.0 22012.5 ; - RECT 2890.0 22157.5 2755.0 22227.5 ; - RECT 2015.0 23222.5 1880.0 23292.5 ; - RECT 3065.0 23007.5 2930.0 23077.5 ; - RECT 2015.0 24632.5 1880.0 24702.5 ; - RECT 3240.0 24847.5 3105.0 24917.5 ; - RECT 2190.0 25912.5 2055.0 25982.5 ; - RECT 2715.0 25697.5 2580.0 25767.5 ; - RECT 2190.0 27322.5 2055.0 27392.5 ; - RECT 2890.0 27537.5 2755.0 27607.5 ; - RECT 2190.0 28602.5 2055.0 28672.5 ; - RECT 3065.0 28387.5 2930.0 28457.5 ; - RECT 2190.0 30012.5 2055.0 30082.5 ; - RECT 3240.0 30227.5 3105.0 30297.5 ; - RECT 2365.0 31292.5 2230.0 31362.5 ; - RECT 2715.0 31077.5 2580.0 31147.5 ; - RECT 2365.0 32702.5 2230.0 32772.5 ; - RECT 2890.0 32917.5 2755.0 32987.5 ; - RECT 2365.0 33982.5 2230.0 34052.5 ; - RECT 3065.0 33767.5 2930.0 33837.5 ; - RECT 2365.0 35392.5 2230.0 35462.5 ; - RECT 3240.0 35607.5 3105.0 35677.5 ; - RECT 2540.0 36672.5 2405.0 36742.5 ; - RECT 2715.0 36457.5 2580.0 36527.5 ; - RECT 2540.0 38082.5 2405.0 38152.5 ; - RECT 2890.0 38297.5 2755.0 38367.5 ; - RECT 2540.0 39362.5 2405.0 39432.5 ; - RECT 3065.0 39147.5 2930.0 39217.5 ; - RECT 2540.0 40772.5 2405.0 40842.5 ; - RECT 3240.0 40987.5 3105.0 41057.5 ; - RECT 7207.5 9167.5 7277.5 14407.5 ; - RECT 6932.5 9167.5 7002.5 14407.5 ; - RECT 7207.5 14547.5 7277.5 19787.5 ; - RECT 6932.5 14547.5 7002.5 19787.5 ; - RECT 5127.5 20317.5 5197.5 20387.5 ; - RECT 5127.5 20282.5 5197.5 20352.5 ; - RECT 5162.5 20317.5 6125.0 20387.5 ; - RECT 5127.5 22157.5 5197.5 22227.5 ; - RECT 5127.5 22192.5 5197.5 22262.5 ; - RECT 5162.5 22157.5 6125.0 22227.5 ; - RECT 5127.5 23007.5 5197.5 23077.5 ; - RECT 5127.5 22972.5 5197.5 23042.5 ; - RECT 5162.5 23007.5 6125.0 23077.5 ; - RECT 5127.5 24847.5 5197.5 24917.5 ; - RECT 5127.5 24882.5 5197.5 24952.5 ; - RECT 5162.5 24847.5 6125.0 24917.5 ; - RECT 5127.5 25697.5 5197.5 25767.5 ; - RECT 5127.5 25662.5 5197.5 25732.5 ; - RECT 5162.5 25697.5 6125.0 25767.5 ; - RECT 5127.5 27537.5 5197.5 27607.5 ; - RECT 5127.5 27572.5 5197.5 27642.5 ; - RECT 5162.5 27537.5 6125.0 27607.5 ; - RECT 5127.5 28387.5 5197.5 28457.5 ; - RECT 5127.5 28352.5 5197.5 28422.5 ; - RECT 5162.5 28387.5 6125.0 28457.5 ; - RECT 5127.5 30227.5 5197.5 30297.5 ; - RECT 5127.5 30262.5 5197.5 30332.5 ; - RECT 5162.5 30227.5 6125.0 30297.5 ; - RECT 5127.5 31077.5 5197.5 31147.5 ; - RECT 5127.5 31042.5 5197.5 31112.5 ; - RECT 5162.5 31077.5 6125.0 31147.5 ; - RECT 5127.5 32917.5 5197.5 32987.5 ; - RECT 5127.5 32952.5 5197.5 33022.5 ; - RECT 5162.5 32917.5 6125.0 32987.5 ; - RECT 5127.5 33767.5 5197.5 33837.5 ; - RECT 5127.5 33732.5 5197.5 33802.5 ; - RECT 5162.5 33767.5 6125.0 33837.5 ; - RECT 5127.5 35607.5 5197.5 35677.5 ; - RECT 5127.5 35642.5 5197.5 35712.5 ; - RECT 5162.5 35607.5 6125.0 35677.5 ; - RECT 5127.5 36457.5 5197.5 36527.5 ; - RECT 5127.5 36422.5 5197.5 36492.5 ; - RECT 5162.5 36457.5 6125.0 36527.5 ; - RECT 5127.5 38297.5 5197.5 38367.5 ; - RECT 5127.5 38332.5 5197.5 38402.5 ; - RECT 5162.5 38297.5 6125.0 38367.5 ; - RECT 5127.5 39147.5 5197.5 39217.5 ; - RECT 5127.5 39112.5 5197.5 39182.5 ; - RECT 5162.5 39147.5 6125.0 39217.5 ; - RECT 5127.5 40987.5 5197.5 41057.5 ; - RECT 5127.5 41022.5 5197.5 41092.5 ; - RECT 5162.5 40987.5 6125.0 41057.5 ; - RECT 6062.5 20532.5 6132.5 20602.5 ; - RECT 6252.5 20532.5 6322.5 20602.5 ; - RECT 6062.5 20567.5 6132.5 20930.0 ; - RECT 6097.5 20532.5 6287.5 20602.5 ; - RECT 6252.5 20225.0 6322.5 20567.5 ; - RECT 6062.5 20930.0 6132.5 21065.0 ; - RECT 6252.5 20090.0 6322.5 20225.0 ; - RECT 6355.0 20532.5 6220.0 20602.5 ; - RECT 4987.5 20487.5 5057.5 20622.5 ; - RECT 5127.5 20215.0 5197.5 20350.0 ; - RECT 6125.0 20317.5 5990.0 20387.5 ; - RECT 6062.5 22012.5 6132.5 21942.5 ; - RECT 6252.5 22012.5 6322.5 21942.5 ; - RECT 6062.5 21977.5 6132.5 21615.0 ; - RECT 6097.5 22012.5 6287.5 21942.5 ; - RECT 6252.5 22320.0 6322.5 21977.5 ; - RECT 6062.5 21615.0 6132.5 21480.0 ; - RECT 6252.5 22455.0 6322.5 22320.0 ; - RECT 6355.0 22012.5 6220.0 21942.5 ; - RECT 4987.5 21922.5 5057.5 22057.5 ; - RECT 5127.5 22195.0 5197.5 22330.0 ; - RECT 6125.0 22157.5 5990.0 22227.5 ; - RECT 6062.5 23222.5 6132.5 23292.5 ; - RECT 6252.5 23222.5 6322.5 23292.5 ; - RECT 6062.5 23257.5 6132.5 23620.0 ; - RECT 6097.5 23222.5 6287.5 23292.5 ; - RECT 6252.5 22915.0 6322.5 23257.5 ; - RECT 6062.5 23620.0 6132.5 23755.0 ; - RECT 6252.5 22780.0 6322.5 22915.0 ; - RECT 6355.0 23222.5 6220.0 23292.5 ; - RECT 4987.5 23177.5 5057.5 23312.5 ; - RECT 5127.5 22905.0 5197.5 23040.0 ; - RECT 6125.0 23007.5 5990.0 23077.5 ; - RECT 6062.5 24702.5 6132.5 24632.5 ; - RECT 6252.5 24702.5 6322.5 24632.5 ; - RECT 6062.5 24667.5 6132.5 24305.0 ; - RECT 6097.5 24702.5 6287.5 24632.5 ; - RECT 6252.5 25010.0 6322.5 24667.5 ; - RECT 6062.5 24305.0 6132.5 24170.0 ; - RECT 6252.5 25145.0 6322.5 25010.0 ; - RECT 6355.0 24702.5 6220.0 24632.5 ; - RECT 4987.5 24612.5 5057.5 24747.5 ; - RECT 5127.5 24885.0 5197.5 25020.0 ; - RECT 6125.0 24847.5 5990.0 24917.5 ; - RECT 6062.5 25912.5 6132.5 25982.5 ; - RECT 6252.5 25912.5 6322.5 25982.5 ; - RECT 6062.5 25947.5 6132.5 26310.0 ; - RECT 6097.5 25912.5 6287.5 25982.5 ; - RECT 6252.5 25605.0 6322.5 25947.5 ; - RECT 6062.5 26310.0 6132.5 26445.0 ; - RECT 6252.5 25470.0 6322.5 25605.0 ; - RECT 6355.0 25912.5 6220.0 25982.5 ; - RECT 4987.5 25867.5 5057.5 26002.5 ; - RECT 5127.5 25595.0 5197.5 25730.0 ; - RECT 6125.0 25697.5 5990.0 25767.5 ; - RECT 6062.5 27392.5 6132.5 27322.5 ; - RECT 6252.5 27392.5 6322.5 27322.5 ; - RECT 6062.5 27357.5 6132.5 26995.0 ; - RECT 6097.5 27392.5 6287.5 27322.5 ; - RECT 6252.5 27700.0 6322.5 27357.5 ; - RECT 6062.5 26995.0 6132.5 26860.0 ; - RECT 6252.5 27835.0 6322.5 27700.0 ; - RECT 6355.0 27392.5 6220.0 27322.5 ; - RECT 4987.5 27302.5 5057.5 27437.5 ; - RECT 5127.5 27575.0 5197.5 27710.0 ; - RECT 6125.0 27537.5 5990.0 27607.5 ; - RECT 6062.5 28602.5 6132.5 28672.5 ; - RECT 6252.5 28602.5 6322.5 28672.5 ; - RECT 6062.5 28637.5 6132.5 29000.0 ; - RECT 6097.5 28602.5 6287.5 28672.5 ; - RECT 6252.5 28295.0 6322.5 28637.5 ; - RECT 6062.5 29000.0 6132.5 29135.0 ; - RECT 6252.5 28160.0 6322.5 28295.0 ; - RECT 6355.0 28602.5 6220.0 28672.5 ; - RECT 4987.5 28557.5 5057.5 28692.5 ; - RECT 5127.5 28285.0 5197.5 28420.0 ; - RECT 6125.0 28387.5 5990.0 28457.5 ; - RECT 6062.5 30082.5 6132.5 30012.5 ; - RECT 6252.5 30082.5 6322.5 30012.5 ; - RECT 6062.5 30047.5 6132.5 29685.0 ; - RECT 6097.5 30082.5 6287.5 30012.5 ; - RECT 6252.5 30390.0 6322.5 30047.5 ; - RECT 6062.5 29685.0 6132.5 29550.0 ; - RECT 6252.5 30525.0 6322.5 30390.0 ; - RECT 6355.0 30082.5 6220.0 30012.5 ; - RECT 4987.5 29992.5 5057.5 30127.5 ; - RECT 5127.5 30265.0 5197.5 30400.0 ; - RECT 6125.0 30227.5 5990.0 30297.5 ; - RECT 6062.5 31292.5 6132.5 31362.5 ; - RECT 6252.5 31292.5 6322.5 31362.5 ; - RECT 6062.5 31327.5 6132.5 31690.0 ; - RECT 6097.5 31292.5 6287.5 31362.5 ; - RECT 6252.5 30985.0 6322.5 31327.5 ; - RECT 6062.5 31690.0 6132.5 31825.0 ; - RECT 6252.5 30850.0 6322.5 30985.0 ; - RECT 6355.0 31292.5 6220.0 31362.5 ; - RECT 4987.5 31247.5 5057.5 31382.5 ; - RECT 5127.5 30975.0 5197.5 31110.0 ; - RECT 6125.0 31077.5 5990.0 31147.5 ; - RECT 6062.5 32772.5 6132.5 32702.5 ; - RECT 6252.5 32772.5 6322.5 32702.5 ; - RECT 6062.5 32737.5 6132.5 32375.0 ; - RECT 6097.5 32772.5 6287.5 32702.5 ; - RECT 6252.5 33080.0 6322.5 32737.5 ; - RECT 6062.5 32375.0 6132.5 32240.0 ; - RECT 6252.5 33215.0 6322.5 33080.0 ; - RECT 6355.0 32772.5 6220.0 32702.5 ; - RECT 4987.5 32682.5 5057.5 32817.5 ; - RECT 5127.5 32955.0 5197.5 33090.0 ; - RECT 6125.0 32917.5 5990.0 32987.5 ; - RECT 6062.5 33982.5 6132.5 34052.5 ; - RECT 6252.5 33982.5 6322.5 34052.5 ; - RECT 6062.5 34017.5 6132.5 34380.0 ; - RECT 6097.5 33982.5 6287.5 34052.5 ; - RECT 6252.5 33675.0 6322.5 34017.5 ; - RECT 6062.5 34380.0 6132.5 34515.0 ; - RECT 6252.5 33540.0 6322.5 33675.0 ; - RECT 6355.0 33982.5 6220.0 34052.5 ; - RECT 4987.5 33937.5 5057.5 34072.5 ; - RECT 5127.5 33665.0 5197.5 33800.0 ; - RECT 6125.0 33767.5 5990.0 33837.5 ; - RECT 6062.5 35462.5 6132.5 35392.5 ; - RECT 6252.5 35462.5 6322.5 35392.5 ; - RECT 6062.5 35427.5 6132.5 35065.0 ; - RECT 6097.5 35462.5 6287.5 35392.5 ; - RECT 6252.5 35770.0 6322.5 35427.5 ; - RECT 6062.5 35065.0 6132.5 34930.0 ; - RECT 6252.5 35905.0 6322.5 35770.0 ; - RECT 6355.0 35462.5 6220.0 35392.5 ; - RECT 4987.5 35372.5 5057.5 35507.5 ; - RECT 5127.5 35645.0 5197.5 35780.0 ; - RECT 6125.0 35607.5 5990.0 35677.5 ; - RECT 6062.5 36672.5 6132.5 36742.5 ; - RECT 6252.5 36672.5 6322.5 36742.5 ; - RECT 6062.5 36707.5 6132.5 37070.0 ; - RECT 6097.5 36672.5 6287.5 36742.5 ; - RECT 6252.5 36365.0 6322.5 36707.5 ; - RECT 6062.5 37070.0 6132.5 37205.0 ; - RECT 6252.5 36230.0 6322.5 36365.0 ; - RECT 6355.0 36672.5 6220.0 36742.5 ; - RECT 4987.5 36627.5 5057.5 36762.5 ; - RECT 5127.5 36355.0 5197.5 36490.0 ; - RECT 6125.0 36457.5 5990.0 36527.5 ; - RECT 6062.5 38152.5 6132.5 38082.5 ; - RECT 6252.5 38152.5 6322.5 38082.5 ; - RECT 6062.5 38117.5 6132.5 37755.0 ; - RECT 6097.5 38152.5 6287.5 38082.5 ; - RECT 6252.5 38460.0 6322.5 38117.5 ; - RECT 6062.5 37755.0 6132.5 37620.0 ; - RECT 6252.5 38595.0 6322.5 38460.0 ; - RECT 6355.0 38152.5 6220.0 38082.5 ; - RECT 4987.5 38062.5 5057.5 38197.5 ; - RECT 5127.5 38335.0 5197.5 38470.0 ; - RECT 6125.0 38297.5 5990.0 38367.5 ; - RECT 6062.5 39362.5 6132.5 39432.5 ; - RECT 6252.5 39362.5 6322.5 39432.5 ; - RECT 6062.5 39397.5 6132.5 39760.0 ; - RECT 6097.5 39362.5 6287.5 39432.5 ; - RECT 6252.5 39055.0 6322.5 39397.5 ; - RECT 6062.5 39760.0 6132.5 39895.0 ; - RECT 6252.5 38920.0 6322.5 39055.0 ; - RECT 6355.0 39362.5 6220.0 39432.5 ; - RECT 4987.5 39317.5 5057.5 39452.5 ; - RECT 5127.5 39045.0 5197.5 39180.0 ; - RECT 6125.0 39147.5 5990.0 39217.5 ; - RECT 6062.5 40842.5 6132.5 40772.5 ; - RECT 6252.5 40842.5 6322.5 40772.5 ; - RECT 6062.5 40807.5 6132.5 40445.0 ; - RECT 6097.5 40842.5 6287.5 40772.5 ; - RECT 6252.5 41150.0 6322.5 40807.5 ; - RECT 6062.5 40445.0 6132.5 40310.0 ; - RECT 6252.5 41285.0 6322.5 41150.0 ; - RECT 6355.0 40842.5 6220.0 40772.5 ; - RECT 4987.5 40752.5 5057.5 40887.5 ; - RECT 5127.5 41025.0 5197.5 41160.0 ; - RECT 6125.0 40987.5 5990.0 41057.5 ; - RECT 4987.5 19927.5 5057.5 41447.5 ; - RECT 837.5 8757.5 7277.5 8052.5 ; - RECT 837.5 7347.5 7277.5 8052.5 ; - RECT 837.5 7347.5 7277.5 6642.5 ; - RECT 837.5 5937.5 7277.5 6642.5 ; - RECT 837.5 8440.0 982.5 8370.0 ; - RECT 837.5 7735.0 982.5 7665.0 ; - RECT 837.5 7030.0 982.5 6960.0 ; - RECT 837.5 6325.0 982.5 6255.0 ; - RECT 7007.5 8440.0 7277.5 8370.0 ; - RECT 6590.0 8595.0 7277.5 8525.0 ; - RECT 7007.5 7735.0 7277.5 7665.0 ; - RECT 6590.0 7580.0 7277.5 7510.0 ; - RECT 7007.5 7030.0 7277.5 6960.0 ; - RECT 6590.0 7185.0 7277.5 7115.0 ; - RECT 7007.5 6325.0 7277.5 6255.0 ; - RECT 6590.0 6170.0 7277.5 6100.0 ; - RECT 837.5 8792.5 7277.5 8722.5 ; - RECT 837.5 8087.5 7277.5 8017.5 ; - RECT 837.5 7382.5 7277.5 7312.5 ; - RECT 837.5 6677.5 7277.5 6607.5 ; - RECT 837.5 5972.5 7277.5 5902.5 ; - RECT 35.0 -3.5527136788e-12 380.0 415.0 ; - RECT 35.0 43302.5 380.0 43717.5 ; - RECT 11515.0 -3.5527136788e-12 11860.0 415.0 ; - RECT 11515.0 43302.5 11860.0 43717.5 ; - RECT 420.0 385.0 765.0 800.0 ; - RECT 420.0 43687.5 765.0 44102.5 ; - RECT 11900.0 385.0 12245.0 800.0 ; - RECT 11900.0 43687.5 12245.0 44102.5 ; - RECT 10050.0 1277.5 10120.0 1412.5 ; - RECT 10755.0 1277.5 10825.0 1412.5 ; - RECT 10260.0 67.5 10330.0 202.5 ; - RECT 10965.0 67.5 11035.0 202.5 ; - RECT 7277.5 9337.5 7142.5 9407.5 ; - RECT 7687.5 9337.5 7552.5 9407.5 ; - RECT 7002.5 10682.5 6867.5 10752.5 ; - RECT 7892.5 10682.5 7757.5 10752.5 ; - RECT 7277.5 14717.5 7142.5 14787.5 ; - RECT 8097.5 14717.5 7962.5 14787.5 ; - RECT 7002.5 16062.5 6867.5 16132.5 ; - RECT 8302.5 16062.5 8167.5 16132.5 ; - RECT 415.0 9132.5 -8.881784197e-13 9202.5 ; - RECT 415.0 11822.5 -8.881784197e-13 11892.5 ; - RECT 415.0 14512.5 -8.881784197e-13 14582.5 ; - RECT 415.0 17202.5 -8.881784197e-13 17272.5 ; - RECT 800.0 10477.5 385.0 10547.5 ; - RECT 800.0 13167.5 385.0 13237.5 ; - RECT 800.0 15857.5 385.0 15927.5 ; - RECT 800.0 18547.5 385.0 18617.5 ; - RECT 7345.0 8370.0 7210.0 8440.0 ; - RECT 7687.5 8370.0 7552.5 8440.0 ; - RECT 7345.0 7665.0 7210.0 7735.0 ; - RECT 7892.5 7665.0 7757.5 7735.0 ; - RECT 7345.0 6960.0 7210.0 7030.0 ; - RECT 8097.5 6960.0 7962.5 7030.0 ; - RECT 7345.0 6255.0 7210.0 6325.0 ; - RECT 8302.5 6255.0 8167.5 6325.0 ; - RECT 972.5 8722.5 837.5 8792.5 ; - RECT 415.0 8722.5 -8.881784197e-13 8792.5 ; - RECT 972.5 8017.5 837.5 8087.5 ; - RECT 415.0 8017.5 -8.881784197e-13 8087.5 ; - RECT 972.5 7312.5 837.5 7382.5 ; - RECT 415.0 7312.5 -8.881784197e-13 7382.5 ; - RECT 972.5 6607.5 837.5 6677.5 ; - RECT 415.0 6607.5 -8.881784197e-13 6677.5 ; - RECT 972.5 5902.5 837.5 5972.5 ; - RECT 415.0 5902.5 -8.881784197e-13 5972.5 ; - RECT 800.0 5697.5 385.0 5767.5 ; - RECT 800.0 5697.5 385.0 5767.5 ; - RECT 800.0 5697.5 385.0 5767.5 ; - RECT 800.0 5697.5 385.0 5767.5 ; - RECT 9122.5 4630.0 8987.5 4700.0 ; - RECT 8712.5 2445.0 8577.5 2515.0 ; - RECT 8917.5 3992.5 8782.5 4062.5 ; - RECT 9122.5 42422.5 8987.5 42492.5 ; - RECT 9327.5 11132.5 9192.5 11202.5 ; - RECT 9532.5 15157.5 9397.5 15227.5 ; - RECT 8507.5 8927.5 8372.5 8997.5 ; - RECT 5090.0 41617.5 4955.0 41687.5 ; - RECT 8507.5 41617.5 8372.5 41687.5 ; - RECT 12280.0 43107.5 11865.0 43177.5 ; - RECT 12280.0 19730.0 11865.0 19800.0 ; - RECT 12280.0 11262.5 11865.0 11332.5 ; - RECT 12280.0 7635.0 11865.0 7705.0 ; - RECT 12280.0 10595.0 11865.0 10665.0 ; - RECT 12280.0 5645.0 11865.0 5715.0 ; - RECT 12280.0 8605.0 11865.0 8675.0 ; - RECT 12280.0 2575.0 11865.0 2645.0 ; - RECT 800.0 21237.5 385.0 21307.5 ; - RECT 12280.0 21237.5 11865.0 21307.5 ; - RECT 800.0 23927.5 385.0 23997.5 ; - RECT 12280.0 23927.5 11865.0 23997.5 ; - RECT 800.0 26617.5 385.0 26687.5 ; - RECT 12280.0 26617.5 11865.0 26687.5 ; - RECT 800.0 29307.5 385.0 29377.5 ; - RECT 12280.0 29307.5 11865.0 29377.5 ; - RECT 800.0 31997.5 385.0 32067.5 ; - RECT 12280.0 31997.5 11865.0 32067.5 ; - RECT 800.0 34687.5 385.0 34757.5 ; - RECT 12280.0 34687.5 11865.0 34757.5 ; - RECT 800.0 37377.5 385.0 37447.5 ; - RECT 12280.0 37377.5 11865.0 37447.5 ; - RECT 800.0 40067.5 385.0 40137.5 ; - RECT 12280.0 40067.5 11865.0 40137.5 ; - RECT 11895.0 3862.5 11480.0 3932.5 ; - RECT 11895.0 15287.5 11480.0 15357.5 ; - RECT 11895.0 4790.0 11480.0 4860.0 ; - RECT 11895.0 12065.0 11480.0 12135.0 ; - RECT 415.0 19892.5 -8.881784197e-13 19962.5 ; - RECT 415.0 22582.5 -8.881784197e-13 22652.5 ; - RECT 415.0 25272.5 -8.881784197e-13 25342.5 ; - RECT 415.0 27962.5 -8.881784197e-13 28032.5 ; - RECT 415.0 30652.5 -8.881784197e-13 30722.5 ; - RECT 415.0 33342.5 -8.881784197e-13 33412.5 ; - RECT 415.0 36032.5 -8.881784197e-13 36102.5 ; - RECT 415.0 38722.5 -8.881784197e-13 38792.5 ; - RECT 415.0 41412.5 -8.881784197e-13 41482.5 ; - RECT 10260.0 67.5 10330.0 207.5 ; - RECT 10965.0 67.5 11035.0 207.5 ; - RECT 9430.0 67.5 9500.0 44035.0 ; - RECT 9225.0 67.5 9295.0 44035.0 ; - RECT 8610.0 67.5 8680.0 44035.0 ; - RECT 8815.0 67.5 8885.0 44035.0 ; - RECT 9020.0 67.5 9090.0 44035.0 ; - RECT 8405.0 67.5 8475.0 44035.0 ; - RECT 452.5 67.5 732.5 44035.0 ; - RECT 11932.5 67.5 12212.5 44035.0 ; - RECT 67.5 67.5 347.5 44035.0 ; - RECT 11547.5 67.5 11827.5 44035.0 ; - RECT -140.0 31017.5 -4175.0 31087.5 ; - RECT -140.0 31222.5 -4175.0 31292.5 ; - RECT -140.0 31427.5 -4175.0 31497.5 ; - RECT -140.0 31837.5 -4175.0 31907.5 ; - RECT -752.5 26527.5 -1485.0 26597.5 ; - RECT -1655.0 23995.0 -1725.0 30642.5 ; - RECT -140.0 30812.5 -345.0 30882.5 ; - RECT -1280.0 31632.5 -1485.0 31702.5 ; - RECT -2625.0 30812.5 -2830.0 30882.5 ; - RECT -3970.0 31632.5 -4175.0 31702.5 ; - RECT -4010.0 23757.5 -3305.0 30197.5 ; - RECT -2600.0 23757.5 -3305.0 30197.5 ; - RECT -2600.0 23757.5 -1895.0 30197.5 ; - RECT -3692.5 23757.5 -3622.5 23902.5 ; - RECT -2987.5 23757.5 -2917.5 23902.5 ; - RECT -2282.5 23757.5 -2212.5 23902.5 ; - RECT -3692.5 29927.5 -3622.5 30197.5 ; - RECT -3847.5 29510.0 -3777.5 30197.5 ; - RECT -2987.5 29927.5 -2917.5 30197.5 ; - RECT -2832.5 29510.0 -2762.5 30197.5 ; - RECT -2282.5 29927.5 -2212.5 30197.5 ; - RECT -2437.5 29510.0 -2367.5 30197.5 ; - RECT -4045.0 23757.5 -3975.0 30197.5 ; - RECT -3340.0 23757.5 -3270.0 30197.5 ; - RECT -2635.0 23757.5 -2565.0 30197.5 ; - RECT -1930.0 23757.5 -1860.0 30197.5 ; - RECT -437.5 33087.5 -1142.5 33157.5 ; - RECT -792.5 32707.5 -862.5 32777.5 ; - RECT -792.5 33087.5 -862.5 33157.5 ; - RECT -827.5 32707.5 -1142.5 32777.5 ; - RECT -792.5 32742.5 -862.5 33122.5 ; - RECT -437.5 33087.5 -827.5 33157.5 ; - RECT -1142.5 32707.5 -1277.5 32777.5 ; - RECT -1142.5 33087.5 -1277.5 33157.5 ; - RECT -302.5 33087.5 -437.5 33157.5 ; - RECT -760.0 33087.5 -895.0 33157.5 ; - RECT -2280.0 32897.5 -2210.0 32967.5 ; - RECT -2245.0 32897.5 -1895.0 32967.5 ; - RECT -2280.0 32932.5 -2210.0 33002.5 ; - RECT -2680.0 32897.5 -2610.0 32967.5 ; - RECT -2680.0 32775.0 -2610.0 32932.5 ; - RECT -2645.0 32897.5 -2245.0 32967.5 ; - RECT -1895.0 32897.5 -1760.0 32967.5 ; - RECT -2680.0 32810.0 -2610.0 32675.0 ; - RECT -2280.0 33070.0 -2210.0 32935.0 ; - RECT -2225.0 33852.5 -2155.0 33922.5 ; - RECT -2225.0 34042.5 -2155.0 34112.5 ; - RECT -2190.0 33852.5 -1827.5 33922.5 ; - RECT -2225.0 33887.5 -2155.0 34077.5 ; - RECT -2532.5 34042.5 -2190.0 34112.5 ; - RECT -1827.5 33852.5 -1692.5 33922.5 ; - RECT -2667.5 34042.5 -2532.5 34112.5 ; - RECT -2225.0 34145.0 -2155.0 34010.0 ; - RECT -3127.5 33647.5 -3832.5 33717.5 ; - RECT -3482.5 33267.5 -3552.5 33337.5 ; - RECT -3482.5 33647.5 -3552.5 33717.5 ; - RECT -3517.5 33267.5 -3832.5 33337.5 ; - RECT -3482.5 33302.5 -3552.5 33682.5 ; - RECT -3127.5 33647.5 -3517.5 33717.5 ; - RECT -3832.5 33267.5 -3967.5 33337.5 ; - RECT -3832.5 33647.5 -3967.5 33717.5 ; - RECT -2992.5 33647.5 -3127.5 33717.5 ; - RECT -3450.0 33647.5 -3585.0 33717.5 ; - RECT -3777.5 30265.0 -3847.5 30130.0 ; - RECT -3777.5 31940.0 -3847.5 31805.0 ; - RECT -3622.5 30265.0 -3692.5 30130.0 ; - RECT -3622.5 31120.0 -3692.5 30985.0 ; - RECT -2762.5 30265.0 -2832.5 30130.0 ; - RECT -2762.5 31325.0 -2832.5 31190.0 ; - RECT -2367.5 30265.0 -2437.5 30130.0 ; - RECT -2367.5 31530.0 -2437.5 31395.0 ; - RECT -3975.0 30265.0 -4045.0 30130.0 ; - RECT -3975.0 30915.0 -4045.0 30780.0 ; - RECT -3270.0 30265.0 -3340.0 30130.0 ; - RECT -3270.0 30915.0 -3340.0 30780.0 ; - RECT -2565.0 30265.0 -2635.0 30130.0 ; - RECT -2565.0 30915.0 -2635.0 30780.0 ; - RECT -1860.0 30265.0 -1930.0 30130.0 ; - RECT -1860.0 30915.0 -1930.0 30780.0 ; - RECT -2795.0 36422.5 -2865.0 44172.5 ; - RECT -3205.0 36422.5 -3275.0 43862.5 ; - RECT -3910.0 36422.5 -3980.0 43862.5 ; - RECT -2967.5 36590.0 -3037.5 37187.5 ; - RECT -3390.0 36590.0 -3460.0 36870.0 ; - RECT -802.5 38985.0 -732.5 39380.0 ; - RECT -802.5 39380.0 -732.5 39940.0 ; - RECT -802.5 39940.0 -732.5 40500.0 ; - RECT -802.5 40665.0 -732.5 41060.0 ; - RECT -802.5 41060.0 -732.5 41620.0 ; - RECT -802.5 41620.0 -732.5 42180.0 ; - RECT -1520.0 42310.0 -1450.0 42380.0 ; - RECT -1520.0 41830.0 -1450.0 41900.0 ; - RECT -1485.0 42310.0 -767.5 42380.0 ; - RECT -1520.0 41865.0 -1450.0 42345.0 ; - RECT -2202.5 41830.0 -1485.0 41900.0 ; - RECT -2237.5 41305.0 -2167.5 41865.0 ; - RECT -2237.5 40745.0 -2167.5 41305.0 ; - RECT -2237.5 40185.0 -2167.5 40580.0 ; - RECT -2237.5 39625.0 -2167.5 40185.0 ; - RECT -2237.5 39065.0 -2167.5 39625.0 ; - RECT -835.0 39345.0 -700.0 39415.0 ; - RECT -835.0 39905.0 -700.0 39975.0 ; - RECT -835.0 40465.0 -700.0 40535.0 ; - RECT -835.0 41025.0 -700.0 41095.0 ; - RECT -835.0 41585.0 -700.0 41655.0 ; - RECT -835.0 42145.0 -700.0 42215.0 ; - RECT -2270.0 41830.0 -2135.0 41900.0 ; - RECT -2270.0 41270.0 -2135.0 41340.0 ; - RECT -2270.0 40710.0 -2135.0 40780.0 ; - RECT -2270.0 40150.0 -2135.0 40220.0 ; - RECT -2270.0 39590.0 -2135.0 39660.0 ; - RECT -2270.0 39030.0 -2135.0 39100.0 ; - RECT -835.0 38950.0 -700.0 39020.0 ; - RECT -835.0 40630.0 -700.0 40700.0 ; - RECT -835.0 42310.0 -700.0 42380.0 ; - RECT -2270.0 40545.0 -2135.0 40615.0 ; - RECT -3240.0 38327.5 -3950.0 36982.5 ; - RECT -3240.0 38327.5 -3945.0 39672.5 ; - RECT -3240.0 41017.5 -3945.0 39672.5 ; - RECT -3240.0 41017.5 -3945.0 42362.5 ; - RECT -3240.0 43707.5 -3945.0 42362.5 ; - RECT -3390.0 38227.5 -3460.0 43862.5 ; - RECT -3725.0 38227.5 -3795.0 43862.5 ; - RECT -3205.0 38227.5 -3275.0 43862.5 ; - RECT -3910.0 38227.5 -3980.0 43862.5 ; - RECT -2827.5 38400.0 -2897.5 38535.0 ; - RECT -2827.5 40810.0 -2897.5 40945.0 ; - RECT -2827.5 41090.0 -2897.5 41225.0 ; - RECT -2827.5 43500.0 -2897.5 43635.0 ; - RECT -2830.0 38662.5 -2900.0 38797.5 ; - RECT -2795.0 36287.5 -2865.0 36422.5 ; - RECT -3307.5 36387.5 -3172.5 36457.5 ; - RECT -4012.5 36387.5 -3877.5 36457.5 ; - RECT -3070.0 37152.5 -2935.0 37222.5 ; - RECT -3070.0 36555.0 -2935.0 36625.0 ; - RECT -3492.5 36555.0 -3357.5 36625.0 ; - RECT -717.5 30710.0 -787.5 30575.0 ; - RECT -717.5 26630.0 -787.5 26495.0 ; - RECT -1450.0 26630.0 -1520.0 26495.0 ; - RECT -1450.0 32145.0 -1520.0 32010.0 ; - RECT -1655.0 24062.5 -1725.0 23927.5 ; - RECT -2210.0 30710.0 -2280.0 30575.0 ; - RECT -2425.0 31120.0 -2495.0 30985.0 ; - RECT -2155.0 33657.5 -2225.0 33522.5 ; - RECT -2155.0 33657.5 -2225.0 33522.5 ; - RECT -2155.0 32145.0 -2225.0 32010.0 ; - RECT -2370.0 33915.0 -2440.0 33780.0 ; - RECT -2370.0 33915.0 -2440.0 33780.0 ; - RECT -2370.0 31940.0 -2440.0 31805.0 ; - RECT -792.5 32145.0 -862.5 32010.0 ; - RECT -652.5 31940.0 -722.5 31805.0 ; - RECT -512.5 31325.0 -582.5 31190.0 ; - RECT -3482.5 32145.0 -3552.5 32010.0 ; - RECT -3342.5 31325.0 -3412.5 31190.0 ; - RECT -3202.5 31530.0 -3272.5 31395.0 ; - RECT -2177.5 33337.5 -2312.5 33407.5 ; - RECT -2122.5 34482.5 -2257.5 34552.5 ; - RECT -3390.0 35667.5 -3525.0 35737.5 ; - RECT -2135.0 34707.5 -2270.0 34777.5 ; - RECT -105.0 30915.0 -175.0 30780.0 ; - RECT -1450.0 31735.0 -1520.0 31600.0 ; - RECT -2795.0 30915.0 -2865.0 30780.0 ; - RECT -4140.0 31735.0 -4210.0 31600.0 ; - RECT -140.0 34707.5 -2202.5 34777.5 ; - RECT -140.0 35667.5 -3457.5 35737.5 ; - RECT -140.0 33337.5 -2245.0 33407.5 ; - RECT -140.0 34482.5 -2190.0 34552.5 ; - RECT -140.0 32042.5 -4175.0 32112.5 ; - RECT -140.0 30607.5 -4175.0 30677.5 ; - RECT -140.0 31632.5 -4175.0 31702.5 ; - RECT -140.0 30812.5 -4175.0 30882.5 ; - RECT 9532.5 34707.5 9397.5 34777.5 ; - RECT -140.0 34707.5 -275.0 34777.5 ; - RECT 9327.5 35667.5 9192.5 35737.5 ; - RECT -140.0 35667.5 -275.0 35737.5 ; - RECT 8917.5 33337.5 8782.5 33407.5 ; - RECT -140.0 33337.5 -275.0 33407.5 ; - RECT 8712.5 34482.5 8577.5 34552.5 ; - RECT -140.0 34482.5 -275.0 34552.5 ; - RECT 9122.5 32042.5 8987.5 32112.5 ; - RECT -140.0 32042.5 -275.0 32112.5 ; - RECT 8507.5 30607.5 8372.5 30677.5 ; - RECT -140.0 30607.5 -275.0 30677.5 ; - RECT 660.0 31632.5 525.0 31702.5 ; - RECT -140.0 31632.5 -275.0 31702.5 ; + RECT 22.05 22.725 22.11 22.7825 ; + RECT 21.34 23.5 21.41 23.635 ; + RECT 21.525 22.65 21.595 24.195 ; + RECT 22.0125 22.715 22.1475 22.785 ; + RECT 22.045 22.65 22.115 24.195 ; + RECT 21.34 22.65 21.41 24.195 ; + RECT 21.79 23.0075 21.86 23.1425 ; + RECT 22.045 22.7175 22.115 24.1275 ; + RECT 21.595 23.0075 21.665 23.1425 ; + RECT 21.5325 22.725 21.5875 22.7775 ; + RECT 21.6875 24.0275 21.7575 24.1625 ; + RECT 21.345 22.72 21.405 22.7775 ; + RECT 22.045 23.5 22.115 23.635 ; + RECT 21.3075 22.715 21.4425 22.785 ; + RECT 21.8675 22.7175 21.925 22.7775 ; + RECT 21.86 22.65 21.93 24.195 ; + RECT 22.05 25.465 22.11 25.4075 ; + RECT 21.34 24.69 21.41 24.555 ; + RECT 21.525 25.54 21.595 23.995 ; + RECT 22.0125 25.475 22.1475 25.405 ; + RECT 22.045 25.54 22.115 23.995 ; + RECT 21.34 25.54 21.41 23.995 ; + RECT 21.79 25.1825 21.86 25.0475 ; + RECT 22.045 25.4725 22.115 24.0625 ; + RECT 21.595 25.1825 21.665 25.0475 ; + RECT 21.5325 25.465 21.5875 25.4125 ; + RECT 21.6875 24.1625 21.7575 24.0275 ; + RECT 21.345 25.47 21.405 25.4125 ; + RECT 22.045 24.69 22.115 24.555 ; + RECT 21.3075 25.475 21.4425 25.405 ; + RECT 21.8675 25.4725 21.925 25.4125 ; + RECT 21.86 25.54 21.93 23.995 ; + RECT 22.05 25.415 22.11 25.4725 ; + RECT 21.34 26.19 21.41 26.325 ; + RECT 21.525 25.34 21.595 26.885 ; + RECT 22.0125 25.405 22.1475 25.475 ; + RECT 22.045 25.34 22.115 26.885 ; + RECT 21.34 25.34 21.41 26.885 ; + RECT 21.79 25.6975 21.86 25.8325 ; + RECT 22.045 25.4075 22.115 26.8175 ; + RECT 21.595 25.6975 21.665 25.8325 ; + RECT 21.5325 25.415 21.5875 25.4675 ; + RECT 21.6875 26.7175 21.7575 26.8525 ; + RECT 21.345 25.41 21.405 25.4675 ; + RECT 22.045 26.19 22.115 26.325 ; + RECT 21.3075 25.405 21.4425 25.475 ; + RECT 21.8675 25.4075 21.925 25.4675 ; + RECT 21.86 25.34 21.93 26.885 ; + RECT 22.05 28.155 22.11 28.0975 ; + RECT 21.34 27.38 21.41 27.245 ; + RECT 21.525 28.23 21.595 26.685 ; + RECT 22.0125 28.165 22.1475 28.095 ; + RECT 22.045 28.23 22.115 26.685 ; + RECT 21.34 28.23 21.41 26.685 ; + RECT 21.79 27.8725 21.86 27.7375 ; + RECT 22.045 28.1625 22.115 26.7525 ; + RECT 21.595 27.8725 21.665 27.7375 ; + RECT 21.5325 28.155 21.5875 28.1025 ; + RECT 21.6875 26.8525 21.7575 26.7175 ; + RECT 21.345 28.16 21.405 28.1025 ; + RECT 22.045 27.38 22.115 27.245 ; + RECT 21.3075 28.165 21.4425 28.095 ; + RECT 21.8675 28.1625 21.925 28.1025 ; + RECT 21.86 28.23 21.93 26.685 ; + RECT 22.05 28.105 22.11 28.1625 ; + RECT 21.34 28.88 21.41 29.015 ; + RECT 21.525 28.03 21.595 29.575 ; + RECT 22.0125 28.095 22.1475 28.165 ; + RECT 22.045 28.03 22.115 29.575 ; + RECT 21.34 28.03 21.41 29.575 ; + RECT 21.79 28.3875 21.86 28.5225 ; + RECT 22.045 28.0975 22.115 29.5075 ; + RECT 21.595 28.3875 21.665 28.5225 ; + RECT 21.5325 28.105 21.5875 28.1575 ; + RECT 21.6875 29.4075 21.7575 29.5425 ; + RECT 21.345 28.1 21.405 28.1575 ; + RECT 22.045 28.88 22.115 29.015 ; + RECT 21.3075 28.095 21.4425 28.165 ; + RECT 21.8675 28.0975 21.925 28.1575 ; + RECT 21.86 28.03 21.93 29.575 ; + RECT 22.05 30.845 22.11 30.7875 ; + RECT 21.34 30.07 21.41 29.935 ; + RECT 21.525 30.92 21.595 29.375 ; + RECT 22.0125 30.855 22.1475 30.785 ; + RECT 22.045 30.92 22.115 29.375 ; + RECT 21.34 30.92 21.41 29.375 ; + RECT 21.79 30.5625 21.86 30.4275 ; + RECT 22.045 30.8525 22.115 29.4425 ; + RECT 21.595 30.5625 21.665 30.4275 ; + RECT 21.5325 30.845 21.5875 30.7925 ; + RECT 21.6875 29.5425 21.7575 29.4075 ; + RECT 21.345 30.85 21.405 30.7925 ; + RECT 22.045 30.07 22.115 29.935 ; + RECT 21.3075 30.855 21.4425 30.785 ; + RECT 21.8675 30.8525 21.925 30.7925 ; + RECT 21.86 30.92 21.93 29.375 ; + RECT 22.05 30.795 22.11 30.8525 ; + RECT 21.34 31.57 21.41 31.705 ; + RECT 21.525 30.72 21.595 32.265 ; + RECT 22.0125 30.785 22.1475 30.855 ; + RECT 22.045 30.72 22.115 32.265 ; + RECT 21.34 30.72 21.41 32.265 ; + RECT 21.79 31.0775 21.86 31.2125 ; + RECT 22.045 30.7875 22.115 32.1975 ; + RECT 21.595 31.0775 21.665 31.2125 ; + RECT 21.5325 30.795 21.5875 30.8475 ; + RECT 21.6875 32.0975 21.7575 32.2325 ; + RECT 21.345 30.79 21.405 30.8475 ; + RECT 22.045 31.57 22.115 31.705 ; + RECT 21.3075 30.785 21.4425 30.855 ; + RECT 21.8675 30.7875 21.925 30.8475 ; + RECT 21.86 30.72 21.93 32.265 ; + RECT 22.05 33.535 22.11 33.4775 ; + RECT 21.34 32.76 21.41 32.625 ; + RECT 21.525 33.61 21.595 32.065 ; + RECT 22.0125 33.545 22.1475 33.475 ; + RECT 22.045 33.61 22.115 32.065 ; + RECT 21.34 33.61 21.41 32.065 ; + RECT 21.79 33.2525 21.86 33.1175 ; + RECT 22.045 33.5425 22.115 32.1325 ; + RECT 21.595 33.2525 21.665 33.1175 ; + RECT 21.5325 33.535 21.5875 33.4825 ; + RECT 21.6875 32.2325 21.7575 32.0975 ; + RECT 21.345 33.54 21.405 33.4825 ; + RECT 22.045 32.76 22.115 32.625 ; + RECT 21.3075 33.545 21.4425 33.475 ; + RECT 21.8675 33.5425 21.925 33.4825 ; + RECT 21.86 33.61 21.93 32.065 ; + RECT 22.05 33.485 22.11 33.5425 ; + RECT 21.34 34.26 21.41 34.395 ; + RECT 21.525 33.41 21.595 34.955 ; + RECT 22.0125 33.475 22.1475 33.545 ; + RECT 22.045 33.41 22.115 34.955 ; + RECT 21.34 33.41 21.41 34.955 ; + RECT 21.79 33.7675 21.86 33.9025 ; + RECT 22.045 33.4775 22.115 34.8875 ; + RECT 21.595 33.7675 21.665 33.9025 ; + RECT 21.5325 33.485 21.5875 33.5375 ; + RECT 21.6875 34.7875 21.7575 34.9225 ; + RECT 21.345 33.48 21.405 33.5375 ; + RECT 22.045 34.26 22.115 34.395 ; + RECT 21.3075 33.475 21.4425 33.545 ; + RECT 21.8675 33.4775 21.925 33.5375 ; + RECT 21.86 33.41 21.93 34.955 ; + RECT 22.05 36.225 22.11 36.1675 ; + RECT 21.34 35.45 21.41 35.315 ; + RECT 21.525 36.3 21.595 34.755 ; + RECT 22.0125 36.235 22.1475 36.165 ; + RECT 22.045 36.3 22.115 34.755 ; + RECT 21.34 36.3 21.41 34.755 ; + RECT 21.79 35.9425 21.86 35.8075 ; + RECT 22.045 36.2325 22.115 34.8225 ; + RECT 21.595 35.9425 21.665 35.8075 ; + RECT 21.5325 36.225 21.5875 36.1725 ; + RECT 21.6875 34.9225 21.7575 34.7875 ; + RECT 21.345 36.23 21.405 36.1725 ; + RECT 22.045 35.45 22.115 35.315 ; + RECT 21.3075 36.235 21.4425 36.165 ; + RECT 21.8675 36.2325 21.925 36.1725 ; + RECT 21.86 36.3 21.93 34.755 ; + RECT 22.05 36.175 22.11 36.2325 ; + RECT 21.34 36.95 21.41 37.085 ; + RECT 21.525 36.1 21.595 37.645 ; + RECT 22.0125 36.165 22.1475 36.235 ; + RECT 22.045 36.1 22.115 37.645 ; + RECT 21.34 36.1 21.41 37.645 ; + RECT 21.79 36.4575 21.86 36.5925 ; + RECT 22.045 36.1675 22.115 37.5775 ; + RECT 21.595 36.4575 21.665 36.5925 ; + RECT 21.5325 36.175 21.5875 36.2275 ; + RECT 21.6875 37.4775 21.7575 37.6125 ; + RECT 21.345 36.17 21.405 36.2275 ; + RECT 22.045 36.95 22.115 37.085 ; + RECT 21.3075 36.165 21.4425 36.235 ; + RECT 21.8675 36.1675 21.925 36.2275 ; + RECT 21.86 36.1 21.93 37.645 ; + RECT 22.05 38.915 22.11 38.8575 ; + RECT 21.34 38.14 21.41 38.005 ; + RECT 21.525 38.99 21.595 37.445 ; + RECT 22.0125 38.925 22.1475 38.855 ; + RECT 22.045 38.99 22.115 37.445 ; + RECT 21.34 38.99 21.41 37.445 ; + RECT 21.79 38.6325 21.86 38.4975 ; + RECT 22.045 38.9225 22.115 37.5125 ; + RECT 21.595 38.6325 21.665 38.4975 ; + RECT 21.5325 38.915 21.5875 38.8625 ; + RECT 21.6875 37.6125 21.7575 37.4775 ; + RECT 21.345 38.92 21.405 38.8625 ; + RECT 22.045 38.14 22.115 38.005 ; + RECT 21.3075 38.925 21.4425 38.855 ; + RECT 21.8675 38.9225 21.925 38.8625 ; + RECT 21.86 38.99 21.93 37.445 ; + RECT 22.05 38.865 22.11 38.9225 ; + RECT 21.34 39.64 21.41 39.775 ; + RECT 21.525 38.79 21.595 40.335 ; + RECT 22.0125 38.855 22.1475 38.925 ; + RECT 22.045 38.79 22.115 40.335 ; + RECT 21.34 38.79 21.41 40.335 ; + RECT 21.79 39.1475 21.86 39.2825 ; + RECT 22.045 38.8575 22.115 40.2675 ; + RECT 21.595 39.1475 21.665 39.2825 ; + RECT 21.5325 38.865 21.5875 38.9175 ; + RECT 21.6875 40.1675 21.7575 40.3025 ; + RECT 21.345 38.86 21.405 38.9175 ; + RECT 22.045 39.64 22.115 39.775 ; + RECT 21.3075 38.855 21.4425 38.925 ; + RECT 21.8675 38.8575 21.925 38.9175 ; + RECT 21.86 38.79 21.93 40.335 ; + RECT 22.05 41.605 22.11 41.5475 ; + RECT 21.34 40.83 21.41 40.695 ; + RECT 21.525 41.68 21.595 40.135 ; + RECT 22.0125 41.615 22.1475 41.545 ; + RECT 22.045 41.68 22.115 40.135 ; + RECT 21.34 41.68 21.41 40.135 ; + RECT 21.79 41.3225 21.86 41.1875 ; + RECT 22.045 41.6125 22.115 40.2025 ; + RECT 21.595 41.3225 21.665 41.1875 ; + RECT 21.5325 41.605 21.5875 41.5525 ; + RECT 21.6875 40.3025 21.7575 40.1675 ; + RECT 21.345 41.61 21.405 41.5525 ; + RECT 22.045 40.83 22.115 40.695 ; + RECT 21.3075 41.615 21.4425 41.545 ; + RECT 21.8675 41.6125 21.925 41.5525 ; + RECT 21.86 41.68 21.93 40.135 ; + RECT 22.05 41.555 22.11 41.6125 ; + RECT 21.34 42.33 21.41 42.465 ; + RECT 21.525 41.48 21.595 43.025 ; + RECT 22.0125 41.545 22.1475 41.615 ; + RECT 22.045 41.48 22.115 43.025 ; + RECT 21.34 41.48 21.41 43.025 ; + RECT 21.79 41.8375 21.86 41.9725 ; + RECT 22.045 41.5475 22.115 42.9575 ; + RECT 21.595 41.8375 21.665 41.9725 ; + RECT 21.5325 41.555 21.5875 41.6075 ; + RECT 21.6875 42.8575 21.7575 42.9925 ; + RECT 21.345 41.55 21.405 41.6075 ; + RECT 22.045 42.33 22.115 42.465 ; + RECT 21.3075 41.545 21.4425 41.615 ; + RECT 21.8675 41.5475 21.925 41.6075 ; + RECT 21.86 41.48 21.93 43.025 ; + RECT 22.05 44.295 22.11 44.2375 ; + RECT 21.34 43.52 21.41 43.385 ; + RECT 21.525 44.37 21.595 42.825 ; + RECT 22.0125 44.305 22.1475 44.235 ; + RECT 22.045 44.37 22.115 42.825 ; + RECT 21.34 44.37 21.41 42.825 ; + RECT 21.79 44.0125 21.86 43.8775 ; + RECT 22.045 44.3025 22.115 42.8925 ; + RECT 21.595 44.0125 21.665 43.8775 ; + RECT 21.5325 44.295 21.5875 44.2425 ; + RECT 21.6875 42.9925 21.7575 42.8575 ; + RECT 21.345 44.3 21.405 44.2425 ; + RECT 22.045 43.52 22.115 43.385 ; + RECT 21.3075 44.305 21.4425 44.235 ; + RECT 21.8675 44.3025 21.925 44.2425 ; + RECT 21.86 44.37 21.93 42.825 ; + RECT 22.755 22.725 22.815 22.7825 ; + RECT 22.045 23.5 22.115 23.635 ; + RECT 22.23 22.65 22.3 24.195 ; + RECT 22.7175 22.715 22.8525 22.785 ; + RECT 22.75 22.65 22.82 24.195 ; + RECT 22.045 22.65 22.115 24.195 ; + RECT 22.495 23.0075 22.565 23.1425 ; + RECT 22.75 22.7175 22.82 24.1275 ; + RECT 22.3 23.0075 22.37 23.1425 ; + RECT 22.2375 22.725 22.2925 22.7775 ; + RECT 22.3925 24.0275 22.4625 24.1625 ; + RECT 22.05 22.72 22.11 22.7775 ; + RECT 22.75 23.5 22.82 23.635 ; + RECT 22.0125 22.715 22.1475 22.785 ; + RECT 22.5725 22.7175 22.63 22.7775 ; + RECT 22.565 22.65 22.635 24.195 ; + RECT 22.755 25.465 22.815 25.4075 ; + RECT 22.045 24.69 22.115 24.555 ; + RECT 22.23 25.54 22.3 23.995 ; + RECT 22.7175 25.475 22.8525 25.405 ; + RECT 22.75 25.54 22.82 23.995 ; + RECT 22.045 25.54 22.115 23.995 ; + RECT 22.495 25.1825 22.565 25.0475 ; + RECT 22.75 25.4725 22.82 24.0625 ; + RECT 22.3 25.1825 22.37 25.0475 ; + RECT 22.2375 25.465 22.2925 25.4125 ; + RECT 22.3925 24.1625 22.4625 24.0275 ; + RECT 22.05 25.47 22.11 25.4125 ; + RECT 22.75 24.69 22.82 24.555 ; + RECT 22.0125 25.475 22.1475 25.405 ; + RECT 22.5725 25.4725 22.63 25.4125 ; + RECT 22.565 25.54 22.635 23.995 ; + RECT 22.755 25.415 22.815 25.4725 ; + RECT 22.045 26.19 22.115 26.325 ; + RECT 22.23 25.34 22.3 26.885 ; + RECT 22.7175 25.405 22.8525 25.475 ; + RECT 22.75 25.34 22.82 26.885 ; + RECT 22.045 25.34 22.115 26.885 ; + RECT 22.495 25.6975 22.565 25.8325 ; + RECT 22.75 25.4075 22.82 26.8175 ; + RECT 22.3 25.6975 22.37 25.8325 ; + RECT 22.2375 25.415 22.2925 25.4675 ; + RECT 22.3925 26.7175 22.4625 26.8525 ; + RECT 22.05 25.41 22.11 25.4675 ; + RECT 22.75 26.19 22.82 26.325 ; + RECT 22.0125 25.405 22.1475 25.475 ; + RECT 22.5725 25.4075 22.63 25.4675 ; + RECT 22.565 25.34 22.635 26.885 ; + RECT 22.755 28.155 22.815 28.0975 ; + RECT 22.045 27.38 22.115 27.245 ; + RECT 22.23 28.23 22.3 26.685 ; + RECT 22.7175 28.165 22.8525 28.095 ; + RECT 22.75 28.23 22.82 26.685 ; + RECT 22.045 28.23 22.115 26.685 ; + RECT 22.495 27.8725 22.565 27.7375 ; + RECT 22.75 28.1625 22.82 26.7525 ; + RECT 22.3 27.8725 22.37 27.7375 ; + RECT 22.2375 28.155 22.2925 28.1025 ; + RECT 22.3925 26.8525 22.4625 26.7175 ; + RECT 22.05 28.16 22.11 28.1025 ; + RECT 22.75 27.38 22.82 27.245 ; + RECT 22.0125 28.165 22.1475 28.095 ; + RECT 22.5725 28.1625 22.63 28.1025 ; + RECT 22.565 28.23 22.635 26.685 ; + RECT 22.755 28.105 22.815 28.1625 ; + RECT 22.045 28.88 22.115 29.015 ; + RECT 22.23 28.03 22.3 29.575 ; + RECT 22.7175 28.095 22.8525 28.165 ; + RECT 22.75 28.03 22.82 29.575 ; + RECT 22.045 28.03 22.115 29.575 ; + RECT 22.495 28.3875 22.565 28.5225 ; + RECT 22.75 28.0975 22.82 29.5075 ; + RECT 22.3 28.3875 22.37 28.5225 ; + RECT 22.2375 28.105 22.2925 28.1575 ; + RECT 22.3925 29.4075 22.4625 29.5425 ; + RECT 22.05 28.1 22.11 28.1575 ; + RECT 22.75 28.88 22.82 29.015 ; + RECT 22.0125 28.095 22.1475 28.165 ; + RECT 22.5725 28.0975 22.63 28.1575 ; + RECT 22.565 28.03 22.635 29.575 ; + RECT 22.755 30.845 22.815 30.7875 ; + RECT 22.045 30.07 22.115 29.935 ; + RECT 22.23 30.92 22.3 29.375 ; + RECT 22.7175 30.855 22.8525 30.785 ; + RECT 22.75 30.92 22.82 29.375 ; + RECT 22.045 30.92 22.115 29.375 ; + RECT 22.495 30.5625 22.565 30.4275 ; + RECT 22.75 30.8525 22.82 29.4425 ; + RECT 22.3 30.5625 22.37 30.4275 ; + RECT 22.2375 30.845 22.2925 30.7925 ; + RECT 22.3925 29.5425 22.4625 29.4075 ; + RECT 22.05 30.85 22.11 30.7925 ; + RECT 22.75 30.07 22.82 29.935 ; + RECT 22.0125 30.855 22.1475 30.785 ; + RECT 22.5725 30.8525 22.63 30.7925 ; + RECT 22.565 30.92 22.635 29.375 ; + RECT 22.755 30.795 22.815 30.8525 ; + RECT 22.045 31.57 22.115 31.705 ; + RECT 22.23 30.72 22.3 32.265 ; + RECT 22.7175 30.785 22.8525 30.855 ; + RECT 22.75 30.72 22.82 32.265 ; + RECT 22.045 30.72 22.115 32.265 ; + RECT 22.495 31.0775 22.565 31.2125 ; + RECT 22.75 30.7875 22.82 32.1975 ; + RECT 22.3 31.0775 22.37 31.2125 ; + RECT 22.2375 30.795 22.2925 30.8475 ; + RECT 22.3925 32.0975 22.4625 32.2325 ; + RECT 22.05 30.79 22.11 30.8475 ; + RECT 22.75 31.57 22.82 31.705 ; + RECT 22.0125 30.785 22.1475 30.855 ; + RECT 22.5725 30.7875 22.63 30.8475 ; + RECT 22.565 30.72 22.635 32.265 ; + RECT 22.755 33.535 22.815 33.4775 ; + RECT 22.045 32.76 22.115 32.625 ; + RECT 22.23 33.61 22.3 32.065 ; + RECT 22.7175 33.545 22.8525 33.475 ; + RECT 22.75 33.61 22.82 32.065 ; + RECT 22.045 33.61 22.115 32.065 ; + RECT 22.495 33.2525 22.565 33.1175 ; + RECT 22.75 33.5425 22.82 32.1325 ; + RECT 22.3 33.2525 22.37 33.1175 ; + RECT 22.2375 33.535 22.2925 33.4825 ; + RECT 22.3925 32.2325 22.4625 32.0975 ; + RECT 22.05 33.54 22.11 33.4825 ; + RECT 22.75 32.76 22.82 32.625 ; + RECT 22.0125 33.545 22.1475 33.475 ; + RECT 22.5725 33.5425 22.63 33.4825 ; + RECT 22.565 33.61 22.635 32.065 ; + RECT 22.755 33.485 22.815 33.5425 ; + RECT 22.045 34.26 22.115 34.395 ; + RECT 22.23 33.41 22.3 34.955 ; + RECT 22.7175 33.475 22.8525 33.545 ; + RECT 22.75 33.41 22.82 34.955 ; + RECT 22.045 33.41 22.115 34.955 ; + RECT 22.495 33.7675 22.565 33.9025 ; + RECT 22.75 33.4775 22.82 34.8875 ; + RECT 22.3 33.7675 22.37 33.9025 ; + RECT 22.2375 33.485 22.2925 33.5375 ; + RECT 22.3925 34.7875 22.4625 34.9225 ; + RECT 22.05 33.48 22.11 33.5375 ; + RECT 22.75 34.26 22.82 34.395 ; + RECT 22.0125 33.475 22.1475 33.545 ; + RECT 22.5725 33.4775 22.63 33.5375 ; + RECT 22.565 33.41 22.635 34.955 ; + RECT 22.755 36.225 22.815 36.1675 ; + RECT 22.045 35.45 22.115 35.315 ; + RECT 22.23 36.3 22.3 34.755 ; + RECT 22.7175 36.235 22.8525 36.165 ; + RECT 22.75 36.3 22.82 34.755 ; + RECT 22.045 36.3 22.115 34.755 ; + RECT 22.495 35.9425 22.565 35.8075 ; + RECT 22.75 36.2325 22.82 34.8225 ; + RECT 22.3 35.9425 22.37 35.8075 ; + RECT 22.2375 36.225 22.2925 36.1725 ; + RECT 22.3925 34.9225 22.4625 34.7875 ; + RECT 22.05 36.23 22.11 36.1725 ; + RECT 22.75 35.45 22.82 35.315 ; + RECT 22.0125 36.235 22.1475 36.165 ; + RECT 22.5725 36.2325 22.63 36.1725 ; + RECT 22.565 36.3 22.635 34.755 ; + RECT 22.755 36.175 22.815 36.2325 ; + RECT 22.045 36.95 22.115 37.085 ; + RECT 22.23 36.1 22.3 37.645 ; + RECT 22.7175 36.165 22.8525 36.235 ; + RECT 22.75 36.1 22.82 37.645 ; + RECT 22.045 36.1 22.115 37.645 ; + RECT 22.495 36.4575 22.565 36.5925 ; + RECT 22.75 36.1675 22.82 37.5775 ; + RECT 22.3 36.4575 22.37 36.5925 ; + RECT 22.2375 36.175 22.2925 36.2275 ; + RECT 22.3925 37.4775 22.4625 37.6125 ; + RECT 22.05 36.17 22.11 36.2275 ; + RECT 22.75 36.95 22.82 37.085 ; + RECT 22.0125 36.165 22.1475 36.235 ; + RECT 22.5725 36.1675 22.63 36.2275 ; + RECT 22.565 36.1 22.635 37.645 ; + RECT 22.755 38.915 22.815 38.8575 ; + RECT 22.045 38.14 22.115 38.005 ; + RECT 22.23 38.99 22.3 37.445 ; + RECT 22.7175 38.925 22.8525 38.855 ; + RECT 22.75 38.99 22.82 37.445 ; + RECT 22.045 38.99 22.115 37.445 ; + RECT 22.495 38.6325 22.565 38.4975 ; + RECT 22.75 38.9225 22.82 37.5125 ; + RECT 22.3 38.6325 22.37 38.4975 ; + RECT 22.2375 38.915 22.2925 38.8625 ; + RECT 22.3925 37.6125 22.4625 37.4775 ; + RECT 22.05 38.92 22.11 38.8625 ; + RECT 22.75 38.14 22.82 38.005 ; + RECT 22.0125 38.925 22.1475 38.855 ; + RECT 22.5725 38.9225 22.63 38.8625 ; + RECT 22.565 38.99 22.635 37.445 ; + RECT 22.755 38.865 22.815 38.9225 ; + RECT 22.045 39.64 22.115 39.775 ; + RECT 22.23 38.79 22.3 40.335 ; + RECT 22.7175 38.855 22.8525 38.925 ; + RECT 22.75 38.79 22.82 40.335 ; + RECT 22.045 38.79 22.115 40.335 ; + RECT 22.495 39.1475 22.565 39.2825 ; + RECT 22.75 38.8575 22.82 40.2675 ; + RECT 22.3 39.1475 22.37 39.2825 ; + RECT 22.2375 38.865 22.2925 38.9175 ; + RECT 22.3925 40.1675 22.4625 40.3025 ; + RECT 22.05 38.86 22.11 38.9175 ; + RECT 22.75 39.64 22.82 39.775 ; + RECT 22.0125 38.855 22.1475 38.925 ; + RECT 22.5725 38.8575 22.63 38.9175 ; + RECT 22.565 38.79 22.635 40.335 ; + RECT 22.755 41.605 22.815 41.5475 ; + RECT 22.045 40.83 22.115 40.695 ; + RECT 22.23 41.68 22.3 40.135 ; + RECT 22.7175 41.615 22.8525 41.545 ; + RECT 22.75 41.68 22.82 40.135 ; + RECT 22.045 41.68 22.115 40.135 ; + RECT 22.495 41.3225 22.565 41.1875 ; + RECT 22.75 41.6125 22.82 40.2025 ; + RECT 22.3 41.3225 22.37 41.1875 ; + RECT 22.2375 41.605 22.2925 41.5525 ; + RECT 22.3925 40.3025 22.4625 40.1675 ; + RECT 22.05 41.61 22.11 41.5525 ; + RECT 22.75 40.83 22.82 40.695 ; + RECT 22.0125 41.615 22.1475 41.545 ; + RECT 22.5725 41.6125 22.63 41.5525 ; + RECT 22.565 41.68 22.635 40.135 ; + RECT 22.755 41.555 22.815 41.6125 ; + RECT 22.045 42.33 22.115 42.465 ; + RECT 22.23 41.48 22.3 43.025 ; + RECT 22.7175 41.545 22.8525 41.615 ; + RECT 22.75 41.48 22.82 43.025 ; + RECT 22.045 41.48 22.115 43.025 ; + RECT 22.495 41.8375 22.565 41.9725 ; + RECT 22.75 41.5475 22.82 42.9575 ; + RECT 22.3 41.8375 22.37 41.9725 ; + RECT 22.2375 41.555 22.2925 41.6075 ; + RECT 22.3925 42.8575 22.4625 42.9925 ; + RECT 22.05 41.55 22.11 41.6075 ; + RECT 22.75 42.33 22.82 42.465 ; + RECT 22.0125 41.545 22.1475 41.615 ; + RECT 22.5725 41.5475 22.63 41.6075 ; + RECT 22.565 41.48 22.635 43.025 ; + RECT 22.755 44.295 22.815 44.2375 ; + RECT 22.045 43.52 22.115 43.385 ; + RECT 22.23 44.37 22.3 42.825 ; + RECT 22.7175 44.305 22.8525 44.235 ; + RECT 22.75 44.37 22.82 42.825 ; + RECT 22.045 44.37 22.115 42.825 ; + RECT 22.495 44.0125 22.565 43.8775 ; + RECT 22.75 44.3025 22.82 42.8925 ; + RECT 22.3 44.0125 22.37 43.8775 ; + RECT 22.2375 44.295 22.2925 44.2425 ; + RECT 22.3925 42.9925 22.4625 42.8575 ; + RECT 22.05 44.3 22.11 44.2425 ; + RECT 22.75 43.52 22.82 43.385 ; + RECT 22.0125 44.305 22.1475 44.235 ; + RECT 22.5725 44.3025 22.63 44.2425 ; + RECT 22.565 44.37 22.635 42.825 ; + RECT 21.525 22.75 21.595 44.27 ; + RECT 21.86 22.75 21.93 44.27 ; + RECT 22.23 22.75 22.3 44.27 ; + RECT 22.565 22.75 22.635 44.27 ; + RECT 21.6875 32.0975 21.7575 32.2325 ; + RECT 22.3925 34.7875 22.4625 34.9225 ; + RECT 22.3925 34.7875 22.4625 34.9225 ; + RECT 21.6875 24.0275 21.7575 24.1625 ; + RECT 21.6875 24.0275 21.7575 24.1625 ; + RECT 21.6875 40.1675 21.7575 40.3025 ; + RECT 22.3925 42.8575 22.4625 42.9925 ; + RECT 22.3925 42.8575 22.4625 42.9925 ; + RECT 22.3925 26.7175 22.4625 26.8525 ; + RECT 22.3925 26.7175 22.4625 26.8525 ; + RECT 21.6875 37.4775 21.7575 37.6125 ; + RECT 21.6875 34.7875 21.7575 34.9225 ; + RECT 21.6875 34.7875 21.7575 34.9225 ; + RECT 21.6875 42.8575 21.7575 42.9925 ; + RECT 21.6875 42.8575 21.7575 42.9925 ; + RECT 21.6875 26.7175 21.7575 26.8525 ; + RECT 21.6875 26.7175 21.7575 26.8525 ; + RECT 22.3925 37.4775 22.4625 37.6125 ; + RECT 22.3925 29.4075 22.4625 29.5425 ; + RECT 22.3925 29.4075 22.4625 29.5425 ; + RECT 22.3925 40.1675 22.4625 40.3025 ; + RECT 22.3925 24.0275 22.4625 24.1625 ; + RECT 22.3925 24.0275 22.4625 24.1625 ; + RECT 22.3925 32.0975 22.4625 32.2325 ; + RECT 21.6875 29.4075 21.7575 29.5425 ; + RECT 21.6875 29.4075 21.7575 29.5425 ; + RECT 22.0125 22.715 22.1475 22.785 ; + RECT 21.3075 44.235 21.4425 44.305 ; + RECT 21.3075 33.475 21.4425 33.545 ; + RECT 21.3075 38.855 21.4425 38.925 ; + RECT 22.0125 38.855 22.1475 38.925 ; + RECT 21.3075 41.545 21.4425 41.615 ; + RECT 22.0125 36.165 22.1475 36.235 ; + RECT 21.3075 22.715 21.4425 22.785 ; + RECT 22.0125 25.405 22.1475 25.475 ; + RECT 21.3075 30.785 21.4425 30.855 ; + RECT 22.0125 41.545 22.1475 41.615 ; + RECT 21.3075 25.405 21.4425 25.475 ; + RECT 22.0125 28.095 22.1475 28.165 ; + RECT 21.3075 36.165 21.4425 36.235 ; + RECT 22.0125 33.475 22.1475 33.545 ; + RECT 22.0125 30.785 22.1475 30.855 ; + RECT 21.3075 28.095 21.4425 28.165 ; + RECT 22.0125 44.235 22.1475 44.305 ; + RECT 21.345 20.035 21.405 20.0925 ; + RECT 20.635 20.81 20.705 20.945 ; + RECT 20.82 19.96 20.89 21.505 ; + RECT 21.3075 20.025 21.4425 20.095 ; + RECT 21.34 19.96 21.41 21.505 ; + RECT 20.635 19.96 20.705 21.505 ; + RECT 21.085 20.3175 21.155 20.4525 ; + RECT 21.34 20.0275 21.41 21.4375 ; + RECT 20.89 20.3175 20.96 20.4525 ; + RECT 20.8275 20.035 20.8825 20.0875 ; + RECT 20.9825 21.3375 21.0525 21.4725 ; + RECT 20.64 20.03 20.7 20.0875 ; + RECT 21.34 20.81 21.41 20.945 ; + RECT 20.6025 20.025 20.7375 20.095 ; + RECT 21.1625 20.0275 21.22 20.0875 ; + RECT 21.155 19.96 21.225 21.505 ; + RECT 21.345 22.775 21.405 22.7175 ; + RECT 20.82 22.85 20.89 21.305 ; + RECT 21.34 22.85 21.41 21.305 ; + RECT 21.3075 22.785 21.4425 22.715 ; + RECT 20.635 22.0 20.705 21.865 ; + RECT 21.34 22.0 21.41 21.865 ; + RECT 21.085 22.4925 21.155 22.3575 ; + RECT 21.34 22.7825 21.41 21.3725 ; + RECT 20.89 22.4925 20.96 22.3575 ; + RECT 20.8275 22.775 20.8825 22.7225 ; + RECT 20.6025 22.785 20.7375 22.715 ; + RECT 20.64 22.78 20.7 22.7225 ; + RECT 20.635 22.85 20.705 21.305 ; + RECT 20.9825 21.4725 21.0525 21.3375 ; + RECT 21.1625 22.7825 21.22 22.7225 ; + RECT 21.155 22.85 21.225 21.305 ; + RECT 21.345 22.725 21.405 22.7825 ; + RECT 20.82 22.65 20.89 24.195 ; + RECT 21.34 22.65 21.41 24.195 ; + RECT 21.3075 22.715 21.4425 22.785 ; + RECT 20.635 23.5 20.705 23.635 ; + RECT 21.34 23.5 21.41 23.635 ; + RECT 21.085 23.0075 21.155 23.1425 ; + RECT 21.34 22.7175 21.41 24.1275 ; + RECT 20.89 23.0075 20.96 23.1425 ; + RECT 20.8275 22.725 20.8825 22.7775 ; + RECT 20.6025 22.715 20.7375 22.785 ; + RECT 20.64 22.72 20.7 22.7775 ; + RECT 20.635 22.65 20.705 24.195 ; + RECT 20.9825 24.0275 21.0525 24.1625 ; + RECT 21.1625 22.7175 21.22 22.7775 ; + RECT 21.155 22.65 21.225 24.195 ; + RECT 21.345 25.465 21.405 25.4075 ; + RECT 20.82 25.54 20.89 23.995 ; + RECT 21.34 25.54 21.41 23.995 ; + RECT 21.3075 25.475 21.4425 25.405 ; + RECT 20.635 24.69 20.705 24.555 ; + RECT 21.34 24.69 21.41 24.555 ; + RECT 21.085 25.1825 21.155 25.0475 ; + RECT 21.34 25.4725 21.41 24.0625 ; + RECT 20.89 25.1825 20.96 25.0475 ; + RECT 20.8275 25.465 20.8825 25.4125 ; + RECT 20.6025 25.475 20.7375 25.405 ; + RECT 20.64 25.47 20.7 25.4125 ; + RECT 20.635 25.54 20.705 23.995 ; + RECT 20.9825 24.1625 21.0525 24.0275 ; + RECT 21.1625 25.4725 21.22 25.4125 ; + RECT 21.155 25.54 21.225 23.995 ; + RECT 21.345 25.415 21.405 25.4725 ; + RECT 20.82 25.34 20.89 26.885 ; + RECT 21.34 25.34 21.41 26.885 ; + RECT 21.3075 25.405 21.4425 25.475 ; + RECT 20.635 26.19 20.705 26.325 ; + RECT 21.34 26.19 21.41 26.325 ; + RECT 21.085 25.6975 21.155 25.8325 ; + RECT 21.34 25.4075 21.41 26.8175 ; + RECT 20.89 25.6975 20.96 25.8325 ; + RECT 20.8275 25.415 20.8825 25.4675 ; + RECT 20.6025 25.405 20.7375 25.475 ; + RECT 20.64 25.41 20.7 25.4675 ; + RECT 20.635 25.34 20.705 26.885 ; + RECT 20.9825 26.7175 21.0525 26.8525 ; + RECT 21.1625 25.4075 21.22 25.4675 ; + RECT 21.155 25.34 21.225 26.885 ; + RECT 21.345 28.155 21.405 28.0975 ; + RECT 20.82 28.23 20.89 26.685 ; + RECT 21.34 28.23 21.41 26.685 ; + RECT 21.3075 28.165 21.4425 28.095 ; + RECT 20.635 27.38 20.705 27.245 ; + RECT 21.34 27.38 21.41 27.245 ; + RECT 21.085 27.8725 21.155 27.7375 ; + RECT 21.34 28.1625 21.41 26.7525 ; + RECT 20.89 27.8725 20.96 27.7375 ; + RECT 20.8275 28.155 20.8825 28.1025 ; + RECT 20.6025 28.165 20.7375 28.095 ; + RECT 20.64 28.16 20.7 28.1025 ; + RECT 20.635 28.23 20.705 26.685 ; + RECT 20.9825 26.8525 21.0525 26.7175 ; + RECT 21.1625 28.1625 21.22 28.1025 ; + RECT 21.155 28.23 21.225 26.685 ; + RECT 21.345 28.105 21.405 28.1625 ; + RECT 20.82 28.03 20.89 29.575 ; + RECT 21.34 28.03 21.41 29.575 ; + RECT 21.3075 28.095 21.4425 28.165 ; + RECT 20.635 28.88 20.705 29.015 ; + RECT 21.34 28.88 21.41 29.015 ; + RECT 21.085 28.3875 21.155 28.5225 ; + RECT 21.34 28.0975 21.41 29.5075 ; + RECT 20.89 28.3875 20.96 28.5225 ; + RECT 20.8275 28.105 20.8825 28.1575 ; + RECT 20.6025 28.095 20.7375 28.165 ; + RECT 20.64 28.1 20.7 28.1575 ; + RECT 20.635 28.03 20.705 29.575 ; + RECT 20.9825 29.4075 21.0525 29.5425 ; + RECT 21.1625 28.0975 21.22 28.1575 ; + RECT 21.155 28.03 21.225 29.575 ; + RECT 21.345 30.845 21.405 30.7875 ; + RECT 20.82 30.92 20.89 29.375 ; + RECT 21.34 30.92 21.41 29.375 ; + RECT 21.3075 30.855 21.4425 30.785 ; + RECT 20.635 30.07 20.705 29.935 ; + RECT 21.34 30.07 21.41 29.935 ; + RECT 21.085 30.5625 21.155 30.4275 ; + RECT 21.34 30.8525 21.41 29.4425 ; + RECT 20.89 30.5625 20.96 30.4275 ; + RECT 20.8275 30.845 20.8825 30.7925 ; + RECT 20.6025 30.855 20.7375 30.785 ; + RECT 20.64 30.85 20.7 30.7925 ; + RECT 20.635 30.92 20.705 29.375 ; + RECT 20.9825 29.5425 21.0525 29.4075 ; + RECT 21.1625 30.8525 21.22 30.7925 ; + RECT 21.155 30.92 21.225 29.375 ; + RECT 21.345 30.795 21.405 30.8525 ; + RECT 20.82 30.72 20.89 32.265 ; + RECT 21.34 30.72 21.41 32.265 ; + RECT 21.3075 30.785 21.4425 30.855 ; + RECT 20.635 31.57 20.705 31.705 ; + RECT 21.34 31.57 21.41 31.705 ; + RECT 21.085 31.0775 21.155 31.2125 ; + RECT 21.34 30.7875 21.41 32.1975 ; + RECT 20.89 31.0775 20.96 31.2125 ; + RECT 20.8275 30.795 20.8825 30.8475 ; + RECT 20.6025 30.785 20.7375 30.855 ; + RECT 20.64 30.79 20.7 30.8475 ; + RECT 20.635 30.72 20.705 32.265 ; + RECT 20.9825 32.0975 21.0525 32.2325 ; + RECT 21.1625 30.7875 21.22 30.8475 ; + RECT 21.155 30.72 21.225 32.265 ; + RECT 21.345 33.535 21.405 33.4775 ; + RECT 20.82 33.61 20.89 32.065 ; + RECT 21.34 33.61 21.41 32.065 ; + RECT 21.3075 33.545 21.4425 33.475 ; + RECT 20.635 32.76 20.705 32.625 ; + RECT 21.34 32.76 21.41 32.625 ; + RECT 21.085 33.2525 21.155 33.1175 ; + RECT 21.34 33.5425 21.41 32.1325 ; + RECT 20.89 33.2525 20.96 33.1175 ; + RECT 20.8275 33.535 20.8825 33.4825 ; + RECT 20.6025 33.545 20.7375 33.475 ; + RECT 20.64 33.54 20.7 33.4825 ; + RECT 20.635 33.61 20.705 32.065 ; + RECT 20.9825 32.2325 21.0525 32.0975 ; + RECT 21.1625 33.5425 21.22 33.4825 ; + RECT 21.155 33.61 21.225 32.065 ; + RECT 21.345 33.485 21.405 33.5425 ; + RECT 20.82 33.41 20.89 34.955 ; + RECT 21.34 33.41 21.41 34.955 ; + RECT 21.3075 33.475 21.4425 33.545 ; + RECT 20.635 34.26 20.705 34.395 ; + RECT 21.34 34.26 21.41 34.395 ; + RECT 21.085 33.7675 21.155 33.9025 ; + RECT 21.34 33.4775 21.41 34.8875 ; + RECT 20.89 33.7675 20.96 33.9025 ; + RECT 20.8275 33.485 20.8825 33.5375 ; + RECT 20.6025 33.475 20.7375 33.545 ; + RECT 20.64 33.48 20.7 33.5375 ; + RECT 20.635 33.41 20.705 34.955 ; + RECT 20.9825 34.7875 21.0525 34.9225 ; + RECT 21.1625 33.4775 21.22 33.5375 ; + RECT 21.155 33.41 21.225 34.955 ; + RECT 21.345 36.225 21.405 36.1675 ; + RECT 20.82 36.3 20.89 34.755 ; + RECT 21.34 36.3 21.41 34.755 ; + RECT 21.3075 36.235 21.4425 36.165 ; + RECT 20.635 35.45 20.705 35.315 ; + RECT 21.34 35.45 21.41 35.315 ; + RECT 21.085 35.9425 21.155 35.8075 ; + RECT 21.34 36.2325 21.41 34.8225 ; + RECT 20.89 35.9425 20.96 35.8075 ; + RECT 20.8275 36.225 20.8825 36.1725 ; + RECT 20.6025 36.235 20.7375 36.165 ; + RECT 20.64 36.23 20.7 36.1725 ; + RECT 20.635 36.3 20.705 34.755 ; + RECT 20.9825 34.9225 21.0525 34.7875 ; + RECT 21.1625 36.2325 21.22 36.1725 ; + RECT 21.155 36.3 21.225 34.755 ; + RECT 21.345 36.175 21.405 36.2325 ; + RECT 20.82 36.1 20.89 37.645 ; + RECT 21.34 36.1 21.41 37.645 ; + RECT 21.3075 36.165 21.4425 36.235 ; + RECT 20.635 36.95 20.705 37.085 ; + RECT 21.34 36.95 21.41 37.085 ; + RECT 21.085 36.4575 21.155 36.5925 ; + RECT 21.34 36.1675 21.41 37.5775 ; + RECT 20.89 36.4575 20.96 36.5925 ; + RECT 20.8275 36.175 20.8825 36.2275 ; + RECT 20.6025 36.165 20.7375 36.235 ; + RECT 20.64 36.17 20.7 36.2275 ; + RECT 20.635 36.1 20.705 37.645 ; + RECT 20.9825 37.4775 21.0525 37.6125 ; + RECT 21.1625 36.1675 21.22 36.2275 ; + RECT 21.155 36.1 21.225 37.645 ; + RECT 21.345 38.915 21.405 38.8575 ; + RECT 20.82 38.99 20.89 37.445 ; + RECT 21.34 38.99 21.41 37.445 ; + RECT 21.3075 38.925 21.4425 38.855 ; + RECT 20.635 38.14 20.705 38.005 ; + RECT 21.34 38.14 21.41 38.005 ; + RECT 21.085 38.6325 21.155 38.4975 ; + RECT 21.34 38.9225 21.41 37.5125 ; + RECT 20.89 38.6325 20.96 38.4975 ; + RECT 20.8275 38.915 20.8825 38.8625 ; + RECT 20.6025 38.925 20.7375 38.855 ; + RECT 20.64 38.92 20.7 38.8625 ; + RECT 20.635 38.99 20.705 37.445 ; + RECT 20.9825 37.6125 21.0525 37.4775 ; + RECT 21.1625 38.9225 21.22 38.8625 ; + RECT 21.155 38.99 21.225 37.445 ; + RECT 21.345 38.865 21.405 38.9225 ; + RECT 20.82 38.79 20.89 40.335 ; + RECT 21.34 38.79 21.41 40.335 ; + RECT 21.3075 38.855 21.4425 38.925 ; + RECT 20.635 39.64 20.705 39.775 ; + RECT 21.34 39.64 21.41 39.775 ; + RECT 21.085 39.1475 21.155 39.2825 ; + RECT 21.34 38.8575 21.41 40.2675 ; + RECT 20.89 39.1475 20.96 39.2825 ; + RECT 20.8275 38.865 20.8825 38.9175 ; + RECT 20.6025 38.855 20.7375 38.925 ; + RECT 20.64 38.86 20.7 38.9175 ; + RECT 20.635 38.79 20.705 40.335 ; + RECT 20.9825 40.1675 21.0525 40.3025 ; + RECT 21.1625 38.8575 21.22 38.9175 ; + RECT 21.155 38.79 21.225 40.335 ; + RECT 21.345 41.605 21.405 41.5475 ; + RECT 20.82 41.68 20.89 40.135 ; + RECT 21.34 41.68 21.41 40.135 ; + RECT 21.3075 41.615 21.4425 41.545 ; + RECT 20.635 40.83 20.705 40.695 ; + RECT 21.34 40.83 21.41 40.695 ; + RECT 21.085 41.3225 21.155 41.1875 ; + RECT 21.34 41.6125 21.41 40.2025 ; + RECT 20.89 41.3225 20.96 41.1875 ; + RECT 20.8275 41.605 20.8825 41.5525 ; + RECT 20.6025 41.615 20.7375 41.545 ; + RECT 20.64 41.61 20.7 41.5525 ; + RECT 20.635 41.68 20.705 40.135 ; + RECT 20.9825 40.3025 21.0525 40.1675 ; + RECT 21.1625 41.6125 21.22 41.5525 ; + RECT 21.155 41.68 21.225 40.135 ; + RECT 21.345 41.555 21.405 41.6125 ; + RECT 20.82 41.48 20.89 43.025 ; + RECT 21.34 41.48 21.41 43.025 ; + RECT 21.3075 41.545 21.4425 41.615 ; + RECT 20.635 42.33 20.705 42.465 ; + RECT 21.34 42.33 21.41 42.465 ; + RECT 21.085 41.8375 21.155 41.9725 ; + RECT 21.34 41.5475 21.41 42.9575 ; + RECT 20.89 41.8375 20.96 41.9725 ; + RECT 20.8275 41.555 20.8825 41.6075 ; + RECT 20.6025 41.545 20.7375 41.615 ; + RECT 20.64 41.55 20.7 41.6075 ; + RECT 20.635 41.48 20.705 43.025 ; + RECT 20.9825 42.8575 21.0525 42.9925 ; + RECT 21.1625 41.5475 21.22 41.6075 ; + RECT 21.155 41.48 21.225 43.025 ; + RECT 21.345 44.295 21.405 44.2375 ; + RECT 20.82 44.37 20.89 42.825 ; + RECT 21.34 44.37 21.41 42.825 ; + RECT 21.3075 44.305 21.4425 44.235 ; + RECT 20.635 43.52 20.705 43.385 ; + RECT 21.34 43.52 21.41 43.385 ; + RECT 21.085 44.0125 21.155 43.8775 ; + RECT 21.34 44.3025 21.41 42.8925 ; + RECT 20.89 44.0125 20.96 43.8775 ; + RECT 20.8275 44.295 20.8825 44.2425 ; + RECT 20.6025 44.305 20.7375 44.235 ; + RECT 20.64 44.3 20.7 44.2425 ; + RECT 20.635 44.37 20.705 42.825 ; + RECT 20.9825 42.9925 21.0525 42.8575 ; + RECT 21.1625 44.3025 21.22 44.2425 ; + RECT 21.155 44.37 21.225 42.825 ; + RECT 21.345 44.245 21.405 44.3025 ; + RECT 20.635 45.02 20.705 45.155 ; + RECT 20.82 44.17 20.89 45.715 ; + RECT 21.3075 44.235 21.4425 44.305 ; + RECT 21.34 44.17 21.41 45.715 ; + RECT 20.635 44.17 20.705 45.715 ; + RECT 21.085 44.5275 21.155 44.6625 ; + RECT 21.34 44.2375 21.41 45.6475 ; + RECT 20.89 44.5275 20.96 44.6625 ; + RECT 20.8275 44.245 20.8825 44.2975 ; + RECT 20.9825 45.5475 21.0525 45.6825 ; + RECT 20.64 44.24 20.7 44.2975 ; + RECT 21.34 45.02 21.41 45.155 ; + RECT 20.6025 44.235 20.7375 44.305 ; + RECT 21.1625 44.2375 21.22 44.2975 ; + RECT 21.155 44.17 21.225 45.715 ; + RECT 20.82 20.06 20.89 45.615 ; + RECT 21.155 20.06 21.225 45.615 ; + RECT 20.9825 29.4075 21.0525 29.5425 ; + RECT 20.9825 32.0975 21.0525 32.2325 ; + RECT 20.9825 32.0975 21.0525 32.2325 ; + RECT 20.9825 26.7175 21.0525 26.8525 ; + RECT 20.9825 21.3375 21.0525 21.4725 ; + RECT 20.9825 24.0275 21.0525 24.1625 ; + RECT 20.9825 24.0275 21.0525 24.1625 ; + RECT 20.9825 26.7175 21.0525 26.8525 ; + RECT 20.9825 42.8575 21.0525 42.9925 ; + RECT 20.9825 37.4775 21.0525 37.6125 ; + RECT 20.9825 40.1675 21.0525 40.3025 ; + RECT 20.9825 40.1675 21.0525 40.3025 ; + RECT 20.9825 34.7875 21.0525 34.9225 ; + RECT 20.6025 41.545 20.7375 41.615 ; + RECT 20.6025 30.785 20.7375 30.855 ; + RECT 20.6025 36.165 20.7375 36.235 ; + RECT 20.6025 38.855 20.7375 38.925 ; + RECT 20.6025 44.235 20.7375 44.305 ; + RECT 20.6025 28.095 20.7375 28.165 ; + RECT 20.6025 22.715 20.7375 22.785 ; + RECT 20.6025 33.475 20.7375 33.545 ; + RECT 20.6025 25.405 20.7375 25.475 ; + RECT 22.05 22.775 22.11 22.7175 ; + RECT 21.34 22.0 21.41 21.865 ; + RECT 21.525 22.85 21.595 21.305 ; + RECT 22.0125 22.785 22.1475 22.715 ; + RECT 22.045 22.85 22.115 21.305 ; + RECT 21.34 22.85 21.41 21.305 ; + RECT 21.79 22.4925 21.86 22.3575 ; + RECT 22.045 22.7825 22.115 21.3725 ; + RECT 21.595 22.4925 21.665 22.3575 ; + RECT 21.5325 22.775 21.5875 22.7225 ; + RECT 21.6875 21.4725 21.7575 21.3375 ; + RECT 21.345 22.78 21.405 22.7225 ; + RECT 22.045 22.0 22.115 21.865 ; + RECT 21.3075 22.785 21.4425 22.715 ; + RECT 21.8675 22.7825 21.925 22.7225 ; + RECT 21.86 22.85 21.93 21.305 ; + RECT 22.755 22.775 22.815 22.7175 ; + RECT 22.045 22.0 22.115 21.865 ; + RECT 22.23 22.85 22.3 21.305 ; + RECT 22.7175 22.785 22.8525 22.715 ; + RECT 22.75 22.85 22.82 21.305 ; + RECT 22.045 22.85 22.115 21.305 ; + RECT 22.495 22.4925 22.565 22.3575 ; + RECT 22.75 22.7825 22.82 21.3725 ; + RECT 22.3 22.4925 22.37 22.3575 ; + RECT 22.2375 22.775 22.2925 22.7225 ; + RECT 22.3925 21.4725 22.4625 21.3375 ; + RECT 22.05 22.78 22.11 22.7225 ; + RECT 22.75 22.0 22.82 21.865 ; + RECT 22.0125 22.785 22.1475 22.715 ; + RECT 22.5725 22.7825 22.63 22.7225 ; + RECT 22.565 22.85 22.635 21.305 ; + RECT 22.3925 21.4725 22.4625 21.3375 ; + RECT 21.6875 21.4725 21.7575 21.3375 ; + RECT 22.0125 22.785 22.1475 22.715 ; + RECT 21.3075 22.785 21.4425 22.715 ; + RECT 22.05 20.035 22.11 20.0925 ; + RECT 21.34 20.81 21.41 20.945 ; + RECT 21.525 19.96 21.595 21.505 ; + RECT 22.0125 20.025 22.1475 20.095 ; + RECT 22.045 19.96 22.115 21.505 ; + RECT 21.34 19.96 21.41 21.505 ; + RECT 21.79 20.3175 21.86 20.4525 ; + RECT 22.045 20.0275 22.115 21.4375 ; + RECT 21.595 20.3175 21.665 20.4525 ; + RECT 21.5325 20.035 21.5875 20.0875 ; + RECT 21.6875 21.3375 21.7575 21.4725 ; + RECT 21.345 20.03 21.405 20.0875 ; + RECT 22.045 20.81 22.115 20.945 ; + RECT 21.3075 20.025 21.4425 20.095 ; + RECT 21.8675 20.0275 21.925 20.0875 ; + RECT 21.86 19.96 21.93 21.505 ; + RECT 22.755 20.035 22.815 20.0925 ; + RECT 22.045 20.81 22.115 20.945 ; + RECT 22.23 19.96 22.3 21.505 ; + RECT 22.7175 20.025 22.8525 20.095 ; + RECT 22.75 19.96 22.82 21.505 ; + RECT 22.045 19.96 22.115 21.505 ; + RECT 22.495 20.3175 22.565 20.4525 ; + RECT 22.75 20.0275 22.82 21.4375 ; + RECT 22.3 20.3175 22.37 20.4525 ; + RECT 22.2375 20.035 22.2925 20.0875 ; + RECT 22.3925 21.3375 22.4625 21.4725 ; + RECT 22.05 20.03 22.11 20.0875 ; + RECT 22.75 20.81 22.82 20.945 ; + RECT 22.0125 20.025 22.1475 20.095 ; + RECT 22.5725 20.0275 22.63 20.0875 ; + RECT 22.565 19.96 22.635 21.505 ; + RECT 22.3925 21.3375 22.4625 21.4725 ; + RECT 21.6875 21.3375 21.7575 21.4725 ; + RECT 22.0125 20.025 22.1475 20.095 ; + RECT 21.3075 20.025 21.4425 20.095 ; + RECT 22.05 44.245 22.11 44.3025 ; + RECT 21.34 45.02 21.41 45.155 ; + RECT 21.525 44.17 21.595 45.715 ; + RECT 22.0125 44.235 22.1475 44.305 ; + RECT 22.045 44.17 22.115 45.715 ; + RECT 21.34 44.17 21.41 45.715 ; + RECT 21.79 44.5275 21.86 44.6625 ; + RECT 22.045 44.2375 22.115 45.6475 ; + RECT 21.595 44.5275 21.665 44.6625 ; + RECT 21.5325 44.245 21.5875 44.2975 ; + RECT 21.6875 45.5475 21.7575 45.6825 ; + RECT 21.345 44.24 21.405 44.2975 ; + RECT 22.045 45.02 22.115 45.155 ; + RECT 21.3075 44.235 21.4425 44.305 ; + RECT 21.8675 44.2375 21.925 44.2975 ; + RECT 21.86 44.17 21.93 45.715 ; + RECT 22.755 44.245 22.815 44.3025 ; + RECT 22.045 45.02 22.115 45.155 ; + RECT 22.23 44.17 22.3 45.715 ; + RECT 22.7175 44.235 22.8525 44.305 ; + RECT 22.75 44.17 22.82 45.715 ; + RECT 22.045 44.17 22.115 45.715 ; + RECT 22.495 44.5275 22.565 44.6625 ; + RECT 22.75 44.2375 22.82 45.6475 ; + RECT 22.3 44.5275 22.37 44.6625 ; + RECT 22.2375 44.245 22.2925 44.2975 ; + RECT 22.3925 45.5475 22.4625 45.6825 ; + RECT 22.05 44.24 22.11 44.2975 ; + RECT 22.75 45.02 22.82 45.155 ; + RECT 22.0125 44.235 22.1475 44.305 ; + RECT 22.5725 44.2375 22.63 44.2975 ; + RECT 22.565 44.17 22.635 45.715 ; + RECT 22.3925 45.5475 22.4625 45.6825 ; + RECT 21.6875 45.5475 21.7575 45.6825 ; + RECT 22.0125 44.235 22.1475 44.305 ; + RECT 21.3075 44.235 21.4425 44.305 ; + RECT 20.64 20.035 20.7 20.0925 ; + RECT 19.93 20.81 20.0 20.945 ; + RECT 20.115 19.96 20.185 21.505 ; + RECT 20.6025 20.025 20.7375 20.095 ; + RECT 20.635 19.96 20.705 21.505 ; + RECT 19.93 19.96 20.0 21.505 ; + RECT 20.38 20.3175 20.45 20.4525 ; + RECT 20.635 20.0275 20.705 21.4375 ; + RECT 20.185 20.3175 20.255 20.4525 ; + RECT 20.1225 20.035 20.1775 20.0875 ; + RECT 20.2775 21.3375 20.3475 21.4725 ; + RECT 19.935 20.03 19.995 20.0875 ; + RECT 20.635 20.81 20.705 20.945 ; + RECT 19.8975 20.025 20.0325 20.095 ; + RECT 20.4575 20.0275 20.515 20.0875 ; + RECT 20.45 19.96 20.52 21.505 ; + RECT 20.64 22.775 20.7 22.7175 ; + RECT 19.93 22.0 20.0 21.865 ; + RECT 20.115 22.85 20.185 21.305 ; + RECT 20.6025 22.785 20.7375 22.715 ; + RECT 20.635 22.85 20.705 21.305 ; + RECT 19.93 22.85 20.0 21.305 ; + RECT 20.38 22.4925 20.45 22.3575 ; + RECT 20.635 22.7825 20.705 21.3725 ; + RECT 20.185 22.4925 20.255 22.3575 ; + RECT 20.1225 22.775 20.1775 22.7225 ; + RECT 20.2775 21.4725 20.3475 21.3375 ; + RECT 19.935 22.78 19.995 22.7225 ; + RECT 20.635 22.0 20.705 21.865 ; + RECT 19.8975 22.785 20.0325 22.715 ; + RECT 20.4575 22.7825 20.515 22.7225 ; + RECT 20.45 22.85 20.52 21.305 ; + RECT 20.64 22.725 20.7 22.7825 ; + RECT 19.93 23.5 20.0 23.635 ; + RECT 20.115 22.65 20.185 24.195 ; + RECT 20.6025 22.715 20.7375 22.785 ; + RECT 20.635 22.65 20.705 24.195 ; + RECT 19.93 22.65 20.0 24.195 ; + RECT 20.38 23.0075 20.45 23.1425 ; + RECT 20.635 22.7175 20.705 24.1275 ; + RECT 20.185 23.0075 20.255 23.1425 ; + RECT 20.1225 22.725 20.1775 22.7775 ; + RECT 20.2775 24.0275 20.3475 24.1625 ; + RECT 19.935 22.72 19.995 22.7775 ; + RECT 20.635 23.5 20.705 23.635 ; + RECT 19.8975 22.715 20.0325 22.785 ; + RECT 20.4575 22.7175 20.515 22.7775 ; + RECT 20.45 22.65 20.52 24.195 ; + RECT 20.64 25.465 20.7 25.4075 ; + RECT 19.93 24.69 20.0 24.555 ; + RECT 20.115 25.54 20.185 23.995 ; + RECT 20.6025 25.475 20.7375 25.405 ; + RECT 20.635 25.54 20.705 23.995 ; + RECT 19.93 25.54 20.0 23.995 ; + RECT 20.38 25.1825 20.45 25.0475 ; + RECT 20.635 25.4725 20.705 24.0625 ; + RECT 20.185 25.1825 20.255 25.0475 ; + RECT 20.1225 25.465 20.1775 25.4125 ; + RECT 20.2775 24.1625 20.3475 24.0275 ; + RECT 19.935 25.47 19.995 25.4125 ; + RECT 20.635 24.69 20.705 24.555 ; + RECT 19.8975 25.475 20.0325 25.405 ; + RECT 20.4575 25.4725 20.515 25.4125 ; + RECT 20.45 25.54 20.52 23.995 ; + RECT 20.64 25.415 20.7 25.4725 ; + RECT 19.93 26.19 20.0 26.325 ; + RECT 20.115 25.34 20.185 26.885 ; + RECT 20.6025 25.405 20.7375 25.475 ; + RECT 20.635 25.34 20.705 26.885 ; + RECT 19.93 25.34 20.0 26.885 ; + RECT 20.38 25.6975 20.45 25.8325 ; + RECT 20.635 25.4075 20.705 26.8175 ; + RECT 20.185 25.6975 20.255 25.8325 ; + RECT 20.1225 25.415 20.1775 25.4675 ; + RECT 20.2775 26.7175 20.3475 26.8525 ; + RECT 19.935 25.41 19.995 25.4675 ; + RECT 20.635 26.19 20.705 26.325 ; + RECT 19.8975 25.405 20.0325 25.475 ; + RECT 20.4575 25.4075 20.515 25.4675 ; + RECT 20.45 25.34 20.52 26.885 ; + RECT 20.64 28.155 20.7 28.0975 ; + RECT 19.93 27.38 20.0 27.245 ; + RECT 20.115 28.23 20.185 26.685 ; + RECT 20.6025 28.165 20.7375 28.095 ; + RECT 20.635 28.23 20.705 26.685 ; + RECT 19.93 28.23 20.0 26.685 ; + RECT 20.38 27.8725 20.45 27.7375 ; + RECT 20.635 28.1625 20.705 26.7525 ; + RECT 20.185 27.8725 20.255 27.7375 ; + RECT 20.1225 28.155 20.1775 28.1025 ; + RECT 20.2775 26.8525 20.3475 26.7175 ; + RECT 19.935 28.16 19.995 28.1025 ; + RECT 20.635 27.38 20.705 27.245 ; + RECT 19.8975 28.165 20.0325 28.095 ; + RECT 20.4575 28.1625 20.515 28.1025 ; + RECT 20.45 28.23 20.52 26.685 ; + RECT 20.64 28.105 20.7 28.1625 ; + RECT 19.93 28.88 20.0 29.015 ; + RECT 20.115 28.03 20.185 29.575 ; + RECT 20.6025 28.095 20.7375 28.165 ; + RECT 20.635 28.03 20.705 29.575 ; + RECT 19.93 28.03 20.0 29.575 ; + RECT 20.38 28.3875 20.45 28.5225 ; + RECT 20.635 28.0975 20.705 29.5075 ; + RECT 20.185 28.3875 20.255 28.5225 ; + RECT 20.1225 28.105 20.1775 28.1575 ; + RECT 20.2775 29.4075 20.3475 29.5425 ; + RECT 19.935 28.1 19.995 28.1575 ; + RECT 20.635 28.88 20.705 29.015 ; + RECT 19.8975 28.095 20.0325 28.165 ; + RECT 20.4575 28.0975 20.515 28.1575 ; + RECT 20.45 28.03 20.52 29.575 ; + RECT 20.64 30.845 20.7 30.7875 ; + RECT 19.93 30.07 20.0 29.935 ; + RECT 20.115 30.92 20.185 29.375 ; + RECT 20.6025 30.855 20.7375 30.785 ; + RECT 20.635 30.92 20.705 29.375 ; + RECT 19.93 30.92 20.0 29.375 ; + RECT 20.38 30.5625 20.45 30.4275 ; + RECT 20.635 30.8525 20.705 29.4425 ; + RECT 20.185 30.5625 20.255 30.4275 ; + RECT 20.1225 30.845 20.1775 30.7925 ; + RECT 20.2775 29.5425 20.3475 29.4075 ; + RECT 19.935 30.85 19.995 30.7925 ; + RECT 20.635 30.07 20.705 29.935 ; + RECT 19.8975 30.855 20.0325 30.785 ; + RECT 20.4575 30.8525 20.515 30.7925 ; + RECT 20.45 30.92 20.52 29.375 ; + RECT 20.64 30.795 20.7 30.8525 ; + RECT 19.93 31.57 20.0 31.705 ; + RECT 20.115 30.72 20.185 32.265 ; + RECT 20.6025 30.785 20.7375 30.855 ; + RECT 20.635 30.72 20.705 32.265 ; + RECT 19.93 30.72 20.0 32.265 ; + RECT 20.38 31.0775 20.45 31.2125 ; + RECT 20.635 30.7875 20.705 32.1975 ; + RECT 20.185 31.0775 20.255 31.2125 ; + RECT 20.1225 30.795 20.1775 30.8475 ; + RECT 20.2775 32.0975 20.3475 32.2325 ; + RECT 19.935 30.79 19.995 30.8475 ; + RECT 20.635 31.57 20.705 31.705 ; + RECT 19.8975 30.785 20.0325 30.855 ; + RECT 20.4575 30.7875 20.515 30.8475 ; + RECT 20.45 30.72 20.52 32.265 ; + RECT 20.64 33.535 20.7 33.4775 ; + RECT 19.93 32.76 20.0 32.625 ; + RECT 20.115 33.61 20.185 32.065 ; + RECT 20.6025 33.545 20.7375 33.475 ; + RECT 20.635 33.61 20.705 32.065 ; + RECT 19.93 33.61 20.0 32.065 ; + RECT 20.38 33.2525 20.45 33.1175 ; + RECT 20.635 33.5425 20.705 32.1325 ; + RECT 20.185 33.2525 20.255 33.1175 ; + RECT 20.1225 33.535 20.1775 33.4825 ; + RECT 20.2775 32.2325 20.3475 32.0975 ; + RECT 19.935 33.54 19.995 33.4825 ; + RECT 20.635 32.76 20.705 32.625 ; + RECT 19.8975 33.545 20.0325 33.475 ; + RECT 20.4575 33.5425 20.515 33.4825 ; + RECT 20.45 33.61 20.52 32.065 ; + RECT 20.64 33.485 20.7 33.5425 ; + RECT 19.93 34.26 20.0 34.395 ; + RECT 20.115 33.41 20.185 34.955 ; + RECT 20.6025 33.475 20.7375 33.545 ; + RECT 20.635 33.41 20.705 34.955 ; + RECT 19.93 33.41 20.0 34.955 ; + RECT 20.38 33.7675 20.45 33.9025 ; + RECT 20.635 33.4775 20.705 34.8875 ; + RECT 20.185 33.7675 20.255 33.9025 ; + RECT 20.1225 33.485 20.1775 33.5375 ; + RECT 20.2775 34.7875 20.3475 34.9225 ; + RECT 19.935 33.48 19.995 33.5375 ; + RECT 20.635 34.26 20.705 34.395 ; + RECT 19.8975 33.475 20.0325 33.545 ; + RECT 20.4575 33.4775 20.515 33.5375 ; + RECT 20.45 33.41 20.52 34.955 ; + RECT 20.64 36.225 20.7 36.1675 ; + RECT 19.93 35.45 20.0 35.315 ; + RECT 20.115 36.3 20.185 34.755 ; + RECT 20.6025 36.235 20.7375 36.165 ; + RECT 20.635 36.3 20.705 34.755 ; + RECT 19.93 36.3 20.0 34.755 ; + RECT 20.38 35.9425 20.45 35.8075 ; + RECT 20.635 36.2325 20.705 34.8225 ; + RECT 20.185 35.9425 20.255 35.8075 ; + RECT 20.1225 36.225 20.1775 36.1725 ; + RECT 20.2775 34.9225 20.3475 34.7875 ; + RECT 19.935 36.23 19.995 36.1725 ; + RECT 20.635 35.45 20.705 35.315 ; + RECT 19.8975 36.235 20.0325 36.165 ; + RECT 20.4575 36.2325 20.515 36.1725 ; + RECT 20.45 36.3 20.52 34.755 ; + RECT 20.64 36.175 20.7 36.2325 ; + RECT 19.93 36.95 20.0 37.085 ; + RECT 20.115 36.1 20.185 37.645 ; + RECT 20.6025 36.165 20.7375 36.235 ; + RECT 20.635 36.1 20.705 37.645 ; + RECT 19.93 36.1 20.0 37.645 ; + RECT 20.38 36.4575 20.45 36.5925 ; + RECT 20.635 36.1675 20.705 37.5775 ; + RECT 20.185 36.4575 20.255 36.5925 ; + RECT 20.1225 36.175 20.1775 36.2275 ; + RECT 20.2775 37.4775 20.3475 37.6125 ; + RECT 19.935 36.17 19.995 36.2275 ; + RECT 20.635 36.95 20.705 37.085 ; + RECT 19.8975 36.165 20.0325 36.235 ; + RECT 20.4575 36.1675 20.515 36.2275 ; + RECT 20.45 36.1 20.52 37.645 ; + RECT 20.64 38.915 20.7 38.8575 ; + RECT 19.93 38.14 20.0 38.005 ; + RECT 20.115 38.99 20.185 37.445 ; + RECT 20.6025 38.925 20.7375 38.855 ; + RECT 20.635 38.99 20.705 37.445 ; + RECT 19.93 38.99 20.0 37.445 ; + RECT 20.38 38.6325 20.45 38.4975 ; + RECT 20.635 38.9225 20.705 37.5125 ; + RECT 20.185 38.6325 20.255 38.4975 ; + RECT 20.1225 38.915 20.1775 38.8625 ; + RECT 20.2775 37.6125 20.3475 37.4775 ; + RECT 19.935 38.92 19.995 38.8625 ; + RECT 20.635 38.14 20.705 38.005 ; + RECT 19.8975 38.925 20.0325 38.855 ; + RECT 20.4575 38.9225 20.515 38.8625 ; + RECT 20.45 38.99 20.52 37.445 ; + RECT 20.64 38.865 20.7 38.9225 ; + RECT 19.93 39.64 20.0 39.775 ; + RECT 20.115 38.79 20.185 40.335 ; + RECT 20.6025 38.855 20.7375 38.925 ; + RECT 20.635 38.79 20.705 40.335 ; + RECT 19.93 38.79 20.0 40.335 ; + RECT 20.38 39.1475 20.45 39.2825 ; + RECT 20.635 38.8575 20.705 40.2675 ; + RECT 20.185 39.1475 20.255 39.2825 ; + RECT 20.1225 38.865 20.1775 38.9175 ; + RECT 20.2775 40.1675 20.3475 40.3025 ; + RECT 19.935 38.86 19.995 38.9175 ; + RECT 20.635 39.64 20.705 39.775 ; + RECT 19.8975 38.855 20.0325 38.925 ; + RECT 20.4575 38.8575 20.515 38.9175 ; + RECT 20.45 38.79 20.52 40.335 ; + RECT 20.64 41.605 20.7 41.5475 ; + RECT 19.93 40.83 20.0 40.695 ; + RECT 20.115 41.68 20.185 40.135 ; + RECT 20.6025 41.615 20.7375 41.545 ; + RECT 20.635 41.68 20.705 40.135 ; + RECT 19.93 41.68 20.0 40.135 ; + RECT 20.38 41.3225 20.45 41.1875 ; + RECT 20.635 41.6125 20.705 40.2025 ; + RECT 20.185 41.3225 20.255 41.1875 ; + RECT 20.1225 41.605 20.1775 41.5525 ; + RECT 20.2775 40.3025 20.3475 40.1675 ; + RECT 19.935 41.61 19.995 41.5525 ; + RECT 20.635 40.83 20.705 40.695 ; + RECT 19.8975 41.615 20.0325 41.545 ; + RECT 20.4575 41.6125 20.515 41.5525 ; + RECT 20.45 41.68 20.52 40.135 ; + RECT 20.64 41.555 20.7 41.6125 ; + RECT 19.93 42.33 20.0 42.465 ; + RECT 20.115 41.48 20.185 43.025 ; + RECT 20.6025 41.545 20.7375 41.615 ; + RECT 20.635 41.48 20.705 43.025 ; + RECT 19.93 41.48 20.0 43.025 ; + RECT 20.38 41.8375 20.45 41.9725 ; + RECT 20.635 41.5475 20.705 42.9575 ; + RECT 20.185 41.8375 20.255 41.9725 ; + RECT 20.1225 41.555 20.1775 41.6075 ; + RECT 20.2775 42.8575 20.3475 42.9925 ; + RECT 19.935 41.55 19.995 41.6075 ; + RECT 20.635 42.33 20.705 42.465 ; + RECT 19.8975 41.545 20.0325 41.615 ; + RECT 20.4575 41.5475 20.515 41.6075 ; + RECT 20.45 41.48 20.52 43.025 ; + RECT 20.64 44.295 20.7 44.2375 ; + RECT 19.93 43.52 20.0 43.385 ; + RECT 20.115 44.37 20.185 42.825 ; + RECT 20.6025 44.305 20.7375 44.235 ; + RECT 20.635 44.37 20.705 42.825 ; + RECT 19.93 44.37 20.0 42.825 ; + RECT 20.38 44.0125 20.45 43.8775 ; + RECT 20.635 44.3025 20.705 42.8925 ; + RECT 20.185 44.0125 20.255 43.8775 ; + RECT 20.1225 44.295 20.1775 44.2425 ; + RECT 20.2775 42.9925 20.3475 42.8575 ; + RECT 19.935 44.3 19.995 44.2425 ; + RECT 20.635 43.52 20.705 43.385 ; + RECT 19.8975 44.305 20.0325 44.235 ; + RECT 20.4575 44.3025 20.515 44.2425 ; + RECT 20.45 44.37 20.52 42.825 ; + RECT 20.64 44.245 20.7 44.3025 ; + RECT 19.93 45.02 20.0 45.155 ; + RECT 20.115 44.17 20.185 45.715 ; + RECT 20.6025 44.235 20.7375 44.305 ; + RECT 20.635 44.17 20.705 45.715 ; + RECT 19.93 44.17 20.0 45.715 ; + RECT 20.38 44.5275 20.45 44.6625 ; + RECT 20.635 44.2375 20.705 45.6475 ; + RECT 20.185 44.5275 20.255 44.6625 ; + RECT 20.1225 44.245 20.1775 44.2975 ; + RECT 20.2775 45.5475 20.3475 45.6825 ; + RECT 19.935 44.24 19.995 44.2975 ; + RECT 20.635 45.02 20.705 45.155 ; + RECT 19.8975 44.235 20.0325 44.305 ; + RECT 20.4575 44.2375 20.515 44.2975 ; + RECT 20.45 44.17 20.52 45.715 ; + RECT 20.2775 29.4075 20.3475 29.5425 ; + RECT 20.2775 32.0975 20.3475 32.2325 ; + RECT 20.2775 32.0975 20.3475 32.2325 ; + RECT 20.2775 45.5475 20.3475 45.6825 ; + RECT 20.2775 26.7175 20.3475 26.8525 ; + RECT 20.2775 21.3375 20.3475 21.4725 ; + RECT 20.2775 24.0275 20.3475 24.1625 ; + RECT 20.2775 24.0275 20.3475 24.1625 ; + RECT 20.2775 21.3375 20.3475 21.4725 ; + RECT 20.2775 26.7175 20.3475 26.8525 ; + RECT 20.2775 42.8575 20.3475 42.9925 ; + RECT 20.2775 37.4775 20.3475 37.6125 ; + RECT 20.2775 40.1675 20.3475 40.3025 ; + RECT 20.2775 40.1675 20.3475 40.3025 ; + RECT 20.2775 34.7875 20.3475 34.9225 ; + RECT 19.8975 41.545 20.0325 41.615 ; + RECT 19.8975 30.785 20.0325 30.855 ; + RECT 19.8975 36.165 20.0325 36.235 ; + RECT 19.8975 38.855 20.0325 38.925 ; + RECT 19.8975 44.235 20.0325 44.305 ; + RECT 19.8975 20.025 20.0325 20.095 ; + RECT 19.8975 28.095 20.0325 28.165 ; + RECT 19.8975 22.715 20.0325 22.785 ; + RECT 19.8975 33.475 20.0325 33.545 ; + RECT 19.8975 25.405 20.0325 25.475 ; + RECT 23.46 20.035 23.52 20.0925 ; + RECT 22.75 20.81 22.82 20.945 ; + RECT 22.935 19.96 23.005 21.505 ; + RECT 23.4225 20.025 23.5575 20.095 ; + RECT 23.455 19.96 23.525 21.505 ; + RECT 22.75 19.96 22.82 21.505 ; + RECT 23.2 20.3175 23.27 20.4525 ; + RECT 23.455 20.0275 23.525 21.4375 ; + RECT 23.005 20.3175 23.075 20.4525 ; + RECT 22.9425 20.035 22.9975 20.0875 ; + RECT 23.0975 21.3375 23.1675 21.4725 ; + RECT 22.755 20.03 22.815 20.0875 ; + RECT 23.455 20.81 23.525 20.945 ; + RECT 22.7175 20.025 22.8525 20.095 ; + RECT 23.2775 20.0275 23.335 20.0875 ; + RECT 23.27 19.96 23.34 21.505 ; + RECT 23.46 22.775 23.52 22.7175 ; + RECT 22.75 22.0 22.82 21.865 ; + RECT 22.935 22.85 23.005 21.305 ; + RECT 23.4225 22.785 23.5575 22.715 ; + RECT 23.455 22.85 23.525 21.305 ; + RECT 22.75 22.85 22.82 21.305 ; + RECT 23.2 22.4925 23.27 22.3575 ; + RECT 23.455 22.7825 23.525 21.3725 ; + RECT 23.005 22.4925 23.075 22.3575 ; + RECT 22.9425 22.775 22.9975 22.7225 ; + RECT 23.0975 21.4725 23.1675 21.3375 ; + RECT 22.755 22.78 22.815 22.7225 ; + RECT 23.455 22.0 23.525 21.865 ; + RECT 22.7175 22.785 22.8525 22.715 ; + RECT 23.2775 22.7825 23.335 22.7225 ; + RECT 23.27 22.85 23.34 21.305 ; + RECT 23.46 22.725 23.52 22.7825 ; + RECT 22.75 23.5 22.82 23.635 ; + RECT 22.935 22.65 23.005 24.195 ; + RECT 23.4225 22.715 23.5575 22.785 ; + RECT 23.455 22.65 23.525 24.195 ; + RECT 22.75 22.65 22.82 24.195 ; + RECT 23.2 23.0075 23.27 23.1425 ; + RECT 23.455 22.7175 23.525 24.1275 ; + RECT 23.005 23.0075 23.075 23.1425 ; + RECT 22.9425 22.725 22.9975 22.7775 ; + RECT 23.0975 24.0275 23.1675 24.1625 ; + RECT 22.755 22.72 22.815 22.7775 ; + RECT 23.455 23.5 23.525 23.635 ; + RECT 22.7175 22.715 22.8525 22.785 ; + RECT 23.2775 22.7175 23.335 22.7775 ; + RECT 23.27 22.65 23.34 24.195 ; + RECT 23.46 25.465 23.52 25.4075 ; + RECT 22.75 24.69 22.82 24.555 ; + RECT 22.935 25.54 23.005 23.995 ; + RECT 23.4225 25.475 23.5575 25.405 ; + RECT 23.455 25.54 23.525 23.995 ; + RECT 22.75 25.54 22.82 23.995 ; + RECT 23.2 25.1825 23.27 25.0475 ; + RECT 23.455 25.4725 23.525 24.0625 ; + RECT 23.005 25.1825 23.075 25.0475 ; + RECT 22.9425 25.465 22.9975 25.4125 ; + RECT 23.0975 24.1625 23.1675 24.0275 ; + RECT 22.755 25.47 22.815 25.4125 ; + RECT 23.455 24.69 23.525 24.555 ; + RECT 22.7175 25.475 22.8525 25.405 ; + RECT 23.2775 25.4725 23.335 25.4125 ; + RECT 23.27 25.54 23.34 23.995 ; + RECT 23.46 25.415 23.52 25.4725 ; + RECT 22.75 26.19 22.82 26.325 ; + RECT 22.935 25.34 23.005 26.885 ; + RECT 23.4225 25.405 23.5575 25.475 ; + RECT 23.455 25.34 23.525 26.885 ; + RECT 22.75 25.34 22.82 26.885 ; + RECT 23.2 25.6975 23.27 25.8325 ; + RECT 23.455 25.4075 23.525 26.8175 ; + RECT 23.005 25.6975 23.075 25.8325 ; + RECT 22.9425 25.415 22.9975 25.4675 ; + RECT 23.0975 26.7175 23.1675 26.8525 ; + RECT 22.755 25.41 22.815 25.4675 ; + RECT 23.455 26.19 23.525 26.325 ; + RECT 22.7175 25.405 22.8525 25.475 ; + RECT 23.2775 25.4075 23.335 25.4675 ; + RECT 23.27 25.34 23.34 26.885 ; + RECT 23.46 28.155 23.52 28.0975 ; + RECT 22.75 27.38 22.82 27.245 ; + RECT 22.935 28.23 23.005 26.685 ; + RECT 23.4225 28.165 23.5575 28.095 ; + RECT 23.455 28.23 23.525 26.685 ; + RECT 22.75 28.23 22.82 26.685 ; + RECT 23.2 27.8725 23.27 27.7375 ; + RECT 23.455 28.1625 23.525 26.7525 ; + RECT 23.005 27.8725 23.075 27.7375 ; + RECT 22.9425 28.155 22.9975 28.1025 ; + RECT 23.0975 26.8525 23.1675 26.7175 ; + RECT 22.755 28.16 22.815 28.1025 ; + RECT 23.455 27.38 23.525 27.245 ; + RECT 22.7175 28.165 22.8525 28.095 ; + RECT 23.2775 28.1625 23.335 28.1025 ; + RECT 23.27 28.23 23.34 26.685 ; + RECT 23.46 28.105 23.52 28.1625 ; + RECT 22.75 28.88 22.82 29.015 ; + RECT 22.935 28.03 23.005 29.575 ; + RECT 23.4225 28.095 23.5575 28.165 ; + RECT 23.455 28.03 23.525 29.575 ; + RECT 22.75 28.03 22.82 29.575 ; + RECT 23.2 28.3875 23.27 28.5225 ; + RECT 23.455 28.0975 23.525 29.5075 ; + RECT 23.005 28.3875 23.075 28.5225 ; + RECT 22.9425 28.105 22.9975 28.1575 ; + RECT 23.0975 29.4075 23.1675 29.5425 ; + RECT 22.755 28.1 22.815 28.1575 ; + RECT 23.455 28.88 23.525 29.015 ; + RECT 22.7175 28.095 22.8525 28.165 ; + RECT 23.2775 28.0975 23.335 28.1575 ; + RECT 23.27 28.03 23.34 29.575 ; + RECT 23.46 30.845 23.52 30.7875 ; + RECT 22.75 30.07 22.82 29.935 ; + RECT 22.935 30.92 23.005 29.375 ; + RECT 23.4225 30.855 23.5575 30.785 ; + RECT 23.455 30.92 23.525 29.375 ; + RECT 22.75 30.92 22.82 29.375 ; + RECT 23.2 30.5625 23.27 30.4275 ; + RECT 23.455 30.8525 23.525 29.4425 ; + RECT 23.005 30.5625 23.075 30.4275 ; + RECT 22.9425 30.845 22.9975 30.7925 ; + RECT 23.0975 29.5425 23.1675 29.4075 ; + RECT 22.755 30.85 22.815 30.7925 ; + RECT 23.455 30.07 23.525 29.935 ; + RECT 22.7175 30.855 22.8525 30.785 ; + RECT 23.2775 30.8525 23.335 30.7925 ; + RECT 23.27 30.92 23.34 29.375 ; + RECT 23.46 30.795 23.52 30.8525 ; + RECT 22.75 31.57 22.82 31.705 ; + RECT 22.935 30.72 23.005 32.265 ; + RECT 23.4225 30.785 23.5575 30.855 ; + RECT 23.455 30.72 23.525 32.265 ; + RECT 22.75 30.72 22.82 32.265 ; + RECT 23.2 31.0775 23.27 31.2125 ; + RECT 23.455 30.7875 23.525 32.1975 ; + RECT 23.005 31.0775 23.075 31.2125 ; + RECT 22.9425 30.795 22.9975 30.8475 ; + RECT 23.0975 32.0975 23.1675 32.2325 ; + RECT 22.755 30.79 22.815 30.8475 ; + RECT 23.455 31.57 23.525 31.705 ; + RECT 22.7175 30.785 22.8525 30.855 ; + RECT 23.2775 30.7875 23.335 30.8475 ; + RECT 23.27 30.72 23.34 32.265 ; + RECT 23.46 33.535 23.52 33.4775 ; + RECT 22.75 32.76 22.82 32.625 ; + RECT 22.935 33.61 23.005 32.065 ; + RECT 23.4225 33.545 23.5575 33.475 ; + RECT 23.455 33.61 23.525 32.065 ; + RECT 22.75 33.61 22.82 32.065 ; + RECT 23.2 33.2525 23.27 33.1175 ; + RECT 23.455 33.5425 23.525 32.1325 ; + RECT 23.005 33.2525 23.075 33.1175 ; + RECT 22.9425 33.535 22.9975 33.4825 ; + RECT 23.0975 32.2325 23.1675 32.0975 ; + RECT 22.755 33.54 22.815 33.4825 ; + RECT 23.455 32.76 23.525 32.625 ; + RECT 22.7175 33.545 22.8525 33.475 ; + RECT 23.2775 33.5425 23.335 33.4825 ; + RECT 23.27 33.61 23.34 32.065 ; + RECT 23.46 33.485 23.52 33.5425 ; + RECT 22.75 34.26 22.82 34.395 ; + RECT 22.935 33.41 23.005 34.955 ; + RECT 23.4225 33.475 23.5575 33.545 ; + RECT 23.455 33.41 23.525 34.955 ; + RECT 22.75 33.41 22.82 34.955 ; + RECT 23.2 33.7675 23.27 33.9025 ; + RECT 23.455 33.4775 23.525 34.8875 ; + RECT 23.005 33.7675 23.075 33.9025 ; + RECT 22.9425 33.485 22.9975 33.5375 ; + RECT 23.0975 34.7875 23.1675 34.9225 ; + RECT 22.755 33.48 22.815 33.5375 ; + RECT 23.455 34.26 23.525 34.395 ; + RECT 22.7175 33.475 22.8525 33.545 ; + RECT 23.2775 33.4775 23.335 33.5375 ; + RECT 23.27 33.41 23.34 34.955 ; + RECT 23.46 36.225 23.52 36.1675 ; + RECT 22.75 35.45 22.82 35.315 ; + RECT 22.935 36.3 23.005 34.755 ; + RECT 23.4225 36.235 23.5575 36.165 ; + RECT 23.455 36.3 23.525 34.755 ; + RECT 22.75 36.3 22.82 34.755 ; + RECT 23.2 35.9425 23.27 35.8075 ; + RECT 23.455 36.2325 23.525 34.8225 ; + RECT 23.005 35.9425 23.075 35.8075 ; + RECT 22.9425 36.225 22.9975 36.1725 ; + RECT 23.0975 34.9225 23.1675 34.7875 ; + RECT 22.755 36.23 22.815 36.1725 ; + RECT 23.455 35.45 23.525 35.315 ; + RECT 22.7175 36.235 22.8525 36.165 ; + RECT 23.2775 36.2325 23.335 36.1725 ; + RECT 23.27 36.3 23.34 34.755 ; + RECT 23.46 36.175 23.52 36.2325 ; + RECT 22.75 36.95 22.82 37.085 ; + RECT 22.935 36.1 23.005 37.645 ; + RECT 23.4225 36.165 23.5575 36.235 ; + RECT 23.455 36.1 23.525 37.645 ; + RECT 22.75 36.1 22.82 37.645 ; + RECT 23.2 36.4575 23.27 36.5925 ; + RECT 23.455 36.1675 23.525 37.5775 ; + RECT 23.005 36.4575 23.075 36.5925 ; + RECT 22.9425 36.175 22.9975 36.2275 ; + RECT 23.0975 37.4775 23.1675 37.6125 ; + RECT 22.755 36.17 22.815 36.2275 ; + RECT 23.455 36.95 23.525 37.085 ; + RECT 22.7175 36.165 22.8525 36.235 ; + RECT 23.2775 36.1675 23.335 36.2275 ; + RECT 23.27 36.1 23.34 37.645 ; + RECT 23.46 38.915 23.52 38.8575 ; + RECT 22.75 38.14 22.82 38.005 ; + RECT 22.935 38.99 23.005 37.445 ; + RECT 23.4225 38.925 23.5575 38.855 ; + RECT 23.455 38.99 23.525 37.445 ; + RECT 22.75 38.99 22.82 37.445 ; + RECT 23.2 38.6325 23.27 38.4975 ; + RECT 23.455 38.9225 23.525 37.5125 ; + RECT 23.005 38.6325 23.075 38.4975 ; + RECT 22.9425 38.915 22.9975 38.8625 ; + RECT 23.0975 37.6125 23.1675 37.4775 ; + RECT 22.755 38.92 22.815 38.8625 ; + RECT 23.455 38.14 23.525 38.005 ; + RECT 22.7175 38.925 22.8525 38.855 ; + RECT 23.2775 38.9225 23.335 38.8625 ; + RECT 23.27 38.99 23.34 37.445 ; + RECT 23.46 38.865 23.52 38.9225 ; + RECT 22.75 39.64 22.82 39.775 ; + RECT 22.935 38.79 23.005 40.335 ; + RECT 23.4225 38.855 23.5575 38.925 ; + RECT 23.455 38.79 23.525 40.335 ; + RECT 22.75 38.79 22.82 40.335 ; + RECT 23.2 39.1475 23.27 39.2825 ; + RECT 23.455 38.8575 23.525 40.2675 ; + RECT 23.005 39.1475 23.075 39.2825 ; + RECT 22.9425 38.865 22.9975 38.9175 ; + RECT 23.0975 40.1675 23.1675 40.3025 ; + RECT 22.755 38.86 22.815 38.9175 ; + RECT 23.455 39.64 23.525 39.775 ; + RECT 22.7175 38.855 22.8525 38.925 ; + RECT 23.2775 38.8575 23.335 38.9175 ; + RECT 23.27 38.79 23.34 40.335 ; + RECT 23.46 41.605 23.52 41.5475 ; + RECT 22.75 40.83 22.82 40.695 ; + RECT 22.935 41.68 23.005 40.135 ; + RECT 23.4225 41.615 23.5575 41.545 ; + RECT 23.455 41.68 23.525 40.135 ; + RECT 22.75 41.68 22.82 40.135 ; + RECT 23.2 41.3225 23.27 41.1875 ; + RECT 23.455 41.6125 23.525 40.2025 ; + RECT 23.005 41.3225 23.075 41.1875 ; + RECT 22.9425 41.605 22.9975 41.5525 ; + RECT 23.0975 40.3025 23.1675 40.1675 ; + RECT 22.755 41.61 22.815 41.5525 ; + RECT 23.455 40.83 23.525 40.695 ; + RECT 22.7175 41.615 22.8525 41.545 ; + RECT 23.2775 41.6125 23.335 41.5525 ; + RECT 23.27 41.68 23.34 40.135 ; + RECT 23.46 41.555 23.52 41.6125 ; + RECT 22.75 42.33 22.82 42.465 ; + RECT 22.935 41.48 23.005 43.025 ; + RECT 23.4225 41.545 23.5575 41.615 ; + RECT 23.455 41.48 23.525 43.025 ; + RECT 22.75 41.48 22.82 43.025 ; + RECT 23.2 41.8375 23.27 41.9725 ; + RECT 23.455 41.5475 23.525 42.9575 ; + RECT 23.005 41.8375 23.075 41.9725 ; + RECT 22.9425 41.555 22.9975 41.6075 ; + RECT 23.0975 42.8575 23.1675 42.9925 ; + RECT 22.755 41.55 22.815 41.6075 ; + RECT 23.455 42.33 23.525 42.465 ; + RECT 22.7175 41.545 22.8525 41.615 ; + RECT 23.2775 41.5475 23.335 41.6075 ; + RECT 23.27 41.48 23.34 43.025 ; + RECT 23.46 44.295 23.52 44.2375 ; + RECT 22.75 43.52 22.82 43.385 ; + RECT 22.935 44.37 23.005 42.825 ; + RECT 23.4225 44.305 23.5575 44.235 ; + RECT 23.455 44.37 23.525 42.825 ; + RECT 22.75 44.37 22.82 42.825 ; + RECT 23.2 44.0125 23.27 43.8775 ; + RECT 23.455 44.3025 23.525 42.8925 ; + RECT 23.005 44.0125 23.075 43.8775 ; + RECT 22.9425 44.295 22.9975 44.2425 ; + RECT 23.0975 42.9925 23.1675 42.8575 ; + RECT 22.755 44.3 22.815 44.2425 ; + RECT 23.455 43.52 23.525 43.385 ; + RECT 22.7175 44.305 22.8525 44.235 ; + RECT 23.2775 44.3025 23.335 44.2425 ; + RECT 23.27 44.37 23.34 42.825 ; + RECT 23.46 44.245 23.52 44.3025 ; + RECT 22.75 45.02 22.82 45.155 ; + RECT 22.935 44.17 23.005 45.715 ; + RECT 23.4225 44.235 23.5575 44.305 ; + RECT 23.455 44.17 23.525 45.715 ; + RECT 22.75 44.17 22.82 45.715 ; + RECT 23.2 44.5275 23.27 44.6625 ; + RECT 23.455 44.2375 23.525 45.6475 ; + RECT 23.005 44.5275 23.075 44.6625 ; + RECT 22.9425 44.245 22.9975 44.2975 ; + RECT 23.0975 45.5475 23.1675 45.6825 ; + RECT 22.755 44.24 22.815 44.2975 ; + RECT 23.455 45.02 23.525 45.155 ; + RECT 22.7175 44.235 22.8525 44.305 ; + RECT 23.2775 44.2375 23.335 44.2975 ; + RECT 23.27 44.17 23.34 45.715 ; + RECT 23.0975 29.4075 23.1675 29.5425 ; + RECT 23.0975 32.0975 23.1675 32.2325 ; + RECT 23.0975 32.0975 23.1675 32.2325 ; + RECT 23.0975 45.5475 23.1675 45.6825 ; + RECT 23.0975 26.7175 23.1675 26.8525 ; + RECT 23.0975 21.3375 23.1675 21.4725 ; + RECT 23.0975 24.0275 23.1675 24.1625 ; + RECT 23.0975 24.0275 23.1675 24.1625 ; + RECT 23.0975 21.3375 23.1675 21.4725 ; + RECT 23.0975 26.7175 23.1675 26.8525 ; + RECT 23.0975 42.8575 23.1675 42.9925 ; + RECT 23.0975 37.4775 23.1675 37.6125 ; + RECT 23.0975 40.1675 23.1675 40.3025 ; + RECT 23.0975 40.1675 23.1675 40.3025 ; + RECT 23.0975 34.7875 23.1675 34.9225 ; + RECT 22.7175 41.545 22.8525 41.615 ; + RECT 22.7175 30.785 22.8525 30.855 ; + RECT 22.7175 36.165 22.8525 36.235 ; + RECT 22.7175 38.855 22.8525 38.925 ; + RECT 22.7175 44.235 22.8525 44.305 ; + RECT 22.7175 20.025 22.8525 20.095 ; + RECT 22.7175 28.095 22.8525 28.165 ; + RECT 22.7175 22.715 22.8525 22.785 ; + RECT 22.7175 33.475 22.8525 33.545 ; + RECT 22.7175 25.405 22.8525 25.475 ; + RECT 20.82 20.06 20.89 45.615 ; + RECT 21.155 20.06 21.225 45.615 ; + RECT 21.525 20.06 21.595 45.615 ; + RECT 21.86 20.06 21.93 45.615 ; + RECT 22.23 20.06 22.3 45.615 ; + RECT 22.565 20.06 22.635 45.615 ; + RECT 20.9825 40.1675 21.0525 40.3025 ; + RECT 20.9825 37.4775 21.0525 37.6125 ; + RECT 20.9825 42.8575 21.0525 42.9925 ; + RECT 20.9825 29.4075 21.0525 29.5425 ; + RECT 20.9825 24.0275 21.0525 24.1625 ; + RECT 20.9825 34.7875 21.0525 34.9225 ; + RECT 20.9825 26.7175 21.0525 26.8525 ; + RECT 20.9825 32.0975 21.0525 32.2325 ; + RECT 20.9825 21.3375 21.0525 21.4725 ; + RECT 20.6025 33.475 20.7375 33.545 ; + RECT 20.6025 36.165 20.7375 36.235 ; + RECT 20.6025 28.095 20.7375 28.165 ; + RECT 20.6025 44.235 20.7375 44.305 ; + RECT 20.6025 25.405 20.7375 25.475 ; + RECT 20.6025 30.785 20.7375 30.855 ; + RECT 20.6025 22.715 20.7375 22.785 ; + RECT 20.6025 38.855 20.7375 38.925 ; + RECT 20.6025 41.545 20.7375 41.615 ; + RECT 20.775 18.215 20.845 19.555 ; + RECT 21.2 18.215 21.27 19.555 ; + RECT 21.48 18.215 21.55 19.555 ; + RECT 21.905 18.215 21.975 19.555 ; + RECT 22.185 18.215 22.255 19.555 ; + RECT 22.61 18.215 22.68 19.555 ; + RECT 20.775 18.215 20.845 19.555 ; + RECT 21.2 18.215 21.27 19.555 ; + RECT 21.48 18.215 21.55 19.555 ; + RECT 21.905 18.215 21.975 19.555 ; + RECT 22.185 18.215 22.255 19.555 ; + RECT 22.61 18.215 22.68 19.555 ; + RECT 21.86 12.825 21.93 17.71 ; + RECT 21.8825 14.545 21.9525 14.68 ; + RECT 21.5 14.135 21.57 14.27 ; + RECT 21.6925 13.425 21.7625 15.435 ; + RECT 21.6925 15.435 21.7625 15.57 ; + RECT 21.6925 13.2925 21.7625 13.4275 ; + RECT 22.045 17.3275 22.115 17.4625 ; + RECT 21.525 12.825 21.595 17.71 ; + RECT 21.375 12.825 21.445 13.2225 ; + RECT 22.565 12.825 22.635 17.71 ; + RECT 22.5875 14.545 22.6575 14.68 ; + RECT 22.205 14.135 22.275 14.27 ; + RECT 22.3975 13.425 22.4675 15.435 ; + RECT 22.3975 15.435 22.4675 15.57 ; + RECT 22.3975 13.2925 22.4675 13.4275 ; + RECT 22.75 17.3275 22.82 17.4625 ; + RECT 22.23 12.825 22.3 17.71 ; + RECT 22.08 12.825 22.15 13.2225 ; + RECT 21.375 12.825 21.445 13.2225 ; + RECT 21.525 12.825 21.595 17.71 ; + RECT 21.86 12.825 21.93 17.71 ; + RECT 22.08 12.825 22.15 13.2225 ; + RECT 22.23 12.825 22.3 17.71 ; + RECT 22.565 12.825 22.635 17.71 ; + RECT 21.48 8.61 21.55 10.93 ; + RECT 21.76 9.515 21.83 9.65 ; + RECT 21.62 9.24 21.69 9.515 ; + RECT 21.34 11.8075 21.41 11.9425 ; + RECT 21.79 9.88 21.86 10.015 ; + RECT 21.79 10.395 21.86 10.53 ; + RECT 22.045 9.88 22.115 10.015 ; + RECT 21.62 9.515 21.69 11.6125 ; + RECT 21.76 9.105 21.83 9.24 ; + RECT 21.34 9.88 21.41 10.015 ; + RECT 21.48 8.54 21.615 8.61 ; + RECT 21.5825 8.2775 21.7175 8.3475 ; + RECT 21.34 9.515 21.41 9.65 ; + RECT 22.045 9.31 22.115 11.9425 ; + RECT 21.76 9.24 21.83 9.515 ; + RECT 21.525 12.0175 21.595 12.1525 ; + RECT 21.62 11.485 21.69 11.62 ; + RECT 21.86 9.88 21.93 12.32 ; + RECT 21.525 12.02 21.595 12.32 ; + RECT 21.5325 8.2775 21.725 8.3475 ; + RECT 21.62 9.105 21.69 9.24 ; + RECT 21.48 10.795 21.55 10.93 ; + RECT 22.045 11.8075 22.115 11.9425 ; + RECT 21.655 8.145 21.725 8.285 ; + RECT 21.34 9.31 21.41 9.445 ; + RECT 21.34 9.3075 21.41 11.9425 ; + RECT 21.62 9.515 21.69 9.65 ; + RECT 22.045 9.515 22.115 9.65 ; + RECT 22.045 9.31 22.115 9.445 ; + RECT 22.185 8.61 22.255 10.93 ; + RECT 22.465 9.515 22.535 9.65 ; + RECT 22.325 9.24 22.395 9.515 ; + RECT 22.045 11.8075 22.115 11.9425 ; + RECT 22.495 9.88 22.565 10.015 ; + RECT 22.495 10.395 22.565 10.53 ; + RECT 22.75 9.88 22.82 10.015 ; + RECT 22.325 9.515 22.395 11.6125 ; + RECT 22.465 9.105 22.535 9.24 ; + RECT 22.045 9.88 22.115 10.015 ; + RECT 22.185 8.54 22.32 8.61 ; + RECT 22.2875 8.2775 22.4225 8.3475 ; + RECT 22.045 9.515 22.115 9.65 ; + RECT 22.75 9.31 22.82 11.9425 ; + RECT 22.465 9.24 22.535 9.515 ; + RECT 22.23 12.0175 22.3 12.1525 ; + RECT 22.325 11.485 22.395 11.62 ; + RECT 22.565 9.88 22.635 12.32 ; + RECT 22.23 12.02 22.3 12.32 ; + RECT 22.2375 8.2775 22.43 8.3475 ; + RECT 22.325 9.105 22.395 9.24 ; + RECT 22.185 10.795 22.255 10.93 ; + RECT 22.75 11.8075 22.82 11.9425 ; + RECT 22.36 8.145 22.43 8.285 ; + RECT 22.045 9.31 22.115 9.445 ; + RECT 22.045 9.3075 22.115 11.9425 ; + RECT 22.325 9.515 22.395 9.65 ; + RECT 22.75 9.515 22.82 9.65 ; + RECT 22.75 9.31 22.82 9.445 ; + RECT 21.655 8.145 21.725 8.285 ; + RECT 22.36 8.145 22.43 8.285 ; + RECT 21.525 12.02 21.595 12.32 ; + RECT 21.86 9.88 21.93 12.32 ; + RECT 22.23 12.02 22.3 12.32 ; + RECT 22.565 9.88 22.635 12.32 ; + RECT 20.775 19.555 20.845 18.215 ; + RECT 21.2 19.555 21.27 18.215 ; + RECT 21.48 19.555 21.55 18.215 ; + RECT 21.905 19.555 21.975 18.215 ; + RECT 22.185 19.555 22.255 18.215 ; + RECT 22.61 19.555 22.68 18.215 ; + RECT 21.375 13.2225 21.445 12.825 ; + RECT 22.08 13.2225 22.15 12.825 ; + RECT 21.655 8.285 21.725 8.145 ; + RECT 22.36 8.285 22.43 8.145 ; + RECT 10.75 23.31 10.82 23.445 ; + RECT 10.89 24.745 10.96 24.88 ; + RECT 10.75 31.38 10.82 31.515 ; + RECT 10.89 32.815 10.96 32.95 ; + RECT 9.98 22.75 10.05 36.2 ; + RECT 10.12 22.75 10.19 36.2 ; + RECT 10.26 22.75 10.33 36.2 ; + RECT 10.4 22.75 10.47 36.2 ; + RECT 17.55 22.75 17.62 44.27 ; + RECT 9.98 22.75 10.05 36.2 ; + RECT 10.12 22.75 10.19 36.2 ; + RECT 10.26 22.75 10.33 36.2 ; + RECT 10.4 22.75 10.47 36.2 ; + RECT 18.0875 22.0875 18.1575 22.1575 ; + RECT 21.375 12.825 21.445 13.2225 ; + RECT 22.08 12.825 22.15 13.2225 ; + RECT 21.655 8.145 21.725 8.285 ; + RECT 22.36 8.145 22.43 8.285 ; + RECT 9.98 22.75 10.05 36.2 ; + RECT 10.12 22.75 10.19 36.2 ; + RECT 10.26 22.75 10.33 36.2 ; + RECT 10.4 22.75 10.47 36.2 ; + RECT 18.93 8.145 19.0 20.06 ; + RECT 19.21 8.145 19.28 20.06 ; + RECT 19.07 8.145 19.14 20.06 ; + RECT 19.35 8.145 19.42 20.06 ; + RECT 2.0475 0.5875 2.1175 1.1925 ; + RECT 2.6325 1.0475 2.71 1.1825 ; + RECT 0.245 1.0375 0.3225 1.1725 ; + RECT 1.82 1.0375 1.8975 1.1725 ; + POLYGON 2.3225 1.9925 2.3225 2.1975 1.9775 2.1975 1.9775 2.2675 2.3925 2.2675 2.3925 1.9925 2.3225 1.9925 ; + POLYGON 1.2075 1.4275 1.2075 1.7025 1.2225 1.7025 1.2225 1.9975 1.2925 1.9975 1.2925 1.4275 1.2075 1.4275 ; + POLYGON 2.3325 1.4825 2.3325 1.7775 2.3275 1.7775 2.3275 1.9125 2.4025 1.9125 2.4025 1.4825 2.3325 1.4825 ; + RECT 0.245 1.0375 0.3225 1.1725 ; + RECT 4.4 0.7025 4.47 0.7725 ; + RECT 3.705 1.5225 3.775 1.5925 ; + RECT 1.82 1.0375 1.8975 1.1725 ; + RECT 2.0475 4.3625 2.1175 3.7575 ; + RECT 2.6325 3.9025 2.71 3.7675 ; + RECT 0.245 3.9125 0.3225 3.7775 ; + RECT 1.82 3.9125 1.8975 3.7775 ; + POLYGON 2.3225 2.9575 2.3225 2.7525 1.9775 2.7525 1.9775 2.6825 2.3925 2.6825 2.3925 2.9575 2.3225 2.9575 ; + POLYGON 1.2075 3.5225 1.2075 3.2475 1.2225 3.2475 1.2225 2.9525 1.2925 2.9525 1.2925 3.5225 1.2075 3.5225 ; + POLYGON 2.3325 3.4675 2.3325 3.1725 2.3275 3.1725 2.3275 3.0375 2.4025 3.0375 2.4025 3.4675 2.3325 3.4675 ; + RECT 0.245 3.9125 0.3225 3.7775 ; + RECT 4.4 4.2475 4.47 4.1775 ; + RECT 3.705 3.4275 3.775 3.3575 ; + RECT 1.82 3.9125 1.8975 3.7775 ; + RECT 0.245 1.0375 0.3225 1.1725 ; + RECT 0.245 3.7775 0.3225 3.9125 ; + RECT 4.4 0.7025 4.47 0.7725 ; + RECT 3.705 1.5225 3.775 1.5925 ; + RECT 4.4 4.1775 4.47 4.2475 ; + RECT 3.705 3.3575 3.775 3.4275 ; + RECT 1.82 0.0 1.89 4.95 ; + RECT 3.365 20.06 3.295 20.925 ; + RECT 0.3725 20.06 0.3025 35.485 ; + RECT 0.245 1.0375 0.3225 1.1725 ; + RECT 0.245 3.7775 0.3225 3.9125 ; + RECT 6.155 1.1575 6.225 1.2275 ; + RECT 3.295 20.06 3.365 20.925 ; + RECT 7.3875 18.6175 9.6675 18.6875 ; + RECT 7.6775 10.9525 9.6675 11.0225 ; + RECT 8.0125 13.6225 9.6675 13.6925 ; + RECT 8.07 8.74 9.6675 8.81 ; + RECT 8.88 1.0675 9.6675 1.1375 ; + RECT 8.855 37.2875 8.925 37.8925 ; + RECT 9.44 37.7475 9.5175 37.8825 ; + RECT 7.0525 37.7375 7.13 37.8725 ; + RECT 8.6275 37.7375 8.705 37.8725 ; + POLYGON 9.13 38.6925 9.13 38.8975 8.785 38.8975 8.785 38.9675 9.2 38.9675 9.2 38.6925 9.13 38.6925 ; + POLYGON 8.015 38.1275 8.015 38.4025 8.03 38.4025 8.03 38.6975 8.1 38.6975 8.1 38.1275 8.015 38.1275 ; + POLYGON 9.14 38.1825 9.14 38.4775 9.135 38.4775 9.135 38.6125 9.21 38.6125 9.21 38.1825 9.14 38.1825 ; + RECT 8.855 41.0625 8.925 40.4575 ; + RECT 9.44 40.6025 9.5175 40.4675 ; + RECT 7.0525 40.6125 7.13 40.4775 ; + RECT 8.6275 40.6125 8.705 40.4775 ; + POLYGON 9.13 39.6575 9.13 39.4525 8.785 39.4525 8.785 39.3825 9.2 39.3825 9.2 39.6575 9.13 39.6575 ; + POLYGON 8.015 40.2225 8.015 39.9475 8.03 39.9475 8.03 39.6525 8.1 39.6525 8.1 40.2225 8.015 40.2225 ; + POLYGON 9.14 40.1675 9.14 39.8725 9.135 39.8725 9.135 39.7375 9.21 39.7375 9.21 40.1675 9.14 40.1675 ; + RECT 8.855 42.2375 8.925 42.8425 ; + RECT 9.44 42.6975 9.5175 42.8325 ; + RECT 7.0525 42.6875 7.13 42.8225 ; + RECT 8.6275 42.6875 8.705 42.8225 ; + POLYGON 9.13 43.6425 9.13 43.8475 8.785 43.8475 8.785 43.9175 9.2 43.9175 9.2 43.6425 9.13 43.6425 ; + POLYGON 8.015 43.0775 8.015 43.3525 8.03 43.3525 8.03 43.6475 8.1 43.6475 8.1 43.0775 8.015 43.0775 ; + POLYGON 9.14 43.1325 9.14 43.4275 9.135 43.4275 9.135 43.5625 9.21 43.5625 9.21 43.1325 9.14 43.1325 ; + RECT 8.855 46.0125 8.925 45.4075 ; + RECT 9.44 45.5525 9.5175 45.4175 ; + RECT 7.0525 45.5625 7.13 45.4275 ; + RECT 8.6275 45.5625 8.705 45.4275 ; + POLYGON 9.13 44.6075 9.13 44.4025 8.785 44.4025 8.785 44.3325 9.2 44.3325 9.2 44.6075 9.13 44.6075 ; + POLYGON 8.015 45.1725 8.015 44.8975 8.03 44.8975 8.03 44.6025 8.1 44.6025 8.1 45.1725 8.015 45.1725 ; + POLYGON 9.14 45.1175 9.14 44.8225 9.135 44.8225 9.135 44.6875 9.21 44.6875 9.21 45.1175 9.14 45.1175 ; + RECT 7.0525 37.7375 7.13 37.8725 ; + RECT 7.0525 40.4775 7.13 40.6125 ; + RECT 7.0525 42.6875 7.13 42.8225 ; + RECT 7.0525 45.4275 7.13 45.5625 ; + RECT 9.44 37.7475 9.5175 37.8825 ; + RECT 9.44 40.4675 9.5175 40.6025 ; + RECT 9.44 42.6975 9.5175 42.8325 ; + RECT 9.44 45.4175 9.5175 45.5525 ; + RECT 14.575 0.5875 14.645 1.1925 ; + RECT 15.16 1.0475 15.2375 1.1825 ; + RECT 12.7725 1.0375 12.85 1.1725 ; + RECT 14.3475 1.0375 14.425 1.1725 ; + POLYGON 14.85 1.9925 14.85 2.1975 14.505 2.1975 14.505 2.2675 14.92 2.2675 14.92 1.9925 14.85 1.9925 ; + POLYGON 13.735 1.4275 13.735 1.7025 13.75 1.7025 13.75 1.9975 13.82 1.9975 13.82 1.4275 13.735 1.4275 ; + POLYGON 14.86 1.4825 14.86 1.7775 14.855 1.7775 14.855 1.9125 14.93 1.9125 14.93 1.4825 14.86 1.4825 ; + RECT 17.435 0.5875 17.505 1.1925 ; + RECT 18.02 1.0475 18.0975 1.1825 ; + RECT 15.6325 1.0375 15.71 1.1725 ; + RECT 17.2075 1.0375 17.285 1.1725 ; + POLYGON 17.71 1.9925 17.71 2.1975 17.365 2.1975 17.365 2.2675 17.78 2.2675 17.78 1.9925 17.71 1.9925 ; + POLYGON 16.595 1.4275 16.595 1.7025 16.61 1.7025 16.61 1.9975 16.68 1.9975 16.68 1.4275 16.595 1.4275 ; + POLYGON 17.72 1.4825 17.72 1.7775 17.715 1.7775 17.715 1.9125 17.79 1.9125 17.79 1.4825 17.72 1.4825 ; + RECT 12.7725 1.0375 12.85 1.1725 ; + RECT 15.6325 1.0375 15.71 1.1725 ; + RECT 15.16 1.0475 15.2375 1.1825 ; + RECT 18.02 1.0475 18.0975 1.1825 ; LAYER metal3 ; - RECT -140.0 34707.5 9465.0 34777.5 ; - RECT -140.0 35667.5 9260.0 35737.5 ; - RECT -140.0 33337.5 8850.0 33407.5 ; - RECT -140.0 34482.5 8645.0 34552.5 ; - RECT -140.0 32042.5 9055.0 32112.5 ; - RECT -140.0 30607.5 8440.0 30677.5 ; - RECT -140.0 31632.5 592.5 31702.5 ; - RECT 10050.0 19822.5 10120.0 19892.5 ; - RECT 10050.0 1312.5 10120.0 19857.5 ; - RECT 10085.0 19822.5 10255.0 19892.5 ; - RECT 10755.0 19822.5 10825.0 19892.5 ; - RECT 10755.0 1312.5 10825.0 19857.5 ; - RECT 10790.0 19822.5 10960.0 19892.5 ; - RECT 10260.0 67.5 10330.0 4427.5 ; - RECT 10965.0 67.5 11035.0 4427.5 ; - RECT 10255.0 19787.5 10325.0 19927.5 ; - RECT 10960.0 19787.5 11030.0 19927.5 ; - RECT 10260.0 4427.5 10330.0 4567.5 ; - RECT 10965.0 4427.5 11035.0 4567.5 ; - RECT 837.5 8440.0 977.5 8370.0 ; - RECT 837.5 7735.0 977.5 7665.0 ; - RECT 837.5 7030.0 977.5 6960.0 ; - RECT 837.5 6325.0 977.5 6255.0 ; - RECT 10050.0 1277.5 10120.0 1412.5 ; - RECT 10755.0 1277.5 10825.0 1412.5 ; - RECT 10260.0 67.5 10330.0 202.5 ; - RECT 10965.0 67.5 11035.0 202.5 ; - RECT 67.5 8370.0 837.5 8440.0 ; - RECT 67.5 7665.0 837.5 7735.0 ; - RECT 67.5 6960.0 837.5 7030.0 ; - RECT 67.5 6255.0 837.5 6325.0 ; - RECT -3777.5 30197.5 -3847.5 31872.5 ; - RECT -3622.5 30197.5 -3692.5 31052.5 ; - RECT -2762.5 30197.5 -2832.5 31257.5 ; - RECT -2367.5 30197.5 -2437.5 31462.5 ; - RECT -3975.0 30197.5 -4045.0 30847.5 ; - RECT -3270.0 30197.5 -3340.0 30847.5 ; - RECT -2565.0 30197.5 -2635.0 30847.5 ; - RECT -1860.0 30197.5 -1930.0 30847.5 ; - RECT -1450.0 26562.5 -1520.0 32077.5 ; - RECT -2155.0 32077.5 -2225.0 33590.0 ; - RECT -2370.0 31872.5 -2440.0 33847.5 ; - RECT -3692.5 23757.5 -3622.5 23897.5 ; - RECT -2987.5 23757.5 -2917.5 23897.5 ; - RECT -2282.5 23757.5 -2212.5 23897.5 ; - RECT -3777.5 30265.0 -3847.5 30130.0 ; - RECT -3777.5 31940.0 -3847.5 31805.0 ; - RECT -3622.5 30265.0 -3692.5 30130.0 ; - RECT -3622.5 31120.0 -3692.5 30985.0 ; - RECT -2762.5 30265.0 -2832.5 30130.0 ; - RECT -2762.5 31325.0 -2832.5 31190.0 ; - RECT -2367.5 30265.0 -2437.5 30130.0 ; - RECT -2367.5 31530.0 -2437.5 31395.0 ; - RECT -3975.0 30265.0 -4045.0 30130.0 ; - RECT -3975.0 30915.0 -4045.0 30780.0 ; - RECT -3270.0 30265.0 -3340.0 30130.0 ; - RECT -3270.0 30915.0 -3340.0 30780.0 ; - RECT -2565.0 30265.0 -2635.0 30130.0 ; - RECT -2565.0 30915.0 -2635.0 30780.0 ; - RECT -1860.0 30265.0 -1930.0 30130.0 ; - RECT -1860.0 30915.0 -1930.0 30780.0 ; - RECT -1450.0 26630.0 -1520.0 26495.0 ; - RECT -1450.0 32145.0 -1520.0 32010.0 ; - RECT -2155.0 33657.5 -2225.0 33522.5 ; - RECT -2155.0 32145.0 -2225.0 32010.0 ; - RECT -2370.0 33915.0 -2440.0 33780.0 ; - RECT -2370.0 31940.0 -2440.0 31805.0 ; - RECT -2917.5 23757.5 -2987.5 23897.5 ; - RECT -2212.5 23757.5 -2282.5 23897.5 ; - RECT -3622.5 23757.5 -3692.5 23897.5 ; - RECT 9532.5 34707.5 9397.5 34777.5 ; - RECT -140.0 34707.5 -275.0 34777.5 ; - RECT 9327.5 35667.5 9192.5 35737.5 ; - RECT -140.0 35667.5 -275.0 35737.5 ; - RECT 8917.5 33337.5 8782.5 33407.5 ; - RECT -140.0 33337.5 -275.0 33407.5 ; - RECT 8712.5 34482.5 8577.5 34552.5 ; - RECT -140.0 34482.5 -275.0 34552.5 ; - RECT 9122.5 32042.5 8987.5 32112.5 ; - RECT -140.0 32042.5 -275.0 32112.5 ; - RECT 8507.5 30607.5 8372.5 30677.5 ; - RECT -140.0 30607.5 -275.0 30677.5 ; - RECT 660.0 31632.5 525.0 31702.5 ; - RECT -140.0 31632.5 -275.0 31702.5 ; + RECT 20.95 21.3375 21.085 21.4725 ; + RECT 20.95 45.5475 21.085 45.6825 ; + RECT 20.6025 19.9925 20.7375 20.1275 ; + RECT 20.6025 44.2025 20.7375 44.3375 ; + RECT 20.245 26.7175 20.38 26.8525 ; + RECT 20.245 45.5475 20.38 45.6825 ; + RECT 23.065 37.4775 23.2 37.6125 ; + RECT 21.655 21.3375 21.79 21.4725 ; + RECT 20.245 40.1675 20.38 40.3025 ; + RECT 23.065 42.8575 23.2 42.9925 ; + RECT 22.36 21.3375 22.495 21.4725 ; + RECT 23.065 40.1675 23.2 40.3025 ; + RECT 20.245 24.0275 20.38 24.1625 ; + RECT 20.245 34.7875 20.38 34.9225 ; + RECT 21.655 45.5475 21.79 45.6825 ; + RECT 23.065 45.5475 23.2 45.6825 ; + RECT 23.065 34.7875 23.2 34.9225 ; + RECT 20.245 29.4075 20.38 29.5425 ; + RECT 20.245 42.8575 20.38 42.9925 ; + RECT 20.95 45.5475 21.085 45.6825 ; + RECT 23.065 21.3375 23.2 21.4725 ; + RECT 20.245 37.4775 20.38 37.6125 ; + RECT 23.065 32.0975 23.2 32.2325 ; + RECT 20.95 21.3375 21.085 21.4725 ; + RECT 23.065 26.7175 23.2 26.8525 ; + RECT 23.065 24.0275 23.2 24.1625 ; + RECT 22.36 45.5475 22.495 45.6825 ; + RECT 20.245 32.0975 20.38 32.2325 ; + RECT 20.245 21.3375 20.38 21.4725 ; + RECT 23.065 29.4075 23.2 29.5425 ; + RECT 19.8975 41.5125 20.0325 41.6475 ; + RECT 23.6175 20.165 23.7525 20.235 ; + RECT 22.7175 28.0625 22.8525 28.1975 ; + RECT 22.7175 19.9925 22.8525 20.1275 ; + RECT 19.8975 19.9925 20.0325 20.1275 ; + RECT 23.6175 44.375 23.7525 44.445 ; + RECT 19.7025 20.165 19.8375 20.235 ; + RECT 22.7175 38.8225 22.8525 38.9575 ; + RECT 19.8975 22.6825 20.0325 22.8175 ; + RECT 22.7175 41.5125 22.8525 41.6475 ; + RECT 22.0125 19.9925 22.1475 20.1275 ; + RECT 21.3075 44.2025 21.4425 44.3375 ; + RECT 19.8975 36.1325 20.0325 36.2675 ; + RECT 22.7175 25.3725 22.8525 25.5075 ; + RECT 19.8975 30.7525 20.0325 30.8875 ; + RECT 19.8975 38.8225 20.0325 38.9575 ; + RECT 22.7175 22.6825 22.8525 22.8175 ; + RECT 19.8975 33.4425 20.0325 33.5775 ; + RECT 19.8975 44.2025 20.0325 44.3375 ; + RECT 22.7175 30.7525 22.8525 30.8875 ; + RECT 19.8975 25.3725 20.0325 25.5075 ; + RECT 21.3075 19.9925 21.4425 20.1275 ; + RECT 19.8975 28.0625 20.0325 28.1975 ; + RECT 22.7175 44.2025 22.8525 44.3375 ; + RECT 20.6025 19.9925 20.7375 20.1275 ; + RECT 22.7175 33.4425 22.8525 33.5775 ; + RECT 20.6025 44.2025 20.7375 44.3375 ; + RECT 22.7175 36.1325 22.8525 36.2675 ; + RECT 19.7025 44.375 19.8375 44.445 ; + RECT 22.0125 44.2025 22.1475 44.3375 ; + RECT 21.0075 19.3325 21.0775 19.4675 ; + RECT 21.7125 19.3325 21.7825 19.4675 ; + RECT 22.4175 19.3325 22.4875 19.4675 ; + RECT 21.0075 19.3325 21.0775 19.4675 ; + RECT 22.4175 19.3325 22.4875 19.4675 ; + RECT 21.7125 19.3325 21.7825 19.4675 ; + RECT 21.6925 13.2925 21.7625 13.4275 ; + RECT 22.3975 13.2925 22.4675 13.4275 ; + RECT 22.75 17.3275 22.82 17.4625 ; + RECT 22.045 17.3275 22.115 17.4625 ; + RECT 21.5125 8.5075 21.5825 8.6425 ; + RECT 22.2175 8.5075 22.2875 8.6425 ; + RECT 22.045 10.5575 22.115 10.6925 ; + RECT 21.34 10.5575 21.41 10.6925 ; + RECT 22.2175 8.6425 22.2875 8.5075 ; + RECT 21.5125 8.6425 21.5825 8.5075 ; + RECT 22.3975 13.4275 22.4675 13.2925 ; + RECT 21.6925 13.4275 21.7625 13.2925 ; + RECT 22.4175 19.4675 22.4875 19.3325 ; + RECT 21.0075 19.4675 21.0775 19.3325 ; + RECT 21.7125 19.4675 21.7825 19.3325 ; + RECT 22.75 17.4625 22.82 17.3275 ; + RECT 21.34 10.6925 21.41 10.5575 ; + RECT 22.045 10.6925 22.115 10.5575 ; + RECT 22.045 17.4625 22.115 17.3275 ; + RECT 12.56 24.0275 12.695 24.1625 ; + RECT 11.0325 26.7175 11.1675 26.8525 ; + RECT 11.0325 24.0275 11.1675 24.1625 ; + RECT 12.56 26.7175 12.695 26.8525 ; + RECT 12.56 25.3725 12.695 25.5075 ; + RECT 11.0325 22.6825 11.1675 22.8175 ; + RECT 11.0325 25.3725 11.1675 25.5075 ; + RECT 12.56 22.6825 12.695 22.8175 ; + RECT 11.0325 28.0625 11.1675 28.1975 ; + RECT 12.56 28.0625 12.695 28.1975 ; + RECT 12.56 32.0975 12.695 32.2325 ; + RECT 11.0325 34.7875 11.1675 34.9225 ; + RECT 11.0325 32.0975 11.1675 32.2325 ; + RECT 12.56 34.7875 12.695 34.9225 ; + RECT 12.56 33.4425 12.695 33.5775 ; + RECT 11.0325 30.7525 11.1675 30.8875 ; + RECT 11.0325 33.4425 11.1675 33.5775 ; + RECT 12.56 30.7525 12.695 30.8875 ; + RECT 11.0325 36.1325 11.1675 36.2675 ; + RECT 12.56 36.1325 12.695 36.2675 ; + RECT 12.56 32.0975 12.695 32.2325 ; + RECT 11.0325 26.7175 11.1675 26.8525 ; + RECT 11.0325 34.7875 11.1675 34.9225 ; + RECT 11.0325 32.0975 11.1675 32.2325 ; + RECT 17.1025 40.1675 17.2375 40.3025 ; + RECT 17.1025 26.7175 17.2375 26.8525 ; + RECT 11.0325 24.0275 11.1675 24.1625 ; + RECT 12.56 26.7175 12.695 26.8525 ; + RECT 17.1025 29.4075 17.2375 29.5425 ; + RECT 17.1025 29.4075 17.2375 29.5425 ; + RECT 12.56 24.0275 12.695 24.1625 ; + RECT 17.1025 32.0975 17.2375 32.2325 ; + RECT 17.1025 37.4775 17.2375 37.6125 ; + RECT 17.1025 34.7875 17.2375 34.9225 ; + RECT 12.56 34.7875 12.695 34.9225 ; + RECT 17.1025 24.0275 17.2375 24.1625 ; + RECT 17.1025 42.8575 17.2375 42.9925 ; + RECT 17.1025 42.8575 17.2375 42.9925 ; + RECT 17.1025 36.1325 17.2375 36.2675 ; + RECT 11.0325 25.3725 11.1675 25.5075 ; + RECT 12.56 36.1325 12.695 36.2675 ; + RECT 11.0325 22.6825 11.1675 22.8175 ; + RECT 17.1025 28.0625 17.2375 28.1975 ; + RECT 17.1025 33.4425 17.2375 33.5775 ; + RECT 12.56 33.4425 12.695 33.5775 ; + RECT 17.1025 22.6825 17.2375 22.8175 ; + RECT 17.1025 41.5125 17.2375 41.6475 ; + RECT 11.0325 33.4425 11.1675 33.5775 ; + RECT 11.0325 28.0625 11.1675 28.1975 ; + RECT 11.0325 30.7525 11.1675 30.8875 ; + RECT 17.1025 38.8225 17.2375 38.9575 ; + RECT 17.1025 44.2025 17.2375 44.3375 ; + RECT 17.1025 25.3725 17.2375 25.5075 ; + RECT 12.56 30.7525 12.695 30.8875 ; + RECT 12.56 25.3725 12.695 25.5075 ; + RECT 17.1025 30.7525 17.2375 30.8875 ; + RECT 12.56 28.0625 12.695 28.1975 ; + RECT 11.0325 36.1325 11.1675 36.2675 ; + RECT 12.56 22.6825 12.695 22.8175 ; + RECT 18.6925 29.4075 18.8275 29.5425 ; + RECT 18.6925 29.4075 18.8275 29.5425 ; + RECT 18.6925 34.7875 18.8275 34.9225 ; + RECT 18.6925 42.8575 18.8275 42.9925 ; + RECT 18.6925 42.8575 18.8275 42.9925 ; + RECT 18.6925 37.4775 18.8275 37.6125 ; + RECT 18.6925 24.0275 18.8275 24.1625 ; + RECT 18.6925 26.7175 18.8275 26.8525 ; + RECT 18.6925 32.0975 18.8275 32.2325 ; + RECT 18.6925 40.1675 18.8275 40.3025 ; + RECT 18.6925 38.8225 18.8275 38.9575 ; + RECT 18.6925 33.4425 18.8275 33.5775 ; + RECT 18.6925 28.0625 18.8275 28.1975 ; + RECT 18.6925 25.3725 18.8275 25.5075 ; + RECT 18.6925 44.2025 18.8275 44.3375 ; + RECT 18.6925 36.1325 18.8275 36.2675 ; + RECT 18.6925 22.6825 18.8275 22.8175 ; + RECT 18.6925 30.7525 18.8275 30.8875 ; + RECT 18.6925 41.5125 18.8275 41.6475 ; + RECT 11.0325 34.7875 11.1675 34.9225 ; + RECT 18.6925 42.8575 18.8275 42.9925 ; + RECT 18.6925 29.4075 18.8275 29.5425 ; + RECT 18.6925 24.0275 18.8275 24.1625 ; + RECT 12.56 34.7875 12.695 34.9225 ; + RECT 18.6925 37.4775 18.8275 37.6125 ; + RECT 17.1025 34.7875 17.2375 34.9225 ; + RECT 12.56 24.0275 12.695 24.1625 ; + RECT 11.0325 26.7175 11.1675 26.8525 ; + RECT 18.6925 34.7875 18.8275 34.9225 ; + RECT 18.6925 32.0975 18.8275 32.2325 ; + RECT 18.6925 40.1675 18.8275 40.3025 ; + RECT 12.56 26.7175 12.695 26.8525 ; + RECT 12.56 32.0975 12.695 32.2325 ; + RECT 17.1025 42.8575 17.2375 42.9925 ; + RECT 17.1025 29.4075 17.2375 29.5425 ; + RECT 18.6925 26.7175 18.8275 26.8525 ; + RECT 17.915 21.3375 18.05 21.4725 ; + RECT 17.1025 37.4775 17.2375 37.6125 ; + RECT 17.1025 26.7175 17.2375 26.8525 ; + RECT 17.1025 32.0975 17.2375 32.2325 ; + RECT 17.1025 24.0275 17.2375 24.1625 ; + RECT 17.1025 40.1675 17.2375 40.3025 ; + RECT 11.0325 24.0275 11.1675 24.1625 ; + RECT 11.0325 32.0975 11.1675 32.2325 ; + RECT 12.56 22.6825 12.695 22.8175 ; + RECT 12.56 36.1325 12.695 36.2675 ; + RECT 11.0325 33.4425 11.1675 33.5775 ; + RECT 18.6925 44.2025 18.8275 44.3375 ; + RECT 17.1025 41.5125 17.2375 41.6475 ; + RECT 17.1025 44.2025 17.2375 44.3375 ; + RECT 11.0325 30.7525 11.1675 30.8875 ; + RECT 18.6925 22.6825 18.8275 22.8175 ; + RECT 18.6925 33.4425 18.8275 33.5775 ; + RECT 12.56 25.3725 12.695 25.5075 ; + RECT 12.56 33.4425 12.695 33.5775 ; + RECT 12.56 28.0625 12.695 28.1975 ; + RECT 17.1025 30.7525 17.2375 30.8875 ; + RECT 18.6925 30.7525 18.8275 30.8875 ; + RECT 12.56 30.7525 12.695 30.8875 ; + RECT 11.0325 25.3725 11.1675 25.5075 ; + RECT 18.6925 38.8225 18.8275 38.9575 ; + RECT 17.1025 33.4425 17.2375 33.5775 ; + RECT 17.1025 28.0625 17.2375 28.1975 ; + RECT 17.1025 38.8225 17.2375 38.9575 ; + RECT 11.0325 22.6825 11.1675 22.8175 ; + RECT 18.6925 25.3725 18.8275 25.5075 ; + RECT 17.1025 36.1325 17.2375 36.2675 ; + RECT 11.0325 36.1325 11.1675 36.2675 ; + RECT 18.6925 41.5125 18.8275 41.6475 ; + RECT 17.1025 22.6825 17.2375 22.8175 ; + RECT 17.1025 25.3725 17.2375 25.5075 ; + RECT 11.0325 28.0625 11.1675 28.1975 ; + RECT 18.6925 36.1325 18.8275 36.2675 ; + RECT 18.6925 28.0625 18.8275 28.1975 ; + RECT 9.9475 18.04 20.81 18.11 ; + RECT 21.7125 19.3325 21.7825 19.4675 ; + RECT 20.245 26.7175 20.38 26.8525 ; + RECT 20.245 45.5475 20.38 45.6825 ; + RECT 17.1025 32.0975 17.2375 32.2325 ; + RECT 18.6925 26.7175 18.8275 26.8525 ; + RECT 23.065 37.4775 23.2 37.6125 ; + RECT 21.655 21.3375 21.79 21.4725 ; + RECT 21.6925 13.2925 21.7625 13.4275 ; + RECT 12.56 32.0975 12.695 32.2325 ; + RECT 17.1025 29.4075 17.2375 29.5425 ; + RECT 20.245 40.1675 20.38 40.3025 ; + RECT 22.4175 19.3325 22.4875 19.4675 ; + RECT 21.0075 19.3325 21.0775 19.4675 ; + RECT 18.6925 32.0975 18.8275 32.2325 ; + RECT 11.0325 34.7875 11.1675 34.9225 ; + RECT 23.065 42.8575 23.2 42.9925 ; + RECT 11.0325 32.0975 11.1675 32.2325 ; + RECT 18.6925 40.1675 18.8275 40.3025 ; + RECT 12.56 24.0275 12.695 24.1625 ; + RECT 17.915 21.3375 18.05 21.4725 ; + RECT 22.36 21.3375 22.495 21.4725 ; + RECT 22.3975 13.2925 22.4675 13.4275 ; + RECT 17.1025 34.7875 17.2375 34.9225 ; + RECT 23.065 40.1675 23.2 40.3025 ; + RECT 17.1025 40.1675 17.2375 40.3025 ; + RECT 20.245 24.0275 20.38 24.1625 ; + RECT 20.245 34.7875 20.38 34.9225 ; + RECT 21.655 45.5475 21.79 45.6825 ; + RECT 11.0325 24.0275 11.1675 24.1625 ; + RECT 18.6925 37.4775 18.8275 37.6125 ; + RECT 23.065 45.5475 23.2 45.6825 ; + RECT 23.065 34.7875 23.2 34.9225 ; + RECT 20.245 29.4075 20.38 29.5425 ; + RECT 20.245 42.8575 20.38 42.9925 ; + RECT 20.95 45.5475 21.085 45.6825 ; + RECT 18.6925 42.8575 18.8275 42.9925 ; + RECT 22.2175 8.5075 22.2875 8.6425 ; + RECT 18.6925 24.0275 18.8275 24.1625 ; + RECT 23.065 21.3375 23.2 21.4725 ; + RECT 11.0325 26.7175 11.1675 26.8525 ; + RECT 12.56 26.7175 12.695 26.8525 ; + RECT 20.245 21.3375 20.38 21.4725 ; + RECT 20.245 37.4775 20.38 37.6125 ; + RECT 21.5125 8.5075 21.5825 8.6425 ; + RECT 23.065 32.0975 23.2 32.2325 ; + RECT 20.95 21.3375 21.085 21.4725 ; + RECT 18.6925 29.4075 18.8275 29.5425 ; + RECT 12.56 34.7875 12.695 34.9225 ; + RECT 23.065 26.7175 23.2 26.8525 ; + RECT 23.065 24.0275 23.2 24.1625 ; + RECT 17.1025 26.7175 17.2375 26.8525 ; + RECT 17.1025 24.0275 17.2375 24.1625 ; + RECT 17.1025 37.4775 17.2375 37.6125 ; + RECT 20.245 32.0975 20.38 32.2325 ; + RECT 17.1025 42.8575 17.2375 42.9925 ; + RECT 18.6925 34.7875 18.8275 34.9225 ; + RECT 22.36 45.5475 22.495 45.6825 ; + RECT 23.065 29.4075 23.2 29.5425 ; + RECT 18.6925 44.2025 18.8275 44.3375 ; + RECT 11.0325 30.7525 11.1675 30.8875 ; + RECT 19.8975 41.5125 20.0325 41.6475 ; + RECT 23.6175 20.165 23.7525 20.235 ; + RECT 22.7175 28.0625 22.8525 28.1975 ; + RECT 22.7175 19.9925 22.8525 20.1275 ; + RECT 19.8975 19.9925 20.0325 20.1275 ; + RECT 17.1025 30.7525 17.2375 30.8875 ; + RECT 18.6925 36.1325 18.8275 36.2675 ; + RECT 12.56 33.4425 12.695 33.5775 ; + RECT 23.6175 44.375 23.7525 44.445 ; + RECT 19.7025 20.165 19.8375 20.235 ; + RECT 18.6925 30.7525 18.8275 30.8875 ; + RECT 17.1025 28.0625 17.2375 28.1975 ; + RECT 17.1025 25.3725 17.2375 25.5075 ; + RECT 22.7175 38.8225 22.8525 38.9575 ; + RECT 19.8975 22.6825 20.0325 22.8175 ; + RECT 12.56 28.0625 12.695 28.1975 ; + RECT 11.0325 28.0625 11.1675 28.1975 ; + RECT 22.7175 41.5125 22.8525 41.6475 ; + RECT 22.0125 19.9925 22.1475 20.1275 ; + RECT 21.3075 44.2025 21.4425 44.3375 ; + RECT 19.8975 36.1325 20.0325 36.2675 ; + RECT 18.6925 28.0625 18.8275 28.1975 ; + RECT 18.6925 25.3725 18.8275 25.5075 ; + RECT 22.7175 25.3725 22.8525 25.5075 ; + RECT 17.1025 36.1325 17.2375 36.2675 ; + RECT 11.0325 36.1325 11.1675 36.2675 ; + RECT 19.8975 30.7525 20.0325 30.8875 ; + RECT 18.6925 22.6825 18.8275 22.8175 ; + RECT 17.1025 44.2025 17.2375 44.3375 ; + RECT 19.8975 38.8225 20.0325 38.9575 ; + RECT 11.0325 22.6825 11.1675 22.8175 ; + RECT 22.75 17.3275 22.82 17.4625 ; + RECT 22.7175 22.6825 22.8525 22.8175 ; + RECT 12.56 36.1325 12.695 36.2675 ; + RECT 19.8975 33.4425 20.0325 33.5775 ; + RECT 17.1025 22.6825 17.2375 22.8175 ; + RECT 19.8975 44.2025 20.0325 44.3375 ; + RECT 22.7175 30.7525 22.8525 30.8875 ; + RECT 19.8975 25.3725 20.0325 25.5075 ; + RECT 21.3075 19.9925 21.4425 20.1275 ; + RECT 11.0325 25.3725 11.1675 25.5075 ; + RECT 18.6925 33.4425 18.8275 33.5775 ; + RECT 17.1025 38.8225 17.2375 38.9575 ; + RECT 19.8975 28.0625 20.0325 28.1975 ; + RECT 18.6925 41.5125 18.8275 41.6475 ; + RECT 22.7175 44.2025 22.8525 44.3375 ; + RECT 12.56 30.7525 12.695 30.8875 ; + RECT 20.6025 19.9925 20.7375 20.1275 ; + RECT 22.045 10.5575 22.115 10.6925 ; + RECT 11.0325 33.4425 11.1675 33.5775 ; + RECT 22.7175 33.4425 22.8525 33.5775 ; + RECT 20.6025 44.2025 20.7375 44.3375 ; + RECT 18.6925 38.8225 18.8275 38.9575 ; + RECT 17.1025 33.4425 17.2375 33.5775 ; + RECT 22.7175 36.1325 22.8525 36.2675 ; + RECT 19.7025 44.375 19.8375 44.445 ; + RECT 22.045 17.3275 22.115 17.4625 ; + RECT 22.0125 44.2025 22.1475 44.3375 ; + RECT 17.1025 41.5125 17.2375 41.6475 ; + RECT 12.56 22.6825 12.695 22.8175 ; + RECT 12.56 25.3725 12.695 25.5075 ; + RECT 21.34 10.5575 21.41 10.6925 ; + RECT -0.0675 2.4125 0.0675 2.5475 ; + RECT -0.0675 2.4025 0.0675 2.5375 ; + RECT -0.0675 -0.0675 0.0675 0.0675 ; + RECT -0.0675 4.8825 0.0675 5.0175 ; + RECT 2.26 29.0925 2.125 29.2275 ; + RECT 2.26 25.4525 2.125 25.5875 ; + RECT 2.26 29.0925 2.125 29.2275 ; + RECT 2.26 36.3725 2.125 36.5075 ; + RECT 0.885 36.3725 0.75 36.5075 ; + RECT 0.885 21.8125 0.75 21.9475 ; + RECT 2.26 32.7325 2.125 32.8675 ; + RECT 2.26 21.8125 2.125 21.9475 ; + RECT 0.885 29.0925 0.75 29.2275 ; + RECT 0.885 29.0925 0.75 29.2275 ; + RECT 0.885 32.7325 0.75 32.8675 ; + RECT 0.885 25.4525 0.75 25.5875 ; + RECT 2.26 23.6325 2.125 23.7675 ; + RECT 0.885 27.2725 0.75 27.4075 ; + RECT 0.885 19.9925 0.75 20.1275 ; + RECT 2.26 27.2725 2.125 27.4075 ; + RECT 0.885 34.5525 0.75 34.6875 ; + RECT 0.885 23.6325 0.75 23.7675 ; + RECT 2.26 19.9925 2.125 20.1275 ; + RECT 0.885 30.9125 0.75 31.0475 ; + RECT 2.26 30.9125 2.125 31.0475 ; + RECT 2.26 34.5525 2.125 34.6875 ; + RECT 0.75 25.4525 0.885 25.5875 ; + RECT 9.46 7.3575 9.595 7.4925 ; + RECT 9.46 2.4075 9.595 2.5425 ; + RECT 9.46 7.3575 9.595 7.4925 ; + RECT 9.46 2.4075 9.595 2.5425 ; + RECT 2.125 36.3725 2.26 36.5075 ; + RECT 0.75 32.7325 0.885 32.8675 ; + RECT -0.0675 2.4125 0.0675 2.5475 ; + RECT 2.125 25.4525 2.26 25.5875 ; + RECT 2.125 32.7325 2.26 32.8675 ; + RECT 9.46 17.2575 9.595 17.3925 ; + RECT 9.46 17.2575 9.595 17.3925 ; + RECT 2.125 29.0925 2.26 29.2275 ; + RECT 0.75 21.8125 0.885 21.9475 ; + RECT 9.46 12.3075 9.595 12.4425 ; + RECT 0.75 29.0925 0.885 29.2275 ; + RECT 0.75 36.3725 0.885 36.5075 ; + RECT 2.125 21.8125 2.26 21.9475 ; + RECT -0.0675 2.4025 0.0675 2.5375 ; + RECT 9.46 -0.0675 9.595 0.0675 ; + RECT 9.46 14.7825 9.595 14.9175 ; + RECT -0.0675 -0.0675 0.0675 0.0675 ; + RECT 2.125 34.5525 2.26 34.6875 ; + RECT 0.75 19.9925 0.885 20.1275 ; + RECT -0.0675 4.8825 0.0675 5.0175 ; + RECT 9.46 4.8825 9.595 5.0175 ; + RECT 0.75 23.6325 0.885 23.7675 ; + RECT 2.125 23.6325 2.26 23.7675 ; + RECT 0.75 27.2725 0.885 27.4075 ; + RECT 9.46 9.8325 9.595 9.9675 ; + RECT 2.125 19.9925 2.26 20.1275 ; + RECT 0.75 30.9125 0.885 31.0475 ; + RECT 2.125 27.2725 2.26 27.4075 ; + RECT 2.125 30.9125 2.26 31.0475 ; + RECT 9.46 19.7325 9.595 19.8675 ; + RECT 0.75 34.5525 0.885 34.6875 ; + RECT 6.8075 37.015 9.6675 37.085 ; + RECT 8.12 39.1125 8.255 39.2475 ; + RECT 8.12 44.0625 8.255 44.1975 ; + RECT 8.12 39.1025 8.255 39.2375 ; + RECT 8.12 44.0525 8.255 44.1875 ; + RECT 8.17 41.5825 8.305 41.7175 ; + RECT 8.17 46.5325 8.305 46.6675 ; + RECT 8.17 36.6325 8.305 36.7675 ; + RECT 12.5275 0.315 18.2475 0.385 ; + RECT 16.7 2.4025 16.835 2.5375 ; + RECT 13.84 2.4025 13.975 2.5375 ; + RECT 16.75 -0.0675 16.885 0.0675 ; + RECT 13.89 -0.0675 14.025 0.0675 ; + LAYER metal4 ; END END sram_2_16_1_freepdk45 END LIBRARY diff --git a/compiler/tests/golden/sram_2_16_1_scn4m_subm.lef b/compiler/tests/golden/sram_2_16_1_scn4m_subm.lef index 08ebcdb2..471c1683 100644 --- a/compiler/tests/golden/sram_2_16_1_scn4m_subm.lef +++ b/compiler/tests/golden/sram_2_16_1_scn4m_subm.lef @@ -3,100 +3,606 @@ NAMESCASESENSITIVE ON ; BUSBITCHARS "[]" ; DIVIDERCHAR "/" ; UNITS - dataBASE MICRONS 1000 ; + DATABASE MICRONS 2000 ; END UNITS -SITE MacroSite - CLASS Core ; - SIZE 148050.0 by 461850.0 ; -END MacroSite -MACRO sram_2_16_1_scn3me_subm +MACRO sram_2_16_1_scn4m_subm CLASS BLOCK ; - SIZE 148050.0 BY 461850.0 ; + SIZE 213.0 BY 424.8 ; SYMMETRY X Y R90 ; - SITE MacroSite ; - PIN data[0] - DIRECTION INOUT ; + PIN din0[0] + DIRECTION INPUT ; PORT LAYER metal2 ; - RECT 120900.0 0.0 121800.0 1800.0 ; + RECT 108.8 11.4 109.6 12.2 ; END - END data[0] - PIN data[1] - DIRECTION INOUT ; + END din0[0] + PIN din0[1] + DIRECTION INPUT ; PORT LAYER metal2 ; - RECT 131100.0 0.0 132000.0 1800.0 ; + RECT 130.6 11.4 131.4 12.2 ; END - END data[1] - PIN addr[0] + END din0[1] + PIN addr0[0] DIRECTION INPUT ; PORT - LAYER metal3 ; - RECT 0.0 87600.0 10800.0 89100.0 ; + LAYER metal2 ; + RECT 65.2 353.4 66.0 354.2 ; END - END addr[0] - PIN addr[1] + END addr0[0] + PIN addr0[1] DIRECTION INPUT ; PORT - LAYER metal3 ; - RECT 0.0 77400.0 10800.0 78900.0 ; + LAYER metal2 ; + RECT 65.2 375.4 66.0 376.2 ; END - END addr[1] - PIN addr[2] + END addr0[1] + PIN addr0[2] DIRECTION INPUT ; PORT - LAYER metal3 ; - RECT 0.0 67200.0 10800.0 68700.0 ; + LAYER metal2 ; + RECT 65.2 393.4 66.0 394.2 ; END - END addr[2] - PIN addr[3] + END addr0[2] + PIN addr0[3] DIRECTION INPUT ; PORT - LAYER metal3 ; - RECT 0.0 57000.0 10800.0 58500.0 ; + LAYER metal2 ; + RECT 65.2 415.4 66.0 416.2 ; END - END addr[3] - PIN CSb + END addr0[3] + PIN csb0 DIRECTION INPUT ; PORT - LAYER metal3 ; - RECT -38400.0 182700.0 -36600.0 184500.0 ; + LAYER metal2 ; + RECT 10.0 11.4 10.8 12.2 ; END - END CSb - PIN WEb + END csb0 + PIN web0 DIRECTION INPUT ; PORT - LAYER metal3 ; - RECT -28200.0 182700.0 -26400.0 184500.0 ; + LAYER metal2 ; + RECT 10.0 33.4 10.8 34.2 ; END - END WEb - PIN OEb + END web0 + PIN clk0 DIRECTION INPUT ; PORT - LAYER metal3 ; - RECT -48600.0 182700.0 -46800.0 184500.0 ; + LAYER metal2 ; + RECT 54.1 12.3 54.7 12.9 ; END - END OEb - PIN clk - DIRECTION INPUT ; + END clk0 + PIN dout0[0] + DIRECTION OUTPUT ; PORT - LAYER metal1 ; - RECT -10200.0 181800.0 -9000.0 185400.0 ; + LAYER metal2 ; + RECT 189.3 112.6 190.1 115.6 ; END - END clk + END dout0[0] + PIN dout0[1] + DIRECTION OUTPUT ; + PORT + LAYER metal2 ; + RECT 196.1 112.6 196.9 115.6 ; + END + END dout0[1] PIN vdd DIRECTION INOUT ; USE POWER ; SHAPE ABUTMENT ; PORT - LAYER metal2 ; - RECT 4950.0 0.0 8550.0 461850.0 ; - LAYER metal2 ; - RECT 144450.0 0.0 148050.0 461850.0 ; - LAYER metal1 ; - RECT 0.0 4950.0 148050.0 8550.0 ; - LAYER metal1 ; - RECT 0.0 458250.0 148050.0 461850.0 ; + LAYER metal3 ; + RECT 81.6 81.6 188.4 82.8 ; + LAYER metal3 ; + RECT 152.0 196.4 152.8 197.2 ; + LAYER metal4 ; + RECT 136.8 2.4 138.0 423.6 ; + LAYER metal3 ; + RECT 60.0 124.8 210.0 126.0 ; + LAYER metal3 ; + RECT 0.0 216.0 121.2 217.2 ; + LAYER metal3 ; + RECT 0.0 369.6 210.0 370.8 ; + LAYER metal3 ; + RECT 0.0 14.4 27.6 15.6 ; + LAYER metal3 ; + RECT 177.6 355.2 205.2 356.4 ; + LAYER metal3 ; + RECT 198.7 91.4 199.5 92.2 ; + LAYER metal3 ; + RECT 133.5 22.4 134.3 23.2 ; + LAYER metal3 ; + RECT 170.4 153.6 210.0 154.8 ; + LAYER metal3 ; + RECT 0.0 220.8 116.4 222.0 ; + LAYER metal3 ; + RECT 200.9 125.4 201.7 126.2 ; + LAYER metal3 ; + RECT 0.0 278.4 121.2 279.6 ; + LAYER metal3 ; + RECT 23.2 224.0 24.0 224.8 ; + LAYER metal3 ; + RECT 33.6 254.4 116.4 255.6 ; + LAYER metal4 ; + RECT 50.4 2.4 51.6 423.6 ; + LAYER metal3 ; + RECT 136.8 259.2 210.0 260.4 ; + LAYER metal3 ; + RECT 23.2 341.6 24.0 342.4 ; + LAYER metal4 ; + RECT 31.2 2.4 32.4 423.6 ; + LAYER metal3 ; + RECT 205.3 342.0 206.1 342.8 ; + LAYER metal4 ; + RECT 12.0 2.4 13.2 423.6 ; + LAYER metal3 ; + RECT 148.8 4.8 210.0 6.0 ; + LAYER metal3 ; + RECT 0.0 384.0 63.6 385.2 ; + LAYER metal4 ; + RECT 79.2 2.4 80.4 423.6 ; + LAYER metal3 ; + RECT 112.8 288.0 147.6 289.2 ; + LAYER metal3 ; + RECT 0.0 144.0 210.0 145.2 ; + LAYER metal3 ; + RECT 0.0 158.4 210.0 159.6 ; + LAYER metal3 ; + RECT 0.0 225.6 87.6 226.8 ; + LAYER metal4 ; + RECT 160.8 2.4 162.0 423.6 ; + LAYER metal3 ; + RECT 134.4 216.0 210.0 217.2 ; + LAYER metal3 ; + RECT 52.8 14.4 210.0 15.6 ; + LAYER metal3 ; + RECT 172.8 331.2 210.0 332.4 ; + LAYER metal3 ; + RECT 0.0 268.8 90.0 270.0 ; + LAYER metal3 ; + RECT 26.4 163.2 73.2 164.4 ; + LAYER metal3 ; + RECT 26.4 321.6 210.0 322.8 ; + LAYER metal3 ; + RECT 68.1 364.4 68.9 365.2 ; + LAYER metal3 ; + RECT 26.4 283.2 116.4 284.4 ; + LAYER metal3 ; + RECT 0.0 302.4 210.0 303.6 ; + LAYER metal3 ; + RECT 77.6 102.4 78.4 103.2 ; + LAYER metal3 ; + RECT 129.6 201.6 169.2 202.8 ; + LAYER metal3 ; + RECT 167.2 238.0 168.0 238.8 ; + LAYER metal3 ; + RECT 33.6 235.2 210.0 236.4 ; + LAYER metal3 ; + RECT 4.8 43.2 73.2 44.4 ; + LAYER metal3 ; + RECT 192.2 159.6 193.0 160.4 ; + LAYER metal4 ; + RECT 165.6 2.4 166.8 423.6 ; + LAYER metal3 ; + RECT 177.6 168.0 205.2 169.2 ; + LAYER metal3 ; + RECT 10.0 263.2 10.8 264.0 ; + LAYER metal3 ; + RECT 0.0 72.0 75.6 73.2 ; + LAYER metal3 ; + RECT 205.3 321.2 206.1 322.0 ; + LAYER metal3 ; + RECT 0.0 240.0 210.0 241.2 ; + LAYER metal3 ; + RECT 0.0 148.8 27.6 150.0 ; + LAYER metal3 ; + RECT 192.5 74.0 193.3 74.8 ; + LAYER metal3 ; + RECT 178.1 279.6 178.9 280.4 ; + LAYER metal3 ; + RECT 172.8 249.6 210.0 250.8 ; + LAYER metal4 ; + RECT 60.0 2.4 61.2 423.6 ; + LAYER metal3 ; + RECT 178.1 196.4 178.9 197.2 ; + LAYER metal3 ; + RECT 0.0 177.6 210.0 178.8 ; + LAYER metal3 ; + RECT 152.0 238.0 152.8 238.8 ; + LAYER metal4 ; + RECT 117.6 2.4 118.8 423.6 ; + LAYER metal3 ; + RECT 0.0 264.0 116.4 265.2 ; + LAYER metal3 ; + RECT 81.6 43.2 210.0 44.4 ; + LAYER metal4 ; + RECT 55.2 2.4 56.4 423.6 ; + LAYER metal4 ; + RECT 208.8 2.4 210.0 423.6 ; + LAYER metal3 ; + RECT 0.0 4.8 44.4 6.0 ; + LAYER metal3 ; + RECT 178.1 258.8 178.9 259.6 ; + LAYER metal3 ; + RECT 0.0 187.2 87.6 188.4 ; + LAYER metal3 ; + RECT 108.1 196.4 108.9 197.2 ; + LAYER metal3 ; + RECT 178.1 175.6 178.9 176.4 ; + LAYER metal3 ; + RECT 88.8 374.4 210.0 375.6 ; + LAYER metal3 ; + RECT 167.2 279.6 168.0 280.4 ; + LAYER metal3 ; + RECT 0.0 28.8 27.6 30.0 ; + LAYER metal3 ; + RECT 33.6 172.8 210.0 174.0 ; + LAYER metal3 ; + RECT 0.0 364.8 210.0 366.0 ; + LAYER metal3 ; + RECT 0.0 249.6 87.6 250.8 ; + LAYER metal3 ; + RECT 0.0 196.8 121.2 198.0 ; + LAYER metal3 ; + RECT 0.0 201.6 116.4 202.8 ; + LAYER metal4 ; + RECT 16.8 2.4 18.0 423.6 ; + LAYER metal3 ; + RECT 0.0 120.0 73.2 121.2 ; + LAYER metal4 ; + RECT 26.4 2.4 27.6 423.6 ; + LAYER metal3 ; + RECT 77.6 62.4 78.4 63.2 ; + LAYER metal3 ; + RECT 0.0 96.0 210.0 97.2 ; + LAYER metal3 ; + RECT 0.0 211.2 116.4 212.4 ; + LAYER metal4 ; + RECT 40.8 2.4 42.0 423.6 ; + LAYER metal3 ; + RECT 93.1 217.2 93.9 218.0 ; + LAYER metal3 ; + RECT 111.7 22.4 112.5 23.2 ; + LAYER metal3 ; + RECT 0.0 259.2 121.2 260.4 ; + LAYER metal3 ; + RECT 86.4 355.2 166.8 356.4 ; + LAYER metal4 ; + RECT 132.0 2.4 133.2 423.6 ; + LAYER metal3 ; + RECT 172.8 206.4 210.0 207.6 ; + LAYER metal3 ; + RECT 0.0 182.4 169.2 183.6 ; + LAYER metal4 ; + RECT 84.0 2.4 85.2 423.6 ; + LAYER metal3 ; + RECT 129.6 220.8 169.2 222.0 ; + LAYER metal3 ; + RECT 0.0 81.6 73.2 82.8 ; + LAYER metal3 ; + RECT 26.4 244.8 169.2 246.0 ; + LAYER metal3 ; + RECT 72.0 345.6 169.2 346.8 ; + LAYER metal3 ; + RECT 0.0 62.4 210.0 63.6 ; + LAYER metal3 ; + RECT 178.1 342.0 178.9 342.8 ; + LAYER metal3 ; + RECT 0.0 412.8 70.8 414.0 ; + LAYER metal3 ; + RECT 167.2 196.4 168.0 197.2 ; + LAYER metal3 ; + RECT 205.3 362.8 206.1 363.6 ; + LAYER metal3 ; + RECT 167.2 321.2 168.0 322.0 ; + LAYER metal3 ; + RECT 172.8 288.0 210.0 289.2 ; + LAYER metal3 ; + RECT 0.0 403.2 210.0 404.4 ; + LAYER metal4 ; + RECT 180.0 2.4 181.2 423.6 ; + LAYER metal3 ; + RECT 0.0 76.8 210.0 78.0 ; + LAYER metal3 ; + RECT 0.0 355.2 70.8 356.4 ; + LAYER metal3 ; + RECT 178.1 321.2 178.9 322.0 ; + LAYER metal3 ; + RECT 23.2 302.4 24.0 303.2 ; + LAYER metal3 ; + RECT 0.0 297.6 210.0 298.8 ; + LAYER metal3 ; + RECT 0.0 115.2 210.0 116.4 ; + LAYER metal3 ; + RECT 152.0 300.4 152.8 301.2 ; + LAYER metal4 ; + RECT 122.4 2.4 123.6 423.6 ; + LAYER metal3 ; + RECT 172.8 312.0 210.0 313.2 ; + LAYER metal3 ; + RECT 0.0 52.8 39.6 54.0 ; + LAYER metal3 ; + RECT 112.8 225.6 147.6 226.8 ; + LAYER metal3 ; + RECT 0.0 33.6 210.0 34.8 ; + LAYER metal3 ; + RECT 0.0 153.6 75.6 154.8 ; + LAYER metal3 ; + RECT 167.2 300.4 168.0 301.2 ; + LAYER metal3 ; + RECT 0.0 288.0 87.6 289.2 ; + LAYER metal3 ; + RECT 69.6 384.0 210.0 385.2 ; + LAYER metal4 ; + RECT 36.0 2.4 37.2 423.6 ; + LAYER metal3 ; + RECT 129.6 254.4 169.2 255.6 ; + LAYER metal4 ; + RECT 69.6 2.4 70.8 423.6 ; + LAYER metal3 ; + RECT 77.6 142.4 78.4 143.2 ; + LAYER metal4 ; + RECT 204.0 2.4 205.2 423.6 ; + LAYER metal3 ; + RECT 205.3 300.4 206.1 301.2 ; + LAYER metal3 ; + RECT 185.4 159.6 186.2 160.4 ; + LAYER metal3 ; + RECT 129.6 211.2 169.2 212.4 ; + LAYER metal3 ; + RECT 172.8 350.4 210.0 351.6 ; + LAYER metal3 ; + RECT 152.0 321.2 152.8 322.0 ; + LAYER metal3 ; + RECT 172.8 268.8 210.0 270.0 ; + LAYER metal4 ; + RECT 112.8 2.4 114.0 423.6 ; + LAYER metal4 ; + RECT 189.6 2.4 190.8 423.6 ; + LAYER metal3 ; + RECT 0.0 9.6 210.0 10.8 ; + LAYER metal3 ; + RECT 167.2 217.2 168.0 218.0 ; + LAYER metal3 ; + RECT 91.2 412.8 210.0 414.0 ; + LAYER metal3 ; + RECT 205.3 279.6 206.1 280.4 ; + LAYER metal3 ; + RECT 205.3 258.8 206.1 259.6 ; + LAYER metal3 ; + RECT 93.1 258.8 93.9 259.6 ; + LAYER metal3 ; + RECT 77.6 22.4 78.4 23.2 ; + LAYER metal3 ; + RECT 0.0 316.8 169.2 318.0 ; + LAYER metal4 ; + RECT 7.2 2.4 8.4 423.6 ; + LAYER metal3 ; + RECT 0.0 345.6 63.6 346.8 ; + LAYER metal3 ; + RECT 184.9 175.6 185.7 176.4 ; + LAYER metal3 ; + RECT 0.0 100.8 186.0 102.0 ; + LAYER metal3 ; + RECT 178.1 362.8 178.9 363.6 ; + LAYER metal3 ; + RECT 0.0 134.4 210.0 135.6 ; + LAYER metal3 ; + RECT 0.0 379.2 210.0 380.4 ; + LAYER metal3 ; + RECT 155.2 175.6 156.0 176.4 ; + LAYER metal3 ; + RECT 129.6 283.2 169.2 284.4 ; + LAYER metal3 ; + RECT 129.6 264.0 169.2 265.2 ; + LAYER metal3 ; + RECT 0.0 192.0 116.4 193.2 ; + LAYER metal3 ; + RECT 199.3 74.0 200.1 74.8 ; + LAYER metal3 ; + RECT 0.0 230.4 210.0 231.6 ; + LAYER metal3 ; + RECT 141.6 278.4 210.0 279.6 ; + LAYER metal3 ; + RECT 0.0 408.0 210.0 409.2 ; + LAYER metal3 ; + RECT 33.6 331.2 147.6 332.4 ; + LAYER metal3 ; + RECT 198.5 175.6 199.3 176.4 ; + LAYER metal3 ; + RECT 152.0 279.6 152.8 280.4 ; + LAYER metal3 ; + RECT 172.8 72.0 210.0 73.2 ; + LAYER metal3 ; + RECT 172.8 187.2 210.0 188.4 ; + LAYER metal3 ; + RECT 0.0 398.4 210.0 399.6 ; + LAYER metal4 ; + RECT 74.4 2.4 75.6 423.6 ; + LAYER metal3 ; + RECT 132.0 196.8 210.0 198.0 ; + LAYER metal3 ; + RECT 167.2 342.0 168.0 342.8 ; + LAYER metal3 ; + RECT 0.0 86.4 188.4 87.6 ; + LAYER metal3 ; + RECT 184.9 362.8 185.7 363.6 ; + LAYER metal3 ; + RECT 178.1 217.2 178.9 218.0 ; + LAYER metal3 ; + RECT 48.0 28.8 210.0 30.0 ; + LAYER metal3 ; + RECT 205.3 196.4 206.1 197.2 ; + LAYER metal3 ; + RECT 0.0 139.2 190.8 140.4 ; + LAYER metal3 ; + RECT 74.4 24.0 210.0 25.2 ; + LAYER metal3 ; + RECT 191.9 91.4 192.7 92.2 ; + LAYER metal3 ; + RECT 170.4 91.2 210.0 92.4 ; + LAYER metal3 ; + RECT 10.0 302.4 10.8 303.2 ; + LAYER metal3 ; + RECT 81.6 120.0 210.0 121.2 ; + LAYER metal3 ; + RECT 0.0 129.6 210.0 130.8 ; + LAYER metal3 ; + RECT 152.0 217.2 152.8 218.0 ; + LAYER metal3 ; + RECT 0.0 307.2 169.2 308.4 ; + LAYER metal3 ; + RECT 205.3 175.6 206.1 176.4 ; + LAYER metal3 ; + RECT 198.5 362.8 199.3 363.6 ; + LAYER metal3 ; + RECT 0.0 360.0 210.0 361.2 ; + LAYER metal3 ; + RECT 0.0 91.2 75.6 92.4 ; + LAYER metal4 ; + RECT 127.2 2.4 128.4 423.6 ; + LAYER metal3 ; + RECT 93.1 279.6 93.9 280.4 ; + LAYER metal3 ; + RECT 0.0 350.4 147.6 351.6 ; + LAYER metal3 ; + RECT 10.0 224.0 10.8 224.8 ; + LAYER metal3 ; + RECT 0.0 110.4 210.0 111.6 ; + LAYER metal3 ; + RECT 23.2 184.8 24.0 185.6 ; + LAYER metal3 ; + RECT 0.0 326.4 169.2 327.6 ; + LAYER metal3 ; + RECT 0.0 67.2 210.0 68.4 ; + LAYER metal3 ; + RECT 194.1 125.4 194.9 126.2 ; + LAYER metal3 ; + RECT 33.6 292.8 210.0 294.0 ; + LAYER metal3 ; + RECT 205.3 238.0 206.1 238.8 ; + LAYER metal3 ; + RECT 152.0 258.8 152.8 259.6 ; + LAYER metal4 ; + RECT 199.2 2.4 200.4 423.6 ; + LAYER metal3 ; + RECT 0.0 340.8 210.0 342.0 ; + LAYER metal3 ; + RECT 108.1 279.6 108.9 280.4 ; + LAYER metal3 ; + RECT 0.0 336.0 169.2 337.2 ; + LAYER metal3 ; + RECT 0.0 168.0 166.8 169.2 ; + LAYER metal3 ; + RECT 152.0 342.0 152.8 342.8 ; + LAYER metal3 ; + RECT 0.0 19.2 210.0 20.4 ; + LAYER metal3 ; + RECT 167.2 258.8 168.0 259.6 ; + LAYER metal3 ; + RECT 129.6 273.6 169.2 274.8 ; + LAYER metal3 ; + RECT 0.0 388.8 210.0 390.0 ; + LAYER metal3 ; + RECT 0.0 422.4 63.6 423.6 ; + LAYER metal4 ; + RECT 151.2 2.4 152.4 423.6 ; + LAYER metal4 ; + RECT 146.4 2.4 147.6 423.6 ; + LAYER metal3 ; + RECT 108.1 217.2 108.9 218.0 ; + LAYER metal3 ; + RECT 33.6 273.6 116.4 274.8 ; + LAYER metal3 ; + RECT 93.1 196.4 93.9 197.2 ; + LAYER metal4 ; + RECT 141.6 2.4 142.8 423.6 ; + LAYER metal3 ; + RECT 0.0 24.0 37.2 25.2 ; + LAYER metal3 ; + RECT 108.1 258.8 108.9 259.6 ; + LAYER metal3 ; + RECT 0.0 48.0 210.0 49.2 ; + LAYER metal3 ; + RECT 10.0 184.8 10.8 185.6 ; + LAYER metal3 ; + RECT 10.0 341.6 10.8 342.4 ; + LAYER metal4 ; + RECT 88.8 2.4 90.0 423.6 ; + LAYER metal3 ; + RECT 0.0 417.6 210.0 418.8 ; + LAYER metal3 ; + RECT 68.1 404.4 68.9 405.2 ; + LAYER metal3 ; + RECT 2.0 22.4 2.8 23.2 ; + LAYER metal3 ; + RECT 172.8 225.6 210.0 226.8 ; + LAYER metal4 ; + RECT 2.4 2.4 3.6 423.6 ; + LAYER metal3 ; + RECT 67.2 52.8 210.0 54.0 ; + LAYER metal4 ; + RECT 194.4 2.4 195.6 423.6 ; + LAYER metal4 ; + RECT 103.2 2.4 104.4 423.6 ; + LAYER metal4 ; + RECT 45.6 2.4 46.8 423.6 ; + LAYER metal4 ; + RECT 156.0 2.4 157.2 423.6 ; + LAYER metal3 ; + RECT 33.6 312.0 147.6 313.2 ; + LAYER metal4 ; + RECT 93.6 2.4 94.8 423.6 ; + LAYER metal3 ; + RECT 205.3 217.2 206.1 218.0 ; + LAYER metal3 ; + RECT 0.0 57.6 210.0 58.8 ; + LAYER metal4 ; + RECT 98.4 2.4 99.6 423.6 ; + LAYER metal3 ; + RECT 91.2 393.6 210.0 394.8 ; + LAYER metal3 ; + RECT 191.7 175.6 192.5 176.4 ; + LAYER metal3 ; + RECT 72.0 422.4 210.0 423.6 ; + LAYER metal3 ; + RECT 0.0 105.6 210.0 106.8 ; + LAYER metal4 ; + RECT 175.2 2.4 176.4 423.6 ; + LAYER metal3 ; + RECT 23.2 263.2 24.0 264.0 ; + LAYER metal3 ; + RECT 129.6 192.0 169.2 193.2 ; + LAYER metal4 ; + RECT 64.8 2.4 66.0 423.6 ; + LAYER metal4 ; + RECT 170.4 2.4 171.6 423.6 ; + LAYER metal3 ; + RECT 81.6 163.2 210.0 164.4 ; + LAYER metal4 ; + RECT 108.0 2.4 109.2 423.6 ; + LAYER metal3 ; + RECT 178.1 300.4 178.9 301.2 ; + LAYER metal3 ; + RECT 0.0 38.4 210.0 39.6 ; + LAYER metal3 ; + RECT 26.4 206.4 90.0 207.6 ; + LAYER metal4 ; + RECT 21.6 2.4 22.8 423.6 ; + LAYER metal3 ; + RECT 0.0 124.8 34.8 126.0 ; + LAYER metal3 ; + RECT 199.0 159.6 199.8 160.4 ; + LAYER metal3 ; + RECT 191.7 362.8 192.5 363.6 ; + LAYER metal3 ; + RECT 0.0 393.6 70.8 394.8 ; + LAYER metal3 ; + RECT 0.0 374.4 70.8 375.6 ; + LAYER metal4 ; + RECT 184.8 2.4 186.0 423.6 ; + LAYER metal3 ; + RECT 178.1 238.0 178.9 238.8 ; END END vdd PIN gnd @@ -104,5430 +610,6572 @@ MACRO sram_2_16_1_scn3me_subm USE GROUND ; SHAPE ABUTMENT ; PORT - LAYER metal2 ; - RECT 0.0 0.0 3600.0 461850.0 ; - LAYER metal2 ; - RECT 139500.0 0.0 143100.0 461850.0 ; - LAYER metal1 ; - RECT 0.0 0.0 148050.0 3600.0 ; - LAYER metal1 ; - RECT 0.0 453300.0 148050.0 456900.0 ; + LAYER metal3 ; + RECT 0.0 98.4 210.0 99.6 ; + LAYER metal3 ; + RECT 181.5 243.0 182.3 243.8 ; + LAYER metal3 ; + RECT 72.0 362.4 174.0 363.6 ; + LAYER metal3 ; + RECT 201.9 253.8 202.7 254.6 ; + LAYER metal3 ; + RECT 68.1 344.4 68.9 345.2 ; + LAYER metal3 ; + RECT 10.0 165.2 10.8 166.0 ; + LAYER metal3 ; + RECT 23.2 322.0 24.0 322.8 ; + LAYER metal3 ; + RECT 0.0 237.6 147.6 238.8 ; + LAYER metal3 ; + RECT 0.0 295.2 210.0 296.4 ; + LAYER metal4 ; + RECT 52.8 2.4 54.0 423.6 ; + LAYER metal3 ; + RECT 181.5 253.8 182.3 254.6 ; + LAYER metal3 ; + RECT 129.6 189.6 210.0 190.8 ; + LAYER metal3 ; + RECT 0.0 367.2 210.0 368.4 ; + LAYER metal3 ; + RECT 174.7 170.6 175.5 171.4 ; + LAYER metal3 ; + RECT 172.6 167.8 173.4 168.6 ; + LAYER metal3 ; + RECT 0.0 136.8 210.0 138.0 ; + LAYER metal3 ; + RECT 2.0 42.4 2.8 43.2 ; + LAYER metal3 ; + RECT 0.0 333.6 210.0 334.8 ; + LAYER metal3 ; + RECT 208.7 263.8 209.5 264.6 ; + LAYER metal3 ; + RECT 167.2 310.8 168.0 311.6 ; + LAYER metal3 ; + RECT 208.7 180.6 209.5 181.4 ; + LAYER metal3 ; + RECT 81.6 103.2 210.0 104.4 ; + LAYER metal3 ; + RECT 26.4 184.8 121.2 186.0 ; + LAYER metal3 ; + RECT 174.7 326.2 175.5 327.0 ; + LAYER metal4 ; + RECT 196.8 2.4 198.0 423.6 ; + LAYER metal3 ; + RECT 0.0 338.4 210.0 339.6 ; + LAYER metal3 ; + RECT 210.8 355.0 211.6 355.8 ; + LAYER metal3 ; + RECT 208.7 337.0 209.5 337.8 ; + LAYER metal3 ; + RECT 77.6 162.4 78.4 163.2 ; + LAYER metal3 ; + RECT 0.0 160.8 181.2 162.0 ; + LAYER metal3 ; + RECT 0.0 199.2 121.2 200.4 ; + LAYER metal3 ; + RECT 0.0 266.4 210.0 267.6 ; + LAYER metal4 ; + RECT 62.4 2.4 63.6 423.6 ; + LAYER metal4 ; + RECT 115.2 2.4 116.4 423.6 ; + LAYER metal3 ; + RECT 108.1 206.8 108.9 207.6 ; + LAYER metal4 ; + RECT 105.6 2.4 106.8 423.6 ; + LAYER metal4 ; + RECT 33.6 2.4 34.8 423.6 ; + LAYER metal3 ; + RECT 181.5 263.8 182.3 264.6 ; + LAYER metal3 ; + RECT 152.0 331.6 152.8 332.4 ; + LAYER metal4 ; + RECT 120.0 2.4 121.2 423.6 ; + LAYER metal4 ; + RECT 158.4 2.4 159.6 423.6 ; + LAYER metal3 ; + RECT 77.6 42.4 78.4 43.2 ; + LAYER metal4 ; + RECT 153.6 2.4 154.8 423.6 ; + LAYER metal3 ; + RECT 0.0 228.0 210.0 229.2 ; + LAYER metal3 ; + RECT 0.0 328.8 210.0 330.0 ; + LAYER metal3 ; + RECT 0.0 180.0 210.0 181.2 ; + LAYER metal3 ; + RECT 4.8 21.6 73.2 22.8 ; + LAYER metal4 ; + RECT 100.8 2.4 102.0 423.6 ; + LAYER metal3 ; + RECT 172.8 112.8 210.0 114.0 ; + LAYER metal3 ; + RECT 0.0 117.6 210.0 118.8 ; + LAYER metal3 ; + RECT 0.0 247.2 121.2 248.4 ; + LAYER metal3 ; + RECT 167.2 227.6 168.0 228.4 ; + LAYER metal3 ; + RECT 181.5 337.0 182.3 337.8 ; + LAYER metal3 ; + RECT 0.0 60.0 73.2 61.2 ; + LAYER metal3 ; + RECT 188.3 357.8 189.1 358.6 ; + LAYER metal3 ; + RECT 33.6 271.2 121.2 272.4 ; + LAYER metal3 ; + RECT 174.7 233.0 175.5 233.8 ; + LAYER metal3 ; + RECT 0.0 386.4 210.0 387.6 ; + LAYER metal4 ; + RECT 43.2 2.4 44.4 423.6 ; + LAYER metal4 ; + RECT 72.0 2.4 73.2 423.6 ; + LAYER metal4 ; + RECT 206.4 2.4 207.6 423.6 ; + LAYER metal3 ; + RECT 193.9 85.0 194.7 85.8 ; + LAYER metal3 ; + RECT 0.0 31.2 27.6 32.4 ; + LAYER metal3 ; + RECT 129.6 285.6 210.0 286.8 ; + LAYER metal3 ; + RECT 93.1 227.6 93.9 228.4 ; + LAYER metal3 ; + RECT 136.8 247.2 210.0 248.4 ; + LAYER metal3 ; + RECT 167.2 352.4 168.0 353.2 ; + LAYER metal3 ; + RECT 201.9 233.0 202.7 233.8 ; + LAYER metal3 ; + RECT 23.2 204.4 24.0 205.2 ; + LAYER metal4 ; + RECT 163.2 2.4 164.4 423.6 ; + LAYER metal3 ; + RECT 167.2 206.8 168.0 207.6 ; + LAYER metal3 ; + RECT 132.0 184.8 210.0 186.0 ; + LAYER metal3 ; + RECT 201.9 138.8 202.7 139.6 ; + LAYER metal3 ; + RECT 201.9 316.2 202.7 317.0 ; + LAYER metal3 ; + RECT 0.0 16.8 210.0 18.0 ; + LAYER metal3 ; + RECT 0.0 45.6 210.0 46.8 ; + LAYER metal3 ; + RECT 60.0 122.4 210.0 123.6 ; + LAYER metal3 ; + RECT 0.0 218.4 87.6 219.6 ; + LAYER metal3 ; + RECT 0.0 108.0 210.0 109.2 ; + LAYER metal3 ; + RECT 208.7 253.8 209.5 254.6 ; + LAYER metal3 ; + RECT 0.0 141.6 73.2 142.8 ; + LAYER metal3 ; + RECT 201.9 222.2 202.7 223.0 ; + LAYER metal3 ; + RECT 0.0 381.6 210.0 382.8 ; + LAYER metal4 ; + RECT 129.6 2.4 130.8 423.6 ; + LAYER metal3 ; + RECT 208.7 274.6 209.5 275.4 ; + LAYER metal3 ; + RECT 174.7 305.4 175.5 306.2 ; + LAYER metal3 ; + RECT 10.0 243.6 10.8 244.4 ; + LAYER metal3 ; + RECT 0.0 103.2 73.2 104.4 ; + LAYER metal3 ; + RECT 195.1 138.8 195.9 139.6 ; + LAYER metal3 ; + RECT 2.0 2.4 2.8 3.2 ; + LAYER metal3 ; + RECT 86.4 348.0 210.0 349.2 ; + LAYER metal4 ; + RECT 28.8 2.4 30.0 423.6 ; + LAYER metal3 ; + RECT 26.4 223.2 116.4 224.4 ; + LAYER metal3 ; + RECT 208.7 222.2 209.5 223.0 ; + LAYER metal3 ; + RECT 201.9 170.6 202.7 171.4 ; + LAYER metal3 ; + RECT 0.0 324.0 210.0 325.2 ; + LAYER metal4 ; + RECT 19.2 2.4 20.4 423.6 ; + LAYER metal4 ; + RECT 182.4 2.4 183.6 423.6 ; + LAYER metal4 ; + RECT 81.6 2.4 82.8 423.6 ; + LAYER metal3 ; + RECT 93.1 248.4 93.9 249.2 ; + LAYER metal3 ; + RECT 208.7 295.4 209.5 296.2 ; + LAYER metal3 ; + RECT 0.0 55.2 210.0 56.4 ; + LAYER metal3 ; + RECT 33.6 252.0 116.4 253.2 ; + LAYER metal3 ; + RECT 0.0 319.2 147.6 320.4 ; + LAYER metal3 ; + RECT 0.0 396.0 210.0 397.2 ; + LAYER metal3 ; + RECT 10.0 322.0 10.8 322.8 ; + LAYER metal3 ; + RECT 0.0 348.0 54.0 349.2 ; + LAYER metal3 ; + RECT 167.2 186.0 168.0 186.8 ; + LAYER metal3 ; + RECT 181.5 180.6 182.3 181.4 ; + LAYER metal3 ; + RECT 208.7 212.2 209.5 213.0 ; + LAYER metal3 ; + RECT 174.7 347.0 175.5 347.8 ; + LAYER metal3 ; + RECT 181.5 274.6 182.3 275.4 ; + LAYER metal3 ; + RECT 152.0 269.2 152.8 270.0 ; + LAYER metal3 ; + RECT 152.0 290.0 152.8 290.8 ; + LAYER metal3 ; + RECT 0.0 309.6 210.0 310.8 ; + LAYER metal4 ; + RECT 177.6 2.4 178.8 423.6 ; + LAYER metal3 ; + RECT 208.7 201.4 209.5 202.2 ; + LAYER metal4 ; + RECT 96.0 2.4 97.2 423.6 ; + LAYER metal3 ; + RECT 23.2 282.8 24.0 283.6 ; + LAYER metal3 ; + RECT 81.6 141.6 210.0 142.8 ; + LAYER metal3 ; + RECT 181.5 347.0 182.3 347.8 ; + LAYER metal3 ; + RECT 208.7 191.4 209.5 192.2 ; + LAYER metal3 ; + RECT 26.4 261.6 121.2 262.8 ; + LAYER metal3 ; + RECT 76.8 2.4 210.0 3.6 ; + LAYER metal3 ; + RECT 0.0 314.4 210.0 315.6 ; + LAYER metal3 ; + RECT 0.0 405.6 63.6 406.8 ; + LAYER metal4 ; + RECT 48.0 2.4 49.2 423.6 ; + LAYER metal4 ; + RECT 168.0 2.4 169.2 423.6 ; + LAYER metal4 ; + RECT 187.2 2.4 188.4 423.6 ; + LAYER metal3 ; + RECT 152.0 352.4 152.8 353.2 ; + LAYER metal3 ; + RECT 111.7 2.4 112.5 3.2 ; + LAYER metal3 ; + RECT 129.6 208.8 210.0 210.0 ; + LAYER metal3 ; + RECT 0.0 2.4 44.4 3.6 ; + LAYER metal3 ; + RECT 0.0 357.6 210.0 358.8 ; + LAYER metal3 ; + RECT 174.7 337.0 175.5 337.8 ; + LAYER metal3 ; + RECT 0.0 26.4 37.2 27.6 ; + LAYER metal4 ; + RECT 134.4 2.4 135.6 423.6 ; + LAYER metal4 ; + RECT 192.0 2.4 193.2 423.6 ; + LAYER metal4 ; + RECT 139.2 2.4 140.4 423.6 ; + LAYER metal3 ; + RECT 188.3 170.6 189.1 171.4 ; + LAYER metal3 ; + RECT 0.0 242.4 210.0 243.6 ; + LAYER metal3 ; + RECT 93.1 269.2 93.9 270.0 ; + LAYER metal3 ; + RECT 0.0 420.0 210.0 421.2 ; + LAYER metal3 ; + RECT 201.9 347.0 202.7 347.8 ; + LAYER metal3 ; + RECT 0.0 132.0 210.0 133.2 ; + LAYER metal3 ; + RECT 181.5 357.8 182.3 358.6 ; + LAYER metal3 ; + RECT 199.3 80.6 200.1 81.4 ; + LAYER metal3 ; + RECT 0.0 146.4 27.6 147.6 ; + LAYER metal3 ; + RECT 0.0 12.0 210.0 13.2 ; + LAYER metal3 ; + RECT 208.7 233.0 209.5 233.8 ; + LAYER metal3 ; + RECT 81.6 60.0 210.0 61.2 ; + LAYER metal3 ; + RECT 0.0 112.8 75.6 114.0 ; + LAYER metal3 ; + RECT 201.9 284.6 202.7 285.4 ; + LAYER metal3 ; + RECT 0.0 204.0 210.0 205.2 ; + LAYER metal3 ; + RECT 174.7 274.6 175.5 275.4 ; + LAYER metal3 ; + RECT 174.7 253.8 175.5 254.6 ; + LAYER metal3 ; + RECT 181.5 212.2 182.3 213.0 ; + LAYER metal3 ; + RECT 201.9 212.2 202.7 213.0 ; + LAYER metal3 ; + RECT 170.4 151.2 210.0 152.4 ; + LAYER metal3 ; + RECT 0.0 156.0 210.0 157.2 ; + LAYER metal3 ; + RECT 0.0 93.6 210.0 94.8 ; + LAYER metal3 ; + RECT 201.9 243.0 202.7 243.8 ; + LAYER metal3 ; + RECT 0.0 285.6 116.4 286.8 ; + LAYER metal3 ; + RECT 33.6 232.8 210.0 234.0 ; + LAYER metal3 ; + RECT 0.0 372.0 210.0 373.2 ; + LAYER metal3 ; + RECT 0.0 415.2 70.8 416.4 ; + LAYER metal3 ; + RECT 0.0 304.8 210.0 306.0 ; + LAYER metal3 ; + RECT 174.7 191.4 175.5 192.2 ; + LAYER metal3 ; + RECT 191.1 99.6 191.9 100.4 ; + LAYER metal3 ; + RECT 133.5 2.4 134.3 3.2 ; + LAYER metal4 ; + RECT 4.8 2.4 6.0 423.6 ; + LAYER metal3 ; + RECT 208.7 347.0 209.5 347.8 ; + LAYER metal3 ; + RECT 108.1 186.0 108.9 186.8 ; + LAYER metal3 ; + RECT 93.1 206.8 93.9 207.6 ; + LAYER metal3 ; + RECT 93.1 186.0 93.9 186.8 ; + LAYER metal3 ; + RECT 174.7 243.0 175.5 243.8 ; + LAYER metal3 ; + RECT 68.1 424.4 68.9 425.2 ; + LAYER metal3 ; + RECT 174.7 201.4 175.5 202.2 ; + LAYER metal3 ; + RECT 0.0 36.0 34.8 37.2 ; + LAYER metal3 ; + RECT 0.0 64.8 210.0 66.0 ; + LAYER metal3 ; + RECT 208.7 170.6 209.5 171.4 ; + LAYER metal3 ; + RECT 192.5 80.6 193.3 81.4 ; + LAYER metal3 ; + RECT 10.0 282.8 10.8 283.6 ; + LAYER metal3 ; + RECT 208.7 243.0 209.5 243.8 ; + LAYER metal4 ; + RECT 9.6 2.4 10.8 423.6 ; + LAYER metal3 ; + RECT 195.1 357.8 195.9 358.6 ; + LAYER metal3 ; + RECT 208.7 305.4 209.5 306.2 ; + LAYER metal3 ; + RECT 208.7 284.6 209.5 285.4 ; + LAYER metal3 ; + RECT 0.0 391.2 210.0 392.4 ; + LAYER metal3 ; + RECT 0.0 170.4 210.0 171.6 ; + LAYER metal3 ; + RECT 0.0 127.2 188.4 128.4 ; + LAYER metal3 ; + RECT 0.0 276.0 210.0 277.2 ; + LAYER metal3 ; + RECT 129.6 223.2 210.0 224.4 ; + LAYER metal3 ; + RECT 201.9 180.6 202.7 181.4 ; + LAYER metal4 ; + RECT 148.8 2.4 150.0 423.6 ; + LAYER metal3 ; + RECT 181.5 233.0 182.3 233.8 ; + LAYER metal3 ; + RECT 0.0 122.4 34.8 123.6 ; + LAYER metal3 ; + RECT 33.6 194.4 87.6 195.6 ; + LAYER metal3 ; + RECT 108.1 227.6 108.9 228.4 ; + LAYER metal3 ; + RECT 174.7 357.8 175.5 358.6 ; + LAYER metal3 ; + RECT 148.8 7.2 210.0 8.4 ; + LAYER metal3 ; + RECT 167.2 331.6 168.0 332.4 ; + LAYER metal3 ; + RECT 181.5 170.6 182.3 171.4 ; + LAYER metal3 ; + RECT 181.5 305.4 182.3 306.2 ; + LAYER metal3 ; + RECT 201.9 305.4 202.7 306.2 ; + LAYER metal3 ; + RECT 174.7 284.6 175.5 285.4 ; + LAYER metal3 ; + RECT 201.9 201.4 202.7 202.2 ; + LAYER metal3 ; + RECT 0.0 151.2 75.6 152.4 ; + LAYER metal3 ; + RECT 23.2 165.2 24.0 166.0 ; + LAYER metal3 ; + RECT 74.4 26.4 210.0 27.6 ; + LAYER metal4 ; + RECT 67.2 2.4 68.4 423.6 ; + LAYER metal3 ; + RECT 210.8 167.8 211.6 168.6 ; + LAYER metal3 ; + RECT 26.4 300.0 147.6 301.2 ; + LAYER metal3 ; + RECT 48.0 31.2 210.0 32.4 ; + LAYER metal3 ; + RECT 0.0 400.8 210.0 402.0 ; + LAYER metal3 ; + RECT 208.7 357.8 209.5 358.6 ; + LAYER metal3 ; + RECT 174.7 222.2 175.5 223.0 ; + LAYER metal4 ; + RECT 124.8 2.4 126.0 423.6 ; + LAYER metal3 ; + RECT 139.2 21.6 210.0 22.8 ; + LAYER metal4 ; + RECT 144.0 2.4 145.2 423.6 ; + LAYER metal3 ; + RECT 129.6 199.2 210.0 200.4 ; + LAYER metal3 ; + RECT 152.0 248.4 152.8 249.2 ; + LAYER metal3 ; + RECT 0.0 165.6 210.0 166.8 ; + LAYER metal3 ; + RECT 181.5 222.2 182.3 223.0 ; + LAYER metal3 ; + RECT 129.6 271.2 210.0 272.4 ; + LAYER metal4 ; + RECT 172.8 2.4 174.0 423.6 ; + LAYER metal3 ; + RECT 72.0 405.6 210.0 406.8 ; + LAYER metal3 ; + RECT 152.0 186.0 152.8 186.8 ; + LAYER metal3 ; + RECT 67.2 36.0 210.0 37.2 ; + LAYER metal3 ; + RECT 200.7 85.0 201.5 85.8 ; + LAYER metal3 ; + RECT 108.1 290.0 108.9 290.8 ; + LAYER metal3 ; + RECT 181.5 295.4 182.3 296.2 ; + LAYER metal3 ; + RECT 10.0 204.4 10.8 205.2 ; + LAYER metal3 ; + RECT 0.0 352.8 70.8 354.0 ; + LAYER metal3 ; + RECT 152.0 206.8 152.8 207.6 ; + LAYER metal3 ; + RECT 67.2 50.4 210.0 51.6 ; + LAYER metal3 ; + RECT 0.0 189.6 116.4 190.8 ; + LAYER metal4 ; + RECT 76.8 2.4 78.0 423.6 ; + LAYER metal4 ; + RECT 110.4 2.4 111.6 423.6 ; + LAYER metal3 ; + RECT 181.5 284.6 182.3 285.4 ; + LAYER metal3 ; + RECT 23.2 243.6 24.0 244.4 ; + LAYER metal3 ; + RECT 152.0 227.6 152.8 228.4 ; + LAYER metal4 ; + RECT 201.6 2.4 202.8 423.6 ; + LAYER metal3 ; + RECT 167.2 269.2 168.0 270.0 ; + LAYER metal3 ; + RECT 201.9 337.0 202.7 337.8 ; + LAYER metal4 ; + RECT 0.0 2.4 1.2 423.6 ; + LAYER metal3 ; + RECT 174.7 212.2 175.5 213.0 ; + LAYER metal3 ; + RECT 201.9 263.8 202.7 264.6 ; + LAYER metal3 ; + RECT 181.5 326.2 182.3 327.0 ; + LAYER metal3 ; + RECT 174.7 295.4 175.5 296.2 ; + LAYER metal3 ; + RECT 33.6 175.2 150.0 176.4 ; + LAYER metal3 ; + RECT 0.0 88.8 210.0 90.0 ; + LAYER metal3 ; + RECT 181.5 201.4 182.3 202.2 ; + LAYER metal3 ; + RECT 0.0 84.0 210.0 85.2 ; + LAYER metal3 ; + RECT 129.6 252.0 210.0 253.2 ; + LAYER metal3 ; + RECT 0.0 7.2 75.6 8.4 ; + LAYER metal3 ; + RECT 0.0 79.2 210.0 80.4 ; + LAYER metal3 ; + RECT 77.6 82.4 78.4 83.2 ; + LAYER metal4 ; + RECT 86.4 2.4 87.6 423.6 ; + LAYER metal3 ; + RECT 201.9 326.2 202.7 327.0 ; + LAYER metal3 ; + RECT 195.1 170.6 195.9 171.4 ; + LAYER metal3 ; + RECT 0.0 40.8 210.0 42.0 ; + LAYER metal3 ; + RECT 86.4 352.8 210.0 354.0 ; + LAYER metal3 ; + RECT 26.4 343.2 147.6 344.4 ; + LAYER metal4 ; + RECT 91.2 2.4 92.4 423.6 ; + LAYER metal3 ; + RECT 174.7 263.8 175.5 264.6 ; + LAYER metal3 ; + RECT 152.0 310.8 152.8 311.6 ; + LAYER metal3 ; + RECT 0.0 74.4 75.6 75.6 ; + LAYER metal3 ; + RECT 0.0 280.8 87.6 282.0 ; + LAYER metal3 ; + RECT 208.7 326.2 209.5 327.0 ; + LAYER metal3 ; + RECT 68.1 384.4 68.9 385.2 ; + LAYER metal3 ; + RECT 33.6 290.4 210.0 291.6 ; + LAYER metal3 ; + RECT 201.9 191.4 202.7 192.2 ; + LAYER metal3 ; + RECT 129.6 261.6 210.0 262.8 ; + LAYER metal3 ; + RECT 197.9 99.6 198.7 100.4 ; + LAYER metal3 ; + RECT 181.5 191.4 182.3 192.2 ; + LAYER metal3 ; + RECT 208.7 316.2 209.5 317.0 ; + LAYER metal3 ; + RECT 108.1 248.4 108.9 249.2 ; + LAYER metal3 ; + RECT 33.6 213.6 210.0 214.8 ; + LAYER metal3 ; + RECT 0.0 208.8 121.2 210.0 ; + LAYER metal3 ; + RECT 108.1 269.2 108.9 270.0 ; + LAYER metal3 ; + RECT 91.2 415.2 210.0 416.4 ; + LAYER metal4 ; + RECT 24.0 2.4 25.2 423.6 ; + LAYER metal3 ; + RECT 0.0 410.4 210.0 411.6 ; + LAYER metal3 ; + RECT 77.6 2.4 78.4 3.2 ; + LAYER metal3 ; + RECT 0.0 256.8 87.6 258.0 ; + LAYER metal4 ; + RECT 38.4 2.4 39.6 423.6 ; + LAYER metal4 ; + RECT 14.4 2.4 15.6 423.6 ; + LAYER metal3 ; + RECT 201.9 295.4 202.7 296.2 ; + LAYER metal3 ; + RECT 0.0 362.4 63.6 363.6 ; + LAYER metal4 ; + RECT 57.6 2.4 58.8 423.6 ; + LAYER metal3 ; + RECT 77.6 122.4 78.4 123.2 ; + LAYER metal3 ; + RECT 0.0 50.4 39.6 51.6 ; + LAYER metal3 ; + RECT 172.6 355.0 173.4 355.8 ; + LAYER metal3 ; + RECT 0.0 376.8 210.0 378.0 ; + LAYER metal3 ; + RECT 181.5 316.2 182.3 317.0 ; + LAYER metal3 ; + RECT 174.7 180.6 175.5 181.4 ; + LAYER metal3 ; + RECT 201.9 357.8 202.7 358.6 ; + LAYER metal3 ; + RECT 0.0 69.6 210.0 70.8 ; + LAYER metal3 ; + RECT 201.9 274.6 202.7 275.4 ; + LAYER metal3 ; + RECT 167.2 248.4 168.0 249.2 ; + LAYER metal3 ; + RECT 174.7 316.2 175.5 317.0 ; + LAYER metal3 ; + RECT 167.2 290.0 168.0 290.8 ; + LAYER metal3 ; + RECT 93.1 290.0 93.9 290.8 ; END END gnd OBS LAYER metal1 ; - RECT 48300.0 215550.0 49200.0 216450.0 ; - RECT 48300.0 213150.0 49200.0 214050.0 ; - RECT 46950.0 215550.0 48750.0 216450.0 ; - RECT 48300.0 213600.0 49200.0 216000.0 ; - RECT 48750.0 213150.0 50700.0 214050.0 ; - RECT 100800.0 215550.0 101700.0 216450.0 ; - RECT 100800.0 211050.0 101700.0 211950.0 ; - RECT 86850.0 215550.0 101250.0 216450.0 ; - RECT 100800.0 211500.0 101700.0 216000.0 ; - RECT 101250.0 211050.0 115800.0 211950.0 ; - RECT 48300.0 229950.0 49200.0 230850.0 ; - RECT 48300.0 232350.0 49200.0 233250.0 ; - RECT 46950.0 229950.0 48750.0 230850.0 ; - RECT 48300.0 230400.0 49200.0 232800.0 ; - RECT 48750.0 232350.0 50700.0 233250.0 ; - RECT 100800.0 229950.0 101700.0 230850.0 ; - RECT 100800.0 234450.0 101700.0 235350.0 ; - RECT 86850.0 229950.0 101250.0 230850.0 ; - RECT 100800.0 230400.0 101700.0 234900.0 ; - RECT 101250.0 234450.0 115800.0 235350.0 ; - RECT 48300.0 243150.0 49200.0 244050.0 ; - RECT 48300.0 240750.0 49200.0 241650.0 ; - RECT 46950.0 243150.0 48750.0 244050.0 ; - RECT 48300.0 241200.0 49200.0 243600.0 ; - RECT 48750.0 240750.0 50700.0 241650.0 ; - RECT 100800.0 243150.0 101700.0 244050.0 ; - RECT 100800.0 238650.0 101700.0 239550.0 ; - RECT 86850.0 243150.0 101250.0 244050.0 ; - RECT 100800.0 239100.0 101700.0 243600.0 ; - RECT 101250.0 238650.0 115800.0 239550.0 ; - RECT 48300.0 257550.0 49200.0 258450.0 ; - RECT 48300.0 259950.0 49200.0 260850.0 ; - RECT 46950.0 257550.0 48750.0 258450.0 ; - RECT 48300.0 258000.0 49200.0 260400.0 ; - RECT 48750.0 259950.0 50700.0 260850.0 ; - RECT 100800.0 257550.0 101700.0 258450.0 ; - RECT 100800.0 262050.0 101700.0 262950.0 ; - RECT 86850.0 257550.0 101250.0 258450.0 ; - RECT 100800.0 258000.0 101700.0 262500.0 ; - RECT 101250.0 262050.0 115800.0 262950.0 ; - RECT 48300.0 270750.0 49200.0 271650.0 ; - RECT 48300.0 268350.0 49200.0 269250.0 ; - RECT 46950.0 270750.0 48750.0 271650.0 ; - RECT 48300.0 268800.0 49200.0 271200.0 ; - RECT 48750.0 268350.0 50700.0 269250.0 ; - RECT 100800.0 270750.0 101700.0 271650.0 ; - RECT 100800.0 266250.0 101700.0 267150.0 ; - RECT 86850.0 270750.0 101250.0 271650.0 ; - RECT 100800.0 266700.0 101700.0 271200.0 ; - RECT 101250.0 266250.0 115800.0 267150.0 ; - RECT 48300.0 285150.0 49200.0 286050.0 ; - RECT 48300.0 287550.0 49200.0 288450.0 ; - RECT 46950.0 285150.0 48750.0 286050.0 ; - RECT 48300.0 285600.0 49200.0 288000.0 ; - RECT 48750.0 287550.0 50700.0 288450.0 ; - RECT 100800.0 285150.0 101700.0 286050.0 ; - RECT 100800.0 289650.0 101700.0 290550.0 ; - RECT 86850.0 285150.0 101250.0 286050.0 ; - RECT 100800.0 285600.0 101700.0 290100.0 ; - RECT 101250.0 289650.0 115800.0 290550.0 ; - RECT 48300.0 298350.0 49200.0 299250.0 ; - RECT 48300.0 295950.0 49200.0 296850.0 ; - RECT 46950.0 298350.0 48750.0 299250.0 ; - RECT 48300.0 296400.0 49200.0 298800.0 ; - RECT 48750.0 295950.0 50700.0 296850.0 ; - RECT 100800.0 298350.0 101700.0 299250.0 ; - RECT 100800.0 293850.0 101700.0 294750.0 ; - RECT 86850.0 298350.0 101250.0 299250.0 ; - RECT 100800.0 294300.0 101700.0 298800.0 ; - RECT 101250.0 293850.0 115800.0 294750.0 ; - RECT 48300.0 312750.0 49200.0 313650.0 ; - RECT 48300.0 315150.0 49200.0 316050.0 ; - RECT 46950.0 312750.0 48750.0 313650.0 ; - RECT 48300.0 313200.0 49200.0 315600.0 ; - RECT 48750.0 315150.0 50700.0 316050.0 ; - RECT 100800.0 312750.0 101700.0 313650.0 ; - RECT 100800.0 317250.0 101700.0 318150.0 ; - RECT 86850.0 312750.0 101250.0 313650.0 ; - RECT 100800.0 313200.0 101700.0 317700.0 ; - RECT 101250.0 317250.0 115800.0 318150.0 ; - RECT 48300.0 325950.0 49200.0 326850.0 ; - RECT 48300.0 323550.0 49200.0 324450.0 ; - RECT 46950.0 325950.0 48750.0 326850.0 ; - RECT 48300.0 324000.0 49200.0 326400.0 ; - RECT 48750.0 323550.0 50700.0 324450.0 ; - RECT 100800.0 325950.0 101700.0 326850.0 ; - RECT 100800.0 321450.0 101700.0 322350.0 ; - RECT 86850.0 325950.0 101250.0 326850.0 ; - RECT 100800.0 321900.0 101700.0 326400.0 ; - RECT 101250.0 321450.0 115800.0 322350.0 ; - RECT 48300.0 340350.0 49200.0 341250.0 ; - RECT 48300.0 342750.0 49200.0 343650.0 ; - RECT 46950.0 340350.0 48750.0 341250.0 ; - RECT 48300.0 340800.0 49200.0 343200.0 ; - RECT 48750.0 342750.0 50700.0 343650.0 ; - RECT 100800.0 340350.0 101700.0 341250.0 ; - RECT 100800.0 344850.0 101700.0 345750.0 ; - RECT 86850.0 340350.0 101250.0 341250.0 ; - RECT 100800.0 340800.0 101700.0 345300.0 ; - RECT 101250.0 344850.0 115800.0 345750.0 ; - RECT 48300.0 353550.0 49200.0 354450.0 ; - RECT 48300.0 351150.0 49200.0 352050.0 ; - RECT 46950.0 353550.0 48750.0 354450.0 ; - RECT 48300.0 351600.0 49200.0 354000.0 ; - RECT 48750.0 351150.0 50700.0 352050.0 ; - RECT 100800.0 353550.0 101700.0 354450.0 ; - RECT 100800.0 349050.0 101700.0 349950.0 ; - RECT 86850.0 353550.0 101250.0 354450.0 ; - RECT 100800.0 349500.0 101700.0 354000.0 ; - RECT 101250.0 349050.0 115800.0 349950.0 ; - RECT 48300.0 367950.0 49200.0 368850.0 ; - RECT 48300.0 370350.0 49200.0 371250.0 ; - RECT 46950.0 367950.0 48750.0 368850.0 ; - RECT 48300.0 368400.0 49200.0 370800.0 ; - RECT 48750.0 370350.0 50700.0 371250.0 ; - RECT 100800.0 367950.0 101700.0 368850.0 ; - RECT 100800.0 372450.0 101700.0 373350.0 ; - RECT 86850.0 367950.0 101250.0 368850.0 ; - RECT 100800.0 368400.0 101700.0 372900.0 ; - RECT 101250.0 372450.0 115800.0 373350.0 ; - RECT 48300.0 381150.0 49200.0 382050.0 ; - RECT 48300.0 378750.0 49200.0 379650.0 ; - RECT 46950.0 381150.0 48750.0 382050.0 ; - RECT 48300.0 379200.0 49200.0 381600.0 ; - RECT 48750.0 378750.0 50700.0 379650.0 ; - RECT 100800.0 381150.0 101700.0 382050.0 ; - RECT 100800.0 376650.0 101700.0 377550.0 ; - RECT 86850.0 381150.0 101250.0 382050.0 ; - RECT 100800.0 377100.0 101700.0 381600.0 ; - RECT 101250.0 376650.0 115800.0 377550.0 ; - RECT 48300.0 395550.0 49200.0 396450.0 ; - RECT 48300.0 397950.0 49200.0 398850.0 ; - RECT 46950.0 395550.0 48750.0 396450.0 ; - RECT 48300.0 396000.0 49200.0 398400.0 ; - RECT 48750.0 397950.0 50700.0 398850.0 ; - RECT 100800.0 395550.0 101700.0 396450.0 ; - RECT 100800.0 400050.0 101700.0 400950.0 ; - RECT 86850.0 395550.0 101250.0 396450.0 ; - RECT 100800.0 396000.0 101700.0 400500.0 ; - RECT 101250.0 400050.0 115800.0 400950.0 ; - RECT 48300.0 408750.0 49200.0 409650.0 ; - RECT 48300.0 406350.0 49200.0 407250.0 ; - RECT 46950.0 408750.0 48750.0 409650.0 ; - RECT 48300.0 406800.0 49200.0 409200.0 ; - RECT 48750.0 406350.0 50700.0 407250.0 ; - RECT 100800.0 408750.0 101700.0 409650.0 ; - RECT 100800.0 404250.0 101700.0 405150.0 ; - RECT 86850.0 408750.0 101250.0 409650.0 ; - RECT 100800.0 404700.0 101700.0 409200.0 ; - RECT 101250.0 404250.0 115800.0 405150.0 ; - RECT 48300.0 423150.0 49200.0 424050.0 ; - RECT 48300.0 425550.0 49200.0 426450.0 ; - RECT 46950.0 423150.0 48750.0 424050.0 ; - RECT 48300.0 423600.0 49200.0 426000.0 ; - RECT 48750.0 425550.0 50700.0 426450.0 ; - RECT 100800.0 423150.0 101700.0 424050.0 ; - RECT 100800.0 427650.0 101700.0 428550.0 ; - RECT 86850.0 423150.0 101250.0 424050.0 ; - RECT 100800.0 423600.0 101700.0 428100.0 ; - RECT 101250.0 427650.0 115800.0 428550.0 ; - RECT 81300.0 101250.0 85800.0 102150.0 ; - RECT 78300.0 115050.0 88500.0 115950.0 ; - RECT 81300.0 156450.0 91200.0 157350.0 ; - RECT 78300.0 170250.0 93900.0 171150.0 ; - RECT 1800.0 98550.0 81300.0 99450.0 ; - RECT 1800.0 126150.0 81300.0 127050.0 ; - RECT 1800.0 153750.0 81300.0 154650.0 ; - RECT 1800.0 181350.0 81300.0 182250.0 ; - RECT 6750.0 112350.0 81300.0 113250.0 ; - RECT 6750.0 139950.0 81300.0 140850.0 ; - RECT 6750.0 167550.0 81300.0 168450.0 ; - RECT 6750.0 195150.0 81300.0 196050.0 ; - RECT 68700.0 87300.0 85800.0 88200.0 ; - RECT 68700.0 78600.0 88500.0 79500.0 ; - RECT 68700.0 66900.0 91200.0 67800.0 ; - RECT 68700.0 58200.0 93900.0 59100.0 ; - RECT 1800.0 82950.0 9900.0 83850.0 ; - RECT 1800.0 62550.0 9900.0 63450.0 ; - RECT 66300.0 50250.0 67200.0 51150.0 ; - RECT 66300.0 50700.0 67200.0 52800.0 ; - RECT 6750.0 50250.0 66750.0 51150.0 ; - RECT 104700.0 42300.0 116400.0 43200.0 ; - RECT 99300.0 37800.0 116400.0 38700.0 ; - RECT 102000.0 35400.0 116400.0 36300.0 ; - RECT 104700.0 438600.0 116400.0 439500.0 ; - RECT 107400.0 107100.0 116400.0 108000.0 ; - RECT 110100.0 205200.0 116400.0 206100.0 ; - RECT 12300.0 95250.0 13200.0 96150.0 ; - RECT 12300.0 93600.0 13200.0 95700.0 ; - RECT 12750.0 95250.0 96600.0 96150.0 ; - RECT 53850.0 431850.0 97500.0 432750.0 ; - RECT 116400.0 449700.0 146250.0 450600.0 ; - RECT 116400.0 177900.0 146250.0 178800.0 ; - RECT 116400.0 109200.0 146250.0 110100.0 ; - RECT 116400.0 96300.0 146250.0 97200.0 ; - RECT 116400.0 19500.0 146250.0 20400.0 ; - RECT 6750.0 222750.0 146250.0 223650.0 ; - RECT 6750.0 250350.0 146250.0 251250.0 ; - RECT 6750.0 277950.0 146250.0 278850.0 ; - RECT 6750.0 305550.0 146250.0 306450.0 ; - RECT 6750.0 333150.0 146250.0 334050.0 ; - RECT 6750.0 360750.0 146250.0 361650.0 ; - RECT 6750.0 388350.0 146250.0 389250.0 ; - RECT 6750.0 415950.0 146250.0 416850.0 ; - RECT 116400.0 33300.0 143100.0 34200.0 ; - RECT 116400.0 203100.0 143100.0 204000.0 ; - RECT 116400.0 105000.0 143100.0 105900.0 ; - RECT 1800.0 208950.0 57000.0 209850.0 ; - RECT 1800.0 236550.0 57000.0 237450.0 ; - RECT 1800.0 264150.0 57000.0 265050.0 ; - RECT 1800.0 291750.0 57000.0 292650.0 ; - RECT 1800.0 319350.0 57000.0 320250.0 ; - RECT 1800.0 346950.0 57000.0 347850.0 ; - RECT 1800.0 374550.0 57000.0 375450.0 ; - RECT 1800.0 402150.0 57000.0 403050.0 ; - RECT 1800.0 429750.0 57000.0 430650.0 ; - RECT 116400.0 209400.0 126600.0 223200.0 ; - RECT 116400.0 237000.0 126600.0 223200.0 ; - RECT 116400.0 237000.0 126600.0 250800.0 ; - RECT 116400.0 264600.0 126600.0 250800.0 ; - RECT 116400.0 264600.0 126600.0 278400.0 ; - RECT 116400.0 292200.0 126600.0 278400.0 ; - RECT 116400.0 292200.0 126600.0 306000.0 ; - RECT 116400.0 319800.0 126600.0 306000.0 ; - RECT 116400.0 319800.0 126600.0 333600.0 ; - RECT 116400.0 347400.0 126600.0 333600.0 ; - RECT 116400.0 347400.0 126600.0 361200.0 ; - RECT 116400.0 375000.0 126600.0 361200.0 ; - RECT 116400.0 375000.0 126600.0 388800.0 ; - RECT 116400.0 402600.0 126600.0 388800.0 ; - RECT 116400.0 402600.0 126600.0 416400.0 ; - RECT 116400.0 430200.0 126600.0 416400.0 ; - RECT 126600.0 209400.0 136800.0 223200.0 ; - RECT 126600.0 237000.0 136800.0 223200.0 ; - RECT 126600.0 237000.0 136800.0 250800.0 ; - RECT 126600.0 264600.0 136800.0 250800.0 ; - RECT 126600.0 264600.0 136800.0 278400.0 ; - RECT 126600.0 292200.0 136800.0 278400.0 ; - RECT 126600.0 292200.0 136800.0 306000.0 ; - RECT 126600.0 319800.0 136800.0 306000.0 ; - RECT 126600.0 319800.0 136800.0 333600.0 ; - RECT 126600.0 347400.0 136800.0 333600.0 ; - RECT 126600.0 347400.0 136800.0 361200.0 ; - RECT 126600.0 375000.0 136800.0 361200.0 ; - RECT 126600.0 375000.0 136800.0 388800.0 ; - RECT 126600.0 402600.0 136800.0 388800.0 ; - RECT 126600.0 402600.0 136800.0 416400.0 ; - RECT 126600.0 430200.0 136800.0 416400.0 ; - RECT 115800.0 210900.0 137400.0 212100.0 ; - RECT 115800.0 234300.0 137400.0 235500.0 ; - RECT 115800.0 238500.0 137400.0 239700.0 ; - RECT 115800.0 261900.0 137400.0 263100.0 ; - RECT 115800.0 266100.0 137400.0 267300.0 ; - RECT 115800.0 289500.0 137400.0 290700.0 ; - RECT 115800.0 293700.0 137400.0 294900.0 ; - RECT 115800.0 317100.0 137400.0 318300.0 ; - RECT 115800.0 321300.0 137400.0 322500.0 ; - RECT 115800.0 344700.0 137400.0 345900.0 ; - RECT 115800.0 348900.0 137400.0 350100.0 ; - RECT 115800.0 372300.0 137400.0 373500.0 ; - RECT 115800.0 376500.0 137400.0 377700.0 ; - RECT 115800.0 399900.0 137400.0 401100.0 ; - RECT 115800.0 404100.0 137400.0 405300.0 ; - RECT 115800.0 427500.0 137400.0 428700.0 ; - RECT 115800.0 222600.0 137400.0 223500.0 ; - RECT 115800.0 250200.0 137400.0 251100.0 ; - RECT 115800.0 277800.0 137400.0 278700.0 ; - RECT 115800.0 305400.0 137400.0 306300.0 ; - RECT 115800.0 333000.0 137400.0 333900.0 ; - RECT 115800.0 360600.0 137400.0 361500.0 ; - RECT 115800.0 388200.0 137400.0 389100.0 ; - RECT 115800.0 415800.0 137400.0 416700.0 ; - RECT 121800.0 443400.0 123000.0 450600.0 ; - RECT 119400.0 436200.0 120600.0 437400.0 ; - RECT 121800.0 436200.0 123000.0 437400.0 ; - RECT 121800.0 436200.0 123000.0 437400.0 ; - RECT 119400.0 436200.0 120600.0 437400.0 ; - RECT 119400.0 443400.0 120600.0 444600.0 ; - RECT 121800.0 443400.0 123000.0 444600.0 ; - RECT 121800.0 443400.0 123000.0 444600.0 ; - RECT 119400.0 443400.0 120600.0 444600.0 ; - RECT 121800.0 443400.0 123000.0 444600.0 ; - RECT 124200.0 443400.0 125400.0 444600.0 ; - RECT 124200.0 443400.0 125400.0 444600.0 ; - RECT 121800.0 443400.0 123000.0 444600.0 ; - RECT 121500.0 438450.0 120300.0 439650.0 ; - RECT 121800.0 448800.0 123000.0 450000.0 ; - RECT 119400.0 436200.0 120600.0 437400.0 ; - RECT 121800.0 436200.0 123000.0 437400.0 ; - RECT 119400.0 443400.0 120600.0 444600.0 ; - RECT 124200.0 443400.0 125400.0 444600.0 ; - RECT 116400.0 438600.0 126600.0 439500.0 ; - RECT 116400.0 449700.0 126600.0 450600.0 ; - RECT 132000.0 443400.0 133200.0 450600.0 ; - RECT 129600.0 436200.0 130800.0 437400.0 ; - RECT 132000.0 436200.0 133200.0 437400.0 ; - RECT 132000.0 436200.0 133200.0 437400.0 ; - RECT 129600.0 436200.0 130800.0 437400.0 ; - RECT 129600.0 443400.0 130800.0 444600.0 ; - RECT 132000.0 443400.0 133200.0 444600.0 ; - RECT 132000.0 443400.0 133200.0 444600.0 ; - RECT 129600.0 443400.0 130800.0 444600.0 ; - RECT 132000.0 443400.0 133200.0 444600.0 ; - RECT 134400.0 443400.0 135600.0 444600.0 ; - RECT 134400.0 443400.0 135600.0 444600.0 ; - RECT 132000.0 443400.0 133200.0 444600.0 ; - RECT 131700.0 438450.0 130500.0 439650.0 ; - RECT 132000.0 448800.0 133200.0 450000.0 ; - RECT 129600.0 436200.0 130800.0 437400.0 ; - RECT 132000.0 436200.0 133200.0 437400.0 ; - RECT 129600.0 443400.0 130800.0 444600.0 ; - RECT 134400.0 443400.0 135600.0 444600.0 ; - RECT 126600.0 438600.0 136800.0 439500.0 ; - RECT 126600.0 449700.0 136800.0 450600.0 ; - RECT 116400.0 438600.0 136800.0 439500.0 ; - RECT 116400.0 449700.0 136800.0 450600.0 ; - RECT 116400.0 160500.0 126600.0 209400.0 ; - RECT 126600.0 160500.0 136800.0 209400.0 ; - RECT 116400.0 205200.0 136800.0 206100.0 ; - RECT 116400.0 177900.0 136800.0 178800.0 ; - RECT 116400.0 203100.0 136800.0 204000.0 ; - RECT 116400.0 99900.0 126600.0 160500.0 ; - RECT 126600.0 99900.0 136800.0 160500.0 ; - RECT 116400.0 107100.0 136800.0 108000.0 ; - RECT 116400.0 109200.0 136800.0 110100.0 ; - RECT 116400.0 105000.0 136800.0 105900.0 ; - RECT 116400.0 39900.0 126600.0 99900.0 ; - RECT 136800.0 39900.0 126600.0 99900.0 ; - RECT 116400.0 42300.0 136800.0 43200.0 ; - RECT 116400.0 96300.0 136800.0 97200.0 ; - RECT 116400.0 39900.0 126600.0 18000.0 ; - RECT 126600.0 39900.0 136800.0 18000.0 ; - RECT 116400.0 36300.0 136800.0 35400.0 ; - RECT 116400.0 38700.0 136800.0 37800.0 ; - RECT 116400.0 20400.0 136800.0 19500.0 ; - RECT 116400.0 34200.0 136800.0 33300.0 ; - RECT 38550.0 216750.0 39450.0 217650.0 ; - RECT 38550.0 215550.0 39450.0 216450.0 ; - RECT 34500.0 216750.0 39000.0 217650.0 ; - RECT 38550.0 216000.0 39450.0 217200.0 ; - RECT 39000.0 215550.0 43500.0 216450.0 ; - RECT 38550.0 228750.0 39450.0 229650.0 ; - RECT 38550.0 229950.0 39450.0 230850.0 ; - RECT 34500.0 228750.0 39000.0 229650.0 ; - RECT 38550.0 229200.0 39450.0 230400.0 ; - RECT 39000.0 229950.0 43500.0 230850.0 ; - RECT 38550.0 244350.0 39450.0 245250.0 ; - RECT 38550.0 243150.0 39450.0 244050.0 ; - RECT 34500.0 244350.0 39000.0 245250.0 ; - RECT 38550.0 243600.0 39450.0 244800.0 ; - RECT 39000.0 243150.0 43500.0 244050.0 ; - RECT 38550.0 256350.0 39450.0 257250.0 ; - RECT 38550.0 257550.0 39450.0 258450.0 ; - RECT 34500.0 256350.0 39000.0 257250.0 ; - RECT 38550.0 256800.0 39450.0 258000.0 ; - RECT 39000.0 257550.0 43500.0 258450.0 ; - RECT 38550.0 271950.0 39450.0 272850.0 ; - RECT 38550.0 270750.0 39450.0 271650.0 ; - RECT 34500.0 271950.0 39000.0 272850.0 ; - RECT 38550.0 271200.0 39450.0 272400.0 ; - RECT 39000.0 270750.0 43500.0 271650.0 ; - RECT 38550.0 283950.0 39450.0 284850.0 ; - RECT 38550.0 285150.0 39450.0 286050.0 ; - RECT 34500.0 283950.0 39000.0 284850.0 ; - RECT 38550.0 284400.0 39450.0 285600.0 ; - RECT 39000.0 285150.0 43500.0 286050.0 ; - RECT 38550.0 299550.0 39450.0 300450.0 ; - RECT 38550.0 298350.0 39450.0 299250.0 ; - RECT 34500.0 299550.0 39000.0 300450.0 ; - RECT 38550.0 298800.0 39450.0 300000.0 ; - RECT 39000.0 298350.0 43500.0 299250.0 ; - RECT 38550.0 311550.0 39450.0 312450.0 ; - RECT 38550.0 312750.0 39450.0 313650.0 ; - RECT 34500.0 311550.0 39000.0 312450.0 ; - RECT 38550.0 312000.0 39450.0 313200.0 ; - RECT 39000.0 312750.0 43500.0 313650.0 ; - RECT 38550.0 327150.0 39450.0 328050.0 ; - RECT 38550.0 325950.0 39450.0 326850.0 ; - RECT 34500.0 327150.0 39000.0 328050.0 ; - RECT 38550.0 326400.0 39450.0 327600.0 ; - RECT 39000.0 325950.0 43500.0 326850.0 ; - RECT 38550.0 339150.0 39450.0 340050.0 ; - RECT 38550.0 340350.0 39450.0 341250.0 ; - RECT 34500.0 339150.0 39000.0 340050.0 ; - RECT 38550.0 339600.0 39450.0 340800.0 ; - RECT 39000.0 340350.0 43500.0 341250.0 ; - RECT 38550.0 354750.0 39450.0 355650.0 ; - RECT 38550.0 353550.0 39450.0 354450.0 ; - RECT 34500.0 354750.0 39000.0 355650.0 ; - RECT 38550.0 354000.0 39450.0 355200.0 ; - RECT 39000.0 353550.0 43500.0 354450.0 ; - RECT 38550.0 366750.0 39450.0 367650.0 ; - RECT 38550.0 367950.0 39450.0 368850.0 ; - RECT 34500.0 366750.0 39000.0 367650.0 ; - RECT 38550.0 367200.0 39450.0 368400.0 ; - RECT 39000.0 367950.0 43500.0 368850.0 ; - RECT 38550.0 382350.0 39450.0 383250.0 ; - RECT 38550.0 381150.0 39450.0 382050.0 ; - RECT 34500.0 382350.0 39000.0 383250.0 ; - RECT 38550.0 381600.0 39450.0 382800.0 ; - RECT 39000.0 381150.0 43500.0 382050.0 ; - RECT 38550.0 394350.0 39450.0 395250.0 ; - RECT 38550.0 395550.0 39450.0 396450.0 ; - RECT 34500.0 394350.0 39000.0 395250.0 ; - RECT 38550.0 394800.0 39450.0 396000.0 ; - RECT 39000.0 395550.0 43500.0 396450.0 ; - RECT 38550.0 409950.0 39450.0 410850.0 ; - RECT 38550.0 408750.0 39450.0 409650.0 ; - RECT 34500.0 409950.0 39000.0 410850.0 ; - RECT 38550.0 409200.0 39450.0 410400.0 ; - RECT 39000.0 408750.0 43500.0 409650.0 ; - RECT 38550.0 421950.0 39450.0 422850.0 ; - RECT 38550.0 423150.0 39450.0 424050.0 ; - RECT 34500.0 421950.0 39000.0 422850.0 ; - RECT 38550.0 422400.0 39450.0 423600.0 ; - RECT 39000.0 423150.0 43500.0 424050.0 ; - RECT 10350.0 105150.0 26700.0 106050.0 ; - RECT 12450.0 119550.0 26700.0 120450.0 ; - RECT 14550.0 132750.0 26700.0 133650.0 ; - RECT 16650.0 147150.0 26700.0 148050.0 ; - RECT 18750.0 160350.0 26700.0 161250.0 ; - RECT 20850.0 174750.0 26700.0 175650.0 ; - RECT 22950.0 187950.0 26700.0 188850.0 ; - RECT 25050.0 202350.0 26700.0 203250.0 ; - RECT 10350.0 216750.0 29100.0 217650.0 ; - RECT 18750.0 214050.0 32100.0 214950.0 ; - RECT 10350.0 228750.0 29100.0 229650.0 ; - RECT 20850.0 231450.0 32100.0 232350.0 ; - RECT 10350.0 244350.0 29100.0 245250.0 ; - RECT 22950.0 241650.0 32100.0 242550.0 ; - RECT 10350.0 256350.0 29100.0 257250.0 ; - RECT 25050.0 259050.0 32100.0 259950.0 ; - RECT 12450.0 271950.0 29100.0 272850.0 ; - RECT 18750.0 269250.0 32100.0 270150.0 ; - RECT 12450.0 283950.0 29100.0 284850.0 ; - RECT 20850.0 286650.0 32100.0 287550.0 ; - RECT 12450.0 299550.0 29100.0 300450.0 ; - RECT 22950.0 296850.0 32100.0 297750.0 ; - RECT 12450.0 311550.0 29100.0 312450.0 ; - RECT 25050.0 314250.0 32100.0 315150.0 ; - RECT 14550.0 327150.0 29100.0 328050.0 ; - RECT 18750.0 324450.0 32100.0 325350.0 ; - RECT 14550.0 339150.0 29100.0 340050.0 ; - RECT 20850.0 341850.0 32100.0 342750.0 ; - RECT 14550.0 354750.0 29100.0 355650.0 ; - RECT 22950.0 352050.0 32100.0 352950.0 ; - RECT 14550.0 366750.0 29100.0 367650.0 ; - RECT 25050.0 369450.0 32100.0 370350.0 ; - RECT 16650.0 382350.0 29100.0 383250.0 ; - RECT 18750.0 379650.0 32100.0 380550.0 ; - RECT 16650.0 394350.0 29100.0 395250.0 ; - RECT 20850.0 397050.0 32100.0 397950.0 ; - RECT 16650.0 409950.0 29100.0 410850.0 ; - RECT 22950.0 407250.0 32100.0 408150.0 ; - RECT 16650.0 421950.0 29100.0 422850.0 ; - RECT 25050.0 424650.0 32100.0 425550.0 ; - RECT 65250.0 105150.0 64350.0 106050.0 ; - RECT 65250.0 109650.0 64350.0 110550.0 ; - RECT 69450.0 105150.0 64800.0 106050.0 ; - RECT 65250.0 105600.0 64350.0 110100.0 ; - RECT 64800.0 109650.0 62250.0 110550.0 ; - RECT 80850.0 105150.0 72900.0 106050.0 ; - RECT 65250.0 119550.0 64350.0 120450.0 ; - RECT 65250.0 123450.0 64350.0 124350.0 ; - RECT 69450.0 119550.0 64800.0 120450.0 ; - RECT 65250.0 120000.0 64350.0 123900.0 ; - RECT 64800.0 123450.0 59250.0 124350.0 ; - RECT 77850.0 119550.0 72900.0 120450.0 ; - RECT 80850.0 128250.0 56250.0 129150.0 ; - RECT 77850.0 142050.0 53250.0 142950.0 ; - RECT 62250.0 106350.0 48300.0 107250.0 ; - RECT 59250.0 103650.0 45300.0 104550.0 ; - RECT 56250.0 118350.0 48300.0 119250.0 ; - RECT 59250.0 121050.0 45300.0 121950.0 ; - RECT 62250.0 133950.0 48300.0 134850.0 ; - RECT 53250.0 131250.0 45300.0 132150.0 ; - RECT 56250.0 145950.0 48300.0 146850.0 ; - RECT 53250.0 148650.0 45300.0 149550.0 ; - RECT 38850.0 106350.0 37950.0 107250.0 ; - RECT 38850.0 105150.0 37950.0 106050.0 ; - RECT 42900.0 106350.0 38400.0 107250.0 ; - RECT 38850.0 105600.0 37950.0 106800.0 ; - RECT 38400.0 105150.0 33900.0 106050.0 ; - RECT 38850.0 118350.0 37950.0 119250.0 ; - RECT 38850.0 119550.0 37950.0 120450.0 ; - RECT 42900.0 118350.0 38400.0 119250.0 ; - RECT 38850.0 118800.0 37950.0 120000.0 ; - RECT 38400.0 119550.0 33900.0 120450.0 ; - RECT 38850.0 133950.0 37950.0 134850.0 ; - RECT 38850.0 132750.0 37950.0 133650.0 ; - RECT 42900.0 133950.0 38400.0 134850.0 ; - RECT 38850.0 133200.0 37950.0 134400.0 ; - RECT 38400.0 132750.0 33900.0 133650.0 ; - RECT 38850.0 145950.0 37950.0 146850.0 ; - RECT 38850.0 147150.0 37950.0 148050.0 ; - RECT 42900.0 145950.0 38400.0 146850.0 ; - RECT 38850.0 146400.0 37950.0 147600.0 ; - RECT 38400.0 147150.0 33900.0 148050.0 ; - RECT 68700.0 110850.0 67500.0 112800.0 ; - RECT 68700.0 99000.0 67500.0 100950.0 ; - RECT 73500.0 100350.0 72300.0 98550.0 ; - RECT 73500.0 109650.0 72300.0 113250.0 ; - RECT 70800.0 100350.0 69900.0 109650.0 ; - RECT 73500.0 109650.0 72300.0 110850.0 ; - RECT 71100.0 109650.0 69900.0 110850.0 ; - RECT 71100.0 109650.0 69900.0 110850.0 ; - RECT 73500.0 109650.0 72300.0 110850.0 ; - RECT 73500.0 100350.0 72300.0 101550.0 ; - RECT 71100.0 100350.0 69900.0 101550.0 ; - RECT 71100.0 100350.0 69900.0 101550.0 ; - RECT 73500.0 100350.0 72300.0 101550.0 ; - RECT 68700.0 110250.0 67500.0 111450.0 ; - RECT 68700.0 100350.0 67500.0 101550.0 ; - RECT 72900.0 105000.0 71700.0 106200.0 ; - RECT 72900.0 105000.0 71700.0 106200.0 ; - RECT 70350.0 105150.0 69450.0 106050.0 ; - RECT 75300.0 112350.0 65700.0 113250.0 ; - RECT 75300.0 98550.0 65700.0 99450.0 ; - RECT 68700.0 114750.0 67500.0 112800.0 ; - RECT 68700.0 126600.0 67500.0 124650.0 ; - RECT 73500.0 125250.0 72300.0 127050.0 ; - RECT 73500.0 115950.0 72300.0 112350.0 ; - RECT 70800.0 125250.0 69900.0 115950.0 ; - RECT 73500.0 115950.0 72300.0 114750.0 ; - RECT 71100.0 115950.0 69900.0 114750.0 ; - RECT 71100.0 115950.0 69900.0 114750.0 ; - RECT 73500.0 115950.0 72300.0 114750.0 ; - RECT 73500.0 125250.0 72300.0 124050.0 ; - RECT 71100.0 125250.0 69900.0 124050.0 ; - RECT 71100.0 125250.0 69900.0 124050.0 ; - RECT 73500.0 125250.0 72300.0 124050.0 ; - RECT 68700.0 115350.0 67500.0 114150.0 ; - RECT 68700.0 125250.0 67500.0 124050.0 ; - RECT 72900.0 120600.0 71700.0 119400.0 ; - RECT 72900.0 120600.0 71700.0 119400.0 ; - RECT 70350.0 120450.0 69450.0 119550.0 ; - RECT 75300.0 113250.0 65700.0 112350.0 ; - RECT 75300.0 127050.0 65700.0 126150.0 ; - RECT 29700.0 110850.0 28500.0 112800.0 ; - RECT 29700.0 99000.0 28500.0 100950.0 ; - RECT 34500.0 100350.0 33300.0 98550.0 ; - RECT 34500.0 109650.0 33300.0 113250.0 ; - RECT 31800.0 100350.0 30900.0 109650.0 ; - RECT 34500.0 109650.0 33300.0 110850.0 ; - RECT 32100.0 109650.0 30900.0 110850.0 ; - RECT 32100.0 109650.0 30900.0 110850.0 ; - RECT 34500.0 109650.0 33300.0 110850.0 ; - RECT 34500.0 100350.0 33300.0 101550.0 ; - RECT 32100.0 100350.0 30900.0 101550.0 ; - RECT 32100.0 100350.0 30900.0 101550.0 ; - RECT 34500.0 100350.0 33300.0 101550.0 ; - RECT 29700.0 110250.0 28500.0 111450.0 ; - RECT 29700.0 100350.0 28500.0 101550.0 ; - RECT 33900.0 105000.0 32700.0 106200.0 ; - RECT 33900.0 105000.0 32700.0 106200.0 ; - RECT 31350.0 105150.0 30450.0 106050.0 ; - RECT 36300.0 112350.0 26700.0 113250.0 ; - RECT 36300.0 98550.0 26700.0 99450.0 ; - RECT 29700.0 114750.0 28500.0 112800.0 ; - RECT 29700.0 126600.0 28500.0 124650.0 ; - RECT 34500.0 125250.0 33300.0 127050.0 ; - RECT 34500.0 115950.0 33300.0 112350.0 ; - RECT 31800.0 125250.0 30900.0 115950.0 ; - RECT 34500.0 115950.0 33300.0 114750.0 ; - RECT 32100.0 115950.0 30900.0 114750.0 ; - RECT 32100.0 115950.0 30900.0 114750.0 ; - RECT 34500.0 115950.0 33300.0 114750.0 ; - RECT 34500.0 125250.0 33300.0 124050.0 ; - RECT 32100.0 125250.0 30900.0 124050.0 ; - RECT 32100.0 125250.0 30900.0 124050.0 ; - RECT 34500.0 125250.0 33300.0 124050.0 ; - RECT 29700.0 115350.0 28500.0 114150.0 ; - RECT 29700.0 125250.0 28500.0 124050.0 ; - RECT 33900.0 120600.0 32700.0 119400.0 ; - RECT 33900.0 120600.0 32700.0 119400.0 ; - RECT 31350.0 120450.0 30450.0 119550.0 ; - RECT 36300.0 113250.0 26700.0 112350.0 ; - RECT 36300.0 127050.0 26700.0 126150.0 ; - RECT 29700.0 138450.0 28500.0 140400.0 ; - RECT 29700.0 126600.0 28500.0 128550.0 ; - RECT 34500.0 127950.0 33300.0 126150.0 ; - RECT 34500.0 137250.0 33300.0 140850.0 ; - RECT 31800.0 127950.0 30900.0 137250.0 ; - RECT 34500.0 137250.0 33300.0 138450.0 ; - RECT 32100.0 137250.0 30900.0 138450.0 ; - RECT 32100.0 137250.0 30900.0 138450.0 ; - RECT 34500.0 137250.0 33300.0 138450.0 ; - RECT 34500.0 127950.0 33300.0 129150.0 ; - RECT 32100.0 127950.0 30900.0 129150.0 ; - RECT 32100.0 127950.0 30900.0 129150.0 ; - RECT 34500.0 127950.0 33300.0 129150.0 ; - RECT 29700.0 137850.0 28500.0 139050.0 ; - RECT 29700.0 127950.0 28500.0 129150.0 ; - RECT 33900.0 132600.0 32700.0 133800.0 ; - RECT 33900.0 132600.0 32700.0 133800.0 ; - RECT 31350.0 132750.0 30450.0 133650.0 ; - RECT 36300.0 139950.0 26700.0 140850.0 ; - RECT 36300.0 126150.0 26700.0 127050.0 ; - RECT 29700.0 142350.0 28500.0 140400.0 ; - RECT 29700.0 154200.0 28500.0 152250.0 ; - RECT 34500.0 152850.0 33300.0 154650.0 ; - RECT 34500.0 143550.0 33300.0 139950.0 ; - RECT 31800.0 152850.0 30900.0 143550.0 ; - RECT 34500.0 143550.0 33300.0 142350.0 ; - RECT 32100.0 143550.0 30900.0 142350.0 ; - RECT 32100.0 143550.0 30900.0 142350.0 ; - RECT 34500.0 143550.0 33300.0 142350.0 ; - RECT 34500.0 152850.0 33300.0 151650.0 ; - RECT 32100.0 152850.0 30900.0 151650.0 ; - RECT 32100.0 152850.0 30900.0 151650.0 ; - RECT 34500.0 152850.0 33300.0 151650.0 ; - RECT 29700.0 142950.0 28500.0 141750.0 ; - RECT 29700.0 152850.0 28500.0 151650.0 ; - RECT 33900.0 148200.0 32700.0 147000.0 ; - RECT 33900.0 148200.0 32700.0 147000.0 ; - RECT 31350.0 148050.0 30450.0 147150.0 ; - RECT 36300.0 140850.0 26700.0 139950.0 ; - RECT 36300.0 154650.0 26700.0 153750.0 ; - RECT 48900.0 100950.0 47700.0 98550.0 ; - RECT 48900.0 109650.0 47700.0 113250.0 ; - RECT 44100.0 109650.0 42900.0 113250.0 ; - RECT 41700.0 110850.0 40500.0 112800.0 ; - RECT 41700.0 99000.0 40500.0 100950.0 ; - RECT 48900.0 109650.0 47700.0 110850.0 ; - RECT 46500.0 109650.0 45300.0 110850.0 ; - RECT 46500.0 109650.0 45300.0 110850.0 ; - RECT 48900.0 109650.0 47700.0 110850.0 ; - RECT 46500.0 109650.0 45300.0 110850.0 ; - RECT 44100.0 109650.0 42900.0 110850.0 ; - RECT 44100.0 109650.0 42900.0 110850.0 ; - RECT 46500.0 109650.0 45300.0 110850.0 ; - RECT 48900.0 100950.0 47700.0 102150.0 ; - RECT 46500.0 100950.0 45300.0 102150.0 ; - RECT 46500.0 100950.0 45300.0 102150.0 ; - RECT 48900.0 100950.0 47700.0 102150.0 ; - RECT 46500.0 100950.0 45300.0 102150.0 ; - RECT 44100.0 100950.0 42900.0 102150.0 ; - RECT 44100.0 100950.0 42900.0 102150.0 ; - RECT 46500.0 100950.0 45300.0 102150.0 ; - RECT 41700.0 110250.0 40500.0 111450.0 ; - RECT 41700.0 100350.0 40500.0 101550.0 ; - RECT 44100.0 103500.0 45300.0 104700.0 ; - RECT 47100.0 106200.0 48300.0 107400.0 ; - RECT 46500.0 109650.0 45300.0 110850.0 ; - RECT 44100.0 100950.0 42900.0 102150.0 ; - RECT 42900.0 106200.0 44100.0 107400.0 ; - RECT 48300.0 106200.0 47100.0 107400.0 ; - RECT 45300.0 103500.0 44100.0 104700.0 ; - RECT 44100.0 106200.0 42900.0 107400.0 ; - RECT 50700.0 112350.0 36300.0 113250.0 ; - RECT 50700.0 98550.0 36300.0 99450.0 ; - RECT 48900.0 124650.0 47700.0 127050.0 ; - RECT 48900.0 115950.0 47700.0 112350.0 ; - RECT 44100.0 115950.0 42900.0 112350.0 ; - RECT 41700.0 114750.0 40500.0 112800.0 ; - RECT 41700.0 126600.0 40500.0 124650.0 ; - RECT 48900.0 115950.0 47700.0 114750.0 ; - RECT 46500.0 115950.0 45300.0 114750.0 ; - RECT 46500.0 115950.0 45300.0 114750.0 ; - RECT 48900.0 115950.0 47700.0 114750.0 ; - RECT 46500.0 115950.0 45300.0 114750.0 ; - RECT 44100.0 115950.0 42900.0 114750.0 ; - RECT 44100.0 115950.0 42900.0 114750.0 ; - RECT 46500.0 115950.0 45300.0 114750.0 ; - RECT 48900.0 124650.0 47700.0 123450.0 ; - RECT 46500.0 124650.0 45300.0 123450.0 ; - RECT 46500.0 124650.0 45300.0 123450.0 ; - RECT 48900.0 124650.0 47700.0 123450.0 ; - RECT 46500.0 124650.0 45300.0 123450.0 ; - RECT 44100.0 124650.0 42900.0 123450.0 ; - RECT 44100.0 124650.0 42900.0 123450.0 ; - RECT 46500.0 124650.0 45300.0 123450.0 ; - RECT 41700.0 115350.0 40500.0 114150.0 ; - RECT 41700.0 125250.0 40500.0 124050.0 ; - RECT 44100.0 122100.0 45300.0 120900.0 ; - RECT 47100.0 119400.0 48300.0 118200.0 ; - RECT 46500.0 115950.0 45300.0 114750.0 ; - RECT 44100.0 124650.0 42900.0 123450.0 ; - RECT 42900.0 119400.0 44100.0 118200.0 ; - RECT 48300.0 119400.0 47100.0 118200.0 ; - RECT 45300.0 122100.0 44100.0 120900.0 ; - RECT 44100.0 119400.0 42900.0 118200.0 ; - RECT 50700.0 113250.0 36300.0 112350.0 ; - RECT 50700.0 127050.0 36300.0 126150.0 ; - RECT 48900.0 128550.0 47700.0 126150.0 ; - RECT 48900.0 137250.0 47700.0 140850.0 ; - RECT 44100.0 137250.0 42900.0 140850.0 ; - RECT 41700.0 138450.0 40500.0 140400.0 ; - RECT 41700.0 126600.0 40500.0 128550.0 ; - RECT 48900.0 137250.0 47700.0 138450.0 ; - RECT 46500.0 137250.0 45300.0 138450.0 ; - RECT 46500.0 137250.0 45300.0 138450.0 ; - RECT 48900.0 137250.0 47700.0 138450.0 ; - RECT 46500.0 137250.0 45300.0 138450.0 ; - RECT 44100.0 137250.0 42900.0 138450.0 ; - RECT 44100.0 137250.0 42900.0 138450.0 ; - RECT 46500.0 137250.0 45300.0 138450.0 ; - RECT 48900.0 128550.0 47700.0 129750.0 ; - RECT 46500.0 128550.0 45300.0 129750.0 ; - RECT 46500.0 128550.0 45300.0 129750.0 ; - RECT 48900.0 128550.0 47700.0 129750.0 ; - RECT 46500.0 128550.0 45300.0 129750.0 ; - RECT 44100.0 128550.0 42900.0 129750.0 ; - RECT 44100.0 128550.0 42900.0 129750.0 ; - RECT 46500.0 128550.0 45300.0 129750.0 ; - RECT 41700.0 137850.0 40500.0 139050.0 ; - RECT 41700.0 127950.0 40500.0 129150.0 ; - RECT 44100.0 131100.0 45300.0 132300.0 ; - RECT 47100.0 133800.0 48300.0 135000.0 ; - RECT 46500.0 137250.0 45300.0 138450.0 ; - RECT 44100.0 128550.0 42900.0 129750.0 ; - RECT 42900.0 133800.0 44100.0 135000.0 ; - RECT 48300.0 133800.0 47100.0 135000.0 ; - RECT 45300.0 131100.0 44100.0 132300.0 ; - RECT 44100.0 133800.0 42900.0 135000.0 ; - RECT 50700.0 139950.0 36300.0 140850.0 ; - RECT 50700.0 126150.0 36300.0 127050.0 ; - RECT 48900.0 152250.0 47700.0 154650.0 ; - RECT 48900.0 143550.0 47700.0 139950.0 ; - RECT 44100.0 143550.0 42900.0 139950.0 ; - RECT 41700.0 142350.0 40500.0 140400.0 ; - RECT 41700.0 154200.0 40500.0 152250.0 ; - RECT 48900.0 143550.0 47700.0 142350.0 ; - RECT 46500.0 143550.0 45300.0 142350.0 ; - RECT 46500.0 143550.0 45300.0 142350.0 ; - RECT 48900.0 143550.0 47700.0 142350.0 ; - RECT 46500.0 143550.0 45300.0 142350.0 ; - RECT 44100.0 143550.0 42900.0 142350.0 ; - RECT 44100.0 143550.0 42900.0 142350.0 ; - RECT 46500.0 143550.0 45300.0 142350.0 ; - RECT 48900.0 152250.0 47700.0 151050.0 ; - RECT 46500.0 152250.0 45300.0 151050.0 ; - RECT 46500.0 152250.0 45300.0 151050.0 ; - RECT 48900.0 152250.0 47700.0 151050.0 ; - RECT 46500.0 152250.0 45300.0 151050.0 ; - RECT 44100.0 152250.0 42900.0 151050.0 ; - RECT 44100.0 152250.0 42900.0 151050.0 ; - RECT 46500.0 152250.0 45300.0 151050.0 ; - RECT 41700.0 142950.0 40500.0 141750.0 ; - RECT 41700.0 152850.0 40500.0 151650.0 ; - RECT 44100.0 149700.0 45300.0 148500.0 ; - RECT 47100.0 147000.0 48300.0 145800.0 ; - RECT 46500.0 143550.0 45300.0 142350.0 ; - RECT 44100.0 152250.0 42900.0 151050.0 ; - RECT 42900.0 147000.0 44100.0 145800.0 ; - RECT 48300.0 147000.0 47100.0 145800.0 ; - RECT 45300.0 149700.0 44100.0 148500.0 ; - RECT 44100.0 147000.0 42900.0 145800.0 ; - RECT 50700.0 140850.0 36300.0 139950.0 ; - RECT 50700.0 154650.0 36300.0 153750.0 ; - RECT 61650.0 109500.0 62850.0 110700.0 ; - RECT 80250.0 105000.0 81450.0 106200.0 ; - RECT 58650.0 123300.0 59850.0 124500.0 ; - RECT 77250.0 119400.0 78450.0 120600.0 ; - RECT 80250.0 128100.0 81450.0 129300.0 ; - RECT 55650.0 128100.0 56850.0 129300.0 ; - RECT 77250.0 141900.0 78450.0 143100.0 ; - RECT 52650.0 141900.0 53850.0 143100.0 ; - RECT 61650.0 106200.0 62850.0 107400.0 ; - RECT 58650.0 103500.0 59850.0 104700.0 ; - RECT 55650.0 118200.0 56850.0 119400.0 ; - RECT 58650.0 120900.0 59850.0 122100.0 ; - RECT 61650.0 133800.0 62850.0 135000.0 ; - RECT 52650.0 131100.0 53850.0 132300.0 ; - RECT 55650.0 145800.0 56850.0 147000.0 ; - RECT 52650.0 148500.0 53850.0 149700.0 ; - RECT 30450.0 105150.0 26700.0 106050.0 ; - RECT 30450.0 119550.0 26700.0 120450.0 ; - RECT 30450.0 132750.0 26700.0 133650.0 ; - RECT 30450.0 147150.0 26700.0 148050.0 ; - RECT 81300.0 112350.0 26700.0 113250.0 ; - RECT 81300.0 139950.0 26700.0 140850.0 ; - RECT 81300.0 98550.0 26700.0 99450.0 ; - RECT 81300.0 126150.0 26700.0 127050.0 ; - RECT 81300.0 153750.0 26700.0 154650.0 ; - RECT 65250.0 160350.0 64350.0 161250.0 ; - RECT 65250.0 164850.0 64350.0 165750.0 ; - RECT 69450.0 160350.0 64800.0 161250.0 ; - RECT 65250.0 160800.0 64350.0 165300.0 ; - RECT 64800.0 164850.0 62250.0 165750.0 ; - RECT 80850.0 160350.0 72900.0 161250.0 ; - RECT 65250.0 174750.0 64350.0 175650.0 ; - RECT 65250.0 178650.0 64350.0 179550.0 ; - RECT 69450.0 174750.0 64800.0 175650.0 ; - RECT 65250.0 175200.0 64350.0 179100.0 ; - RECT 64800.0 178650.0 59250.0 179550.0 ; - RECT 77850.0 174750.0 72900.0 175650.0 ; - RECT 80850.0 183450.0 56250.0 184350.0 ; - RECT 77850.0 197250.0 53250.0 198150.0 ; - RECT 62250.0 161550.0 48300.0 162450.0 ; - RECT 59250.0 158850.0 45300.0 159750.0 ; - RECT 56250.0 173550.0 48300.0 174450.0 ; - RECT 59250.0 176250.0 45300.0 177150.0 ; - RECT 62250.0 189150.0 48300.0 190050.0 ; - RECT 53250.0 186450.0 45300.0 187350.0 ; - RECT 56250.0 201150.0 48300.0 202050.0 ; - RECT 53250.0 203850.0 45300.0 204750.0 ; - RECT 38850.0 161550.0 37950.0 162450.0 ; - RECT 38850.0 160350.0 37950.0 161250.0 ; - RECT 42900.0 161550.0 38400.0 162450.0 ; - RECT 38850.0 160800.0 37950.0 162000.0 ; - RECT 38400.0 160350.0 33900.0 161250.0 ; - RECT 38850.0 173550.0 37950.0 174450.0 ; - RECT 38850.0 174750.0 37950.0 175650.0 ; - RECT 42900.0 173550.0 38400.0 174450.0 ; - RECT 38850.0 174000.0 37950.0 175200.0 ; - RECT 38400.0 174750.0 33900.0 175650.0 ; - RECT 38850.0 189150.0 37950.0 190050.0 ; - RECT 38850.0 187950.0 37950.0 188850.0 ; - RECT 42900.0 189150.0 38400.0 190050.0 ; - RECT 38850.0 188400.0 37950.0 189600.0 ; - RECT 38400.0 187950.0 33900.0 188850.0 ; - RECT 38850.0 201150.0 37950.0 202050.0 ; - RECT 38850.0 202350.0 37950.0 203250.0 ; - RECT 42900.0 201150.0 38400.0 202050.0 ; - RECT 38850.0 201600.0 37950.0 202800.0 ; - RECT 38400.0 202350.0 33900.0 203250.0 ; - RECT 68700.0 166050.0 67500.0 168000.0 ; - RECT 68700.0 154200.0 67500.0 156150.0 ; - RECT 73500.0 155550.0 72300.0 153750.0 ; - RECT 73500.0 164850.0 72300.0 168450.0 ; - RECT 70800.0 155550.0 69900.0 164850.0 ; - RECT 73500.0 164850.0 72300.0 166050.0 ; - RECT 71100.0 164850.0 69900.0 166050.0 ; - RECT 71100.0 164850.0 69900.0 166050.0 ; - RECT 73500.0 164850.0 72300.0 166050.0 ; - RECT 73500.0 155550.0 72300.0 156750.0 ; - RECT 71100.0 155550.0 69900.0 156750.0 ; - RECT 71100.0 155550.0 69900.0 156750.0 ; - RECT 73500.0 155550.0 72300.0 156750.0 ; - RECT 68700.0 165450.0 67500.0 166650.0 ; - RECT 68700.0 155550.0 67500.0 156750.0 ; - RECT 72900.0 160200.0 71700.0 161400.0 ; - RECT 72900.0 160200.0 71700.0 161400.0 ; - RECT 70350.0 160350.0 69450.0 161250.0 ; - RECT 75300.0 167550.0 65700.0 168450.0 ; - RECT 75300.0 153750.0 65700.0 154650.0 ; - RECT 68700.0 169950.0 67500.0 168000.0 ; - RECT 68700.0 181800.0 67500.0 179850.0 ; - RECT 73500.0 180450.0 72300.0 182250.0 ; - RECT 73500.0 171150.0 72300.0 167550.0 ; - RECT 70800.0 180450.0 69900.0 171150.0 ; - RECT 73500.0 171150.0 72300.0 169950.0 ; - RECT 71100.0 171150.0 69900.0 169950.0 ; - RECT 71100.0 171150.0 69900.0 169950.0 ; - RECT 73500.0 171150.0 72300.0 169950.0 ; - RECT 73500.0 180450.0 72300.0 179250.0 ; - RECT 71100.0 180450.0 69900.0 179250.0 ; - RECT 71100.0 180450.0 69900.0 179250.0 ; - RECT 73500.0 180450.0 72300.0 179250.0 ; - RECT 68700.0 170550.0 67500.0 169350.0 ; - RECT 68700.0 180450.0 67500.0 179250.0 ; - RECT 72900.0 175800.0 71700.0 174600.0 ; - RECT 72900.0 175800.0 71700.0 174600.0 ; - RECT 70350.0 175650.0 69450.0 174750.0 ; - RECT 75300.0 168450.0 65700.0 167550.0 ; - RECT 75300.0 182250.0 65700.0 181350.0 ; - RECT 29700.0 166050.0 28500.0 168000.0 ; - RECT 29700.0 154200.0 28500.0 156150.0 ; - RECT 34500.0 155550.0 33300.0 153750.0 ; - RECT 34500.0 164850.0 33300.0 168450.0 ; - RECT 31800.0 155550.0 30900.0 164850.0 ; - RECT 34500.0 164850.0 33300.0 166050.0 ; - RECT 32100.0 164850.0 30900.0 166050.0 ; - RECT 32100.0 164850.0 30900.0 166050.0 ; - RECT 34500.0 164850.0 33300.0 166050.0 ; - RECT 34500.0 155550.0 33300.0 156750.0 ; - RECT 32100.0 155550.0 30900.0 156750.0 ; - RECT 32100.0 155550.0 30900.0 156750.0 ; - RECT 34500.0 155550.0 33300.0 156750.0 ; - RECT 29700.0 165450.0 28500.0 166650.0 ; - RECT 29700.0 155550.0 28500.0 156750.0 ; - RECT 33900.0 160200.0 32700.0 161400.0 ; - RECT 33900.0 160200.0 32700.0 161400.0 ; - RECT 31350.0 160350.0 30450.0 161250.0 ; - RECT 36300.0 167550.0 26700.0 168450.0 ; - RECT 36300.0 153750.0 26700.0 154650.0 ; - RECT 29700.0 169950.0 28500.0 168000.0 ; - RECT 29700.0 181800.0 28500.0 179850.0 ; - RECT 34500.0 180450.0 33300.0 182250.0 ; - RECT 34500.0 171150.0 33300.0 167550.0 ; - RECT 31800.0 180450.0 30900.0 171150.0 ; - RECT 34500.0 171150.0 33300.0 169950.0 ; - RECT 32100.0 171150.0 30900.0 169950.0 ; - RECT 32100.0 171150.0 30900.0 169950.0 ; - RECT 34500.0 171150.0 33300.0 169950.0 ; - RECT 34500.0 180450.0 33300.0 179250.0 ; - RECT 32100.0 180450.0 30900.0 179250.0 ; - RECT 32100.0 180450.0 30900.0 179250.0 ; - RECT 34500.0 180450.0 33300.0 179250.0 ; - RECT 29700.0 170550.0 28500.0 169350.0 ; - RECT 29700.0 180450.0 28500.0 179250.0 ; - RECT 33900.0 175800.0 32700.0 174600.0 ; - RECT 33900.0 175800.0 32700.0 174600.0 ; - RECT 31350.0 175650.0 30450.0 174750.0 ; - RECT 36300.0 168450.0 26700.0 167550.0 ; - RECT 36300.0 182250.0 26700.0 181350.0 ; - RECT 29700.0 193650.0 28500.0 195600.0 ; - RECT 29700.0 181800.0 28500.0 183750.0 ; - RECT 34500.0 183150.0 33300.0 181350.0 ; - RECT 34500.0 192450.0 33300.0 196050.0 ; - RECT 31800.0 183150.0 30900.0 192450.0 ; - RECT 34500.0 192450.0 33300.0 193650.0 ; - RECT 32100.0 192450.0 30900.0 193650.0 ; - RECT 32100.0 192450.0 30900.0 193650.0 ; - RECT 34500.0 192450.0 33300.0 193650.0 ; - RECT 34500.0 183150.0 33300.0 184350.0 ; - RECT 32100.0 183150.0 30900.0 184350.0 ; - RECT 32100.0 183150.0 30900.0 184350.0 ; - RECT 34500.0 183150.0 33300.0 184350.0 ; - RECT 29700.0 193050.0 28500.0 194250.0 ; - RECT 29700.0 183150.0 28500.0 184350.0 ; - RECT 33900.0 187800.0 32700.0 189000.0 ; - RECT 33900.0 187800.0 32700.0 189000.0 ; - RECT 31350.0 187950.0 30450.0 188850.0 ; - RECT 36300.0 195150.0 26700.0 196050.0 ; - RECT 36300.0 181350.0 26700.0 182250.0 ; - RECT 29700.0 197550.0 28500.0 195600.0 ; - RECT 29700.0 209400.0 28500.0 207450.0 ; - RECT 34500.0 208050.0 33300.0 209850.0 ; - RECT 34500.0 198750.0 33300.0 195150.0 ; - RECT 31800.0 208050.0 30900.0 198750.0 ; - RECT 34500.0 198750.0 33300.0 197550.0 ; - RECT 32100.0 198750.0 30900.0 197550.0 ; - RECT 32100.0 198750.0 30900.0 197550.0 ; - RECT 34500.0 198750.0 33300.0 197550.0 ; - RECT 34500.0 208050.0 33300.0 206850.0 ; - RECT 32100.0 208050.0 30900.0 206850.0 ; - RECT 32100.0 208050.0 30900.0 206850.0 ; - RECT 34500.0 208050.0 33300.0 206850.0 ; - RECT 29700.0 198150.0 28500.0 196950.0 ; - RECT 29700.0 208050.0 28500.0 206850.0 ; - RECT 33900.0 203400.0 32700.0 202200.0 ; - RECT 33900.0 203400.0 32700.0 202200.0 ; - RECT 31350.0 203250.0 30450.0 202350.0 ; - RECT 36300.0 196050.0 26700.0 195150.0 ; - RECT 36300.0 209850.0 26700.0 208950.0 ; - RECT 48900.0 156150.0 47700.0 153750.0 ; - RECT 48900.0 164850.0 47700.0 168450.0 ; - RECT 44100.0 164850.0 42900.0 168450.0 ; - RECT 41700.0 166050.0 40500.0 168000.0 ; - RECT 41700.0 154200.0 40500.0 156150.0 ; - RECT 48900.0 164850.0 47700.0 166050.0 ; - RECT 46500.0 164850.0 45300.0 166050.0 ; - RECT 46500.0 164850.0 45300.0 166050.0 ; - RECT 48900.0 164850.0 47700.0 166050.0 ; - RECT 46500.0 164850.0 45300.0 166050.0 ; - RECT 44100.0 164850.0 42900.0 166050.0 ; - RECT 44100.0 164850.0 42900.0 166050.0 ; - RECT 46500.0 164850.0 45300.0 166050.0 ; - RECT 48900.0 156150.0 47700.0 157350.0 ; - RECT 46500.0 156150.0 45300.0 157350.0 ; - RECT 46500.0 156150.0 45300.0 157350.0 ; - RECT 48900.0 156150.0 47700.0 157350.0 ; - RECT 46500.0 156150.0 45300.0 157350.0 ; - RECT 44100.0 156150.0 42900.0 157350.0 ; - RECT 44100.0 156150.0 42900.0 157350.0 ; - RECT 46500.0 156150.0 45300.0 157350.0 ; - RECT 41700.0 165450.0 40500.0 166650.0 ; - RECT 41700.0 155550.0 40500.0 156750.0 ; - RECT 44100.0 158700.0 45300.0 159900.0 ; - RECT 47100.0 161400.0 48300.0 162600.0 ; - RECT 46500.0 164850.0 45300.0 166050.0 ; - RECT 44100.0 156150.0 42900.0 157350.0 ; - RECT 42900.0 161400.0 44100.0 162600.0 ; - RECT 48300.0 161400.0 47100.0 162600.0 ; - RECT 45300.0 158700.0 44100.0 159900.0 ; - RECT 44100.0 161400.0 42900.0 162600.0 ; - RECT 50700.0 167550.0 36300.0 168450.0 ; - RECT 50700.0 153750.0 36300.0 154650.0 ; - RECT 48900.0 179850.0 47700.0 182250.0 ; - RECT 48900.0 171150.0 47700.0 167550.0 ; - RECT 44100.0 171150.0 42900.0 167550.0 ; - RECT 41700.0 169950.0 40500.0 168000.0 ; - RECT 41700.0 181800.0 40500.0 179850.0 ; - RECT 48900.0 171150.0 47700.0 169950.0 ; - RECT 46500.0 171150.0 45300.0 169950.0 ; - RECT 46500.0 171150.0 45300.0 169950.0 ; - RECT 48900.0 171150.0 47700.0 169950.0 ; - RECT 46500.0 171150.0 45300.0 169950.0 ; - RECT 44100.0 171150.0 42900.0 169950.0 ; - RECT 44100.0 171150.0 42900.0 169950.0 ; - RECT 46500.0 171150.0 45300.0 169950.0 ; - RECT 48900.0 179850.0 47700.0 178650.0 ; - RECT 46500.0 179850.0 45300.0 178650.0 ; - RECT 46500.0 179850.0 45300.0 178650.0 ; - RECT 48900.0 179850.0 47700.0 178650.0 ; - RECT 46500.0 179850.0 45300.0 178650.0 ; - RECT 44100.0 179850.0 42900.0 178650.0 ; - RECT 44100.0 179850.0 42900.0 178650.0 ; - RECT 46500.0 179850.0 45300.0 178650.0 ; - RECT 41700.0 170550.0 40500.0 169350.0 ; - RECT 41700.0 180450.0 40500.0 179250.0 ; - RECT 44100.0 177300.0 45300.0 176100.0 ; - RECT 47100.0 174600.0 48300.0 173400.0 ; - RECT 46500.0 171150.0 45300.0 169950.0 ; - RECT 44100.0 179850.0 42900.0 178650.0 ; - RECT 42900.0 174600.0 44100.0 173400.0 ; - RECT 48300.0 174600.0 47100.0 173400.0 ; - RECT 45300.0 177300.0 44100.0 176100.0 ; - RECT 44100.0 174600.0 42900.0 173400.0 ; - RECT 50700.0 168450.0 36300.0 167550.0 ; - RECT 50700.0 182250.0 36300.0 181350.0 ; - RECT 48900.0 183750.0 47700.0 181350.0 ; - RECT 48900.0 192450.0 47700.0 196050.0 ; - RECT 44100.0 192450.0 42900.0 196050.0 ; - RECT 41700.0 193650.0 40500.0 195600.0 ; - RECT 41700.0 181800.0 40500.0 183750.0 ; - RECT 48900.0 192450.0 47700.0 193650.0 ; - RECT 46500.0 192450.0 45300.0 193650.0 ; - RECT 46500.0 192450.0 45300.0 193650.0 ; - RECT 48900.0 192450.0 47700.0 193650.0 ; - RECT 46500.0 192450.0 45300.0 193650.0 ; - RECT 44100.0 192450.0 42900.0 193650.0 ; - RECT 44100.0 192450.0 42900.0 193650.0 ; - RECT 46500.0 192450.0 45300.0 193650.0 ; - RECT 48900.0 183750.0 47700.0 184950.0 ; - RECT 46500.0 183750.0 45300.0 184950.0 ; - RECT 46500.0 183750.0 45300.0 184950.0 ; - RECT 48900.0 183750.0 47700.0 184950.0 ; - RECT 46500.0 183750.0 45300.0 184950.0 ; - RECT 44100.0 183750.0 42900.0 184950.0 ; - RECT 44100.0 183750.0 42900.0 184950.0 ; - RECT 46500.0 183750.0 45300.0 184950.0 ; - RECT 41700.0 193050.0 40500.0 194250.0 ; - RECT 41700.0 183150.0 40500.0 184350.0 ; - RECT 44100.0 186300.0 45300.0 187500.0 ; - RECT 47100.0 189000.0 48300.0 190200.0 ; - RECT 46500.0 192450.0 45300.0 193650.0 ; - RECT 44100.0 183750.0 42900.0 184950.0 ; - RECT 42900.0 189000.0 44100.0 190200.0 ; - RECT 48300.0 189000.0 47100.0 190200.0 ; - RECT 45300.0 186300.0 44100.0 187500.0 ; - RECT 44100.0 189000.0 42900.0 190200.0 ; - RECT 50700.0 195150.0 36300.0 196050.0 ; - RECT 50700.0 181350.0 36300.0 182250.0 ; - RECT 48900.0 207450.0 47700.0 209850.0 ; - RECT 48900.0 198750.0 47700.0 195150.0 ; - RECT 44100.0 198750.0 42900.0 195150.0 ; - RECT 41700.0 197550.0 40500.0 195600.0 ; - RECT 41700.0 209400.0 40500.0 207450.0 ; - RECT 48900.0 198750.0 47700.0 197550.0 ; - RECT 46500.0 198750.0 45300.0 197550.0 ; - RECT 46500.0 198750.0 45300.0 197550.0 ; - RECT 48900.0 198750.0 47700.0 197550.0 ; - RECT 46500.0 198750.0 45300.0 197550.0 ; - RECT 44100.0 198750.0 42900.0 197550.0 ; - RECT 44100.0 198750.0 42900.0 197550.0 ; - RECT 46500.0 198750.0 45300.0 197550.0 ; - RECT 48900.0 207450.0 47700.0 206250.0 ; - RECT 46500.0 207450.0 45300.0 206250.0 ; - RECT 46500.0 207450.0 45300.0 206250.0 ; - RECT 48900.0 207450.0 47700.0 206250.0 ; - RECT 46500.0 207450.0 45300.0 206250.0 ; - RECT 44100.0 207450.0 42900.0 206250.0 ; - RECT 44100.0 207450.0 42900.0 206250.0 ; - RECT 46500.0 207450.0 45300.0 206250.0 ; - RECT 41700.0 198150.0 40500.0 196950.0 ; - RECT 41700.0 208050.0 40500.0 206850.0 ; - RECT 44100.0 204900.0 45300.0 203700.0 ; - RECT 47100.0 202200.0 48300.0 201000.0 ; - RECT 46500.0 198750.0 45300.0 197550.0 ; - RECT 44100.0 207450.0 42900.0 206250.0 ; - RECT 42900.0 202200.0 44100.0 201000.0 ; - RECT 48300.0 202200.0 47100.0 201000.0 ; - RECT 45300.0 204900.0 44100.0 203700.0 ; - RECT 44100.0 202200.0 42900.0 201000.0 ; - RECT 50700.0 196050.0 36300.0 195150.0 ; - RECT 50700.0 209850.0 36300.0 208950.0 ; - RECT 61650.0 164700.0 62850.0 165900.0 ; - RECT 80250.0 160200.0 81450.0 161400.0 ; - RECT 58650.0 178500.0 59850.0 179700.0 ; - RECT 77250.0 174600.0 78450.0 175800.0 ; - RECT 80250.0 183300.0 81450.0 184500.0 ; - RECT 55650.0 183300.0 56850.0 184500.0 ; - RECT 77250.0 197100.0 78450.0 198300.0 ; - RECT 52650.0 197100.0 53850.0 198300.0 ; - RECT 61650.0 161400.0 62850.0 162600.0 ; - RECT 58650.0 158700.0 59850.0 159900.0 ; - RECT 55650.0 173400.0 56850.0 174600.0 ; - RECT 58650.0 176100.0 59850.0 177300.0 ; - RECT 61650.0 189000.0 62850.0 190200.0 ; - RECT 52650.0 186300.0 53850.0 187500.0 ; - RECT 55650.0 201000.0 56850.0 202200.0 ; - RECT 52650.0 203700.0 53850.0 204900.0 ; - RECT 30450.0 160350.0 26700.0 161250.0 ; - RECT 30450.0 174750.0 26700.0 175650.0 ; - RECT 30450.0 187950.0 26700.0 188850.0 ; - RECT 30450.0 202350.0 26700.0 203250.0 ; - RECT 81300.0 167550.0 26700.0 168450.0 ; - RECT 81300.0 195150.0 26700.0 196050.0 ; - RECT 81300.0 153750.0 26700.0 154650.0 ; - RECT 81300.0 181350.0 26700.0 182250.0 ; - RECT 81300.0 208950.0 26700.0 209850.0 ; - RECT 28500.0 211350.0 29700.0 208950.0 ; - RECT 28500.0 220050.0 29700.0 223650.0 ; - RECT 33300.0 220050.0 34500.0 223650.0 ; - RECT 35700.0 221250.0 36900.0 223200.0 ; - RECT 35700.0 209400.0 36900.0 211350.0 ; - RECT 28500.0 220050.0 29700.0 221250.0 ; - RECT 30900.0 220050.0 32100.0 221250.0 ; - RECT 30900.0 220050.0 32100.0 221250.0 ; - RECT 28500.0 220050.0 29700.0 221250.0 ; - RECT 30900.0 220050.0 32100.0 221250.0 ; - RECT 33300.0 220050.0 34500.0 221250.0 ; - RECT 33300.0 220050.0 34500.0 221250.0 ; - RECT 30900.0 220050.0 32100.0 221250.0 ; - RECT 28500.0 211350.0 29700.0 212550.0 ; - RECT 30900.0 211350.0 32100.0 212550.0 ; - RECT 30900.0 211350.0 32100.0 212550.0 ; - RECT 28500.0 211350.0 29700.0 212550.0 ; - RECT 30900.0 211350.0 32100.0 212550.0 ; - RECT 33300.0 211350.0 34500.0 212550.0 ; - RECT 33300.0 211350.0 34500.0 212550.0 ; - RECT 30900.0 211350.0 32100.0 212550.0 ; - RECT 35700.0 220650.0 36900.0 221850.0 ; - RECT 35700.0 210750.0 36900.0 211950.0 ; - RECT 33300.0 213900.0 32100.0 215100.0 ; - RECT 30300.0 216600.0 29100.0 217800.0 ; - RECT 30900.0 220050.0 32100.0 221250.0 ; - RECT 33300.0 211350.0 34500.0 212550.0 ; - RECT 34500.0 216600.0 33300.0 217800.0 ; - RECT 29100.0 216600.0 30300.0 217800.0 ; - RECT 32100.0 213900.0 33300.0 215100.0 ; - RECT 33300.0 216600.0 34500.0 217800.0 ; - RECT 26700.0 222750.0 41100.0 223650.0 ; - RECT 26700.0 208950.0 41100.0 209850.0 ; - RECT 28500.0 235050.0 29700.0 237450.0 ; - RECT 28500.0 226350.0 29700.0 222750.0 ; - RECT 33300.0 226350.0 34500.0 222750.0 ; - RECT 35700.0 225150.0 36900.0 223200.0 ; - RECT 35700.0 237000.0 36900.0 235050.0 ; - RECT 28500.0 226350.0 29700.0 225150.0 ; - RECT 30900.0 226350.0 32100.0 225150.0 ; - RECT 30900.0 226350.0 32100.0 225150.0 ; - RECT 28500.0 226350.0 29700.0 225150.0 ; - RECT 30900.0 226350.0 32100.0 225150.0 ; - RECT 33300.0 226350.0 34500.0 225150.0 ; - RECT 33300.0 226350.0 34500.0 225150.0 ; - RECT 30900.0 226350.0 32100.0 225150.0 ; - RECT 28500.0 235050.0 29700.0 233850.0 ; - RECT 30900.0 235050.0 32100.0 233850.0 ; - RECT 30900.0 235050.0 32100.0 233850.0 ; - RECT 28500.0 235050.0 29700.0 233850.0 ; - RECT 30900.0 235050.0 32100.0 233850.0 ; - RECT 33300.0 235050.0 34500.0 233850.0 ; - RECT 33300.0 235050.0 34500.0 233850.0 ; - RECT 30900.0 235050.0 32100.0 233850.0 ; - RECT 35700.0 225750.0 36900.0 224550.0 ; - RECT 35700.0 235650.0 36900.0 234450.0 ; - RECT 33300.0 232500.0 32100.0 231300.0 ; - RECT 30300.0 229800.0 29100.0 228600.0 ; - RECT 30900.0 226350.0 32100.0 225150.0 ; - RECT 33300.0 235050.0 34500.0 233850.0 ; - RECT 34500.0 229800.0 33300.0 228600.0 ; - RECT 29100.0 229800.0 30300.0 228600.0 ; - RECT 32100.0 232500.0 33300.0 231300.0 ; - RECT 33300.0 229800.0 34500.0 228600.0 ; - RECT 26700.0 223650.0 41100.0 222750.0 ; - RECT 26700.0 237450.0 41100.0 236550.0 ; - RECT 28500.0 238950.0 29700.0 236550.0 ; - RECT 28500.0 247650.0 29700.0 251250.0 ; - RECT 33300.0 247650.0 34500.0 251250.0 ; - RECT 35700.0 248850.0 36900.0 250800.0 ; - RECT 35700.0 237000.0 36900.0 238950.0 ; - RECT 28500.0 247650.0 29700.0 248850.0 ; - RECT 30900.0 247650.0 32100.0 248850.0 ; - RECT 30900.0 247650.0 32100.0 248850.0 ; - RECT 28500.0 247650.0 29700.0 248850.0 ; - RECT 30900.0 247650.0 32100.0 248850.0 ; - RECT 33300.0 247650.0 34500.0 248850.0 ; - RECT 33300.0 247650.0 34500.0 248850.0 ; - RECT 30900.0 247650.0 32100.0 248850.0 ; - RECT 28500.0 238950.0 29700.0 240150.0 ; - RECT 30900.0 238950.0 32100.0 240150.0 ; - RECT 30900.0 238950.0 32100.0 240150.0 ; - RECT 28500.0 238950.0 29700.0 240150.0 ; - RECT 30900.0 238950.0 32100.0 240150.0 ; - RECT 33300.0 238950.0 34500.0 240150.0 ; - RECT 33300.0 238950.0 34500.0 240150.0 ; - RECT 30900.0 238950.0 32100.0 240150.0 ; - RECT 35700.0 248250.0 36900.0 249450.0 ; - RECT 35700.0 238350.0 36900.0 239550.0 ; - RECT 33300.0 241500.0 32100.0 242700.0 ; - RECT 30300.0 244200.0 29100.0 245400.0 ; - RECT 30900.0 247650.0 32100.0 248850.0 ; - RECT 33300.0 238950.0 34500.0 240150.0 ; - RECT 34500.0 244200.0 33300.0 245400.0 ; - RECT 29100.0 244200.0 30300.0 245400.0 ; - RECT 32100.0 241500.0 33300.0 242700.0 ; - RECT 33300.0 244200.0 34500.0 245400.0 ; - RECT 26700.0 250350.0 41100.0 251250.0 ; - RECT 26700.0 236550.0 41100.0 237450.0 ; - RECT 28500.0 262650.0 29700.0 265050.0 ; - RECT 28500.0 253950.0 29700.0 250350.0 ; - RECT 33300.0 253950.0 34500.0 250350.0 ; - RECT 35700.0 252750.0 36900.0 250800.0 ; - RECT 35700.0 264600.0 36900.0 262650.0 ; - RECT 28500.0 253950.0 29700.0 252750.0 ; - RECT 30900.0 253950.0 32100.0 252750.0 ; - RECT 30900.0 253950.0 32100.0 252750.0 ; - RECT 28500.0 253950.0 29700.0 252750.0 ; - RECT 30900.0 253950.0 32100.0 252750.0 ; - RECT 33300.0 253950.0 34500.0 252750.0 ; - RECT 33300.0 253950.0 34500.0 252750.0 ; - RECT 30900.0 253950.0 32100.0 252750.0 ; - RECT 28500.0 262650.0 29700.0 261450.0 ; - RECT 30900.0 262650.0 32100.0 261450.0 ; - RECT 30900.0 262650.0 32100.0 261450.0 ; - RECT 28500.0 262650.0 29700.0 261450.0 ; - RECT 30900.0 262650.0 32100.0 261450.0 ; - RECT 33300.0 262650.0 34500.0 261450.0 ; - RECT 33300.0 262650.0 34500.0 261450.0 ; - RECT 30900.0 262650.0 32100.0 261450.0 ; - RECT 35700.0 253350.0 36900.0 252150.0 ; - RECT 35700.0 263250.0 36900.0 262050.0 ; - RECT 33300.0 260100.0 32100.0 258900.0 ; - RECT 30300.0 257400.0 29100.0 256200.0 ; - RECT 30900.0 253950.0 32100.0 252750.0 ; - RECT 33300.0 262650.0 34500.0 261450.0 ; - RECT 34500.0 257400.0 33300.0 256200.0 ; - RECT 29100.0 257400.0 30300.0 256200.0 ; - RECT 32100.0 260100.0 33300.0 258900.0 ; - RECT 33300.0 257400.0 34500.0 256200.0 ; - RECT 26700.0 251250.0 41100.0 250350.0 ; - RECT 26700.0 265050.0 41100.0 264150.0 ; - RECT 28500.0 266550.0 29700.0 264150.0 ; - RECT 28500.0 275250.0 29700.0 278850.0 ; - RECT 33300.0 275250.0 34500.0 278850.0 ; - RECT 35700.0 276450.0 36900.0 278400.0 ; - RECT 35700.0 264600.0 36900.0 266550.0 ; - RECT 28500.0 275250.0 29700.0 276450.0 ; - RECT 30900.0 275250.0 32100.0 276450.0 ; - RECT 30900.0 275250.0 32100.0 276450.0 ; - RECT 28500.0 275250.0 29700.0 276450.0 ; - RECT 30900.0 275250.0 32100.0 276450.0 ; - RECT 33300.0 275250.0 34500.0 276450.0 ; - RECT 33300.0 275250.0 34500.0 276450.0 ; - RECT 30900.0 275250.0 32100.0 276450.0 ; - RECT 28500.0 266550.0 29700.0 267750.0 ; - RECT 30900.0 266550.0 32100.0 267750.0 ; - RECT 30900.0 266550.0 32100.0 267750.0 ; - RECT 28500.0 266550.0 29700.0 267750.0 ; - RECT 30900.0 266550.0 32100.0 267750.0 ; - RECT 33300.0 266550.0 34500.0 267750.0 ; - RECT 33300.0 266550.0 34500.0 267750.0 ; - RECT 30900.0 266550.0 32100.0 267750.0 ; - RECT 35700.0 275850.0 36900.0 277050.0 ; - RECT 35700.0 265950.0 36900.0 267150.0 ; - RECT 33300.0 269100.0 32100.0 270300.0 ; - RECT 30300.0 271800.0 29100.0 273000.0 ; - RECT 30900.0 275250.0 32100.0 276450.0 ; - RECT 33300.0 266550.0 34500.0 267750.0 ; - RECT 34500.0 271800.0 33300.0 273000.0 ; - RECT 29100.0 271800.0 30300.0 273000.0 ; - RECT 32100.0 269100.0 33300.0 270300.0 ; - RECT 33300.0 271800.0 34500.0 273000.0 ; - RECT 26700.0 277950.0 41100.0 278850.0 ; - RECT 26700.0 264150.0 41100.0 265050.0 ; - RECT 28500.0 290250.0 29700.0 292650.0 ; - RECT 28500.0 281550.0 29700.0 277950.0 ; - RECT 33300.0 281550.0 34500.0 277950.0 ; - RECT 35700.0 280350.0 36900.0 278400.0 ; - RECT 35700.0 292200.0 36900.0 290250.0 ; - RECT 28500.0 281550.0 29700.0 280350.0 ; - RECT 30900.0 281550.0 32100.0 280350.0 ; - RECT 30900.0 281550.0 32100.0 280350.0 ; - RECT 28500.0 281550.0 29700.0 280350.0 ; - RECT 30900.0 281550.0 32100.0 280350.0 ; - RECT 33300.0 281550.0 34500.0 280350.0 ; - RECT 33300.0 281550.0 34500.0 280350.0 ; - RECT 30900.0 281550.0 32100.0 280350.0 ; - RECT 28500.0 290250.0 29700.0 289050.0 ; - RECT 30900.0 290250.0 32100.0 289050.0 ; - RECT 30900.0 290250.0 32100.0 289050.0 ; - RECT 28500.0 290250.0 29700.0 289050.0 ; - RECT 30900.0 290250.0 32100.0 289050.0 ; - RECT 33300.0 290250.0 34500.0 289050.0 ; - RECT 33300.0 290250.0 34500.0 289050.0 ; - RECT 30900.0 290250.0 32100.0 289050.0 ; - RECT 35700.0 280950.0 36900.0 279750.0 ; - RECT 35700.0 290850.0 36900.0 289650.0 ; - RECT 33300.0 287700.0 32100.0 286500.0 ; - RECT 30300.0 285000.0 29100.0 283800.0 ; - RECT 30900.0 281550.0 32100.0 280350.0 ; - RECT 33300.0 290250.0 34500.0 289050.0 ; - RECT 34500.0 285000.0 33300.0 283800.0 ; - RECT 29100.0 285000.0 30300.0 283800.0 ; - RECT 32100.0 287700.0 33300.0 286500.0 ; - RECT 33300.0 285000.0 34500.0 283800.0 ; - RECT 26700.0 278850.0 41100.0 277950.0 ; - RECT 26700.0 292650.0 41100.0 291750.0 ; - RECT 28500.0 294150.0 29700.0 291750.0 ; - RECT 28500.0 302850.0 29700.0 306450.0 ; - RECT 33300.0 302850.0 34500.0 306450.0 ; - RECT 35700.0 304050.0 36900.0 306000.0 ; - RECT 35700.0 292200.0 36900.0 294150.0 ; - RECT 28500.0 302850.0 29700.0 304050.0 ; - RECT 30900.0 302850.0 32100.0 304050.0 ; - RECT 30900.0 302850.0 32100.0 304050.0 ; - RECT 28500.0 302850.0 29700.0 304050.0 ; - RECT 30900.0 302850.0 32100.0 304050.0 ; - RECT 33300.0 302850.0 34500.0 304050.0 ; - RECT 33300.0 302850.0 34500.0 304050.0 ; - RECT 30900.0 302850.0 32100.0 304050.0 ; - RECT 28500.0 294150.0 29700.0 295350.0 ; - RECT 30900.0 294150.0 32100.0 295350.0 ; - RECT 30900.0 294150.0 32100.0 295350.0 ; - RECT 28500.0 294150.0 29700.0 295350.0 ; - RECT 30900.0 294150.0 32100.0 295350.0 ; - RECT 33300.0 294150.0 34500.0 295350.0 ; - RECT 33300.0 294150.0 34500.0 295350.0 ; - RECT 30900.0 294150.0 32100.0 295350.0 ; - RECT 35700.0 303450.0 36900.0 304650.0 ; - RECT 35700.0 293550.0 36900.0 294750.0 ; - RECT 33300.0 296700.0 32100.0 297900.0 ; - RECT 30300.0 299400.0 29100.0 300600.0 ; - RECT 30900.0 302850.0 32100.0 304050.0 ; - RECT 33300.0 294150.0 34500.0 295350.0 ; - RECT 34500.0 299400.0 33300.0 300600.0 ; - RECT 29100.0 299400.0 30300.0 300600.0 ; - RECT 32100.0 296700.0 33300.0 297900.0 ; - RECT 33300.0 299400.0 34500.0 300600.0 ; - RECT 26700.0 305550.0 41100.0 306450.0 ; - RECT 26700.0 291750.0 41100.0 292650.0 ; - RECT 28500.0 317850.0 29700.0 320250.0 ; - RECT 28500.0 309150.0 29700.0 305550.0 ; - RECT 33300.0 309150.0 34500.0 305550.0 ; - RECT 35700.0 307950.0 36900.0 306000.0 ; - RECT 35700.0 319800.0 36900.0 317850.0 ; - RECT 28500.0 309150.0 29700.0 307950.0 ; - RECT 30900.0 309150.0 32100.0 307950.0 ; - RECT 30900.0 309150.0 32100.0 307950.0 ; - RECT 28500.0 309150.0 29700.0 307950.0 ; - RECT 30900.0 309150.0 32100.0 307950.0 ; - RECT 33300.0 309150.0 34500.0 307950.0 ; - RECT 33300.0 309150.0 34500.0 307950.0 ; - RECT 30900.0 309150.0 32100.0 307950.0 ; - RECT 28500.0 317850.0 29700.0 316650.0 ; - RECT 30900.0 317850.0 32100.0 316650.0 ; - RECT 30900.0 317850.0 32100.0 316650.0 ; - RECT 28500.0 317850.0 29700.0 316650.0 ; - RECT 30900.0 317850.0 32100.0 316650.0 ; - RECT 33300.0 317850.0 34500.0 316650.0 ; - RECT 33300.0 317850.0 34500.0 316650.0 ; - RECT 30900.0 317850.0 32100.0 316650.0 ; - RECT 35700.0 308550.0 36900.0 307350.0 ; - RECT 35700.0 318450.0 36900.0 317250.0 ; - RECT 33300.0 315300.0 32100.0 314100.0 ; - RECT 30300.0 312600.0 29100.0 311400.0 ; - RECT 30900.0 309150.0 32100.0 307950.0 ; - RECT 33300.0 317850.0 34500.0 316650.0 ; - RECT 34500.0 312600.0 33300.0 311400.0 ; - RECT 29100.0 312600.0 30300.0 311400.0 ; - RECT 32100.0 315300.0 33300.0 314100.0 ; - RECT 33300.0 312600.0 34500.0 311400.0 ; - RECT 26700.0 306450.0 41100.0 305550.0 ; - RECT 26700.0 320250.0 41100.0 319350.0 ; - RECT 28500.0 321750.0 29700.0 319350.0 ; - RECT 28500.0 330450.0 29700.0 334050.0 ; - RECT 33300.0 330450.0 34500.0 334050.0 ; - RECT 35700.0 331650.0 36900.0 333600.0 ; - RECT 35700.0 319800.0 36900.0 321750.0 ; - RECT 28500.0 330450.0 29700.0 331650.0 ; - RECT 30900.0 330450.0 32100.0 331650.0 ; - RECT 30900.0 330450.0 32100.0 331650.0 ; - RECT 28500.0 330450.0 29700.0 331650.0 ; - RECT 30900.0 330450.0 32100.0 331650.0 ; - RECT 33300.0 330450.0 34500.0 331650.0 ; - RECT 33300.0 330450.0 34500.0 331650.0 ; - RECT 30900.0 330450.0 32100.0 331650.0 ; - RECT 28500.0 321750.0 29700.0 322950.0 ; - RECT 30900.0 321750.0 32100.0 322950.0 ; - RECT 30900.0 321750.0 32100.0 322950.0 ; - RECT 28500.0 321750.0 29700.0 322950.0 ; - RECT 30900.0 321750.0 32100.0 322950.0 ; - RECT 33300.0 321750.0 34500.0 322950.0 ; - RECT 33300.0 321750.0 34500.0 322950.0 ; - RECT 30900.0 321750.0 32100.0 322950.0 ; - RECT 35700.0 331050.0 36900.0 332250.0 ; - RECT 35700.0 321150.0 36900.0 322350.0 ; - RECT 33300.0 324300.0 32100.0 325500.0 ; - RECT 30300.0 327000.0 29100.0 328200.0 ; - RECT 30900.0 330450.0 32100.0 331650.0 ; - RECT 33300.0 321750.0 34500.0 322950.0 ; - RECT 34500.0 327000.0 33300.0 328200.0 ; - RECT 29100.0 327000.0 30300.0 328200.0 ; - RECT 32100.0 324300.0 33300.0 325500.0 ; - RECT 33300.0 327000.0 34500.0 328200.0 ; - RECT 26700.0 333150.0 41100.0 334050.0 ; - RECT 26700.0 319350.0 41100.0 320250.0 ; - RECT 28500.0 345450.0 29700.0 347850.0 ; - RECT 28500.0 336750.0 29700.0 333150.0 ; - RECT 33300.0 336750.0 34500.0 333150.0 ; - RECT 35700.0 335550.0 36900.0 333600.0 ; - RECT 35700.0 347400.0 36900.0 345450.0 ; - RECT 28500.0 336750.0 29700.0 335550.0 ; - RECT 30900.0 336750.0 32100.0 335550.0 ; - RECT 30900.0 336750.0 32100.0 335550.0 ; - RECT 28500.0 336750.0 29700.0 335550.0 ; - RECT 30900.0 336750.0 32100.0 335550.0 ; - RECT 33300.0 336750.0 34500.0 335550.0 ; - RECT 33300.0 336750.0 34500.0 335550.0 ; - RECT 30900.0 336750.0 32100.0 335550.0 ; - RECT 28500.0 345450.0 29700.0 344250.0 ; - RECT 30900.0 345450.0 32100.0 344250.0 ; - RECT 30900.0 345450.0 32100.0 344250.0 ; - RECT 28500.0 345450.0 29700.0 344250.0 ; - RECT 30900.0 345450.0 32100.0 344250.0 ; - RECT 33300.0 345450.0 34500.0 344250.0 ; - RECT 33300.0 345450.0 34500.0 344250.0 ; - RECT 30900.0 345450.0 32100.0 344250.0 ; - RECT 35700.0 336150.0 36900.0 334950.0 ; - RECT 35700.0 346050.0 36900.0 344850.0 ; - RECT 33300.0 342900.0 32100.0 341700.0 ; - RECT 30300.0 340200.0 29100.0 339000.0 ; - RECT 30900.0 336750.0 32100.0 335550.0 ; - RECT 33300.0 345450.0 34500.0 344250.0 ; - RECT 34500.0 340200.0 33300.0 339000.0 ; - RECT 29100.0 340200.0 30300.0 339000.0 ; - RECT 32100.0 342900.0 33300.0 341700.0 ; - RECT 33300.0 340200.0 34500.0 339000.0 ; - RECT 26700.0 334050.0 41100.0 333150.0 ; - RECT 26700.0 347850.0 41100.0 346950.0 ; - RECT 28500.0 349350.0 29700.0 346950.0 ; - RECT 28500.0 358050.0 29700.0 361650.0 ; - RECT 33300.0 358050.0 34500.0 361650.0 ; - RECT 35700.0 359250.0 36900.0 361200.0 ; - RECT 35700.0 347400.0 36900.0 349350.0 ; - RECT 28500.0 358050.0 29700.0 359250.0 ; - RECT 30900.0 358050.0 32100.0 359250.0 ; - RECT 30900.0 358050.0 32100.0 359250.0 ; - RECT 28500.0 358050.0 29700.0 359250.0 ; - RECT 30900.0 358050.0 32100.0 359250.0 ; - RECT 33300.0 358050.0 34500.0 359250.0 ; - RECT 33300.0 358050.0 34500.0 359250.0 ; - RECT 30900.0 358050.0 32100.0 359250.0 ; - RECT 28500.0 349350.0 29700.0 350550.0 ; - RECT 30900.0 349350.0 32100.0 350550.0 ; - RECT 30900.0 349350.0 32100.0 350550.0 ; - RECT 28500.0 349350.0 29700.0 350550.0 ; - RECT 30900.0 349350.0 32100.0 350550.0 ; - RECT 33300.0 349350.0 34500.0 350550.0 ; - RECT 33300.0 349350.0 34500.0 350550.0 ; - RECT 30900.0 349350.0 32100.0 350550.0 ; - RECT 35700.0 358650.0 36900.0 359850.0 ; - RECT 35700.0 348750.0 36900.0 349950.0 ; - RECT 33300.0 351900.0 32100.0 353100.0 ; - RECT 30300.0 354600.0 29100.0 355800.0 ; - RECT 30900.0 358050.0 32100.0 359250.0 ; - RECT 33300.0 349350.0 34500.0 350550.0 ; - RECT 34500.0 354600.0 33300.0 355800.0 ; - RECT 29100.0 354600.0 30300.0 355800.0 ; - RECT 32100.0 351900.0 33300.0 353100.0 ; - RECT 33300.0 354600.0 34500.0 355800.0 ; - RECT 26700.0 360750.0 41100.0 361650.0 ; - RECT 26700.0 346950.0 41100.0 347850.0 ; - RECT 28500.0 373050.0 29700.0 375450.0 ; - RECT 28500.0 364350.0 29700.0 360750.0 ; - RECT 33300.0 364350.0 34500.0 360750.0 ; - RECT 35700.0 363150.0 36900.0 361200.0 ; - RECT 35700.0 375000.0 36900.0 373050.0 ; - RECT 28500.0 364350.0 29700.0 363150.0 ; - RECT 30900.0 364350.0 32100.0 363150.0 ; - RECT 30900.0 364350.0 32100.0 363150.0 ; - RECT 28500.0 364350.0 29700.0 363150.0 ; - RECT 30900.0 364350.0 32100.0 363150.0 ; - RECT 33300.0 364350.0 34500.0 363150.0 ; - RECT 33300.0 364350.0 34500.0 363150.0 ; - RECT 30900.0 364350.0 32100.0 363150.0 ; - RECT 28500.0 373050.0 29700.0 371850.0 ; - RECT 30900.0 373050.0 32100.0 371850.0 ; - RECT 30900.0 373050.0 32100.0 371850.0 ; - RECT 28500.0 373050.0 29700.0 371850.0 ; - RECT 30900.0 373050.0 32100.0 371850.0 ; - RECT 33300.0 373050.0 34500.0 371850.0 ; - RECT 33300.0 373050.0 34500.0 371850.0 ; - RECT 30900.0 373050.0 32100.0 371850.0 ; - RECT 35700.0 363750.0 36900.0 362550.0 ; - RECT 35700.0 373650.0 36900.0 372450.0 ; - RECT 33300.0 370500.0 32100.0 369300.0 ; - RECT 30300.0 367800.0 29100.0 366600.0 ; - RECT 30900.0 364350.0 32100.0 363150.0 ; - RECT 33300.0 373050.0 34500.0 371850.0 ; - RECT 34500.0 367800.0 33300.0 366600.0 ; - RECT 29100.0 367800.0 30300.0 366600.0 ; - RECT 32100.0 370500.0 33300.0 369300.0 ; - RECT 33300.0 367800.0 34500.0 366600.0 ; - RECT 26700.0 361650.0 41100.0 360750.0 ; - RECT 26700.0 375450.0 41100.0 374550.0 ; - RECT 28500.0 376950.0 29700.0 374550.0 ; - RECT 28500.0 385650.0 29700.0 389250.0 ; - RECT 33300.0 385650.0 34500.0 389250.0 ; - RECT 35700.0 386850.0 36900.0 388800.0 ; - RECT 35700.0 375000.0 36900.0 376950.0 ; - RECT 28500.0 385650.0 29700.0 386850.0 ; - RECT 30900.0 385650.0 32100.0 386850.0 ; - RECT 30900.0 385650.0 32100.0 386850.0 ; - RECT 28500.0 385650.0 29700.0 386850.0 ; - RECT 30900.0 385650.0 32100.0 386850.0 ; - RECT 33300.0 385650.0 34500.0 386850.0 ; - RECT 33300.0 385650.0 34500.0 386850.0 ; - RECT 30900.0 385650.0 32100.0 386850.0 ; - RECT 28500.0 376950.0 29700.0 378150.0 ; - RECT 30900.0 376950.0 32100.0 378150.0 ; - RECT 30900.0 376950.0 32100.0 378150.0 ; - RECT 28500.0 376950.0 29700.0 378150.0 ; - RECT 30900.0 376950.0 32100.0 378150.0 ; - RECT 33300.0 376950.0 34500.0 378150.0 ; - RECT 33300.0 376950.0 34500.0 378150.0 ; - RECT 30900.0 376950.0 32100.0 378150.0 ; - RECT 35700.0 386250.0 36900.0 387450.0 ; - RECT 35700.0 376350.0 36900.0 377550.0 ; - RECT 33300.0 379500.0 32100.0 380700.0 ; - RECT 30300.0 382200.0 29100.0 383400.0 ; - RECT 30900.0 385650.0 32100.0 386850.0 ; - RECT 33300.0 376950.0 34500.0 378150.0 ; - RECT 34500.0 382200.0 33300.0 383400.0 ; - RECT 29100.0 382200.0 30300.0 383400.0 ; - RECT 32100.0 379500.0 33300.0 380700.0 ; - RECT 33300.0 382200.0 34500.0 383400.0 ; - RECT 26700.0 388350.0 41100.0 389250.0 ; - RECT 26700.0 374550.0 41100.0 375450.0 ; - RECT 28500.0 400650.0 29700.0 403050.0 ; - RECT 28500.0 391950.0 29700.0 388350.0 ; - RECT 33300.0 391950.0 34500.0 388350.0 ; - RECT 35700.0 390750.0 36900.0 388800.0 ; - RECT 35700.0 402600.0 36900.0 400650.0 ; - RECT 28500.0 391950.0 29700.0 390750.0 ; - RECT 30900.0 391950.0 32100.0 390750.0 ; - RECT 30900.0 391950.0 32100.0 390750.0 ; - RECT 28500.0 391950.0 29700.0 390750.0 ; - RECT 30900.0 391950.0 32100.0 390750.0 ; - RECT 33300.0 391950.0 34500.0 390750.0 ; - RECT 33300.0 391950.0 34500.0 390750.0 ; - RECT 30900.0 391950.0 32100.0 390750.0 ; - RECT 28500.0 400650.0 29700.0 399450.0 ; - RECT 30900.0 400650.0 32100.0 399450.0 ; - RECT 30900.0 400650.0 32100.0 399450.0 ; - RECT 28500.0 400650.0 29700.0 399450.0 ; - RECT 30900.0 400650.0 32100.0 399450.0 ; - RECT 33300.0 400650.0 34500.0 399450.0 ; - RECT 33300.0 400650.0 34500.0 399450.0 ; - RECT 30900.0 400650.0 32100.0 399450.0 ; - RECT 35700.0 391350.0 36900.0 390150.0 ; - RECT 35700.0 401250.0 36900.0 400050.0 ; - RECT 33300.0 398100.0 32100.0 396900.0 ; - RECT 30300.0 395400.0 29100.0 394200.0 ; - RECT 30900.0 391950.0 32100.0 390750.0 ; - RECT 33300.0 400650.0 34500.0 399450.0 ; - RECT 34500.0 395400.0 33300.0 394200.0 ; - RECT 29100.0 395400.0 30300.0 394200.0 ; - RECT 32100.0 398100.0 33300.0 396900.0 ; - RECT 33300.0 395400.0 34500.0 394200.0 ; - RECT 26700.0 389250.0 41100.0 388350.0 ; - RECT 26700.0 403050.0 41100.0 402150.0 ; - RECT 28500.0 404550.0 29700.0 402150.0 ; - RECT 28500.0 413250.0 29700.0 416850.0 ; - RECT 33300.0 413250.0 34500.0 416850.0 ; - RECT 35700.0 414450.0 36900.0 416400.0 ; - RECT 35700.0 402600.0 36900.0 404550.0 ; - RECT 28500.0 413250.0 29700.0 414450.0 ; - RECT 30900.0 413250.0 32100.0 414450.0 ; - RECT 30900.0 413250.0 32100.0 414450.0 ; - RECT 28500.0 413250.0 29700.0 414450.0 ; - RECT 30900.0 413250.0 32100.0 414450.0 ; - RECT 33300.0 413250.0 34500.0 414450.0 ; - RECT 33300.0 413250.0 34500.0 414450.0 ; - RECT 30900.0 413250.0 32100.0 414450.0 ; - RECT 28500.0 404550.0 29700.0 405750.0 ; - RECT 30900.0 404550.0 32100.0 405750.0 ; - RECT 30900.0 404550.0 32100.0 405750.0 ; - RECT 28500.0 404550.0 29700.0 405750.0 ; - RECT 30900.0 404550.0 32100.0 405750.0 ; - RECT 33300.0 404550.0 34500.0 405750.0 ; - RECT 33300.0 404550.0 34500.0 405750.0 ; - RECT 30900.0 404550.0 32100.0 405750.0 ; - RECT 35700.0 413850.0 36900.0 415050.0 ; - RECT 35700.0 403950.0 36900.0 405150.0 ; - RECT 33300.0 407100.0 32100.0 408300.0 ; - RECT 30300.0 409800.0 29100.0 411000.0 ; - RECT 30900.0 413250.0 32100.0 414450.0 ; - RECT 33300.0 404550.0 34500.0 405750.0 ; - RECT 34500.0 409800.0 33300.0 411000.0 ; - RECT 29100.0 409800.0 30300.0 411000.0 ; - RECT 32100.0 407100.0 33300.0 408300.0 ; - RECT 33300.0 409800.0 34500.0 411000.0 ; - RECT 26700.0 415950.0 41100.0 416850.0 ; - RECT 26700.0 402150.0 41100.0 403050.0 ; - RECT 28500.0 428250.0 29700.0 430650.0 ; - RECT 28500.0 419550.0 29700.0 415950.0 ; - RECT 33300.0 419550.0 34500.0 415950.0 ; - RECT 35700.0 418350.0 36900.0 416400.0 ; - RECT 35700.0 430200.0 36900.0 428250.0 ; - RECT 28500.0 419550.0 29700.0 418350.0 ; - RECT 30900.0 419550.0 32100.0 418350.0 ; - RECT 30900.0 419550.0 32100.0 418350.0 ; - RECT 28500.0 419550.0 29700.0 418350.0 ; - RECT 30900.0 419550.0 32100.0 418350.0 ; - RECT 33300.0 419550.0 34500.0 418350.0 ; - RECT 33300.0 419550.0 34500.0 418350.0 ; - RECT 30900.0 419550.0 32100.0 418350.0 ; - RECT 28500.0 428250.0 29700.0 427050.0 ; - RECT 30900.0 428250.0 32100.0 427050.0 ; - RECT 30900.0 428250.0 32100.0 427050.0 ; - RECT 28500.0 428250.0 29700.0 427050.0 ; - RECT 30900.0 428250.0 32100.0 427050.0 ; - RECT 33300.0 428250.0 34500.0 427050.0 ; - RECT 33300.0 428250.0 34500.0 427050.0 ; - RECT 30900.0 428250.0 32100.0 427050.0 ; - RECT 35700.0 418950.0 36900.0 417750.0 ; - RECT 35700.0 428850.0 36900.0 427650.0 ; - RECT 33300.0 425700.0 32100.0 424500.0 ; - RECT 30300.0 423000.0 29100.0 421800.0 ; - RECT 30900.0 419550.0 32100.0 418350.0 ; - RECT 33300.0 428250.0 34500.0 427050.0 ; - RECT 34500.0 423000.0 33300.0 421800.0 ; - RECT 29100.0 423000.0 30300.0 421800.0 ; - RECT 32100.0 425700.0 33300.0 424500.0 ; - RECT 33300.0 423000.0 34500.0 421800.0 ; - RECT 26700.0 416850.0 41100.0 415950.0 ; - RECT 26700.0 430650.0 41100.0 429750.0 ; - RECT 47700.0 221250.0 48900.0 223200.0 ; - RECT 47700.0 209400.0 48900.0 211350.0 ; - RECT 42900.0 210750.0 44100.0 208950.0 ; - RECT 42900.0 220050.0 44100.0 223650.0 ; - RECT 45600.0 210750.0 46500.0 220050.0 ; - RECT 42900.0 220050.0 44100.0 221250.0 ; - RECT 45300.0 220050.0 46500.0 221250.0 ; - RECT 45300.0 220050.0 46500.0 221250.0 ; - RECT 42900.0 220050.0 44100.0 221250.0 ; - RECT 42900.0 210750.0 44100.0 211950.0 ; - RECT 45300.0 210750.0 46500.0 211950.0 ; - RECT 45300.0 210750.0 46500.0 211950.0 ; - RECT 42900.0 210750.0 44100.0 211950.0 ; - RECT 47700.0 220650.0 48900.0 221850.0 ; - RECT 47700.0 210750.0 48900.0 211950.0 ; - RECT 43500.0 215400.0 44700.0 216600.0 ; - RECT 43500.0 215400.0 44700.0 216600.0 ; - RECT 46050.0 215550.0 46950.0 216450.0 ; - RECT 41100.0 222750.0 50700.0 223650.0 ; - RECT 41100.0 208950.0 50700.0 209850.0 ; - RECT 47700.0 225150.0 48900.0 223200.0 ; - RECT 47700.0 237000.0 48900.0 235050.0 ; - RECT 42900.0 235650.0 44100.0 237450.0 ; - RECT 42900.0 226350.0 44100.0 222750.0 ; - RECT 45600.0 235650.0 46500.0 226350.0 ; - RECT 42900.0 226350.0 44100.0 225150.0 ; - RECT 45300.0 226350.0 46500.0 225150.0 ; - RECT 45300.0 226350.0 46500.0 225150.0 ; - RECT 42900.0 226350.0 44100.0 225150.0 ; - RECT 42900.0 235650.0 44100.0 234450.0 ; - RECT 45300.0 235650.0 46500.0 234450.0 ; - RECT 45300.0 235650.0 46500.0 234450.0 ; - RECT 42900.0 235650.0 44100.0 234450.0 ; - RECT 47700.0 225750.0 48900.0 224550.0 ; - RECT 47700.0 235650.0 48900.0 234450.0 ; - RECT 43500.0 231000.0 44700.0 229800.0 ; - RECT 43500.0 231000.0 44700.0 229800.0 ; - RECT 46050.0 230850.0 46950.0 229950.0 ; - RECT 41100.0 223650.0 50700.0 222750.0 ; - RECT 41100.0 237450.0 50700.0 236550.0 ; - RECT 47700.0 248850.0 48900.0 250800.0 ; - RECT 47700.0 237000.0 48900.0 238950.0 ; - RECT 42900.0 238350.0 44100.0 236550.0 ; - RECT 42900.0 247650.0 44100.0 251250.0 ; - RECT 45600.0 238350.0 46500.0 247650.0 ; - RECT 42900.0 247650.0 44100.0 248850.0 ; - RECT 45300.0 247650.0 46500.0 248850.0 ; - RECT 45300.0 247650.0 46500.0 248850.0 ; - RECT 42900.0 247650.0 44100.0 248850.0 ; - RECT 42900.0 238350.0 44100.0 239550.0 ; - RECT 45300.0 238350.0 46500.0 239550.0 ; - RECT 45300.0 238350.0 46500.0 239550.0 ; - RECT 42900.0 238350.0 44100.0 239550.0 ; - RECT 47700.0 248250.0 48900.0 249450.0 ; - RECT 47700.0 238350.0 48900.0 239550.0 ; - RECT 43500.0 243000.0 44700.0 244200.0 ; - RECT 43500.0 243000.0 44700.0 244200.0 ; - RECT 46050.0 243150.0 46950.0 244050.0 ; - RECT 41100.0 250350.0 50700.0 251250.0 ; - RECT 41100.0 236550.0 50700.0 237450.0 ; - RECT 47700.0 252750.0 48900.0 250800.0 ; - RECT 47700.0 264600.0 48900.0 262650.0 ; - RECT 42900.0 263250.0 44100.0 265050.0 ; - RECT 42900.0 253950.0 44100.0 250350.0 ; - RECT 45600.0 263250.0 46500.0 253950.0 ; - RECT 42900.0 253950.0 44100.0 252750.0 ; - RECT 45300.0 253950.0 46500.0 252750.0 ; - RECT 45300.0 253950.0 46500.0 252750.0 ; - RECT 42900.0 253950.0 44100.0 252750.0 ; - RECT 42900.0 263250.0 44100.0 262050.0 ; - RECT 45300.0 263250.0 46500.0 262050.0 ; - RECT 45300.0 263250.0 46500.0 262050.0 ; - RECT 42900.0 263250.0 44100.0 262050.0 ; - RECT 47700.0 253350.0 48900.0 252150.0 ; - RECT 47700.0 263250.0 48900.0 262050.0 ; - RECT 43500.0 258600.0 44700.0 257400.0 ; - RECT 43500.0 258600.0 44700.0 257400.0 ; - RECT 46050.0 258450.0 46950.0 257550.0 ; - RECT 41100.0 251250.0 50700.0 250350.0 ; - RECT 41100.0 265050.0 50700.0 264150.0 ; - RECT 47700.0 276450.0 48900.0 278400.0 ; - RECT 47700.0 264600.0 48900.0 266550.0 ; - RECT 42900.0 265950.0 44100.0 264150.0 ; - RECT 42900.0 275250.0 44100.0 278850.0 ; - RECT 45600.0 265950.0 46500.0 275250.0 ; - RECT 42900.0 275250.0 44100.0 276450.0 ; - RECT 45300.0 275250.0 46500.0 276450.0 ; - RECT 45300.0 275250.0 46500.0 276450.0 ; - RECT 42900.0 275250.0 44100.0 276450.0 ; - RECT 42900.0 265950.0 44100.0 267150.0 ; - RECT 45300.0 265950.0 46500.0 267150.0 ; - RECT 45300.0 265950.0 46500.0 267150.0 ; - RECT 42900.0 265950.0 44100.0 267150.0 ; - RECT 47700.0 275850.0 48900.0 277050.0 ; - RECT 47700.0 265950.0 48900.0 267150.0 ; - RECT 43500.0 270600.0 44700.0 271800.0 ; - RECT 43500.0 270600.0 44700.0 271800.0 ; - RECT 46050.0 270750.0 46950.0 271650.0 ; - RECT 41100.0 277950.0 50700.0 278850.0 ; - RECT 41100.0 264150.0 50700.0 265050.0 ; - RECT 47700.0 280350.0 48900.0 278400.0 ; - RECT 47700.0 292200.0 48900.0 290250.0 ; - RECT 42900.0 290850.0 44100.0 292650.0 ; - RECT 42900.0 281550.0 44100.0 277950.0 ; - RECT 45600.0 290850.0 46500.0 281550.0 ; - RECT 42900.0 281550.0 44100.0 280350.0 ; - RECT 45300.0 281550.0 46500.0 280350.0 ; - RECT 45300.0 281550.0 46500.0 280350.0 ; - RECT 42900.0 281550.0 44100.0 280350.0 ; - RECT 42900.0 290850.0 44100.0 289650.0 ; - RECT 45300.0 290850.0 46500.0 289650.0 ; - RECT 45300.0 290850.0 46500.0 289650.0 ; - RECT 42900.0 290850.0 44100.0 289650.0 ; - RECT 47700.0 280950.0 48900.0 279750.0 ; - RECT 47700.0 290850.0 48900.0 289650.0 ; - RECT 43500.0 286200.0 44700.0 285000.0 ; - RECT 43500.0 286200.0 44700.0 285000.0 ; - RECT 46050.0 286050.0 46950.0 285150.0 ; - RECT 41100.0 278850.0 50700.0 277950.0 ; - RECT 41100.0 292650.0 50700.0 291750.0 ; - RECT 47700.0 304050.0 48900.0 306000.0 ; - RECT 47700.0 292200.0 48900.0 294150.0 ; - RECT 42900.0 293550.0 44100.0 291750.0 ; - RECT 42900.0 302850.0 44100.0 306450.0 ; - RECT 45600.0 293550.0 46500.0 302850.0 ; - RECT 42900.0 302850.0 44100.0 304050.0 ; - RECT 45300.0 302850.0 46500.0 304050.0 ; - RECT 45300.0 302850.0 46500.0 304050.0 ; - RECT 42900.0 302850.0 44100.0 304050.0 ; - RECT 42900.0 293550.0 44100.0 294750.0 ; - RECT 45300.0 293550.0 46500.0 294750.0 ; - RECT 45300.0 293550.0 46500.0 294750.0 ; - RECT 42900.0 293550.0 44100.0 294750.0 ; - RECT 47700.0 303450.0 48900.0 304650.0 ; - RECT 47700.0 293550.0 48900.0 294750.0 ; - RECT 43500.0 298200.0 44700.0 299400.0 ; - RECT 43500.0 298200.0 44700.0 299400.0 ; - RECT 46050.0 298350.0 46950.0 299250.0 ; - RECT 41100.0 305550.0 50700.0 306450.0 ; - RECT 41100.0 291750.0 50700.0 292650.0 ; - RECT 47700.0 307950.0 48900.0 306000.0 ; - RECT 47700.0 319800.0 48900.0 317850.0 ; - RECT 42900.0 318450.0 44100.0 320250.0 ; - RECT 42900.0 309150.0 44100.0 305550.0 ; - RECT 45600.0 318450.0 46500.0 309150.0 ; - RECT 42900.0 309150.0 44100.0 307950.0 ; - RECT 45300.0 309150.0 46500.0 307950.0 ; - RECT 45300.0 309150.0 46500.0 307950.0 ; - RECT 42900.0 309150.0 44100.0 307950.0 ; - RECT 42900.0 318450.0 44100.0 317250.0 ; - RECT 45300.0 318450.0 46500.0 317250.0 ; - RECT 45300.0 318450.0 46500.0 317250.0 ; - RECT 42900.0 318450.0 44100.0 317250.0 ; - RECT 47700.0 308550.0 48900.0 307350.0 ; - RECT 47700.0 318450.0 48900.0 317250.0 ; - RECT 43500.0 313800.0 44700.0 312600.0 ; - RECT 43500.0 313800.0 44700.0 312600.0 ; - RECT 46050.0 313650.0 46950.0 312750.0 ; - RECT 41100.0 306450.0 50700.0 305550.0 ; - RECT 41100.0 320250.0 50700.0 319350.0 ; - RECT 47700.0 331650.0 48900.0 333600.0 ; - RECT 47700.0 319800.0 48900.0 321750.0 ; - RECT 42900.0 321150.0 44100.0 319350.0 ; - RECT 42900.0 330450.0 44100.0 334050.0 ; - RECT 45600.0 321150.0 46500.0 330450.0 ; - RECT 42900.0 330450.0 44100.0 331650.0 ; - RECT 45300.0 330450.0 46500.0 331650.0 ; - RECT 45300.0 330450.0 46500.0 331650.0 ; - RECT 42900.0 330450.0 44100.0 331650.0 ; - RECT 42900.0 321150.0 44100.0 322350.0 ; - RECT 45300.0 321150.0 46500.0 322350.0 ; - RECT 45300.0 321150.0 46500.0 322350.0 ; - RECT 42900.0 321150.0 44100.0 322350.0 ; - RECT 47700.0 331050.0 48900.0 332250.0 ; - RECT 47700.0 321150.0 48900.0 322350.0 ; - RECT 43500.0 325800.0 44700.0 327000.0 ; - RECT 43500.0 325800.0 44700.0 327000.0 ; - RECT 46050.0 325950.0 46950.0 326850.0 ; - RECT 41100.0 333150.0 50700.0 334050.0 ; - RECT 41100.0 319350.0 50700.0 320250.0 ; - RECT 47700.0 335550.0 48900.0 333600.0 ; - RECT 47700.0 347400.0 48900.0 345450.0 ; - RECT 42900.0 346050.0 44100.0 347850.0 ; - RECT 42900.0 336750.0 44100.0 333150.0 ; - RECT 45600.0 346050.0 46500.0 336750.0 ; - RECT 42900.0 336750.0 44100.0 335550.0 ; - RECT 45300.0 336750.0 46500.0 335550.0 ; - RECT 45300.0 336750.0 46500.0 335550.0 ; - RECT 42900.0 336750.0 44100.0 335550.0 ; - RECT 42900.0 346050.0 44100.0 344850.0 ; - RECT 45300.0 346050.0 46500.0 344850.0 ; - RECT 45300.0 346050.0 46500.0 344850.0 ; - RECT 42900.0 346050.0 44100.0 344850.0 ; - RECT 47700.0 336150.0 48900.0 334950.0 ; - RECT 47700.0 346050.0 48900.0 344850.0 ; - RECT 43500.0 341400.0 44700.0 340200.0 ; - RECT 43500.0 341400.0 44700.0 340200.0 ; - RECT 46050.0 341250.0 46950.0 340350.0 ; - RECT 41100.0 334050.0 50700.0 333150.0 ; - RECT 41100.0 347850.0 50700.0 346950.0 ; - RECT 47700.0 359250.0 48900.0 361200.0 ; - RECT 47700.0 347400.0 48900.0 349350.0 ; - RECT 42900.0 348750.0 44100.0 346950.0 ; - RECT 42900.0 358050.0 44100.0 361650.0 ; - RECT 45600.0 348750.0 46500.0 358050.0 ; - RECT 42900.0 358050.0 44100.0 359250.0 ; - RECT 45300.0 358050.0 46500.0 359250.0 ; - RECT 45300.0 358050.0 46500.0 359250.0 ; - RECT 42900.0 358050.0 44100.0 359250.0 ; - RECT 42900.0 348750.0 44100.0 349950.0 ; - RECT 45300.0 348750.0 46500.0 349950.0 ; - RECT 45300.0 348750.0 46500.0 349950.0 ; - RECT 42900.0 348750.0 44100.0 349950.0 ; - RECT 47700.0 358650.0 48900.0 359850.0 ; - RECT 47700.0 348750.0 48900.0 349950.0 ; - RECT 43500.0 353400.0 44700.0 354600.0 ; - RECT 43500.0 353400.0 44700.0 354600.0 ; - RECT 46050.0 353550.0 46950.0 354450.0 ; - RECT 41100.0 360750.0 50700.0 361650.0 ; - RECT 41100.0 346950.0 50700.0 347850.0 ; - RECT 47700.0 363150.0 48900.0 361200.0 ; - RECT 47700.0 375000.0 48900.0 373050.0 ; - RECT 42900.0 373650.0 44100.0 375450.0 ; - RECT 42900.0 364350.0 44100.0 360750.0 ; - RECT 45600.0 373650.0 46500.0 364350.0 ; - RECT 42900.0 364350.0 44100.0 363150.0 ; - RECT 45300.0 364350.0 46500.0 363150.0 ; - RECT 45300.0 364350.0 46500.0 363150.0 ; - RECT 42900.0 364350.0 44100.0 363150.0 ; - RECT 42900.0 373650.0 44100.0 372450.0 ; - RECT 45300.0 373650.0 46500.0 372450.0 ; - RECT 45300.0 373650.0 46500.0 372450.0 ; - RECT 42900.0 373650.0 44100.0 372450.0 ; - RECT 47700.0 363750.0 48900.0 362550.0 ; - RECT 47700.0 373650.0 48900.0 372450.0 ; - RECT 43500.0 369000.0 44700.0 367800.0 ; - RECT 43500.0 369000.0 44700.0 367800.0 ; - RECT 46050.0 368850.0 46950.0 367950.0 ; - RECT 41100.0 361650.0 50700.0 360750.0 ; - RECT 41100.0 375450.0 50700.0 374550.0 ; - RECT 47700.0 386850.0 48900.0 388800.0 ; - RECT 47700.0 375000.0 48900.0 376950.0 ; - RECT 42900.0 376350.0 44100.0 374550.0 ; - RECT 42900.0 385650.0 44100.0 389250.0 ; - RECT 45600.0 376350.0 46500.0 385650.0 ; - RECT 42900.0 385650.0 44100.0 386850.0 ; - RECT 45300.0 385650.0 46500.0 386850.0 ; - RECT 45300.0 385650.0 46500.0 386850.0 ; - RECT 42900.0 385650.0 44100.0 386850.0 ; - RECT 42900.0 376350.0 44100.0 377550.0 ; - RECT 45300.0 376350.0 46500.0 377550.0 ; - RECT 45300.0 376350.0 46500.0 377550.0 ; - RECT 42900.0 376350.0 44100.0 377550.0 ; - RECT 47700.0 386250.0 48900.0 387450.0 ; - RECT 47700.0 376350.0 48900.0 377550.0 ; - RECT 43500.0 381000.0 44700.0 382200.0 ; - RECT 43500.0 381000.0 44700.0 382200.0 ; - RECT 46050.0 381150.0 46950.0 382050.0 ; - RECT 41100.0 388350.0 50700.0 389250.0 ; - RECT 41100.0 374550.0 50700.0 375450.0 ; - RECT 47700.0 390750.0 48900.0 388800.0 ; - RECT 47700.0 402600.0 48900.0 400650.0 ; - RECT 42900.0 401250.0 44100.0 403050.0 ; - RECT 42900.0 391950.0 44100.0 388350.0 ; - RECT 45600.0 401250.0 46500.0 391950.0 ; - RECT 42900.0 391950.0 44100.0 390750.0 ; - RECT 45300.0 391950.0 46500.0 390750.0 ; - RECT 45300.0 391950.0 46500.0 390750.0 ; - RECT 42900.0 391950.0 44100.0 390750.0 ; - RECT 42900.0 401250.0 44100.0 400050.0 ; - RECT 45300.0 401250.0 46500.0 400050.0 ; - RECT 45300.0 401250.0 46500.0 400050.0 ; - RECT 42900.0 401250.0 44100.0 400050.0 ; - RECT 47700.0 391350.0 48900.0 390150.0 ; - RECT 47700.0 401250.0 48900.0 400050.0 ; - RECT 43500.0 396600.0 44700.0 395400.0 ; - RECT 43500.0 396600.0 44700.0 395400.0 ; - RECT 46050.0 396450.0 46950.0 395550.0 ; - RECT 41100.0 389250.0 50700.0 388350.0 ; - RECT 41100.0 403050.0 50700.0 402150.0 ; - RECT 47700.0 414450.0 48900.0 416400.0 ; - RECT 47700.0 402600.0 48900.0 404550.0 ; - RECT 42900.0 403950.0 44100.0 402150.0 ; - RECT 42900.0 413250.0 44100.0 416850.0 ; - RECT 45600.0 403950.0 46500.0 413250.0 ; - RECT 42900.0 413250.0 44100.0 414450.0 ; - RECT 45300.0 413250.0 46500.0 414450.0 ; - RECT 45300.0 413250.0 46500.0 414450.0 ; - RECT 42900.0 413250.0 44100.0 414450.0 ; - RECT 42900.0 403950.0 44100.0 405150.0 ; - RECT 45300.0 403950.0 46500.0 405150.0 ; - RECT 45300.0 403950.0 46500.0 405150.0 ; - RECT 42900.0 403950.0 44100.0 405150.0 ; - RECT 47700.0 413850.0 48900.0 415050.0 ; - RECT 47700.0 403950.0 48900.0 405150.0 ; - RECT 43500.0 408600.0 44700.0 409800.0 ; - RECT 43500.0 408600.0 44700.0 409800.0 ; - RECT 46050.0 408750.0 46950.0 409650.0 ; - RECT 41100.0 415950.0 50700.0 416850.0 ; - RECT 41100.0 402150.0 50700.0 403050.0 ; - RECT 47700.0 418350.0 48900.0 416400.0 ; - RECT 47700.0 430200.0 48900.0 428250.0 ; - RECT 42900.0 428850.0 44100.0 430650.0 ; - RECT 42900.0 419550.0 44100.0 415950.0 ; - RECT 45600.0 428850.0 46500.0 419550.0 ; - RECT 42900.0 419550.0 44100.0 418350.0 ; - RECT 45300.0 419550.0 46500.0 418350.0 ; - RECT 45300.0 419550.0 46500.0 418350.0 ; - RECT 42900.0 419550.0 44100.0 418350.0 ; - RECT 42900.0 428850.0 44100.0 427650.0 ; - RECT 45300.0 428850.0 46500.0 427650.0 ; - RECT 45300.0 428850.0 46500.0 427650.0 ; - RECT 42900.0 428850.0 44100.0 427650.0 ; - RECT 47700.0 418950.0 48900.0 417750.0 ; - RECT 47700.0 428850.0 48900.0 427650.0 ; - RECT 43500.0 424200.0 44700.0 423000.0 ; - RECT 43500.0 424200.0 44700.0 423000.0 ; - RECT 46050.0 424050.0 46950.0 423150.0 ; - RECT 41100.0 416850.0 50700.0 415950.0 ; - RECT 41100.0 430650.0 50700.0 429750.0 ; - RECT 10950.0 105000.0 9750.0 106200.0 ; - RECT 13050.0 119400.0 11850.0 120600.0 ; - RECT 15150.0 132600.0 13950.0 133800.0 ; - RECT 17250.0 147000.0 16050.0 148200.0 ; - RECT 19350.0 160200.0 18150.0 161400.0 ; - RECT 21450.0 174600.0 20250.0 175800.0 ; - RECT 23550.0 187800.0 22350.0 189000.0 ; - RECT 25650.0 202200.0 24450.0 203400.0 ; - RECT 10950.0 216600.0 9750.0 217800.0 ; - RECT 19350.0 213900.0 18150.0 215100.0 ; - RECT 10950.0 228600.0 9750.0 229800.0 ; - RECT 21450.0 231300.0 20250.0 232500.0 ; - RECT 10950.0 244200.0 9750.0 245400.0 ; - RECT 23550.0 241500.0 22350.0 242700.0 ; - RECT 10950.0 256200.0 9750.0 257400.0 ; - RECT 25650.0 258900.0 24450.0 260100.0 ; - RECT 13050.0 271800.0 11850.0 273000.0 ; - RECT 19350.0 269100.0 18150.0 270300.0 ; - RECT 13050.0 283800.0 11850.0 285000.0 ; - RECT 21450.0 286500.0 20250.0 287700.0 ; - RECT 13050.0 299400.0 11850.0 300600.0 ; - RECT 23550.0 296700.0 22350.0 297900.0 ; - RECT 13050.0 311400.0 11850.0 312600.0 ; - RECT 25650.0 314100.0 24450.0 315300.0 ; - RECT 15150.0 327000.0 13950.0 328200.0 ; - RECT 19350.0 324300.0 18150.0 325500.0 ; - RECT 15150.0 339000.0 13950.0 340200.0 ; - RECT 21450.0 341700.0 20250.0 342900.0 ; - RECT 15150.0 354600.0 13950.0 355800.0 ; - RECT 23550.0 351900.0 22350.0 353100.0 ; - RECT 15150.0 366600.0 13950.0 367800.0 ; - RECT 25650.0 369300.0 24450.0 370500.0 ; - RECT 17250.0 382200.0 16050.0 383400.0 ; - RECT 19350.0 379500.0 18150.0 380700.0 ; - RECT 17250.0 394200.0 16050.0 395400.0 ; - RECT 21450.0 396900.0 20250.0 398100.0 ; - RECT 17250.0 409800.0 16050.0 411000.0 ; - RECT 23550.0 407100.0 22350.0 408300.0 ; - RECT 17250.0 421800.0 16050.0 423000.0 ; - RECT 25650.0 424500.0 24450.0 425700.0 ; - RECT 46050.0 215550.0 46950.0 216450.0 ; - RECT 46050.0 229950.0 46950.0 230850.0 ; - RECT 46050.0 243150.0 46950.0 244050.0 ; - RECT 46050.0 257550.0 46950.0 258450.0 ; - RECT 46050.0 270750.0 46950.0 271650.0 ; - RECT 46050.0 285150.0 46950.0 286050.0 ; - RECT 46050.0 298350.0 46950.0 299250.0 ; - RECT 46050.0 312750.0 46950.0 313650.0 ; - RECT 46050.0 325950.0 46950.0 326850.0 ; - RECT 46050.0 340350.0 46950.0 341250.0 ; - RECT 46050.0 353550.0 46950.0 354450.0 ; - RECT 46050.0 367950.0 46950.0 368850.0 ; - RECT 46050.0 381150.0 46950.0 382050.0 ; - RECT 46050.0 395550.0 46950.0 396450.0 ; - RECT 46050.0 408750.0 46950.0 409650.0 ; - RECT 46050.0 423150.0 46950.0 424050.0 ; - RECT 9900.0 112350.0 81300.0 113250.0 ; - RECT 9900.0 139950.0 81300.0 140850.0 ; - RECT 9900.0 167550.0 81300.0 168450.0 ; - RECT 9900.0 195150.0 81300.0 196050.0 ; - RECT 9900.0 222750.0 81300.0 223650.0 ; - RECT 9900.0 250350.0 81300.0 251250.0 ; - RECT 9900.0 277950.0 81300.0 278850.0 ; - RECT 9900.0 305550.0 81300.0 306450.0 ; - RECT 9900.0 333150.0 81300.0 334050.0 ; - RECT 9900.0 360750.0 81300.0 361650.0 ; - RECT 9900.0 388350.0 81300.0 389250.0 ; - RECT 9900.0 415950.0 81300.0 416850.0 ; - RECT 9900.0 98550.0 81300.0 99450.0 ; - RECT 9900.0 126150.0 81300.0 127050.0 ; - RECT 9900.0 153750.0 81300.0 154650.0 ; - RECT 9900.0 181350.0 81300.0 182250.0 ; - RECT 9900.0 208950.0 81300.0 209850.0 ; - RECT 9900.0 236550.0 81300.0 237450.0 ; - RECT 9900.0 264150.0 81300.0 265050.0 ; - RECT 9900.0 291750.0 81300.0 292650.0 ; - RECT 9900.0 319350.0 81300.0 320250.0 ; - RECT 9900.0 346950.0 81300.0 347850.0 ; - RECT 9900.0 374550.0 81300.0 375450.0 ; - RECT 9900.0 402150.0 81300.0 403050.0 ; - RECT 9900.0 429750.0 81300.0 430650.0 ; - RECT 53850.0 215550.0 59400.0 216450.0 ; - RECT 61950.0 216750.0 62850.0 217650.0 ; - RECT 61950.0 215550.0 62850.0 216450.0 ; - RECT 61950.0 216450.0 62850.0 217200.0 ; - RECT 62400.0 216750.0 69000.0 217650.0 ; - RECT 69000.0 216750.0 70200.0 217650.0 ; - RECT 78450.0 216750.0 79350.0 217650.0 ; - RECT 78450.0 215550.0 79350.0 216450.0 ; - RECT 74400.0 216750.0 78900.0 217650.0 ; - RECT 78450.0 216000.0 79350.0 217200.0 ; - RECT 78900.0 215550.0 83400.0 216450.0 ; - RECT 53850.0 229950.0 59400.0 230850.0 ; - RECT 61950.0 228750.0 62850.0 229650.0 ; - RECT 61950.0 229950.0 62850.0 230850.0 ; - RECT 61950.0 229200.0 62850.0 230850.0 ; - RECT 62400.0 228750.0 69000.0 229650.0 ; - RECT 69000.0 228750.0 70200.0 229650.0 ; - RECT 78450.0 228750.0 79350.0 229650.0 ; - RECT 78450.0 229950.0 79350.0 230850.0 ; - RECT 74400.0 228750.0 78900.0 229650.0 ; - RECT 78450.0 229200.0 79350.0 230400.0 ; - RECT 78900.0 229950.0 83400.0 230850.0 ; - RECT 53850.0 243150.0 59400.0 244050.0 ; - RECT 61950.0 244350.0 62850.0 245250.0 ; - RECT 61950.0 243150.0 62850.0 244050.0 ; - RECT 61950.0 244050.0 62850.0 244800.0 ; - RECT 62400.0 244350.0 69000.0 245250.0 ; - RECT 69000.0 244350.0 70200.0 245250.0 ; - RECT 78450.0 244350.0 79350.0 245250.0 ; - RECT 78450.0 243150.0 79350.0 244050.0 ; - RECT 74400.0 244350.0 78900.0 245250.0 ; - RECT 78450.0 243600.0 79350.0 244800.0 ; - RECT 78900.0 243150.0 83400.0 244050.0 ; - RECT 53850.0 257550.0 59400.0 258450.0 ; - RECT 61950.0 256350.0 62850.0 257250.0 ; - RECT 61950.0 257550.0 62850.0 258450.0 ; - RECT 61950.0 256800.0 62850.0 258450.0 ; - RECT 62400.0 256350.0 69000.0 257250.0 ; - RECT 69000.0 256350.0 70200.0 257250.0 ; - RECT 78450.0 256350.0 79350.0 257250.0 ; - RECT 78450.0 257550.0 79350.0 258450.0 ; - RECT 74400.0 256350.0 78900.0 257250.0 ; - RECT 78450.0 256800.0 79350.0 258000.0 ; - RECT 78900.0 257550.0 83400.0 258450.0 ; - RECT 53850.0 270750.0 59400.0 271650.0 ; - RECT 61950.0 271950.0 62850.0 272850.0 ; - RECT 61950.0 270750.0 62850.0 271650.0 ; - RECT 61950.0 271650.0 62850.0 272400.0 ; - RECT 62400.0 271950.0 69000.0 272850.0 ; - RECT 69000.0 271950.0 70200.0 272850.0 ; - RECT 78450.0 271950.0 79350.0 272850.0 ; - RECT 78450.0 270750.0 79350.0 271650.0 ; - RECT 74400.0 271950.0 78900.0 272850.0 ; - RECT 78450.0 271200.0 79350.0 272400.0 ; - RECT 78900.0 270750.0 83400.0 271650.0 ; - RECT 53850.0 285150.0 59400.0 286050.0 ; - RECT 61950.0 283950.0 62850.0 284850.0 ; - RECT 61950.0 285150.0 62850.0 286050.0 ; - RECT 61950.0 284400.0 62850.0 286050.0 ; - RECT 62400.0 283950.0 69000.0 284850.0 ; - RECT 69000.0 283950.0 70200.0 284850.0 ; - RECT 78450.0 283950.0 79350.0 284850.0 ; - RECT 78450.0 285150.0 79350.0 286050.0 ; - RECT 74400.0 283950.0 78900.0 284850.0 ; - RECT 78450.0 284400.0 79350.0 285600.0 ; - RECT 78900.0 285150.0 83400.0 286050.0 ; - RECT 53850.0 298350.0 59400.0 299250.0 ; - RECT 61950.0 299550.0 62850.0 300450.0 ; - RECT 61950.0 298350.0 62850.0 299250.0 ; - RECT 61950.0 299250.0 62850.0 300000.0 ; - RECT 62400.0 299550.0 69000.0 300450.0 ; - RECT 69000.0 299550.0 70200.0 300450.0 ; - RECT 78450.0 299550.0 79350.0 300450.0 ; - RECT 78450.0 298350.0 79350.0 299250.0 ; - RECT 74400.0 299550.0 78900.0 300450.0 ; - RECT 78450.0 298800.0 79350.0 300000.0 ; - RECT 78900.0 298350.0 83400.0 299250.0 ; - RECT 53850.0 312750.0 59400.0 313650.0 ; - RECT 61950.0 311550.0 62850.0 312450.0 ; - RECT 61950.0 312750.0 62850.0 313650.0 ; - RECT 61950.0 312000.0 62850.0 313650.0 ; - RECT 62400.0 311550.0 69000.0 312450.0 ; - RECT 69000.0 311550.0 70200.0 312450.0 ; - RECT 78450.0 311550.0 79350.0 312450.0 ; - RECT 78450.0 312750.0 79350.0 313650.0 ; - RECT 74400.0 311550.0 78900.0 312450.0 ; - RECT 78450.0 312000.0 79350.0 313200.0 ; - RECT 78900.0 312750.0 83400.0 313650.0 ; - RECT 53850.0 325950.0 59400.0 326850.0 ; - RECT 61950.0 327150.0 62850.0 328050.0 ; - RECT 61950.0 325950.0 62850.0 326850.0 ; - RECT 61950.0 326850.0 62850.0 327600.0 ; - RECT 62400.0 327150.0 69000.0 328050.0 ; - RECT 69000.0 327150.0 70200.0 328050.0 ; - RECT 78450.0 327150.0 79350.0 328050.0 ; - RECT 78450.0 325950.0 79350.0 326850.0 ; - RECT 74400.0 327150.0 78900.0 328050.0 ; - RECT 78450.0 326400.0 79350.0 327600.0 ; - RECT 78900.0 325950.0 83400.0 326850.0 ; - RECT 53850.0 340350.0 59400.0 341250.0 ; - RECT 61950.0 339150.0 62850.0 340050.0 ; - RECT 61950.0 340350.0 62850.0 341250.0 ; - RECT 61950.0 339600.0 62850.0 341250.0 ; - RECT 62400.0 339150.0 69000.0 340050.0 ; - RECT 69000.0 339150.0 70200.0 340050.0 ; - RECT 78450.0 339150.0 79350.0 340050.0 ; - RECT 78450.0 340350.0 79350.0 341250.0 ; - RECT 74400.0 339150.0 78900.0 340050.0 ; - RECT 78450.0 339600.0 79350.0 340800.0 ; - RECT 78900.0 340350.0 83400.0 341250.0 ; - RECT 53850.0 353550.0 59400.0 354450.0 ; - RECT 61950.0 354750.0 62850.0 355650.0 ; - RECT 61950.0 353550.0 62850.0 354450.0 ; - RECT 61950.0 354450.0 62850.0 355200.0 ; - RECT 62400.0 354750.0 69000.0 355650.0 ; - RECT 69000.0 354750.0 70200.0 355650.0 ; - RECT 78450.0 354750.0 79350.0 355650.0 ; - RECT 78450.0 353550.0 79350.0 354450.0 ; - RECT 74400.0 354750.0 78900.0 355650.0 ; - RECT 78450.0 354000.0 79350.0 355200.0 ; - RECT 78900.0 353550.0 83400.0 354450.0 ; - RECT 53850.0 367950.0 59400.0 368850.0 ; - RECT 61950.0 366750.0 62850.0 367650.0 ; - RECT 61950.0 367950.0 62850.0 368850.0 ; - RECT 61950.0 367200.0 62850.0 368850.0 ; - RECT 62400.0 366750.0 69000.0 367650.0 ; - RECT 69000.0 366750.0 70200.0 367650.0 ; - RECT 78450.0 366750.0 79350.0 367650.0 ; - RECT 78450.0 367950.0 79350.0 368850.0 ; - RECT 74400.0 366750.0 78900.0 367650.0 ; - RECT 78450.0 367200.0 79350.0 368400.0 ; - RECT 78900.0 367950.0 83400.0 368850.0 ; - RECT 53850.0 381150.0 59400.0 382050.0 ; - RECT 61950.0 382350.0 62850.0 383250.0 ; - RECT 61950.0 381150.0 62850.0 382050.0 ; - RECT 61950.0 382050.0 62850.0 382800.0 ; - RECT 62400.0 382350.0 69000.0 383250.0 ; - RECT 69000.0 382350.0 70200.0 383250.0 ; - RECT 78450.0 382350.0 79350.0 383250.0 ; - RECT 78450.0 381150.0 79350.0 382050.0 ; - RECT 74400.0 382350.0 78900.0 383250.0 ; - RECT 78450.0 381600.0 79350.0 382800.0 ; - RECT 78900.0 381150.0 83400.0 382050.0 ; - RECT 53850.0 395550.0 59400.0 396450.0 ; - RECT 61950.0 394350.0 62850.0 395250.0 ; - RECT 61950.0 395550.0 62850.0 396450.0 ; - RECT 61950.0 394800.0 62850.0 396450.0 ; - RECT 62400.0 394350.0 69000.0 395250.0 ; - RECT 69000.0 394350.0 70200.0 395250.0 ; - RECT 78450.0 394350.0 79350.0 395250.0 ; - RECT 78450.0 395550.0 79350.0 396450.0 ; - RECT 74400.0 394350.0 78900.0 395250.0 ; - RECT 78450.0 394800.0 79350.0 396000.0 ; - RECT 78900.0 395550.0 83400.0 396450.0 ; - RECT 53850.0 408750.0 59400.0 409650.0 ; - RECT 61950.0 409950.0 62850.0 410850.0 ; - RECT 61950.0 408750.0 62850.0 409650.0 ; - RECT 61950.0 409650.0 62850.0 410400.0 ; - RECT 62400.0 409950.0 69000.0 410850.0 ; - RECT 69000.0 409950.0 70200.0 410850.0 ; - RECT 78450.0 409950.0 79350.0 410850.0 ; - RECT 78450.0 408750.0 79350.0 409650.0 ; - RECT 74400.0 409950.0 78900.0 410850.0 ; - RECT 78450.0 409200.0 79350.0 410400.0 ; - RECT 78900.0 408750.0 83400.0 409650.0 ; - RECT 53850.0 423150.0 59400.0 424050.0 ; - RECT 61950.0 421950.0 62850.0 422850.0 ; - RECT 61950.0 423150.0 62850.0 424050.0 ; - RECT 61950.0 422400.0 62850.0 424050.0 ; - RECT 62400.0 421950.0 69000.0 422850.0 ; - RECT 69000.0 421950.0 70200.0 422850.0 ; - RECT 78450.0 421950.0 79350.0 422850.0 ; - RECT 78450.0 423150.0 79350.0 424050.0 ; - RECT 74400.0 421950.0 78900.0 422850.0 ; - RECT 78450.0 422400.0 79350.0 423600.0 ; - RECT 78900.0 423150.0 83400.0 424050.0 ; - RECT 63600.0 221250.0 64800.0 223200.0 ; - RECT 63600.0 209400.0 64800.0 211350.0 ; - RECT 58800.0 210750.0 60000.0 208950.0 ; - RECT 58800.0 220050.0 60000.0 223650.0 ; - RECT 61500.0 210750.0 62400.0 220050.0 ; - RECT 58800.0 220050.0 60000.0 221250.0 ; - RECT 61200.0 220050.0 62400.0 221250.0 ; - RECT 61200.0 220050.0 62400.0 221250.0 ; - RECT 58800.0 220050.0 60000.0 221250.0 ; - RECT 58800.0 210750.0 60000.0 211950.0 ; - RECT 61200.0 210750.0 62400.0 211950.0 ; - RECT 61200.0 210750.0 62400.0 211950.0 ; - RECT 58800.0 210750.0 60000.0 211950.0 ; - RECT 63600.0 220650.0 64800.0 221850.0 ; - RECT 63600.0 210750.0 64800.0 211950.0 ; - RECT 59400.0 215400.0 60600.0 216600.0 ; - RECT 59400.0 215400.0 60600.0 216600.0 ; - RECT 61950.0 215550.0 62850.0 216450.0 ; - RECT 57000.0 222750.0 66600.0 223650.0 ; - RECT 57000.0 208950.0 66600.0 209850.0 ; - RECT 68400.0 211350.0 69600.0 208950.0 ; - RECT 68400.0 220050.0 69600.0 223650.0 ; - RECT 73200.0 220050.0 74400.0 223650.0 ; - RECT 75600.0 221250.0 76800.0 223200.0 ; - RECT 75600.0 209400.0 76800.0 211350.0 ; - RECT 68400.0 220050.0 69600.0 221250.0 ; - RECT 70800.0 220050.0 72000.0 221250.0 ; - RECT 70800.0 220050.0 72000.0 221250.0 ; - RECT 68400.0 220050.0 69600.0 221250.0 ; - RECT 70800.0 220050.0 72000.0 221250.0 ; - RECT 73200.0 220050.0 74400.0 221250.0 ; - RECT 73200.0 220050.0 74400.0 221250.0 ; - RECT 70800.0 220050.0 72000.0 221250.0 ; - RECT 68400.0 211350.0 69600.0 212550.0 ; - RECT 70800.0 211350.0 72000.0 212550.0 ; - RECT 70800.0 211350.0 72000.0 212550.0 ; - RECT 68400.0 211350.0 69600.0 212550.0 ; - RECT 70800.0 211350.0 72000.0 212550.0 ; - RECT 73200.0 211350.0 74400.0 212550.0 ; - RECT 73200.0 211350.0 74400.0 212550.0 ; - RECT 70800.0 211350.0 72000.0 212550.0 ; - RECT 75600.0 220650.0 76800.0 221850.0 ; - RECT 75600.0 210750.0 76800.0 211950.0 ; - RECT 73200.0 213900.0 72000.0 215100.0 ; - RECT 70200.0 216600.0 69000.0 217800.0 ; - RECT 70800.0 220050.0 72000.0 221250.0 ; - RECT 73200.0 211350.0 74400.0 212550.0 ; - RECT 74400.0 216600.0 73200.0 217800.0 ; - RECT 69000.0 216600.0 70200.0 217800.0 ; - RECT 72000.0 213900.0 73200.0 215100.0 ; - RECT 73200.0 216600.0 74400.0 217800.0 ; - RECT 66600.0 222750.0 81000.0 223650.0 ; - RECT 66600.0 208950.0 81000.0 209850.0 ; - RECT 87600.0 221250.0 88800.0 223200.0 ; - RECT 87600.0 209400.0 88800.0 211350.0 ; - RECT 82800.0 210750.0 84000.0 208950.0 ; - RECT 82800.0 220050.0 84000.0 223650.0 ; - RECT 85500.0 210750.0 86400.0 220050.0 ; - RECT 82800.0 220050.0 84000.0 221250.0 ; - RECT 85200.0 220050.0 86400.0 221250.0 ; - RECT 85200.0 220050.0 86400.0 221250.0 ; - RECT 82800.0 220050.0 84000.0 221250.0 ; - RECT 82800.0 210750.0 84000.0 211950.0 ; - RECT 85200.0 210750.0 86400.0 211950.0 ; - RECT 85200.0 210750.0 86400.0 211950.0 ; - RECT 82800.0 210750.0 84000.0 211950.0 ; - RECT 87600.0 220650.0 88800.0 221850.0 ; - RECT 87600.0 210750.0 88800.0 211950.0 ; - RECT 83400.0 215400.0 84600.0 216600.0 ; - RECT 83400.0 215400.0 84600.0 216600.0 ; - RECT 85950.0 215550.0 86850.0 216450.0 ; - RECT 81000.0 222750.0 90600.0 223650.0 ; - RECT 81000.0 208950.0 90600.0 209850.0 ; - RECT 53250.0 215400.0 54450.0 216600.0 ; - RECT 55200.0 213000.0 56400.0 214200.0 ; - RECT 72000.0 213900.0 70800.0 215100.0 ; - RECT 63600.0 225150.0 64800.0 223200.0 ; - RECT 63600.0 237000.0 64800.0 235050.0 ; - RECT 58800.0 235650.0 60000.0 237450.0 ; - RECT 58800.0 226350.0 60000.0 222750.0 ; - RECT 61500.0 235650.0 62400.0 226350.0 ; - RECT 58800.0 226350.0 60000.0 225150.0 ; - RECT 61200.0 226350.0 62400.0 225150.0 ; - RECT 61200.0 226350.0 62400.0 225150.0 ; - RECT 58800.0 226350.0 60000.0 225150.0 ; - RECT 58800.0 235650.0 60000.0 234450.0 ; - RECT 61200.0 235650.0 62400.0 234450.0 ; - RECT 61200.0 235650.0 62400.0 234450.0 ; - RECT 58800.0 235650.0 60000.0 234450.0 ; - RECT 63600.0 225750.0 64800.0 224550.0 ; - RECT 63600.0 235650.0 64800.0 234450.0 ; - RECT 59400.0 231000.0 60600.0 229800.0 ; - RECT 59400.0 231000.0 60600.0 229800.0 ; - RECT 61950.0 230850.0 62850.0 229950.0 ; - RECT 57000.0 223650.0 66600.0 222750.0 ; - RECT 57000.0 237450.0 66600.0 236550.0 ; - RECT 68400.0 235050.0 69600.0 237450.0 ; - RECT 68400.0 226350.0 69600.0 222750.0 ; - RECT 73200.0 226350.0 74400.0 222750.0 ; - RECT 75600.0 225150.0 76800.0 223200.0 ; - RECT 75600.0 237000.0 76800.0 235050.0 ; - RECT 68400.0 226350.0 69600.0 225150.0 ; - RECT 70800.0 226350.0 72000.0 225150.0 ; - RECT 70800.0 226350.0 72000.0 225150.0 ; - RECT 68400.0 226350.0 69600.0 225150.0 ; - RECT 70800.0 226350.0 72000.0 225150.0 ; - RECT 73200.0 226350.0 74400.0 225150.0 ; - RECT 73200.0 226350.0 74400.0 225150.0 ; - RECT 70800.0 226350.0 72000.0 225150.0 ; - RECT 68400.0 235050.0 69600.0 233850.0 ; - RECT 70800.0 235050.0 72000.0 233850.0 ; - RECT 70800.0 235050.0 72000.0 233850.0 ; - RECT 68400.0 235050.0 69600.0 233850.0 ; - RECT 70800.0 235050.0 72000.0 233850.0 ; - RECT 73200.0 235050.0 74400.0 233850.0 ; - RECT 73200.0 235050.0 74400.0 233850.0 ; - RECT 70800.0 235050.0 72000.0 233850.0 ; - RECT 75600.0 225750.0 76800.0 224550.0 ; - RECT 75600.0 235650.0 76800.0 234450.0 ; - RECT 73200.0 232500.0 72000.0 231300.0 ; - RECT 70200.0 229800.0 69000.0 228600.0 ; - RECT 70800.0 226350.0 72000.0 225150.0 ; - RECT 73200.0 235050.0 74400.0 233850.0 ; - RECT 74400.0 229800.0 73200.0 228600.0 ; - RECT 69000.0 229800.0 70200.0 228600.0 ; - RECT 72000.0 232500.0 73200.0 231300.0 ; - RECT 73200.0 229800.0 74400.0 228600.0 ; - RECT 66600.0 223650.0 81000.0 222750.0 ; - RECT 66600.0 237450.0 81000.0 236550.0 ; - RECT 87600.0 225150.0 88800.0 223200.0 ; - RECT 87600.0 237000.0 88800.0 235050.0 ; - RECT 82800.0 235650.0 84000.0 237450.0 ; - RECT 82800.0 226350.0 84000.0 222750.0 ; - RECT 85500.0 235650.0 86400.0 226350.0 ; - RECT 82800.0 226350.0 84000.0 225150.0 ; - RECT 85200.0 226350.0 86400.0 225150.0 ; - RECT 85200.0 226350.0 86400.0 225150.0 ; - RECT 82800.0 226350.0 84000.0 225150.0 ; - RECT 82800.0 235650.0 84000.0 234450.0 ; - RECT 85200.0 235650.0 86400.0 234450.0 ; - RECT 85200.0 235650.0 86400.0 234450.0 ; - RECT 82800.0 235650.0 84000.0 234450.0 ; - RECT 87600.0 225750.0 88800.0 224550.0 ; - RECT 87600.0 235650.0 88800.0 234450.0 ; - RECT 83400.0 231000.0 84600.0 229800.0 ; - RECT 83400.0 231000.0 84600.0 229800.0 ; - RECT 85950.0 230850.0 86850.0 229950.0 ; - RECT 81000.0 223650.0 90600.0 222750.0 ; - RECT 81000.0 237450.0 90600.0 236550.0 ; - RECT 53250.0 229800.0 54450.0 231000.0 ; - RECT 55200.0 232200.0 56400.0 233400.0 ; - RECT 72000.0 231300.0 70800.0 232500.0 ; - RECT 63600.0 248850.0 64800.0 250800.0 ; - RECT 63600.0 237000.0 64800.0 238950.0 ; - RECT 58800.0 238350.0 60000.0 236550.0 ; - RECT 58800.0 247650.0 60000.0 251250.0 ; - RECT 61500.0 238350.0 62400.0 247650.0 ; - RECT 58800.0 247650.0 60000.0 248850.0 ; - RECT 61200.0 247650.0 62400.0 248850.0 ; - RECT 61200.0 247650.0 62400.0 248850.0 ; - RECT 58800.0 247650.0 60000.0 248850.0 ; - RECT 58800.0 238350.0 60000.0 239550.0 ; - RECT 61200.0 238350.0 62400.0 239550.0 ; - RECT 61200.0 238350.0 62400.0 239550.0 ; - RECT 58800.0 238350.0 60000.0 239550.0 ; - RECT 63600.0 248250.0 64800.0 249450.0 ; - RECT 63600.0 238350.0 64800.0 239550.0 ; - RECT 59400.0 243000.0 60600.0 244200.0 ; - RECT 59400.0 243000.0 60600.0 244200.0 ; - RECT 61950.0 243150.0 62850.0 244050.0 ; - RECT 57000.0 250350.0 66600.0 251250.0 ; - RECT 57000.0 236550.0 66600.0 237450.0 ; - RECT 68400.0 238950.0 69600.0 236550.0 ; - RECT 68400.0 247650.0 69600.0 251250.0 ; - RECT 73200.0 247650.0 74400.0 251250.0 ; - RECT 75600.0 248850.0 76800.0 250800.0 ; - RECT 75600.0 237000.0 76800.0 238950.0 ; - RECT 68400.0 247650.0 69600.0 248850.0 ; - RECT 70800.0 247650.0 72000.0 248850.0 ; - RECT 70800.0 247650.0 72000.0 248850.0 ; - RECT 68400.0 247650.0 69600.0 248850.0 ; - RECT 70800.0 247650.0 72000.0 248850.0 ; - RECT 73200.0 247650.0 74400.0 248850.0 ; - RECT 73200.0 247650.0 74400.0 248850.0 ; - RECT 70800.0 247650.0 72000.0 248850.0 ; - RECT 68400.0 238950.0 69600.0 240150.0 ; - RECT 70800.0 238950.0 72000.0 240150.0 ; - RECT 70800.0 238950.0 72000.0 240150.0 ; - RECT 68400.0 238950.0 69600.0 240150.0 ; - RECT 70800.0 238950.0 72000.0 240150.0 ; - RECT 73200.0 238950.0 74400.0 240150.0 ; - RECT 73200.0 238950.0 74400.0 240150.0 ; - RECT 70800.0 238950.0 72000.0 240150.0 ; - RECT 75600.0 248250.0 76800.0 249450.0 ; - RECT 75600.0 238350.0 76800.0 239550.0 ; - RECT 73200.0 241500.0 72000.0 242700.0 ; - RECT 70200.0 244200.0 69000.0 245400.0 ; - RECT 70800.0 247650.0 72000.0 248850.0 ; - RECT 73200.0 238950.0 74400.0 240150.0 ; - RECT 74400.0 244200.0 73200.0 245400.0 ; - RECT 69000.0 244200.0 70200.0 245400.0 ; - RECT 72000.0 241500.0 73200.0 242700.0 ; - RECT 73200.0 244200.0 74400.0 245400.0 ; - RECT 66600.0 250350.0 81000.0 251250.0 ; - RECT 66600.0 236550.0 81000.0 237450.0 ; - RECT 87600.0 248850.0 88800.0 250800.0 ; - RECT 87600.0 237000.0 88800.0 238950.0 ; - RECT 82800.0 238350.0 84000.0 236550.0 ; - RECT 82800.0 247650.0 84000.0 251250.0 ; - RECT 85500.0 238350.0 86400.0 247650.0 ; - RECT 82800.0 247650.0 84000.0 248850.0 ; - RECT 85200.0 247650.0 86400.0 248850.0 ; - RECT 85200.0 247650.0 86400.0 248850.0 ; - RECT 82800.0 247650.0 84000.0 248850.0 ; - RECT 82800.0 238350.0 84000.0 239550.0 ; - RECT 85200.0 238350.0 86400.0 239550.0 ; - RECT 85200.0 238350.0 86400.0 239550.0 ; - RECT 82800.0 238350.0 84000.0 239550.0 ; - RECT 87600.0 248250.0 88800.0 249450.0 ; - RECT 87600.0 238350.0 88800.0 239550.0 ; - RECT 83400.0 243000.0 84600.0 244200.0 ; - RECT 83400.0 243000.0 84600.0 244200.0 ; - RECT 85950.0 243150.0 86850.0 244050.0 ; - RECT 81000.0 250350.0 90600.0 251250.0 ; - RECT 81000.0 236550.0 90600.0 237450.0 ; - RECT 53250.0 243000.0 54450.0 244200.0 ; - RECT 55200.0 240600.0 56400.0 241800.0 ; - RECT 72000.0 241500.0 70800.0 242700.0 ; - RECT 63600.0 252750.0 64800.0 250800.0 ; - RECT 63600.0 264600.0 64800.0 262650.0 ; - RECT 58800.0 263250.0 60000.0 265050.0 ; - RECT 58800.0 253950.0 60000.0 250350.0 ; - RECT 61500.0 263250.0 62400.0 253950.0 ; - RECT 58800.0 253950.0 60000.0 252750.0 ; - RECT 61200.0 253950.0 62400.0 252750.0 ; - RECT 61200.0 253950.0 62400.0 252750.0 ; - RECT 58800.0 253950.0 60000.0 252750.0 ; - RECT 58800.0 263250.0 60000.0 262050.0 ; - RECT 61200.0 263250.0 62400.0 262050.0 ; - RECT 61200.0 263250.0 62400.0 262050.0 ; - RECT 58800.0 263250.0 60000.0 262050.0 ; - RECT 63600.0 253350.0 64800.0 252150.0 ; - RECT 63600.0 263250.0 64800.0 262050.0 ; - RECT 59400.0 258600.0 60600.0 257400.0 ; - RECT 59400.0 258600.0 60600.0 257400.0 ; - RECT 61950.0 258450.0 62850.0 257550.0 ; - RECT 57000.0 251250.0 66600.0 250350.0 ; - RECT 57000.0 265050.0 66600.0 264150.0 ; - RECT 68400.0 262650.0 69600.0 265050.0 ; - RECT 68400.0 253950.0 69600.0 250350.0 ; - RECT 73200.0 253950.0 74400.0 250350.0 ; - RECT 75600.0 252750.0 76800.0 250800.0 ; - RECT 75600.0 264600.0 76800.0 262650.0 ; - RECT 68400.0 253950.0 69600.0 252750.0 ; - RECT 70800.0 253950.0 72000.0 252750.0 ; - RECT 70800.0 253950.0 72000.0 252750.0 ; - RECT 68400.0 253950.0 69600.0 252750.0 ; - RECT 70800.0 253950.0 72000.0 252750.0 ; - RECT 73200.0 253950.0 74400.0 252750.0 ; - RECT 73200.0 253950.0 74400.0 252750.0 ; - RECT 70800.0 253950.0 72000.0 252750.0 ; - RECT 68400.0 262650.0 69600.0 261450.0 ; - RECT 70800.0 262650.0 72000.0 261450.0 ; - RECT 70800.0 262650.0 72000.0 261450.0 ; - RECT 68400.0 262650.0 69600.0 261450.0 ; - RECT 70800.0 262650.0 72000.0 261450.0 ; - RECT 73200.0 262650.0 74400.0 261450.0 ; - RECT 73200.0 262650.0 74400.0 261450.0 ; - RECT 70800.0 262650.0 72000.0 261450.0 ; - RECT 75600.0 253350.0 76800.0 252150.0 ; - RECT 75600.0 263250.0 76800.0 262050.0 ; - RECT 73200.0 260100.0 72000.0 258900.0 ; - RECT 70200.0 257400.0 69000.0 256200.0 ; - RECT 70800.0 253950.0 72000.0 252750.0 ; - RECT 73200.0 262650.0 74400.0 261450.0 ; - RECT 74400.0 257400.0 73200.0 256200.0 ; - RECT 69000.0 257400.0 70200.0 256200.0 ; - RECT 72000.0 260100.0 73200.0 258900.0 ; - RECT 73200.0 257400.0 74400.0 256200.0 ; - RECT 66600.0 251250.0 81000.0 250350.0 ; - RECT 66600.0 265050.0 81000.0 264150.0 ; - RECT 87600.0 252750.0 88800.0 250800.0 ; - RECT 87600.0 264600.0 88800.0 262650.0 ; - RECT 82800.0 263250.0 84000.0 265050.0 ; - RECT 82800.0 253950.0 84000.0 250350.0 ; - RECT 85500.0 263250.0 86400.0 253950.0 ; - RECT 82800.0 253950.0 84000.0 252750.0 ; - RECT 85200.0 253950.0 86400.0 252750.0 ; - RECT 85200.0 253950.0 86400.0 252750.0 ; - RECT 82800.0 253950.0 84000.0 252750.0 ; - RECT 82800.0 263250.0 84000.0 262050.0 ; - RECT 85200.0 263250.0 86400.0 262050.0 ; - RECT 85200.0 263250.0 86400.0 262050.0 ; - RECT 82800.0 263250.0 84000.0 262050.0 ; - RECT 87600.0 253350.0 88800.0 252150.0 ; - RECT 87600.0 263250.0 88800.0 262050.0 ; - RECT 83400.0 258600.0 84600.0 257400.0 ; - RECT 83400.0 258600.0 84600.0 257400.0 ; - RECT 85950.0 258450.0 86850.0 257550.0 ; - RECT 81000.0 251250.0 90600.0 250350.0 ; - RECT 81000.0 265050.0 90600.0 264150.0 ; - RECT 53250.0 257400.0 54450.0 258600.0 ; - RECT 55200.0 259800.0 56400.0 261000.0 ; - RECT 72000.0 258900.0 70800.0 260100.0 ; - RECT 63600.0 276450.0 64800.0 278400.0 ; - RECT 63600.0 264600.0 64800.0 266550.0 ; - RECT 58800.0 265950.0 60000.0 264150.0 ; - RECT 58800.0 275250.0 60000.0 278850.0 ; - RECT 61500.0 265950.0 62400.0 275250.0 ; - RECT 58800.0 275250.0 60000.0 276450.0 ; - RECT 61200.0 275250.0 62400.0 276450.0 ; - RECT 61200.0 275250.0 62400.0 276450.0 ; - RECT 58800.0 275250.0 60000.0 276450.0 ; - RECT 58800.0 265950.0 60000.0 267150.0 ; - RECT 61200.0 265950.0 62400.0 267150.0 ; - RECT 61200.0 265950.0 62400.0 267150.0 ; - RECT 58800.0 265950.0 60000.0 267150.0 ; - RECT 63600.0 275850.0 64800.0 277050.0 ; - RECT 63600.0 265950.0 64800.0 267150.0 ; - RECT 59400.0 270600.0 60600.0 271800.0 ; - RECT 59400.0 270600.0 60600.0 271800.0 ; - RECT 61950.0 270750.0 62850.0 271650.0 ; - RECT 57000.0 277950.0 66600.0 278850.0 ; - RECT 57000.0 264150.0 66600.0 265050.0 ; - RECT 68400.0 266550.0 69600.0 264150.0 ; - RECT 68400.0 275250.0 69600.0 278850.0 ; - RECT 73200.0 275250.0 74400.0 278850.0 ; - RECT 75600.0 276450.0 76800.0 278400.0 ; - RECT 75600.0 264600.0 76800.0 266550.0 ; - RECT 68400.0 275250.0 69600.0 276450.0 ; - RECT 70800.0 275250.0 72000.0 276450.0 ; - RECT 70800.0 275250.0 72000.0 276450.0 ; - RECT 68400.0 275250.0 69600.0 276450.0 ; - RECT 70800.0 275250.0 72000.0 276450.0 ; - RECT 73200.0 275250.0 74400.0 276450.0 ; - RECT 73200.0 275250.0 74400.0 276450.0 ; - RECT 70800.0 275250.0 72000.0 276450.0 ; - RECT 68400.0 266550.0 69600.0 267750.0 ; - RECT 70800.0 266550.0 72000.0 267750.0 ; - RECT 70800.0 266550.0 72000.0 267750.0 ; - RECT 68400.0 266550.0 69600.0 267750.0 ; - RECT 70800.0 266550.0 72000.0 267750.0 ; - RECT 73200.0 266550.0 74400.0 267750.0 ; - RECT 73200.0 266550.0 74400.0 267750.0 ; - RECT 70800.0 266550.0 72000.0 267750.0 ; - RECT 75600.0 275850.0 76800.0 277050.0 ; - RECT 75600.0 265950.0 76800.0 267150.0 ; - RECT 73200.0 269100.0 72000.0 270300.0 ; - RECT 70200.0 271800.0 69000.0 273000.0 ; - RECT 70800.0 275250.0 72000.0 276450.0 ; - RECT 73200.0 266550.0 74400.0 267750.0 ; - RECT 74400.0 271800.0 73200.0 273000.0 ; - RECT 69000.0 271800.0 70200.0 273000.0 ; - RECT 72000.0 269100.0 73200.0 270300.0 ; - RECT 73200.0 271800.0 74400.0 273000.0 ; - RECT 66600.0 277950.0 81000.0 278850.0 ; - RECT 66600.0 264150.0 81000.0 265050.0 ; - RECT 87600.0 276450.0 88800.0 278400.0 ; - RECT 87600.0 264600.0 88800.0 266550.0 ; - RECT 82800.0 265950.0 84000.0 264150.0 ; - RECT 82800.0 275250.0 84000.0 278850.0 ; - RECT 85500.0 265950.0 86400.0 275250.0 ; - RECT 82800.0 275250.0 84000.0 276450.0 ; - RECT 85200.0 275250.0 86400.0 276450.0 ; - RECT 85200.0 275250.0 86400.0 276450.0 ; - RECT 82800.0 275250.0 84000.0 276450.0 ; - RECT 82800.0 265950.0 84000.0 267150.0 ; - RECT 85200.0 265950.0 86400.0 267150.0 ; - RECT 85200.0 265950.0 86400.0 267150.0 ; - RECT 82800.0 265950.0 84000.0 267150.0 ; - RECT 87600.0 275850.0 88800.0 277050.0 ; - RECT 87600.0 265950.0 88800.0 267150.0 ; - RECT 83400.0 270600.0 84600.0 271800.0 ; - RECT 83400.0 270600.0 84600.0 271800.0 ; - RECT 85950.0 270750.0 86850.0 271650.0 ; - RECT 81000.0 277950.0 90600.0 278850.0 ; - RECT 81000.0 264150.0 90600.0 265050.0 ; - RECT 53250.0 270600.0 54450.0 271800.0 ; - RECT 55200.0 268200.0 56400.0 269400.0 ; - RECT 72000.0 269100.0 70800.0 270300.0 ; - RECT 63600.0 280350.0 64800.0 278400.0 ; - RECT 63600.0 292200.0 64800.0 290250.0 ; - RECT 58800.0 290850.0 60000.0 292650.0 ; - RECT 58800.0 281550.0 60000.0 277950.0 ; - RECT 61500.0 290850.0 62400.0 281550.0 ; - RECT 58800.0 281550.0 60000.0 280350.0 ; - RECT 61200.0 281550.0 62400.0 280350.0 ; - RECT 61200.0 281550.0 62400.0 280350.0 ; - RECT 58800.0 281550.0 60000.0 280350.0 ; - RECT 58800.0 290850.0 60000.0 289650.0 ; - RECT 61200.0 290850.0 62400.0 289650.0 ; - RECT 61200.0 290850.0 62400.0 289650.0 ; - RECT 58800.0 290850.0 60000.0 289650.0 ; - RECT 63600.0 280950.0 64800.0 279750.0 ; - RECT 63600.0 290850.0 64800.0 289650.0 ; - RECT 59400.0 286200.0 60600.0 285000.0 ; - RECT 59400.0 286200.0 60600.0 285000.0 ; - RECT 61950.0 286050.0 62850.0 285150.0 ; - RECT 57000.0 278850.0 66600.0 277950.0 ; - RECT 57000.0 292650.0 66600.0 291750.0 ; - RECT 68400.0 290250.0 69600.0 292650.0 ; - RECT 68400.0 281550.0 69600.0 277950.0 ; - RECT 73200.0 281550.0 74400.0 277950.0 ; - RECT 75600.0 280350.0 76800.0 278400.0 ; - RECT 75600.0 292200.0 76800.0 290250.0 ; - RECT 68400.0 281550.0 69600.0 280350.0 ; - RECT 70800.0 281550.0 72000.0 280350.0 ; - RECT 70800.0 281550.0 72000.0 280350.0 ; - RECT 68400.0 281550.0 69600.0 280350.0 ; - RECT 70800.0 281550.0 72000.0 280350.0 ; - RECT 73200.0 281550.0 74400.0 280350.0 ; - RECT 73200.0 281550.0 74400.0 280350.0 ; - RECT 70800.0 281550.0 72000.0 280350.0 ; - RECT 68400.0 290250.0 69600.0 289050.0 ; - RECT 70800.0 290250.0 72000.0 289050.0 ; - RECT 70800.0 290250.0 72000.0 289050.0 ; - RECT 68400.0 290250.0 69600.0 289050.0 ; - RECT 70800.0 290250.0 72000.0 289050.0 ; - RECT 73200.0 290250.0 74400.0 289050.0 ; - RECT 73200.0 290250.0 74400.0 289050.0 ; - RECT 70800.0 290250.0 72000.0 289050.0 ; - RECT 75600.0 280950.0 76800.0 279750.0 ; - RECT 75600.0 290850.0 76800.0 289650.0 ; - RECT 73200.0 287700.0 72000.0 286500.0 ; - RECT 70200.0 285000.0 69000.0 283800.0 ; - RECT 70800.0 281550.0 72000.0 280350.0 ; - RECT 73200.0 290250.0 74400.0 289050.0 ; - RECT 74400.0 285000.0 73200.0 283800.0 ; - RECT 69000.0 285000.0 70200.0 283800.0 ; - RECT 72000.0 287700.0 73200.0 286500.0 ; - RECT 73200.0 285000.0 74400.0 283800.0 ; - RECT 66600.0 278850.0 81000.0 277950.0 ; - RECT 66600.0 292650.0 81000.0 291750.0 ; - RECT 87600.0 280350.0 88800.0 278400.0 ; - RECT 87600.0 292200.0 88800.0 290250.0 ; - RECT 82800.0 290850.0 84000.0 292650.0 ; - RECT 82800.0 281550.0 84000.0 277950.0 ; - RECT 85500.0 290850.0 86400.0 281550.0 ; - RECT 82800.0 281550.0 84000.0 280350.0 ; - RECT 85200.0 281550.0 86400.0 280350.0 ; - RECT 85200.0 281550.0 86400.0 280350.0 ; - RECT 82800.0 281550.0 84000.0 280350.0 ; - RECT 82800.0 290850.0 84000.0 289650.0 ; - RECT 85200.0 290850.0 86400.0 289650.0 ; - RECT 85200.0 290850.0 86400.0 289650.0 ; - RECT 82800.0 290850.0 84000.0 289650.0 ; - RECT 87600.0 280950.0 88800.0 279750.0 ; - RECT 87600.0 290850.0 88800.0 289650.0 ; - RECT 83400.0 286200.0 84600.0 285000.0 ; - RECT 83400.0 286200.0 84600.0 285000.0 ; - RECT 85950.0 286050.0 86850.0 285150.0 ; - RECT 81000.0 278850.0 90600.0 277950.0 ; - RECT 81000.0 292650.0 90600.0 291750.0 ; - RECT 53250.0 285000.0 54450.0 286200.0 ; - RECT 55200.0 287400.0 56400.0 288600.0 ; - RECT 72000.0 286500.0 70800.0 287700.0 ; - RECT 63600.0 304050.0 64800.0 306000.0 ; - RECT 63600.0 292200.0 64800.0 294150.0 ; - RECT 58800.0 293550.0 60000.0 291750.0 ; - RECT 58800.0 302850.0 60000.0 306450.0 ; - RECT 61500.0 293550.0 62400.0 302850.0 ; - RECT 58800.0 302850.0 60000.0 304050.0 ; - RECT 61200.0 302850.0 62400.0 304050.0 ; - RECT 61200.0 302850.0 62400.0 304050.0 ; - RECT 58800.0 302850.0 60000.0 304050.0 ; - RECT 58800.0 293550.0 60000.0 294750.0 ; - RECT 61200.0 293550.0 62400.0 294750.0 ; - RECT 61200.0 293550.0 62400.0 294750.0 ; - RECT 58800.0 293550.0 60000.0 294750.0 ; - RECT 63600.0 303450.0 64800.0 304650.0 ; - RECT 63600.0 293550.0 64800.0 294750.0 ; - RECT 59400.0 298200.0 60600.0 299400.0 ; - RECT 59400.0 298200.0 60600.0 299400.0 ; - RECT 61950.0 298350.0 62850.0 299250.0 ; - RECT 57000.0 305550.0 66600.0 306450.0 ; - RECT 57000.0 291750.0 66600.0 292650.0 ; - RECT 68400.0 294150.0 69600.0 291750.0 ; - RECT 68400.0 302850.0 69600.0 306450.0 ; - RECT 73200.0 302850.0 74400.0 306450.0 ; - RECT 75600.0 304050.0 76800.0 306000.0 ; - RECT 75600.0 292200.0 76800.0 294150.0 ; - RECT 68400.0 302850.0 69600.0 304050.0 ; - RECT 70800.0 302850.0 72000.0 304050.0 ; - RECT 70800.0 302850.0 72000.0 304050.0 ; - RECT 68400.0 302850.0 69600.0 304050.0 ; - RECT 70800.0 302850.0 72000.0 304050.0 ; - RECT 73200.0 302850.0 74400.0 304050.0 ; - RECT 73200.0 302850.0 74400.0 304050.0 ; - RECT 70800.0 302850.0 72000.0 304050.0 ; - RECT 68400.0 294150.0 69600.0 295350.0 ; - RECT 70800.0 294150.0 72000.0 295350.0 ; - RECT 70800.0 294150.0 72000.0 295350.0 ; - RECT 68400.0 294150.0 69600.0 295350.0 ; - RECT 70800.0 294150.0 72000.0 295350.0 ; - RECT 73200.0 294150.0 74400.0 295350.0 ; - RECT 73200.0 294150.0 74400.0 295350.0 ; - RECT 70800.0 294150.0 72000.0 295350.0 ; - RECT 75600.0 303450.0 76800.0 304650.0 ; - RECT 75600.0 293550.0 76800.0 294750.0 ; - RECT 73200.0 296700.0 72000.0 297900.0 ; - RECT 70200.0 299400.0 69000.0 300600.0 ; - RECT 70800.0 302850.0 72000.0 304050.0 ; - RECT 73200.0 294150.0 74400.0 295350.0 ; - RECT 74400.0 299400.0 73200.0 300600.0 ; - RECT 69000.0 299400.0 70200.0 300600.0 ; - RECT 72000.0 296700.0 73200.0 297900.0 ; - RECT 73200.0 299400.0 74400.0 300600.0 ; - RECT 66600.0 305550.0 81000.0 306450.0 ; - RECT 66600.0 291750.0 81000.0 292650.0 ; - RECT 87600.0 304050.0 88800.0 306000.0 ; - RECT 87600.0 292200.0 88800.0 294150.0 ; - RECT 82800.0 293550.0 84000.0 291750.0 ; - RECT 82800.0 302850.0 84000.0 306450.0 ; - RECT 85500.0 293550.0 86400.0 302850.0 ; - RECT 82800.0 302850.0 84000.0 304050.0 ; - RECT 85200.0 302850.0 86400.0 304050.0 ; - RECT 85200.0 302850.0 86400.0 304050.0 ; - RECT 82800.0 302850.0 84000.0 304050.0 ; - RECT 82800.0 293550.0 84000.0 294750.0 ; - RECT 85200.0 293550.0 86400.0 294750.0 ; - RECT 85200.0 293550.0 86400.0 294750.0 ; - RECT 82800.0 293550.0 84000.0 294750.0 ; - RECT 87600.0 303450.0 88800.0 304650.0 ; - RECT 87600.0 293550.0 88800.0 294750.0 ; - RECT 83400.0 298200.0 84600.0 299400.0 ; - RECT 83400.0 298200.0 84600.0 299400.0 ; - RECT 85950.0 298350.0 86850.0 299250.0 ; - RECT 81000.0 305550.0 90600.0 306450.0 ; - RECT 81000.0 291750.0 90600.0 292650.0 ; - RECT 53250.0 298200.0 54450.0 299400.0 ; - RECT 55200.0 295800.0 56400.0 297000.0 ; - RECT 72000.0 296700.0 70800.0 297900.0 ; - RECT 63600.0 307950.0 64800.0 306000.0 ; - RECT 63600.0 319800.0 64800.0 317850.0 ; - RECT 58800.0 318450.0 60000.0 320250.0 ; - RECT 58800.0 309150.0 60000.0 305550.0 ; - RECT 61500.0 318450.0 62400.0 309150.0 ; - RECT 58800.0 309150.0 60000.0 307950.0 ; - RECT 61200.0 309150.0 62400.0 307950.0 ; - RECT 61200.0 309150.0 62400.0 307950.0 ; - RECT 58800.0 309150.0 60000.0 307950.0 ; - RECT 58800.0 318450.0 60000.0 317250.0 ; - RECT 61200.0 318450.0 62400.0 317250.0 ; - RECT 61200.0 318450.0 62400.0 317250.0 ; - RECT 58800.0 318450.0 60000.0 317250.0 ; - RECT 63600.0 308550.0 64800.0 307350.0 ; - RECT 63600.0 318450.0 64800.0 317250.0 ; - RECT 59400.0 313800.0 60600.0 312600.0 ; - RECT 59400.0 313800.0 60600.0 312600.0 ; - RECT 61950.0 313650.0 62850.0 312750.0 ; - RECT 57000.0 306450.0 66600.0 305550.0 ; - RECT 57000.0 320250.0 66600.0 319350.0 ; - RECT 68400.0 317850.0 69600.0 320250.0 ; - RECT 68400.0 309150.0 69600.0 305550.0 ; - RECT 73200.0 309150.0 74400.0 305550.0 ; - RECT 75600.0 307950.0 76800.0 306000.0 ; - RECT 75600.0 319800.0 76800.0 317850.0 ; - RECT 68400.0 309150.0 69600.0 307950.0 ; - RECT 70800.0 309150.0 72000.0 307950.0 ; - RECT 70800.0 309150.0 72000.0 307950.0 ; - RECT 68400.0 309150.0 69600.0 307950.0 ; - RECT 70800.0 309150.0 72000.0 307950.0 ; - RECT 73200.0 309150.0 74400.0 307950.0 ; - RECT 73200.0 309150.0 74400.0 307950.0 ; - RECT 70800.0 309150.0 72000.0 307950.0 ; - RECT 68400.0 317850.0 69600.0 316650.0 ; - RECT 70800.0 317850.0 72000.0 316650.0 ; - RECT 70800.0 317850.0 72000.0 316650.0 ; - RECT 68400.0 317850.0 69600.0 316650.0 ; - RECT 70800.0 317850.0 72000.0 316650.0 ; - RECT 73200.0 317850.0 74400.0 316650.0 ; - RECT 73200.0 317850.0 74400.0 316650.0 ; - RECT 70800.0 317850.0 72000.0 316650.0 ; - RECT 75600.0 308550.0 76800.0 307350.0 ; - RECT 75600.0 318450.0 76800.0 317250.0 ; - RECT 73200.0 315300.0 72000.0 314100.0 ; - RECT 70200.0 312600.0 69000.0 311400.0 ; - RECT 70800.0 309150.0 72000.0 307950.0 ; - RECT 73200.0 317850.0 74400.0 316650.0 ; - RECT 74400.0 312600.0 73200.0 311400.0 ; - RECT 69000.0 312600.0 70200.0 311400.0 ; - RECT 72000.0 315300.0 73200.0 314100.0 ; - RECT 73200.0 312600.0 74400.0 311400.0 ; - RECT 66600.0 306450.0 81000.0 305550.0 ; - RECT 66600.0 320250.0 81000.0 319350.0 ; - RECT 87600.0 307950.0 88800.0 306000.0 ; - RECT 87600.0 319800.0 88800.0 317850.0 ; - RECT 82800.0 318450.0 84000.0 320250.0 ; - RECT 82800.0 309150.0 84000.0 305550.0 ; - RECT 85500.0 318450.0 86400.0 309150.0 ; - RECT 82800.0 309150.0 84000.0 307950.0 ; - RECT 85200.0 309150.0 86400.0 307950.0 ; - RECT 85200.0 309150.0 86400.0 307950.0 ; - RECT 82800.0 309150.0 84000.0 307950.0 ; - RECT 82800.0 318450.0 84000.0 317250.0 ; - RECT 85200.0 318450.0 86400.0 317250.0 ; - RECT 85200.0 318450.0 86400.0 317250.0 ; - RECT 82800.0 318450.0 84000.0 317250.0 ; - RECT 87600.0 308550.0 88800.0 307350.0 ; - RECT 87600.0 318450.0 88800.0 317250.0 ; - RECT 83400.0 313800.0 84600.0 312600.0 ; - RECT 83400.0 313800.0 84600.0 312600.0 ; - RECT 85950.0 313650.0 86850.0 312750.0 ; - RECT 81000.0 306450.0 90600.0 305550.0 ; - RECT 81000.0 320250.0 90600.0 319350.0 ; - RECT 53250.0 312600.0 54450.0 313800.0 ; - RECT 55200.0 315000.0 56400.0 316200.0 ; - RECT 72000.0 314100.0 70800.0 315300.0 ; - RECT 63600.0 331650.0 64800.0 333600.0 ; - RECT 63600.0 319800.0 64800.0 321750.0 ; - RECT 58800.0 321150.0 60000.0 319350.0 ; - RECT 58800.0 330450.0 60000.0 334050.0 ; - RECT 61500.0 321150.0 62400.0 330450.0 ; - RECT 58800.0 330450.0 60000.0 331650.0 ; - RECT 61200.0 330450.0 62400.0 331650.0 ; - RECT 61200.0 330450.0 62400.0 331650.0 ; - RECT 58800.0 330450.0 60000.0 331650.0 ; - RECT 58800.0 321150.0 60000.0 322350.0 ; - RECT 61200.0 321150.0 62400.0 322350.0 ; - RECT 61200.0 321150.0 62400.0 322350.0 ; - RECT 58800.0 321150.0 60000.0 322350.0 ; - RECT 63600.0 331050.0 64800.0 332250.0 ; - RECT 63600.0 321150.0 64800.0 322350.0 ; - RECT 59400.0 325800.0 60600.0 327000.0 ; - RECT 59400.0 325800.0 60600.0 327000.0 ; - RECT 61950.0 325950.0 62850.0 326850.0 ; - RECT 57000.0 333150.0 66600.0 334050.0 ; - RECT 57000.0 319350.0 66600.0 320250.0 ; - RECT 68400.0 321750.0 69600.0 319350.0 ; - RECT 68400.0 330450.0 69600.0 334050.0 ; - RECT 73200.0 330450.0 74400.0 334050.0 ; - RECT 75600.0 331650.0 76800.0 333600.0 ; - RECT 75600.0 319800.0 76800.0 321750.0 ; - RECT 68400.0 330450.0 69600.0 331650.0 ; - RECT 70800.0 330450.0 72000.0 331650.0 ; - RECT 70800.0 330450.0 72000.0 331650.0 ; - RECT 68400.0 330450.0 69600.0 331650.0 ; - RECT 70800.0 330450.0 72000.0 331650.0 ; - RECT 73200.0 330450.0 74400.0 331650.0 ; - RECT 73200.0 330450.0 74400.0 331650.0 ; - RECT 70800.0 330450.0 72000.0 331650.0 ; - RECT 68400.0 321750.0 69600.0 322950.0 ; - RECT 70800.0 321750.0 72000.0 322950.0 ; - RECT 70800.0 321750.0 72000.0 322950.0 ; - RECT 68400.0 321750.0 69600.0 322950.0 ; - RECT 70800.0 321750.0 72000.0 322950.0 ; - RECT 73200.0 321750.0 74400.0 322950.0 ; - RECT 73200.0 321750.0 74400.0 322950.0 ; - RECT 70800.0 321750.0 72000.0 322950.0 ; - RECT 75600.0 331050.0 76800.0 332250.0 ; - RECT 75600.0 321150.0 76800.0 322350.0 ; - RECT 73200.0 324300.0 72000.0 325500.0 ; - RECT 70200.0 327000.0 69000.0 328200.0 ; - RECT 70800.0 330450.0 72000.0 331650.0 ; - RECT 73200.0 321750.0 74400.0 322950.0 ; - RECT 74400.0 327000.0 73200.0 328200.0 ; - RECT 69000.0 327000.0 70200.0 328200.0 ; - RECT 72000.0 324300.0 73200.0 325500.0 ; - RECT 73200.0 327000.0 74400.0 328200.0 ; - RECT 66600.0 333150.0 81000.0 334050.0 ; - RECT 66600.0 319350.0 81000.0 320250.0 ; - RECT 87600.0 331650.0 88800.0 333600.0 ; - RECT 87600.0 319800.0 88800.0 321750.0 ; - RECT 82800.0 321150.0 84000.0 319350.0 ; - RECT 82800.0 330450.0 84000.0 334050.0 ; - RECT 85500.0 321150.0 86400.0 330450.0 ; - RECT 82800.0 330450.0 84000.0 331650.0 ; - RECT 85200.0 330450.0 86400.0 331650.0 ; - RECT 85200.0 330450.0 86400.0 331650.0 ; - RECT 82800.0 330450.0 84000.0 331650.0 ; - RECT 82800.0 321150.0 84000.0 322350.0 ; - RECT 85200.0 321150.0 86400.0 322350.0 ; - RECT 85200.0 321150.0 86400.0 322350.0 ; - RECT 82800.0 321150.0 84000.0 322350.0 ; - RECT 87600.0 331050.0 88800.0 332250.0 ; - RECT 87600.0 321150.0 88800.0 322350.0 ; - RECT 83400.0 325800.0 84600.0 327000.0 ; - RECT 83400.0 325800.0 84600.0 327000.0 ; - RECT 85950.0 325950.0 86850.0 326850.0 ; - RECT 81000.0 333150.0 90600.0 334050.0 ; - RECT 81000.0 319350.0 90600.0 320250.0 ; - RECT 53250.0 325800.0 54450.0 327000.0 ; - RECT 55200.0 323400.0 56400.0 324600.0 ; - RECT 72000.0 324300.0 70800.0 325500.0 ; - RECT 63600.0 335550.0 64800.0 333600.0 ; - RECT 63600.0 347400.0 64800.0 345450.0 ; - RECT 58800.0 346050.0 60000.0 347850.0 ; - RECT 58800.0 336750.0 60000.0 333150.0 ; - RECT 61500.0 346050.0 62400.0 336750.0 ; - RECT 58800.0 336750.0 60000.0 335550.0 ; - RECT 61200.0 336750.0 62400.0 335550.0 ; - RECT 61200.0 336750.0 62400.0 335550.0 ; - RECT 58800.0 336750.0 60000.0 335550.0 ; - RECT 58800.0 346050.0 60000.0 344850.0 ; - RECT 61200.0 346050.0 62400.0 344850.0 ; - RECT 61200.0 346050.0 62400.0 344850.0 ; - RECT 58800.0 346050.0 60000.0 344850.0 ; - RECT 63600.0 336150.0 64800.0 334950.0 ; - RECT 63600.0 346050.0 64800.0 344850.0 ; - RECT 59400.0 341400.0 60600.0 340200.0 ; - RECT 59400.0 341400.0 60600.0 340200.0 ; - RECT 61950.0 341250.0 62850.0 340350.0 ; - RECT 57000.0 334050.0 66600.0 333150.0 ; - RECT 57000.0 347850.0 66600.0 346950.0 ; - RECT 68400.0 345450.0 69600.0 347850.0 ; - RECT 68400.0 336750.0 69600.0 333150.0 ; - RECT 73200.0 336750.0 74400.0 333150.0 ; - RECT 75600.0 335550.0 76800.0 333600.0 ; - RECT 75600.0 347400.0 76800.0 345450.0 ; - RECT 68400.0 336750.0 69600.0 335550.0 ; - RECT 70800.0 336750.0 72000.0 335550.0 ; - RECT 70800.0 336750.0 72000.0 335550.0 ; - RECT 68400.0 336750.0 69600.0 335550.0 ; - RECT 70800.0 336750.0 72000.0 335550.0 ; - RECT 73200.0 336750.0 74400.0 335550.0 ; - RECT 73200.0 336750.0 74400.0 335550.0 ; - RECT 70800.0 336750.0 72000.0 335550.0 ; - RECT 68400.0 345450.0 69600.0 344250.0 ; - RECT 70800.0 345450.0 72000.0 344250.0 ; - RECT 70800.0 345450.0 72000.0 344250.0 ; - RECT 68400.0 345450.0 69600.0 344250.0 ; - RECT 70800.0 345450.0 72000.0 344250.0 ; - RECT 73200.0 345450.0 74400.0 344250.0 ; - RECT 73200.0 345450.0 74400.0 344250.0 ; - RECT 70800.0 345450.0 72000.0 344250.0 ; - RECT 75600.0 336150.0 76800.0 334950.0 ; - RECT 75600.0 346050.0 76800.0 344850.0 ; - RECT 73200.0 342900.0 72000.0 341700.0 ; - RECT 70200.0 340200.0 69000.0 339000.0 ; - RECT 70800.0 336750.0 72000.0 335550.0 ; - RECT 73200.0 345450.0 74400.0 344250.0 ; - RECT 74400.0 340200.0 73200.0 339000.0 ; - RECT 69000.0 340200.0 70200.0 339000.0 ; - RECT 72000.0 342900.0 73200.0 341700.0 ; - RECT 73200.0 340200.0 74400.0 339000.0 ; - RECT 66600.0 334050.0 81000.0 333150.0 ; - RECT 66600.0 347850.0 81000.0 346950.0 ; - RECT 87600.0 335550.0 88800.0 333600.0 ; - RECT 87600.0 347400.0 88800.0 345450.0 ; - RECT 82800.0 346050.0 84000.0 347850.0 ; - RECT 82800.0 336750.0 84000.0 333150.0 ; - RECT 85500.0 346050.0 86400.0 336750.0 ; - RECT 82800.0 336750.0 84000.0 335550.0 ; - RECT 85200.0 336750.0 86400.0 335550.0 ; - RECT 85200.0 336750.0 86400.0 335550.0 ; - RECT 82800.0 336750.0 84000.0 335550.0 ; - RECT 82800.0 346050.0 84000.0 344850.0 ; - RECT 85200.0 346050.0 86400.0 344850.0 ; - RECT 85200.0 346050.0 86400.0 344850.0 ; - RECT 82800.0 346050.0 84000.0 344850.0 ; - RECT 87600.0 336150.0 88800.0 334950.0 ; - RECT 87600.0 346050.0 88800.0 344850.0 ; - RECT 83400.0 341400.0 84600.0 340200.0 ; - RECT 83400.0 341400.0 84600.0 340200.0 ; - RECT 85950.0 341250.0 86850.0 340350.0 ; - RECT 81000.0 334050.0 90600.0 333150.0 ; - RECT 81000.0 347850.0 90600.0 346950.0 ; - RECT 53250.0 340200.0 54450.0 341400.0 ; - RECT 55200.0 342600.0 56400.0 343800.0 ; - RECT 72000.0 341700.0 70800.0 342900.0 ; - RECT 63600.0 359250.0 64800.0 361200.0 ; - RECT 63600.0 347400.0 64800.0 349350.0 ; - RECT 58800.0 348750.0 60000.0 346950.0 ; - RECT 58800.0 358050.0 60000.0 361650.0 ; - RECT 61500.0 348750.0 62400.0 358050.0 ; - RECT 58800.0 358050.0 60000.0 359250.0 ; - RECT 61200.0 358050.0 62400.0 359250.0 ; - RECT 61200.0 358050.0 62400.0 359250.0 ; - RECT 58800.0 358050.0 60000.0 359250.0 ; - RECT 58800.0 348750.0 60000.0 349950.0 ; - RECT 61200.0 348750.0 62400.0 349950.0 ; - RECT 61200.0 348750.0 62400.0 349950.0 ; - RECT 58800.0 348750.0 60000.0 349950.0 ; - RECT 63600.0 358650.0 64800.0 359850.0 ; - RECT 63600.0 348750.0 64800.0 349950.0 ; - RECT 59400.0 353400.0 60600.0 354600.0 ; - RECT 59400.0 353400.0 60600.0 354600.0 ; - RECT 61950.0 353550.0 62850.0 354450.0 ; - RECT 57000.0 360750.0 66600.0 361650.0 ; - RECT 57000.0 346950.0 66600.0 347850.0 ; - RECT 68400.0 349350.0 69600.0 346950.0 ; - RECT 68400.0 358050.0 69600.0 361650.0 ; - RECT 73200.0 358050.0 74400.0 361650.0 ; - RECT 75600.0 359250.0 76800.0 361200.0 ; - RECT 75600.0 347400.0 76800.0 349350.0 ; - RECT 68400.0 358050.0 69600.0 359250.0 ; - RECT 70800.0 358050.0 72000.0 359250.0 ; - RECT 70800.0 358050.0 72000.0 359250.0 ; - RECT 68400.0 358050.0 69600.0 359250.0 ; - RECT 70800.0 358050.0 72000.0 359250.0 ; - RECT 73200.0 358050.0 74400.0 359250.0 ; - RECT 73200.0 358050.0 74400.0 359250.0 ; - RECT 70800.0 358050.0 72000.0 359250.0 ; - RECT 68400.0 349350.0 69600.0 350550.0 ; - RECT 70800.0 349350.0 72000.0 350550.0 ; - RECT 70800.0 349350.0 72000.0 350550.0 ; - RECT 68400.0 349350.0 69600.0 350550.0 ; - RECT 70800.0 349350.0 72000.0 350550.0 ; - RECT 73200.0 349350.0 74400.0 350550.0 ; - RECT 73200.0 349350.0 74400.0 350550.0 ; - RECT 70800.0 349350.0 72000.0 350550.0 ; - RECT 75600.0 358650.0 76800.0 359850.0 ; - RECT 75600.0 348750.0 76800.0 349950.0 ; - RECT 73200.0 351900.0 72000.0 353100.0 ; - RECT 70200.0 354600.0 69000.0 355800.0 ; - RECT 70800.0 358050.0 72000.0 359250.0 ; - RECT 73200.0 349350.0 74400.0 350550.0 ; - RECT 74400.0 354600.0 73200.0 355800.0 ; - RECT 69000.0 354600.0 70200.0 355800.0 ; - RECT 72000.0 351900.0 73200.0 353100.0 ; - RECT 73200.0 354600.0 74400.0 355800.0 ; - RECT 66600.0 360750.0 81000.0 361650.0 ; - RECT 66600.0 346950.0 81000.0 347850.0 ; - RECT 87600.0 359250.0 88800.0 361200.0 ; - RECT 87600.0 347400.0 88800.0 349350.0 ; - RECT 82800.0 348750.0 84000.0 346950.0 ; - RECT 82800.0 358050.0 84000.0 361650.0 ; - RECT 85500.0 348750.0 86400.0 358050.0 ; - RECT 82800.0 358050.0 84000.0 359250.0 ; - RECT 85200.0 358050.0 86400.0 359250.0 ; - RECT 85200.0 358050.0 86400.0 359250.0 ; - RECT 82800.0 358050.0 84000.0 359250.0 ; - RECT 82800.0 348750.0 84000.0 349950.0 ; - RECT 85200.0 348750.0 86400.0 349950.0 ; - RECT 85200.0 348750.0 86400.0 349950.0 ; - RECT 82800.0 348750.0 84000.0 349950.0 ; - RECT 87600.0 358650.0 88800.0 359850.0 ; - RECT 87600.0 348750.0 88800.0 349950.0 ; - RECT 83400.0 353400.0 84600.0 354600.0 ; - RECT 83400.0 353400.0 84600.0 354600.0 ; - RECT 85950.0 353550.0 86850.0 354450.0 ; - RECT 81000.0 360750.0 90600.0 361650.0 ; - RECT 81000.0 346950.0 90600.0 347850.0 ; - RECT 53250.0 353400.0 54450.0 354600.0 ; - RECT 55200.0 351000.0 56400.0 352200.0 ; - RECT 72000.0 351900.0 70800.0 353100.0 ; - RECT 63600.0 363150.0 64800.0 361200.0 ; - RECT 63600.0 375000.0 64800.0 373050.0 ; - RECT 58800.0 373650.0 60000.0 375450.0 ; - RECT 58800.0 364350.0 60000.0 360750.0 ; - RECT 61500.0 373650.0 62400.0 364350.0 ; - RECT 58800.0 364350.0 60000.0 363150.0 ; - RECT 61200.0 364350.0 62400.0 363150.0 ; - RECT 61200.0 364350.0 62400.0 363150.0 ; - RECT 58800.0 364350.0 60000.0 363150.0 ; - RECT 58800.0 373650.0 60000.0 372450.0 ; - RECT 61200.0 373650.0 62400.0 372450.0 ; - RECT 61200.0 373650.0 62400.0 372450.0 ; - RECT 58800.0 373650.0 60000.0 372450.0 ; - RECT 63600.0 363750.0 64800.0 362550.0 ; - RECT 63600.0 373650.0 64800.0 372450.0 ; - RECT 59400.0 369000.0 60600.0 367800.0 ; - RECT 59400.0 369000.0 60600.0 367800.0 ; - RECT 61950.0 368850.0 62850.0 367950.0 ; - RECT 57000.0 361650.0 66600.0 360750.0 ; - RECT 57000.0 375450.0 66600.0 374550.0 ; - RECT 68400.0 373050.0 69600.0 375450.0 ; - RECT 68400.0 364350.0 69600.0 360750.0 ; - RECT 73200.0 364350.0 74400.0 360750.0 ; - RECT 75600.0 363150.0 76800.0 361200.0 ; - RECT 75600.0 375000.0 76800.0 373050.0 ; - RECT 68400.0 364350.0 69600.0 363150.0 ; - RECT 70800.0 364350.0 72000.0 363150.0 ; - RECT 70800.0 364350.0 72000.0 363150.0 ; - RECT 68400.0 364350.0 69600.0 363150.0 ; - RECT 70800.0 364350.0 72000.0 363150.0 ; - RECT 73200.0 364350.0 74400.0 363150.0 ; - RECT 73200.0 364350.0 74400.0 363150.0 ; - RECT 70800.0 364350.0 72000.0 363150.0 ; - RECT 68400.0 373050.0 69600.0 371850.0 ; - RECT 70800.0 373050.0 72000.0 371850.0 ; - RECT 70800.0 373050.0 72000.0 371850.0 ; - RECT 68400.0 373050.0 69600.0 371850.0 ; - RECT 70800.0 373050.0 72000.0 371850.0 ; - RECT 73200.0 373050.0 74400.0 371850.0 ; - RECT 73200.0 373050.0 74400.0 371850.0 ; - RECT 70800.0 373050.0 72000.0 371850.0 ; - RECT 75600.0 363750.0 76800.0 362550.0 ; - RECT 75600.0 373650.0 76800.0 372450.0 ; - RECT 73200.0 370500.0 72000.0 369300.0 ; - RECT 70200.0 367800.0 69000.0 366600.0 ; - RECT 70800.0 364350.0 72000.0 363150.0 ; - RECT 73200.0 373050.0 74400.0 371850.0 ; - RECT 74400.0 367800.0 73200.0 366600.0 ; - RECT 69000.0 367800.0 70200.0 366600.0 ; - RECT 72000.0 370500.0 73200.0 369300.0 ; - RECT 73200.0 367800.0 74400.0 366600.0 ; - RECT 66600.0 361650.0 81000.0 360750.0 ; - RECT 66600.0 375450.0 81000.0 374550.0 ; - RECT 87600.0 363150.0 88800.0 361200.0 ; - RECT 87600.0 375000.0 88800.0 373050.0 ; - RECT 82800.0 373650.0 84000.0 375450.0 ; - RECT 82800.0 364350.0 84000.0 360750.0 ; - RECT 85500.0 373650.0 86400.0 364350.0 ; - RECT 82800.0 364350.0 84000.0 363150.0 ; - RECT 85200.0 364350.0 86400.0 363150.0 ; - RECT 85200.0 364350.0 86400.0 363150.0 ; - RECT 82800.0 364350.0 84000.0 363150.0 ; - RECT 82800.0 373650.0 84000.0 372450.0 ; - RECT 85200.0 373650.0 86400.0 372450.0 ; - RECT 85200.0 373650.0 86400.0 372450.0 ; - RECT 82800.0 373650.0 84000.0 372450.0 ; - RECT 87600.0 363750.0 88800.0 362550.0 ; - RECT 87600.0 373650.0 88800.0 372450.0 ; - RECT 83400.0 369000.0 84600.0 367800.0 ; - RECT 83400.0 369000.0 84600.0 367800.0 ; - RECT 85950.0 368850.0 86850.0 367950.0 ; - RECT 81000.0 361650.0 90600.0 360750.0 ; - RECT 81000.0 375450.0 90600.0 374550.0 ; - RECT 53250.0 367800.0 54450.0 369000.0 ; - RECT 55200.0 370200.0 56400.0 371400.0 ; - RECT 72000.0 369300.0 70800.0 370500.0 ; - RECT 63600.0 386850.0 64800.0 388800.0 ; - RECT 63600.0 375000.0 64800.0 376950.0 ; - RECT 58800.0 376350.0 60000.0 374550.0 ; - RECT 58800.0 385650.0 60000.0 389250.0 ; - RECT 61500.0 376350.0 62400.0 385650.0 ; - RECT 58800.0 385650.0 60000.0 386850.0 ; - RECT 61200.0 385650.0 62400.0 386850.0 ; - RECT 61200.0 385650.0 62400.0 386850.0 ; - RECT 58800.0 385650.0 60000.0 386850.0 ; - RECT 58800.0 376350.0 60000.0 377550.0 ; - RECT 61200.0 376350.0 62400.0 377550.0 ; - RECT 61200.0 376350.0 62400.0 377550.0 ; - RECT 58800.0 376350.0 60000.0 377550.0 ; - RECT 63600.0 386250.0 64800.0 387450.0 ; - RECT 63600.0 376350.0 64800.0 377550.0 ; - RECT 59400.0 381000.0 60600.0 382200.0 ; - RECT 59400.0 381000.0 60600.0 382200.0 ; - RECT 61950.0 381150.0 62850.0 382050.0 ; - RECT 57000.0 388350.0 66600.0 389250.0 ; - RECT 57000.0 374550.0 66600.0 375450.0 ; - RECT 68400.0 376950.0 69600.0 374550.0 ; - RECT 68400.0 385650.0 69600.0 389250.0 ; - RECT 73200.0 385650.0 74400.0 389250.0 ; - RECT 75600.0 386850.0 76800.0 388800.0 ; - RECT 75600.0 375000.0 76800.0 376950.0 ; - RECT 68400.0 385650.0 69600.0 386850.0 ; - RECT 70800.0 385650.0 72000.0 386850.0 ; - RECT 70800.0 385650.0 72000.0 386850.0 ; - RECT 68400.0 385650.0 69600.0 386850.0 ; - RECT 70800.0 385650.0 72000.0 386850.0 ; - RECT 73200.0 385650.0 74400.0 386850.0 ; - RECT 73200.0 385650.0 74400.0 386850.0 ; - RECT 70800.0 385650.0 72000.0 386850.0 ; - RECT 68400.0 376950.0 69600.0 378150.0 ; - RECT 70800.0 376950.0 72000.0 378150.0 ; - RECT 70800.0 376950.0 72000.0 378150.0 ; - RECT 68400.0 376950.0 69600.0 378150.0 ; - RECT 70800.0 376950.0 72000.0 378150.0 ; - RECT 73200.0 376950.0 74400.0 378150.0 ; - RECT 73200.0 376950.0 74400.0 378150.0 ; - RECT 70800.0 376950.0 72000.0 378150.0 ; - RECT 75600.0 386250.0 76800.0 387450.0 ; - RECT 75600.0 376350.0 76800.0 377550.0 ; - RECT 73200.0 379500.0 72000.0 380700.0 ; - RECT 70200.0 382200.0 69000.0 383400.0 ; - RECT 70800.0 385650.0 72000.0 386850.0 ; - RECT 73200.0 376950.0 74400.0 378150.0 ; - RECT 74400.0 382200.0 73200.0 383400.0 ; - RECT 69000.0 382200.0 70200.0 383400.0 ; - RECT 72000.0 379500.0 73200.0 380700.0 ; - RECT 73200.0 382200.0 74400.0 383400.0 ; - RECT 66600.0 388350.0 81000.0 389250.0 ; - RECT 66600.0 374550.0 81000.0 375450.0 ; - RECT 87600.0 386850.0 88800.0 388800.0 ; - RECT 87600.0 375000.0 88800.0 376950.0 ; - RECT 82800.0 376350.0 84000.0 374550.0 ; - RECT 82800.0 385650.0 84000.0 389250.0 ; - RECT 85500.0 376350.0 86400.0 385650.0 ; - RECT 82800.0 385650.0 84000.0 386850.0 ; - RECT 85200.0 385650.0 86400.0 386850.0 ; - RECT 85200.0 385650.0 86400.0 386850.0 ; - RECT 82800.0 385650.0 84000.0 386850.0 ; - RECT 82800.0 376350.0 84000.0 377550.0 ; - RECT 85200.0 376350.0 86400.0 377550.0 ; - RECT 85200.0 376350.0 86400.0 377550.0 ; - RECT 82800.0 376350.0 84000.0 377550.0 ; - RECT 87600.0 386250.0 88800.0 387450.0 ; - RECT 87600.0 376350.0 88800.0 377550.0 ; - RECT 83400.0 381000.0 84600.0 382200.0 ; - RECT 83400.0 381000.0 84600.0 382200.0 ; - RECT 85950.0 381150.0 86850.0 382050.0 ; - RECT 81000.0 388350.0 90600.0 389250.0 ; - RECT 81000.0 374550.0 90600.0 375450.0 ; - RECT 53250.0 381000.0 54450.0 382200.0 ; - RECT 55200.0 378600.0 56400.0 379800.0 ; - RECT 72000.0 379500.0 70800.0 380700.0 ; - RECT 63600.0 390750.0 64800.0 388800.0 ; - RECT 63600.0 402600.0 64800.0 400650.0 ; - RECT 58800.0 401250.0 60000.0 403050.0 ; - RECT 58800.0 391950.0 60000.0 388350.0 ; - RECT 61500.0 401250.0 62400.0 391950.0 ; - RECT 58800.0 391950.0 60000.0 390750.0 ; - RECT 61200.0 391950.0 62400.0 390750.0 ; - RECT 61200.0 391950.0 62400.0 390750.0 ; - RECT 58800.0 391950.0 60000.0 390750.0 ; - RECT 58800.0 401250.0 60000.0 400050.0 ; - RECT 61200.0 401250.0 62400.0 400050.0 ; - RECT 61200.0 401250.0 62400.0 400050.0 ; - RECT 58800.0 401250.0 60000.0 400050.0 ; - RECT 63600.0 391350.0 64800.0 390150.0 ; - RECT 63600.0 401250.0 64800.0 400050.0 ; - RECT 59400.0 396600.0 60600.0 395400.0 ; - RECT 59400.0 396600.0 60600.0 395400.0 ; - RECT 61950.0 396450.0 62850.0 395550.0 ; - RECT 57000.0 389250.0 66600.0 388350.0 ; - RECT 57000.0 403050.0 66600.0 402150.0 ; - RECT 68400.0 400650.0 69600.0 403050.0 ; - RECT 68400.0 391950.0 69600.0 388350.0 ; - RECT 73200.0 391950.0 74400.0 388350.0 ; - RECT 75600.0 390750.0 76800.0 388800.0 ; - RECT 75600.0 402600.0 76800.0 400650.0 ; - RECT 68400.0 391950.0 69600.0 390750.0 ; - RECT 70800.0 391950.0 72000.0 390750.0 ; - RECT 70800.0 391950.0 72000.0 390750.0 ; - RECT 68400.0 391950.0 69600.0 390750.0 ; - RECT 70800.0 391950.0 72000.0 390750.0 ; - RECT 73200.0 391950.0 74400.0 390750.0 ; - RECT 73200.0 391950.0 74400.0 390750.0 ; - RECT 70800.0 391950.0 72000.0 390750.0 ; - RECT 68400.0 400650.0 69600.0 399450.0 ; - RECT 70800.0 400650.0 72000.0 399450.0 ; - RECT 70800.0 400650.0 72000.0 399450.0 ; - RECT 68400.0 400650.0 69600.0 399450.0 ; - RECT 70800.0 400650.0 72000.0 399450.0 ; - RECT 73200.0 400650.0 74400.0 399450.0 ; - RECT 73200.0 400650.0 74400.0 399450.0 ; - RECT 70800.0 400650.0 72000.0 399450.0 ; - RECT 75600.0 391350.0 76800.0 390150.0 ; - RECT 75600.0 401250.0 76800.0 400050.0 ; - RECT 73200.0 398100.0 72000.0 396900.0 ; - RECT 70200.0 395400.0 69000.0 394200.0 ; - RECT 70800.0 391950.0 72000.0 390750.0 ; - RECT 73200.0 400650.0 74400.0 399450.0 ; - RECT 74400.0 395400.0 73200.0 394200.0 ; - RECT 69000.0 395400.0 70200.0 394200.0 ; - RECT 72000.0 398100.0 73200.0 396900.0 ; - RECT 73200.0 395400.0 74400.0 394200.0 ; - RECT 66600.0 389250.0 81000.0 388350.0 ; - RECT 66600.0 403050.0 81000.0 402150.0 ; - RECT 87600.0 390750.0 88800.0 388800.0 ; - RECT 87600.0 402600.0 88800.0 400650.0 ; - RECT 82800.0 401250.0 84000.0 403050.0 ; - RECT 82800.0 391950.0 84000.0 388350.0 ; - RECT 85500.0 401250.0 86400.0 391950.0 ; - RECT 82800.0 391950.0 84000.0 390750.0 ; - RECT 85200.0 391950.0 86400.0 390750.0 ; - RECT 85200.0 391950.0 86400.0 390750.0 ; - RECT 82800.0 391950.0 84000.0 390750.0 ; - RECT 82800.0 401250.0 84000.0 400050.0 ; - RECT 85200.0 401250.0 86400.0 400050.0 ; - RECT 85200.0 401250.0 86400.0 400050.0 ; - RECT 82800.0 401250.0 84000.0 400050.0 ; - RECT 87600.0 391350.0 88800.0 390150.0 ; - RECT 87600.0 401250.0 88800.0 400050.0 ; - RECT 83400.0 396600.0 84600.0 395400.0 ; - RECT 83400.0 396600.0 84600.0 395400.0 ; - RECT 85950.0 396450.0 86850.0 395550.0 ; - RECT 81000.0 389250.0 90600.0 388350.0 ; - RECT 81000.0 403050.0 90600.0 402150.0 ; - RECT 53250.0 395400.0 54450.0 396600.0 ; - RECT 55200.0 397800.0 56400.0 399000.0 ; - RECT 72000.0 396900.0 70800.0 398100.0 ; - RECT 63600.0 414450.0 64800.0 416400.0 ; - RECT 63600.0 402600.0 64800.0 404550.0 ; - RECT 58800.0 403950.0 60000.0 402150.0 ; - RECT 58800.0 413250.0 60000.0 416850.0 ; - RECT 61500.0 403950.0 62400.0 413250.0 ; - RECT 58800.0 413250.0 60000.0 414450.0 ; - RECT 61200.0 413250.0 62400.0 414450.0 ; - RECT 61200.0 413250.0 62400.0 414450.0 ; - RECT 58800.0 413250.0 60000.0 414450.0 ; - RECT 58800.0 403950.0 60000.0 405150.0 ; - RECT 61200.0 403950.0 62400.0 405150.0 ; - RECT 61200.0 403950.0 62400.0 405150.0 ; - RECT 58800.0 403950.0 60000.0 405150.0 ; - RECT 63600.0 413850.0 64800.0 415050.0 ; - RECT 63600.0 403950.0 64800.0 405150.0 ; - RECT 59400.0 408600.0 60600.0 409800.0 ; - RECT 59400.0 408600.0 60600.0 409800.0 ; - RECT 61950.0 408750.0 62850.0 409650.0 ; - RECT 57000.0 415950.0 66600.0 416850.0 ; - RECT 57000.0 402150.0 66600.0 403050.0 ; - RECT 68400.0 404550.0 69600.0 402150.0 ; - RECT 68400.0 413250.0 69600.0 416850.0 ; - RECT 73200.0 413250.0 74400.0 416850.0 ; - RECT 75600.0 414450.0 76800.0 416400.0 ; - RECT 75600.0 402600.0 76800.0 404550.0 ; - RECT 68400.0 413250.0 69600.0 414450.0 ; - RECT 70800.0 413250.0 72000.0 414450.0 ; - RECT 70800.0 413250.0 72000.0 414450.0 ; - RECT 68400.0 413250.0 69600.0 414450.0 ; - RECT 70800.0 413250.0 72000.0 414450.0 ; - RECT 73200.0 413250.0 74400.0 414450.0 ; - RECT 73200.0 413250.0 74400.0 414450.0 ; - RECT 70800.0 413250.0 72000.0 414450.0 ; - RECT 68400.0 404550.0 69600.0 405750.0 ; - RECT 70800.0 404550.0 72000.0 405750.0 ; - RECT 70800.0 404550.0 72000.0 405750.0 ; - RECT 68400.0 404550.0 69600.0 405750.0 ; - RECT 70800.0 404550.0 72000.0 405750.0 ; - RECT 73200.0 404550.0 74400.0 405750.0 ; - RECT 73200.0 404550.0 74400.0 405750.0 ; - RECT 70800.0 404550.0 72000.0 405750.0 ; - RECT 75600.0 413850.0 76800.0 415050.0 ; - RECT 75600.0 403950.0 76800.0 405150.0 ; - RECT 73200.0 407100.0 72000.0 408300.0 ; - RECT 70200.0 409800.0 69000.0 411000.0 ; - RECT 70800.0 413250.0 72000.0 414450.0 ; - RECT 73200.0 404550.0 74400.0 405750.0 ; - RECT 74400.0 409800.0 73200.0 411000.0 ; - RECT 69000.0 409800.0 70200.0 411000.0 ; - RECT 72000.0 407100.0 73200.0 408300.0 ; - RECT 73200.0 409800.0 74400.0 411000.0 ; - RECT 66600.0 415950.0 81000.0 416850.0 ; - RECT 66600.0 402150.0 81000.0 403050.0 ; - RECT 87600.0 414450.0 88800.0 416400.0 ; - RECT 87600.0 402600.0 88800.0 404550.0 ; - RECT 82800.0 403950.0 84000.0 402150.0 ; - RECT 82800.0 413250.0 84000.0 416850.0 ; - RECT 85500.0 403950.0 86400.0 413250.0 ; - RECT 82800.0 413250.0 84000.0 414450.0 ; - RECT 85200.0 413250.0 86400.0 414450.0 ; - RECT 85200.0 413250.0 86400.0 414450.0 ; - RECT 82800.0 413250.0 84000.0 414450.0 ; - RECT 82800.0 403950.0 84000.0 405150.0 ; - RECT 85200.0 403950.0 86400.0 405150.0 ; - RECT 85200.0 403950.0 86400.0 405150.0 ; - RECT 82800.0 403950.0 84000.0 405150.0 ; - RECT 87600.0 413850.0 88800.0 415050.0 ; - RECT 87600.0 403950.0 88800.0 405150.0 ; - RECT 83400.0 408600.0 84600.0 409800.0 ; - RECT 83400.0 408600.0 84600.0 409800.0 ; - RECT 85950.0 408750.0 86850.0 409650.0 ; - RECT 81000.0 415950.0 90600.0 416850.0 ; - RECT 81000.0 402150.0 90600.0 403050.0 ; - RECT 53250.0 408600.0 54450.0 409800.0 ; - RECT 55200.0 406200.0 56400.0 407400.0 ; - RECT 72000.0 407100.0 70800.0 408300.0 ; - RECT 63600.0 418350.0 64800.0 416400.0 ; - RECT 63600.0 430200.0 64800.0 428250.0 ; - RECT 58800.0 428850.0 60000.0 430650.0 ; - RECT 58800.0 419550.0 60000.0 415950.0 ; - RECT 61500.0 428850.0 62400.0 419550.0 ; - RECT 58800.0 419550.0 60000.0 418350.0 ; - RECT 61200.0 419550.0 62400.0 418350.0 ; - RECT 61200.0 419550.0 62400.0 418350.0 ; - RECT 58800.0 419550.0 60000.0 418350.0 ; - RECT 58800.0 428850.0 60000.0 427650.0 ; - RECT 61200.0 428850.0 62400.0 427650.0 ; - RECT 61200.0 428850.0 62400.0 427650.0 ; - RECT 58800.0 428850.0 60000.0 427650.0 ; - RECT 63600.0 418950.0 64800.0 417750.0 ; - RECT 63600.0 428850.0 64800.0 427650.0 ; - RECT 59400.0 424200.0 60600.0 423000.0 ; - RECT 59400.0 424200.0 60600.0 423000.0 ; - RECT 61950.0 424050.0 62850.0 423150.0 ; - RECT 57000.0 416850.0 66600.0 415950.0 ; - RECT 57000.0 430650.0 66600.0 429750.0 ; - RECT 68400.0 428250.0 69600.0 430650.0 ; - RECT 68400.0 419550.0 69600.0 415950.0 ; - RECT 73200.0 419550.0 74400.0 415950.0 ; - RECT 75600.0 418350.0 76800.0 416400.0 ; - RECT 75600.0 430200.0 76800.0 428250.0 ; - RECT 68400.0 419550.0 69600.0 418350.0 ; - RECT 70800.0 419550.0 72000.0 418350.0 ; - RECT 70800.0 419550.0 72000.0 418350.0 ; - RECT 68400.0 419550.0 69600.0 418350.0 ; - RECT 70800.0 419550.0 72000.0 418350.0 ; - RECT 73200.0 419550.0 74400.0 418350.0 ; - RECT 73200.0 419550.0 74400.0 418350.0 ; - RECT 70800.0 419550.0 72000.0 418350.0 ; - RECT 68400.0 428250.0 69600.0 427050.0 ; - RECT 70800.0 428250.0 72000.0 427050.0 ; - RECT 70800.0 428250.0 72000.0 427050.0 ; - RECT 68400.0 428250.0 69600.0 427050.0 ; - RECT 70800.0 428250.0 72000.0 427050.0 ; - RECT 73200.0 428250.0 74400.0 427050.0 ; - RECT 73200.0 428250.0 74400.0 427050.0 ; - RECT 70800.0 428250.0 72000.0 427050.0 ; - RECT 75600.0 418950.0 76800.0 417750.0 ; - RECT 75600.0 428850.0 76800.0 427650.0 ; - RECT 73200.0 425700.0 72000.0 424500.0 ; - RECT 70200.0 423000.0 69000.0 421800.0 ; - RECT 70800.0 419550.0 72000.0 418350.0 ; - RECT 73200.0 428250.0 74400.0 427050.0 ; - RECT 74400.0 423000.0 73200.0 421800.0 ; - RECT 69000.0 423000.0 70200.0 421800.0 ; - RECT 72000.0 425700.0 73200.0 424500.0 ; - RECT 73200.0 423000.0 74400.0 421800.0 ; - RECT 66600.0 416850.0 81000.0 415950.0 ; - RECT 66600.0 430650.0 81000.0 429750.0 ; - RECT 87600.0 418350.0 88800.0 416400.0 ; - RECT 87600.0 430200.0 88800.0 428250.0 ; - RECT 82800.0 428850.0 84000.0 430650.0 ; - RECT 82800.0 419550.0 84000.0 415950.0 ; - RECT 85500.0 428850.0 86400.0 419550.0 ; - RECT 82800.0 419550.0 84000.0 418350.0 ; - RECT 85200.0 419550.0 86400.0 418350.0 ; - RECT 85200.0 419550.0 86400.0 418350.0 ; - RECT 82800.0 419550.0 84000.0 418350.0 ; - RECT 82800.0 428850.0 84000.0 427650.0 ; - RECT 85200.0 428850.0 86400.0 427650.0 ; - RECT 85200.0 428850.0 86400.0 427650.0 ; - RECT 82800.0 428850.0 84000.0 427650.0 ; - RECT 87600.0 418950.0 88800.0 417750.0 ; - RECT 87600.0 428850.0 88800.0 427650.0 ; - RECT 83400.0 424200.0 84600.0 423000.0 ; - RECT 83400.0 424200.0 84600.0 423000.0 ; - RECT 85950.0 424050.0 86850.0 423150.0 ; - RECT 81000.0 416850.0 90600.0 415950.0 ; - RECT 81000.0 430650.0 90600.0 429750.0 ; - RECT 53250.0 423000.0 54450.0 424200.0 ; - RECT 55200.0 425400.0 56400.0 426600.0 ; - RECT 72000.0 424500.0 70800.0 425700.0 ; - RECT 50700.0 213150.0 55800.0 214050.0 ; - RECT 50700.0 232350.0 55800.0 233250.0 ; - RECT 50700.0 240750.0 55800.0 241650.0 ; - RECT 50700.0 259950.0 55800.0 260850.0 ; - RECT 50700.0 268350.0 55800.0 269250.0 ; - RECT 50700.0 287550.0 55800.0 288450.0 ; - RECT 50700.0 295950.0 55800.0 296850.0 ; - RECT 50700.0 315150.0 55800.0 316050.0 ; - RECT 50700.0 323550.0 55800.0 324450.0 ; - RECT 50700.0 342750.0 55800.0 343650.0 ; - RECT 50700.0 351150.0 55800.0 352050.0 ; - RECT 50700.0 370350.0 55800.0 371250.0 ; - RECT 50700.0 378750.0 55800.0 379650.0 ; - RECT 50700.0 397950.0 55800.0 398850.0 ; - RECT 50700.0 406350.0 55800.0 407250.0 ; - RECT 50700.0 425550.0 55800.0 426450.0 ; - RECT 85950.0 215550.0 86850.0 216450.0 ; - RECT 85950.0 229950.0 86850.0 230850.0 ; - RECT 85950.0 243150.0 86850.0 244050.0 ; - RECT 85950.0 257550.0 86850.0 258450.0 ; - RECT 85950.0 270750.0 86850.0 271650.0 ; - RECT 85950.0 285150.0 86850.0 286050.0 ; - RECT 85950.0 298350.0 86850.0 299250.0 ; - RECT 85950.0 312750.0 86850.0 313650.0 ; - RECT 85950.0 325950.0 86850.0 326850.0 ; - RECT 85950.0 340350.0 86850.0 341250.0 ; - RECT 85950.0 353550.0 86850.0 354450.0 ; - RECT 85950.0 367950.0 86850.0 368850.0 ; - RECT 85950.0 381150.0 86850.0 382050.0 ; - RECT 85950.0 395550.0 86850.0 396450.0 ; - RECT 85950.0 408750.0 86850.0 409650.0 ; - RECT 85950.0 423150.0 86850.0 424050.0 ; - RECT 50700.0 222750.0 57000.0 223650.0 ; - RECT 50700.0 250350.0 57000.0 251250.0 ; - RECT 50700.0 277950.0 57000.0 278850.0 ; - RECT 50700.0 305550.0 57000.0 306450.0 ; - RECT 50700.0 333150.0 57000.0 334050.0 ; - RECT 50700.0 360750.0 57000.0 361650.0 ; - RECT 50700.0 388350.0 57000.0 389250.0 ; - RECT 50700.0 415950.0 57000.0 416850.0 ; - RECT 50700.0 208950.0 57000.0 209850.0 ; - RECT 50700.0 236550.0 57000.0 237450.0 ; - RECT 50700.0 264150.0 57000.0 265050.0 ; - RECT 50700.0 291750.0 57000.0 292650.0 ; - RECT 50700.0 319350.0 57000.0 320250.0 ; - RECT 50700.0 346950.0 57000.0 347850.0 ; - RECT 50700.0 374550.0 57000.0 375450.0 ; - RECT 50700.0 402150.0 57000.0 403050.0 ; - RECT 50700.0 429750.0 57000.0 430650.0 ; - RECT 9900.0 93600.0 69900.0 83400.0 ; - RECT 9900.0 73200.0 69900.0 83400.0 ; - RECT 9900.0 73200.0 69900.0 63000.0 ; - RECT 9900.0 52800.0 69900.0 63000.0 ; - RECT 12300.0 93600.0 13200.0 52800.0 ; - RECT 66300.0 93600.0 67200.0 52800.0 ; - RECT 0.0 0.0 3600.0 3600.0 ; - RECT 0.0 453300.0 3600.0 456900.0 ; - RECT 139500.0 0.0 143100.0 3600.0 ; - RECT 139500.0 453300.0 143100.0 456900.0 ; - RECT 4950.0 4950.0 8550.0 8550.0 ; - RECT 4950.0 458250.0 8550.0 461850.0 ; - RECT 144450.0 4950.0 148050.0 8550.0 ; - RECT 144450.0 458250.0 148050.0 461850.0 ; - RECT 81300.0 101250.0 80100.0 102450.0 ; - RECT 86400.0 101100.0 85200.0 102300.0 ; - RECT 78300.0 115050.0 77100.0 116250.0 ; - RECT 89100.0 114900.0 87900.0 116100.0 ; - RECT 81300.0 156450.0 80100.0 157650.0 ; - RECT 91800.0 156300.0 90600.0 157500.0 ; - RECT 78300.0 170250.0 77100.0 171450.0 ; - RECT 94500.0 170100.0 93300.0 171300.0 ; - RECT 3600.0 98400.0 -5.3290705182e-12 99600.0 ; - RECT 3600.0 126000.0 -5.3290705182e-12 127200.0 ; - RECT 3600.0 153600.0 -5.3290705182e-12 154800.0 ; - RECT 3600.0 181200.0 -5.3290705182e-12 182400.0 ; - RECT 8550.0 112200.0 4950.0 113400.0 ; - RECT 8550.0 139800.0 4950.0 141000.0 ; - RECT 8550.0 167400.0 4950.0 168600.0 ; - RECT 8550.0 195000.0 4950.0 196200.0 ; - RECT 69300.0 87150.0 68100.0 88350.0 ; - RECT 86400.0 87150.0 85200.0 88350.0 ; - RECT 69300.0 78450.0 68100.0 79650.0 ; - RECT 89100.0 78450.0 87900.0 79650.0 ; - RECT 69300.0 66750.0 68100.0 67950.0 ; - RECT 91800.0 66750.0 90600.0 67950.0 ; - RECT 69300.0 58050.0 68100.0 59250.0 ; - RECT 94500.0 58050.0 93300.0 59250.0 ; - RECT 11100.0 82800.0 9900.0 84000.0 ; - RECT 3600.0 82800.0 -5.3290705182e-12 84000.0 ; - RECT 11100.0 62400.0 9900.0 63600.0 ; - RECT 3600.0 62400.0 -5.3290705182e-12 63600.0 ; - RECT 8550.0 50100.0 4950.0 51300.0 ; - RECT 105300.0 42150.0 104100.0 43350.0 ; - RECT 99900.0 37650.0 98700.0 38850.0 ; - RECT 102600.0 35250.0 101400.0 36450.0 ; - RECT 105300.0 438450.0 104100.0 439650.0 ; - RECT 108000.0 106950.0 106800.0 108150.0 ; - RECT 110700.0 205050.0 109500.0 206250.0 ; - RECT 97200.0 95100.0 96000.0 96300.0 ; - RECT 54450.0 431700.0 53250.0 432900.0 ; - RECT 97200.0 431700.0 96000.0 432900.0 ; - RECT 148050.0 449550.0 144450.0 450750.0 ; - RECT 148050.0 177750.0 144450.0 178950.0 ; - RECT 148050.0 109050.0 144450.0 110250.0 ; - RECT 148050.0 96150.0 144450.0 97350.0 ; - RECT 148050.0 19350.0 144450.0 20550.0 ; - RECT 8550.0 222600.0 4950.0 223800.0 ; - RECT 148050.0 222600.0 144450.0 223800.0 ; - RECT 8550.0 250200.0 4950.0 251400.0 ; - RECT 148050.0 250200.0 144450.0 251400.0 ; - RECT 8550.0 277800.0 4950.0 279000.0 ; - RECT 148050.0 277800.0 144450.0 279000.0 ; - RECT 8550.0 305400.0 4950.0 306600.0 ; - RECT 148050.0 305400.0 144450.0 306600.0 ; - RECT 8550.0 333000.0 4950.0 334200.0 ; - RECT 148050.0 333000.0 144450.0 334200.0 ; - RECT 8550.0 360600.0 4950.0 361800.0 ; - RECT 148050.0 360600.0 144450.0 361800.0 ; - RECT 8550.0 388200.0 4950.0 389400.0 ; - RECT 148050.0 388200.0 144450.0 389400.0 ; - RECT 8550.0 415800.0 4950.0 417000.0 ; - RECT 148050.0 415800.0 144450.0 417000.0 ; - RECT 143100.0 33150.0 139500.0 34350.0 ; - RECT 143100.0 202950.0 139500.0 204150.0 ; - RECT 143100.0 104850.0 139500.0 106050.0 ; - RECT 3600.0 208800.0 -5.3290705182e-12 210000.0 ; - RECT 3600.0 236400.0 -5.3290705182e-12 237600.0 ; - RECT 3600.0 264000.0 -5.3290705182e-12 265200.0 ; - RECT 3600.0 291600.0 -5.3290705182e-12 292800.0 ; - RECT 3600.0 319200.0 -5.3290705182e-12 320400.0 ; - RECT 3600.0 346800.0 -5.3290705182e-12 348000.0 ; - RECT 3600.0 374400.0 -5.3290705182e-12 375600.0 ; - RECT 3600.0 402000.0 -5.3290705182e-12 403200.0 ; - RECT 3600.0 429600.0 -5.3290705182e-12 430800.0 ; - RECT 0.0 4950.0 148050.0 8550.0 ; - RECT 0.0 458250.0 148050.0 461850.0 ; - RECT 0.0 0.0 148050.0 3600.0 ; - RECT 0.0 453300.0 148050.0 456900.0 ; - RECT -9150.0 187200.0 -10050.0 196800.0 ; - RECT -9000.0 203400.0 -9900.0 204300.0 ; - RECT -9450.0 203400.0 -9600.0 204300.0 ; - RECT -9000.0 203850.0 -9900.0 211200.0 ; - RECT -9000.0 223050.0 -9900.0 230400.0 ; - RECT -17250.0 238200.0 -22200.0 239100.0 ; - RECT -9150.0 186750.0 -10050.0 187650.0 ; - RECT -9150.0 203400.0 -10050.0 204300.0 ; - RECT -23550.0 341700.0 -24450.0 355050.0 ; - RECT -9000.0 252300.0 -9900.0 264450.0 ; - RECT -19500.0 184200.0 -22200.0 185100.0 ; - RECT -23100.0 264450.0 -24000.0 291300.0 ; - RECT -25800.0 269850.0 -26700.0 294300.0 ; - RECT -11100.0 283350.0 -12000.0 291900.0 ; - RECT -9150.0 280650.0 -10050.0 294300.0 ; - RECT -7200.0 272550.0 -8100.0 296700.0 ; - RECT -11100.0 306450.0 -12000.0 307350.0 ; - RECT -11100.0 297900.0 -12000.0 306900.0 ; - RECT -9600.0 306450.0 -11550.0 307350.0 ; - RECT -9000.0 308850.0 -9900.0 309750.0 ; - RECT -9450.0 308850.0 -9600.0 309750.0 ; - RECT -9000.0 309300.0 -9900.0 366900.0 ; - RECT -38700.0 283350.0 -39600.0 301500.0 ; - RECT -36750.0 272550.0 -37650.0 303900.0 ; - RECT -34800.0 275250.0 -35700.0 306300.0 ; - RECT -38700.0 316050.0 -39600.0 316950.0 ; - RECT -38700.0 307500.0 -39600.0 316500.0 ; - RECT -37200.0 316050.0 -39150.0 316950.0 ; - RECT -36750.0 318900.0 -37650.0 326100.0 ; - RECT -36750.0 328500.0 -37650.0 335700.0 ; - RECT -23550.0 341250.0 -24450.0 342150.0 ; - RECT -24000.0 341250.0 -24450.0 342150.0 ; - RECT -23550.0 339300.0 -24450.0 341700.0 ; - RECT -23550.0 329100.0 -24450.0 336300.0 ; - RECT -23100.0 296400.0 -24000.0 302700.0 ; - RECT -22350.0 312600.0 -23250.0 319800.0 ; - RECT -36750.0 338100.0 -37650.0 342300.0 ; - RECT -23550.0 322500.0 -24450.0 326700.0 ; - RECT -2550.0 181800.0 -3450.0 341700.0 ; - RECT -2550.0 267150.0 -3450.0 288300.0 ; - RECT -16350.0 181800.0 -17250.0 341700.0 ; - RECT -16350.0 277950.0 -17250.0 288300.0 ; - RECT -30150.0 288300.0 -31050.0 341700.0 ; - RECT -30150.0 267150.0 -31050.0 288300.0 ; - RECT -43950.0 288300.0 -44850.0 341700.0 ; - RECT -43950.0 277950.0 -44850.0 288300.0 ; - RECT -43950.0 341250.0 -44850.0 342150.0 ; - RECT -43950.0 339600.0 -44850.0 341700.0 ; - RECT -44400.0 341250.0 -49200.0 342150.0 ; - RECT -52800.0 181800.0 -42600.0 241800.0 ; - RECT -32400.0 181800.0 -42600.0 241800.0 ; - RECT -32400.0 181800.0 -22200.0 241800.0 ; - RECT -52800.0 184200.0 -22200.0 185100.0 ; - RECT -52800.0 238200.0 -22200.0 239100.0 ; - RECT -14850.0 190800.0 -16800.0 192000.0 ; - RECT -3000.0 190800.0 -4950.0 192000.0 ; - RECT -4350.0 186300.0 -13650.0 187200.0 ; - RECT -14250.0 183750.0 -16200.0 184650.0 ; - RECT -14250.0 188550.0 -16200.0 189450.0 ; - RECT -13650.0 183600.0 -14850.0 184800.0 ; - RECT -13650.0 188400.0 -14850.0 189600.0 ; - RECT -13650.0 186000.0 -14850.0 187200.0 ; - RECT -13650.0 186000.0 -14850.0 187200.0 ; - RECT -15750.0 183750.0 -16650.0 189450.0 ; - RECT -3000.0 183750.0 -4950.0 184650.0 ; - RECT -3000.0 188550.0 -4950.0 189450.0 ; - RECT -4350.0 183600.0 -5550.0 184800.0 ; - RECT -4350.0 188400.0 -5550.0 189600.0 ; - RECT -4350.0 186000.0 -5550.0 187200.0 ; - RECT -4350.0 186000.0 -5550.0 187200.0 ; - RECT -2550.0 183750.0 -3450.0 189450.0 ; - RECT -14250.0 190800.0 -15450.0 192000.0 ; - RECT -4350.0 190800.0 -5550.0 192000.0 ; - RECT -9000.0 184200.0 -10200.0 185400.0 ; - RECT -9000.0 184200.0 -10200.0 185400.0 ; - RECT -9150.0 186750.0 -10050.0 187650.0 ; - RECT -16350.0 181800.0 -17250.0 193800.0 ; - RECT -2550.0 181800.0 -3450.0 193800.0 ; - RECT -14850.0 205200.0 -16800.0 206400.0 ; - RECT -3000.0 205200.0 -4950.0 206400.0 ; - RECT -15450.0 195750.0 -17250.0 201450.0 ; - RECT -6750.0 202950.0 -11550.0 203850.0 ; - RECT -13950.0 195750.0 -15900.0 196650.0 ; - RECT -13950.0 200550.0 -15900.0 201450.0 ; - RECT -12000.0 198150.0 -13950.0 199050.0 ; - RECT -12000.0 202950.0 -13950.0 203850.0 ; - RECT -13350.0 195600.0 -14550.0 196800.0 ; - RECT -13350.0 200400.0 -14550.0 201600.0 ; - RECT -13350.0 198000.0 -14550.0 199200.0 ; - RECT -13350.0 202800.0 -14550.0 204000.0 ; - RECT -11550.0 198150.0 -12450.0 203850.0 ; - RECT -15450.0 195750.0 -16350.0 201450.0 ; - RECT -3300.0 195750.0 -5250.0 196650.0 ; - RECT -3300.0 200550.0 -5250.0 201450.0 ; - RECT -5250.0 198150.0 -7200.0 199050.0 ; - RECT -5250.0 202950.0 -7200.0 203850.0 ; - RECT -4650.0 195600.0 -5850.0 196800.0 ; - RECT -4650.0 200400.0 -5850.0 201600.0 ; - RECT -4650.0 198000.0 -5850.0 199200.0 ; - RECT -4650.0 202800.0 -5850.0 204000.0 ; - RECT -6750.0 198150.0 -7650.0 203850.0 ; - RECT -2850.0 195750.0 -3750.0 201450.0 ; - RECT -14250.0 205200.0 -15450.0 206400.0 ; - RECT -4350.0 205200.0 -5550.0 206400.0 ; - RECT -9000.0 196200.0 -10200.0 197400.0 ; - RECT -9000.0 196200.0 -10200.0 197400.0 ; - RECT -9150.0 203400.0 -10050.0 204300.0 ; - RECT -16350.0 193800.0 -17250.0 208200.0 ; - RECT -2550.0 193800.0 -3450.0 208200.0 ; - RECT -14850.0 224400.0 -16800.0 225600.0 ; - RECT -3000.0 224400.0 -4950.0 225600.0 ; - RECT -15000.0 210150.0 -17250.0 220650.0 ; - RECT -6900.0 222150.0 -11100.0 223050.0 ; - RECT -13500.0 210150.0 -15450.0 211050.0 ; - RECT -13500.0 214950.0 -15450.0 215850.0 ; - RECT -13500.0 219750.0 -15450.0 220650.0 ; - RECT -11550.0 212550.0 -13500.0 213450.0 ; - RECT -11550.0 217350.0 -13500.0 218250.0 ; - RECT -11550.0 222150.0 -13500.0 223050.0 ; - RECT -12900.0 210000.0 -14100.0 211200.0 ; - RECT -12900.0 214800.0 -14100.0 216000.0 ; - RECT -12900.0 219600.0 -14100.0 220800.0 ; - RECT -12900.0 212400.0 -14100.0 213600.0 ; - RECT -12900.0 217200.0 -14100.0 218400.0 ; - RECT -12900.0 222000.0 -14100.0 223200.0 ; - RECT -11100.0 212550.0 -12000.0 223050.0 ; - RECT -15000.0 210150.0 -15900.0 220650.0 ; - RECT -3450.0 210150.0 -5400.0 211050.0 ; - RECT -3450.0 214950.0 -5400.0 215850.0 ; - RECT -3450.0 219750.0 -5400.0 220650.0 ; - RECT -5400.0 212550.0 -7350.0 213450.0 ; - RECT -5400.0 217350.0 -7350.0 218250.0 ; - RECT -5400.0 222150.0 -7350.0 223050.0 ; - RECT -4800.0 210000.0 -6000.0 211200.0 ; - RECT -4800.0 214800.0 -6000.0 216000.0 ; - RECT -4800.0 219600.0 -6000.0 220800.0 ; - RECT -4800.0 212400.0 -6000.0 213600.0 ; - RECT -4800.0 217200.0 -6000.0 218400.0 ; - RECT -4800.0 222000.0 -6000.0 223200.0 ; - RECT -6900.0 212550.0 -7800.0 223050.0 ; - RECT -3000.0 210150.0 -3900.0 220650.0 ; - RECT -14250.0 224400.0 -15450.0 225600.0 ; - RECT -4350.0 224400.0 -5550.0 225600.0 ; - RECT -8850.0 210600.0 -10050.0 211800.0 ; - RECT -8850.0 210600.0 -10050.0 211800.0 ; - RECT -9000.0 222600.0 -9900.0 223500.0 ; - RECT -16350.0 208200.0 -17250.0 227400.0 ; - RECT -2550.0 208200.0 -3450.0 227400.0 ; - RECT -14850.0 255600.0 -16800.0 256800.0 ; - RECT -3000.0 255600.0 -4950.0 256800.0 ; - RECT -15000.0 229350.0 -17250.0 254250.0 ; - RECT -6900.0 250950.0 -11100.0 251850.0 ; - RECT -13500.0 229350.0 -15450.0 230250.0 ; - RECT -13500.0 234150.0 -15450.0 235050.0 ; - RECT -13500.0 238950.0 -15450.0 239850.0 ; - RECT -13500.0 243750.0 -15450.0 244650.0 ; - RECT -13500.0 248550.0 -15450.0 249450.0 ; - RECT -13500.0 253350.0 -15450.0 254250.0 ; - RECT -11550.0 231750.0 -13500.0 232650.0 ; - RECT -11550.0 236550.0 -13500.0 237450.0 ; - RECT -11550.0 241350.0 -13500.0 242250.0 ; - RECT -11550.0 246150.0 -13500.0 247050.0 ; - RECT -11550.0 250950.0 -13500.0 251850.0 ; - RECT -12900.0 229200.0 -14100.0 230400.0 ; - RECT -12900.0 234000.0 -14100.0 235200.0 ; - RECT -12900.0 238800.0 -14100.0 240000.0 ; - RECT -12900.0 243600.0 -14100.0 244800.0 ; - RECT -12900.0 248400.0 -14100.0 249600.0 ; - RECT -12900.0 253200.0 -14100.0 254400.0 ; - RECT -12900.0 231600.0 -14100.0 232800.0 ; - RECT -12900.0 236400.0 -14100.0 237600.0 ; - RECT -12900.0 241200.0 -14100.0 242400.0 ; - RECT -12900.0 246000.0 -14100.0 247200.0 ; - RECT -12900.0 250800.0 -14100.0 252000.0 ; - RECT -11100.0 231750.0 -12000.0 251850.0 ; - RECT -15000.0 229350.0 -15900.0 254250.0 ; - RECT -3450.0 229350.0 -5400.0 230250.0 ; - RECT -3450.0 234150.0 -5400.0 235050.0 ; - RECT -3450.0 238950.0 -5400.0 239850.0 ; - RECT -3450.0 243750.0 -5400.0 244650.0 ; - RECT -3450.0 248550.0 -5400.0 249450.0 ; - RECT -3450.0 253350.0 -5400.0 254250.0 ; - RECT -5400.0 231750.0 -7350.0 232650.0 ; - RECT -5400.0 236550.0 -7350.0 237450.0 ; - RECT -5400.0 241350.0 -7350.0 242250.0 ; - RECT -5400.0 246150.0 -7350.0 247050.0 ; - RECT -5400.0 250950.0 -7350.0 251850.0 ; - RECT -4800.0 229200.0 -6000.0 230400.0 ; - RECT -4800.0 234000.0 -6000.0 235200.0 ; - RECT -4800.0 238800.0 -6000.0 240000.0 ; - RECT -4800.0 243600.0 -6000.0 244800.0 ; - RECT -4800.0 248400.0 -6000.0 249600.0 ; - RECT -4800.0 253200.0 -6000.0 254400.0 ; - RECT -4800.0 231600.0 -6000.0 232800.0 ; - RECT -4800.0 236400.0 -6000.0 237600.0 ; - RECT -4800.0 241200.0 -6000.0 242400.0 ; - RECT -4800.0 246000.0 -6000.0 247200.0 ; - RECT -4800.0 250800.0 -6000.0 252000.0 ; - RECT -6900.0 231750.0 -7800.0 251850.0 ; - RECT -3000.0 229350.0 -3900.0 254250.0 ; - RECT -14250.0 255600.0 -15450.0 256800.0 ; - RECT -4350.0 255600.0 -5550.0 256800.0 ; - RECT -8850.0 229800.0 -10050.0 231000.0 ; - RECT -8850.0 229800.0 -10050.0 231000.0 ; - RECT -9000.0 251400.0 -9900.0 252300.0 ; - RECT -16350.0 227400.0 -17250.0 258600.0 ; - RECT -2550.0 227400.0 -3450.0 258600.0 ; - RECT -4950.0 290100.0 -2550.0 291300.0 ; - RECT -13650.0 290100.0 -17250.0 291300.0 ; - RECT -13650.0 294900.0 -17250.0 296100.0 ; - RECT -14850.0 299700.0 -16800.0 300900.0 ; - RECT -3000.0 299700.0 -4950.0 300900.0 ; - RECT -13650.0 290100.0 -14850.0 291300.0 ; - RECT -13650.0 292500.0 -14850.0 293700.0 ; - RECT -13650.0 292500.0 -14850.0 293700.0 ; - RECT -13650.0 290100.0 -14850.0 291300.0 ; - RECT -13650.0 292500.0 -14850.0 293700.0 ; - RECT -13650.0 294900.0 -14850.0 296100.0 ; - RECT -13650.0 294900.0 -14850.0 296100.0 ; - RECT -13650.0 292500.0 -14850.0 293700.0 ; - RECT -13650.0 294900.0 -14850.0 296100.0 ; - RECT -13650.0 297300.0 -14850.0 298500.0 ; - RECT -13650.0 297300.0 -14850.0 298500.0 ; - RECT -13650.0 294900.0 -14850.0 296100.0 ; - RECT -4950.0 290100.0 -6150.0 291300.0 ; - RECT -4950.0 292500.0 -6150.0 293700.0 ; - RECT -4950.0 292500.0 -6150.0 293700.0 ; - RECT -4950.0 290100.0 -6150.0 291300.0 ; - RECT -4950.0 292500.0 -6150.0 293700.0 ; - RECT -4950.0 294900.0 -6150.0 296100.0 ; - RECT -4950.0 294900.0 -6150.0 296100.0 ; - RECT -4950.0 292500.0 -6150.0 293700.0 ; - RECT -4950.0 294900.0 -6150.0 296100.0 ; - RECT -4950.0 297300.0 -6150.0 298500.0 ; - RECT -4950.0 297300.0 -6150.0 298500.0 ; - RECT -4950.0 294900.0 -6150.0 296100.0 ; - RECT -14250.0 299700.0 -15450.0 300900.0 ; - RECT -4350.0 299700.0 -5550.0 300900.0 ; - RECT -7050.0 297300.0 -8250.0 296100.0 ; - RECT -9000.0 294900.0 -10200.0 293700.0 ; - RECT -10950.0 292500.0 -12150.0 291300.0 ; - RECT -13650.0 292500.0 -14850.0 293700.0 ; - RECT -13650.0 297300.0 -14850.0 298500.0 ; - RECT -4950.0 297300.0 -6150.0 298500.0 ; - RECT -10950.0 297300.0 -12150.0 298500.0 ; - RECT -10950.0 291300.0 -12150.0 292500.0 ; - RECT -9000.0 293700.0 -10200.0 294900.0 ; - RECT -7050.0 296100.0 -8250.0 297300.0 ; - RECT -10950.0 297300.0 -12150.0 298500.0 ; - RECT -16350.0 288300.0 -17250.0 303900.0 ; - RECT -2550.0 288300.0 -3450.0 303900.0 ; - RECT -14850.0 310500.0 -16800.0 311700.0 ; - RECT -3000.0 310500.0 -4950.0 311700.0 ; - RECT -4350.0 305700.0 -2550.0 306900.0 ; - RECT -13650.0 305700.0 -17250.0 306900.0 ; - RECT -4350.0 308400.0 -13650.0 309300.0 ; - RECT -13650.0 305700.0 -14850.0 306900.0 ; - RECT -13650.0 308100.0 -14850.0 309300.0 ; - RECT -13650.0 308100.0 -14850.0 309300.0 ; - RECT -13650.0 305700.0 -14850.0 306900.0 ; - RECT -4350.0 305700.0 -5550.0 306900.0 ; - RECT -4350.0 308100.0 -5550.0 309300.0 ; - RECT -4350.0 308100.0 -5550.0 309300.0 ; - RECT -4350.0 305700.0 -5550.0 306900.0 ; - RECT -14250.0 310500.0 -15450.0 311700.0 ; - RECT -4350.0 310500.0 -5550.0 311700.0 ; - RECT -9000.0 306300.0 -10200.0 307500.0 ; - RECT -9000.0 306300.0 -10200.0 307500.0 ; - RECT -9150.0 308850.0 -10050.0 309750.0 ; - RECT -16350.0 303900.0 -17250.0 313500.0 ; - RECT -2550.0 303900.0 -3450.0 313500.0 ; - RECT -29250.0 290100.0 -31050.0 291300.0 ; - RECT -29250.0 294900.0 -31050.0 296100.0 ; - RECT -20550.0 290100.0 -16350.0 291300.0 ; - RECT -18750.0 297300.0 -16800.0 298500.0 ; - RECT -30600.0 297300.0 -28650.0 298500.0 ; - RECT -20550.0 290100.0 -19350.0 291300.0 ; - RECT -20550.0 292500.0 -19350.0 293700.0 ; - RECT -20550.0 292500.0 -19350.0 293700.0 ; - RECT -20550.0 290100.0 -19350.0 291300.0 ; - RECT -20550.0 292500.0 -19350.0 293700.0 ; - RECT -20550.0 294900.0 -19350.0 296100.0 ; - RECT -20550.0 294900.0 -19350.0 296100.0 ; - RECT -20550.0 292500.0 -19350.0 293700.0 ; - RECT -29250.0 290100.0 -28050.0 291300.0 ; - RECT -29250.0 292500.0 -28050.0 293700.0 ; - RECT -29250.0 292500.0 -28050.0 293700.0 ; - RECT -29250.0 290100.0 -28050.0 291300.0 ; - RECT -29250.0 292500.0 -28050.0 293700.0 ; - RECT -29250.0 294900.0 -28050.0 296100.0 ; - RECT -29250.0 294900.0 -28050.0 296100.0 ; - RECT -29250.0 292500.0 -28050.0 293700.0 ; - RECT -19350.0 297300.0 -18150.0 298500.0 ; - RECT -29250.0 297300.0 -28050.0 298500.0 ; - RECT -26850.0 294900.0 -25650.0 293700.0 ; - RECT -24150.0 291900.0 -22950.0 290700.0 ; - RECT -20550.0 294900.0 -19350.0 296100.0 ; - RECT -29250.0 293700.0 -28050.0 292500.0 ; - RECT -24150.0 297000.0 -22950.0 295800.0 ; - RECT -24150.0 290700.0 -22950.0 291900.0 ; - RECT -26850.0 293700.0 -25650.0 294900.0 ; - RECT -24150.0 295800.0 -22950.0 297000.0 ; - RECT -17250.0 288300.0 -16350.0 302700.0 ; - RECT -31050.0 288300.0 -30150.0 302700.0 ; - RECT -28650.0 307200.0 -31050.0 308400.0 ; - RECT -19950.0 307200.0 -16350.0 308400.0 ; - RECT -19950.0 312000.0 -16350.0 313200.0 ; - RECT -18750.0 314400.0 -16800.0 315600.0 ; - RECT -30600.0 314400.0 -28650.0 315600.0 ; - RECT -19950.0 307200.0 -18750.0 308400.0 ; - RECT -19950.0 309600.0 -18750.0 310800.0 ; - RECT -19950.0 309600.0 -18750.0 310800.0 ; - RECT -19950.0 307200.0 -18750.0 308400.0 ; - RECT -19950.0 309600.0 -18750.0 310800.0 ; - RECT -19950.0 312000.0 -18750.0 313200.0 ; - RECT -19950.0 312000.0 -18750.0 313200.0 ; - RECT -19950.0 309600.0 -18750.0 310800.0 ; - RECT -28650.0 307200.0 -27450.0 308400.0 ; - RECT -28650.0 309600.0 -27450.0 310800.0 ; - RECT -28650.0 309600.0 -27450.0 310800.0 ; - RECT -28650.0 307200.0 -27450.0 308400.0 ; - RECT -28650.0 309600.0 -27450.0 310800.0 ; - RECT -28650.0 312000.0 -27450.0 313200.0 ; - RECT -28650.0 312000.0 -27450.0 313200.0 ; - RECT -28650.0 309600.0 -27450.0 310800.0 ; - RECT -19350.0 314400.0 -18150.0 315600.0 ; - RECT -29250.0 314400.0 -28050.0 315600.0 ; - RECT -26100.0 312000.0 -24900.0 310800.0 ; - RECT -23400.0 309000.0 -22200.0 307800.0 ; - RECT -19950.0 309600.0 -18750.0 310800.0 ; - RECT -28650.0 312000.0 -27450.0 313200.0 ; - RECT -23400.0 313200.0 -22200.0 312000.0 ; - RECT -23400.0 307800.0 -22200.0 309000.0 ; - RECT -26100.0 310800.0 -24900.0 312000.0 ; - RECT -23400.0 312000.0 -22200.0 313200.0 ; - RECT -17250.0 305400.0 -16350.0 319800.0 ; - RECT -31050.0 305400.0 -30150.0 319800.0 ; - RECT -18750.0 325500.0 -16800.0 324300.0 ; - RECT -30600.0 325500.0 -28650.0 324300.0 ; - RECT -29250.0 330300.0 -31050.0 329100.0 ; - RECT -19950.0 330300.0 -16350.0 329100.0 ; - RECT -29250.0 327600.0 -19950.0 326700.0 ; - RECT -19950.0 330300.0 -18750.0 329100.0 ; - RECT -19950.0 327900.0 -18750.0 326700.0 ; - RECT -19950.0 327900.0 -18750.0 326700.0 ; - RECT -19950.0 330300.0 -18750.0 329100.0 ; - RECT -29250.0 330300.0 -28050.0 329100.0 ; - RECT -29250.0 327900.0 -28050.0 326700.0 ; - RECT -29250.0 327900.0 -28050.0 326700.0 ; - RECT -29250.0 330300.0 -28050.0 329100.0 ; - RECT -19350.0 325500.0 -18150.0 324300.0 ; - RECT -29250.0 325500.0 -28050.0 324300.0 ; - RECT -24600.0 329700.0 -23400.0 328500.0 ; - RECT -24600.0 329700.0 -23400.0 328500.0 ; - RECT -24450.0 327150.0 -23550.0 326250.0 ; - RECT -17250.0 332100.0 -16350.0 322500.0 ; - RECT -31050.0 332100.0 -30150.0 322500.0 ; - RECT -18750.0 335100.0 -16800.0 333900.0 ; - RECT -30600.0 335100.0 -28650.0 333900.0 ; - RECT -29250.0 339900.0 -31050.0 338700.0 ; - RECT -19950.0 339900.0 -16350.0 338700.0 ; - RECT -29250.0 337200.0 -19950.0 336300.0 ; - RECT -19950.0 339900.0 -18750.0 338700.0 ; - RECT -19950.0 337500.0 -18750.0 336300.0 ; - RECT -19950.0 337500.0 -18750.0 336300.0 ; - RECT -19950.0 339900.0 -18750.0 338700.0 ; - RECT -29250.0 339900.0 -28050.0 338700.0 ; - RECT -29250.0 337500.0 -28050.0 336300.0 ; - RECT -29250.0 337500.0 -28050.0 336300.0 ; - RECT -29250.0 339900.0 -28050.0 338700.0 ; - RECT -19350.0 335100.0 -18150.0 333900.0 ; - RECT -29250.0 335100.0 -28050.0 333900.0 ; - RECT -24600.0 339300.0 -23400.0 338100.0 ; - RECT -24600.0 339300.0 -23400.0 338100.0 ; - RECT -24450.0 336750.0 -23550.0 335850.0 ; - RECT -17250.0 341700.0 -16350.0 332100.0 ; - RECT -31050.0 341700.0 -30150.0 332100.0 ; - RECT -32550.0 299700.0 -30150.0 300900.0 ; - RECT -41250.0 299700.0 -44850.0 300900.0 ; - RECT -41250.0 304500.0 -44850.0 305700.0 ; - RECT -42450.0 309300.0 -44400.0 310500.0 ; - RECT -30600.0 309300.0 -32550.0 310500.0 ; - RECT -41250.0 299700.0 -42450.0 300900.0 ; - RECT -41250.0 302100.0 -42450.0 303300.0 ; - RECT -41250.0 302100.0 -42450.0 303300.0 ; - RECT -41250.0 299700.0 -42450.0 300900.0 ; - RECT -41250.0 302100.0 -42450.0 303300.0 ; - RECT -41250.0 304500.0 -42450.0 305700.0 ; - RECT -41250.0 304500.0 -42450.0 305700.0 ; - RECT -41250.0 302100.0 -42450.0 303300.0 ; - RECT -41250.0 304500.0 -42450.0 305700.0 ; - RECT -41250.0 306900.0 -42450.0 308100.0 ; - RECT -41250.0 306900.0 -42450.0 308100.0 ; - RECT -41250.0 304500.0 -42450.0 305700.0 ; - RECT -32550.0 299700.0 -33750.0 300900.0 ; - RECT -32550.0 302100.0 -33750.0 303300.0 ; - RECT -32550.0 302100.0 -33750.0 303300.0 ; - RECT -32550.0 299700.0 -33750.0 300900.0 ; - RECT -32550.0 302100.0 -33750.0 303300.0 ; - RECT -32550.0 304500.0 -33750.0 305700.0 ; - RECT -32550.0 304500.0 -33750.0 305700.0 ; - RECT -32550.0 302100.0 -33750.0 303300.0 ; - RECT -32550.0 304500.0 -33750.0 305700.0 ; - RECT -32550.0 306900.0 -33750.0 308100.0 ; - RECT -32550.0 306900.0 -33750.0 308100.0 ; - RECT -32550.0 304500.0 -33750.0 305700.0 ; - RECT -41850.0 309300.0 -43050.0 310500.0 ; - RECT -31950.0 309300.0 -33150.0 310500.0 ; - RECT -34650.0 306900.0 -35850.0 305700.0 ; - RECT -36600.0 304500.0 -37800.0 303300.0 ; - RECT -38550.0 302100.0 -39750.0 300900.0 ; - RECT -41250.0 302100.0 -42450.0 303300.0 ; - RECT -41250.0 306900.0 -42450.0 308100.0 ; - RECT -32550.0 306900.0 -33750.0 308100.0 ; - RECT -38550.0 306900.0 -39750.0 308100.0 ; - RECT -38550.0 300900.0 -39750.0 302100.0 ; - RECT -36600.0 303300.0 -37800.0 304500.0 ; - RECT -34650.0 305700.0 -35850.0 306900.0 ; - RECT -38550.0 306900.0 -39750.0 308100.0 ; - RECT -43950.0 297900.0 -44850.0 313500.0 ; - RECT -30150.0 297900.0 -31050.0 313500.0 ; - RECT -42450.0 320100.0 -44400.0 321300.0 ; - RECT -30600.0 320100.0 -32550.0 321300.0 ; - RECT -31950.0 315300.0 -30150.0 316500.0 ; - RECT -41250.0 315300.0 -44850.0 316500.0 ; - RECT -31950.0 318000.0 -41250.0 318900.0 ; - RECT -41250.0 315300.0 -42450.0 316500.0 ; - RECT -41250.0 317700.0 -42450.0 318900.0 ; - RECT -41250.0 317700.0 -42450.0 318900.0 ; - RECT -41250.0 315300.0 -42450.0 316500.0 ; - RECT -31950.0 315300.0 -33150.0 316500.0 ; - RECT -31950.0 317700.0 -33150.0 318900.0 ; - RECT -31950.0 317700.0 -33150.0 318900.0 ; - RECT -31950.0 315300.0 -33150.0 316500.0 ; - RECT -41850.0 320100.0 -43050.0 321300.0 ; - RECT -31950.0 320100.0 -33150.0 321300.0 ; - RECT -36600.0 315900.0 -37800.0 317100.0 ; - RECT -36600.0 315900.0 -37800.0 317100.0 ; - RECT -36750.0 318450.0 -37650.0 319350.0 ; - RECT -43950.0 313500.0 -44850.0 323100.0 ; - RECT -30150.0 313500.0 -31050.0 323100.0 ; - RECT -42450.0 329700.0 -44400.0 330900.0 ; - RECT -30600.0 329700.0 -32550.0 330900.0 ; - RECT -31950.0 324900.0 -30150.0 326100.0 ; - RECT -41250.0 324900.0 -44850.0 326100.0 ; - RECT -31950.0 327600.0 -41250.0 328500.0 ; - RECT -41250.0 324900.0 -42450.0 326100.0 ; - RECT -41250.0 327300.0 -42450.0 328500.0 ; - RECT -41250.0 327300.0 -42450.0 328500.0 ; - RECT -41250.0 324900.0 -42450.0 326100.0 ; - RECT -31950.0 324900.0 -33150.0 326100.0 ; - RECT -31950.0 327300.0 -33150.0 328500.0 ; - RECT -31950.0 327300.0 -33150.0 328500.0 ; - RECT -31950.0 324900.0 -33150.0 326100.0 ; - RECT -41850.0 329700.0 -43050.0 330900.0 ; - RECT -31950.0 329700.0 -33150.0 330900.0 ; - RECT -36600.0 325500.0 -37800.0 326700.0 ; - RECT -36600.0 325500.0 -37800.0 326700.0 ; - RECT -36750.0 328050.0 -37650.0 328950.0 ; - RECT -43950.0 323100.0 -44850.0 332700.0 ; - RECT -30150.0 323100.0 -31050.0 332700.0 ; - RECT -42450.0 339300.0 -44400.0 340500.0 ; - RECT -30600.0 339300.0 -32550.0 340500.0 ; - RECT -31950.0 334500.0 -30150.0 335700.0 ; - RECT -41250.0 334500.0 -44850.0 335700.0 ; - RECT -31950.0 337200.0 -41250.0 338100.0 ; - RECT -41250.0 334500.0 -42450.0 335700.0 ; - RECT -41250.0 336900.0 -42450.0 338100.0 ; - RECT -41250.0 336900.0 -42450.0 338100.0 ; - RECT -41250.0 334500.0 -42450.0 335700.0 ; - RECT -31950.0 334500.0 -33150.0 335700.0 ; - RECT -31950.0 336900.0 -33150.0 338100.0 ; - RECT -31950.0 336900.0 -33150.0 338100.0 ; - RECT -31950.0 334500.0 -33150.0 335700.0 ; - RECT -41850.0 339300.0 -43050.0 340500.0 ; - RECT -31950.0 339300.0 -33150.0 340500.0 ; - RECT -36600.0 335100.0 -37800.0 336300.0 ; - RECT -36600.0 335100.0 -37800.0 336300.0 ; - RECT -36750.0 337650.0 -37650.0 338550.0 ; - RECT -43950.0 332700.0 -44850.0 342300.0 ; - RECT -30150.0 332700.0 -31050.0 342300.0 ; - RECT -30150.0 459150.0 -31050.0 437100.0 ; - RECT -31050.0 376350.0 -35400.0 377250.0 ; - RECT -31050.0 399750.0 -35400.0 400650.0 ; - RECT -31050.0 403950.0 -35400.0 404850.0 ; - RECT -31050.0 427350.0 -35400.0 428250.0 ; - RECT -30150.0 350850.0 -36000.0 351750.0 ; - RECT -36000.0 350850.0 -46200.0 351750.0 ; - RECT -48300.0 387900.0 -36000.0 388800.0 ; - RECT -48300.0 415500.0 -36000.0 416400.0 ; - RECT -48300.0 360300.0 -36000.0 361200.0 ; - RECT -23550.0 377100.0 -24450.0 389700.0 ; - RECT -23550.0 372150.0 -24450.0 373050.0 ; - RECT -23550.0 372600.0 -24450.0 377100.0 ; - RECT -24000.0 372150.0 -35400.0 373050.0 ; - RECT -16800.0 377850.0 -19050.0 378750.0 ; - RECT -19200.0 363150.0 -20100.0 364050.0 ; - RECT -23550.0 363150.0 -24450.0 364050.0 ; - RECT -19200.0 363600.0 -20100.0 375300.0 ; - RECT -19650.0 363150.0 -24000.0 364050.0 ; - RECT -23550.0 358500.0 -24450.0 363600.0 ; - RECT -24000.0 363150.0 -32850.0 364050.0 ; - RECT -32850.0 355050.0 -39600.0 355950.0 ; - RECT -23400.0 357300.0 -24600.0 358500.0 ; - RECT -23550.0 389700.0 -24450.0 393450.0 ; - RECT -18750.0 354300.0 -16800.0 353100.0 ; - RECT -30600.0 354300.0 -28650.0 353100.0 ; - RECT -29250.0 359100.0 -31050.0 357900.0 ; - RECT -19950.0 359100.0 -16350.0 357900.0 ; - RECT -29250.0 356400.0 -19950.0 355500.0 ; - RECT -19950.0 359100.0 -18750.0 357900.0 ; - RECT -19950.0 356700.0 -18750.0 355500.0 ; - RECT -19950.0 356700.0 -18750.0 355500.0 ; - RECT -19950.0 359100.0 -18750.0 357900.0 ; - RECT -29250.0 359100.0 -28050.0 357900.0 ; - RECT -29250.0 356700.0 -28050.0 355500.0 ; - RECT -29250.0 356700.0 -28050.0 355500.0 ; - RECT -29250.0 359100.0 -28050.0 357900.0 ; - RECT -19350.0 354300.0 -18150.0 353100.0 ; - RECT -29250.0 354300.0 -28050.0 353100.0 ; - RECT -24600.0 358500.0 -23400.0 357300.0 ; - RECT -24600.0 358500.0 -23400.0 357300.0 ; - RECT -24450.0 355950.0 -23550.0 355050.0 ; - RECT -17250.0 360900.0 -16350.0 351300.0 ; - RECT -31050.0 360900.0 -30150.0 351300.0 ; - RECT -20250.0 375300.0 -19050.0 376500.0 ; - RECT -20250.0 377700.0 -19050.0 378900.0 ; - RECT -20250.0 377700.0 -19050.0 378900.0 ; - RECT -20250.0 375300.0 -19050.0 376500.0 ; - RECT -31050.0 458250.0 -30150.0 459150.0 ; - RECT -3450.0 458250.0 -2550.0 459150.0 ; - RECT -31050.0 456900.0 -30150.0 458700.0 ; - RECT -30600.0 458250.0 -3000.0 459150.0 ; - RECT -3450.0 456900.0 -2550.0 458700.0 ; - RECT -14850.0 396300.0 -16800.0 397500.0 ; - RECT -3000.0 396300.0 -4950.0 397500.0 ; - RECT -4350.0 391500.0 -2550.0 392700.0 ; - RECT -13650.0 391500.0 -17250.0 392700.0 ; - RECT -4350.0 394200.0 -13650.0 395100.0 ; - RECT -13650.0 391500.0 -14850.0 392700.0 ; - RECT -13650.0 393900.0 -14850.0 395100.0 ; - RECT -13650.0 393900.0 -14850.0 395100.0 ; - RECT -13650.0 391500.0 -14850.0 392700.0 ; - RECT -4350.0 391500.0 -5550.0 392700.0 ; - RECT -4350.0 393900.0 -5550.0 395100.0 ; - RECT -4350.0 393900.0 -5550.0 395100.0 ; - RECT -4350.0 391500.0 -5550.0 392700.0 ; - RECT -14250.0 396300.0 -15450.0 397500.0 ; - RECT -4350.0 396300.0 -5550.0 397500.0 ; - RECT -9000.0 392100.0 -10200.0 393300.0 ; - RECT -9000.0 392100.0 -10200.0 393300.0 ; - RECT -9150.0 394650.0 -10050.0 395550.0 ; - RECT -16350.0 389700.0 -17250.0 399300.0 ; - RECT -2550.0 389700.0 -3450.0 399300.0 ; - RECT -14850.0 405900.0 -16800.0 407100.0 ; - RECT -3000.0 405900.0 -4950.0 407100.0 ; - RECT -4350.0 401100.0 -2550.0 402300.0 ; - RECT -13650.0 401100.0 -17250.0 402300.0 ; - RECT -4350.0 403800.0 -13650.0 404700.0 ; - RECT -13650.0 401100.0 -14850.0 402300.0 ; - RECT -13650.0 403500.0 -14850.0 404700.0 ; - RECT -13650.0 403500.0 -14850.0 404700.0 ; - RECT -13650.0 401100.0 -14850.0 402300.0 ; - RECT -4350.0 401100.0 -5550.0 402300.0 ; - RECT -4350.0 403500.0 -5550.0 404700.0 ; - RECT -4350.0 403500.0 -5550.0 404700.0 ; - RECT -4350.0 401100.0 -5550.0 402300.0 ; - RECT -14250.0 405900.0 -15450.0 407100.0 ; - RECT -4350.0 405900.0 -5550.0 407100.0 ; - RECT -9000.0 401700.0 -10200.0 402900.0 ; - RECT -9000.0 401700.0 -10200.0 402900.0 ; - RECT -9150.0 404250.0 -10050.0 405150.0 ; - RECT -16350.0 399300.0 -17250.0 408900.0 ; - RECT -2550.0 399300.0 -3450.0 408900.0 ; - RECT -10200.0 401700.0 -9000.0 402900.0 ; - RECT -14850.0 415500.0 -16800.0 416700.0 ; - RECT -3000.0 415500.0 -4950.0 416700.0 ; - RECT -4350.0 410700.0 -2550.0 411900.0 ; - RECT -13650.0 410700.0 -17250.0 411900.0 ; - RECT -4350.0 413400.0 -13650.0 414300.0 ; - RECT -13650.0 410700.0 -14850.0 411900.0 ; - RECT -13650.0 413100.0 -14850.0 414300.0 ; - RECT -13650.0 413100.0 -14850.0 414300.0 ; - RECT -13650.0 410700.0 -14850.0 411900.0 ; - RECT -4350.0 410700.0 -5550.0 411900.0 ; - RECT -4350.0 413100.0 -5550.0 414300.0 ; - RECT -4350.0 413100.0 -5550.0 414300.0 ; - RECT -4350.0 410700.0 -5550.0 411900.0 ; - RECT -14250.0 415500.0 -15450.0 416700.0 ; - RECT -4350.0 415500.0 -5550.0 416700.0 ; - RECT -9000.0 411300.0 -10200.0 412500.0 ; - RECT -9000.0 411300.0 -10200.0 412500.0 ; - RECT -9150.0 413850.0 -10050.0 414750.0 ; - RECT -16350.0 408900.0 -17250.0 418500.0 ; - RECT -2550.0 408900.0 -3450.0 418500.0 ; - RECT -10200.0 411300.0 -9000.0 412500.0 ; - RECT -14850.0 425100.0 -16800.0 426300.0 ; - RECT -3000.0 425100.0 -4950.0 426300.0 ; - RECT -4350.0 420300.0 -2550.0 421500.0 ; - RECT -13650.0 420300.0 -17250.0 421500.0 ; - RECT -4350.0 423000.0 -13650.0 423900.0 ; - RECT -13650.0 420300.0 -14850.0 421500.0 ; - RECT -13650.0 422700.0 -14850.0 423900.0 ; - RECT -13650.0 422700.0 -14850.0 423900.0 ; - RECT -13650.0 420300.0 -14850.0 421500.0 ; - RECT -4350.0 420300.0 -5550.0 421500.0 ; - RECT -4350.0 422700.0 -5550.0 423900.0 ; - RECT -4350.0 422700.0 -5550.0 423900.0 ; - RECT -4350.0 420300.0 -5550.0 421500.0 ; - RECT -14250.0 425100.0 -15450.0 426300.0 ; - RECT -4350.0 425100.0 -5550.0 426300.0 ; - RECT -9000.0 420900.0 -10200.0 422100.0 ; - RECT -9000.0 420900.0 -10200.0 422100.0 ; - RECT -9150.0 423450.0 -10050.0 424350.0 ; - RECT -16350.0 418500.0 -17250.0 428100.0 ; - RECT -2550.0 418500.0 -3450.0 428100.0 ; - RECT -10200.0 420900.0 -9000.0 422100.0 ; - RECT -14850.0 434700.0 -16800.0 435900.0 ; - RECT -3000.0 434700.0 -4950.0 435900.0 ; - RECT -4350.0 429900.0 -2550.0 431100.0 ; - RECT -13650.0 429900.0 -17250.0 431100.0 ; - RECT -4350.0 432600.0 -13650.0 433500.0 ; - RECT -13650.0 429900.0 -14850.0 431100.0 ; - RECT -13650.0 432300.0 -14850.0 433500.0 ; - RECT -13650.0 432300.0 -14850.0 433500.0 ; - RECT -13650.0 429900.0 -14850.0 431100.0 ; - RECT -4350.0 429900.0 -5550.0 431100.0 ; - RECT -4350.0 432300.0 -5550.0 433500.0 ; - RECT -4350.0 432300.0 -5550.0 433500.0 ; - RECT -4350.0 429900.0 -5550.0 431100.0 ; - RECT -14250.0 434700.0 -15450.0 435900.0 ; - RECT -4350.0 434700.0 -5550.0 435900.0 ; - RECT -9000.0 430500.0 -10200.0 431700.0 ; - RECT -9000.0 430500.0 -10200.0 431700.0 ; - RECT -9150.0 433050.0 -10050.0 433950.0 ; - RECT -16350.0 428100.0 -17250.0 437700.0 ; - RECT -2550.0 428100.0 -3450.0 437700.0 ; - RECT -10200.0 430500.0 -9000.0 431700.0 ; - RECT -14850.0 444300.0 -16800.0 445500.0 ; - RECT -3000.0 444300.0 -4950.0 445500.0 ; - RECT -4350.0 439500.0 -2550.0 440700.0 ; - RECT -13650.0 439500.0 -17250.0 440700.0 ; - RECT -4350.0 442200.0 -13650.0 443100.0 ; - RECT -13650.0 439500.0 -14850.0 440700.0 ; - RECT -13650.0 441900.0 -14850.0 443100.0 ; - RECT -13650.0 441900.0 -14850.0 443100.0 ; - RECT -13650.0 439500.0 -14850.0 440700.0 ; - RECT -4350.0 439500.0 -5550.0 440700.0 ; - RECT -4350.0 441900.0 -5550.0 443100.0 ; - RECT -4350.0 441900.0 -5550.0 443100.0 ; - RECT -4350.0 439500.0 -5550.0 440700.0 ; - RECT -14250.0 444300.0 -15450.0 445500.0 ; - RECT -4350.0 444300.0 -5550.0 445500.0 ; - RECT -9000.0 440100.0 -10200.0 441300.0 ; - RECT -9000.0 440100.0 -10200.0 441300.0 ; - RECT -9150.0 442650.0 -10050.0 443550.0 ; - RECT -16350.0 437700.0 -17250.0 447300.0 ; - RECT -2550.0 437700.0 -3450.0 447300.0 ; - RECT -10200.0 440100.0 -9000.0 441300.0 ; - RECT -14850.0 453900.0 -16800.0 455100.0 ; - RECT -3000.0 453900.0 -4950.0 455100.0 ; - RECT -4350.0 449100.0 -2550.0 450300.0 ; - RECT -13650.0 449100.0 -17250.0 450300.0 ; - RECT -4350.0 451800.0 -13650.0 452700.0 ; - RECT -13650.0 449100.0 -14850.0 450300.0 ; - RECT -13650.0 451500.0 -14850.0 452700.0 ; - RECT -13650.0 451500.0 -14850.0 452700.0 ; - RECT -13650.0 449100.0 -14850.0 450300.0 ; - RECT -4350.0 449100.0 -5550.0 450300.0 ; - RECT -4350.0 451500.0 -5550.0 452700.0 ; - RECT -4350.0 451500.0 -5550.0 452700.0 ; - RECT -4350.0 449100.0 -5550.0 450300.0 ; - RECT -14250.0 453900.0 -15450.0 455100.0 ; - RECT -4350.0 453900.0 -5550.0 455100.0 ; - RECT -9000.0 449700.0 -10200.0 450900.0 ; - RECT -9000.0 449700.0 -10200.0 450900.0 ; - RECT -9150.0 452250.0 -10050.0 453150.0 ; - RECT -16350.0 447300.0 -17250.0 456900.0 ; - RECT -2550.0 447300.0 -3450.0 456900.0 ; - RECT -10200.0 449700.0 -9000.0 450900.0 ; - RECT -18750.0 440700.0 -16800.0 439500.0 ; - RECT -30600.0 440700.0 -28650.0 439500.0 ; - RECT -29250.0 445500.0 -31050.0 444300.0 ; - RECT -19950.0 445500.0 -16350.0 444300.0 ; - RECT -29250.0 442800.0 -19950.0 441900.0 ; - RECT -19950.0 445500.0 -18750.0 444300.0 ; - RECT -19950.0 443100.0 -18750.0 441900.0 ; - RECT -19950.0 443100.0 -18750.0 441900.0 ; - RECT -19950.0 445500.0 -18750.0 444300.0 ; - RECT -29250.0 445500.0 -28050.0 444300.0 ; - RECT -29250.0 443100.0 -28050.0 441900.0 ; - RECT -29250.0 443100.0 -28050.0 441900.0 ; - RECT -29250.0 445500.0 -28050.0 444300.0 ; - RECT -19350.0 440700.0 -18150.0 439500.0 ; - RECT -29250.0 440700.0 -28050.0 439500.0 ; - RECT -24600.0 444900.0 -23400.0 443700.0 ; - RECT -24600.0 444900.0 -23400.0 443700.0 ; - RECT -24450.0 442350.0 -23550.0 441450.0 ; - RECT -17250.0 447300.0 -16350.0 437700.0 ; - RECT -31050.0 447300.0 -30150.0 437700.0 ; - RECT -24600.0 443700.0 -23400.0 444900.0 ; - RECT -18750.0 431100.0 -16800.0 429900.0 ; - RECT -30600.0 431100.0 -28650.0 429900.0 ; - RECT -29250.0 435900.0 -31050.0 434700.0 ; - RECT -19950.0 435900.0 -16350.0 434700.0 ; - RECT -29250.0 433200.0 -19950.0 432300.0 ; - RECT -19950.0 435900.0 -18750.0 434700.0 ; - RECT -19950.0 433500.0 -18750.0 432300.0 ; - RECT -19950.0 433500.0 -18750.0 432300.0 ; - RECT -19950.0 435900.0 -18750.0 434700.0 ; - RECT -29250.0 435900.0 -28050.0 434700.0 ; - RECT -29250.0 433500.0 -28050.0 432300.0 ; - RECT -29250.0 433500.0 -28050.0 432300.0 ; - RECT -29250.0 435900.0 -28050.0 434700.0 ; - RECT -19350.0 431100.0 -18150.0 429900.0 ; - RECT -29250.0 431100.0 -28050.0 429900.0 ; - RECT -24600.0 435300.0 -23400.0 434100.0 ; - RECT -24600.0 435300.0 -23400.0 434100.0 ; - RECT -24450.0 432750.0 -23550.0 431850.0 ; - RECT -17250.0 437700.0 -16350.0 428100.0 ; - RECT -31050.0 437700.0 -30150.0 428100.0 ; - RECT -24600.0 434100.0 -23400.0 435300.0 ; - RECT -18750.0 421500.0 -16800.0 420300.0 ; - RECT -30600.0 421500.0 -28650.0 420300.0 ; - RECT -29250.0 426300.0 -31050.0 425100.0 ; - RECT -19950.0 426300.0 -16350.0 425100.0 ; - RECT -29250.0 423600.0 -19950.0 422700.0 ; - RECT -19950.0 426300.0 -18750.0 425100.0 ; - RECT -19950.0 423900.0 -18750.0 422700.0 ; - RECT -19950.0 423900.0 -18750.0 422700.0 ; - RECT -19950.0 426300.0 -18750.0 425100.0 ; - RECT -29250.0 426300.0 -28050.0 425100.0 ; - RECT -29250.0 423900.0 -28050.0 422700.0 ; - RECT -29250.0 423900.0 -28050.0 422700.0 ; - RECT -29250.0 426300.0 -28050.0 425100.0 ; - RECT -19350.0 421500.0 -18150.0 420300.0 ; - RECT -29250.0 421500.0 -28050.0 420300.0 ; - RECT -24600.0 425700.0 -23400.0 424500.0 ; - RECT -24600.0 425700.0 -23400.0 424500.0 ; - RECT -24450.0 423150.0 -23550.0 422250.0 ; - RECT -17250.0 428100.0 -16350.0 418500.0 ; - RECT -31050.0 428100.0 -30150.0 418500.0 ; - RECT -24600.0 424500.0 -23400.0 425700.0 ; - RECT -18750.0 411900.0 -16800.0 410700.0 ; - RECT -30600.0 411900.0 -28650.0 410700.0 ; - RECT -29250.0 416700.0 -31050.0 415500.0 ; - RECT -19950.0 416700.0 -16350.0 415500.0 ; - RECT -29250.0 414000.0 -19950.0 413100.0 ; - RECT -19950.0 416700.0 -18750.0 415500.0 ; - RECT -19950.0 414300.0 -18750.0 413100.0 ; - RECT -19950.0 414300.0 -18750.0 413100.0 ; - RECT -19950.0 416700.0 -18750.0 415500.0 ; - RECT -29250.0 416700.0 -28050.0 415500.0 ; - RECT -29250.0 414300.0 -28050.0 413100.0 ; - RECT -29250.0 414300.0 -28050.0 413100.0 ; - RECT -29250.0 416700.0 -28050.0 415500.0 ; - RECT -19350.0 411900.0 -18150.0 410700.0 ; - RECT -29250.0 411900.0 -28050.0 410700.0 ; - RECT -24600.0 416100.0 -23400.0 414900.0 ; - RECT -24600.0 416100.0 -23400.0 414900.0 ; - RECT -24450.0 413550.0 -23550.0 412650.0 ; - RECT -17250.0 418500.0 -16350.0 408900.0 ; - RECT -31050.0 418500.0 -30150.0 408900.0 ; - RECT -24600.0 414900.0 -23400.0 416100.0 ; - RECT -18750.0 402300.0 -16800.0 401100.0 ; - RECT -30600.0 402300.0 -28650.0 401100.0 ; - RECT -29250.0 407100.0 -31050.0 405900.0 ; - RECT -19950.0 407100.0 -16350.0 405900.0 ; - RECT -29250.0 404400.0 -19950.0 403500.0 ; - RECT -19950.0 407100.0 -18750.0 405900.0 ; - RECT -19950.0 404700.0 -18750.0 403500.0 ; - RECT -19950.0 404700.0 -18750.0 403500.0 ; - RECT -19950.0 407100.0 -18750.0 405900.0 ; - RECT -29250.0 407100.0 -28050.0 405900.0 ; - RECT -29250.0 404700.0 -28050.0 403500.0 ; - RECT -29250.0 404700.0 -28050.0 403500.0 ; - RECT -29250.0 407100.0 -28050.0 405900.0 ; - RECT -19350.0 402300.0 -18150.0 401100.0 ; - RECT -29250.0 402300.0 -28050.0 401100.0 ; - RECT -24600.0 406500.0 -23400.0 405300.0 ; - RECT -24600.0 406500.0 -23400.0 405300.0 ; - RECT -24450.0 403950.0 -23550.0 403050.0 ; - RECT -17250.0 408900.0 -16350.0 399300.0 ; - RECT -31050.0 408900.0 -30150.0 399300.0 ; - RECT -24600.0 405300.0 -23400.0 406500.0 ; - RECT -18750.0 392700.0 -16800.0 391500.0 ; - RECT -30600.0 392700.0 -28650.0 391500.0 ; - RECT -29250.0 397500.0 -31050.0 396300.0 ; - RECT -19950.0 397500.0 -16350.0 396300.0 ; - RECT -29250.0 394800.0 -19950.0 393900.0 ; - RECT -19950.0 397500.0 -18750.0 396300.0 ; - RECT -19950.0 395100.0 -18750.0 393900.0 ; - RECT -19950.0 395100.0 -18750.0 393900.0 ; - RECT -19950.0 397500.0 -18750.0 396300.0 ; - RECT -29250.0 397500.0 -28050.0 396300.0 ; - RECT -29250.0 395100.0 -28050.0 393900.0 ; - RECT -29250.0 395100.0 -28050.0 393900.0 ; - RECT -29250.0 397500.0 -28050.0 396300.0 ; - RECT -19350.0 392700.0 -18150.0 391500.0 ; - RECT -29250.0 392700.0 -28050.0 391500.0 ; - RECT -24600.0 396900.0 -23400.0 395700.0 ; - RECT -24600.0 396900.0 -23400.0 395700.0 ; - RECT -24450.0 394350.0 -23550.0 393450.0 ; - RECT -17250.0 399300.0 -16350.0 389700.0 ; - RECT -31050.0 399300.0 -30150.0 389700.0 ; - RECT -24600.0 395700.0 -23400.0 396900.0 ; - RECT -10200.0 394500.0 -9000.0 395700.0 ; - RECT -10200.0 423300.0 -9000.0 424500.0 ; - RECT -10200.0 452100.0 -9000.0 453300.0 ; - RECT -24600.0 422100.0 -23400.0 423300.0 ; - RECT -10200.0 392100.0 -9000.0 393300.0 ; - RECT -24450.0 389700.0 -23550.0 393450.0 ; - RECT -17250.0 389700.0 -16350.0 456900.0 ; - RECT -31050.0 389700.0 -30150.0 456900.0 ; - RECT -3450.0 389700.0 -2550.0 456900.0 ; - RECT -36000.0 374700.0 -46200.0 360900.0 ; - RECT -36000.0 374700.0 -46200.0 388500.0 ; - RECT -36000.0 402300.0 -46200.0 388500.0 ; - RECT -36000.0 402300.0 -46200.0 416100.0 ; - RECT -36000.0 429900.0 -46200.0 416100.0 ; - RECT -35400.0 376200.0 -46800.0 377400.0 ; - RECT -35400.0 399600.0 -46800.0 400800.0 ; - RECT -35400.0 403800.0 -46800.0 405000.0 ; - RECT -35400.0 427200.0 -46800.0 428400.0 ; - RECT -35400.0 387900.0 -46800.0 388800.0 ; - RECT -35400.0 415500.0 -46800.0 416400.0 ; - RECT -30450.0 376200.0 -31650.0 377400.0 ; - RECT -30450.0 399600.0 -31650.0 400800.0 ; - RECT -30450.0 403800.0 -31650.0 405000.0 ; - RECT -30450.0 427200.0 -31650.0 428400.0 ; - RECT -30600.0 389700.0 -31800.0 390900.0 ; - RECT -30000.0 350100.0 -31200.0 351300.0 ; - RECT -36600.0 350700.0 -35400.0 351900.0 ; - RECT -46800.0 350700.0 -45600.0 351900.0 ; - RECT -23400.0 376500.0 -24600.0 377700.0 ; - RECT -33450.0 363000.0 -32250.0 364200.0 ; - RECT -33450.0 354900.0 -32250.0 356100.0 ; - RECT -40200.0 354900.0 -39000.0 356100.0 ; - RECT -9000.0 341700.0 -9900.0 392100.0 ; - RECT -23550.0 341700.0 -24450.0 355050.0 ; - RECT -48300.0 341700.0 -49200.0 432150.0 ; - RECT -16350.0 341700.0 -17250.0 389700.0 ; - RECT -30150.0 341700.0 -31050.0 351300.0 ; - RECT -2550.0 341700.0 -3450.0 389700.0 ; - RECT -8850.0 265050.0 -10050.0 263850.0 ; - RECT -8850.0 224100.0 -10050.0 222900.0 ; - RECT -18900.0 185250.0 -20100.0 184050.0 ; - RECT -22950.0 265050.0 -24150.0 263850.0 ; - RECT -25650.0 270450.0 -26850.0 269250.0 ; - RECT -22200.0 307800.0 -23400.0 306600.0 ; - RECT -24900.0 310800.0 -26100.0 309600.0 ; - RECT -10950.0 283950.0 -12150.0 282750.0 ; - RECT -9000.0 281250.0 -10200.0 280050.0 ; - RECT -7050.0 273150.0 -8250.0 271950.0 ; - RECT -38550.0 283950.0 -39750.0 282750.0 ; - RECT -36600.0 273150.0 -37800.0 271950.0 ; - RECT -34650.0 275850.0 -35850.0 274650.0 ; - RECT -22950.0 302100.0 -24150.0 303300.0 ; - RECT -22200.0 319200.0 -23400.0 320400.0 ; - RECT -36600.0 341700.0 -37800.0 342900.0 ; - RECT -23400.0 321900.0 -24600.0 323100.0 ; - RECT -2400.0 267750.0 -3600.0 266550.0 ; - RECT -16200.0 278550.0 -17400.0 277350.0 ; - RECT -30000.0 267750.0 -31200.0 266550.0 ; - RECT -43800.0 278550.0 -45000.0 277350.0 ; - RECT -9000.0 181800.0 -10200.0 185400.0 ; - RECT -16350.0 181800.0 -17250.0 182700.0 ; - RECT -2550.0 181800.0 -3450.0 182700.0 ; + RECT 188.3 196.4 195.9 197.2 ; + RECT 190.9 193.4 192.5 194.2 ; + RECT 193.3 192.4 194.1 194.8 ; + RECT 195.1 190.0 195.9 194.2 ; + RECT 188.3 188.6 195.9 189.4 ; + RECT 192.1 189.4 192.9 189.6 ; + RECT 190.9 194.2 191.7 194.8 ; + RECT 193.1 194.8 194.1 195.6 ; + RECT 190.7 190.4 191.7 191.2 ; + RECT 195.1 194.8 195.9 196.4 ; + RECT 188.3 194.8 189.1 196.4 ; + RECT 192.9 191.6 194.1 192.4 ; + RECT 193.3 191.2 194.1 191.6 ; + RECT 193.3 190.4 194.3 191.2 ; + RECT 189.9 187.2 191.5 188.0 ; + RECT 192.7 187.2 194.3 188.0 ; + RECT 190.9 194.8 191.9 195.6 ; + RECT 188.3 190.0 189.1 194.2 ; + RECT 190.9 191.2 191.7 193.4 ; + RECT 188.3 197.2 195.9 196.4 ; + RECT 190.9 200.2 192.5 199.4 ; + RECT 193.3 201.2 194.1 198.8 ; + RECT 195.1 203.6 195.9 199.4 ; + RECT 188.3 205.0 195.9 204.2 ; + RECT 192.1 204.2 192.9 204.0 ; + RECT 190.9 199.4 191.7 198.8 ; + RECT 193.1 198.8 194.1 198.0 ; + RECT 190.7 203.2 191.7 202.4 ; + RECT 195.1 198.8 195.9 197.2 ; + RECT 188.3 198.8 189.1 197.2 ; + RECT 192.9 202.0 194.1 201.2 ; + RECT 193.3 202.4 194.1 202.0 ; + RECT 193.3 203.2 194.3 202.4 ; + RECT 189.9 206.4 191.5 205.6 ; + RECT 192.7 206.4 194.3 205.6 ; + RECT 190.9 198.8 191.9 198.0 ; + RECT 188.3 203.6 189.1 199.4 ; + RECT 190.9 202.4 191.7 200.2 ; + RECT 188.3 217.2 195.9 218.0 ; + RECT 190.9 214.2 192.5 215.0 ; + RECT 193.3 213.2 194.1 215.6 ; + RECT 195.1 210.8 195.9 215.0 ; + RECT 188.3 209.4 195.9 210.2 ; + RECT 192.1 210.2 192.9 210.4 ; + RECT 190.9 215.0 191.7 215.6 ; + RECT 193.1 215.6 194.1 216.4 ; + RECT 190.7 211.2 191.7 212.0 ; + RECT 195.1 215.6 195.9 217.2 ; + RECT 188.3 215.6 189.1 217.2 ; + RECT 192.9 212.4 194.1 213.2 ; + RECT 193.3 212.0 194.1 212.4 ; + RECT 193.3 211.2 194.3 212.0 ; + RECT 189.9 208.0 191.5 208.8 ; + RECT 192.7 208.0 194.3 208.8 ; + RECT 190.9 215.6 191.9 216.4 ; + RECT 188.3 210.8 189.1 215.0 ; + RECT 190.9 212.0 191.7 214.2 ; + RECT 188.3 218.0 195.9 217.2 ; + RECT 190.9 221.0 192.5 220.2 ; + RECT 193.3 222.0 194.1 219.6 ; + RECT 195.1 224.4 195.9 220.2 ; + RECT 188.3 225.8 195.9 225.0 ; + RECT 192.1 225.0 192.9 224.8 ; + RECT 190.9 220.2 191.7 219.6 ; + RECT 193.1 219.6 194.1 218.8 ; + RECT 190.7 224.0 191.7 223.2 ; + RECT 195.1 219.6 195.9 218.0 ; + RECT 188.3 219.6 189.1 218.0 ; + RECT 192.9 222.8 194.1 222.0 ; + RECT 193.3 223.2 194.1 222.8 ; + RECT 193.3 224.0 194.3 223.2 ; + RECT 189.9 227.2 191.5 226.4 ; + RECT 192.7 227.2 194.3 226.4 ; + RECT 190.9 219.6 191.9 218.8 ; + RECT 188.3 224.4 189.1 220.2 ; + RECT 190.9 223.2 191.7 221.0 ; + RECT 188.3 238.0 195.9 238.8 ; + RECT 190.9 235.0 192.5 235.8 ; + RECT 193.3 234.0 194.1 236.4 ; + RECT 195.1 231.6 195.9 235.8 ; + RECT 188.3 230.2 195.9 231.0 ; + RECT 192.1 231.0 192.9 231.2 ; + RECT 190.9 235.8 191.7 236.4 ; + RECT 193.1 236.4 194.1 237.2 ; + RECT 190.7 232.0 191.7 232.8 ; + RECT 195.1 236.4 195.9 238.0 ; + RECT 188.3 236.4 189.1 238.0 ; + RECT 192.9 233.2 194.1 234.0 ; + RECT 193.3 232.8 194.1 233.2 ; + RECT 193.3 232.0 194.3 232.8 ; + RECT 189.9 228.8 191.5 229.6 ; + RECT 192.7 228.8 194.3 229.6 ; + RECT 190.9 236.4 191.9 237.2 ; + RECT 188.3 231.6 189.1 235.8 ; + RECT 190.9 232.8 191.7 235.0 ; + RECT 188.3 238.8 195.9 238.0 ; + RECT 190.9 241.8 192.5 241.0 ; + RECT 193.3 242.8 194.1 240.4 ; + RECT 195.1 245.2 195.9 241.0 ; + RECT 188.3 246.6 195.9 245.8 ; + RECT 192.1 245.8 192.9 245.6 ; + RECT 190.9 241.0 191.7 240.4 ; + RECT 193.1 240.4 194.1 239.6 ; + RECT 190.7 244.8 191.7 244.0 ; + RECT 195.1 240.4 195.9 238.8 ; + RECT 188.3 240.4 189.1 238.8 ; + RECT 192.9 243.6 194.1 242.8 ; + RECT 193.3 244.0 194.1 243.6 ; + RECT 193.3 244.8 194.3 244.0 ; + RECT 189.9 248.0 191.5 247.2 ; + RECT 192.7 248.0 194.3 247.2 ; + RECT 190.9 240.4 191.9 239.6 ; + RECT 188.3 245.2 189.1 241.0 ; + RECT 190.9 244.0 191.7 241.8 ; + RECT 188.3 258.8 195.9 259.6 ; + RECT 190.9 255.8 192.5 256.6 ; + RECT 193.3 254.8 194.1 257.2 ; + RECT 195.1 252.4 195.9 256.6 ; + RECT 188.3 251.0 195.9 251.8 ; + RECT 192.1 251.8 192.9 252.0 ; + RECT 190.9 256.6 191.7 257.2 ; + RECT 193.1 257.2 194.1 258.0 ; + RECT 190.7 252.8 191.7 253.6 ; + RECT 195.1 257.2 195.9 258.8 ; + RECT 188.3 257.2 189.1 258.8 ; + RECT 192.9 254.0 194.1 254.8 ; + RECT 193.3 253.6 194.1 254.0 ; + RECT 193.3 252.8 194.3 253.6 ; + RECT 189.9 249.6 191.5 250.4 ; + RECT 192.7 249.6 194.3 250.4 ; + RECT 190.9 257.2 191.9 258.0 ; + RECT 188.3 252.4 189.1 256.6 ; + RECT 190.9 253.6 191.7 255.8 ; + RECT 188.3 259.6 195.9 258.8 ; + RECT 190.9 262.6 192.5 261.8 ; + RECT 193.3 263.6 194.1 261.2 ; + RECT 195.1 266.0 195.9 261.8 ; + RECT 188.3 267.4 195.9 266.6 ; + RECT 192.1 266.6 192.9 266.4 ; + RECT 190.9 261.8 191.7 261.2 ; + RECT 193.1 261.2 194.1 260.4 ; + RECT 190.7 265.6 191.7 264.8 ; + RECT 195.1 261.2 195.9 259.6 ; + RECT 188.3 261.2 189.1 259.6 ; + RECT 192.9 264.4 194.1 263.6 ; + RECT 193.3 264.8 194.1 264.4 ; + RECT 193.3 265.6 194.3 264.8 ; + RECT 189.9 268.8 191.5 268.0 ; + RECT 192.7 268.8 194.3 268.0 ; + RECT 190.9 261.2 191.9 260.4 ; + RECT 188.3 266.0 189.1 261.8 ; + RECT 190.9 264.8 191.7 262.6 ; + RECT 188.3 279.6 195.9 280.4 ; + RECT 190.9 276.6 192.5 277.4 ; + RECT 193.3 275.6 194.1 278.0 ; + RECT 195.1 273.2 195.9 277.4 ; + RECT 188.3 271.8 195.9 272.6 ; + RECT 192.1 272.6 192.9 272.8 ; + RECT 190.9 277.4 191.7 278.0 ; + RECT 193.1 278.0 194.1 278.8 ; + RECT 190.7 273.6 191.7 274.4 ; + RECT 195.1 278.0 195.9 279.6 ; + RECT 188.3 278.0 189.1 279.6 ; + RECT 192.9 274.8 194.1 275.6 ; + RECT 193.3 274.4 194.1 274.8 ; + RECT 193.3 273.6 194.3 274.4 ; + RECT 189.9 270.4 191.5 271.2 ; + RECT 192.7 270.4 194.3 271.2 ; + RECT 190.9 278.0 191.9 278.8 ; + RECT 188.3 273.2 189.1 277.4 ; + RECT 190.9 274.4 191.7 276.6 ; + RECT 188.3 280.4 195.9 279.6 ; + RECT 190.9 283.4 192.5 282.6 ; + RECT 193.3 284.4 194.1 282.0 ; + RECT 195.1 286.8 195.9 282.6 ; + RECT 188.3 288.2 195.9 287.4 ; + RECT 192.1 287.4 192.9 287.2 ; + RECT 190.9 282.6 191.7 282.0 ; + RECT 193.1 282.0 194.1 281.2 ; + RECT 190.7 286.4 191.7 285.6 ; + RECT 195.1 282.0 195.9 280.4 ; + RECT 188.3 282.0 189.1 280.4 ; + RECT 192.9 285.2 194.1 284.4 ; + RECT 193.3 285.6 194.1 285.2 ; + RECT 193.3 286.4 194.3 285.6 ; + RECT 189.9 289.6 191.5 288.8 ; + RECT 192.7 289.6 194.3 288.8 ; + RECT 190.9 282.0 191.9 281.2 ; + RECT 188.3 286.8 189.1 282.6 ; + RECT 190.9 285.6 191.7 283.4 ; + RECT 188.3 300.4 195.9 301.2 ; + RECT 190.9 297.4 192.5 298.2 ; + RECT 193.3 296.4 194.1 298.8 ; + RECT 195.1 294.0 195.9 298.2 ; + RECT 188.3 292.6 195.9 293.4 ; + RECT 192.1 293.4 192.9 293.6 ; + RECT 190.9 298.2 191.7 298.8 ; + RECT 193.1 298.8 194.1 299.6 ; + RECT 190.7 294.4 191.7 295.2 ; + RECT 195.1 298.8 195.9 300.4 ; + RECT 188.3 298.8 189.1 300.4 ; + RECT 192.9 295.6 194.1 296.4 ; + RECT 193.3 295.2 194.1 295.6 ; + RECT 193.3 294.4 194.3 295.2 ; + RECT 189.9 291.2 191.5 292.0 ; + RECT 192.7 291.2 194.3 292.0 ; + RECT 190.9 298.8 191.9 299.6 ; + RECT 188.3 294.0 189.1 298.2 ; + RECT 190.9 295.2 191.7 297.4 ; + RECT 188.3 301.2 195.9 300.4 ; + RECT 190.9 304.2 192.5 303.4 ; + RECT 193.3 305.2 194.1 302.8 ; + RECT 195.1 307.6 195.9 303.4 ; + RECT 188.3 309.0 195.9 308.2 ; + RECT 192.1 308.2 192.9 308.0 ; + RECT 190.9 303.4 191.7 302.8 ; + RECT 193.1 302.8 194.1 302.0 ; + RECT 190.7 307.2 191.7 306.4 ; + RECT 195.1 302.8 195.9 301.2 ; + RECT 188.3 302.8 189.1 301.2 ; + RECT 192.9 306.0 194.1 305.2 ; + RECT 193.3 306.4 194.1 306.0 ; + RECT 193.3 307.2 194.3 306.4 ; + RECT 189.9 310.4 191.5 309.6 ; + RECT 192.7 310.4 194.3 309.6 ; + RECT 190.9 302.8 191.9 302.0 ; + RECT 188.3 307.6 189.1 303.4 ; + RECT 190.9 306.4 191.7 304.2 ; + RECT 188.3 321.2 195.9 322.0 ; + RECT 190.9 318.2 192.5 319.0 ; + RECT 193.3 317.2 194.1 319.6 ; + RECT 195.1 314.8 195.9 319.0 ; + RECT 188.3 313.4 195.9 314.2 ; + RECT 192.1 314.2 192.9 314.4 ; + RECT 190.9 319.0 191.7 319.6 ; + RECT 193.1 319.6 194.1 320.4 ; + RECT 190.7 315.2 191.7 316.0 ; + RECT 195.1 319.6 195.9 321.2 ; + RECT 188.3 319.6 189.1 321.2 ; + RECT 192.9 316.4 194.1 317.2 ; + RECT 193.3 316.0 194.1 316.4 ; + RECT 193.3 315.2 194.3 316.0 ; + RECT 189.9 312.0 191.5 312.8 ; + RECT 192.7 312.0 194.3 312.8 ; + RECT 190.9 319.6 191.9 320.4 ; + RECT 188.3 314.8 189.1 319.0 ; + RECT 190.9 316.0 191.7 318.2 ; + RECT 188.3 322.0 195.9 321.2 ; + RECT 190.9 325.0 192.5 324.2 ; + RECT 193.3 326.0 194.1 323.6 ; + RECT 195.1 328.4 195.9 324.2 ; + RECT 188.3 329.8 195.9 329.0 ; + RECT 192.1 329.0 192.9 328.8 ; + RECT 190.9 324.2 191.7 323.6 ; + RECT 193.1 323.6 194.1 322.8 ; + RECT 190.7 328.0 191.7 327.2 ; + RECT 195.1 323.6 195.9 322.0 ; + RECT 188.3 323.6 189.1 322.0 ; + RECT 192.9 326.8 194.1 326.0 ; + RECT 193.3 327.2 194.1 326.8 ; + RECT 193.3 328.0 194.3 327.2 ; + RECT 189.9 331.2 191.5 330.4 ; + RECT 192.7 331.2 194.3 330.4 ; + RECT 190.9 323.6 191.9 322.8 ; + RECT 188.3 328.4 189.1 324.2 ; + RECT 190.9 327.2 191.7 325.0 ; + RECT 188.3 342.0 195.9 342.8 ; + RECT 190.9 339.0 192.5 339.8 ; + RECT 193.3 338.0 194.1 340.4 ; + RECT 195.1 335.6 195.9 339.8 ; + RECT 188.3 334.2 195.9 335.0 ; + RECT 192.1 335.0 192.9 335.2 ; + RECT 190.9 339.8 191.7 340.4 ; + RECT 193.1 340.4 194.1 341.2 ; + RECT 190.7 336.0 191.7 336.8 ; + RECT 195.1 340.4 195.9 342.0 ; + RECT 188.3 340.4 189.1 342.0 ; + RECT 192.9 337.2 194.1 338.0 ; + RECT 193.3 336.8 194.1 337.2 ; + RECT 193.3 336.0 194.3 336.8 ; + RECT 189.9 332.8 191.5 333.6 ; + RECT 192.7 332.8 194.3 333.6 ; + RECT 190.9 340.4 191.9 341.2 ; + RECT 188.3 335.6 189.1 339.8 ; + RECT 190.9 336.8 191.7 339.0 ; + RECT 188.3 342.8 195.9 342.0 ; + RECT 190.9 345.8 192.5 345.0 ; + RECT 193.3 346.8 194.1 344.4 ; + RECT 195.1 349.2 195.9 345.0 ; + RECT 188.3 350.6 195.9 349.8 ; + RECT 192.1 349.8 192.9 349.6 ; + RECT 190.9 345.0 191.7 344.4 ; + RECT 193.1 344.4 194.1 343.6 ; + RECT 190.7 348.8 191.7 348.0 ; + RECT 195.1 344.4 195.9 342.8 ; + RECT 188.3 344.4 189.1 342.8 ; + RECT 192.9 347.6 194.1 346.8 ; + RECT 193.3 348.0 194.1 347.6 ; + RECT 193.3 348.8 194.3 348.0 ; + RECT 189.9 352.0 191.5 351.2 ; + RECT 192.7 352.0 194.3 351.2 ; + RECT 190.9 344.4 191.9 343.6 ; + RECT 188.3 349.2 189.1 345.0 ; + RECT 190.9 348.0 191.7 345.8 ; + RECT 195.1 196.4 202.7 197.2 ; + RECT 197.7 193.4 199.3 194.2 ; + RECT 200.1 192.4 200.9 194.8 ; + RECT 201.9 190.0 202.7 194.2 ; + RECT 195.1 188.6 202.7 189.4 ; + RECT 198.9 189.4 199.7 189.6 ; + RECT 197.7 194.2 198.5 194.8 ; + RECT 199.9 194.8 200.9 195.6 ; + RECT 197.5 190.4 198.5 191.2 ; + RECT 201.9 194.8 202.7 196.4 ; + RECT 195.1 194.8 195.9 196.4 ; + RECT 199.7 191.6 200.9 192.4 ; + RECT 200.1 191.2 200.9 191.6 ; + RECT 200.1 190.4 201.1 191.2 ; + RECT 196.7 187.2 198.3 188.0 ; + RECT 199.5 187.2 201.1 188.0 ; + RECT 197.7 194.8 198.7 195.6 ; + RECT 195.1 190.0 195.9 194.2 ; + RECT 197.7 191.2 198.5 193.4 ; + RECT 195.1 197.2 202.7 196.4 ; + RECT 197.7 200.2 199.3 199.4 ; + RECT 200.1 201.2 200.9 198.8 ; + RECT 201.9 203.6 202.7 199.4 ; + RECT 195.1 205.0 202.7 204.2 ; + RECT 198.9 204.2 199.7 204.0 ; + RECT 197.7 199.4 198.5 198.8 ; + RECT 199.9 198.8 200.9 198.0 ; + RECT 197.5 203.2 198.5 202.4 ; + RECT 201.9 198.8 202.7 197.2 ; + RECT 195.1 198.8 195.9 197.2 ; + RECT 199.7 202.0 200.9 201.2 ; + RECT 200.1 202.4 200.9 202.0 ; + RECT 200.1 203.2 201.1 202.4 ; + RECT 196.7 206.4 198.3 205.6 ; + RECT 199.5 206.4 201.1 205.6 ; + RECT 197.7 198.8 198.7 198.0 ; + RECT 195.1 203.6 195.9 199.4 ; + RECT 197.7 202.4 198.5 200.2 ; + RECT 195.1 217.2 202.7 218.0 ; + RECT 197.7 214.2 199.3 215.0 ; + RECT 200.1 213.2 200.9 215.6 ; + RECT 201.9 210.8 202.7 215.0 ; + RECT 195.1 209.4 202.7 210.2 ; + RECT 198.9 210.2 199.7 210.4 ; + RECT 197.7 215.0 198.5 215.6 ; + RECT 199.9 215.6 200.9 216.4 ; + RECT 197.5 211.2 198.5 212.0 ; + RECT 201.9 215.6 202.7 217.2 ; + RECT 195.1 215.6 195.9 217.2 ; + RECT 199.7 212.4 200.9 213.2 ; + RECT 200.1 212.0 200.9 212.4 ; + RECT 200.1 211.2 201.1 212.0 ; + RECT 196.7 208.0 198.3 208.8 ; + RECT 199.5 208.0 201.1 208.8 ; + RECT 197.7 215.6 198.7 216.4 ; + RECT 195.1 210.8 195.9 215.0 ; + RECT 197.7 212.0 198.5 214.2 ; + RECT 195.1 218.0 202.7 217.2 ; + RECT 197.7 221.0 199.3 220.2 ; + RECT 200.1 222.0 200.9 219.6 ; + RECT 201.9 224.4 202.7 220.2 ; + RECT 195.1 225.8 202.7 225.0 ; + RECT 198.9 225.0 199.7 224.8 ; + RECT 197.7 220.2 198.5 219.6 ; + RECT 199.9 219.6 200.9 218.8 ; + RECT 197.5 224.0 198.5 223.2 ; + RECT 201.9 219.6 202.7 218.0 ; + RECT 195.1 219.6 195.9 218.0 ; + RECT 199.7 222.8 200.9 222.0 ; + RECT 200.1 223.2 200.9 222.8 ; + RECT 200.1 224.0 201.1 223.2 ; + RECT 196.7 227.2 198.3 226.4 ; + RECT 199.5 227.2 201.1 226.4 ; + RECT 197.7 219.6 198.7 218.8 ; + RECT 195.1 224.4 195.9 220.2 ; + RECT 197.7 223.2 198.5 221.0 ; + RECT 195.1 238.0 202.7 238.8 ; + RECT 197.7 235.0 199.3 235.8 ; + RECT 200.1 234.0 200.9 236.4 ; + RECT 201.9 231.6 202.7 235.8 ; + RECT 195.1 230.2 202.7 231.0 ; + RECT 198.9 231.0 199.7 231.2 ; + RECT 197.7 235.8 198.5 236.4 ; + RECT 199.9 236.4 200.9 237.2 ; + RECT 197.5 232.0 198.5 232.8 ; + RECT 201.9 236.4 202.7 238.0 ; + RECT 195.1 236.4 195.9 238.0 ; + RECT 199.7 233.2 200.9 234.0 ; + RECT 200.1 232.8 200.9 233.2 ; + RECT 200.1 232.0 201.1 232.8 ; + RECT 196.7 228.8 198.3 229.6 ; + RECT 199.5 228.8 201.1 229.6 ; + RECT 197.7 236.4 198.7 237.2 ; + RECT 195.1 231.6 195.9 235.8 ; + RECT 197.7 232.8 198.5 235.0 ; + RECT 195.1 238.8 202.7 238.0 ; + RECT 197.7 241.8 199.3 241.0 ; + RECT 200.1 242.8 200.9 240.4 ; + RECT 201.9 245.2 202.7 241.0 ; + RECT 195.1 246.6 202.7 245.8 ; + RECT 198.9 245.8 199.7 245.6 ; + RECT 197.7 241.0 198.5 240.4 ; + RECT 199.9 240.4 200.9 239.6 ; + RECT 197.5 244.8 198.5 244.0 ; + RECT 201.9 240.4 202.7 238.8 ; + RECT 195.1 240.4 195.9 238.8 ; + RECT 199.7 243.6 200.9 242.8 ; + RECT 200.1 244.0 200.9 243.6 ; + RECT 200.1 244.8 201.1 244.0 ; + RECT 196.7 248.0 198.3 247.2 ; + RECT 199.5 248.0 201.1 247.2 ; + RECT 197.7 240.4 198.7 239.6 ; + RECT 195.1 245.2 195.9 241.0 ; + RECT 197.7 244.0 198.5 241.8 ; + RECT 195.1 258.8 202.7 259.6 ; + RECT 197.7 255.8 199.3 256.6 ; + RECT 200.1 254.8 200.9 257.2 ; + RECT 201.9 252.4 202.7 256.6 ; + RECT 195.1 251.0 202.7 251.8 ; + RECT 198.9 251.8 199.7 252.0 ; + RECT 197.7 256.6 198.5 257.2 ; + RECT 199.9 257.2 200.9 258.0 ; + RECT 197.5 252.8 198.5 253.6 ; + RECT 201.9 257.2 202.7 258.8 ; + RECT 195.1 257.2 195.9 258.8 ; + RECT 199.7 254.0 200.9 254.8 ; + RECT 200.1 253.6 200.9 254.0 ; + RECT 200.1 252.8 201.1 253.6 ; + RECT 196.7 249.6 198.3 250.4 ; + RECT 199.5 249.6 201.1 250.4 ; + RECT 197.7 257.2 198.7 258.0 ; + RECT 195.1 252.4 195.9 256.6 ; + RECT 197.7 253.6 198.5 255.8 ; + RECT 195.1 259.6 202.7 258.8 ; + RECT 197.7 262.6 199.3 261.8 ; + RECT 200.1 263.6 200.9 261.2 ; + RECT 201.9 266.0 202.7 261.8 ; + RECT 195.1 267.4 202.7 266.6 ; + RECT 198.9 266.6 199.7 266.4 ; + RECT 197.7 261.8 198.5 261.2 ; + RECT 199.9 261.2 200.9 260.4 ; + RECT 197.5 265.6 198.5 264.8 ; + RECT 201.9 261.2 202.7 259.6 ; + RECT 195.1 261.2 195.9 259.6 ; + RECT 199.7 264.4 200.9 263.6 ; + RECT 200.1 264.8 200.9 264.4 ; + RECT 200.1 265.6 201.1 264.8 ; + RECT 196.7 268.8 198.3 268.0 ; + RECT 199.5 268.8 201.1 268.0 ; + RECT 197.7 261.2 198.7 260.4 ; + RECT 195.1 266.0 195.9 261.8 ; + RECT 197.7 264.8 198.5 262.6 ; + RECT 195.1 279.6 202.7 280.4 ; + RECT 197.7 276.6 199.3 277.4 ; + RECT 200.1 275.6 200.9 278.0 ; + RECT 201.9 273.2 202.7 277.4 ; + RECT 195.1 271.8 202.7 272.6 ; + RECT 198.9 272.6 199.7 272.8 ; + RECT 197.7 277.4 198.5 278.0 ; + RECT 199.9 278.0 200.9 278.8 ; + RECT 197.5 273.6 198.5 274.4 ; + RECT 201.9 278.0 202.7 279.6 ; + RECT 195.1 278.0 195.9 279.6 ; + RECT 199.7 274.8 200.9 275.6 ; + RECT 200.1 274.4 200.9 274.8 ; + RECT 200.1 273.6 201.1 274.4 ; + RECT 196.7 270.4 198.3 271.2 ; + RECT 199.5 270.4 201.1 271.2 ; + RECT 197.7 278.0 198.7 278.8 ; + RECT 195.1 273.2 195.9 277.4 ; + RECT 197.7 274.4 198.5 276.6 ; + RECT 195.1 280.4 202.7 279.6 ; + RECT 197.7 283.4 199.3 282.6 ; + RECT 200.1 284.4 200.9 282.0 ; + RECT 201.9 286.8 202.7 282.6 ; + RECT 195.1 288.2 202.7 287.4 ; + RECT 198.9 287.4 199.7 287.2 ; + RECT 197.7 282.6 198.5 282.0 ; + RECT 199.9 282.0 200.9 281.2 ; + RECT 197.5 286.4 198.5 285.6 ; + RECT 201.9 282.0 202.7 280.4 ; + RECT 195.1 282.0 195.9 280.4 ; + RECT 199.7 285.2 200.9 284.4 ; + RECT 200.1 285.6 200.9 285.2 ; + RECT 200.1 286.4 201.1 285.6 ; + RECT 196.7 289.6 198.3 288.8 ; + RECT 199.5 289.6 201.1 288.8 ; + RECT 197.7 282.0 198.7 281.2 ; + RECT 195.1 286.8 195.9 282.6 ; + RECT 197.7 285.6 198.5 283.4 ; + RECT 195.1 300.4 202.7 301.2 ; + RECT 197.7 297.4 199.3 298.2 ; + RECT 200.1 296.4 200.9 298.8 ; + RECT 201.9 294.0 202.7 298.2 ; + RECT 195.1 292.6 202.7 293.4 ; + RECT 198.9 293.4 199.7 293.6 ; + RECT 197.7 298.2 198.5 298.8 ; + RECT 199.9 298.8 200.9 299.6 ; + RECT 197.5 294.4 198.5 295.2 ; + RECT 201.9 298.8 202.7 300.4 ; + RECT 195.1 298.8 195.9 300.4 ; + RECT 199.7 295.6 200.9 296.4 ; + RECT 200.1 295.2 200.9 295.6 ; + RECT 200.1 294.4 201.1 295.2 ; + RECT 196.7 291.2 198.3 292.0 ; + RECT 199.5 291.2 201.1 292.0 ; + RECT 197.7 298.8 198.7 299.6 ; + RECT 195.1 294.0 195.9 298.2 ; + RECT 197.7 295.2 198.5 297.4 ; + RECT 195.1 301.2 202.7 300.4 ; + RECT 197.7 304.2 199.3 303.4 ; + RECT 200.1 305.2 200.9 302.8 ; + RECT 201.9 307.6 202.7 303.4 ; + RECT 195.1 309.0 202.7 308.2 ; + RECT 198.9 308.2 199.7 308.0 ; + RECT 197.7 303.4 198.5 302.8 ; + RECT 199.9 302.8 200.9 302.0 ; + RECT 197.5 307.2 198.5 306.4 ; + RECT 201.9 302.8 202.7 301.2 ; + RECT 195.1 302.8 195.9 301.2 ; + RECT 199.7 306.0 200.9 305.2 ; + RECT 200.1 306.4 200.9 306.0 ; + RECT 200.1 307.2 201.1 306.4 ; + RECT 196.7 310.4 198.3 309.6 ; + RECT 199.5 310.4 201.1 309.6 ; + RECT 197.7 302.8 198.7 302.0 ; + RECT 195.1 307.6 195.9 303.4 ; + RECT 197.7 306.4 198.5 304.2 ; + RECT 195.1 321.2 202.7 322.0 ; + RECT 197.7 318.2 199.3 319.0 ; + RECT 200.1 317.2 200.9 319.6 ; + RECT 201.9 314.8 202.7 319.0 ; + RECT 195.1 313.4 202.7 314.2 ; + RECT 198.9 314.2 199.7 314.4 ; + RECT 197.7 319.0 198.5 319.6 ; + RECT 199.9 319.6 200.9 320.4 ; + RECT 197.5 315.2 198.5 316.0 ; + RECT 201.9 319.6 202.7 321.2 ; + RECT 195.1 319.6 195.9 321.2 ; + RECT 199.7 316.4 200.9 317.2 ; + RECT 200.1 316.0 200.9 316.4 ; + RECT 200.1 315.2 201.1 316.0 ; + RECT 196.7 312.0 198.3 312.8 ; + RECT 199.5 312.0 201.1 312.8 ; + RECT 197.7 319.6 198.7 320.4 ; + RECT 195.1 314.8 195.9 319.0 ; + RECT 197.7 316.0 198.5 318.2 ; + RECT 195.1 322.0 202.7 321.2 ; + RECT 197.7 325.0 199.3 324.2 ; + RECT 200.1 326.0 200.9 323.6 ; + RECT 201.9 328.4 202.7 324.2 ; + RECT 195.1 329.8 202.7 329.0 ; + RECT 198.9 329.0 199.7 328.8 ; + RECT 197.7 324.2 198.5 323.6 ; + RECT 199.9 323.6 200.9 322.8 ; + RECT 197.5 328.0 198.5 327.2 ; + RECT 201.9 323.6 202.7 322.0 ; + RECT 195.1 323.6 195.9 322.0 ; + RECT 199.7 326.8 200.9 326.0 ; + RECT 200.1 327.2 200.9 326.8 ; + RECT 200.1 328.0 201.1 327.2 ; + RECT 196.7 331.2 198.3 330.4 ; + RECT 199.5 331.2 201.1 330.4 ; + RECT 197.7 323.6 198.7 322.8 ; + RECT 195.1 328.4 195.9 324.2 ; + RECT 197.7 327.2 198.5 325.0 ; + RECT 195.1 342.0 202.7 342.8 ; + RECT 197.7 339.0 199.3 339.8 ; + RECT 200.1 338.0 200.9 340.4 ; + RECT 201.9 335.6 202.7 339.8 ; + RECT 195.1 334.2 202.7 335.0 ; + RECT 198.9 335.0 199.7 335.2 ; + RECT 197.7 339.8 198.5 340.4 ; + RECT 199.9 340.4 200.9 341.2 ; + RECT 197.5 336.0 198.5 336.8 ; + RECT 201.9 340.4 202.7 342.0 ; + RECT 195.1 340.4 195.9 342.0 ; + RECT 199.7 337.2 200.9 338.0 ; + RECT 200.1 336.8 200.9 337.2 ; + RECT 200.1 336.0 201.1 336.8 ; + RECT 196.7 332.8 198.3 333.6 ; + RECT 199.5 332.8 201.1 333.6 ; + RECT 197.7 340.4 198.7 341.2 ; + RECT 195.1 335.6 195.9 339.8 ; + RECT 197.7 336.8 198.5 339.0 ; + RECT 195.1 342.8 202.7 342.0 ; + RECT 197.7 345.8 199.3 345.0 ; + RECT 200.1 346.8 200.9 344.4 ; + RECT 201.9 349.2 202.7 345.0 ; + RECT 195.1 350.6 202.7 349.8 ; + RECT 198.9 349.8 199.7 349.6 ; + RECT 197.7 345.0 198.5 344.4 ; + RECT 199.9 344.4 200.9 343.6 ; + RECT 197.5 348.8 198.5 348.0 ; + RECT 201.9 344.4 202.7 342.8 ; + RECT 195.1 344.4 195.9 342.8 ; + RECT 199.7 347.6 200.9 346.8 ; + RECT 200.1 348.0 200.9 347.6 ; + RECT 200.1 348.8 201.1 348.0 ; + RECT 196.7 352.0 198.3 351.2 ; + RECT 199.5 352.0 201.1 351.2 ; + RECT 197.7 344.4 198.7 343.6 ; + RECT 195.1 349.2 195.9 345.0 ; + RECT 197.7 348.0 198.5 345.8 ; + RECT 188.7 188.6 202.3 189.4 ; + RECT 188.7 204.2 202.3 205.0 ; + RECT 188.7 209.4 202.3 210.2 ; + RECT 188.7 225.0 202.3 225.8 ; + RECT 188.7 230.2 202.3 231.0 ; + RECT 188.7 245.8 202.3 246.6 ; + RECT 188.7 251.0 202.3 251.8 ; + RECT 188.7 266.6 202.3 267.4 ; + RECT 188.7 271.8 202.3 272.6 ; + RECT 188.7 287.4 202.3 288.2 ; + RECT 188.7 292.6 202.3 293.4 ; + RECT 188.7 308.2 202.3 309.0 ; + RECT 188.7 313.4 202.3 314.2 ; + RECT 188.7 329.0 202.3 329.8 ; + RECT 188.7 334.2 202.3 335.0 ; + RECT 188.7 349.8 202.3 350.6 ; + RECT 181.5 175.6 189.1 176.4 ; + RECT 184.1 172.6 185.7 173.4 ; + RECT 186.5 171.6 187.3 174.0 ; + RECT 188.3 169.2 189.1 173.4 ; + RECT 181.5 167.8 189.1 168.6 ; + RECT 185.3 168.6 186.1 168.8 ; + RECT 184.1 173.4 184.9 174.0 ; + RECT 186.3 174.0 187.3 174.8 ; + RECT 183.9 169.6 184.9 170.4 ; + RECT 188.3 174.0 189.1 175.6 ; + RECT 181.5 174.0 182.3 175.6 ; + RECT 186.1 170.8 187.3 171.6 ; + RECT 186.5 170.4 187.3 170.8 ; + RECT 186.5 169.6 187.5 170.4 ; + RECT 183.9 166.4 184.7 167.2 ; + RECT 186.7 166.4 187.5 167.2 ; + RECT 184.1 174.0 185.1 174.8 ; + RECT 181.5 169.2 182.3 173.4 ; + RECT 184.1 170.4 184.9 172.6 ; + RECT 181.5 176.4 189.1 175.6 ; + RECT 184.1 179.4 185.7 178.6 ; + RECT 186.5 180.4 187.3 178.0 ; + RECT 188.3 182.8 189.1 178.6 ; + RECT 181.5 184.2 189.1 183.4 ; + RECT 185.3 183.4 186.1 183.2 ; + RECT 184.1 178.6 184.9 178.0 ; + RECT 186.3 178.0 187.3 177.2 ; + RECT 183.9 182.4 184.9 181.6 ; + RECT 186.3 177.2 187.1 176.4 ; + RECT 181.5 178.0 182.3 176.4 ; + RECT 188.3 178.0 189.1 176.4 ; + RECT 186.1 181.2 187.3 180.4 ; + RECT 186.5 181.6 187.3 181.2 ; + RECT 186.5 182.4 187.5 181.6 ; + RECT 183.1 185.6 184.7 184.8 ; + RECT 185.9 185.6 187.5 184.8 ; + RECT 184.1 178.0 185.1 177.2 ; + RECT 181.5 182.8 182.3 178.6 ; + RECT 184.1 181.6 184.9 179.4 ; + RECT 181.5 196.4 189.1 197.2 ; + RECT 184.1 193.4 185.7 194.2 ; + RECT 186.5 192.4 187.3 194.8 ; + RECT 188.3 190.0 189.1 194.2 ; + RECT 181.5 188.6 189.1 189.4 ; + RECT 185.3 189.4 186.1 189.6 ; + RECT 184.1 194.2 184.9 194.8 ; + RECT 186.3 194.8 187.3 195.6 ; + RECT 183.9 190.4 184.9 191.2 ; + RECT 186.3 195.6 187.1 196.4 ; + RECT 181.5 194.8 182.3 196.4 ; + RECT 188.3 194.8 189.1 196.4 ; + RECT 186.1 191.6 187.3 192.4 ; + RECT 186.5 191.2 187.3 191.6 ; + RECT 186.5 190.4 187.5 191.2 ; + RECT 183.1 187.2 184.7 188.0 ; + RECT 185.9 187.2 187.5 188.0 ; + RECT 184.1 194.8 185.1 195.6 ; + RECT 181.5 190.0 182.3 194.2 ; + RECT 184.1 191.2 184.9 193.4 ; + RECT 181.5 197.2 189.1 196.4 ; + RECT 184.1 200.2 185.7 199.4 ; + RECT 186.5 201.2 187.3 198.8 ; + RECT 188.3 203.6 189.1 199.4 ; + RECT 181.5 205.0 189.1 204.2 ; + RECT 185.3 204.2 186.1 204.0 ; + RECT 184.1 199.4 184.9 198.8 ; + RECT 186.3 198.8 187.3 198.0 ; + RECT 183.9 203.2 184.9 202.4 ; + RECT 186.3 198.0 187.1 197.2 ; + RECT 181.5 198.8 182.3 197.2 ; + RECT 188.3 198.8 189.1 197.2 ; + RECT 186.1 202.0 187.3 201.2 ; + RECT 186.5 202.4 187.3 202.0 ; + RECT 186.5 203.2 187.5 202.4 ; + RECT 183.1 206.4 184.7 205.6 ; + RECT 185.9 206.4 187.5 205.6 ; + RECT 184.1 198.8 185.1 198.0 ; + RECT 181.5 203.6 182.3 199.4 ; + RECT 184.1 202.4 184.9 200.2 ; + RECT 181.5 217.2 189.1 218.0 ; + RECT 184.1 214.2 185.7 215.0 ; + RECT 186.5 213.2 187.3 215.6 ; + RECT 188.3 210.8 189.1 215.0 ; + RECT 181.5 209.4 189.1 210.2 ; + RECT 185.3 210.2 186.1 210.4 ; + RECT 184.1 215.0 184.9 215.6 ; + RECT 186.3 215.6 187.3 216.4 ; + RECT 183.9 211.2 184.9 212.0 ; + RECT 186.3 216.4 187.1 217.2 ; + RECT 181.5 215.6 182.3 217.2 ; + RECT 188.3 215.6 189.1 217.2 ; + RECT 186.1 212.4 187.3 213.2 ; + RECT 186.5 212.0 187.3 212.4 ; + RECT 186.5 211.2 187.5 212.0 ; + RECT 183.1 208.0 184.7 208.8 ; + RECT 185.9 208.0 187.5 208.8 ; + RECT 184.1 215.6 185.1 216.4 ; + RECT 181.5 210.8 182.3 215.0 ; + RECT 184.1 212.0 184.9 214.2 ; + RECT 181.5 218.0 189.1 217.2 ; + RECT 184.1 221.0 185.7 220.2 ; + RECT 186.5 222.0 187.3 219.6 ; + RECT 188.3 224.4 189.1 220.2 ; + RECT 181.5 225.8 189.1 225.0 ; + RECT 185.3 225.0 186.1 224.8 ; + RECT 184.1 220.2 184.9 219.6 ; + RECT 186.3 219.6 187.3 218.8 ; + RECT 183.9 224.0 184.9 223.2 ; + RECT 186.3 218.8 187.1 218.0 ; + RECT 181.5 219.6 182.3 218.0 ; + RECT 188.3 219.6 189.1 218.0 ; + RECT 186.1 222.8 187.3 222.0 ; + RECT 186.5 223.2 187.3 222.8 ; + RECT 186.5 224.0 187.5 223.2 ; + RECT 183.1 227.2 184.7 226.4 ; + RECT 185.9 227.2 187.5 226.4 ; + RECT 184.1 219.6 185.1 218.8 ; + RECT 181.5 224.4 182.3 220.2 ; + RECT 184.1 223.2 184.9 221.0 ; + RECT 181.5 238.0 189.1 238.8 ; + RECT 184.1 235.0 185.7 235.8 ; + RECT 186.5 234.0 187.3 236.4 ; + RECT 188.3 231.6 189.1 235.8 ; + RECT 181.5 230.2 189.1 231.0 ; + RECT 185.3 231.0 186.1 231.2 ; + RECT 184.1 235.8 184.9 236.4 ; + RECT 186.3 236.4 187.3 237.2 ; + RECT 183.9 232.0 184.9 232.8 ; + RECT 186.3 237.2 187.1 238.0 ; + RECT 181.5 236.4 182.3 238.0 ; + RECT 188.3 236.4 189.1 238.0 ; + RECT 186.1 233.2 187.3 234.0 ; + RECT 186.5 232.8 187.3 233.2 ; + RECT 186.5 232.0 187.5 232.8 ; + RECT 183.1 228.8 184.7 229.6 ; + RECT 185.9 228.8 187.5 229.6 ; + RECT 184.1 236.4 185.1 237.2 ; + RECT 181.5 231.6 182.3 235.8 ; + RECT 184.1 232.8 184.9 235.0 ; + RECT 181.5 238.8 189.1 238.0 ; + RECT 184.1 241.8 185.7 241.0 ; + RECT 186.5 242.8 187.3 240.4 ; + RECT 188.3 245.2 189.1 241.0 ; + RECT 181.5 246.6 189.1 245.8 ; + RECT 185.3 245.8 186.1 245.6 ; + RECT 184.1 241.0 184.9 240.4 ; + RECT 186.3 240.4 187.3 239.6 ; + RECT 183.9 244.8 184.9 244.0 ; + RECT 186.3 239.6 187.1 238.8 ; + RECT 181.5 240.4 182.3 238.8 ; + RECT 188.3 240.4 189.1 238.8 ; + RECT 186.1 243.6 187.3 242.8 ; + RECT 186.5 244.0 187.3 243.6 ; + RECT 186.5 244.8 187.5 244.0 ; + RECT 183.1 248.0 184.7 247.2 ; + RECT 185.9 248.0 187.5 247.2 ; + RECT 184.1 240.4 185.1 239.6 ; + RECT 181.5 245.2 182.3 241.0 ; + RECT 184.1 244.0 184.9 241.8 ; + RECT 181.5 258.8 189.1 259.6 ; + RECT 184.1 255.8 185.7 256.6 ; + RECT 186.5 254.8 187.3 257.2 ; + RECT 188.3 252.4 189.1 256.6 ; + RECT 181.5 251.0 189.1 251.8 ; + RECT 185.3 251.8 186.1 252.0 ; + RECT 184.1 256.6 184.9 257.2 ; + RECT 186.3 257.2 187.3 258.0 ; + RECT 183.9 252.8 184.9 253.6 ; + RECT 186.3 258.0 187.1 258.8 ; + RECT 181.5 257.2 182.3 258.8 ; + RECT 188.3 257.2 189.1 258.8 ; + RECT 186.1 254.0 187.3 254.8 ; + RECT 186.5 253.6 187.3 254.0 ; + RECT 186.5 252.8 187.5 253.6 ; + RECT 183.1 249.6 184.7 250.4 ; + RECT 185.9 249.6 187.5 250.4 ; + RECT 184.1 257.2 185.1 258.0 ; + RECT 181.5 252.4 182.3 256.6 ; + RECT 184.1 253.6 184.9 255.8 ; + RECT 181.5 259.6 189.1 258.8 ; + RECT 184.1 262.6 185.7 261.8 ; + RECT 186.5 263.6 187.3 261.2 ; + RECT 188.3 266.0 189.1 261.8 ; + RECT 181.5 267.4 189.1 266.6 ; + RECT 185.3 266.6 186.1 266.4 ; + RECT 184.1 261.8 184.9 261.2 ; + RECT 186.3 261.2 187.3 260.4 ; + RECT 183.9 265.6 184.9 264.8 ; + RECT 186.3 260.4 187.1 259.6 ; + RECT 181.5 261.2 182.3 259.6 ; + RECT 188.3 261.2 189.1 259.6 ; + RECT 186.1 264.4 187.3 263.6 ; + RECT 186.5 264.8 187.3 264.4 ; + RECT 186.5 265.6 187.5 264.8 ; + RECT 183.1 268.8 184.7 268.0 ; + RECT 185.9 268.8 187.5 268.0 ; + RECT 184.1 261.2 185.1 260.4 ; + RECT 181.5 266.0 182.3 261.8 ; + RECT 184.1 264.8 184.9 262.6 ; + RECT 181.5 279.6 189.1 280.4 ; + RECT 184.1 276.6 185.7 277.4 ; + RECT 186.5 275.6 187.3 278.0 ; + RECT 188.3 273.2 189.1 277.4 ; + RECT 181.5 271.8 189.1 272.6 ; + RECT 185.3 272.6 186.1 272.8 ; + RECT 184.1 277.4 184.9 278.0 ; + RECT 186.3 278.0 187.3 278.8 ; + RECT 183.9 273.6 184.9 274.4 ; + RECT 186.3 278.8 187.1 279.6 ; + RECT 181.5 278.0 182.3 279.6 ; + RECT 188.3 278.0 189.1 279.6 ; + RECT 186.1 274.8 187.3 275.6 ; + RECT 186.5 274.4 187.3 274.8 ; + RECT 186.5 273.6 187.5 274.4 ; + RECT 183.1 270.4 184.7 271.2 ; + RECT 185.9 270.4 187.5 271.2 ; + RECT 184.1 278.0 185.1 278.8 ; + RECT 181.5 273.2 182.3 277.4 ; + RECT 184.1 274.4 184.9 276.6 ; + RECT 181.5 280.4 189.1 279.6 ; + RECT 184.1 283.4 185.7 282.6 ; + RECT 186.5 284.4 187.3 282.0 ; + RECT 188.3 286.8 189.1 282.6 ; + RECT 181.5 288.2 189.1 287.4 ; + RECT 185.3 287.4 186.1 287.2 ; + RECT 184.1 282.6 184.9 282.0 ; + RECT 186.3 282.0 187.3 281.2 ; + RECT 183.9 286.4 184.9 285.6 ; + RECT 186.3 281.2 187.1 280.4 ; + RECT 181.5 282.0 182.3 280.4 ; + RECT 188.3 282.0 189.1 280.4 ; + RECT 186.1 285.2 187.3 284.4 ; + RECT 186.5 285.6 187.3 285.2 ; + RECT 186.5 286.4 187.5 285.6 ; + RECT 183.1 289.6 184.7 288.8 ; + RECT 185.9 289.6 187.5 288.8 ; + RECT 184.1 282.0 185.1 281.2 ; + RECT 181.5 286.8 182.3 282.6 ; + RECT 184.1 285.6 184.9 283.4 ; + RECT 181.5 300.4 189.1 301.2 ; + RECT 184.1 297.4 185.7 298.2 ; + RECT 186.5 296.4 187.3 298.8 ; + RECT 188.3 294.0 189.1 298.2 ; + RECT 181.5 292.6 189.1 293.4 ; + RECT 185.3 293.4 186.1 293.6 ; + RECT 184.1 298.2 184.9 298.8 ; + RECT 186.3 298.8 187.3 299.6 ; + RECT 183.9 294.4 184.9 295.2 ; + RECT 186.3 299.6 187.1 300.4 ; + RECT 181.5 298.8 182.3 300.4 ; + RECT 188.3 298.8 189.1 300.4 ; + RECT 186.1 295.6 187.3 296.4 ; + RECT 186.5 295.2 187.3 295.6 ; + RECT 186.5 294.4 187.5 295.2 ; + RECT 183.1 291.2 184.7 292.0 ; + RECT 185.9 291.2 187.5 292.0 ; + RECT 184.1 298.8 185.1 299.6 ; + RECT 181.5 294.0 182.3 298.2 ; + RECT 184.1 295.2 184.9 297.4 ; + RECT 181.5 301.2 189.1 300.4 ; + RECT 184.1 304.2 185.7 303.4 ; + RECT 186.5 305.2 187.3 302.8 ; + RECT 188.3 307.6 189.1 303.4 ; + RECT 181.5 309.0 189.1 308.2 ; + RECT 185.3 308.2 186.1 308.0 ; + RECT 184.1 303.4 184.9 302.8 ; + RECT 186.3 302.8 187.3 302.0 ; + RECT 183.9 307.2 184.9 306.4 ; + RECT 186.3 302.0 187.1 301.2 ; + RECT 181.5 302.8 182.3 301.2 ; + RECT 188.3 302.8 189.1 301.2 ; + RECT 186.1 306.0 187.3 305.2 ; + RECT 186.5 306.4 187.3 306.0 ; + RECT 186.5 307.2 187.5 306.4 ; + RECT 183.1 310.4 184.7 309.6 ; + RECT 185.9 310.4 187.5 309.6 ; + RECT 184.1 302.8 185.1 302.0 ; + RECT 181.5 307.6 182.3 303.4 ; + RECT 184.1 306.4 184.9 304.2 ; + RECT 181.5 321.2 189.1 322.0 ; + RECT 184.1 318.2 185.7 319.0 ; + RECT 186.5 317.2 187.3 319.6 ; + RECT 188.3 314.8 189.1 319.0 ; + RECT 181.5 313.4 189.1 314.2 ; + RECT 185.3 314.2 186.1 314.4 ; + RECT 184.1 319.0 184.9 319.6 ; + RECT 186.3 319.6 187.3 320.4 ; + RECT 183.9 315.2 184.9 316.0 ; + RECT 186.3 320.4 187.1 321.2 ; + RECT 181.5 319.6 182.3 321.2 ; + RECT 188.3 319.6 189.1 321.2 ; + RECT 186.1 316.4 187.3 317.2 ; + RECT 186.5 316.0 187.3 316.4 ; + RECT 186.5 315.2 187.5 316.0 ; + RECT 183.1 312.0 184.7 312.8 ; + RECT 185.9 312.0 187.5 312.8 ; + RECT 184.1 319.6 185.1 320.4 ; + RECT 181.5 314.8 182.3 319.0 ; + RECT 184.1 316.0 184.9 318.2 ; + RECT 181.5 322.0 189.1 321.2 ; + RECT 184.1 325.0 185.7 324.2 ; + RECT 186.5 326.0 187.3 323.6 ; + RECT 188.3 328.4 189.1 324.2 ; + RECT 181.5 329.8 189.1 329.0 ; + RECT 185.3 329.0 186.1 328.8 ; + RECT 184.1 324.2 184.9 323.6 ; + RECT 186.3 323.6 187.3 322.8 ; + RECT 183.9 328.0 184.9 327.2 ; + RECT 186.3 322.8 187.1 322.0 ; + RECT 181.5 323.6 182.3 322.0 ; + RECT 188.3 323.6 189.1 322.0 ; + RECT 186.1 326.8 187.3 326.0 ; + RECT 186.5 327.2 187.3 326.8 ; + RECT 186.5 328.0 187.5 327.2 ; + RECT 183.1 331.2 184.7 330.4 ; + RECT 185.9 331.2 187.5 330.4 ; + RECT 184.1 323.6 185.1 322.8 ; + RECT 181.5 328.4 182.3 324.2 ; + RECT 184.1 327.2 184.9 325.0 ; + RECT 181.5 342.0 189.1 342.8 ; + RECT 184.1 339.0 185.7 339.8 ; + RECT 186.5 338.0 187.3 340.4 ; + RECT 188.3 335.6 189.1 339.8 ; + RECT 181.5 334.2 189.1 335.0 ; + RECT 185.3 335.0 186.1 335.2 ; + RECT 184.1 339.8 184.9 340.4 ; + RECT 186.3 340.4 187.3 341.2 ; + RECT 183.9 336.0 184.9 336.8 ; + RECT 186.3 341.2 187.1 342.0 ; + RECT 181.5 340.4 182.3 342.0 ; + RECT 188.3 340.4 189.1 342.0 ; + RECT 186.1 337.2 187.3 338.0 ; + RECT 186.5 336.8 187.3 337.2 ; + RECT 186.5 336.0 187.5 336.8 ; + RECT 183.1 332.8 184.7 333.6 ; + RECT 185.9 332.8 187.5 333.6 ; + RECT 184.1 340.4 185.1 341.2 ; + RECT 181.5 335.6 182.3 339.8 ; + RECT 184.1 336.8 184.9 339.0 ; + RECT 181.5 342.8 189.1 342.0 ; + RECT 184.1 345.8 185.7 345.0 ; + RECT 186.5 346.8 187.3 344.4 ; + RECT 188.3 349.2 189.1 345.0 ; + RECT 181.5 350.6 189.1 349.8 ; + RECT 185.3 349.8 186.1 349.6 ; + RECT 184.1 345.0 184.9 344.4 ; + RECT 186.3 344.4 187.3 343.6 ; + RECT 183.9 348.8 184.9 348.0 ; + RECT 186.3 343.6 187.1 342.8 ; + RECT 181.5 344.4 182.3 342.8 ; + RECT 188.3 344.4 189.1 342.8 ; + RECT 186.1 347.6 187.3 346.8 ; + RECT 186.5 348.0 187.3 347.6 ; + RECT 186.5 348.8 187.5 348.0 ; + RECT 183.1 352.0 184.7 351.2 ; + RECT 185.9 352.0 187.5 351.2 ; + RECT 184.1 344.4 185.1 343.6 ; + RECT 181.5 349.2 182.3 345.0 ; + RECT 184.1 348.0 184.9 345.8 ; + RECT 181.5 362.8 189.1 363.6 ; + RECT 184.1 359.8 185.7 360.6 ; + RECT 186.5 358.8 187.3 361.2 ; + RECT 188.3 356.4 189.1 360.6 ; + RECT 181.5 355.0 189.1 355.8 ; + RECT 185.3 355.8 186.1 356.0 ; + RECT 184.1 360.6 184.9 361.2 ; + RECT 186.3 361.2 187.3 362.0 ; + RECT 183.9 356.8 184.9 357.6 ; + RECT 188.3 361.2 189.1 362.8 ; + RECT 181.5 361.2 182.3 362.8 ; + RECT 186.1 358.0 187.3 358.8 ; + RECT 186.5 357.6 187.3 358.0 ; + RECT 186.5 356.8 187.5 357.6 ; + RECT 183.9 353.6 184.7 354.4 ; + RECT 186.7 353.6 187.5 354.4 ; + RECT 184.1 361.2 185.1 362.0 ; + RECT 181.5 356.4 182.3 360.6 ; + RECT 184.1 357.6 184.9 359.8 ; + RECT 181.9 167.8 188.7 168.6 ; + RECT 181.9 183.4 188.7 184.2 ; + RECT 181.9 188.6 188.7 189.4 ; + RECT 181.9 204.2 188.7 205.0 ; + RECT 181.9 209.4 188.7 210.2 ; + RECT 181.9 225.0 188.7 225.8 ; + RECT 181.9 230.2 188.7 231.0 ; + RECT 181.9 245.8 188.7 246.6 ; + RECT 181.9 251.0 188.7 251.8 ; + RECT 181.9 266.6 188.7 267.4 ; + RECT 181.9 271.8 188.7 272.6 ; + RECT 181.9 287.4 188.7 288.2 ; + RECT 181.9 292.6 188.7 293.4 ; + RECT 181.9 308.2 188.7 309.0 ; + RECT 181.9 313.4 188.7 314.2 ; + RECT 181.9 329.0 188.7 329.8 ; + RECT 181.9 334.2 188.7 335.0 ; + RECT 181.9 349.8 188.7 350.6 ; + RECT 181.9 355.0 188.7 355.8 ; + RECT 188.3 176.4 195.9 175.6 ; + RECT 190.9 179.4 192.5 178.6 ; + RECT 193.3 180.4 194.1 178.0 ; + RECT 195.1 182.8 195.9 178.6 ; + RECT 188.3 184.2 195.9 183.4 ; + RECT 192.1 183.4 192.9 183.2 ; + RECT 190.9 178.6 191.7 178.0 ; + RECT 193.1 178.0 194.1 177.2 ; + RECT 190.7 182.4 191.7 181.6 ; + RECT 195.1 178.0 195.9 176.4 ; + RECT 188.3 178.0 189.1 176.4 ; + RECT 192.9 181.2 194.1 180.4 ; + RECT 193.3 181.6 194.1 181.2 ; + RECT 193.3 182.4 194.3 181.6 ; + RECT 190.7 185.6 191.5 184.8 ; + RECT 193.5 185.6 194.3 184.8 ; + RECT 190.9 178.0 191.9 177.2 ; + RECT 188.3 182.8 189.1 178.6 ; + RECT 190.9 181.6 191.7 179.4 ; + RECT 195.1 176.4 202.7 175.6 ; + RECT 197.7 179.4 199.3 178.6 ; + RECT 200.1 180.4 200.9 178.0 ; + RECT 201.9 182.8 202.7 178.6 ; + RECT 195.1 184.2 202.7 183.4 ; + RECT 198.9 183.4 199.7 183.2 ; + RECT 197.7 178.6 198.5 178.0 ; + RECT 199.9 178.0 200.9 177.2 ; + RECT 197.5 182.4 198.5 181.6 ; + RECT 201.9 178.0 202.7 176.4 ; + RECT 195.1 178.0 195.9 176.4 ; + RECT 199.7 181.2 200.9 180.4 ; + RECT 200.1 181.6 200.9 181.2 ; + RECT 200.1 182.4 201.1 181.6 ; + RECT 197.5 185.6 198.3 184.8 ; + RECT 200.3 185.6 201.1 184.8 ; + RECT 197.7 178.0 198.7 177.2 ; + RECT 195.1 182.8 195.9 178.6 ; + RECT 197.7 181.6 198.5 179.4 ; + RECT 188.7 184.2 202.3 183.4 ; + RECT 188.3 175.6 195.9 176.4 ; + RECT 190.9 172.6 192.5 173.4 ; + RECT 193.3 171.6 194.1 174.0 ; + RECT 195.1 169.2 195.9 173.4 ; + RECT 188.3 167.8 195.9 168.6 ; + RECT 192.1 168.6 192.9 168.8 ; + RECT 190.9 173.4 191.7 174.0 ; + RECT 193.1 174.0 194.1 174.8 ; + RECT 190.7 169.6 191.7 170.4 ; + RECT 195.1 174.0 195.9 175.6 ; + RECT 188.3 174.0 189.1 175.6 ; + RECT 192.9 170.8 194.1 171.6 ; + RECT 193.3 170.4 194.1 170.8 ; + RECT 193.3 169.6 194.3 170.4 ; + RECT 190.7 166.4 191.5 167.2 ; + RECT 193.5 166.4 194.3 167.2 ; + RECT 190.9 174.0 191.9 174.8 ; + RECT 188.3 169.2 189.1 173.4 ; + RECT 190.9 170.4 191.7 172.6 ; + RECT 195.1 175.6 202.7 176.4 ; + RECT 197.7 172.6 199.3 173.4 ; + RECT 200.1 171.6 200.9 174.0 ; + RECT 201.9 169.2 202.7 173.4 ; + RECT 195.1 167.8 202.7 168.6 ; + RECT 198.9 168.6 199.7 168.8 ; + RECT 197.7 173.4 198.5 174.0 ; + RECT 199.9 174.0 200.9 174.8 ; + RECT 197.5 169.6 198.5 170.4 ; + RECT 201.9 174.0 202.7 175.6 ; + RECT 195.1 174.0 195.9 175.6 ; + RECT 199.7 170.8 200.9 171.6 ; + RECT 200.1 170.4 200.9 170.8 ; + RECT 200.1 169.6 201.1 170.4 ; + RECT 197.5 166.4 198.3 167.2 ; + RECT 200.3 166.4 201.1 167.2 ; + RECT 197.7 174.0 198.7 174.8 ; + RECT 195.1 169.2 195.9 173.4 ; + RECT 197.7 170.4 198.5 172.6 ; + RECT 188.7 167.8 202.3 168.6 ; + RECT 188.3 362.8 195.9 363.6 ; + RECT 190.9 359.8 192.5 360.6 ; + RECT 193.3 358.8 194.1 361.2 ; + RECT 195.1 356.4 195.9 360.6 ; + RECT 188.3 355.0 195.9 355.8 ; + RECT 192.1 355.8 192.9 356.0 ; + RECT 190.9 360.6 191.7 361.2 ; + RECT 193.1 361.2 194.1 362.0 ; + RECT 190.7 356.8 191.7 357.6 ; + RECT 195.1 361.2 195.9 362.8 ; + RECT 188.3 361.2 189.1 362.8 ; + RECT 192.9 358.0 194.1 358.8 ; + RECT 193.3 357.6 194.1 358.0 ; + RECT 193.3 356.8 194.3 357.6 ; + RECT 190.7 353.6 191.5 354.4 ; + RECT 193.5 353.6 194.3 354.4 ; + RECT 190.9 361.2 191.9 362.0 ; + RECT 188.3 356.4 189.1 360.6 ; + RECT 190.9 357.6 191.7 359.8 ; + RECT 195.1 362.8 202.7 363.6 ; + RECT 197.7 359.8 199.3 360.6 ; + RECT 200.1 358.8 200.9 361.2 ; + RECT 201.9 356.4 202.7 360.6 ; + RECT 195.1 355.0 202.7 355.8 ; + RECT 198.9 355.8 199.7 356.0 ; + RECT 197.7 360.6 198.5 361.2 ; + RECT 199.9 361.2 200.9 362.0 ; + RECT 197.5 356.8 198.5 357.6 ; + RECT 201.9 361.2 202.7 362.8 ; + RECT 195.1 361.2 195.9 362.8 ; + RECT 199.7 358.0 200.9 358.8 ; + RECT 200.1 357.6 200.9 358.0 ; + RECT 200.1 356.8 201.1 357.6 ; + RECT 197.5 353.6 198.3 354.4 ; + RECT 200.3 353.6 201.1 354.4 ; + RECT 197.7 361.2 198.7 362.0 ; + RECT 195.1 356.4 195.9 360.6 ; + RECT 197.7 357.6 198.5 359.8 ; + RECT 188.7 355.0 202.3 355.8 ; + RECT 174.7 175.6 182.3 176.4 ; + RECT 177.3 172.6 178.9 173.4 ; + RECT 179.7 171.6 180.5 174.0 ; + RECT 181.5 169.2 182.3 173.4 ; + RECT 174.7 167.8 182.3 168.6 ; + RECT 178.5 168.6 179.3 168.8 ; + RECT 177.3 173.4 178.1 174.0 ; + RECT 179.5 174.0 180.5 174.8 ; + RECT 177.1 169.6 178.1 170.4 ; + RECT 181.5 174.0 182.3 175.6 ; + RECT 174.7 174.0 175.5 175.6 ; + RECT 179.3 170.8 180.5 171.6 ; + RECT 179.7 170.4 180.5 170.8 ; + RECT 179.7 169.6 180.7 170.4 ; + RECT 177.1 166.4 177.9 167.2 ; + RECT 179.9 166.4 180.7 167.2 ; + RECT 177.3 174.0 178.3 174.8 ; + RECT 174.7 169.2 175.5 173.4 ; + RECT 177.3 170.4 178.1 172.6 ; + RECT 174.7 176.4 182.3 175.6 ; + RECT 177.3 179.4 178.9 178.6 ; + RECT 179.7 180.4 180.5 178.0 ; + RECT 181.5 182.8 182.3 178.6 ; + RECT 174.7 184.2 182.3 183.4 ; + RECT 178.5 183.4 179.3 183.2 ; + RECT 177.3 178.6 178.1 178.0 ; + RECT 179.5 178.0 180.5 177.2 ; + RECT 177.1 182.4 178.1 181.6 ; + RECT 181.5 178.0 182.3 176.4 ; + RECT 174.7 178.0 175.5 176.4 ; + RECT 179.3 181.2 180.5 180.4 ; + RECT 179.7 181.6 180.5 181.2 ; + RECT 179.7 182.4 180.7 181.6 ; + RECT 177.1 185.6 177.9 184.8 ; + RECT 179.9 185.6 180.7 184.8 ; + RECT 177.3 178.0 178.3 177.2 ; + RECT 174.7 182.8 175.5 178.6 ; + RECT 177.3 181.6 178.1 179.4 ; + RECT 174.7 196.4 182.3 197.2 ; + RECT 177.3 193.4 178.9 194.2 ; + RECT 179.7 192.4 180.5 194.8 ; + RECT 181.5 190.0 182.3 194.2 ; + RECT 174.7 188.6 182.3 189.4 ; + RECT 178.5 189.4 179.3 189.6 ; + RECT 177.3 194.2 178.1 194.8 ; + RECT 179.5 194.8 180.5 195.6 ; + RECT 177.1 190.4 178.1 191.2 ; + RECT 181.5 194.8 182.3 196.4 ; + RECT 174.7 194.8 175.5 196.4 ; + RECT 179.3 191.6 180.5 192.4 ; + RECT 179.7 191.2 180.5 191.6 ; + RECT 179.7 190.4 180.7 191.2 ; + RECT 177.1 187.2 177.9 188.0 ; + RECT 179.9 187.2 180.7 188.0 ; + RECT 177.3 194.8 178.3 195.6 ; + RECT 174.7 190.0 175.5 194.2 ; + RECT 177.3 191.2 178.1 193.4 ; + RECT 174.7 197.2 182.3 196.4 ; + RECT 177.3 200.2 178.9 199.4 ; + RECT 179.7 201.2 180.5 198.8 ; + RECT 181.5 203.6 182.3 199.4 ; + RECT 174.7 205.0 182.3 204.2 ; + RECT 178.5 204.2 179.3 204.0 ; + RECT 177.3 199.4 178.1 198.8 ; + RECT 179.5 198.8 180.5 198.0 ; + RECT 177.1 203.2 178.1 202.4 ; + RECT 181.5 198.8 182.3 197.2 ; + RECT 174.7 198.8 175.5 197.2 ; + RECT 179.3 202.0 180.5 201.2 ; + RECT 179.7 202.4 180.5 202.0 ; + RECT 179.7 203.2 180.7 202.4 ; + RECT 177.1 206.4 177.9 205.6 ; + RECT 179.9 206.4 180.7 205.6 ; + RECT 177.3 198.8 178.3 198.0 ; + RECT 174.7 203.6 175.5 199.4 ; + RECT 177.3 202.4 178.1 200.2 ; + RECT 174.7 217.2 182.3 218.0 ; + RECT 177.3 214.2 178.9 215.0 ; + RECT 179.7 213.2 180.5 215.6 ; + RECT 181.5 210.8 182.3 215.0 ; + RECT 174.7 209.4 182.3 210.2 ; + RECT 178.5 210.2 179.3 210.4 ; + RECT 177.3 215.0 178.1 215.6 ; + RECT 179.5 215.6 180.5 216.4 ; + RECT 177.1 211.2 178.1 212.0 ; + RECT 181.5 215.6 182.3 217.2 ; + RECT 174.7 215.6 175.5 217.2 ; + RECT 179.3 212.4 180.5 213.2 ; + RECT 179.7 212.0 180.5 212.4 ; + RECT 179.7 211.2 180.7 212.0 ; + RECT 177.1 208.0 177.9 208.8 ; + RECT 179.9 208.0 180.7 208.8 ; + RECT 177.3 215.6 178.3 216.4 ; + RECT 174.7 210.8 175.5 215.0 ; + RECT 177.3 212.0 178.1 214.2 ; + RECT 174.7 218.0 182.3 217.2 ; + RECT 177.3 221.0 178.9 220.2 ; + RECT 179.7 222.0 180.5 219.6 ; + RECT 181.5 224.4 182.3 220.2 ; + RECT 174.7 225.8 182.3 225.0 ; + RECT 178.5 225.0 179.3 224.8 ; + RECT 177.3 220.2 178.1 219.6 ; + RECT 179.5 219.6 180.5 218.8 ; + RECT 177.1 224.0 178.1 223.2 ; + RECT 181.5 219.6 182.3 218.0 ; + RECT 174.7 219.6 175.5 218.0 ; + RECT 179.3 222.8 180.5 222.0 ; + RECT 179.7 223.2 180.5 222.8 ; + RECT 179.7 224.0 180.7 223.2 ; + RECT 177.1 227.2 177.9 226.4 ; + RECT 179.9 227.2 180.7 226.4 ; + RECT 177.3 219.6 178.3 218.8 ; + RECT 174.7 224.4 175.5 220.2 ; + RECT 177.3 223.2 178.1 221.0 ; + RECT 174.7 238.0 182.3 238.8 ; + RECT 177.3 235.0 178.9 235.8 ; + RECT 179.7 234.0 180.5 236.4 ; + RECT 181.5 231.6 182.3 235.8 ; + RECT 174.7 230.2 182.3 231.0 ; + RECT 178.5 231.0 179.3 231.2 ; + RECT 177.3 235.8 178.1 236.4 ; + RECT 179.5 236.4 180.5 237.2 ; + RECT 177.1 232.0 178.1 232.8 ; + RECT 181.5 236.4 182.3 238.0 ; + RECT 174.7 236.4 175.5 238.0 ; + RECT 179.3 233.2 180.5 234.0 ; + RECT 179.7 232.8 180.5 233.2 ; + RECT 179.7 232.0 180.7 232.8 ; + RECT 177.1 228.8 177.9 229.6 ; + RECT 179.9 228.8 180.7 229.6 ; + RECT 177.3 236.4 178.3 237.2 ; + RECT 174.7 231.6 175.5 235.8 ; + RECT 177.3 232.8 178.1 235.0 ; + RECT 174.7 238.8 182.3 238.0 ; + RECT 177.3 241.8 178.9 241.0 ; + RECT 179.7 242.8 180.5 240.4 ; + RECT 181.5 245.2 182.3 241.0 ; + RECT 174.7 246.6 182.3 245.8 ; + RECT 178.5 245.8 179.3 245.6 ; + RECT 177.3 241.0 178.1 240.4 ; + RECT 179.5 240.4 180.5 239.6 ; + RECT 177.1 244.8 178.1 244.0 ; + RECT 181.5 240.4 182.3 238.8 ; + RECT 174.7 240.4 175.5 238.8 ; + RECT 179.3 243.6 180.5 242.8 ; + RECT 179.7 244.0 180.5 243.6 ; + RECT 179.7 244.8 180.7 244.0 ; + RECT 177.1 248.0 177.9 247.2 ; + RECT 179.9 248.0 180.7 247.2 ; + RECT 177.3 240.4 178.3 239.6 ; + RECT 174.7 245.2 175.5 241.0 ; + RECT 177.3 244.0 178.1 241.8 ; + RECT 174.7 258.8 182.3 259.6 ; + RECT 177.3 255.8 178.9 256.6 ; + RECT 179.7 254.8 180.5 257.2 ; + RECT 181.5 252.4 182.3 256.6 ; + RECT 174.7 251.0 182.3 251.8 ; + RECT 178.5 251.8 179.3 252.0 ; + RECT 177.3 256.6 178.1 257.2 ; + RECT 179.5 257.2 180.5 258.0 ; + RECT 177.1 252.8 178.1 253.6 ; + RECT 181.5 257.2 182.3 258.8 ; + RECT 174.7 257.2 175.5 258.8 ; + RECT 179.3 254.0 180.5 254.8 ; + RECT 179.7 253.6 180.5 254.0 ; + RECT 179.7 252.8 180.7 253.6 ; + RECT 177.1 249.6 177.9 250.4 ; + RECT 179.9 249.6 180.7 250.4 ; + RECT 177.3 257.2 178.3 258.0 ; + RECT 174.7 252.4 175.5 256.6 ; + RECT 177.3 253.6 178.1 255.8 ; + RECT 174.7 259.6 182.3 258.8 ; + RECT 177.3 262.6 178.9 261.8 ; + RECT 179.7 263.6 180.5 261.2 ; + RECT 181.5 266.0 182.3 261.8 ; + RECT 174.7 267.4 182.3 266.6 ; + RECT 178.5 266.6 179.3 266.4 ; + RECT 177.3 261.8 178.1 261.2 ; + RECT 179.5 261.2 180.5 260.4 ; + RECT 177.1 265.6 178.1 264.8 ; + RECT 181.5 261.2 182.3 259.6 ; + RECT 174.7 261.2 175.5 259.6 ; + RECT 179.3 264.4 180.5 263.6 ; + RECT 179.7 264.8 180.5 264.4 ; + RECT 179.7 265.6 180.7 264.8 ; + RECT 177.1 268.8 177.9 268.0 ; + RECT 179.9 268.8 180.7 268.0 ; + RECT 177.3 261.2 178.3 260.4 ; + RECT 174.7 266.0 175.5 261.8 ; + RECT 177.3 264.8 178.1 262.6 ; + RECT 174.7 279.6 182.3 280.4 ; + RECT 177.3 276.6 178.9 277.4 ; + RECT 179.7 275.6 180.5 278.0 ; + RECT 181.5 273.2 182.3 277.4 ; + RECT 174.7 271.8 182.3 272.6 ; + RECT 178.5 272.6 179.3 272.8 ; + RECT 177.3 277.4 178.1 278.0 ; + RECT 179.5 278.0 180.5 278.8 ; + RECT 177.1 273.6 178.1 274.4 ; + RECT 181.5 278.0 182.3 279.6 ; + RECT 174.7 278.0 175.5 279.6 ; + RECT 179.3 274.8 180.5 275.6 ; + RECT 179.7 274.4 180.5 274.8 ; + RECT 179.7 273.6 180.7 274.4 ; + RECT 177.1 270.4 177.9 271.2 ; + RECT 179.9 270.4 180.7 271.2 ; + RECT 177.3 278.0 178.3 278.8 ; + RECT 174.7 273.2 175.5 277.4 ; + RECT 177.3 274.4 178.1 276.6 ; + RECT 174.7 280.4 182.3 279.6 ; + RECT 177.3 283.4 178.9 282.6 ; + RECT 179.7 284.4 180.5 282.0 ; + RECT 181.5 286.8 182.3 282.6 ; + RECT 174.7 288.2 182.3 287.4 ; + RECT 178.5 287.4 179.3 287.2 ; + RECT 177.3 282.6 178.1 282.0 ; + RECT 179.5 282.0 180.5 281.2 ; + RECT 177.1 286.4 178.1 285.6 ; + RECT 181.5 282.0 182.3 280.4 ; + RECT 174.7 282.0 175.5 280.4 ; + RECT 179.3 285.2 180.5 284.4 ; + RECT 179.7 285.6 180.5 285.2 ; + RECT 179.7 286.4 180.7 285.6 ; + RECT 177.1 289.6 177.9 288.8 ; + RECT 179.9 289.6 180.7 288.8 ; + RECT 177.3 282.0 178.3 281.2 ; + RECT 174.7 286.8 175.5 282.6 ; + RECT 177.3 285.6 178.1 283.4 ; + RECT 174.7 300.4 182.3 301.2 ; + RECT 177.3 297.4 178.9 298.2 ; + RECT 179.7 296.4 180.5 298.8 ; + RECT 181.5 294.0 182.3 298.2 ; + RECT 174.7 292.6 182.3 293.4 ; + RECT 178.5 293.4 179.3 293.6 ; + RECT 177.3 298.2 178.1 298.8 ; + RECT 179.5 298.8 180.5 299.6 ; + RECT 177.1 294.4 178.1 295.2 ; + RECT 181.5 298.8 182.3 300.4 ; + RECT 174.7 298.8 175.5 300.4 ; + RECT 179.3 295.6 180.5 296.4 ; + RECT 179.7 295.2 180.5 295.6 ; + RECT 179.7 294.4 180.7 295.2 ; + RECT 177.1 291.2 177.9 292.0 ; + RECT 179.9 291.2 180.7 292.0 ; + RECT 177.3 298.8 178.3 299.6 ; + RECT 174.7 294.0 175.5 298.2 ; + RECT 177.3 295.2 178.1 297.4 ; + RECT 174.7 301.2 182.3 300.4 ; + RECT 177.3 304.2 178.9 303.4 ; + RECT 179.7 305.2 180.5 302.8 ; + RECT 181.5 307.6 182.3 303.4 ; + RECT 174.7 309.0 182.3 308.2 ; + RECT 178.5 308.2 179.3 308.0 ; + RECT 177.3 303.4 178.1 302.8 ; + RECT 179.5 302.8 180.5 302.0 ; + RECT 177.1 307.2 178.1 306.4 ; + RECT 181.5 302.8 182.3 301.2 ; + RECT 174.7 302.8 175.5 301.2 ; + RECT 179.3 306.0 180.5 305.2 ; + RECT 179.7 306.4 180.5 306.0 ; + RECT 179.7 307.2 180.7 306.4 ; + RECT 177.1 310.4 177.9 309.6 ; + RECT 179.9 310.4 180.7 309.6 ; + RECT 177.3 302.8 178.3 302.0 ; + RECT 174.7 307.6 175.5 303.4 ; + RECT 177.3 306.4 178.1 304.2 ; + RECT 174.7 321.2 182.3 322.0 ; + RECT 177.3 318.2 178.9 319.0 ; + RECT 179.7 317.2 180.5 319.6 ; + RECT 181.5 314.8 182.3 319.0 ; + RECT 174.7 313.4 182.3 314.2 ; + RECT 178.5 314.2 179.3 314.4 ; + RECT 177.3 319.0 178.1 319.6 ; + RECT 179.5 319.6 180.5 320.4 ; + RECT 177.1 315.2 178.1 316.0 ; + RECT 181.5 319.6 182.3 321.2 ; + RECT 174.7 319.6 175.5 321.2 ; + RECT 179.3 316.4 180.5 317.2 ; + RECT 179.7 316.0 180.5 316.4 ; + RECT 179.7 315.2 180.7 316.0 ; + RECT 177.1 312.0 177.9 312.8 ; + RECT 179.9 312.0 180.7 312.8 ; + RECT 177.3 319.6 178.3 320.4 ; + RECT 174.7 314.8 175.5 319.0 ; + RECT 177.3 316.0 178.1 318.2 ; + RECT 174.7 322.0 182.3 321.2 ; + RECT 177.3 325.0 178.9 324.2 ; + RECT 179.7 326.0 180.5 323.6 ; + RECT 181.5 328.4 182.3 324.2 ; + RECT 174.7 329.8 182.3 329.0 ; + RECT 178.5 329.0 179.3 328.8 ; + RECT 177.3 324.2 178.1 323.6 ; + RECT 179.5 323.6 180.5 322.8 ; + RECT 177.1 328.0 178.1 327.2 ; + RECT 181.5 323.6 182.3 322.0 ; + RECT 174.7 323.6 175.5 322.0 ; + RECT 179.3 326.8 180.5 326.0 ; + RECT 179.7 327.2 180.5 326.8 ; + RECT 179.7 328.0 180.7 327.2 ; + RECT 177.1 331.2 177.9 330.4 ; + RECT 179.9 331.2 180.7 330.4 ; + RECT 177.3 323.6 178.3 322.8 ; + RECT 174.7 328.4 175.5 324.2 ; + RECT 177.3 327.2 178.1 325.0 ; + RECT 174.7 342.0 182.3 342.8 ; + RECT 177.3 339.0 178.9 339.8 ; + RECT 179.7 338.0 180.5 340.4 ; + RECT 181.5 335.6 182.3 339.8 ; + RECT 174.7 334.2 182.3 335.0 ; + RECT 178.5 335.0 179.3 335.2 ; + RECT 177.3 339.8 178.1 340.4 ; + RECT 179.5 340.4 180.5 341.2 ; + RECT 177.1 336.0 178.1 336.8 ; + RECT 181.5 340.4 182.3 342.0 ; + RECT 174.7 340.4 175.5 342.0 ; + RECT 179.3 337.2 180.5 338.0 ; + RECT 179.7 336.8 180.5 337.2 ; + RECT 179.7 336.0 180.7 336.8 ; + RECT 177.1 332.8 177.9 333.6 ; + RECT 179.9 332.8 180.7 333.6 ; + RECT 177.3 340.4 178.3 341.2 ; + RECT 174.7 335.6 175.5 339.8 ; + RECT 177.3 336.8 178.1 339.0 ; + RECT 174.7 342.8 182.3 342.0 ; + RECT 177.3 345.8 178.9 345.0 ; + RECT 179.7 346.8 180.5 344.4 ; + RECT 181.5 349.2 182.3 345.0 ; + RECT 174.7 350.6 182.3 349.8 ; + RECT 178.5 349.8 179.3 349.6 ; + RECT 177.3 345.0 178.1 344.4 ; + RECT 179.5 344.4 180.5 343.6 ; + RECT 177.1 348.8 178.1 348.0 ; + RECT 181.5 344.4 182.3 342.8 ; + RECT 174.7 344.4 175.5 342.8 ; + RECT 179.3 347.6 180.5 346.8 ; + RECT 179.7 348.0 180.5 347.6 ; + RECT 179.7 348.8 180.7 348.0 ; + RECT 177.1 352.0 177.9 351.2 ; + RECT 179.9 352.0 180.7 351.2 ; + RECT 177.3 344.4 178.3 343.6 ; + RECT 174.7 349.2 175.5 345.0 ; + RECT 177.3 348.0 178.1 345.8 ; + RECT 174.7 362.8 182.3 363.6 ; + RECT 177.3 359.8 178.9 360.6 ; + RECT 179.7 358.8 180.5 361.2 ; + RECT 181.5 356.4 182.3 360.6 ; + RECT 174.7 355.0 182.3 355.8 ; + RECT 178.5 355.8 179.3 356.0 ; + RECT 177.3 360.6 178.1 361.2 ; + RECT 179.5 361.2 180.5 362.0 ; + RECT 177.1 356.8 178.1 357.6 ; + RECT 181.5 361.2 182.3 362.8 ; + RECT 174.7 361.2 175.5 362.8 ; + RECT 179.3 358.0 180.5 358.8 ; + RECT 179.7 357.6 180.5 358.0 ; + RECT 179.7 356.8 180.7 357.6 ; + RECT 177.1 353.6 177.9 354.4 ; + RECT 179.9 353.6 180.7 354.4 ; + RECT 177.3 361.2 178.3 362.0 ; + RECT 174.7 356.4 175.5 360.6 ; + RECT 177.3 357.6 178.1 359.8 ; + RECT 175.1 167.8 181.9 168.6 ; + RECT 175.1 183.4 181.9 184.2 ; + RECT 175.1 188.6 181.9 189.4 ; + RECT 175.1 204.2 181.9 205.0 ; + RECT 175.1 209.4 181.9 210.2 ; + RECT 175.1 225.0 181.9 225.8 ; + RECT 175.1 230.2 181.9 231.0 ; + RECT 175.1 245.8 181.9 246.6 ; + RECT 175.1 251.0 181.9 251.8 ; + RECT 175.1 266.6 181.9 267.4 ; + RECT 175.1 271.8 181.9 272.6 ; + RECT 175.1 287.4 181.9 288.2 ; + RECT 175.1 292.6 181.9 293.4 ; + RECT 175.1 308.2 181.9 309.0 ; + RECT 175.1 313.4 181.9 314.2 ; + RECT 175.1 329.0 181.9 329.8 ; + RECT 175.1 334.2 181.9 335.0 ; + RECT 175.1 349.8 181.9 350.6 ; + RECT 175.1 355.0 181.9 355.8 ; + RECT 201.9 175.6 209.5 176.4 ; + RECT 204.5 172.6 206.1 173.4 ; + RECT 206.9 171.6 207.7 174.0 ; + RECT 208.7 169.2 209.5 173.4 ; + RECT 201.9 167.8 209.5 168.6 ; + RECT 205.7 168.6 206.5 168.8 ; + RECT 204.5 173.4 205.3 174.0 ; + RECT 206.7 174.0 207.7 174.8 ; + RECT 204.3 169.6 205.3 170.4 ; + RECT 208.7 174.0 209.5 175.6 ; + RECT 201.9 174.0 202.7 175.6 ; + RECT 206.5 170.8 207.7 171.6 ; + RECT 206.9 170.4 207.7 170.8 ; + RECT 206.9 169.6 207.9 170.4 ; + RECT 204.3 166.4 205.1 167.2 ; + RECT 207.1 166.4 207.9 167.2 ; + RECT 204.5 174.0 205.5 174.8 ; + RECT 201.9 169.2 202.7 173.4 ; + RECT 204.5 170.4 205.3 172.6 ; + RECT 201.9 176.4 209.5 175.6 ; + RECT 204.5 179.4 206.1 178.6 ; + RECT 206.9 180.4 207.7 178.0 ; + RECT 208.7 182.8 209.5 178.6 ; + RECT 201.9 184.2 209.5 183.4 ; + RECT 205.7 183.4 206.5 183.2 ; + RECT 204.5 178.6 205.3 178.0 ; + RECT 206.7 178.0 207.7 177.2 ; + RECT 204.3 182.4 205.3 181.6 ; + RECT 208.7 178.0 209.5 176.4 ; + RECT 201.9 178.0 202.7 176.4 ; + RECT 206.5 181.2 207.7 180.4 ; + RECT 206.9 181.6 207.7 181.2 ; + RECT 206.9 182.4 207.9 181.6 ; + RECT 204.3 185.6 205.1 184.8 ; + RECT 207.1 185.6 207.9 184.8 ; + RECT 204.5 178.0 205.5 177.2 ; + RECT 201.9 182.8 202.7 178.6 ; + RECT 204.5 181.6 205.3 179.4 ; + RECT 201.9 196.4 209.5 197.2 ; + RECT 204.5 193.4 206.1 194.2 ; + RECT 206.9 192.4 207.7 194.8 ; + RECT 208.7 190.0 209.5 194.2 ; + RECT 201.9 188.6 209.5 189.4 ; + RECT 205.7 189.4 206.5 189.6 ; + RECT 204.5 194.2 205.3 194.8 ; + RECT 206.7 194.8 207.7 195.6 ; + RECT 204.3 190.4 205.3 191.2 ; + RECT 208.7 194.8 209.5 196.4 ; + RECT 201.9 194.8 202.7 196.4 ; + RECT 206.5 191.6 207.7 192.4 ; + RECT 206.9 191.2 207.7 191.6 ; + RECT 206.9 190.4 207.9 191.2 ; + RECT 204.3 187.2 205.1 188.0 ; + RECT 207.1 187.2 207.9 188.0 ; + RECT 204.5 194.8 205.5 195.6 ; + RECT 201.9 190.0 202.7 194.2 ; + RECT 204.5 191.2 205.3 193.4 ; + RECT 201.9 197.2 209.5 196.4 ; + RECT 204.5 200.2 206.1 199.4 ; + RECT 206.9 201.2 207.7 198.8 ; + RECT 208.7 203.6 209.5 199.4 ; + RECT 201.9 205.0 209.5 204.2 ; + RECT 205.7 204.2 206.5 204.0 ; + RECT 204.5 199.4 205.3 198.8 ; + RECT 206.7 198.8 207.7 198.0 ; + RECT 204.3 203.2 205.3 202.4 ; + RECT 208.7 198.8 209.5 197.2 ; + RECT 201.9 198.8 202.7 197.2 ; + RECT 206.5 202.0 207.7 201.2 ; + RECT 206.9 202.4 207.7 202.0 ; + RECT 206.9 203.2 207.9 202.4 ; + RECT 204.3 206.4 205.1 205.6 ; + RECT 207.1 206.4 207.9 205.6 ; + RECT 204.5 198.8 205.5 198.0 ; + RECT 201.9 203.6 202.7 199.4 ; + RECT 204.5 202.4 205.3 200.2 ; + RECT 201.9 217.2 209.5 218.0 ; + RECT 204.5 214.2 206.1 215.0 ; + RECT 206.9 213.2 207.7 215.6 ; + RECT 208.7 210.8 209.5 215.0 ; + RECT 201.9 209.4 209.5 210.2 ; + RECT 205.7 210.2 206.5 210.4 ; + RECT 204.5 215.0 205.3 215.6 ; + RECT 206.7 215.6 207.7 216.4 ; + RECT 204.3 211.2 205.3 212.0 ; + RECT 208.7 215.6 209.5 217.2 ; + RECT 201.9 215.6 202.7 217.2 ; + RECT 206.5 212.4 207.7 213.2 ; + RECT 206.9 212.0 207.7 212.4 ; + RECT 206.9 211.2 207.9 212.0 ; + RECT 204.3 208.0 205.1 208.8 ; + RECT 207.1 208.0 207.9 208.8 ; + RECT 204.5 215.6 205.5 216.4 ; + RECT 201.9 210.8 202.7 215.0 ; + RECT 204.5 212.0 205.3 214.2 ; + RECT 201.9 218.0 209.5 217.2 ; + RECT 204.5 221.0 206.1 220.2 ; + RECT 206.9 222.0 207.7 219.6 ; + RECT 208.7 224.4 209.5 220.2 ; + RECT 201.9 225.8 209.5 225.0 ; + RECT 205.7 225.0 206.5 224.8 ; + RECT 204.5 220.2 205.3 219.6 ; + RECT 206.7 219.6 207.7 218.8 ; + RECT 204.3 224.0 205.3 223.2 ; + RECT 208.7 219.6 209.5 218.0 ; + RECT 201.9 219.6 202.7 218.0 ; + RECT 206.5 222.8 207.7 222.0 ; + RECT 206.9 223.2 207.7 222.8 ; + RECT 206.9 224.0 207.9 223.2 ; + RECT 204.3 227.2 205.1 226.4 ; + RECT 207.1 227.2 207.9 226.4 ; + RECT 204.5 219.6 205.5 218.8 ; + RECT 201.9 224.4 202.7 220.2 ; + RECT 204.5 223.2 205.3 221.0 ; + RECT 201.9 238.0 209.5 238.8 ; + RECT 204.5 235.0 206.1 235.8 ; + RECT 206.9 234.0 207.7 236.4 ; + RECT 208.7 231.6 209.5 235.8 ; + RECT 201.9 230.2 209.5 231.0 ; + RECT 205.7 231.0 206.5 231.2 ; + RECT 204.5 235.8 205.3 236.4 ; + RECT 206.7 236.4 207.7 237.2 ; + RECT 204.3 232.0 205.3 232.8 ; + RECT 208.7 236.4 209.5 238.0 ; + RECT 201.9 236.4 202.7 238.0 ; + RECT 206.5 233.2 207.7 234.0 ; + RECT 206.9 232.8 207.7 233.2 ; + RECT 206.9 232.0 207.9 232.8 ; + RECT 204.3 228.8 205.1 229.6 ; + RECT 207.1 228.8 207.9 229.6 ; + RECT 204.5 236.4 205.5 237.2 ; + RECT 201.9 231.6 202.7 235.8 ; + RECT 204.5 232.8 205.3 235.0 ; + RECT 201.9 238.8 209.5 238.0 ; + RECT 204.5 241.8 206.1 241.0 ; + RECT 206.9 242.8 207.7 240.4 ; + RECT 208.7 245.2 209.5 241.0 ; + RECT 201.9 246.6 209.5 245.8 ; + RECT 205.7 245.8 206.5 245.6 ; + RECT 204.5 241.0 205.3 240.4 ; + RECT 206.7 240.4 207.7 239.6 ; + RECT 204.3 244.8 205.3 244.0 ; + RECT 208.7 240.4 209.5 238.8 ; + RECT 201.9 240.4 202.7 238.8 ; + RECT 206.5 243.6 207.7 242.8 ; + RECT 206.9 244.0 207.7 243.6 ; + RECT 206.9 244.8 207.9 244.0 ; + RECT 204.3 248.0 205.1 247.2 ; + RECT 207.1 248.0 207.9 247.2 ; + RECT 204.5 240.4 205.5 239.6 ; + RECT 201.9 245.2 202.7 241.0 ; + RECT 204.5 244.0 205.3 241.8 ; + RECT 201.9 258.8 209.5 259.6 ; + RECT 204.5 255.8 206.1 256.6 ; + RECT 206.9 254.8 207.7 257.2 ; + RECT 208.7 252.4 209.5 256.6 ; + RECT 201.9 251.0 209.5 251.8 ; + RECT 205.7 251.8 206.5 252.0 ; + RECT 204.5 256.6 205.3 257.2 ; + RECT 206.7 257.2 207.7 258.0 ; + RECT 204.3 252.8 205.3 253.6 ; + RECT 208.7 257.2 209.5 258.8 ; + RECT 201.9 257.2 202.7 258.8 ; + RECT 206.5 254.0 207.7 254.8 ; + RECT 206.9 253.6 207.7 254.0 ; + RECT 206.9 252.8 207.9 253.6 ; + RECT 204.3 249.6 205.1 250.4 ; + RECT 207.1 249.6 207.9 250.4 ; + RECT 204.5 257.2 205.5 258.0 ; + RECT 201.9 252.4 202.7 256.6 ; + RECT 204.5 253.6 205.3 255.8 ; + RECT 201.9 259.6 209.5 258.8 ; + RECT 204.5 262.6 206.1 261.8 ; + RECT 206.9 263.6 207.7 261.2 ; + RECT 208.7 266.0 209.5 261.8 ; + RECT 201.9 267.4 209.5 266.6 ; + RECT 205.7 266.6 206.5 266.4 ; + RECT 204.5 261.8 205.3 261.2 ; + RECT 206.7 261.2 207.7 260.4 ; + RECT 204.3 265.6 205.3 264.8 ; + RECT 208.7 261.2 209.5 259.6 ; + RECT 201.9 261.2 202.7 259.6 ; + RECT 206.5 264.4 207.7 263.6 ; + RECT 206.9 264.8 207.7 264.4 ; + RECT 206.9 265.6 207.9 264.8 ; + RECT 204.3 268.8 205.1 268.0 ; + RECT 207.1 268.8 207.9 268.0 ; + RECT 204.5 261.2 205.5 260.4 ; + RECT 201.9 266.0 202.7 261.8 ; + RECT 204.5 264.8 205.3 262.6 ; + RECT 201.9 279.6 209.5 280.4 ; + RECT 204.5 276.6 206.1 277.4 ; + RECT 206.9 275.6 207.7 278.0 ; + RECT 208.7 273.2 209.5 277.4 ; + RECT 201.9 271.8 209.5 272.6 ; + RECT 205.7 272.6 206.5 272.8 ; + RECT 204.5 277.4 205.3 278.0 ; + RECT 206.7 278.0 207.7 278.8 ; + RECT 204.3 273.6 205.3 274.4 ; + RECT 208.7 278.0 209.5 279.6 ; + RECT 201.9 278.0 202.7 279.6 ; + RECT 206.5 274.8 207.7 275.6 ; + RECT 206.9 274.4 207.7 274.8 ; + RECT 206.9 273.6 207.9 274.4 ; + RECT 204.3 270.4 205.1 271.2 ; + RECT 207.1 270.4 207.9 271.2 ; + RECT 204.5 278.0 205.5 278.8 ; + RECT 201.9 273.2 202.7 277.4 ; + RECT 204.5 274.4 205.3 276.6 ; + RECT 201.9 280.4 209.5 279.6 ; + RECT 204.5 283.4 206.1 282.6 ; + RECT 206.9 284.4 207.7 282.0 ; + RECT 208.7 286.8 209.5 282.6 ; + RECT 201.9 288.2 209.5 287.4 ; + RECT 205.7 287.4 206.5 287.2 ; + RECT 204.5 282.6 205.3 282.0 ; + RECT 206.7 282.0 207.7 281.2 ; + RECT 204.3 286.4 205.3 285.6 ; + RECT 208.7 282.0 209.5 280.4 ; + RECT 201.9 282.0 202.7 280.4 ; + RECT 206.5 285.2 207.7 284.4 ; + RECT 206.9 285.6 207.7 285.2 ; + RECT 206.9 286.4 207.9 285.6 ; + RECT 204.3 289.6 205.1 288.8 ; + RECT 207.1 289.6 207.9 288.8 ; + RECT 204.5 282.0 205.5 281.2 ; + RECT 201.9 286.8 202.7 282.6 ; + RECT 204.5 285.6 205.3 283.4 ; + RECT 201.9 300.4 209.5 301.2 ; + RECT 204.5 297.4 206.1 298.2 ; + RECT 206.9 296.4 207.7 298.8 ; + RECT 208.7 294.0 209.5 298.2 ; + RECT 201.9 292.6 209.5 293.4 ; + RECT 205.7 293.4 206.5 293.6 ; + RECT 204.5 298.2 205.3 298.8 ; + RECT 206.7 298.8 207.7 299.6 ; + RECT 204.3 294.4 205.3 295.2 ; + RECT 208.7 298.8 209.5 300.4 ; + RECT 201.9 298.8 202.7 300.4 ; + RECT 206.5 295.6 207.7 296.4 ; + RECT 206.9 295.2 207.7 295.6 ; + RECT 206.9 294.4 207.9 295.2 ; + RECT 204.3 291.2 205.1 292.0 ; + RECT 207.1 291.2 207.9 292.0 ; + RECT 204.5 298.8 205.5 299.6 ; + RECT 201.9 294.0 202.7 298.2 ; + RECT 204.5 295.2 205.3 297.4 ; + RECT 201.9 301.2 209.5 300.4 ; + RECT 204.5 304.2 206.1 303.4 ; + RECT 206.9 305.2 207.7 302.8 ; + RECT 208.7 307.6 209.5 303.4 ; + RECT 201.9 309.0 209.5 308.2 ; + RECT 205.7 308.2 206.5 308.0 ; + RECT 204.5 303.4 205.3 302.8 ; + RECT 206.7 302.8 207.7 302.0 ; + RECT 204.3 307.2 205.3 306.4 ; + RECT 208.7 302.8 209.5 301.2 ; + RECT 201.9 302.8 202.7 301.2 ; + RECT 206.5 306.0 207.7 305.2 ; + RECT 206.9 306.4 207.7 306.0 ; + RECT 206.9 307.2 207.9 306.4 ; + RECT 204.3 310.4 205.1 309.6 ; + RECT 207.1 310.4 207.9 309.6 ; + RECT 204.5 302.8 205.5 302.0 ; + RECT 201.9 307.6 202.7 303.4 ; + RECT 204.5 306.4 205.3 304.2 ; + RECT 201.9 321.2 209.5 322.0 ; + RECT 204.5 318.2 206.1 319.0 ; + RECT 206.9 317.2 207.7 319.6 ; + RECT 208.7 314.8 209.5 319.0 ; + RECT 201.9 313.4 209.5 314.2 ; + RECT 205.7 314.2 206.5 314.4 ; + RECT 204.5 319.0 205.3 319.6 ; + RECT 206.7 319.6 207.7 320.4 ; + RECT 204.3 315.2 205.3 316.0 ; + RECT 208.7 319.6 209.5 321.2 ; + RECT 201.9 319.6 202.7 321.2 ; + RECT 206.5 316.4 207.7 317.2 ; + RECT 206.9 316.0 207.7 316.4 ; + RECT 206.9 315.2 207.9 316.0 ; + RECT 204.3 312.0 205.1 312.8 ; + RECT 207.1 312.0 207.9 312.8 ; + RECT 204.5 319.6 205.5 320.4 ; + RECT 201.9 314.8 202.7 319.0 ; + RECT 204.5 316.0 205.3 318.2 ; + RECT 201.9 322.0 209.5 321.2 ; + RECT 204.5 325.0 206.1 324.2 ; + RECT 206.9 326.0 207.7 323.6 ; + RECT 208.7 328.4 209.5 324.2 ; + RECT 201.9 329.8 209.5 329.0 ; + RECT 205.7 329.0 206.5 328.8 ; + RECT 204.5 324.2 205.3 323.6 ; + RECT 206.7 323.6 207.7 322.8 ; + RECT 204.3 328.0 205.3 327.2 ; + RECT 208.7 323.6 209.5 322.0 ; + RECT 201.9 323.6 202.7 322.0 ; + RECT 206.5 326.8 207.7 326.0 ; + RECT 206.9 327.2 207.7 326.8 ; + RECT 206.9 328.0 207.9 327.2 ; + RECT 204.3 331.2 205.1 330.4 ; + RECT 207.1 331.2 207.9 330.4 ; + RECT 204.5 323.6 205.5 322.8 ; + RECT 201.9 328.4 202.7 324.2 ; + RECT 204.5 327.2 205.3 325.0 ; + RECT 201.9 342.0 209.5 342.8 ; + RECT 204.5 339.0 206.1 339.8 ; + RECT 206.9 338.0 207.7 340.4 ; + RECT 208.7 335.6 209.5 339.8 ; + RECT 201.9 334.2 209.5 335.0 ; + RECT 205.7 335.0 206.5 335.2 ; + RECT 204.5 339.8 205.3 340.4 ; + RECT 206.7 340.4 207.7 341.2 ; + RECT 204.3 336.0 205.3 336.8 ; + RECT 208.7 340.4 209.5 342.0 ; + RECT 201.9 340.4 202.7 342.0 ; + RECT 206.5 337.2 207.7 338.0 ; + RECT 206.9 336.8 207.7 337.2 ; + RECT 206.9 336.0 207.9 336.8 ; + RECT 204.3 332.8 205.1 333.6 ; + RECT 207.1 332.8 207.9 333.6 ; + RECT 204.5 340.4 205.5 341.2 ; + RECT 201.9 335.6 202.7 339.8 ; + RECT 204.5 336.8 205.3 339.0 ; + RECT 201.9 342.8 209.5 342.0 ; + RECT 204.5 345.8 206.1 345.0 ; + RECT 206.9 346.8 207.7 344.4 ; + RECT 208.7 349.2 209.5 345.0 ; + RECT 201.9 350.6 209.5 349.8 ; + RECT 205.7 349.8 206.5 349.6 ; + RECT 204.5 345.0 205.3 344.4 ; + RECT 206.7 344.4 207.7 343.6 ; + RECT 204.3 348.8 205.3 348.0 ; + RECT 208.7 344.4 209.5 342.8 ; + RECT 201.9 344.4 202.7 342.8 ; + RECT 206.5 347.6 207.7 346.8 ; + RECT 206.9 348.0 207.7 347.6 ; + RECT 206.9 348.8 207.9 348.0 ; + RECT 204.3 352.0 205.1 351.2 ; + RECT 207.1 352.0 207.9 351.2 ; + RECT 204.5 344.4 205.5 343.6 ; + RECT 201.9 349.2 202.7 345.0 ; + RECT 204.5 348.0 205.3 345.8 ; + RECT 201.9 362.8 209.5 363.6 ; + RECT 204.5 359.8 206.1 360.6 ; + RECT 206.9 358.8 207.7 361.2 ; + RECT 208.7 356.4 209.5 360.6 ; + RECT 201.9 355.0 209.5 355.8 ; + RECT 205.7 355.8 206.5 356.0 ; + RECT 204.5 360.6 205.3 361.2 ; + RECT 206.7 361.2 207.7 362.0 ; + RECT 204.3 356.8 205.3 357.6 ; + RECT 208.7 361.2 209.5 362.8 ; + RECT 201.9 361.2 202.7 362.8 ; + RECT 206.5 358.0 207.7 358.8 ; + RECT 206.9 357.6 207.7 358.0 ; + RECT 206.9 356.8 207.9 357.6 ; + RECT 204.3 353.6 205.1 354.4 ; + RECT 207.1 353.6 207.9 354.4 ; + RECT 204.5 361.2 205.5 362.0 ; + RECT 201.9 356.4 202.7 360.6 ; + RECT 204.5 357.6 205.3 359.8 ; + RECT 202.3 167.8 209.1 168.6 ; + RECT 202.3 183.4 209.1 184.2 ; + RECT 202.3 188.6 209.1 189.4 ; + RECT 202.3 204.2 209.1 205.0 ; + RECT 202.3 209.4 209.1 210.2 ; + RECT 202.3 225.0 209.1 225.8 ; + RECT 202.3 230.2 209.1 231.0 ; + RECT 202.3 245.8 209.1 246.6 ; + RECT 202.3 251.0 209.1 251.8 ; + RECT 202.3 266.6 209.1 267.4 ; + RECT 202.3 271.8 209.1 272.6 ; + RECT 202.3 287.4 209.1 288.2 ; + RECT 202.3 292.6 209.1 293.4 ; + RECT 202.3 308.2 209.1 309.0 ; + RECT 202.3 313.4 209.1 314.2 ; + RECT 202.3 329.0 209.1 329.8 ; + RECT 202.3 334.2 209.1 335.0 ; + RECT 202.3 349.8 209.1 350.6 ; + RECT 202.3 355.0 209.1 355.8 ; + RECT 173.0 183.4 211.2 184.2 ; + RECT 173.0 188.6 211.2 189.4 ; + RECT 173.0 204.2 211.2 205.0 ; + RECT 173.0 209.4 211.2 210.2 ; + RECT 173.0 225.0 211.2 225.8 ; + RECT 173.0 230.2 211.2 231.0 ; + RECT 173.0 245.8 211.2 246.6 ; + RECT 173.0 251.0 211.2 251.8 ; + RECT 173.0 266.6 211.2 267.4 ; + RECT 173.0 271.8 211.2 272.6 ; + RECT 173.0 287.4 211.2 288.2 ; + RECT 173.0 292.6 211.2 293.4 ; + RECT 173.0 308.2 211.2 309.0 ; + RECT 173.0 313.4 211.2 314.2 ; + RECT 173.0 329.0 211.2 329.8 ; + RECT 173.0 334.2 211.2 335.0 ; + RECT 173.0 349.8 211.2 350.6 ; + RECT 185.4 152.4 186.2 153.2 ; + RECT 183.4 152.4 184.2 153.2 ; + RECT 185.4 156.8 186.2 157.6 ; + RECT 183.4 156.8 184.2 157.6 ; + RECT 187.4 156.8 188.2 157.6 ; + RECT 185.4 156.8 186.2 157.6 ; + RECT 181.9 150.3 188.7 150.9 ; + RECT 192.2 152.4 193.0 153.2 ; + RECT 190.2 152.4 191.0 153.2 ; + RECT 192.2 156.8 193.0 157.6 ; + RECT 190.2 156.8 191.0 157.6 ; + RECT 194.2 156.8 195.0 157.6 ; + RECT 192.2 156.8 193.0 157.6 ; + RECT 188.7 150.3 195.5 150.9 ; + RECT 199.0 152.4 199.8 153.2 ; + RECT 197.0 152.4 197.8 153.2 ; + RECT 199.0 156.8 199.8 157.6 ; + RECT 197.0 156.8 197.8 157.6 ; + RECT 201.0 156.8 201.8 157.6 ; + RECT 199.0 156.8 199.8 157.6 ; + RECT 195.5 150.3 202.3 150.9 ; + RECT 173.0 150.3 202.3 150.9 ; + RECT 193.3 133.6 194.1 136.0 ; + RECT 189.9 122.8 191.3 123.4 ; + RECT 191.7 134.2 192.5 136.0 ; + RECT 194.1 125.8 194.9 127.0 ; + RECT 189.9 121.4 190.5 122.8 ; + RECT 189.3 116.6 190.7 117.2 ; + RECT 194.9 121.4 195.5 122.8 ; + RECT 191.9 138.6 192.7 140.4 ; + RECT 188.3 142.4 195.9 143.2 ; + RECT 190.5 123.4 191.3 123.6 ; + RECT 189.9 117.2 190.7 121.4 ; + RECT 190.1 125.6 191.3 126.4 ; + RECT 193.1 116.6 193.9 122.2 ; + RECT 191.7 127.0 194.9 127.6 ; + RECT 191.3 121.4 192.1 122.2 ; + RECT 193.3 132.8 194.7 133.6 ; + RECT 195.1 140.0 195.9 140.8 ; + RECT 193.5 139.2 195.9 140.0 ; + RECT 191.9 136.0 192.5 138.6 ; + RECT 191.5 116.6 192.3 121.4 ; + RECT 194.7 116.6 195.5 121.4 ; + RECT 194.5 122.8 195.5 123.6 ; + RECT 193.3 128.2 194.1 132.8 ; + RECT 189.3 114.8 190.1 116.6 ; + RECT 193.5 140.0 194.3 140.4 ; + RECT 190.1 126.4 190.9 136.0 ; + RECT 191.7 127.6 192.3 128.2 ; + RECT 193.5 138.6 194.3 139.2 ; + RECT 191.7 128.2 192.5 131.8 ; + RECT 200.1 133.6 200.9 136.0 ; + RECT 196.7 122.8 198.1 123.4 ; + RECT 198.5 134.2 199.3 136.0 ; + RECT 200.9 125.8 201.7 127.0 ; + RECT 196.7 121.4 197.3 122.8 ; + RECT 196.1 116.6 197.5 117.2 ; + RECT 201.7 121.4 202.3 122.8 ; + RECT 198.7 138.6 199.5 140.4 ; + RECT 195.1 142.4 202.7 143.2 ; + RECT 197.3 123.4 198.1 123.6 ; + RECT 196.7 117.2 197.5 121.4 ; + RECT 196.9 125.6 198.1 126.4 ; + RECT 199.9 116.6 200.7 122.2 ; + RECT 198.5 127.0 201.7 127.6 ; + RECT 198.1 121.4 198.9 122.2 ; + RECT 200.1 132.8 201.5 133.6 ; + RECT 201.9 140.0 202.7 140.8 ; + RECT 200.3 139.2 202.7 140.0 ; + RECT 198.7 136.0 199.3 138.6 ; + RECT 198.3 116.6 199.1 121.4 ; + RECT 201.5 116.6 202.3 121.4 ; + RECT 201.3 122.8 202.3 123.6 ; + RECT 200.1 128.2 200.9 132.8 ; + RECT 196.1 114.8 196.9 116.6 ; + RECT 200.3 140.0 201.1 140.4 ; + RECT 196.9 126.4 197.7 136.0 ; + RECT 198.5 127.6 199.1 128.2 ; + RECT 200.3 138.6 201.1 139.2 ; + RECT 198.5 128.2 199.3 131.8 ; + RECT 173.0 142.5 202.3 143.1 ; + RECT 192.5 79.2 193.3 81.4 ; + RECT 191.1 91.4 192.7 92.2 ; + RECT 192.9 87.0 194.1 87.8 ; + RECT 189.7 84.2 190.5 88.0 ; + RECT 191.1 92.2 191.9 94.2 ; + RECT 192.9 84.2 194.7 85.6 ; + RECT 193.3 82.8 194.9 83.6 ; + RECT 189.7 88.0 193.7 88.6 ; + RECT 192.9 87.8 193.7 88.0 ; + RECT 190.9 79.2 191.7 80.6 ; + RECT 189.5 103.4 190.3 105.8 ; + RECT 189.7 88.6 190.5 90.6 ; + RECT 192.9 88.6 193.7 90.6 ; + RECT 190.9 75.4 191.7 77.4 ; + RECT 191.3 84.2 192.1 85.6 ; + RECT 189.3 78.0 190.1 80.6 ; + RECT 192.7 96.2 193.5 97.4 ; + RECT 189.3 82.0 190.1 82.8 ; + RECT 189.3 74.0 193.3 74.8 ; + RECT 191.7 69.0 192.5 70.6 ; + RECT 192.7 92.8 193.5 95.4 ; + RECT 192.7 103.4 193.5 106.6 ; + RECT 189.3 74.8 190.1 76.8 ; + RECT 192.5 74.8 193.3 76.8 ; + RECT 192.7 95.4 195.3 96.2 ; + RECT 194.3 104.2 195.3 105.0 ; + RECT 189.5 92.8 190.3 101.4 ; + RECT 189.3 77.4 191.7 78.0 ; + RECT 191.1 96.6 191.9 105.8 ; + RECT 193.7 85.6 194.7 85.8 ; + RECT 189.3 72.6 194.9 73.4 ; + RECT 194.7 96.2 195.3 104.2 ; + RECT 191.3 89.2 192.1 91.4 ; + RECT 194.1 75.4 194.9 82.8 ; + RECT 189.7 105.8 190.3 106.4 ; + RECT 189.5 80.6 190.1 82.0 ; + RECT 189.7 106.4 191.5 107.2 ; + RECT 199.3 79.2 200.1 81.4 ; + RECT 197.9 91.4 199.5 92.2 ; + RECT 199.7 87.0 200.9 87.8 ; + RECT 196.5 84.2 197.3 88.0 ; + RECT 197.9 92.2 198.7 94.2 ; + RECT 199.7 84.2 201.5 85.6 ; + RECT 200.1 82.8 201.7 83.6 ; + RECT 196.5 88.0 200.5 88.6 ; + RECT 199.7 87.8 200.5 88.0 ; + RECT 197.7 79.2 198.5 80.6 ; + RECT 196.3 103.4 197.1 105.8 ; + RECT 196.5 88.6 197.3 90.6 ; + RECT 199.7 88.6 200.5 90.6 ; + RECT 197.7 75.4 198.5 77.4 ; + RECT 198.1 84.2 198.9 85.6 ; + RECT 196.1 78.0 196.9 80.6 ; + RECT 199.5 96.2 200.3 97.4 ; + RECT 196.1 82.0 196.9 82.8 ; + RECT 196.1 74.0 200.1 74.8 ; + RECT 198.5 69.0 199.3 70.6 ; + RECT 199.5 92.8 200.3 95.4 ; + RECT 199.5 103.4 200.3 106.6 ; + RECT 196.1 74.8 196.9 76.8 ; + RECT 199.3 74.8 200.1 76.8 ; + RECT 199.5 95.4 202.1 96.2 ; + RECT 201.1 104.2 202.1 105.0 ; + RECT 196.3 92.8 197.1 101.4 ; + RECT 196.1 77.4 198.5 78.0 ; + RECT 197.9 96.6 198.7 105.8 ; + RECT 200.5 85.6 201.5 85.8 ; + RECT 196.1 72.6 201.7 73.4 ; + RECT 201.5 96.2 202.1 104.2 ; + RECT 198.1 89.2 198.9 91.4 ; + RECT 200.9 75.4 201.7 82.8 ; + RECT 196.5 105.8 197.1 106.4 ; + RECT 196.3 80.6 196.9 82.0 ; + RECT 196.5 106.4 198.3 107.2 ; + RECT 173.0 72.6 202.3 73.2 ; + RECT 173.0 143.1 202.3 142.5 ; + RECT 173.0 150.9 202.3 150.3 ; + RECT 173.0 73.2 202.3 72.6 ; + RECT 97.3 194.7 98.1 195.5 ; + RECT 95.3 194.7 96.1 195.5 ; + RECT 97.3 187.3 98.1 188.1 ; + RECT 95.3 187.3 96.1 188.1 ; + RECT 95.7 191.0 96.5 191.8 ; + RECT 97.7 191.1 98.3 191.7 ; + RECT 94.1 196.5 100.7 197.1 ; + RECT 94.1 186.1 100.7 186.7 ; + RECT 97.3 198.9 98.1 198.1 ; + RECT 95.3 198.9 96.1 198.1 ; + RECT 97.3 206.3 98.1 205.5 ; + RECT 95.3 206.3 96.1 205.5 ; + RECT 95.7 202.6 96.5 201.8 ; + RECT 97.7 202.5 98.3 201.9 ; + RECT 94.1 197.1 100.7 196.5 ; + RECT 94.1 207.5 100.7 206.9 ; + RECT 112.3 194.7 113.1 195.5 ; + RECT 110.3 194.7 111.1 195.5 ; + RECT 114.3 194.7 115.1 195.5 ; + RECT 112.3 194.7 113.1 195.5 ; + RECT 110.3 187.7 111.1 188.5 ; + RECT 114.3 187.7 115.1 188.5 ; + RECT 111.3 189.2 112.1 190.0 ; + RECT 113.3 192.0 114.1 192.8 ; + RECT 115.8 193.4 116.4 194.0 ; + RECT 109.1 196.5 117.7 197.1 ; + RECT 109.1 186.1 117.7 186.7 ; + RECT 120.9 194.7 121.7 195.5 ; + RECT 118.9 194.7 119.7 195.5 ; + RECT 120.9 187.3 121.7 188.1 ; + RECT 118.9 187.3 119.7 188.1 ; + RECT 119.3 191.0 120.1 191.8 ; + RECT 121.3 191.1 121.9 191.7 ; + RECT 117.7 196.5 124.3 197.1 ; + RECT 117.7 186.1 124.3 186.7 ; + RECT 111.3 189.2 112.1 190.0 ; + RECT 113.3 192.0 114.1 192.8 ; + RECT 121.3 191.1 121.9 191.7 ; + RECT 109.1 196.5 124.3 197.1 ; + RECT 109.1 186.1 124.3 186.7 ; + RECT 112.3 198.9 113.1 198.1 ; + RECT 110.3 198.9 111.1 198.1 ; + RECT 114.3 198.9 115.1 198.1 ; + RECT 112.3 198.9 113.1 198.1 ; + RECT 110.3 205.9 111.1 205.1 ; + RECT 114.3 205.9 115.1 205.1 ; + RECT 111.3 204.4 112.1 203.6 ; + RECT 113.3 201.6 114.1 200.8 ; + RECT 115.8 200.2 116.4 199.6 ; + RECT 109.1 197.1 117.7 196.5 ; + RECT 109.1 207.5 117.7 206.9 ; + RECT 120.9 198.9 121.7 198.1 ; + RECT 118.9 198.9 119.7 198.1 ; + RECT 120.9 206.3 121.7 205.5 ; + RECT 118.9 206.3 119.7 205.5 ; + RECT 119.3 202.6 120.1 201.8 ; + RECT 121.3 202.5 121.9 201.9 ; + RECT 117.7 197.1 124.3 196.5 ; + RECT 117.7 207.5 124.3 206.9 ; + RECT 111.3 204.4 112.1 203.6 ; + RECT 113.3 201.6 114.1 200.8 ; + RECT 121.3 202.5 121.9 201.9 ; + RECT 109.1 197.1 124.3 196.5 ; + RECT 109.1 207.5 124.3 206.9 ; + RECT 112.3 215.5 113.1 216.3 ; + RECT 110.3 215.5 111.1 216.3 ; + RECT 114.3 215.5 115.1 216.3 ; + RECT 112.3 215.5 113.1 216.3 ; + RECT 110.3 208.5 111.1 209.3 ; + RECT 114.3 208.5 115.1 209.3 ; + RECT 111.3 210.0 112.1 210.8 ; + RECT 113.3 212.8 114.1 213.6 ; + RECT 115.8 214.2 116.4 214.8 ; + RECT 109.1 217.3 117.7 217.9 ; + RECT 109.1 206.9 117.7 207.5 ; + RECT 120.9 215.5 121.7 216.3 ; + RECT 118.9 215.5 119.7 216.3 ; + RECT 120.9 208.1 121.7 208.9 ; + RECT 118.9 208.1 119.7 208.9 ; + RECT 119.3 211.8 120.1 212.6 ; + RECT 121.3 211.9 121.9 212.5 ; + RECT 117.7 217.3 124.3 217.9 ; + RECT 117.7 206.9 124.3 207.5 ; + RECT 111.3 210.0 112.1 210.8 ; + RECT 113.3 212.8 114.1 213.6 ; + RECT 121.3 211.9 121.9 212.5 ; + RECT 109.1 217.3 124.3 217.9 ; + RECT 109.1 206.9 124.3 207.5 ; + RECT 112.3 219.7 113.1 218.9 ; + RECT 110.3 219.7 111.1 218.9 ; + RECT 114.3 219.7 115.1 218.9 ; + RECT 112.3 219.7 113.1 218.9 ; + RECT 110.3 226.7 111.1 225.9 ; + RECT 114.3 226.7 115.1 225.9 ; + RECT 111.3 225.2 112.1 224.4 ; + RECT 113.3 222.4 114.1 221.6 ; + RECT 115.8 221.0 116.4 220.4 ; + RECT 109.1 217.9 117.7 217.3 ; + RECT 109.1 228.3 117.7 227.7 ; + RECT 120.9 219.7 121.7 218.9 ; + RECT 118.9 219.7 119.7 218.9 ; + RECT 120.9 227.1 121.7 226.3 ; + RECT 118.9 227.1 119.7 226.3 ; + RECT 119.3 223.4 120.1 222.6 ; + RECT 121.3 223.3 121.9 222.7 ; + RECT 117.7 217.9 124.3 217.3 ; + RECT 117.7 228.3 124.3 227.7 ; + RECT 111.3 225.2 112.1 224.4 ; + RECT 113.3 222.4 114.1 221.6 ; + RECT 121.3 223.3 121.9 222.7 ; + RECT 109.1 217.9 124.3 217.3 ; + RECT 109.1 228.3 124.3 227.7 ; + RECT 121.3 191.1 121.9 191.7 ; + RECT 121.3 201.9 121.9 202.5 ; + RECT 121.3 211.9 121.9 212.5 ; + RECT 121.3 222.7 121.9 223.3 ; + RECT 97.3 257.1 98.1 257.9 ; + RECT 95.3 257.1 96.1 257.9 ; + RECT 97.3 249.7 98.1 250.5 ; + RECT 95.3 249.7 96.1 250.5 ; + RECT 95.7 253.4 96.5 254.2 ; + RECT 97.7 253.5 98.3 254.1 ; + RECT 94.1 258.9 100.7 259.5 ; + RECT 94.1 248.5 100.7 249.1 ; + RECT 97.3 261.3 98.1 260.5 ; + RECT 95.3 261.3 96.1 260.5 ; + RECT 97.3 268.7 98.1 267.9 ; + RECT 95.3 268.7 96.1 267.9 ; + RECT 95.7 265.0 96.5 264.2 ; + RECT 97.7 264.9 98.3 264.3 ; + RECT 94.1 259.5 100.7 258.9 ; + RECT 94.1 269.9 100.7 269.3 ; + RECT 112.3 257.1 113.1 257.9 ; + RECT 110.3 257.1 111.1 257.9 ; + RECT 114.3 257.1 115.1 257.9 ; + RECT 112.3 257.1 113.1 257.9 ; + RECT 110.3 250.1 111.1 250.9 ; + RECT 114.3 250.1 115.1 250.9 ; + RECT 111.3 251.6 112.1 252.4 ; + RECT 113.3 254.4 114.1 255.2 ; + RECT 115.8 255.8 116.4 256.4 ; + RECT 109.1 258.9 117.7 259.5 ; + RECT 109.1 248.5 117.7 249.1 ; + RECT 120.9 257.1 121.7 257.9 ; + RECT 118.9 257.1 119.7 257.9 ; + RECT 120.9 249.7 121.7 250.5 ; + RECT 118.9 249.7 119.7 250.5 ; + RECT 119.3 253.4 120.1 254.2 ; + RECT 121.3 253.5 121.9 254.1 ; + RECT 117.7 258.9 124.3 259.5 ; + RECT 117.7 248.5 124.3 249.1 ; + RECT 111.3 251.6 112.1 252.4 ; + RECT 113.3 254.4 114.1 255.2 ; + RECT 121.3 253.5 121.9 254.1 ; + RECT 109.1 258.9 124.3 259.5 ; + RECT 109.1 248.5 124.3 249.1 ; + RECT 112.3 261.3 113.1 260.5 ; + RECT 110.3 261.3 111.1 260.5 ; + RECT 114.3 261.3 115.1 260.5 ; + RECT 112.3 261.3 113.1 260.5 ; + RECT 110.3 268.3 111.1 267.5 ; + RECT 114.3 268.3 115.1 267.5 ; + RECT 111.3 266.8 112.1 266.0 ; + RECT 113.3 264.0 114.1 263.2 ; + RECT 115.8 262.6 116.4 262.0 ; + RECT 109.1 259.5 117.7 258.9 ; + RECT 109.1 269.9 117.7 269.3 ; + RECT 120.9 261.3 121.7 260.5 ; + RECT 118.9 261.3 119.7 260.5 ; + RECT 120.9 268.7 121.7 267.9 ; + RECT 118.9 268.7 119.7 267.9 ; + RECT 119.3 265.0 120.1 264.2 ; + RECT 121.3 264.9 121.9 264.3 ; + RECT 117.7 259.5 124.3 258.9 ; + RECT 117.7 269.9 124.3 269.3 ; + RECT 111.3 266.8 112.1 266.0 ; + RECT 113.3 264.0 114.1 263.2 ; + RECT 121.3 264.9 121.9 264.3 ; + RECT 109.1 259.5 124.3 258.9 ; + RECT 109.1 269.9 124.3 269.3 ; + RECT 112.3 277.9 113.1 278.7 ; + RECT 110.3 277.9 111.1 278.7 ; + RECT 114.3 277.9 115.1 278.7 ; + RECT 112.3 277.9 113.1 278.7 ; + RECT 110.3 270.9 111.1 271.7 ; + RECT 114.3 270.9 115.1 271.7 ; + RECT 111.3 272.4 112.1 273.2 ; + RECT 113.3 275.2 114.1 276.0 ; + RECT 115.8 276.6 116.4 277.2 ; + RECT 109.1 279.7 117.7 280.3 ; + RECT 109.1 269.3 117.7 269.9 ; + RECT 120.9 277.9 121.7 278.7 ; + RECT 118.9 277.9 119.7 278.7 ; + RECT 120.9 270.5 121.7 271.3 ; + RECT 118.9 270.5 119.7 271.3 ; + RECT 119.3 274.2 120.1 275.0 ; + RECT 121.3 274.3 121.9 274.9 ; + RECT 117.7 279.7 124.3 280.3 ; + RECT 117.7 269.3 124.3 269.9 ; + RECT 111.3 272.4 112.1 273.2 ; + RECT 113.3 275.2 114.1 276.0 ; + RECT 121.3 274.3 121.9 274.9 ; + RECT 109.1 279.7 124.3 280.3 ; + RECT 109.1 269.3 124.3 269.9 ; + RECT 112.3 282.1 113.1 281.3 ; + RECT 110.3 282.1 111.1 281.3 ; + RECT 114.3 282.1 115.1 281.3 ; + RECT 112.3 282.1 113.1 281.3 ; + RECT 110.3 289.1 111.1 288.3 ; + RECT 114.3 289.1 115.1 288.3 ; + RECT 111.3 287.6 112.1 286.8 ; + RECT 113.3 284.8 114.1 284.0 ; + RECT 115.8 283.4 116.4 282.8 ; + RECT 109.1 280.3 117.7 279.7 ; + RECT 109.1 290.7 117.7 290.1 ; + RECT 120.9 282.1 121.7 281.3 ; + RECT 118.9 282.1 119.7 281.3 ; + RECT 120.9 289.5 121.7 288.7 ; + RECT 118.9 289.5 119.7 288.7 ; + RECT 119.3 285.8 120.1 285.0 ; + RECT 121.3 285.7 121.9 285.1 ; + RECT 117.7 280.3 124.3 279.7 ; + RECT 117.7 290.7 124.3 290.1 ; + RECT 111.3 287.6 112.1 286.8 ; + RECT 113.3 284.8 114.1 284.0 ; + RECT 121.3 285.7 121.9 285.1 ; + RECT 109.1 280.3 124.3 279.7 ; + RECT 109.1 290.7 124.3 290.1 ; + RECT 121.3 253.5 121.9 254.1 ; + RECT 121.3 264.3 121.9 264.9 ; + RECT 121.3 274.3 121.9 274.9 ; + RECT 121.3 285.1 121.9 285.7 ; + RECT 140.1 194.7 140.9 195.5 ; + RECT 138.1 194.7 138.9 195.5 ; + RECT 142.1 194.7 142.9 195.5 ; + RECT 140.1 194.7 140.9 195.5 ; + RECT 138.1 187.7 138.9 188.5 ; + RECT 142.1 187.7 142.9 188.5 ; + RECT 139.1 189.2 139.9 190.0 ; + RECT 141.1 192.0 141.9 192.8 ; + RECT 143.6 193.4 144.2 194.0 ; + RECT 136.9 196.5 145.5 197.1 ; + RECT 136.9 186.1 145.5 186.7 ; + RECT 148.7 194.7 149.5 195.5 ; + RECT 146.7 194.7 147.5 195.5 ; + RECT 148.7 187.3 149.5 188.1 ; + RECT 146.7 187.3 147.5 188.1 ; + RECT 147.1 191.0 147.9 191.8 ; + RECT 149.1 191.1 149.7 191.7 ; + RECT 145.5 196.5 152.1 197.1 ; + RECT 145.5 186.1 152.1 186.7 ; + RECT 139.1 189.2 139.9 190.0 ; + RECT 141.1 192.0 141.9 192.8 ; + RECT 149.1 191.1 149.7 191.7 ; + RECT 136.9 196.5 152.1 197.1 ; + RECT 136.9 186.1 152.1 186.7 ; + RECT 140.1 198.9 140.9 198.1 ; + RECT 138.1 198.9 138.9 198.1 ; + RECT 142.1 198.9 142.9 198.1 ; + RECT 140.1 198.9 140.9 198.1 ; + RECT 138.1 205.9 138.9 205.1 ; + RECT 142.1 205.9 142.9 205.1 ; + RECT 139.1 204.4 139.9 203.6 ; + RECT 141.1 201.6 141.9 200.8 ; + RECT 143.6 200.2 144.2 199.6 ; + RECT 136.9 197.1 145.5 196.5 ; + RECT 136.9 207.5 145.5 206.9 ; + RECT 148.7 198.9 149.5 198.1 ; + RECT 146.7 198.9 147.5 198.1 ; + RECT 148.7 206.3 149.5 205.5 ; + RECT 146.7 206.3 147.5 205.5 ; + RECT 147.1 202.6 147.9 201.8 ; + RECT 149.1 202.5 149.7 201.9 ; + RECT 145.5 197.1 152.1 196.5 ; + RECT 145.5 207.5 152.1 206.9 ; + RECT 139.1 204.4 139.9 203.6 ; + RECT 141.1 201.6 141.9 200.8 ; + RECT 149.1 202.5 149.7 201.9 ; + RECT 136.9 197.1 152.1 196.5 ; + RECT 136.9 207.5 152.1 206.9 ; + RECT 140.1 215.5 140.9 216.3 ; + RECT 138.1 215.5 138.9 216.3 ; + RECT 142.1 215.5 142.9 216.3 ; + RECT 140.1 215.5 140.9 216.3 ; + RECT 138.1 208.5 138.9 209.3 ; + RECT 142.1 208.5 142.9 209.3 ; + RECT 139.1 210.0 139.9 210.8 ; + RECT 141.1 212.8 141.9 213.6 ; + RECT 143.6 214.2 144.2 214.8 ; + RECT 136.9 217.3 145.5 217.9 ; + RECT 136.9 206.9 145.5 207.5 ; + RECT 148.7 215.5 149.5 216.3 ; + RECT 146.7 215.5 147.5 216.3 ; + RECT 148.7 208.1 149.5 208.9 ; + RECT 146.7 208.1 147.5 208.9 ; + RECT 147.1 211.8 147.9 212.6 ; + RECT 149.1 211.9 149.7 212.5 ; + RECT 145.5 217.3 152.1 217.9 ; + RECT 145.5 206.9 152.1 207.5 ; + RECT 139.1 210.0 139.9 210.8 ; + RECT 141.1 212.8 141.9 213.6 ; + RECT 149.1 211.9 149.7 212.5 ; + RECT 136.9 217.3 152.1 217.9 ; + RECT 136.9 206.9 152.1 207.5 ; + RECT 140.1 219.7 140.9 218.9 ; + RECT 138.1 219.7 138.9 218.9 ; + RECT 142.1 219.7 142.9 218.9 ; + RECT 140.1 219.7 140.9 218.9 ; + RECT 138.1 226.7 138.9 225.9 ; + RECT 142.1 226.7 142.9 225.9 ; + RECT 139.1 225.2 139.9 224.4 ; + RECT 141.1 222.4 141.9 221.6 ; + RECT 143.6 221.0 144.2 220.4 ; + RECT 136.9 217.9 145.5 217.3 ; + RECT 136.9 228.3 145.5 227.7 ; + RECT 148.7 219.7 149.5 218.9 ; + RECT 146.7 219.7 147.5 218.9 ; + RECT 148.7 227.1 149.5 226.3 ; + RECT 146.7 227.1 147.5 226.3 ; + RECT 147.1 223.4 147.9 222.6 ; + RECT 149.1 223.3 149.7 222.7 ; + RECT 145.5 217.9 152.1 217.3 ; + RECT 145.5 228.3 152.1 227.7 ; + RECT 139.1 225.2 139.9 224.4 ; + RECT 141.1 222.4 141.9 221.6 ; + RECT 149.1 223.3 149.7 222.7 ; + RECT 136.9 217.9 152.1 217.3 ; + RECT 136.9 228.3 152.1 227.7 ; + RECT 140.1 236.3 140.9 237.1 ; + RECT 138.1 236.3 138.9 237.1 ; + RECT 142.1 236.3 142.9 237.1 ; + RECT 140.1 236.3 140.9 237.1 ; + RECT 138.1 229.3 138.9 230.1 ; + RECT 142.1 229.3 142.9 230.1 ; + RECT 139.1 230.8 139.9 231.6 ; + RECT 141.1 233.6 141.9 234.4 ; + RECT 143.6 235.0 144.2 235.6 ; + RECT 136.9 238.1 145.5 238.7 ; + RECT 136.9 227.7 145.5 228.3 ; + RECT 148.7 236.3 149.5 237.1 ; + RECT 146.7 236.3 147.5 237.1 ; + RECT 148.7 228.9 149.5 229.7 ; + RECT 146.7 228.9 147.5 229.7 ; + RECT 147.1 232.6 147.9 233.4 ; + RECT 149.1 232.7 149.7 233.3 ; + RECT 145.5 238.1 152.1 238.7 ; + RECT 145.5 227.7 152.1 228.3 ; + RECT 139.1 230.8 139.9 231.6 ; + RECT 141.1 233.6 141.9 234.4 ; + RECT 149.1 232.7 149.7 233.3 ; + RECT 136.9 238.1 152.1 238.7 ; + RECT 136.9 227.7 152.1 228.3 ; + RECT 140.1 240.5 140.9 239.7 ; + RECT 138.1 240.5 138.9 239.7 ; + RECT 142.1 240.5 142.9 239.7 ; + RECT 140.1 240.5 140.9 239.7 ; + RECT 138.1 247.5 138.9 246.7 ; + RECT 142.1 247.5 142.9 246.7 ; + RECT 139.1 246.0 139.9 245.2 ; + RECT 141.1 243.2 141.9 242.4 ; + RECT 143.6 241.8 144.2 241.2 ; + RECT 136.9 238.7 145.5 238.1 ; + RECT 136.9 249.1 145.5 248.5 ; + RECT 148.7 240.5 149.5 239.7 ; + RECT 146.7 240.5 147.5 239.7 ; + RECT 148.7 247.9 149.5 247.1 ; + RECT 146.7 247.9 147.5 247.1 ; + RECT 147.1 244.2 147.9 243.4 ; + RECT 149.1 244.1 149.7 243.5 ; + RECT 145.5 238.7 152.1 238.1 ; + RECT 145.5 249.1 152.1 248.5 ; + RECT 139.1 246.0 139.9 245.2 ; + RECT 141.1 243.2 141.9 242.4 ; + RECT 149.1 244.1 149.7 243.5 ; + RECT 136.9 238.7 152.1 238.1 ; + RECT 136.9 249.1 152.1 248.5 ; + RECT 140.1 257.1 140.9 257.9 ; + RECT 138.1 257.1 138.9 257.9 ; + RECT 142.1 257.1 142.9 257.9 ; + RECT 140.1 257.1 140.9 257.9 ; + RECT 138.1 250.1 138.9 250.9 ; + RECT 142.1 250.1 142.9 250.9 ; + RECT 139.1 251.6 139.9 252.4 ; + RECT 141.1 254.4 141.9 255.2 ; + RECT 143.6 255.8 144.2 256.4 ; + RECT 136.9 258.9 145.5 259.5 ; + RECT 136.9 248.5 145.5 249.1 ; + RECT 148.7 257.1 149.5 257.9 ; + RECT 146.7 257.1 147.5 257.9 ; + RECT 148.7 249.7 149.5 250.5 ; + RECT 146.7 249.7 147.5 250.5 ; + RECT 147.1 253.4 147.9 254.2 ; + RECT 149.1 253.5 149.7 254.1 ; + RECT 145.5 258.9 152.1 259.5 ; + RECT 145.5 248.5 152.1 249.1 ; + RECT 139.1 251.6 139.9 252.4 ; + RECT 141.1 254.4 141.9 255.2 ; + RECT 149.1 253.5 149.7 254.1 ; + RECT 136.9 258.9 152.1 259.5 ; + RECT 136.9 248.5 152.1 249.1 ; + RECT 140.1 261.3 140.9 260.5 ; + RECT 138.1 261.3 138.9 260.5 ; + RECT 142.1 261.3 142.9 260.5 ; + RECT 140.1 261.3 140.9 260.5 ; + RECT 138.1 268.3 138.9 267.5 ; + RECT 142.1 268.3 142.9 267.5 ; + RECT 139.1 266.8 139.9 266.0 ; + RECT 141.1 264.0 141.9 263.2 ; + RECT 143.6 262.6 144.2 262.0 ; + RECT 136.9 259.5 145.5 258.9 ; + RECT 136.9 269.9 145.5 269.3 ; + RECT 148.7 261.3 149.5 260.5 ; + RECT 146.7 261.3 147.5 260.5 ; + RECT 148.7 268.7 149.5 267.9 ; + RECT 146.7 268.7 147.5 267.9 ; + RECT 147.1 265.0 147.9 264.2 ; + RECT 149.1 264.9 149.7 264.3 ; + RECT 145.5 259.5 152.1 258.9 ; + RECT 145.5 269.9 152.1 269.3 ; + RECT 139.1 266.8 139.9 266.0 ; + RECT 141.1 264.0 141.9 263.2 ; + RECT 149.1 264.9 149.7 264.3 ; + RECT 136.9 259.5 152.1 258.9 ; + RECT 136.9 269.9 152.1 269.3 ; + RECT 140.1 277.9 140.9 278.7 ; + RECT 138.1 277.9 138.9 278.7 ; + RECT 142.1 277.9 142.9 278.7 ; + RECT 140.1 277.9 140.9 278.7 ; + RECT 138.1 270.9 138.9 271.7 ; + RECT 142.1 270.9 142.9 271.7 ; + RECT 139.1 272.4 139.9 273.2 ; + RECT 141.1 275.2 141.9 276.0 ; + RECT 143.6 276.6 144.2 277.2 ; + RECT 136.9 279.7 145.5 280.3 ; + RECT 136.9 269.3 145.5 269.9 ; + RECT 148.7 277.9 149.5 278.7 ; + RECT 146.7 277.9 147.5 278.7 ; + RECT 148.7 270.5 149.5 271.3 ; + RECT 146.7 270.5 147.5 271.3 ; + RECT 147.1 274.2 147.9 275.0 ; + RECT 149.1 274.3 149.7 274.9 ; + RECT 145.5 279.7 152.1 280.3 ; + RECT 145.5 269.3 152.1 269.9 ; + RECT 139.1 272.4 139.9 273.2 ; + RECT 141.1 275.2 141.9 276.0 ; + RECT 149.1 274.3 149.7 274.9 ; + RECT 136.9 279.7 152.1 280.3 ; + RECT 136.9 269.3 152.1 269.9 ; + RECT 140.1 282.1 140.9 281.3 ; + RECT 138.1 282.1 138.9 281.3 ; + RECT 142.1 282.1 142.9 281.3 ; + RECT 140.1 282.1 140.9 281.3 ; + RECT 138.1 289.1 138.9 288.3 ; + RECT 142.1 289.1 142.9 288.3 ; + RECT 139.1 287.6 139.9 286.8 ; + RECT 141.1 284.8 141.9 284.0 ; + RECT 143.6 283.4 144.2 282.8 ; + RECT 136.9 280.3 145.5 279.7 ; + RECT 136.9 290.7 145.5 290.1 ; + RECT 148.7 282.1 149.5 281.3 ; + RECT 146.7 282.1 147.5 281.3 ; + RECT 148.7 289.5 149.5 288.7 ; + RECT 146.7 289.5 147.5 288.7 ; + RECT 147.1 285.8 147.9 285.0 ; + RECT 149.1 285.7 149.7 285.1 ; + RECT 145.5 280.3 152.1 279.7 ; + RECT 145.5 290.7 152.1 290.1 ; + RECT 139.1 287.6 139.9 286.8 ; + RECT 141.1 284.8 141.9 284.0 ; + RECT 149.1 285.7 149.7 285.1 ; + RECT 136.9 280.3 152.1 279.7 ; + RECT 136.9 290.7 152.1 290.1 ; + RECT 140.1 298.7 140.9 299.5 ; + RECT 138.1 298.7 138.9 299.5 ; + RECT 142.1 298.7 142.9 299.5 ; + RECT 140.1 298.7 140.9 299.5 ; + RECT 138.1 291.7 138.9 292.5 ; + RECT 142.1 291.7 142.9 292.5 ; + RECT 139.1 293.2 139.9 294.0 ; + RECT 141.1 296.0 141.9 296.8 ; + RECT 143.6 297.4 144.2 298.0 ; + RECT 136.9 300.5 145.5 301.1 ; + RECT 136.9 290.1 145.5 290.7 ; + RECT 148.7 298.7 149.5 299.5 ; + RECT 146.7 298.7 147.5 299.5 ; + RECT 148.7 291.3 149.5 292.1 ; + RECT 146.7 291.3 147.5 292.1 ; + RECT 147.1 295.0 147.9 295.8 ; + RECT 149.1 295.1 149.7 295.7 ; + RECT 145.5 300.5 152.1 301.1 ; + RECT 145.5 290.1 152.1 290.7 ; + RECT 139.1 293.2 139.9 294.0 ; + RECT 141.1 296.0 141.9 296.8 ; + RECT 149.1 295.1 149.7 295.7 ; + RECT 136.9 300.5 152.1 301.1 ; + RECT 136.9 290.1 152.1 290.7 ; + RECT 140.1 302.9 140.9 302.1 ; + RECT 138.1 302.9 138.9 302.1 ; + RECT 142.1 302.9 142.9 302.1 ; + RECT 140.1 302.9 140.9 302.1 ; + RECT 138.1 309.9 138.9 309.1 ; + RECT 142.1 309.9 142.9 309.1 ; + RECT 139.1 308.4 139.9 307.6 ; + RECT 141.1 305.6 141.9 304.8 ; + RECT 143.6 304.2 144.2 303.6 ; + RECT 136.9 301.1 145.5 300.5 ; + RECT 136.9 311.5 145.5 310.9 ; + RECT 148.7 302.9 149.5 302.1 ; + RECT 146.7 302.9 147.5 302.1 ; + RECT 148.7 310.3 149.5 309.5 ; + RECT 146.7 310.3 147.5 309.5 ; + RECT 147.1 306.6 147.9 305.8 ; + RECT 149.1 306.5 149.7 305.9 ; + RECT 145.5 301.1 152.1 300.5 ; + RECT 145.5 311.5 152.1 310.9 ; + RECT 139.1 308.4 139.9 307.6 ; + RECT 141.1 305.6 141.9 304.8 ; + RECT 149.1 306.5 149.7 305.9 ; + RECT 136.9 301.1 152.1 300.5 ; + RECT 136.9 311.5 152.1 310.9 ; + RECT 140.1 319.5 140.9 320.3 ; + RECT 138.1 319.5 138.9 320.3 ; + RECT 142.1 319.5 142.9 320.3 ; + RECT 140.1 319.5 140.9 320.3 ; + RECT 138.1 312.5 138.9 313.3 ; + RECT 142.1 312.5 142.9 313.3 ; + RECT 139.1 314.0 139.9 314.8 ; + RECT 141.1 316.8 141.9 317.6 ; + RECT 143.6 318.2 144.2 318.8 ; + RECT 136.9 321.3 145.5 321.9 ; + RECT 136.9 310.9 145.5 311.5 ; + RECT 148.7 319.5 149.5 320.3 ; + RECT 146.7 319.5 147.5 320.3 ; + RECT 148.7 312.1 149.5 312.9 ; + RECT 146.7 312.1 147.5 312.9 ; + RECT 147.1 315.8 147.9 316.6 ; + RECT 149.1 315.9 149.7 316.5 ; + RECT 145.5 321.3 152.1 321.9 ; + RECT 145.5 310.9 152.1 311.5 ; + RECT 139.1 314.0 139.9 314.8 ; + RECT 141.1 316.8 141.9 317.6 ; + RECT 149.1 315.9 149.7 316.5 ; + RECT 136.9 321.3 152.1 321.9 ; + RECT 136.9 310.9 152.1 311.5 ; + RECT 140.1 323.7 140.9 322.9 ; + RECT 138.1 323.7 138.9 322.9 ; + RECT 142.1 323.7 142.9 322.9 ; + RECT 140.1 323.7 140.9 322.9 ; + RECT 138.1 330.7 138.9 329.9 ; + RECT 142.1 330.7 142.9 329.9 ; + RECT 139.1 329.2 139.9 328.4 ; + RECT 141.1 326.4 141.9 325.6 ; + RECT 143.6 325.0 144.2 324.4 ; + RECT 136.9 321.9 145.5 321.3 ; + RECT 136.9 332.3 145.5 331.7 ; + RECT 148.7 323.7 149.5 322.9 ; + RECT 146.7 323.7 147.5 322.9 ; + RECT 148.7 331.1 149.5 330.3 ; + RECT 146.7 331.1 147.5 330.3 ; + RECT 147.1 327.4 147.9 326.6 ; + RECT 149.1 327.3 149.7 326.7 ; + RECT 145.5 321.9 152.1 321.3 ; + RECT 145.5 332.3 152.1 331.7 ; + RECT 139.1 329.2 139.9 328.4 ; + RECT 141.1 326.4 141.9 325.6 ; + RECT 149.1 327.3 149.7 326.7 ; + RECT 136.9 321.9 152.1 321.3 ; + RECT 136.9 332.3 152.1 331.7 ; + RECT 140.1 340.3 140.9 341.1 ; + RECT 138.1 340.3 138.9 341.1 ; + RECT 142.1 340.3 142.9 341.1 ; + RECT 140.1 340.3 140.9 341.1 ; + RECT 138.1 333.3 138.9 334.1 ; + RECT 142.1 333.3 142.9 334.1 ; + RECT 139.1 334.8 139.9 335.6 ; + RECT 141.1 337.6 141.9 338.4 ; + RECT 143.6 339.0 144.2 339.6 ; + RECT 136.9 342.1 145.5 342.7 ; + RECT 136.9 331.7 145.5 332.3 ; + RECT 148.7 340.3 149.5 341.1 ; + RECT 146.7 340.3 147.5 341.1 ; + RECT 148.7 332.9 149.5 333.7 ; + RECT 146.7 332.9 147.5 333.7 ; + RECT 147.1 336.6 147.9 337.4 ; + RECT 149.1 336.7 149.7 337.3 ; + RECT 145.5 342.1 152.1 342.7 ; + RECT 145.5 331.7 152.1 332.3 ; + RECT 139.1 334.8 139.9 335.6 ; + RECT 141.1 337.6 141.9 338.4 ; + RECT 149.1 336.7 149.7 337.3 ; + RECT 136.9 342.1 152.1 342.7 ; + RECT 136.9 331.7 152.1 332.3 ; + RECT 140.1 344.5 140.9 343.7 ; + RECT 138.1 344.5 138.9 343.7 ; + RECT 142.1 344.5 142.9 343.7 ; + RECT 140.1 344.5 140.9 343.7 ; + RECT 138.1 351.5 138.9 350.7 ; + RECT 142.1 351.5 142.9 350.7 ; + RECT 139.1 350.0 139.9 349.2 ; + RECT 141.1 347.2 141.9 346.4 ; + RECT 143.6 345.8 144.2 345.2 ; + RECT 136.9 342.7 145.5 342.1 ; + RECT 136.9 353.1 145.5 352.5 ; + RECT 148.7 344.5 149.5 343.7 ; + RECT 146.7 344.5 147.5 343.7 ; + RECT 148.7 351.9 149.5 351.1 ; + RECT 146.7 351.9 147.5 351.1 ; + RECT 147.1 348.2 147.9 347.4 ; + RECT 149.1 348.1 149.7 347.5 ; + RECT 145.5 342.7 152.1 342.1 ; + RECT 145.5 353.1 152.1 352.5 ; + RECT 139.1 350.0 139.9 349.2 ; + RECT 141.1 347.2 141.9 346.4 ; + RECT 149.1 348.1 149.7 347.5 ; + RECT 136.9 342.7 152.1 342.1 ; + RECT 136.9 353.1 152.1 352.5 ; + RECT 149.1 191.1 149.7 191.7 ; + RECT 149.1 201.9 149.7 202.5 ; + RECT 149.1 211.9 149.7 212.5 ; + RECT 149.1 222.7 149.7 223.3 ; + RECT 149.1 232.7 149.7 233.3 ; + RECT 149.1 243.5 149.7 244.1 ; + RECT 149.1 253.5 149.7 254.1 ; + RECT 149.1 264.3 149.7 264.9 ; + RECT 149.1 274.3 149.7 274.9 ; + RECT 149.1 285.1 149.7 285.7 ; + RECT 149.1 295.1 149.7 295.7 ; + RECT 149.1 305.9 149.7 306.5 ; + RECT 149.1 315.9 149.7 316.5 ; + RECT 149.1 326.7 149.7 327.3 ; + RECT 149.1 336.7 149.7 337.3 ; + RECT 149.1 347.5 149.7 348.1 ; + RECT 155.6 194.7 156.4 195.5 ; + RECT 153.6 194.7 154.4 195.5 ; + RECT 157.6 194.7 158.4 195.5 ; + RECT 155.6 194.7 156.4 195.5 ; + RECT 153.6 187.7 154.4 188.5 ; + RECT 157.6 187.7 158.4 188.5 ; + RECT 154.6 189.2 155.4 190.0 ; + RECT 156.6 192.0 157.4 192.8 ; + RECT 159.1 193.4 159.7 194.0 ; + RECT 152.4 196.5 161.0 197.1 ; + RECT 152.4 186.1 161.0 186.7 ; + RECT 164.2 194.7 165.0 195.5 ; + RECT 162.2 194.7 163.0 195.5 ; + RECT 164.2 187.3 165.0 188.1 ; + RECT 162.2 187.3 163.0 188.1 ; + RECT 162.6 191.0 163.4 191.8 ; + RECT 164.6 191.1 165.2 191.7 ; + RECT 161.0 196.5 167.6 197.1 ; + RECT 161.0 186.1 167.6 186.7 ; + RECT 154.6 189.2 155.4 190.0 ; + RECT 156.6 192.0 157.4 192.8 ; + RECT 164.6 191.1 165.2 191.7 ; + RECT 152.4 196.5 167.6 197.1 ; + RECT 152.4 186.1 167.6 186.7 ; + RECT 155.6 198.9 156.4 198.1 ; + RECT 153.6 198.9 154.4 198.1 ; + RECT 157.6 198.9 158.4 198.1 ; + RECT 155.6 198.9 156.4 198.1 ; + RECT 153.6 205.9 154.4 205.1 ; + RECT 157.6 205.9 158.4 205.1 ; + RECT 154.6 204.4 155.4 203.6 ; + RECT 156.6 201.6 157.4 200.8 ; + RECT 159.1 200.2 159.7 199.6 ; + RECT 152.4 197.1 161.0 196.5 ; + RECT 152.4 207.5 161.0 206.9 ; + RECT 164.2 198.9 165.0 198.1 ; + RECT 162.2 198.9 163.0 198.1 ; + RECT 164.2 206.3 165.0 205.5 ; + RECT 162.2 206.3 163.0 205.5 ; + RECT 162.6 202.6 163.4 201.8 ; + RECT 164.6 202.5 165.2 201.9 ; + RECT 161.0 197.1 167.6 196.5 ; + RECT 161.0 207.5 167.6 206.9 ; + RECT 154.6 204.4 155.4 203.6 ; + RECT 156.6 201.6 157.4 200.8 ; + RECT 164.6 202.5 165.2 201.9 ; + RECT 152.4 197.1 167.6 196.5 ; + RECT 152.4 207.5 167.6 206.9 ; + RECT 155.6 215.5 156.4 216.3 ; + RECT 153.6 215.5 154.4 216.3 ; + RECT 157.6 215.5 158.4 216.3 ; + RECT 155.6 215.5 156.4 216.3 ; + RECT 153.6 208.5 154.4 209.3 ; + RECT 157.6 208.5 158.4 209.3 ; + RECT 154.6 210.0 155.4 210.8 ; + RECT 156.6 212.8 157.4 213.6 ; + RECT 159.1 214.2 159.7 214.8 ; + RECT 152.4 217.3 161.0 217.9 ; + RECT 152.4 206.9 161.0 207.5 ; + RECT 164.2 215.5 165.0 216.3 ; + RECT 162.2 215.5 163.0 216.3 ; + RECT 164.2 208.1 165.0 208.9 ; + RECT 162.2 208.1 163.0 208.9 ; + RECT 162.6 211.8 163.4 212.6 ; + RECT 164.6 211.9 165.2 212.5 ; + RECT 161.0 217.3 167.6 217.9 ; + RECT 161.0 206.9 167.6 207.5 ; + RECT 154.6 210.0 155.4 210.8 ; + RECT 156.6 212.8 157.4 213.6 ; + RECT 164.6 211.9 165.2 212.5 ; + RECT 152.4 217.3 167.6 217.9 ; + RECT 152.4 206.9 167.6 207.5 ; + RECT 155.6 219.7 156.4 218.9 ; + RECT 153.6 219.7 154.4 218.9 ; + RECT 157.6 219.7 158.4 218.9 ; + RECT 155.6 219.7 156.4 218.9 ; + RECT 153.6 226.7 154.4 225.9 ; + RECT 157.6 226.7 158.4 225.9 ; + RECT 154.6 225.2 155.4 224.4 ; + RECT 156.6 222.4 157.4 221.6 ; + RECT 159.1 221.0 159.7 220.4 ; + RECT 152.4 217.9 161.0 217.3 ; + RECT 152.4 228.3 161.0 227.7 ; + RECT 164.2 219.7 165.0 218.9 ; + RECT 162.2 219.7 163.0 218.9 ; + RECT 164.2 227.1 165.0 226.3 ; + RECT 162.2 227.1 163.0 226.3 ; + RECT 162.6 223.4 163.4 222.6 ; + RECT 164.6 223.3 165.2 222.7 ; + RECT 161.0 217.9 167.6 217.3 ; + RECT 161.0 228.3 167.6 227.7 ; + RECT 154.6 225.2 155.4 224.4 ; + RECT 156.6 222.4 157.4 221.6 ; + RECT 164.6 223.3 165.2 222.7 ; + RECT 152.4 217.9 167.6 217.3 ; + RECT 152.4 228.3 167.6 227.7 ; + RECT 155.6 236.3 156.4 237.1 ; + RECT 153.6 236.3 154.4 237.1 ; + RECT 157.6 236.3 158.4 237.1 ; + RECT 155.6 236.3 156.4 237.1 ; + RECT 153.6 229.3 154.4 230.1 ; + RECT 157.6 229.3 158.4 230.1 ; + RECT 154.6 230.8 155.4 231.6 ; + RECT 156.6 233.6 157.4 234.4 ; + RECT 159.1 235.0 159.7 235.6 ; + RECT 152.4 238.1 161.0 238.7 ; + RECT 152.4 227.7 161.0 228.3 ; + RECT 164.2 236.3 165.0 237.1 ; + RECT 162.2 236.3 163.0 237.1 ; + RECT 164.2 228.9 165.0 229.7 ; + RECT 162.2 228.9 163.0 229.7 ; + RECT 162.6 232.6 163.4 233.4 ; + RECT 164.6 232.7 165.2 233.3 ; + RECT 161.0 238.1 167.6 238.7 ; + RECT 161.0 227.7 167.6 228.3 ; + RECT 154.6 230.8 155.4 231.6 ; + RECT 156.6 233.6 157.4 234.4 ; + RECT 164.6 232.7 165.2 233.3 ; + RECT 152.4 238.1 167.6 238.7 ; + RECT 152.4 227.7 167.6 228.3 ; + RECT 155.6 240.5 156.4 239.7 ; + RECT 153.6 240.5 154.4 239.7 ; + RECT 157.6 240.5 158.4 239.7 ; + RECT 155.6 240.5 156.4 239.7 ; + RECT 153.6 247.5 154.4 246.7 ; + RECT 157.6 247.5 158.4 246.7 ; + RECT 154.6 246.0 155.4 245.2 ; + RECT 156.6 243.2 157.4 242.4 ; + RECT 159.1 241.8 159.7 241.2 ; + RECT 152.4 238.7 161.0 238.1 ; + RECT 152.4 249.1 161.0 248.5 ; + RECT 164.2 240.5 165.0 239.7 ; + RECT 162.2 240.5 163.0 239.7 ; + RECT 164.2 247.9 165.0 247.1 ; + RECT 162.2 247.9 163.0 247.1 ; + RECT 162.6 244.2 163.4 243.4 ; + RECT 164.6 244.1 165.2 243.5 ; + RECT 161.0 238.7 167.6 238.1 ; + RECT 161.0 249.1 167.6 248.5 ; + RECT 154.6 246.0 155.4 245.2 ; + RECT 156.6 243.2 157.4 242.4 ; + RECT 164.6 244.1 165.2 243.5 ; + RECT 152.4 238.7 167.6 238.1 ; + RECT 152.4 249.1 167.6 248.5 ; + RECT 155.6 257.1 156.4 257.9 ; + RECT 153.6 257.1 154.4 257.9 ; + RECT 157.6 257.1 158.4 257.9 ; + RECT 155.6 257.1 156.4 257.9 ; + RECT 153.6 250.1 154.4 250.9 ; + RECT 157.6 250.1 158.4 250.9 ; + RECT 154.6 251.6 155.4 252.4 ; + RECT 156.6 254.4 157.4 255.2 ; + RECT 159.1 255.8 159.7 256.4 ; + RECT 152.4 258.9 161.0 259.5 ; + RECT 152.4 248.5 161.0 249.1 ; + RECT 164.2 257.1 165.0 257.9 ; + RECT 162.2 257.1 163.0 257.9 ; + RECT 164.2 249.7 165.0 250.5 ; + RECT 162.2 249.7 163.0 250.5 ; + RECT 162.6 253.4 163.4 254.2 ; + RECT 164.6 253.5 165.2 254.1 ; + RECT 161.0 258.9 167.6 259.5 ; + RECT 161.0 248.5 167.6 249.1 ; + RECT 154.6 251.6 155.4 252.4 ; + RECT 156.6 254.4 157.4 255.2 ; + RECT 164.6 253.5 165.2 254.1 ; + RECT 152.4 258.9 167.6 259.5 ; + RECT 152.4 248.5 167.6 249.1 ; + RECT 155.6 261.3 156.4 260.5 ; + RECT 153.6 261.3 154.4 260.5 ; + RECT 157.6 261.3 158.4 260.5 ; + RECT 155.6 261.3 156.4 260.5 ; + RECT 153.6 268.3 154.4 267.5 ; + RECT 157.6 268.3 158.4 267.5 ; + RECT 154.6 266.8 155.4 266.0 ; + RECT 156.6 264.0 157.4 263.2 ; + RECT 159.1 262.6 159.7 262.0 ; + RECT 152.4 259.5 161.0 258.9 ; + RECT 152.4 269.9 161.0 269.3 ; + RECT 164.2 261.3 165.0 260.5 ; + RECT 162.2 261.3 163.0 260.5 ; + RECT 164.2 268.7 165.0 267.9 ; + RECT 162.2 268.7 163.0 267.9 ; + RECT 162.6 265.0 163.4 264.2 ; + RECT 164.6 264.9 165.2 264.3 ; + RECT 161.0 259.5 167.6 258.9 ; + RECT 161.0 269.9 167.6 269.3 ; + RECT 154.6 266.8 155.4 266.0 ; + RECT 156.6 264.0 157.4 263.2 ; + RECT 164.6 264.9 165.2 264.3 ; + RECT 152.4 259.5 167.6 258.9 ; + RECT 152.4 269.9 167.6 269.3 ; + RECT 155.6 277.9 156.4 278.7 ; + RECT 153.6 277.9 154.4 278.7 ; + RECT 157.6 277.9 158.4 278.7 ; + RECT 155.6 277.9 156.4 278.7 ; + RECT 153.6 270.9 154.4 271.7 ; + RECT 157.6 270.9 158.4 271.7 ; + RECT 154.6 272.4 155.4 273.2 ; + RECT 156.6 275.2 157.4 276.0 ; + RECT 159.1 276.6 159.7 277.2 ; + RECT 152.4 279.7 161.0 280.3 ; + RECT 152.4 269.3 161.0 269.9 ; + RECT 164.2 277.9 165.0 278.7 ; + RECT 162.2 277.9 163.0 278.7 ; + RECT 164.2 270.5 165.0 271.3 ; + RECT 162.2 270.5 163.0 271.3 ; + RECT 162.6 274.2 163.4 275.0 ; + RECT 164.6 274.3 165.2 274.9 ; + RECT 161.0 279.7 167.6 280.3 ; + RECT 161.0 269.3 167.6 269.9 ; + RECT 154.6 272.4 155.4 273.2 ; + RECT 156.6 275.2 157.4 276.0 ; + RECT 164.6 274.3 165.2 274.9 ; + RECT 152.4 279.7 167.6 280.3 ; + RECT 152.4 269.3 167.6 269.9 ; + RECT 155.6 282.1 156.4 281.3 ; + RECT 153.6 282.1 154.4 281.3 ; + RECT 157.6 282.1 158.4 281.3 ; + RECT 155.6 282.1 156.4 281.3 ; + RECT 153.6 289.1 154.4 288.3 ; + RECT 157.6 289.1 158.4 288.3 ; + RECT 154.6 287.6 155.4 286.8 ; + RECT 156.6 284.8 157.4 284.0 ; + RECT 159.1 283.4 159.7 282.8 ; + RECT 152.4 280.3 161.0 279.7 ; + RECT 152.4 290.7 161.0 290.1 ; + RECT 164.2 282.1 165.0 281.3 ; + RECT 162.2 282.1 163.0 281.3 ; + RECT 164.2 289.5 165.0 288.7 ; + RECT 162.2 289.5 163.0 288.7 ; + RECT 162.6 285.8 163.4 285.0 ; + RECT 164.6 285.7 165.2 285.1 ; + RECT 161.0 280.3 167.6 279.7 ; + RECT 161.0 290.7 167.6 290.1 ; + RECT 154.6 287.6 155.4 286.8 ; + RECT 156.6 284.8 157.4 284.0 ; + RECT 164.6 285.7 165.2 285.1 ; + RECT 152.4 280.3 167.6 279.7 ; + RECT 152.4 290.7 167.6 290.1 ; + RECT 155.6 298.7 156.4 299.5 ; + RECT 153.6 298.7 154.4 299.5 ; + RECT 157.6 298.7 158.4 299.5 ; + RECT 155.6 298.7 156.4 299.5 ; + RECT 153.6 291.7 154.4 292.5 ; + RECT 157.6 291.7 158.4 292.5 ; + RECT 154.6 293.2 155.4 294.0 ; + RECT 156.6 296.0 157.4 296.8 ; + RECT 159.1 297.4 159.7 298.0 ; + RECT 152.4 300.5 161.0 301.1 ; + RECT 152.4 290.1 161.0 290.7 ; + RECT 164.2 298.7 165.0 299.5 ; + RECT 162.2 298.7 163.0 299.5 ; + RECT 164.2 291.3 165.0 292.1 ; + RECT 162.2 291.3 163.0 292.1 ; + RECT 162.6 295.0 163.4 295.8 ; + RECT 164.6 295.1 165.2 295.7 ; + RECT 161.0 300.5 167.6 301.1 ; + RECT 161.0 290.1 167.6 290.7 ; + RECT 154.6 293.2 155.4 294.0 ; + RECT 156.6 296.0 157.4 296.8 ; + RECT 164.6 295.1 165.2 295.7 ; + RECT 152.4 300.5 167.6 301.1 ; + RECT 152.4 290.1 167.6 290.7 ; + RECT 155.6 302.9 156.4 302.1 ; + RECT 153.6 302.9 154.4 302.1 ; + RECT 157.6 302.9 158.4 302.1 ; + RECT 155.6 302.9 156.4 302.1 ; + RECT 153.6 309.9 154.4 309.1 ; + RECT 157.6 309.9 158.4 309.1 ; + RECT 154.6 308.4 155.4 307.6 ; + RECT 156.6 305.6 157.4 304.8 ; + RECT 159.1 304.2 159.7 303.6 ; + RECT 152.4 301.1 161.0 300.5 ; + RECT 152.4 311.5 161.0 310.9 ; + RECT 164.2 302.9 165.0 302.1 ; + RECT 162.2 302.9 163.0 302.1 ; + RECT 164.2 310.3 165.0 309.5 ; + RECT 162.2 310.3 163.0 309.5 ; + RECT 162.6 306.6 163.4 305.8 ; + RECT 164.6 306.5 165.2 305.9 ; + RECT 161.0 301.1 167.6 300.5 ; + RECT 161.0 311.5 167.6 310.9 ; + RECT 154.6 308.4 155.4 307.6 ; + RECT 156.6 305.6 157.4 304.8 ; + RECT 164.6 306.5 165.2 305.9 ; + RECT 152.4 301.1 167.6 300.5 ; + RECT 152.4 311.5 167.6 310.9 ; + RECT 155.6 319.5 156.4 320.3 ; + RECT 153.6 319.5 154.4 320.3 ; + RECT 157.6 319.5 158.4 320.3 ; + RECT 155.6 319.5 156.4 320.3 ; + RECT 153.6 312.5 154.4 313.3 ; + RECT 157.6 312.5 158.4 313.3 ; + RECT 154.6 314.0 155.4 314.8 ; + RECT 156.6 316.8 157.4 317.6 ; + RECT 159.1 318.2 159.7 318.8 ; + RECT 152.4 321.3 161.0 321.9 ; + RECT 152.4 310.9 161.0 311.5 ; + RECT 164.2 319.5 165.0 320.3 ; + RECT 162.2 319.5 163.0 320.3 ; + RECT 164.2 312.1 165.0 312.9 ; + RECT 162.2 312.1 163.0 312.9 ; + RECT 162.6 315.8 163.4 316.6 ; + RECT 164.6 315.9 165.2 316.5 ; + RECT 161.0 321.3 167.6 321.9 ; + RECT 161.0 310.9 167.6 311.5 ; + RECT 154.6 314.0 155.4 314.8 ; + RECT 156.6 316.8 157.4 317.6 ; + RECT 164.6 315.9 165.2 316.5 ; + RECT 152.4 321.3 167.6 321.9 ; + RECT 152.4 310.9 167.6 311.5 ; + RECT 155.6 323.7 156.4 322.9 ; + RECT 153.6 323.7 154.4 322.9 ; + RECT 157.6 323.7 158.4 322.9 ; + RECT 155.6 323.7 156.4 322.9 ; + RECT 153.6 330.7 154.4 329.9 ; + RECT 157.6 330.7 158.4 329.9 ; + RECT 154.6 329.2 155.4 328.4 ; + RECT 156.6 326.4 157.4 325.6 ; + RECT 159.1 325.0 159.7 324.4 ; + RECT 152.4 321.9 161.0 321.3 ; + RECT 152.4 332.3 161.0 331.7 ; + RECT 164.2 323.7 165.0 322.9 ; + RECT 162.2 323.7 163.0 322.9 ; + RECT 164.2 331.1 165.0 330.3 ; + RECT 162.2 331.1 163.0 330.3 ; + RECT 162.6 327.4 163.4 326.6 ; + RECT 164.6 327.3 165.2 326.7 ; + RECT 161.0 321.9 167.6 321.3 ; + RECT 161.0 332.3 167.6 331.7 ; + RECT 154.6 329.2 155.4 328.4 ; + RECT 156.6 326.4 157.4 325.6 ; + RECT 164.6 327.3 165.2 326.7 ; + RECT 152.4 321.9 167.6 321.3 ; + RECT 152.4 332.3 167.6 331.7 ; + RECT 155.6 340.3 156.4 341.1 ; + RECT 153.6 340.3 154.4 341.1 ; + RECT 157.6 340.3 158.4 341.1 ; + RECT 155.6 340.3 156.4 341.1 ; + RECT 153.6 333.3 154.4 334.1 ; + RECT 157.6 333.3 158.4 334.1 ; + RECT 154.6 334.8 155.4 335.6 ; + RECT 156.6 337.6 157.4 338.4 ; + RECT 159.1 339.0 159.7 339.6 ; + RECT 152.4 342.1 161.0 342.7 ; + RECT 152.4 331.7 161.0 332.3 ; + RECT 164.2 340.3 165.0 341.1 ; + RECT 162.2 340.3 163.0 341.1 ; + RECT 164.2 332.9 165.0 333.7 ; + RECT 162.2 332.9 163.0 333.7 ; + RECT 162.6 336.6 163.4 337.4 ; + RECT 164.6 336.7 165.2 337.3 ; + RECT 161.0 342.1 167.6 342.7 ; + RECT 161.0 331.7 167.6 332.3 ; + RECT 154.6 334.8 155.4 335.6 ; + RECT 156.6 337.6 157.4 338.4 ; + RECT 164.6 336.7 165.2 337.3 ; + RECT 152.4 342.1 167.6 342.7 ; + RECT 152.4 331.7 167.6 332.3 ; + RECT 155.6 344.5 156.4 343.7 ; + RECT 153.6 344.5 154.4 343.7 ; + RECT 157.6 344.5 158.4 343.7 ; + RECT 155.6 344.5 156.4 343.7 ; + RECT 153.6 351.5 154.4 350.7 ; + RECT 157.6 351.5 158.4 350.7 ; + RECT 154.6 350.0 155.4 349.2 ; + RECT 156.6 347.2 157.4 346.4 ; + RECT 159.1 345.8 159.7 345.2 ; + RECT 152.4 342.7 161.0 342.1 ; + RECT 152.4 353.1 161.0 352.5 ; + RECT 164.2 344.5 165.0 343.7 ; + RECT 162.2 344.5 163.0 343.7 ; + RECT 164.2 351.9 165.0 351.1 ; + RECT 162.2 351.9 163.0 351.1 ; + RECT 162.6 348.2 163.4 347.4 ; + RECT 164.6 348.1 165.2 347.5 ; + RECT 161.0 342.7 167.6 342.1 ; + RECT 161.0 353.1 167.6 352.5 ; + RECT 154.6 350.0 155.4 349.2 ; + RECT 156.6 347.2 157.4 346.4 ; + RECT 164.6 348.1 165.2 347.5 ; + RECT 152.4 342.7 167.6 342.1 ; + RECT 152.4 353.1 167.6 352.5 ; + RECT 154.6 189.2 155.4 190.0 ; + RECT 154.6 203.6 155.4 204.4 ; + RECT 154.6 210.0 155.4 210.8 ; + RECT 154.6 224.4 155.4 225.2 ; + RECT 154.6 230.8 155.4 231.6 ; + RECT 154.6 245.2 155.4 246.0 ; + RECT 154.6 251.6 155.4 252.4 ; + RECT 154.6 266.0 155.4 266.8 ; + RECT 154.6 272.4 155.4 273.2 ; + RECT 154.6 286.8 155.4 287.6 ; + RECT 154.6 293.2 155.4 294.0 ; + RECT 154.6 307.6 155.4 308.4 ; + RECT 154.6 314.0 155.4 314.8 ; + RECT 154.6 328.4 155.4 329.2 ; + RECT 154.6 334.8 155.4 335.6 ; + RECT 154.6 349.2 155.4 350.0 ; + RECT 164.6 191.1 165.2 191.7 ; + RECT 164.6 201.9 165.2 202.5 ; + RECT 164.6 211.9 165.2 212.5 ; + RECT 164.6 222.7 165.2 223.3 ; + RECT 164.6 232.7 165.2 233.3 ; + RECT 164.6 243.5 165.2 244.1 ; + RECT 164.6 253.5 165.2 254.1 ; + RECT 164.6 264.3 165.2 264.9 ; + RECT 164.6 274.3 165.2 274.9 ; + RECT 164.6 285.1 165.2 285.7 ; + RECT 164.6 295.1 165.2 295.7 ; + RECT 164.6 305.9 165.2 306.5 ; + RECT 164.6 315.9 165.2 316.5 ; + RECT 164.6 326.7 165.2 327.3 ; + RECT 164.6 336.7 165.2 337.3 ; + RECT 164.6 347.5 165.2 348.1 ; + RECT 158.8 178.1 159.6 177.3 ; + RECT 156.8 178.1 157.6 177.3 ; + RECT 158.8 185.5 159.6 184.7 ; + RECT 156.8 185.5 157.6 184.7 ; + RECT 157.2 181.8 158.0 181.0 ; + RECT 159.2 181.7 159.8 181.1 ; + RECT 155.6 176.3 162.2 175.7 ; + RECT 155.6 186.7 162.2 186.1 ; + RECT 165.4 178.1 166.2 177.3 ; + RECT 163.4 178.1 164.2 177.3 ; + RECT 165.4 185.5 166.2 184.7 ; + RECT 163.4 185.5 164.2 184.7 ; + RECT 163.8 181.8 164.6 181.0 ; + RECT 165.8 181.7 166.4 181.1 ; + RECT 162.2 176.3 167.4 175.7 ; + RECT 162.2 186.7 167.4 186.1 ; + RECT 157.2 181.8 158.0 181.0 ; + RECT 165.8 181.7 166.4 181.1 ; + RECT 155.6 176.3 167.4 175.7 ; + RECT 155.6 186.7 167.4 186.1 ; + RECT 164.6 191.1 165.2 191.7 ; + RECT 164.6 201.9 165.2 202.5 ; + RECT 164.6 211.9 165.2 212.5 ; + RECT 164.6 222.7 165.2 223.3 ; + RECT 164.6 232.7 165.2 233.3 ; + RECT 164.6 243.5 165.2 244.1 ; + RECT 164.6 253.5 165.2 254.1 ; + RECT 164.6 264.3 165.2 264.9 ; + RECT 164.6 274.3 165.2 274.9 ; + RECT 164.6 285.1 165.2 285.7 ; + RECT 164.6 295.1 165.2 295.7 ; + RECT 164.6 305.9 165.2 306.5 ; + RECT 164.6 315.9 165.2 316.5 ; + RECT 164.6 326.7 165.2 327.3 ; + RECT 164.6 336.7 165.2 337.3 ; + RECT 164.6 347.5 165.2 348.1 ; + RECT 165.8 181.1 166.4 181.7 ; + RECT 3.6 13.0 13.4 13.2 ; + RECT 17.8 12.4 22.0 13.0 ; + RECT 21.2 4.0 22.0 8.4 ; + RECT 10.2 16.4 13.8 17.0 ; + RECT 21.2 9.0 22.0 12.4 ; + RECT 10.2 7.2 11.0 7.4 ; + RECT 12.8 14.8 15.0 15.4 ; + RECT 3.6 4.0 4.4 8.8 ; + RECT 14.2 9.4 15.0 9.6 ; + RECT 10.2 16.2 11.0 16.4 ; + RECT 14.2 14.6 15.0 14.8 ; + RECT 6.8 14.8 7.6 15.0 ; + RECT 14.8 13.4 17.2 14.0 ; + RECT 7.4 10.2 8.2 10.4 ; + RECT 21.2 13.0 22.0 21.6 ; + RECT 18.2 8.2 19.0 8.4 ; + RECT 16.4 11.0 20.2 11.6 ; + RECT 8.6 7.4 9.2 9.6 ; + RECT 10.6 3.4 11.6 6.0 ; + RECT 19.6 3.4 20.4 7.8 ; + RECT 11.4 14.8 12.2 15.0 ; + RECT 19.4 11.6 20.2 11.8 ; + RECT 12.4 17.6 13.2 21.6 ; + RECT 6.8 16.8 7.6 17.6 ; + RECT 16.4 16.8 17.2 17.6 ; + RECT 8.6 13.2 13.4 13.6 ; + RECT 3.6 12.8 9.4 13.0 ; + RECT 5.8 11.4 10.8 12.0 ; + RECT 13.0 16.2 13.8 16.4 ; + RECT 6.8 17.6 8.8 18.2 ; + RECT 5.2 3.4 6.0 8.0 ; + RECT 10.2 6.6 13.0 7.2 ; + RECT 22.8 3.4 23.6 4.8 ; + RECT 3.6 13.2 4.4 21.6 ; + RECT 5.2 13.8 6.0 22.2 ; + RECT 16.6 14.0 17.2 15.0 ; + RECT 16.4 5.4 17.8 6.0 ; + RECT 10.8 17.6 11.6 22.2 ; + RECT 14.0 17.6 14.8 22.2 ; + RECT 16.6 15.0 18.0 15.8 ; + RECT 14.8 10.2 15.4 13.4 ; + RECT 4.4 9.4 6.0 9.6 ; + RECT 6.8 5.4 8.8 6.0 ; + RECT 8.0 4.0 8.8 5.4 ; + RECT 16.6 17.6 17.8 21.6 ; + RECT 8.4 6.6 9.2 7.4 ; + RECT 12.8 13.6 13.4 14.8 ; + RECT 10.0 12.0 10.8 12.2 ; + RECT 16.4 10.8 17.2 11.0 ; + RECT 12.4 17.0 13.0 17.6 ; + RECT 6.8 14.2 12.2 14.8 ; + RECT 12.4 4.0 13.2 6.0 ; + RECT 2.4 22.2 24.2 23.4 ; + RECT 8.0 18.2 8.8 21.6 ; + RECT 19.6 13.6 20.4 22.2 ; + RECT 3.6 12.6 9.2 12.8 ; + RECT 5.8 11.2 6.6 11.4 ; + RECT 14.0 3.4 14.8 6.0 ; + RECT 16.6 4.0 17.8 5.4 ; + RECT 2.4 2.2 24.2 3.4 ; + RECT 22.8 20.6 23.6 22.2 ; + RECT 4.4 9.6 15.4 10.2 ; + RECT 18.2 8.4 22.0 9.0 ; + RECT 6.8 6.0 7.6 6.8 ; + RECT 12.4 6.0 13.0 6.6 ; + RECT 16.4 6.0 17.2 6.8 ; + RECT 17.8 12.2 18.6 12.4 ; + RECT 29.8 19.9 30.6 20.7 ; + RECT 27.8 19.9 28.6 20.7 ; + RECT 29.8 4.1 30.6 4.9 ; + RECT 27.8 4.1 28.6 4.9 ; + RECT 28.2 12.0 29.0 12.8 ; + RECT 30.2 12.1 30.8 12.7 ; + RECT 26.6 22.5 33.2 23.1 ; + RECT 26.6 2.5 33.2 3.1 ; + RECT 36.4 18.3 37.2 19.1 ; + RECT 34.4 18.3 35.2 19.1 ; + RECT 36.4 4.9 37.2 5.7 ; + RECT 34.4 4.9 35.2 5.7 ; + RECT 34.8 11.6 35.6 12.4 ; + RECT 36.8 11.7 37.4 12.3 ; + RECT 33.2 22.5 39.8 23.1 ; + RECT 33.2 2.5 39.8 3.1 ; + RECT 2.4 22.2 39.8 23.4 ; + RECT 2.4 2.2 39.8 3.4 ; + RECT 3.6 32.6 13.4 32.4 ; + RECT 17.8 33.2 22.0 32.6 ; + RECT 21.2 41.6 22.0 37.2 ; + RECT 10.2 29.2 13.8 28.6 ; + RECT 21.2 36.6 22.0 33.2 ; + RECT 10.2 38.4 11.0 38.2 ; + RECT 12.8 30.8 15.0 30.2 ; + RECT 3.6 41.6 4.4 36.8 ; + RECT 14.2 36.2 15.0 36.0 ; + RECT 10.2 29.4 11.0 29.2 ; + RECT 14.2 31.0 15.0 30.8 ; + RECT 6.8 30.8 7.6 30.6 ; + RECT 14.8 32.2 17.2 31.6 ; + RECT 7.4 35.4 8.2 35.2 ; + RECT 21.2 32.6 22.0 24.0 ; + RECT 18.2 37.4 19.0 37.2 ; + RECT 16.4 34.6 20.2 34.0 ; + RECT 8.6 38.2 9.2 36.0 ; + RECT 10.6 42.2 11.6 39.6 ; + RECT 19.6 42.2 20.4 37.8 ; + RECT 11.4 30.8 12.2 30.6 ; + RECT 19.4 34.0 20.2 33.8 ; + RECT 12.4 28.0 13.2 24.0 ; + RECT 6.8 28.8 7.6 28.0 ; + RECT 16.4 28.8 17.2 28.0 ; + RECT 8.6 32.4 13.4 32.0 ; + RECT 3.6 32.8 9.4 32.6 ; + RECT 5.8 34.2 10.8 33.6 ; + RECT 13.0 29.4 13.8 29.2 ; + RECT 6.8 28.0 8.8 27.4 ; + RECT 5.2 42.2 6.0 37.6 ; + RECT 10.2 39.0 13.0 38.4 ; + RECT 22.8 42.2 23.6 40.8 ; + RECT 3.6 32.4 4.4 24.0 ; + RECT 5.2 31.8 6.0 23.4 ; + RECT 16.6 31.6 17.2 30.6 ; + RECT 16.4 40.2 17.8 39.6 ; + RECT 10.8 28.0 11.6 23.4 ; + RECT 14.0 28.0 14.8 23.4 ; + RECT 16.6 30.6 18.0 29.8 ; + RECT 14.8 35.4 15.4 32.2 ; + RECT 4.4 36.2 6.0 36.0 ; + RECT 6.8 40.2 8.8 39.6 ; + RECT 8.0 41.6 8.8 40.2 ; + RECT 16.6 28.0 17.8 24.0 ; + RECT 8.4 39.0 9.2 38.2 ; + RECT 12.8 32.0 13.4 30.8 ; + RECT 10.0 33.6 10.8 33.4 ; + RECT 16.4 34.8 17.2 34.6 ; + RECT 12.4 28.6 13.0 28.0 ; + RECT 6.8 31.4 12.2 30.8 ; + RECT 12.4 41.6 13.2 39.6 ; + RECT 2.4 23.4 24.2 22.2 ; + RECT 8.0 27.4 8.8 24.0 ; + RECT 19.6 32.0 20.4 23.4 ; + RECT 3.6 33.0 9.2 32.8 ; + RECT 5.8 34.4 6.6 34.2 ; + RECT 14.0 42.2 14.8 39.6 ; + RECT 16.6 41.6 17.8 40.2 ; + RECT 2.4 43.4 24.2 42.2 ; + RECT 22.8 25.0 23.6 23.4 ; + RECT 4.4 36.0 15.4 35.4 ; + RECT 18.2 37.2 22.0 36.6 ; + RECT 6.8 39.6 7.6 38.8 ; + RECT 12.4 39.6 13.0 39.0 ; + RECT 16.4 39.6 17.2 38.8 ; + RECT 17.8 33.4 18.6 33.2 ; + RECT 29.8 25.7 30.6 24.9 ; + RECT 27.8 25.7 28.6 24.9 ; + RECT 29.8 41.5 30.6 40.7 ; + RECT 27.8 41.5 28.6 40.7 ; + RECT 28.2 33.6 29.0 32.8 ; + RECT 30.2 33.5 30.8 32.9 ; + RECT 26.6 23.1 33.2 22.5 ; + RECT 26.6 43.1 33.2 42.5 ; + RECT 36.4 27.3 37.2 26.5 ; + RECT 34.4 27.3 35.2 26.5 ; + RECT 36.4 40.7 37.2 39.9 ; + RECT 34.4 40.7 35.2 39.9 ; + RECT 34.8 34.0 35.6 33.2 ; + RECT 36.8 33.9 37.4 33.3 ; + RECT 33.2 23.1 39.8 22.5 ; + RECT 33.2 43.1 39.8 42.5 ; + RECT 2.4 23.4 39.8 22.2 ; + RECT 2.4 43.4 39.8 42.2 ; + RECT 55.6 20.7 56.4 21.5 ; + RECT 53.6 20.7 54.4 21.5 ; + RECT 55.6 3.7 56.4 4.5 ; + RECT 53.6 3.7 54.4 4.5 ; + RECT 54.0 12.2 54.8 13.0 ; + RECT 56.0 12.3 56.6 12.9 ; + RECT 52.4 22.5 59.0 23.1 ; + RECT 52.4 2.5 59.0 3.1 ; + RECT 62.2 19.9 63.0 20.7 ; + RECT 60.2 19.9 61.0 20.7 ; + RECT 62.2 4.1 63.0 4.9 ; + RECT 60.2 4.1 61.0 4.9 ; + RECT 60.6 12.0 61.4 12.8 ; + RECT 62.6 12.1 63.2 12.7 ; + RECT 59.0 22.5 64.2 23.1 ; + RECT 59.0 2.5 64.2 3.1 ; + RECT 67.4 17.5 68.2 18.3 ; + RECT 65.4 17.5 66.2 18.3 ; + RECT 67.4 5.3 68.2 6.1 ; + RECT 65.4 5.3 66.2 6.1 ; + RECT 65.8 11.4 66.6 12.2 ; + RECT 67.8 11.5 68.4 12.1 ; + RECT 64.2 22.5 69.4 23.1 ; + RECT 64.2 2.5 69.4 3.1 ; + RECT 72.5 16.3 76.5 16.9 ; + RECT 74.0 17.5 74.8 18.3 ; + RECT 70.6 17.5 71.4 18.3 ; + RECT 72.5 6.7 76.5 7.3 ; + RECT 70.6 5.3 71.4 6.1 ; + RECT 74.0 5.3 74.8 6.1 ; + RECT 71.0 11.4 71.8 12.2 ; + RECT 74.5 11.5 75.1 12.1 ; + RECT 69.4 22.5 78.0 23.1 ; + RECT 69.4 2.5 78.0 3.1 ; + RECT 54.0 12.2 54.8 13.0 ; + RECT 74.5 11.5 75.1 12.1 ; + RECT 52.4 22.5 78.0 23.1 ; + RECT 52.4 2.5 78.0 3.1 ; + RECT 55.6 24.9 56.4 24.1 ; + RECT 53.6 24.9 54.4 24.1 ; + RECT 55.6 41.9 56.4 41.1 ; + RECT 53.6 41.9 54.4 41.1 ; + RECT 54.0 33.4 54.8 32.6 ; + RECT 56.0 33.3 56.6 32.7 ; + RECT 52.4 23.1 59.0 22.5 ; + RECT 52.4 43.1 59.0 42.5 ; + RECT 62.2 24.9 63.0 24.1 ; + RECT 60.2 24.9 61.0 24.1 ; + RECT 64.2 24.9 65.0 24.1 ; + RECT 62.2 24.9 63.0 24.1 ; + RECT 60.2 41.5 61.0 40.7 ; + RECT 64.2 41.5 65.0 40.7 ; + RECT 61.2 40.0 62.0 39.2 ; + RECT 63.2 37.2 64.0 36.4 ; + RECT 65.7 26.2 66.3 25.6 ; + RECT 59.0 23.1 66.6 22.5 ; + RECT 59.0 43.1 66.6 42.5 ; + RECT 69.7 28.5 73.7 27.9 ; + RECT 67.8 27.3 68.6 26.5 ; + RECT 71.2 27.3 72.0 26.5 ; + RECT 69.7 39.3 73.7 38.7 ; + RECT 67.8 40.7 68.6 39.9 ; + RECT 71.2 40.7 72.0 39.9 ; + RECT 68.2 34.0 69.0 33.2 ; + RECT 71.7 33.9 72.3 33.3 ; + RECT 66.6 23.1 76.4 22.5 ; + RECT 66.6 43.1 76.4 42.5 ; + RECT 68.2 34.0 69.0 33.2 ; + RECT 71.7 33.9 72.3 33.3 ; + RECT 66.6 23.1 76.4 22.5 ; + RECT 66.6 43.1 76.4 42.5 ; + RECT 61.2 40.0 62.0 39.2 ; + RECT 63.2 37.2 64.0 36.4 ; + RECT 71.7 33.9 72.3 33.3 ; + RECT 59.0 23.1 76.4 22.5 ; + RECT 59.0 43.1 76.4 42.5 ; + RECT 55.6 60.7 56.4 61.5 ; + RECT 53.6 60.7 54.4 61.5 ; + RECT 57.6 60.7 58.4 61.5 ; + RECT 55.6 60.7 56.4 61.5 ; + RECT 53.6 44.1 54.4 44.9 ; + RECT 57.6 44.1 58.4 44.9 ; + RECT 54.6 45.6 55.4 46.4 ; + RECT 56.6 48.4 57.4 49.2 ; + RECT 59.1 59.4 59.7 60.0 ; + RECT 52.4 62.5 60.0 63.1 ; + RECT 52.4 42.5 60.0 43.1 ; + RECT 63.1 57.1 67.1 57.7 ; + RECT 61.2 58.3 62.0 59.1 ; + RECT 64.6 58.3 65.4 59.1 ; + RECT 63.1 46.3 67.1 46.9 ; + RECT 61.2 44.9 62.0 45.7 ; + RECT 64.6 44.9 65.4 45.7 ; + RECT 61.6 51.6 62.4 52.4 ; + RECT 65.1 51.7 65.7 52.3 ; + RECT 60.0 62.5 69.8 63.1 ; + RECT 60.0 42.5 69.8 43.1 ; + RECT 61.6 51.6 62.4 52.4 ; + RECT 65.1 51.7 65.7 52.3 ; + RECT 60.0 62.5 69.8 63.1 ; + RECT 60.0 42.5 69.8 43.1 ; + RECT 54.6 45.6 55.4 46.4 ; + RECT 56.6 48.4 57.4 49.2 ; + RECT 65.1 51.7 65.7 52.3 ; + RECT 52.4 62.5 69.8 63.1 ; + RECT 52.4 42.5 69.8 43.1 ; + RECT 55.6 64.9 56.4 64.1 ; + RECT 53.6 64.9 54.4 64.1 ; + RECT 55.6 81.9 56.4 81.1 ; + RECT 53.6 81.9 54.4 81.1 ; + RECT 54.0 73.4 54.8 72.6 ; + RECT 56.0 73.3 56.6 72.7 ; + RECT 52.4 63.1 59.0 62.5 ; + RECT 52.4 83.1 59.0 82.5 ; + RECT 62.2 64.9 63.0 64.1 ; + RECT 60.2 64.9 61.0 64.1 ; + RECT 62.2 81.9 63.0 81.1 ; + RECT 60.2 81.9 61.0 81.1 ; + RECT 60.6 73.4 61.4 72.6 ; + RECT 62.6 73.3 63.2 72.7 ; + RECT 59.0 63.1 64.2 62.5 ; + RECT 59.0 83.1 64.2 82.5 ; + RECT 67.4 65.7 68.2 64.9 ; + RECT 65.4 65.7 66.2 64.9 ; + RECT 67.4 81.5 68.2 80.7 ; + RECT 65.4 81.5 66.2 80.7 ; + RECT 65.8 73.6 66.6 72.8 ; + RECT 67.8 73.5 68.4 72.9 ; + RECT 64.2 63.1 69.4 62.5 ; + RECT 64.2 83.1 69.4 82.5 ; + RECT 72.6 68.1 73.4 67.3 ; + RECT 70.6 68.1 71.4 67.3 ; + RECT 72.6 80.3 73.4 79.5 ; + RECT 70.6 80.3 71.4 79.5 ; + RECT 71.0 74.2 71.8 73.4 ; + RECT 73.0 74.1 73.6 73.5 ; + RECT 69.4 63.1 74.6 62.5 ; + RECT 69.4 83.1 74.6 82.5 ; + RECT 54.0 73.4 54.8 72.6 ; + RECT 73.0 74.1 73.6 73.5 ; + RECT 52.4 63.1 74.6 62.5 ; + RECT 52.4 83.1 74.6 82.5 ; + RECT 55.6 140.7 56.4 141.5 ; + RECT 53.6 140.7 54.4 141.5 ; + RECT 55.6 123.7 56.4 124.5 ; + RECT 53.6 123.7 54.4 124.5 ; + RECT 54.0 132.2 54.8 133.0 ; + RECT 56.0 132.3 56.6 132.9 ; + RECT 52.4 142.5 59.0 143.1 ; + RECT 52.4 122.5 59.0 123.1 ; + RECT 55.6 100.7 56.4 101.5 ; + RECT 53.6 100.7 54.4 101.5 ; + RECT 57.6 100.7 58.4 101.5 ; + RECT 55.6 100.7 56.4 101.5 ; + RECT 59.6 100.7 60.4 101.5 ; + RECT 57.6 100.7 58.4 101.5 ; + RECT 53.6 84.1 54.4 84.9 ; + RECT 59.6 84.1 60.4 84.9 ; + RECT 54.2 85.6 55.0 86.4 ; + RECT 56.6 87.0 57.4 87.8 ; + RECT 59.0 88.4 59.8 89.2 ; + RECT 61.1 99.5 61.7 100.1 ; + RECT 52.4 102.5 62.0 103.1 ; + RECT 52.4 82.5 62.0 83.1 ; + RECT 65.0 97.5 65.8 98.3 ; + RECT 66.8 97.5 67.6 98.3 ; + RECT 63.2 97.5 64.0 98.3 ; + RECT 65.0 85.3 65.8 86.1 ; + RECT 63.2 85.3 64.0 86.1 ; + RECT 66.8 85.3 67.6 86.1 ; + RECT 63.6 91.4 64.4 92.2 ; + RECT 65.4 91.5 66.0 92.1 ; + RECT 62.0 102.5 70.2 103.1 ; + RECT 62.0 82.5 70.2 83.1 ; + RECT 63.6 91.4 64.4 92.2 ; + RECT 65.4 91.5 66.0 92.1 ; + RECT 62.0 102.5 70.2 103.1 ; + RECT 62.0 82.5 70.2 83.1 ; + RECT 54.2 85.6 55.0 86.4 ; + RECT 56.6 87.0 57.4 87.8 ; + RECT 59.0 88.4 59.8 89.2 ; + RECT 65.4 91.5 66.0 92.1 ; + RECT 52.4 102.5 70.2 103.1 ; + RECT 52.4 82.5 70.2 83.1 ; + RECT 55.6 144.9 56.4 144.1 ; + RECT 53.6 144.9 54.4 144.1 ; + RECT 57.6 144.9 58.4 144.1 ; + RECT 55.6 144.9 56.4 144.1 ; + RECT 59.6 144.9 60.4 144.1 ; + RECT 57.6 144.9 58.4 144.1 ; + RECT 53.6 161.5 54.4 160.7 ; + RECT 59.6 161.5 60.4 160.7 ; + RECT 54.2 160.0 55.0 159.2 ; + RECT 56.6 158.6 57.4 157.8 ; + RECT 59.0 157.2 59.8 156.4 ; + RECT 61.1 146.1 61.7 145.5 ; + RECT 52.4 143.1 62.0 142.5 ; + RECT 52.4 163.1 62.0 162.5 ; + RECT 65.2 145.7 66.0 144.9 ; + RECT 63.2 145.7 64.0 144.9 ; + RECT 65.2 161.5 66.0 160.7 ; + RECT 63.2 161.5 64.0 160.7 ; + RECT 63.6 153.6 64.4 152.8 ; + RECT 65.6 153.5 66.2 152.9 ; + RECT 62.0 143.1 68.6 142.5 ; + RECT 62.0 163.1 68.6 162.5 ; + RECT 63.6 153.6 64.4 152.8 ; + RECT 65.6 153.5 66.2 152.9 ; + RECT 62.0 143.1 68.6 142.5 ; + RECT 62.0 163.1 68.6 162.5 ; + RECT 54.2 160.0 55.0 159.2 ; + RECT 56.6 158.6 57.4 157.8 ; + RECT 59.0 157.2 59.8 156.4 ; + RECT 65.6 153.5 66.2 152.9 ; + RECT 52.4 143.1 68.6 142.5 ; + RECT 52.4 163.1 68.6 162.5 ; + RECT 32.2 183.1 31.4 183.9 ; + RECT 34.2 183.1 33.4 183.9 ; + RECT 32.2 166.5 31.4 167.3 ; + RECT 34.2 166.5 33.4 167.3 ; + RECT 33.8 174.8 33.0 175.6 ; + RECT 31.8 174.9 31.2 175.5 ; + RECT 35.4 184.9 28.8 185.5 ; + RECT 35.4 165.3 28.8 165.9 ; + RECT 25.6 183.1 24.8 183.9 ; + RECT 27.6 183.1 26.8 183.9 ; + RECT 25.6 166.5 24.8 167.3 ; + RECT 27.6 166.5 26.8 167.3 ; + RECT 27.2 174.8 26.4 175.6 ; + RECT 25.2 174.9 24.6 175.5 ; + RECT 28.8 184.9 22.2 185.5 ; + RECT 28.8 165.3 22.2 165.9 ; + RECT 19.0 183.1 18.2 183.9 ; + RECT 21.0 183.1 20.2 183.9 ; + RECT 19.0 166.5 18.2 167.3 ; + RECT 21.0 166.5 20.2 167.3 ; + RECT 20.6 174.8 19.8 175.6 ; + RECT 18.6 174.9 18.0 175.5 ; + RECT 22.2 184.9 15.6 185.5 ; + RECT 22.2 165.3 15.6 165.9 ; + RECT 12.4 183.1 11.6 183.9 ; + RECT 14.4 183.1 13.6 183.9 ; + RECT 12.4 166.5 11.6 167.3 ; + RECT 14.4 166.5 13.6 167.3 ; + RECT 14.0 174.8 13.2 175.6 ; + RECT 12.0 174.9 11.4 175.5 ; + RECT 15.6 184.9 9.0 185.5 ; + RECT 15.6 165.3 9.0 165.9 ; + RECT 5.8 183.1 5.0 183.9 ; + RECT 7.8 183.1 7.0 183.9 ; + RECT 5.8 166.5 5.0 167.3 ; + RECT 7.8 166.5 7.0 167.3 ; + RECT 7.4 174.8 6.6 175.6 ; + RECT 5.4 174.9 4.8 175.5 ; + RECT 9.0 184.9 2.4 185.5 ; + RECT 9.0 165.3 2.4 165.9 ; + RECT 32.2 187.3 31.4 186.5 ; + RECT 34.2 187.3 33.4 186.5 ; + RECT 32.2 203.9 31.4 203.1 ; + RECT 34.2 203.9 33.4 203.1 ; + RECT 33.8 195.6 33.0 194.8 ; + RECT 31.8 195.5 31.2 194.9 ; + RECT 35.4 185.5 28.8 184.9 ; + RECT 35.4 205.1 28.8 204.5 ; + RECT 25.6 187.3 24.8 186.5 ; + RECT 27.6 187.3 26.8 186.5 ; + RECT 25.6 203.9 24.8 203.1 ; + RECT 27.6 203.9 26.8 203.1 ; + RECT 27.2 195.6 26.4 194.8 ; + RECT 25.2 195.5 24.6 194.9 ; + RECT 28.8 185.5 22.2 184.9 ; + RECT 28.8 205.1 22.2 204.5 ; + RECT 19.0 187.3 18.2 186.5 ; + RECT 21.0 187.3 20.2 186.5 ; + RECT 19.0 203.9 18.2 203.1 ; + RECT 21.0 203.9 20.2 203.1 ; + RECT 20.6 195.6 19.8 194.8 ; + RECT 18.6 195.5 18.0 194.9 ; + RECT 22.2 185.5 15.6 184.9 ; + RECT 22.2 205.1 15.6 204.5 ; + RECT 12.4 187.3 11.6 186.5 ; + RECT 14.4 187.3 13.6 186.5 ; + RECT 12.4 203.9 11.6 203.1 ; + RECT 14.4 203.9 13.6 203.1 ; + RECT 14.0 195.6 13.2 194.8 ; + RECT 12.0 195.5 11.4 194.9 ; + RECT 15.6 185.5 9.0 184.9 ; + RECT 15.6 205.1 9.0 204.5 ; + RECT 5.8 187.3 5.0 186.5 ; + RECT 7.8 187.3 7.0 186.5 ; + RECT 5.8 203.9 5.0 203.1 ; + RECT 7.8 203.9 7.0 203.1 ; + RECT 7.4 195.6 6.6 194.8 ; + RECT 5.4 195.5 4.8 194.9 ; + RECT 9.0 185.5 2.4 184.9 ; + RECT 9.0 205.1 2.4 204.5 ; + RECT 32.2 222.3 31.4 223.1 ; + RECT 34.2 222.3 33.4 223.1 ; + RECT 32.2 205.7 31.4 206.5 ; + RECT 34.2 205.7 33.4 206.5 ; + RECT 33.8 214.0 33.0 214.8 ; + RECT 31.8 214.1 31.2 214.7 ; + RECT 35.4 224.1 28.8 224.7 ; + RECT 35.4 204.5 28.8 205.1 ; + RECT 25.6 222.3 24.8 223.1 ; + RECT 27.6 222.3 26.8 223.1 ; + RECT 25.6 205.7 24.8 206.5 ; + RECT 27.6 205.7 26.8 206.5 ; + RECT 27.2 214.0 26.4 214.8 ; + RECT 25.2 214.1 24.6 214.7 ; + RECT 28.8 224.1 22.2 224.7 ; + RECT 28.8 204.5 22.2 205.1 ; + RECT 19.0 222.3 18.2 223.1 ; + RECT 21.0 222.3 20.2 223.1 ; + RECT 19.0 205.7 18.2 206.5 ; + RECT 21.0 205.7 20.2 206.5 ; + RECT 20.6 214.0 19.8 214.8 ; + RECT 18.6 214.1 18.0 214.7 ; + RECT 22.2 224.1 15.6 224.7 ; + RECT 22.2 204.5 15.6 205.1 ; + RECT 12.4 222.3 11.6 223.1 ; + RECT 14.4 222.3 13.6 223.1 ; + RECT 12.4 205.7 11.6 206.5 ; + RECT 14.4 205.7 13.6 206.5 ; + RECT 14.0 214.0 13.2 214.8 ; + RECT 12.0 214.1 11.4 214.7 ; + RECT 15.6 224.1 9.0 224.7 ; + RECT 15.6 204.5 9.0 205.1 ; + RECT 5.8 222.3 5.0 223.1 ; + RECT 7.8 222.3 7.0 223.1 ; + RECT 5.8 205.7 5.0 206.5 ; + RECT 7.8 205.7 7.0 206.5 ; + RECT 7.4 214.0 6.6 214.8 ; + RECT 5.4 214.1 4.8 214.7 ; + RECT 9.0 224.1 2.4 224.7 ; + RECT 9.0 204.5 2.4 205.1 ; + RECT 32.2 226.5 31.4 225.7 ; + RECT 34.2 226.5 33.4 225.7 ; + RECT 32.2 243.1 31.4 242.3 ; + RECT 34.2 243.1 33.4 242.3 ; + RECT 33.8 234.8 33.0 234.0 ; + RECT 31.8 234.7 31.2 234.1 ; + RECT 35.4 224.7 28.8 224.1 ; + RECT 35.4 244.3 28.8 243.7 ; + RECT 25.6 226.5 24.8 225.7 ; + RECT 27.6 226.5 26.8 225.7 ; + RECT 25.6 243.1 24.8 242.3 ; + RECT 27.6 243.1 26.8 242.3 ; + RECT 27.2 234.8 26.4 234.0 ; + RECT 25.2 234.7 24.6 234.1 ; + RECT 28.8 224.7 22.2 224.1 ; + RECT 28.8 244.3 22.2 243.7 ; + RECT 19.0 226.5 18.2 225.7 ; + RECT 21.0 226.5 20.2 225.7 ; + RECT 19.0 243.1 18.2 242.3 ; + RECT 21.0 243.1 20.2 242.3 ; + RECT 20.6 234.8 19.8 234.0 ; + RECT 18.6 234.7 18.0 234.1 ; + RECT 22.2 224.7 15.6 224.1 ; + RECT 22.2 244.3 15.6 243.7 ; + RECT 12.4 226.5 11.6 225.7 ; + RECT 14.4 226.5 13.6 225.7 ; + RECT 12.4 243.1 11.6 242.3 ; + RECT 14.4 243.1 13.6 242.3 ; + RECT 14.0 234.8 13.2 234.0 ; + RECT 12.0 234.7 11.4 234.1 ; + RECT 15.6 224.7 9.0 224.1 ; + RECT 15.6 244.3 9.0 243.7 ; + RECT 5.8 226.5 5.0 225.7 ; + RECT 7.8 226.5 7.0 225.7 ; + RECT 5.8 243.1 5.0 242.3 ; + RECT 7.8 243.1 7.0 242.3 ; + RECT 7.4 234.8 6.6 234.0 ; + RECT 5.4 234.7 4.8 234.1 ; + RECT 9.0 224.7 2.4 224.1 ; + RECT 9.0 244.3 2.4 243.7 ; + RECT 32.2 261.5 31.4 262.3 ; + RECT 34.2 261.5 33.4 262.3 ; + RECT 32.2 244.9 31.4 245.7 ; + RECT 34.2 244.9 33.4 245.7 ; + RECT 33.8 253.2 33.0 254.0 ; + RECT 31.8 253.3 31.2 253.9 ; + RECT 35.4 263.3 28.8 263.9 ; + RECT 35.4 243.7 28.8 244.3 ; + RECT 25.6 261.5 24.8 262.3 ; + RECT 27.6 261.5 26.8 262.3 ; + RECT 25.6 244.9 24.8 245.7 ; + RECT 27.6 244.9 26.8 245.7 ; + RECT 27.2 253.2 26.4 254.0 ; + RECT 25.2 253.3 24.6 253.9 ; + RECT 28.8 263.3 22.2 263.9 ; + RECT 28.8 243.7 22.2 244.3 ; + RECT 19.0 261.5 18.2 262.3 ; + RECT 21.0 261.5 20.2 262.3 ; + RECT 19.0 244.9 18.2 245.7 ; + RECT 21.0 244.9 20.2 245.7 ; + RECT 20.6 253.2 19.8 254.0 ; + RECT 18.6 253.3 18.0 253.9 ; + RECT 22.2 263.3 15.6 263.9 ; + RECT 22.2 243.7 15.6 244.3 ; + RECT 12.4 261.5 11.6 262.3 ; + RECT 14.4 261.5 13.6 262.3 ; + RECT 12.4 244.9 11.6 245.7 ; + RECT 14.4 244.9 13.6 245.7 ; + RECT 14.0 253.2 13.2 254.0 ; + RECT 12.0 253.3 11.4 253.9 ; + RECT 15.6 263.3 9.0 263.9 ; + RECT 15.6 243.7 9.0 244.3 ; + RECT 5.8 261.5 5.0 262.3 ; + RECT 7.8 261.5 7.0 262.3 ; + RECT 5.8 244.9 5.0 245.7 ; + RECT 7.8 244.9 7.0 245.7 ; + RECT 7.4 253.2 6.6 254.0 ; + RECT 5.4 253.3 4.8 253.9 ; + RECT 9.0 263.3 2.4 263.9 ; + RECT 9.0 243.7 2.4 244.3 ; + RECT 32.2 265.7 31.4 264.9 ; + RECT 34.2 265.7 33.4 264.9 ; + RECT 32.2 282.3 31.4 281.5 ; + RECT 34.2 282.3 33.4 281.5 ; + RECT 33.8 274.0 33.0 273.2 ; + RECT 31.8 273.9 31.2 273.3 ; + RECT 35.4 263.9 28.8 263.3 ; + RECT 35.4 283.5 28.8 282.9 ; + RECT 25.6 265.7 24.8 264.9 ; + RECT 27.6 265.7 26.8 264.9 ; + RECT 25.6 282.3 24.8 281.5 ; + RECT 27.6 282.3 26.8 281.5 ; + RECT 27.2 274.0 26.4 273.2 ; + RECT 25.2 273.9 24.6 273.3 ; + RECT 28.8 263.9 22.2 263.3 ; + RECT 28.8 283.5 22.2 282.9 ; + RECT 19.0 265.7 18.2 264.9 ; + RECT 21.0 265.7 20.2 264.9 ; + RECT 19.0 282.3 18.2 281.5 ; + RECT 21.0 282.3 20.2 281.5 ; + RECT 20.6 274.0 19.8 273.2 ; + RECT 18.6 273.9 18.0 273.3 ; + RECT 22.2 263.9 15.6 263.3 ; + RECT 22.2 283.5 15.6 282.9 ; + RECT 12.4 265.7 11.6 264.9 ; + RECT 14.4 265.7 13.6 264.9 ; + RECT 12.4 282.3 11.6 281.5 ; + RECT 14.4 282.3 13.6 281.5 ; + RECT 14.0 274.0 13.2 273.2 ; + RECT 12.0 273.9 11.4 273.3 ; + RECT 15.6 263.9 9.0 263.3 ; + RECT 15.6 283.5 9.0 282.9 ; + RECT 5.8 265.7 5.0 264.9 ; + RECT 7.8 265.7 7.0 264.9 ; + RECT 5.8 282.3 5.0 281.5 ; + RECT 7.8 282.3 7.0 281.5 ; + RECT 7.4 274.0 6.6 273.2 ; + RECT 5.4 273.9 4.8 273.3 ; + RECT 9.0 263.9 2.4 263.3 ; + RECT 9.0 283.5 2.4 282.9 ; + RECT 32.2 300.7 31.4 301.5 ; + RECT 34.2 300.7 33.4 301.5 ; + RECT 32.2 284.1 31.4 284.9 ; + RECT 34.2 284.1 33.4 284.9 ; + RECT 33.8 292.4 33.0 293.2 ; + RECT 31.8 292.5 31.2 293.1 ; + RECT 35.4 302.5 28.8 303.1 ; + RECT 35.4 282.9 28.8 283.5 ; + RECT 25.6 300.7 24.8 301.5 ; + RECT 27.6 300.7 26.8 301.5 ; + RECT 25.6 284.1 24.8 284.9 ; + RECT 27.6 284.1 26.8 284.9 ; + RECT 27.2 292.4 26.4 293.2 ; + RECT 25.2 292.5 24.6 293.1 ; + RECT 28.8 302.5 22.2 303.1 ; + RECT 28.8 282.9 22.2 283.5 ; + RECT 19.0 300.7 18.2 301.5 ; + RECT 21.0 300.7 20.2 301.5 ; + RECT 19.0 284.1 18.2 284.9 ; + RECT 21.0 284.1 20.2 284.9 ; + RECT 20.6 292.4 19.8 293.2 ; + RECT 18.6 292.5 18.0 293.1 ; + RECT 22.2 302.5 15.6 303.1 ; + RECT 22.2 282.9 15.6 283.5 ; + RECT 12.4 300.7 11.6 301.5 ; + RECT 14.4 300.7 13.6 301.5 ; + RECT 12.4 284.1 11.6 284.9 ; + RECT 14.4 284.1 13.6 284.9 ; + RECT 14.0 292.4 13.2 293.2 ; + RECT 12.0 292.5 11.4 293.1 ; + RECT 15.6 302.5 9.0 303.1 ; + RECT 15.6 282.9 9.0 283.5 ; + RECT 5.8 300.7 5.0 301.5 ; + RECT 7.8 300.7 7.0 301.5 ; + RECT 5.8 284.1 5.0 284.9 ; + RECT 7.8 284.1 7.0 284.9 ; + RECT 7.4 292.4 6.6 293.2 ; + RECT 5.4 292.5 4.8 293.1 ; + RECT 9.0 302.5 2.4 303.1 ; + RECT 9.0 282.9 2.4 283.5 ; + RECT 32.2 304.9 31.4 304.1 ; + RECT 34.2 304.9 33.4 304.1 ; + RECT 32.2 321.5 31.4 320.7 ; + RECT 34.2 321.5 33.4 320.7 ; + RECT 33.8 313.2 33.0 312.4 ; + RECT 31.8 313.1 31.2 312.5 ; + RECT 35.4 303.1 28.8 302.5 ; + RECT 35.4 322.7 28.8 322.1 ; + RECT 25.6 304.9 24.8 304.1 ; + RECT 27.6 304.9 26.8 304.1 ; + RECT 25.6 321.5 24.8 320.7 ; + RECT 27.6 321.5 26.8 320.7 ; + RECT 27.2 313.2 26.4 312.4 ; + RECT 25.2 313.1 24.6 312.5 ; + RECT 28.8 303.1 22.2 302.5 ; + RECT 28.8 322.7 22.2 322.1 ; + RECT 19.0 304.9 18.2 304.1 ; + RECT 21.0 304.9 20.2 304.1 ; + RECT 19.0 321.5 18.2 320.7 ; + RECT 21.0 321.5 20.2 320.7 ; + RECT 20.6 313.2 19.8 312.4 ; + RECT 18.6 313.1 18.0 312.5 ; + RECT 22.2 303.1 15.6 302.5 ; + RECT 22.2 322.7 15.6 322.1 ; + RECT 12.4 304.9 11.6 304.1 ; + RECT 14.4 304.9 13.6 304.1 ; + RECT 12.4 321.5 11.6 320.7 ; + RECT 14.4 321.5 13.6 320.7 ; + RECT 14.0 313.2 13.2 312.4 ; + RECT 12.0 313.1 11.4 312.5 ; + RECT 15.6 303.1 9.0 302.5 ; + RECT 15.6 322.7 9.0 322.1 ; + RECT 5.8 304.9 5.0 304.1 ; + RECT 7.8 304.9 7.0 304.1 ; + RECT 5.8 321.5 5.0 320.7 ; + RECT 7.8 321.5 7.0 320.7 ; + RECT 7.4 313.2 6.6 312.4 ; + RECT 5.4 313.1 4.8 312.5 ; + RECT 9.0 303.1 2.4 302.5 ; + RECT 9.0 322.7 2.4 322.1 ; + RECT 32.2 339.9 31.4 340.7 ; + RECT 34.2 339.9 33.4 340.7 ; + RECT 32.2 323.3 31.4 324.1 ; + RECT 34.2 323.3 33.4 324.1 ; + RECT 33.8 331.6 33.0 332.4 ; + RECT 31.8 331.7 31.2 332.3 ; + RECT 35.4 341.7 28.8 342.3 ; + RECT 35.4 322.1 28.8 322.7 ; + RECT 25.6 339.9 24.8 340.7 ; + RECT 27.6 339.9 26.8 340.7 ; + RECT 25.6 323.3 24.8 324.1 ; + RECT 27.6 323.3 26.8 324.1 ; + RECT 27.2 331.6 26.4 332.4 ; + RECT 25.2 331.7 24.6 332.3 ; + RECT 28.8 341.7 22.2 342.3 ; + RECT 28.8 322.1 22.2 322.7 ; + RECT 19.0 339.9 18.2 340.7 ; + RECT 21.0 339.9 20.2 340.7 ; + RECT 19.0 323.3 18.2 324.1 ; + RECT 21.0 323.3 20.2 324.1 ; + RECT 20.6 331.6 19.8 332.4 ; + RECT 18.6 331.7 18.0 332.3 ; + RECT 22.2 341.7 15.6 342.3 ; + RECT 22.2 322.1 15.6 322.7 ; + RECT 12.4 339.9 11.6 340.7 ; + RECT 14.4 339.9 13.6 340.7 ; + RECT 12.4 323.3 11.6 324.1 ; + RECT 14.4 323.3 13.6 324.1 ; + RECT 14.0 331.6 13.2 332.4 ; + RECT 12.0 331.7 11.4 332.3 ; + RECT 15.6 341.7 9.0 342.3 ; + RECT 15.6 322.1 9.0 322.7 ; + RECT 5.8 339.9 5.0 340.7 ; + RECT 7.8 339.9 7.0 340.7 ; + RECT 5.8 323.3 5.0 324.1 ; + RECT 7.8 323.3 7.0 324.1 ; + RECT 7.4 331.6 6.6 332.4 ; + RECT 5.4 331.7 4.8 332.3 ; + RECT 9.0 341.7 2.4 342.3 ; + RECT 9.0 322.1 2.4 322.7 ; + RECT 55.6 104.9 56.4 104.1 ; + RECT 53.6 104.9 54.4 104.1 ; + RECT 57.6 104.9 58.4 104.1 ; + RECT 55.6 104.9 56.4 104.1 ; + RECT 53.6 121.5 54.4 120.7 ; + RECT 57.6 121.5 58.4 120.7 ; + RECT 54.6 120.0 55.4 119.2 ; + RECT 56.6 117.2 57.4 116.4 ; + RECT 59.1 106.2 59.7 105.6 ; + RECT 52.4 103.1 61.0 102.5 ; + RECT 52.4 123.1 61.0 122.5 ; + RECT 64.2 104.9 65.0 104.1 ; + RECT 62.2 104.9 63.0 104.1 ; + RECT 64.2 121.9 65.0 121.1 ; + RECT 62.2 121.9 63.0 121.1 ; + RECT 62.6 113.4 63.4 112.6 ; + RECT 64.6 113.3 65.2 112.7 ; + RECT 61.0 103.1 67.6 102.5 ; + RECT 61.0 123.1 67.6 122.5 ; + RECT 70.8 104.9 71.6 104.1 ; + RECT 68.8 104.9 69.6 104.1 ; + RECT 70.8 121.9 71.6 121.1 ; + RECT 68.8 121.9 69.6 121.1 ; + RECT 69.2 113.4 70.0 112.6 ; + RECT 71.2 113.3 71.8 112.7 ; + RECT 67.6 103.1 72.8 102.5 ; + RECT 67.6 123.1 72.8 122.5 ; + RECT 62.6 113.4 63.4 112.6 ; + RECT 71.2 113.3 71.8 112.7 ; + RECT 61.0 103.1 72.8 102.5 ; + RECT 61.0 123.1 72.8 122.5 ; + RECT 58.8 355.0 68.6 355.2 ; + RECT 73.0 354.4 77.2 355.0 ; + RECT 76.4 346.0 77.2 350.4 ; + RECT 65.4 358.4 69.0 359.0 ; + RECT 76.4 351.0 77.2 354.4 ; + RECT 65.4 349.2 66.2 349.4 ; + RECT 68.0 356.8 70.2 357.4 ; + RECT 58.8 346.0 59.6 350.8 ; + RECT 69.4 351.4 70.2 351.6 ; + RECT 65.4 358.2 66.2 358.4 ; + RECT 69.4 356.6 70.2 356.8 ; + RECT 62.0 356.8 62.8 357.0 ; + RECT 70.0 355.4 72.4 356.0 ; + RECT 62.6 352.2 63.4 352.4 ; + RECT 76.4 355.0 77.2 363.6 ; + RECT 73.4 350.2 74.2 350.4 ; + RECT 71.6 353.0 75.4 353.6 ; + RECT 63.8 349.4 64.4 351.6 ; + RECT 65.8 345.4 66.8 348.0 ; + RECT 74.8 345.4 75.6 349.8 ; + RECT 66.6 356.8 67.4 357.0 ; + RECT 74.6 353.6 75.4 353.8 ; + RECT 67.6 359.6 68.4 363.6 ; + RECT 62.0 358.8 62.8 359.6 ; + RECT 71.6 358.8 72.4 359.6 ; + RECT 63.8 355.2 68.6 355.6 ; + RECT 58.8 354.8 64.6 355.0 ; + RECT 61.0 353.4 66.0 354.0 ; + RECT 68.2 358.2 69.0 358.4 ; + RECT 62.0 359.6 64.0 360.2 ; + RECT 60.4 345.4 61.2 350.0 ; + RECT 65.4 348.6 68.2 349.2 ; + RECT 78.0 345.4 78.8 346.8 ; + RECT 58.8 355.2 59.6 363.6 ; + RECT 60.4 355.8 61.2 364.2 ; + RECT 71.8 356.0 72.4 357.0 ; + RECT 71.6 347.4 73.0 348.0 ; + RECT 66.0 359.6 66.8 364.2 ; + RECT 69.2 359.6 70.0 364.2 ; + RECT 71.8 357.0 73.2 357.8 ; + RECT 70.0 352.2 70.6 355.4 ; + RECT 59.6 351.4 61.2 351.6 ; + RECT 62.0 347.4 64.0 348.0 ; + RECT 63.2 346.0 64.0 347.4 ; + RECT 71.8 359.6 73.0 363.6 ; + RECT 63.6 348.6 64.4 349.4 ; + RECT 68.0 355.6 68.6 356.8 ; + RECT 65.2 354.0 66.0 354.2 ; + RECT 71.6 352.8 72.4 353.0 ; + RECT 67.6 359.0 68.2 359.6 ; + RECT 62.0 356.2 67.4 356.8 ; + RECT 67.6 346.0 68.4 348.0 ; + RECT 57.6 364.2 79.4 365.4 ; + RECT 63.2 360.2 64.0 363.6 ; + RECT 74.8 355.6 75.6 364.2 ; + RECT 58.8 354.6 64.4 354.8 ; + RECT 61.0 353.2 61.8 353.4 ; + RECT 69.2 345.4 70.0 348.0 ; + RECT 71.8 346.0 73.0 347.4 ; + RECT 57.6 344.2 79.4 345.4 ; + RECT 78.0 362.6 78.8 364.2 ; + RECT 59.6 351.6 70.6 352.2 ; + RECT 73.4 350.4 77.2 351.0 ; + RECT 62.0 348.0 62.8 348.8 ; + RECT 67.6 348.0 68.2 348.6 ; + RECT 71.6 348.0 72.4 348.8 ; + RECT 73.0 354.2 73.8 354.4 ; + RECT 58.8 374.6 68.6 374.4 ; + RECT 73.0 375.2 77.2 374.6 ; + RECT 76.4 383.6 77.2 379.2 ; + RECT 65.4 371.2 69.0 370.6 ; + RECT 76.4 378.6 77.2 375.2 ; + RECT 65.4 380.4 66.2 380.2 ; + RECT 68.0 372.8 70.2 372.2 ; + RECT 58.8 383.6 59.6 378.8 ; + RECT 69.4 378.2 70.2 378.0 ; + RECT 65.4 371.4 66.2 371.2 ; + RECT 69.4 373.0 70.2 372.8 ; + RECT 62.0 372.8 62.8 372.6 ; + RECT 70.0 374.2 72.4 373.6 ; + RECT 62.6 377.4 63.4 377.2 ; + RECT 76.4 374.6 77.2 366.0 ; + RECT 73.4 379.4 74.2 379.2 ; + RECT 71.6 376.6 75.4 376.0 ; + RECT 63.8 380.2 64.4 378.0 ; + RECT 65.8 384.2 66.8 381.6 ; + RECT 74.8 384.2 75.6 379.8 ; + RECT 66.6 372.8 67.4 372.6 ; + RECT 74.6 376.0 75.4 375.8 ; + RECT 67.6 370.0 68.4 366.0 ; + RECT 62.0 370.8 62.8 370.0 ; + RECT 71.6 370.8 72.4 370.0 ; + RECT 63.8 374.4 68.6 374.0 ; + RECT 58.8 374.8 64.6 374.6 ; + RECT 61.0 376.2 66.0 375.6 ; + RECT 68.2 371.4 69.0 371.2 ; + RECT 62.0 370.0 64.0 369.4 ; + RECT 60.4 384.2 61.2 379.6 ; + RECT 65.4 381.0 68.2 380.4 ; + RECT 78.0 384.2 78.8 382.8 ; + RECT 58.8 374.4 59.6 366.0 ; + RECT 60.4 373.8 61.2 365.4 ; + RECT 71.8 373.6 72.4 372.6 ; + RECT 71.6 382.2 73.0 381.6 ; + RECT 66.0 370.0 66.8 365.4 ; + RECT 69.2 370.0 70.0 365.4 ; + RECT 71.8 372.6 73.2 371.8 ; + RECT 70.0 377.4 70.6 374.2 ; + RECT 59.6 378.2 61.2 378.0 ; + RECT 62.0 382.2 64.0 381.6 ; + RECT 63.2 383.6 64.0 382.2 ; + RECT 71.8 370.0 73.0 366.0 ; + RECT 63.6 381.0 64.4 380.2 ; + RECT 68.0 374.0 68.6 372.8 ; + RECT 65.2 375.6 66.0 375.4 ; + RECT 71.6 376.8 72.4 376.6 ; + RECT 67.6 370.6 68.2 370.0 ; + RECT 62.0 373.4 67.4 372.8 ; + RECT 67.6 383.6 68.4 381.6 ; + RECT 57.6 365.4 79.4 364.2 ; + RECT 63.2 369.4 64.0 366.0 ; + RECT 74.8 374.0 75.6 365.4 ; + RECT 58.8 375.0 64.4 374.8 ; + RECT 61.0 376.4 61.8 376.2 ; + RECT 69.2 384.2 70.0 381.6 ; + RECT 71.8 383.6 73.0 382.2 ; + RECT 57.6 385.4 79.4 384.2 ; + RECT 78.0 367.0 78.8 365.4 ; + RECT 59.6 378.0 70.6 377.4 ; + RECT 73.4 379.2 77.2 378.6 ; + RECT 62.0 381.6 62.8 380.8 ; + RECT 67.6 381.6 68.2 381.0 ; + RECT 71.6 381.6 72.4 380.8 ; + RECT 73.0 375.4 73.8 375.2 ; + RECT 58.8 395.0 68.6 395.2 ; + RECT 73.0 394.4 77.2 395.0 ; + RECT 76.4 386.0 77.2 390.4 ; + RECT 65.4 398.4 69.0 399.0 ; + RECT 76.4 391.0 77.2 394.4 ; + RECT 65.4 389.2 66.2 389.4 ; + RECT 68.0 396.8 70.2 397.4 ; + RECT 58.8 386.0 59.6 390.8 ; + RECT 69.4 391.4 70.2 391.6 ; + RECT 65.4 398.2 66.2 398.4 ; + RECT 69.4 396.6 70.2 396.8 ; + RECT 62.0 396.8 62.8 397.0 ; + RECT 70.0 395.4 72.4 396.0 ; + RECT 62.6 392.2 63.4 392.4 ; + RECT 76.4 395.0 77.2 403.6 ; + RECT 73.4 390.2 74.2 390.4 ; + RECT 71.6 393.0 75.4 393.6 ; + RECT 63.8 389.4 64.4 391.6 ; + RECT 65.8 385.4 66.8 388.0 ; + RECT 74.8 385.4 75.6 389.8 ; + RECT 66.6 396.8 67.4 397.0 ; + RECT 74.6 393.6 75.4 393.8 ; + RECT 67.6 399.6 68.4 403.6 ; + RECT 62.0 398.8 62.8 399.6 ; + RECT 71.6 398.8 72.4 399.6 ; + RECT 63.8 395.2 68.6 395.6 ; + RECT 58.8 394.8 64.6 395.0 ; + RECT 61.0 393.4 66.0 394.0 ; + RECT 68.2 398.2 69.0 398.4 ; + RECT 62.0 399.6 64.0 400.2 ; + RECT 60.4 385.4 61.2 390.0 ; + RECT 65.4 388.6 68.2 389.2 ; + RECT 78.0 385.4 78.8 386.8 ; + RECT 58.8 395.2 59.6 403.6 ; + RECT 60.4 395.8 61.2 404.2 ; + RECT 71.8 396.0 72.4 397.0 ; + RECT 71.6 387.4 73.0 388.0 ; + RECT 66.0 399.6 66.8 404.2 ; + RECT 69.2 399.6 70.0 404.2 ; + RECT 71.8 397.0 73.2 397.8 ; + RECT 70.0 392.2 70.6 395.4 ; + RECT 59.6 391.4 61.2 391.6 ; + RECT 62.0 387.4 64.0 388.0 ; + RECT 63.2 386.0 64.0 387.4 ; + RECT 71.8 399.6 73.0 403.6 ; + RECT 63.6 388.6 64.4 389.4 ; + RECT 68.0 395.6 68.6 396.8 ; + RECT 65.2 394.0 66.0 394.2 ; + RECT 71.6 392.8 72.4 393.0 ; + RECT 67.6 399.0 68.2 399.6 ; + RECT 62.0 396.2 67.4 396.8 ; + RECT 67.6 386.0 68.4 388.0 ; + RECT 57.6 404.2 79.4 405.4 ; + RECT 63.2 400.2 64.0 403.6 ; + RECT 74.8 395.6 75.6 404.2 ; + RECT 58.8 394.6 64.4 394.8 ; + RECT 61.0 393.2 61.8 393.4 ; + RECT 69.2 385.4 70.0 388.0 ; + RECT 71.8 386.0 73.0 387.4 ; + RECT 57.6 384.2 79.4 385.4 ; + RECT 78.0 402.6 78.8 404.2 ; + RECT 59.6 391.6 70.6 392.2 ; + RECT 73.4 390.4 77.2 391.0 ; + RECT 62.0 388.0 62.8 388.8 ; + RECT 67.6 388.0 68.2 388.6 ; + RECT 71.6 388.0 72.4 388.8 ; + RECT 73.0 394.2 73.8 394.4 ; + RECT 58.8 414.6 68.6 414.4 ; + RECT 73.0 415.2 77.2 414.6 ; + RECT 76.4 423.6 77.2 419.2 ; + RECT 65.4 411.2 69.0 410.6 ; + RECT 76.4 418.6 77.2 415.2 ; + RECT 65.4 420.4 66.2 420.2 ; + RECT 68.0 412.8 70.2 412.2 ; + RECT 58.8 423.6 59.6 418.8 ; + RECT 69.4 418.2 70.2 418.0 ; + RECT 65.4 411.4 66.2 411.2 ; + RECT 69.4 413.0 70.2 412.8 ; + RECT 62.0 412.8 62.8 412.6 ; + RECT 70.0 414.2 72.4 413.6 ; + RECT 62.6 417.4 63.4 417.2 ; + RECT 76.4 414.6 77.2 406.0 ; + RECT 73.4 419.4 74.2 419.2 ; + RECT 71.6 416.6 75.4 416.0 ; + RECT 63.8 420.2 64.4 418.0 ; + RECT 65.8 424.2 66.8 421.6 ; + RECT 74.8 424.2 75.6 419.8 ; + RECT 66.6 412.8 67.4 412.6 ; + RECT 74.6 416.0 75.4 415.8 ; + RECT 67.6 410.0 68.4 406.0 ; + RECT 62.0 410.8 62.8 410.0 ; + RECT 71.6 410.8 72.4 410.0 ; + RECT 63.8 414.4 68.6 414.0 ; + RECT 58.8 414.8 64.6 414.6 ; + RECT 61.0 416.2 66.0 415.6 ; + RECT 68.2 411.4 69.0 411.2 ; + RECT 62.0 410.0 64.0 409.4 ; + RECT 60.4 424.2 61.2 419.6 ; + RECT 65.4 421.0 68.2 420.4 ; + RECT 78.0 424.2 78.8 422.8 ; + RECT 58.8 414.4 59.6 406.0 ; + RECT 60.4 413.8 61.2 405.4 ; + RECT 71.8 413.6 72.4 412.6 ; + RECT 71.6 422.2 73.0 421.6 ; + RECT 66.0 410.0 66.8 405.4 ; + RECT 69.2 410.0 70.0 405.4 ; + RECT 71.8 412.6 73.2 411.8 ; + RECT 70.0 417.4 70.6 414.2 ; + RECT 59.6 418.2 61.2 418.0 ; + RECT 62.0 422.2 64.0 421.6 ; + RECT 63.2 423.6 64.0 422.2 ; + RECT 71.8 410.0 73.0 406.0 ; + RECT 63.6 421.0 64.4 420.2 ; + RECT 68.0 414.0 68.6 412.8 ; + RECT 65.2 415.6 66.0 415.4 ; + RECT 71.6 416.8 72.4 416.6 ; + RECT 67.6 410.6 68.2 410.0 ; + RECT 62.0 413.4 67.4 412.8 ; + RECT 67.6 423.6 68.4 421.6 ; + RECT 57.6 405.4 79.4 404.2 ; + RECT 63.2 409.4 64.0 406.0 ; + RECT 74.8 414.0 75.6 405.4 ; + RECT 58.8 415.0 64.4 414.8 ; + RECT 61.0 416.4 61.8 416.2 ; + RECT 69.2 424.2 70.0 421.6 ; + RECT 71.8 423.6 73.0 422.2 ; + RECT 57.6 425.4 79.4 424.2 ; + RECT 78.0 407.0 78.8 405.4 ; + RECT 59.6 418.0 70.6 417.4 ; + RECT 73.4 419.2 77.2 418.6 ; + RECT 62.0 421.6 62.8 420.8 ; + RECT 67.6 421.6 68.2 421.0 ; + RECT 71.6 421.6 72.4 420.8 ; + RECT 73.0 415.4 73.8 415.2 ; + RECT 102.4 13.0 112.2 13.2 ; + RECT 116.6 12.4 120.8 13.0 ; + RECT 120.0 4.0 120.8 8.4 ; + RECT 109.0 16.4 112.6 17.0 ; + RECT 120.0 9.0 120.8 12.4 ; + RECT 109.0 7.2 109.8 7.4 ; + RECT 111.6 14.8 113.8 15.4 ; + RECT 102.4 4.0 103.2 8.8 ; + RECT 113.0 9.4 113.8 9.6 ; + RECT 109.0 16.2 109.8 16.4 ; + RECT 113.0 14.6 113.8 14.8 ; + RECT 105.6 14.8 106.4 15.0 ; + RECT 113.6 13.4 116.0 14.0 ; + RECT 106.2 10.2 107.0 10.4 ; + RECT 120.0 13.0 120.8 21.6 ; + RECT 117.0 8.2 117.8 8.4 ; + RECT 115.2 11.0 119.0 11.6 ; + RECT 107.4 7.4 108.0 9.6 ; + RECT 109.4 3.4 110.4 6.0 ; + RECT 118.4 3.4 119.2 7.8 ; + RECT 110.2 14.8 111.0 15.0 ; + RECT 118.2 11.6 119.0 11.8 ; + RECT 111.2 17.6 112.0 21.6 ; + RECT 105.6 16.8 106.4 17.6 ; + RECT 115.2 16.8 116.0 17.6 ; + RECT 107.4 13.2 112.2 13.6 ; + RECT 102.4 12.8 108.2 13.0 ; + RECT 104.6 11.4 109.6 12.0 ; + RECT 111.8 16.2 112.6 16.4 ; + RECT 105.6 17.6 107.6 18.2 ; + RECT 104.0 3.4 104.8 8.0 ; + RECT 109.0 6.6 111.8 7.2 ; + RECT 121.6 3.4 122.4 4.8 ; + RECT 102.4 13.2 103.2 21.6 ; + RECT 104.0 13.8 104.8 22.2 ; + RECT 115.4 14.0 116.0 15.0 ; + RECT 115.2 5.4 116.6 6.0 ; + RECT 109.6 17.6 110.4 22.2 ; + RECT 112.8 17.6 113.6 22.2 ; + RECT 115.4 15.0 116.8 15.8 ; + RECT 113.6 10.2 114.2 13.4 ; + RECT 103.2 9.4 104.8 9.6 ; + RECT 105.6 5.4 107.6 6.0 ; + RECT 106.8 4.0 107.6 5.4 ; + RECT 115.4 17.6 116.6 21.6 ; + RECT 107.2 6.6 108.0 7.4 ; + RECT 111.6 13.6 112.2 14.8 ; + RECT 108.8 12.0 109.6 12.2 ; + RECT 115.2 10.8 116.0 11.0 ; + RECT 111.2 17.0 111.8 17.6 ; + RECT 105.6 14.2 111.0 14.8 ; + RECT 111.2 4.0 112.0 6.0 ; + RECT 101.2 22.2 123.0 23.4 ; + RECT 106.8 18.2 107.6 21.6 ; + RECT 118.4 13.6 119.2 22.2 ; + RECT 102.4 12.6 108.0 12.8 ; + RECT 104.6 11.2 105.4 11.4 ; + RECT 112.8 3.4 113.6 6.0 ; + RECT 115.4 4.0 116.6 5.4 ; + RECT 101.2 2.2 123.0 3.4 ; + RECT 121.6 20.6 122.4 22.2 ; + RECT 103.2 9.6 114.2 10.2 ; + RECT 117.0 8.4 120.8 9.0 ; + RECT 105.6 6.0 106.4 6.8 ; + RECT 111.2 6.0 111.8 6.6 ; + RECT 115.2 6.0 116.0 6.8 ; + RECT 116.6 12.2 117.4 12.4 ; + RECT 124.2 13.0 134.0 13.2 ; + RECT 138.4 12.4 142.6 13.0 ; + RECT 141.8 4.0 142.6 8.4 ; + RECT 130.8 16.4 134.4 17.0 ; + RECT 141.8 9.0 142.6 12.4 ; + RECT 130.8 7.2 131.6 7.4 ; + RECT 133.4 14.8 135.6 15.4 ; + RECT 124.2 4.0 125.0 8.8 ; + RECT 134.8 9.4 135.6 9.6 ; + RECT 130.8 16.2 131.6 16.4 ; + RECT 134.8 14.6 135.6 14.8 ; + RECT 127.4 14.8 128.2 15.0 ; + RECT 135.4 13.4 137.8 14.0 ; + RECT 128.0 10.2 128.8 10.4 ; + RECT 141.8 13.0 142.6 21.6 ; + RECT 138.8 8.2 139.6 8.4 ; + RECT 137.0 11.0 140.8 11.6 ; + RECT 129.2 7.4 129.8 9.6 ; + RECT 131.2 3.4 132.2 6.0 ; + RECT 140.2 3.4 141.0 7.8 ; + RECT 132.0 14.8 132.8 15.0 ; + RECT 140.0 11.6 140.8 11.8 ; + RECT 133.0 17.6 133.8 21.6 ; + RECT 127.4 16.8 128.2 17.6 ; + RECT 137.0 16.8 137.8 17.6 ; + RECT 129.2 13.2 134.0 13.6 ; + RECT 124.2 12.8 130.0 13.0 ; + RECT 126.4 11.4 131.4 12.0 ; + RECT 133.6 16.2 134.4 16.4 ; + RECT 127.4 17.6 129.4 18.2 ; + RECT 125.8 3.4 126.6 8.0 ; + RECT 130.8 6.6 133.6 7.2 ; + RECT 143.4 3.4 144.2 4.8 ; + RECT 124.2 13.2 125.0 21.6 ; + RECT 125.8 13.8 126.6 22.2 ; + RECT 137.2 14.0 137.8 15.0 ; + RECT 137.0 5.4 138.4 6.0 ; + RECT 131.4 17.6 132.2 22.2 ; + RECT 134.6 17.6 135.4 22.2 ; + RECT 137.2 15.0 138.6 15.8 ; + RECT 135.4 10.2 136.0 13.4 ; + RECT 125.0 9.4 126.6 9.6 ; + RECT 127.4 5.4 129.4 6.0 ; + RECT 128.6 4.0 129.4 5.4 ; + RECT 137.2 17.6 138.4 21.6 ; + RECT 129.0 6.6 129.8 7.4 ; + RECT 133.4 13.6 134.0 14.8 ; + RECT 130.6 12.0 131.4 12.2 ; + RECT 137.0 10.8 137.8 11.0 ; + RECT 133.0 17.0 133.6 17.6 ; + RECT 127.4 14.2 132.8 14.8 ; + RECT 133.0 4.0 133.8 6.0 ; + RECT 123.0 22.2 144.8 23.4 ; + RECT 128.6 18.2 129.4 21.6 ; + RECT 140.2 13.6 141.0 22.2 ; + RECT 124.2 12.6 129.8 12.8 ; + RECT 126.4 11.2 127.2 11.4 ; + RECT 134.6 3.4 135.4 6.0 ; + RECT 137.2 4.0 138.4 5.4 ; + RECT 123.0 2.2 144.8 3.4 ; + RECT 143.4 20.6 144.2 22.2 ; + RECT 125.0 9.6 136.0 10.2 ; + RECT 138.8 8.4 142.6 9.0 ; + RECT 127.4 6.0 128.2 6.8 ; + RECT 133.0 6.0 133.6 6.6 ; + RECT 137.0 6.0 137.8 6.8 ; + RECT 138.4 12.2 139.2 12.4 ; LAYER metal2 ; - RECT 109650.0 319800.0 110550.0 322500.0 ; - RECT 106950.0 339600.0 107850.0 342300.0 ; - RECT 101550.0 300000.0 102450.0 302700.0 ; - RECT 98850.0 317100.0 99750.0 319800.0 ; - RECT 104250.0 280650.0 105150.0 283350.0 ; - RECT 96150.0 261750.0 97050.0 264450.0 ; - RECT 6300.0 275250.0 7200.0 277950.0 ; - RECT -3000.0 266700.0 1800.0 267600.0 ; - RECT 96150.0 0.0 97050.0 461850.0 ; - RECT 98850.0 0.0 99750.0 461850.0 ; - RECT 101550.0 0.0 102450.0 461850.0 ; - RECT 104250.0 0.0 105150.0 461850.0 ; - RECT 106950.0 0.0 107850.0 461850.0 ; - RECT 109650.0 0.0 110550.0 461850.0 ; - RECT 85350.0 47400.0 86250.0 209400.0 ; - RECT 88050.0 47400.0 88950.0 209400.0 ; - RECT 90750.0 47400.0 91650.0 209400.0 ; - RECT 93450.0 47400.0 94350.0 209400.0 ; - RECT 122550.0 432600.0 123450.0 433800.0 ; - RECT 132750.0 432600.0 133650.0 433800.0 ; - RECT 121050.0 15750.0 121950.0 16650.0 ; - RECT 117900.0 15750.0 121500.0 16650.0 ; - RECT 121050.0 16200.0 121950.0 18000.0 ; - RECT 131250.0 15750.0 132150.0 16650.0 ; - RECT 128100.0 15750.0 131700.0 16650.0 ; - RECT 131250.0 16200.0 132150.0 18000.0 ; - RECT 53400.0 430200.0 54300.0 432300.0 ; - RECT 116400.0 209400.0 126600.0 223200.0 ; - RECT 116400.0 237000.0 126600.0 223200.0 ; - RECT 116400.0 237000.0 126600.0 250800.0 ; - RECT 116400.0 264600.0 126600.0 250800.0 ; - RECT 116400.0 264600.0 126600.0 278400.0 ; - RECT 116400.0 292200.0 126600.0 278400.0 ; - RECT 116400.0 292200.0 126600.0 306000.0 ; - RECT 116400.0 319800.0 126600.0 306000.0 ; - RECT 116400.0 319800.0 126600.0 333600.0 ; - RECT 116400.0 347400.0 126600.0 333600.0 ; - RECT 116400.0 347400.0 126600.0 361200.0 ; - RECT 116400.0 375000.0 126600.0 361200.0 ; - RECT 116400.0 375000.0 126600.0 388800.0 ; - RECT 116400.0 402600.0 126600.0 388800.0 ; - RECT 116400.0 402600.0 126600.0 416400.0 ; - RECT 116400.0 430200.0 126600.0 416400.0 ; - RECT 126600.0 209400.0 136800.0 223200.0 ; - RECT 126600.0 237000.0 136800.0 223200.0 ; - RECT 126600.0 237000.0 136800.0 250800.0 ; - RECT 126600.0 264600.0 136800.0 250800.0 ; - RECT 126600.0 264600.0 136800.0 278400.0 ; - RECT 126600.0 292200.0 136800.0 278400.0 ; - RECT 126600.0 292200.0 136800.0 306000.0 ; - RECT 126600.0 319800.0 136800.0 306000.0 ; - RECT 126600.0 319800.0 136800.0 333600.0 ; - RECT 126600.0 347400.0 136800.0 333600.0 ; - RECT 126600.0 347400.0 136800.0 361200.0 ; - RECT 126600.0 375000.0 136800.0 361200.0 ; - RECT 126600.0 375000.0 136800.0 388800.0 ; - RECT 126600.0 402600.0 136800.0 388800.0 ; - RECT 126600.0 402600.0 136800.0 416400.0 ; - RECT 126600.0 430200.0 136800.0 416400.0 ; - RECT 119400.0 210000.0 120600.0 433800.0 ; - RECT 122400.0 208800.0 123600.0 432600.0 ; - RECT 129600.0 210000.0 130800.0 433800.0 ; - RECT 132600.0 208800.0 133800.0 432600.0 ; - RECT 115800.0 208800.0 117000.0 432600.0 ; - RECT 126000.0 208800.0 127200.0 432600.0 ; - RECT 136200.0 208800.0 137400.0 432600.0 ; - RECT 119400.0 436200.0 120600.0 437400.0 ; - RECT 121800.0 436200.0 123450.0 437400.0 ; - RECT 119400.0 443400.0 120600.0 444600.0 ; - RECT 122550.0 443400.0 125400.0 444600.0 ; - RECT 119400.0 436200.0 120600.0 437400.0 ; - RECT 121800.0 436200.0 123000.0 437400.0 ; - RECT 119400.0 443400.0 120600.0 444600.0 ; - RECT 124200.0 443400.0 125400.0 444600.0 ; - RECT 119550.0 433800.0 120450.0 450600.0 ; - RECT 122550.0 433800.0 123450.0 450600.0 ; - RECT 129600.0 436200.0 130800.0 437400.0 ; - RECT 132000.0 436200.0 133650.0 437400.0 ; - RECT 129600.0 443400.0 130800.0 444600.0 ; - RECT 132750.0 443400.0 135600.0 444600.0 ; - RECT 129600.0 436200.0 130800.0 437400.0 ; - RECT 132000.0 436200.0 133200.0 437400.0 ; - RECT 129600.0 443400.0 130800.0 444600.0 ; - RECT 134400.0 443400.0 135600.0 444600.0 ; - RECT 129750.0 433800.0 130650.0 450600.0 ; - RECT 132750.0 433800.0 133650.0 450600.0 ; - RECT 119550.0 433800.0 120450.0 450600.0 ; - RECT 122550.0 433800.0 123450.0 450600.0 ; - RECT 129750.0 433800.0 130650.0 450600.0 ; - RECT 132750.0 433800.0 133650.0 450600.0 ; - RECT 116400.0 160500.0 126600.0 209400.0 ; - RECT 126600.0 160500.0 136800.0 209400.0 ; - RECT 119400.0 160500.0 120600.0 173700.0 ; - RECT 122400.0 160500.0 123600.0 173700.0 ; - RECT 129600.0 160500.0 130800.0 173700.0 ; - RECT 132600.0 160500.0 133800.0 173700.0 ; - RECT 116400.0 99900.0 126600.0 160500.0 ; - RECT 126600.0 99900.0 136800.0 160500.0 ; - RECT 120900.0 99900.0 122100.0 102900.0 ; - RECT 131100.0 99900.0 132300.0 102900.0 ; - RECT 119400.0 158400.0 120600.0 160500.0 ; - RECT 122400.0 153000.0 123600.0 160500.0 ; - RECT 129600.0 158400.0 130800.0 160500.0 ; - RECT 132600.0 153000.0 133800.0 160500.0 ; - RECT 116400.0 39900.0 126600.0 99900.0 ; - RECT 136800.0 39900.0 126600.0 99900.0 ; - RECT 120900.0 97500.0 123600.0 98700.0 ; - RECT 118200.0 95400.0 119400.0 99900.0 ; - RECT 129600.0 97500.0 132300.0 98700.0 ; - RECT 133800.0 95400.0 135000.0 99900.0 ; - RECT 126000.0 39900.0 127200.0 99900.0 ; - RECT 116400.0 39900.0 126600.0 18000.0 ; - RECT 126600.0 39900.0 136800.0 18000.0 ; - RECT 120900.0 24900.0 122100.0 18000.0 ; - RECT 131100.0 24900.0 132300.0 18000.0 ; - RECT 120900.0 39900.0 122100.0 38400.0 ; - RECT 131100.0 39900.0 132300.0 38400.0 ; - RECT 9900.0 99000.0 10800.0 430200.0 ; - RECT 12000.0 99000.0 12900.0 430200.0 ; - RECT 14100.0 99000.0 15000.0 430200.0 ; - RECT 16200.0 99000.0 17100.0 430200.0 ; - RECT 18300.0 99000.0 19200.0 430200.0 ; - RECT 20400.0 99000.0 21300.0 430200.0 ; - RECT 22500.0 99000.0 23400.0 430200.0 ; - RECT 24600.0 99000.0 25500.0 430200.0 ; - RECT 56700.0 99000.0 55800.0 152400.0 ; - RECT 53700.0 99000.0 52800.0 152400.0 ; - RECT 62700.0 99000.0 61800.0 152400.0 ; - RECT 59700.0 99000.0 58800.0 152400.0 ; - RECT 46350.0 106350.0 45450.0 107250.0 ; - RECT 43950.0 106350.0 43050.0 107250.0 ; - RECT 46350.0 106800.0 45450.0 109650.0 ; - RECT 45900.0 106350.0 43500.0 107250.0 ; - RECT 43950.0 102150.0 43050.0 106800.0 ; - RECT 46500.0 109650.0 45300.0 110850.0 ; - RECT 44100.0 100950.0 42900.0 102150.0 ; - RECT 42900.0 106200.0 44100.0 107400.0 ; - RECT 46350.0 119250.0 45450.0 118350.0 ; - RECT 43950.0 119250.0 43050.0 118350.0 ; - RECT 46350.0 118800.0 45450.0 115950.0 ; - RECT 45900.0 119250.0 43500.0 118350.0 ; - RECT 43950.0 123450.0 43050.0 118800.0 ; - RECT 46500.0 115950.0 45300.0 114750.0 ; - RECT 44100.0 124650.0 42900.0 123450.0 ; - RECT 42900.0 119400.0 44100.0 118200.0 ; - RECT 46350.0 133950.0 45450.0 134850.0 ; - RECT 43950.0 133950.0 43050.0 134850.0 ; - RECT 46350.0 134400.0 45450.0 137250.0 ; - RECT 45900.0 133950.0 43500.0 134850.0 ; - RECT 43950.0 129750.0 43050.0 134400.0 ; - RECT 46500.0 137250.0 45300.0 138450.0 ; - RECT 44100.0 128550.0 42900.0 129750.0 ; - RECT 42900.0 133800.0 44100.0 135000.0 ; - RECT 46350.0 146850.0 45450.0 145950.0 ; - RECT 43950.0 146850.0 43050.0 145950.0 ; - RECT 46350.0 146400.0 45450.0 143550.0 ; - RECT 45900.0 146850.0 43500.0 145950.0 ; - RECT 43950.0 151050.0 43050.0 146400.0 ; - RECT 46500.0 143550.0 45300.0 142350.0 ; - RECT 44100.0 152250.0 42900.0 151050.0 ; - RECT 42900.0 147000.0 44100.0 145800.0 ; - RECT 61650.0 109500.0 62850.0 110700.0 ; - RECT 80250.0 105000.0 81450.0 106200.0 ; - RECT 58650.0 123300.0 59850.0 124500.0 ; - RECT 77250.0 119400.0 78450.0 120600.0 ; - RECT 80250.0 128100.0 81450.0 129300.0 ; - RECT 55650.0 128100.0 56850.0 129300.0 ; - RECT 77250.0 141900.0 78450.0 143100.0 ; - RECT 52650.0 141900.0 53850.0 143100.0 ; - RECT 61650.0 106200.0 62850.0 107400.0 ; - RECT 58650.0 103500.0 59850.0 104700.0 ; - RECT 55650.0 118200.0 56850.0 119400.0 ; - RECT 58650.0 120900.0 59850.0 122100.0 ; - RECT 61650.0 133800.0 62850.0 135000.0 ; - RECT 52650.0 131100.0 53850.0 132300.0 ; - RECT 55650.0 145800.0 56850.0 147000.0 ; - RECT 52650.0 148500.0 53850.0 149700.0 ; - RECT 81300.0 99000.0 80400.0 152400.0 ; - RECT 78300.0 99000.0 77400.0 152400.0 ; - RECT 56700.0 154200.0 55800.0 207600.0 ; - RECT 53700.0 154200.0 52800.0 207600.0 ; - RECT 62700.0 154200.0 61800.0 207600.0 ; - RECT 59700.0 154200.0 58800.0 207600.0 ; - RECT 46350.0 161550.0 45450.0 162450.0 ; - RECT 43950.0 161550.0 43050.0 162450.0 ; - RECT 46350.0 162000.0 45450.0 164850.0 ; - RECT 45900.0 161550.0 43500.0 162450.0 ; - RECT 43950.0 157350.0 43050.0 162000.0 ; - RECT 46500.0 164850.0 45300.0 166050.0 ; - RECT 44100.0 156150.0 42900.0 157350.0 ; - RECT 42900.0 161400.0 44100.0 162600.0 ; - RECT 46350.0 174450.0 45450.0 173550.0 ; - RECT 43950.0 174450.0 43050.0 173550.0 ; - RECT 46350.0 174000.0 45450.0 171150.0 ; - RECT 45900.0 174450.0 43500.0 173550.0 ; - RECT 43950.0 178650.0 43050.0 174000.0 ; - RECT 46500.0 171150.0 45300.0 169950.0 ; - RECT 44100.0 179850.0 42900.0 178650.0 ; - RECT 42900.0 174600.0 44100.0 173400.0 ; - RECT 46350.0 189150.0 45450.0 190050.0 ; - RECT 43950.0 189150.0 43050.0 190050.0 ; - RECT 46350.0 189600.0 45450.0 192450.0 ; - RECT 45900.0 189150.0 43500.0 190050.0 ; - RECT 43950.0 184950.0 43050.0 189600.0 ; - RECT 46500.0 192450.0 45300.0 193650.0 ; - RECT 44100.0 183750.0 42900.0 184950.0 ; - RECT 42900.0 189000.0 44100.0 190200.0 ; - RECT 46350.0 202050.0 45450.0 201150.0 ; - RECT 43950.0 202050.0 43050.0 201150.0 ; - RECT 46350.0 201600.0 45450.0 198750.0 ; - RECT 45900.0 202050.0 43500.0 201150.0 ; - RECT 43950.0 206250.0 43050.0 201600.0 ; - RECT 46500.0 198750.0 45300.0 197550.0 ; - RECT 44100.0 207450.0 42900.0 206250.0 ; - RECT 42900.0 202200.0 44100.0 201000.0 ; - RECT 61650.0 164700.0 62850.0 165900.0 ; - RECT 80250.0 160200.0 81450.0 161400.0 ; - RECT 58650.0 178500.0 59850.0 179700.0 ; - RECT 77250.0 174600.0 78450.0 175800.0 ; - RECT 80250.0 183300.0 81450.0 184500.0 ; - RECT 55650.0 183300.0 56850.0 184500.0 ; - RECT 77250.0 197100.0 78450.0 198300.0 ; - RECT 52650.0 197100.0 53850.0 198300.0 ; - RECT 61650.0 161400.0 62850.0 162600.0 ; - RECT 58650.0 158700.0 59850.0 159900.0 ; - RECT 55650.0 173400.0 56850.0 174600.0 ; - RECT 58650.0 176100.0 59850.0 177300.0 ; - RECT 61650.0 189000.0 62850.0 190200.0 ; - RECT 52650.0 186300.0 53850.0 187500.0 ; - RECT 55650.0 201000.0 56850.0 202200.0 ; - RECT 52650.0 203700.0 53850.0 204900.0 ; - RECT 81300.0 154200.0 80400.0 207600.0 ; - RECT 78300.0 154200.0 77400.0 207600.0 ; - RECT 31050.0 216750.0 31950.0 217650.0 ; - RECT 33450.0 216750.0 34350.0 217650.0 ; - RECT 31050.0 217200.0 31950.0 220050.0 ; - RECT 31500.0 216750.0 33900.0 217650.0 ; - RECT 33450.0 212550.0 34350.0 217200.0 ; - RECT 30900.0 220050.0 32100.0 221250.0 ; - RECT 33300.0 211350.0 34500.0 212550.0 ; - RECT 34500.0 216600.0 33300.0 217800.0 ; - RECT 31050.0 229650.0 31950.0 228750.0 ; - RECT 33450.0 229650.0 34350.0 228750.0 ; - RECT 31050.0 229200.0 31950.0 226350.0 ; - RECT 31500.0 229650.0 33900.0 228750.0 ; - RECT 33450.0 233850.0 34350.0 229200.0 ; - RECT 30900.0 226350.0 32100.0 225150.0 ; - RECT 33300.0 235050.0 34500.0 233850.0 ; - RECT 34500.0 229800.0 33300.0 228600.0 ; - RECT 31050.0 244350.0 31950.0 245250.0 ; - RECT 33450.0 244350.0 34350.0 245250.0 ; - RECT 31050.0 244800.0 31950.0 247650.0 ; - RECT 31500.0 244350.0 33900.0 245250.0 ; - RECT 33450.0 240150.0 34350.0 244800.0 ; - RECT 30900.0 247650.0 32100.0 248850.0 ; - RECT 33300.0 238950.0 34500.0 240150.0 ; - RECT 34500.0 244200.0 33300.0 245400.0 ; - RECT 31050.0 257250.0 31950.0 256350.0 ; - RECT 33450.0 257250.0 34350.0 256350.0 ; - RECT 31050.0 256800.0 31950.0 253950.0 ; - RECT 31500.0 257250.0 33900.0 256350.0 ; - RECT 33450.0 261450.0 34350.0 256800.0 ; - RECT 30900.0 253950.0 32100.0 252750.0 ; - RECT 33300.0 262650.0 34500.0 261450.0 ; - RECT 34500.0 257400.0 33300.0 256200.0 ; - RECT 31050.0 271950.0 31950.0 272850.0 ; - RECT 33450.0 271950.0 34350.0 272850.0 ; - RECT 31050.0 272400.0 31950.0 275250.0 ; - RECT 31500.0 271950.0 33900.0 272850.0 ; - RECT 33450.0 267750.0 34350.0 272400.0 ; - RECT 30900.0 275250.0 32100.0 276450.0 ; - RECT 33300.0 266550.0 34500.0 267750.0 ; - RECT 34500.0 271800.0 33300.0 273000.0 ; - RECT 31050.0 284850.0 31950.0 283950.0 ; - RECT 33450.0 284850.0 34350.0 283950.0 ; - RECT 31050.0 284400.0 31950.0 281550.0 ; - RECT 31500.0 284850.0 33900.0 283950.0 ; - RECT 33450.0 289050.0 34350.0 284400.0 ; - RECT 30900.0 281550.0 32100.0 280350.0 ; - RECT 33300.0 290250.0 34500.0 289050.0 ; - RECT 34500.0 285000.0 33300.0 283800.0 ; - RECT 31050.0 299550.0 31950.0 300450.0 ; - RECT 33450.0 299550.0 34350.0 300450.0 ; - RECT 31050.0 300000.0 31950.0 302850.0 ; - RECT 31500.0 299550.0 33900.0 300450.0 ; - RECT 33450.0 295350.0 34350.0 300000.0 ; - RECT 30900.0 302850.0 32100.0 304050.0 ; - RECT 33300.0 294150.0 34500.0 295350.0 ; - RECT 34500.0 299400.0 33300.0 300600.0 ; - RECT 31050.0 312450.0 31950.0 311550.0 ; - RECT 33450.0 312450.0 34350.0 311550.0 ; - RECT 31050.0 312000.0 31950.0 309150.0 ; - RECT 31500.0 312450.0 33900.0 311550.0 ; - RECT 33450.0 316650.0 34350.0 312000.0 ; - RECT 30900.0 309150.0 32100.0 307950.0 ; - RECT 33300.0 317850.0 34500.0 316650.0 ; - RECT 34500.0 312600.0 33300.0 311400.0 ; - RECT 31050.0 327150.0 31950.0 328050.0 ; - RECT 33450.0 327150.0 34350.0 328050.0 ; - RECT 31050.0 327600.0 31950.0 330450.0 ; - RECT 31500.0 327150.0 33900.0 328050.0 ; - RECT 33450.0 322950.0 34350.0 327600.0 ; - RECT 30900.0 330450.0 32100.0 331650.0 ; - RECT 33300.0 321750.0 34500.0 322950.0 ; - RECT 34500.0 327000.0 33300.0 328200.0 ; - RECT 31050.0 340050.0 31950.0 339150.0 ; - RECT 33450.0 340050.0 34350.0 339150.0 ; - RECT 31050.0 339600.0 31950.0 336750.0 ; - RECT 31500.0 340050.0 33900.0 339150.0 ; - RECT 33450.0 344250.0 34350.0 339600.0 ; - RECT 30900.0 336750.0 32100.0 335550.0 ; - RECT 33300.0 345450.0 34500.0 344250.0 ; - RECT 34500.0 340200.0 33300.0 339000.0 ; - RECT 31050.0 354750.0 31950.0 355650.0 ; - RECT 33450.0 354750.0 34350.0 355650.0 ; - RECT 31050.0 355200.0 31950.0 358050.0 ; - RECT 31500.0 354750.0 33900.0 355650.0 ; - RECT 33450.0 350550.0 34350.0 355200.0 ; - RECT 30900.0 358050.0 32100.0 359250.0 ; - RECT 33300.0 349350.0 34500.0 350550.0 ; - RECT 34500.0 354600.0 33300.0 355800.0 ; - RECT 31050.0 367650.0 31950.0 366750.0 ; - RECT 33450.0 367650.0 34350.0 366750.0 ; - RECT 31050.0 367200.0 31950.0 364350.0 ; - RECT 31500.0 367650.0 33900.0 366750.0 ; - RECT 33450.0 371850.0 34350.0 367200.0 ; - RECT 30900.0 364350.0 32100.0 363150.0 ; - RECT 33300.0 373050.0 34500.0 371850.0 ; - RECT 34500.0 367800.0 33300.0 366600.0 ; - RECT 31050.0 382350.0 31950.0 383250.0 ; - RECT 33450.0 382350.0 34350.0 383250.0 ; - RECT 31050.0 382800.0 31950.0 385650.0 ; - RECT 31500.0 382350.0 33900.0 383250.0 ; - RECT 33450.0 378150.0 34350.0 382800.0 ; - RECT 30900.0 385650.0 32100.0 386850.0 ; - RECT 33300.0 376950.0 34500.0 378150.0 ; - RECT 34500.0 382200.0 33300.0 383400.0 ; - RECT 31050.0 395250.0 31950.0 394350.0 ; - RECT 33450.0 395250.0 34350.0 394350.0 ; - RECT 31050.0 394800.0 31950.0 391950.0 ; - RECT 31500.0 395250.0 33900.0 394350.0 ; - RECT 33450.0 399450.0 34350.0 394800.0 ; - RECT 30900.0 391950.0 32100.0 390750.0 ; - RECT 33300.0 400650.0 34500.0 399450.0 ; - RECT 34500.0 395400.0 33300.0 394200.0 ; - RECT 31050.0 409950.0 31950.0 410850.0 ; - RECT 33450.0 409950.0 34350.0 410850.0 ; - RECT 31050.0 410400.0 31950.0 413250.0 ; - RECT 31500.0 409950.0 33900.0 410850.0 ; - RECT 33450.0 405750.0 34350.0 410400.0 ; - RECT 30900.0 413250.0 32100.0 414450.0 ; - RECT 33300.0 404550.0 34500.0 405750.0 ; - RECT 34500.0 409800.0 33300.0 411000.0 ; - RECT 31050.0 422850.0 31950.0 421950.0 ; - RECT 33450.0 422850.0 34350.0 421950.0 ; - RECT 31050.0 422400.0 31950.0 419550.0 ; - RECT 31500.0 422850.0 33900.0 421950.0 ; - RECT 33450.0 427050.0 34350.0 422400.0 ; - RECT 30900.0 419550.0 32100.0 418350.0 ; - RECT 33300.0 428250.0 34500.0 427050.0 ; - RECT 34500.0 423000.0 33300.0 421800.0 ; - RECT 10950.0 105000.0 9750.0 106200.0 ; - RECT 13050.0 119400.0 11850.0 120600.0 ; - RECT 15150.0 132600.0 13950.0 133800.0 ; - RECT 17250.0 147000.0 16050.0 148200.0 ; - RECT 19350.0 160200.0 18150.0 161400.0 ; - RECT 21450.0 174600.0 20250.0 175800.0 ; - RECT 23550.0 187800.0 22350.0 189000.0 ; - RECT 25650.0 202200.0 24450.0 203400.0 ; - RECT 10950.0 216600.0 9750.0 217800.0 ; - RECT 19350.0 213900.0 18150.0 215100.0 ; - RECT 10950.0 228600.0 9750.0 229800.0 ; - RECT 21450.0 231300.0 20250.0 232500.0 ; - RECT 10950.0 244200.0 9750.0 245400.0 ; - RECT 23550.0 241500.0 22350.0 242700.0 ; - RECT 10950.0 256200.0 9750.0 257400.0 ; - RECT 25650.0 258900.0 24450.0 260100.0 ; - RECT 13050.0 271800.0 11850.0 273000.0 ; - RECT 19350.0 269100.0 18150.0 270300.0 ; - RECT 13050.0 283800.0 11850.0 285000.0 ; - RECT 21450.0 286500.0 20250.0 287700.0 ; - RECT 13050.0 299400.0 11850.0 300600.0 ; - RECT 23550.0 296700.0 22350.0 297900.0 ; - RECT 13050.0 311400.0 11850.0 312600.0 ; - RECT 25650.0 314100.0 24450.0 315300.0 ; - RECT 15150.0 327000.0 13950.0 328200.0 ; - RECT 19350.0 324300.0 18150.0 325500.0 ; - RECT 15150.0 339000.0 13950.0 340200.0 ; - RECT 21450.0 341700.0 20250.0 342900.0 ; - RECT 15150.0 354600.0 13950.0 355800.0 ; - RECT 23550.0 351900.0 22350.0 353100.0 ; - RECT 15150.0 366600.0 13950.0 367800.0 ; - RECT 25650.0 369300.0 24450.0 370500.0 ; - RECT 17250.0 382200.0 16050.0 383400.0 ; - RECT 19350.0 379500.0 18150.0 380700.0 ; - RECT 17250.0 394200.0 16050.0 395400.0 ; - RECT 21450.0 396900.0 20250.0 398100.0 ; - RECT 17250.0 409800.0 16050.0 411000.0 ; - RECT 23550.0 407100.0 22350.0 408300.0 ; - RECT 17250.0 421800.0 16050.0 423000.0 ; - RECT 25650.0 424500.0 24450.0 425700.0 ; - RECT 80400.0 99000.0 81300.0 152400.0 ; - RECT 77400.0 99000.0 78300.0 152400.0 ; - RECT 80400.0 154200.0 81300.0 207600.0 ; - RECT 77400.0 154200.0 78300.0 207600.0 ; - RECT 55350.0 214050.0 56250.0 214950.0 ; - RECT 55350.0 213600.0 56250.0 214500.0 ; - RECT 55800.0 214050.0 72000.0 214950.0 ; - RECT 55350.0 231450.0 56250.0 232350.0 ; - RECT 55350.0 231900.0 56250.0 232800.0 ; - RECT 55800.0 231450.0 72000.0 232350.0 ; - RECT 55350.0 241650.0 56250.0 242550.0 ; - RECT 55350.0 241200.0 56250.0 242100.0 ; - RECT 55800.0 241650.0 72000.0 242550.0 ; - RECT 55350.0 259050.0 56250.0 259950.0 ; - RECT 55350.0 259500.0 56250.0 260400.0 ; - RECT 55800.0 259050.0 72000.0 259950.0 ; - RECT 55350.0 269250.0 56250.0 270150.0 ; - RECT 55350.0 268800.0 56250.0 269700.0 ; - RECT 55800.0 269250.0 72000.0 270150.0 ; - RECT 55350.0 286650.0 56250.0 287550.0 ; - RECT 55350.0 287100.0 56250.0 288000.0 ; - RECT 55800.0 286650.0 72000.0 287550.0 ; - RECT 55350.0 296850.0 56250.0 297750.0 ; - RECT 55350.0 296400.0 56250.0 297300.0 ; - RECT 55800.0 296850.0 72000.0 297750.0 ; - RECT 55350.0 314250.0 56250.0 315150.0 ; - RECT 55350.0 314700.0 56250.0 315600.0 ; - RECT 55800.0 314250.0 72000.0 315150.0 ; - RECT 55350.0 324450.0 56250.0 325350.0 ; - RECT 55350.0 324000.0 56250.0 324900.0 ; - RECT 55800.0 324450.0 72000.0 325350.0 ; - RECT 55350.0 341850.0 56250.0 342750.0 ; - RECT 55350.0 342300.0 56250.0 343200.0 ; - RECT 55800.0 341850.0 72000.0 342750.0 ; - RECT 55350.0 352050.0 56250.0 352950.0 ; - RECT 55350.0 351600.0 56250.0 352500.0 ; - RECT 55800.0 352050.0 72000.0 352950.0 ; - RECT 55350.0 369450.0 56250.0 370350.0 ; - RECT 55350.0 369900.0 56250.0 370800.0 ; - RECT 55800.0 369450.0 72000.0 370350.0 ; - RECT 55350.0 379650.0 56250.0 380550.0 ; - RECT 55350.0 379200.0 56250.0 380100.0 ; - RECT 55800.0 379650.0 72000.0 380550.0 ; - RECT 55350.0 397050.0 56250.0 397950.0 ; - RECT 55350.0 397500.0 56250.0 398400.0 ; - RECT 55800.0 397050.0 72000.0 397950.0 ; - RECT 55350.0 407250.0 56250.0 408150.0 ; - RECT 55350.0 406800.0 56250.0 407700.0 ; - RECT 55800.0 407250.0 72000.0 408150.0 ; - RECT 55350.0 424650.0 56250.0 425550.0 ; - RECT 55350.0 425100.0 56250.0 426000.0 ; - RECT 55800.0 424650.0 72000.0 425550.0 ; - RECT 70950.0 216750.0 71850.0 217650.0 ; - RECT 73350.0 216750.0 74250.0 217650.0 ; - RECT 70950.0 217200.0 71850.0 220050.0 ; - RECT 71400.0 216750.0 73800.0 217650.0 ; - RECT 73350.0 212550.0 74250.0 217200.0 ; - RECT 70800.0 220050.0 72000.0 221250.0 ; - RECT 73200.0 211350.0 74400.0 212550.0 ; - RECT 74400.0 216600.0 73200.0 217800.0 ; - RECT 53250.0 215400.0 54450.0 216600.0 ; - RECT 55200.0 213000.0 56400.0 214200.0 ; - RECT 72000.0 213900.0 70800.0 215100.0 ; - RECT 70950.0 229650.0 71850.0 228750.0 ; - RECT 73350.0 229650.0 74250.0 228750.0 ; - RECT 70950.0 229200.0 71850.0 226350.0 ; - RECT 71400.0 229650.0 73800.0 228750.0 ; - RECT 73350.0 233850.0 74250.0 229200.0 ; - RECT 70800.0 226350.0 72000.0 225150.0 ; - RECT 73200.0 235050.0 74400.0 233850.0 ; - RECT 74400.0 229800.0 73200.0 228600.0 ; - RECT 53250.0 229800.0 54450.0 231000.0 ; - RECT 55200.0 232200.0 56400.0 233400.0 ; - RECT 72000.0 231300.0 70800.0 232500.0 ; - RECT 70950.0 244350.0 71850.0 245250.0 ; - RECT 73350.0 244350.0 74250.0 245250.0 ; - RECT 70950.0 244800.0 71850.0 247650.0 ; - RECT 71400.0 244350.0 73800.0 245250.0 ; - RECT 73350.0 240150.0 74250.0 244800.0 ; - RECT 70800.0 247650.0 72000.0 248850.0 ; - RECT 73200.0 238950.0 74400.0 240150.0 ; - RECT 74400.0 244200.0 73200.0 245400.0 ; - RECT 53250.0 243000.0 54450.0 244200.0 ; - RECT 55200.0 240600.0 56400.0 241800.0 ; - RECT 72000.0 241500.0 70800.0 242700.0 ; - RECT 70950.0 257250.0 71850.0 256350.0 ; - RECT 73350.0 257250.0 74250.0 256350.0 ; - RECT 70950.0 256800.0 71850.0 253950.0 ; - RECT 71400.0 257250.0 73800.0 256350.0 ; - RECT 73350.0 261450.0 74250.0 256800.0 ; - RECT 70800.0 253950.0 72000.0 252750.0 ; - RECT 73200.0 262650.0 74400.0 261450.0 ; - RECT 74400.0 257400.0 73200.0 256200.0 ; - RECT 53250.0 257400.0 54450.0 258600.0 ; - RECT 55200.0 259800.0 56400.0 261000.0 ; - RECT 72000.0 258900.0 70800.0 260100.0 ; - RECT 70950.0 271950.0 71850.0 272850.0 ; - RECT 73350.0 271950.0 74250.0 272850.0 ; - RECT 70950.0 272400.0 71850.0 275250.0 ; - RECT 71400.0 271950.0 73800.0 272850.0 ; - RECT 73350.0 267750.0 74250.0 272400.0 ; - RECT 70800.0 275250.0 72000.0 276450.0 ; - RECT 73200.0 266550.0 74400.0 267750.0 ; - RECT 74400.0 271800.0 73200.0 273000.0 ; - RECT 53250.0 270600.0 54450.0 271800.0 ; - RECT 55200.0 268200.0 56400.0 269400.0 ; - RECT 72000.0 269100.0 70800.0 270300.0 ; - RECT 70950.0 284850.0 71850.0 283950.0 ; - RECT 73350.0 284850.0 74250.0 283950.0 ; - RECT 70950.0 284400.0 71850.0 281550.0 ; - RECT 71400.0 284850.0 73800.0 283950.0 ; - RECT 73350.0 289050.0 74250.0 284400.0 ; - RECT 70800.0 281550.0 72000.0 280350.0 ; - RECT 73200.0 290250.0 74400.0 289050.0 ; - RECT 74400.0 285000.0 73200.0 283800.0 ; - RECT 53250.0 285000.0 54450.0 286200.0 ; - RECT 55200.0 287400.0 56400.0 288600.0 ; - RECT 72000.0 286500.0 70800.0 287700.0 ; - RECT 70950.0 299550.0 71850.0 300450.0 ; - RECT 73350.0 299550.0 74250.0 300450.0 ; - RECT 70950.0 300000.0 71850.0 302850.0 ; - RECT 71400.0 299550.0 73800.0 300450.0 ; - RECT 73350.0 295350.0 74250.0 300000.0 ; - RECT 70800.0 302850.0 72000.0 304050.0 ; - RECT 73200.0 294150.0 74400.0 295350.0 ; - RECT 74400.0 299400.0 73200.0 300600.0 ; - RECT 53250.0 298200.0 54450.0 299400.0 ; - RECT 55200.0 295800.0 56400.0 297000.0 ; - RECT 72000.0 296700.0 70800.0 297900.0 ; - RECT 70950.0 312450.0 71850.0 311550.0 ; - RECT 73350.0 312450.0 74250.0 311550.0 ; - RECT 70950.0 312000.0 71850.0 309150.0 ; - RECT 71400.0 312450.0 73800.0 311550.0 ; - RECT 73350.0 316650.0 74250.0 312000.0 ; - RECT 70800.0 309150.0 72000.0 307950.0 ; - RECT 73200.0 317850.0 74400.0 316650.0 ; - RECT 74400.0 312600.0 73200.0 311400.0 ; - RECT 53250.0 312600.0 54450.0 313800.0 ; - RECT 55200.0 315000.0 56400.0 316200.0 ; - RECT 72000.0 314100.0 70800.0 315300.0 ; - RECT 70950.0 327150.0 71850.0 328050.0 ; - RECT 73350.0 327150.0 74250.0 328050.0 ; - RECT 70950.0 327600.0 71850.0 330450.0 ; - RECT 71400.0 327150.0 73800.0 328050.0 ; - RECT 73350.0 322950.0 74250.0 327600.0 ; - RECT 70800.0 330450.0 72000.0 331650.0 ; - RECT 73200.0 321750.0 74400.0 322950.0 ; - RECT 74400.0 327000.0 73200.0 328200.0 ; - RECT 53250.0 325800.0 54450.0 327000.0 ; - RECT 55200.0 323400.0 56400.0 324600.0 ; - RECT 72000.0 324300.0 70800.0 325500.0 ; - RECT 70950.0 340050.0 71850.0 339150.0 ; - RECT 73350.0 340050.0 74250.0 339150.0 ; - RECT 70950.0 339600.0 71850.0 336750.0 ; - RECT 71400.0 340050.0 73800.0 339150.0 ; - RECT 73350.0 344250.0 74250.0 339600.0 ; - RECT 70800.0 336750.0 72000.0 335550.0 ; - RECT 73200.0 345450.0 74400.0 344250.0 ; - RECT 74400.0 340200.0 73200.0 339000.0 ; - RECT 53250.0 340200.0 54450.0 341400.0 ; - RECT 55200.0 342600.0 56400.0 343800.0 ; - RECT 72000.0 341700.0 70800.0 342900.0 ; - RECT 70950.0 354750.0 71850.0 355650.0 ; - RECT 73350.0 354750.0 74250.0 355650.0 ; - RECT 70950.0 355200.0 71850.0 358050.0 ; - RECT 71400.0 354750.0 73800.0 355650.0 ; - RECT 73350.0 350550.0 74250.0 355200.0 ; - RECT 70800.0 358050.0 72000.0 359250.0 ; - RECT 73200.0 349350.0 74400.0 350550.0 ; - RECT 74400.0 354600.0 73200.0 355800.0 ; - RECT 53250.0 353400.0 54450.0 354600.0 ; - RECT 55200.0 351000.0 56400.0 352200.0 ; - RECT 72000.0 351900.0 70800.0 353100.0 ; - RECT 70950.0 367650.0 71850.0 366750.0 ; - RECT 73350.0 367650.0 74250.0 366750.0 ; - RECT 70950.0 367200.0 71850.0 364350.0 ; - RECT 71400.0 367650.0 73800.0 366750.0 ; - RECT 73350.0 371850.0 74250.0 367200.0 ; - RECT 70800.0 364350.0 72000.0 363150.0 ; - RECT 73200.0 373050.0 74400.0 371850.0 ; - RECT 74400.0 367800.0 73200.0 366600.0 ; - RECT 53250.0 367800.0 54450.0 369000.0 ; - RECT 55200.0 370200.0 56400.0 371400.0 ; - RECT 72000.0 369300.0 70800.0 370500.0 ; - RECT 70950.0 382350.0 71850.0 383250.0 ; - RECT 73350.0 382350.0 74250.0 383250.0 ; - RECT 70950.0 382800.0 71850.0 385650.0 ; - RECT 71400.0 382350.0 73800.0 383250.0 ; - RECT 73350.0 378150.0 74250.0 382800.0 ; - RECT 70800.0 385650.0 72000.0 386850.0 ; - RECT 73200.0 376950.0 74400.0 378150.0 ; - RECT 74400.0 382200.0 73200.0 383400.0 ; - RECT 53250.0 381000.0 54450.0 382200.0 ; - RECT 55200.0 378600.0 56400.0 379800.0 ; - RECT 72000.0 379500.0 70800.0 380700.0 ; - RECT 70950.0 395250.0 71850.0 394350.0 ; - RECT 73350.0 395250.0 74250.0 394350.0 ; - RECT 70950.0 394800.0 71850.0 391950.0 ; - RECT 71400.0 395250.0 73800.0 394350.0 ; - RECT 73350.0 399450.0 74250.0 394800.0 ; - RECT 70800.0 391950.0 72000.0 390750.0 ; - RECT 73200.0 400650.0 74400.0 399450.0 ; - RECT 74400.0 395400.0 73200.0 394200.0 ; - RECT 53250.0 395400.0 54450.0 396600.0 ; - RECT 55200.0 397800.0 56400.0 399000.0 ; - RECT 72000.0 396900.0 70800.0 398100.0 ; - RECT 70950.0 409950.0 71850.0 410850.0 ; - RECT 73350.0 409950.0 74250.0 410850.0 ; - RECT 70950.0 410400.0 71850.0 413250.0 ; - RECT 71400.0 409950.0 73800.0 410850.0 ; - RECT 73350.0 405750.0 74250.0 410400.0 ; - RECT 70800.0 413250.0 72000.0 414450.0 ; - RECT 73200.0 404550.0 74400.0 405750.0 ; - RECT 74400.0 409800.0 73200.0 411000.0 ; - RECT 53250.0 408600.0 54450.0 409800.0 ; - RECT 55200.0 406200.0 56400.0 407400.0 ; - RECT 72000.0 407100.0 70800.0 408300.0 ; - RECT 70950.0 422850.0 71850.0 421950.0 ; - RECT 73350.0 422850.0 74250.0 421950.0 ; - RECT 70950.0 422400.0 71850.0 419550.0 ; - RECT 71400.0 422850.0 73800.0 421950.0 ; - RECT 73350.0 427050.0 74250.0 422400.0 ; - RECT 70800.0 419550.0 72000.0 418350.0 ; - RECT 73200.0 428250.0 74400.0 427050.0 ; - RECT 74400.0 423000.0 73200.0 421800.0 ; - RECT 53250.0 423000.0 54450.0 424200.0 ; - RECT 55200.0 425400.0 56400.0 426600.0 ; - RECT 72000.0 424500.0 70800.0 425700.0 ; - RECT 53400.0 209400.0 54300.0 430200.0 ; - RECT 9900.0 93600.0 69900.0 83400.0 ; - RECT 9900.0 73200.0 69900.0 83400.0 ; - RECT 9900.0 73200.0 69900.0 63000.0 ; - RECT 9900.0 52800.0 69900.0 63000.0 ; - RECT 67500.0 89100.0 68700.0 86400.0 ; - RECT 65400.0 91800.0 69900.0 90600.0 ; - RECT 67500.0 80400.0 68700.0 77700.0 ; - RECT 65400.0 76200.0 69900.0 75000.0 ; - RECT 67500.0 68700.0 68700.0 66000.0 ; - RECT 65400.0 71400.0 69900.0 70200.0 ; - RECT 67500.0 60000.0 68700.0 57300.0 ; - RECT 65400.0 55800.0 69900.0 54600.0 ; - RECT 9900.0 84000.0 69900.0 82800.0 ; - RECT 9900.0 63600.0 69900.0 62400.0 ; - RECT 0.0 0.0 3600.0 3600.0 ; - RECT 0.0 453300.0 3600.0 456900.0 ; - RECT 139500.0 0.0 143100.0 3600.0 ; - RECT 139500.0 453300.0 143100.0 456900.0 ; - RECT 4950.0 4950.0 8550.0 8550.0 ; - RECT 4950.0 458250.0 8550.0 461850.0 ; - RECT 144450.0 4950.0 148050.0 8550.0 ; - RECT 144450.0 458250.0 148050.0 461850.0 ; - RECT 117450.0 15750.0 118650.0 16950.0 ; - RECT 127650.0 15750.0 128850.0 16950.0 ; - RECT 121200.0 300.0 122400.0 1500.0 ; - RECT 131400.0 300.0 132600.0 1500.0 ; - RECT 81300.0 101250.0 80100.0 102450.0 ; - RECT 86400.0 101100.0 85200.0 102300.0 ; - RECT 78300.0 115050.0 77100.0 116250.0 ; - RECT 89100.0 114900.0 87900.0 116100.0 ; - RECT 81300.0 156450.0 80100.0 157650.0 ; - RECT 91800.0 156300.0 90600.0 157500.0 ; - RECT 78300.0 170250.0 77100.0 171450.0 ; - RECT 94500.0 170100.0 93300.0 171300.0 ; - RECT 3600.0 98400.0 -5.3290705182e-12 99600.0 ; - RECT 3600.0 126000.0 -5.3290705182e-12 127200.0 ; - RECT 3600.0 153600.0 -5.3290705182e-12 154800.0 ; - RECT 3600.0 181200.0 -5.3290705182e-12 182400.0 ; - RECT 8550.0 112200.0 4950.0 113400.0 ; - RECT 8550.0 139800.0 4950.0 141000.0 ; - RECT 8550.0 167400.0 4950.0 168600.0 ; - RECT 8550.0 195000.0 4950.0 196200.0 ; - RECT 69300.0 87150.0 68100.0 88350.0 ; - RECT 86400.0 87150.0 85200.0 88350.0 ; - RECT 69300.0 78450.0 68100.0 79650.0 ; - RECT 89100.0 78450.0 87900.0 79650.0 ; - RECT 69300.0 66750.0 68100.0 67950.0 ; - RECT 91800.0 66750.0 90600.0 67950.0 ; - RECT 69300.0 58050.0 68100.0 59250.0 ; - RECT 94500.0 58050.0 93300.0 59250.0 ; - RECT 11100.0 82800.0 9900.0 84000.0 ; - RECT 3600.0 82800.0 -5.3290705182e-12 84000.0 ; - RECT 11100.0 62400.0 9900.0 63600.0 ; - RECT 3600.0 62400.0 -5.3290705182e-12 63600.0 ; - RECT 8550.0 50100.0 4950.0 51300.0 ; - RECT 105300.0 42150.0 104100.0 43350.0 ; - RECT 99900.0 37650.0 98700.0 38850.0 ; - RECT 102600.0 35250.0 101400.0 36450.0 ; - RECT 105300.0 438450.0 104100.0 439650.0 ; - RECT 108000.0 106950.0 106800.0 108150.0 ; - RECT 110700.0 205050.0 109500.0 206250.0 ; - RECT 97200.0 95100.0 96000.0 96300.0 ; - RECT 54450.0 431700.0 53250.0 432900.0 ; - RECT 97200.0 431700.0 96000.0 432900.0 ; - RECT 148050.0 449550.0 144450.0 450750.0 ; - RECT 148050.0 177750.0 144450.0 178950.0 ; - RECT 148050.0 109050.0 144450.0 110250.0 ; - RECT 148050.0 96150.0 144450.0 97350.0 ; - RECT 148050.0 19350.0 144450.0 20550.0 ; - RECT 8550.0 222600.0 4950.0 223800.0 ; - RECT 148050.0 222600.0 144450.0 223800.0 ; - RECT 8550.0 250200.0 4950.0 251400.0 ; - RECT 148050.0 250200.0 144450.0 251400.0 ; - RECT 8550.0 277800.0 4950.0 279000.0 ; - RECT 148050.0 277800.0 144450.0 279000.0 ; - RECT 8550.0 305400.0 4950.0 306600.0 ; - RECT 148050.0 305400.0 144450.0 306600.0 ; - RECT 8550.0 333000.0 4950.0 334200.0 ; - RECT 148050.0 333000.0 144450.0 334200.0 ; - RECT 8550.0 360600.0 4950.0 361800.0 ; - RECT 148050.0 360600.0 144450.0 361800.0 ; - RECT 8550.0 388200.0 4950.0 389400.0 ; - RECT 148050.0 388200.0 144450.0 389400.0 ; - RECT 8550.0 415800.0 4950.0 417000.0 ; - RECT 148050.0 415800.0 144450.0 417000.0 ; - RECT 143100.0 33150.0 139500.0 34350.0 ; - RECT 143100.0 202950.0 139500.0 204150.0 ; - RECT 143100.0 104850.0 139500.0 106050.0 ; - RECT 3600.0 208800.0 -5.3290705182e-12 210000.0 ; - RECT 3600.0 236400.0 -5.3290705182e-12 237600.0 ; - RECT 3600.0 264000.0 -5.3290705182e-12 265200.0 ; - RECT 3600.0 291600.0 -5.3290705182e-12 292800.0 ; - RECT 3600.0 319200.0 -5.3290705182e-12 320400.0 ; - RECT 3600.0 346800.0 -5.3290705182e-12 348000.0 ; - RECT 3600.0 374400.0 -5.3290705182e-12 375600.0 ; - RECT 3600.0 402000.0 -5.3290705182e-12 403200.0 ; - RECT 3600.0 429600.0 -5.3290705182e-12 430800.0 ; - RECT 120900.0 0.0 121800.0 1800.0 ; - RECT 131100.0 0.0 132000.0 1800.0 ; - RECT 109650.0 0.0 110550.0 461850.0 ; - RECT 106950.0 0.0 107850.0 461850.0 ; - RECT 98850.0 0.0 99750.0 461850.0 ; - RECT 101550.0 0.0 102450.0 461850.0 ; - RECT 104250.0 0.0 105150.0 461850.0 ; - RECT 96150.0 0.0 97050.0 461850.0 ; - RECT 4950.0 0.0 8550.0 461850.0 ; - RECT 144450.0 0.0 148050.0 461850.0 ; - RECT 0.0 0.0 3600.0 461850.0 ; - RECT 139500.0 0.0 143100.0 461850.0 ; - RECT -3000.0 269400.0 -52800.0 270300.0 ; - RECT -3000.0 272100.0 -52800.0 273000.0 ; - RECT -3000.0 274800.0 -52800.0 275700.0 ; - RECT -3000.0 280200.0 -52800.0 281100.0 ; - RECT -9450.0 223050.0 -16800.0 223950.0 ; - RECT -19050.0 184650.0 -19950.0 264450.0 ; - RECT -3000.0 266700.0 -5700.0 267600.0 ; - RECT -14100.0 277500.0 -16800.0 278400.0 ; - RECT -27900.0 266700.0 -30600.0 267600.0 ; - RECT -41700.0 277500.0 -44400.0 278400.0 ; - RECT -52800.0 181800.0 -42600.0 241800.0 ; - RECT -32400.0 181800.0 -42600.0 241800.0 ; - RECT -32400.0 181800.0 -22200.0 241800.0 ; - RECT -48300.0 239400.0 -45600.0 240600.0 ; - RECT -51000.0 237300.0 -49800.0 241800.0 ; - RECT -39600.0 239400.0 -36900.0 240600.0 ; - RECT -35400.0 237300.0 -34200.0 241800.0 ; - RECT -27900.0 239400.0 -25200.0 240600.0 ; - RECT -30600.0 237300.0 -29400.0 241800.0 ; - RECT -43200.0 181800.0 -42000.0 241800.0 ; - RECT -22800.0 181800.0 -21600.0 241800.0 ; - RECT -6150.0 297450.0 -13650.0 298350.0 ; - RECT -11100.0 292650.0 -12000.0 293550.0 ; - RECT -11100.0 297450.0 -12000.0 298350.0 ; - RECT -11550.0 292650.0 -13650.0 293550.0 ; - RECT -11100.0 293100.0 -12000.0 297900.0 ; - RECT -6150.0 297450.0 -11550.0 298350.0 ; - RECT -13650.0 292500.0 -14850.0 293700.0 ; - RECT -13650.0 297300.0 -14850.0 298500.0 ; - RECT -4950.0 297300.0 -6150.0 298500.0 ; - RECT -10950.0 297300.0 -12150.0 298500.0 ; - RECT -24000.0 295050.0 -23100.0 295950.0 ; - RECT -23550.0 295050.0 -20550.0 295950.0 ; - RECT -24000.0 295500.0 -23100.0 296400.0 ; - RECT -29100.0 295050.0 -28200.0 295950.0 ; - RECT -29100.0 293700.0 -28200.0 295500.0 ; - RECT -28650.0 295050.0 -23550.0 295950.0 ; - RECT -20550.0 294900.0 -19350.0 296100.0 ; - RECT -29250.0 293700.0 -28050.0 292500.0 ; - RECT -24150.0 297000.0 -22950.0 295800.0 ; - RECT -23250.0 309750.0 -22350.0 310650.0 ; - RECT -23250.0 312150.0 -22350.0 313050.0 ; - RECT -22800.0 309750.0 -19950.0 310650.0 ; - RECT -23250.0 310200.0 -22350.0 312600.0 ; - RECT -27450.0 312150.0 -22800.0 313050.0 ; - RECT -19950.0 309600.0 -18750.0 310800.0 ; - RECT -28650.0 312000.0 -27450.0 313200.0 ; - RECT -23400.0 313200.0 -22200.0 312000.0 ; - RECT -33750.0 307050.0 -41250.0 307950.0 ; - RECT -38700.0 302250.0 -39600.0 303150.0 ; - RECT -38700.0 307050.0 -39600.0 307950.0 ; - RECT -39150.0 302250.0 -41250.0 303150.0 ; - RECT -38700.0 302700.0 -39600.0 307500.0 ; - RECT -33750.0 307050.0 -39150.0 307950.0 ; - RECT -41250.0 302100.0 -42450.0 303300.0 ; - RECT -41250.0 306900.0 -42450.0 308100.0 ; - RECT -32550.0 306900.0 -33750.0 308100.0 ; - RECT -38550.0 306900.0 -39750.0 308100.0 ; - RECT -49800.0 242400.0 -51000.0 241200.0 ; - RECT -49800.0 281250.0 -51000.0 280050.0 ; - RECT -46350.0 241200.0 -47550.0 240000.0 ; - RECT -46350.0 270450.0 -47550.0 269250.0 ; - RECT -34200.0 242400.0 -35400.0 241200.0 ; - RECT -34200.0 273150.0 -35400.0 271950.0 ; - RECT -29400.0 242400.0 -30600.0 241200.0 ; - RECT -29400.0 275850.0 -30600.0 274650.0 ; - RECT -42000.0 242400.0 -43200.0 241200.0 ; - RECT -42000.0 267750.0 -43200.0 266550.0 ; - RECT -21600.0 242400.0 -22800.0 241200.0 ; - RECT -21600.0 267750.0 -22800.0 266550.0 ; - RECT -30150.0 351300.0 -31050.0 437100.0 ; - RECT -35550.0 351300.0 -36450.0 432300.0 ; - RECT -45750.0 351300.0 -46650.0 432300.0 ; - RECT -32400.0 355500.0 -33300.0 363600.0 ; - RECT -39150.0 355500.0 -40050.0 360300.0 ; - RECT -10050.0 395100.0 -9150.0 402300.0 ; - RECT -10050.0 402300.0 -9150.0 411900.0 ; - RECT -10050.0 411900.0 -9150.0 421500.0 ; - RECT -10050.0 423900.0 -9150.0 431100.0 ; - RECT -10050.0 431100.0 -9150.0 440700.0 ; - RECT -10050.0 440700.0 -9150.0 450300.0 ; - RECT -17250.0 452250.0 -16350.0 453150.0 ; - RECT -17250.0 443850.0 -16350.0 444750.0 ; - RECT -16800.0 452250.0 -9600.0 453150.0 ; - RECT -17250.0 444300.0 -16350.0 452700.0 ; - RECT -24000.0 443850.0 -16800.0 444750.0 ; - RECT -24450.0 434700.0 -23550.0 444300.0 ; - RECT -24450.0 425100.0 -23550.0 434700.0 ; - RECT -24450.0 415500.0 -23550.0 422700.0 ; - RECT -24450.0 405900.0 -23550.0 415500.0 ; - RECT -24450.0 396300.0 -23550.0 405900.0 ; - RECT -10200.0 401700.0 -9000.0 402900.0 ; - RECT -10200.0 411300.0 -9000.0 412500.0 ; - RECT -10200.0 420900.0 -9000.0 422100.0 ; - RECT -10200.0 430500.0 -9000.0 431700.0 ; - RECT -10200.0 440100.0 -9000.0 441300.0 ; - RECT -10200.0 449700.0 -9000.0 450900.0 ; - RECT -24600.0 443700.0 -23400.0 444900.0 ; - RECT -24600.0 434100.0 -23400.0 435300.0 ; - RECT -24600.0 424500.0 -23400.0 425700.0 ; - RECT -24600.0 414900.0 -23400.0 416100.0 ; - RECT -24600.0 405300.0 -23400.0 406500.0 ; - RECT -24600.0 395700.0 -23400.0 396900.0 ; - RECT -10200.0 394500.0 -9000.0 395700.0 ; - RECT -10200.0 423300.0 -9000.0 424500.0 ; - RECT -10200.0 452100.0 -9000.0 453300.0 ; - RECT -24600.0 422100.0 -23400.0 423300.0 ; - RECT -36000.0 374700.0 -46200.0 360900.0 ; - RECT -36000.0 374700.0 -46200.0 388500.0 ; - RECT -36000.0 402300.0 -46200.0 388500.0 ; - RECT -36000.0 402300.0 -46200.0 416100.0 ; - RECT -36000.0 429900.0 -46200.0 416100.0 ; - RECT -39000.0 375300.0 -40200.0 433500.0 ; - RECT -42000.0 374100.0 -43200.0 432300.0 ; - RECT -35400.0 374100.0 -36600.0 432300.0 ; - RECT -45600.0 374100.0 -46800.0 432300.0 ; - RECT -30450.0 376200.0 -31650.0 377400.0 ; - RECT -30450.0 399600.0 -31650.0 400800.0 ; - RECT -30450.0 403800.0 -31650.0 405000.0 ; - RECT -30450.0 427200.0 -31650.0 428400.0 ; - RECT -30600.0 389700.0 -31800.0 390900.0 ; - RECT -30000.0 350100.0 -31200.0 351300.0 ; - RECT -36600.0 350700.0 -35400.0 351900.0 ; - RECT -46800.0 350700.0 -45600.0 351900.0 ; - RECT -33450.0 363000.0 -32250.0 364200.0 ; - RECT -33450.0 354900.0 -32250.0 356100.0 ; - RECT -40200.0 354900.0 -39000.0 356100.0 ; - RECT -8850.0 265050.0 -10050.0 263850.0 ; - RECT -8850.0 224100.0 -10050.0 222900.0 ; - RECT -16200.0 224100.0 -17400.0 222900.0 ; - RECT -16200.0 283950.0 -17400.0 282750.0 ; - RECT -18900.0 185250.0 -20100.0 184050.0 ; - RECT -22950.0 265050.0 -24150.0 263850.0 ; - RECT -25650.0 270450.0 -26850.0 269250.0 ; - RECT -22200.0 307800.0 -23400.0 306600.0 ; - RECT -22200.0 307800.0 -23400.0 306600.0 ; - RECT -22200.0 283950.0 -23400.0 282750.0 ; - RECT -24900.0 310800.0 -26100.0 309600.0 ; - RECT -24900.0 310800.0 -26100.0 309600.0 ; - RECT -24900.0 281250.0 -26100.0 280050.0 ; - RECT -10950.0 283950.0 -12150.0 282750.0 ; - RECT -9000.0 281250.0 -10200.0 280050.0 ; - RECT -7050.0 273150.0 -8250.0 271950.0 ; - RECT -38550.0 283950.0 -39750.0 282750.0 ; - RECT -36600.0 273150.0 -37800.0 271950.0 ; - RECT -34650.0 275850.0 -35850.0 274650.0 ; - RECT -22950.0 302100.0 -24150.0 303300.0 ; - RECT -22200.0 319200.0 -23400.0 320400.0 ; - RECT -36600.0 341700.0 -37800.0 342900.0 ; - RECT -23400.0 321900.0 -24600.0 323100.0 ; - RECT -2400.0 267750.0 -3600.0 266550.0 ; - RECT -16200.0 278550.0 -17400.0 277350.0 ; - RECT -30000.0 267750.0 -31200.0 266550.0 ; - RECT -43800.0 278550.0 -45000.0 277350.0 ; - RECT -3000.0 322050.0 -24000.0 322950.0 ; - RECT -3000.0 341850.0 -37200.0 342750.0 ; - RECT -3000.0 302250.0 -23550.0 303150.0 ; - RECT -3000.0 319350.0 -22800.0 320250.0 ; - RECT -3000.0 282900.0 -52800.0 283800.0 ; - RECT -3000.0 264000.0 -52800.0 264900.0 ; - RECT -3000.0 277500.0 -52800.0 278400.0 ; - RECT -3000.0 266700.0 -52800.0 267600.0 ; - RECT 110700.0 321900.0 109500.0 323100.0 ; - RECT -3300.0 322050.0 -4500.0 323250.0 ; - RECT 108000.0 341700.0 106800.0 342900.0 ; - RECT -3300.0 341850.0 -4500.0 343050.0 ; - RECT 102600.0 302100.0 101400.0 303300.0 ; - RECT -3300.0 302250.0 -4500.0 303450.0 ; - RECT 99900.0 319200.0 98700.0 320400.0 ; - RECT -3300.0 319350.0 -4500.0 320550.0 ; - RECT 105300.0 282750.0 104100.0 283950.0 ; - RECT -3300.0 282900.0 -4500.0 284100.0 ; - RECT 97200.0 263850.0 96000.0 265050.0 ; - RECT -3300.0 264000.0 -4500.0 265200.0 ; - RECT 7350.0 277350.0 6150.0 278550.0 ; - RECT -3300.0 277500.0 -4500.0 278700.0 ; + RECT 188.3 186.4 189.1 197.2 ; + RECT 191.7 196.4 192.5 197.2 ; + RECT 193.5 188.0 194.3 197.2 ; + RECT 189.9 186.4 190.7 197.2 ; + RECT 195.1 186.4 195.9 197.2 ; + RECT 192.7 187.2 194.3 188.0 ; + RECT 193.5 186.4 194.3 187.2 ; + RECT 188.3 207.2 189.1 196.4 ; + RECT 191.7 197.2 192.5 196.4 ; + RECT 193.5 205.6 194.3 196.4 ; + RECT 189.9 207.2 190.7 196.4 ; + RECT 195.1 207.2 195.9 196.4 ; + RECT 192.7 206.4 194.3 205.6 ; + RECT 193.5 207.2 194.3 206.4 ; + RECT 188.3 207.2 189.1 218.0 ; + RECT 191.7 217.2 192.5 218.0 ; + RECT 193.5 208.8 194.3 218.0 ; + RECT 189.9 207.2 190.7 218.0 ; + RECT 195.1 207.2 195.9 218.0 ; + RECT 192.7 208.0 194.3 208.8 ; + RECT 193.5 207.2 194.3 208.0 ; + RECT 188.3 228.0 189.1 217.2 ; + RECT 191.7 218.0 192.5 217.2 ; + RECT 193.5 226.4 194.3 217.2 ; + RECT 189.9 228.0 190.7 217.2 ; + RECT 195.1 228.0 195.9 217.2 ; + RECT 192.7 227.2 194.3 226.4 ; + RECT 193.5 228.0 194.3 227.2 ; + RECT 188.3 228.0 189.1 238.8 ; + RECT 191.7 238.0 192.5 238.8 ; + RECT 193.5 229.6 194.3 238.8 ; + RECT 189.9 228.0 190.7 238.8 ; + RECT 195.1 228.0 195.9 238.8 ; + RECT 192.7 228.8 194.3 229.6 ; + RECT 193.5 228.0 194.3 228.8 ; + RECT 188.3 248.8 189.1 238.0 ; + RECT 191.7 238.8 192.5 238.0 ; + RECT 193.5 247.2 194.3 238.0 ; + RECT 189.9 248.8 190.7 238.0 ; + RECT 195.1 248.8 195.9 238.0 ; + RECT 192.7 248.0 194.3 247.2 ; + RECT 193.5 248.8 194.3 248.0 ; + RECT 188.3 248.8 189.1 259.6 ; + RECT 191.7 258.8 192.5 259.6 ; + RECT 193.5 250.4 194.3 259.6 ; + RECT 189.9 248.8 190.7 259.6 ; + RECT 195.1 248.8 195.9 259.6 ; + RECT 192.7 249.6 194.3 250.4 ; + RECT 193.5 248.8 194.3 249.6 ; + RECT 188.3 269.6 189.1 258.8 ; + RECT 191.7 259.6 192.5 258.8 ; + RECT 193.5 268.0 194.3 258.8 ; + RECT 189.9 269.6 190.7 258.8 ; + RECT 195.1 269.6 195.9 258.8 ; + RECT 192.7 268.8 194.3 268.0 ; + RECT 193.5 269.6 194.3 268.8 ; + RECT 188.3 269.6 189.1 280.4 ; + RECT 191.7 279.6 192.5 280.4 ; + RECT 193.5 271.2 194.3 280.4 ; + RECT 189.9 269.6 190.7 280.4 ; + RECT 195.1 269.6 195.9 280.4 ; + RECT 192.7 270.4 194.3 271.2 ; + RECT 193.5 269.6 194.3 270.4 ; + RECT 188.3 290.4 189.1 279.6 ; + RECT 191.7 280.4 192.5 279.6 ; + RECT 193.5 288.8 194.3 279.6 ; + RECT 189.9 290.4 190.7 279.6 ; + RECT 195.1 290.4 195.9 279.6 ; + RECT 192.7 289.6 194.3 288.8 ; + RECT 193.5 290.4 194.3 289.6 ; + RECT 188.3 290.4 189.1 301.2 ; + RECT 191.7 300.4 192.5 301.2 ; + RECT 193.5 292.0 194.3 301.2 ; + RECT 189.9 290.4 190.7 301.2 ; + RECT 195.1 290.4 195.9 301.2 ; + RECT 192.7 291.2 194.3 292.0 ; + RECT 193.5 290.4 194.3 291.2 ; + RECT 188.3 311.2 189.1 300.4 ; + RECT 191.7 301.2 192.5 300.4 ; + RECT 193.5 309.6 194.3 300.4 ; + RECT 189.9 311.2 190.7 300.4 ; + RECT 195.1 311.2 195.9 300.4 ; + RECT 192.7 310.4 194.3 309.6 ; + RECT 193.5 311.2 194.3 310.4 ; + RECT 188.3 311.2 189.1 322.0 ; + RECT 191.7 321.2 192.5 322.0 ; + RECT 193.5 312.8 194.3 322.0 ; + RECT 189.9 311.2 190.7 322.0 ; + RECT 195.1 311.2 195.9 322.0 ; + RECT 192.7 312.0 194.3 312.8 ; + RECT 193.5 311.2 194.3 312.0 ; + RECT 188.3 332.0 189.1 321.2 ; + RECT 191.7 322.0 192.5 321.2 ; + RECT 193.5 330.4 194.3 321.2 ; + RECT 189.9 332.0 190.7 321.2 ; + RECT 195.1 332.0 195.9 321.2 ; + RECT 192.7 331.2 194.3 330.4 ; + RECT 193.5 332.0 194.3 331.2 ; + RECT 188.3 332.0 189.1 342.8 ; + RECT 191.7 342.0 192.5 342.8 ; + RECT 193.5 333.6 194.3 342.8 ; + RECT 189.9 332.0 190.7 342.8 ; + RECT 195.1 332.0 195.9 342.8 ; + RECT 192.7 332.8 194.3 333.6 ; + RECT 193.5 332.0 194.3 332.8 ; + RECT 188.3 352.8 189.1 342.0 ; + RECT 191.7 342.8 192.5 342.0 ; + RECT 193.5 351.2 194.3 342.0 ; + RECT 189.9 352.8 190.7 342.0 ; + RECT 195.1 352.8 195.9 342.0 ; + RECT 192.7 352.0 194.3 351.2 ; + RECT 193.5 352.8 194.3 352.0 ; + RECT 195.1 186.4 195.9 197.2 ; + RECT 198.5 196.4 199.3 197.2 ; + RECT 200.3 188.0 201.1 197.2 ; + RECT 196.7 186.4 197.5 197.2 ; + RECT 201.9 186.4 202.7 197.2 ; + RECT 199.5 187.2 201.1 188.0 ; + RECT 200.3 186.4 201.1 187.2 ; + RECT 195.1 207.2 195.9 196.4 ; + RECT 198.5 197.2 199.3 196.4 ; + RECT 200.3 205.6 201.1 196.4 ; + RECT 196.7 207.2 197.5 196.4 ; + RECT 201.9 207.2 202.7 196.4 ; + RECT 199.5 206.4 201.1 205.6 ; + RECT 200.3 207.2 201.1 206.4 ; + RECT 195.1 207.2 195.9 218.0 ; + RECT 198.5 217.2 199.3 218.0 ; + RECT 200.3 208.8 201.1 218.0 ; + RECT 196.7 207.2 197.5 218.0 ; + RECT 201.9 207.2 202.7 218.0 ; + RECT 199.5 208.0 201.1 208.8 ; + RECT 200.3 207.2 201.1 208.0 ; + RECT 195.1 228.0 195.9 217.2 ; + RECT 198.5 218.0 199.3 217.2 ; + RECT 200.3 226.4 201.1 217.2 ; + RECT 196.7 228.0 197.5 217.2 ; + RECT 201.9 228.0 202.7 217.2 ; + RECT 199.5 227.2 201.1 226.4 ; + RECT 200.3 228.0 201.1 227.2 ; + RECT 195.1 228.0 195.9 238.8 ; + RECT 198.5 238.0 199.3 238.8 ; + RECT 200.3 229.6 201.1 238.8 ; + RECT 196.7 228.0 197.5 238.8 ; + RECT 201.9 228.0 202.7 238.8 ; + RECT 199.5 228.8 201.1 229.6 ; + RECT 200.3 228.0 201.1 228.8 ; + RECT 195.1 248.8 195.9 238.0 ; + RECT 198.5 238.8 199.3 238.0 ; + RECT 200.3 247.2 201.1 238.0 ; + RECT 196.7 248.8 197.5 238.0 ; + RECT 201.9 248.8 202.7 238.0 ; + RECT 199.5 248.0 201.1 247.2 ; + RECT 200.3 248.8 201.1 248.0 ; + RECT 195.1 248.8 195.9 259.6 ; + RECT 198.5 258.8 199.3 259.6 ; + RECT 200.3 250.4 201.1 259.6 ; + RECT 196.7 248.8 197.5 259.6 ; + RECT 201.9 248.8 202.7 259.6 ; + RECT 199.5 249.6 201.1 250.4 ; + RECT 200.3 248.8 201.1 249.6 ; + RECT 195.1 269.6 195.9 258.8 ; + RECT 198.5 259.6 199.3 258.8 ; + RECT 200.3 268.0 201.1 258.8 ; + RECT 196.7 269.6 197.5 258.8 ; + RECT 201.9 269.6 202.7 258.8 ; + RECT 199.5 268.8 201.1 268.0 ; + RECT 200.3 269.6 201.1 268.8 ; + RECT 195.1 269.6 195.9 280.4 ; + RECT 198.5 279.6 199.3 280.4 ; + RECT 200.3 271.2 201.1 280.4 ; + RECT 196.7 269.6 197.5 280.4 ; + RECT 201.9 269.6 202.7 280.4 ; + RECT 199.5 270.4 201.1 271.2 ; + RECT 200.3 269.6 201.1 270.4 ; + RECT 195.1 290.4 195.9 279.6 ; + RECT 198.5 280.4 199.3 279.6 ; + RECT 200.3 288.8 201.1 279.6 ; + RECT 196.7 290.4 197.5 279.6 ; + RECT 201.9 290.4 202.7 279.6 ; + RECT 199.5 289.6 201.1 288.8 ; + RECT 200.3 290.4 201.1 289.6 ; + RECT 195.1 290.4 195.9 301.2 ; + RECT 198.5 300.4 199.3 301.2 ; + RECT 200.3 292.0 201.1 301.2 ; + RECT 196.7 290.4 197.5 301.2 ; + RECT 201.9 290.4 202.7 301.2 ; + RECT 199.5 291.2 201.1 292.0 ; + RECT 200.3 290.4 201.1 291.2 ; + RECT 195.1 311.2 195.9 300.4 ; + RECT 198.5 301.2 199.3 300.4 ; + RECT 200.3 309.6 201.1 300.4 ; + RECT 196.7 311.2 197.5 300.4 ; + RECT 201.9 311.2 202.7 300.4 ; + RECT 199.5 310.4 201.1 309.6 ; + RECT 200.3 311.2 201.1 310.4 ; + RECT 195.1 311.2 195.9 322.0 ; + RECT 198.5 321.2 199.3 322.0 ; + RECT 200.3 312.8 201.1 322.0 ; + RECT 196.7 311.2 197.5 322.0 ; + RECT 201.9 311.2 202.7 322.0 ; + RECT 199.5 312.0 201.1 312.8 ; + RECT 200.3 311.2 201.1 312.0 ; + RECT 195.1 332.0 195.9 321.2 ; + RECT 198.5 322.0 199.3 321.2 ; + RECT 200.3 330.4 201.1 321.2 ; + RECT 196.7 332.0 197.5 321.2 ; + RECT 201.9 332.0 202.7 321.2 ; + RECT 199.5 331.2 201.1 330.4 ; + RECT 200.3 332.0 201.1 331.2 ; + RECT 195.1 332.0 195.9 342.8 ; + RECT 198.5 342.0 199.3 342.8 ; + RECT 200.3 333.6 201.1 342.8 ; + RECT 196.7 332.0 197.5 342.8 ; + RECT 201.9 332.0 202.7 342.8 ; + RECT 199.5 332.8 201.1 333.6 ; + RECT 200.3 332.0 201.1 332.8 ; + RECT 195.1 352.8 195.9 342.0 ; + RECT 198.5 342.8 199.3 342.0 ; + RECT 200.3 351.2 201.1 342.0 ; + RECT 196.7 352.8 197.5 342.0 ; + RECT 201.9 352.8 202.7 342.0 ; + RECT 199.5 352.0 201.1 351.2 ; + RECT 200.3 352.8 201.1 352.0 ; + RECT 189.9 186.4 190.7 352.8 ; + RECT 193.5 186.4 194.3 352.8 ; + RECT 196.7 186.4 197.5 352.8 ; + RECT 200.3 186.4 201.1 352.8 ; + RECT 198.5 196.4 199.3 197.2 ; + RECT 191.7 217.2 192.5 218.0 ; + RECT 191.7 279.6 192.5 280.4 ; + RECT 191.7 321.2 192.5 322.0 ; + RECT 191.7 321.2 192.5 322.0 ; + RECT 191.7 342.0 192.5 342.8 ; + RECT 198.5 300.4 199.3 301.2 ; + RECT 198.5 300.4 199.3 301.2 ; + RECT 191.7 300.4 192.5 301.2 ; + RECT 191.7 300.4 192.5 301.2 ; + RECT 191.7 238.0 192.5 238.8 ; + RECT 191.7 238.0 192.5 238.8 ; + RECT 198.5 279.6 199.3 280.4 ; + RECT 198.5 258.8 199.3 259.6 ; + RECT 198.5 321.2 199.3 322.0 ; + RECT 198.5 321.2 199.3 322.0 ; + RECT 191.7 258.8 192.5 259.6 ; + RECT 198.5 342.0 199.3 342.8 ; + RECT 198.5 238.0 199.3 238.8 ; + RECT 198.5 238.0 199.3 238.8 ; + RECT 198.5 217.2 199.3 218.0 ; + RECT 191.7 196.4 192.5 197.2 ; + RECT 188.3 300.4 189.1 311.2 ; + RECT 201.9 217.2 202.7 228.0 ; + RECT 195.1 217.2 195.9 228.0 ; + RECT 195.1 217.2 195.9 228.0 ; + RECT 201.9 186.4 202.7 197.2 ; + RECT 188.3 248.8 189.1 259.6 ; + RECT 195.1 300.4 195.9 311.2 ; + RECT 195.1 300.4 195.9 311.2 ; + RECT 195.1 342.0 195.9 352.8 ; + RECT 195.1 342.0 195.9 352.8 ; + RECT 201.9 279.6 202.7 290.4 ; + RECT 195.1 290.4 195.9 301.2 ; + RECT 195.1 290.4 195.9 301.2 ; + RECT 195.1 196.4 195.9 207.2 ; + RECT 195.1 196.4 195.9 207.2 ; + RECT 195.1 238.0 195.9 248.8 ; + RECT 201.9 228.0 202.7 238.8 ; + RECT 195.1 238.0 195.9 248.8 ; + RECT 195.1 269.6 195.9 280.4 ; + RECT 195.1 269.6 195.9 280.4 ; + RECT 195.1 279.6 195.9 290.4 ; + RECT 195.1 279.6 195.9 290.4 ; + RECT 188.3 321.2 189.1 332.0 ; + RECT 188.3 332.0 189.1 342.8 ; + RECT 201.9 196.4 202.7 207.2 ; + RECT 188.3 228.0 189.1 238.8 ; + RECT 188.3 196.4 189.1 207.2 ; + RECT 195.1 248.8 195.9 259.6 ; + RECT 201.9 238.0 202.7 248.8 ; + RECT 195.1 248.8 195.9 259.6 ; + RECT 188.3 311.2 189.1 322.0 ; + RECT 195.1 311.2 195.9 322.0 ; + RECT 195.1 311.2 195.9 322.0 ; + RECT 201.9 332.0 202.7 342.8 ; + RECT 201.9 342.0 202.7 352.8 ; + RECT 188.3 217.2 189.1 228.0 ; + RECT 195.1 258.8 195.9 269.6 ; + RECT 188.3 207.2 189.1 218.0 ; + RECT 201.9 248.8 202.7 259.6 ; + RECT 195.1 258.8 195.9 269.6 ; + RECT 188.3 238.0 189.1 248.8 ; + RECT 201.9 311.2 202.7 322.0 ; + RECT 188.3 258.8 189.1 269.6 ; + RECT 195.1 186.4 195.9 197.2 ; + RECT 195.1 186.4 195.9 197.2 ; + RECT 188.3 269.6 189.1 280.4 ; + RECT 201.9 207.2 202.7 218.0 ; + RECT 188.3 342.0 189.1 352.8 ; + RECT 201.9 258.8 202.7 269.6 ; + RECT 195.1 332.0 195.9 342.8 ; + RECT 195.1 321.2 195.9 332.0 ; + RECT 195.1 228.0 195.9 238.8 ; + RECT 195.1 228.0 195.9 238.8 ; + RECT 188.3 279.6 189.1 290.4 ; + RECT 188.3 290.4 189.1 301.2 ; + RECT 195.1 321.2 195.9 332.0 ; + RECT 195.1 207.2 195.9 218.0 ; + RECT 195.1 207.2 195.9 218.0 ; + RECT 201.9 321.2 202.7 332.0 ; + RECT 201.9 290.4 202.7 301.2 ; + RECT 201.9 300.4 202.7 311.2 ; + RECT 195.1 332.0 195.9 342.8 ; + RECT 201.9 269.6 202.7 280.4 ; + RECT 188.3 186.4 189.1 197.2 ; + RECT 188.3 165.6 189.1 176.4 ; + RECT 181.5 165.6 182.3 176.4 ; + RECT 184.9 175.6 185.7 176.4 ; + RECT 186.7 165.6 187.5 176.4 ; + RECT 183.1 165.6 183.9 176.4 ; + RECT 181.5 186.4 182.3 175.6 ; + RECT 184.9 176.4 185.7 175.6 ; + RECT 186.7 184.8 187.5 175.6 ; + RECT 183.1 186.4 183.9 175.6 ; + RECT 188.3 186.4 189.1 175.6 ; + RECT 185.9 185.6 187.5 184.8 ; + RECT 186.7 186.4 187.5 185.6 ; + RECT 181.5 186.4 182.3 197.2 ; + RECT 184.9 196.4 185.7 197.2 ; + RECT 186.7 188.0 187.5 197.2 ; + RECT 183.1 186.4 183.9 197.2 ; + RECT 188.3 186.4 189.1 197.2 ; + RECT 185.9 187.2 187.5 188.0 ; + RECT 186.7 186.4 187.5 187.2 ; + RECT 181.5 207.2 182.3 196.4 ; + RECT 184.9 197.2 185.7 196.4 ; + RECT 186.7 205.6 187.5 196.4 ; + RECT 183.1 207.2 183.9 196.4 ; + RECT 188.3 207.2 189.1 196.4 ; + RECT 185.9 206.4 187.5 205.6 ; + RECT 186.7 207.2 187.5 206.4 ; + RECT 181.5 207.2 182.3 218.0 ; + RECT 184.9 217.2 185.7 218.0 ; + RECT 186.7 208.8 187.5 218.0 ; + RECT 183.1 207.2 183.9 218.0 ; + RECT 188.3 207.2 189.1 218.0 ; + RECT 185.9 208.0 187.5 208.8 ; + RECT 186.7 207.2 187.5 208.0 ; + RECT 181.5 228.0 182.3 217.2 ; + RECT 184.9 218.0 185.7 217.2 ; + RECT 186.7 226.4 187.5 217.2 ; + RECT 183.1 228.0 183.9 217.2 ; + RECT 188.3 228.0 189.1 217.2 ; + RECT 185.9 227.2 187.5 226.4 ; + RECT 186.7 228.0 187.5 227.2 ; + RECT 181.5 228.0 182.3 238.8 ; + RECT 184.9 238.0 185.7 238.8 ; + RECT 186.7 229.6 187.5 238.8 ; + RECT 183.1 228.0 183.9 238.8 ; + RECT 188.3 228.0 189.1 238.8 ; + RECT 185.9 228.8 187.5 229.6 ; + RECT 186.7 228.0 187.5 228.8 ; + RECT 181.5 248.8 182.3 238.0 ; + RECT 184.9 238.8 185.7 238.0 ; + RECT 186.7 247.2 187.5 238.0 ; + RECT 183.1 248.8 183.9 238.0 ; + RECT 188.3 248.8 189.1 238.0 ; + RECT 185.9 248.0 187.5 247.2 ; + RECT 186.7 248.8 187.5 248.0 ; + RECT 181.5 248.8 182.3 259.6 ; + RECT 184.9 258.8 185.7 259.6 ; + RECT 186.7 250.4 187.5 259.6 ; + RECT 183.1 248.8 183.9 259.6 ; + RECT 188.3 248.8 189.1 259.6 ; + RECT 185.9 249.6 187.5 250.4 ; + RECT 186.7 248.8 187.5 249.6 ; + RECT 181.5 269.6 182.3 258.8 ; + RECT 184.9 259.6 185.7 258.8 ; + RECT 186.7 268.0 187.5 258.8 ; + RECT 183.1 269.6 183.9 258.8 ; + RECT 188.3 269.6 189.1 258.8 ; + RECT 185.9 268.8 187.5 268.0 ; + RECT 186.7 269.6 187.5 268.8 ; + RECT 181.5 269.6 182.3 280.4 ; + RECT 184.9 279.6 185.7 280.4 ; + RECT 186.7 271.2 187.5 280.4 ; + RECT 183.1 269.6 183.9 280.4 ; + RECT 188.3 269.6 189.1 280.4 ; + RECT 185.9 270.4 187.5 271.2 ; + RECT 186.7 269.6 187.5 270.4 ; + RECT 181.5 290.4 182.3 279.6 ; + RECT 184.9 280.4 185.7 279.6 ; + RECT 186.7 288.8 187.5 279.6 ; + RECT 183.1 290.4 183.9 279.6 ; + RECT 188.3 290.4 189.1 279.6 ; + RECT 185.9 289.6 187.5 288.8 ; + RECT 186.7 290.4 187.5 289.6 ; + RECT 181.5 290.4 182.3 301.2 ; + RECT 184.9 300.4 185.7 301.2 ; + RECT 186.7 292.0 187.5 301.2 ; + RECT 183.1 290.4 183.9 301.2 ; + RECT 188.3 290.4 189.1 301.2 ; + RECT 185.9 291.2 187.5 292.0 ; + RECT 186.7 290.4 187.5 291.2 ; + RECT 181.5 311.2 182.3 300.4 ; + RECT 184.9 301.2 185.7 300.4 ; + RECT 186.7 309.6 187.5 300.4 ; + RECT 183.1 311.2 183.9 300.4 ; + RECT 188.3 311.2 189.1 300.4 ; + RECT 185.9 310.4 187.5 309.6 ; + RECT 186.7 311.2 187.5 310.4 ; + RECT 181.5 311.2 182.3 322.0 ; + RECT 184.9 321.2 185.7 322.0 ; + RECT 186.7 312.8 187.5 322.0 ; + RECT 183.1 311.2 183.9 322.0 ; + RECT 188.3 311.2 189.1 322.0 ; + RECT 185.9 312.0 187.5 312.8 ; + RECT 186.7 311.2 187.5 312.0 ; + RECT 181.5 332.0 182.3 321.2 ; + RECT 184.9 322.0 185.7 321.2 ; + RECT 186.7 330.4 187.5 321.2 ; + RECT 183.1 332.0 183.9 321.2 ; + RECT 188.3 332.0 189.1 321.2 ; + RECT 185.9 331.2 187.5 330.4 ; + RECT 186.7 332.0 187.5 331.2 ; + RECT 181.5 332.0 182.3 342.8 ; + RECT 184.9 342.0 185.7 342.8 ; + RECT 186.7 333.6 187.5 342.8 ; + RECT 183.1 332.0 183.9 342.8 ; + RECT 188.3 332.0 189.1 342.8 ; + RECT 185.9 332.8 187.5 333.6 ; + RECT 186.7 332.0 187.5 332.8 ; + RECT 181.5 352.8 182.3 342.0 ; + RECT 184.9 342.8 185.7 342.0 ; + RECT 186.7 351.2 187.5 342.0 ; + RECT 183.1 352.8 183.9 342.0 ; + RECT 188.3 352.8 189.1 342.0 ; + RECT 185.9 352.0 187.5 351.2 ; + RECT 186.7 352.8 187.5 352.0 ; + RECT 188.3 352.8 189.1 363.6 ; + RECT 181.5 352.8 182.3 363.6 ; + RECT 184.9 362.8 185.7 363.6 ; + RECT 186.7 352.8 187.5 363.6 ; + RECT 183.1 352.8 183.9 363.6 ; + RECT 183.1 165.6 183.9 363.2 ; + RECT 186.7 165.6 187.5 363.2 ; + RECT 184.9 279.6 185.7 280.4 ; + RECT 184.9 279.6 185.7 280.4 ; + RECT 184.9 217.2 185.7 218.0 ; + RECT 184.9 217.2 185.7 218.0 ; + RECT 184.9 342.0 185.7 342.8 ; + RECT 184.9 300.4 185.7 301.2 ; + RECT 184.9 300.4 185.7 301.2 ; + RECT 184.9 175.6 185.7 176.4 ; + RECT 184.9 196.4 185.7 197.2 ; + RECT 184.9 321.2 185.7 322.0 ; + RECT 184.9 238.0 185.7 238.8 ; + RECT 184.9 258.8 185.7 259.6 ; + RECT 181.5 279.6 182.3 290.4 ; + RECT 181.5 332.0 182.3 342.8 ; + RECT 188.3 196.4 189.1 207.2 ; + RECT 181.5 228.0 182.3 238.8 ; + RECT 188.3 279.6 189.1 290.4 ; + RECT 188.3 321.2 189.1 332.0 ; + RECT 188.3 269.6 189.1 280.4 ; + RECT 188.3 175.6 189.1 186.4 ; + RECT 188.3 217.2 189.1 228.0 ; + RECT 188.3 248.8 189.1 259.6 ; + RECT 181.5 300.4 182.3 311.2 ; + RECT 188.3 258.8 189.1 269.6 ; + RECT 181.5 311.2 182.3 322.0 ; + RECT 181.5 207.2 182.3 218.0 ; + RECT 181.5 175.6 182.3 186.4 ; + RECT 188.3 228.0 189.1 238.8 ; + RECT 181.5 342.0 182.3 352.8 ; + RECT 181.5 290.4 182.3 301.2 ; + RECT 188.3 290.4 189.1 301.2 ; + RECT 188.3 342.0 189.1 352.8 ; + RECT 181.5 196.4 182.3 207.2 ; + RECT 188.3 238.0 189.1 248.8 ; + RECT 181.5 186.4 182.3 197.2 ; + RECT 188.3 332.0 189.1 342.8 ; + RECT 181.5 217.2 182.3 228.0 ; + RECT 181.5 238.0 182.3 248.8 ; + RECT 181.5 248.8 182.3 259.6 ; + RECT 181.5 321.2 182.3 332.0 ; + RECT 188.3 300.4 189.1 311.2 ; + RECT 188.3 207.2 189.1 218.0 ; + RECT 181.5 258.8 182.3 269.6 ; + RECT 181.5 269.6 182.3 280.4 ; + RECT 188.3 186.4 189.1 197.2 ; + RECT 188.3 311.2 189.1 322.0 ; + RECT 195.1 186.4 195.9 175.6 ; + RECT 188.3 186.4 189.1 175.6 ; + RECT 191.7 176.4 192.5 175.6 ; + RECT 193.5 186.4 194.3 175.6 ; + RECT 189.9 186.4 190.7 175.6 ; + RECT 201.9 186.4 202.7 175.6 ; + RECT 195.1 186.4 195.9 175.6 ; + RECT 198.5 176.4 199.3 175.6 ; + RECT 200.3 186.4 201.1 175.6 ; + RECT 196.7 186.4 197.5 175.6 ; + RECT 191.7 176.4 192.5 175.6 ; + RECT 198.5 176.4 199.3 175.6 ; + RECT 195.1 186.4 195.9 175.6 ; + RECT 201.9 186.4 202.7 175.6 ; + RECT 195.1 186.4 195.9 175.6 ; + RECT 188.3 186.4 189.1 175.6 ; + RECT 195.1 165.6 195.9 176.4 ; + RECT 188.3 165.6 189.1 176.4 ; + RECT 191.7 175.6 192.5 176.4 ; + RECT 193.5 165.6 194.3 176.4 ; + RECT 189.9 165.6 190.7 176.4 ; + RECT 201.9 165.6 202.7 176.4 ; + RECT 195.1 165.6 195.9 176.4 ; + RECT 198.5 175.6 199.3 176.4 ; + RECT 200.3 165.6 201.1 176.4 ; + RECT 196.7 165.6 197.5 176.4 ; + RECT 191.7 175.6 192.5 176.4 ; + RECT 198.5 175.6 199.3 176.4 ; + RECT 195.1 165.6 195.9 176.4 ; + RECT 201.9 165.6 202.7 176.4 ; + RECT 195.1 165.6 195.9 176.4 ; + RECT 188.3 165.6 189.1 176.4 ; + RECT 195.1 352.8 195.9 363.6 ; + RECT 188.3 352.8 189.1 363.6 ; + RECT 191.7 362.8 192.5 363.6 ; + RECT 193.5 352.8 194.3 363.6 ; + RECT 189.9 352.8 190.7 363.6 ; + RECT 201.9 352.8 202.7 363.6 ; + RECT 195.1 352.8 195.9 363.6 ; + RECT 198.5 362.8 199.3 363.6 ; + RECT 200.3 352.8 201.1 363.6 ; + RECT 196.7 352.8 197.5 363.6 ; + RECT 191.7 362.8 192.5 363.6 ; + RECT 198.5 362.8 199.3 363.6 ; + RECT 195.1 352.8 195.9 363.6 ; + RECT 201.9 352.8 202.7 363.6 ; + RECT 195.1 352.8 195.9 363.6 ; + RECT 188.3 352.8 189.1 363.6 ; + RECT 181.5 165.6 182.3 176.4 ; + RECT 174.7 165.6 175.5 176.4 ; + RECT 178.1 175.6 178.9 176.4 ; + RECT 179.9 165.6 180.7 176.4 ; + RECT 176.3 165.6 177.1 176.4 ; + RECT 181.5 186.4 182.3 175.6 ; + RECT 174.7 186.4 175.5 175.6 ; + RECT 178.1 176.4 178.9 175.6 ; + RECT 179.9 186.4 180.7 175.6 ; + RECT 176.3 186.4 177.1 175.6 ; + RECT 181.5 186.4 182.3 197.2 ; + RECT 174.7 186.4 175.5 197.2 ; + RECT 178.1 196.4 178.9 197.2 ; + RECT 179.9 186.4 180.7 197.2 ; + RECT 176.3 186.4 177.1 197.2 ; + RECT 181.5 207.2 182.3 196.4 ; + RECT 174.7 207.2 175.5 196.4 ; + RECT 178.1 197.2 178.9 196.4 ; + RECT 179.9 207.2 180.7 196.4 ; + RECT 176.3 207.2 177.1 196.4 ; + RECT 181.5 207.2 182.3 218.0 ; + RECT 174.7 207.2 175.5 218.0 ; + RECT 178.1 217.2 178.9 218.0 ; + RECT 179.9 207.2 180.7 218.0 ; + RECT 176.3 207.2 177.1 218.0 ; + RECT 181.5 228.0 182.3 217.2 ; + RECT 174.7 228.0 175.5 217.2 ; + RECT 178.1 218.0 178.9 217.2 ; + RECT 179.9 228.0 180.7 217.2 ; + RECT 176.3 228.0 177.1 217.2 ; + RECT 181.5 228.0 182.3 238.8 ; + RECT 174.7 228.0 175.5 238.8 ; + RECT 178.1 238.0 178.9 238.8 ; + RECT 179.9 228.0 180.7 238.8 ; + RECT 176.3 228.0 177.1 238.8 ; + RECT 181.5 248.8 182.3 238.0 ; + RECT 174.7 248.8 175.5 238.0 ; + RECT 178.1 238.8 178.9 238.0 ; + RECT 179.9 248.8 180.7 238.0 ; + RECT 176.3 248.8 177.1 238.0 ; + RECT 181.5 248.8 182.3 259.6 ; + RECT 174.7 248.8 175.5 259.6 ; + RECT 178.1 258.8 178.9 259.6 ; + RECT 179.9 248.8 180.7 259.6 ; + RECT 176.3 248.8 177.1 259.6 ; + RECT 181.5 269.6 182.3 258.8 ; + RECT 174.7 269.6 175.5 258.8 ; + RECT 178.1 259.6 178.9 258.8 ; + RECT 179.9 269.6 180.7 258.8 ; + RECT 176.3 269.6 177.1 258.8 ; + RECT 181.5 269.6 182.3 280.4 ; + RECT 174.7 269.6 175.5 280.4 ; + RECT 178.1 279.6 178.9 280.4 ; + RECT 179.9 269.6 180.7 280.4 ; + RECT 176.3 269.6 177.1 280.4 ; + RECT 181.5 290.4 182.3 279.6 ; + RECT 174.7 290.4 175.5 279.6 ; + RECT 178.1 280.4 178.9 279.6 ; + RECT 179.9 290.4 180.7 279.6 ; + RECT 176.3 290.4 177.1 279.6 ; + RECT 181.5 290.4 182.3 301.2 ; + RECT 174.7 290.4 175.5 301.2 ; + RECT 178.1 300.4 178.9 301.2 ; + RECT 179.9 290.4 180.7 301.2 ; + RECT 176.3 290.4 177.1 301.2 ; + RECT 181.5 311.2 182.3 300.4 ; + RECT 174.7 311.2 175.5 300.4 ; + RECT 178.1 301.2 178.9 300.4 ; + RECT 179.9 311.2 180.7 300.4 ; + RECT 176.3 311.2 177.1 300.4 ; + RECT 181.5 311.2 182.3 322.0 ; + RECT 174.7 311.2 175.5 322.0 ; + RECT 178.1 321.2 178.9 322.0 ; + RECT 179.9 311.2 180.7 322.0 ; + RECT 176.3 311.2 177.1 322.0 ; + RECT 181.5 332.0 182.3 321.2 ; + RECT 174.7 332.0 175.5 321.2 ; + RECT 178.1 322.0 178.9 321.2 ; + RECT 179.9 332.0 180.7 321.2 ; + RECT 176.3 332.0 177.1 321.2 ; + RECT 181.5 332.0 182.3 342.8 ; + RECT 174.7 332.0 175.5 342.8 ; + RECT 178.1 342.0 178.9 342.8 ; + RECT 179.9 332.0 180.7 342.8 ; + RECT 176.3 332.0 177.1 342.8 ; + RECT 181.5 352.8 182.3 342.0 ; + RECT 174.7 352.8 175.5 342.0 ; + RECT 178.1 342.8 178.9 342.0 ; + RECT 179.9 352.8 180.7 342.0 ; + RECT 176.3 352.8 177.1 342.0 ; + RECT 181.5 352.8 182.3 363.6 ; + RECT 174.7 352.8 175.5 363.6 ; + RECT 178.1 362.8 178.9 363.6 ; + RECT 179.9 352.8 180.7 363.6 ; + RECT 176.3 352.8 177.1 363.6 ; + RECT 178.1 279.6 178.9 280.4 ; + RECT 178.1 279.6 178.9 280.4 ; + RECT 178.1 217.2 178.9 218.0 ; + RECT 178.1 217.2 178.9 218.0 ; + RECT 178.1 342.0 178.9 342.8 ; + RECT 178.1 300.4 178.9 301.2 ; + RECT 178.1 300.4 178.9 301.2 ; + RECT 178.1 362.8 178.9 363.6 ; + RECT 178.1 175.6 178.9 176.4 ; + RECT 178.1 196.4 178.9 197.2 ; + RECT 178.1 321.2 178.9 322.0 ; + RECT 178.1 238.0 178.9 238.8 ; + RECT 178.1 258.8 178.9 259.6 ; + RECT 174.7 279.6 175.5 290.4 ; + RECT 174.7 332.0 175.5 342.8 ; + RECT 181.5 196.4 182.3 207.2 ; + RECT 174.7 228.0 175.5 238.8 ; + RECT 181.5 279.6 182.3 290.4 ; + RECT 181.5 321.2 182.3 332.0 ; + RECT 181.5 269.6 182.3 280.4 ; + RECT 181.5 175.6 182.3 186.4 ; + RECT 181.5 217.2 182.3 228.0 ; + RECT 181.5 248.8 182.3 259.6 ; + RECT 174.7 300.4 175.5 311.2 ; + RECT 181.5 258.8 182.3 269.6 ; + RECT 174.7 311.2 175.5 322.0 ; + RECT 174.7 207.2 175.5 218.0 ; + RECT 174.7 175.6 175.5 186.4 ; + RECT 181.5 228.0 182.3 238.8 ; + RECT 174.7 342.0 175.5 352.8 ; + RECT 174.7 352.8 175.5 363.6 ; + RECT 174.7 290.4 175.5 301.2 ; + RECT 181.5 290.4 182.3 301.2 ; + RECT 181.5 342.0 182.3 352.8 ; + RECT 174.7 196.4 175.5 207.2 ; + RECT 181.5 238.0 182.3 248.8 ; + RECT 174.7 186.4 175.5 197.2 ; + RECT 181.5 332.0 182.3 342.8 ; + RECT 181.5 352.8 182.3 363.6 ; + RECT 174.7 217.2 175.5 228.0 ; + RECT 174.7 238.0 175.5 248.8 ; + RECT 181.5 165.6 182.3 176.4 ; + RECT 174.7 248.8 175.5 259.6 ; + RECT 174.7 321.2 175.5 332.0 ; + RECT 181.5 300.4 182.3 311.2 ; + RECT 181.5 207.2 182.3 218.0 ; + RECT 174.7 258.8 175.5 269.6 ; + RECT 174.7 269.6 175.5 280.4 ; + RECT 181.5 186.4 182.3 197.2 ; + RECT 181.5 311.2 182.3 322.0 ; + RECT 174.7 165.6 175.5 176.4 ; + RECT 208.7 165.6 209.5 176.4 ; + RECT 201.9 165.6 202.7 176.4 ; + RECT 205.3 175.6 206.1 176.4 ; + RECT 207.1 165.6 207.9 176.4 ; + RECT 203.5 165.6 204.3 176.4 ; + RECT 208.7 186.4 209.5 175.6 ; + RECT 201.9 186.4 202.7 175.6 ; + RECT 205.3 176.4 206.1 175.6 ; + RECT 207.1 186.4 207.9 175.6 ; + RECT 203.5 186.4 204.3 175.6 ; + RECT 208.7 186.4 209.5 197.2 ; + RECT 201.9 186.4 202.7 197.2 ; + RECT 205.3 196.4 206.1 197.2 ; + RECT 207.1 186.4 207.9 197.2 ; + RECT 203.5 186.4 204.3 197.2 ; + RECT 208.7 207.2 209.5 196.4 ; + RECT 201.9 207.2 202.7 196.4 ; + RECT 205.3 197.2 206.1 196.4 ; + RECT 207.1 207.2 207.9 196.4 ; + RECT 203.5 207.2 204.3 196.4 ; + RECT 208.7 207.2 209.5 218.0 ; + RECT 201.9 207.2 202.7 218.0 ; + RECT 205.3 217.2 206.1 218.0 ; + RECT 207.1 207.2 207.9 218.0 ; + RECT 203.5 207.2 204.3 218.0 ; + RECT 208.7 228.0 209.5 217.2 ; + RECT 201.9 228.0 202.7 217.2 ; + RECT 205.3 218.0 206.1 217.2 ; + RECT 207.1 228.0 207.9 217.2 ; + RECT 203.5 228.0 204.3 217.2 ; + RECT 208.7 228.0 209.5 238.8 ; + RECT 201.9 228.0 202.7 238.8 ; + RECT 205.3 238.0 206.1 238.8 ; + RECT 207.1 228.0 207.9 238.8 ; + RECT 203.5 228.0 204.3 238.8 ; + RECT 208.7 248.8 209.5 238.0 ; + RECT 201.9 248.8 202.7 238.0 ; + RECT 205.3 238.8 206.1 238.0 ; + RECT 207.1 248.8 207.9 238.0 ; + RECT 203.5 248.8 204.3 238.0 ; + RECT 208.7 248.8 209.5 259.6 ; + RECT 201.9 248.8 202.7 259.6 ; + RECT 205.3 258.8 206.1 259.6 ; + RECT 207.1 248.8 207.9 259.6 ; + RECT 203.5 248.8 204.3 259.6 ; + RECT 208.7 269.6 209.5 258.8 ; + RECT 201.9 269.6 202.7 258.8 ; + RECT 205.3 259.6 206.1 258.8 ; + RECT 207.1 269.6 207.9 258.8 ; + RECT 203.5 269.6 204.3 258.8 ; + RECT 208.7 269.6 209.5 280.4 ; + RECT 201.9 269.6 202.7 280.4 ; + RECT 205.3 279.6 206.1 280.4 ; + RECT 207.1 269.6 207.9 280.4 ; + RECT 203.5 269.6 204.3 280.4 ; + RECT 208.7 290.4 209.5 279.6 ; + RECT 201.9 290.4 202.7 279.6 ; + RECT 205.3 280.4 206.1 279.6 ; + RECT 207.1 290.4 207.9 279.6 ; + RECT 203.5 290.4 204.3 279.6 ; + RECT 208.7 290.4 209.5 301.2 ; + RECT 201.9 290.4 202.7 301.2 ; + RECT 205.3 300.4 206.1 301.2 ; + RECT 207.1 290.4 207.9 301.2 ; + RECT 203.5 290.4 204.3 301.2 ; + RECT 208.7 311.2 209.5 300.4 ; + RECT 201.9 311.2 202.7 300.4 ; + RECT 205.3 301.2 206.1 300.4 ; + RECT 207.1 311.2 207.9 300.4 ; + RECT 203.5 311.2 204.3 300.4 ; + RECT 208.7 311.2 209.5 322.0 ; + RECT 201.9 311.2 202.7 322.0 ; + RECT 205.3 321.2 206.1 322.0 ; + RECT 207.1 311.2 207.9 322.0 ; + RECT 203.5 311.2 204.3 322.0 ; + RECT 208.7 332.0 209.5 321.2 ; + RECT 201.9 332.0 202.7 321.2 ; + RECT 205.3 322.0 206.1 321.2 ; + RECT 207.1 332.0 207.9 321.2 ; + RECT 203.5 332.0 204.3 321.2 ; + RECT 208.7 332.0 209.5 342.8 ; + RECT 201.9 332.0 202.7 342.8 ; + RECT 205.3 342.0 206.1 342.8 ; + RECT 207.1 332.0 207.9 342.8 ; + RECT 203.5 332.0 204.3 342.8 ; + RECT 208.7 352.8 209.5 342.0 ; + RECT 201.9 352.8 202.7 342.0 ; + RECT 205.3 342.8 206.1 342.0 ; + RECT 207.1 352.8 207.9 342.0 ; + RECT 203.5 352.8 204.3 342.0 ; + RECT 208.7 352.8 209.5 363.6 ; + RECT 201.9 352.8 202.7 363.6 ; + RECT 205.3 362.8 206.1 363.6 ; + RECT 207.1 352.8 207.9 363.6 ; + RECT 203.5 352.8 204.3 363.6 ; + RECT 205.3 279.6 206.1 280.4 ; + RECT 205.3 279.6 206.1 280.4 ; + RECT 205.3 217.2 206.1 218.0 ; + RECT 205.3 217.2 206.1 218.0 ; + RECT 205.3 342.0 206.1 342.8 ; + RECT 205.3 300.4 206.1 301.2 ; + RECT 205.3 300.4 206.1 301.2 ; + RECT 205.3 362.8 206.1 363.6 ; + RECT 205.3 175.6 206.1 176.4 ; + RECT 205.3 196.4 206.1 197.2 ; + RECT 205.3 321.2 206.1 322.0 ; + RECT 205.3 238.0 206.1 238.8 ; + RECT 205.3 258.8 206.1 259.6 ; + RECT 201.9 279.6 202.7 290.4 ; + RECT 201.9 332.0 202.7 342.8 ; + RECT 208.7 196.4 209.5 207.2 ; + RECT 201.9 228.0 202.7 238.8 ; + RECT 208.7 279.6 209.5 290.4 ; + RECT 208.7 321.2 209.5 332.0 ; + RECT 208.7 269.6 209.5 280.4 ; + RECT 208.7 175.6 209.5 186.4 ; + RECT 208.7 217.2 209.5 228.0 ; + RECT 208.7 248.8 209.5 259.6 ; + RECT 201.9 300.4 202.7 311.2 ; + RECT 208.7 258.8 209.5 269.6 ; + RECT 201.9 311.2 202.7 322.0 ; + RECT 201.9 207.2 202.7 218.0 ; + RECT 201.9 175.6 202.7 186.4 ; + RECT 208.7 228.0 209.5 238.8 ; + RECT 201.9 342.0 202.7 352.8 ; + RECT 201.9 352.8 202.7 363.6 ; + RECT 201.9 290.4 202.7 301.2 ; + RECT 208.7 290.4 209.5 301.2 ; + RECT 208.7 342.0 209.5 352.8 ; + RECT 201.9 196.4 202.7 207.2 ; + RECT 208.7 238.0 209.5 248.8 ; + RECT 201.9 186.4 202.7 197.2 ; + RECT 208.7 332.0 209.5 342.8 ; + RECT 208.7 352.8 209.5 363.6 ; + RECT 201.9 217.2 202.7 228.0 ; + RECT 201.9 238.0 202.7 248.8 ; + RECT 208.7 165.6 209.5 176.4 ; + RECT 201.9 248.8 202.7 259.6 ; + RECT 201.9 321.2 202.7 332.0 ; + RECT 208.7 300.4 209.5 311.2 ; + RECT 208.7 207.2 209.5 218.0 ; + RECT 201.9 258.8 202.7 269.6 ; + RECT 201.9 269.6 202.7 280.4 ; + RECT 208.7 186.4 209.5 197.2 ; + RECT 208.7 311.2 209.5 322.0 ; + RECT 201.9 165.6 202.7 176.4 ; + RECT 183.1 165.6 183.9 363.2 ; + RECT 186.7 165.6 187.5 363.2 ; + RECT 189.9 165.6 190.7 363.2 ; + RECT 193.5 165.6 194.3 363.2 ; + RECT 196.7 165.6 197.5 363.2 ; + RECT 200.3 165.6 201.1 363.2 ; + RECT 184.9 321.2 185.7 322.0 ; + RECT 184.9 279.6 185.7 280.4 ; + RECT 184.9 196.4 185.7 197.2 ; + RECT 184.9 300.4 185.7 301.2 ; + RECT 184.9 258.8 185.7 259.6 ; + RECT 184.9 238.0 185.7 238.8 ; + RECT 184.9 342.0 185.7 342.8 ; + RECT 184.9 175.6 185.7 176.4 ; + RECT 184.9 217.2 185.7 218.0 ; + RECT 188.3 311.2 189.1 322.0 ; + RECT 181.5 207.2 182.3 218.0 ; + RECT 181.5 342.0 182.3 352.8 ; + RECT 188.3 238.0 189.1 248.8 ; + RECT 181.5 238.0 182.3 248.8 ; + RECT 188.3 228.0 189.1 238.8 ; + RECT 188.3 175.6 189.1 186.4 ; + RECT 188.3 207.2 189.1 218.0 ; + RECT 188.3 186.4 189.1 197.2 ; + RECT 188.3 258.8 189.1 269.6 ; + RECT 181.5 269.6 182.3 280.4 ; + RECT 188.3 300.4 189.1 311.2 ; + RECT 188.3 279.6 189.1 290.4 ; + RECT 188.3 269.6 189.1 280.4 ; + RECT 181.5 258.8 182.3 269.6 ; + RECT 188.3 196.4 189.1 207.2 ; + RECT 188.3 248.8 189.1 259.6 ; + RECT 181.5 186.4 182.3 197.2 ; + RECT 188.3 290.4 189.1 301.2 ; + RECT 181.5 279.6 182.3 290.4 ; + RECT 181.5 228.0 182.3 238.8 ; + RECT 188.3 321.2 189.1 332.0 ; + RECT 181.5 321.2 182.3 332.0 ; + RECT 181.5 290.4 182.3 301.2 ; + RECT 181.5 311.2 182.3 322.0 ; + RECT 181.5 175.6 182.3 186.4 ; + RECT 188.3 332.0 189.1 342.8 ; + RECT 181.5 332.0 182.3 342.8 ; + RECT 181.5 300.4 182.3 311.2 ; + RECT 181.5 196.4 182.3 207.2 ; + RECT 188.3 342.0 189.1 352.8 ; + RECT 188.3 217.2 189.1 228.0 ; + RECT 181.5 217.2 182.3 228.0 ; + RECT 181.5 248.8 182.3 259.6 ; + RECT 183.0 149.4 183.6 161.4 ; + RECT 187.0 149.4 187.6 161.4 ; + RECT 189.8 149.4 190.4 161.4 ; + RECT 193.8 149.4 194.4 161.4 ; + RECT 196.6 149.4 197.2 161.4 ; + RECT 200.6 149.4 201.2 161.4 ; + RECT 183.0 149.4 183.6 161.4 ; + RECT 187.0 149.4 187.6 161.4 ; + RECT 189.8 149.4 190.4 161.4 ; + RECT 193.8 149.4 194.4 161.4 ; + RECT 196.6 149.4 197.2 161.4 ; + RECT 200.6 149.4 201.2 161.4 ; + RECT 194.1 125.0 194.9 126.6 ; + RECT 192.7 121.4 193.9 122.2 ; + RECT 190.7 121.4 192.1 122.2 ; + RECT 190.7 122.2 191.5 145.2 ; + RECT 192.7 122.2 193.5 145.2 ; + RECT 195.1 138.4 195.9 140.0 ; + RECT 190.7 112.6 191.5 121.4 ; + RECT 192.7 112.6 193.5 121.4 ; + RECT 189.3 112.6 190.1 115.6 ; + RECT 200.9 125.0 201.7 126.6 ; + RECT 199.5 121.4 200.7 122.2 ; + RECT 197.5 121.4 198.9 122.2 ; + RECT 197.5 122.2 198.3 145.2 ; + RECT 199.5 122.2 200.3 145.2 ; + RECT 201.9 138.4 202.7 140.0 ; + RECT 197.5 112.6 198.3 121.4 ; + RECT 199.5 112.6 200.3 121.4 ; + RECT 196.1 112.6 196.9 115.6 ; + RECT 189.3 112.6 190.1 115.6 ; + RECT 190.7 122.2 191.5 145.2 ; + RECT 192.7 122.2 193.5 145.2 ; + RECT 196.1 112.6 196.9 115.6 ; + RECT 197.5 122.2 198.3 145.2 ; + RECT 199.5 122.2 200.3 145.2 ; + RECT 190.7 106.4 191.5 108.4 ; + RECT 192.5 80.6 193.3 81.4 ; + RECT 192.5 74.0 193.3 74.8 ; + RECT 191.1 99.6 191.9 100.4 ; + RECT 193.9 85.0 194.7 85.8 ; + RECT 191.9 91.4 192.7 92.2 ; + RECT 191.7 67.8 192.5 69.8 ; + RECT 192.7 103.4 193.5 108.4 ; + RECT 197.5 106.4 198.3 108.4 ; + RECT 199.3 80.6 200.1 81.4 ; + RECT 199.3 74.0 200.1 74.8 ; + RECT 197.9 99.6 198.7 100.4 ; + RECT 200.7 85.0 201.5 85.8 ; + RECT 198.7 91.4 199.5 92.2 ; + RECT 198.5 67.8 199.3 69.8 ; + RECT 199.5 103.4 200.3 108.4 ; + RECT 191.7 67.8 192.5 69.8 ; + RECT 198.5 67.8 199.3 69.8 ; + RECT 190.7 106.4 191.5 108.4 ; + RECT 192.7 103.4 193.5 108.4 ; + RECT 197.5 106.4 198.3 108.4 ; + RECT 199.5 103.4 200.3 108.4 ; + RECT 183.0 161.4 183.6 149.4 ; + RECT 187.0 161.4 187.6 149.4 ; + RECT 189.8 161.4 190.4 149.4 ; + RECT 193.8 161.4 194.4 149.4 ; + RECT 196.6 161.4 197.2 149.4 ; + RECT 200.6 161.4 201.2 149.4 ; + RECT 189.3 115.6 190.1 112.6 ; + RECT 196.1 115.6 196.9 112.6 ; + RECT 191.7 69.8 192.5 67.8 ; + RECT 198.5 69.8 199.3 67.8 ; + RECT 89.8 191.0 90.6 191.8 ; + RECT 91.2 201.8 92.0 202.6 ; + RECT 89.8 253.4 90.6 254.2 ; + RECT 91.2 264.2 92.0 265.0 ; + RECT 82.3 186.4 82.9 290.4 ; + RECT 83.7 186.4 84.3 290.4 ; + RECT 85.1 186.4 85.7 290.4 ; + RECT 86.5 186.4 87.1 290.4 ; + RECT 156.6 186.4 157.2 352.8 ; + RECT 82.3 186.4 82.9 290.4 ; + RECT 83.7 186.4 84.3 290.4 ; + RECT 85.1 186.4 85.7 290.4 ; + RECT 86.5 186.4 87.1 290.4 ; + RECT 157.3 181.1 157.9 181.7 ; + RECT 189.3 112.6 190.1 115.6 ; + RECT 196.1 112.6 196.9 115.6 ; + RECT 191.7 67.8 192.5 69.8 ; + RECT 198.5 67.8 199.3 69.8 ; + RECT 82.3 186.4 82.9 290.4 ; + RECT 83.7 186.4 84.3 290.4 ; + RECT 85.1 186.4 85.7 290.4 ; + RECT 86.5 186.4 87.1 290.4 ; + RECT 164.6 67.8 165.2 165.6 ; + RECT 167.4 67.8 168.0 165.6 ; + RECT 166.0 67.8 166.6 165.6 ; + RECT 168.8 67.8 169.4 165.6 ; + RECT 6.8 6.0 7.6 17.6 ; + RECT 16.4 6.0 17.2 17.6 ; + RECT 5.2 9.4 6.0 10.2 ; + RECT 10.0 11.4 10.8 12.2 ; + RECT 3.6 8.0 4.4 13.6 ; + RECT 21.2 12.2 22.0 13.0 ; + RECT 10.0 11.4 10.8 12.2 ; + RECT 38.2 8.9 38.8 9.5 ; + RECT 32.6 14.9 33.2 15.5 ; + RECT 5.2 9.4 6.0 10.2 ; + RECT 6.8 39.6 7.6 28.0 ; + RECT 16.4 39.6 17.2 28.0 ; + RECT 5.2 36.2 6.0 35.4 ; + RECT 10.0 34.2 10.8 33.4 ; + RECT 3.6 37.6 4.4 32.0 ; + RECT 21.2 33.4 22.0 32.6 ; + RECT 10.0 34.2 10.8 33.4 ; + RECT 38.2 36.7 38.8 36.1 ; + RECT 32.6 30.7 33.2 30.1 ; + RECT 5.2 36.2 6.0 35.4 ; + RECT 10.0 11.4 10.8 12.2 ; + RECT 10.0 33.4 10.8 34.2 ; + RECT 38.2 8.9 38.8 9.5 ; + RECT 32.6 14.9 33.2 15.5 ; + RECT 38.2 36.1 38.8 36.7 ; + RECT 32.6 30.1 33.2 30.7 ; + RECT 5.2 2.8 5.8 42.8 ; + RECT 33.8 165.6 33.2 175.2 ; + RECT 5.5 165.6 4.9 332.0 ; + RECT 10.0 11.4 10.8 12.2 ; + RECT 10.0 33.4 10.8 34.2 ; + RECT 54.1 12.3 54.7 12.9 ; + RECT 33.2 165.6 33.8 175.2 ; + RECT 65.9 152.9 79.4 153.5 ; + RECT 65.7 91.5 79.4 92.1 ; + RECT 71.5 112.7 79.4 113.3 ; + RECT 73.3 73.5 79.4 74.1 ; + RECT 74.8 11.5 79.4 12.1 ; + RECT 62.0 348.0 62.8 359.6 ; + RECT 71.6 348.0 72.4 359.6 ; + RECT 60.4 351.4 61.2 352.2 ; + RECT 65.2 353.4 66.0 354.2 ; + RECT 58.8 350.0 59.6 355.6 ; + RECT 76.4 354.2 77.2 355.0 ; + RECT 62.0 381.6 62.8 370.0 ; + RECT 71.6 381.6 72.4 370.0 ; + RECT 60.4 378.2 61.2 377.4 ; + RECT 65.2 376.2 66.0 375.4 ; + RECT 58.8 379.6 59.6 374.0 ; + RECT 76.4 375.4 77.2 374.6 ; + RECT 62.0 388.0 62.8 399.6 ; + RECT 71.6 388.0 72.4 399.6 ; + RECT 60.4 391.4 61.2 392.2 ; + RECT 65.2 393.4 66.0 394.2 ; + RECT 58.8 390.0 59.6 395.6 ; + RECT 76.4 394.2 77.2 395.0 ; + RECT 62.0 421.6 62.8 410.0 ; + RECT 71.6 421.6 72.4 410.0 ; + RECT 60.4 418.2 61.2 417.4 ; + RECT 65.2 416.2 66.0 415.4 ; + RECT 58.8 419.6 59.6 414.0 ; + RECT 76.4 415.4 77.2 414.6 ; + RECT 65.2 353.4 66.0 354.2 ; + RECT 65.2 375.4 66.0 376.2 ; + RECT 65.2 393.4 66.0 394.2 ; + RECT 65.2 415.4 66.0 416.2 ; + RECT 76.4 354.2 77.2 355.0 ; + RECT 76.4 374.6 77.2 375.4 ; + RECT 76.4 394.2 77.2 395.0 ; + RECT 76.4 414.6 77.2 415.4 ; + RECT 105.6 6.0 106.4 17.6 ; + RECT 115.2 6.0 116.0 17.6 ; + RECT 104.0 9.4 104.8 10.2 ; + RECT 108.8 11.4 109.6 12.2 ; + RECT 102.4 8.0 103.2 13.6 ; + RECT 120.0 12.2 120.8 13.0 ; + RECT 127.4 6.0 128.2 17.6 ; + RECT 137.0 6.0 137.8 17.6 ; + RECT 125.8 9.4 126.6 10.2 ; + RECT 130.6 11.4 131.4 12.2 ; + RECT 124.2 8.0 125.0 13.6 ; + RECT 141.8 12.2 142.6 13.0 ; + RECT 108.8 11.4 109.6 12.2 ; + RECT 130.6 11.4 131.4 12.2 ; + RECT 120.0 12.2 120.8 13.0 ; + RECT 141.8 12.2 142.6 13.0 ; LAYER metal3 ; - RECT -3000.0 321750.0 110100.0 323250.0 ; - RECT -3000.0 341550.0 107400.0 343050.0 ; - RECT -3000.0 301950.0 102000.0 303450.0 ; - RECT -3000.0 319050.0 99300.0 320550.0 ; - RECT -3000.0 282600.0 104700.0 284100.0 ; - RECT -3000.0 263700.0 96600.0 265200.0 ; - RECT -3000.0 277200.0 6750.0 278700.0 ; - RECT 117150.0 16200.0 118650.0 161400.0 ; - RECT 127350.0 16200.0 128850.0 161400.0 ; - RECT 120900.0 0.0 122400.0 39900.0 ; - RECT 131100.0 0.0 132600.0 39900.0 ; - RECT 117000.0 161400.0 118800.0 163200.0 ; - RECT 127200.0 161400.0 129000.0 163200.0 ; - RECT 120600.0 40800.0 122400.0 42600.0 ; - RECT 130800.0 40800.0 132600.0 42600.0 ; - RECT 10800.0 89400.0 12600.0 87600.0 ; - RECT 10800.0 79200.0 12600.0 77400.0 ; - RECT 10800.0 69000.0 12600.0 67200.0 ; - RECT 10800.0 58800.0 12600.0 57000.0 ; - RECT 117150.0 15450.0 118950.0 17250.0 ; - RECT 127350.0 15450.0 129150.0 17250.0 ; - RECT 120900.0 0.0 122700.0 1800.0 ; - RECT 131100.0 0.0 132900.0 1800.0 ; - RECT 0.0 87600.0 10800.0 89100.0 ; - RECT 0.0 77400.0 10800.0 78900.0 ; - RECT 0.0 67200.0 10800.0 68700.0 ; - RECT 0.0 57000.0 10800.0 58500.0 ; - RECT -49650.0 241800.0 -51150.0 280650.0 ; - RECT -46200.0 240600.0 -47700.0 269850.0 ; - RECT -34050.0 241800.0 -35550.0 272550.0 ; - RECT -29250.0 241800.0 -30750.0 275250.0 ; - RECT -41850.0 241800.0 -43350.0 267150.0 ; - RECT -21450.0 241800.0 -22950.0 267150.0 ; - RECT -16050.0 223500.0 -17550.0 283350.0 ; - RECT -22050.0 283350.0 -23550.0 307200.0 ; - RECT -24750.0 280650.0 -26250.0 310200.0 ; - RECT -48600.0 182700.0 -46800.0 184500.0 ; - RECT -38400.0 182700.0 -36600.0 184500.0 ; - RECT -28200.0 182700.0 -26400.0 184500.0 ; - RECT -49500.0 242700.0 -51300.0 240900.0 ; - RECT -49500.0 281550.0 -51300.0 279750.0 ; - RECT -46050.0 241500.0 -47850.0 239700.0 ; - RECT -46050.0 270750.0 -47850.0 268950.0 ; - RECT -33900.0 242700.0 -35700.0 240900.0 ; - RECT -33900.0 273450.0 -35700.0 271650.0 ; - RECT -29100.0 242700.0 -30900.0 240900.0 ; - RECT -29100.0 276150.0 -30900.0 274350.0 ; - RECT -41700.0 242700.0 -43500.0 240900.0 ; - RECT -41700.0 268050.0 -43500.0 266250.0 ; - RECT -21300.0 242700.0 -23100.0 240900.0 ; - RECT -21300.0 268050.0 -23100.0 266250.0 ; - RECT -15900.0 224400.0 -17700.0 222600.0 ; - RECT -15900.0 284250.0 -17700.0 282450.0 ; - RECT -21900.0 308100.0 -23700.0 306300.0 ; - RECT -21900.0 284250.0 -23700.0 282450.0 ; - RECT -24600.0 311100.0 -26400.0 309300.0 ; - RECT -24600.0 281550.0 -26400.0 279750.0 ; - RECT -36600.0 182700.0 -38400.0 184500.0 ; - RECT -26400.0 182700.0 -28200.0 184500.0 ; - RECT -46800.0 182700.0 -48600.0 184500.0 ; - RECT 111000.0 321600.0 109200.0 323400.0 ; - RECT -3000.0 321750.0 -4800.0 323550.0 ; - RECT 108300.0 341400.0 106500.0 343200.0 ; - RECT -3000.0 341550.0 -4800.0 343350.0 ; - RECT 102900.0 301800.0 101100.0 303600.0 ; - RECT -3000.0 301950.0 -4800.0 303750.0 ; - RECT 100200.0 318900.0 98400.0 320700.0 ; - RECT -3000.0 319050.0 -4800.0 320850.0 ; - RECT 105600.0 282450.0 103800.0 284250.0 ; - RECT -3000.0 282600.0 -4800.0 284400.0 ; - RECT 97500.0 263550.0 95700.0 265350.0 ; - RECT -3000.0 263700.0 -4800.0 265500.0 ; - RECT 7650.0 277050.0 5850.0 278850.0 ; - RECT -3000.0 277200.0 -4800.0 279000.0 ; + RECT 184.9 175.6 185.7 176.4 ; + RECT 184.9 362.8 185.7 363.6 ; + RECT 188.3 357.8 189.1 358.6 ; + RECT 181.5 170.6 182.3 171.4 ; + RECT 188.3 170.6 189.1 171.4 ; + RECT 181.5 357.8 182.3 358.6 ; + RECT 205.3 196.4 206.1 197.2 ; + RECT 184.9 362.8 185.7 363.6 ; + RECT 178.1 279.6 178.9 280.4 ; + RECT 205.3 238.0 206.1 238.8 ; + RECT 178.1 238.0 178.9 238.8 ; + RECT 198.5 175.6 199.3 176.4 ; + RECT 178.1 175.6 178.9 176.4 ; + RECT 205.3 258.8 206.1 259.6 ; + RECT 178.1 300.4 178.9 301.2 ; + RECT 191.7 362.8 192.5 363.6 ; + RECT 205.3 175.6 206.1 176.4 ; + RECT 178.1 342.0 178.9 342.8 ; + RECT 205.3 362.8 206.1 363.6 ; + RECT 178.1 321.2 178.9 322.0 ; + RECT 191.7 175.6 192.5 176.4 ; + RECT 178.1 362.8 178.9 363.6 ; + RECT 205.3 342.0 206.1 342.8 ; + RECT 178.1 258.8 178.9 259.6 ; + RECT 178.1 217.2 178.9 218.0 ; + RECT 205.3 217.2 206.1 218.0 ; + RECT 205.3 321.2 206.1 322.0 ; + RECT 205.3 300.4 206.1 301.2 ; + RECT 198.5 362.8 199.3 363.6 ; + RECT 184.9 175.6 185.7 176.4 ; + RECT 205.3 279.6 206.1 280.4 ; + RECT 178.1 196.4 178.9 197.2 ; + RECT 181.5 263.8 182.3 264.6 ; + RECT 208.7 284.6 209.5 285.4 ; + RECT 201.9 170.6 202.7 171.4 ; + RECT 201.9 347.0 202.7 347.8 ; + RECT 201.9 170.6 202.7 171.4 ; + RECT 201.9 253.8 202.7 254.6 ; + RECT 181.5 253.8 182.3 254.6 ; + RECT 201.9 263.8 202.7 264.6 ; + RECT 201.9 222.2 202.7 223.0 ; + RECT 181.5 295.4 182.3 296.2 ; + RECT 174.7 243.0 175.5 243.8 ; + RECT 174.7 337.0 175.5 337.8 ; + RECT 181.5 316.2 182.3 317.0 ; + RECT 181.5 243.0 182.3 243.8 ; + RECT 174.7 347.0 175.5 347.8 ; + RECT 201.9 212.2 202.7 213.0 ; + RECT 181.5 347.0 182.3 347.8 ; + RECT 208.7 347.0 209.5 347.8 ; + RECT 172.6 167.8 173.4 168.6 ; + RECT 181.5 170.6 182.3 171.4 ; + RECT 181.5 170.6 182.3 171.4 ; + RECT 208.7 274.6 209.5 275.4 ; + RECT 201.9 337.0 202.7 337.8 ; + RECT 174.7 263.8 175.5 264.6 ; + RECT 181.5 357.8 182.3 358.6 ; + RECT 181.5 357.8 182.3 358.6 ; + RECT 208.7 222.2 209.5 223.0 ; + RECT 174.7 357.8 175.5 358.6 ; + RECT 201.9 357.8 202.7 358.6 ; + RECT 201.9 357.8 202.7 358.6 ; + RECT 208.7 243.0 209.5 243.8 ; + RECT 174.7 316.2 175.5 317.0 ; + RECT 174.7 326.2 175.5 327.0 ; + RECT 181.5 337.0 182.3 337.8 ; + RECT 201.9 243.0 202.7 243.8 ; + RECT 195.1 170.6 195.9 171.4 ; + RECT 195.1 357.8 195.9 358.6 ; + RECT 210.8 167.8 211.6 168.6 ; + RECT 201.9 233.0 202.7 233.8 ; + RECT 201.9 316.2 202.7 317.0 ; + RECT 208.7 191.4 209.5 192.2 ; + RECT 181.5 284.6 182.3 285.4 ; + RECT 208.7 180.6 209.5 181.4 ; + RECT 208.7 305.4 209.5 306.2 ; + RECT 208.7 201.4 209.5 202.2 ; + RECT 174.7 233.0 175.5 233.8 ; + RECT 208.7 253.8 209.5 254.6 ; + RECT 174.7 305.4 175.5 306.2 ; + RECT 181.5 233.0 182.3 233.8 ; + RECT 201.9 274.6 202.7 275.4 ; + RECT 208.7 233.0 209.5 233.8 ; + RECT 208.7 212.2 209.5 213.0 ; + RECT 208.7 337.0 209.5 337.8 ; + RECT 181.5 305.4 182.3 306.2 ; + RECT 174.7 284.6 175.5 285.4 ; + RECT 208.7 326.2 209.5 327.0 ; + RECT 201.9 191.4 202.7 192.2 ; + RECT 201.9 284.6 202.7 285.4 ; + RECT 201.9 295.4 202.7 296.2 ; + RECT 174.7 170.6 175.5 171.4 ; + RECT 208.7 316.2 209.5 317.0 ; + RECT 174.7 274.6 175.5 275.4 ; + RECT 208.7 170.6 209.5 171.4 ; + RECT 174.7 191.4 175.5 192.2 ; + RECT 174.7 201.4 175.5 202.2 ; + RECT 181.5 191.4 182.3 192.2 ; + RECT 188.3 170.6 189.1 171.4 ; + RECT 188.3 170.6 189.1 171.4 ; + RECT 174.7 222.2 175.5 223.0 ; + RECT 201.9 305.4 202.7 306.2 ; + RECT 174.7 212.2 175.5 213.0 ; + RECT 181.5 212.2 182.3 213.0 ; + RECT 174.7 180.6 175.5 181.4 ; + RECT 201.9 201.4 202.7 202.2 ; + RECT 208.7 295.4 209.5 296.2 ; + RECT 181.5 326.2 182.3 327.0 ; + RECT 201.9 326.2 202.7 327.0 ; + RECT 188.3 357.8 189.1 358.6 ; + RECT 188.3 357.8 189.1 358.6 ; + RECT 181.5 180.6 182.3 181.4 ; + RECT 181.5 201.4 182.3 202.2 ; + RECT 208.7 357.8 209.5 358.6 ; + RECT 181.5 274.6 182.3 275.4 ; + RECT 181.5 222.2 182.3 223.0 ; + RECT 210.8 355.0 211.6 355.8 ; + RECT 172.6 355.0 173.4 355.8 ; + RECT 174.7 295.4 175.5 296.2 ; + RECT 201.9 180.6 202.7 181.4 ; + RECT 174.7 253.8 175.5 254.6 ; + RECT 208.7 263.8 209.5 264.6 ; + RECT 185.4 159.6 186.2 160.4 ; + RECT 192.2 159.6 193.0 160.4 ; + RECT 199.0 159.6 199.8 160.4 ; + RECT 192.2 159.6 193.0 160.4 ; + RECT 199.0 159.6 199.8 160.4 ; + RECT 185.4 159.6 186.2 160.4 ; + RECT 200.9 125.4 201.7 126.2 ; + RECT 194.1 125.4 194.9 126.2 ; + RECT 201.9 138.8 202.7 139.6 ; + RECT 195.1 138.8 195.9 139.6 ; + RECT 198.7 91.4 199.5 92.2 ; + RECT 191.9 91.4 192.7 92.2 ; + RECT 192.5 74.0 193.3 74.8 ; + RECT 199.3 74.0 200.1 74.8 ; + RECT 200.7 85.0 201.5 85.8 ; + RECT 191.1 99.6 191.9 100.4 ; + RECT 197.9 99.6 198.7 100.4 ; + RECT 193.9 85.0 194.7 85.8 ; + RECT 192.5 80.6 193.3 81.4 ; + RECT 199.3 80.6 200.1 81.4 ; + RECT 198.7 92.2 199.5 91.4 ; + RECT 199.3 74.8 200.1 74.0 ; + RECT 192.2 160.4 193.0 159.6 ; + RECT 192.5 74.8 193.3 74.0 ; + RECT 200.9 126.2 201.7 125.4 ; + RECT 191.9 92.2 192.7 91.4 ; + RECT 199.0 160.4 199.8 159.6 ; + RECT 185.4 160.4 186.2 159.6 ; + RECT 194.1 126.2 194.9 125.4 ; + RECT 192.5 81.4 193.3 80.6 ; + RECT 197.9 100.4 198.7 99.6 ; + RECT 201.9 139.6 202.7 138.8 ; + RECT 195.1 139.6 195.9 138.8 ; + RECT 200.7 85.8 201.5 85.0 ; + RECT 191.1 100.4 191.9 99.6 ; + RECT 199.3 81.4 200.1 80.6 ; + RECT 193.9 85.8 194.7 85.0 ; + RECT 108.1 196.4 108.9 197.2 ; + RECT 108.1 196.4 108.9 197.2 ; + RECT 93.1 217.2 93.9 218.0 ; + RECT 93.1 217.2 93.9 218.0 ; + RECT 93.1 196.4 93.9 197.2 ; + RECT 93.1 196.4 93.9 197.2 ; + RECT 108.1 217.2 108.9 218.0 ; + RECT 108.1 217.2 108.9 218.0 ; + RECT 108.1 227.6 108.9 228.4 ; + RECT 93.1 227.6 93.9 228.4 ; + RECT 93.1 186.0 93.9 186.8 ; + RECT 108.1 206.8 108.9 207.6 ; + RECT 108.1 186.0 108.9 186.8 ; + RECT 93.1 206.8 93.9 207.6 ; + RECT 108.1 258.8 108.9 259.6 ; + RECT 108.1 258.8 108.9 259.6 ; + RECT 93.1 279.6 93.9 280.4 ; + RECT 93.1 279.6 93.9 280.4 ; + RECT 93.1 258.8 93.9 259.6 ; + RECT 93.1 258.8 93.9 259.6 ; + RECT 108.1 279.6 108.9 280.4 ; + RECT 108.1 279.6 108.9 280.4 ; + RECT 108.1 290.0 108.9 290.8 ; + RECT 93.1 290.0 93.9 290.8 ; + RECT 93.1 248.4 93.9 249.2 ; + RECT 108.1 269.2 108.9 270.0 ; + RECT 108.1 248.4 108.9 249.2 ; + RECT 93.1 269.2 93.9 270.0 ; + RECT 108.1 217.2 108.9 218.0 ; + RECT 152.0 258.8 152.8 259.6 ; + RECT 152.0 258.8 152.8 259.6 ; + RECT 108.1 196.4 108.9 197.2 ; + RECT 152.0 321.2 152.8 322.0 ; + RECT 152.0 196.4 152.8 197.2 ; + RECT 152.0 196.4 152.8 197.2 ; + RECT 93.1 258.8 93.9 259.6 ; + RECT 108.1 279.6 108.9 280.4 ; + RECT 152.0 279.6 152.8 280.4 ; + RECT 93.1 196.4 93.9 197.2 ; + RECT 93.1 279.6 93.9 280.4 ; + RECT 152.0 217.2 152.8 218.0 ; + RECT 152.0 217.2 152.8 218.0 ; + RECT 152.0 279.6 152.8 280.4 ; + RECT 152.0 300.4 152.8 301.2 ; + RECT 108.1 258.8 108.9 259.6 ; + RECT 152.0 342.0 152.8 342.8 ; + RECT 152.0 238.0 152.8 238.8 ; + RECT 93.1 217.2 93.9 218.0 ; + RECT 152.0 206.8 152.8 207.6 ; + RECT 108.1 290.0 108.9 290.8 ; + RECT 93.1 206.8 93.9 207.6 ; + RECT 108.1 206.8 108.9 207.6 ; + RECT 108.1 186.0 108.9 186.8 ; + RECT 152.0 269.2 152.8 270.0 ; + RECT 93.1 248.4 93.9 249.2 ; + RECT 93.1 269.2 93.9 270.0 ; + RECT 93.1 227.6 93.9 228.4 ; + RECT 108.1 248.4 108.9 249.2 ; + RECT 93.1 186.0 93.9 186.8 ; + RECT 152.0 331.6 152.8 332.4 ; + RECT 108.1 269.2 108.9 270.0 ; + RECT 93.1 290.0 93.9 290.8 ; + RECT 108.1 227.6 108.9 228.4 ; + RECT 152.0 310.8 152.8 311.6 ; + RECT 152.0 186.0 152.8 186.8 ; + RECT 152.0 290.0 152.8 290.8 ; + RECT 152.0 352.4 152.8 353.2 ; + RECT 152.0 248.4 152.8 249.2 ; + RECT 152.0 227.6 152.8 228.4 ; + RECT 167.2 258.8 168.0 259.6 ; + RECT 167.2 279.6 168.0 280.4 ; + RECT 167.2 279.6 168.0 280.4 ; + RECT 167.2 300.4 168.0 301.2 ; + RECT 167.2 238.0 168.0 238.8 ; + RECT 167.2 342.0 168.0 342.8 ; + RECT 167.2 217.2 168.0 218.0 ; + RECT 167.2 196.4 168.0 197.2 ; + RECT 167.2 217.2 168.0 218.0 ; + RECT 167.2 196.4 168.0 197.2 ; + RECT 167.2 321.2 168.0 322.0 ; + RECT 167.2 258.8 168.0 259.6 ; + RECT 167.2 269.2 168.0 270.0 ; + RECT 167.2 331.6 168.0 332.4 ; + RECT 167.2 310.8 168.0 311.6 ; + RECT 167.2 227.6 168.0 228.4 ; + RECT 167.2 248.4 168.0 249.2 ; + RECT 167.2 206.8 168.0 207.6 ; + RECT 167.2 352.4 168.0 353.2 ; + RECT 167.2 186.0 168.0 186.8 ; + RECT 167.2 290.0 168.0 290.8 ; + RECT 155.2 175.6 156.0 176.4 ; + RECT 152.0 258.8 152.8 259.6 ; + RECT 152.0 279.6 152.8 280.4 ; + RECT 167.2 196.4 168.0 197.2 ; + RECT 152.0 300.4 152.8 301.2 ; + RECT 152.0 321.2 152.8 322.0 ; + RECT 93.1 258.8 93.9 259.6 ; + RECT 167.2 342.0 168.0 342.8 ; + RECT 167.2 238.0 168.0 238.8 ; + RECT 152.0 238.0 152.8 238.8 ; + RECT 93.1 196.4 93.9 197.2 ; + RECT 108.1 258.8 108.9 259.6 ; + RECT 167.2 321.2 168.0 322.0 ; + RECT 152.0 217.2 152.8 218.0 ; + RECT 93.1 217.2 93.9 218.0 ; + RECT 167.2 279.6 168.0 280.4 ; + RECT 93.1 279.6 93.9 280.4 ; + RECT 167.2 258.8 168.0 259.6 ; + RECT 152.0 196.4 152.8 197.2 ; + RECT 108.1 196.4 108.9 197.2 ; + RECT 167.2 300.4 168.0 301.2 ; + RECT 167.2 217.2 168.0 218.0 ; + RECT 152.0 342.0 152.8 342.8 ; + RECT 108.1 279.6 108.9 280.4 ; + RECT 108.1 217.2 108.9 218.0 ; + RECT 152.0 227.6 152.8 228.4 ; + RECT 108.1 248.4 108.9 249.2 ; + RECT 93.1 186.0 93.9 186.8 ; + RECT 152.0 331.6 152.8 332.4 ; + RECT 152.0 290.0 152.8 290.8 ; + RECT 167.2 227.6 168.0 228.4 ; + RECT 167.2 206.8 168.0 207.6 ; + RECT 167.2 352.4 168.0 353.2 ; + RECT 108.1 227.6 108.9 228.4 ; + RECT 152.0 352.4 152.8 353.2 ; + RECT 93.1 269.2 93.9 270.0 ; + RECT 167.2 269.2 168.0 270.0 ; + RECT 152.0 310.8 152.8 311.6 ; + RECT 152.0 206.8 152.8 207.6 ; + RECT 167.2 290.0 168.0 290.8 ; + RECT 108.1 290.0 108.9 290.8 ; + RECT 167.2 331.6 168.0 332.4 ; + RECT 167.2 310.8 168.0 311.6 ; + RECT 152.0 248.4 152.8 249.2 ; + RECT 152.0 269.2 152.8 270.0 ; + RECT 108.1 186.0 108.9 186.8 ; + RECT 167.2 186.0 168.0 186.8 ; + RECT 93.1 290.0 93.9 290.8 ; + RECT 108.1 269.2 108.9 270.0 ; + RECT 167.2 248.4 168.0 249.2 ; + RECT 93.1 227.6 93.9 228.4 ; + RECT 108.1 206.8 108.9 207.6 ; + RECT 93.1 206.8 93.9 207.6 ; + RECT 93.1 248.4 93.9 249.2 ; + RECT 152.0 186.0 152.8 186.8 ; + RECT 82.2 147.7 183.3 148.3 ; + RECT 199.0 159.6 199.8 160.4 ; + RECT 191.9 91.4 192.7 92.2 ; + RECT 205.3 196.4 206.1 197.2 ; + RECT 194.1 125.4 194.9 126.2 ; + RECT 184.9 362.8 185.7 363.6 ; + RECT 178.1 279.6 178.9 280.4 ; + RECT 152.0 321.2 152.8 322.0 ; + RECT 205.3 238.0 206.1 238.8 ; + RECT 178.1 238.0 178.9 238.8 ; + RECT 198.5 175.6 199.3 176.4 ; + RECT 192.5 74.0 193.3 74.8 ; + RECT 178.1 175.6 178.9 176.4 ; + RECT 205.3 258.8 206.1 259.6 ; + RECT 200.9 125.4 201.7 126.2 ; + RECT 167.2 279.6 168.0 280.4 ; + RECT 152.0 196.4 152.8 197.2 ; + RECT 167.2 300.4 168.0 301.2 ; + RECT 178.1 300.4 178.9 301.2 ; + RECT 108.1 279.6 108.9 280.4 ; + RECT 192.2 159.6 193.0 160.4 ; + RECT 167.2 217.2 168.0 218.0 ; + RECT 93.1 196.4 93.9 197.2 ; + RECT 93.1 279.6 93.9 280.4 ; + RECT 152.0 217.2 152.8 218.0 ; + RECT 191.7 362.8 192.5 363.6 ; + RECT 167.2 258.8 168.0 259.6 ; + RECT 199.3 74.0 200.1 74.8 ; + RECT 93.1 217.2 93.9 218.0 ; + RECT 205.3 175.6 206.1 176.4 ; + RECT 152.0 300.4 152.8 301.2 ; + RECT 178.1 342.0 178.9 342.8 ; + RECT 205.3 362.8 206.1 363.6 ; + RECT 178.1 321.2 178.9 322.0 ; + RECT 191.7 175.6 192.5 176.4 ; + RECT 108.1 258.8 108.9 259.6 ; + RECT 93.1 258.8 93.9 259.6 ; + RECT 178.1 362.8 178.9 363.6 ; + RECT 205.3 342.0 206.1 342.8 ; + RECT 198.7 91.4 199.5 92.2 ; + RECT 178.1 258.8 178.9 259.6 ; + RECT 185.4 159.6 186.2 160.4 ; + RECT 178.1 217.2 178.9 218.0 ; + RECT 155.2 175.6 156.0 176.4 ; + RECT 152.0 279.6 152.8 280.4 ; + RECT 167.2 196.4 168.0 197.2 ; + RECT 205.3 217.2 206.1 218.0 ; + RECT 108.1 217.2 108.9 218.0 ; + RECT 167.2 342.0 168.0 342.8 ; + RECT 152.0 258.8 152.8 259.6 ; + RECT 205.3 321.2 206.1 322.0 ; + RECT 205.3 300.4 206.1 301.2 ; + RECT 167.2 238.0 168.0 238.8 ; + RECT 152.0 238.0 152.8 238.8 ; + RECT 198.5 362.8 199.3 363.6 ; + RECT 184.9 175.6 185.7 176.4 ; + RECT 167.2 321.2 168.0 322.0 ; + RECT 152.0 342.0 152.8 342.8 ; + RECT 108.1 196.4 108.9 197.2 ; + RECT 205.3 279.6 206.1 280.4 ; + RECT 178.1 196.4 178.9 197.2 ; + RECT 181.5 263.8 182.3 264.6 ; + RECT 208.7 284.6 209.5 285.4 ; + RECT 201.9 170.6 202.7 171.4 ; + RECT 201.9 347.0 202.7 347.8 ; + RECT 201.9 253.8 202.7 254.6 ; + RECT 181.5 253.8 182.3 254.6 ; + RECT 201.9 263.8 202.7 264.6 ; + RECT 201.9 222.2 202.7 223.0 ; + RECT 181.5 295.4 182.3 296.2 ; + RECT 174.7 243.0 175.5 243.8 ; + RECT 174.7 337.0 175.5 337.8 ; + RECT 181.5 316.2 182.3 317.0 ; + RECT 193.9 85.0 194.7 85.8 ; + RECT 152.0 290.0 152.8 290.8 ; + RECT 108.1 269.2 108.9 270.0 ; + RECT 181.5 243.0 182.3 243.8 ; + RECT 174.7 347.0 175.5 347.8 ; + RECT 201.9 212.2 202.7 213.0 ; + RECT 181.5 347.0 182.3 347.8 ; + RECT 152.0 227.6 152.8 228.4 ; + RECT 208.7 347.0 209.5 347.8 ; + RECT 172.6 167.8 173.4 168.6 ; + RECT 181.5 170.6 182.3 171.4 ; + RECT 195.1 138.8 195.9 139.6 ; + RECT 208.7 274.6 209.5 275.4 ; + RECT 201.9 138.8 202.7 139.6 ; + RECT 201.9 337.0 202.7 337.8 ; + RECT 174.7 263.8 175.5 264.6 ; + RECT 181.5 357.8 182.3 358.6 ; + RECT 208.7 222.2 209.5 223.0 ; + RECT 93.1 248.4 93.9 249.2 ; + RECT 174.7 357.8 175.5 358.6 ; + RECT 201.9 357.8 202.7 358.6 ; + RECT 208.7 243.0 209.5 243.8 ; + RECT 174.7 316.2 175.5 317.0 ; + RECT 174.7 326.2 175.5 327.0 ; + RECT 181.5 337.0 182.3 337.8 ; + RECT 201.9 243.0 202.7 243.8 ; + RECT 195.1 170.6 195.9 171.4 ; + RECT 195.1 357.8 195.9 358.6 ; + RECT 210.8 167.8 211.6 168.6 ; + RECT 201.9 233.0 202.7 233.8 ; + RECT 201.9 316.2 202.7 317.0 ; + RECT 208.7 191.4 209.5 192.2 ; + RECT 181.5 284.6 182.3 285.4 ; + RECT 191.1 99.6 191.9 100.4 ; + RECT 167.2 186.0 168.0 186.8 ; + RECT 208.7 180.6 209.5 181.4 ; + RECT 93.1 186.0 93.9 186.8 ; + RECT 208.7 305.4 209.5 306.2 ; + RECT 208.7 201.4 209.5 202.2 ; + RECT 174.7 233.0 175.5 233.8 ; + RECT 208.7 253.8 209.5 254.6 ; + RECT 174.7 305.4 175.5 306.2 ; + RECT 181.5 233.0 182.3 233.8 ; + RECT 152.0 310.8 152.8 311.6 ; + RECT 152.0 206.8 152.8 207.6 ; + RECT 201.9 274.6 202.7 275.4 ; + RECT 208.7 233.0 209.5 233.8 ; + RECT 208.7 212.2 209.5 213.0 ; + RECT 208.7 337.0 209.5 337.8 ; + RECT 181.5 305.4 182.3 306.2 ; + RECT 174.7 284.6 175.5 285.4 ; + RECT 167.2 290.0 168.0 290.8 ; + RECT 208.7 326.2 209.5 327.0 ; + RECT 201.9 191.4 202.7 192.2 ; + RECT 200.7 85.0 201.5 85.8 ; + RECT 201.9 284.6 202.7 285.4 ; + RECT 201.9 295.4 202.7 296.2 ; + RECT 108.1 206.8 108.9 207.6 ; + RECT 174.7 170.6 175.5 171.4 ; + RECT 208.7 316.2 209.5 317.0 ; + RECT 174.7 274.6 175.5 275.4 ; + RECT 208.7 170.6 209.5 171.4 ; + RECT 167.2 227.6 168.0 228.4 ; + RECT 174.7 191.4 175.5 192.2 ; + RECT 108.1 186.0 108.9 186.8 ; + RECT 174.7 201.4 175.5 202.2 ; + RECT 181.5 191.4 182.3 192.2 ; + RECT 197.9 99.6 198.7 100.4 ; + RECT 93.1 269.2 93.9 270.0 ; + RECT 188.3 170.6 189.1 171.4 ; + RECT 167.2 269.2 168.0 270.0 ; + RECT 93.1 206.8 93.9 207.6 ; + RECT 174.7 222.2 175.5 223.0 ; + RECT 201.9 305.4 202.7 306.2 ; + RECT 174.7 212.2 175.5 213.0 ; + RECT 167.2 310.8 168.0 311.6 ; + RECT 108.1 290.0 108.9 290.8 ; + RECT 108.1 248.4 108.9 249.2 ; + RECT 199.3 80.6 200.1 81.4 ; + RECT 181.5 212.2 182.3 213.0 ; + RECT 152.0 352.4 152.8 353.2 ; + RECT 174.7 180.6 175.5 181.4 ; + RECT 201.9 201.4 202.7 202.2 ; + RECT 152.0 186.0 152.8 186.8 ; + RECT 192.5 80.6 193.3 81.4 ; + RECT 93.1 290.0 93.9 290.8 ; + RECT 208.7 295.4 209.5 296.2 ; + RECT 181.5 326.2 182.3 327.0 ; + RECT 152.0 269.2 152.8 270.0 ; + RECT 201.9 326.2 202.7 327.0 ; + RECT 188.3 357.8 189.1 358.6 ; + RECT 152.0 248.4 152.8 249.2 ; + RECT 181.5 180.6 182.3 181.4 ; + RECT 108.1 227.6 108.9 228.4 ; + RECT 152.0 331.6 152.8 332.4 ; + RECT 181.5 201.4 182.3 202.2 ; + RECT 167.2 206.8 168.0 207.6 ; + RECT 208.7 357.8 209.5 358.6 ; + RECT 181.5 274.6 182.3 275.4 ; + RECT 167.2 331.6 168.0 332.4 ; + RECT 167.2 352.4 168.0 353.2 ; + RECT 181.5 222.2 182.3 223.0 ; + RECT 210.8 355.0 211.6 355.8 ; + RECT 167.2 248.4 168.0 249.2 ; + RECT 93.1 227.6 93.9 228.4 ; + RECT 172.6 355.0 173.4 355.8 ; + RECT 174.7 295.4 175.5 296.2 ; + RECT 201.9 180.6 202.7 181.4 ; + RECT 174.7 253.8 175.5 254.6 ; + RECT 208.7 263.8 209.5 264.6 ; + RECT 2.0 22.4 2.8 23.2 ; + RECT 2.0 42.4 2.8 43.2 ; + RECT 2.0 2.4 2.8 3.2 ; + RECT 24.0 224.0 23.2 224.8 ; + RECT 24.0 302.4 23.2 303.2 ; + RECT 10.8 263.2 10.0 264.0 ; + RECT 24.0 184.8 23.2 185.6 ; + RECT 10.8 184.8 10.0 185.6 ; + RECT 10.8 341.6 10.0 342.4 ; + RECT 24.0 263.2 23.2 264.0 ; + RECT 10.8 224.0 10.0 224.8 ; + RECT 24.0 341.6 23.2 342.4 ; + RECT 10.8 302.4 10.0 303.2 ; + RECT 10.8 322.0 10.0 322.8 ; + RECT 10.8 165.2 10.0 166.0 ; + RECT 10.8 243.6 10.0 244.4 ; + RECT 24.0 204.4 23.2 205.2 ; + RECT 10.8 282.8 10.0 283.6 ; + RECT 24.0 322.0 23.2 322.8 ; + RECT 24.0 243.6 23.2 244.4 ; + RECT 10.8 204.4 10.0 205.2 ; + RECT 24.0 282.8 23.2 283.6 ; + RECT 24.0 165.2 23.2 166.0 ; + RECT 23.2 341.6 24.0 342.4 ; + RECT 77.6 62.4 78.4 63.2 ; + RECT 77.6 102.4 78.4 103.2 ; + RECT 23.2 302.4 24.0 303.2 ; + RECT 77.6 142.4 78.4 143.2 ; + RECT 10.0 224.0 10.8 224.8 ; + RECT 10.0 302.4 10.8 303.2 ; + RECT 10.0 263.2 10.8 264.0 ; + RECT 23.2 184.8 24.0 185.6 ; + RECT 77.6 22.4 78.4 23.2 ; + RECT 10.0 341.6 10.8 342.4 ; + RECT 2.0 22.4 2.8 23.2 ; + RECT 10.0 184.8 10.8 185.6 ; + RECT 23.2 263.2 24.0 264.0 ; + RECT 23.2 224.0 24.0 224.8 ; + RECT 23.2 322.0 24.0 322.8 ; + RECT 10.0 243.6 10.8 244.4 ; + RECT 2.0 2.4 2.8 3.2 ; + RECT 10.0 282.8 10.8 283.6 ; + RECT 23.2 243.6 24.0 244.4 ; + RECT 10.0 204.4 10.8 205.2 ; + RECT 23.2 165.2 24.0 166.0 ; + RECT 77.6 162.4 78.4 163.2 ; + RECT 77.6 2.4 78.4 3.2 ; + RECT 77.6 42.4 78.4 43.2 ; + RECT 77.6 122.4 78.4 123.2 ; + RECT 10.0 322.0 10.8 322.8 ; + RECT 10.0 165.2 10.8 166.0 ; + RECT 23.2 282.8 24.0 283.6 ; + RECT 23.2 204.4 24.0 205.2 ; + RECT 2.0 42.4 2.8 43.2 ; + RECT 77.6 82.4 78.4 83.2 ; + RECT 57.6 347.9 79.4 348.5 ; + RECT 68.1 404.4 68.9 405.2 ; + RECT 68.1 364.4 68.9 365.2 ; + RECT 68.1 424.4 68.9 425.2 ; + RECT 68.1 344.4 68.9 345.2 ; + RECT 68.1 384.4 68.9 385.2 ; + RECT 101.2 5.9 144.8 6.5 ; + RECT 133.5 22.4 134.3 23.2 ; + RECT 111.7 22.4 112.5 23.2 ; + RECT 111.7 2.4 112.5 3.2 ; + RECT 133.5 2.4 134.3 3.2 ; + LAYER metal4 ; END - END sram_2_16_1_scn3me_subm + END sram_2_16_1_scn4m_subm END LIBRARY diff --git a/technology/freepdk45/tech/tech.py b/technology/freepdk45/tech/tech.py index 0feb1cd9..1616e9f9 100644 --- a/technology/freepdk45/tech/tech.py +++ b/technology/freepdk45/tech/tech.py @@ -103,8 +103,7 @@ power_grid = m3_stack # GDS Layer Map ################################################### -# create the GDS layer map -# FIXME: parse the gds layer map from the cadence map? +# Create the GDS layer map using internal names layer = {} layer["active"] = (1, 0) layer["pwell"] = (2, 0) @@ -138,6 +137,40 @@ layer["m10"] = (29, 0) layer["text"] = (239, 0) layer["boundary"]= (239, 0) +# Layer names for external PDKs +layer_names = {} +layer_names["active"] = "active" +layer_names["pwell"] = "pwell" +layer_names["nwell"] = "nwell" +layer_names["nimplant"]= "nimplant" +layer_names["pimplant"]= "pimplant" +layer_names["vtg"] = "vtg" +layer_names["vth"] = "vth" +layer_names["thkox"] = "thkox" +layer_names["poly"] = "poly" +layer_names["contact"] = "contact" +layer_names["m1"] = "metal1" +layer_names["via1"] = "via1" +layer_names["m2"] = "metal2" +layer_names["via2"] = "via2" +layer_names["m3"] = "metal3" +layer_names["via3"] = "via3" +layer_names["m4"] = "metal4" +layer_names["via4"] = "via4" +layer_names["m5"] = "metal5" +layer_names["via5"] = "via5" +layer_names["m6"] = "metal6" +layer_names["via6"] = "via6" +layer_names["m7"] = "metal7" +layer_names["via7"] = "via7" +layer_names["m8"] = "metal8" +layer_names["via8"] = "via8" +layer_names["m9"] = "metal9" +layer_names["via9"] = "via9" +layer_names["m10"] = "metal10" +layer_names["text"] = "text" +layer_names["boundary"]= "boundary" + ################################################### # DRC/LVS Rules Setup ################################################### @@ -159,10 +192,10 @@ drc = design_rules("freepdk45") drc["grid"] = 0.0025 #DRC/LVS test set_up -drc["drc_rules"]=drclvs_home+"/calibreDRC.rul" -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" +drc["drc_rules"]=drclvs_home + "/calibreDRC.rul" +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 with contact (no dog bone transistors) drc["minwidth_tx"] = 0.09 @@ -173,189 +206,189 @@ drc["pwell_to_nwell"] = 0.225 # WELL.3 Minimum spacing of nwell/pwell at the same potential # WELL.4 Minimum width of nwell/pwell drc.add_layer("nwell", - width = 0.2, - spacing = 0.135) + width=0.2, + spacing=0.135) drc.add_layer("pwell", - width = 0.2, - spacing = 0.135) + width=0.2, + spacing=0.135) # POLY.1 Minimum width of poly # POLY.2 Minimum spacing of poly AND active drc.add_layer("poly", - width = 0.05, - spacing = 0.14) + width=0.05, + spacing=0.14) # POLY.3 Minimum poly extension beyond active -drc["poly_extend_active"] = 0.055 +drc["poly_extend_active"]=0.055 # Not a rule -drc["poly_to_contact"] = 0.075 +drc["poly_to_contact"]=0.075 # POLY.4 Minimum enclosure of active around gate -drc["active_enclose_gate"] = 0.07 +drc["active_enclose_gate"]=0.07 # POLY.5 Minimum spacing of field poly to active -drc["poly_to_active"] = 0.05 +drc["poly_to_active"]=0.05 # POLY.6 Minimum Minimum spacing of field poly -drc["poly_to_field_poly"] = 0.075 +drc["poly_to_field_poly"]=0.075 # Not a rule -drc["minarea_poly"] = 0.0 +drc["minarea_poly"]=0.0 # ACTIVE.1 Minimum width of active # ACTIVE.2 Minimum spacing of active drc.add_layer("active", - width = 0.09, - spacing = 0.08) + width=0.09, + spacing=0.08) # ACTIVE.3 Minimum enclosure/spacing of nwell/pwell to active drc.add_enclosure("nwell", - layer = "active", - enclosure = 0.055) + layer="active", + enclosure=0.055) drc.add_enclosure("pwell", - layer = "active", - enclosure = 0.055) + layer="active", + enclosure=0.055) # IMPLANT.1 Minimum spacing of nimplant/ pimplant to channel -drc["implant_to_channel"] = 0.07 +drc["implant_to_channel"]=0.07 # Not a rule drc.add_enclosure("implant", - layer = "active", - enclosure = 0) + layer="active", + enclosure=0) # Not a rule drc.add_enclosure("implant", - layer = "contact", - enclosure = 0) + layer="contact", + enclosure=0) # IMPLANT.2 Minimum spacing of nimplant/ pimplant to contact -drc["implant_to_contact"] = 0.025 +drc["implant_to_contact"]=0.025 # IMPLANT.3 Minimum width/ spacing of nimplant/ pimplant # IMPLANT.4 Minimum width/ spacing of nimplant/ pimplant drc.add_layer("implant", - width = 0.045, - spacing = 0.045) + width=0.045, + spacing=0.045) # CONTACT.1 Minimum width of contact # CONTACT.2 Minimum spacing of contact drc.add_layer("contact", - width = 0.065, - spacing = 0.075) + width=0.065, + spacing=0.075) # CONTACT.4 Minimum enclosure of active around contact drc.add_enclosure("active", - layer = "contact", - enclosure = 0.005) + layer="contact", + enclosure=0.005) # CONTACT.6 Minimum spacing of contact and gate -drc["active_contact_to_gate"] = 0.0375 #changed from 0.035 +drc["active_contact_to_gate"]=0.0375 # CONTACT.7 Minimum spacing of contact and poly -drc["poly_contact_to_gate"] = 0.090 +drc["poly_contact_to_gate"]=0.090 # CONTACT.1 Minimum width of contact # CONTACT.2 Minimum spacing of contact drc.add_layer("contact", - width = 0.065, - spacing = 0.075) + width=0.065, + spacing=0.075) # CONTACT.5 Minimum enclosure of poly around contact drc.add_enclosure("poly", - layer = "contact", - enclosure = 0.005) + layer="contact", + enclosure=0.005) # CONTACT.6 Minimum spacing of contact and gate -drc["contact_to_gate"] = 0.0375 #changed from 0.035 +drc["contact_to_gate"]=0.0375 # CONTACT.7 Minimum spacing of contact and poly -drc["contact_to_poly"] = 0.090 +drc["contact_to_poly"]=0.090 # METAL1.1 Minimum width of metal1 # METAL1.2 Minimum spacing of metal1 drc.add_layer("m1", - width = 0.065, - spacing = 0.065) + width=0.065, + spacing=0.065) # METAL1.3 Minimum enclosure around contact on two opposite sides drc.add_enclosure("m1", - layer = "contact", - enclosure = 0, - extension = 0.035) + layer="contact", + enclosure=0, + extension=0.035) # METAL1.4 inimum enclosure around via1 on two opposite sides drc.add_enclosure("m1", - layer = "via1", - enclosure = 0, - extension = 0.035) + layer="via1", + enclosure=0, + extension=0.035) # VIA1.1 Minimum width of via1 # VIA1.2 Minimum spacing of via1 drc.add_layer("via1", - width = 0.065, - spacing = 0.075) + width=0.065, + spacing=0.075) # METALINT.1 Minimum width of intermediate metal # METALINT.2 Minimum spacing of intermediate metal drc.add_layer("m2", - width = 0.07, - spacing = 0.07) + width=0.07, + spacing=0.07) # METALINT.3 Minimum enclosure around via1 on two opposite sides drc.add_enclosure("m2", - layer = "via1", - enclosure = 0, - extension = 0.035) + layer="via1", + enclosure=0, + extension=0.035) # METALINT.4 Minimum enclosure around via[2-3] on two opposite sides drc.add_enclosure("m2", - layer = "via2", - enclosure = 0, - extension = 0.035) + layer="via2", + enclosure=0, + extension=0.035) # VIA2-3.1 Minimum width of Via[2-3] # VIA2-3.2 Minimum spacing of Via[2-3] drc.add_layer("via2", - width = 0.065, - spacing = 0.075) + width=0.065, + spacing=0.075) # METALINT.1 Minimum width of intermediate metal # METALINT.2 Minimum spacing of intermediate metal -# Minimum spacing of m3 wider than 0.09 & longer than 0.3 = 0.09 -# Minimum spacing of m3 wider than 0.27 & longer than 0.9 = 0.27 -# Minimum spacing of m3 wider than 0.5 & longer than 1.8 = 0.5 -# Minimum spacing of m3 wider than 0.9 & longer than 2.7 = 0.9 -# Minimum spacing of m3 wider than 1.5 & longer than 4.0 = 1.5 +# Minimum spacing of m3 wider than 0.09 & longer than 0.3=0.09 +# Minimum spacing of m3 wider than 0.27 & longer than 0.9=0.27 +# Minimum spacing of m3 wider than 0.5 & longer than 1.8=0.5 +# Minimum spacing of m3 wider than 0.9 & longer than 2.7=0.9 +# Minimum spacing of m3 wider than 1.5 & longer than 4.0=1.5 drc.add_layer("m3", - width = 0.07, - spacing = drc_lut({(0.00, 0.0) : 0.07, - (0.09, 0.3) : 0.09, - (0.27, 0.9) : 0.27, - (0.50, 1.8) : 0.5, - (0.90, 2.7) : 0.9, - (1.50, 4.0) : 1.5})) + width=0.07, + spacing=drc_lut({(0.00, 0.0): 0.07, + (0.09, 0.3): 0.09, + (0.27, 0.9): 0.27, + (0.50, 1.8): 0.5, + (0.90, 2.7): 0.9, + (1.50, 4.0): 1.5})) # METALINT.3 Minimum enclosure around via1 on two opposite sides drc.add_enclosure("m3", - layer = "via2", - enclosure = 0, - extension = 0.035) + layer="via2", + enclosure=0, + extension=0.035) # METALINT.4 Minimum enclosure around via[2-3] on two opposite sides drc.add_enclosure("m3", - layer = "via3", - enclosure = 0, - extension = 0.035) + layer="via3", + enclosure=0, + extension=0.035) # VIA2-3.1 Minimum width of Via[2-3] # VIA2-3.2 Minimum spacing of Via[2-3] drc.add_layer("via3", - width = 0.07, - spacing = 0.085) + width=0.07, + spacing=0.085) # METALSMG.1 Minimum width of semi-global metal # METALSMG.2 Minimum spacing of semi-global metal -# Minimum spacing of m4 wider than 0.27 & longer than 0.9 = 0.27 -# Minimum spacing of m4 wider than 0.5 & longer than 1.8 = 0.5 -# Minimum spacing of m4 wider than 0.9 & longer than 2.7 = 0.9 -# Minimum spacing of m4 wider than 1.5 & longer than 4.0 = 1.5 +# Minimum spacing of m4 wider than 0.27 & longer than 0.9=0.27 +# Minimum spacing of m4 wider than 0.5 & longer than 1.8=0.5 +# Minimum spacing of m4 wider than 0.9 & longer than 2.7=0.9 +# Minimum spacing of m4 wider than 1.5 & longer than 4.0=1.5 drc.add_layer("m4", - width = 0.14, - spacing = drc_lut({(0.00, 0.0) : 0.14, - (0.27, 0.9) : 0.27, - (0.50, 1.8) : 0.5, - (0.90, 2.7) : 0.9, - (1.50, 4.0) : 1.5})) + width=0.14, + spacing=drc_lut({(0.00, 0.0): 0.14, + (0.27, 0.9): 0.27, + (0.50, 1.8): 0.5, + (0.90, 2.7): 0.9, + (1.50, 4.0): 1.5})) # METALSMG.3 Minimum enclosure around via[3-6] on two opposite sides drc.add_enclosure("m4", - layer = "via3", - enclosure = 0.0025) + layer="via3", + enclosure=0.0025) # Metal 5-10 are ommitted diff --git a/technology/scn4m_subm/tech/tech.py b/technology/scn4m_subm/tech/tech.py index 0bea4035..c7b50272 100644 --- a/technology/scn4m_subm/tech/tech.py +++ b/technology/scn4m_subm/tech/tech.py @@ -121,6 +121,26 @@ layer["m4"] = (31, 0) layer["text"] = (63, 0) layer["boundary"] = (63, 0) +# Layer names for external PDKs +layer_names = {} +layer_names["active"] = "active" +layer_names["pwell"] = "pwell" +layer_names["nwell"] = "nwell" +layer_names["nimplant"]= "nimplant" +layer_names["pimplant"]= "pimplant" +layer_names["poly"] = "poly" +layer_names["poly_contact"] = "poly_contact" +layer_names["active_contact"] = "active_contact" +layer_names["m1"] = "metal1" +layer_names["via1"] = "via1" +layer_names["m2"] = "metal2" +layer_names["via2"] = "via2" +layer_names["m3"] = "metal3" +layer_names["via3"] = "via3" +layer_names["m4"] = "metal4" +layer_names["text"] = "text" +layer_names["boundary"]= "boundary" + ################################################### # DRC/LVS Rules Setup ################################################### From 10542d6cc30f8a525baf9986f42cede60912757d Mon Sep 17 00:00:00 2001 From: mrg Date: Mon, 9 Nov 2020 11:12:31 -0800 Subject: [PATCH 61/67] Output DRC and LVS run files to output directory. --- compiler/sram/sram.py | 16 +++++ compiler/verify/__init__.py | 20 +++---- compiler/verify/assura.py | 109 ++++++++++++++++++++-------------- compiler/verify/calibre.py | 53 +++++++++-------- compiler/verify/magic.py | 80 ++++++++++++------------- compiler/verify/none.py | 8 +++ compiler/verify/run_script.py | 3 +- 7 files changed, 168 insertions(+), 121 deletions(-) diff --git a/compiler/sram/sram.py b/compiler/sram/sram.py index 7b30ccc2..2f3f412e 100644 --- a/compiler/sram/sram.py +++ b/compiler/sram/sram.py @@ -6,6 +6,7 @@ # All rights reserved. # import datetime +import os import debug from globals import OPTS, print_time @@ -84,6 +85,12 @@ class sram(): gdsname = OPTS.output_path + self.s.name + ".gds" debug.print_raw("GDS: Writing to {0}".format(gdsname)) self.gds_write(gdsname) + from verify import write_drc_script + write_drc_script(cell_name=self.s.name, + gds_name=os.path.basename(gdsname), + extract=True, + final_verification=True, + output_path=OPTS.output_path) print_time("GDS", datetime.datetime.now(), start_time) # Create a LEF physical model @@ -105,6 +112,13 @@ class sram(): lvsname = OPTS.output_path + self.s.name + ".lvs.sp" debug.print_raw("LVS: Writing to {0}".format(lvsname)) self.lvs_write(lvsname) + if not OPTS.netlist_only: + from verify import write_lvs_script + write_lvs_script(cell_name=self.s.name, + gds_name=os.path.basename(gdsname), + sp_name=os.path.basename(lvsname), + final_verification=True, + output_path=OPTS.output_path) print_time("LVS writing", datetime.datetime.now(), start_time) # Save the extracted spice file @@ -121,6 +135,8 @@ class sram(): # Use generated spice file for characterization sp_file = spname + # Save a functional simulation file + # Characterize the design start_time = datetime.datetime.now() from characterizer import lib diff --git a/compiler/verify/__init__.py b/compiler/verify/__init__.py index 8da102aa..b084f053 100644 --- a/compiler/verify/__init__.py +++ b/compiler/verify/__init__.py @@ -42,34 +42,34 @@ else: if not OPTS.drc_exe: from .none import run_drc, print_drc_stats elif "calibre"==OPTS.drc_exe[0]: - from .calibre import run_drc, print_drc_stats + from .calibre import run_drc, print_drc_stats, write_drc_script elif "assura"==OPTS.drc_exe[0]: - from .assura import run_drc, print_drc_stats + from .assura import run_drc, print_drc_stats, write_drc_script elif "magic"==OPTS.drc_exe[0]: - from .magic import run_drc, print_drc_stats + from .magic import run_drc, print_drc_stats, write_drc_script else: debug.error("Did not find a supported DRC tool." + "Disable DRC/LVS with check_lvsdrc=False to ignore.", 2) if not OPTS.lvs_exe: - from .none import run_lvs, print_lvs_stats + from .none import run_lvs, print_lvs_stats, write_lvs_script elif "calibre"==OPTS.lvs_exe[0]: - from .calibre import run_lvs, print_lvs_stats + from .calibre import run_lvs, print_lvs_stats, write_lvs_script elif "assura"==OPTS.lvs_exe[0]: - from .assura import run_lvs, print_lvs_stats + from .assura import run_lvs, print_lvs_stats, write_lvs_script elif "netgen"==OPTS.lvs_exe[0]: - from .magic import run_lvs, print_lvs_stats + from .magic import run_lvs, print_lvs_stats, write_lvs_script else: debug.warning("Did not find a supported LVS tool." + "Disable DRC/LVS with check_lvsdrc=False to ignore.", 2) if not OPTS.pex_exe: - from .none import run_pex,print_pex_stats + from .none import run_pex, print_pex_stats elif "calibre"==OPTS.pex_exe[0]: - from .calibre import run_pex,print_pex_stats + from .calibre import run_pex, print_pex_stats elif "magic"==OPTS.pex_exe[0]: - from .magic import run_pex,print_pex_stats + from .magic import run_pex, print_pex_stats else: debug.warning("Did not find a supported PEX tool." + "Disable DRC/LVS with check_lvsdrc=False to ignore.", 2) diff --git a/compiler/verify/assura.py b/compiler/verify/assura.py index 439f833d..bd8c9c10 100644 --- a/compiler/verify/assura.py +++ b/compiler/verify/assura.py @@ -28,7 +28,7 @@ inserted in the runset. import os import re -import time +from run_script import * import debug from globals import OPTS @@ -37,16 +37,11 @@ num_drc_runs = 0 num_lvs_runs = 0 num_pex_runs = 0 -def run_drc(name, gds_name, final_verification=False): - """Run DRC check on a given top-level name which is - implemented in gds_name.""" - - global num_drc_runs - num_drc_runs += 1 +def write_drc_script(cell_name, gds_name, extract, final_verification, output_path): from tech import drc drc_rules = drc["drc_rules"] - drc_runset = OPTS.openram_temp + name + ".rsf" + drc_runset = output_path + cell_name + ".rsf" drc_log_file = "{0}{1}.log".format(OPTS.openram_temp, name) # write the runset file @@ -64,8 +59,8 @@ def run_drc(name, gds_name, final_verification=False): f.write("\n") f.write("avParameters(\n") f.write(" ?inputLayout ( \"gds2\" \"{}\" )\n".format(gds_name)) - f.write(" ?cellName \"{}\"\n".format(name)) - f.write(" ?workingDirectory \"{}\"\n".format(OPTS.openram_temp)) + f.write(" ?cellName \"{}\"\n".format(cell_name)) + f.write(" ?workingDirectory \"{}\"\n".format(output_path)) f.write(" ?rulesFile \"{}\"\n".format(drc_rules)) f.write(" ?set ( \"GridCheck\" )\n") f.write(" ?avrpt t\n") @@ -73,26 +68,37 @@ def run_drc(name, gds_name, final_verification=False): f.close() # run drc - cwd = os.getcwd() - os.chdir(OPTS.openram_temp) - cmd = "assura {0} 2> {1} 1> {2}".format(drc_runset, drc_log_file, drc_log_file) - debug.info(1, cmd) - os.system(cmd) - os.chdir(cwd) + run_file = output_path + "/run_drc.sh" + f = open(run_file, "w") + f.write("#!/bin/sh\n") + f.write("assura {0} 2> {1} 1> {2}\n".format(drc_runset, drc_log_file, drc_log_file)) + f.close() + + +def run_drc(name, gds_name, final_verification=False): + """Run DRC check on a given top-level name which is + implemented in gds_name.""" + global num_drc_runs + num_drc_runs += 1 + + write_drc_script(name, gds_name, True, final_verification, OPTS.openram_temp) + + (outfile, errfile, resultsfile) = run_script(name, "drc") + # count and report errors errors = 0 try: - f = open(OPTS.openram_temp+name+".err", "r") + f = open(OPTS.openram_temp + name +".err", "r") except: - debug.error("Unable to retrieve DRC results file.",1) + debug.error("Unable to retrieve DRC results file.", 1) results = f.readlines() f.close() for line in results: if re.match("Rule No.", line): if re.search("# INFO:", line) == None: - errors = errors + 1 - debug.info(1, line) + errors = errors + 1 + debug.info(1, line) if errors > 0: debug.error("Errors: {}".format(errors)) @@ -100,23 +106,18 @@ def run_drc(name, gds_name, final_verification=False): return errors -def run_lvs(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. """ - - global num_lvs_runs - num_lvs_runs += 1 +def write_lvs_script(cell_name, gds_name, sp_name, final_verification, output_path): from tech import drc lvs_rules = drc["lvs_rules"] - lvs_runset = OPTS.openram_temp + name + ".rsf" + lvs_runset = output_path + name + ".rsf" # The LVS compare rules must be defined in the tech file for Assura. lvs_compare = drc["lvs_compare"] # Define the must-connect names for disconnected LVS nets for Assura lvs_bindings = drc["lvs_bindings"] - lvs_log_file = "{0}{1}.log".format(OPTS.openram_temp, name) + lvs_log_file = "{0}{1}.log".format(output_path, name) # Needed when FET models are sub-circuits - if drc.has_key("lvs_subcircuits"): + if "lvs_subcircuits" in drc: lvs_sub_file = drc["lvs_subcircuits"] else: lvs_sub_file = "" @@ -128,7 +129,7 @@ def run_lvs(name, gds_name, sp_name, final_verification=False): f.write("avParameters(\n") f.write(" ?inputLayout ( \"gds2\" \"{}\" )\n".format(gds_name)) f.write(" ?cellName \"{}\"\n".format(name)) - f.write(" ?workingDirectory \"{}\"\n".format(OPTS.openram_temp)) + f.write(" ?workingDirectory \"{}\"\n".format(output_path)) f.write(" ?rulesFile \"{}\"\n".format(lvs_rules)) f.write(" ?autoGrid nil\n") f.write(" ?avrpt t\n") @@ -160,27 +161,38 @@ def run_lvs(name, gds_name, sp_name, final_verification=False): f.write("avLVS()\n") f.close() - # run lvs - cwd = os.getcwd() - os.chdir(OPTS.openram_temp) - cmd = "assura {0} 2> {1} 1> {2}".format(lvs_runset, lvs_log_file, lvs_log_file) - debug.info(1, cmd) - os.system(cmd) - os.chdir(cwd) + # run drc + run_file = output_path + "/run_vls.sh" + f = open(run_file, "w") + f.write("#!/bin/sh\n") + f.write("assura {0} 2> {1} 1> {2}\n".format(lvs_runset, lvs_log_file, lvs_log_file)) + f.close() + +def run_lvs(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. """ + + global num_lvs_runs + num_lvs_runs += 1 + + write_lvs_script(name, gds_name, sp_name, final_verification, OPTS.openram_temp) + + (outfile, errfile, resultsfile) = run_script(name, "drc") + errors = 0 try: - f = open(OPTS.openram_temp+name+".csm", "r") + f = open(OPTS.openram_temp + name + ".csm", "r") except: - debug.error("Unable to retrieve LVS results file.",1) + debug.error("Unable to retrieve LVS results file.", 1) results = f.readlines() f.close() for line in results: if re.search("errors", line): - errors = errors + 1 - debug.info(1, line) + errors = errors + 1 + debug.info(1, line) elif re.search("Schematic and Layout", line): - debug.info(1, line) + debug.info(1, line) return errors @@ -188,14 +200,19 @@ def run_lvs(name, gds_name, sp_name, final_verification=False): def run_pex(name, gds_name, sp_name, output=None, final_verification=False): """Run pex on a given top-level name which is implemented in gds_name and sp_name. """ - debug.error("PEX extraction not implemented with Assura.",-1) + debug.error("PEX extraction not implemented with Assura.", -1) global num_pex_runs num_pex_runs += 1 + def print_drc_stats(): - debug.info(1,"DRC runs: {0}".format(num_drc_runs)) + debug.info(1, "DRC runs: {0}".format(num_drc_runs)) + + def print_lvs_stats(): - debug.info(1,"LVS runs: {0}".format(num_lvs_runs)) + debug.info(1, "LVS runs: {0}".format(num_lvs_runs)) + + def print_pex_stats(): - debug.info(1,"PEX runs: {0}".format(num_pex_runs)) + debug.info(1, "PEX runs: {0}".format(num_pex_runs)) diff --git a/compiler/verify/calibre.py b/compiler/verify/calibre.py index 6970b271..68a2af8a 100644 --- a/compiler/verify/calibre.py +++ b/compiler/verify/calibre.py @@ -30,7 +30,7 @@ num_lvs_runs = 0 num_pex_runs = 0 -def write_calibre_drc_script(cell_name, extract, final_verification, gds_name): +def write_drc_script(cell_name, gds_name, extract, final_verification, output_path): """ Write a Calibre runset file and script to run DRC """ # the runset file contains all the options to run calibre from tech import drc @@ -38,7 +38,7 @@ def write_calibre_drc_script(cell_name, extract, final_verification, gds_name): drc_runset = { 'drcRulesFile': drc_rules, - 'drcRunDir': OPTS.openram_temp, + 'drcRunDir': output_path, 'drcLayoutPaths': gds_name, 'drcLayoutPrimary': cell_name, 'drcLayoutSystem': 'GDSII', @@ -50,17 +50,17 @@ def write_calibre_drc_script(cell_name, extract, final_verification, gds_name): } # write the runset file - f = open(OPTS.openram_temp + "drc_runset", "w") + f = open(output_path + "drc_runset", "w") for k in sorted(iter(drc_runset.keys())): f.write("*{0}: {1}\n".format(k, drc_runset[k])) f.close() # Create an auxiliary script to run calibre with the runset - run_file = OPTS.openram_temp + "run_drc.sh" + run_file = output_path + "run_drc.sh" f = open(run_file, "w") f.write("#!/bin/sh\n") cmd = "{0} -gui -drc {1}drc_runset -batch".format(OPTS.drc_exe[1], - OPTS.openram_temp) + output_path) f.write(cmd) f.write("\n") f.close() @@ -68,14 +68,14 @@ def write_calibre_drc_script(cell_name, extract, final_verification, gds_name): return drc_runset -def write_calibre_lvs_script(cell_name, final_verification, gds_name, sp_name): +def write_lvs_script(cell_name, gds_name, sp_name, final_verification, output_path): """ Write a Calibre runset file and script to run LVS """ from tech import drc lvs_rules = drc["lvs_rules"] lvs_runset = { 'lvsRulesFile': lvs_rules, - 'lvsRunDir': OPTS.openram_temp, + 'lvsRunDir': output_path, 'lvsLayoutPaths': gds_name, 'lvsLayoutPrimary': cell_name, 'lvsSourcePath': sp_name, @@ -111,19 +111,19 @@ def write_calibre_lvs_script(cell_name, final_verification, gds_name, sp_name): # write the runset file - f = open(OPTS.openram_temp + "lvs_runset", "w") + f = open(output_path + "lvs_runset", "w") for k in sorted(iter(lvs_runset.keys())): f.write("*{0}: {1}\n".format(k, lvs_runset[k])) f.close() # Create an auxiliary script to run calibre with the runset - run_file = OPTS.openram_temp + "run_lvs.sh" + run_file = output_path + "run_lvs.sh" f = open(run_file, "w") f.write("#!/bin/sh\n") PDK_DIR=os.environ.get("PDK_DIR") f.write("export PDK_DIR={}\n".format(PDK_DIR)) cmd = "{0} -gui -lvs {1}lvs_runset -batch".format(OPTS.lvs_exe[1], - OPTS.openram_temp) + output_path) f.write(cmd) f.write("\n") f.close() @@ -132,16 +132,16 @@ def write_calibre_lvs_script(cell_name, final_verification, gds_name, sp_name): return lvs_runset -def write_calibre_pex_script(cell_name, extract, output, final_verification): +def write_pex_script(cell_name, extract, output, final_verification, output_path): """ Write a pex script that can either just extract the netlist or the netlist+parasitics """ if output == None: output = cell_name + ".pex.sp" # check if lvs report has been done # if not run drc and lvs - if not os.path.isfile(OPTS.openram_temp + cell_name + ".lvs.report"): - gds_name = OPTS.openram_temp +"/"+ cell_name + ".gds" - sp_name = OPTS.openram_temp +"/"+ cell_name + ".sp" + if not os.path.isfile(output_path + cell_name + ".lvs.report"): + gds_name = output_path +"/"+ cell_name + ".gds" + sp_name = output_path +"/"+ cell_name + ".sp" run_drc(cell_name, gds_name) run_lvs(cell_name, gds_name, sp_name) @@ -149,7 +149,7 @@ def write_calibre_pex_script(cell_name, extract, output, final_verification): pex_rules = drc["xrc_rules"] pex_runset = { 'pexRulesFile': pex_rules, - 'pexRunDir': OPTS.openram_temp, + 'pexRunDir': output_path, 'pexLayoutPaths': cell_name + ".gds", 'pexLayoutPrimary': cell_name, 'pexSourcePath': cell_name + ".sp", @@ -162,13 +162,13 @@ def write_calibre_pex_script(cell_name, extract, output, final_verification): } # write the runset file - f = open(OPTS.openram_temp + "pex_runset", "w") + f = open(output_path + "pex_runset", "w") for k in sorted(iter(pex_runset.keys())): f.write("*{0}: {1}\n".format(k, pex_runset[k])) f.close() # Create an auxiliary script to run calibre with the runset - run_file = OPTS.openram_temp + "run_pex.sh" + run_file = output_path + "run_pex.sh" f = open(run_file, "w") f.write("#!/bin/sh\n") cmd = "{0} -gui -pex {1}pex_runset -batch".format(OPTS.pex_exe[1], @@ -198,7 +198,7 @@ def run_drc(cell_name, gds_name, extract=False, final_verification=False): if not os.path.isfile(OPTS.openram_temp + os.path.basename(gds_name)): shutil.copy(gds_name, OPTS.openram_temp) - drc_runset = write_calibre_drc_script(cell_name, extract, final_verification, gds_name) + drc_runset = write_drc_script(cell_name, gds_name, extract, final_verification, OPTS.openram_temp) if not os.path.isfile(OPTS.openram_temp + os.path.basename(gds_name)): shutil.copy(gds_name, OPTS.openram_temp + os.path.basename(gds_name)) @@ -212,7 +212,7 @@ def run_drc(cell_name, gds_name, extract=False, final_verification=False): try: f = open(OPTS.openram_temp + drc_runset['drcSummaryFile'], "r") except: - debug.error("Unable to retrieve DRC results file. Is calibre set up?",1) + debug.error("Unable to retrieve DRC results file. Is calibre set up?", 1) results = f.readlines() f.close() # those lines should be the last 3 @@ -241,7 +241,7 @@ def run_lvs(cell_name, gds_name, sp_name, final_verification=False): global num_lvs_runs num_lvs_runs += 1 - lvs_runset = write_calibre_lvs_script(cell_name, final_verification, gds_name, sp_name) + lvs_runset = write_lvs_script(cell_name, gds_name, sp_name, final_verification, OPTS.openram_temp) # Copy file to local dir if it isn't already if not os.path.isfile(OPTS.openram_temp + os.path.basename(gds_name)): @@ -328,7 +328,7 @@ def run_pex(cell_name, gds_name, sp_name, output=None, final_verification=False) global num_pex_runs num_pex_runs += 1 - write_calibre_pex_script(cell_name, True, output, final_verification) + write_pex_script(cell_name, True, output, final_verification, OPTS.openram_temp) # Copy file to local dir if it isn't already if not os.path.isfile(OPTS.openram_temp + os.path.basename(gds_name)): @@ -390,9 +390,14 @@ def correct_port(name, output_file_name, ref_file_name): output_file.write(part2) output_file.close() + def print_drc_stats(): - debug.info(1,"DRC runs: {0}".format(num_drc_runs)) + debug.info(1, "DRC runs: {0}".format(num_drc_runs)) + + def print_lvs_stats(): - debug.info(1,"LVS runs: {0}".format(num_lvs_runs)) + debug.info(1, "LVS runs: {0}".format(num_lvs_runs)) + + def print_pex_stats(): - debug.info(1,"PEX runs: {0}".format(num_pex_runs)) + debug.info(1, "PEX runs: {0}".format(num_pex_runs)) diff --git a/compiler/verify/magic.py b/compiler/verify/magic.py index 245d1408..04d9a4ac 100644 --- a/compiler/verify/magic.py +++ b/compiler/verify/magic.py @@ -66,12 +66,19 @@ def filter_gds(cell_name, input_gds, output_gds): (outfile, errfile, resultsfile) = run_script(cell_name, "filter") -def write_magic_script(cell_name, extract=False, final_verification=False): +def write_drc_script(cell_name, gds_name, extract, final_verification, output_path): """ Write a magic script to perform DRC and optionally extraction. """ global OPTS - run_file = OPTS.openram_temp + "run_drc.sh" + # Copy .magicrc file into the directory + magic_file = OPTS.openram_tech + "tech/.magicrc" + if os.path.exists(magic_file): + shutil.copy(magic_file, output_path) + else: + debug.warning("Could not locate .magicrc file: {}".format(magic_file)) + + run_file = output_path + "run_drc.sh" f = open(run_file, "w") f.write("#!/bin/sh\n") f.write("{} -dnull -noconsole << EOF\n".format(OPTS.drc_exe[1])) @@ -79,7 +86,7 @@ def write_magic_script(cell_name, extract=False, final_verification=False): f.write("gds warning default\n") f.write("gds flatten true\n") f.write("gds readonly true\n") - f.write("gds read {}.gds\n".format(cell_name)) + f.write("gds read {}\n".format(gds_name)) f.write("load {}\n".format(cell_name)) # Flatten the cell to get rid of DRCs spanning multiple layers # (e.g. with routes) @@ -131,32 +138,6 @@ def write_magic_script(cell_name, extract=False, final_verification=False): os.system("chmod u+x {}".format(run_file)) -def write_netgen_script(cell_name): - """ Write a netgen script to perform LVS. """ - - global OPTS - - setup_file = "setup.tcl" - full_setup_file = OPTS.openram_tech + "tech/" + setup_file - if os.path.exists(full_setup_file): - # Copy setup.tcl file into temp dir - shutil.copy(full_setup_file, OPTS.openram_temp) - else: - setup_file = 'nosetup' - - run_file = OPTS.openram_temp + "run_lvs.sh" - f = open(run_file, "w") - f.write("#!/bin/sh\n") - f.write("{} -noconsole << EOF\n".format(OPTS.lvs_exe[1])) - f.write("readnet spice {0}.spice\n".format(cell_name)) - f.write("readnet spice {0}.sp\n".format(cell_name)) - f.write("lvs {{{0}.spice {0}}} {{{0}.sp {0}}} {1} {0}.lvs.report -json\n".format(cell_name, setup_file)) - f.write("quit\n") - f.write("EOF\n") - f.close() - os.system("chmod u+x {}".format(run_file)) - - def run_drc(cell_name, gds_name, extract=True, final_verification=False): """Run DRC check on a cell which is implemented in gds_name.""" @@ -167,14 +148,7 @@ def run_drc(cell_name, gds_name, extract=True, final_verification=False): if os.path.dirname(gds_name)!=OPTS.openram_temp.rstrip('/'): shutil.copy(gds_name, OPTS.openram_temp) - # Copy .magicrc file into temp dir - magic_file = OPTS.openram_tech + "tech/.magicrc" - if os.path.exists(magic_file): - shutil.copy(magic_file, OPTS.openram_temp) - else: - debug.warning("Could not locate .magicrc file: {}".format(magic_file)) - - write_magic_script(cell_name, extract, final_verification) + write_drc_script(cell_name, gds_name, extract, final_verification, OPTS.openram_temp) (outfile, errfile, resultsfile) = run_script(cell_name, "drc") @@ -214,6 +188,32 @@ def run_drc(cell_name, gds_name, extract=True, final_verification=False): return errors +def write_lvs_script(cell_name, gds_name, sp_name, final_verification, output_path): + """ Write a netgen script to perform LVS. """ + + global OPTS + + setup_file = "setup.tcl" + full_setup_file = OPTS.openram_tech + "tech/" + setup_file + if os.path.exists(full_setup_file): + # Copy setup.tcl file into temp dir + shutil.copy(full_setup_file, output_path) + else: + setup_file = 'nosetup' + + run_file = output_path + "/run_lvs.sh" + f = open(run_file, "w") + f.write("#!/bin/sh\n") + f.write("{} -noconsole << EOF\n".format(OPTS.lvs_exe[1])) + # f.write("readnet spice {0}.spice\n".format(cell_name)) + # f.write("readnet spice {0}\n".format(sp_name)) + f.write("lvs {{{0}.spice {0}}} {{{1} {0}}} {2} {0}.lvs.report -json\n".format(cell_name, sp_name, setup_file)) + f.write("quit\n") + f.write("EOF\n") + f.close() + os.system("chmod u+x {}".format(run_file)) + + 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. Final verification will @@ -228,7 +228,7 @@ def run_lvs(cell_name, gds_name, sp_name, final_verification=False): if os.path.dirname(sp_name)!=OPTS.openram_temp.rstrip('/'): shutil.copy(sp_name, OPTS.openram_temp) - write_netgen_script(cell_name) + write_lvs_script(cell_name, gds_name, sp_name, final_verification, OPTS.openram_temp) (outfile, errfile, resultsfile) = run_script(cell_name, "lvs") @@ -238,7 +238,7 @@ def run_lvs(cell_name, gds_name, sp_name, final_verification=False): try: f = open(resultsfile, "r") except FileNotFoundError: - debug.error("Unable to load LVS results from {}".format(resultsfile),1) + debug.error("Unable to load LVS results from {}".format(resultsfile), 1) results = f.readlines() f.close() @@ -249,7 +249,7 @@ def run_lvs(cell_name, gds_name, sp_name, final_verification=False): if "Subcircuit summary:" in line: break else: - final_results.insert(0,line) + final_results.insert(0, line) # There were property errors in any module. test = re.compile("Property errors were found.") diff --git a/compiler/verify/none.py b/compiler/verify/none.py index f82d59ae..28a5a47b 100644 --- a/compiler/verify/none.py +++ b/compiler/verify/none.py @@ -17,6 +17,10 @@ lvs_warned = False pex_warned = False +def write_drc_script(cell_name, gds_name, extract, final_verification, output_path): + pass + + def run_drc(cell_name, gds_name, extract=False, final_verification=False): global drc_warned if not drc_warned: @@ -26,6 +30,10 @@ def run_drc(cell_name, gds_name, extract=False, final_verification=False): return 1 +def write_lvs_script(cell_name, gds_name, sp_name, final_verification, output_path): + pass + + def run_lvs(cell_name, gds_name, sp_name, final_verification=False): global lvs_warned if not lvs_warned: diff --git a/compiler/verify/run_script.py b/compiler/verify/run_script.py index 3bc8d2d8..f7bb2d9f 100644 --- a/compiler/verify/run_script.py +++ b/compiler/verify/run_script.py @@ -13,6 +13,7 @@ import os import debug from globals import OPTS + def run_script(cell_name, script="lvs"): """ Run script and create output files. """ @@ -30,5 +31,5 @@ def run_script(cell_name, script="lvs"): os.system(cmd) os.chdir(cwd) - return (outfile,errfile,resultsfile) + return (outfile, errfile, resultsfile) From 31d21e169fdb00d370d233b49aba4c297896ebc3 Mon Sep 17 00:00:00 2001 From: mrg Date: Mon, 9 Nov 2020 11:14:55 -0800 Subject: [PATCH 62/67] Skip LEF test as correct output keeps changing. --- compiler/tests/24_lef_sram_test.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/compiler/tests/24_lef_sram_test.py b/compiler/tests/24_lef_sram_test.py index 33c0120d..3e8f9a44 100755 --- a/compiler/tests/24_lef_sram_test.py +++ b/compiler/tests/24_lef_sram_test.py @@ -15,7 +15,7 @@ from globals import OPTS import debug -# @unittest.skip("SKIPPING 24_lef_sram_test") +@unittest.skip("SKIPPING 24_lef_sram_test") class lef_test(openram_test): def runTest(self): From 532492d5aea6ff7517da33f45648cc4b562d7fbd Mon Sep 17 00:00:00 2001 From: mrg Date: Mon, 9 Nov 2020 12:00:25 -0800 Subject: [PATCH 63/67] Output functional stimulus to output directory. --- compiler/characterizer/delay.py | 10 +- compiler/characterizer/functional.py | 25 +++-- compiler/characterizer/setup_hold.py | 95 ++++++++----------- compiler/characterizer/stimuli.py | 4 +- compiler/sram/sram.py | 28 +++--- .../tests/22_psram_1bank_2mux_func_test.py | 3 +- .../tests/22_psram_1bank_8mux_func_test.py | 3 +- .../tests/22_psram_1bank_nomux_func_test.py | 3 +- .../tests/22_sram_1bank_2mux_func_test.py | 3 +- .../22_sram_1bank_2mux_global_func_test.py | 3 +- .../22_sram_1bank_2mux_sparecols_func_test.py | 3 +- 11 files changed, 89 insertions(+), 91 deletions(-) diff --git a/compiler/characterizer/delay.py b/compiler/characterizer/delay.py index dfd845e9..a6edeb8f 100644 --- a/compiler/characterizer/delay.py +++ b/compiler/characterizer/delay.py @@ -306,7 +306,8 @@ class delay(simulation): self.create_test_cycles() # creates and opens stimulus file for writing - temp_stim = "{0}/stim.sp".format(OPTS.openram_temp) + self.delay_stim_sp = "delay_stim.sp" + temp_stim = "{0}/{1}".format(OPTS.openram_temp, self.delay_stim_sp) self.sf = open(temp_stim, "w") self.sf.write("* Delay stimulus for period of {0}n load={1}fF slew={2}ns\n\n".format(self.period, self.load, @@ -350,7 +351,8 @@ class delay(simulation): self.check_arguments() # creates and opens stimulus file for writing - temp_stim = "{0}/stim.sp".format(OPTS.openram_temp) + self.power_stim_sp = "power_stim.sp" + temp_stim = "{0}/{1}".format(OPTS.openram_temp, self.power_stim_sp) self.sf = open(temp_stim, "w") self.sf.write("* Power stimulus for period of {0}n\n\n".format(self.period)) self.stim = stimuli(self.sf, self.corner) @@ -616,7 +618,7 @@ class delay(simulation): self.write_delay_stimulus() - self.stim.run_sim() + self.stim.run_sim(self.delay_stim_sp) return self.check_measurements() @@ -772,7 +774,7 @@ class delay(simulation): debug.info(1, "Performing leakage power simulations.") self.write_power_stimulus(trim=False) - self.stim.run_sim() + self.stim.run_sim(self.power_stim_sp) leakage_power=parse_spice_list("timing", "leakage_power") debug.check(leakage_power!="Failed", "Could not measure leakage power.") debug.info(1, "Leakage power of full array is {0} mW".format(leakage_power * 1e3)) diff --git a/compiler/characterizer/functional.py b/compiler/characterizer/functional.py index 4ec218fc..8a511c42 100644 --- a/compiler/characterizer/functional.py +++ b/compiler/characterizer/functional.py @@ -21,13 +21,24 @@ class functional(simulation): for successful SRAM operation. """ - def __init__(self, sram, spfile, corner, cycles=15): + def __init__(self, sram, spfile, corner=None, cycles=15, period=None, output_path=None): super().__init__(sram, spfile, corner) # Seed the characterizer with a constant seed for unit tests if OPTS.is_unit_test: random.seed(12345) + if not corner: + corner = (OPTS.process_corners[0], OPTS.supply_voltages[0], OPTS.temperatures[0]) + + if period: + self.period = period + + if not output_path: + self.output_path = OPTS.openram_temp + else: + self.output_path = output_path + if self.write_size: self.num_wmasks = int(math.ceil(self.word_size / self.write_size)) else: @@ -58,15 +69,14 @@ class functional(simulation): self.read_check = [] self.read_results = [] - def run(self, feasible_period=None): - if feasible_period: # period defaults to tech.py feasible period otherwise. - self.period = feasible_period # Generate a random sequence of reads and writes self.create_random_memory_sequence() - # Run SPICE simulation + # Write SPICE simulation self.write_functional_stimulus() - self.stim.run_sim() + + def run(self): + self.stim.run_sim(self.stim_sp) # read dout values from SPICE simulation. If the values do not fall within the noise margins, return the error. (success, error) = self.read_stim_results() @@ -330,7 +340,8 @@ class functional(simulation): def write_functional_stimulus(self): """ Writes SPICE stimulus. """ - temp_stim = "{0}/stim.sp".format(OPTS.openram_temp) + self.stim_sp = "functional_stim.sp" + temp_stim = "{0}/{1}".format(self.output_path, self.stim_sp) self.sf = open(temp_stim, "w") self.sf.write("* Functional test stimulus file for {}ns period\n\n".format(self.period)) self.stim = stimuli(self.sf, self.corner) diff --git a/compiler/characterizer/setup_hold.py b/compiler/characterizer/setup_hold.py index 377ead67..c61e556e 100644 --- a/compiler/characterizer/setup_hold.py +++ b/compiler/characterizer/setup_hold.py @@ -27,23 +27,22 @@ class setup_hold(): self.model_location = OPTS.openram_tech + "sp_lib/dff.sp" self.period = tech.spice["feasible_period"] - debug.info(2,"Feasible period from technology file: {0} ".format(self.period)) + debug.info(2, "Feasible period from technology file: {0} ".format(self.period)) self.set_corner(corner) - - def set_corner(self,corner): + def set_corner(self, corner): """ Set the corner values """ self.corner = corner (self.process, self.vdd_voltage, self.temperature) = corner self.gnd_voltage = 0 - def write_stimulus(self, mode, target_time, correct_value): """Creates a stimulus file for SRAM setup/hold time calculation""" # creates and opens the stimulus file for writing - temp_stim = OPTS.openram_temp + "stim.sp" + self.stim_sp = "sh_stim.sp" + temp_stim = OPTS.openram_temp + self.stim_sp self.sf = open(temp_stim, "w") self.stim = stimuli(self.sf, self.corner) @@ -63,8 +62,7 @@ class setup_hold(): self.write_measures(mode=mode, correct_value=correct_value) - - self.stim.write_control(4*self.period) + self.stim.write_control(4 * self.period) self.sf.close() @@ -79,7 +77,6 @@ class setup_hold(): self.sf.write("\n* Global Power Supplies\n") self.stim.write_supply() - def write_data(self, mode, target_time, correct_value): """Create the data signals for setup/hold analysis. First period is to initialize it to the opposite polarity. Second period is used for @@ -113,14 +110,12 @@ class setup_hold(): # without using .IC on an internal node. # Return input to value after one period. # The second pulse is the characterization one at 2*period - clk_times=[0, 0.1*self.period,self.period,2*self.period], + clk_times=[0, 0.1 * self.period, self.period, 2 * self.period], data_values=[0, 1, 0, 1], - period=2*self.period, + period=2 * self.period, slew=self.constrained_input_slew, setup=0) - - def write_measures(self, mode, correct_value): """ Measure statements for setup/hold with right phases. """ @@ -139,7 +134,6 @@ class setup_hold(): else: din_rise_or_fall = "RISE" - self.sf.write("\n* Measure statements for pass/fail verification\n") trig_name = "clk" targ_name = "dout" @@ -152,8 +146,8 @@ class setup_hold(): targ_val=targ_val, trig_dir="RISE", targ_dir=dout_rise_or_fall, - trig_td=1.9*self.period, - targ_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 @@ -165,11 +159,8 @@ class setup_hold(): targ_val=targ_val, trig_dir="RISE", targ_dir=din_rise_or_fall, - trig_td=1.2*self.period, - targ_td=1.2*self.period) - - - + trig_td=1.2 * self.period, + targ_td=1.2 * self.period) def bidir_search(self, correct_value, mode): """ This will perform a bidirectional search for either setup or hold times. @@ -182,23 +173,26 @@ class setup_hold(): # this time. They are also unbalanced so that the average won't be right on the clock edge in the # first iteration. if mode == "SETUP": - feasible_bound = 1.25*self.period - infeasible_bound = 2.5*self.period + feasible_bound = 1.25 * self.period + infeasible_bound = 2.5 * self.period else: - infeasible_bound = 1.5*self.period - feasible_bound = 2.75*self.period + infeasible_bound = 1.5 * self.period + feasible_bound = 2.75 * self.period # Initial check if reference feasible bound time passes for correct_value, if not, we can't start the search! self.write_stimulus(mode=mode, target_time=feasible_bound, correct_value=correct_value) - self.stim.run_sim() + self.stim.run_sim(self.stim_sp) ideal_clk_to_q = convert_to_float(parse_spice_list("timing", "clk2q_delay")) setuphold_time = convert_to_float(parse_spice_list("timing", "setup_hold_time")) debug.info(2,"*** {0} CHECK: {1} Ideal Clk-to-Q: {2} Setup/Hold: {3}".format(mode, correct_value,ideal_clk_to_q,setuphold_time)) if type(ideal_clk_to_q)!=float or type(setuphold_time)!=float: - debug.error("Initial hold time fails for data value feasible bound {0} Clk-to-Q {1} Setup/Hold {2}".format(feasible_bound,ideal_clk_to_q,setuphold_time),2) + debug.error("Initial hold time fails for data value feasible bound {0} Clk-to-Q {1} Setup/Hold {2}".format(feasible_bound, + ideal_clk_to_q, + setuphold_time), + 2) if mode == "SETUP": # SETUP is clk-din, not din-clk setuphold_time *= -1e9 @@ -206,57 +200,53 @@ class setup_hold(): setuphold_time *= 1e9 passing_setuphold_time = setuphold_time - debug.info(2,"Checked initial {0} time {1}, data at {2}, clock at {3} ".format(mode, - setuphold_time, - feasible_bound, - 2*self.period)) + debug.info(2, "Checked initial {0} time {1}, data at {2}, clock at {3} ".format(mode, + setuphold_time, + feasible_bound, + 2 * self.period)) #raw_input("Press Enter to continue...") while True: - target_time = (feasible_bound + infeasible_bound)/2 + target_time = (feasible_bound + infeasible_bound) / 2 self.write_stimulus(mode=mode, target_time=target_time, correct_value=correct_value) - debug.info(2,"{0} value: {1} Target time: {2} Infeasible: {3} Feasible: {4}".format(mode, - correct_value, - target_time, - infeasible_bound, - feasible_bound)) - + debug.info(2, "{0} value: {1} Target time: {2} Infeasible: {3} Feasible: {4}".format(mode, + correct_value, + target_time, + infeasible_bound, + feasible_bound)) self.stim.run_sim() clk_to_q = convert_to_float(parse_spice_list("timing", "clk2q_delay")) setuphold_time = convert_to_float(parse_spice_list("timing", "setup_hold_time")) - if type(clk_to_q)==float and (clk_to_q<1.1*ideal_clk_to_q) and type(setuphold_time)==float: + if type(clk_to_q) == float and (clk_to_q < 1.1 * ideal_clk_to_q) and type(setuphold_time)==float: if mode == "SETUP": # SETUP is clk-din, not din-clk setuphold_time *= -1e9 else: setuphold_time *= 1e9 - debug.info(2,"PASS Clk-to-Q: {0} Setup/Hold: {1}".format(clk_to_q,setuphold_time)) + debug.info(2, "PASS Clk-to-Q: {0} Setup/Hold: {1}".format(clk_to_q, setuphold_time)) passing_setuphold_time = setuphold_time feasible_bound = target_time else: - debug.info(2,"FAIL Clk-to-Q: {0} Setup/Hold: {1}".format(clk_to_q,setuphold_time)) + debug.info(2, "FAIL Clk-to-Q: {0} Setup/Hold: {1}".format(clk_to_q, setuphold_time)) infeasible_bound = target_time - #raw_input("Press Enter to continue...") if relative_compare(feasible_bound, infeasible_bound, error_tolerance=0.001): - debug.info(3,"CONVERGE {0} vs {1}".format(feasible_bound,infeasible_bound)) + debug.info(3, "CONVERGE {0} vs {1}".format(feasible_bound, infeasible_bound)) break - debug.info(2,"Converged on {0} time {1}.".format(mode,passing_setuphold_time)) + debug.info(2, "Converged on {0} time {1}.".format(mode, passing_setuphold_time)) return passing_setuphold_time - def setup_LH_time(self): """Calculates the setup time for low-to-high transition for a DFF """ return self.bidir_search(1, "SETUP") - def setup_HL_time(self): """Calculates the setup time for high-to-low transition for a DFF """ @@ -272,7 +262,6 @@ class setup_hold(): """ return self.bidir_search(0, "HOLD") - def analyze(self, related_slews, constrained_slews): """main function to calculate both setup and hold time for the DFF and returns a dictionary that contains 4 lists for both @@ -301,10 +290,10 @@ class setup_hold(): # } # return times - for self.related_input_slew in related_slews: for self.constrained_input_slew in constrained_slews: - debug.info(1, "Clock slew: {0} Data slew: {1}".format(self.related_input_slew,self.constrained_input_slew)) + debug.info(1, "Clock slew: {0} Data slew: {1}".format(self.related_input_slew, + self.constrained_input_slew)) LH_setup_time = self.setup_LH_time() debug.info(1, " Setup Time for low_to_high transition: {0}".format(LH_setup_time)) HL_setup_time = self.setup_HL_time() @@ -325,7 +314,7 @@ class setup_hold(): } return times - def analytical_setuphold(self,related_slews, constrained_slews): + def analytical_setuphold(self, related_slews, constrained_slews): """ Just return the fixed setup/hold times from the technology. """ LH_setup = [] @@ -336,10 +325,10 @@ class setup_hold(): for self.related_input_slew in related_slews: for self.constrained_input_slew in constrained_slews: # convert from ps to ns - LH_setup.append(tech.spice["dff_setup"]/1e3) - HL_setup.append(tech.spice["dff_setup"]/1e3) - LH_hold.append(tech.spice["dff_hold"]/1e3) - HL_hold.append(tech.spice["dff_hold"]/1e3) + LH_setup.append(tech.spice["dff_setup"] / 1e3) + HL_setup.append(tech.spice["dff_setup"] / 1e3) + LH_hold.append(tech.spice["dff_hold"] / 1e3) + HL_hold.append(tech.spice["dff_hold"] / 1e3) times = {"setup_times_LH": LH_setup, "setup_times_HL": HL_setup, diff --git a/compiler/characterizer/stimuli.py b/compiler/characterizer/stimuli.py index a354e353..d2ef2358 100644 --- a/compiler/characterizer/stimuli.py +++ b/compiler/characterizer/stimuli.py @@ -299,9 +299,9 @@ class stimuli(): self.sf.write("\n*Nodes gnd and 0 are the same global ground node in ngspice/hspice/xa. Otherwise, this source may be needed.\n") self.sf.write("*V{0} {0} {1} {2}\n".format(self.gnd_name, gnd_node_name, 0.0)) - def run_sim(self): + def run_sim(self, name): """ Run hspice in batch mode and output rawfile to parse. """ - temp_stim = "{0}stim.sp".format(OPTS.openram_temp) + temp_stim = "{0}{1}".format(OPTS.openram_temp, name) import datetime start_time = datetime.datetime.now() debug.check(OPTS.spice_exe != "", "No spice simulator has been found.") diff --git a/compiler/sram/sram.py b/compiler/sram/sram.py index 2f3f412e..f86081b3 100644 --- a/compiler/sram/sram.py +++ b/compiler/sram/sram.py @@ -8,6 +8,8 @@ import datetime import os import debug +import verify +from characterizer import functional from globals import OPTS, print_time @@ -85,12 +87,11 @@ class sram(): gdsname = OPTS.output_path + self.s.name + ".gds" debug.print_raw("GDS: Writing to {0}".format(gdsname)) self.gds_write(gdsname) - from verify import write_drc_script - write_drc_script(cell_name=self.s.name, - gds_name=os.path.basename(gdsname), - extract=True, - final_verification=True, - output_path=OPTS.output_path) + verify.write_drc_script(cell_name=self.s.name, + gds_name=os.path.basename(gdsname), + extract=True, + final_verification=True, + output_path=OPTS.output_path) print_time("GDS", datetime.datetime.now(), start_time) # Create a LEF physical model @@ -105,6 +106,9 @@ class sram(): spname = OPTS.output_path + self.s.name + ".sp" debug.print_raw("SP: Writing to {0}".format(spname)) self.sp_write(spname) + functional(self.s, + os.path.basename(spname), + output_path=OPTS.output_path) print_time("Spice writing", datetime.datetime.now(), start_time) # Save the LVS file @@ -113,17 +117,15 @@ class sram(): debug.print_raw("LVS: Writing to {0}".format(lvsname)) self.lvs_write(lvsname) if not OPTS.netlist_only: - from verify import write_lvs_script - write_lvs_script(cell_name=self.s.name, - gds_name=os.path.basename(gdsname), - sp_name=os.path.basename(lvsname), - final_verification=True, - output_path=OPTS.output_path) + verify.write_lvs_script(cell_name=self.s.name, + gds_name=os.path.basename(gdsname), + sp_name=os.path.basename(lvsname), + final_verification=True, + output_path=OPTS.output_path) print_time("LVS writing", datetime.datetime.now(), start_time) # Save the extracted spice file if OPTS.use_pex: - import verify start_time = datetime.datetime.now() # Output the extracted design if requested pexname = OPTS.output_path + self.s.name + ".pex.sp" diff --git a/compiler/tests/22_psram_1bank_2mux_func_test.py b/compiler/tests/22_psram_1bank_2mux_func_test.py index 3876e69b..ecb3bdf3 100755 --- a/compiler/tests/22_psram_1bank_2mux_func_test.py +++ b/compiler/tests/22_psram_1bank_2mux_func_test.py @@ -56,8 +56,7 @@ class psram_1bank_2mux_func_test(openram_test): tempspice = OPTS.openram_temp + "sram.sp" s.sp_write(tempspice) - corner = (OPTS.process_corners[0], OPTS.supply_voltages[0], OPTS.temperatures[0]) - f = functional(s.s, tempspice, corner) + f = functional(s.s, tempspice) (fail, error) = f.run() self.assertTrue(fail, error) diff --git a/compiler/tests/22_psram_1bank_8mux_func_test.py b/compiler/tests/22_psram_1bank_8mux_func_test.py index 345e50e0..d94b0660 100755 --- a/compiler/tests/22_psram_1bank_8mux_func_test.py +++ b/compiler/tests/22_psram_1bank_8mux_func_test.py @@ -57,8 +57,7 @@ class psram_1bank_8mux_func_test(openram_test): tempspice = OPTS.openram_temp + "sram.sp" s.sp_write(tempspice) - corner = (OPTS.process_corners[0], OPTS.supply_voltages[0], OPTS.temperatures[0]) - f = functional(s.s, tempspice, corner) + f = functional(s.s, tempspice) (fail, error) = f.run() self.assertTrue(fail, error) diff --git a/compiler/tests/22_psram_1bank_nomux_func_test.py b/compiler/tests/22_psram_1bank_nomux_func_test.py index 3fe522ea..f9d400e3 100755 --- a/compiler/tests/22_psram_1bank_nomux_func_test.py +++ b/compiler/tests/22_psram_1bank_nomux_func_test.py @@ -56,8 +56,7 @@ class psram_1bank_nomux_func_test(openram_test): tempspice = OPTS.openram_temp + "sram.sp" s.sp_write(tempspice) - corner = (OPTS.process_corners[0], OPTS.supply_voltages[0], OPTS.temperatures[0]) - f = functional(s.s, tempspice, corner) + f = functional(s.s, tempspice) (fail, error) = f.run() self.assertTrue(fail, error) diff --git a/compiler/tests/22_sram_1bank_2mux_func_test.py b/compiler/tests/22_sram_1bank_2mux_func_test.py index 3c48787f..bc1a430c 100755 --- a/compiler/tests/22_sram_1bank_2mux_func_test.py +++ b/compiler/tests/22_sram_1bank_2mux_func_test.py @@ -46,8 +46,7 @@ class sram_1bank_2mux_func_test(openram_test): tempspice = OPTS.openram_temp + "sram.sp" s.sp_write(tempspice) - corner = (OPTS.process_corners[0], OPTS.supply_voltages[0], OPTS.temperatures[0]) - f = functional(s.s, tempspice, corner) + f = functional(s.s, tempspice) (fail, error) = f.run() self.assertTrue(fail, error) diff --git a/compiler/tests/22_sram_1bank_2mux_global_func_test.py b/compiler/tests/22_sram_1bank_2mux_global_func_test.py index e012bf23..e815c826 100755 --- a/compiler/tests/22_sram_1bank_2mux_global_func_test.py +++ b/compiler/tests/22_sram_1bank_2mux_global_func_test.py @@ -48,8 +48,7 @@ class sram_1bank_2mux_func_test(openram_test): tempspice = OPTS.openram_temp + "sram.sp" s.sp_write(tempspice) - corner = (OPTS.process_corners[0], OPTS.supply_voltages[0], OPTS.temperatures[0]) - f = functional(s.s, tempspice, corner) + f = functional(s.s, tempspice) (fail, error) = f.run() self.assertTrue(fail, error) diff --git a/compiler/tests/22_sram_1bank_2mux_sparecols_func_test.py b/compiler/tests/22_sram_1bank_2mux_sparecols_func_test.py index 1ce68a54..887608e5 100755 --- a/compiler/tests/22_sram_1bank_2mux_sparecols_func_test.py +++ b/compiler/tests/22_sram_1bank_2mux_sparecols_func_test.py @@ -48,8 +48,7 @@ class sram_1bank_2mux_sparecols_func_test(openram_test): tempspice = OPTS.openram_temp + "sram.sp" s.sp_write(tempspice) - corner = (OPTS.process_corners[0], OPTS.supply_voltages[0], OPTS.temperatures[0]) - f = functional(s.s, tempspice, corner) + f = functional(s.s, tempspice) (fail, error) = f.run() self.assertTrue(fail, error) From e31cbeaa6fb7861bf4f510d8cdda57c2ff2fbfcb Mon Sep 17 00:00:00 2001 From: mrg Date: Mon, 9 Nov 2020 12:11:47 -0800 Subject: [PATCH 64/67] Don't check for file to determine if it is included. --- compiler/characterizer/stimuli.py | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/compiler/characterizer/stimuli.py b/compiler/characterizer/stimuli.py index d2ef2358..b7a84cb6 100644 --- a/compiler/characterizer/stimuli.py +++ b/compiler/characterizer/stimuli.py @@ -285,10 +285,7 @@ class stimuli(): includes = self.device_models + [circuit] for item in list(includes): - if os.path.isfile(item): - self.sf.write(".include \"{0}\"\n".format(item)) - else: - debug.error("Could not find spice model: {0}\nSet SPICE_MODEL_DIR to over-ride path.\n".format(item)) + self.sf.write(".include \"{0}\"\n".format(item)) def write_supply(self): """ Writes supply voltage statements """ From 0ba2feee53b36a477ff663cc99ae0eb4728d2534 Mon Sep 17 00:00:00 2001 From: mrg Date: Mon, 9 Nov 2020 13:59:46 -0800 Subject: [PATCH 65/67] Fix errors in new run_sim calls and corners --- compiler/characterizer/delay.py | 2 +- compiler/characterizer/setup_hold.py | 2 +- compiler/globals.py | 2 +- compiler/tests/22_sram_1bank_4mux_func_test.py | 3 +-- compiler/tests/22_sram_1bank_8mux_func_test.py | 3 +-- compiler/tests/22_sram_1bank_nomux_1rw_1r_func_test.py | 3 +-- compiler/tests/22_sram_1bank_nomux_func_test.py | 3 +-- compiler/tests/22_sram_1bank_nomux_sparecols_func_test.py | 3 +-- compiler/tests/22_sram_1bank_wmask_1rw_1r_func_test.py | 3 +-- compiler/tests/22_sram_wmask_func_test.py | 3 +-- compiler/tests/26_hspice_pex_pinv_test.py | 2 +- compiler/tests/26_ngspice_pex_pinv_test.py | 2 +- compiler/verify/__init__.py | 2 +- 13 files changed, 13 insertions(+), 20 deletions(-) diff --git a/compiler/characterizer/delay.py b/compiler/characterizer/delay.py index a6edeb8f..dfb05db3 100644 --- a/compiler/characterizer/delay.py +++ b/compiler/characterizer/delay.py @@ -782,7 +782,7 @@ class delay(simulation): # sys.exit(1) self.write_power_stimulus(trim=True) - self.stim.run_sim() + self.stim.run_sim(self.power_stim_sp) trim_leakage_power=parse_spice_list("timing", "leakage_power") debug.check(trim_leakage_power!="Failed", "Could not measure leakage power.") debug.info(1, "Leakage power of trimmed array is {0} mW".format(trim_leakage_power * 1e3)) diff --git a/compiler/characterizer/setup_hold.py b/compiler/characterizer/setup_hold.py index c61e556e..f3b9541c 100644 --- a/compiler/characterizer/setup_hold.py +++ b/compiler/characterizer/setup_hold.py @@ -218,7 +218,7 @@ class setup_hold(): infeasible_bound, feasible_bound)) - self.stim.run_sim() + self.stim.run_sim(self.stim_sp) clk_to_q = convert_to_float(parse_spice_list("timing", "clk2q_delay")) setuphold_time = convert_to_float(parse_spice_list("timing", "setup_hold_time")) if type(clk_to_q) == float and (clk_to_q < 1.1 * ideal_clk_to_q) and type(setuphold_time)==float: diff --git a/compiler/globals.py b/compiler/globals.py index 23bb5bfb..c6980d9e 100644 --- a/compiler/globals.py +++ b/compiler/globals.py @@ -469,7 +469,7 @@ def set_default_corner(): if OPTS.nominal_corner_only: OPTS.process_corners = ["TT"] else: - OPTS.process_corners = tech.spice["fet_models"].keys() + OPTS.process_corners = list(tech.spice["fet_models"].keys()) if (OPTS.supply_voltages == ""): if OPTS.nominal_corner_only: diff --git a/compiler/tests/22_sram_1bank_4mux_func_test.py b/compiler/tests/22_sram_1bank_4mux_func_test.py index ee7795c0..2065a4a2 100755 --- a/compiler/tests/22_sram_1bank_4mux_func_test.py +++ b/compiler/tests/22_sram_1bank_4mux_func_test.py @@ -46,8 +46,7 @@ class sram_1bank_4mux_func_test(openram_test): tempspice = OPTS.openram_temp + "sram.sp" s.sp_write(tempspice) - corner = (OPTS.process_corners[0], OPTS.supply_voltages[0], OPTS.temperatures[0]) - f = functional(s.s, tempspice, corner) + f = functional(s.s, tempspice) (fail, error) = f.run() self.assertTrue(fail, error) diff --git a/compiler/tests/22_sram_1bank_8mux_func_test.py b/compiler/tests/22_sram_1bank_8mux_func_test.py index 7600b7c0..a4f2ca31 100755 --- a/compiler/tests/22_sram_1bank_8mux_func_test.py +++ b/compiler/tests/22_sram_1bank_8mux_func_test.py @@ -49,8 +49,7 @@ class sram_1bank_8mux_func_test(openram_test): tempspice = OPTS.openram_temp + "sram.sp" s.sp_write(tempspice) - corner = (OPTS.process_corners[0], OPTS.supply_voltages[0], OPTS.temperatures[0]) - f = functional(s.s, tempspice, corner) + f = functional(s.s, tempspice) (fail, error) = f.run() self.assertTrue(fail, error) diff --git a/compiler/tests/22_sram_1bank_nomux_1rw_1r_func_test.py b/compiler/tests/22_sram_1bank_nomux_1rw_1r_func_test.py index fbeb08c5..4f3368c2 100755 --- a/compiler/tests/22_sram_1bank_nomux_1rw_1r_func_test.py +++ b/compiler/tests/22_sram_1bank_nomux_1rw_1r_func_test.py @@ -49,8 +49,7 @@ class psram_1bank_nomux_func_test(openram_test): tempspice = OPTS.openram_temp + "sram.sp" s.sp_write(tempspice) - corner = (OPTS.process_corners[0], OPTS.supply_voltages[0], OPTS.temperatures[0]) - f = functional(s.s, tempspice, corner) + f = functional(s.s, tempspice) (fail, error) = f.run() self.assertTrue(fail, error) diff --git a/compiler/tests/22_sram_1bank_nomux_func_test.py b/compiler/tests/22_sram_1bank_nomux_func_test.py index 27dfc4e5..17d3c951 100755 --- a/compiler/tests/22_sram_1bank_nomux_func_test.py +++ b/compiler/tests/22_sram_1bank_nomux_func_test.py @@ -45,8 +45,7 @@ class sram_1bank_nomux_func_test(openram_test): tempspice = OPTS.openram_temp + "sram.sp" s.sp_write(tempspice) - corner = (OPTS.process_corners[0], OPTS.supply_voltages[0], OPTS.temperatures[0]) - f = functional(s.s, tempspice, corner) + f = functional(s.s, tempspice) (fail, error) = f.run() self.assertTrue(fail, error) diff --git a/compiler/tests/22_sram_1bank_nomux_sparecols_func_test.py b/compiler/tests/22_sram_1bank_nomux_sparecols_func_test.py index 0df39226..5199da62 100755 --- a/compiler/tests/22_sram_1bank_nomux_sparecols_func_test.py +++ b/compiler/tests/22_sram_1bank_nomux_sparecols_func_test.py @@ -46,8 +46,7 @@ class sram_1bank_nomux_sparecols_func_test(openram_test): tempspice = OPTS.openram_temp + "sram.sp" s.sp_write(tempspice) - corner = (OPTS.process_corners[0], OPTS.supply_voltages[0], OPTS.temperatures[0]) - f = functional(s.s, tempspice, corner) + f = functional(s.s, tempspice) (fail, error) = f.run() self.assertTrue(fail, error) diff --git a/compiler/tests/22_sram_1bank_wmask_1rw_1r_func_test.py b/compiler/tests/22_sram_1bank_wmask_1rw_1r_func_test.py index f5573ae2..1af4846d 100755 --- a/compiler/tests/22_sram_1bank_wmask_1rw_1r_func_test.py +++ b/compiler/tests/22_sram_1bank_wmask_1rw_1r_func_test.py @@ -52,8 +52,7 @@ class sram_wmask_1w_1r_func_test(openram_test): tempspice = OPTS.openram_temp + "sram.sp" s.sp_write(tempspice) - corner = (OPTS.process_corners[0], OPTS.supply_voltages[0], OPTS.temperatures[0]) - f = functional(s.s, tempspice, corner) + f = functional(s.s, tempspice) (fail, error) = f.run() self.assertTrue(fail, error) diff --git a/compiler/tests/22_sram_wmask_func_test.py b/compiler/tests/22_sram_wmask_func_test.py index dd3ac8d7..d921ade8 100755 --- a/compiler/tests/22_sram_wmask_func_test.py +++ b/compiler/tests/22_sram_wmask_func_test.py @@ -48,8 +48,7 @@ class sram_wmask_func_test(openram_test): tempspice = OPTS.openram_temp + "sram.sp" s.sp_write(tempspice) - corner = (OPTS.process_corners[0], OPTS.supply_voltages[0], OPTS.temperatures[0]) - f = functional(s.s, tempspice, corner) + f = functional(s.s, tempspice) (fail, error) = f.run() self.assertTrue(fail, error) diff --git a/compiler/tests/26_hspice_pex_pinv_test.py b/compiler/tests/26_hspice_pex_pinv_test.py index 74f1ae9c..425c14fe 100755 --- a/compiler/tests/26_hspice_pex_pinv_test.py +++ b/compiler/tests/26_hspice_pex_pinv_test.py @@ -77,7 +77,7 @@ class hspice_pex_pinv_test(openram_test): sim_file = OPTS.openram_temp + "stim.sp" log_file_name = "timing" test_sim = self.write_simulation(sim_file, test_module, top_level_name) - test_sim.run_sim() + test_sim.run_sim("stim.sp") delay = parse_spice_list(log_file_name, "pinv_delay") return delay diff --git a/compiler/tests/26_ngspice_pex_pinv_test.py b/compiler/tests/26_ngspice_pex_pinv_test.py index 7e3800ec..233e3f5e 100755 --- a/compiler/tests/26_ngspice_pex_pinv_test.py +++ b/compiler/tests/26_ngspice_pex_pinv_test.py @@ -76,7 +76,7 @@ class ngspice_pex_pinv_test(openram_test): sim_file = OPTS.openram_temp + "stim.sp" log_file_name = "timing" test_sim = self.write_simulation(sim_file, test_module, top_level_name) - test_sim.run_sim() + test_sim.run_sim("stim.sp") delay = parse_spice_list(log_file_name, "pinv_delay") return delay diff --git a/compiler/verify/__init__.py b/compiler/verify/__init__.py index b084f053..8b7a6233 100644 --- a/compiler/verify/__init__.py +++ b/compiler/verify/__init__.py @@ -40,7 +40,7 @@ else: OPTS.magic_exe = get_tool("GDS", ["magic"]) if not OPTS.drc_exe: - from .none import run_drc, print_drc_stats + from .none import run_drc, print_drc_stats, write_drc_script elif "calibre"==OPTS.drc_exe[0]: from .calibre import run_drc, print_drc_stats, write_drc_script elif "assura"==OPTS.drc_exe[0]: From 57e708a6e1d4baec9098114229c26a544f0c4c18 Mon Sep 17 00:00:00 2001 From: mrg Date: Mon, 9 Nov 2020 15:20:36 -0800 Subject: [PATCH 66/67] Add 200 cycles. Can be commented out or run for shorter. --- compiler/sram/sram.py | 1 + 1 file changed, 1 insertion(+) diff --git a/compiler/sram/sram.py b/compiler/sram/sram.py index f86081b3..a3480213 100644 --- a/compiler/sram/sram.py +++ b/compiler/sram/sram.py @@ -108,6 +108,7 @@ class sram(): self.sp_write(spname) functional(self.s, os.path.basename(spname), + cycles=200, output_path=OPTS.output_path) print_time("Spice writing", datetime.datetime.now(), start_time) From 56c2222c2b32dae3ef5b26d7dc999120ac942cad Mon Sep 17 00:00:00 2001 From: mrg Date: Tue, 10 Nov 2020 13:37:18 -0800 Subject: [PATCH 67/67] Temp comment Magic GDS filter code. --- compiler/verify/__init__.py | 18 ++++++------- compiler/verify/calibre.py | 3 ++- compiler/verify/magic.py | 54 ++++++++++++++++++------------------- 3 files changed, 38 insertions(+), 37 deletions(-) diff --git a/compiler/verify/__init__.py b/compiler/verify/__init__.py index 8b7a6233..136d6b45 100644 --- a/compiler/verify/__init__.py +++ b/compiler/verify/__init__.py @@ -29,15 +29,15 @@ if not OPTS.check_lvsdrc: OPTS.drc_exe = None OPTS.lvs_exe = None OPTS.pex_exe = None - if OPTS.tech_name == "sky130": - OPTS.magic_exe = None + # if OPTS.tech_name == "sky130": + # OPTS.magic_exe = None else: debug.info(1, "Finding DRC/LVS/PEX tools.") OPTS.drc_exe = get_tool("DRC", ["calibre", "assura", "magic"], drc_name) OPTS.lvs_exe = get_tool("LVS", ["calibre", "assura", "netgen"], lvs_name) OPTS.pex_exe = get_tool("PEX", ["calibre", "magic"], pex_name) - if OPTS.tech_name == "sky130": - OPTS.magic_exe = get_tool("GDS", ["magic"]) + # if OPTS.tech_name == "sky130": + # OPTS.magic_exe = get_tool("GDS", ["magic"]) if not OPTS.drc_exe: from .none import run_drc, print_drc_stats, write_drc_script @@ -74,9 +74,9 @@ else: debug.warning("Did not find a supported PEX tool." + "Disable DRC/LVS with check_lvsdrc=False to ignore.", 2) -if OPTS.tech_name == "sky130": - if OPTS.magic_exe and "magic"==OPTS.magic_exe[0]: - from .magic import filter_gds - else: - debug.warning("Did not find Magic.") +# if OPTS.tech_name == "sky130": +# if OPTS.magic_exe and "magic"==OPTS.magic_exe[0]: +# from .magic import filter_gds +# else: +# debug.warning("Did not find Magic.") diff --git a/compiler/verify/calibre.py b/compiler/verify/calibre.py index 68a2af8a..d45cfe09 100644 --- a/compiler/verify/calibre.py +++ b/compiler/verify/calibre.py @@ -189,7 +189,8 @@ def run_drc(cell_name, gds_name, extract=False, final_verification=False): num_drc_runs += 1 # Filter the layouts through magic as a GDS filter for nsdm/psdm/nwell merging - if OPTS.tech_name == "sky130" and False: + # Disabled for now + if False and OPTS.tech_name == "sky130": shutil.copy(gds_name, OPTS.openram_temp + "temp.gds") from magic import filter_gds filter_gds(cell_name, OPTS.openram_temp + "temp.gds", OPTS.openram_temp + cell_name + ".gds") diff --git a/compiler/verify/magic.py b/compiler/verify/magic.py index 04d9a4ac..c2f13cc4 100644 --- a/compiler/verify/magic.py +++ b/compiler/verify/magic.py @@ -33,37 +33,37 @@ num_lvs_runs = 0 num_pex_runs = 0 -def filter_gds(cell_name, input_gds, output_gds): - """ Run the gds through magic for any layer processing """ - global OPTS +# def filter_gds(cell_name, input_gds, output_gds): +# """ Run the gds through magic for any layer processing """ +# global OPTS - # Copy .magicrc file into temp dir - magic_file = OPTS.openram_tech + "tech/.magicrc" - if os.path.exists(magic_file): - shutil.copy(magic_file, OPTS.openram_temp) - else: - debug.warning("Could not locate .magicrc file: {}".format(magic_file)) +# # Copy .magicrc file into temp dir +# magic_file = OPTS.openram_tech + "tech/.magicrc" +# if os.path.exists(magic_file): +# shutil.copy(magic_file, OPTS.openram_temp) +# else: +# debug.warning("Could not locate .magicrc file: {}".format(magic_file)) - run_file = OPTS.openram_temp + "run_filter.sh" - f = open(run_file, "w") - f.write("#!/bin/sh\n") - f.write("{} -dnull -noconsole << EOF\n".format(OPTS.magic_exe[1])) - f.write("gds polygon subcell true\n") - f.write("gds warning default\n") - f.write("gds read {}\n".format(input_gds)) - f.write("load {}\n".format(cell_name)) - f.write("cellname delete \\(UNNAMED\\)\n") - #f.write("writeall force\n") - f.write("select top cell\n") - f.write("gds write {}\n".format(output_gds)) - f.write("quit -noprompt\n") - f.write("EOF\n") +# run_file = OPTS.openram_temp + "run_filter.sh" +# f = open(run_file, "w") +# f.write("#!/bin/sh\n") +# f.write("{} -dnull -noconsole << EOF\n".format(OPTS.magic_exe[1])) +# f.write("gds polygon subcell true\n") +# f.write("gds warning default\n") +# f.write("gds read {}\n".format(input_gds)) +# f.write("load {}\n".format(cell_name)) +# f.write("cellname delete \\(UNNAMED\\)\n") +# #f.write("writeall force\n") +# f.write("select top cell\n") +# f.write("gds write {}\n".format(output_gds)) +# f.write("quit -noprompt\n") +# f.write("EOF\n") - f.close() - os.system("chmod u+x {}".format(run_file)) +# f.close() +# os.system("chmod u+x {}".format(run_file)) - (outfile, errfile, resultsfile) = run_script(cell_name, "filter") +# (outfile, errfile, resultsfile) = run_script(cell_name, "filter") def write_drc_script(cell_name, gds_name, extract, final_verification, output_path): @@ -71,7 +71,7 @@ def write_drc_script(cell_name, gds_name, extract, final_verification, output_pa global OPTS - # Copy .magicrc file into the directory + # Copy .magicrc file into the output directory magic_file = OPTS.openram_tech + "tech/.magicrc" if os.path.exists(magic_file): shutil.copy(magic_file, output_path)