From 2d539a1b9588f0c6abe3bdc3a8a531fdd53030c2 Mon Sep 17 00:00:00 2001 From: Jesse Cirimelli-Low Date: Sat, 20 Oct 2018 14:13:18 -0700 Subject: [PATCH 01/78] moved css into a seperate file to organize and disambiguate docstrings from multiline strings --- compiler/datasheet/assets/datasheet.css | 26 +++++++++++++++++++++ compiler/datasheet/datasheet.py | 30 +++---------------------- 2 files changed, 29 insertions(+), 27 deletions(-) create mode 100644 compiler/datasheet/assets/datasheet.css diff --git a/compiler/datasheet/assets/datasheet.css b/compiler/datasheet/assets/datasheet.css new file mode 100644 index 00000000..5d5a04e5 --- /dev/null +++ b/compiler/datasheet/assets/datasheet.css @@ -0,0 +1,26 @@ + + diff --git a/compiler/datasheet/datasheet.py b/compiler/datasheet/datasheet.py index 543c75fa..f9edb5da 100644 --- a/compiler/datasheet/datasheet.py +++ b/compiler/datasheet/datasheet.py @@ -20,34 +20,10 @@ class datasheet(): def generate_html(self): - self.html = """""" + with open(os.path.abspath(os.environ.get("OPENRAM_HOME")) + '/datasheet/assets/datasheet.css', 'r') as datasheet_css: + self.html += datasheet_css.read() + self.html +='

'+ self.name + '.html' + '

' -# self.html +='

{0}

' -# self.html +='

{0}

' self.html +='

Ports and Configuration (DEBUG)

' self.html += in_out(self.io,table_id='data').__html__().replace('<','<').replace('"','"').replace('>',">") From fcfee649d5a9adc212780eac465bb61e0eb94e4b Mon Sep 17 00:00:00 2001 From: Jesse Cirimelli-Low Date: Sat, 20 Oct 2018 14:13:18 -0700 Subject: [PATCH 02/78] moved css into a seperate file to organize and disambiguate docstrings from multiline strings --- compiler/datasheet/assets/datasheet.css | 26 +++++++++++++++++++++ compiler/datasheet/datasheet.py | 30 +++---------------------- 2 files changed, 29 insertions(+), 27 deletions(-) create mode 100644 compiler/datasheet/assets/datasheet.css diff --git a/compiler/datasheet/assets/datasheet.css b/compiler/datasheet/assets/datasheet.css new file mode 100644 index 00000000..5d5a04e5 --- /dev/null +++ b/compiler/datasheet/assets/datasheet.css @@ -0,0 +1,26 @@ + + diff --git a/compiler/datasheet/datasheet.py b/compiler/datasheet/datasheet.py index 543c75fa..f9edb5da 100644 --- a/compiler/datasheet/datasheet.py +++ b/compiler/datasheet/datasheet.py @@ -20,34 +20,10 @@ class datasheet(): def generate_html(self): - self.html = """""" + with open(os.path.abspath(os.environ.get("OPENRAM_HOME")) + '/datasheet/assets/datasheet.css', 'r') as datasheet_css: + self.html += datasheet_css.read() + self.html +='

'+ self.name + '.html' + '

' -# self.html +='

{0}

' -# self.html +='

{0}

' self.html +='

Ports and Configuration (DEBUG)

' self.html += in_out(self.io,table_id='data').__html__().replace('<','<').replace('"','"').replace('>',">") From f1fb174b530d9fd19b2346389fe30700773651b4 Mon Sep 17 00:00:00 2001 From: Jesse Cirimelli-Low Date: Sat, 27 Oct 2018 11:21:06 -0700 Subject: [PATCH 03/78] fixed bug where netlist_only still produced layout deliverables --- compiler/datasheet/datasheet_gen.py | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/compiler/datasheet/datasheet_gen.py b/compiler/datasheet/datasheet_gen.py index e68e94df..a16959f0 100644 --- a/compiler/datasheet/datasheet_gen.py +++ b/compiler/datasheet/datasheet_gen.py @@ -117,12 +117,17 @@ def parse_file(f,pages): new_sheet.timing.append(timing_and_current_data_item('Standby current','2','3','4')) new_sheet.timing.append(timing_and_current_data_item('Area','2','3','4')) + if not OPTS.netlist_only: + new_sheet.dlv.append(deliverables_item('.gds','GDSII layout views','{1}.{2}'.format(OUT_DIR,NAME,'gds'))) + new_sheet.dlv.append(deliverables_item('.lef','LEF files','{1}.{2}'.format(OUT_DIR,NAME,'lef'))) + new_sheet.dlv.append(deliverables_item('.sp','SPICE netlists','{1}.{2}'.format(OUT_DIR,NAME,'sp'))) new_sheet.dlv.append(deliverables_item('.v','Verilog simulation models','{1}.{2}'.format(OUT_DIR,NAME,'v'))) - new_sheet.dlv.append(deliverables_item('.gds','GDSII layout views','{1}.{2}'.format(OUT_DIR,NAME,'gds'))) - new_sheet.dlv.append(deliverables_item('.lef','LEF files','{1}.{2}'.format(OUT_DIR,NAME,'lef'))) + new_sheet.dlv.append(deliverables_item('.html','This datasheet','{1}.{2}'.format(OUT_DIR,NAME,'html'))) new_sheet.dlv.append(deliverables_item('.lib','Synthesis models','{1}'.format(LIB_NAME,LIB_NAME.replace(OUT_DIR,'')))) + + new_sheet.io.append(in_out_item('WORD_SIZE',WORD_SIZE)) new_sheet.io.append(in_out_item('NUM_WORDS',NUM_WORDS)) From 2da90c4b6a8634d2f78058fc4909539768148411 Mon Sep 17 00:00:00 2001 From: Jesse Cirimelli-Low Date: Sat, 27 Oct 2018 12:04:10 -0700 Subject: [PATCH 04/78] fixed double counting of characterization tuple permutations --- compiler/characterizer/lib.py | 22 ++++++---------------- 1 file changed, 6 insertions(+), 16 deletions(-) diff --git a/compiler/characterizer/lib.py b/compiler/characterizer/lib.py index 6cc177f6..72cadc45 100644 --- a/compiler/characterizer/lib.py +++ b/compiler/characterizer/lib.py @@ -82,7 +82,7 @@ class lib: debug.info(1,"Writing to {0}".format(lib_name)) self.characterize() self.lib.close() - self.parse_info() + self.parse_info(self.corner,lib_name) def characterize(self): """ Characterize the current corner. """ @@ -501,31 +501,21 @@ class lib: self.times = self.sh.analyze(self.slews,self.slews) - def parse_info(self): + def parse_info(self,corner,lib_name): if OPTS.is_unit_test: return datasheet = open(OPTS.openram_temp +'/datasheet.info', 'a+') - - for (corner, lib_name) in zip(self.corners, self.lib_files): - -# ports = "" -# if OPTS.num_rw_ports>0: -# ports += "{}_".format(OPTS.num_rw_ports) -# if OPTS.num_w_ports>0: -# ports += "{}_".format(OPTS.num_w_ports) -# if OPTS.num_r_ports>0: -# ports += "{}_".format(OPTS.num_r_ports) - datasheet.write("{0},{1},{2},{3},{4},{5},{6},{7},{8},{9},{10},{11},{12},{13}".format("sram_{0}_{1}_{2}".format(OPTS.word_size, OPTS.num_words, OPTS.tech_name), + datasheet.write("{0},{1},{2},{3},{4},{5},{6},{7},{8},{9},{10},{11},{12},{13}\n".format("sram_{0}_{1}_{2}".format(OPTS.word_size, OPTS.num_words, OPTS.tech_name), OPTS.num_words, OPTS.num_banks, OPTS.num_rw_ports, OPTS.num_w_ports, OPTS.num_r_ports, OPTS.tech_name, - self.corner[1], - self.corner[2], - self.corner[0], + corner[1], + corner[2], + corner[0], round_time(self.char_sram_results["min_period"]), self.out_dir, lib_name, From 905f6f8b4325ff573a71b54445413c84b77a7a7a Mon Sep 17 00:00:00 2001 From: Jesse Cirimelli-Low Date: Tue, 30 Oct 2018 21:37:30 -0700 Subject: [PATCH 05/78] added docstring and renamed some functions --- .../datasheet/characterization_corners.py | 6 +++ compiler/datasheet/datasheet.py | 8 +++- compiler/datasheet/datasheet_gen.py | 46 +++++++++++++------ compiler/datasheet/deliverables.py | 6 +++ compiler/datasheet/in_out.py | 6 +++ compiler/datasheet/operating_conditions.py | 6 +++ compiler/datasheet/timing_and_current_data.py | 6 +++ 7 files changed, 68 insertions(+), 16 deletions(-) diff --git a/compiler/datasheet/characterization_corners.py b/compiler/datasheet/characterization_corners.py index 54f75c3f..494b491f 100644 --- a/compiler/datasheet/characterization_corners.py +++ b/compiler/datasheet/characterization_corners.py @@ -1,6 +1,9 @@ from flask_table import * class characterization_corners(Table): + """ + Set up characterization corners table columns and title information + """ corner_name = Col('Corner Name') process = Col('Process') power_supply = Col('Power Supply') @@ -8,6 +11,9 @@ class characterization_corners(Table): library_name_suffix = Col('Library Name Suffix') class characterization_corners_item(object): + """ + Defines the contents of a charcaterization corner table row + """ def __init__(self, corner_name, process, power_supply, temperature, library_name_suffix): self.corner_name = corner_name self.process = process diff --git a/compiler/datasheet/datasheet.py b/compiler/datasheet/datasheet.py index f9edb5da..4a3b3b69 100644 --- a/compiler/datasheet/datasheet.py +++ b/compiler/datasheet/datasheet.py @@ -8,7 +8,9 @@ import os from globals import OPTS class datasheet(): - + """ + Defines the layout,but not the data, of the html datasheet + """ def __init__(self,identifier): self.io = [] self.corners = [] @@ -20,7 +22,11 @@ class datasheet(): def generate_html(self): + """ + Generates html tables using flask-table + """ with open(os.path.abspath(os.environ.get("OPENRAM_HOME")) + '/datasheet/assets/datasheet.css', 'r') as datasheet_css: + #css styling is kept in a seperate file self.html += datasheet_css.read() self.html +='

'+ self.name + '.html' + '

' diff --git a/compiler/datasheet/datasheet_gen.py b/compiler/datasheet/datasheet_gen.py index a16959f0..a0826cf8 100644 --- a/compiler/datasheet/datasheet_gen.py +++ b/compiler/datasheet/datasheet_gen.py @@ -1,13 +1,16 @@ #!/usr/bin/env python3 """ -Datasheet Generator - -TODO: -locate all port elements in .lib -Locate all timing elements in .lib -Diagram generation -Improve css +This is a script to load data from the characterization and layout processes into +a web friendly html datasheet. This script requres the python-flask and flask-table +packages to be installed. """ +#TODO: +#locate all port elements in .lib +#Locate all timing elements in .lib +#Calculate area from .gds file +#Diagram generation +#Improve css + import debug from globals import OPTS @@ -24,10 +27,13 @@ if OPTS.datasheet_gen: from in_out import * else: debug.warning("Python library flask_table not found. Skipping html datasheet generation. This can be installed with pip install flask-table.") - + #make sure appropriate python libraries are installed def process_name(corner): + """ + Expands the names of the characterization corner types into something human friendly + """ if corner == "TT": return "Typical - Typical" if corner == "SS": @@ -37,12 +43,18 @@ def process_name(corner): else: return "custom" -def parse_file(f,pages): +def parse_characterizer_csv(f,pages): + """ + Parses output data of the Liberty file generator in order to construct the timing and + current table + """ with open(f) as csv_file: csv_reader = csv.reader(csv_file, delimiter=',') line_count = 0 for row in csv_reader: found = 0 + + #defines layout of csv file NAME = row[0] NUM_WORDS = row[1] NUM_BANKS = row[2] @@ -65,6 +77,7 @@ def parse_file(f,pages): #if the .lib information is for an existing datasheet compare timing data for item in sheet.operating: + #check if the new corner dataa is worse than the previous worse corner data if item.parameter == 'Operating Temperature': if float(TEMP) > float(item.max): @@ -87,14 +100,17 @@ def parse_file(f,pages): if float(math.floor(1000/float(MIN_PERIOD)) < float(item.max)): item.max = str(math.floor(1000/float(MIN_PERIOD))) except Exception: + #pass if MIN_PERIOD is zero (not supported by analyitcal model) pass - + #regardless of if there is already a corner for the current sram, append the new corner to the datasheet new_sheet.corners.append(characterization_corners_item(PROC,process_name(PROC),VOLT,TEMP,LIB_NAME.replace(OUT_DIR,'').replace(NAME,''))) new_sheet.dlv.append(deliverables_item('.lib','Synthesis models','{1}'.format(LIB_NAME,LIB_NAME.replace(OUT_DIR,'')))) if found == 0: + + #if this is the first corner for this sram, run first time configuration and set up tables new_sheet = datasheet(NAME) pages.append(new_sheet) @@ -106,7 +122,8 @@ def parse_file(f,pages): new_sheet.operating.append(operating_conditions_item('Operating Frequency (F)*','','',str(math.floor(1000/float(MIN_PERIOD))),'MHz')) except Exception: new_sheet.operating.append(operating_conditions_item('Operating Frequency (F)*','','',"unknown",'MHz')) #analytical model fails to provide MIN_PERIOD - + + #place holder timing and current data new_sheet.timing.append(timing_and_current_data_item('Cycle time','2','3','4')) new_sheet.timing.append(timing_and_current_data_item('Access time','2','3','4')) new_sheet.timing.append(timing_and_current_data_item('Positive clk setup','2','3','4')) @@ -118,6 +135,7 @@ def parse_file(f,pages): new_sheet.timing.append(timing_and_current_data_item('Area','2','3','4')) if not OPTS.netlist_only: + #physical layout files should not be generated in netlist only mode new_sheet.dlv.append(deliverables_item('.gds','GDSII layout views','{1}.{2}'.format(OUT_DIR,NAME,'gds'))) new_sheet.dlv.append(deliverables_item('.lef','LEF files','{1}.{2}'.format(OUT_DIR,NAME,'lef'))) @@ -128,7 +146,7 @@ def parse_file(f,pages): new_sheet.dlv.append(deliverables_item('.lib','Synthesis models','{1}'.format(LIB_NAME,LIB_NAME.replace(OUT_DIR,'')))) - + #debug table for multiport information new_sheet.io.append(in_out_item('WORD_SIZE',WORD_SIZE)) new_sheet.io.append(in_out_item('NUM_WORDS',NUM_WORDS)) new_sheet.io.append(in_out_item('NUM_BANKS',NUM_BANKS)) @@ -149,11 +167,9 @@ class datasheet_gen(): if not (os.path.isdir(in_dir)): os.mkdir(in_dir) - #if not (os.path.isdir(out_dir)): - # os.mkdir(out_dir) datasheets = [] - parse_file(in_dir + "/datasheet.info", datasheets) + parse_characterizer_csv(in_dir + "/datasheet.info", datasheets) for sheets in datasheets: diff --git a/compiler/datasheet/deliverables.py b/compiler/datasheet/deliverables.py index d5287c3a..9ba3c0e6 100644 --- a/compiler/datasheet/deliverables.py +++ b/compiler/datasheet/deliverables.py @@ -1,12 +1,18 @@ from flask_table import * class deliverables(Table): + """ + Set up delivarables table columns and title information + """ typ = Col('Type') description = Col('Description') link = Col('Link') class deliverables_item(object): + """ + Define deliverables table row elemenent information + """ def __init__(self, typ, description,link): self.typ = typ self.description = description diff --git a/compiler/datasheet/in_out.py b/compiler/datasheet/in_out.py index f656dba6..98ba9fe5 100644 --- a/compiler/datasheet/in_out.py +++ b/compiler/datasheet/in_out.py @@ -1,11 +1,17 @@ from flask_table import * class in_out(Table): + """ + Set up I/O table columns and title information for multiport debugging + """ typ = Col('Type') description = Col('Description') class in_out_item(object): + """ + Define table row element for I/O table + """ def __init__(self, typ, description): self.typ = typ self.description = description diff --git a/compiler/datasheet/operating_conditions.py b/compiler/datasheet/operating_conditions.py index e08adc61..69648174 100644 --- a/compiler/datasheet/operating_conditions.py +++ b/compiler/datasheet/operating_conditions.py @@ -1,6 +1,9 @@ from flask_table import * class operating_conditions(Table): + """ + Set up operating conditions columns and title information + """ parameter = Col('Parameter') min = Col('Min') typ = Col('Typ') @@ -8,6 +11,9 @@ class operating_conditions(Table): units = Col('Units') class operating_conditions_item(object): + """ + Define operating conditions table row element + """ def __init__(self, parameter, min, typ, max, units): self.parameter = parameter self.min = min diff --git a/compiler/datasheet/timing_and_current_data.py b/compiler/datasheet/timing_and_current_data.py index ebf489e8..ff95df49 100644 --- a/compiler/datasheet/timing_and_current_data.py +++ b/compiler/datasheet/timing_and_current_data.py @@ -1,12 +1,18 @@ from flask_table import * class timing_and_current_data(Table): + """ + Set up timing and current table columns and title information + """ parameter = Col('Parameter') min = Col('Min') max = Col('Max') units = Col('Units') class timing_and_current_data_item(object): + """ + Define timing and current data row element + """ def __init__(self, parameter, min, max, units): self.parameter = parameter self.min = min From fe196c23a991602cdcf8685e3effb8fe38dd8e0f Mon Sep 17 00:00:00 2001 From: Jesse Cirimelli-Low Date: Tue, 30 Oct 2018 22:32:19 -0700 Subject: [PATCH 06/78] added FF timing information --- compiler/characterizer/lib.py | 15 ++++++++-- compiler/datasheet/datasheet_gen.py | 46 +++++++++++++++++++++++++++-- 2 files changed, 57 insertions(+), 4 deletions(-) diff --git a/compiler/characterizer/lib.py b/compiler/characterizer/lib.py index 72cadc45..ac15a23f 100644 --- a/compiler/characterizer/lib.py +++ b/compiler/characterizer/lib.py @@ -506,7 +506,7 @@ class lib: return datasheet = open(OPTS.openram_temp +'/datasheet.info', 'a+') - datasheet.write("{0},{1},{2},{3},{4},{5},{6},{7},{8},{9},{10},{11},{12},{13}\n".format("sram_{0}_{1}_{2}".format(OPTS.word_size, OPTS.num_words, OPTS.tech_name), + datasheet.write("{0},{1},{2},{3},{4},{5},{6},{7},{8},{9},{10},{11},{12},{13},{14},{15},{16},{17},{18},{19},{20},{21}\n".format("sram_{0}_{1}_{2}".format(OPTS.word_size, OPTS.num_words, OPTS.tech_name), OPTS.num_words, OPTS.num_banks, OPTS.num_rw_ports, @@ -519,7 +519,18 @@ class lib: round_time(self.char_sram_results["min_period"]), self.out_dir, lib_name, - OPTS.word_size)) + OPTS.word_size, + min(list(map(round_time,self.times["setup_times_LH"]))), + max(list(map(round_time,self.times["setup_times_LH"]))), + + min(list(map(round_time,self.times["setup_times_HL"]))), + max(list(map(round_time,self.times["setup_times_HL"]))), + + min(list(map(round_time,self.times["hold_times_LH"]))), + max(list(map(round_time,self.times["hold_times_LH"]))), + + min(list(map(round_time,self.times["hold_times_HL"]))), + max(list(map(round_time,self.times["hold_times_HL"]))))) datasheet.close() diff --git a/compiler/datasheet/datasheet_gen.py b/compiler/datasheet/datasheet_gen.py index a0826cf8..767990fa 100644 --- a/compiler/datasheet/datasheet_gen.py +++ b/compiler/datasheet/datasheet_gen.py @@ -69,10 +69,25 @@ def parse_characterizer_csv(f,pages): OUT_DIR = row[11] LIB_NAME = row[12] WORD_SIZE = row[13] + + FF_SETUP_LH_MIN = row[14] + FF_SETUP_LH_MAX = row[15] + + FF_SETUP_HL_MIN = row[16] + FF_SETUP_HL_MAX = row[17] + + FF_HOLD_LH_MIN = row[18] + FF_HOLD_LH_MAX = row[19] + + FF_HOLD_HL_MIN = row[20] + FF_HOLD_HL_MAX = row[21] + + for sheet in pages: if sheet.name == row[0]: + found = 1 #if the .lib information is for an existing datasheet compare timing data @@ -103,6 +118,31 @@ def parse_characterizer_csv(f,pages): #pass if MIN_PERIOD is zero (not supported by analyitcal model) pass + for item in sheet.timing: + if item.paramter == "CSb setup rising": + if float(FF_SETUP_LH_MIN) < float(item.min): + item.min = FF_SETUP_LH + elif float(FF_SETUP_LH_MAX) > float(item.max): + item.max = FF_SETUP_LH + + if item.paramter == "CSb setup falling": + if float(FF_SETUP_HL_MIN) > float(item.min): + item.max = FF_SETUP_HL_MIN + elif float(FF_SETUP_HL_MAX) > float(item.nax): + item.max = FF_SETUP_HL_MAX + + if item.paramter == "CSb hold rising": + if float(FF_HOLD_HL_MIN) > float(item.min): + item.max = FF_SETUP_HL_MIN + elif float(FF_HOLD_HL_MAX) > float(item.nax): + item.max = FF_SETUP_HL_MAX + + if item.paramter == "CSb hold rising": + if float(FF_HOLD_HL_MIN) > float(item.min): + item.max = FF_SETUP_HL_MIN + elif float(FF_HOLD_HL_MAX) > float(item.nax): + item.max = FF_SETUP_HL_MAX + #regardless of if there is already a corner for the current sram, append the new corner to the datasheet new_sheet.corners.append(characterization_corners_item(PROC,process_name(PROC),VOLT,TEMP,LIB_NAME.replace(OUT_DIR,'').replace(NAME,''))) @@ -128,8 +168,10 @@ def parse_characterizer_csv(f,pages): new_sheet.timing.append(timing_and_current_data_item('Access time','2','3','4')) new_sheet.timing.append(timing_and_current_data_item('Positive clk setup','2','3','4')) new_sheet.timing.append(timing_and_current_data_item('Positive clk hold','2','3','4')) - new_sheet.timing.append(timing_and_current_data_item('RW setup','2','3','4')) - new_sheet.timing.append(timing_and_current_data_item('RW hold','2','3','4')) + new_sheet.timing.append(timing_and_current_data_item('CSb setup rising',FF_SETUP_LH_MIN,FF_SETUP_LH_MAX,'ns')) + new_sheet.timing.append(timing_and_current_data_item('CSb setup falling',FF_SETUP_HL_MIN,FF_SETUP_HL_MAX,'ns')) + new_sheet.timing.append(timing_and_current_data_item('CSb hold rising',FF_SETUP_LH_MIN,FF_SETUP_LH_MAX,'ns')) + new_sheet.timing.append(timing_and_current_data_item('CSb hold falling',FF_SETUP_HL_MIN,FF_SETUP_HL_MAX,'ns')) new_sheet.timing.append(timing_and_current_data_item('AC current','2','3','4')) new_sheet.timing.append(timing_and_current_data_item('Standby current','2','3','4')) new_sheet.timing.append(timing_and_current_data_item('Area','2','3','4')) From 70ac2e8aa4003d4efdf515804dc6db7a55811a96 Mon Sep 17 00:00:00 2001 From: Jesse Cirimelli-Low Date: Tue, 30 Oct 2018 22:56:13 -0700 Subject: [PATCH 07/78] changed css to orange and black for Halloween; fixed CSb timing table in datasheet --- compiler/datasheet/assets/datasheet.css | 4 ++-- compiler/datasheet/datasheet_gen.py | 28 ++++++++++++------------- 2 files changed, 16 insertions(+), 16 deletions(-) diff --git a/compiler/datasheet/assets/datasheet.css b/compiler/datasheet/assets/datasheet.css index 5d5a04e5..5d4f1470 100644 --- a/compiler/datasheet/assets/datasheet.css +++ b/compiler/datasheet/assets/datasheet.css @@ -19,8 +19,8 @@ padding-top: 11px; padding-bottom: 11px; text-align: left; - background-color: #3CAF50; - color: white; + background-color: #FF8C00; + color: black; } diff --git a/compiler/datasheet/datasheet_gen.py b/compiler/datasheet/datasheet_gen.py index 767990fa..318d345f 100644 --- a/compiler/datasheet/datasheet_gen.py +++ b/compiler/datasheet/datasheet_gen.py @@ -81,8 +81,8 @@ def parse_characterizer_csv(f,pages): FF_HOLD_HL_MIN = row[20] FF_HOLD_HL_MAX = row[21] - - + + for sheet in pages: @@ -121,25 +121,25 @@ def parse_characterizer_csv(f,pages): for item in sheet.timing: if item.paramter == "CSb setup rising": if float(FF_SETUP_LH_MIN) < float(item.min): - item.min = FF_SETUP_LH + item.min = FF_SETUP_LH_MIN elif float(FF_SETUP_LH_MAX) > float(item.max): - item.max = FF_SETUP_LH + item.max = FF_SETUP_LH_MAX if item.paramter == "CSb setup falling": - if float(FF_SETUP_HL_MIN) > float(item.min): - item.max = FF_SETUP_HL_MIN + if float(FF_SETUP_HL_MIN) < float(item.min): + item.min = FF_SETUP_HL_MIN elif float(FF_SETUP_HL_MAX) > float(item.nax): item.max = FF_SETUP_HL_MAX if item.paramter == "CSb hold rising": - if float(FF_HOLD_HL_MIN) > float(item.min): - item.max = FF_SETUP_HL_MIN + if float(FF_HOLD_HL_MIN) < float(item.min): + item.min = FF_SETUP_HL_MIN elif float(FF_HOLD_HL_MAX) > float(item.nax): item.max = FF_SETUP_HL_MAX - if item.paramter == "CSb hold rising": - if float(FF_HOLD_HL_MIN) > float(item.min): - item.max = FF_SETUP_HL_MIN + if item.paramter == "CSb hold falling": + if float(FF_HOLD_HL_MIN) < float(item.min): + item.min = FF_SETUP_HL_MIN elif float(FF_HOLD_HL_MAX) > float(item.nax): item.max = FF_SETUP_HL_MAX @@ -149,7 +149,7 @@ def parse_characterizer_csv(f,pages): new_sheet.dlv.append(deliverables_item('.lib','Synthesis models','{1}'.format(LIB_NAME,LIB_NAME.replace(OUT_DIR,'')))) if found == 0: - + #if this is the first corner for this sram, run first time configuration and set up tables new_sheet = datasheet(NAME) pages.append(new_sheet) @@ -170,8 +170,8 @@ def parse_characterizer_csv(f,pages): new_sheet.timing.append(timing_and_current_data_item('Positive clk hold','2','3','4')) new_sheet.timing.append(timing_and_current_data_item('CSb setup rising',FF_SETUP_LH_MIN,FF_SETUP_LH_MAX,'ns')) new_sheet.timing.append(timing_and_current_data_item('CSb setup falling',FF_SETUP_HL_MIN,FF_SETUP_HL_MAX,'ns')) - new_sheet.timing.append(timing_and_current_data_item('CSb hold rising',FF_SETUP_LH_MIN,FF_SETUP_LH_MAX,'ns')) - new_sheet.timing.append(timing_and_current_data_item('CSb hold falling',FF_SETUP_HL_MIN,FF_SETUP_HL_MAX,'ns')) + new_sheet.timing.append(timing_and_current_data_item('CSb hold rising',FF_HOLD_LH_MIN,FF_HOLD_LH_MAX,'ns')) + new_sheet.timing.append(timing_and_current_data_item('CSb hold falling',FF_HOLD_HL_MIN,FF_HOLD_HL_MAX,'ns')) new_sheet.timing.append(timing_and_current_data_item('AC current','2','3','4')) new_sheet.timing.append(timing_and_current_data_item('Standby current','2','3','4')) new_sheet.timing.append(timing_and_current_data_item('Area','2','3','4')) From 5302fd205f313a12e46fe567d60bbcf2ac456d35 Mon Sep 17 00:00:00 2001 From: Jesse Cirimelli-Low Date: Tue, 30 Oct 2018 23:03:05 -0700 Subject: [PATCH 08/78] fixed some final typos in datasheet --- compiler/datasheet/datasheet_gen.py | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/compiler/datasheet/datasheet_gen.py b/compiler/datasheet/datasheet_gen.py index 318d345f..0b63fbae 100644 --- a/compiler/datasheet/datasheet_gen.py +++ b/compiler/datasheet/datasheet_gen.py @@ -119,28 +119,28 @@ def parse_characterizer_csv(f,pages): pass for item in sheet.timing: - if item.paramter == "CSb setup rising": + if item.parameter == "CSb setup rising": if float(FF_SETUP_LH_MIN) < float(item.min): item.min = FF_SETUP_LH_MIN elif float(FF_SETUP_LH_MAX) > float(item.max): item.max = FF_SETUP_LH_MAX - if item.paramter == "CSb setup falling": + if item.parameter == "CSb setup falling": if float(FF_SETUP_HL_MIN) < float(item.min): item.min = FF_SETUP_HL_MIN - elif float(FF_SETUP_HL_MAX) > float(item.nax): + elif float(FF_SETUP_HL_MAX) > float(item.max): item.max = FF_SETUP_HL_MAX - if item.paramter == "CSb hold rising": + if item.parameter == "CSb hold rising": if float(FF_HOLD_HL_MIN) < float(item.min): item.min = FF_SETUP_HL_MIN - elif float(FF_HOLD_HL_MAX) > float(item.nax): + elif float(FF_HOLD_HL_MAX) > float(item.max): item.max = FF_SETUP_HL_MAX - if item.paramter == "CSb hold falling": + if item.parameter == "CSb hold falling": if float(FF_HOLD_HL_MIN) < float(item.min): item.min = FF_SETUP_HL_MIN - elif float(FF_HOLD_HL_MAX) > float(item.nax): + elif float(FF_HOLD_HL_MAX) > float(item.max): item.max = FF_SETUP_HL_MAX From 673027ac8cfbd2cc2641f12dab0519cd3c5b86ce Mon Sep 17 00:00:00 2001 From: Matt Guthaus Date: Wed, 31 Oct 2018 09:37:47 -0700 Subject: [PATCH 09/78] Moved assert to check out_path earlier. Preserve temporary output directory with -d option. --- compiler/tests/30_openram_test.py | 33 ++++++++++++++++++------------- 1 file changed, 19 insertions(+), 14 deletions(-) diff --git a/compiler/tests/30_openram_test.py b/compiler/tests/30_openram_test.py index 038a2e15..ab0aa4d8 100755 --- a/compiler/tests/30_openram_test.py +++ b/compiler/tests/30_openram_test.py @@ -36,21 +36,27 @@ class openram_test(openram_test): os.chmod(out_path, 0o0750) # specify the same verbosity for the system call - verbosity = "" + opts = "" for i in range(OPTS.debug_level): - verbosity += " -v" - + opts += " -v" + # keep the temp directory around + if not OPTS.purge_temp: + opts += " -d" + OPENRAM_HOME = os.path.abspath(os.environ.get("OPENRAM_HOME")) cmd = "python3 {0}/openram.py -n -o {1} -p {2} {3} config_20_{4}.py 2>&1 > {5}/output.log".format(OPENRAM_HOME, - out_file, - out_path, - verbosity, - OPTS.tech_name, - out_path) + out_file, + out_path, + opts, + OPTS.tech_name, + out_path) debug.info(1, cmd) os.system(cmd) + + # check that the output path was created + self.assertEqual(os.path.exists(out_path),True) # assert an error until we actually check a resul for extension in ["gds", "v", "lef", "sp"]: @@ -64,9 +70,8 @@ class openram_test(openram_test): 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) + 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") @@ -76,10 +81,10 @@ class openram_test(openram_test): self.assertEqual(len(re.findall('WARNING',output)),0) - # now clean up the directory - if os.path.exists(out_path): + # now clean up the output directory (or preserve if specified to preserve temp dirs) + if os.path.exists(out_path) and OPTS.purge_temp: shutil.rmtree(out_path, ignore_errors=True) - self.assertEqual(os.path.exists(out_path),False) + self.assertEqual(os.path.exists(out_path),False) globals.end_openram() From c3d7e24df9cb528db04ed759981eb45817b94e36 Mon Sep 17 00:00:00 2001 From: Jesse Cirimelli-Low Date: Wed, 31 Oct 2018 09:34:36 -0700 Subject: [PATCH 10/78] fixed broken links when -o flag set --- compiler/datasheet/datasheet_gen.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/compiler/datasheet/datasheet_gen.py b/compiler/datasheet/datasheet_gen.py index 0b63fbae..125511f4 100644 --- a/compiler/datasheet/datasheet_gen.py +++ b/compiler/datasheet/datasheet_gen.py @@ -178,13 +178,13 @@ def parse_characterizer_csv(f,pages): if not OPTS.netlist_only: #physical layout files should not be generated in netlist only mode - new_sheet.dlv.append(deliverables_item('.gds','GDSII layout views','{1}.{2}'.format(OUT_DIR,NAME,'gds'))) - new_sheet.dlv.append(deliverables_item('.lef','LEF files','{1}.{2}'.format(OUT_DIR,NAME,'lef'))) + new_sheet.dlv.append(deliverables_item('.gds','GDSII layout views','{1}.{2}'.format(OUT_DIR,OPTS.output_name,'gds'))) + new_sheet.dlv.append(deliverables_item('.lef','LEF files','{1}.{2}'.format(OUT_DIR,OPTS.output_name,'lef'))) - new_sheet.dlv.append(deliverables_item('.sp','SPICE netlists','{1}.{2}'.format(OUT_DIR,NAME,'sp'))) - new_sheet.dlv.append(deliverables_item('.v','Verilog simulation models','{1}.{2}'.format(OUT_DIR,NAME,'v'))) - new_sheet.dlv.append(deliverables_item('.html','This datasheet','{1}.{2}'.format(OUT_DIR,NAME,'html'))) + new_sheet.dlv.append(deliverables_item('.sp','SPICE netlists','{1}.{2}'.format(OUT_DIR,OPTS.output_name,'sp'))) + new_sheet.dlv.append(deliverables_item('.v','Verilog simulation models','{1}.{2}'.format(OUT_DIR,OPTS.output_name,'v'))) + new_sheet.dlv.append(deliverables_item('.html','This datasheet','{1}.{2}'.format(OUT_DIR,OPTS.output_name,'html'))) new_sheet.dlv.append(deliverables_item('.lib','Synthesis models','{1}'.format(LIB_NAME,LIB_NAME.replace(OUT_DIR,'')))) From ce5001e0afba51d0272ec60b8091ee01c0185f13 Mon Sep 17 00:00:00 2001 From: Jesse Cirimelli-Low Date: Wed, 31 Oct 2018 12:29:13 -0700 Subject: [PATCH 11/78] added config file to datasheet and output files --- compiler/datasheet/datasheet.py | 14 +++++++++++++- compiler/datasheet/datasheet_gen.py | 4 +++- compiler/globals.py | 3 ++- compiler/openram.py | 2 +- compiler/sram.py | 10 +++++++++- 5 files changed, 28 insertions(+), 5 deletions(-) diff --git a/compiler/datasheet/datasheet.py b/compiler/datasheet/datasheet.py index 4a3b3b69..700babbb 100644 --- a/compiler/datasheet/datasheet.py +++ b/compiler/datasheet/datasheet.py @@ -28,8 +28,20 @@ class datasheet(): with open(os.path.abspath(os.environ.get("OPENRAM_HOME")) + '/datasheet/assets/datasheet.css', 'r') as datasheet_css: #css styling is kept in a seperate file self.html += datasheet_css.read() - + +# if OPTS.check_lvsdrc: +# DVS = 'checked' +# LVS = 'checked' +# PEX = 'checked' +# else: +# DVS = 'skipped' +# LVS = 'skipped' +# PEX = 'skipped' + + self.html +='

'+ self.name + '.html' + '

' +# self.html +='

'+ 'DVS: ' + DVS + '

' +# self.html +='

'+ 'LVS: ' + LVS + '

' self.html +='

Ports and Configuration (DEBUG)

' self.html += in_out(self.io,table_id='data').__html__().replace('<','<').replace('"','"').replace('>',">") diff --git a/compiler/datasheet/datasheet_gen.py b/compiler/datasheet/datasheet_gen.py index 125511f4..4609514e 100644 --- a/compiler/datasheet/datasheet_gen.py +++ b/compiler/datasheet/datasheet_gen.py @@ -185,7 +185,9 @@ def parse_characterizer_csv(f,pages): new_sheet.dlv.append(deliverables_item('.sp','SPICE netlists','{1}.{2}'.format(OUT_DIR,OPTS.output_name,'sp'))) new_sheet.dlv.append(deliverables_item('.v','Verilog simulation models','{1}.{2}'.format(OUT_DIR,OPTS.output_name,'v'))) new_sheet.dlv.append(deliverables_item('.html','This datasheet','{1}.{2}'.format(OUT_DIR,OPTS.output_name,'html'))) - new_sheet.dlv.append(deliverables_item('.lib','Synthesis models','{1}'.format(LIB_NAME,LIB_NAME.replace(OUT_DIR,'')))) + new_sheet.dlv.append(deliverables_item('.lib','Synthesis models','{1}'.format(LIB_NAME,LIB_NAME.replace(OUT_DIR,'lib')))) + new_sheet.dlv.append(deliverables_item('.py','OpenRAM configuration file','{1}.{2}'.format(OUT_DIR,OPTS.output_name,'py'))) + #debug table for multiport information diff --git a/compiler/globals.py b/compiler/globals.py index 0b04079b..887b092e 100644 --- a/compiler/globals.py +++ b/compiler/globals.py @@ -197,6 +197,7 @@ def read_config(config_file, is_unit_test=True): 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 # Add the path to the system path so we can import things in the other directory dir_name = os.path.dirname(config_file) file_name = os.path.basename(config_file) @@ -244,7 +245,7 @@ def read_config(config_file, is_unit_test=True): OPTS.num_words, ports, OPTS.tech_name) - + def end_openram(): diff --git a/compiler/openram.py b/compiler/openram.py index ee43749f..d419ea4b 100755 --- a/compiler/openram.py +++ b/compiler/openram.py @@ -39,7 +39,7 @@ import verify from sram import sram from sram_config import sram_config #from parser import * -output_extensions = ["sp","v","lib"] +output_extensions = ["sp","v","lib","py"] if OPTS.datasheet_gen: output_extensions.append("html") if not OPTS.netlist_only: diff --git a/compiler/sram.py b/compiler/sram.py index 1b6b104f..1ae11762 100644 --- a/compiler/sram.py +++ b/compiler/sram.py @@ -108,7 +108,15 @@ class sram(): print("Trimming netlist to speed up characterization.") lib(out_dir=OPTS.output_path, sram=self.s, sp_file=sp_file) print_time("Characterization", datetime.datetime.now(), start_time) - + + + # Write the config file + start_time = datetime.datetime.now() + from shutil import copyfile + copyfile(OPTS.config_file + '.py', OPTS.output_path + OPTS.output_name + '.py') + print("Config: writing to {0}".format(OPTS.output_path + OPTS.output_name + '.py')) + print_time("Config", datetime.datetime.now(), start_time) + # Write the datasheet start_time = datetime.datetime.now() from datasheet_gen import datasheet_gen From 3fa1d5522e2bded2e87d860a11021573fe4a6ee0 Mon Sep 17 00:00:00 2001 From: Jesse Cirimelli-Low Date: Thu, 1 Nov 2018 14:02:33 -0700 Subject: [PATCH 12/78] added DRC/LVS error count to datasheet --- compiler/base/hierarchy_design.py | 25 +++++++++++++++++++------ compiler/datasheet/datasheet.py | 25 ++++++++++++++----------- 2 files changed, 33 insertions(+), 17 deletions(-) diff --git a/compiler/base/hierarchy_design.py b/compiler/base/hierarchy_design.py index 320276cc..9eefc564 100644 --- a/compiler/base/hierarchy_design.py +++ b/compiler/base/hierarchy_design.py @@ -6,6 +6,8 @@ import debug import os from globals import OPTS +total_drc_errors = 0 +total_lvs_errors = 0 class hierarchy_design(hierarchy_spice.spice, hierarchy_layout.layout): """ @@ -13,7 +15,6 @@ class hierarchy_design(hierarchy_spice.spice, hierarchy_layout.layout): Class consisting of a set of modules and instances of these modules """ name_map = [] - def __init__(self, name): try: @@ -28,8 +29,8 @@ class hierarchy_design(hierarchy_spice.spice, hierarchy_layout.layout): self.name = name hierarchy_layout.layout.__init__(self, name) hierarchy_spice.spice.__init__(self, name) - + # Check if the name already exists, if so, give an error # because each reference must be a unique name. # These modules ensure unique names or have no changes if they @@ -70,12 +71,18 @@ class hierarchy_design(hierarchy_spice.spice, hierarchy_layout.layout): # Unit tests will check themselves. # Do not run if disabled in options. if not OPTS.is_unit_test and OPTS.check_lvsdrc: + global total_drc_errors + global total_lvs_errors tempspice = OPTS.openram_temp + "/temp.sp" tempgds = OPTS.openram_temp + "/temp.gds" self.sp_write(tempspice) self.gds_write(tempgds) - debug.check(verify.run_drc(self.name, tempgds) == 0,"DRC failed for {0}".format(self.name)) - debug.check(verify.run_lvs(self.name, tempgds, tempspice, final_verification) == 0,"LVS failed for {0}".format(self.name)) + num_drc_errors = verify.run_drc(self.name, tempgds) + num_lvs_errors = verify.run_lvs(self.name, tempgds, tempspice, final_verification) + debug.check(num_drc_errors == 0,"DRC failed for {0} with {1} error(s)".format(self.name,num_drc_errors)) + debug.check(num_lvs_errors == 0,"LVS failed for {0} with {1} errors(s)".format(self.name,num_lvs_errors)) + total_drc_errors += num_drc_errors + total_lvs_errors += num_lvs_errors os.remove(tempspice) os.remove(tempgds) @@ -84,9 +91,12 @@ class hierarchy_design(hierarchy_spice.spice, hierarchy_layout.layout): # Unit tests will check themselves. # Do not run if disabled in options. if not OPTS.is_unit_test and OPTS.check_lvsdrc: + global total_drc_errors tempgds = OPTS.openram_temp + "/temp.gds" self.gds_write(tempgds) - debug.check(verify.run_drc(self.name, tempgds) == 0,"DRC failed for {0}".format(self.name)) + num_errors = verify.run_drc(self.name, tempgds) + total_drc_errors += num_errors + debug.check(num_errors == 0,"DRC failed for {0} with {1} error(s)".format(self.name,num_error)) os.remove(tempgds) def LVS(self, final_verification=False): @@ -94,11 +104,14 @@ class hierarchy_design(hierarchy_spice.spice, hierarchy_layout.layout): # Unit tests will check themselves. # Do not run if disabled in options. if not OPTS.is_unit_test and OPTS.check_lvsdrc: + global total_lvs_errors tempspice = OPTS.openram_temp + "/temp.sp" tempgds = OPTS.openram_temp + "/temp.gds" self.sp_write(tempspice) self.gds_write(tempgds) - debug.check(verify.run_lvs(self.name, tempgds, tempspice, final_verification) == 0,"LVS failed for {0}".format(self.name)) + num_errors = verify.run_lvs(self.name, tempgds, tempspice, final_verification) + total_lvs_errors += num_errors + debug.check(num_errors == 0,"LVS failed for {0} with {1} error(s)".format(self.name,num_errors)) os.remove(tempspice) os.remove(tempgds) diff --git a/compiler/datasheet/datasheet.py b/compiler/datasheet/datasheet.py index 700babbb..beded426 100644 --- a/compiler/datasheet/datasheet.py +++ b/compiler/datasheet/datasheet.py @@ -4,6 +4,8 @@ from characterization_corners import * from deliverables import * from timing_and_current_data import * from in_out import * +from hierarchy_design import total_drc_errors +from hierarchy_design import total_lvs_errors import os from globals import OPTS @@ -29,19 +31,20 @@ class datasheet(): #css styling is kept in a seperate file self.html += datasheet_css.read() -# if OPTS.check_lvsdrc: -# DVS = 'checked' -# LVS = 'checked' -# PEX = 'checked' -# else: -# DVS = 'skipped' -# LVS = 'skipped' -# PEX = 'skipped' - + if OPTS.check_lvsdrc: + + DRC = total_drc_errors + LVS = total_lvs_errors + PEX = 'n/a' + else: + DRC = 'skipped' + LVS = 'skipped' + PEX = 'skipped' + self.html +='

'+ self.name + '.html' + '

' -# self.html +='

'+ 'DVS: ' + DVS + '

' -# self.html +='

'+ 'LVS: ' + LVS + '

' + self.html +='

'+ 'DRC: ' + str(DRC) + ' errors'+'

' + self.html +='

'+ 'LVS: ' + str(LVS) + ' errors'+'

' self.html +='

Ports and Configuration (DEBUG)

' self.html += in_out(self.io,table_id='data').__html__().replace('<','<').replace('"','"').replace('>',">") From d6c0247ff27ee4961c89bf872588661e5877baa0 Mon Sep 17 00:00:00 2001 From: Jesse Cirimelli-Low Date: Thu, 8 Nov 2018 21:30:17 -0800 Subject: [PATCH 13/78] added area to datasheet --- compiler/characterizer/lib.py | 1 + compiler/datasheet/datasheet_gen.py | 12 ++++++------ compiler/sram.py | 2 +- 3 files changed, 8 insertions(+), 7 deletions(-) diff --git a/compiler/characterizer/lib.py b/compiler/characterizer/lib.py index ac15a23f..3441156f 100644 --- a/compiler/characterizer/lib.py +++ b/compiler/characterizer/lib.py @@ -502,6 +502,7 @@ class lib: def parse_info(self,corner,lib_name): + """ Copies important characterization data to datasheet.info to be added to datasheet """ if OPTS.is_unit_test: return datasheet = open(OPTS.openram_temp +'/datasheet.info', 'a+') diff --git a/compiler/datasheet/datasheet_gen.py b/compiler/datasheet/datasheet_gen.py index 4609514e..5f163904 100644 --- a/compiler/datasheet/datasheet_gen.py +++ b/compiler/datasheet/datasheet_gen.py @@ -7,7 +7,6 @@ packages to be installed. #TODO: #locate all port elements in .lib #Locate all timing elements in .lib -#Calculate area from .gds file #Diagram generation #Improve css @@ -43,7 +42,7 @@ def process_name(corner): else: return "custom" -def parse_characterizer_csv(f,pages): +def parse_characterizer_csv(sram,f,pages): """ Parses output data of the Liberty file generator in order to construct the timing and current table @@ -174,8 +173,7 @@ def parse_characterizer_csv(f,pages): new_sheet.timing.append(timing_and_current_data_item('CSb hold falling',FF_HOLD_HL_MIN,FF_HOLD_HL_MAX,'ns')) new_sheet.timing.append(timing_and_current_data_item('AC current','2','3','4')) new_sheet.timing.append(timing_and_current_data_item('Standby current','2','3','4')) - new_sheet.timing.append(timing_and_current_data_item('Area','2','3','4')) - + if not OPTS.netlist_only: #physical layout files should not be generated in netlist only mode new_sheet.dlv.append(deliverables_item('.gds','GDSII layout views','{1}.{2}'.format(OUT_DIR,OPTS.output_name,'gds'))) @@ -197,13 +195,15 @@ def parse_characterizer_csv(f,pages): new_sheet.io.append(in_out_item('NUM_RW_PORTS',NUM_RW_PORTS)) new_sheet.io.append(in_out_item('NUM_R_PORTS',NUM_R_PORTS)) new_sheet.io.append(in_out_item('NUM_W_PORTS',NUM_W_PORTS)) + new_sheet.io.append(in_out_item('Area',sram.width * sram.height)) + class datasheet_gen(): - def datasheet_write(name): + def datasheet_write(sram,name): if OPTS.datasheet_gen: in_dir = OPTS.openram_temp @@ -213,7 +213,7 @@ class datasheet_gen(): datasheets = [] - parse_characterizer_csv(in_dir + "/datasheet.info", datasheets) + parse_characterizer_csv(sram, in_dir + "/datasheet.info", datasheets) for sheets in datasheets: diff --git a/compiler/sram.py b/compiler/sram.py index 1ae11762..0c977868 100644 --- a/compiler/sram.py +++ b/compiler/sram.py @@ -122,7 +122,7 @@ class sram(): from datasheet_gen import datasheet_gen dname = OPTS.output_path + self.s.name + ".html" print("Datasheet: writing to {0}".format(dname)) - datasheet_gen.datasheet_write(dname) + datasheet_gen.datasheet_write(self.s,dname) print_time("Datasheet", datetime.datetime.now(), start_time) # Write a verilog model From b8061d3a4e03684ff22d9b5fe93d87cab2a774e3 Mon Sep 17 00:00:00 2001 From: Hunter Nichols Date: Thu, 8 Nov 2018 00:10:51 -0800 Subject: [PATCH 14/78] Added initial code for determining the logical effort delay of the wordline. --- compiler/bitcells/bitcell.py | 7 +++++- compiler/characterizer/logical_effort.py | 16 ++++++++++++ compiler/modules/bank.py | 14 +++++++++++ compiler/modules/bitcell_array.py | 7 ++++++ compiler/modules/control_logic.py | 10 ++++++++ compiler/modules/dff.py | 12 ++++++--- compiler/modules/dff_array.py | 6 +++++ compiler/modules/dff_inv.py | 3 +++ compiler/modules/dff_inv_array.py | 6 +++++ compiler/modules/wordline_driver.py | 23 +++++++++++++++++ compiler/pgates/pinv.py | 13 +++++++++- compiler/pgates/pinvbuf.py | 11 ++++++++ compiler/pgates/pnand2.py | 11 ++++++++ compiler/sram_base.py | 32 ++++++++++++++++++++++++ technology/freepdk45/tech/tech.py | 4 +++ technology/scn4m_subm/tech/tech.py | 5 ++++ 16 files changed, 174 insertions(+), 6 deletions(-) create mode 100644 compiler/characterizer/logical_effort.py diff --git a/compiler/bitcells/bitcell.py b/compiler/bitcells/bitcell.py index 5df86c87..ef0e8e9d 100644 --- a/compiler/bitcells/bitcell.py +++ b/compiler/bitcells/bitcell.py @@ -1,7 +1,7 @@ import design import debug import utils -from tech import GDS,layer +from tech import GDS,layer, parameter class bitcell(design.design): """ @@ -93,3 +93,8 @@ class bitcell(design.design): total_power = self.return_power(dynamic, leakage) return total_power + def get_wl_cin(self): + """Return the total capacitance (in relative units) that the clock is loaded by in the dff""" + #This is a handmade cell so the value must be entered in the tech.py file or estimated. + #Calculated in the tech file by summing the widths of all the gates and dividing by the minimum width. + return parameter["6tcell_wl_cin"] diff --git a/compiler/characterizer/logical_effort.py b/compiler/characterizer/logical_effort.py new file mode 100644 index 00000000..ac6ccbc5 --- /dev/null +++ b/compiler/characterizer/logical_effort.py @@ -0,0 +1,16 @@ +import debug +from tech import drc, parameter, spice + +class logical_effort(): + """ + Class to support the values behind logical effort. Useful for storing the different components + such as logical effort, electrical effort, and parasitic delay. + """ + beta = parameter["beta"] + min_inv_cin = 1+beta + def __init__(self, size, cin, cout, parasitic): + self.cin = cin + self.cout = cout + self.logical_effort = (self.cin/size)/logical_effort.min_inv_cin + self.eletrical_effort = self.cout/self.cin + self.parasitic = parasitic \ No newline at end of file diff --git a/compiler/modules/bank.py b/compiler/modules/bank.py index 1e9401b8..a369266d 100644 --- a/compiler/modules/bank.py +++ b/compiler/modules/bank.py @@ -950,4 +950,18 @@ class bank(design.design): results.append(decoder_delay + word_driver_delay + bitcell_array_delay + column_mux_delay + bl_t_data_out_delay) return results + + def determine_wordline_stage_efforts(self, external_cout): + """Get the all the stage efforts for each stage in the path within the bank clk_buf to a wordline""" + #Decoder is assumed to have settled before the negative edge of the clock. Delay model relies on this assumption + stage_effort_list = [] + wordline_cout = self.bitcell_array.get_wordline_cin() + external_cout + stage_effort_list += self.wordline_driver.determine_wordline_stage_efforts(wordline_cout) + return stage_effort_list + + def get_clk_cin(self): + """Get the relative capacitance of all the clk connections in the bank""" + #Current bank only uses clock (clk_buf) as an enable for the wordline driver. + total_clk_cin = self.wordline_driver.get_clk_cin() + return total_clk_cin \ No newline at end of file diff --git a/compiler/modules/bitcell_array.py b/compiler/modules/bitcell_array.py index 8328a0cf..b7c8ffc8 100644 --- a/compiler/modules/bitcell_array.py +++ b/compiler/modules/bitcell_array.py @@ -225,3 +225,10 @@ class bitcell_array(design.design): def input_load(self): wl_wire = self.gen_wl_wire() return wl_wire.return_input_cap() + + def get_wordline_cin(self): + """Get the relative input capacitance from the wordline connections in all the bitcell""" + #A single wordline is connected to all the bitcells in a single row meaning the capacitance depends on the # of columns + bitcell_wl_cin = self.cell.get_wl_cin() + total_cin = bitcell_wl_cin * self.column_size + return total_cin \ No newline at end of file diff --git a/compiler/modules/control_logic.py b/compiler/modules/control_logic.py index 4ac32967..a2b1dd8d 100644 --- a/compiler/modules/control_logic.py +++ b/compiler/modules/control_logic.py @@ -596,4 +596,14 @@ class control_logic(design.design): height=pin.height(), width=pin.width()) + def determine_wordline_stage_efforts(self, external_cout): + """Follows the clock signal to the clk_buf signal adding each stages stage effort to a list""" + stage_effort_list = [] + #Calculate the load on clk_buf within the module and add it to external load + internal_cout = self.ctrl_dff_array.get_clk_cin() + clk_buf_cap = internal_cout+external_cout + #First stage is the clock buffer + stage_effort_list += self.clkbuf.determine_wordline_stage_efforts(clk_buf_cap) + return stage_effort_list + \ No newline at end of file diff --git a/compiler/modules/dff.py b/compiler/modules/dff.py index 936bc822..19077689 100644 --- a/compiler/modules/dff.py +++ b/compiler/modules/dff.py @@ -2,7 +2,7 @@ import globals import design from math import log import design -from tech import GDS,layer +from tech import GDS,layer,spice,parameter import utils class dff(design.design): @@ -23,7 +23,6 @@ class dff(design.design): def analytical_power(self, proc, vdd, temp, load): """Returns dynamic and leakage power. Results in nW""" - from tech import spice c_eff = self.calculate_effective_capacitance(load) f = spice["default_event_rate"] power_dyn = c_eff*vdd*vdd*f @@ -34,7 +33,7 @@ class dff(design.design): def calculate_effective_capacitance(self, load): """Computes effective capacitance. Results in fF""" - from tech import spice, parameter + from tech import parameter c_load = load c_para = spice["flop_para_cap"]#ff transition_prob = spice["flop_transition_prob"] @@ -42,7 +41,12 @@ class dff(design.design): def analytical_delay(self, slew, load = 0.0): # dont know how to calculate this now, use constant in tech file - from tech import spice result = self.return_delay(spice["dff_delay"], spice["dff_slew"]) return result + + def get_clk_cin(self): + """Return the total capacitance (in relative units) that the clock is loaded by in the dff""" + #This is a handmade cell so the value must be entered in the tech.py file or estimated. + #Calculated in the tech file by summing the widths of all the gates and dividing by the minimum width. + return parameter["dff_clk_cin"] diff --git a/compiler/modules/dff_array.py b/compiler/modules/dff_array.py index 97e82e24..37d1ad29 100644 --- a/compiler/modules/dff_array.py +++ b/compiler/modules/dff_array.py @@ -157,3 +157,9 @@ class dff_array(design.design): def analytical_delay(self, slew, load=0.0): return self.dff.analytical_delay(slew=slew, load=load) + + def get_clk_cin(self): + """Return the total capacitance (in relative units) that the clock is loaded by in the dff array""" + dff_clk_cin = self.dff.get_clk_cin() + total_cin = dff_clk_cin * self.rows * self.columns + return total_cin \ No newline at end of file diff --git a/compiler/modules/dff_inv.py b/compiler/modules/dff_inv.py index 3a06c9c9..366d8647 100644 --- a/compiler/modules/dff_inv.py +++ b/compiler/modules/dff_inv.py @@ -148,3 +148,6 @@ class dff_inv(design.design): inv1_delay = self.inv1.analytical_delay(slew=dff_delay.slew, load=load) return dff_delay + inv1_delay + def get_clk_cin(self): + """Return the total capacitance (in relative units) that the clock is loaded by in the dff""" + return self.dff.get_clk_cin() \ No newline at end of file diff --git a/compiler/modules/dff_inv_array.py b/compiler/modules/dff_inv_array.py index aafe87e2..36231b26 100644 --- a/compiler/modules/dff_inv_array.py +++ b/compiler/modules/dff_inv_array.py @@ -182,3 +182,9 @@ class dff_inv_array(design.design): def analytical_delay(self, slew, load=0.0): return self.dff.analytical_delay(slew=slew, load=load) + + def get_clk_cin(self): + """Return the total capacitance (in relative units) that the clock is loaded by in the dff array""" + dff_clk_cin = self.dff.get_clk_cin() + total_cin = dff_clk_cin * self.rows * self.columns + return total_cin \ No newline at end of file diff --git a/compiler/modules/wordline_driver.py b/compiler/modules/wordline_driver.py index dd1039b0..8bc89734 100644 --- a/compiler/modules/wordline_driver.py +++ b/compiler/modules/wordline_driver.py @@ -238,4 +238,27 @@ class wordline_driver(design.design): def input_load(self): + """Gets the capacitance of the wordline driver in absolute units (fF)""" return self.nand2.input_load() + + def determine_wordline_stage_efforts(self, external_cout): + """Follows the clk_buf to a wordline signal adding each stages stage effort to a list""" + stage_effort_list = [] + stage1_cout = self.nand2.get_cin() + stage1 = self.inv_no_output.get_effort_stage(stage1_cout) + stage_effort_list.append(stage1) + + stage2_cout = self.inv.get_cin() + stage2 = self.nand2.get_effort_stage(stage2_cout) + stage_effort_list.append(stage2) + + stage3 = self.inv.get_effort_stage(external_cout) + stage_effort_list.append(stage3) + + return stage_effort_list + + def get_clk_cin(self): + """Get the relative capacitance of all the clk connections in the bank""" + #Clock is connected as an input to 1 inverter per row + total_cin = self.inv_no_output.get_cin() * self.rows + return total_cin \ No newline at end of file diff --git a/compiler/pgates/pinv.py b/compiler/pgates/pinv.py index 0ffd4f66..4d59b715 100644 --- a/compiler/pgates/pinv.py +++ b/compiler/pgates/pinv.py @@ -7,6 +7,7 @@ from vector import vector from math import ceil from globals import OPTS from utils import round_to_grid +import logical_effort class pinv(pgate.pgate): """ @@ -29,7 +30,8 @@ class pinv(pgate.pgate): pinv.unique_id += 1 pgate.pgate.__init__(self, name, height) debug.info(2, "create pinv structure {0} with size of {1}".format(name, size)) - + + self.size = size self.nmos_size = size self.pmos_size = beta*size self.beta = beta @@ -281,3 +283,12 @@ class pinv(pgate.pgate): c_para = spice["min_tx_drain_c"]*(self.nmos_size/parameter["min_tx_size"])#ff transition_prob = spice["inv_transition_prob"] return transition_prob*(c_load + c_para) + + def get_cin(self): + """Return the capacitance of the gate connection in generic capacitive units relative to the minimum width of a transistor""" + return self.nmos_size + self.pmos_size + + def get_effort_stage(self, cout): + """Returns an object representing the parameters for delay in tau units.""" + parasitic_delay = 1 + return logical_effort.logical_effort(self.size, self.get_cin(), cout, parasitic_delay) \ No newline at end of file diff --git a/compiler/pgates/pinvbuf.py b/compiler/pgates/pinvbuf.py index 76b3c929..490812ad 100644 --- a/compiler/pgates/pinvbuf.py +++ b/compiler/pgates/pinvbuf.py @@ -187,3 +187,14 @@ class pinvbuf(design.design): inv2_delay = self.inv2.analytical_delay(slew=inv1_delay.slew, load=load) return inv1_delay + inv2_delay + def determine_wordline_stage_efforts(self, external_cout): + """Get the stage efforts of the clk -> clk_buf path""" + stage_effort_list = [] + stage1_cout = self.inv1.get_cin() + self.inv2.get_cin() + stage1 = self.inv.get_effort_stage(stage1_cout) + stage_effort_list.append(stage1) + + stage2 = self.inv2.get_effort_stage(external_cout) + stage_effort_list.append(stage2) + + return stage_effort_list \ No newline at end of file diff --git a/compiler/pgates/pnand2.py b/compiler/pgates/pnand2.py index 1a31e3be..a79a7264 100644 --- a/compiler/pgates/pnand2.py +++ b/compiler/pgates/pnand2.py @@ -5,6 +5,7 @@ from tech import drc, parameter, spice from ptx import ptx from vector import vector from globals import OPTS +import logical_effort class pnand2(pgate.pgate): """ @@ -21,6 +22,7 @@ class pnand2(pgate.pgate): pgate.pgate.__init__(self, name, height) debug.info(2, "create pnand2 structure {0} with size of {1}".format(name, size)) + self.size = size self.nmos_size = 2*size self.pmos_size = parameter["beta"]*size self.nmos_width = self.nmos_size*drc("minwidth_tx") @@ -242,3 +244,12 @@ class pnand2(pgate.pgate): c_para = spice["min_tx_drain_c"]*(self.nmos_size/parameter["min_tx_size"])#ff transition_prob = spice["nand2_transition_prob"] return transition_prob*(c_load + c_para) + + def get_cin(self): + """Return the relative input capacitance of a single input""" + return self.nmos_size+self.pmos_size + + def get_effort_stage(self, cout): + """Returns an object representing the parameters for delay in tau units.""" + parasitic_delay = 2 + return logical_effort.logical_effort(self.size, self.get_cin(), cout, parasitic_delay) \ No newline at end of file diff --git a/compiler/sram_base.py b/compiler/sram_base.py index a1be1f30..de755f90 100644 --- a/compiler/sram_base.py +++ b/compiler/sram_base.py @@ -455,4 +455,36 @@ class sram_base(design): """ LH and HL are the same in analytical model. """ return self.bank.analytical_delay(vdd,slew,load) + def calculate_delay_to_wl(self): + stage_efforts = self.determine_wordline_stage_efforts() + return 0 + def determine_wordline_stage_efforts(self): + """Get the all the stage efforts for each stage in the path from clk to a wordline""" + stage_effort_list = [] + clk_buf_cout = self.get_clk_cin() + #Assume rw only. There are important differences with multiport that will need to be accounted for. + if self.control_logic_rw != None: + stage_effort_list += self.control_logic_rw.determine_wordline_stage_efforts(clk_buf_cout) + else: + stage_effort_list += self.control_logic_r.determine_wordline_stage_efforts(clk_buf_cout) + + #Clk_buf then move to the bank/wordline driver. Get the delay stages there. + external_wordline_cout = 0 #No loading on the wordline other than in the bank. + stage_effort_list += self.bank.determine_wordline_stage_efforts(external_wordline_cout) + + return stage_effort_list + + def get_clk_cin(self): + """Gets the capacitive load the of clock (clk_buf) for the sram""" + #As clk_buf is an output of the control logic. The cap for that module is not determined here. + row_addr_clk_cin = self.row_addr_dff.get_clk_cin() + data_clk_cin = self.data_dff.get_clk_cin() + col_addr_clk_cin = 0 + if self.col_addr_size > 0: + col_addr_clk_cin = self.col_addr_dff.get_clk_cin() + + #Bank cin... + bank_clk_cin = self.bank.get_clk_cin() + + return row_addr_clk_cin + data_clk_cin + col_addr_clk_cin + bank_clk_cin diff --git a/technology/freepdk45/tech/tech.py b/technology/freepdk45/tech/tech.py index 6cbeabdd..dd83793b 100644 --- a/technology/freepdk45/tech/tech.py +++ b/technology/freepdk45/tech/tech.py @@ -328,6 +328,10 @@ spice["nand2_transition_prob"] = .1875 # Transition probability of 2-input na spice["nand3_transition_prob"] = .1094 # Transition probability of 3-input nand. spice["nor2_transition_prob"] = .1875 # Transition probability of 2-input nor. +#Logical Effort relative values for the Handmade cells +spice["dff_clk_cin"] = 30.6 +parameter["6tcell_wl_cin"] = 3 + ################################################### ##END Spice Simulation Parameters ################################################### diff --git a/technology/scn4m_subm/tech/tech.py b/technology/scn4m_subm/tech/tech.py index 25afd844..d61ea5a4 100755 --- a/technology/scn4m_subm/tech/tech.py +++ b/technology/scn4m_subm/tech/tech.py @@ -293,6 +293,11 @@ spice["inv_transition_prob"] = .5 # Transition probability of inverter. spice["nand2_transition_prob"] = .1875 # Transition probability of 2-input nand. spice["nand3_transition_prob"] = .1094 # Transition probability of 3-input nand. spice["nor2_transition_prob"] = .1875 # Transition probability of 2-input nor. + +#Logical Effort relative values for the Handmade cells +parameter["dff_clk_cin"] = 27.5 +parameter["6tcell_wl_cin"] = 2 + ################################################### ##END Spice Simulation Parameters ################################################### From 8957c556dbb8119c7e479c36b34ae6fad1306711 Mon Sep 17 00:00:00 2001 From: Hunter Nichols Date: Thu, 8 Nov 2018 20:47:34 -0800 Subject: [PATCH 15/78] Added sense amp enable delay calculation. --- compiler/bitcells/bitcell.py | 9 ++-- compiler/bitcells/bitcell_1rw_1r.py | 9 +++- compiler/bitcells/pbitcell.py | 8 +++- compiler/bitcells/replica_bitcell.py | 9 +++- compiler/bitcells/replica_bitcell_1rw_1r.py | 10 +++- compiler/bitcells/replica_pbitcell.py | 8 +++- compiler/characterizer/logical_effort.py | 21 +++++++- compiler/modules/bank.py | 17 ++++++- compiler/modules/control_logic.py | 48 ++++++++++++++++++- compiler/modules/delay_chain.py | 17 +++++++ compiler/modules/precharge_array.py | 6 +++ compiler/modules/replica_bitline.py | 27 ++++++++++- compiler/modules/sense_amp.py | 8 +++- compiler/modules/sense_amp_array.py | 4 ++ compiler/pgates/pinvbuf.py | 18 ++++++- compiler/pgates/pnand3.py | 10 ++++ compiler/pgates/precharge.py | 6 +++ compiler/pgates/ptx.py | 4 +- compiler/sram_base.py | 53 ++++++++++++++++++--- technology/freepdk45/tech/tech.py | 7 ++- technology/scn4m_subm/tech/tech.py | 3 ++ 21 files changed, 276 insertions(+), 26 deletions(-) diff --git a/compiler/bitcells/bitcell.py b/compiler/bitcells/bitcell.py index ef0e8e9d..44b01cfe 100644 --- a/compiler/bitcells/bitcell.py +++ b/compiler/bitcells/bitcell.py @@ -1,7 +1,7 @@ import design import debug import utils -from tech import GDS,layer, parameter +from tech import GDS,layer,parameter,drc class bitcell(design.design): """ @@ -94,7 +94,8 @@ class bitcell(design.design): return total_power def get_wl_cin(self): - """Return the total capacitance (in relative units) that the clock is loaded by in the dff""" + """Return the relative capacitance of the access transistor gates""" #This is a handmade cell so the value must be entered in the tech.py file or estimated. - #Calculated in the tech file by summing the widths of all the gates and dividing by the minimum width. - return parameter["6tcell_wl_cin"] + #Calculated in the tech file by summing the widths of all the related gates and dividing by the minimum width. + access_tx_cin = parameter["6T_access_size"]/drc["minwidth_tx"] + return 2*access_tx_cin diff --git a/compiler/bitcells/bitcell_1rw_1r.py b/compiler/bitcells/bitcell_1rw_1r.py index 47ebe5fc..2d740d2b 100644 --- a/compiler/bitcells/bitcell_1rw_1r.py +++ b/compiler/bitcells/bitcell_1rw_1r.py @@ -1,7 +1,7 @@ import design import debug import utils -from tech import GDS,layer +from tech import GDS,layer,parameter,drc class bitcell_1rw_1r(design.design): """ @@ -96,3 +96,10 @@ class bitcell_1rw_1r(design.design): total_power = self.return_power(dynamic, leakage) return total_power + 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 in the tech.py file or estimated. + #Calculated in the tech file by summing the widths of all the related gates and dividing by the minimum width. + #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 \ No newline at end of file diff --git a/compiler/bitcells/pbitcell.py b/compiler/bitcells/pbitcell.py index aa860a1f..feb0d8c5 100644 --- a/compiler/bitcells/pbitcell.py +++ b/compiler/bitcells/pbitcell.py @@ -905,4 +905,10 @@ class pbitcell(design.design): leakage = spice["bitcell_leakage"] dynamic = 0 #temporary total_power = self.return_power(dynamic, leakage) - return total_power \ No newline at end of file + return total_power + + def get_wl_cin(self): + """Return the relative capacitance of the access transistor gates""" + #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() + return 2*access_tx_cin \ No newline at end of file diff --git a/compiler/bitcells/replica_bitcell.py b/compiler/bitcells/replica_bitcell.py index ca4b72c0..d896e29e 100644 --- a/compiler/bitcells/replica_bitcell.py +++ b/compiler/bitcells/replica_bitcell.py @@ -1,7 +1,7 @@ import design import debug import utils -from tech import GDS,layer +from tech import GDS,layer,drc,parameter class replica_bitcell(design.design): """ @@ -21,3 +21,10 @@ class replica_bitcell(design.design): self.width = replica_bitcell.width self.height = replica_bitcell.height self.pin_map = replica_bitcell.pin_map + + 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 in the tech.py file or estimated. + #Calculated in the tech file by summing the widths of all the related gates and dividing by the minimum width. + access_tx_cin = parameter["6T_access_size"]/drc["minwidth_tx"] + return 2*access_tx_cin \ No newline at end of file diff --git a/compiler/bitcells/replica_bitcell_1rw_1r.py b/compiler/bitcells/replica_bitcell_1rw_1r.py index aaf5b1dc..f5151958 100644 --- a/compiler/bitcells/replica_bitcell_1rw_1r.py +++ b/compiler/bitcells/replica_bitcell_1rw_1r.py @@ -1,7 +1,7 @@ import design import debug import utils -from tech import GDS,layer +from tech import GDS,layer,drc,parameter class replica_bitcell_1rw_1r(design.design): """ @@ -21,3 +21,11 @@ class replica_bitcell_1rw_1r(design.design): self.width = replica_bitcell_1rw_1r.width self.height = replica_bitcell_1rw_1r.height self.pin_map = replica_bitcell_1rw_1r.pin_map + + 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 in the tech.py file or estimated. + #Calculated in the tech file by summing the widths of all the related gates and dividing by the minimum width. + #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 \ No newline at end of file diff --git a/compiler/bitcells/replica_pbitcell.py b/compiler/bitcells/replica_pbitcell.py index 4b92d487..666d3646 100644 --- a/compiler/bitcells/replica_pbitcell.py +++ b/compiler/bitcells/replica_pbitcell.py @@ -1,6 +1,6 @@ import debug import design -from tech import drc, spice +from tech import drc, spice,parameter from vector import vector from globals import OPTS from pbitcell import pbitcell @@ -79,4 +79,8 @@ 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") - \ No newline at end of file + + 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 + return self.prbc.get_wl_cin() \ No newline at end of file diff --git a/compiler/characterizer/logical_effort.py b/compiler/characterizer/logical_effort.py index ac6ccbc5..d0f32eb7 100644 --- a/compiler/characterizer/logical_effort.py +++ b/compiler/characterizer/logical_effort.py @@ -13,4 +13,23 @@ class logical_effort(): self.cout = cout self.logical_effort = (self.cin/size)/logical_effort.min_inv_cin self.eletrical_effort = self.cout/self.cin - self.parasitic = parasitic \ No newline at end of file + self.parasitic_scale = parasitic + + def __str__(self): + return "g = " + str(self.logical_effort) + ", h = " + str(self.eletrical_effort) + ", p = " + str(self.parasitic_scale)+"*pinv" + + def get_stage_effort(self): + return self.logical_effort*self.eletrical_effort + + def get_parasitic_delay(self, pinv): + return pinv * self.parasitic_scale + + def get_stage_delay(self, pinv): + return self.get_stage_effort()+self.get_parasitic_delay(pinv) + +def calculate_relative_delay(stage_effort_list, pinv=parameter["min_inv_para_delay"]): + """Calculates the total delay of a given delay path made of a list of logical effort objects.""" + total_delay = 0 + for stage in stage_effort_list: + total_delay += stage.get_stage_delay(pinv) + return total_delay \ No newline at end of file diff --git a/compiler/modules/bank.py b/compiler/modules/bank.py index a369266d..e082aeef 100644 --- a/compiler/modules/bank.py +++ b/compiler/modules/bank.py @@ -964,4 +964,19 @@ class bank(design.design): """Get the relative capacitance of all the clk connections in the bank""" #Current bank only uses clock (clk_buf) as an enable for the wordline driver. total_clk_cin = self.wordline_driver.get_clk_cin() - return total_clk_cin \ No newline at end of file + return total_clk_cin + + def get_clk_bar_cin(self): + """Get the relative capacitance of all the clk_bar connections in the bank""" + #Current bank only uses clock bar (clk_buf_bar) as an enable for the precharge array. + + #Assume single port + port = 0 + total_clk_bar_cin = self.precharge_array[port].get_en_cin() + return total_clk_bar_cin + + def get_sen_cin(self): + """Get the relative capacitance of all the sense amp enable connections in the bank""" + #Current bank only uses sen as an enable for the sense amps. + total_sen_cin = self.sense_amp_array.get_en_cin() + return total_sen_cin \ No newline at end of file diff --git a/compiler/modules/control_logic.py b/compiler/modules/control_logic.py index a2b1dd8d..49e051dd 100644 --- a/compiler/modules/control_logic.py +++ b/compiler/modules/control_logic.py @@ -603,7 +603,51 @@ class control_logic(design.design): internal_cout = self.ctrl_dff_array.get_clk_cin() clk_buf_cap = internal_cout+external_cout #First stage is the clock buffer - stage_effort_list += self.clkbuf.determine_wordline_stage_efforts(clk_buf_cap) + stage_effort_list += self.clkbuf.determine_clk_buf_stage_efforts(clk_buf_cap) return stage_effort_list - \ No newline at end of file + + def determine_sa_enable_stage_efforts(self, ext_clk_buf_cout, ext_sen_cout): + """Follows the clock signal to the sense amp enable signal adding each stages stage effort to a list""" + stage_effort_list = [] + #Calculate the load on clk_buf_bar + int_clk_buf_cout = self.get_clk_buf_bar_cin() + clk_buf_bar_cout = int_clk_buf_cout+ext_clk_buf_cout + #First stage is the clock buffer + stage1 = self.clkbuf.determine_clk_buf_bar_stage_efforts(clk_buf_bar_cout) + stage_effort_list += stage1 + + #nand2 stage + stage2_cout = self.inv1.get_cin() + stage2 = self.nand2.get_effort_stage(stage2_cout) + stage_effort_list.append(stage2) + + #inverter stage + stage3_cout = self.replica_bitline.get_en_cin() + stage3 = self.inv1.get_effort_stage(stage3_cout) + stage_effort_list.append(stage3) + + #Replica bitline stage + stage4_cout = self.inv2.get_cin() + stage4 = self.replica_bitline.determine_sen_stage_efforts(stage4_cout) + stage_effort_list += stage4 + + #inverter (inv2) stage + stage5_cout = self.inv8.get_cin() + stage5 = self.inv2.get_effort_stage(stage5_cout) + stage_effort_list.append(stage5) + + #inverter (inv8) stage, s_en output + stage6 = self.inv8.get_effort_stage(ext_sen_cout) + stage_effort_list.append(stage6) + return stage_effort_list + + def get_clk_buf_bar_cin(self): + """Get the relative capacitance off the clk_buf_bar signal internal to the control logic""" + we_nand_cin = self.nand2.get_cin() + if self.port_type == "rw": + nand_mod = self.nand3 + else: + nand_mod = self.nand2 + sen_nand_cin = nand_mod.get_cin() + return we_nand_cin + sen_nand_cin \ No newline at end of file diff --git a/compiler/modules/delay_chain.py b/compiler/modules/delay_chain.py index f02daecb..72dfe93a 100644 --- a/compiler/modules/delay_chain.py +++ b/compiler/modules/delay_chain.py @@ -219,4 +219,21 @@ class delay_chain(design.design): start=mid_point, end=mid_point.scale(1,0)) + def get_cin(self): + """Get the enable input ralative capacitance""" + #Only 1 input to the delay chain which is connected to an inverter. + dc_cin = self.inv.get_cin() + return dc_cin + + def determine_delayed_en_stage_efforts(self, ext_delayed_en_cout): + """Get the stage efforts from the en to s_en. Does not compute the delay for the bitline load.""" + stage_effort_list = [] + #Add a stage to the list for every stage in delay chain. Stages only differ in fanout except the last which has an external cout. + for stage_fanout in self.fanout_list: + stage_cout = self.inv.get_cin()*(stage_fanout+1) + if len(stage_effort_list) == len(self.fanout_list)-1: #last stage + stage_cout+=ext_delayed_en_cout + stage = self.inv.get_effort_stage(stage_cout) + stage_effort_list.append(stage) + return stage_effort_list \ No newline at end of file diff --git a/compiler/modules/precharge_array.py b/compiler/modules/precharge_array.py index 7e0ee718..0b62525c 100644 --- a/compiler/modules/precharge_array.py +++ b/compiler/modules/precharge_array.py @@ -102,3 +102,9 @@ class precharge_array(design.design): for i in range(self.columns): offset = vector(self.pc_cell.width * i, 0) self.local_insts[i].place(offset) + + def get_en_cin(self): + """Get the relative capacitance of all the clk connections in the precharge array""" + #Assume single port + precharge_en_cin = self.pc_cell.get_en_cin() + return precharge_en_cin*self.columns \ No newline at end of file diff --git a/compiler/modules/replica_bitline.py b/compiler/modules/replica_bitline.py index 84aaa63d..c4019cd5 100644 --- a/compiler/modules/replica_bitline.py +++ b/compiler/modules/replica_bitline.py @@ -608,4 +608,29 @@ class replica_bitline(design.design): offset=pin.ll(), height=pin.height(), width=pin.width()) - + + def get_en_cin(self): + """Get the enable input relative capacitance""" + #The enable is only connected to the delay, get the cin from that module + en_cin = self.delay_chain.get_cin() + return en_cin + + def determine_sen_stage_efforts(self, ext_cout): + """Get the stage efforts from the en to s_en. Does not compute the delay for the bitline load.""" + stage_effort_list = [] + #Stage 1 is the delay chain + stage1_cout = self.get_delayed_en_cin() + stage1 = self.delay_chain.determine_delayed_en_stage_efforts(stage1_cout) + stage_effort_list += stage1 + + #The delay chain triggers the enable on the replica bitline (rbl). This is used to track the bitline delay whereas this + #model is intended to track every but that. Therefore, the next stage is the inverter after the rbl. + stage2 = self.inv.get_effort_stage(ext_cout) + stage_effort_list.append(stage2) + + return stage_effort_list + + def get_delayed_en_cin(self): + access_tx_cin = self.access_tx.get_cin() + rbc_cin = self.replica_bitcell.get_wl_cin() + return access_tx_cin + rbc_cin \ No newline at end of file diff --git a/compiler/modules/sense_amp.py b/compiler/modules/sense_amp.py index e2a0e131..01477917 100644 --- a/compiler/modules/sense_amp.py +++ b/compiler/modules/sense_amp.py @@ -1,7 +1,7 @@ import design import debug import utils -from tech import GDS,layer +from tech import GDS,layer, parameter,drc class sense_amp(design.design): """ @@ -41,3 +41,9 @@ 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_en_cin(self): + """Get the relative capacitance of sense amp enable gate cin""" + pmos_cin = parameter["sa_en_pmos_size"]/drc("minwidth_tx") + nmos_cin = parameter["sa_en_nmos_size"]/drc("minwidth_tx") + return 2*pmos_cin + nmos_cin \ No newline at end of file diff --git a/compiler/modules/sense_amp_array.py b/compiler/modules/sense_amp_array.py index 1bbbf02e..806acf71 100644 --- a/compiler/modules/sense_amp_array.py +++ b/compiler/modules/sense_amp_array.py @@ -140,3 +140,7 @@ class sense_amp_array(design.design): def analytical_delay(self, slew, load=0.0): return self.amp.analytical_delay(slew=slew, load=load) + def get_en_cin(self): + """Get the relative capacitance of all the sense amp enable connections in the array""" + sense_amp_en_cin = self.amp.get_en_cin() + return sense_amp_en_cin * self.words_per_row \ No newline at end of file diff --git a/compiler/pgates/pinvbuf.py b/compiler/pgates/pinvbuf.py index 490812ad..23826cd2 100644 --- a/compiler/pgates/pinvbuf.py +++ b/compiler/pgates/pinvbuf.py @@ -187,7 +187,7 @@ class pinvbuf(design.design): inv2_delay = self.inv2.analytical_delay(slew=inv1_delay.slew, load=load) return inv1_delay + inv2_delay - def determine_wordline_stage_efforts(self, external_cout): + def determine_clk_buf_stage_efforts(self, external_cout): """Get the stage efforts of the clk -> clk_buf path""" stage_effort_list = [] stage1_cout = self.inv1.get_cin() + self.inv2.get_cin() @@ -197,4 +197,20 @@ class pinvbuf(design.design): stage2 = self.inv2.get_effort_stage(external_cout) stage_effort_list.append(stage2) + return stage_effort_list + + def determine_clk_buf_bar_stage_efforts(self, external_cout): + """Get the stage efforts of the clk -> clk_buf path""" + stage_effort_list = [] + stage1_cout = self.inv1.get_cin() + self.inv2.get_cin() + stage1 = self.inv.get_effort_stage(stage1_cout) + stage_effort_list.append(stage1) + + stage2_cout = self.inv2.get_cin() + stage2 = self.inv1.get_effort_stage(stage2_cout) + stage_effort_list.append(stage2) + + stage3 = self.inv2.get_effort_stage(external_cout) + stage_effort_list.append(stage3) + return stage_effort_list \ No newline at end of file diff --git a/compiler/pgates/pnand3.py b/compiler/pgates/pnand3.py index 3247a371..555ee5b0 100644 --- a/compiler/pgates/pnand3.py +++ b/compiler/pgates/pnand3.py @@ -23,6 +23,7 @@ class pnand3(pgate.pgate): # We have trouble pitch matching a 3x sizes to the bitcell... # If we relax this, we could size this better. + self.size = size self.nmos_size = 2*size self.pmos_size = parameter["beta"]*size self.nmos_width = self.nmos_size*drc("minwidth_tx") @@ -261,3 +262,12 @@ class pnand3(pgate.pgate): c_para = spice["min_tx_drain_c"]*(self.nmos_size/parameter["min_tx_size"])#ff transition_prob = spice["nand3_transition_prob"] return transition_prob*(c_load + c_para) + + def get_cin(self): + """Return the relative input capacitance of a single input""" + return self.nmos_size+self.pmos_size + + def get_effort_stage(self, cout): + """Returns an object representing the parameters for delay in tau units.""" + parasitic_delay = 3 + return logical_effort.logical_effort(self.size, self.get_cin(), cout, parasitic_delay) \ No newline at end of file diff --git a/compiler/pgates/precharge.py b/compiler/pgates/precharge.py index ea67eeb5..0468de2a 100644 --- a/compiler/pgates/precharge.py +++ b/compiler/pgates/precharge.py @@ -234,3 +234,9 @@ class precharge(pgate.pgate): width=width, height=height) + def get_en_cin(self): + """Get the relative capacitance of the enable in the precharge cell""" + #The enable connect to three pmos gates. They all use the same size pmos. + pmos_cin = self.pmos.get_cin() + return 3*pmos_cin + \ No newline at end of file diff --git a/compiler/pgates/ptx.py b/compiler/pgates/ptx.py index 07d04028..24f4377a 100644 --- a/compiler/pgates/ptx.py +++ b/compiler/pgates/ptx.py @@ -353,4 +353,6 @@ class ptx(design.design): if self.connect_active: self.connect_fingered_active(drain_positions, source_positions) - + def get_cin(self): + """Returns the relative gate cin of the tx""" + return self.tx_width/drc("minwidth_tx") \ No newline at end of file diff --git a/compiler/sram_base.py b/compiler/sram_base.py index de755f90..bcedb6ad 100644 --- a/compiler/sram_base.py +++ b/compiler/sram_base.py @@ -5,7 +5,7 @@ import debug from importlib import reload from vector import vector from globals import OPTS, print_time - +import logical_effort from design import design class sram_base(design): @@ -67,7 +67,8 @@ class sram_base(design): # Must create the control logic before pins to get the pins self.add_modules() self.add_pins() - + self.calculate_delay_to_wl() + self.calculate_delay_to_sen() # This is for the lib file if we don't create layout self.width=0 self.height=0 @@ -455,9 +456,12 @@ class sram_base(design): """ LH and HL are the same in analytical model. """ return self.bank.analytical_delay(vdd,slew,load) - def calculate_delay_to_wl(self): + def calculate_delay_to_wl(self): + """Get the delay (in delay units) of the clk to a wordline in the bitcell array""" stage_efforts = self.determine_wordline_stage_efforts() - return 0 + clk_to_wl_delay = logical_effort.calculate_relative_delay(stage_efforts, 0) + debug.info(1, "Clock to wordline delay is {} delay units".format(clk_to_wl_delay)) + return clk_to_wl_delay def determine_wordline_stage_efforts(self): """Get the all the stage efforts for each stage in the path from clk to a wordline""" @@ -483,8 +487,45 @@ class sram_base(design): col_addr_clk_cin = 0 if self.col_addr_size > 0: col_addr_clk_cin = self.col_addr_dff.get_clk_cin() - - #Bank cin... bank_clk_cin = self.bank.get_clk_cin() return row_addr_clk_cin + data_clk_cin + col_addr_clk_cin + bank_clk_cin + + def calculate_delay_to_sen(self): + """Get the delay (in delay units) of the clk to a sense amp enable. + This does not incorporate the delay of the replica bitline. + """ + stage_efforts = self.determine_sa_enable_stage_efforts() + clk_to_sen_delay = logical_effort.calculate_relative_delay(stage_efforts, 0) + debug.info(1, "Clock to s_en delay is {} delay units".format(clk_to_sen_delay)) + return clk_to_sen_delay + + def determine_sa_enable_stage_efforts(self): + """Get the all the stage efforts for each stage in the path from clk to a sense amp enable""" + stage_effort_list = [] + clk_buf_bar_cout = self.get_clk_bar_cin() + clk_sen_cout = self.get_sen_cin() + #Assume rw only. There are important differences with multiport that will need to be accounted for. + if self.control_logic_rw != None: + stage_effort_list += self.control_logic_rw.determine_sa_enable_stage_efforts(clk_buf_bar_cout, clk_sen_cout) + else: + stage_effort_list += self.control_logic_r.determine_sa_enable_stage_efforts(clk_buf_bar_cout, clk_sen_cout) + + return stage_effort_list + + def get_clk_bar_cin(self): + """Gets the capacitive load the of clock (clk_buf_bar) for the sram""" + #As clk_buf_bar is an output of the control logic. The cap for that module is not determined here. + #Only the precharge cells use this signal (other than the control logic) + bank_clk_cin = self.bank.get_clk_bar_cin() + return bank_clk_cin + + def get_sen_cin(self): + """Gets the capacitive load the of sense amp enable for the sram""" + #As clk_buf_bar is an output of the control logic. The cap for that module is not determined here. + #Only the sense_amps use this signal (other than the control logic) + bank_sen_cin = self.bank.get_sen_cin() + return bank_sen_cin + + + \ No newline at end of file diff --git a/technology/freepdk45/tech/tech.py b/technology/freepdk45/tech/tech.py index dd83793b..14ce1953 100644 --- a/technology/freepdk45/tech/tech.py +++ b/technology/freepdk45/tech/tech.py @@ -329,8 +329,11 @@ spice["nand3_transition_prob"] = .1094 # Transition probability of 3-input na spice["nor2_transition_prob"] = .1875 # Transition probability of 2-input nor. #Logical Effort relative values for the Handmade cells -spice["dff_clk_cin"] = 30.6 -parameter["6tcell_wl_cin"] = 3 +parameter["dff_clk_cin"] = 30.6 #relative capacitance +parameter["6tcell_wl_cin"] = 3 #relative capacitance +parameter["min_inv_para_delay"] = .5 #Tau delay units +parameter["sa_en_pmos_size"] = .72 #micro-meters +parameter["sa_en_nmos_size"] = .27 #micro-meters ################################################### ##END Spice Simulation Parameters diff --git a/technology/scn4m_subm/tech/tech.py b/technology/scn4m_subm/tech/tech.py index d61ea5a4..077aa5a4 100755 --- a/technology/scn4m_subm/tech/tech.py +++ b/technology/scn4m_subm/tech/tech.py @@ -297,6 +297,9 @@ spice["nor2_transition_prob"] = .1875 # Transition probability of 2-input no #Logical Effort relative values for the Handmade cells parameter["dff_clk_cin"] = 27.5 parameter["6tcell_wl_cin"] = 2 +parameter["min_inv_para_delay"] = .5 +parameter["sa_en_pmos_size"] = 24*_lambda_ +parameter["sa_en_nmos_size"] = 9*_lambda_ ################################################### ##END Spice Simulation Parameters From 550d5cc729c13401f9b4273aeebb69f8aa729536 Mon Sep 17 00:00:00 2001 From: Matt Guthaus Date: Fri, 9 Nov 2018 16:33:08 -0800 Subject: [PATCH 16/78] Fix path to config file in test 30 --- compiler/tests/30_openram_test.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/compiler/tests/30_openram_test.py b/compiler/tests/30_openram_test.py index a8a16426..afa60216 100755 --- a/compiler/tests/30_openram_test.py +++ b/compiler/tests/30_openram_test.py @@ -46,12 +46,12 @@ class openram_test(openram_test): OPENRAM_HOME = os.path.abspath(os.environ.get("OPENRAM_HOME")) - cmd = "python3 {0}/openram.py -n -o {1} -p {2} {3} config_20_{4}.py 2>&1 > {5}/output.log".format(OPENRAM_HOME, - out_file, - out_path, - opts, - OPTS.tech_name, - out_path) + cmd_string = "python3 {0}/openram.py -n -o {1} -p {2} {3} {0}/tests/config_20_{4}.py 2>&1 > {2}/output.log" + cmd = cmd_string.format(OPENRAM_HOME, + out_file, + out_path, + opts, + OPTS.tech_name) debug.info(1, cmd) os.system(cmd) From ea1a1c7705a00285c0c8cd764146071e894480a2 Mon Sep 17 00:00:00 2001 From: Hunter Nichols Date: Fri, 9 Nov 2018 17:14:52 -0800 Subject: [PATCH 17/78] Added delay chain resizing based on analytical delay. --- compiler/characterizer/logical_effort.py | 5 +- compiler/modules/control_logic.py | 90 ++++++++++++++++--- compiler/sram_base.py | 109 ++++++++++++----------- 3 files changed, 137 insertions(+), 67 deletions(-) diff --git a/compiler/characterizer/logical_effort.py b/compiler/characterizer/logical_effort.py index d0f32eb7..7d3a2eb9 100644 --- a/compiler/characterizer/logical_effort.py +++ b/compiler/characterizer/logical_effort.py @@ -8,6 +8,8 @@ class logical_effort(): """ beta = parameter["beta"] min_inv_cin = 1+beta + pinv=parameter["min_inv_para_delay"] + def __init__(self, size, cin, cout, parasitic): self.cin = cin self.cout = cout @@ -32,4 +34,5 @@ def calculate_relative_delay(stage_effort_list, pinv=parameter["min_inv_para_del total_delay = 0 for stage in stage_effort_list: total_delay += stage.get_stage_delay(pinv) - return total_delay \ No newline at end of file + return total_delay + \ No newline at end of file diff --git a/compiler/modules/control_logic.py b/compiler/modules/control_logic.py index 49e051dd..21595698 100644 --- a/compiler/modules/control_logic.py +++ b/compiler/modules/control_logic.py @@ -12,13 +12,14 @@ from dff_inv_array import dff_inv_array import math from vector import vector from globals import OPTS +import logical_effort class control_logic(design.design): """ Dynamically generated Control logic for the total SRAM circuit. """ - def __init__(self, num_rows, words_per_row, port_type="rw"): + def __init__(self, num_rows, words_per_row, sram=None, port_type="rw"): """ Constructor """ name = "control_logic_" + port_type design.design.__init__(self, name) @@ -28,6 +29,11 @@ class control_logic(design.design): self.words_per_row = words_per_row self.port_type = port_type + #This is needed to resize the delay chain. Likely to be changed at some point. + self.sram=sram + self.wl_timing_tolerance = 1 #Determines how much larger the sen delay should be. Accounts for possible error in model. + self.parasitic_inv_delay = 0 #Keeping 0 for now until further testing. + if self.port_type == "rw": self.num_control_signals = 2 else: @@ -94,13 +100,19 @@ class control_logic(design.design): c = reload(__import__(OPTS.replica_bitline)) replica_bitline = getattr(c, OPTS.replica_bitline) - delay_stages, delay_fanout = self.get_delay_chain_size() + delay_stages_heuristic, delay_fanout_heuristic = self.get_heuristic_delay_chain_size() bitcell_loads = int(math.ceil(self.num_rows / 2.0)) - self.replica_bitline = replica_bitline(delay_stages, delay_fanout, bitcell_loads, name="replica_bitline_"+self.port_type) + self.replica_bitline = replica_bitline(delay_stages_heuristic, delay_fanout_heuristic, bitcell_loads, name="replica_bitline_"+self.port_type) + + if self.sram != None and not self.is_sen_timing_okay(): + #Resize the delay chain (by instantiating a new rbl) if the analytical timing failed. + delay_stages, delay_fanout = self.get_dynamic_delay_chain_size(delay_stages_heuristic, delay_fanout_heuristic) + self.replica_bitline = replica_bitline(delay_stages, delay_fanout, bitcell_loads, name="replica_bitline_resized_"+self.port_type) + self.add_mod(self.replica_bitline) - def get_delay_chain_size(self): - """Determine the size of the delay chain used for the Sense Amp Enable """ + def get_heuristic_delay_chain_size(self): + """Use a basic heuristic to determine the size of the delay chain used for the Sense Amp Enable """ # FIXME: These should be tuned according to the additional size parameters delay_fanout = 3 # This can be anything >=2 # Delay stages Must be non-inverting @@ -112,6 +124,35 @@ class control_logic(design.design): delay_stages = 4 return (delay_stages, delay_fanout) + def is_sen_timing_okay(self): + self.wl_delay = self.get_delay_to_wl() + self.sen_delay = self.get_delay_to_sen() + + #The sen delay must always be bigger than than the wl delay. This decides how much larger the sen delay must be before + #a re-size is warranted. + + if self.wl_delay*self.wl_timing_tolerance >= self.sen_delay: + return False + else: + return True + + 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""" + previous_delay_chain_delay = (previous_fanout+1+self.parasitic_inv_delay)*previous_stages + debug.info(2, "Previous delay chain produced {} delay units".format(previous_delay_chain_delay)) + + delay_fanout = 3 # 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 + required_delay = self.wl_delay*self.wl_timing_tolerance - (self.sen_delay-previous_delay_chain_delay) + debug.check(required_delay > 0, "Cannot size delay chain to have negative delay") + delay_stages = int(required_delay/(delay_fanout+1+self.parasitic_inv_delay)) + if delay_stages%2 == 1: #force an even number of stages. + delay_stages+=1 + #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 setup_signal_busses(self): """ Setup bus names, determine the size of the busses etc """ @@ -595,26 +636,48 @@ class control_logic(design.design): offset=pin.ll(), height=pin.height(), width=pin.width()) + + def get_delay_to_wl(self): + """Get the delay (in delay units) of the clk to a wordline in the bitcell array""" + debug.check(self.sram.all_mods_except_control_done, "Cannot calculate sense amp enable delay unless all module have been added.") + stage_efforts = self.determine_wordline_stage_efforts() + clk_to_wl_delay = logical_effort.calculate_relative_delay(stage_efforts, self.parasitic_inv_delay) + debug.info(1, "Clock to wordline delay is {} delay units".format(clk_to_wl_delay)) + return clk_to_wl_delay - def determine_wordline_stage_efforts(self, external_cout): - """Follows the clock signal to the clk_buf signal adding each stages stage effort to a list""" + def determine_wordline_stage_efforts(self): + """Follows the clock signal to the clk_buf signal to the wordline signal for the total path efforts""" stage_effort_list = [] #Calculate the load on clk_buf within the module and add it to external load internal_cout = self.ctrl_dff_array.get_clk_cin() - clk_buf_cap = internal_cout+external_cout + external_cout = self.sram.get_clk_cin() #First stage is the clock buffer - stage_effort_list += self.clkbuf.determine_clk_buf_stage_efforts(clk_buf_cap) + stage_effort_list += self.clkbuf.determine_clk_buf_stage_efforts(internal_cout+external_cout) + + #Then ask the sram for the other path delays (from the bank) + stage_effort_list += self.sram.determine_wordline_stage_efforts() return stage_effort_list - def determine_sa_enable_stage_efforts(self, ext_clk_buf_cout, ext_sen_cout): + def get_delay_to_sen(self): + """Get the delay (in delay units) of the clk to a sense amp enable. + This does not incorporate the delay of the replica bitline. + """ + debug.check(self.sram.all_mods_except_control_done, "Cannot calculate sense amp enable delay unless all module have been added.") + stage_efforts = self.determine_sa_enable_stage_efforts() + clk_to_sen_delay = logical_effort.calculate_relative_delay(stage_efforts, self.parasitic_inv_delay) + debug.info(1, "Clock to s_en delay is {} delay units".format(clk_to_sen_delay)) + return clk_to_sen_delay + + def determine_sa_enable_stage_efforts(self): """Follows the clock signal to the sense amp enable signal adding each stages stage effort to a list""" stage_effort_list = [] #Calculate the load on clk_buf_bar int_clk_buf_cout = self.get_clk_buf_bar_cin() - clk_buf_bar_cout = int_clk_buf_cout+ext_clk_buf_cout + ext_clk_buf_cout = self.sram.get_clk_bar_cin() + #First stage is the clock buffer - stage1 = self.clkbuf.determine_clk_buf_bar_stage_efforts(clk_buf_bar_cout) + stage1 = self.clkbuf.determine_clk_buf_bar_stage_efforts(int_clk_buf_cout+ext_clk_buf_cout) stage_effort_list += stage1 #nand2 stage @@ -638,7 +701,8 @@ class control_logic(design.design): stage_effort_list.append(stage5) #inverter (inv8) stage, s_en output - stage6 = self.inv8.get_effort_stage(ext_sen_cout) + clk_sen_cout = self.sram.get_sen_cin() + stage6 = self.inv8.get_effort_stage(clk_sen_cout) stage_effort_list.append(stage6) return stage_effort_list diff --git a/compiler/sram_base.py b/compiler/sram_base.py index bcedb6ad..7d52e093 100644 --- a/compiler/sram_base.py +++ b/compiler/sram_base.py @@ -20,7 +20,9 @@ class sram_base(design): sram_config.set_local_config(self) self.bank_insts = [] - + + #For logical effort delay calculations. + self.all_mods_except_control_done = False def add_pins(self): """ Add pins for entire SRAM. """ @@ -67,8 +69,6 @@ class sram_base(design): # Must create the control logic before pins to get the pins self.add_modules() self.add_pins() - self.calculate_delay_to_wl() - self.calculate_delay_to_sen() # This is for the lib file if we don't create layout self.width=0 self.height=0 @@ -216,22 +216,6 @@ class sram_base(design): c = reload(__import__(OPTS.bitcell)) self.mod_bitcell = getattr(c, OPTS.bitcell) self.bitcell = self.mod_bitcell() - - #c = reload(__import__(OPTS.control_logic)) - #self.mod_control_logic = getattr(c, OPTS.control_logic) - - - from control_logic import control_logic - # Create the control logic module for each port type - if OPTS.num_rw_ports>0: - self.control_logic = self.control_logic_rw = control_logic(num_rows=self.num_rows, words_per_row=self.words_per_row, port_type="rw") - self.add_mod(self.control_logic_rw) - if OPTS.num_w_ports>0: - self.control_logic_w = control_logic(num_rows=self.num_rows, words_per_row=self.words_per_row, port_type="w") - self.add_mod(self.control_logic_w) - if OPTS.num_r_ports>0: - self.control_logic_r = control_logic(num_rows=self.num_rows, words_per_row=self.words_per_row, port_type="r") - self.add_mod(self.control_logic_r) # Create the address and control flops (but not the clk) from dff_array import dff_array @@ -261,7 +245,23 @@ class sram_base(design): self.supply_rail_width = self.bank.supply_rail_width self.supply_rail_pitch = self.bank.supply_rail_pitch + + #The control logic can resize itself based on the other modules. Requires all other modules added before control logic. + self.all_mods_except_control_done = True + #c = reload(__import__(OPTS.control_logic)) + #self.mod_control_logic = getattr(c, OPTS.control_logic) + from control_logic import control_logic + # Create the control logic module for each port type + if OPTS.num_rw_ports>0: + self.control_logic = self.control_logic_rw = control_logic(num_rows=self.num_rows, words_per_row=self.words_per_row,sram=self, port_type="rw") + self.add_mod(self.control_logic_rw) + if OPTS.num_w_ports>0: + self.control_logic_w = control_logic(num_rows=self.num_rows, words_per_row=self.words_per_row,sram=self, port_type="w") + self.add_mod(self.control_logic_w) + if OPTS.num_r_ports>0: + self.control_logic_r = control_logic(num_rows=self.num_rows, words_per_row=self.words_per_row,sram=self, port_type="r") + self.add_mod(self.control_logic_r) def create_bank(self,bank_num): """ Create a bank """ @@ -456,24 +456,26 @@ class sram_base(design): """ LH and HL are the same in analytical model. """ return self.bank.analytical_delay(vdd,slew,load) - def calculate_delay_to_wl(self): - """Get the delay (in delay units) of the clk to a wordline in the bitcell array""" - stage_efforts = self.determine_wordline_stage_efforts() - clk_to_wl_delay = logical_effort.calculate_relative_delay(stage_efforts, 0) - debug.info(1, "Clock to wordline delay is {} delay units".format(clk_to_wl_delay)) - return clk_to_wl_delay + # def get_delay_to_wl(self): + # """Get the delay (in delay units) of the clk to a wordline in the bitcell array""" + # debug.check(self.all_mods_except_control_done, "Cannot calculate sense amp enable delay unless all module have been added.") + # stage_efforts = self.determine_wordline_stage_efforts() + # clk_to_wl_delay = logical_effort.calculate_relative_delay(stage_efforts, self.pinv) + # debug.info(1, "Clock to wordline delay is {} delay units".format(clk_to_wl_delay)) + # return clk_to_wl_delay def determine_wordline_stage_efforts(self): - """Get the all the stage efforts for each stage in the path from clk to a wordline""" + """Get the all the stage efforts for each stage in the path from clk_buf to a wordline""" + #clk stage_effort_list = [] - clk_buf_cout = self.get_clk_cin() - #Assume rw only. There are important differences with multiport that will need to be accounted for. - if self.control_logic_rw != None: - stage_effort_list += self.control_logic_rw.determine_wordline_stage_efforts(clk_buf_cout) - else: - stage_effort_list += self.control_logic_r.determine_wordline_stage_efforts(clk_buf_cout) + # clk_buf_cout = self.get_clk_cin() + # #Assume rw only. There are important differences with multiport that will need to be accounted for. + # if self.control_logic_rw != None: + # stage_effort_list += self.control_logic_rw.determine_wordline_stage_efforts(clk_buf_cout) + # else: + # stage_effort_list += self.control_logic_r.determine_wordline_stage_efforts(clk_buf_cout) - #Clk_buf then move to the bank/wordline driver. Get the delay stages there. + #Clk_buf originates from the control logic so only the bank is related to the wordline path external_wordline_cout = 0 #No loading on the wordline other than in the bank. stage_effort_list += self.bank.determine_wordline_stage_efforts(external_wordline_cout) @@ -491,27 +493,28 @@ class sram_base(design): return row_addr_clk_cin + data_clk_cin + col_addr_clk_cin + bank_clk_cin - def calculate_delay_to_sen(self): - """Get the delay (in delay units) of the clk to a sense amp enable. - This does not incorporate the delay of the replica bitline. - """ - stage_efforts = self.determine_sa_enable_stage_efforts() - clk_to_sen_delay = logical_effort.calculate_relative_delay(stage_efforts, 0) - debug.info(1, "Clock to s_en delay is {} delay units".format(clk_to_sen_delay)) - return clk_to_sen_delay + # def get_delay_to_sen(self): + # """Get the delay (in delay units) of the clk to a sense amp enable. + # This does not incorporate the delay of the replica bitline. + # """ + # debug.check(self.all_mods_except_control_done, "Cannot calculate sense amp enable delay unless all module have been added.") + # stage_efforts = self.determine_sa_enable_stage_efforts() + # clk_to_sen_delay = logical_effort.calculate_relative_delay(stage_efforts, self.pinv) + # debug.info(1, "Clock to s_en delay is {} delay units".format(clk_to_sen_delay)) + # return clk_to_sen_delay - def determine_sa_enable_stage_efforts(self): - """Get the all the stage efforts for each stage in the path from clk to a sense amp enable""" - stage_effort_list = [] - clk_buf_bar_cout = self.get_clk_bar_cin() - clk_sen_cout = self.get_sen_cin() - #Assume rw only. There are important differences with multiport that will need to be accounted for. - if self.control_logic_rw != None: - stage_effort_list += self.control_logic_rw.determine_sa_enable_stage_efforts(clk_buf_bar_cout, clk_sen_cout) - else: - stage_effort_list += self.control_logic_r.determine_sa_enable_stage_efforts(clk_buf_bar_cout, clk_sen_cout) + # def determine_sa_enable_stage_efforts(self): + # """Get the all the stage efforts for each stage in the path from clk to a sense amp enable""" + # stage_effort_list = [] + # clk_buf_bar_cout = self.get_clk_bar_cin() + # clk_sen_cout = self.get_sen_cin() + # #Assume rw only. There are important differences with multiport that will need to be accounted for. + # if self.control_logic_rw != None: + # stage_effort_list += self.control_logic_rw.determine_sa_enable_stage_efforts(clk_buf_bar_cout, clk_sen_cout) + # else: + # stage_effort_list += self.control_logic_r.determine_sa_enable_stage_efforts(clk_buf_bar_cout, clk_sen_cout) - return stage_effort_list + # return stage_effort_list def get_clk_bar_cin(self): """Gets the capacitive load the of clock (clk_buf_bar) for the sram""" @@ -527,5 +530,5 @@ class sram_base(design): bank_sen_cin = self.bank.get_sen_cin() return bank_sen_cin - + \ No newline at end of file From 4ba07e4b94fc8c17f8021ed2f9ec1600fe1e30f1 Mon Sep 17 00:00:00 2001 From: Jesse Cirimelli-Low Date: Sat, 10 Nov 2018 20:23:26 -0800 Subject: [PATCH 18/78] Complete rewrite of parser, all ports (except clock) added on multiport sheets --- compiler/characterizer/lib.py | 134 ++++- compiler/datasheet/datasheet_gen.py | 390 +++++++++++-- compiler/datasheet/wavedrom.py | 827 ++++++++++++++++++++++++++++ 3 files changed, 1278 insertions(+), 73 deletions(-) create mode 100644 compiler/datasheet/wavedrom.py diff --git a/compiler/characterizer/lib.py b/compiler/characterizer/lib.py index 5bf6f579..3909f202 100644 --- a/compiler/characterizer/lib.py +++ b/compiler/characterizer/lib.py @@ -509,32 +509,120 @@ class lib: return datasheet = open(OPTS.openram_temp +'/datasheet.info', 'a+') - datasheet.write("{0},{1},{2},{3},{4},{5},{6},{7},{8},{9},{10},{11},{12},{13},{14},{15},{16},{17},{18},{19},{20},{21}\n".format("sram_{0}_{1}_{2}".format(OPTS.word_size, OPTS.num_words, OPTS.tech_name), - OPTS.num_words, - OPTS.num_banks, - OPTS.num_rw_ports, - OPTS.num_w_ports, - OPTS.num_r_ports, - OPTS.tech_name, - corner[1], - corner[2], - corner[0], - round_time(self.char_sram_results["min_period"]), - self.out_dir, - lib_name, - OPTS.word_size, - min(list(map(round_time,self.times["setup_times_LH"]))), - max(list(map(round_time,self.times["setup_times_LH"]))), + datasheet.write("{0},{1},{2},{3},{4},{5},{6},{7},{8},{9},{10},{11},{12},{13},".format( + "sram_{0}_{1}_{2}".format(OPTS.word_size, OPTS.num_words, OPTS.tech_name), + OPTS.num_words, + OPTS.num_banks, + OPTS.num_rw_ports, + OPTS.num_w_ports, + OPTS.num_r_ports, + OPTS.tech_name, + corner[2], + corner[1], + corner[0], + round_time(self.char_sram_results["min_period"]), + self.out_dir, + lib_name, + OPTS.word_size + + )) - min(list(map(round_time,self.times["setup_times_HL"]))), - max(list(map(round_time,self.times["setup_times_HL"]))), + for port in self.all_ports: + #DIN timings + if port in self.write_ports: + datasheet.write("{0},{1},{2},{3},{4},{5},{6},{7},{8},".format( + "DIN{1}[{0}:0]".format(self.sram.word_size - 1, port), + min(list(map(round_time,self.times["setup_times_LH"]))), + max(list(map(round_time,self.times["setup_times_LH"]))), - min(list(map(round_time,self.times["hold_times_LH"]))), - max(list(map(round_time,self.times["hold_times_LH"]))), + min(list(map(round_time,self.times["setup_times_HL"]))), + max(list(map(round_time,self.times["setup_times_HL"]))), - min(list(map(round_time,self.times["hold_times_HL"]))), - max(list(map(round_time,self.times["hold_times_HL"]))))) + min(list(map(round_time,self.times["hold_times_LH"]))), + max(list(map(round_time,self.times["hold_times_LH"]))), + + 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: + #DOUT timing + if port in self.read_ports: + datasheet.write("{0},{1},{2},{3},{4},{5},{6},{7},{8},".format( + "DOUT{1}[{0}:0]".format(self.sram.word_size - 1, port), + min(list(map(round_time,self.char_port_results[port]["delay_lh"]))), + max(list(map(round_time,self.char_port_results[port]["delay_lh"]))), + + min(list(map(round_time,self.char_port_results[port]["delay_hl"]))), + max(list(map(round_time,self.char_port_results[port]["delay_hl"]))), + + min(list(map(round_time,self.char_port_results[port]["slew_lh"]))), + max(list(map(round_time,self.char_port_results[port]["slew_lh"]))), + + 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: + #CSb timings + datasheet.write("{0},{1},{2},{3},{4},{5},{6},{7},{8},".format( + "CSb{1}[{0}:0]".format(self.sram.word_size - 1, port), + min(list(map(round_time,self.times["setup_times_LH"]))), + max(list(map(round_time,self.times["setup_times_LH"]))), + + min(list(map(round_time,self.times["setup_times_HL"]))), + max(list(map(round_time,self.times["setup_times_HL"]))), + + min(list(map(round_time,self.times["hold_times_LH"]))), + max(list(map(round_time,self.times["hold_times_LH"]))), + + 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: + #ADDR timings + datasheet.write("{0},{1},{2},{3},{4},{5},{6},{7},{8},".format( + "ADDR{1}[{0}:0]".format(self.sram.addr_size - 1, port), + min(list(map(round_time,self.times["setup_times_LH"]))), + max(list(map(round_time,self.times["setup_times_LH"]))), + + min(list(map(round_time,self.times["setup_times_HL"]))), + max(list(map(round_time,self.times["setup_times_HL"]))), + + min(list(map(round_time,self.times["hold_times_LH"]))), + max(list(map(round_time,self.times["hold_times_LH"]))), + + 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: + if port in self.readwrite_ports: + + #WEb timings + datasheet.write("{0},{1},{2},{3},{4},{5},{6},{7},{8},".format( + "WEb{1}[{0}:0]".format(self.sram.word_size - 1, port), + min(list(map(round_time,self.times["setup_times_LH"]))), + max(list(map(round_time,self.times["setup_times_LH"]))), + + min(list(map(round_time,self.times["setup_times_HL"]))), + max(list(map(round_time,self.times["setup_times_HL"]))), + + min(list(map(round_time,self.times["hold_times_LH"]))), + max(list(map(round_time,self.times["hold_times_LH"]))), + + min(list(map(round_time,self.times["hold_times_HL"]))), + max(list(map(round_time,self.times["hold_times_HL"]))) + + )) - + datasheet.write("END\n") datasheet.close() diff --git a/compiler/datasheet/datasheet_gen.py b/compiler/datasheet/datasheet_gen.py index 5f163904..b48c2510 100644 --- a/compiler/datasheet/datasheet_gen.py +++ b/compiler/datasheet/datasheet_gen.py @@ -51,41 +51,70 @@ def parse_characterizer_csv(sram,f,pages): csv_reader = csv.reader(csv_file, delimiter=',') line_count = 0 for row in csv_reader: + found = 0 + col = 0 #defines layout of csv file - NAME = row[0] - NUM_WORDS = row[1] - NUM_BANKS = row[2] - NUM_RW_PORTS = row[3] - NUM_W_PORTS = row[4] - NUM_R_PORTS = row[5] - TECH_NAME = row[6] - TEMP = row[8] - VOLT = row[7] - PROC = row[9] - MIN_PERIOD = row[10] - OUT_DIR = row[11] - LIB_NAME = row[12] - WORD_SIZE = row[13] + NAME = row[col] + col += 1 - FF_SETUP_LH_MIN = row[14] - FF_SETUP_LH_MAX = row[15] + NUM_WORDS = row[col] + col += 1 - FF_SETUP_HL_MIN = row[16] - FF_SETUP_HL_MAX = row[17] + NUM_BANKS = row[col] + col += 1 - FF_HOLD_LH_MIN = row[18] - FF_HOLD_LH_MAX = row[19] + NUM_RW_PORTS = row[col] + col += 1 - FF_HOLD_HL_MIN = row[20] - FF_HOLD_HL_MAX = row[21] - + NUM_W_PORTS = row[col] + col += 1 + + NUM_R_PORTS = row[col] + col += 1 + + TECH_NAME = row[col] + col += 1 + + TEMP = row[col] + col += 1 + + VOLT = row[col] + col += 1 + + PROC = row[col] + col += 1 + + MIN_PERIOD = row[col] + col += 1 + + OUT_DIR = row[col] + col += 1 + + LIB_NAME = row[col] + col += 1 + + WORD_SIZE = row[col] + col += 1 + + FF_SETUP_LH_MIN = "1" + FF_SETUP_LH_MAX = "2" + + FF_SETUP_HL_MIN = "3" + FF_SETUP_HL_MAX = "4" + + FF_HOLD_LH_MIN = "5" + FF_HOLD_LH_MAX = "6" + + FF_HOLD_HL_MIN = "7" + FF_HOLD_HL_MAX = "8" + for sheet in pages: - if sheet.name == row[0]: + if sheet.name == NAME: found = 1 #if the .lib information is for an existing datasheet compare timing data @@ -117,31 +146,208 @@ def parse_characterizer_csv(sram,f,pages): #pass if MIN_PERIOD is zero (not supported by analyitcal model) pass - for item in sheet.timing: - if item.parameter == "CSb setup rising": - if float(FF_SETUP_LH_MIN) < float(item.min): - item.min = FF_SETUP_LH_MIN - elif float(FF_SETUP_LH_MAX) > float(item.max): - item.max = FF_SETUP_LH_MAX - if item.parameter == "CSb setup falling": - if float(FF_SETUP_HL_MIN) < float(item.min): - item.min = FF_SETUP_HL_MIN - elif float(FF_SETUP_HL_MAX) > float(item.max): - item.max = FF_SETUP_HL_MAX - if item.parameter == "CSb hold rising": - if float(FF_HOLD_HL_MIN) < float(item.min): - item.min = FF_SETUP_HL_MIN - elif float(FF_HOLD_HL_MAX) > float(item.max): - item.max = FF_SETUP_HL_MAX + while(True): + if(row[col].startswith('DIN')): + start = col + for item in sheet.timing: + if item.parameter.startswith(row[col]): + + if item.parameter.endswith('setup rising'): + if float(row[col+1]) < float(item.min): + item.min = row[col+1] + if float(row[col+2]) > float(item.max): + item.max = row[col+2] + + col += 2 + + elif item.parameter.endswith('setup falling'): + if float(row[col+1]) < float(item.min): + item.min = row[col+1] + if float(row[col+2]) > float(item.max): + item.max = row[col+2] + + col += 2 + + elif item.parameter.endswith('hold rising'): + if float(row[col+1]) < float(item.min): + item.min = row[col+1] + if float(row[col+2]) > float(item.max): + item.max = row[col+2] + + col += 2 + + elif item.parameter.endswith('hold falling'): + if float(row[col+1]) < float(item.min): + item.min = row[col+1] + if float(row[col+2]) > float(item.max): + item.max = row[col+2] + + col += 2 + + col += 1 + + elif(row[col].startswith('DOUT')): + start = col + for item in sheet.timing: + if item.parameter.startswith(row[col]): + + if item.parameter.endswith('cell rise'): + if float(row[col+1]) < float(item.min): + item.min = row[col+1] + if float(row[col+2]) > float(item.max): + item.max = row[col+2] + + col += 2 + + elif item.parameter.endswith('cell fall'): + if float(row[col+1]) < float(item.min): + item.min = row[col+1] + if float(row[col+2]) > float(item.max): + item.max = row[col+2] + + col += 2 + + elif item.parameter.endswith('rise transition'): + if float(row[col+1]) < float(item.min): + item.min = row[col+1] + if float(row[col+2]) > float(item.max): + item.max = row[col+2] + + col += 2 + + elif item.parameter.endswith('fall transition'): + if float(row[col+1]) < float(item.min): + item.min = row[col+1] + if float(row[col+2]) > float(item.max): + item.max = row[col+2] + + col += 2 + + col += 1 + + elif(row[col].startswith('CSb')): + start = col + for item in sheet.timing: + if item.parameter.startswith(row[col]): + + if item.parameter.endswith('setup rising'): + if float(row[col+1]) < float(item.min): + item.min = row[col+1] + if float(row[col+2]) > float(item.max): + item.max = row[col+2] + + col += 2 + + elif item.parameter.endswith('setup falling'): + if float(row[col+1]) < float(item.min): + item.min = row[col+1] + if float(row[col+2]) > float(item.max): + item.max = row[col+2] + + col += 2 + + elif item.parameter.endswith('hold rising'): + if float(row[col+1]) < float(item.min): + item.min = row[col+1] + if float(row[col+2]) > float(item.max): + item.max = row[col+2] + + col += 2 + + elif item.parameter.endswith('hold falling'): + if float(row[col+1]) < float(item.min): + item.min = row[col+1] + if float(row[col+2]) > float(item.max): + item.max = row[col+2] + + col += 2 + + col += 1 + + + elif(row[col].startswith('WEb')): + start = col + for item in sheet.timing: + if item.parameter.startswith(row[col]): + + if item.parameter.endswith('setup rising'): + if float(row[col+1]) < float(item.min): + item.min = row[col+1] + if float(row[col+2]) > float(item.max): + item.max = row[col+2] + + col += 2 + + elif item.parameter.endswith('setup falling'): + if float(row[col+1]) < float(item.min): + item.min = row[col+1] + if float(row[col+2]) > float(item.max): + item.max = row[col+2] + + col += 2 + + elif item.parameter.endswith('hold rising'): + if float(row[col+1]) < float(item.min): + item.min = row[col+1] + if float(row[col+2]) > float(item.max): + item.max = row[col+2] + + col += 2 + + elif item.parameter.endswith('hold falling'): + if float(row[col+1]) < float(item.min): + item.min = row[col+1] + if float(row[col+2]) > float(item.max): + item.max = row[col+2] + + col += 2 + + col += 1 + + + elif(row[col].startswith('ADDR')): + start = col + for item in sheet.timing: + if item.parameter.startswith(row[col]): + + if item.parameter.endswith('setup rising'): + if float(row[col+1]) < float(item.min): + item.min = row[col+1] + if float(row[col+2]) > float(item.max): + item.max = row[col+2] + + col += 2 + + elif item.parameter.endswith('setup falling'): + if float(row[col+1]) < float(item.min): + item.min = row[col+1] + if float(row[col+2]) > float(item.max): + item.max = row[col+2] + + col += 2 + + elif item.parameter.endswith('hold rising'): + if float(row[col+1]) < float(item.min): + item.min = row[col+1] + if float(row[col+2]) > float(item.max): + item.max = row[col+2] + + col += 2 + + elif item.parameter.endswith('hold falling'): + if float(row[col+1]) < float(item.min): + item.min = row[col+1] + if float(row[col+2]) > float(item.max): + item.max = row[col+2] + + col += 2 + + col += 1 + else: + break - if item.parameter == "CSb hold falling": - if float(FF_HOLD_HL_MIN) < float(item.min): - item.min = FF_SETUP_HL_MIN - elif float(FF_HOLD_HL_MAX) > float(item.max): - item.max = FF_SETUP_HL_MAX - #regardless of if there is already a corner for the current sram, append the new corner to the datasheet new_sheet.corners.append(characterization_corners_item(PROC,process_name(PROC),VOLT,TEMP,LIB_NAME.replace(OUT_DIR,'').replace(NAME,''))) @@ -163,14 +369,98 @@ def parse_characterizer_csv(sram,f,pages): new_sheet.operating.append(operating_conditions_item('Operating Frequency (F)*','','',"unknown",'MHz')) #analytical model fails to provide MIN_PERIOD #place holder timing and current data + new_sheet.timing.append(timing_and_current_data_item('Cycle time','2','3','4')) new_sheet.timing.append(timing_and_current_data_item('Access time','2','3','4')) + new_sheet.timing.append(timing_and_current_data_item('Positive clk setup','2','3','4')) new_sheet.timing.append(timing_and_current_data_item('Positive clk hold','2','3','4')) - new_sheet.timing.append(timing_and_current_data_item('CSb setup rising',FF_SETUP_LH_MIN,FF_SETUP_LH_MAX,'ns')) - new_sheet.timing.append(timing_and_current_data_item('CSb setup falling',FF_SETUP_HL_MIN,FF_SETUP_HL_MAX,'ns')) - new_sheet.timing.append(timing_and_current_data_item('CSb hold rising',FF_HOLD_LH_MIN,FF_HOLD_LH_MAX,'ns')) - new_sheet.timing.append(timing_and_current_data_item('CSb hold falling',FF_HOLD_HL_MIN,FF_HOLD_HL_MAX,'ns')) + + while(True): + if(row[col].startswith('DIN')): + start = col + new_sheet.timing.append(timing_and_current_data_item('{0} setup rising'.format(row[start]),row[col+1],row[col+2],'ns')) + col += 2 + + new_sheet.timing.append(timing_and_current_data_item('{0} setup falling'.format(row[start]),row[col+1],row[col+2],'ns')) + col += 2 + + new_sheet.timing.append(timing_and_current_data_item('{0} hold rising'.format(row[start]),row[col+1],row[col+2],'ns')) + col += 2 + + new_sheet.timing.append(timing_and_current_data_item('{0} hold falling'.format(row[start]),row[col+1],row[col+2],'ns')) + col += 2 + + col +=1 + + elif(row[col].startswith('DOUT')): + start = col + new_sheet.timing.append(timing_and_current_data_item('{0} cell rise'.format(row[start]),row[col+1],row[col+2],'ns')) + col += 2 + + new_sheet.timing.append(timing_and_current_data_item('{0} cell fall'.format(row[start]),row[col+1],row[col+2],'ns')) + col += 2 + + new_sheet.timing.append(timing_and_current_data_item('{0} rise transition'.format(row[start]),row[col+1],row[col+2],'ns')) + col += 2 + + new_sheet.timing.append(timing_and_current_data_item('{0} fall transition'.format(row[start]),row[col+1],row[col+2],'ns')) + col += 2 + + col +=1 + + elif(row[col].startswith('CSb')): + start = col + new_sheet.timing.append(timing_and_current_data_item('{0} setup rising'.format(row[start]),row[col+1],row[col+2],'ns')) + col += 2 + + new_sheet.timing.append(timing_and_current_data_item('{0} setup falling'.format(row[start]),row[col+1],row[col+2],'ns')) + col += 2 + + new_sheet.timing.append(timing_and_current_data_item('{0} hold rising'.format(row[start]),row[col+1],row[col+2],'ns')) + col += 2 + + new_sheet.timing.append(timing_and_current_data_item('{0} hold falling'.format(row[start]),row[col+1],row[col+2],'ns')) + col += 2 + + col +=1 + + elif(row[col].startswith('WEb')): + start = col + new_sheet.timing.append(timing_and_current_data_item('{0} setup rising'.format(row[start]),row[col+1],row[col+2],'ns')) + col += 2 + + new_sheet.timing.append(timing_and_current_data_item('{0} setup falling'.format(row[start]),row[col+1],row[col+2],'ns')) + col += 2 + + new_sheet.timing.append(timing_and_current_data_item('{0} hold rising'.format(row[start]),row[col+1],row[col+2],'ns')) + col += 2 + + new_sheet.timing.append(timing_and_current_data_item('{0} hold falling'.format(row[start]),row[col+1],row[col+2],'ns')) + col += 2 + + col +=1 + + elif(row[col].startswith('ADDR')): + start = col + new_sheet.timing.append(timing_and_current_data_item('{0} setup rising'.format(row[start]),row[col+1],row[col+2],'ns')) + col += 2 + + new_sheet.timing.append(timing_and_current_data_item('{0} setup falling'.format(row[start]),row[col+1],row[col+2],'ns')) + col += 2 + + new_sheet.timing.append(timing_and_current_data_item('{0} hold rising'.format(row[start]),row[col+1],row[col+2],'ns')) + col += 2 + + new_sheet.timing.append(timing_and_current_data_item('{0} hold falling'.format(row[start]),row[col+1],row[col+2],'ns')) + col += 2 + + col +=1 + else: + break + + + new_sheet.timing.append(timing_and_current_data_item('AC current','2','3','4')) new_sheet.timing.append(timing_and_current_data_item('Standby current','2','3','4')) diff --git a/compiler/datasheet/wavedrom.py b/compiler/datasheet/wavedrom.py new file mode 100644 index 00000000..e8c68c56 --- /dev/null +++ b/compiler/datasheet/wavedrom.py @@ -0,0 +1,827 @@ +#!/usr/bin/python +# The MIT License (MIT) +# +# Copyright (c) 2011-2016 Aliaksei Chapyzhenka +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +# THE SOFTWARE. +# +# Translated to Python from original file: +# https://github.com/drom/wavedrom/blob/master/src/WaveDrom.js +# + +import sys +import json +import math +import waveskin + +font_width = 7 + +lane = { + "xs" : 20, # tmpgraphlane0.width + "ys" : 20, # tmpgraphlane0.height + "xg" : 120, # tmpgraphlane0.x + "yg" : 0, # head gap + "yh0" : 0, # head gap title + "yh1" : 0, # head gap + "yf0" : 0, # foot gap + "yf1" : 0, # foot gap + "y0" : 5, # tmpgraphlane0.y + "yo" : 30, # tmpgraphlane1.y - y0 + "tgo" : -10, # tmptextlane0.x - xg + "ym" : 15, # tmptextlane0.y - y0 + "xlabel" : 6, # tmptextlabel.x - xg + "xmax" : 1, + "scale" : 1, + "head" : {}, + "foot" : {} +} + +def genBrick (texts, extra, times) : + + R = [] + if len( texts ) == 4 : + for j in range( times ): + + R.append(texts[0]) + + for i in range ( extra ): + R.append(texts[1]) + + R.append(texts[2]) + for i in range ( extra ): + R.append(texts[3]) + + return R + + if len( texts ) == 1 : + texts.append(texts[0]) + + R.append(texts[0]) + for i in range (times * (2 * (extra + 1)) - 1) : + R.append(texts[1]) + return R + +def genFirstWaveBrick (text, extra, times) : + + pattern = { + 'p': ['pclk', '111', 'nclk', '000'], + 'n': ['nclk', '000', 'pclk', '111'], + 'P': ['Pclk', '111', 'nclk', '000'], + 'N': ['Nclk', '000', 'pclk', '111'], + 'l': ['000'], + 'L': ['000'], + '0': ['000'], + 'h': ['111'], + 'H': ['111'], + '1': ['111'], + '=': ['vvv-2'], + '2': ['vvv-2'], + '3': ['vvv-3'], + '4': ['vvv-4'], + '5': ['vvv-5'], + 'd': ['ddd'], + 'u': ['uuu'], + 'z': ['zzz'] + } + + return genBrick( pattern.get( text, ['xxx'] ) , extra, times ); + +def genWaveBrick (text, extra, times) : + + x1 = {'p':'pclk', 'n':'nclk', 'P':'Pclk', 'N':'Nclk', 'h':'pclk', 'l':'nclk', 'H':'Pclk', 'L':'Nclk'} + x2 = {'0':'0', '1':'1', 'x':'x', 'd':'d', 'u':'u', 'z':'z', '=':'v', '2':'v', '3':'v', '4':'v', '5':'v' } + x3 = {'0': '', '1': '', 'x': '', 'd': '', 'u': '', 'z': '', '=':'-2', '2':'-2', '3':'-3', '4':'-4', '5':'-5'} + y1 = { + 'p':'0', 'n':'1', + 'P':'0', 'N':'1', + 'h':'1', 'l':'0', + 'H':'1', 'L':'0', + '0':'0', '1':'1', 'x':'x', 'd':'d', 'u':'u', 'z':'z', '=':'v', '2':'v', '3':'v', '4':'v', '5':'v'} + + y2 = { + 'p': '', 'n': '', + 'P': '', 'N': '', + 'h': '', 'l': '', + 'H': '', 'L': '', + '0': '', '1': '', 'x': '', 'd': '', 'u': '', 'z': '', '=':'-2', '2':'-2', '3':'-3', '4':'-4', '5':'-5'} + + x4 = { + 'p': '111', 'n': '000', + 'P': '111', 'N': '000', + 'h': '111', 'l': '000', + 'H': '111', 'L': '000', + '0': '000', '1': '111', 'x': 'xxx', 'd': 'ddd', 'u': 'uuu', 'z': 'zzz', + '=': 'vvv-2', '2': 'vvv-2', '3': 'vvv-3', '4': 'vvv-4', '5': 'vvv-5'} + + x5 = {'p':'nclk', 'n':'pclk', 'P':'nclk', 'N':'pclk'} + x6 = {'p': '000', 'n': '111', 'P': '000', 'N': '111'} + xclude = {'hp':'111', 'Hp':'111', 'ln': '000', 'Ln': '000', 'nh':'111', 'Nh':'111', 'pl': '000', 'Pl':'000'} + + #atext = text.split() + atext = text + + tmp0 = x4.get(atext[1]) + tmp1 = x1.get(atext[1]) + if tmp1 == None : + tmp2 = x2.get(atext[1]) + if tmp2 == None : + # unknown + return genBrick(['xxx'], extra, times) + else : + tmp3 = y1.get(atext[0]) + if tmp3 == None : + # unknown + return genBrick(['xxx'], extra, times) + + # soft curves + return genBrick([tmp3 + 'm' + tmp2 + y2[atext[0]] + x3[atext[1]], tmp0], extra, times) + + else : + tmp4 = xclude.get(text) + if tmp4 != None : + tmp1 = tmp4 + + # sharp curves + tmp2 = x5.get(atext[1]) + if tmp2 == None : + # hlHL + return genBrick([tmp1, tmp0], extra, times) + else : + # pnPN + return genBrick([tmp1, tmp0, tmp2, x6[atext[1]]], extra, times) + +def parseWaveLane (text, extra) : + + R = [] + Stack = text + Next = Stack[0] + Stack = Stack[1:] + + Repeats = 1 + while len(Stack) and ( Stack[0] == '.' or Stack[0] == '|' ): # repeaters parser + Stack=Stack[1:] + Repeats += 1 + + R.extend(genFirstWaveBrick(Next, extra, Repeats)) + + while len(Stack) : + Top = Next + Next = Stack[0] + Stack = Stack[1:] + Repeats = 1 + while len(Stack) and ( Stack[0] == '.' or Stack[0] == '|' ) : # repeaters parser + Stack=Stack[1:] + Repeats += 1 + R.extend(genWaveBrick((Top + Next), extra, Repeats)) + + for i in range( lane['phase'] ): + R = R[1:] + return R + +def parseWaveLanes (sig) : + + def data_extract (e) : + tmp = e.get('data') + if tmp == None : return None + if is_type_str (tmp) : tmp=tmp.split() + return tmp + + content = [] + for sigx in sig : + lane['period'] = sigx.get('period',1) + lane['phase'] = int( sigx.get('phase',0 ) * 2 ) + sub_content=[] + sub_content.append( [sigx.get('name',' '), sigx.get('phase',0 ) ] ) + sub_content.append( parseWaveLane( sigx['wave'], int(lane['period'] * lane['hscale'] - 1 ) ) if sigx.get('wave') else None ) + sub_content.append( data_extract(sigx) ) + content.append(sub_content) + + return content + +def findLaneMarkers (lanetext) : + + lcount = 0 + gcount = 0 + ret = [] + for i in range( len( lanetext ) ) : + if lanetext[i] == 'vvv-2' or lanetext[i] == 'vvv-3' or lanetext[i] == 'vvv-4' or lanetext[i] == 'vvv-5' : + lcount += 1 + else : + if lcount !=0 : + ret.append(gcount - ((lcount + 1) / 2)) + lcount = 0 + + gcount += 1 + + if lcount != 0 : + ret.append(gcount - ((lcount + 1) / 2)) + + return ret + +def renderWaveLane (root, content, index) : + + xmax = 0 + xgmax = 0 + glengths = [] + svgns = 'http://www.w3.org/2000/svg' + xlinkns = 'http://www.w3.org/1999/xlink' + xmlns = 'http://www.w3.org/XML/1998/namespace' + for j in range( len(content) ): + name = content[j][0][0] + if name : # check name + g = [ + 'g', + { + 'id': 'wavelane_' + str(j) + '_' + str(index), + 'transform': 'translate(0,' + str(lane['y0'] + j * lane['yo']) + ')' + } + ] + root.append(g) + title = [ + 'text', + { + 'x': lane['tgo'], + 'y': lane['ym'], + 'class': 'info', + 'text-anchor': 'end', + 'xml:space': 'preserve' + }, + ['tspan', name] + ] + g.append(title) + + glengths.append( len(name) * font_width + font_width ) + + xoffset = content[j][0][1] + xoffset = math.ceil(2 * xoffset) - 2 * xoffset if xoffset > 0 else -2 * xoffset + gg = [ + 'g', + { + 'id': 'wavelane_draw_' + str(j) + '_' + str(index), + 'transform': 'translate(' + str( xoffset * lane['xs'] ) + ', 0)' + } + ] + g.append(gg) + + if content[j][1] : + for i in range( len(content[j][1]) ) : + b = [ + 'use', + { + #'id': 'use_' + str(i) + '_' + str(j) + '_' + str(index), + 'xmlns:xlink':xlinkns, + 'xlink:href': '#' + str( content[j][1][i] ), + 'transform': 'translate(' + str(i * lane['xs']) + ')' + } + ] + gg.append(b) + + if content[j][2] and len(content[j][2]) : + labels = findLaneMarkers(content[j][1]) + if len(labels) != 0 : + for k in range( len(labels) ) : + if content[j][2] and k < len(content[j][2]) : + title = [ + 'text', + { + 'x': int(labels[k]) * lane['xs'] + lane['xlabel'], + 'y': lane['ym'], + 'text-anchor': 'middle', + 'xml:space': 'preserve' + }, + ['tspan',content[j][2][k]] + ] + gg.append(title) + + + if len(content[j][1]) > xmax : + xmax = len(content[j][1]) + + lane['xmax'] = xmax + lane['xg'] = xgmax + 20 + return glengths + +def renderMarks (root, content, index) : + + def captext ( g, cxt, anchor, y ) : + + if cxt.get(anchor) and cxt[anchor].get('text') : + tmark = [ + 'text', + { + 'x': float( cxt['xmax'] ) * float( cxt['xs'] ) / 2, + 'y': y, + 'text-anchor': 'middle', + 'fill': '#000', + 'xml:space': 'preserve' + }, cxt[anchor]['text'] + ] + g.append(tmark) + + def ticktock ( g, cxt, ref1, ref2, x, dx, y, length ) : + L = [] + + if cxt.get(ref1) == None or cxt[ref1].get(ref2) == None : + return + + val = cxt[ref1][ref2] + if is_type_str( val ) : + val = val.split() + elif type( val ) is int : + offset = val + val = [] + for i in range ( length ) : + val.append(i + offset) + + if type( val ) is list : + if len( val ) == 0 : + return + elif len( val ) == 1 : + offset = val[0] + if is_type_str(offset) : + L = val + else : + for i in range ( length ) : + L[i] = i + offset + + elif len( val ) == 2: + offset = int(val[0]) + step = int(val[1]) + tmp = val[1].split('.') + if len( tmp ) == 2 : + dp = len( tmp[1] ) + + if is_type_str(offset) or is_type_str(step) : + L = val + else : + offset = step * offset + for i in range( length ) : + L[i] = "{0:.",dp,"f}".format(step * i + offset) + + else : + L = val + + else : + return + + for i in range( length ) : + tmp = L[i] + tmark = [ + 'text', + { + 'x': i * dx + x, + 'y': y, + 'text-anchor': 'middle', + 'class': 'muted', + 'xml:space': 'preserve' + }, str(tmp) + ] + g.append(tmark) + + mstep = 2 * int(lane['hscale']) + mmstep = mstep * lane['xs'] + marks = int( lane['xmax'] / mstep ) + gy = len( content ) * int(lane['yo']) + + g = ['g', {'id': 'gmarks_' + str(index)}] + root.insert(0,g) + + for i in range( marks + 1): + gg = [ + 'path', + { + 'id': 'gmark_' + str(i) + '_' + str(index), + 'd': 'm ' + str(i * mmstep) + ',' + '0' + ' 0,' + str(gy), + 'style': 'stroke:#888;stroke-width:0.5;stroke-dasharray:1,3' + } + ] + g.append( gg ) + + captext(g, lane, 'head', -33 if lane['yh0'] else -13 ) + captext(g, lane, 'foot', gy + ( 45 if lane['yf0'] else 25 ) ) + + ticktock( g, lane, 'head', 'tick', 0, mmstep, -5, marks + 1) + ticktock( g, lane, 'head', 'tock', mmstep / 2, mmstep, -5, marks) + ticktock( g, lane, 'foot', 'tick', 0, mmstep, gy + 15, marks + 1) + ticktock( g, lane, 'foot', 'tock', mmstep / 2, mmstep, gy + 15, marks) + +def renderArcs (root, source, index, top) : + + Stack = [] + Edge = {'words': [], 'frm': 0, 'shape': '', 'to': 0, 'label': ''} + Events = {} + svgns = 'http://www.w3.org/2000/svg' + xmlns = 'http://www.w3.org/XML/1998/namespace' + + if source : + for i in range (len (source) ) : + lane['period'] = source[i].get('period',1) + lane['phase'] = int( source[i].get('phase',0 ) * 2 ) + text = source[i].get('node') + if text: + Stack = text + pos = 0 + while len( Stack ) : + eventname = Stack[0] + Stack=Stack[1:] + if eventname != '.' : + Events[eventname] = { + 'x' : str( int( float( lane['xs'] ) * (2 * pos * lane['period'] * lane['hscale'] - lane['phase'] ) + float( lane['xlabel'] ) ) ), + 'y' : str( int( i * lane['yo'] + lane['y0'] + float( lane['ys'] ) * 0.5 ) ) + } + pos += 1 + + gg = [ 'g', { 'id' : 'wavearcs_' + str( index ) } ] + root.append(gg) + + if top.get('edge') : + for i in range( len ( top['edge'] ) ) : + Edge['words'] = top['edge'][i].split() + Edge['label'] = top['edge'][i][len(Edge['words'][0]):] + Edge['label'] = Edge['label'][1:] + Edge['frm'] = Edge['words'][0][0] + Edge['to'] = Edge['words'][0][-1] + Edge['shape'] = Edge['words'][0][1:-1] + frm = Events[Edge['frm']] + to = Events[Edge['to']] + gmark = [ + 'path', + { + 'id': 'gmark_' + Edge['frm'] + '_' + Edge['to'], + 'd': 'M ' + frm['x'] + ',' + frm['y'] + ' ' + to['x'] + ',' + to['y'], + 'style': 'fill:none;stroke:#00F;stroke-width:1' + } + ] + gg.append(gmark) + dx = float( to['x'] ) - float( frm['x'] ) + dy = float( to['y'] ) - float( frm['y'] ) + lx = (float(frm['x']) + float(to['x'])) / 2 + ly = (float(frm['y']) + float(to['y'])) / 2 + pattern = { + '~' : {'d': 'M ' + frm['x'] + ',' + frm['y'] + ' c ' + str(0.7 * dx) + ', 0 ' + str(0.3 * dx) + ', ' + str(dy) + ' ' + str(dx) + ', ' + str(dy) }, + '-~' : {'d': 'M ' + frm['x'] + ',' + frm['y'] + ' c ' + str(0.7 * dx) + ', 0 ' + str(dx) + ', ' + str(dy) + ' ' + str(dx) + ', ' + str(dy) }, + '~-' : {'d': 'M ' + frm['x'] + ',' + frm['y'] + ' c ' + '0' + ', 0 ' + str(0.3 * dx) + ', ' + str(dy) + ' ' + str(dx) + ', ' + str(dy) }, + '-|' : {'d': 'm ' + frm['x'] + ',' + frm['y'] + ' ' + str(dx) + ',0 0,' + str(dy)}, + '|-' : {'d': 'm ' + frm['x'] + ',' + frm['y'] + ' 0,' + str(dy) + ' ' + str(dx) + ',0'}, + '-|-' : {'d': 'm ' + frm['x'] + ',' + frm['y'] + ' ' + str(dx / 2) + ',0 0,' + str(dy) + ' ' + str(dx / 2) + ',0'}, + '->' : {'style': 'marker-end:url(#arrowhead);stroke:#0041c4;stroke-width:1;fill:none'}, + '~>' : {'style': 'marker-end:url(#arrowhead);stroke:#0041c4;stroke-width:1;fill:none', 'd': 'M ' + frm['x'] + ',' + frm['y'] + ' ' + 'c ' + str(0.7 * dx) + ', 0 ' + str(0.3 * dx) + ', ' + str(dy) + ' ' + str(dx) + ', ' + str(dy)}, + '-~>' : {'style': 'marker-end:url(#arrowhead);stroke:#0041c4;stroke-width:1;fill:none', 'd': 'M ' + frm['x'] + ',' + frm['y'] + ' ' + 'c ' + str(0.7 * dx) + ', 0 ' + str(dx) + ', ' + str(dy) + ' ' + str(dx) + ', ' + str(dy)}, + '~->' : {'style': 'marker-end:url(#arrowhead);stroke:#0041c4;stroke-width:1;fill:none', 'd': 'M ' + frm['x'] + ',' + frm['y'] + ' ' + 'c ' + '0' + ', 0 ' + str(0.3 * dx) + ', ' + str(dy) + ' ' + str(dx) + ', ' + str(dy)}, + '-|>' : {'style': 'marker-end:url(#arrowhead);stroke:#0041c4;stroke-width:1;fill:none', 'd': 'm ' + frm['x'] + ',' + frm['y'] + ' ' + str(dx) + ',0 0,' + str(dy)}, + '|->' : {'style': 'marker-end:url(#arrowhead);stroke:#0041c4;stroke-width:1;fill:none', 'd': 'm ' + frm['x'] + ',' + frm['y'] + ' 0,' + str(dy) + ' ' + str(dx) + ',0'}, + '-|->' : {'style': 'marker-end:url(#arrowhead);stroke:#0041c4;stroke-width:1;fill:none', 'd': 'm ' + frm['x'] + ',' + frm['y'] + ' ' + str(dx / 2) + ',0 0,' + str(dy) + ' ' + str(dx / 2) + ',0'}, + '<->' : {'style': 'marker-end:url(#arrowhead);marker-start:url(#arrowtail);stroke:#0041c4;stroke-width:1;fill:none'}, + '<~>' : {'style': 'marker-end:url(#arrowhead);marker-start:url(#arrowtail);stroke:#0041c4;stroke-width:1;fill:none','d': 'M ' + frm['x'] + ',' + frm['y'] + ' ' + 'c ' + str(0.7 * dx) + ', 0 ' + str(0.3 * dx) + ', ' + str(dy) + ' ' + str(dx) + ', ' + str(dy)}, + '<-~>' : {'style': 'marker-end:url(#arrowhead);marker-start:url(#arrowtail);stroke:#0041c4;stroke-width:1;fill:none','d': 'M ' + frm['x'] + ',' + frm['y'] + ' ' + 'c ' + str(0.7 * dx) + ', 0 ' + str(dx) + ', ' + str(dy) + ' ' + str(dx) + ', ' + str(dy)}, + '<-|>' : {'style': 'marker-end:url(#arrowhead);marker-start:url(#arrowtail);stroke:#0041c4;stroke-width:1;fill:none','d': 'm ' + frm['x'] + ',' + frm['y'] + ' ' + str(dx) + ',0 0,' + str(dy)}, + '<-|->': {'style': 'marker-end:url(#arrowhead);marker-start:url(#arrowtail);stroke:#0041c4;stroke-width:1;fill:none','d': 'm ' + frm['x'] + ',' + frm['y'] + ' ' + str(dx / 2) + ',0 0,' + str(dy) + ' ' + str(dx / 2) + ',0'} + } + gmark[1].update( pattern.get( Edge['shape'], { 'style': 'fill:none;stroke:#00F;stroke-width:1' } ) ) + + if Edge['label']: + if Edge['shape'] == '-~' : + lx = float(frm['x']) + (float(to['x']) - float(frm['x'])) * 0.75 + if Edge['shape'] == '~-' : + lx = float(frm['x']) + (float(to['x']) - float(frm['x'])) * 0.25 + if Edge['shape'] == '-|' : + lx = float(to['x']) + if Edge['shape'] == '|-' : + lx = float(frm['x']) + if Edge['shape'] == '-~>': + lx = float(frm['x']) + (float(to['x']) - float(frm['x'])) * 0.75 + if Edge['shape'] == '~->': + lx = float(frm['x']) + (float(to['x']) - float(frm['x'])) * 0.25 + if Edge['shape'] == '-|>' : + lx = float(to['x']) + if Edge['shape'] == '|->' : + lx = float(frm['x']) + if Edge['shape'] == '<-~>': + lx = float(frm['x']) + (float(to['x']) - float(frm['x'])) * 0.75 + if Edge['shape'] =='<-|>' : + lx = float(to['x']) + + lwidth = len( Edge['label'] ) * font_width + label = [ + 'text', + { + 'style': 'font-size:10px;', + 'text-anchor': 'middle', + 'xml:space': 'preserve', + 'x': int( lx ), + 'y': int( ly + 3 ) + }, + [ 'tspan', Edge['label'] ] + ] + underlabel = [ + 'rect', + { + 'height': 9, + 'style': 'fill:#FFF;', + 'width': lwidth, + 'x': int( lx - lwidth / 2 ), + 'y': int( ly - 5 ) + } + ] + gg.append(underlabel) + gg.append(label) + + for k in Events: + if k.islower() : + if int( Events[k]['x'] ) > 0 : + lwidth = len( k ) * font_width + underlabel = [ + 'rect', + { + 'x': float( Events[k]['x'] ) - float(lwidth) / 2, + 'y': int( Events[k]['y'] ) - 4, + 'height': 8, + 'width': lwidth, + 'style': 'fill:#FFF;' + } + ] + gg.append(underlabel) + label = [ + 'text', + { + 'style': 'font-size:8px;', + 'x': int( Events[k]['x'] ), + 'y': int( Events[k]['y'] ) + 2, + 'width': lwidth, + 'text-anchor': 'middle' + }, + k + ] + gg.append(label) + +def parseConfig (source) : + + lane['hscale'] = 1 + if lane.get('hscale0') : + lane['hscale'] = lane['hscale0'] + + if source and source.get('config') and source.get('config').get('hscale'): + hscale = round(source.get('config').get('hscale')) + if hscale > 0 : + if hscale > 100 : hscale = 100 + lane['hscale'] = hscale + + lane['yh0'] = 0 + lane['yh1'] = 0 + if source and source.get('head') : + lane['head'] = source['head'] + if source.get('head').get('tick',0) == 0 : lane['yh0'] = 20 + if source.get('head').get('tock',0) == 0 : lane['yh0'] = 20 + if source.get('head').get('text') : lane['yh1'] = 46; lane['head']['text'] = source['head']['text'] + + lane['yf0'] = 0 + lane['yf1'] = 0 + if source and source.get('foot') : + lane['foot'] = source['foot'] + if source.get('foot').get('tick',0) == 0 : lane['yf0'] = 20 + if source.get('foot').get('tock',0) == 0 : lane['yf0'] = 20 + if source.get('foot').get('text') : lane['yf1'] = 46; lane['foot']['text'] = source['foot']['text'] + +def rec (tmp, state) : + + name = str( tmp[0] ) + delta_x = 25 + + state['x'] += delta_x + for i in range( len( tmp ) ) : + if type( tmp[i] ) is list : + old_y = state['y'] + rec( tmp[i], state ) + state['groups'].append( {'x':state['xx'], 'y':old_y, 'height':state['y'] - old_y, 'name': state['name'] } ) + elif type( tmp[i] ) is dict : + state['lanes'].append(tmp[i]) + state['width'].append(state['x']) + state['y'] += 1 + + state['xx'] = state['x'] + state['x'] -= delta_x + state['name'] = name + +def insertSVGTemplate (index, parent, source) : + + e = waveskin.WaveSkin['default'] + + if source.get('config') and source.get('config').get('skin') : + if waveskin.WaveSkin.get( source.get('config').get('skin') ) : + e = waveskin.WaveSkin[ source.get('config').get('skin') ] + + if index == 0 : + lane['xs'] = int( e[3][1][2][1]['width'] ) + lane['ys'] = int( e[3][1][2][1]['height'] ) + lane['xlabel'] = int( e[3][1][2][1]['x'] ) + lane['ym'] = int( e[3][1][2][1]['y'] ) + + else : + e = ['svg', {'id': 'svg', 'xmlns': 'http://www.w3.org/2000/svg', 'xmlns:xlink': 'http://www.w3.org/1999/xlink', 'height': '0'}, + ['g', {'id': 'waves'}, + ['g', {'id': 'lanes'}], + ['g', {'id': 'groups'}] + ] + ] + + e[-1][1]['id'] = 'waves_' + str(index) + e[-1][2][1]['id'] = 'lanes_' + str(index) + e[-1][3][1]['id'] = 'groups_' + str(index) + e[1]['id'] = 'svgcontent_' + str(index) + e[1]['height'] = 0 + + parent.extend(e) + +def renderWaveForm (index, source, output) : + + xmax = 0 + root = [] + groups = [] + + if source.get('signal'): + insertSVGTemplate(index, output, source) + parseConfig( source ) + ret = {'x':0, 'y':0, 'xmax':0, 'width':[], 'lanes':[], 'groups':[] } + rec( source['signal'], ret ) + content = parseWaveLanes(ret['lanes']) + glengths = renderWaveLane(root, content, index) + for i in range( len( glengths ) ): + xmax = max( xmax, ( glengths[i] + ret['width'][i] ) ) + renderMarks(root, content, index) + renderArcs(root, ret['lanes'], index, source) + renderGaps(root, ret['lanes'], index) + renderGroups(groups, ret['groups'], index) + lane['xg'] = int( math.ceil( float( xmax - lane['tgo'] ) / float(lane['xs'] ) ) ) * lane['xs'] + width = (lane['xg'] + lane['xs'] * (lane['xmax'] + 1) ) + height = len(content) * lane['yo'] + lane['yh0'] + lane['yh1'] + lane['yf0'] + lane['yf1'] + output[1]={ + 'id' :'svgcontent_' + str(index), + 'xmlns' :"http://www.w3.org/2000/svg", + 'xmlns:xlink':"http://www.w3.org/1999/xlink", + 'width' :str(width), + 'height' :str(height), + 'viewBox' :'0 0 ' + str(width) + ' ' + str(height), + 'overflow' :"hidden" + } + output[-1][2][1]['transform']='translate(' + str(lane['xg'] + 0.5) + ', ' + str((float(lane['yh0']) + float(lane['yh1'])) + 0.5) + ')' + + output[-1][2].extend(root) + output[-1][3].extend(groups) + +def renderGroups (root, groups, index) : + + svgns = 'http://www.w3.org/2000/svg', + xmlns = 'http://www.w3.org/XML/1998/namespace' + + for i in range( len( groups ) ) : + group = [ + 'path', + { + 'id': 'group_' + str(i) + '_' + str(index), + 'd': 'm ' + str( groups[i]['x'] + 0.5 ) + ',' + str( groups[i]['y']* lane['yo'] + 3.5 + lane['yh0'] + lane['yh1'] ) + ' c -3,0 -5,2 -5,5 l 0,' + str( int( groups[i]['height'] * lane['yo'] - 16 ) ) + ' c 0,3 2,5 5,5', + 'style': 'stroke:#0041c4;stroke-width:1;fill:none' + } + ] + root.append(group) + + name = groups[i]['name'] + x = str( int( groups[i]['x'] - 10 ) ) + y = str( int( lane['yo'] * (groups[i]['y'] + (float(groups[i]['height']) / 2)) + lane['yh0'] + lane['yh1'] ) ) + label = [ + ['g', + {'transform': 'translate(' + x + ',' + y + ')'}, + ['g', {'transform': 'rotate(270)'}, + 'text', + { + 'text-anchor': 'middle', + 'class': 'info', + 'xml:space' : 'preserve' + }, + ['tspan',name] + ] + ] + ] + root.append(label) + +def renderGaps (root, source, index) : + + Stack = [] + svgns = 'http://www.w3.org/2000/svg', + xlinkns = 'http://www.w3.org/1999/xlink' + + if source: + + gg = [ + 'g', + { 'id': 'wavegaps_' + str(index) } + ] + + for i in range( len( source )): + lane['period'] = source[i].get('period',1) + lane['phase'] = int( source[i].get('phase',0 ) * 2 ) + + g = [ + 'g', + { + 'id': 'wavegap_' + str(i) + '_' + str(index), + 'transform': 'translate(0,' + str(lane['y0'] + i * lane['yo']) + ')' + } + ] + gg.append(g) + + if source[i].get('wave'): + text = source[i]['wave'] + Stack = text + pos = 0 + while len( Stack ) : + c = Stack [0] + Stack = Stack[1:] + if c == '|' : + b = [ + 'use', + { + 'xmlns:xlink':xlinkns, + 'xlink:href':'#gap', + 'transform': 'translate(' + str(int(float(lane['xs']) * ((2 * pos + 1) * float(lane['period']) * float(lane['hscale']) - float(lane['phase'])))) + ')' + } + ] + g.append(b) + pos += 1 + + root.append( gg ) + +def is_type_str( var ) : + if sys.version_info[0] < 3: + return type( var ) is str or type( var ) is unicode + else: + return type( var ) is str + +def convert_to_svg( root ) : + + svg_output = '' + + if type( root ) is list: + if len(root) >= 2 and type( root[1] ) is dict: + if len( root ) == 2 : + svg_output += '<' + root[0] + convert_to_svg( root[1] ) + '/>\n' + elif len( root ) >= 3 : + svg_output += '<' + root[0] + convert_to_svg( root[1] ) + '>\n' + if len( root ) == 3: + svg_output += convert_to_svg( root[2] ) + else: + svg_output += convert_to_svg( root[2:] ) + svg_output += '\n' + elif type( root[0] ) is list: + for eleml in root: + svg_output += convert_to_svg( eleml ) + else: + svg_output += '<' + root[0] + '>\n' + for eleml in root[1:]: + svg_output += convert_to_svg( eleml ) + svg_output += '\n' + elif type( root ) is dict: + for elemd in root : + svg_output += ' ' + elemd + '="' + str(root[elemd]) + '"' + else: + svg_output += root + + return svg_output + +if __name__ == '__main__': + + if len( sys.argv ) != 5: + print ( 'Usage : ' + sys.argv[0] + ' source svg ' ) + exit(1) + + if sys.argv[3] != 'svg' : + print ( 'Error: only SVG format supported.' ) + exit(1) + + output=[] + inputfile = sys.argv[2] + outputfile = sys.argv[4] + + with open(inputfile,'r') as f: + jinput = json.load(f) + + renderWaveForm(0,jinput,output) + svg_output = convert_to_svg(output) + + with open(outputfile,'w') as f: + f.write( svg_output ) From aadf160ce4d22db48c6a0e9b84aa5f3ef8791009 Mon Sep 17 00:00:00 2001 From: Jesse Cirimelli-Low Date: Sun, 11 Nov 2018 06:05:14 -0800 Subject: [PATCH 19/78] added missing space in sheet --- compiler/datasheet/datasheet.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/compiler/datasheet/datasheet.py b/compiler/datasheet/datasheet.py index beded426..144f1968 100644 --- a/compiler/datasheet/datasheet.py +++ b/compiler/datasheet/datasheet.py @@ -33,8 +33,8 @@ class datasheet(): if OPTS.check_lvsdrc: - DRC = total_drc_errors - LVS = total_lvs_errors + DRC = str(total_drc_errors) + ' errors' + LVS = str(total_lvs_errors) + ' errors' PEX = 'n/a' else: DRC = 'skipped' @@ -43,8 +43,8 @@ class datasheet(): self.html +='

'+ self.name + '.html' + '

' - self.html +='

'+ 'DRC: ' + str(DRC) + ' errors'+'

' - self.html +='

'+ 'LVS: ' + str(LVS) + ' errors'+'

' + self.html +='

'+ 'DRC: ' + str(DRC) + '

' + self.html +='

'+ 'LVS: ' + str(LVS) + '

' self.html +='

Ports and Configuration (DEBUG)

' self.html += in_out(self.io,table_id='data').__html__().replace('<','<').replace('"','"').replace('>',">") From 5c4ee911aaae8e34641a7706d3107848fb890429 Mon Sep 17 00:00:00 2001 From: Jesse Cirimelli-Low Date: Sun, 11 Nov 2018 07:22:13 -0800 Subject: [PATCH 20/78] added another VLSI logo and fixed control port numbering --- compiler/characterizer/lib.py | 4 ++-- compiler/datasheet/datasheet.py | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/compiler/characterizer/lib.py b/compiler/characterizer/lib.py index 3909f202..da96894d 100644 --- a/compiler/characterizer/lib.py +++ b/compiler/characterizer/lib.py @@ -569,7 +569,7 @@ class lib: for port in self.all_ports: #CSb timings datasheet.write("{0},{1},{2},{3},{4},{5},{6},{7},{8},".format( - "CSb{1}[{0}:0]".format(self.sram.word_size - 1, port), + "CSb{0}".format(port), min(list(map(round_time,self.times["setup_times_LH"]))), max(list(map(round_time,self.times["setup_times_LH"]))), @@ -608,7 +608,7 @@ class lib: #WEb timings datasheet.write("{0},{1},{2},{3},{4},{5},{6},{7},{8},".format( - "WEb{1}[{0}:0]".format(self.sram.word_size - 1, port), + "WEb{0}".format(port), min(list(map(round_time,self.times["setup_times_LH"]))), max(list(map(round_time,self.times["setup_times_LH"]))), diff --git a/compiler/datasheet/datasheet.py b/compiler/datasheet/datasheet.py index 144f1968..70957b75 100644 --- a/compiler/datasheet/datasheet.py +++ b/compiler/datasheet/datasheet.py @@ -41,7 +41,7 @@ class datasheet(): LVS = 'skipped' PEX = 'skipped' - + self.html +='VLSIDA' self.html +='

'+ self.name + '.html' + '

' self.html +='

'+ 'DRC: ' + str(DRC) + '

' self.html +='

'+ 'LVS: ' + str(LVS) + '

' From 0dd97e54ddeb17064df7f51f46caa620238a8e63 Mon Sep 17 00:00:00 2001 From: Jesse Cirimelli-Low Date: Sun, 11 Nov 2018 09:27:07 -0800 Subject: [PATCH 21/78] reverted css to UCSC colors, fixed header styling, added placeholder openram logo --- compiler/datasheet/assets/datasheet.css | 8 +++-- .../assets/openram_logo_placeholder.png | Bin 0 -> 44878 bytes compiler/datasheet/datasheet.py | 29 ++++++++++-------- 3 files changed, 22 insertions(+), 15 deletions(-) create mode 100644 compiler/datasheet/assets/openram_logo_placeholder.png diff --git a/compiler/datasheet/assets/datasheet.css b/compiler/datasheet/assets/datasheet.css index 5d4f1470..ff16f101 100644 --- a/compiler/datasheet/assets/datasheet.css +++ b/compiler/datasheet/assets/datasheet.css @@ -1,6 +1,6 @@ diff --git a/compiler/datasheet/assets/openram_logo_placeholder.png b/compiler/datasheet/assets/openram_logo_placeholder.png new file mode 100644 index 0000000000000000000000000000000000000000..b19f0bfe27e1b01b0674cee4246a05ea91a9c2c2 GIT binary patch literal 44878 zcmXtAV{~P~vOckGnu&b}{bXf4OC;D%_jIS4@nUI_i08kx+@MZ}0)dq7? zmJkM1Ob{M_HAsymmE`~c4+;RlF9-m5`RejJ0svf?0Duz%0DwCM0Kl=&Xi?(*f&!#O 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' - self.html +='

'+ self.name + '.html' + '

' - self.html +='

'+ 'DRC: ' + str(DRC) + '

' - self.html +='

'+ 'LVS: ' + str(LVS) + '

' - self.html +='

Ports and Configuration (DEBUG)

' + self.html += 'VLSIDAOpenRAM' + + + + + + self.html +='

'+ self.name + '.html' + '

' + self.html +='

'+ 'DRC: ' + str(DRC) + '

' + self.html +='

'+ 'LVS: ' + str(LVS) + '

' + + self.html +='

Ports and Configuration (DEBUG)

' self.html += in_out(self.io,table_id='data').__html__().replace('<','<').replace('"','"').replace('>',">") - self.html +='

Operating Conditions

' + self.html +='

Operating Conditions

' self.html += operating_conditions(self.operating,table_id='data').__html__() - self.html += '

Timing and Current Data

' + self.html += '

Timing and Current Data

' self.html += timing_and_current_data(self.timing,table_id='data').__html__() - self.html += '

Characterization Corners

' + self.html += '

Characterization Corners

' self.html += characterization_corners(self.corners,table_id='data').__html__() - self.html +='

Deliverables

' + self.html +='

Deliverables

' self.html += deliverables(self.dlv,table_id='data').__html__().replace('<','<').replace('"','"').replace('>',">") - self.html +='

*Feature only supported with characterizer

' + self.html +='

*Feature only supported with characterizer

' - self.html +='VLSIDA' + From fa27d647d2ad2cae92d1bbbac197426a89e6d4bb Mon Sep 17 00:00:00 2001 From: Jesse Cirimelli-Low Date: Tue, 13 Nov 2018 17:29:43 -0800 Subject: [PATCH 22/78] Flask directory upload POC, embed datasheet.info in html comment for parser reuse --- compiler/datasheet/datasheet.py | 7 +++++++ flask/client/client.py | 28 ++++++++++++++++++++++++++++ flask/client/testfile | 1 + flask/server/server.py | 15 +++++++++++++++ flask/server/templates/upload.html | 11 +++++++++++ 5 files changed, 62 insertions(+) create mode 100644 flask/client/client.py create mode 100644 flask/client/testfile create mode 100644 flask/server/server.py create mode 100644 flask/server/templates/upload.html diff --git a/compiler/datasheet/datasheet.py b/compiler/datasheet/datasheet.py index 34eaaf3b..97635c96 100644 --- a/compiler/datasheet/datasheet.py +++ b/compiler/datasheet/datasheet.py @@ -7,6 +7,7 @@ from in_out import * from hierarchy_design import total_drc_errors from hierarchy_design import total_lvs_errors import os +import csv from globals import OPTS class datasheet(): @@ -40,6 +41,12 @@ class datasheet(): DRC = 'skipped' LVS = 'skipped' PEX = 'skipped' + + with open(OPTS.openram_temp + "/datasheet.info") as info: + self.html += '' self.html += 'VLSIDAOpenRAM' diff --git a/flask/client/client.py b/flask/client/client.py new file mode 100644 index 00000000..9dcd65e6 --- /dev/null +++ b/flask/client/client.py @@ -0,0 +1,28 @@ +import requests +import os +import sys +# TODO +# copy directory structure +# relative links to not break dataseets? +# look into proper string and packet sanitization +# index gui + results graphs + +base_url = 'http://localhost:5000/' +upload_url = 'upload' + +def send_file(path): + upload_file = open(path,'rb') + data = {'file' : upload_file} + return requests.post(url = base_url + upload_url, files = data) + +def send_mkdir(path): + +def send_directory(path): + for root, directories, filenames in os.walk(path): + for filename in filenames: + upload_file = os.path.join(root,filename) + print(upload_file) + print(send_file(upload_file)) + +send_directory(sys.argv[1]) + diff --git a/flask/client/testfile b/flask/client/testfile new file mode 100644 index 00000000..9daeafb9 --- /dev/null +++ b/flask/client/testfile @@ -0,0 +1 @@ +test diff --git a/flask/server/server.py b/flask/server/server.py new file mode 100644 index 00000000..78c39128 --- /dev/null +++ b/flask/server/server.py @@ -0,0 +1,15 @@ +import os +from flask import Flask, render_template, request +from werkzeug import secure_filename +app = Flask(__name__) + +@app.route('/uploader', methods = ['GET', 'POST']) +def upload(): + if request.method == 'POST': + f = request.files['file'] + dirname = os.path.dirname(os.path.abspath(__file__)) + f.save(dirname + '/uploads/' + secure_filename(f.filename)) + return 'file uploaded successfully' + +if __name__ == '__main__': + app.run(debug = True) diff --git a/flask/server/templates/upload.html b/flask/server/templates/upload.html new file mode 100644 index 00000000..761844f6 --- /dev/null +++ b/flask/server/templates/upload.html @@ -0,0 +1,11 @@ + + + +
+ + +
+ + + From 8b6a28b6fd6cf0153b7bbc6ab0519119dbf375f9 Mon Sep 17 00:00:00 2001 From: Hunter Nichols Date: Tue, 13 Nov 2018 22:24:18 -0800 Subject: [PATCH 23/78] Changed scmos bitcell 1rw,1r to have same tx widths as pbitcell. --- compiler/characterizer/functional.py | 4 +- compiler/modules/control_logic.py | 1 + technology/scn4m_subm/gds_lib/cell_1rw_1r.gds | Bin 6202 -> 6266 bytes technology/scn4m_subm/mag_lib/cell_1rw_1r.mag | 210 +++++++++--------- technology/scn4m_subm/sp_lib/cell_1rw_1r.sp | 20 +- 5 files changed, 116 insertions(+), 119 deletions(-) diff --git a/compiler/characterizer/functional.py b/compiler/characterizer/functional.py index b99e644c..0c60fc23 100644 --- a/compiler/characterizer/functional.py +++ b/compiler/characterizer/functional.py @@ -40,8 +40,8 @@ class functional(simulation): """Spice constants for functional test""" simulation.set_spice_constants(self) #Heuristic increase for functional period. Base feasible period typically does not pass the functional test - #for column mux of this size. Increase the feasible period by 20% for this case. - if self.sram.words_per_row >= 4: + #for column mux or srams of this size. Increase the feasible period by 20% for this case. + if self.sram.words_per_row >= 4 or self.sram.num_cols*self.sram.num_rows >= 1024: self.period = self.period*1.2 def run(self): diff --git a/compiler/modules/control_logic.py b/compiler/modules/control_logic.py index 21595698..88b6390c 100644 --- a/compiler/modules/control_logic.py +++ b/compiler/modules/control_logic.py @@ -31,6 +31,7 @@ class control_logic(design.design): #This is needed to resize the delay chain. Likely to be changed at some point. self.sram=sram + #self.sram=None #disable re-sizing for debugging self.wl_timing_tolerance = 1 #Determines how much larger the sen delay should be. Accounts for possible error in model. self.parasitic_inv_delay = 0 #Keeping 0 for now until further testing. diff --git a/technology/scn4m_subm/gds_lib/cell_1rw_1r.gds b/technology/scn4m_subm/gds_lib/cell_1rw_1r.gds index 4254ba26d107b9392f1889275302e2b261d967b4..21f2c8c84ae9852bb18b5b1e63d7161aa74b840d 100644 GIT binary patch literal 6266 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 diff --git a/technology/scn4m_subm/mag_lib/cell_1rw_1r.mag b/technology/scn4m_subm/mag_lib/cell_1rw_1r.mag index 85323b17..3c3206dc 100644 --- a/technology/scn4m_subm/mag_lib/cell_1rw_1r.mag +++ b/technology/scn4m_subm/mag_lib/cell_1rw_1r.mag @@ -1,110 +1,106 @@ magic tech scmos -timestamp 1541193956 +timestamp 1542175986 << nwell >> -rect 0 50 54 79 +rect 0 46 54 75 << pwell >> -rect 0 0 54 50 +rect 0 0 54 46 << ntransistor >> -rect 14 35 16 41 -rect 22 29 24 41 -rect 30 29 32 41 -rect 38 35 40 41 -rect 14 17 16 25 -rect 22 17 24 25 -rect 30 17 32 25 -rect 38 17 40 25 +rect 14 33 16 37 +rect 22 29 24 37 +rect 30 29 32 37 +rect 38 33 40 37 +rect 14 17 16 23 +rect 22 17 24 23 +rect 30 17 32 23 +rect 38 17 40 23 << ptransistor >> -rect 22 58 24 62 -rect 30 58 32 62 +rect 22 54 24 57 +rect 30 54 32 57 << ndiffusion >> -rect 9 39 14 41 -rect 13 35 14 39 -rect 16 35 17 41 -rect 21 33 22 41 +rect 13 33 14 37 +rect 16 33 17 37 +rect 21 33 22 37 rect 17 29 22 33 -rect 24 29 25 41 -rect 29 29 30 41 -rect 32 33 33 41 -rect 37 35 38 41 -rect 40 39 45 41 -rect 40 35 41 39 +rect 24 29 25 37 +rect 29 29 30 37 +rect 32 33 33 37 +rect 37 33 38 37 +rect 40 33 41 37 rect 32 29 37 33 -rect 9 23 14 25 -rect 13 19 14 23 -rect 9 17 14 19 -rect 16 17 22 25 -rect 24 17 25 25 -rect 29 17 30 25 -rect 32 17 38 25 -rect 40 23 45 25 -rect 40 19 41 23 -rect 40 17 45 19 +rect 9 21 14 23 +rect 13 17 14 21 +rect 16 17 22 23 +rect 24 17 25 23 +rect 29 17 30 23 +rect 32 17 38 23 +rect 40 21 45 23 +rect 40 17 41 21 << pdiffusion >> -rect 21 58 22 62 -rect 24 58 25 62 -rect 29 58 30 62 -rect 32 58 33 62 +rect 21 54 22 57 +rect 24 54 25 57 +rect 29 54 30 57 +rect 32 54 33 57 << ndcontact >> -rect 9 35 13 39 -rect 17 33 21 41 -rect 25 29 29 41 -rect 33 33 37 41 -rect 41 35 45 39 -rect 9 19 13 23 -rect 25 17 29 25 -rect 41 19 45 23 +rect 9 33 13 37 +rect 17 33 21 37 +rect 25 29 29 37 +rect 33 33 37 37 +rect 41 33 45 37 +rect 9 17 13 21 +rect 25 17 29 23 +rect 41 17 45 21 << pdcontact >> -rect 17 58 21 62 -rect 25 58 29 62 -rect 33 58 37 62 +rect 17 54 21 58 +rect 25 54 29 58 +rect 33 54 37 58 << psubstratepcontact >> rect 25 9 29 13 << nsubstratencontact >> -rect 25 72 29 76 +rect 25 68 29 72 << polysilicon >> -rect 22 62 24 64 -rect 30 62 32 64 -rect 22 48 24 58 -rect 30 55 32 58 -rect 31 51 32 55 -rect 14 41 16 46 -rect 22 44 23 48 -rect 22 41 24 44 -rect 30 41 32 51 -rect 38 41 40 46 -rect 14 33 16 35 -rect 38 33 40 35 -rect 14 25 16 26 -rect 22 25 24 29 -rect 30 25 32 29 -rect 38 25 40 26 +rect 22 57 24 60 +rect 30 57 32 60 +rect 22 44 24 54 +rect 30 51 32 54 +rect 31 47 32 51 +rect 14 37 16 44 +rect 22 40 23 44 +rect 22 37 24 40 +rect 30 37 32 47 +rect 38 37 40 44 +rect 14 31 16 33 +rect 38 31 40 33 +rect 14 23 16 24 +rect 22 23 24 29 +rect 30 23 32 29 +rect 38 23 40 24 rect 14 15 16 17 rect 22 15 24 17 rect 30 15 32 17 rect 38 15 40 17 << polycontact >> -rect 27 51 31 55 -rect 10 42 14 46 -rect 23 44 27 48 -rect 40 42 44 46 -rect 12 26 16 30 -rect 38 26 42 30 +rect 27 47 31 51 +rect 10 40 14 44 +rect 23 40 27 44 +rect 40 40 44 44 +rect 12 24 16 28 +rect 38 24 42 28 << metal1 >> -rect 0 72 25 76 -rect 29 72 54 76 -rect 0 65 54 69 -rect 10 46 14 65 -rect 17 55 20 58 -rect 17 51 27 55 -rect 17 41 20 51 -rect 34 48 37 58 -rect 27 44 37 48 -rect 34 41 37 44 -rect 40 46 44 65 -rect 6 35 9 39 -rect 45 35 48 39 -rect 25 25 29 29 +rect 0 68 25 72 +rect 29 68 54 72 +rect 0 61 54 65 +rect 10 44 14 61 +rect 17 51 20 54 +rect 17 47 27 51 +rect 17 37 20 47 +rect 34 44 37 54 +rect 27 40 37 44 +rect 40 44 44 61 +rect 34 37 37 40 +rect 6 33 9 37 +rect 45 33 48 37 +rect 25 23 29 29 rect 25 13 29 17 rect 0 9 25 13 rect 29 9 54 13 @@ -112,37 +108,37 @@ rect 0 2 16 6 rect 20 2 34 6 rect 38 2 54 6 << m2contact >> -rect 25 72 29 76 -rect 25 58 29 62 -rect 2 35 6 39 -rect 16 26 20 30 -rect 48 35 52 39 -rect 34 26 38 30 -rect 9 19 13 23 -rect 41 19 45 23 +rect 25 68 29 72 +rect 25 54 29 58 +rect 2 33 6 37 +rect 48 33 52 37 +rect 16 24 20 28 +rect 34 24 38 28 +rect 9 17 13 21 +rect 41 17 45 21 rect 16 2 20 6 rect 34 2 38 6 << metal2 >> -rect 2 39 6 76 -rect 2 0 6 35 -rect 9 23 13 76 -rect 25 62 29 72 -rect 9 0 13 19 -rect 16 6 20 26 -rect 34 6 38 26 -rect 41 23 45 76 -rect 41 0 45 19 -rect 48 39 52 76 -rect 48 0 52 35 +rect 2 37 6 72 +rect 2 0 6 33 +rect 9 21 13 72 +rect 25 58 29 68 +rect 9 0 13 17 +rect 16 6 20 24 +rect 34 6 38 24 +rect 41 21 45 72 +rect 41 0 45 17 +rect 48 37 52 72 +rect 48 0 52 33 << bb >> -rect 0 0 54 74 +rect 0 0 54 70 << labels >> +rlabel metal1 19 63 19 63 1 wl0 +rlabel metal1 19 70 19 70 5 vdd rlabel metal1 27 4 27 4 1 wl1 rlabel psubstratepcontact 27 11 27 11 1 gnd -rlabel metal1 19 67 19 67 1 wl0 rlabel metal2 4 7 4 7 2 bl0 rlabel metal2 11 7 11 7 1 bl1 rlabel metal2 43 7 43 7 1 br1 rlabel metal2 50 7 50 7 8 br0 -rlabel metal1 19 74 19 74 5 vdd << end >> diff --git a/technology/scn4m_subm/sp_lib/cell_1rw_1r.sp b/technology/scn4m_subm/sp_lib/cell_1rw_1r.sp index 1a52d8d0..37f25f75 100644 --- a/technology/scn4m_subm/sp_lib/cell_1rw_1r.sp +++ b/technology/scn4m_subm/sp_lib/cell_1rw_1r.sp @@ -1,14 +1,14 @@ .SUBCKT cell_1rw_1r bl0 br0 bl1 br1 wl0 wl1 vdd gnd -MM9 RA_to_R_right wl1 br1 gnd n w=1.6u l=0.4u -MM8 RA_to_R_right Q gnd gnd n w=1.6u l=0.4u -MM7 RA_to_R_left Q_bar gnd gnd n w=1.6u l=0.4u -MM6 RA_to_R_left wl1 bl1 gnd n w=1.6u l=0.4u -MM5 Q wl0 bl0 gnd n w=1.2u l=0.4u -MM4 Q_bar wl0 br0 gnd n w=1.2u l=0.4u -MM1 Q Q_bar gnd gnd n w=2.4u l=0.4u -MM0 Q_bar Q gnd gnd n w=2.4u l=0.4u -MM3 Q Q_bar vdd vdd p w=0.8u l=0.4u -MM2 Q_bar Q vdd vdd p w=0.8u l=0.4u +MM9 RA_to_R_right wl1 br1 gnd n w=1.2u l=0.4u +MM8 RA_to_R_right Q gnd gnd n w=1.2u l=0.4u +MM7 RA_to_R_left Q_bar gnd gnd n w=1.2u l=0.4u +MM6 RA_to_R_left wl1 bl1 gnd n w=1.2u l=0.4u +MM5 Q wl0 bl0 gnd n w=0.8u l=0.4u +MM4 Q_bar wl0 br0 gnd n w=0.8u l=0.4u +MM1 Q Q_bar gnd gnd n w=1.6u l=0.4u +MM0 Q_bar Q gnd gnd n w=1.6u l=0.4u +MM3 Q Q_bar vdd vdd p w=0.6u l=0.4u +MM2 Q_bar Q vdd vdd p w=0.6u l=0.4u .ENDS From 80bc5b49c18f8cc5e0a910d306a7e27e7a6afab1 Mon Sep 17 00:00:00 2001 From: Hunter Nichols Date: Wed, 14 Nov 2018 11:00:37 -0800 Subject: [PATCH 24/78] Replaced bb layer with comment layer in 1rw,1r cell. Changed widths in replica cell. --- technology/scn4m_subm/gds_lib/cell_1rw_1r.gds | Bin 6266 -> 6330 bytes .../gds_lib/replica_cell_1rw_1r.gds | Bin 6154 -> 6282 bytes technology/scn4m_subm/mag_lib/cell_1rw_1r.mag | 20 +- .../mag_lib/replica_cell_1rw_1r.mag | 214 +++++++++--------- .../scn4m_subm/sp_lib/replica_cell_1rw_1r.sp | 20 +- 5 files changed, 124 insertions(+), 130 deletions(-) diff --git a/technology/scn4m_subm/gds_lib/cell_1rw_1r.gds b/technology/scn4m_subm/gds_lib/cell_1rw_1r.gds index 21f2c8c84ae9852bb18b5b1e63d7161aa74b840d..71a6dfad712d467bf3ecdd960616c44e1f0af033 100644 GIT binary patch delta 98 zcmexmu**=1fsKKQftf*uk%^&xoLb!dQeiCS4NSTq5qq2mm%{ B37`M~ diff --git a/technology/scn4m_subm/gds_lib/replica_cell_1rw_1r.gds b/technology/scn4m_subm/gds_lib/replica_cell_1rw_1r.gds index 836708c38bbe673c0c5431b6f533e66012094baa..2697651dcbb09baa6b17a15e84834f363d14a3e7 100644 GIT binary patch literal 6282 zcmbW5J#dvp6owD^BR~j=LQFJD6p)DgBruU+p*Ul~42^{aV*?6|IFoUh6hN6$J4$A3 z(n(2~(#oMsX=zEB($e?Iey`u&i)Wqjo4I+ud3WDEyJz?A?oCX@NQ}nffsuF=M`Ah- z$N8A~=l!Be=SL-?aQ4@+rNDC zbu5lI+L`$GcE%c2|ApE=`&Y!3rxEk(J+JLXpqnaB{o_xH_w-KB_oShlYCH8Gk?+l)N?nt_pqtWD zKXIr_e3N$2P3g7&d_8_V%iATsdGXKEmMJ~;lPBlEq)l{FdhP$Xj!z%gmLle!_gueT z`fjQ`^&h>Vg`_rS9`wBMRRp@J^3+d!{KPl$p_?uL!pq`YeAN>ly4mv6Pu4DelYV$y zU3uF7gOerJspX!ug>I@Zsh{>4J9SO^j&4d%{luXz@lEC)-ISjC$uo6{Z601O`8TE4 z{*`+D99OQ_UPYYHnl-OJ(WWKcl%Dzz?nb=*G~&>mo{L(K=%&h3|MX1p9oz1S58Z6} ziOq+)X8qokr}39|i|>OwJ@KQPY9sZNr-dl_Gl_|AN>BadiLsJDlU$&i(o;WirvE7M z&6x)!z9~KRGfv_%ev`Q9W-C6Pb6T&|HTnLbo6^(x^dBGV&%}prw*2H6A9H2mLpNJ~ z;*e|Nn}_a{_@?x_{}=1;&+JOc-5bC4WZy?OmD|++*29Rinm^W#i4WbBp88MBm$M5$ zXPDbTr@gK`^)u#^*CVF3da@SKO_itq!+YhN#m{-`cF<|JD^LC8iF)+YB(C$?m8X8@ zh};v`WG>N7>8YRoan9m5X$Reup8Dw@KI)o`!{h48Q$O>Jk9jkhM|4wq>VNk|$s0K% zF64u5N^km^H@qhAZWl^#`WZX>g-PD=nbMnn#!XCf+R`=sW3x##=R&`p)6{{1n_&ptvs5FfhP^5fw{U9*1g%G3Bh=B#DE zGmmXI?+*jx{~zc7fS+-aYsPOf7wD$+H2;iqf3D;)@u8bT{?&T@g`Tw~t(}#g{O;i~ zRbIz`&41~6@tc=l7QZPy_51v+&pX;dH%|`kzXS2f6Mg5dX7alS-ISijXU*Va-I(~$ z&6b}yta;XqNjvUWSDwbF{Pa%jpB*OcxZSS2>8J0+H)+T1Lg}fW?=0sWUX%W#o6=K1 zzp*qw`+k#l(9PET;o(DFlX>Ue)O#AAe$w~)gBRUwjsJk^@jH|K-lQ#bQ+gVo{NiK% znfSWA@3ZA+-{Gud{!I3AbW?g7pWm#+qW>m+K{utRe%3kOx#vCUKf0;%)X$jtP}i*A zyYke}xk(-V_haHmH>Ib3=9#<=-=EOQUss;`i9_D%{~wSybhDMe&_k~Iu9)PL$CRGN zrygq!zd7~-HNuo$`>)jdH=epK9`v*l-=d6<8bexsYx)Bc~?!d2FWi8J+-HLkM7-T)Z@-Hx>VX* z{f~OOze;jI0>$C5l+T#DSs`uS+{|4&ud%^XF;ttf~Zr|10Y}Mnpi|aWr2Q{9t F_!|d*cV_?q literal 6154 zcmb7|J8WD<6oyaM@7Qr{u)`*pV3L@a#PN%ljd=u#A`%S+g+-G<5&@EhEEfr-3kv8c zEkWT9N|!EEp_DEuQ>Jv8lK=DUuRFWR49b<(-}=Av&pC5u?!9w22BQ^yF>|UF4`Ni` z$73cYvhSCo-5T7vzrFS2-EVK-y}z|}du8XLJ`q!W1D}5W+lOEN^VjkE7l%vxe|+=yu<@5!vAEoc6{_CIAr{llY>%Te?fzSNp zF!@dCx&NJBKdtll^uuB5Ywo|1`zN18d~guaUTgUAaRj=l^F{x_&k^SzM_f5<_|{$o zx~cO;|EPS^?TCwNZ_*#SDZS_?4sD5V(hs^RJ@+r<zfgm z=NrySLpOE4=qC=j6W^pibW?iKPaN73-(>9Qru3rUZHSEro}N!$Q+n=S&g(y=+O5ks z{iNYXd%9^zH+8<~A3D<5XCp>5XXYCR%0;>7k*E1$=x5~qMNn&vq#BysWX0v58bT!$-n()%HO=Okn%UB7xSmi)QKzKFXq=DHJaOvc;!*U)kw87b-w6-ZClU2XL?r1W8y`xg?KZr8oN8g}e9?beZF$b&H|Y=ElwR~xKh_@kn$**E?VKDT-YOk7$q^s(Z!(YQru3rU_b6gg zZ^*o%o3;6)9rO0)&4%>jemm!@@u?FYlicx{(yM;PO?;Dn@S8p3U&^n)=_e8M`ze;m zUJ~7up2zR^6=pWuo`$V4A>=z;ZpqtW*e)cH%@((_Av*srr*ABHa zy@xQR7vp>1N<91!AG+D&U(M@J-ClD4@tl8AahWgE_kB}(o`09WwVCeyeNP**cF@h9 z=XaO??OVymwZ=09;zKuUe)fFSZCpN+x}lr3`mx8v$NtmAhi=yV+`rH6ztsMrYy4cd z__=SG+_TV4>BagpPHN5gP38jKlwR~RPJE2t#D{M7_*e4v7dm+V;955~G!_oC=l$b3 z|LWu9H{Vx$4pVxbf0y6S&-{5uKj@}vS@csU-hU>3Xz2GIv*-P%D?aZJFM5AM$KN?$ zjn6)Txi{(0c|qw_Ki5oqEnPd1emcGr>U`DDJ%{)v{oyyI7yaz>=62KiG07j@lwS1n zp3B;2{h9QGZb~oui9_D_P5MDMYx(os<65Jw$+|%|YwPEf;&83-95A_eqnpx;`BP_} z|ExcgaiE($`?s$3H=?|G1~7jn&wX@LdNDrlyxcp;-=y~Fru3qp^^KQ%rAglCru3qp zG4o;mOniJd^}Xn)4RvSlVN!Q=vsQoB33X%cP3nej*6K$b>c(Edq;BYDt$v|{T66z2 zsUwFey*Pf_vDWaL{RgNKru5wZZhrs9lefjQaVPa<>U_~p&K%Aa;zKuey6ErRA5Yc~ z_Y2k$K6F!h(Lc7Ea%KH97RbDzo3-&X&-mDDn4WjD=4YNcn17SJ(M{>a{O5LYrS)s# zLpP6?w=^Men!R{p1*_QY!U{ZIEQ?O4O_ZKnQ~yW45q zG;tM^-z(MMcU!e~?8DuzC%>-#*nfB0?bO=wo3z{Y#O5u;a DM*mrR diff --git a/technology/scn4m_subm/mag_lib/cell_1rw_1r.mag b/technology/scn4m_subm/mag_lib/cell_1rw_1r.mag index 3c3206dc..9aec1c5d 100644 --- a/technology/scn4m_subm/mag_lib/cell_1rw_1r.mag +++ b/technology/scn4m_subm/mag_lib/cell_1rw_1r.mag @@ -1,6 +1,6 @@ magic tech scmos -timestamp 1542175986 +timestamp 1542220294 << nwell >> rect 0 46 54 75 << pwell >> @@ -47,17 +47,12 @@ rect 17 33 21 37 rect 25 29 29 37 rect 33 33 37 37 rect 41 33 45 37 -rect 9 17 13 21 rect 25 17 29 23 -rect 41 17 45 21 << pdcontact >> rect 17 54 21 58 -rect 25 54 29 58 rect 33 54 37 58 << psubstratepcontact >> rect 25 9 29 13 -<< nsubstratencontact >> -rect 25 68 29 72 << polysilicon >> rect 22 57 24 60 rect 30 57 32 60 @@ -108,16 +103,19 @@ rect 0 2 16 6 rect 20 2 34 6 rect 38 2 54 6 << m2contact >> -rect 25 68 29 72 -rect 25 54 29 58 rect 2 33 6 37 rect 48 33 52 37 rect 16 24 20 28 rect 34 24 38 28 -rect 9 17 13 21 -rect 41 17 45 21 rect 16 2 20 6 rect 34 2 38 6 +<< pdm12contact >> +rect 25 54 29 58 +<< ndm12contact >> +rect 9 17 13 21 +rect 41 17 45 21 +<< nsm12contact >> +rect 25 68 29 72 << metal2 >> rect 2 37 6 72 rect 2 0 6 33 @@ -130,7 +128,7 @@ rect 41 21 45 72 rect 41 0 45 17 rect 48 37 52 72 rect 48 0 52 33 -<< bb >> +<< comment >> rect 0 0 54 70 << labels >> rlabel metal1 19 63 19 63 1 wl0 diff --git a/technology/scn4m_subm/mag_lib/replica_cell_1rw_1r.mag b/technology/scn4m_subm/mag_lib/replica_cell_1rw_1r.mag index 38edce07..f215ff04 100644 --- a/technology/scn4m_subm/mag_lib/replica_cell_1rw_1r.mag +++ b/technology/scn4m_subm/mag_lib/replica_cell_1rw_1r.mag @@ -1,111 +1,107 @@ magic tech scmos -timestamp 1541194096 +timestamp 1542221056 << nwell >> -rect 0 50 54 79 +rect 0 46 54 75 << pwell >> -rect 0 0 54 50 +rect 0 0 54 46 << ntransistor >> -rect 14 35 16 41 -rect 22 29 24 41 -rect 30 29 32 41 -rect 38 35 40 41 -rect 14 17 16 25 -rect 22 17 24 25 -rect 30 17 32 25 -rect 38 17 40 25 +rect 14 33 16 37 +rect 22 29 24 37 +rect 30 29 32 37 +rect 38 33 40 37 +rect 14 17 16 23 +rect 22 17 24 23 +rect 30 17 32 23 +rect 38 17 40 23 << ptransistor >> -rect 22 58 24 62 -rect 30 58 32 62 +rect 22 54 24 57 +rect 30 54 32 57 << ndiffusion >> -rect 9 39 14 41 -rect 13 35 14 39 -rect 16 35 17 41 -rect 21 33 22 41 +rect 13 33 14 37 +rect 16 33 17 37 +rect 21 33 22 37 rect 17 29 22 33 -rect 24 29 25 41 -rect 29 29 30 41 -rect 32 33 33 41 -rect 37 35 38 41 -rect 40 39 45 41 -rect 40 35 41 39 +rect 24 29 25 37 +rect 29 29 30 37 +rect 32 33 33 37 +rect 37 33 38 37 +rect 40 33 41 37 rect 32 29 37 33 -rect 9 23 14 25 -rect 13 19 14 23 -rect 9 17 14 19 -rect 16 17 22 25 -rect 24 17 25 25 -rect 29 17 30 25 -rect 32 17 38 25 -rect 40 23 45 25 -rect 40 19 41 23 -rect 40 17 45 19 +rect 9 21 14 23 +rect 13 17 14 21 +rect 16 17 22 23 +rect 24 17 25 23 +rect 29 17 30 23 +rect 32 17 38 23 +rect 40 21 45 23 +rect 40 17 41 21 << pdiffusion >> -rect 21 58 22 62 -rect 24 58 25 62 -rect 29 58 30 62 -rect 32 58 33 62 +rect 21 54 22 57 +rect 24 54 25 57 +rect 29 54 30 57 +rect 32 54 33 57 << ndcontact >> -rect 9 35 13 39 -rect 17 33 21 41 -rect 25 29 29 41 -rect 33 33 37 41 -rect 41 35 45 39 -rect 9 19 13 23 -rect 25 17 29 25 -rect 41 19 45 23 +rect 9 33 13 37 +rect 17 33 21 37 +rect 25 29 29 37 +rect 33 33 37 37 +rect 41 33 45 37 +rect 9 17 13 21 +rect 25 17 29 23 +rect 41 17 45 21 << pdcontact >> -rect 17 58 21 62 -rect 25 58 29 62 -rect 33 58 37 62 +rect 17 54 21 58 +rect 25 54 29 58 +rect 33 54 37 58 << psubstratepcontact >> rect 25 9 29 13 << nsubstratencontact >> -rect 25 72 29 76 +rect 25 68 29 72 << polysilicon >> -rect 22 62 24 64 -rect 30 62 32 64 -rect 22 48 24 58 -rect 30 55 32 58 -rect 31 51 32 55 -rect 14 41 16 46 -rect 22 44 23 48 -rect 22 41 24 44 -rect 30 41 32 51 -rect 38 41 40 46 -rect 14 33 16 35 -rect 38 33 40 35 -rect 14 25 16 26 -rect 22 25 24 29 -rect 30 25 32 29 -rect 38 25 40 26 +rect 22 57 24 60 +rect 30 57 32 60 +rect 22 44 24 54 +rect 30 51 32 54 +rect 31 47 32 51 +rect 14 37 16 44 +rect 22 40 23 44 +rect 22 37 24 40 +rect 30 37 32 47 +rect 38 37 40 44 +rect 14 31 16 33 +rect 38 31 40 33 +rect 14 23 16 24 +rect 22 23 24 29 +rect 30 23 32 29 +rect 38 23 40 24 rect 14 15 16 17 rect 22 15 24 17 rect 30 15 32 17 rect 38 15 40 17 << polycontact >> -rect 27 51 31 55 -rect 10 42 14 46 -rect 23 44 27 48 -rect 40 42 44 46 -rect 12 26 16 30 -rect 38 26 42 30 +rect 27 47 31 51 +rect 10 40 14 44 +rect 23 40 27 44 +rect 40 40 44 44 +rect 12 24 16 28 +rect 38 24 42 28 << metal1 >> -rect 0 72 25 76 -rect 29 72 54 76 -rect 0 65 54 69 -rect 10 46 14 65 -rect 29 58 33 62 -rect 17 55 20 58 -rect 17 51 27 55 -rect 17 41 20 51 -rect 34 48 37 58 -rect 27 44 37 48 -rect 34 41 37 44 -rect 40 46 44 65 -rect 6 35 9 39 -rect 45 35 48 39 -rect 25 25 29 29 +rect 0 68 25 72 +rect 29 68 54 72 +rect 0 61 54 65 +rect 10 44 14 61 +rect 29 54 33 58 +rect 17 51 20 54 +rect 17 47 27 51 +rect 17 37 20 47 +rect 34 44 37 54 +rect 27 40 37 44 +rect 40 44 44 61 +rect 34 37 37 40 +rect 6 33 9 37 +rect 45 33 48 37 +rect 25 23 29 29 rect 25 13 29 17 rect 0 9 25 13 rect 29 9 54 13 @@ -113,37 +109,37 @@ rect 0 2 16 6 rect 20 2 34 6 rect 38 2 54 6 << m2contact >> -rect 25 72 29 76 -rect 25 58 29 62 -rect 2 35 6 39 -rect 16 26 20 30 -rect 48 35 52 39 -rect 34 26 38 30 -rect 9 19 13 23 -rect 41 19 45 23 +rect 25 68 29 72 +rect 25 54 29 58 +rect 2 33 6 37 +rect 48 33 52 37 +rect 16 24 20 28 +rect 34 24 38 28 +rect 9 17 13 21 +rect 41 17 45 21 rect 16 2 20 6 rect 34 2 38 6 << metal2 >> -rect 2 39 6 76 -rect 2 0 6 35 -rect 9 23 13 76 -rect 25 62 29 72 -rect 9 0 13 19 -rect 16 6 20 26 -rect 34 6 38 26 -rect 41 23 45 76 -rect 41 0 45 19 -rect 48 39 52 76 -rect 48 0 52 35 -<< bb >> -rect 0 0 54 74 +rect 2 37 6 72 +rect 2 0 6 33 +rect 9 21 13 72 +rect 25 58 29 68 +rect 9 0 13 17 +rect 16 6 20 24 +rect 34 6 38 24 +rect 41 21 45 72 +rect 41 0 45 17 +rect 48 37 52 72 +rect 48 0 52 33 +<< comment >> +rect 0 0 54 70 << labels >> +rlabel metal1 19 63 19 63 1 wl0 +rlabel metal1 19 70 19 70 5 vdd rlabel metal1 27 4 27 4 1 wl1 rlabel psubstratepcontact 27 11 27 11 1 gnd -rlabel metal1 19 67 19 67 1 wl0 rlabel metal2 4 7 4 7 2 bl0 rlabel metal2 11 7 11 7 1 bl1 rlabel metal2 43 7 43 7 1 br1 rlabel metal2 50 7 50 7 8 br0 -rlabel metal1 19 74 19 74 5 vdd << end >> diff --git a/technology/scn4m_subm/sp_lib/replica_cell_1rw_1r.sp b/technology/scn4m_subm/sp_lib/replica_cell_1rw_1r.sp index 0a235af8..94bdb75e 100644 --- a/technology/scn4m_subm/sp_lib/replica_cell_1rw_1r.sp +++ b/technology/scn4m_subm/sp_lib/replica_cell_1rw_1r.sp @@ -1,14 +1,14 @@ .SUBCKT replica_cell_1rw_1r bl0 br0 bl1 br1 wl0 wl1 vdd gnd -MM9 RA_to_R_right wl1 br1 gnd n w=1.6u l=0.4u -MM8 RA_to_R_right Q gnd gnd n w=1.6u l=0.4u -MM7 RA_to_R_left vdd gnd gnd n w=1.6u l=0.4u -MM6 RA_to_R_left wl1 bl1 gnd n w=1.6u l=0.4u -MM5 Q wl0 bl0 gnd n w=1.2u l=0.4u -MM4 vdd wl0 br0 gnd n w=1.2u l=0.4u -MM1 Q vdd gnd gnd n w=2.4u l=0.4u -MM0 vdd Q gnd gnd n w=2.4u l=0.4u -MM3 Q vdd vdd vdd p w=0.8u l=0.4u -MM2 vdd Q vdd vdd p w=0.8u l=0.4u +MM9 RA_to_R_right wl1 br1 gnd n w=1.2u l=0.4u +MM8 RA_to_R_right Q gnd gnd n w=1.2u l=0.4u +MM7 RA_to_R_left vdd gnd gnd n w=1.2u l=0.4u +MM6 RA_to_R_left wl1 bl1 gnd n w=1.2u l=0.4u +MM5 Q wl0 bl0 gnd n w=0.8u l=0.4u +MM4 vdd wl0 br0 gnd n w=0.8u l=0.4u +MM1 Q vdd gnd gnd n w=1.6u l=0.4u +MM0 vdd Q gnd gnd n w=1.6u l=0.4u +MM3 Q vdd vdd vdd p w=0.6u l=0.4u +MM2 vdd Q vdd vdd p w=0.6u l=0.4u .ENDS From 05773ad16e8e98dd5c3c41e542ea5742b3ca5a76 Mon Sep 17 00:00:00 2001 From: Hunter Nichols Date: Wed, 14 Nov 2018 11:53:13 -0800 Subject: [PATCH 25/78] Altered 1rw,1r cell and replica to match tx widths pbitcell in freepdk45 --- technology/freepdk45/gds_lib/cell_1rw_1r.gds | Bin 16384 -> 14336 bytes .../freepdk45/gds_lib/replica_cell_1rw_1r.gds | Bin 16384 -> 14336 bytes technology/freepdk45/sp_lib/cell_1rw_1r.sp | 4 ++-- .../freepdk45/sp_lib/replica_cell_1rw_1r.sp | 4 ++-- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/technology/freepdk45/gds_lib/cell_1rw_1r.gds b/technology/freepdk45/gds_lib/cell_1rw_1r.gds index fe12fc729b64479255fb28bbf2bad3acd31eec47..9fcf48c3b6014d0ff80f124278a84ac28c808ade 100644 GIT binary patch literal 14336 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 YYtewxfsO|{9_VQe*Q&sVFH;|orf#3vHNE?~ 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 Date: Wed, 14 Nov 2018 23:34:53 -0800 Subject: [PATCH 26/78] Separated relative delay into rise/fall. --- compiler/characterizer/logical_effort.py | 19 ++++++--- compiler/modules/bank.py | 4 +- compiler/modules/control_logic.py | 51 ++++++++++++++++-------- compiler/modules/delay_chain.py | 6 ++- compiler/modules/replica_bitline.py | 12 ++++-- compiler/modules/wordline_driver.py | 10 +++-- compiler/pgates/pinv.py | 8 ++-- compiler/pgates/pinvbuf.py | 18 +++++---- compiler/pgates/pnand2.py | 8 ++-- compiler/pgates/pnand3.py | 8 ++-- compiler/sram_base.py | 4 +- 11 files changed, 97 insertions(+), 51 deletions(-) diff --git a/compiler/characterizer/logical_effort.py b/compiler/characterizer/logical_effort.py index 7d3a2eb9..b54124d5 100644 --- a/compiler/characterizer/logical_effort.py +++ b/compiler/characterizer/logical_effort.py @@ -10,12 +10,13 @@ class logical_effort(): min_inv_cin = 1+beta pinv=parameter["min_inv_para_delay"] - def __init__(self, size, cin, cout, parasitic): + def __init__(self, size, cin, cout, parasitic, out_is_rise=True): self.cin = cin self.cout = cout self.logical_effort = (self.cin/size)/logical_effort.min_inv_cin self.eletrical_effort = self.cout/self.cin self.parasitic_scale = parasitic + self.is_rise = out_is_rise def __str__(self): return "g = " + str(self.logical_effort) + ", h = " + str(self.eletrical_effort) + ", p = " + str(self.parasitic_scale)+"*pinv" @@ -31,8 +32,16 @@ class logical_effort(): def calculate_relative_delay(stage_effort_list, pinv=parameter["min_inv_para_delay"]): """Calculates the total delay of a given delay path made of a list of logical effort objects.""" - total_delay = 0 + total_rise_delay, total_fall_delay = calculate_relative_rise_fall_delays(stage_effort_list, pinv) + return total_rise_delay + total_fall_delay + +def calculate_relative_rise_fall_delays(stage_effort_list, pinv=parameter["min_inv_para_delay"]): + """Calculates the rise/fall delays of a given delay path made of a list of logical effort objects.""" + total_rise_delay, total_fall_delay = 0,0 for stage in stage_effort_list: - total_delay += stage.get_stage_delay(pinv) - return total_delay - \ No newline at end of file + if stage.is_rise: + total_rise_delay += stage.get_stage_delay(pinv) + else: + total_fall_delay += stage.get_stage_delay(pinv) + return total_rise_delay, total_fall_delay + \ No newline at end of file diff --git a/compiler/modules/bank.py b/compiler/modules/bank.py index cc379493..8c083517 100644 --- a/compiler/modules/bank.py +++ b/compiler/modules/bank.py @@ -1225,12 +1225,12 @@ class bank(design.design): return results - def determine_wordline_stage_efforts(self, external_cout): + def determine_wordline_stage_efforts(self, external_cout, inp_is_rise=True): """Get the all the stage efforts for each stage in the path within the bank clk_buf to a wordline""" #Decoder is assumed to have settled before the negative edge of the clock. Delay model relies on this assumption stage_effort_list = [] wordline_cout = self.bitcell_array.get_wordline_cin() + external_cout - stage_effort_list += self.wordline_driver.determine_wordline_stage_efforts(wordline_cout) + stage_effort_list += self.wordline_driver.determine_wordline_stage_efforts(wordline_cout,inp_is_rise) return stage_effort_list diff --git a/compiler/modules/control_logic.py b/compiler/modules/control_logic.py index 90755e96..23d82998 100644 --- a/compiler/modules/control_logic.py +++ b/compiler/modules/control_logic.py @@ -109,7 +109,8 @@ class control_logic(design.design): #Resize the delay chain (by instantiating a new rbl) if the analytical timing failed. delay_stages, delay_fanout = self.get_dynamic_delay_chain_size(delay_stages_heuristic, delay_fanout_heuristic) self.replica_bitline = replica_bitline(delay_stages, delay_fanout, bitcell_loads, name="replica_bitline_resized_"+self.port_type) - + self.sen_delay = self.get_delay_to_sen() #get the new timing + self.add_mod(self.replica_bitline) def get_heuristic_delay_chain_size(self): @@ -139,6 +140,7 @@ class control_logic(design.design): 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 previous_delay_chain_delay = (previous_fanout+1+self.parasitic_inv_delay)*previous_stages debug.info(2, "Previous delay chain produced {} delay units".format(previous_delay_chain_delay)) @@ -147,7 +149,7 @@ class control_logic(design.design): #inverter adds 1 unit of delay (due to minimum size). This also depends on the pinv value required_delay = self.wl_delay*self.wl_timing_tolerance - (self.sen_delay-previous_delay_chain_delay) debug.check(required_delay > 0, "Cannot size delay chain to have negative delay") - delay_stages = int(required_delay/(delay_fanout+1+self.parasitic_inv_delay)) + delay_stages = ceil(required_delay/(delay_fanout+1+self.parasitic_inv_delay)) if delay_stages%2 == 1: #force an even number of stages. delay_stages+=1 #Fanout can be varied as well but is a little more complicated but potentially optimal. @@ -638,25 +640,33 @@ class control_logic(design.design): height=pin.height(), width=pin.width()) + def get_delay_to_wl(self): """Get the delay (in delay units) of the clk to a wordline in the bitcell array""" debug.check(self.sram.all_mods_except_control_done, "Cannot calculate sense amp enable delay unless all module have been added.") stage_efforts = self.determine_wordline_stage_efforts() - clk_to_wl_delay = logical_effort.calculate_relative_delay(stage_efforts, self.parasitic_inv_delay) - debug.info(1, "Clock to wordline delay is {} delay units".format(clk_to_wl_delay)) - return clk_to_wl_delay + clk_to_wl_rise,clk_to_wl_fall = logical_effort.calculate_relative_rise_fall_delays(stage_efforts, self.parasitic_inv_delay) + total_delay = clk_to_wl_rise + clk_to_wl_fall + debug.info(1, "Clock to wl delay is rise={:.3f}, fall={:.3f}, total={:.3f} in delay units".format(clk_to_wl_rise, clk_to_wl_fall,total_delay)) + return total_delay + def determine_wordline_stage_efforts(self): """Follows the clock signal to the clk_buf signal to the wordline signal for the total path efforts""" stage_effort_list = [] + + #Initial direction of clock signal for this path + is_clk_rise = False + #Calculate the load on clk_buf within the module and add it to external load internal_cout = self.ctrl_dff_array.get_clk_cin() external_cout = self.sram.get_clk_cin() #First stage is the clock buffer - stage_effort_list += self.clkbuf.determine_clk_buf_stage_efforts(internal_cout+external_cout) + stage_effort_list += self.clkbuf.determine_clk_buf_stage_efforts(internal_cout+external_cout, is_clk_rise) + last_stage_is_rise = stage_effort_list[-1].is_rise #Then ask the sram for the other path delays (from the bank) - stage_effort_list += self.sram.determine_wordline_stage_efforts() + stage_effort_list += self.sram.determine_wordline_stage_efforts(last_stage_is_rise) return stage_effort_list @@ -666,9 +676,10 @@ class control_logic(design.design): """ debug.check(self.sram.all_mods_except_control_done, "Cannot calculate sense amp enable delay unless all module have been added.") stage_efforts = self.determine_sa_enable_stage_efforts() - clk_to_sen_delay = logical_effort.calculate_relative_delay(stage_efforts, self.parasitic_inv_delay) - debug.info(1, "Clock to s_en delay is {} delay units".format(clk_to_sen_delay)) - return clk_to_sen_delay + clk_to_sen_rise, clk_to_sen_fall = logical_effort.calculate_relative_rise_fall_delays(stage_efforts, self.parasitic_inv_delay) + total_delay = clk_to_sen_rise + clk_to_sen_fall + debug.info(1, "Clock to s_en delay is rise={:.3f}, fall={:.3f}, total={:.3f} in delay units".format(clk_to_sen_rise, clk_to_sen_fall,total_delay)) + return total_delay def determine_sa_enable_stage_efforts(self): """Follows the clock signal to the sense amp enable signal adding each stages stage effort to a list""" @@ -677,33 +688,41 @@ class control_logic(design.design): int_clk_buf_cout = self.get_clk_buf_bar_cin() ext_clk_buf_cout = self.sram.get_clk_bar_cin() + #Initial direction of clock signal for this path + is_clk_rise = False + #First stage is the clock buffer - stage1 = self.clkbuf.determine_clk_buf_bar_stage_efforts(int_clk_buf_cout+ext_clk_buf_cout) + stage1 = self.clkbuf.determine_clk_buf_bar_stage_efforts(int_clk_buf_cout+ext_clk_buf_cout, is_clk_rise) stage_effort_list += stage1 + last_stage_rise = stage_effort_list[-1].is_rise #nand2 stage stage2_cout = self.inv1.get_cin() - stage2 = self.nand2.get_effort_stage(stage2_cout) + stage2 = self.nand2.get_effort_stage(stage2_cout, last_stage_rise) stage_effort_list.append(stage2) + last_stage_rise = stage_effort_list[-1].is_rise #inverter stage stage3_cout = self.replica_bitline.get_en_cin() - stage3 = self.inv1.get_effort_stage(stage3_cout) + stage3 = self.inv1.get_effort_stage(stage3_cout, last_stage_rise) stage_effort_list.append(stage3) + last_stage_rise = stage_effort_list[-1].is_rise #Replica bitline stage stage4_cout = self.inv2.get_cin() - stage4 = self.replica_bitline.determine_sen_stage_efforts(stage4_cout) + stage4 = self.replica_bitline.determine_sen_stage_efforts(stage4_cout, last_stage_rise) stage_effort_list += stage4 + last_stage_rise = stage_effort_list[-1].is_rise #inverter (inv2) stage stage5_cout = self.inv8.get_cin() - stage5 = self.inv2.get_effort_stage(stage5_cout) + stage5 = self.inv2.get_effort_stage(stage5_cout, last_stage_rise) stage_effort_list.append(stage5) + last_stage_rise = stage_effort_list[-1].is_rise #inverter (inv8) stage, s_en output clk_sen_cout = self.sram.get_sen_cin() - stage6 = self.inv8.get_effort_stage(clk_sen_cout) + stage6 = self.inv8.get_effort_stage(clk_sen_cout, last_stage_rise) stage_effort_list.append(stage6) return stage_effort_list diff --git a/compiler/modules/delay_chain.py b/compiler/modules/delay_chain.py index 72dfe93a..722328d1 100644 --- a/compiler/modules/delay_chain.py +++ b/compiler/modules/delay_chain.py @@ -225,15 +225,17 @@ class delay_chain(design.design): dc_cin = self.inv.get_cin() return dc_cin - def determine_delayed_en_stage_efforts(self, ext_delayed_en_cout): + def determine_delayed_en_stage_efforts(self, ext_delayed_en_cout, inp_is_rise=True): """Get the stage efforts from the en to s_en. Does not compute the delay for the bitline load.""" stage_effort_list = [] #Add a stage to the list for every stage in delay chain. Stages only differ in fanout except the last which has an external cout. + last_stage_is_rise = inp_is_rise for stage_fanout in self.fanout_list: stage_cout = self.inv.get_cin()*(stage_fanout+1) if len(stage_effort_list) == len(self.fanout_list)-1: #last stage stage_cout+=ext_delayed_en_cout - stage = self.inv.get_effort_stage(stage_cout) + stage = self.inv.get_effort_stage(stage_cout, last_stage_is_rise) stage_effort_list.append(stage) + last_stage_is_rise = stage.is_rise return stage_effort_list \ No newline at end of file diff --git a/compiler/modules/replica_bitline.py b/compiler/modules/replica_bitline.py index 905bd4ff..65320666 100644 --- a/compiler/modules/replica_bitline.py +++ b/compiler/modules/replica_bitline.py @@ -615,17 +615,21 @@ class replica_bitline(design.design): en_cin = self.delay_chain.get_cin() return en_cin - def determine_sen_stage_efforts(self, ext_cout): + def determine_sen_stage_efforts(self, ext_cout, inp_is_rise=True): """Get the stage efforts from the en to s_en. Does not compute the delay for the bitline load.""" stage_effort_list = [] #Stage 1 is the delay chain stage1_cout = self.get_delayed_en_cin() - stage1 = self.delay_chain.determine_delayed_en_stage_efforts(stage1_cout) + stage1 = self.delay_chain.determine_delayed_en_stage_efforts(stage1_cout, inp_is_rise) stage_effort_list += stage1 + #There is a disconnect between the delay chain and inverter. The rise/fall of the input to the inverter + #Will be the negation of the previous stage. + last_stage_is_rise = not stage_effort_list[-1].is_rise + #The delay chain triggers the enable on the replica bitline (rbl). This is used to track the bitline delay whereas this - #model is intended to track every but that. Therefore, the next stage is the inverter after the rbl. - stage2 = self.inv.get_effort_stage(ext_cout) + #model is intended to track every but that. Therefore, the next stage is the inverter after the rbl. + stage2 = self.inv.get_effort_stage(ext_cout, last_stage_is_rise) stage_effort_list.append(stage2) return stage_effort_list diff --git a/compiler/modules/wordline_driver.py b/compiler/modules/wordline_driver.py index 67ac3743..d21fa391 100644 --- a/compiler/modules/wordline_driver.py +++ b/compiler/modules/wordline_driver.py @@ -240,18 +240,20 @@ class wordline_driver(design.design): """Gets the capacitance of the wordline driver in absolute units (fF)""" return self.nand2.input_load() - def determine_wordline_stage_efforts(self, external_cout): + def determine_wordline_stage_efforts(self, external_cout, inp_is_rise=True): """Follows the clk_buf to a wordline signal adding each stages stage effort to a list""" stage_effort_list = [] stage1_cout = self.nand2.get_cin() - stage1 = self.inv_no_output.get_effort_stage(stage1_cout) + stage1 = self.inv_no_output.get_effort_stage(stage1_cout, inp_is_rise) stage_effort_list.append(stage1) + last_stage_is_rise = stage1.is_rise stage2_cout = self.inv.get_cin() - stage2 = self.nand2.get_effort_stage(stage2_cout) + stage2 = self.nand2.get_effort_stage(stage2_cout, last_stage_is_rise) stage_effort_list.append(stage2) + last_stage_is_rise = stage2.is_rise - stage3 = self.inv.get_effort_stage(external_cout) + stage3 = self.inv.get_effort_stage(external_cout, last_stage_is_rise) stage_effort_list.append(stage3) return stage_effort_list diff --git a/compiler/pgates/pinv.py b/compiler/pgates/pinv.py index 4d59b715..31682360 100644 --- a/compiler/pgates/pinv.py +++ b/compiler/pgates/pinv.py @@ -288,7 +288,9 @@ class pinv(pgate.pgate): """Return the capacitance of the gate connection in generic capacitive units relative to the minimum width of a transistor""" return self.nmos_size + self.pmos_size - def get_effort_stage(self, cout): - """Returns an object representing the parameters for delay in tau units.""" + def get_effort_stage(self, cout, inp_is_rise=True): + """Returns an object representing the parameters for delay in tau units. + Optional is_rise refers to the input direction rise/fall. Input inverted by this stage. + """ parasitic_delay = 1 - return logical_effort.logical_effort(self.size, self.get_cin(), cout, parasitic_delay) \ No newline at end of file + return logical_effort.logical_effort(self.size, self.get_cin(), cout, parasitic_delay, not inp_is_rise) diff --git a/compiler/pgates/pinvbuf.py b/compiler/pgates/pinvbuf.py index 23826cd2..13c376cf 100644 --- a/compiler/pgates/pinvbuf.py +++ b/compiler/pgates/pinvbuf.py @@ -187,30 +187,34 @@ class pinvbuf(design.design): inv2_delay = self.inv2.analytical_delay(slew=inv1_delay.slew, load=load) return inv1_delay + inv2_delay - def determine_clk_buf_stage_efforts(self, external_cout): + def determine_clk_buf_stage_efforts(self, external_cout, inp_is_rise=False): """Get the stage efforts of the clk -> clk_buf path""" stage_effort_list = [] stage1_cout = self.inv1.get_cin() + self.inv2.get_cin() - stage1 = self.inv.get_effort_stage(stage1_cout) + stage1 = self.inv.get_effort_stage(stage1_cout, inp_is_rise) stage_effort_list.append(stage1) + last_stage_is_rise = stage1.is_rise - stage2 = self.inv2.get_effort_stage(external_cout) + stage2 = self.inv2.get_effort_stage(external_cout, last_stage_is_rise) stage_effort_list.append(stage2) return stage_effort_list - def determine_clk_buf_bar_stage_efforts(self, external_cout): + def determine_clk_buf_bar_stage_efforts(self, external_cout, inp_is_rise=False): """Get the stage efforts of the clk -> clk_buf path""" + #After (almost) every stage, the direction of the signal inverts. stage_effort_list = [] stage1_cout = self.inv1.get_cin() + self.inv2.get_cin() - stage1 = self.inv.get_effort_stage(stage1_cout) + stage1 = self.inv.get_effort_stage(stage1_cout, inp_is_rise) stage_effort_list.append(stage1) + last_stage_is_rise = stage_effort_list[-1].is_rise stage2_cout = self.inv2.get_cin() - stage2 = self.inv1.get_effort_stage(stage2_cout) + stage2 = self.inv1.get_effort_stage(stage2_cout, last_stage_is_rise) stage_effort_list.append(stage2) + last_stage_is_rise = stage_effort_list[-1].is_rise - stage3 = self.inv2.get_effort_stage(external_cout) + stage3 = self.inv2.get_effort_stage(external_cout, last_stage_is_rise) stage_effort_list.append(stage3) return stage_effort_list \ No newline at end of file diff --git a/compiler/pgates/pnand2.py b/compiler/pgates/pnand2.py index a79a7264..dc452f12 100644 --- a/compiler/pgates/pnand2.py +++ b/compiler/pgates/pnand2.py @@ -249,7 +249,9 @@ class pnand2(pgate.pgate): """Return the relative input capacitance of a single input""" return self.nmos_size+self.pmos_size - def get_effort_stage(self, cout): - """Returns an object representing the parameters for delay in tau units.""" + def get_effort_stage(self, cout, inp_is_rise=True): + """Returns an object representing the parameters for delay in tau units. + Optional is_rise refers to the input direction rise/fall. Input inverted by this stage. + """ parasitic_delay = 2 - return logical_effort.logical_effort(self.size, self.get_cin(), cout, parasitic_delay) \ No newline at end of file + return logical_effort.logical_effort(self.size, self.get_cin(), cout, parasitic_delay, not inp_is_rise) \ No newline at end of file diff --git a/compiler/pgates/pnand3.py b/compiler/pgates/pnand3.py index 555ee5b0..4dab5264 100644 --- a/compiler/pgates/pnand3.py +++ b/compiler/pgates/pnand3.py @@ -267,7 +267,9 @@ class pnand3(pgate.pgate): """Return the relative input capacitance of a single input""" return self.nmos_size+self.pmos_size - def get_effort_stage(self, cout): - """Returns an object representing the parameters for delay in tau units.""" + def get_effort_stage(self, cout, inp_is_rise=True): + """Returns an object representing the parameters for delay in tau units. + Optional is_rise refers to the input direction rise/fall. Input inverted by this stage. + """ parasitic_delay = 3 - return logical_effort.logical_effort(self.size, self.get_cin(), cout, parasitic_delay) \ No newline at end of file + return logical_effort.logical_effort(self.size, self.get_cin(), cout, parasitic_delay, not inp_is_rise) \ No newline at end of file diff --git a/compiler/sram_base.py b/compiler/sram_base.py index d09ea2cd..9e8953dd 100644 --- a/compiler/sram_base.py +++ b/compiler/sram_base.py @@ -488,13 +488,13 @@ class sram_base(design): """ LH and HL are the same in analytical model. """ return self.bank.analytical_delay(vdd,slew,load) - def determine_wordline_stage_efforts(self): + def determine_wordline_stage_efforts(self, inp_is_rise=True): """Get the all the stage efforts for each stage in the path from clk_buf to a wordline""" stage_effort_list = [] #Clk_buf originates from the control logic so only the bank is related to the wordline path external_wordline_cout = 0 #No loading on the wordline other than in the bank. - stage_effort_list += self.bank.determine_wordline_stage_efforts(external_wordline_cout) + stage_effort_list += self.bank.determine_wordline_stage_efforts(external_wordline_cout, inp_is_rise) return stage_effort_list From 3716030a23ab071030ef919522cbd7d47ea89bd0 Mon Sep 17 00:00:00 2001 From: Hunter Nichols Date: Fri, 16 Nov 2018 16:57:22 -0800 Subject: [PATCH 27/78] Added delay chain sizing for rise/fall delays. Disabled to some sizes being having very large fanouts. --- compiler/characterizer/delay.py | 43 +-------------- compiler/modules/control_logic.py | 82 +++++++++++++++++++++++++---- compiler/modules/replica_bitline.py | 7 ++- 3 files changed, 76 insertions(+), 56 deletions(-) diff --git a/compiler/characterizer/delay.py b/compiler/characterizer/delay.py index 6b97fa52..3e103fc7 100644 --- a/compiler/characterizer/delay.py +++ b/compiler/characterizer/delay.py @@ -208,7 +208,7 @@ class delay(simulation): trig_slew_low = 0.1 * self.vdd_voltage targ_slew_high = 0.9 * self.vdd_voltage if 'delay' in delay_name: - trig_dir="RISE" + trig_dir="RISE" #FALL trig_val = half_vdd targ_val = half_vdd trig_name = trig_clk_name @@ -429,6 +429,7 @@ class delay(simulation): delay_names = ["{0}{1}".format(mname,port) for mname in self.delay_meas_names] delay_names = [mname for mname in self.delay_meas_names] delays = self.parse_values(delay_names, port, 1e9) # scale delays to ns + debug.info(2,"Delay values = {}".format(delays)) if not self.check_valid_delays(tuple(delays.values())): return (False,{}) result[port].update(delays) @@ -646,18 +647,6 @@ class delay(simulation): # slew=0.04 # self.try_period(target_period, feasible_delay_lh, feasible_delay_hl) # sys.exit(1) - - #For debugging, skips characterization and returns dummy values. - # char_data = self.get_empty_measure_data_dict() - # i = 1.0 - # for slew in slews: - # for load in loads: - # for k,v in char_data.items(): - # char_data[k].append(i) - # i+=1.0 - # char_data["min_period"] = i - # char_data["leakage_power"] = i+1.0 - # return char_data # 1) Find a feasible period and it's corresponding delays using the trimmed array. feasible_delays = self.find_feasible_period() @@ -834,34 +823,6 @@ class delay(simulation): return (sram_data,port_data) - # delay_lh = [] - # delay_hl = [] - # slew_lh = [] - # slew_hl = [] - # for slew in slews: - # for load in loads: - # self.set_load_slew(load,slew) - # bank_delay = sram.analytical_delay(self.vdd_voltage, self.slew,self.load) - # # Convert from ps to ns - # delay_lh.append(bank_delay.delay/1e3) - # delay_hl.append(bank_delay.delay/1e3) - # slew_lh.append(bank_delay.slew/1e3) - # slew_hl.append(bank_delay.slew/1e3) - - # power = self.analytical_power() - - # sram_data = { "min_period": 0, - # "leakage_power": power.leakage} - # port_data = [{"delay_lh": delay_lh, - # "delay_hl": delay_hl, - # "slew_lh": slew_lh, - # "slew_hl": slew_hl, - # "read0_power": power.dynamic, - # "read1_power": power.dynamic, - # "write0_power": power.dynamic, - # "write1_power": power.dynamic, - # }] - # return (sram_data,port_data) def analytical_power(self, slews, loads): """Get the dynamic and leakage power from the SRAM""" diff --git a/compiler/modules/control_logic.py b/compiler/modules/control_logic.py index 23d82998..3ab04561 100644 --- a/compiler/modules/control_logic.py +++ b/compiler/modules/control_logic.py @@ -103,13 +103,17 @@ class control_logic(design.design): delay_stages_heuristic, delay_fanout_heuristic = self.get_heuristic_delay_chain_size() bitcell_loads = int(math.ceil(self.num_rows / 2.0)) - self.replica_bitline = replica_bitline(delay_stages_heuristic, delay_fanout_heuristic, bitcell_loads, name="replica_bitline_"+self.port_type) + self.replica_bitline = replica_bitline([delay_fanout_heuristic]*delay_stages_heuristic, bitcell_loads, name="replica_bitline_"+self.port_type) if self.sram != None and not self.is_sen_timing_okay(): - #Resize the delay chain (by instantiating a new rbl) if the analytical timing failed. + #This resizes to match fall and rise delays, can make the delay chain weird sizes. + #stage_list = self.get_dynamic_delay_fanout_list(delay_stages_heuristic, delay_fanout_heuristic) + #self.replica_bitline = replica_bitline(stage_list, bitcell_loads, name="replica_bitline_resized_"+self.port_type) + + #This resizes based on total delay. delay_stages, delay_fanout = self.get_dynamic_delay_chain_size(delay_stages_heuristic, delay_fanout_heuristic) - self.replica_bitline = replica_bitline(delay_stages, delay_fanout, bitcell_loads, name="replica_bitline_resized_"+self.port_type) - self.sen_delay = self.get_delay_to_sen() #get the new timing + self.replica_bitline = replica_bitline([delay_fanout]*delay_stages, bitcell_loads, name="replica_bitline_resized_"+self.port_type) + self.sen_delay_rise,self.sen_delay_fall = self.get_delays_to_sen() #get the new timing self.add_mod(self.replica_bitline) @@ -124,16 +128,20 @@ class control_logic(design.design): delay_stages = 6 else: delay_stages = 4 + return (delay_stages, delay_fanout) def is_sen_timing_okay(self): - self.wl_delay = self.get_delay_to_wl() - self.sen_delay = self.get_delay_to_sen() + self.wl_delay_rise,self.wl_delay_fall = self.get_delays_to_wl() + self.sen_delay_rise,self.sen_delay_fall = self.get_delays_to_sen() + self.wl_delay = self.wl_delay_rise+self.wl_delay_fall + self.sen_delay = self.sen_delay_rise+self.sen_delay_fall #The sen delay must always be bigger than than the wl delay. This decides how much larger the sen delay must be before #a re-size is warranted. - if self.wl_delay*self.wl_timing_tolerance >= self.sen_delay: + if (self.wl_delay_rise*self.wl_timing_tolerance >= self.sen_delay_rise or + self.wl_delay_fall*self.wl_timing_tolerance >= self.sen_delay_fall): return False else: return True @@ -155,7 +163,59 @@ 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_chain_delay = (previous_fanout+1+self.parasitic_inv_delay)*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 + required_delay_fall = self.wl_delay_fall*self.wl_timing_tolerance - (self.sen_delay_fall-previous_delay_chain_delay/2) + required_delay_rise = self.wl_delay_rise*self.wl_timing_tolerance - (self.sen_delay_rise-previous_delay_chain_delay/2) + debug.info(2,"Required delays from chain: fall={}, rise={}".format(required_delay_fall,required_delay_rise)) + + #The stages need to be equal (or at least a even number of stages with matching rise/fall delays) + while True: + stages_fall = self.calculate_stages_with_fixed_fanout(required_delay_fall,fanout_fall) + stages_rise = self.calculate_stages_with_fixed_fanout(required_delay_rise,fanout_rise) + debug.info(1,"Fall stages={}, rise stages={}".format(stages_fall,stages_rise)) + if stages_fall == stages_rise: + break + elif abs(stages_fall-stages_rise) == 1: + break + #There should also be a condition to make sure the fanout does not get too large. + #Otherwise, increase the fanout of delay with the most stages, calculate new stages + elif stages_fall>stages_rise: + 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 + if required_delay<=3: #3 is the minimum delay per stage. + return 1 + delay_stages = ceil(required_delay/(fanout+1+self.parasitic_inv_delay)) + return delay_stages + + def calculate_stage_list(self, total_stages, fanout_rise, fanout_fall): + """Produces a list of fanouts which determine the size of the delay chain. List length is the number of stages. + Assumes the first stage is falling. + """ + stage_list = [] + for i in range(total_stages): + if i%2 == 0: + stage_list.append() def setup_signal_busses(self): """ Setup bus names, determine the size of the busses etc """ @@ -641,14 +701,14 @@ class control_logic(design.design): width=pin.width()) - def get_delay_to_wl(self): + def get_delays_to_wl(self): """Get the delay (in delay units) of the clk to a wordline in the bitcell array""" debug.check(self.sram.all_mods_except_control_done, "Cannot calculate sense amp enable delay unless all module have been added.") stage_efforts = self.determine_wordline_stage_efforts() clk_to_wl_rise,clk_to_wl_fall = logical_effort.calculate_relative_rise_fall_delays(stage_efforts, self.parasitic_inv_delay) total_delay = clk_to_wl_rise + clk_to_wl_fall debug.info(1, "Clock to wl delay is rise={:.3f}, fall={:.3f}, total={:.3f} in delay units".format(clk_to_wl_rise, clk_to_wl_fall,total_delay)) - return total_delay + return clk_to_wl_rise,clk_to_wl_fall def determine_wordline_stage_efforts(self): @@ -670,7 +730,7 @@ class control_logic(design.design): return stage_effort_list - def get_delay_to_sen(self): + def get_delays_to_sen(self): """Get the delay (in delay units) of the clk to a sense amp enable. This does not incorporate the delay of the replica bitline. """ @@ -679,7 +739,7 @@ class control_logic(design.design): clk_to_sen_rise, clk_to_sen_fall = logical_effort.calculate_relative_rise_fall_delays(stage_efforts, self.parasitic_inv_delay) total_delay = clk_to_sen_rise + clk_to_sen_fall debug.info(1, "Clock to s_en delay is rise={:.3f}, fall={:.3f}, total={:.3f} in delay units".format(clk_to_sen_rise, clk_to_sen_fall,total_delay)) - return total_delay + return clk_to_sen_rise, clk_to_sen_fall def determine_sa_enable_stage_efforts(self): """Follows the clock signal to the sense amp enable signal adding each stages stage effort to a list""" diff --git a/compiler/modules/replica_bitline.py b/compiler/modules/replica_bitline.py index 65320666..e6be9b3e 100644 --- a/compiler/modules/replica_bitline.py +++ b/compiler/modules/replica_bitline.py @@ -15,12 +15,11 @@ class replica_bitline(design.design): line and rows is the height of the replica bit loads. """ - def __init__(self, delay_stages, delay_fanout, bitcell_loads, name="replica_bitline"): + def __init__(self, delay_fanout_list, bitcell_loads, name="replica_bitline"): design.design.__init__(self, name) self.bitcell_loads = bitcell_loads - self.delay_stages = delay_stages - self.delay_fanout = delay_fanout + self.delay_fanout_list = delay_fanout_list self.create_netlist() if not OPTS.netlist_only: @@ -95,7 +94,7 @@ class replica_bitline(design.design): # FIXME: The FO and depth of this should be tuned from delay_chain import delay_chain - self.delay_chain = delay_chain([self.delay_fanout]*self.delay_stages) + self.delay_chain = delay_chain(self.delay_fanout_list) self.add_mod(self.delay_chain) self.inv = pinv() From d3c47ac97693481f28d6ab02687a9b36dc54a6c0 Mon Sep 17 00:00:00 2001 From: Hunter Nichols Date: Sun, 18 Nov 2018 23:28:49 -0800 Subject: [PATCH 28/78] Made delay measurements less dependent on period. --- compiler/characterizer/delay.py | 21 ++++++++++++--------- compiler/modules/control_logic.py | 23 +++++++++++++++++------ 2 files changed, 29 insertions(+), 15 deletions(-) diff --git a/compiler/characterizer/delay.py b/compiler/characterizer/delay.py index 3e103fc7..809e3974 100644 --- a/compiler/characterizer/delay.py +++ b/compiler/characterizer/delay.py @@ -208,14 +208,15 @@ class delay(simulation): trig_slew_low = 0.1 * self.vdd_voltage targ_slew_high = 0.9 * self.vdd_voltage if 'delay' in delay_name: - trig_dir="RISE" #FALL trig_val = half_vdd targ_val = half_vdd trig_name = trig_clk_name if 'lh' in delay_name: + trig_dir="RISE" targ_dir="RISE" trig_td = targ_td = self.cycle_times[self.measure_cycles[port]["read1"]] else: + trig_dir="FALL" targ_dir="FALL" trig_td = targ_td = self.cycle_times[self.measure_cycles[port]["read0"]] @@ -426,11 +427,10 @@ class delay(simulation): #Too much duplicate code here. Try reducing for port in self.targ_read_ports: debug.info(2, "Check delay values for port {}".format(port)) - delay_names = ["{0}{1}".format(mname,port) for mname in self.delay_meas_names] delay_names = [mname for mname in self.delay_meas_names] delays = self.parse_values(delay_names, port, 1e9) # scale delays to ns debug.info(2,"Delay values = {}".format(delays)) - if not self.check_valid_delays(tuple(delays.values())): + if not self.check_valid_delays(delays): return (False,{}) result[port].update(delays) @@ -479,10 +479,13 @@ class delay(simulation): #key=raw_input("press return to continue") return (leakage_power*1e3, trim_leakage_power*1e3) - def check_valid_delays(self, delay_tuple): + def check_valid_delays(self, delay_dict): """ Check if the measurements are defined and if they are valid. """ - - (delay_hl, delay_lh, slew_hl, slew_lh) = delay_tuple + #Hard coded names currently + delay_hl = delay_dict["delay_hl"] + delay_lh = delay_dict["delay_lh"] + slew_hl = delay_dict["slew_hl"] + slew_lh = delay_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 @@ -496,7 +499,8 @@ class delay(simulation): 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) - if delay_hl>self.period or delay_lh>self.period or slew_hl>self.period or slew_lh>self.period: + half_period = self.period/2 #high-to-low delays start at neg. clk edge, so they need to be less than half_period + if delay_hl>half_period or delay_lh>self.period or slew_hl>half_period or slew_lh>self.period: debug.info(2,"UNsuccessful simulation (in ns):\n\t\t{0}\n\t\t{1}\n\t\t{2}".format(period_load_slew_str, delays_str, slews_str)) @@ -580,8 +584,7 @@ class delay(simulation): #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: - delay_port_names = [mname for mname in self.delay_meas_names if "delay" in mname] - for dname in delay_port_names: + for dname in self.delay_meas_names: #check that the delays and slews do not degrade with tested period. if not relative_compare(results[port][dname],feasible_delays[port][dname],error_tolerance=0.05): debug.info(2,"Delay too big {0} vs {1}".format(results[port][dname],feasible_delays[port][dname])) return False diff --git a/compiler/modules/control_logic.py b/compiler/modules/control_logic.py index 3ab04561..f9c2b800 100644 --- a/compiler/modules/control_logic.py +++ b/compiler/modules/control_logic.py @@ -104,8 +104,9 @@ class control_logic(design.design): delay_stages_heuristic, delay_fanout_heuristic = self.get_heuristic_delay_chain_size() bitcell_loads = int(math.ceil(self.num_rows / 2.0)) self.replica_bitline = replica_bitline([delay_fanout_heuristic]*delay_stages_heuristic, bitcell_loads, name="replica_bitline_"+self.port_type) + self.set_sen_wl_delays() - if self.sram != None and not self.is_sen_timing_okay(): + if self.sram != None and not self.does_sen_total_timing_match(): #This resizes to match fall and rise delays, can make the delay chain weird sizes. #stage_list = self.get_dynamic_delay_fanout_list(delay_stages_heuristic, delay_fanout_heuristic) #self.replica_bitline = replica_bitline(stage_list, bitcell_loads, name="replica_bitline_resized_"+self.port_type) @@ -131,21 +132,31 @@ class control_logic(design.design): return (delay_stages, delay_fanout) - def is_sen_timing_okay(self): + def set_sen_wl_delays(self): + """Set delays for wordline and sense amp enable""" self.wl_delay_rise,self.wl_delay_fall = self.get_delays_to_wl() self.sen_delay_rise,self.sen_delay_fall = self.get_delays_to_sen() - self.wl_delay = self.wl_delay_rise+self.wl_delay_fall self.sen_delay = self.sen_delay_rise+self.sen_delay_fall - #The sen delay must always be bigger than than the wl delay. This decides how much larger the sen delay must be before - #a re-size is warranted. + def does_sen_rise_fall_timing_match(self): + """Compare the relative rise/fall delays of the sense amp enable and wordline""" + #This is not necessarily more reliable than total delay in some cases. if (self.wl_delay_rise*self.wl_timing_tolerance >= self.sen_delay_rise or self.wl_delay_fall*self.wl_timing_tolerance >= self.sen_delay_fall): return False else: return True - + + def does_sen_total_timing_match(self): + """Compare the total delays of the sense amp enable and wordline""" + #The sen delay must always be bigger than than the wl delay. This decides how much larger the sen delay must be before + #a re-size is warranted. + if self.wl_delay*self.wl_timing_tolerance >= self.sen_delay: + return False + else: + return True + 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 From a55d907d03ff9ff0f56319f9eb78eb81ed34490e Mon Sep 17 00:00:00 2001 From: Hunter Nichols Date: Mon, 19 Nov 2018 15:40:26 -0800 Subject: [PATCH 29/78] High-to-low delays and slews are copied from the low-to-high values to simplify lib file results. FIXME --- compiler/characterizer/delay.py | 10 ++++++++++ compiler/modules/control_logic.py | 15 ++++++++------- 2 files changed, 18 insertions(+), 7 deletions(-) diff --git a/compiler/characterizer/delay.py b/compiler/characterizer/delay.py index 809e3974..1f0b37fb 100644 --- a/compiler/characterizer/delay.py +++ b/compiler/characterizer/delay.py @@ -669,8 +669,18 @@ class delay(simulation): 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() diff --git a/compiler/modules/control_logic.py b/compiler/modules/control_logic.py index f9c2b800..fab78f72 100644 --- a/compiler/modules/control_logic.py +++ b/compiler/modules/control_logic.py @@ -33,7 +33,7 @@ class control_logic(design.design): self.sram=sram #self.sram=None #disable re-sizing for debugging self.wl_timing_tolerance = 1 #Determines how much larger the sen delay should be. Accounts for possible error in model. - self.parasitic_inv_delay = 0 #Keeping 0 for now until further testing. + self.parasitic_inv_delay = parameter["min_inv_para_delay"] #Keeping 0 for now until further testing. if self.port_type == "rw": self.num_control_signals = 2 @@ -106,14 +106,15 @@ class control_logic(design.design): self.replica_bitline = replica_bitline([delay_fanout_heuristic]*delay_stages_heuristic, bitcell_loads, name="replica_bitline_"+self.port_type) self.set_sen_wl_delays() - if self.sram != None and not self.does_sen_total_timing_match(): + if self.sram != None and not self.does_sen_rise_fall_timing_match(): #This resizes to match fall and rise delays, can make the delay chain weird sizes. - #stage_list = self.get_dynamic_delay_fanout_list(delay_stages_heuristic, delay_fanout_heuristic) - #self.replica_bitline = replica_bitline(stage_list, bitcell_loads, name="replica_bitline_resized_"+self.port_type) + stage_list = self.get_dynamic_delay_fanout_list(delay_stages_heuristic, delay_fanout_heuristic) + self.replica_bitline = replica_bitline(stage_list, bitcell_loads, name="replica_bitline_resized_"+self.port_type) #This resizes based on total delay. - delay_stages, delay_fanout = self.get_dynamic_delay_chain_size(delay_stages_heuristic, delay_fanout_heuristic) - self.replica_bitline = replica_bitline([delay_fanout]*delay_stages, bitcell_loads, name="replica_bitline_resized_"+self.port_type) + # delay_stages, delay_fanout = self.get_dynamic_delay_chain_size(delay_stages_heuristic, delay_fanout_heuristic) + # self.replica_bitline = replica_bitline([delay_fanout]*delay_stages, bitcell_loads, name="replica_bitline_resized_"+self.port_type) + self.sen_delay_rise,self.sen_delay_fall = self.get_delays_to_sen() #get the new timing self.add_mod(self.replica_bitline) @@ -214,7 +215,7 @@ class control_logic(design.design): 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 - if required_delay<=3: #3 is the minimum delay per stage. + if required_delay <= 3+self.parasitic_inv_delay: #3 is the minimum delay per stage (with pinv=0). return 1 delay_stages = ceil(required_delay/(fanout+1+self.parasitic_inv_delay)) return delay_stages From 8257e4fe8cc3ea1a65ddf3a38003907891ffb93a Mon Sep 17 00:00:00 2001 From: Hunter Nichols Date: Mon, 19 Nov 2018 16:51:43 -0800 Subject: [PATCH 30/78] Changed syntax in replica_bl tests, golden data to fit new values in delay tests. --- compiler/characterizer/delay.py | 1 - .../14_replica_bitline_multiport_test.py | 6 +-- compiler/tests/14_replica_bitline_test.py | 4 +- compiler/tests/21_hspice_delay_test.py | 40 +++++++++---------- compiler/tests/21_ngspice_delay_test.py | 40 +++++++++---------- 5 files changed, 45 insertions(+), 46 deletions(-) diff --git a/compiler/characterizer/delay.py b/compiler/characterizer/delay.py index 1f0b37fb..f7fcfbd4 100644 --- a/compiler/characterizer/delay.py +++ b/compiler/characterizer/delay.py @@ -429,7 +429,6 @@ class delay(simulation): debug.info(2, "Check delay values for port {}".format(port)) delay_names = [mname for mname in self.delay_meas_names] delays = self.parse_values(delay_names, port, 1e9) # scale delays to ns - debug.info(2,"Delay values = {}".format(delays)) if not self.check_valid_delays(delays): return (False,{}) result[port].update(delays) diff --git a/compiler/tests/14_replica_bitline_multiport_test.py b/compiler/tests/14_replica_bitline_multiport_test.py index 55e3e8f0..41c3aa51 100755 --- a/compiler/tests/14_replica_bitline_multiport_test.py +++ b/compiler/tests/14_replica_bitline_multiport_test.py @@ -28,7 +28,7 @@ class replica_bitline_multiport_test(openram_test): OPTS.num_w_ports = 0 debug.info(2, "Testing 1rw 1r RBL with {0} FO4 stages, {1} rows".format(stages,rows)) - a = replica_bitline.replica_bitline(stages,fanout,rows) + a = replica_bitline.replica_bitline(stages*[fanout],rows) self.local_check(a) # check replica bitline in pbitcell multi-port @@ -39,7 +39,7 @@ class replica_bitline_multiport_test(openram_test): OPTS.num_r_ports = 0 debug.info(2, "Testing RBL pbitcell 1rw with {0} FO4 stages, {1} rows".format(stages,rows)) - a = replica_bitline.replica_bitline(stages,fanout,rows) + a = replica_bitline.replica_bitline(stages*[fanout],rows) self.local_check(a) OPTS.num_rw_ports = 1 @@ -47,7 +47,7 @@ class replica_bitline_multiport_test(openram_test): OPTS.num_r_ports = 1 debug.info(2, "Testing RBL pbitcell 1rw 1w 1r with {0} FO4 stages, {1} rows".format(stages,rows)) - a = replica_bitline.replica_bitline(stages,fanout,rows) + a = replica_bitline.replica_bitline(stages*[fanout],rows) self.local_check(a) globals.end_openram() diff --git a/compiler/tests/14_replica_bitline_test.py b/compiler/tests/14_replica_bitline_test.py index 9efd3eec..94a49f55 100755 --- a/compiler/tests/14_replica_bitline_test.py +++ b/compiler/tests/14_replica_bitline_test.py @@ -22,14 +22,14 @@ class replica_bitline_test(openram_test): fanout=4 rows=13 debug.info(2, "Testing RBL with {0} FO4 stages, {1} rows".format(stages,rows)) - a = replica_bitline.replica_bitline(stages,fanout,rows) + a = replica_bitline.replica_bitline(stages*[fanout],rows) self.local_check(a) #debug.error("Exiting...", 1) stages=8 rows=100 debug.info(2, "Testing RBL with {0} FO4 stages, {1} rows".format(stages,rows)) - a = replica_bitline.replica_bitline(stages,fanout,rows) + a = replica_bitline.replica_bitline(stages*[fanout],rows) self.local_check(a) diff --git a/compiler/tests/21_hspice_delay_test.py b/compiler/tests/21_hspice_delay_test.py index 5facb482..033cfbb6 100755 --- a/compiler/tests/21_hspice_delay_test.py +++ b/compiler/tests/21_hspice_delay_test.py @@ -51,27 +51,27 @@ class timing_sram_test(openram_test): #Assumes single rw port (6t sram) if OPTS.tech_name == "freepdk45": - golden_data = {'delay_hl': [2.5829000000000004], - 'delay_lh': [0.2255964], - 'leakage_power': 0.0019498999999999996, - 'min_period': 4.844, - 'read0_power': [0.055371399999999994], - 'read1_power': [0.0520225], - 'slew_hl': [0.0794261], - 'slew_lh': [0.0236264], - 'write0_power': [0.06545659999999999], - 'write1_power': [0.057846299999999996]} + golden_data = {'delay_hl': [0.15801], + 'delay_lh': [0.15801], + 'leakage_power': 0.0023949, + 'min_period': 0.41, + 'read0_power': [0.628], + 'read1_power': [0.60328], + 'slew_hl': [0.092516], + 'slew_lh': [0.092516], + 'write0_power': [0.7510600000000001], + 'write1_power': [0.66619]} elif OPTS.tech_name == "scn4m_subm": - golden_data = {'delay_hl': [3.452], - 'delay_lh': [1.3792000000000002], - 'leakage_power': 0.0257065, - 'min_period': 4.688, - 'read0_power': [15.0755], - 'read1_power': [14.4526], - 'slew_hl': [0.6137363], - 'slew_lh': [0.3381045], - 'write0_power': [16.9203], - 'write1_power': [15.367]} + golden_data = {'delay_hl': [1.2], + 'delay_lh': [1.2], + 'leakage_power': 0.026912, + 'min_period': 2.891, + 'read0_power': [24.7996], + 'read1_power': [23.9464], + 'slew_hl': [0.7045815], + 'slew_lh': [0.7045815], + 'write0_power': [27.8985], + 'write1_power': [25.1812]} else: self.assertTrue(False) # other techs fail # Check if no too many or too few results diff --git a/compiler/tests/21_ngspice_delay_test.py b/compiler/tests/21_ngspice_delay_test.py index e203b878..b0275c1c 100755 --- a/compiler/tests/21_ngspice_delay_test.py +++ b/compiler/tests/21_ngspice_delay_test.py @@ -50,27 +50,27 @@ class timing_sram_test(openram_test): data.update(port_data[0]) if OPTS.tech_name == "freepdk45": - golden_data = {'delay_hl': [2.584251], - 'delay_lh': [0.22870469999999998], - 'leakage_power': 0.0009567935, - 'min_period': 4.844, - 'read0_power': [0.0547588], - 'read1_power': [0.051159970000000006], - 'slew_hl': [0.08164099999999999], - 'slew_lh': [0.025474979999999998], - 'write0_power': [0.06513271999999999], - 'write1_power': [0.058057000000000004]} + golden_data = {'delay_hl': [0.16119519999999998], + 'delay_lh': [0.16119519999999998], + 'leakage_power': 0.01728358, + 'min_period': 0.469, + 'read0_power': [0.5486122], + 'read1_power': [0.5276639000000001], + 'slew_hl': [0.09102138], + 'slew_lh': [0.09102138], + 'write0_power': [0.6586793], + 'write1_power': [0.5893689999999999]} elif OPTS.tech_name == "scn4m_subm": - golden_data = {'delay_hl': [3.644147], - 'delay_lh': [1.629815], - 'leakage_power': 0.001542964, - 'min_period': 4.688, - 'read0_power': [16.28732], - 'read1_power': [15.75155], - 'slew_hl': [0.6722473], - 'slew_lh': [0.3386347], - 'write0_power': [18.545450000000002], - 'write1_power': [16.81084]} + golden_data = {'delay_hl': [1.342843], + 'delay_lh': [1.342843], + 'leakage_power': 0.001683033, + 'min_period': 3.906, + 'read0_power': [19.55096], + 'read1_power': [18.99015], + 'slew_hl': [0.7687596], + 'slew_lh': [0.7687596], + 'write0_power': [22.285880000000002], + 'write1_power': [19.97167]} else: self.assertTrue(False) # other techs fail From 2f29ad55108bf6adcec11b3c085034e1bbd4e855 Mon Sep 17 00:00:00 2001 From: Hunter Nichols Date: Mon, 19 Nov 2018 22:13:58 -0800 Subject: [PATCH 31/78] Disabled resizing based on rise/fall delays. It creates delay chains which cannot be routed. --- compiler/modules/control_logic.py | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/compiler/modules/control_logic.py b/compiler/modules/control_logic.py index fab78f72..5f751be8 100644 --- a/compiler/modules/control_logic.py +++ b/compiler/modules/control_logic.py @@ -104,16 +104,15 @@ class control_logic(design.design): delay_stages_heuristic, delay_fanout_heuristic = self.get_heuristic_delay_chain_size() bitcell_loads = int(math.ceil(self.num_rows / 2.0)) self.replica_bitline = replica_bitline([delay_fanout_heuristic]*delay_stages_heuristic, bitcell_loads, name="replica_bitline_"+self.port_type) - self.set_sen_wl_delays() - if self.sram != None and not self.does_sen_rise_fall_timing_match(): + if self.sram != None and not self.does_sen_total_timing_match(): #check condition based on resizing method #This resizes to match fall and rise delays, can make the delay chain weird sizes. - stage_list = self.get_dynamic_delay_fanout_list(delay_stages_heuristic, delay_fanout_heuristic) - self.replica_bitline = replica_bitline(stage_list, bitcell_loads, name="replica_bitline_resized_"+self.port_type) + # stage_list = self.get_dynamic_delay_fanout_list(delay_stages_heuristic, delay_fanout_heuristic) + # self.replica_bitline = replica_bitline(stage_list, bitcell_loads, name="replica_bitline_resized_"+self.port_type) #This resizes based on total delay. - # delay_stages, delay_fanout = self.get_dynamic_delay_chain_size(delay_stages_heuristic, delay_fanout_heuristic) - # self.replica_bitline = replica_bitline([delay_fanout]*delay_stages, bitcell_loads, name="replica_bitline_resized_"+self.port_type) + delay_stages, delay_fanout = self.get_dynamic_delay_chain_size(delay_stages_heuristic, delay_fanout_heuristic) + self.replica_bitline = replica_bitline([delay_fanout]*delay_stages, bitcell_loads, name="replica_bitline_resized_"+self.port_type) self.sen_delay_rise,self.sen_delay_fall = self.get_delays_to_sen() #get the new timing @@ -142,6 +141,7 @@ class control_logic(design.design): def does_sen_rise_fall_timing_match(self): """Compare the relative rise/fall delays of the sense amp enable and wordline""" + self.set_sen_wl_delays() #This is not necessarily more reliable than total delay in some cases. if (self.wl_delay_rise*self.wl_timing_tolerance >= self.sen_delay_rise or self.wl_delay_fall*self.wl_timing_tolerance >= self.sen_delay_fall): @@ -151,6 +151,7 @@ class control_logic(design.design): def does_sen_total_timing_match(self): """Compare the total delays of the sense amp enable and wordline""" + self.set_sen_wl_delays() #The sen delay must always be bigger than than the wl delay. This decides how much larger the sen delay must be before #a re-size is warranted. if self.wl_delay*self.wl_timing_tolerance >= self.sen_delay: From 67977bab3e02fb9e07b3a079607553cf1e7b1b8b Mon Sep 17 00:00:00 2001 From: Hunter Nichols Date: Tue, 20 Nov 2018 11:39:14 -0800 Subject: [PATCH 32/78] Fixed port issue in bank. Changed golden data due to netlist change. --- compiler/modules/bank.py | 4 ++-- compiler/tests/21_ngspice_delay_test.py | 20 ++++++++++---------- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/compiler/modules/bank.py b/compiler/modules/bank.py index 41eb6483..0444d0f4 100644 --- a/compiler/modules/bank.py +++ b/compiler/modules/bank.py @@ -1281,8 +1281,8 @@ class bank(design.design): """Get the relative capacitance of all the clk_bar connections in the bank""" #Current bank only uses clock bar (clk_buf_bar) as an enable for the precharge array. - #Assume single port - port = 0 + #Precharges are the all the same in Mulitport, one is picked + port = self.read_ports[0] total_clk_bar_cin = self.precharge_array[port].get_en_cin() return total_clk_bar_cin diff --git a/compiler/tests/21_ngspice_delay_test.py b/compiler/tests/21_ngspice_delay_test.py index b0275c1c..96b1c887 100755 --- a/compiler/tests/21_ngspice_delay_test.py +++ b/compiler/tests/21_ngspice_delay_test.py @@ -50,16 +50,16 @@ class timing_sram_test(openram_test): data.update(port_data[0]) if OPTS.tech_name == "freepdk45": - golden_data = {'delay_hl': [0.16119519999999998], - 'delay_lh': [0.16119519999999998], - 'leakage_power': 0.01728358, - 'min_period': 0.469, - 'read0_power': [0.5486122], - 'read1_power': [0.5276639000000001], - 'slew_hl': [0.09102138], - 'slew_lh': [0.09102138], - 'write0_power': [0.6586793], - 'write1_power': [0.5893689999999999]} + golden_data = {'delay_hl': [0.1587689], + 'delay_lh': [0.1587689], + 'leakage_power': 0.02824871, + 'min_period': 0.43, + 'read0_power': [0.5932789], + 'read1_power': [0.5733669], + 'slew_hl': [0.09096027999999999], + 'slew_lh': [0.09096027999999999], + 'write0_power': [0.7133274], + 'write1_power': [0.6390777]} elif OPTS.tech_name == "scn4m_subm": golden_data = {'delay_hl': [1.342843], 'delay_lh': [1.342843], From 7d070c2652dc30a636479644bc75437218bc9574 Mon Sep 17 00:00:00 2001 From: Jesse Cirimelli-Low Date: Tue, 20 Nov 2018 11:50:55 -0800 Subject: [PATCH 33/78] Added links to logos --- compiler/datasheet/datasheet.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/compiler/datasheet/datasheet.py b/compiler/datasheet/datasheet.py index 97635c96..e988abad 100644 --- a/compiler/datasheet/datasheet.py +++ b/compiler/datasheet/datasheet.py @@ -48,7 +48,7 @@ class datasheet(): self.html += row self.html +='-->' - self.html += 'VLSIDAOpenRAM' + self.html += 'VLSIDAOpenRAM' From 9ef5190d2e44356aea0d4e5a2db87e8109e7822c Mon Sep 17 00:00:00 2001 From: Jesse Cirimelli-Low Date: Tue, 20 Nov 2018 11:53:27 -0800 Subject: [PATCH 34/78] removed webserver files --- flask/client/client.py | 28 ---------------------------- flask/client/testfile | 1 - flask/server/server.py | 15 --------------- flask/server/templates/upload.html | 11 ----------- 4 files changed, 55 deletions(-) delete mode 100644 flask/client/client.py delete mode 100644 flask/client/testfile delete mode 100644 flask/server/server.py delete mode 100644 flask/server/templates/upload.html diff --git a/flask/client/client.py b/flask/client/client.py deleted file mode 100644 index 9dcd65e6..00000000 --- a/flask/client/client.py +++ /dev/null @@ -1,28 +0,0 @@ -import requests -import os -import sys -# TODO -# copy directory structure -# relative links to not break dataseets? -# look into proper string and packet sanitization -# index gui + results graphs - -base_url = 'http://localhost:5000/' -upload_url = 'upload' - -def send_file(path): - upload_file = open(path,'rb') - data = {'file' : upload_file} - return requests.post(url = base_url + upload_url, files = data) - -def send_mkdir(path): - -def send_directory(path): - for root, directories, filenames in os.walk(path): - for filename in filenames: - upload_file = os.path.join(root,filename) - print(upload_file) - print(send_file(upload_file)) - -send_directory(sys.argv[1]) - diff --git a/flask/client/testfile b/flask/client/testfile deleted file mode 100644 index 9daeafb9..00000000 --- a/flask/client/testfile +++ /dev/null @@ -1 +0,0 @@ -test diff --git a/flask/server/server.py b/flask/server/server.py deleted file mode 100644 index 78c39128..00000000 --- a/flask/server/server.py +++ /dev/null @@ -1,15 +0,0 @@ -import os -from flask import Flask, render_template, request -from werkzeug import secure_filename -app = Flask(__name__) - -@app.route('/uploader', methods = ['GET', 'POST']) -def upload(): - if request.method == 'POST': - f = request.files['file'] - dirname = os.path.dirname(os.path.abspath(__file__)) - f.save(dirname + '/uploads/' + secure_filename(f.filename)) - return 'file uploaded successfully' - -if __name__ == '__main__': - app.run(debug = True) diff --git a/flask/server/templates/upload.html b/flask/server/templates/upload.html deleted file mode 100644 index 761844f6..00000000 --- a/flask/server/templates/upload.html +++ /dev/null @@ -1,11 +0,0 @@ - - - -
- - -
- - - From 29f19ad70f58ffd1c118d548bda63d7660c75ec5 Mon Sep 17 00:00:00 2001 From: Jesse Cirimelli-Low Date: Tue, 20 Nov 2018 12:27:54 -0800 Subject: [PATCH 35/78] replaced absolute links with relative links --- compiler/datasheet/datasheet_gen.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/compiler/datasheet/datasheet_gen.py b/compiler/datasheet/datasheet_gen.py index b48c2510..efb3780c 100644 --- a/compiler/datasheet/datasheet_gen.py +++ b/compiler/datasheet/datasheet_gen.py @@ -470,11 +470,11 @@ def parse_characterizer_csv(sram,f,pages): new_sheet.dlv.append(deliverables_item('.lef','LEF files','{1}.{2}'.format(OUT_DIR,OPTS.output_name,'lef'))) - new_sheet.dlv.append(deliverables_item('.sp','SPICE netlists','{1}.{2}'.format(OUT_DIR,OPTS.output_name,'sp'))) - new_sheet.dlv.append(deliverables_item('.v','Verilog simulation models','{1}.{2}'.format(OUT_DIR,OPTS.output_name,'v'))) - new_sheet.dlv.append(deliverables_item('.html','This datasheet','{1}.{2}'.format(OUT_DIR,OPTS.output_name,'html'))) - new_sheet.dlv.append(deliverables_item('.lib','Synthesis models','{1}'.format(LIB_NAME,LIB_NAME.replace(OUT_DIR,'lib')))) - new_sheet.dlv.append(deliverables_item('.py','OpenRAM configuration file','{1}.{2}'.format(OUT_DIR,OPTS.output_name,'py'))) + new_sheet.dlv.append(deliverables_item('.sp','SPICE netlists','{0}.{1}'.format(OPTS.output_name,'sp'))) + new_sheet.dlv.append(deliverables_item('.v','Verilog simulation models','{0}.{1}'.format(OPTS.output_name,'v'))) + new_sheet.dlv.append(deliverables_item('.html','This datasheet','{0}.{1}'.format(OPTS.output_name,'html'))) + new_sheet.dlv.append(deliverables_item('.lib','Synthesis models','{1}'.format(LIB_NAME,LIB_NAME.replace(OUT_DIR,'')))) + new_sheet.dlv.append(deliverables_item('.py','OpenRAM configuration file','{0}.{1}'.format(OPTS.output_name,'py'))) From 5f954689a5b0ea1f52fd79fbc37f7b524e7b87b2 Mon Sep 17 00:00:00 2001 From: Hunter Nichols Date: Fri, 23 Nov 2018 13:19:55 -0800 Subject: [PATCH 36/78] In delay.py, altered dummy address based on column mux. Added some hacks to make min_period work for srams with columns muxes. --- compiler/characterizer/charutils.py | 2 +- compiler/characterizer/delay.py | 46 +++++++++++++++++++---------- compiler/sram.py | 1 + 3 files changed, 32 insertions(+), 17 deletions(-) diff --git a/compiler/characterizer/charutils.py b/compiler/characterizer/charutils.py index bc4beb88..a2140e51 100644 --- a/compiler/characterizer/charutils.py +++ b/compiler/characterizer/charutils.py @@ -5,7 +5,7 @@ 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) / max(value1,value2) <= error_tolerance) + return (abs(value1 - value2) / abs(max(value1,value2)) <= error_tolerance) def parse_spice_list(filename, key): diff --git a/compiler/characterizer/delay.py b/compiler/characterizer/delay.py index f7fcfbd4..3f000374 100644 --- a/compiler/characterizer/delay.py +++ b/compiler/characterizer/delay.py @@ -499,7 +499,7 @@ class delay(simulation): 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) half_period = self.period/2 #high-to-low delays start at neg. clk edge, so they need to be less than half_period - if delay_hl>half_period or delay_lh>self.period or slew_hl>half_period or slew_lh>self.period: + if abs(delay_hl)>half_period or abs(delay_lh)>self.period or abs(slew_hl)>half_period or abs(slew_lh)>self.period: debug.info(2,"UNsuccessful simulation (in ns):\n\t\t{0}\n\t\t{1}\n\t\t{2}".format(period_load_slew_str, delays_str, slews_str)) @@ -584,6 +584,13 @@ class delay(simulation): #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: for dname in self.delay_meas_names: #check that the delays and slews do not degrade with tested period. + + #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. + if self.sram.col_addr_size>0 and "slew" in dname: + continue + if not relative_compare(results[port][dname],feasible_delays[port][dname],error_tolerance=0.05): debug.info(2,"Delay too big {0} vs {1}".format(results[port][dname],feasible_delays[port][dname])) return False @@ -703,20 +710,27 @@ class delay(simulation): measure_data[port][mname].append(value) return measure_data - - def gen_test_cycles_one_port(self, read_port, write_port): - """Intended but not implemented: Returns a list of key time-points [ns] of the waveform (each rising edge) - of the cycles to do a timing evaluation of a single port. Current: Values overwritten for multiple calls""" - - # Create the inverse address for a scratch address + 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. + column_addr = self.probe_address[:self.sram.col_addr_size] #do not invert this part inverse_address = "" - for c in self.probe_address: + for c in self.probe_address[self.sram.col_addr_size:]: #invert everything else if c=="0": inverse_address += "1" elif c=="1": inverse_address += "0" else: debug.error("Non-binary address string",1) + return inverse_address+column_addr + + def gen_test_cycles_one_port(self, read_port, write_port): + """Sets a list of key time-points [ns] of the waveform (each rising edge) + of the cycles to do a timing evaluation of a single port """ + + # Create the inverse address for a scratch address + inverse_address = self.calculate_inverse_address() # For now, ignore data patterns and write ones or zeros data_ones = "1"*self.word_size @@ -726,36 +740,36 @@ class delay(simulation): self.add_noop_all_ports("Idle cycle (no positive clock edge)", inverse_address, data_zeros) - self.add_write("W data 1 address 0..00", + self.add_write("W data 1 address {}".format(inverse_address), inverse_address,data_ones,write_port) - self.add_write("W data 0 address 11..11 to write value", + self.add_write("W data 0 address {} to write value".format(self.probe_address), self.probe_address,data_zeros,write_port) self.measure_cycles[write_port]["write0"] = len(self.cycle_times)-1 # This also ensures we will have a H->L transition on the next read - self.add_read("R data 1 address 00..00 to set DOUT caps", + self.add_read("R data 1 address {} to set DOUT caps".format(inverse_address), inverse_address,data_zeros,read_port) - self.add_read("R data 0 address 11..11 to check W0 worked", + self.add_read("R data 0 address {} to check W0 worked".format(self.probe_address), self.probe_address,data_zeros,read_port) self.measure_cycles[read_port]["read0"] = len(self.cycle_times)-1 self.add_noop_all_ports("Idle cycle (if read takes >1 cycle)", inverse_address,data_zeros) - self.add_write("W data 1 address 11..11 to write value", + self.add_write("W data 1 address {} to write value".format(self.probe_address), self.probe_address,data_ones,write_port) self.measure_cycles[write_port]["write1"] = len(self.cycle_times)-1 - self.add_write("W data 0 address 00..00 to clear DIN caps", + self.add_write("W data 0 address {} to clear DIN caps".format(inverse_address), inverse_address,data_zeros,write_port) # This also ensures we will have a L->H transition on the next read - self.add_read("R data 0 address 00..00 to clear DOUT caps", + self.add_read("R data 0 address {} to clear DOUT caps".format(inverse_address), inverse_address,data_zeros,read_port) - self.add_read("R data 1 address 11..11 to check W1 worked", + self.add_read("R data 1 address {} to check W1 worked".format(self.probe_address), self.probe_address,data_zeros,read_port) self.measure_cycles[read_port]["read1"] = len(self.cycle_times)-1 diff --git a/compiler/sram.py b/compiler/sram.py index 1b6b104f..7ee09ecc 100644 --- a/compiler/sram.py +++ b/compiler/sram.py @@ -14,6 +14,7 @@ class sram(): """ def __init__(self, sram_config, name): + #sram_config.words_per_row = 1 #Disables column mux generation sram_config.compute_sizes() sram_config.set_local_config(self) From b06aa84824747296d0dfbf7fd59ba1489df6c6bf Mon Sep 17 00:00:00 2001 From: Hunter Nichols Date: Fri, 23 Nov 2018 18:55:15 -0800 Subject: [PATCH 37/78] Functional tests now find a feasible period instead of using a heuristic. Bug found, trimming pbitcell netlists causes bit flips. --- compiler/characterizer/functional.py | 29 ++++++++++++++++++++-------- 1 file changed, 21 insertions(+), 8 deletions(-) diff --git a/compiler/characterizer/functional.py b/compiler/characterizer/functional.py index 0c60fc23..7e0816be 100644 --- a/compiler/characterizer/functional.py +++ b/compiler/characterizer/functional.py @@ -10,7 +10,7 @@ import utils from globals import OPTS from .simulation import simulation - +from .delay import delay class functional(simulation): """ @@ -27,6 +27,7 @@ class functional(simulation): self.set_corner(corner) self.set_spice_constants() + self.set_feasible_period(sram, spfile, corner) self.set_stimulus_variables() self.create_signal_names() @@ -36,13 +37,25 @@ class functional(simulation): self.write_check = [] self.read_check = [] - def set_spice_constants(self): - """Spice constants for functional test""" - simulation.set_spice_constants(self) - #Heuristic increase for functional period. Base feasible period typically does not pass the functional test - #for column mux or srams of this size. Increase the feasible period by 20% for this case. - if self.sram.words_per_row >= 4 or self.sram.num_cols*self.sram.num_rows >= 1024: - self.period = self.period*1.2 + def set_feasible_period(self, sram, spfile, corner): + """Creates a delay simulation to determine a feasible period for the functional tests to run. + Only determines the feasible period for a single port and assumes that for all ports for performance. + """ + OPTS.trim_netlist = False #This has to be false or the write port will flip a bit in the trimmed netlist. + debug.info(1, "Determining feasible period using untrimmed netlist for functional test.") + delay_sim = delay(sram, spfile, corner) + delay_sim.set_load_slew(self.load,self.slew) + delay_sim.set_probe(probe_address="1"*self.addr_size, probe_data=(self.sram.word_size-1)) + delay_sim.find_feasible_period_one_port(self.read_ports[0]) #Finds feasible and sets internal period + self.period = delay_sim.period #copy internal period of delay object here + + # def set_spice_constants(self): + # """Spice constants for functional test""" + # simulation.set_spice_constants(self) + # #Heuristic increase for functional period. Base feasible period typically does not pass the functional test + # #for column mux or srams of this size. Increase the feasible period by 20% for this case. + # if self.sram.words_per_row >= 4 or self.sram.num_cols*self.sram.num_rows >= 1024: + # self.period = self.period*1.2 def run(self): # Generate a random sequence of reads and writes From 0920321a2e661c02a7acfec3b55aca296555dfbd Mon Sep 17 00:00:00 2001 From: Jesse Cirimelli-Low Date: Tue, 27 Nov 2018 19:49:05 -0800 Subject: [PATCH 38/78] start of static html generation code --- compiler/datasheet/server_scripts/__init__.py | 29 + .../datasheet/server_scripts/datasheet_gen.py | 512 + .../datasheet/server_scripts/deliverable.py | 7 + compiler/datasheet/server_scripts/filelist.py | 18 + .../files/temp/sram_2_16_scn4m_subm.gds | Bin 0 -> 419780 bytes .../files/temp/sram_2_16_scn4m_subm.html | 116 + .../files/temp/sram_2_16_scn4m_subm.lef | 9314 +++++++++++++++++ .../files/temp/sram_2_16_scn4m_subm.py | 18 + .../files/temp/sram_2_16_scn4m_subm.sp | 767 ++ .../files/temp/sram_2_16_scn4m_subm.v | 47 + .../temp/sram_2_16_scn4m_subm_TT_3p3V_25C.lib | 321 + .../temp/sram_2_16_scn4m_subm_TT_5V_25C.lib | 321 + .../temp/sram_2_16_scn4m_subm_TT_5p0V_25C.lib | 625 ++ .../server_scripts/files/testfile.asdf | 0 .../server_scripts/templates/index.html | 5 + 15 files changed, 12100 insertions(+) create mode 100644 compiler/datasheet/server_scripts/__init__.py create mode 100644 compiler/datasheet/server_scripts/datasheet_gen.py create mode 100644 compiler/datasheet/server_scripts/deliverable.py create mode 100644 compiler/datasheet/server_scripts/filelist.py create mode 100644 compiler/datasheet/server_scripts/files/temp/sram_2_16_scn4m_subm.gds create mode 100644 compiler/datasheet/server_scripts/files/temp/sram_2_16_scn4m_subm.html create mode 100644 compiler/datasheet/server_scripts/files/temp/sram_2_16_scn4m_subm.lef create mode 100644 compiler/datasheet/server_scripts/files/temp/sram_2_16_scn4m_subm.py create mode 100644 compiler/datasheet/server_scripts/files/temp/sram_2_16_scn4m_subm.sp create mode 100644 compiler/datasheet/server_scripts/files/temp/sram_2_16_scn4m_subm.v create mode 100644 compiler/datasheet/server_scripts/files/temp/sram_2_16_scn4m_subm_TT_3p3V_25C.lib create mode 100644 compiler/datasheet/server_scripts/files/temp/sram_2_16_scn4m_subm_TT_5V_25C.lib create mode 100644 compiler/datasheet/server_scripts/files/temp/sram_2_16_scn4m_subm_TT_5p0V_25C.lib create mode 100644 compiler/datasheet/server_scripts/files/testfile.asdf create mode 100644 compiler/datasheet/server_scripts/templates/index.html diff --git a/compiler/datasheet/server_scripts/__init__.py b/compiler/datasheet/server_scripts/__init__.py new file mode 100644 index 00000000..f702e604 --- /dev/null +++ b/compiler/datasheet/server_scripts/__init__.py @@ -0,0 +1,29 @@ +import os +import jinja2 +from flask import Flask, render_template +from filelist import * + + +filedir = './files' +file_data = './filelist.info' + +def render_without_request(template_name, **template_vars): + env = jinja2.Environment( + loader = jinja2.PackageLoader('server_scripts','templates') + ) + template = env.get_template(template_name) + return template.render(**template_vars) + +app = Flask('server_scripts') + +if __name__ == '__main__': + + files = filelist() + + files.update_filelist(filedir,file_data) + + f = open('./output/index.html','w') + with app.app_context(): + f.write(render_template('index.html', files=files.list)) + + diff --git a/compiler/datasheet/server_scripts/datasheet_gen.py b/compiler/datasheet/server_scripts/datasheet_gen.py new file mode 100644 index 00000000..efb3780c --- /dev/null +++ b/compiler/datasheet/server_scripts/datasheet_gen.py @@ -0,0 +1,512 @@ +#!/usr/bin/env python3 +""" +This is a script to load data from the characterization and layout processes into +a web friendly html datasheet. This script requres the python-flask and flask-table +packages to be installed. +""" +#TODO: +#locate all port elements in .lib +#Locate all timing elements in .lib +#Diagram generation +#Improve css + +import debug +from globals import OPTS + +if OPTS.datasheet_gen: + import flask_table + import os, math + import optparse + import csv + from deliverables import * + from operating_conditions import * + from timing_and_current_data import * + from characterization_corners import * + from datasheet import * + from in_out import * +else: + debug.warning("Python library flask_table not found. Skipping html datasheet generation. This can be installed with pip install flask-table.") + #make sure appropriate python libraries are installed + + +def process_name(corner): + """ + Expands the names of the characterization corner types into something human friendly + """ + if corner == "TT": + return "Typical - Typical" + if corner == "SS": + return "Slow - Slow" + if corner == "FF": + return "Fast - Fast" + else: + return "custom" + +def parse_characterizer_csv(sram,f,pages): + """ + Parses output data of the Liberty file generator in order to construct the timing and + current table + """ + with open(f) as csv_file: + csv_reader = csv.reader(csv_file, delimiter=',') + line_count = 0 + for row in csv_reader: + + found = 0 + col = 0 + + #defines layout of csv file + NAME = row[col] + col += 1 + + NUM_WORDS = row[col] + col += 1 + + NUM_BANKS = row[col] + col += 1 + + NUM_RW_PORTS = row[col] + col += 1 + + NUM_W_PORTS = row[col] + col += 1 + + NUM_R_PORTS = row[col] + col += 1 + + TECH_NAME = row[col] + col += 1 + + TEMP = row[col] + col += 1 + + VOLT = row[col] + col += 1 + + PROC = row[col] + col += 1 + + MIN_PERIOD = row[col] + col += 1 + + OUT_DIR = row[col] + col += 1 + + LIB_NAME = row[col] + col += 1 + + WORD_SIZE = row[col] + col += 1 + + FF_SETUP_LH_MIN = "1" + FF_SETUP_LH_MAX = "2" + + FF_SETUP_HL_MIN = "3" + FF_SETUP_HL_MAX = "4" + + FF_HOLD_LH_MIN = "5" + FF_HOLD_LH_MAX = "6" + + FF_HOLD_HL_MIN = "7" + FF_HOLD_HL_MAX = "8" + + + for sheet in pages: + + + if sheet.name == NAME: + + found = 1 + #if the .lib information is for an existing datasheet compare timing data + + for item in sheet.operating: + #check if the new corner dataa is worse than the previous worse corner data + + if item.parameter == 'Operating Temperature': + if float(TEMP) > float(item.max): + item.typ = item.max + item.max = TEMP + if float(TEMP) < float(item.min): + item.typ = item.min + item.min = TEMP + + if item.parameter == 'Power supply (VDD) range': + if float(VOLT) > float(item.max): + item.typ = item.max + item.max = VOLT + if float(VOLT) < float(item.min): + item.typ = item.min + item.min = VOLT + + if item.parameter == 'Operating Frequncy (F)': + try: + if float(math.floor(1000/float(MIN_PERIOD)) < float(item.max)): + item.max = str(math.floor(1000/float(MIN_PERIOD))) + except Exception: + #pass if MIN_PERIOD is zero (not supported by analyitcal model) + pass + + + + while(True): + if(row[col].startswith('DIN')): + start = col + for item in sheet.timing: + if item.parameter.startswith(row[col]): + + if item.parameter.endswith('setup rising'): + if float(row[col+1]) < float(item.min): + item.min = row[col+1] + if float(row[col+2]) > float(item.max): + item.max = row[col+2] + + col += 2 + + elif item.parameter.endswith('setup falling'): + if float(row[col+1]) < float(item.min): + item.min = row[col+1] + if float(row[col+2]) > float(item.max): + item.max = row[col+2] + + col += 2 + + elif item.parameter.endswith('hold rising'): + if float(row[col+1]) < float(item.min): + item.min = row[col+1] + if float(row[col+2]) > float(item.max): + item.max = row[col+2] + + col += 2 + + elif item.parameter.endswith('hold falling'): + if float(row[col+1]) < float(item.min): + item.min = row[col+1] + if float(row[col+2]) > float(item.max): + item.max = row[col+2] + + col += 2 + + col += 1 + + elif(row[col].startswith('DOUT')): + start = col + for item in sheet.timing: + if item.parameter.startswith(row[col]): + + if item.parameter.endswith('cell rise'): + if float(row[col+1]) < float(item.min): + item.min = row[col+1] + if float(row[col+2]) > float(item.max): + item.max = row[col+2] + + col += 2 + + elif item.parameter.endswith('cell fall'): + if float(row[col+1]) < float(item.min): + item.min = row[col+1] + if float(row[col+2]) > float(item.max): + item.max = row[col+2] + + col += 2 + + elif item.parameter.endswith('rise transition'): + if float(row[col+1]) < float(item.min): + item.min = row[col+1] + if float(row[col+2]) > float(item.max): + item.max = row[col+2] + + col += 2 + + elif item.parameter.endswith('fall transition'): + if float(row[col+1]) < float(item.min): + item.min = row[col+1] + if float(row[col+2]) > float(item.max): + item.max = row[col+2] + + col += 2 + + col += 1 + + elif(row[col].startswith('CSb')): + start = col + for item in sheet.timing: + if item.parameter.startswith(row[col]): + + if item.parameter.endswith('setup rising'): + if float(row[col+1]) < float(item.min): + item.min = row[col+1] + if float(row[col+2]) > float(item.max): + item.max = row[col+2] + + col += 2 + + elif item.parameter.endswith('setup falling'): + if float(row[col+1]) < float(item.min): + item.min = row[col+1] + if float(row[col+2]) > float(item.max): + item.max = row[col+2] + + col += 2 + + elif item.parameter.endswith('hold rising'): + if float(row[col+1]) < float(item.min): + item.min = row[col+1] + if float(row[col+2]) > float(item.max): + item.max = row[col+2] + + col += 2 + + elif item.parameter.endswith('hold falling'): + if float(row[col+1]) < float(item.min): + item.min = row[col+1] + if float(row[col+2]) > float(item.max): + item.max = row[col+2] + + col += 2 + + col += 1 + + + elif(row[col].startswith('WEb')): + start = col + for item in sheet.timing: + if item.parameter.startswith(row[col]): + + if item.parameter.endswith('setup rising'): + if float(row[col+1]) < float(item.min): + item.min = row[col+1] + if float(row[col+2]) > float(item.max): + item.max = row[col+2] + + col += 2 + + elif item.parameter.endswith('setup falling'): + if float(row[col+1]) < float(item.min): + item.min = row[col+1] + if float(row[col+2]) > float(item.max): + item.max = row[col+2] + + col += 2 + + elif item.parameter.endswith('hold rising'): + if float(row[col+1]) < float(item.min): + item.min = row[col+1] + if float(row[col+2]) > float(item.max): + item.max = row[col+2] + + col += 2 + + elif item.parameter.endswith('hold falling'): + if float(row[col+1]) < float(item.min): + item.min = row[col+1] + if float(row[col+2]) > float(item.max): + item.max = row[col+2] + + col += 2 + + col += 1 + + + elif(row[col].startswith('ADDR')): + start = col + for item in sheet.timing: + if item.parameter.startswith(row[col]): + + if item.parameter.endswith('setup rising'): + if float(row[col+1]) < float(item.min): + item.min = row[col+1] + if float(row[col+2]) > float(item.max): + item.max = row[col+2] + + col += 2 + + elif item.parameter.endswith('setup falling'): + if float(row[col+1]) < float(item.min): + item.min = row[col+1] + if float(row[col+2]) > float(item.max): + item.max = row[col+2] + + col += 2 + + elif item.parameter.endswith('hold rising'): + if float(row[col+1]) < float(item.min): + item.min = row[col+1] + if float(row[col+2]) > float(item.max): + item.max = row[col+2] + + col += 2 + + elif item.parameter.endswith('hold falling'): + if float(row[col+1]) < float(item.min): + item.min = row[col+1] + if float(row[col+2]) > float(item.max): + item.max = row[col+2] + + col += 2 + + col += 1 + else: + break + + + #regardless of if there is already a corner for the current sram, append the new corner to the datasheet + new_sheet.corners.append(characterization_corners_item(PROC,process_name(PROC),VOLT,TEMP,LIB_NAME.replace(OUT_DIR,'').replace(NAME,''))) + new_sheet.dlv.append(deliverables_item('.lib','Synthesis models','{1}'.format(LIB_NAME,LIB_NAME.replace(OUT_DIR,'')))) + + if found == 0: + + #if this is the first corner for this sram, run first time configuration and set up tables + new_sheet = datasheet(NAME) + pages.append(new_sheet) + + new_sheet.corners.append(characterization_corners_item(PROC,process_name(PROC),VOLT,TEMP,LIB_NAME.replace(OUT_DIR,'').replace(NAME,''))) + + new_sheet.operating.append(operating_conditions_item('Power supply (VDD) range',VOLT,VOLT,VOLT,'Volts')) + new_sheet.operating.append(operating_conditions_item('Operating Temperature',TEMP,TEMP,TEMP,'Celsius')) + try: + new_sheet.operating.append(operating_conditions_item('Operating Frequency (F)*','','',str(math.floor(1000/float(MIN_PERIOD))),'MHz')) + except Exception: + new_sheet.operating.append(operating_conditions_item('Operating Frequency (F)*','','',"unknown",'MHz')) #analytical model fails to provide MIN_PERIOD + + #place holder timing and current data + + new_sheet.timing.append(timing_and_current_data_item('Cycle time','2','3','4')) + new_sheet.timing.append(timing_and_current_data_item('Access time','2','3','4')) + + new_sheet.timing.append(timing_and_current_data_item('Positive clk setup','2','3','4')) + new_sheet.timing.append(timing_and_current_data_item('Positive clk hold','2','3','4')) + + while(True): + if(row[col].startswith('DIN')): + start = col + new_sheet.timing.append(timing_and_current_data_item('{0} setup rising'.format(row[start]),row[col+1],row[col+2],'ns')) + col += 2 + + new_sheet.timing.append(timing_and_current_data_item('{0} setup falling'.format(row[start]),row[col+1],row[col+2],'ns')) + col += 2 + + new_sheet.timing.append(timing_and_current_data_item('{0} hold rising'.format(row[start]),row[col+1],row[col+2],'ns')) + col += 2 + + new_sheet.timing.append(timing_and_current_data_item('{0} hold falling'.format(row[start]),row[col+1],row[col+2],'ns')) + col += 2 + + col +=1 + + elif(row[col].startswith('DOUT')): + start = col + new_sheet.timing.append(timing_and_current_data_item('{0} cell rise'.format(row[start]),row[col+1],row[col+2],'ns')) + col += 2 + + new_sheet.timing.append(timing_and_current_data_item('{0} cell fall'.format(row[start]),row[col+1],row[col+2],'ns')) + col += 2 + + new_sheet.timing.append(timing_and_current_data_item('{0} rise transition'.format(row[start]),row[col+1],row[col+2],'ns')) + col += 2 + + new_sheet.timing.append(timing_and_current_data_item('{0} fall transition'.format(row[start]),row[col+1],row[col+2],'ns')) + col += 2 + + col +=1 + + elif(row[col].startswith('CSb')): + start = col + new_sheet.timing.append(timing_and_current_data_item('{0} setup rising'.format(row[start]),row[col+1],row[col+2],'ns')) + col += 2 + + new_sheet.timing.append(timing_and_current_data_item('{0} setup falling'.format(row[start]),row[col+1],row[col+2],'ns')) + col += 2 + + new_sheet.timing.append(timing_and_current_data_item('{0} hold rising'.format(row[start]),row[col+1],row[col+2],'ns')) + col += 2 + + new_sheet.timing.append(timing_and_current_data_item('{0} hold falling'.format(row[start]),row[col+1],row[col+2],'ns')) + col += 2 + + col +=1 + + elif(row[col].startswith('WEb')): + start = col + new_sheet.timing.append(timing_and_current_data_item('{0} setup rising'.format(row[start]),row[col+1],row[col+2],'ns')) + col += 2 + + new_sheet.timing.append(timing_and_current_data_item('{0} setup falling'.format(row[start]),row[col+1],row[col+2],'ns')) + col += 2 + + new_sheet.timing.append(timing_and_current_data_item('{0} hold rising'.format(row[start]),row[col+1],row[col+2],'ns')) + col += 2 + + new_sheet.timing.append(timing_and_current_data_item('{0} hold falling'.format(row[start]),row[col+1],row[col+2],'ns')) + col += 2 + + col +=1 + + elif(row[col].startswith('ADDR')): + start = col + new_sheet.timing.append(timing_and_current_data_item('{0} setup rising'.format(row[start]),row[col+1],row[col+2],'ns')) + col += 2 + + new_sheet.timing.append(timing_and_current_data_item('{0} setup falling'.format(row[start]),row[col+1],row[col+2],'ns')) + col += 2 + + new_sheet.timing.append(timing_and_current_data_item('{0} hold rising'.format(row[start]),row[col+1],row[col+2],'ns')) + col += 2 + + new_sheet.timing.append(timing_and_current_data_item('{0} hold falling'.format(row[start]),row[col+1],row[col+2],'ns')) + col += 2 + + col +=1 + else: + break + + + + new_sheet.timing.append(timing_and_current_data_item('AC current','2','3','4')) + new_sheet.timing.append(timing_and_current_data_item('Standby current','2','3','4')) + + if not OPTS.netlist_only: + #physical layout files should not be generated in netlist only mode + new_sheet.dlv.append(deliverables_item('.gds','GDSII layout views','{1}.{2}'.format(OUT_DIR,OPTS.output_name,'gds'))) + new_sheet.dlv.append(deliverables_item('.lef','LEF files','{1}.{2}'.format(OUT_DIR,OPTS.output_name,'lef'))) + + + new_sheet.dlv.append(deliverables_item('.sp','SPICE netlists','{0}.{1}'.format(OPTS.output_name,'sp'))) + new_sheet.dlv.append(deliverables_item('.v','Verilog simulation models','{0}.{1}'.format(OPTS.output_name,'v'))) + new_sheet.dlv.append(deliverables_item('.html','This datasheet','{0}.{1}'.format(OPTS.output_name,'html'))) + new_sheet.dlv.append(deliverables_item('.lib','Synthesis models','{1}'.format(LIB_NAME,LIB_NAME.replace(OUT_DIR,'')))) + new_sheet.dlv.append(deliverables_item('.py','OpenRAM configuration file','{0}.{1}'.format(OPTS.output_name,'py'))) + + + + #debug table for multiport information + new_sheet.io.append(in_out_item('WORD_SIZE',WORD_SIZE)) + new_sheet.io.append(in_out_item('NUM_WORDS',NUM_WORDS)) + new_sheet.io.append(in_out_item('NUM_BANKS',NUM_BANKS)) + new_sheet.io.append(in_out_item('NUM_RW_PORTS',NUM_RW_PORTS)) + new_sheet.io.append(in_out_item('NUM_R_PORTS',NUM_R_PORTS)) + new_sheet.io.append(in_out_item('NUM_W_PORTS',NUM_W_PORTS)) + new_sheet.io.append(in_out_item('Area',sram.width * sram.height)) + + + + + + +class datasheet_gen(): + def datasheet_write(sram,name): + + if OPTS.datasheet_gen: + in_dir = OPTS.openram_temp + + if not (os.path.isdir(in_dir)): + os.mkdir(in_dir) + + + datasheets = [] + parse_characterizer_csv(sram, in_dir + "/datasheet.info", datasheets) + + + for sheets in datasheets: + with open(name, 'w+') as f: + sheets.generate_html() + f.write(sheets.html) diff --git a/compiler/datasheet/server_scripts/deliverable.py b/compiler/datasheet/server_scripts/deliverable.py new file mode 100644 index 00000000..801415c9 --- /dev/null +++ b/compiler/datasheet/server_scripts/deliverable.py @@ -0,0 +1,7 @@ +class deliverable: + def __init__(self, name, file_type, path, size): + self.name = name + self.file_type = file_type + self.path = path + self.size = size + diff --git a/compiler/datasheet/server_scripts/filelist.py b/compiler/datasheet/server_scripts/filelist.py new file mode 100644 index 00000000..2196a419 --- /dev/null +++ b/compiler/datasheet/server_scripts/filelist.py @@ -0,0 +1,18 @@ +import os +from deliverable import * +class filelist: + + + def __init__(self): + self.list = [] + + def update_filelist(self,path,outdir): + out_file = open(outdir,'w') + for root, dirs, files in os.walk(path): + for file in files: + self.list.append(root + '/' + file) + out_file.write('{}/{}\n'.format(root,file)) + print('{}/{}'.format(root,file)) + + + diff --git a/compiler/datasheet/server_scripts/files/temp/sram_2_16_scn4m_subm.gds b/compiler/datasheet/server_scripts/files/temp/sram_2_16_scn4m_subm.gds new file mode 100644 index 0000000000000000000000000000000000000000..ff2e666ff325f1d07f91fee68c5bfd58be9e8389 GIT binary patch literal 419780 zcmcG%4cJ{(dFH>)IWHe#R8(rw#+ug1;54;-X{lxuY#eE&iVm#|M)@#~Ux=twutu9| zs>slmD&t^{V+v8RrHU3UwrS01q}WoWEmoA&f=!iCbm+)`iZqn}{d?BA&v_Hr>-Aah zHMuUXo9o&8ckX9>J$s#f_Bn6azl_U%W#wpmz}L$I%R|aR<)_PD|6d+F-hbUQ{^Rk# zc;d-VSoidD$Yj5#9{-M?e%7@gy5ncoUGr00-+SuGW#xW*5sP1`9J>GhuY2touR86h z(~f-7X|H?n*~h%R)!(1PH zZjD=YeBq&G#vi?y|J`#+dC&=EeED@V9k1I}#)?}xzL;O^Kl-6l%H)|hmC>VanCs6U zQ6g^D@x}aN|Is72m9q1eGWwA{GoAe0LLqMD_+oxv|MJ&nD>uiAsZRq;XppV(4;fAY?mPX29O z87XdE%75X+>&ob;q}Uqm<|G zE|Y~T=6dSdGA3@-@ge{5=XRFzpARnM>sHS7Ow~@}Rvll=-=F{ZpRN!8Q2SaN{*%eZ zQVu(zO!m8RuJVhxRmTVYr@r@TKXLr0#|QaaH;{5ko|Ic5q-Nec=dg;!&9e0k=^GCpTZDbLg<-@{L_(vPo;;J6glm zi+7iZTNNMT$$6~Tr>|#(`gjSGSb% zww-hRw)&sARmX?;$n(q7{HUzqE5^(Aqujt}wl)9A0)M*q$9rghPOBdd-N^0ZUyBgW6lx*=|Dt)I)*m$CY1 z^x+M2rQe8K8~umR@j;$-a=iZ2xijUuLENh2L;U#Gl_mOG<3Cf) z+lX6-=WneuTz{UT{pT4d{+^YCc{#@s{R&f2B>1VdZ^>1v| z@gaV^Q|)Kn>iRQNt=ouO8|ydPsr5nqit7lM8yoG1}hAuUK z={M%Dm40JhTO0is^M|_6{IOE^nOD|E{l_Q9TK+R--V?XB=D*q*UTXhL-=xz25+v3?`xd)C(ZGu6q1wnba4W5oyipK)gV z7=J6{M%>yOKjj(wM(PLqNR+xw+}fz$k^ebcYW`NPn~a53@mBuPZ>(SX52fFf|4bYG z7xM&;`D2A={#cjbqwa{GsrH@l>_0XTg0u6 z>lZ#TZt|Zg<3`-t7{54=x(9Ei?!j9d^^b9i>xah88rKcQtm)k^NYpzPhy>L-D2HXnK$BN{-CY-qdcSTFz=~< z=)1%dx3=n!atmL^4}X;FCUNUh{QzA@84K&-d*qCSQQ`QW1oyK@87NX zUbeoBtquRkU-dompXy{`UF2_V)&FwVp2B;8a_+)hx$i~Xs^dfXtIouGb!)h_$5zD$d9{uHiCRC^=r_f!t^SK~ z!k6*0;>-A16(91C_s_4W^Jl^O#&z}mvsLjSKHlfPbeg~QylpX-W2@qWJoovYxv}2= zv+7<%-2byGKE%g+=4Y*}_b;q3(D;cNTNNMTpeS5A#PPJLp*tM|C9MM(_6R2YmKZrKEy|!@1Evw z)xI_2R>g<-nEx8zSpQbWo%=V|#`woL(Qg`S_CKNY8{=nf^&jVvH@ua+iCY`_M?0A} z+&{50Zx}yoWB#aSMBUN-M{Crds3odDK0ergm&u2I`>@upm3|{`ZS-H4*Q<5tC6`A@XJApe=(T-!gfw)P)t z=j0tz-m1@?X#d2j_>lkjTN}${fA!x#Ypq#-c%ekxs`wzU`)`vi;E+wv{@cW= zkN=vL)!(Xp2lxN@Oe0kBLH^_Ne*eb8y}p@#P#kfqjt}zW zN&D$PEA1w3ZMFXmd+PXIxM8juw|L)aZH*u8WZdX~E8|Ao+8RIQxiHxt`Oox_)sg># zRmTV0Pd~9&r~j<%<%wGrALNy1_$vRI;!E7x^4EFeC+w;3Rjg0j5d7Gx_@KY?oLsX# z@}KGFroNulYHGIjeKG&6IzGtj*yua! zBmbG+xglP2WYzH&A7jP!gRw-JcjRPUYW_WUOYJ}FnG3c5tcnl%vrf6!#r(H&FO0ZV z@j;$Cg)eo>iZ5|%!#~#VvFq#lwVtrEu3xL-gZ_*&{m=MY>38DRR{v}KW8Q1rXUe=M zZf(tf`ibif{b%L6L)@zPVE&9V9OG_s%bKeC2nJPZ$&pe}UGXJd9P2$!i>L>4eSZg!Y z`yTvx{}Za?gZ}iLu8-0GR^|e6tKx&a@{D<_{AbF%C2noaU!Awty=uKqj5~40e|mh- zU-LZLt@%Gw+D+WLMEhgks`)q5Lsm!oWB?Nh@2>05s^dfXNBwx~ zw0>AMmJzoqKE%g7f83T@YprY4evNySap1eXP(CUCXL@re|RCrFWx^*j}P+X$@@q0w|-Fn zPu!~b5Fg|8u<8EI`q=6I&8qkiAAQEYhrY71@1ZZPt^E)4kGdm%rqmze)+Opsc(LyA zM9GD9XH|SC|7iae)An0Gy1UL_tKvg^_%KKDwQAl++^YB>Pn~*#c&;DTr->(SReX@A zowu&6{#ND!ajW7(e6(NJr`W$+^(<4wt*z^q=2`4JGO}Mf2cWYqyF(Z$&B;stkM_~x3+lY&%O=+nNqiiTO0egI1gU!4<6ONFXGk~ zuRO=pP5iC+61O($XPgIzuN7Z-YlCO)N3OT6p6iwCq9zop`eJDOf`9L>s1?O(&Z_tz z&-$XTwbz*`9C2&QpY!l#-CE6A8~)Kx)NT6TO5LXatd05|=e>1(<*lmQ5w|Kn)c$Dm zMceE6S+(vXZdJU=+t*6o>a)lnUCRHlk2%2jS@9)qRlMnM&dOZE-`e8wId*;Zx1PPO`dbxm`g8w_{H<{KTO0Sk z;yn9WPuN*`Ys;VfkKbPV-TH#fHGiw(&HT+-?Q3oEPnG{UTS|F`+HcjquMoE?KInh^ z*2+Dr%oUEfwZ%VkW96Q$d51p=N8Gv(|CmMJe=JYacfVhAT`50%*IZwJeu=nM#|QIQ zJNc}O_RsX5oz3rm?dw1Km)pXBrh6_8|B+S42mSTg-sHTM_4ya8?tjN~F;>N!{I6`S zymfP_yjAfgziDITt#21dURK4Myz{m?Z)+p}c+Ny?AU?OYYAr_Gs`!w9oOjXI%3I%E zDsNT1$?N+?dwu^+H85V++WP*{iuJKpd-E^HY>)THdwqXx&9)M8>*Mxbe|ycpC+d6Z zhiU#l`O>-mgyuhStBw!0|I$72+}>#G!d$f%9uc=Tu0NwKn=1E#TjmN!+}h$VTVFYz zKhSyc90DA1Yl~lI{yg&%_Z<$g%3?~G?*CRW9V`Y(8W&pkeWw{AbK@>a#0 zJkOotZ~dhDg1oG)=TDcJe>^91>e~AKJ?k0k>a%!O#fS0_{^ZjuZ++p8%3Bq0@+Ya* ztX0ji`g?;`#hbkIwmNU?aQ^i7zD{OdZuNb8REZ++Kv{aY0u@UQC}j`eSaWBprOJnI~e^>2kE zZf)_bf4I*4W1pk?8v7qBb(j5*b)WjX`1$SF=fJW5vBDj{weo0-f9A%@vG0LL;fY)K z;rFWl?0=~L?0>A(ed5-o>c478^q*C=DC)me@#gr$G5%IK#^2iFFI!(Z#vdMqBW`W+ zj6WRXZ-panZSe8_nX$fYbsck*z3{Co=c?mF?T_;qV>l~w0p6;3lV_~qt;_*9RW{~w{YTJ^b6#I1@C`Nw%* zTUB}MH#b$@s(6$C$32y|etY2u{{HZC^JmRYzPTmV>P-3Ek+@aIhw_i}zP+mQ);m>u z;H`=``8)Ph-g?(U<*kZ0`DNrEb?W%-wSHOkzCGer#fSW(&cacDt#H&|Ym2{ZedVaT z@F*N{Ym2AO!fjQbS>cFV8$9>MV&8q?hPkruCT?x*zd4V6H@ua7H*srg|IK;qyWy>$ zR38wxw)Wqgr~HDqI&W($|65na`yT3le18hn`yT55O!s;Jv-tWy{<^O7H>uWsL)U-n z->ViAw<7lPy}^$*#OrXp#m934z4-HF~9izL;PmM>udkVcb+v4@x62P|4em!kXJtkr~aSmn`-|D zKRrIktDl2Y|IZYjxOE@@#qDREmGf%<&vaw$|6iu&XWGrU zTWL3O>ptz@YyL34aE!kdj<~hOGtO{~zZH(Sbsv7O{%8E@f7Rca((lBrt^TKea^0kU zTDfi#x3;dIoX2$^-nzZk-?;uyj}MMN$GPsqTeinNr_xb(Lz2+}I>_70ga@{9xZC(HI=lYMomFqrnYwP;Yb&l&U*T1R8bysm~^ZKiG z797_O{Hyw({m)bviuzx1EAhqi=RW<9Fa1B& z@Kyg?oBs4OzV!c8!&h-@)1Url-O>M6<{feCKJ#y{{ONx<`risi+}h&le>nQz3P;?! z4}YKjXa3XwR^~n9VqI$fv+tq*t?YZ4|JK(2hyG{ZL;qXZ_Yk)>_CNG< zGJ27`tWR1f5w|Kni z|K;?`Pjymu1aBQH-sJV%W6Zy)#`n&Zm$mi%!I*!}+v>cnjr@5|HlF*?_upp9^B=^m zdOl=v{)_8RIs5Pu&wadBzroIPASlm$5Vtm-|Ijm6@mZmswXzmI3yf#6sz!XV|6cWX z_twgNw^%E`d#kn0cl>_K;`WcfeZ{@^-g8A6-*Jkyl<_G=acjhf@{i|Cp13jf`!9?A z%WVgi$&=)D`!#cY$|)t{RvjPmkNKnL3uFFSKRTWNR>hkowwC_TU+^SZpZr9T%RfHhPbt{e&RgVJ^WN--HW$2*FQe2d-$ow zx`$s-KTMAgwx8py``-MipY$8`*Gj(;x3>C^^B8w{E8|Yw+8Te(`?%T)KkM1kaknbo zqlw)t^DrJPiS1N`#itCm;agz%J?ApAE`aR^&#>nZdH8HpJ(4RRy_AR zQ;kLZCcIV02YH^kgMW9KD;#lai^pHz&kKL6zPA_tR>cSX;qSPm^47bLtGre5LH->p zYu-F-NIOvSCT{(Im_MHUeluP()#tAfx9a#%{&Ai@-wocX&wV3qZG8S4=jrq1;H~=H zIpWsF=g)E8GV+gk{{D@1{#!q|xz2y9;zR8Z{yp03uzswUm&#ieZ}RV6S$XUGR#)Dt zc$0VDR_ASP7CLR>hmV?k@&!)qTg{ zt^3@6TwK56Jm+n7-quF`QGcm>)L$!g@0lCtzdzQhf7Ds(9`)Bs-6L*o)jxa~H~g)P z8*yu6{Ng;#ui&lBJ9w+&L;WA;G4JrVGVkE6t@*dy{JG9NOa81Mt9~~#)|FN9#rfao z`g7t5_4;Ey>8^VHu`0fpUp#;O`)rxtZ(HoIy??yFm^`Jv|B%M}j(AU?_aQz$pI7*jHH_`-eD>eGj~qeGj~~wg2Hf_C4@c_C3U{t^E(@Id7};wl0-F`)B;E z?E86LtK!Z6W8V)y)!6row>J0x_}nvX|5Rh&56}L8dc5iHysggL+R9(o-`GFv`a4th z&BU!s?Vs8A!&}++!&_VXf6n{3+7EC2l-f<)s`z00Igfomyw!PITlqhKecgAwXv19D zcM!M!WBd9uV&4I8{pP01TU+}Ne7?G+@>cd8#I1@Cwtu<#(|=FcQ~S@#eKX=##RvU4 z@9}Cs{cq*IA91VVO`iLH@K)~o!CPDR|2WTiTb;MHmA}?k>^rr7XUez}x3dVDdzm;V3r98ru=>faqB+cU*F50etziTwg0U@bW`nr ztKy6E-?#noy9H|hOdq{D+P`3Z#Kty%@Yd+R1?!`<1ycVlSQT&jKWJs;t%t0xyjAfg zulyLluKd-{@%)*v+~@K(i}{BrVVo^Mk7ng7b$M3{NJ!A_Wj&zVE-SgeKYqW*#CzrKG^@9 zr+t5LQ)S-|XKn5O+?V7*PTDt8Tw82Yo_!YacispIFE6Mw=(X; zt*!CrJjNZ~%D5A^w#J|HmXkm0jQYX)v;K|RPu$w7f1F3%gSS%mh+A9rkMpQ|@K)*` zacisoah~(GI&W($fAwGa`#SzJ-Cf7OSap1G{=a&;I^N`OtmD7e@6YnO z{QeQD<4t}!`Jb$|KVeV&*8WVNv`~L{$g1Om{_uK#Gk$^k%&PZ2W8&7v`=2;Z?{9*) z>U~edt&R6Tao%$B-?^vmJFj1uEBj93)_wM$d+i^1&WwHQb(`i2N8H-tdCm>~Gu!40 zN8Gv(zt{ff+QaL<_b+amEBjvJ*4F+PpBr~of9uV=tG`w8!SRQ`>GaB5Z{1OOtKv=m zYilcS{ik)6w<_M`owwC_TU+_-I>r67xPDkSsQtvPjr(VDp6>4jZ`FOjh+7-?|KdE| z-wWQV`+gC(Htzq$dCuGFysfSLS*N-`6zk9WQMI4AwQ>I_&bw0WXZ>4s-z(x)#Rta^ zAMIg+w`wmGyjAfg@4T(f+uF)s$N1anv~{LuE<~Ti@83<25BjTZ!Ktk?g(q&+>ksnm z-|%PuXN4nf-G|?6{r}#9WwKuHKR+c6z^}WG}TNPiN|Kj%ZoYna0x5aZ;GkxZz@%+`;s^g3Kz3MmX zoO#3k*UG#hZdJU=GwukeTXlS~|GwkLeaGOfy6+ggRq-bO zRka^~tL{4nZ&kd>FDHN1zi7AW=S*ogacisnoJYIit+boCwbg#kquuaU+D+WrYCq@E z{@(nxe~9}=+W*Xy`(DJYt@~e`$9*q&EBC#KTU+_y8F2t>Wzp>48{{`O4eHVCZ>;4Pp zasLJ0>ffEVw(h?yH-ERq?_8<2>%WGX7JI`>u*xoA+Pgx$g=;)wur( zzp$?6p?K5Zd0U;gb)Wo?Ui|x=kG?9dRb|x;bA8PTr4YAjkH6UeKK#x@OYqh|*YywH zs`wzU=RM1b7svCWGkwjK@f>Ke>i7^p-d^-uL0a#scQZXy^Pjj?#|QbpySQ>+xoWO( z#H|g!{QWIu^1_p2uFv%JbG4Qfx9a$if1LM+>nd;ksw2zohckJy%!Ws(6cE zc+TeFXZpNt!7o^Ke25=^`IJ(A?9wv+>iKhBeT}|LsJKpp4SV1tKv<6 zIQ*?}_*+{%{ughn{?>Qyss2{QoBnY4TjB7xws`z++FbpuU)@#xt%^7O;qbS@;csp6 z^5=K%>HnGXJ$B+&9dG#uC;yqk$v=3s#pCm`b=BYciY?XOs(8~M4u2~gzSb6x|5dB2 zzxCrAtG`w8rav71Ryh2vEgt{77OKDX?)BB*s(8~M4u2~g{?-=1^U^Z<#HKR-^K0gM z%~tI{6u0X5p#MMUdxG%#zV=Mvh+A9y7gv|j)6{=|t@q*9cA+Q^wsfj| zc&p+~{$nRq-g>oO58kSHlmGq^mACHE>%m(UALL)Op^p0*o9D{76Sua;f7{iS`_PSZ zg(Gfl@%S)r@V7E=h+A9p2Ol{6t#HJxEgm1{9sXA49dWDTgZ+mO9R5}~;?@?A5Azm( zEAy7PwKae7fy3VlN8H-r$1hl=aXVMJ*4_u zcb!%Jt%^7O;qbS@;csp6@}KAUj40#H~r!8 zx5D9XZSbQ9pH#|w^xprW=gf7>aV6qb9Ut=NywMX+4}PY{ZVG;6)$u0(*IO%Zy>Un7 zt%?uv<&Em=pFFVs)}8gIPA?I+D&FMJy{+=r^Ny>$Rq-aT-{^_o+Oz6jO88q9Z}F3b zD}tZt0VVi}RmTVUBhHD>8OqTY&-JHvmO|XB&mji+pPTZ!N5tn9+(QbEIQ;bZAdkcQ-ULOu$D;#lai~r$s%4qk_QXX~jT)(-y6yjDLAN2o~E6V5}PE`M2 zH`lM9RSI#djt}xbdqf%CCH_C2G}nI>Pu!~G1N^=B{##vlWu$v}T4$kKj;nENWBrx? zrG4H7^1uD$x&BxA6SwO4fPb8~u==9lXZr81tZ}Q35AnS3jIrbW3uA~r=c;%=I#b1m z_{mS-7~JH^cg|IO#H|fpD9AId+DpSrek)>lmZt%^7KU)>(hTEuTA>X{3^!yo^wIzGg6ZyYZ2wu+0mwZVta z2i8`9>nEo9TNNMj=N^60@$k2bi@3GHhyPzp+i%t97V*!jc++3U!`~_{{H+Z>eD0X$ zKh;sG?Y9=ihy3A3KUDo^dRWbWWYzH||CH*_-w&W2qi0S1t%?uwUpTIePFMfwS~Jtv z$e*}X$A@_O2`+rC;v#Ns@X`Latu5sq`CH#T&EKl{kpJk%w+0vfIxkdQ#H|fJ{C|IY z^|x-H_Pz~y zFYiA+zH2#p$SpJF?}iY!@?Fd!|Iu?dRc^~%J^?B+);#S3n{NtG=9S?u2xQJUD ze4(BCe4P0+Q}#W?tvWvBAMMof@VAPKxK;5XKH7Pa+W*Mo>fa$k-#2Z)RmX>T=1=_n zBF&$fii^0l#p}0i;39u39C2%dXPxofVdQW9jQWqbRq>(xqn~s<{H@|5Zf)@4^X2Wj zSF3!jx2gZ|w<kxV6Dk=i#FLR&f!x zHuz}gJ=6I+Ri1m{pSAVgaEf2NAJ`aeFWQoqd< zUi}|D+TbHk9VdUz3l$%6YlDycPgq<1tfx%-&#L%P{-ZU@TgQ1;a;D-UZf)?9r;bP7 zR&f!xHu%W@RdwD?tZ$z7zg6*}{KH4b!`~_{;?@Qq{_k2F^L}F0_f8^iRlMo12xt->P`iU&q7WDlYu34Icma z-m})vOb@B;U$9Qv?T5pErsD924{h+_|M;5!g7s%=`xmT=54At|XRB^}Pkz?ZrukbH zAL6-g!$tm9aS^vR`0zhh>;KDJ%Yt?DG=Hn&L;mF+`RjQ2Tj7XX_u&^m|5gru87Y+V zqvy|b;eE#y;#LkU_TP)w-${#qKYQ0qgHznffkFNSQ~#Gw{iVSvZf)}VI|1?UH>dv6 z;1stu`43M0ub%o#gHznvW{(^ zw>J5;)qnK!)gKK`ach%5W9t9vslPNh#jQ>L?Nk5%HuaYVr?|DrUpe*vK}h=M<=3i#H~%9?+(H7TV+!Xj_(Zd zI@9Ar>u>zBssHP1`}vz2!6|O#bqD$1nEJnW>MspWach(R!>Pai{s8~@I|RWgZf){6 zP5r+y^_K>xxV6duTlMEzYyP3ZDQ<1?{LPNwj;#I@DI9TYlmEG?zn(RY*O3ONxV6cj zJ@wx>^_K>xxOHECujlu!*;q#3)#pWjeB)gId0iP3x9a%f@!yO8TRnFJ|D_Fcg(Gfl z@!#1}x&M9VT;YgYTfFidKWtazKhqyNCh{L!b-a~-aLRwCaLPY;w8bmW;FSMN;fY&Y zJo!KA`kKG>XI9tzt%^7Eha-P09C=$?JbA*AzZH(SwZ)VFsoQJ*))yX9^S3JA%pZ>Y zt#IUTZSmv@NB&kg;?@>V{%^jr=5PJAg_^%r@n-&T|4iYOfADCFSDwKs@0r3Ax3+llKWcr=-+Ii|HGiw(&HUlW z-wH?G))r5maO7`=BW`W+Q1iDc-pn74{H<{0Z*B492}k}`IO5h8ulyGtuqX1L>57vh{{^d#xAG58`Og$i z`3H}-c;y+K@}DU@achg$>yKWyG5T+&zkFl(kE}XAn7@32lmATNh+A8{uCe9f+w1f9 z)_1LoYj3eCKIpICc_^1@{@rl(T(_MYzyDCIIzGtry~)3uo^QSB`ucrJtKx$^&)btX z&%Id5o4B==|82L|yuZC}uH;SJ+RFbMm(=_@pZrnsCT?xy&vW8@Ryn%&q(6}sq z{~hOj>A1>S^?Owjw<_M^7aqMT_?fQK>&bt?s^f$Fi}b#q`J?C8XUe=GZf(tjwX+PFO#RTbt_#A2|G{8l2+R7SHztMqiV+ zzP~WjTXx0s(<7^n56xemlMe1Jcg+=!xV6R0e|(twfbUOO58odCW2@pV|KQ|5Q#knt zkG6RH&t6ykt>F)Py82tSCyMWHSQT&j!{Kj*!{6HC@&C7l z>Oa*0@?<|AJM& z!_@K*PX056lYj7NgOBe?eDk>Y{z9>S>-6~kLa{17Ju6!m%+^XY)`~@dh?!qhQ3P;@9;_-Q!KB2(hdi*KX z->P`i9}a&j9RAi8kN=r>RDbJBPN@D?#hd!dx3+lv-*!v&xAMDJ#I1@q{o(Mp z!r^ai@%a4S4b|WJ2ZvXGtKv<6IQ*?}_*+{%{$JQp{jGm}X!W-$-t>pV-wKDnwZ-HA zf3B+j*8lIo>TgxN=?{m$6%K!EiX|4iZJA3WOP`JT>! zSJ&_FSRZ&}{r-+s@j-vSrvt}#Kdf-Xt%?uw_@8u1^|$^fy&iF^;)6UsaQIu{h+A7c zK9`k+pq-t>pV-wKDnwZ*^c^mu-{oTD24f46HMNWZ^JRhn`ppajT9G`g7j1R#x8n?6sA*D&FLOX+`C&|5^F) zx>m)T{5$tl-pb#hgSRT)ZFu`;U5__BX*>zjbb^=@;uegL^jWH;6PAD|Anl ze^r}*KRwR-u|09`saTKN5MlnNqK`NH>)(3(>s#jf{Hee7nHvZDZ}O}i!Ex`4zZn@S zF5=b(AK!C3Yns3HO&jX>->ixc=KnDHzjI?eFFDi8ls|E+jt}vCPYEvawu+0mwZTXJ ze>BbCdfhaCtKvicg@5{e!SJ_!XWIYP#_tb;kH)H3_pF-h!|S+@tU5mAAKyFEar}9m zP;n8rHu&&Ay!QXddTh;qWL12~KfWiXo<4Zf)?9|DR3sw|-%ozg6)e|Msw2n)+Msp88uAZ}I%yyZHW#byfA}cjx%W z@gbi2%W?9bskn$+8+^R}6IH*i*irPifUD|$UBs=55BbOUbaXuYt>PkXZSdi9s_KWn zzrf!?2z}+W-B!g1{q@@%aM6EOar~CY#MQ^wb@}NB`-(P;n8rHu&f#9gqC2 z;v#Ns@X>#NIc>l7=4t;~6(7n!_&cWUpX$P>w%Ugw!s&K@uEk4>QF4{j; zIO5h8PyYOVeSCk$dRT4$f>rUM{Fx{4_|FuMxV6RO|CHK)Gd*$Ie^wnI@{jKc>3H~C z#YNoO;G_L#O!K$CX4-zM;zRzyzisMo{qNKKt%@(^7k&RH{&qR9Q66|r2&(7KBW~ru z0AI>u53k&j$Ig`J)`?p=Fvy>9Mdf~J>MspWach&;Z!^cgjZ=SVaQtR7c}$NF`oC-H z|GQIvX>f{LoBp4g`tw`Q{F4T!xRvmr|JSDew@>}0!6|NS@uP+6KYCd8N8yNDoBZRe z|LCWyKN_6k)+Ya)ss9V7{?gzSw>J56r~Yr5`b&dT+}h-SXX<~&)L$B$;?^er>8bx; zP5q_8DQ<1@|1|ag-qc?joZ{9NKR&4Xj}NW>C>(KXlRu*RkDpro(cl!fHu+zi`oDPU zFAYv{YmYeuFMauoPkZfoi_Ye?xYr)}=DB<|FZbZ z9l8VhlpkjW`@iZX=bmxa(Wkxs<>_Ve%<1O~YERZ5zI^tiSu3;r`07ja?9Dm%;g4F> z{-Yc1=X<92#~%rQJU|AF)W@HXu+?pRj-_s3`Q zzd!y5&Y$^zKl3j$f9{V@<$pi^KWP4=$G)uacP92-zdvyPD|Xy3{{#CUeoOpr{IdM7 zT794Ve_;P7oKhzGI~U9HzaRbw_CNZDvY_`l%kjTI{s)~u+$Sy1-*g}UAC#Z$uj}SA z`0+m;T*~^p`u$&^`hP!s^#9Sd{vLDMQRg4!>zA&$Wxqq>zkU0>$vjT)DaECjXX$-p zmN}=x=iMDXf70P|Yu;zHf8J-bro-pC9X{uE_-yI$`AmlozulUgJL3oCea1(1_?*(= z^QOE{tW&MK)S6?RW*OFLmSLS{8P;i*VV!1~Tk}4#PLn>dPO}W_G|R9~vkdDr%dk$f z4C^$>#5&C~tkW#RI?Xby(=2m&htG8#KHtszOdg*1nfy$L&x<;Ie)Z~fUq?+;y-L@_ zEJIDqGStK@Lru&w)Wj@vYu+bnV$vsSVwRyMW*KT?mZ2tQ8ERsdp(ZAosEJvInwVv% ziCKo4m}RJmS!U-kX=Xy*N%~BvJ6VQ0s`Z_zJ5fio4DHD>v?s}MjVr1>nfB0UX-0Xa z8ERrSH)>**p(ZAosBc+@`j%y=Z&`-=mSw1KS%&(SWTL)hnWH*RXnfzGWHq zd|8G)Uy_MEUzTCdmu09`S%zAbWvIPc-P~)= z!`>y!P!p3()Wj@9P0TWy18GJcX@;7Z&5fFvWvGcsCTe1qp(bV-YGRh5CT1CGVwRyM zW*KT?l8Ks_WvGc+hMJgVsEJ7?YNFxBg;e$N#@4$ z{%Id-NY;lMl4UOM@S%oeeW)QxCTd8Qp@w7`YDku$h9nuDmt+2<_Ep-uq#4znG^4tc zWk%y;^2{$?l4n#y(z&UIq#4zaG^06?WjH_0sD`8&)sQr!8j@x%@9Q0u?{7n1EBh65Evbj-rvJ7=6%TRZcOw^q$ zL*2JBv|%TPm-Ow^DpLk-C?)Q~Jg4aqWFI((=hSs!Xhl8G9U zWvC%pM)Nbx$Ro{AL$bM1L$VAtB*{b#$ud9F;X@6{`cOlX44)Z|)!(Ta@;K#|W%QX* zn&G}n)`xvnmZ2tQ8ERsZiJF*YsEJvInwVv%iCKo4m}RJmS>~I0pQwpRANKv(+_+|^ z8LiPYqqd|OYGSqzsEJ7?YGRh5CT1CGVwRyMCYh*->brDJ%rex(EJIDqGStK@Lru&w z)WjqcH8IPq>F}W@W__rMS%#XJWvGc+=9_t+sEJ9RsEJvInwVv%iCISLI?c!<%}^7Q zxkXLPGStK@Lru&w)WjqcHBtSLu8CQOnwVv%iCKo4m}RJmS%#XJWTGZ!nKd0g)Wob0 zH8IOj6SE98G0RXBlT6gaEW; zGg@qEYc9*M=CTZHF3F6JRNcuk%ny{(&N8~z zXBn>bX-3!jG^1;Mnt4-)kFND;A6@IyjIN7WhIO50GzZcQbtgG@_)Who6Lm*k>AI6; zs5@DPx|3z7J6VQneU{-`pJe#HYMP-|WqqhsS%zAbWMVC38P-CU(fMhHwUG3QwXnJ4 z8k}WV3t5J>kY!j4S%$TcWMU7SW!S@J8P-phVf|zo)=!pU{bU)g^+_hK^;w2%eU{-` zpJlk#XBn>bS%zzUmf>2TWTL)h8R}b>p}u7q>RXbD`u5?DYkiiXzGWHeTb7}|Wf|&Q zmf>2TWa3(%WvEqIhFXXf31}t%WqBwUA}F)~6X= z>(h*`^=U@yC(UU6q#3QBG^1;Mmf>2TW^}DjGrHEN8C~nsjIQ-*M%Vf@!{_12wM~6X zGpcWCM)fVtsJ>;HsBce`*F#HL*!OR45B<&5$LahmLw(CK)VC}{eakY`w=AP;eU^#e zsZ9FB@3>_dYE_n@R%ID#Rg#HXm1U?^S%zAbWvEqIhFXRZw$_7qu$`j%y=Z&`-=mSw1KNha!BmZ837 z8R}b>p}r-VsBfwx>H3yslvl|z)VC}{eakY`w=6?_OEOX4vJCYt%TV944D~I`P~Wl) z^)1WXo%f0Qmh_4GmSw1KS%&(SWTNh58R|}!q3&cE>Q0i0x}&w4t~*(Vx|3zpmNY}% z$@)-tvJ7=6$wb}BGSrqFhiGSrQ0uS?j)J0J6VRhlVzwoS%$ikWTNh58R|}!q3&cE>Q0i0x}!Cet~*(Vx|3z7 zJ6VRhlV#LrX+|DdChATyxA<%-%TRZ+%!M88q3&dTs5@DPx|3w0?qnJ2PL`qWWSNUQ ze7KL4_2E8Jl8N_oS%&(SWvFjihWeIdsBf&hY<){Js&8pV^)1b)zNHz}w=|=E&N7^z zX0)$LGpcWCM)fVtsJ^8c)weXG`j%y=Z)ryLEzPLDrJ0L6d{p1kKB{k7hWeIfRNvB! z>RXyoeakXY-?WC(^)1U#-?9w#Ez3~fvJCYt%TV8v3}cgKp}u7q>RXnfzGa!4^FC4El0H1=kj-sEeare#-;zxE+mp*k>mgO& zSldY^)^?UrThczP?W_-LJIk=PvkYrH%dobSOswrJ!`jX=tnDnr+Ric`J2%a6A1Uh- z>ol2LtkW#RI!!XM579hLty4W;Hp(*WL$VC}kSxPKB+GoE!{>i%?j(Jvp=n0rnP!w% znxXDw+e6*SGSrnLKg+~^C+WkphH0Ny=KEmGekYq7Yc9*M=8{aT zxh%t)%QCFFEW?^hGORh~LUzri8Lhc2Lmf>s8q+Mpn5G$xX`0cPrWuWCmMMR5V_~hP z$27|@rb&itaGH5qhmY!Y+DG*|&1k)48OAfssGrk}YHylR?M*YR)8ss0@1JF2ohE&F zubK8?oo0Plr%5Jiuf{07PO}W_G|9v|%`)06XMLi^Cw*e>B$=2yS%$fjWtclzhPjhu zqQ+~jrsqzUVeTXu_R497+MD&E_9mIAy;(-BIgtn;ZL8C`$UjIKXvM)e@g zs2*e)>Oq>(dzmc598EKtqiIHSG|gy^W|^3y$}c@fvkY@I%jo)(W|(hTALd(rXm2U4PQdM>~AJ)Zue?-iPa4wmn?u(u}TiX-3z%EE6>(Id||#`%pu&KGcvT z6E#F$=^Bz{s3BQ~>s*rI`KmO-I?ej9PO}W_G|R9~lT6IfEW;elGCDuaFh`RQ0i0 zy0g7wzmsLCJ6VRhlVzwoS%$ikWvDwzChAU>q3&cE>Q0uS?qnJ2PL`qWWEtvCl8L&L zWvDw@hPsnws5?m}>Q0uS?qnJ2PL`qWB$=o?U+>uOWEtvCmZ9!s8R|}!q3&cE>Q0i0 zx|3z7J6VRhlVzwoS%$ikWvDw@hPsnvqV8lF>Q0uS?qnJ2PLheblVuL;@S*NxeW*K0 zhPtzGKz_fIW>k05jOtFBQQb*1syk^$btlVEchZdNPMT5ONi(WDX-0J?&8Y6A8P%OE zL)}R;syk^$btlcJ?qnJ2PMT5ONi(WDX-0J?%S7GzNqJ@d-XVWiCCgBEvJ7=6%TRZ+ z40R{VP}@+KGcw;Pt=es!yYNiP(!i|H6+PI4LM(4*&32% zs3BQ~8j@wGAz9}0ccz)x?<9TV_tmlt`<*O9t;#agsw_jT$}-fdBonnN%TTMb47DoD zP^+@cCp&zoRY{+yRau5wm1U?^S%zA*By;5XN0$8`H7cd7Sh?TRPnGg-#le$Oe)g_1 ze$91D)U7r@`j^}K`6pjm#)mD>e_1^K%V_`j8|uHC`rAMLpXZm!W0%Rlf1zqo06{r8b;%4GfW z@?Q>5{TM%e8SSV4mofg~zxjgY_5X6_KlAr_*H!-&rR@KpanWA&5o7I7r#sdk+3&bb zY*+O!cC5GEP(~jv<-kYo|GLv&a(03oJz#4Yt=Iv1UXCpKRmgJArgHEj_kZzOuRQI{ zU;Zzroq5J58Fap*FEPKPd?%WN4zkR@%W}yd(%f|=<*Nel*x;B<9+

`DguJ0xB z>>8Eu>?85)8kO+uBk}AT75cW1lxJTZqMe;2o?R6zJo`vIyJ}x}_K|pYRn741B1aFo zrIg>fs;5$m96jldUh;2`=pf5R-Qj$~F}>vL59uZU^v+I_=U?;h1qWBq?s_fWmgZmZbun?zl+pex4yMfzO}PV-qGbLa^bL*9qk6js#1RVoQ`Zq*Irf1+OBE>d1jaAsj7W%@9~^G{q#<9gy$dhWIK80 z!JTAy{!Ldq@$4dFJn!mhC*+xh%MqOliv+fN4W>2=`Q&cs($ngBb zu6F+WJIbhwEZfvWU+HP*(i5;C}`JTvEcek^PEVq_2zNB|1^pWFFuj=$H7i}%$Kkn|KE|RP6_#e7@h&j|n zj-TC2Qg8b_sY8?fy82e0eI$K5QRU3P0~meamQIo$>hmlopI#;>_4Lr_9XmS7$hOb( zxtq%5mwWm)JiEvdp6~7Hq44Y?!*fS>JG;p6{6=>>yGT429@yK?K9U{d!jV1gEN{4_ zEc{YWw&Pdq=p@T4Zzu~Jd$Jurm>F5sFT$Dqdt=NN1deJA9a#?m(xk=y-FvkcO0Fh-f?u2+Qave?8G}s?Zi7t?TR}| z?TR}|?K3+`?H2n;_FtW(_FtW(_9dO9b{9kB63-8P>WVVD<524DOV7?dKcuH0JIU`} z*Gnqf@gWCxX4^?B+fI^ffBLT8Z2L&E?IX$d1-JEP+eeaZA4#^qdQ)$8lByB-!?PlI^#z=*_l|B-=hx*-jpEX=k>bq_XWK$@b_Adb8~# z$+nLq+vlI(n{6LSwtXbozVT(f+4hlS+eeb^`%mf3wvQy+K9X!ddqQuveI(iTk!1VL zV|%mhBgwXpRJIEbJiIg8PEy%+lI&8?y`m>ud3KUK3;WJPdpy5*K`EDa&D*~^qVTy+ z$2FU$X#2AL)}g)Gesf1>wmd~U`iHAJ+8NK^{=18N$@*zf@;y>`{?SRjp7$QnNpkl$ zKNHAy@|$<`l7DwYC%N#WSM`v3y0mj9=;_i?85)nhD|AN8;Hx6X@GMQl5SFmUecM zcy?9l@a!Y;?5gqM*+(1}WwLRoJ zHuaKt9=E2~vya4cLp+z7+=CU`*+=4e!HV8?_K|r0{+?dXJ`&F_-rnokN8-t zq&z1-e0`^9C&^Rp2d(Sz$+wG_U#km+Zj*knnQfA z*8LL z?{)lgPquuIWcuBpRSCjEWuPUS4d$KKmvZ+9Kc4&lyiH=;|RoXWU0d4}GMohu*cSOuESE zp)QiOGWpw{9*TB;zq_4XWVEx3j3>^!J`IW|&b!EXvVL7p55<%9T_oeV@baGV4Dz?` zKiegqkJo;B`i$s(c8p7q+D~_q+D~_q+7)+_`gMs;QhVD@QhVDzk{xO%seNWAseNWA zseNWAsoi2H$qu7_uOm5c*)8^w?D;xL?fE)MUF|!`w{&}I=ho?|om(fVom(Ht{;QMJ zE~=B%j;52;j^;k(0i~?mZ+yVl%LB_p%0cCcrgf{m(q(>{phB1M9Ex>i1y^ z_PO#p#H}rVp9jzRD89t4E&uJStM8v}oGY(G+}iT@dGMT%;!E7x^8f6e)%V&H=gR94 zx3>I!9z5rx_!76a{54LaV=j&Ho2h;eiSgrikwSHRaQyzqxs~6lCl`1f6ppyH#pCmn z7gvAl6V(plR>cSX-@mo`UbbVd_!76a{K*p^^0xkmyK4Sc#RvU0&!XL$cQeJ8xV7bf z<>tzLWY=8bh+A7cKJ**@R@y<_+UmdG6RX!B{lQgp#h19XZ79 z!e8rVruY)Kw){V}P`N)@KUX;7))tQs{f57lb`ZC=`tOgAsJ?%C(p>Q+Zf*IKCqCqF zrQe8K6(8(Bt@G$Nt^1kcOWfM>|MNpC_xZEt3P;@9;_;#1@VC+q;?`FGeQs6tz3#ZV z;!E7x@+VJx$lpr85w|Kn*nh15S07Q=zxDN7>iV}T-sCxt`eA+Zft9x^KFG69@MZm2 zc^%@`mcP$~=X~_n4zIkm<+1lRq-Ld z+;5w(Z{pTQ{-d|9ta<;s))D=O z(r?7At^7Ift-C8{ecRf~TNNM7|C}Awck>Bz#h18sDStg96?t3fH}bM7KIo4xdH?qt z=1Shgt*!i-XP?x6%s(q@hqzVoL4VHMetYGupI%patKvg^%rkr$Z>xMGZe7a%kHnI{ z_0JBi{#M0@{KJ>LnSWODCLe1f{}?CoX5LxpH^$G}%AfOg+*o<*XV+BTs`z03%rkr$ zZ!5mUtxNgSZ{%iAg|A8bGT-&|jL ztN!|B%wMbGLww9Ld>L=6d?RjM%KvZgs{Yom9$WpbiVyjRFL^WntmI8T)<*s@&&Zqc zv(j(OD{Cu%&il)qmA8IDG2&Lm2lHp1;mdei@g;6u%K!R1s=t+f!{4g-pg+Fk&HS^H zH*sq#f9B7>T~xe-NZ`JW3KIR#|jQ3RWC2n2He{}CP zHUFuO_q(h5PnF|C{`f}TntwATZ{pTQ{xMGE&HS5c^qa=d+RUHx4!k<}nLcnujQ`lG zt ztK(-?e6aoSkGit*)<-W?-m3TzAM*@f#@j02h+CKP{}IhyU4O^cA3wDETNNMj4`1?T z{#nVJe5{T9nSYTt<3|1{{YKo{%AfNdzO8cBAKFuStKx(CGtcm4ysh{Ww=U&>h-w#k zTj@9QvMN64k1u&M|E%Oq+}g^Y`STyos^e!pVP_pbtKx(H@Ou6;#^3s!h00qMAL3)4 z;mdeiw^hCow=U)X;%lnE_2qX}f2-m{{^3jB z%s(r6laIBLe~c4(Gk#Y3jq$U#^5?u4Y_7cZg}W+mReUgi<{7?>w-sOF)}{RQ8DZpa zrQgWQs`#KkzU0mPvywM)Yb$@|&u^Ys$Iq(293S<=s`#Kk{3RN{gLM6~zI%7&t%?uv zG0*U2ysh$$xOFN2-#WkgTmPHpBY9aBAMy`h@@D>7$(wwvjr?Pr$ea0RrQaAoYb$@w zyHtBGcThlJAHL+x{Iilbace7o#_6gn z>-bs!aG{Q$Rq?_0!~fn{mA78Gv+`EOhxnLh_%hyB`9|Ejl>hHvTK%mbyQ%tH6(8~s zU-D-DS;?Dxtd0C*o{=}>XQkhmSJqbkoOk(#%3D9Mz4BJY2lHp1;mdei@g;6u%75F% z)!$0Lk(X8RL4SP7oB3xYZ{pTg{>-1hTT{o+dei1QepbZ?{o!|M{0>t6vwm%7<*kYj z@iEWvWxTEOjkt9w|1Y0X{jGnm`AA+?#fSXEm%N#OR`MnvYa{;{C-P?gS?M>%&)UkL z^KLo0^470kS$V7CgZVSh@MXNM_!74+g<> z!({H*jF^UB)FpYy)GuJYFJY^l6e@xlC=XZSMSR(y$Dm-4^; zoa%3--^k0V_@F<&`u(ss7FMux*vM z>i7`PJPTiq_e|v*aqCk4k2$vbTOX(SNM2UOhy0mmk+_HJ^xEb$l>?&9m^;c+V7H;?|}7={NGXKK}ITZ*BD-zT~g@H&gN^ zZf)hyI30IZ9Y5>Sch>Q7$(wwvjr?PtkT>IJrQeu8)>i(Ucl7GYTc5bG@>azM^Jkvn%XnMy zC2n2H|Cp1izmNBy&& zy}9yM#fSKqXZSMSR{2KUx|IJ*53T;zS7|*4Lg@d8^`s`7_V(WxTEU61OhpPrs4B^)<&;e`~A%@Fj2NpOw6c zTU+@bpmDn3#5#V~3%AwrvnoE=e)zYnsJwOahRRzNAL3)4;mdei7Iq!`NmAAfWedVo+59ZH2!f#fs=t+fBQLAsgZ}uEH}lU*-o&k~{14Fl`Gf20_*t)7UB}O=_@F=h)f&Hp zRR64>+)#O|;zNAQGkh6ut9&DFUCRF>cU6DuCo~_)%c}U0fB2F&^Uq4&uxtKx(CGtcm4ysh{Ww=U&RzmdQ7Q>&`Kwbg(4k~j0u zO5Vh+t^D7v+<#v4{XN=qT2H*8jEGwmA8h|`=vw)(9l_7^hYpQr=ZaOw2l;nyFC+a0 zvhcUAR(}w;D!!QC>-!sz+*T$#4lko0*)!MA>GgJ6T)~{^n-{@Vp%``a0tsEHi|G?D$ieoE}9-#R{+}h$leMRLybKP9wh+A9yd#@?w zBgg7_H-cYQ>hy2Ta zyDE3!F*6NLach%*;K`MH(3LX{PH}6KKUi~}ydSQbHPzr0x9-d9Z=cMcAO66`GP-Pi z8GY!+xo*2!pV-wKDXwZ-HAo{iPt`raF>zg6+3KOFv6IQ*?Ge%ndPR^{}JX1opx zN8H-tuh>$`q4NJdec#afDDlLtiVymKQ2VF#m(=sEFS@;qh+7pOQoL_0sx5UH^z%6(7n!&inSuDsTO+UJu@?c#9t& zeM0aveUe^J{Mf4FP5zCCSKj(&y&k+(@h1P-11oR6R<8$dRlLPd4!SM)nLb#rCw^kp z@h1Pg>nd;kMZF%pRq-bOJ6BZR`aZoLyjAf*{;4bLxF5fEu8cczYis;BpH;cHUo=-Z z;?@?A5Az0pEAxi9wKae6fy3VlN8H-t4u2~gachGgJ^3b$+wJ*k^StwZA3_rF0kSL`Fp4c> zVdGfFk`RBK$g!}MKpUDeHnxdPDk(@o*g|N848q3AmxQ#mCN4=yhqkhXl#O8&E^mY4jKPX2wOlYi2~k{zS{^n=5hrg+K(H|ZDCOZ7hlKznmy_tu!{@;Ia zK;~|Un_8ar|J9?R`!(&aDF>n>ZkF`Fb5rR4)#C%ABW{-TG;Yk-v$K{LPY{JkgQAiH^8g(v$y- z`bYblJV!&^RJ@o!I`TKsk-u5elP5azH_;I{OM2xwyJ~gHzt2nVOZm^5T3*UO>6Cw; z=#+ob!;)TkCY|!{6FqUWq$mH)DFjJ$a%de-j;Xv!o~gPd^{|o7_iC+*G`nKRWU^(UHGd z(vv4T@;A{DH%of*{N+=Tzxk^hBY#uzV*cpJ-$Y0LW=T(;=*ZthN8Bvw$^UClNB$=F zF%mZwFXoSq{7rP^ZB`98RJ@o!I`TKsk-u5elP5az zH_;I{OM2yh#>IzI{(b6xDcV2XPgN~1<)3uQzfbhaKk1>$&+3(D(kcHw(GxdIdh&bs zqmjRP?TeAWsd(0({LqoViH^8g(vv4T@;A{DH%of*zxCnB-`w$R3o9M{j zEa}M;9r>H+h?^xn`TvdkBY*R6J`?$yiWl=oNB$-{@;6I*@GZ)*P5ByZwoDgR@SM&4h2aX|7WZkF=bd#h6ZtWW-syosBI{Fx`5 z`LRdR{9&Izq3>Ran_8Z$e_HRi_J`j5s>(xeDqhmho_}-F_qkl6pJo577}fOL~0h zclet0JL0C|+5GWAhp&l_xLMN6C-qzAZ|TR7eoNde^+mlo#xN_L`U2#={0{h^IOk^zxmY-;cqHl^hbxki4K3Wq?bRxyv6)|pUYPy|5;PZ zOa4hG|31;lKj~pfkN<}bgunTN&xgOMc+npn{w6wn&5|Df&)*mR=FdMJ{-)wZe{}ep z=szPa}TDERa*D8%NOt2yW`fK+xFhJBi7!s zZe;y;y%4!+{T0g>-?d}+U0U~!J>yH~PPtT*DE*$jx9{7rW&7US@7}Su5)5aLX>w(VNCWY4z zt@WSLoes;Z5vF!&t$+9i-N9OokS_X_TXpB@vhMl+v9wc3o_*>2m(8zE3~A zg7)5i=g0S9+(!LRP7JHH4@hHjDsO!$)|*{+8t-k}x9@G~-CMGBSl!NhZhly;Uo&ly z`Kw+SR$no!)?K8fKCW%e{Yd(Cvb(o$Z>7|h?x@65_lk7%?530__lWZ!YLyLtBh{e8OU_`(j^Cgrm)bX3l6 zIMG#k-xFPxM<3~^JY#NuSLIDNcU2y^ri=33k9XakKc%aoZao3dZao3dZc2G}>_hVG zsKm2d@58f`a%SVAj$37B+x=aYcy`(<$+MeMp53+zo*k8VcH1g=c2nZnX+Mwwsb{ zyD7=`_VK?;J9(ebQAxJlJjwQ_S9NXMZc4K4rX<^6S=Ke%Zc4K4rX<^c)9adTHznD2 zQrsG|+?WQE#Zc4J%iY+s%_~A3xYN+ips-?WW``^|ht2 zJpDjN&qhw$vCWY(@*?_<`kn-b4%{T9z| zN<6#ucsx5P)9hrYp1_Ptw?33SJN1O**-go;U8kOaXGbNToq9s@?54!CTTh^#-IREC z+TW&nc2ml;+nyTFj!HZ`?c7Cy@yLV;pZS}u< z%NIBAkz1rMZmav6`fncVEjsklOW)Raq)U#Qz1ht=pIM|kA%iKN?l>8zUw)*=-7&q_ zoa~cdpz0}ZvOKGQ!=~`PWUCpzZ`fp({oj6L_^wqQ$U{uNiknUU+M5f*Q+FiwuGBws z$551{)QUBb9p*R1(YeH`-UeteUY3R*wUlw{(@sfV_>KBr}&+oo4>1RzXuj}h? zPVCLC?DZ}=+UuRSZ@^0xBW`MWR{!S5L-*E21EM2tmh||1^wID)cfA+MSpboo9OU2OM3kObbI)lFFqOmrs73^boiU-@Hb0(`Omy( zbMo(V^MT|)V`_QHKk4M(Cp!5jJuK<*|68lW-+b`C@HZ7N`lG|&M2D|g(&PWH)pqLt zeLj6l_?uc@^hb}si4K3Wq?iBfMW>Q~pDQ;e|5;PZOa4hG|31;lKj~p!ulp0K*GHau!Zqb@UcDmX zrsBo?(UHG-^@_;fEa}M;9r>H+h?{wRkK6CH6gua7(rJ{b9%UpN(U zQ}JT{=*Zvv!l}sLEa}M;9r>H+h?{wRFjJ$a%d ze-j;XGp~<4Pw$HS&2Ju!xT$zCe{|$;e)DMLZ6K^FDgQpv5jXSt$aAgguKoXvx&G0Jn~E3nM@RnV`bQ&w zv!o|abmVWMBW~vPk>^btBY*RQ4@cZoyqG^a@;5*DaO7{6^yG<-{7rPk&AdMH+`lIB zH$QQI#7)JE`J*F$^Aq<+{$@!}p6JNmL`U4r>m$ztDG|+ZXwp zB|UkfBYzVeaWk)vJdeyp{^pmqN8D7rm_Iu5H@~z!@;6I*@hZiG% z^AB%|xT$zCe{|$;>Zv-8zdT)+SkjXxI`TKs5jXStl;`Y{XH))tp1nEZrk0oTPdeq_ z=h>T6-m_*&uRN1Z`S*#AxS7{So^N|5@;5Kv5OGuSV*cpJ-@JT7(AC@#q!0s^4RcI`})sy>X~7GQkJ7@%}eLCt~(iZ8C^?-OtDtItiOF^nzHh1)yw*~ z2d613zgDfRnK#T&QC4BCdRez^ou;h(TJ^GYKS5>-^#*M}lV7V|)*r8$rmXy0wX$a4 z-J4X_>oha1PbPbp#ah>$%&jGT>R;ux>Sg77PQ9%BTJ^H>J*Qq)eyv(rg`QI@tFTtR ztbEU@mz7_uURJ*6)XU1RRWB>wbLwT~*Q%9O?_Ykdem&3iuaD>Yuc$xQ&wlEhCo~ti zwcn4X(!5!7&}}s@r_V<>wXaWG4fScOq21bQ@cGqM?d#K4^K$z9X|H{K+G?mzTMgT% ztwugG*Pd)$pVpd})8}sO0&v^?5lo)TfznK`GrN1{c2UKWk&)6ysE^N!Q)j;A{Q%)A^L>eJ3A>ht~+ z?d$V$XsAy+pQz70$J*ED<E+{ZIOKfFsXDNG}LI^~KRdo!yaPRhOQl&g-{Jlnigv3L2&n&+@m_c<5d4cL3# znqKeB^d_czn)RGQ`JVJ-mXxhM|4Mp?la%X++I9-hzm=ZplJbhS%AZSbf0A-TTjjq_ zPlHK$Wn1OHPtQL}c~wj0%xro{7WYrA@OQ_6Gp;$8LaQ~#5$lPmpq4)ia*^e0F36F-mjdYS?2 z^DQSLZfbd5|JGrBth-9@KcK8A$K}HGcU}MXfxg$fU{7ei_4JuDRz=@|7wh?V^rn_)^t|^Xbkv)2AbAis z^ZM|io$xhZb28$l;#q(C4?4Fye2sD^ZZ`C98?>M9lkcVbHhU}OulqL>FP)FL>H9jX z@l(^Mx%b}6)6xG-zmvmMyq^E4Uf#TWgB%i1yWEPaa{6BHtSV>vKl()Flj3GUPd_7X zwB{Q&MgKMP`Nw)_HTRy%NK|<)H?iPP`zLSw{ZIN7H?#U^A3SI`bH$AjHx?uMZ#k`q|G#pNHoyi@2%fS%1Gb=IrM}<8ml7{-t|&sG__ zzpe*0gVZB#DxTH9`hn2B=E4Ed5jXStmtK15n(*u$8}OVbB5o?DtUvW6XZCd_^&oDR z^h+Oc4rZ@MF4RAm;#vP!KM=atTxf=l`lGLwXY`?A+_SFv`u!0%8{>ay`%`Ch)YW|b z{%8xcq}SYA(vdHEh>o~f($mi9XnzwOaWk)vdg4X>O}DA3c&7cr2Oa(?j=r6C2 zAAJLuv}|w6fSf}SHx;k@kLY#ZXHUP8#(kNIl;d)t;#oc8hU4~y*9?d+akFv!9`a9p zT+N4`eWlAGPPx_ctUt?je%U+k#DJ9Ja;xQ8J$2?EZEdpe;%`%bXZ5rX=MU&jv{kz$ zDqhr+J6IMSopHt@b`8k z&UUDlXY_H*n7vtJZMci!Ezou6k zRl1AS_UIw)M%*mv&#d3qb^#`*V%p1xNH?=%d|7f4HoKI|jdXPM;VyrAMm zJ!6ObP0FcsiHc|SjB&<1?QT+U;-=zR{j#00-$&2bcR9oB%B=4@s^wY#bevfl?Zm!=_VRJ3&!xHi zqn~lyVq2MhZ=~5ce$~c*ujlt~)~}!F%Zm<0pRSf?^Jk7Iu6xYT(e{*6EwAhKyTw@XmW)G9O_i9YpoWs8Hk=|nN9*tg`&zkw2YTdm< z>uL+v@7yG3<|lPdq;l^mmfQH1^K?$FeelG5nmTgRH3_<6ZcQDn)g{mATe<1Trc@25 z*!E2&{h+Cw@K)y6Ena-bj(yv9jXuA>XsIq>^sDpl8tk2w*s=J>l?i{t`rp;^?A}GH z^kM7sf%U&rP&?~a>0jkP^mf#0`H&{3AF278C4+ZUuj##Z@!~yucig&j+uqxDY}vMV z@3wn&>u=w+woeMrxq031vntMOA;$+krj}>3<~)M^FXs^^$7kZE;#qy{w|l+I4u&40 zBW^bIL;J)tSM<_n$*uv{U88=jxTz&|{~o~f z(!c$1=+87=L<3un4Dt9@!Jv)bb|_G05k-?@*o zhuN_^a;bC^?uDgi$xY+E^}UnoPZ?!nPu|RR@g~ho9Kf@~GXYk%evij(*jq9Pg9-v%X5@P|qxqf?+_e{mJ`g3lI{fByO+K)hdiJRKLWcBpi#TvuZ-CU|M zPTW*Ht6zRZ`!nT>-qd@y(z&v!cveqM@uL2w_s6Er!Z>!HLlL|FV%GNnx4NZuSx6F)?BH*>Ycmp-E!-lyZ3Fobzi*dXI*;L zk26_$=6gQOHqj^TZ5da3pR%)BwS2LJx8J>EOc`5t?{+Di9pbIK6|D3VjO%#I(7Lc* z-+aqZwKbcX(KDM`yJa**AKKbSTeaX+xuMZMx0zefCyfqmR?dZ{^+98w>gY4!sKt5e zpYu^`!rol@u{ZB@24Cr_Gx#Zv0rm0XGs@ci0(8~*oV9g8GUQ|G&$JbmDx@>wq5DOA zy;z?w8C*N}uP5vJ+A-jzm%eo)|2Q`^>HYC{F#TQE4;_R2odEOB%)2npyyUo!XQ#~+ z|MS$39D|tW;P`3M+xeJ{`HmqyZH$igH>=T-^wsi|zeYiEAF^j?A3_FpZl|n!R-;I5 zUcZ8Eo==gnT0njJx~i{CH~Oe?=-%H-x8%5Wn=9Rfv9M}!Vc)BE^Vk^rF1o|j-q^84 z-{1r5f2UxTe>Jv-`bM>UNHak{c5Hf1i>);Hd-}1-cxH^!>Vv05R^6uOPUv|n7B9YQ$L_l{zjMc)nB&n#s62zJsY!0 zoDZ8nc603UOvUT|L;CX%hHm+h0nrgROZqg2*o(6lA)UqWjSF#8;jI59Tf>*!{SRN_ zrs7%scdiW`zutx(q9bmW^xP@MXO%jaN#4Xw#q0hfV`ksZm|-;UK9Y*+nTjX9&SlP9 zKIqpvC(X`pW!I}_99*8SVT#vE%v}CRb?1q4m`cO9u=l; z){Pdp?ey4L_6f=>S9MjsR#~cc9cKENjman{Ty34Twby&!t}Ziu+;LGUTh8>Ip zaDCP{j!D%MD096_daoaP0_D8gF-aq1X7j*5Q zxT$znukZQNcQxF1!Dxlwy*2JhG!?JwYu62t_wD=R83^;vCn9btp4F2lK8$zs2K5u- zrs8?Ma^}0Dl{GRhxb`s{_pl6Icg@ZBdOPID9JIOXk(eVj6|egb>DkkNY-#wLY&YVj z;#oa&5I1d=|Ahm7WM>@JO)W3#H>$qq&F_~t<(i6T_2{lTq*?Azxlx@B7alyV*cpJ+eAnH zW=T(;=*ZthN8Bvw*>7CEKlXR#JC|yEDsC#C&7b`({fv8O%{#Wne%MqztEc_0yD-|% zy#BFhKU49ner`VWv>$qij<{LU(@yAUKNB5sv!o~g_pXin&CSvhHx)1DkB+=ebmVWA z^yG<-{7rPk&61ux-+g`LZ*Dpf`J0Lt^G8SiCOYyrOM3D|NB$-{;$}&I=Ki=6wQSj<{LUQ-97KsJF>; zoWxDVi}goG{Y`Y#-z@2=CpzkHq9bmW^wbj_^*7NGH%ofz$-30vq%7j5;>G%-qy8p3 z>Tj0x)Ds=`H_;I{OL{c?V_mcUceOm5KlNnnP=AwsH*r((te$$Jqy8p3;$}%tJ<(Br z6CH80q^Ex9sI!TVxLMLu&vf6k>Tlvr+*G_+e{|H}L`VJ2lAd+YQGb(I{a;B>J<(Br z6D@JGp&y$2=bUq&^z1Lqdz1@tQ}KHJhxB-Emp5J}S;Hw8EJo$a)_IXXZ2jSp(9U|c?aTV zNskZvPV^?_IIn7X-GAu2&t*F`r>4I5suu>l`$+76OfApq$&-05{LTMiQ{-d(>>M_(xaI< z{7uSnxz+Nl zer{gBb-y$AJtpN4Hx@p4D^Qd&`M9?=XGdVJe>0Q$F+5)Wf74 z=T$Aw>Zva}j{WAP^U)5b;#ocA)5n$^ACPh?-$X6X>N$Tp|6u4%$|G(np4D@VKu7;I z@h5JU^q&9cd>cKybY9+T2Q2C7cldDLXwv?~O~teMv){lMy-7L5&5}Ru#J-bpVp5LV zwOU^HAG#Za?RM#Ww3o^EhQv+9vwFPHahx#G5jRVEj(^*a#qrDJ_~qkbwLI(3IA5!_ zqPof457uJgcXk=;=46>YM6sDxTG|efY5bO!k??O~tc%^5a8) zH_5~Gs+MQ<^qR{7v^8Q}L{x^3iqeKONeyw*T*R{x~##7TW*X z^#AG(3FY6o%i$mX2%nvU=jL?AJNj%}dIpKogd#9J!`sqN61L`tF(Taf$S<>F}voS=47gS zYsO_dx(zi3(kDHQ!_oNT>B;HF^NEf2Xgacmbhb0a7HTRv{^-14%E7M)Ot@oHPvzdT z_x61|wrt<42Zi=lH*GFjsxP1P);Is! zv${%B+*CZPf9q4>yJq!(_!2iu{%_eAzO0Ww#Fw~P@+WWZSEc?Y_o@;%8~3aZwcm=v z`gT*=3+4v=UilL@wLDw@<+o@yyjtJ<#Aa>aRdF##r>HEY@EveUkNPo%J7&jbg89$JIPuwhx zAFgB=H{5G$q9blL#!u}iD?@#jABh<`lOrb|Q}LAl*_u3DKD1{k+%;QRlRcU~E_14T zVA((EOtO_`ZeC-mxQ7K|)%-(8x+s~O=;p~RdpA$&8D}?xbCha}PN*ldo4T83=4|P)Sqd;UFmCgbHDV`pFI|{z&uOB zEG+z(o=7BaHfDoI^mw5&`6UAMrs8$~+TGyxv2XCRmB0D1<7GWP0e|xcPP<;tV@N-A zH#yJ9KJY}$hM4;O%k;FcsdzpAAw9E^KdLggjxm4g5uNudZYrMDb1ro6$O&+3^C;VweX zsZ8#QByRfnxitF!Q2Vpq_oxjx*Dxu^Lk>)d`)ccwImAG(qY=7gpQbJQ?jzf2x)j^=xOhpGiM*xlr+}p8m5{ z>(l<`&O_0EOvST$%BP>;Z&D6%Q}L{R_U8E3ivGj5SCD>4+*CZPcfVs+i+%%jBunL( zjs7>({_c0^=zlJ!I`?(I%=)vPeHWs+`Uw@LxT$ziPd}mmn3UsktA1414?T@>hSuf! zh-)14?>rXYW}A)cq#-@?A)k^R?P%VwT!@>BXZ<<*{Dl0_o0LP`RJ^Fa`$+VElX6@x zR6MJv{(I)5{^nf=qyDDiMg2DU(SGJ_DwA?e#j|?yyG8wOZhk<@A#Q4UR)5CnUhn;n z#Qw+RsRH7r;zd3Ep8c2kz4{xy+35d6+n@C|$?t+a15yrgQ_HjdjMMZ6u4@L=HC7tG zrj{4=TrY9mXi}cbg^CyTzU$ZI?htgQ;zj+1%AIdROv*uTDqhzQJN(Fq$9OZ*5jRWvWjjMh`=N*Eh?^xn`9HWZ@;86_smR|{yqG^a@;A|uzgg0g zCpz*r(GfRGdfrO*$TvHeVR#Lbd^+0M|h{m?^n#Lbc(AMSd^ z-~4M2gukhHHvdK1cJEoF6H9F~lX+9(rs7#W^ZV%L<_APa+$`ytLqWg%$bjgGn@Q4o_4zo(v;K4Qy&g|3pf@Rp zxT$zif8ELOGbzXALdCOs=1G2FRkXiJ`w=%4&+0kean~{1&!imUrs7#W`F)?fsK0sL z$;jVSJga9rz3Yh>FDBd3+qGJr)zd$&-XG@=CjH3$s#>1aGj7l^UQO~KZYrMD(@$8B z`kS-^aZ~Z4extlO-kOx-a-rf`J==-;qBkjrxT$zn&owvoX8&cfKO=6I>Q6gy_cnTy za@?-f@~l70H{2ZUZ&HrSt(Ir??6=p;o9$;(4slcQqMp7_KQk%ENu3Q!Qo9Ky~if8ql_p|LdewpM!+*G`-A9|YXwU70BpIICI-Td3~ zCT=R8)pPyAah~=vfBaBfznF?=_0;qGk462>zjAZb-&DM)|L(1!H#e&Olxr%U)pOkC zsfk6(+2k!e#7)Jsdd3HHpR~Qnz9@~Gii&6TbMw*n=s)zq)Q>KU{==BAme=(|Potsv zyT@Yun~&TaWtoa+^<3vYyeIaTCihDbHx!{Z7)G z{@%w_JgYxzYv||Z2Si8QEa_=yeCcl{gi9TAtOjow@IT?QhfM* zL;3-6v!uu8W5+{hQjYVgmS^)nYinGm%*_wT_kP4pUB_hgluy5*{w8@;zKM!w_4wSf zHr6+}ZX#|fp4FdmIqw$%DAr`2KN7&v6Q0j=d(n z#LbdF`E%bAdXsWouWEU*{(OH)y-mt-xv=s5b^qBW^05tv}m|db9mZ${}t}sy{mXO?2dMmh|i&xbEY6&E)!# zxY@Y=8>&CwvvR%0vDc&=;%4LeZ%EJndwnnTCgl(}70GFH(dKrUz2mm`t_sYb^XwD7F_pmzKF);zER?);#ob%slRo7%UO_UqJsE+J94Lj~mnD##B68|AlV9h4!C? z_W!DXjO>4iyC0SMPn+>Gr^}ppPO|n@CsRG| z%X#d9O_QI1^)tEEy2YnnS(oz@%}7;PcklS8I~r>@pO@tfPiM2rYGfNtP_hm5v_z+;ko9~Jy5a57=o8IMX%UU9iT$Ig zn|_-%mD6wErn39?n7)@ZJ;(K!B|3FDb9PDXH;C(h_w*}CJ8$2yciY}uciw*Mwq0Ac z@3{5O?Ro-w-Bo+&E zZkF=L=Oc^4-~6Fl!rxRp>yQ2i_l4g4$Wx&=70>EvCw$4*#Fw}^$)E4y>3=43BIIQ% zp7qC!-QFL86C z|3j63#raj?Z|XbVtUtcwP5YVTP24QyPyN4eD*Vk~+!+3*;#q(6KYvr`&0lyt^rqrj zJ?(@q`I`6=Hz)ajVZO@0;-kyL-_-J~KfdHm`j=)bWc^yVKu7ZZ@x-(CvGa9)vKM7uk!5^U*hIO{~Ig+iszrK z@~?Q_jd_23$y@E$CwUV$OZijJ^^b#k|KP)+H*bD6 z^rqrjJ?(@q`I`6=Hz)e9t^6x~=tz}+#SgB{`{PUA|4HpEY0u=gfuPR6MI!J0)M`+b6!n%}M@eoeY2ToIRC)Ma8rJ_>#BUuTSzOZkF<={%al$ zfAjJe!{1aq>yQ5O4WT#JJ{Wpa@vNS9!k2tae2JTr{NH{&{LOc44S!SdtUtcwP5YVT zP26ncKlBbf=IP(MsMmY_iUHqtOWd1oYI)s%NY6bLH$1QJVdZK5)f?ho3sdo|eokZT ziKF3f{L1p+u>x` z#q0VJ|Bp%k_-5TBRq+mO5Areqq>5;qmY{5AP3uQ}Mcf z#Q(%oz21{5!~A!v!{1cAt{?Gdo`L$CzxzV?n~K-)qAZ&D}x&C>iO+xe?c zhQIkcD`NYbiWmKLu8{mq=Kb(D70>F~{(o>o_?usUG`7E~cvdf;G;gN*_sP5&ar4~O zc|H4$DI-Nen( z^*7u9$!Ejg{O6lv`kk{-)wty?oMjpX%Kw z*L}pz()FLV|Lmftl7F8|R;TShYifDXpX(<4O|F~pHx^irs75Yx1JBZ`RyA*Zz^8YpI8)n^Y?BE zy{ULfKl9$FlfKXITa)xNrj{4=Z#Wft^Ac?fZT}fl@uL3IheL0EW-j!m;zj*!M?-IZ zbY+S^b}_(p-V|moM!fP}l1{;%4doAJ)5iMd(dkZzsK}c+sExKJYiWj;35w z@uFV$Hzd8ubufBU@uHq{aQscKW6_(67xjGajo#GtX40Fb@4xZkdtdY>*OA0c#Y_I_ zdr#^6)b$?vbUg@5-+!{4@BPr5eD6oxEPemSdVKGN-n{wQ(3_?2ztHo&4|?;HH-z3) zyjXv}_dstRd@A&2>H81-nfFI;GVf2^RJ`cVyf=E2d2jTl;w62W_m#d+=6$74^S^NE z;j*52PxR*62SaZ*=0At#4|Hr!@8Otzvd@_}F6-&%zj`Li>-i7q&wM6yOO*q2sbbP8 zZWi_DsO``(cTh3u6gP|dWlx2UxeN4S(kX5h^#?Bt9rqBS7iTw#ikn6KFCGltKYF3h zq*L51>VN6N(EZ~*eI}jaW>J4gxsvyWAjv{@t^h_kJ#YU(qM;v>t3cdNODi6J>cv1hyt3q%7smeodDqhmhzPp$7eZEKKNk409c~(z9 zGNL5IJIj<~6KR*w(;min9Y zTjFM^|KfuVe-j;Xv!us|eviNTdn%8(S?d4zpu^upN8Bvw<&(yZ{QG3w5I0NXM?Og> z|31+XH?2Qgk1#J^yl3x@_4_yU7Qb$$r`rU0a_{0N)45ODMx}Lr=Em5LT4zq>?B2F} z`}!?IB{6HKvq6{CSZluWW39imC%2ZfDz8;9Yr4GhYt_s8-L=!?m0zn?7S|7%mZ;US zuvWdSozG2ER(`E|S%;2KQ&xVhdRZ?Vnx?G$TD7t`->$dU?Yr;Zvi_ZV=5EkapW8Un zziMl_EY@oDui9F@suz~ms+ZO1IhnHZYt_qY^qfpt`L$|gHG9tZvI=X}%WCwTOj-H0 z>SZ;0PNuB;+05dEbq zb${4ke6;rGT_Fq6Q~xKncCSCr<1R!`{hzt9yFbq$kI}E&a`)}q)@`|C$G&a5)^Az2 zU-!1e-lnio&$w^janS6{RKQ|JH1 z8+yD0zNv4O|H0=*^sVyO9Ande>inNLn&v2*`d0aCPOqtNmH&yIBl@ZH|Ba3Mj(t?$ zD*w~RNBmpm|EI@B^i${m<-@(+7=4@kXZ##q$NoRF>iX{a>$|jZ`l<70|GWIii2u}j z`mf$D((Hdz>+!#GRd+r8@4Fu9uE+nwqvtK$`k@~8ga+}hor?SJZYcfI^)=8kmNGya!X@0jaS ze;xm4)^FC%|IEI}y6f>jFyCFz_W$`8 zy6biRH1nlicRkzx$p^aY@jtb-yPoa;jT7DV@}Ko{XkEsSw*Ty+oeT3{v#GmY+kbZ5 z6W#TEzvA!VYW1J`{3)ZK`uKrfpXT{PEB`V2R{np{^}p`q!sUxp9<=NBAER&O zKPLZH+kcF{mH(LhTltUCxAOP*I9=O+jJ}os7Y{A0|BcbN@*k6btM(tGZ{R_#AV-^zbX{;mAS=-c@7{pLcBf8+G6{Cyu& z$L-JkQO*2Y`TzG`|J$~Xv|pS4H#0`xs{KEGB?`;XDL@*k6bEB`V2R{p*Zt84p@(YNvE{?O+ByG{Ma>D&0vjLE-^ z|2Tac|8e=Z@gJvegY>s=NHhL(dKY+l5%iX| zZPj}J??An-ty;6~1NHj0YQ6h)puVE5S~J}P^@g@;-AX@DU)fgu&8;={RV~#s=bx;p zuWqZ>4DTTGYuc*y-oJtRoo&^cT|KYg*Ve6V+gE4w*0-8|U2DB&H*5O!t@U4@uj{X9 zt7mqx=D(q}{vBKE`YVU^dgiD!)^*QfPxo(~ebM4=+qds+jPwaw-r!Wz4v+H*+PV25 z?eHj{pyka?HQ(VeK0&J|61gvI*+tw9+TXqP>U+ltCGdWUW(kcxH=zXHP|z%)(d#CZ zz%%~M5*qz(LJ7Qmpjkqr=S?Vq_XjjfXxI0?6i=KDZHuc~_1@n)Fq*^F!zJjMqf-C> z_xGh=k{b7G98)Oo*gE!iJf=|o+NQ3`KU>vNIrF`G$nc`YcW>X`wuNRMJlR$G^pTFr z*_8*oDBt~f*X{XJFLqVp*{vtw*-eROw?2etHzl6kdLN$Ml#EXuqttJ2+ugd~axZj8 zrH(HhmAZquo07e0N2Tsg?x;L;ysJ`o9(VKPZsZP1dSADmK=13O#Isu;!n2za&u+aB z&u&UQyY*W9w9_sbh zT{ED*GwKmHwLG0A>ZG^&owI>{!_A?)N@Y+EL`U2#>EC%gbQ>=l5FK%|q<{DIp}Y3r zfar*u4gJu&47tagcMiT~-+;?+(eY4mQ_Ji1AJOwH6?&8R!lE}7&+1>dCVbzle8~gi zOWd5~uY1&!zq#^s_?y0meQAFVWU&44Bk#3y1Clp!vy?x-^GV)#o8(R0oRq)b)tK@( zuYM--Hx{Y~;FZkF0Lt9c~1WClb?B>{E3^2XZ@-770-vidDRWk9;V`1JwET;75?UT9}Ry~ z@vNSD@(v^FZ}JW!;%4bxMzs6;RR`*Ce(P#CG5D{D5qC;$~_4vmW~$^d|cq;$~_8!*8k6@3tQs5MScvB!9+U z%D>`r9e^K8!o+Z!+$Po2Bu`dLKF!dh^2@ zLvJcxY(IR-*Tk3hGbj18Zpy!+zC}p+n_8ar$CtcmKa;$Po2C4zKl=^*P4*ka&C>pZ z^**&d^d|2xCT=R8&7ZpCOTH$)#LbERy~@9$p4p20EBYCPrDM*Y@Fj2B&m?c+W+{JJ z_AWWv>;2@W0XcW!V`_P}{(6hoOW#)ge{z$lD?ZhqPcX#``hlNxJ)d*6T@cZi$I77h82=-Kb0H`(u^H%t3p z)?>ee-ekW++$`;XSdVds-u$sALvJ?5-_X0bF4?O7uYZ@$4_N=ZT3&DeA^lFZJ?rQ` z*FMn`H?=&gNBhxDv976k(NvbHcvg=OI{Zy^#LbfalC9c5?7`nu-+L(hgDGC{58cO( zo1w=a{mw&WJ@x;-8>9ZFW{*<+O~niTp{M@nAv*lck{$v$yk56W;`Km0|x^6hHOj-H0>SfjP^7GeI-+!|1faXMQ?q}Ru zf5z!v@BD+^^}HKb^H^@N*8XR0)joMucRl%k|FQ1+jSntNPyTl<;Q1ZqPZpwQ`}^8W zqq24Tv;EFlK>oDf6%Tc9fBfIMw7Z`A``V#P{b~RAKhoWw`hRjycRl{|r@QMf)s95R zhvxX3`u?|!e(L=X$CQQmXY^D1SLXx^sQ=*D-=+Ul=MbCvI>Zcxm^#6tUlfTZB7F7Q+`lveEz&AaYo~lN*O&sd!!g zo%Q=^(D3^d7uD!_bW_Xg`nL}2bGZeM-IkyL_L*_UHQ)=Yp+_qc-yV}ZohlSmRs-Ky-$C}D>K*e%E&Fdch`LwUEfjNB``_3XDCCI zHP4l*&z-yO9pgAO-&(bDs@HT!+PV22pK*J+3CBv5+VhM%_DoPR7F55*7cIWF+T%=@ zD}6q6dYx^mOPO1I>=b(<^Q3a{BS0zTIg&gs%N~2;G$9Vb$W&kz6zMOV#9hx?0Do!I^09 znA%VOxTZGie^<-veRJ%w#{B@+|5mAd>iVI+5sQa46ZB)p=3qQBCenClH8uz1(PPpa zjLixAqhkB(eCWTG_8)t$Flh6?u=eMw)89h7t%v#=`%113m*_|nR6lvT$~Q5^vwao4 zueMBIZJCN^^_&Hx+AU@@*zSIYi7w4er zm!)e@Mzua2=5bJVo5wl-VEP>Zo!`HwItEUcD|>Ibwx0hX)6h*n|1&ZQe4aD*oSgo_ z2eOagW9rYeJ*wl}*mLR@^FOuY{P^qLnD=>Q{)asq+dx-#9#7@{)yVa3H)Y+k>eo8A zDUHFj4_?*ndRJF)8V~KScSEYEd;w+83?8~WE)L&rO65a;>kE9d(@&o>+UfmhD= zYjY#7obSguI@cQ9X1 z^qaz?zt8D??7J5D{piq>$EhXtpZa&2^}nm-^)Wtl4&6pSa=koUbKO65&z*a>@49{W zjxF2w>W;6ynd6FP7}A`&?m+94`FY}IW1fC!zx3M2wBG8ttImAQeZ3xWQ}KG8NA%3) zb61{;Zz{LqM1QS^9vx&361}N-*8hU1BmcLm{^SqIo48rZ-?}x@qKD{QPPIJif9=80 zz4wIy(GxdI{;Ws4p*LxVRBpvm`|(5~dB5kW0r4enPV!%VB>YX<9e-2tZ2j>iZ{BQW zl7GslVk7^dF>~hrxK?GK!Zjv{t#-E8VakJq+G=3Ooyyc1UXY!UO;%4b>PmGg~NXxh}f9RGNKc?dK{D=I} z;5D9o3@7D{NNLzHx<|KdC zLvKF1EcB-0S%1bEc{5&2@+NMU^0$t0haRFMZkF`d9t<7*7d=Er+?=GR-O!n|1A4R6 zevC7G>F*}K#LY?m`kkueZ_@7gn~G=KA7Aoj{F&rU+-&4OGJZb0E5?uc`J*v@OvUT| zBl-iILT`TVkMZxzQoOj|Iqkh{C!2*Ws3&Y@nhmkx#lGQuk5Mx6|FP1JnPRmBX7owN#4ZGQvTL4?$ASY#Lbfa zTJ=+Oj2{ynadVQMc0+GcZ}euV{TOHX(%(&diJKGs)$Yl^;xTPY{LNDP<4fL*Ka;$P zn~nTO#?M!ujPYasj&f)I#8kY#{YUiw+v(7o|8i64O~tc%#u>hhKNDZ#X2XAI{4oB$ zu_4Bv`9}}N_%ju+`w!_EC*M38{onkLD`WhaiWl|xGX6|_Dc79j&wA+le6G@)!{`4) z`7_SQoAF|jH*vF+zjcf|^bj3!v!uUP{S+Pj*F;C$oTR7S(3`Xadb8Aij5B=c?+*;*d@sHH*$-knOXSYATvdNt5g5) z^Zff#|DQ3nyr{=t<0tt;d@0wQ@HO^Ar8ZUj4H*vF+zjYdSNe|Hx zH%t0!4~9*rh?BxT$#Ee@M?bS^sGCe{;i&F@8+Ni+X$+cP74+YfkcK zJ@kDZuk_~d`TtP<7pUFHoAF|jH*vF+zjcf|^bj3!v!rL7prikq=!lz>^t2m#lXgIF zDxPhB#u>i!cN1UY<|P01o2vXPUZHkR{uQ-6>yIyaGyY8SCT=$J9~nPyUlZfUe8>GU zeoV#d{v&$Hd;0z%Jst)xzd7`#mS^>hGkh6;CcebYhW}9iW1M~P;TV7B&CjYcD{d-Y z_aD+TPCl?G`oH<1TcZD)iWl|xGJZ^aDc79j|G~ADzM^%emS_DhP`i;glkH>o#zv($c!GkodqCcebYiT-N$%pP_ecLX?|UZ3kEwW3k1ylT#Fui- zN&c*dzRyFI-W)#vAIhI`M&67Ule~$WrTnd9+@Xi)h?^z-wHhbr=)Wd9;^rhh?S|f@ z9nhPl_G6skOMf@+0D!XZSMyOnix( z4gaC>!#F$gbc{dq%WE_k6gL&G`w!_ECtung{og$LWQ-qE@uD7I#-E8V<(iZHSr2`m z4^?_|`22q;f5sVkGhR&cCT^DUw~ld#9-<>|mh{(ZoS>usn&^m|lk~J3dXsiQZhd0IeGfzLR&aAkpc-?KC`zLaZD^8bV9LT_4UDxURcoRK%<#UyXyW+{K`7wKQj<`8VPrIQvsW*DF)P9UJeCh8dzQoN*{v{t#-E8VakJq+G=4PB zW|tmLi>Pt9Z2J6*3|N%9)FF$sgn$ zr_!6l=l?_bYn-LLHD3B8Z{lVtf9o{vk{+TXZkF^KCrPLN+b25W<|IAshu)+;(3_?9 z(>P1M>hFExOWd5~f7Z$HH_uVKC;y6yXSYATCXV)TDg@uD7I#*K+D<(iZH-+nywrgf&`S%1bEdB0WT#UyXyW+{K`7wKQj<`8VPrIQvsW*DF)P9UJeCh8dzQoN*{f zXOcH@vyuPE_*uU)#*evSUyL79@%r{3(O+?W=*=rN9(DYiH5Je58E5!1{!Dy{n{K74+v@;CoRsU(T5NBJyU;^`=0SP8}~ntwEsU?5%o7eyDRcC z6)*a8-zWa&FFYRpX5;?P5&z$*{LOz=`J0Lt{kiWAf0O&(sK42`|82zo_n(jYn}2Xa z)ZbLR=>Lrk;cs%^5B{d&8GZ8Uf6wpl`!5Lp8B_6$KKZ2k9#sE6x$i;#>HY`Uxc{M9 z|C#Sp`)PmE=iAprUZ$28{nxEX^`9~M-WOj}@r*uv{5_AkrSdlw&*;NP-*2(~)AwJH z@4fIhwLGH_|GkH!{^rN$B5o?4(T9)b_mjWLyg&Y?;u(GTc%IMvN0q;+ct#&S%zILA zlX*}4&Bpxa$oBuIYCpEW`Q)>am#KKspLrkrP3C>@HyiUmBmTb5Gyk8;-&DNluj||7 zZ*tv>zo~depXxa~tM*g<`&{%?#7!;F=#x)6?^pf%HHry&i|YB?;qzkRC!!g z`J0Lt{WA3;lto9>rYI)s%NPnH?+R*dM;3hia zW=W6FF6EEExm)=YHx)1Xqr=}shre0U<8ydL_?y4JEBsBxi~i{FH__p5mh||4>-q3E zzkNgan~E3x(cy2R!{03F=^LEKcl^qO~s4;=XQ}LodI{Zy^_?soY{Ab_2J^A-}?UTuW z*3|Nnf6~dnPjvE6dT9OGdPR%gQ=fiq@(P`D4c>co*3n*nmZDlKejVhh`dYll-*XxD zvh+)+x-1;Wtu+*6TQKtvbHr)<_*^-neXvIyTp;Io9epcCC>*HrE+*6TQKtvbHr)@U6YYh~)# zSgYn(uj9D2M(g;(p=s*aSgYn(uj9D2M(fyED^thDS~bUd9mlOTQb*?2Cm%bSYtXnpSgnHbLi(h(Wm)7V|_o-JGc5CL&wXBdXBMtt{U`(sWjxdae;Y$ z*CW%{(|PK5+r2%f&hvf8r`L>YPtDP^@}xceE|h7v0quGJ0`vTd{q6HS*kT*94aoEF zADZ50Tzh_Y>GXPU_pj_}ryFM=Vd(QY- z%@+N0X2rttoLPQN`#jgS*oIaAocYc@)BB8R&zUvHrq{bY{p?Sh_Pk|*d4Bl9_Id7a zu?^jxdvBcHXIy*kdu)2W+tc@ww`tEu7ntYIztBF(H+Y{rW8h{a<=|Vg4EY)c(|8 zp9R%_jDBi=@*kt0y8Scysr_Hs{+jEo?hmc)1E+3(+HZ`0>h@>*jnPl-pV3e4PyQbp z-DgehpV3e4PyP$>&*-Q2&uqU|^&hkSruNTlzp4E*`lOV$5wLkSAqi+ye#zE%Cl=v(#wG5V?f*?!-8Xkp`jjDBi=w*MG?tNM@8Pwh|r z$F$$n{u%w${?vaV{u%w${;zC*-QP05p#DEjKXvOV$5wLkff(YLDq82!}#)PGF-P3@o2Pwk)CepCBr^i%u4vi)`6^{R#S|1tWh z+n?<>M&D}tkI_%8JLm|Bq?Esr@thsr_Hs{(s@y zfA-zIh4ue2`Zn8tLH>*%`_Jh)igRasdcVbMXM6o;DlR^A)4cwVPkQ!1PhfCAw|@P5 z$L^?irPFu(C0#0Do?j}zefO5?jA1(E2Q|mG{0Pc>cC}ODsb3)t&vk9G#q*j?m1ip@ zp8Cbb@Lb>4Q@=GC^=zfYQ@=JBo>#Q>)bH$tXDcP1`em)~+|brjzbO`;t(18FOM70~ z*7I1e@@%EVQ@@}R^}MRB=Qp=jo~@L!e;uQ7GJ#qu=3Rt6zLwR>DyUvL9FWAPAlJ8z45H_-O$!| zR&RT&eA{X9y|V9nWozGeY_)GgtM@IGj;lPQc9_;AZQ7KQJ zTGsfyZTI%piNr#_3WmUCr@B@^Bhqw>Gf8gIlJWdd*}52|Mt#5=#J_>?|VT=uf%H* z;)i9BjY7Z(Lu>&8WQW)S%YbWQWCu?aoA#AJIKmd*nQKIT1h+(Zk+@txK%T0 zq9i0$9hxW!u9cK#n1&{rlxfJ+O-afhO5&N)ls{-fOrOs=``kUd_nvd_T@l;qaA(Bx z^6WnQoOAZ<_x#wiyQfyGsw=8DrhixS%bWKfESrnt?c{w>;knN0bziNjGqzPjD3bndLz$*p*M<8^>3(_pTc{VCq3YK+H0&wD1T$fy3T{4YCHRVO|W-lth(JkGL1#<0DpKj*QiHC#$c^w^jb(!)Pk`h@l({`l`|u!TWTF=<{yW_N;#SmYDyQI~pY4@WxX9=bsJl z60T0Yy1_NKXzEG4QQz7Q{;O2Y^*)h1@A}BXotG}$d+EZJ3p*DU{iF%CnX`U&{q=~r z_g?S4abfegyk@3X@CD(%TrWDL4TB-X{_x@Tp5>?-nMAbKisOo3_$3|7^0nv{XMRYVV20mM>(L0(L9ZihlvwF@l zI-E_*6f( zRk&a&mbXTo;W+3y-k4UQ6_rnUI!5EwyBj1L!y8LcSrI2hQ1&O1g8YLwicizu@_#v6 z1WLwEpf%zTZxo-^qnX|Jbk+buScuV0IeGVz?E#qK`yN@@FStF(I@p{@r$UsJuYgtBrQ zBiE@kq*U$0)IQyu)^#lC=T%*GcX2|WfvZ}-9{m)Q{rV}V9tiKYQ9tF{nffV2Z@JFg zzagbjm+jwVMvctC&kf758MSeqUKusU_EguV+Ew@KjLkJWuKarR?_T!)0kx3+fstBL z*RX)%!*w(+{j@3M`;}4SE2GBNI90KtdCMlf1=phKqA~q5{dz=Wl>MSHbzbpo=BPTw zsPXm5sPXmH8OxV5u)q7RJqvs8`u;m^Te$n)VRUWvp7(ADrBE#@PyB>~%XJxwH$taZ zXG{N)18lCUkG?R(pc8LoLstK>wNdwp#UTcrcwr_)UwEVVR6pYX(a%@a z$G7Sn)OfE(ANU)^r}~yZJtwVn;r(|*{JD*qBNT7c_Eg{UpI=v1KfA1|?o!^32XE2n zN4!yds&DyIf5<2G$M_}vKfFB zzqA<7zp>=c`F>=pwCfxE<%eTEFlu|&-{+b0k3UGc!5d5doOjOCzueK_&+m`*!Km%2 zf2;fsKOW2NH`g^txxpJd<=4_{ty3ufUw^JabnwQK9v{v#{>I-{`r(b@v+4iJvZ~_W zZ>h|T>EHGCqW*}=4~-FDbVl)6JsS4?1LfbC9;@D-)&Ehg|BG4=qK7x?xT(HXf5%)u zgA0y?>&HmFO7*Str|V>JzT$@NQ4aC-iXZSsZBO+r|1sCk;Ns2U`Y{&$b^Q$9Fdwd; zAzrd8Tt5S&wx|BB^#8k`iRu2e7aJtq@WxL1TYAN|kndkT+8{c3V@Z$C8s!&%Bjpco z6rZNQ^^K7gd*Zi@zP!4@)0KaCqrQ2R>RaW%Ti8prqTYAmx3~pHr zGd@H7!sB5kXkgU#)W21J>IV%zur<7=V~BtM;m|)C7_~jC|A_~q{uj12hz{P^(YMl1 z|K+}Iq2Dq@;wZdP+f)Bm`O|LQd%nJ>^Nf%hxq14f_`As_N@N* zbe;U*zNj~T`pK{ocVHA>)Q|J$xcGw||5p8Z?V<2Jf@=NI2G2jN`8)AOea9g6AJN~t zUpMrmH-7wJ)EmX8`qug9J34A#24`+>kah>&*lB-S`o|s#*DZRk|A1V#@W#^h%XdZi z@jVeE^&Z|RKAZmfx((^qbsCWC7T(yoep~6Uue+cl7E%uQ!W%o+UwZxWPT1;3#j4X5 z8@%a|zDp`@yI;iZAL9uZ?=+Z!AW=QG8av zaZ&j`qpB`{u)+VisjA?O+Md;GJz3CG2RIIh4&GSO%jbj(pAY^+yjaJ9H)?yyKj`E; zM0D~Gda$I|jQ`*vrB`=Phxk)Bhr6c(qqb-L6=Mef>@k)96Ak{@S2g|+Z`Agz{_PuM zKjpe@4gRw9@J97xGJ3TwI@iiOs}P5H6YFWj8?`;7kJs5x9*WnW@ry?zZxmn92QOX! z#*mh9{VGkuz!&t@;L7LX^=o{~>UjMc#pm?Zor+n%x1|2hx(1Ivtrg7TjoO~o?^oN2 z{)ZK>jp*QwB|ScWsj|l3_`Di#c%%5DKRW!4=G6Ndw&-uXTJ0~qQGC%K9sWji_!>)keEz|f=x^NdQ1my7FZ!dy--r%> zV@Z$yKi(MqjSuXP{zmade{}d8(cy0_>GA*B_0ivW@V@A86kqg5hrbaW{>G9X|Npc) z`Wv6z9sP~si~i{FH=@JeSklu@J*K`A?U(T@TVwlW6rc5fXRW8*LJy*YHwH=RF3$aEZ?U zQiH#wzB9a0+q3?kelF^MWOak+;Eg5yXE#=Z-+H(T^EbxFAFC>Oqxh^p`+fa0QD5T; zgGYki$o7){gq8OP{SfDs9v$}tqqZ0I*X@aV<2#ie^hWVT{d;bSdgIMX4|=2cqW-ft zM!oTKN)LLY_@e#`S4X|^VWkJXQG8MVUoVMz;~yzK=#AntdioZjf1&=5k^YDO9&Rt_ z!?#I7|4IFvfL}Zs^+xx9R#nwmYnJc&;0G7@*w4bh0FB%^YlJk6@S4``>%=L z#JlyQA6&R>Vbel;-yd2EJ9}TgpT|na%e7l_XOF#n2SP_&6_2>k`g-1%){ouis`NO& zJAR+d={|ZEHuZ9f^pmB>{+_Cp|?(8L{Rmt~r561eUv`t(I(_Pi_1FCzP$MQLusAt9Q&V#dQ zx}KkSO7mxRA7Pp_+jAC8*OS$T|N6l6`RwW!)n*)z{vO4ML-n|Bnml*?IZwa%O#k## z=0E#nf4$N_IDdw7HYWXpi$=e3a(VJ?h2pmn<}}~FdQ?C4yCwepfwB6j-))l7PwlUJ z%7gchp1-N{PyM^+$jJH2>bYi~P;i(<(>-U@+4FYH?m0#?Z8>>fts9S~Jx@9PO#Vsx z=Xf}i{}}xY{-G^Cj{J|+&)`4y`&={S-}9F};#@d?W6EzP|1tW%OZjJh=s3=Qm|yDZ zXURYF%3b{|Lx>ON7ylM!RJ=CdK6dp_LGXF0Xi|JoPsxz4ME z_I!9jefyc!>S3-PsuynEd3XB=x>mGbOaLh|gX)YGG^jF`Rlg_`jB8~Z4? z9tpESJv`OrtNLFn8h6Wc#&r=MP=uV+6cp8w>QzMlP*c>Y|72{T@0mFjIzC7!=~b>DpU zQ_?zo`O!X}v=050v<@eIzNcqTC7$2Cudio6rOqd7{dz=AVqZU{zNzN^L>@qzt~s#-mmpl{^(cxDu43HzRExBRTJnZ=+~nTA?x-NR&?JK(|$VTtmWhG zBKYaQWPMb;521T=;l6~?>pG0$!}xSAj_*49c#P(r2**mfW`1P6e){_(wSHuMp4RX6 zUf-v8*oJjzH(t`^_Ajgy{lp@zQd2L9VT=d$X#P;0|;E~10K=BG|+ z?r$lQx9_VU&+fNW-y345bV zG5_IuKQ4dIH>!#<-&CHHpu+SUp#`P>^D@QkI<*sKjq2Gky+w3ac-3{hBBs--Cs)1x z2Hpg^>#mRPTd40IO{e8~Hr+EhrPgZ7Xf{3R*4$j3?#^3gC*+xQYkj}d-F{>C1TE>l z=SVBvGwFGbE{@+d*H*`$39aiXP3x){Hl|grs`nm^t;zc~G)QX#Z|t-xNvj(7qg6p~ zq%}cr?6fK^JteB+SKsqugZRQ5C;6*31b?GyR`jn?e7K6|hF4+pP62#L_bo3pNV?&T zo%Cx?w9zY>)w`aEPnj6E-3MD$M)9eCNB`1Ge{&GMQNxDqQ6DkzslL^!(t5o{{->;N zaNV)^)TU9}vwB+fzbm~GwL){DRW7y1UKMg#+GbNb^$VpiO=JAJ{$H z`UiaaXm%cKeCntiZ5u{Ck^2{i%%Fp4FcyJ@M$&0}Y<}jNaWL-l*+a{WZ0YbZ{IH9lWum$A^FD zj2wr*jru$Fza-5+`)#Rxjnpi7qxhm;U)89->u~tGMnI0^1j{F<(hc}k=E;r6Up5RLTgExv#{Vz_-Z`q-$dh^k$dc(#BiKg&IZO`hzV_Qrs zqkPf~qJuYz&+2bFR8{ZTANv5t8+1Lu8^ve!_>lgqH#A5(oUVF%R!=_3J9W*-@mwzT z_N-n{yaXNjM(=WfCmr?nte)e~FGYXj8QY@2QG8a<@zLRHLG7}gI7E))bk*Cl z{**8K;BQ0^Zxo-^bDq)B2Q{wH-|$B9sa|hlY5H`;SUrVQy?3s`>z|4JIit2`^(RTs zyQ)@5Z(MUk?-&zr6ra`m-FeJZpa;>x8%ug(H#+LR5goj-q$kFsqd#jz2X8Ft$tP(h z|3=>b2X7Q#%s;yHA3E}HEa}N7TJmp12X8Ft$tODUZ$t-gEa}N7agzKS>8HaR#TWCB z4sRnm@^38Z&pH@&Yn5K~AUb$sNzW6+=+4tWBRY6vNq^zfQFqbq2GPMAOZqpijk-70 z`2f+u8%z2(&qe)P9%>LBys@OGo@jfhKSp%$#*&_Tf{yxQL8U6Dqy8Avzw7PA z`olidA0v9|k5PP9Pd!0Ly)mMLHDqJuY<^wbk{#2+I%cwq2_)>q2C4c54&}r@65YfRKOM2=Fdg_l69lWumr=Fmr{ut50 z8%uiX2|DVJ5goj-q^F*sqy8At!5d3@>IpjPj}aZbv81Q|T)R8gAEWEEQGE9NQ-A0y z5`Tf~jEpA#QI|tpFRK7 zpR05X+Akw{hc}AP>d7a*yr-zYw-C!hF|eixW%Ndl2X7Rg)icM*Jz?e=jN}8} z*tsV>lK&Ie$9x+(4*55V&-#;3bfn)%KH!Zd{ptJTTkFnT+aTozZ`6J3tUqaF-u#^H z4WffLYI{~syMN*8s5f#vc%%5No^R)$XZ1>jBHAuO^8$0b^tNySbahm>)k#^L_t+!|WNhkG&dkseN;e6HG zvwDty+6$^{O23hGI9>Jjtp5DNG48XDg!m7VZ+K%T{J}pys=dN^gD@@q}xb7;Em$5{;yt)*DCdgYZjy&;f><6dg>|X4V{tWz#GM9^;|3L zNBuG43vU!()Z@!40wc%qalw*5=NTR4XQUkAjV1j>yJNj)-%Z=2hVuw-6rW8$`;lJS zJ|oBRaqI0_{S`_(b?r*!(@4F8H;T{d86)BM)};o~!5d5I|IQt;?xLp-`#A6%x89!h zf8*L%Pf7oq4mSCKCqMP}te$(V=t!?IT#Mq3;h!)-`KC9pIbgXOF?rxCt4sX0@cV5rBhYPhYdZYFa z>mZEcv;K_n&et*Cc0+?42i~addA-g%`KI0(IUe=FSjs;f>m!^(Wu7 zJ?M=b58fy~tLHq?PBZp3k`JHPdV5ySIp)4C=ij*INIdt(&i&g~`^7n;ugSGyBo4tF z#b^Dgx5Q2KMven-EX7aqhmQ0c$p^f#q^FG}os^%Ea)dXE&!(SxLVttvWu*M!jivq* zKID`7XCxg?SG~RHPrlI`IS&5DQvSJ4(UE>5`G7Z;^we{7)L$d@7~a^?zbRcmLA%Sj zqOWh{T*4d0r}=N`>F1zh>}f;?Z!GCK?;96myf9u?#rj|rpY>|o^DgExxL>ZvDqQ-6$%8{m!NvwGGo(f2y_K!e0Bc%!yw z_1yE}+;2V7;CVYV{ugi5_N<<9CV6MvZCtlLjz5j!vwFr2=WJJ9f2Kj&U3jCmXZ4&T zd^zVveBq5Hf65(i=DLmao#Bn*v;M>w%AU5~NZf-riqGoL-4b=21N0y|cwEHGCH2p0-K3q5W8Yz2tW9Ry5=}(e3*9~($ zMy?xpW9Ry5>6vHZx?%pw$aMp66rW8$<4fu}vC_!34{sEo)l)ubDKjJ2BfL?3R)6y0 zSZ`@7sJ|ff7T(yYzpeaJPP7x0pOJPG-Y7on&w0X=^Jk>}gExxL>d7ZM@^3^3Z|vwh z&s4;7_r47cdfl{9=Qj0k>9sa6tea)NY{P*#Z}!f`s)9F)&+3_X3uCv{4N{ljjh*?+ zmOn9rzAo|Jh%dZReAb_9oG}o3BgcU^iqGna7wD*~M$!#$Ea|yM(1rPm8c8?2v83mk zM^F4U;tOvq>8U5^$g2@wcwO=Zg$G$7E;+*X@ zjstHLU(};ry*nNQhG+cekRWj<8P!bg*S@N z>ccqmg_!r#Y9#&eM)6ra?F{**{V}40H;T{dxlZunx-nj$`Uh_mpVc$}OkWwjk>kJ{ z#h3MK+w)}{$Hxu0Hm|3DFt7Ad)<(wR@J8`jf6g)E9Lmbbd4M;H&+6%);YG|GqV$0` z7TO>7!J}pys>ost)Gk69c>-gABZo!v2^{pt)>rwKZwrdT5r#$pK%ht8y6cy4{t2_ zQ_kd*IB!Jf^HOim`qRH7-RO-R2i{mJKl(|e|2n1DNZSo>ETx|~fp7Z!AmaV^3d=a*X7PfJf9%l$qh{Rw!Z_-y)J&(iCkzu}D~f6g;LoPXnmPsj6b z6rc4!-t-@@e~VHtr=qJ8!LxZ08GHQF8|BgPsizI!2K(79de=h^?wK!R4KrPr5 zZ+~EK`f2JLPJH77`*IIfqZj8q=icj?;Z`%0!Q|R@svw-U1=y?1h20qod@=qiuokaSG@i@y483SL` zU;AX#8%a0EHHuI5tvmhPX&XErTV>x)-+-u01%J1E){t}ngx*W36PH4%x-k&77qPW7$mbmFn-b<%yt7%5IXW*qT9UVSS%QD$6I ztbs9dmiZaQr|EC$ski7TcOyD@qxhiL^;*0F7h6}L62K9ADC;x@WnDj2W~H8nd`PkC z_4P76P5-8=*L;UL>b_?tU0pIsPjJHZuqO5~k}nJTYG|E}Sz>K{HI3+XorYL#R4+8f z>Kes|5*nxHIw#gMvuz~C!y6sz$LTM4R{hh*bw@;Pg^@QW!W+eB{n?K;8oiNx1bvOA zwu<%)Uq)a?eBq59|JJB5v}r0Q+B(V&yl-19Kco0;`Y9*g6O6y{WB14MGm6jZb;*Rb zo*p-CKIk^ySZeFh|I`^#XZ+$G*s3y$FZe53J%!%rK8i8$slHWyZ`JuD-`A+zjN}{M z*vbEhp7Vy@$azC=ES_CQ4xMmwRf>S&Pc zvnkz&5u1M9<6M#Mb6H`ZrP_;qj_3W$rydyljlAspiy1%8%iJ>y%AeoaT-2~C?4BdT z{7$VoZ^vw!yCv_zB!JCjE;*&@o9XTI2PtO{34FTw^sW~KSN`K z&@+k{<77G(_Sj)u`-uJ>UyFJp>4rCoPt)J(Esh%tGX{k>4%%bEmY({cYd`F7yzuFm z9;5iwzm{!iG9R2qhqO2 zeCpqdiQ{6b=M{~UVk%>mSLPRAnO__~Gx^H=;-vUbOjUn8=@(BKQ?K~ejj3lm8vCh6 z$5NyCG$u`qsT_x2#L4~CxlJ)9MjVZ);#2>Tm`v;=rWzefjp9@N#F)BK%_}j|I4P!{ zw7N?OH~mzj_-y{^k1~HkKh;Qo z)&19cd(dkRAnm7Kxv*(m&-2oUqg&j2*iZG`elmYTd+afQ_AbsCfAjCzxD-`6zlHm$ zaqNFhJ%*nytSI?)gm6x1tlp!}=NS*%&!n{EXsL z|CXL8fR5;3LUCGx?Uuu)gbD#%q9cI^iB>(p#Xe$GVT^m3x@+x}fJmoiwVp zh4Ph9+Q{rvq^w)z_y{?C-oBeu-x~^b9`{Jzv!X`#HjU!b>!=kMS-F9Zl~zV{@Wzs!HI=OJ;_j!B6<+Yh(n>G(hJ z%m%zse475GU5grKOn45=NV@qM#i#lt4zQQv$5ZHy@i=VB%*3?XHJ+nZuRJ`HWMoDK z-dO6jvu=6SXX5_GS3MHfGaJRH>2LY7?jB#Br843RZ!GzrdO$s1{bPUQnj`UVqxh`< zxS1e);f*E#l{@0-jQts!;63J+5Ew-h;kwjitNy#4WBH@@k|k;f^rRadePJUyc%%5BU!`4=m4Z{<9T~1D8?!fQ zZr@8O?M(@__a652#vGe=Eg8|K_i4uLO-iQUo0KGb&oEl1Rq40F5oO{z#R|uDCta(X z9pM+&NYpjdXR^l;>N07Gik_cAC2!>sHRVqw)*M`X`3JRu1X`Q zdPRAUyJjf+t(u^X*H?bkOMQFYlbJ59bv%;p+L?4KcZAq2-E6ZTv>}T5(#?36?#l6f zTk0!)LQ2j^pAgKn2jzxtd7q)!NM)aG#Z>%R3!-;j2cd>P%Q7{#ahv3G#a>D=Qy5&mAaIH){v$Ql24()3?>HM+`^VFNV{fdwpwF z*mNHQpXK-u2x%V`;ogJ<|P?FwQkzuoUxS6rcLHV&W@z>6*K9uiT|ep5+>e zsjfxS#i?&rO#O!3rSl5i&EsP#E0O4*^2CFY{wch%)K6tUe&~(#PvMQ?(`$O9pGxfG z9aKigQlt1(KQ^Xbd?dy~ABVI|6H`ee{nPb(jPW=ponb8Z)6ieLEb5J<8{Q~BP5($t zJ?-AR9_vxo{ z-sq=-KJUg!{Zw7;p?_+;U`YXC%XBLrXv>MEdhUFPtbBksYJ14PM&`pgs7(v^`kr^v zpQ9xmxAH-IzpN`CxVrky<)EBxE{A78D9zboD&v0rdh}CK_V1@Ee>0E$sq;}cWj}Se z@*$}OzQZ+k<-@x56o%eZvOd-<{-%c2zx3)FyYhim3aoZuCa%xQhxHnLbElU(P2b3s z534rBbf0|K7-xHlcFg+L+td8FqT}k_QFq!4#;D_t5Bhq0R)5yPs9U?)7}2I^Go^Y$S7Fb!@4RXI(TDA|C-wWoZ25m2X8Ftd5&$x9$khn zHb^?)joO~g|LNyP-I@0{hz{P^(YMYYD_>rGrqUbA8l)b3MNGXt>rXjzuF1D?&5``5x&(BpgVJrS`vYoS{f&Irz_{p5X%oF8hNzn6zjgJGi{9wCk|UP&=kLU0v7C9oB;^jCdVuKNp!lpm<;;)#8^b%d#2dwD_2iSfM*5BOOELdO@j*W+ zdhdOi)@k9ZUVaZxqIW-~&QVV#(c7NWMsJ<#r~5^3)#YB%TXk{z=0hfOc8%h*dNlk)V@&_9w`cXV3~P==f1_7p8O3MyL`Xc)8u5oWiqGoN%x#MM z8q;Id+f#k3)%J{3TK{N$`9%!%vY?MMQPh8Cq(IkuV`)Z;mXdnMxi?b(;EkR7*GfOp z9_`8<4N`C5jh*__(xc@c`x?`~>+K=`YBh&5T6+K5nAJ&YJvu9&O6#OFQt0gcx3*5I zI96*vCq(4yH(Q2sw%M}o$|p+OXIrJ+W93s_4}89+S{uZ9m~{;jDOLM0wNE#vbsY=( zc~#fRPw{hA>(^tB5M{qP!cz|@vW0uuv#l#4ddpS)lxym?bNW0+-IQ~SXDwfT_w9>& z?znB|!mW4g+jGa>+ZXP>cl^DZPbdkDZ9ciHK_Vu+QQN~AnH!#wX8rvS-%y38D}Pj_ z$^BdK@=K};-YCAP-=i@JI^*KHs5go)>hJwp)Eh}V{zmad{i9!vdgHGtJ?M?%i~6rT z8TH2BR(jAI#TWH2J{I-Hmy{m#M)4*6V8tUrKg3l^kMskhwioqVAC7wC^-2$Vqxe+c z>gjAztModhmv2}Y&%Zf-Bfuy=)wg;o+m&{{eer>14bob|8@0Wt#|ORflJle9C_byd z=0NoQKIMaSfcU~2JN~Vfa`&OQ--qWKWNj0?QO8OBNA&ojH{$E#f+hbuRQBwD=Z*&P zg*Q&}r`+&2^42|kjh*sqrQhX;AL(~`rY*nkk~i;Sf15mw+~I&XcHYU}@@K!ZpO1PY za|Q55@!9g{{qgv|Rb^q1i^Ahkz@u`1Hzi(O8-E&KW=-`bdJwEhE z@i#i(M)6sH^3Cs~%C8Y$c%%5No^;|%`i;!Fz#BXMt&!qoIymhNZyhv#+l%_fjQ-y! zKJ|ZV`b|z^{JW3E_RIL5Eiv{R#TWHIuJcd(XZ*tYs5go)>i_s))EoaqX(wGq@g@D> z_4|W`hii~v-*vT%KrmuYaeXzJt}{Aqqb-Dyptb2-vltCgEyA+`26^;=x_Xj zjt6fPU-UYhm*KKR?wbH{IwLR;9r_##zSzwygD9=uU}R*w%l{Eg_~jV1k^JF05!!#e*uherBM@J8`j|4%;`bw9GYL3HrO zlK!(BmDl;I`rNh#88^clwLR<4evF&Z8;Rxc#?JV;)qb%b<7V_m`Y!NB@kM{e&FGE4 zru3jUcE-;m{*0T^8yPpFH+II)BYMWo=#7k<(Hq5=(jUgn(hrewv-Dy740guPUH<{& zX7onJ&FGBcQ~y@~fBBZ!?`5W+{x8V572eqC|F-n3J4DAiLnGrLc%${2JDk_^uY7mr zQWa0V=1_BRk5=&)p0lLqE$5J8DOM*>%<2uHR7QWSbOf;xhp+xXU~Zgrn;}@?HgMy zp?$Kg2tFB2F>Rd|*FHtfc{?<-S6cGtEBh(&>{mi~_EWNIOntzf=Tmq8dMLLZ3FDt0N_uo}U5DrQ z@7-0!e&}@d_J@}GD)GE^zOQFLC7wU{VqedGN<4r5YkfWYDe?TzU+wGJPl@OMezLD; zKczeeXNGH~N4@Q-#PiLM^vq{ZWj#LZaeWfOG^*>N#B<-WK1w|MDe?TxXZw2gQ&Mj= zqV7>b#J+w?R$l0N!ycX}_kO0YQs3t4>G`XB`YM0xmcGib-`G<*Sb23{<#pq0g64lp zy*E9_LQT*rquckkTF(hOp6b-PNS%|rKC0Q6Fj8Nko8Tv%u%h{L@rLy8ignbUP4d$( zt-JH5ZH%izSl7ks5HR?NH+EKsjOcY42Az@h#~jxvKBQGQJ?PuE?k=M_`DXQh6J(~0 zpHbUW{n#hN(>LgFJbn?&>p)rg7~foEjO&?ad4mzN$gCVQl5UP`6rZNQwK`|qI%Hkz_E3JSrdmgv z%(tfR1bo@Q-K2ZhPE~Q0>|*Pg7_Lj7PvvLIQ97mRQmlLWss*JOH@{Tz8`pkJp;Y9N za%5~fLCLkC{LQ?2le!;u+0~ovsJc4&jxjUtj;v#!3SYS+ltftR&AZ+C8TDs+WsZF+ zJbnLnh)Rn@7hP40{A=lx$U6T0-z(}T#3P2M#Z&)QWb)Iy={JmtYCIPfam4?4^_|EP zifUL^l$p!T*eSo3o;u5~TmJCq>+REBLwkL9fq9|&*F%|l*4L5BtaKew(t5YO>h$$> zU77Cs<9+y1H`{ZzTtiW}we}n7VO+SP>1|wC=^MtKdrH0V?cXGZ*qo%kE+ACWGj`1ERO=_yzI$*&P# zcw@<*bmBw$jaMFu={Jf`{YT3GiU(r(8+r2!=`o5=^{w=i&+8tI`8V?18oW__R!{oT zk$xjOcw#_!Xy;Em!_|B>?lUgd%M zZ+ySADyq5O^FvwG5rj`SPR!5d3@%Ab7VZ~USwTwq8~@Q`F+E1{slHYItaeAoDt03}cw0%iZA9L9ll0%>A#X5A6DG3ip}`BZPDK-zUYq*e1V0`8rS$6?r$#i+s5w0IMnIL9fx_xN&7IXncHVcVblG{ z>z|2v?s|D2(lcov(lcov(v#aqn6x?- z=}GpP>b~u{ThtyN7^csf;yvYzrg(pNa}S@4rs%`d7_;Ulqbd4u&5!XZYUY>5YKmo@ z(G-0+KUb`u{hW@`6n!{9V>HG5WHdz|&d;nq8BNiLb2`SSsNwvK(G<%dqbd4uPQQ0) z_H#N$Q}p5djL{VHlhG7?I6t%cWHdz|&gmGRqK5M`MpG<Df)1J z#%PN9$!Ll`oS#{JGMb_f=X8uuQN#HeqbZg_Mw9jFt|q0Q>hXly{)uhtl=>O`oBn)1 z|FQb1{pn{PPyRFd8T`klKYPx*H35e@!zUrF#*Kk@_j|)a=~2dwNrN_EX}i-?%%FQ+W1M;(7fueLedr@zlt* zXFfAZ&ApUr0xMWFlcT#*cg(bcg;`HM^Q^QMRiQ|gMn*oFR&s)p zdtr)aFWdT+>YnQ4>ZEE_bwPFR@b4?Cm6g71F!F4t@7ljDeRqqRmhem8GD=kCXVjme zmsUrY)*6)mdnCTcnJ*IXK4uaeQB`yH^q8aeUl*d+Og>gM@}}rr>MjT)-Q}7xmPg6W419 zU*kF3quwY!qmOro(Zw%fH0j_B>FG{uht!l^~QLv>J(pBFp5vpKdN6J?@+EY z>T3iDYXVqFK@-xdgb z)}M8Loa=NAA;)X}h3#4Wnj>*v$_@?43J!Rq_<}zAbFGmMt{INwfNq$S*i4;c8Y z|LOaq?##8us3-p%r{12?M-A60`x;+&U*wIQ>%Ue0Z_MjsKJg;|Mwh8ke5U-O4?6sf+Mmh)|-KLl?S zpZbsJ`HshmIj!2Pk>mKdp!lqw>xTAw?dAsYg*SHE@0Ne4<0?M%#7rLtp5xZrv;J&X z|1!Lh+sJWz++MB<`i-1FBggY`!A}3Nh0P5^KBvYd>Jlc)NxMG*V|KlGP@P)kNe%m@WlY-#n|b8kLam;^#6?K z?eK9UiqH7RdUEcT*w-_X4(g9ld{$4~*6~~YZ;k_R)b^|%AN0gqBRY7a_^h6Dj4u60 zy5Wr_J?W&bgm_yc$8x^v?HT`AzANQN`5RyJMC6U)Gy3R5j3MS3NsrS7iZAN9_DH{x zG%mfWgl@wpRAf?ThtF8G&XTB z#=nxjNx#RD)SC;IV)`SN_0&7!1lOMt9lTL|n*SvIv5u2Z>W>i}b>ApHt3ST-BhJNg zTesdAeW`c&*W0uHKL35ok9<1cM(5ku$$wJ+VwzoVjjp%GPW^3_|M8ta{9_vW*1uWG zzrOq3xpV1t);eM1=JLnv&A4Lvy@@25+5R!drVspW;lAmudt$B4r<(bpdf&TS`|1p* z_aDe1^PB2Z>CVBu#p9lH(v~IVjbB*tO?niAr7NeWt0Qe1)1WJ+t*fK7`lNIEQtmpE zRpoGsbKg}`54y?;&qC_C;MQ9(m#OJtPN{WGjfn|^^VJTjO{g(kGufCjCMFCvtPL^I zNX$s}V`Bn+d13W%L{7WGE)Mg9K6QE&W_ zr=#8|zNr7_2czEj<8`0XD88sa`cTvx|I6X%ZxmnD|F`{7Z~WtfQEwDq(ht_&7xY6s z=b@k<7_~jsx1MC0U#GVCaka_&8srI7cw^^D)DeAnf=_xQPw=5PcAn%L(SPZI=x^k` z#ORIUi|PNXT~Tk;dl!S=C_bZCIX$KR;FD@sFKO`f^CNH6_KaR_zP!=1TEfV;R^g3# zee~HRE&j%<&WOBGe9<2r{>H1$i2laBKKk%975>H#EQ`ERe9<2r{zjfkB>%>|KKk7M zaP&8R>iNhU#TWh2;cxuZ^U>d!*GHcNpNam)pMEy-M)5^|bod*8`q}7j%OtFZ!dy-}vW`M}K2pAAAP$w*>zo zp7LnqjoM!F4?6h|@svk{|G;SdDusnL%hUH)yXQl{K)>KJy4R9)?m1rnOl~jfr`Rh! zR`P^dAzk^s(qsMMfoal}-zz!R;M}F*vAj|{yV90&smBE_y}wn>hqla~wmzCKt)Jbe zkLItc*?nfy=vq==Omjmsogc=uvuUEwrtP!)%%+Jx+i#fNXEsgrxqtKQKC@|}&w&lI z`^=_^K98@R-DfsU^f@*+yU%Qz;4?V+g_(VZn)%^)EFD32M}EtF` zO{ZjB{Q0LCZQgo!N7)&*cRhKJhDOFx-rMz@LaA>%M&+fg)J~!N?(MbmvRRe-{$%vL zd{*U;ZLXD@W>x;dhFW>WtjhnswpLy_qjGTeT&=vSrJV2#L1D&X3gw4;Ju89duN)$^ zBX3Td!t<{m?4wkpF)~Y1Un>(l$IY)yr^NG$W2AQ0_xR%3Pl>0VUg+uBPl@LzpXlq^ zPl@NhI^5T@pAygic(AW$KP8@j_E2BXeo9#mUbVlc=ZJD-F7o2!y=)g(nv1;qu6q}D z?%H+t!mbZ~uo^oT$^9sPM2;E}YuBbY=Vtr3t-Jd_f=k9+xnGvlx%VeG>E$17FZr)lVLZI^!3QM!ivdNk6#qxu757 zTUH1Cz^Lu1zBL!jdScD-hqX{f)^)%e#b@=reTV&c+R%96)A6l5M)6raKKJgA{>G0V zjQ&RPSv~&yc1M3B$ALGB&+762veL_1FyoOIqQ6mmR*w(+k${Kx2L@*k7_ znf%A-XYr?fI-c`Clb$(3`WBie44%{V>-jqByVuh{nsxkw^3QklRVohl=-1<^sM$|R zG##hxtQqLe5}dmwtOH&3n&rFn{l<-T&uqH637+16{S6gbJ$&7notVP+V{3ypem62b zs}r>Ne)NT*Z+nJff|mS#Ww(7Vn>oL~y?^N2p5K`4J2-Q@eJ`KYcd%yj(6>E1GGR|^z-$Fhh01O?VPEP&s7$#PoqvzIHPmJ`LU*tvP1nTez&TxWkd&W z6rbu_eVpSRBYf(T*uVRM8ymdokluPK-dG-Ecx+(w*udDd?REZJ>HpLvQTGEk8lw(> z#u)YXH2H4dUmf1~x7o+P`|0SfYcQk(#24OJ^8XhP#r-t45Bq}`N(*n) zank&^%8xojANLowHR!&rv2P!jL(|sKf7UOgp>O}dbtuu#)IN{V&(J^}8O=3;tZm$nEHGCRIf5`+D)GC;U8 ze@8avzthLMvO05xzj2|zGiQ!(j=x-IZfwp^Jf<|N1i+a>rQrvre|K`eY+3dH E00W(EO#lD@ literal 0 HcmV?d00001 diff --git a/compiler/datasheet/server_scripts/files/temp/sram_2_16_scn4m_subm.html b/compiler/datasheet/server_scripts/files/temp/sram_2_16_scn4m_subm.html new file mode 100644 index 00000000..1fd87db0 --- /dev/null +++ b/compiler/datasheet/server_scripts/files/temp/sram_2_16_scn4m_subm.html @@ -0,0 +1,116 @@ + + +VLSIDAOpenRAM

sram_2_16_scn4m_subm.html

DRC: skipped

LVS: skipped

Ports and Configuration (DEBUG)

+ + + + + + + + + + +
TypeDescription
WORD_SIZE2
NUM_WORDS16
NUM_BANKS1
NUM_RW_PORTS1
NUM_R_PORTS1
NUM_W_PORTS1
Area0

Operating Conditions

+ + + + + + +
ParameterMinTypMaxUnits
Power supply (VDD) range5.05.05.0Volts
Operating Temperature252525Celsius
Operating Frequency (F)*unknownMHz

Timing and Current Data

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ParameterMinMaxUnits
Cycle time234
Access time234
Positive clk setup234
Positive clk hold234
DIN0[1:0] setup rising0.0090.009ns
DIN0[1:0] setup falling0.0090.009ns
DIN0[1:0] hold rising0.0010.001ns
DIN0[1:0] hold falling0.0010.001ns
DIN1[1:0] setup rising0.0090.009ns
DIN1[1:0] setup falling0.0090.009ns
DIN1[1:0] hold rising0.0010.001ns
DIN1[1:0] hold falling0.0010.001ns
DOUT0[1:0] cell rise0.0790.079ns
DOUT0[1:0] cell fall0.0790.079ns
DOUT0[1:0] rise transition0.0010.001ns
DOUT0[1:0] fall transition0.0010.001ns
DOUT2[1:0] cell rise0.0790.079ns
DOUT2[1:0] cell fall0.0790.079ns
DOUT2[1:0] rise transition0.0010.001ns
DOUT2[1:0] fall transition0.0010.001ns
CSb0 setup rising0.0090.009ns
CSb0 setup falling0.0090.009ns
CSb0 hold rising0.0010.001ns
CSb0 hold falling0.0010.001ns
CSb1 setup rising0.0090.009ns
CSb1 setup falling0.0090.009ns
CSb1 hold rising0.0010.001ns
CSb1 hold falling0.0010.001ns
CSb2 setup rising0.0090.009ns
CSb2 setup falling0.0090.009ns
CSb2 hold rising0.0010.001ns
CSb2 hold falling0.0010.001ns
ADDR0[3:0] setup rising0.0090.009ns
ADDR0[3:0] setup falling0.0090.009ns
ADDR0[3:0] hold rising0.0010.001ns
ADDR0[3:0] hold falling0.0010.001ns
ADDR1[3:0] setup rising0.0090.009ns
ADDR1[3:0] setup falling0.0090.009ns
ADDR1[3:0] hold rising0.0010.001ns
ADDR1[3:0] hold falling0.0010.001ns
ADDR2[3:0] setup rising0.0090.009ns
ADDR2[3:0] setup falling0.0090.009ns
ADDR2[3:0] hold rising0.0010.001ns
ADDR2[3:0] hold falling0.0010.001ns
WEb0 setup rising0.0090.009ns
WEb0 setup falling0.0090.009ns
WEb0 hold rising0.0010.001ns
WEb0 hold falling0.0010.001ns
AC current234
Standby current234

Characterization Corners

+ + + + +
Corner NameProcessPower SupplyTemperatureLibrary Name Suffix
TTTypical - Typical5.025_TT_5p0V_25C.lib

Deliverables

+ + + + + + + + +
TypeDescriptionLink
.spSPICE netlistssram_2_16_scn4m_subm.sp
.vVerilog simulation modelssram_2_16_scn4m_subm.v
.htmlThis datasheetsram_2_16_scn4m_subm.html
.libSynthesis modelssram_2_16_scn4m_subm_TT_5p0V_25C.lib
.pyOpenRAM configuration filesram_2_16_scn4m_subm.py

*Feature only supported with characterizer

\ No newline at end of file diff --git a/compiler/datasheet/server_scripts/files/temp/sram_2_16_scn4m_subm.lef b/compiler/datasheet/server_scripts/files/temp/sram_2_16_scn4m_subm.lef new file mode 100644 index 00000000..562ace7d --- /dev/null +++ b/compiler/datasheet/server_scripts/files/temp/sram_2_16_scn4m_subm.lef @@ -0,0 +1,9314 @@ +VERSION 5.4 ; +NAMESCASESENSITIVE ON ; +BUSBITCHARS "[]" ; +DIVIDERCHAR "/" ; +UNITS + DATABASE MICRONS 1000 ; +END UNITS +SITE MacroSite + CLASS Core ; + SIZE 231500.0 by 299900.00000000006 ; +END MacroSite +MACRO sram_2_16_scn4m_subm + CLASS BLOCK ; + SIZE 231500.0 BY 299900.00000000006 ; + SYMMETRY X Y R90 ; + SITE MacroSite ; + PIN DIN0[0] + DIRECTION INPUT ; + PORT + LAYER metal2 ; + RECT 186200.0 8600.000000000002 187000.0 9400.000000000002 ; + END + END DIN0[0] + PIN DIN0[1] + DIRECTION INPUT ; + PORT + LAYER metal2 ; + RECT 208000.0 8600.000000000002 208800.0 9400.000000000002 ; + END + END DIN0[1] + PIN ADDR0[0] + DIRECTION INPUT ; + PORT + LAYER metal2 ; + RECT 56800.0 220500.0 57599.99999999999 221300.0 ; + END + END ADDR0[0] + PIN ADDR0[1] + DIRECTION INPUT ; + PORT + LAYER metal2 ; + RECT 56800.0 242500.0 57599.99999999999 243300.0 ; + END + END ADDR0[1] + PIN ADDR0[2] + DIRECTION INPUT ; + PORT + LAYER metal2 ; + RECT 56800.0 260500.0 57599.99999999999 261300.0 ; + END + END ADDR0[2] + PIN ADDR0[3] + DIRECTION INPUT ; + PORT + LAYER metal2 ; + RECT 56800.0 282500.0 57599.99999999999 283300.0 ; + END + END ADDR0[3] + PIN csb0 + DIRECTION INPUT ; + PORT + LAYER metal2 ; + RECT 7599.9999999999945 28200.000000000004 8399.99999999999 29000.000000000004 ; + END + END csb0 + PIN web0 + DIRECTION INPUT ; + PORT + LAYER metal2 ; + RECT 7599.9999999999945 50200.0 8399.99999999999 51000.0 ; + END + END web0 + PIN clk0 + DIRECTION INPUT ; + PORT + LAYER metal2 ; + RECT 36900.0 19600.0 37499.99999999999 29100.0 ; + END + END clk0 + PIN DOUT0[0] + DIRECTION OUTPUT ; + PORT + LAYER metal2 ; + RECT 179200.0 68800.00000000001 180000.0 71800.00000000001 ; + END + END DOUT0[0] + PIN DOUT0[1] + DIRECTION OUTPUT ; + PORT + LAYER metal2 ; + RECT 186000.0 68800.00000000001 186800.0 71800.00000000001 ; + END + END DOUT0[1] + PIN vdd + DIRECTION INOUT ; + USE POWER ; + SHAPE ABUTMENT ; + PORT + LAYER metal3 ; + RECT 181700.00000000003 131300.0 182300.0 131900.0 ; + LAYER metal3 ; + RECT 188500.0 131300.0 189100.00000000003 131900.0 ; + LAYER metal3 ; + RECT 181700.00000000003 149700.00000000003 182300.0 150300.0 ; + LAYER metal3 ; + RECT 188500.0 149700.00000000003 189100.00000000003 150300.0 ; + LAYER metal3 ; + RECT 181700.00000000003 168100.00000000003 182300.0 168700.00000000003 ; + LAYER metal3 ; + RECT 188500.0 168100.00000000003 189100.00000000003 168700.00000000003 ; + LAYER metal3 ; + RECT 181700.00000000003 186500.0 182300.0 187100.00000000003 ; + LAYER metal3 ; + RECT 188500.0 186500.0 189100.00000000003 187100.00000000003 ; + LAYER metal3 ; + RECT 181700.00000000003 204900.0 182300.0 205500.0 ; + LAYER metal3 ; + RECT 188500.0 204900.0 189100.00000000003 205500.0 ; + LAYER metal3 ; + RECT 181700.00000000003 223300.0 182300.0 223900.0 ; + LAYER metal3 ; + RECT 188500.0 223300.0 189100.00000000003 223900.0 ; + LAYER metal3 ; + RECT 181700.00000000003 241700.00000000003 182300.0 242300.0 ; + LAYER metal3 ; + RECT 188500.0 241700.00000000003 189100.00000000003 242300.0 ; + LAYER metal3 ; + RECT 181700.00000000003 260100.00000000003 182300.0 260700.0 ; + LAYER metal3 ; + RECT 188500.0 260100.00000000003 189100.00000000003 260700.0 ; + LAYER metal3 ; + RECT 181400.0 112000.0 182200.00000000003 112800.00000000001 ; + LAYER metal3 ; + RECT 188200.00000000003 112000.0 189000.0 112800.00000000001 ; + LAYER metal3 ; + RECT 184100.00000000003 81700.0 184700.00000000003 82300.00000000001 ; + LAYER metal3 ; + RECT 190900.0 81700.0 191500.0 82300.00000000001 ; + LAYER metal3 ; + RECT 182500.0 30500.0 183100.00000000003 31100.0 ; + LAYER metal3 ; + RECT 181900.0 47900.00000000001 182500.0 48500.0 ; + LAYER metal3 ; + RECT 189300.0 30500.0 189900.0 31100.0 ; + LAYER metal3 ; + RECT 188700.00000000003 47900.00000000001 189300.0 48500.0 ; + LAYER metal3 ; + RECT 130100.0 131600.0 130900.0 132400.0 ; + LAYER metal3 ; + RECT 130100.0 150000.0 130900.0 150800.0 ; + LAYER metal3 ; + RECT 130100.0 168400.0 130900.0 169200.00000000003 ; + LAYER metal3 ; + RECT 130100.0 186800.0 130900.0 187600.00000000003 ; + LAYER metal3 ; + RECT 130100.0 205200.00000000003 130900.0 206000.0 ; + LAYER metal3 ; + RECT 130100.0 223600.00000000003 130900.0 224400.0 ; + LAYER metal3 ; + RECT 130100.0 242000.0 130900.0 242800.0 ; + LAYER metal3 ; + RECT 130100.0 260400.00000000003 130900.0 261200.0 ; + LAYER metal3 ; + RECT 89700.0 131600.0 90500.0 132400.0 ; + LAYER metal3 ; + RECT 107700.0 131600.0 108500.0 132400.0 ; + LAYER metal3 ; + RECT 89700.0 150000.0 90500.0 150800.0 ; + LAYER metal3 ; + RECT 107700.0 150000.0 108500.0 150800.0 ; + LAYER metal3 ; + RECT 89700.0 168400.0 90500.0 169200.00000000003 ; + LAYER metal3 ; + RECT 107700.0 168400.0 108500.0 169200.00000000003 ; + LAYER metal3 ; + RECT 89700.0 186800.0 90500.0 187600.00000000003 ; + LAYER metal3 ; + RECT 107700.0 186800.0 108500.0 187600.00000000003 ; + LAYER metal3 ; + RECT 154400.0 131700.00000000003 155000.0 132300.0 ; + LAYER metal3 ; + RECT 164000.0 131700.00000000003 164600.00000000003 132300.0 ; + LAYER metal3 ; + RECT 154400.0 150100.0 155000.0 150700.00000000003 ; + LAYER metal3 ; + RECT 164000.0 150100.0 164600.00000000003 150700.00000000003 ; + LAYER metal3 ; + RECT 154400.0 168500.0 155000.0 169100.00000000003 ; + LAYER metal3 ; + RECT 164000.0 168500.0 164600.00000000003 169100.00000000003 ; + LAYER metal3 ; + RECT 154400.0 186900.0 155000.0 187500.0 ; + LAYER metal3 ; + RECT 164000.0 186900.0 164600.00000000003 187500.0 ; + LAYER metal3 ; + RECT 154400.0 205300.0 155000.0 205900.0 ; + LAYER metal3 ; + RECT 164000.0 205300.0 164600.00000000003 205900.0 ; + LAYER metal3 ; + RECT 154400.0 223700.00000000003 155000.0 224300.0 ; + LAYER metal3 ; + RECT 164000.0 223700.00000000003 164600.00000000003 224300.0 ; + LAYER metal3 ; + RECT 154400.0 242100.00000000003 155000.0 242700.00000000003 ; + LAYER metal3 ; + RECT 164000.0 242100.00000000003 164600.00000000003 242700.00000000003 ; + LAYER metal3 ; + RECT 154400.0 260500.0 155000.0 261100.00000000003 ; + LAYER metal3 ; + RECT 164000.0 260500.0 164600.00000000003 261100.00000000003 ; + LAYER metal3 ; + RECT 69200.0 39200.0 70000.0 40000.0 ; + LAYER metal3 ; + RECT 69200.0 79200.0 70000.0 80000.0 ; + LAYER metal3 ; + RECT 69200.0 119200.0 70000.0 120000.0 ; + LAYER metal3 ; + RECT 31500.0 142600.0 32100.0 143200.00000000003 ; + LAYER metal3 ; + RECT 31500.0 161000.0 32100.0 161600.00000000003 ; + LAYER metal3 ; + RECT 31500.0 179400.0 32100.0 180000.0 ; + LAYER metal3 ; + RECT 31500.0 197800.0 32100.0 198400.0 ; + LAYER metal3 ; + RECT 12400.0 142500.0 13200.000000000002 143300.0 ; + LAYER metal3 ; + RECT 18800.0 142500.0 19600.0 143300.0 ; + LAYER metal3 ; + RECT 12400.0 160900.0 13200.000000000002 161700.00000000003 ; + LAYER metal3 ; + RECT 18800.0 160900.0 19600.0 161700.00000000003 ; + LAYER metal3 ; + RECT 6000.0 124100.00000000001 6800.000000000001 124900.0 ; + LAYER metal3 ; + RECT 31400.000000000004 122700.0 32200.000000000004 123500.0 ; + LAYER metal3 ; + RECT 17200.0 129100.0 18000.0 129900.0 ; + LAYER metal3 ; + RECT -400.0 39200.0 400.0 40000.0 ; + LAYER metal3 ; + RECT 59700.0 231500.0 60500.0 232300.0 ; + LAYER metal3 ; + RECT 59700.0 271500.0 60500.0 272300.0 ; + LAYER metal3 ; + RECT 189100.00000000003 19600.0 189900.0 20400.000000000004 ; + LAYER metal3 ; + RECT 210900.0 19600.0 211700.00000000003 20400.000000000004 ; + LAYER metal3 ; + RECT 0.0 3900.0000000000005 168000.0 8100.0 ; + LAYER metal3 ; + RECT 0.0 13500.0 232800.0 17700.0 ; + LAYER metal3 ; + RECT 0.0 23100.0 232800.0 27300.0 ; + LAYER metal3 ; + RECT 0.0 32700.000000000004 177600.00000000003 36900.0 ; + LAYER metal3 ; + RECT 194400.0 32700.000000000004 232800.0 36900.0 ; + LAYER metal3 ; + RECT 0.0 42300.00000000001 177600.00000000003 46500.0 ; + LAYER metal3 ; + RECT 196800.0 42300.00000000001 232800.0 46500.0 ; + LAYER metal3 ; + RECT 0.0 51900.00000000001 177600.00000000003 56100.0 ; + LAYER metal3 ; + RECT 196800.0 51900.00000000001 232800.0 56100.0 ; + LAYER metal3 ; + RECT 0.0 61500.0 232800.0 65700.0 ; + LAYER metal3 ; + RECT 0.0 71100.00000000001 232800.0 75300.0 ; + LAYER metal3 ; + RECT 0.0 80700.0 232800.0 84900.0 ; + LAYER metal3 ; + RECT 52800.00000000001 90300.00000000001 180000.0 94500.0 ; + LAYER metal3 ; + RECT 196800.0 90300.00000000001 232800.0 94500.0 ; + LAYER metal3 ; + RECT 0.0 99900.0 64800.0 104100.00000000001 ; + LAYER metal3 ; + RECT 74400.0 99900.0 232800.0 104100.00000000001 ; + LAYER metal3 ; + RECT 0.0 109500.0 64800.0 113700.0 ; + LAYER metal3 ; + RECT 182400.0 109500.0 232800.0 113700.0 ; + LAYER metal3 ; + RECT 0.0 119100.00000000001 84000.0 123300.00000000001 ; + LAYER metal3 ; + RECT 170400.0 119100.00000000001 232800.0 123300.00000000001 ; + LAYER metal3 ; + RECT 40800.00000000001 128700.00000000001 69600.00000000001 132900.0 ; + LAYER metal3 ; + RECT 86400.0 128700.00000000001 105600.00000000001 132900.0 ; + LAYER metal3 ; + RECT 120000.0 128700.00000000001 232800.0 132900.0 ; + LAYER metal3 ; + RECT 40800.00000000001 138300.0 69600.00000000001 142500.0 ; + LAYER metal3 ; + RECT 170400.0 138300.0 232800.0 142500.0 ; + LAYER metal3 ; + RECT 43200.0 147900.0 105600.00000000001 152100.0 ; + LAYER metal3 ; + RECT 122400.0 147900.0 232800.0 152100.0 ; + LAYER metal3 ; + RECT 40800.00000000001 157500.0 84000.0 161700.00000000003 ; + LAYER metal3 ; + RECT 170400.0 157500.0 232800.0 161700.00000000003 ; + LAYER metal3 ; + RECT 43200.0 167100.00000000003 72000.0 171300.0 ; + LAYER metal3 ; + RECT 86400.0 167100.00000000003 105600.00000000001 171300.0 ; + LAYER metal3 ; + RECT 127200.0 167100.00000000003 232800.0 171300.0 ; + LAYER metal3 ; + RECT 0.0 176700.00000000003 72000.0 180900.0 ; + LAYER metal3 ; + RECT 170400.0 176700.00000000003 232800.0 180900.0 ; + LAYER metal3 ; + RECT 0.0 186300.0 31200.000000000004 190500.0 ; + LAYER metal3 ; + RECT 43200.0 186300.0 105600.00000000001 190500.0 ; + LAYER metal3 ; + RECT 129600.0 186300.0 172800.0 190500.0 ; + LAYER metal3 ; + RECT 196800.0 186300.0 232800.0 190500.0 ; + LAYER metal3 ; + RECT 0.0 195900.0 84000.0 200100.00000000003 ; + LAYER metal3 ; + RECT 196800.0 195900.0 232800.0 200100.00000000003 ; + LAYER metal3 ; + RECT 0.0 205500.0 31200.000000000004 209700.00000000003 ; + LAYER metal3 ; + RECT 43200.0 205500.0 172800.0 209700.00000000003 ; + LAYER metal3 ; + RECT 196800.0 205500.0 232800.0 209700.00000000003 ; + LAYER metal3 ; + RECT 0.0 215100.00000000003 43200.0 219300.0 ; + LAYER metal3 ; + RECT 76800.00000000001 215100.00000000003 124800.00000000001 219300.0 ; + LAYER metal3 ; + RECT 196800.0 215100.00000000003 232800.0 219300.0 ; + LAYER metal3 ; + RECT 0.0 224700.00000000003 172800.0 228900.0 ; + LAYER metal3 ; + RECT 196800.0 224700.00000000003 232800.0 228900.0 ; + LAYER metal3 ; + RECT 0.0 234300.0 172800.0 238500.0 ; + LAYER metal3 ; + RECT 196800.0 234300.0 232800.0 238500.0 ; + LAYER metal3 ; + RECT 0.0 243900.0 172800.0 248100.00000000003 ; + LAYER metal3 ; + RECT 196800.0 243900.0 232800.0 248100.00000000003 ; + LAYER metal3 ; + RECT 0.0 253500.0 172800.0 257700.0 ; + LAYER metal3 ; + RECT 196800.0 253500.0 232800.0 257700.0 ; + LAYER metal3 ; + RECT 0.0 263100.0 172800.0 267300.0 ; + LAYER metal3 ; + RECT 196800.0 263100.0 232800.0 267300.0 ; + LAYER metal3 ; + RECT 0.0 272700.0 232800.0 276900.00000000006 ; + LAYER metal3 ; + RECT 0.0 282300.0 62400.00000000001 286500.0 ; + LAYER metal3 ; + RECT 84000.0 282300.0 232800.0 286500.0 ; + LAYER metal3 ; + RECT 0.0 291900.00000000006 55200.0 296100.0 ; + LAYER metal3 ; + RECT 64800.0 291900.00000000006 232800.0 296100.0 ; + LAYER metal4 ; + RECT 4200.0 0.0 7800.000000000001 302400.00000000006 ; + LAYER metal4 ; + RECT 13800.0 0.0 17400.000000000004 302400.00000000006 ; + LAYER metal4 ; + RECT 23400.000000000004 0.0 27000.0 302400.00000000006 ; + LAYER metal4 ; + RECT 33000.0 0.0 36600.0 302400.00000000006 ; + LAYER metal4 ; + RECT 42600.0 0.0 46200.0 302400.00000000006 ; + LAYER metal4 ; + RECT 52200.0 0.0 55800.00000000001 302400.00000000006 ; + LAYER metal4 ; + RECT 61800.00000000001 0.0 65400.00000000001 302400.00000000006 ; + LAYER metal4 ; + RECT 71400.0 0.0 75000.0 302400.00000000006 ; + LAYER metal4 ; + RECT 81000.0 0.0 84600.00000000001 302400.00000000006 ; + LAYER metal4 ; + RECT 90600.00000000001 0.0 94200.0 302400.00000000006 ; + LAYER metal4 ; + RECT 100200.0 0.0 103800.00000000001 302400.00000000006 ; + LAYER metal4 ; + RECT 109800.00000000001 0.0 113400.0 302400.00000000006 ; + LAYER metal4 ; + RECT 119400.0 0.0 123000.0 302400.00000000006 ; + LAYER metal4 ; + RECT 129000.0 0.0 132600.0 302400.00000000006 ; + LAYER metal4 ; + RECT 138600.0 0.0 142200.00000000003 302400.00000000006 ; + LAYER metal4 ; + RECT 148200.00000000003 0.0 151800.0 302400.00000000006 ; + LAYER metal4 ; + RECT 157800.0 0.0 161400.0 302400.00000000006 ; + LAYER metal4 ; + RECT 167400.0 0.0 171000.0 302400.00000000006 ; + LAYER metal4 ; + RECT 177000.0 0.0 180600.00000000003 302400.00000000006 ; + LAYER metal4 ; + RECT 186600.00000000003 0.0 190200.00000000003 302400.00000000006 ; + LAYER metal4 ; + RECT 196200.00000000003 0.0 199800.0 302400.00000000006 ; + LAYER metal4 ; + RECT 205800.0 0.0 209400.0 302400.00000000006 ; + LAYER metal4 ; + RECT 215400.0 0.0 219000.0 302400.00000000006 ; + LAYER metal4 ; + RECT 225000.0 0.0 228600.00000000003 302400.00000000006 ; + END + END vdd + PIN gnd + DIRECTION INOUT ; + USE GROUND ; + SHAPE ABUTMENT ; + PORT + LAYER metal3 ; + RECT 178300.0 126700.0 178900.0 127300.00000000001 ; + LAYER metal3 ; + RECT 185100.00000000003 126700.0 185700.00000000003 127300.00000000001 ; + LAYER metal3 ; + RECT 191900.0 126700.0 192500.0 127300.00000000001 ; + LAYER metal3 ; + RECT 178300.0 135900.0 178900.0 136500.0 ; + LAYER metal3 ; + RECT 185100.00000000003 135900.0 185700.00000000003 136500.0 ; + LAYER metal3 ; + RECT 191900.0 135900.0 192500.0 136500.0 ; + LAYER metal3 ; + RECT 178300.0 145100.0 178900.0 145700.00000000003 ; + LAYER metal3 ; + RECT 185100.00000000003 145100.0 185700.00000000003 145700.00000000003 ; + LAYER metal3 ; + RECT 191900.0 145100.0 192500.0 145700.00000000003 ; + LAYER metal3 ; + RECT 178300.0 154300.0 178900.0 154900.0 ; + LAYER metal3 ; + RECT 185100.00000000003 154300.0 185700.00000000003 154900.0 ; + LAYER metal3 ; + RECT 191900.0 154300.0 192500.0 154900.0 ; + LAYER metal3 ; + RECT 178300.0 163500.0 178900.0 164100.00000000003 ; + LAYER metal3 ; + RECT 185100.00000000003 163500.0 185700.00000000003 164100.00000000003 ; + LAYER metal3 ; + RECT 191900.0 163500.0 192500.0 164100.00000000003 ; + LAYER metal3 ; + RECT 178300.0 172700.00000000003 178900.0 173300.0 ; + LAYER metal3 ; + RECT 185100.00000000003 172700.00000000003 185700.00000000003 173300.0 ; + LAYER metal3 ; + RECT 191900.0 172700.00000000003 192500.0 173300.0 ; + LAYER metal3 ; + RECT 178300.0 181900.0 178900.0 182500.0 ; + LAYER metal3 ; + RECT 185100.00000000003 181900.0 185700.00000000003 182500.0 ; + LAYER metal3 ; + RECT 191900.0 181900.0 192500.0 182500.0 ; + LAYER metal3 ; + RECT 178300.0 191100.00000000003 178900.0 191700.00000000003 ; + LAYER metal3 ; + RECT 185100.00000000003 191100.00000000003 185700.00000000003 191700.00000000003 ; + LAYER metal3 ; + RECT 191900.0 191100.00000000003 192500.0 191700.00000000003 ; + LAYER metal3 ; + RECT 178300.0 200300.0 178900.0 200900.0 ; + LAYER metal3 ; + RECT 185100.00000000003 200300.0 185700.00000000003 200900.0 ; + LAYER metal3 ; + RECT 191900.0 200300.0 192500.0 200900.0 ; + LAYER metal3 ; + RECT 178300.0 209500.0 178900.0 210100.00000000003 ; + LAYER metal3 ; + RECT 185100.00000000003 209500.0 185700.00000000003 210100.00000000003 ; + LAYER metal3 ; + RECT 191900.0 209500.0 192500.0 210100.00000000003 ; + LAYER metal3 ; + RECT 178300.0 218700.00000000003 178900.0 219300.0 ; + LAYER metal3 ; + RECT 185100.00000000003 218700.00000000003 185700.00000000003 219300.0 ; + LAYER metal3 ; + RECT 191900.0 218700.00000000003 192500.0 219300.0 ; + LAYER metal3 ; + RECT 178300.0 227900.0 178900.0 228500.0 ; + LAYER metal3 ; + RECT 185100.00000000003 227900.0 185700.00000000003 228500.0 ; + LAYER metal3 ; + RECT 191900.0 227900.0 192500.0 228500.0 ; + LAYER metal3 ; + RECT 178300.0 237100.00000000003 178900.0 237700.00000000003 ; + LAYER metal3 ; + RECT 185100.00000000003 237100.00000000003 185700.00000000003 237700.00000000003 ; + LAYER metal3 ; + RECT 191900.0 237100.00000000003 192500.0 237700.00000000003 ; + LAYER metal3 ; + RECT 178300.0 246300.0 178900.0 246900.0 ; + LAYER metal3 ; + RECT 185100.00000000003 246300.0 185700.00000000003 246900.0 ; + LAYER metal3 ; + RECT 191900.0 246300.0 192500.0 246900.0 ; + LAYER metal3 ; + RECT 178300.0 255500.0 178900.0 256100.00000000003 ; + LAYER metal3 ; + RECT 185100.00000000003 255500.0 185700.00000000003 256100.00000000003 ; + LAYER metal3 ; + RECT 191900.0 255500.0 192500.0 256100.00000000003 ; + LAYER metal3 ; + RECT 178300.0 264700.0 178900.0 265300.0 ; + LAYER metal3 ; + RECT 185100.00000000003 264700.0 185700.00000000003 265300.0 ; + LAYER metal3 ; + RECT 191900.0 264700.0 192500.0 265300.0 ; + LAYER metal3 ; + RECT 185100.00000000003 95100.00000000001 185700.00000000003 95700.0 ; + LAYER metal3 ; + RECT 191900.0 95100.00000000001 192500.0 95700.0 ; + LAYER metal3 ; + RECT 182500.0 37100.0 183100.00000000003 37700.0 ; + LAYER metal3 ; + RECT 183900.0 41500.0 184500.0 42100.0 ; + LAYER metal3 ; + RECT 183300.0 54900.00000000001 183900.0 55500.0 ; + LAYER metal3 ; + RECT 189300.0 37100.0 189900.0 37700.0 ; + LAYER metal3 ; + RECT 190700.00000000003 41500.0 191300.0 42100.0 ; + LAYER metal3 ; + RECT 190100.00000000003 54900.00000000001 190700.00000000003 55500.0 ; + LAYER metal3 ; + RECT 130100.0 122400.0 130900.0 123200.0 ; + LAYER metal3 ; + RECT 130100.0 140800.0 130900.0 141600.0 ; + LAYER metal3 ; + RECT 130100.0 159200.00000000003 130900.0 160000.0 ; + LAYER metal3 ; + RECT 130100.0 177600.00000000003 130900.0 178400.0 ; + LAYER metal3 ; + RECT 130100.0 196000.0 130900.0 196800.0 ; + LAYER metal3 ; + RECT 130100.0 214400.0 130900.0 215200.00000000003 ; + LAYER metal3 ; + RECT 130100.0 232800.0 130900.0 233600.00000000003 ; + LAYER metal3 ; + RECT 130100.0 251200.00000000003 130900.0 252000.0 ; + LAYER metal3 ; + RECT 130100.0 269600.0 130900.0 270400.00000000006 ; + LAYER metal3 ; + RECT 89700.0 122400.0 90500.0 123200.0 ; + LAYER metal3 ; + RECT 107700.0 122400.0 108500.0 123200.0 ; + LAYER metal3 ; + RECT 89700.0 140800.0 90500.0 141600.0 ; + LAYER metal3 ; + RECT 107700.0 140800.0 108500.0 141600.0 ; + LAYER metal3 ; + RECT 89700.0 159200.00000000003 90500.0 160000.0 ; + LAYER metal3 ; + RECT 107700.0 159200.00000000003 108500.0 160000.0 ; + LAYER metal3 ; + RECT 89700.0 177600.00000000003 90500.0 178400.0 ; + LAYER metal3 ; + RECT 107700.0 177600.00000000003 108500.0 178400.0 ; + LAYER metal3 ; + RECT 89700.0 196000.0 90500.0 196800.0 ; + LAYER metal3 ; + RECT 107700.0 196000.0 108500.0 196800.0 ; + LAYER metal3 ; + RECT 154400.0 122500.0 155000.0 123100.00000000001 ; + LAYER metal3 ; + RECT 164000.0 122500.0 164600.00000000003 123100.00000000001 ; + LAYER metal3 ; + RECT 154400.0 140900.0 155000.0 141500.0 ; + LAYER metal3 ; + RECT 164000.0 140900.0 164600.00000000003 141500.0 ; + LAYER metal3 ; + RECT 154400.0 159300.0 155000.0 159900.0 ; + LAYER metal3 ; + RECT 164000.0 159300.0 164600.00000000003 159900.0 ; + LAYER metal3 ; + RECT 154400.0 177700.00000000003 155000.0 178300.0 ; + LAYER metal3 ; + RECT 164000.0 177700.00000000003 164600.00000000003 178300.0 ; + LAYER metal3 ; + RECT 154400.0 196100.00000000003 155000.0 196700.00000000003 ; + LAYER metal3 ; + RECT 164000.0 196100.00000000003 164600.00000000003 196700.00000000003 ; + LAYER metal3 ; + RECT 154400.0 214500.0 155000.0 215100.00000000003 ; + LAYER metal3 ; + RECT 164000.0 214500.0 164600.00000000003 215100.00000000003 ; + LAYER metal3 ; + RECT 154400.0 232900.0 155000.0 233500.0 ; + LAYER metal3 ; + RECT 164000.0 232900.0 164600.00000000003 233500.0 ; + LAYER metal3 ; + RECT 154400.0 251300.0 155000.0 251900.0 ; + LAYER metal3 ; + RECT 164000.0 251300.0 164600.00000000003 251900.0 ; + LAYER metal3 ; + RECT 154400.0 269700.0 155000.0 270300.0 ; + LAYER metal3 ; + RECT 164000.0 269700.0 164600.00000000003 270300.0 ; + LAYER metal3 ; + RECT 69200.0 59200.0 70000.0 60000.0 ; + LAYER metal3 ; + RECT 69200.0 19200.000000000004 70000.0 20000.0 ; + LAYER metal3 ; + RECT 69200.0 99200.0 70000.0 100000.0 ; + LAYER metal3 ; + RECT 28100.0 138000.0 28700.000000000004 138600.0 ; + LAYER metal3 ; + RECT 34900.0 138000.0 35500.0 138600.0 ; + LAYER metal3 ; + RECT 28100.0 147200.00000000003 28700.000000000004 147800.0 ; + LAYER metal3 ; + RECT 34900.0 147200.00000000003 35500.0 147800.0 ; + LAYER metal3 ; + RECT 28100.0 156400.0 28700.000000000004 157000.0 ; + LAYER metal3 ; + RECT 34900.0 156400.0 35500.0 157000.0 ; + LAYER metal3 ; + RECT 28100.0 165600.00000000003 28700.000000000004 166200.00000000003 ; + LAYER metal3 ; + RECT 34900.0 165600.00000000003 35500.0 166200.00000000003 ; + LAYER metal3 ; + RECT 28100.0 174800.0 28700.000000000004 175400.0 ; + LAYER metal3 ; + RECT 34900.0 174800.0 35500.0 175400.0 ; + LAYER metal3 ; + RECT 28100.0 184000.0 28700.000000000004 184600.00000000003 ; + LAYER metal3 ; + RECT 34900.0 184000.0 35500.0 184600.00000000003 ; + LAYER metal3 ; + RECT 28100.0 193200.00000000003 28700.000000000004 193800.0 ; + LAYER metal3 ; + RECT 34900.0 193200.00000000003 35500.0 193800.0 ; + LAYER metal3 ; + RECT 28100.0 202400.0 28700.000000000004 203000.0 ; + LAYER metal3 ; + RECT 34900.0 202400.0 35500.0 203000.0 ; + LAYER metal3 ; + RECT 12400.0 133300.0 13200.000000000002 134100.0 ; + LAYER metal3 ; + RECT 18800.0 133300.0 19600.0 134100.0 ; + LAYER metal3 ; + RECT 12400.0 151700.00000000003 13200.000000000002 152500.0 ; + LAYER metal3 ; + RECT 18800.0 151700.00000000003 19600.0 152500.0 ; + LAYER metal3 ; + RECT 12400.0 170100.00000000003 13200.000000000002 170900.0 ; + LAYER metal3 ; + RECT 18800.0 170100.00000000003 19600.0 170900.0 ; + LAYER metal3 ; + RECT 28000.0 128700.00000000001 28800.0 129500.0 ; + LAYER metal3 ; + RECT 34800.00000000001 128700.00000000001 35600.0 129500.0 ; + LAYER metal3 ; + RECT 36400.0 134700.00000000003 37200.0 135500.0 ; + LAYER metal3 ; + RECT 36400.0 150300.0 37200.0 151100.0 ; + LAYER metal3 ; + RECT 36400.0 153100.0 37200.0 153900.0 ; + LAYER metal3 ; + RECT 36400.0 168700.00000000003 37200.0 169500.0 ; + LAYER metal3 ; + RECT 36400.0 171500.0 37200.0 172300.0 ; + LAYER metal3 ; + RECT 36400.0 187100.00000000003 37200.0 187900.0 ; + LAYER metal3 ; + RECT 36400.0 189900.0 37200.0 190700.00000000003 ; + LAYER metal3 ; + RECT 36400.0 205500.0 37200.0 206300.0 ; + LAYER metal3 ; + RECT -400.0 19200.000000000004 400.0 20000.0 ; + LAYER metal3 ; + RECT -400.0 59200.0 400.0 60000.0 ; + LAYER metal3 ; + RECT 59700.0 211500.0 60500.0 212300.0 ; + LAYER metal3 ; + RECT 59700.0 251500.0 60500.0 252300.0 ; + LAYER metal3 ; + RECT 59700.0 291500.0 60500.0 292300.0 ; + LAYER metal3 ; + RECT 189100.00000000003 -400.0 189900.0 400.0 ; + LAYER metal3 ; + RECT 210900.0 -400.0 211700.00000000003 400.0 ; + LAYER metal3 ; + RECT 0.0 -900.0 168000.0 3300.0000000000005 ; + LAYER metal3 ; + RECT 0.0 8700.000000000002 232800.0 12900.0 ; + LAYER metal3 ; + RECT 0.0 18300.0 184800.0 22500.0 ; + LAYER metal3 ; + RECT 216000.0 18300.0 232800.0 22500.0 ; + LAYER metal3 ; + RECT 194400.0 27900.000000000004 232800.0 32100.0 ; + LAYER metal3 ; + RECT 4800.000000000001 37500.0 64800.0 41700.0 ; + LAYER metal3 ; + RECT 74400.0 37500.0 232800.0 41700.0 ; + LAYER metal3 ; + RECT 194400.0 47100.0 232800.0 51300.00000000001 ; + LAYER metal3 ; + RECT 0.0 56700.0 232800.0 60900.00000000001 ; + LAYER metal3 ; + RECT 0.0 66300.0 64800.0 70500.0 ; + LAYER metal3 ; + RECT 180000.0 66300.0 232800.0 70500.0 ; + LAYER metal3 ; + RECT 0.0 75900.0 64800.0 80100.00000000001 ; + LAYER metal3 ; + RECT 74400.0 75900.0 232800.0 80100.00000000001 ; + LAYER metal3 ; + RECT 52800.00000000001 85500.0 232800.0 89700.0 ; + LAYER metal3 ; + RECT 0.0 95100.00000000001 232800.0 99300.00000000001 ; + LAYER metal3 ; + RECT 0.0 104700.0 64800.0 108900.0 ; + LAYER metal3 ; + RECT 182400.0 104700.0 232800.0 108900.0 ; + LAYER metal3 ; + RECT 0.0 114300.00000000001 232800.0 118500.0 ; + LAYER metal3 ; + RECT 38400.00000000001 123900.0 232800.0 128100.0 ; + LAYER metal3 ; + RECT 26400.000000000004 133500.0 69600.00000000001 137700.00000000003 ; + LAYER metal3 ; + RECT 86400.0 133500.0 232800.0 137700.00000000003 ; + LAYER metal3 ; + RECT 38400.00000000001 143100.0 69600.00000000001 147300.0 ; + LAYER metal3 ; + RECT 88800.00000000001 143100.0 232800.0 147300.0 ; + LAYER metal3 ; + RECT 26400.000000000004 152700.00000000003 232800.0 156900.0 ; + LAYER metal3 ; + RECT 38400.00000000001 162300.0 232800.0 166500.0 ; + LAYER metal3 ; + RECT 0.0 171900.0 232800.0 176100.00000000003 ; + LAYER metal3 ; + RECT 0.0 181500.0 232800.0 185700.00000000003 ; + LAYER metal3 ; + RECT 0.0 191100.00000000003 232800.0 195300.0 ; + LAYER metal3 ; + RECT 0.0 200700.00000000003 124800.00000000001 204900.0 ; + LAYER metal3 ; + RECT 194400.0 200700.00000000003 232800.0 204900.0 ; + LAYER metal3 ; + RECT 0.0 210300.0 43200.0 214500.0 ; + LAYER metal3 ; + RECT 76800.00000000001 210300.0 232800.0 214500.0 ; + LAYER metal3 ; + RECT 0.0 219900.0 62400.00000000001 224100.00000000003 ; + LAYER metal3 ; + RECT 79200.0 219900.0 124800.00000000001 224100.00000000003 ; + LAYER metal3 ; + RECT 194400.0 219900.0 232800.0 224100.00000000003 ; + LAYER metal3 ; + RECT 0.0 229500.0 55200.0 233700.00000000003 ; + LAYER metal3 ; + RECT 64800.0 229500.0 232800.0 233700.00000000003 ; + LAYER metal3 ; + RECT 0.0 239100.00000000003 62400.00000000001 243300.0 ; + LAYER metal3 ; + RECT 81600.00000000001 239100.00000000003 124800.00000000001 243300.0 ; + LAYER metal3 ; + RECT 194400.0 239100.00000000003 232800.0 243300.0 ; + LAYER metal3 ; + RECT 0.0 248700.00000000003 232800.0 252900.0 ; + LAYER metal3 ; + RECT 0.0 258300.0 62400.00000000001 262500.0 ; + LAYER metal3 ; + RECT 81600.00000000001 258300.0 124800.00000000001 262500.0 ; + LAYER metal3 ; + RECT 194400.0 258300.0 232800.0 262500.0 ; + LAYER metal3 ; + RECT 0.0 267900.00000000006 55200.0 272100.0 ; + LAYER metal3 ; + RECT 64800.0 267900.00000000006 232800.0 272100.0 ; + LAYER metal3 ; + RECT 0.0 277500.0 62400.00000000001 281700.0 ; + LAYER metal3 ; + RECT 84000.0 277500.0 232800.0 281700.0 ; + LAYER metal3 ; + RECT 0.0 287100.0 232800.0 291300.0 ; + LAYER metal3 ; + RECT 0.0 296700.0 232800.0 300900.00000000006 ; + LAYER metal4 ; + RECT -600.0000000000001 0.0 3000.0 302400.00000000006 ; + LAYER metal4 ; + RECT 9000.0 0.0 12600.000000000002 302400.00000000006 ; + LAYER metal4 ; + RECT 18600.0 0.0 22200.000000000004 302400.00000000006 ; + LAYER metal4 ; + RECT 28200.000000000004 0.0 31800.0 302400.00000000006 ; + LAYER metal4 ; + RECT 37800.00000000001 0.0 41400.00000000001 302400.00000000006 ; + LAYER metal4 ; + RECT 47400.00000000001 0.0 51000.0 302400.00000000006 ; + LAYER metal4 ; + RECT 57000.0 0.0 60600.0 302400.00000000006 ; + LAYER metal4 ; + RECT 66600.00000000001 0.0 70200.0 302400.00000000006 ; + LAYER metal4 ; + RECT 76200.0 0.0 79800.00000000001 302400.00000000006 ; + LAYER metal4 ; + RECT 85800.00000000001 0.0 89400.0 302400.00000000006 ; + LAYER metal4 ; + RECT 95400.0 0.0 99000.0 302400.00000000006 ; + LAYER metal4 ; + RECT 105000.0 0.0 108600.00000000001 302400.00000000006 ; + LAYER metal4 ; + RECT 114600.00000000001 0.0 118200.0 302400.00000000006 ; + LAYER metal4 ; + RECT 124200.0 0.0 127800.00000000001 302400.00000000006 ; + LAYER metal4 ; + RECT 133800.0 0.0 137400.0 302400.00000000006 ; + LAYER metal4 ; + RECT 143400.0 0.0 147000.0 302400.00000000006 ; + LAYER metal4 ; + RECT 153000.0 0.0 156600.00000000003 302400.00000000006 ; + LAYER metal4 ; + RECT 162600.00000000003 0.0 166200.00000000003 302400.00000000006 ; + LAYER metal4 ; + RECT 172200.00000000003 0.0 175800.0 302400.00000000006 ; + LAYER metal4 ; + RECT 181800.0 0.0 185400.0 302400.00000000006 ; + LAYER metal4 ; + RECT 191400.0 0.0 195000.0 302400.00000000006 ; + LAYER metal4 ; + RECT 201000.0 0.0 204600.00000000003 302400.00000000006 ; + LAYER metal4 ; + RECT 210600.00000000003 0.0 214200.00000000003 302400.00000000006 ; + LAYER metal4 ; + RECT 220200.00000000003 0.0 223800.0 302400.00000000006 ; + LAYER metal4 ; + RECT 229800.0 0.0 233400.0 302400.00000000006 ; + END + END gnd + OBS + LAYER metal1 ; + RECT 182000.0 22500.000000000004 197800.0 23100.000000000004 ; + RECT 182000.0 22500.000000000004 189900.0 23100.000000000004 ; + RECT 189900.0 22500.000000000004 197800.0 23100.000000000004 ; + RECT 188800.0 23900.000000000004 219600.00000000003 24500.000000000004 ; + RECT 188800.0 23900.000000000004 204200.00000000003 24500.000000000004 ; + RECT 204200.0 23900.000000000004 219600.0 24500.000000000004 ; + RECT 141300.0 126900.0 141899.99999999997 127500.0 ; + RECT 141300.0 125300.00000000001 141899.99999999997 125900.0 ; + RECT 139200.0 126900.0 141600.00000000003 127500.0 ; + RECT 141300.0 125600.00000000001 141899.99999999997 127200.0 ; + RECT 141600.00000000003 125300.00000000001 144100.00000000003 125900.0 ; + RECT 172900.0 126900.0 173500.0 127500.0 ; + RECT 172900.0 123500.0 173500.0 124100.0 ; + RECT 168200.0 126900.0 173200.0 127500.0 ; + RECT 172900.0 123800.00000000001 173500.0 127200.00000000001 ; + RECT 173200.0 123500.0 178200.0 124100.0 ; + RECT 141300.0 136500.0 141899.99999999997 137100.00000000003 ; + RECT 141300.0 138100.00000000003 141899.99999999997 138700.0 ; + RECT 139200.0 136500.0 141600.00000000003 137100.00000000003 ; + RECT 141300.0 136800.0 141899.99999999997 138400.0 ; + RECT 141600.00000000003 138100.00000000003 144100.00000000003 138700.0 ; + RECT 172900.0 136500.0 173500.0 137100.00000000003 ; + RECT 172900.0 139100.00000000003 173500.0 139700.0 ; + RECT 168200.0 136500.0 173200.0 137100.00000000003 ; + RECT 172900.0 136800.0 173500.0 139400.0 ; + RECT 173200.0 139100.00000000003 178200.0 139700.0 ; + RECT 141300.0 145300.0 141899.99999999997 145900.0 ; + RECT 141300.0 143700.0 141899.99999999997 144300.0 ; + RECT 139200.0 145300.0 141600.00000000003 145900.0 ; + RECT 141300.0 144000.0 141899.99999999997 145600.00000000003 ; + RECT 141600.00000000003 143700.0 144100.00000000003 144300.0 ; + RECT 172900.0 145300.0 173500.0 145900.0 ; + RECT 172900.0 141900.0 173500.0 142500.0 ; + RECT 168200.0 145300.0 173200.0 145900.0 ; + RECT 172900.0 142200.0 173500.0 145600.00000000003 ; + RECT 173200.0 141900.0 178200.0 142500.0 ; + RECT 141300.0 154899.99999999997 141899.99999999997 155500.0 ; + RECT 141300.0 156500.0 141899.99999999997 157100.00000000003 ; + RECT 139200.0 154899.99999999997 141600.00000000003 155500.0 ; + RECT 141300.0 155200.0 141899.99999999997 156800.0 ; + RECT 141600.00000000003 156500.0 144100.00000000003 157100.00000000003 ; + RECT 172900.0 154899.99999999997 173500.0 155500.0 ; + RECT 172900.0 157500.0 173500.0 158100.00000000003 ; + RECT 168200.0 154899.99999999997 173200.0 155500.0 ; + RECT 172900.0 155200.0 173500.0 157800.0 ; + RECT 173200.0 157500.0 178200.0 158100.00000000003 ; + RECT 141300.0 163700.0 141899.99999999997 164300.0 ; + RECT 141300.0 162100.00000000003 141899.99999999997 162700.0 ; + RECT 139200.0 163700.0 141600.00000000003 164300.0 ; + RECT 141300.0 162399.99999999997 141899.99999999997 164000.0 ; + RECT 141600.00000000003 162100.00000000003 144100.00000000003 162700.0 ; + RECT 172900.0 163700.0 173500.0 164300.0 ; + RECT 172900.0 160300.0 173500.0 160899.99999999997 ; + RECT 168200.0 163700.0 173200.0 164300.0 ; + RECT 172900.0 160600.00000000003 173500.0 164000.0 ; + RECT 173200.0 160300.0 178200.0 160899.99999999997 ; + RECT 141300.0 173300.0 141899.99999999997 173900.00000000003 ; + RECT 141300.0 174899.99999999997 141899.99999999997 175500.0 ; + RECT 139200.0 173300.0 141600.00000000003 173900.00000000003 ; + RECT 141300.0 173600.00000000003 141899.99999999997 175200.0 ; + RECT 141600.00000000003 174899.99999999997 144100.00000000003 175500.0 ; + RECT 172900.0 173300.0 173500.0 173900.00000000003 ; + RECT 172900.0 175899.99999999997 173500.0 176500.0 ; + RECT 168200.0 173300.0 173200.0 173900.00000000003 ; + RECT 172900.0 173600.00000000003 173500.0 176200.0 ; + RECT 173200.0 175899.99999999997 178200.0 176500.0 ; + RECT 141300.0 182100.00000000003 141899.99999999997 182700.0 ; + RECT 141300.0 180500.0 141899.99999999997 181100.00000000003 ; + RECT 139200.0 182100.00000000003 141600.00000000003 182700.0 ; + RECT 141300.0 180800.0 141899.99999999997 182400.00000000003 ; + RECT 141600.00000000003 180500.0 144100.00000000003 181100.00000000003 ; + RECT 172900.0 182100.00000000003 173500.0 182700.0 ; + RECT 172900.0 178700.0 173500.0 179300.0 ; + RECT 168200.0 182100.00000000003 173200.0 182700.0 ; + RECT 172900.0 179000.0 173500.0 182400.00000000003 ; + RECT 173200.0 178700.0 178200.0 179300.0 ; + RECT 141300.0 191700.0 141899.99999999997 192300.0 ; + RECT 141300.0 193300.0 141899.99999999997 193900.00000000003 ; + RECT 139200.0 191700.0 141600.00000000003 192300.0 ; + RECT 141300.0 192000.0 141899.99999999997 193600.00000000003 ; + RECT 141600.00000000003 193300.0 144100.00000000003 193900.00000000003 ; + RECT 172900.0 191700.0 173500.0 192300.0 ; + RECT 172900.0 194300.0 173500.0 194900.00000000003 ; + RECT 168200.0 191700.0 173200.0 192300.0 ; + RECT 172900.0 192000.0 173500.0 194600.00000000003 ; + RECT 173200.0 194300.0 178200.0 194900.00000000003 ; + RECT 141300.0 200500.0 141899.99999999997 201100.00000000003 ; + RECT 141300.0 198899.99999999997 141899.99999999997 199500.0 ; + RECT 139200.0 200500.0 141600.00000000003 201100.00000000003 ; + RECT 141300.0 199200.0 141899.99999999997 200800.0 ; + RECT 141600.00000000003 198899.99999999997 144100.00000000003 199500.0 ; + RECT 172900.0 200500.0 173500.0 201100.00000000003 ; + RECT 172900.0 197100.00000000003 173500.0 197700.0 ; + RECT 168200.0 200500.0 173200.0 201100.00000000003 ; + RECT 172900.0 197399.99999999997 173500.0 200800.0 ; + RECT 173200.0 197100.00000000003 178200.0 197700.0 ; + RECT 141300.0 210100.00000000003 141899.99999999997 210700.0 ; + RECT 141300.0 211700.0 141899.99999999997 212300.0 ; + RECT 139200.0 210100.00000000003 141600.00000000003 210700.0 ; + RECT 141300.0 210399.99999999997 141899.99999999997 212000.0 ; + RECT 141600.00000000003 211700.0 144100.00000000003 212300.0 ; + RECT 172900.0 210100.00000000003 173500.0 210700.0 ; + RECT 172900.0 212700.0 173500.0 213300.0 ; + RECT 168200.0 210100.00000000003 173200.0 210700.0 ; + RECT 172900.0 210399.99999999997 173500.0 213000.0 ; + RECT 173200.0 212700.0 178200.0 213300.0 ; + RECT 141300.0 218899.99999999997 141899.99999999997 219500.0 ; + RECT 141300.0 217300.0 141899.99999999997 217900.00000000003 ; + RECT 139200.0 218899.99999999997 141600.00000000003 219500.0 ; + RECT 141300.0 217600.00000000003 141899.99999999997 219200.0 ; + RECT 141600.00000000003 217300.0 144100.00000000003 217900.00000000003 ; + RECT 172900.0 218899.99999999997 173500.0 219500.0 ; + RECT 172900.0 215500.0 173500.0 216100.00000000003 ; + RECT 168200.0 218899.99999999997 173200.0 219500.0 ; + RECT 172900.0 215800.0 173500.0 219200.00000000006 ; + RECT 173200.0 215500.0 178200.0 216100.00000000003 ; + RECT 141300.0 228500.0 141899.99999999997 229100.00000000003 ; + RECT 141300.0 230100.00000000003 141899.99999999997 230700.0 ; + RECT 139200.0 228500.0 141600.00000000003 229100.00000000003 ; + RECT 141300.0 228800.0 141899.99999999997 230400.00000000003 ; + RECT 141600.00000000003 230100.00000000003 144100.00000000003 230700.0 ; + RECT 172900.0 228500.0 173500.0 229100.00000000003 ; + RECT 172900.0 231100.00000000003 173500.0 231700.0 ; + RECT 168200.0 228500.0 173200.0 229100.00000000003 ; + RECT 172900.0 228800.0 173500.0 231400.00000000003 ; + RECT 173200.0 231100.00000000003 178200.0 231700.0 ; + RECT 141300.0 237300.0 141899.99999999997 237900.00000000003 ; + RECT 141300.0 235700.0 141899.99999999997 236300.0 ; + RECT 139200.0 237300.0 141600.00000000003 237900.00000000003 ; + RECT 141300.0 236000.0 141899.99999999997 237600.00000000003 ; + RECT 141600.00000000003 235700.0 144100.00000000003 236300.0 ; + RECT 172900.0 237300.0 173500.0 237900.00000000003 ; + RECT 172900.0 233899.99999999997 173500.0 234500.0 ; + RECT 168200.0 237300.0 173200.0 237900.00000000003 ; + RECT 172900.0 234200.0 173500.0 237600.00000000003 ; + RECT 173200.0 233899.99999999997 178200.0 234500.0 ; + RECT 141300.0 246899.99999999997 141899.99999999997 247500.0 ; + RECT 141300.0 248500.0 141899.99999999997 249100.00000000003 ; + RECT 139200.0 246899.99999999997 141600.00000000003 247500.0 ; + RECT 141300.0 247200.0 141899.99999999997 248800.0 ; + RECT 141600.00000000003 248500.0 144100.00000000003 249100.00000000003 ; + RECT 172900.0 246899.99999999997 173500.0 247500.0 ; + RECT 172900.0 249500.0 173500.0 250100.00000000003 ; + RECT 168200.0 246899.99999999997 173200.0 247500.0 ; + RECT 172900.0 247200.0 173500.0 249800.0 ; + RECT 173200.0 249500.0 178200.0 250100.00000000003 ; + RECT 141300.0 255700.0 141899.99999999997 256300.0 ; + RECT 141300.0 254100.00000000003 141899.99999999997 254700.00000000006 ; + RECT 139200.0 255700.0 141600.00000000003 256300.0 ; + RECT 141300.0 254399.99999999997 141899.99999999997 256000.0 ; + RECT 141600.00000000003 254100.00000000003 144100.00000000003 254700.00000000006 ; + RECT 172900.0 255700.0 173500.0 256300.0 ; + RECT 172900.0 252300.0 173500.0 252900.00000000003 ; + RECT 168200.0 255700.0 173200.0 256300.0 ; + RECT 172900.0 252600.00000000003 173500.0 256000.00000000006 ; + RECT 173200.0 252300.0 178200.0 252900.00000000003 ; + RECT 141300.0 265300.0 141899.99999999997 265900.00000000006 ; + RECT 141300.0 266900.0 141899.99999999997 267500.0 ; + RECT 139200.0 265300.0 141600.00000000003 265900.00000000006 ; + RECT 141300.0 265600.0 141899.99999999997 267200.00000000006 ; + RECT 141600.00000000003 266900.0 144100.00000000003 267500.0 ; + RECT 172900.0 265300.0 173500.0 265900.00000000006 ; + RECT 172900.0 267900.0 173500.0 268500.0 ; + RECT 168200.0 265300.0 173200.0 265900.00000000006 ; + RECT 172900.0 265600.0 173500.0 268200.00000000006 ; + RECT 173200.0 267900.0 178200.0 268500.0 ; + RECT 174100.00000000003 108800.0 178600.00000000003 109399.99999999999 ; + RECT 175500.0 29000.0 178600.00000000003 29600.0 ; + RECT 176900.0 98600.00000000001 178600.00000000003 99200.0 ; + RECT 146200.0 271100.0 172700.0 271700.00000000006 ; + RECT 178600.00000000003 122400.0 185400.0 131600.00000000003 ; + RECT 178600.00000000003 140800.0 185400.0 131600.00000000003 ; + RECT 178600.00000000003 140800.0 185400.0 150000.0 ; + RECT 178600.00000000003 159200.0 185400.0 150000.0 ; + RECT 178600.00000000003 159200.0 185400.0 168400.00000000003 ; + RECT 178600.00000000003 177600.00000000003 185400.0 168399.99999999997 ; + RECT 178600.00000000003 177600.00000000003 185400.0 186800.0 ; + RECT 178600.00000000003 196000.0 185400.0 186800.0 ; + RECT 178600.00000000003 196000.0 185400.0 205200.0 ; + RECT 178600.00000000003 214399.99999999997 185400.0 205200.0 ; + RECT 178600.00000000003 214399.99999999997 185400.0 223600.00000000003 ; + RECT 178600.00000000003 232800.0 185400.0 223600.00000000003 ; + RECT 178600.00000000003 232800.0 185400.0 242000.0 ; + RECT 178600.00000000003 251200.0 185400.0 242000.0 ; + RECT 178600.00000000003 251200.0 185400.0 260399.99999999997 ; + RECT 178600.00000000003 269600.0 185400.0 260400.00000000003 ; + RECT 185400.0 122400.0 192200.0 131600.00000000003 ; + RECT 185400.0 140800.0 192200.0 131600.00000000003 ; + RECT 185400.0 140800.0 192200.0 150000.0 ; + RECT 185400.0 159200.0 192200.0 150000.0 ; + RECT 185400.0 159200.0 192200.0 168400.00000000003 ; + RECT 185400.0 177600.00000000003 192200.0 168399.99999999997 ; + RECT 185400.0 177600.00000000003 192200.0 186800.0 ; + RECT 185400.0 196000.0 192200.0 186800.0 ; + RECT 185400.0 196000.0 192200.0 205200.0 ; + RECT 185400.0 214399.99999999997 192200.0 205200.0 ; + RECT 185400.0 214399.99999999997 192200.0 223600.00000000003 ; + RECT 185400.0 232800.0 192200.0 223600.00000000003 ; + RECT 185400.0 232800.0 192200.0 242000.0 ; + RECT 185400.0 251200.0 192200.0 242000.0 ; + RECT 185400.0 251200.0 192200.0 260399.99999999997 ; + RECT 185400.0 269600.0 192200.0 260400.00000000003 ; + RECT 178200.0 123400.0 192400.0 124200.0 ; + RECT 178200.0 139000.0 192400.0 139800.0 ; + RECT 178200.0 141800.0 192400.0 142600.00000000003 ; + RECT 178200.0 157399.99999999997 192400.0 158200.0 ; + RECT 178200.0 160200.0 192400.0 161000.0 ; + RECT 178200.0 175800.0 192400.0 176600.00000000003 ; + RECT 178200.0 178600.00000000003 192400.0 179399.99999999997 ; + RECT 178200.0 194200.0 192400.0 195000.0 ; + RECT 178200.0 197000.0 192400.0 197800.0 ; + RECT 178200.0 212600.00000000003 192400.0 213399.99999999997 ; + RECT 178200.0 215399.99999999997 192400.0 216200.0 ; + RECT 178200.0 231000.0 192400.0 231800.0 ; + RECT 178200.0 233800.0 192400.0 234600.00000000003 ; + RECT 178200.0 249399.99999999997 192400.0 250200.0 ; + RECT 178200.0 252200.0 192400.0 253000.0 ; + RECT 178200.0 267800.0 192400.0 268600.0 ; + RECT 178600.00000000003 117900.0 185400.0 118500.00000000001 ; + RECT 181500.0 112800.00000000001 182100.00000000003 118200.0 ; + RECT 181800.0 107300.00000000001 183800.0 107900.0 ; + RECT 183400.0 112100.00000000001 183800.0 112700.0 ; + RECT 179800.0 107200.0 180600.00000000003 108000.00000000001 ; + RECT 181400.0 107200.0 182200.0 108000.00000000001 ; + RECT 181400.0 107200.0 182200.0 108000.00000000001 ; + RECT 179800.0 107200.0 180600.00000000003 108000.00000000001 ; + RECT 179800.0 112000.00000000001 180600.00000000003 112800.00000000001 ; + RECT 181400.0 112000.00000000001 182200.0 112800.00000000001 ; + RECT 181400.0 112000.00000000001 182200.0 112800.00000000001 ; + RECT 179800.0 112000.00000000001 180600.00000000003 112800.00000000001 ; + RECT 181400.0 112000.00000000001 182200.0 112800.00000000001 ; + RECT 183000.0 112000.00000000001 183800.0 112800.00000000001 ; + RECT 183000.0 112000.00000000001 183800.0 112800.00000000001 ; + RECT 181400.0 112000.00000000001 182200.0 112800.00000000001 ; + RECT 181200.0 108700.0 180400.0 109500.00000000001 ; + RECT 181400.0 115600.00000000001 182200.0 116400.0 ; + RECT 181400.0 112000.00000000001 182200.0 112800.00000000001 ; + RECT 179800.0 112000.00000000001 180600.00000000003 112800.00000000001 ; + RECT 179800.0 107200.0 180600.00000000003 108000.00000000001 ; + RECT 183400.0 112000.00000000001 184200.0 112800.00000000001 ; + RECT 183400.0 107200.0 184200.0 108000.00000000001 ; + RECT 178600.00000000003 108800.00000000001 185400.0 109400.0 ; + RECT 185400.0 117900.0 192200.0 118500.00000000001 ; + RECT 188300.0 112800.00000000001 188900.0 118200.0 ; + RECT 188600.00000000003 107300.00000000001 190600.00000000003 107900.0 ; + RECT 190200.0 112100.00000000001 190600.00000000003 112700.0 ; + RECT 186600.00000000003 107200.0 187400.0 108000.00000000001 ; + RECT 188200.0 107200.0 189000.0 108000.00000000001 ; + RECT 188200.0 107200.0 189000.0 108000.00000000001 ; + RECT 186600.00000000003 107200.0 187400.0 108000.00000000001 ; + RECT 186600.00000000003 112000.00000000001 187400.0 112800.00000000001 ; + RECT 188200.0 112000.00000000001 189000.0 112800.00000000001 ; + RECT 188200.0 112000.00000000001 189000.0 112800.00000000001 ; + RECT 186600.00000000003 112000.00000000001 187400.0 112800.00000000001 ; + RECT 188200.0 112000.00000000001 189000.0 112800.00000000001 ; + RECT 189800.0 112000.00000000001 190600.00000000003 112800.00000000001 ; + RECT 189800.0 112000.00000000001 190600.00000000003 112800.00000000001 ; + RECT 188200.0 112000.00000000001 189000.0 112800.00000000001 ; + RECT 188000.0 108700.0 187200.0 109500.00000000001 ; + RECT 188200.0 115600.00000000001 189000.0 116400.0 ; + RECT 188200.0 112000.00000000001 189000.0 112800.00000000001 ; + RECT 186600.00000000003 112000.00000000001 187400.0 112800.00000000001 ; + RECT 186600.00000000003 107200.0 187400.0 108000.00000000001 ; + RECT 190200.0 112000.00000000001 191000.0 112800.00000000001 ; + RECT 190200.0 107200.0 191000.0 108000.00000000001 ; + RECT 185400.0 108800.00000000001 192200.0 109400.0 ; + RECT 178600.00000000003 108800.00000000001 192200.0 109400.0 ; + RECT 178600.00000000003 68800.00000000001 185400.0 101400.0 ; + RECT 185400.0 68800.00000000001 192200.0 101400.0 ; + RECT 178600.00000000003 98600.00000000001 192200.0 99200.0 ; + RECT 178600.00000000003 24200.000000000004 185400.0 64599.99999999999 ; + RECT 185400.0 24200.000000000004 192200.0 64599.99999999999 ; + RECT 178600.00000000003 29000.000000000004 192200.0 29600.0 ; + RECT 133600.0 127300.00000000001 134200.0 127900.0 ; + RECT 133600.0 126900.0 134200.0 127500.00000000001 ; + RECT 130900.0 127300.00000000001 133900.0 127900.0 ; + RECT 133600.0 127200.0 134200.0 127600.00000000001 ; + RECT 133900.0 126900.0 136900.0 127500.00000000001 ; + RECT 133600.0 136100.00000000003 134200.0 136700.0 ; + RECT 133600.0 136500.0 134200.0 137100.00000000003 ; + RECT 130900.0 136100.00000000003 133900.0 136700.0 ; + RECT 133600.0 136400.0 134200.0 136800.0 ; + RECT 133900.0 136500.0 136900.0 137100.00000000003 ; + RECT 133600.0 145700.0 134200.0 146300.0 ; + RECT 133600.0 145300.0 134200.0 145900.0 ; + RECT 130900.0 145700.0 133900.0 146300.0 ; + RECT 133600.0 145600.00000000003 134200.0 146000.0 ; + RECT 133900.0 145300.0 136900.0 145900.0 ; + RECT 133600.0 154500.0 134200.0 155100.00000000003 ; + RECT 133600.0 154899.99999999997 134200.0 155500.0 ; + RECT 130900.0 154500.0 133900.0 155100.00000000003 ; + RECT 133600.0 154800.0 134200.0 155200.0 ; + RECT 133900.0 154899.99999999997 136900.0 155500.0 ; + RECT 133600.0 164100.00000000003 134200.0 164700.0 ; + RECT 133600.0 163700.0 134200.0 164300.0 ; + RECT 130900.0 164100.00000000003 133900.0 164700.0 ; + RECT 133600.0 164000.0 134200.0 164399.99999999997 ; + RECT 133900.0 163700.0 136900.0 164300.0 ; + RECT 133600.0 172899.99999999997 134200.0 173500.0 ; + RECT 133600.0 173300.0 134200.0 173899.99999999997 ; + RECT 130900.0 172899.99999999997 133900.0 173500.0 ; + RECT 133600.0 173200.0 134200.0 173600.00000000003 ; + RECT 133900.0 173300.0 136900.0 173899.99999999997 ; + RECT 133600.0 182500.0 134200.0 183100.00000000003 ; + RECT 133600.0 182100.00000000003 134200.0 182700.0 ; + RECT 130900.0 182500.0 133900.0 183100.00000000003 ; + RECT 133600.0 182399.99999999997 134200.0 182800.0 ; + RECT 133900.0 182100.00000000003 136900.0 182700.0 ; + RECT 133600.0 191300.0 134200.0 191899.99999999997 ; + RECT 133600.0 191700.0 134200.0 192300.0 ; + RECT 130900.0 191300.0 133900.0 191899.99999999997 ; + RECT 133600.0 191600.00000000003 134200.0 192000.0 ; + RECT 133900.0 191700.0 136900.0 192300.0 ; + RECT 133600.0 200900.00000000003 134200.0 201500.0 ; + RECT 133600.0 200500.0 134200.0 201100.00000000003 ; + RECT 130900.0 200900.00000000003 133900.0 201500.0 ; + RECT 133600.0 200800.0 134200.0 201200.0 ; + RECT 133900.0 200500.0 136900.0 201100.00000000003 ; + RECT 133600.0 209700.0 134200.0 210300.0 ; + RECT 133600.0 210100.00000000003 134200.0 210700.0 ; + RECT 130900.0 209700.0 133900.0 210300.0 ; + RECT 133600.0 210000.0 134200.0 210400.00000000003 ; + RECT 133900.0 210100.00000000003 136900.0 210700.0 ; + RECT 133600.0 219300.0 134200.0 219899.99999999997 ; + RECT 133600.0 218900.00000000003 134200.0 219500.0 ; + RECT 130900.0 219300.0 133900.0 219899.99999999997 ; + RECT 133600.0 219200.0 134200.0 219600.00000000003 ; + RECT 133900.0 218900.00000000003 136900.0 219500.0 ; + RECT 133600.0 228100.00000000003 134200.0 228700.0 ; + RECT 133600.0 228500.0 134200.0 229100.00000000003 ; + RECT 130900.0 228100.00000000003 133900.0 228700.0 ; + RECT 133600.0 228400.00000000003 134200.0 228800.0 ; + RECT 133900.0 228500.0 136900.0 229100.00000000003 ; + RECT 133600.0 237700.0 134200.0 238300.0 ; + RECT 133600.0 237300.0 134200.0 237899.99999999997 ; + RECT 130900.0 237700.0 133900.0 238300.0 ; + RECT 133600.0 237600.00000000003 134200.0 238000.0 ; + RECT 133900.0 237300.0 136900.0 237899.99999999997 ; + RECT 133600.0 246500.0 134200.0 247100.00000000003 ; + RECT 133600.0 246900.00000000003 134200.0 247500.0 ; + RECT 130900.0 246500.0 133900.0 247100.00000000003 ; + RECT 133600.0 246800.0 134200.0 247200.0 ; + RECT 133900.0 246900.00000000003 136900.0 247500.0 ; + RECT 133600.0 256100.00000000003 134200.0 256700.0 ; + RECT 133600.0 255700.0 134200.0 256300.0 ; + RECT 130900.0 256100.00000000003 133900.0 256700.0 ; + RECT 133600.0 256000.0 134200.0 256400.00000000003 ; + RECT 133900.0 255700.0 136900.0 256300.0 ; + RECT 133600.0 264900.0 134200.0 265500.0 ; + RECT 133600.0 265300.0 134200.0 265900.0 ; + RECT 130900.0 264900.0 133900.0 265500.0 ; + RECT 133600.0 265200.0 134200.0 265600.0 ; + RECT 133900.0 265300.0 136900.0 265900.0 ; + RECT 115100.0 127300.00000000001 127300.00000000001 127900.0 ; + RECT 120700.0 125900.0 129300.00000000001 126500.0 ; + RECT 115100.0 136100.00000000003 127300.00000000001 136700.0 ; + RECT 122100.0 137500.0 129300.00000000001 138100.00000000003 ; + RECT 115100.0 145700.0 127300.00000000001 146300.0 ; + RECT 123500.0 144300.0 129300.00000000001 144900.0 ; + RECT 115100.0 154500.0 127300.00000000001 155100.00000000003 ; + RECT 124900.0 155899.99999999997 129300.00000000001 156500.0 ; + RECT 116500.0 164100.00000000003 127300.0 164700.0 ; + RECT 120700.0 162700.0 129300.00000000001 163300.0 ; + RECT 116500.0 172899.99999999997 127300.0 173500.0 ; + RECT 122100.0 174300.0 129300.00000000001 174899.99999999997 ; + RECT 116500.0 182500.0 127300.0 183100.00000000003 ; + RECT 123500.0 181100.00000000003 129300.00000000001 181700.0 ; + RECT 116500.0 191300.0 127300.0 191899.99999999997 ; + RECT 124900.0 192700.0 129300.00000000001 193300.0 ; + RECT 117900.0 200900.00000000003 127300.0 201500.0 ; + RECT 120700.0 199500.0 129300.00000000001 200100.00000000003 ; + RECT 117900.0 209700.0 127300.0 210300.0 ; + RECT 122100.0 211100.00000000003 129300.00000000001 211700.0 ; + RECT 117900.0 219300.0 127300.0 219899.99999999997 ; + RECT 123500.0 217900.00000000003 129300.00000000001 218500.0 ; + RECT 117900.0 228100.00000000003 127300.0 228700.0 ; + RECT 124900.0 229500.0 129300.00000000001 230100.00000000003 ; + RECT 119300.0 237700.0 127300.0 238300.0 ; + RECT 120700.0 236300.0 129300.00000000001 236899.99999999997 ; + RECT 119300.0 246500.0 127300.0 247100.00000000003 ; + RECT 122100.0 247900.00000000003 129300.00000000001 248500.0 ; + RECT 119300.0 256100.00000000003 127300.0 256700.0 ; + RECT 123500.0 254700.0 129300.00000000001 255300.0 ; + RECT 119300.0 264900.0 127300.0 265500.0 ; + RECT 124900.0 266300.0 129300.00000000001 266900.0 ; + RECT 125700.0 131700.0 141700.0 132300.0 ; + RECT 125700.0 122500.0 141700.0 123100.00000000001 ; + RECT 125700.0 150100.00000000003 141700.0 150700.0 ; + RECT 125700.0 140900.0 141700.0 141500.0 ; + RECT 125700.0 168500.0 141700.0 169100.00000000003 ; + RECT 125700.0 159300.0 141700.0 159899.99999999997 ; + RECT 125700.0 186900.00000000003 141700.0 187500.0 ; + RECT 125700.0 177700.0 141700.0 178300.0 ; + RECT 125700.0 205300.0 141700.0 205899.99999999997 ; + RECT 125700.0 196100.00000000003 141700.0 196700.0 ; + RECT 125700.0 223700.0 141700.0 224300.0 ; + RECT 125700.0 214500.0 141700.0 215100.00000000003 ; + RECT 125700.0 242100.00000000003 141700.0 242700.0 ; + RECT 125700.0 232900.00000000003 141700.0 233500.0 ; + RECT 125700.0 260500.0 141700.0 261100.00000000003 ; + RECT 125700.0 251300.0 141700.0 251899.99999999997 ; + RECT 90400.0 126900.0 91000.0 127500.00000000001 ; + RECT 90400.0 129900.0 91000.0 130500.0 ; + RECT 87600.0 126900.0 90700.0 127500.00000000001 ; + RECT 90400.0 127200.0 91000.0 130199.99999999999 ; + RECT 90700.0 129900.0 93200.0 130500.0 ; + RECT 81500.0 126900.0 85300.0 127500.00000000001 ; + RECT 90400.0 136500.0 91000.0 137100.00000000003 ; + RECT 90400.0 139100.00000000003 91000.0 139700.0 ; + RECT 87600.0 136500.0 90700.0 137100.00000000003 ; + RECT 90400.0 136800.0 91000.0 139400.0 ; + RECT 90700.0 139100.00000000003 94600.0 139700.0 ; + RECT 82900.0 136500.0 85300.0 137100.00000000003 ; + RECT 81500.0 142300.0 96000.0 142900.0 ; + RECT 82900.0 151500.0 97400.0 152100.00000000003 ; + RECT 93200.0 127300.00000000001 100100.0 127900.0 ; + RECT 94600.0 125900.0 102100.0 126500.0 ; + RECT 96000.0 136100.00000000003 100100.0 136700.0 ; + RECT 94600.0 137500.0 102100.0 138100.00000000003 ; + RECT 93200.0 145700.0 100100.0 146300.0 ; + RECT 97400.0 144300.0 102100.0 144900.0 ; + RECT 96000.0 154500.0 100100.0 155100.00000000003 ; + RECT 97400.0 155899.99999999997 102100.0 156500.0 ; + RECT 106400.0 127300.00000000001 107000.0 127900.0 ; + RECT 106400.0 126900.0 107000.0 127500.00000000001 ; + RECT 103700.0 127300.00000000001 106700.0 127900.0 ; + RECT 106400.0 127200.0 107000.0 127600.00000000001 ; + RECT 106700.0 126900.0 109700.0 127500.00000000001 ; + RECT 106400.0 136100.00000000003 107000.0 136700.0 ; + RECT 106400.0 136500.0 107000.0 137100.00000000003 ; + RECT 103700.0 136100.00000000003 106700.0 136700.0 ; + RECT 106400.0 136400.0 107000.0 136800.0 ; + RECT 106700.0 136500.0 109700.0 137100.00000000003 ; + RECT 106400.0 145700.0 107000.0 146300.0 ; + RECT 106400.0 145300.0 107000.0 145900.0 ; + RECT 103700.0 145700.0 106700.0 146300.0 ; + RECT 106400.0 145600.00000000003 107000.0 146000.0 ; + RECT 106700.0 145300.0 109700.0 145900.0 ; + RECT 106400.0 154500.0 107000.0 155100.00000000003 ; + RECT 106400.0 154899.99999999997 107000.0 155500.0 ; + RECT 103700.0 154500.0 106700.0 155100.00000000003 ; + RECT 106400.0 154800.0 107000.0 155200.0 ; + RECT 106700.0 154899.99999999997 109700.0 155500.0 ; + RECT 80900.0 131700.0 114500.0 132300.0 ; + RECT 80900.0 122500.0 114500.0 123100.00000000001 ; + RECT 80900.0 131700.0 114500.0 132300.0 ; + RECT 80900.0 140900.0 114500.0 141500.0 ; + RECT 80900.0 150100.00000000003 114500.0 150700.0 ; + RECT 80900.0 140900.0 114500.0 141500.0 ; + RECT 80900.0 150100.00000000003 114500.0 150700.0 ; + RECT 80900.0 159300.0 114500.0 159899.99999999997 ; + RECT 88100.0 130699.99999999999 88900.0 132000.0 ; + RECT 88100.0 122800.00000000001 88900.0 124100.00000000001 ; + RECT 84900.0 123700.0 85700.0 122500.0 ; + RECT 84900.0 129900.0 85700.0 132300.0 ; + RECT 86700.0 123700.0 87300.0 129900.0 ; + RECT 84900.0 129900.0 85700.0 130699.99999999999 ; + RECT 86500.0 129900.0 87300.0 130699.99999999999 ; + RECT 86500.0 129900.0 87300.0 130699.99999999999 ; + RECT 84900.0 129900.0 85700.0 130699.99999999999 ; + RECT 84900.0 123700.0 85700.0 124500.0 ; + RECT 86500.0 123700.0 87300.0 124500.0 ; + RECT 86500.0 123700.0 87300.0 124500.0 ; + RECT 84900.0 123700.0 85700.0 124500.0 ; + RECT 88100.0 130300.00000000001 88900.0 131100.00000000003 ; + RECT 88100.0 123700.0 88900.0 124500.0 ; + RECT 85300.0 126800.00000000001 86100.0 127600.00000000001 ; + RECT 85300.0 126800.00000000001 86100.0 127600.00000000001 ; + RECT 87000.0 126900.0 87600.0 127500.0 ; + RECT 83700.0 131700.0 90100.0 132300.0 ; + RECT 83700.0 122500.0 90100.0 123100.00000000001 ; + RECT 88100.0 133300.0 88900.0 132000.0 ; + RECT 88100.0 141200.0 88900.0 139900.0 ; + RECT 84900.0 140300.0 85700.0 141500.0 ; + RECT 84900.0 134100.00000000003 85700.0 131700.0 ; + RECT 86700.0 140300.0 87300.0 134100.00000000003 ; + RECT 84900.0 134100.00000000003 85700.0 133300.0 ; + RECT 86500.0 134100.00000000003 87300.0 133300.0 ; + RECT 86500.0 134100.00000000003 87300.0 133300.0 ; + RECT 84900.0 134100.00000000003 85700.0 133300.0 ; + RECT 84900.0 140300.0 85700.0 139500.0 ; + RECT 86500.0 140300.0 87300.0 139500.0 ; + RECT 86500.0 140300.0 87300.0 139500.0 ; + RECT 84900.0 140300.0 85700.0 139500.0 ; + RECT 88100.0 133700.0 88900.0 132900.0 ; + RECT 88100.0 140300.0 88900.0 139500.0 ; + RECT 85300.0 137200.0 86100.0 136400.0 ; + RECT 85300.0 137200.0 86100.0 136400.0 ; + RECT 87000.0 137100.00000000003 87600.0 136500.0 ; + RECT 83700.0 132300.0 90100.0 131700.0 ; + RECT 83700.0 141500.0 90100.0 140900.0 ; + RECT 112500.0 130699.99999999999 113300.00000000001 132000.0 ; + RECT 112500.0 122800.00000000001 113300.00000000001 124100.00000000001 ; + RECT 109300.0 123700.0 110100.0 122500.0 ; + RECT 109300.0 129900.0 110100.0 132300.0 ; + RECT 111100.0 123700.0 111700.0 129900.0 ; + RECT 109300.0 129900.0 110100.0 130699.99999999999 ; + RECT 110900.0 129900.0 111700.0 130699.99999999999 ; + RECT 110900.0 129900.0 111700.0 130699.99999999999 ; + RECT 109300.0 129900.0 110100.0 130699.99999999999 ; + RECT 109300.0 123700.0 110100.0 124500.0 ; + RECT 110900.0 123700.0 111700.0 124500.0 ; + RECT 110900.0 123700.0 111700.0 124500.0 ; + RECT 109300.0 123700.0 110100.0 124500.0 ; + RECT 112500.0 130300.00000000001 113300.00000000001 131100.00000000003 ; + RECT 112500.0 123700.0 113300.00000000001 124500.0 ; + RECT 109700.0 126800.00000000001 110500.0 127600.00000000001 ; + RECT 109700.0 126800.00000000001 110500.0 127600.00000000001 ; + RECT 111400.0 126900.0 112000.0 127500.0 ; + RECT 108100.0 131700.0 114500.0 132300.0 ; + RECT 108100.0 122500.0 114500.0 123100.00000000001 ; + RECT 112500.0 133300.0 113300.00000000001 132000.0 ; + RECT 112500.0 141200.0 113300.00000000001 139900.0 ; + RECT 109300.0 140300.0 110100.0 141500.0 ; + RECT 109300.0 134100.00000000003 110100.0 131700.0 ; + RECT 111100.0 140300.0 111700.0 134100.00000000003 ; + RECT 109300.0 134100.00000000003 110100.0 133300.0 ; + RECT 110900.0 134100.00000000003 111700.0 133300.0 ; + RECT 110900.0 134100.00000000003 111700.0 133300.0 ; + RECT 109300.0 134100.00000000003 110100.0 133300.0 ; + RECT 109300.0 140300.0 110100.0 139500.0 ; + RECT 110900.0 140300.0 111700.0 139500.0 ; + RECT 110900.0 140300.0 111700.0 139500.0 ; + RECT 109300.0 140300.0 110100.0 139500.0 ; + RECT 112500.0 133700.0 113300.00000000001 132900.0 ; + RECT 112500.0 140300.0 113300.00000000001 139500.0 ; + RECT 109700.0 137200.0 110500.0 136400.0 ; + RECT 109700.0 137200.0 110500.0 136400.0 ; + RECT 111400.0 137100.00000000003 112000.0 136500.0 ; + RECT 108100.0 132300.0 114500.0 131700.0 ; + RECT 108100.0 141500.0 114500.0 140900.0 ; + RECT 112500.0 149100.00000000003 113300.00000000001 150400.0 ; + RECT 112500.0 141200.0 113300.00000000001 142500.0 ; + RECT 109300.0 142100.00000000003 110100.0 140900.0 ; + RECT 109300.0 148300.0 110100.0 150700.0 ; + RECT 111100.0 142100.00000000003 111700.0 148300.0 ; + RECT 109300.0 148300.0 110100.0 149100.00000000003 ; + RECT 110900.0 148300.0 111700.0 149100.00000000003 ; + RECT 110900.0 148300.0 111700.0 149100.00000000003 ; + RECT 109300.0 148300.0 110100.0 149100.00000000003 ; + RECT 109300.0 142100.00000000003 110100.0 142900.0 ; + RECT 110900.0 142100.00000000003 111700.0 142900.0 ; + RECT 110900.0 142100.00000000003 111700.0 142900.0 ; + RECT 109300.0 142100.00000000003 110100.0 142900.0 ; + RECT 112500.0 148700.0 113300.00000000001 149500.0 ; + RECT 112500.0 142100.00000000003 113300.00000000001 142900.0 ; + RECT 109700.0 145200.0 110500.0 146000.0 ; + RECT 109700.0 145200.0 110500.0 146000.0 ; + RECT 111400.0 145300.0 112000.0 145900.0 ; + RECT 108100.0 150100.00000000003 114500.0 150700.0 ; + RECT 108100.0 140900.0 114500.0 141500.0 ; + RECT 112500.0 151700.0 113300.00000000001 150400.0 ; + RECT 112500.0 159600.00000000003 113300.00000000001 158300.0 ; + RECT 109300.0 158700.0 110100.0 159899.99999999997 ; + RECT 109300.0 152500.0 110100.0 150100.00000000003 ; + RECT 111100.0 158700.0 111700.0 152500.0 ; + RECT 109300.0 152500.0 110100.0 151700.0 ; + RECT 110900.0 152500.0 111700.0 151700.0 ; + RECT 110900.0 152500.0 111700.0 151700.0 ; + RECT 109300.0 152500.0 110100.0 151700.0 ; + RECT 109300.0 158700.0 110100.0 157899.99999999997 ; + RECT 110900.0 158700.0 111700.0 157899.99999999997 ; + RECT 110900.0 158700.0 111700.0 157899.99999999997 ; + RECT 109300.0 158700.0 110100.0 157899.99999999997 ; + RECT 112500.0 152100.00000000003 113300.00000000001 151300.0 ; + RECT 112500.0 158700.0 113300.00000000001 157899.99999999997 ; + RECT 109700.0 155600.00000000003 110500.0 154800.0 ; + RECT 109700.0 155600.00000000003 110500.0 154800.0 ; + RECT 111400.0 155500.0 112000.0 154899.99999999997 ; + RECT 108100.0 150700.0 114500.0 150100.00000000003 ; + RECT 108100.0 159899.99999999997 114500.0 159300.0 ; + RECT 99700.0 124100.00000000001 100500.0 122500.0 ; + RECT 99700.0 129900.0 100500.0 132300.0 ; + RECT 102900.0 129900.0 103700.0 132300.0 ; + RECT 104500.0 130699.99999999999 105300.0 132000.0 ; + RECT 104500.0 122800.00000000001 105300.0 124100.00000000001 ; + RECT 99700.0 129900.0 100500.0 130699.99999999999 ; + RECT 101300.0 129900.0 102100.0 130699.99999999999 ; + RECT 101300.0 129900.0 102100.0 130699.99999999999 ; + RECT 99700.0 129900.0 100500.0 130699.99999999999 ; + RECT 101300.0 129900.0 102100.0 130699.99999999999 ; + RECT 102900.0 129900.0 103700.0 130699.99999999999 ; + RECT 102900.0 129900.0 103700.0 130699.99999999999 ; + RECT 101300.0 129900.0 102100.0 130699.99999999999 ; + RECT 99700.0 124100.00000000001 100500.0 124900.0 ; + RECT 101300.0 124100.00000000001 102100.0 124900.0 ; + RECT 101300.0 124100.00000000001 102100.0 124900.0 ; + RECT 99700.0 124100.00000000001 100500.0 124900.0 ; + RECT 101300.0 124100.00000000001 102100.0 124900.0 ; + RECT 102900.0 124100.00000000001 103700.0 124900.0 ; + RECT 102900.0 124100.00000000001 103700.0 124900.0 ; + RECT 101300.0 124100.00000000001 102100.0 124900.0 ; + RECT 104500.0 130300.00000000001 105300.0 131100.00000000003 ; + RECT 104500.0 123700.0 105300.0 124500.0 ; + RECT 102900.0 125800.00000000001 102100.0 126600.00000000001 ; + RECT 100900.0 127200.0 100100.0 128000.0 ; + RECT 101300.0 129900.0 102100.0 130699.99999999999 ; + RECT 102900.0 124100.00000000001 103700.0 124900.0 ; + RECT 103700.0 127200.0 102900.0 128000.0 ; + RECT 100100.0 127200.0 100900.0 128000.0 ; + RECT 102100.0 125800.00000000001 102900.0 126600.00000000001 ; + RECT 102900.0 127200.0 103700.0 128000.0 ; + RECT 98500.0 131700.0 108100.0 132300.0 ; + RECT 98500.0 122500.0 108100.0 123100.00000000001 ; + RECT 99700.0 139900.0 100500.0 141500.0 ; + RECT 99700.0 134100.00000000003 100500.0 131700.0 ; + RECT 102900.0 134100.00000000003 103700.0 131700.0 ; + RECT 104500.0 133300.0 105300.0 132000.0 ; + RECT 104500.0 141200.0 105300.0 139900.0 ; + RECT 99700.0 134100.00000000003 100500.0 133300.0 ; + RECT 101300.0 134100.00000000003 102100.0 133300.0 ; + RECT 101300.0 134100.00000000003 102100.0 133300.0 ; + RECT 99700.0 134100.00000000003 100500.0 133300.0 ; + RECT 101300.0 134100.00000000003 102100.0 133300.0 ; + RECT 102900.0 134100.00000000003 103700.0 133300.0 ; + RECT 102900.0 134100.00000000003 103700.0 133300.0 ; + RECT 101300.0 134100.00000000003 102100.0 133300.0 ; + RECT 99700.0 139900.0 100500.0 139100.00000000003 ; + RECT 101300.0 139900.0 102100.0 139100.00000000003 ; + RECT 101300.0 139900.0 102100.0 139100.00000000003 ; + RECT 99700.0 139900.0 100500.0 139100.00000000003 ; + RECT 101300.0 139900.0 102100.0 139100.00000000003 ; + RECT 102900.0 139900.0 103700.0 139100.00000000003 ; + RECT 102900.0 139900.0 103700.0 139100.00000000003 ; + RECT 101300.0 139900.0 102100.0 139100.00000000003 ; + RECT 104500.0 133700.0 105300.0 132900.0 ; + RECT 104500.0 140300.0 105300.0 139500.0 ; + RECT 102900.0 138200.0 102100.0 137400.0 ; + RECT 100900.0 136800.0 100100.0 136000.0 ; + RECT 101300.0 134100.00000000003 102100.0 133300.0 ; + RECT 102900.0 139900.0 103700.0 139100.00000000003 ; + RECT 103700.0 136800.0 102900.0 136000.0 ; + RECT 100100.0 136800.0 100900.0 136000.0 ; + RECT 102100.0 138200.0 102900.0 137400.0 ; + RECT 102900.0 136800.0 103700.0 136000.0 ; + RECT 98500.0 132300.0 108100.0 131700.0 ; + RECT 98500.0 141500.0 108100.0 140900.0 ; + RECT 99700.0 142500.0 100500.0 140900.0 ; + RECT 99700.0 148300.0 100500.0 150700.0 ; + RECT 102900.0 148300.0 103700.0 150700.0 ; + RECT 104500.0 149100.00000000003 105300.0 150400.0 ; + RECT 104500.0 141200.0 105300.0 142500.0 ; + RECT 99700.0 148300.0 100500.0 149100.00000000003 ; + RECT 101300.0 148300.0 102100.0 149100.00000000003 ; + RECT 101300.0 148300.0 102100.0 149100.00000000003 ; + RECT 99700.0 148300.0 100500.0 149100.00000000003 ; + RECT 101300.0 148300.0 102100.0 149100.00000000003 ; + RECT 102900.0 148300.0 103700.0 149100.00000000003 ; + RECT 102900.0 148300.0 103700.0 149100.00000000003 ; + RECT 101300.0 148300.0 102100.0 149100.00000000003 ; + RECT 99700.0 142500.0 100500.0 143300.0 ; + RECT 101300.0 142500.0 102100.0 143300.0 ; + RECT 101300.0 142500.0 102100.0 143300.0 ; + RECT 99700.0 142500.0 100500.0 143300.0 ; + RECT 101300.0 142500.0 102100.0 143300.0 ; + RECT 102900.0 142500.0 103700.0 143300.0 ; + RECT 102900.0 142500.0 103700.0 143300.0 ; + RECT 101300.0 142500.0 102100.0 143300.0 ; + RECT 104500.0 148700.0 105300.0 149500.0 ; + RECT 104500.0 142100.00000000003 105300.0 142900.0 ; + RECT 102900.0 144200.0 102100.0 145000.0 ; + RECT 100900.0 145600.00000000003 100100.0 146400.0 ; + RECT 101300.0 148300.0 102100.0 149100.00000000003 ; + RECT 102900.0 142500.0 103700.0 143300.0 ; + RECT 103700.0 145600.00000000003 102900.0 146400.0 ; + RECT 100100.0 145600.00000000003 100900.0 146400.0 ; + RECT 102100.0 144200.0 102900.0 145000.0 ; + RECT 102900.0 145600.00000000003 103700.0 146400.0 ; + RECT 98500.0 150100.00000000003 108100.0 150700.0 ; + RECT 98500.0 140900.0 108100.0 141500.0 ; + RECT 99700.0 158300.0 100500.0 159899.99999999997 ; + RECT 99700.0 152500.0 100500.0 150100.00000000003 ; + RECT 102900.0 152500.0 103700.0 150100.00000000003 ; + RECT 104500.0 151700.0 105300.0 150400.0 ; + RECT 104500.0 159600.00000000003 105300.0 158300.0 ; + RECT 99700.0 152500.0 100500.0 151700.0 ; + RECT 101300.0 152500.0 102100.0 151700.0 ; + RECT 101300.0 152500.0 102100.0 151700.0 ; + RECT 99700.0 152500.0 100500.0 151700.0 ; + RECT 101300.0 152500.0 102100.0 151700.0 ; + RECT 102900.0 152500.0 103700.0 151700.0 ; + RECT 102900.0 152500.0 103700.0 151700.0 ; + RECT 101300.0 152500.0 102100.0 151700.0 ; + RECT 99700.0 158300.0 100500.0 157500.0 ; + RECT 101300.0 158300.0 102100.0 157500.0 ; + RECT 101300.0 158300.0 102100.0 157500.0 ; + RECT 99700.0 158300.0 100500.0 157500.0 ; + RECT 101300.0 158300.0 102100.0 157500.0 ; + RECT 102900.0 158300.0 103700.0 157500.0 ; + RECT 102900.0 158300.0 103700.0 157500.0 ; + RECT 101300.0 158300.0 102100.0 157500.0 ; + RECT 104500.0 152100.00000000003 105300.0 151300.0 ; + RECT 104500.0 158700.0 105300.0 157899.99999999997 ; + RECT 102900.0 156600.00000000003 102100.0 155800.0 ; + RECT 100900.0 155200.0 100100.0 154400.00000000003 ; + RECT 101300.0 152500.0 102100.0 151700.0 ; + RECT 102900.0 158300.0 103700.0 157500.0 ; + RECT 103700.0 155200.0 102900.0 154400.00000000003 ; + RECT 100100.0 155200.0 100900.0 154400.00000000003 ; + RECT 102100.0 156600.00000000003 102900.0 155800.0 ; + RECT 102900.0 155200.0 103700.0 154400.00000000003 ; + RECT 98500.0 150700.0 108100.0 150100.00000000003 ; + RECT 98500.0 159899.99999999997 108100.0 159300.0 ; + RECT 93600.0 129800.00000000001 92800.0 130600.00000000003 ; + RECT 81900.0 126800.00000000001 81100.0 127600.00000000001 ; + RECT 95000.0 139000.0 94200.0 139800.0 ; + RECT 83300.0 136400.0 82500.0 137200.0 ; + RECT 81900.0 142200.0 81100.0 143000.0 ; + RECT 96400.0 142200.0 95600.0 143000.0 ; + RECT 83300.0 151400.0 82500.0 152200.0 ; + RECT 97800.0 151400.0 97000.0 152200.0 ; + RECT 93600.0 127200.0 92800.0 128000.0 ; + RECT 95000.0 125800.00000000001 94200.0 126600.00000000001 ; + RECT 96400.0 136000.0 95600.0 136800.0 ; + RECT 95000.0 137400.0 94200.0 138200.0 ; + RECT 93600.0 145600.00000000003 92800.0 146400.0 ; + RECT 97800.0 144200.0 97000.0 145000.0 ; + RECT 96400.0 154399.99999999997 95600.0 155200.0 ; + RECT 97800.0 155800.0 97000.0 156600.00000000003 ; + RECT 90500.0 131600.00000000003 89700.0 132400.0 ; + RECT 108500.0 131600.00000000003 107700.0 132400.0 ; + RECT 90500.0 122400.0 89700.0 123200.0 ; + RECT 108500.0 122400.0 107700.0 123200.0 ; + RECT 90500.0 131600.00000000003 89700.0 132400.0 ; + RECT 108500.0 131600.00000000003 107700.0 132400.0 ; + RECT 90500.0 140800.0 89700.0 141600.00000000003 ; + RECT 108500.0 140800.0 107700.0 141600.00000000003 ; + RECT 90500.0 150000.0 89700.0 150800.0 ; + RECT 108500.0 150000.0 107700.0 150800.0 ; + RECT 90500.0 140800.0 89700.0 141600.00000000003 ; + RECT 108500.0 140800.0 107700.0 141600.00000000003 ; + RECT 90500.0 150000.0 89700.0 150800.0 ; + RECT 108500.0 150000.0 107700.0 150800.0 ; + RECT 90500.0 159200.0 89700.0 160000.0 ; + RECT 108500.0 159200.0 107700.0 160000.0 ; + RECT 111400.0 126900.0 112000.0 127500.0 ; + RECT 111400.0 136500.0 112000.0 137100.00000000003 ; + RECT 111400.0 145300.0 112000.0 145900.0 ; + RECT 111400.0 154899.99999999997 112000.0 155500.0 ; + RECT 90400.0 163700.0 91000.0 164300.0 ; + RECT 90400.0 166700.0 91000.0 167300.0 ; + RECT 87600.0 163700.0 90700.0 164300.0 ; + RECT 90400.0 164000.0 91000.0 167000.0 ; + RECT 90700.0 166700.0 93200.0 167300.0 ; + RECT 81500.0 163700.0 85300.0 164300.0 ; + RECT 90400.0 173300.0 91000.0 173899.99999999997 ; + RECT 90400.0 175899.99999999997 91000.0 176500.0 ; + RECT 87600.0 173300.0 90700.0 173899.99999999997 ; + RECT 90400.0 173600.00000000003 91000.0 176200.0 ; + RECT 90700.0 175899.99999999997 94600.0 176500.0 ; + RECT 82900.0 173300.0 85300.0 173899.99999999997 ; + RECT 81500.0 179100.00000000003 96000.0 179700.0 ; + RECT 82900.0 188300.0 97400.0 188899.99999999997 ; + RECT 93200.0 164100.00000000003 100100.0 164700.0 ; + RECT 94600.0 162700.0 102100.0 163300.0 ; + RECT 96000.0 172899.99999999997 100100.0 173500.0 ; + RECT 94600.0 174300.0 102100.0 174899.99999999997 ; + RECT 93200.0 182500.0 100100.0 183100.00000000003 ; + RECT 97400.0 181100.00000000003 102100.0 181700.0 ; + RECT 96000.0 191300.0 100100.0 191899.99999999997 ; + RECT 97400.0 192700.0 102100.0 193300.0 ; + RECT 106400.0 164100.00000000003 107000.0 164700.0 ; + RECT 106400.0 163700.0 107000.0 164300.0 ; + RECT 103700.0 164100.00000000003 106700.0 164700.0 ; + RECT 106400.0 164000.0 107000.0 164399.99999999997 ; + RECT 106700.0 163700.0 109700.0 164300.0 ; + RECT 106400.0 172899.99999999997 107000.0 173500.0 ; + RECT 106400.0 173300.0 107000.0 173899.99999999997 ; + RECT 103700.0 172899.99999999997 106700.0 173500.0 ; + RECT 106400.0 173200.0 107000.0 173600.00000000003 ; + RECT 106700.0 173300.0 109700.0 173899.99999999997 ; + RECT 106400.0 182500.0 107000.0 183100.00000000003 ; + RECT 106400.0 182100.00000000003 107000.0 182700.0 ; + RECT 103700.0 182500.0 106700.0 183100.00000000003 ; + RECT 106400.0 182399.99999999997 107000.0 182800.0 ; + RECT 106700.0 182100.00000000003 109700.0 182700.0 ; + RECT 106400.0 191300.0 107000.0 191899.99999999997 ; + RECT 106400.0 191700.0 107000.0 192300.0 ; + RECT 103700.0 191300.0 106700.0 191899.99999999997 ; + RECT 106400.0 191600.00000000003 107000.0 192000.0 ; + RECT 106700.0 191700.0 109700.0 192300.0 ; + RECT 80900.0 168500.0 114500.0 169100.00000000003 ; + RECT 80900.0 159300.0 114500.0 159899.99999999997 ; + RECT 80900.0 168500.0 114500.0 169100.00000000003 ; + RECT 80900.0 177700.0 114500.0 178300.0 ; + RECT 80900.0 186899.99999999997 114500.0 187500.0 ; + RECT 80900.0 177700.0 114500.0 178300.0 ; + RECT 80900.0 186899.99999999997 114500.0 187500.0 ; + RECT 80900.0 196100.00000000003 114500.0 196700.0 ; + RECT 88100.0 167500.0 88900.0 168800.0 ; + RECT 88100.0 159600.00000000003 88900.0 160899.99999999997 ; + RECT 84900.0 160500.0 85700.0 159300.0 ; + RECT 84900.0 166700.0 85700.0 169100.00000000003 ; + RECT 86700.0 160500.0 87300.0 166700.0 ; + RECT 84900.0 166700.0 85700.0 167500.0 ; + RECT 86500.0 166700.0 87300.0 167500.0 ; + RECT 86500.0 166700.0 87300.0 167500.0 ; + RECT 84900.0 166700.0 85700.0 167500.0 ; + RECT 84900.0 160500.0 85700.0 161300.0 ; + RECT 86500.0 160500.0 87300.0 161300.0 ; + RECT 86500.0 160500.0 87300.0 161300.0 ; + RECT 84900.0 160500.0 85700.0 161300.0 ; + RECT 88100.0 167100.00000000003 88900.0 167899.99999999997 ; + RECT 88100.0 160500.0 88900.0 161300.0 ; + RECT 85300.0 163600.00000000003 86100.0 164399.99999999997 ; + RECT 85300.0 163600.00000000003 86100.0 164399.99999999997 ; + RECT 87000.0 163700.0 87600.0 164300.0 ; + RECT 83700.0 168500.0 90100.0 169100.00000000003 ; + RECT 83700.0 159300.0 90100.0 159899.99999999997 ; + RECT 88100.0 170100.00000000003 88900.0 168800.0 ; + RECT 88100.0 178000.0 88900.0 176700.0 ; + RECT 84900.0 177100.00000000003 85700.0 178300.0 ; + RECT 84900.0 170899.99999999997 85700.0 168500.0 ; + RECT 86700.0 177100.00000000003 87300.0 170899.99999999997 ; + RECT 84900.0 170900.00000000003 85700.0 170100.00000000003 ; + RECT 86500.0 170900.00000000003 87300.0 170100.00000000003 ; + RECT 86500.0 170900.00000000003 87300.0 170100.00000000003 ; + RECT 84900.0 170900.00000000003 85700.0 170100.00000000003 ; + RECT 84900.0 177100.00000000003 85700.0 176300.0 ; + RECT 86500.0 177100.00000000003 87300.0 176300.0 ; + RECT 86500.0 177100.00000000003 87300.0 176300.0 ; + RECT 84900.0 177100.00000000003 85700.0 176300.0 ; + RECT 88100.0 170500.0 88900.0 169700.0 ; + RECT 88100.0 177100.00000000003 88900.0 176300.0 ; + RECT 85300.0 174000.0 86100.0 173200.0 ; + RECT 85300.0 174000.0 86100.0 173200.0 ; + RECT 87000.0 173899.99999999997 87600.0 173300.0 ; + RECT 83700.0 169100.00000000003 90100.0 168500.0 ; + RECT 83700.0 178300.0 90100.0 177700.0 ; + RECT 112500.0 167500.0 113300.00000000001 168800.0 ; + RECT 112500.0 159600.00000000003 113300.00000000001 160899.99999999997 ; + RECT 109300.0 160500.0 110100.0 159300.0 ; + RECT 109300.0 166700.0 110100.0 169100.00000000003 ; + RECT 111100.0 160500.0 111700.0 166700.0 ; + RECT 109300.0 166700.0 110100.0 167500.0 ; + RECT 110900.0 166700.0 111700.0 167500.0 ; + RECT 110900.0 166700.0 111700.0 167500.0 ; + RECT 109300.0 166700.0 110100.0 167500.0 ; + RECT 109300.0 160500.0 110100.0 161300.0 ; + RECT 110900.0 160500.0 111700.0 161300.0 ; + RECT 110900.0 160500.0 111700.0 161300.0 ; + RECT 109300.0 160500.0 110100.0 161300.0 ; + RECT 112500.0 167100.00000000003 113300.00000000001 167899.99999999997 ; + RECT 112500.0 160500.0 113300.00000000001 161300.0 ; + RECT 109700.0 163600.00000000003 110500.0 164399.99999999997 ; + RECT 109700.0 163600.00000000003 110500.0 164399.99999999997 ; + RECT 111400.0 163700.0 112000.0 164300.0 ; + RECT 108100.0 168500.0 114500.0 169100.00000000003 ; + RECT 108100.0 159300.0 114500.0 159899.99999999997 ; + RECT 112500.0 170100.00000000003 113300.00000000001 168800.0 ; + RECT 112500.0 178000.0 113300.00000000001 176700.0 ; + RECT 109300.0 177100.00000000003 110100.0 178300.0 ; + RECT 109300.0 170899.99999999997 110100.0 168500.0 ; + RECT 111100.0 177100.00000000003 111700.0 170899.99999999997 ; + RECT 109300.0 170900.00000000003 110100.0 170100.00000000003 ; + RECT 110900.0 170900.00000000003 111700.0 170100.00000000003 ; + RECT 110900.0 170900.00000000003 111700.0 170100.00000000003 ; + RECT 109300.0 170900.00000000003 110100.0 170100.00000000003 ; + RECT 109300.0 177100.00000000003 110100.0 176300.0 ; + RECT 110900.0 177100.00000000003 111700.0 176300.0 ; + RECT 110900.0 177100.00000000003 111700.0 176300.0 ; + RECT 109300.0 177100.00000000003 110100.0 176300.0 ; + RECT 112500.0 170500.0 113300.00000000001 169700.0 ; + RECT 112500.0 177100.00000000003 113300.00000000001 176300.0 ; + RECT 109700.0 174000.0 110500.0 173200.0 ; + RECT 109700.0 174000.0 110500.0 173200.0 ; + RECT 111400.0 173899.99999999997 112000.0 173300.0 ; + RECT 108100.0 169100.00000000003 114500.0 168500.0 ; + RECT 108100.0 178300.0 114500.0 177700.0 ; + RECT 112500.0 185900.00000000003 113300.00000000001 187200.0 ; + RECT 112500.0 178000.0 113300.00000000001 179300.0 ; + RECT 109300.0 178899.99999999997 110100.0 177700.0 ; + RECT 109300.0 185100.00000000003 110100.0 187500.0 ; + RECT 111100.0 178899.99999999997 111700.0 185100.00000000003 ; + RECT 109300.0 185100.00000000003 110100.0 185900.00000000003 ; + RECT 110900.0 185100.00000000003 111700.0 185900.00000000003 ; + RECT 110900.0 185100.00000000003 111700.0 185900.00000000003 ; + RECT 109300.0 185100.00000000003 110100.0 185900.00000000003 ; + RECT 109300.0 178899.99999999997 110100.0 179700.0 ; + RECT 110900.0 178899.99999999997 111700.0 179700.0 ; + RECT 110900.0 178899.99999999997 111700.0 179700.0 ; + RECT 109300.0 178899.99999999997 110100.0 179700.0 ; + RECT 112500.0 185500.0 113300.00000000001 186300.0 ; + RECT 112500.0 178899.99999999997 113300.00000000001 179700.0 ; + RECT 109700.0 182000.0 110500.0 182800.0 ; + RECT 109700.0 182000.0 110500.0 182800.0 ; + RECT 111400.0 182100.00000000003 112000.0 182700.0 ; + RECT 108100.0 186899.99999999997 114500.0 187500.0 ; + RECT 108100.0 177700.0 114500.0 178300.0 ; + RECT 112500.0 188500.0 113300.00000000001 187200.0 ; + RECT 112500.0 196399.99999999997 113300.00000000001 195100.00000000003 ; + RECT 109300.0 195500.0 110100.0 196700.0 ; + RECT 109300.0 189300.0 110100.0 186899.99999999997 ; + RECT 111100.0 195500.0 111700.0 189300.0 ; + RECT 109300.0 189300.0 110100.0 188500.0 ; + RECT 110900.0 189300.0 111700.0 188500.0 ; + RECT 110900.0 189300.0 111700.0 188500.0 ; + RECT 109300.0 189300.0 110100.0 188500.0 ; + RECT 109300.0 195500.0 110100.0 194700.0 ; + RECT 110900.0 195500.0 111700.0 194700.0 ; + RECT 110900.0 195500.0 111700.0 194700.0 ; + RECT 109300.0 195500.0 110100.0 194700.0 ; + RECT 112500.0 188899.99999999997 113300.00000000001 188100.00000000003 ; + RECT 112500.0 195500.0 113300.00000000001 194700.0 ; + RECT 109700.0 192399.99999999997 110500.0 191600.00000000003 ; + RECT 109700.0 192399.99999999997 110500.0 191600.00000000003 ; + RECT 111400.0 192300.0 112000.0 191700.0 ; + RECT 108100.0 187500.0 114500.0 186899.99999999997 ; + RECT 108100.0 196700.0 114500.0 196100.00000000003 ; + RECT 99700.0 160899.99999999997 100500.0 159300.0 ; + RECT 99700.0 166700.0 100500.0 169100.00000000003 ; + RECT 102900.0 166700.0 103700.0 169100.00000000003 ; + RECT 104500.0 167500.0 105300.0 168800.0 ; + RECT 104500.0 159600.00000000003 105300.0 160899.99999999997 ; + RECT 99700.0 166700.0 100500.0 167500.0 ; + RECT 101300.0 166700.0 102100.0 167500.0 ; + RECT 101300.0 166700.0 102100.0 167500.0 ; + RECT 99700.0 166700.0 100500.0 167500.0 ; + RECT 101300.0 166700.0 102100.0 167500.0 ; + RECT 102900.0 166700.0 103700.0 167500.0 ; + RECT 102900.0 166700.0 103700.0 167500.0 ; + RECT 101300.0 166700.0 102100.0 167500.0 ; + RECT 99700.0 160899.99999999997 100500.0 161700.0 ; + RECT 101300.0 160899.99999999997 102100.0 161700.0 ; + RECT 101300.0 160899.99999999997 102100.0 161700.0 ; + RECT 99700.0 160899.99999999997 100500.0 161700.0 ; + RECT 101300.0 160899.99999999997 102100.0 161700.0 ; + RECT 102900.0 160899.99999999997 103700.0 161700.0 ; + RECT 102900.0 160899.99999999997 103700.0 161700.0 ; + RECT 101300.0 160899.99999999997 102100.0 161700.0 ; + RECT 104500.0 167100.00000000003 105300.0 167899.99999999997 ; + RECT 104500.0 160500.0 105300.0 161300.0 ; + RECT 102900.0 162600.00000000003 102100.0 163399.99999999997 ; + RECT 100900.0 164000.0 100100.0 164800.0 ; + RECT 101300.0 166700.0 102100.0 167500.0 ; + RECT 102900.0 160899.99999999997 103700.0 161700.0 ; + RECT 103700.0 164000.0 102900.0 164800.0 ; + RECT 100100.0 164000.0 100900.0 164800.0 ; + RECT 102100.0 162600.00000000003 102900.0 163399.99999999997 ; + RECT 102900.0 164000.0 103700.0 164800.0 ; + RECT 98500.0 168500.0 108100.0 169100.00000000003 ; + RECT 98500.0 159300.0 108100.0 159899.99999999997 ; + RECT 99700.0 176700.0 100500.0 178300.0 ; + RECT 99700.0 170899.99999999997 100500.0 168500.0 ; + RECT 102900.0 170899.99999999997 103700.0 168500.0 ; + RECT 104500.0 170100.00000000003 105300.0 168800.0 ; + RECT 104500.0 178000.0 105300.0 176700.0 ; + RECT 99700.0 170900.00000000003 100500.0 170100.00000000003 ; + RECT 101300.0 170900.00000000003 102100.0 170100.00000000003 ; + RECT 101300.0 170900.00000000003 102100.0 170100.00000000003 ; + RECT 99700.0 170900.00000000003 100500.0 170100.00000000003 ; + RECT 101300.0 170900.00000000003 102100.0 170100.00000000003 ; + RECT 102900.0 170900.00000000003 103700.0 170100.00000000003 ; + RECT 102900.0 170900.00000000003 103700.0 170100.00000000003 ; + RECT 101300.0 170900.00000000003 102100.0 170100.00000000003 ; + RECT 99700.0 176700.0 100500.0 175899.99999999997 ; + RECT 101300.0 176700.0 102100.0 175899.99999999997 ; + RECT 101300.0 176700.0 102100.0 175899.99999999997 ; + RECT 99700.0 176700.0 100500.0 175899.99999999997 ; + RECT 101300.0 176700.0 102100.0 175899.99999999997 ; + RECT 102900.0 176700.0 103700.0 175899.99999999997 ; + RECT 102900.0 176700.0 103700.0 175899.99999999997 ; + RECT 101300.0 176700.0 102100.0 175899.99999999997 ; + RECT 104500.0 170500.0 105300.0 169700.0 ; + RECT 104500.0 177100.00000000003 105300.0 176300.0 ; + RECT 102900.0 175000.0 102100.0 174200.0 ; + RECT 100900.0 173600.00000000003 100100.0 172800.0 ; + RECT 101300.0 170899.99999999997 102100.0 170100.00000000003 ; + RECT 102900.0 176700.0 103700.0 175899.99999999997 ; + RECT 103700.0 173600.00000000003 102900.0 172800.0 ; + RECT 100100.0 173600.00000000003 100900.0 172800.0 ; + RECT 102100.0 175000.0 102900.0 174200.0 ; + RECT 102900.0 173600.00000000003 103700.0 172800.0 ; + RECT 98500.0 169100.00000000003 108100.0 168500.0 ; + RECT 98500.0 178300.0 108100.0 177700.0 ; + RECT 99700.0 179300.0 100500.0 177700.0 ; + RECT 99700.0 185100.00000000003 100500.0 187500.0 ; + RECT 102900.0 185100.00000000003 103700.0 187500.0 ; + RECT 104500.0 185900.00000000003 105300.0 187200.0 ; + RECT 104500.0 178000.0 105300.0 179300.0 ; + RECT 99700.0 185100.00000000003 100500.0 185900.00000000003 ; + RECT 101300.0 185100.00000000003 102100.0 185900.00000000003 ; + RECT 101300.0 185100.00000000003 102100.0 185900.00000000003 ; + RECT 99700.0 185100.00000000003 100500.0 185900.00000000003 ; + RECT 101300.0 185100.00000000003 102100.0 185900.00000000003 ; + RECT 102900.0 185100.00000000003 103700.0 185900.00000000003 ; + RECT 102900.0 185100.00000000003 103700.0 185900.00000000003 ; + RECT 101300.0 185100.00000000003 102100.0 185900.00000000003 ; + RECT 99700.0 179300.0 100500.0 180100.00000000003 ; + RECT 101300.0 179300.0 102100.0 180100.00000000003 ; + RECT 101300.0 179300.0 102100.0 180100.00000000003 ; + RECT 99700.0 179300.0 100500.0 180100.00000000003 ; + RECT 101300.0 179300.0 102100.0 180100.00000000003 ; + RECT 102900.0 179300.0 103700.0 180100.00000000003 ; + RECT 102900.0 179300.0 103700.0 180100.00000000003 ; + RECT 101300.0 179300.0 102100.0 180100.00000000003 ; + RECT 104500.0 185500.0 105300.0 186300.0 ; + RECT 104500.0 178899.99999999997 105300.0 179700.0 ; + RECT 102900.0 181000.0 102100.0 181800.0 ; + RECT 100900.0 182400.00000000003 100100.0 183200.0 ; + RECT 101300.0 185100.00000000003 102100.0 185900.00000000003 ; + RECT 102900.0 179300.0 103700.0 180100.00000000003 ; + RECT 103700.0 182400.00000000003 102900.0 183200.0 ; + RECT 100100.0 182400.00000000003 100900.0 183200.0 ; + RECT 102100.0 181000.0 102900.0 181800.0 ; + RECT 102900.0 182400.00000000003 103700.0 183200.0 ; + RECT 98500.0 186899.99999999997 108100.0 187500.0 ; + RECT 98500.0 177700.0 108100.0 178300.0 ; + RECT 99700.0 195100.00000000003 100500.0 196700.0 ; + RECT 99700.0 189300.0 100500.0 186899.99999999997 ; + RECT 102900.0 189300.0 103700.0 186899.99999999997 ; + RECT 104500.0 188500.0 105300.0 187200.0 ; + RECT 104500.0 196399.99999999997 105300.0 195100.00000000003 ; + RECT 99700.0 189300.0 100500.0 188500.0 ; + RECT 101300.0 189300.0 102100.0 188500.0 ; + RECT 101300.0 189300.0 102100.0 188500.0 ; + RECT 99700.0 189300.0 100500.0 188500.0 ; + RECT 101300.0 189300.0 102100.0 188500.0 ; + RECT 102900.0 189300.0 103700.0 188500.0 ; + RECT 102900.0 189300.0 103700.0 188500.0 ; + RECT 101300.0 189300.0 102100.0 188500.0 ; + RECT 99700.0 195100.00000000003 100500.0 194300.0 ; + RECT 101300.0 195100.00000000003 102100.0 194300.0 ; + RECT 101300.0 195100.00000000003 102100.0 194300.0 ; + RECT 99700.0 195100.00000000003 100500.0 194300.0 ; + RECT 101300.0 195100.00000000003 102100.0 194300.0 ; + RECT 102900.0 195100.00000000003 103700.0 194300.0 ; + RECT 102900.0 195100.00000000003 103700.0 194300.0 ; + RECT 101300.0 195100.00000000003 102100.0 194300.0 ; + RECT 104500.0 188899.99999999997 105300.0 188100.00000000003 ; + RECT 104500.0 195500.0 105300.0 194700.0 ; + RECT 102900.0 193399.99999999997 102100.0 192600.00000000003 ; + RECT 100900.0 192000.0 100100.0 191200.0 ; + RECT 101300.0 189300.0 102100.0 188500.0 ; + RECT 102900.0 195100.00000000003 103700.0 194300.0 ; + RECT 103700.0 192000.0 102900.0 191200.0 ; + RECT 100100.0 192000.0 100900.0 191200.0 ; + RECT 102100.0 193399.99999999997 102900.0 192600.00000000003 ; + RECT 102900.0 192000.0 103700.0 191200.0 ; + RECT 98500.0 187500.0 108100.0 186899.99999999997 ; + RECT 98500.0 196700.0 108100.0 196100.00000000003 ; + RECT 93600.0 166600.00000000003 92800.0 167399.99999999997 ; + RECT 81900.0 163600.00000000003 81100.0 164399.99999999997 ; + RECT 95000.0 175800.0 94200.0 176600.00000000003 ; + RECT 83300.0 173200.0 82500.0 174000.0 ; + RECT 81900.0 179000.0 81100.0 179800.0 ; + RECT 96400.0 179000.0 95600.0 179800.0 ; + RECT 83300.0 188200.0 82500.0 189000.0 ; + RECT 97800.0 188200.0 97000.0 189000.0 ; + RECT 93600.0 164000.0 92800.0 164800.0 ; + RECT 95000.0 162600.00000000003 94200.0 163399.99999999997 ; + RECT 96400.0 172800.0 95600.0 173600.00000000003 ; + RECT 95000.0 174200.0 94200.0 175000.0 ; + RECT 93600.0 182399.99999999997 92800.0 183200.0 ; + RECT 97800.0 181000.0 97000.0 181800.0 ; + RECT 96400.0 191200.0 95600.0 192000.0 ; + RECT 97800.0 192600.00000000003 97000.0 193399.99999999997 ; + RECT 90500.0 168399.99999999997 89700.0 169200.0 ; + RECT 108500.0 168399.99999999997 107700.0 169200.0 ; + RECT 90500.0 159200.0 89700.0 160000.0 ; + RECT 108500.0 159200.0 107700.0 160000.0 ; + RECT 90500.0 168399.99999999997 89700.0 169200.0 ; + RECT 108500.0 168399.99999999997 107700.0 169200.0 ; + RECT 90500.0 177600.00000000003 89700.0 178399.99999999997 ; + RECT 108500.0 177600.00000000003 107700.0 178399.99999999997 ; + RECT 90500.0 186800.0 89700.0 187600.00000000003 ; + RECT 108500.0 186800.0 107700.0 187600.00000000003 ; + RECT 90500.0 177600.00000000003 89700.0 178399.99999999997 ; + RECT 108500.0 177600.00000000003 107700.0 178399.99999999997 ; + RECT 90500.0 186800.0 89700.0 187600.00000000003 ; + RECT 108500.0 186800.0 107700.0 187600.00000000003 ; + RECT 90500.0 196000.0 89700.0 196800.0 ; + RECT 108500.0 196000.0 107700.0 196800.0 ; + RECT 111400.0 163700.0 112000.0 164300.0 ; + RECT 111400.0 173300.0 112000.0 173899.99999999997 ; + RECT 111400.0 182100.00000000003 112000.0 182700.0 ; + RECT 111400.0 191700.0 112000.0 192300.0 ; + RECT 126900.0 124100.00000000001 127700.0 122500.0 ; + RECT 126900.0 129900.0 127700.0 132300.0 ; + RECT 130100.0 129900.0 130900.0 132300.0 ; + RECT 131700.0 130699.99999999999 132500.0 132000.0 ; + RECT 131700.0 122800.00000000001 132500.0 124100.00000000001 ; + RECT 126900.0 129900.0 127700.0 130699.99999999999 ; + RECT 128500.0 129900.0 129300.00000000001 130699.99999999999 ; + RECT 128500.0 129900.0 129300.00000000001 130699.99999999999 ; + RECT 126900.0 129900.0 127700.0 130699.99999999999 ; + RECT 128500.0 129900.0 129300.00000000001 130699.99999999999 ; + RECT 130100.0 129900.0 130900.0 130699.99999999999 ; + RECT 130100.0 129900.0 130900.0 130699.99999999999 ; + RECT 128500.0 129900.0 129300.00000000001 130699.99999999999 ; + RECT 126900.0 124100.00000000001 127700.0 124900.0 ; + RECT 128500.0 124100.00000000001 129300.00000000001 124900.0 ; + RECT 128500.0 124100.00000000001 129300.00000000001 124900.0 ; + RECT 126900.0 124100.00000000001 127700.0 124900.0 ; + RECT 128500.0 124100.00000000001 129300.00000000001 124900.0 ; + RECT 130100.0 124100.00000000001 130900.0 124900.0 ; + RECT 130100.0 124100.00000000001 130900.0 124900.0 ; + RECT 128500.0 124100.00000000001 129300.00000000001 124900.0 ; + RECT 131700.0 130300.00000000001 132500.0 131100.00000000003 ; + RECT 131700.0 123700.0 132500.0 124500.0 ; + RECT 130100.0 125800.00000000001 129300.00000000001 126600.00000000001 ; + RECT 128100.0 127200.0 127300.00000000001 128000.0 ; + RECT 128500.0 129900.0 129300.00000000001 130699.99999999999 ; + RECT 130100.0 124100.00000000001 130900.0 124900.0 ; + RECT 130900.0 127200.0 130100.0 128000.0 ; + RECT 127300.00000000001 127200.0 128100.0 128000.0 ; + RECT 129300.00000000001 125800.00000000001 130100.0 126600.00000000001 ; + RECT 130100.0 127200.0 130900.0 128000.0 ; + RECT 125700.0 131700.0 135300.0 132300.0 ; + RECT 125700.0 122500.0 135300.0 123100.00000000001 ; + RECT 126900.0 139900.0 127700.0 141500.0 ; + RECT 126900.0 134100.00000000003 127700.0 131700.0 ; + RECT 130100.0 134100.00000000003 130900.0 131700.0 ; + RECT 131700.0 133300.0 132500.0 132000.0 ; + RECT 131700.0 141200.0 132500.0 139900.0 ; + RECT 126900.0 134100.00000000003 127700.0 133300.0 ; + RECT 128500.0 134100.00000000003 129300.00000000001 133300.0 ; + RECT 128500.0 134100.00000000003 129300.00000000001 133300.0 ; + RECT 126900.0 134100.00000000003 127700.0 133300.0 ; + RECT 128500.0 134100.00000000003 129300.00000000001 133300.0 ; + RECT 130100.0 134100.00000000003 130900.0 133300.0 ; + RECT 130100.0 134100.00000000003 130900.0 133300.0 ; + RECT 128500.0 134100.00000000003 129300.00000000001 133300.0 ; + RECT 126900.0 139900.0 127700.0 139100.00000000003 ; + RECT 128500.0 139900.0 129300.00000000001 139100.00000000003 ; + RECT 128500.0 139900.0 129300.00000000001 139100.00000000003 ; + RECT 126900.0 139900.0 127700.0 139100.00000000003 ; + RECT 128500.0 139900.0 129300.00000000001 139100.00000000003 ; + RECT 130100.0 139900.0 130900.0 139100.00000000003 ; + RECT 130100.0 139900.0 130900.0 139100.00000000003 ; + RECT 128500.0 139900.0 129300.00000000001 139100.00000000003 ; + RECT 131700.0 133700.0 132500.0 132900.0 ; + RECT 131700.0 140300.0 132500.0 139500.0 ; + RECT 130100.0 138200.0 129300.00000000001 137400.0 ; + RECT 128100.0 136800.0 127300.00000000001 136000.0 ; + RECT 128500.0 134100.00000000003 129300.00000000001 133300.0 ; + RECT 130100.0 139900.0 130900.0 139100.00000000003 ; + RECT 130900.0 136800.0 130100.0 136000.0 ; + RECT 127300.00000000001 136800.0 128100.0 136000.0 ; + RECT 129300.00000000001 138200.0 130100.0 137400.0 ; + RECT 130100.0 136800.0 130900.0 136000.0 ; + RECT 125700.0 132300.0 135300.0 131700.0 ; + RECT 125700.0 141500.0 135300.0 140900.0 ; + RECT 126900.0 142500.0 127700.0 140900.0 ; + RECT 126900.0 148300.0 127700.0 150700.0 ; + RECT 130100.0 148300.0 130900.0 150700.0 ; + RECT 131700.0 149100.00000000003 132500.0 150400.0 ; + RECT 131700.0 141200.0 132500.0 142500.0 ; + RECT 126900.0 148300.0 127700.0 149100.00000000003 ; + RECT 128500.0 148300.0 129300.00000000001 149100.00000000003 ; + RECT 128500.0 148300.0 129300.00000000001 149100.00000000003 ; + RECT 126900.0 148300.0 127700.0 149100.00000000003 ; + RECT 128500.0 148300.0 129300.00000000001 149100.00000000003 ; + RECT 130100.0 148300.0 130900.0 149100.00000000003 ; + RECT 130100.0 148300.0 130900.0 149100.00000000003 ; + RECT 128500.0 148300.0 129300.00000000001 149100.00000000003 ; + RECT 126900.0 142500.0 127700.0 143300.0 ; + RECT 128500.0 142500.0 129300.00000000001 143300.0 ; + RECT 128500.0 142500.0 129300.00000000001 143300.0 ; + RECT 126900.0 142500.0 127700.0 143300.0 ; + RECT 128500.0 142500.0 129300.00000000001 143300.0 ; + RECT 130100.0 142500.0 130900.0 143300.0 ; + RECT 130100.0 142500.0 130900.0 143300.0 ; + RECT 128500.0 142500.0 129300.00000000001 143300.0 ; + RECT 131700.0 148700.0 132500.0 149500.0 ; + RECT 131700.0 142100.00000000003 132500.0 142900.0 ; + RECT 130100.0 144200.0 129300.00000000001 145000.0 ; + RECT 128100.0 145600.00000000003 127300.00000000001 146400.0 ; + RECT 128500.0 148300.0 129300.00000000001 149100.00000000003 ; + RECT 130100.0 142500.0 130900.0 143300.0 ; + RECT 130900.0 145600.00000000003 130100.0 146400.0 ; + RECT 127300.00000000001 145600.00000000003 128100.0 146400.0 ; + RECT 129300.00000000001 144200.0 130100.0 145000.0 ; + RECT 130100.0 145600.00000000003 130900.0 146400.0 ; + RECT 125700.0 150100.00000000003 135300.0 150700.0 ; + RECT 125700.0 140900.0 135300.0 141500.0 ; + RECT 126900.0 158300.0 127700.0 159899.99999999997 ; + RECT 126900.0 152500.0 127700.0 150100.00000000003 ; + RECT 130100.0 152500.0 130900.0 150100.00000000003 ; + RECT 131700.0 151700.0 132500.0 150400.0 ; + RECT 131700.0 159600.00000000003 132500.0 158300.0 ; + RECT 126900.0 152500.0 127700.0 151700.0 ; + RECT 128500.0 152500.0 129300.00000000001 151700.0 ; + RECT 128500.0 152500.0 129300.00000000001 151700.0 ; + RECT 126900.0 152500.0 127700.0 151700.0 ; + RECT 128500.0 152500.0 129300.00000000001 151700.0 ; + RECT 130100.0 152500.0 130900.0 151700.0 ; + RECT 130100.0 152500.0 130900.0 151700.0 ; + RECT 128500.0 152500.0 129300.00000000001 151700.0 ; + RECT 126900.0 158300.0 127700.0 157500.0 ; + RECT 128500.0 158300.0 129300.00000000001 157500.0 ; + RECT 128500.0 158300.0 129300.00000000001 157500.0 ; + RECT 126900.0 158300.0 127700.0 157500.0 ; + RECT 128500.0 158300.0 129300.00000000001 157500.0 ; + RECT 130100.0 158300.0 130900.0 157500.0 ; + RECT 130100.0 158300.0 130900.0 157500.0 ; + RECT 128500.0 158300.0 129300.00000000001 157500.0 ; + RECT 131700.0 152100.00000000003 132500.0 151300.0 ; + RECT 131700.0 158700.0 132500.0 157899.99999999997 ; + RECT 130100.0 156600.00000000003 129300.00000000001 155800.0 ; + RECT 128100.0 155200.0 127300.00000000001 154399.99999999997 ; + RECT 128500.0 152500.0 129300.00000000001 151700.0 ; + RECT 130100.0 158300.0 130900.0 157500.0 ; + RECT 130900.0 155200.0 130100.0 154399.99999999997 ; + RECT 127300.00000000001 155200.0 128100.0 154399.99999999997 ; + RECT 129300.00000000001 156600.00000000003 130100.0 155800.0 ; + RECT 130100.0 155200.0 130900.0 154399.99999999997 ; + RECT 125700.0 150700.0 135300.0 150100.00000000003 ; + RECT 125700.0 159899.99999999997 135300.0 159300.0 ; + RECT 126900.0 160899.99999999997 127700.0 159300.0 ; + RECT 126900.0 166700.0 127700.0 169100.00000000003 ; + RECT 130100.0 166700.0 130900.0 169100.00000000003 ; + RECT 131700.0 167500.0 132500.0 168800.0 ; + RECT 131700.0 159600.00000000003 132500.0 160899.99999999997 ; + RECT 126900.0 166700.0 127700.0 167500.0 ; + RECT 128500.0 166700.0 129300.00000000001 167500.0 ; + RECT 128500.0 166700.0 129300.00000000001 167500.0 ; + RECT 126900.0 166700.0 127700.0 167500.0 ; + RECT 128500.0 166700.0 129300.00000000001 167500.0 ; + RECT 130100.0 166700.0 130900.0 167500.0 ; + RECT 130100.0 166700.0 130900.0 167500.0 ; + RECT 128500.0 166700.0 129300.00000000001 167500.0 ; + RECT 126900.0 160899.99999999997 127700.0 161700.0 ; + RECT 128500.0 160899.99999999997 129300.00000000001 161700.0 ; + RECT 128500.0 160899.99999999997 129300.00000000001 161700.0 ; + RECT 126900.0 160899.99999999997 127700.0 161700.0 ; + RECT 128500.0 160899.99999999997 129300.00000000001 161700.0 ; + RECT 130100.0 160899.99999999997 130900.0 161700.0 ; + RECT 130100.0 160899.99999999997 130900.0 161700.0 ; + RECT 128500.0 160899.99999999997 129300.00000000001 161700.0 ; + RECT 131700.0 167100.00000000003 132500.0 167899.99999999997 ; + RECT 131700.0 160500.0 132500.0 161300.0 ; + RECT 130100.0 162600.00000000003 129300.00000000001 163399.99999999997 ; + RECT 128100.0 164000.0 127300.00000000001 164800.0 ; + RECT 128500.0 166700.0 129300.00000000001 167500.0 ; + RECT 130100.0 160899.99999999997 130900.0 161700.0 ; + RECT 130900.0 164000.0 130100.0 164800.0 ; + RECT 127300.00000000001 164000.0 128100.0 164800.0 ; + RECT 129300.00000000001 162600.00000000003 130100.0 163399.99999999997 ; + RECT 130100.0 164000.0 130900.0 164800.0 ; + RECT 125700.0 168500.0 135300.0 169100.00000000003 ; + RECT 125700.0 159300.0 135300.0 159899.99999999997 ; + RECT 126900.0 176700.0 127700.0 178300.0 ; + RECT 126900.0 170899.99999999997 127700.0 168500.0 ; + RECT 130100.0 170899.99999999997 130900.0 168500.0 ; + RECT 131700.0 170100.00000000003 132500.0 168800.0 ; + RECT 131700.0 178000.0 132500.0 176700.0 ; + RECT 126900.0 170899.99999999997 127700.0 170100.00000000003 ; + RECT 128500.0 170899.99999999997 129300.00000000001 170100.00000000003 ; + RECT 128500.0 170899.99999999997 129300.00000000001 170100.00000000003 ; + RECT 126900.0 170899.99999999997 127700.0 170100.00000000003 ; + RECT 128500.0 170899.99999999997 129300.00000000001 170100.00000000003 ; + RECT 130100.0 170899.99999999997 130900.0 170100.00000000003 ; + RECT 130100.0 170899.99999999997 130900.0 170100.00000000003 ; + RECT 128500.0 170899.99999999997 129300.00000000001 170100.00000000003 ; + RECT 126900.0 176700.0 127700.0 175899.99999999997 ; + RECT 128500.0 176700.0 129300.00000000001 175899.99999999997 ; + RECT 128500.0 176700.0 129300.00000000001 175899.99999999997 ; + RECT 126900.0 176700.0 127700.0 175899.99999999997 ; + RECT 128500.0 176700.0 129300.00000000001 175899.99999999997 ; + RECT 130100.0 176700.0 130900.0 175899.99999999997 ; + RECT 130100.0 176700.0 130900.0 175899.99999999997 ; + RECT 128500.0 176700.0 129300.00000000001 175899.99999999997 ; + RECT 131700.0 170500.0 132500.0 169700.0 ; + RECT 131700.0 177100.00000000003 132500.0 176300.0 ; + RECT 130100.0 175000.0 129300.00000000001 174200.0 ; + RECT 128100.0 173600.00000000003 127300.00000000001 172800.0 ; + RECT 128500.0 170899.99999999997 129300.00000000001 170100.00000000003 ; + RECT 130100.0 176700.0 130900.0 175899.99999999997 ; + RECT 130900.0 173600.00000000003 130100.0 172800.0 ; + RECT 127300.00000000001 173600.00000000003 128100.0 172800.0 ; + RECT 129300.00000000001 175000.0 130100.0 174200.0 ; + RECT 130100.0 173600.00000000003 130900.0 172800.0 ; + RECT 125700.0 169100.00000000003 135300.0 168500.0 ; + RECT 125700.0 178300.0 135300.0 177700.0 ; + RECT 126900.0 179300.0 127700.0 177700.0 ; + RECT 126900.0 185100.00000000003 127700.0 187500.0 ; + RECT 130100.0 185100.00000000003 130900.0 187500.0 ; + RECT 131700.0 185899.99999999997 132500.0 187200.0 ; + RECT 131700.0 178000.0 132500.0 179300.0 ; + RECT 126900.0 185100.00000000003 127700.0 185899.99999999997 ; + RECT 128500.0 185100.00000000003 129300.00000000001 185899.99999999997 ; + RECT 128500.0 185100.00000000003 129300.00000000001 185899.99999999997 ; + RECT 126900.0 185100.00000000003 127700.0 185899.99999999997 ; + RECT 128500.0 185100.00000000003 129300.00000000001 185899.99999999997 ; + RECT 130100.0 185100.00000000003 130900.0 185899.99999999997 ; + RECT 130100.0 185100.00000000003 130900.0 185899.99999999997 ; + RECT 128500.0 185100.00000000003 129300.00000000001 185899.99999999997 ; + RECT 126900.0 179300.0 127700.0 180100.00000000003 ; + RECT 128500.0 179300.0 129300.00000000001 180100.00000000003 ; + RECT 128500.0 179300.0 129300.00000000001 180100.00000000003 ; + RECT 126900.0 179300.0 127700.0 180100.00000000003 ; + RECT 128500.0 179300.0 129300.00000000001 180100.00000000003 ; + RECT 130100.0 179300.0 130900.0 180100.00000000003 ; + RECT 130100.0 179300.0 130900.0 180100.00000000003 ; + RECT 128500.0 179300.0 129300.00000000001 180100.00000000003 ; + RECT 131700.0 185500.0 132500.0 186300.0 ; + RECT 131700.0 178899.99999999997 132500.0 179700.0 ; + RECT 130100.0 181000.0 129300.00000000001 181800.0 ; + RECT 128100.0 182399.99999999997 127300.00000000001 183200.0 ; + RECT 128500.0 185100.00000000003 129300.00000000001 185899.99999999997 ; + RECT 130100.0 179300.0 130900.0 180100.00000000003 ; + RECT 130900.0 182399.99999999997 130100.0 183200.0 ; + RECT 127300.00000000001 182399.99999999997 128100.0 183200.0 ; + RECT 129300.00000000001 181000.0 130100.0 181800.0 ; + RECT 130100.0 182399.99999999997 130900.0 183200.0 ; + RECT 125700.0 186899.99999999997 135300.0 187500.0 ; + RECT 125700.0 177700.0 135300.0 178300.0 ; + RECT 126900.0 195100.00000000003 127700.0 196700.0 ; + RECT 126900.0 189300.0 127700.0 186900.00000000003 ; + RECT 130100.0 189300.0 130900.0 186900.00000000003 ; + RECT 131700.0 188500.0 132500.0 187200.0 ; + RECT 131700.0 196400.00000000003 132500.0 195100.00000000003 ; + RECT 126900.0 189300.0 127700.0 188500.0 ; + RECT 128500.0 189300.0 129300.00000000001 188500.0 ; + RECT 128500.0 189300.0 129300.00000000001 188500.0 ; + RECT 126900.0 189300.0 127700.0 188500.0 ; + RECT 128500.0 189300.0 129300.00000000001 188500.0 ; + RECT 130100.0 189300.0 130900.0 188500.0 ; + RECT 130100.0 189300.0 130900.0 188500.0 ; + RECT 128500.0 189300.0 129300.00000000001 188500.0 ; + RECT 126900.0 195100.00000000003 127700.0 194300.0 ; + RECT 128500.0 195100.00000000003 129300.00000000001 194300.0 ; + RECT 128500.0 195100.00000000003 129300.00000000001 194300.0 ; + RECT 126900.0 195100.00000000003 127700.0 194300.0 ; + RECT 128500.0 195100.00000000003 129300.00000000001 194300.0 ; + RECT 130100.0 195100.00000000003 130900.0 194300.0 ; + RECT 130100.0 195100.00000000003 130900.0 194300.0 ; + RECT 128500.0 195100.00000000003 129300.00000000001 194300.0 ; + RECT 131700.0 188900.00000000003 132500.0 188100.00000000003 ; + RECT 131700.0 195500.0 132500.0 194700.0 ; + RECT 130100.0 193400.00000000003 129300.00000000001 192600.00000000003 ; + RECT 128100.0 192000.0 127300.00000000001 191200.0 ; + RECT 128500.0 189300.0 129300.00000000001 188500.0 ; + RECT 130100.0 195100.00000000003 130900.0 194300.0 ; + RECT 130900.0 192000.0 130100.0 191200.0 ; + RECT 127300.00000000001 192000.0 128100.0 191200.0 ; + RECT 129300.00000000001 193400.00000000003 130100.0 192600.00000000003 ; + RECT 130100.0 192000.0 130900.0 191200.0 ; + RECT 125700.0 187500.0 135300.0 186900.00000000003 ; + RECT 125700.0 196700.0 135300.0 196100.00000000003 ; + RECT 126900.0 197700.0 127700.0 196100.00000000003 ; + RECT 126900.0 203500.0 127700.0 205900.00000000003 ; + RECT 130100.0 203500.0 130900.0 205900.00000000003 ; + RECT 131700.0 204300.0 132500.0 205600.00000000003 ; + RECT 131700.0 196400.00000000003 132500.0 197700.0 ; + RECT 126900.0 203500.0 127700.0 204300.0 ; + RECT 128500.0 203500.0 129300.00000000001 204300.0 ; + RECT 128500.0 203500.0 129300.00000000001 204300.0 ; + RECT 126900.0 203500.0 127700.0 204300.0 ; + RECT 128500.0 203500.0 129300.00000000001 204300.0 ; + RECT 130100.0 203500.0 130900.0 204300.0 ; + RECT 130100.0 203500.0 130900.0 204300.0 ; + RECT 128500.0 203500.0 129300.00000000001 204300.0 ; + RECT 126900.0 197700.0 127700.0 198500.0 ; + RECT 128500.0 197700.0 129300.00000000001 198500.0 ; + RECT 128500.0 197700.0 129300.00000000001 198500.0 ; + RECT 126900.0 197700.0 127700.0 198500.0 ; + RECT 128500.0 197700.0 129300.00000000001 198500.0 ; + RECT 130100.0 197700.0 130900.0 198500.0 ; + RECT 130100.0 197700.0 130900.0 198500.0 ; + RECT 128500.0 197700.0 129300.00000000001 198500.0 ; + RECT 131700.0 203900.00000000003 132500.0 204700.0 ; + RECT 131700.0 197300.0 132500.0 198100.00000000003 ; + RECT 130100.0 199400.00000000003 129300.00000000001 200200.0 ; + RECT 128100.0 200800.0 127300.00000000001 201600.00000000003 ; + RECT 128500.0 203500.0 129300.00000000001 204300.0 ; + RECT 130100.0 197700.0 130900.0 198500.0 ; + RECT 130900.0 200800.0 130100.0 201600.00000000003 ; + RECT 127300.00000000001 200800.0 128100.0 201600.00000000003 ; + RECT 129300.00000000001 199400.00000000003 130100.0 200200.0 ; + RECT 130100.0 200800.0 130900.0 201600.00000000003 ; + RECT 125700.0 205300.0 135300.0 205900.00000000003 ; + RECT 125700.0 196100.00000000003 135300.0 196700.0 ; + RECT 126900.0 213500.0 127700.0 215100.00000000003 ; + RECT 126900.0 207700.0 127700.0 205300.0 ; + RECT 130100.0 207700.0 130900.0 205300.0 ; + RECT 131700.0 206899.99999999997 132500.0 205600.00000000003 ; + RECT 131700.0 214800.0 132500.0 213500.0 ; + RECT 126900.0 207700.0 127700.0 206899.99999999997 ; + RECT 128500.0 207700.0 129300.00000000001 206899.99999999997 ; + RECT 128500.0 207700.0 129300.00000000001 206899.99999999997 ; + RECT 126900.0 207700.0 127700.0 206899.99999999997 ; + RECT 128500.0 207700.0 129300.00000000001 206899.99999999997 ; + RECT 130100.0 207700.0 130900.0 206899.99999999997 ; + RECT 130100.0 207700.0 130900.0 206899.99999999997 ; + RECT 128500.0 207700.0 129300.00000000001 206899.99999999997 ; + RECT 126900.0 213500.0 127700.0 212700.0 ; + RECT 128500.0 213500.0 129300.00000000001 212700.0 ; + RECT 128500.0 213500.0 129300.00000000001 212700.0 ; + RECT 126900.0 213500.0 127700.0 212700.0 ; + RECT 128500.0 213500.0 129300.00000000001 212700.0 ; + RECT 130100.0 213500.0 130900.0 212700.0 ; + RECT 130100.0 213500.0 130900.0 212700.0 ; + RECT 128500.0 213500.0 129300.00000000001 212700.0 ; + RECT 131700.0 207300.0 132500.0 206500.0 ; + RECT 131700.0 213899.99999999997 132500.0 213100.00000000003 ; + RECT 130100.0 211800.0 129300.00000000001 211000.0 ; + RECT 128100.0 210399.99999999997 127300.00000000001 209600.00000000003 ; + RECT 128500.0 207700.0 129300.00000000001 206899.99999999997 ; + RECT 130100.0 213500.0 130900.0 212700.0 ; + RECT 130900.0 210399.99999999997 130100.0 209600.00000000003 ; + RECT 127300.00000000001 210399.99999999997 128100.0 209600.00000000003 ; + RECT 129300.00000000001 211800.0 130100.0 211000.0 ; + RECT 130100.0 210399.99999999997 130900.0 209600.00000000003 ; + RECT 125700.0 205899.99999999997 135300.0 205300.0 ; + RECT 125700.0 215100.00000000003 135300.0 214500.0 ; + RECT 126900.0 216100.00000000003 127700.0 214500.0 ; + RECT 126900.0 221899.99999999997 127700.0 224300.0 ; + RECT 130100.0 221899.99999999997 130900.0 224300.0 ; + RECT 131700.0 222700.0 132500.0 224000.0 ; + RECT 131700.0 214800.0 132500.0 216100.00000000003 ; + RECT 126900.0 221899.99999999997 127700.0 222700.0 ; + RECT 128500.0 221899.99999999997 129300.00000000001 222700.0 ; + RECT 128500.0 221899.99999999997 129300.00000000001 222700.0 ; + RECT 126900.0 221899.99999999997 127700.0 222700.0 ; + RECT 128500.0 221899.99999999997 129300.00000000001 222700.0 ; + RECT 130100.0 221899.99999999997 130900.0 222700.0 ; + RECT 130100.0 221899.99999999997 130900.0 222700.0 ; + RECT 128500.0 221899.99999999997 129300.00000000001 222700.0 ; + RECT 126900.0 216100.00000000003 127700.0 216899.99999999997 ; + RECT 128500.0 216100.00000000003 129300.00000000001 216899.99999999997 ; + RECT 128500.0 216100.00000000003 129300.00000000001 216899.99999999997 ; + RECT 126900.0 216100.00000000003 127700.0 216899.99999999997 ; + RECT 128500.0 216100.00000000003 129300.00000000001 216899.99999999997 ; + RECT 130100.0 216100.00000000003 130900.0 216899.99999999997 ; + RECT 130100.0 216100.00000000003 130900.0 216899.99999999997 ; + RECT 128500.0 216100.00000000003 129300.00000000001 216899.99999999997 ; + RECT 131700.0 222300.0 132500.0 223100.00000000003 ; + RECT 131700.0 215700.0 132500.0 216500.0 ; + RECT 130100.0 217800.0 129300.00000000001 218600.00000000003 ; + RECT 128100.0 219200.0 127300.00000000001 220000.0 ; + RECT 128500.0 221899.99999999997 129300.00000000001 222700.0 ; + RECT 130100.0 216100.00000000003 130900.0 216899.99999999997 ; + RECT 130900.0 219200.0 130100.0 220000.0 ; + RECT 127300.00000000001 219200.0 128100.0 220000.0 ; + RECT 129300.00000000001 217800.0 130100.0 218600.00000000003 ; + RECT 130100.0 219200.0 130900.0 220000.0 ; + RECT 125700.0 223700.0 135300.0 224300.0 ; + RECT 125700.0 214500.0 135300.0 215100.00000000003 ; + RECT 126900.0 231900.00000000003 127700.0 233500.0 ; + RECT 126900.0 226100.00000000003 127700.0 223700.0 ; + RECT 130100.0 226100.00000000003 130900.0 223700.0 ; + RECT 131700.0 225300.0 132500.0 224000.0 ; + RECT 131700.0 233200.0 132500.0 231900.00000000003 ; + RECT 126900.0 226100.00000000003 127700.0 225300.0 ; + RECT 128500.0 226100.00000000003 129300.00000000001 225300.0 ; + RECT 128500.0 226100.00000000003 129300.00000000001 225300.0 ; + RECT 126900.0 226100.00000000003 127700.0 225300.0 ; + RECT 128500.0 226100.00000000003 129300.00000000001 225300.0 ; + RECT 130100.0 226100.00000000003 130900.0 225300.0 ; + RECT 130100.0 226100.00000000003 130900.0 225300.0 ; + RECT 128500.0 226100.00000000003 129300.00000000001 225300.0 ; + RECT 126900.0 231900.00000000003 127700.0 231100.00000000003 ; + RECT 128500.0 231900.00000000003 129300.00000000001 231100.00000000003 ; + RECT 128500.0 231900.00000000003 129300.00000000001 231100.00000000003 ; + RECT 126900.0 231900.00000000003 127700.0 231100.00000000003 ; + RECT 128500.0 231900.00000000003 129300.00000000001 231100.00000000003 ; + RECT 130100.0 231900.00000000003 130900.0 231100.00000000003 ; + RECT 130100.0 231900.00000000003 130900.0 231100.00000000003 ; + RECT 128500.0 231900.00000000003 129300.00000000001 231100.00000000003 ; + RECT 131700.0 225700.0 132500.0 224900.00000000003 ; + RECT 131700.0 232300.0 132500.0 231500.0 ; + RECT 130100.0 230200.0 129300.00000000001 229400.00000000003 ; + RECT 128100.0 228800.0 127300.00000000001 228000.0 ; + RECT 128500.0 226100.00000000003 129300.00000000001 225300.0 ; + RECT 130100.0 231900.00000000003 130900.0 231100.00000000003 ; + RECT 130900.0 228800.0 130100.0 228000.0 ; + RECT 127300.00000000001 228800.0 128100.0 228000.0 ; + RECT 129300.00000000001 230200.0 130100.0 229400.00000000003 ; + RECT 130100.0 228800.0 130900.0 228000.0 ; + RECT 125700.0 224300.0 135300.0 223700.0 ; + RECT 125700.0 233500.0 135300.0 232900.00000000003 ; + RECT 126900.0 234500.0 127700.0 232900.00000000003 ; + RECT 126900.0 240300.0 127700.0 242700.0 ; + RECT 130100.0 240300.0 130900.0 242700.0 ; + RECT 131700.0 241100.00000000003 132500.0 242400.00000000003 ; + RECT 131700.0 233200.0 132500.0 234500.0 ; + RECT 126900.0 240300.0 127700.0 241100.00000000003 ; + RECT 128500.0 240300.0 129300.00000000001 241100.00000000003 ; + RECT 128500.0 240300.0 129300.00000000001 241100.00000000003 ; + RECT 126900.0 240300.0 127700.0 241100.00000000003 ; + RECT 128500.0 240300.0 129300.00000000001 241100.00000000003 ; + RECT 130100.0 240300.0 130900.0 241100.00000000003 ; + RECT 130100.0 240300.0 130900.0 241100.00000000003 ; + RECT 128500.0 240300.0 129300.00000000001 241100.00000000003 ; + RECT 126900.0 234500.0 127700.0 235300.0 ; + RECT 128500.0 234500.0 129300.00000000001 235300.0 ; + RECT 128500.0 234500.0 129300.00000000001 235300.0 ; + RECT 126900.0 234500.0 127700.0 235300.0 ; + RECT 128500.0 234500.0 129300.00000000001 235300.0 ; + RECT 130100.0 234500.0 130900.0 235300.0 ; + RECT 130100.0 234500.0 130900.0 235300.0 ; + RECT 128500.0 234500.0 129300.00000000001 235300.0 ; + RECT 131700.0 240700.0 132500.0 241500.0 ; + RECT 131700.0 234100.00000000003 132500.0 234900.00000000003 ; + RECT 130100.0 236200.0 129300.00000000001 237000.0 ; + RECT 128100.0 237600.00000000003 127300.00000000001 238400.00000000003 ; + RECT 128500.0 240300.0 129300.00000000001 241100.00000000003 ; + RECT 130100.0 234500.0 130900.0 235300.0 ; + RECT 130900.0 237600.00000000003 130100.0 238400.00000000003 ; + RECT 127300.00000000001 237600.00000000003 128100.0 238400.00000000003 ; + RECT 129300.00000000001 236200.0 130100.0 237000.0 ; + RECT 130100.0 237600.00000000003 130900.0 238400.00000000003 ; + RECT 125700.0 242100.00000000003 135300.0 242700.0 ; + RECT 125700.0 232900.00000000003 135300.0 233500.0 ; + RECT 126900.0 250300.0 127700.0 251900.00000000003 ; + RECT 126900.0 244500.0 127700.0 242100.00000000003 ; + RECT 130100.0 244500.0 130900.0 242100.00000000003 ; + RECT 131700.0 243700.0 132500.0 242400.00000000003 ; + RECT 131700.0 251600.00000000003 132500.0 250300.0 ; + RECT 126900.0 244500.0 127700.0 243700.0 ; + RECT 128500.0 244500.0 129300.00000000001 243700.0 ; + RECT 128500.0 244500.0 129300.00000000001 243700.0 ; + RECT 126900.0 244500.0 127700.0 243700.0 ; + RECT 128500.0 244500.0 129300.00000000001 243700.0 ; + RECT 130100.0 244500.0 130900.0 243700.0 ; + RECT 130100.0 244500.0 130900.0 243700.0 ; + RECT 128500.0 244500.0 129300.00000000001 243700.0 ; + RECT 126900.0 250300.0 127700.0 249500.0 ; + RECT 128500.0 250300.0 129300.00000000001 249500.0 ; + RECT 128500.0 250300.0 129300.00000000001 249500.0 ; + RECT 126900.0 250300.0 127700.0 249500.0 ; + RECT 128500.0 250300.0 129300.00000000001 249500.0 ; + RECT 130100.0 250300.0 130900.0 249500.0 ; + RECT 130100.0 250300.0 130900.0 249500.0 ; + RECT 128500.0 250300.0 129300.00000000001 249500.0 ; + RECT 131700.0 244100.00000000003 132500.0 243300.0 ; + RECT 131700.0 250700.0 132500.0 249900.00000000003 ; + RECT 130100.0 248600.00000000003 129300.00000000001 247800.0 ; + RECT 128100.0 247200.0 127300.00000000001 246400.00000000003 ; + RECT 128500.0 244500.0 129300.00000000001 243700.0 ; + RECT 130100.0 250300.0 130900.0 249500.0 ; + RECT 130900.0 247200.0 130100.0 246400.00000000003 ; + RECT 127300.00000000001 247200.0 128100.0 246400.00000000003 ; + RECT 129300.00000000001 248600.00000000003 130100.0 247800.0 ; + RECT 130100.0 247200.0 130900.0 246400.00000000003 ; + RECT 125700.0 242700.0 135300.0 242100.00000000003 ; + RECT 125700.0 251900.00000000003 135300.0 251300.0 ; + RECT 126900.0 252900.00000000003 127700.0 251300.0 ; + RECT 126900.0 258700.0 127700.0 261100.00000000003 ; + RECT 130100.0 258700.0 130900.0 261100.00000000003 ; + RECT 131700.0 259500.0 132500.0 260800.0 ; + RECT 131700.0 251600.00000000003 132500.0 252900.00000000003 ; + RECT 126900.0 258700.0 127700.0 259500.0 ; + RECT 128500.0 258700.0 129300.00000000001 259500.0 ; + RECT 128500.0 258700.0 129300.00000000001 259500.0 ; + RECT 126900.0 258700.0 127700.0 259500.0 ; + RECT 128500.0 258700.0 129300.00000000001 259500.0 ; + RECT 130100.0 258700.0 130900.0 259500.0 ; + RECT 130100.0 258700.0 130900.0 259500.0 ; + RECT 128500.0 258700.0 129300.00000000001 259500.0 ; + RECT 126900.0 252900.00000000003 127700.0 253700.0 ; + RECT 128500.0 252900.00000000003 129300.00000000001 253700.0 ; + RECT 128500.0 252900.00000000003 129300.00000000001 253700.0 ; + RECT 126900.0 252900.00000000003 127700.0 253700.0 ; + RECT 128500.0 252900.00000000003 129300.00000000001 253700.0 ; + RECT 130100.0 252900.00000000003 130900.0 253700.0 ; + RECT 130100.0 252900.00000000003 130900.0 253700.0 ; + RECT 128500.0 252900.00000000003 129300.00000000001 253700.0 ; + RECT 131700.0 259100.00000000003 132500.0 259900.00000000003 ; + RECT 131700.0 252500.0 132500.0 253300.0 ; + RECT 130100.0 254600.00000000003 129300.00000000001 255400.00000000003 ; + RECT 128100.0 256000.0 127300.00000000001 256800.0 ; + RECT 128500.0 258700.0 129300.00000000001 259500.0 ; + RECT 130100.0 252900.00000000003 130900.0 253700.0 ; + RECT 130900.0 256000.0 130100.0 256800.0 ; + RECT 127300.00000000001 256000.0 128100.0 256800.0 ; + RECT 129300.00000000001 254600.00000000003 130100.0 255400.00000000003 ; + RECT 130100.0 256000.0 130900.0 256800.0 ; + RECT 125700.0 260500.0 135300.0 261100.00000000003 ; + RECT 125700.0 251300.0 135300.0 251900.00000000003 ; + RECT 126900.0 268700.0 127700.0 270300.0 ; + RECT 126900.0 262900.00000000006 127700.0 260500.0 ; + RECT 130100.0 262900.00000000006 130900.0 260500.0 ; + RECT 131700.0 262100.00000000003 132500.0 260800.0 ; + RECT 131700.0 270000.0 132500.0 268700.0 ; + RECT 126900.0 262900.00000000006 127700.0 262100.00000000003 ; + RECT 128500.0 262900.00000000006 129300.00000000001 262100.00000000003 ; + RECT 128500.0 262900.00000000006 129300.00000000001 262100.00000000003 ; + RECT 126900.0 262900.00000000006 127700.0 262100.00000000003 ; + RECT 128500.0 262900.00000000006 129300.00000000001 262100.00000000003 ; + RECT 130100.0 262900.00000000006 130900.0 262100.00000000003 ; + RECT 130100.0 262900.00000000006 130900.0 262100.00000000003 ; + RECT 128500.0 262900.00000000006 129300.00000000001 262100.00000000003 ; + RECT 126900.0 268700.0 127700.0 267900.00000000006 ; + RECT 128500.0 268700.0 129300.00000000001 267900.00000000006 ; + RECT 128500.0 268700.0 129300.00000000001 267900.00000000006 ; + RECT 126900.0 268700.0 127700.0 267900.00000000006 ; + RECT 128500.0 268700.0 129300.00000000001 267900.00000000006 ; + RECT 130100.0 268700.0 130900.0 267900.00000000006 ; + RECT 130100.0 268700.0 130900.0 267900.00000000006 ; + RECT 128500.0 268700.0 129300.00000000001 267900.00000000006 ; + RECT 131700.0 262500.0 132500.0 261700.0 ; + RECT 131700.0 269100.0 132500.0 268300.0 ; + RECT 130100.0 267000.0 129300.00000000001 266200.0 ; + RECT 128100.0 265600.0 127300.00000000001 264800.0 ; + RECT 128500.0 262900.00000000006 129300.00000000001 262100.00000000003 ; + RECT 130100.0 268700.0 130900.0 267900.00000000006 ; + RECT 130900.0 265600.0 130100.0 264800.0 ; + RECT 127300.00000000001 265600.0 128100.0 264800.0 ; + RECT 129300.00000000001 267000.0 130100.0 266200.0 ; + RECT 130100.0 265600.0 130900.0 264800.0 ; + RECT 125700.0 261100.00000000003 135300.0 260500.0 ; + RECT 125700.0 270300.0 135300.0 269700.0 ; + RECT 139700.0 130699.99999999999 140500.0 132000.0 ; + RECT 139700.0 122800.00000000001 140500.0 124100.00000000001 ; + RECT 136500.0 123700.0 137300.0 122500.0 ; + RECT 136500.0 129900.0 137300.0 132300.0 ; + RECT 138300.0 123700.0 138899.99999999997 129900.0 ; + RECT 136500.0 129900.0 137300.0 130699.99999999999 ; + RECT 138100.0 129900.0 138899.99999999997 130699.99999999999 ; + RECT 138100.0 129900.0 138899.99999999997 130699.99999999999 ; + RECT 136500.0 129900.0 137300.0 130699.99999999999 ; + RECT 136500.0 123700.0 137300.0 124500.0 ; + RECT 138100.0 123700.0 138899.99999999997 124500.0 ; + RECT 138100.0 123700.0 138899.99999999997 124500.0 ; + RECT 136500.0 123700.0 137300.0 124500.0 ; + RECT 139700.0 130300.00000000001 140500.0 131100.00000000003 ; + RECT 139700.0 123700.0 140500.0 124500.0 ; + RECT 136900.0 126800.00000000001 137700.0 127600.00000000001 ; + RECT 136900.0 126800.00000000001 137700.0 127600.00000000001 ; + RECT 138600.0 126900.0 139200.0 127500.0 ; + RECT 135300.0 131700.0 141700.0 132300.0 ; + RECT 135300.0 122500.0 141700.0 123100.00000000001 ; + RECT 139700.0 133300.0 140500.0 132000.0 ; + RECT 139700.0 141200.0 140500.0 139900.0 ; + RECT 136500.0 140300.0 137300.0 141500.0 ; + RECT 136500.0 134100.00000000003 137300.0 131700.0 ; + RECT 138300.0 140300.0 138899.99999999997 134100.00000000003 ; + RECT 136500.0 134100.00000000003 137300.0 133300.0 ; + RECT 138100.0 134100.00000000003 138899.99999999997 133300.0 ; + RECT 138100.0 134100.00000000003 138899.99999999997 133300.0 ; + RECT 136500.0 134100.00000000003 137300.0 133300.0 ; + RECT 136500.0 140300.0 137300.0 139500.0 ; + RECT 138100.0 140300.0 138899.99999999997 139500.0 ; + RECT 138100.0 140300.0 138899.99999999997 139500.0 ; + RECT 136500.0 140300.0 137300.0 139500.0 ; + RECT 139700.0 133700.0 140500.0 132900.0 ; + RECT 139700.0 140300.0 140500.0 139500.0 ; + RECT 136900.0 137200.0 137700.0 136400.0 ; + RECT 136900.0 137200.0 137700.0 136400.0 ; + RECT 138600.0 137100.00000000003 139200.0 136500.0 ; + RECT 135300.0 132300.0 141700.0 131700.0 ; + RECT 135300.0 141500.0 141700.0 140900.0 ; + RECT 139700.0 149100.00000000003 140500.0 150400.0 ; + RECT 139700.0 141200.0 140500.0 142500.0 ; + RECT 136500.0 142100.00000000003 137300.0 140900.0 ; + RECT 136500.0 148300.0 137300.0 150700.0 ; + RECT 138300.0 142100.00000000003 138899.99999999997 148300.0 ; + RECT 136500.0 148300.0 137300.0 149100.00000000003 ; + RECT 138100.0 148300.0 138899.99999999997 149100.00000000003 ; + RECT 138100.0 148300.0 138899.99999999997 149100.00000000003 ; + RECT 136500.0 148300.0 137300.0 149100.00000000003 ; + RECT 136500.0 142100.00000000003 137300.0 142900.0 ; + RECT 138100.0 142100.00000000003 138899.99999999997 142900.0 ; + RECT 138100.0 142100.00000000003 138899.99999999997 142900.0 ; + RECT 136500.0 142100.00000000003 137300.0 142900.0 ; + RECT 139700.0 148700.0 140500.0 149500.0 ; + RECT 139700.0 142100.00000000003 140500.0 142900.0 ; + RECT 136900.0 145200.0 137700.0 146000.0 ; + RECT 136900.0 145200.0 137700.0 146000.0 ; + RECT 138600.0 145300.0 139200.0 145900.0 ; + RECT 135300.0 150100.00000000003 141700.0 150700.0 ; + RECT 135300.0 140900.0 141700.0 141500.0 ; + RECT 139700.0 151700.0 140500.0 150400.0 ; + RECT 139700.0 159600.00000000003 140500.0 158300.0 ; + RECT 136500.0 158700.0 137300.0 159899.99999999997 ; + RECT 136500.0 152500.0 137300.0 150100.00000000003 ; + RECT 138300.0 158700.0 138899.99999999997 152500.0 ; + RECT 136500.0 152500.0 137300.0 151700.0 ; + RECT 138100.0 152500.0 138899.99999999997 151700.0 ; + RECT 138100.0 152500.0 138899.99999999997 151700.0 ; + RECT 136500.0 152500.0 137300.0 151700.0 ; + RECT 136500.0 158700.0 137300.0 157899.99999999997 ; + RECT 138100.0 158700.0 138899.99999999997 157899.99999999997 ; + RECT 138100.0 158700.0 138899.99999999997 157899.99999999997 ; + RECT 136500.0 158700.0 137300.0 157899.99999999997 ; + RECT 139700.0 152100.00000000003 140500.0 151300.0 ; + RECT 139700.0 158700.0 140500.0 157899.99999999997 ; + RECT 136900.0 155600.00000000003 137700.0 154800.0 ; + RECT 136900.0 155600.00000000003 137700.0 154800.0 ; + RECT 138600.0 155500.0 139200.0 154899.99999999997 ; + RECT 135300.0 150700.0 141700.0 150100.00000000003 ; + RECT 135300.0 159899.99999999997 141700.0 159300.0 ; + RECT 139700.0 167500.0 140500.0 168800.0 ; + RECT 139700.0 159600.00000000003 140500.0 160899.99999999997 ; + RECT 136500.0 160500.0 137300.0 159300.0 ; + RECT 136500.0 166700.0 137300.0 169100.00000000003 ; + RECT 138300.0 160500.0 138899.99999999997 166700.0 ; + RECT 136500.0 166700.0 137300.0 167500.0 ; + RECT 138100.0 166700.0 138899.99999999997 167500.0 ; + RECT 138100.0 166700.0 138899.99999999997 167500.0 ; + RECT 136500.0 166700.0 137300.0 167500.0 ; + RECT 136500.0 160500.0 137300.0 161300.0 ; + RECT 138100.0 160500.0 138899.99999999997 161300.0 ; + RECT 138100.0 160500.0 138899.99999999997 161300.0 ; + RECT 136500.0 160500.0 137300.0 161300.0 ; + RECT 139700.0 167100.00000000003 140500.0 167899.99999999997 ; + RECT 139700.0 160500.0 140500.0 161300.0 ; + RECT 136900.0 163600.00000000003 137700.0 164399.99999999997 ; + RECT 136900.0 163600.00000000003 137700.0 164399.99999999997 ; + RECT 138600.0 163700.0 139200.0 164300.0 ; + RECT 135300.0 168500.0 141700.0 169100.00000000003 ; + RECT 135300.0 159300.0 141700.0 159899.99999999997 ; + RECT 139700.0 170100.00000000003 140500.0 168800.0 ; + RECT 139700.0 178000.0 140500.0 176700.0 ; + RECT 136500.0 177100.00000000003 137300.0 178300.0 ; + RECT 136500.0 170899.99999999997 137300.0 168500.0 ; + RECT 138300.0 177100.00000000003 138899.99999999997 170899.99999999997 ; + RECT 136500.0 170899.99999999997 137300.0 170100.00000000003 ; + RECT 138100.0 170899.99999999997 138899.99999999997 170100.00000000003 ; + RECT 138100.0 170899.99999999997 138899.99999999997 170100.00000000003 ; + RECT 136500.0 170899.99999999997 137300.0 170100.00000000003 ; + RECT 136500.0 177100.00000000003 137300.0 176300.0 ; + RECT 138100.0 177100.00000000003 138899.99999999997 176300.0 ; + RECT 138100.0 177100.00000000003 138899.99999999997 176300.0 ; + RECT 136500.0 177100.00000000003 137300.0 176300.0 ; + RECT 139700.0 170500.0 140500.0 169700.0 ; + RECT 139700.0 177100.00000000003 140500.0 176300.0 ; + RECT 136900.0 174000.0 137700.0 173200.0 ; + RECT 136900.0 174000.0 137700.0 173200.0 ; + RECT 138600.0 173899.99999999997 139200.0 173300.0 ; + RECT 135300.0 169100.00000000003 141700.0 168500.0 ; + RECT 135300.0 178300.0 141700.0 177700.0 ; + RECT 139700.0 185899.99999999997 140500.0 187200.0 ; + RECT 139700.0 178000.0 140500.0 179300.0 ; + RECT 136500.0 178899.99999999997 137300.0 177700.0 ; + RECT 136500.0 185100.00000000003 137300.0 187500.0 ; + RECT 138300.0 178899.99999999997 138899.99999999997 185100.00000000003 ; + RECT 136500.0 185100.00000000003 137300.0 185899.99999999997 ; + RECT 138100.0 185100.00000000003 138899.99999999997 185899.99999999997 ; + RECT 138100.0 185100.00000000003 138899.99999999997 185899.99999999997 ; + RECT 136500.0 185100.00000000003 137300.0 185899.99999999997 ; + RECT 136500.0 178899.99999999997 137300.0 179700.0 ; + RECT 138100.0 178899.99999999997 138899.99999999997 179700.0 ; + RECT 138100.0 178899.99999999997 138899.99999999997 179700.0 ; + RECT 136500.0 178899.99999999997 137300.0 179700.0 ; + RECT 139700.0 185500.0 140500.0 186300.0 ; + RECT 139700.0 178899.99999999997 140500.0 179700.0 ; + RECT 136900.0 182000.0 137700.0 182800.0 ; + RECT 136900.0 182000.0 137700.0 182800.0 ; + RECT 138600.0 182100.00000000003 139200.0 182700.0 ; + RECT 135300.0 186899.99999999997 141700.0 187500.0 ; + RECT 135300.0 177700.0 141700.0 178300.0 ; + RECT 139700.0 188500.0 140500.0 187200.0 ; + RECT 139700.0 196400.00000000003 140500.0 195100.00000000003 ; + RECT 136500.0 195500.0 137300.0 196700.0 ; + RECT 136500.0 189300.0 137300.0 186900.00000000003 ; + RECT 138300.0 195500.0 138899.99999999997 189300.0 ; + RECT 136500.0 189300.0 137300.0 188500.0 ; + RECT 138100.0 189300.0 138899.99999999997 188500.0 ; + RECT 138100.0 189300.0 138899.99999999997 188500.0 ; + RECT 136500.0 189300.0 137300.0 188500.0 ; + RECT 136500.0 195500.0 137300.0 194700.0 ; + RECT 138100.0 195500.0 138899.99999999997 194700.0 ; + RECT 138100.0 195500.0 138899.99999999997 194700.0 ; + RECT 136500.0 195500.0 137300.0 194700.0 ; + RECT 139700.0 188900.00000000003 140500.0 188100.00000000003 ; + RECT 139700.0 195500.0 140500.0 194700.0 ; + RECT 136900.0 192400.00000000003 137700.0 191600.00000000003 ; + RECT 136900.0 192400.00000000003 137700.0 191600.00000000003 ; + RECT 138600.0 192300.0 139200.0 191700.0 ; + RECT 135300.0 187500.0 141700.0 186900.00000000003 ; + RECT 135300.0 196700.0 141700.0 196100.00000000003 ; + RECT 139700.0 204300.0 140500.0 205600.00000000003 ; + RECT 139700.0 196400.00000000003 140500.0 197700.0 ; + RECT 136500.0 197300.0 137300.0 196100.00000000003 ; + RECT 136500.0 203500.0 137300.0 205900.00000000003 ; + RECT 138300.0 197300.0 138899.99999999997 203500.0 ; + RECT 136500.0 203500.0 137300.0 204300.0 ; + RECT 138100.0 203500.0 138899.99999999997 204300.0 ; + RECT 138100.0 203500.0 138899.99999999997 204300.0 ; + RECT 136500.0 203500.0 137300.0 204300.0 ; + RECT 136500.0 197300.0 137300.0 198100.00000000003 ; + RECT 138100.0 197300.0 138899.99999999997 198100.00000000003 ; + RECT 138100.0 197300.0 138899.99999999997 198100.00000000003 ; + RECT 136500.0 197300.0 137300.0 198100.00000000003 ; + RECT 139700.0 203900.00000000003 140500.0 204700.0 ; + RECT 139700.0 197300.0 140500.0 198100.00000000003 ; + RECT 136900.0 200400.00000000003 137700.0 201200.0 ; + RECT 136900.0 200400.00000000003 137700.0 201200.0 ; + RECT 138600.0 200500.0 139200.0 201100.00000000003 ; + RECT 135300.0 205300.0 141700.0 205900.00000000003 ; + RECT 135300.0 196100.00000000003 141700.0 196700.0 ; + RECT 139700.0 206899.99999999997 140500.0 205600.00000000003 ; + RECT 139700.0 214800.0 140500.0 213500.0 ; + RECT 136500.0 213899.99999999997 137300.0 215100.00000000003 ; + RECT 136500.0 207700.0 137300.0 205300.0 ; + RECT 138300.0 213899.99999999997 138899.99999999997 207700.0 ; + RECT 136500.0 207700.0 137300.0 206899.99999999997 ; + RECT 138100.0 207700.0 138899.99999999997 206899.99999999997 ; + RECT 138100.0 207700.0 138899.99999999997 206899.99999999997 ; + RECT 136500.0 207700.0 137300.0 206899.99999999997 ; + RECT 136500.0 213899.99999999997 137300.0 213100.00000000003 ; + RECT 138100.0 213899.99999999997 138899.99999999997 213100.00000000003 ; + RECT 138100.0 213899.99999999997 138899.99999999997 213100.00000000003 ; + RECT 136500.0 213899.99999999997 137300.0 213100.00000000003 ; + RECT 139700.0 207300.0 140500.0 206500.0 ; + RECT 139700.0 213899.99999999997 140500.0 213100.00000000003 ; + RECT 136900.0 210800.0 137700.0 210000.0 ; + RECT 136900.0 210800.0 137700.0 210000.0 ; + RECT 138600.0 210700.0 139200.0 210100.00000000003 ; + RECT 135300.0 205899.99999999997 141700.0 205300.0 ; + RECT 135300.0 215100.00000000003 141700.0 214500.0 ; + RECT 139700.0 222700.0 140500.0 224000.0 ; + RECT 139700.0 214800.0 140500.0 216100.00000000003 ; + RECT 136500.0 215700.0 137300.0 214500.0 ; + RECT 136500.0 221899.99999999997 137300.0 224300.0 ; + RECT 138300.0 215700.0 138899.99999999997 221899.99999999997 ; + RECT 136500.0 221899.99999999997 137300.0 222700.0 ; + RECT 138100.0 221899.99999999997 138899.99999999997 222700.0 ; + RECT 138100.0 221899.99999999997 138899.99999999997 222700.0 ; + RECT 136500.0 221899.99999999997 137300.0 222700.0 ; + RECT 136500.0 215700.0 137300.0 216500.0 ; + RECT 138100.0 215700.0 138899.99999999997 216500.0 ; + RECT 138100.0 215700.0 138899.99999999997 216500.0 ; + RECT 136500.0 215700.0 137300.0 216500.0 ; + RECT 139700.0 222300.0 140500.0 223100.00000000003 ; + RECT 139700.0 215700.0 140500.0 216500.0 ; + RECT 136900.0 218800.0 137700.0 219600.00000000003 ; + RECT 136900.0 218800.0 137700.0 219600.00000000003 ; + RECT 138600.0 218899.99999999997 139200.0 219500.0 ; + RECT 135300.0 223700.0 141700.0 224300.0 ; + RECT 135300.0 214500.0 141700.0 215100.00000000003 ; + RECT 139700.0 225300.0 140500.0 224000.0 ; + RECT 139700.0 233200.0 140500.0 231900.00000000003 ; + RECT 136500.0 232300.0 137300.0 233500.0 ; + RECT 136500.0 226100.00000000003 137300.0 223700.0 ; + RECT 138300.0 232300.0 138899.99999999997 226100.00000000003 ; + RECT 136500.0 226100.00000000003 137300.0 225300.0 ; + RECT 138100.0 226100.00000000003 138899.99999999997 225300.0 ; + RECT 138100.0 226100.00000000003 138899.99999999997 225300.0 ; + RECT 136500.0 226100.00000000003 137300.0 225300.0 ; + RECT 136500.0 232300.0 137300.0 231500.0 ; + RECT 138100.0 232300.0 138899.99999999997 231500.0 ; + RECT 138100.0 232300.0 138899.99999999997 231500.0 ; + RECT 136500.0 232300.0 137300.0 231500.0 ; + RECT 139700.0 225700.0 140500.0 224900.00000000003 ; + RECT 139700.0 232300.0 140500.0 231500.0 ; + RECT 136900.0 229200.0 137700.0 228400.00000000003 ; + RECT 136900.0 229200.0 137700.0 228400.00000000003 ; + RECT 138600.0 229100.00000000003 139200.0 228500.0 ; + RECT 135300.0 224300.0 141700.0 223700.0 ; + RECT 135300.0 233500.0 141700.0 232900.00000000003 ; + RECT 139700.0 241100.00000000003 140500.0 242400.00000000003 ; + RECT 139700.0 233200.0 140500.0 234500.0 ; + RECT 136500.0 234100.00000000003 137300.0 232900.00000000003 ; + RECT 136500.0 240300.0 137300.0 242700.0 ; + RECT 138300.0 234100.00000000003 138899.99999999997 240300.0 ; + RECT 136500.0 240300.0 137300.0 241100.00000000003 ; + RECT 138100.0 240300.0 138899.99999999997 241100.00000000003 ; + RECT 138100.0 240300.0 138899.99999999997 241100.00000000003 ; + RECT 136500.0 240300.0 137300.0 241100.00000000003 ; + RECT 136500.0 234100.00000000003 137300.0 234900.00000000003 ; + RECT 138100.0 234100.00000000003 138899.99999999997 234900.00000000003 ; + RECT 138100.0 234100.00000000003 138899.99999999997 234900.00000000003 ; + RECT 136500.0 234100.00000000003 137300.0 234900.00000000003 ; + RECT 139700.0 240700.0 140500.0 241500.0 ; + RECT 139700.0 234100.00000000003 140500.0 234900.00000000003 ; + RECT 136900.0 237200.0 137700.0 238000.0 ; + RECT 136900.0 237200.0 137700.0 238000.0 ; + RECT 138600.0 237300.0 139200.0 237900.00000000003 ; + RECT 135300.0 242100.00000000003 141700.0 242700.0 ; + RECT 135300.0 232900.00000000003 141700.0 233500.0 ; + RECT 139700.0 243700.0 140500.0 242400.00000000003 ; + RECT 139700.0 251600.00000000003 140500.0 250300.0 ; + RECT 136500.0 250700.0 137300.0 251900.00000000003 ; + RECT 136500.0 244500.0 137300.0 242100.00000000003 ; + RECT 138300.0 250700.0 138899.99999999997 244500.0 ; + RECT 136500.0 244500.0 137300.0 243700.0 ; + RECT 138100.0 244500.0 138899.99999999997 243700.0 ; + RECT 138100.0 244500.0 138899.99999999997 243700.0 ; + RECT 136500.0 244500.0 137300.0 243700.0 ; + RECT 136500.0 250700.0 137300.0 249900.00000000003 ; + RECT 138100.0 250700.0 138899.99999999997 249900.00000000003 ; + RECT 138100.0 250700.0 138899.99999999997 249900.00000000003 ; + RECT 136500.0 250700.0 137300.0 249900.00000000003 ; + RECT 139700.0 244100.00000000003 140500.0 243300.0 ; + RECT 139700.0 250700.0 140500.0 249900.00000000003 ; + RECT 136900.0 247600.00000000003 137700.0 246800.0 ; + RECT 136900.0 247600.00000000003 137700.0 246800.0 ; + RECT 138600.0 247500.0 139200.0 246900.00000000003 ; + RECT 135300.0 242700.0 141700.0 242100.00000000003 ; + RECT 135300.0 251900.00000000003 141700.0 251300.0 ; + RECT 139700.0 259500.0 140500.0 260800.0 ; + RECT 139700.0 251600.00000000003 140500.0 252900.00000000003 ; + RECT 136500.0 252500.0 137300.0 251300.0 ; + RECT 136500.0 258700.0 137300.0 261100.00000000003 ; + RECT 138300.0 252500.0 138899.99999999997 258700.0 ; + RECT 136500.0 258700.0 137300.0 259500.0 ; + RECT 138100.0 258700.0 138899.99999999997 259500.0 ; + RECT 138100.0 258700.0 138899.99999999997 259500.0 ; + RECT 136500.0 258700.0 137300.0 259500.0 ; + RECT 136500.0 252500.0 137300.0 253300.0 ; + RECT 138100.0 252500.0 138899.99999999997 253300.0 ; + RECT 138100.0 252500.0 138899.99999999997 253300.0 ; + RECT 136500.0 252500.0 137300.0 253300.0 ; + RECT 139700.0 259100.00000000003 140500.0 259900.00000000003 ; + RECT 139700.0 252500.0 140500.0 253300.0 ; + RECT 136900.0 255600.00000000003 137700.0 256400.00000000003 ; + RECT 136900.0 255600.00000000003 137700.0 256400.00000000003 ; + RECT 138600.0 255700.0 139200.0 256300.0 ; + RECT 135300.0 260500.0 141700.0 261100.00000000003 ; + RECT 135300.0 251300.0 141700.0 251900.00000000003 ; + RECT 139700.0 262100.00000000003 140500.0 260800.0 ; + RECT 139700.0 270000.0 140500.0 268700.0 ; + RECT 136500.0 269100.0 137300.0 270300.0 ; + RECT 136500.0 262900.00000000006 137300.0 260500.0 ; + RECT 138300.0 269100.0 138899.99999999997 262900.00000000006 ; + RECT 136500.0 262900.00000000006 137300.0 262100.00000000003 ; + RECT 138100.0 262900.00000000006 138899.99999999997 262100.00000000003 ; + RECT 138100.0 262900.00000000006 138899.99999999997 262100.00000000003 ; + RECT 136500.0 262900.00000000006 137300.0 262100.00000000003 ; + RECT 136500.0 269100.0 137300.0 268300.0 ; + RECT 138100.0 269100.0 138899.99999999997 268300.0 ; + RECT 138100.0 269100.0 138899.99999999997 268300.0 ; + RECT 136500.0 269100.0 137300.0 268300.0 ; + RECT 139700.0 262500.0 140500.0 261700.0 ; + RECT 139700.0 269100.0 140500.0 268300.0 ; + RECT 136900.0 266000.0 137700.0 265200.0 ; + RECT 136900.0 266000.0 137700.0 265200.0 ; + RECT 138600.0 265900.00000000006 139200.0 265300.0 ; + RECT 135300.0 261100.00000000003 141700.0 260500.0 ; + RECT 135300.0 270300.0 141700.0 269700.0 ; + RECT 112100.0 126800.00000000001 111300.00000000001 127600.00000000001 ; + RECT 112100.0 136400.0 111300.00000000001 137200.0 ; + RECT 112100.0 145200.0 111300.00000000001 146000.0 ; + RECT 112100.0 154800.0 111300.00000000001 155600.00000000003 ; + RECT 112100.0 163600.00000000003 111300.00000000001 164399.99999999997 ; + RECT 112100.0 173200.0 111300.00000000001 174000.0 ; + RECT 112100.0 182000.0 111300.00000000001 182800.0 ; + RECT 112100.0 191600.00000000003 111300.00000000001 192399.99999999997 ; + RECT 115500.0 127200.0 114700.0 128000.0 ; + RECT 121100.0 125800.00000000001 120300.00000000001 126600.00000000001 ; + RECT 115500.0 136000.0 114700.0 136800.0 ; + RECT 122500.0 137400.0 121700.0 138200.0 ; + RECT 115500.0 145600.00000000003 114700.0 146400.0 ; + RECT 123900.0 144200.0 123100.0 145000.0 ; + RECT 115500.0 154399.99999999997 114700.0 155200.0 ; + RECT 125300.0 155800.0 124500.0 156600.00000000003 ; + RECT 116900.0 164000.0 116100.0 164800.0 ; + RECT 121100.0 162600.00000000003 120300.00000000001 163399.99999999997 ; + RECT 116900.0 172800.0 116100.0 173600.00000000003 ; + RECT 122500.0 174200.0 121700.0 175000.0 ; + RECT 116900.0 182399.99999999997 116100.0 183200.0 ; + RECT 123900.0 181000.0 123100.0 181800.0 ; + RECT 116900.0 191200.0 116100.0 192000.0 ; + RECT 125300.0 192600.00000000003 124500.0 193399.99999999997 ; + RECT 118300.0 200800.0 117500.0 201600.00000000003 ; + RECT 121100.0 199400.00000000003 120300.00000000001 200200.0 ; + RECT 118300.0 209600.00000000003 117500.0 210400.00000000003 ; + RECT 122500.0 211000.0 121700.0 211800.0 ; + RECT 118300.0 219200.0 117500.0 220000.0 ; + RECT 123900.0 217800.0 123100.0 218600.00000000003 ; + RECT 118300.0 228000.0 117500.0 228800.0 ; + RECT 125300.0 229400.00000000003 124500.0 230200.0 ; + RECT 119700.0 237600.00000000003 118900.0 238400.00000000003 ; + RECT 121100.0 236200.0 120300.00000000001 237000.0 ; + RECT 119700.0 246400.00000000003 118900.0 247200.0 ; + RECT 122500.0 247800.0 121700.0 248600.00000000003 ; + RECT 119700.0 256000.0 118900.0 256800.0 ; + RECT 123900.0 254600.00000000003 123100.0 255400.00000000003 ; + RECT 119700.0 264800.0 118900.0 265600.0 ; + RECT 125300.0 266200.0 124500.0 267000.0 ; + RECT 130900.0 131600.00000000003 130100.00000000003 132400.0 ; + RECT 130900.0 122400.0 130100.00000000003 123200.0 ; + RECT 130900.0 131600.00000000003 130100.00000000003 132400.0 ; + RECT 130900.0 140800.0 130100.00000000003 141600.00000000003 ; + RECT 130900.0 150000.0 130100.00000000003 150800.0 ; + RECT 130900.0 140800.0 130100.00000000003 141600.00000000003 ; + RECT 130900.0 150000.0 130100.00000000003 150800.0 ; + RECT 130900.0 159200.0 130100.00000000003 160000.0 ; + RECT 130900.0 168399.99999999997 130100.00000000003 169200.0 ; + RECT 130900.0 159200.0 130100.00000000003 160000.0 ; + RECT 130900.0 168399.99999999997 130100.00000000003 169200.0 ; + RECT 130900.0 177600.00000000003 130100.00000000003 178399.99999999997 ; + RECT 130900.0 186800.0 130100.00000000003 187600.00000000003 ; + RECT 130900.0 177600.00000000003 130100.00000000003 178399.99999999997 ; + RECT 130900.0 186800.0 130100.00000000003 187600.00000000003 ; + RECT 130900.0 196000.0 130100.00000000003 196800.0 ; + RECT 130900.0 205200.0 130100.00000000003 206000.0 ; + RECT 130900.0 196000.0 130100.00000000003 196800.0 ; + RECT 130900.0 205200.0 130100.00000000003 206000.0 ; + RECT 130900.0 214400.00000000003 130100.00000000003 215200.0 ; + RECT 130900.0 223600.00000000003 130100.00000000003 224400.00000000003 ; + RECT 130900.0 214400.00000000003 130100.00000000003 215200.0 ; + RECT 130900.0 223600.00000000003 130100.00000000003 224400.00000000003 ; + RECT 130900.0 232800.0 130100.00000000003 233600.00000000003 ; + RECT 130900.0 242000.0 130100.00000000003 242800.0 ; + RECT 130900.0 232800.0 130100.00000000003 233600.00000000003 ; + RECT 130900.0 242000.0 130100.00000000003 242800.0 ; + RECT 130900.0 251200.0 130100.00000000003 252000.0 ; + RECT 130900.0 260399.99999999997 130100.00000000003 261200.0 ; + RECT 130900.0 251200.0 130100.00000000003 252000.0 ; + RECT 130900.0 260399.99999999997 130100.00000000003 261200.0 ; + RECT 130900.0 269600.0 130100.00000000003 270400.00000000006 ; + RECT 138600.00000000003 126900.0 139200.0 127500.0 ; + RECT 138600.00000000003 136500.0 139200.0 137100.00000000003 ; + RECT 138600.00000000003 145300.0 139200.0 145900.0 ; + RECT 138600.00000000003 154899.99999999997 139200.0 155500.0 ; + RECT 138600.00000000003 163700.0 139200.0 164300.0 ; + RECT 138600.00000000003 173300.0 139200.0 173899.99999999997 ; + RECT 138600.00000000003 182100.00000000003 139200.0 182700.0 ; + RECT 138600.00000000003 191700.0 139200.0 192300.0 ; + RECT 138600.00000000003 200500.0 139200.0 201100.00000000003 ; + RECT 138600.00000000003 210100.00000000003 139200.0 210700.0 ; + RECT 138600.00000000003 218900.00000000003 139200.0 219500.0 ; + RECT 138600.00000000003 228500.0 139200.0 229100.00000000003 ; + RECT 138600.00000000003 237300.0 139200.0 237900.00000000003 ; + RECT 138600.00000000003 246900.00000000003 139200.0 247500.0 ; + RECT 138600.00000000003 255700.0 139200.0 256300.0 ; + RECT 138600.00000000003 265300.0 139200.0 265900.0 ; + RECT 146200.0 126900.0 149899.99999999997 127500.00000000001 ; + RECT 151600.0 127300.00000000001 152200.0 127900.0 ; + RECT 151600.0 126900.0 152200.0 127500.00000000001 ; + RECT 151600.0 127500.0 152200.0 127600.00000000001 ; + RECT 151899.99999999997 127300.00000000001 156300.0 127900.0 ; + RECT 156300.0 127300.00000000001 157100.0 127900.0 ; + RECT 162600.0 127300.00000000001 163200.0 127900.0 ; + RECT 162600.0 126900.0 163200.0 127500.00000000001 ; + RECT 159899.99999999997 127300.00000000001 162899.99999999997 127900.0 ; + RECT 162600.0 127200.0 163200.0 127600.00000000001 ; + RECT 162899.99999999997 126900.0 165899.99999999997 127500.00000000001 ; + RECT 146200.0 136500.0 149899.99999999997 137100.00000000003 ; + RECT 151600.0 136100.00000000003 152200.0 136700.0 ; + RECT 151600.0 136500.0 152200.0 137100.00000000003 ; + RECT 151600.0 136400.0 152200.0 137100.00000000003 ; + RECT 151899.99999999997 136100.00000000003 156300.0 136700.0 ; + RECT 156300.0 136100.00000000003 157100.0 136700.0 ; + RECT 162600.0 136100.00000000003 163200.0 136700.0 ; + RECT 162600.0 136500.0 163200.0 137100.00000000003 ; + RECT 159899.99999999997 136100.00000000003 162899.99999999997 136700.0 ; + RECT 162600.0 136400.0 163200.0 136800.0 ; + RECT 162899.99999999997 136500.0 165899.99999999997 137100.00000000003 ; + RECT 146200.0 145300.0 149899.99999999997 145900.0 ; + RECT 151600.0 145700.0 152200.0 146300.0 ; + RECT 151600.0 145300.0 152200.0 145900.0 ; + RECT 151600.0 145900.0 152200.0 146000.0 ; + RECT 151899.99999999997 145700.0 156300.0 146300.0 ; + RECT 156300.0 145700.0 157100.0 146300.0 ; + RECT 162600.0 145700.0 163200.0 146300.0 ; + RECT 162600.0 145300.0 163200.0 145900.0 ; + RECT 159899.99999999997 145700.0 162899.99999999997 146300.0 ; + RECT 162600.0 145600.00000000003 163200.0 146000.0 ; + RECT 162899.99999999997 145300.0 165899.99999999997 145900.0 ; + RECT 146200.0 154899.99999999997 149899.99999999997 155500.0 ; + RECT 151600.0 154500.0 152200.0 155100.00000000003 ; + RECT 151600.0 154899.99999999997 152200.0 155500.0 ; + RECT 151600.0 154800.0 152200.0 155500.0 ; + RECT 151899.99999999997 154500.0 156300.0 155100.00000000003 ; + RECT 156300.0 154500.0 157100.0 155100.00000000003 ; + RECT 162600.0 154500.0 163200.0 155100.00000000003 ; + RECT 162600.0 154899.99999999997 163200.0 155500.0 ; + RECT 159899.99999999997 154500.0 162899.99999999997 155100.00000000003 ; + RECT 162600.0 154800.0 163200.0 155200.0 ; + RECT 162899.99999999997 154899.99999999997 165899.99999999997 155500.0 ; + RECT 146200.0 163700.0 149899.99999999997 164300.0 ; + RECT 151600.0 164100.00000000003 152200.0 164700.0 ; + RECT 151600.0 163700.0 152200.0 164300.0 ; + RECT 151600.0 164300.0 152200.0 164399.99999999997 ; + RECT 151899.99999999997 164100.00000000003 156300.0 164700.0 ; + RECT 156300.0 164100.00000000003 157100.0 164700.0 ; + RECT 162600.0 164100.00000000003 163200.0 164700.0 ; + RECT 162600.0 163700.0 163200.0 164300.0 ; + RECT 159899.99999999997 164100.00000000003 162899.99999999997 164700.0 ; + RECT 162600.0 164000.0 163200.0 164399.99999999997 ; + RECT 162899.99999999997 163700.0 165899.99999999997 164300.0 ; + RECT 146200.0 173300.0 149899.99999999997 173899.99999999997 ; + RECT 151600.0 172899.99999999997 152200.0 173500.0 ; + RECT 151600.0 173300.0 152200.0 173899.99999999997 ; + RECT 151600.0 173200.0 152200.0 173900.00000000003 ; + RECT 151899.99999999997 172899.99999999997 156300.0 173500.0 ; + RECT 156300.0 172899.99999999997 157100.0 173500.0 ; + RECT 162600.0 172899.99999999997 163200.0 173500.0 ; + RECT 162600.0 173300.0 163200.0 173899.99999999997 ; + RECT 159899.99999999997 172899.99999999997 162899.99999999997 173500.0 ; + RECT 162600.0 173200.0 163200.0 173600.00000000003 ; + RECT 162899.99999999997 173300.0 165899.99999999997 173899.99999999997 ; + RECT 146200.0 182100.00000000003 149899.99999999997 182700.0 ; + RECT 151600.0 182500.0 152200.0 183100.00000000003 ; + RECT 151600.0 182100.00000000003 152200.0 182700.0 ; + RECT 151600.0 182700.0 152200.0 182800.0 ; + RECT 151899.99999999997 182500.0 156300.0 183100.00000000003 ; + RECT 156300.0 182500.0 157100.0 183100.00000000003 ; + RECT 162600.0 182500.0 163200.0 183100.00000000003 ; + RECT 162600.0 182100.00000000003 163200.0 182700.0 ; + RECT 159899.99999999997 182500.0 162899.99999999997 183100.00000000003 ; + RECT 162600.0 182399.99999999997 163200.0 182800.0 ; + RECT 162899.99999999997 182100.00000000003 165899.99999999997 182700.0 ; + RECT 146200.0 191700.0 149899.99999999997 192300.0 ; + RECT 151600.0 191300.0 152200.0 191899.99999999997 ; + RECT 151600.0 191700.0 152200.0 192300.0 ; + RECT 151600.0 191600.00000000003 152200.0 192300.0 ; + RECT 151899.99999999997 191300.0 156300.0 191899.99999999997 ; + RECT 156300.0 191300.0 157100.0 191899.99999999997 ; + RECT 162600.0 191300.0 163200.0 191899.99999999997 ; + RECT 162600.0 191700.0 163200.0 192300.0 ; + RECT 159899.99999999997 191300.0 162899.99999999997 191899.99999999997 ; + RECT 162600.0 191600.00000000003 163200.0 192000.0 ; + RECT 162899.99999999997 191700.0 165899.99999999997 192300.0 ; + RECT 146200.0 200500.0 149899.99999999997 201100.00000000003 ; + RECT 151600.0 200900.00000000003 152200.0 201500.0 ; + RECT 151600.0 200500.0 152200.0 201100.00000000003 ; + RECT 151600.0 201100.00000000003 152200.0 201200.0 ; + RECT 151899.99999999997 200900.00000000003 156300.0 201500.0 ; + RECT 156300.0 200900.00000000003 157100.0 201500.0 ; + RECT 162600.0 200900.00000000003 163200.0 201500.0 ; + RECT 162600.0 200500.0 163200.0 201100.00000000003 ; + RECT 159899.99999999997 200900.00000000003 162899.99999999997 201500.0 ; + RECT 162600.0 200800.0 163200.0 201200.0 ; + RECT 162899.99999999997 200500.0 165899.99999999997 201100.00000000003 ; + RECT 146200.0 210100.00000000003 149899.99999999997 210700.0 ; + RECT 151600.0 209700.0 152200.0 210300.0 ; + RECT 151600.0 210100.00000000003 152200.0 210700.0 ; + RECT 151600.0 210000.0 152200.0 210700.0 ; + RECT 151899.99999999997 209700.0 156300.0 210300.0 ; + RECT 156300.0 209700.0 157100.0 210300.0 ; + RECT 162600.0 209700.0 163200.0 210300.0 ; + RECT 162600.0 210100.00000000003 163200.0 210700.0 ; + RECT 159899.99999999997 209700.0 162899.99999999997 210300.0 ; + RECT 162600.0 210000.0 163200.0 210400.00000000003 ; + RECT 162899.99999999997 210100.00000000003 165899.99999999997 210700.0 ; + RECT 146200.0 218900.00000000003 149899.99999999997 219500.0 ; + RECT 151600.0 219300.0 152200.0 219899.99999999997 ; + RECT 151600.0 218900.00000000003 152200.0 219500.0 ; + RECT 151600.0 219500.0 152200.0 219600.00000000003 ; + RECT 151899.99999999997 219300.0 156300.0 219899.99999999997 ; + RECT 156300.0 219300.0 157100.0 219899.99999999997 ; + RECT 162600.0 219300.0 163200.0 219899.99999999997 ; + RECT 162600.0 218900.00000000003 163200.0 219500.0 ; + RECT 159899.99999999997 219300.0 162899.99999999997 219899.99999999997 ; + RECT 162600.0 219200.0 163200.0 219600.00000000003 ; + RECT 162899.99999999997 218900.00000000003 165899.99999999997 219500.0 ; + RECT 146200.0 228500.0 149899.99999999997 229100.00000000003 ; + RECT 151600.0 228100.00000000003 152200.0 228700.0 ; + RECT 151600.0 228500.0 152200.0 229100.00000000003 ; + RECT 151600.0 228400.00000000003 152200.0 229100.00000000003 ; + RECT 151899.99999999997 228100.00000000003 156300.0 228700.0 ; + RECT 156300.0 228100.00000000003 157100.0 228700.0 ; + RECT 162600.0 228100.00000000003 163200.0 228700.0 ; + RECT 162600.0 228500.0 163200.0 229100.00000000003 ; + RECT 159899.99999999997 228100.00000000003 162899.99999999997 228700.0 ; + RECT 162600.0 228400.00000000003 163200.0 228800.0 ; + RECT 162899.99999999997 228500.0 165899.99999999997 229100.00000000003 ; + RECT 146200.0 237300.0 149899.99999999997 237899.99999999997 ; + RECT 151600.0 237700.0 152200.0 238300.0 ; + RECT 151600.0 237300.0 152200.0 237899.99999999997 ; + RECT 151600.0 237900.00000000003 152200.0 238000.0 ; + RECT 151899.99999999997 237700.0 156300.0 238300.0 ; + RECT 156300.0 237700.0 157100.0 238300.0 ; + RECT 162600.0 237700.0 163200.0 238300.0 ; + RECT 162600.0 237300.0 163200.0 237899.99999999997 ; + RECT 159899.99999999997 237700.0 162899.99999999997 238300.0 ; + RECT 162600.0 237600.00000000003 163200.0 238000.0 ; + RECT 162899.99999999997 237300.0 165899.99999999997 237899.99999999997 ; + RECT 146200.0 246900.00000000003 149899.99999999997 247500.0 ; + RECT 151600.0 246500.0 152200.0 247100.00000000003 ; + RECT 151600.0 246900.00000000003 152200.0 247500.0 ; + RECT 151600.0 246800.0 152200.0 247500.0 ; + RECT 151899.99999999997 246500.0 156300.0 247100.00000000003 ; + RECT 156300.0 246500.0 157100.0 247100.00000000003 ; + RECT 162600.0 246500.0 163200.0 247100.00000000003 ; + RECT 162600.0 246900.00000000003 163200.0 247500.0 ; + RECT 159899.99999999997 246500.0 162899.99999999997 247100.00000000003 ; + RECT 162600.0 246800.0 163200.0 247200.0 ; + RECT 162899.99999999997 246900.00000000003 165899.99999999997 247500.0 ; + RECT 146200.0 255700.0 149899.99999999997 256300.0 ; + RECT 151600.0 256100.00000000003 152200.0 256700.0 ; + RECT 151600.0 255700.0 152200.0 256300.0 ; + RECT 151600.0 256300.0 152200.0 256399.99999999997 ; + RECT 151899.99999999997 256100.00000000003 156300.0 256700.0 ; + RECT 156300.0 256100.00000000003 157100.0 256700.0 ; + RECT 162600.0 256100.00000000003 163200.0 256700.0 ; + RECT 162600.0 255700.0 163200.0 256300.0 ; + RECT 159899.99999999997 256100.00000000003 162899.99999999997 256700.0 ; + RECT 162600.0 256000.0 163200.0 256400.00000000003 ; + RECT 162899.99999999997 255700.0 165899.99999999997 256300.0 ; + RECT 146200.0 265300.0 149899.99999999997 265900.0 ; + RECT 151600.0 264900.0 152200.0 265500.0 ; + RECT 151600.0 265300.0 152200.0 265900.0 ; + RECT 151600.0 265200.0 152200.0 265900.0 ; + RECT 151899.99999999997 264900.0 156300.0 265500.0 ; + RECT 156300.0 264900.0 157100.0 265500.0 ; + RECT 162600.0 264900.0 163200.0 265500.0 ; + RECT 162600.0 265300.0 163200.0 265900.0 ; + RECT 159899.99999999997 264900.0 162899.99999999997 265500.0 ; + RECT 162600.0 265200.0 163200.0 265600.0 ; + RECT 162899.99999999997 265300.0 165899.99999999997 265900.0 ; + RECT 152700.0 130699.99999999999 153500.0 132000.0 ; + RECT 152700.0 122800.00000000001 153500.0 124100.00000000001 ; + RECT 149500.0 123700.0 150300.0 122500.0 ; + RECT 149500.0 129900.0 150300.0 132300.0 ; + RECT 151300.0 123700.0 151899.99999999997 129900.0 ; + RECT 149500.0 129900.0 150300.0 130699.99999999999 ; + RECT 151100.0 129900.0 151899.99999999997 130699.99999999999 ; + RECT 151100.0 129900.0 151899.99999999997 130699.99999999999 ; + RECT 149500.0 129900.0 150300.0 130699.99999999999 ; + RECT 149500.0 123700.0 150300.0 124500.0 ; + RECT 151100.0 123700.0 151899.99999999997 124500.0 ; + RECT 151100.0 123700.0 151899.99999999997 124500.0 ; + RECT 149500.0 123700.0 150300.0 124500.0 ; + RECT 152700.0 130300.00000000001 153500.0 131100.00000000003 ; + RECT 152700.0 123700.0 153500.0 124500.0 ; + RECT 149899.99999999997 126800.00000000001 150700.0 127600.00000000001 ; + RECT 149899.99999999997 126800.00000000001 150700.0 127600.00000000001 ; + RECT 151600.0 126900.0 152200.0 127500.0 ; + RECT 148300.0 131700.0 154700.0 132300.0 ; + RECT 148300.0 122500.0 154700.0 123100.00000000001 ; + RECT 155899.99999999997 124100.00000000001 156700.0 122500.0 ; + RECT 155899.99999999997 129900.0 156700.0 132300.0 ; + RECT 159100.0 129900.0 159899.99999999997 132300.0 ; + RECT 160700.0 130699.99999999999 161500.0 132000.0 ; + RECT 160700.0 122800.00000000001 161500.0 124100.00000000001 ; + RECT 155899.99999999997 129900.0 156700.0 130699.99999999999 ; + RECT 157500.0 129900.0 158300.0 130699.99999999999 ; + RECT 157500.0 129900.0 158300.0 130699.99999999999 ; + RECT 155899.99999999997 129900.0 156700.0 130699.99999999999 ; + RECT 157500.0 129900.0 158300.0 130699.99999999999 ; + RECT 159100.0 129900.0 159900.0 130699.99999999999 ; + RECT 159100.0 129900.0 159899.99999999997 130699.99999999999 ; + RECT 157500.0 129900.0 158300.0 130699.99999999999 ; + RECT 155899.99999999997 124100.00000000001 156700.0 124900.0 ; + RECT 157500.0 124100.00000000001 158300.0 124900.0 ; + RECT 157500.0 124100.00000000001 158300.0 124900.0 ; + RECT 155899.99999999997 124100.00000000001 156700.0 124900.0 ; + RECT 157500.0 124100.00000000001 158300.0 124900.0 ; + RECT 159100.0 124100.00000000001 159900.0 124900.0 ; + RECT 159100.0 124100.00000000001 159899.99999999997 124900.0 ; + RECT 157500.0 124100.00000000001 158300.0 124900.0 ; + RECT 160700.0 130300.00000000001 161500.0 131100.00000000003 ; + RECT 160700.0 123700.0 161500.0 124500.0 ; + RECT 159100.0 125800.00000000001 158300.0 126600.00000000001 ; + RECT 157100.0 127200.0 156300.0 128000.0 ; + RECT 157500.0 129900.0 158300.0 130699.99999999999 ; + RECT 159100.0 124100.00000000001 159899.99999999997 124900.0 ; + RECT 159899.99999999997 127200.0 159100.0 128000.0 ; + RECT 156300.0 127200.0 157100.0 128000.0 ; + RECT 158300.0 125800.00000000001 159100.0 126600.00000000001 ; + RECT 159100.0 127200.0 159899.99999999997 128000.0 ; + RECT 154700.0 131700.0 164300.0 132300.0 ; + RECT 154700.0 122500.0 164300.0 123100.00000000001 ; + RECT 168700.0 130699.99999999999 169500.0 132000.0 ; + RECT 168700.0 122800.00000000001 169500.0 124100.00000000001 ; + RECT 165500.0 123700.0 166300.0 122500.0 ; + RECT 165500.0 129900.0 166300.0 132300.0 ; + RECT 167300.0 123700.0 167900.0 129900.0 ; + RECT 165500.0 129900.0 166300.0 130699.99999999999 ; + RECT 167100.00000000003 129900.0 167900.0 130699.99999999999 ; + RECT 167100.00000000003 129900.0 167900.0 130699.99999999999 ; + RECT 165500.0 129900.0 166300.0 130699.99999999999 ; + RECT 165500.0 123700.0 166300.0 124500.0 ; + RECT 167100.00000000003 123700.0 167900.0 124500.0 ; + RECT 167100.00000000003 123700.0 167900.0 124500.0 ; + RECT 165500.0 123700.0 166300.0 124500.0 ; + RECT 168700.0 130300.00000000001 169500.0 131100.00000000003 ; + RECT 168700.0 123700.0 169500.0 124500.0 ; + RECT 165900.0 126800.00000000001 166700.0 127600.00000000001 ; + RECT 165900.0 126800.00000000001 166700.0 127600.00000000001 ; + RECT 167600.00000000003 126900.0 168200.0 127500.0 ; + RECT 164300.0 131700.0 170700.0 132300.0 ; + RECT 164300.0 122500.0 170700.0 123100.00000000001 ; + RECT 152700.0 133300.0 153500.0 132000.0 ; + RECT 152700.0 141200.0 153500.0 139900.0 ; + RECT 149500.0 140300.0 150300.0 141500.0 ; + RECT 149500.0 134100.00000000003 150300.0 131700.0 ; + RECT 151300.0 140300.0 151899.99999999997 134100.00000000003 ; + RECT 149500.0 134100.00000000003 150300.0 133300.0 ; + RECT 151100.0 134100.00000000003 151899.99999999997 133300.0 ; + RECT 151100.0 134100.00000000003 151899.99999999997 133300.0 ; + RECT 149500.0 134100.00000000003 150300.0 133300.0 ; + RECT 149500.0 140300.0 150300.0 139500.0 ; + RECT 151100.0 140300.0 151899.99999999997 139500.0 ; + RECT 151100.0 140300.0 151899.99999999997 139500.0 ; + RECT 149500.0 140300.0 150300.0 139500.0 ; + RECT 152700.0 133700.0 153500.0 132900.0 ; + RECT 152700.0 140300.0 153500.0 139500.0 ; + RECT 149899.99999999997 137200.0 150700.0 136400.0 ; + RECT 149899.99999999997 137200.0 150700.0 136400.0 ; + RECT 151600.0 137100.00000000003 152200.0 136500.0 ; + RECT 148300.0 132300.0 154700.0 131700.0 ; + RECT 148300.0 141500.0 154700.0 140900.0 ; + RECT 155899.99999999997 139900.0 156700.0 141500.0 ; + RECT 155899.99999999997 134100.00000000003 156700.0 131700.0 ; + RECT 159100.0 134100.00000000003 159899.99999999997 131700.0 ; + RECT 160700.0 133300.0 161500.0 132000.0 ; + RECT 160700.0 141200.0 161500.0 139900.0 ; + RECT 155899.99999999997 134100.00000000003 156700.0 133300.0 ; + RECT 157500.0 134100.00000000003 158300.0 133300.0 ; + RECT 157500.0 134100.00000000003 158300.0 133300.0 ; + RECT 155899.99999999997 134100.00000000003 156700.0 133300.0 ; + RECT 157500.0 134100.00000000003 158300.0 133300.0 ; + RECT 159100.0 134100.00000000003 159900.0 133300.0 ; + RECT 159100.0 134100.00000000003 159899.99999999997 133300.0 ; + RECT 157500.0 134100.00000000003 158300.0 133300.0 ; + RECT 155899.99999999997 139900.0 156700.0 139100.00000000003 ; + RECT 157500.0 139900.0 158300.0 139100.00000000003 ; + RECT 157500.0 139900.0 158300.0 139100.00000000003 ; + RECT 155899.99999999997 139900.0 156700.0 139100.00000000003 ; + RECT 157500.0 139900.0 158300.0 139100.00000000003 ; + RECT 159100.0 139900.0 159900.0 139100.00000000003 ; + RECT 159100.0 139900.0 159899.99999999997 139100.00000000003 ; + RECT 157500.0 139900.0 158300.0 139100.00000000003 ; + RECT 160700.0 133700.0 161500.0 132900.0 ; + RECT 160700.0 140300.0 161500.0 139500.0 ; + RECT 159100.0 138200.0 158300.0 137400.0 ; + RECT 157100.0 136800.0 156300.0 136000.0 ; + RECT 157500.0 134100.00000000003 158300.0 133300.0 ; + RECT 159100.0 139900.0 159899.99999999997 139100.00000000003 ; + RECT 159899.99999999997 136800.0 159100.0 136000.0 ; + RECT 156300.0 136800.0 157100.0 136000.0 ; + RECT 158300.0 138200.0 159100.0 137400.0 ; + RECT 159100.0 136800.0 159899.99999999997 136000.0 ; + RECT 154700.0 132300.0 164300.0 131700.0 ; + RECT 154700.0 141500.0 164300.0 140900.0 ; + RECT 168700.0 133300.0 169500.0 132000.0 ; + RECT 168700.0 141200.0 169500.0 139900.0 ; + RECT 165500.0 140300.0 166300.0 141500.0 ; + RECT 165500.0 134100.00000000003 166300.0 131700.0 ; + RECT 167300.0 140300.0 167900.0 134100.00000000003 ; + RECT 165500.0 134100.00000000003 166300.0 133300.0 ; + RECT 167100.00000000003 134100.00000000003 167900.0 133300.0 ; + RECT 167100.00000000003 134100.00000000003 167900.0 133300.0 ; + RECT 165500.0 134100.00000000003 166300.0 133300.0 ; + RECT 165500.0 140300.0 166300.0 139500.0 ; + RECT 167100.00000000003 140300.0 167900.0 139500.0 ; + RECT 167100.00000000003 140300.0 167900.0 139500.0 ; + RECT 165500.0 140300.0 166300.0 139500.0 ; + RECT 168700.0 133700.0 169500.0 132900.0 ; + RECT 168700.0 140300.0 169500.0 139500.0 ; + RECT 165900.0 137200.0 166700.0 136400.0 ; + RECT 165900.0 137200.0 166700.0 136400.0 ; + RECT 167600.00000000003 137100.00000000003 168200.0 136500.0 ; + RECT 164300.0 132300.0 170700.0 131700.0 ; + RECT 164300.0 141500.0 170700.0 140900.0 ; + RECT 152700.0 149100.00000000003 153500.0 150400.0 ; + RECT 152700.0 141200.0 153500.0 142500.0 ; + RECT 149500.0 142100.00000000003 150300.0 140900.0 ; + RECT 149500.0 148300.0 150300.0 150700.0 ; + RECT 151300.0 142100.00000000003 151899.99999999997 148300.0 ; + RECT 149500.0 148300.0 150300.0 149100.00000000003 ; + RECT 151100.0 148300.0 151899.99999999997 149100.00000000003 ; + RECT 151100.0 148300.0 151899.99999999997 149100.00000000003 ; + RECT 149500.0 148300.0 150300.0 149100.00000000003 ; + RECT 149500.0 142100.00000000003 150300.0 142900.0 ; + RECT 151100.0 142100.00000000003 151899.99999999997 142900.0 ; + RECT 151100.0 142100.00000000003 151899.99999999997 142900.0 ; + RECT 149500.0 142100.00000000003 150300.0 142900.0 ; + RECT 152700.0 148700.0 153500.0 149500.0 ; + RECT 152700.0 142100.00000000003 153500.0 142900.0 ; + RECT 149899.99999999997 145200.0 150700.0 146000.0 ; + RECT 149899.99999999997 145200.0 150700.0 146000.0 ; + RECT 151600.0 145300.0 152200.0 145900.0 ; + RECT 148300.0 150100.00000000003 154700.0 150700.0 ; + RECT 148300.0 140900.0 154700.0 141500.0 ; + RECT 155899.99999999997 142500.0 156700.0 140900.0 ; + RECT 155899.99999999997 148300.0 156700.0 150700.0 ; + RECT 159100.0 148300.0 159899.99999999997 150700.0 ; + RECT 160700.0 149100.00000000003 161500.0 150400.0 ; + RECT 160700.0 141200.0 161500.0 142500.0 ; + RECT 155899.99999999997 148300.0 156700.0 149100.00000000003 ; + RECT 157500.0 148300.0 158300.0 149100.00000000003 ; + RECT 157500.0 148300.0 158300.0 149100.00000000003 ; + RECT 155899.99999999997 148300.0 156700.0 149100.00000000003 ; + RECT 157500.0 148300.0 158300.0 149100.00000000003 ; + RECT 159100.0 148300.0 159900.0 149100.00000000003 ; + RECT 159100.0 148300.0 159899.99999999997 149100.00000000003 ; + RECT 157500.0 148300.0 158300.0 149100.00000000003 ; + RECT 155899.99999999997 142500.0 156700.0 143300.0 ; + RECT 157500.0 142500.0 158300.0 143300.0 ; + RECT 157500.0 142500.0 158300.0 143300.0 ; + RECT 155899.99999999997 142500.0 156700.0 143300.0 ; + RECT 157500.0 142500.0 158300.0 143300.0 ; + RECT 159100.0 142500.0 159900.0 143300.0 ; + RECT 159100.0 142500.0 159899.99999999997 143300.0 ; + RECT 157500.0 142500.0 158300.0 143300.0 ; + RECT 160700.0 148700.0 161500.0 149500.0 ; + RECT 160700.0 142100.00000000003 161500.0 142900.0 ; + RECT 159100.0 144200.0 158300.0 145000.0 ; + RECT 157100.0 145600.00000000003 156300.0 146400.0 ; + RECT 157500.0 148300.0 158300.0 149100.00000000003 ; + RECT 159100.0 142500.0 159899.99999999997 143300.0 ; + RECT 159899.99999999997 145600.00000000003 159100.0 146400.0 ; + RECT 156300.0 145600.00000000003 157100.0 146400.0 ; + RECT 158300.0 144200.0 159100.0 145000.0 ; + RECT 159100.0 145600.00000000003 159899.99999999997 146400.0 ; + RECT 154700.0 150100.00000000003 164300.0 150700.0 ; + RECT 154700.0 140900.0 164300.0 141500.0 ; + RECT 168700.0 149100.00000000003 169500.0 150400.0 ; + RECT 168700.0 141200.0 169500.0 142500.0 ; + RECT 165500.0 142100.00000000003 166300.0 140900.0 ; + RECT 165500.0 148300.0 166300.0 150700.0 ; + RECT 167300.0 142100.00000000003 167900.0 148300.0 ; + RECT 165500.0 148300.0 166300.0 149100.00000000003 ; + RECT 167100.00000000003 148300.0 167900.0 149100.00000000003 ; + RECT 167100.00000000003 148300.0 167900.0 149100.00000000003 ; + RECT 165500.0 148300.0 166300.0 149100.00000000003 ; + RECT 165500.0 142100.00000000003 166300.0 142900.0 ; + RECT 167100.00000000003 142100.00000000003 167900.0 142900.0 ; + RECT 167100.00000000003 142100.00000000003 167900.0 142900.0 ; + RECT 165500.0 142100.00000000003 166300.0 142900.0 ; + RECT 168700.0 148700.0 169500.0 149500.0 ; + RECT 168700.0 142100.00000000003 169500.0 142900.0 ; + RECT 165900.0 145200.0 166700.0 146000.0 ; + RECT 165900.0 145200.0 166700.0 146000.0 ; + RECT 167600.00000000003 145300.0 168200.0 145900.0 ; + RECT 164300.0 150100.00000000003 170700.0 150700.0 ; + RECT 164300.0 140900.0 170700.0 141500.0 ; + RECT 152700.0 151700.0 153500.0 150400.0 ; + RECT 152700.0 159600.00000000003 153500.0 158300.0 ; + RECT 149500.0 158700.0 150300.0 159899.99999999997 ; + RECT 149500.0 152500.0 150300.0 150100.00000000003 ; + RECT 151300.0 158700.0 151899.99999999997 152500.0 ; + RECT 149500.0 152500.0 150300.0 151700.0 ; + RECT 151100.0 152500.0 151899.99999999997 151700.0 ; + RECT 151100.0 152500.0 151899.99999999997 151700.0 ; + RECT 149500.0 152500.0 150300.0 151700.0 ; + RECT 149500.0 158700.0 150300.0 157899.99999999997 ; + RECT 151100.0 158700.0 151899.99999999997 157899.99999999997 ; + RECT 151100.0 158700.0 151899.99999999997 157899.99999999997 ; + RECT 149500.0 158700.0 150300.0 157899.99999999997 ; + RECT 152700.0 152100.00000000003 153500.0 151300.0 ; + RECT 152700.0 158700.0 153500.0 157899.99999999997 ; + RECT 149899.99999999997 155600.00000000003 150700.0 154800.0 ; + RECT 149899.99999999997 155600.00000000003 150700.0 154800.0 ; + RECT 151600.0 155500.0 152200.0 154899.99999999997 ; + RECT 148300.0 150700.0 154700.0 150100.00000000003 ; + RECT 148300.0 159899.99999999997 154700.0 159300.0 ; + RECT 155899.99999999997 158300.0 156700.0 159899.99999999997 ; + RECT 155899.99999999997 152500.0 156700.0 150100.00000000003 ; + RECT 159100.0 152500.0 159899.99999999997 150100.00000000003 ; + RECT 160700.0 151700.0 161500.0 150400.0 ; + RECT 160700.0 159600.00000000003 161500.0 158300.0 ; + RECT 155899.99999999997 152500.0 156700.0 151700.0 ; + RECT 157500.0 152500.0 158300.0 151700.0 ; + RECT 157500.0 152500.0 158300.0 151700.0 ; + RECT 155899.99999999997 152500.0 156700.0 151700.0 ; + RECT 157500.0 152500.0 158300.0 151700.0 ; + RECT 159100.0 152500.0 159900.0 151700.0 ; + RECT 159100.0 152500.0 159899.99999999997 151700.0 ; + RECT 157500.0 152500.0 158300.0 151700.0 ; + RECT 155899.99999999997 158300.0 156700.0 157500.0 ; + RECT 157500.0 158300.0 158300.0 157500.0 ; + RECT 157500.0 158300.0 158300.0 157500.0 ; + RECT 155899.99999999997 158300.0 156700.0 157500.0 ; + RECT 157500.0 158300.0 158300.0 157500.0 ; + RECT 159100.0 158300.0 159900.0 157500.0 ; + RECT 159100.0 158300.0 159899.99999999997 157500.0 ; + RECT 157500.0 158300.0 158300.0 157500.0 ; + RECT 160700.0 152100.00000000003 161500.0 151300.0 ; + RECT 160700.0 158700.0 161500.0 157899.99999999997 ; + RECT 159100.0 156600.00000000003 158300.0 155800.0 ; + RECT 157100.0 155200.0 156300.0 154399.99999999997 ; + RECT 157500.0 152500.0 158300.0 151700.0 ; + RECT 159100.0 158300.0 159899.99999999997 157500.0 ; + RECT 159899.99999999997 155200.0 159100.0 154399.99999999997 ; + RECT 156300.0 155200.0 157100.0 154399.99999999997 ; + RECT 158300.0 156600.00000000003 159100.0 155800.0 ; + RECT 159100.0 155200.0 159899.99999999997 154399.99999999997 ; + RECT 154700.0 150700.0 164300.0 150100.00000000003 ; + RECT 154700.0 159899.99999999997 164300.0 159300.0 ; + RECT 168700.0 151700.0 169500.0 150400.0 ; + RECT 168700.0 159600.00000000003 169500.0 158300.0 ; + RECT 165500.0 158700.0 166300.0 159899.99999999997 ; + RECT 165500.0 152500.0 166300.0 150100.00000000003 ; + RECT 167300.0 158700.0 167900.0 152500.0 ; + RECT 165500.0 152500.0 166300.0 151700.0 ; + RECT 167100.00000000003 152500.0 167900.0 151700.0 ; + RECT 167100.00000000003 152500.0 167900.0 151700.0 ; + RECT 165500.0 152500.0 166300.0 151700.0 ; + RECT 165500.0 158700.0 166300.0 157899.99999999997 ; + RECT 167100.00000000003 158700.0 167900.0 157899.99999999997 ; + RECT 167100.00000000003 158700.0 167900.0 157899.99999999997 ; + RECT 165500.0 158700.0 166300.0 157899.99999999997 ; + RECT 168700.0 152100.00000000003 169500.0 151300.0 ; + RECT 168700.0 158700.0 169500.0 157899.99999999997 ; + RECT 165900.0 155600.00000000003 166700.0 154800.0 ; + RECT 165900.0 155600.00000000003 166700.0 154800.0 ; + RECT 167600.00000000003 155500.0 168200.0 154899.99999999997 ; + RECT 164300.0 150700.0 170700.0 150100.00000000003 ; + RECT 164300.0 159899.99999999997 170700.0 159300.0 ; + RECT 152700.0 167500.0 153500.0 168800.0 ; + RECT 152700.0 159600.00000000003 153500.0 160899.99999999997 ; + RECT 149500.0 160500.0 150300.0 159300.0 ; + RECT 149500.0 166700.0 150300.0 169100.00000000003 ; + RECT 151300.0 160500.0 151899.99999999997 166700.0 ; + RECT 149500.0 166700.0 150300.0 167500.0 ; + RECT 151100.0 166700.0 151899.99999999997 167500.0 ; + RECT 151100.0 166700.0 151899.99999999997 167500.0 ; + RECT 149500.0 166700.0 150300.0 167500.0 ; + RECT 149500.0 160500.0 150300.0 161300.0 ; + RECT 151100.0 160500.0 151899.99999999997 161300.0 ; + RECT 151100.0 160500.0 151899.99999999997 161300.0 ; + RECT 149500.0 160500.0 150300.0 161300.0 ; + RECT 152700.0 167100.00000000003 153500.0 167899.99999999997 ; + RECT 152700.0 160500.0 153500.0 161300.0 ; + RECT 149899.99999999997 163600.00000000003 150700.0 164399.99999999997 ; + RECT 149899.99999999997 163600.00000000003 150700.0 164399.99999999997 ; + RECT 151600.0 163700.0 152200.0 164300.0 ; + RECT 148300.0 168500.0 154700.0 169100.00000000003 ; + RECT 148300.0 159300.0 154700.0 159899.99999999997 ; + RECT 155899.99999999997 160899.99999999997 156700.0 159300.0 ; + RECT 155899.99999999997 166700.0 156700.0 169100.00000000003 ; + RECT 159100.0 166700.0 159899.99999999997 169100.00000000003 ; + RECT 160700.0 167500.0 161500.0 168800.0 ; + RECT 160700.0 159600.00000000003 161500.0 160899.99999999997 ; + RECT 155899.99999999997 166700.0 156700.0 167500.0 ; + RECT 157500.0 166700.0 158300.0 167500.0 ; + RECT 157500.0 166700.0 158300.0 167500.0 ; + RECT 155899.99999999997 166700.0 156700.0 167500.0 ; + RECT 157500.0 166700.0 158300.0 167500.0 ; + RECT 159100.0 166700.0 159900.0 167500.0 ; + RECT 159100.0 166700.0 159899.99999999997 167500.0 ; + RECT 157500.0 166700.0 158300.0 167500.0 ; + RECT 155899.99999999997 160899.99999999997 156700.0 161700.0 ; + RECT 157500.0 160899.99999999997 158300.0 161700.0 ; + RECT 157500.0 160899.99999999997 158300.0 161700.0 ; + RECT 155899.99999999997 160899.99999999997 156700.0 161700.0 ; + RECT 157500.0 160899.99999999997 158300.0 161700.0 ; + RECT 159100.0 160899.99999999997 159900.0 161700.0 ; + RECT 159100.0 160899.99999999997 159899.99999999997 161700.0 ; + RECT 157500.0 160899.99999999997 158300.0 161700.0 ; + RECT 160700.0 167100.00000000003 161500.0 167899.99999999997 ; + RECT 160700.0 160500.0 161500.0 161300.0 ; + RECT 159100.0 162600.00000000003 158300.0 163399.99999999997 ; + RECT 157100.0 164000.0 156300.0 164800.0 ; + RECT 157500.0 166700.0 158300.0 167500.0 ; + RECT 159100.0 160899.99999999997 159899.99999999997 161700.0 ; + RECT 159899.99999999997 164000.0 159100.0 164800.0 ; + RECT 156300.0 164000.0 157100.0 164800.0 ; + RECT 158300.0 162600.00000000003 159100.0 163399.99999999997 ; + RECT 159100.0 164000.0 159899.99999999997 164800.0 ; + RECT 154700.0 168500.0 164300.0 169100.00000000003 ; + RECT 154700.0 159300.0 164300.0 159899.99999999997 ; + RECT 168700.0 167500.0 169500.0 168800.0 ; + RECT 168700.0 159600.00000000003 169500.0 160899.99999999997 ; + RECT 165500.0 160500.0 166300.0 159300.0 ; + RECT 165500.0 166700.0 166300.0 169100.00000000003 ; + RECT 167300.0 160500.0 167900.0 166700.0 ; + RECT 165500.0 166700.0 166300.0 167500.0 ; + RECT 167100.00000000003 166700.0 167900.0 167500.0 ; + RECT 167100.00000000003 166700.0 167900.0 167500.0 ; + RECT 165500.0 166700.0 166300.0 167500.0 ; + RECT 165500.0 160500.0 166300.0 161300.0 ; + RECT 167100.00000000003 160500.0 167900.0 161300.0 ; + RECT 167100.00000000003 160500.0 167900.0 161300.0 ; + RECT 165500.0 160500.0 166300.0 161300.0 ; + RECT 168700.0 167100.00000000003 169500.0 167899.99999999997 ; + RECT 168700.0 160500.0 169500.0 161300.0 ; + RECT 165900.0 163600.00000000003 166700.0 164399.99999999997 ; + RECT 165900.0 163600.00000000003 166700.0 164399.99999999997 ; + RECT 167600.00000000003 163700.0 168200.0 164300.0 ; + RECT 164300.0 168500.0 170700.0 169100.00000000003 ; + RECT 164300.0 159300.0 170700.0 159899.99999999997 ; + RECT 152700.0 170100.00000000003 153500.0 168800.0 ; + RECT 152700.0 178000.0 153500.0 176700.0 ; + RECT 149500.0 177100.00000000003 150300.0 178300.0 ; + RECT 149500.0 170899.99999999997 150300.0 168500.0 ; + RECT 151300.0 177100.00000000003 151899.99999999997 170899.99999999997 ; + RECT 149500.0 170899.99999999997 150300.0 170100.00000000003 ; + RECT 151100.0 170899.99999999997 151899.99999999997 170100.00000000003 ; + RECT 151100.0 170899.99999999997 151899.99999999997 170100.00000000003 ; + RECT 149500.0 170899.99999999997 150300.0 170100.00000000003 ; + RECT 149500.0 177100.00000000003 150300.0 176300.0 ; + RECT 151100.0 177100.00000000003 151899.99999999997 176300.0 ; + RECT 151100.0 177100.00000000003 151899.99999999997 176300.0 ; + RECT 149500.0 177100.00000000003 150300.0 176300.0 ; + RECT 152700.0 170500.0 153500.0 169700.0 ; + RECT 152700.0 177100.00000000003 153500.0 176300.0 ; + RECT 149899.99999999997 174000.0 150700.0 173200.0 ; + RECT 149899.99999999997 174000.0 150700.0 173200.0 ; + RECT 151600.0 173899.99999999997 152200.0 173300.0 ; + RECT 148300.0 169100.00000000003 154700.0 168500.0 ; + RECT 148300.0 178300.0 154700.0 177700.0 ; + RECT 155899.99999999997 176700.0 156700.0 178300.0 ; + RECT 155899.99999999997 170899.99999999997 156700.0 168500.0 ; + RECT 159100.0 170899.99999999997 159899.99999999997 168500.0 ; + RECT 160700.0 170100.00000000003 161500.0 168800.0 ; + RECT 160700.0 178000.0 161500.0 176700.0 ; + RECT 155899.99999999997 170899.99999999997 156700.0 170100.00000000003 ; + RECT 157500.0 170899.99999999997 158300.0 170100.00000000003 ; + RECT 157500.0 170899.99999999997 158300.0 170100.00000000003 ; + RECT 155899.99999999997 170899.99999999997 156700.0 170100.00000000003 ; + RECT 157500.0 170899.99999999997 158300.0 170100.00000000003 ; + RECT 159100.0 170899.99999999997 159900.0 170100.00000000003 ; + RECT 159100.0 170899.99999999997 159899.99999999997 170100.00000000003 ; + RECT 157500.0 170899.99999999997 158300.0 170100.00000000003 ; + RECT 155899.99999999997 176700.0 156700.0 175899.99999999997 ; + RECT 157500.0 176700.0 158300.0 175899.99999999997 ; + RECT 157500.0 176700.0 158300.0 175899.99999999997 ; + RECT 155899.99999999997 176700.0 156700.0 175899.99999999997 ; + RECT 157500.0 176700.0 158300.0 175899.99999999997 ; + RECT 159100.0 176700.0 159900.0 175899.99999999997 ; + RECT 159100.0 176700.0 159899.99999999997 175899.99999999997 ; + RECT 157500.0 176700.0 158300.0 175899.99999999997 ; + RECT 160700.0 170500.0 161500.0 169700.0 ; + RECT 160700.0 177100.00000000003 161500.0 176300.0 ; + RECT 159100.0 175000.0 158300.0 174200.0 ; + RECT 157100.0 173600.00000000003 156300.0 172800.0 ; + RECT 157500.0 170899.99999999997 158300.0 170100.00000000003 ; + RECT 159100.0 176700.0 159899.99999999997 175899.99999999997 ; + RECT 159899.99999999997 173600.00000000003 159100.0 172800.0 ; + RECT 156300.0 173600.00000000003 157100.0 172800.0 ; + RECT 158300.0 175000.0 159100.0 174200.0 ; + RECT 159100.0 173600.00000000003 159899.99999999997 172800.0 ; + RECT 154700.0 169100.00000000003 164300.0 168500.0 ; + RECT 154700.0 178300.0 164300.0 177700.0 ; + RECT 168700.0 170100.00000000003 169500.0 168800.0 ; + RECT 168700.0 178000.0 169500.0 176700.0 ; + RECT 165500.0 177100.00000000003 166300.0 178300.0 ; + RECT 165500.0 170899.99999999997 166300.0 168500.0 ; + RECT 167300.0 177100.00000000003 167900.0 170899.99999999997 ; + RECT 165500.0 170899.99999999997 166300.0 170100.00000000003 ; + RECT 167100.00000000003 170899.99999999997 167900.0 170100.00000000003 ; + RECT 167100.00000000003 170899.99999999997 167900.0 170100.00000000003 ; + RECT 165500.0 170899.99999999997 166300.0 170100.00000000003 ; + RECT 165500.0 177100.00000000003 166300.0 176300.0 ; + RECT 167100.00000000003 177100.00000000003 167900.0 176300.0 ; + RECT 167100.00000000003 177100.00000000003 167900.0 176300.0 ; + RECT 165500.0 177100.00000000003 166300.0 176300.0 ; + RECT 168700.0 170500.0 169500.0 169700.0 ; + RECT 168700.0 177100.00000000003 169500.0 176300.0 ; + RECT 165900.0 174000.0 166700.0 173200.0 ; + RECT 165900.0 174000.0 166700.0 173200.0 ; + RECT 167600.00000000003 173899.99999999997 168200.0 173300.0 ; + RECT 164300.0 169100.00000000003 170700.0 168500.0 ; + RECT 164300.0 178300.0 170700.0 177700.0 ; + RECT 152700.0 185899.99999999997 153500.0 187200.0 ; + RECT 152700.0 178000.0 153500.0 179300.0 ; + RECT 149500.0 178899.99999999997 150300.0 177700.0 ; + RECT 149500.0 185100.00000000003 150300.0 187500.0 ; + RECT 151300.0 178899.99999999997 151899.99999999997 185100.00000000003 ; + RECT 149500.0 185100.00000000003 150300.0 185899.99999999997 ; + RECT 151100.0 185100.00000000003 151899.99999999997 185899.99999999997 ; + RECT 151100.0 185100.00000000003 151899.99999999997 185899.99999999997 ; + RECT 149500.0 185100.00000000003 150300.0 185899.99999999997 ; + RECT 149500.0 178899.99999999997 150300.0 179700.0 ; + RECT 151100.0 178899.99999999997 151899.99999999997 179700.0 ; + RECT 151100.0 178899.99999999997 151899.99999999997 179700.0 ; + RECT 149500.0 178899.99999999997 150300.0 179700.0 ; + RECT 152700.0 185500.0 153500.0 186300.0 ; + RECT 152700.0 178899.99999999997 153500.0 179700.0 ; + RECT 149899.99999999997 182000.0 150700.0 182800.0 ; + RECT 149899.99999999997 182000.0 150700.0 182800.0 ; + RECT 151600.0 182100.00000000003 152200.0 182700.0 ; + RECT 148300.0 186899.99999999997 154700.0 187500.0 ; + RECT 148300.0 177700.0 154700.0 178300.0 ; + RECT 155899.99999999997 179300.0 156700.0 177700.0 ; + RECT 155899.99999999997 185100.00000000003 156700.0 187500.0 ; + RECT 159100.0 185100.00000000003 159899.99999999997 187500.0 ; + RECT 160700.0 185899.99999999997 161500.0 187200.0 ; + RECT 160700.0 178000.0 161500.0 179300.0 ; + RECT 155899.99999999997 185100.00000000003 156700.0 185899.99999999997 ; + RECT 157500.0 185100.00000000003 158300.0 185899.99999999997 ; + RECT 157500.0 185100.00000000003 158300.0 185899.99999999997 ; + RECT 155899.99999999997 185100.00000000003 156700.0 185899.99999999997 ; + RECT 157500.0 185100.00000000003 158300.0 185899.99999999997 ; + RECT 159100.0 185100.00000000003 159900.0 185899.99999999997 ; + RECT 159100.0 185100.00000000003 159899.99999999997 185899.99999999997 ; + RECT 157500.0 185100.00000000003 158300.0 185899.99999999997 ; + RECT 155899.99999999997 179300.0 156700.0 180100.00000000003 ; + RECT 157500.0 179300.0 158300.0 180100.00000000003 ; + RECT 157500.0 179300.0 158300.0 180100.00000000003 ; + RECT 155899.99999999997 179300.0 156700.0 180100.00000000003 ; + RECT 157500.0 179300.0 158300.0 180100.00000000003 ; + RECT 159100.0 179300.0 159900.0 180100.00000000003 ; + RECT 159100.0 179300.0 159899.99999999997 180100.00000000003 ; + RECT 157500.0 179300.0 158300.0 180100.00000000003 ; + RECT 160700.0 185500.0 161500.0 186300.0 ; + RECT 160700.0 178899.99999999997 161500.0 179700.0 ; + RECT 159100.0 181000.0 158300.0 181800.0 ; + RECT 157100.0 182399.99999999997 156300.0 183200.0 ; + RECT 157500.0 185100.00000000003 158300.0 185899.99999999997 ; + RECT 159100.0 179300.0 159899.99999999997 180100.00000000003 ; + RECT 159899.99999999997 182399.99999999997 159100.0 183200.0 ; + RECT 156300.0 182399.99999999997 157100.0 183200.0 ; + RECT 158300.0 181000.0 159100.0 181800.0 ; + RECT 159100.0 182399.99999999997 159899.99999999997 183200.0 ; + RECT 154700.0 186899.99999999997 164300.0 187500.0 ; + RECT 154700.0 177700.0 164300.0 178300.0 ; + RECT 168700.0 185899.99999999997 169500.0 187200.0 ; + RECT 168700.0 178000.0 169500.0 179300.0 ; + RECT 165500.0 178899.99999999997 166300.0 177700.0 ; + RECT 165500.0 185100.00000000003 166300.0 187500.0 ; + RECT 167300.0 178899.99999999997 167900.0 185100.00000000003 ; + RECT 165500.0 185100.00000000003 166300.0 185899.99999999997 ; + RECT 167100.00000000003 185100.00000000003 167900.0 185899.99999999997 ; + RECT 167100.00000000003 185100.00000000003 167900.0 185899.99999999997 ; + RECT 165500.0 185100.00000000003 166300.0 185899.99999999997 ; + RECT 165500.0 178899.99999999997 166300.0 179700.0 ; + RECT 167100.00000000003 178899.99999999997 167900.0 179700.0 ; + RECT 167100.00000000003 178899.99999999997 167900.0 179700.0 ; + RECT 165500.0 178899.99999999997 166300.0 179700.0 ; + RECT 168700.0 185500.0 169500.0 186300.0 ; + RECT 168700.0 178899.99999999997 169500.0 179700.0 ; + RECT 165900.0 182000.0 166700.0 182800.0 ; + RECT 165900.0 182000.0 166700.0 182800.0 ; + RECT 167600.00000000003 182100.00000000003 168200.0 182700.0 ; + RECT 164300.0 186899.99999999997 170700.0 187500.0 ; + RECT 164300.0 177700.0 170700.0 178300.0 ; + RECT 152700.0 188500.0 153500.0 187200.0 ; + RECT 152700.0 196400.00000000003 153500.0 195100.00000000003 ; + RECT 149500.0 195500.0 150300.0 196700.0 ; + RECT 149500.0 189300.0 150300.0 186900.00000000003 ; + RECT 151300.0 195500.0 151899.99999999997 189300.0 ; + RECT 149500.0 189300.0 150300.0 188500.0 ; + RECT 151100.0 189300.0 151899.99999999997 188500.0 ; + RECT 151100.0 189300.0 151899.99999999997 188500.0 ; + RECT 149500.0 189300.0 150300.0 188500.0 ; + RECT 149500.0 195500.0 150300.0 194700.0 ; + RECT 151100.0 195500.0 151899.99999999997 194700.0 ; + RECT 151100.0 195500.0 151899.99999999997 194700.0 ; + RECT 149500.0 195500.0 150300.0 194700.0 ; + RECT 152700.0 188900.00000000003 153500.0 188100.00000000003 ; + RECT 152700.0 195500.0 153500.0 194700.0 ; + RECT 149899.99999999997 192400.00000000003 150700.0 191600.00000000003 ; + RECT 149899.99999999997 192400.00000000003 150700.0 191600.00000000003 ; + RECT 151600.0 192300.0 152200.0 191700.0 ; + RECT 148300.0 187500.0 154700.0 186900.00000000003 ; + RECT 148300.0 196700.0 154700.0 196100.00000000003 ; + RECT 155899.99999999997 195100.00000000003 156700.0 196700.0 ; + RECT 155899.99999999997 189300.0 156700.0 186900.00000000003 ; + RECT 159100.0 189300.0 159899.99999999997 186900.00000000003 ; + RECT 160700.0 188500.0 161500.0 187200.0 ; + RECT 160700.0 196400.00000000003 161500.0 195100.00000000003 ; + RECT 155899.99999999997 189300.0 156700.0 188500.0 ; + RECT 157500.0 189300.0 158300.0 188500.0 ; + RECT 157500.0 189300.0 158300.0 188500.0 ; + RECT 155899.99999999997 189300.0 156700.0 188500.0 ; + RECT 157500.0 189300.0 158300.0 188500.0 ; + RECT 159100.0 189300.0 159900.0 188500.0 ; + RECT 159100.0 189300.0 159899.99999999997 188500.0 ; + RECT 157500.0 189300.0 158300.0 188500.0 ; + RECT 155899.99999999997 195100.00000000003 156700.0 194300.0 ; + RECT 157500.0 195100.00000000003 158300.0 194300.0 ; + RECT 157500.0 195100.00000000003 158300.0 194300.0 ; + RECT 155899.99999999997 195100.00000000003 156700.0 194300.0 ; + RECT 157500.0 195100.00000000003 158300.0 194300.0 ; + RECT 159100.0 195100.00000000003 159900.0 194300.0 ; + RECT 159100.0 195100.00000000003 159899.99999999997 194300.0 ; + RECT 157500.0 195100.00000000003 158300.0 194300.0 ; + RECT 160700.0 188900.00000000003 161500.0 188100.00000000003 ; + RECT 160700.0 195500.0 161500.0 194700.0 ; + RECT 159100.0 193400.00000000003 158300.0 192600.00000000003 ; + RECT 157100.0 192000.0 156300.0 191200.0 ; + RECT 157500.0 189300.0 158300.0 188500.0 ; + RECT 159100.0 195100.00000000003 159899.99999999997 194300.0 ; + RECT 159899.99999999997 192000.0 159100.0 191200.0 ; + RECT 156300.0 192000.0 157100.0 191200.0 ; + RECT 158300.0 193400.00000000003 159100.0 192600.00000000003 ; + RECT 159100.0 192000.0 159899.99999999997 191200.0 ; + RECT 154700.0 187500.0 164300.0 186900.00000000003 ; + RECT 154700.0 196700.0 164300.0 196100.00000000003 ; + RECT 168700.0 188500.0 169500.0 187200.0 ; + RECT 168700.0 196400.00000000003 169500.0 195100.00000000003 ; + RECT 165500.0 195500.0 166300.0 196700.0 ; + RECT 165500.0 189300.0 166300.0 186900.00000000003 ; + RECT 167300.0 195500.0 167900.0 189300.0 ; + RECT 165500.0 189300.0 166300.0 188500.0 ; + RECT 167100.00000000003 189300.0 167900.0 188500.0 ; + RECT 167100.00000000003 189300.0 167900.0 188500.0 ; + RECT 165500.0 189300.0 166300.0 188500.0 ; + RECT 165500.0 195500.0 166300.0 194700.0 ; + RECT 167100.00000000003 195500.0 167900.0 194700.0 ; + RECT 167100.00000000003 195500.0 167900.0 194700.0 ; + RECT 165500.0 195500.0 166300.0 194700.0 ; + RECT 168700.0 188900.00000000003 169500.0 188100.00000000003 ; + RECT 168700.0 195500.0 169500.0 194700.0 ; + RECT 165900.0 192400.00000000003 166700.0 191600.00000000003 ; + RECT 165900.0 192400.00000000003 166700.0 191600.00000000003 ; + RECT 167600.00000000003 192300.0 168200.0 191700.0 ; + RECT 164300.0 187500.0 170700.0 186900.00000000003 ; + RECT 164300.0 196700.0 170700.0 196100.00000000003 ; + RECT 152700.0 204300.0 153500.0 205600.00000000003 ; + RECT 152700.0 196400.00000000003 153500.0 197700.0 ; + RECT 149500.0 197300.0 150300.0 196100.00000000003 ; + RECT 149500.0 203500.0 150300.0 205900.00000000003 ; + RECT 151300.0 197300.0 151899.99999999997 203500.0 ; + RECT 149500.0 203500.0 150300.0 204300.0 ; + RECT 151100.0 203500.0 151899.99999999997 204300.0 ; + RECT 151100.0 203500.0 151899.99999999997 204300.0 ; + RECT 149500.0 203500.0 150300.0 204300.0 ; + RECT 149500.0 197300.0 150300.0 198100.00000000003 ; + RECT 151100.0 197300.0 151899.99999999997 198100.00000000003 ; + RECT 151100.0 197300.0 151899.99999999997 198100.00000000003 ; + RECT 149500.0 197300.0 150300.0 198100.00000000003 ; + RECT 152700.0 203900.00000000003 153500.0 204700.0 ; + RECT 152700.0 197300.0 153500.0 198100.00000000003 ; + RECT 149899.99999999997 200400.00000000003 150700.0 201200.0 ; + RECT 149899.99999999997 200400.00000000003 150700.0 201200.0 ; + RECT 151600.0 200500.0 152200.0 201100.00000000003 ; + RECT 148300.0 205300.0 154700.0 205900.00000000003 ; + RECT 148300.0 196100.00000000003 154700.0 196700.0 ; + RECT 155899.99999999997 197700.0 156700.0 196100.00000000003 ; + RECT 155899.99999999997 203500.0 156700.0 205900.00000000003 ; + RECT 159100.0 203500.0 159899.99999999997 205900.00000000003 ; + RECT 160700.0 204300.0 161500.0 205600.00000000003 ; + RECT 160700.0 196400.00000000003 161500.0 197700.0 ; + RECT 155899.99999999997 203500.0 156700.0 204300.0 ; + RECT 157500.0 203500.0 158300.0 204300.0 ; + RECT 157500.0 203500.0 158300.0 204300.0 ; + RECT 155899.99999999997 203500.0 156700.0 204300.0 ; + RECT 157500.0 203500.0 158300.0 204300.0 ; + RECT 159100.0 203500.0 159900.0 204300.0 ; + RECT 159100.0 203500.0 159899.99999999997 204300.0 ; + RECT 157500.0 203500.0 158300.0 204300.0 ; + RECT 155899.99999999997 197700.0 156700.0 198500.0 ; + RECT 157500.0 197700.0 158300.0 198500.0 ; + RECT 157500.0 197700.0 158300.0 198500.0 ; + RECT 155899.99999999997 197700.0 156700.0 198500.0 ; + RECT 157500.0 197700.0 158300.0 198500.0 ; + RECT 159100.0 197700.0 159900.0 198500.0 ; + RECT 159100.0 197700.0 159899.99999999997 198500.0 ; + RECT 157500.0 197700.0 158300.0 198500.0 ; + RECT 160700.0 203900.00000000003 161500.0 204700.0 ; + RECT 160700.0 197300.0 161500.0 198100.00000000003 ; + RECT 159100.0 199400.00000000003 158300.0 200200.0 ; + RECT 157100.0 200800.0 156300.0 201600.00000000003 ; + RECT 157500.0 203500.0 158300.0 204300.0 ; + RECT 159100.0 197700.0 159899.99999999997 198500.0 ; + RECT 159899.99999999997 200800.0 159100.0 201600.00000000003 ; + RECT 156300.0 200800.0 157100.0 201600.00000000003 ; + RECT 158300.0 199400.00000000003 159100.0 200200.0 ; + RECT 159100.0 200800.0 159899.99999999997 201600.00000000003 ; + RECT 154700.0 205300.0 164300.0 205900.00000000003 ; + RECT 154700.0 196100.00000000003 164300.0 196700.0 ; + RECT 168700.0 204300.0 169500.0 205600.00000000003 ; + RECT 168700.0 196400.00000000003 169500.0 197700.0 ; + RECT 165500.0 197300.0 166300.0 196100.00000000003 ; + RECT 165500.0 203500.0 166300.0 205900.00000000003 ; + RECT 167300.0 197300.0 167900.0 203500.0 ; + RECT 165500.0 203500.0 166300.0 204300.0 ; + RECT 167100.00000000003 203500.0 167900.0 204300.0 ; + RECT 167100.00000000003 203500.0 167900.0 204300.0 ; + RECT 165500.0 203500.0 166300.0 204300.0 ; + RECT 165500.0 197300.0 166300.0 198100.00000000003 ; + RECT 167100.00000000003 197300.0 167900.0 198100.00000000003 ; + RECT 167100.00000000003 197300.0 167900.0 198100.00000000003 ; + RECT 165500.0 197300.0 166300.0 198100.00000000003 ; + RECT 168700.0 203900.00000000003 169500.0 204700.0 ; + RECT 168700.0 197300.0 169500.0 198100.00000000003 ; + RECT 165900.0 200400.00000000003 166700.0 201200.0 ; + RECT 165900.0 200400.00000000003 166700.0 201200.0 ; + RECT 167600.00000000003 200500.0 168200.0 201100.00000000003 ; + RECT 164300.0 205300.0 170700.0 205900.00000000003 ; + RECT 164300.0 196100.00000000003 170700.0 196700.0 ; + RECT 152700.0 206899.99999999997 153500.0 205600.00000000003 ; + RECT 152700.0 214800.0 153500.0 213500.0 ; + RECT 149500.0 213899.99999999997 150300.0 215100.00000000003 ; + RECT 149500.0 207700.0 150300.0 205300.0 ; + RECT 151300.0 213899.99999999997 151899.99999999997 207700.0 ; + RECT 149500.0 207700.0 150300.0 206899.99999999997 ; + RECT 151100.0 207700.0 151899.99999999997 206899.99999999997 ; + RECT 151100.0 207700.0 151899.99999999997 206899.99999999997 ; + RECT 149500.0 207700.0 150300.0 206899.99999999997 ; + RECT 149500.0 213899.99999999997 150300.0 213100.00000000003 ; + RECT 151100.0 213899.99999999997 151899.99999999997 213100.00000000003 ; + RECT 151100.0 213899.99999999997 151899.99999999997 213100.00000000003 ; + RECT 149500.0 213899.99999999997 150300.0 213100.00000000003 ; + RECT 152700.0 207300.0 153500.0 206500.0 ; + RECT 152700.0 213899.99999999997 153500.0 213100.00000000003 ; + RECT 149899.99999999997 210800.0 150700.0 210000.0 ; + RECT 149899.99999999997 210800.0 150700.0 210000.0 ; + RECT 151600.0 210700.0 152200.0 210100.00000000003 ; + RECT 148300.0 205899.99999999997 154700.0 205300.0 ; + RECT 148300.0 215100.00000000003 154700.0 214500.0 ; + RECT 155899.99999999997 213500.0 156700.0 215100.00000000003 ; + RECT 155899.99999999997 207700.0 156700.0 205300.0 ; + RECT 159100.0 207700.0 159899.99999999997 205300.0 ; + RECT 160700.0 206899.99999999997 161500.0 205600.00000000003 ; + RECT 160700.0 214800.0 161500.0 213500.0 ; + RECT 155899.99999999997 207700.0 156700.0 206899.99999999997 ; + RECT 157500.0 207700.0 158300.0 206899.99999999997 ; + RECT 157500.0 207700.0 158300.0 206899.99999999997 ; + RECT 155899.99999999997 207700.0 156700.0 206899.99999999997 ; + RECT 157500.0 207700.0 158300.0 206899.99999999997 ; + RECT 159100.0 207700.0 159900.0 206899.99999999997 ; + RECT 159100.0 207700.0 159899.99999999997 206899.99999999997 ; + RECT 157500.0 207700.0 158300.0 206899.99999999997 ; + RECT 155899.99999999997 213500.0 156700.0 212700.0 ; + RECT 157500.0 213500.0 158300.0 212700.0 ; + RECT 157500.0 213500.0 158300.0 212700.0 ; + RECT 155899.99999999997 213500.0 156700.0 212700.0 ; + RECT 157500.0 213500.0 158300.0 212700.0 ; + RECT 159100.0 213500.0 159900.0 212700.0 ; + RECT 159100.0 213500.0 159899.99999999997 212700.0 ; + RECT 157500.0 213500.0 158300.0 212700.0 ; + RECT 160700.0 207300.0 161500.0 206500.0 ; + RECT 160700.0 213899.99999999997 161500.0 213100.00000000003 ; + RECT 159100.0 211800.0 158300.0 211000.0 ; + RECT 157100.0 210399.99999999997 156300.0 209600.00000000003 ; + RECT 157500.0 207700.0 158300.0 206899.99999999997 ; + RECT 159100.0 213500.0 159899.99999999997 212700.0 ; + RECT 159899.99999999997 210399.99999999997 159100.0 209600.00000000003 ; + RECT 156300.0 210399.99999999997 157100.0 209600.00000000003 ; + RECT 158300.0 211800.0 159100.0 211000.0 ; + RECT 159100.0 210399.99999999997 159899.99999999997 209600.00000000003 ; + RECT 154700.0 205899.99999999997 164300.0 205300.0 ; + RECT 154700.0 215100.00000000003 164300.0 214500.0 ; + RECT 168700.0 206899.99999999997 169500.0 205600.00000000003 ; + RECT 168700.0 214800.0 169500.0 213500.0 ; + RECT 165500.0 213899.99999999997 166300.0 215100.00000000003 ; + RECT 165500.0 207700.0 166300.0 205300.0 ; + RECT 167300.0 213899.99999999997 167900.0 207700.0 ; + RECT 165500.0 207700.0 166300.0 206899.99999999997 ; + RECT 167100.00000000003 207700.0 167900.0 206899.99999999997 ; + RECT 167100.00000000003 207700.0 167900.0 206899.99999999997 ; + RECT 165500.0 207700.0 166300.0 206899.99999999997 ; + RECT 165500.0 213899.99999999997 166300.0 213100.00000000003 ; + RECT 167100.00000000003 213899.99999999997 167900.0 213100.00000000003 ; + RECT 167100.00000000003 213899.99999999997 167900.0 213100.00000000003 ; + RECT 165500.0 213899.99999999997 166300.0 213100.00000000003 ; + RECT 168700.0 207300.0 169500.0 206500.0 ; + RECT 168700.0 213899.99999999997 169500.0 213100.00000000003 ; + RECT 165900.0 210800.0 166700.0 210000.0 ; + RECT 165900.0 210800.0 166700.0 210000.0 ; + RECT 167600.00000000003 210700.0 168200.0 210100.00000000003 ; + RECT 164300.0 205899.99999999997 170700.0 205300.0 ; + RECT 164300.0 215100.00000000003 170700.0 214500.0 ; + RECT 152700.0 222700.0 153500.0 224000.0 ; + RECT 152700.0 214800.0 153500.0 216100.00000000003 ; + RECT 149500.0 215700.0 150300.0 214500.0 ; + RECT 149500.0 221899.99999999997 150300.0 224300.0 ; + RECT 151300.0 215700.0 151899.99999999997 221899.99999999997 ; + RECT 149500.0 221899.99999999997 150300.0 222700.0 ; + RECT 151100.0 221899.99999999997 151899.99999999997 222700.0 ; + RECT 151100.0 221899.99999999997 151899.99999999997 222700.0 ; + RECT 149500.0 221899.99999999997 150300.0 222700.0 ; + RECT 149500.0 215700.0 150300.0 216500.0 ; + RECT 151100.0 215700.0 151899.99999999997 216500.0 ; + RECT 151100.0 215700.0 151899.99999999997 216500.0 ; + RECT 149500.0 215700.0 150300.0 216500.0 ; + RECT 152700.0 222300.0 153500.0 223100.00000000003 ; + RECT 152700.0 215700.0 153500.0 216500.0 ; + RECT 149899.99999999997 218800.0 150700.0 219600.00000000003 ; + RECT 149899.99999999997 218800.0 150700.0 219600.00000000003 ; + RECT 151600.0 218899.99999999997 152200.0 219500.0 ; + RECT 148300.0 223700.0 154700.0 224300.0 ; + RECT 148300.0 214500.0 154700.0 215100.00000000003 ; + RECT 155899.99999999997 216100.00000000003 156700.0 214500.0 ; + RECT 155899.99999999997 221899.99999999997 156700.0 224300.0 ; + RECT 159100.0 221899.99999999997 159899.99999999997 224300.0 ; + RECT 160700.0 222700.0 161500.0 224000.0 ; + RECT 160700.0 214800.0 161500.0 216100.00000000003 ; + RECT 155899.99999999997 221899.99999999997 156700.0 222700.0 ; + RECT 157500.0 221899.99999999997 158300.0 222700.0 ; + RECT 157500.0 221899.99999999997 158300.0 222700.0 ; + RECT 155899.99999999997 221899.99999999997 156700.0 222700.0 ; + RECT 157500.0 221899.99999999997 158300.0 222700.0 ; + RECT 159100.0 221899.99999999997 159900.0 222700.0 ; + RECT 159100.0 221899.99999999997 159899.99999999997 222700.0 ; + RECT 157500.0 221899.99999999997 158300.0 222700.0 ; + RECT 155899.99999999997 216100.00000000003 156700.0 216899.99999999997 ; + RECT 157500.0 216100.00000000003 158300.0 216899.99999999997 ; + RECT 157500.0 216100.00000000003 158300.0 216899.99999999997 ; + RECT 155899.99999999997 216100.00000000003 156700.0 216899.99999999997 ; + RECT 157500.0 216100.00000000003 158300.0 216899.99999999997 ; + RECT 159100.0 216100.00000000003 159900.0 216899.99999999997 ; + RECT 159100.0 216100.00000000003 159899.99999999997 216899.99999999997 ; + RECT 157500.0 216100.00000000003 158300.0 216899.99999999997 ; + RECT 160700.0 222300.0 161500.0 223100.00000000003 ; + RECT 160700.0 215700.0 161500.0 216500.0 ; + RECT 159100.0 217800.0 158300.0 218600.00000000003 ; + RECT 157100.0 219200.0 156300.0 220000.0 ; + RECT 157500.0 221899.99999999997 158300.0 222700.0 ; + RECT 159100.0 216100.00000000003 159899.99999999997 216899.99999999997 ; + RECT 159899.99999999997 219200.0 159100.0 220000.0 ; + RECT 156300.0 219200.0 157100.0 220000.0 ; + RECT 158300.0 217800.0 159100.0 218600.00000000003 ; + RECT 159100.0 219200.0 159899.99999999997 220000.0 ; + RECT 154700.0 223700.0 164300.0 224300.0 ; + RECT 154700.0 214500.0 164300.0 215100.00000000003 ; + RECT 168700.0 222700.0 169500.0 224000.0 ; + RECT 168700.0 214800.0 169500.0 216100.00000000003 ; + RECT 165500.0 215700.0 166300.0 214500.0 ; + RECT 165500.0 221899.99999999997 166300.0 224300.0 ; + RECT 167300.0 215700.0 167900.0 221899.99999999997 ; + RECT 165500.0 221899.99999999997 166300.0 222700.0 ; + RECT 167100.00000000003 221899.99999999997 167900.0 222700.0 ; + RECT 167100.00000000003 221899.99999999997 167900.0 222700.0 ; + RECT 165500.0 221899.99999999997 166300.0 222700.0 ; + RECT 165500.0 215700.0 166300.0 216500.0 ; + RECT 167100.00000000003 215700.0 167900.0 216500.0 ; + RECT 167100.00000000003 215700.0 167900.0 216500.0 ; + RECT 165500.0 215700.0 166300.0 216500.0 ; + RECT 168700.0 222300.0 169500.0 223100.00000000003 ; + RECT 168700.0 215700.0 169500.0 216500.0 ; + RECT 165900.0 218800.0 166700.0 219600.00000000003 ; + RECT 165900.0 218800.0 166700.0 219600.00000000003 ; + RECT 167600.00000000003 218899.99999999997 168200.0 219500.0 ; + RECT 164300.0 223700.0 170700.0 224300.0 ; + RECT 164300.0 214500.0 170700.0 215100.00000000003 ; + RECT 152700.0 225300.0 153500.0 224000.0 ; + RECT 152700.0 233200.0 153500.0 231900.00000000003 ; + RECT 149500.0 232300.0 150300.0 233500.0 ; + RECT 149500.0 226100.00000000003 150300.0 223700.0 ; + RECT 151300.0 232300.0 151899.99999999997 226100.00000000003 ; + RECT 149500.0 226100.00000000003 150300.0 225300.0 ; + RECT 151100.0 226100.00000000003 151899.99999999997 225300.0 ; + RECT 151100.0 226100.00000000003 151899.99999999997 225300.0 ; + RECT 149500.0 226100.00000000003 150300.0 225300.0 ; + RECT 149500.0 232300.0 150300.0 231500.0 ; + RECT 151100.0 232300.0 151899.99999999997 231500.0 ; + RECT 151100.0 232300.0 151899.99999999997 231500.0 ; + RECT 149500.0 232300.0 150300.0 231500.0 ; + RECT 152700.0 225700.0 153500.0 224900.00000000003 ; + RECT 152700.0 232300.0 153500.0 231500.0 ; + RECT 149899.99999999997 229200.0 150700.0 228400.00000000003 ; + RECT 149899.99999999997 229200.0 150700.0 228400.00000000003 ; + RECT 151600.0 229100.00000000003 152200.0 228500.0 ; + RECT 148300.0 224300.0 154700.0 223700.0 ; + RECT 148300.0 233500.0 154700.0 232900.00000000003 ; + RECT 155899.99999999997 231900.00000000003 156700.0 233500.0 ; + RECT 155899.99999999997 226100.00000000003 156700.0 223700.0 ; + RECT 159100.0 226100.00000000003 159899.99999999997 223700.0 ; + RECT 160700.0 225300.0 161500.0 224000.0 ; + RECT 160700.0 233200.0 161500.0 231900.00000000003 ; + RECT 155899.99999999997 226100.00000000003 156700.0 225300.0 ; + RECT 157500.0 226100.00000000003 158300.0 225300.0 ; + RECT 157500.0 226100.00000000003 158300.0 225300.0 ; + RECT 155899.99999999997 226100.00000000003 156700.0 225300.0 ; + RECT 157500.0 226100.00000000003 158300.0 225300.0 ; + RECT 159100.0 226100.00000000003 159900.0 225300.0 ; + RECT 159100.0 226100.00000000003 159899.99999999997 225300.0 ; + RECT 157500.0 226100.00000000003 158300.0 225300.0 ; + RECT 155899.99999999997 231900.00000000003 156700.0 231100.00000000003 ; + RECT 157500.0 231900.00000000003 158300.0 231100.00000000003 ; + RECT 157500.0 231900.00000000003 158300.0 231100.00000000003 ; + RECT 155899.99999999997 231900.00000000003 156700.0 231100.00000000003 ; + RECT 157500.0 231900.00000000003 158300.0 231100.00000000003 ; + RECT 159100.0 231900.00000000003 159900.0 231100.00000000003 ; + RECT 159100.0 231900.00000000003 159899.99999999997 231100.00000000003 ; + RECT 157500.0 231900.00000000003 158300.0 231100.00000000003 ; + RECT 160700.0 225700.0 161500.0 224900.00000000003 ; + RECT 160700.0 232300.0 161500.0 231500.0 ; + RECT 159100.0 230200.0 158300.0 229400.00000000003 ; + RECT 157100.0 228800.0 156300.0 228000.0 ; + RECT 157500.0 226100.00000000003 158300.0 225300.0 ; + RECT 159100.0 231900.00000000003 159899.99999999997 231100.00000000003 ; + RECT 159899.99999999997 228800.0 159100.0 228000.0 ; + RECT 156300.0 228800.0 157100.0 228000.0 ; + RECT 158300.0 230200.0 159100.0 229400.00000000003 ; + RECT 159100.0 228800.0 159899.99999999997 228000.0 ; + RECT 154700.0 224300.0 164300.0 223700.0 ; + RECT 154700.0 233500.0 164300.0 232900.00000000003 ; + RECT 168700.0 225300.0 169500.0 224000.0 ; + RECT 168700.0 233200.0 169500.0 231900.00000000003 ; + RECT 165500.0 232300.0 166300.0 233500.0 ; + RECT 165500.0 226100.00000000003 166300.0 223700.0 ; + RECT 167300.0 232300.0 167900.0 226100.00000000003 ; + RECT 165500.0 226100.00000000003 166300.0 225300.0 ; + RECT 167100.00000000003 226100.00000000003 167900.0 225300.0 ; + RECT 167100.00000000003 226100.00000000003 167900.0 225300.0 ; + RECT 165500.0 226100.00000000003 166300.0 225300.0 ; + RECT 165500.0 232300.0 166300.0 231500.0 ; + RECT 167100.00000000003 232300.0 167900.0 231500.0 ; + RECT 167100.00000000003 232300.0 167900.0 231500.0 ; + RECT 165500.0 232300.0 166300.0 231500.0 ; + RECT 168700.0 225700.0 169500.0 224900.00000000003 ; + RECT 168700.0 232300.0 169500.0 231500.0 ; + RECT 165900.0 229200.0 166700.0 228400.00000000003 ; + RECT 165900.0 229200.0 166700.0 228400.00000000003 ; + RECT 167600.00000000003 229100.00000000003 168200.0 228500.0 ; + RECT 164300.0 224300.0 170700.0 223700.0 ; + RECT 164300.0 233500.0 170700.0 232900.00000000003 ; + RECT 152700.0 241100.00000000003 153500.0 242400.00000000003 ; + RECT 152700.0 233200.0 153500.0 234500.0 ; + RECT 149500.0 234100.00000000003 150300.0 232900.00000000003 ; + RECT 149500.0 240300.0 150300.0 242700.0 ; + RECT 151300.0 234100.00000000003 151899.99999999997 240300.0 ; + RECT 149500.0 240300.0 150300.0 241100.00000000003 ; + RECT 151100.0 240300.0 151899.99999999997 241100.00000000003 ; + RECT 151100.0 240300.0 151899.99999999997 241100.00000000003 ; + RECT 149500.0 240300.0 150300.0 241100.00000000003 ; + RECT 149500.0 234100.00000000003 150300.0 234900.00000000003 ; + RECT 151100.0 234100.00000000003 151899.99999999997 234900.00000000003 ; + RECT 151100.0 234100.00000000003 151899.99999999997 234900.00000000003 ; + RECT 149500.0 234100.00000000003 150300.0 234900.00000000003 ; + RECT 152700.0 240700.0 153500.0 241500.0 ; + RECT 152700.0 234100.00000000003 153500.0 234900.00000000003 ; + RECT 149899.99999999997 237200.0 150700.0 238000.0 ; + RECT 149899.99999999997 237200.0 150700.0 238000.0 ; + RECT 151600.0 237300.0 152200.0 237900.00000000003 ; + RECT 148300.0 242100.00000000003 154700.0 242700.0 ; + RECT 148300.0 232900.00000000003 154700.0 233500.0 ; + RECT 155899.99999999997 234500.0 156700.0 232900.00000000003 ; + RECT 155899.99999999997 240300.0 156700.0 242700.0 ; + RECT 159100.0 240300.0 159899.99999999997 242700.0 ; + RECT 160700.0 241100.00000000003 161500.0 242400.00000000003 ; + RECT 160700.0 233200.0 161500.0 234500.0 ; + RECT 155899.99999999997 240300.0 156700.0 241100.00000000003 ; + RECT 157500.0 240300.0 158300.0 241100.00000000003 ; + RECT 157500.0 240300.0 158300.0 241100.00000000003 ; + RECT 155899.99999999997 240300.0 156700.0 241100.00000000003 ; + RECT 157500.0 240300.0 158300.0 241100.00000000003 ; + RECT 159100.0 240300.0 159900.0 241100.00000000003 ; + RECT 159100.0 240300.0 159899.99999999997 241100.00000000003 ; + RECT 157500.0 240300.0 158300.0 241100.00000000003 ; + RECT 155899.99999999997 234500.0 156700.0 235300.0 ; + RECT 157500.0 234500.0 158300.0 235300.0 ; + RECT 157500.0 234500.0 158300.0 235300.0 ; + RECT 155899.99999999997 234500.0 156700.0 235300.0 ; + RECT 157500.0 234500.0 158300.0 235300.0 ; + RECT 159100.0 234500.0 159900.0 235300.0 ; + RECT 159100.0 234500.0 159899.99999999997 235300.0 ; + RECT 157500.0 234500.0 158300.0 235300.0 ; + RECT 160700.0 240700.0 161500.0 241500.0 ; + RECT 160700.0 234100.00000000003 161500.0 234900.00000000003 ; + RECT 159100.0 236200.0 158300.0 237000.0 ; + RECT 157100.0 237600.00000000003 156300.0 238400.00000000003 ; + RECT 157500.0 240300.0 158300.0 241100.00000000003 ; + RECT 159100.0 234500.0 159899.99999999997 235300.0 ; + RECT 159899.99999999997 237600.00000000003 159100.0 238400.00000000003 ; + RECT 156300.0 237600.00000000003 157100.0 238400.00000000003 ; + RECT 158300.0 236200.0 159100.0 237000.0 ; + RECT 159100.0 237600.00000000003 159899.99999999997 238400.00000000003 ; + RECT 154700.0 242100.00000000003 164300.0 242700.0 ; + RECT 154700.0 232900.00000000003 164300.0 233500.0 ; + RECT 168700.0 241100.00000000003 169500.0 242400.00000000003 ; + RECT 168700.0 233200.0 169500.0 234500.0 ; + RECT 165500.0 234100.00000000003 166300.0 232900.00000000003 ; + RECT 165500.0 240300.0 166300.0 242700.0 ; + RECT 167300.0 234100.00000000003 167900.0 240300.0 ; + RECT 165500.0 240300.0 166300.0 241100.00000000003 ; + RECT 167100.00000000003 240300.0 167900.0 241100.00000000003 ; + RECT 167100.00000000003 240300.0 167900.0 241100.00000000003 ; + RECT 165500.0 240300.0 166300.0 241100.00000000003 ; + RECT 165500.0 234100.00000000003 166300.0 234900.00000000003 ; + RECT 167100.00000000003 234100.00000000003 167900.0 234900.00000000003 ; + RECT 167100.00000000003 234100.00000000003 167900.0 234900.00000000003 ; + RECT 165500.0 234100.00000000003 166300.0 234900.00000000003 ; + RECT 168700.0 240700.0 169500.0 241500.0 ; + RECT 168700.0 234100.00000000003 169500.0 234900.00000000003 ; + RECT 165900.0 237200.0 166700.0 238000.0 ; + RECT 165900.0 237200.0 166700.0 238000.0 ; + RECT 167600.00000000003 237300.0 168200.0 237900.00000000003 ; + RECT 164300.0 242100.00000000003 170700.0 242700.0 ; + RECT 164300.0 232900.00000000003 170700.0 233500.0 ; + RECT 152700.0 243700.0 153500.0 242400.00000000003 ; + RECT 152700.0 251600.00000000003 153500.0 250300.0 ; + RECT 149500.0 250700.0 150300.0 251900.00000000003 ; + RECT 149500.0 244500.0 150300.0 242100.00000000003 ; + RECT 151300.0 250700.0 151899.99999999997 244500.0 ; + RECT 149500.0 244500.0 150300.0 243700.0 ; + RECT 151100.0 244500.0 151899.99999999997 243700.0 ; + RECT 151100.0 244500.0 151899.99999999997 243700.0 ; + RECT 149500.0 244500.0 150300.0 243700.0 ; + RECT 149500.0 250700.0 150300.0 249900.00000000003 ; + RECT 151100.0 250700.0 151899.99999999997 249900.00000000003 ; + RECT 151100.0 250700.0 151899.99999999997 249900.00000000003 ; + RECT 149500.0 250700.0 150300.0 249900.00000000003 ; + RECT 152700.0 244100.00000000003 153500.0 243300.0 ; + RECT 152700.0 250700.0 153500.0 249900.00000000003 ; + RECT 149899.99999999997 247600.00000000003 150700.0 246800.0 ; + RECT 149899.99999999997 247600.00000000003 150700.0 246800.0 ; + RECT 151600.0 247500.0 152200.0 246900.00000000003 ; + RECT 148300.0 242700.0 154700.0 242100.00000000003 ; + RECT 148300.0 251900.00000000003 154700.0 251300.0 ; + RECT 155899.99999999997 250300.0 156700.0 251900.00000000003 ; + RECT 155899.99999999997 244500.0 156700.0 242100.00000000003 ; + RECT 159100.0 244500.0 159899.99999999997 242100.00000000003 ; + RECT 160700.0 243700.0 161500.0 242400.00000000003 ; + RECT 160700.0 251600.00000000003 161500.0 250300.0 ; + RECT 155899.99999999997 244500.0 156700.0 243700.0 ; + RECT 157500.0 244500.0 158300.0 243700.0 ; + RECT 157500.0 244500.0 158300.0 243700.0 ; + RECT 155899.99999999997 244500.0 156700.0 243700.0 ; + RECT 157500.0 244500.0 158300.0 243700.0 ; + RECT 159100.0 244500.0 159900.0 243700.0 ; + RECT 159100.0 244500.0 159899.99999999997 243700.0 ; + RECT 157500.0 244500.0 158300.0 243700.0 ; + RECT 155899.99999999997 250300.0 156700.0 249500.0 ; + RECT 157500.0 250300.0 158300.0 249500.0 ; + RECT 157500.0 250300.0 158300.0 249500.0 ; + RECT 155899.99999999997 250300.0 156700.0 249500.0 ; + RECT 157500.0 250300.0 158300.0 249500.0 ; + RECT 159100.0 250300.0 159900.0 249500.0 ; + RECT 159100.0 250300.0 159899.99999999997 249500.0 ; + RECT 157500.0 250300.0 158300.0 249500.0 ; + RECT 160700.0 244100.00000000003 161500.0 243300.0 ; + RECT 160700.0 250700.0 161500.0 249900.00000000003 ; + RECT 159100.0 248600.00000000003 158300.0 247800.0 ; + RECT 157100.0 247200.0 156300.0 246400.00000000003 ; + RECT 157500.0 244500.0 158300.0 243700.0 ; + RECT 159100.0 250300.0 159899.99999999997 249500.0 ; + RECT 159899.99999999997 247200.0 159100.0 246400.00000000003 ; + RECT 156300.0 247200.0 157100.0 246400.00000000003 ; + RECT 158300.0 248600.00000000003 159100.0 247800.0 ; + RECT 159100.0 247200.0 159899.99999999997 246400.00000000003 ; + RECT 154700.0 242700.0 164300.0 242100.00000000003 ; + RECT 154700.0 251900.00000000003 164300.0 251300.0 ; + RECT 168700.0 243700.0 169500.0 242400.00000000003 ; + RECT 168700.0 251600.00000000003 169500.0 250300.0 ; + RECT 165500.0 250700.0 166300.0 251900.00000000003 ; + RECT 165500.0 244500.0 166300.0 242100.00000000003 ; + RECT 167300.0 250700.0 167900.0 244500.0 ; + RECT 165500.0 244500.0 166300.0 243700.0 ; + RECT 167100.00000000003 244500.0 167900.0 243700.0 ; + RECT 167100.00000000003 244500.0 167900.0 243700.0 ; + RECT 165500.0 244500.0 166300.0 243700.0 ; + RECT 165500.0 250700.0 166300.0 249900.00000000003 ; + RECT 167100.00000000003 250700.0 167900.0 249900.00000000003 ; + RECT 167100.00000000003 250700.0 167900.0 249900.00000000003 ; + RECT 165500.0 250700.0 166300.0 249900.00000000003 ; + RECT 168700.0 244100.00000000003 169500.0 243300.0 ; + RECT 168700.0 250700.0 169500.0 249900.00000000003 ; + RECT 165900.0 247600.00000000003 166700.0 246800.0 ; + RECT 165900.0 247600.00000000003 166700.0 246800.0 ; + RECT 167600.00000000003 247500.0 168200.0 246900.00000000003 ; + RECT 164300.0 242700.0 170700.0 242100.00000000003 ; + RECT 164300.0 251900.00000000003 170700.0 251300.0 ; + RECT 152700.0 259500.0 153500.0 260800.0 ; + RECT 152700.0 251600.00000000003 153500.0 252900.00000000003 ; + RECT 149500.0 252500.0 150300.0 251300.0 ; + RECT 149500.0 258700.0 150300.0 261100.00000000003 ; + RECT 151300.0 252500.0 151899.99999999997 258700.0 ; + RECT 149500.0 258700.0 150300.0 259500.0 ; + RECT 151100.0 258700.0 151899.99999999997 259500.0 ; + RECT 151100.0 258700.0 151899.99999999997 259500.0 ; + RECT 149500.0 258700.0 150300.0 259500.0 ; + RECT 149500.0 252500.0 150300.0 253300.0 ; + RECT 151100.0 252500.0 151899.99999999997 253300.0 ; + RECT 151100.0 252500.0 151899.99999999997 253300.0 ; + RECT 149500.0 252500.0 150300.0 253300.0 ; + RECT 152700.0 259100.00000000003 153500.0 259900.00000000003 ; + RECT 152700.0 252500.0 153500.0 253300.0 ; + RECT 149899.99999999997 255600.00000000003 150700.0 256400.00000000003 ; + RECT 149899.99999999997 255600.00000000003 150700.0 256400.00000000003 ; + RECT 151600.0 255700.0 152200.0 256300.0 ; + RECT 148300.0 260500.0 154700.0 261100.00000000003 ; + RECT 148300.0 251300.0 154700.0 251900.00000000003 ; + RECT 155899.99999999997 252900.00000000003 156700.0 251300.0 ; + RECT 155899.99999999997 258700.0 156700.0 261100.00000000003 ; + RECT 159100.0 258700.0 159899.99999999997 261100.00000000003 ; + RECT 160700.0 259500.0 161500.0 260800.0 ; + RECT 160700.0 251600.00000000003 161500.0 252900.00000000003 ; + RECT 155899.99999999997 258700.0 156700.0 259500.0 ; + RECT 157500.0 258700.0 158300.0 259500.0 ; + RECT 157500.0 258700.0 158300.0 259500.0 ; + RECT 155899.99999999997 258700.0 156700.0 259500.0 ; + RECT 157500.0 258700.0 158300.0 259500.0 ; + RECT 159100.0 258700.0 159900.0 259500.0 ; + RECT 159100.0 258700.0 159899.99999999997 259500.0 ; + RECT 157500.0 258700.0 158300.0 259500.0 ; + RECT 155899.99999999997 252900.00000000003 156700.0 253700.0 ; + RECT 157500.0 252900.00000000003 158300.0 253700.0 ; + RECT 157500.0 252900.00000000003 158300.0 253700.0 ; + RECT 155899.99999999997 252900.00000000003 156700.0 253700.0 ; + RECT 157500.0 252900.00000000003 158300.0 253700.0 ; + RECT 159100.0 252900.00000000003 159900.0 253700.0 ; + RECT 159100.0 252900.00000000003 159899.99999999997 253700.0 ; + RECT 157500.0 252900.00000000003 158300.0 253700.0 ; + RECT 160700.0 259100.00000000003 161500.0 259900.00000000003 ; + RECT 160700.0 252500.0 161500.0 253300.0 ; + RECT 159100.0 254600.00000000003 158300.0 255400.00000000003 ; + RECT 157100.0 256000.0 156300.0 256800.0 ; + RECT 157500.0 258700.0 158300.0 259500.0 ; + RECT 159100.0 252900.00000000003 159899.99999999997 253700.0 ; + RECT 159899.99999999997 256000.0 159100.0 256800.0 ; + RECT 156300.0 256000.0 157100.0 256800.0 ; + RECT 158300.0 254600.00000000003 159100.0 255400.00000000003 ; + RECT 159100.0 256000.0 159899.99999999997 256800.0 ; + RECT 154700.0 260500.0 164300.0 261100.00000000003 ; + RECT 154700.0 251300.0 164300.0 251900.00000000003 ; + RECT 168700.0 259500.0 169500.0 260800.0 ; + RECT 168700.0 251600.00000000003 169500.0 252900.00000000003 ; + RECT 165500.0 252500.0 166300.0 251300.0 ; + RECT 165500.0 258700.0 166300.0 261100.00000000003 ; + RECT 167300.0 252500.0 167900.0 258700.0 ; + RECT 165500.0 258700.0 166300.0 259500.0 ; + RECT 167100.00000000003 258700.0 167900.0 259500.0 ; + RECT 167100.00000000003 258700.0 167900.0 259500.0 ; + RECT 165500.0 258700.0 166300.0 259500.0 ; + RECT 165500.0 252500.0 166300.0 253300.0 ; + RECT 167100.00000000003 252500.0 167900.0 253300.0 ; + RECT 167100.00000000003 252500.0 167900.0 253300.0 ; + RECT 165500.0 252500.0 166300.0 253300.0 ; + RECT 168700.0 259100.00000000003 169500.0 259900.00000000003 ; + RECT 168700.0 252500.0 169500.0 253300.0 ; + RECT 165900.0 255600.00000000003 166700.0 256400.00000000003 ; + RECT 165900.0 255600.00000000003 166700.0 256400.00000000003 ; + RECT 167600.00000000003 255700.0 168200.0 256300.0 ; + RECT 164300.0 260500.0 170700.0 261100.00000000003 ; + RECT 164300.0 251300.0 170700.0 251900.00000000003 ; + RECT 152700.0 262100.00000000003 153500.0 260800.0 ; + RECT 152700.0 270000.0 153500.0 268700.0 ; + RECT 149500.0 269100.0 150300.0 270300.0 ; + RECT 149500.0 262900.00000000006 150300.0 260500.0 ; + RECT 151300.0 269100.0 151899.99999999997 262900.00000000006 ; + RECT 149500.0 262900.00000000006 150300.0 262100.00000000003 ; + RECT 151100.0 262900.00000000006 151899.99999999997 262100.00000000003 ; + RECT 151100.0 262900.00000000006 151899.99999999997 262100.00000000003 ; + RECT 149500.0 262900.00000000006 150300.0 262100.00000000003 ; + RECT 149500.0 269100.0 150300.0 268300.0 ; + RECT 151100.0 269100.0 151899.99999999997 268300.0 ; + RECT 151100.0 269100.0 151899.99999999997 268300.0 ; + RECT 149500.0 269100.0 150300.0 268300.0 ; + RECT 152700.0 262500.0 153500.0 261700.0 ; + RECT 152700.0 269100.0 153500.0 268300.0 ; + RECT 149899.99999999997 266000.0 150700.0 265200.0 ; + RECT 149899.99999999997 266000.0 150700.0 265200.0 ; + RECT 151600.0 265900.00000000006 152200.0 265300.0 ; + RECT 148300.0 261100.00000000003 154700.0 260500.0 ; + RECT 148300.0 270300.0 154700.0 269700.0 ; + RECT 155899.99999999997 268700.0 156700.0 270300.0 ; + RECT 155899.99999999997 262900.00000000006 156700.0 260500.0 ; + RECT 159100.0 262900.00000000006 159899.99999999997 260500.0 ; + RECT 160700.0 262100.00000000003 161500.0 260800.0 ; + RECT 160700.0 270000.0 161500.0 268700.0 ; + RECT 155899.99999999997 262900.00000000006 156700.0 262100.00000000003 ; + RECT 157500.0 262900.00000000006 158300.0 262100.00000000003 ; + RECT 157500.0 262900.00000000006 158300.0 262100.00000000003 ; + RECT 155899.99999999997 262900.00000000006 156700.0 262100.00000000003 ; + RECT 157500.0 262900.00000000006 158300.0 262100.00000000003 ; + RECT 159100.0 262900.00000000006 159900.0 262100.00000000003 ; + RECT 159100.0 262900.00000000006 159899.99999999997 262100.00000000003 ; + RECT 157500.0 262900.00000000006 158300.0 262100.00000000003 ; + RECT 155899.99999999997 268700.0 156700.0 267900.00000000006 ; + RECT 157500.0 268700.0 158300.0 267900.00000000006 ; + RECT 157500.0 268700.0 158300.0 267900.00000000006 ; + RECT 155899.99999999997 268700.0 156700.0 267900.00000000006 ; + RECT 157500.0 268700.0 158300.0 267900.00000000006 ; + RECT 159100.0 268700.0 159900.0 267900.00000000006 ; + RECT 159100.0 268700.0 159899.99999999997 267900.00000000006 ; + RECT 157500.0 268700.0 158300.0 267900.00000000006 ; + RECT 160700.0 262500.0 161500.0 261700.0 ; + RECT 160700.0 269100.0 161500.0 268300.0 ; + RECT 159100.0 267000.0 158300.0 266200.0 ; + RECT 157100.0 265600.0 156300.0 264800.0 ; + RECT 157500.0 262900.00000000006 158300.0 262100.00000000003 ; + RECT 159100.0 268700.0 159899.99999999997 267900.00000000006 ; + RECT 159899.99999999997 265600.0 159100.0 264800.0 ; + RECT 156300.0 265600.0 157100.0 264800.0 ; + RECT 158300.0 267000.0 159100.0 266200.0 ; + RECT 159100.0 265600.0 159899.99999999997 264800.0 ; + RECT 154700.0 261100.00000000003 164300.0 260500.0 ; + RECT 154700.0 270300.0 164300.0 269700.0 ; + RECT 168700.0 262100.00000000003 169500.0 260800.0 ; + RECT 168700.0 270000.0 169500.0 268700.0 ; + RECT 165500.0 269100.0 166300.0 270300.0 ; + RECT 165500.0 262900.00000000006 166300.0 260500.0 ; + RECT 167300.0 269100.0 167900.0 262900.00000000006 ; + RECT 165500.0 262900.00000000006 166300.0 262100.00000000003 ; + RECT 167100.00000000003 262900.00000000006 167900.0 262100.00000000003 ; + RECT 167100.00000000003 262900.00000000006 167900.0 262100.00000000003 ; + RECT 165500.0 262900.00000000006 166300.0 262100.00000000003 ; + RECT 165500.0 269100.0 166300.0 268300.0 ; + RECT 167100.00000000003 269100.0 167900.0 268300.0 ; + RECT 167100.00000000003 269100.0 167900.0 268300.0 ; + RECT 165500.0 269100.0 166300.0 268300.0 ; + RECT 168700.0 262500.0 169500.0 261700.0 ; + RECT 168700.0 269100.0 169500.0 268300.0 ; + RECT 165900.0 266000.0 166700.0 265200.0 ; + RECT 165900.0 266000.0 166700.0 265200.0 ; + RECT 167600.00000000003 265900.00000000006 168200.0 265300.0 ; + RECT 164300.0 261100.00000000003 170700.0 260500.0 ; + RECT 164300.0 270300.0 170700.0 269700.0 ; + RECT 145800.0 126800.00000000001 146600.0 127600.00000000001 ; + RECT 147100.0 125200.0 147899.99999999997 126000.0 ; + RECT 158300.0 125800.00000000001 157500.0 126600.00000000001 ; + RECT 145800.0 136400.0 146600.0 137200.0 ; + RECT 147100.0 138000.0 147899.99999999997 138800.0 ; + RECT 158300.0 137400.0 157500.0 138200.0 ; + RECT 145800.0 145200.0 146600.0 146000.0 ; + RECT 147100.0 143600.00000000003 147899.99999999997 144400.0 ; + RECT 158300.0 144200.0 157500.0 145000.0 ; + RECT 145800.0 154800.0 146600.0 155600.00000000003 ; + RECT 147100.0 156399.99999999997 147899.99999999997 157200.0 ; + RECT 158300.0 155800.0 157500.0 156600.00000000003 ; + RECT 145800.0 163600.00000000003 146600.0 164399.99999999997 ; + RECT 147100.0 162000.0 147899.99999999997 162800.0 ; + RECT 158300.0 162600.00000000003 157500.0 163399.99999999997 ; + RECT 145800.0 173200.0 146600.0 174000.0 ; + RECT 147100.0 174800.0 147899.99999999997 175600.00000000003 ; + RECT 158300.0 174200.0 157500.0 175000.0 ; + RECT 145800.0 182000.0 146600.0 182800.0 ; + RECT 147100.0 180399.99999999997 147899.99999999997 181200.0 ; + RECT 158300.0 181000.0 157500.0 181800.0 ; + RECT 145800.0 191600.00000000003 146600.0 192399.99999999997 ; + RECT 147100.0 193200.0 147899.99999999997 194000.0 ; + RECT 158300.0 192600.00000000003 157500.0 193399.99999999997 ; + RECT 145800.0 200400.00000000003 146600.0 201200.0 ; + RECT 147100.0 198800.0 147899.99999999997 199600.00000000003 ; + RECT 158300.0 199400.00000000003 157500.0 200200.0 ; + RECT 145800.0 210000.0 146600.0 210800.0 ; + RECT 147100.0 211600.00000000003 147899.99999999997 212400.00000000003 ; + RECT 158300.0 211000.0 157500.0 211800.0 ; + RECT 145800.0 218800.0 146600.0 219600.00000000003 ; + RECT 147100.0 217200.0 147899.99999999997 218000.0 ; + RECT 158300.0 217800.0 157500.0 218600.00000000003 ; + RECT 145800.0 228400.00000000003 146600.0 229200.0 ; + RECT 147100.0 230000.0 147899.99999999997 230800.0 ; + RECT 158300.0 229400.00000000003 157500.0 230200.0 ; + RECT 145800.0 237200.0 146600.0 238000.0 ; + RECT 147100.0 235600.00000000003 147899.99999999997 236400.00000000003 ; + RECT 158300.0 236200.0 157500.0 237000.0 ; + RECT 145800.0 246800.0 146600.0 247600.00000000003 ; + RECT 147100.0 248400.00000000003 147899.99999999997 249200.0 ; + RECT 158300.0 247800.0 157500.0 248600.00000000003 ; + RECT 145800.0 255600.00000000003 146600.0 256400.00000000003 ; + RECT 147100.0 254000.0 147899.99999999997 254800.0 ; + RECT 158300.0 254600.00000000003 157500.0 255400.00000000003 ; + RECT 145800.0 265200.0 146600.0 266000.0 ; + RECT 147100.0 266800.0 147899.99999999997 267600.0 ; + RECT 158300.0 266200.0 157500.0 267000.0 ; + RECT 155100.0 131600.00000000003 154300.0 132400.0 ; + RECT 164700.0 131600.00000000003 163899.99999999997 132400.0 ; + RECT 155100.0 122400.0 154300.0 123200.0 ; + RECT 164700.0 122400.0 163899.99999999997 123200.0 ; + RECT 155100.0 131600.00000000003 154300.0 132400.0 ; + RECT 164700.0 131600.00000000003 163899.99999999997 132400.0 ; + RECT 155100.0 140800.0 154300.0 141600.00000000003 ; + RECT 164700.0 140800.0 163899.99999999997 141600.00000000003 ; + RECT 155100.0 150000.0 154300.0 150800.0 ; + RECT 164700.0 150000.0 163899.99999999997 150800.0 ; + RECT 155100.0 140800.0 154300.0 141600.00000000003 ; + RECT 164700.0 140800.0 163899.99999999997 141600.00000000003 ; + RECT 155100.0 150000.0 154300.0 150800.0 ; + RECT 164700.0 150000.0 163899.99999999997 150800.0 ; + RECT 155100.0 159200.0 154300.0 160000.0 ; + RECT 164700.0 159200.0 163899.99999999997 160000.0 ; + RECT 155100.0 168399.99999999997 154300.0 169200.0 ; + RECT 164700.0 168399.99999999997 163899.99999999997 169200.0 ; + RECT 155100.0 159200.0 154300.0 160000.0 ; + RECT 164700.0 159200.0 163899.99999999997 160000.0 ; + RECT 155100.0 168399.99999999997 154300.0 169200.0 ; + RECT 164700.0 168399.99999999997 163899.99999999997 169200.0 ; + RECT 155100.0 177600.00000000003 154300.0 178399.99999999997 ; + RECT 164700.0 177600.00000000003 163899.99999999997 178399.99999999997 ; + RECT 155100.0 186800.0 154300.0 187600.00000000003 ; + RECT 164700.0 186800.0 163899.99999999997 187600.00000000003 ; + RECT 155100.0 177600.00000000003 154300.0 178399.99999999997 ; + RECT 164700.0 177600.00000000003 163899.99999999997 178399.99999999997 ; + RECT 155100.0 186800.0 154300.0 187600.00000000003 ; + RECT 164700.0 186800.0 163899.99999999997 187600.00000000003 ; + RECT 155100.0 196000.0 154300.0 196800.0 ; + RECT 164700.0 196000.0 163899.99999999997 196800.0 ; + RECT 155100.0 205200.0 154300.0 206000.0 ; + RECT 164700.0 205200.0 163899.99999999997 206000.0 ; + RECT 155100.0 196000.0 154300.0 196800.0 ; + RECT 164700.0 196000.0 163899.99999999997 196800.0 ; + RECT 155100.0 205200.0 154300.0 206000.0 ; + RECT 164700.0 205200.0 163899.99999999997 206000.0 ; + RECT 155100.0 214400.00000000003 154300.0 215200.0 ; + RECT 164700.0 214400.00000000003 163899.99999999997 215200.0 ; + RECT 155100.0 223600.00000000003 154300.0 224400.00000000003 ; + RECT 164700.0 223600.00000000003 163899.99999999997 224400.00000000003 ; + RECT 155100.0 214400.00000000003 154300.0 215200.0 ; + RECT 164700.0 214400.00000000003 163899.99999999997 215200.0 ; + RECT 155100.0 223600.00000000003 154300.0 224400.00000000003 ; + RECT 164700.0 223600.00000000003 163899.99999999997 224400.00000000003 ; + RECT 155100.0 232800.0 154300.0 233600.00000000003 ; + RECT 164700.0 232800.0 163899.99999999997 233600.00000000003 ; + RECT 155100.0 242000.0 154300.0 242800.0 ; + RECT 164700.0 242000.0 163899.99999999997 242800.0 ; + RECT 155100.0 232800.0 154300.0 233600.00000000003 ; + RECT 164700.0 232800.0 163899.99999999997 233600.00000000003 ; + RECT 155100.0 242000.0 154300.0 242800.0 ; + RECT 164700.0 242000.0 163899.99999999997 242800.0 ; + RECT 155100.0 251200.0 154300.0 252000.0 ; + RECT 164700.0 251200.0 163899.99999999997 252000.0 ; + RECT 155100.0 260399.99999999997 154300.0 261200.0 ; + RECT 164700.0 260399.99999999997 163899.99999999997 261200.0 ; + RECT 155100.0 251200.0 154300.0 252000.0 ; + RECT 164700.0 251200.0 163899.99999999997 252000.0 ; + RECT 155100.0 260399.99999999997 154300.0 261200.0 ; + RECT 164700.0 260399.99999999997 163899.99999999997 261200.0 ; + RECT 155100.0 269600.0 154300.0 270400.00000000006 ; + RECT 164700.0 269600.0 163899.99999999997 270400.00000000006 ; + RECT 144100.0 125300.00000000001 147500.0 125900.0 ; + RECT 144100.0 138100.00000000003 147500.0 138700.0 ; + RECT 144100.0 143700.0 147500.0 144300.0 ; + RECT 144100.0 156500.0 147500.0 157100.00000000003 ; + RECT 144100.0 162100.00000000003 147500.0 162700.0 ; + RECT 144100.0 174899.99999999997 147500.0 175500.0 ; + RECT 144100.0 180500.0 147500.0 181100.00000000003 ; + RECT 144100.0 193300.0 147500.0 193900.00000000003 ; + RECT 144100.0 198900.00000000003 147500.0 199500.0 ; + RECT 144100.0 211700.0 147500.0 212300.0 ; + RECT 144100.0 217300.0 147500.0 217900.00000000003 ; + RECT 144100.0 230100.00000000003 147500.0 230700.0 ; + RECT 144100.0 235700.0 147500.0 236300.0 ; + RECT 144100.0 248500.0 147500.0 249100.00000000003 ; + RECT 144100.0 254100.00000000003 147500.0 254700.0 ; + RECT 144100.0 266900.0 147500.0 267500.0 ; + RECT 167600.0 126900.0 168200.0 127500.0 ; + RECT 167600.0 136500.0 168200.0 137100.00000000003 ; + RECT 167600.0 145300.0 168200.0 145900.0 ; + RECT 167600.0 154899.99999999997 168200.0 155500.0 ; + RECT 167600.0 163700.0 168200.0 164300.0 ; + RECT 167600.0 173300.0 168200.0 173899.99999999997 ; + RECT 167600.0 182100.00000000003 168200.0 182700.0 ; + RECT 167600.0 191700.0 168200.0 192300.0 ; + RECT 167600.0 200500.0 168200.0 201100.00000000003 ; + RECT 167600.0 210100.00000000003 168200.0 210700.0 ; + RECT 167600.0 218900.00000000003 168200.0 219500.0 ; + RECT 167600.0 228500.0 168200.0 229100.00000000003 ; + RECT 167600.0 237300.0 168200.0 237900.00000000003 ; + RECT 167600.0 246900.00000000003 168200.0 247500.0 ; + RECT 167600.0 255700.0 168200.0 256300.0 ; + RECT 167600.0 265300.0 168200.0 265900.0 ; + RECT 174500.0 108700.0 173700.00000000003 109500.0 ; + RECT 175900.0 28900.000000000007 175100.00000000003 29700.000000000007 ; + RECT 177300.0 98500.0 176500.0 99300.0 ; + RECT 146600.00000000003 271000.0 145800.0 271800.0 ; + RECT 173100.00000000003 271000.0 172300.0 271800.0 ; + RECT 25400.000000000004 28900.000000000004 32700.000000000004 29500.0 ; + RECT 25400.000000000004 49700.0 31300.000000000004 50300.00000000001 ; + RECT 3100.0 62100.0 28500.000000000004 62700.0 ; + RECT 29900.000000000004 65000.0 37600.0 65600.00000000001 ; + RECT 32700.000000000004 63700.0 39200.0 64300.000000000015 ; + RECT 31300.0 62400.00000000001 40800.0 63000.00000000001 ; + RECT 47300.00000000001 65000.0 47900.00000000001 65600.00000000001 ; + RECT 41600.0 65000.0 47600.0 65600.00000000001 ; + RECT 47300.00000000001 65300.000000000015 47900.00000000001 69400.0 ; + RECT 48900.00000000001 68500.0 49500.00000000001 69100.00000000001 ; + RECT 48900.00000000001 68800.00000000001 49500.00000000001 69400.0 ; + RECT 49200.0 68500.0 54000.0 69100.00000000001 ; + RECT 55600.0 68500.0 60400.00000000001 69100.00000000001 ; + RECT 29900.000000000004 94500.0 37200.0 95100.0 ; + RECT 32700.000000000004 95900.0 39200.0 96500.0 ; + RECT 46500.0 94500.0 47100.0 95100.0 ; + RECT 40000.0 94500.0 46800.0 95100.0 ; + RECT 46500.0 89800.00000000001 47100.0 94800.00000000001 ; + RECT 9200.000000000002 108500.0 36800.00000000001 109100.0 ; + RECT 38800.00000000001 108500.0 43600.00000000001 109100.0 ; + RECT 54400.00000000001 39300.00000000001 69600.00000000001 39900.00000000001 ; + RECT 54400.00000000001 59300.00000000001 69600.00000000001 59900.00000000001 ; + RECT 54400.00000000001 19300.0 69600.00000000001 19900.000000000004 ; + RECT 51200.0 79300.00000000001 69600.00000000001 79900.0 ; + RECT 51200.0 99300.00000000001 69600.00000000001 99900.0 ; + RECT 52800.00000000001 119300.00000000001 69600.00000000001 119900.0 ; + RECT 52800.00000000001 99300.00000000001 69600.00000000001 99900.0 ; + RECT 0.0 19600.0 21800.0 39600.0 ; + RECT 26200.000000000004 38300.0 27000.0 39600.0 ; + RECT 26200.000000000004 19600.0 27000.0 20900.000000000004 ; + RECT 23000.0 20900.000000000004 23800.0 19300.0 ; + RECT 23000.0 36700.0 23800.0 39900.00000000001 ; + RECT 24800.0 20900.000000000004 25400.000000000004 36700.0 ; + RECT 23000.0 36700.0 23800.0 37500.0 ; + RECT 24600.0 36700.0 25400.000000000004 37500.0 ; + RECT 24600.0 36700.0 25400.000000000004 37500.0 ; + RECT 23000.0 36700.0 23800.0 37500.0 ; + RECT 23000.0 20900.000000000004 23800.0 21700.000000000004 ; + RECT 24600.0 20900.000000000004 25400.000000000004 21700.000000000004 ; + RECT 24600.0 20900.000000000004 25400.000000000004 21700.000000000004 ; + RECT 23000.0 20900.000000000004 23800.0 21700.000000000004 ; + RECT 26200.000000000004 37900.00000000001 27000.0 38700.0 ; + RECT 26200.000000000004 20500.0 27000.0 21300.0 ; + RECT 23400.000000000004 28800.000000000004 24200.000000000004 29600.0 ; + RECT 23400.000000000004 28800.000000000004 24200.000000000004 29600.0 ; + RECT 25100.0 28900.000000000004 25700.000000000004 29500.0 ; + RECT 21800.0 39300.00000000001 28200.000000000004 39900.00000000001 ; + RECT 21800.0 19300.0 28200.000000000004 19900.000000000004 ; + RECT 23400.000000000004 28800.000000000004 24200.000000000004 29600.0 ; + RECT 25000.0 28800.000000000004 25800.0 29600.0 ; + RECT 0.0 39000.0 28200.000000000004 40200.0 ; + RECT 0.0 19000.0 28200.000000000004 20200.000000000004 ; + RECT 0.0 59600.0 21800.0 39600.0 ; + RECT 26200.000000000004 40900.00000000001 27000.0 39600.0 ; + RECT 26200.000000000004 59600.0 27000.0 58300.00000000001 ; + RECT 23000.0 58300.00000000001 23800.0 59900.0 ; + RECT 23000.0 42500.0 23800.0 39300.0 ; + RECT 24800.0 58300.00000000001 25400.000000000004 42500.0 ; + RECT 23000.0 42500.0 23800.0 41700.0 ; + RECT 24600.0 42500.0 25400.000000000004 41700.0 ; + RECT 24600.0 42500.0 25400.000000000004 41700.0 ; + RECT 23000.0 42500.0 23800.0 41700.0 ; + RECT 23000.0 58300.00000000001 23800.0 57500.0 ; + RECT 24600.0 58300.00000000001 25400.000000000004 57500.0 ; + RECT 24600.0 58300.00000000001 25400.000000000004 57500.0 ; + RECT 23000.0 58300.00000000001 23800.0 57500.0 ; + RECT 26200.000000000004 41300.0 27000.0 40500.0 ; + RECT 26200.000000000004 58700.0 27000.0 57900.0 ; + RECT 23400.000000000004 50400.0 24200.000000000004 49600.0 ; + RECT 23400.000000000004 50400.0 24200.000000000004 49600.0 ; + RECT 25100.0 50300.0 25700.000000000004 49700.0 ; + RECT 21800.0 39900.0 28200.000000000004 39300.0 ; + RECT 21800.0 59900.0 28200.000000000004 59300.00000000001 ; + RECT 23400.000000000004 50400.0 24200.000000000004 49600.0 ; + RECT 25000.0 50400.0 25800.0 49600.0 ; + RECT 0.0 40200.0 28200.000000000004 39000.0 ; + RECT 0.0 60200.0 28200.000000000004 59000.0 ; + RECT 400.0 39200.0 -400.0 40000.0 ; + RECT 400.0 19200.000000000004 -400.0 20000.0 ; + RECT 400.0 39200.0 -400.0 40000.0 ; + RECT 400.0 59200.0 -400.0 60000.0 ; + RECT 38500.0 28900.000000000004 39100.0 29500.0 ; + RECT 38500.0 29200.000000000004 39100.0 29400.000000000004 ; + RECT 38800.00000000001 28900.000000000004 43600.0 29500.0 ; + RECT 44900.00000000001 28500.0 45500.0 29100.0 ; + RECT 44900.00000000001 28800.000000000004 45500.0 29200.000000000004 ; + RECT 45200.0 28500.0 50000.0 29100.0 ; + RECT 38800.00000000001 50100.0 50000.0 50700.0 ; + RECT 39600.0 38300.0 40400.00000000001 39600.0 ; + RECT 39600.0 19600.0 40400.00000000001 20900.000000000004 ; + RECT 36400.00000000001 20500.0 37200.0 19300.0 ; + RECT 36400.00000000001 37500.0 37200.0 39900.00000000001 ; + RECT 38200.0 20500.0 38800.00000000001 37500.0 ; + RECT 36400.00000000001 37500.0 37200.0 38300.0 ; + RECT 38000.0 37500.0 38800.00000000001 38300.0 ; + RECT 38000.0 37500.0 38800.00000000001 38300.0 ; + RECT 36400.00000000001 37500.0 37200.0 38300.0 ; + RECT 36400.00000000001 20500.0 37200.0 21300.0 ; + RECT 38000.0 20500.0 38800.00000000001 21300.0 ; + RECT 38000.0 20500.0 38800.00000000001 21300.0 ; + RECT 36400.00000000001 20500.0 37200.0 21300.0 ; + RECT 39600.0 37900.00000000001 40400.00000000001 38700.0 ; + RECT 39600.0 20500.0 40400.00000000001 21300.0 ; + RECT 36800.00000000001 29000.0 37600.0 29800.000000000004 ; + RECT 36800.00000000001 29000.0 37600.0 29800.000000000004 ; + RECT 38500.0 29100.0 39100.0 29700.000000000004 ; + RECT 35200.0 39300.00000000001 41600.0 39900.00000000001 ; + RECT 35200.0 19300.0 41600.0 19900.000000000004 ; + RECT 46000.0 38300.0 46800.00000000001 39600.0 ; + RECT 46000.0 19600.0 46800.00000000001 20900.000000000004 ; + RECT 42800.00000000001 20900.000000000004 43600.0 19300.0 ; + RECT 42800.00000000001 36700.0 43600.0 39900.00000000001 ; + RECT 44600.0 20900.000000000004 45200.0 36700.0 ; + RECT 42800.00000000001 36700.0 43600.0 37500.0 ; + RECT 44400.00000000001 36700.0 45200.0 37500.0 ; + RECT 44400.00000000001 36700.0 45200.0 37500.0 ; + RECT 42800.00000000001 36700.0 43600.0 37500.0 ; + RECT 42800.00000000001 20900.000000000004 43600.0 21700.000000000004 ; + RECT 44400.00000000001 20900.000000000004 45200.0 21700.000000000004 ; + RECT 44400.00000000001 20900.000000000004 45200.0 21700.000000000004 ; + RECT 42800.00000000001 20900.000000000004 43600.0 21700.000000000004 ; + RECT 46000.0 37900.00000000001 46800.00000000001 38700.0 ; + RECT 46000.0 20500.0 46800.00000000001 21300.0 ; + RECT 43200.0 28800.000000000004 44000.0 29600.0 ; + RECT 43200.0 28800.000000000004 44000.0 29600.0 ; + RECT 44900.00000000001 28900.000000000004 45500.0 29500.0 ; + RECT 41600.0 39300.00000000001 48000.0 39900.00000000001 ; + RECT 41600.0 19300.0 48000.0 19900.000000000004 ; + RECT 52400.00000000001 38300.0 53200.0 39600.0 ; + RECT 52400.00000000001 19600.0 53200.0 20900.000000000004 ; + RECT 49200.0 21700.000000000004 50000.0 19300.0 ; + RECT 49200.0 35100.0 50000.0 39900.00000000001 ; + RECT 51000.0 21700.000000000004 51600.00000000001 35100.0 ; + RECT 49200.0 35100.0 50000.0 35900.00000000001 ; + RECT 50800.00000000001 35100.0 51600.00000000001 35900.00000000001 ; + RECT 50800.00000000001 35100.0 51600.00000000001 35900.00000000001 ; + RECT 49200.0 35100.0 50000.0 35900.00000000001 ; + RECT 49200.0 21700.000000000004 50000.0 22500.0 ; + RECT 50800.00000000001 21700.000000000004 51600.00000000001 22500.0 ; + RECT 50800.00000000001 21700.000000000004 51600.00000000001 22500.0 ; + RECT 49200.0 21700.000000000004 50000.0 22500.0 ; + RECT 52400.00000000001 37900.00000000001 53200.0 38700.0 ; + RECT 52400.00000000001 20500.0 53200.0 21300.0 ; + RECT 49600.0 28400.000000000004 50400.00000000001 29200.000000000004 ; + RECT 49600.0 28400.000000000004 50400.00000000001 29200.000000000004 ; + RECT 51300.00000000001 28500.0 51900.00000000001 29100.0 ; + RECT 48000.0 39300.00000000001 54400.00000000001 39900.00000000001 ; + RECT 48000.0 19300.0 54400.00000000001 19900.000000000004 ; + RECT 52400.00000000001 40900.00000000001 53200.0 39600.0 ; + RECT 52400.00000000001 59600.0 53200.0 58300.00000000001 ; + RECT 49200.0 57500.0 50000.0 59900.0 ; + RECT 49200.0 44100.0 50000.0 39300.0 ; + RECT 51000.0 57500.0 51600.00000000001 44100.0 ; + RECT 49200.0 44100.0 50000.0 43300.0 ; + RECT 50800.00000000001 44100.0 51600.00000000001 43300.0 ; + RECT 50800.00000000001 44100.0 51600.00000000001 43300.0 ; + RECT 49200.0 44100.0 50000.0 43300.0 ; + RECT 49200.0 57500.0 50000.0 56700.0 ; + RECT 50800.00000000001 57500.0 51600.00000000001 56700.0 ; + RECT 50800.00000000001 57500.0 51600.00000000001 56700.0 ; + RECT 49200.0 57500.0 50000.0 56700.0 ; + RECT 52400.00000000001 41300.0 53200.0 40500.0 ; + RECT 52400.00000000001 58700.0 53200.0 57900.0 ; + RECT 49600.0 50800.0 50400.00000000001 50000.0 ; + RECT 49600.0 50800.0 50400.00000000001 50000.0 ; + RECT 51300.00000000001 50700.0 51900.00000000001 50100.0 ; + RECT 48000.0 39900.0 54400.00000000001 39300.0 ; + RECT 48000.0 59900.0 54400.00000000001 59300.00000000001 ; + RECT 39200.0 50000.0 38400.00000000001 50800.00000000001 ; + RECT 38400.00000000001 29000.0 39200.0 29800.000000000004 ; + RECT 51200.0 50000.0 52000.0 50800.00000000001 ; + RECT 51200.0 28400.000000000004 52000.0 29200.000000000004 ; + RECT 36800.00000000001 29000.0 37600.0 29800.000000000004 ; + RECT 35200.0 39300.00000000001 54400.00000000001 39900.00000000001 ; + RECT 35200.0 59300.00000000001 54400.00000000001 59900.00000000001 ; + RECT 35200.0 19300.0 54400.00000000001 19900.000000000004 ; + RECT 36400.00000000001 60900.0 37200.0 59300.00000000001 ; + RECT 36400.00000000001 77500.0 37200.0 79900.0 ; + RECT 39600.0 77500.0 40400.00000000001 79900.0 ; + RECT 42800.00000000001 78300.00000000001 43600.0 79600.0 ; + RECT 42800.00000000001 59600.0 43600.0 60900.0 ; + RECT 36400.00000000001 77500.0 37200.0 78300.00000000001 ; + RECT 38000.0 77500.0 38800.00000000001 78300.00000000001 ; + RECT 38000.0 77500.0 38800.00000000001 78300.00000000001 ; + RECT 36400.00000000001 77500.0 37200.0 78300.00000000001 ; + RECT 38000.0 77500.0 38800.00000000001 78300.00000000001 ; + RECT 39600.0 77500.0 40400.00000000001 78300.00000000001 ; + RECT 39600.0 77500.0 40400.00000000001 78300.00000000001 ; + RECT 38000.0 77500.0 38800.00000000001 78300.00000000001 ; + RECT 39600.0 77500.0 40400.00000000001 78300.00000000001 ; + RECT 41200.0 77500.0 42000.0 78300.00000000001 ; + RECT 41200.0 77500.0 42000.0 78300.00000000001 ; + RECT 39600.0 77500.0 40400.00000000001 78300.00000000001 ; + RECT 36400.00000000001 60900.0 37200.0 61700.0 ; + RECT 38000.0 60900.0 38800.00000000001 61700.0 ; + RECT 38000.0 60900.0 38800.00000000001 61700.0 ; + RECT 36400.00000000001 60900.0 37200.0 61700.0 ; + RECT 38000.0 60900.0 38800.00000000001 61700.0 ; + RECT 39600.0 60900.0 40400.00000000001 61700.0 ; + RECT 39600.0 60900.0 40400.00000000001 61700.0 ; + RECT 38000.0 60900.0 38800.00000000001 61700.0 ; + RECT 39600.0 60900.0 40400.00000000001 61700.0 ; + RECT 41200.0 60900.0 42000.0 61700.0 ; + RECT 41200.0 60900.0 42000.0 61700.0 ; + RECT 39600.0 60900.0 40400.00000000001 61700.0 ; + RECT 42800.00000000001 77900.0 43600.0 78700.0 ; + RECT 42800.00000000001 60500.0 43600.0 61300.00000000001 ; + RECT 41200.0 62300.00000000001 40400.00000000001 63100.0 ; + RECT 39600.0 63600.0 38800.00000000001 64400.00000000001 ; + RECT 38000.0 64900.00000000001 37200.0 65700.0 ; + RECT 38000.0 77500.0 38800.00000000001 78300.00000000001 ; + RECT 41200.0 77500.0 42000.0 78300.00000000001 ; + RECT 41200.0 60900.0 42000.0 61700.0 ; + RECT 41200.0 64900.00000000001 42000.0 65700.0 ; + RECT 37200.0 64900.00000000001 38000.0 65700.0 ; + RECT 38800.00000000001 63600.0 39600.0 64400.00000000001 ; + RECT 40400.00000000001 62300.00000000001 41200.0 63100.0 ; + RECT 41200.0 64900.00000000001 42000.0 65700.0 ; + RECT 35200.0 79300.00000000001 45600.0 79900.0 ; + RECT 35200.0 59300.00000000001 45600.0 59900.0 ; + RECT 50000.0 78300.00000000001 50800.00000000001 79600.0 ; + RECT 50000.0 59600.0 50800.00000000001 60900.0 ; + RECT 46800.00000000001 60500.0 47600.0 59300.00000000001 ; + RECT 46800.00000000001 77500.0 47600.0 79900.0 ; + RECT 48600.0 60500.0 49200.0 77500.0 ; + RECT 46800.00000000001 77500.0 47600.0 78300.00000000001 ; + RECT 48400.0 77500.0 49200.0 78300.00000000001 ; + RECT 48400.0 77500.0 49200.0 78300.00000000001 ; + RECT 46800.00000000001 77500.0 47600.0 78300.00000000001 ; + RECT 46800.00000000001 60500.0 47600.0 61300.00000000001 ; + RECT 48400.0 60500.0 49200.0 61300.00000000001 ; + RECT 48400.0 60500.0 49200.0 61300.00000000001 ; + RECT 46800.00000000001 60500.0 47600.0 61300.00000000001 ; + RECT 50000.0 77900.0 50800.00000000001 78700.0 ; + RECT 50000.0 60500.0 50800.00000000001 61300.00000000001 ; + RECT 47200.0 69000.0 48000.0 69800.00000000001 ; + RECT 47200.0 69000.0 48000.0 69800.00000000001 ; + RECT 48900.0 69100.0 49500.0 69700.0 ; + RECT 45600.0 79300.00000000001 52000.0 79900.0 ; + RECT 45600.0 59300.00000000001 52000.0 59900.0 ; + RECT 56400.0 78300.00000000001 57200.0 79600.0 ; + RECT 56400.0 59600.0 57200.0 60900.0 ; + RECT 53200.0 61700.0 54000.0 59300.00000000001 ; + RECT 53200.0 75100.0 54000.0 79900.0 ; + RECT 55000.0 61700.0 55600.0 75100.0 ; + RECT 53200.0 75100.0 54000.0 75900.0 ; + RECT 54800.0 75100.0 55600.0 75900.0 ; + RECT 54800.0 75100.0 55600.0 75900.0 ; + RECT 53200.0 75100.0 54000.0 75900.0 ; + RECT 53200.0 61700.0 54000.0 62500.0 ; + RECT 54800.0 61700.0 55600.0 62500.0 ; + RECT 54800.0 61700.0 55600.0 62500.0 ; + RECT 53200.0 61700.0 54000.0 62500.0 ; + RECT 56400.0 77900.0 57200.0 78700.0 ; + RECT 56400.0 60500.0 57200.0 61300.00000000001 ; + RECT 53600.0 68400.0 54400.0 69200.0 ; + RECT 53600.0 68400.0 54400.0 69200.0 ; + RECT 55300.0 68500.0 55900.0 69100.0 ; + RECT 52000.0 79300.00000000001 58400.0 79900.0 ; + RECT 52000.0 59300.00000000001 58400.0 59900.0 ; + RECT 67600.00000000001 78300.00000000001 68400.0 79600.0 ; + RECT 67600.00000000001 59600.0 68400.0 60900.0 ; + RECT 59700.0 60500.0 66700.0 59300.00000000001 ; + RECT 59700.0 76500.0 66700.0 79900.0 ; + RECT 64500.0 63100.0 65100.00000000001 73900.0 ; + RECT 59700.0 75500.0 60300.00000000001 76800.00000000001 ; + RECT 62900.00000000001 75500.0 63500.00000000001 76800.00000000001 ; + RECT 66100.00000000001 75500.0 66700.0 76800.00000000001 ; + RECT 61300.00000000001 74200.0 61900.00000000001 75500.0 ; + RECT 64500.0 74200.0 65100.00000000001 75500.0 ; + RECT 59600.00000000001 75100.0 60400.00000000001 75900.0 ; + RECT 62800.00000000001 75100.0 63600.00000000001 75900.0 ; + RECT 66000.0 75100.0 66800.00000000001 75900.0 ; + RECT 61200.0 75100.0 62000.00000000001 75900.0 ; + RECT 64400.00000000001 75100.0 65200.0 75900.0 ; + RECT 61300.00000000001 73900.0 65100.00000000001 74500.0 ; + RECT 59700.0 76500.0 66700.0 77100.0 ; + RECT 59700.0 60800.00000000001 60300.00000000001 62100.0 ; + RECT 62900.00000000001 60800.00000000001 63500.00000000001 62100.0 ; + RECT 66100.00000000001 60800.00000000001 66700.0 62100.0 ; + RECT 61300.00000000001 62100.0 61900.00000000001 63400.0 ; + RECT 64500.0 62100.0 65100.00000000001 63400.0 ; + RECT 59600.00000000001 61700.0 60400.00000000001 62500.0 ; + RECT 62800.00000000001 61700.0 63600.00000000001 62500.0 ; + RECT 66000.0 61700.0 66800.00000000001 62500.0 ; + RECT 61200.0 61700.0 62000.00000000001 62500.0 ; + RECT 64400.00000000001 61700.0 65200.0 62500.0 ; + RECT 61300.00000000001 63100.0 65100.00000000001 63700.0 ; + RECT 59700.0 60500.0 66700.0 61100.0 ; + RECT 67600.00000000001 77900.0 68400.0 78700.0 ; + RECT 67600.00000000001 60500.0 68400.0 61300.00000000001 ; + RECT 60000.00000000001 68400.0 60800.00000000001 69200.0 ; + RECT 60000.00000000001 68400.0 60800.00000000001 69200.0 ; + RECT 64800.000000000015 68500.0 65400.00000000001 69100.0 ; + RECT 58400.00000000001 79300.00000000001 69600.00000000001 79900.0 ; + RECT 58400.00000000001 59300.00000000001 69600.00000000001 59900.0 ; + RECT 36400.00000000001 98300.00000000001 37200.0 99900.0 ; + RECT 36400.00000000001 81699.99999999999 37200.0 79300.0 ; + RECT 39600.0 81699.99999999999 40400.00000000001 79300.0 ; + RECT 41200.0 80900.0 42000.0 79600.0 ; + RECT 41200.0 99600.0 42000.0 98300.00000000001 ; + RECT 36400.00000000001 81700.0 37200.0 80900.0 ; + RECT 38000.0 81700.0 38800.00000000001 80900.0 ; + RECT 38000.0 81700.0 38800.00000000001 80900.0 ; + RECT 36400.00000000001 81700.0 37200.0 80900.0 ; + RECT 38000.0 81700.0 38800.00000000001 80900.0 ; + RECT 39600.0 81700.0 40400.00000000001 80900.0 ; + RECT 39600.0 81700.0 40400.00000000001 80900.0 ; + RECT 38000.0 81700.0 38800.00000000001 80900.0 ; + RECT 36400.00000000001 98300.00000000001 37200.0 97500.0 ; + RECT 38000.0 98300.00000000001 38800.00000000001 97500.0 ; + RECT 38000.0 98300.00000000001 38800.00000000001 97500.0 ; + RECT 36400.00000000001 98300.00000000001 37200.0 97500.0 ; + RECT 38000.0 98300.00000000001 38800.00000000001 97500.0 ; + RECT 39600.0 98300.00000000001 40400.00000000001 97500.0 ; + RECT 39600.0 98300.00000000001 40400.00000000001 97500.0 ; + RECT 38000.0 98300.00000000001 38800.00000000001 97500.0 ; + RECT 41200.0 81300.00000000001 42000.0 80500.0 ; + RECT 41200.0 98699.99999999999 42000.0 97900.0 ; + RECT 39600.0 96600.0 38800.00000000001 95800.00000000001 ; + RECT 37600.0 95199.99999999999 36800.00000000001 94400.0 ; + RECT 38000.0 81699.99999999999 38800.00000000001 80900.0 ; + RECT 39600.0 98300.00000000001 40400.00000000001 97500.0 ; + RECT 40400.00000000001 95199.99999999999 39600.0 94400.0 ; + RECT 36800.00000000001 95199.99999999999 37600.0 94400.0 ; + RECT 38800.00000000001 96600.0 39600.0 95800.00000000001 ; + RECT 39600.0 95199.99999999999 40400.00000000001 94400.0 ; + RECT 35200.0 79900.0 44800.00000000001 79300.00000000001 ; + RECT 35200.0 99900.0 44800.00000000001 99300.00000000001 ; + RECT 49200.0 80900.0 50000.00000000001 79600.0 ; + RECT 49200.0 99600.0 50000.00000000001 98300.00000000001 ; + RECT 46000.00000000001 98699.99999999999 46800.00000000001 99900.0 ; + RECT 46000.00000000001 81699.99999999999 46800.00000000001 79300.0 ; + RECT 47800.00000000001 98699.99999999999 48400.00000000001 81700.0 ; + RECT 46000.00000000001 81700.0 46800.00000000001 80900.0 ; + RECT 47600.0 81700.0 48400.00000000001 80900.0 ; + RECT 47600.0 81700.0 48400.00000000001 80900.0 ; + RECT 46000.00000000001 81700.0 46800.00000000001 80900.0 ; + RECT 46000.00000000001 98699.99999999999 46800.00000000001 97900.0 ; + RECT 47600.0 98699.99999999999 48400.00000000001 97900.0 ; + RECT 47600.0 98699.99999999999 48400.00000000001 97900.0 ; + RECT 46000.00000000001 98699.99999999999 46800.00000000001 97900.0 ; + RECT 49200.0 81300.00000000001 50000.00000000001 80500.0 ; + RECT 49200.0 98699.99999999999 50000.00000000001 97900.0 ; + RECT 46400.00000000001 90199.99999999999 47200.0 89400.0 ; + RECT 46400.00000000001 90199.99999999999 47200.0 89400.0 ; + RECT 48100.0 90100.0 48700.0 89500.0 ; + RECT 44800.00000000001 79900.0 51200.0 79300.00000000001 ; + RECT 44800.00000000001 99900.0 51200.0 99300.00000000001 ; + RECT 39600.0 118300.00000000001 40400.00000000001 119600.0 ; + RECT 39600.0 99600.0 40400.00000000001 100900.0 ; + RECT 36400.00000000001 101699.99999999999 37200.0 99300.00000000001 ; + RECT 36400.00000000001 115100.0 37200.0 119900.0 ; + RECT 38200.0 101699.99999999999 38800.00000000001 115100.0 ; + RECT 36400.00000000001 115100.0 37200.0 115900.0 ; + RECT 38000.0 115100.0 38800.00000000001 115900.0 ; + RECT 38000.0 115100.0 38800.00000000001 115900.0 ; + RECT 36400.00000000001 115100.0 37200.0 115900.0 ; + RECT 36400.00000000001 101699.99999999999 37200.0 102500.0 ; + RECT 38000.0 101699.99999999999 38800.00000000001 102500.0 ; + RECT 38000.0 101699.99999999999 38800.00000000001 102500.0 ; + RECT 36400.00000000001 101699.99999999999 37200.0 102500.0 ; + RECT 39600.0 117900.0 40400.00000000001 118699.99999999999 ; + RECT 39600.0 100500.0 40400.00000000001 101300.00000000001 ; + RECT 36800.00000000001 108400.0 37600.0 109199.99999999999 ; + RECT 36800.00000000001 108400.0 37600.0 109199.99999999999 ; + RECT 38500.0 108500.0 39100.0 109100.0 ; + RECT 35200.0 119300.00000000001 41600.0 119900.0 ; + RECT 35200.0 99300.00000000001 41600.0 99900.0 ; + RECT 50800.00000000001 118300.00000000001 51600.0 119600.0 ; + RECT 50800.00000000001 99600.0 51600.0 100900.0 ; + RECT 42900.0 100500.0 49900.00000000001 99300.00000000001 ; + RECT 42900.0 116500.0 49900.00000000001 119900.0 ; + RECT 47700.0 103100.0 48300.00000000001 113900.0 ; + RECT 42900.0 115500.0 43500.0 116800.00000000001 ; + RECT 46100.0 115500.0 46700.0 116800.00000000001 ; + RECT 49300.00000000001 115500.0 49900.00000000001 116800.00000000001 ; + RECT 44500.0 114199.99999999999 45100.0 115500.0 ; + RECT 47700.0 114199.99999999999 48300.00000000001 115500.0 ; + RECT 42800.00000000001 115100.0 43600.0 115900.0 ; + RECT 46000.0 115100.0 46800.00000000001 115900.0 ; + RECT 49200.0 115100.0 50000.0 115900.0 ; + RECT 44400.0 115100.0 45200.0 115900.0 ; + RECT 47600.0 115100.0 48400.0 115900.0 ; + RECT 44500.0 113900.0 48300.00000000001 114500.0 ; + RECT 42900.0 116500.0 49900.00000000001 117100.0 ; + RECT 42900.0 100800.00000000001 43500.0 102100.0 ; + RECT 46100.0 100800.00000000001 46700.0 102100.0 ; + RECT 49300.00000000001 100800.00000000001 49900.00000000001 102100.0 ; + RECT 44500.0 102100.0 45100.0 103400.0 ; + RECT 47700.0 102100.0 48300.00000000001 103400.0 ; + RECT 42800.00000000001 101699.99999999999 43600.0 102500.0 ; + RECT 46000.0 101699.99999999999 46800.00000000001 102500.0 ; + RECT 49200.0 101699.99999999999 50000.0 102500.0 ; + RECT 44400.0 101699.99999999999 45200.0 102500.0 ; + RECT 47600.0 101699.99999999999 48400.0 102500.0 ; + RECT 44500.0 103100.0 48300.00000000001 103699.99999999999 ; + RECT 42900.0 100500.0 49900.00000000001 101100.0 ; + RECT 50800.00000000001 117900.0 51600.0 118699.99999999999 ; + RECT 50800.00000000001 100500.0 51600.0 101300.00000000001 ; + RECT 43200.0 108400.0 44000.0 109199.99999999999 ; + RECT 43200.0 108400.0 44000.0 109199.99999999999 ; + RECT 48000.0 108500.0 48600.0 109100.0 ; + RECT 41600.0 119300.00000000001 52800.00000000001 119900.0 ; + RECT 41600.0 99300.00000000001 52800.00000000001 99900.0 ; + RECT 31500.000000000004 123100.00000000003 32100.0 124500.0 ; + RECT 35400.00000000001 134700.00000000003 36800.00000000001 135500.0 ; + RECT 35400.00000000001 150300.0 36800.00000000001 151100.0 ; + RECT 35400.00000000001 153100.0 36800.00000000001 153900.0 ; + RECT 35400.00000000001 168700.00000000003 36800.00000000001 169500.0 ; + RECT 35400.00000000001 171500.0 36800.00000000001 172300.0 ; + RECT 35400.00000000001 187100.0 36800.00000000001 187900.0 ; + RECT 35400.00000000001 189900.0 36800.00000000001 190700.00000000003 ; + RECT 35400.00000000001 205500.0 36800.00000000001 206299.99999999997 ; + RECT 26800.0 132000.0 27400.000000000004 132600.00000000003 ; + RECT 26800.0 131400.0 27400.000000000004 132000.0 ; + RECT 27100.0 132000.0 28000.0 132600.00000000003 ; + RECT 26800.0 131700.00000000003 27400.000000000004 132300.0 ; + RECT 16800.0 131400.0 27100.0 132000.0 ; + RECT 15700.000000000002 129000.0 16300.0 129600.00000000003 ; + RECT 15700.000000000002 129300.00000000001 16300.0 129500.0 ; + RECT 10800.0 129000.0 16000.0 129600.00000000003 ; + RECT 8399.999999999998 125800.00000000001 7600.0 124500.0 ; + RECT 8400.0 133700.00000000003 7600.000000000001 132400.0 ; + RECT 11600.000000000002 132800.0 10800.0 134000.0 ; + RECT 11600.0 126600.00000000003 10799.999999999998 124200.00000000001 ; + RECT 9800.0 132800.0 9200.0 126600.00000000003 ; + RECT 11600.0 126600.00000000003 10800.0 125800.00000000001 ; + RECT 10000.0 126600.00000000003 9200.0 125800.00000000001 ; + RECT 10000.0 126600.00000000003 9200.0 125800.00000000001 ; + RECT 11600.0 126600.00000000003 10800.0 125800.00000000001 ; + RECT 11600.000000000002 132800.0 10800.0 132000.0 ; + RECT 10000.0 132800.0 9200.0 132000.0 ; + RECT 10000.0 132800.0 9200.000000000002 132000.0 ; + RECT 11600.000000000002 132800.0 10800.0 132000.0 ; + RECT 8399.999999999998 126200.00000000001 7600.0 125400.0 ; + RECT 8400.0 132800.0 7600.000000000001 132000.0 ; + RECT 11200.0 129700.00000000001 10400.0 128900.0 ; + RECT 11200.0 129700.00000000001 10400.0 128900.0 ; + RECT 9500.0 129600.00000000003 8900.0 129000.0 ; + RECT 12799.999999999998 124800.00000000001 6399.999999999999 124200.00000000001 ; + RECT 12800.0 134000.0 6400.0 133400.0 ; + RECT 15600.000000000002 129100.00000000003 16400.000000000004 129900.0 ; + RECT 17200.000000000004 129100.00000000003 18000.0 129900.0 ; + RECT 17200.000000000004 129100.00000000003 18000.0 129900.0 ; + RECT 15600.000000000002 129100.00000000003 16400.000000000004 129900.0 ; + RECT 4400.0 141600.00000000003 5200.0 142900.0 ; + RECT 4400.0 133700.00000000003 5200.0 135000.0 ; + RECT 1200.0000000000002 134600.00000000003 2000.0 133400.0 ; + RECT 1200.0000000000002 140800.0 2000.0 143200.00000000003 ; + RECT 3000.0 134600.00000000003 3600.0 140800.0 ; + RECT 1200.0000000000002 140800.0 2000.0 141600.00000000003 ; + RECT 2800.0000000000005 140800.0 3600.0000000000005 141600.00000000003 ; + RECT 2800.0000000000005 140800.0 3600.0 141600.00000000003 ; + RECT 1200.0000000000002 140800.0 2000.0 141600.00000000003 ; + RECT 1200.0000000000002 134600.00000000003 2000.0 135400.0 ; + RECT 2800.0000000000005 134600.00000000003 3600.0000000000005 135400.0 ; + RECT 2800.0000000000005 134600.00000000003 3600.0 135400.0 ; + RECT 1200.0000000000002 134600.00000000003 2000.0 135400.0 ; + RECT 4400.0 141200.00000000003 5200.0 142000.0 ; + RECT 4400.0 134600.00000000003 5200.0 135400.0 ; + RECT 1600.0 137700.00000000003 2400.0000000000005 138500.0 ; + RECT 1600.0 137700.00000000003 2400.0000000000005 138500.0 ; + RECT 3300.0000000000005 137800.0 3900.0000000000005 138400.0 ; + RECT 0.0 142600.00000000003 6400.0 143200.00000000003 ; + RECT 0.0 133400.0 6400.0 134000.0 ; + RECT 10800.0 141600.00000000003 11600.000000000002 142900.0 ; + RECT 10800.0 133700.00000000003 11600.000000000002 135000.0 ; + RECT 7600.000000000001 134600.00000000003 8400.0 133400.0 ; + RECT 7600.000000000001 140800.0 8400.0 143200.00000000003 ; + RECT 9400.0 134600.00000000003 10000.0 140800.0 ; + RECT 7600.000000000001 140800.0 8400.0 141600.00000000003 ; + RECT 9200.000000000002 140800.0 10000.0 141600.00000000003 ; + RECT 9200.000000000002 140800.0 10000.0 141600.00000000003 ; + RECT 7600.000000000001 140800.0 8400.0 141600.00000000003 ; + RECT 7600.000000000001 134600.00000000003 8400.0 135400.0 ; + RECT 9200.000000000002 134600.00000000003 10000.0 135400.0 ; + RECT 9200.000000000002 134600.00000000003 10000.0 135400.0 ; + RECT 7600.000000000001 134600.00000000003 8400.0 135400.0 ; + RECT 10800.0 141200.00000000003 11600.000000000002 142000.0 ; + RECT 10800.0 134600.00000000003 11600.000000000002 135400.0 ; + RECT 8000.0 137700.00000000003 8800.0 138500.0 ; + RECT 8000.0 137700.00000000003 8800.0 138500.0 ; + RECT 9700.000000000002 137800.0 10300.0 138400.0 ; + RECT 6400.0 142600.00000000003 12800.0 143200.00000000003 ; + RECT 6400.0 133400.0 12800.0 134000.0 ; + RECT 17200.000000000004 141600.00000000003 18000.0 142900.0 ; + RECT 17200.000000000004 133700.00000000003 18000.0 135000.0 ; + RECT 14000.0 134600.00000000003 14800.0 133400.0 ; + RECT 14000.0 140800.0 14800.0 143200.00000000003 ; + RECT 15800.0 134600.00000000003 16400.000000000004 140800.0 ; + RECT 14000.0 140800.0 14800.0 141600.00000000003 ; + RECT 15600.000000000002 140800.0 16400.000000000004 141600.00000000003 ; + RECT 15600.000000000002 140800.0 16400.000000000004 141600.00000000003 ; + RECT 14000.0 140800.0 14800.0 141600.00000000003 ; + RECT 14000.0 134600.00000000003 14800.0 135400.0 ; + RECT 15600.000000000002 134600.00000000003 16400.000000000004 135400.0 ; + RECT 15600.000000000002 134600.00000000003 16400.000000000004 135400.0 ; + RECT 14000.0 134600.00000000003 14800.0 135400.0 ; + RECT 17200.000000000004 141200.00000000003 18000.0 142000.0 ; + RECT 17200.000000000004 134600.00000000003 18000.0 135400.0 ; + RECT 14400.0 137700.00000000003 15200.000000000002 138500.0 ; + RECT 14400.0 137700.00000000003 15200.000000000002 138500.0 ; + RECT 16100.000000000002 137800.0 16700.000000000004 138400.0 ; + RECT 12800.0 142600.00000000003 19200.000000000004 143200.00000000003 ; + RECT 12800.0 133400.0 19200.000000000004 134000.0 ; + RECT 23600.0 141600.00000000003 24400.000000000004 142900.0 ; + RECT 23600.0 133700.00000000003 24400.000000000004 135000.0 ; + RECT 20400.000000000004 134600.00000000003 21200.000000000004 133400.0 ; + RECT 20400.000000000004 140800.0 21200.000000000004 143200.00000000003 ; + RECT 22200.000000000004 134600.00000000003 22800.000000000004 140800.0 ; + RECT 20400.000000000004 140800.0 21200.000000000004 141600.00000000003 ; + RECT 22000.000000000004 140800.0 22800.000000000004 141600.00000000003 ; + RECT 22000.000000000004 140800.0 22800.000000000004 141600.00000000003 ; + RECT 20400.000000000004 140800.0 21200.000000000004 141600.00000000003 ; + RECT 20400.000000000004 134600.00000000003 21200.000000000004 135400.0 ; + RECT 22000.000000000004 134600.00000000003 22800.000000000004 135400.0 ; + RECT 22000.000000000004 134600.00000000003 22800.000000000004 135400.0 ; + RECT 20400.000000000004 134600.00000000003 21200.000000000004 135400.0 ; + RECT 23600.0 141200.00000000003 24400.000000000004 142000.0 ; + RECT 23600.0 134600.00000000003 24400.000000000004 135400.0 ; + RECT 20800.000000000004 137700.00000000003 21600.0 138500.0 ; + RECT 20800.000000000004 137700.00000000003 21600.0 138500.0 ; + RECT 22500.000000000004 137800.0 23100.0 138400.0 ; + RECT 19200.000000000004 142600.00000000003 25600.0 143200.00000000003 ; + RECT 19200.000000000004 133400.0 25600.0 134000.0 ; + RECT 4400.0 144200.00000000003 5200.0 142900.0 ; + RECT 4400.0 152100.0 5200.0 150800.0 ; + RECT 1200.0000000000002 151200.00000000003 2000.0 152400.0 ; + RECT 1200.0000000000002 145000.0 2000.0 142600.00000000003 ; + RECT 3000.0 151200.00000000003 3600.0 145000.0 ; + RECT 1200.0000000000002 145000.0 2000.0 144200.00000000003 ; + RECT 2800.0000000000005 145000.0 3600.0000000000005 144200.00000000003 ; + RECT 2800.0000000000005 145000.0 3600.0 144200.00000000003 ; + RECT 1200.0000000000002 145000.0 2000.0 144200.00000000003 ; + RECT 1200.0000000000002 151200.00000000003 2000.0 150400.0 ; + RECT 2800.0000000000005 151200.00000000003 3600.0000000000005 150400.0 ; + RECT 2800.0000000000005 151200.00000000003 3600.0 150400.0 ; + RECT 1200.0000000000002 151200.00000000003 2000.0 150400.0 ; + RECT 4400.0 144600.00000000003 5200.0 143800.0 ; + RECT 4400.0 151200.00000000003 5200.0 150400.0 ; + RECT 1600.0 148100.0 2400.0000000000005 147300.0 ; + RECT 1600.0 148100.0 2400.0000000000005 147300.0 ; + RECT 3300.0000000000005 148000.0 3900.0000000000005 147400.0 ; + RECT 0.0 143200.00000000003 6400.0 142600.00000000003 ; + RECT 0.0 152400.0 6400.0 151800.0 ; + RECT 10800.0 144200.00000000003 11600.000000000002 142900.0 ; + RECT 10800.0 152100.0 11600.000000000002 150800.0 ; + RECT 7600.000000000001 151200.00000000003 8400.0 152400.0 ; + RECT 7600.000000000001 145000.0 8400.0 142600.00000000003 ; + RECT 9400.0 151200.00000000003 10000.0 145000.0 ; + RECT 7600.000000000001 145000.0 8400.0 144200.00000000003 ; + RECT 9200.000000000002 145000.0 10000.0 144200.00000000003 ; + RECT 9200.000000000002 145000.0 10000.0 144200.00000000003 ; + RECT 7600.000000000001 145000.0 8400.0 144200.00000000003 ; + RECT 7600.000000000001 151200.00000000003 8400.0 150400.0 ; + RECT 9200.000000000002 151200.00000000003 10000.0 150400.0 ; + RECT 9200.000000000002 151200.00000000003 10000.0 150400.0 ; + RECT 7600.000000000001 151200.00000000003 8400.0 150400.0 ; + RECT 10800.0 144600.00000000003 11600.000000000002 143800.0 ; + RECT 10800.0 151200.00000000003 11600.000000000002 150400.0 ; + RECT 8000.0 148100.0 8800.0 147300.0 ; + RECT 8000.0 148100.0 8800.0 147300.0 ; + RECT 9700.000000000002 148000.0 10300.0 147400.0 ; + RECT 6400.0 143200.00000000003 12800.0 142600.00000000003 ; + RECT 6400.0 152400.0 12800.0 151800.0 ; + RECT 17200.000000000004 144200.00000000003 18000.0 142900.0 ; + RECT 17200.000000000004 152100.0 18000.0 150800.0 ; + RECT 14000.0 151200.00000000003 14800.0 152400.0 ; + RECT 14000.0 145000.0 14800.0 142600.00000000003 ; + RECT 15800.0 151200.00000000003 16400.000000000004 145000.0 ; + RECT 14000.0 145000.0 14800.0 144200.00000000003 ; + RECT 15600.000000000002 145000.0 16400.000000000004 144200.00000000003 ; + RECT 15600.000000000002 145000.0 16400.000000000004 144200.00000000003 ; + RECT 14000.0 145000.0 14800.0 144200.00000000003 ; + RECT 14000.0 151200.00000000003 14800.0 150400.0 ; + RECT 15600.000000000002 151200.00000000003 16400.000000000004 150400.0 ; + RECT 15600.000000000002 151200.00000000003 16400.000000000004 150400.0 ; + RECT 14000.0 151200.00000000003 14800.0 150400.0 ; + RECT 17200.000000000004 144600.00000000003 18000.0 143800.0 ; + RECT 17200.000000000004 151200.00000000003 18000.0 150400.0 ; + RECT 14400.0 148100.0 15200.000000000002 147300.0 ; + RECT 14400.0 148100.0 15200.000000000002 147300.0 ; + RECT 16100.000000000002 148000.0 16700.000000000004 147400.0 ; + RECT 12800.0 143200.00000000003 19200.000000000004 142600.00000000003 ; + RECT 12800.0 152400.0 19200.000000000004 151800.0 ; + RECT 23600.0 144200.00000000003 24400.000000000004 142900.0 ; + RECT 23600.0 152100.0 24400.000000000004 150800.0 ; + RECT 20400.000000000004 151200.00000000003 21200.000000000004 152400.0 ; + RECT 20400.000000000004 145000.0 21200.000000000004 142600.00000000003 ; + RECT 22200.000000000004 151200.00000000003 22800.000000000004 145000.0 ; + RECT 20400.000000000004 145000.0 21200.000000000004 144200.00000000003 ; + RECT 22000.000000000004 145000.0 22800.000000000004 144200.00000000003 ; + RECT 22000.000000000004 145000.0 22800.000000000004 144200.00000000003 ; + RECT 20400.000000000004 145000.0 21200.000000000004 144200.00000000003 ; + RECT 20400.000000000004 151200.00000000003 21200.000000000004 150400.0 ; + RECT 22000.000000000004 151200.00000000003 22800.000000000004 150400.0 ; + RECT 22000.000000000004 151200.00000000003 22800.000000000004 150400.0 ; + RECT 20400.000000000004 151200.00000000003 21200.000000000004 150400.0 ; + RECT 23600.0 144600.00000000003 24400.000000000004 143800.0 ; + RECT 23600.0 151200.00000000003 24400.000000000004 150400.0 ; + RECT 20800.000000000004 148100.0 21600.0 147300.0 ; + RECT 20800.000000000004 148100.0 21600.0 147300.0 ; + RECT 22500.000000000004 148000.0 23100.0 147400.0 ; + RECT 19200.000000000004 143200.00000000003 25600.0 142600.00000000003 ; + RECT 19200.000000000004 152400.0 25600.0 151800.0 ; + RECT 4400.0 160000.00000000003 5200.0 161300.0 ; + RECT 4400.0 152100.0 5200.0 153400.0 ; + RECT 1200.0000000000002 153000.0 2000.0 151800.0 ; + RECT 1200.0000000000002 159200.00000000003 2000.0 161600.0 ; + RECT 3000.0 153000.0 3600.0 159200.00000000003 ; + RECT 1200.0000000000002 159200.00000000003 2000.0 160000.00000000003 ; + RECT 2800.0000000000005 159200.00000000003 3600.0000000000005 160000.00000000003 ; + RECT 2800.0000000000005 159200.00000000003 3600.0 160000.00000000003 ; + RECT 1200.0000000000002 159200.00000000003 2000.0 160000.00000000003 ; + RECT 1200.0000000000002 153000.0 2000.0 153800.0 ; + RECT 2800.0000000000005 153000.0 3600.0000000000005 153800.0 ; + RECT 2800.0000000000005 153000.0 3600.0 153800.0 ; + RECT 1200.0000000000002 153000.0 2000.0 153800.0 ; + RECT 4400.0 159600.0 5200.0 160400.0 ; + RECT 4400.0 153000.0 5200.0 153800.0 ; + RECT 1600.0 156100.0 2400.0000000000005 156900.0 ; + RECT 1600.0 156100.0 2400.0000000000005 156900.0 ; + RECT 3300.0000000000005 156200.00000000003 3900.0000000000005 156800.0 ; + RECT 0.0 161000.00000000003 6400.0 161600.0 ; + RECT 0.0 151800.0 6400.0 152400.0 ; + RECT 10800.0 160000.00000000003 11600.000000000002 161300.0 ; + RECT 10800.0 152100.0 11600.000000000002 153400.0 ; + RECT 7600.000000000001 153000.0 8400.0 151800.0 ; + RECT 7600.000000000001 159200.00000000003 8400.0 161600.0 ; + RECT 9400.0 153000.0 10000.0 159200.00000000003 ; + RECT 7600.000000000001 159200.00000000003 8400.0 160000.00000000003 ; + RECT 9200.000000000002 159200.00000000003 10000.0 160000.00000000003 ; + RECT 9200.000000000002 159200.00000000003 10000.0 160000.00000000003 ; + RECT 7600.000000000001 159200.00000000003 8400.0 160000.00000000003 ; + RECT 7600.000000000001 153000.0 8400.0 153800.0 ; + RECT 9200.000000000002 153000.0 10000.0 153800.0 ; + RECT 9200.000000000002 153000.0 10000.0 153800.0 ; + RECT 7600.000000000001 153000.0 8400.0 153800.0 ; + RECT 10800.0 159600.0 11600.000000000002 160400.0 ; + RECT 10800.0 153000.0 11600.000000000002 153800.0 ; + RECT 8000.0 156100.0 8800.0 156900.0 ; + RECT 8000.0 156100.0 8800.0 156900.0 ; + RECT 9700.000000000002 156200.00000000003 10300.0 156800.0 ; + RECT 6400.0 161000.00000000003 12800.0 161600.0 ; + RECT 6400.0 151800.0 12800.0 152400.0 ; + RECT 17200.000000000004 160000.00000000003 18000.0 161300.0 ; + RECT 17200.000000000004 152100.0 18000.0 153400.0 ; + RECT 14000.0 153000.0 14800.0 151800.0 ; + RECT 14000.0 159200.00000000003 14800.0 161600.0 ; + RECT 15800.0 153000.0 16400.000000000004 159200.00000000003 ; + RECT 14000.0 159200.00000000003 14800.0 160000.00000000003 ; + RECT 15600.000000000002 159200.00000000003 16400.000000000004 160000.00000000003 ; + RECT 15600.000000000002 159200.00000000003 16400.000000000004 160000.00000000003 ; + RECT 14000.0 159200.00000000003 14800.0 160000.00000000003 ; + RECT 14000.0 153000.0 14800.0 153800.0 ; + RECT 15600.000000000002 153000.0 16400.000000000004 153800.0 ; + RECT 15600.000000000002 153000.0 16400.000000000004 153800.0 ; + RECT 14000.0 153000.0 14800.0 153800.0 ; + RECT 17200.000000000004 159600.0 18000.0 160400.0 ; + RECT 17200.000000000004 153000.0 18000.0 153800.0 ; + RECT 14400.0 156100.0 15200.000000000002 156900.0 ; + RECT 14400.0 156100.0 15200.000000000002 156900.0 ; + RECT 16100.000000000002 156200.00000000003 16700.000000000004 156800.0 ; + RECT 12800.0 161000.00000000003 19200.000000000004 161600.0 ; + RECT 12800.0 151800.0 19200.000000000004 152400.0 ; + RECT 23600.0 160000.00000000003 24400.000000000004 161300.0 ; + RECT 23600.0 152100.0 24400.000000000004 153400.0 ; + RECT 20400.000000000004 153000.0 21200.000000000004 151800.0 ; + RECT 20400.000000000004 159200.00000000003 21200.000000000004 161600.0 ; + RECT 22200.000000000004 153000.0 22800.000000000004 159200.00000000003 ; + RECT 20400.000000000004 159200.00000000003 21200.000000000004 160000.00000000003 ; + RECT 22000.000000000004 159200.00000000003 22800.000000000004 160000.00000000003 ; + RECT 22000.000000000004 159200.00000000003 22800.000000000004 160000.00000000003 ; + RECT 20400.000000000004 159200.00000000003 21200.000000000004 160000.00000000003 ; + RECT 20400.000000000004 153000.0 21200.000000000004 153800.0 ; + RECT 22000.000000000004 153000.0 22800.000000000004 153800.0 ; + RECT 22000.000000000004 153000.0 22800.000000000004 153800.0 ; + RECT 20400.000000000004 153000.0 21200.000000000004 153800.0 ; + RECT 23600.0 159600.0 24400.000000000004 160400.0 ; + RECT 23600.0 153000.0 24400.000000000004 153800.0 ; + RECT 20800.000000000004 156100.0 21600.0 156900.0 ; + RECT 20800.000000000004 156100.0 21600.0 156900.0 ; + RECT 22500.000000000004 156200.00000000003 23100.0 156800.0 ; + RECT 19200.000000000004 161000.00000000003 25600.0 161600.0 ; + RECT 19200.000000000004 151800.0 25600.0 152400.0 ; + RECT 4400.0 162600.0 5200.0 161300.0 ; + RECT 4400.0 170500.00000000003 5200.0 169200.00000000003 ; + RECT 1200.0000000000002 169600.0 2000.0 170800.0 ; + RECT 1200.0000000000002 163400.0 2000.0 161000.00000000003 ; + RECT 3000.0 169600.0 3600.0 163400.0 ; + RECT 1200.0000000000002 163400.0 2000.0 162600.0 ; + RECT 2800.0000000000005 163400.0 3600.0000000000005 162600.0 ; + RECT 2800.0000000000005 163400.0 3600.0 162600.0 ; + RECT 1200.0000000000002 163400.0 2000.0 162600.0 ; + RECT 1200.0000000000002 169600.0 2000.0 168800.0 ; + RECT 2800.0000000000005 169600.0 3600.0000000000005 168800.0 ; + RECT 2800.0000000000005 169600.0 3600.0 168800.0 ; + RECT 1200.0000000000002 169600.0 2000.0 168800.0 ; + RECT 4400.0 163000.00000000003 5200.0 162200.00000000003 ; + RECT 4400.0 169600.0 5200.0 168800.0 ; + RECT 1600.0 166500.00000000003 2400.0000000000005 165700.00000000003 ; + RECT 1600.0 166500.00000000003 2400.0000000000005 165700.00000000003 ; + RECT 3300.0000000000005 166400.0 3900.0000000000005 165800.0 ; + RECT 0.0 161600.0 6400.0 161000.00000000003 ; + RECT 0.0 170800.0 6400.0 170200.00000000003 ; + RECT 10800.0 162600.0 11600.000000000002 161300.0 ; + RECT 10800.0 170500.00000000003 11600.000000000002 169200.00000000003 ; + RECT 7600.000000000001 169600.0 8400.0 170800.0 ; + RECT 7600.000000000001 163400.0 8400.0 161000.00000000003 ; + RECT 9400.0 169600.0 10000.0 163400.0 ; + RECT 7600.000000000001 163400.0 8400.0 162600.0 ; + RECT 9200.000000000002 163400.0 10000.0 162600.0 ; + RECT 9200.000000000002 163400.0 10000.0 162600.0 ; + RECT 7600.000000000001 163400.0 8400.0 162600.0 ; + RECT 7600.000000000001 169600.0 8400.0 168800.0 ; + RECT 9200.000000000002 169600.0 10000.0 168800.0 ; + RECT 9200.000000000002 169600.0 10000.0 168800.0 ; + RECT 7600.000000000001 169600.0 8400.0 168800.0 ; + RECT 10800.0 163000.00000000003 11600.000000000002 162200.00000000003 ; + RECT 10800.0 169600.0 11600.000000000002 168800.0 ; + RECT 8000.0 166500.00000000003 8800.0 165700.00000000003 ; + RECT 8000.0 166500.00000000003 8800.0 165700.00000000003 ; + RECT 9700.000000000002 166400.0 10300.0 165800.0 ; + RECT 6400.0 161600.0 12800.0 161000.00000000003 ; + RECT 6400.0 170800.0 12800.0 170200.00000000003 ; + RECT 17200.000000000004 162600.0 18000.0 161300.0 ; + RECT 17200.000000000004 170500.00000000003 18000.0 169200.00000000003 ; + RECT 14000.0 169600.0 14800.0 170800.0 ; + RECT 14000.0 163400.0 14800.0 161000.00000000003 ; + RECT 15800.0 169600.0 16400.000000000004 163400.0 ; + RECT 14000.0 163400.0 14800.0 162600.0 ; + RECT 15600.000000000002 163400.0 16400.000000000004 162600.0 ; + RECT 15600.000000000002 163400.0 16400.000000000004 162600.0 ; + RECT 14000.0 163400.0 14800.0 162600.0 ; + RECT 14000.0 169600.0 14800.0 168800.0 ; + RECT 15600.000000000002 169600.0 16400.000000000004 168800.0 ; + RECT 15600.000000000002 169600.0 16400.000000000004 168800.0 ; + RECT 14000.0 169600.0 14800.0 168800.0 ; + RECT 17200.000000000004 163000.00000000003 18000.0 162200.00000000003 ; + RECT 17200.000000000004 169600.0 18000.0 168800.0 ; + RECT 14400.0 166500.00000000003 15200.000000000002 165700.00000000003 ; + RECT 14400.0 166500.00000000003 15200.000000000002 165700.00000000003 ; + RECT 16100.000000000002 166400.0 16700.000000000004 165800.0 ; + RECT 12800.0 161600.0 19200.000000000004 161000.00000000003 ; + RECT 12800.0 170800.0 19200.000000000004 170200.00000000003 ; + RECT 23600.0 162600.0 24400.000000000004 161300.0 ; + RECT 23600.0 170500.00000000003 24400.000000000004 169200.00000000003 ; + RECT 20400.000000000004 169600.0 21200.000000000004 170800.0 ; + RECT 20400.000000000004 163400.0 21200.000000000004 161000.00000000003 ; + RECT 22200.000000000004 169600.0 22800.000000000004 163400.0 ; + RECT 20400.000000000004 163400.0 21200.000000000004 162600.0 ; + RECT 22000.000000000004 163400.0 22800.000000000004 162600.0 ; + RECT 22000.000000000004 163400.0 22800.000000000004 162600.0 ; + RECT 20400.000000000004 163400.0 21200.000000000004 162600.0 ; + RECT 20400.000000000004 169600.0 21200.000000000004 168800.0 ; + RECT 22000.000000000004 169600.0 22800.000000000004 168800.0 ; + RECT 22000.000000000004 169600.0 22800.000000000004 168800.0 ; + RECT 20400.000000000004 169600.0 21200.000000000004 168800.0 ; + RECT 23600.0 163000.00000000003 24400.000000000004 162200.00000000003 ; + RECT 23600.0 169600.0 24400.000000000004 168800.0 ; + RECT 20800.000000000004 166500.00000000003 21600.0 165700.00000000003 ; + RECT 20800.000000000004 166500.00000000003 21600.0 165700.00000000003 ; + RECT 22500.000000000004 166400.0 23100.0 165800.0 ; + RECT 19200.000000000004 161600.0 25600.0 161000.00000000003 ; + RECT 19200.000000000004 170800.0 25600.0 170200.00000000003 ; + RECT 8000.0 137700.00000000003 8800.0 138500.0 ; + RECT 14400.0 137700.00000000003 15200.000000000002 138500.0 ; + RECT 20800.0 137700.00000000003 21600.0 138500.0 ; + RECT 1600.0 137700.00000000003 2400.0000000000005 138500.0 ; + RECT 3200.0 137700.00000000003 4000.0 138500.0 ; + RECT 8000.0 147300.0 8800.0 148100.0 ; + RECT 14400.0 147300.0 15200.000000000002 148100.0 ; + RECT 20800.0 147300.0 21600.0 148100.0 ; + RECT 1600.0 147300.0 2400.0000000000005 148100.0 ; + RECT 3200.0 147300.0 4000.0 148100.0 ; + RECT 8000.0 156100.0 8800.0 156900.0 ; + RECT 14400.0 156100.0 15200.000000000002 156900.0 ; + RECT 20800.0 156100.0 21600.0 156900.0 ; + RECT 1600.0 156100.0 2400.0000000000005 156900.0 ; + RECT 3200.0 156100.0 4000.0 156900.0 ; + RECT 8000.0 165700.00000000003 8800.0 166500.0 ; + RECT 14400.0 165700.00000000003 15200.000000000002 166500.0 ; + RECT 20800.0 165700.00000000003 21600.0 166500.0 ; + RECT 1600.0 165700.00000000003 2400.0000000000005 166500.0 ; + RECT 3200.0 165700.00000000003 4000.0 166500.0 ; + RECT 13200.000000000002 142500.0 12400.0 143300.0 ; + RECT 13200.000000000002 133300.0 12400.0 134100.00000000003 ; + RECT 19600.0 142500.0 18800.0 143300.0 ; + RECT 19600.0 133300.0 18800.0 134100.00000000003 ; + RECT 13200.000000000002 160900.0 12400.0 161700.00000000003 ; + RECT 13200.000000000002 151700.00000000003 12400.0 152500.0 ; + RECT 19600.0 160900.0 18800.0 161700.00000000003 ; + RECT 19600.0 151700.00000000003 18800.0 152500.0 ; + RECT 13200.000000000002 170100.0 12400.0 170900.0 ; + RECT 19600.0 170100.0 18800.0 170900.0 ; + RECT 1600.0 137700.00000000003 2400.0000000000005 138500.0 ; + RECT 20800.0 165700.00000000003 21600.0 166500.0 ; + RECT 28400.000000000004 133700.00000000003 35200.0 124500.0 ; + RECT 28400.000000000004 133700.00000000003 35200.0 142900.0 ; + RECT 28400.000000000004 152100.0 35200.0 142900.0 ; + RECT 28400.000000000004 152100.0 35200.0 161300.0 ; + RECT 28400.000000000004 170500.00000000003 35200.0 161300.0 ; + RECT 28400.000000000004 170500.00000000003 35200.0 179700.00000000003 ; + RECT 28400.000000000004 188900.0 35200.0 179700.00000000003 ; + RECT 28400.000000000004 188900.0 35200.0 198100.0 ; + RECT 28400.000000000004 207300.0 35200.0 198100.0 ; + RECT 28000.000000000004 134700.00000000003 35400.00000000001 135500.0 ; + RECT 28000.000000000004 150300.0 35400.00000000001 151100.0 ; + RECT 28000.000000000004 153100.0 35400.00000000001 153900.0 ; + RECT 28000.000000000004 168700.00000000003 35400.00000000001 169500.00000000003 ; + RECT 28000.000000000004 171500.00000000003 35400.00000000001 172300.0 ; + RECT 28000.000000000004 187100.0 35400.00000000001 187900.0 ; + RECT 28000.000000000004 189900.0 35400.00000000001 190700.00000000003 ; + RECT 28000.000000000004 205500.0 35400.00000000001 206300.0 ; + RECT 6800.000000000001 124100.00000000003 6000.000000000001 124900.0 ; + RECT 31400.000000000004 122700.00000000001 32200.000000000004 123500.0 ; + RECT 28800.0 128700.00000000001 28000.0 129500.0 ; + RECT 35600.0 128700.00000000001 34800.00000000001 129500.0 ; + RECT 37200.0 134700.00000000003 36400.00000000001 135500.0 ; + RECT 37200.0 150300.0 36400.00000000001 151100.0 ; + RECT 37200.0 153100.0 36400.00000000001 153900.0 ; + RECT 37200.0 168700.00000000003 36400.00000000001 169500.0 ; + RECT 37200.0 171500.0 36400.00000000001 172300.0 ; + RECT 37200.0 187100.0 36400.00000000001 187900.0 ; + RECT 37200.0 189900.0 36400.00000000001 190700.00000000003 ; + RECT 37200.0 205500.0 36400.00000000001 206299.99999999997 ; + RECT 16400.000000000004 131300.0 17200.000000000004 132100.00000000003 ; + RECT 16400.000000000004 131300.0 17200.000000000004 132100.00000000003 ; + RECT 17200.000000000004 129100.00000000003 18000.000000000004 129900.0 ; + RECT 15600.000000000002 129100.00000000003 16400.000000000004 129900.0 ; + RECT 8800.0 128900.0 9600.000000000002 129700.00000000001 ; + RECT 33100.0 28800.000000000004 32300.000000000004 29600.0 ; + RECT 25000.0 28800.000000000004 25800.0 29600.0 ; + RECT 31700.000000000004 49600.0 30900.000000000004 50400.00000000001 ; + RECT 25000.0 49600.0 25800.0 50400.00000000001 ; + RECT 3500.0 62000.00000000001 2700.0 62800.00000000001 ; + RECT 28900.000000000004 62000.00000000001 28100.0 62800.00000000001 ; + RECT 30300.0 64900.00000000001 29500.0 65700.0 ; + RECT 33100.0 63600.0 32300.000000000004 64400.00000000001 ; + RECT 31700.000000000004 62300.00000000001 30900.000000000004 63100.0 ; + RECT 30300.0 94400.0 29500.0 95199.99999999999 ; + RECT 33100.0 95800.00000000001 32300.000000000004 96600.0 ; + RECT 48800.00000000001 89400.0 48000.00000000001 90199.99999999999 ; + RECT 9600.000000000002 108400.0 8800.0 109200.00000000001 ; + RECT 70000.0 39200.0 69200.0 40000.0 ; + RECT 70000.0 59200.0 69200.0 60000.0 ; + RECT 70000.0 19200.000000000004 69200.0 20000.0 ; + RECT 70000.0 79200.0 69200.0 80000.0 ; + RECT 70000.0 59200.0 69200.0 60000.0 ; + RECT 70000.0 79200.0 69200.0 80000.0 ; + RECT 70000.0 99200.00000000001 69200.0 100000.0 ; + RECT 70000.0 119200.00000000001 69200.0 120000.0 ; + RECT 70000.0 99200.00000000001 69200.0 100000.0 ; + RECT 48300.00000000001 108500.0 71000.0 109100.0 ; + RECT 65100.00000000001 68500.0 71000.0 69100.0 ; + RECT 51600.0 28500.0 71000.0 29100.0 ; + RECT 51600.0 50100.0 71000.0 50700.0 ; + RECT 49199.99999999999 211900.00000000003 71000.0 231900.00000000003 ; + RECT 49199.99999999999 251900.00000000003 71000.0 231900.00000000003 ; + RECT 49199.99999999999 251900.00000000003 71000.0 271900.00000000006 ; + RECT 49199.99999999999 291900.00000000006 71000.0 271900.00000000006 ; + RECT 60500.0 231500.00000000003 59699.99999999999 232300.00000000003 ; + RECT 60500.0 211500.00000000003 59699.99999999999 212300.00000000003 ; + RECT 60500.0 231500.00000000003 59699.99999999999 232300.00000000003 ; + RECT 60500.0 251500.00000000003 59699.99999999999 252300.00000000003 ; + RECT 60500.0 271500.00000000006 59699.99999999999 272300.0 ; + RECT 60500.0 251500.00000000003 59699.99999999999 252300.00000000003 ; + RECT 60500.0 271500.00000000006 59699.99999999999 272300.0 ; + RECT 60500.0 291500.00000000006 59699.99999999999 292300.00000000006 ; + RECT 178600.00000000003 0.0 200400.00000000003 20000.0 ; + RECT 200400.00000000003 0.0 222200.00000000003 20000.0 ; + RECT 189900.00000000003 19600.0 189100.00000000003 20400.000000000004 ; + RECT 189900.00000000003 -400.0 189100.00000000003 400.0 ; + RECT 211700.00000000003 19600.0 210900.00000000003 20400.000000000004 ; + RECT 211700.00000000003 -400.0 210900.00000000003 400.0 ; + RECT 71399.99999999999 108400.0 70600.0 109200.0 ; + RECT 71399.99999999999 68400.0 70600.0 69200.0 ; + RECT 71399.99999999999 28400.000000000004 70600.0 29200.000000000004 ; + RECT 71399.99999999999 50000.0 70600.0 50800.0 ; + RECT 182400.0 22400.000000000004 181600.0 23200.000000000004 ; + RECT 198200.0 22400.000000000004 197399.99999999997 23200.000000000004 ; + RECT 189200.0 23800.000000000004 188399.99999999997 24600.000000000004 ; + RECT 220000.0 23800.000000000004 219200.0 24600.000000000004 ; + LAYER metal2 ; + RECT 172400.0 3400.0000000000023 173000.0 148700.00000000003 ; + RECT 72100.0 50400.00000000001 72699.99999999999 215300.0 ; + RECT 176600.00000000003 108800.00000000001 177200.00000000003 148700.00000000003 ; + RECT 175200.0 68800.00000000001 175799.99999999997 148700.00000000003 ; + RECT 173800.0 28800.000000000004 174400.0 148700.00000000003 ; + RECT 172400.0 50400.00000000001 173000.0 148700.00000000003 ; + RECT 73899.99999999999 159600.00000000003 74499.99999999999 221700.00000000003 ; + RECT 75300.0 159600.00000000003 75899.99999999999 242100.00000000003 ; + RECT 76700.0 159600.00000000003 77300.0 261700.00000000006 ; + RECT 78100.0 159600.00000000003 78699.99999999999 282100.0 ; + RECT 181700.0 22800.000000000004 182299.99999999997 25200.000000000004 ; + RECT 197500.0 9800.000000000002 198100.0 22800.000000000004 ; + RECT 188500.0 24200.000000000004 189100.0 25200.000000000004 ; + RECT 219300.0 9800.000000000002 219900.0 24200.000000000004 ; + RECT 180700.0 64599.99999999999 181300.0 71500.0 ; + RECT 180700.0 71500.0 181300.0 78400.0 ; + RECT 182700.0 64599.99999999999 183300.0 71500.0 ; + RECT 182700.0 71500.0 183300.0 78400.0 ; + RECT 187500.0 64599.99999999999 188100.00000000003 71500.0 ; + RECT 187500.0 71500.0 188100.00000000003 78400.0 ; + RECT 189500.0 64599.99999999999 190100.00000000003 71500.0 ; + RECT 189500.0 71500.0 190100.00000000003 78400.0 ; + RECT 180700.0 103200.0 181300.0 103800.0 ; + RECT 179900.0 103200.0 180500.0 103800.0 ; + RECT 180700.0 101400.0 181300.0 103500.0 ; + RECT 180200.0 103200.0 181000.0 103800.0 ; + RECT 179900.0 103500.0 180500.0 105600.0 ; + RECT 182700.0 103200.0 183300.0 103800.0 ; + RECT 183500.0 103200.0 184100.00000000003 103800.0 ; + RECT 182700.0 101400.0 183300.0 103500.0 ; + RECT 183000.0 103200.0 183800.0 103800.0 ; + RECT 183500.0 103500.0 184100.00000000003 105600.0 ; + RECT 187500.0 103200.0 188100.00000000003 103800.0 ; + RECT 186700.0 103200.0 187300.0 103800.0 ; + RECT 187500.0 101400.0 188100.00000000003 103500.0 ; + RECT 187000.0 103200.0 187800.0 103800.0 ; + RECT 186700.0 103500.0 187300.0 105600.0 ; + RECT 189500.0 103200.0 190100.00000000003 103800.0 ; + RECT 190300.0 103200.0 190900.0 103800.0 ; + RECT 189500.0 101400.0 190100.00000000003 103500.0 ; + RECT 189800.0 103200.0 190600.00000000003 103800.0 ; + RECT 190300.0 103500.0 190900.0 105600.0 ; + RECT 179900.0 118200.0 180500.0 120100.00000000001 ; + RECT 179900.0 120100.00000000001 180500.0 122000.00000000001 ; + RECT 183500.0 118200.0 184100.00000000003 120100.00000000001 ; + RECT 183500.0 120100.00000000001 184100.00000000003 122800.00000000001 ; + RECT 186700.0 118200.0 187300.0 120100.00000000001 ; + RECT 186700.0 120100.00000000001 187300.0 122000.00000000001 ; + RECT 190300.0 118200.0 190900.0 120100.00000000001 ; + RECT 190300.0 120100.00000000001 190900.0 122800.00000000001 ; + RECT 145900.0 270000.0 146500.0 271400.00000000006 ; + RECT 178600.00000000003 122400.0 185400.0 131600.00000000003 ; + RECT 178600.00000000003 140800.0 185400.0 131600.00000000003 ; + RECT 178600.00000000003 140800.0 185400.0 150000.0 ; + RECT 178600.00000000003 159200.0 185400.0 150000.0 ; + RECT 178600.00000000003 159200.0 185400.0 168400.00000000003 ; + RECT 178600.00000000003 177600.00000000003 185400.0 168399.99999999997 ; + RECT 178600.00000000003 177600.00000000003 185400.0 186800.0 ; + RECT 178600.00000000003 196000.0 185400.0 186800.0 ; + RECT 178600.00000000003 196000.0 185400.0 205200.0 ; + RECT 178600.00000000003 214399.99999999997 185400.0 205200.0 ; + RECT 178600.00000000003 214399.99999999997 185400.0 223600.00000000003 ; + RECT 178600.00000000003 232800.0 185400.0 223600.00000000003 ; + RECT 178600.00000000003 232800.0 185400.0 242000.0 ; + RECT 178600.00000000003 251200.0 185400.0 242000.0 ; + RECT 178600.00000000003 251200.0 185400.0 260399.99999999997 ; + RECT 178600.00000000003 269600.0 185400.0 260400.00000000003 ; + RECT 185400.0 122400.0 192200.0 131600.00000000003 ; + RECT 185400.0 140800.0 192200.0 131600.00000000003 ; + RECT 185400.0 140800.0 192200.0 150000.0 ; + RECT 185400.0 159200.0 192200.0 150000.0 ; + RECT 185400.0 159200.0 192200.0 168400.00000000003 ; + RECT 185400.0 177600.00000000003 192200.0 168399.99999999997 ; + RECT 185400.0 177600.00000000003 192200.0 186800.0 ; + RECT 185400.0 196000.0 192200.0 186800.0 ; + RECT 185400.0 196000.0 192200.0 205200.0 ; + RECT 185400.0 214399.99999999997 192200.0 205200.0 ; + RECT 185400.0 214399.99999999997 192200.0 223600.00000000003 ; + RECT 185400.0 232800.0 192200.0 223600.00000000003 ; + RECT 185400.0 232800.0 192200.0 242000.0 ; + RECT 185400.0 251200.0 192200.0 242000.0 ; + RECT 185400.0 251200.0 192200.0 260399.99999999997 ; + RECT 185400.0 269600.0 192200.0 260400.00000000003 ; + RECT 181600.00000000003 131200.0 182400.0 132000.0 ; + RECT 188400.0 131200.0 189200.0 132000.0 ; + RECT 181600.00000000003 131200.0 182400.0 132000.0 ; + RECT 188400.0 131200.0 189200.0 132000.0 ; + RECT 181600.00000000003 149600.00000000003 182400.0 150400.0 ; + RECT 188400.0 149600.00000000003 189200.0 150400.0 ; + RECT 181600.00000000003 149600.00000000003 182400.0 150400.0 ; + RECT 188400.0 149600.00000000003 189200.0 150400.0 ; + RECT 181600.00000000003 168000.0 182400.0 168800.0 ; + RECT 188400.0 168000.0 189200.0 168800.0 ; + RECT 181600.00000000003 168000.0 182400.0 168800.0 ; + RECT 188400.0 168000.0 189200.0 168800.0 ; + RECT 181600.00000000003 186399.99999999997 182400.0 187200.0 ; + RECT 188400.0 186399.99999999997 189200.0 187200.0 ; + RECT 181600.00000000003 186399.99999999997 182400.0 187200.0 ; + RECT 188400.0 186399.99999999997 189200.0 187200.0 ; + RECT 181600.00000000003 204800.0 182400.0 205600.00000000003 ; + RECT 188400.0 204800.0 189200.0 205600.00000000003 ; + RECT 181600.00000000003 204800.0 182400.0 205600.00000000003 ; + RECT 188400.0 204800.0 189200.0 205600.00000000003 ; + RECT 181600.00000000003 223200.0 182400.0 224000.0 ; + RECT 188400.0 223200.0 189200.0 224000.0 ; + RECT 181600.00000000003 223200.0 182400.0 224000.0 ; + RECT 188400.0 223200.0 189200.0 224000.0 ; + RECT 181600.00000000003 241600.00000000003 182400.0 242399.99999999997 ; + RECT 188400.0 241600.00000000003 189200.0 242399.99999999997 ; + RECT 181600.00000000003 241600.00000000003 182400.0 242399.99999999997 ; + RECT 188400.0 241600.00000000003 189200.0 242399.99999999997 ; + RECT 181600.00000000003 260000.0 182400.0 260800.0 ; + RECT 188400.0 260000.0 189200.0 260800.0 ; + RECT 181600.00000000003 260000.0 182400.0 260800.0 ; + RECT 188400.0 260000.0 189200.0 260800.0 ; + RECT 178200.0 126600.00000000001 179000.0 127400.0 ; + RECT 185000.0 126600.00000000001 185800.0 127400.0 ; + RECT 185000.0 126600.00000000001 185800.0 127400.0 ; + RECT 191800.0 126600.00000000001 192600.00000000003 127400.0 ; + RECT 178200.0 135800.0 179000.0 136600.00000000003 ; + RECT 185000.0 135800.0 185800.0 136600.00000000003 ; + RECT 185000.0 135800.0 185800.0 136600.00000000003 ; + RECT 191800.0 135800.0 192600.00000000003 136600.00000000003 ; + RECT 178200.0 145000.0 179000.0 145800.0 ; + RECT 185000.0 145000.0 185800.0 145800.0 ; + RECT 185000.0 145000.0 185800.0 145800.0 ; + RECT 191800.0 145000.0 192600.00000000003 145800.0 ; + RECT 178200.0 154200.0 179000.0 155000.0 ; + RECT 185000.0 154200.0 185800.0 155000.0 ; + RECT 185000.0 154200.0 185800.0 155000.0 ; + RECT 191800.0 154200.0 192600.00000000003 155000.0 ; + RECT 178200.0 163399.99999999997 179000.0 164200.0 ; + RECT 185000.0 163399.99999999997 185800.0 164200.0 ; + RECT 185000.0 163399.99999999997 185800.0 164200.0 ; + RECT 191800.0 163399.99999999997 192600.00000000003 164200.0 ; + RECT 178200.0 172600.00000000003 179000.0 173399.99999999997 ; + RECT 185000.0 172600.00000000003 185800.0 173399.99999999997 ; + RECT 185000.0 172600.00000000003 185800.0 173399.99999999997 ; + RECT 191800.0 172600.00000000003 192600.00000000003 173399.99999999997 ; + RECT 178200.0 181800.0 179000.0 182600.00000000003 ; + RECT 185000.0 181800.0 185800.0 182600.00000000003 ; + RECT 185000.0 181800.0 185800.0 182600.00000000003 ; + RECT 191800.0 181800.0 192600.00000000003 182600.00000000003 ; + RECT 178200.0 191000.0 179000.0 191800.0 ; + RECT 185000.0 191000.0 185800.0 191800.0 ; + RECT 185000.0 191000.0 185800.0 191800.0 ; + RECT 191800.0 191000.0 192600.00000000003 191800.0 ; + RECT 178200.0 200200.0 179000.0 201000.0 ; + RECT 185000.0 200200.0 185800.0 201000.0 ; + RECT 185000.0 200200.0 185800.0 201000.0 ; + RECT 191800.0 200200.0 192600.00000000003 201000.0 ; + RECT 178200.0 209399.99999999997 179000.0 210200.0 ; + RECT 185000.0 209399.99999999997 185800.0 210200.0 ; + RECT 185000.0 209399.99999999997 185800.0 210200.0 ; + RECT 191800.0 209399.99999999997 192600.00000000003 210200.0 ; + RECT 178200.0 218600.00000000003 179000.0 219399.99999999997 ; + RECT 185000.0 218600.00000000003 185800.0 219399.99999999997 ; + RECT 185000.0 218600.00000000003 185800.0 219399.99999999997 ; + RECT 191800.0 218600.00000000003 192600.00000000003 219399.99999999997 ; + RECT 178200.0 227800.0 179000.0 228600.00000000003 ; + RECT 185000.0 227800.0 185800.0 228600.00000000003 ; + RECT 185000.0 227800.0 185800.0 228600.00000000003 ; + RECT 191800.0 227800.0 192600.00000000003 228600.00000000003 ; + RECT 178200.0 237000.0 179000.0 237800.0 ; + RECT 185000.0 237000.0 185800.0 237800.0 ; + RECT 185000.0 237000.0 185800.0 237800.0 ; + RECT 191800.0 237000.0 192600.00000000003 237800.0 ; + RECT 178200.0 246200.0 179000.0 247000.0 ; + RECT 185000.0 246200.0 185800.0 247000.0 ; + RECT 185000.0 246200.0 185800.0 247000.0 ; + RECT 191800.0 246200.0 192600.00000000003 247000.0 ; + RECT 178200.0 255399.99999999997 179000.0 256200.0 ; + RECT 185000.0 255399.99999999997 185800.0 256200.0 ; + RECT 185000.0 255399.99999999997 185800.0 256200.0 ; + RECT 191800.0 255399.99999999997 192600.00000000003 256200.0 ; + RECT 178200.0 264600.0 179000.0 265400.00000000006 ; + RECT 185000.0 264600.0 185800.0 265400.00000000006 ; + RECT 185000.0 264600.0 185800.0 265400.00000000006 ; + RECT 191800.0 264600.0 192600.00000000003 265400.00000000006 ; + RECT 179800.0 122000.0 180600.00000000003 271000.0 ; + RECT 183400.0 122800.00000000001 184200.0 271800.0 ; + RECT 186600.00000000003 122000.0 187400.0 271000.0 ; + RECT 190200.0 122800.00000000001 191000.0 271800.0 ; + RECT 181400.0 112000.00000000001 182200.0 112800.00000000001 ; + RECT 181400.0 112000.00000000001 182200.0 112800.00000000001 ; + RECT 179800.0 112000.00000000001 180600.00000000003 112800.00000000001 ; + RECT 179800.0 107200.0 180600.00000000003 108000.00000000001 ; + RECT 183400.0 112000.00000000001 184200.0 112800.00000000001 ; + RECT 183400.0 107200.0 184200.0 108000.00000000001 ; + RECT 179900.0 105600.00000000001 180500.0 118200.0 ; + RECT 183500.0 105600.00000000001 184100.00000000003 118200.0 ; + RECT 188200.0 112000.00000000001 189000.0 112800.00000000001 ; + RECT 188200.0 112000.00000000001 189000.0 112800.00000000001 ; + RECT 186600.00000000003 112000.00000000001 187400.0 112800.00000000001 ; + RECT 186600.00000000003 107200.0 187400.0 108000.00000000001 ; + RECT 190200.0 112000.00000000001 191000.0 112800.00000000001 ; + RECT 190200.0 107200.0 191000.0 108000.00000000001 ; + RECT 186700.0 105600.00000000001 187300.0 118200.0 ; + RECT 190300.0 105600.00000000001 190900.0 118200.0 ; + RECT 179900.0 105600.00000000001 180500.0 118200.0 ; + RECT 183500.0 105600.00000000001 184100.00000000003 118200.0 ; + RECT 186700.0 105600.00000000001 187300.0 118200.0 ; + RECT 190300.0 105600.00000000001 190900.0 118200.0 ; + RECT 178600.00000000003 68800.00000000001 185400.0 101400.0 ; + RECT 185400.0 68800.00000000001 192200.0 101400.0 ; + RECT 185000.0 95000.00000000001 185800.0 95800.00000000001 ; + RECT 184000.0 81600.00000000001 184800.0 82400.0 ; + RECT 191800.0 95000.00000000001 192600.00000000003 95800.00000000001 ; + RECT 190800.0 81600.00000000001 191600.00000000003 82400.0 ; + RECT 179200.0 68800.00000000001 180000.0 71800.00000000001 ; + RECT 180600.00000000003 78400.0 181400.0 101400.0 ; + RECT 182600.00000000003 78400.0 183400.0 101400.0 ; + RECT 186000.0 68800.00000000001 186800.0 71800.00000000001 ; + RECT 187400.0 78400.0 188200.0 101400.0 ; + RECT 189400.0 78400.0 190200.0 101400.0 ; + RECT 178600.00000000003 24200.000000000004 185400.0 64599.99999999999 ; + RECT 185400.0 24200.000000000004 192200.0 64599.99999999999 ; + RECT 182400.0 30400.000000000004 183200.0 31200.000000000004 ; + RECT 181800.0 47800.00000000001 182600.00000000003 48600.00000000001 ; + RECT 182400.0 37000.0 183200.0 37800.00000000001 ; + RECT 183800.0 41400.00000000001 184600.00000000003 42200.0 ; + RECT 183200.0 54800.00000000001 184000.0 55600.00000000001 ; + RECT 189200.0 30400.000000000004 190000.0 31200.000000000004 ; + RECT 188600.00000000003 47800.00000000001 189400.0 48600.00000000001 ; + RECT 189200.0 37000.0 190000.0 37800.00000000001 ; + RECT 190600.00000000003 41400.00000000001 191400.0 42200.0 ; + RECT 190000.0 54800.00000000001 190800.0 55600.00000000001 ; + RECT 181600.00000000003 24200.000000000004 182400.0 26200.000000000004 ; + RECT 188400.0 24200.000000000004 189200.0 26200.000000000004 ; + RECT 180600.00000000003 62600.00000000001 181400.0 64600.00000000001 ; + RECT 182600.00000000003 59600.0 183400.0 64600.00000000001 ; + RECT 187400.0 62600.00000000001 188200.0 64600.00000000001 ; + RECT 189400.0 59600.0 190200.0 64600.00000000001 ; + RECT 111400.0 127500.0 112000.0 131800.0 ; + RECT 111400.0 137100.00000000003 112000.0 141400.0 ; + RECT 111400.0 145900.0 112000.0 150200.0 ; + RECT 111400.0 155500.0 112000.0 159800.0 ; + RECT 111400.0 164300.0 112000.0 168600.00000000003 ; + RECT 111400.0 173899.99999999997 112000.0 178200.0 ; + RECT 111400.0 182700.0 112000.0 187000.0 ; + RECT 111400.0 192300.0 112000.0 196600.00000000003 ; + RECT 92900.0 124000.0 93500.0 159600.00000000003 ; + RECT 94300.0 124000.0 94900.0 159600.00000000003 ; + RECT 95700.0 124000.0 96300.0 159600.00000000003 ; + RECT 97100.0 124000.0 97700.0 159600.00000000003 ; + RECT 101400.0 127300.00000000001 102000.0 127900.0 ; + RECT 103000.0 127300.00000000001 103600.0 127900.0 ; + RECT 101400.0 127600.00000000001 102000.0 129900.0 ; + RECT 101700.0 127300.00000000001 103300.0 127900.0 ; + RECT 103000.0 124900.0 103600.0 127600.00000000001 ; + RECT 101300.0 129900.0 102100.0 130699.99999999999 ; + RECT 102900.0 124100.00000000001 103700.0 124900.0 ; + RECT 103700.0 127200.0 102900.0 128000.0 ; + RECT 101400.0 136700.0 102000.0 136100.00000000003 ; + RECT 103000.0 136700.0 103600.0 136100.00000000003 ; + RECT 101400.0 136400.0 102000.0 134100.00000000003 ; + RECT 101700.0 136700.0 103300.0 136100.00000000003 ; + RECT 103000.0 139100.00000000003 103600.0 136400.0 ; + RECT 101300.0 134100.00000000003 102100.0 133300.0 ; + RECT 102900.0 139900.0 103700.0 139100.00000000003 ; + RECT 103700.0 136800.0 102900.0 136000.0 ; + RECT 101400.0 145700.0 102000.0 146300.0 ; + RECT 103000.0 145700.0 103600.0 146300.0 ; + RECT 101400.0 146000.0 102000.0 148300.0 ; + RECT 101700.0 145700.0 103300.0 146300.0 ; + RECT 103000.0 143300.0 103600.0 146000.0 ; + RECT 101300.0 148300.0 102100.0 149100.00000000003 ; + RECT 102900.0 142500.0 103700.0 143300.0 ; + RECT 103700.0 145600.00000000003 102900.0 146400.0 ; + RECT 101400.0 155100.00000000003 102000.0 154500.0 ; + RECT 103000.0 155100.00000000003 103600.0 154500.0 ; + RECT 101400.0 154800.0 102000.0 152500.0 ; + RECT 101700.0 155100.00000000003 103300.0 154500.0 ; + RECT 103000.0 157500.0 103600.0 154800.0 ; + RECT 101300.0 152500.0 102100.0 151700.0 ; + RECT 102900.0 158300.0 103700.0 157500.0 ; + RECT 103700.0 155200.0 102900.0 154400.00000000003 ; + RECT 93600.0 129800.00000000001 92800.0 130600.00000000003 ; + RECT 81900.0 126800.00000000001 81100.0 127600.00000000001 ; + RECT 95000.0 139000.0 94200.0 139800.0 ; + RECT 83300.0 136400.0 82500.0 137200.0 ; + RECT 81900.0 142200.0 81100.0 143000.0 ; + RECT 96400.0 142200.0 95600.0 143000.0 ; + RECT 83300.0 151400.0 82500.0 152200.0 ; + RECT 97800.0 151400.0 97000.0 152200.0 ; + RECT 93600.0 127200.0 92800.0 128000.0 ; + RECT 95000.0 125800.00000000001 94200.0 126600.00000000001 ; + RECT 96400.0 136000.0 95600.0 136800.0 ; + RECT 95000.0 137400.0 94200.0 138200.0 ; + RECT 93600.0 145600.00000000003 92800.0 146400.0 ; + RECT 97800.0 144200.0 97000.0 145000.0 ; + RECT 96400.0 154399.99999999997 95600.0 155200.0 ; + RECT 97800.0 155800.0 97000.0 156600.00000000003 ; + RECT 90500.0 131600.00000000003 89700.0 132400.0 ; + RECT 90500.0 131600.00000000003 89700.0 132400.0 ; + RECT 108500.0 131600.00000000003 107700.0 132400.0 ; + RECT 108500.0 131600.00000000003 107700.0 132400.0 ; + RECT 90500.0 122400.0 89700.0 123200.0 ; + RECT 90500.0 122400.0 89700.0 123200.0 ; + RECT 108500.0 122400.0 107700.0 123200.0 ; + RECT 108500.0 122400.0 107700.0 123200.0 ; + RECT 90500.0 131600.00000000003 89700.0 132400.0 ; + RECT 90500.0 131600.00000000003 89700.0 132400.0 ; + RECT 108500.0 131600.00000000003 107700.0 132400.0 ; + RECT 108500.0 131600.00000000003 107700.0 132400.0 ; + RECT 90500.0 140800.0 89700.0 141600.00000000003 ; + RECT 90500.0 140800.0 89700.0 141600.00000000003 ; + RECT 108500.0 140800.0 107700.0 141600.00000000003 ; + RECT 108500.0 140800.0 107700.0 141600.00000000003 ; + RECT 90500.0 150000.0 89700.0 150800.0 ; + RECT 90500.0 150000.0 89700.0 150800.0 ; + RECT 108500.0 150000.0 107700.0 150800.0 ; + RECT 108500.0 150000.0 107700.0 150800.0 ; + RECT 90500.0 140800.0 89700.0 141600.00000000003 ; + RECT 90500.0 140800.0 89700.0 141600.00000000003 ; + RECT 108500.0 140800.0 107700.0 141600.00000000003 ; + RECT 108500.0 140800.0 107700.0 141600.00000000003 ; + RECT 90500.0 150000.0 89700.0 150800.0 ; + RECT 90500.0 150000.0 89700.0 150800.0 ; + RECT 108500.0 150000.0 107700.0 150800.0 ; + RECT 108500.0 150000.0 107700.0 150800.0 ; + RECT 90500.0 159200.0 89700.0 160000.0 ; + RECT 90500.0 159200.0 89700.0 160000.0 ; + RECT 108500.0 159200.0 107700.0 160000.0 ; + RECT 108500.0 159200.0 107700.0 160000.0 ; + RECT 81200.0 124000.0 81800.0 159600.00000000003 ; + RECT 82600.0 124000.0 83200.0 159600.00000000003 ; + RECT 92900.0 160800.0 93500.0 196399.99999999997 ; + RECT 94300.0 160800.0 94900.0 196399.99999999997 ; + RECT 95700.0 160800.0 96300.0 196399.99999999997 ; + RECT 97100.0 160800.0 97700.0 196399.99999999997 ; + RECT 101400.0 164100.00000000003 102000.0 164700.0 ; + RECT 103000.0 164100.00000000003 103600.0 164700.0 ; + RECT 101400.0 164399.99999999997 102000.0 166700.0 ; + RECT 101700.0 164100.00000000003 103300.0 164700.0 ; + RECT 103000.0 161700.0 103600.0 164399.99999999997 ; + RECT 101300.0 166700.0 102100.0 167500.0 ; + RECT 102900.0 160899.99999999997 103700.0 161700.0 ; + RECT 103700.0 164000.0 102900.0 164800.0 ; + RECT 101400.0 173500.0 102000.0 172900.00000000003 ; + RECT 103000.0 173500.0 103600.0 172900.00000000003 ; + RECT 101400.0 173200.0 102000.0 170899.99999999997 ; + RECT 101700.0 173500.0 103300.0 172900.00000000003 ; + RECT 103000.0 175899.99999999997 103600.0 173200.0 ; + RECT 101300.0 170899.99999999997 102100.0 170100.00000000003 ; + RECT 102900.0 176700.0 103700.0 175899.99999999997 ; + RECT 103700.0 173600.00000000003 102900.0 172800.0 ; + RECT 101400.0 182500.0 102000.0 183100.00000000003 ; + RECT 103000.0 182500.0 103600.0 183100.00000000003 ; + RECT 101400.0 182800.0 102000.0 185100.00000000003 ; + RECT 101700.0 182500.0 103300.0 183100.00000000003 ; + RECT 103000.0 180100.00000000003 103600.0 182800.0 ; + RECT 101300.0 185100.00000000003 102100.0 185900.00000000003 ; + RECT 102900.0 179300.0 103700.0 180100.00000000003 ; + RECT 103700.0 182400.00000000003 102900.0 183200.0 ; + RECT 101400.0 191899.99999999997 102000.0 191300.0 ; + RECT 103000.0 191899.99999999997 103600.0 191300.0 ; + RECT 101400.0 191600.00000000003 102000.0 189300.0 ; + RECT 101700.0 191899.99999999997 103300.0 191300.0 ; + RECT 103000.0 194300.0 103600.0 191600.00000000003 ; + RECT 101300.0 189300.0 102100.0 188500.0 ; + RECT 102900.0 195100.00000000003 103700.0 194300.0 ; + RECT 103700.0 192000.0 102900.0 191200.0 ; + RECT 93600.0 166600.00000000003 92800.0 167399.99999999997 ; + RECT 81900.0 163600.00000000003 81100.0 164399.99999999997 ; + RECT 95000.0 175800.0 94200.0 176600.00000000003 ; + RECT 83300.0 173200.0 82500.0 174000.0 ; + RECT 81900.0 179000.0 81100.0 179800.0 ; + RECT 96400.0 179000.0 95600.0 179800.0 ; + RECT 83300.0 188200.0 82500.0 189000.0 ; + RECT 97800.0 188200.0 97000.0 189000.0 ; + RECT 93600.0 164000.0 92800.0 164800.0 ; + RECT 95000.0 162600.00000000003 94200.0 163399.99999999997 ; + RECT 96400.0 172800.0 95600.0 173600.00000000003 ; + RECT 95000.0 174200.0 94200.0 175000.0 ; + RECT 93600.0 182399.99999999997 92800.0 183200.0 ; + RECT 97800.0 181000.0 97000.0 181800.0 ; + RECT 96400.0 191200.0 95600.0 192000.0 ; + RECT 97800.0 192600.00000000003 97000.0 193399.99999999997 ; + RECT 90500.0 168399.99999999997 89700.0 169200.0 ; + RECT 90500.0 168399.99999999997 89700.0 169200.0 ; + RECT 108500.0 168399.99999999997 107700.0 169200.0 ; + RECT 108500.0 168399.99999999997 107700.0 169200.0 ; + RECT 90500.0 159200.0 89700.0 160000.0 ; + RECT 90500.0 159200.0 89700.0 160000.0 ; + RECT 108500.0 159200.0 107700.0 160000.0 ; + RECT 108500.0 159200.0 107700.0 160000.0 ; + RECT 90500.0 168399.99999999997 89700.0 169200.0 ; + RECT 90500.0 168399.99999999997 89700.0 169200.0 ; + RECT 108500.0 168399.99999999997 107700.0 169200.0 ; + RECT 108500.0 168399.99999999997 107700.0 169200.0 ; + RECT 90500.0 177600.00000000003 89700.0 178399.99999999997 ; + RECT 90500.0 177600.00000000003 89700.0 178399.99999999997 ; + RECT 108500.0 177600.00000000003 107700.0 178399.99999999997 ; + RECT 108500.0 177600.00000000003 107700.0 178399.99999999997 ; + RECT 90500.0 186800.0 89700.0 187600.00000000003 ; + RECT 90500.0 186800.0 89700.0 187600.00000000003 ; + RECT 108500.0 186800.0 107700.0 187600.00000000003 ; + RECT 108500.0 186800.0 107700.0 187600.00000000003 ; + RECT 90500.0 177600.00000000003 89700.0 178399.99999999997 ; + RECT 90500.0 177600.00000000003 89700.0 178399.99999999997 ; + RECT 108500.0 177600.00000000003 107700.0 178399.99999999997 ; + RECT 108500.0 177600.00000000003 107700.0 178399.99999999997 ; + RECT 90500.0 186800.0 89700.0 187600.00000000003 ; + RECT 90500.0 186800.0 89700.0 187600.00000000003 ; + RECT 108500.0 186800.0 107700.0 187600.00000000003 ; + RECT 108500.0 186800.0 107700.0 187600.00000000003 ; + RECT 90500.0 196000.0 89700.0 196800.0 ; + RECT 90500.0 196000.0 89700.0 196800.0 ; + RECT 108500.0 196000.0 107700.0 196800.0 ; + RECT 108500.0 196000.0 107700.0 196800.0 ; + RECT 81200.0 160800.0 81800.0 196399.99999999997 ; + RECT 82600.0 160800.0 83200.0 196399.99999999997 ; + RECT 128600.0 127300.00000000001 129199.99999999999 127900.0 ; + RECT 130199.99999999999 127300.00000000001 130800.00000000001 127900.0 ; + RECT 128600.0 127600.00000000001 129199.99999999999 129900.0 ; + RECT 128900.0 127300.00000000001 130500.0 127900.0 ; + RECT 130199.99999999999 124900.0 130800.00000000001 127600.00000000001 ; + RECT 128500.0 129900.0 129300.00000000001 130699.99999999999 ; + RECT 130100.0 124100.00000000001 130900.0 124900.0 ; + RECT 130900.0 127200.0 130100.0 128000.0 ; + RECT 128600.0 136700.0 129199.99999999999 136100.00000000003 ; + RECT 130199.99999999999 136700.0 130800.00000000001 136100.00000000003 ; + RECT 128600.0 136400.0 129199.99999999999 134100.00000000003 ; + RECT 128900.0 136700.0 130500.0 136100.00000000003 ; + RECT 130199.99999999999 139100.00000000003 130800.00000000001 136400.0 ; + RECT 128500.0 134100.00000000003 129300.00000000001 133300.0 ; + RECT 130100.0 139900.0 130900.0 139100.00000000003 ; + RECT 130900.0 136800.0 130100.0 136000.0 ; + RECT 128600.0 145700.0 129199.99999999999 146300.0 ; + RECT 130199.99999999999 145700.0 130800.00000000001 146300.0 ; + RECT 128600.0 146000.0 129199.99999999999 148300.0 ; + RECT 128900.0 145700.0 130500.0 146300.0 ; + RECT 130199.99999999999 143300.0 130800.00000000001 146000.0 ; + RECT 128500.0 148300.0 129300.00000000001 149100.00000000003 ; + RECT 130100.0 142500.0 130900.0 143300.0 ; + RECT 130900.0 145600.00000000003 130100.0 146400.0 ; + RECT 128600.0 155100.00000000003 129199.99999999999 154500.0 ; + RECT 130199.99999999999 155100.00000000003 130800.00000000001 154500.0 ; + RECT 128600.0 154800.0 129199.99999999999 152500.0 ; + RECT 128900.0 155100.00000000003 130500.0 154500.0 ; + RECT 130199.99999999999 157500.0 130800.00000000001 154800.0 ; + RECT 128500.0 152500.0 129300.00000000001 151700.0 ; + RECT 130100.0 158300.0 130900.0 157500.0 ; + RECT 130900.0 155200.0 130100.0 154399.99999999997 ; + RECT 128600.0 164100.00000000003 129199.99999999999 164700.0 ; + RECT 130199.99999999999 164100.00000000003 130800.00000000001 164700.0 ; + RECT 128600.0 164399.99999999997 129199.99999999999 166700.0 ; + RECT 128900.0 164100.00000000003 130500.0 164700.0 ; + RECT 130199.99999999999 161700.0 130800.00000000001 164399.99999999997 ; + RECT 128500.0 166700.0 129300.00000000001 167500.0 ; + RECT 130100.0 160899.99999999997 130900.0 161700.0 ; + RECT 130900.0 164000.0 130100.0 164800.0 ; + RECT 128600.0 173500.0 129199.99999999999 172899.99999999997 ; + RECT 130199.99999999999 173500.0 130800.00000000001 172899.99999999997 ; + RECT 128600.0 173200.0 129199.99999999999 170899.99999999997 ; + RECT 128900.0 173500.0 130500.0 172899.99999999997 ; + RECT 130199.99999999999 175899.99999999997 130800.00000000001 173200.0 ; + RECT 128500.0 170899.99999999997 129300.00000000001 170100.00000000003 ; + RECT 130100.0 176700.0 130900.0 175899.99999999997 ; + RECT 130900.0 173600.00000000003 130100.0 172800.0 ; + RECT 128600.0 182500.0 129199.99999999999 183100.00000000003 ; + RECT 130199.99999999999 182500.0 130800.00000000001 183100.00000000003 ; + RECT 128600.0 182800.0 129199.99999999999 185100.00000000003 ; + RECT 128900.0 182500.0 130500.0 183100.00000000003 ; + RECT 130199.99999999999 180100.00000000003 130800.00000000001 182800.0 ; + RECT 128500.0 185100.00000000003 129300.00000000001 185899.99999999997 ; + RECT 130100.0 179300.0 130900.0 180100.00000000003 ; + RECT 130900.0 182399.99999999997 130100.0 183200.0 ; + RECT 128600.0 191900.00000000003 129199.99999999999 191300.0 ; + RECT 130199.99999999999 191900.00000000003 130800.00000000001 191300.0 ; + RECT 128600.0 191600.00000000003 129199.99999999999 189300.0 ; + RECT 128900.0 191900.00000000003 130500.0 191300.0 ; + RECT 130199.99999999999 194300.0 130800.00000000001 191600.00000000003 ; + RECT 128500.0 189300.0 129300.00000000001 188500.0 ; + RECT 130100.0 195100.00000000003 130900.0 194300.0 ; + RECT 130900.0 192000.0 130100.0 191200.0 ; + RECT 128600.0 200900.00000000003 129199.99999999999 201500.0 ; + RECT 130199.99999999999 200900.00000000003 130800.00000000001 201500.0 ; + RECT 128600.0 201200.0 129199.99999999999 203500.0 ; + RECT 128900.0 200900.00000000003 130500.0 201500.0 ; + RECT 130199.99999999999 198500.0 130800.00000000001 201200.0 ; + RECT 128500.0 203500.0 129300.00000000001 204300.0 ; + RECT 130100.0 197700.0 130900.0 198500.0 ; + RECT 130900.0 200800.0 130100.0 201600.00000000003 ; + RECT 128600.0 210300.0 129199.99999999999 209700.0 ; + RECT 130199.99999999999 210300.0 130800.00000000001 209700.0 ; + RECT 128600.0 210000.0 129199.99999999999 207700.0 ; + RECT 128900.0 210300.0 130500.0 209700.0 ; + RECT 130199.99999999999 212700.0 130800.00000000001 210000.0 ; + RECT 128500.0 207700.0 129300.00000000001 206899.99999999997 ; + RECT 130100.0 213500.0 130900.0 212700.0 ; + RECT 130900.0 210399.99999999997 130100.0 209600.00000000003 ; + RECT 128600.0 219300.0 129199.99999999999 219899.99999999997 ; + RECT 130199.99999999999 219300.0 130800.00000000001 219899.99999999997 ; + RECT 128600.0 219600.00000000003 129199.99999999999 221899.99999999997 ; + RECT 128900.0 219300.0 130500.0 219899.99999999997 ; + RECT 130199.99999999999 216899.99999999997 130800.00000000001 219600.00000000003 ; + RECT 128500.0 221899.99999999997 129300.00000000001 222700.0 ; + RECT 130100.0 216100.00000000003 130900.0 216899.99999999997 ; + RECT 130900.0 219200.0 130100.0 220000.0 ; + RECT 128600.0 228700.0 129199.99999999999 228100.00000000003 ; + RECT 130199.99999999999 228700.0 130800.00000000001 228100.00000000003 ; + RECT 128600.0 228400.00000000003 129199.99999999999 226100.00000000003 ; + RECT 128900.0 228700.0 130500.0 228100.00000000003 ; + RECT 130199.99999999999 231100.00000000003 130800.00000000001 228400.00000000003 ; + RECT 128500.0 226100.00000000003 129300.00000000001 225300.0 ; + RECT 130100.0 231900.00000000003 130900.0 231100.00000000003 ; + RECT 130900.0 228800.0 130100.0 228000.0 ; + RECT 128600.0 237700.0 129199.99999999999 238300.0 ; + RECT 130199.99999999999 237700.0 130800.00000000001 238300.0 ; + RECT 128600.0 238000.0 129199.99999999999 240300.0 ; + RECT 128900.0 237700.0 130500.0 238300.0 ; + RECT 130199.99999999999 235300.0 130800.00000000001 238000.0 ; + RECT 128500.0 240300.0 129300.00000000001 241100.00000000003 ; + RECT 130100.0 234500.0 130900.0 235300.0 ; + RECT 130900.0 237600.00000000003 130100.0 238400.00000000003 ; + RECT 128600.0 247100.00000000003 129199.99999999999 246500.0 ; + RECT 130199.99999999999 247100.00000000003 130800.00000000001 246500.0 ; + RECT 128600.0 246800.0 129199.99999999999 244500.0 ; + RECT 128900.0 247100.00000000003 130500.0 246500.0 ; + RECT 130199.99999999999 249500.0 130800.00000000001 246800.0 ; + RECT 128500.0 244500.0 129300.00000000001 243700.0 ; + RECT 130100.0 250300.0 130900.0 249500.0 ; + RECT 130900.0 247200.0 130100.0 246400.00000000003 ; + RECT 128600.0 256100.00000000003 129199.99999999999 256700.0 ; + RECT 130199.99999999999 256100.00000000003 130800.00000000001 256700.0 ; + RECT 128600.0 256400.00000000003 129199.99999999999 258700.0 ; + RECT 128900.0 256100.00000000003 130500.0 256700.0 ; + RECT 130199.99999999999 253700.0 130800.00000000001 256400.00000000003 ; + RECT 128500.0 258700.0 129300.00000000001 259500.0 ; + RECT 130100.0 252900.00000000003 130900.0 253700.0 ; + RECT 130900.0 256000.0 130100.0 256800.0 ; + RECT 128600.0 265500.0 129199.99999999999 264900.00000000006 ; + RECT 130199.99999999999 265500.0 130800.00000000001 264900.00000000006 ; + RECT 128600.0 265200.0 129199.99999999999 262900.00000000006 ; + RECT 128900.0 265500.0 130500.0 264900.00000000006 ; + RECT 130199.99999999999 267900.00000000006 130800.00000000001 265200.0 ; + RECT 128500.0 262900.00000000006 129300.00000000001 262100.00000000003 ; + RECT 130100.0 268700.0 130900.0 267900.00000000006 ; + RECT 130900.0 265600.0 130100.0 264800.0 ; + RECT 81900.0 132800.0 81100.0 133600.00000000003 ; + RECT 74600.0 132800.0 73800.0 133600.00000000003 ; + RECT 83300.0 142000.0 82500.0 142800.0 ; + RECT 76000.0 142000.0 75200.0 142800.0 ; + RECT 81900.0 169600.00000000003 81100.0 170399.99999999997 ; + RECT 77400.0 169600.00000000003 76600.0 170399.99999999997 ; + RECT 83300.0 178800.0 82500.0 179600.00000000003 ; + RECT 78800.0 178800.0 78000.0 179600.00000000003 ; + RECT 112100.0 126800.00000000001 111300.00000000001 127600.00000000001 ; + RECT 112100.0 131400.0 111300.00000000001 132200.0 ; + RECT 115500.0 131400.0 114700.0 132200.0 ; + RECT 112100.0 136400.0 111300.00000000001 137200.0 ; + RECT 112100.0 141000.0 111300.00000000001 141800.0 ; + RECT 116900.0 141000.0 116100.0 141800.0 ; + RECT 112100.0 145200.0 111300.00000000001 146000.0 ; + RECT 112100.0 149800.0 111300.00000000001 150600.00000000003 ; + RECT 118300.0 149800.0 117500.0 150600.00000000003 ; + RECT 112100.0 154800.0 111300.00000000001 155600.00000000003 ; + RECT 112100.0 159399.99999999997 111300.00000000001 160200.0 ; + RECT 119700.0 159399.99999999997 118900.0 160200.0 ; + RECT 112100.0 163600.00000000003 111300.00000000001 164399.99999999997 ; + RECT 112100.0 168200.0 111300.00000000001 169000.0 ; + RECT 121100.0 168200.0 120300.00000000001 169000.0 ; + RECT 112100.0 173200.0 111300.00000000001 174000.0 ; + RECT 112100.0 177800.0 111300.00000000001 178600.00000000003 ; + RECT 122500.0 177800.0 121700.0 178600.00000000003 ; + RECT 112100.0 182000.0 111300.00000000001 182800.0 ; + RECT 112100.0 186600.00000000003 111300.00000000001 187399.99999999997 ; + RECT 123900.0 186600.00000000003 123100.0 187399.99999999997 ; + RECT 112100.0 191600.00000000003 111300.00000000001 192399.99999999997 ; + RECT 112100.0 196200.0 111300.00000000001 197000.0 ; + RECT 125300.0 196200.0 124500.0 197000.0 ; + RECT 115500.0 127200.0 114700.0 128000.0 ; + RECT 121100.0 125800.00000000001 120300.00000000001 126600.00000000001 ; + RECT 115500.0 136000.0 114700.0 136800.0 ; + RECT 122500.0 137400.0 121700.0 138200.0 ; + RECT 115500.0 145600.00000000003 114700.0 146400.0 ; + RECT 123900.0 144200.0 123100.0 145000.0 ; + RECT 115500.0 154399.99999999997 114700.0 155200.0 ; + RECT 125300.0 155800.0 124500.0 156600.00000000003 ; + RECT 116900.0 164000.0 116100.0 164800.0 ; + RECT 121100.0 162600.00000000003 120300.00000000001 163399.99999999997 ; + RECT 116900.0 172800.0 116100.0 173600.00000000003 ; + RECT 122500.0 174200.0 121700.0 175000.0 ; + RECT 116900.0 182399.99999999997 116100.0 183200.0 ; + RECT 123900.0 181000.0 123100.0 181800.0 ; + RECT 116900.0 191200.0 116100.0 192000.0 ; + RECT 125300.0 192600.00000000003 124500.0 193399.99999999997 ; + RECT 118300.0 200800.0 117500.0 201600.00000000003 ; + RECT 121100.0 199400.00000000003 120300.00000000001 200200.0 ; + RECT 118300.0 209600.00000000003 117500.0 210400.00000000003 ; + RECT 122500.0 211000.0 121700.0 211800.0 ; + RECT 118300.0 219200.0 117500.0 220000.0 ; + RECT 123900.0 217800.0 123100.0 218600.00000000003 ; + RECT 118300.0 228000.0 117500.0 228800.0 ; + RECT 125300.0 229400.00000000003 124500.0 230200.0 ; + RECT 119700.0 237600.00000000003 118900.0 238400.00000000003 ; + RECT 121100.0 236200.0 120300.00000000001 237000.0 ; + RECT 119700.0 246400.00000000003 118900.0 247200.0 ; + RECT 122500.0 247800.0 121700.0 248600.00000000003 ; + RECT 119700.0 256000.0 118900.0 256800.0 ; + RECT 123900.0 254600.00000000003 123100.0 255400.00000000003 ; + RECT 119700.0 264800.0 118900.0 265600.0 ; + RECT 125300.0 266200.0 124500.0 267000.0 ; + RECT 130900.0 131600.00000000003 130100.00000000003 132400.0 ; + RECT 130900.0 131600.00000000003 130100.00000000003 132400.0 ; + RECT 130900.0 122400.0 130100.00000000003 123200.0 ; + RECT 130900.0 122400.0 130100.00000000003 123200.0 ; + RECT 130900.0 131600.00000000003 130100.00000000003 132400.0 ; + RECT 130900.0 131600.00000000003 130100.00000000003 132400.0 ; + RECT 130900.0 140800.0 130100.00000000003 141600.00000000003 ; + RECT 130900.0 140800.0 130100.00000000003 141600.00000000003 ; + RECT 130900.0 150000.0 130100.00000000003 150800.0 ; + RECT 130900.0 150000.0 130100.00000000003 150800.0 ; + RECT 130900.0 140800.0 130100.00000000003 141600.00000000003 ; + RECT 130900.0 140800.0 130100.00000000003 141600.00000000003 ; + RECT 130900.0 150000.0 130100.00000000003 150800.0 ; + RECT 130900.0 150000.0 130100.00000000003 150800.0 ; + RECT 130900.0 159200.0 130100.00000000003 160000.0 ; + RECT 130900.0 159200.0 130100.00000000003 160000.0 ; + RECT 130900.0 168399.99999999997 130100.00000000003 169200.0 ; + RECT 130900.0 168399.99999999997 130100.00000000003 169200.0 ; + RECT 130900.0 159200.0 130100.00000000003 160000.0 ; + RECT 130900.0 159200.0 130100.00000000003 160000.0 ; + RECT 130900.0 168399.99999999997 130100.00000000003 169200.0 ; + RECT 130900.0 168399.99999999997 130100.00000000003 169200.0 ; + RECT 130900.0 177600.00000000003 130100.00000000003 178399.99999999997 ; + RECT 130900.0 177600.00000000003 130100.00000000003 178399.99999999997 ; + RECT 130900.0 186800.0 130100.00000000003 187600.00000000003 ; + RECT 130900.0 186800.0 130100.00000000003 187600.00000000003 ; + RECT 130900.0 177600.00000000003 130100.00000000003 178399.99999999997 ; + RECT 130900.0 177600.00000000003 130100.00000000003 178399.99999999997 ; + RECT 130900.0 186800.0 130100.00000000003 187600.00000000003 ; + RECT 130900.0 186800.0 130100.00000000003 187600.00000000003 ; + RECT 130900.0 196000.0 130100.00000000003 196800.0 ; + RECT 130900.0 196000.0 130100.00000000003 196800.0 ; + RECT 130900.0 205200.0 130100.00000000003 206000.0 ; + RECT 130900.0 205200.0 130100.00000000003 206000.0 ; + RECT 130900.0 196000.0 130100.00000000003 196800.0 ; + RECT 130900.0 196000.0 130100.00000000003 196800.0 ; + RECT 130900.0 205200.0 130100.00000000003 206000.0 ; + RECT 130900.0 205200.0 130100.00000000003 206000.0 ; + RECT 130900.0 214400.00000000003 130100.00000000003 215200.0 ; + RECT 130900.0 214400.00000000003 130100.00000000003 215200.0 ; + RECT 130900.0 223600.00000000003 130100.00000000003 224400.00000000003 ; + RECT 130900.0 223600.00000000003 130100.00000000003 224400.00000000003 ; + RECT 130900.0 214400.00000000003 130100.00000000003 215200.0 ; + RECT 130900.0 214400.00000000003 130100.00000000003 215200.0 ; + RECT 130900.0 223600.00000000003 130100.00000000003 224400.00000000003 ; + RECT 130900.0 223600.00000000003 130100.00000000003 224400.00000000003 ; + RECT 130900.0 232800.0 130100.00000000003 233600.00000000003 ; + RECT 130900.0 232800.0 130100.00000000003 233600.00000000003 ; + RECT 130900.0 242000.0 130100.00000000003 242800.0 ; + RECT 130900.0 242000.0 130100.00000000003 242800.0 ; + RECT 130900.0 232800.0 130100.00000000003 233600.00000000003 ; + RECT 130900.0 232800.0 130100.00000000003 233600.00000000003 ; + RECT 130900.0 242000.0 130100.00000000003 242800.0 ; + RECT 130900.0 242000.0 130100.00000000003 242800.0 ; + RECT 130900.0 251200.0 130100.00000000003 252000.0 ; + RECT 130900.0 251200.0 130100.00000000003 252000.0 ; + RECT 130900.0 260399.99999999997 130100.00000000003 261200.0 ; + RECT 130900.0 260399.99999999997 130100.00000000003 261200.0 ; + RECT 130900.0 251200.0 130100.00000000003 252000.0 ; + RECT 130900.0 251200.0 130100.00000000003 252000.0 ; + RECT 130900.0 260399.99999999997 130100.00000000003 261200.0 ; + RECT 130900.0 260399.99999999997 130100.00000000003 261200.0 ; + RECT 130900.0 269600.0 130100.00000000003 270400.00000000006 ; + RECT 130900.0 269600.0 130100.00000000003 270400.00000000006 ; + RECT 73900.0 122800.00000000001 74500.0 196400.00000000003 ; + RECT 75300.0 122800.00000000001 75900.0 196400.00000000003 ; + RECT 76699.99999999999 122800.00000000001 77300.0 196400.00000000003 ; + RECT 78100.0 122800.00000000001 78699.99999999999 196400.00000000003 ; + RECT 147200.0 125900.0 147800.0 126500.0 ; + RECT 147200.0 125600.00000000001 147800.0 126200.0 ; + RECT 147500.0 125900.0 158300.0 126500.0 ; + RECT 147200.0 137500.0 147800.0 138100.00000000003 ; + RECT 147200.0 137800.0 147800.0 138400.0 ; + RECT 147500.0 137500.0 158300.0 138100.00000000003 ; + RECT 147200.0 144300.0 147800.0 144900.0 ; + RECT 147200.0 144000.0 147800.0 144600.00000000003 ; + RECT 147500.0 144300.0 158300.0 144900.0 ; + RECT 147200.0 155899.99999999997 147800.0 156500.0 ; + RECT 147200.0 156200.0 147800.0 156800.0 ; + RECT 147500.0 155899.99999999997 158300.0 156500.0 ; + RECT 147200.0 162700.0 147800.0 163300.0 ; + RECT 147200.0 162399.99999999997 147800.0 163000.0 ; + RECT 147500.0 162700.0 158300.0 163300.0 ; + RECT 147200.0 174300.0 147800.0 174899.99999999997 ; + RECT 147200.0 174600.00000000003 147800.0 175200.0 ; + RECT 147500.0 174300.0 158300.0 174899.99999999997 ; + RECT 147200.0 181100.00000000003 147800.0 181700.0 ; + RECT 147200.0 180800.0 147800.0 181399.99999999997 ; + RECT 147500.0 181100.00000000003 158300.0 181700.0 ; + RECT 147200.0 192700.0 147800.0 193300.0 ; + RECT 147200.0 193000.0 147800.0 193600.00000000003 ; + RECT 147500.0 192700.0 158300.0 193300.0 ; + RECT 147200.0 199500.0 147800.0 200100.00000000003 ; + RECT 147200.0 199200.0 147800.0 199800.0 ; + RECT 147500.0 199500.0 158300.0 200100.00000000003 ; + RECT 147200.0 211100.00000000003 147800.0 211700.0 ; + RECT 147200.0 211400.00000000003 147800.0 212000.0 ; + RECT 147500.0 211100.00000000003 158300.0 211700.0 ; + RECT 147200.0 217900.00000000003 147800.0 218500.0 ; + RECT 147200.0 217600.00000000003 147800.0 218200.0 ; + RECT 147500.0 217900.00000000003 158300.0 218500.0 ; + RECT 147200.0 229500.0 147800.0 230100.00000000003 ; + RECT 147200.0 229800.0 147800.0 230399.99999999997 ; + RECT 147500.0 229500.0 158300.0 230100.00000000003 ; + RECT 147200.0 236300.0 147800.0 236899.99999999997 ; + RECT 147200.0 236000.0 147800.0 236600.00000000003 ; + RECT 147500.0 236300.0 158300.0 236899.99999999997 ; + RECT 147200.0 247900.00000000003 147800.0 248500.0 ; + RECT 147200.0 248200.0 147800.0 248800.0 ; + RECT 147500.0 247900.00000000003 158300.0 248500.0 ; + RECT 147200.0 254700.0 147800.0 255300.0 ; + RECT 147200.0 254399.99999999997 147800.0 255000.0 ; + RECT 147500.0 254700.0 158300.0 255300.0 ; + RECT 147200.0 266300.0 147800.0 266900.0 ; + RECT 147200.0 266600.0 147800.0 267200.0 ; + RECT 147500.0 266300.0 158300.0 266900.0 ; + RECT 157600.0 127300.00000000001 158200.0 127900.0 ; + RECT 159200.0 127300.00000000001 159800.0 127900.0 ; + RECT 157600.0 127600.00000000001 158200.0 129900.0 ; + RECT 157899.99999999997 127300.00000000001 159500.0 127900.0 ; + RECT 159200.0 124900.0 159800.0 127600.00000000001 ; + RECT 157500.0 129900.0 158300.0 130699.99999999999 ; + RECT 159100.0 124100.00000000001 159899.99999999997 124900.0 ; + RECT 159899.99999999997 127200.0 159100.0 128000.0 ; + RECT 157600.0 136700.0 158200.0 136100.00000000003 ; + RECT 159200.0 136700.0 159800.0 136100.00000000003 ; + RECT 157600.0 136400.0 158200.0 134100.00000000003 ; + RECT 157899.99999999997 136700.0 159500.0 136100.00000000003 ; + RECT 159200.0 139100.00000000003 159800.0 136400.0 ; + RECT 157500.0 134100.00000000003 158300.0 133300.0 ; + RECT 159100.0 139900.0 159899.99999999997 139100.00000000003 ; + RECT 159899.99999999997 136800.0 159100.0 136000.0 ; + RECT 157600.0 145700.0 158200.0 146300.0 ; + RECT 159200.0 145700.0 159800.0 146300.0 ; + RECT 157600.0 146000.0 158200.0 148300.0 ; + RECT 157899.99999999997 145700.0 159500.0 146300.0 ; + RECT 159200.0 143300.0 159800.0 146000.0 ; + RECT 157500.0 148300.0 158300.0 149100.00000000003 ; + RECT 159100.0 142500.0 159899.99999999997 143300.0 ; + RECT 159899.99999999997 145600.00000000003 159100.0 146400.0 ; + RECT 157600.0 155100.00000000003 158200.0 154500.0 ; + RECT 159200.0 155100.00000000003 159800.0 154500.0 ; + RECT 157600.0 154800.0 158200.0 152500.0 ; + RECT 157899.99999999997 155100.00000000003 159500.0 154500.0 ; + RECT 159200.0 157500.0 159800.0 154800.0 ; + RECT 157500.0 152500.0 158300.0 151700.0 ; + RECT 159100.0 158300.0 159899.99999999997 157500.0 ; + RECT 159899.99999999997 155200.0 159100.0 154399.99999999997 ; + RECT 157600.0 164100.00000000003 158200.0 164700.0 ; + RECT 159200.0 164100.00000000003 159800.0 164700.0 ; + RECT 157600.0 164399.99999999997 158200.0 166700.0 ; + RECT 157899.99999999997 164100.00000000003 159500.0 164700.0 ; + RECT 159200.0 161700.0 159800.0 164399.99999999997 ; + RECT 157500.0 166700.0 158300.0 167500.0 ; + RECT 159100.0 160899.99999999997 159899.99999999997 161700.0 ; + RECT 159899.99999999997 164000.0 159100.0 164800.0 ; + RECT 157600.0 173500.0 158200.0 172899.99999999997 ; + RECT 159200.0 173500.0 159800.0 172899.99999999997 ; + RECT 157600.0 173200.0 158200.0 170899.99999999997 ; + RECT 157899.99999999997 173500.0 159500.0 172899.99999999997 ; + RECT 159200.0 175899.99999999997 159800.0 173200.0 ; + RECT 157500.0 170899.99999999997 158300.0 170100.00000000003 ; + RECT 159100.0 176700.0 159899.99999999997 175899.99999999997 ; + RECT 159899.99999999997 173600.00000000003 159100.0 172800.0 ; + RECT 157600.0 182500.0 158200.0 183100.00000000003 ; + RECT 159200.0 182500.0 159800.0 183100.00000000003 ; + RECT 157600.0 182800.0 158200.0 185100.00000000003 ; + RECT 157899.99999999997 182500.0 159500.0 183100.00000000003 ; + RECT 159200.0 180100.00000000003 159800.0 182800.0 ; + RECT 157500.0 185100.00000000003 158300.0 185899.99999999997 ; + RECT 159100.0 179300.0 159899.99999999997 180100.00000000003 ; + RECT 159899.99999999997 182399.99999999997 159100.0 183200.0 ; + RECT 157600.0 191900.00000000003 158200.0 191300.0 ; + RECT 159200.0 191900.00000000003 159800.0 191300.0 ; + RECT 157600.0 191600.00000000003 158200.0 189300.0 ; + RECT 157899.99999999997 191900.00000000003 159500.0 191300.0 ; + RECT 159200.0 194300.0 159800.0 191600.00000000003 ; + RECT 157500.0 189300.0 158300.0 188500.0 ; + RECT 159100.0 195100.00000000003 159899.99999999997 194300.0 ; + RECT 159899.99999999997 192000.0 159100.0 191200.0 ; + RECT 157600.0 200900.00000000003 158200.0 201500.0 ; + RECT 159200.0 200900.00000000003 159800.0 201500.0 ; + RECT 157600.0 201200.0 158200.0 203500.0 ; + RECT 157899.99999999997 200900.00000000003 159500.0 201500.0 ; + RECT 159200.0 198500.0 159800.0 201200.0 ; + RECT 157500.0 203500.0 158300.0 204300.0 ; + RECT 159100.0 197700.0 159899.99999999997 198500.0 ; + RECT 159899.99999999997 200800.0 159100.0 201600.00000000003 ; + RECT 157600.0 210300.0 158200.0 209700.0 ; + RECT 159200.0 210300.0 159800.0 209700.0 ; + RECT 157600.0 210000.0 158200.0 207700.0 ; + RECT 157899.99999999997 210300.0 159500.0 209700.0 ; + RECT 159200.0 212700.0 159800.0 210000.0 ; + RECT 157500.0 207700.0 158300.0 206899.99999999997 ; + RECT 159100.0 213500.0 159899.99999999997 212700.0 ; + RECT 159899.99999999997 210399.99999999997 159100.0 209600.00000000003 ; + RECT 157600.0 219300.0 158200.0 219899.99999999997 ; + RECT 159200.0 219300.0 159800.0 219899.99999999997 ; + RECT 157600.0 219600.00000000003 158200.0 221899.99999999997 ; + RECT 157899.99999999997 219300.0 159500.0 219899.99999999997 ; + RECT 159200.0 216899.99999999997 159800.0 219600.00000000003 ; + RECT 157500.0 221899.99999999997 158300.0 222700.0 ; + RECT 159100.0 216100.00000000003 159899.99999999997 216899.99999999997 ; + RECT 159899.99999999997 219200.0 159100.0 220000.0 ; + RECT 157600.0 228700.0 158200.0 228100.00000000003 ; + RECT 159200.0 228700.0 159800.0 228100.00000000003 ; + RECT 157600.0 228400.00000000003 158200.0 226100.00000000003 ; + RECT 157899.99999999997 228700.0 159500.0 228100.00000000003 ; + RECT 159200.0 231100.00000000003 159800.0 228400.00000000003 ; + RECT 157500.0 226100.00000000003 158300.0 225300.0 ; + RECT 159100.0 231900.00000000003 159899.99999999997 231100.00000000003 ; + RECT 159899.99999999997 228800.0 159100.0 228000.0 ; + RECT 157600.0 237700.0 158200.0 238300.0 ; + RECT 159200.0 237700.0 159800.0 238300.0 ; + RECT 157600.0 238000.0 158200.0 240300.0 ; + RECT 157899.99999999997 237700.0 159500.0 238300.0 ; + RECT 159200.0 235300.0 159800.0 238000.0 ; + RECT 157500.0 240300.0 158300.0 241100.00000000003 ; + RECT 159100.0 234500.0 159899.99999999997 235300.0 ; + RECT 159899.99999999997 237600.00000000003 159100.0 238400.00000000003 ; + RECT 157600.0 247100.00000000003 158200.0 246500.0 ; + RECT 159200.0 247100.00000000003 159800.0 246500.0 ; + RECT 157600.0 246800.0 158200.0 244500.0 ; + RECT 157899.99999999997 247100.00000000003 159500.0 246500.0 ; + RECT 159200.0 249500.0 159800.0 246800.0 ; + RECT 157500.0 244500.0 158300.0 243700.0 ; + RECT 159100.0 250300.0 159899.99999999997 249500.0 ; + RECT 159899.99999999997 247200.0 159100.0 246400.00000000003 ; + RECT 157600.0 256100.00000000003 158200.0 256700.0 ; + RECT 159200.0 256100.00000000003 159800.0 256700.0 ; + RECT 157600.0 256400.00000000003 158200.0 258700.0 ; + RECT 157899.99999999997 256100.00000000003 159500.0 256700.0 ; + RECT 159200.0 253700.0 159800.0 256400.00000000003 ; + RECT 157500.0 258700.0 158300.0 259500.0 ; + RECT 159100.0 252900.00000000003 159899.99999999997 253700.0 ; + RECT 159899.99999999997 256000.0 159100.0 256800.0 ; + RECT 157600.0 265500.0 158200.0 264900.00000000006 ; + RECT 159200.0 265500.0 159800.0 264900.00000000006 ; + RECT 157600.0 265200.0 158200.0 262900.00000000006 ; + RECT 157899.99999999997 265500.0 159500.0 264900.00000000006 ; + RECT 159200.0 267900.00000000006 159800.0 265200.0 ; + RECT 157500.0 262900.00000000006 158300.0 262100.00000000003 ; + RECT 159100.0 268700.0 159899.99999999997 267900.00000000006 ; + RECT 159899.99999999997 265600.0 159100.0 264800.0 ; + RECT 145800.0 126800.00000000001 146600.0 127600.00000000001 ; + RECT 147100.0 125200.0 147899.99999999997 126000.0 ; + RECT 158300.0 125800.00000000001 157500.0 126600.00000000001 ; + RECT 145800.0 136400.0 146600.0 137200.0 ; + RECT 147100.0 138000.0 147899.99999999997 138800.0 ; + RECT 158300.0 137400.0 157500.0 138200.0 ; + RECT 145800.0 145200.0 146600.0 146000.0 ; + RECT 147100.0 143600.00000000003 147899.99999999997 144400.0 ; + RECT 158300.0 144200.0 157500.0 145000.0 ; + RECT 145800.0 154800.0 146600.0 155600.00000000003 ; + RECT 147100.0 156399.99999999997 147899.99999999997 157200.0 ; + RECT 158300.0 155800.0 157500.0 156600.00000000003 ; + RECT 145800.0 163600.00000000003 146600.0 164399.99999999997 ; + RECT 147100.0 162000.0 147899.99999999997 162800.0 ; + RECT 158300.0 162600.00000000003 157500.0 163399.99999999997 ; + RECT 145800.0 173200.0 146600.0 174000.0 ; + RECT 147100.0 174800.0 147899.99999999997 175600.00000000003 ; + RECT 158300.0 174200.0 157500.0 175000.0 ; + RECT 145800.0 182000.0 146600.0 182800.0 ; + RECT 147100.0 180399.99999999997 147899.99999999997 181200.0 ; + RECT 158300.0 181000.0 157500.0 181800.0 ; + RECT 145800.0 191600.00000000003 146600.0 192399.99999999997 ; + RECT 147100.0 193200.0 147899.99999999997 194000.0 ; + RECT 158300.0 192600.00000000003 157500.0 193399.99999999997 ; + RECT 145800.0 200400.00000000003 146600.0 201200.0 ; + RECT 147100.0 198800.0 147899.99999999997 199600.00000000003 ; + RECT 158300.0 199400.00000000003 157500.0 200200.0 ; + RECT 145800.0 210000.0 146600.0 210800.0 ; + RECT 147100.0 211600.00000000003 147899.99999999997 212400.00000000003 ; + RECT 158300.0 211000.0 157500.0 211800.0 ; + RECT 145800.0 218800.0 146600.0 219600.00000000003 ; + RECT 147100.0 217200.0 147899.99999999997 218000.0 ; + RECT 158300.0 217800.0 157500.0 218600.00000000003 ; + RECT 145800.0 228400.00000000003 146600.0 229200.0 ; + RECT 147100.0 230000.0 147899.99999999997 230800.0 ; + RECT 158300.0 229400.00000000003 157500.0 230200.0 ; + RECT 145800.0 237200.0 146600.0 238000.0 ; + RECT 147100.0 235600.00000000003 147899.99999999997 236400.00000000003 ; + RECT 158300.0 236200.0 157500.0 237000.0 ; + RECT 145800.0 246800.0 146600.0 247600.00000000003 ; + RECT 147100.0 248400.00000000003 147899.99999999997 249200.0 ; + RECT 158300.0 247800.0 157500.0 248600.00000000003 ; + RECT 145800.0 255600.00000000003 146600.0 256400.00000000003 ; + RECT 147100.0 254000.0 147899.99999999997 254800.0 ; + RECT 158300.0 254600.00000000003 157500.0 255400.00000000003 ; + RECT 145800.0 265200.0 146600.0 266000.0 ; + RECT 147100.0 266800.0 147899.99999999997 267600.0 ; + RECT 158300.0 266200.0 157500.0 267000.0 ; + RECT 155100.0 131600.00000000003 154300.0 132400.0 ; + RECT 155100.0 131600.00000000003 154300.0 132400.0 ; + RECT 164700.0 131600.00000000003 163899.99999999997 132400.0 ; + RECT 164700.0 131600.00000000003 163899.99999999997 132400.0 ; + RECT 155100.0 122400.0 154300.0 123200.0 ; + RECT 155100.0 122400.0 154300.0 123200.0 ; + RECT 164700.0 122400.0 163899.99999999997 123200.0 ; + RECT 164700.0 122400.0 163899.99999999997 123200.0 ; + RECT 155100.0 131600.00000000003 154300.0 132400.0 ; + RECT 155100.0 131600.00000000003 154300.0 132400.0 ; + RECT 164700.0 131600.00000000003 163899.99999999997 132400.0 ; + RECT 164700.0 131600.00000000003 163899.99999999997 132400.0 ; + RECT 155100.0 140800.0 154300.0 141600.00000000003 ; + RECT 155100.0 140800.0 154300.0 141600.00000000003 ; + RECT 164700.0 140800.0 163899.99999999997 141600.00000000003 ; + RECT 164700.0 140800.0 163899.99999999997 141600.00000000003 ; + RECT 155100.0 150000.0 154300.0 150800.0 ; + RECT 155100.0 150000.0 154300.0 150800.0 ; + RECT 164700.0 150000.0 163899.99999999997 150800.0 ; + RECT 164700.0 150000.0 163899.99999999997 150800.0 ; + RECT 155100.0 140800.0 154300.0 141600.00000000003 ; + RECT 155100.0 140800.0 154300.0 141600.00000000003 ; + RECT 164700.0 140800.0 163899.99999999997 141600.00000000003 ; + RECT 164700.0 140800.0 163899.99999999997 141600.00000000003 ; + RECT 155100.0 150000.0 154300.0 150800.0 ; + RECT 155100.0 150000.0 154300.0 150800.0 ; + RECT 164700.0 150000.0 163899.99999999997 150800.0 ; + RECT 164700.0 150000.0 163899.99999999997 150800.0 ; + RECT 155100.0 159200.0 154300.0 160000.0 ; + RECT 155100.0 159200.0 154300.0 160000.0 ; + RECT 164700.0 159200.0 163899.99999999997 160000.0 ; + RECT 164700.0 159200.0 163899.99999999997 160000.0 ; + RECT 155100.0 168399.99999999997 154300.0 169200.0 ; + RECT 155100.0 168399.99999999997 154300.0 169200.0 ; + RECT 164700.0 168399.99999999997 163899.99999999997 169200.0 ; + RECT 164700.0 168399.99999999997 163899.99999999997 169200.0 ; + RECT 155100.0 159200.0 154300.0 160000.0 ; + RECT 155100.0 159200.0 154300.0 160000.0 ; + RECT 164700.0 159200.0 163899.99999999997 160000.0 ; + RECT 164700.0 159200.0 163899.99999999997 160000.0 ; + RECT 155100.0 168399.99999999997 154300.0 169200.0 ; + RECT 155100.0 168399.99999999997 154300.0 169200.0 ; + RECT 164700.0 168399.99999999997 163899.99999999997 169200.0 ; + RECT 164700.0 168399.99999999997 163899.99999999997 169200.0 ; + RECT 155100.0 177600.00000000003 154300.0 178399.99999999997 ; + RECT 155100.0 177600.00000000003 154300.0 178399.99999999997 ; + RECT 164700.0 177600.00000000003 163899.99999999997 178399.99999999997 ; + RECT 164700.0 177600.00000000003 163899.99999999997 178399.99999999997 ; + RECT 155100.0 186800.0 154300.0 187600.00000000003 ; + RECT 155100.0 186800.0 154300.0 187600.00000000003 ; + RECT 164700.0 186800.0 163899.99999999997 187600.00000000003 ; + RECT 164700.0 186800.0 163899.99999999997 187600.00000000003 ; + RECT 155100.0 177600.00000000003 154300.0 178399.99999999997 ; + RECT 155100.0 177600.00000000003 154300.0 178399.99999999997 ; + RECT 164700.0 177600.00000000003 163899.99999999997 178399.99999999997 ; + RECT 164700.0 177600.00000000003 163899.99999999997 178399.99999999997 ; + RECT 155100.0 186800.0 154300.0 187600.00000000003 ; + RECT 155100.0 186800.0 154300.0 187600.00000000003 ; + RECT 164700.0 186800.0 163899.99999999997 187600.00000000003 ; + RECT 164700.0 186800.0 163899.99999999997 187600.00000000003 ; + RECT 155100.0 196000.0 154300.0 196800.0 ; + RECT 155100.0 196000.0 154300.0 196800.0 ; + RECT 164700.0 196000.0 163899.99999999997 196800.0 ; + RECT 164700.0 196000.0 163899.99999999997 196800.0 ; + RECT 155100.0 205200.0 154300.0 206000.0 ; + RECT 155100.0 205200.0 154300.0 206000.0 ; + RECT 164700.0 205200.0 163899.99999999997 206000.0 ; + RECT 164700.0 205200.0 163899.99999999997 206000.0 ; + RECT 155100.0 196000.0 154300.0 196800.0 ; + RECT 155100.0 196000.0 154300.0 196800.0 ; + RECT 164700.0 196000.0 163899.99999999997 196800.0 ; + RECT 164700.0 196000.0 163899.99999999997 196800.0 ; + RECT 155100.0 205200.0 154300.0 206000.0 ; + RECT 155100.0 205200.0 154300.0 206000.0 ; + RECT 164700.0 205200.0 163899.99999999997 206000.0 ; + RECT 164700.0 205200.0 163899.99999999997 206000.0 ; + RECT 155100.0 214400.00000000003 154300.0 215200.0 ; + RECT 155100.0 214400.00000000003 154300.0 215200.0 ; + RECT 164700.0 214400.00000000003 163899.99999999997 215200.0 ; + RECT 164700.0 214400.00000000003 163899.99999999997 215200.0 ; + RECT 155100.0 223600.00000000003 154300.0 224400.00000000003 ; + RECT 155100.0 223600.00000000003 154300.0 224400.00000000003 ; + RECT 164700.0 223600.00000000003 163899.99999999997 224400.00000000003 ; + RECT 164700.0 223600.00000000003 163899.99999999997 224400.00000000003 ; + RECT 155100.0 214400.00000000003 154300.0 215200.0 ; + RECT 155100.0 214400.00000000003 154300.0 215200.0 ; + RECT 164700.0 214400.00000000003 163899.99999999997 215200.0 ; + RECT 164700.0 214400.00000000003 163899.99999999997 215200.0 ; + RECT 155100.0 223600.00000000003 154300.0 224400.00000000003 ; + RECT 155100.0 223600.00000000003 154300.0 224400.00000000003 ; + RECT 164700.0 223600.00000000003 163899.99999999997 224400.00000000003 ; + RECT 164700.0 223600.00000000003 163899.99999999997 224400.00000000003 ; + RECT 155100.0 232800.0 154300.0 233600.00000000003 ; + RECT 155100.0 232800.0 154300.0 233600.00000000003 ; + RECT 164700.0 232800.0 163899.99999999997 233600.00000000003 ; + RECT 164700.0 232800.0 163899.99999999997 233600.00000000003 ; + RECT 155100.0 242000.0 154300.0 242800.0 ; + RECT 155100.0 242000.0 154300.0 242800.0 ; + RECT 164700.0 242000.0 163899.99999999997 242800.0 ; + RECT 164700.0 242000.0 163899.99999999997 242800.0 ; + RECT 155100.0 232800.0 154300.0 233600.00000000003 ; + RECT 155100.0 232800.0 154300.0 233600.00000000003 ; + RECT 164700.0 232800.0 163899.99999999997 233600.00000000003 ; + RECT 164700.0 232800.0 163899.99999999997 233600.00000000003 ; + RECT 155100.0 242000.0 154300.0 242800.0 ; + RECT 155100.0 242000.0 154300.0 242800.0 ; + RECT 164700.0 242000.0 163899.99999999997 242800.0 ; + RECT 164700.0 242000.0 163899.99999999997 242800.0 ; + RECT 155100.0 251200.0 154300.0 252000.0 ; + RECT 155100.0 251200.0 154300.0 252000.0 ; + RECT 164700.0 251200.0 163899.99999999997 252000.0 ; + RECT 164700.0 251200.0 163899.99999999997 252000.0 ; + RECT 155100.0 260399.99999999997 154300.0 261200.0 ; + RECT 155100.0 260399.99999999997 154300.0 261200.0 ; + RECT 164700.0 260399.99999999997 163899.99999999997 261200.0 ; + RECT 164700.0 260399.99999999997 163899.99999999997 261200.0 ; + RECT 155100.0 251200.0 154300.0 252000.0 ; + RECT 155100.0 251200.0 154300.0 252000.0 ; + RECT 164700.0 251200.0 163899.99999999997 252000.0 ; + RECT 164700.0 251200.0 163899.99999999997 252000.0 ; + RECT 155100.0 260399.99999999997 154300.0 261200.0 ; + RECT 155100.0 260399.99999999997 154300.0 261200.0 ; + RECT 164700.0 260399.99999999997 163899.99999999997 261200.0 ; + RECT 164700.0 260399.99999999997 163899.99999999997 261200.0 ; + RECT 155100.0 269600.0 154300.0 270400.00000000006 ; + RECT 155100.0 269600.0 154300.0 270400.00000000006 ; + RECT 164700.0 269600.0 163899.99999999997 270400.00000000006 ; + RECT 164700.0 269600.0 163899.99999999997 270400.00000000006 ; + RECT 145899.99999999997 122800.00000000001 146500.0 270000.0 ; + RECT 174500.0 108700.0 173700.00000000003 109500.0 ; + RECT 175900.0 28900.000000000007 175100.00000000003 29700.000000000007 ; + RECT 177300.0 98500.0 176500.0 99300.0 ; + RECT 146600.00000000003 271000.0 145800.0 271800.0 ; + RECT 173100.00000000003 271000.0 172300.0 271800.0 ; + RECT 179200.0 68800.00000000001 180000.0 71800.00000000001 ; + RECT 186000.0 68800.00000000001 186800.0 71800.00000000001 ; + RECT 181600.00000000003 24200.000000000004 182400.0 26200.000000000004 ; + RECT 188400.0 24200.000000000004 189200.0 26200.000000000004 ; + RECT 73900.0 122800.00000000001 74500.0 196399.99999999997 ; + RECT 75300.0 122800.00000000001 75900.0 196399.99999999997 ; + RECT 76700.0 122800.00000000001 77300.0 196399.99999999997 ; + RECT 78100.00000000001 122800.00000000001 78700.0 196399.99999999997 ; + RECT 176600.00000000003 24200.000000000004 177200.0 273200.0 ; + RECT 175200.0 24200.000000000004 175800.0 273200.0 ; + RECT 173800.0 24200.000000000004 174400.0 273200.0 ; + RECT 172400.0 24200.000000000004 173000.0 273200.0 ; + RECT 28200.000000000004 19600.0 28800.000000000004 98200.00000000001 ; + RECT 29600.0 19600.0 30200.000000000004 98200.00000000001 ; + RECT 31000.0 19600.0 31600.0 98200.00000000001 ; + RECT 32400.0 19600.0 33000.0 98200.00000000001 ; + RECT 32400.0 29200.000000000004 33000.0 58900.00000000001 ; + RECT 31000.0 50000.0 31600.0 58900.00000000001 ; + RECT 2800.0000000000005 59600.0 3400.0000000000005 62400.0 ; + RECT 29600.0 58900.00000000001 30200.000000000004 65300.000000000015 ; + RECT 32400.0 58900.00000000001 33000.0 64000.0 ; + RECT 31000.0 58900.00000000001 31600.0 62700.0 ; + RECT 29600.0 58900.00000000001 30200.000000000004 94800.00000000001 ; + RECT 32400.0 58900.00000000001 33000.0 96200.00000000001 ; + RECT 1600.0 89800.00000000001 2200.0 129100.0 ; + RECT 8900.0 108800.00000000001 9500.0 124500.0 ; + RECT 28200.000000000004 50400.00000000001 28800.000000000004 58900.0 ; + RECT 29600.0 28800.000000000004 30200.000000000004 58900.00000000001 ; + RECT 0.0 19600.0 21800.0 39600.0 ; + RECT 18800.0 29000.0 19600.0 29800.000000000004 ; + RECT 23400.000000000004 28800.000000000004 24200.000000000004 29600.0 ; + RECT 23400.000000000004 28800.000000000004 24200.000000000004 29600.0 ; + RECT 25000.0 28800.000000000004 25800.0 29600.0 ; + RECT 7600.000000000001 28200.000000000004 8400.0 29000.0 ; + RECT 18900.000000000004 29100.0 19500.0 29700.000000000004 ; + RECT 25100.0 28900.000000000004 25700.000000000004 29500.0 ; + RECT 2800.0000000000005 26200.000000000004 3600.0 27000.0 ; + RECT 0.0 59600.0 21800.0 39600.0 ; + RECT 18800.0 50200.0 19600.0 49400.0 ; + RECT 23400.000000000004 50400.0 24200.000000000004 49600.0 ; + RECT 23400.000000000004 50400.0 24200.000000000004 49600.0 ; + RECT 25000.0 50400.0 25800.0 49600.0 ; + RECT 7600.000000000001 51000.0 8400.0 50200.0 ; + RECT 18900.000000000004 50100.0 19500.0 49500.0 ; + RECT 25100.0 50300.0 25700.000000000004 49700.0 ; + RECT 2800.0000000000005 53000.0 3600.0 52200.0 ; + RECT 400.0 39200.0 -400.0 40000.0 ; + RECT 400.0 39200.0 -400.0 40000.0 ; + RECT 400.0 19200.000000000004 -400.0 20000.0 ; + RECT 400.0 19200.000000000004 -400.0 20000.0 ; + RECT 400.0 39200.0 -400.0 40000.0 ; + RECT 400.0 39200.0 -400.0 40000.0 ; + RECT 400.0 59200.0 -400.0 60000.0 ; + RECT 400.0 59200.0 -400.0 60000.0 ; + RECT 7600.000000000001 28200.000000000004 8400.0 29000.0 ; + RECT 7600.000000000001 50200.0 8400.0 51000.0 ; + RECT 18900.000000000004 29100.0 19500.0 29700.000000000004 ; + RECT 25100.0 28900.000000000004 25700.000000000004 29500.0 ; + RECT 18900.000000000004 49500.0 19500.0 50100.0 ; + RECT 25100.0 49700.0 25700.000000000004 50300.00000000001 ; + RECT 2800.0000000000005 19600.0 3400.0000000000005 59600.0 ; + RECT 38500.0 29400.000000000004 39100.0 50400.00000000001 ; + RECT 39200.0 50000.0 38400.00000000001 50800.00000000001 ; + RECT 38400.00000000001 29000.0 39200.0 29800.000000000004 ; + RECT 51200.0 50000.0 52000.0 50800.00000000001 ; + RECT 51200.0 28400.000000000004 52000.0 29200.000000000004 ; + RECT 36800.00000000001 29000.0 37600.0 29800.000000000004 ; + RECT 36900.00000000001 29100.0 37500.0 29700.000000000004 ; + RECT 51300.00000000001 28500.0 51900.00000000001 29100.0 ; + RECT 51300.00000000001 50100.0 51900.00000000001 50700.0 ; + RECT 41300.00000000001 61700.0 41900.00000000001 77500.0 ; + RECT 38100.0 65000.0 38700.0 65600.0 ; + RECT 41300.00000000001 65000.0 41900.00000000001 65600.0 ; + RECT 38100.0 65300.000000000015 38700.0 77500.0 ; + RECT 38400.00000000001 65000.0 41600.0 65600.0 ; + RECT 41300.00000000001 61700.0 41900.00000000001 65300.000000000015 ; + RECT 38000.0 77500.0 38800.00000000001 78300.00000000001 ; + RECT 41200.0 77500.0 42000.0 78300.00000000001 ; + RECT 41200.0 60900.0 42000.0 61700.0 ; + RECT 41200.0 64900.00000000001 42000.0 65700.0 ; + RECT 38100.0 95100.0 38700.0 94500.0 ; + RECT 39700.0 95100.0 40300.00000000001 94500.0 ; + RECT 38100.0 94800.00000000001 38700.0 81699.99999999999 ; + RECT 38400.00000000001 95100.0 40000.0 94500.0 ; + RECT 39700.0 97500.0 40300.00000000001 94800.00000000001 ; + RECT 38000.0 81699.99999999999 38800.00000000001 80900.0 ; + RECT 39600.0 98300.00000000001 40400.00000000001 97500.0 ; + RECT 40400.00000000001 95199.99999999999 39600.0 94400.0 ; + RECT 22700.000000000004 131400.0 23300.000000000004 132000.0 ; + RECT 22700.000000000004 131700.00000000003 23300.000000000004 133700.00000000003 ; + RECT 16800.0 131400.0 23000.0 132000.0 ; + RECT 15700.000000000002 122400.0 16300.0 123000.0 ; + RECT 29700.000000000004 122400.0 30300.000000000004 123000.0 ; + RECT 15700.000000000002 122700.00000000001 16300.0 129500.0 ; + RECT 16000.0 122400.0 30000.0 123000.0 ; + RECT 29700.000000000004 122700.00000000001 30300.000000000004 124100.00000000003 ; + RECT 3300.0000000000005 142600.00000000003 3900.0000000000005 143200.00000000003 ; + RECT 1700.0000000000002 142600.00000000003 2300.0000000000005 143200.00000000003 ; + RECT 3300.0000000000005 138100.00000000003 3900.0000000000005 142900.0 ; + RECT 2000.0 142600.00000000003 3600.0 143200.00000000003 ; + RECT 1700.0000000000002 142900.0 2300.0000000000005 147700.00000000003 ; + RECT 3300.0000000000005 151800.0 3900.0000000000005 152400.0 ; + RECT 1700.0000000000002 151800.0 2300.0000000000005 152400.0 ; + RECT 3300.0000000000005 147700.00000000003 3900.0000000000005 152100.0 ; + RECT 2000.0 151800.0 3600.0 152400.0 ; + RECT 1700.0000000000002 152100.0 2300.0000000000005 156500.00000000003 ; + RECT 3300.0000000000005 161000.0 3900.0000000000005 161600.0 ; + RECT 1700.0000000000002 161000.0 2300.0000000000005 161600.0 ; + RECT 3300.0000000000005 156500.0 3900.0000000000005 161300.0 ; + RECT 2000.0 161000.0 3600.0 161600.0 ; + RECT 1700.0000000000002 161300.0 2300.0000000000005 166100.0 ; + RECT 22700.000000000004 165800.0 23300.000000000004 166400.0 ; + RECT 21200.000000000004 165800.0 23000.000000000004 166400.0 ; + RECT 22700.000000000004 133700.00000000003 23300.000000000004 166100.0 ; + RECT 8000.0 137700.00000000003 8800.0 138500.0 ; + RECT 8000.0 137700.00000000003 8800.0 138500.0 ; + RECT 14400.0 137700.00000000003 15200.000000000002 138500.0 ; + RECT 14400.0 137700.00000000003 15200.000000000002 138500.0 ; + RECT 20800.0 137700.00000000003 21600.0 138500.0 ; + RECT 20800.0 137700.00000000003 21600.0 138500.0 ; + RECT 1600.0 137700.00000000003 2400.0000000000005 138500.0 ; + RECT 3200.0 137700.00000000003 4000.0 138500.0 ; + RECT 3200.0 137700.00000000003 4000.0 138500.0 ; + RECT 8000.0 147300.0 8800.0 148100.0 ; + RECT 8000.0 147300.0 8800.0 148100.0 ; + RECT 14400.0 147300.0 15200.000000000002 148100.0 ; + RECT 14400.0 147300.0 15200.000000000002 148100.0 ; + RECT 20800.0 147300.0 21600.0 148100.0 ; + RECT 20800.0 147300.0 21600.0 148100.0 ; + RECT 1600.0 147300.0 2400.0000000000005 148100.0 ; + RECT 3200.0 147300.0 4000.0 148100.0 ; + RECT 3200.0 147300.0 4000.0 148100.0 ; + RECT 8000.0 156100.0 8800.0 156900.0 ; + RECT 8000.0 156100.0 8800.0 156900.0 ; + RECT 14400.0 156100.0 15200.000000000002 156900.0 ; + RECT 14400.0 156100.0 15200.000000000002 156900.0 ; + RECT 20800.0 156100.0 21600.0 156900.0 ; + RECT 20800.0 156100.0 21600.0 156900.0 ; + RECT 1600.0 156100.0 2400.0000000000005 156900.0 ; + RECT 3200.0 156100.0 4000.0 156900.0 ; + RECT 3200.0 156100.0 4000.0 156900.0 ; + RECT 8000.0 165700.00000000003 8800.0 166500.0 ; + RECT 8000.0 165700.00000000003 8800.0 166500.0 ; + RECT 14400.0 165700.00000000003 15200.000000000002 166500.0 ; + RECT 14400.0 165700.00000000003 15200.000000000002 166500.0 ; + RECT 20800.0 165700.00000000003 21600.0 166500.0 ; + RECT 20800.0 165700.00000000003 21600.0 166500.0 ; + RECT 1600.0 165700.00000000003 2400.0000000000005 166500.0 ; + RECT 3200.0 165700.00000000003 4000.0 166500.0 ; + RECT 3200.0 165700.00000000003 4000.0 166500.0 ; + RECT 13200.000000000002 142500.0 12400.0 143300.0 ; + RECT 13200.000000000002 142500.0 12400.0 143300.0 ; + RECT 13200.000000000002 133300.0 12400.0 134100.00000000003 ; + RECT 13200.000000000002 133300.0 12400.0 134100.00000000003 ; + RECT 19600.0 142500.0 18800.0 143300.0 ; + RECT 19600.0 142500.0 18800.0 143300.0 ; + RECT 19600.0 133300.0 18800.0 134100.00000000003 ; + RECT 19600.0 133300.0 18800.0 134100.00000000003 ; + RECT 13200.000000000002 160900.0 12400.0 161700.00000000003 ; + RECT 13200.000000000002 160900.0 12400.0 161700.00000000003 ; + RECT 13200.000000000002 151700.00000000003 12400.0 152500.0 ; + RECT 13200.000000000002 151700.00000000003 12400.0 152500.0 ; + RECT 19600.0 160900.0 18800.0 161700.00000000003 ; + RECT 19600.0 160900.0 18800.0 161700.00000000003 ; + RECT 19600.0 151700.00000000003 18800.0 152500.0 ; + RECT 19600.0 151700.00000000003 18800.0 152500.0 ; + RECT 13200.000000000002 170100.0 12400.0 170900.0 ; + RECT 13200.000000000002 170100.0 12400.0 170900.0 ; + RECT 19600.0 170100.0 18800.0 170900.0 ; + RECT 19600.0 170100.0 18800.0 170900.0 ; + RECT 1600.0 137700.00000000003 2400.0000000000005 138500.0 ; + RECT 20800.0 165700.00000000003 21600.0 166500.0 ; + RECT 1600.0 133700.00000000003 2200.0 138100.00000000003 ; + RECT 22700.000000000004 133700.00000000003 23300.0 166100.0 ; + RECT 28400.000000000004 133700.00000000003 35200.0 124500.0 ; + RECT 28400.000000000004 133700.00000000003 35200.0 142900.0 ; + RECT 28400.000000000004 152100.0 35200.0 142900.0 ; + RECT 28400.000000000004 152100.0 35200.0 161300.0 ; + RECT 28400.000000000004 170500.00000000003 35200.0 161300.0 ; + RECT 28400.000000000004 170500.00000000003 35200.0 179700.00000000003 ; + RECT 28400.000000000004 188900.0 35200.0 179700.00000000003 ; + RECT 28400.000000000004 188900.0 35200.0 198100.0 ; + RECT 28400.000000000004 207300.0 35200.0 198100.0 ; + RECT 31400.000000000004 142500.0 32200.000000000004 143300.0 ; + RECT 31400.000000000004 142500.0 32200.000000000004 143300.0 ; + RECT 31400.000000000004 160900.0 32200.000000000004 161700.00000000003 ; + RECT 31400.000000000004 160900.0 32200.000000000004 161700.00000000003 ; + RECT 31400.000000000004 179300.0 32200.000000000004 180100.0 ; + RECT 31400.000000000004 179300.0 32200.000000000004 180100.0 ; + RECT 31400.000000000004 197700.00000000003 32200.000000000004 198500.0 ; + RECT 31400.000000000004 197700.00000000003 32200.000000000004 198500.0 ; + RECT 28000.000000000004 137900.0 28800.0 138700.00000000003 ; + RECT 34800.00000000001 137900.0 35600.0 138700.00000000003 ; + RECT 28000.000000000004 147100.00000000003 28800.0 147900.0 ; + RECT 34800.00000000001 147100.00000000003 35600.0 147900.0 ; + RECT 28000.000000000004 156300.0 28800.0 157100.0 ; + RECT 34800.00000000001 156300.0 35600.0 157100.0 ; + RECT 28000.000000000004 165500.0 28800.0 166300.0 ; + RECT 34800.00000000001 165500.0 35600.0 166300.0 ; + RECT 28000.000000000004 174700.00000000003 28800.0 175500.0 ; + RECT 34800.00000000001 174700.00000000003 35600.0 175500.0 ; + RECT 28000.000000000004 183900.0 28800.0 184700.00000000003 ; + RECT 34800.00000000001 183900.0 35600.0 184700.00000000003 ; + RECT 28000.000000000004 193100.0 28800.0 193900.0 ; + RECT 34800.00000000001 193100.0 35600.0 193900.0 ; + RECT 28000.000000000004 202300.0 28800.0 203100.0 ; + RECT 34800.00000000001 202300.0 35600.0 203100.0 ; + RECT 29600.0 133300.0 30400.000000000004 208700.00000000003 ; + RECT 33200.0 134100.00000000003 34000.0 209500.0 ; + RECT 6800.000000000001 124100.00000000003 6000.000000000001 124900.0 ; + RECT 6800.000000000001 124100.00000000003 6000.000000000001 124900.0 ; + RECT 31400.000000000004 122700.00000000001 32200.000000000004 123500.0 ; + RECT 31400.000000000004 122700.00000000001 32200.000000000004 123500.0 ; + RECT 28800.0 128700.00000000001 28000.0 129500.0 ; + RECT 28800.0 128700.00000000001 28000.0 129500.0 ; + RECT 35600.0 128700.00000000001 34800.00000000001 129500.0 ; + RECT 35600.0 128700.00000000001 34800.00000000001 129500.0 ; + RECT 37200.0 134700.00000000003 36400.00000000001 135500.0 ; + RECT 37200.0 134700.00000000003 36400.00000000001 135500.0 ; + RECT 37200.0 150300.0 36400.00000000001 151100.0 ; + RECT 37200.0 150300.0 36400.00000000001 151100.0 ; + RECT 37200.0 153100.0 36400.00000000001 153900.0 ; + RECT 37200.0 153100.0 36400.00000000001 153900.0 ; + RECT 37200.0 168700.00000000003 36400.00000000001 169500.0 ; + RECT 37200.0 168700.00000000003 36400.00000000001 169500.0 ; + RECT 37200.0 171500.0 36400.00000000001 172300.0 ; + RECT 37200.0 171500.0 36400.00000000001 172300.0 ; + RECT 37200.0 187100.0 36400.00000000001 187900.0 ; + RECT 37200.0 187100.0 36400.00000000001 187900.0 ; + RECT 37200.0 189900.0 36400.00000000001 190700.00000000003 ; + RECT 37200.0 189900.0 36400.00000000001 190700.00000000003 ; + RECT 37200.0 205500.0 36400.00000000001 206299.99999999997 ; + RECT 37200.0 205500.0 36400.00000000001 206299.99999999997 ; + RECT 16400.000000000004 131300.0 17200.000000000004 132100.00000000003 ; + RECT 17200.000000000004 129100.00000000003 18000.000000000004 129900.0 ; + RECT 17200.000000000004 129100.00000000003 18000.000000000004 129900.0 ; + RECT 15600.000000000002 129100.00000000003 16400.000000000004 129900.0 ; + RECT 8800.0 128900.0 9600.000000000002 129700.00000000001 ; + RECT 1600.0000000000014 124500.0 2199.999999999999 133700.00000000003 ; + RECT 8900.000000000002 124500.0 9500.0 129300.00000000001 ; + RECT 33100.0 28800.000000000004 32300.000000000004 29600.0 ; + RECT 25000.0 28800.000000000004 25800.0 29600.0 ; + RECT 31700.000000000004 49600.0 30900.000000000004 50400.00000000001 ; + RECT 25000.0 49600.0 25800.0 50400.00000000001 ; + RECT 3500.0 62000.00000000001 2700.0 62800.00000000001 ; + RECT 28900.000000000004 62000.00000000001 28100.0 62800.00000000001 ; + RECT 30300.0 64900.00000000001 29500.0 65700.0 ; + RECT 33100.0 63600.0 32300.000000000004 64400.00000000001 ; + RECT 31700.000000000004 62300.00000000001 30900.000000000004 63100.0 ; + RECT 30300.0 94400.0 29500.0 95199.99999999999 ; + RECT 33100.0 95800.00000000001 32300.000000000004 96600.0 ; + RECT 2300.0000000000005 89400.0 1500.0000000000002 90199.99999999999 ; + RECT 48800.00000000001 89400.0 48000.00000000001 90199.99999999999 ; + RECT 48800.00000000001 89400.0 48000.00000000001 90199.99999999999 ; + RECT 9600.000000000002 108400.0 8800.0 109200.00000000001 ; + RECT 28900.000000000004 50000.0 28100.0 50800.00000000001 ; + RECT 51200.0 50000.0 52000.0 50800.00000000001 ; + RECT 30300.0 28400.000000000004 29500.0 29200.000000000004 ; + RECT 51200.0 28400.000000000004 52000.0 29200.000000000004 ; + RECT 70000.0 39200.0 69200.0 40000.0 ; + RECT 70000.0 39200.0 69200.0 40000.0 ; + RECT 70000.0 59200.0 69200.0 60000.0 ; + RECT 70000.0 59200.0 69200.0 60000.0 ; + RECT 70000.0 19200.000000000004 69200.0 20000.0 ; + RECT 70000.0 19200.000000000004 69200.0 20000.0 ; + RECT 70000.0 79200.0 69200.0 80000.0 ; + RECT 70000.0 79200.0 69200.0 80000.0 ; + RECT 70000.0 59200.0 69200.0 60000.0 ; + RECT 70000.0 59200.0 69200.0 60000.0 ; + RECT 70000.0 79200.0 69200.0 80000.0 ; + RECT 70000.0 79200.0 69200.0 80000.0 ; + RECT 70000.0 99200.00000000001 69200.0 100000.0 ; + RECT 70000.0 99200.00000000001 69200.0 100000.0 ; + RECT 70000.0 119200.00000000001 69200.0 120000.0 ; + RECT 70000.0 119200.00000000001 69200.0 120000.0 ; + RECT 70000.0 99200.00000000001 69200.0 100000.0 ; + RECT 70000.0 99200.00000000001 69200.0 100000.0 ; + RECT 7600.000000000001 28200.000000000004 8400.0 29000.0 ; + RECT 7600.000000000001 50200.0 8400.0 51000.0 ; + RECT 36900.0 19600.0 37500.0 29100.0 ; + RECT 51999.99999999999 211900.00000000003 52599.99999999999 291900.00000000006 ; + RECT 49199.99999999999 211900.00000000003 71000.0 231900.00000000003 ; + RECT 49199.99999999999 251900.00000000003 71000.0 231900.00000000003 ; + RECT 49199.99999999999 251900.00000000003 71000.0 271900.00000000006 ; + RECT 49199.99999999999 291900.00000000006 71000.0 271900.00000000006 ; + RECT 60500.0 231500.00000000003 59699.99999999999 232300.00000000003 ; + RECT 60500.0 231500.00000000003 59699.99999999999 232300.00000000003 ; + RECT 60500.0 211500.00000000003 59699.99999999999 212300.00000000003 ; + RECT 60500.0 211500.00000000003 59699.99999999999 212300.00000000003 ; + RECT 60500.0 231500.00000000003 59699.99999999999 232300.00000000003 ; + RECT 60500.0 231500.00000000003 59699.99999999999 232300.00000000003 ; + RECT 60500.0 251500.00000000003 59699.99999999999 252300.00000000003 ; + RECT 60500.0 251500.00000000003 59699.99999999999 252300.00000000003 ; + RECT 60500.0 271500.00000000006 59699.99999999999 272300.0 ; + RECT 60500.0 271500.00000000006 59699.99999999999 272300.0 ; + RECT 60500.0 251500.00000000003 59699.99999999999 252300.00000000003 ; + RECT 60500.0 251500.00000000003 59699.99999999999 252300.00000000003 ; + RECT 60500.0 271500.00000000006 59699.99999999999 272300.0 ; + RECT 60500.0 271500.00000000006 59699.99999999999 272300.0 ; + RECT 60500.0 291500.00000000006 59699.99999999999 292300.00000000006 ; + RECT 60500.0 291500.00000000006 59699.99999999999 292300.00000000006 ; + RECT 51999.99999999999 214900.00000000003 52800.0 215700.00000000006 ; + RECT 56800.0 220500.00000000003 57599.99999999999 221300.00000000003 ; + RECT 56800.0 242500.00000000003 57599.99999999999 243300.00000000003 ; + RECT 56800.0 260500.00000000006 57599.99999999999 261300.00000000006 ; + RECT 56800.0 282500.00000000006 57599.99999999999 283300.00000000006 ; + RECT 68000.0 221300.00000000003 68800.0 222100.00000000003 ; + RECT 68000.0 241700.00000000006 68800.0 242500.00000000003 ; + RECT 68000.0 261300.00000000006 68800.0 262100.00000000003 ; + RECT 68000.0 281700.00000000006 68800.0 282500.00000000006 ; + RECT 181400.00000000003 0.0 182000.00000000003 20000.0 ; + RECT 203200.00000000003 0.0 203800.0 20000.0 ; + RECT 178600.00000000003 0.0 200400.00000000003 20000.0 ; + RECT 200400.00000000003 0.0 222200.00000000003 20000.0 ; + RECT 189900.00000000003 19600.0 189100.00000000003 20400.000000000004 ; + RECT 189900.00000000003 19600.0 189100.00000000003 20400.000000000004 ; + RECT 189900.00000000003 -400.0 189100.00000000003 400.0 ; + RECT 189900.00000000003 -400.0 189100.00000000003 400.0 ; + RECT 211700.00000000003 19600.0 210900.00000000003 20400.000000000004 ; + RECT 211700.00000000003 19600.0 210900.00000000003 20400.000000000004 ; + RECT 211700.00000000003 -400.0 210900.00000000003 400.0 ; + RECT 211700.00000000003 -400.0 210900.00000000003 400.0 ; + RECT 181400.00000000003 3000.0 182200.00000000003 3800.0 ; + RECT 203200.00000000003 3000.0 204000.00000000003 3800.0 ; + RECT 186200.00000000003 8600.0 187000.00000000003 9400.0 ; + RECT 208000.00000000003 8600.0 208800.0 9400.0 ; + RECT 197400.00000000003 9400.0 198200.00000000003 10200.000000000002 ; + RECT 219200.00000000003 9400.0 220000.00000000003 10200.000000000002 ; + RECT 173100.00000000003 3000.0 172300.0 3800.0 ; + RECT 72800.0 214900.00000000003 72000.0 215700.00000000006 ; + RECT 72800.0 50000.0 72000.0 50800.0 ; + RECT 177300.0 108400.0 176500.0 109200.0 ; + RECT 71399.99999999999 108400.0 70600.0 109200.0 ; + RECT 71399.99999999999 108400.0 70600.0 109200.0 ; + RECT 175900.0 68400.0 175100.0 69200.0 ; + RECT 71399.99999999999 68400.0 70600.0 69200.0 ; + RECT 71399.99999999999 68400.0 70600.0 69200.0 ; + RECT 174500.0 28400.000000000004 173700.0 29200.000000000004 ; + RECT 71399.99999999999 28400.000000000004 70600.0 29200.000000000004 ; + RECT 71399.99999999999 28400.000000000004 70600.0 29200.000000000004 ; + RECT 173100.00000000003 50000.0 172300.0 50800.0 ; + RECT 71399.99999999999 50000.0 70600.0 50800.0 ; + RECT 71399.99999999999 50000.0 70600.0 50800.0 ; + RECT 74600.0 221300.0 73800.0 222100.00000000003 ; + RECT 68800.0 221300.0 68000.0 222100.00000000003 ; + RECT 76000.0 241700.0 75200.0 242500.0 ; + RECT 68800.0 241700.0 68000.0 242500.0 ; + RECT 77399.99999999999 261300.0 76600.0 262100.00000000003 ; + RECT 68800.0 261300.0 68000.0 262100.00000000003 ; + RECT 78800.0 281700.0 78000.0 282500.0 ; + RECT 68800.0 281700.0 68000.0 282500.0 ; + RECT 182400.0 22400.000000000004 181600.0 23200.000000000004 ; + RECT 198200.0 22400.000000000004 197399.99999999997 23200.000000000004 ; + RECT 189200.0 23800.000000000004 188399.99999999997 24600.000000000004 ; + RECT 220000.0 23800.000000000004 219200.0 24600.000000000004 ; + LAYER metal3 ; + RECT 172700.0 3100.0000000000014 200399.99999999997 3700.0000000000014 ; + RECT 71000.0 215000.0 72400.0 215600.0 ; + RECT 71000.0 50100.00000000001 72400.0 50700.00000000001 ; + RECT 71000.0 108500.00000000001 176900.0 109100.00000000001 ; + RECT 71000.0 68500.0 175500.0 69100.0 ; + RECT 71000.0 28500.000000000004 174100.00000000003 29100.000000000004 ; + RECT 71000.0 50100.00000000001 172700.0 50700.00000000001 ; + RECT 68399.99999999999 221400.00000000003 74199.99999999999 222000.00000000003 ; + RECT 68399.99999999999 241800.0 75600.0 242400.0 ; + RECT 68399.99999999999 261400.00000000003 76999.99999999999 262000.00000000006 ; + RECT 68399.99999999999 281800.0 78399.99999999999 282400.00000000006 ; + RECT 87900.0 131100.0 92100.00000000001 132900.0 ; + RECT 87900.0 147900.0 92100.00000000001 152100.0 ; + RECT 18300.0 159900.0 20100.0 164100.0 ; + RECT 15900.0 128700.00000000001 20100.0 130500.00000000003 ; + RECT 87900.0 167100.00000000003 92100.00000000001 171300.0 ; + RECT 59100.0 229500.0 60900.0 233700.0 ; + RECT 128700.00000000001 167100.00000000003 132900.0 171300.0 ; + RECT 68700.0 37500.0 70500.0 41700.0 ; + RECT 30300.0 121500.0 34500.0 125700.0 ; + RECT 128700.00000000001 186300.0 132900.0 188100.00000000003 ; + RECT 11100.000000000002 140700.00000000003 15300.0 144900.0 ; + RECT 179100.00000000003 111900.0 183300.0 113700.0 ; + RECT 68700.0 119100.00000000001 70500.0 120900.0 ; + RECT 128700.00000000001 131100.0 132900.0 132900.0 ; + RECT 107100.00000000001 186300.0 108900.0 188100.00000000003 ; + RECT 128700.00000000001 241500.0 132900.0 243300.0 ; + RECT 210300.0 18300.0 212100.00000000003 22500.0 ; + RECT -900.0 37500.0 900.0 41700.0 ; + RECT 128700.00000000001 222300.0 132900.0 226500.0 ; + RECT 186300.0 111900.0 190500.0 113700.0 ; + RECT 107100.00000000001 167100.00000000003 108900.0 171300.0 ; + RECT 18300.0 140700.00000000003 20100.0 144900.0 ; + RECT 128700.00000000001 203100.00000000003 132900.0 207300.0 ; + RECT 87900.0 186300.0 92100.00000000001 188100.00000000003 ; + RECT 59100.0 270300.0 60900.0 274500.0 ; + RECT 107100.00000000001 131100.0 108900.0 132900.0 ; + RECT 128700.00000000001 147900.0 132900.0 152100.0 ; + RECT 188700.00000000003 18300.0 190500.00000000003 22500.0 ; + RECT 11100.000000000002 159900.0 15300.0 164100.0 ; + RECT 68700.0 78300.00000000001 70500.0 80100.00000000001 ; + RECT 3900.0000000000005 123900.0 8100.000000000002 125700.0 ; + RECT 128700.00000000001 258300.0 132900.0 262500.0 ; + RECT 107100.00000000001 147900.0 108900.0 152100.0 ; + RECT 162300.0 241500.0 166500.0 243300.0 ; + RECT 186300.0 186300.0 190500.0 188100.00000000003 ; + RECT 183900.0 80700.0 185700.00000000003 82500.0 ; + RECT 30300.0 179100.00000000003 34500.0 180900.00000000003 ; + RECT 181500.0 203100.00000000003 183300.0 207300.0 ; + RECT 186300.0 131100.0 190500.0 132900.0 ; + RECT 152700.00000000003 203100.00000000003 156900.0 207300.0 ; + RECT 152700.00000000003 258300.0 156900.0 262500.0 ; + RECT 152700.00000000003 167100.00000000003 156900.0 171300.0 ; + RECT 181500.0 222300.0 183300.0 224100.00000000003 ; + RECT 181500.0 147900.0 183300.0 152100.0 ; + RECT 162300.0 203100.00000000003 166500.0 207300.0 ; + RECT 30300.0 140700.00000000003 34500.0 144900.0 ; + RECT 162300.0 186300.0 166500.0 188100.00000000003 ; + RECT 181500.0 30300.0 183300.0 32100.0 ; + RECT 186300.0 47100.0 190500.0 48900.0 ; + RECT 162300.0 147900.0 166500.0 152100.0 ; + RECT 162300.0 167100.00000000003 166500.0 171300.0 ; + RECT 188700.00000000003 30300.0 190500.00000000003 32100.0 ; + RECT 186300.0 167100.00000000003 190500.0 168900.00000000003 ; + RECT 152700.00000000003 131100.0 156900.0 132900.0 ; + RECT 30300.0 195900.0 34500.0 200100.0 ; + RECT 181500.0 47100.0 183300.0 48900.0 ; + RECT 152700.00000000003 241500.0 156900.0 243300.0 ; + RECT 30300.0 159900.0 34500.0 164100.0 ; + RECT 181500.0 131100.0 183300.0 132900.0 ; + RECT 162300.0 131100.0 166500.0 132900.0 ; + RECT 162300.0 222300.0 166500.0 226500.0 ; + RECT 186300.0 147900.0 190500.0 152100.0 ; + RECT 188700.00000000003 80700.0 192900.0 82500.0 ; + RECT 186300.0 241500.0 190500.0 243300.0 ; + RECT 186300.0 203100.00000000003 190500.0 207300.0 ; + RECT 181500.0 258300.0 183300.0 262500.0 ; + RECT 186300.0 258300.0 190500.0 262500.0 ; + RECT 181500.0 241500.0 183300.0 243300.0 ; + RECT 152700.00000000003 186300.0 156900.0 188100.00000000003 ; + RECT 152700.00000000003 222300.0 156900.0 226500.0 ; + RECT 181500.0 167100.00000000003 183300.0 168900.00000000003 ; + RECT 186300.0 222300.0 190500.0 224100.00000000003 ; + RECT 181500.0 186300.0 183300.0 188100.00000000003 ; + RECT 162300.0 258300.0 166500.0 262500.0 ; + RECT 152700.00000000003 147900.0 156900.0 152100.0 ; + RECT 87900.0 140700.00000000003 92100.00000000001 142500.00000000003 ; + RECT 59100.0 251100.00000000003 60900.0 252900.00000000003 ; + RECT 107100.00000000001 140700.00000000003 108900.0 142500.00000000003 ; + RECT 87900.0 195900.0 92100.00000000001 197700.00000000003 ; + RECT 27900.000000000004 128700.00000000001 29700.000000000004 130500.00000000003 ; + RECT 188700.00000000003 -900.0 190500.00000000003 900.0 ; + RECT 59100.0 210300.0 60900.0 212100.00000000003 ; + RECT 87900.0 176700.00000000003 92100.00000000001 178500.00000000003 ; + RECT 128700.00000000001 195900.0 132900.0 197700.00000000003 ; + RECT 107100.00000000001 176700.00000000003 108900.0 178500.00000000003 ; + RECT 59100.0 289500.0 60900.0 293700.0 ; + RECT 128700.00000000001 157500.0 132900.0 161700.0 ; + RECT 68700.0 18300.0 70500.0 20100.0 ; + RECT 18300.0 150300.0 20100.0 154500.0 ; + RECT 128700.00000000001 212700.00000000003 132900.0 216900.0 ; + RECT 11100.000000000002 131100.0 15300.0 135299.99999999997 ; + RECT 32700.000000000004 128700.00000000001 36900.00000000001 130500.00000000003 ; + RECT 128700.00000000001 121500.0 132900.0 123300.0 ; + RECT 11100.000000000002 169500.0 15300.0 171300.0 ; + RECT 87900.0 157500.0 92100.00000000001 161700.0 ; + RECT 18300.0 131100.0 20100.0 135299.99999999997 ; + RECT 18300.0 169500.0 20100.0 171300.0 ; + RECT 11100.000000000002 150300.0 15300.0 154500.0 ; + RECT 210300.0 -900.0 212100.00000000003 900.0 ; + RECT 107100.00000000001 157500.0 108900.0 161700.0 ; + RECT 68700.0 97500.0 70500.0 101700.0 ; + RECT -900.0 18300.0 900.0 20100.0 ; + RECT 68700.0 59100.0 70500.0 60900.0 ; + RECT 107100.00000000001 195900.0 108900.0 197700.00000000003 ; + RECT 128700.00000000001 176700.00000000003 132900.0 178500.00000000003 ; + RECT 87900.0 121500.0 92100.00000000001 123300.0 ; + RECT 128700.00000000001 267900.00000000006 132900.0 272100.0 ; + RECT 128700.00000000001 140700.00000000003 132900.0 142500.00000000003 ; + RECT 107100.00000000001 121500.0 108900.0 123300.0 ; + RECT -900.0 59100.0 900.0 60900.0 ; + RECT 128700.00000000001 251100.00000000003 132900.0 252900.00000000003 ; + RECT 128700.00000000001 231900.0 132900.0 233700.00000000003 ; + RECT 191100.00000000003 198300.0 192900.00000000003 202500.0 ; + RECT 183900.0 236700.00000000003 188100.0 238500.00000000003 ; + RECT 191100.00000000003 253500.0 192900.00000000003 257700.0 ; + RECT 183900.0 207900.0 188100.0 212100.0 ; + RECT 176700.00000000003 171900.0 180900.0 173700.00000000003 ; + RECT 191100.00000000003 236700.00000000003 192900.00000000003 238500.00000000003 ; + RECT 162300.0 231900.0 166500.0 233700.00000000003 ; + RECT 183900.0 198300.0 188100.0 202500.0 ; + RECT 191100.00000000003 263100.0 192900.00000000003 267300.0 ; + RECT 176700.00000000003 152700.00000000003 180900.0 156900.0 ; + RECT 183900.0 263100.0 188100.0 267300.0 ; + RECT 183900.0 143100.0 188100.0 147299.99999999997 ; + RECT 176700.00000000003 243900.0 180900.0 248100.0 ; + RECT 183900.0 227100.00000000003 188100.0 228900.00000000003 ; + RECT 176700.00000000003 227100.00000000003 180900.0 228900.00000000003 ; + RECT 183900.0 133500.0 188100.0 137700.0 ; + RECT 162300.0 195900.0 166500.0 197700.00000000003 ; + RECT 191100.00000000003 227100.00000000003 192900.00000000003 228900.00000000003 ; + RECT 183900.0 243900.0 188100.0 248100.0 ; + RECT 188700.00000000003 54300.00000000001 192900.0 56100.0 ; + RECT 191100.00000000003 188700.00000000003 192900.00000000003 192900.0 ; + RECT 191100.00000000003 143100.0 192900.00000000003 147299.99999999997 ; + RECT 152700.00000000003 140700.00000000003 156900.0 142500.00000000003 ; + RECT 27900.000000000004 155100.00000000003 29700.000000000004 159300.0 ; + RECT 191100.00000000003 162300.0 192900.00000000003 166500.0 ; + RECT 176700.00000000003 236700.00000000003 180900.0 238500.00000000003 ; + RECT 176700.00000000003 253500.0 180900.0 257700.0 ; + RECT 162300.0 157500.0 166500.0 161700.0 ; + RECT 162300.0 251100.00000000003 166500.0 252900.00000000003 ; + RECT 152700.00000000003 267900.00000000006 156900.0 272100.0 ; + RECT 176700.00000000003 207900.0 180900.0 212100.0 ; + RECT 191100.00000000003 92700.0 192900.00000000003 96900.0 ; + RECT 152700.00000000003 176700.00000000003 156900.0 178500.00000000003 ; + RECT 176700.00000000003 126300.00000000001 180900.0 128100.00000000003 ; + RECT 176700.00000000003 162300.0 180900.0 166500.0 ; + RECT 176700.00000000003 217500.0 180900.0 221700.0 ; + RECT 191100.00000000003 181500.0 192900.00000000003 183300.0 ; + RECT 183900.0 217500.0 188100.0 221700.0 ; + RECT 27900.000000000004 145500.0 29700.000000000004 149700.0 ; + RECT 191100.00000000003 126300.00000000001 192900.00000000003 128100.00000000003 ; + RECT 152700.00000000003 251100.00000000003 156900.0 252900.00000000003 ; + RECT 191100.00000000003 133500.0 192900.00000000003 137700.0 ; + RECT 176700.00000000003 133500.0 180900.0 137700.0 ; + RECT 176700.00000000003 181500.0 180900.0 183300.0 ; + RECT 162300.0 176700.00000000003 166500.0 178500.00000000003 ; + RECT 191100.00000000003 207900.0 192900.00000000003 212100.0 ; + RECT 162300.0 212700.00000000003 166500.0 216900.0 ; + RECT 183900.0 253500.0 188100.0 257700.0 ; + RECT 162300.0 121500.0 166500.0 123300.0 ; + RECT 176700.00000000003 188700.00000000003 180900.0 192900.0 ; + RECT 183900.0 126300.00000000001 188100.0 128100.00000000003 ; + RECT 183900.0 181500.0 188100.0 183300.0 ; + RECT 152700.00000000003 121500.0 156900.0 123300.0 ; + RECT 176700.00000000003 263100.0 180900.0 267300.0 ; + RECT 152700.00000000003 231900.0 156900.0 233700.00000000003 ; + RECT 27900.000000000004 164700.00000000003 29700.000000000004 166500.00000000003 ; + RECT 162300.0 140700.00000000003 166500.0 142500.00000000003 ; + RECT 191100.00000000003 243900.0 192900.00000000003 248100.0 ; + RECT 191100.00000000003 152700.00000000003 192900.00000000003 156900.0 ; + RECT 27900.000000000004 200700.00000000003 29700.000000000004 204900.0 ; + RECT 176700.00000000003 198300.0 180900.0 202500.0 ; + RECT 191100.00000000003 171900.0 192900.00000000003 173700.00000000003 ; + RECT 27900.000000000004 135900.0 29700.000000000004 140100.0 ; + RECT 152700.00000000003 157500.0 156900.0 161700.0 ; + RECT 152700.00000000003 212700.00000000003 156900.0 216900.0 ; + RECT 183900.0 152700.00000000003 188100.0 156900.0 ; + RECT 27900.000000000004 174300.0 29700.000000000004 176100.00000000003 ; + RECT 183900.0 162300.0 188100.0 166500.0 ; + RECT 176700.00000000003 143100.0 180900.0 147299.99999999997 ; + RECT 183900.0 188700.00000000003 188100.0 192900.0 ; + RECT 27900.000000000004 181500.0 29700.000000000004 185700.0 ; + RECT 191100.00000000003 217500.0 192900.00000000003 221700.0 ; + RECT 27900.000000000004 191100.00000000003 29700.000000000004 195300.0 ; + RECT 181500.0 54300.00000000001 185700.0 56100.0 ; + RECT 162300.0 267900.00000000006 166500.0 272100.0 ; + RECT 183900.0 171900.0 188100.0 173700.00000000003 ; + RECT 183900.0 92700.0 188100.0 96900.0 ; + RECT 152700.00000000003 195900.0 156900.0 197700.00000000003 ; + RECT 35100.0 205500.0 39300.00000000001 207300.0 ; + RECT 35100.0 200700.00000000003 36900.0 207300.0 ; + RECT 32700.000000000004 200700.00000000003 36900.00000000001 204900.0 ; + RECT 35100.0 133500.0 36900.0 140100.0 ; + RECT 35100.0 133500.0 39300.00000000001 137700.0 ; + RECT 32700.000000000004 135900.0 36900.00000000001 140100.0 ; + RECT 32700.000000000004 135900.0 39300.00000000001 137700.00000000003 ; + RECT 188700.00000000003 35100.0 190500.00000000003 44100.0 ; + RECT 188700.00000000003 39900.00000000001 192900.0 44100.00000000001 ; + RECT 181500.0 35100.0 183300.0 44100.0 ; + RECT 181500.0 39900.00000000001 185700.0 44100.00000000001 ; + RECT 32700.000000000004 174300.0 36900.00000000001 176100.00000000003 ; + RECT 32700.000000000004 164700.00000000003 36900.00000000001 166500.00000000003 ; + RECT 35100.0 167100.00000000003 39300.00000000001 173700.00000000003 ; + RECT 35100.0 164700.00000000003 36900.0 176100.00000000003 ; + RECT 35100.0 186300.0 39300.00000000001 192900.0 ; + RECT 32700.000000000004 191100.00000000003 36900.00000000001 195300.0 ; + RECT 32700.000000000004 191100.00000000003 39300.00000000001 192900.00000000003 ; + RECT 35100.0 181500.0 36900.0 195300.0 ; + RECT 32700.000000000004 181500.0 36900.00000000001 185700.0 ; + RECT 35100.0 145500.0 36900.0 159300.0 ; + RECT 32700.000000000004 155100.00000000003 36900.00000000001 159300.0 ; + RECT 32700.000000000004 145500.0 36900.00000000001 149700.0 ; + RECT 35100.0 147900.0 39300.00000000001 154500.0 ; + RECT 32700.000000000004 147900.0 39300.00000000001 149700.00000000003 ; + RECT 15900.0 159900.0 17700.0 161700.00000000003 ; + RECT 16800.0 159900.0 19200.000000000004 161700.00000000003 ; + RECT 18300.0 159900.0 20100.0 161700.00000000003 ; + RECT 15900.0 128700.00000000001 17700.0 130500.00000000003 ; + RECT 59100.0 227100.00000000003 60900.0 228900.00000000003 ; + RECT 59100.0 228000.0 60900.0 230400.0 ; + RECT 59100.0 229500.0 60900.0 231300.0 ; + RECT 59100.0 227100.00000000003 60900.0 228900.00000000003 ; + RECT 68700.0 35100.0 70500.0 36900.0 ; + RECT 68700.0 36000.0 70500.0 38400.0 ; + RECT 68700.0 37500.0 70500.0 39300.0 ; + RECT 68700.0 35100.0 70500.0 36900.0 ; + RECT 13500.0 140700.00000000003 15300.0 142500.00000000003 ; + RECT 104700.0 186300.0 106500.0 188100.00000000003 ; + RECT 105600.00000000001 186300.0 108000.00000000001 188100.00000000003 ; + RECT 107100.00000000001 186300.0 108900.0 188100.00000000003 ; + RECT 104700.0 186300.0 106500.0 188100.00000000003 ; + RECT 131100.0 243900.0 132900.0 245700.00000000003 ; + RECT 131100.0 242400.0 132900.0 244800.0 ; + RECT 131100.0 241500.0 132900.0 243300.0 ; + RECT 131100.0 243900.0 132900.0 245700.00000000003 ; + RECT 210300.0 23100.0 212100.00000000003 24900.000000000004 ; + RECT 210300.0 21600.0 212100.00000000003 24000.0 ; + RECT 210300.0 20700.000000000004 212100.00000000003 22500.000000000004 ; + RECT 210300.0 23100.0 212100.00000000003 24900.000000000004 ; + RECT -900.0 42300.00000000001 900.0 44100.0 ; + RECT -900.0 40800.00000000001 900.0 43200.0 ; + RECT -900.0 39900.00000000001 900.0 41700.0 ; + RECT -900.0 42300.00000000001 900.0 44100.0 ; + RECT 104700.0 167100.00000000003 106500.0 168900.00000000003 ; + RECT 105600.00000000001 167100.00000000003 108000.00000000001 168900.00000000003 ; + RECT 107100.00000000001 167100.00000000003 108900.0 168900.00000000003 ; + RECT 104700.0 167100.00000000003 106500.0 168900.00000000003 ; + RECT 15900.0 140700.00000000003 17700.0 142500.00000000003 ; + RECT 16800.0 140700.00000000003 19200.000000000004 142500.00000000003 ; + RECT 18300.0 140700.00000000003 20100.0 142500.00000000003 ; + RECT 104700.0 131100.0 106500.0 132900.0 ; + RECT 105600.00000000001 131100.0 108000.00000000001 132900.0 ; + RECT 107100.00000000001 131100.0 108900.0 132900.0 ; + RECT 104700.0 131100.0 106500.0 132900.0 ; + RECT 188700.00000000003 15900.0 190500.00000000003 17700.0 ; + RECT 188700.00000000003 16800.0 190500.00000000003 19200.000000000004 ; + RECT 188700.00000000003 18300.0 190500.00000000003 20100.0 ; + RECT 188700.00000000003 15900.0 190500.00000000003 17700.0 ; + RECT 13500.0 159900.0 15300.0 161700.00000000003 ; + RECT 68700.0 80700.0 70500.0 82500.0 ; + RECT 68700.0 79200.0 70500.0 81600.00000000001 ; + RECT 68700.0 78300.00000000001 70500.0 80100.00000000001 ; + RECT 68700.0 80700.0 70500.0 82500.0 ; + RECT 3900.0000000000005 121500.0 5700.0 123300.0 ; + RECT 3900.0000000000005 122400.0 5700.0 124800.00000000001 ; + RECT 3900.0000000000005 123900.0 5700.0 125700.0 ; + RECT 3900.0000000000005 121500.0 5700.0 123300.0 ; + RECT 131100.0 255900.0 132900.0 257700.0 ; + RECT 131100.0 256800.0 132900.0 259200.0 ; + RECT 131100.0 258300.0 132900.0 260100.00000000003 ; + RECT 131100.0 255900.0 132900.0 257700.0 ; + RECT 104700.0 147900.0 106500.0 149700.00000000003 ; + RECT 105600.00000000001 147900.0 108000.00000000001 149700.00000000003 ; + RECT 107100.00000000001 147900.0 108900.0 149700.00000000003 ; + RECT 104700.0 147900.0 106500.0 149700.00000000003 ; + RECT 164700.00000000003 243900.0 166500.00000000003 245700.00000000003 ; + RECT 164700.00000000003 242400.0 166500.00000000003 244800.0 ; + RECT 164700.00000000003 241500.0 166500.00000000003 243300.0 ; + RECT 164700.00000000003 243900.0 166500.00000000003 245700.00000000003 ; + RECT 188700.00000000003 186300.0 190500.00000000003 188100.00000000003 ; + RECT 179100.00000000003 205500.0 180900.00000000003 207300.0 ; + RECT 180000.0 205500.0 182400.0 207300.0 ; + RECT 181500.0 205500.0 183300.0 207300.0 ; + RECT 155100.00000000003 263100.0 156900.00000000003 264900.00000000006 ; + RECT 155100.00000000003 261600.00000000003 156900.00000000003 264000.0 ; + RECT 155100.00000000003 260700.0 156900.00000000003 262500.0 ; + RECT 155100.00000000003 263100.0 156900.00000000003 264900.00000000006 ; + RECT 179100.00000000003 222300.0 180900.00000000003 224100.00000000003 ; + RECT 180000.0 222300.0 182400.0 224100.00000000003 ; + RECT 181500.0 222300.0 183300.0 224100.00000000003 ; + RECT 32700.000000000004 140700.00000000003 34500.0 142500.00000000003 ; + RECT 179100.00000000003 30300.0 180900.00000000003 32100.0 ; + RECT 180000.0 30300.0 182400.0 32100.0 ; + RECT 181500.0 30300.0 183300.0 32100.0 ; + RECT 188700.00000000003 47100.0 190500.00000000003 48900.0 ; + RECT 188700.00000000003 30300.0 190500.00000000003 32100.0 ; + RECT 179100.00000000003 47100.0 180900.00000000003 48900.0 ; + RECT 180000.0 47100.0 182400.0 48900.0 ; + RECT 181500.0 47100.0 183300.0 48900.0 ; + RECT 155100.00000000003 243900.0 156900.00000000003 245700.00000000003 ; + RECT 155100.00000000003 242400.0 156900.00000000003 244800.0 ; + RECT 155100.00000000003 241500.0 156900.00000000003 243300.0 ; + RECT 155100.00000000003 243900.0 156900.00000000003 245700.00000000003 ; + RECT 32700.000000000004 159900.0 34500.0 161700.00000000003 ; + RECT 188700.00000000003 241500.0 190500.00000000003 243300.0 ; + RECT 188700.00000000003 205500.0 190500.00000000003 207300.0 ; + RECT 179100.00000000003 260700.0 180900.00000000003 262500.0 ; + RECT 180000.0 260700.0 182400.0 262500.0 ; + RECT 181500.0 260700.0 183300.0 262500.0 ; + RECT 188700.00000000003 260700.0 190500.00000000003 262500.0 ; + RECT 179100.00000000003 241500.0 180900.00000000003 243300.0 ; + RECT 180000.0 241500.0 182400.0 243300.0 ; + RECT 181500.0 241500.0 183300.0 243300.0 ; + RECT 188700.00000000003 222300.0 190500.00000000003 224100.00000000003 ; + RECT 179100.00000000003 186300.0 180900.00000000003 188100.00000000003 ; + RECT 180000.0 186300.0 182400.0 188100.00000000003 ; + RECT 181500.0 186300.0 183300.0 188100.00000000003 ; + RECT 164700.00000000003 263100.0 166500.00000000003 264900.00000000006 ; + RECT 164700.00000000003 261600.00000000003 166500.00000000003 264000.0 ; + RECT 164700.00000000003 260700.0 166500.00000000003 262500.0 ; + RECT 164700.00000000003 263100.0 166500.00000000003 264900.00000000006 ; + RECT 87900.0 143100.0 89700.0 144900.0 ; + RECT 87900.0 141600.0 89700.0 144000.0 ; + RECT 87900.0 140700.00000000003 89700.0 142500.00000000003 ; + RECT 87900.0 143100.0 89700.0 144900.0 ; + RECT 107100.00000000001 143100.0 108900.0 144900.0 ; + RECT 107100.00000000001 141600.0 108900.0 144000.0 ; + RECT 107100.00000000001 140700.00000000003 108900.0 142500.00000000003 ; + RECT 107100.00000000001 143100.0 108900.0 144900.0 ; + RECT 87900.0 193500.0 89700.0 195300.0 ; + RECT 87900.0 194400.0 89700.0 196800.0 ; + RECT 87900.0 195900.0 89700.0 197700.00000000003 ; + RECT 87900.0 193500.0 89700.0 195300.0 ; + RECT 27900.000000000004 128700.00000000001 29700.000000000004 130500.00000000003 ; + RECT 191100.00000000003 -900.0 192900.00000000003 900.0 ; + RECT 189600.00000000003 -900.0 192000.00000000003 900.0 ; + RECT 188700.00000000003 -900.0 190500.00000000003 900.0 ; + RECT 59100.0 210300.0 60900.0 212100.00000000003 ; + RECT 87900.0 174300.0 89700.0 176100.00000000003 ; + RECT 87900.0 175200.00000000003 89700.0 177600.00000000003 ; + RECT 87900.0 176700.00000000003 89700.0 178500.00000000003 ; + RECT 87900.0 174300.0 89700.0 176100.00000000003 ; + RECT 128700.00000000001 193500.0 130500.00000000003 195300.0 ; + RECT 128700.00000000001 194400.0 130500.00000000003 196800.0 ; + RECT 128700.00000000001 195900.0 130500.00000000003 197700.00000000003 ; + RECT 128700.00000000001 193500.0 130500.00000000003 195300.0 ; + RECT 107100.00000000001 174300.0 108900.0 176100.00000000003 ; + RECT 107100.00000000001 175200.00000000003 108900.0 177600.00000000003 ; + RECT 107100.00000000001 176700.00000000003 108900.0 178500.00000000003 ; + RECT 107100.00000000001 174300.0 108900.0 176100.00000000003 ; + RECT 128700.00000000001 155100.00000000003 130500.00000000003 156900.00000000003 ; + RECT 128700.00000000001 156000.0 130500.00000000003 158400.0 ; + RECT 128700.00000000001 157500.0 130500.00000000003 159300.0 ; + RECT 128700.00000000001 155100.00000000003 130500.00000000003 156900.00000000003 ; + RECT 18300.0 152700.00000000003 20100.0 154500.00000000003 ; + RECT 11100.000000000002 133500.0 12900.000000000002 135300.0 ; + RECT 37500.0 128700.00000000001 39300.0 130500.00000000003 ; + RECT 36000.0 128700.00000000001 38400.0 130500.00000000003 ; + RECT 37500.0 126300.00000000001 39300.0 128100.00000000003 ; + RECT 37500.0 127200.0 39300.0 129600.0 ; + RECT 35100.0 128700.00000000001 36900.0 130500.00000000003 ; + RECT 37500.0 126300.00000000001 39300.0 128100.00000000003 ; + RECT 128700.00000000001 123900.0 130500.00000000003 125700.0 ; + RECT 128700.00000000001 122400.0 130500.00000000003 124800.00000000001 ; + RECT 128700.00000000001 121500.0 130500.00000000003 123300.0 ; + RECT 128700.00000000001 123900.0 130500.00000000003 125700.0 ; + RECT 11100.000000000002 171900.0 12900.000000000002 173700.00000000003 ; + RECT 11100.000000000002 170400.0 12900.000000000002 172800.0 ; + RECT 11100.000000000002 169500.0 12900.000000000002 171300.0 ; + RECT 11100.000000000002 171900.0 12900.000000000002 173700.00000000003 ; + RECT 87900.0 162300.0 89700.0 164100.00000000003 ; + RECT 87900.0 160800.0 89700.0 163200.00000000003 ; + RECT 87900.0 159900.0 89700.0 161700.00000000003 ; + RECT 87900.0 162300.0 89700.0 164100.00000000003 ; + RECT 18300.0 133500.0 20100.0 135300.0 ; + RECT 18300.0 171900.0 20100.0 173700.00000000003 ; + RECT 18300.0 170400.0 20100.0 172800.0 ; + RECT 18300.0 169500.0 20100.0 171300.0 ; + RECT 18300.0 171900.0 20100.0 173700.00000000003 ; + RECT 11100.000000000002 150300.0 12900.000000000002 152100.00000000003 ; + RECT 210300.0 -900.0 212100.00000000003 900.0 ; + RECT 107100.00000000001 155100.00000000003 108900.0 156900.00000000003 ; + RECT 107100.00000000001 156000.0 108900.0 158400.0 ; + RECT 107100.00000000001 157500.0 108900.0 159300.0 ; + RECT 107100.00000000001 155100.00000000003 108900.0 156900.00000000003 ; + RECT 107100.00000000001 193500.0 108900.0 195300.0 ; + RECT 107100.00000000001 194400.0 108900.0 196800.0 ; + RECT 107100.00000000001 195900.0 108900.0 197700.00000000003 ; + RECT 107100.00000000001 193500.0 108900.0 195300.0 ; + RECT 128700.00000000001 174300.0 130500.00000000003 176100.00000000003 ; + RECT 128700.00000000001 175200.00000000003 130500.00000000003 177600.00000000003 ; + RECT 128700.00000000001 176700.00000000003 130500.00000000003 178500.00000000003 ; + RECT 128700.00000000001 174300.0 130500.00000000003 176100.00000000003 ; + RECT 87900.0 123900.0 89700.0 125700.0 ; + RECT 87900.0 122400.0 89700.0 124800.00000000001 ; + RECT 87900.0 121500.0 89700.0 123300.0 ; + RECT 87900.0 123900.0 89700.0 125700.0 ; + RECT 128700.00000000001 143100.0 130500.00000000003 144900.0 ; + RECT 128700.00000000001 141600.0 130500.00000000003 144000.0 ; + RECT 128700.00000000001 140700.00000000003 130500.00000000003 142500.00000000003 ; + RECT 128700.00000000001 143100.0 130500.00000000003 144900.0 ; + RECT 107100.00000000001 123900.0 108900.0 125700.0 ; + RECT 107100.00000000001 122400.0 108900.0 124800.00000000001 ; + RECT 107100.00000000001 121500.0 108900.0 123300.0 ; + RECT 107100.00000000001 123900.0 108900.0 125700.0 ; + RECT 191100.00000000003 198300.0 192900.00000000003 200100.00000000003 ; + RECT 183900.0 236700.00000000003 185700.00000000003 238500.00000000003 ; + RECT 191100.00000000003 255900.0 192900.00000000003 257700.0 ; + RECT 191100.00000000003 236700.00000000003 192900.00000000003 238500.00000000003 ; + RECT 183900.0 200700.00000000003 185700.00000000003 202500.00000000003 ; + RECT 191100.00000000003 267900.00000000006 192900.00000000003 269700.00000000006 ; + RECT 191100.00000000003 266400.00000000006 192900.00000000003 268800.0 ; + RECT 191100.00000000003 265500.0 192900.00000000003 267300.0 ; + RECT 191100.00000000003 267900.00000000006 192900.00000000003 269700.00000000006 ; + RECT 183900.0 263100.0 185700.00000000003 264900.00000000006 ; + RECT 176700.00000000003 248700.00000000003 178500.00000000003 250500.00000000003 ; + RECT 176700.00000000003 247200.00000000003 178500.00000000003 249600.00000000003 ; + RECT 176700.00000000003 246300.0 178500.00000000003 248100.00000000003 ; + RECT 176700.00000000003 248700.00000000003 178500.00000000003 250500.00000000003 ; + RECT 183900.0 229500.0 185700.00000000003 231300.0 ; + RECT 183900.0 228000.0 185700.00000000003 230400.0 ; + RECT 183900.0 227100.00000000003 185700.00000000003 228900.00000000003 ; + RECT 183900.0 229500.0 185700.00000000003 231300.0 ; + RECT 176700.00000000003 229500.0 178500.00000000003 231300.0 ; + RECT 176700.00000000003 228000.0 178500.00000000003 230400.0 ; + RECT 176700.00000000003 227100.00000000003 178500.00000000003 228900.00000000003 ; + RECT 176700.00000000003 229500.0 178500.00000000003 231300.0 ; + RECT 162300.0 193500.0 164100.00000000003 195300.0 ; + RECT 162300.0 194400.0 164100.00000000003 196800.0 ; + RECT 162300.0 195900.0 164100.00000000003 197700.00000000003 ; + RECT 162300.0 193500.0 164100.00000000003 195300.0 ; + RECT 191100.00000000003 229500.0 192900.00000000003 231300.0 ; + RECT 191100.00000000003 228000.0 192900.00000000003 230400.0 ; + RECT 191100.00000000003 227100.00000000003 192900.00000000003 228900.00000000003 ; + RECT 191100.00000000003 229500.0 192900.00000000003 231300.0 ; + RECT 183900.0 248700.00000000003 185700.00000000003 250500.00000000003 ; + RECT 183900.0 247200.00000000003 185700.00000000003 249600.00000000003 ; + RECT 183900.0 246300.0 185700.00000000003 248100.00000000003 ; + RECT 183900.0 248700.00000000003 185700.00000000003 250500.00000000003 ; + RECT 191100.00000000003 56700.0 192900.00000000003 58500.0 ; + RECT 191100.00000000003 55200.0 192900.00000000003 57600.0 ; + RECT 191100.00000000003 54300.00000000001 192900.00000000003 56100.0 ; + RECT 191100.00000000003 56700.0 192900.00000000003 58500.0 ; + RECT 152700.00000000003 143100.0 154500.00000000003 144900.0 ; + RECT 152700.00000000003 141600.0 154500.00000000003 144000.0 ; + RECT 152700.00000000003 140700.00000000003 154500.00000000003 142500.00000000003 ; + RECT 152700.00000000003 143100.0 154500.00000000003 144900.0 ; + RECT 181500.0 236700.00000000003 183300.0 238500.00000000003 ; + RECT 180000.0 236700.00000000003 182400.0 238500.00000000003 ; + RECT 179100.00000000003 236700.00000000003 180900.00000000003 238500.00000000003 ; + RECT 179100.00000000003 251100.00000000003 180900.00000000003 252900.00000000003 ; + RECT 179100.00000000003 252000.0 180900.00000000003 254400.0 ; + RECT 179100.00000000003 253500.0 180900.00000000003 255300.0 ; + RECT 179100.00000000003 251100.00000000003 180900.00000000003 252900.00000000003 ; + RECT 162300.0 155100.00000000003 164100.00000000003 156900.00000000003 ; + RECT 162300.0 156000.0 164100.00000000003 158400.0 ; + RECT 162300.0 157500.0 164100.00000000003 159300.0 ; + RECT 162300.0 155100.00000000003 164100.00000000003 156900.00000000003 ; + RECT 152700.00000000003 174300.0 154500.00000000003 176100.00000000003 ; + RECT 152700.00000000003 175200.00000000003 154500.00000000003 177600.00000000003 ; + RECT 152700.00000000003 176700.00000000003 154500.00000000003 178500.00000000003 ; + RECT 152700.00000000003 174300.0 154500.00000000003 176100.00000000003 ; + RECT 174300.0 219900.0 176100.00000000003 221700.00000000003 ; + RECT 175200.00000000003 219900.0 177600.00000000003 221700.00000000003 ; + RECT 176700.00000000003 219900.0 178500.00000000003 221700.00000000003 ; + RECT 183900.0 219900.0 185700.00000000003 221700.00000000003 ; + RECT 27900.000000000004 147900.0 29700.000000000004 149700.00000000003 ; + RECT 162300.0 174300.0 164100.00000000003 176100.00000000003 ; + RECT 162300.0 175200.00000000003 164100.00000000003 177600.00000000003 ; + RECT 162300.0 176700.00000000003 164100.00000000003 178500.00000000003 ; + RECT 162300.0 174300.0 164100.00000000003 176100.00000000003 ; + RECT 183900.0 255900.0 185700.00000000003 257700.0 ; + RECT 162300.0 123900.0 164100.00000000003 125700.0 ; + RECT 162300.0 122400.0 164100.00000000003 124800.00000000001 ; + RECT 162300.0 121500.0 164100.00000000003 123300.0 ; + RECT 162300.0 123900.0 164100.00000000003 125700.0 ; + RECT 152700.00000000003 123900.0 154500.00000000003 125700.0 ; + RECT 152700.00000000003 122400.0 154500.00000000003 124800.00000000001 ; + RECT 152700.00000000003 121500.0 154500.00000000003 123300.0 ; + RECT 152700.00000000003 123900.0 154500.00000000003 125700.0 ; + RECT 179100.00000000003 267900.00000000006 180900.00000000003 269700.00000000006 ; + RECT 179100.00000000003 266400.00000000006 180900.00000000003 268800.0 ; + RECT 179100.00000000003 265500.0 180900.00000000003 267300.0 ; + RECT 179100.00000000003 267900.00000000006 180900.00000000003 269700.00000000006 ; + RECT 27900.000000000004 164700.00000000003 29700.000000000004 166500.00000000003 ; + RECT 162300.0 143100.0 164100.00000000003 144900.0 ; + RECT 162300.0 141600.0 164100.00000000003 144000.0 ; + RECT 162300.0 140700.00000000003 164100.00000000003 142500.00000000003 ; + RECT 162300.0 143100.0 164100.00000000003 144900.0 ; + RECT 191100.00000000003 248700.00000000003 192900.00000000003 250500.00000000003 ; + RECT 191100.00000000003 247200.00000000003 192900.00000000003 249600.00000000003 ; + RECT 191100.00000000003 246300.0 192900.00000000003 248100.00000000003 ; + RECT 191100.00000000003 248700.00000000003 192900.00000000003 250500.00000000003 ; + RECT 181500.0 198300.0 183300.0 200100.00000000003 ; + RECT 180000.0 198300.0 182400.0 200100.00000000003 ; + RECT 179100.00000000003 198300.0 180900.00000000003 200100.00000000003 ; + RECT 152700.00000000003 155100.00000000003 154500.00000000003 156900.00000000003 ; + RECT 152700.00000000003 156000.0 154500.00000000003 158400.0 ; + RECT 152700.00000000003 157500.0 154500.00000000003 159300.0 ; + RECT 152700.00000000003 155100.00000000003 154500.00000000003 156900.00000000003 ; + RECT 191100.00000000003 217500.0 192900.00000000003 219300.0 ; + RECT 181500.0 56700.0 183300.0 58500.0 ; + RECT 181500.0 55200.0 183300.0 57600.0 ; + RECT 181500.0 54300.00000000001 183300.0 56100.0 ; + RECT 181500.0 56700.0 183300.0 58500.0 ; + RECT 152700.00000000003 193500.0 154500.00000000003 195300.0 ; + RECT 152700.00000000003 194400.0 154500.00000000003 196800.0 ; + RECT 152700.00000000003 195900.0 154500.00000000003 197700.00000000003 ; + RECT 152700.00000000003 193500.0 154500.00000000003 195300.0 ; + RECT 181600.00000000003 131200.0 182400.0 132000.0 ; + RECT 188400.0 131200.0 189200.0 132000.0 ; + RECT 181600.00000000003 131200.0 182400.0 132000.0 ; + RECT 188400.0 131200.0 189200.0 132000.0 ; + RECT 181600.00000000003 149600.00000000003 182400.0 150400.0 ; + RECT 188400.0 149600.00000000003 189200.0 150400.0 ; + RECT 181600.00000000003 149600.00000000003 182400.0 150400.0 ; + RECT 188400.0 149600.00000000003 189200.0 150400.0 ; + RECT 181600.00000000003 168000.0 182400.0 168800.0 ; + RECT 188400.0 168000.0 189200.0 168800.0 ; + RECT 181600.00000000003 168000.0 182400.0 168800.0 ; + RECT 188400.0 168000.0 189200.0 168800.0 ; + RECT 181600.00000000003 186399.99999999997 182400.0 187200.0 ; + RECT 188400.0 186399.99999999997 189200.0 187200.0 ; + RECT 181600.00000000003 186399.99999999997 182400.0 187200.0 ; + RECT 188400.0 186399.99999999997 189200.0 187200.0 ; + RECT 181600.00000000003 204800.0 182400.0 205600.00000000003 ; + RECT 188400.0 204800.0 189200.0 205600.00000000003 ; + RECT 181600.00000000003 204800.0 182400.0 205600.00000000003 ; + RECT 188400.0 204800.0 189200.0 205600.00000000003 ; + RECT 181600.00000000003 223200.0 182400.0 224000.0 ; + RECT 188400.0 223200.0 189200.0 224000.0 ; + RECT 181600.00000000003 223200.0 182400.0 224000.0 ; + RECT 188400.0 223200.0 189200.0 224000.0 ; + RECT 181600.00000000003 241600.00000000003 182400.0 242399.99999999997 ; + RECT 188400.0 241600.00000000003 189200.0 242399.99999999997 ; + RECT 181600.00000000003 241600.00000000003 182400.0 242399.99999999997 ; + RECT 188400.0 241600.00000000003 189200.0 242399.99999999997 ; + RECT 181600.00000000003 260000.0 182400.0 260800.0 ; + RECT 188400.0 260000.0 189200.0 260800.0 ; + RECT 181600.00000000003 260000.0 182400.0 260800.0 ; + RECT 188400.0 260000.0 189200.0 260800.0 ; + RECT 178200.0 126600.00000000001 179000.0 127400.0 ; + RECT 185000.0 126600.00000000001 185800.0 127400.0 ; + RECT 185000.0 126600.00000000001 185800.0 127400.0 ; + RECT 191800.0 126600.00000000001 192600.00000000003 127400.0 ; + RECT 178200.0 135800.0 179000.0 136600.00000000003 ; + RECT 185000.0 135800.0 185800.0 136600.00000000003 ; + RECT 185000.0 135800.0 185800.0 136600.00000000003 ; + RECT 191800.0 135800.0 192600.00000000003 136600.00000000003 ; + RECT 178200.0 145000.0 179000.0 145800.0 ; + RECT 185000.0 145000.0 185800.0 145800.0 ; + RECT 185000.0 145000.0 185800.0 145800.0 ; + RECT 191800.0 145000.0 192600.00000000003 145800.0 ; + RECT 178200.0 154200.0 179000.0 155000.0 ; + RECT 185000.0 154200.0 185800.0 155000.0 ; + RECT 185000.0 154200.0 185800.0 155000.0 ; + RECT 191800.0 154200.0 192600.00000000003 155000.0 ; + RECT 178200.0 163399.99999999997 179000.0 164200.0 ; + RECT 185000.0 163399.99999999997 185800.0 164200.0 ; + RECT 185000.0 163399.99999999997 185800.0 164200.0 ; + RECT 191800.0 163399.99999999997 192600.00000000003 164200.0 ; + RECT 178200.0 172600.00000000003 179000.0 173399.99999999997 ; + RECT 185000.0 172600.00000000003 185800.0 173399.99999999997 ; + RECT 185000.0 172600.00000000003 185800.0 173399.99999999997 ; + RECT 191800.0 172600.00000000003 192600.00000000003 173399.99999999997 ; + RECT 178200.0 181800.0 179000.0 182600.00000000003 ; + RECT 185000.0 181800.0 185800.0 182600.00000000003 ; + RECT 185000.0 181800.0 185800.0 182600.00000000003 ; + RECT 191800.0 181800.0 192600.00000000003 182600.00000000003 ; + RECT 178200.0 191000.0 179000.0 191800.0 ; + RECT 185000.0 191000.0 185800.0 191800.0 ; + RECT 185000.0 191000.0 185800.0 191800.0 ; + RECT 191800.0 191000.0 192600.00000000003 191800.0 ; + RECT 178200.0 200200.0 179000.0 201000.0 ; + RECT 185000.0 200200.0 185800.0 201000.0 ; + RECT 185000.0 200200.0 185800.0 201000.0 ; + RECT 191800.0 200200.0 192600.00000000003 201000.0 ; + RECT 178200.0 209399.99999999997 179000.0 210200.0 ; + RECT 185000.0 209399.99999999997 185800.0 210200.0 ; + RECT 185000.0 209399.99999999997 185800.0 210200.0 ; + RECT 191800.0 209399.99999999997 192600.00000000003 210200.0 ; + RECT 178200.0 218600.00000000003 179000.0 219399.99999999997 ; + RECT 185000.0 218600.00000000003 185800.0 219399.99999999997 ; + RECT 185000.0 218600.00000000003 185800.0 219399.99999999997 ; + RECT 191800.0 218600.00000000003 192600.00000000003 219399.99999999997 ; + RECT 178200.0 227800.0 179000.0 228600.00000000003 ; + RECT 185000.0 227800.0 185800.0 228600.00000000003 ; + RECT 185000.0 227800.0 185800.0 228600.00000000003 ; + RECT 191800.0 227800.0 192600.00000000003 228600.00000000003 ; + RECT 178200.0 237000.0 179000.0 237800.0 ; + RECT 185000.0 237000.0 185800.0 237800.0 ; + RECT 185000.0 237000.0 185800.0 237800.0 ; + RECT 191800.0 237000.0 192600.00000000003 237800.0 ; + RECT 178200.0 246200.0 179000.0 247000.0 ; + RECT 185000.0 246200.0 185800.0 247000.0 ; + RECT 185000.0 246200.0 185800.0 247000.0 ; + RECT 191800.0 246200.0 192600.00000000003 247000.0 ; + RECT 178200.0 255399.99999999997 179000.0 256200.0 ; + RECT 185000.0 255399.99999999997 185800.0 256200.0 ; + RECT 185000.0 255399.99999999997 185800.0 256200.0 ; + RECT 191800.0 255399.99999999997 192600.00000000003 256200.0 ; + RECT 178200.0 264600.0 179000.0 265400.00000000006 ; + RECT 185000.0 264600.0 185800.0 265400.00000000006 ; + RECT 185000.0 264600.0 185800.0 265400.00000000006 ; + RECT 191800.0 264600.0 192600.00000000003 265400.00000000006 ; + RECT 181700.0 131300.0 182300.0 131900.0 ; + RECT 188500.0 131300.0 189100.00000000003 131900.0 ; + RECT 181700.0 149700.0 182300.0 150300.0 ; + RECT 188500.0 149700.0 189100.00000000003 150300.0 ; + RECT 181700.0 168100.00000000003 182300.0 168700.0 ; + RECT 188500.0 168100.00000000003 189100.00000000003 168700.0 ; + RECT 181700.0 186500.0 182300.0 187100.00000000003 ; + RECT 188500.0 186500.0 189100.00000000003 187100.00000000003 ; + RECT 181700.0 204899.99999999997 182300.0 205500.0 ; + RECT 188500.0 204899.99999999997 189100.00000000003 205500.0 ; + RECT 181700.0 223300.0 182300.0 223899.99999999997 ; + RECT 188500.0 223300.0 189100.00000000003 223899.99999999997 ; + RECT 181700.0 241700.0 182300.0 242300.0 ; + RECT 188500.0 241700.0 189100.00000000003 242300.0 ; + RECT 181700.0 260100.00000000003 182300.0 260700.0 ; + RECT 188500.0 260100.00000000003 189100.00000000003 260700.0 ; + RECT 178300.0 126700.0 178900.0 127300.00000000001 ; + RECT 185100.00000000003 126700.0 185700.0 127300.00000000001 ; + RECT 191900.0 126700.0 192500.0 127300.00000000001 ; + RECT 178300.0 135900.0 178900.0 136500.0 ; + RECT 185100.00000000003 135900.0 185700.0 136500.0 ; + RECT 191900.0 135900.0 192500.0 136500.0 ; + RECT 178300.0 145100.00000000003 178900.0 145700.0 ; + RECT 185100.00000000003 145100.00000000003 185700.0 145700.0 ; + RECT 191900.0 145100.00000000003 192500.0 145700.0 ; + RECT 178300.0 154300.0 178900.0 154899.99999999997 ; + RECT 185100.00000000003 154300.0 185700.0 154899.99999999997 ; + RECT 191900.0 154300.0 192500.0 154899.99999999997 ; + RECT 178300.0 163500.0 178900.0 164100.00000000003 ; + RECT 185100.00000000003 163500.0 185700.0 164100.00000000003 ; + RECT 191900.0 163500.0 192500.0 164100.00000000003 ; + RECT 178300.0 172700.0 178900.0 173300.0 ; + RECT 185100.00000000003 172700.0 185700.0 173300.0 ; + RECT 191900.0 172700.0 192500.0 173300.0 ; + RECT 178300.0 181899.99999999997 178900.0 182500.0 ; + RECT 185100.00000000003 181899.99999999997 185700.0 182500.0 ; + RECT 191900.0 181899.99999999997 192500.0 182500.0 ; + RECT 178300.0 191100.00000000003 178900.0 191700.0 ; + RECT 185100.00000000003 191100.00000000003 185700.0 191700.0 ; + RECT 191900.0 191100.00000000003 192500.0 191700.0 ; + RECT 178300.0 200300.0 178900.0 200899.99999999997 ; + RECT 185100.00000000003 200300.0 185700.0 200899.99999999997 ; + RECT 191900.0 200300.0 192500.0 200899.99999999997 ; + RECT 178300.0 209500.0 178900.0 210100.00000000003 ; + RECT 185100.00000000003 209500.0 185700.0 210100.00000000003 ; + RECT 191900.0 209500.0 192500.0 210100.00000000003 ; + RECT 178300.0 218700.0 178900.0 219300.0 ; + RECT 185100.00000000003 218700.0 185700.0 219300.0 ; + RECT 191900.0 218700.0 192500.0 219300.0 ; + RECT 178300.0 227899.99999999997 178900.0 228500.0 ; + RECT 185100.00000000003 227899.99999999997 185700.0 228500.0 ; + RECT 191900.0 227899.99999999997 192500.0 228500.0 ; + RECT 178300.0 237100.00000000003 178900.0 237700.0 ; + RECT 185100.00000000003 237100.00000000003 185700.0 237700.0 ; + RECT 191900.0 237100.00000000003 192500.0 237700.0 ; + RECT 178300.0 246300.0 178900.0 246899.99999999997 ; + RECT 185100.00000000003 246300.0 185700.0 246899.99999999997 ; + RECT 191900.0 246300.0 192500.0 246899.99999999997 ; + RECT 178300.0 255500.0 178900.0 256100.00000000003 ; + RECT 185100.00000000003 255500.0 185700.0 256100.00000000003 ; + RECT 191900.0 255500.0 192500.0 256100.00000000003 ; + RECT 178300.0 264700.0 178900.0 265300.0 ; + RECT 185100.00000000003 264700.0 185700.0 265300.0 ; + RECT 191900.0 264700.0 192500.0 265300.0 ; + RECT 181400.0 112000.00000000001 182200.0 112800.00000000001 ; + RECT 181400.0 112000.00000000001 182200.0 112800.00000000001 ; + RECT 188200.0 112000.00000000001 189000.0 112800.00000000001 ; + RECT 188200.0 112000.00000000001 189000.0 112800.00000000001 ; + RECT 181400.0 112000.00000000001 182200.0 112800.00000000001 ; + RECT 188200.0 112000.00000000001 189000.0 112800.00000000001 ; + RECT 185000.0 95000.00000000001 185800.0 95800.00000000001 ; + RECT 184000.0 81600.00000000001 184800.0 82400.0 ; + RECT 191800.0 95000.00000000001 192600.00000000003 95800.00000000001 ; + RECT 190800.0 81600.00000000001 191600.00000000003 82400.0 ; + RECT 184100.00000000003 81700.0 184700.0 82300.00000000001 ; + RECT 190900.0 81700.0 191500.0 82300.00000000001 ; + RECT 185100.00000000003 95100.00000000001 185700.0 95700.0 ; + RECT 191900.0 95100.00000000001 192500.0 95700.0 ; + RECT 182400.0 30400.000000000004 183200.0 31200.000000000004 ; + RECT 181800.0 47800.00000000001 182600.00000000003 48600.00000000001 ; + RECT 182400.0 37000.0 183200.0 37800.00000000001 ; + RECT 183800.0 41400.00000000001 184600.00000000003 42200.0 ; + RECT 183200.0 54800.00000000001 184000.0 55600.00000000001 ; + RECT 189200.0 30400.000000000004 190000.0 31200.000000000004 ; + RECT 188600.00000000003 47800.00000000001 189400.0 48600.00000000001 ; + RECT 189200.0 37000.0 190000.0 37800.00000000001 ; + RECT 190600.00000000003 41400.00000000001 191400.0 42200.0 ; + RECT 190000.0 54800.00000000001 190800.0 55600.00000000001 ; + RECT 182500.0 30500.000000000004 183100.00000000003 31100.0 ; + RECT 181900.0 47900.00000000001 182500.0 48500.0 ; + RECT 189300.0 30500.000000000004 189900.0 31100.0 ; + RECT 188700.0 47900.00000000001 189300.0 48500.0 ; + RECT 182500.0 37100.0 183100.00000000003 37700.0 ; + RECT 183900.0 41500.0 184500.0 42100.00000000001 ; + RECT 183300.0 54900.00000000001 183900.0 55500.0 ; + RECT 189300.0 37100.0 189900.0 37700.0 ; + RECT 190700.0 41500.0 191300.0 42100.00000000001 ; + RECT 190100.00000000003 54900.00000000001 190700.0 55500.0 ; + RECT 74199.99999999999 132900.0 81500.0 133500.0 ; + RECT 75600.0 142100.00000000003 82899.99999999999 142700.0 ; + RECT 77000.0 169700.0 81500.0 170300.0 ; + RECT 78400.0 178899.99999999997 82900.0 179500.0 ; + RECT 111700.0 131500.0 115100.0 132100.00000000003 ; + RECT 111700.0 141100.00000000003 116500.0 141700.0 ; + RECT 111700.0 149900.0 117900.0 150500.0 ; + RECT 111700.0 159500.0 119300.00000000001 160100.00000000003 ; + RECT 111700.0 168300.0 120700.0 168899.99999999997 ; + RECT 111700.0 177899.99999999997 122100.0 178500.0 ; + RECT 111700.0 186700.0 123500.0 187300.0 ; + RECT 111700.0 196300.0 124900.0 196899.99999999997 ; + RECT 90500.0 131600.00000000003 89700.0 132400.0 ; + RECT 108500.0 131600.00000000003 107700.0 132400.0 ; + RECT 90500.0 122400.0 89700.0 123200.0 ; + RECT 108500.0 122400.0 107700.0 123200.0 ; + RECT 90500.0 131600.00000000003 89700.0 132400.0 ; + RECT 108500.0 131600.00000000003 107700.0 132400.0 ; + RECT 90500.0 140800.0 89700.0 141600.00000000003 ; + RECT 108500.0 140800.0 107700.0 141600.00000000003 ; + RECT 90500.0 150000.0 89700.0 150800.0 ; + RECT 108500.0 150000.0 107700.0 150800.0 ; + RECT 90500.0 140800.0 89700.0 141600.00000000003 ; + RECT 108500.0 140800.0 107700.0 141600.00000000003 ; + RECT 90500.0 150000.0 89700.0 150800.0 ; + RECT 108500.0 150000.0 107700.0 150800.0 ; + RECT 90500.0 159200.0 89700.0 160000.0 ; + RECT 108500.0 159200.0 107700.0 160000.0 ; + RECT 89700.0 131600.00000000003 90500.0 132400.0 ; + RECT 107700.0 131600.00000000003 108500.0 132400.0 ; + RECT 89700.0 150000.0 90500.0 150800.0 ; + RECT 107700.0 150000.0 108500.0 150800.0 ; + RECT 89700.0 122400.0 90500.0 123200.0 ; + RECT 107700.0 122400.0 108500.0 123200.0 ; + RECT 89700.0 140800.0 90500.0 141600.00000000003 ; + RECT 107700.0 140800.0 108500.0 141600.00000000003 ; + RECT 89700.0 159200.0 90500.0 160000.0 ; + RECT 107700.0 159200.0 108500.0 160000.0 ; + RECT 90500.0 168399.99999999997 89700.0 169200.0 ; + RECT 108500.0 168399.99999999997 107700.0 169200.0 ; + RECT 90500.0 159200.0 89700.0 160000.0 ; + RECT 108500.0 159200.0 107700.0 160000.0 ; + RECT 90500.0 168399.99999999997 89700.0 169200.0 ; + RECT 108500.0 168399.99999999997 107700.0 169200.0 ; + RECT 90500.0 177600.00000000003 89700.0 178399.99999999997 ; + RECT 108500.0 177600.00000000003 107700.0 178399.99999999997 ; + RECT 90500.0 186800.0 89700.0 187600.00000000003 ; + RECT 108500.0 186800.0 107700.0 187600.00000000003 ; + RECT 90500.0 177600.00000000003 89700.0 178399.99999999997 ; + RECT 108500.0 177600.00000000003 107700.0 178399.99999999997 ; + RECT 90500.0 186800.0 89700.0 187600.00000000003 ; + RECT 108500.0 186800.0 107700.0 187600.00000000003 ; + RECT 90500.0 196000.0 89700.0 196800.0 ; + RECT 108500.0 196000.0 107700.0 196800.0 ; + RECT 89700.0 168399.99999999997 90500.0 169200.0 ; + RECT 107700.0 168399.99999999997 108500.0 169200.0 ; + RECT 89700.0 186800.0 90500.0 187600.00000000003 ; + RECT 107700.0 186800.0 108500.0 187600.00000000003 ; + RECT 89700.0 159200.0 90500.0 160000.0 ; + RECT 107700.0 159200.0 108500.0 160000.0 ; + RECT 89700.0 177600.00000000003 90500.0 178399.99999999997 ; + RECT 107700.0 177600.00000000003 108500.0 178399.99999999997 ; + RECT 89700.0 196000.0 90500.0 196800.0 ; + RECT 107700.0 196000.0 108500.0 196800.0 ; + RECT 81900.0 132800.0 81100.0 133600.00000000003 ; + RECT 74600.0 132800.0 73800.0 133600.00000000003 ; + RECT 83300.0 142000.0 82500.0 142800.0 ; + RECT 76000.0 142000.0 75200.0 142800.0 ; + RECT 81900.0 169600.00000000003 81100.0 170399.99999999997 ; + RECT 77400.0 169600.00000000003 76600.0 170399.99999999997 ; + RECT 83300.0 178800.0 82500.0 179600.00000000003 ; + RECT 78800.0 178800.0 78000.0 179600.00000000003 ; + RECT 112100.0 131400.0 111300.00000000001 132200.0 ; + RECT 115500.0 131400.0 114700.0 132200.0 ; + RECT 112100.0 141000.0 111300.00000000001 141800.0 ; + RECT 116900.0 141000.0 116100.0 141800.0 ; + RECT 112100.0 149800.0 111300.00000000001 150600.00000000003 ; + RECT 118300.0 149800.0 117500.0 150600.00000000003 ; + RECT 112100.0 159399.99999999997 111300.00000000001 160200.0 ; + RECT 119700.0 159399.99999999997 118900.0 160200.0 ; + RECT 112100.0 168200.0 111300.00000000001 169000.0 ; + RECT 121100.0 168200.0 120300.00000000001 169000.0 ; + RECT 112100.0 177800.0 111300.00000000001 178600.00000000003 ; + RECT 122500.0 177800.0 121700.0 178600.00000000003 ; + RECT 112100.0 186600.00000000003 111300.00000000001 187399.99999999997 ; + RECT 123900.0 186600.00000000003 123100.0 187399.99999999997 ; + RECT 112100.0 196200.0 111300.00000000001 197000.0 ; + RECT 125300.0 196200.0 124500.0 197000.0 ; + RECT 130900.0 131600.00000000003 130100.00000000003 132400.0 ; + RECT 130900.0 122400.0 130100.00000000003 123200.0 ; + RECT 130900.0 131600.00000000003 130100.00000000003 132400.0 ; + RECT 130900.0 140800.0 130100.00000000003 141600.00000000003 ; + RECT 130900.0 150000.0 130100.00000000003 150800.0 ; + RECT 130900.0 140800.0 130100.00000000003 141600.00000000003 ; + RECT 130900.0 150000.0 130100.00000000003 150800.0 ; + RECT 130900.0 159200.0 130100.00000000003 160000.0 ; + RECT 130900.0 168399.99999999997 130100.00000000003 169200.0 ; + RECT 130900.0 159200.0 130100.00000000003 160000.0 ; + RECT 130900.0 168399.99999999997 130100.00000000003 169200.0 ; + RECT 130900.0 177600.00000000003 130100.00000000003 178399.99999999997 ; + RECT 130900.0 186800.0 130100.00000000003 187600.00000000003 ; + RECT 130900.0 177600.00000000003 130100.00000000003 178399.99999999997 ; + RECT 130900.0 186800.0 130100.00000000003 187600.00000000003 ; + RECT 130900.0 196000.0 130100.00000000003 196800.0 ; + RECT 130900.0 205200.0 130100.00000000003 206000.0 ; + RECT 130900.0 196000.0 130100.00000000003 196800.0 ; + RECT 130900.0 205200.0 130100.00000000003 206000.0 ; + RECT 130900.0 214400.00000000003 130100.00000000003 215200.0 ; + RECT 130900.0 223600.00000000003 130100.00000000003 224400.00000000003 ; + RECT 130900.0 214400.00000000003 130100.00000000003 215200.0 ; + RECT 130900.0 223600.00000000003 130100.00000000003 224400.00000000003 ; + RECT 130900.0 232800.0 130100.00000000003 233600.00000000003 ; + RECT 130900.0 242000.0 130100.00000000003 242800.0 ; + RECT 130900.0 232800.0 130100.00000000003 233600.00000000003 ; + RECT 130900.0 242000.0 130100.00000000003 242800.0 ; + RECT 130900.0 251200.0 130100.00000000003 252000.0 ; + RECT 130900.0 260399.99999999997 130100.00000000003 261200.0 ; + RECT 130900.0 251200.0 130100.00000000003 252000.0 ; + RECT 130900.0 260399.99999999997 130100.00000000003 261200.0 ; + RECT 130900.0 269600.0 130100.00000000003 270400.00000000006 ; + RECT 130100.0 131600.00000000003 130900.0 132400.0 ; + RECT 130100.0 150000.0 130900.0 150800.0 ; + RECT 130100.0 168399.99999999997 130900.0 169200.0 ; + RECT 130100.0 186800.0 130900.0 187600.00000000003 ; + RECT 130100.0 205200.0 130900.0 206000.0 ; + RECT 130100.0 223600.00000000003 130900.0 224400.00000000003 ; + RECT 130100.0 242000.0 130900.0 242800.0 ; + RECT 130100.0 260399.99999999997 130900.0 261200.0 ; + RECT 89700.0 131600.00000000003 90500.0 132400.0 ; + RECT 107700.0 131600.00000000003 108500.0 132400.0 ; + RECT 89700.0 150000.0 90500.0 150800.0 ; + RECT 107700.0 150000.0 108500.0 150800.0 ; + RECT 89700.0 168399.99999999997 90500.0 169200.0 ; + RECT 107700.0 168399.99999999997 108500.0 169200.0 ; + RECT 89700.0 186800.0 90500.0 187600.00000000003 ; + RECT 107700.0 186800.0 108500.0 187600.00000000003 ; + RECT 130100.0 122400.0 130900.0 123200.0 ; + RECT 130100.0 140800.0 130900.0 141600.00000000003 ; + RECT 130100.0 159200.0 130900.0 160000.0 ; + RECT 130100.0 177600.00000000003 130900.0 178399.99999999997 ; + RECT 130100.0 196000.0 130900.0 196800.0 ; + RECT 130100.0 214400.00000000003 130900.0 215200.0 ; + RECT 130100.0 232800.0 130900.0 233600.00000000003 ; + RECT 130100.0 251200.0 130900.0 252000.0 ; + RECT 130100.0 269600.0 130900.0 270400.0 ; + RECT 89700.0 122400.0 90500.0 123200.0 ; + RECT 107700.0 122400.0 108500.0 123200.0 ; + RECT 89700.0 140800.0 90500.0 141600.00000000003 ; + RECT 107700.0 140800.0 108500.0 141600.00000000003 ; + RECT 89700.0 159200.0 90500.0 160000.0 ; + RECT 107700.0 159200.0 108500.0 160000.0 ; + RECT 89700.0 177600.00000000003 90500.0 178399.99999999997 ; + RECT 107700.0 177600.00000000003 108500.0 178399.99999999997 ; + RECT 89700.0 196000.0 90500.0 196800.0 ; + RECT 107700.0 196000.0 108500.0 196800.0 ; + RECT 155100.0 131600.00000000003 154300.0 132400.0 ; + RECT 164700.0 131600.00000000003 163899.99999999997 132400.0 ; + RECT 155100.0 122400.0 154300.0 123200.0 ; + RECT 164700.0 122400.0 163899.99999999997 123200.0 ; + RECT 155100.0 131600.00000000003 154300.0 132400.0 ; + RECT 164700.0 131600.00000000003 163899.99999999997 132400.0 ; + RECT 155100.0 140800.0 154300.0 141600.00000000003 ; + RECT 164700.0 140800.0 163899.99999999997 141600.00000000003 ; + RECT 155100.0 150000.0 154300.0 150800.0 ; + RECT 164700.0 150000.0 163899.99999999997 150800.0 ; + RECT 155100.0 140800.0 154300.0 141600.00000000003 ; + RECT 164700.0 140800.0 163899.99999999997 141600.00000000003 ; + RECT 155100.0 150000.0 154300.0 150800.0 ; + RECT 164700.0 150000.0 163899.99999999997 150800.0 ; + RECT 155100.0 159200.0 154300.0 160000.0 ; + RECT 164700.0 159200.0 163899.99999999997 160000.0 ; + RECT 155100.0 168399.99999999997 154300.0 169200.0 ; + RECT 164700.0 168399.99999999997 163899.99999999997 169200.0 ; + RECT 155100.0 159200.0 154300.0 160000.0 ; + RECT 164700.0 159200.0 163899.99999999997 160000.0 ; + RECT 155100.0 168399.99999999997 154300.0 169200.0 ; + RECT 164700.0 168399.99999999997 163899.99999999997 169200.0 ; + RECT 155100.0 177600.00000000003 154300.0 178399.99999999997 ; + RECT 164700.0 177600.00000000003 163899.99999999997 178399.99999999997 ; + RECT 155100.0 186800.0 154300.0 187600.00000000003 ; + RECT 164700.0 186800.0 163899.99999999997 187600.00000000003 ; + RECT 155100.0 177600.00000000003 154300.0 178399.99999999997 ; + RECT 164700.0 177600.00000000003 163899.99999999997 178399.99999999997 ; + RECT 155100.0 186800.0 154300.0 187600.00000000003 ; + RECT 164700.0 186800.0 163899.99999999997 187600.00000000003 ; + RECT 155100.0 196000.0 154300.0 196800.0 ; + RECT 164700.0 196000.0 163899.99999999997 196800.0 ; + RECT 155100.0 205200.0 154300.0 206000.0 ; + RECT 164700.0 205200.0 163899.99999999997 206000.0 ; + RECT 155100.0 196000.0 154300.0 196800.0 ; + RECT 164700.0 196000.0 163899.99999999997 196800.0 ; + RECT 155100.0 205200.0 154300.0 206000.0 ; + RECT 164700.0 205200.0 163899.99999999997 206000.0 ; + RECT 155100.0 214400.00000000003 154300.0 215200.0 ; + RECT 164700.0 214400.00000000003 163899.99999999997 215200.0 ; + RECT 155100.0 223600.00000000003 154300.0 224400.00000000003 ; + RECT 164700.0 223600.00000000003 163899.99999999997 224400.00000000003 ; + RECT 155100.0 214400.00000000003 154300.0 215200.0 ; + RECT 164700.0 214400.00000000003 163899.99999999997 215200.0 ; + RECT 155100.0 223600.00000000003 154300.0 224400.00000000003 ; + RECT 164700.0 223600.00000000003 163899.99999999997 224400.00000000003 ; + RECT 155100.0 232800.0 154300.0 233600.00000000003 ; + RECT 164700.0 232800.0 163899.99999999997 233600.00000000003 ; + RECT 155100.0 242000.0 154300.0 242800.0 ; + RECT 164700.0 242000.0 163899.99999999997 242800.0 ; + RECT 155100.0 232800.0 154300.0 233600.00000000003 ; + RECT 164700.0 232800.0 163899.99999999997 233600.00000000003 ; + RECT 155100.0 242000.0 154300.0 242800.0 ; + RECT 164700.0 242000.0 163899.99999999997 242800.0 ; + RECT 155100.0 251200.0 154300.0 252000.0 ; + RECT 164700.0 251200.0 163899.99999999997 252000.0 ; + RECT 155100.0 260399.99999999997 154300.0 261200.0 ; + RECT 164700.0 260399.99999999997 163899.99999999997 261200.0 ; + RECT 155100.0 251200.0 154300.0 252000.0 ; + RECT 164700.0 251200.0 163899.99999999997 252000.0 ; + RECT 155100.0 260399.99999999997 154300.0 261200.0 ; + RECT 164700.0 260399.99999999997 163899.99999999997 261200.0 ; + RECT 155100.0 269600.0 154300.0 270400.00000000006 ; + RECT 164700.0 269600.0 163899.99999999997 270400.00000000006 ; + RECT 154399.99999999997 131700.0 155000.0 132300.0 ; + RECT 164000.0 131700.0 164600.0 132300.0 ; + RECT 154399.99999999997 150100.00000000003 155000.0 150700.0 ; + RECT 164000.0 150100.00000000003 164600.0 150700.0 ; + RECT 154399.99999999997 168500.0 155000.0 169100.00000000003 ; + RECT 164000.0 168500.0 164600.0 169100.00000000003 ; + RECT 154399.99999999997 186900.00000000003 155000.0 187500.0 ; + RECT 164000.0 186900.00000000003 164600.0 187500.0 ; + RECT 154399.99999999997 205300.0 155000.0 205900.00000000003 ; + RECT 164000.0 205300.0 164600.0 205900.00000000003 ; + RECT 154399.99999999997 223700.0 155000.0 224300.0 ; + RECT 164000.0 223700.0 164600.0 224300.0 ; + RECT 154399.99999999997 242100.00000000003 155000.0 242700.0 ; + RECT 164000.0 242100.00000000003 164600.0 242700.0 ; + RECT 154399.99999999997 260500.0 155000.0 261100.00000000003 ; + RECT 164000.0 260500.0 164600.0 261100.00000000003 ; + RECT 154399.99999999997 122500.0 155000.0 123100.00000000001 ; + RECT 164000.0 122500.0 164600.0 123100.00000000001 ; + RECT 154399.99999999997 140900.0 155000.0 141500.0 ; + RECT 164000.0 140900.0 164600.0 141500.0 ; + RECT 154399.99999999997 159300.0 155000.0 159899.99999999997 ; + RECT 164000.0 159300.0 164600.0 159899.99999999997 ; + RECT 154399.99999999997 177700.0 155000.0 178300.0 ; + RECT 164000.0 177700.0 164600.0 178300.0 ; + RECT 154399.99999999997 196100.00000000003 155000.0 196700.0 ; + RECT 164000.0 196100.00000000003 164600.0 196700.0 ; + RECT 154399.99999999997 214500.0 155000.0 215100.00000000003 ; + RECT 164000.0 214500.0 164600.0 215100.00000000003 ; + RECT 154399.99999999997 232900.00000000003 155000.0 233500.0 ; + RECT 164000.0 232900.00000000003 164600.0 233500.0 ; + RECT 154399.99999999997 251300.0 155000.0 251899.99999999997 ; + RECT 164000.0 251300.0 164600.0 251899.99999999997 ; + RECT 154399.99999999997 269700.0 155000.0 270300.0 ; + RECT 164000.0 269700.0 164600.0 270300.0 ; + RECT 181700.0 131300.0 182300.0 131900.0 ; + RECT 188500.0 131300.0 189100.00000000003 131900.0 ; + RECT 181700.0 149700.0 182300.0 150300.0 ; + RECT 188500.0 149700.0 189100.00000000003 150300.0 ; + RECT 181700.0 168100.00000000003 182300.0 168700.0 ; + RECT 188500.0 168100.00000000003 189100.00000000003 168700.0 ; + RECT 181700.0 186500.0 182300.0 187100.00000000003 ; + RECT 188500.0 186500.0 189100.00000000003 187100.00000000003 ; + RECT 181700.0 204899.99999999997 182300.0 205500.0 ; + RECT 188500.0 204899.99999999997 189100.00000000003 205500.0 ; + RECT 181700.0 223300.0 182300.0 223899.99999999997 ; + RECT 188500.0 223300.0 189100.00000000003 223899.99999999997 ; + RECT 181700.0 241700.0 182300.0 242300.0 ; + RECT 188500.0 241700.0 189100.00000000003 242300.0 ; + RECT 181700.0 260100.00000000003 182300.0 260700.0 ; + RECT 188500.0 260100.00000000003 189100.00000000003 260700.0 ; + RECT 181400.0 112000.0 182200.0 112800.0 ; + RECT 188200.0 112000.0 189000.0 112800.0 ; + RECT 184100.00000000003 81700.0 184700.0 82300.00000000001 ; + RECT 190900.0 81700.0 191500.0 82300.00000000001 ; + RECT 182500.0 30500.0 183100.00000000003 31099.999999999993 ; + RECT 181900.0 47900.00000000001 182500.0 48500.0 ; + RECT 189300.0 30500.0 189900.0 31099.999999999993 ; + RECT 188700.0 47900.00000000001 189300.0 48500.0 ; + RECT 130100.00000000003 131600.00000000003 130900.0 132400.0 ; + RECT 130100.00000000003 150000.0 130900.0 150800.0 ; + RECT 130100.00000000003 168399.99999999997 130900.0 169200.0 ; + RECT 130100.00000000003 186800.0 130900.0 187600.00000000003 ; + RECT 130100.00000000003 205200.0 130900.0 206000.0 ; + RECT 130100.00000000003 223600.00000000003 130900.0 224399.99999999997 ; + RECT 130100.00000000003 242000.0 130900.0 242800.0 ; + RECT 130100.00000000003 260399.99999999997 130900.0 261200.0 ; + RECT 89700.0 131600.00000000003 90500.0 132400.0 ; + RECT 107700.0 131600.00000000003 108500.0 132400.0 ; + RECT 89700.0 150000.0 90500.0 150800.0 ; + RECT 107700.0 150000.0 108500.0 150800.0 ; + RECT 89700.0 168399.99999999997 90500.0 169200.0 ; + RECT 107700.0 168399.99999999997 108500.0 169200.0 ; + RECT 89700.0 186800.0 90500.0 187600.00000000003 ; + RECT 107700.0 186800.0 108500.0 187600.00000000003 ; + RECT 154400.0 131700.0 155000.0 132300.0 ; + RECT 164000.0 131700.0 164600.00000000003 132300.0 ; + RECT 154400.0 150100.00000000003 155000.0 150700.0 ; + RECT 164000.0 150100.00000000003 164600.00000000003 150700.0 ; + RECT 154400.0 168500.0 155000.0 169100.00000000003 ; + RECT 164000.0 168500.0 164600.00000000003 169100.00000000003 ; + RECT 154400.0 186899.99999999997 155000.0 187500.0 ; + RECT 164000.0 186899.99999999997 164600.00000000003 187500.0 ; + RECT 154400.0 205300.0 155000.0 205899.99999999997 ; + RECT 164000.0 205300.0 164600.00000000003 205899.99999999997 ; + RECT 154400.0 223700.0 155000.0 224300.0 ; + RECT 164000.0 223700.0 164600.00000000003 224300.0 ; + RECT 154400.0 242100.00000000003 155000.0 242700.0 ; + RECT 164000.0 242100.00000000003 164600.00000000003 242700.0 ; + RECT 154400.0 260500.0 155000.0 261100.00000000003 ; + RECT 164000.0 260500.0 164600.00000000003 261100.00000000003 ; + RECT 178300.0 126700.0 178900.0 127300.00000000001 ; + RECT 185100.00000000003 126700.0 185700.0 127300.00000000001 ; + RECT 191900.0 126700.0 192500.0 127300.00000000001 ; + RECT 178300.0 135900.0 178900.0 136500.0 ; + RECT 185100.00000000003 135900.0 185700.0 136500.0 ; + RECT 191900.0 135900.0 192500.0 136500.0 ; + RECT 178300.0 145100.00000000003 178900.0 145700.0 ; + RECT 185100.00000000003 145100.00000000003 185700.0 145700.0 ; + RECT 191900.0 145100.00000000003 192500.0 145700.0 ; + RECT 178300.0 154300.0 178900.0 154899.99999999997 ; + RECT 185100.00000000003 154300.0 185700.0 154899.99999999997 ; + RECT 191900.0 154300.0 192500.0 154899.99999999997 ; + RECT 178300.0 163500.0 178900.0 164100.00000000003 ; + RECT 185100.00000000003 163500.0 185700.0 164100.00000000003 ; + RECT 191900.0 163500.0 192500.0 164100.00000000003 ; + RECT 178300.0 172700.0 178900.0 173300.0 ; + RECT 185100.00000000003 172700.0 185700.0 173300.0 ; + RECT 191900.0 172700.0 192500.0 173300.0 ; + RECT 178300.0 181899.99999999997 178900.0 182500.0 ; + RECT 185100.00000000003 181899.99999999997 185700.0 182500.0 ; + RECT 191900.0 181899.99999999997 192500.0 182500.0 ; + RECT 178300.0 191100.00000000003 178900.0 191700.0 ; + RECT 185100.00000000003 191100.00000000003 185700.0 191700.0 ; + RECT 191900.0 191100.00000000003 192500.0 191700.0 ; + RECT 178300.0 200300.0 178900.0 200899.99999999997 ; + RECT 185100.00000000003 200300.0 185700.0 200899.99999999997 ; + RECT 191900.0 200300.0 192500.0 200899.99999999997 ; + RECT 178300.0 209500.0 178900.0 210100.00000000003 ; + RECT 185100.00000000003 209500.0 185700.0 210100.00000000003 ; + RECT 191900.0 209500.0 192500.0 210100.00000000003 ; + RECT 178300.0 218700.0 178900.0 219300.0 ; + RECT 185100.00000000003 218700.0 185700.0 219300.0 ; + RECT 191900.0 218700.0 192500.0 219300.0 ; + RECT 178300.0 227899.99999999997 178900.0 228500.0 ; + RECT 185100.00000000003 227899.99999999997 185700.0 228500.0 ; + RECT 191900.0 227899.99999999997 192500.0 228500.0 ; + RECT 178300.0 237100.00000000003 178900.0 237700.0 ; + RECT 185100.00000000003 237100.00000000003 185700.0 237700.0 ; + RECT 191900.0 237100.00000000003 192500.0 237700.0 ; + RECT 178300.0 246300.0 178900.0 246899.99999999997 ; + RECT 185100.00000000003 246300.0 185700.0 246899.99999999997 ; + RECT 191900.0 246300.0 192500.0 246899.99999999997 ; + RECT 178300.0 255500.0 178900.0 256100.00000000003 ; + RECT 185100.00000000003 255500.0 185700.0 256100.00000000003 ; + RECT 191900.0 255500.0 192500.0 256100.00000000003 ; + RECT 178300.0 264700.0 178900.0 265300.0 ; + RECT 185100.00000000003 264700.0 185700.0 265300.0 ; + RECT 191900.0 264700.0 192500.0 265300.0 ; + RECT 185100.00000000003 95100.00000000001 185700.0 95700.0 ; + RECT 191900.0 95100.00000000001 192500.0 95700.0 ; + RECT 182500.0 37099.99999999999 183100.00000000003 37700.0 ; + RECT 183900.0 41500.0 184500.0 42099.99999999999 ; + RECT 183300.0 54900.00000000001 183900.0 55500.0 ; + RECT 189300.0 37099.99999999999 189900.0 37700.0 ; + RECT 190700.0 41500.0 191300.0 42099.99999999999 ; + RECT 190100.00000000003 54900.00000000001 190700.0 55500.0 ; + RECT 130100.00000000003 122400.0 130900.0 123200.0 ; + RECT 130100.00000000003 140800.0 130900.0 141600.00000000003 ; + RECT 130100.00000000003 159200.0 130900.0 160000.0 ; + RECT 130100.00000000003 177600.00000000003 130900.0 178399.99999999997 ; + RECT 130100.00000000003 196000.0 130900.0 196800.0 ; + RECT 130100.00000000003 214399.99999999997 130900.0 215200.0 ; + RECT 130100.00000000003 232800.0 130900.0 233600.00000000003 ; + RECT 130100.00000000003 251200.0 130900.0 252000.0 ; + RECT 130100.00000000003 269600.0 130900.0 270400.0 ; + RECT 89700.0 122400.0 90500.0 123200.0 ; + RECT 107700.0 122400.0 108500.0 123200.0 ; + RECT 89700.0 140800.0 90500.0 141600.00000000003 ; + RECT 107700.0 140800.0 108500.0 141600.00000000003 ; + RECT 89700.0 159200.0 90500.0 160000.0 ; + RECT 107700.0 159200.0 108500.0 160000.0 ; + RECT 89700.0 177600.00000000003 90500.0 178399.99999999997 ; + RECT 107700.0 177600.00000000003 108500.0 178399.99999999997 ; + RECT 89700.0 196000.0 90500.0 196800.0 ; + RECT 107700.0 196000.0 108500.0 196800.0 ; + RECT 154400.0 122500.0 155000.0 123100.00000000001 ; + RECT 164000.0 122500.0 164600.00000000003 123100.00000000001 ; + RECT 154400.0 140900.0 155000.0 141500.0 ; + RECT 164000.0 140900.0 164600.00000000003 141500.0 ; + RECT 154400.0 159300.0 155000.0 159899.99999999997 ; + RECT 164000.0 159300.0 164600.00000000003 159899.99999999997 ; + RECT 154400.0 177700.0 155000.0 178300.0 ; + RECT 164000.0 177700.0 164600.00000000003 178300.0 ; + RECT 154400.0 196100.00000000003 155000.0 196700.0 ; + RECT 164000.0 196100.00000000003 164600.00000000003 196700.0 ; + RECT 154400.0 214500.0 155000.0 215100.00000000003 ; + RECT 164000.0 214500.0 164600.00000000003 215100.00000000003 ; + RECT 154400.0 232899.99999999997 155000.0 233500.0 ; + RECT 164000.0 232899.99999999997 164600.00000000003 233500.0 ; + RECT 154400.0 251300.0 155000.0 251899.99999999997 ; + RECT 164000.0 251300.0 164600.00000000003 251899.99999999997 ; + RECT 154400.0 269700.0 155000.0 270300.0 ; + RECT 164000.0 269700.0 164600.00000000003 270300.0 ; + RECT 1900.0000000000002 89500.0 48400.0 90100.0 ; + RECT 28500.0 50100.0 51600.0 50700.0 ; + RECT 29900.000000000004 28500.0 51600.00000000001 29100.0 ; + RECT 21200.000000000004 29100.0 21800.000000000004 29700.000000000004 ; + RECT 21200.000000000004 28900.000000000004 21800.000000000004 29500.0 ; + RECT 19200.000000000004 29100.0 21500.000000000004 29700.000000000004 ; + RECT 21200.000000000004 29200.000000000004 21800.000000000004 29400.000000000004 ; + RECT 21500.0 28900.000000000004 23800.0 29500.0 ; + RECT 18800.0 29000.0 19600.0 29800.000000000004 ; + RECT 23400.000000000004 28800.000000000004 24200.000000000004 29600.0 ; + RECT 21200.000000000004 50100.0 21800.000000000004 49500.0 ; + RECT 21200.000000000004 50300.0 21800.000000000004 49700.0 ; + RECT 19200.000000000004 50100.0 21500.000000000004 49500.0 ; + RECT 21200.000000000004 50000.0 21800.000000000004 49800.0 ; + RECT 21500.0 50300.0 23800.0 49700.0 ; + RECT 18800.0 50200.0 19600.0 49400.0 ; + RECT 23400.000000000004 50400.0 24200.000000000004 49600.0 ; + RECT 400.0 39200.0 -400.0 40000.0 ; + RECT 400.0 19200.000000000004 -400.0 20000.0 ; + RECT 400.0 39200.0 -400.0 40000.0 ; + RECT 400.0 59200.0 -400.0 60000.0 ; + RECT -400.0 39200.0 400.0 40000.0 ; + RECT -400.0 19200.000000000004 400.0 20000.0 ; + RECT -400.0 59200.0 400.0 60000.00000000001 ; + RECT 3600.0 137800.0 21200.000000000004 138400.0 ; + RECT 3600.0 147400.0 21200.000000000004 148000.0 ; + RECT 3600.0 156200.00000000003 21200.000000000004 156800.0 ; + RECT 3600.0 165800.0 21200.000000000004 166400.0 ; + RECT 8000.0 137700.00000000003 8800.0 138500.0 ; + RECT 14400.0 137700.00000000003 15200.000000000002 138500.0 ; + RECT 20800.0 137700.00000000003 21600.0 138500.0 ; + RECT 3200.0 137700.00000000003 4000.0 138500.0 ; + RECT 8000.0 147300.0 8800.0 148100.0 ; + RECT 14400.0 147300.0 15200.000000000002 148100.0 ; + RECT 20800.0 147300.0 21600.0 148100.0 ; + RECT 3200.0 147300.0 4000.0 148100.0 ; + RECT 8000.0 156100.0 8800.0 156900.0 ; + RECT 14400.0 156100.0 15200.000000000002 156900.0 ; + RECT 20800.0 156100.0 21600.0 156900.0 ; + RECT 3200.0 156100.0 4000.0 156900.0 ; + RECT 8000.0 165700.00000000003 8800.0 166500.0 ; + RECT 14400.0 165700.00000000003 15200.000000000002 166500.0 ; + RECT 20800.0 165700.00000000003 21600.0 166500.0 ; + RECT 3200.0 165700.00000000003 4000.0 166500.0 ; + RECT 13200.000000000002 142500.0 12400.0 143300.0 ; + RECT 13200.000000000002 133300.0 12400.0 134100.00000000003 ; + RECT 19600.0 142500.0 18800.0 143300.0 ; + RECT 19600.0 133300.0 18800.0 134100.00000000003 ; + RECT 13200.000000000002 160900.0 12400.0 161700.00000000003 ; + RECT 13200.000000000002 151700.00000000003 12400.0 152500.0 ; + RECT 19600.0 160900.0 18800.0 161700.00000000003 ; + RECT 19600.0 151700.00000000003 18800.0 152500.0 ; + RECT 13200.000000000002 170100.0 12400.0 170900.0 ; + RECT 19600.0 170100.0 18800.0 170900.0 ; + RECT 12400.0 142500.0 13200.000000000002 143300.0 ; + RECT 18800.0 142500.0 19600.0 143300.0 ; + RECT 12400.0 160900.0 13200.000000000002 161700.00000000003 ; + RECT 18800.0 160900.0 19600.0 161700.00000000003 ; + RECT 12400.0 133300.0 13200.000000000002 134100.00000000003 ; + RECT 18800.0 133300.0 19600.0 134100.00000000003 ; + RECT 12400.0 151700.00000000003 13200.000000000002 152500.0 ; + RECT 18800.0 151700.00000000003 19600.0 152500.0 ; + RECT 12400.0 170100.0 13200.000000000002 170900.0 ; + RECT 18800.0 170100.0 19600.0 170900.0 ; + RECT 31400.000000000004 142500.0 32200.000000000004 143300.0 ; + RECT 31400.000000000004 142500.0 32200.000000000004 143300.0 ; + RECT 31400.000000000004 160900.0 32200.000000000004 161700.00000000003 ; + RECT 31400.000000000004 160900.0 32200.000000000004 161700.00000000003 ; + RECT 31400.000000000004 179300.0 32200.000000000004 180100.0 ; + RECT 31400.000000000004 179300.0 32200.000000000004 180100.0 ; + RECT 31400.000000000004 197700.00000000003 32200.000000000004 198500.0 ; + RECT 31400.000000000004 197700.00000000003 32200.000000000004 198500.0 ; + RECT 28000.000000000004 137900.0 28800.0 138700.00000000003 ; + RECT 34800.00000000001 137900.0 35600.0 138700.00000000003 ; + RECT 28000.000000000004 147100.00000000003 28800.0 147900.0 ; + RECT 34800.00000000001 147100.00000000003 35600.0 147900.0 ; + RECT 28000.000000000004 156300.0 28800.0 157100.0 ; + RECT 34800.00000000001 156300.0 35600.0 157100.0 ; + RECT 28000.000000000004 165500.0 28800.0 166300.0 ; + RECT 34800.00000000001 165500.0 35600.0 166300.0 ; + RECT 28000.000000000004 174700.00000000003 28800.0 175500.0 ; + RECT 34800.00000000001 174700.00000000003 35600.0 175500.0 ; + RECT 28000.000000000004 183900.0 28800.0 184700.00000000003 ; + RECT 34800.00000000001 183900.0 35600.0 184700.00000000003 ; + RECT 28000.000000000004 193100.0 28800.0 193900.0 ; + RECT 34800.00000000001 193100.0 35600.0 193900.0 ; + RECT 28000.000000000004 202300.0 28800.0 203100.0 ; + RECT 34800.00000000001 202300.0 35600.0 203100.0 ; + RECT 31500.000000000004 142600.00000000003 32100.0 143200.00000000003 ; + RECT 31500.000000000004 161000.0 32100.0 161600.0 ; + RECT 31500.000000000004 179400.0 32100.0 180000.00000000003 ; + RECT 31500.000000000004 197800.0 32100.0 198400.0 ; + RECT 28100.0 138000.0 28700.000000000004 138600.00000000003 ; + RECT 34900.00000000001 138000.0 35500.0 138600.00000000003 ; + RECT 28100.0 147200.00000000003 28700.000000000004 147800.0 ; + RECT 34900.00000000001 147200.00000000003 35500.0 147800.0 ; + RECT 28100.0 156400.0 28700.000000000004 157000.0 ; + RECT 34900.00000000001 156400.0 35500.0 157000.0 ; + RECT 28100.0 165600.0 28700.000000000004 166200.00000000003 ; + RECT 34900.00000000001 165600.0 35500.0 166200.00000000003 ; + RECT 28100.0 174800.0 28700.000000000004 175400.0 ; + RECT 34900.00000000001 174800.0 35500.0 175400.0 ; + RECT 28100.0 184000.00000000003 28700.000000000004 184600.0 ; + RECT 34900.00000000001 184000.00000000003 35500.0 184600.0 ; + RECT 28100.0 193200.00000000003 28700.000000000004 193800.0 ; + RECT 34900.00000000001 193200.00000000003 35500.0 193800.0 ; + RECT 28100.0 202400.0 28700.000000000004 203000.0 ; + RECT 34900.00000000001 202400.0 35500.0 203000.0 ; + RECT 6800.000000000001 124100.00000000003 6000.000000000001 124900.0 ; + RECT 31400.000000000004 122700.00000000001 32200.000000000004 123500.0 ; + RECT 28800.0 128700.00000000001 28000.0 129500.0 ; + RECT 35600.0 128700.00000000001 34800.00000000001 129500.0 ; + RECT 37200.0 134700.00000000003 36400.00000000001 135500.0 ; + RECT 37200.0 150300.0 36400.00000000001 151100.0 ; + RECT 37200.0 153100.0 36400.00000000001 153900.0 ; + RECT 37200.0 168700.00000000003 36400.00000000001 169500.0 ; + RECT 37200.0 171500.0 36400.00000000001 172300.0 ; + RECT 37200.0 187100.0 36400.00000000001 187900.0 ; + RECT 37200.0 189900.0 36400.00000000001 190700.00000000003 ; + RECT 37200.0 205500.0 36400.00000000001 206299.99999999997 ; + RECT 17200.000000000004 129100.00000000003 18000.000000000004 129900.0 ; + RECT 31500.000000000004 142600.00000000003 32100.0 143200.00000000003 ; + RECT 31500.000000000004 161000.0 32100.0 161600.0 ; + RECT 31500.000000000004 179400.0 32100.0 180000.0 ; + RECT 31500.000000000004 197799.99999999997 32100.0 198400.0 ; + RECT 12400.000000000002 142500.0 13200.000000000002 143300.0 ; + RECT 18800.0 142500.0 19600.0 143300.0 ; + RECT 12400.000000000002 160900.0 13200.000000000002 161700.00000000003 ; + RECT 18800.0 160900.0 19600.0 161700.00000000003 ; + RECT 6000.0 124100.00000000003 6800.000000000001 124900.0 ; + RECT 31400.000000000004 122700.00000000001 32200.000000000004 123500.0 ; + RECT 17200.000000000004 129100.00000000003 18000.0 129900.0 ; + RECT 28100.0 138000.0 28700.000000000004 138600.00000000003 ; + RECT 34900.00000000001 138000.0 35500.0 138600.00000000003 ; + RECT 28100.0 147200.00000000003 28700.000000000004 147800.0 ; + RECT 34900.00000000001 147200.00000000003 35500.0 147800.0 ; + RECT 28100.0 156400.0 28700.000000000004 157000.0 ; + RECT 34900.00000000001 156400.0 35500.0 157000.0 ; + RECT 28100.0 165600.0 28700.000000000004 166200.00000000003 ; + RECT 34900.00000000001 165600.0 35500.0 166200.00000000003 ; + RECT 28100.0 174800.0 28700.000000000004 175400.0 ; + RECT 34900.00000000001 174800.0 35500.0 175400.0 ; + RECT 28100.0 184000.0 28700.000000000004 184600.0 ; + RECT 34900.00000000001 184000.0 35500.0 184600.0 ; + RECT 28100.0 193200.00000000003 28700.000000000004 193799.99999999997 ; + RECT 34900.00000000001 193200.00000000003 35500.0 193799.99999999997 ; + RECT 28100.0 202400.0 28700.000000000004 203000.0 ; + RECT 34900.00000000001 202400.0 35500.0 203000.0 ; + RECT 12400.000000000002 133300.0 13200.000000000002 134100.00000000003 ; + RECT 18800.0 133300.0 19600.0 134100.00000000003 ; + RECT 12400.000000000002 151700.00000000003 13200.000000000002 152500.0 ; + RECT 18800.0 151700.00000000003 19600.0 152500.0 ; + RECT 12400.000000000002 170100.0 13200.000000000002 170900.0 ; + RECT 18800.0 170100.0 19600.0 170900.0 ; + RECT 28000.000000000004 128700.00000000001 28800.0 129500.0 ; + RECT 34800.00000000001 128700.00000000001 35600.0 129500.0 ; + RECT 36400.00000000001 134700.00000000003 37200.0 135500.0 ; + RECT 36400.00000000001 150300.0 37200.0 151100.0 ; + RECT 36400.00000000001 153100.0 37200.0 153900.0 ; + RECT 36400.00000000001 168700.00000000003 37200.0 169500.0 ; + RECT 36400.00000000001 171500.0 37200.0 172300.0 ; + RECT 36400.00000000001 187100.0 37200.0 187900.0 ; + RECT 36400.00000000001 189900.0 37200.0 190700.00000000003 ; + RECT 36400.00000000001 205500.0 37200.0 206300.0 ; + RECT 2300.0000000000005 89400.0 1500.0000000000002 90199.99999999999 ; + RECT 48800.00000000001 89400.0 48000.00000000001 90199.99999999999 ; + RECT 28900.000000000004 50000.0 28100.0 50800.00000000001 ; + RECT 51200.0 50000.0 52000.0 50800.00000000001 ; + RECT 30300.0 28400.000000000004 29500.0 29200.000000000004 ; + RECT 51200.0 28400.000000000004 52000.0 29200.000000000004 ; + RECT 70000.0 39200.0 69200.0 40000.0 ; + RECT 70000.0 59200.0 69200.0 60000.0 ; + RECT 70000.0 19200.000000000004 69200.0 20000.0 ; + RECT 70000.0 79200.0 69200.0 80000.0 ; + RECT 70000.0 59200.0 69200.0 60000.0 ; + RECT 70000.0 79200.0 69200.0 80000.0 ; + RECT 70000.0 99200.00000000001 69200.0 100000.0 ; + RECT 70000.0 119200.00000000001 69200.0 120000.0 ; + RECT 70000.0 99200.00000000001 69200.0 100000.0 ; + RECT 69200.0 39200.0 70000.0 40000.0 ; + RECT 69200.0 79200.0 70000.0 80000.0 ; + RECT 69200.0 119200.00000000001 70000.0 120000.0 ; + RECT 31500.0 142600.0 32100.0 143200.00000000003 ; + RECT 31500.0 161000.0 32100.0 161600.0 ; + RECT 31500.0 179400.0 32100.0 180000.0 ; + RECT 31500.0 197800.0 32100.0 198400.0 ; + RECT 12400.0 142500.0 13200.000000000002 143300.0 ; + RECT 18800.0 142500.0 19600.0 143300.0 ; + RECT 12400.0 160900.0 13200.000000000002 161700.0 ; + RECT 18800.0 160900.0 19600.0 161700.0 ; + RECT 6000.0 124100.0 6800.000000000001 124900.0 ; + RECT 31400.000000000004 122700.00000000001 32200.000000000004 123500.0 ; + RECT 17200.0 129100.0 18000.0 129900.0 ; + RECT -400.0 39200.0 400.0 40000.0 ; + RECT 69200.0 59200.0 70000.0 60000.00000000001 ; + RECT 69200.0 19200.000000000004 70000.0 20000.0 ; + RECT 69200.0 99200.00000000001 70000.0 100000.0 ; + RECT 28100.0 138000.0 28700.000000000004 138600.0 ; + RECT 34900.0 138000.0 35500.0 138600.0 ; + RECT 28100.0 147200.00000000003 28700.000000000004 147800.0 ; + RECT 34900.0 147200.00000000003 35500.0 147800.0 ; + RECT 28100.0 156400.0 28700.000000000004 157000.0 ; + RECT 34900.0 156400.0 35500.0 157000.0 ; + RECT 28100.0 165600.0 28700.000000000004 166200.0 ; + RECT 34900.0 165600.0 35500.0 166200.0 ; + RECT 28100.0 174800.0 28700.000000000004 175400.0 ; + RECT 34900.0 174800.0 35500.0 175400.0 ; + RECT 28100.0 184000.0 28700.000000000004 184600.0 ; + RECT 34900.0 184000.0 35500.0 184600.0 ; + RECT 28100.0 193200.00000000003 28700.000000000004 193800.0 ; + RECT 34900.0 193200.00000000003 35500.0 193800.0 ; + RECT 28100.0 202400.0 28700.000000000004 203000.0 ; + RECT 34900.0 202400.0 35500.0 203000.0 ; + RECT 12400.0 133300.0 13200.000000000002 134100.0 ; + RECT 18800.0 133300.0 19600.0 134100.0 ; + RECT 12400.0 151700.0 13200.000000000002 152500.0 ; + RECT 18800.0 151700.0 19600.0 152500.0 ; + RECT 12400.0 170100.0 13200.000000000002 170900.0 ; + RECT 18800.0 170100.0 19600.0 170900.0 ; + RECT 28000.0 128700.00000000001 28800.0 129500.0 ; + RECT 34800.00000000001 128700.00000000001 35600.0 129500.0 ; + RECT 36400.0 134700.00000000003 37200.0 135500.0 ; + RECT 36400.0 150300.0 37200.0 151100.0 ; + RECT 36400.0 153100.0 37200.0 153900.0 ; + RECT 36400.0 168700.0 37200.0 169500.0 ; + RECT 36400.0 171500.0 37200.0 172300.0 ; + RECT 36400.0 187100.0 37200.0 187900.0 ; + RECT 36400.0 189900.0 37200.0 190700.00000000003 ; + RECT 36400.0 205500.0 37200.0 206300.0 ; + RECT -400.0 19200.000000000004 400.0 20000.0 ; + RECT -400.0 59200.0 400.0 60000.00000000001 ; + RECT 60500.0 231500.00000000003 59699.99999999999 232300.00000000003 ; + RECT 60500.0 211500.00000000003 59699.99999999999 212300.00000000003 ; + RECT 60500.0 231500.00000000003 59699.99999999999 232300.00000000003 ; + RECT 60500.0 251500.00000000003 59699.99999999999 252300.00000000003 ; + RECT 60500.0 271500.00000000006 59699.99999999999 272300.0 ; + RECT 60500.0 251500.00000000003 59699.99999999999 252300.00000000003 ; + RECT 60500.0 271500.00000000006 59699.99999999999 272300.0 ; + RECT 60500.0 291500.00000000006 59699.99999999999 292300.00000000006 ; + RECT 51999.99999999999 214900.00000000003 52800.0 215700.00000000006 ; + RECT 49199.99999999999 215000.00000000003 71000.0 215600.00000000003 ; + RECT 59699.99999999999 231500.00000000003 60500.0 232300.00000000003 ; + RECT 59699.99999999999 271500.00000000006 60500.0 272300.00000000006 ; + RECT 59699.99999999999 211500.00000000003 60500.0 212300.00000000003 ; + RECT 59699.99999999999 251500.00000000003 60500.0 252300.00000000003 ; + RECT 59699.99999999999 291500.00000000006 60500.0 292300.00000000006 ; + RECT 189900.00000000003 19600.0 189100.00000000003 20400.000000000004 ; + RECT 189900.00000000003 -400.0 189100.00000000003 400.0 ; + RECT 211700.00000000003 19600.0 210900.00000000003 20400.000000000004 ; + RECT 211700.00000000003 -400.0 210900.00000000003 400.0 ; + RECT 181400.00000000003 3000.0 182200.00000000003 3800.0 ; + RECT 203200.00000000003 3000.0 204000.00000000003 3800.0 ; + RECT 178600.00000000003 3100.0 222200.00000000003 3700.0 ; + RECT 189100.00000000003 19600.0 189900.00000000003 20400.000000000004 ; + RECT 210900.00000000003 19600.0 211700.00000000003 20400.000000000004 ; + RECT 189100.00000000003 -400.0 189900.00000000003 400.0 ; + RECT 210900.00000000003 -400.0 211700.00000000003 400.0 ; + RECT 173100.00000000003 3000.0 172300.0 3800.0 ; + RECT 72800.0 214900.00000000003 72000.0 215700.00000000006 ; + RECT 72800.0 50000.0 72000.0 50800.0 ; + RECT 177300.0 108400.0 176500.0 109200.0 ; + RECT 71399.99999999999 108400.0 70600.0 109200.0 ; + RECT 175900.0 68400.0 175100.0 69200.0 ; + RECT 71399.99999999999 68400.0 70600.0 69200.0 ; + RECT 174500.0 28400.000000000004 173700.0 29200.000000000004 ; + RECT 71399.99999999999 28400.000000000004 70600.0 29200.000000000004 ; + RECT 173100.00000000003 50000.0 172300.0 50800.0 ; + RECT 71399.99999999999 50000.0 70600.0 50800.0 ; + RECT 74600.0 221300.0 73800.0 222100.00000000003 ; + RECT 68800.0 221300.0 68000.0 222100.00000000003 ; + RECT 76000.0 241700.0 75200.0 242500.0 ; + RECT 68800.0 241700.0 68000.0 242500.0 ; + RECT 77399.99999999999 261300.0 76600.0 262100.00000000003 ; + RECT 68800.0 261300.0 68000.0 262100.00000000003 ; + RECT 78800.0 281700.0 78000.0 282500.0 ; + RECT 68800.0 281700.0 68000.0 282500.0 ; + RECT 1500.0 1500.0 3300.0 3300.0 ; + RECT 9900.0 1500.0 11700.000000000002 3300.0 ; + RECT 19500.0 1500.0 21300.0 3300.0 ; + RECT 29100.0 1500.0 30900.000000000004 3300.0 ; + RECT 38700.0 1500.0 40500.0 3300.0 ; + RECT 48300.00000000001 1500.0 50100.0 3300.0 ; + RECT 57900.00000000001 1500.0 59700.0 3300.0 ; + RECT 67500.0 1500.0 69300.0 3300.0 ; + RECT 77100.00000000001 1500.0 78900.0 3300.0 ; + RECT 86700.0 1500.0 88500.0 3300.0 ; + RECT 96300.00000000001 1500.0 98100.00000000001 3300.0 ; + RECT 105900.0 1500.0 107700.0 3300.0 ; + RECT 115500.00000000001 1500.0 117300.00000000001 3300.0 ; + RECT 125100.00000000001 1500.0 126900.0 3300.0 ; + RECT 134700.0 1500.0 136500.0 3300.0 ; + RECT 144299.99999999997 1500.0 146100.0 3300.0 ; + RECT 153900.0 1500.0 155700.00000000003 3300.0 ; + RECT 163500.0 1500.0 165300.0 3300.0 ; + RECT 1500.0 9900.0 3300.0 11700.000000000002 ; + RECT 9900.0 9900.0 11700.000000000002 11700.000000000002 ; + RECT 19500.0 9900.0 21300.0 11700.000000000002 ; + RECT 29100.0 9900.0 30900.000000000004 11700.000000000002 ; + RECT 38700.0 9900.0 40500.0 11700.000000000002 ; + RECT 48300.00000000001 9900.0 50100.0 11700.000000000002 ; + RECT 57900.00000000001 9900.0 59700.0 11700.000000000002 ; + RECT 67500.0 9900.0 69300.0 11700.000000000002 ; + RECT 77100.00000000001 9900.0 78900.0 11700.000000000002 ; + RECT 86700.0 9900.0 88500.0 11700.000000000002 ; + RECT 96300.00000000001 9900.0 98100.00000000001 11700.000000000002 ; + RECT 105900.0 9900.0 107700.0 11700.000000000002 ; + RECT 115500.00000000001 9900.0 117300.00000000001 11700.000000000002 ; + RECT 125100.00000000001 9900.0 126900.0 11700.000000000002 ; + RECT 134700.0 9900.0 136500.0 11700.000000000002 ; + RECT 144299.99999999997 9900.0 146100.0 11700.000000000002 ; + RECT 153900.0 9900.0 155700.00000000003 11700.000000000002 ; + RECT 163500.0 9900.0 165300.0 11700.000000000002 ; + RECT 173100.0 9900.0 174900.0 11700.000000000002 ; + RECT 182700.0 9900.0 184500.0 11700.000000000002 ; + RECT 192300.0 9900.0 194100.00000000003 11700.000000000002 ; + RECT 201900.0 9900.0 203700.00000000003 11700.000000000002 ; + RECT 211500.0 9900.0 213300.0 11700.000000000002 ; + RECT 221100.0 9900.0 222900.0 11700.000000000002 ; + RECT 229500.0 9900.0 231300.0 11700.000000000002 ; + RECT 1500.0 19500.0 3300.0 21300.0 ; + RECT 9900.0 19500.0 11700.000000000002 21300.0 ; + RECT 19500.0 19500.0 21300.0 21300.0 ; + RECT 29100.0 19500.0 30900.000000000004 21300.0 ; + RECT 38700.0 19500.0 40500.0 21300.0 ; + RECT 48300.00000000001 19500.0 50100.0 21300.0 ; + RECT 57900.00000000001 19500.0 59700.0 21300.0 ; + RECT 67500.0 19500.0 69300.0 21300.0 ; + RECT 77100.00000000001 19500.0 78900.0 21300.0 ; + RECT 86700.0 19500.0 88500.0 21300.0 ; + RECT 96300.00000000001 19500.0 98100.00000000001 21300.0 ; + RECT 105900.0 19500.0 107700.0 21300.0 ; + RECT 115500.00000000001 19500.0 117300.00000000001 21300.0 ; + RECT 125100.00000000001 19500.0 126900.0 21300.0 ; + RECT 134700.0 19500.0 136500.0 21300.0 ; + RECT 144299.99999999997 19500.0 146100.0 21300.0 ; + RECT 153900.0 19500.0 155700.00000000003 21300.0 ; + RECT 163500.0 19500.0 165300.0 21300.0 ; + RECT 173100.0 19500.0 174900.0 21300.0 ; + RECT 181500.0 19500.0 183300.0 21300.0 ; + RECT 221100.0 19500.0 222900.0 21300.0 ; + RECT 229500.0 19500.0 231300.0 21300.0 ; + RECT 201900.0 29100.0 203700.00000000003 30900.000000000004 ; + RECT 211500.0 29100.0 213300.0 30900.000000000004 ; + RECT 221100.0 29100.0 222900.0 30900.000000000004 ; + RECT 229500.0 29100.0 231300.0 30900.000000000004 ; + RECT 9900.0 38700.0 11700.000000000002 40500.0 ; + RECT 19500.0 38700.0 21300.0 40500.0 ; + RECT 29100.0 38700.0 30900.000000000004 40500.0 ; + RECT 38700.0 38700.0 40500.0 40500.0 ; + RECT 48300.00000000001 38700.0 50100.0 40500.0 ; + RECT 57900.00000000001 38700.0 59700.0 40500.0 ; + RECT 77100.00000000001 38700.0 78900.0 40500.0 ; + RECT 86700.0 38700.0 88500.0 40500.0 ; + RECT 96300.00000000001 38700.0 98100.00000000001 40500.0 ; + RECT 105900.0 38700.0 107700.0 40500.0 ; + RECT 115500.00000000001 38700.0 117300.00000000001 40500.0 ; + RECT 125100.00000000001 38700.0 126900.0 40500.0 ; + RECT 134700.0 38700.0 136500.0 40500.0 ; + RECT 144299.99999999997 38700.0 146100.0 40500.0 ; + RECT 153900.0 38700.0 155700.00000000003 40500.0 ; + RECT 163500.0 38700.0 165300.0 40500.0 ; + RECT 173100.0 38700.0 174900.0 40500.0 ; + RECT 182700.0 38700.0 184500.0 40500.0 ; + RECT 192300.0 38700.0 194100.00000000003 40500.0 ; + RECT 201900.0 38700.0 203700.00000000003 40500.0 ; + RECT 211500.0 38700.0 213300.0 40500.0 ; + RECT 221100.0 38700.0 222900.0 40500.0 ; + RECT 229500.0 38700.0 231300.0 40500.0 ; + RECT 201900.0 48300.00000000001 203700.00000000003 50100.0 ; + RECT 211500.0 48300.00000000001 213300.0 50100.0 ; + RECT 221100.0 48300.00000000001 222900.0 50100.0 ; + RECT 229500.0 48300.00000000001 231300.0 50100.0 ; + RECT 1500.0 57900.00000000001 3300.0 59700.0 ; + RECT 9900.0 57900.00000000001 11700.000000000002 59700.0 ; + RECT 19500.0 57900.00000000001 21300.0 59700.0 ; + RECT 29100.0 57900.00000000001 30900.000000000004 59700.0 ; + RECT 38700.0 57900.00000000001 40500.0 59700.0 ; + RECT 48300.00000000001 57900.00000000001 50100.0 59700.0 ; + RECT 57900.00000000001 57900.00000000001 59700.0 59700.0 ; + RECT 67500.0 57900.00000000001 69300.0 59700.0 ; + RECT 77100.00000000001 57900.00000000001 78900.0 59700.0 ; + RECT 86700.0 57900.00000000001 88500.0 59700.0 ; + RECT 96300.00000000001 57900.00000000001 98100.00000000001 59700.0 ; + RECT 105900.0 57900.00000000001 107700.0 59700.0 ; + RECT 115500.00000000001 57900.00000000001 117300.00000000001 59700.0 ; + RECT 125100.00000000001 57900.00000000001 126900.0 59700.0 ; + RECT 134700.0 57900.00000000001 136500.0 59700.0 ; + RECT 144299.99999999997 57900.00000000001 146100.0 59700.0 ; + RECT 153900.0 57900.00000000001 155700.00000000003 59700.0 ; + RECT 163500.0 57900.00000000001 165300.0 59700.0 ; + RECT 173100.0 57900.00000000001 174900.0 59700.0 ; + RECT 182700.0 57900.00000000001 184500.0 59700.0 ; + RECT 192300.0 57900.00000000001 194100.00000000003 59700.0 ; + RECT 201900.0 57900.00000000001 203700.00000000003 59700.0 ; + RECT 211500.0 57900.00000000001 213300.0 59700.0 ; + RECT 221100.0 57900.00000000001 222900.0 59700.0 ; + RECT 229500.0 57900.00000000001 231300.0 59700.0 ; + RECT 1500.0 67500.0 3300.0 69300.0 ; + RECT 9900.0 67500.0 11700.000000000002 69300.0 ; + RECT 19500.0 67500.0 21300.0 69300.0 ; + RECT 29100.0 67500.0 30900.000000000004 69300.0 ; + RECT 38700.0 67500.0 40500.0 69300.0 ; + RECT 48300.00000000001 67500.0 50100.0 69300.0 ; + RECT 57900.00000000001 67500.0 59700.0 69300.0 ; + RECT 182700.0 67500.0 184500.0 69300.0 ; + RECT 192300.0 67500.0 194100.00000000003 69300.0 ; + RECT 201900.0 67500.0 203700.00000000003 69300.0 ; + RECT 211500.0 67500.0 213300.0 69300.0 ; + RECT 221100.0 67500.0 222900.0 69300.0 ; + RECT 229500.0 67500.0 231300.0 69300.0 ; + RECT 1500.0 77100.00000000001 3300.0 78900.0 ; + RECT 9900.0 77100.00000000001 11700.000000000002 78900.0 ; + RECT 19500.0 77100.00000000001 21300.0 78900.0 ; + RECT 29100.0 77100.00000000001 30900.000000000004 78900.0 ; + RECT 38700.0 77100.00000000001 40500.0 78900.0 ; + RECT 48300.00000000001 77100.00000000001 50100.0 78900.0 ; + RECT 57900.00000000001 77100.00000000001 59700.0 78900.0 ; + RECT 77100.00000000001 77100.00000000001 78900.0 78900.0 ; + RECT 86700.0 77100.00000000001 88500.0 78900.0 ; + RECT 96300.00000000001 77100.00000000001 98100.00000000001 78900.0 ; + RECT 105900.0 77100.00000000001 107700.0 78900.0 ; + RECT 115500.00000000001 77100.00000000001 117300.00000000001 78900.0 ; + RECT 125100.00000000001 77100.00000000001 126900.0 78900.0 ; + RECT 134700.0 77100.00000000001 136500.0 78900.0 ; + RECT 144299.99999999997 77100.00000000001 146100.0 78900.0 ; + RECT 153900.0 77100.00000000001 155700.00000000003 78900.0 ; + RECT 163500.0 77100.00000000001 165300.0 78900.0 ; + RECT 173100.0 77100.00000000001 174900.0 78900.0 ; + RECT 182700.0 77100.00000000001 184500.0 78900.0 ; + RECT 192300.0 77100.00000000001 194100.00000000003 78900.0 ; + RECT 201900.0 77100.00000000001 203700.00000000003 78900.0 ; + RECT 211500.0 77100.00000000001 213300.0 78900.0 ; + RECT 221100.0 77100.00000000001 222900.0 78900.0 ; + RECT 229500.0 77100.00000000001 231300.0 78900.0 ; + RECT 57900.00000000001 86700.0 59700.0 88500.0 ; + RECT 67500.0 86700.0 69300.0 88500.0 ; + RECT 77100.00000000001 86700.0 78900.0 88500.0 ; + RECT 86700.0 86700.0 88500.0 88500.0 ; + RECT 96300.00000000001 86700.0 98100.00000000001 88500.0 ; + RECT 105900.0 86700.0 107700.0 88500.0 ; + RECT 115500.00000000001 86700.0 117300.00000000001 88500.0 ; + RECT 125100.00000000001 86700.0 126900.0 88500.0 ; + RECT 134700.0 86700.0 136500.0 88500.0 ; + RECT 144299.99999999997 86700.0 146100.0 88500.0 ; + RECT 153900.0 86700.0 155700.00000000003 88500.0 ; + RECT 163500.0 86700.0 165300.0 88500.0 ; + RECT 173100.0 86700.0 174900.0 88500.0 ; + RECT 182700.0 86700.0 184500.0 88500.0 ; + RECT 192300.0 86700.0 194100.00000000003 88500.0 ; + RECT 201900.0 86700.0 203700.00000000003 88500.0 ; + RECT 211500.0 86700.0 213300.0 88500.0 ; + RECT 221100.0 86700.0 222900.0 88500.0 ; + RECT 229500.0 86700.0 231300.0 88500.0 ; + RECT 1500.0 96300.00000000001 3300.0 98100.00000000001 ; + RECT 9900.0 96300.00000000001 11700.000000000002 98100.00000000001 ; + RECT 19500.0 96300.00000000001 21300.0 98100.00000000001 ; + RECT 29100.0 96300.00000000001 30900.000000000004 98100.00000000001 ; + RECT 38700.0 96300.00000000001 40500.0 98100.00000000001 ; + RECT 48300.00000000001 96300.00000000001 50100.0 98100.00000000001 ; + RECT 57900.00000000001 96300.00000000001 59700.0 98100.00000000001 ; + RECT 67500.0 96300.00000000001 69300.0 98100.00000000001 ; + RECT 77100.00000000001 96300.00000000001 78900.0 98100.00000000001 ; + RECT 86700.0 96300.00000000001 88500.0 98100.00000000001 ; + RECT 96300.00000000001 96300.00000000001 98100.00000000001 98100.00000000001 ; + RECT 105900.0 96300.00000000001 107700.0 98100.00000000001 ; + RECT 115500.00000000001 96300.00000000001 117300.00000000001 98100.00000000001 ; + RECT 125100.00000000001 96300.00000000001 126900.0 98100.00000000001 ; + RECT 134700.0 96300.00000000001 136500.0 98100.00000000001 ; + RECT 144299.99999999997 96300.00000000001 146100.0 98100.00000000001 ; + RECT 153900.0 96300.00000000001 155700.00000000003 98100.00000000001 ; + RECT 163500.0 96300.00000000001 165300.0 98100.00000000001 ; + RECT 173100.0 96300.00000000001 174900.0 98100.00000000001 ; + RECT 182700.0 96300.00000000001 184500.0 98100.00000000001 ; + RECT 192300.0 96300.00000000001 194100.00000000003 98100.00000000001 ; + RECT 201900.0 96300.00000000001 203700.00000000003 98100.00000000001 ; + RECT 211500.0 96300.00000000001 213300.0 98100.00000000001 ; + RECT 221100.0 96300.00000000001 222900.0 98100.00000000001 ; + RECT 229500.0 96300.00000000001 231300.0 98100.00000000001 ; + RECT 1500.0 105900.0 3300.0 107700.0 ; + RECT 9900.0 105900.0 11700.000000000002 107700.0 ; + RECT 19500.0 105900.0 21300.0 107700.0 ; + RECT 29100.0 105900.0 30900.000000000004 107700.0 ; + RECT 38700.0 105900.0 40500.0 107700.0 ; + RECT 48300.00000000001 105900.0 50100.0 107700.0 ; + RECT 57900.00000000001 105900.0 59700.0 107700.0 ; + RECT 183900.0 105900.0 185700.00000000003 107700.0 ; + RECT 192300.0 105900.0 194100.00000000003 107700.0 ; + RECT 201900.0 105900.0 203700.00000000003 107700.0 ; + RECT 211500.0 105900.0 213300.0 107700.0 ; + RECT 221100.0 105900.0 222900.0 107700.0 ; + RECT 229500.0 105900.0 231300.0 107700.0 ; + RECT 1500.0 115500.00000000001 3300.0 117300.00000000001 ; + RECT 9900.0 115500.00000000001 11700.000000000002 117300.00000000001 ; + RECT 19500.0 115500.00000000001 21300.0 117300.00000000001 ; + RECT 29100.0 115500.00000000001 30900.000000000004 117300.00000000001 ; + RECT 38700.0 115500.00000000001 40500.0 117300.00000000001 ; + RECT 48300.00000000001 115500.00000000001 50100.0 117300.00000000001 ; + RECT 57900.00000000001 115500.00000000001 59700.0 117300.00000000001 ; + RECT 67500.0 115500.00000000001 69300.0 117300.00000000001 ; + RECT 77100.00000000001 115500.00000000001 78900.0 117300.00000000001 ; + RECT 86700.0 115500.00000000001 88500.0 117300.00000000001 ; + RECT 96300.00000000001 115500.00000000001 98100.00000000001 117300.00000000001 ; + RECT 105900.0 115500.00000000001 107700.0 117300.00000000001 ; + RECT 115500.00000000001 115500.00000000001 117300.00000000001 117300.00000000001 ; + RECT 125100.00000000001 115500.00000000001 126900.0 117300.00000000001 ; + RECT 134700.0 115500.00000000001 136500.0 117300.00000000001 ; + RECT 144299.99999999997 115500.00000000001 146100.0 117300.00000000001 ; + RECT 153900.0 115500.00000000001 155700.00000000003 117300.00000000001 ; + RECT 163500.0 115500.00000000001 165300.0 117300.00000000001 ; + RECT 173100.0 115500.00000000001 174900.0 117300.00000000001 ; + RECT 182700.0 115500.00000000001 184500.0 117300.00000000001 ; + RECT 192300.0 115500.00000000001 194100.00000000003 117300.00000000001 ; + RECT 201900.0 115500.00000000001 203700.00000000003 117300.00000000001 ; + RECT 211500.0 115500.00000000001 213300.0 117300.00000000001 ; + RECT 221100.0 115500.00000000001 222900.0 117300.00000000001 ; + RECT 229500.0 115500.00000000001 231300.0 117300.00000000001 ; + RECT 39900.00000000001 125100.00000000001 41700.0 126900.0 ; + RECT 48300.00000000001 125100.00000000001 50100.0 126900.0 ; + RECT 57900.00000000001 125100.00000000001 59700.0 126900.0 ; + RECT 67500.0 125100.00000000001 69300.0 126900.0 ; + RECT 77100.00000000001 125100.00000000001 78900.0 126900.0 ; + RECT 86700.0 125100.00000000001 88500.0 126900.0 ; + RECT 96300.00000000001 125100.00000000001 98100.00000000001 126900.0 ; + RECT 105900.0 125100.00000000001 107700.0 126900.0 ; + RECT 115500.00000000001 125100.00000000001 117300.00000000001 126900.0 ; + RECT 125100.00000000001 125100.00000000001 126900.0 126900.0 ; + RECT 134700.0 125100.00000000001 136500.0 126900.0 ; + RECT 144299.99999999997 125100.00000000001 146100.0 126900.0 ; + RECT 153900.0 125100.00000000001 155700.00000000003 126900.0 ; + RECT 163500.0 125100.00000000001 165300.0 126900.0 ; + RECT 173100.0 125100.00000000001 174900.0 126900.0 ; + RECT 182700.0 125100.00000000001 184500.0 126900.0 ; + RECT 192300.0 125100.00000000001 194100.00000000003 126900.0 ; + RECT 201900.0 125100.00000000001 203700.00000000003 126900.0 ; + RECT 211500.0 125100.00000000001 213300.0 126900.0 ; + RECT 221100.0 125100.00000000001 222900.0 126900.0 ; + RECT 229500.0 125100.00000000001 231300.0 126900.0 ; + RECT 29100.0 134700.0 30900.000000000004 136500.0 ; + RECT 38700.0 134700.0 40500.0 136500.0 ; + RECT 48300.00000000001 134700.0 50100.0 136500.0 ; + RECT 57900.00000000001 134700.0 59700.0 136500.0 ; + RECT 66300.00000000001 134700.0 68100.00000000001 136500.0 ; + RECT 87900.0 134700.0 89700.0 136500.0 ; + RECT 96300.00000000001 134700.0 98100.00000000001 136500.0 ; + RECT 105900.0 134700.0 107700.0 136500.0 ; + RECT 115500.00000000001 134700.0 117300.00000000001 136500.0 ; + RECT 125100.00000000001 134700.0 126900.0 136500.0 ; + RECT 134700.0 134700.0 136500.0 136500.0 ; + RECT 144299.99999999997 134700.0 146100.0 136500.0 ; + RECT 153900.0 134700.0 155700.00000000003 136500.0 ; + RECT 163500.0 134700.0 165300.0 136500.0 ; + RECT 173100.0 134700.0 174900.0 136500.0 ; + RECT 182700.0 134700.0 184500.0 136500.0 ; + RECT 192300.0 134700.0 194100.00000000003 136500.0 ; + RECT 201900.0 134700.0 203700.00000000003 136500.0 ; + RECT 211500.0 134700.0 213300.0 136500.0 ; + RECT 221100.0 134700.0 222900.0 136500.0 ; + RECT 229500.0 134700.0 231300.0 136500.0 ; + RECT 39900.00000000001 144299.99999999997 41700.0 146100.0 ; + RECT 48300.00000000001 144299.99999999997 50100.0 146100.0 ; + RECT 57900.00000000001 144299.99999999997 59700.0 146100.0 ; + RECT 66300.00000000001 144299.99999999997 68100.00000000001 146100.0 ; + RECT 96300.00000000001 144299.99999999997 98100.00000000001 146100.0 ; + RECT 105900.0 144299.99999999997 107700.0 146100.0 ; + RECT 115500.00000000001 144299.99999999997 117300.00000000001 146100.0 ; + RECT 125100.00000000001 144299.99999999997 126900.0 146100.0 ; + RECT 134700.0 144299.99999999997 136500.0 146100.0 ; + RECT 144299.99999999997 144299.99999999997 146100.0 146100.0 ; + RECT 153900.0 144299.99999999997 155700.00000000003 146100.0 ; + RECT 163500.0 144299.99999999997 165300.0 146100.0 ; + RECT 173100.0 144299.99999999997 174900.0 146100.0 ; + RECT 182700.0 144299.99999999997 184500.0 146100.0 ; + RECT 192300.0 144299.99999999997 194100.00000000003 146100.0 ; + RECT 201900.0 144299.99999999997 203700.00000000003 146100.0 ; + RECT 211500.0 144299.99999999997 213300.0 146100.0 ; + RECT 221100.0 144299.99999999997 222900.0 146100.0 ; + RECT 229500.0 144299.99999999997 231300.0 146100.0 ; + RECT 29100.0 153900.0 30900.000000000004 155700.00000000003 ; + RECT 38700.0 153900.0 40500.0 155700.00000000003 ; + RECT 48300.00000000001 153900.0 50100.0 155700.00000000003 ; + RECT 57900.00000000001 153900.0 59700.0 155700.00000000003 ; + RECT 67500.0 153900.0 69300.0 155700.00000000003 ; + RECT 77100.00000000001 153900.0 78900.0 155700.00000000003 ; + RECT 86700.0 153900.0 88500.0 155700.00000000003 ; + RECT 96300.00000000001 153900.0 98100.00000000001 155700.00000000003 ; + RECT 105900.0 153900.0 107700.0 155700.00000000003 ; + RECT 115500.00000000001 153900.0 117300.00000000001 155700.00000000003 ; + RECT 125100.00000000001 153900.0 126900.0 155700.00000000003 ; + RECT 134700.0 153900.0 136500.0 155700.00000000003 ; + RECT 144299.99999999997 153900.0 146100.0 155700.00000000003 ; + RECT 153900.0 153900.0 155700.00000000003 155700.00000000003 ; + RECT 163500.0 153900.0 165300.0 155700.00000000003 ; + RECT 173100.0 153900.0 174900.0 155700.00000000003 ; + RECT 182700.0 153900.0 184500.0 155700.00000000003 ; + RECT 192300.0 153900.0 194100.00000000003 155700.00000000003 ; + RECT 201900.0 153900.0 203700.00000000003 155700.00000000003 ; + RECT 211500.0 153900.0 213300.0 155700.00000000003 ; + RECT 221100.0 153900.0 222900.0 155700.00000000003 ; + RECT 229500.0 153900.0 231300.0 155700.00000000003 ; + RECT 39900.00000000001 163500.0 41700.0 165300.0 ; + RECT 48300.00000000001 163500.0 50100.0 165300.0 ; + RECT 57900.00000000001 163500.0 59700.0 165300.0 ; + RECT 67500.0 163500.0 69300.0 165300.0 ; + RECT 77100.00000000001 163500.0 78900.0 165300.0 ; + RECT 86700.0 163500.0 88500.0 165300.0 ; + RECT 96300.00000000001 163500.0 98100.00000000001 165300.0 ; + RECT 105900.0 163500.0 107700.0 165300.0 ; + RECT 115500.00000000001 163500.0 117300.00000000001 165300.0 ; + RECT 125100.00000000001 163500.0 126900.0 165300.0 ; + RECT 134700.0 163500.0 136500.0 165300.0 ; + RECT 144299.99999999997 163500.0 146100.0 165300.0 ; + RECT 153900.0 163500.0 155700.00000000003 165300.0 ; + RECT 163500.0 163500.0 165300.0 165300.0 ; + RECT 173100.0 163500.0 174900.0 165300.0 ; + RECT 182700.0 163500.0 184500.0 165300.0 ; + RECT 192300.0 163500.0 194100.00000000003 165300.0 ; + RECT 201900.0 163500.0 203700.00000000003 165300.0 ; + RECT 211500.0 163500.0 213300.0 165300.0 ; + RECT 221100.0 163500.0 222900.0 165300.0 ; + RECT 229500.0 163500.0 231300.0 165300.0 ; + RECT 1500.0 173100.0 3300.0 174900.0 ; + RECT 9900.0 173100.0 11700.000000000002 174900.0 ; + RECT 19500.0 173100.0 21300.0 174900.0 ; + RECT 29100.0 173100.0 30900.000000000004 174900.0 ; + RECT 38700.0 173100.0 40500.0 174900.0 ; + RECT 48300.00000000001 173100.0 50100.0 174900.0 ; + RECT 57900.00000000001 173100.0 59700.0 174900.0 ; + RECT 67500.0 173100.0 69300.0 174900.0 ; + RECT 77100.00000000001 173100.0 78900.0 174900.0 ; + RECT 86700.0 173100.0 88500.0 174900.0 ; + RECT 96300.00000000001 173100.0 98100.00000000001 174900.0 ; + RECT 105900.0 173100.0 107700.0 174900.0 ; + RECT 115500.00000000001 173100.0 117300.00000000001 174900.0 ; + RECT 125100.00000000001 173100.0 126900.0 174900.0 ; + RECT 134700.0 173100.0 136500.0 174900.0 ; + RECT 144299.99999999997 173100.0 146100.0 174900.0 ; + RECT 153900.0 173100.0 155700.00000000003 174900.0 ; + RECT 163500.0 173100.0 165300.0 174900.0 ; + RECT 173100.0 173100.0 174900.0 174900.0 ; + RECT 182700.0 173100.0 184500.0 174900.0 ; + RECT 192300.0 173100.0 194100.00000000003 174900.0 ; + RECT 201900.0 173100.0 203700.00000000003 174900.0 ; + RECT 211500.0 173100.0 213300.0 174900.0 ; + RECT 221100.0 173100.0 222900.0 174900.0 ; + RECT 229500.0 173100.0 231300.0 174900.0 ; + RECT 1500.0 182700.0 3300.0 184500.0 ; + RECT 9900.0 182700.0 11700.000000000002 184500.0 ; + RECT 19500.0 182700.0 21300.0 184500.0 ; + RECT 29100.0 182700.0 30900.000000000004 184500.0 ; + RECT 38700.0 182700.0 40500.0 184500.0 ; + RECT 48300.00000000001 182700.0 50100.0 184500.0 ; + RECT 57900.00000000001 182700.0 59700.0 184500.0 ; + RECT 67500.0 182700.0 69300.0 184500.0 ; + RECT 77100.00000000001 182700.0 78900.0 184500.0 ; + RECT 86700.0 182700.0 88500.0 184500.0 ; + RECT 96300.00000000001 182700.0 98100.00000000001 184500.0 ; + RECT 105900.0 182700.0 107700.0 184500.0 ; + RECT 115500.00000000001 182700.0 117300.00000000001 184500.0 ; + RECT 125100.00000000001 182700.0 126900.0 184500.0 ; + RECT 134700.0 182700.0 136500.0 184500.0 ; + RECT 144299.99999999997 182700.0 146100.0 184500.0 ; + RECT 153900.0 182700.0 155700.00000000003 184500.0 ; + RECT 163500.0 182700.0 165300.0 184500.0 ; + RECT 173100.0 182700.0 174900.0 184500.0 ; + RECT 182700.0 182700.0 184500.0 184500.0 ; + RECT 192300.0 182700.0 194100.00000000003 184500.0 ; + RECT 201900.0 182700.0 203700.00000000003 184500.0 ; + RECT 211500.0 182700.0 213300.0 184500.0 ; + RECT 221100.0 182700.0 222900.0 184500.0 ; + RECT 229500.0 182700.0 231300.0 184500.0 ; + RECT 1500.0 192300.0 3300.0 194100.00000000003 ; + RECT 9900.0 192300.0 11700.000000000002 194100.00000000003 ; + RECT 19500.0 192300.0 21300.0 194100.00000000003 ; + RECT 29100.0 192300.0 30900.000000000004 194100.00000000003 ; + RECT 38700.0 192300.0 40500.0 194100.00000000003 ; + RECT 48300.00000000001 192300.0 50100.0 194100.00000000003 ; + RECT 57900.00000000001 192300.0 59700.0 194100.00000000003 ; + RECT 67500.0 192300.0 69300.0 194100.00000000003 ; + RECT 77100.00000000001 192300.0 78900.0 194100.00000000003 ; + RECT 86700.0 192300.0 88500.0 194100.00000000003 ; + RECT 96300.00000000001 192300.0 98100.00000000001 194100.00000000003 ; + RECT 105900.0 192300.0 107700.0 194100.00000000003 ; + RECT 115500.00000000001 192300.0 117300.00000000001 194100.00000000003 ; + RECT 125100.00000000001 192300.0 126900.0 194100.00000000003 ; + RECT 134700.0 192300.0 136500.0 194100.00000000003 ; + RECT 144299.99999999997 192300.0 146100.0 194100.00000000003 ; + RECT 153900.0 192300.0 155700.00000000003 194100.00000000003 ; + RECT 163500.0 192300.0 165300.0 194100.00000000003 ; + RECT 173100.0 192300.0 174900.0 194100.00000000003 ; + RECT 182700.0 192300.0 184500.0 194100.00000000003 ; + RECT 192300.0 192300.0 194100.00000000003 194100.00000000003 ; + RECT 201900.0 192300.0 203700.00000000003 194100.00000000003 ; + RECT 211500.0 192300.0 213300.0 194100.00000000003 ; + RECT 221100.0 192300.0 222900.0 194100.00000000003 ; + RECT 229500.0 192300.0 231300.0 194100.00000000003 ; + RECT 1500.0 201900.0 3300.0 203700.00000000003 ; + RECT 9900.0 201900.0 11700.000000000002 203700.00000000003 ; + RECT 19500.0 201900.0 21300.0 203700.00000000003 ; + RECT 29100.0 201900.0 30900.000000000004 203700.00000000003 ; + RECT 38700.0 201900.0 40500.0 203700.00000000003 ; + RECT 48300.00000000001 201900.0 50100.0 203700.00000000003 ; + RECT 57900.00000000001 201900.0 59700.0 203700.00000000003 ; + RECT 67500.0 201900.0 69300.0 203700.00000000003 ; + RECT 77100.00000000001 201900.0 78900.0 203700.00000000003 ; + RECT 86700.0 201900.0 88500.0 203700.00000000003 ; + RECT 96300.00000000001 201900.0 98100.00000000001 203700.00000000003 ; + RECT 105900.0 201900.0 107700.0 203700.00000000003 ; + RECT 115500.00000000001 201900.0 117300.00000000001 203700.00000000003 ; + RECT 201900.0 201900.0 203700.00000000003 203700.00000000003 ; + RECT 211500.0 201900.0 213300.0 203700.00000000003 ; + RECT 221100.0 201900.0 222900.0 203700.00000000003 ; + RECT 229500.0 201900.0 231300.0 203700.00000000003 ; + RECT 1500.0 211500.0 3300.0 213300.0 ; + RECT 9900.0 211500.0 11700.000000000002 213300.0 ; + RECT 19500.0 211500.0 21300.0 213300.0 ; + RECT 29100.0 211500.0 30900.000000000004 213300.0 ; + RECT 38700.0 211500.0 40500.0 213300.0 ; + RECT 78300.00000000001 211500.0 80100.00000000001 213300.0 ; + RECT 86700.0 211500.0 88500.0 213300.0 ; + RECT 96300.00000000001 211500.0 98100.00000000001 213300.0 ; + RECT 105900.0 211500.0 107700.0 213300.0 ; + RECT 115500.00000000001 211500.0 117300.00000000001 213300.0 ; + RECT 125100.00000000001 211500.0 126900.0 213300.0 ; + RECT 134700.0 211500.0 136500.0 213300.0 ; + RECT 144299.99999999997 211500.0 146100.0 213300.0 ; + RECT 153900.0 211500.0 155700.00000000003 213300.0 ; + RECT 163500.0 211500.0 165300.0 213300.0 ; + RECT 173100.0 211500.0 174900.0 213300.0 ; + RECT 182700.0 211500.0 184500.0 213300.0 ; + RECT 192300.0 211500.0 194100.00000000003 213300.0 ; + RECT 201900.0 211500.0 203700.00000000003 213300.0 ; + RECT 211500.0 211500.0 213300.0 213300.0 ; + RECT 221100.0 211500.0 222900.0 213300.0 ; + RECT 229500.0 211500.0 231300.0 213300.0 ; + RECT 1500.0 221100.0 3300.0 222900.0 ; + RECT 9900.0 221100.0 11700.000000000002 222900.0 ; + RECT 19500.0 221100.0 21300.0 222900.0 ; + RECT 29100.0 221100.0 30900.000000000004 222900.0 ; + RECT 38700.0 221100.0 40500.0 222900.0 ; + RECT 48300.00000000001 221100.0 50100.0 222900.0 ; + RECT 57900.00000000001 221100.0 59700.0 222900.0 ; + RECT 86700.0 221100.0 88500.0 222900.0 ; + RECT 96300.00000000001 221100.0 98100.00000000001 222900.0 ; + RECT 105900.0 221100.0 107700.0 222900.0 ; + RECT 115500.00000000001 221100.0 117300.00000000001 222900.0 ; + RECT 201900.0 221100.0 203700.00000000003 222900.0 ; + RECT 211500.0 221100.0 213300.0 222900.0 ; + RECT 221100.0 221100.0 222900.0 222900.0 ; + RECT 229500.0 221100.0 231300.0 222900.0 ; + RECT 1500.0 230700.0 3300.0 232500.0 ; + RECT 9900.0 230700.0 11700.000000000002 232500.0 ; + RECT 19500.0 230700.0 21300.0 232500.0 ; + RECT 29100.0 230700.0 30900.000000000004 232500.0 ; + RECT 38700.0 230700.0 40500.0 232500.0 ; + RECT 48300.00000000001 230700.0 50100.0 232500.0 ; + RECT 67500.0 230700.0 69300.0 232500.0 ; + RECT 77100.00000000001 230700.0 78900.0 232500.0 ; + RECT 86700.0 230700.0 88500.0 232500.0 ; + RECT 96300.00000000001 230700.0 98100.00000000001 232500.0 ; + RECT 105900.0 230700.0 107700.0 232500.0 ; + RECT 115500.00000000001 230700.0 117300.00000000001 232500.0 ; + RECT 125100.00000000001 230700.0 126900.0 232500.0 ; + RECT 134700.0 230700.0 136500.0 232500.0 ; + RECT 144299.99999999997 230700.0 146100.0 232500.0 ; + RECT 153900.0 230700.0 155700.00000000003 232500.0 ; + RECT 163500.0 230700.0 165300.0 232500.0 ; + RECT 173100.0 230700.0 174900.0 232500.0 ; + RECT 182700.0 230700.0 184500.0 232500.0 ; + RECT 192300.0 230700.0 194100.00000000003 232500.0 ; + RECT 201900.0 230700.0 203700.00000000003 232500.0 ; + RECT 211500.0 230700.0 213300.0 232500.0 ; + RECT 221100.0 230700.0 222900.0 232500.0 ; + RECT 229500.0 230700.0 231300.0 232500.0 ; + RECT 1500.0 240300.0 3300.0 242100.00000000003 ; + RECT 9900.0 240300.0 11700.000000000002 242100.00000000003 ; + RECT 19500.0 240300.0 21300.0 242100.00000000003 ; + RECT 29100.0 240300.0 30900.000000000004 242100.00000000003 ; + RECT 38700.0 240300.0 40500.0 242100.00000000003 ; + RECT 48300.00000000001 240300.0 50100.0 242100.00000000003 ; + RECT 57900.00000000001 240300.0 59700.0 242100.00000000003 ; + RECT 86700.0 240300.0 88500.0 242100.00000000003 ; + RECT 96300.00000000001 240300.0 98100.00000000001 242100.00000000003 ; + RECT 105900.0 240300.0 107700.0 242100.00000000003 ; + RECT 115500.00000000001 240300.0 117300.00000000001 242100.00000000003 ; + RECT 201900.0 240300.0 203700.00000000003 242100.00000000003 ; + RECT 211500.0 240300.0 213300.0 242100.00000000003 ; + RECT 221100.0 240300.0 222900.0 242100.00000000003 ; + RECT 229500.0 240300.0 231300.0 242100.00000000003 ; + RECT 1500.0 249900.0 3300.0 251700.00000000003 ; + RECT 9900.0 249900.0 11700.000000000002 251700.00000000003 ; + RECT 19500.0 249900.0 21300.0 251700.00000000003 ; + RECT 29100.0 249900.0 30900.000000000004 251700.00000000003 ; + RECT 38700.0 249900.0 40500.0 251700.00000000003 ; + RECT 48300.00000000001 249900.0 50100.0 251700.00000000003 ; + RECT 57900.00000000001 249900.0 59700.0 251700.00000000003 ; + RECT 67500.0 249900.0 69300.0 251700.00000000003 ; + RECT 77100.00000000001 249900.0 78900.0 251700.00000000003 ; + RECT 86700.0 249900.0 88500.0 251700.00000000003 ; + RECT 96300.00000000001 249900.0 98100.00000000001 251700.00000000003 ; + RECT 105900.0 249900.0 107700.0 251700.00000000003 ; + RECT 115500.00000000001 249900.0 117300.00000000001 251700.00000000003 ; + RECT 125100.00000000001 249900.0 126900.0 251700.00000000003 ; + RECT 134700.0 249900.0 136500.0 251700.00000000003 ; + RECT 144299.99999999997 249900.0 146100.0 251700.00000000003 ; + RECT 153900.0 249900.0 155700.00000000003 251700.00000000003 ; + RECT 163500.0 249900.0 165300.0 251700.00000000003 ; + RECT 173100.0 249900.0 174900.0 251700.00000000003 ; + RECT 182700.0 249900.0 184500.0 251700.00000000003 ; + RECT 192300.0 249900.0 194100.00000000003 251700.00000000003 ; + RECT 201900.0 249900.0 203700.00000000003 251700.00000000003 ; + RECT 211500.0 249900.0 213300.0 251700.00000000003 ; + RECT 221100.0 249900.0 222900.0 251700.00000000003 ; + RECT 229500.0 249900.0 231300.0 251700.00000000003 ; + RECT 1500.0 259500.0 3300.0 261300.0 ; + RECT 9900.0 259500.0 11700.000000000002 261300.0 ; + RECT 19500.0 259500.0 21300.0 261300.0 ; + RECT 29100.0 259500.0 30900.000000000004 261300.0 ; + RECT 38700.0 259500.0 40500.0 261300.0 ; + RECT 48300.00000000001 259500.0 50100.0 261300.0 ; + RECT 57900.00000000001 259500.0 59700.0 261300.0 ; + RECT 86700.0 259500.0 88500.0 261300.0 ; + RECT 96300.00000000001 259500.0 98100.00000000001 261300.0 ; + RECT 105900.0 259500.0 107700.0 261300.0 ; + RECT 115500.00000000001 259500.0 117300.00000000001 261300.0 ; + RECT 201900.0 259500.0 203700.00000000003 261300.0 ; + RECT 211500.0 259500.0 213300.0 261300.0 ; + RECT 221100.0 259500.0 222900.0 261300.0 ; + RECT 229500.0 259500.0 231300.0 261300.0 ; + RECT 1500.0 269100.0 3300.0 270900.00000000006 ; + RECT 9900.0 269100.0 11700.000000000002 270900.00000000006 ; + RECT 19500.0 269100.0 21300.0 270900.00000000006 ; + RECT 29100.0 269100.0 30900.000000000004 270900.00000000006 ; + RECT 38700.0 269100.0 40500.0 270900.00000000006 ; + RECT 48300.00000000001 269100.0 50100.0 270900.00000000006 ; + RECT 67500.0 269100.0 69300.0 270900.00000000006 ; + RECT 77100.00000000001 269100.0 78900.0 270900.00000000006 ; + RECT 86700.0 269100.0 88500.0 270900.00000000006 ; + RECT 96300.00000000001 269100.0 98100.00000000001 270900.00000000006 ; + RECT 105900.0 269100.0 107700.0 270900.00000000006 ; + RECT 115500.00000000001 269100.0 117300.00000000001 270900.00000000006 ; + RECT 125100.00000000001 269100.0 126900.0 270900.00000000006 ; + RECT 134700.0 269100.0 136500.0 270900.00000000006 ; + RECT 144299.99999999997 269100.0 146100.0 270900.00000000006 ; + RECT 153900.0 269100.0 155700.00000000003 270900.00000000006 ; + RECT 163500.0 269100.0 165300.0 270900.00000000006 ; + RECT 173100.0 269100.0 174900.0 270900.00000000006 ; + RECT 182700.0 269100.0 184500.0 270900.00000000006 ; + RECT 192300.0 269100.0 194100.00000000003 270900.00000000006 ; + RECT 201900.0 269100.0 203700.00000000003 270900.00000000006 ; + RECT 211500.0 269100.0 213300.0 270900.00000000006 ; + RECT 221100.0 269100.0 222900.0 270900.00000000006 ; + RECT 229500.0 269100.0 231300.0 270900.00000000006 ; + RECT 1500.0 278700.0 3300.0 280500.0 ; + RECT 9900.0 278700.0 11700.000000000002 280500.0 ; + RECT 19500.0 278700.0 21300.0 280500.0 ; + RECT 29100.0 278700.0 30900.000000000004 280500.0 ; + RECT 38700.0 278700.0 40500.0 280500.0 ; + RECT 48300.00000000001 278700.0 50100.0 280500.0 ; + RECT 57900.00000000001 278700.0 59700.0 280500.0 ; + RECT 86700.0 278700.0 88500.0 280500.0 ; + RECT 96300.00000000001 278700.0 98100.00000000001 280500.0 ; + RECT 105900.0 278700.0 107700.0 280500.0 ; + RECT 115500.00000000001 278700.0 117300.00000000001 280500.0 ; + RECT 125100.00000000001 278700.0 126900.0 280500.0 ; + RECT 134700.0 278700.0 136500.0 280500.0 ; + RECT 144299.99999999997 278700.0 146100.0 280500.0 ; + RECT 153900.0 278700.0 155700.00000000003 280500.0 ; + RECT 163500.0 278700.0 165300.0 280500.0 ; + RECT 173100.0 278700.0 174900.0 280500.0 ; + RECT 182700.0 278700.0 184500.0 280500.0 ; + RECT 192300.0 278700.0 194100.00000000003 280500.0 ; + RECT 201900.0 278700.0 203700.00000000003 280500.0 ; + RECT 211500.0 278700.0 213300.0 280500.0 ; + RECT 221100.0 278700.0 222900.0 280500.0 ; + RECT 229500.0 278700.0 231300.0 280500.0 ; + RECT 1500.0 288300.0 3300.0 290100.0 ; + RECT 9900.0 288300.0 11700.000000000002 290100.0 ; + RECT 19500.0 288300.0 21300.0 290100.0 ; + RECT 29100.0 288300.0 30900.000000000004 290100.0 ; + RECT 38700.0 288300.0 40500.0 290100.0 ; + RECT 48300.00000000001 288300.0 50100.0 290100.0 ; + RECT 57900.00000000001 288300.0 59700.0 290100.0 ; + RECT 67500.0 288300.0 69300.0 290100.0 ; + RECT 77100.00000000001 288300.0 78900.0 290100.0 ; + RECT 86700.0 288300.0 88500.0 290100.0 ; + RECT 96300.00000000001 288300.0 98100.00000000001 290100.0 ; + RECT 105900.0 288300.0 107700.0 290100.0 ; + RECT 115500.00000000001 288300.0 117300.00000000001 290100.0 ; + RECT 125100.00000000001 288300.0 126900.0 290100.0 ; + RECT 134700.0 288300.0 136500.0 290100.0 ; + RECT 144299.99999999997 288300.0 146100.0 290100.0 ; + RECT 153900.0 288300.0 155700.00000000003 290100.0 ; + RECT 163500.0 288300.0 165300.0 290100.0 ; + RECT 173100.0 288300.0 174900.0 290100.0 ; + RECT 182700.0 288300.0 184500.0 290100.0 ; + RECT 192300.0 288300.0 194100.00000000003 290100.0 ; + RECT 201900.0 288300.0 203700.00000000003 290100.0 ; + RECT 211500.0 288300.0 213300.0 290100.0 ; + RECT 221100.0 288300.0 222900.0 290100.0 ; + RECT 229500.0 288300.0 231300.0 290100.0 ; + RECT 1500.0 297900.0 3300.0 299700.0 ; + RECT 9900.0 297900.0 11700.000000000002 299700.0 ; + RECT 19500.0 297900.0 21300.0 299700.0 ; + RECT 29100.0 297900.0 30900.000000000004 299700.0 ; + RECT 38700.0 297900.0 40500.0 299700.0 ; + RECT 48300.00000000001 297900.0 50100.0 299700.0 ; + RECT 57900.00000000001 297900.0 59700.0 299700.0 ; + RECT 67500.0 297900.0 69300.0 299700.0 ; + RECT 77100.00000000001 297900.0 78900.0 299700.0 ; + RECT 86700.0 297900.0 88500.0 299700.0 ; + RECT 96300.00000000001 297900.0 98100.00000000001 299700.0 ; + RECT 105900.0 297900.0 107700.0 299700.0 ; + RECT 115500.00000000001 297900.0 117300.00000000001 299700.0 ; + RECT 125100.00000000001 297900.0 126900.0 299700.0 ; + RECT 134700.0 297900.0 136500.0 299700.0 ; + RECT 144299.99999999997 297900.0 146100.0 299700.0 ; + RECT 153900.0 297900.0 155700.00000000003 299700.0 ; + RECT 163500.0 297900.0 165300.0 299700.0 ; + RECT 173100.0 297900.0 174900.0 299700.0 ; + RECT 182700.0 297900.0 184500.0 299700.0 ; + RECT 192300.0 297900.0 194100.00000000003 299700.0 ; + RECT 201900.0 297900.0 203700.00000000003 299700.0 ; + RECT 211500.0 297900.0 213300.0 299700.0 ; + RECT 221100.0 297900.0 222900.0 299700.0 ; + RECT 229500.0 297900.0 231300.0 299700.0 ; + RECT 5100.000000000001 5100.000000000001 6900.0 6900.0 ; + RECT 14700.0 5100.000000000001 16500.0 6900.0 ; + RECT 24300.0 5100.000000000001 26100.0 6900.0 ; + RECT 33900.00000000001 5100.000000000001 35700.0 6900.0 ; + RECT 43500.00000000001 5100.000000000001 45300.00000000001 6900.0 ; + RECT 53100.00000000001 5100.000000000001 54900.00000000001 6900.0 ; + RECT 62700.0 5100.000000000001 64500.0 6900.0 ; + RECT 72300.00000000001 5100.000000000001 74100.00000000001 6900.0 ; + RECT 81900.0 5100.000000000001 83700.0 6900.0 ; + RECT 91500.00000000001 5100.000000000001 93300.00000000001 6900.0 ; + RECT 101100.00000000001 5100.000000000001 102900.0 6900.0 ; + RECT 110700.0 5100.000000000001 112500.0 6900.0 ; + RECT 120300.00000000001 5100.000000000001 122100.00000000001 6900.0 ; + RECT 129900.0 5100.000000000001 131700.00000000003 6900.0 ; + RECT 139500.0 5100.000000000001 141300.0 6900.0 ; + RECT 149100.0 5100.000000000001 150900.0 6900.0 ; + RECT 158700.0 5100.000000000001 160500.0 6900.0 ; + RECT 5100.000000000001 14700.0 6900.0 16500.0 ; + RECT 14700.0 14700.0 16500.0 16500.0 ; + RECT 24300.0 14700.0 26100.0 16500.0 ; + RECT 33900.00000000001 14700.0 35700.0 16500.0 ; + RECT 43500.00000000001 14700.0 45300.00000000001 16500.0 ; + RECT 53100.00000000001 14700.0 54900.00000000001 16500.0 ; + RECT 62700.0 14700.0 64500.0 16500.0 ; + RECT 72300.00000000001 14700.0 74100.00000000001 16500.0 ; + RECT 81900.0 14700.0 83700.0 16500.0 ; + RECT 91500.00000000001 14700.0 93300.00000000001 16500.0 ; + RECT 101100.00000000001 14700.0 102900.0 16500.0 ; + RECT 110700.0 14700.0 112500.0 16500.0 ; + RECT 120300.00000000001 14700.0 122100.00000000001 16500.0 ; + RECT 129900.0 14700.0 131700.00000000003 16500.0 ; + RECT 139500.0 14700.0 141300.0 16500.0 ; + RECT 149100.0 14700.0 150900.0 16500.0 ; + RECT 158700.0 14700.0 160500.0 16500.0 ; + RECT 168300.0 14700.0 170100.00000000003 16500.0 ; + RECT 177900.0 14700.0 179700.00000000003 16500.0 ; + RECT 187500.0 14700.0 189300.0 16500.0 ; + RECT 197100.0 14700.0 198900.0 16500.0 ; + RECT 206700.0 14700.0 208500.0 16500.0 ; + RECT 216300.0 14700.0 218100.00000000003 16500.0 ; + RECT 225900.0 14700.0 227700.00000000003 16500.0 ; + RECT 5100.000000000001 24300.0 6900.0 26100.0 ; + RECT 14700.0 24300.0 16500.0 26100.0 ; + RECT 24300.0 24300.0 26100.0 26100.0 ; + RECT 33900.00000000001 24300.0 35700.0 26100.0 ; + RECT 43500.00000000001 24300.0 45300.00000000001 26100.0 ; + RECT 53100.00000000001 24300.0 54900.00000000001 26100.0 ; + RECT 62700.0 24300.0 64500.0 26100.0 ; + RECT 72300.00000000001 24300.0 74100.00000000001 26100.0 ; + RECT 81900.0 24300.0 83700.0 26100.0 ; + RECT 91500.00000000001 24300.0 93300.00000000001 26100.0 ; + RECT 101100.00000000001 24300.0 102900.0 26100.0 ; + RECT 110700.0 24300.0 112500.0 26100.0 ; + RECT 120300.00000000001 24300.0 122100.00000000001 26100.0 ; + RECT 129900.0 24300.0 131700.00000000003 26100.0 ; + RECT 139500.0 24300.0 141300.0 26100.0 ; + RECT 149100.0 24300.0 150900.0 26100.0 ; + RECT 158700.0 24300.0 160500.0 26100.0 ; + RECT 168300.0 24300.0 170100.00000000003 26100.0 ; + RECT 177900.0 24300.0 179700.00000000003 26100.0 ; + RECT 187500.0 24300.0 189300.0 26100.0 ; + RECT 197100.0 24300.0 198900.0 26100.0 ; + RECT 206700.0 24300.0 208500.0 26100.0 ; + RECT 216300.0 24300.0 218100.00000000003 26100.0 ; + RECT 225900.0 24300.0 227700.00000000003 26100.0 ; + RECT 5100.000000000001 33900.00000000001 6900.0 35700.0 ; + RECT 14700.0 33900.00000000001 16500.0 35700.0 ; + RECT 24300.0 33900.00000000001 26100.0 35700.0 ; + RECT 33900.00000000001 33900.00000000001 35700.0 35700.0 ; + RECT 43500.00000000001 33900.00000000001 45300.00000000001 35700.0 ; + RECT 53100.00000000001 33900.00000000001 54900.00000000001 35700.0 ; + RECT 62700.0 33900.00000000001 64500.0 35700.0 ; + RECT 72300.00000000001 33900.00000000001 74100.00000000001 35700.0 ; + RECT 81900.0 33900.00000000001 83700.0 35700.0 ; + RECT 91500.00000000001 33900.00000000001 93300.00000000001 35700.0 ; + RECT 101100.00000000001 33900.00000000001 102900.0 35700.0 ; + RECT 110700.0 33900.00000000001 112500.0 35700.0 ; + RECT 120300.00000000001 33900.00000000001 122100.00000000001 35700.0 ; + RECT 129900.0 33900.00000000001 131700.00000000003 35700.0 ; + RECT 139500.0 33900.00000000001 141300.0 35700.0 ; + RECT 149100.0 33900.00000000001 150900.0 35700.0 ; + RECT 158700.0 33900.00000000001 160500.0 35700.0 ; + RECT 168300.0 33900.00000000001 170100.00000000003 35700.0 ; + RECT 197100.0 33900.00000000001 198900.0 35700.0 ; + RECT 206700.0 33900.00000000001 208500.0 35700.0 ; + RECT 216300.0 33900.00000000001 218100.00000000003 35700.0 ; + RECT 225900.0 33900.00000000001 227700.00000000003 35700.0 ; + RECT 5100.000000000001 43500.00000000001 6900.0 45300.00000000001 ; + RECT 14700.0 43500.00000000001 16500.0 45300.00000000001 ; + RECT 24300.0 43500.00000000001 26100.0 45300.00000000001 ; + RECT 33900.00000000001 43500.00000000001 35700.0 45300.00000000001 ; + RECT 43500.00000000001 43500.00000000001 45300.00000000001 45300.00000000001 ; + RECT 53100.00000000001 43500.00000000001 54900.00000000001 45300.00000000001 ; + RECT 62700.0 43500.00000000001 64500.0 45300.00000000001 ; + RECT 72300.00000000001 43500.00000000001 74100.00000000001 45300.00000000001 ; + RECT 81900.0 43500.00000000001 83700.0 45300.00000000001 ; + RECT 91500.00000000001 43500.00000000001 93300.00000000001 45300.00000000001 ; + RECT 101100.00000000001 43500.00000000001 102900.0 45300.00000000001 ; + RECT 110700.0 43500.00000000001 112500.0 45300.00000000001 ; + RECT 120300.00000000001 43500.00000000001 122100.00000000001 45300.00000000001 ; + RECT 129900.0 43500.00000000001 131700.00000000003 45300.00000000001 ; + RECT 139500.0 43500.00000000001 141300.0 45300.00000000001 ; + RECT 149100.0 43500.00000000001 150900.0 45300.00000000001 ; + RECT 158700.0 43500.00000000001 160500.0 45300.00000000001 ; + RECT 168300.0 43500.00000000001 170100.00000000003 45300.00000000001 ; + RECT 198300.0 43500.00000000001 200100.00000000003 45300.00000000001 ; + RECT 206700.0 43500.00000000001 208500.0 45300.00000000001 ; + RECT 216300.0 43500.00000000001 218100.00000000003 45300.00000000001 ; + RECT 225900.0 43500.00000000001 227700.00000000003 45300.00000000001 ; + RECT 5100.000000000001 53100.00000000001 6900.0 54900.00000000001 ; + RECT 14700.0 53100.00000000001 16500.0 54900.00000000001 ; + RECT 24300.0 53100.00000000001 26100.0 54900.00000000001 ; + RECT 33900.00000000001 53100.00000000001 35700.0 54900.00000000001 ; + RECT 43500.00000000001 53100.00000000001 45300.00000000001 54900.00000000001 ; + RECT 53100.00000000001 53100.00000000001 54900.00000000001 54900.00000000001 ; + RECT 62700.0 53100.00000000001 64500.0 54900.00000000001 ; + RECT 72300.00000000001 53100.00000000001 74100.00000000001 54900.00000000001 ; + RECT 81900.0 53100.00000000001 83700.0 54900.00000000001 ; + RECT 91500.00000000001 53100.00000000001 93300.00000000001 54900.00000000001 ; + RECT 101100.00000000001 53100.00000000001 102900.0 54900.00000000001 ; + RECT 110700.0 53100.00000000001 112500.0 54900.00000000001 ; + RECT 120300.00000000001 53100.00000000001 122100.00000000001 54900.00000000001 ; + RECT 129900.0 53100.00000000001 131700.00000000003 54900.00000000001 ; + RECT 139500.0 53100.00000000001 141300.0 54900.00000000001 ; + RECT 149100.0 53100.00000000001 150900.0 54900.00000000001 ; + RECT 158700.0 53100.00000000001 160500.0 54900.00000000001 ; + RECT 168300.0 53100.00000000001 170100.00000000003 54900.00000000001 ; + RECT 198300.0 53100.00000000001 200100.00000000003 54900.00000000001 ; + RECT 206700.0 53100.00000000001 208500.0 54900.00000000001 ; + RECT 216300.0 53100.00000000001 218100.00000000003 54900.00000000001 ; + RECT 225900.0 53100.00000000001 227700.00000000003 54900.00000000001 ; + RECT 5100.000000000001 62700.0 6900.0 64500.0 ; + RECT 14700.0 62700.0 16500.0 64500.0 ; + RECT 24300.0 62700.0 26100.0 64500.0 ; + RECT 33900.00000000001 62700.0 35700.0 64500.0 ; + RECT 43500.00000000001 62700.0 45300.00000000001 64500.0 ; + RECT 53100.00000000001 62700.0 54900.00000000001 64500.0 ; + RECT 62700.0 62700.0 64500.0 64500.0 ; + RECT 72300.00000000001 62700.0 74100.00000000001 64500.0 ; + RECT 81900.0 62700.0 83700.0 64500.0 ; + RECT 91500.00000000001 62700.0 93300.00000000001 64500.0 ; + RECT 101100.00000000001 62700.0 102900.0 64500.0 ; + RECT 110700.0 62700.0 112500.0 64500.0 ; + RECT 120300.00000000001 62700.0 122100.00000000001 64500.0 ; + RECT 129900.0 62700.0 131700.00000000003 64500.0 ; + RECT 139500.0 62700.0 141300.0 64500.0 ; + RECT 149100.0 62700.0 150900.0 64500.0 ; + RECT 158700.0 62700.0 160500.0 64500.0 ; + RECT 168300.0 62700.0 170100.00000000003 64500.0 ; + RECT 177900.0 62700.0 179700.00000000003 64500.0 ; + RECT 187500.0 62700.0 189300.0 64500.0 ; + RECT 197100.0 62700.0 198900.0 64500.0 ; + RECT 206700.0 62700.0 208500.0 64500.0 ; + RECT 216300.0 62700.0 218100.00000000003 64500.0 ; + RECT 225900.0 62700.0 227700.00000000003 64500.0 ; + RECT 5100.000000000001 72300.00000000001 6900.0 74100.00000000001 ; + RECT 14700.0 72300.00000000001 16500.0 74100.00000000001 ; + RECT 24300.0 72300.00000000001 26100.0 74100.00000000001 ; + RECT 33900.00000000001 72300.00000000001 35700.0 74100.00000000001 ; + RECT 43500.00000000001 72300.00000000001 45300.00000000001 74100.00000000001 ; + RECT 53100.00000000001 72300.00000000001 54900.00000000001 74100.00000000001 ; + RECT 62700.0 72300.00000000001 64500.0 74100.00000000001 ; + RECT 72300.00000000001 72300.00000000001 74100.00000000001 74100.00000000001 ; + RECT 81900.0 72300.00000000001 83700.0 74100.00000000001 ; + RECT 91500.00000000001 72300.00000000001 93300.00000000001 74100.00000000001 ; + RECT 101100.00000000001 72300.00000000001 102900.0 74100.00000000001 ; + RECT 110700.0 72300.00000000001 112500.0 74100.00000000001 ; + RECT 120300.00000000001 72300.00000000001 122100.00000000001 74100.00000000001 ; + RECT 129900.0 72300.00000000001 131700.00000000003 74100.00000000001 ; + RECT 139500.0 72300.00000000001 141300.0 74100.00000000001 ; + RECT 149100.0 72300.00000000001 150900.0 74100.00000000001 ; + RECT 158700.0 72300.00000000001 160500.0 74100.00000000001 ; + RECT 168300.0 72300.00000000001 170100.00000000003 74100.00000000001 ; + RECT 177900.0 72300.00000000001 179700.00000000003 74100.00000000001 ; + RECT 187500.0 72300.00000000001 189300.0 74100.00000000001 ; + RECT 197100.0 72300.00000000001 198900.0 74100.00000000001 ; + RECT 206700.0 72300.00000000001 208500.0 74100.00000000001 ; + RECT 216300.0 72300.00000000001 218100.00000000003 74100.00000000001 ; + RECT 225900.0 72300.00000000001 227700.00000000003 74100.00000000001 ; + RECT 5100.000000000001 81900.0 6900.0 83700.0 ; + RECT 14700.0 81900.0 16500.0 83700.0 ; + RECT 24300.0 81900.0 26100.0 83700.0 ; + RECT 33900.00000000001 81900.0 35700.0 83700.0 ; + RECT 43500.00000000001 81900.0 45300.00000000001 83700.0 ; + RECT 53100.00000000001 81900.0 54900.00000000001 83700.0 ; + RECT 62700.0 81900.0 64500.0 83700.0 ; + RECT 72300.00000000001 81900.0 74100.00000000001 83700.0 ; + RECT 81900.0 81900.0 83700.0 83700.0 ; + RECT 91500.00000000001 81900.0 93300.00000000001 83700.0 ; + RECT 101100.00000000001 81900.0 102900.0 83700.0 ; + RECT 110700.0 81900.0 112500.0 83700.0 ; + RECT 120300.00000000001 81900.0 122100.00000000001 83700.0 ; + RECT 129900.0 81900.0 131700.00000000003 83700.0 ; + RECT 139500.0 81900.0 141300.0 83700.0 ; + RECT 149100.0 81900.0 150900.0 83700.0 ; + RECT 158700.0 81900.0 160500.0 83700.0 ; + RECT 168300.0 81900.0 170100.00000000003 83700.0 ; + RECT 177900.0 81900.0 179700.00000000003 83700.0 ; + RECT 187500.0 81900.0 189300.0 83700.0 ; + RECT 197100.0 81900.0 198900.0 83700.0 ; + RECT 206700.0 81900.0 208500.0 83700.0 ; + RECT 216300.0 81900.0 218100.00000000003 83700.0 ; + RECT 225900.0 81900.0 227700.00000000003 83700.0 ; + RECT 54300.00000000001 91500.00000000001 56100.0 93300.00000000001 ; + RECT 62700.0 91500.00000000001 64500.0 93300.00000000001 ; + RECT 72300.00000000001 91500.00000000001 74100.00000000001 93300.00000000001 ; + RECT 81900.0 91500.00000000001 83700.0 93300.00000000001 ; + RECT 91500.00000000001 91500.00000000001 93300.00000000001 93300.00000000001 ; + RECT 101100.00000000001 91500.00000000001 102900.0 93300.00000000001 ; + RECT 110700.0 91500.00000000001 112500.0 93300.00000000001 ; + RECT 120300.00000000001 91500.00000000001 122100.00000000001 93300.00000000001 ; + RECT 129900.0 91500.00000000001 131700.00000000003 93300.00000000001 ; + RECT 139500.0 91500.00000000001 141300.0 93300.00000000001 ; + RECT 149100.0 91500.00000000001 150900.0 93300.00000000001 ; + RECT 158700.0 91500.00000000001 160500.0 93300.00000000001 ; + RECT 168300.0 91500.00000000001 170100.00000000003 93300.00000000001 ; + RECT 176700.0 91500.00000000001 178500.0 93300.00000000001 ; + RECT 198300.0 91500.00000000001 200100.00000000003 93300.00000000001 ; + RECT 206700.0 91500.00000000001 208500.0 93300.00000000001 ; + RECT 216300.0 91500.00000000001 218100.00000000003 93300.00000000001 ; + RECT 225900.0 91500.00000000001 227700.00000000003 93300.00000000001 ; + RECT 5100.000000000001 101100.00000000001 6900.0 102900.0 ; + RECT 14700.0 101100.00000000001 16500.0 102900.0 ; + RECT 24300.0 101100.00000000001 26100.0 102900.0 ; + RECT 33900.00000000001 101100.00000000001 35700.0 102900.0 ; + RECT 43500.00000000001 101100.00000000001 45300.00000000001 102900.0 ; + RECT 53100.00000000001 101100.00000000001 54900.00000000001 102900.0 ; + RECT 61500.00000000001 101100.00000000001 63300.00000000001 102900.0 ; + RECT 81900.0 101100.00000000001 83700.0 102900.0 ; + RECT 91500.00000000001 101100.00000000001 93300.00000000001 102900.0 ; + RECT 101100.00000000001 101100.00000000001 102900.0 102900.0 ; + RECT 110700.0 101100.00000000001 112500.0 102900.0 ; + RECT 120300.00000000001 101100.00000000001 122100.00000000001 102900.0 ; + RECT 129900.0 101100.00000000001 131700.00000000003 102900.0 ; + RECT 139500.0 101100.00000000001 141300.0 102900.0 ; + RECT 149100.0 101100.00000000001 150900.0 102900.0 ; + RECT 158700.0 101100.00000000001 160500.0 102900.0 ; + RECT 168300.0 101100.00000000001 170100.00000000003 102900.0 ; + RECT 177900.0 101100.00000000001 179700.00000000003 102900.0 ; + RECT 187500.0 101100.00000000001 189300.0 102900.0 ; + RECT 197100.0 101100.00000000001 198900.0 102900.0 ; + RECT 206700.0 101100.00000000001 208500.0 102900.0 ; + RECT 216300.0 101100.00000000001 218100.00000000003 102900.0 ; + RECT 225900.0 101100.00000000001 227700.00000000003 102900.0 ; + RECT 5100.000000000001 110700.0 6900.0 112500.0 ; + RECT 14700.0 110700.0 16500.0 112500.0 ; + RECT 24300.0 110700.0 26100.0 112500.0 ; + RECT 33900.00000000001 110700.0 35700.0 112500.0 ; + RECT 43500.00000000001 110700.0 45300.00000000001 112500.0 ; + RECT 53100.00000000001 110700.0 54900.00000000001 112500.0 ; + RECT 61500.00000000001 110700.0 63300.00000000001 112500.0 ; + RECT 187500.0 110700.0 189300.0 112500.0 ; + RECT 197100.0 110700.0 198900.0 112500.0 ; + RECT 206700.0 110700.0 208500.0 112500.0 ; + RECT 216300.0 110700.0 218100.00000000003 112500.0 ; + RECT 225900.0 110700.0 227700.00000000003 112500.0 ; + RECT 5100.000000000001 120300.00000000001 6900.0 122100.00000000001 ; + RECT 14700.0 120300.00000000001 16500.0 122100.00000000001 ; + RECT 24300.0 120300.00000000001 26100.0 122100.00000000001 ; + RECT 33900.00000000001 120300.00000000001 35700.0 122100.00000000001 ; + RECT 43500.00000000001 120300.00000000001 45300.00000000001 122100.00000000001 ; + RECT 53100.00000000001 120300.00000000001 54900.00000000001 122100.00000000001 ; + RECT 62700.0 120300.00000000001 64500.0 122100.00000000001 ; + RECT 72300.00000000001 120300.00000000001 74100.00000000001 122100.00000000001 ; + RECT 80700.0 120300.00000000001 82500.0 122100.00000000001 ; + RECT 177900.0 120300.00000000001 179700.00000000003 122100.00000000001 ; + RECT 187500.0 120300.00000000001 189300.0 122100.00000000001 ; + RECT 197100.0 120300.00000000001 198900.0 122100.00000000001 ; + RECT 206700.0 120300.00000000001 208500.0 122100.00000000001 ; + RECT 216300.0 120300.00000000001 218100.00000000003 122100.00000000001 ; + RECT 225900.0 120300.00000000001 227700.00000000003 122100.00000000001 ; + RECT 43500.00000000001 129900.0 45300.00000000001 131700.00000000003 ; + RECT 53100.00000000001 129900.0 54900.00000000001 131700.00000000003 ; + RECT 62700.0 129900.0 64500.0 131700.00000000003 ; + RECT 91500.00000000001 129900.0 93300.00000000001 131700.00000000003 ; + RECT 101100.00000000001 129900.0 102900.0 131700.00000000003 ; + RECT 121500.00000000001 129900.0 123300.00000000001 131700.00000000003 ; + RECT 129900.0 129900.0 131700.00000000003 131700.00000000003 ; + RECT 139500.0 129900.0 141300.0 131700.00000000003 ; + RECT 149100.0 129900.0 150900.0 131700.00000000003 ; + RECT 158700.0 129900.0 160500.0 131700.00000000003 ; + RECT 168300.0 129900.0 170100.00000000003 131700.00000000003 ; + RECT 177900.0 129900.0 179700.00000000003 131700.00000000003 ; + RECT 187500.0 129900.0 189300.0 131700.00000000003 ; + RECT 197100.0 129900.0 198900.0 131700.00000000003 ; + RECT 206700.0 129900.0 208500.0 131700.00000000003 ; + RECT 216300.0 129900.0 218100.00000000003 131700.00000000003 ; + RECT 225900.0 129900.0 227700.00000000003 131700.00000000003 ; + RECT 43500.00000000001 139500.0 45300.00000000001 141300.0 ; + RECT 53100.00000000001 139500.0 54900.00000000001 141300.0 ; + RECT 62700.0 139500.0 64500.0 141300.0 ; + RECT 177900.0 139500.0 179700.00000000003 141300.0 ; + RECT 187500.0 139500.0 189300.0 141300.0 ; + RECT 197100.0 139500.0 198900.0 141300.0 ; + RECT 206700.0 139500.0 208500.0 141300.0 ; + RECT 216300.0 139500.0 218100.00000000003 141300.0 ; + RECT 225900.0 139500.0 227700.00000000003 141300.0 ; + RECT 44700.0 149100.0 46500.0 150900.0 ; + RECT 53100.00000000001 149100.0 54900.00000000001 150900.0 ; + RECT 62700.0 149100.0 64500.0 150900.0 ; + RECT 72300.00000000001 149100.0 74100.00000000001 150900.0 ; + RECT 81900.0 149100.0 83700.0 150900.0 ; + RECT 91500.00000000001 149100.0 93300.00000000001 150900.0 ; + RECT 101100.00000000001 149100.0 102900.0 150900.0 ; + RECT 129900.0 149100.0 131700.00000000003 150900.0 ; + RECT 139500.0 149100.0 141300.0 150900.0 ; + RECT 149100.0 149100.0 150900.0 150900.0 ; + RECT 158700.0 149100.0 160500.0 150900.0 ; + RECT 168300.0 149100.0 170100.00000000003 150900.0 ; + RECT 177900.0 149100.0 179700.00000000003 150900.0 ; + RECT 187500.0 149100.0 189300.0 150900.0 ; + RECT 197100.0 149100.0 198900.0 150900.0 ; + RECT 206700.0 149100.0 208500.0 150900.0 ; + RECT 216300.0 149100.0 218100.00000000003 150900.0 ; + RECT 225900.0 149100.0 227700.00000000003 150900.0 ; + RECT 43500.00000000001 158700.0 45300.00000000001 160500.0 ; + RECT 53100.00000000001 158700.0 54900.00000000001 160500.0 ; + RECT 62700.0 158700.0 64500.0 160500.0 ; + RECT 72300.00000000001 158700.0 74100.00000000001 160500.0 ; + RECT 80700.0 158700.0 82500.0 160500.0 ; + RECT 177900.0 158700.0 179700.00000000003 160500.0 ; + RECT 187500.0 158700.0 189300.0 160500.0 ; + RECT 197100.0 158700.0 198900.0 160500.0 ; + RECT 206700.0 158700.0 208500.0 160500.0 ; + RECT 216300.0 158700.0 218100.00000000003 160500.0 ; + RECT 225900.0 158700.0 227700.00000000003 160500.0 ; + RECT 44700.0 168300.0 46500.0 170100.00000000003 ; + RECT 53100.00000000001 168300.0 54900.00000000001 170100.00000000003 ; + RECT 62700.0 168300.0 64500.0 170100.00000000003 ; + RECT 91500.00000000001 168300.0 93300.00000000001 170100.00000000003 ; + RECT 101100.00000000001 168300.0 102900.0 170100.00000000003 ; + RECT 129900.0 168300.0 131700.00000000003 170100.00000000003 ; + RECT 139500.0 168300.0 141300.0 170100.00000000003 ; + RECT 149100.0 168300.0 150900.0 170100.00000000003 ; + RECT 158700.0 168300.0 160500.0 170100.00000000003 ; + RECT 168300.0 168300.0 170100.00000000003 170100.00000000003 ; + RECT 177900.0 168300.0 179700.00000000003 170100.00000000003 ; + RECT 187500.0 168300.0 189300.0 170100.00000000003 ; + RECT 197100.0 168300.0 198900.0 170100.00000000003 ; + RECT 206700.0 168300.0 208500.0 170100.00000000003 ; + RECT 216300.0 168300.0 218100.00000000003 170100.00000000003 ; + RECT 225900.0 168300.0 227700.00000000003 170100.00000000003 ; + RECT 5100.000000000001 177900.0 6900.0 179700.00000000003 ; + RECT 14700.0 177900.0 16500.0 179700.00000000003 ; + RECT 24300.0 177900.0 26100.0 179700.00000000003 ; + RECT 33900.00000000001 177900.0 35700.0 179700.00000000003 ; + RECT 43500.00000000001 177900.0 45300.00000000001 179700.00000000003 ; + RECT 53100.00000000001 177900.0 54900.00000000001 179700.00000000003 ; + RECT 62700.0 177900.0 64500.0 179700.00000000003 ; + RECT 177900.0 177900.0 179700.00000000003 179700.00000000003 ; + RECT 187500.0 177900.0 189300.0 179700.00000000003 ; + RECT 197100.0 177900.0 198900.0 179700.00000000003 ; + RECT 206700.0 177900.0 208500.0 179700.00000000003 ; + RECT 216300.0 177900.0 218100.00000000003 179700.00000000003 ; + RECT 225900.0 177900.0 227700.00000000003 179700.00000000003 ; + RECT 5100.000000000001 187500.0 6900.0 189300.0 ; + RECT 14700.0 187500.0 16500.0 189300.0 ; + RECT 24300.0 187500.0 26100.0 189300.0 ; + RECT 44700.0 187500.0 46500.0 189300.0 ; + RECT 53100.00000000001 187500.0 54900.00000000001 189300.0 ; + RECT 62700.0 187500.0 64500.0 189300.0 ; + RECT 72300.00000000001 187500.0 74100.00000000001 189300.0 ; + RECT 81900.0 187500.0 83700.0 189300.0 ; + RECT 91500.00000000001 187500.0 93300.00000000001 189300.0 ; + RECT 101100.00000000001 187500.0 102900.0 189300.0 ; + RECT 131100.0 187500.0 132900.0 189300.0 ; + RECT 139500.0 187500.0 141300.0 189300.0 ; + RECT 149100.0 187500.0 150900.0 189300.0 ; + RECT 158700.0 187500.0 160500.0 189300.0 ; + RECT 168300.0 187500.0 170100.00000000003 189300.0 ; + RECT 198300.0 187500.0 200100.00000000003 189300.0 ; + RECT 206700.0 187500.0 208500.0 189300.0 ; + RECT 216300.0 187500.0 218100.00000000003 189300.0 ; + RECT 225900.0 187500.0 227700.00000000003 189300.0 ; + RECT 5100.000000000001 197100.0 6900.0 198900.0 ; + RECT 14700.0 197100.0 16500.0 198900.0 ; + RECT 24300.0 197100.0 26100.0 198900.0 ; + RECT 33900.00000000001 197100.0 35700.0 198900.0 ; + RECT 43500.00000000001 197100.0 45300.00000000001 198900.0 ; + RECT 53100.00000000001 197100.0 54900.00000000001 198900.0 ; + RECT 62700.0 197100.0 64500.0 198900.0 ; + RECT 72300.00000000001 197100.0 74100.00000000001 198900.0 ; + RECT 80700.0 197100.0 82500.0 198900.0 ; + RECT 198300.0 197100.0 200100.00000000003 198900.0 ; + RECT 206700.0 197100.0 208500.0 198900.0 ; + RECT 216300.0 197100.0 218100.00000000003 198900.0 ; + RECT 225900.0 197100.0 227700.00000000003 198900.0 ; + RECT 5100.000000000001 206700.0 6900.0 208500.0 ; + RECT 14700.0 206700.0 16500.0 208500.0 ; + RECT 24300.0 206700.0 26100.0 208500.0 ; + RECT 44700.0 206700.0 46500.0 208500.0 ; + RECT 53100.00000000001 206700.0 54900.00000000001 208500.0 ; + RECT 62700.0 206700.0 64500.0 208500.0 ; + RECT 72300.00000000001 206700.0 74100.00000000001 208500.0 ; + RECT 81900.0 206700.0 83700.0 208500.0 ; + RECT 91500.00000000001 206700.0 93300.00000000001 208500.0 ; + RECT 101100.00000000001 206700.0 102900.0 208500.0 ; + RECT 110700.0 206700.0 112500.0 208500.0 ; + RECT 120300.00000000001 206700.0 122100.00000000001 208500.0 ; + RECT 129900.0 206700.0 131700.00000000003 208500.0 ; + RECT 139500.0 206700.0 141300.0 208500.0 ; + RECT 149100.0 206700.0 150900.0 208500.0 ; + RECT 158700.0 206700.0 160500.0 208500.0 ; + RECT 168300.0 206700.0 170100.00000000003 208500.0 ; + RECT 198300.0 206700.0 200100.00000000003 208500.0 ; + RECT 206700.0 206700.0 208500.0 208500.0 ; + RECT 216300.0 206700.0 218100.00000000003 208500.0 ; + RECT 225900.0 206700.0 227700.00000000003 208500.0 ; + RECT 5100.000000000001 216300.0 6900.0 218100.00000000003 ; + RECT 14700.0 216300.0 16500.0 218100.00000000003 ; + RECT 24300.0 216300.0 26100.0 218100.00000000003 ; + RECT 33900.00000000001 216300.0 35700.0 218100.00000000003 ; + RECT 81900.0 216300.0 83700.0 218100.00000000003 ; + RECT 91500.00000000001 216300.0 93300.00000000001 218100.00000000003 ; + RECT 101100.00000000001 216300.0 102900.0 218100.00000000003 ; + RECT 110700.0 216300.0 112500.0 218100.00000000003 ; + RECT 120300.00000000001 216300.0 122100.00000000001 218100.00000000003 ; + RECT 198300.0 216300.0 200100.00000000003 218100.00000000003 ; + RECT 206700.0 216300.0 208500.0 218100.00000000003 ; + RECT 216300.0 216300.0 218100.00000000003 218100.00000000003 ; + RECT 225900.0 216300.0 227700.00000000003 218100.00000000003 ; + RECT 5100.000000000001 225900.0 6900.0 227700.00000000003 ; + RECT 14700.0 225900.0 16500.0 227700.00000000003 ; + RECT 24300.0 225900.0 26100.0 227700.00000000003 ; + RECT 33900.00000000001 225900.0 35700.0 227700.00000000003 ; + RECT 43500.00000000001 225900.0 45300.00000000001 227700.00000000003 ; + RECT 53100.00000000001 225900.0 54900.00000000001 227700.00000000003 ; + RECT 62700.0 225900.0 64500.0 227700.00000000003 ; + RECT 72300.00000000001 225900.0 74100.00000000001 227700.00000000003 ; + RECT 81900.0 225900.0 83700.0 227700.00000000003 ; + RECT 91500.00000000001 225900.0 93300.00000000001 227700.00000000003 ; + RECT 101100.00000000001 225900.0 102900.0 227700.00000000003 ; + RECT 110700.0 225900.0 112500.0 227700.00000000003 ; + RECT 120300.00000000001 225900.0 122100.00000000001 227700.00000000003 ; + RECT 129900.0 225900.0 131700.00000000003 227700.00000000003 ; + RECT 139500.0 225900.0 141300.0 227700.00000000003 ; + RECT 149100.0 225900.0 150900.0 227700.00000000003 ; + RECT 158700.0 225900.0 160500.0 227700.00000000003 ; + RECT 168300.0 225900.0 170100.00000000003 227700.00000000003 ; + RECT 198300.0 225900.0 200100.00000000003 227700.00000000003 ; + RECT 206700.0 225900.0 208500.0 227700.00000000003 ; + RECT 216300.0 225900.0 218100.00000000003 227700.00000000003 ; + RECT 225900.0 225900.0 227700.00000000003 227700.00000000003 ; + RECT 5100.000000000001 235500.0 6900.0 237300.0 ; + RECT 14700.0 235500.0 16500.0 237300.0 ; + RECT 24300.0 235500.0 26100.0 237300.0 ; + RECT 33900.00000000001 235500.0 35700.0 237300.0 ; + RECT 43500.00000000001 235500.0 45300.00000000001 237300.0 ; + RECT 53100.00000000001 235500.0 54900.00000000001 237300.0 ; + RECT 62700.0 235500.0 64500.0 237300.0 ; + RECT 72300.00000000001 235500.0 74100.00000000001 237300.0 ; + RECT 81900.0 235500.0 83700.0 237300.0 ; + RECT 91500.00000000001 235500.0 93300.00000000001 237300.0 ; + RECT 101100.00000000001 235500.0 102900.0 237300.0 ; + RECT 110700.0 235500.0 112500.0 237300.0 ; + RECT 120300.00000000001 235500.0 122100.00000000001 237300.0 ; + RECT 129900.0 235500.0 131700.00000000003 237300.0 ; + RECT 139500.0 235500.0 141300.0 237300.0 ; + RECT 149100.0 235500.0 150900.0 237300.0 ; + RECT 158700.0 235500.0 160500.0 237300.0 ; + RECT 168300.0 235500.0 170100.00000000003 237300.0 ; + RECT 198300.0 235500.0 200100.00000000003 237300.0 ; + RECT 206700.0 235500.0 208500.0 237300.0 ; + RECT 216300.0 235500.0 218100.00000000003 237300.0 ; + RECT 225900.0 235500.0 227700.00000000003 237300.0 ; + RECT 5100.000000000001 245100.0 6900.0 246900.0 ; + RECT 14700.0 245100.0 16500.0 246900.0 ; + RECT 24300.0 245100.0 26100.0 246900.0 ; + RECT 33900.00000000001 245100.0 35700.0 246900.0 ; + RECT 43500.00000000001 245100.0 45300.00000000001 246900.0 ; + RECT 53100.00000000001 245100.0 54900.00000000001 246900.0 ; + RECT 62700.0 245100.0 64500.0 246900.0 ; + RECT 72300.00000000001 245100.0 74100.00000000001 246900.0 ; + RECT 81900.0 245100.0 83700.0 246900.0 ; + RECT 91500.00000000001 245100.0 93300.00000000001 246900.0 ; + RECT 101100.00000000001 245100.0 102900.0 246900.0 ; + RECT 110700.0 245100.0 112500.0 246900.0 ; + RECT 120300.00000000001 245100.0 122100.00000000001 246900.0 ; + RECT 129900.0 245100.0 131700.00000000003 246900.0 ; + RECT 139500.0 245100.0 141300.0 246900.0 ; + RECT 149100.0 245100.0 150900.0 246900.0 ; + RECT 158700.0 245100.0 160500.0 246900.0 ; + RECT 168300.0 245100.0 170100.00000000003 246900.0 ; + RECT 198300.0 245100.0 200100.00000000003 246900.0 ; + RECT 206700.0 245100.0 208500.0 246900.0 ; + RECT 216300.0 245100.0 218100.00000000003 246900.0 ; + RECT 225900.0 245100.0 227700.00000000003 246900.0 ; + RECT 5100.000000000001 254700.0 6900.0 256500.0 ; + RECT 14700.0 254700.0 16500.0 256500.0 ; + RECT 24300.0 254700.0 26100.0 256500.0 ; + RECT 33900.00000000001 254700.0 35700.0 256500.0 ; + RECT 43500.00000000001 254700.0 45300.00000000001 256500.0 ; + RECT 53100.00000000001 254700.0 54900.00000000001 256500.0 ; + RECT 62700.0 254700.0 64500.0 256500.0 ; + RECT 72300.00000000001 254700.0 74100.00000000001 256500.0 ; + RECT 81900.0 254700.0 83700.0 256500.0 ; + RECT 91500.00000000001 254700.0 93300.00000000001 256500.0 ; + RECT 101100.00000000001 254700.0 102900.0 256500.0 ; + RECT 110700.0 254700.0 112500.0 256500.0 ; + RECT 120300.00000000001 254700.0 122100.00000000001 256500.0 ; + RECT 129900.0 254700.0 131700.00000000003 256500.0 ; + RECT 139500.0 254700.0 141300.0 256500.0 ; + RECT 149100.0 254700.0 150900.0 256500.0 ; + RECT 158700.0 254700.0 160500.0 256500.0 ; + RECT 168300.0 254700.0 170100.00000000003 256500.0 ; + RECT 198300.0 254700.0 200100.00000000003 256500.0 ; + RECT 206700.0 254700.0 208500.0 256500.0 ; + RECT 216300.0 254700.0 218100.00000000003 256500.0 ; + RECT 225900.0 254700.0 227700.00000000003 256500.0 ; + RECT 5100.000000000001 264300.0 6900.0 266100.0 ; + RECT 14700.0 264300.0 16500.0 266100.0 ; + RECT 24300.0 264300.0 26100.0 266100.0 ; + RECT 33900.00000000001 264300.0 35700.0 266100.0 ; + RECT 43500.00000000001 264300.0 45300.00000000001 266100.0 ; + RECT 53100.00000000001 264300.0 54900.00000000001 266100.0 ; + RECT 62700.0 264300.0 64500.0 266100.0 ; + RECT 72300.00000000001 264300.0 74100.00000000001 266100.0 ; + RECT 81900.0 264300.0 83700.0 266100.0 ; + RECT 91500.00000000001 264300.0 93300.00000000001 266100.0 ; + RECT 101100.00000000001 264300.0 102900.0 266100.0 ; + RECT 110700.0 264300.0 112500.0 266100.0 ; + RECT 120300.00000000001 264300.0 122100.00000000001 266100.0 ; + RECT 129900.0 264300.0 131700.00000000003 266100.0 ; + RECT 139500.0 264300.0 141300.0 266100.0 ; + RECT 149100.0 264300.0 150900.0 266100.0 ; + RECT 158700.0 264300.0 160500.0 266100.0 ; + RECT 168300.0 264300.0 170100.00000000003 266100.0 ; + RECT 198300.0 264300.0 200100.00000000003 266100.0 ; + RECT 206700.0 264300.0 208500.0 266100.0 ; + RECT 216300.0 264300.0 218100.00000000003 266100.0 ; + RECT 225900.0 264300.0 227700.00000000003 266100.0 ; + RECT 5100.000000000001 273900.0 6900.0 275700.0 ; + RECT 14700.0 273900.0 16500.0 275700.0 ; + RECT 24300.0 273900.0 26100.0 275700.0 ; + RECT 33900.00000000001 273900.0 35700.0 275700.0 ; + RECT 43500.00000000001 273900.0 45300.00000000001 275700.0 ; + RECT 53100.00000000001 273900.0 54900.00000000001 275700.0 ; + RECT 62700.0 273900.0 64500.0 275700.0 ; + RECT 72300.00000000001 273900.0 74100.00000000001 275700.0 ; + RECT 81900.0 273900.0 83700.0 275700.0 ; + RECT 91500.00000000001 273900.0 93300.00000000001 275700.0 ; + RECT 101100.00000000001 273900.0 102900.0 275700.0 ; + RECT 110700.0 273900.0 112500.0 275700.0 ; + RECT 120300.00000000001 273900.0 122100.00000000001 275700.0 ; + RECT 129900.0 273900.0 131700.00000000003 275700.0 ; + RECT 139500.0 273900.0 141300.0 275700.0 ; + RECT 149100.0 273900.0 150900.0 275700.0 ; + RECT 158700.0 273900.0 160500.0 275700.0 ; + RECT 168300.0 273900.0 170100.00000000003 275700.0 ; + RECT 177900.0 273900.0 179700.00000000003 275700.0 ; + RECT 187500.0 273900.0 189300.0 275700.0 ; + RECT 197100.0 273900.0 198900.0 275700.0 ; + RECT 206700.0 273900.0 208500.0 275700.0 ; + RECT 216300.0 273900.0 218100.00000000003 275700.0 ; + RECT 225900.0 273900.0 227700.00000000003 275700.0 ; + RECT 5100.000000000001 283500.0 6900.0 285300.0 ; + RECT 14700.0 283500.0 16500.0 285300.0 ; + RECT 24300.0 283500.0 26100.0 285300.0 ; + RECT 33900.00000000001 283500.0 35700.0 285300.0 ; + RECT 43500.00000000001 283500.0 45300.00000000001 285300.0 ; + RECT 53100.00000000001 283500.0 54900.00000000001 285300.0 ; + RECT 91500.00000000001 283500.0 93300.00000000001 285300.0 ; + RECT 101100.00000000001 283500.0 102900.0 285300.0 ; + RECT 110700.0 283500.0 112500.0 285300.0 ; + RECT 120300.00000000001 283500.0 122100.00000000001 285300.0 ; + RECT 129900.0 283500.0 131700.00000000003 285300.0 ; + RECT 139500.0 283500.0 141300.0 285300.0 ; + RECT 149100.0 283500.0 150900.0 285300.0 ; + RECT 158700.0 283500.0 160500.0 285300.0 ; + RECT 168300.0 283500.0 170100.00000000003 285300.0 ; + RECT 177900.0 283500.0 179700.00000000003 285300.0 ; + RECT 187500.0 283500.0 189300.0 285300.0 ; + RECT 197100.0 283500.0 198900.0 285300.0 ; + RECT 206700.0 283500.0 208500.0 285300.0 ; + RECT 216300.0 283500.0 218100.00000000003 285300.0 ; + RECT 225900.0 283500.0 227700.00000000003 285300.0 ; + RECT 5100.000000000001 293100.0 6900.0 294900.00000000006 ; + RECT 14700.0 293100.0 16500.0 294900.00000000006 ; + RECT 24300.0 293100.0 26100.0 294900.00000000006 ; + RECT 33900.00000000001 293100.0 35700.0 294900.00000000006 ; + RECT 43500.00000000001 293100.0 45300.00000000001 294900.00000000006 ; + RECT 51900.00000000001 293100.0 53700.0 294900.00000000006 ; + RECT 72300.00000000001 293100.0 74100.00000000001 294900.00000000006 ; + RECT 81900.0 293100.0 83700.0 294900.00000000006 ; + RECT 91500.00000000001 293100.0 93300.00000000001 294900.00000000006 ; + RECT 101100.00000000001 293100.0 102900.0 294900.00000000006 ; + RECT 110700.0 293100.0 112500.0 294900.00000000006 ; + RECT 120300.00000000001 293100.0 122100.00000000001 294900.00000000006 ; + RECT 129900.0 293100.0 131700.00000000003 294900.00000000006 ; + RECT 139500.0 293100.0 141300.0 294900.00000000006 ; + RECT 149100.0 293100.0 150900.0 294900.00000000006 ; + RECT 158700.0 293100.0 160500.0 294900.00000000006 ; + RECT 168300.0 293100.0 170100.00000000003 294900.00000000006 ; + RECT 177900.0 293100.0 179700.00000000003 294900.00000000006 ; + RECT 187500.0 293100.0 189300.0 294900.00000000006 ; + RECT 197100.0 293100.0 198900.0 294900.00000000006 ; + RECT 206700.0 293100.0 208500.0 294900.00000000006 ; + RECT 216300.0 293100.0 218100.00000000003 294900.00000000006 ; + RECT 225900.0 293100.0 227700.00000000003 294900.00000000006 ; + RECT 17200.000000000004 160400.0 16400.000000000004 161200.00000000003 ; + RECT 17200.000000000004 129199.99999999999 16400.000000000004 130000.0 ; + RECT 14800.0 141200.0 14000.0 142000.0 ; + RECT 17200.000000000004 141200.0 16400.000000000004 142000.0 ; + RECT 14800.0 160400.0 14000.0 161200.00000000003 ; + RECT 190000.00000000003 186800.0 189200.00000000003 187600.00000000003 ; + RECT 180400.00000000003 206000.0 179600.00000000003 206800.0 ; + RECT 180400.00000000003 222800.0 179600.00000000003 223600.00000000003 ; + RECT 34000.0 141200.0 33200.0 142000.0 ; + RECT 180400.00000000003 30800.0 179600.00000000003 31600.0 ; + RECT 190000.00000000003 47600.00000000001 189200.00000000003 48400.00000000001 ; + RECT 190000.00000000003 30800.0 189200.00000000003 31600.0 ; + RECT 180400.00000000003 47600.00000000001 179600.00000000003 48400.00000000001 ; + RECT 34000.0 160400.0 33200.0 161200.00000000003 ; + RECT 190000.00000000003 242000.0 189200.00000000003 242800.0 ; + RECT 190000.00000000003 206000.0 189200.00000000003 206800.0 ; + RECT 180400.00000000003 261200.0 179600.00000000003 262000.0 ; + RECT 190000.00000000003 261200.0 189200.00000000003 262000.0 ; + RECT 180400.00000000003 242000.0 179600.00000000003 242800.0 ; + RECT 190000.00000000003 222800.0 189200.00000000003 223600.00000000003 ; + RECT 180400.00000000003 186800.0 179600.00000000003 187600.00000000003 ; + RECT 29200.000000000004 129199.99999999999 28400.000000000004 130000.0 ; + RECT 192400.00000000003 -400.00000000000006 191600.00000000003 399.9999999999999 ; + RECT 60400.0 210800.0 59600.0 211600.00000000003 ; + RECT 19600.0 153200.0 18800.0 154000.0 ; + RECT 12400.000000000002 134000.0 11600.000000000002 134800.0 ; + RECT 19600.0 134000.0 18800.0 134800.0 ; + RECT 12400.000000000002 150799.99999999997 11600.000000000002 151600.0 ; + RECT 211600.00000000003 -400.00000000000006 210800.0 399.9999999999999 ; + RECT 192400.00000000003 198800.0 191600.00000000003 199600.00000000003 ; + RECT 185200.00000000003 237200.0 184400.0 238000.0 ; + RECT 192400.00000000003 256399.99999999997 191600.00000000003 257200.0 ; + RECT 192400.00000000003 237200.0 191600.00000000003 238000.0 ; + RECT 185200.00000000003 201200.0 184400.0 202000.0 ; + RECT 185200.00000000003 263600.0 184400.0 264400.00000000006 ; + RECT 182800.0 237200.0 182000.0 238000.0 ; + RECT 175600.00000000003 220400.0 174800.0 221200.00000000003 ; + RECT 185200.00000000003 220400.0 184400.0 221200.00000000003 ; + RECT 29200.000000000004 148400.0 28400.000000000004 149200.00000000003 ; + RECT 185200.00000000003 256399.99999999997 184400.0 257200.0 ; + RECT 29200.000000000004 165200.0 28400.000000000004 166000.0 ; + RECT 182800.0 198800.0 182000.0 199600.00000000003 ; + RECT 192400.00000000003 218000.0 191600.00000000003 218800.0 ; + END + END sram_2_16_scn4m_subm +END LIBRARY diff --git a/compiler/datasheet/server_scripts/files/temp/sram_2_16_scn4m_subm.py b/compiler/datasheet/server_scripts/files/temp/sram_2_16_scn4m_subm.py new file mode 100644 index 00000000..1b26c11d --- /dev/null +++ b/compiler/datasheet/server_scripts/files/temp/sram_2_16_scn4m_subm.py @@ -0,0 +1,18 @@ +word_size = 2 +num_words = 16 + +tech_name = "scn4m_subm" +process_corners = ["TT"] +supply_voltages = [ 5.0 ] +temperatures = [ 25 ] + +output_path = "temp" +output_name = "sram_{0}_{1}_{2}".format(word_size,num_words,tech_name) + +#Setting for multiport +netlist_only = True +bitcell = "pbitcell" +replica_bitcell="replica_pbitcell" +num_rw_ports = 1 +num_r_ports = 1 +num_w_ports = 1 diff --git a/compiler/datasheet/server_scripts/files/temp/sram_2_16_scn4m_subm.sp b/compiler/datasheet/server_scripts/files/temp/sram_2_16_scn4m_subm.sp new file mode 100644 index 00000000..3b8783d8 --- /dev/null +++ b/compiler/datasheet/server_scripts/files/temp/sram_2_16_scn4m_subm.sp @@ -0,0 +1,767 @@ +************************************************** +* OpenRAM generated memory. +* Words: 16 +* Data bits: 2 +* Banks: 1 +* Column mux: 1:1 +************************************************** +*********************** "dff" ****************************** +* Positive edge-triggered FF +.SUBCKT dff D Q clk vdd gnd + +* SPICE3 file created from dff.ext - technology: scmos + +M1000 vdd clk a_24_24# vdd p w=8u l=0.4u +M1001 a_84_296# D vdd vdd p w=4u l=0.4u +M1002 a_104_24# clk a_84_296# vdd p w=4u l=0.4u +M1003 a_140_296# a_24_24# a_104_24# vdd p w=4u l=0.4u +M1004 vdd a_152_16# a_140_296# vdd p w=4u l=0.4u +M1005 a_152_16# a_104_24# vdd vdd p w=4u l=0.4u +M1006 a_260_296# a_152_16# vdd vdd p w=4u l=0.4u +M1007 a_280_24# a_24_24# a_260_296# vdd p w=4u l=0.4u +M1008 a_320_336# clk a_280_24# vdd p w=2u l=0.4u +M1009 vdd Q a_320_336# vdd p w=2u l=0.4u +M1010 gnd clk a_24_24# gnd n w=4u l=0.4u +M1011 Q a_280_24# vdd vdd p w=8u l=0.4u +M1012 a_84_24# D gnd gnd n w=2u l=0.4u +M1013 a_104_24# a_24_24# a_84_24# gnd n w=2u l=0.4u +M1014 a_140_24# clk a_104_24# gnd n w=2u l=0.4u +M1015 gnd a_152_16# a_140_24# gnd n w=2u l=0.4u +M1016 a_152_16# a_104_24# gnd gnd n w=2u l=0.4u +M1017 a_260_24# a_152_16# gnd gnd n w=2u l=0.4u +M1018 a_280_24# clk a_260_24# gnd n w=2u l=0.4u +M1019 a_320_24# a_24_24# a_280_24# gnd n w=2u l=0.4u +M1020 gnd Q a_320_24# gnd n w=2u l=0.4u +M1021 Q a_280_24# gnd gnd n w=4u l=0.4u + +.ENDS + +* ptx M{0} {1} n m=1 w=1.6u l=0.4u pd=4.0u ps=4.0u as=1.6p ad=1.6p + +* ptx M{0} {1} p m=1 w=3.2u l=0.4u pd=7.2u ps=7.2u as=3.2p ad=3.2p + +.SUBCKT pinv_2 A Z vdd gnd +Mpinv_pmos Z A vdd vdd p m=1 w=3.2u l=0.4u pd=7.2u ps=7.2u as=3.2p ad=3.2p +Mpinv_nmos Z A gnd gnd n m=1 w=1.6u l=0.4u pd=4.0u ps=4.0u as=1.6p ad=1.6p +.ENDS pinv_2 + +.SUBCKT dff_inv_2 D Q Qb clk vdd gnd +Xdff_inv_dff D Q clk vdd gnd dff +Xdff_inv_inv1 Q Qb vdd gnd pinv_2 +.ENDS dff_inv_2 + +.SUBCKT dff_inv_array_2x1_1 din_0 din_1 dout_0 dout_bar_0 dout_1 dout_bar_1 clk vdd gnd +XXdff_r0_c0 din_0 dout_0 dout_bar_0 clk vdd gnd dff_inv_2 +XXdff_r1_c0 din_1 dout_1 dout_bar_1 clk vdd gnd dff_inv_2 +.ENDS dff_inv_array_2x1_1 + +* ptx M{0} {1} p m=1 w=1.6u l=0.4u pd=4.0u ps=4.0u as=1.6p ad=1.6p + +.SUBCKT pnand2_1 A B Z vdd gnd +Mpnand2_pmos1 vdd A Z vdd p m=1 w=1.6u l=0.4u pd=4.0u ps=4.0u as=1.6p ad=1.6p +Mpnand2_pmos2 Z B vdd vdd p m=1 w=1.6u l=0.4u pd=4.0u ps=4.0u as=1.6p ad=1.6p +Mpnand2_nmos1 Z B net1 gnd n m=1 w=1.6u l=0.4u pd=4.0u ps=4.0u as=1.6p ad=1.6p +Mpnand2_nmos2 net1 A gnd gnd n m=1 w=1.6u l=0.4u pd=4.0u ps=4.0u as=1.6p ad=1.6p +.ENDS pnand2_1 + +.SUBCKT pnand3_1 A B C Z vdd gnd +Mpnand3_pmos1 vdd A Z vdd p m=1 w=1.6u l=0.4u pd=4.0u ps=4.0u as=1.6p ad=1.6p +Mpnand3_pmos2 Z B vdd vdd p m=1 w=1.6u l=0.4u pd=4.0u ps=4.0u as=1.6p ad=1.6p +Mpnand3_pmos3 Z C vdd vdd p m=1 w=1.6u l=0.4u pd=4.0u ps=4.0u as=1.6p ad=1.6p +Mpnand3_nmos1 Z C net1 gnd n m=1 w=1.6u l=0.4u pd=4.0u ps=4.0u as=1.6p ad=1.6p +Mpnand3_nmos2 net1 B net2 gnd n m=1 w=1.6u l=0.4u pd=4.0u ps=4.0u as=1.6p ad=1.6p +Mpnand3_nmos3 net2 A gnd gnd n m=1 w=1.6u l=0.4u pd=4.0u ps=4.0u as=1.6p ad=1.6p +.ENDS pnand3_1 + +* ptx M{0} {1} n m=1 w=0.8u l=0.4u pd=2.4000000000000004u ps=2.4000000000000004u as=0.8p ad=0.8p + +.SUBCKT pinv_3 A Z vdd gnd +Mpinv_pmos Z A vdd vdd p m=1 w=1.6u l=0.4u pd=4.0u ps=4.0u as=1.6p ad=1.6p +Mpinv_nmos Z A gnd gnd n m=1 w=0.8u l=0.4u pd=2.4000000000000004u ps=2.4000000000000004u as=0.8p ad=0.8p +.ENDS pinv_3 + +.SUBCKT pinv_4 A Z vdd gnd +Mpinv_pmos Z A vdd vdd p m=1 w=3.2u l=0.4u pd=7.2u ps=7.2u as=3.2p ad=3.2p +Mpinv_nmos Z A gnd gnd n m=1 w=1.6u l=0.4u pd=4.0u ps=4.0u as=1.6p ad=1.6p +.ENDS pinv_4 + +* ptx M{0} {1} n m=1 w=3.2u l=0.4u pd=7.2u ps=7.2u as=3.2p ad=3.2p + +* ptx M{0} {1} p m=1 w=6.4u l=0.4u pd=13.600000000000001u ps=13.600000000000001u as=6.4p ad=6.4p + +.SUBCKT pinv_5 A Z vdd gnd +Mpinv_pmos Z A vdd vdd p m=1 w=6.4u l=0.4u pd=13.600000000000001u ps=13.600000000000001u as=6.4p ad=6.4p +Mpinv_nmos Z A gnd gnd n m=1 w=3.2u l=0.4u pd=7.2u ps=7.2u as=3.2p ad=3.2p +.ENDS pinv_5 + +.SUBCKT pinvbuf_2_4_1 A Zb Z vdd gnd +Xbuf_inv1 A zb_int vdd gnd pinv_3 +Xbuf_inv2 zb_int z_int vdd gnd pinv_4 +Xbuf_inv3 z_int Zb vdd gnd pinv_5 +Xbuf_inv4 zb_int Z vdd gnd pinv_5 +.ENDS pinvbuf_2_4_1 + +.SUBCKT pinv_6 A Z vdd gnd +Mpinv_pmos Z A vdd vdd p m=1 w=1.6u l=0.4u pd=4.0u ps=4.0u as=1.6p ad=1.6p +Mpinv_nmos Z A gnd gnd n m=1 w=0.8u l=0.4u pd=2.4000000000000004u ps=2.4000000000000004u as=0.8p ad=0.8p +.ENDS pinv_6 + +.SUBCKT pinv_7 A Z vdd gnd +Mpinv_pmos Z A vdd vdd p m=1 w=6.4u l=0.4u pd=13.600000000000001u ps=13.600000000000001u as=6.4p ad=6.4p +Mpinv_nmos Z A gnd gnd n m=1 w=3.2u l=0.4u pd=7.2u ps=7.2u as=3.2p ad=3.2p +.ENDS pinv_7 + +* ptx M{0} {1} n m=1 w=12.8u l=0.4u pd=26.400000000000002u ps=26.400000000000002u as=12.8p ad=12.8p + +* ptx M{0} {1} p m=1 w=25.6u l=0.4u pd=52.0u ps=52.0u as=25.6p ad=25.6p + +.SUBCKT pinv_8 A Z vdd gnd +Mpinv_pmos Z A vdd vdd p m=1 w=25.6u l=0.4u pd=52.0u ps=52.0u as=25.6p ad=25.6p +Mpinv_nmos Z A gnd gnd n m=1 w=12.8u l=0.4u pd=26.400000000000002u ps=26.400000000000002u as=12.8p ad=12.8p +.ENDS pinv_8 + +* ptx M{0} {1} n m=1 w=1.6u l=0.4u pd=4.0u ps=4.0u as=1.6p ad=1.6p + +* ptx M{0} {1} p m=1 w=0.6000000000000001u l=0.4u pd=2.0u ps=2.0u as=0.6000000000000001p ad=0.6000000000000001p + +* ptx M{0} {1} n m=1 w=0.8u l=0.4u pd=2.4000000000000004u ps=2.4000000000000004u as=0.8p ad=0.8p + +* ptx M{0} {1} n m=1 w=1.2000000000000002u l=0.4u pd=3.2u ps=3.2u as=1.2000000000000002p ad=1.2000000000000002p + +.SUBCKT replica_pbitcell_1RW_1W_1R bl0 br0 bl1 br1 bl2 br2 wl0 wl1 wl2 vdd gnd +Minverter_nmos_left Q vdd gnd gnd n m=1 w=1.6u l=0.4u pd=4.0u ps=4.0u as=1.6p ad=1.6p +Minverter_nmos_right gnd Q vdd gnd n m=1 w=1.6u l=0.4u pd=4.0u ps=4.0u as=1.6p ad=1.6p +Minverter_pmos_left Q vdd vdd vdd p m=1 w=0.6000000000000001u l=0.4u pd=2.0u ps=2.0u as=0.6000000000000001p ad=0.6000000000000001p +Minverter_pmos_right vdd Q vdd vdd p m=1 w=0.6000000000000001u l=0.4u pd=2.0u ps=2.0u as=0.6000000000000001p ad=0.6000000000000001p +Mreadwrite_nmos_left0 bl0 wl0 Q gnd n m=1 w=0.8u l=0.4u pd=2.4000000000000004u ps=2.4000000000000004u as=0.8p ad=0.8p +Mreadwrite_nmos_right0 vdd wl0 br0 gnd n m=1 w=0.8u l=0.4u pd=2.4000000000000004u ps=2.4000000000000004u as=0.8p ad=0.8p +Mwrite_nmos_left0 bl1 wl1 Q gnd n m=1 w=0.8u l=0.4u pd=2.4000000000000004u ps=2.4000000000000004u as=0.8p ad=0.8p +Mwrite_nmos_right0 vdd wl1 br1 gnd n m=1 w=0.8u l=0.4u pd=2.4000000000000004u ps=2.4000000000000004u as=0.8p ad=0.8p +Mread_access_nmos_left0 RA_to_R_left0 vdd gnd gnd n m=1 w=1.2000000000000002u l=0.4u pd=3.2u ps=3.2u as=1.2000000000000002p ad=1.2000000000000002p +Mread_access_nmos_right0 gnd Q RA_to_R_right0 gnd n m=1 w=1.2000000000000002u l=0.4u pd=3.2u ps=3.2u as=1.2000000000000002p ad=1.2000000000000002p +Mread_nmos_left0 bl2 wl2 RA_to_R_left0 gnd n m=1 w=1.2000000000000002u l=0.4u pd=3.2u ps=3.2u as=1.2000000000000002p ad=1.2000000000000002p +Mread_nmos_right0 RA_to_R_right0 wl2 br2 gnd n m=1 w=1.2000000000000002u l=0.4u pd=3.2u ps=3.2u as=1.2000000000000002p ad=1.2000000000000002p +.ENDS replica_pbitcell_1RW_1W_1R + +.SUBCKT replica_pbitcell bl0 br0 bl1 br1 bl2 br2 wl0 wl1 wl2 vdd gnd +Xpbitcell bl0 br0 bl1 br1 bl2 br2 wl0 wl1 wl2 vdd gnd replica_pbitcell_1RW_1W_1R +.ENDS replica_pbitcell + +.SUBCKT pbitcell_1RW_1W_1R bl0 br0 bl1 br1 bl2 br2 wl0 wl1 wl2 vdd gnd +Minverter_nmos_left Q Q_bar gnd gnd n m=1 w=1.6u l=0.4u pd=4.0u ps=4.0u as=1.6p ad=1.6p +Minverter_nmos_right gnd Q Q_bar gnd n m=1 w=1.6u l=0.4u pd=4.0u ps=4.0u as=1.6p ad=1.6p +Minverter_pmos_left Q Q_bar vdd vdd p m=1 w=0.6000000000000001u l=0.4u pd=2.0u ps=2.0u as=0.6000000000000001p ad=0.6000000000000001p +Minverter_pmos_right vdd Q Q_bar vdd p m=1 w=0.6000000000000001u l=0.4u pd=2.0u ps=2.0u as=0.6000000000000001p ad=0.6000000000000001p +Mreadwrite_nmos_left0 bl0 wl0 Q gnd n m=1 w=0.8u l=0.4u pd=2.4000000000000004u ps=2.4000000000000004u as=0.8p ad=0.8p +Mreadwrite_nmos_right0 Q_bar wl0 br0 gnd n m=1 w=0.8u l=0.4u pd=2.4000000000000004u ps=2.4000000000000004u as=0.8p ad=0.8p +Mwrite_nmos_left0 bl1 wl1 Q gnd n m=1 w=0.8u l=0.4u pd=2.4000000000000004u ps=2.4000000000000004u as=0.8p ad=0.8p +Mwrite_nmos_right0 Q_bar wl1 br1 gnd n m=1 w=0.8u l=0.4u pd=2.4000000000000004u ps=2.4000000000000004u as=0.8p ad=0.8p +Mread_access_nmos_left0 RA_to_R_left0 Q_bar gnd gnd n m=1 w=1.2000000000000002u l=0.4u pd=3.2u ps=3.2u as=1.2000000000000002p ad=1.2000000000000002p +Mread_access_nmos_right0 gnd Q RA_to_R_right0 gnd n m=1 w=1.2000000000000002u l=0.4u pd=3.2u ps=3.2u as=1.2000000000000002p ad=1.2000000000000002p +Mread_nmos_left0 bl2 wl2 RA_to_R_left0 gnd n m=1 w=1.2000000000000002u l=0.4u pd=3.2u ps=3.2u as=1.2000000000000002p ad=1.2000000000000002p +Mread_nmos_right0 RA_to_R_right0 wl2 br2 gnd n m=1 w=1.2000000000000002u l=0.4u pd=3.2u ps=3.2u as=1.2000000000000002p ad=1.2000000000000002p +.ENDS pbitcell_1RW_1W_1R + +.SUBCKT bitcell_array_8x1_1 bl0_0 br0_0 bl1_0 br1_0 bl2_0 br2_0 wl0_0 wl1_0 wl2_0 wl0_1 wl1_1 wl2_1 wl0_2 wl1_2 wl2_2 wl0_3 wl1_3 wl2_3 wl0_4 wl1_4 wl2_4 wl0_5 wl1_5 wl2_5 wl0_6 wl1_6 wl2_6 wl0_7 wl1_7 wl2_7 vdd gnd +Xbit_r0_c0 bl0_0 br0_0 bl1_0 br1_0 bl2_0 br2_0 wl0_0 wl1_0 wl2_0 vdd gnd pbitcell_1RW_1W_1R +Xbit_r1_c0 bl0_0 br0_0 bl1_0 br1_0 bl2_0 br2_0 wl0_1 wl1_1 wl2_1 vdd gnd pbitcell_1RW_1W_1R +Xbit_r2_c0 bl0_0 br0_0 bl1_0 br1_0 bl2_0 br2_0 wl0_2 wl1_2 wl2_2 vdd gnd pbitcell_1RW_1W_1R +Xbit_r3_c0 bl0_0 br0_0 bl1_0 br1_0 bl2_0 br2_0 wl0_3 wl1_3 wl2_3 vdd gnd pbitcell_1RW_1W_1R +Xbit_r4_c0 bl0_0 br0_0 bl1_0 br1_0 bl2_0 br2_0 wl0_4 wl1_4 wl2_4 vdd gnd pbitcell_1RW_1W_1R +Xbit_r5_c0 bl0_0 br0_0 bl1_0 br1_0 bl2_0 br2_0 wl0_5 wl1_5 wl2_5 vdd gnd pbitcell_1RW_1W_1R +Xbit_r6_c0 bl0_0 br0_0 bl1_0 br1_0 bl2_0 br2_0 wl0_6 wl1_6 wl2_6 vdd gnd pbitcell_1RW_1W_1R +Xbit_r7_c0 bl0_0 br0_0 bl1_0 br1_0 bl2_0 br2_0 wl0_7 wl1_7 wl2_7 vdd gnd pbitcell_1RW_1W_1R +.ENDS bitcell_array_8x1_1 + +.SUBCKT pinv_9 A Z vdd gnd +Mpinv_pmos Z A vdd vdd p m=1 w=1.6u l=0.4u pd=4.0u ps=4.0u as=1.6p ad=1.6p +Mpinv_nmos Z A gnd gnd n m=1 w=0.8u l=0.4u pd=2.4000000000000004u ps=2.4000000000000004u as=0.8p ad=0.8p +.ENDS pinv_9 + +.SUBCKT delay_chain_1 in out vdd gnd +Xdinv0 in dout_1 vdd gnd pinv_9 +Xdload_0_0 dout_1 n_0_0 vdd gnd pinv_9 +Xdload_0_1 dout_1 n_0_1 vdd gnd pinv_9 +Xdload_0_2 dout_1 n_0_2 vdd gnd pinv_9 +Xdinv1 dout_1 dout_2 vdd gnd pinv_9 +Xdload_1_0 dout_2 n_1_0 vdd gnd pinv_9 +Xdload_1_1 dout_2 n_1_1 vdd gnd pinv_9 +Xdload_1_2 dout_2 n_1_2 vdd gnd pinv_9 +Xdinv2 dout_2 dout_3 vdd gnd pinv_9 +Xdload_2_0 dout_3 n_2_0 vdd gnd pinv_9 +Xdload_2_1 dout_3 n_2_1 vdd gnd pinv_9 +Xdload_2_2 dout_3 n_2_2 vdd gnd pinv_9 +Xdinv3 dout_3 out vdd gnd pinv_9 +Xdload_3_0 out n_3_0 vdd gnd pinv_9 +Xdload_3_1 out n_3_1 vdd gnd pinv_9 +Xdload_3_2 out n_3_2 vdd gnd pinv_9 +.ENDS delay_chain_1 + +.SUBCKT pinv_10 A Z vdd gnd +Mpinv_pmos Z A vdd vdd p m=1 w=1.6u l=0.4u pd=4.0u ps=4.0u as=1.6p ad=1.6p +Mpinv_nmos Z A gnd gnd n m=1 w=0.8u l=0.4u pd=2.4000000000000004u ps=2.4000000000000004u as=0.8p ad=0.8p +.ENDS pinv_10 + +* ptx M{0} {1} p m=1 w=0.8u l=0.4u pd=2.4000000000000004u ps=2.4000000000000004u as=0.8p ad=0.8p + +.SUBCKT replica_bitline_rw en out vdd gnd +Xrbl_inv bl0_0 out vdd gnd pinv_10 +Mrbl_access_tx vdd delayed_en bl0_0 vdd p m=1 w=0.8u l=0.4u pd=2.4000000000000004u ps=2.4000000000000004u as=0.8p ad=0.8p +Xdelay_chain en delayed_en vdd gnd delay_chain_1 +Xbitcell bl0_0 br0_0 bl1_0 br1_0 bl2_0 br2_0 delayed_en delayed_en delayed_en vdd gnd replica_pbitcell +Xload bl0_0 br0_0 bl1_0 br1_0 bl2_0 br2_0 gnd gnd gnd gnd gnd gnd gnd gnd gnd gnd gnd gnd gnd gnd gnd gnd gnd gnd gnd gnd gnd gnd gnd gnd vdd gnd bitcell_array_8x1_1 +.ENDS replica_bitline_rw + +.SUBCKT control_logic_rw csb web clk s_en w_en clk_buf_bar clk_buf vdd gnd +Xctrl_dffs csb web cs_bar cs we_bar we clk_buf vdd gnd dff_inv_array_2x1_1 +Xclkbuf clk clk_buf_bar clk_buf vdd gnd pinvbuf_2_4_1 +Xnand3_w_en_bar clk_buf_bar cs we w_en_bar vdd gnd pnand3_1 +Xinv_pre_w_en w_en_bar pre_w_en vdd gnd pinv_6 +Xinv_pre_w_en_bar pre_w_en pre_w_en_bar vdd gnd pinv_7 +Xinv_w_en2 pre_w_en_bar w_en vdd gnd pinv_8 +Xnand2_rbl_in_bar clk_buf_bar cs rbl_in_bar vdd gnd pnand2_1 +Xinv_rbl_in rbl_in_bar rbl_in vdd gnd pinv_6 +Xinv_pre_s_en_bar pre_s_en pre_s_en_bar vdd gnd pinv_7 +Xinv_s_en pre_s_en_bar s_en vdd gnd pinv_8 +Xreplica_bitline rbl_in pre_s_en vdd gnd replica_bitline_rw +.ENDS control_logic_rw + +.SUBCKT pinv_12 A Z vdd gnd +Mpinv_pmos Z A vdd vdd p m=1 w=3.2u l=0.4u pd=7.2u ps=7.2u as=3.2p ad=3.2p +Mpinv_nmos Z A gnd gnd n m=1 w=1.6u l=0.4u pd=4.0u ps=4.0u as=1.6p ad=1.6p +.ENDS pinv_12 + +.SUBCKT dff_inv_4 D Q Qb clk vdd gnd +Xdff_inv_dff D Q clk vdd gnd dff +Xdff_inv_inv1 Q Qb vdd gnd pinv_12 +.ENDS dff_inv_4 + +.SUBCKT dff_inv_array_1x1_2 din_0 dout_0 dout_bar_0 clk vdd gnd +XXdff_r0_c0 din_0 dout_0 dout_bar_0 clk vdd gnd dff_inv_4 +.ENDS dff_inv_array_1x1_2 + +.SUBCKT pnand2_2 A B Z vdd gnd +Mpnand2_pmos1 vdd A Z vdd p m=1 w=1.6u l=0.4u pd=4.0u ps=4.0u as=1.6p ad=1.6p +Mpnand2_pmos2 Z B vdd vdd p m=1 w=1.6u l=0.4u pd=4.0u ps=4.0u as=1.6p ad=1.6p +Mpnand2_nmos1 Z B net1 gnd n m=1 w=1.6u l=0.4u pd=4.0u ps=4.0u as=1.6p ad=1.6p +Mpnand2_nmos2 net1 A gnd gnd n m=1 w=1.6u l=0.4u pd=4.0u ps=4.0u as=1.6p ad=1.6p +.ENDS pnand2_2 + +.SUBCKT pnand3_2 A B C Z vdd gnd +Mpnand3_pmos1 vdd A Z vdd p m=1 w=1.6u l=0.4u pd=4.0u ps=4.0u as=1.6p ad=1.6p +Mpnand3_pmos2 Z B vdd vdd p m=1 w=1.6u l=0.4u pd=4.0u ps=4.0u as=1.6p ad=1.6p +Mpnand3_pmos3 Z C vdd vdd p m=1 w=1.6u l=0.4u pd=4.0u ps=4.0u as=1.6p ad=1.6p +Mpnand3_nmos1 Z C net1 gnd n m=1 w=1.6u l=0.4u pd=4.0u ps=4.0u as=1.6p ad=1.6p +Mpnand3_nmos2 net1 B net2 gnd n m=1 w=1.6u l=0.4u pd=4.0u ps=4.0u as=1.6p ad=1.6p +Mpnand3_nmos3 net2 A gnd gnd n m=1 w=1.6u l=0.4u pd=4.0u ps=4.0u as=1.6p ad=1.6p +.ENDS pnand3_2 + +.SUBCKT pinv_13 A Z vdd gnd +Mpinv_pmos Z A vdd vdd p m=1 w=1.6u l=0.4u pd=4.0u ps=4.0u as=1.6p ad=1.6p +Mpinv_nmos Z A gnd gnd n m=1 w=0.8u l=0.4u pd=2.4000000000000004u ps=2.4000000000000004u as=0.8p ad=0.8p +.ENDS pinv_13 + +.SUBCKT pinv_14 A Z vdd gnd +Mpinv_pmos Z A vdd vdd p m=1 w=3.2u l=0.4u pd=7.2u ps=7.2u as=3.2p ad=3.2p +Mpinv_nmos Z A gnd gnd n m=1 w=1.6u l=0.4u pd=4.0u ps=4.0u as=1.6p ad=1.6p +.ENDS pinv_14 + +.SUBCKT pinv_15 A Z vdd gnd +Mpinv_pmos Z A vdd vdd p m=1 w=6.4u l=0.4u pd=13.600000000000001u ps=13.600000000000001u as=6.4p ad=6.4p +Mpinv_nmos Z A gnd gnd n m=1 w=3.2u l=0.4u pd=7.2u ps=7.2u as=3.2p ad=3.2p +.ENDS pinv_15 + +.SUBCKT pinvbuf_2_4_2 A Zb Z vdd gnd +Xbuf_inv1 A zb_int vdd gnd pinv_13 +Xbuf_inv2 zb_int z_int vdd gnd pinv_14 +Xbuf_inv3 z_int Zb vdd gnd pinv_15 +Xbuf_inv4 zb_int Z vdd gnd pinv_15 +.ENDS pinvbuf_2_4_2 + +.SUBCKT pinv_16 A Z vdd gnd +Mpinv_pmos Z A vdd vdd p m=1 w=1.6u l=0.4u pd=4.0u ps=4.0u as=1.6p ad=1.6p +Mpinv_nmos Z A gnd gnd n m=1 w=0.8u l=0.4u pd=2.4000000000000004u ps=2.4000000000000004u as=0.8p ad=0.8p +.ENDS pinv_16 + +.SUBCKT pinv_17 A Z vdd gnd +Mpinv_pmos Z A vdd vdd p m=1 w=6.4u l=0.4u pd=13.600000000000001u ps=13.600000000000001u as=6.4p ad=6.4p +Mpinv_nmos Z A gnd gnd n m=1 w=3.2u l=0.4u pd=7.2u ps=7.2u as=3.2p ad=3.2p +.ENDS pinv_17 + +.SUBCKT pinv_18 A Z vdd gnd +Mpinv_pmos Z A vdd vdd p m=1 w=25.6u l=0.4u pd=52.0u ps=52.0u as=25.6p ad=25.6p +Mpinv_nmos Z A gnd gnd n m=1 w=12.8u l=0.4u pd=26.400000000000002u ps=26.400000000000002u as=12.8p ad=12.8p +.ENDS pinv_18 + +.SUBCKT control_logic_w csb clk w_en clk_buf_bar clk_buf vdd gnd +Xctrl_dffs csb cs_bar cs clk_buf vdd gnd dff_inv_array_1x1_2 +Xclkbuf clk clk_buf_bar clk_buf vdd gnd pinvbuf_2_4_2 +Xnand3_w_en_bar clk_buf_bar cs w_en_bar vdd gnd pnand2_2 +Xinv_pre_w_en w_en_bar pre_w_en vdd gnd pinv_16 +Xinv_pre_w_en_bar pre_w_en pre_w_en_bar vdd gnd pinv_17 +Xinv_w_en2 pre_w_en_bar w_en vdd gnd pinv_18 +.ENDS control_logic_w + +.SUBCKT pinv_20 A Z vdd gnd +Mpinv_pmos Z A vdd vdd p m=1 w=3.2u l=0.4u pd=7.2u ps=7.2u as=3.2p ad=3.2p +Mpinv_nmos Z A gnd gnd n m=1 w=1.6u l=0.4u pd=4.0u ps=4.0u as=1.6p ad=1.6p +.ENDS pinv_20 + +.SUBCKT dff_inv_6 D Q Qb clk vdd gnd +Xdff_inv_dff D Q clk vdd gnd dff +Xdff_inv_inv1 Q Qb vdd gnd pinv_20 +.ENDS dff_inv_6 + +.SUBCKT dff_inv_array_1x1_3 din_0 dout_0 dout_bar_0 clk vdd gnd +XXdff_r0_c0 din_0 dout_0 dout_bar_0 clk vdd gnd dff_inv_6 +.ENDS dff_inv_array_1x1_3 + +.SUBCKT pnand2_3 A B Z vdd gnd +Mpnand2_pmos1 vdd A Z vdd p m=1 w=1.6u l=0.4u pd=4.0u ps=4.0u as=1.6p ad=1.6p +Mpnand2_pmos2 Z B vdd vdd p m=1 w=1.6u l=0.4u pd=4.0u ps=4.0u as=1.6p ad=1.6p +Mpnand2_nmos1 Z B net1 gnd n m=1 w=1.6u l=0.4u pd=4.0u ps=4.0u as=1.6p ad=1.6p +Mpnand2_nmos2 net1 A gnd gnd n m=1 w=1.6u l=0.4u pd=4.0u ps=4.0u as=1.6p ad=1.6p +.ENDS pnand2_3 + +.SUBCKT pnand3_3 A B C Z vdd gnd +Mpnand3_pmos1 vdd A Z vdd p m=1 w=1.6u l=0.4u pd=4.0u ps=4.0u as=1.6p ad=1.6p +Mpnand3_pmos2 Z B vdd vdd p m=1 w=1.6u l=0.4u pd=4.0u ps=4.0u as=1.6p ad=1.6p +Mpnand3_pmos3 Z C vdd vdd p m=1 w=1.6u l=0.4u pd=4.0u ps=4.0u as=1.6p ad=1.6p +Mpnand3_nmos1 Z C net1 gnd n m=1 w=1.6u l=0.4u pd=4.0u ps=4.0u as=1.6p ad=1.6p +Mpnand3_nmos2 net1 B net2 gnd n m=1 w=1.6u l=0.4u pd=4.0u ps=4.0u as=1.6p ad=1.6p +Mpnand3_nmos3 net2 A gnd gnd n m=1 w=1.6u l=0.4u pd=4.0u ps=4.0u as=1.6p ad=1.6p +.ENDS pnand3_3 + +.SUBCKT pinv_21 A Z vdd gnd +Mpinv_pmos Z A vdd vdd p m=1 w=1.6u l=0.4u pd=4.0u ps=4.0u as=1.6p ad=1.6p +Mpinv_nmos Z A gnd gnd n m=1 w=0.8u l=0.4u pd=2.4000000000000004u ps=2.4000000000000004u as=0.8p ad=0.8p +.ENDS pinv_21 + +.SUBCKT pinv_22 A Z vdd gnd +Mpinv_pmos Z A vdd vdd p m=1 w=3.2u l=0.4u pd=7.2u ps=7.2u as=3.2p ad=3.2p +Mpinv_nmos Z A gnd gnd n m=1 w=1.6u l=0.4u pd=4.0u ps=4.0u as=1.6p ad=1.6p +.ENDS pinv_22 + +.SUBCKT pinv_23 A Z vdd gnd +Mpinv_pmos Z A vdd vdd p m=1 w=6.4u l=0.4u pd=13.600000000000001u ps=13.600000000000001u as=6.4p ad=6.4p +Mpinv_nmos Z A gnd gnd n m=1 w=3.2u l=0.4u pd=7.2u ps=7.2u as=3.2p ad=3.2p +.ENDS pinv_23 + +.SUBCKT pinvbuf_2_4_3 A Zb Z vdd gnd +Xbuf_inv1 A zb_int vdd gnd pinv_21 +Xbuf_inv2 zb_int z_int vdd gnd pinv_22 +Xbuf_inv3 z_int Zb vdd gnd pinv_23 +Xbuf_inv4 zb_int Z vdd gnd pinv_23 +.ENDS pinvbuf_2_4_3 + +.SUBCKT pinv_24 A Z vdd gnd +Mpinv_pmos Z A vdd vdd p m=1 w=1.6u l=0.4u pd=4.0u ps=4.0u as=1.6p ad=1.6p +Mpinv_nmos Z A gnd gnd n m=1 w=0.8u l=0.4u pd=2.4000000000000004u ps=2.4000000000000004u as=0.8p ad=0.8p +.ENDS pinv_24 + +.SUBCKT pinv_25 A Z vdd gnd +Mpinv_pmos Z A vdd vdd p m=1 w=6.4u l=0.4u pd=13.600000000000001u ps=13.600000000000001u as=6.4p ad=6.4p +Mpinv_nmos Z A gnd gnd n m=1 w=3.2u l=0.4u pd=7.2u ps=7.2u as=3.2p ad=3.2p +.ENDS pinv_25 + +.SUBCKT pinv_26 A Z vdd gnd +Mpinv_pmos Z A vdd vdd p m=1 w=25.6u l=0.4u pd=52.0u ps=52.0u as=25.6p ad=25.6p +Mpinv_nmos Z A gnd gnd n m=1 w=12.8u l=0.4u pd=26.400000000000002u ps=26.400000000000002u as=12.8p ad=12.8p +.ENDS pinv_26 + +.SUBCKT bitcell_array_8x1_2 bl0_0 br0_0 bl1_0 br1_0 bl2_0 br2_0 wl0_0 wl1_0 wl2_0 wl0_1 wl1_1 wl2_1 wl0_2 wl1_2 wl2_2 wl0_3 wl1_3 wl2_3 wl0_4 wl1_4 wl2_4 wl0_5 wl1_5 wl2_5 wl0_6 wl1_6 wl2_6 wl0_7 wl1_7 wl2_7 vdd gnd +Xbit_r0_c0 bl0_0 br0_0 bl1_0 br1_0 bl2_0 br2_0 wl0_0 wl1_0 wl2_0 vdd gnd pbitcell_1RW_1W_1R +Xbit_r1_c0 bl0_0 br0_0 bl1_0 br1_0 bl2_0 br2_0 wl0_1 wl1_1 wl2_1 vdd gnd pbitcell_1RW_1W_1R +Xbit_r2_c0 bl0_0 br0_0 bl1_0 br1_0 bl2_0 br2_0 wl0_2 wl1_2 wl2_2 vdd gnd pbitcell_1RW_1W_1R +Xbit_r3_c0 bl0_0 br0_0 bl1_0 br1_0 bl2_0 br2_0 wl0_3 wl1_3 wl2_3 vdd gnd pbitcell_1RW_1W_1R +Xbit_r4_c0 bl0_0 br0_0 bl1_0 br1_0 bl2_0 br2_0 wl0_4 wl1_4 wl2_4 vdd gnd pbitcell_1RW_1W_1R +Xbit_r5_c0 bl0_0 br0_0 bl1_0 br1_0 bl2_0 br2_0 wl0_5 wl1_5 wl2_5 vdd gnd pbitcell_1RW_1W_1R +Xbit_r6_c0 bl0_0 br0_0 bl1_0 br1_0 bl2_0 br2_0 wl0_6 wl1_6 wl2_6 vdd gnd pbitcell_1RW_1W_1R +Xbit_r7_c0 bl0_0 br0_0 bl1_0 br1_0 bl2_0 br2_0 wl0_7 wl1_7 wl2_7 vdd gnd pbitcell_1RW_1W_1R +.ENDS bitcell_array_8x1_2 + +.SUBCKT pinv_27 A Z vdd gnd +Mpinv_pmos Z A vdd vdd p m=1 w=1.6u l=0.4u pd=4.0u ps=4.0u as=1.6p ad=1.6p +Mpinv_nmos Z A gnd gnd n m=1 w=0.8u l=0.4u pd=2.4000000000000004u ps=2.4000000000000004u as=0.8p ad=0.8p +.ENDS pinv_27 + +.SUBCKT delay_chain_2 in out vdd gnd +Xdinv0 in dout_1 vdd gnd pinv_27 +Xdload_0_0 dout_1 n_0_0 vdd gnd pinv_27 +Xdload_0_1 dout_1 n_0_1 vdd gnd pinv_27 +Xdload_0_2 dout_1 n_0_2 vdd gnd pinv_27 +Xdinv1 dout_1 dout_2 vdd gnd pinv_27 +Xdload_1_0 dout_2 n_1_0 vdd gnd pinv_27 +Xdload_1_1 dout_2 n_1_1 vdd gnd pinv_27 +Xdload_1_2 dout_2 n_1_2 vdd gnd pinv_27 +Xdinv2 dout_2 dout_3 vdd gnd pinv_27 +Xdload_2_0 dout_3 n_2_0 vdd gnd pinv_27 +Xdload_2_1 dout_3 n_2_1 vdd gnd pinv_27 +Xdload_2_2 dout_3 n_2_2 vdd gnd pinv_27 +Xdinv3 dout_3 out vdd gnd pinv_27 +Xdload_3_0 out n_3_0 vdd gnd pinv_27 +Xdload_3_1 out n_3_1 vdd gnd pinv_27 +Xdload_3_2 out n_3_2 vdd gnd pinv_27 +.ENDS delay_chain_2 + +.SUBCKT pinv_28 A Z vdd gnd +Mpinv_pmos Z A vdd vdd p m=1 w=1.6u l=0.4u pd=4.0u ps=4.0u as=1.6p ad=1.6p +Mpinv_nmos Z A gnd gnd n m=1 w=0.8u l=0.4u pd=2.4000000000000004u ps=2.4000000000000004u as=0.8p ad=0.8p +.ENDS pinv_28 + +.SUBCKT replica_bitline_r en out vdd gnd +Xrbl_inv bl0_0 out vdd gnd pinv_28 +Mrbl_access_tx vdd delayed_en bl0_0 vdd p m=1 w=0.8u l=0.4u pd=2.4000000000000004u ps=2.4000000000000004u as=0.8p ad=0.8p +Xdelay_chain en delayed_en vdd gnd delay_chain_2 +Xbitcell bl0_0 br0_0 bl1_0 br1_0 bl2_0 br2_0 delayed_en delayed_en delayed_en vdd gnd replica_pbitcell +Xload bl0_0 br0_0 bl1_0 br1_0 bl2_0 br2_0 gnd gnd gnd gnd gnd gnd gnd gnd gnd gnd gnd gnd gnd gnd gnd gnd gnd gnd gnd gnd gnd gnd gnd gnd vdd gnd bitcell_array_8x1_2 +.ENDS replica_bitline_r + +.SUBCKT control_logic_r csb clk s_en clk_buf_bar clk_buf vdd gnd +Xctrl_dffs csb cs_bar cs clk_buf vdd gnd dff_inv_array_1x1_3 +Xclkbuf clk clk_buf_bar clk_buf vdd gnd pinvbuf_2_4_3 +Xnand2_rbl_in_bar clk_buf_bar cs rbl_in_bar vdd gnd pnand2_3 +Xinv_rbl_in rbl_in_bar rbl_in vdd gnd pinv_24 +Xinv_pre_s_en_bar pre_s_en pre_s_en_bar vdd gnd pinv_25 +Xinv_s_en pre_s_en_bar s_en vdd gnd pinv_26 +Xreplica_bitline rbl_in pre_s_en vdd gnd replica_bitline_r +.ENDS control_logic_r + +.SUBCKT row_addr_dff din_0 din_1 din_2 din_3 dout_0 dout_1 dout_2 dout_3 clk vdd gnd +XXdff_r0_c0 din_0 dout_0 clk vdd gnd dff +XXdff_r1_c0 din_1 dout_1 clk vdd gnd dff +XXdff_r2_c0 din_2 dout_2 clk vdd gnd dff +XXdff_r3_c0 din_3 dout_3 clk vdd gnd dff +.ENDS row_addr_dff + +.SUBCKT data_dff din_0 din_1 dout_0 dout_1 clk vdd gnd +XXdff_r0_c0 din_0 dout_0 clk vdd gnd dff +XXdff_r0_c1 din_1 dout_1 clk vdd gnd dff +.ENDS data_dff + +.SUBCKT bitcell_array_16x2_1 bl0_0 br0_0 bl1_0 br1_0 bl2_0 br2_0 bl0_1 br0_1 bl1_1 br1_1 bl2_1 br2_1 wl0_0 wl1_0 wl2_0 wl0_1 wl1_1 wl2_1 wl0_2 wl1_2 wl2_2 wl0_3 wl1_3 wl2_3 wl0_4 wl1_4 wl2_4 wl0_5 wl1_5 wl2_5 wl0_6 wl1_6 wl2_6 wl0_7 wl1_7 wl2_7 wl0_8 wl1_8 wl2_8 wl0_9 wl1_9 wl2_9 wl0_10 wl1_10 wl2_10 wl0_11 wl1_11 wl2_11 wl0_12 wl1_12 wl2_12 wl0_13 wl1_13 wl2_13 wl0_14 wl1_14 wl2_14 wl0_15 wl1_15 wl2_15 vdd gnd +Xbit_r0_c0 bl0_0 br0_0 bl1_0 br1_0 bl2_0 br2_0 wl0_0 wl1_0 wl2_0 vdd gnd pbitcell_1RW_1W_1R +Xbit_r1_c0 bl0_0 br0_0 bl1_0 br1_0 bl2_0 br2_0 wl0_1 wl1_1 wl2_1 vdd gnd pbitcell_1RW_1W_1R +Xbit_r2_c0 bl0_0 br0_0 bl1_0 br1_0 bl2_0 br2_0 wl0_2 wl1_2 wl2_2 vdd gnd pbitcell_1RW_1W_1R +Xbit_r3_c0 bl0_0 br0_0 bl1_0 br1_0 bl2_0 br2_0 wl0_3 wl1_3 wl2_3 vdd gnd pbitcell_1RW_1W_1R +Xbit_r4_c0 bl0_0 br0_0 bl1_0 br1_0 bl2_0 br2_0 wl0_4 wl1_4 wl2_4 vdd gnd pbitcell_1RW_1W_1R +Xbit_r5_c0 bl0_0 br0_0 bl1_0 br1_0 bl2_0 br2_0 wl0_5 wl1_5 wl2_5 vdd gnd pbitcell_1RW_1W_1R +Xbit_r6_c0 bl0_0 br0_0 bl1_0 br1_0 bl2_0 br2_0 wl0_6 wl1_6 wl2_6 vdd gnd pbitcell_1RW_1W_1R +Xbit_r7_c0 bl0_0 br0_0 bl1_0 br1_0 bl2_0 br2_0 wl0_7 wl1_7 wl2_7 vdd gnd pbitcell_1RW_1W_1R +Xbit_r8_c0 bl0_0 br0_0 bl1_0 br1_0 bl2_0 br2_0 wl0_8 wl1_8 wl2_8 vdd gnd pbitcell_1RW_1W_1R +Xbit_r9_c0 bl0_0 br0_0 bl1_0 br1_0 bl2_0 br2_0 wl0_9 wl1_9 wl2_9 vdd gnd pbitcell_1RW_1W_1R +Xbit_r10_c0 bl0_0 br0_0 bl1_0 br1_0 bl2_0 br2_0 wl0_10 wl1_10 wl2_10 vdd gnd pbitcell_1RW_1W_1R +Xbit_r11_c0 bl0_0 br0_0 bl1_0 br1_0 bl2_0 br2_0 wl0_11 wl1_11 wl2_11 vdd gnd pbitcell_1RW_1W_1R +Xbit_r12_c0 bl0_0 br0_0 bl1_0 br1_0 bl2_0 br2_0 wl0_12 wl1_12 wl2_12 vdd gnd pbitcell_1RW_1W_1R +Xbit_r13_c0 bl0_0 br0_0 bl1_0 br1_0 bl2_0 br2_0 wl0_13 wl1_13 wl2_13 vdd gnd pbitcell_1RW_1W_1R +Xbit_r14_c0 bl0_0 br0_0 bl1_0 br1_0 bl2_0 br2_0 wl0_14 wl1_14 wl2_14 vdd gnd pbitcell_1RW_1W_1R +Xbit_r15_c0 bl0_0 br0_0 bl1_0 br1_0 bl2_0 br2_0 wl0_15 wl1_15 wl2_15 vdd gnd pbitcell_1RW_1W_1R +Xbit_r0_c1 bl0_1 br0_1 bl1_1 br1_1 bl2_1 br2_1 wl0_0 wl1_0 wl2_0 vdd gnd pbitcell_1RW_1W_1R +Xbit_r1_c1 bl0_1 br0_1 bl1_1 br1_1 bl2_1 br2_1 wl0_1 wl1_1 wl2_1 vdd gnd pbitcell_1RW_1W_1R +Xbit_r2_c1 bl0_1 br0_1 bl1_1 br1_1 bl2_1 br2_1 wl0_2 wl1_2 wl2_2 vdd gnd pbitcell_1RW_1W_1R +Xbit_r3_c1 bl0_1 br0_1 bl1_1 br1_1 bl2_1 br2_1 wl0_3 wl1_3 wl2_3 vdd gnd pbitcell_1RW_1W_1R +Xbit_r4_c1 bl0_1 br0_1 bl1_1 br1_1 bl2_1 br2_1 wl0_4 wl1_4 wl2_4 vdd gnd pbitcell_1RW_1W_1R +Xbit_r5_c1 bl0_1 br0_1 bl1_1 br1_1 bl2_1 br2_1 wl0_5 wl1_5 wl2_5 vdd gnd pbitcell_1RW_1W_1R +Xbit_r6_c1 bl0_1 br0_1 bl1_1 br1_1 bl2_1 br2_1 wl0_6 wl1_6 wl2_6 vdd gnd pbitcell_1RW_1W_1R +Xbit_r7_c1 bl0_1 br0_1 bl1_1 br1_1 bl2_1 br2_1 wl0_7 wl1_7 wl2_7 vdd gnd pbitcell_1RW_1W_1R +Xbit_r8_c1 bl0_1 br0_1 bl1_1 br1_1 bl2_1 br2_1 wl0_8 wl1_8 wl2_8 vdd gnd pbitcell_1RW_1W_1R +Xbit_r9_c1 bl0_1 br0_1 bl1_1 br1_1 bl2_1 br2_1 wl0_9 wl1_9 wl2_9 vdd gnd pbitcell_1RW_1W_1R +Xbit_r10_c1 bl0_1 br0_1 bl1_1 br1_1 bl2_1 br2_1 wl0_10 wl1_10 wl2_10 vdd gnd pbitcell_1RW_1W_1R +Xbit_r11_c1 bl0_1 br0_1 bl1_1 br1_1 bl2_1 br2_1 wl0_11 wl1_11 wl2_11 vdd gnd pbitcell_1RW_1W_1R +Xbit_r12_c1 bl0_1 br0_1 bl1_1 br1_1 bl2_1 br2_1 wl0_12 wl1_12 wl2_12 vdd gnd pbitcell_1RW_1W_1R +Xbit_r13_c1 bl0_1 br0_1 bl1_1 br1_1 bl2_1 br2_1 wl0_13 wl1_13 wl2_13 vdd gnd pbitcell_1RW_1W_1R +Xbit_r14_c1 bl0_1 br0_1 bl1_1 br1_1 bl2_1 br2_1 wl0_14 wl1_14 wl2_14 vdd gnd pbitcell_1RW_1W_1R +Xbit_r15_c1 bl0_1 br0_1 bl1_1 br1_1 bl2_1 br2_1 wl0_15 wl1_15 wl2_15 vdd gnd pbitcell_1RW_1W_1R +.ENDS bitcell_array_16x2_1 + +* ptx M{0} {1} p m=1 w=1.6u l=0.4u pd=4.0u ps=4.0u as=1.6p ad=1.6p + +.SUBCKT precharge_1 bl br en vdd +Mlower_pmos bl en br vdd p m=1 w=1.6u l=0.4u pd=4.0u ps=4.0u as=1.6p ad=1.6p +Mupper_pmos1 bl en vdd vdd p m=1 w=1.6u l=0.4u pd=4.0u ps=4.0u as=1.6p ad=1.6p +Mupper_pmos2 br en vdd vdd p m=1 w=1.6u l=0.4u pd=4.0u ps=4.0u as=1.6p ad=1.6p +.ENDS precharge_1 + +.SUBCKT precharge_array_1 bl_0 br_0 bl_1 br_1 en vdd +Xpre_column_0 bl_0 br_0 en vdd precharge_1 +Xpre_column_1 bl_1 br_1 en vdd precharge_1 +.ENDS precharge_array_1 + +.SUBCKT precharge_2 bl br en vdd +Mlower_pmos bl en br vdd p m=1 w=1.6u l=0.4u pd=4.0u ps=4.0u as=1.6p ad=1.6p +Mupper_pmos1 bl en vdd vdd p m=1 w=1.6u l=0.4u pd=4.0u ps=4.0u as=1.6p ad=1.6p +Mupper_pmos2 br en vdd vdd p m=1 w=1.6u l=0.4u pd=4.0u ps=4.0u as=1.6p ad=1.6p +.ENDS precharge_2 + +.SUBCKT precharge_array_2 bl_0 br_0 bl_1 br_1 en vdd +Xpre_column_0 bl_0 br_0 en vdd precharge_2 +Xpre_column_1 bl_1 br_1 en vdd precharge_2 +.ENDS precharge_array_2 +*********************** "sense_amp" ****************************** + +.SUBCKT sense_amp bl br dout en vdd gnd + +* SPICE3 file created from sense_amp.ext - technology: scmos + +M1000 gnd en a_56_432# gnd n w=1.8u l=0.4u +M1001 a_56_432# a_48_304# dout gnd n w=1.8u l=0.4u +M1002 a_48_304# dout a_56_432# gnd n w=1.8u l=0.4u +M1003 vdd a_48_304# dout vdd p w=3.6u l=0.4u +M1004 a_48_304# dout vdd vdd p w=3.6u l=0.4u +M1005 bl en dout vdd p w=4.8u l=0.4u +M1006 a_48_304# en br vdd p w=4.8u l=0.4u + +.ENDS + +.SUBCKT sense_amp_array data_0 bl_0 br_0 data_1 bl_1 br_1 en vdd gnd +Xsa_d0 bl_0 br_0 data_0 en vdd gnd sense_amp +Xsa_d1 bl_1 br_1 data_1 en vdd gnd sense_amp +.ENDS sense_amp_array +*********************** Write_Driver ****************************** +.SUBCKT write_driver din bl br en vdd gnd +* SPICE3 file created from write_driver.ext - technology: scmos + +M1000 a_44_708# a_36_700# bl gnd n w=2.4u l=0.4u +M1001 br a_16_500# a_44_708# gnd n w=2.4u l=0.4u +M1002 a_44_708# en gnd gnd n w=2.4u l=0.4u +M1003 gnd a_8_284# a_16_500# gnd n w=0.8u l=0.4u +M1004 a_36_700# a_20_328# gnd gnd n w=0.8u l=0.4u +M1005 vdd a_8_284# a_16_500# vdd p w=1.4u l=0.4u +M1006 a_36_700# a_20_328# vdd vdd p w=1.4u l=0.4u +M1007 vdd en a_20_328# vdd p w=1.4u l=0.4u +M1008 a_20_328# a_64_360# vdd vdd p w=1.4u l=0.4u +M1009 a_48_328# en a_20_328# gnd n w=1.4u l=0.4u +M1010 gnd a_64_360# a_48_328# gnd n w=1.4u l=0.4u +M1011 a_40_228# en a_8_284# gnd n w=1.4u l=0.4u +M1012 gnd din a_40_228# gnd n w=1.4u l=0.4u +M1013 a_64_360# din gnd gnd n w=0.8u l=0.4u +M1014 a_8_284# en vdd vdd p w=1.4u l=0.4u +M1015 vdd din a_8_284# vdd p w=1.4u l=0.4u +M1016 a_64_360# din vdd vdd p w=1.4u l=0.4u + +.ENDS + +.SUBCKT write_driver_array data_0 data_1 bl_0 br_0 bl_1 br_1 en vdd gnd +XXwrite_driver0 data_0 bl_0 br_0 en vdd gnd write_driver +XXwrite_driver1 data_1 bl_1 br_1 en vdd gnd write_driver +.ENDS write_driver_array + +.SUBCKT pinv_29 A Z vdd gnd +Mpinv_pmos Z A vdd vdd p m=1 w=1.6u l=0.4u pd=4.0u ps=4.0u as=1.6p ad=1.6p +Mpinv_nmos Z A gnd gnd n m=1 w=0.8u l=0.4u pd=2.4000000000000004u ps=2.4000000000000004u as=0.8p ad=0.8p +.ENDS pinv_29 + +.SUBCKT pnand2_4 A B Z vdd gnd +Mpnand2_pmos1 vdd A Z vdd p m=1 w=1.6u l=0.4u pd=4.0u ps=4.0u as=1.6p ad=1.6p +Mpnand2_pmos2 Z B vdd vdd p m=1 w=1.6u l=0.4u pd=4.0u ps=4.0u as=1.6p ad=1.6p +Mpnand2_nmos1 Z B net1 gnd n m=1 w=1.6u l=0.4u pd=4.0u ps=4.0u as=1.6p ad=1.6p +Mpnand2_nmos2 net1 A gnd gnd n m=1 w=1.6u l=0.4u pd=4.0u ps=4.0u as=1.6p ad=1.6p +.ENDS pnand2_4 + +.SUBCKT pnand3_4 A B C Z vdd gnd +Mpnand3_pmos1 vdd A Z vdd p m=1 w=1.6u l=0.4u pd=4.0u ps=4.0u as=1.6p ad=1.6p +Mpnand3_pmos2 Z B vdd vdd p m=1 w=1.6u l=0.4u pd=4.0u ps=4.0u as=1.6p ad=1.6p +Mpnand3_pmos3 Z C vdd vdd p m=1 w=1.6u l=0.4u pd=4.0u ps=4.0u as=1.6p ad=1.6p +Mpnand3_nmos1 Z C net1 gnd n m=1 w=1.6u l=0.4u pd=4.0u ps=4.0u as=1.6p ad=1.6p +Mpnand3_nmos2 net1 B net2 gnd n m=1 w=1.6u l=0.4u pd=4.0u ps=4.0u as=1.6p ad=1.6p +Mpnand3_nmos3 net2 A gnd gnd n m=1 w=1.6u l=0.4u pd=4.0u ps=4.0u as=1.6p ad=1.6p +.ENDS pnand3_4 + +.SUBCKT pinv_30 A Z vdd gnd +Mpinv_pmos Z A vdd vdd p m=1 w=1.6u l=0.4u pd=4.0u ps=4.0u as=1.6p ad=1.6p +Mpinv_nmos Z A gnd gnd n m=1 w=0.8u l=0.4u pd=2.4000000000000004u ps=2.4000000000000004u as=0.8p ad=0.8p +.ENDS pinv_30 + +.SUBCKT pnand2_5 A B Z vdd gnd +Mpnand2_pmos1 vdd A Z vdd p m=1 w=1.6u l=0.4u pd=4.0u ps=4.0u as=1.6p ad=1.6p +Mpnand2_pmos2 Z B vdd vdd p m=1 w=1.6u l=0.4u pd=4.0u ps=4.0u as=1.6p ad=1.6p +Mpnand2_nmos1 Z B net1 gnd n m=1 w=1.6u l=0.4u pd=4.0u ps=4.0u as=1.6p ad=1.6p +Mpnand2_nmos2 net1 A gnd gnd n m=1 w=1.6u l=0.4u pd=4.0u ps=4.0u as=1.6p ad=1.6p +.ENDS pnand2_5 + +.SUBCKT pre2x4 in_0 in_1 out_0 out_1 out_2 out_3 vdd gnd +XXpre_inv_0 in_0 inbar_0 vdd gnd pinv_30 +XXpre_inv_1 in_1 inbar_1 vdd gnd pinv_30 +XXpre_nand_inv_0 Z_0 out_0 vdd gnd pinv_30 +XXpre_nand_inv_1 Z_1 out_1 vdd gnd pinv_30 +XXpre_nand_inv_2 Z_2 out_2 vdd gnd pinv_30 +XXpre_nand_inv_3 Z_3 out_3 vdd gnd pinv_30 +XXpre2x4_nand_0 inbar_0 inbar_1 Z_0 vdd gnd pnand2_5 +XXpre2x4_nand_1 in_0 inbar_1 Z_1 vdd gnd pnand2_5 +XXpre2x4_nand_2 inbar_0 in_1 Z_2 vdd gnd pnand2_5 +XXpre2x4_nand_3 in_0 in_1 Z_3 vdd gnd pnand2_5 +.ENDS pre2x4 + +.SUBCKT pinv_31 A Z vdd gnd +Mpinv_pmos Z A vdd vdd p m=1 w=1.6u l=0.4u pd=4.0u ps=4.0u as=1.6p ad=1.6p +Mpinv_nmos Z A gnd gnd n m=1 w=0.8u l=0.4u pd=2.4000000000000004u ps=2.4000000000000004u as=0.8p ad=0.8p +.ENDS pinv_31 + +.SUBCKT pnand3_5 A B C Z vdd gnd +Mpnand3_pmos1 vdd A Z vdd p m=1 w=1.6u l=0.4u pd=4.0u ps=4.0u as=1.6p ad=1.6p +Mpnand3_pmos2 Z B vdd vdd p m=1 w=1.6u l=0.4u pd=4.0u ps=4.0u as=1.6p ad=1.6p +Mpnand3_pmos3 Z C vdd vdd p m=1 w=1.6u l=0.4u pd=4.0u ps=4.0u as=1.6p ad=1.6p +Mpnand3_nmos1 Z C net1 gnd n m=1 w=1.6u l=0.4u pd=4.0u ps=4.0u as=1.6p ad=1.6p +Mpnand3_nmos2 net1 B net2 gnd n m=1 w=1.6u l=0.4u pd=4.0u ps=4.0u as=1.6p ad=1.6p +Mpnand3_nmos3 net2 A gnd gnd n m=1 w=1.6u l=0.4u pd=4.0u ps=4.0u as=1.6p ad=1.6p +.ENDS pnand3_5 + +.SUBCKT pre3x8 in_0 in_1 in_2 out_0 out_1 out_2 out_3 out_4 out_5 out_6 out_7 vdd gnd +XXpre_inv_0 in_0 inbar_0 vdd gnd pinv_31 +XXpre_inv_1 in_1 inbar_1 vdd gnd pinv_31 +XXpre_inv_2 in_2 inbar_2 vdd gnd pinv_31 +XXpre_nand_inv_0 Z_0 out_0 vdd gnd pinv_31 +XXpre_nand_inv_1 Z_1 out_1 vdd gnd pinv_31 +XXpre_nand_inv_2 Z_2 out_2 vdd gnd pinv_31 +XXpre_nand_inv_3 Z_3 out_3 vdd gnd pinv_31 +XXpre_nand_inv_4 Z_4 out_4 vdd gnd pinv_31 +XXpre_nand_inv_5 Z_5 out_5 vdd gnd pinv_31 +XXpre_nand_inv_6 Z_6 out_6 vdd gnd pinv_31 +XXpre_nand_inv_7 Z_7 out_7 vdd gnd pinv_31 +XXpre3x8_nand_0 inbar_0 inbar_1 inbar_2 Z_0 vdd gnd pnand3_5 +XXpre3x8_nand_1 in_0 inbar_1 inbar_2 Z_1 vdd gnd pnand3_5 +XXpre3x8_nand_2 inbar_0 in_1 inbar_2 Z_2 vdd gnd pnand3_5 +XXpre3x8_nand_3 in_0 in_1 inbar_2 Z_3 vdd gnd pnand3_5 +XXpre3x8_nand_4 inbar_0 inbar_1 in_2 Z_4 vdd gnd pnand3_5 +XXpre3x8_nand_5 in_0 inbar_1 in_2 Z_5 vdd gnd pnand3_5 +XXpre3x8_nand_6 inbar_0 in_1 in_2 Z_6 vdd gnd pnand3_5 +XXpre3x8_nand_7 in_0 in_1 in_2 Z_7 vdd gnd pnand3_5 +.ENDS pre3x8 + +.SUBCKT hierarchical_decoder_16rows addr_0 addr_1 addr_2 addr_3 decode_0 decode_1 decode_2 decode_3 decode_4 decode_5 decode_6 decode_7 decode_8 decode_9 decode_10 decode_11 decode_12 decode_13 decode_14 decode_15 vdd gnd +Xpre_0 addr_0 addr_1 out_0 out_1 out_2 out_3 vdd gnd pre2x4 +Xpre_1 addr_2 addr_3 out_4 out_5 out_6 out_7 vdd gnd pre2x4 +XDEC_NAND_0 out_0 out_4 Z_0 vdd gnd pnand2_4 +XDEC_NAND_1 out_0 out_5 Z_1 vdd gnd pnand2_4 +XDEC_NAND_2 out_0 out_6 Z_2 vdd gnd pnand2_4 +XDEC_NAND_3 out_0 out_7 Z_3 vdd gnd pnand2_4 +XDEC_NAND_4 out_1 out_4 Z_4 vdd gnd pnand2_4 +XDEC_NAND_5 out_1 out_5 Z_5 vdd gnd pnand2_4 +XDEC_NAND_6 out_1 out_6 Z_6 vdd gnd pnand2_4 +XDEC_NAND_7 out_1 out_7 Z_7 vdd gnd pnand2_4 +XDEC_NAND_8 out_2 out_4 Z_8 vdd gnd pnand2_4 +XDEC_NAND_9 out_2 out_5 Z_9 vdd gnd pnand2_4 +XDEC_NAND_10 out_2 out_6 Z_10 vdd gnd pnand2_4 +XDEC_NAND_11 out_2 out_7 Z_11 vdd gnd pnand2_4 +XDEC_NAND_12 out_3 out_4 Z_12 vdd gnd pnand2_4 +XDEC_NAND_13 out_3 out_5 Z_13 vdd gnd pnand2_4 +XDEC_NAND_14 out_3 out_6 Z_14 vdd gnd pnand2_4 +XDEC_NAND_15 out_3 out_7 Z_15 vdd gnd pnand2_4 +XDEC_INV_0 Z_0 decode_0 vdd gnd pinv_29 +XDEC_INV_1 Z_1 decode_1 vdd gnd pinv_29 +XDEC_INV_2 Z_2 decode_2 vdd gnd pinv_29 +XDEC_INV_3 Z_3 decode_3 vdd gnd pinv_29 +XDEC_INV_4 Z_4 decode_4 vdd gnd pinv_29 +XDEC_INV_5 Z_5 decode_5 vdd gnd pinv_29 +XDEC_INV_6 Z_6 decode_6 vdd gnd pinv_29 +XDEC_INV_7 Z_7 decode_7 vdd gnd pinv_29 +XDEC_INV_8 Z_8 decode_8 vdd gnd pinv_29 +XDEC_INV_9 Z_9 decode_9 vdd gnd pinv_29 +XDEC_INV_10 Z_10 decode_10 vdd gnd pinv_29 +XDEC_INV_11 Z_11 decode_11 vdd gnd pinv_29 +XDEC_INV_12 Z_12 decode_12 vdd gnd pinv_29 +XDEC_INV_13 Z_13 decode_13 vdd gnd pinv_29 +XDEC_INV_14 Z_14 decode_14 vdd gnd pinv_29 +XDEC_INV_15 Z_15 decode_15 vdd gnd pinv_29 +.ENDS hierarchical_decoder_16rows + +.SUBCKT pinv_32 A Z vdd gnd +Mpinv_pmos Z A vdd vdd p m=1 w=1.6u l=0.4u pd=4.0u ps=4.0u as=1.6p ad=1.6p +Mpinv_nmos Z A gnd gnd n m=1 w=0.8u l=0.4u pd=2.4000000000000004u ps=2.4000000000000004u as=0.8p ad=0.8p +.ENDS pinv_32 + +.SUBCKT pinv_33 A Z vdd gnd +Mpinv_pmos Z A vdd vdd p m=1 w=1.6u l=0.4u pd=4.0u ps=4.0u as=1.6p ad=1.6p +Mpinv_nmos Z A gnd gnd n m=1 w=0.8u l=0.4u pd=2.4000000000000004u ps=2.4000000000000004u as=0.8p ad=0.8p +.ENDS pinv_33 + +.SUBCKT pnand2_6 A B Z vdd gnd +Mpnand2_pmos1 vdd A Z vdd p m=1 w=1.6u l=0.4u pd=4.0u ps=4.0u as=1.6p ad=1.6p +Mpnand2_pmos2 Z B vdd vdd p m=1 w=1.6u l=0.4u pd=4.0u ps=4.0u as=1.6p ad=1.6p +Mpnand2_nmos1 Z B net1 gnd n m=1 w=1.6u l=0.4u pd=4.0u ps=4.0u as=1.6p ad=1.6p +Mpnand2_nmos2 net1 A gnd gnd n m=1 w=1.6u l=0.4u pd=4.0u ps=4.0u as=1.6p ad=1.6p +.ENDS pnand2_6 + +.SUBCKT wordline_driver in_0 in_1 in_2 in_3 in_4 in_5 in_6 in_7 in_8 in_9 in_10 in_11 in_12 in_13 in_14 in_15 wl_0 wl_1 wl_2 wl_3 wl_4 wl_5 wl_6 wl_7 wl_8 wl_9 wl_10 wl_11 wl_12 wl_13 wl_14 wl_15 en vdd gnd +Xwl_driver_inv_en0 en en_bar_0 vdd gnd pinv_33 +Xwl_driver_nand0 en_bar_0 in_0 wl_bar_0 vdd gnd pnand2_6 +Xwl_driver_inv0 wl_bar_0 wl_0 vdd gnd pinv_32 +Xwl_driver_inv_en1 en en_bar_1 vdd gnd pinv_33 +Xwl_driver_nand1 en_bar_1 in_1 wl_bar_1 vdd gnd pnand2_6 +Xwl_driver_inv1 wl_bar_1 wl_1 vdd gnd pinv_32 +Xwl_driver_inv_en2 en en_bar_2 vdd gnd pinv_33 +Xwl_driver_nand2 en_bar_2 in_2 wl_bar_2 vdd gnd pnand2_6 +Xwl_driver_inv2 wl_bar_2 wl_2 vdd gnd pinv_32 +Xwl_driver_inv_en3 en en_bar_3 vdd gnd pinv_33 +Xwl_driver_nand3 en_bar_3 in_3 wl_bar_3 vdd gnd pnand2_6 +Xwl_driver_inv3 wl_bar_3 wl_3 vdd gnd pinv_32 +Xwl_driver_inv_en4 en en_bar_4 vdd gnd pinv_33 +Xwl_driver_nand4 en_bar_4 in_4 wl_bar_4 vdd gnd pnand2_6 +Xwl_driver_inv4 wl_bar_4 wl_4 vdd gnd pinv_32 +Xwl_driver_inv_en5 en en_bar_5 vdd gnd pinv_33 +Xwl_driver_nand5 en_bar_5 in_5 wl_bar_5 vdd gnd pnand2_6 +Xwl_driver_inv5 wl_bar_5 wl_5 vdd gnd pinv_32 +Xwl_driver_inv_en6 en en_bar_6 vdd gnd pinv_33 +Xwl_driver_nand6 en_bar_6 in_6 wl_bar_6 vdd gnd pnand2_6 +Xwl_driver_inv6 wl_bar_6 wl_6 vdd gnd pinv_32 +Xwl_driver_inv_en7 en en_bar_7 vdd gnd pinv_33 +Xwl_driver_nand7 en_bar_7 in_7 wl_bar_7 vdd gnd pnand2_6 +Xwl_driver_inv7 wl_bar_7 wl_7 vdd gnd pinv_32 +Xwl_driver_inv_en8 en en_bar_8 vdd gnd pinv_33 +Xwl_driver_nand8 en_bar_8 in_8 wl_bar_8 vdd gnd pnand2_6 +Xwl_driver_inv8 wl_bar_8 wl_8 vdd gnd pinv_32 +Xwl_driver_inv_en9 en en_bar_9 vdd gnd pinv_33 +Xwl_driver_nand9 en_bar_9 in_9 wl_bar_9 vdd gnd pnand2_6 +Xwl_driver_inv9 wl_bar_9 wl_9 vdd gnd pinv_32 +Xwl_driver_inv_en10 en en_bar_10 vdd gnd pinv_33 +Xwl_driver_nand10 en_bar_10 in_10 wl_bar_10 vdd gnd pnand2_6 +Xwl_driver_inv10 wl_bar_10 wl_10 vdd gnd pinv_32 +Xwl_driver_inv_en11 en en_bar_11 vdd gnd pinv_33 +Xwl_driver_nand11 en_bar_11 in_11 wl_bar_11 vdd gnd pnand2_6 +Xwl_driver_inv11 wl_bar_11 wl_11 vdd gnd pinv_32 +Xwl_driver_inv_en12 en en_bar_12 vdd gnd pinv_33 +Xwl_driver_nand12 en_bar_12 in_12 wl_bar_12 vdd gnd pnand2_6 +Xwl_driver_inv12 wl_bar_12 wl_12 vdd gnd pinv_32 +Xwl_driver_inv_en13 en en_bar_13 vdd gnd pinv_33 +Xwl_driver_nand13 en_bar_13 in_13 wl_bar_13 vdd gnd pnand2_6 +Xwl_driver_inv13 wl_bar_13 wl_13 vdd gnd pinv_32 +Xwl_driver_inv_en14 en en_bar_14 vdd gnd pinv_33 +Xwl_driver_nand14 en_bar_14 in_14 wl_bar_14 vdd gnd pnand2_6 +Xwl_driver_inv14 wl_bar_14 wl_14 vdd gnd pinv_32 +Xwl_driver_inv_en15 en en_bar_15 vdd gnd pinv_33 +Xwl_driver_nand15 en_bar_15 in_15 wl_bar_15 vdd gnd pnand2_6 +Xwl_driver_inv15 wl_bar_15 wl_15 vdd gnd pinv_32 +.ENDS wordline_driver + +.SUBCKT pinv_34 A Z vdd gnd +Mpinv_pmos Z A vdd vdd p m=1 w=1.6u l=0.4u pd=4.0u ps=4.0u as=1.6p ad=1.6p +Mpinv_nmos Z A gnd gnd n m=1 w=0.8u l=0.4u pd=2.4000000000000004u ps=2.4000000000000004u as=0.8p ad=0.8p +.ENDS pinv_34 + +.SUBCKT bank dout0_0 dout0_1 dout2_0 dout2_1 din0_0 din0_1 din1_0 din1_1 addr0_0 addr0_1 addr0_2 addr0_3 addr1_0 addr1_1 addr1_2 addr1_3 addr2_0 addr2_1 addr2_2 addr2_3 s_en0 s_en2 w_en0 w_en1 clk_buf_bar0 clk_buf0 clk_buf_bar1 clk_buf1 clk_buf_bar2 clk_buf2 vdd gnd +Xbitcell_array bl0_0 br0_0 bl1_0 br1_0 bl2_0 br2_0 bl0_1 br0_1 bl1_1 br1_1 bl2_1 br2_1 wl0_0 wl1_0 wl2_0 wl0_1 wl1_1 wl2_1 wl0_2 wl1_2 wl2_2 wl0_3 wl1_3 wl2_3 wl0_4 wl1_4 wl2_4 wl0_5 wl1_5 wl2_5 wl0_6 wl1_6 wl2_6 wl0_7 wl1_7 wl2_7 wl0_8 wl1_8 wl2_8 wl0_9 wl1_9 wl2_9 wl0_10 wl1_10 wl2_10 wl0_11 wl1_11 wl2_11 wl0_12 wl1_12 wl2_12 wl0_13 wl1_13 wl2_13 wl0_14 wl1_14 wl2_14 wl0_15 wl1_15 wl2_15 vdd gnd bitcell_array_16x2_1 +Xprecharge_array0 bl0_0 br0_0 bl0_1 br0_1 clk_buf_bar0 vdd precharge_array_1 +Xprecharge_array2 bl2_0 br2_0 bl2_1 br2_1 clk_buf_bar2 vdd precharge_array_2 +Xsense_amp_array0 dout0_0 bl0_0 br0_0 dout0_1 bl0_1 br0_1 s_en0 vdd gnd sense_amp_array +Xsense_amp_array2 dout2_0 bl2_0 br2_0 dout2_1 bl2_1 br2_1 s_en2 vdd gnd sense_amp_array +Xwrite_driver_array0 din0_0 din0_1 bl0_0 br0_0 bl0_1 br0_1 w_en0 vdd gnd write_driver_array +Xwrite_driver_array1 din1_0 din1_1 bl1_0 br1_0 bl1_1 br1_1 w_en1 vdd gnd write_driver_array +Xrow_decoder0 addr0_0 addr0_1 addr0_2 addr0_3 dec_out0_0 dec_out0_1 dec_out0_2 dec_out0_3 dec_out0_4 dec_out0_5 dec_out0_6 dec_out0_7 dec_out0_8 dec_out0_9 dec_out0_10 dec_out0_11 dec_out0_12 dec_out0_13 dec_out0_14 dec_out0_15 vdd gnd hierarchical_decoder_16rows +Xrow_decoder1 addr1_0 addr1_1 addr1_2 addr1_3 dec_out1_0 dec_out1_1 dec_out1_2 dec_out1_3 dec_out1_4 dec_out1_5 dec_out1_6 dec_out1_7 dec_out1_8 dec_out1_9 dec_out1_10 dec_out1_11 dec_out1_12 dec_out1_13 dec_out1_14 dec_out1_15 vdd gnd hierarchical_decoder_16rows +Xrow_decoder2 addr2_0 addr2_1 addr2_2 addr2_3 dec_out2_0 dec_out2_1 dec_out2_2 dec_out2_3 dec_out2_4 dec_out2_5 dec_out2_6 dec_out2_7 dec_out2_8 dec_out2_9 dec_out2_10 dec_out2_11 dec_out2_12 dec_out2_13 dec_out2_14 dec_out2_15 vdd gnd hierarchical_decoder_16rows +Xwordline_driver0 dec_out0_0 dec_out0_1 dec_out0_2 dec_out0_3 dec_out0_4 dec_out0_5 dec_out0_6 dec_out0_7 dec_out0_8 dec_out0_9 dec_out0_10 dec_out0_11 dec_out0_12 dec_out0_13 dec_out0_14 dec_out0_15 wl0_0 wl0_1 wl0_2 wl0_3 wl0_4 wl0_5 wl0_6 wl0_7 wl0_8 wl0_9 wl0_10 wl0_11 wl0_12 wl0_13 wl0_14 wl0_15 clk_buf0 vdd gnd wordline_driver +Xwordline_driver1 dec_out1_0 dec_out1_1 dec_out1_2 dec_out1_3 dec_out1_4 dec_out1_5 dec_out1_6 dec_out1_7 dec_out1_8 dec_out1_9 dec_out1_10 dec_out1_11 dec_out1_12 dec_out1_13 dec_out1_14 dec_out1_15 wl1_0 wl1_1 wl1_2 wl1_3 wl1_4 wl1_5 wl1_6 wl1_7 wl1_8 wl1_9 wl1_10 wl1_11 wl1_12 wl1_13 wl1_14 wl1_15 clk_buf1 vdd gnd wordline_driver +Xwordline_driver2 dec_out2_0 dec_out2_1 dec_out2_2 dec_out2_3 dec_out2_4 dec_out2_5 dec_out2_6 dec_out2_7 dec_out2_8 dec_out2_9 dec_out2_10 dec_out2_11 dec_out2_12 dec_out2_13 dec_out2_14 dec_out2_15 wl2_0 wl2_1 wl2_2 wl2_3 wl2_4 wl2_5 wl2_6 wl2_7 wl2_8 wl2_9 wl2_10 wl2_11 wl2_12 wl2_13 wl2_14 wl2_15 clk_buf2 vdd gnd wordline_driver +.ENDS bank + +.SUBCKT sram_2_16_scn4m_subm DIN0[0] DIN0[1] DIN1[0] DIN1[1] ADDR0[0] ADDR0[1] ADDR0[2] ADDR0[3] ADDR1[0] ADDR1[1] ADDR1[2] ADDR1[3] ADDR2[0] ADDR2[1] ADDR2[2] ADDR2[3] csb0 csb1 csb2 web0 clk0 clk1 clk2 DOUT0[0] DOUT0[1] DOUT2[0] DOUT2[1] vdd gnd +Xbank0 DOUT0[0] DOUT0[1] DOUT2[0] DOUT2[1] BANK_DIN0[0] BANK_DIN0[1] BANK_DIN1[0] BANK_DIN1[1] A0[0] A0[1] A0[2] A0[3] A1[0] A1[1] A1[2] A1[3] A2[0] A2[1] A2[2] A2[3] s_en0 s_en2 w_en0 w_en1 clk_buf_bar0 clk_buf0 clk_buf_bar1 clk_buf1 clk_buf_bar2 clk_buf2 vdd gnd bank +Xcontrol0 csb0 web0 clk0 s_en0 w_en0 clk_buf_bar0 clk_buf0 vdd gnd control_logic_rw +Xcontrol1 csb1 clk1 w_en1 clk_buf_bar1 clk_buf1 vdd gnd control_logic_w +Xcontrol2 csb2 clk2 s_en2 clk_buf_bar2 clk_buf2 vdd gnd control_logic_r +Xrow_address0 ADDR0[0] ADDR0[1] ADDR0[2] ADDR0[3] A0[0] A0[1] A0[2] A0[3] clk_buf0 vdd gnd row_addr_dff +Xrow_address1 ADDR1[0] ADDR1[1] ADDR1[2] ADDR1[3] A1[0] A1[1] A1[2] A1[3] clk_buf1 vdd gnd row_addr_dff +Xrow_address2 ADDR2[0] ADDR2[1] ADDR2[2] ADDR2[3] A2[0] A2[1] A2[2] A2[3] clk_buf2 vdd gnd row_addr_dff +Xdata_dff0 DIN0[0] DIN0[1] BANK_DIN0[0] BANK_DIN0[1] clk_buf0 vdd gnd data_dff +Xdata_dff1 DIN1[0] DIN1[1] BANK_DIN1[0] BANK_DIN1[1] clk_buf1 vdd gnd data_dff +.ENDS sram_2_16_scn4m_subm diff --git a/compiler/datasheet/server_scripts/files/temp/sram_2_16_scn4m_subm.v b/compiler/datasheet/server_scripts/files/temp/sram_2_16_scn4m_subm.v new file mode 100644 index 00000000..779fd6e9 --- /dev/null +++ b/compiler/datasheet/server_scripts/files/temp/sram_2_16_scn4m_subm.v @@ -0,0 +1,47 @@ +// OpenRAM SRAM model +// Words: 16 +// Word size: 2 + +module sram_2_16_scn4m_subm(DATA,ADDR,CSb,WEb,OEb,clk); + + parameter DATA_WIDTH = 2 ; + parameter ADDR_WIDTH = 4 ; + parameter RAM_DEPTH = 1 << ADDR_WIDTH; + parameter DELAY = 3 ; + + inout [DATA_WIDTH-1:0] DATA; + input [ADDR_WIDTH-1:0] ADDR; + input CSb; // active low chip select + input WEb; // active low write control + input OEb; // active output enable + input clk; // clock + + reg [DATA_WIDTH-1:0] data_out ; + reg [DATA_WIDTH-1:0] mem [0:RAM_DEPTH-1]; + + // Tri-State Buffer control + // output : When WEb = 1, oeb = 0, csb = 0 + assign DATA = (!CSb && !OEb && WEb) ? data_out : 2'bz; + + // Memory Write Block + // Write Operation : When WEb = 0, CSb = 0 + always @ (posedge clk) + begin : MEM_WRITE + if ( !CSb && !WEb ) begin + mem[ADDR] = DATA; + $display($time," Writing %m ABUS=%b DATA=%b",ADDR,DATA); + end + end + + + // Memory Read Block + // Read Operation : When WEb = 1, CSb = 0 + always @ (posedge clk) + begin : MEM_READ + if (!CSb && WEb) begin + data_out <= #(DELAY) mem[ADDR]; + $display($time," Reading %m ABUS=%b DATA=%b",ADDR,mem[ADDR]); + end + end + +endmodule diff --git a/compiler/datasheet/server_scripts/files/temp/sram_2_16_scn4m_subm_TT_3p3V_25C.lib b/compiler/datasheet/server_scripts/files/temp/sram_2_16_scn4m_subm_TT_3p3V_25C.lib new file mode 100644 index 00000000..a516aa25 --- /dev/null +++ b/compiler/datasheet/server_scripts/files/temp/sram_2_16_scn4m_subm_TT_3p3V_25C.lib @@ -0,0 +1,321 @@ +library (sram_2_16_scn4m_subm_TT_3p3V_25C_lib){ + delay_model : "table_lookup"; + time_unit : "1ns" ; + voltage_unit : "1v" ; + current_unit : "1mA" ; + resistance_unit : "1kohm" ; + capacitive_load_unit(1 ,fF) ; + leakage_power_unit : "1mW" ; + pulling_resistance_unit :"1kohm" ; + operating_conditions(OC){ + process : 1.0 ; + voltage : 3.3 ; + temperature : 25; + } + + input_threshold_pct_fall : 50.0 ; + output_threshold_pct_fall : 50.0 ; + input_threshold_pct_rise : 50.0 ; + output_threshold_pct_rise : 50.0 ; + slew_lower_threshold_pct_fall : 10.0 ; + slew_upper_threshold_pct_fall : 90.0 ; + slew_lower_threshold_pct_rise : 10.0 ; + slew_upper_threshold_pct_rise : 90.0 ; + + nom_voltage : 5.0; + nom_temperature : 25; + nom_process : 1.0; + default_cell_leakage_power : 0.0 ; + default_leakage_power_density : 0.0 ; + default_input_pin_cap : 1.0 ; + default_inout_pin_cap : 1.0 ; + default_output_pin_cap : 0.0 ; + default_max_transition : 0.5 ; + default_fanout_load : 1.0 ; + default_max_fanout : 4.0 ; + default_connection_class : universal ; + + lu_table_template(CELL_TABLE){ + variable_1 : input_net_transition; + variable_2 : total_output_net_capacitance; + index_1("0.0125, 0.05, 0.4"); + index_2("2.45605, 9.8242, 78.5936"); + } + + lu_table_template(CONSTRAINT_TABLE){ + variable_1 : related_pin_transition; + variable_2 : constrained_pin_transition; + index_1("0.0125, 0.05, 0.4"); + index_2("0.0125, 0.05, 0.4"); + } + + default_operating_conditions : OC; + + + type (DATA){ + base_type : array; + data_type : bit; + bit_width : 2; + bit_from : 0; + bit_to : 1; + } + + type (ADDR){ + base_type : array; + data_type : bit; + bit_width : 4; + bit_from : 0; + bit_to : 3; + } + +cell (sram_2_16_scn4m_subm){ + memory(){ + type : ram; + address_width : 4; + word_width : 2; + } + interface_timing : true; + dont_use : true; + map_only : true; + dont_touch : true; + area : 69426.85; + + leakage_power () { + when : "CSb0"; + value : 0.000179; + } + cell_leakage_power : 0; + bus(DIN0){ + bus_type : DATA; + direction : input; + capacitance : 9.8242; + memory_write(){ + address : ADDR0; + clocked_on : clk0; + } + pin(DIN0[1:0]){ + timing(){ + timing_type : setup_rising; + related_pin : "clk0"; + rise_constraint(CONSTRAINT_TABLE) { + values("0.009, 0.009, 0.009",\ + "0.009, 0.009, 0.009",\ + "0.009, 0.009, 0.009"); + } + fall_constraint(CONSTRAINT_TABLE) { + values("0.009, 0.009, 0.009",\ + "0.009, 0.009, 0.009",\ + "0.009, 0.009, 0.009"); + } + } + timing(){ + timing_type : hold_rising; + related_pin : "clk0"; + rise_constraint(CONSTRAINT_TABLE) { + values("0.001, 0.001, 0.001",\ + "0.001, 0.001, 0.001",\ + "0.001, 0.001, 0.001"); + } + fall_constraint(CONSTRAINT_TABLE) { + values("0.001, 0.001, 0.001",\ + "0.001, 0.001, 0.001",\ + "0.001, 0.001, 0.001"); + } + } + } + } + bus(DOUT0){ + bus_type : DATA; + direction : output; + max_capacitance : 78.5936; + min_capacitance : 2.45605; + memory_read(){ + address : ADDR0; + } + pin(DOUT0[1:0]){ + timing(){ + timing_sense : non_unate; + related_pin : "clk0"; + timing_type : rising_edge; + cell_rise(CELL_TABLE) { + values("0.268, 0.268, 0.268",\ + "0.268, 0.268, 0.268",\ + "0.268, 0.268, 0.268"); + } + cell_fall(CELL_TABLE) { + values("0.268, 0.268, 0.268",\ + "0.268, 0.268, 0.268",\ + "0.268, 0.268, 0.268"); + } + rise_transition(CELL_TABLE) { + values("0.004, 0.004, 0.004",\ + "0.004, 0.004, 0.004",\ + "0.004, 0.004, 0.004"); + } + fall_transition(CELL_TABLE) { + values("0.004, 0.004, 0.004",\ + "0.004, 0.004, 0.004",\ + "0.004, 0.004, 0.004"); + } + } + } + } + + bus(ADDR0){ + bus_type : ADDR; + direction : input; + capacitance : 9.8242; + max_transition : 0.4; + pin(ADDR0[3:0]){ + timing(){ + timing_type : setup_rising; + related_pin : "clk0"; + rise_constraint(CONSTRAINT_TABLE) { + values("0.009, 0.009, 0.009",\ + "0.009, 0.009, 0.009",\ + "0.009, 0.009, 0.009"); + } + fall_constraint(CONSTRAINT_TABLE) { + values("0.009, 0.009, 0.009",\ + "0.009, 0.009, 0.009",\ + "0.009, 0.009, 0.009"); + } + } + timing(){ + timing_type : hold_rising; + related_pin : "clk0"; + rise_constraint(CONSTRAINT_TABLE) { + values("0.001, 0.001, 0.001",\ + "0.001, 0.001, 0.001",\ + "0.001, 0.001, 0.001"); + } + fall_constraint(CONSTRAINT_TABLE) { + values("0.001, 0.001, 0.001",\ + "0.001, 0.001, 0.001",\ + "0.001, 0.001, 0.001"); + } + } + } + } + + pin(CSb0){ + direction : input; + capacitance : 9.8242; + timing(){ + timing_type : setup_rising; + related_pin : "clk0"; + rise_constraint(CONSTRAINT_TABLE) { + values("0.009, 0.009, 0.009",\ + "0.009, 0.009, 0.009",\ + "0.009, 0.009, 0.009"); + } + fall_constraint(CONSTRAINT_TABLE) { + values("0.009, 0.009, 0.009",\ + "0.009, 0.009, 0.009",\ + "0.009, 0.009, 0.009"); + } + } + timing(){ + timing_type : hold_rising; + related_pin : "clk0"; + rise_constraint(CONSTRAINT_TABLE) { + values("0.001, 0.001, 0.001",\ + "0.001, 0.001, 0.001",\ + "0.001, 0.001, 0.001"); + } + fall_constraint(CONSTRAINT_TABLE) { + values("0.001, 0.001, 0.001",\ + "0.001, 0.001, 0.001",\ + "0.001, 0.001, 0.001"); + } + } + } + + pin(WEb0){ + direction : input; + capacitance : 9.8242; + timing(){ + timing_type : setup_rising; + related_pin : "clk0"; + rise_constraint(CONSTRAINT_TABLE) { + values("0.009, 0.009, 0.009",\ + "0.009, 0.009, 0.009",\ + "0.009, 0.009, 0.009"); + } + fall_constraint(CONSTRAINT_TABLE) { + values("0.009, 0.009, 0.009",\ + "0.009, 0.009, 0.009",\ + "0.009, 0.009, 0.009"); + } + } + timing(){ + timing_type : hold_rising; + related_pin : "clk0"; + rise_constraint(CONSTRAINT_TABLE) { + values("0.001, 0.001, 0.001",\ + "0.001, 0.001, 0.001",\ + "0.001, 0.001, 0.001"); + } + fall_constraint(CONSTRAINT_TABLE) { + values("0.001, 0.001, 0.001",\ + "0.001, 0.001, 0.001",\ + "0.001, 0.001, 0.001"); + } + } + } + + pin(clk0){ + clock : true; + direction : input; + capacitance : 9.8242; + internal_power(){ + when : "!CSb0 & clk0 & !WEb0"; + rise_power(scalar){ + values("2.46222038320038"); + } + fall_power(scalar){ + values("2.46222038320038"); + } + } + internal_power(){ + when : "!CSb0 & !clk0 & WEb0"; + rise_power(scalar){ + values("2.46222038320038"); + } + fall_power(scalar){ + values("2.46222038320038"); + } + } + internal_power(){ + when : "CSb0"; + rise_power(scalar){ + values("0"); + } + fall_power(scalar){ + values("0"); + } + } + timing(){ + timing_type :"min_pulse_width"; + related_pin : clk0; + rise_constraint(scalar) { + values("0.0"); + } + fall_constraint(scalar) { + values("0.0"); + } + } + timing(){ + timing_type :"minimum_period"; + related_pin : clk0; + rise_constraint(scalar) { + values("0"); + } + fall_constraint(scalar) { + values("0"); + } + } + } + + } +} diff --git a/compiler/datasheet/server_scripts/files/temp/sram_2_16_scn4m_subm_TT_5V_25C.lib b/compiler/datasheet/server_scripts/files/temp/sram_2_16_scn4m_subm_TT_5V_25C.lib new file mode 100644 index 00000000..18a74796 --- /dev/null +++ b/compiler/datasheet/server_scripts/files/temp/sram_2_16_scn4m_subm_TT_5V_25C.lib @@ -0,0 +1,321 @@ +library (sram_2_16_scn4m_subm_TT_5V_25C_lib){ + delay_model : "table_lookup"; + time_unit : "1ns" ; + voltage_unit : "1v" ; + current_unit : "1mA" ; + resistance_unit : "1kohm" ; + capacitive_load_unit(1 ,fF) ; + leakage_power_unit : "1mW" ; + pulling_resistance_unit :"1kohm" ; + operating_conditions(OC){ + process : 1.0 ; + voltage : 5 ; + temperature : 25; + } + + input_threshold_pct_fall : 50.0 ; + output_threshold_pct_fall : 50.0 ; + input_threshold_pct_rise : 50.0 ; + output_threshold_pct_rise : 50.0 ; + slew_lower_threshold_pct_fall : 10.0 ; + slew_upper_threshold_pct_fall : 90.0 ; + slew_lower_threshold_pct_rise : 10.0 ; + slew_upper_threshold_pct_rise : 90.0 ; + + nom_voltage : 5.0; + nom_temperature : 25; + nom_process : 1.0; + default_cell_leakage_power : 0.0 ; + default_leakage_power_density : 0.0 ; + default_input_pin_cap : 1.0 ; + default_inout_pin_cap : 1.0 ; + default_output_pin_cap : 0.0 ; + default_max_transition : 0.5 ; + default_fanout_load : 1.0 ; + default_max_fanout : 4.0 ; + default_connection_class : universal ; + + lu_table_template(CELL_TABLE){ + variable_1 : input_net_transition; + variable_2 : total_output_net_capacitance; + index_1("0.0125, 0.05, 0.4"); + index_2("2.45605, 9.8242, 78.5936"); + } + + lu_table_template(CONSTRAINT_TABLE){ + variable_1 : related_pin_transition; + variable_2 : constrained_pin_transition; + index_1("0.0125, 0.05, 0.4"); + index_2("0.0125, 0.05, 0.4"); + } + + default_operating_conditions : OC; + + + type (DATA){ + base_type : array; + data_type : bit; + bit_width : 2; + bit_from : 0; + bit_to : 1; + } + + type (ADDR){ + base_type : array; + data_type : bit; + bit_width : 4; + bit_from : 0; + bit_to : 3; + } + +cell (sram_2_16_scn4m_subm){ + memory(){ + type : ram; + address_width : 4; + word_width : 2; + } + interface_timing : true; + dont_use : true; + map_only : true; + dont_touch : true; + area : 68347.21; + + leakage_power () { + when : "CSb0"; + value : 0.000179; + } + cell_leakage_power : 0; + bus(DIN0){ + bus_type : DATA; + direction : input; + capacitance : 9.8242; + memory_write(){ + address : ADDR0; + clocked_on : clk0; + } + pin(DIN0[1:0]){ + timing(){ + timing_type : setup_rising; + related_pin : "clk0"; + rise_constraint(CONSTRAINT_TABLE) { + values("0.009, 0.009, 0.009",\ + "0.009, 0.009, 0.009",\ + "0.009, 0.009, 0.009"); + } + fall_constraint(CONSTRAINT_TABLE) { + values("0.009, 0.009, 0.009",\ + "0.009, 0.009, 0.009",\ + "0.009, 0.009, 0.009"); + } + } + timing(){ + timing_type : hold_rising; + related_pin : "clk0"; + rise_constraint(CONSTRAINT_TABLE) { + values("0.001, 0.001, 0.001",\ + "0.001, 0.001, 0.001",\ + "0.001, 0.001, 0.001"); + } + fall_constraint(CONSTRAINT_TABLE) { + values("0.001, 0.001, 0.001",\ + "0.001, 0.001, 0.001",\ + "0.001, 0.001, 0.001"); + } + } + } + } + bus(DOUT0){ + bus_type : DATA; + direction : output; + max_capacitance : 78.5936; + min_capacitance : 2.45605; + memory_read(){ + address : ADDR0; + } + pin(DOUT0[1:0]){ + timing(){ + timing_sense : non_unate; + related_pin : "clk0"; + timing_type : rising_edge; + cell_rise(CELL_TABLE) { + values("0.268, 0.268, 0.268",\ + "0.268, 0.268, 0.268",\ + "0.268, 0.268, 0.268"); + } + cell_fall(CELL_TABLE) { + values("0.268, 0.268, 0.268",\ + "0.268, 0.268, 0.268",\ + "0.268, 0.268, 0.268"); + } + rise_transition(CELL_TABLE) { + values("0.004, 0.004, 0.004",\ + "0.004, 0.004, 0.004",\ + "0.004, 0.004, 0.004"); + } + fall_transition(CELL_TABLE) { + values("0.004, 0.004, 0.004",\ + "0.004, 0.004, 0.004",\ + "0.004, 0.004, 0.004"); + } + } + } + } + + bus(ADDR0){ + bus_type : ADDR; + direction : input; + capacitance : 9.8242; + max_transition : 0.4; + pin(ADDR0[3:0]){ + timing(){ + timing_type : setup_rising; + related_pin : "clk0"; + rise_constraint(CONSTRAINT_TABLE) { + values("0.009, 0.009, 0.009",\ + "0.009, 0.009, 0.009",\ + "0.009, 0.009, 0.009"); + } + fall_constraint(CONSTRAINT_TABLE) { + values("0.009, 0.009, 0.009",\ + "0.009, 0.009, 0.009",\ + "0.009, 0.009, 0.009"); + } + } + timing(){ + timing_type : hold_rising; + related_pin : "clk0"; + rise_constraint(CONSTRAINT_TABLE) { + values("0.001, 0.001, 0.001",\ + "0.001, 0.001, 0.001",\ + "0.001, 0.001, 0.001"); + } + fall_constraint(CONSTRAINT_TABLE) { + values("0.001, 0.001, 0.001",\ + "0.001, 0.001, 0.001",\ + "0.001, 0.001, 0.001"); + } + } + } + } + + pin(CSb0){ + direction : input; + capacitance : 9.8242; + timing(){ + timing_type : setup_rising; + related_pin : "clk0"; + rise_constraint(CONSTRAINT_TABLE) { + values("0.009, 0.009, 0.009",\ + "0.009, 0.009, 0.009",\ + "0.009, 0.009, 0.009"); + } + fall_constraint(CONSTRAINT_TABLE) { + values("0.009, 0.009, 0.009",\ + "0.009, 0.009, 0.009",\ + "0.009, 0.009, 0.009"); + } + } + timing(){ + timing_type : hold_rising; + related_pin : "clk0"; + rise_constraint(CONSTRAINT_TABLE) { + values("0.001, 0.001, 0.001",\ + "0.001, 0.001, 0.001",\ + "0.001, 0.001, 0.001"); + } + fall_constraint(CONSTRAINT_TABLE) { + values("0.001, 0.001, 0.001",\ + "0.001, 0.001, 0.001",\ + "0.001, 0.001, 0.001"); + } + } + } + + pin(WEb0){ + direction : input; + capacitance : 9.8242; + timing(){ + timing_type : setup_rising; + related_pin : "clk0"; + rise_constraint(CONSTRAINT_TABLE) { + values("0.009, 0.009, 0.009",\ + "0.009, 0.009, 0.009",\ + "0.009, 0.009, 0.009"); + } + fall_constraint(CONSTRAINT_TABLE) { + values("0.009, 0.009, 0.009",\ + "0.009, 0.009, 0.009",\ + "0.009, 0.009, 0.009"); + } + } + timing(){ + timing_type : hold_rising; + related_pin : "clk0"; + rise_constraint(CONSTRAINT_TABLE) { + values("0.001, 0.001, 0.001",\ + "0.001, 0.001, 0.001",\ + "0.001, 0.001, 0.001"); + } + fall_constraint(CONSTRAINT_TABLE) { + values("0.001, 0.001, 0.001",\ + "0.001, 0.001, 0.001",\ + "0.001, 0.001, 0.001"); + } + } + } + + pin(clk0){ + clock : true; + direction : input; + capacitance : 9.8242; + internal_power(){ + when : "!CSb0 & clk0 & !WEb0"; + rise_power(scalar){ + values("2.46222038320038"); + } + fall_power(scalar){ + values("2.46222038320038"); + } + } + internal_power(){ + when : "!CSb0 & !clk0 & WEb0"; + rise_power(scalar){ + values("2.46222038320038"); + } + fall_power(scalar){ + values("2.46222038320038"); + } + } + internal_power(){ + when : "CSb0"; + rise_power(scalar){ + values("0"); + } + fall_power(scalar){ + values("0"); + } + } + timing(){ + timing_type :"min_pulse_width"; + related_pin : clk0; + rise_constraint(scalar) { + values("0.0"); + } + fall_constraint(scalar) { + values("0.0"); + } + } + timing(){ + timing_type :"minimum_period"; + related_pin : clk0; + rise_constraint(scalar) { + values("0"); + } + fall_constraint(scalar) { + values("0"); + } + } + } + + } +} diff --git a/compiler/datasheet/server_scripts/files/temp/sram_2_16_scn4m_subm_TT_5p0V_25C.lib b/compiler/datasheet/server_scripts/files/temp/sram_2_16_scn4m_subm_TT_5p0V_25C.lib new file mode 100644 index 00000000..4ce58d08 --- /dev/null +++ b/compiler/datasheet/server_scripts/files/temp/sram_2_16_scn4m_subm_TT_5p0V_25C.lib @@ -0,0 +1,625 @@ +library (sram_2_16_scn4m_subm_TT_5p0V_25C_lib){ + delay_model : "table_lookup"; + time_unit : "1ns" ; + voltage_unit : "1v" ; + current_unit : "1mA" ; + resistance_unit : "1kohm" ; + capacitive_load_unit(1 ,fF) ; + leakage_power_unit : "1mW" ; + pulling_resistance_unit :"1kohm" ; + operating_conditions(OC){ + process : 1.0 ; + voltage : 5.0 ; + temperature : 25; + } + + input_threshold_pct_fall : 50.0 ; + output_threshold_pct_fall : 50.0 ; + input_threshold_pct_rise : 50.0 ; + output_threshold_pct_rise : 50.0 ; + slew_lower_threshold_pct_fall : 10.0 ; + slew_upper_threshold_pct_fall : 90.0 ; + slew_lower_threshold_pct_rise : 10.0 ; + slew_upper_threshold_pct_rise : 90.0 ; + + nom_voltage : 5.0; + nom_temperature : 25; + nom_process : 1.0; + default_cell_leakage_power : 0.0 ; + default_leakage_power_density : 0.0 ; + default_input_pin_cap : 1.0 ; + default_inout_pin_cap : 1.0 ; + default_output_pin_cap : 0.0 ; + default_max_transition : 0.5 ; + default_fanout_load : 1.0 ; + default_max_fanout : 4.0 ; + default_connection_class : universal ; + + lu_table_template(CELL_TABLE){ + variable_1 : input_net_transition; + variable_2 : total_output_net_capacitance; + index_1("0.0125, 0.05, 0.4"); + index_2("2.45605, 9.8242, 78.5936"); + } + + lu_table_template(CONSTRAINT_TABLE){ + variable_1 : related_pin_transition; + variable_2 : constrained_pin_transition; + index_1("0.0125, 0.05, 0.4"); + index_2("0.0125, 0.05, 0.4"); + } + + default_operating_conditions : OC; + + + type (DATA){ + base_type : array; + data_type : bit; + bit_width : 2; + bit_from : 0; + bit_to : 1; + } + + type (ADDR){ + base_type : array; + data_type : bit; + bit_width : 4; + bit_from : 0; + bit_to : 3; + } + +cell (sram_2_16_scn4m_subm){ + memory(){ + type : ram; + address_width : 4; + word_width : 2; + } + interface_timing : true; + dont_use : true; + map_only : true; + dont_touch : true; + area : 0; + + leakage_power () { + when : "CSb0 & CSb1 & CSb2"; + value : 0.000436; + } + cell_leakage_power : 0; + bus(DIN0){ + bus_type : DATA; + direction : input; + capacitance : 9.8242; + memory_write(){ + address : ADDR0; + clocked_on : clk0; + } + pin(DIN0[1:0]){ + timing(){ + timing_type : setup_rising; + related_pin : "clk0"; + rise_constraint(CONSTRAINT_TABLE) { + values("0.009, 0.009, 0.009",\ + "0.009, 0.009, 0.009",\ + "0.009, 0.009, 0.009"); + } + fall_constraint(CONSTRAINT_TABLE) { + values("0.009, 0.009, 0.009",\ + "0.009, 0.009, 0.009",\ + "0.009, 0.009, 0.009"); + } + } + timing(){ + timing_type : hold_rising; + related_pin : "clk0"; + rise_constraint(CONSTRAINT_TABLE) { + values("0.001, 0.001, 0.001",\ + "0.001, 0.001, 0.001",\ + "0.001, 0.001, 0.001"); + } + fall_constraint(CONSTRAINT_TABLE) { + values("0.001, 0.001, 0.001",\ + "0.001, 0.001, 0.001",\ + "0.001, 0.001, 0.001"); + } + } + } + } + bus(DOUT0){ + bus_type : DATA; + direction : output; + max_capacitance : 78.5936; + min_capacitance : 2.45605; + memory_read(){ + address : ADDR0; + } + pin(DOUT0[1:0]){ + timing(){ + timing_sense : non_unate; + related_pin : "clk0"; + timing_type : rising_edge; + cell_rise(CELL_TABLE) { + values("0.079, 0.079, 0.079",\ + "0.079, 0.079, 0.079",\ + "0.079, 0.079, 0.079"); + } + cell_fall(CELL_TABLE) { + values("0.079, 0.079, 0.079",\ + "0.079, 0.079, 0.079",\ + "0.079, 0.079, 0.079"); + } + rise_transition(CELL_TABLE) { + values("0.001, 0.001, 0.001",\ + "0.001, 0.001, 0.001",\ + "0.001, 0.001, 0.001"); + } + fall_transition(CELL_TABLE) { + values("0.001, 0.001, 0.001",\ + "0.001, 0.001, 0.001",\ + "0.001, 0.001, 0.001"); + } + } + } + } + + bus(ADDR0){ + bus_type : ADDR; + direction : input; + capacitance : 9.8242; + max_transition : 0.4; + pin(ADDR0[3:0]){ + timing(){ + timing_type : setup_rising; + related_pin : "clk0"; + rise_constraint(CONSTRAINT_TABLE) { + values("0.009, 0.009, 0.009",\ + "0.009, 0.009, 0.009",\ + "0.009, 0.009, 0.009"); + } + fall_constraint(CONSTRAINT_TABLE) { + values("0.009, 0.009, 0.009",\ + "0.009, 0.009, 0.009",\ + "0.009, 0.009, 0.009"); + } + } + timing(){ + timing_type : hold_rising; + related_pin : "clk0"; + rise_constraint(CONSTRAINT_TABLE) { + values("0.001, 0.001, 0.001",\ + "0.001, 0.001, 0.001",\ + "0.001, 0.001, 0.001"); + } + fall_constraint(CONSTRAINT_TABLE) { + values("0.001, 0.001, 0.001",\ + "0.001, 0.001, 0.001",\ + "0.001, 0.001, 0.001"); + } + } + } + } + + pin(CSb0){ + direction : input; + capacitance : 9.8242; + timing(){ + timing_type : setup_rising; + related_pin : "clk0"; + rise_constraint(CONSTRAINT_TABLE) { + values("0.009, 0.009, 0.009",\ + "0.009, 0.009, 0.009",\ + "0.009, 0.009, 0.009"); + } + fall_constraint(CONSTRAINT_TABLE) { + values("0.009, 0.009, 0.009",\ + "0.009, 0.009, 0.009",\ + "0.009, 0.009, 0.009"); + } + } + timing(){ + timing_type : hold_rising; + related_pin : "clk0"; + rise_constraint(CONSTRAINT_TABLE) { + values("0.001, 0.001, 0.001",\ + "0.001, 0.001, 0.001",\ + "0.001, 0.001, 0.001"); + } + fall_constraint(CONSTRAINT_TABLE) { + values("0.001, 0.001, 0.001",\ + "0.001, 0.001, 0.001",\ + "0.001, 0.001, 0.001"); + } + } + } + + pin(WEb0){ + direction : input; + capacitance : 9.8242; + timing(){ + timing_type : setup_rising; + related_pin : "clk0"; + rise_constraint(CONSTRAINT_TABLE) { + values("0.009, 0.009, 0.009",\ + "0.009, 0.009, 0.009",\ + "0.009, 0.009, 0.009"); + } + fall_constraint(CONSTRAINT_TABLE) { + values("0.009, 0.009, 0.009",\ + "0.009, 0.009, 0.009",\ + "0.009, 0.009, 0.009"); + } + } + timing(){ + timing_type : hold_rising; + related_pin : "clk0"; + rise_constraint(CONSTRAINT_TABLE) { + values("0.001, 0.001, 0.001",\ + "0.001, 0.001, 0.001",\ + "0.001, 0.001, 0.001"); + } + fall_constraint(CONSTRAINT_TABLE) { + values("0.001, 0.001, 0.001",\ + "0.001, 0.001, 0.001",\ + "0.001, 0.001, 0.001"); + } + } + } + + pin(clk0){ + clock : true; + direction : input; + capacitance : 9.8242; + internal_power(){ + when : "!CSb0 & clk0 & !WEb0"; + rise_power(scalar){ + values("15.41143495605"); + } + fall_power(scalar){ + values("15.41143495605"); + } + } + internal_power(){ + when : "!CSb0 & !clk0 & WEb0"; + rise_power(scalar){ + values("15.41143495605"); + } + fall_power(scalar){ + values("15.41143495605"); + } + } + internal_power(){ + when : "CSb0"; + rise_power(scalar){ + values("0"); + } + fall_power(scalar){ + values("0"); + } + } + timing(){ + timing_type :"min_pulse_width"; + related_pin : clk0; + rise_constraint(scalar) { + values("0.0"); + } + fall_constraint(scalar) { + values("0.0"); + } + } + timing(){ + timing_type :"minimum_period"; + related_pin : clk0; + rise_constraint(scalar) { + values("0"); + } + fall_constraint(scalar) { + values("0"); + } + } + } + + bus(DIN1){ + bus_type : DATA; + direction : input; + capacitance : 9.8242; + memory_write(){ + address : ADDR1; + clocked_on : clk1; + } + pin(DIN1[1:0]){ + timing(){ + timing_type : setup_rising; + related_pin : "clk1"; + rise_constraint(CONSTRAINT_TABLE) { + values("0.009, 0.009, 0.009",\ + "0.009, 0.009, 0.009",\ + "0.009, 0.009, 0.009"); + } + fall_constraint(CONSTRAINT_TABLE) { + values("0.009, 0.009, 0.009",\ + "0.009, 0.009, 0.009",\ + "0.009, 0.009, 0.009"); + } + } + timing(){ + timing_type : hold_rising; + related_pin : "clk1"; + rise_constraint(CONSTRAINT_TABLE) { + values("0.001, 0.001, 0.001",\ + "0.001, 0.001, 0.001",\ + "0.001, 0.001, 0.001"); + } + fall_constraint(CONSTRAINT_TABLE) { + values("0.001, 0.001, 0.001",\ + "0.001, 0.001, 0.001",\ + "0.001, 0.001, 0.001"); + } + } + } + } + bus(ADDR1){ + bus_type : ADDR; + direction : input; + capacitance : 9.8242; + max_transition : 0.4; + pin(ADDR1[3:0]){ + timing(){ + timing_type : setup_rising; + related_pin : "clk1"; + rise_constraint(CONSTRAINT_TABLE) { + values("0.009, 0.009, 0.009",\ + "0.009, 0.009, 0.009",\ + "0.009, 0.009, 0.009"); + } + fall_constraint(CONSTRAINT_TABLE) { + values("0.009, 0.009, 0.009",\ + "0.009, 0.009, 0.009",\ + "0.009, 0.009, 0.009"); + } + } + timing(){ + timing_type : hold_rising; + related_pin : "clk1"; + rise_constraint(CONSTRAINT_TABLE) { + values("0.001, 0.001, 0.001",\ + "0.001, 0.001, 0.001",\ + "0.001, 0.001, 0.001"); + } + fall_constraint(CONSTRAINT_TABLE) { + values("0.001, 0.001, 0.001",\ + "0.001, 0.001, 0.001",\ + "0.001, 0.001, 0.001"); + } + } + } + } + + pin(CSb1){ + direction : input; + capacitance : 9.8242; + timing(){ + timing_type : setup_rising; + related_pin : "clk1"; + rise_constraint(CONSTRAINT_TABLE) { + values("0.009, 0.009, 0.009",\ + "0.009, 0.009, 0.009",\ + "0.009, 0.009, 0.009"); + } + fall_constraint(CONSTRAINT_TABLE) { + values("0.009, 0.009, 0.009",\ + "0.009, 0.009, 0.009",\ + "0.009, 0.009, 0.009"); + } + } + timing(){ + timing_type : hold_rising; + related_pin : "clk1"; + rise_constraint(CONSTRAINT_TABLE) { + values("0.001, 0.001, 0.001",\ + "0.001, 0.001, 0.001",\ + "0.001, 0.001, 0.001"); + } + fall_constraint(CONSTRAINT_TABLE) { + values("0.001, 0.001, 0.001",\ + "0.001, 0.001, 0.001",\ + "0.001, 0.001, 0.001"); + } + } + } + + pin(clk1){ + clock : true; + direction : input; + capacitance : 9.8242; + internal_power(){ + when : "!CSb1 & clk1"; + rise_power(scalar){ + values("15.41143495605"); + } + fall_power(scalar){ + values("15.41143495605"); + } + } + internal_power(){ + when : "CSb1"; + rise_power(scalar){ + values("0"); + } + fall_power(scalar){ + values("0"); + } + } + timing(){ + timing_type :"min_pulse_width"; + related_pin : clk1; + rise_constraint(scalar) { + values("0.0"); + } + fall_constraint(scalar) { + values("0.0"); + } + } + timing(){ + timing_type :"minimum_period"; + related_pin : clk1; + rise_constraint(scalar) { + values("0"); + } + fall_constraint(scalar) { + values("0"); + } + } + } + + bus(DOUT2){ + bus_type : DATA; + direction : output; + max_capacitance : 78.5936; + min_capacitance : 2.45605; + memory_read(){ + address : ADDR2; + } + pin(DOUT2[1:0]){ + timing(){ + timing_sense : non_unate; + related_pin : "clk2"; + timing_type : rising_edge; + cell_rise(CELL_TABLE) { + values("0.079, 0.079, 0.079",\ + "0.079, 0.079, 0.079",\ + "0.079, 0.079, 0.079"); + } + cell_fall(CELL_TABLE) { + values("0.079, 0.079, 0.079",\ + "0.079, 0.079, 0.079",\ + "0.079, 0.079, 0.079"); + } + rise_transition(CELL_TABLE) { + values("0.001, 0.001, 0.001",\ + "0.001, 0.001, 0.001",\ + "0.001, 0.001, 0.001"); + } + fall_transition(CELL_TABLE) { + values("0.001, 0.001, 0.001",\ + "0.001, 0.001, 0.001",\ + "0.001, 0.001, 0.001"); + } + } + } + } + + bus(ADDR2){ + bus_type : ADDR; + direction : input; + capacitance : 9.8242; + max_transition : 0.4; + pin(ADDR2[3:0]){ + timing(){ + timing_type : setup_rising; + related_pin : "clk2"; + rise_constraint(CONSTRAINT_TABLE) { + values("0.009, 0.009, 0.009",\ + "0.009, 0.009, 0.009",\ + "0.009, 0.009, 0.009"); + } + fall_constraint(CONSTRAINT_TABLE) { + values("0.009, 0.009, 0.009",\ + "0.009, 0.009, 0.009",\ + "0.009, 0.009, 0.009"); + } + } + timing(){ + timing_type : hold_rising; + related_pin : "clk2"; + rise_constraint(CONSTRAINT_TABLE) { + values("0.001, 0.001, 0.001",\ + "0.001, 0.001, 0.001",\ + "0.001, 0.001, 0.001"); + } + fall_constraint(CONSTRAINT_TABLE) { + values("0.001, 0.001, 0.001",\ + "0.001, 0.001, 0.001",\ + "0.001, 0.001, 0.001"); + } + } + } + } + + pin(CSb2){ + direction : input; + capacitance : 9.8242; + timing(){ + timing_type : setup_rising; + related_pin : "clk2"; + rise_constraint(CONSTRAINT_TABLE) { + values("0.009, 0.009, 0.009",\ + "0.009, 0.009, 0.009",\ + "0.009, 0.009, 0.009"); + } + fall_constraint(CONSTRAINT_TABLE) { + values("0.009, 0.009, 0.009",\ + "0.009, 0.009, 0.009",\ + "0.009, 0.009, 0.009"); + } + } + timing(){ + timing_type : hold_rising; + related_pin : "clk2"; + rise_constraint(CONSTRAINT_TABLE) { + values("0.001, 0.001, 0.001",\ + "0.001, 0.001, 0.001",\ + "0.001, 0.001, 0.001"); + } + fall_constraint(CONSTRAINT_TABLE) { + values("0.001, 0.001, 0.001",\ + "0.001, 0.001, 0.001",\ + "0.001, 0.001, 0.001"); + } + } + } + + pin(clk2){ + clock : true; + direction : input; + capacitance : 9.8242; + internal_power(){ + when : "!CSb2 & !clk2"; + rise_power(scalar){ + values("15.41143495605"); + } + fall_power(scalar){ + values("15.41143495605"); + } + } + internal_power(){ + when : "CSb2"; + rise_power(scalar){ + values("0"); + } + fall_power(scalar){ + values("0"); + } + } + timing(){ + timing_type :"min_pulse_width"; + related_pin : clk2; + rise_constraint(scalar) { + values("0.0"); + } + fall_constraint(scalar) { + values("0.0"); + } + } + timing(){ + timing_type :"minimum_period"; + related_pin : clk2; + rise_constraint(scalar) { + values("0"); + } + fall_constraint(scalar) { + values("0"); + } + } + } + + } +} diff --git a/compiler/datasheet/server_scripts/files/testfile.asdf b/compiler/datasheet/server_scripts/files/testfile.asdf new file mode 100644 index 00000000..e69de29b diff --git a/compiler/datasheet/server_scripts/templates/index.html b/compiler/datasheet/server_scripts/templates/index.html new file mode 100644 index 00000000..ae448a80 --- /dev/null +++ b/compiler/datasheet/server_scripts/templates/index.html @@ -0,0 +1,5 @@ +
    + {% for file in files %} +
  • {{ file }}
  • + {% endfor %} +
From a56e3f609b67ac242d5709462d54aa83d143a72b Mon Sep 17 00:00:00 2001 From: Jesse Cirimelli-Low Date: Wed, 28 Nov 2018 09:39:58 -0800 Subject: [PATCH 39/78] removed debug print statements --- compiler/datasheet/server_scripts/filelist.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/compiler/datasheet/server_scripts/filelist.py b/compiler/datasheet/server_scripts/filelist.py index 2196a419..01f32682 100644 --- a/compiler/datasheet/server_scripts/filelist.py +++ b/compiler/datasheet/server_scripts/filelist.py @@ -12,7 +12,7 @@ class filelist: for file in files: self.list.append(root + '/' + file) out_file.write('{}/{}\n'.format(root,file)) - print('{}/{}'.format(root,file)) + #print('{}/{}'.format(root,file)) From 44638cb885e3014ce8ea7069ec717e0caa38aed2 Mon Sep 17 00:00:00 2001 From: Jesse Cirimelli-Low Date: Wed, 28 Nov 2018 16:48:24 -0800 Subject: [PATCH 40/78] jinja2 file browser working --- compiler/datasheet/server_scripts/__init__.py | 11 ++--- compiler/datasheet/server_scripts/filelist.py | 1 + .../files/temp/testfolder/file1 | 0 .../files/temp/testfolder/file2 | 0 .../files/temp/testfolder2/file3 | 0 .../files/temp/testfolder2/file4 | 0 .../server_scripts/templates/index.html | 42 +++++++++++++++++-- 7 files changed, 42 insertions(+), 12 deletions(-) create mode 100644 compiler/datasheet/server_scripts/files/temp/testfolder/file1 create mode 100644 compiler/datasheet/server_scripts/files/temp/testfolder/file2 create mode 100644 compiler/datasheet/server_scripts/files/temp/testfolder2/file3 create mode 100644 compiler/datasheet/server_scripts/files/temp/testfolder2/file4 diff --git a/compiler/datasheet/server_scripts/__init__.py b/compiler/datasheet/server_scripts/__init__.py index f702e604..f670aeaf 100644 --- a/compiler/datasheet/server_scripts/__init__.py +++ b/compiler/datasheet/server_scripts/__init__.py @@ -7,23 +7,18 @@ from filelist import * filedir = './files' file_data = './filelist.info' -def render_without_request(template_name, **template_vars): - env = jinja2.Environment( - loader = jinja2.PackageLoader('server_scripts','templates') - ) - template = env.get_template(template_name) - return template.render(**template_vars) app = Flask('server_scripts') + if __name__ == '__main__': files = filelist() files.update_filelist(filedir,file_data) - f = open('./output/index.html','w') + f = open('./index.html','w') with app.app_context(): - f.write(render_template('index.html', files=files.list)) + f.write(render_template('index.html', filedir = filedir , os = os)) diff --git a/compiler/datasheet/server_scripts/filelist.py b/compiler/datasheet/server_scripts/filelist.py index 01f32682..ec2eee88 100644 --- a/compiler/datasheet/server_scripts/filelist.py +++ b/compiler/datasheet/server_scripts/filelist.py @@ -16,3 +16,4 @@ class filelist: + diff --git a/compiler/datasheet/server_scripts/files/temp/testfolder/file1 b/compiler/datasheet/server_scripts/files/temp/testfolder/file1 new file mode 100644 index 00000000..e69de29b diff --git a/compiler/datasheet/server_scripts/files/temp/testfolder/file2 b/compiler/datasheet/server_scripts/files/temp/testfolder/file2 new file mode 100644 index 00000000..e69de29b diff --git a/compiler/datasheet/server_scripts/files/temp/testfolder2/file3 b/compiler/datasheet/server_scripts/files/temp/testfolder2/file3 new file mode 100644 index 00000000..e69de29b diff --git a/compiler/datasheet/server_scripts/files/temp/testfolder2/file4 b/compiler/datasheet/server_scripts/files/temp/testfolder2/file4 new file mode 100644 index 00000000..e69de29b diff --git a/compiler/datasheet/server_scripts/templates/index.html b/compiler/datasheet/server_scripts/templates/index.html index ae448a80..a2e3ec13 100644 --- a/compiler/datasheet/server_scripts/templates/index.html +++ b/compiler/datasheet/server_scripts/templates/index.html @@ -1,5 +1,39 @@ -
    - {% for file in files %} -
  • {{ file }}
  • - {% endfor %} + +
+ + + + {% for root, dir, files in os.walk(filedir) %} + + + +
+ {% for f in files %} + +
+

file information

+
+ {% endfor %} +
+ + + {% endfor %} + + + From 79c4b3c4cd83ea79dffe19d7a8765b4a8a3af5a1 Mon Sep 17 00:00:00 2001 From: Jesse Cirimelli-Low Date: Wed, 28 Nov 2018 16:56:24 -0800 Subject: [PATCH 41/78] added files links --- .../server_scripts/templates/index.html | 23 +++++++++++-------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/compiler/datasheet/server_scripts/templates/index.html b/compiler/datasheet/server_scripts/templates/index.html index a2e3ec13..66720d67 100644 --- a/compiler/datasheet/server_scripts/templates/index.html +++ b/compiler/datasheet/server_scripts/templates/index.html @@ -2,24 +2,27 @@ + +
- {% for root, dir, files in os.walk(filedir) %} + {% for root, dir, files in os.walk(filedir) %} - -
- {% for f in files %} - +
-

file information

-
+ {% for f in files %} + +
+ link +
+ {% endfor %} +
+ + {% endfor %}
- {% endfor %} - -